Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
11fb527
Migrate support replies to OpenAI Agents SDK with grounded compact re…
jerelvelarde Sep 17, 2026
ef53f6a
Use Luna throughout support AI and finish bounded investigations
jerelvelarde Sep 18, 2026
9fd3fff
Preserve structured details in saved AI response suggestions
jerelvelarde Sep 20, 2026
c9aa06f
fix(ai): reject invalid Pathfinder query caps at config load
jerelvelarde Sep 20, 2026
8b5ec8f
Align supported Node runtime with the OpenAI dependency stack
jerelvelarde Sep 20, 2026
c3acfa7
fix(ai): reject OpenAI reasoning models under Anthropic
jerelvelarde Sep 20, 2026
9abe1f1
fix(ai): preserve critical incident classification in fallback
jerelvelarde Sep 20, 2026
70ad2d6
Reject delivered recovery rows that still owe escalation
jerelvelarde Sep 20, 2026
1934b0c
fix(ai): forward version filters in Pathfinder wrappers
jerelvelarde Sep 20, 2026
d38efd0
fix(ai): keep sentiment labels consistent with rounded scores
jerelvelarde Sep 20, 2026
8e1dd77
fix(ai): constrain critical escalation to incident context
jerelvelarde Sep 20, 2026
a9db1d8
fix(ai): broaden searches after filtering unusable evidence
jerelvelarde Sep 20, 2026
5af678f
fix(ai): preserve complete formatted streaming output
jerelvelarde Sep 20, 2026
6b927d4
fix(queue): fail when delivery bookkeeping cannot be persisted
jerelvelarde Sep 20, 2026
8f9c8b2
fix(queue): persist owed handoff reason before publication
jerelvelarde Sep 20, 2026
969166f
fix(queue): keep settled handoff markers cleared after post failure
jerelvelarde Sep 20, 2026
ae47fb6
Preserve multipart replies in saved AI suggestions
jerelvelarde Sep 20, 2026
5d7c08a
test(ai): isolate OpenAI suites from ambient model settings
jerelvelarde Sep 20, 2026
218ca54
Reject uncitable strict code evidence
jerelvelarde Sep 20, 2026
2f8c301
fix(queue): preserve complete shadow output
jerelvelarde Sep 20, 2026
27f0fe3
Clear cancelled Pathfinder sessions
jerelvelarde Sep 20, 2026
b0e01a0
fix(ai): preserve incident question priority context
jerelvelarde Sep 20, 2026
8f9e78e
fix(ai): keep handoff diagnostics private
jerelvelarde Sep 20, 2026
983cb24
Normalize git slash repository citations
jerelvelarde Sep 20, 2026
233baee
fix(ai): preserve private investigation failure diagnoses
jerelvelarde Sep 20, 2026
752670f
Reject uncited strict code evidence
jerelvelarde Sep 20, 2026
b9dc5bf
fix support source path citations
jerelvelarde Sep 20, 2026
ff577e5
fix ai classifier passive critical negation
jerelvelarde Sep 20, 2026
18f528f
fix ai classifier repeated incident mentions
jerelvelarde Sep 20, 2026
3c62643
Preserve deterministic suppression handoff reasons
jerelvelarde Sep 20, 2026
f330269
Reject malformed strict code evidence citations
jerelvelarde Sep 20, 2026
ef370ea
Enforce draft lint before publishing legacy streams
jerelvelarde Sep 20, 2026
6c7e4ec
fix(ai): scope critical incidents to grammatical context
jerelvelarde Sep 20, 2026
b82889a
Fix passive critical incident prevention classification
jerelvelarde Sep 20, 2026
3a816e4
fix(ai): preserve critical not-only incident reports
jerelvelarde Sep 20, 2026
8f2812b
fix(outpost-ai): preserve rejected support run usage
jerelvelarde Sep 20, 2026
4e46f8f
fix(ai): preserve incident grammar boundaries
jerelvelarde Sep 20, 2026
f4a2ff1
fix escaped support reply citations
jerelvelarde Sep 20, 2026
590cc9a
fix oversized read_source handling
jerelvelarde Sep 21, 2026
5fc2b2c
Fix causal diagnostic question incident scope
jerelvelarde Sep 21, 2026
e5ab61f
fix(outpost-ai): reject blank selected config values
jerelvelarde Sep 21, 2026
8807b29
Fix copular negation incident scope
jerelvelarde Sep 21, 2026
89658cf
fix(ai): normalize model override whitespace
jerelvelarde Sep 21, 2026
8259704
Fix causal diagnostic question scope
jerelvelarde Sep 21, 2026
02d0866
fix(ai): recognize bounded adverbial production-down reports
jerelvelarde Sep 21, 2026
a26c918
Fix passive failed-prevention incident floor
jerelvelarde Sep 21, 2026
d574562
Bound denial-relation incident negations
jerelvelarde Sep 21, 2026
ffec8a7
fix(ai): reject the OpenAI chat-latest alias under Anthropic
jerelvelarde Sep 21, 2026
c422090
fix(ai): preserve shared negation across incident list commas
jerelvelarde Sep 21, 2026
e89589e
fix(ai): validate strict legacy evidence before coercion
jerelvelarde Sep 21, 2026
daea5b2
fix(ai): collapse structured finals by rendered text
jerelvelarde Sep 21, 2026
9903772
fix(ai): recognize quantified and never-had incident absence
jerelvelarde Sep 21, 2026
11a500d
fix(ai): reject fine-tuned OpenAI models under Anthropic
jerelvelarde Sep 21, 2026
e26f153
fix(ai): validate reference destinations behind escaped and multiline…
jerelvelarde Sep 21, 2026
e34b3ce
fix(ai): recognize fine-tuned OpenAI models by their base family
jerelvelarde Sep 21, 2026
1a99ddc
fix(ai): ground Markdown reference links through CommonMark parsing
jerelvelarde Sep 21, 2026
1252e2b
fix(ai): ground support-reply links in the destinations GFM publishes
jerelvelarde Sep 22, 2026
2b1ead0
fix(ai): distinguish unresolved incidents from absence reports
jerelvelarde Sep 22, 2026
8efb93b
fix(ai): read a conditional protasis as a hypothesis, not an incident…
jerelvelarde Sep 22, 2026
aa72fac
fix(ai): read code the renderer resolves, not code at column three
jerelvelarde Sep 22, 2026
279c68f
fix(ai): read a closed backtick run as a code span, not a fence
jerelvelarde Sep 22, 2026
373a6e8
fix(ai): read a raw-HTML guard as the grammar reads it, not at every '<'
jerelvelarde Sep 22, 2026
5ffc0cb
fix(ai): treat `](` as a destination only where a link label opened it
jerelvelarde Sep 22, 2026
d8c932f
fix(ai): compare a destination in the form its own syntax publishes
jerelvelarde Sep 22, 2026
b21d810
fix(ai): end an autolink where the grammar ends it, not at a punctuat…
jerelvelarde Sep 22, 2026
92ff472
fix(ai): validate the reply the reader receives, not the fields it ca…
jerelvelarde Sep 22, 2026
32da437
fix(ai): mask the code spans the grammar publishes, not what a tag sc…
jerelvelarde Sep 22, 2026
fda282b
fix(ai): distinguish planned actions and tooling from incident reports
jerelvelarde Sep 22, 2026
12d2e85
fix(ai): read a closed code span's later lines as span, not as a fence
jerelvelarde Sep 22, 2026
c00de5e
fix(ai): rebuild a www scheme for the host case the grammar linkifies
jerelvelarde Sep 22, 2026
a4bf059
fix(ai): preserve cited destinations when publishing applicability de…
jerelvelarde Sep 22, 2026
e5bedd2
fix(ai): give each gap in the negated-object phrase one whitespace co…
jerelvelarde Sep 22, 2026
4d9c1d3
fix(ai): locate a definition's destination past its container's markers
jerelvelarde Sep 22, 2026
61b74e7
fix(ai): keep an incident standing when it modifies a presupposing head
jerelvelarde Sep 22, 2026
b9f889d
Merge origin/main (20c5580) into jerel/r15-negated-incident-head
jerelvelarde Oct 6, 2026
c602d6c
fix(ai): ground a `<…>` autolink on the address the grammar closes
jerelvelarde Oct 7, 2026
c6f4922
fix(ai): return recoverable GitHub evidence failures to the investigator
jerelvelarde Oct 7, 2026
c3a41c7
fix(queue): keep an owed handoff from hiding an unknown delivery
jerelvelarde Oct 7, 2026
78d6f8c
fix(ai): authenticate support-agent GitHub evidence reads with the Ap…
jerelvelarde Oct 7, 2026
2d7c50f
test(ai): cover the seam where evidence auth meets recoverable-failur…
jerelvelarde Oct 7, 2026
a5f8bb9
fix(ai): serialize the whole web response with its footer last
jerelvelarde Oct 7, 2026
1239b8b
fix(ai): bound GitHub evidence authorization by the investigation dea…
jerelvelarde Oct 7, 2026
7d37eff
fix(ai): count the footer in the Discord message budget
jerelvelarde Oct 7, 2026
6dedf0e
fix(ai): classify an exhausted GitHub rate limit from its response he…
jerelvelarde Oct 7, 2026
0e6ea38
fix(ai): report evidence-auth failure as a safe operator diagnostic
jerelvelarde Oct 7, 2026
074b9ed
fix(ai): keep validated code literal across both web serializations
jerelvelarde Oct 7, 2026
b09050e
fix(ai): preserve deterministic handoff reasons the pipeline already …
jerelvelarde Oct 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,19 @@ NEXT_PUBLIC_AUTH_PROVIDER="credentials"
# OIDC_CLIENT_SECRET=""

# ─── AI Pipeline ─────────────────────────────────────────────────────────────
ANTHROPIC_API_KEY=""
OPENAI_API_KEY="" # Pathfinder embeddings (text-embedding-3-small)
ANTHROPIC_API_KEY="" # Optional: explicit anthropic rollback / direct legacy generator
OPENAI_API_KEY="" # Required default: investigation, verification, classification, sentiment
PATHFINDER_URL="http://localhost:3100"
PATHFINDER_MCP_URL= # Pathfinder knowledge base URL
FALLBACK_DOCS_URL= # Fallback documentation URL
AI_RESPONSE_MODEL= # Override AI response model (default: claude-sonnet-4-20250514)
AI_CONFIDENCE_MODEL= # Override confidence scoring model
AI_CLASSIFIER_MODEL= # Override ticket classifier model
AI_SENTIMENT_MODEL= # Override sentiment analysis model
AI_RESPONSE_PROVIDER=openai # openai (default) or anthropic (rollback)
AI_RESPONSE_MODEL= # Defaults to gpt-5.6-luna; claude-sonnet-4-6 for anthropic
AI_LEGACY_RESPONSE_MODEL= # Direct legacy generator default: claude-sonnet-4-6
AI_DRAFT_LINT_MODE=report # report (default) or enforce after false-positive review
OPENAI_AGENTS_DISABLE_TRACING=0 # Set 1 to disable; sensitive trace payloads are always off
AI_CONFIDENCE_MODEL= # Default gpt-5.6-luna (Claude Haiku for anthropic)
AI_CLASSIFIER_MODEL= # Default gpt-5.6-luna (Claude Haiku for anthropic)
AI_SENTIMENT_MODEL= # Default gpt-5.6-luna (Claude Haiku for anthropic)

# ─── Shadow Mode ─────────────────────────────────────────────────────────────
# Set to 'true' to run the full AI pipeline but LOG responses instead of posting
Expand Down
24 changes: 13 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ AI-powered support operations platform by CopilotKit. Outpost unifies customer s
├──────────┬──────────┬─────────────┼────────────┬────────────────┤
│ pkg/ai │ pkg/queue│ pkg/shared │ pkg/db │ │
│ Pathfinder│ Postgres │ Types & │ Prisma │ │
│ + Claude │ Job Queue│ Constants │ Schema │ │
│ + OpenAI │ Job Queue│ Constants │ Schema │ │
├──────────┴──────────┴─────────────┴────────────┘ │
│ PostgreSQL 16 + pgvector │
└─────────────────────────────────────────────────────────────────┘
Expand All @@ -24,7 +24,7 @@ AI-powered support operations platform by CopilotKit. Outpost unifies customer s

### Prerequisites

- Node.js >= 20
- Node.js >= 24
- pnpm >= 9
- Docker (for local PostgreSQL)

Expand Down Expand Up @@ -56,16 +56,18 @@ pnpm db:seed
pnpm dev
```

Set `OPENAI_API_KEY` for the default Luna support investigator, independent verifier, classifier, and sentiment analyzer. `ANTHROPIC_API_KEY` is only needed for the explicit Anthropic rollback or direct legacy generator. See [support-agent configuration](docs/support-agent.md).

### Key Commands

| Command | Description |
|---------|-------------|
| `pnpm dev` | Start all apps in development mode |
| `pnpm build` | Build all apps and packages |
| `pnpm lint` | Lint all packages |
| `pnpm typecheck` | Type-check all packages |
| `pnpm test` | Run all tests |
| `pnpm format` | Format code with Prettier |
| Command | Description |
| ---------------- | ---------------------------------- |
| `pnpm dev` | Start all apps in development mode |
| `pnpm build` | Build all apps and packages |
| `pnpm lint` | Lint all packages |
| `pnpm typecheck` | Type-check all packages |
| `pnpm test` | Run all tests |
| `pnpm format` | Format code with Prettier |

## Project Structure

Expand All @@ -77,7 +79,7 @@ outpost/
│ ├── github-app/ # GitHub App for issue/discussion tracking
│ └── docs/ # Public documentation site
├── packages/
│ ├── ai/ # AI pipeline (Pathfinder + Claude)
│ ├── ai/ # AI pipeline (Pathfinder + OpenAI)
│ ├── db/ # Prisma schema and database client
│ ├── queue/ # Postgres-based job queue
│ └── shared/ # Shared types, constants, utilities
Expand Down
6 changes: 3 additions & 3 deletions apps/discord-bot/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# ── Stage 1: prune the monorepo to only what @copilotkit/outpost-discord-bot needs ──────
FROM node:20-alpine AS pruner
FROM node:24-alpine AS pruner
RUN apk add --no-cache libc6-compat
WORKDIR /app

Expand All @@ -10,7 +10,7 @@ COPY . .
RUN turbo prune @copilotkit/outpost-discord-bot --docker

# ── Stage 2: install dependencies and build ──────────────────────────────────
FROM node:20-alpine AS installer
FROM node:24-alpine AS installer
RUN apk add --no-cache libc6-compat openssl
WORKDIR /app

Expand All @@ -24,7 +24,7 @@ COPY --from=pruner /app/tsconfig.json ./tsconfig.json
RUN pnpm turbo run build --filter=@copilotkit/outpost-discord-bot

# ── Stage 3: production image ────────────────────────────────────────────────
FROM node:20-alpine AS runner
FROM node:24-alpine AS runner
RUN apk add --no-cache libc6-compat openssl

RUN addgroup --system --gid 1001 outpost && \
Expand Down
8 changes: 4 additions & 4 deletions apps/docs/architecture/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ <h2>System Diagram</h2>
├─────────┬────────┴──┬───────────┬───┴──────────────────┴────────────────────┤
│ <span class="str">pkg/ai</span> │<span class="str">pkg/queue</span> │<span class="str">pkg/shared</span> │ <span class="str">pkg/db</span> │
│Pathfinder│ Postgres │ Types &amp; │ Prisma │
│+ Claude │ Job Queue │ Constants │ Schema │
│+ OpenAI │ Job Queue │ Constants │ Schema │
├─────────┴───────────┴───────────┴───────────────────────────────────────────┤
│ PostgreSQL 16 │
└──────────────────────────────────────────────────────────────────────────────┘</code></pre>
Expand Down Expand Up @@ -108,8 +108,8 @@ <h2>Shared Packages</h2>
<h3>packages/ai — AI Pipeline</h3>
<p>
The intelligence layer. Uses <a href="https://pathfinder.copilotkit.dev" target="_blank">Pathfinder</a>
for semantic search across the knowledge base and Claude for ticket classification,
priority assignment, response drafting, and routing decisions. All AI operations go
for semantic search across the knowledge base and OpenAI Agents SDK with Luna for ticket classification,
priority assignment, response drafting, independent verification, sentiment analysis, and routing decisions. All AI operations go
through this package.
</p>

Expand Down Expand Up @@ -198,7 +198,7 @@ <h2>Technology Stack</h2>
<tr><td>Language</td><td>TypeScript</td></tr>
<tr><td>Database</td><td>PostgreSQL 16</td></tr>
<tr><td>ORM</td><td>Prisma</td></tr>
<tr><td>AI</td><td>Claude (Anthropic) + Pathfinder</td></tr>
<tr><td>AI</td><td>OpenAI Agents SDK (Luna) + Pathfinder</td></tr>
<tr><td>Discord</td><td>discord.js</td></tr>
<tr><td>Slack</td><td>@slack/bolt</td></tr>
<tr><td>Teams</td><td>Bot Framework SDK (botbuilder)</td></tr>
Expand Down
19 changes: 17 additions & 2 deletions apps/docs/configuration/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,27 @@ <h2>AI Configuration</h2>
<table class="env-table">
<thead><tr><th>Variable</th><th>Description</th><th>Default</th></tr></thead>
<tbody>
<tr><td>ANTHROPIC_API_KEY</td><td>Anthropic API key for Claude</td><td>&mdash;</td></tr>
<tr><td>AI_MODEL</td><td>Claude model to use for triage and responses</td><td>claude-sonnet-4-6</td></tr>
<tr><td>OPENAI_API_KEY</td><td>Required for the default Luna investigator, independent verifier, classifier, and sentiment analyzer</td><td>&mdash;</td></tr>
<tr><td>ANTHROPIC_API_KEY</td><td>Optional; required only for the Anthropic rollback or direct legacy generator</td><td>&mdash;</td></tr>
<tr><td>AI_RESPONSE_PROVIDER</td><td>Provider for response generation and auxiliary checks: <code>openai</code> or <code>anthropic</code></td><td>openai</td></tr>
<tr><td>AI_RESPONSE_MODEL</td><td>Investigator model; defaults to <code>claude-sonnet-4-6</code> for Anthropic</td><td>gpt-5.6-luna</td></tr>
<tr><td>AI_CONFIDENCE_MODEL</td><td>Independent confidence verifier; defaults to <code>claude-haiku-4-5-20251001</code> for Anthropic</td><td>gpt-5.6-luna</td></tr>
<tr><td>AI_CLASSIFIER_MODEL</td><td>Ticket classifier; defaults to <code>claude-haiku-4-5-20251001</code> for Anthropic</td><td>gpt-5.6-luna</td></tr>
<tr><td>AI_SENTIMENT_MODEL</td><td>Sentiment analyzer; defaults to <code>claude-haiku-4-5-20251001</code> for Anthropic</td><td>gpt-5.6-luna</td></tr>
<tr><td>AI_LEGACY_RESPONSE_MODEL</td><td>Direct legacy-generator model when the pipeline provider is OpenAI</td><td>claude-sonnet-4-6</td></tr>
<tr><td>AI_DRAFT_LINT_MODE</td><td><code>report</code> records violations; <code>enforce</code> routes blocking violations to review</td><td>report</td></tr>
<tr><td>OPENAI_AGENTS_DISABLE_TRACING</td><td>Set to <code>1</code> to disable SDK tracing; sensitive trace payloads are always excluded</td><td>0</td></tr>
<tr><td>PATHFINDER_MCP_URL</td><td>Pathfinder MCP server URL for knowledge base search</td><td>https://mcp.copilotkit.ai</td></tr>
</tbody>
</table>

<p>
Configure <code>OPENAI_API_KEY</code> on the worker and web service. To roll back, set
<code>AI_RESPONSE_PROVIDER=anthropic</code>, provide <code>ANTHROPIC_API_KEY</code>,
and clear any OpenAI model overrides above. Model overrides must match the selected
provider; failures never switch providers automatically.
</p>

<h2>Discord Bot</h2>
<table class="env-table">
<thead><tr><th>Variable</th><th>Description</th><th>Default</th></tr></thead>
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/contributing/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ <h2>Project Structure</h2>
│ ├── github-app/ <span class="cm"># GitHub App webhook receiver</span>
│ └── docs/ <span class="cm"># Documentation site (this site)</span>
├── packages/
│ ├── ai/ <span class="cm"># AI pipeline (Pathfinder + Claude)</span>
│ ├── ai/ <span class="cm"># AI pipeline (Pathfinder + OpenAI)</span>
│ ├── db/ <span class="cm"># Prisma schema and client</span>
│ ├── queue/ <span class="cm"># Postgres-backed job queue</span>
│ └── shared/ <span class="cm"># Shared types and utilities</span>
Expand Down
7 changes: 4 additions & 3 deletions apps/docs/deployment/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ <h1>Deployment Guide</h1>
<h2>Requirements</h2>
<ul>
<li><strong>PostgreSQL 16</strong> with pgvector extension (required by Pathfinder for embeddings)</li>
<li><strong>Node.js 20+</strong> runtime for all five services</li>
<li><strong>Node.js 24+</strong> runtime for all five services</li>
<li><strong>Persistent process manager</strong> for the Discord and Slack bots (they maintain WebSocket connections)</li>
<li><strong>Public HTTPS endpoint</strong> for the GitHub App and Teams bot webhook receivers</li>
</ul>
Expand Down Expand Up @@ -151,7 +151,7 @@ <h3>Railway (Recommended)</h3>
</ul>
</li>
<li>Share <code>DATABASE_URL</code> across all services via Railway's variable references (<code>${{Postgres.DATABASE_URL}}</code>)</li>
<li>Fill in secret environment variables (<code>DISCORD_TOKEN</code>, <code>ANTHROPIC_API_KEY</code>, etc.)</li>
<li>Fill in secret environment variables (<code>DISCORD_TOKEN</code>, <code>OPENAI_API_KEY</code>, etc.)</li>
<li>Configure custom domains for the web dashboard and GitHub App webhook endpoint</li>
</ol>

Expand Down Expand Up @@ -200,7 +200,8 @@ <h2>Environment Checklist</h2>
<p>Before deploying, verify these are all set:</p>
<ul>
<li>&#9745; <code>DATABASE_URL</code> pointing to production PostgreSQL</li>
<li>&#9745; <code>ANTHROPIC_API_KEY</code> for AI features</li>
<li>&#9745; <code>OPENAI_API_KEY</code> on the worker and web service for all default AI features</li>
<li><code>ANTHROPIC_API_KEY</code> only if selecting <code>AI_RESPONSE_PROVIDER=anthropic</code> for rollback or using the legacy generator directly</li>
<li>&#9745; <code>DISCORD_BOT_TOKEN</code> and related Discord vars</li>
<li>&#9745; <code>GITHUB_APP_ID</code>, <code>GITHUB_PRIVATE_KEY</code>, and webhook secret</li>
<li>&#9745; <code>SLACK_BOT_TOKEN</code>, <code>SLACK_APP_TOKEN</code>, <code>SLACK_SIGNING_SECRET</code></li>
Expand Down
4 changes: 2 additions & 2 deletions apps/docs/getting-started/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,13 @@
<main class="docs-content">
<h1>Quick Start</h1>
<p class="lead">
Get Outpost running locally in under 5 minutes. You need Node.js 20+, pnpm 9+, and Docker
Get Outpost running locally in under 5 minutes. You need Node.js 24+, pnpm 9+, and Docker
for the local PostgreSQL instance.
</p>

<h2>Prerequisites</h2>
<ul>
<li><strong>Node.js</strong> &ge; 20.0.0</li>
<li><strong>Node.js</strong> &ge; 24.0.0</li>
<li><strong>pnpm</strong> &ge; 9.15.0</li>
<li><strong>Docker</strong> &amp; Docker Compose (for local PostgreSQL)</li>
<li><strong>Git</strong></li>
Expand Down
8 changes: 4 additions & 4 deletions apps/docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,7 @@ <h1>Intelligent <span class="accent">support</span><br class="hero-break"> <span
channels: <span class="file">[support-forum]</span>

<span class="highlight">ai:</span>
model: <span class="file">claude-sonnet-4-6</span>
model: <span class="file">gpt-5.6-luna</span>
pathfinder: <span class="file">mcp.copilotkit.ai</span>
autoRespond: <span class="file">true</span>

Expand Down Expand Up @@ -401,7 +401,7 @@ <h2 class="fade-in">Everything you need for support operations</h2>
<div class="feature-card fade-in">
<div class="icon">&#129302;</div>
<h3>AI-Powered Triage</h3>
<p>Automatically classify, prioritize, and route incoming tickets using Claude and Pathfinder for intelligent knowledge base search.</p>
<p>Automatically classify, prioritize, and route incoming tickets using Luna and Pathfinder for intelligent knowledge base search.</p>
</div>
<div class="feature-card fade-in" style="transition-delay: 0.08s">
<div class="icon">&#127919;</div>
Expand Down Expand Up @@ -526,10 +526,10 @@ <h2 class="fade-in">Five processes, one database</h2>
</g>

<!-- Layer 3: pkg/ai -->
<g class="arch-node" data-tooltip="AI package powered by Pathfinder semantic search and Claude for intelligent ticket triage, knowledge base lookup, and suggested responses.">
<g class="arch-node" data-tooltip="AI package powered by Pathfinder semantic search and Luna for intelligent ticket triage, knowledge base lookup, and suggested responses.">
<rect x="50" y="350" width="210" height="108" rx="12" fill="url(#nodeGrad)" stroke="#f97316" stroke-opacity="0.3" stroke-width="1" />
<text x="155" y="383" text-anchor="middle" fill="#f97316" font-family="JetBrains Mono, monospace" font-size="11" font-weight="600" letter-spacing="0.5">&#129302; pkg/ai</text>
<text x="155" y="418" text-anchor="middle" fill="#64748b" font-family="Instrument Sans, sans-serif" font-size="10.5">Pathfinder + Claude</text>
<text x="155" y="418" text-anchor="middle" fill="#64748b" font-family="Instrument Sans, sans-serif" font-size="10.5">Pathfinder + Luna</text>
<text x="155" y="435" text-anchor="middle" fill="#64748b" font-family="Instrument Sans, sans-serif" font-size="10.5">Semantic search</text>
</g>

Expand Down
6 changes: 3 additions & 3 deletions apps/github-app/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# ── Stage 1: prune the monorepo to only what @copilotkit/outpost-github-app needs ───────
FROM node:20-alpine AS pruner
FROM node:24-alpine AS pruner
RUN apk add --no-cache libc6-compat
WORKDIR /app

Expand All @@ -10,7 +10,7 @@ COPY . .
RUN turbo prune @copilotkit/outpost-github-app --docker

# ── Stage 2: install dependencies and build ──────────────────────────────────
FROM node:20-alpine AS installer
FROM node:24-alpine AS installer
RUN apk add --no-cache libc6-compat openssl
WORKDIR /app

Expand All @@ -24,7 +24,7 @@ COPY --from=pruner /app/tsconfig.json ./tsconfig.json
RUN pnpm turbo run build --filter=@copilotkit/outpost-github-app

# ── Stage 3: production image ────────────────────────────────────────────────
FROM node:20-alpine AS runner
FROM node:24-alpine AS runner
RUN apk add --no-cache libc6-compat openssl

RUN addgroup --system --gid 1001 outpost && \
Expand Down
6 changes: 3 additions & 3 deletions apps/linear-sync/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# ── Stage 1: prune the monorepo to only what @copilotkit/outpost-linear-sync needs ────────
FROM node:20-alpine AS pruner
FROM node:24-alpine AS pruner
RUN apk add --no-cache libc6-compat
WORKDIR /app

Expand All @@ -10,7 +10,7 @@ COPY . .
RUN turbo prune @copilotkit/outpost-linear-sync --docker

# ── Stage 2: install dependencies and build ──────────────────────────────────
FROM node:20-alpine AS installer
FROM node:24-alpine AS installer
RUN apk add --no-cache libc6-compat openssl
WORKDIR /app

Expand All @@ -24,7 +24,7 @@ COPY --from=pruner /app/tsconfig.json ./tsconfig.json
RUN pnpm turbo run build --filter=@copilotkit/outpost-linear-sync

# ── Stage 3: production image ────────────────────────────────────────────────
FROM node:20-alpine AS runner
FROM node:24-alpine AS runner
RUN apk add --no-cache libc6-compat openssl

RUN addgroup --system --gid 1001 outpost && \
Expand Down
Loading
Loading