@selesai/code 0.5.27 → 0.5.29
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/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +9 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/credential-print.d.ts +23 -0
- package/dist/cli/credential-print.d.ts.map +1 -0
- package/dist/cli/credential-print.js +117 -0
- package/dist/cli/credential-print.js.map +1 -0
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +1 -1
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +3 -0
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session.d.ts +12 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +20 -14
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +11 -3
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +1 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +11 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +14 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +10 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +1 -1
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/llama/provider.d.ts.map +1 -1
- package/dist/core/llama/provider.js +8 -3
- package/dist/core/llama/provider.js.map +1 -1
- package/dist/core/model-config.d.ts +30 -0
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +6 -0
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +2 -2
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +1 -0
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +20 -3
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +2 -0
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +5 -4
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +13 -6
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +24 -11
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resource-loader.d.ts +15 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +66 -9
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts +2 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +34 -5
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +3 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/extensions/pi-intercom/CHANGELOG.md +249 -0
- package/dist/extensions/pi-intercom/README.md +102 -39
- package/dist/extensions/pi-intercom/broker/broker.ts +1233 -36
- package/dist/extensions/pi-intercom/broker/client.test.ts +83 -0
- package/dist/extensions/pi-intercom/broker/client.ts +315 -12
- package/dist/extensions/pi-intercom/broker/extension-state.ts +186 -0
- package/dist/extensions/pi-intercom/broker/extension.test.ts +387 -0
- package/dist/extensions/pi-intercom/broker/framing.test.ts +114 -0
- package/dist/extensions/pi-intercom/broker/framing.ts +82 -24
- package/dist/extensions/pi-intercom/broker/paths.test.ts +153 -0
- package/dist/extensions/pi-intercom/broker/paths.ts +117 -8
- package/dist/extensions/pi-intercom/broker/runtime-claim.test.ts +34 -0
- package/dist/extensions/pi-intercom/broker/runtime-claim.ts +21 -0
- package/dist/extensions/pi-intercom/broker/spawn.test.ts +160 -23
- package/dist/extensions/pi-intercom/broker/spawn.ts +113 -27
- package/dist/extensions/pi-intercom/config.test.ts +93 -0
- package/dist/extensions/pi-intercom/config.ts +55 -6
- package/dist/extensions/pi-intercom/cwd.test.ts +40 -0
- package/dist/extensions/pi-intercom/cwd.ts +31 -0
- package/dist/extensions/pi-intercom/extension-api.ts +44 -0
- package/dist/extensions/pi-intercom/format-context.test.ts +31 -0
- package/dist/extensions/pi-intercom/format-context.ts +32 -0
- package/dist/extensions/pi-intercom/index.ts +742 -145
- package/dist/extensions/pi-intercom/intercom.integration.test.ts +2646 -0
- package/dist/extensions/pi-intercom/package.json +15 -5
- package/dist/extensions/pi-intercom/reply-tracker.test.ts +134 -0
- package/dist/extensions/pi-intercom/reply-tracker.ts +31 -13
- package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +13 -11
- package/dist/extensions/pi-intercom/test/inline-message.test.ts +184 -0
- package/dist/extensions/pi-intercom/test/overlay-width.test.ts +66 -0
- package/dist/extensions/pi-intercom/types.ts +94 -4
- package/dist/extensions/pi-intercom/ui/compose.ts +8 -4
- package/dist/extensions/pi-intercom/ui/inline-message.ts +61 -25
- package/dist/extensions/pi-intercom/ui/session-list.ts +7 -3
- package/dist/extensions/pi-subagents/CHANGELOG.md +85 -0
- package/dist/extensions/pi-subagents/LICENSE +21 -0
- package/dist/extensions/pi-subagents/README.md +146 -52
- package/dist/extensions/pi-subagents/agents/architect.md +1 -0
- package/dist/extensions/pi-subagents/agents/builder.md +1 -0
- package/dist/extensions/pi-subagents/package-lock.json +2 -2
- package/dist/extensions/pi-subagents/package.json +3 -3
- package/dist/extensions/pi-subagents/prompts/review-loop.md +1 -1
- package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +21 -989
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +256 -0
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +430 -0
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +144 -0
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +282 -0
- package/dist/extensions/pi-subagents/src/agents/agent-management.ts +71 -30
- package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +4 -0
- package/dist/extensions/pi-subagents/src/agents/agents.ts +118 -9
- package/dist/extensions/pi-subagents/src/agents/skills.ts +14 -12
- package/dist/extensions/pi-subagents/src/api/delegation.ts +3 -0
- package/dist/extensions/pi-subagents/src/api/preflight.ts +16 -12
- package/dist/extensions/pi-subagents/src/extension/chain-validation.ts +17 -1
- package/dist/extensions/pi-subagents/src/extension/index.ts +17 -7
- package/dist/extensions/pi-subagents/src/extension/rpc.ts +248 -6
- package/dist/extensions/pi-subagents/src/extension/schemas.ts +31 -6
- package/dist/extensions/pi-subagents/src/extension/tool-description.ts +8 -7
- package/dist/extensions/pi-subagents/src/intercom/intercom-bridge.ts +9 -4
- package/dist/extensions/pi-subagents/src/intercom/result-intercom.ts +33 -4
- package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +63 -16
- package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +24 -13
- package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +7 -5
- package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +18 -2
- package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +48 -5
- package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +68 -1
- package/dist/extensions/pi-subagents/src/runs/background/notify.ts +29 -4
- package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +29 -6
- package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +29 -3
- package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +372 -28
- package/dist/extensions/pi-subagents/src/runs/foreground/async-stop-action.ts +65 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/chain-clarify.ts +3 -3
- package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +143 -43
- package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +527 -247
- package/dist/extensions/pi-subagents/src/runs/foreground/foreground-control.ts +42 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +426 -123
- package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +15 -7
- package/dist/extensions/pi-subagents/src/runs/shared/capability-ceiling.ts +51 -19
- package/dist/extensions/pi-subagents/src/runs/shared/chain-outputs.ts +3 -1
- package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +44 -11
- package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +8 -0
- package/dist/extensions/pi-subagents/src/runs/shared/nested-events.ts +97 -20
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +43 -12
- package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +52 -4
- package/dist/extensions/pi-subagents/src/runs/shared/process-signal.ts +19 -0
- package/dist/extensions/pi-subagents/src/runs/shared/run-history.ts +45 -9
- package/dist/extensions/pi-subagents/src/runs/shared/runtime-acknowledged-extensions.ts +71 -0
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +31 -1
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-startup-retry.ts +101 -0
- package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/usage-budget.ts +65 -0
- package/dist/extensions/pi-subagents/src/runs/shared/workflow-graph.ts +26 -1
- package/dist/extensions/pi-subagents/src/shared/settings.ts +17 -1
- package/dist/extensions/pi-subagents/src/shared/types.ts +155 -10
- package/dist/extensions/pi-subagents/src/shared/utils.ts +73 -4
- package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +5 -0
- package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +46 -4
- package/dist/extensions/pi-subagents/src/slash/slash-live-state.ts +5 -3
- package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +87 -24
- package/dist/extensions/pi-subagents/src/tui/fleet.ts +182 -9
- package/dist/extensions/pi-subagents/src/tui/render.ts +27 -28
- package/dist/extensions/pi-subagents/src/watchdog/register-main.ts +14 -7
- package/dist/extensions/pi-subagents/src/watchdog/review.ts +5 -4
- package/dist/extensions/pi-subagents/src/watchdog/runtime.ts +170 -17
- package/dist/extensions/pi-subagents/src/watchdog/scope.ts +62 -0
- package/dist/extensions/pi-subagents/src/watchdog/settings.ts +41 -1
- package/dist/extensions/pi-subagents/src/watchdog/types.ts +10 -0
- package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +348 -7
- package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +84 -0
- package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +4 -2
- package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +51 -2
- package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +26 -1
- package/dist/extensions/pi-subagents/test/integration/detect-error.test.ts +48 -0
- package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +3 -3
- package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +213 -13
- package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +34 -0
- package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +44 -0
- package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +118 -12
- package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +850 -7
- package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +112 -23
- package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +17 -5
- package/dist/extensions/pi-subagents/test/support/mock-pi.ts +2 -0
- package/dist/extensions/pi-subagents/test/support/register-loader.mjs +3 -3
- package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +3 -1
- package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +128 -0
- package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +47 -2
- package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +60 -0
- package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +8 -0
- package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +102 -0
- package/dist/extensions/pi-subagents/test/unit/capability-ceiling.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/chain-append.test.ts +6 -0
- package/dist/extensions/pi-subagents/test/unit/chain-validation.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +48 -48
- package/dist/extensions/pi-subagents/test/unit/config-dir-runtime.test.ts +23 -0
- package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +27 -0
- package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +4 -2
- package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +1 -0
- package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +176 -8
- package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +164 -5
- package/dist/extensions/pi-subagents/test/unit/foreground-control.test.ts +41 -1
- package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +11 -11
- package/dist/extensions/pi-subagents/test/unit/intercom-bridge.test.ts +18 -2
- package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +20 -1
- package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +30 -2
- package/dist/extensions/pi-subagents/test/unit/notify.test.ts +10 -2
- package/dist/extensions/pi-subagents/test/unit/parallel-utils.test.ts +22 -0
- package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +103 -0
- package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +18 -0
- package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +46 -0
- package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +13 -1
- package/dist/extensions/pi-subagents/test/unit/result-intercom.test.ts +29 -4
- package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +223 -4
- package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +30 -0
- package/dist/extensions/pi-subagents/test/unit/runtime-acknowledged-extensions.test.ts +52 -0
- package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +34 -2
- package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/streamed-progress-bounds.test.ts +78 -0
- package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +41 -0
- package/dist/extensions/pi-subagents/test/unit/subagent-startup-retry.test.ts +77 -0
- package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +3 -0
- package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/total-cost.test.ts +1 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-runtime.test.ts +210 -1
- package/dist/extensions/pi-subagents/test/unit/watchdog-scope.test.ts +33 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-settings.test.ts +32 -0
- package/dist/extensions/pi-subagents/test/unit/writer-budget-guidance.test.ts +1 -1
- package/dist/extensions/question/index.ts +14 -1
- package/dist/extensions/question/tests/wizard.test.ts +11 -8
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +43 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts +3 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +10 -2
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts +1 -2
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +16 -46
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +4 -1
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +22 -13
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts +12 -0
- package/dist/modes/interactive/external-editor.d.ts.map +1 -0
- package/dist/modes/interactive/external-editor.js +37 -0
- package/dist/modes/interactive/external-editor.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +72 -64
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +14 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/skills/batch-grill-me/SKILL.md +3 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +19 -8
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +1 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/compaction.md +1 -1
- package/docs/custom-provider.md +14 -5
- package/docs/environment-variables.md +86 -0
- package/docs/extensions.md +15 -5
- package/docs/index.md +1 -0
- package/docs/models.md +9 -2
- package/docs/providers.md +21 -2
- package/docs/rpc.md +23 -6
- package/docs/session-format.md +2 -0
- package/docs/settings.md +1 -1
- package/docs/usage.md +0 -13
- package/examples/extensions/custom-compaction.ts +5 -2
- package/examples/extensions/custom-provider-anthropic/index.ts +9 -3
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/handoff.ts +11 -3
- package/examples/extensions/message-renderer.ts +3 -3
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/summarize.ts +5 -2
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/sdk/12-full-control.ts +3 -1
- package/package.json +15 -6
- package/dist/extensions/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
|
@@ -16,7 +16,7 @@ import { FooterDataProvider } from "../../core/footer-data-provider.js";
|
|
|
16
16
|
import { configureHttpDispatcher, formatHttpIdleTimeoutMs } from "../../core/http-dispatcher.js";
|
|
17
17
|
import { KeybindingsManager } from "../../core/keybindings.js";
|
|
18
18
|
import { createCompactionSummaryMessage } from "../../core/messages.js";
|
|
19
|
-
import { defaultModelPerProvider, findExactModelReferenceMatch, resolveModelScope } from "../../core/model-resolver.js";
|
|
19
|
+
import { defaultModelPerProvider, findExactModelReferenceMatch, resolveModelScope, resolveModelScopeWithDiagnostics, } from "../../core/model-resolver.js";
|
|
20
20
|
import { DefaultPackageManager } from "../../core/package-manager.js";
|
|
21
21
|
import { formatMissingSessionCwdPrompt, MissingSessionCwdError } from "../../core/session-cwd.js";
|
|
22
22
|
import { SessionManager, sessionEntryToContextMessages } from "../../core/session-manager.js";
|
|
@@ -65,6 +65,7 @@ import { TreeSelectorComponent } from "./components/tree-selector.js";
|
|
|
65
65
|
import { TrustSelectorComponent } from "./components/trust-selector.js";
|
|
66
66
|
import { UserMessageComponent } from "./components/user-message.js";
|
|
67
67
|
import { UserMessageSelectorComponent } from "./components/user-message-selector.js";
|
|
68
|
+
import { editInExternalEditor } from "./external-editor.js";
|
|
68
69
|
import { getModelSearchText } from "./model-search.js";
|
|
69
70
|
import { getAvailableThemes, getAvailableThemesWithPaths, getEditorTheme, getMarkdownTheme, getThemeByName, onThemeChange, setRegisteredThemes, stopThemeWatcher, Theme, theme, } from "./theme/theme.js";
|
|
70
71
|
import { InteractiveThemeController } from "./theme/theme-controller.js";
|
|
@@ -274,7 +275,7 @@ export class InteractiveMode {
|
|
|
274
275
|
await this.rebindCurrentSession({ renderBeforeBind: true });
|
|
275
276
|
});
|
|
276
277
|
this.version = VERSION;
|
|
277
|
-
this.ui = new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor());
|
|
278
|
+
this.ui = new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor(), getAgentDir());
|
|
278
279
|
this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());
|
|
279
280
|
this.headerContainer = new Container();
|
|
280
281
|
this.loadedResourcesContainer = new Container();
|
|
@@ -809,8 +810,15 @@ export class InteractiveMode {
|
|
|
809
810
|
* Get a short path relative to the package root for display.
|
|
810
811
|
*/
|
|
811
812
|
getShortPath(fullPath, sourceInfo) {
|
|
813
|
+
const normalizedFullPath = fullPath.replace(/\\/g, "/");
|
|
812
814
|
const baseDir = sourceInfo?.baseDir;
|
|
813
815
|
if (baseDir && this.isPackageSource(sourceInfo)) {
|
|
816
|
+
const normalizedBaseDir = baseDir.replace(/\\/g, "/");
|
|
817
|
+
const npmRootMatch = normalizedBaseDir.match(/^(.*\/node_modules)\/(@?[^/]+(?:\/[^/]+)?)$/);
|
|
818
|
+
// If fullPath is under the same node_modules root as baseDir, preserve that relative topology.
|
|
819
|
+
if (npmRootMatch?.[1] && normalizedFullPath.startsWith(`${npmRootMatch[1]}/`)) {
|
|
820
|
+
return path.posix.relative(normalizedBaseDir, normalizedFullPath);
|
|
821
|
+
}
|
|
814
822
|
const relativePath = path.relative(path.resolve(baseDir), path.resolve(fullPath));
|
|
815
823
|
if (relativePath &&
|
|
816
824
|
relativePath !== "." &&
|
|
@@ -821,11 +829,11 @@ export class InteractiveMode {
|
|
|
821
829
|
}
|
|
822
830
|
}
|
|
823
831
|
const source = sourceInfo?.source ?? "";
|
|
824
|
-
const npmMatch =
|
|
832
|
+
const npmMatch = normalizedFullPath.match(/node_modules\/(@?[^/]+(?:\/[^/]+)?)\/(.*)/);
|
|
825
833
|
if (npmMatch && source.startsWith("npm:")) {
|
|
826
834
|
return npmMatch[2];
|
|
827
835
|
}
|
|
828
|
-
const gitMatch =
|
|
836
|
+
const gitMatch = normalizedFullPath.match(/git\/[^/]+\/[^/]+\/(.*)/);
|
|
829
837
|
if (gitMatch && source.startsWith("git:")) {
|
|
830
838
|
return gitMatch[1];
|
|
831
839
|
}
|
|
@@ -1110,7 +1118,12 @@ export class InteractiveMode {
|
|
|
1110
1118
|
}
|
|
1111
1119
|
}
|
|
1112
1120
|
if (showListing) {
|
|
1113
|
-
const
|
|
1121
|
+
const systemPromptSource = this.session.resourceLoader.getSystemPromptSource();
|
|
1122
|
+
const contextFiles = [
|
|
1123
|
+
...(systemPromptSource ? [systemPromptSource] : []),
|
|
1124
|
+
...this.session.resourceLoader.getAppendSystemPromptSources(),
|
|
1125
|
+
...this.session.resourceLoader.getAgentsFiles().agentsFiles,
|
|
1126
|
+
];
|
|
1114
1127
|
if (contextFiles.length > 0) {
|
|
1115
1128
|
this.loadedResourcesContainer.addChild(new Spacer(1));
|
|
1116
1129
|
const contextList = contextFiles
|
|
@@ -1310,16 +1323,19 @@ export class InteractiveMode {
|
|
|
1310
1323
|
}
|
|
1311
1324
|
}
|
|
1312
1325
|
async rebindCurrentSession(options = {}) {
|
|
1326
|
+
const session = this.session;
|
|
1313
1327
|
this.unsubscribe?.();
|
|
1314
1328
|
this.unsubscribe = undefined;
|
|
1315
1329
|
this.applyRuntimeSettings();
|
|
1316
1330
|
if (options.renderBeforeBind) {
|
|
1317
1331
|
this.renderCurrentSessionState();
|
|
1318
1332
|
this.subscribeToAgent();
|
|
1319
|
-
await this.bindCurrentSessionExtensions();
|
|
1320
1333
|
}
|
|
1321
|
-
|
|
1322
|
-
|
|
1334
|
+
await this.bindCurrentSessionExtensions();
|
|
1335
|
+
if (this.session !== session) {
|
|
1336
|
+
return;
|
|
1337
|
+
}
|
|
1338
|
+
if (!options.renderBeforeBind) {
|
|
1323
1339
|
this.subscribeToAgent();
|
|
1324
1340
|
}
|
|
1325
1341
|
await this.updateAvailableProviderCount();
|
|
@@ -1365,6 +1381,8 @@ export class InteractiveMode {
|
|
|
1365
1381
|
sessionManager: this.sessionManager,
|
|
1366
1382
|
modelRegistry: extensionRunner.getModelRegistry(),
|
|
1367
1383
|
model: this.session.model,
|
|
1384
|
+
scopedModels: this.session.scopedModels,
|
|
1385
|
+
thinkingLevel: this.session.thinkingLevel,
|
|
1368
1386
|
isIdle: () => this.session.isIdle,
|
|
1369
1387
|
isProjectTrusted: () => this.settingsManager.isProjectTrusted(),
|
|
1370
1388
|
signal: this.session.agent.signal,
|
|
@@ -2050,7 +2068,7 @@ export class InteractiveMode {
|
|
|
2050
2068
|
this.defaultEditor.onAction("app.model.select", () => this.showModelSelector());
|
|
2051
2069
|
this.defaultEditor.onAction("app.tools.expand", () => this.toggleToolOutputExpansion());
|
|
2052
2070
|
this.defaultEditor.onAction("app.thinking.toggle", () => this.toggleThinkingBlockVisibility());
|
|
2053
|
-
this.defaultEditor.onAction("app.editor.external", () => this.
|
|
2071
|
+
this.defaultEditor.onAction("app.editor.external", () => void this.handleOpenExternalEditor());
|
|
2054
2072
|
this.defaultEditor.onAction("app.message.copy", () => void this.handleCopyCommand());
|
|
2055
2073
|
this.defaultEditor.onAction("app.message.followUp", () => this.handleFollowUp());
|
|
2056
2074
|
this.defaultEditor.onAction("app.message.dequeue", () => this.handleDequeue());
|
|
@@ -2460,6 +2478,9 @@ export class InteractiveMode {
|
|
|
2460
2478
|
}
|
|
2461
2479
|
this.ui.requestRender();
|
|
2462
2480
|
break;
|
|
2481
|
+
case "bash_execution_update":
|
|
2482
|
+
// The bash execution callback handles TUI output rendering.
|
|
2483
|
+
break;
|
|
2463
2484
|
case "tool_execution_start": {
|
|
2464
2485
|
let component = this.pendingTools.get(event.toolCallId);
|
|
2465
2486
|
if (!component) {
|
|
@@ -2671,7 +2692,7 @@ export class InteractiveMode {
|
|
|
2671
2692
|
case "custom": {
|
|
2672
2693
|
if (message.display) {
|
|
2673
2694
|
const renderer = this.session.extensionRunner.getMessageRenderer(message.customType);
|
|
2674
|
-
const component = new CustomMessageComponent(message, renderer, this.getMarkdownThemeWithSettings());
|
|
2695
|
+
const component = new CustomMessageComponent(message, renderer, this.getMarkdownThemeWithSettings(), this.outputPad);
|
|
2675
2696
|
component.setExpanded(this.toolOutputExpanded);
|
|
2676
2697
|
this.chatContainer.addChild(component);
|
|
2677
2698
|
}
|
|
@@ -3169,7 +3190,7 @@ export class InteractiveMode {
|
|
|
3169
3190
|
}
|
|
3170
3191
|
}
|
|
3171
3192
|
}
|
|
3172
|
-
this.
|
|
3193
|
+
this.showStatus(`Tool output: ${expanded ? "expanded" : "collapsed"}`);
|
|
3173
3194
|
}
|
|
3174
3195
|
toggleThinkingBlockVisibility() {
|
|
3175
3196
|
this.hideThinkingBlock = !this.hideThinkingBlock;
|
|
@@ -3185,51 +3206,21 @@ export class InteractiveMode {
|
|
|
3185
3206
|
}
|
|
3186
3207
|
this.showStatus(`Thinking blocks: ${this.hideThinkingBlock ? "hidden" : "visible"}`);
|
|
3187
3208
|
}
|
|
3188
|
-
async
|
|
3209
|
+
async handleOpenExternalEditor() {
|
|
3189
3210
|
const editorCmd = this.settingsManager.getExternalEditorCommand();
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
return;
|
|
3193
|
-
}
|
|
3194
|
-
const currentText = this.editor.getExpandedText?.() ?? this.editor.getText();
|
|
3195
|
-
const tmpFile = path.join(os.tmpdir(), `pi-editor-${Date.now()}.pi.md`);
|
|
3211
|
+
const content = this.editor.getExpandedText?.() ?? this.editor.getText();
|
|
3212
|
+
this.ui.stop();
|
|
3196
3213
|
try {
|
|
3197
|
-
|
|
3198
|
-
|
|
3199
|
-
|
|
3200
|
-
this.ui.stop();
|
|
3201
|
-
// Split by space to support editor arguments (e.g., "code --wait")
|
|
3202
|
-
const [editor, ...editorArgs] = editorCmd.split(" ");
|
|
3203
|
-
process.stdout.write(`Launching external editor: ${editorCmd}\nPi will resume when the editor exits.\n`);
|
|
3204
|
-
// Do not use spawnSync here. On Windows, synchronous child_process calls can keep
|
|
3205
|
-
// Node/libuv's console input read active after ui.stop() pauses stdin, racing
|
|
3206
|
-
// vim/nvim for the console input buffer until Ctrl+C cancels the pending read.
|
|
3207
|
-
const status = await new Promise((resolve) => {
|
|
3208
|
-
const child = spawn(editor, [...editorArgs, tmpFile], {
|
|
3209
|
-
stdio: "inherit",
|
|
3210
|
-
shell: process.platform === "win32",
|
|
3211
|
-
});
|
|
3212
|
-
child.on("error", () => resolve(null));
|
|
3213
|
-
child.on("close", (code) => resolve(code));
|
|
3214
|
+
const result = await editInExternalEditor({
|
|
3215
|
+
command: editorCmd,
|
|
3216
|
+
content,
|
|
3214
3217
|
});
|
|
3215
|
-
|
|
3216
|
-
|
|
3217
|
-
const newContent = fs.readFileSync(tmpFile, "utf-8").replace(/\n$/, "");
|
|
3218
|
-
this.editor.setText(newContent);
|
|
3218
|
+
if (result.status === "complete") {
|
|
3219
|
+
this.editor.setText(result.content);
|
|
3219
3220
|
}
|
|
3220
|
-
// On non-zero exit, keep original text (no action needed)
|
|
3221
3221
|
}
|
|
3222
3222
|
finally {
|
|
3223
|
-
// Clean up temp file
|
|
3224
|
-
try {
|
|
3225
|
-
fs.unlinkSync(tmpFile);
|
|
3226
|
-
}
|
|
3227
|
-
catch {
|
|
3228
|
-
// Ignore cleanup errors
|
|
3229
|
-
}
|
|
3230
|
-
// Restart TUI
|
|
3231
3223
|
this.ui.start();
|
|
3232
|
-
// Force full re-render since external editor uses alternate screen
|
|
3233
3224
|
this.ui.requestRender(true);
|
|
3234
3225
|
}
|
|
3235
3226
|
}
|
|
@@ -3607,7 +3598,9 @@ export class InteractiveMode {
|
|
|
3607
3598
|
this.outputPad = padding;
|
|
3608
3599
|
if (this.streamingComponent || this.session.isStreaming) {
|
|
3609
3600
|
for (const child of this.chatContainer.children) {
|
|
3610
|
-
if (child instanceof AssistantMessageComponent ||
|
|
3601
|
+
if (child instanceof AssistantMessageComponent ||
|
|
3602
|
+
child instanceof CustomMessageComponent ||
|
|
3603
|
+
child instanceof UserMessageComponent) {
|
|
3611
3604
|
child.setOutputPad(padding);
|
|
3612
3605
|
}
|
|
3613
3606
|
}
|
|
@@ -3792,12 +3785,17 @@ export class InteractiveMode {
|
|
|
3792
3785
|
// Get all available models
|
|
3793
3786
|
await this.session.modelRuntime.refresh();
|
|
3794
3787
|
const allModels = [...(await this.session.modelRuntime.getAvailable())];
|
|
3795
|
-
|
|
3788
|
+
const allModelIds = new Set(allModels.map((model) => `${model.provider}/${model.id}`));
|
|
3789
|
+
const configuredPatterns = this.settingsManager.getEnabledModels();
|
|
3790
|
+
const sessionScopedModels = this.session.scopedModels;
|
|
3791
|
+
if (allModels.length === 0 && !configuredPatterns?.length && sessionScopedModels.length === 0) {
|
|
3796
3792
|
this.showStatus("No models available");
|
|
3797
3793
|
return;
|
|
3798
3794
|
}
|
|
3795
|
+
const configuredScope = configuredPatterns?.length
|
|
3796
|
+
? await resolveModelScopeWithDiagnostics(configuredPatterns, this.session.modelRuntime)
|
|
3797
|
+
: undefined;
|
|
3799
3798
|
// Check if session has scoped models (from previous session-only changes or CLI --models)
|
|
3800
|
-
const sessionScopedModels = this.session.scopedModels;
|
|
3801
3799
|
const hasSessionScope = sessionScopedModels.length > 0;
|
|
3802
3800
|
// Build enabled model IDs from session state or settings
|
|
3803
3801
|
let currentEnabledIds = null;
|
|
@@ -3805,18 +3803,22 @@ export class InteractiveMode {
|
|
|
3805
3803
|
// Use current session's scoped models
|
|
3806
3804
|
currentEnabledIds = sessionScopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);
|
|
3807
3805
|
}
|
|
3808
|
-
else {
|
|
3809
|
-
|
|
3810
|
-
|
|
3811
|
-
|
|
3812
|
-
|
|
3813
|
-
|
|
3814
|
-
|
|
3806
|
+
else if (configuredScope) {
|
|
3807
|
+
currentEnabledIds = configuredScope.scopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);
|
|
3808
|
+
}
|
|
3809
|
+
for (const diagnostic of configuredScope?.diagnostics ?? []) {
|
|
3810
|
+
if (diagnostic.code !== "no-match")
|
|
3811
|
+
continue;
|
|
3812
|
+
currentEnabledIds ??= [];
|
|
3813
|
+
if (!currentEnabledIds.includes(diagnostic.pattern))
|
|
3814
|
+
currentEnabledIds.push(diagnostic.pattern);
|
|
3815
3815
|
}
|
|
3816
3816
|
// Helper to update session's scoped models (session-only, no persist)
|
|
3817
3817
|
const updateSessionModels = async (enabledIds) => {
|
|
3818
3818
|
currentEnabledIds = enabledIds === null ? null : [...enabledIds];
|
|
3819
|
-
|
|
3819
|
+
const hasEnabledAvailableModel = enabledIds?.some((id) => allModelIds.has(id)) ?? false;
|
|
3820
|
+
const allAvailableModelsEnabled = enabledIds !== null && [...allModelIds].every((id) => enabledIds.includes(id));
|
|
3821
|
+
if (enabledIds && hasEnabledAvailableModel && !allAvailableModelsEnabled) {
|
|
3820
3822
|
const newScopedModels = await resolveModelScope(enabledIds, this.session.modelRuntime);
|
|
3821
3823
|
this.session.setScopedModels(newScopedModels.map((sm) => ({
|
|
3822
3824
|
model: sm.model,
|
|
@@ -3840,9 +3842,10 @@ export class InteractiveMode {
|
|
|
3840
3842
|
},
|
|
3841
3843
|
onPersist: (enabledIds) => {
|
|
3842
3844
|
// Persist to settings
|
|
3843
|
-
const
|
|
3844
|
-
|
|
3845
|
-
|
|
3845
|
+
const allEnabled = enabledIds !== null &&
|
|
3846
|
+
enabledIds.length === allModels.length &&
|
|
3847
|
+
enabledIds.every((id) => allModelIds.has(id));
|
|
3848
|
+
const newPatterns = enabledIds === null || allEnabled ? undefined : enabledIds;
|
|
3846
3849
|
this.settingsManager.setEnabledModels(newPatterns ? [...newPatterns] : undefined);
|
|
3847
3850
|
this.showStatus("Model selection saved to settings");
|
|
3848
3851
|
},
|
|
@@ -3913,7 +3916,7 @@ export class InteractiveMode {
|
|
|
3913
3916
|
this.showSelector((done) => {
|
|
3914
3917
|
const selector = new TreeSelectorComponent(tree, realLeafId, this.ui.terminal.rows, async (entryId) => {
|
|
3915
3918
|
// Selecting the current leaf is a no-op (already there)
|
|
3916
|
-
if (entryId ===
|
|
3919
|
+
if (entryId === this.sessionManager.getLeafId()) {
|
|
3917
3920
|
done();
|
|
3918
3921
|
this.showStatus("Already at this point");
|
|
3919
3922
|
return;
|
|
@@ -3948,6 +3951,11 @@ export class InteractiveMode {
|
|
|
3948
3951
|
break;
|
|
3949
3952
|
}
|
|
3950
3953
|
}
|
|
3954
|
+
// The user committed to navigating: stop the active response first.
|
|
3955
|
+
if (this.session.isStreaming) {
|
|
3956
|
+
this.restoreQueuedMessagesToEditor();
|
|
3957
|
+
await this.session.abort();
|
|
3958
|
+
}
|
|
3951
3959
|
// Set up escape handler and status indicator if summarizing
|
|
3952
3960
|
let showingSummaryIndicator = false;
|
|
3953
3961
|
const originalOnEscape = this.defaultEditor.onEscape;
|