@opengsd/gsd-pi 1.0.1 → 1.0.2
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 +51 -3
- package/dist/claude-cli-check.js +1 -1
- package/dist/cli-policy.d.ts +1 -1
- package/dist/cli-policy.js +2 -2
- package/dist/cli.js +4 -3
- package/dist/extension-sort.js +1 -1
- package/dist/extension-validator.js +1 -1
- package/dist/help-text.js +8 -0
- package/dist/loader-entrypoint.js +1 -1
- package/dist/loader.js +0 -0
- package/dist/resource-loader.js +22 -3
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +2 -2
- 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 +2 -2
- package/dist/resources/extensions/gsd/auto/orchestrator.js +1 -1
- package/dist/resources/extensions/gsd/auto/phases.js +9 -3
- package/dist/resources/extensions/gsd/auto/run-unit.js +110 -44
- package/dist/resources/extensions/gsd/auto/schedule-wakeup.js +18 -0
- 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 +1 -1
- 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 +1 -1
- package/dist/resources/extensions/gsd/auto-post-unit.js +1 -1
- package/dist/resources/extensions/gsd/auto-prompts.js +2 -2
- package/dist/resources/extensions/gsd/auto-recovery.js +1 -1
- 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 +11 -3
- 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 +33 -4
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +5 -9
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +1 -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/query-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +3 -1
- 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 +69 -0
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +1 -1
- 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/catalog.js +2 -1
- package/dist/resources/extensions/gsd/commands/dispatcher.js +1 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +1 -0
- package/dist/resources/extensions/gsd/commands/handlers/notifications-handler.js +1 -1
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +1 -1
- package/dist/resources/extensions/gsd/commands-bootstrap.js +1 -0
- 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 -3
- package/dist/resources/extensions/gsd/markdown-renderer.js +1 -1
- package/dist/resources/extensions/gsd/md-importer.js +2 -2
- 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 +4 -2
- package/dist/resources/extensions/gsd/migrate/command.js +27 -5
- package/dist/resources/extensions/gsd/migrate/parser.js +57 -11
- package/dist/resources/extensions/gsd/migrate/parsers.js +16 -0
- package/dist/resources/extensions/gsd/migrate/preview.js +1 -0
- package/dist/resources/extensions/gsd/migrate/safety.js +1 -1
- package/dist/resources/extensions/gsd/migrate/transformer.js +79 -6
- package/dist/resources/extensions/gsd/migrate/validator.js +22 -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/process-task-path.js +1 -1
- 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 +1 -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-manifest.js +1 -1
- 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 +9 -18
- 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 +28 -12
- package/dist/resources/extensions/gsd/verification-verdict.js +9 -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-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 +1 -1
- package/dist/resources/extensions/ollama/ndjson-stream.js +1 -1
- package/dist/resources/extensions/ollama/ollama-chat-provider.js +1 -1
- 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 +1 -1
- 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/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 -0
- package/dist/update-check.d.ts +5 -2
- package/dist/update-check.js +10 -7
- 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 +8 -8
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/required-server-files.json +4 -4
- package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- 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/page.js +2 -2
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- 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 +3 -3
- 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/api/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/mcp-connections/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
- 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 +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +8 -8
- package/dist/web/standalone/.next/server/chunks/63.js +3 -3
- package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware.js +2 -2
- 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/web/standalone/.next/static/chunks/app/_not-found/{page-a662c55787b78a48.js → page-0fa92deaf6721345.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/layout-68f32aa90495be18.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/page-4dbb4d03b2d85d57.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{main-app-da6af500e9c35ea7.js → main-app-c3abead5a8518a30.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-de2636d5a7f60b61.js +1 -0
- package/dist/web/standalone/node_modules/@img/{sharp-libvips-darwin-arm64/lib/libvips-cpp.8.17.3.dylib → sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3} +0 -0
- package/dist/web/standalone/node_modules/@img/{sharp-libvips-darwin-arm64 → sharp-libvips-linux-x64}/package.json +11 -5
- package/dist/web/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +1 -0
- package/dist/web/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
- package/dist/web/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +42 -0
- package/dist/web/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +30 -0
- package/dist/web/standalone/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
- package/dist/web/standalone/node_modules/@img/{sharp-darwin-arm64 → sharp-linux-x64}/package.json +13 -7
- package/dist/web/standalone/node_modules/@img/sharp-linuxmusl-x64/LICENSE +191 -0
- package/dist/web/standalone/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
- package/dist/web/standalone/node_modules/@img/sharp-linuxmusl-x64/package.json +46 -0
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +369 -0
- package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
- package/dist/web/standalone/node_modules/node-pty/build/binding.Makefile +6 -0
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +168 -0
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.Makefile +6 -0
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +106 -0
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +110 -0
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +106 -0
- package/dist/web/standalone/server.js +1 -1
- package/dist/welcome-screen.js +1 -1
- package/package.json +11 -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/dist/grep/index.js +35 -1
- package/packages/native/dist/index.d.ts +1 -0
- package/packages/native/dist/index.js +4 -1
- package/packages/native/dist/native.d.ts +2 -0
- package/packages/native/dist/native.js +38 -25
- package/packages/native/dist/text/index.js +118 -6
- package/packages/native/dist/xxhash/index.d.ts +1 -2
- package/packages/native/dist/xxhash/index.js +7 -7
- package/packages/native/package.json +1 -1
- package/packages/native/src/__tests__/function-fallback.test.mjs +37 -0
- package/packages/native/src/__tests__/text-fallback.test.mjs +44 -0
- package/packages/native/src/grep/index.ts +38 -1
- package/packages/native/src/index.ts +2 -0
- package/packages/native/src/native.ts +37 -22
- package/packages/native/src/text/index.ts +145 -32
- package/packages/native/src/xxhash/index.ts +6 -9
- package/packages/native/tsconfig.tsbuildinfo +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/package.json +1 -1
- 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/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-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.js +1 -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/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/model-discovery.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-discovery.js +5 -1
- package/packages/pi-coding-agent/dist/core/model-discovery.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-discovery.test.js +21 -0
- package/packages/pi-coding-agent/dist/core/model-discovery.test.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/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/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-tool-refresh.test.ts +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +1 -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/lsp/lsp-legacy-alias.test.ts +1 -1
- package/packages/pi-coding-agent/src/core/model-discovery.test.ts +22 -0
- package/packages/pi-coding-agent/src/core/model-discovery.ts +6 -1
- 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/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/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 +2 -2
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +5 -5
- 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-deps.ts +11 -0
- package/src/resources/extensions/gsd/auto/loop.ts +2 -2
- package/src/resources/extensions/gsd/auto/orchestrator.ts +1 -1
- package/src/resources/extensions/gsd/auto/phases.ts +14 -3
- package/src/resources/extensions/gsd/auto/run-unit.ts +117 -45
- package/src/resources/extensions/gsd/auto/schedule-wakeup.ts +40 -0
- 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 +1 -1
- 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 +1 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +1 -1
- package/src/resources/extensions/gsd/auto-prompts.ts +2 -2
- package/src/resources/extensions/gsd/auto-recovery.ts +1 -1
- 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 +13 -4
- 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 +36 -4
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +5 -9
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +1 -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/query-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +3 -1
- 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 +81 -0
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +1 -1
- 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/catalog.ts +2 -1
- package/src/resources/extensions/gsd/commands/dispatcher.ts +1 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +1 -0
- package/src/resources/extensions/gsd/commands/handlers/notifications-handler.ts +1 -1
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +2 -2
- package/src/resources/extensions/gsd/commands-bootstrap.ts +1 -0
- 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 -4
- package/src/resources/extensions/gsd/markdown-renderer.ts +1 -1
- package/src/resources/extensions/gsd/md-importer.ts +2 -2
- 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 +8 -2
- package/src/resources/extensions/gsd/migrate/command.ts +31 -5
- package/src/resources/extensions/gsd/migrate/index.ts +1 -1
- package/src/resources/extensions/gsd/migrate/parser.ts +63 -10
- package/src/resources/extensions/gsd/migrate/parsers.ts +17 -0
- package/src/resources/extensions/gsd/migrate/preview.ts +1 -0
- package/src/resources/extensions/gsd/migrate/safety.ts +1 -1
- package/src/resources/extensions/gsd/migrate/transformer.ts +81 -6
- package/src/resources/extensions/gsd/migrate/types.ts +29 -1
- package/src/resources/extensions/gsd/migrate/validator.ts +25 -1
- package/src/resources/extensions/gsd/migrate/writer.ts +6 -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/process-task-path.ts +1 -1
- 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 +1 -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-manifest.ts +1 -1
- 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 +9 -17
- 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 +65 -6
- package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +4 -4
- 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 +75 -1
- 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 +1 -52
- 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/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 +3 -3
- 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-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/derive-state-db.test.ts +4 -30
- package/src/resources/extensions/gsd/tests/detect-stuck-respects-retry.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-recovery.test.ts +0 -52
- 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/state-machine-edge-cases.test.ts +1 -23
- package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +0 -28
- 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 +2 -32
- 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/md-importer.test.ts +23 -0
- 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 +5 -3
- 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-parser.test.ts +74 -0
- package/src/resources/extensions/gsd/tests/migrate-safety-audit.test.ts +20 -2
- package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +61 -2
- 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/park-milestone.test.ts +1 -158
- 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 +1 -1
- 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 +2 -2
- 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-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/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/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/resolve-ts.mjs +0 -4
- 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/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 +27 -10
- 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 +5 -1
- package/src/resources/extensions/gsd/tests/smart-entry-draft.test.ts +5 -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/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/update-command.test.ts +62 -0
- 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 +16 -7
- package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +12 -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/types.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 +28 -12
- package/src/resources/extensions/gsd/verification-verdict.ts +10 -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-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 +1 -1
- package/src/resources/extensions/ollama/ndjson-stream.ts +1 -1
- package/src/resources/extensions/ollama/ollama-chat-provider.ts +1 -1
- 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 +1 -1
- package/src/resources/extensions/ollama/ollama-tool.ts +1 -1
- package/src/resources/extensions/ollama/tests/model-capabilities.test.ts +1 -1
- package/src/resources/extensions/ollama/tests/ollama-chat-provider-stream.test.ts +1 -1
- 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.test.ts +1 -1
- package/src/resources/extensions/ollama/thinking-parser.ts +1 -1
- package/src/resources/extensions/ollama/types.ts +1 -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/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/chunks/app/layout-82017658b76e2494.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/page-d660442e70026068.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-1065c9a10c4c2187.js +0 -1
- package/dist/web/standalone/node_modules/@img/sharp-darwin-arm64/lib/sharp-darwin-arm64.node +0 -0
- package/src/resources/extensions/gsd/tests/auto-start-needs-discussion.test.ts +0 -175
- package/src/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +0 -290
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -743
- package/src/resources/extensions/gsd/tests/cwd-fallback-hardening.test.ts +0 -138
- package/src/resources/extensions/gsd/tests/derive-state-crossval.test.ts +0 -514
- package/src/resources/extensions/gsd/tests/derive-state-deps.test.ts +0 -641
- package/src/resources/extensions/gsd/tests/derive-state-draft.test.ts +0 -313
- package/src/resources/extensions/gsd/tests/derive-state.test.ts +0 -1049
- package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +0 -170
- package/src/resources/extensions/gsd/tests/dispatch-uat-last-completed.test.ts +0 -206
- package/src/resources/extensions/gsd/tests/draft-promotion.test.ts +0 -149
- package/src/resources/extensions/gsd/tests/headless-query.test.ts +0 -184
- package/src/resources/extensions/gsd/tests/integration/auto-preflight.test.ts +0 -38
- package/src/resources/extensions/gsd/tests/integration/doctor-delimiter-fix.test.ts +0 -83
- package/src/resources/extensions/gsd/tests/integration/doctor-enhancements.test.ts +0 -243
- package/src/resources/extensions/gsd/tests/integration/doctor-false-positives.test.ts +0 -243
- package/src/resources/extensions/gsd/tests/integration/doctor-fixlevel.test.ts +0 -263
- package/src/resources/extensions/gsd/tests/integration/doctor-git-symlink-cwd.test.ts +0 -90
- package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +0 -954
- package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +0 -431
- package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +0 -549
- package/src/resources/extensions/gsd/tests/integration/doctor.test.ts +0 -612
- package/src/resources/extensions/gsd/tests/integration/integration-mixed-milestones.test.ts +0 -539
- package/src/resources/extensions/gsd/tests/integration/migrate-command.test.ts +0 -405
- package/src/resources/extensions/gsd/tests/integration/queue-reorder-e2e.test.ts +0 -335
- package/src/resources/extensions/gsd/tests/integration/worktree-e2e.test.ts +0 -248
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +0 -347
- package/src/resources/extensions/gsd/tests/park-edge-cases.test.ts +0 -253
- package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +0 -567
- package/src/resources/extensions/gsd/tests/register-hooks-compaction-checkpoint.test.ts +0 -252
- package/src/resources/extensions/gsd/tests/replan-slice.test.ts +0 -609
- package/src/resources/extensions/gsd/tests/requirements.test.ts +0 -110
- package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +0 -348
- package/src/resources/extensions/gsd/tests/state-derivation-parity.test.ts +0 -257
- package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +0 -1645
- package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +0 -766
- package/src/resources/extensions/gsd/tests/workspace-index.test.ts +0 -38
- package/src/resources/extensions/gsd/tests/worktree-integration.test.ts +0 -216
- package/src/resources/extensions/gsd/tests/worktree-path-injection.test.ts +0 -242
- /package/dist/web/standalone/.next/static/{YA9EfdcYixDXzFk6uCrQ2 → xbY3PcWtH3LhCQlgKH75u}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{YA9EfdcYixDXzFk6uCrQ2 → xbY3PcWtH3LhCQlgKH75u}/_ssgManifest.js +0 -0
- /package/dist/web/standalone/node_modules/@img/{sharp-libvips-darwin-arm64 → sharp-libvips-linux-x64}/lib/index.js +0 -0
- /package/dist/web/standalone/node_modules/@img/{sharp-libvips-darwin-arm64 → sharp-libvips-linux-x64}/versions.json +0 -0
- /package/dist/web/standalone/node_modules/@img/{sharp-darwin-arm64 → sharp-linux-x64}/LICENSE +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["// GSD2 - Coding agent session factory and runtime wiring\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\n/**\n * Lightweight PATH scan for the `claude` binary — no subprocess, no network.\n * Mirrors the check in src/resources/extensions/gsd/doctor-providers.ts so the\n * legacy Anthropic OAuth self-heal path can only trigger when the user has a\n * working Claude Code CLI to fall back to.\n */\nfunction isClaudeCodeBinaryInPath(): boolean {\n\tconst pathDirs = (process.env.PATH ?? \"\").split(\":\");\n\treturn pathDirs.some((dir) => dir && existsSync(join(dir, \"claude\")));\n}\n\n/**\n * Structured error thrown when all credentials for a provider are in a\n * backoff window. Carries typed metadata so callers (e.g. the auto-loop)\n * can make informed retry decisions instead of string-matching the message.\n */\nexport class CredentialCooldownError extends Error {\n\treadonly code = \"AUTH_COOLDOWN\" as const;\n\t/** Milliseconds until the earliest credential becomes available, or undefined if unknown. */\n\treadonly retryAfterMs: number | undefined;\n\n\tconstructor(provider: string, retryAfterMs?: number) {\n\t\tsuper(\n\t\t\t`All credentials for \"${provider}\" are in a cooldown window. ` +\n\t\t\t\t`Please wait a moment and try again, or switch to a different provider.`,\n\t\t);\n\t\tthis.name = \"CredentialCooldownError\";\n\t\tthis.retryAfterMs = retryAfterMs;\n\t}\n}\n\nexport function canRestoreSessionModel(\n\tmodelRegistry: Pick<ModelRegistry, \"isProviderRequestReady\">,\n\tmodel: Model<any>,\n): boolean {\n\treturn modelRegistry.isProviderRequestReady(model.provider);\n}\n\nconst PROVIDER_TOOL_LIMITS: Record<string, number> = {\n\tgroq: 128,\n};\n\nfunction resolveProviderToolLimit(\n\tproviderCaps: ReturnType<typeof getProviderCapabilities>,\n\tprovider: string | undefined,\n): number {\n\tif (provider && PROVIDER_TOOL_LIMITS[provider]) {\n\t\treturn PROVIDER_TOOL_LIMITS[provider];\n\t}\n\treturn providerCaps.maxTools > 0 ? providerCaps.maxTools : 0;\n}\n\nexport function filterToolsForProviderRequest(\n\ttools: AgentTool[],\n\tmodel: Pick<Model<any>, \"api\" | \"provider\">,\n): { compatible: AgentTool[]; filtered: AgentTool[] } {\n\tconst providerCaps = getProviderCapabilities(model.api);\n\tif (!providerCaps.toolCalling) {\n\t\treturn { compatible: [], filtered: tools };\n\t}\n\n\tconst compatible: AgentTool[] = [];\n\tconst filtered: AgentTool[] = [];\n\tfor (const tool of tools) {\n\t\tconst compat = getToolCompatibility(tool.name);\n\t\tif (\n\t\t\t(compat?.producesImages && !providerCaps.imageToolResults) ||\n\t\t\tcompat?.schemaFeatures?.some((feature) => providerCaps.unsupportedSchemaFeatures.includes(feature))\n\t\t) {\n\t\t\tfiltered.push(tool);\n\t\t} else {\n\t\t\tcompatible.push(tool);\n\t\t}\n\t}\n\n\tconst toolLimit = resolveProviderToolLimit(providerCaps, model.provider);\n\tif (toolLimit > 0 && compatible.length > toolLimit) {\n\t\tfiltered.push(...compatible.splice(toolLimit));\n\t}\n\n\treturn { compatible, filtered };\n}\nimport { Agent, maybeLogProviderPayloadAudit, type AgentMessage, type AgentTool, type ThinkingLevel } from \"@gsd/pi-agent-core\";\nimport { getProviderCapabilities, type Message, type Model } from \"@gsd/pi-ai\";\nimport { getAgentDir, getDocsPath } from \"../config.js\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.js\";\nimport type { ExtensionRunner, LoadExtensionsResult, ToolDefinition } from \"./extensions/index.js\";\nimport { convertToLlm } from \"./messages.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { findInitialModel } from \"./model-resolver.js\";\nimport type { ResourceLoader } from \"./resource-loader.js\";\nimport { DefaultResourceLoader } from \"./resource-loader.js\";\nimport { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\nimport { time } from \"./timings.js\";\nimport {\n\tallTools,\n\tbashTool,\n\tcodingTools,\n\tcreateBashTool,\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\teditTool,\n\tfindTool,\n\tgrepTool,\n\thashlineCodingTools,\n\thashlineEditTool,\n\thashlineReadTool,\n\tcreateHashlineCodingTools,\n\tcreateHashlineEditTool,\n\tcreateHashlineReadTool,\n\tlsTool,\n\treadOnlyTools,\n\treadTool,\n\ttype Tool,\n\ttype ToolName,\n\twriteTool,\n} from \"./tools/index.js\";\nimport { getToolCompatibility } from \"./tools/tool-compatibility-registry.js\";\n\nexport function getAdjustToolSetRequestCustomMessages(\n\tmessages: readonly AgentMessage[] | undefined,\n): Array<{ index: number; customType: string }> {\n\tif (!messages) return [];\n\tconst requestMessages: Array<{ index: number; customType: string }> = [];\n\tfor (let index = messages.length - 1; index >= 0; index--) {\n\t\tconst message = messages[index] as { role?: unknown; customType?: unknown };\n\t\tif (message?.role === \"assistant\") break;\n\t\tif (message?.role === \"custom\" && typeof message.customType === \"string\") {\n\t\t\trequestMessages.push({ index, customType: message.customType });\n\t\t}\n\t}\n\treturn requestMessages.reverse();\n}\n\nexport interface CreateAgentSessionOptions {\n\t/** Working directory for project-local discovery. Default: process.cwd() */\n\tcwd?: string;\n\t/** Global config directory. Default: ~/.pi/agent */\n\tagentDir?: string;\n\n\t/** Auth storage for credentials. Default: AuthStorage.create(agentDir/auth.json) */\n\tauthStorage?: AuthStorage;\n\t/** Model registry. Default: new ModelRegistry(authStorage, agentDir/models.json) */\n\tmodelRegistry?: ModelRegistry;\n\n\t/** Model to use. Default: from settings, else first available */\n\tmodel?: Model<any>;\n\t/** Thinking level. Default: from settings, else 'medium' (clamped to model capabilities) */\n\tthinkingLevel?: ThinkingLevel;\n\t/** Models available for cycling (Ctrl+P in interactive mode) */\n\tscopedModels?: Array<{ model: Model<any>; thinkingLevel?: ThinkingLevel }>;\n\n\t/** Built-in tools to use. Default: codingTools [read, bash, edit, write] */\n\ttools?: Tool[];\n\t/** Custom tools to register (in addition to built-in tools). */\n\tcustomTools?: ToolDefinition[];\n\t/**\n\t * Additional tool names to activate after extensions/MCP servers register.\n\t * Names that are not registered by any extension are silently ignored\n\t * by AgentSession.setActiveToolsByName.\n\t *\n\t * Used by --tools to forward names that don't match a built-in (likely\n\t * extension- or MCP-provided), so subagents whose frontmatter declares\n\t * extension tools don't end up with an empty tool list.\n\t */\n\textraActiveToolNames?: string[];\n\n\t/** Resource loader. When omitted, DefaultResourceLoader is used. */\n\tresourceLoader?: ResourceLoader;\n\n\t/** Session manager. Default: SessionManager.create(cwd) */\n\tsessionManager?: SessionManager;\n\n\t/** Settings manager. Default: SettingsManager.create(cwd, agentDir) */\n\tsettingsManager?: SettingsManager;\n\n\t/** Optional: check if the claude-code CLI provider is ready (installed + authed).\n\t * Passed to RetryHandler for third-party block recovery (#3772). */\n\tisClaudeCodeReady?: () => boolean;\n}\n\n/** Result from createAgentSession */\nexport interface CreateAgentSessionResult {\n\t/** The created session */\n\tsession: AgentSession;\n\t/** Extensions result (for UI context setup in interactive mode) */\n\textensionsResult: LoadExtensionsResult;\n\t/** Warning if session was restored with a different model than saved */\n\tmodelFallbackMessage?: string;\n}\n\n// Re-exports\n\nexport type {\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionContext,\n\tExtensionFactory,\n\tSlashCommandInfo,\n\tSlashCommandLocation,\n\tSlashCommandSource,\n\tToolDefinition,\n} from \"./extensions/index.js\";\nexport type { PromptTemplate } from \"./prompt-templates.js\";\nexport type { Skill } from \"./skills.js\";\nexport type { Tool } from \"./tools/index.js\";\n\nexport {\n\t// Pre-built tools (use process.cwd())\n\treadTool,\n\tbashTool,\n\teditTool,\n\twriteTool,\n\tgrepTool,\n\tfindTool,\n\tlsTool,\n\tcodingTools,\n\treadOnlyTools,\n\tallTools as allBuiltInTools,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateBashTool,\n\tcreateEditTool,\n\tcreateWriteTool,\n\tcreateGrepTool,\n\tcreateFindTool,\n\tcreateLsTool,\n\t// Hashline edit mode\n\thashlineCodingTools,\n\thashlineEditTool,\n\thashlineReadTool,\n\tcreateHashlineCodingTools,\n\tcreateHashlineEditTool,\n\tcreateHashlineReadTool,\n};\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n\treturn getAgentDir();\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@gsd/pi-ai';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [readTool, bashTool],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(options: CreateAgentSessionOptions = {}): Promise<CreateAgentSessionResult> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst agentDir = options.agentDir ?? getDefaultAgentDir();\n\tlet resourceLoader = options.resourceLoader;\n\n\t// Use provided or create AuthStorage and ModelRegistry\n\tconst authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n\tconst modelsPath = options.agentDir ? join(agentDir, \"models.json\") : undefined;\n\tconst authStorage = options.authStorage ?? AuthStorage.create(authPath);\n\tconst modelRegistry = options.modelRegistry ?? new ModelRegistry(authStorage, modelsPath);\n\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tconst sessionManager = options.sessionManager ?? SessionManager.create(cwd);\n\n\tif (!resourceLoader) {\n\t\tresourceLoader = new DefaultResourceLoader({ cwd, agentDir, settingsManager });\n\t\tawait resourceLoader.reload();\n\t\ttime(\"resourceLoader.reload\");\n\t}\n\n\t// Flush provider registrations queued during extension loading so that\n\t// extension models (e.g. pi-claude-cli) are visible in the registry before\n\t// findInitialModel() runs. bindCore() repeats this flush as a safety net\n\t// for any late-arriving registrations.\n\tconst { runtime: extensionRuntime } = resourceLoader.getExtensions();\n\tfor (const { name, config } of extensionRuntime.pendingProviderRegistrations) {\n\t\tmodelRegistry.registerProvider(name, config);\n\t}\n\textensionRuntime.pendingProviderRegistrations = [];\n\n\t// Check if session has existing data to restore\n\tconst existingSession = sessionManager.buildSessionContext();\n\tconst hasExistingSession = existingSession.messages.length > 0;\n\tconst hasThinkingEntry = sessionManager.getBranch().some((entry) => entry.type === \"thinking_level_change\");\n\n\tlet model = options.model;\n\tlet modelFallbackMessage: string | undefined;\n\n\t// If session has data, try to restore model from it\n\tif (!model && hasExistingSession && existingSession.model) {\n\t\tconst restoredModel = modelRegistry.find(existingSession.model.provider, existingSession.model.modelId);\n\t\t\tif (restoredModel && canRestoreSessionModel(modelRegistry, restoredModel)) {\n\t\t\t\tmodel = restoredModel;\n\t\t\t}\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n\t\t}\n\t}\n\n\t// Flush extension provider registrations so extension-provided models (e.g. claude-code/*)\n\t// are available in the registry before model resolution. Without this, findInitialModel()\n\t// cannot find extension models and falls back to built-in providers (#3534).\n\tconst extensionsForModelResolution = resourceLoader.getExtensions();\n\tfor (const { name, config } of extensionsForModelResolution.runtime.pendingProviderRegistrations) {\n\t\tmodelRegistry.registerProvider(name, config);\n\t}\n\t// Clear the queue so bindCore() doesn't re-register the same providers.\n\textensionsForModelResolution.runtime.pendingProviderRegistrations = [];\n\n\t// If still no model, use findInitialModel (checks settings default, then provider defaults)\n\tif (!model) {\n\t\tconst result = await findInitialModel({\n\t\t\tscopedModels: [],\n\t\t\tisContinuing: hasExistingSession,\n\t\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\t\tdefaultModelId: settingsManager.getDefaultModel(),\n\t\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\t\tmodelRegistry,\n\t\t});\n\t\tmodel = result.model;\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `No models available. Use /login or set an API key environment variable. See ${join(getDocsPath(), \"providers.md\")}. Then use /model to select a model.`;\n\t\t} else if (modelFallbackMessage) {\n\t\t\tmodelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n\t\t}\n\t}\n\n\tlet thinkingLevel = options.thinkingLevel;\n\n\t// If session has data, restore thinking level from it\n\tif (thinkingLevel === undefined && hasExistingSession) {\n\t\tthinkingLevel = hasThinkingEntry\n\t\t\t? (existingSession.thinkingLevel as ThinkingLevel)\n\t\t\t: (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);\n\t}\n\n\t// Fall back to settings default\n\tif (thinkingLevel === undefined) {\n\t\tthinkingLevel = settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n\t}\n\n\t// Clamp to model capabilities\n\tif (!model || !model.reasoning) {\n\t\tthinkingLevel = \"off\";\n\t}\n\n\tconst editMode = settingsManager.getEditMode();\n\tconst defaultActiveToolNames: ToolName[] = editMode === \"hashline\"\n\t\t? [\"hashline_read\", \"bash\", \"hashline_edit\", \"write\", \"lsp\"]\n\t\t: [\"read\", \"bash\", \"edit\", \"write\", \"lsp\"];\n\tconst builtinActiveToolNames: ToolName[] = options.tools\n\t\t? options.tools.map((t) => t.name).filter((n): n is ToolName => n in allTools)\n\t\t: defaultActiveToolNames;\n\t// Merge in extension/MCP tool names from --tools that didn't match a built-in.\n\t// AgentSession.setActiveToolsByName silently drops names that aren't in the\n\t// registry, so unknown names are harmless here.\n\tconst initialActiveToolNames: string[] = options.extraActiveToolNames\n\t\t? [...builtinActiveToolNames, ...options.extraActiveToolNames]\n\t\t: builtinActiveToolNames;\n\n\tlet agent: Agent;\n\n\t// Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)\n\tconst convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] => {\n\t\tconst converted = convertToLlm(messages);\n\t\t// Check setting dynamically so mid-session changes take effect\n\t\tif (!settingsManager.getBlockImages()) {\n\t\t\treturn converted;\n\t\t}\n\t\t// Filter out ImageContent from all messages, replacing with text placeholder\n\t\treturn converted.map((msg) => {\n\t\t\tif (msg.role === \"user\" || msg.role === \"toolResult\") {\n\t\t\t\tconst content = msg.content;\n\t\t\t\tif (Array.isArray(content)) {\n\t\t\t\t\tconst hasImages = content.some((c) => c.type === \"image\");\n\t\t\t\t\tif (hasImages) {\n\t\t\t\t\t\tconst filteredContent = content\n\t\t\t\t\t\t\t.map((c) =>\n\t\t\t\t\t\t\t\tc.type === \"image\" ? { type: \"text\" as const, text: \"Image reading is disabled.\" } : c,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(c, i, arr) =>\n\t\t\t\t\t\t\t\t\t// Dedupe consecutive \"Image reading is disabled.\" texts\n\t\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\t\tc.type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\tc.text === \"Image reading is disabled.\" &&\n\t\t\t\t\t\t\t\t\t\ti > 0 &&\n\t\t\t\t\t\t\t\t\t\tarr[i - 1].type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\t(arr[i - 1] as { type: \"text\"; text: string }).text === \"Image reading is disabled.\"\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn { ...msg, content: filteredContent };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn msg;\n\t\t});\n\t};\n\n\tconst extensionRunnerRef: { current?: ExtensionRunner } = {};\n\tconst workspaceRootRef: { current: string } = { current: cwd };\n\n\tagent = new Agent({\n\t\tinitialState: {\n\t\t\tsystemPrompt: \"\",\n\t\t\tmodel,\n\t\t\tthinkingLevel,\n\t\t\ttools: [],\n\t\t},\n\t\tconvertToLlm: convertToLlmWithBlockImages,\n\t\tonPayload: async (payload, currentModel) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.hasHandlers(\"before_provider_request\")) {\n\t\t\t\tmaybeLogProviderPayloadAudit(payload, \"before_provider_request:unchanged\");\n\t\t\t\treturn payload;\n\t\t\t}\n\t\t\tconst nextPayload = await runner.emitBeforeProviderRequest(payload, currentModel);\n\t\t\tmaybeLogProviderPayloadAudit(nextPayload, \"before_provider_request:after\");\n\t\t\treturn nextPayload;\n\t\t},\n\t\tsessionId: sessionManager.getSessionId(),\n\t\ttransformContext: async (messages) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner) return messages;\n\t\t\treturn runner.emitContext(messages);\n\t\t},\n\t\tfilterTools: async (tools, _signal, messages) => {\n\t\t\tconst currentModel = agent.state.activeInferenceModel ?? agent.state.model ?? model;\n\t\t\tif (!currentModel) return tools;\n\t\t\tconst providerFiltered = filterToolsForProviderRequest(tools, currentModel);\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.hasHandlers(\"adjust_tool_set\")) return providerFiltered.compatible;\n\t\t\tconst result = await runner.emitAdjustToolSet({\n\t\t\t\tselectedModelApi: currentModel.api,\n\t\t\t\tselectedModelProvider: currentModel.provider,\n\t\t\t\tselectedModelId: currentModel.id,\n\t\t\t\tactiveToolNames: providerFiltered.compatible.map((tool) => tool.name),\n\t\t\t\tfilteredTools: providerFiltered.filtered.map((tool) => tool.name),\n\t\t\t\trequestCustomMessages: getAdjustToolSetRequestCustomMessages(messages),\n\t\t\t});\n\t\t\tif (!result?.toolNames) return providerFiltered.compatible;\n\t\t\tconst allowedNames = new Set(result.toolNames);\n\t\t\treturn providerFiltered.compatible.filter((tool) => allowedNames.has(tool.name));\n\t\t},\n\t\tsteeringMode: settingsManager.getSteeringMode(),\n\t\tfollowUpMode: settingsManager.getFollowUpMode(),\n\t\ttransport: settingsManager.getTransport(),\n\t\tthinkingBudgets: settingsManager.getThinkingBudgets(),\n\t\tmaxRetryDelayMs: settingsManager.getRetrySettings().maxDelayMs,\n\t\texternalToolExecution: (m) => modelRegistry.getProviderAuthMode(m.provider) === \"externalCli\",\n\t\tgetProviderOptions: async (currentModel) => {\n\t\t\tif (currentModel.provider !== \"claude-code\") return undefined;\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner) {\n\t\t\t\treturn { cwd: workspaceRootRef.current };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tcwd: workspaceRootRef.current,\n\t\t\t\t...(runner.hasUI() ? { extensionUIContext: runner.getUIContext() } : {}),\n\t\t\t\tonExternalToolCall: async (toolCall: { id: string; name: string; arguments: Record<string, unknown> }) => {\n\t\t\t\t\tif (!runner.hasHandlers(\"tool_call\")) return;\n\t\t\t\t\tawait runner.emitToolCall({\n\t\t\t\t\t\ttype: \"tool_call\",\n\t\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\tinput: toolCall.arguments,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonExternalToolResult: async (event: {\n\t\t\t\t\ttoolCall: { id: string; name: string; arguments: Record<string, unknown> };\n\t\t\t\t\tresult: {\n\t\t\t\t\t\tcontent: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n\t\t\t\t\t\tdetails?: Record<string, unknown>;\n\t\t\t\t\t\tisError: boolean;\n\t\t\t\t\t};\n\t\t\t\t}) => {\n\t\t\t\t\tif (!runner.hasHandlers(\"tool_result\")) return;\n\t\t\t\t\tconst content = event.result.content.map((block) => {\n\t\t\t\t\t\tif (block.type === \"image\" && typeof block.data === \"string\" && typeof block.mimeType === \"string\") {\n\t\t\t\t\t\t\treturn { type: \"image\" as const, data: block.data, mimeType: block.mimeType };\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { type: \"text\" as const, text: typeof block.text === \"string\" ? block.text : \"\" };\n\t\t\t\t\t});\n\t\t\t\t\tawait runner.emitToolResult({\n\t\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\t\ttoolCallId: event.toolCall.id,\n\t\t\t\t\t\ttoolName: event.toolCall.name,\n\t\t\t\t\t\tinput: event.toolCall.arguments,\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\tdetails: event.result.details,\n\t\t\t\t\t\tisError: event.result.isError,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\tgetApiKey: async (provider) => {\n\t\t\t// Use the provider argument from the in-flight request;\n\t\t\t// agent.state.model may already be switched mid-turn.\n\t\t\tconst resolvedProvider = provider || agent.state.model?.provider;\n\t\t\tif (!resolvedProvider) {\n\t\t\t\tthrow new Error(\"No model selected\");\n\t\t\t}\n\t\t\tconst authMode = modelRegistry.getProviderAuthMode(resolvedProvider);\n\t\t\tif (authMode === \"externalCli\" || authMode === \"none\") {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\t// Retry key resolution with backoff to handle transient network failures\n\t\t\t// (e.g., OAuth token refresh failing due to brief connectivity loss).\n\t\t\t// When credentials are in a cooldown window (e.g., after a 429), wait\n\t\t\t// for the backoff to expire instead of using fixed delays that are\n\t\t\t// shorter than the cooldown duration.\n\t\t\tconst maxAttempts = 3;\n\t\t\tconst baseDelayMs = 2000;\n\t\t\tconst maxCooldownWaitMs = 60_000; // Don't wait longer than 60s (skip quota-exhausted 30min backoffs)\n\t\t\tfor (let attempt = 1; attempt <= maxAttempts; attempt++) {\n\t\t\t\tconst key = await modelRegistry.getApiKeyForProvider(resolvedProvider);\n\t\t\t\tif (key) return key;\n\n\t\t\t\t// On the last attempt, fall through to error handling below\n\t\t\t\tif (attempt >= maxAttempts) break;\n\n\t\t\t\t// Only retry if credentials exist (network issue) — no point retrying\n\t\t\t\t// when there are genuinely no credentials configured.\n\t\t\t\tconst hasAuth = modelRegistry.authStorage.hasAuth(resolvedProvider);\n\t\t\t\tconst model = agent.state.model;\n\t\t\t\tconst isOAuth = model && modelRegistry.isUsingOAuth(model);\n\t\t\t\tif (!hasAuth && !isOAuth) break;\n\n\t\t\t\t// If credentials are in a cooldown window, wait for the earliest\n\t\t\t\t// one to expire rather than using a fixed delay that's too short.\n\t\t\t\tconst backoffExpiry = modelRegistry.authStorage.getEarliestBackoffExpiry(resolvedProvider);\n\t\t\t\tif (backoffExpiry !== undefined) {\n\t\t\t\t\tconst waitMs = backoffExpiry - Date.now() + 500; // 500ms buffer\n\t\t\t\t\tif (waitMs > 0 && waitMs <= maxCooldownWaitMs) {\n\t\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, waitMs));\n\t\t\t\t\t\tcontinue; // Retry immediately after cooldown clears\n\t\t\t\t\t}\n\t\t\t\t\tif (waitMs > maxCooldownWaitMs) {\n\t\t\t\t\t\tbreak; // Quota-exhausted or very long backoff — don't block\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Standard exponential backoff for non-cooldown transient failures\n\t\t\t\tawait new Promise(resolve => setTimeout(resolve, baseDelayMs * attempt));\n\t\t\t}\n\n\t\t\t// All retries exhausted — throw descriptive error.\n\t\t\t// Check if credentials exist but are temporarily in a backoff window\n\t\t\t// (e.g., after a 429). This message intentionally avoids phrases like\n\t\t\t// \"rate limit\" / \"429\" to prevent isRetryableError() from re-entering\n\t\t\t// the retry handler and creating cascading error entries (#3429).\n\t\t\tconst hasAuth = modelRegistry.authStorage.hasAuth(resolvedProvider);\n\t\t\tif (hasAuth) {\n\t\t\t\t// Anthropic OAuth was removed in v2.74.0 for TOS compliance (#3952).\n\t\t\t\t// Users who upgraded from an older version may still have OAuth\n\t\t\t\t// credentials in auth.json that will never resolve to a valid API key.\n\t\t\t\tif (\n\t\t\t\t\tresolvedProvider === \"anthropic\" &&\n\t\t\t\t\tmodelRegistry.authStorage.hasLegacyOAuthCredential(resolvedProvider)\n\t\t\t\t) {\n\t\t\t\t\t// Self-heal: strip the stale oauth entry so hasAuth() stops lying\n\t\t\t\t\t// about anthropic being configured. This preserves any api_key\n\t\t\t\t\t// credentials alongside it.\n\t\t\t\t\tconst removed = modelRegistry.authStorage.removeLegacyOAuthCredential(resolvedProvider);\n\t\t\t\t\tif (removed) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t`[auth] Removed unsupported Anthropic OAuth credential from auth.json.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (isClaudeCodeBinaryInPath()) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Removed stale Anthropic OAuth credential (OAuth support removed in v2.74.0). ` +\n\t\t\t\t\t\t\t\t`Your current model's provider is set to \"anthropic\" but the local Claude Code CLI ` +\n\t\t\t\t\t\t\t\t`is available — switch the model's provider to \"claude-code\" in your preferences ` +\n\t\t\t\t\t\t\t\t`to use it, or set ANTHROPIC_API_KEY to continue with the Anthropic API directly.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Removed stale Anthropic OAuth credential (OAuth support removed in v2.74.0). ` +\n\t\t\t\t\t\t\t`Set ANTHROPIC_API_KEY, run '/login' and paste an API key, or switch to a different provider.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst expiry = modelRegistry.authStorage.getEarliestBackoffExpiry(resolvedProvider);\n\t\t\t\tconst retryAfterMs = expiry !== undefined ? Math.max(0, expiry - Date.now()) : undefined;\n\t\t\t\tthrow new CredentialCooldownError(resolvedProvider, retryAfterMs);\n\t\t\t}\n\t\t\tconst model = agent.state.model;\n\t\t\tconst isOAuth = model && modelRegistry.isUsingOAuth(model);\n\t\t\tif (isOAuth) {\n\t\t\t\t// If credentials exist but are all in a backoff window (quota / rate-limit),\n\t\t\t\t// surface a specific message instead of the misleading \"Authentication failed\".\n\t\t\t\tif (modelRegistry.authStorage.areAllCredentialsBackedOff(resolvedProvider)) {\n\t\t\t\t\tconst expiry = modelRegistry.authStorage.getEarliestBackoffExpiry(resolvedProvider);\n\t\t\t\t\tconst retryAfterMs = expiry !== undefined ? Math.max(0, expiry - Date.now()) : undefined;\n\t\t\t\t\tthrow new CredentialCooldownError(resolvedProvider, retryAfterMs);\n\t\t\t\t}\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Authentication failed for \"${resolvedProvider}\". ` +\n\t\t\t\t\t\t`Credentials may have expired or network is unavailable. ` +\n\t\t\t\t\t\t`Run '/login ${resolvedProvider}' to re-authenticate.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow new Error(\n\t\t\t\t`No API key found for \"${resolvedProvider}\". ` +\n\t\t\t\t\t`Set an API key environment variable or run '/login ${resolvedProvider}'.`,\n\t\t\t);\n\t\t},\n\t});\n\n\t// Restore messages if session has existing data\n\tif (hasExistingSession) {\n\t\tagent.replaceMessages(existingSession.messages);\n\t\tif (!hasThinkingEntry) {\n\t\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t\t}\n\t} else {\n\t\t// Save initial model and thinking level for new sessions so they can be restored on resume\n\t\tif (model) {\n\t\t\tsessionManager.appendModelChange(model.provider, model.id);\n\t\t}\n\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t}\n\n\tconst session = new AgentSession({\n\t\tagent,\n\t\tsessionManager,\n\t\tsettingsManager,\n\t\tcwd,\n\t\tscopedModels: options.scopedModels,\n\t\tresourceLoader,\n\t\tcustomTools: options.customTools,\n\t\tmodelRegistry,\n\t\tinitialActiveToolNames,\n\t\textensionRunnerRef,\n\t\tworkspaceRootRef,\n\t\tisClaudeCodeReady: options.isClaudeCodeReady,\n\t});\n\tconst extensionsResult = resourceLoader.getExtensions();\n\n\treturn {\n\t\tsession,\n\t\textensionsResult,\n\t\tmodelFallbackMessage,\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["// gsd-pi - Coding agent session factory and runtime wiring\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\n/**\n * Lightweight PATH scan for the `claude` binary — no subprocess, no network.\n * Mirrors the check in src/resources/extensions/gsd/doctor-providers.ts so the\n * legacy Anthropic OAuth self-heal path can only trigger when the user has a\n * working Claude Code CLI to fall back to.\n */\nfunction isClaudeCodeBinaryInPath(): boolean {\n\tconst pathDirs = (process.env.PATH ?? \"\").split(\":\");\n\treturn pathDirs.some((dir) => dir && existsSync(join(dir, \"claude\")));\n}\n\n/**\n * Structured error thrown when all credentials for a provider are in a\n * backoff window. Carries typed metadata so callers (e.g. the auto-loop)\n * can make informed retry decisions instead of string-matching the message.\n */\nexport class CredentialCooldownError extends Error {\n\treadonly code = \"AUTH_COOLDOWN\" as const;\n\t/** Milliseconds until the earliest credential becomes available, or undefined if unknown. */\n\treadonly retryAfterMs: number | undefined;\n\n\tconstructor(provider: string, retryAfterMs?: number) {\n\t\tsuper(\n\t\t\t`All credentials for \"${provider}\" are in a cooldown window. ` +\n\t\t\t\t`Please wait a moment and try again, or switch to a different provider.`,\n\t\t);\n\t\tthis.name = \"CredentialCooldownError\";\n\t\tthis.retryAfterMs = retryAfterMs;\n\t}\n}\n\nexport function canRestoreSessionModel(\n\tmodelRegistry: Pick<ModelRegistry, \"isProviderRequestReady\">,\n\tmodel: Model<any>,\n): boolean {\n\treturn modelRegistry.isProviderRequestReady(model.provider);\n}\n\nconst PROVIDER_TOOL_LIMITS: Record<string, number> = {\n\tgroq: 128,\n};\n\nfunction resolveProviderToolLimit(\n\tproviderCaps: ReturnType<typeof getProviderCapabilities>,\n\tprovider: string | undefined,\n): number {\n\tif (provider && PROVIDER_TOOL_LIMITS[provider]) {\n\t\treturn PROVIDER_TOOL_LIMITS[provider];\n\t}\n\treturn providerCaps.maxTools > 0 ? providerCaps.maxTools : 0;\n}\n\nexport function filterToolsForProviderRequest(\n\ttools: AgentTool[],\n\tmodel: Pick<Model<any>, \"api\" | \"provider\">,\n): { compatible: AgentTool[]; filtered: AgentTool[] } {\n\tconst providerCaps = getProviderCapabilities(model.api);\n\tif (!providerCaps.toolCalling) {\n\t\treturn { compatible: [], filtered: tools };\n\t}\n\n\tconst compatible: AgentTool[] = [];\n\tconst filtered: AgentTool[] = [];\n\tfor (const tool of tools) {\n\t\tconst compat = getToolCompatibility(tool.name);\n\t\tif (\n\t\t\t(compat?.producesImages && !providerCaps.imageToolResults) ||\n\t\t\tcompat?.schemaFeatures?.some((feature) => providerCaps.unsupportedSchemaFeatures.includes(feature))\n\t\t) {\n\t\t\tfiltered.push(tool);\n\t\t} else {\n\t\t\tcompatible.push(tool);\n\t\t}\n\t}\n\n\tconst toolLimit = resolveProviderToolLimit(providerCaps, model.provider);\n\tif (toolLimit > 0 && compatible.length > toolLimit) {\n\t\tfiltered.push(...compatible.splice(toolLimit));\n\t}\n\n\treturn { compatible, filtered };\n}\nimport { Agent, maybeLogProviderPayloadAudit, type AgentMessage, type AgentTool, type ThinkingLevel } from \"@gsd/pi-agent-core\";\nimport { getProviderCapabilities, type Message, type Model } from \"@gsd/pi-ai\";\nimport { getAgentDir, getDocsPath } from \"../config.js\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.js\";\nimport type { ExtensionRunner, LoadExtensionsResult, ToolDefinition } from \"./extensions/index.js\";\nimport { convertToLlm } from \"./messages.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { findInitialModel } from \"./model-resolver.js\";\nimport type { ResourceLoader } from \"./resource-loader.js\";\nimport { DefaultResourceLoader } from \"./resource-loader.js\";\nimport { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\nimport { time } from \"./timings.js\";\nimport {\n\tallTools,\n\tbashTool,\n\tcodingTools,\n\tcreateBashTool,\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\teditTool,\n\tfindTool,\n\tgrepTool,\n\thashlineCodingTools,\n\thashlineEditTool,\n\thashlineReadTool,\n\tcreateHashlineCodingTools,\n\tcreateHashlineEditTool,\n\tcreateHashlineReadTool,\n\tlsTool,\n\treadOnlyTools,\n\treadTool,\n\ttype Tool,\n\ttype ToolName,\n\twriteTool,\n} from \"./tools/index.js\";\nimport { getToolCompatibility } from \"./tools/tool-compatibility-registry.js\";\n\nexport function getAdjustToolSetRequestCustomMessages(\n\tmessages: readonly AgentMessage[] | undefined,\n): Array<{ index: number; customType: string }> {\n\tif (!messages) return [];\n\tconst requestMessages: Array<{ index: number; customType: string }> = [];\n\tfor (let index = messages.length - 1; index >= 0; index--) {\n\t\tconst message = messages[index] as { role?: unknown; customType?: unknown };\n\t\tif (message?.role === \"assistant\") break;\n\t\tif (message?.role === \"custom\" && typeof message.customType === \"string\") {\n\t\t\trequestMessages.push({ index, customType: message.customType });\n\t\t}\n\t}\n\treturn requestMessages.reverse();\n}\n\nexport interface CreateAgentSessionOptions {\n\t/** Working directory for project-local discovery. Default: process.cwd() */\n\tcwd?: string;\n\t/** Global config directory. Default: ~/.pi/agent */\n\tagentDir?: string;\n\n\t/** Auth storage for credentials. Default: AuthStorage.create(agentDir/auth.json) */\n\tauthStorage?: AuthStorage;\n\t/** Model registry. Default: new ModelRegistry(authStorage, agentDir/models.json) */\n\tmodelRegistry?: ModelRegistry;\n\n\t/** Model to use. Default: from settings, else first available */\n\tmodel?: Model<any>;\n\t/** Thinking level. Default: from settings, else 'medium' (clamped to model capabilities) */\n\tthinkingLevel?: ThinkingLevel;\n\t/** Models available for cycling (Ctrl+P in interactive mode) */\n\tscopedModels?: Array<{ model: Model<any>; thinkingLevel?: ThinkingLevel }>;\n\n\t/** Built-in tools to use. Default: codingTools [read, bash, edit, write] */\n\ttools?: Tool[];\n\t/** Custom tools to register (in addition to built-in tools). */\n\tcustomTools?: ToolDefinition[];\n\t/**\n\t * Additional tool names to activate after extensions/MCP servers register.\n\t * Names that are not registered by any extension are silently ignored\n\t * by AgentSession.setActiveToolsByName.\n\t *\n\t * Used by --tools to forward names that don't match a built-in (likely\n\t * extension- or MCP-provided), so subagents whose frontmatter declares\n\t * extension tools don't end up with an empty tool list.\n\t */\n\textraActiveToolNames?: string[];\n\n\t/** Resource loader. When omitted, DefaultResourceLoader is used. */\n\tresourceLoader?: ResourceLoader;\n\n\t/** Session manager. Default: SessionManager.create(cwd) */\n\tsessionManager?: SessionManager;\n\n\t/** Settings manager. Default: SettingsManager.create(cwd, agentDir) */\n\tsettingsManager?: SettingsManager;\n\n\t/** Optional: check if the claude-code CLI provider is ready (installed + authed).\n\t * Passed to RetryHandler for third-party block recovery (#3772). */\n\tisClaudeCodeReady?: () => boolean;\n}\n\n/** Result from createAgentSession */\nexport interface CreateAgentSessionResult {\n\t/** The created session */\n\tsession: AgentSession;\n\t/** Extensions result (for UI context setup in interactive mode) */\n\textensionsResult: LoadExtensionsResult;\n\t/** Warning if session was restored with a different model than saved */\n\tmodelFallbackMessage?: string;\n}\n\n// Re-exports\n\nexport type {\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionContext,\n\tExtensionFactory,\n\tSlashCommandInfo,\n\tSlashCommandLocation,\n\tSlashCommandSource,\n\tToolDefinition,\n} from \"./extensions/index.js\";\nexport type { PromptTemplate } from \"./prompt-templates.js\";\nexport type { Skill } from \"./skills.js\";\nexport type { Tool } from \"./tools/index.js\";\n\nexport {\n\t// Pre-built tools (use process.cwd())\n\treadTool,\n\tbashTool,\n\teditTool,\n\twriteTool,\n\tgrepTool,\n\tfindTool,\n\tlsTool,\n\tcodingTools,\n\treadOnlyTools,\n\tallTools as allBuiltInTools,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateBashTool,\n\tcreateEditTool,\n\tcreateWriteTool,\n\tcreateGrepTool,\n\tcreateFindTool,\n\tcreateLsTool,\n\t// Hashline edit mode\n\thashlineCodingTools,\n\thashlineEditTool,\n\thashlineReadTool,\n\tcreateHashlineCodingTools,\n\tcreateHashlineEditTool,\n\tcreateHashlineReadTool,\n};\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n\treturn getAgentDir();\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@gsd/pi-ai';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [readTool, bashTool],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(options: CreateAgentSessionOptions = {}): Promise<CreateAgentSessionResult> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst agentDir = options.agentDir ?? getDefaultAgentDir();\n\tlet resourceLoader = options.resourceLoader;\n\n\t// Use provided or create AuthStorage and ModelRegistry\n\tconst authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n\tconst modelsPath = options.agentDir ? join(agentDir, \"models.json\") : undefined;\n\tconst authStorage = options.authStorage ?? AuthStorage.create(authPath);\n\tconst modelRegistry = options.modelRegistry ?? new ModelRegistry(authStorage, modelsPath);\n\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tconst sessionManager = options.sessionManager ?? SessionManager.create(cwd);\n\n\tif (!resourceLoader) {\n\t\tresourceLoader = new DefaultResourceLoader({ cwd, agentDir, settingsManager });\n\t\tawait resourceLoader.reload();\n\t\ttime(\"resourceLoader.reload\");\n\t}\n\n\t// Flush provider registrations queued during extension loading so that\n\t// extension models (e.g. pi-claude-cli) are visible in the registry before\n\t// findInitialModel() runs. bindCore() repeats this flush as a safety net\n\t// for any late-arriving registrations.\n\tconst { runtime: extensionRuntime } = resourceLoader.getExtensions();\n\tfor (const { name, config } of extensionRuntime.pendingProviderRegistrations) {\n\t\tmodelRegistry.registerProvider(name, config);\n\t}\n\textensionRuntime.pendingProviderRegistrations = [];\n\n\t// Check if session has existing data to restore\n\tconst existingSession = sessionManager.buildSessionContext();\n\tconst hasExistingSession = existingSession.messages.length > 0;\n\tconst hasThinkingEntry = sessionManager.getBranch().some((entry) => entry.type === \"thinking_level_change\");\n\n\tlet model = options.model;\n\tlet modelFallbackMessage: string | undefined;\n\n\t// If session has data, try to restore model from it\n\tif (!model && hasExistingSession && existingSession.model) {\n\t\tconst restoredModel = modelRegistry.find(existingSession.model.provider, existingSession.model.modelId);\n\t\t\tif (restoredModel && canRestoreSessionModel(modelRegistry, restoredModel)) {\n\t\t\t\tmodel = restoredModel;\n\t\t\t}\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n\t\t}\n\t}\n\n\t// Flush extension provider registrations so extension-provided models (e.g. claude-code/*)\n\t// are available in the registry before model resolution. Without this, findInitialModel()\n\t// cannot find extension models and falls back to built-in providers (#3534).\n\tconst extensionsForModelResolution = resourceLoader.getExtensions();\n\tfor (const { name, config } of extensionsForModelResolution.runtime.pendingProviderRegistrations) {\n\t\tmodelRegistry.registerProvider(name, config);\n\t}\n\t// Clear the queue so bindCore() doesn't re-register the same providers.\n\textensionsForModelResolution.runtime.pendingProviderRegistrations = [];\n\n\t// If still no model, use findInitialModel (checks settings default, then provider defaults)\n\tif (!model) {\n\t\tconst result = await findInitialModel({\n\t\t\tscopedModels: [],\n\t\t\tisContinuing: hasExistingSession,\n\t\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\t\tdefaultModelId: settingsManager.getDefaultModel(),\n\t\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\t\tmodelRegistry,\n\t\t});\n\t\tmodel = result.model;\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `No models available. Use /login or set an API key environment variable. See ${join(getDocsPath(), \"providers.md\")}. Then use /model to select a model.`;\n\t\t} else if (modelFallbackMessage) {\n\t\t\tmodelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n\t\t}\n\t}\n\n\tlet thinkingLevel = options.thinkingLevel;\n\n\t// If session has data, restore thinking level from it\n\tif (thinkingLevel === undefined && hasExistingSession) {\n\t\tthinkingLevel = hasThinkingEntry\n\t\t\t? (existingSession.thinkingLevel as ThinkingLevel)\n\t\t\t: (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);\n\t}\n\n\t// Fall back to settings default\n\tif (thinkingLevel === undefined) {\n\t\tthinkingLevel = settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n\t}\n\n\t// Clamp to model capabilities\n\tif (!model || !model.reasoning) {\n\t\tthinkingLevel = \"off\";\n\t}\n\n\tconst editMode = settingsManager.getEditMode();\n\tconst defaultActiveToolNames: ToolName[] = editMode === \"hashline\"\n\t\t? [\"hashline_read\", \"bash\", \"hashline_edit\", \"write\", \"lsp\"]\n\t\t: [\"read\", \"bash\", \"edit\", \"write\", \"lsp\"];\n\tconst builtinActiveToolNames: ToolName[] = options.tools\n\t\t? options.tools.map((t) => t.name).filter((n): n is ToolName => n in allTools)\n\t\t: defaultActiveToolNames;\n\t// Merge in extension/MCP tool names from --tools that didn't match a built-in.\n\t// AgentSession.setActiveToolsByName silently drops names that aren't in the\n\t// registry, so unknown names are harmless here.\n\tconst initialActiveToolNames: string[] = options.extraActiveToolNames\n\t\t? [...builtinActiveToolNames, ...options.extraActiveToolNames]\n\t\t: builtinActiveToolNames;\n\n\tlet agent: Agent;\n\n\t// Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)\n\tconst convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] => {\n\t\tconst converted = convertToLlm(messages);\n\t\t// Check setting dynamically so mid-session changes take effect\n\t\tif (!settingsManager.getBlockImages()) {\n\t\t\treturn converted;\n\t\t}\n\t\t// Filter out ImageContent from all messages, replacing with text placeholder\n\t\treturn converted.map((msg) => {\n\t\t\tif (msg.role === \"user\" || msg.role === \"toolResult\") {\n\t\t\t\tconst content = msg.content;\n\t\t\t\tif (Array.isArray(content)) {\n\t\t\t\t\tconst hasImages = content.some((c) => c.type === \"image\");\n\t\t\t\t\tif (hasImages) {\n\t\t\t\t\t\tconst filteredContent = content\n\t\t\t\t\t\t\t.map((c) =>\n\t\t\t\t\t\t\t\tc.type === \"image\" ? { type: \"text\" as const, text: \"Image reading is disabled.\" } : c,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(c, i, arr) =>\n\t\t\t\t\t\t\t\t\t// Dedupe consecutive \"Image reading is disabled.\" texts\n\t\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\t\tc.type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\tc.text === \"Image reading is disabled.\" &&\n\t\t\t\t\t\t\t\t\t\ti > 0 &&\n\t\t\t\t\t\t\t\t\t\tarr[i - 1].type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\t(arr[i - 1] as { type: \"text\"; text: string }).text === \"Image reading is disabled.\"\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn { ...msg, content: filteredContent };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn msg;\n\t\t});\n\t};\n\n\tconst extensionRunnerRef: { current?: ExtensionRunner } = {};\n\tconst workspaceRootRef: { current: string } = { current: cwd };\n\n\tagent = new Agent({\n\t\tinitialState: {\n\t\t\tsystemPrompt: \"\",\n\t\t\tmodel,\n\t\t\tthinkingLevel,\n\t\t\ttools: [],\n\t\t},\n\t\tconvertToLlm: convertToLlmWithBlockImages,\n\t\tonPayload: async (payload, currentModel) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.hasHandlers(\"before_provider_request\")) {\n\t\t\t\tmaybeLogProviderPayloadAudit(payload, \"before_provider_request:unchanged\");\n\t\t\t\treturn payload;\n\t\t\t}\n\t\t\tconst nextPayload = await runner.emitBeforeProviderRequest(payload, currentModel);\n\t\t\tmaybeLogProviderPayloadAudit(nextPayload, \"before_provider_request:after\");\n\t\t\treturn nextPayload;\n\t\t},\n\t\tsessionId: sessionManager.getSessionId(),\n\t\ttransformContext: async (messages) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner) return messages;\n\t\t\treturn runner.emitContext(messages);\n\t\t},\n\t\tfilterTools: async (tools, _signal, messages) => {\n\t\t\tconst currentModel = agent.state.activeInferenceModel ?? agent.state.model ?? model;\n\t\t\tif (!currentModel) return tools;\n\t\t\tconst providerFiltered = filterToolsForProviderRequest(tools, currentModel);\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.hasHandlers(\"adjust_tool_set\")) return providerFiltered.compatible;\n\t\t\tconst result = await runner.emitAdjustToolSet({\n\t\t\t\tselectedModelApi: currentModel.api,\n\t\t\t\tselectedModelProvider: currentModel.provider,\n\t\t\t\tselectedModelId: currentModel.id,\n\t\t\t\tactiveToolNames: providerFiltered.compatible.map((tool) => tool.name),\n\t\t\t\tfilteredTools: providerFiltered.filtered.map((tool) => tool.name),\n\t\t\t\trequestCustomMessages: getAdjustToolSetRequestCustomMessages(messages),\n\t\t\t});\n\t\t\tif (!result?.toolNames) return providerFiltered.compatible;\n\t\t\tconst allowedNames = new Set(result.toolNames);\n\t\t\treturn providerFiltered.compatible.filter((tool) => allowedNames.has(tool.name));\n\t\t},\n\t\tsteeringMode: settingsManager.getSteeringMode(),\n\t\tfollowUpMode: settingsManager.getFollowUpMode(),\n\t\ttransport: settingsManager.getTransport(),\n\t\tthinkingBudgets: settingsManager.getThinkingBudgets(),\n\t\tmaxRetryDelayMs: settingsManager.getRetrySettings().maxDelayMs,\n\t\texternalToolExecution: (m) => modelRegistry.getProviderAuthMode(m.provider) === \"externalCli\",\n\t\tgetProviderOptions: async (currentModel) => {\n\t\t\tif (currentModel.provider !== \"claude-code\") return undefined;\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner) {\n\t\t\t\treturn { cwd: workspaceRootRef.current };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tcwd: workspaceRootRef.current,\n\t\t\t\t...(runner.hasUI() ? { extensionUIContext: runner.getUIContext() } : {}),\n\t\t\t\tonExternalToolCall: async (toolCall: { id: string; name: string; arguments: Record<string, unknown> }) => {\n\t\t\t\t\tif (!runner.hasHandlers(\"tool_call\")) return;\n\t\t\t\t\tawait runner.emitToolCall({\n\t\t\t\t\t\ttype: \"tool_call\",\n\t\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\tinput: toolCall.arguments,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonExternalToolResult: async (event: {\n\t\t\t\t\ttoolCall: { id: string; name: string; arguments: Record<string, unknown> };\n\t\t\t\t\tresult: {\n\t\t\t\t\t\tcontent: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n\t\t\t\t\t\tdetails?: Record<string, unknown>;\n\t\t\t\t\t\tisError: boolean;\n\t\t\t\t\t};\n\t\t\t\t}) => {\n\t\t\t\t\tif (!runner.hasHandlers(\"tool_result\")) return;\n\t\t\t\t\tconst content = event.result.content.map((block) => {\n\t\t\t\t\t\tif (block.type === \"image\" && typeof block.data === \"string\" && typeof block.mimeType === \"string\") {\n\t\t\t\t\t\t\treturn { type: \"image\" as const, data: block.data, mimeType: block.mimeType };\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { type: \"text\" as const, text: typeof block.text === \"string\" ? block.text : \"\" };\n\t\t\t\t\t});\n\t\t\t\t\tawait runner.emitToolResult({\n\t\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\t\ttoolCallId: event.toolCall.id,\n\t\t\t\t\t\ttoolName: event.toolCall.name,\n\t\t\t\t\t\tinput: event.toolCall.arguments,\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\tdetails: event.result.details,\n\t\t\t\t\t\tisError: event.result.isError,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\tgetApiKey: async (provider) => {\n\t\t\t// Use the provider argument from the in-flight request;\n\t\t\t// agent.state.model may already be switched mid-turn.\n\t\t\tconst resolvedProvider = provider || agent.state.model?.provider;\n\t\t\tif (!resolvedProvider) {\n\t\t\t\tthrow new Error(\"No model selected\");\n\t\t\t}\n\t\t\tconst authMode = modelRegistry.getProviderAuthMode(resolvedProvider);\n\t\t\tif (authMode === \"externalCli\" || authMode === \"none\") {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\t// Retry key resolution with backoff to handle transient network failures\n\t\t\t// (e.g., OAuth token refresh failing due to brief connectivity loss).\n\t\t\t// When credentials are in a cooldown window (e.g., after a 429), wait\n\t\t\t// for the backoff to expire instead of using fixed delays that are\n\t\t\t// shorter than the cooldown duration.\n\t\t\tconst maxAttempts = 3;\n\t\t\tconst baseDelayMs = 2000;\n\t\t\tconst maxCooldownWaitMs = 60_000; // Don't wait longer than 60s (skip quota-exhausted 30min backoffs)\n\t\t\tfor (let attempt = 1; attempt <= maxAttempts; attempt++) {\n\t\t\t\tconst key = await modelRegistry.getApiKeyForProvider(resolvedProvider);\n\t\t\t\tif (key) return key;\n\n\t\t\t\t// On the last attempt, fall through to error handling below\n\t\t\t\tif (attempt >= maxAttempts) break;\n\n\t\t\t\t// Only retry if credentials exist (network issue) — no point retrying\n\t\t\t\t// when there are genuinely no credentials configured.\n\t\t\t\tconst hasAuth = modelRegistry.authStorage.hasAuth(resolvedProvider);\n\t\t\t\tconst model = agent.state.model;\n\t\t\t\tconst isOAuth = model && modelRegistry.isUsingOAuth(model);\n\t\t\t\tif (!hasAuth && !isOAuth) break;\n\n\t\t\t\t// If credentials are in a cooldown window, wait for the earliest\n\t\t\t\t// one to expire rather than using a fixed delay that's too short.\n\t\t\t\tconst backoffExpiry = modelRegistry.authStorage.getEarliestBackoffExpiry(resolvedProvider);\n\t\t\t\tif (backoffExpiry !== undefined) {\n\t\t\t\t\tconst waitMs = backoffExpiry - Date.now() + 500; // 500ms buffer\n\t\t\t\t\tif (waitMs > 0 && waitMs <= maxCooldownWaitMs) {\n\t\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, waitMs));\n\t\t\t\t\t\tcontinue; // Retry immediately after cooldown clears\n\t\t\t\t\t}\n\t\t\t\t\tif (waitMs > maxCooldownWaitMs) {\n\t\t\t\t\t\tbreak; // Quota-exhausted or very long backoff — don't block\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Standard exponential backoff for non-cooldown transient failures\n\t\t\t\tawait new Promise(resolve => setTimeout(resolve, baseDelayMs * attempt));\n\t\t\t}\n\n\t\t\t// All retries exhausted — throw descriptive error.\n\t\t\t// Check if credentials exist but are temporarily in a backoff window\n\t\t\t// (e.g., after a 429). This message intentionally avoids phrases like\n\t\t\t// \"rate limit\" / \"429\" to prevent isRetryableError() from re-entering\n\t\t\t// the retry handler and creating cascading error entries (#3429).\n\t\t\tconst hasAuth = modelRegistry.authStorage.hasAuth(resolvedProvider);\n\t\t\tif (hasAuth) {\n\t\t\t\t// Anthropic OAuth was removed in v2.74.0 for TOS compliance (#3952).\n\t\t\t\t// Users who upgraded from an older version may still have OAuth\n\t\t\t\t// credentials in auth.json that will never resolve to a valid API key.\n\t\t\t\tif (\n\t\t\t\t\tresolvedProvider === \"anthropic\" &&\n\t\t\t\t\tmodelRegistry.authStorage.hasLegacyOAuthCredential(resolvedProvider)\n\t\t\t\t) {\n\t\t\t\t\t// Self-heal: strip the stale oauth entry so hasAuth() stops lying\n\t\t\t\t\t// about anthropic being configured. This preserves any api_key\n\t\t\t\t\t// credentials alongside it.\n\t\t\t\t\tconst removed = modelRegistry.authStorage.removeLegacyOAuthCredential(resolvedProvider);\n\t\t\t\t\tif (removed) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t`[auth] Removed unsupported Anthropic OAuth credential from auth.json.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (isClaudeCodeBinaryInPath()) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Removed stale Anthropic OAuth credential (OAuth support removed in v2.74.0). ` +\n\t\t\t\t\t\t\t\t`Your current model's provider is set to \"anthropic\" but the local Claude Code CLI ` +\n\t\t\t\t\t\t\t\t`is available — switch the model's provider to \"claude-code\" in your preferences ` +\n\t\t\t\t\t\t\t\t`to use it, or set ANTHROPIC_API_KEY to continue with the Anthropic API directly.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Removed stale Anthropic OAuth credential (OAuth support removed in v2.74.0). ` +\n\t\t\t\t\t\t\t`Set ANTHROPIC_API_KEY, run '/login' and paste an API key, or switch to a different provider.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst expiry = modelRegistry.authStorage.getEarliestBackoffExpiry(resolvedProvider);\n\t\t\t\tconst retryAfterMs = expiry !== undefined ? Math.max(0, expiry - Date.now()) : undefined;\n\t\t\t\tthrow new CredentialCooldownError(resolvedProvider, retryAfterMs);\n\t\t\t}\n\t\t\tconst model = agent.state.model;\n\t\t\tconst isOAuth = model && modelRegistry.isUsingOAuth(model);\n\t\t\tif (isOAuth) {\n\t\t\t\t// If credentials exist but are all in a backoff window (quota / rate-limit),\n\t\t\t\t// surface a specific message instead of the misleading \"Authentication failed\".\n\t\t\t\tif (modelRegistry.authStorage.areAllCredentialsBackedOff(resolvedProvider)) {\n\t\t\t\t\tconst expiry = modelRegistry.authStorage.getEarliestBackoffExpiry(resolvedProvider);\n\t\t\t\t\tconst retryAfterMs = expiry !== undefined ? Math.max(0, expiry - Date.now()) : undefined;\n\t\t\t\t\tthrow new CredentialCooldownError(resolvedProvider, retryAfterMs);\n\t\t\t\t}\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Authentication failed for \"${resolvedProvider}\". ` +\n\t\t\t\t\t\t`Credentials may have expired or network is unavailable. ` +\n\t\t\t\t\t\t`Run '/login ${resolvedProvider}' to re-authenticate.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow new Error(\n\t\t\t\t`No API key found for \"${resolvedProvider}\". ` +\n\t\t\t\t\t`Set an API key environment variable or run '/login ${resolvedProvider}'.`,\n\t\t\t);\n\t\t},\n\t});\n\n\t// Restore messages if session has existing data\n\tif (hasExistingSession) {\n\t\tagent.replaceMessages(existingSession.messages);\n\t\tif (!hasThinkingEntry) {\n\t\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t\t}\n\t} else {\n\t\t// Save initial model and thinking level for new sessions so they can be restored on resume\n\t\tif (model) {\n\t\t\tsessionManager.appendModelChange(model.provider, model.id);\n\t\t}\n\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t}\n\n\tconst session = new AgentSession({\n\t\tagent,\n\t\tsessionManager,\n\t\tsettingsManager,\n\t\tcwd,\n\t\tscopedModels: options.scopedModels,\n\t\tresourceLoader,\n\t\tcustomTools: options.customTools,\n\t\tmodelRegistry,\n\t\tinitialActiveToolNames,\n\t\textensionRunnerRef,\n\t\tworkspaceRootRef,\n\t\tisClaudeCodeReady: options.isClaudeCodeReady,\n\t});\n\tconst extensionsResult = resourceLoader.getExtensions();\n\n\treturn {\n\t\tsession,\n\t\textensionsResult,\n\t\tmodelFallbackMessage,\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-tool.test.js","sourceRoot":"","sources":["../../src/core/skill-tool.test.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"skill-tool.test.js","sourceRoot":"","sources":["../../src/core/skill-tool.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Project/App: gsd-pi\n// File Purpose: Tests skill invocation and prompt-only skill visibility behavior.\n\nimport assert from \"node:assert/strict\";\nimport { mkdirSync, mkdtempSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { afterEach, beforeEach, describe, it } from \"node:test\";\n\nimport { Agent } from \"@gsd/pi-agent-core\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { DefaultResourceLoader } from \"./resource-loader.js\";\nimport { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\n\nlet testDir: string;\n\nfunction writeSkill(cwd: string, name: string, description: string, body = `# ${name}\\n`): string {\n\tconst skillDir = join(cwd, \".agents\", \"skills\", name);\n\tmkdirSync(skillDir, { recursive: true });\n\tconst skillPath = join(skillDir, \"SKILL.md\");\n\twriteFileSync(skillPath, `---\\nname: ${name}\\ndescription: ${description}\\n---\\n\\n${body}`);\n\treturn skillPath;\n}\n\ndescribe(\"Skill tool\", () => {\n\tbeforeEach(() => {\n\t\ttestDir = mkdtempSync(join(tmpdir(), \"skill-tool-test-\"));\n\t});\n\n\tafterEach(() => {\n\t\trmSync(testDir, { recursive: true, force: true });\n\t});\n\n\tasync function createSession() {\n\t\tconst agentDir = join(testDir, \"agent-home\");\n\t\tconst authStorage = AuthStorage.inMemory({});\n\t\tconst modelRegistry = new ModelRegistry(authStorage, join(agentDir, \"models.json\"));\n\t\tconst settingsManager = SettingsManager.inMemory();\n\t\tconst resourceLoader = new DefaultResourceLoader({\n\t\t\tcwd: testDir,\n\t\t\tagentDir,\n\t\t\tsettingsManager,\n\t\t\tnoExtensions: true,\n\t\t\tnoPromptTemplates: true,\n\t\t\tnoThemes: true,\n\t\t});\n\t\tawait resourceLoader.reload();\n\n\t\treturn new AgentSession({\n\t\t\tagent: new Agent(),\n\t\t\tsessionManager: SessionManager.inMemory(testDir),\n\t\t\tsettingsManager,\n\t\t\tcwd: testDir,\n\t\t\tresourceLoader,\n\t\t\tmodelRegistry,\n\t\t});\n\t}\n\n\tit(\"resolves a project-level skill to the exact skill block format\", async () => {\n\t\tconst skillPath = writeSkill(\n\t\t\ttestDir,\n\t\t\t\"swift-testing\",\n\t\t\t\"Use for Swift Testing assertions and verification patterns.\",\n\t\t\t\"# Swift Testing\\nUse this skill.\\n\",\n\t\t);\n\t\tconst session = await createSession();\n\n\t\tconst tool = session.state.tools.find((entry) => entry.name === \"Skill\");\n\t\tassert.ok(tool, \"Skill tool should be registered\");\n\n\t\tconst result = await tool.execute(\"call-1\", { skill: \"swift-testing\" });\n\t\tassert.equal(\n\t\t\tresult.content[0]?.type === \"text\" ? result.content[0].text : \"\",\n\t\t\t`<skill name=\"swift-testing\" location=\"${skillPath}\">\\nReferences are relative to ${join(testDir, \".agents\", \"skills\", \"swift-testing\")}.\\n\\n# Swift Testing\\nUse this skill.\\n</skill>`,\n\t\t);\n\t});\n\n\tit(\"returns a helpful error for unknown skills\", async () => {\n\t\twriteSkill(testDir, \"swift-testing\", \"Use for Swift Testing assertions and verification patterns.\");\n\t\tconst session = await createSession();\n\t\tconst tool = session.state.tools.find((entry) => entry.name === \"Skill\");\n\t\tassert.ok(tool, \"Skill tool should be registered\");\n\n\t\tconst result = await tool.execute(\"call-2\", { skill: \"nonexistent\" });\n\t\tconst message = result.content[0]?.type === \"text\" ? result.content[0].text : \"\";\n\t\tassert.match(message, /^Skill \"nonexistent\" not found\\. Available skills: /);\n\t\tassert.match(message, /swift-testing/);\n\t});\n\n\tit(\"filters skill catalog without unloading skills or disabling Skill tool\", async () => {\n\t\twriteSkill(testDir, \"alpha\", \"Use alpha.\");\n\t\twriteSkill(testDir, \"beta\", \"Use beta.\");\n\t\tconst session = await createSession();\n\n\t\tassert.match(session.systemPrompt, /<name>alpha<\\/name>/);\n\t\tassert.match(session.systemPrompt, /<name>beta<\\/name>/);\n\n\t\tsession.setVisibleSkillsByName([\"alpha\"]);\n\t\tassert.deepEqual(session.getVisibleSkillNames(), [\"alpha\"]);\n\t\tassert.match(session.systemPrompt, /<name>alpha<\\/name>/);\n\t\tassert.doesNotMatch(session.systemPrompt, /<name>beta<\\/name>/);\n\n\t\tconst tool = session.state.tools.find((entry) => entry.name === \"Skill\");\n\t\tassert.ok(tool, \"Skill tool should remain active\");\n\t\tconst result = await tool.execute(\"call-3\", { skill: \"beta\" });\n\t\tconst text = result.content[0]?.type === \"text\" ? result.content[0].text : \"\";\n\t\tassert.match(text, /<skill name=\"beta\"/);\n\n\t\tsession.setVisibleSkillsByName(undefined);\n\t\tassert.equal(session.getVisibleSkillNames(), undefined);\n\t\tassert.match(session.systemPrompt, /<name>alpha<\\/name>/);\n\t\tassert.match(session.systemPrompt, /<name>beta<\\/name>/);\n\t});\n});\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// gsd-pi — Tool Compatibility Registry (ADR-005 Phase 2)
|
|
2
2
|
// Maps tool names to their provider compatibility metadata.
|
|
3
3
|
// Used by the model router to filter tools incompatible with the selected provider.
|
|
4
4
|
// ─── Registry State ─────────────────────────────────────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-compatibility-registry.js","sourceRoot":"","sources":["../../../src/core/tools/tool-compatibility-registry.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"tool-compatibility-registry.js","sourceRoot":"","sources":["../../../src/core/tools/tool-compatibility-registry.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,4DAA4D;AAC5D,oFAAoF;AAIpF,+EAA+E;AAE/E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;AAEtD,+EAA+E;AAC/E,6EAA6E;AAC7E,wEAAwE;AAExE,MAAM,aAAa,GAAsC;IACvD,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,EAAE,EAAE,EAAE;IACN,GAAG,EAAE,EAAE;IACP,aAAa,EAAE,EAAE;IACjB,aAAa,EAAE,EAAE;CAClB,CAAC;AAEF,4CAA4C;AAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;IAC3D,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,8EAA8E;AAC9E,wEAAwE;AAExE,MAAM,iBAAiB,GAAsB;IAC3C,cAAc,EAAE,CAAC,mBAAmB,CAAC;CACtC,CAAC;AAEF,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAgB,EAAE,aAAgC;IAC1F,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,QAAgB,EAAE,SAAsC;IACnG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,iBAAiB,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,8BAA8B;IAC5C,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3D,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC","sourcesContent":["// gsd-pi — Tool Compatibility Registry (ADR-005 Phase 2)\n// Maps tool names to their provider compatibility metadata.\n// Used by the model router to filter tools incompatible with the selected provider.\n\nimport type { ToolCompatibility } from \"../extensions/types.js\";\n\n// ─── Registry State ─────────────────────────────────────────────────────────\n\nconst registry = new Map<string, ToolCompatibility>();\n\n// ─── Built-in Tool Compatibility (universally compatible) ───────────────────\n// Built-in tools (bash, read, write, edit, grep, find, ls) produce text-only\n// results and use standard JSON Schema — compatible with all providers.\n\nconst BUILTIN_TOOLS: Record<string, ToolCompatibility> = {\n bash: {},\n read: {},\n write: {},\n edit: {},\n grep: {},\n find: {},\n ls: {},\n lsp: {},\n hashline_edit: {},\n hashline_read: {},\n};\n\n// Pre-populate registry with built-in tools\nfor (const [name, compat] of Object.entries(BUILTIN_TOOLS)) {\n registry.set(name, compat);\n}\n\n// ─── MCP Tool Defaults ─────────────────────────────────────────────────────\n// MCP tools may use complex schemas. Default to cautious compatibility.\n\nconst MCP_TOOL_DEFAULTS: ToolCompatibility = {\n schemaFeatures: [\"patternProperties\"],\n};\n\n// ─── Public API ─────────────────────────────────────────────────────────────\n\n/**\n * Register compatibility metadata for a tool.\n * Called automatically by registerTool() for extension tools that include\n * compatibility metadata in their ToolDefinition.\n */\nexport function registerToolCompatibility(toolName: string, compatibility: ToolCompatibility): void {\n registry.set(toolName, compatibility);\n}\n\n/**\n * Get compatibility metadata for a tool.\n * Returns undefined for unknown tools (treated as universally compatible\n * per ADR-005 principle: \"fail open, don't restrict without data\").\n */\nexport function getToolCompatibility(toolName: string): ToolCompatibility | undefined {\n return registry.get(toolName);\n}\n\n/**\n * Get all registered tool compatibility entries.\n */\nexport function getAllToolCompatibility(): ReadonlyMap<string, ToolCompatibility> {\n return registry;\n}\n\n/**\n * Register an MCP tool with default cautious compatibility.\n * MCP tools may use complex schemas that some providers don't support.\n */\nexport function registerMcpToolCompatibility(toolName: string, overrides?: Partial<ToolCompatibility>): void {\n registry.set(toolName, { ...MCP_TOOL_DEFAULTS, ...overrides });\n}\n\n/**\n * Clear all non-builtin entries (for testing).\n */\nexport function resetToolCompatibilityRegistry(): void {\n registry.clear();\n for (const [name, compat] of Object.entries(BUILTIN_TOOLS)) {\n registry.set(name, compat);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-target-metadata.test.js","sourceRoot":"","sources":["../../../src/core/tools/tool-target-metadata.test.ts"],"names":[],"mappings":"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","sourcesContent":["// GSD-2 - Behavior coverage for tool target metadata.\n\nimport assert from \"node:assert/strict\";\nimport { mkdirSync, mkdtempSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport test from \"node:test\";\n\nimport { createEditTool } from \"./edit.js\";\nimport { createFindTool } from \"./find.js\";\nimport { createGrepTool } from \"./grep.js\";\nimport { createLsTool } from \"./ls.js\";\nimport { createReadTool } from \"./read.js\";\nimport { createWriteTool } from \"./write.js\";\n\ntest(\"read metadata records resolved path without changing output text\", async () => {\n\tconst cwd = mkdtempSync(join(tmpdir(), \"gsd-read-target-\"));\n\ttry {\n\t\tconst filePath = join(cwd, \"fixture.txt\");\n\t\twriteFileSync(filePath, \"one\\ntwo\\nthree\\n\", \"utf8\");\n\n\t\tconst result = await createReadTool(cwd).execute(\"read-1\", {\n\t\t\tpath: \"fixture.txt\",\n\t\t\toffset: 2,\n\t\t\tlimit: 1,\n\t\t});\n\n\t\tassert.equal(result.details?.target?.resolvedPath, filePath);\n\t\tassert.deepEqual(result.details?.target?.range, { start: 2, end: 2 });\n\t\tassert.equal(result.content[0]?.type, \"text\");\n\t\tassert.match(result.content[0]?.text ?? \"\", /^two/);\n\t\tassert.equal((result.content[0]?.text ?? \"\").includes(filePath), false);\n\n\t\tconst zeroOffsetResult = await createReadTool(cwd).execute(\"read-zero-offset\", {\n\t\t\tpath: \"fixture.txt\",\n\t\t\toffset: 0,\n\t\t\tlimit: 1,\n\t\t});\n\n\t\tassert.deepEqual(zeroOffsetResult.details?.target?.range, { start: 1, end: 1 });\n\t} finally {\n\t\trmSync(cwd, { recursive: true, force: true });\n\t}\n});\n\ntest(\"write metadata records resolved path without changing output text\", async () => {\n\tconst cwd = mkdtempSync(join(tmpdir(), \"gsd-write-target-\"));\n\ttry {\n\t\tconst filePath = join(cwd, \"out.txt\");\n\t\tconst result = await createWriteTool(cwd).execute(\"write-1\", {\n\t\t\tpath: \"out.txt\",\n\t\t\tcontent: \"hello\",\n\t\t});\n\n\t\tassert.equal(result.details?.target?.resolvedPath, filePath);\n\t\tassert.equal(result.content[0]?.type, \"text\");\n\t\tassert.equal(result.content[0]?.text, \"Successfully wrote 5 bytes to out.txt\");\n\t} finally {\n\t\trmSync(cwd, { recursive: true, force: true });\n\t}\n});\n\ntest(\"edit metadata records first changed line and resolved path\", async () => {\n\tconst cwd = mkdtempSync(join(tmpdir(), \"gsd-edit-target-\"));\n\ttry {\n\t\tconst filePath = join(cwd, \"edit.txt\");\n\t\twriteFileSync(filePath, \"alpha\\nbeta\\ngamma\\n\", \"utf8\");\n\n\t\tconst result = await createEditTool(cwd).execute(\"edit-1\", {\n\t\t\tpath: \"edit.txt\",\n\t\t\toldText: \"beta\",\n\t\t\tnewText: \"delta\",\n\t\t});\n\n\t\tassert.equal(result.details?.target?.resolvedPath, filePath);\n\t\tassert.equal(result.details?.target?.line, 2);\n\t\tassert.equal(result.details?.firstChangedLine, 2);\n\t} finally {\n\t\trmSync(cwd, { recursive: true, force: true });\n\t}\n});\n\ntest(\"list and find metadata record resolved targets\", async () => {\n\tconst cwd = mkdtempSync(join(tmpdir(), \"gsd-search-target-\"));\n\ttry {\n\t\tconst srcPath = join(cwd, \"src\");\n\t\tconst filePath = join(srcPath, \"needle.txt\");\n\t\tmkdirSync(srcPath);\n\t\twriteFileSync(filePath, \"needle\\n\", \"utf8\");\n\n\t\tconst lsResult = await createLsTool(cwd).execute(\"ls-1\", { path: \"src\" });\n\t\tassert.equal(lsResult.details?.target?.resolvedPath, srcPath);\n\n\t\tconst findResult = await createFindTool(cwd, {\n\t\t\toperations: {\n\t\t\t\texists: () => true,\n\t\t\t\tglob: async () => [filePath],\n\t\t\t},\n\t\t}).execute(\"find-1\", { path: \"src\", pattern: \"needle\" });\n\t\tassert.equal(findResult.details?.target?.resolvedPath, srcPath);\n\t\tassert.equal(findResult.details?.target?.pattern, \"needle\");\n\t} finally {\n\t\trmSync(cwd, { recursive: true, force: true });\n\t}\n});\n\ntest(\"grep metadata records resolved search target\", async () => {\n\tconst cwd = mkdtempSync(join(tmpdir(), \"gsd-grep-target-\"));\n\ttry {\n\t\tconst srcPath = join(cwd, \"src\");\n\t\tmkdirSync(srcPath);\n\t\twriteFileSync(join(srcPath, \"needle.txt\"), \"needle\\n\", \"utf8\");\n\n\t\tconst result = await createGrepTool(cwd).execute(\"grep-1\", {\n\t\t\tpath: \"src\",\n\t\t\tpattern: \"needle\",\n\t\t\tliteral: true,\n\t\t});\n\n\t\tassert.equal(result.details?.target?.resolvedPath, srcPath);\n\t\tassert.equal(result.details?.target?.pattern, \"needle\");\n\t\tassert.equal(result.content[0]?.type, \"text\");\n\t\tassert.match(result.content[0]?.text ?? \"\", /needle\\.txt:1: needle/);\n\t} finally {\n\t\trmSync(cwd, { recursive: true, force: true });\n\t}\n});\n"]}
|
|
1
|
+
{"version":3,"file":"tool-target-metadata.test.js","sourceRoot":"","sources":["../../../src/core/tools/tool-target-metadata.test.ts"],"names":[],"mappings":"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","sourcesContent":["// gsd-pi - Behavior coverage for tool target metadata.\n\nimport assert from \"node:assert/strict\";\nimport { mkdirSync, mkdtempSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport test from \"node:test\";\n\nimport { createEditTool } from \"./edit.js\";\nimport { createFindTool } from \"./find.js\";\nimport { createGrepTool } from \"./grep.js\";\nimport { createLsTool } from \"./ls.js\";\nimport { createReadTool } from \"./read.js\";\nimport { createWriteTool } from \"./write.js\";\n\ntest(\"read metadata records resolved path without changing output text\", async () => {\n\tconst cwd = mkdtempSync(join(tmpdir(), \"gsd-read-target-\"));\n\ttry {\n\t\tconst filePath = join(cwd, \"fixture.txt\");\n\t\twriteFileSync(filePath, \"one\\ntwo\\nthree\\n\", \"utf8\");\n\n\t\tconst result = await createReadTool(cwd).execute(\"read-1\", {\n\t\t\tpath: \"fixture.txt\",\n\t\t\toffset: 2,\n\t\t\tlimit: 1,\n\t\t});\n\n\t\tassert.equal(result.details?.target?.resolvedPath, filePath);\n\t\tassert.deepEqual(result.details?.target?.range, { start: 2, end: 2 });\n\t\tassert.equal(result.content[0]?.type, \"text\");\n\t\tassert.match(result.content[0]?.text ?? \"\", /^two/);\n\t\tassert.equal((result.content[0]?.text ?? \"\").includes(filePath), false);\n\n\t\tconst zeroOffsetResult = await createReadTool(cwd).execute(\"read-zero-offset\", {\n\t\t\tpath: \"fixture.txt\",\n\t\t\toffset: 0,\n\t\t\tlimit: 1,\n\t\t});\n\n\t\tassert.deepEqual(zeroOffsetResult.details?.target?.range, { start: 1, end: 1 });\n\t} finally {\n\t\trmSync(cwd, { recursive: true, force: true });\n\t}\n});\n\ntest(\"write metadata records resolved path without changing output text\", async () => {\n\tconst cwd = mkdtempSync(join(tmpdir(), \"gsd-write-target-\"));\n\ttry {\n\t\tconst filePath = join(cwd, \"out.txt\");\n\t\tconst result = await createWriteTool(cwd).execute(\"write-1\", {\n\t\t\tpath: \"out.txt\",\n\t\t\tcontent: \"hello\",\n\t\t});\n\n\t\tassert.equal(result.details?.target?.resolvedPath, filePath);\n\t\tassert.equal(result.content[0]?.type, \"text\");\n\t\tassert.equal(result.content[0]?.text, \"Successfully wrote 5 bytes to out.txt\");\n\t} finally {\n\t\trmSync(cwd, { recursive: true, force: true });\n\t}\n});\n\ntest(\"edit metadata records first changed line and resolved path\", async () => {\n\tconst cwd = mkdtempSync(join(tmpdir(), \"gsd-edit-target-\"));\n\ttry {\n\t\tconst filePath = join(cwd, \"edit.txt\");\n\t\twriteFileSync(filePath, \"alpha\\nbeta\\ngamma\\n\", \"utf8\");\n\n\t\tconst result = await createEditTool(cwd).execute(\"edit-1\", {\n\t\t\tpath: \"edit.txt\",\n\t\t\toldText: \"beta\",\n\t\t\tnewText: \"delta\",\n\t\t});\n\n\t\tassert.equal(result.details?.target?.resolvedPath, filePath);\n\t\tassert.equal(result.details?.target?.line, 2);\n\t\tassert.equal(result.details?.firstChangedLine, 2);\n\t} finally {\n\t\trmSync(cwd, { recursive: true, force: true });\n\t}\n});\n\ntest(\"list and find metadata record resolved targets\", async () => {\n\tconst cwd = mkdtempSync(join(tmpdir(), \"gsd-search-target-\"));\n\ttry {\n\t\tconst srcPath = join(cwd, \"src\");\n\t\tconst filePath = join(srcPath, \"needle.txt\");\n\t\tmkdirSync(srcPath);\n\t\twriteFileSync(filePath, \"needle\\n\", \"utf8\");\n\n\t\tconst lsResult = await createLsTool(cwd).execute(\"ls-1\", { path: \"src\" });\n\t\tassert.equal(lsResult.details?.target?.resolvedPath, srcPath);\n\n\t\tconst findResult = await createFindTool(cwd, {\n\t\t\toperations: {\n\t\t\t\texists: () => true,\n\t\t\t\tglob: async () => [filePath],\n\t\t\t},\n\t\t}).execute(\"find-1\", { path: \"src\", pattern: \"needle\" });\n\t\tassert.equal(findResult.details?.target?.resolvedPath, srcPath);\n\t\tassert.equal(findResult.details?.target?.pattern, \"needle\");\n\t} finally {\n\t\trmSync(cwd, { recursive: true, force: true });\n\t}\n});\n\ntest(\"grep metadata records resolved search target\", async () => {\n\tconst cwd = mkdtempSync(join(tmpdir(), \"gsd-grep-target-\"));\n\ttry {\n\t\tconst srcPath = join(cwd, \"src\");\n\t\tmkdirSync(srcPath);\n\t\twriteFileSync(join(srcPath, \"needle.txt\"), \"needle\\n\", \"utf8\");\n\n\t\tconst result = await createGrepTool(cwd).execute(\"grep-1\", {\n\t\t\tpath: \"src\",\n\t\t\tpattern: \"needle\",\n\t\t\tliteral: true,\n\t\t});\n\n\t\tassert.equal(result.details?.target?.resolvedPath, srcPath);\n\t\tassert.equal(result.details?.target?.pattern, \"needle\");\n\t\tassert.equal(result.content[0]?.type, \"text\");\n\t\tassert.match(result.content[0]?.text ?? \"\", /needle\\.txt:1: needle/);\n\t} finally {\n\t\trmSync(cwd, { recursive: true, force: true });\n\t}\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-target.js","sourceRoot":"","sources":["../../../src/core/tools/tool-target.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"tool-target.js","sourceRoot":"","sources":["../../../src/core/tools/tool-target.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAsB7D,MAAM,UAAU,gBAAgB,CAAC,MAA0B;IAC1D,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB,CACnC,SAAiB,EACjB,YAAoB,EACpB,MAAe,EACf,KAAc;IAEd,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;IAEjD,OAAO,gBAAgB,CAAC;QACvB,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM;QACd,SAAS;QACT,YAAY;QACZ,KAAK,EACJ,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;YAC1C,CAAC,CAAC;gBACA,KAAK,EAAE,eAAe;gBACtB,GAAG,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;aAC/E;YACF,CAAC,CAAC,SAAS;KACb,CAAC,CAAC;AACJ,CAAC","sourcesContent":["// gsd-pi - Shared target metadata for tool output rendering.\n\nexport type ToolTargetKind = \"file\" | \"directory\" | \"search\" | \"command\";\n\nexport type ToolTargetAction = \"read\" | \"write\" | \"edit\" | \"list\" | \"find\" | \"grep\" | \"bash\";\n\nexport interface ToolTargetRange {\n\tstart: number;\n\tend?: number;\n}\n\nexport interface ToolTargetMetadata {\n\tkind: ToolTargetKind;\n\taction: ToolTargetAction;\n\tinputPath?: string;\n\tresolvedPath?: string;\n\tpattern?: string;\n\tglob?: string;\n\tline?: number;\n\trange?: ToolTargetRange;\n}\n\nexport function createToolTarget(target: ToolTargetMetadata): ToolTargetMetadata {\n\treturn target;\n}\n\nexport function createReadFileTarget(\n\tinputPath: string,\n\tresolvedPath: string,\n\toffset?: number,\n\tlimit?: number,\n): ToolTargetMetadata {\n\tconst effectiveOffset = Math.max(1, offset ?? 1);\n\n\treturn createToolTarget({\n\t\tkind: \"file\",\n\t\taction: \"read\",\n\t\tinputPath,\n\t\tresolvedPath,\n\t\trange:\n\t\t\toffset !== undefined || limit !== undefined\n\t\t\t\t? {\n\t\t\t\t\t\tstart: effectiveOffset,\n\t\t\t\t\t\tend: limit !== undefined ? effectiveOffset + Math.max(0, limit - 1) : undefined,\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t});\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistant-message-design.test.js","sourceRoot":"","sources":["../../../../../src/modes/interactive/components/__tests__/assistant-message-design.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Project/App: GSD-2\n// File Purpose: Visual contract tests for the assistant message open surface.\n\nimport { describe, test } from \"node:test\";\nimport assert from \"node:assert/strict\";\nimport stripAnsi from \"strip-ansi\";\nimport type { AssistantMessage } from \"@gsd/pi-ai\";\n\nimport { initTheme } from \"../../theme/theme.js\";\nimport { AssistantMessageComponent } from \"../assistant-message.js\";\nimport { formatTimestamp } from \"../timestamp.js\";\nimport { renderAssistantRail } from \"../transcript-design.js\";\n\ninitTheme(\"dark\", false);\n\ndescribe(\"AssistantMessageComponent open surface\", () => {\n\ttest(\"renders assistant content as a copy-clean open surface\", () => {\n\t\tconst message = {\n\t\t\tid: \"m1\",\n\t\t\trole: \"assistant\",\n\t\t\tprovider: \"test\",\n\t\t\tmodel: \"gpt-test\",\n\t\t\ttimestamp: 1,\n\t\t\tcontent: [{ type: \"text\", text: \"I will update the renderer and run verification.\" }],\n\t\t} as unknown as AssistantMessage;\n\n\t\tconst component = new AssistantMessageComponent(message, true);\n\t\tconst plain = component.render(80).map((line) => stripAnsi(line));\n\t\tconst joined = plain.join(\"\\n\");\n\n\t\tassert.match(joined, /GSD/);\n\t\tassert.match(joined, /gpt-test/);\n\t\tassert.match(joined, /update the renderer/);\n\t\tassert.doesNotMatch(joined, /╰──────╮/);\n\t\tassert.match(joined, /╭─ GSD/);\n\t\tassert.match(joined, /╰─/);\n\t\tassert.doesNotMatch(joined, /[│┃]/, \"assistant content lines must not use side rail glyphs\");\n\t\t// A rounded titled top rule carries the GSD label.\n\t\tassert.ok(\n\t\t\tplain.some((line) => line.includes(\"GSD\") && line.includes(\"─\")),\n\t\t\t`expected a titled top rule:\\n${joined}`,\n\t\t);\n\t\tconst topRuleIndex = plain.findIndex((line) => line.includes(\"GSD\") && line.includes(\"─\"));\n\t\tconst contentIndex = plain.findIndex((line) => line.includes(\"update the renderer\"));\n\t\tassert.ok(contentIndex > topRuleIndex + 1, `expected a breathing row before content:\\n${joined}`);\n\t\tassert.equal(plain[contentIndex + 1]?.trim(), \"\", `expected a breathing row after content:\\n${joined}`);\n\t\tassert.ok(plain[contentIndex].startsWith(\" \"), `assistant content should keep inner padding:\\n${joined}`);\n\t\tassert.doesNotMatch(\n\t\t\tplain[contentIndex],\n\t\t\t/^ {10,}/,\n\t\t\t`assistant content should not preserve the old outer rail indent:\\n${joined}`,\n\t\t);\n\t\tassert.equal(plain[contentIndex].length, 80, `assistant content row should fill the bubble background:\\n${joined}`);\n\t\tassert.equal(plain[contentIndex + 1]?.length, 80, `assistant breathing row should fill the bubble background:\\n${joined}`);\n\t\tassert.doesNotMatch(plain[contentIndex], /[│┃╭╮╰╯]/, `content line must stay copy-clean:\\n${joined}`);\n\t});\n\n\ttest(\"can render a connector only when explicitly requested\", () => {\n\t\tconst standalone = renderAssistantRail([\"Standalone\"], 80, { label: \"GSD\" })\n\t\t\t.map((line) => stripAnsi(line))\n\t\t\t.join(\"\\n\");\n\t\tconst connected = renderAssistantRail([\"Connected\"], 80, { label: \"GSD\", connected: true })\n\t\t\t.map((line) => stripAnsi(line))\n\t\t\t.join(\"\\n\");\n\n\t\tassert.doesNotMatch(standalone, /╰──────╮/);\n\t\tassert.match(connected, /╰──────╮/);\n\t});\n\n\ttest(\"renders metadata for a zero timestamp\", () => {\n\t\tconst message = {\n\t\t\tid: \"m1\",\n\t\t\trole: \"assistant\",\n\t\t\tprovider: \"test\",\n\t\t\tmodel: \"gpt-test\",\n\t\t\ttimestamp: 0,\n\t\t\tcontent: [{ type: \"text\", text: \"Finished.\" }],\n\t\t} as unknown as AssistantMessage;\n\n\t\tconst component = new AssistantMessageComponent(message, true);\n\t\tconst joined = component.render(80).map((line) => stripAnsi(line)).join(\"\\n\");\n\n\t\tassert.match(joined, new RegExp(formatTimestamp(0)));\n\t});\n\n\ttest(\"reuses rendered output until assistant message state changes\", () => {\n\t\tconst message = {\n\t\t\tid: \"m1\",\n\t\t\trole: \"assistant\",\n\t\t\tprovider: \"test\",\n\t\t\tmodel: \"gpt-test\",\n\t\t\ttimestamp: 1,\n\t\t\tcontent: [{ type: \"text\", text: \"Cached assistant content.\" }],\n\t\t} as unknown as AssistantMessage;\n\t\tconst component = new AssistantMessageComponent(message, true);\n\n\t\tconst first = component.render(80);\n\t\tassert.equal(component.render(80), first);\n\n\t\tcomponent.updateContent({\n\t\t\t...message,\n\t\t\tcontent: [{ type: \"text\", text: \"Updated assistant content.\" }],\n\t\t} as unknown as AssistantMessage);\n\t\tconst updated = component.render(80);\n\n\t\tassert.notEqual(updated, first);\n\t\tassert.match(updated.map((line) => stripAnsi(line)).join(\"\\n\"), /Updated assistant content/);\n\t});\n\n\ttest(\"rebuilds the current assistant message when thinking visibility changes\", () => {\n\t\tconst message = {\n\t\t\tid: \"m1\",\n\t\t\trole: \"assistant\",\n\t\t\tprovider: \"test\",\n\t\t\tmodel: \"gpt-test\",\n\t\t\tcontent: [{ type: \"thinking\", thinking: \"Private reasoning trace.\" }],\n\t\t} as unknown as AssistantMessage;\n\t\tconst component = new AssistantMessageComponent(message, true);\n\n\t\tassert.match(component.render(80).map((line) => stripAnsi(line)).join(\"\\n\"), /Thinking\\.\\.\\./);\n\n\t\tcomponent.setHideThinkingBlock(false);\n\t\tconst expandedThinking = component.render(80).map((line) => stripAnsi(line)).join(\"\\n\");\n\n\t\tassert.match(expandedThinking, /Private reasoning trace/);\n\t\tassert.doesNotMatch(expandedThinking, /Thinking\\.\\.\\./);\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"assistant-message-design.test.js","sourceRoot":"","sources":["../../../../../src/modes/interactive/components/__tests__/assistant-message-design.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Project/App: gsd-pi\n// File Purpose: Visual contract tests for the assistant message open surface.\n\nimport { describe, test } from \"node:test\";\nimport assert from \"node:assert/strict\";\nimport stripAnsi from \"strip-ansi\";\nimport type { AssistantMessage } from \"@gsd/pi-ai\";\n\nimport { initTheme } from \"../../theme/theme.js\";\nimport { AssistantMessageComponent } from \"../assistant-message.js\";\nimport { formatTimestamp } from \"../timestamp.js\";\nimport { renderAssistantRail } from \"../transcript-design.js\";\n\ninitTheme(\"dark\", false);\n\ndescribe(\"AssistantMessageComponent open surface\", () => {\n\ttest(\"renders assistant content as a copy-clean open surface\", () => {\n\t\tconst message = {\n\t\t\tid: \"m1\",\n\t\t\trole: \"assistant\",\n\t\t\tprovider: \"test\",\n\t\t\tmodel: \"gpt-test\",\n\t\t\ttimestamp: 1,\n\t\t\tcontent: [{ type: \"text\", text: \"I will update the renderer and run verification.\" }],\n\t\t} as unknown as AssistantMessage;\n\n\t\tconst component = new AssistantMessageComponent(message, true);\n\t\tconst plain = component.render(80).map((line) => stripAnsi(line));\n\t\tconst joined = plain.join(\"\\n\");\n\n\t\tassert.match(joined, /GSD/);\n\t\tassert.match(joined, /gpt-test/);\n\t\tassert.match(joined, /update the renderer/);\n\t\tassert.doesNotMatch(joined, /╰──────╮/);\n\t\tassert.match(joined, /╭─ GSD/);\n\t\tassert.match(joined, /╰─/);\n\t\tassert.doesNotMatch(joined, /[│┃]/, \"assistant content lines must not use side rail glyphs\");\n\t\t// A rounded titled top rule carries the GSD label.\n\t\tassert.ok(\n\t\t\tplain.some((line) => line.includes(\"GSD\") && line.includes(\"─\")),\n\t\t\t`expected a titled top rule:\\n${joined}`,\n\t\t);\n\t\tconst topRuleIndex = plain.findIndex((line) => line.includes(\"GSD\") && line.includes(\"─\"));\n\t\tconst contentIndex = plain.findIndex((line) => line.includes(\"update the renderer\"));\n\t\tassert.ok(contentIndex > topRuleIndex + 1, `expected a breathing row before content:\\n${joined}`);\n\t\tassert.equal(plain[contentIndex + 1]?.trim(), \"\", `expected a breathing row after content:\\n${joined}`);\n\t\tassert.ok(plain[contentIndex].startsWith(\" \"), `assistant content should keep inner padding:\\n${joined}`);\n\t\tassert.doesNotMatch(\n\t\t\tplain[contentIndex],\n\t\t\t/^ {10,}/,\n\t\t\t`assistant content should not preserve the old outer rail indent:\\n${joined}`,\n\t\t);\n\t\tassert.equal(plain[contentIndex].length, 80, `assistant content row should fill the bubble background:\\n${joined}`);\n\t\tassert.equal(plain[contentIndex + 1]?.length, 80, `assistant breathing row should fill the bubble background:\\n${joined}`);\n\t\tassert.doesNotMatch(plain[contentIndex], /[│┃╭╮╰╯]/, `content line must stay copy-clean:\\n${joined}`);\n\t});\n\n\ttest(\"can render a connector only when explicitly requested\", () => {\n\t\tconst standalone = renderAssistantRail([\"Standalone\"], 80, { label: \"GSD\" })\n\t\t\t.map((line) => stripAnsi(line))\n\t\t\t.join(\"\\n\");\n\t\tconst connected = renderAssistantRail([\"Connected\"], 80, { label: \"GSD\", connected: true })\n\t\t\t.map((line) => stripAnsi(line))\n\t\t\t.join(\"\\n\");\n\n\t\tassert.doesNotMatch(standalone, /╰──────╮/);\n\t\tassert.match(connected, /╰──────╮/);\n\t});\n\n\ttest(\"renders metadata for a zero timestamp\", () => {\n\t\tconst message = {\n\t\t\tid: \"m1\",\n\t\t\trole: \"assistant\",\n\t\t\tprovider: \"test\",\n\t\t\tmodel: \"gpt-test\",\n\t\t\ttimestamp: 0,\n\t\t\tcontent: [{ type: \"text\", text: \"Finished.\" }],\n\t\t} as unknown as AssistantMessage;\n\n\t\tconst component = new AssistantMessageComponent(message, true);\n\t\tconst joined = component.render(80).map((line) => stripAnsi(line)).join(\"\\n\");\n\n\t\tassert.match(joined, new RegExp(formatTimestamp(0)));\n\t});\n\n\ttest(\"reuses rendered output until assistant message state changes\", () => {\n\t\tconst message = {\n\t\t\tid: \"m1\",\n\t\t\trole: \"assistant\",\n\t\t\tprovider: \"test\",\n\t\t\tmodel: \"gpt-test\",\n\t\t\ttimestamp: 1,\n\t\t\tcontent: [{ type: \"text\", text: \"Cached assistant content.\" }],\n\t\t} as unknown as AssistantMessage;\n\t\tconst component = new AssistantMessageComponent(message, true);\n\n\t\tconst first = component.render(80);\n\t\tassert.equal(component.render(80), first);\n\n\t\tcomponent.updateContent({\n\t\t\t...message,\n\t\t\tcontent: [{ type: \"text\", text: \"Updated assistant content.\" }],\n\t\t} as unknown as AssistantMessage);\n\t\tconst updated = component.render(80);\n\n\t\tassert.notEqual(updated, first);\n\t\tassert.match(updated.map((line) => stripAnsi(line)).join(\"\\n\"), /Updated assistant content/);\n\t});\n\n\ttest(\"rebuilds the current assistant message when thinking visibility changes\", () => {\n\t\tconst message = {\n\t\t\tid: \"m1\",\n\t\t\trole: \"assistant\",\n\t\t\tprovider: \"test\",\n\t\t\tmodel: \"gpt-test\",\n\t\t\tcontent: [{ type: \"thinking\", thinking: \"Private reasoning trace.\" }],\n\t\t} as unknown as AssistantMessage;\n\t\tconst component = new AssistantMessageComponent(message, true);\n\n\t\tassert.match(component.render(80).map((line) => stripAnsi(line)).join(\"\\n\"), /Thinking\\.\\.\\./);\n\n\t\tcomponent.setHideThinkingBlock(false);\n\t\tconst expandedThinking = component.render(80).map((line) => stripAnsi(line)).join(\"\\n\");\n\n\t\tassert.match(expandedThinking, /Private reasoning trace/);\n\t\tassert.doesNotMatch(expandedThinking, /Thinking\\.\\.\\./);\n\t});\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-frame-compaction-tone.test.js","sourceRoot":"","sources":["../../../../../src/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"chat-frame-compaction-tone.test.js","sourceRoot":"","sources":["../../../../../src/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.ts"],"names":[],"mappings":"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","sourcesContent":["// gsd-pi TUI Tests - Chat frame card visual contract coverage.\nimport { test, describe } from \"node:test\";\nimport assert from \"node:assert/strict\";\nimport stripAnsi from \"strip-ansi\";\nimport { renderChatFrame } from \"../transcript-design.js\";\nimport { initTheme } from \"../../theme/theme.js\";\n\ninitTheme(\"dark\", false);\n\n// renderChatFrame renders compaction notices and skill invocations as a\n// copy-clean \"open\" surface (ADR-019): a titled top rule, body lines with\n// no border column, and a closing rule. The compaction tone uses the purple\n// `customMessageLabel` color so it stays visually distinct from conversation\n// turns.\n\ndescribe(\"renderChatFrame — compaction tone\", () => {\n\ttest(\"renders a titled rule and copy-clean body lines\", () => {\n\t\tconst lines = renderChatFrame(\n\t\t\t[\"Compacted from 1,224,262 tokens (ctrl+o to expand)\"],\n\t\t\t60,\n\t\t\t{\n\t\t\t\tlabel: \"compaction\",\n\t\t\t\ttone: \"compaction\",\n\t\t\t\ttimestampFormat: \"date-time-iso\",\n\t\t\t\tshowTimestamp: false,\n\t\t\t},\n\t\t);\n\n\t\t// Structure: titled top rule, body line(s), closing rule.\n\t\tassert.ok(lines.length >= 3, `expected at least 3 frame lines, got ${lines.length}`);\n\n\t\tconst plain = lines.map((line) => stripAnsi(line));\n\n\t\t// Top rule carries the label inline and is all rule/title characters.\n\t\tassert.ok(\n\t\t\tplain[0].includes(\"compaction\"),\n\t\t\t`expected top rule to contain \"compaction\", got ${JSON.stringify(plain[0])}`,\n\t\t);\n\t\tassert.ok(!plain[0].includes(\"•\"), `header should not render a bullet prefix, got ${JSON.stringify(plain[0])}`);\n\t\t// Closing rule is a solid horizontal bar.\n\t\tassert.match(plain[plain.length - 1], /^─+$/, \"last line should be the solid closing rule\");\n\n\t\t// Body lines are copy-clean — no border column, no leading glyph — so\n\t\t// a terminal selection copies only the content.\n\t\tfor (const body of plain.slice(1, -1)) {\n\t\t\tassert.ok(!body.startsWith(\"│\"), `body line must not start with │: ${JSON.stringify(body)}`);\n\t\t\tassert.ok(!body.startsWith(\"┃\"), `body line must not start with ┃: ${JSON.stringify(body)}`);\n\t\t}\n\t\tassert.ok(\n\t\t\tplain.slice(1, -1).some((body) => body.includes(\"Compacted from 1,224,262 tokens\")),\n\t\t\t\"a body line should include the original content\",\n\t\t);\n\t});\n\n\ttest(\"does not render a right-aligned timestamp when showTimestamp is false\", () => {\n\t\tconst lines = renderChatFrame([\"body\"], 60, {\n\t\t\tlabel: \"compaction\",\n\t\t\ttone: \"compaction\",\n\t\t\ttimestamp: Date.now(),\n\t\t\ttimestampFormat: \"date-time-iso\",\n\t\t\tshowTimestamp: false,\n\t\t});\n\n\t\t// No four-digit year should appear anywhere in the frame.\n\t\tconst joined = lines.map((line) => stripAnsi(line)).join(\"\\n\");\n\t\tassert.ok(\n\t\t\t!/\\b20\\d{2}\\b/.test(joined),\n\t\t\t`timestamp should be suppressed when showTimestamp=false, got ${JSON.stringify(joined)}`,\n\t\t);\n\t});\n\n\ttest(\"emits ANSI color codes distinct from the assistant tone\", () => {\n\t\tconst assistantFrame = renderChatFrame([\"body\"], 60, {\n\t\t\tlabel: \"claude\",\n\t\t\ttone: \"assistant\",\n\t\t\ttimestampFormat: \"date-time-iso\",\n\t\t\tshowTimestamp: false,\n\t\t}).join(\"\\n\");\n\n\t\tconst compactionFrame = renderChatFrame([\"body\"], 60, {\n\t\t\tlabel: \"compaction\",\n\t\t\ttone: \"compaction\",\n\t\t\ttimestampFormat: \"date-time-iso\",\n\t\t\tshowTimestamp: false,\n\t\t}).join(\"\\n\");\n\n\t\t// Different tones map to different border/label colors.\n\t\tassert.ok(\n\t\t\tassistantFrame !== compactionFrame,\n\t\t\t\"compaction tone must produce a different styled output than assistant tone\",\n\t\t);\n\t});\n});\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// gsd-pi + packages/pi-coding-agent/src/modes/interactive/components/__tests__/collapsible-message.test.ts - Collapsible message behavior tests.
|
|
2
2
|
import assert from "node:assert/strict";
|
|
3
3
|
import { describe, test } from "node:test";
|
|
4
4
|
import stripAnsi from "strip-ansi";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collapsible-message.test.js","sourceRoot":"","sources":["../../../../../src/modes/interactive/components/__tests__/collapsible-message.test.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"collapsible-message.test.js","sourceRoot":"","sources":["../../../../../src/modes/interactive/components/__tests__/collapsible-message.test.ts"],"names":[],"mappings":"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","sourcesContent":["// gsd-pi + packages/pi-coding-agent/src/modes/interactive/components/__tests__/collapsible-message.test.ts - Collapsible message behavior tests.\n\nimport assert from \"node:assert/strict\";\nimport { describe, test } from \"node:test\";\nimport stripAnsi from \"strip-ansi\";\nimport { Text } from \"@gsd/pi-tui\";\nimport type { CustomMessage } from \"../../../../core/messages.js\";\nimport { initTheme } from \"../../theme/theme.js\";\nimport { BranchSummaryMessageComponent } from \"../branch-summary-message.js\";\nimport { CompactionSummaryMessageComponent } from \"../compaction-summary-message.js\";\nimport { CustomMessageComponent } from \"../custom-message.js\";\nimport { SkillInvocationMessageComponent } from \"../skill-invocation-message.js\";\n\ninitTheme(\"dark\", false);\n\nfunction plain(component: { render(width: number): string[] }): string {\n\treturn component.render(80).map((line) => stripAnsi(line)).join(\"\\n\");\n}\n\ndescribe(\"collapsible message components\", () => {\n\ttest(\"passes expanded state through custom message renderers\", () => {\n\t\tconst message: CustomMessage = {\n\t\t\trole: \"custom\",\n\t\t\tcustomType: \"demo\",\n\t\t\tcontent: \"fallback content\",\n\t\t\tdisplay: true,\n\t\t\ttimestamp: 1,\n\t\t};\n\t\tconst component = new CustomMessageComponent(message, (_message, options) => {\n\t\t\treturn new Text(options.expanded ? \"expanded custom content\" : \"collapsed custom content\", 0, 0);\n\t\t});\n\n\t\tassert.match(plain(component), /collapsed custom content/);\n\t\tassert.doesNotMatch(plain(component), /expanded custom content/);\n\n\t\tcomponent.setExpanded(true);\n\t\tcomponent.invalidate();\n\n\t\tassert.match(plain(component), /expanded custom content/);\n\t\tassert.doesNotMatch(plain(component), /collapsed custom content/);\n\t});\n\n\ttest(\"toggles compaction summaries without losing expanded state on invalidate\", () => {\n\t\tconst component = new CompactionSummaryMessageComponent({\n\t\t\trole: \"compactionSummary\",\n\t\t\tsummary: \"Detailed compacted context survives here.\",\n\t\t\ttokensBefore: 1234,\n\t\t\ttimestamp: 1,\n\t\t});\n\n\t\tassert.match(plain(component), /Compacted from 1,234 tokens/);\n\t\tassert.doesNotMatch(plain(component), /Detailed compacted context/);\n\n\t\tcomponent.setExpanded(true);\n\t\tcomponent.invalidate();\n\n\t\tassert.match(plain(component), /Detailed compacted context survives here/);\n\t});\n\n\ttest(\"reuses framed compaction renders until collapsed state changes\", () => {\n\t\tconst component = new CompactionSummaryMessageComponent({\n\t\t\trole: \"compactionSummary\",\n\t\t\tsummary: \"Detailed compacted context survives here.\",\n\t\t\ttokensBefore: 1234,\n\t\t\ttimestamp: 1,\n\t\t});\n\n\t\tconst collapsed = component.render(80);\n\t\tassert.equal(component.render(80), collapsed);\n\n\t\tcomponent.setExpanded(true);\n\t\tconst expanded = component.render(80);\n\n\t\tassert.notEqual(expanded, collapsed);\n\t\tassert.match(expanded.map((line) => stripAnsi(line)).join(\"\\n\"), /Detailed compacted context survives here/);\n\t});\n\n\ttest(\"toggles skill invocations without losing expanded state on invalidate\", () => {\n\t\tconst component = new SkillInvocationMessageComponent({\n\t\t\tname: \"review\",\n\t\t\tlocation: \"project\",\n\t\t\tcontent: \"Use the project review checklist.\",\n\t\t\tuserMessage: undefined,\n\t\t});\n\n\t\tassert.match(plain(component), /skill - review/);\n\t\tassert.doesNotMatch(plain(component), /project review checklist/);\n\n\t\tcomponent.setExpanded(true);\n\t\tcomponent.invalidate();\n\n\t\tassert.match(plain(component), /project review checklist/);\n\t});\n\n\ttest(\"toggles branch summaries without changing the collapsed surface\", () => {\n\t\tconst component = new BranchSummaryMessageComponent({\n\t\t\trole: \"branchSummary\",\n\t\t\tsummary: \"Branch detail line from the previous path.\",\n\t\t\tfromId: \"branch-1\",\n\t\t\ttimestamp: 1,\n\t\t});\n\n\t\tassert.match(plain(component), /Branch summary/);\n\t\tassert.doesNotMatch(plain(component), /Branch detail line/);\n\n\t\tcomponent.setExpanded(true);\n\t\tcomponent.invalidate();\n\n\t\tassert.match(plain(component), /Branch detail line from the previous path/);\n\t});\n});\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// gsd-pi — Provider display name + auth badge tests
|
|
2
2
|
import { test, describe } from "node:test";
|
|
3
3
|
import assert from "node:assert/strict";
|
|
4
4
|
import { providerAuthBadge, providerDisplayName } from "../model-selector.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-display-name.test.js","sourceRoot":"","sources":["../../../../../src/modes/interactive/components/__tests__/provider-display-name.test.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"provider-display-name.test.js","sourceRoot":"","sources":["../../../../../src/modes/interactive/components/__tests__/provider-display-name.test.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE9E,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACpC,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;QAC5D,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,CAAC;QACtE,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["// gsd-pi — Provider display name + auth badge tests\nimport { test, describe } from \"node:test\";\nimport assert from \"node:assert/strict\";\nimport { providerAuthBadge, providerDisplayName } from \"../model-selector.js\";\n\ndescribe(\"providerDisplayName\", () => {\n\ttest(\"passes providers through unchanged\", () => {\n\t\tassert.equal(providerDisplayName(\"anthropic\"), \"anthropic\");\n\t\tassert.equal(providerDisplayName(\"claude-code\"), \"claude-code\");\n\t\tassert.equal(providerDisplayName(\"openai\"), \"openai\");\n\t\tassert.equal(providerDisplayName(\"bedrock\"), \"bedrock\");\n\t\tassert.equal(providerDisplayName(\"github-copilot\"), \"github-copilot\");\n\t\tassert.equal(providerDisplayName(\"openrouter\"), \"openrouter\");\n\t});\n});\n\ndescribe(\"providerAuthBadge\", () => {\n\ttest(\"returns human-readable labels for each auth mode\", () => {\n\t\tassert.equal(providerAuthBadge(\"apiKey\"), \"API key\");\n\t\tassert.equal(providerAuthBadge(\"oauth\"), \"OAuth\");\n\t\tassert.equal(providerAuthBadge(\"externalCli\"), \"CLI\");\n\t});\n\n\ttest(\"returns empty string for 'none' and undefined\", () => {\n\t\tassert.equal(providerAuthBadge(\"none\"), \"\");\n\t\tassert.equal(providerAuthBadge(undefined), \"\");\n\t});\n});\n"]}
|