@caupulican/pi-adaptative 0.81.42 → 0.81.43
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 +37 -0
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/register-bedrock.d.ts.map +1 -1
- package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
- package/dist/bun/restore-sandbox-env.js.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js +52 -49
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.ts +62 -57
- package/dist/bundled-resources/prompts/skillify.md +1 -1
- package/dist/bundled-resources/runtimes/pi-shell-engine/commands/fs.py +16 -19
- package/dist/bundled-resources/runtimes/pi-shell-engine/commands/search.py +12 -26
- package/dist/bundled-resources/runtimes/pi-shell-engine/commands/strings.py +15 -121
- package/dist/bundled-resources/runtimes/pi-shell-engine/commands/text.py +52 -79
- package/dist/bundled-resources/runtimes/pi-shell-engine/escapes.py +70 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/exec.py +110 -61
- package/dist/bundled-resources/runtimes/pi-shell-engine/main.py +106 -23
- package/dist/bundled-resources/runtimes/pi-shell-engine/paths.py +10 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/proc.py +12 -4
- package/dist/bundled-resources/runtimes/pi-shell-engine/shell_args.py +22 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/state.py +9 -2
- package/dist/bundled-resources/runtimes/pi-shell-engine/tokens.py +129 -259
- package/dist/bundled-resources/skills/authorized-web-security-audit/SKILL.md +187 -0
- package/dist/bundled-resources/skills/authorized-web-security-audit/references/assessment-contract.md +92 -0
- package/dist/bundled-resources/skills/deduplicate-by-evidence/SKILL.md +134 -0
- package/dist/bundled-resources/skills/evidence-gated-tdd/SKILL.md +93 -0
- package/dist/bundled-resources/skills/evidence-gated-tdd/references/evidence-model.md +27 -0
- package/dist/bundled-resources/skills/evidence-gated-tdd/references/security-scanners.md +24 -0
- package/dist/bundled-resources/skills/harness-self-adaptation/SKILL.md +4 -2
- package/dist/bundled-resources/skills/secure-agent-tool-surfaces/SKILL.md +217 -0
- package/dist/bundled-resources/skills/secure-agent-tool-surfaces/references/defensive-exploit-catalogue.md +175 -0
- package/dist/bundled-resources/skills/secure-agent-tool-surfaces/references/tool-boundary-checklist.md +87 -0
- package/dist/bundled-resources/skills/skill-architect/SKILL.md +2 -2
- package/dist/bundled-resources/skills/skill-creator/SKILL.md +188 -0
- package/dist/bundled-resources/skills/skill-creator/references/pi-skill-contract.md +73 -0
- package/dist/bundled-resources/skills/skill-creator/scripts/init-skill.mjs +142 -0
- package/dist/bundled-resources/skills/skill-creator/scripts/validate-skill.mjs +122 -0
- package/dist/cli/args.d.ts.map +1 -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.map +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +8 -8
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/initial-message.d.ts +1 -1
- package/dist/cli/initial-message.d.ts.map +1 -1
- package/dist/cli/initial-message.js.map +1 -1
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/piped-stdin.d.ts +4 -0
- package/dist/cli/piped-stdin.d.ts.map +1 -0
- package/dist/cli/piped-stdin.js +13 -0
- package/dist/cli/piped-stdin.js.map +1 -0
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -14
- package/dist/config.js.map +1 -1
- package/dist/core/agent-directory-layout.d.ts.map +1 -1
- package/dist/core/agent-directory-layout.js.map +1 -1
- package/dist/core/agent-paths.d.ts.map +1 -1
- package/dist/core/agent-paths.js.map +1 -1
- package/dist/core/agent-session-contracts.d.ts +5 -9
- package/dist/core/agent-session-contracts.d.ts.map +1 -1
- package/dist/core/agent-session-contracts.js +1 -12
- package/dist/core/agent-session-contracts.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +10 -25
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +24 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +210 -237
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-guidance.d.ts.map +1 -1
- package/dist/core/auth-guidance.js.map +1 -1
- package/dist/core/auth-storage.d.ts +4 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +13 -39
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/autonomy/approval-gate.d.ts.map +1 -1
- package/dist/core/autonomy/approval-gate.js.map +1 -1
- package/dist/core/autonomy/bounded-completion.d.ts.map +1 -1
- package/dist/core/autonomy/bounded-completion.js.map +1 -1
- package/dist/core/autonomy/contracts.d.ts.map +1 -1
- package/dist/core/autonomy/envelope-enforcement.d.ts.map +1 -1
- package/dist/core/autonomy/envelope-enforcement.js.map +1 -1
- package/dist/core/autonomy/evidence-finding-projection.d.ts +11 -0
- package/dist/core/autonomy/evidence-finding-projection.d.ts.map +1 -0
- package/dist/core/autonomy/evidence-finding-projection.js +37 -0
- package/dist/core/autonomy/evidence-finding-projection.js.map +1 -0
- package/dist/core/autonomy/foreground-envelope.d.ts.map +1 -1
- package/dist/core/autonomy/foreground-envelope.js.map +1 -1
- package/dist/core/autonomy/gates.d.ts.map +1 -1
- package/dist/core/autonomy/gates.js.map +1 -1
- package/dist/core/autonomy/lane-private-paths.d.ts.map +1 -1
- package/dist/core/autonomy/lane-private-paths.js.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
- package/dist/core/autonomy/lane-tracker.d.ts.map +1 -1
- package/dist/core/autonomy/lane-tracker.js +2 -3
- package/dist/core/autonomy/lane-tracker.js.map +1 -1
- package/dist/core/autonomy/path-scope.d.ts.map +1 -1
- package/dist/core/autonomy/path-scope.js.map +1 -1
- package/dist/core/autonomy/risk-assessment.d.ts.map +1 -1
- package/dist/core/autonomy/session-lane-record.d.ts.map +1 -1
- package/dist/core/autonomy/session-lane-record.js.map +1 -1
- package/dist/core/autonomy/status.d.ts.map +1 -1
- package/dist/core/autonomy/status.js.map +1 -1
- package/dist/core/autonomy/subagent-prompt.d.ts.map +1 -1
- package/dist/core/autonomy/subagent-prompt.js.map +1 -1
- package/dist/core/autonomy/telemetry-events.d.ts.map +1 -1
- package/dist/core/autonomy/telemetry-events.js.map +1 -1
- package/dist/core/autonomy-telemetry.d.ts.map +1 -1
- package/dist/core/autonomy-telemetry.js +2 -4
- package/dist/core/autonomy-telemetry.js.map +1 -1
- package/dist/core/background-lane-controller.d.ts.map +1 -1
- package/dist/core/background-lane-controller.js +2 -15
- package/dist/core/background-lane-controller.js.map +1 -1
- package/dist/core/background-tool-task-controller.d.ts +88 -0
- package/dist/core/background-tool-task-controller.d.ts.map +1 -0
- package/dist/core/background-tool-task-controller.js +470 -0
- package/dist/core/background-tool-task-controller.js.map +1 -0
- package/dist/core/bash-execution-controller.d.ts +1 -0
- package/dist/core/bash-execution-controller.d.ts.map +1 -1
- package/dist/core/bash-execution-controller.js +5 -4
- package/dist/core/bash-execution-controller.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/bedrock-sso-login.d.ts.map +1 -1
- package/dist/core/bedrock-sso-login.js.map +1 -1
- package/dist/core/billing-failover-controller.d.ts.map +1 -1
- package/dist/core/billing-failover-controller.js +3 -3
- package/dist/core/billing-failover-controller.js.map +1 -1
- package/dist/core/billing-failover.d.ts.map +1 -1
- package/dist/core/billing-failover.js.map +1 -1
- package/dist/core/capability-contract.d.ts.map +1 -1
- package/dist/core/catalog-manager.d.ts.map +1 -1
- package/dist/core/catalog-manager.js +0 -0
- package/dist/core/catalog-manager.js.map +1 -1
- package/dist/core/compaction-controller.d.ts +2 -0
- package/dist/core/compaction-controller.d.ts.map +1 -1
- package/dist/core/compaction-controller.js +21 -8
- package/dist/core/compaction-controller.js.map +1 -1
- package/dist/core/compaction-support.d.ts +8 -0
- package/dist/core/compaction-support.d.ts.map +1 -1
- package/dist/core/compaction-support.js +0 -2
- package/dist/core/compaction-support.js.map +1 -1
- package/dist/core/context/artifact-retrieval.d.ts.map +1 -1
- package/dist/core/context/artifact-retrieval.js.map +1 -1
- package/dist/core/context/brain-curator.d.ts.map +1 -1
- package/dist/core/context/brain-curator.js +14 -33
- package/dist/core/context/brain-curator.js.map +1 -1
- package/dist/core/context/context-artifacts.d.ts.map +1 -1
- package/dist/core/context/context-artifacts.js +16 -24
- package/dist/core/context/context-artifacts.js.map +1 -1
- package/dist/core/context/context-audit.d.ts.map +1 -1
- package/dist/core/context/context-audit.js +3 -17
- package/dist/core/context/context-audit.js.map +1 -1
- package/dist/core/context/context-composition.d.ts.map +1 -1
- package/dist/core/context/context-composition.js.map +1 -1
- package/dist/core/context/context-item.d.ts.map +1 -1
- package/dist/core/context/context-item.js.map +1 -1
- package/dist/core/context/context-prompt-enforcement.d.ts.map +1 -1
- package/dist/core/context/context-prompt-enforcement.js +3 -16
- package/dist/core/context/context-prompt-enforcement.js.map +1 -1
- package/dist/core/context/context-prompt-policy.d.ts.map +1 -1
- package/dist/core/context/context-prompt-policy.js.map +1 -1
- package/dist/core/context/context-retention.d.ts.map +1 -1
- package/dist/core/context/context-retention.js.map +1 -1
- package/dist/core/context/context-store-retention.d.ts.map +1 -1
- package/dist/core/context/context-store-retention.js.map +1 -1
- package/dist/core/context/context-store.d.ts.map +1 -1
- package/dist/core/context/context-store.js.map +1 -1
- package/dist/core/context/context-tool-result.d.ts +4 -0
- package/dist/core/context/context-tool-result.d.ts.map +1 -0
- package/dist/core/context/context-tool-result.js +15 -0
- package/dist/core/context/context-tool-result.js.map +1 -0
- package/dist/core/context/current-work-memory.d.ts.map +1 -1
- package/dist/core/context/current-work-memory.js.map +1 -1
- package/dist/core/context/file-store-memory-provider.d.ts.map +1 -1
- package/dist/core/context/file-store-memory-provider.js +7 -28
- package/dist/core/context/file-store-memory-provider.js.map +1 -1
- package/dist/core/context/local-memory-search.d.ts +11 -0
- package/dist/core/context/local-memory-search.d.ts.map +1 -0
- package/dist/core/context/local-memory-search.js +37 -0
- package/dist/core/context/local-memory-search.js.map +1 -0
- package/dist/core/context/long-term-memory-trigger.d.ts.map +1 -1
- package/dist/core/context/long-term-memory-trigger.js.map +1 -1
- package/dist/core/context/memory-diagnostics.d.ts.map +1 -1
- package/dist/core/context/memory-diagnostics.js.map +1 -1
- package/dist/core/context/memory-index-store.d.ts.map +1 -1
- package/dist/core/context/memory-index-store.js.map +1 -1
- package/dist/core/context/memory-prompt-block.d.ts.map +1 -1
- package/dist/core/context/memory-prompt-block.js.map +1 -1
- package/dist/core/context/memory-prompt-budget.d.ts.map +1 -1
- package/dist/core/context/memory-prompt-budget.js.map +1 -1
- package/dist/core/context/memory-provider-contract.d.ts.map +1 -1
- package/dist/core/context/memory-provider-contract.js.map +1 -1
- package/dist/core/context/memory-retrieval.d.ts.map +1 -1
- package/dist/core/context/memory-retrieval.js.map +1 -1
- package/dist/core/context/memory-tier-composer.d.ts.map +1 -1
- package/dist/core/context/memory-tier-composer.js.map +1 -1
- package/dist/core/context/message-text.d.ts +7 -0
- package/dist/core/context/message-text.d.ts.map +1 -0
- package/dist/core/context/message-text.js +68 -0
- package/dist/core/context/message-text.js.map +1 -0
- package/dist/core/context/okf-memory-provider.d.ts.map +1 -1
- package/dist/core/context/okf-memory-provider.js +4 -30
- package/dist/core/context/okf-memory-provider.js.map +1 -1
- package/dist/core/context/okf-memory.d.ts.map +1 -1
- package/dist/core/context/okf-memory.js.map +1 -1
- package/dist/core/context/policy-engine.d.ts.map +1 -1
- package/dist/core/context/policy-engine.js.map +1 -1
- package/dist/core/context/policy-types.d.ts.map +1 -1
- package/dist/core/context/sqlite-runtime-index.d.ts.map +1 -1
- package/dist/core/context/sqlite-runtime-index.js.map +1 -1
- package/dist/core/context/storage-authority.d.ts.map +1 -1
- package/dist/core/context/tool-output-packer.d.ts.map +1 -1
- package/dist/core/context/tool-output-packer.js.map +1 -1
- package/dist/core/context-gc.d.ts.map +1 -1
- package/dist/core/context-gc.js +14 -21
- package/dist/core/context-gc.js.map +1 -1
- package/dist/core/context-pipeline.d.ts +1 -3
- package/dist/core/context-pipeline.d.ts.map +1 -1
- package/dist/core/context-pipeline.js +64 -145
- package/dist/core/context-pipeline.js.map +1 -1
- package/dist/core/cost/cost-summary.d.ts.map +1 -1
- package/dist/core/cost/cost-summary.js.map +1 -1
- package/dist/core/cost/daily-usage.d.ts.map +1 -1
- package/dist/core/cost/daily-usage.js.map +1 -1
- package/dist/core/cost/session-usage.d.ts.map +1 -1
- package/dist/core/cost/session-usage.js.map +1 -1
- package/dist/core/cost-guard.d.ts.map +1 -1
- package/dist/core/cost-guard.js.map +1 -1
- package/dist/core/default-tool-surface.d.ts.map +1 -1
- package/dist/core/default-tool-surface.js +1 -0
- package/dist/core/default-tool-surface.js.map +1 -1
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/delegation/managed-lane-controller.d.ts.map +1 -1
- package/dist/core/delegation/managed-lane-controller.js +2 -6
- package/dist/core/delegation/managed-lane-controller.js.map +1 -1
- package/dist/core/delegation/session-worker-claim.d.ts.map +1 -1
- package/dist/core/delegation/session-worker-claim.js.map +1 -1
- package/dist/core/delegation/worker-action-journal.d.ts.map +1 -1
- package/dist/core/delegation/worker-action-journal.js +0 -4
- package/dist/core/delegation/worker-action-journal.js.map +1 -1
- package/dist/core/delegation/worker-actions.d.ts.map +1 -1
- package/dist/core/delegation/worker-actions.js.map +1 -1
- package/dist/core/delegation/worker-agent-control-coordinator.d.ts +1 -0
- package/dist/core/delegation/worker-agent-control-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-agent-control-coordinator.js +13 -15
- package/dist/core/delegation/worker-agent-control-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-agent-control.d.ts.map +1 -1
- package/dist/core/delegation/worker-agent-control.js +1 -4
- package/dist/core/delegation/worker-agent-control.js.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.js.map +1 -1
- package/dist/core/delegation/worker-claim.d.ts.map +1 -1
- package/dist/core/delegation/worker-claim.js.map +1 -1
- package/dist/core/delegation/worker-conversation-store.d.ts.map +1 -1
- package/dist/core/delegation/worker-conversation-store.js +0 -2
- package/dist/core/delegation/worker-conversation-store.js.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.js +5 -14
- package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
- package/dist/core/delegation/worker-delegation-request.d.ts.map +1 -1
- package/dist/core/delegation/worker-dispatch-scheduler.d.ts.map +1 -1
- package/dist/core/delegation/worker-dispatch-scheduler.js +5 -6
- package/dist/core/delegation/worker-dispatch-scheduler.js.map +1 -1
- package/dist/core/delegation/worker-execution-policy.d.ts.map +1 -1
- package/dist/core/delegation/worker-execution-policy.js.map +1 -1
- package/dist/core/delegation/worker-lane-projection.d.ts.map +1 -1
- package/dist/core/delegation/worker-lane-projection.js.map +1 -1
- package/dist/core/delegation/worker-lifecycle.d.ts.map +1 -1
- package/dist/core/delegation/worker-lifecycle.js +0 -3
- package/dist/core/delegation/worker-lifecycle.js.map +1 -1
- package/dist/core/delegation/worker-notification-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-notification-coordinator.js +4 -5
- package/dist/core/delegation/worker-notification-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-process-owner.d.ts.map +1 -1
- package/dist/core/delegation/worker-process-owner.js.map +1 -1
- package/dist/core/delegation/worker-profile-resolver.d.ts.map +1 -1
- package/dist/core/delegation/worker-profile-resolver.js +1 -2
- package/dist/core/delegation/worker-profile-resolver.js.map +1 -1
- package/dist/core/delegation/worker-recovery-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-recovery-coordinator.js +3 -4
- package/dist/core/delegation/worker-recovery-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-resource-catalog.d.ts.map +1 -1
- package/dist/core/delegation/worker-resource-catalog.js.map +1 -1
- package/dist/core/delegation/worker-resource-materializer.d.ts.map +1 -1
- package/dist/core/delegation/worker-resource-materializer.js +1 -4
- package/dist/core/delegation/worker-resource-materializer.js.map +1 -1
- package/dist/core/delegation/worker-runner.d.ts +2 -4
- package/dist/core/delegation/worker-runner.d.ts.map +1 -1
- package/dist/core/delegation/worker-runner.js +6 -18
- package/dist/core/delegation/worker-runner.js.map +1 -1
- package/dist/core/delegation/worker-task-label.d.ts.map +1 -1
- package/dist/core/delegation/worker-task-label.js.map +1 -1
- package/dist/core/delegation/worker-terminal-finalizer.d.ts.map +1 -1
- package/dist/core/delegation/worker-terminal-finalizer.js.map +1 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.js +1 -4
- package/dist/core/delegation/worker-write-reservation-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-write-reservation.d.ts.map +1 -1
- package/dist/core/delegation/worker-write-reservation.js +0 -2
- package/dist/core/delegation/worker-write-reservation.js.map +1 -1
- package/dist/core/diagnostics.d.ts.map +1 -1
- package/dist/core/doctor.d.ts.map +1 -1
- package/dist/core/doctor.js.map +1 -1
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js +26 -7
- package/dist/core/exec.js.map +1 -1
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/dist/core/export-html/ansi-to-html.js +21 -74
- package/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +4 -0
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/session-tree-foundations.d.mts +67 -0
- package/dist/core/export-html/session-tree-foundations.mjs +313 -0
- package/dist/core/export-html/template.css +14 -41
- package/dist/core/export-html/template.html +3 -1
- package/dist/core/export-html/template.js +26 -435
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extension-import-authority.d.ts.map +1 -1
- package/dist/core/extension-import-authority.js.map +1 -1
- package/dist/core/extension-metadata.d.ts.map +1 -1
- package/dist/core/extension-metadata.js.map +1 -1
- package/dist/core/extensions/builtin.d.ts +17 -0
- package/dist/core/extensions/builtin.d.ts.map +1 -1
- package/dist/core/extensions/builtin.js +18 -54
- package/dist/core/extensions/builtin.js.map +1 -1
- package/dist/core/extensions/entry-resolution.d.ts +3 -0
- package/dist/core/extensions/entry-resolution.d.ts.map +1 -0
- package/dist/core/extensions/entry-resolution.js +17 -0
- package/dist/core/extensions/entry-resolution.js.map +1 -0
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +76 -21
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +2 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +41 -112
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/stale-context.d.ts.map +1 -1
- package/dist/core/extensions/storage.d.ts.map +1 -1
- package/dist/core/extensions/storage.js.map +1 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/failure-corpus.d.ts.map +1 -1
- package/dist/core/failure-corpus.js +2 -5
- package/dist/core/failure-corpus.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +27 -33
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/foreground-recovery-controller.d.ts.map +1 -1
- package/dist/core/foreground-recovery-controller.js +0 -4
- package/dist/core/foreground-recovery-controller.js.map +1 -1
- package/dist/core/gateways/channel-provider.d.ts.map +1 -1
- package/dist/core/gateways/channel-provider.js +7 -5
- package/dist/core/gateways/channel-provider.js.map +1 -1
- package/dist/core/goal-loop-controller.d.ts.map +1 -1
- package/dist/core/goal-loop-controller.js +0 -1
- package/dist/core/goal-loop-controller.js.map +1 -1
- package/dist/core/goals/compact-goal-context.d.ts.map +1 -1
- package/dist/core/goals/compact-goal-context.js +2 -4
- package/dist/core/goals/compact-goal-context.js.map +1 -1
- package/dist/core/goals/goal-acceptance.d.ts.map +1 -1
- package/dist/core/goals/goal-acceptance.js.map +1 -1
- package/dist/core/goals/goal-auto-continue-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-auto-continue-controller.js +1 -3
- package/dist/core/goals/goal-auto-continue-controller.js.map +1 -1
- package/dist/core/goals/goal-continuation-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-continuation-controller.js.map +1 -1
- package/dist/core/goals/goal-continuation-defaults.d.ts.map +1 -1
- package/dist/core/goals/goal-continuation-prompt.d.ts.map +1 -1
- package/dist/core/goals/goal-continuation-prompt.js.map +1 -1
- package/dist/core/goals/goal-lifecycle.d.ts.map +1 -1
- package/dist/core/goals/goal-lifecycle.js.map +1 -1
- package/dist/core/goals/goal-record.d.ts.map +1 -1
- package/dist/core/goals/goal-record.js.map +1 -1
- package/dist/core/goals/goal-runtime-snapshot.d.ts.map +1 -1
- package/dist/core/goals/goal-runtime-snapshot.js.map +1 -1
- package/dist/core/goals/goal-session-controller.d.ts +15 -0
- package/dist/core/goals/goal-session-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-session-controller.js +27 -3
- package/dist/core/goals/goal-session-controller.js.map +1 -1
- package/dist/core/goals/goal-state.d.ts.map +1 -1
- package/dist/core/goals/goal-state.js +35 -51
- package/dist/core/goals/goal-state.js.map +1 -1
- package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
- package/dist/core/goals/goal-tool-core.js.map +1 -1
- package/dist/core/goals/natural-language-goal.d.ts +9 -0
- package/dist/core/goals/natural-language-goal.d.ts.map +1 -0
- package/dist/core/goals/natural-language-goal.js +23 -0
- package/dist/core/goals/natural-language-goal.js.map +1 -0
- package/dist/core/goals/session-goal-state.d.ts.map +1 -1
- package/dist/core/goals/session-goal-state.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/human-input-controller.d.ts.map +1 -1
- package/dist/core/human-input-controller.js +2 -3
- package/dist/core/human-input-controller.js.map +1 -1
- package/dist/core/human-input.d.ts.map +1 -1
- package/dist/core/human-input.js.map +1 -1
- package/dist/core/improvement-loop.d.ts.map +1 -1
- package/dist/core/improvement-loop.js +11 -11
- package/dist/core/improvement-loop.js.map +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/install-telemetry.d.ts.map +1 -1
- package/dist/core/install-telemetry.js.map +1 -1
- package/dist/core/isolated-text-completion.d.ts +17 -0
- package/dist/core/isolated-text-completion.d.ts.map +1 -0
- package/dist/core/isolated-text-completion.js +15 -0
- package/dist/core/isolated-text-completion.js.map +1 -0
- package/dist/core/keybindings.d.ts +47 -2
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +12 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/learning/learning-audit.d.ts.map +1 -1
- package/dist/core/learning/learning-audit.js.map +1 -1
- package/dist/core/learning/learning-gate.d.ts.map +1 -1
- package/dist/core/learning/learning-gate.js.map +1 -1
- package/dist/core/learning/observation-store.d.ts.map +1 -1
- package/dist/core/learning/observation-store.js +0 -2
- package/dist/core/learning/observation-store.js.map +1 -1
- package/dist/core/learning/reflection-engine.d.ts +1 -1
- package/dist/core/learning/reflection-engine.d.ts.map +1 -1
- package/dist/core/learning/reflection-engine.js +3 -0
- package/dist/core/learning/reflection-engine.js.map +1 -1
- package/dist/core/learning/reflection-turn-analysis.d.ts +20 -0
- package/dist/core/learning/reflection-turn-analysis.d.ts.map +1 -0
- package/dist/core/learning/reflection-turn-analysis.js +136 -0
- package/dist/core/learning/reflection-turn-analysis.js.map +1 -0
- package/dist/core/learning/session-learning-decision.d.ts.map +1 -1
- package/dist/core/learning/session-learning-decision.js.map +1 -1
- package/dist/core/learning/skill-curator.d.ts.map +1 -1
- package/dist/core/learning/skill-curator.js +0 -3
- package/dist/core/learning/skill-curator.js.map +1 -1
- package/dist/core/local-runtime-controller.d.ts +39 -0
- package/dist/core/local-runtime-controller.d.ts.map +1 -1
- package/dist/core/local-runtime-controller.js +41 -62
- package/dist/core/local-runtime-controller.js.map +1 -1
- package/dist/core/memory/effectiveness-tracker.d.ts.map +1 -1
- package/dist/core/memory/effectiveness-tracker.js +4 -2
- package/dist/core/memory/effectiveness-tracker.js.map +1 -1
- package/dist/core/memory/memory-manager.d.ts.map +1 -1
- package/dist/core/memory/memory-manager.js +7 -7
- package/dist/core/memory/memory-manager.js.map +1 -1
- package/dist/core/memory/memory-provider.d.ts.map +1 -1
- package/dist/core/memory/providers/file-store.d.ts +7 -0
- package/dist/core/memory/providers/file-store.d.ts.map +1 -1
- package/dist/core/memory/providers/file-store.js +48 -13
- package/dist/core/memory/providers/file-store.js.map +1 -1
- package/dist/core/memory/providers/transcript-recall-worker-protocol.d.ts +47 -0
- package/dist/core/memory/providers/transcript-recall-worker-protocol.d.ts.map +1 -0
- package/dist/core/memory/providers/transcript-recall-worker-protocol.js +50 -0
- package/dist/core/memory/providers/transcript-recall-worker-protocol.js.map +1 -0
- package/dist/core/memory/providers/transcript-recall-worker.d.ts +2 -0
- package/dist/core/memory/providers/transcript-recall-worker.d.ts.map +1 -0
- package/dist/core/memory/providers/transcript-recall-worker.js +143 -0
- package/dist/core/memory/providers/transcript-recall-worker.js.map +1 -0
- package/dist/core/memory/providers/transcript-recall.d.ts +24 -13
- package/dist/core/memory/providers/transcript-recall.d.ts.map +1 -1
- package/dist/core/memory/providers/transcript-recall.js +143 -141
- package/dist/core/memory/providers/transcript-recall.js.map +1 -1
- package/dist/core/memory/providers/user-memory-archive.d.ts +39 -0
- package/dist/core/memory/providers/user-memory-archive.d.ts.map +1 -0
- package/dist/core/memory/providers/user-memory-archive.js +258 -0
- package/dist/core/memory/providers/user-memory-archive.js.map +1 -0
- package/dist/core/memory/transcript-index.d.ts.map +1 -1
- package/dist/core/memory/transcript-index.js +1 -1
- package/dist/core/memory/transcript-index.js.map +1 -1
- package/dist/core/memory-controller.d.ts +9 -0
- package/dist/core/memory-controller.d.ts.map +1 -1
- package/dist/core/memory-controller.js +57 -16
- package/dist/core/memory-controller.js.map +1 -1
- package/dist/core/model-capability.d.ts.map +1 -1
- package/dist/core/model-capability.js.map +1 -1
- package/dist/core/model-output-json.d.ts +10 -0
- package/dist/core/model-output-json.d.ts.map +1 -0
- package/dist/core/model-output-json.js +43 -0
- package/dist/core/model-output-json.js.map +1 -0
- package/dist/core/model-registry.d.ts +8 -8
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +29 -52
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-router/config-diagnostics.d.ts.map +1 -1
- package/dist/core/model-router/config-diagnostics.js.map +1 -1
- package/dist/core/model-router/executor-route.d.ts.map +1 -1
- package/dist/core/model-router/executor-route.js.map +1 -1
- package/dist/core/model-router/fitness-gate.d.ts.map +1 -1
- package/dist/core/model-router/fitness-gate.js.map +1 -1
- package/dist/core/model-router/intent-classifier.d.ts.map +1 -1
- package/dist/core/model-router/route-judge.d.ts.map +1 -1
- package/dist/core/model-router/route-judge.js +18 -36
- package/dist/core/model-router/route-judge.js.map +1 -1
- package/dist/core/model-router/session-buffer.d.ts.map +1 -1
- package/dist/core/model-router/session-buffer.js.map +1 -1
- package/dist/core/model-router/status.d.ts.map +1 -1
- package/dist/core/model-router/status.js.map +1 -1
- package/dist/core/model-router/tool-escalation.d.ts.map +1 -1
- package/dist/core/model-router/tool-escalation.js.map +1 -1
- package/dist/core/model-router-controller.d.ts +1 -0
- package/dist/core/model-router-controller.d.ts.map +1 -1
- package/dist/core/model-router-controller.js +25 -56
- package/dist/core/model-router-controller.js.map +1 -1
- package/dist/core/model-selection-controller.d.ts +10 -0
- package/dist/core/model-selection-controller.d.ts.map +1 -1
- package/dist/core/model-selection-controller.js +0 -1
- package/dist/core/model-selection-controller.js.map +1 -1
- package/dist/core/model-tool-protocol.d.ts.map +1 -1
- package/dist/core/model-tool-protocol.js.map +1 -1
- package/dist/core/models/adaptation-store.d.ts.map +1 -1
- package/dist/core/models/adaptation-store.js +0 -1
- package/dist/core/models/adaptation-store.js.map +1 -1
- package/dist/core/models/context-sizing.d.ts.map +1 -1
- package/dist/core/models/context-sizing.js.map +1 -1
- package/dist/core/models/default-model-suggestions.d.ts.map +1 -1
- package/dist/core/models/default-model-suggestions.js.map +1 -1
- package/dist/core/models/fitness-store.d.ts.map +1 -1
- package/dist/core/models/fitness-store.js +0 -1
- package/dist/core/models/fitness-store.js.map +1 -1
- package/dist/core/models/host-state-store.d.ts.map +1 -1
- package/dist/core/models/host-state-store.js +1 -6
- package/dist/core/models/host-state-store.js.map +1 -1
- package/dist/core/models/llamacpp-runtime.d.ts +4 -19
- package/dist/core/models/llamacpp-runtime.d.ts.map +1 -1
- package/dist/core/models/llamacpp-runtime.js +32 -136
- package/dist/core/models/llamacpp-runtime.js.map +1 -1
- package/dist/core/models/local-registration.d.ts.map +1 -1
- package/dist/core/models/local-registration.js +82 -115
- package/dist/core/models/local-registration.js.map +1 -1
- package/dist/core/models/local-runtime.d.ts +12 -18
- package/dist/core/models/local-runtime.d.ts.map +1 -1
- package/dist/core/models/local-runtime.js +60 -204
- package/dist/core/models/local-runtime.js.map +1 -1
- package/dist/core/models/model-endpoint.d.ts.map +1 -1
- package/dist/core/models/model-endpoint.js.map +1 -1
- package/dist/core/models/model-ref.d.ts.map +1 -1
- package/dist/core/models/model-ref.js.map +1 -1
- package/dist/core/models/needle-runtime.d.ts +7 -3
- package/dist/core/models/needle-runtime.d.ts.map +1 -1
- package/dist/core/models/needle-runtime.js +16 -92
- package/dist/core/models/needle-runtime.js.map +1 -1
- package/dist/core/models/perf-profile.d.ts +1 -1
- package/dist/core/models/perf-profile.d.ts.map +1 -1
- package/dist/core/models/perf-profile.js +6 -13
- package/dist/core/models/perf-profile.js.map +1 -1
- package/dist/core/models/prism-llamacpp-lifecycle.d.ts.map +1 -1
- package/dist/core/models/prism-llamacpp-lifecycle.js.map +1 -1
- package/dist/core/models/runtime-arbiter.d.ts.map +1 -1
- package/dist/core/models/runtime-arbiter.js +3 -15
- package/dist/core/models/runtime-arbiter.js.map +1 -1
- package/dist/core/models/runtime-process.d.ts +100 -0
- package/dist/core/models/runtime-process.d.ts.map +1 -0
- package/dist/core/models/runtime-process.js +183 -0
- package/dist/core/models/runtime-process.js.map +1 -0
- package/dist/core/orchestration/agent-resume.d.ts.map +1 -1
- package/dist/core/orchestration/agent-resume.js.map +1 -1
- package/dist/core/orchestration/attempt-usage.d.ts.map +1 -1
- package/dist/core/orchestration/attempt-usage.js.map +1 -1
- package/dist/core/orchestration/capability-gateway.d.ts.map +1 -1
- package/dist/core/orchestration/capability-gateway.js +0 -14
- package/dist/core/orchestration/capability-gateway.js.map +1 -1
- package/dist/core/orchestration/contracts.d.ts.map +1 -1
- package/dist/core/orchestration/contracts.js.map +1 -1
- package/dist/core/orchestration/delegation-ledger.d.ts.map +1 -1
- package/dist/core/orchestration/delegation-ledger.js +0 -2
- package/dist/core/orchestration/delegation-ledger.js.map +1 -1
- package/dist/core/orchestration/event-store.d.ts.map +1 -1
- package/dist/core/orchestration/event-store.js +1 -14
- package/dist/core/orchestration/event-store.js.map +1 -1
- package/dist/core/orchestration/lane-tool-manifests.d.ts.map +1 -1
- package/dist/core/orchestration/lane-tool-manifests.js.map +1 -1
- package/dist/core/orchestration/model-binding.d.ts.map +1 -1
- package/dist/core/orchestration/model-binding.js.map +1 -1
- package/dist/core/orchestration/policy-compiler.d.ts.map +1 -1
- package/dist/core/orchestration/policy-compiler.js +0 -3
- package/dist/core/orchestration/policy-compiler.js.map +1 -1
- package/dist/core/orchestration/policy-gate.d.ts.map +1 -1
- package/dist/core/orchestration/policy-gate.js +0 -2
- package/dist/core/orchestration/policy-gate.js.map +1 -1
- package/dist/core/orchestration/profile-registry.d.ts.map +1 -1
- package/dist/core/orchestration/profile-registry.js +1 -1
- package/dist/core/orchestration/profile-registry.js.map +1 -1
- package/dist/core/orchestration/profile-store.d.ts.map +1 -1
- package/dist/core/orchestration/profile-store.js +0 -3
- package/dist/core/orchestration/profile-store.js.map +1 -1
- package/dist/core/orchestration/risk-budget.d.ts.map +1 -1
- package/dist/core/orchestration/risk-budget.js.map +1 -1
- package/dist/core/orchestration/task-runtime.d.ts +1 -0
- package/dist/core/orchestration/task-runtime.d.ts.map +1 -1
- package/dist/core/orchestration/task-runtime.js +27 -42
- package/dist/core/orchestration/task-runtime.js.map +1 -1
- package/dist/core/orchestration/work-state-projection.d.ts.map +1 -1
- package/dist/core/orchestration/work-state-projection.js.map +1 -1
- package/dist/core/orchestration/worker-execution-contract.d.ts.map +1 -1
- package/dist/core/orchestration/worker-execution-contract.js.map +1 -1
- package/dist/core/orchestration/worker-result-adapter.d.ts.map +1 -1
- package/dist/core/orchestration/worker-result-adapter.js.map +1 -1
- package/dist/core/output-guard.d.ts.map +1 -1
- package/dist/core/output-guard.js.map +1 -1
- package/dist/core/package-manager.d.ts +3 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +88 -353
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/process-identity.d.ts.map +1 -1
- package/dist/core/process-identity.js.map +1 -1
- package/dist/core/process-liveness.d.ts +3 -0
- package/dist/core/process-liveness.d.ts.map +1 -0
- package/dist/core/process-liveness.js +17 -0
- package/dist/core/process-liveness.js.map +1 -0
- package/dist/core/process-matrix/codes.d.ts.map +1 -1
- package/dist/core/process-matrix/resume-launcher.d.ts.map +1 -1
- package/dist/core/process-matrix/resume-launcher.js.map +1 -1
- package/dist/core/process-matrix/runtime.d.ts.map +1 -1
- package/dist/core/process-matrix/runtime.js.map +1 -1
- package/dist/core/process-matrix/store.d.ts.map +1 -1
- package/dist/core/process-matrix/store.js.map +1 -1
- package/dist/core/process-matrix/supervisor.d.ts.map +1 -1
- package/dist/core/process-matrix/supervisor.js.map +1 -1
- package/dist/core/profile-filter-controller.d.ts.map +1 -1
- package/dist/core/profile-filter-controller.js +7 -8
- package/dist/core/profile-filter-controller.js.map +1 -1
- package/dist/core/profile-registry.d.ts.map +1 -1
- package/dist/core/profile-registry.js +1 -2
- package/dist/core/profile-registry.js.map +1 -1
- package/dist/core/profile-resource-selection.d.ts.map +1 -1
- package/dist/core/profile-resource-selection.js +18 -59
- package/dist/core/profile-resource-selection.js.map +1 -1
- package/dist/core/prompt-markup.d.ts +3 -0
- package/dist/core/prompt-markup.d.ts.map +1 -0
- package/dist/core/prompt-markup.js +7 -0
- package/dist/core/prompt-markup.js.map +1 -0
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +13 -39
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/python-runtime.d.ts.map +1 -1
- package/dist/core/python-runtime.js.map +1 -1
- package/dist/core/reflection-controller.d.ts +22 -1
- package/dist/core/reflection-controller.d.ts.map +1 -1
- package/dist/core/reflection-controller.js +143 -25
- package/dist/core/reflection-controller.js.map +1 -1
- package/dist/core/reload-blockers.d.ts +2 -1
- package/dist/core/reload-blockers.d.ts.map +1 -1
- package/dist/core/reload-blockers.js +4 -14
- package/dist/core/reload-blockers.js.map +1 -1
- package/dist/core/request-auth.d.ts.map +1 -1
- package/dist/core/request-auth.js.map +1 -1
- package/dist/core/research/automata-provider.d.ts.map +1 -1
- package/dist/core/research/automata-provider.js.map +1 -1
- package/dist/core/research/evidence-bundle.d.ts.map +1 -1
- package/dist/core/research/evidence-bundle.js.map +1 -1
- package/dist/core/research/lane-model-resolver.d.ts.map +1 -1
- package/dist/core/research/lane-model-resolver.js +0 -1
- package/dist/core/research/lane-model-resolver.js.map +1 -1
- package/dist/core/research/model-fitness-controller.d.ts.map +1 -1
- package/dist/core/research/model-fitness-controller.js +17 -33
- package/dist/core/research/model-fitness-controller.js.map +1 -1
- package/dist/core/research/model-fitness.d.ts.map +1 -1
- package/dist/core/research/model-fitness.js +4 -25
- package/dist/core/research/model-fitness.js.map +1 -1
- package/dist/core/research/research-gate.d.ts.map +1 -1
- package/dist/core/research/research-gate.js.map +1 -1
- package/dist/core/research/research-lane-controller.d.ts.map +1 -1
- package/dist/core/research/research-lane-controller.js +5 -10
- package/dist/core/research/research-lane-controller.js.map +1 -1
- package/dist/core/research/research-runner.d.ts +2 -4
- package/dist/core/research/research-runner.d.ts.map +1 -1
- package/dist/core/research/research-runner.js +17 -48
- package/dist/core/research/research-runner.js.map +1 -1
- package/dist/core/research/session-evidence-bundle.d.ts.map +1 -1
- package/dist/core/research/session-evidence-bundle.js.map +1 -1
- package/dist/core/research/workspace-collector.d.ts.map +1 -1
- package/dist/core/research/workspace-collector.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/resource-ignore.d.ts +6 -0
- package/dist/core/resource-ignore.d.ts.map +1 -0
- package/dist/core/resource-ignore.js +44 -0
- package/dist/core/resource-ignore.js.map +1 -0
- package/dist/core/resource-loader.d.ts +0 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +52 -187
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/resource-profile-blocks.d.ts +3 -1
- package/dist/core/resource-profile-blocks.d.ts.map +1 -1
- package/dist/core/resource-profile-blocks.js +8 -5
- package/dist/core/resource-profile-blocks.js.map +1 -1
- package/dist/core/resource-profile-equality.d.ts.map +1 -1
- package/dist/core/resource-profile-equality.js.map +1 -1
- package/dist/core/resource-traversal.d.ts +43 -0
- package/dist/core/resource-traversal.d.ts.map +1 -0
- package/dist/core/resource-traversal.js +84 -0
- package/dist/core/resource-traversal.js.map +1 -0
- package/dist/core/risk-classifier.d.ts.map +1 -1
- package/dist/core/risk-classifier.js.map +1 -1
- package/dist/core/runtime-builder.d.ts +4 -1
- package/dist/core/runtime-builder.d.ts.map +1 -1
- package/dist/core/runtime-builder.js +25 -50
- package/dist/core/runtime-builder.js.map +1 -1
- package/dist/core/scout-controller.d.ts.map +1 -1
- package/dist/core/scout-controller.js +0 -1
- package/dist/core/scout-controller.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/secrets/credential-exposure-guard.d.ts.map +1 -1
- package/dist/core/secrets/credential-exposure-guard.js +70 -44
- package/dist/core/secrets/credential-exposure-guard.js.map +1 -1
- package/dist/core/secrets/secret-dotenv.d.ts.map +1 -1
- package/dist/core/secrets/secret-dotenv.js +0 -1
- package/dist/core/secrets/secret-dotenv.js.map +1 -1
- package/dist/core/secrets/secret-vault-format.d.ts.map +1 -1
- package/dist/core/secrets/secret-vault-format.js +0 -1
- package/dist/core/secrets/secret-vault-format.js.map +1 -1
- package/dist/core/secrets/secret-vault.d.ts.map +1 -1
- package/dist/core/secrets/secret-vault.js +2 -10
- package/dist/core/secrets/secret-vault.js.map +1 -1
- package/dist/core/security/secret-text.d.ts.map +1 -1
- package/dist/core/security/secret-text.js.map +1 -1
- package/dist/core/security/untrusted-boundary.d.ts.map +1 -1
- package/dist/core/security/untrusted-boundary.js.map +1 -1
- package/dist/core/session-analytics.d.ts.map +1 -1
- package/dist/core/session-analytics.js +18 -50
- package/dist/core/session-analytics.js.map +1 -1
- package/dist/core/session-artifact-bundle.d.ts.map +1 -1
- package/dist/core/session-artifact-bundle.js.map +1 -1
- package/dist/core/session-cwd.d.ts.map +1 -1
- package/dist/core/session-cwd.js +0 -1
- package/dist/core/session-cwd.js.map +1 -1
- package/dist/core/session-entry-index.d.ts +8 -0
- package/dist/core/session-entry-index.d.ts.map +1 -0
- package/dist/core/session-entry-index.js +16 -0
- package/dist/core/session-entry-index.js.map +1 -0
- package/dist/core/session-image-store.d.ts.map +1 -1
- package/dist/core/session-image-store.js +0 -3
- package/dist/core/session-image-store.js.map +1 -1
- package/dist/core/session-jsonl-writer.d.ts +3 -0
- package/dist/core/session-jsonl-writer.d.ts.map +1 -0
- package/dist/core/session-jsonl-writer.js +38 -0
- package/dist/core/session-jsonl-writer.js.map +1 -0
- package/dist/core/session-manager-factory.d.ts.map +1 -1
- package/dist/core/session-manager-factory.js.map +1 -1
- package/dist/core/session-role.d.ts.map +1 -1
- package/dist/core/session-role.js.map +1 -1
- package/dist/core/session-snapshot.d.ts.map +1 -1
- package/dist/core/session-snapshot.js.map +1 -1
- package/dist/core/session-supervision-runtime.d.ts.map +1 -1
- package/dist/core/session-supervision-runtime.js +1 -4
- package/dist/core/session-supervision-runtime.js.map +1 -1
- package/dist/core/session-tree-navigator.d.ts.map +1 -1
- package/dist/core/session-tree-navigator.js +0 -1
- package/dist/core/session-tree-navigator.js.map +1 -1
- package/dist/core/settings-manager.d.ts +2 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +64 -162
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skill-block.d.mts +8 -0
- package/dist/core/skill-block.mjs +52 -0
- package/dist/core/skill-discovery.d.ts +5 -0
- package/dist/core/skill-discovery.d.ts.map +1 -0
- package/dist/core/skill-discovery.js +34 -0
- package/dist/core/skill-discovery.js.map +1 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +23 -159
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/source-info.d.ts.map +1 -1
- package/dist/core/source-info.js.map +1 -1
- package/dist/core/spawned-usage.d.ts +21 -0
- package/dist/core/spawned-usage.d.ts.map +1 -0
- package/dist/core/spawned-usage.js +29 -0
- package/dist/core/spawned-usage.js.map +1 -0
- package/dist/core/system-prompt-builder.d.ts +4 -0
- package/dist/core/system-prompt-builder.d.ts.map +1 -1
- package/dist/core/system-prompt-builder.js +15 -8
- package/dist/core/system-prompt-builder.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +52 -35
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tasks/session-task-state.d.ts.map +1 -1
- package/dist/core/tasks/session-task-state.js.map +1 -1
- package/dist/core/tasks/task-command.d.ts.map +1 -1
- package/dist/core/tasks/task-command.js.map +1 -1
- package/dist/core/tasks/task-contract-monitor.d.ts.map +1 -1
- package/dist/core/tasks/task-contract-monitor.js.map +1 -1
- package/dist/core/tasks/task-projection.d.ts.map +1 -1
- package/dist/core/tasks/task-projection.js.map +1 -1
- package/dist/core/tasks/task-state.d.ts.map +1 -1
- package/dist/core/tasks/task-state.js.map +1 -1
- package/dist/core/text-preview.d.ts +4 -0
- package/dist/core/text-preview.d.ts.map +1 -0
- package/dist/core/text-preview.js +33 -0
- package/dist/core/text-preview.js.map +1 -0
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tool-capability-policy.d.ts.map +1 -1
- package/dist/core/tool-capability-policy.js.map +1 -1
- package/dist/core/tool-gate-controller.d.ts.map +1 -1
- package/dist/core/tool-gate-controller.js +86 -87
- package/dist/core/tool-gate-controller.js.map +1 -1
- package/dist/core/tool-protocol-controller.d.ts +4 -1
- package/dist/core/tool-protocol-controller.d.ts.map +1 -1
- package/dist/core/tool-protocol-controller.js +19 -23
- package/dist/core/tool-protocol-controller.js.map +1 -1
- package/dist/core/tool-recovery-log-records.d.ts.map +1 -1
- package/dist/core/tool-recovery-log-records.js.map +1 -1
- package/dist/core/tool-recovery-log-worker.d.ts.map +1 -1
- package/dist/core/tool-recovery-log-worker.js.map +1 -1
- package/dist/core/tool-recovery-logger.d.ts.map +1 -1
- package/dist/core/tool-recovery-logger.js +12 -24
- package/dist/core/tool-recovery-logger.js.map +1 -1
- package/dist/core/tool-recovery-stats.d.ts.map +1 -1
- package/dist/core/tool-recovery-stats.js +16 -22
- package/dist/core/tool-recovery-stats.js.map +1 -1
- package/dist/core/tool-repair-health.d.ts.map +1 -1
- package/dist/core/tool-repair-health.js.map +1 -1
- package/dist/core/tool-repair-settings.d.ts.map +1 -1
- package/dist/core/tool-repair-settings.js.map +1 -1
- package/dist/core/tool-selection/expected-utility.d.ts.map +1 -1
- package/dist/core/tool-selection/expected-utility.js.map +1 -1
- package/dist/core/tool-selection/promotion.d.ts.map +1 -1
- package/dist/core/tool-selection/promotion.js.map +1 -1
- package/dist/core/tool-selection/tool-performance-store.d.ts +2 -0
- package/dist/core/tool-selection/tool-performance-store.d.ts.map +1 -1
- package/dist/core/tool-selection/tool-performance-store.js +49 -7
- package/dist/core/tool-selection/tool-performance-store.js.map +1 -1
- package/dist/core/tool-selection/tool-phase-timing.d.ts +19 -0
- package/dist/core/tool-selection/tool-phase-timing.d.ts.map +1 -0
- package/dist/core/tool-selection/tool-phase-timing.js +63 -0
- package/dist/core/tool-selection/tool-phase-timing.js.map +1 -0
- package/dist/core/tool-selection/tool-selection-controller.d.ts +2 -5
- package/dist/core/tool-selection/tool-selection-controller.d.ts.map +1 -1
- package/dist/core/tool-selection/tool-selection-controller.js +50 -30
- package/dist/core/tool-selection/tool-selection-controller.js.map +1 -1
- package/dist/core/toolkit/reflex-interpreter.d.ts +16 -0
- package/dist/core/toolkit/reflex-interpreter.d.ts.map +1 -1
- package/dist/core/toolkit/reflex-interpreter.js +21 -0
- package/dist/core/toolkit/reflex-interpreter.js.map +1 -1
- package/dist/core/toolkit/script-registry.d.ts.map +1 -1
- package/dist/core/toolkit/script-registry.js.map +1 -1
- package/dist/core/toolkit/script-runner.d.ts.map +1 -1
- package/dist/core/toolkit/script-runner.js.map +1 -1
- package/dist/core/tools/artifact-retrieve.d.ts.map +1 -1
- package/dist/core/tools/artifact-retrieve.js.map +1 -1
- package/dist/core/tools/ask-question.d.ts +2 -3
- package/dist/core/tools/ask-question.d.ts.map +1 -1
- package/dist/core/tools/ask-question.js +14 -40
- package/dist/core/tools/ask-question.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 +83 -30
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/context-scout.d.ts.map +1 -1
- package/dist/core/tools/context-scout.js.map +1 -1
- package/dist/core/tools/delegate-status.d.ts.map +1 -1
- package/dist/core/tools/delegate-status.js +9 -7
- package/dist/core/tools/delegate-status.js.map +1 -1
- package/dist/core/tools/delegate.d.ts.map +1 -1
- package/dist/core/tools/delegate.js +6 -6
- package/dist/core/tools/delegate.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/extensionify.d.ts.map +1 -1
- package/dist/core/tools/extensionify.js.map +1 -1
- package/dist/core/tools/fff-search-backend.d.ts +19 -0
- package/dist/core/tools/fff-search-backend.d.ts.map +1 -1
- package/dist/core/tools/fff-search-backend.js +28 -2
- package/dist/core/tools/fff-search-backend.js.map +1 -1
- package/dist/core/tools/file-encoding-policy.d.ts.map +1 -1
- package/dist/core/tools/file-encoding-policy.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/find.d.ts +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +44 -108
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/git-filter.d.ts.map +1 -1
- package/dist/core/tools/git-filter.js.map +1 -1
- package/dist/core/tools/goal.d.ts.map +1 -1
- package/dist/core/tools/goal.js +7 -7
- package/dist/core/tools/goal.js.map +1 -1
- package/dist/core/tools/grep.d.ts +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +42 -102
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +20 -36
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/model-fitness.d.ts.map +1 -1
- package/dist/core/tools/model-fitness.js.map +1 -1
- package/dist/core/tools/orchestration-panel.d.ts +5 -0
- package/dist/core/tools/orchestration-panel.d.ts.map +1 -1
- package/dist/core/tools/orchestration-panel.js +5 -5
- package/dist/core/tools/orchestration-panel.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +2 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +24 -36
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/path-utils.d.ts.map +1 -1
- package/dist/core/tools/path-utils.js.map +1 -1
- package/dist/core/tools/persistent-process-coordinator.d.ts +31 -0
- package/dist/core/tools/persistent-process-coordinator.d.ts.map +1 -0
- package/dist/core/tools/persistent-process-coordinator.js +123 -0
- package/dist/core/tools/persistent-process-coordinator.js.map +1 -0
- package/dist/core/tools/python.d.ts.map +1 -1
- package/dist/core/tools/python.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +14 -13
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +29 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +31 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/run-process.d.ts.map +1 -1
- package/dist/core/tools/run-process.js.map +1 -1
- package/dist/core/tools/run-toolkit-script.d.ts.map +1 -1
- package/dist/core/tools/run-toolkit-script.js.map +1 -1
- package/dist/core/tools/search-command-guard.d.ts +10 -0
- package/dist/core/tools/search-command-guard.d.ts.map +1 -1
- package/dist/core/tools/search-command-guard.js +118 -31
- package/dist/core/tools/search-command-guard.js.map +1 -1
- package/dist/core/tools/search-router.d.ts.map +1 -1
- package/dist/core/tools/search-router.js.map +1 -1
- package/dist/core/tools/search-tool-runtime.d.ts +19 -0
- package/dist/core/tools/search-tool-runtime.d.ts.map +1 -0
- package/dist/core/tools/search-tool-runtime.js +12 -0
- package/dist/core/tools/search-tool-runtime.js.map +1 -0
- package/dist/core/tools/secret-store.d.ts.map +1 -1
- package/dist/core/tools/secret-store.js.map +1 -1
- package/dist/core/tools/shell-command-parser.d.ts.map +1 -1
- package/dist/core/tools/shell-command-parser.js.map +1 -1
- package/dist/core/tools/shell-contract-router.d.ts.map +1 -1
- package/dist/core/tools/shell-contract-router.js +4 -1
- package/dist/core/tools/shell-contract-router.js.map +1 -1
- package/dist/core/tools/shell-execution-session.d.ts +4 -0
- package/dist/core/tools/shell-execution-session.d.ts.map +1 -0
- package/dist/core/tools/shell-execution-session.js +11 -0
- package/dist/core/tools/shell-execution-session.js.map +1 -0
- package/dist/core/tools/shell-output-projection.d.ts +49 -0
- package/dist/core/tools/shell-output-projection.d.ts.map +1 -0
- package/dist/core/tools/shell-output-projection.js +381 -0
- package/dist/core/tools/shell-output-projection.js.map +1 -0
- package/dist/core/tools/shell-session.d.ts +2 -13
- package/dist/core/tools/shell-session.d.ts.map +1 -1
- package/dist/core/tools/shell-session.js +36 -136
- package/dist/core/tools/shell-session.js.map +1 -1
- package/dist/core/tools/skill-audit.d.ts.map +1 -1
- package/dist/core/tools/skill-audit.js.map +1 -1
- package/dist/core/tools/skillify.d.ts.map +1 -1
- package/dist/core/tools/skillify.js.map +1 -1
- package/dist/core/tools/task-steps.d.ts +8 -8
- package/dist/core/tools/task-steps.d.ts.map +1 -1
- package/dist/core/tools/task-steps.js +17 -18
- package/dist/core/tools/task-steps.js.map +1 -1
- package/dist/core/tools/tmux-dispatch.d.ts.map +1 -1
- package/dist/core/tools/tmux-dispatch.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/tool-task.d.ts +23 -0
- package/dist/core/tools/tool-task.d.ts.map +1 -0
- package/dist/core/tools/tool-task.js +93 -0
- package/dist/core/tools/tool-task.js.map +1 -0
- package/dist/core/tools/windows-shell-engine.d.ts +17 -11
- package/dist/core/tools/windows-shell-engine.d.ts.map +1 -1
- package/dist/core/tools/windows-shell-engine.js +339 -117
- package/dist/core/tools/windows-shell-engine.js.map +1 -1
- package/dist/core/tools/windows-shell-state.d.ts.map +1 -1
- package/dist/core/tools/windows-shell-state.js.map +1 -1
- package/dist/core/tools/worktree-sync.d.ts.map +1 -1
- package/dist/core/tools/worktree-sync.js +8 -12
- package/dist/core/tools/worktree-sync.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +0 -1
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +7 -40
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/core/util/atomic-file.d.ts +19 -0
- package/dist/core/util/atomic-file.d.ts.map +1 -1
- package/dist/core/util/atomic-file.js +50 -15
- package/dist/core/util/atomic-file.js.map +1 -1
- package/dist/core/util/bounded-file.d.ts.map +1 -1
- package/dist/core/util/bounded-file.js.map +1 -1
- package/dist/core/util/bounded-jsonl.d.ts.map +1 -1
- package/dist/core/util/bounded-jsonl.js +2 -9
- package/dist/core/util/bounded-jsonl.js.map +1 -1
- package/dist/core/util/bounded-value.d.ts.map +1 -1
- package/dist/core/util/bounded-value.js.map +1 -1
- package/dist/core/util/json-size.d.ts +3 -0
- package/dist/core/util/json-size.d.ts.map +1 -0
- package/dist/core/util/json-size.js +95 -0
- package/dist/core/util/json-size.js.map +1 -0
- package/dist/core/util/minimatch-cache.d.ts.map +1 -1
- package/dist/core/util/minimatch-cache.js.map +1 -1
- package/dist/core/util/value-guards.d.ts.map +1 -1
- package/dist/core/util/value-guards.js.map +1 -1
- package/dist/core/worktree-sync/codes.d.ts.map +1 -1
- package/dist/core/worktree-sync/git-engine.d.ts.map +1 -1
- package/dist/core/worktree-sync/git-engine.js +20 -36
- package/dist/core/worktree-sync/git-engine.js.map +1 -1
- package/dist/core/worktree-sync/lane-gate.d.ts.map +1 -1
- package/dist/core/worktree-sync/lane-gate.js +1 -4
- package/dist/core/worktree-sync/lane-gate.js.map +1 -1
- package/dist/core/worktree-sync/runtime.d.ts.map +1 -1
- package/dist/core/worktree-sync/runtime.js.map +1 -1
- package/dist/core/worktree-sync/store.d.ts.map +1 -1
- package/dist/core/worktree-sync/store.js.map +1 -1
- package/dist/core/worktree-sync/watcher.d.ts.map +1 -1
- package/dist/core/worktree-sync/watcher.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +10 -32
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +6 -19
- package/dist/migrations.js.map +1 -1
- package/dist/modes/index.d.ts.map +1 -1
- package/dist/modes/interactive/auth-dialogs-controller.d.ts +3 -0
- package/dist/modes/interactive/auth-dialogs-controller.d.ts.map +1 -1
- package/dist/modes/interactive/auth-dialogs-controller.js +96 -132
- package/dist/modes/interactive/auth-dialogs-controller.js.map +1 -1
- package/dist/modes/interactive/auto-learn-controller.d.ts +1 -31
- package/dist/modes/interactive/auto-learn-controller.d.ts.map +1 -1
- package/dist/modes/interactive/auto-learn-controller.js +86 -307
- package/dist/modes/interactive/auto-learn-controller.js.map +1 -1
- package/dist/modes/interactive/autocomplete-provider.d.ts.map +1 -1
- package/dist/modes/interactive/autocomplete-provider.js.map +1 -1
- package/dist/modes/interactive/autonomy-commands.d.ts.map +1 -1
- package/dist/modes/interactive/autonomy-commands.js +2 -8
- package/dist/modes/interactive/autonomy-commands.js.map +1 -1
- package/dist/modes/interactive/clipboard-input.d.ts +5 -1
- package/dist/modes/interactive/clipboard-input.d.ts.map +1 -1
- package/dist/modes/interactive/clipboard-input.js +17 -0
- package/dist/modes/interactive/clipboard-input.js.map +1 -1
- package/dist/modes/interactive/compaction-queue.d.ts.map +1 -1
- package/dist/modes/interactive/compaction-queue.js +13 -18
- package/dist/modes/interactive/compaction-queue.js.map +1 -1
- package/dist/modes/interactive/components/activity-lane.d.ts.map +1 -1
- package/dist/modes/interactive/components/activity-lane.js +6 -10
- package/dist/modes/interactive/components/activity-lane.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts +1 -0
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js +10 -21
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +1 -6
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +4 -9
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +0 -3
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +3 -8
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +13 -35
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +3 -8
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +14 -36
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +20 -43
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js +0 -5
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +2 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +4 -8
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +1 -6
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js +6 -8
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/dist/modes/interactive/components/diff.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js +0 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
- package/dist/modes/interactive/components/expandable-markdown-message.d.ts +21 -0
- package/dist/modes/interactive/components/expandable-markdown-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/expandable-markdown-message.js +48 -0
- package/dist/modes/interactive/components/expandable-markdown-message.js.map +1 -0
- package/dist/modes/interactive/components/expandable-text.d.ts.map +1 -1
- package/dist/modes/interactive/components/expandable-text.js +0 -2
- package/dist/modes/interactive/components/expandable-text.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +1 -9
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +2 -8
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +5 -20
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/fitness-role-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/fitness-role-selector.js +0 -1
- package/dist/modes/interactive/components/fitness-role-selector.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -5
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +4 -10
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +2 -2
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +21 -44
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/model-suggestion-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-suggestion-selector.js +0 -1
- package/dist/modes/interactive/components/model-suggestion-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +16 -32
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/profile-resource-editor.d.ts +3 -4
- package/dist/modes/interactive/components/profile-resource-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/profile-resource-editor.js +34 -93
- package/dist/modes/interactive/components/profile-resource-editor.js.map +1 -1
- package/dist/modes/interactive/components/profile-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/profile-selector.js +0 -1
- package/dist/modes/interactive/components/profile-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +3 -4
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +34 -79
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/selector-list.d.ts +63 -0
- package/dist/modes/interactive/components/selector-list.d.ts.map +1 -0
- package/dist/modes/interactive/components/selector-list.js +186 -0
- package/dist/modes/interactive/components/selector-list.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +34 -59
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +40 -138
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts +2 -4
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +9 -28
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +3 -8
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +12 -40
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts +2 -5
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +11 -37
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts +2 -4
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +9 -31
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +9 -28
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tool-group.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-group.js +2 -3
- package/dist/modes/interactive/components/tool-group.js.map +1 -1
- package/dist/modes/interactive/components/tool-panel-registry.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-panel-registry.js +5 -3
- package/dist/modes/interactive/components/tool-panel-registry.js.map +1 -1
- package/dist/modes/interactive/components/tool-title.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-title.js +0 -4
- package/dist/modes/interactive/components/tool-title.js.map +1 -1
- package/dist/modes/interactive/components/transcript-pager.d.ts +26 -0
- package/dist/modes/interactive/components/transcript-pager.d.ts.map +1 -0
- package/dist/modes/interactive/components/transcript-pager.js +81 -0
- package/dist/modes/interactive/components/transcript-pager.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +1 -12
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +42 -402
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/trust-selector.js +4 -16
- package/dist/modes/interactive/components/trust-selector.js.map +1 -1
- package/dist/modes/interactive/components/usage-action-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/usage-action-selector.js +2 -10
- package/dist/modes/interactive/components/usage-action-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +3 -6
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +0 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/config-backup.d.ts.map +1 -1
- package/dist/modes/interactive/config-backup.js.map +1 -1
- package/dist/modes/interactive/editor-overlay-host.d.ts.map +1 -1
- package/dist/modes/interactive/editor-overlay-host.js +0 -3
- package/dist/modes/interactive/editor-overlay-host.js.map +1 -1
- package/dist/modes/interactive/extension-ui-host.d.ts +2 -0
- package/dist/modes/interactive/extension-ui-host.d.ts.map +1 -1
- package/dist/modes/interactive/extension-ui-host.js +51 -72
- package/dist/modes/interactive/extension-ui-host.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js +2 -15
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/history-reload-math.d.ts.map +1 -1
- package/dist/modes/interactive/history-reload-math.js.map +1 -1
- package/dist/modes/interactive/interactive-event-controller.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-event-controller.js +23 -16
- package/dist/modes/interactive/interactive-event-controller.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +13 -4
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +123 -204
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/interactive-selection-prompts.d.ts +20 -0
- package/dist/modes/interactive/interactive-selection-prompts.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-selection-prompts.js +43 -0
- package/dist/modes/interactive/interactive-selection-prompts.js.map +1 -0
- package/dist/modes/interactive/key-handlers.d.ts +2 -1
- package/dist/modes/interactive/key-handlers.d.ts.map +1 -1
- package/dist/modes/interactive/key-handlers.js +4 -2
- package/dist/modes/interactive/key-handlers.js.map +1 -1
- package/dist/modes/interactive/loaded-resources-view.d.ts.map +1 -1
- package/dist/modes/interactive/loaded-resources-view.js.map +1 -1
- package/dist/modes/interactive/local-model-commands.d.ts.map +1 -1
- package/dist/modes/interactive/local-model-commands.js +4 -9
- package/dist/modes/interactive/local-model-commands.js.map +1 -1
- package/dist/modes/interactive/model-fitness-presentation.d.ts +21 -0
- package/dist/modes/interactive/model-fitness-presentation.d.ts.map +1 -0
- package/dist/modes/interactive/model-fitness-presentation.js +13 -0
- package/dist/modes/interactive/model-fitness-presentation.js.map +1 -0
- package/dist/modes/interactive/profile-menu-controller.d.ts +2 -0
- package/dist/modes/interactive/profile-menu-controller.d.ts.map +1 -1
- package/dist/modes/interactive/profile-menu-controller.js +79 -171
- package/dist/modes/interactive/profile-menu-controller.js.map +1 -1
- package/dist/modes/interactive/report-commands.d.ts +2 -0
- package/dist/modes/interactive/report-commands.d.ts.map +1 -1
- package/dist/modes/interactive/report-commands.js +12 -6
- package/dist/modes/interactive/report-commands.js.map +1 -1
- package/dist/modes/interactive/resource-display.d.ts.map +1 -1
- package/dist/modes/interactive/resource-display.js.map +1 -1
- package/dist/modes/interactive/resource-shell-commands.d.ts.map +1 -1
- package/dist/modes/interactive/resource-shell-commands.js +6 -23
- package/dist/modes/interactive/resource-shell-commands.js.map +1 -1
- package/dist/modes/interactive/session-flow-commands.d.ts.map +1 -1
- package/dist/modes/interactive/session-flow-commands.js +21 -25
- package/dist/modes/interactive/session-flow-commands.js.map +1 -1
- package/dist/modes/interactive/session-io-commands.d.ts.map +1 -1
- package/dist/modes/interactive/session-io-commands.js.map +1 -1
- package/dist/modes/interactive/session-replacement-errors.d.ts.map +1 -1
- package/dist/modes/interactive/session-replacement-errors.js.map +1 -1
- package/dist/modes/interactive/settings-selector-flow.d.ts.map +1 -1
- package/dist/modes/interactive/settings-selector-flow.js.map +1 -1
- package/dist/modes/interactive/signal-lifecycle.d.ts.map +1 -1
- package/dist/modes/interactive/signal-lifecycle.js.map +1 -1
- package/dist/modes/interactive/startup-checks.d.ts.map +1 -1
- package/dist/modes/interactive/startup-checks.js +12 -8
- package/dist/modes/interactive/startup-checks.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +10 -76
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/interactive/usage-commands.d.ts.map +1 -1
- package/dist/modes/interactive/usage-commands.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +5 -22
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/jsonl.d.ts.map +1 -1
- package/dist/modes/rpc/jsonl.js +1 -1
- package/dist/modes/rpc/jsonl.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +7 -8
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +5 -20
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/termination-signals.d.ts +4 -0
- package/dist/modes/termination-signals.d.ts.map +1 -0
- package/dist/modes/termination-signals.js +21 -0
- package/dist/modes/termination-signals.js.map +1 -0
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/ansi-colors.d.ts +5 -0
- package/dist/utils/ansi-colors.d.ts.map +1 -0
- package/dist/utils/ansi-colors.js +38 -0
- package/dist/utils/ansi-colors.js.map +1 -0
- package/dist/utils/ansi.d.ts.map +1 -1
- package/dist/utils/ansi.js.map +1 -1
- package/dist/utils/changelog.d.ts.map +1 -1
- package/dist/utils/changelog.js.map +1 -1
- package/dist/utils/child-process.d.ts.map +1 -1
- package/dist/utils/child-process.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard-native.d.ts.map +1 -1
- package/dist/utils/clipboard-native.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/deprecation.d.ts.map +1 -1
- package/dist/utils/deprecation.js.map +1 -1
- package/dist/utils/exif-orientation.d.ts.map +1 -1
- package/dist/utils/exif-orientation.js.map +1 -1
- package/dist/utils/external-editor-command.d.ts.map +1 -1
- package/dist/utils/external-editor-command.js.map +1 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/fs-watch.d.ts.map +1 -1
- package/dist/utils/fs-watch.js.map +1 -1
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +20 -28
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/highlight-js-languages.d.ts.map +1 -1
- package/dist/utils/html.d.ts.map +1 -1
- package/dist/utils/html.js.map +1 -1
- package/dist/utils/image-convert.d.ts.map +1 -1
- package/dist/utils/image-convert.js.map +1 -1
- package/dist/utils/image-resize-core.d.ts.map +1 -1
- package/dist/utils/image-resize-core.js.map +1 -1
- package/dist/utils/image-resize-worker.d.ts.map +1 -1
- package/dist/utils/image-resize-worker.js.map +1 -1
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js.map +1 -1
- package/dist/utils/json.d.ts.map +1 -1
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/mime.d.ts.map +1 -1
- package/dist/utils/mime.js.map +1 -1
- package/dist/utils/open-browser.d.ts.map +1 -1
- package/dist/utils/open-browser.js.map +1 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/photon.d.ts.map +1 -1
- package/dist/utils/photon.js.map +1 -1
- package/dist/utils/pi-user-agent.d.ts.map +1 -1
- package/dist/utils/pi-user-agent.js.map +1 -1
- package/dist/utils/platform.d.ts.map +1 -1
- package/dist/utils/platform.js.map +1 -1
- package/dist/utils/process-memory.d.ts.map +1 -1
- package/dist/utils/process-memory.js.map +1 -1
- package/dist/utils/safe-write-stream.d.ts.map +1 -1
- package/dist/utils/safe-write-stream.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/sleep.d.ts.map +1 -1
- package/dist/utils/sleep.js +2 -15
- package/dist/utils/sleep.js.map +1 -1
- package/dist/utils/stdin-events.d.ts +8 -0
- package/dist/utils/stdin-events.d.ts.map +1 -0
- package/dist/utils/stdin-events.js +19 -0
- package/dist/utils/stdin-events.js.map +1 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -1
- package/dist/utils/syntax-highlight.js +20 -13
- package/dist/utils/syntax-highlight.js.map +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js.map +1 -1
- package/dist/utils/windows-self-update.d.ts.map +1 -1
- package/dist/utils/windows-self-update.js.map +1 -1
- package/dist/utils/work-directory.d.ts.map +1 -1
- package/dist/utils/work-directory.js.map +1 -1
- package/docs/compaction.md +11 -3
- package/docs/sessions.md +6 -0
- package/docs/settings.md +1 -1
- package/docs/windows.md +26 -1
- package/docs/work-directory.md +9 -1
- 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/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +16 -16
- package/package.json +10 -10
- package/dist/utils/streaming-lines.d.ts +0 -20
- package/dist/utils/streaming-lines.d.ts.map +0 -1
- package/dist/utils/streaming-lines.js +0 -79
- package/dist/utils/streaming-lines.js.map +0 -1
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* identical behavior, so the render-core operations (working indicator, hidden-thinking label,
|
|
14
14
|
* autocomplete rebuild) stay host-side and are invoked here as delegations.
|
|
15
15
|
*/
|
|
16
|
-
import { Container, Editor, matchesKey, Spacer, Text } from "@caupulican/pi-tui";
|
|
16
|
+
import { Container, Editor, firstNonWhitespaceCharacter, matchesKey, Spacer, Text } from "@caupulican/pi-tui";
|
|
17
17
|
import { AskQuestionDialog } from "../../core/tools/ask-question.js";
|
|
18
18
|
import { handleClipboardImagePaste } from "./clipboard-input.js";
|
|
19
19
|
import { ExtensionEditorComponent } from "./components/extension-editor.js";
|
|
@@ -24,27 +24,22 @@ function isExpandable(obj) {
|
|
|
24
24
|
return typeof obj === "object" && obj !== null && "setExpanded" in obj && typeof obj.setExpanded === "function";
|
|
25
25
|
}
|
|
26
26
|
export class ExtensionUiHost {
|
|
27
|
-
deps;
|
|
28
|
-
// Extension UI state
|
|
29
|
-
extensionSelector = undefined;
|
|
30
|
-
extensionInput = undefined;
|
|
31
|
-
extensionEditor = undefined;
|
|
32
|
-
/** Settles the mounted extension dialog before another dialog can replace its overlay. */
|
|
33
|
-
activeExtensionDialogCancel;
|
|
34
|
-
extensionTerminalInputUnsubscribers = new Set();
|
|
35
|
-
// Extension widgets (components rendered above/below the editor)
|
|
36
|
-
extensionWidgetsAbove = new Map();
|
|
37
|
-
extensionWidgetsBelow = new Map();
|
|
38
|
-
// Host-owned widgets survive extension reloads and are cleared only by the owning interactive mode.
|
|
39
|
-
hostWidgetsAbove = new Map();
|
|
40
|
-
hostWidgetsBelow = new Map();
|
|
41
|
-
// Custom footer from extension (undefined = use built-in footer)
|
|
42
|
-
customFooter = undefined;
|
|
43
|
-
// Custom header from extension (undefined = use built-in header)
|
|
44
|
-
customHeader = undefined;
|
|
45
|
-
// Current custom editor-component factory (undefined = default editor)
|
|
46
|
-
editorComponentFactory;
|
|
47
27
|
constructor(deps) {
|
|
28
|
+
// Extension UI state
|
|
29
|
+
this.extensionSelector = undefined;
|
|
30
|
+
this.extensionInput = undefined;
|
|
31
|
+
this.extensionEditor = undefined;
|
|
32
|
+
this.extensionTerminalInputUnsubscribers = new Set();
|
|
33
|
+
// Extension widgets (components rendered above/below the editor)
|
|
34
|
+
this.extensionWidgetsAbove = new Map();
|
|
35
|
+
this.extensionWidgetsBelow = new Map();
|
|
36
|
+
// Host-owned widgets survive extension reloads and are cleared only by the owning interactive mode.
|
|
37
|
+
this.hostWidgetsAbove = new Map();
|
|
38
|
+
this.hostWidgetsBelow = new Map();
|
|
39
|
+
// Custom footer from extension (undefined = use built-in footer)
|
|
40
|
+
this.customFooter = undefined;
|
|
41
|
+
// Custom header from extension (undefined = use built-in header)
|
|
42
|
+
this.customHeader = undefined;
|
|
48
43
|
this.deps = deps;
|
|
49
44
|
}
|
|
50
45
|
get session() {
|
|
@@ -83,18 +78,7 @@ export class ExtensionUiHost {
|
|
|
83
78
|
this.ui.markShutdownRequested();
|
|
84
79
|
},
|
|
85
80
|
getContextUsage: () => this.session.getContextUsage(),
|
|
86
|
-
compact: (options) =>
|
|
87
|
-
void (async () => {
|
|
88
|
-
try {
|
|
89
|
-
const result = await this.session.compact(options?.customInstructions);
|
|
90
|
-
options?.onComplete?.(result);
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
const err = error instanceof Error ? error : new Error(String(error));
|
|
94
|
-
options?.onError?.(err);
|
|
95
|
-
}
|
|
96
|
-
})();
|
|
97
|
-
},
|
|
81
|
+
compact: (options) => this.session.compactForExtension(options),
|
|
98
82
|
reload: async () => {
|
|
99
83
|
await this.ui.reload();
|
|
100
84
|
},
|
|
@@ -123,7 +107,7 @@ export class ExtensionUiHost {
|
|
|
123
107
|
this.ui.tui.requestRender();
|
|
124
108
|
}
|
|
125
109
|
// Maximum total widget lines to prevent viewport overflow
|
|
126
|
-
static MAX_WIDGET_LINES = 10;
|
|
110
|
+
static { this.MAX_WIDGET_LINES = 10; }
|
|
127
111
|
removeWidget(map, key) {
|
|
128
112
|
const existing = map.get(key);
|
|
129
113
|
existing?.dispose?.();
|
|
@@ -421,35 +405,13 @@ export class ExtensionUiHost {
|
|
|
421
405
|
* Show a selector for extensions.
|
|
422
406
|
*/
|
|
423
407
|
showExtensionSelector(title, options, opts) {
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
let settled = false;
|
|
430
|
-
let selector;
|
|
431
|
-
const finish = (value, restoreEditor = true) => {
|
|
432
|
-
if (settled)
|
|
433
|
-
return;
|
|
434
|
-
settled = true;
|
|
435
|
-
opts?.signal?.removeEventListener("abort", cancel);
|
|
436
|
-
if (this.activeExtensionDialogCancel === cancel) {
|
|
437
|
-
this.activeExtensionDialogCancel = undefined;
|
|
438
|
-
}
|
|
439
|
-
this.hideExtensionSelector(selector, restoreEditor);
|
|
440
|
-
resolve(value);
|
|
441
|
-
};
|
|
442
|
-
const cancel = () => finish(undefined);
|
|
443
|
-
selector = new ExtensionSelectorComponent(title, options, (option) => finish(option), cancel, {
|
|
444
|
-
tui: this.ui.tui,
|
|
445
|
-
timeout: opts?.timeout,
|
|
446
|
-
onToggleToolsExpanded: () => this.ui.toggleToolsExpanded(),
|
|
447
|
-
});
|
|
408
|
+
return this.showExtensionDialog(opts, (finish, cancel) => new ExtensionSelectorComponent(title, options, finish, cancel, {
|
|
409
|
+
tui: this.ui.tui,
|
|
410
|
+
timeout: opts?.timeout,
|
|
411
|
+
onToggleToolsExpanded: () => this.ui.toggleToolsExpanded(),
|
|
412
|
+
}), (selector) => {
|
|
448
413
|
this.extensionSelector = selector;
|
|
449
|
-
|
|
450
|
-
this.ui.overlayHost.swap(selector, { onUnmount: () => finish(undefined, false) });
|
|
451
|
-
opts?.signal?.addEventListener("abort", cancel, { once: true });
|
|
452
|
-
});
|
|
414
|
+
}, (selector, restoreEditor) => this.hideExtensionSelector(selector, restoreEditor));
|
|
453
415
|
}
|
|
454
416
|
/**
|
|
455
417
|
* Hide the extension selector.
|
|
@@ -475,12 +437,22 @@ export class ExtensionUiHost {
|
|
|
475
437
|
* Show a text input for extensions.
|
|
476
438
|
*/
|
|
477
439
|
showExtensionInput(title, placeholder, opts) {
|
|
440
|
+
return this.showExtensionDialog(opts, (finish, cancel) => new ExtensionInputComponent(title, placeholder, finish, cancel, {
|
|
441
|
+
tui: this.ui.tui,
|
|
442
|
+
timeout: opts?.timeout,
|
|
443
|
+
sensitive: opts?.sensitive,
|
|
444
|
+
}), (input) => {
|
|
445
|
+
this.extensionInput = input;
|
|
446
|
+
}, (input, restoreEditor) => this.hideExtensionInput(input, restoreEditor));
|
|
447
|
+
}
|
|
448
|
+
showExtensionDialog(opts, create, activate, hide) {
|
|
478
449
|
if (opts?.signal?.aborted)
|
|
479
450
|
return Promise.resolve(undefined);
|
|
451
|
+
// Replacing an overlay without settling its promise strands the extension handler forever.
|
|
480
452
|
this.activeExtensionDialogCancel?.();
|
|
481
453
|
return new Promise((resolve) => {
|
|
482
454
|
let settled = false;
|
|
483
|
-
let
|
|
455
|
+
let component;
|
|
484
456
|
const finish = (value, restoreEditor = true) => {
|
|
485
457
|
if (settled)
|
|
486
458
|
return;
|
|
@@ -489,18 +461,14 @@ export class ExtensionUiHost {
|
|
|
489
461
|
if (this.activeExtensionDialogCancel === cancel) {
|
|
490
462
|
this.activeExtensionDialogCancel = undefined;
|
|
491
463
|
}
|
|
492
|
-
|
|
464
|
+
hide(component, restoreEditor);
|
|
493
465
|
resolve(value);
|
|
494
466
|
};
|
|
495
467
|
const cancel = () => finish(undefined);
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
timeout: opts?.timeout,
|
|
499
|
-
sensitive: opts?.sensitive,
|
|
500
|
-
});
|
|
501
|
-
this.extensionInput = input;
|
|
468
|
+
component = create((value) => finish(value), cancel);
|
|
469
|
+
activate(component);
|
|
502
470
|
this.activeExtensionDialogCancel = cancel;
|
|
503
|
-
this.ui.overlayHost.swap(
|
|
471
|
+
this.ui.overlayHost.swap(component, { onUnmount: () => finish(undefined, false) });
|
|
504
472
|
opts?.signal?.addEventListener("abort", cancel, { once: true });
|
|
505
473
|
});
|
|
506
474
|
}
|
|
@@ -565,7 +533,18 @@ export class ExtensionUiHost {
|
|
|
565
533
|
const newEditor = factory(this.ui.tui, getEditorTheme(), this.ui.keybindings);
|
|
566
534
|
// Wire up callbacks from the default editor
|
|
567
535
|
newEditor.onSubmit = this.ui.defaultEditor.onSubmit;
|
|
568
|
-
newEditor.
|
|
536
|
+
if (newEditor.supportsChangeSummary) {
|
|
537
|
+
newEditor.onChange = this.ui.defaultEditor.onChange;
|
|
538
|
+
newEditor.onChangeSummary = this.ui.defaultEditor.onChangeSummary;
|
|
539
|
+
}
|
|
540
|
+
else {
|
|
541
|
+
const onChangeSummary = this.ui.defaultEditor.onChangeSummary;
|
|
542
|
+
newEditor.onChange =
|
|
543
|
+
this.ui.defaultEditor.onChange ??
|
|
544
|
+
(onChangeSummary
|
|
545
|
+
? (text) => onChangeSummary({ firstNonWhitespace: firstNonWhitespaceCharacter(text) })
|
|
546
|
+
: undefined);
|
|
547
|
+
}
|
|
569
548
|
// Copy text from previous editor
|
|
570
549
|
newEditor.setText(currentText);
|
|
571
550
|
// Copy appearance settings if supported
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-ui-host.js","sourceRoot":"","sources":["../../../src/modes/interactive/extension-ui-host.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Extension UI host.\n *\n * Extracted verbatim from interactive-mode.ts (god-file decomposition). Owns the interactive-mode\n * surface of the extension UI API: extension-provided dialogs (selector / confirm / input / multi-line\n * editor / custom component), widget mounting above and below the editor, extension status text, custom\n * footer and header swaps, the custom editor-component swap, keyboard-shortcut wiring, terminal-input\n * listeners, and the `ExtensionUIContext` handed to extensions. It owns exactly the state this cluster\n * mutates (the live dialog components, the widget maps, the terminal-input unsubscribers, the custom\n * footer/header, and the current custom-editor factory) and reaches everything else — the mutable\n * `editor`, the render-core containers, the working-indicator, autocomplete wiring, theme/tools state —\n * through a narrow deps/ui surface rather than the whole InteractiveMode instance. Extensions must see\n * identical behavior, so the render-core operations (working indicator, hidden-thinking label,\n * autocomplete rebuild) stay host-side and are invoked here as delegations.\n */\n\nimport type {\n\tAutocompleteProvider,\n\tComponent,\n\tEditorComponent,\n\tKeyId,\n\tLoaderIndicatorOptions,\n\tOverlayHandle,\n\tOverlayOptions,\n} from \"@caupulican/pi-tui\";\nimport { Container, Editor, matchesKey, Spacer, Text, type TUI } from \"@caupulican/pi-tui\";\nimport type { AgentSession } from \"../../core/agent-session.ts\";\nimport type {\n\tAutocompleteProviderFactory,\n\tEditorFactory,\n\tExtensionContext,\n\tExtensionRunner,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n} from \"../../core/extensions/index.ts\";\nimport type { FooterDataProvider, ReadonlyFooterDataProvider } from \"../../core/footer-data-provider.ts\";\nimport type { HumanInputPresentationRequest, HumanInputPresentationResult } from \"../../core/human-input.ts\";\nimport type { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport type { SessionImageStore } from \"../../core/session-image-store.ts\";\nimport { AskQuestionDialog } from \"../../core/tools/ask-question.ts\";\nimport { handleClipboardImagePaste } from \"./clipboard-input.ts\";\nimport type { CustomEditor } from \"./components/custom-editor.ts\";\nimport { ExtensionEditorComponent } from \"./components/extension-editor.ts\";\nimport { ExtensionInputComponent } from \"./components/extension-input.ts\";\nimport { ExtensionSelectorComponent } from \"./components/extension-selector.ts\";\nimport type { FooterComponent } from \"./components/footer.ts\";\nimport type { EditorOverlayHost } from \"./editor-overlay-host.ts\";\nimport {\n\tgetAvailableThemesWithPaths,\n\tgetEditorTheme,\n\tgetThemeByName,\n\tsetTheme,\n\tsetThemeInstance,\n\tTheme,\n\ttheme,\n} from \"./theme/theme.ts\";\n\n/** Components that can be expanded/collapsed (custom headers may opt in). */\ninterface Expandable {\n\tsetExpanded(expanded: boolean): void;\n}\n\nfunction isExpandable(obj: unknown): obj is Expandable {\n\treturn typeof obj === \"object\" && obj !== null && \"setExpanded\" in obj && typeof obj.setExpanded === \"function\";\n}\n\n/**\n * The narrow slice of InteractiveMode the extension UI host drives. Stable containers and the TUI are\n * passed directly; mutable render-core state (the active editor, built-in header, loading animation,\n * autocomplete wrappers, tools-expansion) is read/written through accessors so InteractiveMode keeps\n * ownership; and render-core / status operations stay host-side and are exposed here as callbacks.\n */\nexport interface ExtensionUiHostUi {\n\treadonly tui: TUI;\n\treadonly overlayHost: EditorOverlayHost;\n\treadonly keybindings: KeybindingsManager;\n\treadonly footer: FooterComponent;\n\treadonly footerDataProvider: FooterDataProvider;\n\treadonly headerContainer: Container;\n\treadonly chatContainer: Container;\n\treadonly defaultEditor: CustomEditor;\n\treadonly widgetContainerAbove: Container;\n\treadonly widgetContainerBelow: Container;\n\n\tgetEditor(): EditorComponent;\n\tsetEditor(editor: EditorComponent): void;\n\tgetBuiltInHeader(): Component | undefined;\n\tgetAutocompleteProvider(): AutocompleteProvider | undefined;\n\tgetClipboardImageStore(): Pick<SessionImageStore, \"write\"> | undefined;\n\tgetToolsExpanded(): boolean;\n\tpushAutocompleteProviderWrapper(factory: AutocompleteProviderFactory): void;\n\tresetAutocompleteProviderWrappers(): void;\n\n\tsetupAutocompleteProvider(): void;\n\tsetWorkingVisible(visible: boolean): void;\n\tsetWorkingIndicator(options?: LoaderIndicatorOptions): void;\n\tsetHiddenThinkingLabel(label?: string): void;\n\tsetWorkingMessage(message: string | undefined): void;\n\tresetWorkingIndicators(): void;\n\tsetToolsExpanded(expanded: boolean): void;\n\ttoggleToolsExpanded(): void;\n\tupdateTerminalTitle(): void;\n\tmarkShutdownRequested(): void;\n\tabort(): void;\n\treload(): Promise<void>;\n\tshowStatus(message: string): void;\n\tshowWarning(message: string): void;\n\tshowError(message: string): void;\n}\n\nexport interface ExtensionUiHostDeps {\n\tgetSession(): AgentSession;\n\tui: ExtensionUiHostUi;\n}\n\ntype DisposableComponent = Component & { dispose?(): void };\ntype WidgetPlacement = \"aboveEditor\" | \"belowEditor\";\n\nexport class ExtensionUiHost {\n\tprivate readonly deps: ExtensionUiHostDeps;\n\n\t// Extension UI state\n\tprivate extensionSelector: ExtensionSelectorComponent | undefined = undefined;\n\tprivate extensionInput: ExtensionInputComponent | undefined = undefined;\n\tprivate extensionEditor: ExtensionEditorComponent | undefined = undefined;\n\t/** Settles the mounted extension dialog before another dialog can replace its overlay. */\n\tprivate activeExtensionDialogCancel: (() => void) | undefined;\n\tprivate extensionTerminalInputUnsubscribers = new Set<() => void>();\n\n\t// Extension widgets (components rendered above/below the editor)\n\tprivate extensionWidgetsAbove = new Map<string, Component & { dispose?(): void }>();\n\tprivate extensionWidgetsBelow = new Map<string, Component & { dispose?(): void }>();\n\t// Host-owned widgets survive extension reloads and are cleared only by the owning interactive mode.\n\tprivate hostWidgetsAbove = new Map<string, DisposableComponent>();\n\tprivate hostWidgetsBelow = new Map<string, DisposableComponent>();\n\n\t// Custom footer from extension (undefined = use built-in footer)\n\tprivate customFooter: (Component & { dispose?(): void }) | undefined = undefined;\n\n\t// Custom header from extension (undefined = use built-in header)\n\tprivate customHeader: (Component & { dispose?(): void }) | undefined = undefined;\n\n\t// Current custom editor-component factory (undefined = default editor)\n\tprivate editorComponentFactory: EditorFactory | undefined;\n\n\tconstructor(deps: ExtensionUiHostDeps) {\n\t\tthis.deps = deps;\n\t}\n\n\tprivate get session(): AgentSession {\n\t\treturn this.deps.getSession();\n\t}\n\tprivate get ui(): ExtensionUiHostUi {\n\t\treturn this.deps.ui;\n\t}\n\n\t/** The active custom header, if an extension has installed one. */\n\tgetCustomHeader(): (Component & { dispose?(): void }) | undefined {\n\t\treturn this.customHeader;\n\t}\n\n\t/**\n\t * Set up keyboard shortcuts registered by extensions.\n\t */\n\tsetupExtensionShortcuts(extensionRunner: ExtensionRunner): void {\n\t\tconst shortcuts = extensionRunner.getShortcuts(this.ui.keybindings.getEffectiveConfig());\n\t\tif (shortcuts.size === 0) return;\n\n\t\t// Create a context for shortcut handlers\n\t\tconst createContext = (): ExtensionContext => ({\n\t\t\tui: this.createExtensionUIContext(),\n\t\t\thasUI: true,\n\t\t\tmode: \"tui\",\n\t\t\tcwd: this.session.sessionManager.getCwd(),\n\t\t\tsessionManager: this.session.sessionManager,\n\t\t\tmodelRegistry: this.session.modelRegistry,\n\t\t\tmodel: this.session.model,\n\t\t\tisIdle: () => !this.session.isStreaming,\n\t\t\tsignal: this.session.agent.signal,\n\t\t\tabort: () => {\n\t\t\t\tthis.ui.abort();\n\t\t\t},\n\t\t\thasPendingMessages: () => this.session.pendingMessageCount > 0,\n\t\t\tshutdown: () => {\n\t\t\t\tthis.ui.markShutdownRequested();\n\t\t\t},\n\t\t\tgetContextUsage: () => this.session.getContextUsage(),\n\t\t\tcompact: (options) => {\n\t\t\t\tvoid (async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.session.compact(options?.customInstructions);\n\t\t\t\t\t\toptions?.onComplete?.(result);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\t\toptions?.onError?.(err);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t},\n\t\t\treload: async () => {\n\t\t\t\tawait this.ui.reload();\n\t\t\t},\n\t\t\tgetSystemPrompt: () => this.session.systemPrompt,\n\t\t});\n\n\t\t// Set up the extension shortcut handler on the default editor\n\t\tthis.ui.defaultEditor.onExtensionShortcut = (data: string) => {\n\t\t\tfor (const [shortcutStr, shortcut] of shortcuts) {\n\t\t\t\t// Cast to KeyId - extension shortcuts use the same format\n\t\t\t\tif (matchesKey(data, shortcutStr as KeyId)) {\n\t\t\t\t\t// Run handler async, don't block input\n\t\t\t\t\tPromise.resolve(shortcut.handler(createContext())).catch((err) => {\n\t\t\t\t\t\tthis.ui.showError(`Shortcut handler error: ${err instanceof Error ? err.message : String(err)}`);\n\t\t\t\t\t});\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n\n\t/**\n\t * Set extension status text in the footer.\n\t */\n\tprivate setExtensionStatus(key: string, text: string | undefined): void {\n\t\tthis.ui.footerDataProvider.setExtensionStatus(key, text);\n\t\tthis.ui.tui.requestRender();\n\t}\n\n\t// Maximum total widget lines to prevent viewport overflow\n\tprivate static readonly MAX_WIDGET_LINES = 10;\n\n\tprivate removeWidget(map: Map<string, DisposableComponent>, key: string): void {\n\t\tconst existing = map.get(key);\n\t\texisting?.dispose?.();\n\t\tmap.delete(key);\n\t}\n\n\t/** Mount a native host widget without coupling it to extension reload lifecycle. */\n\tsetHostWidget(key: string, component: DisposableComponent | undefined, placement: WidgetPlacement): void {\n\t\tthis.removeWidget(this.hostWidgetsAbove, key);\n\t\tthis.removeWidget(this.hostWidgetsBelow, key);\n\t\tif (component) {\n\t\t\tconst target = placement === \"belowEditor\" ? this.hostWidgetsBelow : this.hostWidgetsAbove;\n\t\t\ttarget.set(key, component);\n\t\t}\n\t\tthis.renderWidgets();\n\t}\n\n\tclearHostWidgets(): void {\n\t\tfor (const widget of this.hostWidgetsAbove.values()) widget.dispose?.();\n\t\tfor (const widget of this.hostWidgetsBelow.values()) widget.dispose?.();\n\t\tthis.hostWidgetsAbove.clear();\n\t\tthis.hostWidgetsBelow.clear();\n\t\tthis.renderWidgets();\n\t}\n\n\t/**\n\t * Set an extension widget (string array or custom component).\n\t */\n\tprivate setExtensionWidget(\n\t\tkey: string,\n\t\tcontent: string[] | ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined,\n\t\toptions?: ExtensionWidgetOptions,\n\t): void {\n\t\tconst placement = options?.placement ?? \"aboveEditor\";\n\t\tthis.removeWidget(this.extensionWidgetsAbove, key);\n\t\tthis.removeWidget(this.extensionWidgetsBelow, key);\n\n\t\tif (content === undefined) {\n\t\t\tthis.renderWidgets();\n\t\t\treturn;\n\t\t}\n\n\t\tlet component: Component & { dispose?(): void };\n\n\t\tif (Array.isArray(content)) {\n\t\t\t// Wrap string array in a Container with Text components\n\t\t\tconst container = new Container();\n\t\t\tfor (const line of content.slice(0, ExtensionUiHost.MAX_WIDGET_LINES)) {\n\t\t\t\tcontainer.addChild(new Text(line, 1, 0));\n\t\t\t}\n\t\t\tif (content.length > ExtensionUiHost.MAX_WIDGET_LINES) {\n\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"... (widget truncated)\"), 1, 0));\n\t\t\t}\n\t\t\tcomponent = container;\n\t\t} else {\n\t\t\t// Factory function - create component\n\t\t\tcomponent = content(this.ui.tui, theme);\n\t\t}\n\n\t\tconst targetMap = placement === \"belowEditor\" ? this.extensionWidgetsBelow : this.extensionWidgetsAbove;\n\t\ttargetMap.set(key, component);\n\t\tthis.renderWidgets();\n\t}\n\n\tprivate clearExtensionWidgets(): void {\n\t\tfor (const widget of this.extensionWidgetsAbove.values()) {\n\t\t\twidget.dispose?.();\n\t\t}\n\t\tfor (const widget of this.extensionWidgetsBelow.values()) {\n\t\t\twidget.dispose?.();\n\t\t}\n\t\tthis.extensionWidgetsAbove.clear();\n\t\tthis.extensionWidgetsBelow.clear();\n\t\tthis.renderWidgets();\n\t}\n\n\tresetExtensionUI(): void {\n\t\t// A reset/reload must settle the active dialog before disposing its component.\n\t\tthis.activeExtensionDialogCancel?.();\n\t\tthis.activeExtensionDialogCancel = undefined;\n\t\tif (this.extensionSelector) {\n\t\t\tthis.hideExtensionSelector();\n\t\t}\n\t\tif (this.extensionInput) {\n\t\t\tthis.hideExtensionInput();\n\t\t}\n\t\tif (this.extensionEditor) {\n\t\t\tthis.hideExtensionEditor();\n\t\t}\n\t\tthis.ui.tui.hideOverlay();\n\t\tthis.clearExtensionTerminalInputListeners();\n\t\tthis.setExtensionFooter(undefined);\n\t\tthis.setExtensionHeader(undefined);\n\t\tthis.clearExtensionWidgets();\n\t\tthis.ui.footerDataProvider.clearExtensionStatuses();\n\t\tthis.ui.footer.invalidate();\n\t\tthis.ui.resetAutocompleteProviderWrappers();\n\t\tthis.setCustomEditorComponent(undefined);\n\t\tthis.ui.setupAutocompleteProvider();\n\t\tthis.ui.defaultEditor.onExtensionShortcut = undefined;\n\t\tthis.ui.updateTerminalTitle();\n\t\tthis.ui.resetWorkingIndicators();\n\t}\n\n\t/**\n\t * Render all extension widgets to the widget container.\n\t */\n\trenderWidgets(): void {\n\t\tif (!this.ui.widgetContainerAbove || !this.ui.widgetContainerBelow) return;\n\t\tthis.renderWidgetContainer(\n\t\t\tthis.ui.widgetContainerAbove,\n\t\t\t[this.hostWidgetsAbove, this.extensionWidgetsAbove],\n\t\t\ttrue,\n\t\t\ttrue,\n\t\t);\n\t\tthis.renderWidgetContainer(\n\t\t\tthis.ui.widgetContainerBelow,\n\t\t\t[this.hostWidgetsBelow, this.extensionWidgetsBelow],\n\t\t\tfalse,\n\t\t\tfalse,\n\t\t);\n\t\tthis.ui.tui.requestRender();\n\t}\n\n\tprivate renderWidgetContainer(\n\t\tcontainer: Container,\n\t\twidgetGroups: readonly Map<string, DisposableComponent>[],\n\t\tspacerWhenEmpty: boolean,\n\t\tleadingSpacer: boolean,\n\t): void {\n\t\tcontainer.clear();\n\n\t\tif (widgetGroups.every((widgets) => widgets.size === 0)) {\n\t\t\tif (spacerWhenEmpty) {\n\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (leadingSpacer) {\n\t\t\tcontainer.addChild(new Spacer(1));\n\t\t}\n\t\tfor (const widgets of widgetGroups) {\n\t\t\tfor (const component of widgets.values()) {\n\t\t\t\tcontainer.addChild(component);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Set a custom footer component, or restore the built-in footer.\n\t */\n\tprivate setExtensionFooter(\n\t\tfactory:\n\t\t\t| ((tui: TUI, thm: Theme, footerData: ReadonlyFooterDataProvider) => Component & { dispose?(): void })\n\t\t\t| undefined,\n\t): void {\n\t\t// Dispose existing custom footer\n\t\tif (this.customFooter?.dispose) {\n\t\t\tthis.customFooter.dispose();\n\t\t}\n\n\t\t// Remove current footer from UI\n\t\tif (this.customFooter) {\n\t\t\tthis.ui.tui.removeChild(this.customFooter);\n\t\t} else {\n\t\t\tthis.ui.tui.removeChild(this.ui.footer);\n\t\t}\n\n\t\tif (factory) {\n\t\t\t// Create and add custom footer, passing the data provider\n\t\t\tthis.customFooter = factory(this.ui.tui, theme, this.ui.footerDataProvider);\n\t\t\tthis.ui.tui.addChild(this.customFooter);\n\t\t} else {\n\t\t\t// Restore built-in footer\n\t\t\tthis.customFooter = undefined;\n\t\t\tthis.ui.tui.addChild(this.ui.footer);\n\t\t}\n\n\t\tthis.ui.tui.requestRender();\n\t}\n\n\t/**\n\t * Set a custom header component, or restore the built-in header.\n\t */\n\tprivate setExtensionHeader(factory: ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined): void {\n\t\t// Header may not be initialized yet if called during early initialization\n\t\tconst builtInHeader = this.ui.getBuiltInHeader();\n\t\tif (!builtInHeader) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Dispose existing custom header\n\t\tif (this.customHeader?.dispose) {\n\t\t\tthis.customHeader.dispose();\n\t\t}\n\n\t\t// Find the index of the current header in the header container\n\t\tconst currentHeader = this.customHeader || builtInHeader;\n\t\tconst index = this.ui.headerContainer.children.indexOf(currentHeader);\n\n\t\tif (factory) {\n\t\t\t// Create and add custom header\n\t\t\tthis.customHeader = factory(this.ui.tui, theme);\n\t\t\tif (isExpandable(this.customHeader)) {\n\t\t\t\tthis.customHeader.setExpanded(this.ui.getToolsExpanded());\n\t\t\t}\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.ui.headerContainer.children[index] = this.customHeader;\n\t\t\t} else {\n\t\t\t\t// If not found (e.g. builtInHeader was never added), add at the top\n\t\t\t\tthis.ui.headerContainer.children.unshift(this.customHeader);\n\t\t\t}\n\t\t} else {\n\t\t\t// Restore built-in header\n\t\t\tthis.customHeader = undefined;\n\t\t\tif (isExpandable(builtInHeader)) {\n\t\t\t\tbuiltInHeader.setExpanded(this.ui.getToolsExpanded());\n\t\t\t}\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.ui.headerContainer.children[index] = builtInHeader;\n\t\t\t}\n\t\t}\n\n\t\tthis.ui.tui.requestRender();\n\t}\n\n\tprivate addExtensionTerminalInputListener(\n\t\thandler: (data: string) => { consume?: boolean; data?: string } | undefined,\n\t): () => void {\n\t\tconst unsubscribe = this.ui.tui.addInputListener(handler);\n\t\tthis.extensionTerminalInputUnsubscribers.add(unsubscribe);\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t\tthis.extensionTerminalInputUnsubscribers.delete(unsubscribe);\n\t\t};\n\t}\n\n\tclearExtensionTerminalInputListeners(): void {\n\t\tfor (const unsubscribe of this.extensionTerminalInputUnsubscribers) {\n\t\t\tunsubscribe();\n\t\t}\n\t\tthis.extensionTerminalInputUnsubscribers.clear();\n\t}\n\n\t/**\n\t * Create the ExtensionUIContext for extensions.\n\t */\n\tcreateExtensionUIContext(): ExtensionUIContext {\n\t\treturn {\n\t\t\taskQuestions: (request, opts) => this.showHumanInput(request, opts),\n\t\t\tselect: (title, options, opts) => this.showExtensionSelector(title, options, opts),\n\t\t\tconfirm: (title, message, opts) => this.showExtensionConfirm(title, message, opts),\n\t\t\tinput: (title, placeholder, opts) => this.showExtensionInput(title, placeholder, opts),\n\t\t\tnotify: (message, type) => this.showExtensionNotify(message, type),\n\t\t\tonTerminalInput: (handler) => this.addExtensionTerminalInputListener(handler),\n\t\t\tsetStatus: (key, text) => this.setExtensionStatus(key, text),\n\t\t\tsetWorkingMessage: (message) => this.ui.setWorkingMessage(message),\n\t\t\tsetWorkingVisible: (visible) => this.ui.setWorkingVisible(visible),\n\t\t\tsetWorkingIndicator: (options) => this.ui.setWorkingIndicator(options),\n\t\t\tsetHiddenThinkingLabel: (label) => this.ui.setHiddenThinkingLabel(label),\n\t\t\tsetWidget: (key, content, options) => this.setExtensionWidget(key, content, options),\n\t\t\tsetFooter: (factory) => this.setExtensionFooter(factory),\n\t\t\tsetHeader: (factory) => this.setExtensionHeader(factory),\n\t\t\tsetTitle: (title) => this.ui.tui.terminal.setTitle(title),\n\t\t\tcustom: (factory, options) => this.showExtensionCustom(factory, options),\n\t\t\tpasteToEditor: (text) => this.ui.getEditor().handleInput(`\\x1b[200~${text}\\x1b[201~`),\n\t\t\tsetEditorText: (text) => this.ui.getEditor().setText(text),\n\t\t\tgetEditorText: () => this.ui.getEditor().getExpandedText?.() ?? this.ui.getEditor().getText(),\n\t\t\teditor: (title, prefill) => this.showExtensionEditor(title, prefill),\n\t\t\taddAutocompleteProvider: (factory) => {\n\t\t\t\tthis.ui.pushAutocompleteProviderWrapper(factory);\n\t\t\t\tthis.ui.setupAutocompleteProvider();\n\t\t\t},\n\t\t\tsetEditorComponent: (factory) => this.setCustomEditorComponent(factory),\n\t\t\tgetEditorComponent: () => this.editorComponentFactory,\n\t\t\tget theme() {\n\t\t\t\treturn theme;\n\t\t\t},\n\t\t\tgetAllThemes: () => getAvailableThemesWithPaths(),\n\t\t\tgetTheme: (name) => getThemeByName(name),\n\t\t\tsetTheme: (themeOrName) => {\n\t\t\t\tif (themeOrName instanceof Theme) {\n\t\t\t\t\tsetThemeInstance(themeOrName);\n\t\t\t\t\tthis.ui.tui.requestRender();\n\t\t\t\t\treturn { success: true };\n\t\t\t\t}\n\t\t\t\tconst result = setTheme(themeOrName, true);\n\t\t\t\tif (result.success) {\n\t\t\t\t\tif (this.session.settingsManager.getTheme() !== themeOrName) {\n\t\t\t\t\t\tthis.session.settingsManager.setTheme(themeOrName);\n\t\t\t\t\t}\n\t\t\t\t\tthis.ui.tui.requestRender();\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tgetToolsExpanded: () => this.ui.getToolsExpanded(),\n\t\t\tsetToolsExpanded: (expanded) => this.ui.setToolsExpanded(expanded),\n\t\t};\n\t}\n\n\tprivate showHumanInput(\n\t\trequest: HumanInputPresentationRequest,\n\t\topts?: Pick<ExtensionUIDialogOptions, \"signal\">,\n\t): Promise<HumanInputPresentationResult> {\n\t\tif (opts?.signal?.aborted) {\n\t\t\treturn Promise.resolve({ answers: [], cancelled: true, reason: \"interrupted\", imageContents: [] });\n\t\t}\n\t\treturn this.showExtensionCustom<HumanInputPresentationResult>((tui, currentTheme, keybindings, done) => {\n\t\t\tlet onAbort: (() => void) | undefined;\n\t\t\tconst finish = (result: HumanInputPresentationResult) => {\n\t\t\t\tif (onAbort) opts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tdone(result);\n\t\t\t};\n\t\t\tconst settings = this.session.settingsManager;\n\t\t\tconst modelCannotSeeImages = !request.acceptsImages;\n\t\t\tconst dialog = new AskQuestionDialog({\n\t\t\t\tquestions: request.questions,\n\t\t\t\ttheme: currentTheme,\n\t\t\t\tkeybindings,\n\t\t\t\trequestRender: () => tui.requestRender(),\n\t\t\t\tfinish,\n\t\t\t\tcreateAnswerEditor: () => new Editor(tui, getEditorTheme()),\n\t\t\t\tclipboard: {\n\t\t\t\t\tautoResizeImages: settings.getImageAutoResize(),\n\t\t\t\t\tblockImages: settings.getBlockImages() || modelCannotSeeImages,\n\t\t\t\t\tblockImagesReason: modelCannotSeeImages\n\t\t\t\t\t\t? \"The selected model does not accept image input. Switch to an image-capable model or route this inspection to a vision worker.\"\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\timageStore: this.ui.getClipboardImageStore(),\n\t\t\t\t},\n\t\t\t\tpasteClipboardImage: handleClipboardImagePaste,\n\t\t\t});\n\t\t\tonAbort = () => dialog.cancel(\"interrupted\");\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\treturn dialog;\n\t\t}).catch(() => ({ answers: [], cancelled: true, reason: \"interrupted\", imageContents: [] }));\n\t}\n\n\t/**\n\t * Show a selector for extensions.\n\t */\n\tshowExtensionSelector(\n\t\ttitle: string,\n\t\toptions: string[],\n\t\topts?: ExtensionUIDialogOptions,\n\t): Promise<string | undefined> {\n\t\tif (opts?.signal?.aborted) return Promise.resolve(undefined);\n\t\t// Replacing an overlay without settling its promise strands the extension handler forever.\n\t\tthis.activeExtensionDialogCancel?.();\n\t\treturn new Promise((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tlet selector: ExtensionSelectorComponent;\n\t\t\tconst finish = (value: string | undefined, restoreEditor = true) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\topts?.signal?.removeEventListener(\"abort\", cancel);\n\t\t\t\tif (this.activeExtensionDialogCancel === cancel) {\n\t\t\t\t\tthis.activeExtensionDialogCancel = undefined;\n\t\t\t\t}\n\t\t\t\tthis.hideExtensionSelector(selector, restoreEditor);\n\t\t\t\tresolve(value);\n\t\t\t};\n\t\t\tconst cancel = () => finish(undefined);\n\n\t\t\tselector = new ExtensionSelectorComponent(title, options, (option) => finish(option), cancel, {\n\t\t\t\ttui: this.ui.tui,\n\t\t\t\ttimeout: opts?.timeout,\n\t\t\t\tonToggleToolsExpanded: () => this.ui.toggleToolsExpanded(),\n\t\t\t});\n\t\t\tthis.extensionSelector = selector;\n\t\t\tthis.activeExtensionDialogCancel = cancel;\n\t\t\tthis.ui.overlayHost.swap(selector, { onUnmount: () => finish(undefined, false) });\n\t\t\topts?.signal?.addEventListener(\"abort\", cancel, { once: true });\n\t\t});\n\t}\n\n\t/**\n\t * Hide the extension selector.\n\t */\n\tprivate hideExtensionSelector(selector = this.extensionSelector, restoreEditor = true): void {\n\t\tif (!selector) return;\n\t\tselector.dispose();\n\t\tif (this.extensionSelector !== selector) return;\n\t\tthis.extensionSelector = undefined;\n\t\tif (restoreEditor) this.ui.overlayHost.swap(this.ui.getEditor());\n\t}\n\n\t/**\n\t * Show a confirmation dialog for extensions.\n\t */\n\tasync showExtensionConfirm(title: string, message: string, opts?: ExtensionUIDialogOptions): Promise<boolean> {\n\t\tconst result = await this.showExtensionSelector(`${title}\\n${message}`, [\"Yes\", \"No\"], opts);\n\t\treturn result === \"Yes\";\n\t}\n\n\t/**\n\t * Show a text input for extensions.\n\t */\n\tprivate showExtensionInput(\n\t\ttitle: string,\n\t\tplaceholder?: string,\n\t\topts?: ExtensionUIDialogOptions,\n\t): Promise<string | undefined> {\n\t\tif (opts?.signal?.aborted) return Promise.resolve(undefined);\n\t\tthis.activeExtensionDialogCancel?.();\n\t\treturn new Promise((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tlet input: ExtensionInputComponent;\n\t\t\tconst finish = (value: string | undefined, restoreEditor = true) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\topts?.signal?.removeEventListener(\"abort\", cancel);\n\t\t\t\tif (this.activeExtensionDialogCancel === cancel) {\n\t\t\t\t\tthis.activeExtensionDialogCancel = undefined;\n\t\t\t\t}\n\t\t\t\tthis.hideExtensionInput(input, restoreEditor);\n\t\t\t\tresolve(value);\n\t\t\t};\n\t\t\tconst cancel = () => finish(undefined);\n\n\t\t\tinput = new ExtensionInputComponent(title, placeholder, (value) => finish(value), cancel, {\n\t\t\t\ttui: this.ui.tui,\n\t\t\t\ttimeout: opts?.timeout,\n\t\t\t\tsensitive: opts?.sensitive,\n\t\t\t});\n\t\t\tthis.extensionInput = input;\n\t\t\tthis.activeExtensionDialogCancel = cancel;\n\t\t\tthis.ui.overlayHost.swap(input, { onUnmount: () => finish(undefined, false) });\n\t\t\topts?.signal?.addEventListener(\"abort\", cancel, { once: true });\n\t\t});\n\t}\n\n\t/**\n\t * Hide the extension input.\n\t */\n\tprivate hideExtensionInput(input = this.extensionInput, restoreEditor = true): void {\n\t\tif (!input) return;\n\t\tinput.dispose();\n\t\tif (this.extensionInput !== input) return;\n\t\tthis.extensionInput = undefined;\n\t\tif (restoreEditor) this.ui.overlayHost.swap(this.ui.getEditor());\n\t}\n\n\t/**\n\t * Show a multi-line editor for extensions (with Ctrl+G support).\n\t */\n\tshowExtensionEditor(title: string, prefill?: string): Promise<string | undefined> {\n\t\tthis.activeExtensionDialogCancel?.();\n\t\treturn new Promise((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tlet editor: ExtensionEditorComponent;\n\t\t\tconst finish = (value: string | undefined, restoreEditor = true) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tif (this.activeExtensionDialogCancel === cancel) {\n\t\t\t\t\tthis.activeExtensionDialogCancel = undefined;\n\t\t\t\t}\n\t\t\t\tthis.hideExtensionEditor(editor, restoreEditor);\n\t\t\t\tresolve(value);\n\t\t\t};\n\t\t\tconst cancel = () => finish(undefined);\n\n\t\t\teditor = new ExtensionEditorComponent(\n\t\t\t\tthis.ui.tui,\n\t\t\t\tthis.ui.keybindings,\n\t\t\t\ttitle,\n\t\t\t\tprefill,\n\t\t\t\t(value) => finish(value),\n\t\t\t\tcancel,\n\t\t\t);\n\t\t\tthis.extensionEditor = editor;\n\t\t\tthis.activeExtensionDialogCancel = cancel;\n\t\t\tthis.ui.overlayHost.swap(editor, { onUnmount: () => finish(undefined, false) });\n\t\t});\n\t}\n\n\t/**\n\t * Hide the extension editor.\n\t */\n\tprivate hideExtensionEditor(editor = this.extensionEditor, restoreEditor = true): void {\n\t\tif (!editor || this.extensionEditor !== editor) return;\n\t\tthis.extensionEditor = undefined;\n\t\tif (restoreEditor) this.ui.overlayHost.swap(this.ui.getEditor());\n\t}\n\n\t/**\n\t * Set a custom editor component from an extension.\n\t * Pass undefined to restore the default editor.\n\t */\n\tprivate setCustomEditorComponent(factory: EditorFactory | undefined): void {\n\t\tthis.editorComponentFactory = factory;\n\n\t\t// Save text from current editor before switching\n\t\tconst currentText = this.ui.getEditor().getText();\n\n\t\tif (factory) {\n\t\t\t// Create the custom editor with tui, theme, and keybindings\n\t\t\tconst newEditor = factory(this.ui.tui, getEditorTheme(), this.ui.keybindings);\n\n\t\t\t// Wire up callbacks from the default editor\n\t\t\tnewEditor.onSubmit = this.ui.defaultEditor.onSubmit;\n\t\t\tnewEditor.onChange = this.ui.defaultEditor.onChange;\n\n\t\t\t// Copy text from previous editor\n\t\t\tnewEditor.setText(currentText);\n\n\t\t\t// Copy appearance settings if supported\n\t\t\tif (newEditor.borderColor !== undefined) {\n\t\t\t\tnewEditor.borderColor = this.ui.defaultEditor.borderColor;\n\t\t\t}\n\t\t\tif (newEditor.setPaddingX !== undefined) {\n\t\t\t\tnewEditor.setPaddingX(this.ui.defaultEditor.getPaddingX());\n\t\t\t}\n\n\t\t\t// Set autocomplete if supported\n\t\t\tconst autocompleteProvider = this.ui.getAutocompleteProvider();\n\t\t\tif (newEditor.setAutocompleteProvider && autocompleteProvider) {\n\t\t\t\tnewEditor.setAutocompleteProvider(autocompleteProvider);\n\t\t\t}\n\n\t\t\t// If extending CustomEditor, copy app-level handlers\n\t\t\t// Use duck typing since instanceof fails across jiti module boundaries\n\t\t\tconst customEditor = newEditor as unknown as Record<string, unknown>;\n\t\t\tif (\"actionHandlers\" in customEditor && customEditor.actionHandlers instanceof Map) {\n\t\t\t\tif (!customEditor.onEscape) {\n\t\t\t\t\tcustomEditor.onEscape = () => this.ui.defaultEditor.onEscape?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onCtrlD) {\n\t\t\t\t\tcustomEditor.onCtrlD = () => this.ui.defaultEditor.onCtrlD?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onPasteImage) {\n\t\t\t\t\tcustomEditor.onPasteImage = () => this.ui.defaultEditor.onPasteImage?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onExtensionShortcut) {\n\t\t\t\t\tcustomEditor.onExtensionShortcut = (data: string) => this.ui.defaultEditor.onExtensionShortcut?.(data);\n\t\t\t\t}\n\t\t\t\t// Copy action handlers (clear, suspend, model switching, etc.)\n\t\t\t\tfor (const [action, handler] of this.ui.defaultEditor.actionHandlers) {\n\t\t\t\t\t(customEditor.actionHandlers as Map<string, () => void>).set(action, handler);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.ui.setEditor(newEditor);\n\t\t} else {\n\t\t\t// Restore default editor with text from custom editor\n\t\t\tthis.ui.defaultEditor.setText(currentText);\n\t\t\tthis.ui.setEditor(this.ui.defaultEditor);\n\t\t}\n\n\t\tthis.ui.overlayHost.swap(this.ui.getEditor() as Component);\n\t}\n\n\t/**\n\t * Show a notification for extensions.\n\t */\n\tprivate showExtensionNotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void {\n\t\tif (type === \"error\") {\n\t\t\tthis.ui.showError(message);\n\t\t} else if (type === \"warning\") {\n\t\t\tthis.ui.showWarning(message);\n\t\t} else {\n\t\t\tthis.ui.showStatus(message);\n\t\t}\n\t}\n\n\t/** Show a custom component with keyboard focus. Overlay mode renders on top of existing content. */\n\tprivate async showExtensionCustom<T>(\n\t\tfactory: (\n\t\t\ttui: TUI,\n\t\t\ttheme: Theme,\n\t\t\tkeybindings: KeybindingsManager,\n\t\t\tdone: (result: T) => void,\n\t\t) => (Component & { dispose?(): void }) | Promise<Component & { dispose?(): void }>,\n\t\toptions?: {\n\t\t\toverlay?: boolean;\n\t\t\toverlayOptions?: OverlayOptions | (() => OverlayOptions);\n\t\t\tonHandle?: (handle: OverlayHandle) => void;\n\t\t},\n\t): Promise<T> {\n\t\tthis.activeExtensionDialogCancel?.();\n\t\tconst savedText = this.ui.getEditor().getText();\n\t\tconst isOverlay = options?.overlay ?? false;\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet component: (Component & { dispose?(): void }) | undefined;\n\t\t\tlet overlayHandle: OverlayHandle | undefined;\n\t\t\tlet closed = false;\n\t\t\tlet cancel: () => void;\n\t\t\tconst dispose = (candidate: (Component & { dispose?(): void }) | undefined) => {\n\t\t\t\ttry {\n\t\t\t\t\tcandidate?.dispose?.();\n\t\t\t\t} catch {\n\t\t\t\t\t/* ignore dispose errors */\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst restore = (restoreEditor = true) => {\n\t\t\t\tif (this.activeExtensionDialogCancel !== cancel) return;\n\t\t\t\tthis.activeExtensionDialogCancel = undefined;\n\t\t\t\tif (isOverlay) {\n\t\t\t\t\toverlayHandle?.hide();\n\t\t\t\t} else if (restoreEditor) {\n\t\t\t\t\tthis.ui.getEditor().setText(savedText);\n\t\t\t\t\tthis.ui.overlayHost.swap(this.ui.getEditor(), { focusMode: \"restore\" });\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst close = (result: T) => {\n\t\t\t\tif (closed) return;\n\t\t\t\tclosed = true;\n\t\t\t\tdispose(component);\n\t\t\t\trestore();\n\t\t\t\tresolve(result);\n\t\t\t};\n\t\t\tconst fail = (error: unknown, restoreEditor = true) => {\n\t\t\t\tif (closed) return;\n\t\t\t\tclosed = true;\n\t\t\t\tdispose(component);\n\t\t\t\trestore(restoreEditor);\n\t\t\t\treject(error);\n\t\t\t};\n\t\t\tcancel = () => fail(new Error(\"Extension UI request was superseded or reset\"));\n\t\t\tthis.activeExtensionDialogCancel = cancel;\n\t\t\tlet mountingComponent = false;\n\t\t\tconst onUnmount = () => {\n\t\t\t\tif (!mountingComponent) fail(new Error(\"Extension UI request was superseded or reset\"), false);\n\t\t\t};\n\t\t\tif (!isOverlay) {\n\t\t\t\tthis.ui.overlayHost.swap(this.ui.getEditor(), {\n\t\t\t\t\tfocusMode: \"restore\",\n\t\t\t\t\trender: \"none\",\n\t\t\t\t\tonUnmount,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tPromise.resolve()\n\t\t\t\t.then(() => (closed ? undefined : factory(this.ui.tui, theme, this.ui.keybindings, close)))\n\t\t\t\t.then((createdComponent) => {\n\t\t\t\t\tif (!createdComponent) return;\n\t\t\t\t\tcomponent = createdComponent;\n\t\t\t\t\tif (closed) {\n\t\t\t\t\t\tdispose(component);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (isOverlay) {\n\t\t\t\t\t\tconst resolvedOptions =\n\t\t\t\t\t\t\ttypeof options?.overlayOptions === \"function\" ? options.overlayOptions() : options?.overlayOptions;\n\t\t\t\t\t\tconst width = (component as { width?: number }).width;\n\t\t\t\t\t\toverlayHandle = this.ui.tui.showOverlay(\n\t\t\t\t\t\t\tcomponent,\n\t\t\t\t\t\t\tresolvedOptions ?? (width ? { width } : undefined),\n\t\t\t\t\t\t);\n\t\t\t\t\t\toptions?.onHandle?.(overlayHandle);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmountingComponent = true;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tthis.ui.overlayHost.swap(component, { onUnmount });\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tmountingComponent = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(fail);\n\t\t});\n\t}\n\n\t/**\n\t * Show an extension error in the UI.\n\t */\n\tshowExtensionError(extensionPath: string, error: string, stack?: string): void {\n\t\tconst errorMsg = `Extension \"${extensionPath}\" error: ${error}`;\n\t\tconst errorText = new Text(theme.fg(\"error\", errorMsg), 1, 0);\n\t\tthis.ui.chatContainer.addChild(errorText);\n\t\tif (stack) {\n\t\t\t// Show stack trace in dim color, indented\n\t\t\tconst stackLines = stack\n\t\t\t\t.split(\"\\n\")\n\t\t\t\t.slice(1) // Skip first line (duplicates error message)\n\t\t\t\t.map((line) => theme.fg(\"dim\", ` ${line.trim()}`))\n\t\t\t\t.join(\"\\n\");\n\t\t\tif (stackLines) {\n\t\t\t\tthis.ui.chatContainer.addChild(new Text(stackLines, 1, 0));\n\t\t\t}\n\t\t}\n\t\tthis.ui.tui.requestRender();\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"extension-ui-host.js","sourceRoot":"","sources":["../../../src/modes/interactive/extension-ui-host.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Extension UI host.\n *\n * Extracted verbatim from interactive-mode.ts (god-file decomposition). Owns the interactive-mode\n * surface of the extension UI API: extension-provided dialogs (selector / confirm / input / multi-line\n * editor / custom component), widget mounting above and below the editor, extension status text, custom\n * footer and header swaps, the custom editor-component swap, keyboard-shortcut wiring, terminal-input\n * listeners, and the `ExtensionUIContext` handed to extensions. It owns exactly the state this cluster\n * mutates (the live dialog components, the widget maps, the terminal-input unsubscribers, the custom\n * footer/header, and the current custom-editor factory) and reaches everything else — the mutable\n * `editor`, the render-core containers, the working-indicator, autocomplete wiring, theme/tools state —\n * through a narrow deps/ui surface rather than the whole InteractiveMode instance. Extensions must see\n * identical behavior, so the render-core operations (working indicator, hidden-thinking label,\n * autocomplete rebuild) stay host-side and are invoked here as delegations.\n */\n\nimport type {\n\tAutocompleteProvider,\n\tComponent,\n\tEditorComponent,\n\tKeyId,\n\tLoaderIndicatorOptions,\n\tOverlayHandle,\n\tOverlayOptions,\n} from \"@caupulican/pi-tui\";\nimport { Container, Editor, firstNonWhitespaceCharacter, matchesKey, Spacer, Text, type TUI } from \"@caupulican/pi-tui\";\nimport type { AgentSession } from \"../../core/agent-session.ts\";\nimport type {\n\tAutocompleteProviderFactory,\n\tEditorFactory,\n\tExtensionContext,\n\tExtensionRunner,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n} from \"../../core/extensions/index.ts\";\nimport type { FooterDataProvider, ReadonlyFooterDataProvider } from \"../../core/footer-data-provider.ts\";\nimport type { HumanInputPresentationRequest, HumanInputPresentationResult } from \"../../core/human-input.ts\";\nimport type { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport type { SessionImageStore } from \"../../core/session-image-store.ts\";\nimport { AskQuestionDialog } from \"../../core/tools/ask-question.ts\";\nimport { handleClipboardImagePaste } from \"./clipboard-input.ts\";\nimport type { CustomEditor } from \"./components/custom-editor.ts\";\nimport { ExtensionEditorComponent } from \"./components/extension-editor.ts\";\nimport { ExtensionInputComponent } from \"./components/extension-input.ts\";\nimport { ExtensionSelectorComponent } from \"./components/extension-selector.ts\";\nimport type { FooterComponent } from \"./components/footer.ts\";\nimport type { EditorOverlayHost } from \"./editor-overlay-host.ts\";\nimport {\n\tgetAvailableThemesWithPaths,\n\tgetEditorTheme,\n\tgetThemeByName,\n\tsetTheme,\n\tsetThemeInstance,\n\tTheme,\n\ttheme,\n} from \"./theme/theme.ts\";\n\n/** Components that can be expanded/collapsed (custom headers may opt in). */\ninterface Expandable {\n\tsetExpanded(expanded: boolean): void;\n}\n\nfunction isExpandable(obj: unknown): obj is Expandable {\n\treturn typeof obj === \"object\" && obj !== null && \"setExpanded\" in obj && typeof obj.setExpanded === \"function\";\n}\n\n/**\n * The narrow slice of InteractiveMode the extension UI host drives. Stable containers and the TUI are\n * passed directly; mutable render-core state (the active editor, built-in header, loading animation,\n * autocomplete wrappers, tools-expansion) is read/written through accessors so InteractiveMode keeps\n * ownership; and render-core / status operations stay host-side and are exposed here as callbacks.\n */\nexport interface ExtensionUiHostUi {\n\treadonly tui: TUI;\n\treadonly overlayHost: EditorOverlayHost;\n\treadonly keybindings: KeybindingsManager;\n\treadonly footer: FooterComponent;\n\treadonly footerDataProvider: FooterDataProvider;\n\treadonly headerContainer: Container;\n\treadonly chatContainer: Container;\n\treadonly defaultEditor: CustomEditor;\n\treadonly widgetContainerAbove: Container;\n\treadonly widgetContainerBelow: Container;\n\n\tgetEditor(): EditorComponent;\n\tsetEditor(editor: EditorComponent): void;\n\tgetBuiltInHeader(): Component | undefined;\n\tgetAutocompleteProvider(): AutocompleteProvider | undefined;\n\tgetClipboardImageStore(): Pick<SessionImageStore, \"write\"> | undefined;\n\tgetToolsExpanded(): boolean;\n\tpushAutocompleteProviderWrapper(factory: AutocompleteProviderFactory): void;\n\tresetAutocompleteProviderWrappers(): void;\n\n\tsetupAutocompleteProvider(): void;\n\tsetWorkingVisible(visible: boolean): void;\n\tsetWorkingIndicator(options?: LoaderIndicatorOptions): void;\n\tsetHiddenThinkingLabel(label?: string): void;\n\tsetWorkingMessage(message: string | undefined): void;\n\tresetWorkingIndicators(): void;\n\tsetToolsExpanded(expanded: boolean): void;\n\ttoggleToolsExpanded(): void;\n\tupdateTerminalTitle(): void;\n\tmarkShutdownRequested(): void;\n\tabort(): void;\n\treload(): Promise<void>;\n\tshowStatus(message: string): void;\n\tshowWarning(message: string): void;\n\tshowError(message: string): void;\n}\n\nexport interface ExtensionUiHostDeps {\n\tgetSession(): AgentSession;\n\tui: ExtensionUiHostUi;\n}\n\ntype DisposableComponent = Component & { dispose?(): void };\ntype WidgetPlacement = \"aboveEditor\" | \"belowEditor\";\n\nexport class ExtensionUiHost {\n\tprivate readonly deps: ExtensionUiHostDeps;\n\n\t// Extension UI state\n\tprivate extensionSelector: ExtensionSelectorComponent | undefined = undefined;\n\tprivate extensionInput: ExtensionInputComponent | undefined = undefined;\n\tprivate extensionEditor: ExtensionEditorComponent | undefined = undefined;\n\t/** Settles the mounted extension dialog before another dialog can replace its overlay. */\n\tprivate activeExtensionDialogCancel: (() => void) | undefined;\n\tprivate extensionTerminalInputUnsubscribers = new Set<() => void>();\n\n\t// Extension widgets (components rendered above/below the editor)\n\tprivate extensionWidgetsAbove = new Map<string, Component & { dispose?(): void }>();\n\tprivate extensionWidgetsBelow = new Map<string, Component & { dispose?(): void }>();\n\t// Host-owned widgets survive extension reloads and are cleared only by the owning interactive mode.\n\tprivate hostWidgetsAbove = new Map<string, DisposableComponent>();\n\tprivate hostWidgetsBelow = new Map<string, DisposableComponent>();\n\n\t// Custom footer from extension (undefined = use built-in footer)\n\tprivate customFooter: (Component & { dispose?(): void }) | undefined = undefined;\n\n\t// Custom header from extension (undefined = use built-in header)\n\tprivate customHeader: (Component & { dispose?(): void }) | undefined = undefined;\n\n\t// Current custom editor-component factory (undefined = default editor)\n\tprivate editorComponentFactory: EditorFactory | undefined;\n\n\tconstructor(deps: ExtensionUiHostDeps) {\n\t\tthis.deps = deps;\n\t}\n\n\tprivate get session(): AgentSession {\n\t\treturn this.deps.getSession();\n\t}\n\tprivate get ui(): ExtensionUiHostUi {\n\t\treturn this.deps.ui;\n\t}\n\n\t/** The active custom header, if an extension has installed one. */\n\tgetCustomHeader(): (Component & { dispose?(): void }) | undefined {\n\t\treturn this.customHeader;\n\t}\n\n\t/**\n\t * Set up keyboard shortcuts registered by extensions.\n\t */\n\tsetupExtensionShortcuts(extensionRunner: ExtensionRunner): void {\n\t\tconst shortcuts = extensionRunner.getShortcuts(this.ui.keybindings.getEffectiveConfig());\n\t\tif (shortcuts.size === 0) return;\n\n\t\t// Create a context for shortcut handlers\n\t\tconst createContext = (): ExtensionContext => ({\n\t\t\tui: this.createExtensionUIContext(),\n\t\t\thasUI: true,\n\t\t\tmode: \"tui\",\n\t\t\tcwd: this.session.sessionManager.getCwd(),\n\t\t\tsessionManager: this.session.sessionManager,\n\t\t\tmodelRegistry: this.session.modelRegistry,\n\t\t\tmodel: this.session.model,\n\t\t\tisIdle: () => !this.session.isStreaming,\n\t\t\tsignal: this.session.agent.signal,\n\t\t\tabort: () => {\n\t\t\t\tthis.ui.abort();\n\t\t\t},\n\t\t\thasPendingMessages: () => this.session.pendingMessageCount > 0,\n\t\t\tshutdown: () => {\n\t\t\t\tthis.ui.markShutdownRequested();\n\t\t\t},\n\t\t\tgetContextUsage: () => this.session.getContextUsage(),\n\t\t\tcompact: (options) => this.session.compactForExtension(options),\n\t\t\treload: async () => {\n\t\t\t\tawait this.ui.reload();\n\t\t\t},\n\t\t\tgetSystemPrompt: () => this.session.systemPrompt,\n\t\t});\n\n\t\t// Set up the extension shortcut handler on the default editor\n\t\tthis.ui.defaultEditor.onExtensionShortcut = (data: string) => {\n\t\t\tfor (const [shortcutStr, shortcut] of shortcuts) {\n\t\t\t\t// Cast to KeyId - extension shortcuts use the same format\n\t\t\t\tif (matchesKey(data, shortcutStr as KeyId)) {\n\t\t\t\t\t// Run handler async, don't block input\n\t\t\t\t\tPromise.resolve(shortcut.handler(createContext())).catch((err) => {\n\t\t\t\t\t\tthis.ui.showError(`Shortcut handler error: ${err instanceof Error ? err.message : String(err)}`);\n\t\t\t\t\t});\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n\n\t/**\n\t * Set extension status text in the footer.\n\t */\n\tprivate setExtensionStatus(key: string, text: string | undefined): void {\n\t\tthis.ui.footerDataProvider.setExtensionStatus(key, text);\n\t\tthis.ui.tui.requestRender();\n\t}\n\n\t// Maximum total widget lines to prevent viewport overflow\n\tprivate static readonly MAX_WIDGET_LINES = 10;\n\n\tprivate removeWidget(map: Map<string, DisposableComponent>, key: string): void {\n\t\tconst existing = map.get(key);\n\t\texisting?.dispose?.();\n\t\tmap.delete(key);\n\t}\n\n\t/** Mount a native host widget without coupling it to extension reload lifecycle. */\n\tsetHostWidget(key: string, component: DisposableComponent | undefined, placement: WidgetPlacement): void {\n\t\tthis.removeWidget(this.hostWidgetsAbove, key);\n\t\tthis.removeWidget(this.hostWidgetsBelow, key);\n\t\tif (component) {\n\t\t\tconst target = placement === \"belowEditor\" ? this.hostWidgetsBelow : this.hostWidgetsAbove;\n\t\t\ttarget.set(key, component);\n\t\t}\n\t\tthis.renderWidgets();\n\t}\n\n\tclearHostWidgets(): void {\n\t\tfor (const widget of this.hostWidgetsAbove.values()) widget.dispose?.();\n\t\tfor (const widget of this.hostWidgetsBelow.values()) widget.dispose?.();\n\t\tthis.hostWidgetsAbove.clear();\n\t\tthis.hostWidgetsBelow.clear();\n\t\tthis.renderWidgets();\n\t}\n\n\t/**\n\t * Set an extension widget (string array or custom component).\n\t */\n\tprivate setExtensionWidget(\n\t\tkey: string,\n\t\tcontent: string[] | ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined,\n\t\toptions?: ExtensionWidgetOptions,\n\t): void {\n\t\tconst placement = options?.placement ?? \"aboveEditor\";\n\t\tthis.removeWidget(this.extensionWidgetsAbove, key);\n\t\tthis.removeWidget(this.extensionWidgetsBelow, key);\n\n\t\tif (content === undefined) {\n\t\t\tthis.renderWidgets();\n\t\t\treturn;\n\t\t}\n\n\t\tlet component: Component & { dispose?(): void };\n\n\t\tif (Array.isArray(content)) {\n\t\t\t// Wrap string array in a Container with Text components\n\t\t\tconst container = new Container();\n\t\t\tfor (const line of content.slice(0, ExtensionUiHost.MAX_WIDGET_LINES)) {\n\t\t\t\tcontainer.addChild(new Text(line, 1, 0));\n\t\t\t}\n\t\t\tif (content.length > ExtensionUiHost.MAX_WIDGET_LINES) {\n\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"... (widget truncated)\"), 1, 0));\n\t\t\t}\n\t\t\tcomponent = container;\n\t\t} else {\n\t\t\t// Factory function - create component\n\t\t\tcomponent = content(this.ui.tui, theme);\n\t\t}\n\n\t\tconst targetMap = placement === \"belowEditor\" ? this.extensionWidgetsBelow : this.extensionWidgetsAbove;\n\t\ttargetMap.set(key, component);\n\t\tthis.renderWidgets();\n\t}\n\n\tprivate clearExtensionWidgets(): void {\n\t\tfor (const widget of this.extensionWidgetsAbove.values()) {\n\t\t\twidget.dispose?.();\n\t\t}\n\t\tfor (const widget of this.extensionWidgetsBelow.values()) {\n\t\t\twidget.dispose?.();\n\t\t}\n\t\tthis.extensionWidgetsAbove.clear();\n\t\tthis.extensionWidgetsBelow.clear();\n\t\tthis.renderWidgets();\n\t}\n\n\tresetExtensionUI(): void {\n\t\t// A reset/reload must settle the active dialog before disposing its component.\n\t\tthis.activeExtensionDialogCancel?.();\n\t\tthis.activeExtensionDialogCancel = undefined;\n\t\tif (this.extensionSelector) {\n\t\t\tthis.hideExtensionSelector();\n\t\t}\n\t\tif (this.extensionInput) {\n\t\t\tthis.hideExtensionInput();\n\t\t}\n\t\tif (this.extensionEditor) {\n\t\t\tthis.hideExtensionEditor();\n\t\t}\n\t\tthis.ui.tui.hideOverlay();\n\t\tthis.clearExtensionTerminalInputListeners();\n\t\tthis.setExtensionFooter(undefined);\n\t\tthis.setExtensionHeader(undefined);\n\t\tthis.clearExtensionWidgets();\n\t\tthis.ui.footerDataProvider.clearExtensionStatuses();\n\t\tthis.ui.footer.invalidate();\n\t\tthis.ui.resetAutocompleteProviderWrappers();\n\t\tthis.setCustomEditorComponent(undefined);\n\t\tthis.ui.setupAutocompleteProvider();\n\t\tthis.ui.defaultEditor.onExtensionShortcut = undefined;\n\t\tthis.ui.updateTerminalTitle();\n\t\tthis.ui.resetWorkingIndicators();\n\t}\n\n\t/**\n\t * Render all extension widgets to the widget container.\n\t */\n\trenderWidgets(): void {\n\t\tif (!this.ui.widgetContainerAbove || !this.ui.widgetContainerBelow) return;\n\t\tthis.renderWidgetContainer(\n\t\t\tthis.ui.widgetContainerAbove,\n\t\t\t[this.hostWidgetsAbove, this.extensionWidgetsAbove],\n\t\t\ttrue,\n\t\t\ttrue,\n\t\t);\n\t\tthis.renderWidgetContainer(\n\t\t\tthis.ui.widgetContainerBelow,\n\t\t\t[this.hostWidgetsBelow, this.extensionWidgetsBelow],\n\t\t\tfalse,\n\t\t\tfalse,\n\t\t);\n\t\tthis.ui.tui.requestRender();\n\t}\n\n\tprivate renderWidgetContainer(\n\t\tcontainer: Container,\n\t\twidgetGroups: readonly Map<string, DisposableComponent>[],\n\t\tspacerWhenEmpty: boolean,\n\t\tleadingSpacer: boolean,\n\t): void {\n\t\tcontainer.clear();\n\n\t\tif (widgetGroups.every((widgets) => widgets.size === 0)) {\n\t\t\tif (spacerWhenEmpty) {\n\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (leadingSpacer) {\n\t\t\tcontainer.addChild(new Spacer(1));\n\t\t}\n\t\tfor (const widgets of widgetGroups) {\n\t\t\tfor (const component of widgets.values()) {\n\t\t\t\tcontainer.addChild(component);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Set a custom footer component, or restore the built-in footer.\n\t */\n\tprivate setExtensionFooter(\n\t\tfactory:\n\t\t\t| ((tui: TUI, thm: Theme, footerData: ReadonlyFooterDataProvider) => Component & { dispose?(): void })\n\t\t\t| undefined,\n\t): void {\n\t\t// Dispose existing custom footer\n\t\tif (this.customFooter?.dispose) {\n\t\t\tthis.customFooter.dispose();\n\t\t}\n\n\t\t// Remove current footer from UI\n\t\tif (this.customFooter) {\n\t\t\tthis.ui.tui.removeChild(this.customFooter);\n\t\t} else {\n\t\t\tthis.ui.tui.removeChild(this.ui.footer);\n\t\t}\n\n\t\tif (factory) {\n\t\t\t// Create and add custom footer, passing the data provider\n\t\t\tthis.customFooter = factory(this.ui.tui, theme, this.ui.footerDataProvider);\n\t\t\tthis.ui.tui.addChild(this.customFooter);\n\t\t} else {\n\t\t\t// Restore built-in footer\n\t\t\tthis.customFooter = undefined;\n\t\t\tthis.ui.tui.addChild(this.ui.footer);\n\t\t}\n\n\t\tthis.ui.tui.requestRender();\n\t}\n\n\t/**\n\t * Set a custom header component, or restore the built-in header.\n\t */\n\tprivate setExtensionHeader(factory: ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined): void {\n\t\t// Header may not be initialized yet if called during early initialization\n\t\tconst builtInHeader = this.ui.getBuiltInHeader();\n\t\tif (!builtInHeader) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Dispose existing custom header\n\t\tif (this.customHeader?.dispose) {\n\t\t\tthis.customHeader.dispose();\n\t\t}\n\n\t\t// Find the index of the current header in the header container\n\t\tconst currentHeader = this.customHeader || builtInHeader;\n\t\tconst index = this.ui.headerContainer.children.indexOf(currentHeader);\n\n\t\tif (factory) {\n\t\t\t// Create and add custom header\n\t\t\tthis.customHeader = factory(this.ui.tui, theme);\n\t\t\tif (isExpandable(this.customHeader)) {\n\t\t\t\tthis.customHeader.setExpanded(this.ui.getToolsExpanded());\n\t\t\t}\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.ui.headerContainer.children[index] = this.customHeader;\n\t\t\t} else {\n\t\t\t\t// If not found (e.g. builtInHeader was never added), add at the top\n\t\t\t\tthis.ui.headerContainer.children.unshift(this.customHeader);\n\t\t\t}\n\t\t} else {\n\t\t\t// Restore built-in header\n\t\t\tthis.customHeader = undefined;\n\t\t\tif (isExpandable(builtInHeader)) {\n\t\t\t\tbuiltInHeader.setExpanded(this.ui.getToolsExpanded());\n\t\t\t}\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.ui.headerContainer.children[index] = builtInHeader;\n\t\t\t}\n\t\t}\n\n\t\tthis.ui.tui.requestRender();\n\t}\n\n\tprivate addExtensionTerminalInputListener(\n\t\thandler: (data: string) => { consume?: boolean; data?: string } | undefined,\n\t): () => void {\n\t\tconst unsubscribe = this.ui.tui.addInputListener(handler);\n\t\tthis.extensionTerminalInputUnsubscribers.add(unsubscribe);\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t\tthis.extensionTerminalInputUnsubscribers.delete(unsubscribe);\n\t\t};\n\t}\n\n\tclearExtensionTerminalInputListeners(): void {\n\t\tfor (const unsubscribe of this.extensionTerminalInputUnsubscribers) {\n\t\t\tunsubscribe();\n\t\t}\n\t\tthis.extensionTerminalInputUnsubscribers.clear();\n\t}\n\n\t/**\n\t * Create the ExtensionUIContext for extensions.\n\t */\n\tcreateExtensionUIContext(): ExtensionUIContext {\n\t\treturn {\n\t\t\taskQuestions: (request, opts) => this.showHumanInput(request, opts),\n\t\t\tselect: (title, options, opts) => this.showExtensionSelector(title, options, opts),\n\t\t\tconfirm: (title, message, opts) => this.showExtensionConfirm(title, message, opts),\n\t\t\tinput: (title, placeholder, opts) => this.showExtensionInput(title, placeholder, opts),\n\t\t\tnotify: (message, type) => this.showExtensionNotify(message, type),\n\t\t\tonTerminalInput: (handler) => this.addExtensionTerminalInputListener(handler),\n\t\t\tsetStatus: (key, text) => this.setExtensionStatus(key, text),\n\t\t\tsetWorkingMessage: (message) => this.ui.setWorkingMessage(message),\n\t\t\tsetWorkingVisible: (visible) => this.ui.setWorkingVisible(visible),\n\t\t\tsetWorkingIndicator: (options) => this.ui.setWorkingIndicator(options),\n\t\t\tsetHiddenThinkingLabel: (label) => this.ui.setHiddenThinkingLabel(label),\n\t\t\tsetWidget: (key, content, options) => this.setExtensionWidget(key, content, options),\n\t\t\tsetFooter: (factory) => this.setExtensionFooter(factory),\n\t\t\tsetHeader: (factory) => this.setExtensionHeader(factory),\n\t\t\tsetTitle: (title) => this.ui.tui.terminal.setTitle(title),\n\t\t\tcustom: (factory, options) => this.showExtensionCustom(factory, options),\n\t\t\tpasteToEditor: (text) => this.ui.getEditor().handleInput(`\\x1b[200~${text}\\x1b[201~`),\n\t\t\tsetEditorText: (text) => this.ui.getEditor().setText(text),\n\t\t\tgetEditorText: () => this.ui.getEditor().getExpandedText?.() ?? this.ui.getEditor().getText(),\n\t\t\teditor: (title, prefill) => this.showExtensionEditor(title, prefill),\n\t\t\taddAutocompleteProvider: (factory) => {\n\t\t\t\tthis.ui.pushAutocompleteProviderWrapper(factory);\n\t\t\t\tthis.ui.setupAutocompleteProvider();\n\t\t\t},\n\t\t\tsetEditorComponent: (factory) => this.setCustomEditorComponent(factory),\n\t\t\tgetEditorComponent: () => this.editorComponentFactory,\n\t\t\tget theme() {\n\t\t\t\treturn theme;\n\t\t\t},\n\t\t\tgetAllThemes: () => getAvailableThemesWithPaths(),\n\t\t\tgetTheme: (name) => getThemeByName(name),\n\t\t\tsetTheme: (themeOrName) => {\n\t\t\t\tif (themeOrName instanceof Theme) {\n\t\t\t\t\tsetThemeInstance(themeOrName);\n\t\t\t\t\tthis.ui.tui.requestRender();\n\t\t\t\t\treturn { success: true };\n\t\t\t\t}\n\t\t\t\tconst result = setTheme(themeOrName, true);\n\t\t\t\tif (result.success) {\n\t\t\t\t\tif (this.session.settingsManager.getTheme() !== themeOrName) {\n\t\t\t\t\t\tthis.session.settingsManager.setTheme(themeOrName);\n\t\t\t\t\t}\n\t\t\t\t\tthis.ui.tui.requestRender();\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tgetToolsExpanded: () => this.ui.getToolsExpanded(),\n\t\t\tsetToolsExpanded: (expanded) => this.ui.setToolsExpanded(expanded),\n\t\t};\n\t}\n\n\tprivate showHumanInput(\n\t\trequest: HumanInputPresentationRequest,\n\t\topts?: Pick<ExtensionUIDialogOptions, \"signal\">,\n\t): Promise<HumanInputPresentationResult> {\n\t\tif (opts?.signal?.aborted) {\n\t\t\treturn Promise.resolve({ answers: [], cancelled: true, reason: \"interrupted\", imageContents: [] });\n\t\t}\n\t\treturn this.showExtensionCustom<HumanInputPresentationResult>((tui, currentTheme, keybindings, done) => {\n\t\t\tlet onAbort: (() => void) | undefined;\n\t\t\tconst finish = (result: HumanInputPresentationResult) => {\n\t\t\t\tif (onAbort) opts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tdone(result);\n\t\t\t};\n\t\t\tconst settings = this.session.settingsManager;\n\t\t\tconst modelCannotSeeImages = !request.acceptsImages;\n\t\t\tconst dialog = new AskQuestionDialog({\n\t\t\t\tquestions: request.questions,\n\t\t\t\ttheme: currentTheme,\n\t\t\t\tkeybindings,\n\t\t\t\trequestRender: () => tui.requestRender(),\n\t\t\t\tfinish,\n\t\t\t\tcreateAnswerEditor: () => new Editor(tui, getEditorTheme()),\n\t\t\t\tclipboard: {\n\t\t\t\t\tautoResizeImages: settings.getImageAutoResize(),\n\t\t\t\t\tblockImages: settings.getBlockImages() || modelCannotSeeImages,\n\t\t\t\t\tblockImagesReason: modelCannotSeeImages\n\t\t\t\t\t\t? \"The selected model does not accept image input. Switch to an image-capable model or route this inspection to a vision worker.\"\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\timageStore: this.ui.getClipboardImageStore(),\n\t\t\t\t},\n\t\t\t\tpasteClipboardImage: handleClipboardImagePaste,\n\t\t\t});\n\t\t\tonAbort = () => dialog.cancel(\"interrupted\");\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\treturn dialog;\n\t\t}).catch(() => ({ answers: [], cancelled: true, reason: \"interrupted\", imageContents: [] }));\n\t}\n\n\t/**\n\t * Show a selector for extensions.\n\t */\n\tshowExtensionSelector(\n\t\ttitle: string,\n\t\toptions: string[],\n\t\topts?: ExtensionUIDialogOptions,\n\t): Promise<string | undefined> {\n\t\treturn this.showExtensionDialog(\n\t\t\topts,\n\t\t\t(finish, cancel) =>\n\t\t\t\tnew ExtensionSelectorComponent(title, options, finish, cancel, {\n\t\t\t\t\ttui: this.ui.tui,\n\t\t\t\t\ttimeout: opts?.timeout,\n\t\t\t\t\tonToggleToolsExpanded: () => this.ui.toggleToolsExpanded(),\n\t\t\t\t}),\n\t\t\t(selector) => {\n\t\t\t\tthis.extensionSelector = selector;\n\t\t\t},\n\t\t\t(selector, restoreEditor) => this.hideExtensionSelector(selector, restoreEditor),\n\t\t);\n\t}\n\n\t/**\n\t * Hide the extension selector.\n\t */\n\tprivate hideExtensionSelector(selector = this.extensionSelector, restoreEditor = true): void {\n\t\tif (!selector) return;\n\t\tselector.dispose();\n\t\tif (this.extensionSelector !== selector) return;\n\t\tthis.extensionSelector = undefined;\n\t\tif (restoreEditor) this.ui.overlayHost.swap(this.ui.getEditor());\n\t}\n\n\t/**\n\t * Show a confirmation dialog for extensions.\n\t */\n\tasync showExtensionConfirm(title: string, message: string, opts?: ExtensionUIDialogOptions): Promise<boolean> {\n\t\tconst result = await this.showExtensionSelector(`${title}\\n${message}`, [\"Yes\", \"No\"], opts);\n\t\treturn result === \"Yes\";\n\t}\n\n\t/**\n\t * Show a text input for extensions.\n\t */\n\tprivate showExtensionInput(\n\t\ttitle: string,\n\t\tplaceholder?: string,\n\t\topts?: ExtensionUIDialogOptions,\n\t): Promise<string | undefined> {\n\t\treturn this.showExtensionDialog(\n\t\t\topts,\n\t\t\t(finish, cancel) =>\n\t\t\t\tnew ExtensionInputComponent(title, placeholder, finish, cancel, {\n\t\t\t\t\ttui: this.ui.tui,\n\t\t\t\t\ttimeout: opts?.timeout,\n\t\t\t\t\tsensitive: opts?.sensitive,\n\t\t\t\t}),\n\t\t\t(input) => {\n\t\t\t\tthis.extensionInput = input;\n\t\t\t},\n\t\t\t(input, restoreEditor) => this.hideExtensionInput(input, restoreEditor),\n\t\t);\n\t}\n\n\tprivate showExtensionDialog<T, C extends Component>(\n\t\topts: ExtensionUIDialogOptions | undefined,\n\t\tcreate: (finish: (value: T) => void, cancel: () => void) => C,\n\t\tactivate: (component: C) => void,\n\t\thide: (component: C, restoreEditor: boolean) => void,\n\t): Promise<T | undefined> {\n\t\tif (opts?.signal?.aborted) return Promise.resolve(undefined);\n\t\t// Replacing an overlay without settling its promise strands the extension handler forever.\n\t\tthis.activeExtensionDialogCancel?.();\n\t\treturn new Promise((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tlet component: C;\n\t\t\tconst finish = (value: T | undefined, restoreEditor = true) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\topts?.signal?.removeEventListener(\"abort\", cancel);\n\t\t\t\tif (this.activeExtensionDialogCancel === cancel) {\n\t\t\t\t\tthis.activeExtensionDialogCancel = undefined;\n\t\t\t\t}\n\t\t\t\thide(component, restoreEditor);\n\t\t\t\tresolve(value);\n\t\t\t};\n\t\t\tconst cancel = () => finish(undefined);\n\n\t\t\tcomponent = create((value) => finish(value), cancel);\n\t\t\tactivate(component);\n\t\t\tthis.activeExtensionDialogCancel = cancel;\n\t\t\tthis.ui.overlayHost.swap(component, { onUnmount: () => finish(undefined, false) });\n\t\t\topts?.signal?.addEventListener(\"abort\", cancel, { once: true });\n\t\t});\n\t}\n\n\t/**\n\t * Hide the extension input.\n\t */\n\tprivate hideExtensionInput(input = this.extensionInput, restoreEditor = true): void {\n\t\tif (!input) return;\n\t\tinput.dispose();\n\t\tif (this.extensionInput !== input) return;\n\t\tthis.extensionInput = undefined;\n\t\tif (restoreEditor) this.ui.overlayHost.swap(this.ui.getEditor());\n\t}\n\n\t/**\n\t * Show a multi-line editor for extensions (with Ctrl+G support).\n\t */\n\tshowExtensionEditor(title: string, prefill?: string): Promise<string | undefined> {\n\t\tthis.activeExtensionDialogCancel?.();\n\t\treturn new Promise((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tlet editor: ExtensionEditorComponent;\n\t\t\tconst finish = (value: string | undefined, restoreEditor = true) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tif (this.activeExtensionDialogCancel === cancel) {\n\t\t\t\t\tthis.activeExtensionDialogCancel = undefined;\n\t\t\t\t}\n\t\t\t\tthis.hideExtensionEditor(editor, restoreEditor);\n\t\t\t\tresolve(value);\n\t\t\t};\n\t\t\tconst cancel = () => finish(undefined);\n\n\t\t\teditor = new ExtensionEditorComponent(\n\t\t\t\tthis.ui.tui,\n\t\t\t\tthis.ui.keybindings,\n\t\t\t\ttitle,\n\t\t\t\tprefill,\n\t\t\t\t(value) => finish(value),\n\t\t\t\tcancel,\n\t\t\t);\n\t\t\tthis.extensionEditor = editor;\n\t\t\tthis.activeExtensionDialogCancel = cancel;\n\t\t\tthis.ui.overlayHost.swap(editor, { onUnmount: () => finish(undefined, false) });\n\t\t});\n\t}\n\n\t/**\n\t * Hide the extension editor.\n\t */\n\tprivate hideExtensionEditor(editor = this.extensionEditor, restoreEditor = true): void {\n\t\tif (!editor || this.extensionEditor !== editor) return;\n\t\tthis.extensionEditor = undefined;\n\t\tif (restoreEditor) this.ui.overlayHost.swap(this.ui.getEditor());\n\t}\n\n\t/**\n\t * Set a custom editor component from an extension.\n\t * Pass undefined to restore the default editor.\n\t */\n\tprivate setCustomEditorComponent(factory: EditorFactory | undefined): void {\n\t\tthis.editorComponentFactory = factory;\n\n\t\t// Save text from current editor before switching\n\t\tconst currentText = this.ui.getEditor().getText();\n\n\t\tif (factory) {\n\t\t\t// Create the custom editor with tui, theme, and keybindings\n\t\t\tconst newEditor = factory(this.ui.tui, getEditorTheme(), this.ui.keybindings);\n\n\t\t\t// Wire up callbacks from the default editor\n\t\t\tnewEditor.onSubmit = this.ui.defaultEditor.onSubmit;\n\t\t\tif (newEditor.supportsChangeSummary) {\n\t\t\t\tnewEditor.onChange = this.ui.defaultEditor.onChange;\n\t\t\t\tnewEditor.onChangeSummary = this.ui.defaultEditor.onChangeSummary;\n\t\t\t} else {\n\t\t\t\tconst onChangeSummary = this.ui.defaultEditor.onChangeSummary;\n\t\t\t\tnewEditor.onChange =\n\t\t\t\t\tthis.ui.defaultEditor.onChange ??\n\t\t\t\t\t(onChangeSummary\n\t\t\t\t\t\t? (text) => onChangeSummary({ firstNonWhitespace: firstNonWhitespaceCharacter(text) })\n\t\t\t\t\t\t: undefined);\n\t\t\t}\n\n\t\t\t// Copy text from previous editor\n\t\t\tnewEditor.setText(currentText);\n\n\t\t\t// Copy appearance settings if supported\n\t\t\tif (newEditor.borderColor !== undefined) {\n\t\t\t\tnewEditor.borderColor = this.ui.defaultEditor.borderColor;\n\t\t\t}\n\t\t\tif (newEditor.setPaddingX !== undefined) {\n\t\t\t\tnewEditor.setPaddingX(this.ui.defaultEditor.getPaddingX());\n\t\t\t}\n\n\t\t\t// Set autocomplete if supported\n\t\t\tconst autocompleteProvider = this.ui.getAutocompleteProvider();\n\t\t\tif (newEditor.setAutocompleteProvider && autocompleteProvider) {\n\t\t\t\tnewEditor.setAutocompleteProvider(autocompleteProvider);\n\t\t\t}\n\n\t\t\t// If extending CustomEditor, copy app-level handlers\n\t\t\t// Use duck typing since instanceof fails across jiti module boundaries\n\t\t\tconst customEditor = newEditor as unknown as Record<string, unknown>;\n\t\t\tif (\"actionHandlers\" in customEditor && customEditor.actionHandlers instanceof Map) {\n\t\t\t\tif (!customEditor.onEscape) {\n\t\t\t\t\tcustomEditor.onEscape = () => this.ui.defaultEditor.onEscape?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onCtrlD) {\n\t\t\t\t\tcustomEditor.onCtrlD = () => this.ui.defaultEditor.onCtrlD?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onPasteImage) {\n\t\t\t\t\tcustomEditor.onPasteImage = () => this.ui.defaultEditor.onPasteImage?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onExtensionShortcut) {\n\t\t\t\t\tcustomEditor.onExtensionShortcut = (data: string) => this.ui.defaultEditor.onExtensionShortcut?.(data);\n\t\t\t\t}\n\t\t\t\t// Copy action handlers (clear, suspend, model switching, etc.)\n\t\t\t\tfor (const [action, handler] of this.ui.defaultEditor.actionHandlers) {\n\t\t\t\t\t(customEditor.actionHandlers as Map<string, () => void>).set(action, handler);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.ui.setEditor(newEditor);\n\t\t} else {\n\t\t\t// Restore default editor with text from custom editor\n\t\t\tthis.ui.defaultEditor.setText(currentText);\n\t\t\tthis.ui.setEditor(this.ui.defaultEditor);\n\t\t}\n\n\t\tthis.ui.overlayHost.swap(this.ui.getEditor() as Component);\n\t}\n\n\t/**\n\t * Show a notification for extensions.\n\t */\n\tprivate showExtensionNotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void {\n\t\tif (type === \"error\") {\n\t\t\tthis.ui.showError(message);\n\t\t} else if (type === \"warning\") {\n\t\t\tthis.ui.showWarning(message);\n\t\t} else {\n\t\t\tthis.ui.showStatus(message);\n\t\t}\n\t}\n\n\t/** Show a custom component with keyboard focus. Overlay mode renders on top of existing content. */\n\tprivate async showExtensionCustom<T>(\n\t\tfactory: (\n\t\t\ttui: TUI,\n\t\t\ttheme: Theme,\n\t\t\tkeybindings: KeybindingsManager,\n\t\t\tdone: (result: T) => void,\n\t\t) => (Component & { dispose?(): void }) | Promise<Component & { dispose?(): void }>,\n\t\toptions?: {\n\t\t\toverlay?: boolean;\n\t\t\toverlayOptions?: OverlayOptions | (() => OverlayOptions);\n\t\t\tonHandle?: (handle: OverlayHandle) => void;\n\t\t},\n\t): Promise<T> {\n\t\tthis.activeExtensionDialogCancel?.();\n\t\tconst savedText = this.ui.getEditor().getText();\n\t\tconst isOverlay = options?.overlay ?? false;\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet component: (Component & { dispose?(): void }) | undefined;\n\t\t\tlet overlayHandle: OverlayHandle | undefined;\n\t\t\tlet closed = false;\n\t\t\tlet cancel: () => void;\n\t\t\tconst dispose = (candidate: (Component & { dispose?(): void }) | undefined) => {\n\t\t\t\ttry {\n\t\t\t\t\tcandidate?.dispose?.();\n\t\t\t\t} catch {\n\t\t\t\t\t/* ignore dispose errors */\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst restore = (restoreEditor = true) => {\n\t\t\t\tif (this.activeExtensionDialogCancel !== cancel) return;\n\t\t\t\tthis.activeExtensionDialogCancel = undefined;\n\t\t\t\tif (isOverlay) {\n\t\t\t\t\toverlayHandle?.hide();\n\t\t\t\t} else if (restoreEditor) {\n\t\t\t\t\tthis.ui.getEditor().setText(savedText);\n\t\t\t\t\tthis.ui.overlayHost.swap(this.ui.getEditor(), { focusMode: \"restore\" });\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst close = (result: T) => {\n\t\t\t\tif (closed) return;\n\t\t\t\tclosed = true;\n\t\t\t\tdispose(component);\n\t\t\t\trestore();\n\t\t\t\tresolve(result);\n\t\t\t};\n\t\t\tconst fail = (error: unknown, restoreEditor = true) => {\n\t\t\t\tif (closed) return;\n\t\t\t\tclosed = true;\n\t\t\t\tdispose(component);\n\t\t\t\trestore(restoreEditor);\n\t\t\t\treject(error);\n\t\t\t};\n\t\t\tcancel = () => fail(new Error(\"Extension UI request was superseded or reset\"));\n\t\t\tthis.activeExtensionDialogCancel = cancel;\n\t\t\tlet mountingComponent = false;\n\t\t\tconst onUnmount = () => {\n\t\t\t\tif (!mountingComponent) fail(new Error(\"Extension UI request was superseded or reset\"), false);\n\t\t\t};\n\t\t\tif (!isOverlay) {\n\t\t\t\tthis.ui.overlayHost.swap(this.ui.getEditor(), {\n\t\t\t\t\tfocusMode: \"restore\",\n\t\t\t\t\trender: \"none\",\n\t\t\t\t\tonUnmount,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tPromise.resolve()\n\t\t\t\t.then(() => (closed ? undefined : factory(this.ui.tui, theme, this.ui.keybindings, close)))\n\t\t\t\t.then((createdComponent) => {\n\t\t\t\t\tif (!createdComponent) return;\n\t\t\t\t\tcomponent = createdComponent;\n\t\t\t\t\tif (closed) {\n\t\t\t\t\t\tdispose(component);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (isOverlay) {\n\t\t\t\t\t\tconst resolvedOptions =\n\t\t\t\t\t\t\ttypeof options?.overlayOptions === \"function\" ? options.overlayOptions() : options?.overlayOptions;\n\t\t\t\t\t\tconst width = (component as { width?: number }).width;\n\t\t\t\t\t\toverlayHandle = this.ui.tui.showOverlay(\n\t\t\t\t\t\t\tcomponent,\n\t\t\t\t\t\t\tresolvedOptions ?? (width ? { width } : undefined),\n\t\t\t\t\t\t);\n\t\t\t\t\t\toptions?.onHandle?.(overlayHandle);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmountingComponent = true;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tthis.ui.overlayHost.swap(component, { onUnmount });\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tmountingComponent = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(fail);\n\t\t});\n\t}\n\n\t/**\n\t * Show an extension error in the UI.\n\t */\n\tshowExtensionError(extensionPath: string, error: string, stack?: string): void {\n\t\tconst errorMsg = `Extension \"${extensionPath}\" error: ${error}`;\n\t\tconst errorText = new Text(theme.fg(\"error\", errorMsg), 1, 0);\n\t\tthis.ui.chatContainer.addChild(errorText);\n\t\tif (stack) {\n\t\t\t// Show stack trace in dim color, indented\n\t\t\tconst stackLines = stack\n\t\t\t\t.split(\"\\n\")\n\t\t\t\t.slice(1) // Skip first line (duplicates error message)\n\t\t\t\t.map((line) => theme.fg(\"dim\", ` ${line.trim()}`))\n\t\t\t\t.join(\"\\n\");\n\t\t\tif (stackLines) {\n\t\t\t\tthis.ui.chatContainer.addChild(new Text(stackLines, 1, 0));\n\t\t\t}\n\t\t}\n\t\tthis.ui.tui.requestRender();\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-editor.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/external-editor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"external-editor.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/external-editor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAM/D,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,eAAe,CAAC,CAAC;IAC3D,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAC;AAMlG;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAqBxG;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhF;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAqCpG"}
|
|
@@ -12,6 +12,7 @@ import * as fs from "node:fs";
|
|
|
12
12
|
import * as path from "node:path";
|
|
13
13
|
import { getAgentDir } from "../../config.js";
|
|
14
14
|
import { runExternalEditor } from "../../utils/external-editor-command.js";
|
|
15
|
+
import { waitForStdinEvent } from "../../utils/stdin-events.js";
|
|
15
16
|
import { getProcessWorkRun } from "../../utils/work-directory.js";
|
|
16
17
|
function resolveEditorCommand() {
|
|
17
18
|
return process.env.VISUAL || process.env.EDITOR;
|
|
@@ -84,21 +85,7 @@ export async function openEditorForPath(host, filePath) {
|
|
|
84
85
|
process.stdout.write(`Please set the $EDITOR or $VISUAL environment variable to edit inline.\n`);
|
|
85
86
|
process.stdout.write(`Absolute file path: ${filePath}\n\nPress Enter to return to Pi...`);
|
|
86
87
|
// Wait for enter, but do not remain pending if stdin closes during shutdown.
|
|
87
|
-
await
|
|
88
|
-
let settled = false;
|
|
89
|
-
const finish = () => {
|
|
90
|
-
if (settled)
|
|
91
|
-
return;
|
|
92
|
-
settled = true;
|
|
93
|
-
process.stdin.removeListener("data", finish);
|
|
94
|
-
process.stdin.removeListener("end", finish);
|
|
95
|
-
process.stdin.removeListener("error", finish);
|
|
96
|
-
resolve();
|
|
97
|
-
};
|
|
98
|
-
process.stdin.once("data", finish);
|
|
99
|
-
process.stdin.once("end", finish);
|
|
100
|
-
process.stdin.once("error", finish);
|
|
101
|
-
});
|
|
88
|
+
await waitForStdinEvent();
|
|
102
89
|
}
|
|
103
90
|
return status === 0;
|
|
104
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-editor.js","sourceRoot":"","sources":["../../../src/modes/interactive/external-editor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAelE,SAAS,oBAAoB
|
|
1
|
+
{"version":3,"file":"external-editor.js","sourceRoot":"","sources":["../../../src/modes/interactive/external-editor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * External-editor launch flows extracted from interactive-mode.\n *\n * `openExternalEditor` edits the current editor buffer in `$VISUAL`/`$EDITOR`;\n * `openEditorForPath` opens an arbitrary file (falling back to `vi`). Both stop\n * the TUI to release the terminal, spawn the editor, and restart the TUI with a\n * forced full re-render. They operate through a narrow `ExternalEditorHost` seam;\n * interactive-mode keeps thin delegating wrappers.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { EditorComponent, TUI } from \"@caupulican/pi-tui\";\nimport { getAgentDir } from \"../../config.ts\";\nimport { runExternalEditor } from \"../../utils/external-editor-command.ts\";\nimport { waitForStdinEvent } from \"../../utils/stdin-events.ts\";\nimport { getProcessWorkRun } from \"../../utils/work-directory.ts\";\n\nexport interface ExternalEditorHost {\n\treadonly editor: EditorComponent;\n\treadonly ui: Pick<TUI, \"stop\" | \"start\" | \"requestRender\">;\n\tshowWarning(message: string): void;\n}\n\nexport interface ExternalEditorOptions {\n\tcommand: string;\n\tcontent: string;\n}\n\nexport type ExternalEditorResult = { status: \"complete\"; content: string } | { status: \"failed\" };\n\nfunction resolveEditorCommand(): string | undefined {\n\treturn process.env.VISUAL || process.env.EDITOR;\n}\n\n/**\n * Edit text through the configured external editor while keeping all temporary\n * artifacts inside Pi's bounded user-level work directory.\n */\nexport async function editInExternalEditor(options: ExternalEditorOptions): Promise<ExternalEditorResult> {\n\tconst tmpFile = path.join(\n\t\tgetProcessWorkRun(getAgentDir(), \"editors\", \"external\").path,\n\t\t`pi-editor-${randomUUID()}.pi.md`,\n\t);\n\n\ttry {\n\t\tfs.writeFileSync(tmpFile, options.content, \"utf-8\");\n\t\tprocess.stdout.write(`Launching external editor: ${options.command}\\nPi will resume when the editor exits.\\n`);\n\t\tconst status = await runExternalEditor(options.command, tmpFile);\n\t\tif (status !== 0) {\n\t\t\treturn { status: \"failed\" };\n\t\t}\n\t\treturn { status: \"complete\", content: fs.readFileSync(tmpFile, \"utf-8\").replace(/\\n$/, \"\") };\n\t} finally {\n\t\ttry {\n\t\t\tfs.unlinkSync(tmpFile);\n\t\t} catch {\n\t\t\t// Cleanup is best effort.\n\t\t}\n\t}\n}\n\nexport async function openExternalEditor(host: ExternalEditorHost): Promise<void> {\n\tconst editorCmd = resolveEditorCommand();\n\tif (!editorCmd) {\n\t\thost.showWarning(\"No editor configured. Set $VISUAL or $EDITOR environment variable.\");\n\t\treturn;\n\t}\n\n\tconst currentText = host.editor.getExpandedText?.() ?? host.editor.getText();\n\n\ttry {\n\t\t// Stop TUI to release terminal\n\t\thost.ui.stop();\n\n\t\tconst result = await editInExternalEditor({ command: editorCmd, content: currentText });\n\t\tif (result.status === \"complete\") {\n\t\t\thost.editor.setText(result.content);\n\t\t}\n\t} finally {\n\t\t// Restart TUI\n\t\thost.ui.start();\n\t\t// Force full re-render since external editor uses alternate screen\n\t\thost.ui.requestRender(true);\n\t}\n}\n\nexport async function openEditorForPath(host: ExternalEditorHost, filePath: string): Promise<boolean> {\n\tlet editorCmd = resolveEditorCommand();\n\tlet isFallback = false;\n\tif (!editorCmd) {\n\t\teditorCmd = \"vi\";\n\t\tisFallback = true;\n\t}\n\n\ttry {\n\t\t// Stop TUI to release terminal\n\t\thost.ui.stop();\n\n\t\tprocess.stdout.write(\n\t\t\t`Launching external editor: ${editorCmd} ${filePath}\\nPi will resume when the editor exits.\\n`,\n\t\t);\n\n\t\tconst status = await runExternalEditor(editorCmd, filePath);\n\n\t\tif (status === null) {\n\t\t\tif (isFallback) {\n\t\t\t\tprocess.stdout.write(`\\nError: Failed to launch fallback editor \"vi\".\\n`);\n\t\t\t} else {\n\t\t\t\tprocess.stdout.write(`\\nError: Failed to launch editor \"${editorCmd}\".\\n`);\n\t\t\t}\n\t\t\tprocess.stdout.write(`Please set the $EDITOR or $VISUAL environment variable to edit inline.\\n`);\n\t\t\tprocess.stdout.write(`Absolute file path: ${filePath}\\n\\nPress Enter to return to Pi...`);\n\t\t\t// Wait for enter, but do not remain pending if stdin closes during shutdown.\n\t\t\tawait waitForStdinEvent();\n\t\t}\n\n\t\treturn status === 0;\n\t} finally {\n\t\t// Restart TUI\n\t\thost.ui.start();\n\t\t// Force full re-render since external editor uses alternate screen\n\t\thost.ui.requestRender(true);\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-reload-math.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/history-reload-math.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,eAAO,MAAM,4BAA4B,OAAO,CAAC;AACjD,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAEjD,MAAM,WAAW,uBAAuB;IACvC,0FAA0F;IAC1F,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAWvD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAO3D;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAoBtE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,GAAE,uBAA4B,GAAG,MAAM,CAY5G;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAaxF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,GAAG,YAAY,CAgB1G;AAED,wBAAgB,2BAA2B,CAC1C,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,GAAE,uBAA4B,GACnC;IACF,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACvB,CA6BA"
|
|
1
|
+
{"version":3,"file":"history-reload-math.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/history-reload-math.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,eAAO,MAAM,4BAA4B,OAAO,CAAC;AACjD,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAEjD,MAAM,WAAW,uBAAuB;IACvC,0FAA0F;IAC1F,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAWvD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAO3D;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAoBtE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,GAAE,uBAA4B,GAAG,MAAM,CAY5G;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAaxF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,GAAG,YAAY,CAgB1G;AAED,wBAAgB,2BAA2B,CAC1C,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,GAAE,uBAA4B,GACnC;IACF,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACvB,CA6BA"}
|