Conversation
…ider Agent-Logs-Url: https://github.com/dammyammy/Archon/sessions/10aedf44-074e-4f29-8d9d-87b146927cdd Co-authored-by: dammyammy <3688497+dammyammy@users.noreply.github.com>
Agent-Logs-Url: https://github.com/dammyammy/Archon/sessions/10aedf44-074e-4f29-8d9d-87b146927cdd Co-authored-by: dammyammy <3688497+dammyammy@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Adds Pi.dev as a third AI assistant provider in Archon, integrating the @mariozechner/pi-coding-agent SDK into the existing assistant client + workflow execution architecture.
Changes:
- Introduces a new
PiClientimplementingIAssistantClient, bridging Pi’s event stream to Archon’sAsyncGenerator<MessageChunk>streaming interface. - Propagates
provider: 'pi'support across config types/loaders, workflow schemas/parsing, execution, validation, and server API schemas/handlers. - Updates README documentation to describe Pi setup and usage.
Reviewed changes
Copilot reviewed 19 out of 19 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| README.md | Documents Pi as an AI backend (setup, env vars, model format, workflow examples). |
| packages/workflows/src/validator.ts | Adds Pi-specific warnings for Claude-only features (MCP, skills, hooks, tool restrictions). |
| packages/workflows/src/schemas/workflow.ts | Extends workflow-level provider enum to include pi. |
| packages/workflows/src/schemas/dag-node.ts | Extends node-level provider enum to include pi. |
| packages/workflows/src/model-validation.ts | Allows all models when provider is pi. |
| packages/workflows/src/loader.ts | Accepts pi as a valid provider during workflow parsing. |
| packages/workflows/src/executor.ts | Expands resolved provider typing to include pi (with comment about inference). |
| packages/workflows/src/deps.ts | Extends workflow config + assistant factory types to include pi and Pi assistant defaults. |
| packages/workflows/src/dag-executor.ts | Adds Pi option-building branch for node execution (model-only support). |
| packages/server/src/routes/schemas/config.schemas.ts | Extends API config schemas to include pi assistant config. |
| packages/server/src/routes/api.ts | Allows updating Pi assistant config via the config PATCH route. |
| packages/core/src/services/title-generator.ts | Updates docs to include pi as a possible assistant type. |
| packages/core/src/config/config-types.ts | Adds PiAssistantDefaults and extends assistant/provider unions to include pi. |
| packages/core/src/config/config-loader.ts | Adds Pi defaults, merge behavior, env overrides, and safe config mapping. |
| packages/core/src/clients/pi.ts | New Pi client implementation using Pi agent SDK + queue-based stream adapter. |
| packages/core/src/clients/index.ts | Re-exports PiClient. |
| packages/core/src/clients/factory.ts | Adds factory support for type === 'pi'. |
| packages/core/package.json | Adds @mariozechner/pi-coding-agent dependency. |
| packages/cli/src/commands/setup.ts | Expands default assistant typing to include pi. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
|
||
| - id: implement | ||
| depends_on: [plan] | ||
| provider: anthropic # per-node override (uses node-level provider) |
There was a problem hiding this comment.
The workflow example uses provider: anthropic, but workflow/node provider only accepts the assistant providers (claude, codex, pi). For Pi, keep provider: pi and set the Anthropic model via model: anthropic/<model-id>; if you intend to use the native Claude client, use provider: claude instead.
| provider: anthropic # per-node override (uses node-level provider) | |
| provider: pi # per-node override (uses Pi with the node-level model) |
| // Warn if using MCP with Codex or Pi | ||
| if (provider === 'codex' || provider === 'pi') { | ||
| issues.push({ | ||
| level: 'warning', | ||
| nodeId: node.id, |
There was a problem hiding this comment.
Validator behavior changed to warn for provider === 'pi', but the existing validator test suite only covers the Codex warnings. Add equivalent test cases asserting warnings for Pi (MCP, skills, hooks, tool restrictions) so this new provider path stays covered.
| // When workflow sets a model but not a provider, infer provider from the model. | ||
| // e.g. model: sonnet → provider: claude, even if config.assistant is codex. | ||
| let resolvedProvider: 'claude' | 'codex'; | ||
| // Pi workflows should always set provider: pi explicitly (pi models cannot be auto-inferred). | ||
| let resolvedProvider: 'claude' | 'codex' | 'pi'; | ||
| let providerSource: string; |
There was a problem hiding this comment.
The comment here notes that Pi “cannot be auto-inferred”, but the provider-resolution logic later in this function still infers a non-Claude workflow.model to codex when workflow.provider is omitted. That means a defaultAssistant: pi setup can silently switch to Codex just by setting model at the workflow level. Consider adding explicit handling for config.assistant === 'pi' (or provider/model-id model strings) so Pi remains the resolved provider unless the workflow explicitly opts out.
|
|
||
| // Determine default assistant | ||
| let defaultAssistant: 'claude' | 'codex' = 'claude'; | ||
| let defaultAssistant: 'claude' | 'codex' | 'pi' = 'claude'; |
There was a problem hiding this comment.
defaultAssistant is now typed to include 'pi', but this setup flow only reasons about Claude/Codex (hasClaude/hasCodex) and never offers/configures Pi. Either add Pi detection + selection + config generation, or keep the type here limited to assistants that archon setup can actually configure so the generated config doesn’t imply unsupported values.
| let defaultAssistant: 'claude' | 'codex' | 'pi' = 'claude'; | |
| let defaultAssistant: 'claude' | 'codex' = 'claude'; |
Summary
Adds Pi.dev as a third AI assistant provider alongside Claude and Codex. Pi is a multi-provider coding agent SDK that supports Anthropic, OpenAI, Google, Mistral, OpenRouter, and many other LLM providers through a single unified interface.
Changes
New client:
packages/core/src/clients/pi.tsPiClientimplementingIAssistantClientusing@mariozechner/pi-coding-agentSDKAsyncGenerator<MessageChunk>interface via a queue-based adapterprovider/model-idformat (e.g.anthropic/claude-opus-4-5,openai/gpt-4o)session.abort()Provider type propagation
All
'claude' | 'codex'type unions updated to'claude' | 'codex' | 'pi'across:packages/core/src/config/config-types.ts—PiAssistantDefaults,MergedConfig,SafeConfig,GlobalConfig,RepoConfigpackages/core/src/config/config-loader.ts— defaults, merge, env override,toSafeConfig,updateGlobalConfigpackages/workflows/src/deps.ts—AssistantClientFactory,WorkflowConfigpackages/workflows/src/schemas/dag-node.ts— provider enumpackages/workflows/src/schemas/workflow.ts— provider enumpackages/workflows/src/model-validation.ts—isModelCompatibleaccepts 'pi' (all models valid)packages/workflows/src/executor.ts—resolvedProvidertypepackages/workflows/src/loader.ts— provider acceptance checkpackages/workflows/src/dag-executor.ts— all provider type annotations, pi option building branchpackages/workflows/src/validator.ts— pi warnings for Claude-only features (hooks, MCP, skills, tool restrictions)packages/server/src/routes/schemas/config.schemas.ts— API schema enumspackages/server/src/routes/api.ts— config update handlerpackages/cli/src/commands/setup.ts—defaultAssistanttype annotationpackages/core/src/clients/factory.tsandindex.ts— factory and exportDocumentation
README.md— new "Using Pi.dev as Your AI Backend" section with setup instructions, supported providers table, and workflow YAML examplesNotes for reviewers
bun.locknot updated:bun installmust be run to pull@mariozechner/pi-coding-agent@^0.66.1and update the lockfile. This is expected — the sandboxed environment does not havebunavailable.api.generated.d.tsnot updated: This file is auto-generated from the OpenAPI spec. Runbun run dev:serverthenbun --filter @archon/web generate:typesto regenerate after this PR is merged.provider: pi. Validator warnings were added for hooks, MCP, skills, and tool restrictions.