gsd-pi 2.75.0-dev.063e5a3 → 2.75.0-dev.fd2382b9f
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 +186 -149
- package/dist/claude-cli-check.d.ts +10 -0
- package/dist/claude-cli-check.js +13 -3
- package/dist/headless-events.d.ts +1 -1
- package/dist/headless-events.js +5 -2
- package/dist/headless.js +5 -6
- package/dist/loader.js +0 -0
- package/dist/onboarding.js +39 -14
- package/dist/resources/extensions/ask-user-questions.js +17 -5
- package/dist/resources/extensions/claude-code-cli/models.js +9 -0
- package/dist/resources/extensions/claude-code-cli/readiness.js +12 -2
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +76 -4
- package/dist/resources/extensions/gsd/auto/detect-stuck.js +9 -0
- package/dist/resources/extensions/gsd/auto/loop.js +67 -4
- package/dist/resources/extensions/gsd/auto/phases.js +70 -47
- package/dist/resources/extensions/gsd/auto/resolve.js +1 -1
- package/dist/resources/extensions/gsd/auto/run-unit.js +10 -1
- package/dist/resources/extensions/gsd/auto/session.js +5 -0
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +20 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +15 -7
- package/dist/resources/extensions/gsd/auto-dispatch.js +112 -6
- package/dist/resources/extensions/gsd/auto-loop.js +1 -1
- package/dist/resources/extensions/gsd/auto-model-selection.js +10 -2
- package/dist/resources/extensions/gsd/auto-post-unit.js +9 -7
- package/dist/resources/extensions/gsd/auto-prompts.js +151 -37
- package/dist/resources/extensions/gsd/auto-recovery.js +57 -0
- package/dist/resources/extensions/gsd/auto-start.js +5 -3
- package/dist/resources/extensions/gsd/auto-verification.js +3 -3
- package/dist/resources/extensions/gsd/auto-worktree.js +55 -1
- package/dist/resources/extensions/gsd/auto.js +50 -25
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +8 -21
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +22 -4
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +29 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +22 -0
- package/dist/resources/extensions/gsd/commands/catalog.js +67 -3
- package/dist/resources/extensions/gsd/commands/handlers/core.js +6 -0
- package/dist/resources/extensions/gsd/commands/handlers/escalate.js +171 -0
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +16 -0
- package/dist/resources/extensions/gsd/commands/handlers/workflow.js +228 -29
- package/dist/resources/extensions/gsd/commands-cmux.js +5 -2
- package/dist/resources/extensions/gsd/commands-debug.js +388 -0
- package/dist/resources/extensions/gsd/commands-do.js +1 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +21 -2
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +1 -1
- package/dist/resources/extensions/gsd/commands-scan.js +94 -0
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +101 -2
- package/dist/resources/extensions/gsd/custom-workflow-engine.js +74 -54
- package/dist/resources/extensions/gsd/db-writer.js +1 -0
- package/dist/resources/extensions/gsd/debug-session-store.js +238 -0
- package/dist/resources/extensions/gsd/definition-loader.js +7 -0
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -9
- package/dist/resources/extensions/gsd/doctor-git-checks.js +5 -1
- package/dist/resources/extensions/gsd/doctor-proactive.js +4 -1
- package/dist/resources/extensions/gsd/doctor-providers.js +48 -20
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +22 -4
- package/dist/resources/extensions/gsd/doctor.js +7 -1
- package/dist/resources/extensions/gsd/error-classifier.js +6 -3
- package/dist/resources/extensions/gsd/escalation.js +321 -0
- package/dist/resources/extensions/gsd/forensics.js +26 -29
- package/dist/resources/extensions/gsd/git-service.js +0 -1
- package/dist/resources/extensions/gsd/graph.js +26 -2
- package/dist/resources/extensions/gsd/gsd-db.js +254 -29
- package/dist/resources/extensions/gsd/health-widget-core.js +42 -14
- package/dist/resources/extensions/gsd/health-widget.js +7 -4
- package/dist/resources/extensions/gsd/metrics.js +1 -0
- package/dist/resources/extensions/gsd/model-cost-table.js +3 -1
- package/dist/resources/extensions/gsd/model-router.js +7 -1
- package/dist/resources/extensions/gsd/native-git-bridge.js +137 -5
- package/dist/resources/extensions/gsd/notification-widget.js +24 -39
- package/dist/resources/extensions/gsd/notifications.js +4 -0
- package/dist/resources/extensions/gsd/post-execution-checks.js +27 -11
- package/dist/resources/extensions/gsd/pre-execution-checks.js +97 -4
- package/dist/resources/extensions/gsd/preferences-models.js +1 -0
- package/dist/resources/extensions/gsd/preferences-types.js +2 -1
- package/dist/resources/extensions/gsd/preferences-validation.js +42 -8
- package/dist/resources/extensions/gsd/preferences.js +10 -10
- package/dist/resources/extensions/gsd/prompts/debug-diagnose.md +25 -0
- package/dist/resources/extensions/gsd/prompts/debug-session-manager.md +80 -0
- package/dist/resources/extensions/gsd/prompts/execute-task.md +12 -0
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +69 -0
- package/dist/resources/extensions/gsd/prompts/scan.md +79 -0
- package/dist/resources/extensions/gsd/prompts/workflow-oneshot.md +26 -0
- package/dist/resources/extensions/gsd/run-manager.js +37 -17
- package/dist/resources/extensions/gsd/state.js +47 -3
- package/dist/resources/extensions/gsd/templates/PREFERENCES.md +7 -7
- package/dist/resources/extensions/gsd/tools/complete-task.js +80 -0
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +37 -12
- package/dist/resources/extensions/gsd/tools/plan-slice.js +5 -2
- package/dist/resources/extensions/gsd/uok/flags.js +7 -7
- package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
- package/dist/resources/extensions/gsd/workflow-dispatch.js +64 -0
- package/dist/resources/extensions/gsd/workflow-install.js +327 -0
- package/dist/resources/extensions/gsd/workflow-manifest.js +8 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +1 -6
- package/dist/resources/extensions/gsd/workflow-plugins.js +346 -0
- package/dist/resources/extensions/gsd/workflow-templates/accessibility-audit.md +88 -0
- package/dist/resources/extensions/gsd/workflow-templates/api-breaking-change.md +117 -0
- package/dist/resources/extensions/gsd/workflow-templates/bugfix.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/changelog-gen.md +82 -0
- package/dist/resources/extensions/gsd/workflow-templates/ci-bootstrap.md +144 -0
- package/dist/resources/extensions/gsd/workflow-templates/dead-code.md +81 -0
- package/dist/resources/extensions/gsd/workflow-templates/dep-upgrade.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/docs-sync.yaml +76 -0
- package/dist/resources/extensions/gsd/workflow-templates/env-audit.yaml +88 -0
- package/dist/resources/extensions/gsd/workflow-templates/full-project.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/hotfix.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/issue-triage.md +84 -0
- package/dist/resources/extensions/gsd/workflow-templates/observability-setup.md +133 -0
- package/dist/resources/extensions/gsd/workflow-templates/onboarding-check.md +74 -0
- package/dist/resources/extensions/gsd/workflow-templates/performance-audit.md +125 -0
- package/dist/resources/extensions/gsd/workflow-templates/pr-review.md +67 -0
- package/dist/resources/extensions/gsd/workflow-templates/pr-triage.md +83 -0
- package/dist/resources/extensions/gsd/workflow-templates/refactor.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/registry.json +184 -0
- package/dist/resources/extensions/gsd/workflow-templates/release.md +118 -0
- package/dist/resources/extensions/gsd/workflow-templates/rename-symbol.yaml +99 -0
- package/dist/resources/extensions/gsd/workflow-templates/security-audit.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/small-feature.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/spike.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/test-backfill.yaml +73 -0
- package/dist/resources/extensions/gsd/worktree-resolver.js +42 -1
- package/dist/resources/extensions/remote-questions/commands.js +380 -0
- package/dist/resources/extensions/remote-questions/manager.js +39 -5
- package/dist/resources/extensions/remote-questions/telegram-adapter.js +79 -4
- package/dist/resources/extensions/shared/interview-ui.js +189 -1
- package/dist/resources/extensions/shared/layout-utils.js +17 -0
- package/dist/resources/extensions/shared/rtk-shared.js +47 -0
- package/dist/resources/extensions/shared/rtk.js +3 -46
- package/dist/resources/skills/create-workflow/SKILL.md +33 -6
- package/dist/rtk-shared.d.ts +10 -0
- package/dist/rtk-shared.js +47 -0
- package/dist/rtk.d.ts +2 -6
- package/dist/rtk.js +3 -48
- package/dist/shared/workspace-types.d.ts +52 -0
- package/dist/shared/workspace-types.js +1 -0
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/update-check.d.ts +10 -0
- package/dist/update-check.js +24 -3
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +6 -6
- 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/react-loadable-manifest.json +1 -1
- 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_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 +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- 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 +2 -2
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +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 +6 -6
- package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/2826.02df9631042cc18e.js +9 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-b868033a5834586d.js → webpack-6c7cda3e318eedb6.js} +1 -1
- package/dist/web/standalone/.next/static/css/3e9cdadb4d23b8a4.css +1 -0
- package/dist/welcome-screen.js +48 -24
- package/dist/wizard.js +2 -2
- package/dist/worktree-cli.d.ts +6 -5
- package/dist/worktree-cli.js +23 -7
- package/package.json +3 -3
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/models/capability-patches.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/capability-patches.js +3 -2
- package/packages/pi-ai/dist/models/capability-patches.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts +68 -0
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.js +68 -0
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/anthropic.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/anthropic.js +17 -0
- package/packages/pi-ai/dist/models/generated/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/google-antigravity.js +17 -0
- package/packages/pi-ai/dist/models/generated/google-antigravity.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/groq.d.ts +0 -153
- package/packages/pi-ai/dist/models/generated/groq.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/groq.js +0 -153
- package/packages/pi-ai/dist/models/generated/groq.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/index.d.ts +136 -153
- package/packages/pi-ai/dist/models/generated/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai-codex.js +17 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/openrouter.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/openrouter.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openrouter.js +17 -0
- package/packages/pi-ai/dist/models/generated/openrouter.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.test.js +17 -0
- package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts +22 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.js +40 -6
- package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.js +106 -0
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js +42 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts +20 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +32 -2
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.test.js +12 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts +11 -0
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +18 -1
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/openai-codex.js +12 -0
- package/packages/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-ai/scripts/generate-models.ts +50 -0
- package/packages/pi-ai/src/models/capability-patches.ts +5 -2
- package/packages/pi-ai/src/models/generated/amazon-bedrock.ts +68 -0
- package/packages/pi-ai/src/models/generated/anthropic.ts +17 -0
- package/packages/pi-ai/src/models/generated/google-antigravity.ts +17 -0
- package/packages/pi-ai/src/models/generated/groq.ts +0 -153
- package/packages/pi-ai/src/models/generated/openai-codex.ts +17 -0
- package/packages/pi-ai/src/models/generated/openrouter.ts +17 -0
- package/packages/pi-ai/src/models.generated.test.ts +17 -0
- package/packages/pi-ai/src/providers/amazon-bedrock.test.ts +164 -0
- package/packages/pi-ai/src/providers/amazon-bedrock.ts +41 -7
- package/packages/pi-ai/src/providers/anthropic-auth.test.ts +47 -1
- package/packages/pi-ai/src/providers/anthropic-shared.test.ts +15 -1
- package/packages/pi-ai/src/providers/anthropic-shared.ts +36 -3
- package/packages/pi-ai/src/providers/anthropic.ts +19 -1
- package/packages/pi-ai/src/utils/oauth/openai-codex.ts +15 -0
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +38 -0
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +14 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.js +34 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js +74 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +4 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +32 -0
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +32 -0
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js +2 -2
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +17 -7
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +48 -34
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts +4 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +83 -33
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +70 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +77 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -66
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +1 -75
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +192 -24
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +56 -0
- package/packages/pi-coding-agent/src/core/auth-storage.test.ts +83 -0
- package/packages/pi-coding-agent/src/core/auth-storage.ts +35 -0
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +4 -1
- package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +37 -1
- package/packages/pi-coding-agent/src/core/sdk.ts +41 -0
- package/packages/pi-coding-agent/src/core/skill-tool.test.ts +2 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +19 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +53 -31
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +88 -36
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +83 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +2 -83
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +208 -27
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +70 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.js +77 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -0
- package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -66
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +1 -75
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +192 -24
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/src/resources/extensions/ask-user-questions.ts +24 -6
- package/src/resources/extensions/claude-code-cli/models.ts +9 -0
- package/src/resources/extensions/claude-code-cli/readiness.ts +13 -2
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +94 -4
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +84 -0
- package/src/resources/extensions/gsd/auto/detect-stuck.ts +10 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -0
- package/src/resources/extensions/gsd/auto/loop.ts +109 -3
- package/src/resources/extensions/gsd/auto/phases.ts +94 -60
- package/src/resources/extensions/gsd/auto/resolve.ts +1 -1
- package/src/resources/extensions/gsd/auto/run-unit.ts +11 -1
- package/src/resources/extensions/gsd/auto/session.ts +7 -0
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +20 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +21 -4
- package/src/resources/extensions/gsd/auto-dispatch.ts +123 -5
- package/src/resources/extensions/gsd/auto-loop.ts +1 -1
- package/src/resources/extensions/gsd/auto-model-selection.ts +13 -2
- package/src/resources/extensions/gsd/auto-post-unit.ts +9 -7
- package/src/resources/extensions/gsd/auto-prompts.ts +178 -38
- package/src/resources/extensions/gsd/auto-recovery.ts +63 -1
- package/src/resources/extensions/gsd/auto-start.ts +8 -6
- package/src/resources/extensions/gsd/auto-verification.ts +3 -3
- package/src/resources/extensions/gsd/auto-worktree.ts +65 -0
- package/src/resources/extensions/gsd/auto.ts +53 -28
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +8 -21
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +22 -4
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +31 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +22 -0
- package/src/resources/extensions/gsd/commands/catalog.ts +60 -3
- package/src/resources/extensions/gsd/commands/handlers/core.ts +6 -0
- package/src/resources/extensions/gsd/commands/handlers/escalate.ts +216 -0
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +16 -0
- package/src/resources/extensions/gsd/commands/handlers/workflow.ts +279 -29
- package/src/resources/extensions/gsd/commands-cmux.ts +6 -2
- package/src/resources/extensions/gsd/commands-debug.ts +484 -0
- package/src/resources/extensions/gsd/commands-do.ts +1 -0
- package/src/resources/extensions/gsd/commands-handlers.ts +19 -2
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +1 -1
- package/src/resources/extensions/gsd/commands-scan.ts +125 -0
- package/src/resources/extensions/gsd/commands-workflow-templates.ts +129 -2
- package/src/resources/extensions/gsd/custom-workflow-engine.ts +85 -60
- package/src/resources/extensions/gsd/db-writer.ts +3 -0
- package/src/resources/extensions/gsd/debug-session-store.ts +377 -0
- package/src/resources/extensions/gsd/definition-loader.ts +7 -0
- package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -9
- package/src/resources/extensions/gsd/doctor-git-checks.ts +5 -1
- package/src/resources/extensions/gsd/doctor-proactive.ts +4 -1
- package/src/resources/extensions/gsd/doctor-providers.ts +52 -22
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +23 -4
- package/src/resources/extensions/gsd/doctor-types.ts +1 -0
- package/src/resources/extensions/gsd/doctor.ts +7 -1
- package/src/resources/extensions/gsd/error-classifier.ts +6 -3
- package/src/resources/extensions/gsd/escalation.ts +367 -0
- package/src/resources/extensions/gsd/forensics.ts +25 -29
- package/src/resources/extensions/gsd/git-service.ts +0 -1
- package/src/resources/extensions/gsd/graph.ts +33 -3
- package/src/resources/extensions/gsd/gsd-db.ts +306 -29
- package/src/resources/extensions/gsd/health-widget-core.ts +43 -14
- package/src/resources/extensions/gsd/health-widget.ts +7 -3
- package/src/resources/extensions/gsd/metrics.ts +1 -0
- package/src/resources/extensions/gsd/model-cost-table.ts +3 -1
- package/src/resources/extensions/gsd/model-router.ts +15 -1
- package/src/resources/extensions/gsd/native-git-bridge.ts +134 -6
- package/src/resources/extensions/gsd/notification-widget.ts +25 -43
- package/src/resources/extensions/gsd/notifications.ts +6 -0
- package/src/resources/extensions/gsd/post-execution-checks.ts +37 -14
- package/src/resources/extensions/gsd/pre-execution-checks.ts +98 -8
- package/src/resources/extensions/gsd/preferences-models.ts +1 -0
- package/src/resources/extensions/gsd/preferences-types.ts +10 -2
- package/src/resources/extensions/gsd/preferences-validation.ts +33 -7
- package/src/resources/extensions/gsd/preferences.ts +10 -10
- package/src/resources/extensions/gsd/prompts/debug-diagnose.md +25 -0
- package/src/resources/extensions/gsd/prompts/debug-session-manager.md +80 -0
- package/src/resources/extensions/gsd/prompts/execute-task.md +12 -0
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
- package/src/resources/extensions/gsd/prompts/refine-slice.md +69 -0
- package/src/resources/extensions/gsd/prompts/scan.md +79 -0
- package/src/resources/extensions/gsd/prompts/workflow-oneshot.md +26 -0
- package/src/resources/extensions/gsd/run-manager.ts +53 -19
- package/src/resources/extensions/gsd/state.ts +50 -2
- package/src/resources/extensions/gsd/templates/PREFERENCES.md +7 -7
- package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +1 -34
- package/src/resources/extensions/gsd/tests/artifact-corruption-2630.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +45 -31
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +123 -1
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/autocomplete-regressions-1675.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/commands-do.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/commands-scan.test.ts +351 -0
- package/src/resources/extensions/gsd/tests/commands-workflow-custom.test.ts +8 -6
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/debug-command-handler.test.ts +905 -0
- package/src/resources/extensions/gsd/tests/debug-command-lifecycle.integration.test.ts +1229 -0
- package/src/resources/extensions/gsd/tests/debug-session-store.test.ts +565 -0
- package/src/resources/extensions/gsd/tests/discuss-milestone-structured-questions.test.ts +64 -0
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +67 -0
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +62 -18
- package/src/resources/extensions/gsd/tests/enhanced-verification-integration.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/escalation.test.ts +818 -0
- package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +29 -12
- package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +106 -0
- package/src/resources/extensions/gsd/tests/forensics-hook-key-parse.test.ts +74 -0
- package/src/resources/extensions/gsd/tests/graph-operations.test.ts +0 -4
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +44 -1
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +8 -2
- package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +68 -1
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +109 -11
- package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/integration/test-isolation.ts +53 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +171 -1
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/milestone-status-tool.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/model-router.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/notification-widget.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +105 -1
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +275 -6
- package/src/resources/extensions/gsd/tests/preferences.test.ts +69 -1
- package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +539 -0
- package/src/resources/extensions/gsd/tests/projection-regression.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +24 -0
- package/src/resources/extensions/gsd/tests/prompt-db.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +67 -0
- package/src/resources/extensions/gsd/tests/remote-notification-from-desktop.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/requirements.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +153 -0
- package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +16 -4
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/uok-flags.test.ts +31 -1
- package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +166 -0
- package/src/resources/extensions/gsd/tests/workflow-install.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +15 -6
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/workflow-plugins.test.ts +310 -0
- package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +8 -2
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +77 -2
- package/src/resources/extensions/gsd/tools/complete-task.ts +87 -0
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +42 -8
- package/src/resources/extensions/gsd/tools/plan-slice.ts +6 -1
- package/src/resources/extensions/gsd/types.ts +62 -0
- package/src/resources/extensions/gsd/unit-runtime.ts +1 -0
- package/src/resources/extensions/gsd/uok/contracts.ts +2 -1
- package/src/resources/extensions/gsd/uok/flags.ts +7 -7
- package/src/resources/extensions/gsd/uok/kernel.ts +16 -4
- package/src/resources/extensions/gsd/workflow-dispatch.ts +106 -0
- package/src/resources/extensions/gsd/workflow-install.ts +423 -0
- package/src/resources/extensions/gsd/workflow-manifest.ts +8 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +1 -6
- package/src/resources/extensions/gsd/workflow-plugins.ts +403 -0
- package/src/resources/extensions/gsd/workflow-templates/accessibility-audit.md +88 -0
- package/src/resources/extensions/gsd/workflow-templates/api-breaking-change.md +117 -0
- package/src/resources/extensions/gsd/workflow-templates/bugfix.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/changelog-gen.md +82 -0
- package/src/resources/extensions/gsd/workflow-templates/ci-bootstrap.md +144 -0
- package/src/resources/extensions/gsd/workflow-templates/dead-code.md +81 -0
- package/src/resources/extensions/gsd/workflow-templates/dep-upgrade.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/docs-sync.yaml +76 -0
- package/src/resources/extensions/gsd/workflow-templates/env-audit.yaml +88 -0
- package/src/resources/extensions/gsd/workflow-templates/full-project.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/hotfix.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/issue-triage.md +84 -0
- package/src/resources/extensions/gsd/workflow-templates/observability-setup.md +133 -0
- package/src/resources/extensions/gsd/workflow-templates/onboarding-check.md +74 -0
- package/src/resources/extensions/gsd/workflow-templates/performance-audit.md +125 -0
- package/src/resources/extensions/gsd/workflow-templates/pr-review.md +67 -0
- package/src/resources/extensions/gsd/workflow-templates/pr-triage.md +83 -0
- package/src/resources/extensions/gsd/workflow-templates/refactor.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/registry.json +184 -0
- package/src/resources/extensions/gsd/workflow-templates/release.md +118 -0
- package/src/resources/extensions/gsd/workflow-templates/rename-symbol.yaml +99 -0
- package/src/resources/extensions/gsd/workflow-templates/security-audit.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/small-feature.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/spike.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/test-backfill.yaml +73 -0
- package/src/resources/extensions/gsd/workflow-templates.ts +7 -0
- package/src/resources/extensions/gsd/workspace-index.ts +9 -4
- package/src/resources/extensions/gsd/worktree-resolver.ts +47 -1
- package/src/resources/extensions/remote-questions/commands.ts +480 -0
- package/src/resources/extensions/remote-questions/manager.ts +49 -4
- package/src/resources/extensions/remote-questions/telegram-adapter.ts +86 -4
- package/src/resources/extensions/remote-questions/tests/command-polling.test.ts +246 -0
- package/src/resources/extensions/remote-questions/tests/remote-answer-normalization.test.ts +92 -0
- package/src/resources/extensions/remote-questions/tests/telegram-commands.test.ts +267 -0
- package/src/resources/extensions/shared/interview-ui.ts +195 -1
- package/src/resources/extensions/shared/layout-utils.ts +26 -0
- package/src/resources/extensions/shared/rtk-shared.ts +58 -0
- package/src/resources/extensions/shared/rtk.ts +12 -52
- package/src/resources/extensions/shared/tests/interview-preview.test.ts +177 -0
- package/src/resources/extensions/shared/tests/preview-layout.test.ts +120 -0
- package/src/resources/skills/create-workflow/SKILL.md +33 -6
- package/dist/web/standalone/.next/static/chunks/2826.dd3dc8bbd3025fa5.js +0 -9
- package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +0 -1
- package/packages/native/dist/ps/types.d.ts +0 -5
- package/packages/native/dist/ps/types.js +0 -2
- package/packages/native/src/ps/types.ts +0 -5
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/LICENSE +0 -201
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/README.md +0 -9
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-cjs/index.js +0 -762
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/build-abort-error.js +0 -19
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/constants.js +0 -1
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/get-transformed-headers.js +0 -9
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/index.js +0 -3
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http-handler.js +0 -230
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-manager.js +0 -87
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-pool.js +0 -32
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-handler.js +0 -169
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/readable.mock.js +0 -21
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/server.mock.js +0 -88
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-connection-timeout.js +0 -36
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-request-timeout.js +0 -21
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-keep-alive.js +0 -22
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-timeout.js +0 -23
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/collector.js +0 -8
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/index.js +0 -41
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/readable.mock.js +0 -21
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/timing.js +0 -4
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/write-request-body.js +0 -63
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/build-abort-error.d.ts +0 -10
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/constants.d.ts +0 -5
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/get-transformed-headers.d.ts +0 -4
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/index.d.ts +0 -3
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http-handler.d.ts +0 -46
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-manager.d.ts +0 -24
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-pool.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-handler.d.ts +0 -63
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/readable.mock.d.ts +0 -13
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/server.mock.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-connection-timeout.d.ts +0 -2
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-request-timeout.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-keep-alive.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-timeout.d.ts +0 -2
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/collector.d.ts +0 -5
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/index.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/readable.mock.d.ts +0 -13
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/timing.d.ts +0 -8
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/build-abort-error.d.ts +0 -10
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/constants.d.ts +0 -5
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/get-transformed-headers.d.ts +0 -4
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/index.d.ts +0 -3
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http-handler.d.ts +0 -46
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-manager.d.ts +0 -24
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-pool.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-handler.d.ts +0 -63
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/readable.mock.d.ts +0 -13
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/server.mock.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-connection-timeout.d.ts +0 -2
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-request-timeout.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-keep-alive.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-timeout.d.ts +0 -2
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/collector.d.ts +0 -5
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/index.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/readable.mock.d.ts +0 -13
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/timing.d.ts +0 -8
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/write-request-body.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/write-request-body.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/package.json +0 -68
- package/packages/pi-ai/oauth.d.ts +0 -1
- package/packages/pi-ai/oauth.js +0 -1
- /package/dist/web/standalone/.next/static/{j7IBD35UgrL2b298GLK3V → jaWw1Jh0TYayjbfOrFe8D}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{j7IBD35UgrL2b298GLK3V → jaWw1Jh0TYayjbfOrFe8D}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression guards for #4392
|
|
3
|
+
*
|
|
4
|
+
* Verifies that `supportsAdaptiveThinking()` in amazon-bedrock.ts correctly
|
|
5
|
+
* recognises all current adaptive-thinking-capable models: opus-4-7,
|
|
6
|
+
* sonnet-4-7, and haiku-4-5 (in addition to the previously supported
|
|
7
|
+
* opus-4-6 / sonnet-4-6 family).
|
|
8
|
+
*
|
|
9
|
+
* Related: #4392 (opus-4-7 adaptive thinking not recognised on Bedrock)
|
|
10
|
+
* #4352 (pre-existing: only opus-4-6 / sonnet-4-6 whitelisted)
|
|
11
|
+
*/
|
|
12
|
+
import { describe, it } from "node:test";
|
|
13
|
+
import assert from "node:assert/strict";
|
|
14
|
+
|
|
15
|
+
import {
|
|
16
|
+
supportsAdaptiveThinking,
|
|
17
|
+
mapThinkingLevelToEffort,
|
|
18
|
+
buildAdditionalModelRequestFields,
|
|
19
|
+
type BedrockOptions,
|
|
20
|
+
} from "./amazon-bedrock.js";
|
|
21
|
+
|
|
22
|
+
import type { Model } from "../types.js";
|
|
23
|
+
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Helpers
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
|
|
28
|
+
/** Create a minimal stub `Model` for the given ID to use in unit tests. */
|
|
29
|
+
function makeModel(id: string): Model<"bedrock-converse-stream"> {
|
|
30
|
+
return {
|
|
31
|
+
id,
|
|
32
|
+
name: id,
|
|
33
|
+
api: "bedrock-converse-stream",
|
|
34
|
+
provider: "amazon-bedrock" as any,
|
|
35
|
+
baseUrl: "",
|
|
36
|
+
reasoning: true,
|
|
37
|
+
input: ["text"],
|
|
38
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
39
|
+
contextWindow: 200000,
|
|
40
|
+
maxTokens: 32000,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
// supportsAdaptiveThinking — regression guards (#4392 / #4352)
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
|
|
48
|
+
describe("supportsAdaptiveThinking — regression guard #4392 / #4352: all supported models", () => {
|
|
49
|
+
it("returns true for opus-4-6 (hyphen, Bedrock ARN style)", () => {
|
|
50
|
+
assert.ok(supportsAdaptiveThinking("anthropic.claude-opus-4-6-20250514-v1:0"));
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it("returns true for sonnet-4-6 (hyphen)", () => {
|
|
54
|
+
assert.ok(supportsAdaptiveThinking("anthropic.claude-sonnet-4-6-20250514-v1:0"));
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("[#4392] returns true for opus-4-7 (hyphen, Bedrock ARN style)", () => {
|
|
58
|
+
assert.ok(
|
|
59
|
+
supportsAdaptiveThinking("anthropic.claude-opus-4-7-20250514-v1:0"),
|
|
60
|
+
"opus-4-7 should support adaptive thinking (regression guard #4392)",
|
|
61
|
+
);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it("[#4392] returns true for opus-4-7 (dot separator)", () => {
|
|
65
|
+
assert.ok(
|
|
66
|
+
supportsAdaptiveThinking("anthropic.claude-opus-4.7-20250514-v1:0"),
|
|
67
|
+
"opus-4.7 (dot) should support adaptive thinking (regression guard #4392)",
|
|
68
|
+
);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it("[#4352] returns true for sonnet-4-7 (hyphen)", () => {
|
|
72
|
+
assert.ok(
|
|
73
|
+
supportsAdaptiveThinking("anthropic.claude-sonnet-4-7-20250514-v1:0"),
|
|
74
|
+
"sonnet-4-7 should support adaptive thinking (regression guard #4352)",
|
|
75
|
+
);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it("[#4352] returns true for haiku-4-5 (hyphen)", () => {
|
|
79
|
+
assert.ok(
|
|
80
|
+
supportsAdaptiveThinking("anthropic.claude-haiku-4-5-20250514-v1:0"),
|
|
81
|
+
"haiku-4-5 should support adaptive thinking (regression guard #4352)",
|
|
82
|
+
);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
87
|
+
// buildAdditionalModelRequestFields — adaptive thinking output for opus-4-7
|
|
88
|
+
// Tests go through the public API surface to validate end-to-end behaviour.
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
|
|
91
|
+
describe("buildAdditionalModelRequestFields — Bug #4392: opus-4-7 must use adaptive thinking", () => {
|
|
92
|
+
const options: BedrockOptions = { reasoning: "high" };
|
|
93
|
+
|
|
94
|
+
it("[#4392] opus-4-7 Bedrock ARN → thinking.type === 'adaptive' (not budget_tokens)", () => {
|
|
95
|
+
const model = makeModel("anthropic.claude-opus-4-7-20250514-v1:0");
|
|
96
|
+
const fields = buildAdditionalModelRequestFields(model, options);
|
|
97
|
+
// Regression guard: supportsAdaptiveThinking must return true for opus-4-7
|
|
98
|
+
// so the function produces thinking.type='adaptive', not budget_tokens.
|
|
99
|
+
assert.equal(
|
|
100
|
+
fields?.thinking?.type,
|
|
101
|
+
"adaptive",
|
|
102
|
+
"opus-4-7 should produce thinking.type='adaptive', not budget_tokens",
|
|
103
|
+
);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it("[#4392] opus-4-7 dot separator → thinking.type === 'adaptive'", () => {
|
|
107
|
+
const model = makeModel("anthropic.claude-opus-4.7-20250514-v1:0");
|
|
108
|
+
const fields = buildAdditionalModelRequestFields(model, options);
|
|
109
|
+
assert.equal(
|
|
110
|
+
fields?.thinking?.type,
|
|
111
|
+
"adaptive",
|
|
112
|
+
"opus-4.7 (dot) should produce thinking.type='adaptive'",
|
|
113
|
+
);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it("[#4352] sonnet-4-7 → thinking.type === 'adaptive'", () => {
|
|
117
|
+
const model = makeModel("anthropic.claude-sonnet-4-7-20250514-v1:0");
|
|
118
|
+
const fields = buildAdditionalModelRequestFields(model, options);
|
|
119
|
+
assert.equal(
|
|
120
|
+
fields?.thinking?.type,
|
|
121
|
+
"adaptive",
|
|
122
|
+
"sonnet-4-7 should produce thinking.type='adaptive'",
|
|
123
|
+
);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it("[#4352] haiku-4-5 → thinking.type === 'adaptive'", () => {
|
|
127
|
+
const model = makeModel("anthropic.claude-haiku-4-5-20250514-v1:0");
|
|
128
|
+
const fields = buildAdditionalModelRequestFields(model, options);
|
|
129
|
+
assert.equal(
|
|
130
|
+
fields?.thinking?.type,
|
|
131
|
+
"adaptive",
|
|
132
|
+
"haiku-4-5 should produce thinking.type='adaptive'",
|
|
133
|
+
);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
// ---------------------------------------------------------------------------
|
|
138
|
+
// mapThinkingLevelToEffort — regression guard for xhigh on opus-4-7 (#4392)
|
|
139
|
+
// Fixed: Bedrock provider now returns "xhigh" for 4.7+ models instead of "max".
|
|
140
|
+
// ---------------------------------------------------------------------------
|
|
141
|
+
|
|
142
|
+
describe("mapThinkingLevelToEffort — regression guard #4392: opus-4-7 xhigh returns 'xhigh'", () => {
|
|
143
|
+
it("[#4392] maps xhigh → 'xhigh' for opus-4-7 (native xhigh support)", () => {
|
|
144
|
+
// Regression guard: mapThinkingLevelToEffort must return "xhigh" for opus-4-7,
|
|
145
|
+
// not "max". Ensures the fix in #4392 does not regress.
|
|
146
|
+
const result = mapThinkingLevelToEffort("xhigh", "anthropic.claude-opus-4-7-20250514-v1:0");
|
|
147
|
+
assert.equal(
|
|
148
|
+
result,
|
|
149
|
+
"xhigh",
|
|
150
|
+
"opus-4-7 supports native xhigh effort — must not be clamped to 'max'",
|
|
151
|
+
);
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
it("[#4392] maps xhigh → 'max' for opus-4-6 (no native xhigh, clamped)", () => {
|
|
155
|
+
// This already passes — regression guard.
|
|
156
|
+
const result = mapThinkingLevelToEffort("xhigh", "anthropic.claude-opus-4-6-20250514-v1:0");
|
|
157
|
+
assert.equal(result, "max");
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
it("maps high → 'high' for opus-4-7 (not affected by bug)", () => {
|
|
161
|
+
const result = mapThinkingLevelToEffort("high", "anthropic.claude-opus-4-7-20250514-v1:0");
|
|
162
|
+
assert.equal(result, "high");
|
|
163
|
+
});
|
|
164
|
+
});
|
|
@@ -45,6 +45,7 @@ import { sanitizeSurrogates } from "../utils/sanitize-unicode.js";
|
|
|
45
45
|
import { adjustMaxTokensForThinking, buildBaseOptions, clampReasoning } from "./simple-options.js";
|
|
46
46
|
import { transformMessagesWithReport } from "./transform-messages.js";
|
|
47
47
|
|
|
48
|
+
/** Stream options specific to the Amazon Bedrock converse-stream provider, including region, reasoning, and caching knobs. */
|
|
48
49
|
export interface BedrockOptions extends StreamOptions {
|
|
49
50
|
region?: string;
|
|
50
51
|
profile?: string;
|
|
@@ -57,8 +58,10 @@ export interface BedrockOptions extends StreamOptions {
|
|
|
57
58
|
interleavedThinking?: boolean;
|
|
58
59
|
}
|
|
59
60
|
|
|
61
|
+
/** Internal working type that annotates content blocks with a streaming index and partial JSON accumulator. */
|
|
60
62
|
type Block = (TextContent | ThinkingContent | ToolCall) & { index?: number; partialJson?: string };
|
|
61
63
|
|
|
64
|
+
/** Stream a conversation turn via Amazon Bedrock's converse-stream API. */
|
|
62
65
|
export const streamBedrock: StreamFunction<"bedrock-converse-stream", BedrockOptions> = (
|
|
63
66
|
model: Model<"bedrock-converse-stream">,
|
|
64
67
|
context: Context,
|
|
@@ -216,6 +219,7 @@ export const streamBedrock: StreamFunction<"bedrock-converse-stream", BedrockOpt
|
|
|
216
219
|
return stream;
|
|
217
220
|
};
|
|
218
221
|
|
|
222
|
+
/** Simplified entry point for Bedrock streaming; resolves thinking budgets and adaptive-thinking support. */
|
|
219
223
|
export const streamSimpleBedrock: StreamFunction<"bedrock-converse-stream", SimpleStreamOptions> = (
|
|
220
224
|
model: Model<"bedrock-converse-stream">,
|
|
221
225
|
context: Context,
|
|
@@ -260,6 +264,7 @@ export const streamSimpleBedrock: StreamFunction<"bedrock-converse-stream", Simp
|
|
|
260
264
|
} satisfies BedrockOptions);
|
|
261
265
|
};
|
|
262
266
|
|
|
267
|
+
/** Handle a `contentBlockStart` event, initialising a new tool-call block when a tool-use start arrives. */
|
|
263
268
|
function handleContentBlockStart(
|
|
264
269
|
event: ContentBlockStartEvent,
|
|
265
270
|
blocks: Block[],
|
|
@@ -283,6 +288,7 @@ function handleContentBlockStart(
|
|
|
283
288
|
}
|
|
284
289
|
}
|
|
285
290
|
|
|
291
|
+
/** Handle a `contentBlockDelta` event, appending text, tool-input JSON, or reasoning content to the active block. */
|
|
286
292
|
function handleContentBlockDelta(
|
|
287
293
|
event: ContentBlockDeltaEvent,
|
|
288
294
|
blocks: Block[],
|
|
@@ -341,6 +347,7 @@ function handleContentBlockDelta(
|
|
|
341
347
|
}
|
|
342
348
|
}
|
|
343
349
|
|
|
350
|
+
/** Handle a `metadata` event, updating token-usage counters and cost on the output message. */
|
|
344
351
|
function handleMetadata(
|
|
345
352
|
event: ConverseStreamMetadataEvent,
|
|
346
353
|
model: Model<"bedrock-converse-stream">,
|
|
@@ -356,6 +363,7 @@ function handleMetadata(
|
|
|
356
363
|
}
|
|
357
364
|
}
|
|
358
365
|
|
|
366
|
+
/** Handle a `contentBlockStop` event, finalising the block and pushing the appropriate completion event. */
|
|
359
367
|
function handleContentBlockStop(
|
|
360
368
|
event: ContentBlockStopEvent,
|
|
361
369
|
blocks: Block[],
|
|
@@ -383,21 +391,33 @@ function handleContentBlockStop(
|
|
|
383
391
|
}
|
|
384
392
|
|
|
385
393
|
/**
|
|
386
|
-
* Check if the model supports adaptive thinking (Opus 4.6
|
|
394
|
+
* Check if the model supports adaptive thinking (Opus 4.6/4.7, Sonnet 4.6/4.7, Haiku 4.5).
|
|
395
|
+
* @internal exported for testing only
|
|
387
396
|
*/
|
|
388
|
-
function supportsAdaptiveThinking(modelId: string): boolean {
|
|
397
|
+
export function supportsAdaptiveThinking(modelId: string): boolean {
|
|
389
398
|
return (
|
|
390
399
|
modelId.includes("opus-4-6") ||
|
|
391
400
|
modelId.includes("opus-4.6") ||
|
|
401
|
+
modelId.includes("opus-4-7") ||
|
|
402
|
+
modelId.includes("opus-4.7") ||
|
|
392
403
|
modelId.includes("sonnet-4-6") ||
|
|
393
|
-
modelId.includes("sonnet-4.6")
|
|
404
|
+
modelId.includes("sonnet-4.6") ||
|
|
405
|
+
modelId.includes("sonnet-4-7") ||
|
|
406
|
+
modelId.includes("sonnet-4.7") ||
|
|
407
|
+
modelId.includes("haiku-4-5") ||
|
|
408
|
+
modelId.includes("haiku-4.5")
|
|
394
409
|
);
|
|
395
410
|
}
|
|
396
411
|
|
|
397
|
-
|
|
412
|
+
/**
|
|
413
|
+
* Maps a reasoning/thinking level to the Bedrock effort string for the given model.
|
|
414
|
+
* Returns `"xhigh"` for 4.7+ models and `"max"` for older ones; `"low"` for minimal/low.
|
|
415
|
+
* @internal exported for testing only
|
|
416
|
+
*/
|
|
417
|
+
export function mapThinkingLevelToEffort(
|
|
398
418
|
level: SimpleStreamOptions["reasoning"],
|
|
399
419
|
modelId: string,
|
|
400
|
-
): "low" | "medium" | "high" | "max" {
|
|
420
|
+
): "low" | "medium" | "high" | "xhigh" | "max" {
|
|
401
421
|
switch (level) {
|
|
402
422
|
case "minimal":
|
|
403
423
|
case "low":
|
|
@@ -407,7 +427,9 @@ function mapThinkingLevelToEffort(
|
|
|
407
427
|
case "high":
|
|
408
428
|
return "high";
|
|
409
429
|
case "xhigh":
|
|
410
|
-
|
|
430
|
+
if (modelId.includes("opus-4-7") || modelId.includes("opus-4.7")) return "xhigh";
|
|
431
|
+
if (modelId.includes("opus-4-6") || modelId.includes("opus-4.6")) return "max";
|
|
432
|
+
return "high";
|
|
411
433
|
default:
|
|
412
434
|
return "high";
|
|
413
435
|
}
|
|
@@ -457,6 +479,7 @@ function supportsThinkingSignature(model: Model<"bedrock-converse-stream">): boo
|
|
|
457
479
|
return id.includes("anthropic.claude") || id.includes("anthropic/claude");
|
|
458
480
|
}
|
|
459
481
|
|
|
482
|
+
/** Build the Bedrock system-prompt block array, appending a cache point for supported models when caching is enabled. */
|
|
460
483
|
function buildSystemPrompt(
|
|
461
484
|
systemPrompt: string | undefined,
|
|
462
485
|
model: Model<"bedrock-converse-stream">,
|
|
@@ -476,11 +499,13 @@ function buildSystemPrompt(
|
|
|
476
499
|
return blocks;
|
|
477
500
|
}
|
|
478
501
|
|
|
502
|
+
/** Sanitise a tool-call ID to alphanumeric, underscore, and hyphen characters (max 64 chars) for Bedrock compatibility. */
|
|
479
503
|
function normalizeToolCallId(id: string): string {
|
|
480
504
|
const sanitized = id.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
481
505
|
return sanitized.length > 64 ? sanitized.slice(0, 64) : sanitized;
|
|
482
506
|
}
|
|
483
507
|
|
|
508
|
+
/** Convert GSD context messages to the Bedrock `Message[]` format, collapsing consecutive tool-result turns into a single user message. */
|
|
484
509
|
function convertMessages(
|
|
485
510
|
context: Context,
|
|
486
511
|
model: Model<"bedrock-converse-stream">,
|
|
@@ -630,6 +655,7 @@ function convertMessages(
|
|
|
630
655
|
return result;
|
|
631
656
|
}
|
|
632
657
|
|
|
658
|
+
/** Convert GSD tool definitions and tool-choice preference to a Bedrock `ToolConfiguration`, appending a cache point for supported models. */
|
|
633
659
|
function convertToolConfig(
|
|
634
660
|
tools: Tool[] | undefined,
|
|
635
661
|
toolChoice: BedrockOptions["toolChoice"],
|
|
@@ -673,6 +699,7 @@ function convertToolConfig(
|
|
|
673
699
|
return { tools: bedrockTools, toolChoice: bedrockToolChoice };
|
|
674
700
|
}
|
|
675
701
|
|
|
702
|
+
/** Map a Bedrock stop-reason string to GSD's internal `StopReason`. */
|
|
676
703
|
function mapStopReason(reason: string | undefined): StopReason {
|
|
677
704
|
switch (reason) {
|
|
678
705
|
case BedrockStopReason.END_TURN:
|
|
@@ -688,7 +715,13 @@ function mapStopReason(reason: string | undefined): StopReason {
|
|
|
688
715
|
}
|
|
689
716
|
}
|
|
690
717
|
|
|
691
|
-
|
|
718
|
+
/**
|
|
719
|
+
* Builds the Bedrock `additionalModelRequestFields` payload for Claude models.
|
|
720
|
+
* Handles adaptive vs. budget-based thinking, beta flags, and xhigh-to-max clamping
|
|
721
|
+
* for models that lack native xhigh support.
|
|
722
|
+
* @internal exported for testing only
|
|
723
|
+
*/
|
|
724
|
+
export function buildAdditionalModelRequestFields(
|
|
692
725
|
model: Model<"bedrock-converse-stream">,
|
|
693
726
|
options: BedrockOptions,
|
|
694
727
|
): Record<string, any> | undefined {
|
|
@@ -733,6 +766,7 @@ function buildAdditionalModelRequestFields(
|
|
|
733
766
|
return undefined;
|
|
734
767
|
}
|
|
735
768
|
|
|
769
|
+
/** Convert a base64-encoded image to a Bedrock image content block with the appropriate `ImageFormat`. */
|
|
736
770
|
function createImageBlock(mimeType: string, data: string) {
|
|
737
771
|
let format: ImageFormat;
|
|
738
772
|
switch (mimeType) {
|
|
@@ -4,7 +4,7 @@ import { readFileSync } from "node:fs";
|
|
|
4
4
|
import { dirname, join } from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
|
|
7
|
-
import { usesAnthropicBearerAuth } from "./anthropic.js";
|
|
7
|
+
import { usesAnthropicBearerAuth, resolveAnthropicBaseUrl } from "./anthropic.js";
|
|
8
8
|
|
|
9
9
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
10
10
|
|
|
@@ -30,3 +30,49 @@ test("createClient routes Bearer-auth providers through authToken (#3783)", () =
|
|
|
30
30
|
"Bearer-auth providers should send authToken instead",
|
|
31
31
|
);
|
|
32
32
|
});
|
|
33
|
+
|
|
34
|
+
// Minimal model stub — only the field resolveAnthropicBaseUrl cares about.
|
|
35
|
+
const stubModel = { baseUrl: "https://api.anthropic.com" } as Parameters<typeof resolveAnthropicBaseUrl>[0];
|
|
36
|
+
|
|
37
|
+
test("resolveAnthropicBaseUrl returns model.baseUrl when ANTHROPIC_BASE_URL is unset (#4140)", (t) => {
|
|
38
|
+
const saved = process.env.ANTHROPIC_BASE_URL;
|
|
39
|
+
t.after(() => {
|
|
40
|
+
if (saved === undefined) delete process.env.ANTHROPIC_BASE_URL;
|
|
41
|
+
else process.env.ANTHROPIC_BASE_URL = saved;
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
delete process.env.ANTHROPIC_BASE_URL;
|
|
45
|
+
assert.equal(resolveAnthropicBaseUrl(stubModel), "https://api.anthropic.com");
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
test("resolveAnthropicBaseUrl prefers ANTHROPIC_BASE_URL over model.baseUrl (#4140)", (t) => {
|
|
49
|
+
const saved = process.env.ANTHROPIC_BASE_URL;
|
|
50
|
+
t.after(() => {
|
|
51
|
+
if (saved === undefined) delete process.env.ANTHROPIC_BASE_URL;
|
|
52
|
+
else process.env.ANTHROPIC_BASE_URL = saved;
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
process.env.ANTHROPIC_BASE_URL = "https://proxy.example.com";
|
|
56
|
+
assert.equal(resolveAnthropicBaseUrl(stubModel), "https://proxy.example.com");
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test("resolveAnthropicBaseUrl ignores whitespace-only ANTHROPIC_BASE_URL (#4140)", (t) => {
|
|
60
|
+
const saved = process.env.ANTHROPIC_BASE_URL;
|
|
61
|
+
t.after(() => {
|
|
62
|
+
if (saved === undefined) delete process.env.ANTHROPIC_BASE_URL;
|
|
63
|
+
else process.env.ANTHROPIC_BASE_URL = saved;
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
process.env.ANTHROPIC_BASE_URL = " ";
|
|
67
|
+
assert.equal(resolveAnthropicBaseUrl(stubModel), "https://api.anthropic.com");
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test("createClient uses resolveAnthropicBaseUrl for all auth paths (#4140)", () => {
|
|
71
|
+
const source = readFileSync(join(__dirname, "..", "..", "src", "providers", "anthropic.ts"), "utf-8");
|
|
72
|
+
const directUsages = (source.match(/baseURL:\s*model\.baseUrl/g) ?? []).length;
|
|
73
|
+
assert.equal(directUsages, 0, "createClient must not use model.baseUrl directly — use resolveAnthropicBaseUrl(model)");
|
|
74
|
+
assert.ok(
|
|
75
|
+
source.includes("baseURL: resolveAnthropicBaseUrl(model)"),
|
|
76
|
+
"all createClient branches should pass baseURL through resolveAnthropicBaseUrl",
|
|
77
|
+
);
|
|
78
|
+
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it } from "node:test";
|
|
2
2
|
import assert from "node:assert/strict";
|
|
3
|
-
import { convertTools, mapStopReason } from "./anthropic-shared.js";
|
|
3
|
+
import { convertTools, mapStopReason, mapThinkingLevelToEffort } from "./anthropic-shared.js";
|
|
4
4
|
|
|
5
5
|
const makeTool = (name: string) =>
|
|
6
6
|
({
|
|
@@ -56,6 +56,20 @@ describe("convertTools cache_control", () => {
|
|
|
56
56
|
});
|
|
57
57
|
});
|
|
58
58
|
|
|
59
|
+
describe("mapThinkingLevelToEffort", () => {
|
|
60
|
+
it("maps xhigh to max for opus-4-6 (no native xhigh support)", () => {
|
|
61
|
+
assert.equal(mapThinkingLevelToEffort("xhigh", "claude-opus-4-6"), "max");
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it("maps xhigh to xhigh natively for opus-4-7", () => {
|
|
65
|
+
assert.equal(mapThinkingLevelToEffort("xhigh", "claude-opus-4-7"), "xhigh");
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it("maps high to high for opus-4-7", () => {
|
|
69
|
+
assert.equal(mapThinkingLevelToEffort("high", "claude-opus-4-7"), "high");
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
|
|
59
73
|
describe("mapStopReason", () => {
|
|
60
74
|
it("maps end_turn to stop", () => {
|
|
61
75
|
assert.equal(mapStopReason("end_turn"), "stop");
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared utilities for Anthropic providers (direct API and Vertex AI).
|
|
3
|
+
* Includes message conversion, tool normalisation, cache-control helpers,
|
|
4
|
+
* adaptive-thinking detection, and the core `processAnthropicStream` pump.
|
|
3
5
|
*/
|
|
4
6
|
import type Anthropic from "@anthropic-ai/sdk";
|
|
5
7
|
import type {
|
|
@@ -35,8 +37,10 @@ import { hasXmlParameterTags, repairToolJson } from "../utils/repair-tool-json.j
|
|
|
35
37
|
import { sanitizeSurrogates } from "../utils/sanitize-unicode.js";
|
|
36
38
|
import { transformMessagesWithReport } from "./transform-messages.js";
|
|
37
39
|
|
|
38
|
-
|
|
40
|
+
/** Effort levels accepted by the Anthropic `output_config.effort` field. */
|
|
41
|
+
export type AnthropicEffort = "low" | "medium" | "high" | "xhigh" | "max";
|
|
39
42
|
|
|
43
|
+
/** Extended stream options for Anthropic-protocol providers (direct API and Vertex AI). */
|
|
40
44
|
export interface AnthropicOptions extends StreamOptions {
|
|
41
45
|
thinkingEnabled?: boolean;
|
|
42
46
|
thinkingBudgetTokens?: number;
|
|
@@ -45,6 +49,7 @@ export interface AnthropicOptions extends StreamOptions {
|
|
|
45
49
|
toolChoice?: "auto" | "any" | "none" | { type: "tool"; name: string };
|
|
46
50
|
}
|
|
47
51
|
|
|
52
|
+
/** Canonical list of Claude Code built-in tool names used for case-normalisation. */
|
|
48
53
|
const claudeCodeTools = [
|
|
49
54
|
"Read",
|
|
50
55
|
"Write",
|
|
@@ -65,9 +70,12 @@ const claudeCodeTools = [
|
|
|
65
70
|
"WebSearch",
|
|
66
71
|
];
|
|
67
72
|
|
|
73
|
+
/** Lowercase-keyed lookup map built from `claudeCodeTools` for O(1) case-insensitive name resolution. */
|
|
68
74
|
const ccToolLookup = new Map(claudeCodeTools.map((t) => [t.toLowerCase(), t]));
|
|
69
75
|
|
|
76
|
+
/** Normalise a tool name to its canonical Claude Code casing. */
|
|
70
77
|
export const toClaudeCodeName = (name: string) => ccToolLookup.get(name.toLowerCase()) ?? name;
|
|
78
|
+
/** Reverse-map a Claude Code tool name back to the provider's own casing, using the tools list if available. */
|
|
71
79
|
export const fromClaudeCodeName = (name: string, tools?: Tool[]) => {
|
|
72
80
|
if (tools && tools.length > 0) {
|
|
73
81
|
const lowerName = name.toLowerCase();
|
|
@@ -77,6 +85,10 @@ export const fromClaudeCodeName = (name: string, tools?: Tool[]) => {
|
|
|
77
85
|
return name;
|
|
78
86
|
};
|
|
79
87
|
|
|
88
|
+
/**
|
|
89
|
+
* Resolve cache retention preference.
|
|
90
|
+
* Defaults to "short" and uses PI_CACHE_RETENTION for backward compatibility.
|
|
91
|
+
*/
|
|
80
92
|
function resolveCacheRetention(cacheRetention?: CacheRetention): CacheRetention {
|
|
81
93
|
if (cacheRetention) {
|
|
82
94
|
return cacheRetention;
|
|
@@ -87,6 +99,7 @@ function resolveCacheRetention(cacheRetention?: CacheRetention): CacheRetention
|
|
|
87
99
|
return "short";
|
|
88
100
|
}
|
|
89
101
|
|
|
102
|
+
/** Resolve cache retention and return the matching Anthropic `cache_control` block. */
|
|
90
103
|
export function getCacheControl(
|
|
91
104
|
baseUrl: string,
|
|
92
105
|
cacheRetention?: CacheRetention,
|
|
@@ -102,6 +115,7 @@ export function getCacheControl(
|
|
|
102
115
|
};
|
|
103
116
|
}
|
|
104
117
|
|
|
118
|
+
/** Convert GSD content blocks to the Anthropic SDK's user-message content format. */
|
|
105
119
|
export function convertContentBlocks(content: (TextContent | ImageContent)[]):
|
|
106
120
|
| string
|
|
107
121
|
| Array<
|
|
@@ -148,15 +162,23 @@ export function convertContentBlocks(content: (TextContent | ImageContent)[]):
|
|
|
148
162
|
return blocks;
|
|
149
163
|
}
|
|
150
164
|
|
|
165
|
+
/** Returns true for models that support the adaptive thinking API (Opus 4.6/4.7, Sonnet 4.6/4.7, Haiku 4.5). */
|
|
151
166
|
export function supportsAdaptiveThinking(modelId: string): boolean {
|
|
152
167
|
return (
|
|
153
168
|
modelId.includes("opus-4-6") ||
|
|
154
169
|
modelId.includes("opus-4.6") ||
|
|
170
|
+
modelId.includes("opus-4-7") ||
|
|
171
|
+
modelId.includes("opus-4.7") ||
|
|
155
172
|
modelId.includes("sonnet-4-6") ||
|
|
156
|
-
modelId.includes("sonnet-4.6")
|
|
173
|
+
modelId.includes("sonnet-4.6") ||
|
|
174
|
+
modelId.includes("sonnet-4-7") ||
|
|
175
|
+
modelId.includes("sonnet-4.7") ||
|
|
176
|
+
modelId.includes("haiku-4-5") ||
|
|
177
|
+
modelId.includes("haiku-4.5")
|
|
157
178
|
);
|
|
158
179
|
}
|
|
159
180
|
|
|
181
|
+
/** Map a GSD thinking level to the corresponding Anthropic effort value; model-specific for xhigh. */
|
|
160
182
|
export function mapThinkingLevelToEffort(level: string | undefined, modelId: string): AnthropicEffort {
|
|
161
183
|
switch (level) {
|
|
162
184
|
case "minimal":
|
|
@@ -168,12 +190,15 @@ export function mapThinkingLevelToEffort(level: string | undefined, modelId: str
|
|
|
168
190
|
case "high":
|
|
169
191
|
return "high";
|
|
170
192
|
case "xhigh":
|
|
171
|
-
|
|
193
|
+
if (modelId.includes("opus-4-7") || modelId.includes("opus-4.7")) return "xhigh";
|
|
194
|
+
if (modelId.includes("opus-4-6") || modelId.includes("opus-4.6")) return "max";
|
|
195
|
+
return "high";
|
|
172
196
|
default:
|
|
173
197
|
return "high";
|
|
174
198
|
}
|
|
175
199
|
}
|
|
176
200
|
|
|
201
|
+
/** Returns true for low-level network errors that are safe to retry (reset, pipe, timeout, DNS). */
|
|
177
202
|
export function isTransientNetworkError(error: unknown): boolean {
|
|
178
203
|
if (!(error instanceof Error)) return false;
|
|
179
204
|
const msg = error.message.toLowerCase();
|
|
@@ -192,6 +217,7 @@ export function isTransientNetworkError(error: unknown): boolean {
|
|
|
192
217
|
);
|
|
193
218
|
}
|
|
194
219
|
|
|
220
|
+
/** Parse `Retry-After` / rate-limit reset headers and return a suggested delay in milliseconds. */
|
|
195
221
|
export function extractRetryAfterMs(headers: Headers | { get(name: string): string | null }, errorText = ""): number | undefined {
|
|
196
222
|
const normalizeDelay = (ms: number): number | undefined => (ms > 0 ? Math.ceil(ms + 1000) : undefined);
|
|
197
223
|
|
|
@@ -223,10 +249,12 @@ export function extractRetryAfterMs(headers: Headers | { get(name: string): stri
|
|
|
223
249
|
return undefined;
|
|
224
250
|
}
|
|
225
251
|
|
|
252
|
+
/** Sanitise a tool-call ID to only alphanumeric, underscore, and hyphen characters (max 64 chars). */
|
|
226
253
|
export function normalizeToolCallId(id: string): string {
|
|
227
254
|
return id.replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 64);
|
|
228
255
|
}
|
|
229
256
|
|
|
257
|
+
/** Convert GSD messages to Anthropic SDK `MessageParam` format, applying cache control to the last user turn. */
|
|
230
258
|
export function convertMessages(
|
|
231
259
|
messages: Message[],
|
|
232
260
|
model: Model<AnthropicApi>,
|
|
@@ -394,6 +422,7 @@ export function convertMessages(
|
|
|
394
422
|
return params;
|
|
395
423
|
}
|
|
396
424
|
|
|
425
|
+
/** Convert GSD tools to Anthropic SDK tool definitions, applying cache control to the last entry. */
|
|
397
426
|
export function convertTools(
|
|
398
427
|
tools: Tool[],
|
|
399
428
|
isOAuthToken: boolean,
|
|
@@ -423,6 +452,7 @@ export function convertTools(
|
|
|
423
452
|
return result;
|
|
424
453
|
}
|
|
425
454
|
|
|
455
|
+
/** Build the `MessageCreateParamsStreaming` payload for an Anthropic API call. */
|
|
426
456
|
export function buildParams(
|
|
427
457
|
model: Model<AnthropicApi>,
|
|
428
458
|
context: Context,
|
|
@@ -503,6 +533,7 @@ export function buildParams(
|
|
|
503
533
|
return params;
|
|
504
534
|
}
|
|
505
535
|
|
|
536
|
+
/** Map an Anthropic API stop reason string to GSD's internal `StopReason`. */
|
|
506
537
|
export function mapStopReason(reason: string): StopReason {
|
|
507
538
|
switch (reason) {
|
|
508
539
|
case "end_turn":
|
|
@@ -524,6 +555,7 @@ export function mapStopReason(reason: string): StopReason {
|
|
|
524
555
|
}
|
|
525
556
|
}
|
|
526
557
|
|
|
558
|
+
/** Arguments for `processAnthropicStream`. */
|
|
527
559
|
export interface StreamAnthropicArgs {
|
|
528
560
|
client: Anthropic;
|
|
529
561
|
model: Model<AnthropicApi>;
|
|
@@ -533,6 +565,7 @@ export interface StreamAnthropicArgs {
|
|
|
533
565
|
AnthropicSdkClass?: typeof Anthropic;
|
|
534
566
|
}
|
|
535
567
|
|
|
568
|
+
/** Drive an Anthropic streaming response, pushing `AssistantMessageEvent`s into `stream` until done or error. */
|
|
536
569
|
export function processAnthropicStream(
|
|
537
570
|
stream: AssistantMessageEventStream,
|
|
538
571
|
args: StreamAnthropicArgs,
|
|
@@ -25,6 +25,24 @@ import {
|
|
|
25
25
|
export type { AnthropicEffort, AnthropicOptions };
|
|
26
26
|
export { extractRetryAfterMs };
|
|
27
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Resolve the base URL for Anthropic API requests.
|
|
30
|
+
*
|
|
31
|
+
* Resolution order:
|
|
32
|
+
* 1. ANTHROPIC_BASE_URL environment variable (if set and non-empty after trim)
|
|
33
|
+
* 2. model.baseUrl (from the model definition)
|
|
34
|
+
*
|
|
35
|
+
* This allows routing traffic through custom proxy endpoints (e.g. OpusMax,
|
|
36
|
+
* local mirrors, corporate gateways) without modifying model definitions.
|
|
37
|
+
*/
|
|
38
|
+
export function resolveAnthropicBaseUrl(model: Model<"anthropic-messages">): string {
|
|
39
|
+
const envBaseUrl = process.env.ANTHROPIC_BASE_URL?.trim();
|
|
40
|
+
if (envBaseUrl) {
|
|
41
|
+
return envBaseUrl;
|
|
42
|
+
}
|
|
43
|
+
return model.baseUrl;
|
|
44
|
+
}
|
|
45
|
+
|
|
28
46
|
let _AnthropicClass: typeof Anthropic | undefined;
|
|
29
47
|
async function getAnthropicClass(): Promise<typeof Anthropic> {
|
|
30
48
|
if (!_AnthropicClass) {
|
|
@@ -70,7 +88,7 @@ async function createClient(
|
|
|
70
88
|
const client = new AnthropicClass({
|
|
71
89
|
apiKey: null,
|
|
72
90
|
authToken: apiKey,
|
|
73
|
-
baseURL: model
|
|
91
|
+
baseURL: resolveAnthropicBaseUrl(model),
|
|
74
92
|
dangerouslyAllowBrowser: true,
|
|
75
93
|
defaultHeaders: mergeHeaders(
|
|
76
94
|
{
|
|
@@ -26,6 +26,14 @@ const TOKEN_URL = "https://auth.openai.com/oauth/token";
|
|
|
26
26
|
const REDIRECT_URI = "http://localhost:1455/auth/callback";
|
|
27
27
|
const SCOPE = "openid profile email offline_access";
|
|
28
28
|
const JWT_CLAIM_PATH = "https://api.openai.com/auth";
|
|
29
|
+
const CHATGPT_UNSUPPORTED_MODEL_IDS = new Set([
|
|
30
|
+
"gpt-5.2-codex",
|
|
31
|
+
"gpt-5.1-codex-mini",
|
|
32
|
+
"gpt-5.1-codex-max",
|
|
33
|
+
"gpt-5.1-codex",
|
|
34
|
+
"gpt-5.1",
|
|
35
|
+
"gpt-5",
|
|
36
|
+
]);
|
|
29
37
|
|
|
30
38
|
const SUCCESS_HTML = `<!doctype html>
|
|
31
39
|
<html lang="en">
|
|
@@ -454,4 +462,11 @@ export const openaiCodexOAuthProvider: OAuthProviderInterface = {
|
|
|
454
462
|
getApiKey(credentials: OAuthCredentials): string {
|
|
455
463
|
return credentials.access;
|
|
456
464
|
},
|
|
465
|
+
|
|
466
|
+
modifyModels(models) {
|
|
467
|
+
return models.filter((model) => (
|
|
468
|
+
model.provider !== "openai-codex"
|
|
469
|
+
|| !CHATGPT_UNSUPPORTED_MODEL_IDS.has(model.id)
|
|
470
|
+
));
|
|
471
|
+
},
|
|
457
472
|
};
|