-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Problem
The pi-coding-agent provider currently spawns the Pi CLI as a subprocess and parses its JSONL stdout. This has several drawbacks:
- Requires an
executablepath in every target config (e.g.executable: ${{ PI_CLI_PATH }}) - JSONL parsing is fragile — tool calls must be reconstructed from raw JSON strings
- The dead
pi-agent-sdkprovider (marked deprecated in feat(skill-trigger): multi-provider detection + workspace-scoped skills #702) bundles@mariozechner/pi-agent-coreand@mariozechner/pi-aias real package dependencies, causing upstream npm install warnings for all agentv users
Proposed Solution
Replace the subprocess approach with a direct call to @mariozechner/pi-coding-agent SDK. The package already exports everything needed:
// From @mariozechner/pi-coding-agent
import { createAgentSession, codingTools } from '@mariozechner/pi-coding-agent';
import { getModel } from '@mariozechner/pi-ai';
const { session } = await createAgentSession({
cwd,
model: getModel(provider, modelId),
tools: codingTools, // [read, bash, edit, write]
});
session.subscribe((event) => {
// tool_execution_start, tool_execution_end, message_end — same as pi-agent-sdk
});
await session.prompt(prompt);Tool calls come out in { type: 'toolCall', name: 'read', arguments: { path } } format — matching what PI_CODING_AGENT_MATCHER in the skill-trigger evaluator already expects.
Steps
- Add
@mariozechner/pi-coding-agentas a dependency inpackages/core/package.jsonandapps/cli/package.json - Rewrite
packages/core/src/evaluation/providers/pi-coding-agent.tsto usecreateAgentSession+ event subscription instead ofspawn+ JSONL parsing. Preserve all existing config fields exceptexecutable(no longer needed) - Remove
pi-agent-sdkprovider entirely:- Delete
packages/core/src/evaluation/providers/pi-agent-sdk.ts - Remove registry entry from
packages/core/src/evaluation/providers/index.ts - Remove
PiAgentSdkResolvedConfig+pi-agent-sdkkind frompackages/core/src/evaluation/providers/targets.tsandtypes.ts - Remove
pi-agent-sdkentry frompackages/core/src/evaluation/evaluators/skill-trigger.ts - Delete
pi-agent-sdktests
- Delete
- Remove
@mariozechner/pi-agent-coreand@mariozechner/pi-aias direct dependencies (they become transitive viapi-coding-agent) - Drop
executablefield fromPiCodingAgentResolvedConfigintargets.tsand update exampletargets.yamlfiles accordingly - Update
.agentv/targets.yamlandexamples/features/.agentv/targets.yamlto removeexecutablefield
Config Before / After
Before:
- name: pi
provider: pi-coding-agent
executable: ${{ PI_CLI_PATH }}
pi_provider: openrouter
model: openai/gpt-5.4
api_key: ${{ OPENROUTER_API_KEY }}
tools: read,bash,edit,writeAfter:
- name: pi
provider: pi-coding-agent
pi_provider: openrouter
model: openai/gpt-5.4
api_key: ${{ OPENROUTER_API_KEY }}
tools: read,bash,edit,writeKey Files
| File | Change |
|---|---|
packages/core/src/evaluation/providers/pi-coding-agent.ts |
Full rewrite: spawn → createAgentSession |
packages/core/src/evaluation/providers/pi-agent-sdk.ts |
Delete |
packages/core/src/evaluation/providers/index.ts |
Remove pi-agent-sdk registration, remove TODO comment |
packages/core/src/evaluation/providers/targets.ts |
Remove executable from config type, remove PiAgentSdkResolvedConfig |
packages/core/src/evaluation/providers/types.ts |
Remove pi-agent-sdk from ProviderKind |
packages/core/src/evaluation/evaluators/skill-trigger.ts |
Remove pi-agent-sdk matcher entry |
packages/core/package.json |
Add @mariozechner/pi-coding-agent, remove @mariozechner/pi-agent-core + @mariozechner/pi-ai |
apps/cli/package.json |
Same dependency changes |
examples/features/.agentv/targets.yaml |
Remove executable field |
.agentv/targets.yaml |
Remove executable field |
Notes
pi-utils.ts(extractPiTextContent,toFiniteNumber) andpi-log-tracker.tsare shared utilities — keep them unless the SDK's event model makes them redundant- The
toolsconfig field stays (mapsread,bash,edit,writestring →createCodingTools()etc.) - Skill detection via
PI_CODING_AGENT_MATCHERinskill-trigger.tsrequires no changes — tool call format is identical - The
thinkingconfig field maps tothinkingLevelincreateAgentSession - Breaking change:
executableis removed from config. Any user targets usingexecutablewill need to drop the field.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request