@selesai/code 0.13.3 → 0.13.5
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/CHANGELOG.md +17 -0
- package/dist/cli/credential-print.js +4 -4
- package/dist/cli.js +0 -0
- package/dist/core/compaction/utils.js +2 -2
- package/dist/core/export-html/template.css +1066 -1066
- package/dist/core/export-html/template.html +55 -55
- package/dist/core/export-html/template.js +1864 -1864
- package/dist/core/export-html/vendor/highlight.min.js +1212 -1212
- package/dist/core/export-html/vendor/marked.min.js +78 -78
- package/dist/core/messages.js +7 -7
- package/dist/defaults/models.json +17 -1
- package/dist/extensions/context-compaction-reminder.test.ts +82 -82
- package/dist/extensions/context-compaction-reminder.ts +28 -28
- package/dist/extensions/cost-reconcile.test.ts +24 -5
- package/dist/extensions/cost-reconcile.ts +14 -7
- package/dist/extensions/pi-hermes-memory/scripts/check-min-sdk.mjs +0 -0
- package/dist/extensions/pi-hermes-memory/tests/run-all.sh +0 -0
- package/dist/extensions/pi-intercom/CHANGELOG.md +13 -0
- package/dist/extensions/pi-intercom/LICENSE +21 -21
- package/dist/extensions/pi-intercom/README.md +4 -5
- package/dist/extensions/pi-intercom/broker/client.test.ts +83 -83
- package/dist/extensions/pi-intercom/broker/framing.test.ts +114 -114
- package/dist/extensions/pi-intercom/broker/paths.ts +134 -134
- package/dist/extensions/pi-intercom/broker/runtime-claim.test.ts +34 -34
- package/dist/extensions/pi-intercom/broker/runtime-claim.ts +21 -21
- package/dist/extensions/pi-intercom/config.test.ts +3 -31
- package/dist/extensions/pi-intercom/config.ts +0 -15
- package/dist/extensions/pi-intercom/cwd.test.ts +40 -40
- package/dist/extensions/pi-intercom/cwd.ts +31 -31
- package/dist/extensions/pi-intercom/format-context.test.ts +31 -31
- package/dist/extensions/pi-intercom/format-context.ts +32 -32
- package/dist/extensions/pi-intercom/index.ts +9 -46
- package/dist/extensions/pi-intercom/intercom.integration.test.ts +49 -57
- package/dist/extensions/pi-intercom/package.json +1 -1
- package/dist/extensions/pi-intercom/reply-tracker.test.ts +20 -0
- package/dist/extensions/pi-intercom/reply-tracker.ts +8 -0
- package/dist/extensions/pi-intercom/test/overlay-width.test.ts +66 -66
- package/dist/extensions/pi-intercom/ui/compose.ts +143 -143
- package/dist/extensions/pi-intercom/ui/session-list.ts +166 -166
- package/dist/extensions/pi-subagents/CHANGELOG.md +27 -0
- package/dist/extensions/pi-subagents/docs/tool-reference.md +4 -1
- package/dist/extensions/pi-subagents/docs/workflows.md +2 -2
- package/dist/extensions/pi-subagents/install.mjs +0 -0
- package/dist/extensions/pi-subagents/package-lock.json +2 -2
- package/dist/extensions/pi-subagents/package.json +1 -1
- package/dist/extensions/pi-subagents/skills/council-mode/SKILL.md +48 -243
- package/dist/extensions/pi-subagents/skills/council-mode/references/pass-contracts.md +150 -0
- package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +87 -37
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +29 -233
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +49 -8
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +2 -2
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/multi-lane-orchestration.md +13 -1
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +34 -27
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/review-and-validation.md +73 -0
- package/dist/extensions/pi-subagents/src/agents/agent-management.ts +157 -28
- package/dist/extensions/pi-subagents/src/api/shared-types.ts +2 -0
- package/dist/extensions/pi-subagents/src/extension/public-execution.ts +1 -0
- package/dist/extensions/pi-subagents/src/extension/schemas.ts +1 -0
- package/dist/extensions/pi-subagents/src/extension/tool-description.ts +4 -1
- package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +2 -2
- package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +3 -0
- package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +45 -2
- package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +3 -2
- package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +13 -2
- package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +5 -1
- package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +10 -2
- package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +3 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +11 -2
- package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +98 -1
- package/dist/extensions/pi-subagents/src/runs/shared/async-status-projection.ts +138 -4
- package/dist/extensions/pi-subagents/src/runs/shared/background-process-options.ts +9 -0
- package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-grant.ts +2 -5
- package/dist/extensions/pi-subagents/src/runs/shared/mutation-evidence.ts +52 -3
- package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +47 -1
- package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +45 -18
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +21 -2
- package/dist/extensions/pi-subagents/src/runs/shared/workflow-graph.ts +15 -0
- package/dist/extensions/pi-subagents/src/shared/types.ts +34 -1
- package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +11 -3
- package/dist/extensions/pi-subagents/src/tui/render-helpers.ts +31 -0
- package/dist/extensions/pi-subagents/src/tui/render.ts +597 -112
- package/dist/extensions/pi-subagents/src/watchdog/change-signature.ts +40 -1
- package/dist/extensions/pi-subagents/src/workflows/host-command.ts +6 -1
- package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +53 -2
- package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +55 -6
- package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +111 -1
- package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +206 -38
- package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +522 -31
- package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +123 -0
- package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +48 -0
- package/dist/extensions/pi-subagents/test/unit/async-status-projection.test.ts +57 -1
- package/dist/extensions/pi-subagents/test/unit/background-process-options.test.ts +17 -0
- package/dist/extensions/pi-subagents/test/unit/external-cli-runner.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +44 -4
- package/dist/extensions/pi-subagents/test/unit/fork-cache-key.test.ts +91 -0
- package/dist/extensions/pi-subagents/test/unit/host-command.test.ts +1 -0
- package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +0 -1
- package/dist/extensions/pi-subagents/test/unit/mcp-direct-tool-grant.test.ts +20 -3
- package/dist/extensions/pi-subagents/test/unit/mutation-evidence.test.ts +27 -0
- package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +93 -17
- package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +1 -0
- package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +103 -26
- package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +58 -0
- package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +22 -2
- package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +21 -0
- package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +13 -0
- package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +54 -0
- package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +2 -0
- package/dist/extensions/pi-subagents/test/unit/wait-completions.test.ts +32 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-change-signature.test.ts +48 -1
- package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +21 -6
- package/dist/extensions/pi-subagents/test/unit/windows-hide-spawn.test.ts +11 -0
- package/dist/extensions/pi-web-agent/CHANGELOG.md +410 -0
- package/dist/extensions/pi-web-agent/README.md +131 -0
- package/dist/extensions/pi-web-agent/package.json +4 -2
- package/dist/extensions/pi-web-agent/src/backends/config.ts +62 -5
- package/dist/extensions/pi-web-agent/src/backends/doctor.ts +136 -0
- package/dist/extensions/pi-web-agent/src/backends/factory.ts +96 -6
- package/dist/extensions/pi-web-agent/src/backends/settings-reader.ts +25 -25
- package/dist/extensions/pi-web-agent/src/cache/ttl-cache.ts +28 -28
- package/dist/extensions/pi-web-agent/src/changelog-notice.ts +136 -136
- package/dist/extensions/pi-web-agent/src/commands/web-agent-config.ts +183 -47
- package/dist/extensions/pi-web-agent/src/extension.ts +62 -25
- package/dist/extensions/pi-web-agent/src/extract/readability.ts +19 -11
- package/dist/extensions/pi-web-agent/src/fetch/browser-resolution.ts +199 -199
- package/dist/extensions/pi-web-agent/src/fetch/firecrawl-fetch.ts +100 -100
- package/dist/extensions/pi-web-agent/src/fetch/headless-fetch.ts +117 -117
- package/dist/extensions/pi-web-agent/src/fetch/http-fetch.ts +67 -67
- package/dist/extensions/pi-web-agent/src/orchestration/answer-synthesizer.ts +60 -60
- package/dist/extensions/pi-web-agent/src/orchestration/candidate-selector.ts +5 -4
- package/dist/extensions/pi-web-agent/src/orchestration/direct-url.ts +2 -25
- package/dist/extensions/pi-web-agent/src/orchestration/evidence-quality.ts +5 -2
- package/dist/extensions/pi-web-agent/src/orchestration/evidence-ranker.ts +2 -0
- package/dist/extensions/pi-web-agent/src/orchestration/index.ts +28 -28
- package/dist/extensions/pi-web-agent/src/orchestration/query-planner.ts +47 -47
- package/dist/extensions/pi-web-agent/src/orchestration/research-orchestrator.ts +72 -7
- package/dist/extensions/pi-web-agent/src/orchestration/research-types.ts +8 -1
- package/dist/extensions/pi-web-agent/src/orchestration/research-worker.ts +28 -3
- package/dist/extensions/pi-web-agent/src/orchestration/source-profile.ts +4 -0
- package/dist/extensions/pi-web-agent/src/orchestration/stop-decider.ts +81 -81
- package/dist/extensions/pi-web-agent/src/orchestration/url.ts +35 -0
- package/dist/extensions/pi-web-agent/src/presentation/config-store.ts +210 -210
- package/dist/extensions/pi-web-agent/src/presentation/config.ts +75 -75
- package/dist/extensions/pi-web-agent/src/presentation/explore-presentation.ts +18 -6
- package/dist/extensions/pi-web-agent/src/presentation/fetch-presentation.ts +54 -54
- package/dist/extensions/pi-web-agent/src/presentation/search-presentation.ts +14 -2
- package/dist/extensions/pi-web-agent/src/presentation/select-view.ts +20 -20
- package/dist/extensions/pi-web-agent/src/presentation/types.ts +63 -63
- package/dist/extensions/pi-web-agent/src/readers/github-reader.ts +150 -0
- package/dist/extensions/pi-web-agent/src/readers/limits.ts +3 -0
- package/dist/extensions/pi-web-agent/src/readers/pdf-reader.ts +87 -0
- package/dist/extensions/pi-web-agent/src/readers/resolver.ts +25 -0
- package/dist/extensions/pi-web-agent/src/readers/types.ts +11 -0
- package/dist/extensions/pi-web-agent/src/readers/youtube-reader.ts +79 -0
- package/dist/extensions/pi-web-agent/src/search/brave.ts +114 -114
- package/dist/extensions/pi-web-agent/src/search/duckduckgo.ts +32 -5
- package/dist/extensions/pi-web-agent/src/search/exa.ts +109 -0
- package/dist/extensions/pi-web-agent/src/search/fanout.ts +154 -0
- package/dist/extensions/pi-web-agent/src/search/searxng.ts +96 -96
- package/dist/extensions/pi-web-agent/src/search/tavily.ts +113 -0
- package/dist/extensions/pi-web-agent/src/search/youcom.ts +109 -0
- package/dist/extensions/pi-web-agent/src/tools/web-explore.ts +71 -71
- package/dist/extensions/pi-web-agent/src/tools/web-fetch-headless.ts +31 -31
- package/dist/extensions/pi-web-agent/src/tools/web-fetch.ts +31 -31
- package/dist/extensions/pi-web-agent/src/tools/web-search.ts +22 -9
- package/dist/extensions/pi-web-agent/src/types.ts +19 -4
- package/dist/extensions/pi-zentui/extensions/zentui/format.ts +7 -1
- package/dist/extensions/ponytail/package.json +8 -8
- package/dist/extensions/question/constants.ts +30 -30
- package/dist/extensions/question/helpers.ts +58 -58
- package/dist/extensions/question/navigation.ts +14 -14
- package/dist/extensions/question/package.json +19 -19
- package/dist/extensions/question/selection-mode.ts +46 -46
- package/dist/extensions/question/shortcuts.ts +44 -44
- package/dist/extensions/question/types.ts +132 -132
- package/dist/extensions/test-resolve-hook-impl.mjs +6 -6
- package/dist/extensions/test-resolve-hook.mjs +6 -6
- package/dist/extensions/web-agent-onboarding.ts +222 -222
- package/dist/package-manager-cli.js +71 -71
- package/dist/rpc-entry.js +0 -0
- package/dist/skills/improve-codebase/REFERENCE.md +78 -78
- package/docs/compaction.md +396 -396
- package/docs/containerization.md +111 -111
- package/docs/development.md +71 -71
- package/docs/docs.json +164 -164
- package/docs/environment-variables.md +86 -86
- package/docs/index.md +83 -83
- package/docs/json.md +82 -82
- package/docs/models.md +502 -502
- package/docs/packages.md +227 -227
- package/docs/plans/subagent-delegation/phase-0-correctness.md +264 -264
- package/docs/plans/subagent-delegation/phase-1-behavioral-contract.md +485 -485
- package/docs/plans/subagent-delegation/phase-2-context-controls.md +281 -281
- package/docs/plans/subagent-delegation/phase-3-advisory-routing.md +361 -361
- package/docs/plans/subagent-delegation/phase-4-optional-enforcement.md +380 -380
- package/docs/prompt-templates.md +95 -95
- package/docs/providers.md +293 -293
- package/docs/security.md +59 -59
- package/docs/session-format.md +414 -414
- package/docs/sessions.md +145 -145
- package/docs/shared-host-extensions.md +109 -109
- package/docs/shell-aliases.md +13 -13
- package/docs/skills.md +231 -231
- package/docs/terminal-setup.md +142 -142
- package/docs/termux.md +127 -127
- package/docs/themes.md +295 -295
- package/docs/tmux.md +63 -63
- package/docs/tui.md +927 -927
- package/docs/windows.md +17 -17
- package/examples/README.md +25 -25
- package/examples/extensions/README.md +211 -211
- package/examples/extensions/auto-commit-on-exit.ts +49 -49
- package/examples/extensions/bash-spawn-hook.ts +30 -30
- package/examples/extensions/bookmark.ts +50 -50
- package/examples/extensions/border-status-editor.ts +150 -150
- package/examples/extensions/built-in-tool-renderer.ts +249 -249
- package/examples/extensions/claude-rules.ts +86 -86
- package/examples/extensions/commands.ts +72 -72
- package/examples/extensions/confirm-destructive.ts +59 -59
- package/examples/extensions/custom-compaction.ts +130 -130
- package/examples/extensions/custom-footer.ts +64 -64
- package/examples/extensions/custom-header.ts +73 -73
- package/examples/extensions/custom-provider-anthropic/index.ts +610 -610
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -24
- package/examples/extensions/custom-provider-anthropic/package.json +19 -19
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +404 -404
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -16
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -82
- package/examples/extensions/dirty-repo-guard.ts +56 -56
- package/examples/extensions/doom-overlay/README.md +46 -46
- package/examples/extensions/doom-overlay/doom/build/doom.js +21 -21
- package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/examples/extensions/doom-overlay/doom/build.sh +152 -152
- package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -72
- package/examples/extensions/doom-overlay/doom-component.ts +132 -132
- package/examples/extensions/doom-overlay/doom-engine.ts +173 -173
- package/examples/extensions/doom-overlay/doom-keys.ts +104 -104
- package/examples/extensions/doom-overlay/index.ts +74 -74
- package/examples/extensions/doom-overlay/wad-finder.ts +51 -51
- package/examples/extensions/dynamic-resources/SKILL.md +8 -8
- package/examples/extensions/dynamic-resources/dynamic.json +79 -79
- package/examples/extensions/dynamic-resources/dynamic.md +5 -5
- package/examples/extensions/dynamic-resources/index.ts +15 -15
- package/examples/extensions/dynamic-tools.ts +74 -74
- package/examples/extensions/event-bus.ts +43 -43
- package/examples/extensions/file-trigger.ts +41 -41
- package/examples/extensions/git-checkpoint.ts +53 -53
- package/examples/extensions/git-merge-and-resolve.ts +115 -115
- package/examples/extensions/github-issue-autocomplete.ts +185 -185
- package/examples/extensions/gondolin/index.ts +531 -531
- package/examples/extensions/gondolin/package-lock.json +185 -185
- package/examples/extensions/gondolin/package.json +19 -19
- package/examples/extensions/handoff.ts +199 -199
- package/examples/extensions/hello.ts +26 -26
- package/examples/extensions/hidden-thinking-label.ts +53 -53
- package/examples/extensions/inline-bash.ts +94 -94
- package/examples/extensions/input-transform-streaming.ts +39 -39
- package/examples/extensions/input-transform.ts +43 -43
- package/examples/extensions/interactive-shell.ts +196 -196
- package/examples/extensions/mac-system-theme.ts +47 -47
- package/examples/extensions/message-renderer.ts +59 -59
- package/examples/extensions/minimal-mode.ts +426 -426
- package/examples/extensions/modal-editor.ts +85 -85
- package/examples/extensions/model-status.ts +31 -31
- package/examples/extensions/notify.ts +55 -55
- package/examples/extensions/overlay-qa-tests.ts +1450 -1450
- package/examples/extensions/overlay-test.ts +153 -153
- package/examples/extensions/permission-gate.ts +34 -34
- package/examples/extensions/pirate.ts +47 -47
- package/examples/extensions/plan-mode/README.md +66 -66
- package/examples/extensions/plan-mode/index.ts +390 -390
- package/examples/extensions/plan-mode/utils.ts +168 -168
- package/examples/extensions/preset.ts +436 -436
- package/examples/extensions/project-trust.ts +64 -64
- package/examples/extensions/prompt-customizer.ts +97 -97
- package/examples/extensions/protected-paths.ts +30 -30
- package/examples/extensions/provider-payload.ts +18 -18
- package/examples/extensions/qna.ts +122 -122
- package/examples/extensions/question.ts +285 -285
- package/examples/extensions/questionnaire.ts +448 -448
- package/examples/extensions/rainbow-editor.ts +88 -88
- package/examples/extensions/reload-runtime.ts +37 -37
- package/examples/extensions/rpc-demo.ts +118 -118
- package/examples/extensions/sandbox/index.ts +321 -321
- package/examples/extensions/sandbox/package-lock.json +92 -92
- package/examples/extensions/sandbox/package.json +19 -19
- package/examples/extensions/send-user-message.ts +97 -97
- package/examples/extensions/session-name.ts +27 -27
- package/examples/extensions/shutdown-command.ts +63 -63
- package/examples/extensions/snake.ts +343 -343
- package/examples/extensions/space-invaders.ts +560 -560
- package/examples/extensions/ssh.ts +220 -220
- package/examples/extensions/status-line.ts +32 -32
- package/examples/extensions/structured-output.ts +65 -65
- package/examples/extensions/subagent/README.md +175 -175
- package/examples/extensions/subagent/agents/planner.md +37 -37
- package/examples/extensions/subagent/agents/reviewer.md +35 -35
- package/examples/extensions/subagent/agents/scout.md +50 -50
- package/examples/extensions/subagent/agents/worker.md +24 -24
- package/examples/extensions/subagent/agents.ts +126 -126
- package/examples/extensions/subagent/index.ts +1015 -1015
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -10
- package/examples/extensions/subagent/prompts/implement.md +10 -10
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -9
- package/examples/extensions/summarize.ts +209 -209
- package/examples/extensions/system-prompt-header.ts +17 -17
- package/examples/extensions/tic-tac-toe.ts +1008 -1008
- package/examples/extensions/timed-confirm.ts +70 -70
- package/examples/extensions/titlebar-spinner.ts +58 -58
- package/examples/extensions/todo.ts +297 -297
- package/examples/extensions/tool-override.ts +144 -144
- package/examples/extensions/tools.ts +146 -146
- package/examples/extensions/trigger-compact.ts +50 -50
- package/examples/extensions/truncated-tool.ts +195 -195
- package/examples/extensions/widget-placement.ts +9 -9
- package/examples/extensions/with-deps/index.ts +32 -32
- package/examples/extensions/with-deps/package-lock.json +31 -31
- package/examples/extensions/with-deps/package.json +22 -22
- package/examples/extensions/working-indicator.ts +123 -123
- package/examples/extensions/working-message-test.ts +25 -25
- package/examples/rpc-extension-ui.ts +632 -632
- package/examples/sdk/01-minimal.ts +26 -26
- package/examples/sdk/02-custom-model.ts +53 -53
- package/examples/sdk/03-custom-prompt.ts +75 -75
- package/examples/sdk/04-skills.ts +55 -55
- package/examples/sdk/05-tools.ts +48 -48
- package/examples/sdk/06-extensions.ts +99 -99
- package/examples/sdk/07-context-files.ts +47 -47
- package/examples/sdk/08-prompt-templates.ts +51 -51
- package/examples/sdk/09-api-keys-and-oauth.ts +52 -52
- package/examples/sdk/10-settings.ts +53 -53
- package/examples/sdk/11-sessions.ts +52 -52
- package/examples/sdk/12-full-control.ts +79 -79
- package/examples/sdk/13-session-runtime.ts +67 -67
- package/examples/sdk/README.md +144 -144
- package/package.json +3 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +0 -17
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +0 -57
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +0 -18
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +0 -9
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +0 -20
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +0 -96
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +0 -119
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +0 -85
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +0 -620
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +0 -56
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +0 -32
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +0 -49
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +0 -93
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +0 -128
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +0 -7
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +0 -38
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +0 -9
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +0 -29
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +0 -37
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +0 -34
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +0 -171
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +0 -1261
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +0 -20
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +0 -54
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +0 -13
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +0 -358
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +0 -77
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +0 -512
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +0 -43
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +0 -121
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +0 -82
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +0 -17
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +0 -7
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +0 -210
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +0 -54
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +0 -4
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +0 -55
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +0 -30
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +0 -206
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +0 -106
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +0 -19
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +0 -356
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +0 -297
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +0 -60
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +0 -18
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +0 -28
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +0 -68
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +0 -106
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +0 -51
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +0 -6
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +0 -35
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +0 -37
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +0 -40
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +0 -37
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +0 -52
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +0 -35
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +0 -24
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +0 -14
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +0 -70
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +0 -26
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +0 -36
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +0 -19
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +0 -61
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +0 -42
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +0 -35
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +0 -33
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +0 -9
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +0 -34
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +0 -34
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +0 -102
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +0 -14
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +0 -21
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +0 -19
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +0 -20
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +0 -26
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +0 -25
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +0 -32
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +0 -34
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +0 -13
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +0 -52
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +0 -54
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +0 -33
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -42
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +0 -95
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +0 -77
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +0 -28
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +0 -11
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +0 -63
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +0 -94
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +0 -14
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +0 -394
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +0 -29
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +0 -120
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +0 -28
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +0 -17
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +0 -246
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +0 -20
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +0 -457
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +0 -8
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +0 -18
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +0 -11
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +0 -11
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +0 -4
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +0 -4
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +0 -8
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +0 -26
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +0 -7
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +0 -18
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +0 -30
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +0 -9
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +0 -31
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +0 -21
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +0 -31
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +0 -3
|
@@ -145,6 +145,47 @@ function writeMcpFixture(
|
|
|
145
145
|
});
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
+
type RuntimeMcpDefinition = { command: string; args: string[] };
|
|
149
|
+
|
|
150
|
+
function buildLegacyAliasLaunch(params: {
|
|
151
|
+
definitions: Record<string, RuntimeMcpDefinition>;
|
|
152
|
+
mcpDirectTools: string[];
|
|
153
|
+
allowedTools: string[];
|
|
154
|
+
}) {
|
|
155
|
+
const fixture = createMcpFixture();
|
|
156
|
+
writeJson(path.join(fixture.agentDir, "mcp.json"), { mcpServers: {} });
|
|
157
|
+
writeJson(path.join(fixture.agentDir, "mcp-cache.json"), {
|
|
158
|
+
version: 1,
|
|
159
|
+
servers: Object.fromEntries(Object.entries(params.definitions).map(([name, definition]) => [
|
|
160
|
+
name,
|
|
161
|
+
{ configHash: computeMcpServerHash(definition), cachedAt: Date.now(), tools: [{ name: "search" }] },
|
|
162
|
+
])),
|
|
163
|
+
});
|
|
164
|
+
const runtimeSnapshotHost: McpRuntimeSnapshotHost = {
|
|
165
|
+
events: {
|
|
166
|
+
emit(_event, request) {
|
|
167
|
+
const definition = params.definitions[request.name];
|
|
168
|
+
if (!definition) {
|
|
169
|
+
request.result = { ok: false, error: new Error(`unknown runtime server ${request.name}`) };
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
request.result = { ok: true, snapshot: { name: request.name, definition, runtime: true, persisted: false } };
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
return buildPiArgs({
|
|
177
|
+
baseArgs: ["-p"],
|
|
178
|
+
task: "hello",
|
|
179
|
+
sessionEnabled: false,
|
|
180
|
+
inheritProjectContext: false,
|
|
181
|
+
inheritSkills: false,
|
|
182
|
+
tools: ["read"],
|
|
183
|
+
mcpDirectTools: params.mcpDirectTools,
|
|
184
|
+
capabilityCeiling: { version: 1, allowedTools: params.allowedTools, denyExtensions: false, sources: ["test"] },
|
|
185
|
+
runtimeSnapshotHost,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
|
|
148
189
|
afterEach(() => {
|
|
149
190
|
process.chdir(originalCwd);
|
|
150
191
|
for (const [key, value] of Object.entries(originalEnv)) {
|
|
@@ -1125,7 +1166,7 @@ describe("buildPiArgs system prompt mode wiring", () => {
|
|
|
1125
1166
|
|
|
1126
1167
|
assert.equal(
|
|
1127
1168
|
args[args.indexOf("--tools") + 1],
|
|
1128
|
-
"read,bash,
|
|
1169
|
+
"read,bash,chrome-devtools_take_screenshot,chrome-devtools_click",
|
|
1129
1170
|
);
|
|
1130
1171
|
assert.equal(env.MCP_DIRECT_TOOLS, "chrome-devtools");
|
|
1131
1172
|
assert.equal(
|
|
@@ -1133,15 +1174,15 @@ describe("buildPiArgs system prompt mode wiring", () => {
|
|
|
1133
1174
|
JSON.stringify([
|
|
1134
1175
|
"read",
|
|
1135
1176
|
"bash",
|
|
1136
|
-
"
|
|
1137
|
-
"
|
|
1177
|
+
"chrome-devtools_take_screenshot",
|
|
1178
|
+
"chrome-devtools_click",
|
|
1138
1179
|
]),
|
|
1139
1180
|
);
|
|
1140
1181
|
assert.equal(
|
|
1141
1182
|
env[MCP_DIRECT_CHILD_TOOLS_ENV],
|
|
1142
1183
|
JSON.stringify([
|
|
1143
|
-
"
|
|
1144
|
-
"
|
|
1184
|
+
"chrome-devtools_take_screenshot",
|
|
1185
|
+
"chrome-devtools_click",
|
|
1145
1186
|
]),
|
|
1146
1187
|
);
|
|
1147
1188
|
});
|
|
@@ -1224,8 +1265,8 @@ describe("buildPiArgs system prompt mode wiring", () => {
|
|
|
1224
1265
|
runtimeSnapshotHost,
|
|
1225
1266
|
});
|
|
1226
1267
|
assert.deepEqual(requestedNames, [serverName, serverName]);
|
|
1227
|
-
assert.equal(serverLaunch.args[serverLaunch.args.indexOf("--tools") + 1], "read,
|
|
1228
|
-
assert.equal(toolLaunch.args[toolLaunch.args.indexOf("--tools") + 1], "read,
|
|
1268
|
+
assert.equal(serverLaunch.args[serverLaunch.args.indexOf("--tools") + 1], "read,runtime-github_search_repositories,runtime-github_create_issue");
|
|
1269
|
+
assert.equal(toolLaunch.args[toolLaunch.args.indexOf("--tools") + 1], "read,runtime-github_search_repositories");
|
|
1229
1270
|
assert.ok(serverLaunch.args.indexOf("--mcp-config") < serverLaunch.args.indexOf("Task: hello"));
|
|
1230
1271
|
for (const launch of [serverLaunch, toolLaunch]) {
|
|
1231
1272
|
const configPath = launch.args[launch.args.indexOf("--mcp-config") + 1];
|
|
@@ -1240,11 +1281,11 @@ describe("buildPiArgs system prompt mode wiring", () => {
|
|
|
1240
1281
|
[serverName, `${serverName}/search_repositories`],
|
|
1241
1282
|
);
|
|
1242
1283
|
assert.deepEqual(JSON.parse(serverLaunch.env[MCP_DIRECT_CHILD_TOOLS_ENV]!), [
|
|
1243
|
-
"
|
|
1244
|
-
"
|
|
1284
|
+
"runtime-github_search_repositories",
|
|
1285
|
+
"runtime-github_create_issue",
|
|
1245
1286
|
]);
|
|
1246
1287
|
assert.deepEqual(JSON.parse(toolLaunch.env[MCP_DIRECT_CHILD_TOOLS_ENV]!), [
|
|
1247
|
-
"
|
|
1288
|
+
"runtime-github_search_repositories",
|
|
1248
1289
|
]);
|
|
1249
1290
|
});
|
|
1250
1291
|
|
|
@@ -1354,15 +1395,50 @@ describe("buildPiArgs system prompt mode wiring", () => {
|
|
|
1354
1395
|
capabilityCeiling: { version: 1, allowedTools: ["read", "runtime_a_search"], denyExtensions: false, sources: ["test"] },
|
|
1355
1396
|
runtimeSnapshotHost,
|
|
1356
1397
|
});
|
|
1357
|
-
assert.equal(launch.args[launch.args.indexOf("--tools") + 1], "read,
|
|
1398
|
+
assert.equal(launch.args[launch.args.indexOf("--tools") + 1], "read,runtime-a_search");
|
|
1358
1399
|
const configPath = launch.args[launch.args.indexOf("--mcp-config") + 1];
|
|
1359
1400
|
assert.ok(configPath);
|
|
1360
1401
|
assert.deepEqual(JSON.parse(fs.readFileSync(configPath, "utf-8")), {
|
|
1361
1402
|
mcpServers: { "runtime-a": definitions["runtime-a"] },
|
|
1362
1403
|
});
|
|
1404
|
+
assert.deepEqual(JSON.parse(launch.env[MCP_DIRECT_CHILD_TOOLS_ENV]!), ["runtime-a_search"]);
|
|
1405
|
+
});
|
|
1406
|
+
|
|
1407
|
+
it("does not let legacy MCP ceiling aliases cross server boundaries", () => {
|
|
1408
|
+
const definitions = {
|
|
1409
|
+
"runtime-a": { command: "runtime-a", args: ["--stdio"] },
|
|
1410
|
+
runtime_a: { command: "runtime_a", args: ["--stdio"] },
|
|
1411
|
+
};
|
|
1412
|
+
const launch = buildLegacyAliasLaunch({
|
|
1413
|
+
definitions,
|
|
1414
|
+
mcpDirectTools: ["runtime-a", "runtime_a"],
|
|
1415
|
+
allowedTools: ["read", "runtime_a_search"],
|
|
1416
|
+
});
|
|
1417
|
+
|
|
1418
|
+
assert.equal(launch.args[launch.args.indexOf("--tools") + 1], "read,runtime_a_search");
|
|
1419
|
+
const configPath = launch.args[launch.args.indexOf("--mcp-config") + 1];
|
|
1420
|
+
assert.ok(configPath);
|
|
1421
|
+
assert.deepEqual(JSON.parse(fs.readFileSync(configPath, "utf-8")), {
|
|
1422
|
+
mcpServers: { runtime_a: definitions.runtime_a },
|
|
1423
|
+
});
|
|
1363
1424
|
assert.deepEqual(JSON.parse(launch.env[MCP_DIRECT_CHILD_TOOLS_ENV]!), ["runtime_a_search"]);
|
|
1364
1425
|
});
|
|
1365
1426
|
|
|
1427
|
+
it("does not allow ambiguous legacy MCP ceiling aliases", () => {
|
|
1428
|
+
const launch = buildLegacyAliasLaunch({
|
|
1429
|
+
definitions: {
|
|
1430
|
+
"runtime-a-b": { command: "runtime-a-b", args: ["--stdio"] },
|
|
1431
|
+
"runtime_a-b": { command: "runtime_a-b", args: ["--stdio"] },
|
|
1432
|
+
},
|
|
1433
|
+
mcpDirectTools: ["runtime-a-b", "runtime_a-b"],
|
|
1434
|
+
allowedTools: ["read", "runtime_a_b_search"],
|
|
1435
|
+
});
|
|
1436
|
+
|
|
1437
|
+
assert.equal(launch.args[launch.args.indexOf("--tools") + 1], "read");
|
|
1438
|
+
assert.equal(launch.args.includes("--mcp-config"), false);
|
|
1439
|
+
assert.equal(launch.env[MCP_DIRECT_CHILD_TOOLS_ENV], undefined);
|
|
1440
|
+
});
|
|
1441
|
+
|
|
1366
1442
|
it("emits --no-tools for explicit empty tool allowlists", () => {
|
|
1367
1443
|
for (const requireReadTool of [false, true]) {
|
|
1368
1444
|
const { args, env } = buildPiArgs({
|
|
@@ -1398,7 +1474,7 @@ describe("buildPiArgs system prompt mode wiring", () => {
|
|
|
1398
1474
|
|
|
1399
1475
|
assert.equal(
|
|
1400
1476
|
args[args.indexOf("--tools") + 1],
|
|
1401
|
-
"
|
|
1477
|
+
"chrome-devtools_take_screenshot,chrome-devtools_click",
|
|
1402
1478
|
);
|
|
1403
1479
|
assert.equal(env.MCP_DIRECT_TOOLS, "chrome-devtools");
|
|
1404
1480
|
}
|
|
@@ -1451,7 +1527,7 @@ describe("buildPiArgs system prompt mode wiring", () => {
|
|
|
1451
1527
|
|
|
1452
1528
|
it("matches adapter prefix modes for direct MCP names", () => {
|
|
1453
1529
|
for (const [prefix, expected] of [
|
|
1454
|
-
["server", "read,
|
|
1530
|
+
["server", "read,linear-mcp_list_issues"],
|
|
1455
1531
|
["short", "read,linear_list_issues"],
|
|
1456
1532
|
["none", "read,list_issues"],
|
|
1457
1533
|
] as const) {
|
|
@@ -1497,7 +1573,7 @@ describe("buildPiArgs system prompt mode wiring", () => {
|
|
|
1497
1573
|
|
|
1498
1574
|
assert.equal(
|
|
1499
1575
|
args[args.indexOf("--tools") + 1],
|
|
1500
|
-
"read,
|
|
1576
|
+
"read,browser-mcp_navigate,browser-mcp_get_console_logs",
|
|
1501
1577
|
);
|
|
1502
1578
|
});
|
|
1503
1579
|
|
|
@@ -1614,7 +1690,7 @@ describe("buildPiArgs system prompt mode wiring", () => {
|
|
|
1614
1690
|
cwd: fixture.projectDir,
|
|
1615
1691
|
});
|
|
1616
1692
|
|
|
1617
|
-
assert.equal(args[args.indexOf("--tools") + 1], "read,
|
|
1693
|
+
assert.equal(args[args.indexOf("--tools") + 1], "read,project-mcp_inspect");
|
|
1618
1694
|
});
|
|
1619
1695
|
|
|
1620
1696
|
it("resolves direct MCP tools from Pi package manifests", () => {
|
|
@@ -1680,7 +1756,7 @@ describe("buildPiArgs system prompt mode wiring", () => {
|
|
|
1680
1756
|
}), /Unresolved MCP direct-tool selectors: acme_tools__wiki\./);
|
|
1681
1757
|
});
|
|
1682
1758
|
|
|
1683
|
-
it("resolves direct MCP tools from the git-root package when child cwd has an incidental .
|
|
1759
|
+
it("resolves direct MCP tools from the git-root package when child cwd has an incidental .selesai directory", () => {
|
|
1684
1760
|
const fixture = createMcpFixture();
|
|
1685
1761
|
const nestedCwd = path.join(fixture.projectDir, "packages", "app");
|
|
1686
1762
|
const packageRoot = path.join(fixture.projectDir, ".selesai", "npm", "node_modules", "@acme", "tools");
|
|
@@ -1861,7 +1937,7 @@ describe("buildPiArgs system prompt mode wiring", () => {
|
|
|
1861
1937
|
);
|
|
1862
1938
|
assert.equal(
|
|
1863
1939
|
args[args.indexOf("--tools") + 1],
|
|
1864
|
-
"read,
|
|
1940
|
+
"read,chrome-devtools_take_screenshot",
|
|
1865
1941
|
);
|
|
1866
1942
|
assert.ok(
|
|
1867
1943
|
extensionArgs.some((arg) =>
|
|
@@ -49,6 +49,7 @@ describe("public subagent execution normalization", () => {
|
|
|
49
49
|
},
|
|
50
50
|
});
|
|
51
51
|
assert.deepEqual(normalizePublicSubagentExecution({ action: " list " }), { ok: true, params: { action: "list" } });
|
|
52
|
+
assert.deepEqual(normalizePublicSubagentExecution({ action: " list ", capabilities: true }), { ok: true, params: { action: "list", capabilities: true } });
|
|
52
53
|
assert.deepEqual(
|
|
53
54
|
normalizePublicSubagentExecution({ action: " validate ", workflowScript: "return 1" }),
|
|
54
55
|
{ ok: true, params: { action: "validate", workflowScript: "return 1" } },
|
|
@@ -2,8 +2,8 @@ import test from "node:test";
|
|
|
2
2
|
import assert from "node:assert/strict";
|
|
3
3
|
|
|
4
4
|
import { visibleWidth } from "@earendil-works/pi-tui";
|
|
5
|
-
import { row } from "../../src/tui/render-helpers.ts";
|
|
6
|
-
import { renderSubagentResult, truncLine, widgetRenderKey } from "../../src/tui/render.ts";
|
|
5
|
+
import { row, shouldSuppressSingleStep, stripRepeatedAgentPrefix, withDuplicateLabelDiscriminators } from "../../src/tui/render-helpers.ts";
|
|
6
|
+
import { buildWidgetLines, renderSubagentResult, truncLine, widgetRenderKey } from "../../src/tui/render.ts";
|
|
7
7
|
import type { AsyncJobState } from "../../src/shared/types.ts";
|
|
8
8
|
|
|
9
9
|
const theme = {
|
|
@@ -38,6 +38,43 @@ test("row clips content to the available width", () => {
|
|
|
38
38
|
assert.equal(visibleWidth(rendered), 6);
|
|
39
39
|
});
|
|
40
40
|
|
|
41
|
+
test("stripRepeatedAgentPrefix removes only safe repeated job-name prefixes", () => {
|
|
42
|
+
assert.equal(stripRepeatedAgentPrefix(" reviewer: Review the diff ", "reviewer"), "Review the diff");
|
|
43
|
+
assert.equal(stripRepeatedAgentPrefix("reviewer · Review the diff", "reviewer"), "Review the diff");
|
|
44
|
+
assert.equal(stripRepeatedAgentPrefix("reviewer Review the diff", "reviewer"), "Review the diff");
|
|
45
|
+
assert.equal(stripRepeatedAgentPrefix("reviewer-2: Review the diff", "reviewer"), "reviewer-2: Review the diff");
|
|
46
|
+
assert.equal(stripRepeatedAgentPrefix("reviewerhood: Review the diff", "reviewer"), "reviewerhood: Review the diff");
|
|
47
|
+
assert.equal(stripRepeatedAgentPrefix("worker: Review the diff", "reviewer"), "worker: Review the diff");
|
|
48
|
+
assert.equal(stripRepeatedAgentPrefix("reviewer", "reviewer"), "reviewer");
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
test("shouldSuppressSingleStep uses logical totals instead of materialized step count", () => {
|
|
52
|
+
assert.equal(shouldSuppressSingleStep(undefined, 1), true);
|
|
53
|
+
assert.equal(shouldSuppressSingleStep(1, 1), true);
|
|
54
|
+
assert.equal(shouldSuppressSingleStep(2, 1), false);
|
|
55
|
+
assert.equal(shouldSuppressSingleStep(undefined, 2), false);
|
|
56
|
+
assert.equal(shouldSuppressSingleStep(undefined, undefined), false);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test("withDuplicateLabelDiscriminators preserves unique labels and stable duplicate fractions", () => {
|
|
60
|
+
const rows = [
|
|
61
|
+
{ index: 0, displayName: "Gather context" },
|
|
62
|
+
{ index: 1, displayName: "Review diff" },
|
|
63
|
+
{ index: 2, displayName: "Review diff" },
|
|
64
|
+
];
|
|
65
|
+
|
|
66
|
+
assert.deepEqual(
|
|
67
|
+
withDuplicateLabelDiscriminators(rows, 3).map((row) => row.rowLabel),
|
|
68
|
+
["Gather context", "Agent 2/3: Review diff", "Agent 3/3: Review diff"],
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
const reordered = [rows[2]!, rows[0]!, rows[1]!];
|
|
72
|
+
assert.deepEqual(
|
|
73
|
+
withDuplicateLabelDiscriminators(reordered, 3).map((row) => row.rowLabel),
|
|
74
|
+
["Agent 3/3: Review diff", "Gather context", "Agent 2/3: Review diff"],
|
|
75
|
+
);
|
|
76
|
+
});
|
|
77
|
+
|
|
41
78
|
test("row normalizes multiline content before clipping", () => {
|
|
42
79
|
const rendered = row("bash failed: line 1\nline 2\tvalue", 20, theme as any);
|
|
43
80
|
assert.equal(visibleWidth(rendered), 20);
|
|
@@ -123,6 +160,42 @@ test("widget render keys keep compact payloads quiet and expanded payloads fresh
|
|
|
123
160
|
assert.notEqual(widgetRenderKey(warningDetailChange, true), widgetRenderKey(preflightJob, true));
|
|
124
161
|
});
|
|
125
162
|
|
|
163
|
+
test("seeded running glyphs advance at wall-clock frame boundaries while unseeded glyphs stay static", () => {
|
|
164
|
+
const originalNow = Date.now;
|
|
165
|
+
const runningGlyph = (lines: string[]): string => lines
|
|
166
|
+
.map((line) => line.match(/[⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏●]/u)?.[0])
|
|
167
|
+
.find((glyph): glyph is string => glyph !== undefined) ?? "";
|
|
168
|
+
const seededJob: AsyncJobState = {
|
|
169
|
+
asyncId: "seeded",
|
|
170
|
+
asyncDir: "/tmp/seeded",
|
|
171
|
+
status: "running",
|
|
172
|
+
mode: "single",
|
|
173
|
+
updatedAt: 1,
|
|
174
|
+
};
|
|
175
|
+
const unseededJob: AsyncJobState = {
|
|
176
|
+
asyncId: "unseeded",
|
|
177
|
+
asyncDir: "/tmp/unseeded",
|
|
178
|
+
status: "running",
|
|
179
|
+
mode: "single",
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
try {
|
|
183
|
+
Date.now = () => 1_000;
|
|
184
|
+
const seededBeforeBoundary = runningGlyph(buildWidgetLines([seededJob], theme, 180));
|
|
185
|
+
const unseededBeforeBoundary = runningGlyph(buildWidgetLines([unseededJob], theme, 180));
|
|
186
|
+
|
|
187
|
+
Date.now = () => 1_125;
|
|
188
|
+
const seededAfterBoundary = runningGlyph(buildWidgetLines([seededJob], theme, 180));
|
|
189
|
+
const unseededAfterBoundary = runningGlyph(buildWidgetLines([unseededJob], theme, 180));
|
|
190
|
+
|
|
191
|
+
assert.notEqual(seededAfterBoundary, seededBeforeBoundary);
|
|
192
|
+
assert.equal(unseededAfterBoundary, unseededBeforeBoundary);
|
|
193
|
+
assert.equal(unseededBeforeBoundary, "●");
|
|
194
|
+
} finally {
|
|
195
|
+
Date.now = originalNow;
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
|
|
126
199
|
test("multiline rendering omits two-column graphemes at one-column width", () => {
|
|
127
200
|
const originalColumns = Object.getOwnPropertyDescriptor(process.stdout, "columns");
|
|
128
201
|
Object.defineProperty(process.stdout, "columns", { configurable: true, value: 5 });
|
|
@@ -211,7 +284,7 @@ test("compact multi-result cards prefer bounded workflow labels over raw tasks",
|
|
|
211
284
|
assert.match(text, /Ctrl\+Alt\+F Fleet/);
|
|
212
285
|
});
|
|
213
286
|
|
|
214
|
-
test("compact chain rendering uses workflow graph
|
|
287
|
+
test("compact chain rendering uses workflow graph labels and parallel groups", () => {
|
|
215
288
|
const component = renderSubagentResult({
|
|
216
289
|
content: [{ type: "text", text: "done" }],
|
|
217
290
|
details: {
|
|
@@ -244,10 +317,11 @@ test("compact chain rendering uses workflow graph spans for dynamic fanout resul
|
|
|
244
317
|
}, { expanded: false }, theme as any);
|
|
245
318
|
|
|
246
319
|
const text = componentText(component);
|
|
247
|
-
assert.match(text, /Step 1:
|
|
248
|
-
assert.match(text, /
|
|
249
|
-
assert.match(text, /
|
|
250
|
-
assert.match(text, /
|
|
320
|
+
assert.match(text, /Step 1\/3: Scout/);
|
|
321
|
+
assert.match(text, /Step 2\/3: parallel group \(Review targets\)/);
|
|
322
|
+
assert.match(text, /Review A/);
|
|
323
|
+
assert.match(text, /Review B/);
|
|
324
|
+
assert.match(text, /Step 3\/3: Writer/);
|
|
251
325
|
});
|
|
252
326
|
|
|
253
327
|
test("compact chain rendering shows failed zero-child dynamic fanout groups", () => {
|
|
@@ -283,10 +357,10 @@ test("compact chain rendering shows failed zero-child dynamic fanout groups", ()
|
|
|
283
357
|
const text = componentText(component);
|
|
284
358
|
assert.match(text, /step 1\/3/);
|
|
285
359
|
assert.doesNotMatch(text, /step 3\/3/);
|
|
286
|
-
assert.match(text, /Step 1:
|
|
287
|
-
assert.match(text, /Step 2: Review targets
|
|
360
|
+
assert.match(text, /Step 1\/3: Scout/);
|
|
361
|
+
assert.match(text, /Step 2\/3: parallel group \(Review targets\) · failed/);
|
|
288
362
|
assert.match(text, /No review targets materialized/);
|
|
289
|
-
assert.match(text, /Step 3: writer .* pending/);
|
|
363
|
+
assert.match(text, /Step 3\/3: writer .* pending/);
|
|
290
364
|
});
|
|
291
365
|
|
|
292
366
|
test("expanded chain rendering uses workflow graph spans for dynamic fanout results", () => {
|
|
@@ -322,10 +396,11 @@ test("expanded chain rendering uses workflow graph spans for dynamic fanout resu
|
|
|
322
396
|
}, { expanded: true }, theme as any);
|
|
323
397
|
|
|
324
398
|
const text = componentText(component);
|
|
325
|
-
assert.match(text, /Step 1:
|
|
326
|
-
assert.match(text, /
|
|
327
|
-
assert.match(text, /
|
|
328
|
-
assert.match(text, /
|
|
399
|
+
assert.match(text, /Step 1\/3: Scout/);
|
|
400
|
+
assert.match(text, /Step 2\/3: parallel group \(Review targets\)/);
|
|
401
|
+
assert.match(text, /Review A/);
|
|
402
|
+
assert.match(text, /Review B/);
|
|
403
|
+
assert.match(text, /Step 3\/3: Writer/);
|
|
329
404
|
});
|
|
330
405
|
|
|
331
406
|
test("compact multi-result rendering shows total cost in the header", () => {
|
|
@@ -342,7 +417,7 @@ test("compact multi-result rendering shows total cost in the header", () => {
|
|
|
342
417
|
assert.match(text, /in:30 out:12 \$0\.0400/);
|
|
343
418
|
});
|
|
344
419
|
|
|
345
|
-
test("static sequential and static parallel chain rendering keep
|
|
420
|
+
test("static sequential and static parallel chain rendering keep logical labels", () => {
|
|
346
421
|
const sequential = componentText(renderSubagentResult({
|
|
347
422
|
content: [{ type: "text", text: "done" }],
|
|
348
423
|
details: {
|
|
@@ -352,8 +427,8 @@ test("static sequential and static parallel chain rendering keep existing labels
|
|
|
352
427
|
results: [result("scout", "a"), result("writer", "b")],
|
|
353
428
|
},
|
|
354
429
|
}, { expanded: false }, theme as any));
|
|
355
|
-
assert.match(sequential, /Step 1: scout/);
|
|
356
|
-
assert.match(sequential, /Step 2: writer/);
|
|
430
|
+
assert.match(sequential, /Step 1\/2: scout task/);
|
|
431
|
+
assert.match(sequential, /Step 2\/2: writer task/);
|
|
357
432
|
|
|
358
433
|
const parallel = componentText(renderSubagentResult({
|
|
359
434
|
content: [{ type: "text", text: "done" }],
|
|
@@ -364,13 +439,14 @@ test("static sequential and static parallel chain rendering keep existing labels
|
|
|
364
439
|
results: [result("scout", "a"), result("reviewer", "b"), result("auditor", "c"), result("writer", "d")],
|
|
365
440
|
},
|
|
366
441
|
}, { expanded: false }, theme as any));
|
|
367
|
-
assert.match(parallel, /Step 1: scout/);
|
|
368
|
-
assert.match(parallel, /
|
|
369
|
-
assert.match(parallel, /
|
|
370
|
-
assert.match(parallel, /
|
|
442
|
+
assert.match(parallel, /Step 1\/3: scout task/);
|
|
443
|
+
assert.match(parallel, /Step 2\/3: parallel group/);
|
|
444
|
+
assert.match(parallel, /reviewer task/);
|
|
445
|
+
assert.match(parallel, /auditor task/);
|
|
446
|
+
assert.match(parallel, /Step 3\/3: writer task/);
|
|
371
447
|
});
|
|
372
448
|
|
|
373
|
-
test("expanded simple chain summaries
|
|
449
|
+
test("expanded simple chain summaries strip repeated agent prefixes", () => {
|
|
374
450
|
const expanded = componentText(renderSubagentResult({
|
|
375
451
|
content: [{ type: "text", text: "done" }],
|
|
376
452
|
details: {
|
|
@@ -380,8 +456,9 @@ test("expanded simple chain summaries prefer result session names", () => {
|
|
|
380
456
|
results: [{ ...result("worker", "done"), sessionName: " worker: named task " }],
|
|
381
457
|
},
|
|
382
458
|
}, { expanded: true }, theme as any));
|
|
383
|
-
assert.match(expanded, /
|
|
384
|
-
assert.doesNotMatch(expanded, /
|
|
459
|
+
assert.match(expanded, /named task/);
|
|
460
|
+
assert.doesNotMatch(expanded, /worker:\s+named task/);
|
|
461
|
+
assert.doesNotMatch(expanded, /Step 1\/1/);
|
|
385
462
|
});
|
|
386
463
|
|
|
387
464
|
test("main-window renderer config removes compact result indentation without changing status glyphs", () => {
|
|
@@ -395,8 +472,8 @@ test("main-window renderer config removes compact result indentation without cha
|
|
|
395
472
|
|
|
396
473
|
const text = componentText(component);
|
|
397
474
|
assert.match(text, /^✗ parallel/m);
|
|
398
|
-
assert.match(text, /^✓
|
|
399
|
-
assert.match(text, /^✗
|
|
475
|
+
assert.match(text, /^✓ scout task/m);
|
|
476
|
+
assert.match(text, /^✗ reviewer task/m);
|
|
400
477
|
assert.match(text, /^⎿ Error: failed/m);
|
|
401
478
|
});
|
|
402
479
|
|
|
@@ -78,6 +78,50 @@ describe("async run status inspection", () => {
|
|
|
78
78
|
}
|
|
79
79
|
});
|
|
80
80
|
|
|
81
|
+
it("renders bounded recovery guidance from a failed status step", () => {
|
|
82
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-run-status-recovery-"));
|
|
83
|
+
try {
|
|
84
|
+
const asyncRoot = path.join(root, "runs");
|
|
85
|
+
const asyncDir = path.join(asyncRoot, "run-recovery");
|
|
86
|
+
fs.mkdirSync(asyncDir, { recursive: true });
|
|
87
|
+
const changedFiles = Array.from({ length: 25 }, (_, index) => `src/file-${String(index + 1).padStart(2, "0")}.ts`);
|
|
88
|
+
fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({
|
|
89
|
+
runId: "run-recovery",
|
|
90
|
+
mode: "single",
|
|
91
|
+
state: "failed",
|
|
92
|
+
startedAt: 100,
|
|
93
|
+
lastUpdate: 200,
|
|
94
|
+
steps: [{
|
|
95
|
+
agent: "worker",
|
|
96
|
+
status: "failed",
|
|
97
|
+
timedOut: true,
|
|
98
|
+
timeoutRecovery: {
|
|
99
|
+
termination: "timed-out",
|
|
100
|
+
changedFiles,
|
|
101
|
+
truncated: true,
|
|
102
|
+
recoveryNeeded: true,
|
|
103
|
+
reason: "timed-out-with-dirty-worktree",
|
|
104
|
+
reportStatus: "missing",
|
|
105
|
+
message: "raw recovery message must not be rendered",
|
|
106
|
+
effects: { settlementDiagnostic: { finalTextPresent: true } },
|
|
107
|
+
},
|
|
108
|
+
}],
|
|
109
|
+
}, null, 2), "utf-8");
|
|
110
|
+
|
|
111
|
+
const result = inspectSubagentStatus({ id: "run-recovery" }, { asyncDirRoot: asyncRoot, resultsDir: path.join(root, "results") });
|
|
112
|
+
const text = textContent(result);
|
|
113
|
+
assert.equal(result.isError, undefined);
|
|
114
|
+
assert.match(text, /State: failed/);
|
|
115
|
+
assert.match(text, /Recovery needed: review the diff and artifacts before resuming or launching dependent stages\./);
|
|
116
|
+
assert.match(text, /requested report: missing/);
|
|
117
|
+
assert.match(text, /changed tracked files: src\/file-01\.ts, src\/file-02\.ts/);
|
|
118
|
+
assert.match(text, /file-20\.ts, …/);
|
|
119
|
+
assert.doesNotMatch(text, /raw recovery message|settlementDiagnostic/);
|
|
120
|
+
} finally {
|
|
121
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
81
125
|
it("shows a follow-up hint for completed external-job runs when the provider supports it", () => {
|
|
82
126
|
const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-run-status-external-follow-up-"));
|
|
83
127
|
try {
|
|
@@ -1399,6 +1443,17 @@ describe("async run status inspection", () => {
|
|
|
1399
1443
|
state: "failed",
|
|
1400
1444
|
sessionFile,
|
|
1401
1445
|
summary: "result survived missing status",
|
|
1446
|
+
results: [{
|
|
1447
|
+
agent: "worker",
|
|
1448
|
+
success: false,
|
|
1449
|
+
timeoutRecovery: {
|
|
1450
|
+
termination: "timed-out",
|
|
1451
|
+
changedFiles: ["input.md"],
|
|
1452
|
+
recoveryNeeded: true,
|
|
1453
|
+
reason: "timed-out-with-dirty-worktree",
|
|
1454
|
+
reportStatus: "missing",
|
|
1455
|
+
},
|
|
1456
|
+
}],
|
|
1402
1457
|
}, null, 2), "utf-8");
|
|
1403
1458
|
|
|
1404
1459
|
const result = inspectSubagentStatus({ id: "run-result-only" }, {
|
|
@@ -1412,6 +1467,9 @@ describe("async run status inspection", () => {
|
|
|
1412
1467
|
assert.match(text, /Result: /);
|
|
1413
1468
|
assert.match(text, /Revive: subagent\(\{ action: "resume", id: "run-result-only", message: "\.\.\." \}\)/);
|
|
1414
1469
|
assert.match(text, /result survived missing status/);
|
|
1470
|
+
assert.match(text, /Recovery needed: review the diff and artifacts before resuming or launching dependent stages\./);
|
|
1471
|
+
assert.match(text, /requested report: missing/);
|
|
1472
|
+
assert.match(text, /changed tracked files: input\.md/);
|
|
1415
1473
|
} finally {
|
|
1416
1474
|
fs.rmSync(root, { recursive: true, force: true });
|
|
1417
1475
|
}
|
|
@@ -78,6 +78,10 @@ interface SubagentParamsSchema {
|
|
|
78
78
|
enum?: string[];
|
|
79
79
|
description?: string;
|
|
80
80
|
};
|
|
81
|
+
capabilities?: {
|
|
82
|
+
type?: string;
|
|
83
|
+
description?: string;
|
|
84
|
+
};
|
|
81
85
|
view?: {
|
|
82
86
|
type?: string;
|
|
83
87
|
enum?: string[];
|
|
@@ -255,6 +259,22 @@ describe("SubagentParams schema", { skip: !schemasAvailable ? "typebox not avail
|
|
|
255
259
|
assert.doesNotMatch(description, /orchestration\./);
|
|
256
260
|
});
|
|
257
261
|
|
|
262
|
+
it("accepts prompt-free capability discovery on list requests", () => {
|
|
263
|
+
const capabilitiesSchema = SubagentParams?.properties?.capabilities;
|
|
264
|
+
assert.ok(capabilitiesSchema, "capabilities schema should exist");
|
|
265
|
+
assert.equal(capabilitiesSchema.type, "boolean");
|
|
266
|
+
const description = String(capabilitiesSchema.description ?? "");
|
|
267
|
+
assert.match(description, /action=['\"]list['\"]/i);
|
|
268
|
+
assert.match(description, /compact/i);
|
|
269
|
+
assert.match(description, /system prompt/i);
|
|
270
|
+
|
|
271
|
+
if (CompileSchema) {
|
|
272
|
+
const validator = CompileSchema(SubagentParams);
|
|
273
|
+
assert.equal(validator.Check({ action: "list", capabilities: true }), true);
|
|
274
|
+
assert.equal(validator.Check({ action: "list", capabilities: "true" }), false);
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
|
|
258
278
|
it("keeps agentContract.version as integer bounds without an enum (Gemini schema subset)", () => {
|
|
259
279
|
const agentContract = (SubagentParams?.properties as Record<string, JsonSchemaNode> | undefined)?.agentContract;
|
|
260
280
|
assert.ok(agentContract, "agentContract schema should exist");
|
|
@@ -418,8 +438,8 @@ describe("SubagentParams schema", { skip: !schemasAvailable ? "typebox not avail
|
|
|
418
438
|
assert.ok(SubagentParams, "SubagentParams schema should exist");
|
|
419
439
|
const schema = SubagentParams as unknown as JsonSchemaNode;
|
|
420
440
|
const serialized = JSON.stringify(schema);
|
|
421
|
-
// Mission, inspector, inline workflow, guide, and
|
|
422
|
-
assert.ok(serialized.length <
|
|
441
|
+
// Mission, inspector, inline workflow, guide, toolTimeoutMs, and capability-list fields intentionally expanded the public tool surface.
|
|
442
|
+
assert.ok(serialized.length < 17_600, `expected compact schema under 17.6k chars, got ${serialized.length}`);
|
|
423
443
|
assert.equal(serialized.includes('"$ref"'), false);
|
|
424
444
|
assert.equal(serialized.includes('"$defs"'), false);
|
|
425
445
|
assert.equal(serialized.split("Optional acceptance policy.").length - 1, 1);
|
|
@@ -106,6 +106,27 @@ describe("scripted workflow runtime", () => {
|
|
|
106
106
|
`return runs.host("tests", { kind: "command", command: "npm test" });`,
|
|
107
107
|
`return runs.host("tests", { kind: "command", command: "npm test", timeoutMs: 1000, output: "../tests.log" });`,
|
|
108
108
|
]) assert.equal(validateWorkflowScript(script).ok, false);
|
|
109
|
+
const cwd = validateWorkflowScript(`return runs.host("tests", { kind: "command", command: "npm test", timeoutMs: 1000, cwd: "/tmp" });`);
|
|
110
|
+
assert.equal(cwd.ok, false);
|
|
111
|
+
assert.ok(cwd.errors.some((error) => /unsupported field 'cwd'.*does not accept per-step cwd.*workflow cwd.*outer subagent request.*cd \/path\/to\/worktree/.test(error.message)));
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it("explains the workflow cwd workaround for dynamic runs.host params", async () => {
|
|
115
|
+
let called = false;
|
|
116
|
+
await assert.rejects(
|
|
117
|
+
runWorkflowScript({
|
|
118
|
+
script: `const params = { kind: "command", command: "npm test", timeoutMs: 1000, cwd: "/tmp" }; return await runs.host("tests", params);`,
|
|
119
|
+
async host() {
|
|
120
|
+
called = true;
|
|
121
|
+
return { key: "tests", kind: "command", ok: true, state: "passed", exitCode: 0, stdout: "", stderr: "", outputPath: "tests.log", durationMs: 1 };
|
|
122
|
+
},
|
|
123
|
+
async launch(key) { return { key, ok: true, output: "unused", artifactPaths: [] }; },
|
|
124
|
+
async status(key) { return { key, ok: true, output: "unused", artifactPaths: [] }; },
|
|
125
|
+
}),
|
|
126
|
+
(error: unknown) => error instanceof WorkflowScriptError
|
|
127
|
+
&& /does not accept per-step cwd.*workflow cwd.*outer subagent request.*cd \/path\/to\/worktree/.test(error.message),
|
|
128
|
+
);
|
|
129
|
+
assert.equal(called, false);
|
|
109
130
|
});
|
|
110
131
|
|
|
111
132
|
it("runs an awaited host command through the host boundary", async () => {
|
|
@@ -169,6 +169,19 @@ describe("resolveSingleOutput", () => {
|
|
|
169
169
|
assert.equal(result.savedPath, undefined);
|
|
170
170
|
assert.match(result.saveError ?? "", /Failed to read changed output file/);
|
|
171
171
|
});
|
|
172
|
+
|
|
173
|
+
it("fails closed when the pre-run output snapshot could not be inspected", () => {
|
|
174
|
+
const dir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-output-test-"));
|
|
175
|
+
tempDirs.push(dir);
|
|
176
|
+
const outputPath = path.join(dir, "review.md");
|
|
177
|
+
|
|
178
|
+
const result = resolveSingleOutput(outputPath, "fallback output", { exists: false, error: "permission denied" });
|
|
179
|
+
|
|
180
|
+
assert.equal(result.fullOutput, "fallback output");
|
|
181
|
+
assert.equal(result.savedPath, undefined);
|
|
182
|
+
assert.match(result.saveError ?? "", /Failed to inspect output file: permission denied/);
|
|
183
|
+
assert.equal(fs.existsSync(outputPath), false);
|
|
184
|
+
});
|
|
172
185
|
});
|
|
173
186
|
|
|
174
187
|
describe("extractChildWrittenOutput", () => {
|
|
@@ -370,6 +370,60 @@ describe("subagent_wait tool", () => {
|
|
|
370
370
|
}
|
|
371
371
|
});
|
|
372
372
|
|
|
373
|
+
it("surfaces bounded recovery guidance for a failed completion", async () => {
|
|
374
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-wait-recovery-completion-"));
|
|
375
|
+
try {
|
|
376
|
+
const asyncRoot = path.join(root, "runs");
|
|
377
|
+
const resultsDir = path.join(root, "results");
|
|
378
|
+
fs.mkdirSync(resultsDir, { recursive: true });
|
|
379
|
+
const state = makeState("sess-1");
|
|
380
|
+
writeStatus(asyncRoot, "run-recovery", "running", { sessionId: "sess-1", pid: 999999 });
|
|
381
|
+
const result = await waitForSubagents({ all: true }, undefined, baseDeps(root, state, {
|
|
382
|
+
sleep: async () => {
|
|
383
|
+
const recovery = {
|
|
384
|
+
termination: "timed-out",
|
|
385
|
+
changedFiles: ["input.md"],
|
|
386
|
+
recoveryNeeded: true,
|
|
387
|
+
reason: "timed-out-with-dirty-worktree",
|
|
388
|
+
reportStatus: "missing",
|
|
389
|
+
message: "raw recovery message must not cross the wait boundary",
|
|
390
|
+
effects: { settlementDiagnostic: { finalTextPresent: true } },
|
|
391
|
+
};
|
|
392
|
+
writeStatus(asyncRoot, "run-recovery", "failed", {
|
|
393
|
+
sessionId: "sess-1",
|
|
394
|
+
steps: [{ agent: "worker", status: "failed", timedOut: true, timeoutRecovery: recovery }],
|
|
395
|
+
});
|
|
396
|
+
fs.writeFileSync(path.join(resultsDir, "run-recovery.json"), JSON.stringify({
|
|
397
|
+
id: "run-recovery",
|
|
398
|
+
runId: "run-recovery",
|
|
399
|
+
mode: "single",
|
|
400
|
+
state: "failed",
|
|
401
|
+
success: false,
|
|
402
|
+
results: [{ agent: "worker", success: false, error: "Subagent timed out.", output: "raw output must not be copied", timeoutRecovery: recovery }],
|
|
403
|
+
}), "utf-8");
|
|
404
|
+
},
|
|
405
|
+
}));
|
|
406
|
+
|
|
407
|
+
assert.equal(result.isError, undefined);
|
|
408
|
+
const text = textOf(result);
|
|
409
|
+
assert.match(text, /Recovery needed: review the diff and artifacts before resuming or launching dependent stages\./);
|
|
410
|
+
assert.match(text, /requested report: missing/);
|
|
411
|
+
assert.match(text, /changed tracked files: input\.md/);
|
|
412
|
+
assert.doesNotMatch(text, /raw recovery message|settlementDiagnostic|raw output/);
|
|
413
|
+
const completion = result.details.completions?.[0];
|
|
414
|
+
assert.equal(completion?.success, false);
|
|
415
|
+
assert.deepEqual(completion?.results?.[0]?.timeoutRecovery, {
|
|
416
|
+
termination: "timed-out",
|
|
417
|
+
changedFiles: ["input.md"],
|
|
418
|
+
recoveryNeeded: true,
|
|
419
|
+
reason: "timed-out-with-dirty-worktree",
|
|
420
|
+
reportStatus: "missing",
|
|
421
|
+
});
|
|
422
|
+
} finally {
|
|
423
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
424
|
+
}
|
|
425
|
+
});
|
|
426
|
+
|
|
373
427
|
it("surfaces terminal completion payloads from an indexed pending result file", async () => {
|
|
374
428
|
const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-wait-completions-pending-"));
|
|
375
429
|
const originalError = console.error;
|