@opengsd/gsd-pi 1.0.1-dev.bf2899e → 1.0.2-dev.0ee79e5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -3
- package/dist/claude-cli-check.js +1 -1
- package/dist/extension-sort.js +1 -1
- package/dist/extension-validator.js +1 -1
- package/dist/loader-entrypoint.js +1 -1
- package/dist/resource-loader.d.ts +1 -4
- package/dist/resource-loader.js +49 -121
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +1 -1
- package/dist/resources/extensions/github-sync/templates.js +1 -1
- package/dist/resources/extensions/gsd/auto/contracts.js +1 -1
- package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +1 -1
- package/dist/resources/extensions/gsd/auto/lease-conflict-notice.js +1 -1
- package/dist/resources/extensions/gsd/auto/loop.js +6 -1
- package/dist/resources/extensions/gsd/auto/orchestrator.js +1 -1
- package/dist/resources/extensions/gsd/auto/phases.js +38 -3
- package/dist/resources/extensions/gsd/auto/run-unit.js +1 -1
- package/dist/resources/extensions/gsd/auto/schedule-wakeup.js +1 -1
- package/dist/resources/extensions/gsd/auto/session.js +1 -1
- package/dist/resources/extensions/gsd/auto/unit-runner-events.js +1 -1
- package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-iteration.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-retry.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-dispatch-ledger.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-iteration-completion.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-journal-reporter.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-kernel.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-phase-reporter.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-session-lock.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-sidecar-iteration.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-sidecar-queue.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-turn-reporter.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +1 -1
- package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +1 -1
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +4 -3
- package/dist/resources/extensions/gsd/auto-budget.js +1 -1
- package/dist/resources/extensions/gsd/auto-dashboard.js +1 -1
- package/dist/resources/extensions/gsd/auto-dispatch.js +3 -1
- package/dist/resources/extensions/gsd/auto-post-unit.js +21 -2
- package/dist/resources/extensions/gsd/auto-prompts.js +1 -1
- package/dist/resources/extensions/gsd/auto-recovery.js +115 -3
- package/dist/resources/extensions/gsd/auto-start.js +1 -1
- package/dist/resources/extensions/gsd/auto-status-message.js +1 -1
- package/dist/resources/extensions/gsd/auto-timers.js +1 -1
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +1 -1
- package/dist/resources/extensions/gsd/auto-verification.js +1 -1
- package/dist/resources/extensions/gsd/auto-worktree-repair.js +1 -1
- package/dist/resources/extensions/gsd/auto-worktree.js +1 -1
- package/dist/resources/extensions/gsd/auto.js +6 -5
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +1 -1
- package/dist/resources/extensions/gsd/bootstrap/crash-log.js +3 -4
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +2 -1
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +1 -1
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/journal-tools.js +1 -1
- package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/plan-milestone-schema-recovery.js +98 -0
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +2 -3
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +3 -1
- package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +1 -1
- package/dist/resources/extensions/gsd/bootstrap/schedule-wakeup-tool.js +1 -1
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +1 -1
- package/dist/resources/extensions/gsd/browser-evidence.js +1 -1
- package/dist/resources/extensions/gsd/closeout-recovery.js +1 -1
- package/dist/resources/extensions/gsd/commands/dispatcher.js +1 -1
- package/dist/resources/extensions/gsd/commands/handlers/notifications-handler.js +1 -1
- package/dist/resources/extensions/gsd/commands-closeout.js +1 -1
- package/dist/resources/extensions/gsd/commands-ship.js +1 -1
- package/dist/resources/extensions/gsd/commands-verdict.js +1 -1
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +1 -1
- package/dist/resources/extensions/gsd/commands-worktree.js +1 -1
- package/dist/resources/extensions/gsd/component-loader.js +1 -1
- package/dist/resources/extensions/gsd/db/auto-workers.js +1 -1
- package/dist/resources/extensions/gsd/db/command-queue.js +1 -1
- package/dist/resources/extensions/gsd/db/milestone-leases.js +20 -6
- package/dist/resources/extensions/gsd/db/runtime-kv.js +1 -1
- package/dist/resources/extensions/gsd/db/unit-dispatches.js +1 -1
- package/dist/resources/extensions/gsd/db-adapter.js +1 -1
- package/dist/resources/extensions/gsd/db-base-schema.js +1 -1
- package/dist/resources/extensions/gsd/db-connection-cache.js +1 -1
- package/dist/resources/extensions/gsd/db-coordination-schema.js +1 -1
- package/dist/resources/extensions/gsd/db-decision-requirement-rows.js +1 -1
- package/dist/resources/extensions/gsd/db-gate-rows.js +1 -1
- package/dist/resources/extensions/gsd/db-lightweight-query-rows.js +1 -1
- package/dist/resources/extensions/gsd/db-memory-fts-schema.js +1 -1
- package/dist/resources/extensions/gsd/db-migration-backup.js +1 -1
- package/dist/resources/extensions/gsd/db-migration-steps.js +1 -1
- package/dist/resources/extensions/gsd/db-milestone-artifact-rows.js +1 -1
- package/dist/resources/extensions/gsd/db-open-state.js +1 -1
- package/dist/resources/extensions/gsd/db-provider.js +1 -1
- package/dist/resources/extensions/gsd/db-runtime-kv-schema.js +1 -1
- package/dist/resources/extensions/gsd/db-schema-metadata.js +1 -1
- package/dist/resources/extensions/gsd/db-task-slice-rows.js +1 -1
- package/dist/resources/extensions/gsd/db-transaction.js +1 -1
- package/dist/resources/extensions/gsd/db-verification-evidence-rows.js +1 -1
- package/dist/resources/extensions/gsd/db-verification-evidence-schema.js +1 -1
- package/dist/resources/extensions/gsd/doctor-git-checks.js +1 -1
- package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +1 -1
- package/dist/resources/extensions/gsd/ecosystem/loader.js +1 -1
- package/dist/resources/extensions/gsd/escalation.js +1 -1
- package/dist/resources/extensions/gsd/fresh-run-ui.js +1 -1
- package/dist/resources/extensions/gsd/git-conflict-state.js +1 -1
- package/dist/resources/extensions/gsd/git-service.js +1 -1
- package/dist/resources/extensions/gsd/gsd-command-home.js +1 -1
- package/dist/resources/extensions/gsd/gsd-db.js +1 -1
- package/dist/resources/extensions/gsd/guided-unit-context.js +1 -1
- package/dist/resources/extensions/gsd/health-widget.js +1 -1
- package/dist/resources/extensions/gsd/knowledge-backfill.js +1 -1
- package/dist/resources/extensions/gsd/knowledge-capture.js +1 -1
- package/dist/resources/extensions/gsd/knowledge-parser.js +1 -1
- package/dist/resources/extensions/gsd/knowledge-projection.js +1 -1
- package/dist/resources/extensions/gsd/legacy-telemetry.js +1 -1
- package/dist/resources/extensions/gsd/markdown-renderer.js +1 -1
- package/dist/resources/extensions/gsd/memory-backfill.js +1 -1
- package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +1 -1
- package/dist/resources/extensions/gsd/metrics.js +1 -1
- package/dist/resources/extensions/gsd/migrate/audit.js +2 -2
- package/dist/resources/extensions/gsd/migrate/command.js +2 -2
- package/dist/resources/extensions/gsd/migrate/safety.js +1 -1
- package/dist/resources/extensions/gsd/migrate/writer.js +1 -1
- package/dist/resources/extensions/gsd/milestone-scope-classifier.js +1 -1
- package/dist/resources/extensions/gsd/model-router.js +1 -1
- package/dist/resources/extensions/gsd/notification-overlay.js +1 -1
- package/dist/resources/extensions/gsd/orphan-stash-audit.js +1 -1
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +1 -1
- package/dist/resources/extensions/gsd/paths.js +1 -1
- package/dist/resources/extensions/gsd/pending-auto-start.js +1 -1
- package/dist/resources/extensions/gsd/planning-depth.js +1 -1
- package/dist/resources/extensions/gsd/post-execution-checks.js +1 -1
- package/dist/resources/extensions/gsd/pr-evidence.js +1 -1
- package/dist/resources/extensions/gsd/pre-execution-checks.js +1 -1
- package/dist/resources/extensions/gsd/preferences-skills.js +4 -9
- package/dist/resources/extensions/gsd/process-task-path.js +1 -1
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +6 -0
- package/dist/resources/extensions/gsd/prompts/discuss.md +6 -0
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +3 -0
- package/dist/resources/extensions/gsd/prompts/review-migration.md +2 -2
- package/dist/resources/extensions/gsd/provider-switch-observer.js +1 -1
- package/dist/resources/extensions/gsd/recovery-classification.js +1 -1
- package/dist/resources/extensions/gsd/repository-registry.js +1 -1
- package/dist/resources/extensions/gsd/root-write-leak-guard.js +4 -1
- package/dist/resources/extensions/gsd/schemas/parsers.js +1 -1
- package/dist/resources/extensions/gsd/schemas/validate.js +1 -1
- package/dist/resources/extensions/gsd/skill-catalog.js +6 -3
- package/dist/resources/extensions/gsd/skill-discovery.js +6 -2
- package/dist/resources/extensions/gsd/skill-health.js +3 -1
- package/dist/resources/extensions/gsd/skill-manifest.js +1 -1
- package/dist/resources/extensions/gsd/skill-telemetry.js +9 -9
- package/dist/resources/extensions/gsd/slice-cadence.js +1 -1
- package/dist/resources/extensions/gsd/smart-entry-routing.js +1 -1
- package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +1 -1
- package/dist/resources/extensions/gsd/state-reconciliation/drift/merge-state.js +1 -1
- package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +1 -1
- package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +1 -1
- package/dist/resources/extensions/gsd/state-reconciliation/drift/sketch-flag.js +1 -1
- package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +1 -1
- package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-worker.js +1 -1
- package/dist/resources/extensions/gsd/state-reconciliation/errors.js +1 -1
- package/dist/resources/extensions/gsd/state-reconciliation/index.js +1 -1
- package/dist/resources/extensions/gsd/state-reconciliation/registry.js +1 -1
- package/dist/resources/extensions/gsd/state-reconciliation/spawn-gate.js +1 -1
- package/dist/resources/extensions/gsd/state-reconciliation/types.js +1 -1
- package/dist/resources/extensions/gsd/state-reconciliation.js +1 -1
- package/dist/resources/extensions/gsd/state.js +1 -1
- package/dist/resources/extensions/gsd/tool-contract.js +1 -1
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +2 -2
- package/dist/resources/extensions/gsd/tools/complete-slice.js +8 -2
- package/dist/resources/extensions/gsd/tools/complete-task.js +1 -1
- package/dist/resources/extensions/gsd/tools/context-mode-tool-result.js +1 -1
- package/dist/resources/extensions/gsd/tools/exec-tool.js +1 -1
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +1 -1
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +1 -1
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +1 -1
- package/dist/resources/extensions/gsd/tui/render-kit.js +1 -1
- package/dist/resources/extensions/gsd/unit-context-composer.js +1 -1
- package/dist/resources/extensions/gsd/unit-context-manifest.js +1 -1
- package/dist/resources/extensions/gsd/unmerged-milestone-guard.js +1 -1
- package/dist/resources/extensions/gsd/uok/audit.js +1 -1
- package/dist/resources/extensions/gsd/uok/contracts.js +1 -1
- package/dist/resources/extensions/gsd/uok/dispatch-envelope.js +1 -1
- package/dist/resources/extensions/gsd/uok/loop-adapter.js +1 -1
- package/dist/resources/extensions/gsd/uok/plan-v2.js +1 -1
- package/dist/resources/extensions/gsd/uok/timeline.js +1 -1
- package/dist/resources/extensions/gsd/validation-block-guard.js +1 -1
- package/dist/resources/extensions/gsd/verification-gate.js +2 -2
- package/dist/resources/extensions/gsd/verification-verdict.js +1 -1
- package/dist/resources/extensions/gsd/watch/header-renderer.js +1 -1
- package/dist/resources/extensions/gsd/watch/splash-palette.js +1 -1
- package/dist/resources/extensions/gsd/workflow-manifest.js +1 -1
- package/dist/resources/extensions/gsd/workflow-projections.js +1 -1
- package/dist/resources/extensions/gsd/workflow-protocol.js +1 -1
- package/dist/resources/extensions/gsd/workflow-reconcile.js +8 -0
- package/dist/resources/extensions/gsd/workflow-templates.js +1 -1
- package/dist/resources/extensions/gsd/working-output-messages.js +1 -1
- package/dist/resources/extensions/gsd/workspace.js +1 -1
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +1 -1
- package/dist/resources/extensions/gsd/worktree-manager.js +1 -1
- package/dist/resources/extensions/gsd/worktree-safety.js +1 -1
- package/dist/resources/extensions/gsd/worktree-state-projection.js +1 -1
- package/dist/resources/extensions/mcp-client/manager.js +1 -1
- package/dist/resources/extensions/ollama/index.js +1 -1
- package/dist/resources/extensions/ollama/model-capabilities.js +16 -5
- package/dist/resources/extensions/ollama/ndjson-stream.js +1 -1
- package/dist/resources/extensions/ollama/ollama-chat-provider.js +38 -2
- package/dist/resources/extensions/ollama/ollama-client.js +1 -1
- package/dist/resources/extensions/ollama/ollama-commands.js +1 -1
- package/dist/resources/extensions/ollama/ollama-discovery.js +49 -20
- package/dist/resources/extensions/ollama/ollama-tool.js +1 -1
- package/dist/resources/extensions/ollama/thinking-parser.js +1 -1
- package/dist/resources/extensions/ollama/types.js +1 -1
- package/dist/resources/extensions/shared/cmux-events.js +1 -1
- package/dist/resources/extensions/shared/gsd-phase-state.js +1 -1
- package/dist/resources/extensions/shared/interview-ui.js +1 -1
- package/dist/resources/extensions/subagent/launch.js +1 -1
- package/dist/resources/extensions/subagent/run-store.js +1 -1
- package/dist/resources/extensions/visual-brief/artifact-policy.js +1 -1
- package/dist/resources/extensions/visual-brief/index.js +1 -1
- package/dist/resources/extensions/visual-brief/page-contract.js +1 -1
- package/dist/resources/extensions/visual-brief/prompts.js +1 -1
- package/dist/resources/skills/api-design/SKILL.md +1 -1
- package/dist/resources/skills/create-gsd-extension/SKILL.md +1 -1
- package/dist/resources/skills/create-mcp-server/SKILL.md +1 -1
- package/dist/resources/skills/create-skill/SKILL.md +3 -0
- package/dist/resources/skills/create-skill/references/gsd-skill-ecosystem.md +13 -4
- package/dist/resources/skills/create-skill/workflows/create-new-skill.md +2 -0
- package/dist/resources/skills/dependency-upgrade/SKILL.md +1 -1
- package/dist/resources/skills/observability/SKILL.md +4 -4
- package/dist/resources/skills/security-review/SKILL.md +1 -1
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/update-cmd.d.ts +6 -1
- package/dist/update-cmd.js +4 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +9 -9
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/welcome-screen.js +1 -1
- package/package.json +7 -7
- package/packages/contracts/dist/index.js +1 -1
- package/packages/contracts/dist/index.js.map +1 -1
- package/packages/contracts/dist/rpc.js +1 -1
- package/packages/contracts/dist/rpc.js.map +1 -1
- package/packages/contracts/dist/rpc.test.js +1 -1
- package/packages/contracts/dist/rpc.test.js.map +1 -1
- package/packages/contracts/dist/workflow.js +1 -1
- package/packages/contracts/dist/workflow.js.map +1 -1
- package/packages/contracts/package.json +1 -1
- package/packages/contracts/src/index.ts +1 -1
- package/packages/contracts/src/rpc.test.ts +1 -1
- package/packages/contracts/src/rpc.ts +1 -1
- package/packages/contracts/src/workflow.ts +1 -1
- package/packages/daemon/package.json +3 -3
- package/packages/mcp-server/dist/workflow-tools.js +1 -1
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +3 -3
- package/packages/mcp-server/src/import-candidates.test.ts +1 -1
- package/packages/mcp-server/src/workflow-tools-parity.test.ts +1 -1
- package/packages/mcp-server/src/workflow-tools.test.ts +1 -1
- package/packages/mcp-server/src/workflow-tools.ts +1 -1
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +61 -5
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/agent.d.ts +10 -0
- package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent.js +14 -0
- package/packages/pi-agent-core/dist/agent.js.map +1 -1
- package/packages/pi-agent-core/dist/token-audit.js +1 -1
- package/packages/pi-agent-core/dist/token-audit.js.map +1 -1
- package/packages/pi-agent-core/dist/types.d.ts +32 -0
- package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/types.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-agent-core/src/agent-loop.test.ts +162 -0
- package/packages/pi-agent-core/src/agent-loop.ts +110 -5
- package/packages/pi-agent-core/src/agent.ts +18 -0
- package/packages/pi-agent-core/src/token-audit.test.ts +1 -1
- package/packages/pi-agent-core/src/token-audit.ts +1 -1
- package/packages/pi-agent-core/src/types.ts +44 -0
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/models/fake-model.d.ts +1 -1
- package/packages/pi-ai/dist/models/fake-model.js +1 -1
- package/packages/pi-ai/dist/models/fake-model.js.map +1 -1
- package/packages/pi-ai/dist/providers/api-family.js +1 -1
- package/packages/pi-ai/dist/providers/api-family.js.map +1 -1
- package/packages/pi-ai/dist/providers/api-family.test.js +1 -1
- package/packages/pi-ai/dist/providers/api-family.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/fake.d.ts +1 -1
- package/packages/pi-ai/dist/providers/fake.js +1 -1
- package/packages/pi-ai/dist/providers/fake.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.test.js +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/provider-capabilities.js +1 -1
- package/packages/pi-ai/dist/providers/provider-capabilities.js.map +1 -1
- package/packages/pi-ai/dist/providers/provider-capabilities.test.js +1 -1
- package/packages/pi-ai/dist/providers/provider-capabilities.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/transform-messages-report.test.js +1 -1
- package/packages/pi-ai/dist/providers/transform-messages-report.test.js.map +1 -1
- package/packages/pi-ai/dist/types.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-ai/src/models/fake-model.ts +1 -1
- package/packages/pi-ai/src/providers/api-family.test.ts +1 -1
- package/packages/pi-ai/src/providers/api-family.ts +1 -1
- package/packages/pi-ai/src/providers/fake.ts +1 -1
- package/packages/pi-ai/src/providers/google-gemini-cli.test.ts +1 -1
- package/packages/pi-ai/src/providers/provider-capabilities.test.ts +1 -1
- package/packages/pi-ai/src/providers/provider-capabilities.ts +1 -1
- package/packages/pi-ai/src/providers/transform-messages-report.test.ts +1 -1
- package/packages/pi-ai/src/types.ts +1 -1
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-command-errors.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/agent-session-command-errors.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/agent-session-command-errors.test.js +69 -0
- package/packages/pi-coding-agent/dist/core/agent-session-command-errors.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +52 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +1 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/provider-registration.test.js +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/provider-registration.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +37 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +32 -0
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lsp-legacy-alias.test.js +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lsp-legacy-alias.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/package-manager.js +4 -6
- package/packages/pi-coding-agent/dist/core/package-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js +1 -1
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js +1 -1
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/skills.d.ts +10 -1
- package/packages/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/skills.js +13 -13
- package/packages/pi-coding-agent/dist/core/skills.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/skills.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/skills.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/skills.test.js +69 -0
- package/packages/pi-coding-agent/dist/core/skills.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-compatibility-registry.js +1 -1
- package/packages/pi-coding-agent/dist/core/tools/tool-compatibility-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js +1 -1
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/tool-target.js +1 -1
- package/packages/pi-coding-agent/dist/core/tools/tool-target.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/collapsible-message.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/collapsible-message.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/timestamp.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/timestamp.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/animated-component.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/animated-component.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/animated-component.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/animated-component.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/armin.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/armin.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/collapsible-message.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/collapsible-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/config-selector.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/countdown-timer.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/custom-editor.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/custom-message.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/daxnuts.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/daxnuts.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/daxnuts.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/extension-input.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/interactive-key-handling.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/interactive-key-handling.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/oauth-selector.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/render-cache.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/render-cache.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/selector-footers.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/selector-footers.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/theme-selector.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/theme-selector.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/theme-selector.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/timestamp.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/timestamp.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message-selector.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message-selector.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message-selector.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-lifecycle.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-lifecycle.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/utils/tool-call-summary.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/utils/tool-call-summary.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/utils/tool-call-summary.test.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/utils/tool-call-summary.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
- package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.js +1 -1
- package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.js.map +1 -1
- package/packages/pi-coding-agent/package.json +2 -2
- package/packages/pi-coding-agent/src/core/agent-session-command-errors.test.ts +79 -0
- package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +52 -1
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +1 -1
- package/packages/pi-coding-agent/src/core/extensions/extension-manifest.test.ts +1 -1
- package/packages/pi-coding-agent/src/core/extensions/extension-manifest.ts +1 -1
- package/packages/pi-coding-agent/src/core/extensions/extension-sort.test.ts +1 -1
- package/packages/pi-coding-agent/src/core/extensions/extension-sort.ts +1 -1
- package/packages/pi-coding-agent/src/core/extensions/provider-registration.test.ts +1 -1
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +43 -0
- package/packages/pi-coding-agent/src/core/extensions/types.ts +43 -0
- package/packages/pi-coding-agent/src/core/lsp/lsp-legacy-alias.test.ts +1 -1
- package/packages/pi-coding-agent/src/core/package-manager.ts +6 -10
- package/packages/pi-coding-agent/src/core/sdk-tool-filter.test.ts +1 -1
- package/packages/pi-coding-agent/src/core/sdk.ts +1 -1
- package/packages/pi-coding-agent/src/core/skill-tool.test.ts +1 -1
- package/packages/pi-coding-agent/src/core/skills.test.ts +67 -0
- package/packages/pi-coding-agent/src/core/skills.ts +18 -15
- package/packages/pi-coding-agent/src/core/tools/tool-compatibility-registry.ts +1 -1
- package/packages/pi-coding-agent/src/core/tools/tool-target-metadata.test.ts +1 -1
- package/packages/pi-coding-agent/src/core/tools/tool-target.ts +1 -1
- package/packages/pi-coding-agent/src/index.ts +2 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/assistant-message-design.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/collapsible-message.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/provider-display-name.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/timestamp.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +2 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/user-message-design.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/animated-component.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/animated-component.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/armin.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/bash-execution.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/bash-execution.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/branch-summary-message.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/collapsible-message.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/compaction-summary-message.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/config-selector.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/countdown-timer.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/custom-editor.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/custom-message.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/daxnuts.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/daxnuts.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/dynamic-border.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/extension-input.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/extension-selector.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/interactive-key-handling.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/oauth-selector.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/render-cache.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/selector-footers.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/skill-invocation-message.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/theme-selector.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/theme-selector.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/timestamp.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +2 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/transcript-design.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/tree-render-utils.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/tree-selector.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/user-message-selector.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/user-message-selector.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/user-message.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-lifecycle.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-ordering.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +2 -2
- package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-highlight.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/utils/shorten-path.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/utils/tool-call-summary.test.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/utils/tool-call-summary.ts +1 -1
- package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +1 -1
- package/packages/pi-coding-agent/src/tests/system-prompt-file-safety.test.ts +1 -1
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/keys.test.js +1 -1
- package/packages/pi-tui/dist/__tests__/keys.test.js.map +1 -1
- package/packages/pi-tui/dist/__tests__/style.test.js +1 -1
- package/packages/pi-tui/dist/__tests__/style.test.js.map +1 -1
- package/packages/pi-tui/dist/__tests__/tui.test.js +1 -1
- package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
- package/packages/pi-tui/dist/__tests__/utils.test.js +5 -2
- package/packages/pi-tui/dist/__tests__/utils.test.js.map +1 -1
- package/packages/pi-tui/dist/components/__tests__/box.test.js +1 -1
- package/packages/pi-tui/dist/components/__tests__/box.test.js.map +1 -1
- package/packages/pi-tui/dist/components/__tests__/editor.test.js +1 -1
- package/packages/pi-tui/dist/components/__tests__/editor.test.js.map +1 -1
- package/packages/pi-tui/dist/components/__tests__/truncated-text.test.js +1 -1
- package/packages/pi-tui/dist/components/__tests__/truncated-text.test.js.map +1 -1
- package/packages/pi-tui/dist/components/box.js +1 -1
- package/packages/pi-tui/dist/components/box.js.map +1 -1
- package/packages/pi-tui/dist/components/editor.js +1 -1
- package/packages/pi-tui/dist/components/editor.js.map +1 -1
- package/packages/pi-tui/dist/components/input.js +1 -1
- package/packages/pi-tui/dist/components/input.js.map +1 -1
- package/packages/pi-tui/dist/components/truncated-text.js +1 -1
- package/packages/pi-tui/dist/components/truncated-text.js.map +1 -1
- package/packages/pi-tui/dist/index.js +1 -1
- package/packages/pi-tui/dist/index.js.map +1 -1
- package/packages/pi-tui/dist/keys.js +1 -1
- package/packages/pi-tui/dist/keys.js.map +1 -1
- package/packages/pi-tui/dist/overlay-layout.js +1 -1
- package/packages/pi-tui/dist/overlay-layout.js.map +1 -1
- package/packages/pi-tui/dist/style.js +1 -1
- package/packages/pi-tui/dist/style.js.map +1 -1
- package/packages/pi-tui/dist/tui.js +1 -1
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/dist/utils.d.ts +3 -1
- package/packages/pi-tui/dist/utils.d.ts.map +1 -1
- package/packages/pi-tui/dist/utils.js +46 -2
- package/packages/pi-tui/dist/utils.js.map +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/src/__tests__/keys.test.ts +1 -1
- package/packages/pi-tui/src/__tests__/style.test.ts +1 -1
- package/packages/pi-tui/src/__tests__/tui.test.ts +1 -1
- package/packages/pi-tui/src/__tests__/utils.test.ts +6 -2
- package/packages/pi-tui/src/components/__tests__/box.test.ts +1 -1
- package/packages/pi-tui/src/components/__tests__/editor.test.ts +1 -1
- package/packages/pi-tui/src/components/__tests__/truncated-text.test.ts +1 -1
- package/packages/pi-tui/src/components/box.ts +1 -1
- package/packages/pi-tui/src/components/editor.ts +1 -1
- package/packages/pi-tui/src/components/input.ts +1 -1
- package/packages/pi-tui/src/components/truncated-text.ts +1 -1
- package/packages/pi-tui/src/index.ts +1 -1
- package/packages/pi-tui/src/keys.ts +1 -1
- package/packages/pi-tui/src/overlay-layout.ts +1 -1
- package/packages/pi-tui/src/style.ts +1 -1
- package/packages/pi-tui/src/tui.ts +1 -1
- package/packages/pi-tui/src/utils.ts +47 -2
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/dist/rpc-types.js +1 -1
- package/packages/rpc-client/dist/rpc-types.js.map +1 -1
- package/packages/rpc-client/package.json +2 -2
- package/packages/rpc-client/src/rpc-types.ts +1 -1
- package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.js +1 -1
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/pkg/package.json +1 -1
- package/scripts/install.js +36 -3
- package/scripts/lib/workspace-manifest.cjs +1 -1
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +1 -1
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +4 -4
- package/src/resources/extensions/github-sync/templates.ts +1 -1
- package/src/resources/extensions/github-sync/tests/inline-code.test.ts +1 -1
- package/src/resources/extensions/github-sync/tests/templates.test.ts +1 -1
- package/src/resources/extensions/google-search/index.ts +1 -1
- package/src/resources/extensions/gsd/auto/contracts.ts +1 -1
- package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +1 -1
- package/src/resources/extensions/gsd/auto/lease-conflict-notice.ts +1 -1
- package/src/resources/extensions/gsd/auto/loop.ts +6 -1
- package/src/resources/extensions/gsd/auto/orchestrator.ts +1 -1
- package/src/resources/extensions/gsd/auto/phases.ts +45 -3
- package/src/resources/extensions/gsd/auto/run-unit.ts +1 -1
- package/src/resources/extensions/gsd/auto/schedule-wakeup.ts +1 -1
- package/src/resources/extensions/gsd/auto/session.ts +1 -1
- package/src/resources/extensions/gsd/auto/unit-runner-events.ts +1 -1
- package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-iteration.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-retry.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-dispatch-ledger.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-iteration-completion.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-journal-reporter.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-kernel.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-phase-reporter.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-session-lock.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-sidecar-iteration.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-sidecar-queue.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-turn-reporter.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +1 -1
- package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +1 -1
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +4 -3
- package/src/resources/extensions/gsd/auto-budget.ts +1 -1
- package/src/resources/extensions/gsd/auto-dashboard.ts +1 -1
- package/src/resources/extensions/gsd/auto-dispatch.ts +2 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +28 -1
- package/src/resources/extensions/gsd/auto-prompts.ts +1 -1
- package/src/resources/extensions/gsd/auto-recovery.ts +132 -3
- package/src/resources/extensions/gsd/auto-start.ts +1 -1
- package/src/resources/extensions/gsd/auto-status-message.ts +1 -1
- package/src/resources/extensions/gsd/auto-timers.ts +1 -1
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +1 -1
- package/src/resources/extensions/gsd/auto-verification.ts +1 -1
- package/src/resources/extensions/gsd/auto-worktree-repair.ts +1 -1
- package/src/resources/extensions/gsd/auto-worktree.ts +1 -1
- package/src/resources/extensions/gsd/auto.ts +6 -6
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +1 -1
- package/src/resources/extensions/gsd/bootstrap/crash-log.ts +3 -4
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +2 -1
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +1 -1
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/journal-tools.ts +1 -1
- package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/plan-milestone-schema-recovery.ts +119 -0
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +2 -3
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +4 -1
- package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +1 -1
- package/src/resources/extensions/gsd/bootstrap/schedule-wakeup-tool.ts +1 -1
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/tests/write-gate-basepath.test.ts +1 -1
- package/src/resources/extensions/gsd/bootstrap/tests/write-gate-shouldblock-basepath.test.ts +1 -1
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +1 -1
- package/src/resources/extensions/gsd/browser-evidence.ts +1 -1
- package/src/resources/extensions/gsd/closeout-recovery.ts +1 -1
- package/src/resources/extensions/gsd/commands/dispatcher.ts +1 -1
- package/src/resources/extensions/gsd/commands/handlers/notifications-handler.ts +1 -1
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +1 -1
- package/src/resources/extensions/gsd/commands-closeout.ts +1 -1
- package/src/resources/extensions/gsd/commands-ship.ts +1 -1
- package/src/resources/extensions/gsd/commands-verdict.ts +1 -1
- package/src/resources/extensions/gsd/commands-workflow-templates.ts +1 -1
- package/src/resources/extensions/gsd/commands-worktree.ts +1 -1
- package/src/resources/extensions/gsd/component-loader.ts +1 -1
- package/src/resources/extensions/gsd/db/auto-workers.ts +1 -1
- package/src/resources/extensions/gsd/db/command-queue.ts +1 -1
- package/src/resources/extensions/gsd/db/milestone-leases.ts +20 -6
- package/src/resources/extensions/gsd/db/runtime-kv.ts +1 -1
- package/src/resources/extensions/gsd/db/unit-dispatches.ts +1 -1
- package/src/resources/extensions/gsd/db-adapter.ts +1 -1
- package/src/resources/extensions/gsd/db-base-schema.ts +1 -1
- package/src/resources/extensions/gsd/db-connection-cache.ts +1 -1
- package/src/resources/extensions/gsd/db-coordination-schema.ts +1 -1
- package/src/resources/extensions/gsd/db-decision-requirement-rows.ts +1 -1
- package/src/resources/extensions/gsd/db-gate-rows.ts +1 -1
- package/src/resources/extensions/gsd/db-lightweight-query-rows.ts +1 -1
- package/src/resources/extensions/gsd/db-memory-fts-schema.ts +1 -1
- package/src/resources/extensions/gsd/db-migration-backup.ts +1 -1
- package/src/resources/extensions/gsd/db-migration-steps.ts +1 -1
- package/src/resources/extensions/gsd/db-milestone-artifact-rows.ts +1 -1
- package/src/resources/extensions/gsd/db-open-state.ts +1 -1
- package/src/resources/extensions/gsd/db-provider.ts +1 -1
- package/src/resources/extensions/gsd/db-runtime-kv-schema.ts +1 -1
- package/src/resources/extensions/gsd/db-schema-metadata.ts +1 -1
- package/src/resources/extensions/gsd/db-task-slice-rows.ts +1 -1
- package/src/resources/extensions/gsd/db-transaction.ts +1 -1
- package/src/resources/extensions/gsd/db-verification-evidence-rows.ts +1 -1
- package/src/resources/extensions/gsd/db-verification-evidence-schema.ts +1 -1
- package/src/resources/extensions/gsd/doctor-git-checks.ts +1 -1
- package/src/resources/extensions/gsd/doctor-types.ts +1 -1
- package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +1 -1
- package/src/resources/extensions/gsd/ecosystem/loader.ts +1 -1
- package/src/resources/extensions/gsd/escalation.ts +1 -1
- package/src/resources/extensions/gsd/fresh-run-ui.ts +1 -1
- package/src/resources/extensions/gsd/git-conflict-state.ts +1 -1
- package/src/resources/extensions/gsd/git-service.ts +1 -1
- package/src/resources/extensions/gsd/gsd-command-home.ts +1 -1
- package/src/resources/extensions/gsd/gsd-db.ts +1 -1
- package/src/resources/extensions/gsd/guided-unit-context.ts +1 -1
- package/src/resources/extensions/gsd/health-widget.ts +1 -1
- package/src/resources/extensions/gsd/knowledge-backfill.ts +1 -1
- package/src/resources/extensions/gsd/knowledge-capture.ts +1 -1
- package/src/resources/extensions/gsd/knowledge-parser.ts +1 -1
- package/src/resources/extensions/gsd/knowledge-projection.ts +1 -1
- package/src/resources/extensions/gsd/legacy-telemetry.ts +1 -1
- package/src/resources/extensions/gsd/markdown-renderer.ts +1 -1
- package/src/resources/extensions/gsd/memory-backfill.ts +1 -1
- package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +1 -1
- package/src/resources/extensions/gsd/metrics.ts +1 -1
- package/src/resources/extensions/gsd/migrate/audit.ts +2 -2
- package/src/resources/extensions/gsd/migrate/command.ts +2 -2
- package/src/resources/extensions/gsd/migrate/index.ts +1 -1
- package/src/resources/extensions/gsd/migrate/safety.ts +1 -1
- package/src/resources/extensions/gsd/migrate/types.ts +1 -1
- package/src/resources/extensions/gsd/migrate/writer.ts +1 -1
- package/src/resources/extensions/gsd/milestone-scope-classifier.ts +1 -1
- package/src/resources/extensions/gsd/model-router.ts +1 -1
- package/src/resources/extensions/gsd/notification-overlay.ts +1 -1
- package/src/resources/extensions/gsd/orphan-stash-audit.ts +1 -1
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +1 -1
- package/src/resources/extensions/gsd/paths.ts +1 -1
- package/src/resources/extensions/gsd/pending-auto-start.ts +1 -1
- package/src/resources/extensions/gsd/planning-depth.ts +1 -1
- package/src/resources/extensions/gsd/post-execution-checks.ts +1 -1
- package/src/resources/extensions/gsd/pr-evidence.ts +1 -1
- package/src/resources/extensions/gsd/pre-execution-checks.ts +1 -1
- package/src/resources/extensions/gsd/preferences-skills.ts +4 -9
- package/src/resources/extensions/gsd/process-task-path.ts +1 -1
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +6 -0
- package/src/resources/extensions/gsd/prompts/discuss.md +6 -0
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +3 -0
- package/src/resources/extensions/gsd/prompts/review-migration.md +2 -2
- package/src/resources/extensions/gsd/provider-switch-observer.ts +1 -1
- package/src/resources/extensions/gsd/recovery-classification.ts +1 -1
- package/src/resources/extensions/gsd/repository-registry.ts +1 -1
- package/src/resources/extensions/gsd/root-write-leak-guard.ts +4 -1
- package/src/resources/extensions/gsd/schemas/parsers.ts +1 -1
- package/src/resources/extensions/gsd/schemas/validate.ts +1 -1
- package/src/resources/extensions/gsd/skill-catalog.ts +6 -3
- package/src/resources/extensions/gsd/skill-discovery.ts +5 -2
- package/src/resources/extensions/gsd/skill-health.ts +3 -1
- package/src/resources/extensions/gsd/skill-manifest.ts +1 -1
- package/src/resources/extensions/gsd/skill-telemetry.ts +9 -9
- package/src/resources/extensions/gsd/slice-cadence.ts +1 -1
- package/src/resources/extensions/gsd/smart-entry-routing.ts +1 -1
- package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +1 -1
- package/src/resources/extensions/gsd/state-reconciliation/drift/merge-state.ts +1 -1
- package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +1 -1
- package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +1 -1
- package/src/resources/extensions/gsd/state-reconciliation/drift/sketch-flag.ts +1 -1
- package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +1 -1
- package/src/resources/extensions/gsd/state-reconciliation/drift/stale-worker.ts +1 -1
- package/src/resources/extensions/gsd/state-reconciliation/errors.ts +1 -1
- package/src/resources/extensions/gsd/state-reconciliation/index.ts +1 -1
- package/src/resources/extensions/gsd/state-reconciliation/registry.ts +1 -1
- package/src/resources/extensions/gsd/state-reconciliation/spawn-gate.ts +1 -1
- package/src/resources/extensions/gsd/state-reconciliation/types.ts +1 -1
- package/src/resources/extensions/gsd/state-reconciliation.ts +1 -1
- package/src/resources/extensions/gsd/state.ts +1 -1
- package/src/resources/extensions/gsd/tests/artifact-validators.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-deterministic-error-classification-4973.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-discuss-milestone-deadlock-4973.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-loop-no-copy-artifacts.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-loop-symlink-worktree.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +92 -1
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-pause-double-entry-guard.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +22 -2
- package/src/resources/extensions/gsd/tests/auto-post-unit-step-message.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-project-root-env.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +71 -5
- package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-session-scope.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-start-time-persistence.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-start-validation-block.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-status-message.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-stop-notification.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-workers.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-worktree-repair.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/brief-command.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/browser-tools-compatibility-declarations.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/bundled-skill-triggers.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/check-auto-start-pending-gate.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/check-auto-start-ready-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/claude-skill-dirs.test.ts +13 -2
- package/src/resources/extensions/gsd/tests/closeout-git-deferral.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/closeout-recovery.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/cmux.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/command-queue.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/commands-dispatcher-unmerged-milestone.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/commands-dispatcher-validation-block.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/commands-extensions-version-compare.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/complete-slice-composer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/component-loader.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/context-store.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/crash-handler-secondary.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-access-guardrails.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-adapter.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-base-schema.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-connection-cache.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-coordination-schema.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-decision-requirement-rows.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-gate-rows.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-lightweight-query-rows.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-migration-steps.integration.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-migration-steps.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-milestone-artifact-rows.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-open-state.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-provider.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-runtime-kv-schema.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-transaction.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-verification-evidence-schema.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-writer-path-containment.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-writer-root-artifact.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-writer-scope.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/deep-mode-integration.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/deep-planning-mode-dispatch.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/detect-stuck-respects-retry.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/discord-invite-links.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/discuss-headless-rendering.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/discuss-tool-scope-leak.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/dispatch-guard-summary-db-mismatch.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/doctor-empty-worktree.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/enhanced-verification-integration.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/execute-summary-save-empty-project.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/fast-forward-reused-milestone-branch.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/finalize-survivor-branch.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/fresh-run-ui.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/gate-1b-orphan-discrimination.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/gate-1b-recovery-bound-corrections.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/gate-1b-recovery-bound.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/git-checkpoint.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/gsd-command-home.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/gsd-db-failed-open-restore.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/gsd-db-workspace-scope.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/gsd-root-canonical.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/gsd-root-home-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/guided-discuss-requirements-prompt-rendering.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/guided-flow-prompt-consolidation.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/guided-tool-contract.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/has-pending-deep-stage.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/header-renderer.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/help-menu-coverage.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/integration/headless-command.ts +1 -1
- package/src/resources/extensions/gsd/tests/integration/merge-cwd-restore.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/integration/workspace-collapse-integration.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/lazy-pi-tui-import.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/lease-conflict-notice.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/legacy-component-format-telemetry.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/legacy-telemetry.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/load-memory-block.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/marketplace-test-fixtures.ts +3 -3
- package/src/resources/extensions/gsd/tests/memory-consolidation-scanner.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-decay-factor.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/merge-self-branch-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/metrics-atomic-merge.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/metrics-lock-hardening.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/metrics-lock-not-acquired.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/metrics-lock-retry-sleep.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/metrics-milestone-scope.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/metrics-prune-cache-invalidation.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/metrics-scope.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/migrate-safety-audit.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/milestone-leases.test.ts +26 -2
- package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/milestone-scope-classifier.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/milestone-status-tool.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/model-router.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/notifications-handler.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/orphan-merge-bootstrap.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/parallel-milestone-isolation.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/parallel-orchestrator-fast-forward.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/path-cache-decoupled.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/path-normalization-unified.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/paths-cache.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/paused-session-via-db.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/pending-autostart-scope.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/plan-milestone-rendering.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/plan-milestone-schema-recovery.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/planning-depth-setter.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/pr-evidence-equivalence.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/pr-evidence-hardening.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/pr-evidence.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/process-task-path.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +10 -0
- package/src/resources/extensions/gsd/tests/prompt-duplication-cuts.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/provider-switch-observer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/quality-gates.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/queue-prompt-rendering.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/reactive-executor.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/reassess-default-optin.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/register-extension-guard.test.ts +3 -4
- package/src/resources/extensions/gsd/tests/repository-registry.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/research-milestone-composer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/resource-loader-import-path.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/resume-missing-worktree-warning.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/root-write-leak-guard.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/run-uat-composer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/runtime-kv.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/schema-v27-v28-sequence.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/select-resumable-milestone.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/session-lock-multipath.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/skill-manifest.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/slice-cadence.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/smart-entry-draft.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/smart-entry-routing.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/sqlite-unavailable-gate.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/stop-auto-merge-back.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/system-context-memory.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/teardown-chdir-failure-clears-registry.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/teardown-failure-clears-registry.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/token-profile.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/tool-compatibility.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/tool-param-optionality.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/uat-stuck-loop-orphaned-worktree.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/unit-dispatches.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/unmerged-milestone-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/validate-extension-package.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/validate-milestone-prompt-verification-classes.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/validation-block-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/validator-scope-parity.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/verification-gate.test.ts +13 -4
- package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-dispatch-outcome.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-iteration.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile-outcome.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-retry.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-verify-outcome.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-dispatch-ledger.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-install.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-iteration-completion.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-journal-reporter.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-phase-reporter.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-protocol-excerpt.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-session-lock.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-sidecar-iteration.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-sidecar-queue.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-turn-reporter.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-unit-dispatch.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/working-output-messages.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workspace.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-db-same-file.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/worktree-expected-warnings.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/worktree-main-branch.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-projection-writers.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-state-projection.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/write-gate-predicates.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/zero-slice-roadmap-guided.test.ts +1 -1
- package/src/resources/extensions/gsd/tool-contract.ts +1 -1
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +2 -2
- package/src/resources/extensions/gsd/tools/complete-slice.ts +12 -1
- package/src/resources/extensions/gsd/tools/complete-task.ts +1 -1
- package/src/resources/extensions/gsd/tools/context-mode-tool-result.ts +1 -1
- package/src/resources/extensions/gsd/tools/exec-tool.ts +1 -1
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +1 -1
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +1 -1
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +1 -1
- package/src/resources/extensions/gsd/tui/render-kit.ts +1 -1
- package/src/resources/extensions/gsd/unit-context-composer.ts +1 -1
- package/src/resources/extensions/gsd/unit-context-manifest.ts +1 -1
- package/src/resources/extensions/gsd/unmerged-milestone-guard.ts +1 -1
- package/src/resources/extensions/gsd/uok/audit.ts +1 -1
- package/src/resources/extensions/gsd/uok/contracts.ts +1 -1
- package/src/resources/extensions/gsd/uok/dispatch-envelope.ts +1 -1
- package/src/resources/extensions/gsd/uok/kernel.ts +1 -1
- package/src/resources/extensions/gsd/uok/loop-adapter.ts +1 -1
- package/src/resources/extensions/gsd/uok/plan-v2.ts +1 -1
- package/src/resources/extensions/gsd/uok/timeline.ts +1 -1
- package/src/resources/extensions/gsd/validation-block-guard.ts +1 -1
- package/src/resources/extensions/gsd/verification-gate.ts +2 -2
- package/src/resources/extensions/gsd/verification-verdict.ts +1 -1
- package/src/resources/extensions/gsd/watch/header-renderer.ts +1 -1
- package/src/resources/extensions/gsd/watch/splash-palette.ts +1 -1
- package/src/resources/extensions/gsd/workflow-manifest.ts +1 -1
- package/src/resources/extensions/gsd/workflow-projections.ts +1 -1
- package/src/resources/extensions/gsd/workflow-protocol.ts +1 -1
- package/src/resources/extensions/gsd/workflow-reconcile.ts +8 -0
- package/src/resources/extensions/gsd/workflow-templates.ts +1 -1
- package/src/resources/extensions/gsd/working-output-messages.ts +1 -1
- package/src/resources/extensions/gsd/workspace.ts +1 -1
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +1 -1
- package/src/resources/extensions/gsd/worktree-manager.ts +1 -1
- package/src/resources/extensions/gsd/worktree-safety.ts +1 -1
- package/src/resources/extensions/gsd/worktree-state-projection.ts +1 -1
- package/src/resources/extensions/mcp-client/manager.ts +1 -1
- package/src/resources/extensions/mcp-client/tests/manager.test.ts +1 -1
- package/src/resources/extensions/ollama/index.ts +1 -1
- package/src/resources/extensions/ollama/model-capabilities.ts +16 -5
- package/src/resources/extensions/ollama/ndjson-stream.ts +1 -1
- package/src/resources/extensions/ollama/ollama-chat-provider.ts +41 -2
- package/src/resources/extensions/ollama/ollama-client.ts +1 -1
- package/src/resources/extensions/ollama/ollama-commands.ts +1 -1
- package/src/resources/extensions/ollama/ollama-discovery.ts +49 -17
- package/src/resources/extensions/ollama/ollama-tool.ts +1 -1
- package/src/resources/extensions/ollama/tests/model-capabilities.test.ts +48 -3
- package/src/resources/extensions/ollama/tests/ollama-chat-provider-stream.test.ts +1 -1
- package/src/resources/extensions/ollama/tests/ollama-chat-provider-think.test.ts +87 -0
- package/src/resources/extensions/ollama/tests/ollama-client-timeout-env.test.ts +1 -1
- package/src/resources/extensions/ollama/tests/ollama-client.test.ts +1 -1
- package/src/resources/extensions/ollama/tests/ollama-discovery-priority.test.ts +89 -0
- package/src/resources/extensions/ollama/tests/ollama-discovery.test.ts +44 -6
- package/src/resources/extensions/ollama/thinking-parser.ts +1 -1
- package/src/resources/extensions/ollama/types.ts +21 -1
- package/src/resources/extensions/shared/cmux-events.ts +1 -1
- package/src/resources/extensions/shared/gsd-phase-state.ts +1 -1
- package/src/resources/extensions/shared/interview-ui.ts +1 -1
- package/src/resources/extensions/shared/tests/gsd-phase-state.test.ts +1 -1
- package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +1 -1
- package/src/resources/extensions/shared/tests/next-action-ui-hasui.test.ts +1 -1
- package/src/resources/extensions/subagent/launch.ts +1 -1
- package/src/resources/extensions/subagent/run-store.ts +1 -1
- package/src/resources/extensions/subagent/tests/launch.test.ts +1 -1
- package/src/resources/extensions/subagent/tests/run-store.test.ts +1 -1
- package/src/resources/extensions/visual-brief/artifact-policy.ts +1 -1
- package/src/resources/extensions/visual-brief/index.ts +1 -1
- package/src/resources/extensions/visual-brief/page-contract.ts +1 -1
- package/src/resources/extensions/visual-brief/prompts.ts +1 -1
- package/src/resources/extensions/visual-brief/tests/visual-brief.test.ts +1 -1
- package/src/resources/skills/api-design/SKILL.md +1 -1
- package/src/resources/skills/create-gsd-extension/SKILL.md +1 -1
- package/src/resources/skills/create-gsd-extension/templates/templates.test.ts +1 -1
- package/src/resources/skills/create-mcp-server/SKILL.md +1 -1
- package/src/resources/skills/create-skill/SKILL.md +3 -0
- package/src/resources/skills/create-skill/references/gsd-skill-ecosystem.md +13 -4
- package/src/resources/skills/create-skill/workflows/create-new-skill.md +2 -0
- package/src/resources/skills/dependency-upgrade/SKILL.md +1 -1
- package/src/resources/skills/observability/SKILL.md +4 -4
- package/src/resources/skills/security-review/SKILL.md +1 -1
- /package/dist/web/standalone/.next/static/{n91TJEOuW1d9f_wM2uuhO → zmk7-7Fvws2VUTifSEy0f}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{n91TJEOuW1d9f_wM2uuhO → zmk7-7Fvws2VUTifSEy0f}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-audit.js","sourceRoot":"","sources":["../src/token-audit.ts"],"names":[],"mappings":"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","sourcesContent":["// Project/App: GSD-2\n// File Purpose: Provider-boundary token payload audit helpers.\n\nimport type { Context, ImageContent, Message, TextContent, Tool } from \"@gsd/pi-ai\";\nimport type { AgentMessage } from \"./types.js\";\n\nconst CHARS_PER_TOKEN = 4;\nconst LARGEST_MESSAGE_LIMIT = 5;\nconst LARGEST_TOOL_LIMIT = 10;\nconst LARGEST_CUSTOM_MESSAGE_LIMIT = 5;\n\nexport interface TokenAuditMessageSummary {\n\tindex: number;\n\trole: string;\n\ttype: string;\n\tchars: number;\n}\n\nexport interface TokenAuditToolSummary {\n\tname: string;\n\tchars: number;\n}\n\nexport interface TokenAuditCustomMessageSummary {\n\tindex: number;\n\trole: string;\n\tcustomType?: string;\n\tchars: number;\n}\n\nexport interface TokenAuditSummary {\n\tsystemChars: number;\n\ttoolSchemaChars: number;\n\tmessageCharsByRole: Record<string, number>;\n\ttoolResultChars: number;\n\tcustomMessageChars: number;\n\timageCount: number;\n\testimatedInputTokens: number;\n\tmessageCount: number;\n\ttoolCount: number;\n\tlargestMessages: TokenAuditMessageSummary[];\n\tlargestTools: TokenAuditToolSummary[];\n\tlargestCustomMessages: TokenAuditCustomMessageSummary[];\n}\n\nexport interface ProviderPayloadAuditSummary {\n\tpayloadChars: number;\n\tmessageCharsByRole: Record<string, number>;\n\ttoolSchemaChars: number;\n\timageCount: number;\n\tmessageCount: number;\n\ttoolCount: number;\n\tlargestMessages: TokenAuditMessageSummary[];\n\tlargestTools: TokenAuditToolSummary[];\n}\n\nexport function buildTokenAuditSummary(context: Context, sourceMessages: AgentMessage[]): TokenAuditSummary {\n\tconst systemChars = context.systemPrompt?.length ?? 0;\n\tconst toolSummaries = summarizeTools(context.tools ?? []);\n\tconst toolSchemaChars = toolSummaries.reduce((sum, tool) => sum + tool.chars, 0);\n\tconst messageSummaries = context.messages.map((message, index) => summarizeMessage(message, index));\n\tconst messageCharsByRole: Record<string, number> = {};\n\tlet toolResultChars = 0;\n\tlet imageCount = 0;\n\n\tfor (const summary of messageSummaries) {\n\t\tmessageCharsByRole[summary.role] = (messageCharsByRole[summary.role] ?? 0) + summary.chars;\n\t}\n\n\tfor (const message of context.messages) {\n\t\timageCount += countImagesInMessage(message);\n\t\tif (message.role === \"toolResult\") {\n\t\t\ttoolResultChars += countContentChars(message.content);\n\t\t}\n\t}\n\n\tconst customMessageSummaries = summarizeCustomMessages(sourceMessages);\n\tconst customMessageChars = customMessageSummaries.reduce((sum, message) => sum + message.chars, 0);\n\n\tconst totalChars =\n\t\tsystemChars +\n\t\ttoolSchemaChars +\n\t\tmessageSummaries.reduce((sum, message) => sum + message.chars, 0);\n\n\treturn {\n\t\tsystemChars,\n\t\ttoolSchemaChars,\n\t\tmessageCharsByRole,\n\t\ttoolResultChars,\n\t\tcustomMessageChars,\n\t\timageCount,\n\t\testimatedInputTokens: Math.ceil(totalChars / CHARS_PER_TOKEN),\n\t\tmessageCount: context.messages.length,\n\t\ttoolCount: context.tools?.length ?? 0,\n\t\tlargestMessages: [...messageSummaries].sort((a, b) => b.chars - a.chars).slice(0, LARGEST_MESSAGE_LIMIT),\n\t\tlargestTools: [...toolSummaries].sort((a, b) => b.chars - a.chars).slice(0, LARGEST_TOOL_LIMIT),\n\t\tlargestCustomMessages: [...customMessageSummaries]\n\t\t\t.sort((a, b) => b.chars - a.chars)\n\t\t\t.slice(0, LARGEST_CUSTOM_MESSAGE_LIMIT),\n\t};\n}\n\nexport function maybeLogTokenAudit(context: Context, sourceMessages: AgentMessage[]): void {\n\tif (process.env.PI_TOKEN_AUDIT !== \"1\") return;\n\tconst summary = buildTokenAuditSummary(context, sourceMessages);\n\tprocess.stderr.write(`${JSON.stringify({ type: \"token_audit\", summary })}\\n`);\n}\n\nexport function buildProviderPayloadAuditSummary(payload: unknown): ProviderPayloadAuditSummary {\n\tconst record = asRecord(payload);\n\tconst messages = extractProviderMessages(record);\n\tconst tools = extractProviderTools(record);\n\tconst messageSummaries = messages.map((message, index) => summarizeProviderMessage(message, index));\n\tconst toolSummaries = tools.map((tool) => summarizeProviderTool(tool));\n\tconst messageCharsByRole: Record<string, number> = {};\n\tlet imageCount = 0;\n\n\tfor (const summary of messageSummaries) {\n\t\tmessageCharsByRole[summary.role] = (messageCharsByRole[summary.role] ?? 0) + summary.chars;\n\t}\n\tfor (const message of messages) {\n\t\timageCount += countImagesInValue(message);\n\t}\n\n\treturn {\n\t\tpayloadChars: safeJsonLength(payload),\n\t\tmessageCharsByRole,\n\t\ttoolSchemaChars: toolSummaries.reduce((sum, tool) => sum + tool.chars, 0),\n\t\timageCount,\n\t\tmessageCount: messages.length,\n\t\ttoolCount: tools.length,\n\t\tlargestMessages: [...messageSummaries].sort((a, b) => b.chars - a.chars).slice(0, LARGEST_MESSAGE_LIMIT),\n\t\tlargestTools: [...toolSummaries].sort((a, b) => b.chars - a.chars).slice(0, LARGEST_TOOL_LIMIT),\n\t};\n}\n\nexport function maybeLogProviderPayloadAudit(payload: unknown, phase: string): void {\n\tif (process.env.PI_TOKEN_AUDIT !== \"1\") return;\n\tconst summary = buildProviderPayloadAuditSummary(payload);\n\tprocess.stderr.write(`${JSON.stringify({ type: \"token_audit_provider_payload\", phase, summary })}\\n`);\n}\n\nfunction summarizeMessage(message: Message, index: number): TokenAuditMessageSummary {\n\treturn {\n\t\tindex,\n\t\trole: message.role,\n\t\ttype: messageType(message),\n\t\tchars: safeJsonLength(message),\n\t};\n}\n\nfunction messageType(message: Message): string {\n\tif (message.role === \"assistant\") {\n\t\tconst types = new Set(message.content.map((content) => content.type));\n\t\treturn types.size > 0 ? Array.from(types).join(\"+\") : \"assistant\";\n\t}\n\tif (message.role === \"toolResult\") return message.toolName || \"toolResult\";\n\tif (typeof message.content === \"string\") return \"text\";\n\tconst types = new Set(message.content.map((content) => content.type));\n\treturn types.size > 0 ? Array.from(types).join(\"+\") : \"user\";\n}\n\nfunction summarizeTools(tools: Tool[]): TokenAuditToolSummary[] {\n\treturn tools.map((tool) => ({\n\t\tname: tool.name,\n\t\tchars: safeJsonLength(tool),\n\t}));\n}\n\nfunction summarizeCustomMessages(messages: AgentMessage[]): TokenAuditCustomMessageSummary[] {\n\treturn messages.flatMap((message, index) => {\n\t\tif (!isCustomOrInjectedMessage(message)) return [];\n\t\tconst customType = (message as { customType?: unknown }).customType;\n\t\treturn [{\n\t\t\tindex,\n\t\t\trole: String((message as { role?: unknown }).role ?? \"unknown\"),\n\t\t\tcustomType: typeof customType === \"string\" ? customType : undefined,\n\t\t\tchars: safeJsonLength(message),\n\t\t}];\n\t});\n}\n\nfunction summarizeProviderMessage(message: unknown, index: number): TokenAuditMessageSummary {\n\tconst record = asRecord(message);\n\tconst role = typeof record?.role === \"string\" ? record.role : \"unknown\";\n\tconst type = typeof record?.type === \"string\" ? record.type : role;\n\treturn { index, role, type, chars: safeJsonLength(message) };\n}\n\nfunction summarizeProviderTool(tool: unknown): TokenAuditToolSummary {\n\tconst record = asRecord(tool);\n\tconst name =\n\t\ttypeof record?.name === \"string\"\n\t\t\t? record.name\n\t\t\t: typeof asRecord(record?.function)?.name === \"string\"\n\t\t\t\t? String(asRecord(record?.function)?.name)\n\t\t\t\t: typeof asRecord(record?.toolSpec)?.name === \"string\"\n\t\t\t\t\t? String(asRecord(record?.toolSpec)?.name)\n\t\t\t\t\t: \"unknown\";\n\treturn { name, chars: safeJsonLength(tool) };\n}\n\nfunction extractProviderMessages(record: Record<string, unknown> | null): unknown[] {\n\tconst candidates = [\n\t\tgetArrayField(record, \"messages\"),\n\t\tgetArrayField(record, \"input\"),\n\t\tgetArrayField(record, \"contents\"),\n\t].filter((value): value is unknown[] => value !== null);\n\tif (candidates.length > 0) return candidates[0];\n\tconst input = record?.input;\n\treturn typeof input === \"string\" ? [{ role: \"input\", content: input }] : [];\n}\n\nfunction extractProviderTools(record: Record<string, unknown> | null): unknown[] {\n\tconst direct = getArrayField(record, \"tools\")\n\t\t?? getNestedArrayField(record, [\"config\", \"tools\"])\n\t\t?? getNestedArrayField(record, [\"toolConfig\", \"tools\"])\n\t\t?? getNestedArrayField(record, [\"tool_config\", \"tools\"])\n\t\t?? [];\n\treturn direct.flatMap(expandProviderToolEntry);\n}\n\nfunction expandProviderToolEntry(tool: unknown): unknown[] {\n\tconst record = asRecord(tool);\n\tconst functionDeclarations =\n\t\tgetArrayField(record, \"functionDeclarations\")\n\t\t?? getArrayField(record, \"function_declarations\");\n\tif (functionDeclarations) return functionDeclarations;\n\treturn [tool];\n}\n\nfunction countImagesInMessage(message: Message): number {\n\tif (!(\"content\" in message) || !Array.isArray(message.content)) return 0;\n\treturn message.content.filter((content): content is ImageContent => content.type === \"image\").length;\n}\n\nfunction countImagesInValue(value: unknown): number {\n\tif (!value || typeof value !== \"object\") return 0;\n\tif (Array.isArray(value)) {\n\t\treturn value.reduce((sum, item) => sum + countImagesInValue(item), 0);\n\t}\n\tconst record = value as Record<string, unknown>;\n\tlet count = record.type === \"image\" || record.type === \"input_image\" ? 1 : 0;\n\tfor (const nested of Object.values(record)) {\n\t\tcount += countImagesInValue(nested);\n\t}\n\treturn count;\n}\n\nfunction countContentChars(content: string | (TextContent | ImageContent)[]): number {\n\tif (typeof content === \"string\") return content.length;\n\treturn content.reduce((sum, block) => {\n\t\tif (block.type === \"text\") return sum + block.text.length;\n\t\tif (block.type === \"image\") return sum + block.data.length;\n\t\treturn sum;\n\t}, 0);\n}\n\nfunction isCustomOrInjectedMessage(message: AgentMessage): boolean {\n\tconst role = (message as { role?: unknown }).role;\n\treturn role === \"custom\" || role === \"bashExecution\" || role === \"branchSummary\" || role === \"compactionSummary\";\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n\treturn value && typeof value === \"object\" && !Array.isArray(value) ? value as Record<string, unknown> : null;\n}\n\nfunction getArrayField(record: Record<string, unknown> | null, key: string): unknown[] | null {\n\tconst value = record?.[key];\n\treturn Array.isArray(value) ? value : null;\n}\n\nfunction getNestedArrayField(record: Record<string, unknown> | null, path: string[]): unknown[] | null {\n\tlet current: unknown = record;\n\tfor (const key of path) {\n\t\tcurrent = asRecord(current)?.[key];\n\t}\n\treturn Array.isArray(current) ? current : null;\n}\n\nfunction safeJsonLength(value: unknown): number {\n\ttry {\n\t\treturn JSON.stringify(value)?.length ?? 0;\n\t} catch {\n\t\treturn 0;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"token-audit.js","sourceRoot":"","sources":["../src/token-audit.ts"],"names":[],"mappings":"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","sourcesContent":["// Project/App: gsd-pi\n// File Purpose: Provider-boundary token payload audit helpers.\n\nimport type { Context, ImageContent, Message, TextContent, Tool } from \"@gsd/pi-ai\";\nimport type { AgentMessage } from \"./types.js\";\n\nconst CHARS_PER_TOKEN = 4;\nconst LARGEST_MESSAGE_LIMIT = 5;\nconst LARGEST_TOOL_LIMIT = 10;\nconst LARGEST_CUSTOM_MESSAGE_LIMIT = 5;\n\nexport interface TokenAuditMessageSummary {\n\tindex: number;\n\trole: string;\n\ttype: string;\n\tchars: number;\n}\n\nexport interface TokenAuditToolSummary {\n\tname: string;\n\tchars: number;\n}\n\nexport interface TokenAuditCustomMessageSummary {\n\tindex: number;\n\trole: string;\n\tcustomType?: string;\n\tchars: number;\n}\n\nexport interface TokenAuditSummary {\n\tsystemChars: number;\n\ttoolSchemaChars: number;\n\tmessageCharsByRole: Record<string, number>;\n\ttoolResultChars: number;\n\tcustomMessageChars: number;\n\timageCount: number;\n\testimatedInputTokens: number;\n\tmessageCount: number;\n\ttoolCount: number;\n\tlargestMessages: TokenAuditMessageSummary[];\n\tlargestTools: TokenAuditToolSummary[];\n\tlargestCustomMessages: TokenAuditCustomMessageSummary[];\n}\n\nexport interface ProviderPayloadAuditSummary {\n\tpayloadChars: number;\n\tmessageCharsByRole: Record<string, number>;\n\ttoolSchemaChars: number;\n\timageCount: number;\n\tmessageCount: number;\n\ttoolCount: number;\n\tlargestMessages: TokenAuditMessageSummary[];\n\tlargestTools: TokenAuditToolSummary[];\n}\n\nexport function buildTokenAuditSummary(context: Context, sourceMessages: AgentMessage[]): TokenAuditSummary {\n\tconst systemChars = context.systemPrompt?.length ?? 0;\n\tconst toolSummaries = summarizeTools(context.tools ?? []);\n\tconst toolSchemaChars = toolSummaries.reduce((sum, tool) => sum + tool.chars, 0);\n\tconst messageSummaries = context.messages.map((message, index) => summarizeMessage(message, index));\n\tconst messageCharsByRole: Record<string, number> = {};\n\tlet toolResultChars = 0;\n\tlet imageCount = 0;\n\n\tfor (const summary of messageSummaries) {\n\t\tmessageCharsByRole[summary.role] = (messageCharsByRole[summary.role] ?? 0) + summary.chars;\n\t}\n\n\tfor (const message of context.messages) {\n\t\timageCount += countImagesInMessage(message);\n\t\tif (message.role === \"toolResult\") {\n\t\t\ttoolResultChars += countContentChars(message.content);\n\t\t}\n\t}\n\n\tconst customMessageSummaries = summarizeCustomMessages(sourceMessages);\n\tconst customMessageChars = customMessageSummaries.reduce((sum, message) => sum + message.chars, 0);\n\n\tconst totalChars =\n\t\tsystemChars +\n\t\ttoolSchemaChars +\n\t\tmessageSummaries.reduce((sum, message) => sum + message.chars, 0);\n\n\treturn {\n\t\tsystemChars,\n\t\ttoolSchemaChars,\n\t\tmessageCharsByRole,\n\t\ttoolResultChars,\n\t\tcustomMessageChars,\n\t\timageCount,\n\t\testimatedInputTokens: Math.ceil(totalChars / CHARS_PER_TOKEN),\n\t\tmessageCount: context.messages.length,\n\t\ttoolCount: context.tools?.length ?? 0,\n\t\tlargestMessages: [...messageSummaries].sort((a, b) => b.chars - a.chars).slice(0, LARGEST_MESSAGE_LIMIT),\n\t\tlargestTools: [...toolSummaries].sort((a, b) => b.chars - a.chars).slice(0, LARGEST_TOOL_LIMIT),\n\t\tlargestCustomMessages: [...customMessageSummaries]\n\t\t\t.sort((a, b) => b.chars - a.chars)\n\t\t\t.slice(0, LARGEST_CUSTOM_MESSAGE_LIMIT),\n\t};\n}\n\nexport function maybeLogTokenAudit(context: Context, sourceMessages: AgentMessage[]): void {\n\tif (process.env.PI_TOKEN_AUDIT !== \"1\") return;\n\tconst summary = buildTokenAuditSummary(context, sourceMessages);\n\tprocess.stderr.write(`${JSON.stringify({ type: \"token_audit\", summary })}\\n`);\n}\n\nexport function buildProviderPayloadAuditSummary(payload: unknown): ProviderPayloadAuditSummary {\n\tconst record = asRecord(payload);\n\tconst messages = extractProviderMessages(record);\n\tconst tools = extractProviderTools(record);\n\tconst messageSummaries = messages.map((message, index) => summarizeProviderMessage(message, index));\n\tconst toolSummaries = tools.map((tool) => summarizeProviderTool(tool));\n\tconst messageCharsByRole: Record<string, number> = {};\n\tlet imageCount = 0;\n\n\tfor (const summary of messageSummaries) {\n\t\tmessageCharsByRole[summary.role] = (messageCharsByRole[summary.role] ?? 0) + summary.chars;\n\t}\n\tfor (const message of messages) {\n\t\timageCount += countImagesInValue(message);\n\t}\n\n\treturn {\n\t\tpayloadChars: safeJsonLength(payload),\n\t\tmessageCharsByRole,\n\t\ttoolSchemaChars: toolSummaries.reduce((sum, tool) => sum + tool.chars, 0),\n\t\timageCount,\n\t\tmessageCount: messages.length,\n\t\ttoolCount: tools.length,\n\t\tlargestMessages: [...messageSummaries].sort((a, b) => b.chars - a.chars).slice(0, LARGEST_MESSAGE_LIMIT),\n\t\tlargestTools: [...toolSummaries].sort((a, b) => b.chars - a.chars).slice(0, LARGEST_TOOL_LIMIT),\n\t};\n}\n\nexport function maybeLogProviderPayloadAudit(payload: unknown, phase: string): void {\n\tif (process.env.PI_TOKEN_AUDIT !== \"1\") return;\n\tconst summary = buildProviderPayloadAuditSummary(payload);\n\tprocess.stderr.write(`${JSON.stringify({ type: \"token_audit_provider_payload\", phase, summary })}\\n`);\n}\n\nfunction summarizeMessage(message: Message, index: number): TokenAuditMessageSummary {\n\treturn {\n\t\tindex,\n\t\trole: message.role,\n\t\ttype: messageType(message),\n\t\tchars: safeJsonLength(message),\n\t};\n}\n\nfunction messageType(message: Message): string {\n\tif (message.role === \"assistant\") {\n\t\tconst types = new Set(message.content.map((content) => content.type));\n\t\treturn types.size > 0 ? Array.from(types).join(\"+\") : \"assistant\";\n\t}\n\tif (message.role === \"toolResult\") return message.toolName || \"toolResult\";\n\tif (typeof message.content === \"string\") return \"text\";\n\tconst types = new Set(message.content.map((content) => content.type));\n\treturn types.size > 0 ? Array.from(types).join(\"+\") : \"user\";\n}\n\nfunction summarizeTools(tools: Tool[]): TokenAuditToolSummary[] {\n\treturn tools.map((tool) => ({\n\t\tname: tool.name,\n\t\tchars: safeJsonLength(tool),\n\t}));\n}\n\nfunction summarizeCustomMessages(messages: AgentMessage[]): TokenAuditCustomMessageSummary[] {\n\treturn messages.flatMap((message, index) => {\n\t\tif (!isCustomOrInjectedMessage(message)) return [];\n\t\tconst customType = (message as { customType?: unknown }).customType;\n\t\treturn [{\n\t\t\tindex,\n\t\t\trole: String((message as { role?: unknown }).role ?? \"unknown\"),\n\t\t\tcustomType: typeof customType === \"string\" ? customType : undefined,\n\t\t\tchars: safeJsonLength(message),\n\t\t}];\n\t});\n}\n\nfunction summarizeProviderMessage(message: unknown, index: number): TokenAuditMessageSummary {\n\tconst record = asRecord(message);\n\tconst role = typeof record?.role === \"string\" ? record.role : \"unknown\";\n\tconst type = typeof record?.type === \"string\" ? record.type : role;\n\treturn { index, role, type, chars: safeJsonLength(message) };\n}\n\nfunction summarizeProviderTool(tool: unknown): TokenAuditToolSummary {\n\tconst record = asRecord(tool);\n\tconst name =\n\t\ttypeof record?.name === \"string\"\n\t\t\t? record.name\n\t\t\t: typeof asRecord(record?.function)?.name === \"string\"\n\t\t\t\t? String(asRecord(record?.function)?.name)\n\t\t\t\t: typeof asRecord(record?.toolSpec)?.name === \"string\"\n\t\t\t\t\t? String(asRecord(record?.toolSpec)?.name)\n\t\t\t\t\t: \"unknown\";\n\treturn { name, chars: safeJsonLength(tool) };\n}\n\nfunction extractProviderMessages(record: Record<string, unknown> | null): unknown[] {\n\tconst candidates = [\n\t\tgetArrayField(record, \"messages\"),\n\t\tgetArrayField(record, \"input\"),\n\t\tgetArrayField(record, \"contents\"),\n\t].filter((value): value is unknown[] => value !== null);\n\tif (candidates.length > 0) return candidates[0];\n\tconst input = record?.input;\n\treturn typeof input === \"string\" ? [{ role: \"input\", content: input }] : [];\n}\n\nfunction extractProviderTools(record: Record<string, unknown> | null): unknown[] {\n\tconst direct = getArrayField(record, \"tools\")\n\t\t?? getNestedArrayField(record, [\"config\", \"tools\"])\n\t\t?? getNestedArrayField(record, [\"toolConfig\", \"tools\"])\n\t\t?? getNestedArrayField(record, [\"tool_config\", \"tools\"])\n\t\t?? [];\n\treturn direct.flatMap(expandProviderToolEntry);\n}\n\nfunction expandProviderToolEntry(tool: unknown): unknown[] {\n\tconst record = asRecord(tool);\n\tconst functionDeclarations =\n\t\tgetArrayField(record, \"functionDeclarations\")\n\t\t?? getArrayField(record, \"function_declarations\");\n\tif (functionDeclarations) return functionDeclarations;\n\treturn [tool];\n}\n\nfunction countImagesInMessage(message: Message): number {\n\tif (!(\"content\" in message) || !Array.isArray(message.content)) return 0;\n\treturn message.content.filter((content): content is ImageContent => content.type === \"image\").length;\n}\n\nfunction countImagesInValue(value: unknown): number {\n\tif (!value || typeof value !== \"object\") return 0;\n\tif (Array.isArray(value)) {\n\t\treturn value.reduce((sum, item) => sum + countImagesInValue(item), 0);\n\t}\n\tconst record = value as Record<string, unknown>;\n\tlet count = record.type === \"image\" || record.type === \"input_image\" ? 1 : 0;\n\tfor (const nested of Object.values(record)) {\n\t\tcount += countImagesInValue(nested);\n\t}\n\treturn count;\n}\n\nfunction countContentChars(content: string | (TextContent | ImageContent)[]): number {\n\tif (typeof content === \"string\") return content.length;\n\treturn content.reduce((sum, block) => {\n\t\tif (block.type === \"text\") return sum + block.text.length;\n\t\tif (block.type === \"image\") return sum + block.data.length;\n\t\treturn sum;\n\t}, 0);\n}\n\nfunction isCustomOrInjectedMessage(message: AgentMessage): boolean {\n\tconst role = (message as { role?: unknown }).role;\n\treturn role === \"custom\" || role === \"bashExecution\" || role === \"branchSummary\" || role === \"compactionSummary\";\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n\treturn value && typeof value === \"object\" && !Array.isArray(value) ? value as Record<string, unknown> : null;\n}\n\nfunction getArrayField(record: Record<string, unknown> | null, key: string): unknown[] | null {\n\tconst value = record?.[key];\n\treturn Array.isArray(value) ? value : null;\n}\n\nfunction getNestedArrayField(record: Record<string, unknown> | null, path: string[]): unknown[] | null {\n\tlet current: unknown = record;\n\tfor (const key of path) {\n\t\tcurrent = asRecord(current)?.[key];\n\t}\n\treturn Array.isArray(current) ? current : null;\n}\n\nfunction safeJsonLength(value: unknown): number {\n\ttry {\n\t\treturn JSON.stringify(value)?.length ?? 0;\n\t} catch {\n\t\treturn 0;\n\t}\n}\n"]}
|
|
@@ -50,6 +50,28 @@ export interface BeforeToolCallContext {
|
|
|
50
50
|
/** Current agent context at the time the tool call is prepared. */
|
|
51
51
|
context: AgentContext;
|
|
52
52
|
}
|
|
53
|
+
/** A single tool call that failed during preparation (validation / not found / blocked). */
|
|
54
|
+
export interface PreparationErrorFailure {
|
|
55
|
+
toolName: string;
|
|
56
|
+
arguments: Record<string, unknown>;
|
|
57
|
+
errorText: string;
|
|
58
|
+
}
|
|
59
|
+
/** Context passed to `onPreparationErrorsTurn`. */
|
|
60
|
+
export interface PreparationErrorsTurnContext {
|
|
61
|
+
/** The assistant message that requested the tool calls. */
|
|
62
|
+
assistantMessage: AssistantMessage;
|
|
63
|
+
/** Tool calls that failed during preparation this turn. */
|
|
64
|
+
failures: PreparationErrorFailure[];
|
|
65
|
+
/** Count of tool results that failed during preparation. */
|
|
66
|
+
preparationErrorCount: number;
|
|
67
|
+
}
|
|
68
|
+
/** Result returned from `onPreparationErrorsTurn`. */
|
|
69
|
+
export interface PreparationErrorsTurnResult {
|
|
70
|
+
/** Messages injected before the next LLM call (same as getSteeringMessages). */
|
|
71
|
+
steeringMessages?: AgentMessage[];
|
|
72
|
+
/** When true, the schema-overload counter resets instead of incrementing this turn. */
|
|
73
|
+
resetValidationFailureCap?: boolean;
|
|
74
|
+
}
|
|
53
75
|
/** Context passed to `afterToolCall`. */
|
|
54
76
|
export interface AfterToolCallContext {
|
|
55
77
|
/** The assistant message that requested the tool call. */
|
|
@@ -175,6 +197,16 @@ export interface AgentLoopConfig extends SimpleStreamOptions {
|
|
|
175
197
|
* The hook receives the agent abort signal and is responsible for honoring it.
|
|
176
198
|
*/
|
|
177
199
|
afterToolCall?: (context: AfterToolCallContext, signal?: AbortSignal) => Promise<AfterToolCallResult | undefined>;
|
|
200
|
+
/**
|
|
201
|
+
* Optional formatter for tool argument validation errors (AJV / schema failures).
|
|
202
|
+
* Called in prepareToolCall before the error tool result is emitted.
|
|
203
|
+
*/
|
|
204
|
+
formatValidationError?: (tool: AgentTool<any>, toolCall: AgentToolCall, baseMessage: string) => string | Promise<string>;
|
|
205
|
+
/**
|
|
206
|
+
* Called after a turn when one or more tool calls failed during preparation.
|
|
207
|
+
* Use to inject corrective steering and reset the schema-overload counter.
|
|
208
|
+
*/
|
|
209
|
+
onPreparationErrorsTurn?: (context: PreparationErrorsTurnContext, signal?: AbortSignal) => Promise<PreparationErrorsTurnResult | void>;
|
|
178
210
|
/**
|
|
179
211
|
* When true, tool calls in assistant messages are rendered in the TUI
|
|
180
212
|
* but NOT executed locally. Used for providers that handle tool execution
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n\tAssistantMessage,\n\tAssistantMessageEvent,\n\tImageContent,\n\tMessage,\n\tModel,\n\tSimpleStreamOptions,\n\tstreamSimple,\n\tTextContent,\n\tTool,\n\tToolResultMessage,\n} from \"@gsd/pi-ai\";\nimport type { Static, TSchema } from \"@sinclair/typebox\";\n\n/** Stream function - can return sync or Promise for async config lookup */\nexport type StreamFn = (\n\t...args: Parameters<typeof streamSimple>\n) => ReturnType<typeof streamSimple> | Promise<ReturnType<typeof streamSimple>>;\n\n/**\n * Configuration for how tool calls from a single assistant message are executed.\n *\n * - \"sequential\": each tool call is prepared, executed, and finalized before the next one starts.\n * - \"parallel\": tool calls are prepared sequentially, then allowed tools execute concurrently.\n * Final tool results are still emitted in assistant source order.\n */\nexport type ToolExecutionMode = \"sequential\" | \"parallel\";\n\n/** A single tool call content block emitted by an assistant message. */\nexport type AgentToolCall = Extract<AssistantMessage[\"content\"][number], { type: \"toolCall\" }>;\n\n/**\n * Result returned from `beforeToolCall`.\n *\n * Returning `{ block: true }` prevents the tool from executing. The loop emits an error tool result instead.\n * `reason` becomes the text shown in that error result. If omitted, a default blocked message is used.\n */\nexport interface BeforeToolCallResult {\n\tblock?: boolean;\n\treason?: string;\n}\n\n/**\n * Partial override returned from `afterToolCall`.\n *\n * Merge semantics are field-by-field:\n * - `content`: if provided, replaces the tool result content array in full\n * - `details`: if provided, replaces the tool result details value in full\n * - `isError`: if provided, replaces the tool result error flag\n *\n * Omitted fields keep the original executed tool result values.\n */\nexport interface AfterToolCallResult {\n\tcontent?: (TextContent | ImageContent)[];\n\tdetails?: unknown;\n\tisError?: boolean;\n}\n\n/** Context passed to `beforeToolCall`. */\nexport interface BeforeToolCallContext {\n\t/** The assistant message that requested the tool call. */\n\tassistantMessage: AssistantMessage;\n\t/** The raw tool call block from `assistantMessage.content`. */\n\ttoolCall: AgentToolCall;\n\t/** Validated tool arguments for the target tool schema. */\n\targs: unknown;\n\t/** Current agent context at the time the tool call is prepared. */\n\tcontext: AgentContext;\n}\n\n/** Context passed to `afterToolCall`. */\nexport interface AfterToolCallContext {\n\t/** The assistant message that requested the tool call. */\n\tassistantMessage: AssistantMessage;\n\t/** The raw tool call block from `assistantMessage.content`. */\n\ttoolCall: AgentToolCall;\n\t/** Validated tool arguments for the target tool schema. */\n\targs: unknown;\n\t/** The executed tool result before any `afterToolCall` overrides are applied. */\n\tresult: AgentToolResult<any>;\n\t/** Whether the executed tool result is currently treated as an error. */\n\tisError: boolean;\n\t/** Current agent context at the time the tool call is finalized. */\n\tcontext: AgentContext;\n}\n\n/**\n * Configuration for the agent loop.\n */\nexport interface AgentLoopConfig extends SimpleStreamOptions {\n\tmodel: Model<any>;\n\n\t/**\n\t * Converts AgentMessage[] to LLM-compatible Message[] before each LLM call.\n\t *\n\t * Each AgentMessage must be converted to a UserMessage, AssistantMessage, or ToolResultMessage\n\t * that the LLM can understand. AgentMessages that cannot be converted (e.g., UI-only notifications,\n\t * status messages) should be filtered out.\n\t *\n\t * @example\n\t * ```typescript\n\t * convertToLlm: (messages) => messages.flatMap(m => {\n\t * if (m.role === \"custom\") {\n\t * // Convert custom message to user message\n\t * return [{ role: \"user\", content: m.content, timestamp: m.timestamp }];\n\t * }\n\t * if (m.role === \"notification\") {\n\t * // Filter out UI-only messages\n\t * return [];\n\t * }\n\t * // Pass through standard LLM messages\n\t * return [m];\n\t * })\n\t * ```\n\t */\n\tconvertToLlm: (messages: AgentMessage[]) => Message[] | Promise<Message[]>;\n\n\t/**\n\t * Optional transform applied to the context before `convertToLlm`.\n\t *\n\t * Use this for operations that work at the AgentMessage level:\n\t * - Context window management (pruning old messages)\n\t * - Injecting context from external sources\n\t *\n\t * @example\n\t * ```typescript\n\t * transformContext: async (messages) => {\n\t * if (estimateTokens(messages) > MAX_TOKENS) {\n\t * return pruneOldMessages(messages);\n\t * }\n\t * return messages;\n\t * }\n\t * ```\n\t */\n\ttransformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>;\n\n\t/**\n\t * Optional final tool filter applied immediately before each provider call.\n\t *\n\t * Use this for runtime policy that depends on the fully active tool set.\n\t * The returned list is what token audit and the provider request both see.\n\t * Receives the post-transform AgentMessage context so policy can scope\n\t * request-local custom messages without inspecting provider payload text.\n\t */\n\tfilterTools?: (\n\t\ttools: AgentTool<any>[],\n\t\tsignal?: AbortSignal,\n\t\tmessages?: AgentMessage[],\n\t) => AgentTool<any>[] | Promise<AgentTool<any>[]>;\n\n\t/**\n\t * Resolves an API key dynamically for each LLM call.\n\t *\n\t * Useful for short-lived OAuth tokens (e.g., GitHub Copilot) that may expire\n\t * during long-running tool execution phases.\n\t */\n\tgetApiKey?: (provider: string) => Promise<string | undefined> | string | undefined;\n\n\t/**\n\t * Returns steering messages to inject into the conversation mid-run.\n\t *\n\t * Called after each tool execution to check for user interruptions.\n\t * If messages are returned, remaining tool calls are skipped and\n\t * these messages are added to the context before the next LLM call.\n\t *\n\t * Use this for \"steering\" the agent while it's working.\n\t */\n\tgetSteeringMessages?: () => Promise<AgentMessage[]>;\n\n\t/**\n\t * Returns follow-up messages to process after the agent would otherwise stop.\n\t *\n\t * Called when the agent has no more tool calls and no steering messages.\n\t * If messages are returned, they're added to the context and the agent\n\t * continues with another turn.\n\t *\n\t * Use this for follow-up messages that should wait until the agent finishes.\n\t */\n\tgetFollowUpMessages?: () => Promise<AgentMessage[]>;\n\n\t/**\n\t * Tool execution mode.\n\t * - \"sequential\": execute tool calls one by one\n\t * - \"parallel\": preflight tool calls sequentially, then execute allowed tools concurrently\n\t *\n\t * Default: \"parallel\"\n\t */\n\ttoolExecution?: ToolExecutionMode;\n\n\t/**\n\t * Called before a tool is executed, after arguments have been validated.\n\t *\n\t * Return `{ block: true }` to prevent execution. The loop emits an error tool result instead.\n\t * The hook receives the agent abort signal and is responsible for honoring it.\n\t */\n\tbeforeToolCall?: (context: BeforeToolCallContext, signal?: AbortSignal) => Promise<BeforeToolCallResult | undefined>;\n\n\t/**\n\t * Called after a tool finishes executing, before final tool events are emitted.\n\t *\n\t * Return an `AfterToolCallResult` to override parts of the executed tool result:\n\t * - `content` replaces the full content array\n\t * - `details` replaces the full details payload\n\t * - `isError` replaces the error flag\n\t *\n\t * Any omitted fields keep their original values. No deep merge is performed.\n\t * The hook receives the agent abort signal and is responsible for honoring it.\n\t */\n\tafterToolCall?: (context: AfterToolCallContext, signal?: AbortSignal) => Promise<AfterToolCallResult | undefined>;\n\n\t/**\n\t * When true, tool calls in assistant messages are rendered in the TUI\n\t * but NOT executed locally. Used for providers that handle tool execution\n\t * internally (e.g., Claude Code CLI via Agent SDK).\n\t *\n\t * The agent loop emits tool_execution_start/end events for TUI rendering\n\t * but skips tool.execute() and does not add tool results to context.\n\t */\n\texternalToolExecution?: boolean;\n\n\t/**\n\t * Called when the agent is about to retry after a recoverable provider error.\n\t *\n\t * Fires after each transient failure (rate limit, connection reset, etc.)\n\t * before the retry backoff sleep. Useful for surfacing retry telemetry to\n\t * the host app without instrumenting the provider layer directly.\n\t */\n\tonRetry?: (context: RetryContext, signal?: AbortSignal) => Promise<void> | void;\n\n\t/**\n\t * Called when the LLM stream fails mid-response.\n\t *\n\t * Fires once per failed stream — `onRetry` may still fire separately if the\n\t * loop elects to retry. Use this for logging or flushing partial state.\n\t */\n\tonStreamError?: (context: StreamErrorContext, signal?: AbortSignal) => Promise<void> | void;\n}\n\n/** Context passed to `onRetry`. */\nexport interface RetryContext {\n\tattempt: number;\n\tmaxRetries: number;\n\tdelayMs: number;\n\terror: Error;\n}\n\n/** Context passed to `onStreamError`. */\nexport interface StreamErrorContext {\n\terror: Error;\n\t/** The text already emitted by the stream before it failed (may be empty). */\n\tpartialText: string;\n\t/** Whether the loop will attempt to retry after this failure. */\n\twillRetry: boolean;\n}\n\n/**\n * Thinking/reasoning level for models that support it.\n * Note: \"xhigh\" is only supported by OpenAI gpt-5.1-codex-max, gpt-5.2, gpt-5.2-codex, gpt-5.3, and gpt-5.3-codex models.\n */\nexport type ThinkingLevel = \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\";\n\n/**\n * Extensible interface for custom app messages.\n * Apps can extend via declaration merging:\n *\n * @example\n * ```typescript\n * declare module \"@mariozechner/agent\" {\n * interface CustomAgentMessages {\n * artifact: ArtifactMessage;\n * notification: NotificationMessage;\n * }\n * }\n * ```\n */\nexport interface CustomAgentMessages {\n\t// Empty by default - apps extend via declaration merging\n}\n\n/**\n * AgentMessage: Union of LLM messages + custom messages.\n * This abstraction allows apps to add custom message types while maintaining\n * type safety and compatibility with the base LLM messages.\n */\nexport type AgentMessage = Message | CustomAgentMessages[keyof CustomAgentMessages];\n\n/**\n * Agent state containing all configuration and conversation data.\n */\nexport interface AgentState {\n\tsystemPrompt: string;\n\tmodel: Model<any>;\n\tthinkingLevel: ThinkingLevel;\n\ttools: AgentTool<any>[];\n\tmessages: AgentMessage[]; // Can include attachments + custom message types\n\tisStreaming: boolean;\n\tstreamMessage: AgentMessage | null;\n\tpendingToolCalls: Set<string>;\n\terror?: string;\n\t/**\n\t * The model currently being used for inference. Set at _runLoop() start,\n\t * cleared when the loop ends. When present, UI should display this instead\n\t * of `model` to avoid showing a stale value after a mid-turn model switch.\n\t */\n\tactiveInferenceModel?: Model<any>;\n}\n\nexport interface AgentToolResult<T> {\n\t// Content blocks supporting text and images\n\tcontent: (TextContent | ImageContent)[];\n\t// Details to be displayed in a UI or logged\n\tdetails: T;\n}\n\n// Callback for streaming tool execution updates\nexport type AgentToolUpdateCallback<T = any> = (partialResult: AgentToolResult<T>) => void;\n\n// AgentTool extends Tool but adds the execute function\nexport interface AgentTool<TParameters extends TSchema = TSchema, TDetails = any> extends Tool<TParameters> {\n\t// A human-readable label for the tool to be displayed in UI\n\tlabel: string;\n\texecute: (\n\t\ttoolCallId: string,\n\t\tparams: Static<TParameters>,\n\t\tsignal?: AbortSignal,\n\t\tonUpdate?: AgentToolUpdateCallback<TDetails>,\n\t) => Promise<AgentToolResult<TDetails>>;\n}\n\n// AgentContext is like Context but uses AgentTool\nexport interface AgentContext {\n\tsystemPrompt: string;\n\tmessages: AgentMessage[];\n\ttools?: AgentTool<any>[];\n}\n\nexport type AgentAbortOrigin = \"session-transition\" | \"user\" | \"timeout\" | \"unknown\";\n\n/**\n * Events emitted by the Agent for UI updates.\n * These events provide fine-grained lifecycle information for messages, turns, and tool executions.\n */\nexport type AgentEvent =\n\t// Agent lifecycle\n\t| { type: \"agent_start\"; sessionId?: string; turnId?: string }\n\t| { type: \"agent_end\"; messages: AgentMessage[]; sessionId?: string; turnId?: string; abortOrigin?: AgentAbortOrigin }\n\t// Turn lifecycle - a turn is one assistant response + any tool calls/results\n\t| { type: \"turn_start\"; sessionId?: string; turnId?: string }\n\t| { type: \"turn_end\"; message: AgentMessage; toolResults: ToolResultMessage[]; sessionId?: string; turnId?: string }\n\t// Message lifecycle - emitted for user, assistant, and toolResult messages\n\t| { type: \"message_start\"; message: AgentMessage; sessionId?: string; turnId?: string }\n\t// Only emitted for assistant messages during streaming\n\t| { type: \"message_update\"; message: AgentMessage; assistantMessageEvent: AssistantMessageEvent; sessionId?: string; turnId?: string }\n\t| { type: \"message_end\"; message: AgentMessage; sessionId?: string; turnId?: string }\n\t// Tool execution lifecycle\n\t| { type: \"tool_execution_start\"; toolCallId: string; toolName: string; args: any; sessionId?: string; turnId?: string }\n\t| { type: \"tool_execution_update\"; toolCallId: string; toolName: string; args: any; partialResult: any; sessionId?: string; turnId?: string }\n\t| { type: \"tool_execution_end\"; toolCallId: string; toolName: string; result: any; isError: boolean; sessionId?: string; turnId?: string };\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n\tAssistantMessage,\n\tAssistantMessageEvent,\n\tImageContent,\n\tMessage,\n\tModel,\n\tSimpleStreamOptions,\n\tstreamSimple,\n\tTextContent,\n\tTool,\n\tToolResultMessage,\n} from \"@gsd/pi-ai\";\nimport type { Static, TSchema } from \"@sinclair/typebox\";\n\n/** Stream function - can return sync or Promise for async config lookup */\nexport type StreamFn = (\n\t...args: Parameters<typeof streamSimple>\n) => ReturnType<typeof streamSimple> | Promise<ReturnType<typeof streamSimple>>;\n\n/**\n * Configuration for how tool calls from a single assistant message are executed.\n *\n * - \"sequential\": each tool call is prepared, executed, and finalized before the next one starts.\n * - \"parallel\": tool calls are prepared sequentially, then allowed tools execute concurrently.\n * Final tool results are still emitted in assistant source order.\n */\nexport type ToolExecutionMode = \"sequential\" | \"parallel\";\n\n/** A single tool call content block emitted by an assistant message. */\nexport type AgentToolCall = Extract<AssistantMessage[\"content\"][number], { type: \"toolCall\" }>;\n\n/**\n * Result returned from `beforeToolCall`.\n *\n * Returning `{ block: true }` prevents the tool from executing. The loop emits an error tool result instead.\n * `reason` becomes the text shown in that error result. If omitted, a default blocked message is used.\n */\nexport interface BeforeToolCallResult {\n\tblock?: boolean;\n\treason?: string;\n}\n\n/**\n * Partial override returned from `afterToolCall`.\n *\n * Merge semantics are field-by-field:\n * - `content`: if provided, replaces the tool result content array in full\n * - `details`: if provided, replaces the tool result details value in full\n * - `isError`: if provided, replaces the tool result error flag\n *\n * Omitted fields keep the original executed tool result values.\n */\nexport interface AfterToolCallResult {\n\tcontent?: (TextContent | ImageContent)[];\n\tdetails?: unknown;\n\tisError?: boolean;\n}\n\n/** Context passed to `beforeToolCall`. */\nexport interface BeforeToolCallContext {\n\t/** The assistant message that requested the tool call. */\n\tassistantMessage: AssistantMessage;\n\t/** The raw tool call block from `assistantMessage.content`. */\n\ttoolCall: AgentToolCall;\n\t/** Validated tool arguments for the target tool schema. */\n\targs: unknown;\n\t/** Current agent context at the time the tool call is prepared. */\n\tcontext: AgentContext;\n}\n\n/** A single tool call that failed during preparation (validation / not found / blocked). */\nexport interface PreparationErrorFailure {\n\ttoolName: string;\n\targuments: Record<string, unknown>;\n\terrorText: string;\n}\n\n/** Context passed to `onPreparationErrorsTurn`. */\nexport interface PreparationErrorsTurnContext {\n\t/** The assistant message that requested the tool calls. */\n\tassistantMessage: AssistantMessage;\n\t/** Tool calls that failed during preparation this turn. */\n\tfailures: PreparationErrorFailure[];\n\t/** Count of tool results that failed during preparation. */\n\tpreparationErrorCount: number;\n}\n\n/** Result returned from `onPreparationErrorsTurn`. */\nexport interface PreparationErrorsTurnResult {\n\t/** Messages injected before the next LLM call (same as getSteeringMessages). */\n\tsteeringMessages?: AgentMessage[];\n\t/** When true, the schema-overload counter resets instead of incrementing this turn. */\n\tresetValidationFailureCap?: boolean;\n}\n\n/** Context passed to `afterToolCall`. */\nexport interface AfterToolCallContext {\n\t/** The assistant message that requested the tool call. */\n\tassistantMessage: AssistantMessage;\n\t/** The raw tool call block from `assistantMessage.content`. */\n\ttoolCall: AgentToolCall;\n\t/** Validated tool arguments for the target tool schema. */\n\targs: unknown;\n\t/** The executed tool result before any `afterToolCall` overrides are applied. */\n\tresult: AgentToolResult<any>;\n\t/** Whether the executed tool result is currently treated as an error. */\n\tisError: boolean;\n\t/** Current agent context at the time the tool call is finalized. */\n\tcontext: AgentContext;\n}\n\n/**\n * Configuration for the agent loop.\n */\nexport interface AgentLoopConfig extends SimpleStreamOptions {\n\tmodel: Model<any>;\n\n\t/**\n\t * Converts AgentMessage[] to LLM-compatible Message[] before each LLM call.\n\t *\n\t * Each AgentMessage must be converted to a UserMessage, AssistantMessage, or ToolResultMessage\n\t * that the LLM can understand. AgentMessages that cannot be converted (e.g., UI-only notifications,\n\t * status messages) should be filtered out.\n\t *\n\t * @example\n\t * ```typescript\n\t * convertToLlm: (messages) => messages.flatMap(m => {\n\t * if (m.role === \"custom\") {\n\t * // Convert custom message to user message\n\t * return [{ role: \"user\", content: m.content, timestamp: m.timestamp }];\n\t * }\n\t * if (m.role === \"notification\") {\n\t * // Filter out UI-only messages\n\t * return [];\n\t * }\n\t * // Pass through standard LLM messages\n\t * return [m];\n\t * })\n\t * ```\n\t */\n\tconvertToLlm: (messages: AgentMessage[]) => Message[] | Promise<Message[]>;\n\n\t/**\n\t * Optional transform applied to the context before `convertToLlm`.\n\t *\n\t * Use this for operations that work at the AgentMessage level:\n\t * - Context window management (pruning old messages)\n\t * - Injecting context from external sources\n\t *\n\t * @example\n\t * ```typescript\n\t * transformContext: async (messages) => {\n\t * if (estimateTokens(messages) > MAX_TOKENS) {\n\t * return pruneOldMessages(messages);\n\t * }\n\t * return messages;\n\t * }\n\t * ```\n\t */\n\ttransformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>;\n\n\t/**\n\t * Optional final tool filter applied immediately before each provider call.\n\t *\n\t * Use this for runtime policy that depends on the fully active tool set.\n\t * The returned list is what token audit and the provider request both see.\n\t * Receives the post-transform AgentMessage context so policy can scope\n\t * request-local custom messages without inspecting provider payload text.\n\t */\n\tfilterTools?: (\n\t\ttools: AgentTool<any>[],\n\t\tsignal?: AbortSignal,\n\t\tmessages?: AgentMessage[],\n\t) => AgentTool<any>[] | Promise<AgentTool<any>[]>;\n\n\t/**\n\t * Resolves an API key dynamically for each LLM call.\n\t *\n\t * Useful for short-lived OAuth tokens (e.g., GitHub Copilot) that may expire\n\t * during long-running tool execution phases.\n\t */\n\tgetApiKey?: (provider: string) => Promise<string | undefined> | string | undefined;\n\n\t/**\n\t * Returns steering messages to inject into the conversation mid-run.\n\t *\n\t * Called after each tool execution to check for user interruptions.\n\t * If messages are returned, remaining tool calls are skipped and\n\t * these messages are added to the context before the next LLM call.\n\t *\n\t * Use this for \"steering\" the agent while it's working.\n\t */\n\tgetSteeringMessages?: () => Promise<AgentMessage[]>;\n\n\t/**\n\t * Returns follow-up messages to process after the agent would otherwise stop.\n\t *\n\t * Called when the agent has no more tool calls and no steering messages.\n\t * If messages are returned, they're added to the context and the agent\n\t * continues with another turn.\n\t *\n\t * Use this for follow-up messages that should wait until the agent finishes.\n\t */\n\tgetFollowUpMessages?: () => Promise<AgentMessage[]>;\n\n\t/**\n\t * Tool execution mode.\n\t * - \"sequential\": execute tool calls one by one\n\t * - \"parallel\": preflight tool calls sequentially, then execute allowed tools concurrently\n\t *\n\t * Default: \"parallel\"\n\t */\n\ttoolExecution?: ToolExecutionMode;\n\n\t/**\n\t * Called before a tool is executed, after arguments have been validated.\n\t *\n\t * Return `{ block: true }` to prevent execution. The loop emits an error tool result instead.\n\t * The hook receives the agent abort signal and is responsible for honoring it.\n\t */\n\tbeforeToolCall?: (context: BeforeToolCallContext, signal?: AbortSignal) => Promise<BeforeToolCallResult | undefined>;\n\n\t/**\n\t * Called after a tool finishes executing, before final tool events are emitted.\n\t *\n\t * Return an `AfterToolCallResult` to override parts of the executed tool result:\n\t * - `content` replaces the full content array\n\t * - `details` replaces the full details payload\n\t * - `isError` replaces the error flag\n\t *\n\t * Any omitted fields keep their original values. No deep merge is performed.\n\t * The hook receives the agent abort signal and is responsible for honoring it.\n\t */\n\tafterToolCall?: (context: AfterToolCallContext, signal?: AbortSignal) => Promise<AfterToolCallResult | undefined>;\n\n\t/**\n\t * Optional formatter for tool argument validation errors (AJV / schema failures).\n\t * Called in prepareToolCall before the error tool result is emitted.\n\t */\n\tformatValidationError?: (\n\t\ttool: AgentTool<any>,\n\t\ttoolCall: AgentToolCall,\n\t\tbaseMessage: string,\n\t) => string | Promise<string>;\n\n\t/**\n\t * Called after a turn when one or more tool calls failed during preparation.\n\t * Use to inject corrective steering and reset the schema-overload counter.\n\t */\n\tonPreparationErrorsTurn?: (\n\t\tcontext: PreparationErrorsTurnContext,\n\t\tsignal?: AbortSignal,\n\t) => Promise<PreparationErrorsTurnResult | void>;\n\n\t/**\n\t * When true, tool calls in assistant messages are rendered in the TUI\n\t * but NOT executed locally. Used for providers that handle tool execution\n\t * internally (e.g., Claude Code CLI via Agent SDK).\n\t *\n\t * The agent loop emits tool_execution_start/end events for TUI rendering\n\t * but skips tool.execute() and does not add tool results to context.\n\t */\n\texternalToolExecution?: boolean;\n\n\t/**\n\t * Called when the agent is about to retry after a recoverable provider error.\n\t *\n\t * Fires after each transient failure (rate limit, connection reset, etc.)\n\t * before the retry backoff sleep. Useful for surfacing retry telemetry to\n\t * the host app without instrumenting the provider layer directly.\n\t */\n\tonRetry?: (context: RetryContext, signal?: AbortSignal) => Promise<void> | void;\n\n\t/**\n\t * Called when the LLM stream fails mid-response.\n\t *\n\t * Fires once per failed stream — `onRetry` may still fire separately if the\n\t * loop elects to retry. Use this for logging or flushing partial state.\n\t */\n\tonStreamError?: (context: StreamErrorContext, signal?: AbortSignal) => Promise<void> | void;\n}\n\n/** Context passed to `onRetry`. */\nexport interface RetryContext {\n\tattempt: number;\n\tmaxRetries: number;\n\tdelayMs: number;\n\terror: Error;\n}\n\n/** Context passed to `onStreamError`. */\nexport interface StreamErrorContext {\n\terror: Error;\n\t/** The text already emitted by the stream before it failed (may be empty). */\n\tpartialText: string;\n\t/** Whether the loop will attempt to retry after this failure. */\n\twillRetry: boolean;\n}\n\n/**\n * Thinking/reasoning level for models that support it.\n * Note: \"xhigh\" is only supported by OpenAI gpt-5.1-codex-max, gpt-5.2, gpt-5.2-codex, gpt-5.3, and gpt-5.3-codex models.\n */\nexport type ThinkingLevel = \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\";\n\n/**\n * Extensible interface for custom app messages.\n * Apps can extend via declaration merging:\n *\n * @example\n * ```typescript\n * declare module \"@mariozechner/agent\" {\n * interface CustomAgentMessages {\n * artifact: ArtifactMessage;\n * notification: NotificationMessage;\n * }\n * }\n * ```\n */\nexport interface CustomAgentMessages {\n\t// Empty by default - apps extend via declaration merging\n}\n\n/**\n * AgentMessage: Union of LLM messages + custom messages.\n * This abstraction allows apps to add custom message types while maintaining\n * type safety and compatibility with the base LLM messages.\n */\nexport type AgentMessage = Message | CustomAgentMessages[keyof CustomAgentMessages];\n\n/**\n * Agent state containing all configuration and conversation data.\n */\nexport interface AgentState {\n\tsystemPrompt: string;\n\tmodel: Model<any>;\n\tthinkingLevel: ThinkingLevel;\n\ttools: AgentTool<any>[];\n\tmessages: AgentMessage[]; // Can include attachments + custom message types\n\tisStreaming: boolean;\n\tstreamMessage: AgentMessage | null;\n\tpendingToolCalls: Set<string>;\n\terror?: string;\n\t/**\n\t * The model currently being used for inference. Set at _runLoop() start,\n\t * cleared when the loop ends. When present, UI should display this instead\n\t * of `model` to avoid showing a stale value after a mid-turn model switch.\n\t */\n\tactiveInferenceModel?: Model<any>;\n}\n\nexport interface AgentToolResult<T> {\n\t// Content blocks supporting text and images\n\tcontent: (TextContent | ImageContent)[];\n\t// Details to be displayed in a UI or logged\n\tdetails: T;\n}\n\n// Callback for streaming tool execution updates\nexport type AgentToolUpdateCallback<T = any> = (partialResult: AgentToolResult<T>) => void;\n\n// AgentTool extends Tool but adds the execute function\nexport interface AgentTool<TParameters extends TSchema = TSchema, TDetails = any> extends Tool<TParameters> {\n\t// A human-readable label for the tool to be displayed in UI\n\tlabel: string;\n\texecute: (\n\t\ttoolCallId: string,\n\t\tparams: Static<TParameters>,\n\t\tsignal?: AbortSignal,\n\t\tonUpdate?: AgentToolUpdateCallback<TDetails>,\n\t) => Promise<AgentToolResult<TDetails>>;\n}\n\n// AgentContext is like Context but uses AgentTool\nexport interface AgentContext {\n\tsystemPrompt: string;\n\tmessages: AgentMessage[];\n\ttools?: AgentTool<any>[];\n}\n\nexport type AgentAbortOrigin = \"session-transition\" | \"user\" | \"timeout\" | \"unknown\";\n\n/**\n * Events emitted by the Agent for UI updates.\n * These events provide fine-grained lifecycle information for messages, turns, and tool executions.\n */\nexport type AgentEvent =\n\t// Agent lifecycle\n\t| { type: \"agent_start\"; sessionId?: string; turnId?: string }\n\t| { type: \"agent_end\"; messages: AgentMessage[]; sessionId?: string; turnId?: string; abortOrigin?: AgentAbortOrigin }\n\t// Turn lifecycle - a turn is one assistant response + any tool calls/results\n\t| { type: \"turn_start\"; sessionId?: string; turnId?: string }\n\t| { type: \"turn_end\"; message: AgentMessage; toolResults: ToolResultMessage[]; sessionId?: string; turnId?: string }\n\t// Message lifecycle - emitted for user, assistant, and toolResult messages\n\t| { type: \"message_start\"; message: AgentMessage; sessionId?: string; turnId?: string }\n\t// Only emitted for assistant messages during streaming\n\t| { type: \"message_update\"; message: AgentMessage; assistantMessageEvent: AssistantMessageEvent; sessionId?: string; turnId?: string }\n\t| { type: \"message_end\"; message: AgentMessage; sessionId?: string; turnId?: string }\n\t// Tool execution lifecycle\n\t| { type: \"tool_execution_start\"; toolCallId: string; toolName: string; args: any; sessionId?: string; turnId?: string }\n\t| { type: \"tool_execution_update\"; toolCallId: string; toolName: string; args: any; partialResult: any; sessionId?: string; turnId?: string }\n\t| { type: \"tool_execution_end\"; toolCallId: string; toolName: string; result: any; isError: boolean; sessionId?: string; turnId?: string };\n"]}
|
|
@@ -730,4 +730,166 @@ describe("agent-loop — schema overload retry cap (#2783)", () => {
|
|
|
730
730
|
);
|
|
731
731
|
}
|
|
732
732
|
});
|
|
733
|
+
|
|
734
|
+
it("formatValidationError appends hint to validation error tool result", async () => {
|
|
735
|
+
const tool = makeToolWithSchema();
|
|
736
|
+
const badCall = makeToolCallMessage({ path: "/tmp/test" });
|
|
737
|
+
const finalStop = makeAssistantMessage({
|
|
738
|
+
content: [{ type: "text", text: "Done." }],
|
|
739
|
+
stopReason: "stop",
|
|
740
|
+
});
|
|
741
|
+
const mockStream = createMockStreamFn([badCall, finalStop]);
|
|
742
|
+
|
|
743
|
+
const context: AgentContext = {
|
|
744
|
+
systemPrompt: "test",
|
|
745
|
+
messages: [{ role: "user", content: [{ type: "text", text: "go" }], timestamp: Date.now() }],
|
|
746
|
+
tools: [tool],
|
|
747
|
+
};
|
|
748
|
+
const config: AgentLoopConfig = {
|
|
749
|
+
model: TEST_MODEL,
|
|
750
|
+
convertToLlm: (msgs) => msgs.filter((m): m is any => m.role !== "custom"),
|
|
751
|
+
toolExecution: "sequential",
|
|
752
|
+
formatValidationError: (_tool, _tc, base) => `${base}\n\nHINT: include content field`,
|
|
753
|
+
};
|
|
754
|
+
|
|
755
|
+
const stream = agentLoop(
|
|
756
|
+
[{ role: "user", content: [{ type: "text", text: "go" }], timestamp: Date.now() }],
|
|
757
|
+
context,
|
|
758
|
+
config,
|
|
759
|
+
undefined,
|
|
760
|
+
mockStream as any,
|
|
761
|
+
);
|
|
762
|
+
const events = await collectEvents(stream);
|
|
763
|
+
const toolError = events.find(
|
|
764
|
+
(e) => e.type === "tool_execution_end" && e.isError === true,
|
|
765
|
+
);
|
|
766
|
+
assert.ok(toolError && toolError.type === "tool_execution_end");
|
|
767
|
+
const text = toolError.result.content.find((c) => c.type === "text");
|
|
768
|
+
assert.ok(text && text.type === "text" && text.text.includes("HINT: include content field"));
|
|
769
|
+
});
|
|
770
|
+
|
|
771
|
+
it("onPreparationErrorsTurn with resetValidationFailureCap prevents schema overload stop", async () => {
|
|
772
|
+
const tool = makeToolWithSchema();
|
|
773
|
+
const badCall = makeToolCallMessage({ path: "/tmp/test" });
|
|
774
|
+
const goodCall = makeToolCallMessage({ path: "/tmp/test", content: "hello" });
|
|
775
|
+
const finalStop = makeAssistantMessage({
|
|
776
|
+
content: [{ type: "text", text: "Done." }],
|
|
777
|
+
stopReason: "stop",
|
|
778
|
+
});
|
|
779
|
+
|
|
780
|
+
// Exceed cap without reset: 3 bad + would stop. With reset after each bad: survives.
|
|
781
|
+
const responses = [badCall, badCall, badCall, goodCall, finalStop];
|
|
782
|
+
const mockStream = createMockStreamFn(responses);
|
|
783
|
+
let recoveryCalls = 0;
|
|
784
|
+
|
|
785
|
+
const context: AgentContext = {
|
|
786
|
+
systemPrompt: "test",
|
|
787
|
+
messages: [{ role: "user", content: [{ type: "text", text: "go" }], timestamp: Date.now() }],
|
|
788
|
+
tools: [tool],
|
|
789
|
+
};
|
|
790
|
+
const config: AgentLoopConfig = {
|
|
791
|
+
model: TEST_MODEL,
|
|
792
|
+
convertToLlm: (msgs) => msgs.filter((m): m is any => m.role !== "custom"),
|
|
793
|
+
toolExecution: "sequential",
|
|
794
|
+
onPreparationErrorsTurn: async () => {
|
|
795
|
+
recoveryCalls++;
|
|
796
|
+
return {
|
|
797
|
+
resetValidationFailureCap: true,
|
|
798
|
+
steeringMessages: [
|
|
799
|
+
{
|
|
800
|
+
role: "user",
|
|
801
|
+
content: [{ type: "text", text: "Retry with valid args." }],
|
|
802
|
+
timestamp: Date.now(),
|
|
803
|
+
},
|
|
804
|
+
],
|
|
805
|
+
};
|
|
806
|
+
},
|
|
807
|
+
};
|
|
808
|
+
|
|
809
|
+
const stream = agentLoop(
|
|
810
|
+
[{ role: "user", content: [{ type: "text", text: "go" }], timestamp: Date.now() }],
|
|
811
|
+
context,
|
|
812
|
+
config,
|
|
813
|
+
undefined,
|
|
814
|
+
mockStream as any,
|
|
815
|
+
);
|
|
816
|
+
const events = await collectEvents(stream);
|
|
817
|
+
|
|
818
|
+
const agentEnd = events.find((e) => e.type === "agent_end");
|
|
819
|
+
assert.ok(agentEnd, "agent must complete without schema overload stop");
|
|
820
|
+
assert.ok(recoveryCalls >= 3, "recovery hook should run for each bad turn");
|
|
821
|
+
const stopMessages = (agentEnd as any).messages.filter(
|
|
822
|
+
(m: AgentMessage) =>
|
|
823
|
+
m.role === "assistant" &&
|
|
824
|
+
(m as AssistantMessage).errorMessage?.includes("Schema overload"),
|
|
825
|
+
);
|
|
826
|
+
assert.equal(stopMessages.length, 0, "must not emit schema overload stop");
|
|
827
|
+
});
|
|
828
|
+
|
|
829
|
+
it("onPreparationErrorsTurn failures exclude execution errors in mixed turns", async () => {
|
|
830
|
+
const schemaTool = makeToolWithSchema();
|
|
831
|
+
const execFailTool: AgentTool<any> = {
|
|
832
|
+
...makeToolWithSchema(),
|
|
833
|
+
name: "exec_fail_tool",
|
|
834
|
+
label: "Exec Fail",
|
|
835
|
+
execute: async () => {
|
|
836
|
+
throw new Error("EXECUTION_PHASE_FAILURE");
|
|
837
|
+
},
|
|
838
|
+
};
|
|
839
|
+
|
|
840
|
+
const prepFailCall = makeToolCallMessage({ path: "/tmp/test" });
|
|
841
|
+
(prepFailCall.content[0] as any).name = "write_file";
|
|
842
|
+
const execFailCall = makeToolCallMessage({ path: "/tmp/ok", content: "hello" });
|
|
843
|
+
(execFailCall.content[0] as any).id = "tc_exec_fail";
|
|
844
|
+
(execFailCall.content[0] as any).name = "exec_fail_tool";
|
|
845
|
+
|
|
846
|
+
const mixedTurn = makeAssistantMessage({
|
|
847
|
+
content: [
|
|
848
|
+
prepFailCall.content[0],
|
|
849
|
+
execFailCall.content[0],
|
|
850
|
+
],
|
|
851
|
+
stopReason: "toolUse",
|
|
852
|
+
});
|
|
853
|
+
const finalStop = makeAssistantMessage({
|
|
854
|
+
content: [{ type: "text", text: "Done." }],
|
|
855
|
+
stopReason: "stop",
|
|
856
|
+
});
|
|
857
|
+
|
|
858
|
+
const mockStream = createMockStreamFn([mixedTurn, finalStop]);
|
|
859
|
+
let capturedFailures: Array<{ toolName: string; errorText: string }> = [];
|
|
860
|
+
|
|
861
|
+
const context: AgentContext = {
|
|
862
|
+
systemPrompt: "test",
|
|
863
|
+
messages: [{ role: "user", content: [{ type: "text", text: "go" }], timestamp: Date.now() }],
|
|
864
|
+
tools: [schemaTool, execFailTool],
|
|
865
|
+
};
|
|
866
|
+
const config: AgentLoopConfig = {
|
|
867
|
+
model: TEST_MODEL,
|
|
868
|
+
convertToLlm: (msgs) => msgs.filter((m): m is any => m.role !== "custom"),
|
|
869
|
+
toolExecution: "sequential",
|
|
870
|
+
onPreparationErrorsTurn: async (ctx) => {
|
|
871
|
+
capturedFailures = ctx.failures.map((f) => ({
|
|
872
|
+
toolName: f.toolName,
|
|
873
|
+
errorText: f.errorText,
|
|
874
|
+
}));
|
|
875
|
+
return undefined;
|
|
876
|
+
},
|
|
877
|
+
};
|
|
878
|
+
|
|
879
|
+
const stream = agentLoop(
|
|
880
|
+
[{ role: "user", content: [{ type: "text", text: "go" }], timestamp: Date.now() }],
|
|
881
|
+
context,
|
|
882
|
+
config,
|
|
883
|
+
undefined,
|
|
884
|
+
mockStream as any,
|
|
885
|
+
);
|
|
886
|
+
await collectEvents(stream);
|
|
887
|
+
|
|
888
|
+
assert.equal(capturedFailures.length, 1, "only preparation-phase errors belong in failures");
|
|
889
|
+
assert.equal(capturedFailures[0]?.toolName, "write_file");
|
|
890
|
+
assert.ok(
|
|
891
|
+
!capturedFailures.some((f) => f.errorText.includes("EXECUTION_PHASE_FAILURE")),
|
|
892
|
+
"execution errors must not appear in preparation failures context",
|
|
893
|
+
);
|
|
894
|
+
});
|
|
733
895
|
});
|
|
@@ -19,6 +19,8 @@ import type {
|
|
|
19
19
|
AgentTool,
|
|
20
20
|
AgentToolCall,
|
|
21
21
|
AgentToolResult,
|
|
22
|
+
PreparationErrorFailure,
|
|
23
|
+
PreparationErrorsTurnContext,
|
|
22
24
|
StreamFn,
|
|
23
25
|
} from "./types.js";
|
|
24
26
|
import { maybeLogTokenAudit } from "./token-audit.js";
|
|
@@ -333,7 +335,11 @@ async function runLoop(
|
|
|
333
335
|
toolResults.length > 0 &&
|
|
334
336
|
toolExecution.preparationErrorCount === toolResults.length;
|
|
335
337
|
if (allToolsFailedPreparation) {
|
|
336
|
-
|
|
338
|
+
if (toolExecution.resetValidationFailureCap) {
|
|
339
|
+
consecutiveAllToolErrorTurns = 0;
|
|
340
|
+
} else {
|
|
341
|
+
consecutiveAllToolErrorTurns++;
|
|
342
|
+
}
|
|
337
343
|
} else if (!hasPreparationErrors) {
|
|
338
344
|
// Reset only when there are zero preparation errors this turn.
|
|
339
345
|
// Mixed turns (some prep errors, some successes) don't reset,
|
|
@@ -504,6 +510,8 @@ interface ToolExecutionResult {
|
|
|
504
510
|
steeringMessages?: AgentMessage[];
|
|
505
511
|
/** Number of tool results that failed during preparation (validation/schema). */
|
|
506
512
|
preparationErrorCount: number;
|
|
513
|
+
/** When true, recovery hook requested resetting the schema-overload counter. */
|
|
514
|
+
resetValidationFailureCap?: boolean;
|
|
507
515
|
}
|
|
508
516
|
|
|
509
517
|
/**
|
|
@@ -534,6 +542,7 @@ async function executeToolCallsSequential(
|
|
|
534
542
|
const results: ToolResultMessage[] = [];
|
|
535
543
|
let steeringMessages: AgentMessage[] | undefined;
|
|
536
544
|
let preparationErrorCount = 0;
|
|
545
|
+
const preparationErrorToolCallIds = new Set<string>();
|
|
537
546
|
|
|
538
547
|
for (let index = 0; index < toolCalls.length; index++) {
|
|
539
548
|
const toolCall = toolCalls[index];
|
|
@@ -548,6 +557,7 @@ async function executeToolCallsSequential(
|
|
|
548
557
|
if (preparation.kind === "immediate") {
|
|
549
558
|
if (preparation.isError) {
|
|
550
559
|
preparationErrorCount++;
|
|
560
|
+
preparationErrorToolCallIds.add(toolCall.id);
|
|
551
561
|
}
|
|
552
562
|
results.push(emitToolCallOutcome(toolCall, preparation.result, preparation.isError, stream));
|
|
553
563
|
} else {
|
|
@@ -578,7 +588,15 @@ async function executeToolCallsSequential(
|
|
|
578
588
|
}
|
|
579
589
|
}
|
|
580
590
|
|
|
581
|
-
return
|
|
591
|
+
return finalizeToolExecutionResult(
|
|
592
|
+
assistantMessage,
|
|
593
|
+
results,
|
|
594
|
+
steeringMessages,
|
|
595
|
+
preparationErrorCount,
|
|
596
|
+
preparationErrorToolCallIds,
|
|
597
|
+
config,
|
|
598
|
+
signal,
|
|
599
|
+
);
|
|
582
600
|
}
|
|
583
601
|
|
|
584
602
|
async function executeToolCallsParallel(
|
|
@@ -593,6 +611,7 @@ async function executeToolCallsParallel(
|
|
|
593
611
|
const runnableCalls: PreparedToolCall[] = [];
|
|
594
612
|
let steeringMessages: AgentMessage[] | undefined;
|
|
595
613
|
let preparationErrorCount = 0;
|
|
614
|
+
const preparationErrorToolCallIds = new Set<string>();
|
|
596
615
|
|
|
597
616
|
for (let index = 0; index < toolCalls.length; index++) {
|
|
598
617
|
const toolCall = toolCalls[index];
|
|
@@ -607,6 +626,7 @@ async function executeToolCallsParallel(
|
|
|
607
626
|
if (preparation.kind === "immediate") {
|
|
608
627
|
if (preparation.isError) {
|
|
609
628
|
preparationErrorCount++;
|
|
629
|
+
preparationErrorToolCallIds.add(toolCall.id);
|
|
610
630
|
}
|
|
611
631
|
results.push(emitToolCallOutcome(toolCall, preparation.result, preparation.isError, stream));
|
|
612
632
|
} else {
|
|
@@ -624,7 +644,15 @@ async function executeToolCallsParallel(
|
|
|
624
644
|
for (const skipped of remainingCalls) {
|
|
625
645
|
results.push(skipToolCall(skipped, stream));
|
|
626
646
|
}
|
|
627
|
-
return
|
|
647
|
+
return finalizeToolExecutionResult(
|
|
648
|
+
assistantMessage,
|
|
649
|
+
results,
|
|
650
|
+
steeringMessages,
|
|
651
|
+
preparationErrorCount,
|
|
652
|
+
preparationErrorToolCallIds,
|
|
653
|
+
config,
|
|
654
|
+
signal,
|
|
655
|
+
);
|
|
628
656
|
}
|
|
629
657
|
}
|
|
630
658
|
}
|
|
@@ -656,7 +684,80 @@ async function executeToolCallsParallel(
|
|
|
656
684
|
}
|
|
657
685
|
}
|
|
658
686
|
|
|
659
|
-
return
|
|
687
|
+
return finalizeToolExecutionResult(
|
|
688
|
+
assistantMessage,
|
|
689
|
+
results,
|
|
690
|
+
steeringMessages,
|
|
691
|
+
preparationErrorCount,
|
|
692
|
+
preparationErrorToolCallIds,
|
|
693
|
+
config,
|
|
694
|
+
signal,
|
|
695
|
+
);
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
function buildPreparationErrorsContext(
|
|
699
|
+
assistantMessage: AssistantMessage,
|
|
700
|
+
toolResults: ToolResultMessage[],
|
|
701
|
+
preparationErrorToolCallIds: ReadonlySet<string>,
|
|
702
|
+
preparationErrorCount: number,
|
|
703
|
+
): PreparationErrorsTurnContext {
|
|
704
|
+
const toolCallsById = new Map(
|
|
705
|
+
(assistantMessage.content.filter((c) => c.type === "toolCall") as AgentToolCall[]).map((tc) => [
|
|
706
|
+
tc.id,
|
|
707
|
+
tc,
|
|
708
|
+
]),
|
|
709
|
+
);
|
|
710
|
+
const failures: PreparationErrorFailure[] = [];
|
|
711
|
+
for (const result of toolResults) {
|
|
712
|
+
if (!result.isError) continue;
|
|
713
|
+
if (!preparationErrorToolCallIds.has(result.toolCallId)) continue;
|
|
714
|
+
const toolCall = toolCallsById.get(result.toolCallId);
|
|
715
|
+
if (!toolCall) continue;
|
|
716
|
+
const textBlock = result.content.find((c) => c.type === "text");
|
|
717
|
+
const errorText = textBlock && textBlock.type === "text" ? textBlock.text : "";
|
|
718
|
+
failures.push({
|
|
719
|
+
toolName: toolCall.name,
|
|
720
|
+
arguments: toolCall.arguments as Record<string, unknown>,
|
|
721
|
+
errorText,
|
|
722
|
+
});
|
|
723
|
+
}
|
|
724
|
+
return { assistantMessage, failures, preparationErrorCount };
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
async function finalizeToolExecutionResult(
|
|
728
|
+
assistantMessage: AssistantMessage,
|
|
729
|
+
toolResults: ToolResultMessage[],
|
|
730
|
+
steeringMessages: AgentMessage[] | undefined,
|
|
731
|
+
preparationErrorCount: number,
|
|
732
|
+
preparationErrorToolCallIds: ReadonlySet<string>,
|
|
733
|
+
config: AgentLoopConfig,
|
|
734
|
+
signal: AbortSignal | undefined,
|
|
735
|
+
): Promise<ToolExecutionResult> {
|
|
736
|
+
let resetValidationFailureCap: boolean | undefined;
|
|
737
|
+
if (preparationErrorCount > 0 && config.onPreparationErrorsTurn) {
|
|
738
|
+
const recovery = await config.onPreparationErrorsTurn(
|
|
739
|
+
buildPreparationErrorsContext(
|
|
740
|
+
assistantMessage,
|
|
741
|
+
toolResults,
|
|
742
|
+
preparationErrorToolCallIds,
|
|
743
|
+
preparationErrorCount,
|
|
744
|
+
),
|
|
745
|
+
signal,
|
|
746
|
+
);
|
|
747
|
+
const recoverySteering = recovery?.steeringMessages;
|
|
748
|
+
if (recoverySteering && recoverySteering.length > 0) {
|
|
749
|
+
steeringMessages = recoverySteering;
|
|
750
|
+
}
|
|
751
|
+
if (recovery?.resetValidationFailureCap === true) {
|
|
752
|
+
resetValidationFailureCap = true;
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
return {
|
|
756
|
+
toolResults,
|
|
757
|
+
steeringMessages,
|
|
758
|
+
preparationErrorCount,
|
|
759
|
+
resetValidationFailureCap,
|
|
760
|
+
};
|
|
660
761
|
}
|
|
661
762
|
|
|
662
763
|
type PreparedToolCall = {
|
|
@@ -720,9 +821,13 @@ async function prepareToolCall(
|
|
|
720
821
|
args: validatedArgs,
|
|
721
822
|
};
|
|
722
823
|
} catch (error) {
|
|
824
|
+
let message = error instanceof Error ? error.message : String(error);
|
|
825
|
+
if (config.formatValidationError) {
|
|
826
|
+
message = await config.formatValidationError(tool, toolCall, message);
|
|
827
|
+
}
|
|
723
828
|
return {
|
|
724
829
|
kind: "immediate",
|
|
725
|
-
result: createErrorToolResult(
|
|
830
|
+
result: createErrorToolResult(message),
|
|
726
831
|
isError: true,
|
|
727
832
|
};
|
|
728
833
|
}
|