@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
|
@@ -24,7 +24,6 @@ export function getIntercomScopeId(env: NodeJS.ProcessEnv = process.env): string
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
export type InboundTriggerPolicy = "always" | "replies" | "never";
|
|
27
|
-
export type IntercomToolVisibility = "always" | "after-first-use";
|
|
28
27
|
|
|
29
28
|
export interface IntercomConfig {
|
|
30
29
|
/** Broker command used to spawn the broker process (e.g. "npx" or "bun") */
|
|
@@ -39,9 +38,6 @@ export interface IntercomConfig {
|
|
|
39
38
|
/** Controls whether inbound broker messages may automatically trigger a model turn */
|
|
40
39
|
inboundTrigger: InboundTriggerPolicy;
|
|
41
40
|
|
|
42
|
-
/** Controls when the intercom tool enters the active model tool set */
|
|
43
|
-
toolVisibility: IntercomToolVisibility;
|
|
44
|
-
|
|
45
41
|
/** Optional custom status suffix shown after automatic lifecycle status */
|
|
46
42
|
status?: string;
|
|
47
43
|
|
|
@@ -64,7 +60,6 @@ const defaults: IntercomConfig = {
|
|
|
64
60
|
brokerArgs: ["--no-install", "tsx"],
|
|
65
61
|
confirmSend: false,
|
|
66
62
|
inboundTrigger: "always",
|
|
67
|
-
toolVisibility: "always",
|
|
68
63
|
enabled: true,
|
|
69
64
|
replyHint: true,
|
|
70
65
|
};
|
|
@@ -135,16 +130,6 @@ export function loadConfig(): IntercomConfig {
|
|
|
135
130
|
config.inboundTrigger = parsedConfig.inboundTrigger;
|
|
136
131
|
}
|
|
137
132
|
|
|
138
|
-
if (Object.hasOwn(parsedConfig, "toolVisibility")) {
|
|
139
|
-
if (
|
|
140
|
-
parsedConfig.toolVisibility !== "always"
|
|
141
|
-
&& parsedConfig.toolVisibility !== "after-first-use"
|
|
142
|
-
) {
|
|
143
|
-
throw new Error(`"toolVisibility" must be "always" or "after-first-use"`);
|
|
144
|
-
}
|
|
145
|
-
config.toolVisibility = parsedConfig.toolVisibility;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
133
|
if (Object.hasOwn(parsedConfig, "replyHint")) {
|
|
149
134
|
if (typeof parsedConfig.replyHint !== "boolean") {
|
|
150
135
|
throw new Error(`"replyHint" must be a boolean`);
|
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
import test from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import { mkdtempSync, rmSync, symlinkSync, mkdirSync, realpathSync } from "node:fs";
|
|
4
|
-
import { tmpdir } from "node:os";
|
|
5
|
-
import { join } from "node:path";
|
|
6
|
-
import { normalizeCwd, sameCwd } from "./cwd.ts";
|
|
7
|
-
|
|
8
|
-
test("sameCwd collapses a trailing slash", () => {
|
|
9
|
-
assert.equal(sameCwd("/usr/local", "/usr/local/"), true);
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
test("sameCwd collapses lexical '.' and '..' segments", () => {
|
|
13
|
-
assert.equal(sameCwd("/usr/local/../local/./bin", "/usr/local/bin"), true);
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
test("sameCwd treats genuinely different directories as different", () => {
|
|
17
|
-
assert.equal(sameCwd("/usr/local", "/usr/lib"), false);
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
test("sameCwd collapses a symlink to its real target", () => {
|
|
21
|
-
const base = mkdtempSync(join(tmpdir(), "cwd-symlink-"));
|
|
22
|
-
try {
|
|
23
|
-
const real = join(base, "real");
|
|
24
|
-
const link = join(base, "link");
|
|
25
|
-
mkdirSync(real);
|
|
26
|
-
symlinkSync(real, link);
|
|
27
|
-
// Reached via the symlink vs its canonical path — must compare equal.
|
|
28
|
-
assert.equal(sameCwd(link, real), true);
|
|
29
|
-
// And normalizeCwd resolves the link to the real path.
|
|
30
|
-
assert.equal(normalizeCwd(link), realpathSync(real));
|
|
31
|
-
} finally {
|
|
32
|
-
rmSync(base, { recursive: true, force: true });
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
test("normalizeCwd falls back to the resolved path for a nonexistent dir", () => {
|
|
37
|
-
// realpathSync throws for a missing dir; normalizeCwd must still collapse the
|
|
38
|
-
// lexical variants rather than throw.
|
|
39
|
-
assert.equal(normalizeCwd("/no/such/dir/../dir"), "/no/such/dir");
|
|
40
|
-
});
|
|
1
|
+
import test from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { mkdtempSync, rmSync, symlinkSync, mkdirSync, realpathSync } from "node:fs";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { normalizeCwd, sameCwd } from "./cwd.ts";
|
|
7
|
+
|
|
8
|
+
test("sameCwd collapses a trailing slash", () => {
|
|
9
|
+
assert.equal(sameCwd("/usr/local", "/usr/local/"), true);
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test("sameCwd collapses lexical '.' and '..' segments", () => {
|
|
13
|
+
assert.equal(sameCwd("/usr/local/../local/./bin", "/usr/local/bin"), true);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
test("sameCwd treats genuinely different directories as different", () => {
|
|
17
|
+
assert.equal(sameCwd("/usr/local", "/usr/lib"), false);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test("sameCwd collapses a symlink to its real target", () => {
|
|
21
|
+
const base = mkdtempSync(join(tmpdir(), "cwd-symlink-"));
|
|
22
|
+
try {
|
|
23
|
+
const real = join(base, "real");
|
|
24
|
+
const link = join(base, "link");
|
|
25
|
+
mkdirSync(real);
|
|
26
|
+
symlinkSync(real, link);
|
|
27
|
+
// Reached via the symlink vs its canonical path — must compare equal.
|
|
28
|
+
assert.equal(sameCwd(link, real), true);
|
|
29
|
+
// And normalizeCwd resolves the link to the real path.
|
|
30
|
+
assert.equal(normalizeCwd(link), realpathSync(real));
|
|
31
|
+
} finally {
|
|
32
|
+
rmSync(base, { recursive: true, force: true });
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test("normalizeCwd falls back to the resolved path for a nonexistent dir", () => {
|
|
37
|
+
// realpathSync throws for a missing dir; normalizeCwd must still collapse the
|
|
38
|
+
// lexical variants rather than throw.
|
|
39
|
+
assert.equal(normalizeCwd("/no/such/dir/../dir"), "/no/such/dir");
|
|
40
|
+
});
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import { resolve } from "node:path";
|
|
2
|
-
import { realpathSync } from "node:fs";
|
|
3
|
-
|
|
4
|
-
// Normalize a cwd for same-directory comparison. A raw string match ("a === b")
|
|
5
|
-
// hides genuine same-directory peers when two cwd strings differ only by a
|
|
6
|
-
// trailing slash, a "."/".." segment, or a symlink (e.g. macOS /tmp <->
|
|
7
|
-
// /private/tmp). resolve() collapses the lexical variants; realpathSync()
|
|
8
|
-
// collapses symlinks (best-effort: falls back to the resolved path if the
|
|
9
|
-
// directory no longer exists). Memoized — the set of distinct cwd strings is
|
|
10
|
-
// small and stable, so repeat comparisons are free after warmup.
|
|
11
|
-
const normalizeCache = new Map<string, string>();
|
|
12
|
-
|
|
13
|
-
export function normalizeCwd(cwd: string): string {
|
|
14
|
-
const cached = normalizeCache.get(cwd);
|
|
15
|
-
if (cached !== undefined) {
|
|
16
|
-
return cached;
|
|
17
|
-
}
|
|
18
|
-
const resolved = resolve(cwd);
|
|
19
|
-
let normalized: string;
|
|
20
|
-
try {
|
|
21
|
-
normalized = realpathSync(resolved);
|
|
22
|
-
} catch {
|
|
23
|
-
normalized = resolved;
|
|
24
|
-
}
|
|
25
|
-
normalizeCache.set(cwd, normalized);
|
|
26
|
-
return normalized;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export function sameCwd(a: string, b: string): boolean {
|
|
30
|
-
return normalizeCwd(a) === normalizeCwd(b);
|
|
31
|
-
}
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { realpathSync } from "node:fs";
|
|
3
|
+
|
|
4
|
+
// Normalize a cwd for same-directory comparison. A raw string match ("a === b")
|
|
5
|
+
// hides genuine same-directory peers when two cwd strings differ only by a
|
|
6
|
+
// trailing slash, a "."/".." segment, or a symlink (e.g. macOS /tmp <->
|
|
7
|
+
// /private/tmp). resolve() collapses the lexical variants; realpathSync()
|
|
8
|
+
// collapses symlinks (best-effort: falls back to the resolved path if the
|
|
9
|
+
// directory no longer exists). Memoized — the set of distinct cwd strings is
|
|
10
|
+
// small and stable, so repeat comparisons are free after warmup.
|
|
11
|
+
const normalizeCache = new Map<string, string>();
|
|
12
|
+
|
|
13
|
+
export function normalizeCwd(cwd: string): string {
|
|
14
|
+
const cached = normalizeCache.get(cwd);
|
|
15
|
+
if (cached !== undefined) {
|
|
16
|
+
return cached;
|
|
17
|
+
}
|
|
18
|
+
const resolved = resolve(cwd);
|
|
19
|
+
let normalized: string;
|
|
20
|
+
try {
|
|
21
|
+
normalized = realpathSync(resolved);
|
|
22
|
+
} catch {
|
|
23
|
+
normalized = resolved;
|
|
24
|
+
}
|
|
25
|
+
normalizeCache.set(cwd, normalized);
|
|
26
|
+
return normalized;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function sameCwd(a: string, b: string): boolean {
|
|
30
|
+
return normalizeCwd(a) === normalizeCwd(b);
|
|
31
|
+
}
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import test from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import { formatTokenCount, formatContextUsage } from "./format-context.ts";
|
|
4
|
-
import type { SessionInfo } from "./types.ts";
|
|
5
|
-
|
|
6
|
-
const base: SessionInfo = { id: "s1", cwd: "/w", model: "m", pid: 1, startedAt: 0, lastActivity: 0 };
|
|
7
|
-
|
|
8
|
-
test("formatTokenCount compacts thousands", () => {
|
|
9
|
-
assert.equal(formatTokenCount(0), "0");
|
|
10
|
-
assert.equal(formatTokenCount(999), "999");
|
|
11
|
-
assert.equal(formatTokenCount(1432), "1.4k");
|
|
12
|
-
assert.equal(formatTokenCount(144000), "144k");
|
|
13
|
-
assert.equal(formatTokenCount(200000), "200k");
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
test("formatContextUsage renders percent + token detail when all known", () => {
|
|
17
|
-
assert.equal(
|
|
18
|
-
formatContextUsage({ ...base, contextPct: 72, contextTokens: 144000, contextWindow: 200000 }),
|
|
19
|
-
" · 72% ctx (144k/200k)",
|
|
20
|
-
);
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
test("formatContextUsage shows percent only when token counts are absent", () => {
|
|
24
|
-
assert.equal(formatContextUsage({ ...base, contextPct: 30 }), " · 30% ctx");
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
test("formatContextUsage renders nothing when percent is unknown (never a stale %)", () => {
|
|
28
|
-
assert.equal(formatContextUsage(base), "");
|
|
29
|
-
// Tokens present but no percent (e.g. right after a compaction) still renders nothing.
|
|
30
|
-
assert.equal(formatContextUsage({ ...base, contextTokens: 100, contextWindow: 200 }), "");
|
|
31
|
-
});
|
|
1
|
+
import test from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { formatTokenCount, formatContextUsage } from "./format-context.ts";
|
|
4
|
+
import type { SessionInfo } from "./types.ts";
|
|
5
|
+
|
|
6
|
+
const base: SessionInfo = { id: "s1", cwd: "/w", model: "m", pid: 1, startedAt: 0, lastActivity: 0 };
|
|
7
|
+
|
|
8
|
+
test("formatTokenCount compacts thousands", () => {
|
|
9
|
+
assert.equal(formatTokenCount(0), "0");
|
|
10
|
+
assert.equal(formatTokenCount(999), "999");
|
|
11
|
+
assert.equal(formatTokenCount(1432), "1.4k");
|
|
12
|
+
assert.equal(formatTokenCount(144000), "144k");
|
|
13
|
+
assert.equal(formatTokenCount(200000), "200k");
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
test("formatContextUsage renders percent + token detail when all known", () => {
|
|
17
|
+
assert.equal(
|
|
18
|
+
formatContextUsage({ ...base, contextPct: 72, contextTokens: 144000, contextWindow: 200000 }),
|
|
19
|
+
" · 72% ctx (144k/200k)",
|
|
20
|
+
);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
test("formatContextUsage shows percent only when token counts are absent", () => {
|
|
24
|
+
assert.equal(formatContextUsage({ ...base, contextPct: 30 }), " · 30% ctx");
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test("formatContextUsage renders nothing when percent is unknown (never a stale %)", () => {
|
|
28
|
+
assert.equal(formatContextUsage(base), "");
|
|
29
|
+
// Tokens present but no percent (e.g. right after a compaction) still renders nothing.
|
|
30
|
+
assert.equal(formatContextUsage({ ...base, contextTokens: 100, contextWindow: 200 }), "");
|
|
31
|
+
});
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import type { SessionInfo } from "./types.ts";
|
|
2
|
-
|
|
3
|
-
// Compact token count for display: 1432 -> "1.4k", 144000 -> "144k". Keeps list
|
|
4
|
-
// rows short while staying legible.
|
|
5
|
-
export function formatTokenCount(tokens: number): string {
|
|
6
|
-
if (tokens < 1000) {
|
|
7
|
-
return String(Math.max(0, Math.round(tokens)));
|
|
8
|
-
}
|
|
9
|
-
const k = tokens / 1000;
|
|
10
|
-
const value = k >= 100 ? String(Math.round(k)) : k.toFixed(1).replace(/\.0$/, "");
|
|
11
|
-
return `${value}k`;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
// Render a session's context-window usage to sit beside its model, e.g.
|
|
15
|
-
// " · 72% ctx (144k/200k)". The token detail is appended only when both counts
|
|
16
|
-
// are known. Unknown percent (e.g. right after a compaction, before the next
|
|
17
|
-
// assistant response) renders nothing, so a frozen value is never shown as a
|
|
18
|
-
// stale percentage.
|
|
19
|
-
export function formatContextUsage(session: SessionInfo): string {
|
|
20
|
-
if (typeof session.contextPct !== "number") {
|
|
21
|
-
return "";
|
|
22
|
-
}
|
|
23
|
-
let out = ` · ${session.contextPct}% ctx`;
|
|
24
|
-
if (
|
|
25
|
-
typeof session.contextTokens === "number"
|
|
26
|
-
&& typeof session.contextWindow === "number"
|
|
27
|
-
&& session.contextWindow > 0
|
|
28
|
-
) {
|
|
29
|
-
out += ` (${formatTokenCount(session.contextTokens)}/${formatTokenCount(session.contextWindow)})`;
|
|
30
|
-
}
|
|
31
|
-
return out;
|
|
32
|
-
}
|
|
1
|
+
import type { SessionInfo } from "./types.ts";
|
|
2
|
+
|
|
3
|
+
// Compact token count for display: 1432 -> "1.4k", 144000 -> "144k". Keeps list
|
|
4
|
+
// rows short while staying legible.
|
|
5
|
+
export function formatTokenCount(tokens: number): string {
|
|
6
|
+
if (tokens < 1000) {
|
|
7
|
+
return String(Math.max(0, Math.round(tokens)));
|
|
8
|
+
}
|
|
9
|
+
const k = tokens / 1000;
|
|
10
|
+
const value = k >= 100 ? String(Math.round(k)) : k.toFixed(1).replace(/\.0$/, "");
|
|
11
|
+
return `${value}k`;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// Render a session's context-window usage to sit beside its model, e.g.
|
|
15
|
+
// " · 72% ctx (144k/200k)". The token detail is appended only when both counts
|
|
16
|
+
// are known. Unknown percent (e.g. right after a compaction, before the next
|
|
17
|
+
// assistant response) renders nothing, so a frozen value is never shown as a
|
|
18
|
+
// stale percentage.
|
|
19
|
+
export function formatContextUsage(session: SessionInfo): string {
|
|
20
|
+
if (typeof session.contextPct !== "number") {
|
|
21
|
+
return "";
|
|
22
|
+
}
|
|
23
|
+
let out = ` · ${session.contextPct}% ctx`;
|
|
24
|
+
if (
|
|
25
|
+
typeof session.contextTokens === "number"
|
|
26
|
+
&& typeof session.contextWindow === "number"
|
|
27
|
+
&& session.contextWindow > 0
|
|
28
|
+
) {
|
|
29
|
+
out += ` (${formatTokenCount(session.contextTokens)}/${formatTokenCount(session.contextWindow)})`;
|
|
30
|
+
}
|
|
31
|
+
return out;
|
|
32
|
+
}
|
|
@@ -27,15 +27,12 @@ import {
|
|
|
27
27
|
type IntercomOutboxResultV1,
|
|
28
28
|
} from "./extension-api.ts";
|
|
29
29
|
import { ReplyTracker } from "./reply-tracker.ts";
|
|
30
|
-
import { realpathSync } from "node:fs";
|
|
31
30
|
import { resolve as resolvePath } from "node:path";
|
|
32
|
-
import { fileURLToPath } from "node:url";
|
|
33
31
|
import { sameCwd } from "./cwd.ts";
|
|
34
32
|
import { formatContextUsage } from "./format-context.ts";
|
|
35
33
|
import { openProjectPane, resolveTargetInCwd, waitForProjectSession, type ProjectPaneLaunch } from "./project-agent.ts";
|
|
36
34
|
|
|
37
35
|
const INTERCOM_TOOL_NAME = "intercom";
|
|
38
|
-
const INTERCOM_SKILL_PATH = realpathSync(fileURLToPath(new URL("./skills/pi-intercom/SKILL.md", import.meta.url)));
|
|
39
36
|
const SUBAGENT_CONTROL_INTERCOM_EVENT = "subagent:control-intercom";
|
|
40
37
|
const SUBAGENT_RESULT_INTERCOM_EVENT = "subagent:result-intercom";
|
|
41
38
|
const SUBAGENT_RESULT_INTERCOM_DELIVERY_EVENT = "subagent:result-intercom-delivery";
|
|
@@ -116,18 +113,6 @@ function getErrorMessage(error: unknown): string {
|
|
|
116
113
|
return error instanceof Error ? error.message : String(error);
|
|
117
114
|
}
|
|
118
115
|
|
|
119
|
-
function isIntercomSkillRead(input: unknown, cwd: string): boolean {
|
|
120
|
-
if (!input || typeof input !== "object") return false;
|
|
121
|
-
const inputPath = Reflect.get(input, "path");
|
|
122
|
-
if (typeof inputPath !== "string") return false;
|
|
123
|
-
const normalizedPath = inputPath.startsWith("@") ? inputPath.slice(1) : inputPath;
|
|
124
|
-
try {
|
|
125
|
-
return realpathSync(resolvePath(cwd, normalizedPath)) === INTERCOM_SKILL_PATH;
|
|
126
|
-
} catch {
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
116
|
function deliveryDetails(result: SendResult): Record<string, unknown> {
|
|
132
117
|
return {
|
|
133
118
|
messageId: result.id,
|
|
@@ -622,23 +607,7 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
|
|
|
622
607
|
let runtimeGeneration = 0;
|
|
623
608
|
let agentRunning = false;
|
|
624
609
|
const activeTools = new Map<string, string>();
|
|
625
|
-
let intercomToolHiddenByPolicy = false;
|
|
626
610
|
const replyTracker = new ReplyTracker();
|
|
627
|
-
function hideIntercomTool(): void {
|
|
628
|
-
if (config.toolVisibility !== "after-first-use") return;
|
|
629
|
-
const activeToolNames = pi.getActiveTools();
|
|
630
|
-
if (!activeToolNames.includes(INTERCOM_TOOL_NAME)) return;
|
|
631
|
-
pi.setActiveTools(activeToolNames.filter((name) => name !== INTERCOM_TOOL_NAME));
|
|
632
|
-
intercomToolHiddenByPolicy = true;
|
|
633
|
-
}
|
|
634
|
-
function activateIntercomTool(): void {
|
|
635
|
-
if (!intercomToolHiddenByPolicy) return;
|
|
636
|
-
const activeToolNames = pi.getActiveTools();
|
|
637
|
-
if (!activeToolNames.includes(INTERCOM_TOOL_NAME)) {
|
|
638
|
-
pi.setActiveTools([...activeToolNames, INTERCOM_TOOL_NAME]);
|
|
639
|
-
}
|
|
640
|
-
intercomToolHiddenByPolicy = false;
|
|
641
|
-
}
|
|
642
611
|
|
|
643
612
|
const seenInboundMessages = new Map<string, number>();
|
|
644
613
|
const latestOutboundReceipts = new Map<string, { status: MessageReceiptStatus; timestamp: number; detail?: string }>();
|
|
@@ -1221,7 +1190,6 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
|
|
|
1221
1190
|
);
|
|
1222
1191
|
}
|
|
1223
1192
|
function sendIncomingBrokerMessage(entry: InboundMessageEntry, delivery: "trigger" | "steer", generation = runtimeGeneration): void {
|
|
1224
|
-
activateIntercomTool();
|
|
1225
1193
|
sendIncomingMessage(entry, delivery, generation);
|
|
1226
1194
|
}
|
|
1227
1195
|
function handleIncomingMessage(ctx: ExtensionContext, from: SessionInfo, message: Message): void {
|
|
@@ -1572,7 +1540,6 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
|
|
|
1572
1540
|
});
|
|
1573
1541
|
}
|
|
1574
1542
|
function startSessionRuntime(ctx: ExtensionContext): void {
|
|
1575
|
-
hideIntercomTool();
|
|
1576
1543
|
const previousClient = client;
|
|
1577
1544
|
failPendingOutboxRequests(runtimeGeneration, "session_ended", "Session replaced");
|
|
1578
1545
|
shuttingDown = false;
|
|
@@ -1819,17 +1786,7 @@ export default function piIntercomExtension(pi: ExtensionAPI) {
|
|
|
1819
1786
|
return new InlineMessageComponent(details.from, details.message, theme, details.replyCommand, details.bodyText, !options.expanded);
|
|
1820
1787
|
});
|
|
1821
1788
|
|
|
1822
|
-
pi.on("
|
|
1823
|
-
if (/^\/skill: pi-intercom(?:\s|$)/u.test(event.text.trimStart())) {
|
|
1824
|
-
activateIntercomTool();
|
|
1825
|
-
}
|
|
1826
|
-
});
|
|
1827
|
-
|
|
1828
|
-
pi.on("tool_result", (event, ctx) => {
|
|
1829
|
-
if (event.toolName === "read" && event.isError !== true && isIntercomSkillRead(event.input, ctx.cwd)) {
|
|
1830
|
-
activateIntercomTool();
|
|
1831
|
-
return;
|
|
1832
|
-
}
|
|
1789
|
+
pi.on("tool_result", (event) => {
|
|
1833
1790
|
if (event.toolName !== "intercom" && event.toolName !== "contact_supervisor") {
|
|
1834
1791
|
return;
|
|
1835
1792
|
}
|
|
@@ -2181,7 +2138,6 @@ Usage:
|
|
|
2181
2138
|
}),
|
|
2182
2139
|
|
|
2183
2140
|
async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
|
|
2184
|
-
activateIntercomTool();
|
|
2185
2141
|
let connectedClient: IntercomClient;
|
|
2186
2142
|
try {
|
|
2187
2143
|
connectedClient = await ensureConnected("tool");
|
|
@@ -2350,6 +2306,14 @@ Usage:
|
|
|
2350
2306
|
details: { error: true },
|
|
2351
2307
|
};
|
|
2352
2308
|
}
|
|
2309
|
+
const activeReplyMismatch = replyTo ? null : replyTracker.findActiveReplyTargetMismatch(sendTo);
|
|
2310
|
+
if (activeReplyMismatch) {
|
|
2311
|
+
const senderLabel = activeReplyMismatch.from.name || activeReplyMismatch.from.id;
|
|
2312
|
+
return {
|
|
2313
|
+
content: [{ type: "text", text: `This turn is responding to an intercom ask from "${senderLabel}". Use intercom({ action: "reply", message: "..." }) or set replyTo: "${activeReplyMismatch.message.id}". Refusing non-reply send to "${targetDisplay}" to avoid a misdirected reply.` }],
|
|
2314
|
+
details: { error: true, replyTo: activeReplyMismatch.message.id },
|
|
2315
|
+
};
|
|
2316
|
+
}
|
|
2353
2317
|
const inferredAsk = replyTo ? null : replyTracker.findUniquePendingAskFrom(sendTo);
|
|
2354
2318
|
const effectiveReplyTo = replyTo ?? inferredAsk?.message.id;
|
|
2355
2319
|
if (confirmSend && !(cwd && openProjectPaneIfMissing)) {
|
|
@@ -2761,7 +2725,6 @@ Usage:
|
|
|
2761
2725
|
).catch(() => undefined);
|
|
2762
2726
|
|
|
2763
2727
|
if (result?.sent && result.messageId && result.text && getLiveContext(ctx, overlayGeneration)) {
|
|
2764
|
-
activateIntercomTool();
|
|
2765
2728
|
pi.appendEntry("intercom_sent", {
|
|
2766
2729
|
to: selectedSession.name || selectedSession.id,
|
|
2767
2730
|
message: { text: result.text },
|
|
@@ -1672,59 +1672,7 @@ test("intercom tool result hook marks failed details as errors", async () => {
|
|
|
1672
1672
|
assert.deepEqual(okResults.filter(Boolean), []);
|
|
1673
1673
|
});
|
|
1674
1674
|
|
|
1675
|
-
test("
|
|
1676
|
-
const { default: piIntercomExtension } = await import("./index.ts");
|
|
1677
|
-
|
|
1678
|
-
await withIntercomConfig({ toolVisibility: "after-first-use" }, () => withChildOrchestratorEnv({
|
|
1679
|
-
orchestratorTarget: "orchestrator",
|
|
1680
|
-
runId: "78f659a3",
|
|
1681
|
-
agent: "worker",
|
|
1682
|
-
index: "0",
|
|
1683
|
-
}, async () => {
|
|
1684
|
-
const harness = createExtensionHarness("lazy-skill-worker", { activeTools: ["read", "bash"] });
|
|
1685
|
-
piIntercomExtension(harness.pi as never);
|
|
1686
|
-
|
|
1687
|
-
try {
|
|
1688
|
-
await harness.emitLifecycle("session_start");
|
|
1689
|
-
assert.deepEqual(harness.getActiveTools(), ["read", "bash", "contact_supervisor"]);
|
|
1690
|
-
|
|
1691
|
-
harness.pi.events.emit("subagent:control-intercom", {
|
|
1692
|
-
to: "session-child-test",
|
|
1693
|
-
message: "Local relay traffic should not reveal the generic tool.",
|
|
1694
|
-
});
|
|
1695
|
-
assert.equal(harness.sentMessages.at(-1)?.activeTools.includes("intercom"), false);
|
|
1696
|
-
assert.equal(harness.getActiveTools().includes("intercom"), false);
|
|
1697
|
-
|
|
1698
|
-
await harness.emitLifecycle("tool_result", {
|
|
1699
|
-
toolName: "read",
|
|
1700
|
-
input: { path: path.join(repoDir, "README.md") },
|
|
1701
|
-
isError: false,
|
|
1702
|
-
});
|
|
1703
|
-
await harness.emitLifecycle("tool_result", {
|
|
1704
|
-
toolName: "read",
|
|
1705
|
-
input: { path: path.join(repoDir, "skills", "pi-intercom", "SKILL.md") },
|
|
1706
|
-
isError: true,
|
|
1707
|
-
});
|
|
1708
|
-
assert.equal(harness.getActiveTools().includes("intercom"), false);
|
|
1709
|
-
|
|
1710
|
-
await harness.emitLifecycle("tool_result", {
|
|
1711
|
-
toolName: "read",
|
|
1712
|
-
input: { path: path.join(repoDir, "skills", "pi-intercom", "SKILL.md") },
|
|
1713
|
-
isError: false,
|
|
1714
|
-
});
|
|
1715
|
-
assert.deepEqual(harness.getActiveTools(), ["read", "bash", "contact_supervisor", "intercom"]);
|
|
1716
|
-
|
|
1717
|
-
await harness.emitLifecycle("session_start");
|
|
1718
|
-
assert.equal(harness.getActiveTools().includes("intercom"), false);
|
|
1719
|
-
await harness.emitLifecycle("input", { text: " /skill: pi-intercom", source: "user" });
|
|
1720
|
-
assert.equal(harness.getActiveTools().includes("intercom"), true);
|
|
1721
|
-
} finally {
|
|
1722
|
-
await harness.emitLifecycle("session_shutdown");
|
|
1723
|
-
}
|
|
1724
|
-
}));
|
|
1725
|
-
});
|
|
1726
|
-
|
|
1727
|
-
test("lazy tool visibility reveals intercom before broker injection and after an overlay send", { concurrency: false }, async () => {
|
|
1675
|
+
test("obsolete toolVisibility config never hides or reveals the intercom tool", { concurrency: false }, async () => {
|
|
1728
1676
|
const { default: piIntercomExtension } = await import("./index.ts");
|
|
1729
1677
|
|
|
1730
1678
|
await withIntercomConfig({ toolVisibility: "after-first-use" }, async () => {
|
|
@@ -1754,14 +1702,14 @@ test("lazy tool visibility reveals intercom before broker injection and after an
|
|
|
1754
1702
|
piIntercomExtension(inboundHarness.pi as never);
|
|
1755
1703
|
await overlayHarness.emitLifecycle("session_start");
|
|
1756
1704
|
await inboundHarness.emitLifecycle("session_start");
|
|
1757
|
-
assert.equal(overlayHarness.getActiveTools().includes("intercom"),
|
|
1758
|
-
assert.equal(inboundHarness.getActiveTools().includes("intercom"),
|
|
1705
|
+
assert.equal(overlayHarness.getActiveTools().includes("intercom"), true);
|
|
1706
|
+
assert.equal(inboundHarness.getActiveTools().includes("intercom"), true);
|
|
1759
1707
|
|
|
1760
1708
|
selectedSession = await waitForSessionByName(planner, "planner");
|
|
1761
1709
|
const inboundSession = await waitForSessionByName(planner, "lazy-inbound-worker");
|
|
1762
1710
|
const delivered = await planner.send(inboundSession.id, {
|
|
1763
|
-
messageId: "
|
|
1764
|
-
text: "
|
|
1711
|
+
messageId: "stable-inbound-message",
|
|
1712
|
+
text: "Keep intercom active before injecting this message.",
|
|
1765
1713
|
});
|
|
1766
1714
|
assert.equal(delivered.delivered, true);
|
|
1767
1715
|
const deadline = Date.now() + 1000;
|
|
@@ -1770,6 +1718,13 @@ test("lazy tool visibility reveals intercom before broker injection and after an
|
|
|
1770
1718
|
}
|
|
1771
1719
|
assert.equal(inboundHarness.sentMessages[0]?.activeTools.includes("intercom"), true);
|
|
1772
1720
|
|
|
1721
|
+
await inboundHarness.emitLifecycle("tool_result", {
|
|
1722
|
+
toolName: "read",
|
|
1723
|
+
input: { path: path.join(repoDir, "skills", "pi-intercom", "SKILL.md") },
|
|
1724
|
+
isError: false,
|
|
1725
|
+
});
|
|
1726
|
+
assert.equal(inboundHarness.getActiveTools().includes("intercom"), true);
|
|
1727
|
+
|
|
1773
1728
|
await overlayHarness.commands.get("intercom")!("", overlayHarness.ctx);
|
|
1774
1729
|
assert.equal(overlayStep, 2);
|
|
1775
1730
|
assert.equal(overlayHarness.getActiveTools().includes("intercom"), true);
|
|
@@ -3148,6 +3103,43 @@ test("intercom reply sends attachments", { concurrency: false }, async () => {
|
|
|
3148
3103
|
}
|
|
3149
3104
|
});
|
|
3150
3105
|
|
|
3106
|
+
test("intercom send refuses a different target during an active inbound ask turn", { concurrency: false }, async () => {
|
|
3107
|
+
const { planner, orchestrator, cleanup } = await setupClients();
|
|
3108
|
+
const { default: piIntercomExtension } = await import("./index.ts");
|
|
3109
|
+
const harness = createExtensionHarness("cwd-reply-worker");
|
|
3110
|
+
|
|
3111
|
+
try {
|
|
3112
|
+
piIntercomExtension(harness.pi as never);
|
|
3113
|
+
await harness.emitLifecycle("session_start");
|
|
3114
|
+
const worker = await waitForSessionByName(planner, "cwd-reply-worker");
|
|
3115
|
+
|
|
3116
|
+
assert.equal((await planner.send(worker.id, {
|
|
3117
|
+
messageId: "cwd-hierarchy-ask",
|
|
3118
|
+
text: "Please answer me, not the repo-root session.",
|
|
3119
|
+
expectsReply: true,
|
|
3120
|
+
})).delivered, true);
|
|
3121
|
+
const deadline = Date.now() + 1000;
|
|
3122
|
+
while (harness.sentMessages.length === 0 && Date.now() < deadline) {
|
|
3123
|
+
await new Promise((resolve) => setTimeout(resolve, 20));
|
|
3124
|
+
}
|
|
3125
|
+
await harness.emitLifecycle("turn_start");
|
|
3126
|
+
|
|
3127
|
+
const intercomTool = harness.tools.find((tool) => tool.name === "intercom")!;
|
|
3128
|
+
const result = await intercomTool.execute("misdirected-send", {
|
|
3129
|
+
action: "send",
|
|
3130
|
+
to: "orchestrator",
|
|
3131
|
+
message: "This was meant as the ask answer.",
|
|
3132
|
+
}, new AbortController().signal, undefined, harness.ctx);
|
|
3133
|
+
|
|
3134
|
+
assert.equal(result.details?.error, true);
|
|
3135
|
+
assert.equal(result.details?.replyTo, "cwd-hierarchy-ask");
|
|
3136
|
+
assert.match(result.content[0]?.text ?? "", /Refusing non-reply send to "orchestrator"/);
|
|
3137
|
+
} finally {
|
|
3138
|
+
await harness.emitLifecycle("session_shutdown");
|
|
3139
|
+
await cleanup();
|
|
3140
|
+
}
|
|
3141
|
+
});
|
|
3142
|
+
|
|
3151
3143
|
test("intercom reply targets one of multiple pending asks by short session ID", { concurrency: false }, async () => {
|
|
3152
3144
|
const { planner, orchestrator, cleanup } = await setupClients();
|
|
3153
3145
|
const { default: piIntercomExtension } = await import("./index.ts");
|
|
@@ -93,6 +93,26 @@ test("explicit to overrides the current turn context", () => {
|
|
|
93
93
|
assert.throws(() => tracker.resolveReplyTarget({ to: "missing" }, 1003), /No pending ask from/);
|
|
94
94
|
});
|
|
95
95
|
|
|
96
|
+
test("active ask context flags non-reply sends to a different target", () => {
|
|
97
|
+
const tracker = new ReplyTracker();
|
|
98
|
+
const current = tracker.recordIncomingMessage(createSession("planner-id", "planner"), createMessage("ask-1", "Need a reply"), 1000);
|
|
99
|
+
tracker.queueTurnContext(current);
|
|
100
|
+
tracker.beginTurn(1001);
|
|
101
|
+
|
|
102
|
+
assert.equal(tracker.findActiveReplyTargetMismatch("planner-id", 1002), null);
|
|
103
|
+
assert.equal(tracker.findActiveReplyTargetMismatch("planner", 1002)?.message.id, "ask-1");
|
|
104
|
+
assert.equal(tracker.findActiveReplyTargetMismatch("repo-root", 1002)?.message.id, "ask-1");
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
test("active ask context does not trust sender names as destination identity", () => {
|
|
108
|
+
const tracker = new ReplyTracker();
|
|
109
|
+
const current = tracker.recordIncomingMessage(createSession("asker-session", "root-session"), createMessage("ask-1", "Need a reply"), 1000);
|
|
110
|
+
tracker.queueTurnContext(current);
|
|
111
|
+
tracker.beginTurn(1001);
|
|
112
|
+
|
|
113
|
+
assert.equal(tracker.findActiveReplyTargetMismatch("root-session", 1002)?.message.id, "ask-1");
|
|
114
|
+
});
|
|
115
|
+
|
|
96
116
|
test("replyTo resolves the exact pending ask", () => {
|
|
97
117
|
const tracker = new ReplyTracker();
|
|
98
118
|
tracker.recordIncomingMessage(createSession("planner-id", "planner"), createMessage("ask-1", "First"), 1000);
|
|
@@ -121,6 +121,14 @@ export class ReplyTracker {
|
|
|
121
121
|
return candidates.length === 1 ? candidates[0]! : null;
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
+
findActiveReplyTargetMismatch(to: string, now = Date.now()): IntercomContext | null {
|
|
125
|
+
this.pruneExpired(now);
|
|
126
|
+
if (!this.currentTurnContext?.message.expectsReply) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
return this.currentTurnContext.from.id === to ? null : this.currentTurnContext;
|
|
130
|
+
}
|
|
131
|
+
|
|
124
132
|
markReplied(replyTo: string): void {
|
|
125
133
|
this.dismissPendingAsk(replyTo);
|
|
126
134
|
}
|