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
|
@@ -32,6 +32,19 @@ test("classifyError detects rate limit from message", () => {
|
|
|
32
32
|
assert.equal(result.kind, "rate-limit");
|
|
33
33
|
});
|
|
34
34
|
|
|
35
|
+
test("classifyError treats Anthropic quota-window phrasing as transient rate-limit (#4373)", () => {
|
|
36
|
+
const result = classifyError("You've hit your limit · resets soon");
|
|
37
|
+
assert.ok(isTransient(result));
|
|
38
|
+
assert.equal(result.kind, "rate-limit");
|
|
39
|
+
assert.ok("retryAfterMs" in result && result.retryAfterMs === 60_000);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
test("classifyError treats usage-limit phrasing as transient rate-limit (#4373)", () => {
|
|
43
|
+
const result = classifyError("usage limit reached for this workspace");
|
|
44
|
+
assert.ok(isTransient(result));
|
|
45
|
+
assert.equal(result.kind, "rate-limit");
|
|
46
|
+
});
|
|
47
|
+
|
|
35
48
|
test("classifyError treats OpenRouter affordability errors as transient rate-limit class", () => {
|
|
36
49
|
const result = classifyError(
|
|
37
50
|
"402 This request requires more credits, or fewer max_tokens. You requested up to 32000 tokens, but can only afford 329.",
|
|
@@ -202,6 +215,10 @@ test("isTransientNetworkError detects DNS errors", () => {
|
|
|
202
215
|
assert.ok(isTransientNetworkError("dns resolution failed"));
|
|
203
216
|
});
|
|
204
217
|
|
|
218
|
+
test("isTransientNetworkError detects unexpected EOF", () => {
|
|
219
|
+
assert.ok(isTransientNetworkError("unexpected EOF"));
|
|
220
|
+
});
|
|
221
|
+
|
|
205
222
|
test("isTransientNetworkError rejects auth errors", () => {
|
|
206
223
|
assert.ok(!isTransientNetworkError("unauthorized: invalid API key"));
|
|
207
224
|
});
|
|
@@ -455,6 +472,22 @@ test("agent-end-recovery.ts resumes transient provider pauses through startAuto
|
|
|
455
472
|
);
|
|
456
473
|
});
|
|
457
474
|
|
|
475
|
+
test("agent-end-recovery.ts does not defer rate-limit errors to core retry handler before fallback (#4373)", () => {
|
|
476
|
+
const src = readFileSync(join(__dirname, "..", "bootstrap", "agent-end-recovery.ts"), "utf-8");
|
|
477
|
+
assert.ok(
|
|
478
|
+
src.includes('if (isTransient(cls) && cls.kind !== "rate-limit")'),
|
|
479
|
+
"rate-limit errors must bypass transient core-retry deferral so fallback can execute (#4373)",
|
|
480
|
+
);
|
|
481
|
+
});
|
|
482
|
+
|
|
483
|
+
test("agent-end-recovery.ts updates dashboard dispatched model after fallback switch", () => {
|
|
484
|
+
const src = readFileSync(join(__dirname, "..", "bootstrap", "agent-end-recovery.ts"), "utf-8");
|
|
485
|
+
assert.ok(
|
|
486
|
+
src.includes("setCurrentDispatchedModelId"),
|
|
487
|
+
"agent-end-recovery.ts should update currentDispatchedModelId when recovery switches model",
|
|
488
|
+
);
|
|
489
|
+
});
|
|
490
|
+
|
|
458
491
|
// ── Codex error extraction (#1166) ──────────────────────────────────────────
|
|
459
492
|
|
|
460
493
|
test("openai-codex-responses.ts extracts nested error fields", () => {
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
resetWriteGateState,
|
|
11
11
|
shouldBlockContextArtifactSave,
|
|
12
12
|
} from "../bootstrap/write-gate.ts";
|
|
13
|
+
import { toRoundResultResponse } from "../../remote-questions/manager.ts";
|
|
13
14
|
|
|
14
15
|
function makeTempDir(prefix: string): string {
|
|
15
16
|
const dir = join(
|
|
@@ -95,3 +96,69 @@ test("register-hooks unlocks milestone depth verification from question id witho
|
|
|
95
96
|
"question-id milestone inference should unlock the matching milestone context write",
|
|
96
97
|
);
|
|
97
98
|
});
|
|
99
|
+
|
|
100
|
+
test("register-hooks clears depth gate when remote (Telegram/Slack/Discord) answer is normalized (#4406)", async (t) => {
|
|
101
|
+
const dir = makeTempDir("remote");
|
|
102
|
+
const originalCwd = process.cwd();
|
|
103
|
+
process.chdir(dir);
|
|
104
|
+
resetWriteGateState();
|
|
105
|
+
|
|
106
|
+
t.after(() => {
|
|
107
|
+
resetWriteGateState();
|
|
108
|
+
process.chdir(originalCwd);
|
|
109
|
+
rmSync(dir, { recursive: true, force: true });
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
const handlers = new Map<string, Array<(event: any, ctx?: any) => Promise<void> | void>>();
|
|
113
|
+
const pi = {
|
|
114
|
+
on(event: string, handler: (event: any, ctx?: any) => Promise<void> | void) {
|
|
115
|
+
const existing = handlers.get(event) ?? [];
|
|
116
|
+
existing.push(handler);
|
|
117
|
+
handlers.set(event, existing);
|
|
118
|
+
},
|
|
119
|
+
} as any;
|
|
120
|
+
|
|
121
|
+
registerHooks(pi, []);
|
|
122
|
+
|
|
123
|
+
const questionId = "depth_verification_M002_confirm";
|
|
124
|
+
const questions = [
|
|
125
|
+
{
|
|
126
|
+
id: questionId,
|
|
127
|
+
question: "Do you agree?",
|
|
128
|
+
options: [
|
|
129
|
+
{ label: "Yes, you got it (Recommended)" },
|
|
130
|
+
{ label: "Needs adjustment" },
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
];
|
|
134
|
+
|
|
135
|
+
for (const handler of handlers.get("tool_call") ?? []) {
|
|
136
|
+
await handler({ toolName: "ask_user_questions", input: { questions } });
|
|
137
|
+
}
|
|
138
|
+
assert.equal(getPendingGate(), questionId);
|
|
139
|
+
|
|
140
|
+
// Simulate the normalized response the remote manager now emits:
|
|
141
|
+
// a Telegram button press returns a RemoteAnswer that is fed through
|
|
142
|
+
// toRoundResultResponse before reaching details.response.
|
|
143
|
+
const remoteAnswer = {
|
|
144
|
+
answers: {
|
|
145
|
+
[questionId]: { answers: ["Yes, you got it (Recommended)"] },
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
const normalized = toRoundResultResponse(remoteAnswer);
|
|
149
|
+
|
|
150
|
+
for (const handler of handlers.get("tool_result") ?? []) {
|
|
151
|
+
await handler({
|
|
152
|
+
toolName: "ask_user_questions",
|
|
153
|
+
input: { questions },
|
|
154
|
+
details: { response: normalized },
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
assert.equal(getPendingGate(), null, "normalized remote answer must clear the gate");
|
|
159
|
+
assert.equal(
|
|
160
|
+
shouldBlockContextArtifactSave("CONTEXT", "M002").block,
|
|
161
|
+
false,
|
|
162
|
+
"remote confirmation must unlock the matching milestone context write",
|
|
163
|
+
);
|
|
164
|
+
});
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* remote-notification-from-desktop.test.ts
|
|
3
|
+
*
|
|
4
|
+
* Regression guard: sendDesktopNotification must fire sendRemoteNotification
|
|
5
|
+
* as a fire-and-forget side-effect so that Telegram/Slack/Discord channels
|
|
6
|
+
* receive the same events as native desktop notifications.
|
|
7
|
+
*
|
|
8
|
+
* Testing strategy (structural analysis):
|
|
9
|
+
* node:test does not support mock.module without --experimental-test-module-mocks,
|
|
10
|
+
* so we use the same source-code structural approach established in this codebase
|
|
11
|
+
* (see session-start-footer.test.ts). We read notifications.ts and assert that:
|
|
12
|
+
* 1. It imports sendRemoteNotification from the remote-questions/notify module.
|
|
13
|
+
* 2. The sendDesktopNotification function body calls sendRemoteNotification
|
|
14
|
+
* with title and message as arguments.
|
|
15
|
+
* 3. The call uses the void fire-and-forget pattern with a .catch(() => {})
|
|
16
|
+
* suppressor so that async failures never break the synchronous caller.
|
|
17
|
+
*
|
|
18
|
+
* Relates to #4341.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import test from "node:test";
|
|
22
|
+
import assert from "node:assert/strict";
|
|
23
|
+
import { readFileSync } from "node:fs";
|
|
24
|
+
import { join, dirname } from "node:path";
|
|
25
|
+
import { fileURLToPath } from "node:url";
|
|
26
|
+
|
|
27
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
28
|
+
const SOURCE = readFileSync(join(__dirname, "..", "notifications.ts"), "utf-8");
|
|
29
|
+
|
|
30
|
+
test("notifications.ts imports sendRemoteNotification from remote-questions/notify", () => {
|
|
31
|
+
const hasImport =
|
|
32
|
+
SOURCE.includes('from "../remote-questions/notify.js"') ||
|
|
33
|
+
SOURCE.includes("from '../remote-questions/notify.js'");
|
|
34
|
+
assert.ok(
|
|
35
|
+
hasImport,
|
|
36
|
+
"notifications.ts must import from '../remote-questions/notify.js'",
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
const importLine = SOURCE.split("\n").find(
|
|
40
|
+
(line) =>
|
|
41
|
+
line.includes("sendRemoteNotification") &&
|
|
42
|
+
(line.includes("remote-questions/notify") || line.includes("remote-questions/notify.js")),
|
|
43
|
+
);
|
|
44
|
+
assert.ok(
|
|
45
|
+
importLine,
|
|
46
|
+
"The import statement must include sendRemoteNotification from the remote-questions/notify module",
|
|
47
|
+
);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test("sendDesktopNotification calls sendRemoteNotification(title, message)", () => {
|
|
51
|
+
// Extract the body of sendDesktopNotification — from its opening brace to the
|
|
52
|
+
// closing brace at the same indentation level.
|
|
53
|
+
const fnStart = SOURCE.indexOf("export function sendDesktopNotification(");
|
|
54
|
+
assert.ok(fnStart > -1, "sendDesktopNotification must be present in notifications.ts");
|
|
55
|
+
|
|
56
|
+
// Find the next exported function/const after sendDesktopNotification to bound the search.
|
|
57
|
+
const nextExportIdx = SOURCE.indexOf("\nexport ", fnStart + 1);
|
|
58
|
+
const fnBody = nextExportIdx > -1 ? SOURCE.slice(fnStart, nextExportIdx) : SOURCE.slice(fnStart);
|
|
59
|
+
|
|
60
|
+
assert.ok(
|
|
61
|
+
fnBody.includes("sendRemoteNotification"),
|
|
62
|
+
"sendDesktopNotification must call sendRemoteNotification",
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
assert.ok(
|
|
66
|
+
fnBody.includes("sendRemoteNotification(title") || fnBody.includes("sendRemoteNotification(title,"),
|
|
67
|
+
"sendRemoteNotification must be called with title as first argument",
|
|
68
|
+
);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
test("sendRemoteNotification is invoked as void fire-and-forget with .catch(() => {})", () => {
|
|
72
|
+
const fnStart = SOURCE.indexOf("export function sendDesktopNotification(");
|
|
73
|
+
const nextExportIdx = SOURCE.indexOf("\nexport ", fnStart + 1);
|
|
74
|
+
const fnBody = nextExportIdx > -1 ? SOURCE.slice(fnStart, nextExportIdx) : SOURCE.slice(fnStart);
|
|
75
|
+
|
|
76
|
+
assert.ok(
|
|
77
|
+
fnBody.includes("void sendRemoteNotification("),
|
|
78
|
+
"sendRemoteNotification must be called with void (fire-and-forget)",
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
assert.ok(
|
|
82
|
+
fnBody.includes(".catch("),
|
|
83
|
+
"sendRemoteNotification call must be followed by .catch() to suppress unhandled-rejection warnings",
|
|
84
|
+
);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
test("sendRemoteNotification call appears before shouldSendDesktopNotification guard", () => {
|
|
88
|
+
// Regression guard for the HIGH-severity bug where remote notifications were
|
|
89
|
+
// gated behind the desktop-notification preference check. Users who disable
|
|
90
|
+
// desktop notifications must still receive Telegram/Slack/Discord messages.
|
|
91
|
+
const fnStart = SOURCE.indexOf("export function sendDesktopNotification(");
|
|
92
|
+
assert.ok(fnStart > -1, "sendDesktopNotification must be present in notifications.ts");
|
|
93
|
+
|
|
94
|
+
const nextExportIdx = SOURCE.indexOf("\nexport ", fnStart + 1);
|
|
95
|
+
const fnBody = nextExportIdx > -1 ? SOURCE.slice(fnStart, nextExportIdx) : SOURCE.slice(fnStart);
|
|
96
|
+
|
|
97
|
+
const remoteCallIdx = fnBody.indexOf("sendRemoteNotification(");
|
|
98
|
+
const guardIdx = fnBody.indexOf("shouldSendDesktopNotification(");
|
|
99
|
+
|
|
100
|
+
assert.ok(remoteCallIdx > -1, "sendRemoteNotification must be called inside sendDesktopNotification");
|
|
101
|
+
assert.ok(guardIdx > -1, "shouldSendDesktopNotification guard must be present inside sendDesktopNotification");
|
|
102
|
+
|
|
103
|
+
assert.ok(
|
|
104
|
+
remoteCallIdx < guardIdx,
|
|
105
|
+
`sendRemoteNotification (pos ${remoteCallIdx}) must appear BEFORE the shouldSendDesktopNotification guard (pos ${guardIdx}) so that remote channels fire even when desktop notifications are disabled`,
|
|
106
|
+
);
|
|
107
|
+
});
|
|
@@ -95,6 +95,15 @@ describe('requirements', () => {
|
|
|
95
95
|
assert.ok(report.issues.some(issue => issue.code === "active_requirement_missing_owner"), "doctor flags missing owner");
|
|
96
96
|
});
|
|
97
97
|
|
|
98
|
+
// #4414: active_requirement_missing_owner is a planning-hygiene signal,
|
|
99
|
+
// not a correctness blocker — severity must be warning, not error.
|
|
100
|
+
test('#4414: active_requirement_missing_owner is a warning, not an error', async () => {
|
|
101
|
+
const report = await runGSDDoctor(base);
|
|
102
|
+
const issue = report.issues.find(i => i.code === "active_requirement_missing_owner");
|
|
103
|
+
assert.ok(issue, "issue is present");
|
|
104
|
+
assert.equal(issue!.severity, "warning", "severity downgraded so doctor report.ok is not flipped to false");
|
|
105
|
+
});
|
|
106
|
+
|
|
98
107
|
after(() => {
|
|
99
108
|
rmSync(base, { recursive: true, force: true });
|
|
100
109
|
});
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* session-start-footer.test.ts
|
|
3
|
+
*
|
|
4
|
+
* Verifies that register-hooks.ts suppresses the built-in footer by calling
|
|
5
|
+
* ctx.ui.setFooter(hideFooter) in both session_start and session_switch when
|
|
6
|
+
* isAutoActive() is true.
|
|
7
|
+
*
|
|
8
|
+
* Testing strategy:
|
|
9
|
+
* Two layers:
|
|
10
|
+
* 1. Source-code regression guard: ensures the guard and setFooter call are
|
|
11
|
+
* structurally present in register-hooks.ts for both event handlers.
|
|
12
|
+
* (node:test does not support mock.module without --experimental-test-module-mocks,
|
|
13
|
+
* so structural analysis is the correct approach here.)
|
|
14
|
+
* 2. Behavioral integration test: fires the live session_start handler with a
|
|
15
|
+
* fake ctx when isAutoActive() is false (its default at test time) and
|
|
16
|
+
* confirms setFooter is NOT called — verifying the guard is conditional.
|
|
17
|
+
*
|
|
18
|
+
* Relates to #4314.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import test from "node:test";
|
|
22
|
+
import assert from "node:assert/strict";
|
|
23
|
+
import { mkdirSync, readFileSync, rmSync } from "node:fs";
|
|
24
|
+
import { join, dirname } from "node:path";
|
|
25
|
+
import { tmpdir } from "node:os";
|
|
26
|
+
import { fileURLToPath } from "node:url";
|
|
27
|
+
|
|
28
|
+
import { registerHooks } from "../bootstrap/register-hooks.ts";
|
|
29
|
+
|
|
30
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
31
|
+
const HOOKS_SOURCE = readFileSync(
|
|
32
|
+
join(__dirname, "..", "bootstrap", "register-hooks.ts"),
|
|
33
|
+
"utf-8",
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
// ─── Source-code regression guards ──────────────────────────────────────────
|
|
37
|
+
|
|
38
|
+
test("register-hooks.ts imports hideFooter from auto-dashboard", () => {
|
|
39
|
+
assert.ok(
|
|
40
|
+
HOOKS_SOURCE.includes('import { hideFooter } from "../auto-dashboard.js"') ||
|
|
41
|
+
HOOKS_SOURCE.includes("import { hideFooter } from '../auto-dashboard.js'"),
|
|
42
|
+
"register-hooks.ts must import hideFooter from auto-dashboard.js",
|
|
43
|
+
);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test("session_start handler calls ctx.ui.setFooter(hideFooter) when isAutoActive()", () => {
|
|
47
|
+
// Locate the session_start handler body (up to the next pi.on call)
|
|
48
|
+
const sessionStartIdx = HOOKS_SOURCE.indexOf('"session_start"');
|
|
49
|
+
assert.ok(sessionStartIdx > -1, "session_start handler must exist");
|
|
50
|
+
|
|
51
|
+
const sessionSwitchIdx = HOOKS_SOURCE.indexOf('"session_switch"');
|
|
52
|
+
assert.ok(sessionSwitchIdx > sessionStartIdx, "session_switch handler must follow session_start");
|
|
53
|
+
|
|
54
|
+
const sessionStartBody = HOOKS_SOURCE.slice(sessionStartIdx, sessionSwitchIdx);
|
|
55
|
+
|
|
56
|
+
assert.ok(
|
|
57
|
+
sessionStartBody.includes("isAutoActive()"),
|
|
58
|
+
"session_start handler must call isAutoActive()",
|
|
59
|
+
);
|
|
60
|
+
assert.ok(
|
|
61
|
+
sessionStartBody.includes("ctx.ui.setFooter(hideFooter)"),
|
|
62
|
+
"session_start handler must call ctx.ui.setFooter(hideFooter)",
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
// Guard must wrap the setFooter call
|
|
66
|
+
const guardIdx = sessionStartBody.indexOf("isAutoActive()");
|
|
67
|
+
const setFooterIdx = sessionStartBody.indexOf("ctx.ui.setFooter(hideFooter)");
|
|
68
|
+
assert.ok(
|
|
69
|
+
guardIdx < setFooterIdx,
|
|
70
|
+
"isAutoActive() guard must appear before ctx.ui.setFooter(hideFooter) in session_start",
|
|
71
|
+
);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
test("session_switch handler calls ctx.ui.setFooter(hideFooter) when isAutoActive()", () => {
|
|
75
|
+
const sessionSwitchIdx = HOOKS_SOURCE.indexOf('"session_switch"');
|
|
76
|
+
assert.ok(sessionSwitchIdx > -1, "session_switch handler must exist");
|
|
77
|
+
|
|
78
|
+
const beforeAgentStartIdx = HOOKS_SOURCE.indexOf('"before_agent_start"');
|
|
79
|
+
assert.ok(beforeAgentStartIdx > sessionSwitchIdx, "before_agent_start handler must follow session_switch");
|
|
80
|
+
|
|
81
|
+
const sessionSwitchBody = HOOKS_SOURCE.slice(sessionSwitchIdx, beforeAgentStartIdx);
|
|
82
|
+
|
|
83
|
+
assert.ok(
|
|
84
|
+
sessionSwitchBody.includes("isAutoActive()"),
|
|
85
|
+
"session_switch handler must call isAutoActive()",
|
|
86
|
+
);
|
|
87
|
+
assert.ok(
|
|
88
|
+
sessionSwitchBody.includes("ctx.ui.setFooter(hideFooter)"),
|
|
89
|
+
"session_switch handler must call ctx.ui.setFooter(hideFooter)",
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
const guardIdx = sessionSwitchBody.indexOf("isAutoActive()");
|
|
93
|
+
const setFooterIdx = sessionSwitchBody.indexOf("ctx.ui.setFooter(hideFooter)");
|
|
94
|
+
assert.ok(
|
|
95
|
+
guardIdx < setFooterIdx,
|
|
96
|
+
"isAutoActive() guard must appear before ctx.ui.setFooter(hideFooter) in session_switch",
|
|
97
|
+
);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// ─── Behavioral test: setFooter NOT called when auto-mode is inactive ────────
|
|
101
|
+
|
|
102
|
+
test("session_start does NOT call setFooter when isAutoActive() is false (default)", async (t) => {
|
|
103
|
+
const dir = join(
|
|
104
|
+
tmpdir(),
|
|
105
|
+
`gsd-footer-test-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
|
|
106
|
+
);
|
|
107
|
+
mkdirSync(dir, { recursive: true });
|
|
108
|
+
|
|
109
|
+
const originalCwd = process.cwd();
|
|
110
|
+
process.chdir(dir);
|
|
111
|
+
t.after(() => {
|
|
112
|
+
process.chdir(originalCwd);
|
|
113
|
+
try { rmSync(dir, { recursive: true, force: true }); } catch { /* best-effort */ }
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
let setFooterCallCount = 0;
|
|
117
|
+
|
|
118
|
+
const handlers = new Map<string, (event: unknown, ctx: any) => Promise<void> | void>();
|
|
119
|
+
const pi = {
|
|
120
|
+
on(event: string, handler: (event: unknown, ctx: any) => Promise<void> | void) {
|
|
121
|
+
handlers.set(event, handler);
|
|
122
|
+
},
|
|
123
|
+
} as any;
|
|
124
|
+
|
|
125
|
+
registerHooks(pi, []);
|
|
126
|
+
|
|
127
|
+
const sessionStart = handlers.get("session_start");
|
|
128
|
+
assert.ok(sessionStart, "session_start handler must be registered");
|
|
129
|
+
|
|
130
|
+
await sessionStart!({}, {
|
|
131
|
+
hasUI: true,
|
|
132
|
+
ui: {
|
|
133
|
+
notify: () => {},
|
|
134
|
+
setStatus: () => {},
|
|
135
|
+
setFooter: (_footer: unknown) => {
|
|
136
|
+
setFooterCallCount++;
|
|
137
|
+
},
|
|
138
|
+
setWorkingMessage: () => {},
|
|
139
|
+
onTerminalInput: () => () => {},
|
|
140
|
+
setWidget: () => {},
|
|
141
|
+
},
|
|
142
|
+
sessionManager: { getSessionId: () => null },
|
|
143
|
+
model: null,
|
|
144
|
+
} as any);
|
|
145
|
+
|
|
146
|
+
// isAutoActive() is false at test time (no auto session started),
|
|
147
|
+
// so setFooter must not be called.
|
|
148
|
+
assert.equal(
|
|
149
|
+
setFooterCallCount,
|
|
150
|
+
0,
|
|
151
|
+
"setFooter must NOT be called when isAutoActive() returns false",
|
|
152
|
+
);
|
|
153
|
+
});
|
|
@@ -31,18 +31,30 @@ describe("slice CONTEXT.md injection into prompt builders (#3452)", () => {
|
|
|
31
31
|
const fnStart = source.indexOf(`export async function ${builder}`);
|
|
32
32
|
assert.ok(fnStart !== -1, `${builder} should exist in auto-prompts.ts`);
|
|
33
33
|
|
|
34
|
-
// Get a reasonable chunk after the function start
|
|
34
|
+
// Get a reasonable chunk after the function start
|
|
35
35
|
const chunk = source.slice(fnStart, fnStart + 3000);
|
|
36
36
|
|
|
37
|
+
// ADR-011: buildPlanSlicePrompt / buildRefineSlicePrompt now delegate to
|
|
38
|
+
// a shared helper (renderSlicePrompt) that performs the slice CONTEXT
|
|
39
|
+
// resolve. When a builder delegates, scan the helper's body instead.
|
|
40
|
+
const delegatesToHelper = chunk.includes("renderSlicePrompt(");
|
|
41
|
+
const bodyToCheck = delegatesToHelper
|
|
42
|
+
? (() => {
|
|
43
|
+
const helperStart = source.indexOf("async function renderSlicePrompt");
|
|
44
|
+
assert.ok(helperStart !== -1, "renderSlicePrompt helper must exist");
|
|
45
|
+
return source.slice(helperStart, helperStart + 3000);
|
|
46
|
+
})()
|
|
47
|
+
: chunk;
|
|
48
|
+
|
|
37
49
|
// Must resolve the slice CONTEXT path
|
|
38
50
|
assert.ok(
|
|
39
|
-
|
|
40
|
-
`${builder} should call resolveSliceFile with "CONTEXT"`,
|
|
51
|
+
bodyToCheck.includes('resolveSliceFile(base, mid,') && bodyToCheck.includes('"CONTEXT"'),
|
|
52
|
+
`${builder} should call resolveSliceFile with "CONTEXT" (directly or via renderSlicePrompt)`,
|
|
41
53
|
);
|
|
42
54
|
|
|
43
55
|
// Must inline it with inlineFileOptional
|
|
44
56
|
assert.ok(
|
|
45
|
-
|
|
57
|
+
bodyToCheck.includes("Slice Context"),
|
|
46
58
|
`${builder} should inline slice CONTEXT with a "Slice Context" label`,
|
|
47
59
|
);
|
|
48
60
|
});
|
|
@@ -93,6 +93,8 @@ function makeSliceRow(id: string, overrides: Partial<SliceRow> = {}): SliceRow {
|
|
|
93
93
|
integration_closure: "",
|
|
94
94
|
observability_impact: "",
|
|
95
95
|
replan_triggered_at: null,
|
|
96
|
+
is_sketch: 0,
|
|
97
|
+
sketch_scope: "",
|
|
96
98
|
...overrides,
|
|
97
99
|
};
|
|
98
100
|
}
|
|
@@ -295,6 +297,7 @@ describe("#2945 Bug 3: mergeAndExit must teardown worktree after successful merg
|
|
|
295
297
|
loadEffectiveGSDPreferences: () => undefined,
|
|
296
298
|
invalidateAllCaches: () => {},
|
|
297
299
|
captureIntegrationBranch: () => {},
|
|
300
|
+
enterBranchModeForMilestone: () => {},
|
|
298
301
|
};
|
|
299
302
|
|
|
300
303
|
// Import and create resolver
|
|
@@ -79,6 +79,21 @@ test("Rule 2: interrupted sequence does not trigger", () => {
|
|
|
79
79
|
);
|
|
80
80
|
});
|
|
81
81
|
|
|
82
|
+
test("Rule 2b: same unit repeated 3 times in the window triggers stuck even with an intervening unit", () => {
|
|
83
|
+
const result = detectStuck([
|
|
84
|
+
{ key: "execute-task/M002/S03/T01" },
|
|
85
|
+
{ key: "execute-task/M002/S03/T01" },
|
|
86
|
+
{ key: "reassess-roadmap/M002/S02" },
|
|
87
|
+
{ key: "execute-task/M002/S03/T01" },
|
|
88
|
+
]);
|
|
89
|
+
assert.notEqual(result, null);
|
|
90
|
+
assert.equal(result!.stuck, true);
|
|
91
|
+
assert.ok(
|
|
92
|
+
result!.reason.includes("3 times in last 4 attempts"),
|
|
93
|
+
`reason was: ${result!.reason}`,
|
|
94
|
+
);
|
|
95
|
+
});
|
|
96
|
+
|
|
82
97
|
// ─── Rule 3: Oscillation A→B→A→B ─────────────────────────────────────────────
|
|
83
98
|
|
|
84
99
|
test("Rule 3: A-B-A-B oscillation triggers stuck", () => {
|
|
@@ -50,6 +50,11 @@ const taskRow: TaskRow = {
|
|
|
50
50
|
observability_impact: "",
|
|
51
51
|
full_plan_md: "",
|
|
52
52
|
sequence: 1,
|
|
53
|
+
blocker_source: "",
|
|
54
|
+
escalation_pending: 0,
|
|
55
|
+
escalation_awaiting_review: 0,
|
|
56
|
+
escalation_artifact_path: null,
|
|
57
|
+
escalation_override_applied_at: null,
|
|
53
58
|
};
|
|
54
59
|
|
|
55
60
|
const verificationEvidence = [
|
|
@@ -64,8 +64,9 @@ test("uok contracts include required DAG node kinds", () => {
|
|
|
64
64
|
"team-worker",
|
|
65
65
|
"verification",
|
|
66
66
|
"reprocess",
|
|
67
|
+
"refine",
|
|
67
68
|
];
|
|
68
|
-
assert.deepEqual(required.length,
|
|
69
|
+
assert.deepEqual(required.length, 7);
|
|
69
70
|
});
|
|
70
71
|
|
|
71
72
|
test("uok audit envelope includes trace/turn/causality fields", () => {
|
|
@@ -7,6 +7,37 @@ test("uok flags default to enabled when preference is unset", () => {
|
|
|
7
7
|
const flags = resolveUokFlags(undefined);
|
|
8
8
|
assert.equal(flags.enabled, true);
|
|
9
9
|
assert.equal(flags.legacyFallback, false);
|
|
10
|
+
assert.equal(flags.gates, true);
|
|
11
|
+
assert.equal(flags.modelPolicy, true);
|
|
12
|
+
assert.equal(flags.executionGraph, true);
|
|
13
|
+
assert.equal(flags.gitops, true);
|
|
14
|
+
assert.equal(flags.auditUnified, true);
|
|
15
|
+
assert.equal(flags.planV2, true);
|
|
16
|
+
assert.equal(flags.gitopsTurnAction, "commit");
|
|
17
|
+
assert.equal(flags.gitopsTurnPush, false);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test("uok nested flags support explicit opt-out", () => {
|
|
21
|
+
const flags = resolveUokFlags({
|
|
22
|
+
uok: {
|
|
23
|
+
enabled: true,
|
|
24
|
+
gates: { enabled: false },
|
|
25
|
+
model_policy: { enabled: false },
|
|
26
|
+
execution_graph: { enabled: false },
|
|
27
|
+
gitops: { enabled: false, turn_action: "commit", turn_push: true },
|
|
28
|
+
audit_unified: { enabled: false },
|
|
29
|
+
plan_v2: { enabled: false },
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
assert.equal(flags.enabled, true);
|
|
33
|
+
assert.equal(flags.gates, false);
|
|
34
|
+
assert.equal(flags.modelPolicy, false);
|
|
35
|
+
assert.equal(flags.executionGraph, false);
|
|
36
|
+
assert.equal(flags.gitops, false);
|
|
37
|
+
assert.equal(flags.auditUnified, false);
|
|
38
|
+
assert.equal(flags.planV2, false);
|
|
39
|
+
assert.equal(flags.gitopsTurnAction, "commit");
|
|
40
|
+
assert.equal(flags.gitopsTurnPush, true);
|
|
10
41
|
});
|
|
11
42
|
|
|
12
43
|
test("uok legacy fallback preference forces legacy path", () => {
|
|
@@ -36,4 +67,3 @@ test("uok legacy fallback env var forces legacy path", () => {
|
|
|
36
67
|
else process.env.GSD_UOK_FORCE_LEGACY = previous;
|
|
37
68
|
}
|
|
38
69
|
});
|
|
39
|
-
|