gsd-pi 2.80.0-dev.c5f2443b3 → 2.80.0-dev.d4fc28e6b
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 +4 -2
- package/dist/cli.js +0 -19
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +2 -2
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +29 -0
- package/dist/resources/extensions/github-sync/templates.js +39 -8
- package/dist/resources/extensions/gsd/auto/loop.js +119 -18
- package/dist/resources/extensions/gsd/auto/phases.js +212 -135
- package/dist/resources/extensions/gsd/auto/resolve.js +29 -0
- package/dist/resources/extensions/gsd/auto/run-unit.js +41 -45
- package/dist/resources/extensions/gsd/auto/session.js +8 -0
- package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +33 -1
- package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +9 -1
- package/dist/resources/extensions/gsd/auto-dashboard.js +51 -15
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +5 -32
- package/dist/resources/extensions/gsd/auto-dispatch.js +26 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +27 -14
- package/dist/resources/extensions/gsd/auto-prompts.js +214 -17
- package/dist/resources/extensions/gsd/auto-recovery.js +197 -9
- package/dist/resources/extensions/gsd/auto-start.js +199 -9
- package/dist/resources/extensions/gsd/auto-supervisor.js +8 -1
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +2 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +111 -1
- package/dist/resources/extensions/gsd/auto.js +95 -27
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +103 -3
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +49 -36
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +15 -5
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +33 -20
- package/dist/resources/extensions/gsd/bootstrap/journal-tools.js +7 -1
- package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +9 -3
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +8 -2
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +330 -55
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +82 -23
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +129 -1
- package/dist/resources/extensions/gsd/clean-root-preflight.js +65 -9
- package/dist/resources/extensions/gsd/commands/dispatcher.js +5 -0
- package/dist/resources/extensions/gsd/commands-extract-learnings.js +17 -12
- package/dist/resources/extensions/gsd/commands-handlers.js +23 -9
- package/dist/resources/extensions/gsd/context-budget.js +37 -2
- package/dist/resources/extensions/gsd/crash-recovery.js +56 -10
- package/dist/resources/extensions/gsd/custom-workflow-engine.js +22 -2
- package/dist/resources/extensions/gsd/db/unit-dispatches.js +92 -0
- package/dist/resources/extensions/gsd/db-base-schema.js +18 -2
- package/dist/resources/extensions/gsd/db-migration-steps.js +22 -0
- package/dist/resources/extensions/gsd/detection.js +106 -0
- package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +2 -0
- package/dist/resources/extensions/gsd/git-service.js +36 -4
- package/dist/resources/extensions/gsd/graph.js +9 -3
- package/dist/resources/extensions/gsd/gsd-db.js +146 -13
- package/dist/resources/extensions/gsd/guided-flow.js +129 -44
- package/dist/resources/extensions/gsd/memory-store.js +69 -12
- package/dist/resources/extensions/gsd/migrate/command.js +40 -1
- package/dist/resources/extensions/gsd/migration-auto-check.js +87 -0
- package/dist/resources/extensions/gsd/native-git-bridge.js +32 -8
- package/dist/resources/extensions/gsd/orphan-stash-audit.js +101 -0
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +13 -3
- package/dist/resources/extensions/gsd/planning-path-scope.js +26 -0
- package/dist/resources/extensions/gsd/pr-evidence.js +57 -16
- package/dist/resources/extensions/gsd/pre-execution-checks.js +22 -0
- package/dist/resources/extensions/gsd/prompt-loader.js +28 -2
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +21 -19
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/execute-task.md +4 -2
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -5
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +2 -2
- package/dist/resources/extensions/gsd/quick.js +34 -2
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +10 -2
- package/dist/resources/extensions/gsd/tools/context-mode-tool-result.js +15 -0
- package/dist/resources/extensions/gsd/tools/exec-search-tool.js +5 -0
- package/dist/resources/extensions/gsd/tools/exec-tool.js +3 -15
- package/dist/resources/extensions/gsd/tools/memory-tools.js +1 -0
- package/dist/resources/extensions/gsd/tools/plan-slice.js +9 -0
- package/dist/resources/extensions/gsd/tools/plan-task.js +9 -0
- package/dist/resources/extensions/gsd/tools/resume-tool.js +5 -0
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +1 -1
- package/dist/resources/extensions/gsd/unit-context-composer.js +12 -3
- package/dist/resources/extensions/gsd/unit-runtime.js +22 -0
- package/dist/resources/extensions/gsd/workflow-protocol.js +131 -0
- package/dist/resources/extensions/gsd/working-output-messages.js +64 -0
- package/dist/resources/extensions/gsd/worktree-manager.js +16 -14
- package/dist/resources/extensions/gsd/worktree-resolver.js +68 -21
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +11 -11
- 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.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +11 -11
- package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- 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/{8336.6f6f30e410419aff.js → 8336.631939fb583761fa.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{webpack-d82dbee6356c1733.js → webpack-0481f1221120a7c6.js} +1 -1
- package/dist/welcome-screen.d.ts +2 -0
- package/dist/welcome-screen.js +9 -7
- package/package.json +12 -8
- package/packages/contracts/package.json +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +22 -17
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/src/workflow-tools.test.ts +75 -2
- package/packages/mcp-server/src/workflow-tools.ts +30 -16
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +4 -1
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/agent.d.ts +5 -0
- package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent.js +2 -0
- package/packages/pi-agent-core/dist/agent.js.map +1 -1
- package/packages/pi-agent-core/dist/index.d.ts +1 -0
- package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/index.js +2 -0
- package/packages/pi-agent-core/dist/index.js.map +1 -1
- package/packages/pi-agent-core/dist/token-audit.d.ts +47 -0
- package/packages/pi-agent-core/dist/token-audit.d.ts.map +1 -0
- package/packages/pi-agent-core/dist/token-audit.js +221 -0
- package/packages/pi-agent-core/dist/token-audit.js.map +1 -0
- package/packages/pi-agent-core/dist/types.d.ts +9 -0
- package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/types.js.map +1 -1
- package/packages/pi-agent-core/src/agent-loop.test.ts +128 -0
- package/packages/pi-agent-core/src/agent-loop.ts +4 -1
- package/packages/pi-agent-core/src/agent.ts +8 -0
- package/packages/pi-agent-core/src/index.ts +2 -0
- package/packages/pi-agent-core/src/token-audit.test.ts +189 -0
- package/packages/pi-agent-core/src/token-audit.ts +287 -0
- package/packages/pi-agent-core/src/types.ts +14 -0
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/models/fake-model.d.ts +12 -0
- package/packages/pi-ai/dist/models/fake-model.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/fake-model.js +27 -0
- package/packages/pi-ai/dist/models/fake-model.js.map +1 -0
- package/packages/pi-ai/dist/models/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/index.js +8 -0
- package/packages/pi-ai/dist/models/index.js.map +1 -1
- package/packages/pi-ai/dist/providers/fake.d.ts +42 -0
- package/packages/pi-ai/dist/providers/fake.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/fake.js +319 -0
- package/packages/pi-ai/dist/providers/fake.js.map +1 -0
- package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/register-builtins.js +24 -0
- package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
- package/packages/pi-ai/src/models/fake-model.ts +30 -0
- package/packages/pi-ai/src/models/index.ts +9 -0
- package/packages/pi-ai/src/providers/fake.ts +376 -0
- package/packages/pi-ai/src/providers/register-builtins.ts +23 -0
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +32 -0
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js +18 -0
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +12 -0
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +44 -7
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +76 -0
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +11 -0
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js +9 -0
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.js +103 -0
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts +15 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.js +66 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.js +24 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +8 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +20 -7
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +102 -3
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +39 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/hooks-runner.test.js +2 -0
- package/packages/pi-coding-agent/dist/core/hooks-runner.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +5 -0
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js +46 -0
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/sdk.d.ts +10 -2
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +74 -2
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +24 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +33 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js +22 -0
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -0
- package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +6 -7
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +2 -3
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js +6 -4
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +54 -15
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts +26 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +112 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +51 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +10 -9
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +3 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +11 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +7 -6
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +17 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +109 -17
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- 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 +69 -2
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js +93 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +3 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +26 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +20 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js +79 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +13 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
- 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 +18 -1
- 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.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +36 -27
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts +11 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js +18 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +48 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js +10 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js +3 -2
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js.map +1 -1
- package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +36 -0
- package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +25 -0
- package/packages/pi-coding-agent/src/core/agent-session.ts +48 -7
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +89 -0
- package/packages/pi-coding-agent/src/core/compaction/compaction.ts +18 -0
- package/packages/pi-coding-agent/src/core/compaction-threshold.test.ts +121 -0
- package/packages/pi-coding-agent/src/core/db-snapshot.test.ts +32 -0
- package/packages/pi-coding-agent/src/core/db-snapshot.ts +66 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +10 -0
- package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +113 -3
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +24 -6
- package/packages/pi-coding-agent/src/core/extensions/types.ts +42 -1
- package/packages/pi-coding-agent/src/core/hooks-runner.test.ts +2 -0
- package/packages/pi-coding-agent/src/core/model-registry.ts +4 -0
- package/packages/pi-coding-agent/src/core/sdk-tool-filter.test.ts +60 -0
- package/packages/pi-coding-agent/src/core/sdk.ts +85 -3
- package/packages/pi-coding-agent/src/core/settings-manager.ts +51 -1
- package/packages/pi-coding-agent/src/core/skill-tool.test.ts +28 -0
- package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -0
- package/packages/pi-coding-agent/src/core/system-prompt.ts +8 -10
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.ts +7 -5
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +78 -15
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +59 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +160 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +10 -9
- package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +15 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +10 -9
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +122 -17
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +99 -1
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +92 -3
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +28 -0
- package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.test.ts +95 -0
- package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +24 -1
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +13 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +32 -2
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +36 -27
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +65 -0
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.ts +29 -0
- package/packages/pi-coding-agent/src/resources/extensions/memory/storage-safety-guard.test.ts +14 -0
- package/packages/pi-coding-agent/src/resources/extensions/memory/storage.ts +3 -2
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/style.test.d.ts +2 -0
- package/packages/pi-tui/dist/__tests__/style.test.d.ts.map +1 -0
- package/packages/pi-tui/dist/__tests__/style.test.js +63 -0
- package/packages/pi-tui/dist/__tests__/style.test.js.map +1 -0
- package/packages/pi-tui/dist/__tests__/tui.test.js +24 -3
- package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
- package/packages/pi-tui/dist/index.d.ts +1 -0
- package/packages/pi-tui/dist/index.d.ts.map +1 -1
- package/packages/pi-tui/dist/index.js +2 -0
- package/packages/pi-tui/dist/index.js.map +1 -1
- package/packages/pi-tui/dist/style.d.ts +41 -0
- package/packages/pi-tui/dist/style.d.ts.map +1 -0
- package/packages/pi-tui/dist/style.js +158 -0
- package/packages/pi-tui/dist/style.js.map +1 -0
- package/packages/pi-tui/dist/tui.d.ts +0 -1
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +21 -16
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/src/__tests__/style.test.ts +76 -0
- package/packages/pi-tui/src/__tests__/tui.test.ts +29 -3
- package/packages/pi-tui/src/index.ts +9 -0
- package/packages/pi-tui/src/style.ts +225 -0
- package/packages/pi-tui/src/tui.ts +23 -16
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme-schema.js +13 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +18 -1
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +36 -27
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/src/resources/GSD-WORKFLOW.md +2 -2
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +30 -0
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +26 -0
- package/src/resources/extensions/github-sync/templates.ts +38 -8
- package/src/resources/extensions/github-sync/tests/inline-code.test.ts +66 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +3 -2
- package/src/resources/extensions/gsd/auto/loop.ts +151 -26
- package/src/resources/extensions/gsd/auto/phases.ts +289 -196
- package/src/resources/extensions/gsd/auto/resolve.ts +42 -1
- package/src/resources/extensions/gsd/auto/run-unit.ts +52 -44
- package/src/resources/extensions/gsd/auto/session.ts +8 -0
- package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +63 -1
- package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +14 -1
- package/src/resources/extensions/gsd/auto-dashboard.ts +57 -8
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +8 -34
- package/src/resources/extensions/gsd/auto-dispatch.ts +33 -0
- package/src/resources/extensions/gsd/auto-post-unit.ts +28 -14
- package/src/resources/extensions/gsd/auto-prompts.ts +228 -16
- package/src/resources/extensions/gsd/auto-recovery.ts +207 -7
- package/src/resources/extensions/gsd/auto-start.ts +237 -15
- package/src/resources/extensions/gsd/auto-supervisor.ts +7 -0
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +2 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +123 -0
- package/src/resources/extensions/gsd/auto.ts +110 -22
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +119 -2
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +50 -36
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +16 -5
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +34 -19
- package/src/resources/extensions/gsd/bootstrap/journal-tools.ts +8 -1
- package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +10 -3
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +9 -2
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +386 -55
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +90 -22
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +135 -1
- package/src/resources/extensions/gsd/clean-root-preflight.ts +72 -9
- package/src/resources/extensions/gsd/commands/dispatcher.ts +6 -0
- package/src/resources/extensions/gsd/commands-extract-learnings.ts +17 -12
- package/src/resources/extensions/gsd/commands-handlers.ts +34 -15
- package/src/resources/extensions/gsd/context-budget.ts +44 -2
- package/src/resources/extensions/gsd/crash-recovery.ts +67 -10
- package/src/resources/extensions/gsd/custom-workflow-engine.ts +24 -1
- package/src/resources/extensions/gsd/db/unit-dispatches.ts +107 -0
- package/src/resources/extensions/gsd/db-base-schema.ts +19 -2
- package/src/resources/extensions/gsd/db-migration-steps.ts +25 -0
- package/src/resources/extensions/gsd/detection.ts +128 -0
- package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +3 -0
- package/src/resources/extensions/gsd/git-service.ts +46 -8
- package/src/resources/extensions/gsd/graph.ts +12 -5
- package/src/resources/extensions/gsd/gsd-db.ts +168 -13
- package/src/resources/extensions/gsd/guided-flow.ts +150 -51
- package/src/resources/extensions/gsd/memory-store.ts +77 -12
- package/src/resources/extensions/gsd/migrate/command.ts +47 -1
- package/src/resources/extensions/gsd/migration-auto-check.ts +129 -0
- package/src/resources/extensions/gsd/native-git-bridge.ts +39 -6
- package/src/resources/extensions/gsd/orphan-stash-audit.ts +117 -0
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +13 -3
- package/src/resources/extensions/gsd/planning-path-scope.ts +35 -0
- package/src/resources/extensions/gsd/pr-evidence.ts +63 -5
- package/src/resources/extensions/gsd/pre-execution-checks.ts +23 -0
- package/src/resources/extensions/gsd/preferences-types.ts +1 -1
- package/src/resources/extensions/gsd/prompt-loader.ts +27 -2
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +21 -19
- package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/execute-task.md +4 -2
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/quick-task.md +1 -5
- package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +2 -2
- package/src/resources/extensions/gsd/quick.ts +37 -2
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +11 -2
- package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +516 -15
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +56 -13
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +184 -2
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +168 -6
- package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +97 -2
- package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/compaction-snapshot.test.ts +14 -1
- package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +31 -0
- package/src/resources/extensions/gsd/tests/complete-slice-composer.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/context-budget.test.ts +10 -1
- package/src/resources/extensions/gsd/tests/context-store.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/crash-handler-secondary.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +117 -7
- package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +40 -2
- package/src/resources/extensions/gsd/tests/db-migration-steps.integration.test.ts +428 -0
- package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/detection.test.ts +140 -0
- package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +313 -0
- package/src/resources/extensions/gsd/tests/exec-history.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +5 -2
- package/src/resources/extensions/gsd/tests/fast-forward-reused-milestone-branch.test.ts +219 -0
- package/src/resources/extensions/gsd/tests/finalize-survivor-branch.test.ts +132 -0
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-basic.md +52 -0
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-empty-optionals.md +42 -0
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +55 -0
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +60 -0
- package/src/resources/extensions/gsd/tests/graph-operations.test.ts +10 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/has-pending-deep-stage.test.ts +33 -1
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +54 -0
- package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +6 -3
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +239 -1
- package/src/resources/extensions/gsd/tests/journal-query-tool.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/knowledge.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/memory-decay-factor.test.ts +90 -0
- package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +127 -0
- package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +242 -0
- package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +34 -2
- package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/orphan-merge-bootstrap.test.ts +133 -0
- package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +201 -0
- package/src/resources/extensions/gsd/tests/parallel-orchestrator-fast-forward.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +50 -0
- package/src/resources/extensions/gsd/tests/plan-task.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/pr-evidence-equivalence.test.ts +102 -0
- package/src/resources/extensions/gsd/tests/pr-evidence-hardening.test.ts +165 -0
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +45 -5
- package/src/resources/extensions/gsd/tests/prompt-duplication-cuts.test.ts +230 -0
- package/src/resources/extensions/gsd/tests/prompt-path-audit.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/query-tools-db-open.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/quick-external-gsd.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +38 -17
- package/src/resources/extensions/gsd/tests/right-sized-workflow-prompts.test.ts +192 -0
- package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +29 -0
- package/src/resources/extensions/gsd/tests/schema-v27-v28-sequence.test.ts +156 -0
- package/src/resources/extensions/gsd/tests/select-resumable-milestone.test.ts +96 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +77 -0
- package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +166 -0
- package/src/resources/extensions/gsd/tests/signal-handlers.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +49 -1
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +101 -2
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/status-db-open.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/system-context-memory.test.ts +112 -0
- package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +7 -9
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +291 -0
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +136 -4
- package/src/resources/extensions/gsd/tests/unit-dispatches.test.ts +80 -1
- package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +5 -4
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +142 -0
- package/src/resources/extensions/gsd/tests/workflow-protocol-excerpt.test.ts +99 -0
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/working-output-messages.test.ts +93 -0
- package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +37 -6
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +9 -2
- package/src/resources/extensions/gsd/tests/worktree-path-injection.test.ts +22 -19
- package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +167 -4
- package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +179 -0
- package/src/resources/extensions/gsd/tools/context-mode-tool-result.ts +25 -0
- package/src/resources/extensions/gsd/tools/exec-search-tool.ts +7 -7
- package/src/resources/extensions/gsd/tools/exec-tool.ts +4 -23
- package/src/resources/extensions/gsd/tools/memory-tools.ts +1 -0
- package/src/resources/extensions/gsd/tools/plan-slice.ts +13 -0
- package/src/resources/extensions/gsd/tools/plan-task.ts +10 -0
- package/src/resources/extensions/gsd/tools/resume-tool.ts +7 -7
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +1 -1
- package/src/resources/extensions/gsd/unit-context-composer.ts +19 -4
- package/src/resources/extensions/gsd/unit-runtime.ts +25 -0
- package/src/resources/extensions/gsd/workflow-protocol.ts +160 -0
- package/src/resources/extensions/gsd/working-output-messages.ts +120 -0
- package/src/resources/extensions/gsd/worktree-manager.ts +15 -4
- package/src/resources/extensions/gsd/worktree-resolver.ts +85 -19
- package/packages/contracts/tsconfig.tsbuildinfo +0 -1
- package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +0 -97
- /package/dist/web/standalone/.next/static/{bQDK5_LtkGVS64AirQgQG → cWaxzf-sdbSSbbwYu8q7a}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{bQDK5_LtkGVS64AirQgQG → cWaxzf-sdbSSbbwYu8q7a}/_ssgManifest.js +0 -0
|
@@ -102,6 +102,7 @@ describe("#4243 — abort() must run before _disconnectFromAgent()", () => {
|
|
|
102
102
|
});
|
|
103
103
|
it("newSession() invokes abort() before _disconnectFromAgent()", async () => {
|
|
104
104
|
const session = await createSession();
|
|
105
|
+
session.agent.state.isStreaming = true;
|
|
105
106
|
const order = recordCallOrder(session, ["abort", "_disconnectFromAgent"]);
|
|
106
107
|
const ok = await session.newSession();
|
|
107
108
|
assert.equal(ok, true);
|
|
@@ -111,6 +112,36 @@ describe("#4243 — abort() must run before _disconnectFromAgent()", () => {
|
|
|
111
112
|
assert.ok(disconnectIdx >= 0, `newSession should call _disconnectFromAgent(); order=${order.join(",")}`);
|
|
112
113
|
assert.ok(abortIdx < disconnectIdx, `abort() must run before _disconnectFromAgent(); order=${order.join(",")}`);
|
|
113
114
|
});
|
|
115
|
+
it("newSession() waits instead of aborting when the prior turn is idle but not settled", async () => {
|
|
116
|
+
const session = await createSession();
|
|
117
|
+
const order = [];
|
|
118
|
+
let releaseIdle;
|
|
119
|
+
const idle = new Promise((resolve) => {
|
|
120
|
+
releaseIdle = resolve;
|
|
121
|
+
});
|
|
122
|
+
session.agent.state.isStreaming = false;
|
|
123
|
+
session.agent.waitForIdle = () => {
|
|
124
|
+
order.push("waitForIdle");
|
|
125
|
+
return idle;
|
|
126
|
+
};
|
|
127
|
+
session.abort = async () => {
|
|
128
|
+
order.push("abort");
|
|
129
|
+
};
|
|
130
|
+
const originalDisconnect = session._disconnectFromAgent.bind(session);
|
|
131
|
+
session._disconnectFromAgent = () => {
|
|
132
|
+
order.push("_disconnectFromAgent");
|
|
133
|
+
originalDisconnect();
|
|
134
|
+
};
|
|
135
|
+
const pendingNewSession = session.newSession();
|
|
136
|
+
await Promise.resolve();
|
|
137
|
+
assert.deepEqual(order, ["waitForIdle"]);
|
|
138
|
+
assert.equal(order.includes("abort"), false);
|
|
139
|
+
releaseIdle();
|
|
140
|
+
const ok = await pendingNewSession;
|
|
141
|
+
assert.equal(ok, true);
|
|
142
|
+
assert.deepEqual(order, ["waitForIdle", "_disconnectFromAgent"]);
|
|
143
|
+
assert.equal(order.includes("abort"), false);
|
|
144
|
+
});
|
|
114
145
|
it("newSession() waits instead of aborting while agent_end processing is still streaming", async () => {
|
|
115
146
|
const session = await createSession();
|
|
116
147
|
const order = [];
|
|
@@ -368,6 +399,7 @@ describe("#4243 — abort() must run before _disconnectFromAgent()", () => {
|
|
|
368
399
|
await session.newSession();
|
|
369
400
|
const sessionFile = session.sessionFile;
|
|
370
401
|
assert.ok(typeof sessionFile === "string" && sessionFile.length > 0, "need a session file to switch to");
|
|
402
|
+
session.agent.state.isStreaming = true;
|
|
371
403
|
const order = recordCallOrder(session, ["abort", "_disconnectFromAgent"]);
|
|
372
404
|
const ok = await session.switchSession(sessionFile);
|
|
373
405
|
assert.equal(ok, true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-abort-order.test.js","sourceRoot":"","sources":["../../src/core/agent-session-abort-order.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Regression test for #4243 — abort() must be called BEFORE\n// _disconnectFromAgent() inside newSession() and switchSession() so that\n// message_end/agent_end events (and the #4216 finalization code) fire\n// before we unsubscribe from the event bus.\n//\n// Verified behaviourally: we construct a real AgentSession, wrap `abort`\n// and `_disconnectFromAgent` with call-order recording, trigger each\n// session-transition method, and assert the observed call order.\n\nimport assert from \"node:assert/strict\";\nimport { mkdtempSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { afterEach, beforeEach, describe, it } from \"node:test\";\n\nimport { Agent } from \"@gsd/pi-agent-core\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { DefaultResourceLoader } from \"./resource-loader.js\";\nimport { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\n\nlet testDir: string;\n\nasync function createSession(opts: { persistSessions?: boolean } = {}): Promise<AgentSession> {\n\tconst agentDir = join(testDir, \"agent-home\");\n\tconst authStorage = AuthStorage.inMemory({});\n\tconst modelRegistry = new ModelRegistry(authStorage, join(agentDir, \"models.json\"));\n\tconst settingsManager = SettingsManager.inMemory();\n\tconst resourceLoader = new DefaultResourceLoader({\n\t\tcwd: testDir,\n\t\tagentDir,\n\t\tsettingsManager,\n\t\tnoExtensions: true,\n\t\tnoPromptTemplates: true,\n\t\tnoThemes: true,\n\t});\n\tawait resourceLoader.reload();\n\n\t// switchSession() needs a sessionFile; in-memory manager returns undefined.\n\t// Use file-backed manager when the test needs to resume.\n\tconst sessionManager = opts.persistSessions\n\t\t? SessionManager.create(testDir, join(testDir, \"sessions\"))\n\t\t: SessionManager.inMemory(testDir);\n\n\treturn new AgentSession({\n\t\tagent: new Agent(),\n\t\tsessionManager,\n\t\tsettingsManager,\n\t\tcwd: testDir,\n\t\tresourceLoader,\n\t\tmodelRegistry,\n\t});\n}\n\n/**\n * Wrap two methods on the same object so their call order is recorded.\n * Returns the recording array — assertions use index lookups.\n */\nfunction recordCallOrder<O extends object>(\n\ttarget: O,\n\tmethods: Array<keyof O>,\n): string[] {\n\tconst order: string[] = [];\n\tfor (const method of methods) {\n\t\tconst name = String(method);\n\t\tconst original = (target as any)[name] as (...args: unknown[]) => unknown;\n\t\tif (typeof original !== \"function\") {\n\t\t\tthrow new Error(`recordCallOrder: ${name} is not a function on target`);\n\t\t}\n\t\t(target as any)[name] = function (this: O, ...args: unknown[]) {\n\t\t\torder.push(name);\n\t\t\treturn original.apply(this, args);\n\t\t};\n\t}\n\treturn order;\n}\n\nfunction makeAssistantMessage(text: string) {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [{ type: \"text\", text }],\n\t\tusage: {\n\t\t\tinput: 1,\n\t\t\toutput: 1,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotal: 2,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t},\n\t\tstopReason: \"stop\",\n\t\ttimestamp: Date.now(),\n\t} as any;\n}\n\nfunction installAgentEndSessionTransition(\n\tsession: AgentSession,\n\ttransition: () => Promise<unknown>,\n): void {\n\t(session as any)._extensionRunner = {\n\t\thasHandlers: () => false,\n\t\temit: async (event: any) => {\n\t\t\tif (event.type === \"agent_end\") {\n\t\t\t\tawait transition();\n\t\t\t}\n\t\t},\n\t\temitStop: async () => {},\n\t};\n}\n\ndescribe(\"#4243 — abort() must run before _disconnectFromAgent()\", () => {\n\tbeforeEach(() => {\n\t\ttestDir = mkdtempSync(join(tmpdir(), \"agent-session-abort-\"));\n\t});\n\n\tafterEach(() => {\n\t\trmSync(testDir, { recursive: true, force: true });\n\t});\n\n\tit(\"newSession() invokes abort() before _disconnectFromAgent()\", async () => {\n\t\tconst session = await createSession();\n\t\tconst order = recordCallOrder(session as any, [\"abort\", \"_disconnectFromAgent\"]);\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\n\t\tconst abortIdx = order.indexOf(\"abort\");\n\t\tconst disconnectIdx = order.indexOf(\"_disconnectFromAgent\");\n\t\tassert.ok(abortIdx >= 0, `newSession should call abort(); order=${order.join(\",\")}`);\n\t\tassert.ok(\n\t\t\tdisconnectIdx >= 0,\n\t\t\t`newSession should call _disconnectFromAgent(); order=${order.join(\",\")}`,\n\t\t);\n\t\tassert.ok(\n\t\t\tabortIdx < disconnectIdx,\n\t\t\t`abort() must run before _disconnectFromAgent(); order=${order.join(\",\")}`,\n\t\t);\n\t});\n\n\tit(\"newSession() waits instead of aborting while agent_end processing is still streaming\", async () => {\n\t\tconst session = await createSession();\n\t\tconst order: string[] = [];\n\t\tlet releaseIdle!: () => void;\n\t\tconst idle = new Promise<void>((resolve) => {\n\t\t\treleaseIdle = resolve;\n\t\t});\n\n\t\t(session as any)._processingAgentEnd = true;\n\t\t(session as any).agent.state.isStreaming = true;\n\t\t(session as any).agent.waitForIdle = () => {\n\t\t\torder.push(\"waitForIdle\");\n\t\t\treturn idle;\n\t\t};\n\t\t(session as any).abort = async () => {\n\t\t\torder.push(\"abort\");\n\t\t};\n\t\tconst originalDisconnect = (session as any)._disconnectFromAgent.bind(session);\n\t\t(session as any)._disconnectFromAgent = () => {\n\t\t\torder.push(\"_disconnectFromAgent\");\n\t\t\toriginalDisconnect();\n\t\t};\n\n\t\tconst pendingNewSession = session.newSession();\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(order, [\"waitForIdle\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\n\t\treleaseIdle();\n\t\tconst ok = await pendingNewSession;\n\t\tassert.equal(ok, true);\n\t\tassert.deepEqual(order, [\"waitForIdle\", \"_disconnectFromAgent\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t});\n\n\tit(\"newSession() waits during agent_end processing even once already idle\", async () => {\n\t\tconst session = await createSession();\n\t\tconst order: string[] = [];\n\n\t\t(session as any)._processingAgentEnd = true;\n\t\t(session as any).agent.state.isStreaming = false;\n\t\t(session as any).agent.waitForIdle = async () => {\n\t\t\torder.push(\"waitForIdle\");\n\t\t};\n\t\t(session as any).abort = async () => {\n\t\t\torder.push(\"abort\");\n\t\t};\n\t\tconst originalDisconnect = (session as any)._disconnectFromAgent.bind(session);\n\t\t(session as any)._disconnectFromAgent = () => {\n\t\t\torder.push(\"_disconnectFromAgent\");\n\t\t\toriginalDisconnect();\n\t\t};\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\t\tassert.deepEqual(order, [\"waitForIdle\", \"_disconnectFromAgent\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t});\n\n\tit(\"abort() marks synthetic agent_end processing while extension handlers run\", async () => {\n\t\tconst session = await createSession();\n\t\tconst observedProcessingStates: boolean[] = [];\n\n\t\t(session as any).agent.abort = () => {};\n\t\t(session as any).agent.waitForIdle = async () => {};\n\t\t(session as any)._extensionRunner = {\n\t\t\temit: async (event: any) => {\n\t\t\t\tif (event.type === \"agent_end\") {\n\t\t\t\t\tobservedProcessingStates.push((session as any)._processingAgentEnd);\n\t\t\t\t}\n\t\t\t},\n\t\t\temitStop: async () => {\n\t\t\t\tobservedProcessingStates.push((session as any)._processingAgentEnd);\n\t\t\t},\n\t\t};\n\n\t\tawait session.abort();\n\n\t\tassert.deepEqual(observedProcessingStates, [true, true]);\n\t\tassert.equal((session as any)._processingAgentEnd, false);\n\t});\n\n\tit(\"newSession() during agent_end preserves the previous session for resume\", async () => {\n\t\tconst session = await createSession({ persistSessions: true });\n\t\tconst previousSessionFile = session.sessionFile;\n\t\tassert.ok(previousSessionFile, \"need a persisted session file\");\n\n\t\tsession.sessionManager.appendMessage({\n\t\t\trole: \"user\",\n\t\t\tcontent: [{ type: \"text\", text: \"persisted prompt\" }],\n\t\t} as any);\n\t\tsession.sessionManager.appendMessage({\n\t\t\trole: \"assistant\",\n\t\t\tcontent: [{ type: \"text\", text: \"persisted response\" }],\n\t\t\tusage: {\n\t\t\t\tinput: 1,\n\t\t\t\toutput: 1,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotal: 2,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t},\n\t\t\tstopReason: \"stop\",\n\t\t\ttimestamp: Date.now(),\n\t\t} as any);\n\t\tsession.agent.replaceMessages(session.sessionManager.buildSessionContext().messages);\n\n\t\t(session as any)._processingAgentEnd = true;\n\t\t(session as any).agent.waitForIdle = async () => {};\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\t\tassert.notEqual(session.sessionFile, previousSessionFile);\n\t\tassert.deepEqual(session.messages, []);\n\n\t\t(session as any)._processingAgentEnd = false;\n\t\tconst switched = await session.switchSession(previousSessionFile);\n\t\tassert.equal(switched, true);\n\n\t\tconst restoredText = session.messages\n\t\t\t.flatMap((message: any) => message.content ?? [])\n\t\t\t.filter((part: any) => part.type === \"text\")\n\t\t\t.map((part: any) => part.text);\n\t\tassert.deepEqual(restoredText, [\"persisted prompt\", \"persisted response\"]);\n\t});\n\n\tit(\"switchSession() waits instead of aborting while agent_end processing is still streaming\", async () => {\n\t\tconst session = await createSession({ persistSessions: true });\n\t\tconst previousSessionFile = session.sessionFile;\n\t\tassert.ok(previousSessionFile, \"need a persisted session file\");\n\n\t\tsession.sessionManager.appendMessage({\n\t\t\trole: \"user\",\n\t\t\tcontent: [{ type: \"text\", text: \"switch persisted prompt\" }],\n\t\t} as any);\n\t\tsession.sessionManager.appendMessage({\n\t\t\trole: \"assistant\",\n\t\t\tcontent: [{ type: \"text\", text: \"switch persisted response\" }],\n\t\t\tusage: {\n\t\t\t\tinput: 1,\n\t\t\t\toutput: 1,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotal: 2,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t},\n\t\t\tstopReason: \"stop\",\n\t\t\ttimestamp: Date.now(),\n\t\t} as any);\n\t\tsession.agent.replaceMessages(session.sessionManager.buildSessionContext().messages);\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\t\tconst activeSessionFile = session.sessionFile;\n\t\tassert.ok(activeSessionFile, \"need an active session file\");\n\t\tassert.notEqual(activeSessionFile, previousSessionFile);\n\t\tassert.deepEqual(session.messages, []);\n\n\t\tconst order: string[] = [];\n\t\tlet releaseIdle!: () => void;\n\t\tconst idle = new Promise<void>((resolve) => {\n\t\t\treleaseIdle = resolve;\n\t\t});\n\n\t\t(session as any)._processingAgentEnd = true;\n\t\t(session as any).agent.state.isStreaming = true;\n\t\t(session as any).agent.waitForIdle = () => {\n\t\t\torder.push(\"waitForIdle\");\n\t\t\treturn idle;\n\t\t};\n\t\t(session as any).abort = async () => {\n\t\t\torder.push(\"abort\");\n\t\t};\n\t\tconst originalDisconnect = (session as any)._disconnectFromAgent.bind(session);\n\t\t(session as any)._disconnectFromAgent = () => {\n\t\t\torder.push(\"_disconnectFromAgent\");\n\t\t\toriginalDisconnect();\n\t\t};\n\n\t\tconst pendingSwitch = session.switchSession(previousSessionFile);\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(order, [\"waitForIdle\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t\tassert.equal(session.sessionFile, activeSessionFile);\n\t\tassert.deepEqual(session.messages, []);\n\n\t\treleaseIdle();\n\t\tconst switched = await pendingSwitch;\n\t\tassert.equal(switched, true);\n\t\tassert.deepEqual(order, [\"waitForIdle\", \"_disconnectFromAgent\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t\tassert.equal(session.sessionFile, previousSessionFile);\n\n\t\tconst restoredText = session.messages\n\t\t\t.flatMap((message: any) => message.content ?? [])\n\t\t\t.filter((part: any) => part.type === \"text\")\n\t\t\t.map((part: any) => part.text);\n\t\tassert.deepEqual(restoredText, [\"switch persisted prompt\", \"switch persisted response\"]);\n\t});\n\n\tit(\"newSession() during agent_end skips stale post-handlers after the transition starts\", async () => {\n\t\tconst session = await createSession();\n\t\tconst assistantMessage = makeAssistantMessage(\"old response\");\n\t\tlet compactionChecks = 0;\n\t\tlet listenerAgentEnds = 0;\n\n\t\t(session as any)._lastAssistantMessage = assistantMessage;\n\t\t(session as any)._compactionOrchestrator.checkCompaction = async () => {\n\t\t\tcompactionChecks++;\n\t\t};\n\t\tsession.subscribe((event: any) => {\n\t\t\tif (event.type === \"agent_end\") listenerAgentEnds++;\n\t\t});\n\t\tinstallAgentEndSessionTransition(session, () => session.newSession());\n\n\t\tawait (session as any)._processAgentEvent({\n\t\t\ttype: \"agent_end\",\n\t\t\tmessages: [assistantMessage],\n\t\t});\n\n\t\tassert.equal(compactionChecks, 0);\n\t\tassert.equal(listenerAgentEnds, 0);\n\t\tassert.equal((session as any)._lastAssistantMessage, undefined);\n\t\tassert.equal((session as any)._sessionSwitchPending, false);\n\t\tassert.equal((session as any)._sessionTransitionStartedDuringAgentEnd, false);\n\t});\n\n\tit(\"switchSession() during agent_end skips stale post-handlers after the transition starts\", async () => {\n\t\tconst session = await createSession({ persistSessions: true });\n\t\tconst previousSessionFile = session.sessionFile;\n\t\tassert.ok(previousSessionFile, \"need a persisted session file\");\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\t\tassert.notEqual(session.sessionFile, previousSessionFile);\n\n\t\tconst assistantMessage = makeAssistantMessage(\"old switch response\");\n\t\tlet compactionChecks = 0;\n\t\tlet listenerAgentEnds = 0;\n\n\t\t(session as any)._lastAssistantMessage = assistantMessage;\n\t\t(session as any)._compactionOrchestrator.checkCompaction = async () => {\n\t\t\tcompactionChecks++;\n\t\t};\n\t\tsession.subscribe((event: any) => {\n\t\t\tif (event.type === \"agent_end\") listenerAgentEnds++;\n\t\t});\n\t\tinstallAgentEndSessionTransition(session, () => session.switchSession(previousSessionFile));\n\n\t\tawait (session as any)._processAgentEvent({\n\t\t\ttype: \"agent_end\",\n\t\t\tmessages: [assistantMessage],\n\t\t});\n\n\t\tassert.equal(session.sessionFile, previousSessionFile);\n\t\tassert.equal(compactionChecks, 0);\n\t\tassert.equal(listenerAgentEnds, 0);\n\t\tassert.equal((session as any)._lastAssistantMessage, undefined);\n\t\tassert.equal((session as any)._sessionSwitchPending, false);\n\t\tassert.equal((session as any)._sessionTransitionStartedDuringAgentEnd, false);\n\t});\n\n\tit(\"agent_end post-handlers bail while a session switch is pending\", async () => {\n\t\tconst session = await createSession();\n\t\tconst assistantMessage = makeAssistantMessage(\"old pending response\");\n\t\tlet compactionChecks = 0;\n\t\tlet listenerAgentEnds = 0;\n\n\t\t(session as any)._lastAssistantMessage = assistantMessage;\n\t\t(session as any)._sessionSwitchPending = true;\n\t\t(session as any)._compactionOrchestrator.checkCompaction = async () => {\n\t\t\tcompactionChecks++;\n\t\t};\n\t\tsession.subscribe((event: any) => {\n\t\t\tif (event.type === \"agent_end\") listenerAgentEnds++;\n\t\t});\n\n\t\tawait (session as any)._processAgentEvent({\n\t\t\ttype: \"agent_end\",\n\t\t\tmessages: [assistantMessage],\n\t\t});\n\n\t\tassert.equal(compactionChecks, 0);\n\t\tassert.equal(listenerAgentEnds, 1);\n\t\tassert.equal((session as any)._lastAssistantMessage, undefined);\n\t});\n\n\tit(\"switchSession() invokes abort() before _disconnectFromAgent()\", async () => {\n\t\tconst session = await createSession({ persistSessions: true });\n\t\t// Seed a session file to switch to (switchSession reads from the session manager).\n\t\tawait session.newSession();\n\t\tconst sessionFile = session.sessionFile;\n\t\tassert.ok(typeof sessionFile === \"string\" && sessionFile.length > 0, \"need a session file to switch to\");\n\n\t\tconst order = recordCallOrder(session as any, [\"abort\", \"_disconnectFromAgent\"]);\n\n\t\tconst ok = await session.switchSession(sessionFile);\n\t\tassert.equal(ok, true);\n\n\t\tconst abortIdx = order.indexOf(\"abort\");\n\t\tconst disconnectIdx = order.indexOf(\"_disconnectFromAgent\");\n\t\tassert.ok(abortIdx >= 0, `switchSession should call abort(); order=${order.join(\",\")}`);\n\t\tassert.ok(\n\t\t\tdisconnectIdx >= 0,\n\t\t\t`switchSession should call _disconnectFromAgent(); order=${order.join(\",\")}`,\n\t\t);\n\t\tassert.ok(\n\t\t\tabortIdx < disconnectIdx,\n\t\t\t`abort() must run before _disconnectFromAgent() in switchSession; order=${order.join(\",\")}`,\n\t\t);\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"agent-session-abort-order.test.js","sourceRoot":"","sources":["../../src/core/agent-session-abort-order.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Regression test for #4243 — abort() must be called BEFORE\n// _disconnectFromAgent() inside newSession() and switchSession() so that\n// message_end/agent_end events (and the #4216 finalization code) fire\n// before we unsubscribe from the event bus.\n//\n// Verified behaviourally: we construct a real AgentSession, wrap `abort`\n// and `_disconnectFromAgent` with call-order recording, trigger each\n// session-transition method, and assert the observed call order.\n\nimport assert from \"node:assert/strict\";\nimport { mkdtempSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { afterEach, beforeEach, describe, it } from \"node:test\";\n\nimport { Agent } from \"@gsd/pi-agent-core\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { DefaultResourceLoader } from \"./resource-loader.js\";\nimport { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\n\nlet testDir: string;\n\nasync function createSession(opts: { persistSessions?: boolean } = {}): Promise<AgentSession> {\n\tconst agentDir = join(testDir, \"agent-home\");\n\tconst authStorage = AuthStorage.inMemory({});\n\tconst modelRegistry = new ModelRegistry(authStorage, join(agentDir, \"models.json\"));\n\tconst settingsManager = SettingsManager.inMemory();\n\tconst resourceLoader = new DefaultResourceLoader({\n\t\tcwd: testDir,\n\t\tagentDir,\n\t\tsettingsManager,\n\t\tnoExtensions: true,\n\t\tnoPromptTemplates: true,\n\t\tnoThemes: true,\n\t});\n\tawait resourceLoader.reload();\n\n\t// switchSession() needs a sessionFile; in-memory manager returns undefined.\n\t// Use file-backed manager when the test needs to resume.\n\tconst sessionManager = opts.persistSessions\n\t\t? SessionManager.create(testDir, join(testDir, \"sessions\"))\n\t\t: SessionManager.inMemory(testDir);\n\n\treturn new AgentSession({\n\t\tagent: new Agent(),\n\t\tsessionManager,\n\t\tsettingsManager,\n\t\tcwd: testDir,\n\t\tresourceLoader,\n\t\tmodelRegistry,\n\t});\n}\n\n/**\n * Wrap two methods on the same object so their call order is recorded.\n * Returns the recording array — assertions use index lookups.\n */\nfunction recordCallOrder<O extends object>(\n\ttarget: O,\n\tmethods: Array<keyof O>,\n): string[] {\n\tconst order: string[] = [];\n\tfor (const method of methods) {\n\t\tconst name = String(method);\n\t\tconst original = (target as any)[name] as (...args: unknown[]) => unknown;\n\t\tif (typeof original !== \"function\") {\n\t\t\tthrow new Error(`recordCallOrder: ${name} is not a function on target`);\n\t\t}\n\t\t(target as any)[name] = function (this: O, ...args: unknown[]) {\n\t\t\torder.push(name);\n\t\t\treturn original.apply(this, args);\n\t\t};\n\t}\n\treturn order;\n}\n\nfunction makeAssistantMessage(text: string) {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [{ type: \"text\", text }],\n\t\tusage: {\n\t\t\tinput: 1,\n\t\t\toutput: 1,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotal: 2,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t},\n\t\tstopReason: \"stop\",\n\t\ttimestamp: Date.now(),\n\t} as any;\n}\n\nfunction installAgentEndSessionTransition(\n\tsession: AgentSession,\n\ttransition: () => Promise<unknown>,\n): void {\n\t(session as any)._extensionRunner = {\n\t\thasHandlers: () => false,\n\t\temit: async (event: any) => {\n\t\t\tif (event.type === \"agent_end\") {\n\t\t\t\tawait transition();\n\t\t\t}\n\t\t},\n\t\temitStop: async () => {},\n\t};\n}\n\ndescribe(\"#4243 — abort() must run before _disconnectFromAgent()\", () => {\n\tbeforeEach(() => {\n\t\ttestDir = mkdtempSync(join(tmpdir(), \"agent-session-abort-\"));\n\t});\n\n\tafterEach(() => {\n\t\trmSync(testDir, { recursive: true, force: true });\n\t});\n\n\tit(\"newSession() invokes abort() before _disconnectFromAgent()\", async () => {\n\t\tconst session = await createSession();\n\t\t(session as any).agent.state.isStreaming = true;\n\t\tconst order = recordCallOrder(session as any, [\"abort\", \"_disconnectFromAgent\"]);\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\n\t\tconst abortIdx = order.indexOf(\"abort\");\n\t\tconst disconnectIdx = order.indexOf(\"_disconnectFromAgent\");\n\t\tassert.ok(abortIdx >= 0, `newSession should call abort(); order=${order.join(\",\")}`);\n\t\tassert.ok(\n\t\t\tdisconnectIdx >= 0,\n\t\t\t`newSession should call _disconnectFromAgent(); order=${order.join(\",\")}`,\n\t\t);\n\t\tassert.ok(\n\t\t\tabortIdx < disconnectIdx,\n\t\t\t`abort() must run before _disconnectFromAgent(); order=${order.join(\",\")}`,\n\t\t);\n\t});\n\n\tit(\"newSession() waits instead of aborting when the prior turn is idle but not settled\", async () => {\n\t\tconst session = await createSession();\n\t\tconst order: string[] = [];\n\t\tlet releaseIdle!: () => void;\n\t\tconst idle = new Promise<void>((resolve) => {\n\t\t\treleaseIdle = resolve;\n\t\t});\n\n\t\t(session as any).agent.state.isStreaming = false;\n\t\t(session as any).agent.waitForIdle = () => {\n\t\t\torder.push(\"waitForIdle\");\n\t\t\treturn idle;\n\t\t};\n\t\t(session as any).abort = async () => {\n\t\t\torder.push(\"abort\");\n\t\t};\n\t\tconst originalDisconnect = (session as any)._disconnectFromAgent.bind(session);\n\t\t(session as any)._disconnectFromAgent = () => {\n\t\t\torder.push(\"_disconnectFromAgent\");\n\t\t\toriginalDisconnect();\n\t\t};\n\n\t\tconst pendingNewSession = session.newSession();\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(order, [\"waitForIdle\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\n\t\treleaseIdle();\n\t\tconst ok = await pendingNewSession;\n\t\tassert.equal(ok, true);\n\t\tassert.deepEqual(order, [\"waitForIdle\", \"_disconnectFromAgent\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t});\n\n\tit(\"newSession() waits instead of aborting while agent_end processing is still streaming\", async () => {\n\t\tconst session = await createSession();\n\t\tconst order: string[] = [];\n\t\tlet releaseIdle!: () => void;\n\t\tconst idle = new Promise<void>((resolve) => {\n\t\t\treleaseIdle = resolve;\n\t\t});\n\n\t\t(session as any)._processingAgentEnd = true;\n\t\t(session as any).agent.state.isStreaming = true;\n\t\t(session as any).agent.waitForIdle = () => {\n\t\t\torder.push(\"waitForIdle\");\n\t\t\treturn idle;\n\t\t};\n\t\t(session as any).abort = async () => {\n\t\t\torder.push(\"abort\");\n\t\t};\n\t\tconst originalDisconnect = (session as any)._disconnectFromAgent.bind(session);\n\t\t(session as any)._disconnectFromAgent = () => {\n\t\t\torder.push(\"_disconnectFromAgent\");\n\t\t\toriginalDisconnect();\n\t\t};\n\n\t\tconst pendingNewSession = session.newSession();\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(order, [\"waitForIdle\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\n\t\treleaseIdle();\n\t\tconst ok = await pendingNewSession;\n\t\tassert.equal(ok, true);\n\t\tassert.deepEqual(order, [\"waitForIdle\", \"_disconnectFromAgent\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t});\n\n\tit(\"newSession() waits during agent_end processing even once already idle\", async () => {\n\t\tconst session = await createSession();\n\t\tconst order: string[] = [];\n\n\t\t(session as any)._processingAgentEnd = true;\n\t\t(session as any).agent.state.isStreaming = false;\n\t\t(session as any).agent.waitForIdle = async () => {\n\t\t\torder.push(\"waitForIdle\");\n\t\t};\n\t\t(session as any).abort = async () => {\n\t\t\torder.push(\"abort\");\n\t\t};\n\t\tconst originalDisconnect = (session as any)._disconnectFromAgent.bind(session);\n\t\t(session as any)._disconnectFromAgent = () => {\n\t\t\torder.push(\"_disconnectFromAgent\");\n\t\t\toriginalDisconnect();\n\t\t};\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\t\tassert.deepEqual(order, [\"waitForIdle\", \"_disconnectFromAgent\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t});\n\n\tit(\"abort() marks synthetic agent_end processing while extension handlers run\", async () => {\n\t\tconst session = await createSession();\n\t\tconst observedProcessingStates: boolean[] = [];\n\n\t\t(session as any).agent.abort = () => {};\n\t\t(session as any).agent.waitForIdle = async () => {};\n\t\t(session as any)._extensionRunner = {\n\t\t\temit: async (event: any) => {\n\t\t\t\tif (event.type === \"agent_end\") {\n\t\t\t\t\tobservedProcessingStates.push((session as any)._processingAgentEnd);\n\t\t\t\t}\n\t\t\t},\n\t\t\temitStop: async () => {\n\t\t\t\tobservedProcessingStates.push((session as any)._processingAgentEnd);\n\t\t\t},\n\t\t};\n\n\t\tawait session.abort();\n\n\t\tassert.deepEqual(observedProcessingStates, [true, true]);\n\t\tassert.equal((session as any)._processingAgentEnd, false);\n\t});\n\n\tit(\"newSession() during agent_end preserves the previous session for resume\", async () => {\n\t\tconst session = await createSession({ persistSessions: true });\n\t\tconst previousSessionFile = session.sessionFile;\n\t\tassert.ok(previousSessionFile, \"need a persisted session file\");\n\n\t\tsession.sessionManager.appendMessage({\n\t\t\trole: \"user\",\n\t\t\tcontent: [{ type: \"text\", text: \"persisted prompt\" }],\n\t\t} as any);\n\t\tsession.sessionManager.appendMessage({\n\t\t\trole: \"assistant\",\n\t\t\tcontent: [{ type: \"text\", text: \"persisted response\" }],\n\t\t\tusage: {\n\t\t\t\tinput: 1,\n\t\t\t\toutput: 1,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotal: 2,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t},\n\t\t\tstopReason: \"stop\",\n\t\t\ttimestamp: Date.now(),\n\t\t} as any);\n\t\tsession.agent.replaceMessages(session.sessionManager.buildSessionContext().messages);\n\n\t\t(session as any)._processingAgentEnd = true;\n\t\t(session as any).agent.waitForIdle = async () => {};\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\t\tassert.notEqual(session.sessionFile, previousSessionFile);\n\t\tassert.deepEqual(session.messages, []);\n\n\t\t(session as any)._processingAgentEnd = false;\n\t\tconst switched = await session.switchSession(previousSessionFile);\n\t\tassert.equal(switched, true);\n\n\t\tconst restoredText = session.messages\n\t\t\t.flatMap((message: any) => message.content ?? [])\n\t\t\t.filter((part: any) => part.type === \"text\")\n\t\t\t.map((part: any) => part.text);\n\t\tassert.deepEqual(restoredText, [\"persisted prompt\", \"persisted response\"]);\n\t});\n\n\tit(\"switchSession() waits instead of aborting while agent_end processing is still streaming\", async () => {\n\t\tconst session = await createSession({ persistSessions: true });\n\t\tconst previousSessionFile = session.sessionFile;\n\t\tassert.ok(previousSessionFile, \"need a persisted session file\");\n\n\t\tsession.sessionManager.appendMessage({\n\t\t\trole: \"user\",\n\t\t\tcontent: [{ type: \"text\", text: \"switch persisted prompt\" }],\n\t\t} as any);\n\t\tsession.sessionManager.appendMessage({\n\t\t\trole: \"assistant\",\n\t\t\tcontent: [{ type: \"text\", text: \"switch persisted response\" }],\n\t\t\tusage: {\n\t\t\t\tinput: 1,\n\t\t\t\toutput: 1,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotal: 2,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t},\n\t\t\tstopReason: \"stop\",\n\t\t\ttimestamp: Date.now(),\n\t\t} as any);\n\t\tsession.agent.replaceMessages(session.sessionManager.buildSessionContext().messages);\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\t\tconst activeSessionFile = session.sessionFile;\n\t\tassert.ok(activeSessionFile, \"need an active session file\");\n\t\tassert.notEqual(activeSessionFile, previousSessionFile);\n\t\tassert.deepEqual(session.messages, []);\n\n\t\tconst order: string[] = [];\n\t\tlet releaseIdle!: () => void;\n\t\tconst idle = new Promise<void>((resolve) => {\n\t\t\treleaseIdle = resolve;\n\t\t});\n\n\t\t(session as any)._processingAgentEnd = true;\n\t\t(session as any).agent.state.isStreaming = true;\n\t\t(session as any).agent.waitForIdle = () => {\n\t\t\torder.push(\"waitForIdle\");\n\t\t\treturn idle;\n\t\t};\n\t\t(session as any).abort = async () => {\n\t\t\torder.push(\"abort\");\n\t\t};\n\t\tconst originalDisconnect = (session as any)._disconnectFromAgent.bind(session);\n\t\t(session as any)._disconnectFromAgent = () => {\n\t\t\torder.push(\"_disconnectFromAgent\");\n\t\t\toriginalDisconnect();\n\t\t};\n\n\t\tconst pendingSwitch = session.switchSession(previousSessionFile);\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(order, [\"waitForIdle\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t\tassert.equal(session.sessionFile, activeSessionFile);\n\t\tassert.deepEqual(session.messages, []);\n\n\t\treleaseIdle();\n\t\tconst switched = await pendingSwitch;\n\t\tassert.equal(switched, true);\n\t\tassert.deepEqual(order, [\"waitForIdle\", \"_disconnectFromAgent\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t\tassert.equal(session.sessionFile, previousSessionFile);\n\n\t\tconst restoredText = session.messages\n\t\t\t.flatMap((message: any) => message.content ?? [])\n\t\t\t.filter((part: any) => part.type === \"text\")\n\t\t\t.map((part: any) => part.text);\n\t\tassert.deepEqual(restoredText, [\"switch persisted prompt\", \"switch persisted response\"]);\n\t});\n\n\tit(\"newSession() during agent_end skips stale post-handlers after the transition starts\", async () => {\n\t\tconst session = await createSession();\n\t\tconst assistantMessage = makeAssistantMessage(\"old response\");\n\t\tlet compactionChecks = 0;\n\t\tlet listenerAgentEnds = 0;\n\n\t\t(session as any)._lastAssistantMessage = assistantMessage;\n\t\t(session as any)._compactionOrchestrator.checkCompaction = async () => {\n\t\t\tcompactionChecks++;\n\t\t};\n\t\tsession.subscribe((event: any) => {\n\t\t\tif (event.type === \"agent_end\") listenerAgentEnds++;\n\t\t});\n\t\tinstallAgentEndSessionTransition(session, () => session.newSession());\n\n\t\tawait (session as any)._processAgentEvent({\n\t\t\ttype: \"agent_end\",\n\t\t\tmessages: [assistantMessage],\n\t\t});\n\n\t\tassert.equal(compactionChecks, 0);\n\t\tassert.equal(listenerAgentEnds, 0);\n\t\tassert.equal((session as any)._lastAssistantMessage, undefined);\n\t\tassert.equal((session as any)._sessionSwitchPending, false);\n\t\tassert.equal((session as any)._sessionTransitionStartedDuringAgentEnd, false);\n\t});\n\n\tit(\"switchSession() during agent_end skips stale post-handlers after the transition starts\", async () => {\n\t\tconst session = await createSession({ persistSessions: true });\n\t\tconst previousSessionFile = session.sessionFile;\n\t\tassert.ok(previousSessionFile, \"need a persisted session file\");\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\t\tassert.notEqual(session.sessionFile, previousSessionFile);\n\n\t\tconst assistantMessage = makeAssistantMessage(\"old switch response\");\n\t\tlet compactionChecks = 0;\n\t\tlet listenerAgentEnds = 0;\n\n\t\t(session as any)._lastAssistantMessage = assistantMessage;\n\t\t(session as any)._compactionOrchestrator.checkCompaction = async () => {\n\t\t\tcompactionChecks++;\n\t\t};\n\t\tsession.subscribe((event: any) => {\n\t\t\tif (event.type === \"agent_end\") listenerAgentEnds++;\n\t\t});\n\t\tinstallAgentEndSessionTransition(session, () => session.switchSession(previousSessionFile));\n\n\t\tawait (session as any)._processAgentEvent({\n\t\t\ttype: \"agent_end\",\n\t\t\tmessages: [assistantMessage],\n\t\t});\n\n\t\tassert.equal(session.sessionFile, previousSessionFile);\n\t\tassert.equal(compactionChecks, 0);\n\t\tassert.equal(listenerAgentEnds, 0);\n\t\tassert.equal((session as any)._lastAssistantMessage, undefined);\n\t\tassert.equal((session as any)._sessionSwitchPending, false);\n\t\tassert.equal((session as any)._sessionTransitionStartedDuringAgentEnd, false);\n\t});\n\n\tit(\"agent_end post-handlers bail while a session switch is pending\", async () => {\n\t\tconst session = await createSession();\n\t\tconst assistantMessage = makeAssistantMessage(\"old pending response\");\n\t\tlet compactionChecks = 0;\n\t\tlet listenerAgentEnds = 0;\n\n\t\t(session as any)._lastAssistantMessage = assistantMessage;\n\t\t(session as any)._sessionSwitchPending = true;\n\t\t(session as any)._compactionOrchestrator.checkCompaction = async () => {\n\t\t\tcompactionChecks++;\n\t\t};\n\t\tsession.subscribe((event: any) => {\n\t\t\tif (event.type === \"agent_end\") listenerAgentEnds++;\n\t\t});\n\n\t\tawait (session as any)._processAgentEvent({\n\t\t\ttype: \"agent_end\",\n\t\t\tmessages: [assistantMessage],\n\t\t});\n\n\t\tassert.equal(compactionChecks, 0);\n\t\tassert.equal(listenerAgentEnds, 1);\n\t\tassert.equal((session as any)._lastAssistantMessage, undefined);\n\t});\n\n\tit(\"switchSession() invokes abort() before _disconnectFromAgent()\", async () => {\n\t\tconst session = await createSession({ persistSessions: true });\n\t\t// Seed a session file to switch to (switchSession reads from the session manager).\n\t\tawait session.newSession();\n\t\tconst sessionFile = session.sessionFile;\n\t\tassert.ok(typeof sessionFile === \"string\" && sessionFile.length > 0, \"need a session file to switch to\");\n\n\t\t(session as any).agent.state.isStreaming = true;\n\t\tconst order = recordCallOrder(session as any, [\"abort\", \"_disconnectFromAgent\"]);\n\n\t\tconst ok = await session.switchSession(sessionFile);\n\t\tassert.equal(ok, true);\n\n\t\tconst abortIdx = order.indexOf(\"abort\");\n\t\tconst disconnectIdx = order.indexOf(\"_disconnectFromAgent\");\n\t\tassert.ok(abortIdx >= 0, `switchSession should call abort(); order=${order.join(\",\")}`);\n\t\tassert.ok(\n\t\t\tdisconnectIdx >= 0,\n\t\t\t`switchSession should call _disconnectFromAgent(); order=${order.join(\",\")}`,\n\t\t);\n\t\tassert.ok(\n\t\t\tabortIdx < disconnectIdx,\n\t\t\t`abort() must run before _disconnectFromAgent() in switchSession; order=${order.join(\",\")}`,\n\t\t);\n\t});\n});\n"]}
|
|
@@ -102,5 +102,23 @@ describe("#3616 — newSession() restores narrowed tool set when cwd unchanged",
|
|
|
102
102
|
assert.ok(buildRuntimeCalled, "cwd-changed branch must rebuild the tool runtime");
|
|
103
103
|
assert.ok(buildRuntimeIncludedAll, "cwd-changed branch must rebuild with includeAllExtensionTools: true");
|
|
104
104
|
});
|
|
105
|
+
it("uses explicit workspaceRoot option instead of process.cwd() when rebuilding runtime", async () => {
|
|
106
|
+
const session = await createSession();
|
|
107
|
+
const explicitWorkspaceRoot = mkdtempSync(join(testDir, "explicit-workspace-"));
|
|
108
|
+
session._cwd = process.cwd();
|
|
109
|
+
let buildRuntimeCalled = false;
|
|
110
|
+
let capturedBuildOptions;
|
|
111
|
+
const originalBuild = session._buildRuntime.bind(session);
|
|
112
|
+
session._buildRuntime = (options) => {
|
|
113
|
+
buildRuntimeCalled = true;
|
|
114
|
+
capturedBuildOptions = options;
|
|
115
|
+
return originalBuild(options);
|
|
116
|
+
};
|
|
117
|
+
const ok = await session.newSession({ workspaceRoot: explicitWorkspaceRoot });
|
|
118
|
+
assert.equal(ok, true);
|
|
119
|
+
assert.equal(session._cwd, explicitWorkspaceRoot);
|
|
120
|
+
assert.ok(buildRuntimeCalled, "explicit workspace root differing from prior root must rebuild runtime");
|
|
121
|
+
assert.strictEqual(capturedBuildOptions?.includeAllExtensionTools, true, "explicit workspaceRoot rebuild must pass includeAllExtensionTools: true");
|
|
122
|
+
});
|
|
105
123
|
});
|
|
106
124
|
//# sourceMappingURL=agent-session-tool-refresh.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-tool-refresh.test.js","sourceRoot":"","sources":["../../src/core/agent-session-tool-refresh.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Regression test for #3616: newSession() must restore the full tool set\n// when cwd is unchanged.\n//\n// The bug: extensions may narrow the active tool list via setActiveTools()\n// during a session. Without a refresh in the else branch of newSession(),\n// the narrowed set persists into the next session — breaking auto-mode\n// subagent sessions that expect a full tool palette.\n//\n// Verified behaviourally: construct an AgentSession, wrap _refreshToolRegistry\n// to record its args, call newSession() with cwd unchanged, and assert that\n// a refresh was requested with includeAllExtensionTools: true.\n\nimport assert from \"node:assert/strict\";\nimport { mkdtempSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { afterEach, beforeEach, describe, it } from \"node:test\";\n\nimport { Agent } from \"@gsd/pi-agent-core\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { DefaultResourceLoader } from \"./resource-loader.js\";\nimport { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\n\nlet testDir: string;\n\nasync function createSession(): Promise<AgentSession> {\n\tconst agentDir = join(testDir, \"agent-home\");\n\tconst authStorage = AuthStorage.inMemory({});\n\tconst modelRegistry = new ModelRegistry(authStorage, join(agentDir, \"models.json\"));\n\tconst settingsManager = SettingsManager.inMemory();\n\tconst resourceLoader = new DefaultResourceLoader({\n\t\tcwd: testDir,\n\t\tagentDir,\n\t\tsettingsManager,\n\t\tnoExtensions: true,\n\t\tnoPromptTemplates: true,\n\t\tnoThemes: true,\n\t});\n\tawait resourceLoader.reload();\n\n\treturn new AgentSession({\n\t\tagent: new Agent(),\n\t\tsessionManager: SessionManager.inMemory(testDir),\n\t\tsettingsManager,\n\t\tcwd: testDir,\n\t\tresourceLoader,\n\t\tmodelRegistry,\n\t});\n}\n\ndescribe(\"#3616 — newSession() restores narrowed tool set when cwd unchanged\", () => {\n\tbeforeEach(() => {\n\t\ttestDir = mkdtempSync(join(tmpdir(), \"agent-session-tool-refresh-\"));\n\t});\n\n\tafterEach(() => {\n\t\trmSync(testDir, { recursive: true, force: true });\n\t});\n\n\tit(\"calls _refreshToolRegistry with includeAllExtensionTools: true when cwd unchanged\", async () => {\n\t\tconst session = await createSession();\n\t\t// Pin _cwd so newSession()'s `process.cwd()` branch takes the\n\t\t// cwd-unchanged path. The production code compares `this._cwd !==\n\t\t// previousCwd`; we force equality by setting _cwd to current cwd.\n\t\t(session as any)._cwd = process.cwd();\n\n\t\tconst refreshCalls: Array<{ includeAllExtensionTools?: boolean }> = [];\n\t\tconst originalRefresh = (session as any)._refreshToolRegistry.bind(session);\n\t\t(session as any)._refreshToolRegistry = (options?: { includeAllExtensionTools?: boolean }) => {\n\t\t\trefreshCalls.push(options ?? {});\n\t\t\treturn originalRefresh(options);\n\t\t};\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\n\t\tassert.ok(\n\t\t\trefreshCalls.length > 0,\n\t\t\t\"newSession() should invoke _refreshToolRegistry in the cwd-unchanged branch\",\n\t\t);\n\t\tassert.ok(\n\t\t\trefreshCalls.some((o) => o.includeAllExtensionTools === true),\n\t\t\t`at least one _refreshToolRegistry call must pass includeAllExtensionTools: true; observed=${JSON.stringify(refreshCalls)}`,\n\t\t);\n\t});\n\n\tit(\"agent.reset() does not clear _state.tools (tools persist across reset)\", () => {\n\t\t// Structural invariant protecting #3616: if reset() starts clearing\n\t\t// tools, newSession()'s refresh becomes the only defense against loss.\n\t\t// Assertion is behavioural — seed tools, call reset(), observe survival.\n\t\tconst agent = new Agent();\n\t\tconst tool = {\n\t\t\tname: \"test_tool\",\n\t\t\tdescription: \"x\",\n\t\t\tschema: { type: \"object\", properties: {}, additionalProperties: false } as any,\n\t\t\texecute: async () => ({ content: [] }),\n\t\t};\n\t\t(agent as any)._state.tools = [tool];\n\t\tagent.reset();\n\t\tassert.deepEqual(\n\t\t\t(agent as any)._state.tools,\n\t\t\t[tool],\n\t\t\t\"Agent.reset() must preserve _state.tools\",\n\t\t);\n\t});\n\n\tit(\"takes the cwd-changed branch (rebuilds runtime) when cwd differs\", async () => {\n\t\tconst session = await createSession();\n\t\t// Force the cwd-changed branch: set _cwd to something that won't equal process.cwd().\n\t\t(session as any)._cwd = join(testDir, \"some\", \"other\", \"cwd\");\n\n\t\tlet buildRuntimeCalled = false;\n\t\tlet buildRuntimeIncludedAll = false;\n\t\tconst originalBuild = (session as any)._buildRuntime.bind(session);\n\t\t(session as any)._buildRuntime = (options?: { includeAllExtensionTools?: boolean }) => {\n\t\t\tbuildRuntimeCalled = true;\n\t\t\tif (options?.includeAllExtensionTools === true) buildRuntimeIncludedAll = true;\n\t\t\treturn originalBuild(options);\n\t\t};\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\n\t\tassert.ok(buildRuntimeCalled, \"cwd-changed branch must rebuild the tool runtime\");\n\t\tassert.ok(\n\t\t\tbuildRuntimeIncludedAll,\n\t\t\t\"cwd-changed branch must rebuild with includeAllExtensionTools: true\",\n\t\t);\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"agent-session-tool-refresh.test.js","sourceRoot":"","sources":["../../src/core/agent-session-tool-refresh.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Regression test for #3616: newSession() must restore the full tool set\n// when cwd is unchanged.\n//\n// The bug: extensions may narrow the active tool list via setActiveTools()\n// during a session. Without a refresh in the else branch of newSession(),\n// the narrowed set persists into the next session — breaking auto-mode\n// subagent sessions that expect a full tool palette.\n//\n// Verified behaviourally: construct an AgentSession, wrap _refreshToolRegistry\n// to record its args, call newSession() with cwd unchanged, and assert that\n// a refresh was requested with includeAllExtensionTools: true.\n\nimport assert from \"node:assert/strict\";\nimport { mkdtempSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { afterEach, beforeEach, describe, it } from \"node:test\";\n\nimport { Agent } from \"@gsd/pi-agent-core\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { DefaultResourceLoader } from \"./resource-loader.js\";\nimport { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\n\nlet testDir: string;\n\nasync function createSession(): Promise<AgentSession> {\n\tconst agentDir = join(testDir, \"agent-home\");\n\tconst authStorage = AuthStorage.inMemory({});\n\tconst modelRegistry = new ModelRegistry(authStorage, join(agentDir, \"models.json\"));\n\tconst settingsManager = SettingsManager.inMemory();\n\tconst resourceLoader = new DefaultResourceLoader({\n\t\tcwd: testDir,\n\t\tagentDir,\n\t\tsettingsManager,\n\t\tnoExtensions: true,\n\t\tnoPromptTemplates: true,\n\t\tnoThemes: true,\n\t});\n\tawait resourceLoader.reload();\n\n\treturn new AgentSession({\n\t\tagent: new Agent(),\n\t\tsessionManager: SessionManager.inMemory(testDir),\n\t\tsettingsManager,\n\t\tcwd: testDir,\n\t\tresourceLoader,\n\t\tmodelRegistry,\n\t});\n}\n\ndescribe(\"#3616 — newSession() restores narrowed tool set when cwd unchanged\", () => {\n\tbeforeEach(() => {\n\t\ttestDir = mkdtempSync(join(tmpdir(), \"agent-session-tool-refresh-\"));\n\t});\n\n\tafterEach(() => {\n\t\trmSync(testDir, { recursive: true, force: true });\n\t});\n\n\tit(\"calls _refreshToolRegistry with includeAllExtensionTools: true when cwd unchanged\", async () => {\n\t\tconst session = await createSession();\n\t\t// Pin _cwd so newSession()'s `process.cwd()` branch takes the\n\t\t// cwd-unchanged path. The production code compares `this._cwd !==\n\t\t// previousCwd`; we force equality by setting _cwd to current cwd.\n\t\t(session as any)._cwd = process.cwd();\n\n\t\tconst refreshCalls: Array<{ includeAllExtensionTools?: boolean }> = [];\n\t\tconst originalRefresh = (session as any)._refreshToolRegistry.bind(session);\n\t\t(session as any)._refreshToolRegistry = (options?: { includeAllExtensionTools?: boolean }) => {\n\t\t\trefreshCalls.push(options ?? {});\n\t\t\treturn originalRefresh(options);\n\t\t};\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\n\t\tassert.ok(\n\t\t\trefreshCalls.length > 0,\n\t\t\t\"newSession() should invoke _refreshToolRegistry in the cwd-unchanged branch\",\n\t\t);\n\t\tassert.ok(\n\t\t\trefreshCalls.some((o) => o.includeAllExtensionTools === true),\n\t\t\t`at least one _refreshToolRegistry call must pass includeAllExtensionTools: true; observed=${JSON.stringify(refreshCalls)}`,\n\t\t);\n\t});\n\n\tit(\"agent.reset() does not clear _state.tools (tools persist across reset)\", () => {\n\t\t// Structural invariant protecting #3616: if reset() starts clearing\n\t\t// tools, newSession()'s refresh becomes the only defense against loss.\n\t\t// Assertion is behavioural — seed tools, call reset(), observe survival.\n\t\tconst agent = new Agent();\n\t\tconst tool = {\n\t\t\tname: \"test_tool\",\n\t\t\tdescription: \"x\",\n\t\t\tschema: { type: \"object\", properties: {}, additionalProperties: false } as any,\n\t\t\texecute: async () => ({ content: [] }),\n\t\t};\n\t\t(agent as any)._state.tools = [tool];\n\t\tagent.reset();\n\t\tassert.deepEqual(\n\t\t\t(agent as any)._state.tools,\n\t\t\t[tool],\n\t\t\t\"Agent.reset() must preserve _state.tools\",\n\t\t);\n\t});\n\n\tit(\"takes the cwd-changed branch (rebuilds runtime) when cwd differs\", async () => {\n\t\tconst session = await createSession();\n\t\t// Force the cwd-changed branch: set _cwd to something that won't equal process.cwd().\n\t\t(session as any)._cwd = join(testDir, \"some\", \"other\", \"cwd\");\n\n\t\tlet buildRuntimeCalled = false;\n\t\tlet buildRuntimeIncludedAll = false;\n\t\tconst originalBuild = (session as any)._buildRuntime.bind(session);\n\t\t(session as any)._buildRuntime = (options?: { includeAllExtensionTools?: boolean }) => {\n\t\t\tbuildRuntimeCalled = true;\n\t\t\tif (options?.includeAllExtensionTools === true) buildRuntimeIncludedAll = true;\n\t\t\treturn originalBuild(options);\n\t\t};\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\n\t\tassert.ok(buildRuntimeCalled, \"cwd-changed branch must rebuild the tool runtime\");\n\t\tassert.ok(\n\t\t\tbuildRuntimeIncludedAll,\n\t\t\t\"cwd-changed branch must rebuild with includeAllExtensionTools: true\",\n\t\t);\n\t});\n\n\tit(\"uses explicit workspaceRoot option instead of process.cwd() when rebuilding runtime\", async () => {\n\t\tconst session = await createSession();\n\t\tconst explicitWorkspaceRoot = mkdtempSync(join(testDir, \"explicit-workspace-\"));\n\t\t(session as any)._cwd = process.cwd();\n\n\t\tlet buildRuntimeCalled = false;\n\t\tlet capturedBuildOptions: { includeAllExtensionTools?: boolean } | undefined;\n\t\tconst originalBuild = (session as any)._buildRuntime.bind(session);\n\t\t(session as any)._buildRuntime = (options?: { includeAllExtensionTools?: boolean }) => {\n\t\t\tbuildRuntimeCalled = true;\n\t\t\tcapturedBuildOptions = options;\n\t\t\treturn originalBuild(options);\n\t\t};\n\n\t\tconst ok = await session.newSession({ workspaceRoot: explicitWorkspaceRoot });\n\t\tassert.equal(ok, true);\n\t\tassert.equal((session as any)._cwd, explicitWorkspaceRoot);\n\t\tassert.ok(buildRuntimeCalled, \"explicit workspace root differing from prior root must rebuild runtime\");\n\t\tassert.strictEqual(\n\t\t\tcapturedBuildOptions?.includeAllExtensionTools,\n\t\t\ttrue,\n\t\t\t\"explicit workspaceRoot rebuild must pass includeAllExtensionTools: true\",\n\t\t);\n\t});\n});\n"]}
|
|
@@ -201,6 +201,7 @@ export declare class AgentSession {
|
|
|
201
201
|
private _toolPromptSnippets;
|
|
202
202
|
private _toolPromptGuidelines;
|
|
203
203
|
private _baseSystemPrompt;
|
|
204
|
+
private _visibleSkillNames;
|
|
204
205
|
constructor(config: AgentSessionConfig);
|
|
205
206
|
/** Model registry for API key resolution and model discovery */
|
|
206
207
|
get modelRegistry(): ModelRegistry;
|
|
@@ -280,6 +281,15 @@ export declare class AgentSession {
|
|
|
280
281
|
* Changes take effect on the next agent turn.
|
|
281
282
|
*/
|
|
282
283
|
setActiveToolsByName(toolNames: string[]): void;
|
|
284
|
+
/**
|
|
285
|
+
* Set or clear a prompt-only filter for the <available_skills> catalog.
|
|
286
|
+
*
|
|
287
|
+
* This does not unload skills or disable the Skill tool. It only controls
|
|
288
|
+
* which loaded skills are advertised in the system prompt on rebuild.
|
|
289
|
+
*/
|
|
290
|
+
setVisibleSkillsByName(skillNames: string[] | undefined): void;
|
|
291
|
+
/** Get the current prompt-only skill catalog filter, if one is active. */
|
|
292
|
+
getVisibleSkillNames(): string[] | undefined;
|
|
283
293
|
/** Whether compaction or branch summarization is currently running */
|
|
284
294
|
get isCompacting(): boolean;
|
|
285
295
|
/**
|
|
@@ -434,6 +444,8 @@ export declare class AgentSession {
|
|
|
434
444
|
newSession(options?: {
|
|
435
445
|
parentSession?: string;
|
|
436
446
|
setup?: (sessionManager: SessionManager) => Promise<void>;
|
|
447
|
+
/** Explicit workspace root for the new session/tool runtime. */
|
|
448
|
+
workspaceRoot?: string;
|
|
437
449
|
/** See ExtensionCommandContext.newSession for docs (#3731). */
|
|
438
450
|
abortSignal?: AbortSignal;
|
|
439
451
|
}): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/core/agent-session.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/core/agent-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -97,6 +97,8 @@ export class AgentSession {
|
|
|
97
97
|
this._toolPromptGuidelines = new Map();
|
|
98
98
|
// Base system prompt (without extension appends) - used to apply fresh appends each turn
|
|
99
99
|
this._baseSystemPrompt = "";
|
|
100
|
+
// Optional prompt-only skill catalog filter. Skills remain loaded and invocable by name.
|
|
101
|
+
this._visibleSkillNames = undefined;
|
|
100
102
|
// Track last assistant message for auto-compaction check
|
|
101
103
|
this._lastAssistantMessage = undefined;
|
|
102
104
|
/** Internal handler for agent events - shared by subscribe and reconnect */
|
|
@@ -599,6 +601,23 @@ export class AgentSession {
|
|
|
599
601
|
this._baseSystemPrompt = this._rebuildSystemPrompt(validToolNames);
|
|
600
602
|
this.agent.setSystemPrompt(this._baseSystemPrompt);
|
|
601
603
|
}
|
|
604
|
+
/**
|
|
605
|
+
* Set or clear a prompt-only filter for the <available_skills> catalog.
|
|
606
|
+
*
|
|
607
|
+
* This does not unload skills or disable the Skill tool. It only controls
|
|
608
|
+
* which loaded skills are advertised in the system prompt on rebuild.
|
|
609
|
+
*/
|
|
610
|
+
setVisibleSkillsByName(skillNames) {
|
|
611
|
+
this._visibleSkillNames = skillNames === undefined
|
|
612
|
+
? undefined
|
|
613
|
+
: new Set(skillNames.map((name) => name.trim().toLowerCase()).filter(Boolean));
|
|
614
|
+
this._baseSystemPrompt = this._rebuildSystemPrompt(this.getActiveToolNames());
|
|
615
|
+
this.agent.setSystemPrompt(this._baseSystemPrompt);
|
|
616
|
+
}
|
|
617
|
+
/** Get the current prompt-only skill catalog filter, if one is active. */
|
|
618
|
+
getVisibleSkillNames() {
|
|
619
|
+
return this._visibleSkillNames ? [...this._visibleSkillNames] : undefined;
|
|
620
|
+
}
|
|
602
621
|
/** Whether compaction or branch summarization is currently running */
|
|
603
622
|
get isCompacting() {
|
|
604
623
|
return this._compactionOrchestrator.isCompacting;
|
|
@@ -751,6 +770,9 @@ export class AgentSession {
|
|
|
751
770
|
return buildSystemPrompt({
|
|
752
771
|
cwd: this._cwd,
|
|
753
772
|
skills: loadedSkills,
|
|
773
|
+
skillFilter: this._visibleSkillNames
|
|
774
|
+
? (skill) => this._visibleSkillNames.has(skill.name.trim().toLowerCase())
|
|
775
|
+
: undefined,
|
|
754
776
|
contextFiles: loadedContextFiles,
|
|
755
777
|
customPrompt: loaderSystemPrompt,
|
|
756
778
|
appendSystemPrompt,
|
|
@@ -1253,6 +1275,11 @@ export class AgentSession {
|
|
|
1253
1275
|
// message_end/agent_end events fire while listeners are still connected.
|
|
1254
1276
|
// During agent_end handling the turn is already ending; aborting there can
|
|
1255
1277
|
// convert a successful auto-mode handoff into an aborted provider message.
|
|
1278
|
+
if (!this.agent.state.isStreaming) {
|
|
1279
|
+
this._retryHandler.abortRetry();
|
|
1280
|
+
await this.agent.waitForIdle();
|
|
1281
|
+
return;
|
|
1282
|
+
}
|
|
1256
1283
|
await this.abort();
|
|
1257
1284
|
}
|
|
1258
1285
|
/**
|
|
@@ -1278,10 +1305,10 @@ export class AgentSession {
|
|
|
1278
1305
|
this._sessionSwitchPending = true;
|
|
1279
1306
|
try {
|
|
1280
1307
|
await this._settleCurrentTurnForSessionTransition();
|
|
1281
|
-
// #3731: If the caller aborted (e.g. runUnit() timed out
|
|
1282
|
-
//
|
|
1283
|
-
//
|
|
1284
|
-
//
|
|
1308
|
+
// #3731: If the caller aborted (e.g. runUnit() timed out while the
|
|
1309
|
+
// worktree was being torn down), discard this session before rebuilding
|
|
1310
|
+
// the tool runtime. Without this check, the late newSession() could
|
|
1311
|
+
// rebuild tools with a stale workspace root.
|
|
1285
1312
|
if (options?.abortSignal?.aborted) {
|
|
1286
1313
|
return false;
|
|
1287
1314
|
}
|
|
@@ -1291,15 +1318,18 @@ export class AgentSession {
|
|
|
1291
1318
|
finally {
|
|
1292
1319
|
this._sessionSwitchPending = false;
|
|
1293
1320
|
}
|
|
1294
|
-
// Update
|
|
1295
|
-
//
|
|
1321
|
+
// Update the workspace root for the new tool runtime. Auto-mode passes
|
|
1322
|
+
// this explicitly so session routing does not depend on global
|
|
1323
|
+
// process.cwd() after worktree merge/teardown. Other callers keep the
|
|
1324
|
+
// historical default.
|
|
1296
1325
|
const previousCwd = this._cwd;
|
|
1297
|
-
this._cwd = process.cwd();
|
|
1326
|
+
this._cwd = options?.workspaceRoot ?? process.cwd();
|
|
1298
1327
|
this.sessionManager.newSession({ parentSession: options?.parentSession });
|
|
1299
1328
|
this.agent.sessionId = this.sessionManager.getSessionId();
|
|
1300
1329
|
this._steeringMessages = [];
|
|
1301
1330
|
this._followUpMessages = [];
|
|
1302
1331
|
this._pendingNextTurnMessages = [];
|
|
1332
|
+
this._visibleSkillNames = undefined;
|
|
1303
1333
|
this.sessionManager.appendThinkingLevelChange(this.thinkingLevel);
|
|
1304
1334
|
// Rebuild tools when cwd changed (e.g., auto-mode entered a worktree).
|
|
1305
1335
|
// Tools capture cwd at creation time for path resolution — without
|
|
@@ -1728,6 +1758,8 @@ export class AgentSession {
|
|
|
1728
1758
|
getActiveTools: () => this.getActiveToolNames(),
|
|
1729
1759
|
getAllTools: () => this.getAllTools(),
|
|
1730
1760
|
setActiveTools: (toolNames) => this.setActiveToolsByName(toolNames),
|
|
1761
|
+
getVisibleSkills: () => this.getVisibleSkillNames(),
|
|
1762
|
+
setVisibleSkills: (skillNames) => this.setVisibleSkillsByName(skillNames),
|
|
1731
1763
|
refreshTools: () => this._refreshToolRegistry(),
|
|
1732
1764
|
getCommands,
|
|
1733
1765
|
setModel: async (model, options) => {
|
|
@@ -1760,6 +1792,9 @@ export class AgentSession {
|
|
|
1760
1792
|
})();
|
|
1761
1793
|
},
|
|
1762
1794
|
getSystemPrompt: () => this.systemPrompt,
|
|
1795
|
+
setCompactionThresholdOverride: (percent) => {
|
|
1796
|
+
this.settingsManager.setCompactionThresholdOverride(percent);
|
|
1797
|
+
},
|
|
1763
1798
|
});
|
|
1764
1799
|
}
|
|
1765
1800
|
_refreshToolRegistry(options) {
|
|
@@ -1865,6 +1900,7 @@ export class AgentSession {
|
|
|
1865
1900
|
this.settingsManager.reload();
|
|
1866
1901
|
resetApiProviders();
|
|
1867
1902
|
await this._resourceLoader.reload();
|
|
1903
|
+
this._visibleSkillNames = undefined;
|
|
1868
1904
|
this._buildRuntime({
|
|
1869
1905
|
activeToolNames: this.getActiveToolNames(),
|
|
1870
1906
|
flagValues: previousFlagValues,
|
|
@@ -2027,6 +2063,7 @@ export class AgentSession {
|
|
|
2027
2063
|
this._steeringMessages = [];
|
|
2028
2064
|
this._followUpMessages = [];
|
|
2029
2065
|
this._pendingNextTurnMessages = [];
|
|
2066
|
+
this._visibleSkillNames = undefined;
|
|
2030
2067
|
// Set new session
|
|
2031
2068
|
this.sessionManager.setSessionFile(sessionPath);
|
|
2032
2069
|
this.agent.sessionId = this.sessionManager.getSessionId();
|