gsd-pi 2.80.0 → 2.81.0-dev.3cddbbba2
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 +47 -59
- package/dist/claude-cli-check.d.ts +30 -0
- package/dist/claude-cli-check.js +18 -7
- package/dist/cli.js +0 -19
- package/dist/headless-query.d.ts +10 -0
- package/dist/headless-query.js +6 -4
- package/dist/loader-entrypoint.d.ts +8 -0
- package/dist/loader-entrypoint.js +27 -0
- package/dist/loader.js +2 -11
- package/dist/mcp-server.d.ts +1 -0
- package/dist/mcp-server.js +6 -3
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +2 -2
- package/dist/resources/extensions/claude-code-cli/readiness.js +18 -7
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +40 -3
- package/dist/resources/extensions/github-sync/sync.js +4 -1
- package/dist/resources/extensions/github-sync/templates.js +90 -74
- package/dist/resources/extensions/gsd/auto/contracts.js +2 -0
- package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +53 -0
- package/dist/resources/extensions/gsd/auto/loop.js +566 -526
- package/dist/resources/extensions/gsd/auto/orchestrator.js +48 -4
- package/dist/resources/extensions/gsd/auto/phases.js +402 -157
- package/dist/resources/extensions/gsd/auto/resolve.js +29 -0
- package/dist/resources/extensions/gsd/auto/run-unit.js +105 -46
- package/dist/resources/extensions/gsd/auto/session.js +18 -1
- package/dist/resources/extensions/gsd/auto/unit-runner-events.js +7 -0
- package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +43 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.js +12 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-iteration.js +24 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.js +33 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.js +26 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-retry.js +49 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.js +25 -0
- package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +80 -0
- package/dist/resources/extensions/gsd/auto/workflow-dispatch-ledger.js +26 -0
- package/dist/resources/extensions/gsd/auto/workflow-iteration-completion.js +10 -0
- package/dist/resources/extensions/gsd/auto/workflow-journal-reporter.js +16 -0
- package/dist/resources/extensions/gsd/auto/workflow-kernel.js +263 -0
- package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +36 -0
- package/dist/resources/extensions/gsd/auto/workflow-phase-reporter.js +9 -0
- package/dist/resources/extensions/gsd/auto/workflow-session-lock.js +35 -0
- package/dist/resources/extensions/gsd/auto/workflow-sidecar-iteration.js +24 -0
- package/dist/resources/extensions/gsd/auto/workflow-sidecar-queue.js +26 -0
- package/dist/resources/extensions/gsd/auto/workflow-turn-reporter.js +36 -0
- package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +44 -0
- package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +23 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +248 -187
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +5 -32
- package/dist/resources/extensions/gsd/auto-dispatch.js +40 -11
- package/dist/resources/extensions/gsd/auto-post-unit.js +129 -89
- package/dist/resources/extensions/gsd/auto-prompts.js +382 -20
- package/dist/resources/extensions/gsd/auto-recovery.js +197 -9
- package/dist/resources/extensions/gsd/auto-runtime-state.js +5 -0
- package/dist/resources/extensions/gsd/auto-start.js +253 -19
- 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-unit-closeout.js +33 -5
- package/dist/resources/extensions/gsd/auto-verification.js +14 -17
- package/dist/resources/extensions/gsd/auto-worktree.js +324 -374
- package/dist/resources/extensions/gsd/auto.js +502 -130
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +147 -12
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +54 -37
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +37 -10
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +30 -20
- package/dist/resources/extensions/gsd/bootstrap/journal-tools.js +4 -1
- package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +6 -4
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +5 -3
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +1 -1
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +356 -58
- package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +4 -8
- package/dist/resources/extensions/gsd/bootstrap/sanitize-complete-milestone.js +4 -0
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +82 -23
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +147 -2
- 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/handlers/notifications-handler.js +4 -10
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +2 -2
- package/dist/resources/extensions/gsd/commands-config.js +1 -1
- package/dist/resources/extensions/gsd/commands-eval-review.js +2 -2
- 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/commands-ship.js +23 -46
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +12 -7
- package/dist/resources/extensions/gsd/component-loader.js +5 -11
- 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 +25 -1
- package/dist/resources/extensions/gsd/dashboard-overlay.js +1 -1
- package/dist/resources/extensions/gsd/db/unit-dispatches.js +92 -0
- package/dist/resources/extensions/gsd/db-adapter.js +47 -0
- package/dist/resources/extensions/gsd/db-base-schema.js +353 -0
- package/dist/resources/extensions/gsd/db-connection-cache.js +31 -0
- package/dist/resources/extensions/gsd/db-coordination-schema.js +104 -0
- package/dist/resources/extensions/gsd/db-decision-requirement-rows.js +71 -0
- package/dist/resources/extensions/gsd/db-gate-rows.js +16 -0
- package/dist/resources/extensions/gsd/db-lightweight-query-rows.js +29 -0
- package/dist/resources/extensions/gsd/db-memory-fts-schema.js +56 -0
- package/dist/resources/extensions/gsd/db-migration-backup.js +22 -0
- package/dist/resources/extensions/gsd/db-migration-steps.js +416 -0
- package/dist/resources/extensions/gsd/db-milestone-artifact-rows.js +35 -0
- package/dist/resources/extensions/gsd/db-open-state.js +32 -0
- package/dist/resources/extensions/gsd/db-provider.js +108 -0
- package/dist/resources/extensions/gsd/db-runtime-kv-schema.js +27 -0
- package/dist/resources/extensions/gsd/db-schema-metadata.js +23 -0
- package/dist/resources/extensions/gsd/db-task-slice-rows.js +86 -0
- package/dist/resources/extensions/gsd/db-transaction.js +63 -0
- package/dist/resources/extensions/gsd/db-verification-evidence-rows.js +3 -0
- package/dist/resources/extensions/gsd/db-verification-evidence-schema.js +19 -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/escalation.js +2 -0
- package/dist/resources/extensions/gsd/git-service.js +75 -6
- package/dist/resources/extensions/gsd/graph.js +9 -3
- package/dist/resources/extensions/gsd/gsd-db.js +331 -1535
- package/dist/resources/extensions/gsd/guided-flow.js +149 -48
- package/dist/resources/extensions/gsd/health-widget-core.js +1 -1
- package/dist/resources/extensions/gsd/health-widget.js +6 -9
- package/dist/resources/extensions/gsd/init-wizard.js +4 -1
- package/dist/resources/extensions/gsd/legacy-telemetry.js +70 -0
- package/dist/resources/extensions/gsd/markdown-renderer.js +2 -0
- 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/model-router.js +9 -6
- package/dist/resources/extensions/gsd/native-git-bridge.js +46 -22
- package/dist/resources/extensions/gsd/notification-overlay.js +35 -40
- package/dist/resources/extensions/gsd/notification-widget.js +21 -3
- package/dist/resources/extensions/gsd/orphan-stash-audit.js +101 -0
- package/dist/resources/extensions/gsd/parallel-merge.js +53 -30
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +25 -33
- 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/post-execution-checks.js +2 -0
- package/dist/resources/extensions/gsd/pr-evidence.js +117 -0
- package/dist/resources/extensions/gsd/pre-execution-checks.js +24 -0
- package/dist/resources/extensions/gsd/process-task-path.js +61 -0
- package/dist/resources/extensions/gsd/prompt-loader.js +37 -7
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +41 -35
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +25 -34
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +70 -98
- package/dist/resources/extensions/gsd/prompts/discuss.md +101 -183
- package/dist/resources/extensions/gsd/prompts/execute-task.md +42 -67
- package/dist/resources/extensions/gsd/prompts/forensics.md +41 -84
- package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
- package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
- package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
- package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
- package/dist/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +47 -59
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +25 -87
- package/dist/resources/extensions/gsd/prompts/queue.md +46 -53
- package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -5
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +23 -23
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/dist/resources/extensions/gsd/prompts/research-slice.md +23 -23
- package/dist/resources/extensions/gsd/prompts/rethink.md +10 -10
- package/dist/resources/extensions/gsd/prompts/system.md +65 -107
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +15 -15
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
- package/dist/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
- package/dist/resources/extensions/gsd/quick.js +34 -2
- package/dist/resources/extensions/gsd/recovery-classification.js +94 -0
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +10 -2
- package/dist/resources/extensions/gsd/slice-cadence.js +45 -2
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +15 -9
- package/dist/resources/extensions/gsd/state-reconciliation.js +27 -0
- package/dist/resources/extensions/gsd/state.js +4 -0
- package/dist/resources/extensions/gsd/tool-contract.js +50 -0
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +20 -16
- package/dist/resources/extensions/gsd/tools/complete-task.js +3 -1
- 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 +7 -2
- package/dist/resources/extensions/gsd/tui/render-kit.js +74 -0
- 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/uok/kernel.js +8 -3
- package/dist/resources/extensions/gsd/uok/plan-v2.js +2 -0
- package/dist/resources/extensions/gsd/watch/header-renderer.js +92 -69
- package/dist/resources/extensions/gsd/watch/splash-palette.js +10 -0
- package/dist/resources/extensions/gsd/workflow-logger.js +13 -13
- package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +2 -2
- package/dist/resources/extensions/gsd/workflow-projections.js +2 -0
- package/dist/resources/extensions/gsd/workflow-protocol.js +131 -0
- package/dist/resources/extensions/gsd/workflow-templates.js +9 -0
- package/dist/resources/extensions/gsd/working-output-messages.js +64 -0
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +1364 -0
- package/dist/resources/extensions/gsd/worktree-manager.js +16 -14
- package/dist/resources/extensions/gsd/worktree-safety.js +119 -0
- package/dist/resources/extensions/gsd/worktree-state-projection.js +317 -0
- package/dist/resources/extensions/gsd/worktree-telemetry.js +3 -1
- package/dist/resources/skills/web-quality-audit/scripts/analyze.sh +0 -0
- 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 +9 -9
- package/dist/web/standalone/.next/build-manifest.json +4 -4
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
- package/dist/web/standalone/.next/required-server-files.json +4 -4
- package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
- package/dist/web/standalone/.next/server/chunks/167.js +2 -0
- package/dist/web/standalone/.next/server/chunks/63.js +3 -3
- 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/middleware.js +2 -2
- package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
- package/dist/web/standalone/.next/server/next-font-manifest.json +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/8359.e059d86b255fce1c.js +10 -0
- package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-752f1e2ebdaa3e45.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-d82dbee6356c1733.js → webpack-de742b64187e13fe.js} +1 -1
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
- package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
- package/dist/web/standalone/package.json +1 -0
- package/dist/web/standalone/server.js +1 -1
- package/dist/welcome-screen.d.ts +2 -7
- package/dist/welcome-screen.js +68 -75
- package/package.json +20 -9
- package/packages/contracts/dist/index.d.ts +3 -0
- package/packages/contracts/dist/index.d.ts.map +1 -0
- package/packages/contracts/dist/index.js +5 -0
- package/packages/contracts/dist/index.js.map +1 -0
- package/packages/contracts/dist/rpc.d.ts +549 -0
- package/packages/contracts/dist/rpc.d.ts.map +1 -0
- package/packages/contracts/dist/rpc.js +53 -0
- package/packages/contracts/dist/rpc.js.map +1 -0
- package/packages/contracts/dist/rpc.test.d.ts +2 -0
- package/packages/contracts/dist/rpc.test.d.ts.map +1 -0
- package/packages/contracts/dist/rpc.test.js +47 -0
- package/packages/contracts/dist/rpc.test.js.map +1 -0
- package/packages/contracts/dist/workflow.d.ts +180 -0
- package/packages/contracts/dist/workflow.d.ts.map +1 -0
- package/packages/contracts/dist/workflow.js +201 -0
- package/packages/contracts/dist/workflow.js.map +1 -0
- package/packages/contracts/package.json +39 -0
- package/packages/contracts/src/index.ts +5 -0
- package/packages/contracts/src/rpc.test.ts +72 -0
- package/packages/contracts/src/rpc.ts +286 -0
- package/packages/contracts/src/workflow.ts +213 -0
- package/packages/contracts/tsconfig.json +25 -0
- package/packages/daemon/package.json +3 -2
- package/packages/daemon/src/event-bridge.test.ts +2 -1
- package/packages/daemon/src/event-bridge.ts +1 -1
- package/packages/daemon/src/event-formatter.test.ts +1 -2
- package/packages/daemon/src/event-formatter.ts +1 -2
- package/packages/daemon/src/session-manager.ts +2 -2
- package/packages/daemon/src/types.ts +3 -18
- package/packages/mcp-server/dist/server.d.ts +13 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +77 -0
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/session-manager.js +1 -1
- package/packages/mcp-server/dist/session-manager.js.map +1 -1
- package/packages/mcp-server/dist/types.d.ts +3 -11
- package/packages/mcp-server/dist/types.d.ts.map +1 -1
- package/packages/mcp-server/dist/types.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +24 -57
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +3 -2
- package/packages/mcp-server/src/mcp-server.test.ts +138 -0
- package/packages/mcp-server/src/server.ts +99 -1
- package/packages/mcp-server/src/session-manager.ts +2 -2
- package/packages/mcp-server/src/types.ts +7 -18
- package/packages/mcp-server/src/workflow-tools.test.ts +75 -2
- package/packages/mcp-server/src/workflow-tools.ts +32 -56
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/package.json +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 +9 -2
- package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent.js +43 -11
- 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 +31 -0
- package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/types.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-agent-core/src/agent-loop.test.ts +128 -0
- package/packages/pi-agent-core/src/agent-loop.ts +4 -1
- package/packages/pi-agent-core/src/agent.ts +52 -11
- 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 +26 -10
- 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/anthropic-auth.test.js +35 -13
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js +21 -11
- package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts +7 -0
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +9 -7
- package/packages/pi-ai/dist/providers/anthropic.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/minimax-tool-name.test.js +23 -14
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -1
- 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/dist/types.d.ts +2 -0
- package/packages/pi-ai/dist/types.d.ts.map +1 -1
- package/packages/pi-ai/dist/types.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js +48 -21
- package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js +22 -21
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js +22 -21
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js.map +1 -1
- package/packages/pi-ai/package.json +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/anthropic-auth.test.ts +39 -25
- package/packages/pi-ai/src/providers/anthropic-bearer-auth.test.ts +26 -22
- package/packages/pi-ai/src/providers/anthropic.ts +22 -9
- package/packages/pi-ai/src/providers/fake.ts +376 -0
- package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +34 -21
- package/packages/pi-ai/src/providers/register-builtins.ts +23 -0
- package/packages/pi-ai/src/types.ts +3 -0
- package/packages/pi-ai/src/utils/oauth/github-copilot.test.ts +56 -22
- package/packages/pi-ai/src/utils/oauth/google-antigravity.test.ts +24 -28
- package/packages/pi-ai/src/utils/oauth/google-gemini-cli.test.ts +24 -28
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +36 -1
- 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 +30 -1
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +21 -2
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +94 -16
- 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 +78 -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 +60 -4
- 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 +81 -4
- 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/core/tools/bash-spawn-windows.test.js +22 -56
- package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.js +3 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.js +12 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/find.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/find.js +14 -6
- package/packages/pi-coding-agent/dist/core/tools/find.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/grep.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/grep.js +12 -3
- package/packages/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +3 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts +2 -1
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.js +1 -0
- package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/ls.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/ls.js +10 -3
- package/packages/pi-coding-agent/dist/core/tools/ls.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.js +3 -1
- package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +7 -62
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js +115 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.d.ts +19 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.js +20 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/write.d.ts +4 -0
- package/packages/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/write.js +9 -1
- package/packages/pi-coding-agent/dist/core/tools/write.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js +47 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js.map +1 -0
- 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 +225 -18
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js +40 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts +25 -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 +113 -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 +58 -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 +13 -13
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts +1 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +58 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.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/diff.d.ts +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js +12 -6
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -41
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.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 +51 -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 +21 -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 +302 -56
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts +35 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js +152 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts +16 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js +73 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js +12 -8
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +86 -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 +111 -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 +14 -1
- 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 +77 -11
- 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-highlight.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.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 +123 -2
- 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 +39 -29
- 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 +51 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +1 -512
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js +3 -7
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
- 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 +28 -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/package.json +2 -1
- package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +40 -1
- package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +40 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +102 -16
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +91 -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 +63 -2
- 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 +92 -4
- 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/core/tools/bash-spawn-windows.test.ts +22 -66
- package/packages/pi-coding-agent/src/core/tools/bash.ts +4 -1
- package/packages/pi-coding-agent/src/core/tools/edit.ts +13 -1
- package/packages/pi-coding-agent/src/core/tools/find.ts +15 -6
- package/packages/pi-coding-agent/src/core/tools/grep.ts +13 -3
- package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +4 -1
- package/packages/pi-coding-agent/src/core/tools/index.ts +8 -0
- package/packages/pi-coding-agent/src/core/tools/ls.ts +11 -3
- package/packages/pi-coding-agent/src/core/tools/read.ts +4 -1
- package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +11 -72
- package/packages/pi-coding-agent/src/core/tools/tool-target-metadata.test.ts +127 -0
- package/packages/pi-coding-agent/src/core/tools/tool-target.ts +48 -0
- package/packages/pi-coding-agent/src/core/tools/write.ts +14 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/assistant-message-design.test.ts +56 -0
- 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 +325 -20
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/user-message-design.test.ts +48 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +66 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +161 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +14 -13
- package/packages/pi-coding-agent/src/modes/interactive/components/bash-execution.ts +64 -3
- package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +10 -9
- package/packages/pi-coding-agent/src/modes/interactive/components/diff.ts +13 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +15 -42
- 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 +71 -9
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +327 -68
- package/packages/pi-coding-agent/src/modes/interactive/components/transcript-design.ts +196 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tui-style-kit.ts +94 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/user-message.ts +14 -9
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +118 -1
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +108 -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 +101 -11
- 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-highlight.test.ts +23 -0
- 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 +138 -3
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +39 -29
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +68 -0
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.ts +29 -0
- package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +1 -1
- package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +3 -336
- package/packages/pi-coding-agent/src/resources/extensions/memory/storage-safety-guard.test.ts +31 -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__/overlay-layout.test.js +14 -1
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.js.map +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/overlay-layout.d.ts.map +1 -1
- package/packages/pi-tui/dist/overlay-layout.js +9 -6
- package/packages/pi-tui/dist/overlay-layout.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.map +1 -1
- package/packages/pi-tui/dist/tui.js +19 -8
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/src/__tests__/overlay-layout.test.ts +20 -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/overlay-layout.ts +10 -7
- package/packages/pi-tui/src/style.ts +225 -0
- package/packages/pi-tui/src/tui.ts +21 -8
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/README.md +10 -3
- package/packages/rpc-client/dist/index.d.ts +1 -1
- package/packages/rpc-client/dist/index.d.ts.map +1 -1
- package/packages/rpc-client/dist/index.js.map +1 -1
- package/packages/rpc-client/dist/rpc-client.d.ts +2 -6
- package/packages/rpc-client/dist/rpc-client.d.ts.map +1 -1
- package/packages/rpc-client/dist/rpc-client.js.map +1 -1
- package/packages/rpc-client/dist/rpc-types.d.ts +1 -565
- package/packages/rpc-client/dist/rpc-types.d.ts.map +1 -1
- package/packages/rpc-client/dist/rpc-types.js +3 -11
- package/packages/rpc-client/dist/rpc-types.js.map +1 -1
- package/packages/rpc-client/package.json +4 -1
- package/packages/rpc-client/src/index.ts +1 -1
- package/packages/rpc-client/src/rpc-client.ts +3 -6
- package/packages/rpc-client/src/rpc-types.ts +3 -398
- package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts +2 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -0
- 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 +123 -2
- 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 +39 -29
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/GSD-WORKFLOW.md +2 -2
- package/src/resources/extensions/claude-code-cli/readiness.ts +25 -7
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +42 -3
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +67 -0
- package/src/resources/extensions/github-sync/sync.ts +8 -1
- package/src/resources/extensions/github-sync/templates.ts +93 -88
- package/src/resources/extensions/github-sync/tests/inline-code.test.ts +66 -0
- package/src/resources/extensions/github-sync/tests/sync-source.test.ts +6 -18
- package/src/resources/extensions/github-sync/tests/templates.test.ts +10 -2
- package/src/resources/extensions/gsd/auto/contracts.ts +19 -2
- package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +72 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +20 -16
- package/src/resources/extensions/gsd/auto/loop.ts +645 -603
- package/src/resources/extensions/gsd/auto/orchestrator.ts +52 -4
- package/src/resources/extensions/gsd/auto/phases.ts +546 -222
- package/src/resources/extensions/gsd/auto/resolve.ts +42 -1
- package/src/resources/extensions/gsd/auto/run-unit.ts +119 -46
- package/src/resources/extensions/gsd/auto/session.ts +19 -1
- package/src/resources/extensions/gsd/auto/types.ts +3 -0
- package/src/resources/extensions/gsd/auto/unit-runner-events.ts +15 -0
- package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +82 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.ts +28 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-iteration.ts +52 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.ts +58 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.ts +71 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-retry.ts +90 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.ts +50 -0
- package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +159 -0
- package/src/resources/extensions/gsd/auto/workflow-dispatch-ledger.ts +45 -0
- package/src/resources/extensions/gsd/auto/workflow-iteration-completion.ts +26 -0
- package/src/resources/extensions/gsd/auto/workflow-journal-reporter.ts +33 -0
- package/src/resources/extensions/gsd/auto/workflow-kernel.ts +520 -0
- package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +58 -0
- package/src/resources/extensions/gsd/auto/workflow-phase-reporter.ts +22 -0
- package/src/resources/extensions/gsd/auto/workflow-session-lock.ts +68 -0
- package/src/resources/extensions/gsd/auto/workflow-sidecar-iteration.ts +46 -0
- package/src/resources/extensions/gsd/auto/workflow-sidecar-queue.ts +46 -0
- package/src/resources/extensions/gsd/auto/workflow-turn-reporter.ts +68 -0
- package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +89 -0
- package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +51 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +304 -184
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +8 -34
- package/src/resources/extensions/gsd/auto-dispatch.ts +48 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +141 -91
- package/src/resources/extensions/gsd/auto-prompts.ts +398 -19
- package/src/resources/extensions/gsd/auto-recovery.ts +207 -7
- package/src/resources/extensions/gsd/auto-runtime-state.ts +5 -0
- package/src/resources/extensions/gsd/auto-start.ts +328 -27
- 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-unit-closeout.ts +51 -0
- package/src/resources/extensions/gsd/auto-verification.ts +17 -7
- package/src/resources/extensions/gsd/auto-worktree.ts +352 -396
- package/src/resources/extensions/gsd/auto.ts +590 -127
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +181 -12
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +56 -37
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +36 -10
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +32 -19
- package/src/resources/extensions/gsd/bootstrap/journal-tools.ts +5 -1
- package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +7 -4
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +6 -3
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +1 -1
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +411 -58
- package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +5 -8
- package/src/resources/extensions/gsd/bootstrap/sanitize-complete-milestone.ts +4 -0
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +90 -22
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +153 -2
- 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/handlers/notifications-handler.ts +4 -10
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +4 -2
- package/src/resources/extensions/gsd/commands-config.ts +1 -1
- package/src/resources/extensions/gsd/commands-eval-review.ts +2 -2
- 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/commands-ship.ts +24 -51
- package/src/resources/extensions/gsd/commands-workflow-templates.ts +13 -0
- package/src/resources/extensions/gsd/component-loader.ts +5 -11
- 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 +29 -0
- package/src/resources/extensions/gsd/dashboard-overlay.ts +1 -1
- package/src/resources/extensions/gsd/db/unit-dispatches.ts +107 -0
- package/src/resources/extensions/gsd/db-adapter.ts +75 -0
- package/src/resources/extensions/gsd/db-base-schema.ts +385 -0
- package/src/resources/extensions/gsd/db-connection-cache.ts +45 -0
- package/src/resources/extensions/gsd/db-coordination-schema.ts +109 -0
- package/src/resources/extensions/gsd/db-decision-requirement-rows.ts +77 -0
- package/src/resources/extensions/gsd/db-gate-rows.ts +19 -0
- package/src/resources/extensions/gsd/db-lightweight-query-rows.ts +50 -0
- package/src/resources/extensions/gsd/db-memory-fts-schema.ts +66 -0
- package/src/resources/extensions/gsd/db-migration-backup.ts +34 -0
- package/src/resources/extensions/gsd/db-migration-steps.ts +459 -0
- package/src/resources/extensions/gsd/db-milestone-artifact-rows.ts +70 -0
- package/src/resources/extensions/gsd/db-open-state.ts +47 -0
- package/src/resources/extensions/gsd/db-provider.ts +148 -0
- package/src/resources/extensions/gsd/db-runtime-kv-schema.ts +30 -0
- package/src/resources/extensions/gsd/db-schema-metadata.ts +33 -0
- package/src/resources/extensions/gsd/db-task-slice-rows.ts +146 -0
- package/src/resources/extensions/gsd/db-transaction.ts +76 -0
- package/src/resources/extensions/gsd/db-verification-evidence-rows.ts +14 -0
- package/src/resources/extensions/gsd/db-verification-evidence-schema.ts +22 -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/escalation.ts +3 -1
- package/src/resources/extensions/gsd/git-service.ts +89 -10
- package/src/resources/extensions/gsd/graph.ts +12 -5
- package/src/resources/extensions/gsd/gsd-db.ts +399 -1677
- package/src/resources/extensions/gsd/guided-flow.ts +175 -55
- package/src/resources/extensions/gsd/health-widget-core.ts +1 -1
- package/src/resources/extensions/gsd/health-widget.ts +8 -9
- package/src/resources/extensions/gsd/init-wizard.ts +5 -1
- package/src/resources/extensions/gsd/journal.ts +2 -0
- package/src/resources/extensions/gsd/legacy-telemetry.ts +99 -0
- package/src/resources/extensions/gsd/markdown-renderer.ts +4 -1
- 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/model-router.ts +10 -6
- package/src/resources/extensions/gsd/native-git-bridge.ts +53 -19
- package/src/resources/extensions/gsd/notification-overlay.ts +50 -46
- package/src/resources/extensions/gsd/notification-widget.ts +25 -4
- package/src/resources/extensions/gsd/orphan-stash-audit.ts +117 -0
- package/src/resources/extensions/gsd/parallel-merge.ts +61 -34
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +33 -35
- 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/post-execution-checks.ts +4 -1
- package/src/resources/extensions/gsd/pr-evidence.ts +182 -0
- package/src/resources/extensions/gsd/pre-execution-checks.ts +27 -1
- package/src/resources/extensions/gsd/preferences-types.ts +1 -1
- package/src/resources/extensions/gsd/process-task-path.ts +81 -0
- package/src/resources/extensions/gsd/prompt-loader.ts +36 -7
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +41 -35
- package/src/resources/extensions/gsd/prompts/complete-slice.md +25 -34
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +70 -98
- package/src/resources/extensions/gsd/prompts/discuss.md +101 -183
- package/src/resources/extensions/gsd/prompts/execute-task.md +42 -67
- package/src/resources/extensions/gsd/prompts/forensics.md +41 -84
- package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
- package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
- package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
- package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
- package/src/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +47 -59
- package/src/resources/extensions/gsd/prompts/plan-slice.md +25 -87
- package/src/resources/extensions/gsd/prompts/queue.md +46 -53
- package/src/resources/extensions/gsd/prompts/quick-task.md +1 -5
- package/src/resources/extensions/gsd/prompts/refine-slice.md +23 -23
- package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/src/resources/extensions/gsd/prompts/research-slice.md +23 -23
- package/src/resources/extensions/gsd/prompts/rethink.md +10 -10
- package/src/resources/extensions/gsd/prompts/system.md +65 -107
- package/src/resources/extensions/gsd/prompts/triage-captures.md +15 -15
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
- package/src/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
- package/src/resources/extensions/gsd/quick.ts +37 -2
- package/src/resources/extensions/gsd/recovery-classification.ts +122 -0
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +11 -2
- package/src/resources/extensions/gsd/slice-cadence.ts +49 -2
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +23 -9
- package/src/resources/extensions/gsd/state-reconciliation.ts +57 -0
- package/src/resources/extensions/gsd/state.ts +6 -3
- package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +59 -89
- package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +47 -172
- package/src/resources/extensions/gsd/tests/artifacts-table-preserved-on-cache-invalidate.test.ts +0 -35
- package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +232 -9
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1269 -242
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +80 -59
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +119 -2
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +3 -47
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +363 -18
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +175 -11
- package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +54 -76
- package/src/resources/extensions/gsd/tests/auto-project-root-env.test.ts +67 -26
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +184 -2
- package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +32 -30
- package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +16 -1
- package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +32 -128
- package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +20 -54
- package/src/resources/extensions/gsd/tests/auto-start-cold-db-bootstrap.test.ts +20 -30
- package/src/resources/extensions/gsd/tests/auto-start-index-lock.test.ts +17 -29
- package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +160 -0
- package/src/resources/extensions/gsd/tests/auto-start-time-persistence.test.ts +21 -39
- package/src/resources/extensions/gsd/tests/auto-start-worktree-db-path.test.ts +15 -24
- package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +44 -29
- package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +39 -51
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +159 -213
- package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +15 -32
- package/src/resources/extensions/gsd/tests/browser-teardown.test.ts +0 -41
- package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +97 -2
- package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +34 -27
- package/src/resources/extensions/gsd/tests/cmux.test.ts +51 -53
- package/src/resources/extensions/gsd/tests/cold-resume-db-reopen.test.ts +39 -61
- package/src/resources/extensions/gsd/tests/commands-config.test.ts +26 -19
- package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/commands-ship-eval-warn.test.ts +3 -2
- 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-milestone-prompt-rendering.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +159 -5
- package/src/resources/extensions/gsd/tests/complete-slice-composer.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/complete-task-normalize-lists.test.ts +29 -33
- package/src/resources/extensions/gsd/tests/completed-units-metrics-sync.test.ts +45 -108
- package/src/resources/extensions/gsd/tests/component-loader.test.ts +2 -9
- 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 +90 -31
- 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 +190 -11
- package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +139 -0
- package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +50 -0
- package/src/resources/extensions/gsd/tests/cwd-fallback-hardening.test.ts +138 -0
- package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +4 -68
- package/src/resources/extensions/gsd/tests/db-adapter.test.ts +82 -0
- package/src/resources/extensions/gsd/tests/db-base-schema.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/db-connection-cache.test.ts +60 -0
- package/src/resources/extensions/gsd/tests/db-coordination-schema.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/db-decision-requirement-rows.test.ts +135 -0
- package/src/resources/extensions/gsd/tests/db-gate-rows.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/db-lightweight-query-rows.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +86 -0
- package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +105 -0
- package/src/resources/extensions/gsd/tests/db-migration-steps.integration.test.ts +428 -0
- package/src/resources/extensions/gsd/tests/db-migration-steps.test.ts +159 -0
- package/src/resources/extensions/gsd/tests/db-milestone-artifact-rows.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/db-open-state.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/db-provider.test.ts +105 -0
- package/src/resources/extensions/gsd/tests/db-runtime-kv-schema.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +115 -0
- package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +128 -0
- package/src/resources/extensions/gsd/tests/db-transaction.test.ts +110 -0
- package/src/resources/extensions/gsd/tests/db-verification-evidence-schema.test.ts +76 -0
- package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +24 -11
- package/src/resources/extensions/gsd/tests/deferred-milestone-dir-4996.test.ts +14 -65
- package/src/resources/extensions/gsd/tests/detection.test.ts +140 -0
- package/src/resources/extensions/gsd/tests/discuss-headless-rendering.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/discuss-tool-scoping.test.ts +44 -37
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +100 -38
- package/src/resources/extensions/gsd/tests/dispatch-guard-closed-status.test.ts +25 -15
- package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +313 -0
- package/src/resources/extensions/gsd/tests/dispatcher-stuck-planning.test.ts +35 -17
- package/src/resources/extensions/gsd/tests/error-success-mask.test.ts +16 -21
- package/src/resources/extensions/gsd/tests/est-annotation-timeout.test.ts +15 -82
- 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 +62 -0
- 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 +151 -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/flat-rate-routing-guard.test.ts +2 -20
- package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/frontmatter-parse-noise.test.ts +18 -26
- 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/guided-discuss-milestone-prompt-rendering.test.ts +43 -0
- package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +41 -0
- package/src/resources/extensions/gsd/tests/guided-discuss-requirements-prompt-rendering.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/has-pending-deep-stage.test.ts +33 -1
- package/src/resources/extensions/gsd/tests/header-renderer.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +10 -0
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +14 -4
- package/src/resources/extensions/gsd/tests/init-skip-git.test.ts +9 -12
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +77 -0
- package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/integration/git-locale.test.ts +31 -20
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +92 -0
- package/src/resources/extensions/gsd/tests/integration/milestone-transition-worktree.test.ts +0 -47
- package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +116 -24
- package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +5 -3
- package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +60 -202
- package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +13 -56
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +248 -11
- 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/lazy-pi-tui-import.test.ts +44 -6
- package/src/resources/extensions/gsd/tests/legacy-component-format-telemetry.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/legacy-telemetry.test.ts +144 -0
- package/src/resources/extensions/gsd/tests/memory-decay-factor.test.ts +90 -0
- package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +53 -43
- package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +77 -12
- 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 +267 -0
- package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +88 -98
- package/src/resources/extensions/gsd/tests/model-router.test.ts +33 -12
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +70 -278
- package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +34 -2
- package/src/resources/extensions/gsd/tests/needs-remediation-revalidation.test.ts +37 -30
- package/src/resources/extensions/gsd/tests/note-captures-executed.test.ts +32 -28
- package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +78 -41
- package/src/resources/extensions/gsd/tests/notification-store.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/notification-widget.test.ts +40 -1
- package/src/resources/extensions/gsd/tests/notifications-handler.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +12 -182
- package/src/resources/extensions/gsd/tests/orphan-merge-bootstrap.test.ts +144 -0
- package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +201 -0
- package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +38 -6
- package/src/resources/extensions/gsd/tests/parallel-orchestrator-fast-forward.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/phantom-ghost-detection.test.ts +24 -37
- package/src/resources/extensions/gsd/tests/phantom-milestone-default-queued.test.ts +9 -24
- package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +95 -75
- package/src/resources/extensions/gsd/tests/plan-milestone-rendering.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +65 -16
- 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/post-exec-retry-bypass.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +36 -22
- 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/pr-evidence.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/pre-exec-backtick-strip.test.ts +36 -30
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +45 -5
- package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +74 -4
- package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +20 -22
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +130 -32
- package/src/resources/extensions/gsd/tests/process-task-path.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/project-root-cwd-crash.test.ts +18 -36
- package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +35 -73
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +76 -138
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +24 -1
- 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 +70 -91
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +59 -161
- package/src/resources/extensions/gsd/tests/query-tools-db-open.test.ts +33 -29
- package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +22 -196
- package/src/resources/extensions/gsd/tests/queue-prompt-rendering.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +23 -93
- package/src/resources/extensions/gsd/tests/quick-external-gsd.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +50 -79
- package/src/resources/extensions/gsd/tests/reassess-default-optin.test.ts +27 -13
- package/src/resources/extensions/gsd/tests/remote-questions.test.ts +151 -251
- package/src/resources/extensions/gsd/tests/resource-loader-import-path.test.ts +41 -29
- package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +58 -69
- package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +36 -164
- package/src/resources/extensions/gsd/tests/right-sized-workflow-prompts.test.ts +192 -0
- package/src/resources/extensions/gsd/tests/run-uat-replay-cap.test.ts +57 -41
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +91 -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-model-override.test.ts +14 -9
- 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 +222 -0
- package/src/resources/extensions/gsd/tests/show-config-command.test.ts +44 -42
- package/src/resources/extensions/gsd/tests/signal-handlers.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/skip-slice-state-rebuild.test.ts +56 -24
- package/src/resources/extensions/gsd/tests/skipped-validation-db-atomicity.test.ts +51 -11
- package/src/resources/extensions/gsd/tests/slice-cadence.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +66 -50
- package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +68 -107
- package/src/resources/extensions/gsd/tests/slice-sequence-insert.test.ts +115 -42
- package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +21 -59
- package/src/resources/extensions/gsd/tests/smart-entry-draft.test.ts +25 -116
- package/src/resources/extensions/gsd/tests/sqlite-unavailable-gate.test.ts +21 -57
- package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +29 -76
- package/src/resources/extensions/gsd/tests/stale-lockfile-recovery.test.ts +33 -24
- package/src/resources/extensions/gsd/tests/stale-slice-rows.test.ts +39 -30
- 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 +65 -56
- package/src/resources/extensions/gsd/tests/status-db-open.test.ts +35 -40
- package/src/resources/extensions/gsd/tests/stop-auto-merge-back.test.ts +48 -46
- package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +14 -102
- package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +78 -232
- package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +32 -35
- 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-profile.test.ts +84 -309
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +295 -0
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +32 -9
- package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +134 -341
- package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +330 -0
- package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +140 -8
- package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +8 -25
- 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 -99
- package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +43 -36
- package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +83 -0
- package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +84 -444
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-dispatch-outcome.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-iteration.test.ts +93 -0
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile-outcome.test.ts +108 -0
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile.test.ts +146 -0
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-retry.test.ts +136 -0
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-verify-outcome.test.ts +95 -0
- package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +300 -0
- package/src/resources/extensions/gsd/tests/workflow-dispatch-ledger.test.ts +82 -0
- package/src/resources/extensions/gsd/tests/workflow-iteration-completion.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/workflow-journal-reporter.test.ts +49 -0
- package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +607 -0
- package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +44 -189
- package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +20 -4
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +8 -57
- package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/workflow-phase-reporter.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/workflow-protocol-excerpt.test.ts +99 -0
- package/src/resources/extensions/gsd/tests/workflow-session-lock.test.ts +135 -0
- package/src/resources/extensions/gsd/tests/workflow-sidecar-iteration.test.ts +110 -0
- package/src/resources/extensions/gsd/tests/workflow-sidecar-queue.test.ts +116 -0
- package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/workflow-turn-reporter.test.ts +87 -0
- package/src/resources/extensions/gsd/tests/workflow-unit-dispatch.test.ts +160 -0
- package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +154 -0
- package/src/resources/extensions/gsd/tests/working-output-messages.test.ts +93 -0
- package/src/resources/extensions/gsd/tests/worktree-db-same-file.test.ts +21 -44
- package/src/resources/extensions/gsd/tests/worktree-expected-warnings.test.ts +27 -26
- package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +38 -6
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +197 -78
- package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +888 -0
- package/src/resources/extensions/gsd/tests/worktree-main-branch.test.ts +20 -18
- 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-safety.test.ts +327 -0
- package/src/resources/extensions/gsd/tests/worktree-state-projection.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +17 -33
- package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +59 -2
- package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +179 -0
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +40 -1
- package/src/resources/extensions/gsd/tests/zero-slice-roadmap-guided.test.ts +19 -13
- package/src/resources/extensions/gsd/tool-contract.ts +82 -0
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +29 -24
- package/src/resources/extensions/gsd/tools/complete-task.ts +5 -2
- 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 +7 -2
- package/src/resources/extensions/gsd/tui/render-kit.ts +109 -0
- 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/uok/kernel.ts +10 -3
- package/src/resources/extensions/gsd/uok/plan-v2.ts +5 -1
- package/src/resources/extensions/gsd/watch/header-renderer.ts +121 -79
- package/src/resources/extensions/gsd/watch/splash-palette.ts +11 -0
- package/src/resources/extensions/gsd/workflow-logger.ts +13 -13
- package/src/resources/extensions/gsd/workflow-manifest.ts +6 -15
- package/src/resources/extensions/gsd/workflow-mcp.ts +2 -2
- package/src/resources/extensions/gsd/workflow-projections.ts +5 -1
- package/src/resources/extensions/gsd/workflow-protocol.ts +160 -0
- package/src/resources/extensions/gsd/workflow-templates.ts +11 -0
- package/src/resources/extensions/gsd/working-output-messages.ts +120 -0
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +1882 -0
- package/src/resources/extensions/gsd/worktree-manager.ts +15 -4
- package/src/resources/extensions/gsd/worktree-safety.ts +282 -0
- package/src/resources/extensions/gsd/worktree-state-projection.ts +404 -0
- package/src/resources/extensions/gsd/worktree-telemetry.ts +7 -2
- package/src/resources/skills/create-gsd-extension/templates/templates.test.ts +86 -40
- package/src/resources/skills/web-quality-audit/scripts/analyze.sh +0 -0
- package/dist/resources/extensions/gsd/worktree-resolver.js +0 -733
- package/dist/web/standalone/.next/server/chunks/6336.js +0 -1
- package/dist/web/standalone/.next/static/chunks/8336.6f6f30e410419aff.js +0 -10
- package/dist/web/standalone/.next/static/chunks/app/page-ff639266d978f2a0.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
- package/src/resources/extensions/gsd/tests/sync-layer-scope.test.ts +0 -434
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +0 -1247
- package/src/resources/extensions/gsd/worktree-resolver.ts +0 -909
- /package/dist/web/standalone/.next/static/{V-3Ehy4B24f9FCGiLPWIM → F5x9E6H9k_52fjqyql93y}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{V-3Ehy4B24f9FCGiLPWIM → F5x9E6H9k_52fjqyql93y}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-controller-ordering.test.js","sourceRoot":"","sources":["../../src/core/chat-controller-ordering.test.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from \"node:assert/strict\";\nimport { test } from \"node:test\";\n\nimport { handleAgentEvent } from \"../modes/interactive/controllers/chat-controller.js\";\n\nfunction makeUsage() {\n\treturn {\n\t\tinput: 0,\n\t\toutput: 0,\n\t\tcacheRead: 0,\n\t\tcacheWrite: 0,\n\t\ttotalTokens: 0,\n\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t};\n}\n\nfunction makeAssistant(content: any[]) {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent,\n\t\tapi: \"anthropic-messages\",\n\t\tprovider: \"claude-code\",\n\t\tmodel: \"claude-sonnet-4\",\n\t\tusage: makeUsage(),\n\t\tstopReason: \"stop\",\n\t\ttimestamp: Date.now(),\n\t};\n}\n\nfunction createHost() {\n\tconst chatContainer = {\n\t\tchildren: [] as any[],\n\t\taddChild(component: any) {\n\t\t\tthis.children.push(component);\n\t\t},\n\t\tremoveChild(component: any) {\n\t\t\tconst idx = this.children.indexOf(component);\n\t\t\tif (idx !== -1) this.children.splice(idx, 1);\n\t\t},\n\t\tclear() {\n\t\t\tthis.children = [];\n\t\t},\n\t};\n\n\tconst pinnedMessageContainer = {\n\t\tchildren: [] as any[],\n\t\taddChild(component: any) {\n\t\t\tthis.children.push(component);\n\t\t},\n\t\tremoveChild(component: any) {\n\t\t\tconst idx = this.children.indexOf(component);\n\t\t\tif (idx !== -1) this.children.splice(idx, 1);\n\t\t},\n\t\tclear() {\n\t\t\tthis.children = [];\n\t\t},\n\t};\n\n\tconst host: any = {\n\t\tisInitialized: true,\n\t\tinit: async () => {},\n\t\tdefaultEditor: { onEscape: undefined },\n\t\teditor: {},\n\t\tsession: { retryAttempt: 0, abortCompaction: () => {}, abortRetry: () => {} },\n\t\t// rows:1 keeps the pinned-zone off-screen-threshold at its floor (1) so\n\t\t// any rendered segment after a pinnable text block triggers the pin.\n\t\t// Real terminals are larger; see chat-controller rowsRenderedAfterContentIndex.\n\t\tui: { requestRender: () => {}, terminal: { rows: 1, columns: 80 } },\n\t\tfooter: { invalidate: () => {} },\n\t\tkeybindings: {},\n\t\tstatusContainer: { clear: () => {}, addChild: () => {} },\n\t\tchatContainer,\n\t\tsettingsManager: { getTimestampFormat: () => \"date-time-iso\", getShowImages: () => false },\n\t\tpendingTools: new Map(),\n\t\ttoolOutputExpanded: false,\n\t\thideThinkingBlock: false,\n\t\tisBashMode: false,\n\t\tdefaultWorkingMessage: \"Working...\",\n\t\tcompactionQueuedMessages: [],\n\t\teditorContainer: {},\n\t\tpendingMessagesContainer: { clear: () => {} },\n\t\tpinnedMessageContainer,\n\t\taddMessageToChat: () => {},\n\t\tgetMarkdownThemeWithSettings: () => ({}),\n\t\tformatWebSearchResult: () => \"\",\n\t\tgetRegisteredToolDefinition: () => undefined,\n\t\tcheckShutdownRequested: async () => {},\n\t\trebuildChatFromMessages: () => {},\n\t\tflushCompactionQueue: async () => {},\n\t\tshowStatus: () => {},\n\t\tshowError: () => {},\n\t\tupdatePendingMessagesDisplay: () => {},\n\t\tupdateTerminalTitle: () => {},\n\t\tupdateEditorBorderColor: () => {},\n\t};\n\n\treturn host;\n}\n\ntest(\"chat-controller renders content blocks in content[] index order (tool-first stream)\", async () => {\n\t// ToolExecutionComponent uses the global theme singleton.\n\t// Install a minimal no-op theme implementation for this unit test.\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\tconst toolId = \"mcp-tool-1\";\n\tconst toolCall = {\n\t\ttype: \"toolCall\",\n\t\tid: toolId,\n\t\tname: \"exec_command\",\n\t\targuments: { cmd: \"echo hi\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\tassert.equal(host.chatContainer.children.length, 0, \"nothing should render before content arrives\");\n\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([toolCall]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...toolCall,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"tool output\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([toolCall]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\t// content[0] = toolCall → ToolExecutionComponent renders first\n\tassert.equal(host.chatContainer.children.length, 1, \"tool execution block should render immediately\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([toolCall, { type: \"text\", text: \"done\" }]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\tdelta: \"done\",\n\t\t\t\tpartial: makeAssistant([toolCall, { type: \"text\", text: \"done\" }]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\t// content[0]=toolCall, content[1]=text → order: tool, then text\n\tassert.equal(host.chatContainer.children.length, 2, \"text run should render after tool in content[] order\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"AssistantMessageComponent\");\n});\n\ntest(\"chat-controller renders serverToolUse before trailing text matching content[] index order\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\tconst toolId = \"mcp-secure-1\";\n\tconst serverToolUse = {\n\t\ttype: \"serverToolUse\",\n\t\tid: toolId,\n\t\tname: \"mcp__gsd-workflow__secure_env_collect\",\n\t\tinput: { projectDir: \"/tmp/project\", keys: [{ key: \"SECURE_PASSWORD\" }], destination: \"dotenv\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([serverToolUse]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"server_tool_use\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\tpartial: makeAssistant([serverToolUse]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\t// content[0] = serverToolUse → ToolExecutionComponent renders first\n\tassert.equal(host.chatContainer.children.length, 1, \"server tool block should render immediately\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\n\thost.getMarkdownThemeWithSettings = () => ({});\n\tconst resultMessage = makeAssistant([\n\t\t{\n\t\t\t...serverToolUse,\n\t\t\texternalResult: {\n\t\t\t\tcontent: [{ type: \"text\", text: \"secure_env_collect was cancelled by user.\" }],\n\t\t\t\tdetails: {},\n\t\t\t\tisError: true,\n\t\t\t},\n\t\t},\n\t\t{ type: \"text\", text: \"The secure password collection was cancelled.\" },\n\t]);\n\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: resultMessage,\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"server_tool_use\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\tpartial: resultMessage,\n\t\t\t},\n\t\t} as any,\n\t);\n\n\t// content[0]=serverToolUse, content[1]=text → order: tool, then text\n\tassert.equal(host.chatContainer.children.length, 2, \"text run should render after server tool in content[] order\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"AssistantMessageComponent\");\n});\n\ntest(\"chat-controller replays final message_end content when result adds unstreamed trailing text\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst tool = {\n\t\ttype: \"toolCall\",\n\t\tid: \"mcp-end-replay-1\",\n\t\tname: \"read\",\n\t\tmcpServer: \"filesystem\",\n\t\targuments: { filePath: \"/tmp/demo.txt\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\tconst streamedContent = [\n\t\ttool,\n\t\t{ type: \"thinking\", thinking: \"I am analyzing tool output...\" },\n\t];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(streamedContent),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\tdelta: \"I am analyzing tool output...\",\n\t\t\t\tpartial: makeAssistant(streamedContent),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tassert.equal(host.chatContainer.children.length, 2, \"streaming shows tool + thinking only\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"AssistantMessageComponent\");\n\n\t// Final payload includes trailing text that never arrived as message_update.\n\tconst finalContent = [\n\t\ttool,\n\t\t{ type: \"thinking\", thinking: \"I am analyzing tool output...\" },\n\t\t{ type: \"text\", text: \"Correct anything important I missed?\" },\n\t];\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant(finalContent) } as any);\n\n\tassert.equal(host.chatContainer.children.length, 3, \"message_end should replay and include trailing text segment\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"AssistantMessageComponent\");\n\tassert.equal(host.chatContainer.children[2]?.constructor?.name, \"AssistantMessageComponent\");\n});\n\ntest(\"chat-controller keeps pre-tool prose visible until post-tool prose arrives, then prunes it\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst mcpTool = {\n\t\ttype: \"toolCall\",\n\t\tid: \"mcp-tool-1\",\n\t\tname: \"read\",\n\t\tmcpServer: \"filesystem\",\n\t\targuments: { filePath: \"/tmp/demo.txt\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\t// Provisional assistant text arrives first.\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"Let me inspect the workspace first.\" }]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\tdelta: \"Let me inspect the workspace first.\",\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"Let me inspect the workspace first.\" }]),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 1);\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"AssistantMessageComponent\");\n\n\t// MCP tool appears; provisional text should remain visible until post-tool prose exists.\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"Let me inspect the workspace first.\" }, mcpTool]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...mcpTool,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"file preview\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"Let me inspect the workspace first.\" }, mcpTool]),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 2, \"pre-tool prose should remain during tool-only window\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"AssistantMessageComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"ToolExecutionComponent\");\n\n\t// Post-tool prose arrives: pre-tool prose should now be pruned.\n\tconst finalContent = [\n\t\t{ type: \"text\", text: \"Let me inspect the workspace first.\" },\n\t\tmcpTool,\n\t\t{ type: \"text\", text: \"Which missing feature matters most to you?\" },\n\t];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(finalContent),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 2,\n\t\t\t\tdelta: \"Which missing feature matters most to you?\",\n\t\t\t\tpartial: makeAssistant(finalContent),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 2);\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"AssistantMessageComponent\");\n\n\t// Finalize to tear down any pinned spinner state.\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant(finalContent) } as any);\n});\n\ntest(\"chat-controller keeps pre-tool thinking visible for claude-code MCP turns without post-tool prose\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst mcpTool = {\n\t\ttype: \"toolCall\",\n\t\tid: \"mcp-tool-thinking-1\",\n\t\tname: \"read\",\n\t\tmcpServer: \"filesystem\",\n\t\targuments: { filePath: \"/tmp/demo.txt\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\tconst thinkingOnly = [{ type: \"thinking\", thinking: \"I should inspect the workspace.\" }];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(thinkingOnly),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\tdelta: \"I should inspect the workspace.\",\n\t\t\t\tpartial: makeAssistant(thinkingOnly),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 1);\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"AssistantMessageComponent\");\n\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([thinkingOnly[0], mcpTool]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...mcpTool,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"file preview\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([thinkingOnly[0], mcpTool]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tassert.equal(host.chatContainer.children.length, 2, \"thinking should remain visible while only tool output is present\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"AssistantMessageComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"ToolExecutionComponent\");\n\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant([thinkingOnly[0], mcpTool]) } as any);\n});\n\ntest(\"chat-controller keeps pre-tool question text for claude-code MCP when post-tool prose exists\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst mcpTool = {\n\t\ttype: \"toolCall\",\n\t\tid: \"mcp-tool-question-1\",\n\t\tname: \"glob\",\n\t\tmcpServer: \"filesystem\",\n\t\targuments: { pattern: \"**/*\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\tconst questionText = { type: \"text\", text: \"Which file should I inspect?\" };\n\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([questionText]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\tdelta: questionText.text,\n\t\t\t\tpartial: makeAssistant([questionText]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([questionText, mcpTool]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...mcpTool,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"glob output\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([questionText, mcpTool]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tconst postTool = { type: \"text\", text: \"I'll review that next.\" };\n\tconst finalContent = [questionText, mcpTool, postTool];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(finalContent),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 2,\n\t\t\t\tdelta: postTool.text,\n\t\t\t\tpartial: makeAssistant(finalContent),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tassert.equal(host.chatContainer.children.length, 3, \"question text should remain alongside MCP tool and post-tool prose\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"AssistantMessageComponent\", \"pre-tool question stays visible\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"ToolExecutionComponent\", \"tool renders in the middle\");\n\tassert.equal(host.chatContainer.children[2]?.constructor?.name, \"AssistantMessageComponent\", \"post-tool prose renders last\");\n\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant(finalContent) } as any);\n});\n\ntest(\"chat-controller prunes orphaned provisional text after claude-code sub-turn shrink when MCP tools appear\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst mcpTool = {\n\t\ttype: \"toolCall\",\n\t\tid: \"mcp-tool-shrink-1\",\n\t\tname: \"glob\",\n\t\tmcpServer: \"filesystem\",\n\t\targuments: { pattern: \"**/*\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\t// Sub-turn 1: generate longer provisional text content.\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"Old provisional preface.\" }, { type: \"text\", text: \"More old text.\" }]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\tdelta: \"More old text.\",\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"Old provisional preface.\" }, { type: \"text\", text: \"More old text.\" }]),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 1, \"first sub-turn text run should render\");\n\n\t// Sub-turn 2 starts (content shrink): old component is orphaned by design.\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"New provisional text before tool.\" }]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\tdelta: \"New provisional text before tool.\",\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"New provisional text before tool.\" }]),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 2, \"shrink keeps prior text until MCP tool context appears\");\n\n\t// MCP tool appears in sub-turn 2: tool-only windows keep provisional prose visible.\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"New provisional text before tool.\" }, mcpTool]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...mcpTool,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"glob output\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"New provisional text before tool.\" }, mcpTool]),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 3, \"stale text runs are deferred until post-tool prose arrives\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"AssistantMessageComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"AssistantMessageComponent\");\n\tassert.equal(host.chatContainer.children[2]?.constructor?.name, \"ToolExecutionComponent\");\n\n\tconst finalContent = [mcpTool, { type: \"text\", text: \"Final visible question?\" }];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(finalContent),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\tdelta: \"Final visible question?\",\n\t\t\t\tpartial: makeAssistant(finalContent),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 2);\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"AssistantMessageComponent\");\n\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant(finalContent) } as any);\n});\n\ntest(\"chat-controller prunes orphans from multiple sub-turn shrinks before MCP post-tool prose\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst mcpTool = {\n\t\ttype: \"toolCall\",\n\t\tid: \"mcp-tool-multi-shrink-1\",\n\t\tname: \"glob\",\n\t\tmcpServer: \"filesystem\",\n\t\targuments: { pattern: \"**/*\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\t// Sub-turn 1: 3 text blocks (merged into one text-run).\n\tconst subTurn1 = [\n\t\t{ type: \"text\", text: \"First provisional A.\" },\n\t\t{ type: \"text\", text: \"First provisional B.\" },\n\t\t{ type: \"text\", text: \"First provisional C.\" },\n\t];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(subTurn1),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 2,\n\t\t\t\tdelta: \"First provisional C.\",\n\t\t\t\tpartial: makeAssistant(subTurn1),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 1, \"first sub-turn renders 1 text-run\");\n\n\t// Sub-turn 2 (first shrink 3 → 2 blocks).\n\tconst subTurn2 = [\n\t\t{ type: \"text\", text: \"Second provisional A.\" },\n\t\t{ type: \"text\", text: \"Second provisional B.\" },\n\t];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(subTurn2),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\tdelta: \"Second provisional B.\",\n\t\t\t\tpartial: makeAssistant(subTurn2),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 2, \"first shrink appends, keeps prior text as frozen history\");\n\n\t// Sub-turn 3 (second shrink 2 → 1 block). This is the critical step —\n\t// without orphan accumulation, sub-turn 1's orphaned segment would be\n\t// dropped from tracking here and later strand in the container.\n\tconst subTurn3 = [{ type: \"text\", text: \"Third provisional.\" }];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(subTurn3),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\tdelta: \"Third provisional.\",\n\t\t\t\tpartial: makeAssistant(subTurn3),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 3, \"second shrink appends again, still no prune (no post-tool text)\");\n\n\t// MCP tool appears — tool-only window still keeps provisional prose visible.\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"Third provisional.\" }, mcpTool]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...mcpTool,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"glob output\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"Third provisional.\" }, mcpTool]),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 4, \"tool-only window keeps all three provisional text-runs\");\n\n\t// Final post-tool text arrives — prune must drop ALL three pre-tool\n\t// provisional text-runs across both shrinks, leaving only tool + final text.\n\tconst finalContent = [mcpTool, { type: \"text\", text: \"Final answer.\" }];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(finalContent),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\tdelta: \"Final answer.\",\n\t\t\t\tpartial: makeAssistant(finalContent),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(\n\t\thost.chatContainer.children.length,\n\t\t2,\n\t\t\"all pre-tool provisional segments from every shrink must be pruned once post-tool prose arrives\",\n\t);\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"AssistantMessageComponent\");\n\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant(finalContent) } as any);\n});\n\ntest(\"chat-controller pins latest assistant text above editor when tool calls are present\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\tconst toolId = \"tool-pin-1\";\n\tconst toolCall = {\n\t\ttype: \"toolCall\",\n\t\tid: toolId,\n\t\tname: \"exec_command\",\n\t\targuments: { cmd: \"echo hi\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\tassert.equal(host.pinnedMessageContainer.children.length, 0, \"pinned zone should be empty at message_start\");\n\n\t// Send a message with text followed by a tool call\n\thost.getMarkdownThemeWithSettings = () => ({});\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([\n\t\t\t\t{ type: \"text\", text: \"Looking at the files now.\" },\n\t\t\t\ttoolCall,\n\t\t\t]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...toolCall,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"file contents\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"Looking at the files now.\" }, toolCall]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\t// Pinned zone should now have a DynamicBorder and a Markdown component\n\tassert.equal(host.pinnedMessageContainer.children.length, 2, \"pinned zone should have border + markdown\");\n\tassert.equal(host.pinnedMessageContainer.children[0]?.constructor?.name, \"DynamicBorder\");\n\tassert.equal(host.pinnedMessageContainer.children[1]?.constructor?.name, \"Markdown\");\n});\n\ntest(\"chat-controller clears pinned zone when a new assistant message starts\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\tconst toolCall = {\n\t\ttype: \"toolCall\",\n\t\tid: \"tool-clear-1\",\n\t\tname: \"exec_command\",\n\t\targuments: { cmd: \"echo hi\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\t// Populate the pinned zone\n\thost.getMarkdownThemeWithSettings = () => ({});\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"Working on it.\" }, toolCall]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...toolCall,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"ok\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"Working on it.\" }, toolCall]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tassert.ok(host.pinnedMessageContainer.children.length > 0, \"pinned zone should be populated\");\n\n\t// Start a new assistant message — pinned zone should clear\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\tassert.equal(host.pinnedMessageContainer.children.length, 0, \"pinned zone should clear on new assistant message\");\n});\n\ntest(\"chat-controller clears pinned zone when the agent turn ends\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\tconst toolCall = {\n\t\ttype: \"toolCall\",\n\t\tid: \"tool-clear-on-end-1\",\n\t\tname: \"exec_command\",\n\t\targuments: { cmd: \"echo hi\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\thost.getMarkdownThemeWithSettings = () => ({});\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"Working on it.\" }, toolCall]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...toolCall,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"ok\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"Working on it.\" }, toolCall]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tassert.ok(host.pinnedMessageContainer.children.length > 0, \"pinned zone should be populated before agent_end\");\n\n\tawait handleAgentEvent(host, { type: \"agent_end\" } as any);\n\n\tassert.equal(host.pinnedMessageContainer.children.length, 0, \"pinned zone should clear on agent_end\");\n});\n\ntest(\"chat-controller clears pinned zone when assistant message ends\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\tconst toolCall = {\n\t\ttype: \"toolCall\",\n\t\tid: \"tool-msg-end-1\",\n\t\tname: \"exec_command\",\n\t\targuments: { cmd: \"echo hi\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\thost.getMarkdownThemeWithSettings = () => ({});\n\tconst msgContent = [{ type: \"text\", text: \"Summary after tools.\" }, toolCall];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(msgContent),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...toolCall,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"ok\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant(msgContent),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tassert.ok(host.pinnedMessageContainer.children.length > 0, \"pinned zone should be populated during streaming\");\n\n\t// End the assistant message (e.g. before form elicitation) — pinned zone should clear\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant(msgContent) } as any);\n\n\tassert.equal(host.pinnedMessageContainer.children.length, 0, \"pinned zone should clear on message_end to prevent duplicate display\");\n});\n\ntest(\"chat-controller does not pin when there are no tool calls\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\thost.getMarkdownThemeWithSettings = () => ({});\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"Just some text, no tools.\" }]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\tdelta: \"Just some text, no tools.\",\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"Just some text, no tools.\" }]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tassert.equal(host.pinnedMessageContainer.children.length, 0, \"pinned zone should stay empty without tool calls\");\n});\n\n// Regression test for issue #4144: interleaved text/tool content must render in content[] index order.\n// Stream: [text \"A\", toolCall T1, text \"B\", toolCall T2, text \"C\"]\n// Expected chatContainer order: textRun(A), toolExec(T1), textRun(B), toolExec(T2), textRun(C)\n// Each AssistantMessageComponent must render ONLY its own text — no duplication after message_end.\ntest(\"chat-controller renders interleaved text and tool blocks in content[] index order (#4144)\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst t1 = { type: \"toolCall\", id: \"t1\", name: \"tool_one\", arguments: {} };\n\tconst t2 = { type: \"toolCall\", id: \"t2\", name: \"tool_two\", arguments: {} };\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\t// Stream text \"A\" at index 0\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\",\n\t\t\tcontentIndex: 0,\n\t\t\tdelta: \"A\",\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }]),\n\t\t},\n\t} as any);\n\n\t// Stream toolCall T1 at index 1\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }, t1]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"toolcall_end\",\n\t\t\tcontentIndex: 1,\n\t\t\ttoolCall: {\n\t\t\t\t...t1,\n\t\t\t\texternalResult: { content: [{ type: \"text\", text: \"result1\" }], details: {}, isError: false },\n\t\t\t},\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }, t1]),\n\t\t},\n\t} as any);\n\n\t// Stream text \"B\" at index 2\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }, t1, { type: \"text\", text: \"B\" }]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\",\n\t\t\tcontentIndex: 2,\n\t\t\tdelta: \"B\",\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }, t1, { type: \"text\", text: \"B\" }]),\n\t\t},\n\t} as any);\n\n\t// Stream toolCall T2 at index 3\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }, t1, { type: \"text\", text: \"B\" }, t2]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"toolcall_end\",\n\t\t\tcontentIndex: 3,\n\t\t\ttoolCall: {\n\t\t\t\t...t2,\n\t\t\t\texternalResult: { content: [{ type: \"text\", text: \"result2\" }], details: {}, isError: false },\n\t\t\t},\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }, t1, { type: \"text\", text: \"B\" }, t2]),\n\t\t},\n\t} as any);\n\n\t// Stream text \"C\" at index 4\n\tconst finalContent = [\n\t\t{ type: \"text\", text: \"A\" }, t1, { type: \"text\", text: \"B\" }, t2, { type: \"text\", text: \"C\" },\n\t];\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant(finalContent),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\",\n\t\t\tcontentIndex: 4,\n\t\t\tdelta: \"C\",\n\t\t\tpartial: makeAssistant(finalContent),\n\t\t},\n\t} as any);\n\n\t// Finalize — exercises the message_end path where a buggy setRange(undefined) would cause duplication\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant(finalContent) } as any);\n\n\t// Assert interleaved order: textRun(A), toolExec(T1), textRun(B), toolExec(T2), textRun(C)\n\tassert.equal(host.chatContainer.children.length, 5, \"should have 5 children in interleaved order\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"AssistantMessageComponent\", \"index 0: text run A\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"ToolExecutionComponent\", \"index 1: tool T1\");\n\tassert.equal(host.chatContainer.children[2]?.constructor?.name, \"AssistantMessageComponent\", \"index 2: text run B\");\n\tassert.equal(host.chatContainer.children[3]?.constructor?.name, \"ToolExecutionComponent\", \"index 3: tool T2\");\n\tassert.equal(host.chatContainer.children[4]?.constructor?.name, \"AssistantMessageComponent\", \"index 4: text run C\");\n\n\t// Helper: collect the text of all Markdown children inside an AssistantMessageComponent.\n\t// Structure: AssistantMessageComponent (Container) -> contentContainer (children[0]) -> Markdown nodes.\n\tfunction getRenderedTexts(comp: any): string[] {\n\t\tconst contentContainer = comp.children?.[0];\n\t\tif (!contentContainer) return [];\n\t\treturn (contentContainer.children ?? [])\n\t\t\t.filter((c: any) => c.constructor?.name === \"Markdown\")\n\t\t\t.map((c: any) => (c as any).text as string);\n\t}\n\n\t// Each text-run component must contain only its own text — no cross-contamination after message_end\n\tassert.deepEqual(getRenderedTexts(host.chatContainer.children[0]), [\"A\"], \"text run A must contain only 'A'\");\n\tassert.deepEqual(getRenderedTexts(host.chatContainer.children[2]), [\"B\"], \"text run B must contain only 'B'\");\n\tassert.deepEqual(getRenderedTexts(host.chatContainer.children[4]), [\"C\"], \"text run C must contain only 'C'\");\n});\n\ntest(\"chat-controller does not duplicate text when content is [text, tool, text] (interleaved stream)\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst t1 = { type: \"toolCall\", id: \"t1\", name: \"tool_one\", arguments: {} };\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\t// Step 1: text \"A\" at index 0\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\",\n\t\t\tcontentIndex: 0,\n\t\t\tdelta: \"A\",\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }]),\n\t\t},\n\t} as any);\n\n\t// Step 2: toolCall at index 1\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }, t1]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"toolcall_end\",\n\t\t\tcontentIndex: 1,\n\t\t\ttoolCall: {\n\t\t\t\t...t1,\n\t\t\t\texternalResult: { content: [{ type: \"text\", text: \"result1\" }], details: {}, isError: false },\n\t\t\t},\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }, t1]),\n\t\t},\n\t} as any);\n\n\t// Step 3: text \"B\" at index 2\n\tconst finalContent = [{ type: \"text\", text: \"A\" }, t1, { type: \"text\", text: \"B\" }];\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant(finalContent),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\",\n\t\t\tcontentIndex: 2,\n\t\t\tdelta: \"B\",\n\t\t\tpartial: makeAssistant(finalContent),\n\t\t},\n\t} as any);\n\n\tassert.equal(host.chatContainer.children.length, 3);\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"AssistantMessageComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.equal(host.chatContainer.children[2]?.constructor?.name, \"AssistantMessageComponent\");\n\n\tconst firstText = host.chatContainer.children[0];\n\tconst secondText = host.chatContainer.children[2];\n\tassert.notEqual(firstText, secondText, \"text-before-tool and text-after-tool must be separate component instances\");\n\tassert.deepEqual((firstText as any).range, { startIndex: 0, endIndex: 0 }, \"first text-run covers only content[0]\");\n\tassert.deepEqual((secondText as any).range, { startIndex: 2, endIndex: 2 }, \"second text-run covers only content[2]\");\n\n\t// Finalize — regression guard: range must NOT be cleared on message_end (would cause duplication)\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant(finalContent) } as any);\n\n\tassert.deepEqual((secondText as any).range, { startIndex: 2, endIndex: 2 }, \"range must not be cleared on message_end (would cause duplication)\");\n});\n\n// Regression for the claude-code sub-turn bug that followed #4144:\n// an adapter can reset content[] back to 0/1 mid-lifecycle when a new provider\n// sub-turn begins. The segment walker must NOT update prior-sub-turn text-run\n// components in place (which would destroy earlier history) and must NOT reuse\n// stale tool registrations for a new tool at the same contentIndex. Prior\n// sub-turn children must stay frozen; new sub-turn segments must append after\n// them, and the pinned \"Latest Output\" mirror must re-evaluate for the new sub-turn.\ntest(\"chat-controller freezes prior sub-turn and appends new segments when content shrinks\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst t1 = { type: \"toolCall\", id: \"t1\", name: \"tool_one\", arguments: {} };\n\tconst t2 = { type: \"toolCall\", id: \"t2\", name: \"tool_two\", arguments: {} };\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\t// Sub-turn 1: grow to [A, T1, B]\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\", contentIndex: 0, delta: \"A\",\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }]),\n\t\t},\n\t} as any);\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }, t1]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"toolcall_end\", contentIndex: 1,\n\t\t\ttoolCall: { ...t1, externalResult: { content: [{ type: \"text\", text: \"r1\" }], details: {}, isError: false } },\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }, t1]),\n\t\t},\n\t} as any);\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }, t1, { type: \"text\", text: \"B\" }]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\", contentIndex: 2, delta: \"B\",\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }, t1, { type: \"text\", text: \"B\" }]),\n\t\t},\n\t} as any);\n\n\tassert.equal(host.chatContainer.children.length, 3, \"sub-turn 1 renders 3 children\");\n\tconst priorA = host.chatContainer.children[0];\n\tconst priorT1 = host.chatContainer.children[1];\n\tconst priorB = host.chatContainer.children[2];\n\n\t// Sub-turn boundary: adapter resets content[] to [C]\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"C\" }]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\", contentIndex: 0, delta: \"C\",\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"C\" }]),\n\t\t},\n\t} as any);\n\n\t// Prior 3 children must still exist in DOM — and a NEW text-run for \"C\" appended after them.\n\tassert.equal(host.chatContainer.children.length, 4, \"shrink must append new segment, not replace prior history\");\n\tassert.equal(host.chatContainer.children[0], priorA, \"prior A component stays at index 0\");\n\tassert.equal(host.chatContainer.children[1], priorT1, \"prior T1 component stays at index 1\");\n\tassert.equal(host.chatContainer.children[2], priorB, \"prior B component stays at index 2\");\n\tassert.notEqual(host.chatContainer.children[3], priorA, \"new C text-run must be a different component from prior A\");\n\tassert.equal(host.chatContainer.children[3]?.constructor?.name, \"AssistantMessageComponent\");\n\n\t// Prior A component must still render \"A\", not be overwritten with \"C\".\n\tfunction getRenderedTexts(comp: any): string[] {\n\t\tconst contentContainer = comp.children?.[0];\n\t\tif (!contentContainer) return [];\n\t\treturn (contentContainer.children ?? [])\n\t\t\t.filter((c: any) => c.constructor?.name === \"Markdown\")\n\t\t\t.map((c: any) => (c as any).text as string);\n\t}\n\tassert.deepEqual(getRenderedTexts(priorA), [\"A\"], \"prior A text-run must still contain 'A' after shrink\");\n\tassert.deepEqual(getRenderedTexts(priorB), [\"B\"], \"prior B text-run must still contain 'B' after shrink\");\n\tassert.deepEqual(getRenderedTexts(host.chatContainer.children[3]), [\"C\"], \"new text-run must contain only 'C'\");\n\n\t// Sub-turn 2 grows with a new tool T2 at contentIndex=1.\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"C\" }, t2]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"toolcall_end\", contentIndex: 1,\n\t\t\ttoolCall: { ...t2, externalResult: { content: [{ type: \"text\", text: \"r2\" }], details: {}, isError: false } },\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"C\" }, t2]),\n\t\t},\n\t} as any);\n\n\t// T2 must be appended after the new C text-run, not conflated with the stale T1 registration.\n\tassert.equal(host.chatContainer.children.length, 5, \"new tool appends after new text-run\");\n\tassert.equal(host.chatContainer.children[4]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.notEqual(host.chatContainer.children[4], priorT1, \"new T2 must be a different component from prior T1\");\n\n\t// Finalize so the module-level pinned spinner (setInterval) is torn down and the test process can exit.\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant([{ type: \"text\", text: \"C\" }, t2]) } as any);\n});\n\n// Regression: after a sub-turn shrink, lastPinnedText must be cleared so the\n// pinned \"Latest Output\" mirror can display text from the new sub-turn instead\n// of staying frozen on a stale snapshot (the \"bottom green stays\" symptom).\ntest(\"chat-controller updates pinned zone after sub-turn shrink\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst t1 = { type: \"toolCall\", id: \"t1\", name: \"tool_one\", arguments: {} };\n\tconst t2 = { type: \"toolCall\", id: \"t2\", name: \"tool_two\", arguments: {} };\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\t// Sub-turn 1 with pinnable text before a tool → populates pinned zone with \"first\".\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"first\" }, t1]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"toolcall_end\", contentIndex: 1,\n\t\t\ttoolCall: { ...t1, externalResult: { content: [{ type: \"text\", text: \"r1\" }], details: {}, isError: false } },\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"first\" }, t1]),\n\t\t},\n\t} as any);\n\tconst pinnedMarkdown = host.pinnedMessageContainer.children[1];\n\tassert.equal((pinnedMarkdown as any)?.text, \"first\", \"pinned zone seeded with sub-turn 1 text\");\n\n\t// Sub-turn boundary: content resets to [second, t2].\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"second\" }, t2]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"toolcall_end\", contentIndex: 1,\n\t\t\ttoolCall: { ...t2, externalResult: { content: [{ type: \"text\", text: \"r2\" }], details: {}, isError: false } },\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"second\" }, t2]),\n\t\t},\n\t} as any);\n\n\t// Pinned markdown must now reflect the new sub-turn's text, not stay frozen on \"first\".\n\tassert.equal((pinnedMarkdown as any)?.text, \"second\", \"pinned zone must update after sub-turn shrink (#4144 regression)\");\n\n\t// Finalize so the module-level pinned spinner (setInterval) is torn down and the test process can exit.\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant([{ type: \"text\", text: \"second\" }, t2]) } as any);\n});\n\ntest(\"chat-controller: agent_end without message_end must not remove streaming component from DOM (regression #4197)\", async () => {\n\tconst host = createHost();\n\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_start\",\n\t\tmessage: makeAssistant([]),\n\t} as any);\n\n\t// Simulate partial streaming that creates an AssistantMessageComponent\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"partial answer\" }]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\",\n\t\t\tcontentIndex: 0,\n\t\t\tdelta: \"partial answer\",\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"partial answer\" }]),\n\t\t},\n\t} as any);\n\n\t// Precondition: component is in DOM\n\tassert.equal(\n\t\thost.chatContainer.children.length,\n\t\t1,\n\t\t\"streaming component must be in DOM after message_update\",\n\t);\n\tconst comp = host.chatContainer.children[0];\n\n\t// Simulate abort: agent_end fires WITHOUT message_end\n\tawait handleAgentEvent(host, { type: \"agent_end\" } as any);\n\n\tassert.equal(\n\t\thost.chatContainer.children.length,\n\t\t1,\n\t\t\"agent_end must NOT remove the streaming component from the DOM (issue #4197)\",\n\t);\n\tassert.equal(\n\t\thost.chatContainer.children[0],\n\t\tcomp,\n\t\t\"the same component instance must remain in the DOM after agent_end\",\n\t);\n});\n\ntest(\"chat-controller: agent_end after message_end must not alter DOM\", async () => {\n\tconst host = createHost();\n\tconst content = [{ type: \"text\", text: \"complete answer\" }];\n\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_start\",\n\t\tmessage: makeAssistant([]),\n\t} as any);\n\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant(content),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\",\n\t\t\tcontentIndex: 0,\n\t\t\tdelta: \"complete answer\",\n\t\t\tpartial: makeAssistant(content),\n\t\t},\n\t} as any);\n\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_end\",\n\t\tmessage: makeAssistant(content),\n\t} as any);\n\n\tconst countAfterMessageEnd = host.chatContainer.children.length;\n\tassert.ok(countAfterMessageEnd > 0, \"component must be present after message_end\");\n\n\tawait handleAgentEvent(host, { type: \"agent_end\" } as any);\n\n\tassert.equal(\n\t\thost.chatContainer.children.length,\n\t\tcountAfterMessageEnd,\n\t\t\"agent_end after message_end must not add or remove DOM nodes\",\n\t);\n});\n"]}
|
|
1
|
+
{"version":3,"file":"chat-controller-ordering.test.js","sourceRoot":"","sources":["../../src/core/chat-controller-ordering.test.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from \"node:assert/strict\";\nimport { test } from \"node:test\";\n\nimport { handleAgentEvent } from \"../modes/interactive/controllers/chat-controller.js\";\n\nfunction makeUsage() {\n\treturn {\n\t\tinput: 0,\n\t\toutput: 0,\n\t\tcacheRead: 0,\n\t\tcacheWrite: 0,\n\t\ttotalTokens: 0,\n\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t};\n}\n\nfunction makeAssistant(content: any[]) {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent,\n\t\tapi: \"anthropic-messages\",\n\t\tprovider: \"claude-code\",\n\t\tmodel: \"claude-sonnet-4\",\n\t\tusage: makeUsage(),\n\t\tstopReason: \"stop\",\n\t\ttimestamp: Date.now(),\n\t};\n}\n\nfunction createHost() {\n\tconst chatContainer = {\n\t\tchildren: [] as any[],\n\t\taddChild(component: any) {\n\t\t\tthis.children.push(component);\n\t\t},\n\t\tremoveChild(component: any) {\n\t\t\tconst idx = this.children.indexOf(component);\n\t\t\tif (idx !== -1) this.children.splice(idx, 1);\n\t\t},\n\t\tclear() {\n\t\t\tthis.children = [];\n\t\t},\n\t};\n\n\tconst pinnedMessageContainer = {\n\t\tchildren: [] as any[],\n\t\taddChild(component: any) {\n\t\t\tthis.children.push(component);\n\t\t},\n\t\tremoveChild(component: any) {\n\t\t\tconst idx = this.children.indexOf(component);\n\t\t\tif (idx !== -1) this.children.splice(idx, 1);\n\t\t},\n\t\tclear() {\n\t\t\tthis.children = [];\n\t\t},\n\t};\n\n\tconst host: any = {\n\t\tisInitialized: true,\n\t\tinit: async () => {},\n\t\tdefaultEditor: { onEscape: undefined },\n\t\teditor: {},\n\t\tsession: { retryAttempt: 0, abortCompaction: () => {}, abortRetry: () => {} },\n\t\t// rows:1 keeps the pinned-zone off-screen-threshold at its floor (1) so\n\t\t// any rendered segment after a pinnable text block triggers the pin.\n\t\t// Real terminals are larger; see chat-controller rowsRenderedAfterContentIndex.\n\t\tui: { requestRender: () => {}, terminal: { rows: 1, columns: 80 } },\n\t\tfooter: { invalidate: () => {} },\n\t\tkeybindings: {},\n\t\tstatusContainer: { clear: () => {}, addChild: () => {} },\n\t\tchatContainer,\n\t\tsettingsManager: { getTimestampFormat: () => \"date-time-iso\", getShowImages: () => false },\n\t\tpendingTools: new Map(),\n\t\ttoolOutputExpanded: false,\n\t\thideThinkingBlock: false,\n\t\tisBashMode: false,\n\t\tdefaultWorkingMessage: \"Working...\",\n\t\tcompactionQueuedMessages: [],\n\t\teditorContainer: {},\n\t\tpendingMessagesContainer: { clear: () => {} },\n\t\tpinnedMessageContainer,\n\t\taddMessageToChat: () => {},\n\t\tgetMarkdownThemeWithSettings: () => ({}),\n\t\tformatWebSearchResult: () => \"\",\n\t\tgetRegisteredToolDefinition: () => undefined,\n\t\tcheckShutdownRequested: async () => {},\n\t\trebuildChatFromMessages: () => {},\n\t\tflushCompactionQueue: async () => {},\n\t\tshowStatus: () => {},\n\t\tshowError: () => {},\n\t\tupdatePendingMessagesDisplay: () => {},\n\t\tupdateTerminalTitle: () => {},\n\t\tupdateEditorBorderColor: () => {},\n\t};\n\n\treturn host;\n}\n\ntest(\"chat-controller renders content blocks in content[] index order (tool-first stream)\", async () => {\n\t// ToolExecutionComponent uses the global theme singleton.\n\t// Install a minimal no-op theme implementation for this unit test.\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\tconst toolId = \"mcp-tool-1\";\n\tconst toolCall = {\n\t\ttype: \"toolCall\",\n\t\tid: toolId,\n\t\tname: \"exec_command\",\n\t\targuments: { cmd: \"echo hi\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\tassert.equal(host.chatContainer.children.length, 0, \"nothing should render before content arrives\");\n\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([toolCall]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...toolCall,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"tool output\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([toolCall]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\t// content[0] = toolCall → ToolExecutionComponent renders first\n\tassert.equal(host.chatContainer.children.length, 1, \"tool execution block should render immediately\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([toolCall, { type: \"text\", text: \"done\" }]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\tdelta: \"done\",\n\t\t\t\tpartial: makeAssistant([toolCall, { type: \"text\", text: \"done\" }]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\t// content[0]=toolCall, content[1]=text → order: tool, then text\n\tassert.equal(host.chatContainer.children.length, 2, \"text run should render after tool in content[] order\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"AssistantMessageComponent\");\n});\n\ntest(\"chat-controller renders serverToolUse before trailing text matching content[] index order\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\tconst toolId = \"mcp-secure-1\";\n\tconst serverToolUse = {\n\t\ttype: \"serverToolUse\",\n\t\tid: toolId,\n\t\tname: \"mcp__gsd-workflow__secure_env_collect\",\n\t\tinput: { projectDir: \"/tmp/project\", keys: [{ key: \"SECURE_PASSWORD\" }], destination: \"dotenv\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([serverToolUse]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"server_tool_use\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\tpartial: makeAssistant([serverToolUse]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\t// content[0] = serverToolUse → ToolExecutionComponent renders first\n\tassert.equal(host.chatContainer.children.length, 1, \"server tool block should render immediately\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\n\thost.getMarkdownThemeWithSettings = () => ({});\n\tconst resultMessage = makeAssistant([\n\t\t{\n\t\t\t...serverToolUse,\n\t\t\texternalResult: {\n\t\t\t\tcontent: [{ type: \"text\", text: \"secure_env_collect was cancelled by user.\" }],\n\t\t\t\tdetails: {},\n\t\t\t\tisError: true,\n\t\t\t},\n\t\t},\n\t\t{ type: \"text\", text: \"The secure password collection was cancelled.\" },\n\t]);\n\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: resultMessage,\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"server_tool_use\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\tpartial: resultMessage,\n\t\t\t},\n\t\t} as any,\n\t);\n\n\t// content[0]=serverToolUse, content[1]=text → order: tool, then text\n\tassert.equal(host.chatContainer.children.length, 2, \"text run should render after server tool in content[] order\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"AssistantMessageComponent\");\n});\n\ntest(\"chat-controller replays final message_end content when result adds unstreamed trailing text\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst tool = {\n\t\ttype: \"toolCall\",\n\t\tid: \"mcp-end-replay-1\",\n\t\tname: \"read\",\n\t\tmcpServer: \"filesystem\",\n\t\targuments: { filePath: \"/tmp/demo.txt\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\tconst streamedContent = [\n\t\ttool,\n\t\t{ type: \"thinking\", thinking: \"I am analyzing tool output...\" },\n\t];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(streamedContent),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\tdelta: \"I am analyzing tool output...\",\n\t\t\t\tpartial: makeAssistant(streamedContent),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tassert.equal(host.chatContainer.children.length, 2, \"streaming shows tool + thinking only\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"AssistantMessageComponent\");\n\n\t// Final payload includes trailing text that never arrived as message_update.\n\tconst finalContent = [\n\t\ttool,\n\t\t{ type: \"thinking\", thinking: \"I am analyzing tool output...\" },\n\t\t{ type: \"text\", text: \"Correct anything important I missed?\" },\n\t];\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant(finalContent) } as any);\n\n\tassert.equal(host.chatContainer.children.length, 3, \"message_end should replay and include trailing text segment\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"AssistantMessageComponent\");\n\tassert.equal(host.chatContainer.children[2]?.constructor?.name, \"AssistantMessageComponent\");\n});\n\ntest(\"chat-controller keeps pre-tool prose visible until post-tool prose arrives, then prunes it\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst mcpTool = {\n\t\ttype: \"toolCall\",\n\t\tid: \"mcp-tool-1\",\n\t\tname: \"read\",\n\t\tmcpServer: \"filesystem\",\n\t\targuments: { filePath: \"/tmp/demo.txt\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\t// Provisional assistant text arrives first.\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"Let me inspect the workspace first.\" }]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\tdelta: \"Let me inspect the workspace first.\",\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"Let me inspect the workspace first.\" }]),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 1);\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"AssistantMessageComponent\");\n\n\t// MCP tool appears; provisional text should remain visible until post-tool prose exists.\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"Let me inspect the workspace first.\" }, mcpTool]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...mcpTool,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"file preview\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"Let me inspect the workspace first.\" }, mcpTool]),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 2, \"pre-tool prose should remain during tool-only window\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"AssistantMessageComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"ToolExecutionComponent\");\n\n\t// Post-tool prose arrives: pre-tool prose should now be pruned.\n\tconst finalContent = [\n\t\t{ type: \"text\", text: \"Let me inspect the workspace first.\" },\n\t\tmcpTool,\n\t\t{ type: \"text\", text: \"Which missing feature matters most to you?\" },\n\t];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(finalContent),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 2,\n\t\t\t\tdelta: \"Which missing feature matters most to you?\",\n\t\t\t\tpartial: makeAssistant(finalContent),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 2);\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"AssistantMessageComponent\");\n\n\t// Finalize to tear down any pinned spinner state.\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant(finalContent) } as any);\n});\n\ntest(\"chat-controller keeps pre-tool thinking visible for claude-code MCP turns without post-tool prose\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst mcpTool = {\n\t\ttype: \"toolCall\",\n\t\tid: \"mcp-tool-thinking-1\",\n\t\tname: \"read\",\n\t\tmcpServer: \"filesystem\",\n\t\targuments: { filePath: \"/tmp/demo.txt\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\tconst thinkingOnly = [{ type: \"thinking\", thinking: \"I should inspect the workspace.\" }];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(thinkingOnly),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\tdelta: \"I should inspect the workspace.\",\n\t\t\t\tpartial: makeAssistant(thinkingOnly),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 1);\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"AssistantMessageComponent\");\n\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([thinkingOnly[0], mcpTool]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...mcpTool,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"file preview\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([thinkingOnly[0], mcpTool]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tassert.equal(host.chatContainer.children.length, 2, \"thinking should remain visible while only tool output is present\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"AssistantMessageComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"ToolExecutionComponent\");\n\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant([thinkingOnly[0], mcpTool]) } as any);\n});\n\ntest(\"chat-controller keeps pre-tool question text for claude-code MCP when post-tool prose exists\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst mcpTool = {\n\t\ttype: \"toolCall\",\n\t\tid: \"mcp-tool-question-1\",\n\t\tname: \"glob\",\n\t\tmcpServer: \"filesystem\",\n\t\targuments: { pattern: \"**/*\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\tconst questionText = { type: \"text\", text: \"Which file should I inspect?\" };\n\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([questionText]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\tdelta: questionText.text,\n\t\t\t\tpartial: makeAssistant([questionText]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([questionText, mcpTool]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...mcpTool,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"glob output\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([questionText, mcpTool]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tconst postTool = { type: \"text\", text: \"I'll review that next.\" };\n\tconst finalContent = [questionText, mcpTool, postTool];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(finalContent),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 2,\n\t\t\t\tdelta: postTool.text,\n\t\t\t\tpartial: makeAssistant(finalContent),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tassert.equal(host.chatContainer.children.length, 3, \"question text should remain alongside MCP tool and post-tool prose\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"AssistantMessageComponent\", \"pre-tool question stays visible\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"ToolExecutionComponent\", \"tool renders in the middle\");\n\tassert.equal(host.chatContainer.children[2]?.constructor?.name, \"AssistantMessageComponent\", \"post-tool prose renders last\");\n\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant(finalContent) } as any);\n});\n\ntest(\"chat-controller prunes orphaned provisional text after claude-code sub-turn shrink when MCP tools appear\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst mcpTool = {\n\t\ttype: \"toolCall\",\n\t\tid: \"mcp-tool-shrink-1\",\n\t\tname: \"glob\",\n\t\tmcpServer: \"filesystem\",\n\t\targuments: { pattern: \"**/*\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\t// Sub-turn 1: generate longer provisional text content.\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"Old provisional preface.\" }, { type: \"text\", text: \"More old text.\" }]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\tdelta: \"More old text.\",\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"Old provisional preface.\" }, { type: \"text\", text: \"More old text.\" }]),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 1, \"first sub-turn text run should render\");\n\n\t// Sub-turn 2 starts (content shrink): old component is orphaned by design.\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"New provisional text before tool.\" }]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\tdelta: \"New provisional text before tool.\",\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"New provisional text before tool.\" }]),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 2, \"shrink keeps prior text until MCP tool context appears\");\n\n\t// MCP tool appears in sub-turn 2: tool-only windows keep provisional prose visible.\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"New provisional text before tool.\" }, mcpTool]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...mcpTool,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"glob output\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"New provisional text before tool.\" }, mcpTool]),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 3, \"stale text runs are deferred until post-tool prose arrives\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"AssistantMessageComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"AssistantMessageComponent\");\n\tassert.equal(host.chatContainer.children[2]?.constructor?.name, \"ToolExecutionComponent\");\n\n\tconst finalContent = [mcpTool, { type: \"text\", text: \"Final visible question?\" }];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(finalContent),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\tdelta: \"Final visible question?\",\n\t\t\t\tpartial: makeAssistant(finalContent),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 2);\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"AssistantMessageComponent\");\n\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant(finalContent) } as any);\n});\n\ntest(\"chat-controller prunes orphans from multiple sub-turn shrinks before MCP post-tool prose\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst mcpTool = {\n\t\ttype: \"toolCall\",\n\t\tid: \"mcp-tool-multi-shrink-1\",\n\t\tname: \"glob\",\n\t\tmcpServer: \"filesystem\",\n\t\targuments: { pattern: \"**/*\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\t// Sub-turn 1: 3 text blocks (merged into one text-run).\n\tconst subTurn1 = [\n\t\t{ type: \"text\", text: \"First provisional A.\" },\n\t\t{ type: \"text\", text: \"First provisional B.\" },\n\t\t{ type: \"text\", text: \"First provisional C.\" },\n\t];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(subTurn1),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 2,\n\t\t\t\tdelta: \"First provisional C.\",\n\t\t\t\tpartial: makeAssistant(subTurn1),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 1, \"first sub-turn renders 1 text-run\");\n\n\t// Sub-turn 2 (first shrink 3 → 2 blocks).\n\tconst subTurn2 = [\n\t\t{ type: \"text\", text: \"Second provisional A.\" },\n\t\t{ type: \"text\", text: \"Second provisional B.\" },\n\t];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(subTurn2),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\tdelta: \"Second provisional B.\",\n\t\t\t\tpartial: makeAssistant(subTurn2),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 2, \"first shrink appends, keeps prior text as frozen history\");\n\n\t// Sub-turn 3 (second shrink 2 → 1 block). This is the critical step —\n\t// without orphan accumulation, sub-turn 1's orphaned segment would be\n\t// dropped from tracking here and later strand in the container.\n\tconst subTurn3 = [{ type: \"text\", text: \"Third provisional.\" }];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(subTurn3),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\tdelta: \"Third provisional.\",\n\t\t\t\tpartial: makeAssistant(subTurn3),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 3, \"second shrink appends again, still no prune (no post-tool text)\");\n\n\t// MCP tool appears — tool-only window still keeps provisional prose visible.\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"Third provisional.\" }, mcpTool]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...mcpTool,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"glob output\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"Third provisional.\" }, mcpTool]),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(host.chatContainer.children.length, 4, \"tool-only window keeps all three provisional text-runs\");\n\n\t// Final post-tool text arrives — prune must drop ALL three pre-tool\n\t// provisional text-runs across both shrinks, leaving only tool + final text.\n\tconst finalContent = [mcpTool, { type: \"text\", text: \"Final answer.\" }];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(finalContent),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\tdelta: \"Final answer.\",\n\t\t\t\tpartial: makeAssistant(finalContent),\n\t\t\t},\n\t\t} as any,\n\t);\n\tassert.equal(\n\t\thost.chatContainer.children.length,\n\t\t2,\n\t\t\"all pre-tool provisional segments from every shrink must be pruned once post-tool prose arrives\",\n\t);\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"AssistantMessageComponent\");\n\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant(finalContent) } as any);\n});\n\ntest(\"chat-controller pins latest assistant text above editor when tool calls are present\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\tconst toolId = \"tool-pin-1\";\n\tconst toolCall = {\n\t\ttype: \"toolCall\",\n\t\tid: toolId,\n\t\tname: \"exec_command\",\n\t\targuments: { cmd: \"echo hi\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\tassert.equal(host.pinnedMessageContainer.children.length, 0, \"pinned zone should be empty at message_start\");\n\n\t// Send a message with text followed by a tool call\n\thost.getMarkdownThemeWithSettings = () => ({});\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([\n\t\t\t\t{ type: \"text\", text: \"Looking at the files now.\" },\n\t\t\t\ttoolCall,\n\t\t\t]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...toolCall,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"file contents\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"Looking at the files now.\" }, toolCall]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\t// Pinned zone should now have a DynamicBorder and a Markdown component\n\tassert.equal(host.pinnedMessageContainer.children.length, 2, \"pinned zone should have border + markdown\");\n\tassert.equal(host.pinnedMessageContainer.children[0]?.constructor?.name, \"DynamicBorder\");\n\tassert.equal(host.pinnedMessageContainer.children[1]?.constructor?.name, \"Markdown\");\n});\n\ntest(\"chat-controller clears pinned zone when a new assistant message starts\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\tconst toolCall = {\n\t\ttype: \"toolCall\",\n\t\tid: \"tool-clear-1\",\n\t\tname: \"exec_command\",\n\t\targuments: { cmd: \"echo hi\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\t// Populate the pinned zone\n\thost.getMarkdownThemeWithSettings = () => ({});\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"Working on it.\" }, toolCall]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...toolCall,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"ok\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"Working on it.\" }, toolCall]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tassert.ok(host.pinnedMessageContainer.children.length > 0, \"pinned zone should be populated\");\n\n\t// Start a new assistant message — pinned zone should clear\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\tassert.equal(host.pinnedMessageContainer.children.length, 0, \"pinned zone should clear on new assistant message\");\n});\n\ntest(\"chat-controller clears pinned zone when the agent turn ends\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\tconst toolCall = {\n\t\ttype: \"toolCall\",\n\t\tid: \"tool-clear-on-end-1\",\n\t\tname: \"exec_command\",\n\t\targuments: { cmd: \"echo hi\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\thost.getMarkdownThemeWithSettings = () => ({});\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"Working on it.\" }, toolCall]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...toolCall,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"ok\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"Working on it.\" }, toolCall]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tassert.ok(host.pinnedMessageContainer.children.length > 0, \"pinned zone should be populated before agent_end\");\n\n\tawait handleAgentEvent(host, { type: \"agent_end\" } as any);\n\n\tassert.equal(host.pinnedMessageContainer.children.length, 0, \"pinned zone should clear on agent_end\");\n});\n\ntest(\"chat-controller clears pinned zone when assistant message ends\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\tconst toolCall = {\n\t\ttype: \"toolCall\",\n\t\tid: \"tool-msg-end-1\",\n\t\tname: \"exec_command\",\n\t\targuments: { cmd: \"echo hi\" },\n\t};\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\thost.getMarkdownThemeWithSettings = () => ({});\n\tconst msgContent = [{ type: \"text\", text: \"Summary after tools.\" }, toolCall];\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant(msgContent),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: 1,\n\t\t\t\ttoolCall: {\n\t\t\t\t\t...toolCall,\n\t\t\t\t\texternalResult: {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"ok\" }],\n\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\tisError: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpartial: makeAssistant(msgContent),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tassert.ok(host.pinnedMessageContainer.children.length > 0, \"pinned zone should be populated during streaming\");\n\n\t// End the assistant message (e.g. before form elicitation) — pinned zone should clear\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant(msgContent) } as any);\n\n\tassert.equal(host.pinnedMessageContainer.children.length, 0, \"pinned zone should clear on message_end to prevent duplicate display\");\n});\n\ntest(\"chat-controller does not pin when there are no tool calls\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\thost.getMarkdownThemeWithSettings = () => ({});\n\tawait handleAgentEvent(\n\t\thost,\n\t\t{\n\t\t\ttype: \"message_update\",\n\t\t\tmessage: makeAssistant([{ type: \"text\", text: \"Just some text, no tools.\" }]),\n\t\t\tassistantMessageEvent: {\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: 0,\n\t\t\t\tdelta: \"Just some text, no tools.\",\n\t\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"Just some text, no tools.\" }]),\n\t\t\t},\n\t\t} as any,\n\t);\n\n\tassert.equal(host.pinnedMessageContainer.children.length, 0, \"pinned zone should stay empty without tool calls\");\n});\n\ntest(\"chat-controller rolls up only contiguous low-signal tool runs on message_end\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst t1 = { type: \"toolCall\", id: \"t1\", name: \"bash\", arguments: { command: \"true\" } };\n\tconst t2 = { type: \"toolCall\", id: \"t2\", name: \"bash\", arguments: { command: \"true\" } };\n\tconst text = { type: \"text\", text: \"middle output\" };\n\tconst t3 = { type: \"toolCall\", id: \"t3\", name: \"read\", arguments: { path: \"/tmp/a\" } };\n\tconst t4 = { type: \"toolCall\", id: \"t4\", name: \"read\", arguments: { path: \"/tmp/b\" } };\n\tconst content = [t1, t2, text, t3, t4];\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant(content),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\",\n\t\t\tcontentIndex: 2,\n\t\t\tdelta: text.text,\n\t\t\tpartial: makeAssistant(content),\n\t\t},\n\t} as any);\n\n\tfor (const tool of [t1, t2, t3, t4]) {\n\t\tawait handleAgentEvent(host, {\n\t\t\ttype: \"tool_execution_end\",\n\t\t\ttoolCallId: tool.id,\n\t\t\tisError: false,\n\t\t\tresult: { content: [], details: {} },\n\t\t} as any);\n\t}\n\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant(content) } as any);\n\n\tassert.equal(host.chatContainer.children.length, 3, \"two separated tool runs should become two summaries around text\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolPhaseSummaryComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"AssistantMessageComponent\");\n\tassert.equal(host.chatContainer.children[2]?.constructor?.name, \"ToolPhaseSummaryComponent\");\n\tassert.match(host.chatContainer.children[0].render(120).join(\"\\n\"), /Setup \\/ shell 2 actions/);\n\tconst readSummary = host.chatContainer.children[2].render(120).join(\"\\n\");\n\tassert.match(readSummary, /Context reads · 2 files/);\n\tassert.match(readSummary, /\\/tmp\\/a · \\/tmp\\/b/);\n\tassert.equal(host.chatContainer._prevRender, null, \"summary reposition must invalidate the chat container render cache\");\n});\n\ntest(\"chat-controller rolls up low-signal direct tool execution events on agent_end\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tfor (const toolCallId of [\"bash-1\", \"bash-2\", \"bash-3\"]) {\n\t\tawait handleAgentEvent(host, {\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId,\n\t\t\ttoolName: \"bash\",\n\t\t\targs: { command: \"true\" },\n\t\t} as any);\n\t\tawait handleAgentEvent(host, {\n\t\t\ttype: \"tool_execution_end\",\n\t\t\ttoolCallId,\n\t\t\tisError: false,\n\t\t\tresult: { content: [], details: {} },\n\t\t} as any);\n\t}\n\n\tassert.equal(host.chatContainer.children.length, 1, \"direct tool events roll up as they finish\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolPhaseSummaryComponent\");\n\tassert.match(host.chatContainer.children[0].render(120).join(\"\\n\"), /Setup \\/ shell 3 actions/);\n\n\tawait handleAgentEvent(host, { type: \"agent_end\" } as any);\n\n\tassert.equal(host.chatContainer.children.length, 1, \"direct low-signal tool rows should roll up on agent_end\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"ToolPhaseSummaryComponent\");\n\tassert.match(host.chatContainer.children[0].render(120).join(\"\\n\"), /Setup \\/ shell 3 actions/);\n});\n\n// Regression test for issue #4144: interleaved text/tool content must render in content[] index order.\n// Stream: [text \"A\", toolCall T1, text \"B\", toolCall T2, text \"C\"]\n// Expected chatContainer order: textRun(A), toolExec(T1), textRun(B), toolExec(T2), textRun(C)\n// Each AssistantMessageComponent must render ONLY its own text — no duplication after message_end.\ntest(\"chat-controller renders interleaved text and tool blocks in content[] index order (#4144)\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst t1 = { type: \"toolCall\", id: \"t1\", name: \"tool_one\", arguments: {} };\n\tconst t2 = { type: \"toolCall\", id: \"t2\", name: \"tool_two\", arguments: {} };\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\t// Stream text \"A\" at index 0\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\",\n\t\t\tcontentIndex: 0,\n\t\t\tdelta: \"A\",\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }]),\n\t\t},\n\t} as any);\n\n\t// Stream toolCall T1 at index 1\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }, t1]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"toolcall_end\",\n\t\t\tcontentIndex: 1,\n\t\t\ttoolCall: {\n\t\t\t\t...t1,\n\t\t\t\texternalResult: { content: [{ type: \"text\", text: \"result1\" }], details: {}, isError: false },\n\t\t\t},\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }, t1]),\n\t\t},\n\t} as any);\n\n\t// Stream text \"B\" at index 2\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }, t1, { type: \"text\", text: \"B\" }]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\",\n\t\t\tcontentIndex: 2,\n\t\t\tdelta: \"B\",\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }, t1, { type: \"text\", text: \"B\" }]),\n\t\t},\n\t} as any);\n\n\t// Stream toolCall T2 at index 3\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }, t1, { type: \"text\", text: \"B\" }, t2]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"toolcall_end\",\n\t\t\tcontentIndex: 3,\n\t\t\ttoolCall: {\n\t\t\t\t...t2,\n\t\t\t\texternalResult: { content: [{ type: \"text\", text: \"result2\" }], details: {}, isError: false },\n\t\t\t},\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }, t1, { type: \"text\", text: \"B\" }, t2]),\n\t\t},\n\t} as any);\n\n\t// Stream text \"C\" at index 4\n\tconst finalContent = [\n\t\t{ type: \"text\", text: \"A\" }, t1, { type: \"text\", text: \"B\" }, t2, { type: \"text\", text: \"C\" },\n\t];\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant(finalContent),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\",\n\t\t\tcontentIndex: 4,\n\t\t\tdelta: \"C\",\n\t\t\tpartial: makeAssistant(finalContent),\n\t\t},\n\t} as any);\n\n\t// Finalize — exercises the message_end path where a buggy setRange(undefined) would cause duplication\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant(finalContent) } as any);\n\n\t// Assert interleaved order: textRun(A), toolExec(T1), textRun(B), toolExec(T2), textRun(C)\n\tassert.equal(host.chatContainer.children.length, 5, \"should have 5 children in interleaved order\");\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"AssistantMessageComponent\", \"index 0: text run A\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"ToolExecutionComponent\", \"index 1: tool T1\");\n\tassert.equal(host.chatContainer.children[2]?.constructor?.name, \"AssistantMessageComponent\", \"index 2: text run B\");\n\tassert.equal(host.chatContainer.children[3]?.constructor?.name, \"ToolExecutionComponent\", \"index 3: tool T2\");\n\tassert.equal(host.chatContainer.children[4]?.constructor?.name, \"AssistantMessageComponent\", \"index 4: text run C\");\n\n\t// Helper: collect the text of all Markdown children inside an AssistantMessageComponent.\n\t// Structure: AssistantMessageComponent (Container) -> contentContainer (children[0]) -> Markdown nodes.\n\tfunction getRenderedTexts(comp: any): string[] {\n\t\tconst contentContainer = comp.children?.[0];\n\t\tif (!contentContainer) return [];\n\t\treturn (contentContainer.children ?? [])\n\t\t\t.filter((c: any) => c.constructor?.name === \"Markdown\")\n\t\t\t.map((c: any) => (c as any).text as string);\n\t}\n\n\t// Each text-run component must contain only its own text — no cross-contamination after message_end\n\tassert.deepEqual(getRenderedTexts(host.chatContainer.children[0]), [\"A\"], \"text run A must contain only 'A'\");\n\tassert.deepEqual(getRenderedTexts(host.chatContainer.children[2]), [\"B\"], \"text run B must contain only 'B'\");\n\tassert.deepEqual(getRenderedTexts(host.chatContainer.children[4]), [\"C\"], \"text run C must contain only 'C'\");\n});\n\ntest(\"chat-controller does not duplicate text when content is [text, tool, text] (interleaved stream)\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst t1 = { type: \"toolCall\", id: \"t1\", name: \"tool_one\", arguments: {} };\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\t// Step 1: text \"A\" at index 0\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\",\n\t\t\tcontentIndex: 0,\n\t\t\tdelta: \"A\",\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }]),\n\t\t},\n\t} as any);\n\n\t// Step 2: toolCall at index 1\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }, t1]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"toolcall_end\",\n\t\t\tcontentIndex: 1,\n\t\t\ttoolCall: {\n\t\t\t\t...t1,\n\t\t\t\texternalResult: { content: [{ type: \"text\", text: \"result1\" }], details: {}, isError: false },\n\t\t\t},\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }, t1]),\n\t\t},\n\t} as any);\n\n\t// Step 3: text \"B\" at index 2\n\tconst finalContent = [{ type: \"text\", text: \"A\" }, t1, { type: \"text\", text: \"B\" }];\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant(finalContent),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\",\n\t\t\tcontentIndex: 2,\n\t\t\tdelta: \"B\",\n\t\t\tpartial: makeAssistant(finalContent),\n\t\t},\n\t} as any);\n\n\tassert.equal(host.chatContainer.children.length, 3);\n\tassert.equal(host.chatContainer.children[0]?.constructor?.name, \"AssistantMessageComponent\");\n\tassert.equal(host.chatContainer.children[1]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.equal(host.chatContainer.children[2]?.constructor?.name, \"AssistantMessageComponent\");\n\n\tconst firstText = host.chatContainer.children[0];\n\tconst secondText = host.chatContainer.children[2];\n\tassert.notEqual(firstText, secondText, \"text-before-tool and text-after-tool must be separate component instances\");\n\tassert.deepEqual((firstText as any).range, { startIndex: 0, endIndex: 0 }, \"first text-run covers only content[0]\");\n\tassert.deepEqual((secondText as any).range, { startIndex: 2, endIndex: 2 }, \"second text-run covers only content[2]\");\n\n\t// Finalize — regression guard: range must NOT be cleared on message_end (would cause duplication)\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant(finalContent) } as any);\n\n\tassert.deepEqual((secondText as any).range, { startIndex: 2, endIndex: 2 }, \"range must not be cleared on message_end (would cause duplication)\");\n});\n\n// Regression for the claude-code sub-turn bug that followed #4144:\n// an adapter can reset content[] back to 0/1 mid-lifecycle when a new provider\n// sub-turn begins. The segment walker must NOT update prior-sub-turn text-run\n// components in place (which would destroy earlier history) and must NOT reuse\n// stale tool registrations for a new tool at the same contentIndex. Prior\n// sub-turn children must stay frozen; new sub-turn segments must append after\n// them, and the pinned \"Latest Output\" mirror must re-evaluate for the new sub-turn.\ntest(\"chat-controller freezes prior sub-turn and appends new segments when content shrinks\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst t1 = { type: \"toolCall\", id: \"t1\", name: \"tool_one\", arguments: {} };\n\tconst t2 = { type: \"toolCall\", id: \"t2\", name: \"tool_two\", arguments: {} };\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\t// Sub-turn 1: grow to [A, T1, B]\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\", contentIndex: 0, delta: \"A\",\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }]),\n\t\t},\n\t} as any);\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }, t1]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"toolcall_end\", contentIndex: 1,\n\t\t\ttoolCall: { ...t1, externalResult: { content: [{ type: \"text\", text: \"r1\" }], details: {}, isError: false } },\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }, t1]),\n\t\t},\n\t} as any);\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"A\" }, t1, { type: \"text\", text: \"B\" }]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\", contentIndex: 2, delta: \"B\",\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"A\" }, t1, { type: \"text\", text: \"B\" }]),\n\t\t},\n\t} as any);\n\n\tassert.equal(host.chatContainer.children.length, 3, \"sub-turn 1 renders 3 children\");\n\tconst priorA = host.chatContainer.children[0];\n\tconst priorT1 = host.chatContainer.children[1];\n\tconst priorB = host.chatContainer.children[2];\n\n\t// Sub-turn boundary: adapter resets content[] to [C]\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"C\" }]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\", contentIndex: 0, delta: \"C\",\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"C\" }]),\n\t\t},\n\t} as any);\n\n\t// Prior 3 children must still exist in DOM — and a NEW text-run for \"C\" appended after them.\n\tassert.equal(host.chatContainer.children.length, 4, \"shrink must append new segment, not replace prior history\");\n\tassert.equal(host.chatContainer.children[0], priorA, \"prior A component stays at index 0\");\n\tassert.equal(host.chatContainer.children[1], priorT1, \"prior T1 component stays at index 1\");\n\tassert.equal(host.chatContainer.children[2], priorB, \"prior B component stays at index 2\");\n\tassert.notEqual(host.chatContainer.children[3], priorA, \"new C text-run must be a different component from prior A\");\n\tassert.equal(host.chatContainer.children[3]?.constructor?.name, \"AssistantMessageComponent\");\n\n\t// Prior A component must still render \"A\", not be overwritten with \"C\".\n\tfunction getRenderedTexts(comp: any): string[] {\n\t\tconst contentContainer = comp.children?.[0];\n\t\tif (!contentContainer) return [];\n\t\treturn (contentContainer.children ?? [])\n\t\t\t.filter((c: any) => c.constructor?.name === \"Markdown\")\n\t\t\t.map((c: any) => (c as any).text as string);\n\t}\n\tassert.deepEqual(getRenderedTexts(priorA), [\"A\"], \"prior A text-run must still contain 'A' after shrink\");\n\tassert.deepEqual(getRenderedTexts(priorB), [\"B\"], \"prior B text-run must still contain 'B' after shrink\");\n\tassert.deepEqual(getRenderedTexts(host.chatContainer.children[3]), [\"C\"], \"new text-run must contain only 'C'\");\n\n\t// Sub-turn 2 grows with a new tool T2 at contentIndex=1.\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"C\" }, t2]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"toolcall_end\", contentIndex: 1,\n\t\t\ttoolCall: { ...t2, externalResult: { content: [{ type: \"text\", text: \"r2\" }], details: {}, isError: false } },\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"C\" }, t2]),\n\t\t},\n\t} as any);\n\n\t// T2 must be appended after the new C text-run, not conflated with the stale T1 registration.\n\tassert.equal(host.chatContainer.children.length, 5, \"new tool appends after new text-run\");\n\tassert.equal(host.chatContainer.children[4]?.constructor?.name, \"ToolExecutionComponent\");\n\tassert.notEqual(host.chatContainer.children[4], priorT1, \"new T2 must be a different component from prior T1\");\n\n\t// Finalize so the module-level pinned spinner (setInterval) is torn down and the test process can exit.\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant([{ type: \"text\", text: \"C\" }, t2]) } as any);\n});\n\n// Regression: after a sub-turn shrink, lastPinnedText must be cleared so the\n// pinned \"Latest Output\" mirror can display text from the new sub-turn instead\n// of staying frozen on a stale snapshot (the \"bottom green stays\" symptom).\ntest(\"chat-controller updates pinned zone after sub-turn shrink\", async () => {\n\t(globalThis as any)[Symbol.for(\"@gsd/pi-coding-agent:theme\")] = {\n\t\tfg: (_key: string, text: string) => text,\n\t\tbg: (_key: string, text: string) => text,\n\t\tbold: (text: string) => text,\n\t\titalic: (text: string) => text,\n\t\ttruncate: (text: string) => text,\n\t};\n\n\tconst host = createHost();\n\thost.getMarkdownThemeWithSettings = () => ({});\n\n\tconst t1 = { type: \"toolCall\", id: \"t1\", name: \"tool_one\", arguments: {} };\n\tconst t2 = { type: \"toolCall\", id: \"t2\", name: \"tool_two\", arguments: {} };\n\n\tawait handleAgentEvent(host, { type: \"message_start\", message: makeAssistant([]) } as any);\n\n\t// Sub-turn 1 with pinnable text before a tool → populates pinned zone with \"first\".\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"first\" }, t1]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"toolcall_end\", contentIndex: 1,\n\t\t\ttoolCall: { ...t1, externalResult: { content: [{ type: \"text\", text: \"r1\" }], details: {}, isError: false } },\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"first\" }, t1]),\n\t\t},\n\t} as any);\n\tconst pinnedMarkdown = host.pinnedMessageContainer.children[1];\n\tassert.equal((pinnedMarkdown as any)?.text, \"first\", \"pinned zone seeded with sub-turn 1 text\");\n\n\t// Sub-turn boundary: content resets to [second, t2].\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"second\" }, t2]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"toolcall_end\", contentIndex: 1,\n\t\t\ttoolCall: { ...t2, externalResult: { content: [{ type: \"text\", text: \"r2\" }], details: {}, isError: false } },\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"second\" }, t2]),\n\t\t},\n\t} as any);\n\n\t// Pinned markdown must now reflect the new sub-turn's text, not stay frozen on \"first\".\n\tassert.equal((pinnedMarkdown as any)?.text, \"second\", \"pinned zone must update after sub-turn shrink (#4144 regression)\");\n\n\t// Finalize so the module-level pinned spinner (setInterval) is torn down and the test process can exit.\n\tawait handleAgentEvent(host, { type: \"message_end\", message: makeAssistant([{ type: \"text\", text: \"second\" }, t2]) } as any);\n});\n\ntest(\"chat-controller: agent_end without message_end must not remove streaming component from DOM (regression #4197)\", async () => {\n\tconst host = createHost();\n\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_start\",\n\t\tmessage: makeAssistant([]),\n\t} as any);\n\n\t// Simulate partial streaming that creates an AssistantMessageComponent\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant([{ type: \"text\", text: \"partial answer\" }]),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\",\n\t\t\tcontentIndex: 0,\n\t\t\tdelta: \"partial answer\",\n\t\t\tpartial: makeAssistant([{ type: \"text\", text: \"partial answer\" }]),\n\t\t},\n\t} as any);\n\n\t// Precondition: component is in DOM\n\tassert.equal(\n\t\thost.chatContainer.children.length,\n\t\t1,\n\t\t\"streaming component must be in DOM after message_update\",\n\t);\n\tconst comp = host.chatContainer.children[0];\n\n\t// Simulate abort: agent_end fires WITHOUT message_end\n\tawait handleAgentEvent(host, { type: \"agent_end\" } as any);\n\n\tassert.equal(\n\t\thost.chatContainer.children.length,\n\t\t1,\n\t\t\"agent_end must NOT remove the streaming component from the DOM (issue #4197)\",\n\t);\n\tassert.equal(\n\t\thost.chatContainer.children[0],\n\t\tcomp,\n\t\t\"the same component instance must remain in the DOM after agent_end\",\n\t);\n});\n\ntest(\"chat-controller: agent_end after message_end must not alter DOM\", async () => {\n\tconst host = createHost();\n\tconst content = [{ type: \"text\", text: \"complete answer\" }];\n\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_start\",\n\t\tmessage: makeAssistant([]),\n\t} as any);\n\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_update\",\n\t\tmessage: makeAssistant(content),\n\t\tassistantMessageEvent: {\n\t\t\ttype: \"text_delta\",\n\t\t\tcontentIndex: 0,\n\t\t\tdelta: \"complete answer\",\n\t\t\tpartial: makeAssistant(content),\n\t\t},\n\t} as any);\n\n\tawait handleAgentEvent(host, {\n\t\ttype: \"message_end\",\n\t\tmessage: makeAssistant(content),\n\t} as any);\n\n\tconst countAfterMessageEnd = host.chatContainer.children.length;\n\tassert.ok(countAfterMessageEnd > 0, \"component must be present after message_end\");\n\n\tawait handleAgentEvent(host, { type: \"agent_end\" } as any);\n\n\tassert.equal(\n\t\thost.chatContainer.children.length,\n\t\tcountAfterMessageEnd,\n\t\t\"agent_end after message_end must not add or remove DOM nodes\",\n\t);\n});\n"]}
|
|
@@ -26,6 +26,13 @@ export interface CompactionSettings {
|
|
|
26
26
|
enabled: boolean;
|
|
27
27
|
reserveTokens: number;
|
|
28
28
|
keepRecentTokens: number;
|
|
29
|
+
/**
|
|
30
|
+
* Optional percent-of-context-window threshold (0 < value < 1). When set,
|
|
31
|
+
* `shouldCompact()` fires once `contextTokens > contextWindow * thresholdPercent`,
|
|
32
|
+
* overriding the absolute `reserveTokens` calculation. Lets host integrations
|
|
33
|
+
* (e.g. GSD) express compaction policy as a fraction independent of model size.
|
|
34
|
+
*/
|
|
35
|
+
thresholdPercent?: number;
|
|
29
36
|
}
|
|
30
37
|
export declare const DEFAULT_COMPACTION_SETTINGS: CompactionSettings;
|
|
31
38
|
/**
|
|
@@ -50,6 +57,10 @@ export interface ContextUsageEstimate {
|
|
|
50
57
|
export declare function estimateContextTokens(messages: AgentMessage[]): ContextUsageEstimate;
|
|
51
58
|
/**
|
|
52
59
|
* Check if compaction should trigger based on context usage.
|
|
60
|
+
*
|
|
61
|
+
* When `thresholdPercent` is set (and within (0, 1)), it overrides the absolute
|
|
62
|
+
* `reserveTokens` calculation: compaction fires at `contextWindow * thresholdPercent`.
|
|
63
|
+
* Otherwise the legacy `contextWindow - reserveTokens` headroom is used.
|
|
53
64
|
*/
|
|
54
65
|
export declare function shouldCompact(contextTokens: number, contextWindow: number, settings: CompactionSettings): boolean;
|
|
55
66
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/compaction.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAoB,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAQN,KAAK,cAAc,EAKnB,MAAM,YAAY,CAAC;AAMpB,kEAAkE;AAClE,MAAM,WAAW,iBAAiB;IACjC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;CACxB;AAmCD,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,OAAO;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,+FAA+F;IAC/F,OAAO,CAAC,EAAE,CAAC,CAAC;CACZ;AAMD,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/compaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -117,10 +117,19 @@ export function estimateContextTokens(messages) {
|
|
|
117
117
|
}
|
|
118
118
|
/**
|
|
119
119
|
* Check if compaction should trigger based on context usage.
|
|
120
|
+
*
|
|
121
|
+
* When `thresholdPercent` is set (and within (0, 1)), it overrides the absolute
|
|
122
|
+
* `reserveTokens` calculation: compaction fires at `contextWindow * thresholdPercent`.
|
|
123
|
+
* Otherwise the legacy `contextWindow - reserveTokens` headroom is used.
|
|
120
124
|
*/
|
|
121
125
|
export function shouldCompact(contextTokens, contextWindow, settings) {
|
|
122
126
|
if (!settings.enabled)
|
|
123
127
|
return false;
|
|
128
|
+
if (settings.thresholdPercent !== undefined &&
|
|
129
|
+
settings.thresholdPercent > 0 &&
|
|
130
|
+
settings.thresholdPercent < 1) {
|
|
131
|
+
return contextTokens > contextWindow * settings.thresholdPercent;
|
|
132
|
+
}
|
|
124
133
|
return contextTokens > contextWindow - settings.reserveTokens;
|
|
125
134
|
}
|
|
126
135
|
// ============================================================================
|