@bastani/atomic 0.9.4 → 0.9.5-alpha.10
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 +136 -2
- package/README.md +2 -2
- package/dist/builtin/cursor/CHANGELOG.md +6 -0
- package/dist/builtin/cursor/package.json +3 -3
- package/dist/builtin/cursor/src/model-mapper.ts +6 -3
- package/dist/builtin/intercom/CHANGELOG.md +31 -0
- package/dist/builtin/intercom/README.md +29 -21
- package/dist/builtin/intercom/broker/broker.ts +9 -120
- package/dist/builtin/intercom/broker/client.ts +29 -54
- package/dist/builtin/intercom/broker/delivered-message-cache.ts +44 -0
- package/dist/builtin/intercom/broker/paths.ts +42 -5
- package/dist/builtin/intercom/broker/pending-send-registry.ts +142 -0
- package/dist/builtin/intercom/broker/send-handler.ts +106 -0
- package/dist/builtin/intercom/broker/send-signature.ts +37 -0
- package/dist/builtin/intercom/broker/spawn.ts +78 -10
- package/dist/builtin/intercom/config.ts +6 -3
- package/dist/builtin/intercom/contact-supervisor-tool.ts +6 -4
- package/dist/builtin/intercom/foreground-detach-handoff.ts +136 -0
- package/dist/builtin/intercom/index-heavy.ts +50 -54
- package/dist/builtin/intercom/index.ts +320 -272
- package/dist/builtin/intercom/intercom-tool.ts +9 -3
- package/dist/builtin/intercom/lazy-heavy-proxy.ts +114 -0
- package/dist/builtin/intercom/lazy-subagent-ack.ts +20 -0
- package/dist/builtin/intercom/lazy-tool-execution.ts +39 -0
- package/dist/builtin/intercom/lifecycle-lease.ts +51 -0
- package/dist/builtin/intercom/lifecycle.ts +37 -20
- package/dist/builtin/intercom/package.json +12 -6
- package/dist/builtin/intercom/reply-routing.ts +17 -0
- package/dist/builtin/intercom/result-renderers.ts +1 -1
- package/dist/builtin/intercom/subagent-relay.ts +58 -12
- package/dist/builtin/intercom/types.ts +3 -3
- package/dist/builtin/intercom/ui/compose.ts +2 -2
- package/dist/builtin/intercom/ui/inline-message.ts +2 -2
- package/dist/builtin/intercom/ui/session-list.ts +2 -2
- package/dist/builtin/mcp/CHANGELOG.md +23 -0
- package/dist/builtin/mcp/OAUTH.md +1 -0
- package/dist/builtin/mcp/README.md +10 -6
- package/dist/builtin/mcp/apps-cancellation.ts +32 -0
- package/dist/builtin/mcp/call-tool-result.ts +9 -0
- package/dist/builtin/mcp/caller-wait.ts +50 -0
- package/dist/builtin/mcp/command-registration.ts +82 -0
- package/dist/builtin/mcp/direct-tool-executor.ts +279 -0
- package/dist/builtin/mcp/direct-tools.ts +40 -255
- package/dist/builtin/mcp/host-html-template.ts +4 -2
- package/dist/builtin/mcp/index.ts +274 -239
- package/dist/builtin/mcp/init.ts +96 -126
- package/dist/builtin/mcp/mcp-auth-flow.ts +247 -237
- package/dist/builtin/mcp/mcp-callback-server.ts +89 -68
- package/dist/builtin/mcp/mcp-oauth-provider.ts +23 -1
- package/dist/builtin/mcp/metadata-hydration.ts +52 -0
- package/dist/builtin/mcp/package.json +3 -3
- package/dist/builtin/mcp/proxy-auth.ts +4 -4
- package/dist/builtin/mcp/proxy-call.ts +111 -40
- package/dist/builtin/mcp/proxy-connect.ts +35 -15
- package/dist/builtin/mcp/proxy-info-modes.ts +106 -23
- package/dist/builtin/mcp/proxy-modes.ts +3 -3
- package/dist/builtin/mcp/session-cleanup-barrier.ts +43 -0
- package/dist/builtin/mcp/startup-warmup.ts +98 -0
- package/dist/builtin/mcp/state-lease.ts +12 -0
- package/dist/builtin/mcp/tool-result-renderer.ts +3 -3
- package/dist/builtin/mcp/ui-server.ts +8 -8
- package/dist/builtin/mcp/ui-session.ts +9 -18
- package/dist/builtin/subagents/CHANGELOG.md +60 -0
- package/dist/builtin/subagents/README.md +30 -29
- package/dist/builtin/subagents/agents/code-simplifier.md +2 -2
- package/dist/builtin/subagents/agents/codebase-analyzer.md +2 -2
- package/dist/builtin/subagents/agents/codebase-locator.md +2 -2
- package/dist/builtin/subagents/agents/codebase-online-researcher.md +2 -2
- package/dist/builtin/subagents/agents/codebase-pattern-finder.md +2 -2
- package/dist/builtin/subagents/agents/codebase-research-analyzer.md +2 -2
- package/dist/builtin/subagents/agents/codebase-research-locator.md +2 -2
- package/dist/builtin/subagents/agents/debugger.md +2 -2
- package/dist/builtin/subagents/agents/worker.md +2 -2
- package/dist/builtin/subagents/package.json +5 -5
- package/dist/builtin/subagents/prompts/review-loop.md +1 -1
- package/dist/builtin/subagents/skills/subagent/SKILL.md +37 -36
- package/dist/builtin/subagents/src/extension/api-lifecycle.ts +64 -0
- package/dist/builtin/subagents/src/extension/fanout-child.ts +44 -51
- package/dist/builtin/subagents/src/extension/index.ts +289 -320
- package/dist/builtin/subagents/src/extension/prompt-guidance.ts +7 -10
- package/dist/builtin/subagents/src/extension/schemas.ts +22 -5
- package/dist/builtin/subagents/src/extension/startup-maintenance.ts +89 -0
- package/dist/builtin/subagents/src/extension/tool-description.ts +29 -0
- package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +13 -2
- package/dist/builtin/subagents/src/intercom/result-intercom.ts +4 -4
- package/dist/builtin/subagents/src/runs/background/async-event-journal.ts +106 -0
- package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +26 -20
- package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +13 -2
- package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +3 -0
- package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +1 -1
- package/dist/builtin/subagents/src/runs/background/completion-claims.ts +189 -0
- package/dist/builtin/subagents/src/runs/background/completion-dedupe.ts +44 -7
- package/dist/builtin/subagents/src/runs/background/completion-notification.ts +34 -0
- package/dist/builtin/subagents/src/runs/background/notify.ts +72 -22
- package/dist/builtin/subagents/src/runs/background/result-delivery-processor.ts +232 -0
- package/dist/builtin/subagents/src/runs/background/result-file-claims.ts +151 -0
- package/dist/builtin/subagents/src/runs/background/result-quarantine.ts +72 -0
- package/dist/builtin/subagents/src/runs/background/result-retry-scheduler.ts +48 -0
- package/dist/builtin/subagents/src/runs/background/result-status.ts +81 -0
- package/dist/builtin/subagents/src/runs/background/result-watcher-data.ts +59 -0
- package/dist/builtin/subagents/src/runs/background/result-watcher.ts +177 -233
- package/dist/builtin/subagents/src/runs/background/run-id-resolver.ts +3 -2
- package/dist/builtin/subagents/src/runs/background/stale-run-reconciler.ts +73 -14
- package/dist/builtin/subagents/src/runs/background/subagent-runner-streaming.ts +29 -15
- package/dist/builtin/subagents/src/runs/background/top-level-async.ts +1 -2
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +1 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +1 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +1 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +7 -9
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +3 -13
- package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +2 -15
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt-finalize.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +63 -46
- package/dist/builtin/subagents/src/runs/foreground/execution-detach-reservations.ts +48 -0
- package/dist/builtin/subagents/src/runs/foreground/execution-detach-route.ts +17 -0
- package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +39 -26
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +3 -1
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +3 -51
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +6 -11
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +11 -2
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +2 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +5 -112
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +2 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +68 -118
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +79 -7
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +3 -0
- package/dist/builtin/subagents/src/runs/shared/pi-args.ts +2 -2
- package/dist/builtin/subagents/src/runs/shared/pi-spawn.ts +55 -12
- package/dist/builtin/subagents/src/shared/artifacts.ts +22 -11
- package/dist/builtin/subagents/src/shared/event-jsonl-writer.ts +294 -0
- package/dist/builtin/subagents/src/shared/exclusive-file-publication.ts +44 -0
- package/dist/builtin/subagents/src/shared/jsonl-writer.ts +1 -0
- package/dist/builtin/subagents/src/shared/model-info.ts +2 -2
- package/dist/builtin/subagents/src/shared/settings.ts +20 -10
- package/dist/builtin/subagents/src/shared/types-async.ts +3 -1
- package/dist/builtin/subagents/src/shared/types-config.ts +2 -0
- package/dist/builtin/subagents/src/shared/types-runtime.ts +3 -2
- package/dist/builtin/subagents/src/slash/slash-commands.ts +9 -12
- package/dist/builtin/subagents/src/slash/slash-live-state.ts +63 -32
- package/dist/builtin/subagents/src/tui/render-event-formatting.ts +15 -48
- package/dist/builtin/subagents/src/tui/render-layout.ts +9 -0
- package/dist/builtin/subagents/src/tui/render-result.ts +7 -0
- package/dist/builtin/subagents/src/tui/render-stable-output.ts +1 -0
- package/dist/builtin/subagents/src/tui/render-widget-graph.ts +27 -25
- package/dist/builtin/subagents/src/tui/render-widget.ts +177 -132
- package/dist/builtin/subagents/src/tui/render.ts +1 -1
- package/dist/builtin/web-access/CHANGELOG.md +14 -0
- package/dist/builtin/web-access/README.md +4 -0
- package/dist/builtin/web-access/content-tools.ts +8 -3
- package/dist/builtin/web-access/index-heavy.ts +1 -1
- package/dist/builtin/web-access/index.ts +190 -46
- package/dist/builtin/web-access/lifecycle-lease.ts +38 -0
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/web-access/result-renderers.ts +1 -1
- package/dist/builtin/web-access/summary-review.ts +1 -1
- package/dist/builtin/web-access/web-search-activity.ts +1 -1
- package/dist/builtin/web-access/web-search-return.ts +7 -0
- package/dist/builtin/web-access/web-search-summary.ts +1 -1
- package/dist/builtin/web-access/web-search-tool.ts +4 -2
- package/dist/builtin/workflows/CHANGELOG.md +98 -0
- package/dist/builtin/workflows/README.md +20 -16
- package/dist/builtin/workflows/builtin/deep-research-codebase-utils.ts +33 -9
- package/dist/builtin/workflows/builtin/goal-artifacts.ts +3 -1
- package/dist/builtin/workflows/builtin/goal-ledger.ts +3 -0
- package/dist/builtin/workflows/builtin/goal-prompts.ts +39 -5
- package/dist/builtin/workflows/builtin/goal-reducer.ts +21 -0
- package/dist/builtin/workflows/builtin/goal-reports.ts +23 -0
- package/dist/builtin/workflows/builtin/goal-review.ts +85 -6
- package/dist/builtin/workflows/builtin/goal-runner.ts +122 -49
- package/dist/builtin/workflows/builtin/goal-schemas.ts +22 -0
- package/dist/builtin/workflows/builtin/goal-types.ts +25 -1
- package/dist/builtin/workflows/builtin/goal.d.ts +5 -0
- package/dist/builtin/workflows/builtin/goal.ts +13 -2
- package/dist/builtin/workflows/builtin/index.d.ts +8 -0
- package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +16 -5
- package/dist/builtin/workflows/builtin/ralph-core.ts +100 -15
- package/dist/builtin/workflows/builtin/ralph-models.ts +98 -66
- package/dist/builtin/workflows/builtin/ralph-review-gate.ts +37 -5
- package/dist/builtin/workflows/builtin/ralph-reviewer-prompt.ts +159 -0
- package/dist/builtin/workflows/builtin/ralph-runner.ts +75 -165
- package/dist/builtin/workflows/builtin/ralph.d.ts +3 -0
- package/dist/builtin/workflows/builtin/ralph.ts +4 -1
- package/dist/builtin/workflows/builtin/review-convergence.ts +111 -0
- package/dist/builtin/workflows/builtin/shared-prompts.ts +20 -1
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/skills/create-spec/SKILL.md +2 -0
- package/dist/builtin/workflows/skills/impeccable/SKILL.md +16 -13
- package/dist/builtin/workflows/skills/impeccable/reference/adapt.md +1 -0
- package/dist/builtin/workflows/skills/impeccable/reference/adapt.native.md +58 -0
- package/dist/builtin/workflows/skills/impeccable/reference/android.md +40 -0
- package/dist/builtin/workflows/skills/impeccable/reference/animate.md +2 -0
- package/dist/builtin/workflows/skills/impeccable/reference/audit.md +2 -0
- package/dist/builtin/workflows/skills/impeccable/reference/audit.native.md +139 -0
- package/dist/builtin/workflows/skills/impeccable/reference/bolder.md +69 -62
- package/dist/builtin/workflows/skills/impeccable/reference/critique.md +21 -7
- package/dist/builtin/workflows/skills/impeccable/reference/document.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +92 -0
- package/dist/builtin/workflows/skills/impeccable/reference/init.md +29 -7
- package/dist/builtin/workflows/skills/impeccable/reference/ios.md +45 -0
- package/dist/builtin/workflows/skills/impeccable/reference/layout.md +25 -1
- package/dist/builtin/workflows/skills/impeccable/reference/typeset.md +23 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/context-signals.mjs +2 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/context.mjs +75 -14
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/browser/injected/index.mjs +1 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/cli/main.mjs +31 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/design-system.mjs +64 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +118 -11
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +16 -11
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/registry/antipatterns.mjs +66 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +42 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/fonts.mjs +30 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/page.mjs +4 -6
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-admin.mjs +660 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-before-edit.mjs +516 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-lib.mjs +1764 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/hook.mjs +61 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-config.mjs +4 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/is-generated.mjs +2 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/live/svelte-component.mjs +13 -16
- package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +17 -11
- package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +104 -37
- package/dist/builtin/workflows/skills/impeccable/scripts/live-wrap.mjs +9 -0
- package/dist/builtin/workflows/src/durable/backend.ts +12 -0
- package/dist/builtin/workflows/src/durable/child-primitive.ts +12 -8
- package/dist/builtin/workflows/src/durable/dbos-backend.ts +63 -2
- package/dist/builtin/workflows/src/durable/dbos-envelope.ts +28 -0
- package/dist/builtin/workflows/src/durable/resume-catalog.ts +12 -0
- package/dist/builtin/workflows/src/durable/resume-runtime.ts +5 -2
- package/dist/builtin/workflows/src/durable/stage-primitive.ts +167 -28
- package/dist/builtin/workflows/src/durable/types.ts +30 -1
- package/dist/builtin/workflows/src/engine/primitives/task.ts +3 -1
- package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +1 -2
- package/dist/builtin/workflows/src/engine/run-returned-status.ts +50 -16
- package/dist/builtin/workflows/src/engine/run.ts +32 -32
- package/dist/builtin/workflows/src/engine/runtime.ts +5 -0
- package/dist/builtin/workflows/src/extension/extension-factory.ts +3 -0
- package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +9 -2
- package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +137 -27
- package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +22 -6
- package/dist/builtin/workflows/src/extension/public-types.ts +1 -1
- package/dist/builtin/workflows/src/extension/workflow-command-completions.ts +13 -1
- package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +19 -4
- package/dist/builtin/workflows/src/extension/workflow-command-surfaces.ts +9 -0
- package/dist/builtin/workflows/src/extension/workflow-prompts.ts +17 -17
- package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +48 -23
- package/dist/builtin/workflows/src/extension/workflow-schema.ts +15 -2
- package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +20 -8
- package/dist/builtin/workflows/src/extension/workflow-tool.ts +24 -8
- package/dist/builtin/workflows/src/runs/background/status.ts +4 -3
- package/dist/builtin/workflows/src/runs/foreground/executor-continuation.ts +13 -3
- package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +29 -8
- package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +8 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +4 -3
- package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +2 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +18 -19
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-unresolved-overflow.ts +38 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-tool-execution-buffer.ts +47 -0
- package/dist/builtin/workflows/src/runs/shared/model-fallback-candidates.ts +1 -1
- package/dist/builtin/workflows/src/runs/shared/worktree-git.ts +155 -20
- package/dist/builtin/workflows/src/runs/shared/worktree-types.ts +6 -0
- package/dist/builtin/workflows/src/runs/shared/worktree.ts +2 -1
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +2 -2
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +2 -2
- package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +18 -1
- package/dist/builtin/workflows/src/shared/persistence-restore.ts +23 -5
- package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +4 -0
- package/dist/builtin/workflows/src/shared/resume-continuation.ts +2 -0
- package/dist/builtin/workflows/src/shared/returned-run-status.ts +116 -0
- package/dist/builtin/workflows/src/shared/workflow-failures-decisions.ts +2 -0
- package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +21 -3
- package/dist/builtin/workflows/src/tui/graph-view-state.ts +3 -0
- package/dist/builtin/workflows/src/tui/graph-view-types.ts +3 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +1 -23
- package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +54 -9
- package/dist/builtin/workflows/src/tui/stage-chat-view-pending-tools.ts +9 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-render-settings.ts +27 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +5 -6
- package/dist/builtin/workflows/src/tui/stage-chat-view.ts +5 -2
- package/dist/builtin/workflows/src/tui/status-list.ts +22 -15
- package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +4 -4
- package/dist/bun/internal-intercom-broker.d.ts +6 -0
- package/dist/bun/internal-intercom-broker.d.ts.map +1 -0
- package/dist/bun/internal-intercom-broker.js +39 -0
- package/dist/bun/internal-intercom-broker.js.map +1 -0
- package/dist/bun/split-loader.d.ts +2 -0
- package/dist/bun/split-loader.d.ts.map +1 -0
- package/dist/bun/split-loader.js +50 -0
- package/dist/bun/split-loader.js.map +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +2 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -4
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-auto-compaction.d.ts +26 -6
- package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-auto-compaction.js +178 -19
- package/dist/core/agent-session-auto-compaction.js.map +1 -1
- package/dist/core/agent-session-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-compaction.js +25 -4
- package/dist/core/agent-session-compaction.js.map +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +12 -2
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +1 -1
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-message-queue.d.ts.map +1 -1
- package/dist/core/agent-session-message-queue.js +1 -1
- package/dist/core/agent-session-message-queue.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +13 -4
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-models.d.ts +2 -2
- package/dist/core/agent-session-models.d.ts.map +1 -1
- package/dist/core/agent-session-models.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +2 -1
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-retry.d.ts +2 -0
- package/dist/core/agent-session-retry.d.ts.map +1 -1
- package/dist/core/agent-session-retry.js +152 -4
- package/dist/core/agent-session-retry.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +1 -0
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +4 -2
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +15 -1
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +6 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +6 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/anthropic-thinking-guard.d.ts +5 -5
- package/dist/core/anthropic-thinking-guard.d.ts.map +1 -1
- package/dist/core/anthropic-thinking-guard.js +42 -32
- package/dist/core/anthropic-thinking-guard.js.map +1 -1
- package/dist/core/atomic-guide-command.d.ts.map +1 -1
- package/dist/core/atomic-guide-command.js +15 -15
- package/dist/core/atomic-guide-command.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +14 -9
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/builtin-packages.d.ts.map +1 -1
- package/dist/core/builtin-packages.js +8 -4
- package/dist/core/builtin-packages.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +2 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +79 -46
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/context-assistant-turns.d.ts +42 -0
- package/dist/core/compaction/context-assistant-turns.d.ts.map +1 -0
- package/dist/core/compaction/context-assistant-turns.js +87 -0
- package/dist/core/compaction/context-assistant-turns.js.map +1 -0
- package/dist/core/compaction/context-compaction-critical.d.ts +15 -0
- package/dist/core/compaction/context-compaction-critical.d.ts.map +1 -0
- package/dist/core/compaction/context-compaction-critical.js +57 -0
- package/dist/core/compaction/context-compaction-critical.js.map +1 -0
- package/dist/core/compaction/context-compaction-eviction-alternates.d.ts +18 -0
- package/dist/core/compaction/context-compaction-eviction-alternates.d.ts.map +1 -0
- package/dist/core/compaction/context-compaction-eviction-alternates.js +186 -0
- package/dist/core/compaction/context-compaction-eviction-alternates.js.map +1 -0
- package/dist/core/compaction/context-compaction-eviction.d.ts +12 -0
- package/dist/core/compaction/context-compaction-eviction.d.ts.map +1 -0
- package/dist/core/compaction/context-compaction-eviction.js +222 -0
- package/dist/core/compaction/context-compaction-eviction.js.map +1 -0
- package/dist/core/compaction/context-compaction-prompt.d.ts.map +1 -1
- package/dist/core/compaction/context-compaction-prompt.js +1 -1
- package/dist/core/compaction/context-compaction-prompt.js.map +1 -1
- package/dist/core/compaction/context-compaction-runner.d.ts +7 -1
- package/dist/core/compaction/context-compaction-runner.d.ts.map +1 -1
- package/dist/core/compaction/context-compaction-runner.js +113 -21
- package/dist/core/compaction/context-compaction-runner.js.map +1 -1
- package/dist/core/compaction/context-compaction-types.d.ts +2 -0
- package/dist/core/compaction/context-compaction-types.d.ts.map +1 -1
- package/dist/core/compaction/context-compaction-types.js.map +1 -1
- package/dist/core/compaction/context-deletion-application.d.ts +5 -4
- package/dist/core/compaction/context-deletion-application.d.ts.map +1 -1
- package/dist/core/compaction/context-deletion-application.js +17 -15
- package/dist/core/compaction/context-deletion-application.js.map +1 -1
- package/dist/core/compaction/context-deletion-store.d.ts.map +1 -1
- package/dist/core/compaction/context-deletion-store.js +1 -1
- package/dist/core/compaction/context-deletion-store.js.map +1 -1
- package/dist/core/compaction/context-deletion-targets.d.ts +2 -1
- package/dist/core/compaction/context-deletion-targets.d.ts.map +1 -1
- package/dist/core/compaction/context-deletion-targets.js +36 -31
- package/dist/core/compaction/context-deletion-targets.js.map +1 -1
- package/dist/core/compaction/context-deletion-tool-helpers.d.ts.map +1 -1
- package/dist/core/compaction/context-deletion-tool-helpers.js +116 -43
- package/dist/core/compaction/context-deletion-tool-helpers.js.map +1 -1
- package/dist/core/compaction/context-transcript-analysis.d.ts +4 -2
- package/dist/core/compaction/context-transcript-analysis.d.ts.map +1 -1
- package/dist/core/compaction/context-transcript-analysis.js +36 -40
- package/dist/core/compaction/context-transcript-analysis.js.map +1 -1
- package/dist/core/copilot-anthropic-sse-repair.d.ts +23 -0
- package/dist/core/copilot-anthropic-sse-repair.d.ts.map +1 -0
- package/dist/core/copilot-anthropic-sse-repair.js +340 -0
- package/dist/core/copilot-anthropic-sse-repair.js.map +1 -0
- package/dist/core/copilot-gemini-reasoning.d.ts +16 -8
- package/dist/core/copilot-gemini-reasoning.d.ts.map +1 -1
- package/dist/core/copilot-gemini-reasoning.js +27 -22
- package/dist/core/copilot-gemini-reasoning.js.map +1 -1
- package/dist/core/copilot-hosts.d.ts +12 -0
- package/dist/core/copilot-hosts.d.ts.map +1 -0
- package/dist/core/copilot-hosts.js +33 -0
- package/dist/core/copilot-hosts.js.map +1 -0
- package/dist/core/copilot-model-catalog.d.ts.map +1 -1
- package/dist/core/copilot-model-catalog.js +3 -2
- package/dist/core/copilot-model-catalog.js.map +1 -1
- package/dist/core/copilot-model-synthesis.d.ts.map +1 -1
- package/dist/core/copilot-model-synthesis.js +3 -1
- package/dist/core/copilot-model-synthesis.js.map +1 -1
- package/dist/core/extensions/agent-events.d.ts +1 -1
- package/dist/core/extensions/agent-events.d.ts.map +1 -1
- package/dist/core/extensions/agent-events.js.map +1 -1
- package/dist/core/extensions/loader-core.d.ts.map +1 -1
- package/dist/core/extensions/loader-core.js +6 -0
- package/dist/core/extensions/loader-core.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts +8 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +10 -4
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/provider-types.d.ts +2 -7
- package/dist/core/extensions/provider-types.d.ts.map +1 -1
- package/dist/core/extensions/provider-types.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +6 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +72 -29
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +5 -5
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/messages.d.ts +9 -0
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +100 -18
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-registry-builtins.d.ts.map +1 -1
- package/dist/core/model-registry-builtins.js +5 -0
- package/dist/core/model-registry-builtins.js.map +1 -1
- package/dist/core/model-registry-custom-loader.d.ts.map +1 -1
- package/dist/core/model-registry-custom-loader.js +49 -8
- package/dist/core/model-registry-custom-loader.js.map +1 -1
- package/dist/core/model-registry-dynamic.d.ts.map +1 -1
- package/dist/core/model-registry-dynamic.js +11 -5
- package/dist/core/model-registry-dynamic.js.map +1 -1
- package/dist/core/model-registry-loader.d.ts.map +1 -1
- package/dist/core/model-registry-loader.js +8 -0
- package/dist/core/model-registry-loader.js.map +1 -1
- package/dist/core/model-registry-schemas.d.ts +93 -8
- package/dist/core/model-registry-schemas.d.ts.map +1 -1
- package/dist/core/model-registry-schemas.js +24 -12
- package/dist/core/model-registry-schemas.js.map +1 -1
- package/dist/core/model-registry-types.d.ts +7 -6
- package/dist/core/model-registry-types.d.ts.map +1 -1
- package/dist/core/model-registry-types.js.map +1 -1
- package/dist/core/model-registry.d.ts +5 -0
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +23 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver-cli.d.ts.map +1 -1
- package/dist/core/model-resolver-cli.js +33 -5
- package/dist/core/model-resolver-cli.js.map +1 -1
- package/dist/core/model-resolver-initial.d.ts +6 -1
- package/dist/core/model-resolver-initial.d.ts.map +1 -1
- package/dist/core/model-resolver-initial.js +12 -7
- package/dist/core/model-resolver-initial.js.map +1 -1
- package/dist/core/model-resolver-scope.d.ts +9 -0
- package/dist/core/model-resolver-scope.d.ts.map +1 -1
- package/dist/core/model-resolver-scope.js +12 -4
- package/dist/core/model-resolver-scope.js.map +1 -1
- package/dist/core/model-resolver.d.ts +4 -3
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +2 -2
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/openai-responses-payload-sanitizer.d.ts +7 -0
- package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -0
- package/dist/core/openai-responses-payload-sanitizer.js +74 -0
- package/dist/core/openai-responses-payload-sanitizer.js.map +1 -0
- package/dist/core/package-manager-auto-resources.d.ts +2 -2
- package/dist/core/package-manager-auto-resources.d.ts.map +1 -1
- package/dist/core/package-manager-auto-resources.js +32 -52
- package/dist/core/package-manager-auto-resources.js.map +1 -1
- package/dist/core/package-manager-resolver.d.ts.map +1 -1
- package/dist/core/package-manager-resolver.js +23 -14
- package/dist/core/package-manager-resolver.js.map +1 -1
- package/dist/core/package-manager-resource-collector.d.ts +3 -3
- package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
- package/dist/core/package-manager-resource-collector.js +76 -73
- package/dist/core/package-manager-resource-collector.js.map +1 -1
- package/dist/core/package-manager-resource-files.d.ts +9 -8
- package/dist/core/package-manager-resource-files.d.ts.map +1 -1
- package/dist/core/package-manager-resource-files.js +92 -81
- package/dist/core/package-manager-resource-files.js.map +1 -1
- package/dist/core/prompt-templates-async.d.ts +3 -0
- package/dist/core/prompt-templates-async.d.ts.map +1 -0
- package/dist/core/prompt-templates-async.js +118 -0
- package/dist/core/prompt-templates-async.js.map +1 -0
- package/dist/core/provider-context-usage.d.ts +11 -0
- package/dist/core/provider-context-usage.d.ts.map +1 -0
- package/dist/core/provider-context-usage.js +58 -0
- package/dist/core/provider-context-usage.js.map +1 -0
- package/dist/core/resource-loader-assets.d.ts +3 -3
- package/dist/core/resource-loader-assets.d.ts.map +1 -1
- package/dist/core/resource-loader-assets.js +66 -83
- package/dist/core/resource-loader-assets.js.map +1 -1
- package/dist/core/resource-loader-context-files.d.ts +1 -0
- package/dist/core/resource-loader-context-files.d.ts.map +1 -1
- package/dist/core/resource-loader-context-files.js +13 -10
- package/dist/core/resource-loader-context-files.js.map +1 -1
- package/dist/core/resource-loader-core.d.ts +1 -1
- package/dist/core/resource-loader-core.d.ts.map +1 -1
- package/dist/core/resource-loader-core.js +5 -5
- package/dist/core/resource-loader-core.js.map +1 -1
- package/dist/core/resource-loader-extensions.d.ts.map +1 -1
- package/dist/core/resource-loader-extensions.js +4 -0
- package/dist/core/resource-loader-extensions.js.map +1 -1
- package/dist/core/resource-loader-reload.d.ts.map +1 -1
- package/dist/core/resource-loader-reload.js +54 -7
- package/dist/core/resource-loader-reload.js.map +1 -1
- package/dist/core/resource-loader-types.d.ts +7 -1
- package/dist/core/resource-loader-types.d.ts.map +1 -1
- package/dist/core/resource-loader-types.js.map +1 -1
- package/dist/core/sdk-types.d.ts +2 -0
- package/dist/core/sdk-types.d.ts.map +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +9 -6
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-entry-normalization.d.ts +7 -0
- package/dist/core/session-entry-normalization.d.ts.map +1 -0
- package/dist/core/session-entry-normalization.js +14 -0
- package/dist/core/session-entry-normalization.js.map +1 -0
- package/dist/core/session-manager-core.d.ts.map +1 -1
- package/dist/core/session-manager-core.js +1 -0
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/session-manager-history.d.ts +2 -2
- package/dist/core/session-manager-history.d.ts.map +1 -1
- package/dist/core/session-manager-history.js +127 -108
- package/dist/core/session-manager-history.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +3 -2
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +6 -0
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-manager-core.d.ts.map +1 -1
- package/dist/core/settings-manager-core.js +3 -2
- package/dist/core/settings-manager-core.js.map +1 -1
- package/dist/core/settings-storage.d.ts.map +1 -1
- package/dist/core/settings-storage.js +2 -1
- package/dist/core/settings-storage.js.map +1 -1
- package/dist/core/settings-types.d.ts +2 -1
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/skills-async.d.ts +3 -0
- package/dist/core/skills-async.d.ts.map +1 -0
- package/dist/core/skills-async.js +269 -0
- package/dist/core/skills-async.js.map +1 -0
- package/dist/core/slash-commands.d.ts +2 -0
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +141 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +11 -8
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/trust-manager.d.ts +9 -0
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +44 -2
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/index-extensions.d.ts +1 -1
- package/dist/index-extensions.d.ts.map +1 -1
- package/dist/index-extensions.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/main-deferred-startup.d.ts +33 -0
- package/dist/main-deferred-startup.d.ts.map +1 -0
- package/dist/main-deferred-startup.js +44 -0
- package/dist/main-deferred-startup.js.map +1 -0
- package/dist/main-early-input.d.ts +41 -0
- package/dist/main-early-input.d.ts.map +1 -0
- package/dist/main-early-input.js +154 -0
- package/dist/main-early-input.js.map +1 -0
- package/dist/main-session.d.ts.map +1 -1
- package/dist/main-session.js +1 -0
- package/dist/main-session.js.map +1 -1
- package/dist/main.d.ts +0 -6
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +47 -39
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.js +0 -1
- package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-events.js +15 -0
- package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-options.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-options.js +3 -1
- package/dist/modes/interactive/components/settings-selector-options.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +2 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +37 -2
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-login.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-auth-login.js +0 -1
- package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.js +21 -9
- package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/dist/modes/interactive/interactive-child-ordering.d.ts +7 -0
- package/dist/modes/interactive/interactive-child-ordering.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-child-ordering.js +26 -0
- package/dist/modes/interactive/interactive-child-ordering.js.map +1 -0
- package/dist/modes/interactive/interactive-deferred-startup.d.ts +8 -1
- package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.js +86 -26
- package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-editor-actions.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-editor-actions.js +13 -13
- package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-extension-runtime.js +16 -0
- package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-hotkeys-debug.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-hotkeys-debug.js +4 -3
- package/dist/modes/interactive/interactive-hotkeys-debug.js.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.js +360 -230
- package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +19 -4
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +46 -4
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts +3 -3
- package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js +3 -3
- package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +27 -17
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-types.d.ts +8 -1
- package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.js +14 -10
- package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-onboarding.d.ts +0 -9
- package/dist/modes/interactive/interactive-onboarding.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-onboarding.js +24 -201
- package/dist/modes/interactive/interactive-onboarding.js.map +1 -1
- package/dist/modes/interactive/interactive-process-lifecycle.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-process-lifecycle.js +43 -9
- package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +93 -10
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-resource-disclosure.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-resource-disclosure.js +3 -2
- package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
- package/dist/modes/interactive/interactive-resource-rendering.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-resource-rendering.js +10 -8
- package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
- package/dist/modes/interactive/interactive-session-routing.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-session-routing.js +9 -5
- package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-slash-commands.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-slash-commands.js +1 -1
- package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +102 -98
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive/theme/global-theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/global-theme.js +26 -2
- package/dist/modes/interactive/theme/global-theme.js.map +1 -1
- package/dist/modes/interactive/theme/theme-class.d.ts +1 -1
- package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-class.js +2 -0
- package/dist/modes/interactive/theme/theme-class.js.map +1 -1
- package/dist/modes/interactive/theme/theme-loading.d.ts +1 -0
- package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-loading.js +3 -0
- package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +1 -1
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/utils/child-process.d.ts +8 -1
- package/dist/utils/child-process.d.ts.map +1 -1
- package/dist/utils/child-process.js +39 -6
- 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 +3 -0
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/event-loop.d.ts +7 -0
- package/dist/utils/event-loop.d.ts.map +1 -0
- package/dist/utils/event-loop.js +14 -0
- package/dist/utils/event-loop.js.map +1 -0
- package/dist/utils/fs-watch.d.ts +24 -1
- package/dist/utils/fs-watch.d.ts.map +1 -1
- package/dist/utils/fs-watch.js +60 -5
- package/dist/utils/fs-watch.js.map +1 -1
- package/dist/utils/json.d.ts +4 -0
- package/dist/utils/json.d.ts.map +1 -1
- package/dist/utils/json.js +8 -0
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/module-require.d.ts +11 -0
- package/dist/utils/module-require.d.ts.map +1 -1
- package/dist/utils/module-require.js +14 -1
- package/dist/utils/module-require.js.map +1 -1
- package/dist/utils/split-launcher.d.ts +38 -0
- package/dist/utils/split-launcher.d.ts.map +1 -0
- package/dist/utils/split-launcher.js +63 -0
- package/dist/utils/split-launcher.js.map +1 -0
- package/docs/changelog.mdx +19 -0
- package/docs/compaction.md +100 -64
- package/docs/custom-provider.md +18 -5
- package/docs/development.md +4 -0
- package/docs/extensions.md +11 -2
- package/docs/json.md +3 -1
- package/docs/keybindings.md +2 -2
- package/docs/models.md +69 -10
- package/docs/providers.md +3 -2
- package/docs/quickstart.md +15 -11
- package/docs/rpc.md +5 -3
- package/docs/sdk.md +1 -1
- package/docs/settings.md +33 -3
- package/docs/subagents.md +40 -5
- package/docs/terminal-setup.md +4 -0
- package/docs/tools.md +1 -1
- package/docs/usage.md +8 -6
- package/docs/windows.md +4 -0
- package/docs/workflows.md +59 -36
- package/examples/extensions/preset.ts +2 -2
- package/examples/extensions/subagent/README.md +2 -2
- package/examples/extensions/subagent/index.ts +1 -2
- package/examples/extensions/subagent/schemas.ts +4 -1
- package/examples/sdk/12-full-control.ts +1 -1
- package/npm-shrinkwrap.json +538 -51
- package/package.json +10 -9
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-behavior.ts +0 -75
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-component.ts +0 -202
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-edit.ts +0 -97
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-editor.ts +0 -160
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-frame.ts +0 -72
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-modes.ts +0 -161
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-selectors.ts +0 -203
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-selectors.ts +0 -234
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-state.ts +0 -103
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-types.ts +0 -29
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify.ts +0 -9
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-clarify.ts +0 -117
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-auth-login.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-auth-login.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type Api, type Model, type OAuthProviderId, type OAuthSelectPrompt, path, getAuthPath, getDocsPath, defaultModelPerProvider, ExtensionSelectorComponent, LoginDialogComponent, theme } from \"./interactive-mode-deps.ts\";\nimport { hasDefaultModelProvider, isUnknownModel } from \"./interactive-mode-helpers.ts\";\n\nInteractiveModeBase.prototype.completeProviderAuthentication = async function(this: InteractiveModeBase, providerId: string, providerName: string, authType: \"oauth\" | \"api_key\", previousModel: Model<Api> | undefined): Promise<void> {\n this.session.modelRegistry.refresh();\n\n const actionLabel =\n authType === \"oauth\"\n ? `Logged in to ${providerName}`\n : `Saved API key for ${providerName}`;\n\n let selectedModel: Model<Api> | undefined;\n let selectionError: string | undefined;\n if (isUnknownModel(previousModel)) {\n const availableModels = this.session.modelRegistry.getAvailable();\n const providerModels = availableModels.filter(\n (model) => model.provider === providerId,\n );\n if (!hasDefaultModelProvider(providerId)) {\n selectionError = `${actionLabel}, but no default model is configured for provider \"${providerId}\". Use /model to select a model.`;\n } else if (providerModels.length === 0) {\n selectionError = `${actionLabel}, but no models are available for that provider. Use /model to select a model.`;\n } else {\n const defaultModelId = defaultModelPerProvider[providerId];\n selectedModel = providerModels.find(\n (model) => model.id === defaultModelId,\n );\n if (!selectedModel) {\n selectionError = `${actionLabel}, but its default model \"${defaultModelId}\" is not available. Use /model to select a model.`;\n } else {\n try {\n await this.session.setModel(selectedModel);\n } catch (error: unknown) {\n selectedModel = undefined;\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n selectionError = `${actionLabel}, but selecting its default model failed: ${errorMessage}. Use /model to select a model.`;\n }\n }\n }\n }\n\n await this.updateAvailableProviderCount();\n this.setupAutocompleteProvider();\n this.footer.invalidate();\n this.updateEditorBorderColor();\n if (selectedModel) {\n this.showStatus(\n `${actionLabel}. Selected ${selectedModel.id}. Credentials saved to ${getAuthPath()}`,\n );\n void this.maybeWarnAboutAnthropicSubscriptionAuth(selectedModel);\n this.checkDaxnutsEasterEgg(selectedModel);\n } else {\n this.showStatus(`${actionLabel}. Credentials saved to ${getAuthPath()}`);\n if (selectionError) {\n this.showError(selectionError);\n } else {\n void this.maybeWarnAboutAnthropicSubscriptionAuth();\n }\n }\n\n await this.resumePendingFirstRunOnboardingSeed();\n };\n\nInteractiveModeBase.prototype.showBedrockSetupDialog = function(this: InteractiveModeBase, providerId: string, providerName: string): void {\n const restoreEditor = () => {\n this.editorContainer.clear();\n this.editorContainer.addChild(this.editor);\n this.ui.setFocus(this.editor);\n this.ui.requestRender();\n };\n\n const dialog = new LoginDialogComponent(\n this.ui,\n providerId,\n () => restoreEditor(),\n providerName,\n \"Amazon Bedrock setup\",\n );\n dialog.showInfo([\n theme.fg(\n \"text\",\n \"Amazon Bedrock uses AWS credentials instead of a single API key.\",\n ),\n theme.fg(\n \"text\",\n \"Configure an AWS profile, IAM keys, bearer token, or role-based credentials.\",\n ),\n theme.fg(\"muted\", \"See:\"),\n theme.fg(\"accent\", ` ${path.join(getDocsPath(), \"providers.md\")}`),\n ]);\n\n this.editorContainer.clear();\n this.editorContainer.addChild(dialog);\n this.ui.setFocus(dialog);\n this.ui.requestRender();\n };\n\nInteractiveModeBase.prototype.showApiKeyLoginDialog = async function(this: InteractiveModeBase, providerId: string, providerName: string): Promise<void> {\n const previousModel = this.session.model;\n\n const dialog = new LoginDialogComponent(\n this.ui,\n providerId,\n (_success, _message) => {\n // Completion handled below\n },\n providerName,\n );\n\n this.editorContainer.clear();\n this.editorContainer.addChild(dialog);\n this.ui.setFocus(dialog);\n this.ui.requestRender();\n\n const restoreEditor = () => {\n this.editorContainer.clear();\n this.editorContainer.addChild(this.editor);\n this.ui.setFocus(this.editor);\n this.ui.requestRender();\n };\n\n try {\n const apiKey = (await dialog.showPrompt(\"Enter API key:\")).trim();\n if (!apiKey) {\n throw new Error(\"API key cannot be empty.\");\n }\n\n this.session.modelRegistry.authStorage.set(providerId, {\n type: \"api_key\",\n key: apiKey,\n });\n\n restoreEditor();\n await this.completeProviderAuthentication(\n providerId,\n providerName,\n \"api_key\",\n previousModel,\n );\n } catch (error: unknown) {\n restoreEditor();\n const errorMsg = error instanceof Error ? error.message : String(error);\n if (errorMsg !== \"Login cancelled\") {\n this.showError(\n `Failed to save API key for ${providerName}: ${errorMsg}`,\n );\n }\n }\n };\n\nInteractiveModeBase.prototype.showOAuthLoginSelect = function(this: InteractiveModeBase, dialog: LoginDialogComponent, prompt: OAuthSelectPrompt): Promise<string | undefined> {\n return new Promise((resolve) => {\n const restoreDialog = () => {\n this.editorContainer.clear();\n this.editorContainer.addChild(dialog);\n this.ui.setFocus(dialog);\n this.ui.requestRender();\n };\n const labels = prompt.options.map((option) => option.label);\n const selector = new ExtensionSelectorComponent(\n prompt.message,\n labels,\n (optionLabel) => {\n restoreDialog();\n resolve(\n prompt.options.find((option) => option.label === optionLabel)?.id,\n );\n },\n () => {\n restoreDialog();\n resolve(undefined);\n },\n );\n this.editorContainer.clear();\n this.editorContainer.addChild(selector);\n this.ui.setFocus(selector);\n this.ui.requestRender();\n });\n };\n\nInteractiveModeBase.prototype.showLoginDialog = async function(this: InteractiveModeBase, providerId: string, providerName: string): Promise<void> {\n const providerInfo = this.session.modelRegistry.authStorage\n .getOAuthProviders()\n .find((provider) => provider.id === providerId);\n const previousModel = this.session.model;\n\n // Providers that use callback servers (can paste redirect URL)\n const usesCallbackServer = providerInfo?.usesCallbackServer ?? false;\n\n // Create login dialog component\n const dialog = new LoginDialogComponent(\n this.ui,\n providerId,\n (_success, _message) => {\n // Completion handled below\n },\n providerName,\n );\n\n // Show dialog in editor container\n this.editorContainer.clear();\n this.editorContainer.addChild(dialog);\n this.ui.setFocus(dialog);\n this.ui.requestRender();\n\n // Promise for manual code input (racing with callback server)\n let manualCodeResolve: ((code: string) => void) | undefined;\n let manualCodeReject: ((err: Error) => void) | undefined;\n const manualCodePromise = new Promise<string>((resolve, reject) => {\n manualCodeResolve = resolve;\n manualCodeReject = reject;\n });\n\n // Restore editor helper\n const restoreEditor = () => {\n this.editorContainer.clear();\n this.editorContainer.addChild(this.editor);\n this.ui.setFocus(this.editor);\n this.ui.requestRender();\n };\n\n try {\n await this.session.modelRegistry.authStorage.login(\n providerId as OAuthProviderId,\n {\n onAuth: (info: { url: string; instructions?: string }) => {\n dialog.showAuth(info.url, info.instructions, {\n showCancelHint: !usesCallbackServer,\n });\n\n if (usesCallbackServer) {\n // Show input for manual paste, racing with callback\n dialog\n .showManualInput(\n \"Paste redirect URL below, or complete login in browser:\",\n )\n .then((value) => {\n if (value && manualCodeResolve) {\n manualCodeResolve(value);\n manualCodeResolve = undefined;\n }\n })\n .catch(() => {\n if (manualCodeReject) {\n manualCodeReject(new Error(\"Login cancelled\"));\n manualCodeReject = undefined;\n }\n });\n }\n // For Anthropic: onPrompt is called immediately after\n },\n\n onDeviceCode: (info) => {\n dialog.showDeviceCode(info);\n dialog.showWaiting(\"Waiting for authentication...\");\n },\n\n onPrompt: async (prompt: {\n message: string;\n placeholder?: string;\n }) => {\n return dialog.showPrompt(prompt.message, prompt.placeholder);\n },\n\n onProgress: (message: string) => {\n dialog.showProgress(message);\n },\n\n onSelect: (prompt: OAuthSelectPrompt) =>\n this.showOAuthLoginSelect(dialog, prompt),\n\n onManualCodeInput: () => manualCodePromise,\n\n signal: dialog.signal,\n },\n );\n\n // Success\n restoreEditor();\n await this.completeProviderAuthentication(\n providerId,\n providerName,\n \"oauth\",\n previousModel,\n );\n } catch (error: unknown) {\n restoreEditor();\n const errorMsg = error instanceof Error ? error.message : String(error);\n if (errorMsg !== \"Login cancelled\") {\n this.showError(`Failed to login to ${providerName}: ${errorMsg}`);\n }\n }\n };\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-auth-login.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-auth-login.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type Api, type Model, type OAuthProviderId, type OAuthSelectPrompt, path, getAuthPath, getDocsPath, defaultModelPerProvider, ExtensionSelectorComponent, LoginDialogComponent, theme } from \"./interactive-mode-deps.ts\";\nimport { hasDefaultModelProvider, isUnknownModel } from \"./interactive-mode-helpers.ts\";\n\nInteractiveModeBase.prototype.completeProviderAuthentication = async function(this: InteractiveModeBase, providerId: string, providerName: string, authType: \"oauth\" | \"api_key\", previousModel: Model<Api> | undefined): Promise<void> {\n this.session.modelRegistry.refresh();\n\n const actionLabel =\n authType === \"oauth\"\n ? `Logged in to ${providerName}`\n : `Saved API key for ${providerName}`;\n\n let selectedModel: Model<Api> | undefined;\n let selectionError: string | undefined;\n if (isUnknownModel(previousModel)) {\n const availableModels = this.session.modelRegistry.getAvailable();\n const providerModels = availableModels.filter(\n (model) => model.provider === providerId,\n );\n if (!hasDefaultModelProvider(providerId)) {\n selectionError = `${actionLabel}, but no default model is configured for provider \"${providerId}\". Use /model to select a model.`;\n } else if (providerModels.length === 0) {\n selectionError = `${actionLabel}, but no models are available for that provider. Use /model to select a model.`;\n } else {\n const defaultModelId = defaultModelPerProvider[providerId];\n selectedModel = providerModels.find(\n (model) => model.id === defaultModelId,\n );\n if (!selectedModel) {\n selectionError = `${actionLabel}, but its default model \"${defaultModelId}\" is not available. Use /model to select a model.`;\n } else {\n try {\n await this.session.setModel(selectedModel);\n } catch (error: unknown) {\n selectedModel = undefined;\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n selectionError = `${actionLabel}, but selecting its default model failed: ${errorMessage}. Use /model to select a model.`;\n }\n }\n }\n }\n\n await this.updateAvailableProviderCount();\n this.setupAutocompleteProvider();\n this.footer.invalidate();\n this.updateEditorBorderColor();\n if (selectedModel) {\n this.showStatus(\n `${actionLabel}. Selected ${selectedModel.id}. Credentials saved to ${getAuthPath()}`,\n );\n void this.maybeWarnAboutAnthropicSubscriptionAuth(selectedModel);\n this.checkDaxnutsEasterEgg(selectedModel);\n } else {\n this.showStatus(`${actionLabel}. Credentials saved to ${getAuthPath()}`);\n if (selectionError) {\n this.showError(selectionError);\n } else {\n void this.maybeWarnAboutAnthropicSubscriptionAuth();\n }\n }\n\n };\n\nInteractiveModeBase.prototype.showBedrockSetupDialog = function(this: InteractiveModeBase, providerId: string, providerName: string): void {\n const restoreEditor = () => {\n this.editorContainer.clear();\n this.editorContainer.addChild(this.editor);\n this.ui.setFocus(this.editor);\n this.ui.requestRender();\n };\n\n const dialog = new LoginDialogComponent(\n this.ui,\n providerId,\n () => restoreEditor(),\n providerName,\n \"Amazon Bedrock setup\",\n );\n dialog.showInfo([\n theme.fg(\n \"text\",\n \"Amazon Bedrock uses AWS credentials instead of a single API key.\",\n ),\n theme.fg(\n \"text\",\n \"Configure an AWS profile, IAM keys, bearer token, or role-based credentials.\",\n ),\n theme.fg(\"muted\", \"See:\"),\n theme.fg(\"accent\", ` ${path.join(getDocsPath(), \"providers.md\")}`),\n ]);\n\n this.editorContainer.clear();\n this.editorContainer.addChild(dialog);\n this.ui.setFocus(dialog);\n this.ui.requestRender();\n };\n\nInteractiveModeBase.prototype.showApiKeyLoginDialog = async function(this: InteractiveModeBase, providerId: string, providerName: string): Promise<void> {\n const previousModel = this.session.model;\n\n const dialog = new LoginDialogComponent(\n this.ui,\n providerId,\n (_success, _message) => {\n // Completion handled below\n },\n providerName,\n );\n\n this.editorContainer.clear();\n this.editorContainer.addChild(dialog);\n this.ui.setFocus(dialog);\n this.ui.requestRender();\n\n const restoreEditor = () => {\n this.editorContainer.clear();\n this.editorContainer.addChild(this.editor);\n this.ui.setFocus(this.editor);\n this.ui.requestRender();\n };\n\n try {\n const apiKey = (await dialog.showPrompt(\"Enter API key:\")).trim();\n if (!apiKey) {\n throw new Error(\"API key cannot be empty.\");\n }\n\n this.session.modelRegistry.authStorage.set(providerId, {\n type: \"api_key\",\n key: apiKey,\n });\n\n restoreEditor();\n await this.completeProviderAuthentication(\n providerId,\n providerName,\n \"api_key\",\n previousModel,\n );\n } catch (error: unknown) {\n restoreEditor();\n const errorMsg = error instanceof Error ? error.message : String(error);\n if (errorMsg !== \"Login cancelled\") {\n this.showError(\n `Failed to save API key for ${providerName}: ${errorMsg}`,\n );\n }\n }\n };\n\nInteractiveModeBase.prototype.showOAuthLoginSelect = function(this: InteractiveModeBase, dialog: LoginDialogComponent, prompt: OAuthSelectPrompt): Promise<string | undefined> {\n return new Promise((resolve) => {\n const restoreDialog = () => {\n this.editorContainer.clear();\n this.editorContainer.addChild(dialog);\n this.ui.setFocus(dialog);\n this.ui.requestRender();\n };\n const labels = prompt.options.map((option) => option.label);\n const selector = new ExtensionSelectorComponent(\n prompt.message,\n labels,\n (optionLabel) => {\n restoreDialog();\n resolve(\n prompt.options.find((option) => option.label === optionLabel)?.id,\n );\n },\n () => {\n restoreDialog();\n resolve(undefined);\n },\n );\n this.editorContainer.clear();\n this.editorContainer.addChild(selector);\n this.ui.setFocus(selector);\n this.ui.requestRender();\n });\n };\n\nInteractiveModeBase.prototype.showLoginDialog = async function(this: InteractiveModeBase, providerId: string, providerName: string): Promise<void> {\n const providerInfo = this.session.modelRegistry.authStorage\n .getOAuthProviders()\n .find((provider) => provider.id === providerId);\n const previousModel = this.session.model;\n\n // Providers that use callback servers (can paste redirect URL)\n const usesCallbackServer = providerInfo?.usesCallbackServer ?? false;\n\n // Create login dialog component\n const dialog = new LoginDialogComponent(\n this.ui,\n providerId,\n (_success, _message) => {\n // Completion handled below\n },\n providerName,\n );\n\n // Show dialog in editor container\n this.editorContainer.clear();\n this.editorContainer.addChild(dialog);\n this.ui.setFocus(dialog);\n this.ui.requestRender();\n\n // Promise for manual code input (racing with callback server)\n let manualCodeResolve: ((code: string) => void) | undefined;\n let manualCodeReject: ((err: Error) => void) | undefined;\n const manualCodePromise = new Promise<string>((resolve, reject) => {\n manualCodeResolve = resolve;\n manualCodeReject = reject;\n });\n\n // Restore editor helper\n const restoreEditor = () => {\n this.editorContainer.clear();\n this.editorContainer.addChild(this.editor);\n this.ui.setFocus(this.editor);\n this.ui.requestRender();\n };\n\n try {\n await this.session.modelRegistry.authStorage.login(\n providerId as OAuthProviderId,\n {\n onAuth: (info: { url: string; instructions?: string }) => {\n dialog.showAuth(info.url, info.instructions, {\n showCancelHint: !usesCallbackServer,\n });\n\n if (usesCallbackServer) {\n // Show input for manual paste, racing with callback\n dialog\n .showManualInput(\n \"Paste redirect URL below, or complete login in browser:\",\n )\n .then((value) => {\n if (value && manualCodeResolve) {\n manualCodeResolve(value);\n manualCodeResolve = undefined;\n }\n })\n .catch(() => {\n if (manualCodeReject) {\n manualCodeReject(new Error(\"Login cancelled\"));\n manualCodeReject = undefined;\n }\n });\n }\n // For Anthropic: onPrompt is called immediately after\n },\n\n onDeviceCode: (info) => {\n dialog.showDeviceCode(info);\n dialog.showWaiting(\"Waiting for authentication...\");\n },\n\n onPrompt: async (prompt: {\n message: string;\n placeholder?: string;\n }) => {\n return dialog.showPrompt(prompt.message, prompt.placeholder);\n },\n\n onProgress: (message: string) => {\n dialog.showProgress(message);\n },\n\n onSelect: (prompt: OAuthSelectPrompt) =>\n this.showOAuthLoginSelect(dialog, prompt),\n\n onManualCodeInput: () => manualCodePromise,\n\n signal: dialog.signal,\n },\n );\n\n // Success\n restoreEditor();\n await this.completeProviderAuthentication(\n providerId,\n providerName,\n \"oauth\",\n previousModel,\n );\n } catch (error: unknown) {\n restoreEditor();\n const errorMsg = error instanceof Error ? error.message : String(error);\n if (errorMsg !== \"Login cancelled\") {\n this.showError(`Failed to login to ${providerName}: ${errorMsg}`);\n }\n }\n };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-autocomplete.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-autocomplete.ts"],"names":[],"mappings":"","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type Api, type Model, type AutocompleteItem, type AutocompleteProvider, type AutocompleteSuggestions, type SlashCommand, type ExtensionRunner, type ResourceDiagnostic, type SourceInfo, CombinedAutocompleteProvider, fuzzyFilter, hasSupportedCodexFastModeModel, BUILTIN_SLASH_COMMANDS, parseGitUrl, getModelSearchText } from \"./interactive-mode-deps.ts\";\nimport { BUILTIN_SLASH_COMMAND_NAMES } from \"./interactive-mode-helpers.ts\";\n\nconst AT_MENTION_PATH_DELIMITERS = new Set([\" \", \"\\t\", '\"', \"'\", \"=\"]);\n\nfunction findLastAtMentionDelimiter(text: string): number {\n for (let index = text.length - 1; index >= 0; index -= 1) {\n if (AT_MENTION_PATH_DELIMITERS.has(text[index] ?? \"\")) return index;\n }\n return -1;\n}\n\nfunction isAtMentionTokenStart(text: string, index: number): boolean {\n return index === 0 || AT_MENTION_PATH_DELIMITERS.has(text[index - 1] ?? \"\");\n}\n\nfunction findUnclosedAtMentionQuoteStart(text: string): number | null {\n let quoteStart = -1;\n let inQuotes = false;\n for (let index = 0; index < text.length; index += 1) {\n if (text[index] === '\"') {\n inQuotes = !inQuotes;\n if (inQuotes) quoteStart = index;\n }\n }\n return inQuotes ? quoteStart : null;\n}\n\nfunction extractAtMentionPrefix(textBeforeCursor: string): string | null {\n const quoteStart = findUnclosedAtMentionQuoteStart(textBeforeCursor);\n if (quoteStart !== null && quoteStart > 0 && textBeforeCursor[quoteStart - 1] === \"@\") {\n return isAtMentionTokenStart(textBeforeCursor, quoteStart - 1)\n ? textBeforeCursor.slice(quoteStart - 1)\n : null;\n }\n const lastDelimiterIndex = findLastAtMentionDelimiter(textBeforeCursor);\n const tokenStart = lastDelimiterIndex === -1 ? 0 : lastDelimiterIndex + 1;\n return textBeforeCursor[tokenStart] === \"@\" ? textBeforeCursor.slice(tokenStart) : null;\n}\n\nfunction atMentionPrefixToPathPrefix(atPrefix: string): string {\n return atPrefix.startsWith('@\"') ? `\"${atPrefix.slice(2)}` : atPrefix.slice(1);\n}\n\nfunction toAtMentionCompletion(item: AutocompleteItem): AutocompleteItem {\n return {\n ...item,\n value: item.value.startsWith(\"@\") ? item.value : `@${item.value}`,\n };\n}\n\nclass AtMentionFallbackAutocompleteProvider implements AutocompleteProvider {\n private readonly primary: AutocompleteProvider;\n private readonly pathFallback: AutocompleteProvider;\n\n constructor(primary: AutocompleteProvider, pathFallback: AutocompleteProvider) {\n this.primary = primary;\n this.pathFallback = pathFallback;\n }\n\n async getSuggestions(\n lines: string[],\n cursorLine: number,\n cursorCol: number,\n options: { signal: AbortSignal; force?: boolean },\n ): Promise<AutocompleteSuggestions | null> {\n const primarySuggestions = await this.primary.getSuggestions(lines, cursorLine, cursorCol, options);\n if (primarySuggestions || options.signal.aborted) return primarySuggestions;\n\n const currentLine = lines[cursorLine] ?? \"\";\n const textBeforeCursor = currentLine.slice(0, cursorCol);\n const atPrefix = extractAtMentionPrefix(textBeforeCursor);\n if (!atPrefix) return null;\n\n const pathPrefix = atMentionPrefixToPathPrefix(atPrefix);\n const prefixStart = cursorCol - atPrefix.length;\n const fallbackLines = [...lines];\n fallbackLines[cursorLine] = `${currentLine.slice(0, prefixStart)}${pathPrefix}${currentLine.slice(cursorCol)}`;\n const fallbackSuggestions = await this.pathFallback.getSuggestions(\n fallbackLines,\n cursorLine,\n prefixStart + pathPrefix.length,\n { ...options, force: true },\n );\n if (!fallbackSuggestions) return null;\n\n return {\n prefix: atPrefix,\n items: fallbackSuggestions.items.map(toAtMentionCompletion),\n };\n }\n\n applyCompletion(\n lines: string[],\n cursorLine: number,\n cursorCol: number,\n item: AutocompleteItem,\n prefix: string,\n ): { lines: string[]; cursorLine: number; cursorCol: number } {\n return this.primary.applyCompletion(lines, cursorLine, cursorCol, item, prefix);\n }\n\n shouldTriggerFileCompletion(lines: string[], cursorLine: number, cursorCol: number): boolean {\n return this.primary.shouldTriggerFileCompletion?.(lines, cursorLine, cursorCol) ?? true;\n }\n}\n\nInteractiveModeBase.prototype.getAutocompleteSourceTag = function(this: InteractiveModeBase, sourceInfo?: SourceInfo): string | undefined {\n if (!sourceInfo) {\n return undefined;\n }\n\n const scopePrefix =\n sourceInfo.scope === \"user\"\n ? \"u\"\n : sourceInfo.scope === \"project\"\n ? \"p\"\n : \"t\";\n const source = sourceInfo.source.trim();\n\n if (source === \"auto\" || source === \"local\" || source === \"cli\") {\n return scopePrefix;\n }\n\n if (source.startsWith(\"npm:\")) {\n return `${scopePrefix}:${source}`;\n }\n\n const gitSource = parseGitUrl(source);\n if (gitSource) {\n const ref = gitSource.ref ? `@${gitSource.ref}` : \"\";\n return `${scopePrefix}:git:${gitSource.host}/${gitSource.path}${ref}`;\n }\n\n return scopePrefix;\n };\n\nInteractiveModeBase.prototype.prefixAutocompleteDescription = function(this: InteractiveModeBase, description: string | undefined, sourceInfo?: SourceInfo): string | undefined {\n const sourceTag = this.getAutocompleteSourceTag(sourceInfo);\n if (!sourceTag) {\n return description;\n }\n return description ? `[${sourceTag}] ${description}` : `[${sourceTag}]`;\n };\n\nInteractiveModeBase.prototype.getBuiltInCommandConflictDiagnostics = function(this: InteractiveModeBase, extensionRunner: ExtensionRunner): ResourceDiagnostic[] {\n return extensionRunner\n .getRegisteredCommands()\n .filter((command) => BUILTIN_SLASH_COMMAND_NAMES.has(command.name))\n .map((command) => ({\n type: \"warning\" as const,\n message:\n command.invocationName === command.name\n ? `Extension command '/${command.name}' conflicts with built-in interactive command. Skipping in autocomplete.`\n : `Extension command '/${command.name}' conflicts with built-in interactive command. Available as '/${command.invocationName}'.`,\n path: command.sourceInfo.path,\n }));\n };\n\nInteractiveModeBase.prototype.getCodexFastModeCandidateModels = function(this: InteractiveModeBase): Model<Api>[] {\n if (this.session.scopedModels.length > 0) {\n return this.session.scopedModels\n .map((scoped) => scoped.model)\n .filter((model) => this.session.modelRegistry.hasConfiguredAuth(model));\n }\n\n return this.session.modelRegistry.getAvailable();\n };\n\nInteractiveModeBase.prototype.hasCodexFastModeSupportedModels = function(this: InteractiveModeBase): boolean {\n return hasSupportedCodexFastModeModel(\n this.getCodexFastModeCandidateModels(),\n );\n };\n\nInteractiveModeBase.prototype.createBaseAutocompleteProvider = function(this: InteractiveModeBase): AutocompleteProvider {\n // Define commands for autocomplete\n const slashCommands: SlashCommand[] = BUILTIN_SLASH_COMMANDS.filter(\n (command) => command.name !== \"fast\" || this.hasCodexFastModeSupportedModels(),\n ).map((command) => ({\n name: command.name,\n description: command.description,\n getArgumentCompletions: command.getArgumentCompletions,\n }));\n\n const modelCommand = slashCommands.find(\n (command) => command.name === \"model\",\n );\n if (modelCommand) {\n modelCommand.getArgumentCompletions = (\n prefix: string,\n ): AutocompleteItem[] | null => {\n // Get available models (scoped or from registry)\n const models =\n this.session.scopedModels.length > 0\n ? this.session.scopedModels.map((s) => s.model)\n : this.session.modelRegistry.getAvailable();\n\n if (models.length === 0) return null;\n\n // Create items with provider/id format\n const items = models.map((m) => ({\n id: m.id,\n provider: m.provider,\n name: m.name,\n label: `${m.provider}/${m.id}`,\n }));\n\n // Fuzzy filter by model ID + provider in either order.\n const filtered = fuzzyFilter(items, prefix, getModelSearchText);\n\n if (filtered.length === 0) return null;\n\n return filtered.map((item) => ({\n value: item.label,\n label: item.id,\n description: item.provider,\n }));\n };\n }\n\n // Convert prompt templates to SlashCommand format for autocomplete\n const templateCommands: SlashCommand[] = this.session.promptTemplates.map(\n (cmd) => ({\n name: cmd.name,\n description: this.prefixAutocompleteDescription(\n cmd.description,\n cmd.sourceInfo,\n ),\n ...(cmd.argumentHint && { argumentHint: cmd.argumentHint }),\n }),\n );\n\n // Convert extension commands to SlashCommand format. Built-in command names\n // stay reserved even when a built-in is contextually hidden (for example,\n // /fast without a supported OpenAI model) so extension visibility cannot\n // change as auth/model state changes.\n const extensionCommands: SlashCommand[] = this.session.extensionRunner\n .getRegisteredCommands()\n .filter((cmd) => !BUILTIN_SLASH_COMMAND_NAMES.has(cmd.name))\n .map((cmd) => ({\n name: cmd.invocationName,\n description: this.prefixAutocompleteDescription(\n cmd.description,\n cmd.sourceInfo,\n ),\n getArgumentCompletions: cmd.getArgumentCompletions,\n }));\n\n // Build skill commands from session.skills (if enabled)\n this.skillCommands.clear();\n const skillCommandList: SlashCommand[] = [];\n if (this.settingsManager.getEnableSkillCommands()) {\n for (const skill of this.session.resourceLoader.getSkills().skills) {\n const commandName = `skill:${skill.name}`;\n this.skillCommands.set(commandName, skill.filePath);\n skillCommandList.push({\n name: commandName,\n description: this.prefixAutocompleteDescription(\n skill.description,\n skill.sourceInfo,\n ),\n });\n }\n }\n\n const commands = [\n ...slashCommands,\n ...templateCommands,\n ...extensionCommands,\n ...skillCommandList,\n ];\n const cwd = this.sessionManager.getCwd();\n return new AtMentionFallbackAutocompleteProvider(\n new CombinedAutocompleteProvider(commands, cwd, this.fdPath),\n new CombinedAutocompleteProvider(commands, cwd, null),\n );\n };\n\nInteractiveModeBase.prototype.setupAutocompleteProvider = function(this: InteractiveModeBase): void {\n let provider = this.createBaseAutocompleteProvider();\n for (const wrapProvider of this.autocompleteProviderWrappers) {\n provider = wrapProvider(provider);\n }\n\n this.autocompleteProvider = provider;\n this.defaultEditor.setAutocompleteProvider(provider);\n if (this.editor !== this.defaultEditor) {\n this.editor.setAutocompleteProvider?.(provider);\n }\n };\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-autocomplete.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-autocomplete.ts"],"names":[],"mappings":"","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type Api, type Model, type AutocompleteItem, type AutocompleteProvider, type AutocompleteSuggestions, type SlashCommand, type ExtensionRunner, type ResourceDiagnostic, type SourceInfo, CombinedAutocompleteProvider, fuzzyFilter, hasSupportedCodexFastModeModel, BUILTIN_SLASH_COMMANDS, BUNDLED_EXTENSION_SLASH_COMMANDS, parseGitUrl, getModelSearchText } from \"./interactive-mode-deps.ts\";\nimport { BUILTIN_SLASH_COMMAND_NAMES } from \"./interactive-mode-helpers.ts\";\n\nconst AT_MENTION_PATH_DELIMITERS = new Set([\" \", \"\\t\", '\"', \"'\", \"=\"]);\n\nfunction findLastAtMentionDelimiter(text: string): number {\n for (let index = text.length - 1; index >= 0; index -= 1) {\n if (AT_MENTION_PATH_DELIMITERS.has(text[index] ?? \"\")) return index;\n }\n return -1;\n}\n\nfunction isAtMentionTokenStart(text: string, index: number): boolean {\n return index === 0 || AT_MENTION_PATH_DELIMITERS.has(text[index - 1] ?? \"\");\n}\n\nfunction findUnclosedAtMentionQuoteStart(text: string): number | null {\n let quoteStart = -1;\n let inQuotes = false;\n for (let index = 0; index < text.length; index += 1) {\n if (text[index] === '\"') {\n inQuotes = !inQuotes;\n if (inQuotes) quoteStart = index;\n }\n }\n return inQuotes ? quoteStart : null;\n}\n\nfunction extractAtMentionPrefix(textBeforeCursor: string): string | null {\n const quoteStart = findUnclosedAtMentionQuoteStart(textBeforeCursor);\n if (quoteStart !== null && quoteStart > 0 && textBeforeCursor[quoteStart - 1] === \"@\") {\n return isAtMentionTokenStart(textBeforeCursor, quoteStart - 1)\n ? textBeforeCursor.slice(quoteStart - 1)\n : null;\n }\n const lastDelimiterIndex = findLastAtMentionDelimiter(textBeforeCursor);\n const tokenStart = lastDelimiterIndex === -1 ? 0 : lastDelimiterIndex + 1;\n return textBeforeCursor[tokenStart] === \"@\" ? textBeforeCursor.slice(tokenStart) : null;\n}\n\nfunction atMentionPrefixToPathPrefix(atPrefix: string): string {\n return atPrefix.startsWith('@\"') ? `\"${atPrefix.slice(2)}` : atPrefix.slice(1);\n}\n\nfunction toAtMentionCompletion(item: AutocompleteItem): AutocompleteItem {\n return {\n ...item,\n value: item.value.startsWith(\"@\") ? item.value : `@${item.value}`,\n };\n}\n\nclass AtMentionFallbackAutocompleteProvider implements AutocompleteProvider {\n private readonly primary: AutocompleteProvider;\n private readonly pathFallback: AutocompleteProvider;\n\n constructor(primary: AutocompleteProvider, pathFallback: AutocompleteProvider) {\n this.primary = primary;\n this.pathFallback = pathFallback;\n }\n\n async getSuggestions(\n lines: string[],\n cursorLine: number,\n cursorCol: number,\n options: { signal: AbortSignal; force?: boolean },\n ): Promise<AutocompleteSuggestions | null> {\n const primarySuggestions = await this.primary.getSuggestions(lines, cursorLine, cursorCol, options);\n if (primarySuggestions || options.signal.aborted) return primarySuggestions;\n\n const currentLine = lines[cursorLine] ?? \"\";\n const textBeforeCursor = currentLine.slice(0, cursorCol);\n const atPrefix = extractAtMentionPrefix(textBeforeCursor);\n if (!atPrefix) return null;\n\n const pathPrefix = atMentionPrefixToPathPrefix(atPrefix);\n const prefixStart = cursorCol - atPrefix.length;\n const fallbackLines = [...lines];\n fallbackLines[cursorLine] = `${currentLine.slice(0, prefixStart)}${pathPrefix}${currentLine.slice(cursorCol)}`;\n const fallbackSuggestions = await this.pathFallback.getSuggestions(\n fallbackLines,\n cursorLine,\n prefixStart + pathPrefix.length,\n { ...options, force: true },\n );\n if (!fallbackSuggestions) return null;\n\n return {\n prefix: atPrefix,\n items: fallbackSuggestions.items.map(toAtMentionCompletion),\n };\n }\n\n applyCompletion(\n lines: string[],\n cursorLine: number,\n cursorCol: number,\n item: AutocompleteItem,\n prefix: string,\n ): { lines: string[]; cursorLine: number; cursorCol: number } {\n return this.primary.applyCompletion(lines, cursorLine, cursorCol, item, prefix);\n }\n\n shouldTriggerFileCompletion(lines: string[], cursorLine: number, cursorCol: number): boolean {\n return this.primary.shouldTriggerFileCompletion?.(lines, cursorLine, cursorCol) ?? true;\n }\n}\n\nInteractiveModeBase.prototype.getAutocompleteSourceTag = function(this: InteractiveModeBase, sourceInfo?: SourceInfo): string | undefined {\n if (!sourceInfo) {\n return undefined;\n }\n\n const scopePrefix =\n sourceInfo.scope === \"user\"\n ? \"u\"\n : sourceInfo.scope === \"project\"\n ? \"p\"\n : \"t\";\n const source = sourceInfo.source.trim();\n\n if (source === \"auto\" || source === \"local\" || source === \"cli\") {\n return scopePrefix;\n }\n\n if (source.startsWith(\"npm:\")) {\n return `${scopePrefix}:${source}`;\n }\n\n const gitSource = parseGitUrl(source);\n if (gitSource) {\n const ref = gitSource.ref ? `@${gitSource.ref}` : \"\";\n return `${scopePrefix}:git:${gitSource.host}/${gitSource.path}${ref}`;\n }\n\n return scopePrefix;\n };\n\nInteractiveModeBase.prototype.prefixAutocompleteDescription = function(this: InteractiveModeBase, description: string | undefined, sourceInfo?: SourceInfo): string | undefined {\n const sourceTag = this.getAutocompleteSourceTag(sourceInfo);\n if (!sourceTag) {\n return description;\n }\n return description ? `[${sourceTag}] ${description}` : `[${sourceTag}]`;\n };\n\nInteractiveModeBase.prototype.getBuiltInCommandConflictDiagnostics = function(this: InteractiveModeBase, extensionRunner: ExtensionRunner): ResourceDiagnostic[] {\n return extensionRunner\n .getRegisteredCommands()\n .filter((command) => BUILTIN_SLASH_COMMAND_NAMES.has(command.name))\n .map((command) => ({\n type: \"warning\" as const,\n message:\n command.invocationName === command.name\n ? `Extension command '/${command.name}' conflicts with built-in interactive command. Skipping in autocomplete.`\n : `Extension command '/${command.name}' conflicts with built-in interactive command. Available as '/${command.invocationName}'.`,\n path: command.sourceInfo.path,\n }));\n };\n\nInteractiveModeBase.prototype.getCodexFastModeCandidateModels = function(this: InteractiveModeBase): Model<Api>[] {\n if (this.session.scopedModels.length > 0) {\n return this.session.scopedModels\n .map((scoped) => scoped.model)\n .filter((model) => this.session.modelRegistry.hasConfiguredAuth(model));\n }\n\n return this.session.modelRegistry.getAvailable();\n };\n\nInteractiveModeBase.prototype.hasCodexFastModeSupportedModels = function(this: InteractiveModeBase): boolean {\n return hasSupportedCodexFastModeModel(\n this.getCodexFastModeCandidateModels(),\n );\n };\n\nInteractiveModeBase.prototype.createBaseAutocompleteProvider = function(this: InteractiveModeBase): AutocompleteProvider {\n // Define commands for autocomplete\n const slashCommands: SlashCommand[] = BUILTIN_SLASH_COMMANDS.filter(\n (command) => command.name !== \"fast\" || this.hasCodexFastModeSupportedModels(),\n ).map((command) => ({\n name: command.name,\n description: command.description,\n getArgumentCompletions: command.getArgumentCompletions,\n }));\n\n const modelCommand = slashCommands.find(\n (command) => command.name === \"model\",\n );\n if (modelCommand) {\n modelCommand.getArgumentCompletions = (\n prefix: string,\n ): AutocompleteItem[] | null => {\n // Get available models (scoped or from registry)\n const models =\n this.session.scopedModels.length > 0\n ? this.session.scopedModels.map((s) => s.model)\n : this.session.modelRegistry.getAvailable();\n\n if (models.length === 0) return null;\n\n // Create items with provider/id format\n const items = models.map((m) => ({\n id: m.id,\n provider: m.provider,\n name: m.name,\n label: `${m.provider}/${m.id}`,\n }));\n\n // Fuzzy filter by model ID + provider in either order.\n const filtered = fuzzyFilter(items, prefix, getModelSearchText);\n\n if (filtered.length === 0) return null;\n\n return filtered.map((item) => ({\n value: item.label,\n label: item.id,\n description: item.provider,\n }));\n };\n }\n\n // Convert prompt templates to SlashCommand format for autocomplete\n const templateCommands: SlashCommand[] = this.session.promptTemplates.map(\n (cmd) => ({\n name: cmd.name,\n description: this.prefixAutocompleteDescription(\n cmd.description,\n cmd.sourceInfo,\n ),\n ...(cmd.argumentHint && { argumentHint: cmd.argumentHint }),\n }),\n );\n\n // Convert extension commands to SlashCommand format. Built-in command names\n // stay reserved even when a built-in is contextually hidden (for example,\n // /fast without a supported OpenAI model) so extension visibility cannot\n // change as auth/model state changes. While extension loading is deferred,\n // expose lightweight bundled command metadata without importing heavy\n // implementations; the submit path loads the implementation on demand.\n const registeredExtensionCommands = this.session.extensionRunner\n .getRegisteredCommands()\n .filter((cmd) => !BUILTIN_SLASH_COMMAND_NAMES.has(cmd.name));\n const registeredNames = new Set(registeredExtensionCommands.map((cmd) => cmd.invocationName));\n const extensionCommands: SlashCommand[] = [\n ...(this.deferredStartupPending\n ? BUNDLED_EXTENSION_SLASH_COMMANDS.filter(\n (cmd) => !BUILTIN_SLASH_COMMAND_NAMES.has(cmd.name) && !registeredNames.has(cmd.name),\n ).map((cmd) => ({\n name: cmd.name,\n description: cmd.description,\n getArgumentCompletions: cmd.getArgumentCompletions,\n }))\n : []),\n ...registeredExtensionCommands.map((cmd) => ({\n name: cmd.invocationName,\n description: this.prefixAutocompleteDescription(\n cmd.description,\n cmd.sourceInfo,\n ),\n getArgumentCompletions: cmd.getArgumentCompletions,\n })),\n ];\n\n // Build skill commands from session.skills (if enabled)\n this.skillCommands.clear();\n const skillCommandList: SlashCommand[] = [];\n if (this.settingsManager.getEnableSkillCommands()) {\n for (const skill of this.session.resourceLoader.getSkills().skills) {\n const commandName = `skill:${skill.name}`;\n this.skillCommands.set(commandName, skill.filePath);\n skillCommandList.push({\n name: commandName,\n description: this.prefixAutocompleteDescription(\n skill.description,\n skill.sourceInfo,\n ),\n });\n }\n }\n\n const commands = [\n ...slashCommands,\n ...templateCommands,\n ...extensionCommands,\n ...skillCommandList,\n ];\n const cwd = this.sessionManager.getCwd();\n return new AtMentionFallbackAutocompleteProvider(\n new CombinedAutocompleteProvider(commands, cwd, this.fdPath),\n new CombinedAutocompleteProvider(commands, cwd, null),\n );\n };\n\nInteractiveModeBase.prototype.setupAutocompleteProvider = function(this: InteractiveModeBase): void {\n let provider = this.createBaseAutocompleteProvider();\n for (const wrapProvider of this.autocompleteProviderWrappers) {\n provider = wrapProvider(provider);\n }\n\n this.autocompleteProvider = provider;\n this.defaultEditor.setAutocompleteProvider(provider);\n if (this.editor !== this.defaultEditor) {\n this.editor.setAutocompleteProvider?.(provider);\n }\n };\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { InteractiveModeBase } from "./interactive-mode-base.js";
|
|
2
|
-
import { CombinedAutocompleteProvider, fuzzyFilter, hasSupportedCodexFastModeModel, BUILTIN_SLASH_COMMANDS, parseGitUrl, getModelSearchText } from "./interactive-mode-deps.js";
|
|
2
|
+
import { CombinedAutocompleteProvider, fuzzyFilter, hasSupportedCodexFastModeModel, BUILTIN_SLASH_COMMANDS, BUNDLED_EXTENSION_SLASH_COMMANDS, parseGitUrl, getModelSearchText } from "./interactive-mode-deps.js";
|
|
3
3
|
import { BUILTIN_SLASH_COMMAND_NAMES } from "./interactive-mode-helpers.js";
|
|
4
4
|
const AT_MENTION_PATH_DELIMITERS = new Set([" ", "\t", '"', "'", "="]);
|
|
5
5
|
function findLastAtMentionDelimiter(text) {
|
|
@@ -173,15 +173,27 @@ InteractiveModeBase.prototype.createBaseAutocompleteProvider = function () {
|
|
|
173
173
|
// Convert extension commands to SlashCommand format. Built-in command names
|
|
174
174
|
// stay reserved even when a built-in is contextually hidden (for example,
|
|
175
175
|
// /fast without a supported OpenAI model) so extension visibility cannot
|
|
176
|
-
// change as auth/model state changes.
|
|
177
|
-
|
|
176
|
+
// change as auth/model state changes. While extension loading is deferred,
|
|
177
|
+
// expose lightweight bundled command metadata without importing heavy
|
|
178
|
+
// implementations; the submit path loads the implementation on demand.
|
|
179
|
+
const registeredExtensionCommands = this.session.extensionRunner
|
|
178
180
|
.getRegisteredCommands()
|
|
179
|
-
.filter((cmd) => !BUILTIN_SLASH_COMMAND_NAMES.has(cmd.name))
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
181
|
+
.filter((cmd) => !BUILTIN_SLASH_COMMAND_NAMES.has(cmd.name));
|
|
182
|
+
const registeredNames = new Set(registeredExtensionCommands.map((cmd) => cmd.invocationName));
|
|
183
|
+
const extensionCommands = [
|
|
184
|
+
...(this.deferredStartupPending
|
|
185
|
+
? BUNDLED_EXTENSION_SLASH_COMMANDS.filter((cmd) => !BUILTIN_SLASH_COMMAND_NAMES.has(cmd.name) && !registeredNames.has(cmd.name)).map((cmd) => ({
|
|
186
|
+
name: cmd.name,
|
|
187
|
+
description: cmd.description,
|
|
188
|
+
getArgumentCompletions: cmd.getArgumentCompletions,
|
|
189
|
+
}))
|
|
190
|
+
: []),
|
|
191
|
+
...registeredExtensionCommands.map((cmd) => ({
|
|
192
|
+
name: cmd.invocationName,
|
|
193
|
+
description: this.prefixAutocompleteDescription(cmd.description, cmd.sourceInfo),
|
|
194
|
+
getArgumentCompletions: cmd.getArgumentCompletions,
|
|
195
|
+
})),
|
|
196
|
+
];
|
|
185
197
|
// Build skill commands from session.skills (if enabled)
|
|
186
198
|
this.skillCommands.clear();
|
|
187
199
|
const skillCommandList = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-autocomplete.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-autocomplete.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type Api, type Model, type AutocompleteItem, type AutocompleteProvider, type AutocompleteSuggestions, type SlashCommand, type ExtensionRunner, type ResourceDiagnostic, type SourceInfo, CombinedAutocompleteProvider, fuzzyFilter, hasSupportedCodexFastModeModel, BUILTIN_SLASH_COMMANDS, parseGitUrl, getModelSearchText } from \"./interactive-mode-deps.ts\";\nimport { BUILTIN_SLASH_COMMAND_NAMES } from \"./interactive-mode-helpers.ts\";\n\nconst AT_MENTION_PATH_DELIMITERS = new Set([\" \", \"\\t\", '\"', \"'\", \"=\"]);\n\nfunction findLastAtMentionDelimiter(text: string): number {\n for (let index = text.length - 1; index >= 0; index -= 1) {\n if (AT_MENTION_PATH_DELIMITERS.has(text[index] ?? \"\")) return index;\n }\n return -1;\n}\n\nfunction isAtMentionTokenStart(text: string, index: number): boolean {\n return index === 0 || AT_MENTION_PATH_DELIMITERS.has(text[index - 1] ?? \"\");\n}\n\nfunction findUnclosedAtMentionQuoteStart(text: string): number | null {\n let quoteStart = -1;\n let inQuotes = false;\n for (let index = 0; index < text.length; index += 1) {\n if (text[index] === '\"') {\n inQuotes = !inQuotes;\n if (inQuotes) quoteStart = index;\n }\n }\n return inQuotes ? quoteStart : null;\n}\n\nfunction extractAtMentionPrefix(textBeforeCursor: string): string | null {\n const quoteStart = findUnclosedAtMentionQuoteStart(textBeforeCursor);\n if (quoteStart !== null && quoteStart > 0 && textBeforeCursor[quoteStart - 1] === \"@\") {\n return isAtMentionTokenStart(textBeforeCursor, quoteStart - 1)\n ? textBeforeCursor.slice(quoteStart - 1)\n : null;\n }\n const lastDelimiterIndex = findLastAtMentionDelimiter(textBeforeCursor);\n const tokenStart = lastDelimiterIndex === -1 ? 0 : lastDelimiterIndex + 1;\n return textBeforeCursor[tokenStart] === \"@\" ? textBeforeCursor.slice(tokenStart) : null;\n}\n\nfunction atMentionPrefixToPathPrefix(atPrefix: string): string {\n return atPrefix.startsWith('@\"') ? `\"${atPrefix.slice(2)}` : atPrefix.slice(1);\n}\n\nfunction toAtMentionCompletion(item: AutocompleteItem): AutocompleteItem {\n return {\n ...item,\n value: item.value.startsWith(\"@\") ? item.value : `@${item.value}`,\n };\n}\n\nclass AtMentionFallbackAutocompleteProvider implements AutocompleteProvider {\n private readonly primary: AutocompleteProvider;\n private readonly pathFallback: AutocompleteProvider;\n\n constructor(primary: AutocompleteProvider, pathFallback: AutocompleteProvider) {\n this.primary = primary;\n this.pathFallback = pathFallback;\n }\n\n async getSuggestions(\n lines: string[],\n cursorLine: number,\n cursorCol: number,\n options: { signal: AbortSignal; force?: boolean },\n ): Promise<AutocompleteSuggestions | null> {\n const primarySuggestions = await this.primary.getSuggestions(lines, cursorLine, cursorCol, options);\n if (primarySuggestions || options.signal.aborted) return primarySuggestions;\n\n const currentLine = lines[cursorLine] ?? \"\";\n const textBeforeCursor = currentLine.slice(0, cursorCol);\n const atPrefix = extractAtMentionPrefix(textBeforeCursor);\n if (!atPrefix) return null;\n\n const pathPrefix = atMentionPrefixToPathPrefix(atPrefix);\n const prefixStart = cursorCol - atPrefix.length;\n const fallbackLines = [...lines];\n fallbackLines[cursorLine] = `${currentLine.slice(0, prefixStart)}${pathPrefix}${currentLine.slice(cursorCol)}`;\n const fallbackSuggestions = await this.pathFallback.getSuggestions(\n fallbackLines,\n cursorLine,\n prefixStart + pathPrefix.length,\n { ...options, force: true },\n );\n if (!fallbackSuggestions) return null;\n\n return {\n prefix: atPrefix,\n items: fallbackSuggestions.items.map(toAtMentionCompletion),\n };\n }\n\n applyCompletion(\n lines: string[],\n cursorLine: number,\n cursorCol: number,\n item: AutocompleteItem,\n prefix: string,\n ): { lines: string[]; cursorLine: number; cursorCol: number } {\n return this.primary.applyCompletion(lines, cursorLine, cursorCol, item, prefix);\n }\n\n shouldTriggerFileCompletion(lines: string[], cursorLine: number, cursorCol: number): boolean {\n return this.primary.shouldTriggerFileCompletion?.(lines, cursorLine, cursorCol) ?? true;\n }\n}\n\nInteractiveModeBase.prototype.getAutocompleteSourceTag = function(this: InteractiveModeBase, sourceInfo?: SourceInfo): string | undefined {\n if (!sourceInfo) {\n return undefined;\n }\n\n const scopePrefix =\n sourceInfo.scope === \"user\"\n ? \"u\"\n : sourceInfo.scope === \"project\"\n ? \"p\"\n : \"t\";\n const source = sourceInfo.source.trim();\n\n if (source === \"auto\" || source === \"local\" || source === \"cli\") {\n return scopePrefix;\n }\n\n if (source.startsWith(\"npm:\")) {\n return `${scopePrefix}:${source}`;\n }\n\n const gitSource = parseGitUrl(source);\n if (gitSource) {\n const ref = gitSource.ref ? `@${gitSource.ref}` : \"\";\n return `${scopePrefix}:git:${gitSource.host}/${gitSource.path}${ref}`;\n }\n\n return scopePrefix;\n };\n\nInteractiveModeBase.prototype.prefixAutocompleteDescription = function(this: InteractiveModeBase, description: string | undefined, sourceInfo?: SourceInfo): string | undefined {\n const sourceTag = this.getAutocompleteSourceTag(sourceInfo);\n if (!sourceTag) {\n return description;\n }\n return description ? `[${sourceTag}] ${description}` : `[${sourceTag}]`;\n };\n\nInteractiveModeBase.prototype.getBuiltInCommandConflictDiagnostics = function(this: InteractiveModeBase, extensionRunner: ExtensionRunner): ResourceDiagnostic[] {\n return extensionRunner\n .getRegisteredCommands()\n .filter((command) => BUILTIN_SLASH_COMMAND_NAMES.has(command.name))\n .map((command) => ({\n type: \"warning\" as const,\n message:\n command.invocationName === command.name\n ? `Extension command '/${command.name}' conflicts with built-in interactive command. Skipping in autocomplete.`\n : `Extension command '/${command.name}' conflicts with built-in interactive command. Available as '/${command.invocationName}'.`,\n path: command.sourceInfo.path,\n }));\n };\n\nInteractiveModeBase.prototype.getCodexFastModeCandidateModels = function(this: InteractiveModeBase): Model<Api>[] {\n if (this.session.scopedModels.length > 0) {\n return this.session.scopedModels\n .map((scoped) => scoped.model)\n .filter((model) => this.session.modelRegistry.hasConfiguredAuth(model));\n }\n\n return this.session.modelRegistry.getAvailable();\n };\n\nInteractiveModeBase.prototype.hasCodexFastModeSupportedModels = function(this: InteractiveModeBase): boolean {\n return hasSupportedCodexFastModeModel(\n this.getCodexFastModeCandidateModels(),\n );\n };\n\nInteractiveModeBase.prototype.createBaseAutocompleteProvider = function(this: InteractiveModeBase): AutocompleteProvider {\n // Define commands for autocomplete\n const slashCommands: SlashCommand[] = BUILTIN_SLASH_COMMANDS.filter(\n (command) => command.name !== \"fast\" || this.hasCodexFastModeSupportedModels(),\n ).map((command) => ({\n name: command.name,\n description: command.description,\n getArgumentCompletions: command.getArgumentCompletions,\n }));\n\n const modelCommand = slashCommands.find(\n (command) => command.name === \"model\",\n );\n if (modelCommand) {\n modelCommand.getArgumentCompletions = (\n prefix: string,\n ): AutocompleteItem[] | null => {\n // Get available models (scoped or from registry)\n const models =\n this.session.scopedModels.length > 0\n ? this.session.scopedModels.map((s) => s.model)\n : this.session.modelRegistry.getAvailable();\n\n if (models.length === 0) return null;\n\n // Create items with provider/id format\n const items = models.map((m) => ({\n id: m.id,\n provider: m.provider,\n name: m.name,\n label: `${m.provider}/${m.id}`,\n }));\n\n // Fuzzy filter by model ID + provider in either order.\n const filtered = fuzzyFilter(items, prefix, getModelSearchText);\n\n if (filtered.length === 0) return null;\n\n return filtered.map((item) => ({\n value: item.label,\n label: item.id,\n description: item.provider,\n }));\n };\n }\n\n // Convert prompt templates to SlashCommand format for autocomplete\n const templateCommands: SlashCommand[] = this.session.promptTemplates.map(\n (cmd) => ({\n name: cmd.name,\n description: this.prefixAutocompleteDescription(\n cmd.description,\n cmd.sourceInfo,\n ),\n ...(cmd.argumentHint && { argumentHint: cmd.argumentHint }),\n }),\n );\n\n // Convert extension commands to SlashCommand format. Built-in command names\n // stay reserved even when a built-in is contextually hidden (for example,\n // /fast without a supported OpenAI model) so extension visibility cannot\n // change as auth/model state changes.\n const extensionCommands: SlashCommand[] = this.session.extensionRunner\n .getRegisteredCommands()\n .filter((cmd) => !BUILTIN_SLASH_COMMAND_NAMES.has(cmd.name))\n .map((cmd) => ({\n name: cmd.invocationName,\n description: this.prefixAutocompleteDescription(\n cmd.description,\n cmd.sourceInfo,\n ),\n getArgumentCompletions: cmd.getArgumentCompletions,\n }));\n\n // Build skill commands from session.skills (if enabled)\n this.skillCommands.clear();\n const skillCommandList: SlashCommand[] = [];\n if (this.settingsManager.getEnableSkillCommands()) {\n for (const skill of this.session.resourceLoader.getSkills().skills) {\n const commandName = `skill:${skill.name}`;\n this.skillCommands.set(commandName, skill.filePath);\n skillCommandList.push({\n name: commandName,\n description: this.prefixAutocompleteDescription(\n skill.description,\n skill.sourceInfo,\n ),\n });\n }\n }\n\n const commands = [\n ...slashCommands,\n ...templateCommands,\n ...extensionCommands,\n ...skillCommandList,\n ];\n const cwd = this.sessionManager.getCwd();\n return new AtMentionFallbackAutocompleteProvider(\n new CombinedAutocompleteProvider(commands, cwd, this.fdPath),\n new CombinedAutocompleteProvider(commands, cwd, null),\n );\n };\n\nInteractiveModeBase.prototype.setupAutocompleteProvider = function(this: InteractiveModeBase): void {\n let provider = this.createBaseAutocompleteProvider();\n for (const wrapProvider of this.autocompleteProviderWrappers) {\n provider = wrapProvider(provider);\n }\n\n this.autocompleteProvider = provider;\n this.defaultEditor.setAutocompleteProvider(provider);\n if (this.editor !== this.defaultEditor) {\n this.editor.setAutocompleteProvider?.(provider);\n }\n };\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-autocomplete.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-autocomplete.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type Api, type Model, type AutocompleteItem, type AutocompleteProvider, type AutocompleteSuggestions, type SlashCommand, type ExtensionRunner, type ResourceDiagnostic, type SourceInfo, CombinedAutocompleteProvider, fuzzyFilter, hasSupportedCodexFastModeModel, BUILTIN_SLASH_COMMANDS, BUNDLED_EXTENSION_SLASH_COMMANDS, parseGitUrl, getModelSearchText } from \"./interactive-mode-deps.ts\";\nimport { BUILTIN_SLASH_COMMAND_NAMES } from \"./interactive-mode-helpers.ts\";\n\nconst AT_MENTION_PATH_DELIMITERS = new Set([\" \", \"\\t\", '\"', \"'\", \"=\"]);\n\nfunction findLastAtMentionDelimiter(text: string): number {\n for (let index = text.length - 1; index >= 0; index -= 1) {\n if (AT_MENTION_PATH_DELIMITERS.has(text[index] ?? \"\")) return index;\n }\n return -1;\n}\n\nfunction isAtMentionTokenStart(text: string, index: number): boolean {\n return index === 0 || AT_MENTION_PATH_DELIMITERS.has(text[index - 1] ?? \"\");\n}\n\nfunction findUnclosedAtMentionQuoteStart(text: string): number | null {\n let quoteStart = -1;\n let inQuotes = false;\n for (let index = 0; index < text.length; index += 1) {\n if (text[index] === '\"') {\n inQuotes = !inQuotes;\n if (inQuotes) quoteStart = index;\n }\n }\n return inQuotes ? quoteStart : null;\n}\n\nfunction extractAtMentionPrefix(textBeforeCursor: string): string | null {\n const quoteStart = findUnclosedAtMentionQuoteStart(textBeforeCursor);\n if (quoteStart !== null && quoteStart > 0 && textBeforeCursor[quoteStart - 1] === \"@\") {\n return isAtMentionTokenStart(textBeforeCursor, quoteStart - 1)\n ? textBeforeCursor.slice(quoteStart - 1)\n : null;\n }\n const lastDelimiterIndex = findLastAtMentionDelimiter(textBeforeCursor);\n const tokenStart = lastDelimiterIndex === -1 ? 0 : lastDelimiterIndex + 1;\n return textBeforeCursor[tokenStart] === \"@\" ? textBeforeCursor.slice(tokenStart) : null;\n}\n\nfunction atMentionPrefixToPathPrefix(atPrefix: string): string {\n return atPrefix.startsWith('@\"') ? `\"${atPrefix.slice(2)}` : atPrefix.slice(1);\n}\n\nfunction toAtMentionCompletion(item: AutocompleteItem): AutocompleteItem {\n return {\n ...item,\n value: item.value.startsWith(\"@\") ? item.value : `@${item.value}`,\n };\n}\n\nclass AtMentionFallbackAutocompleteProvider implements AutocompleteProvider {\n private readonly primary: AutocompleteProvider;\n private readonly pathFallback: AutocompleteProvider;\n\n constructor(primary: AutocompleteProvider, pathFallback: AutocompleteProvider) {\n this.primary = primary;\n this.pathFallback = pathFallback;\n }\n\n async getSuggestions(\n lines: string[],\n cursorLine: number,\n cursorCol: number,\n options: { signal: AbortSignal; force?: boolean },\n ): Promise<AutocompleteSuggestions | null> {\n const primarySuggestions = await this.primary.getSuggestions(lines, cursorLine, cursorCol, options);\n if (primarySuggestions || options.signal.aborted) return primarySuggestions;\n\n const currentLine = lines[cursorLine] ?? \"\";\n const textBeforeCursor = currentLine.slice(0, cursorCol);\n const atPrefix = extractAtMentionPrefix(textBeforeCursor);\n if (!atPrefix) return null;\n\n const pathPrefix = atMentionPrefixToPathPrefix(atPrefix);\n const prefixStart = cursorCol - atPrefix.length;\n const fallbackLines = [...lines];\n fallbackLines[cursorLine] = `${currentLine.slice(0, prefixStart)}${pathPrefix}${currentLine.slice(cursorCol)}`;\n const fallbackSuggestions = await this.pathFallback.getSuggestions(\n fallbackLines,\n cursorLine,\n prefixStart + pathPrefix.length,\n { ...options, force: true },\n );\n if (!fallbackSuggestions) return null;\n\n return {\n prefix: atPrefix,\n items: fallbackSuggestions.items.map(toAtMentionCompletion),\n };\n }\n\n applyCompletion(\n lines: string[],\n cursorLine: number,\n cursorCol: number,\n item: AutocompleteItem,\n prefix: string,\n ): { lines: string[]; cursorLine: number; cursorCol: number } {\n return this.primary.applyCompletion(lines, cursorLine, cursorCol, item, prefix);\n }\n\n shouldTriggerFileCompletion(lines: string[], cursorLine: number, cursorCol: number): boolean {\n return this.primary.shouldTriggerFileCompletion?.(lines, cursorLine, cursorCol) ?? true;\n }\n}\n\nInteractiveModeBase.prototype.getAutocompleteSourceTag = function(this: InteractiveModeBase, sourceInfo?: SourceInfo): string | undefined {\n if (!sourceInfo) {\n return undefined;\n }\n\n const scopePrefix =\n sourceInfo.scope === \"user\"\n ? \"u\"\n : sourceInfo.scope === \"project\"\n ? \"p\"\n : \"t\";\n const source = sourceInfo.source.trim();\n\n if (source === \"auto\" || source === \"local\" || source === \"cli\") {\n return scopePrefix;\n }\n\n if (source.startsWith(\"npm:\")) {\n return `${scopePrefix}:${source}`;\n }\n\n const gitSource = parseGitUrl(source);\n if (gitSource) {\n const ref = gitSource.ref ? `@${gitSource.ref}` : \"\";\n return `${scopePrefix}:git:${gitSource.host}/${gitSource.path}${ref}`;\n }\n\n return scopePrefix;\n };\n\nInteractiveModeBase.prototype.prefixAutocompleteDescription = function(this: InteractiveModeBase, description: string | undefined, sourceInfo?: SourceInfo): string | undefined {\n const sourceTag = this.getAutocompleteSourceTag(sourceInfo);\n if (!sourceTag) {\n return description;\n }\n return description ? `[${sourceTag}] ${description}` : `[${sourceTag}]`;\n };\n\nInteractiveModeBase.prototype.getBuiltInCommandConflictDiagnostics = function(this: InteractiveModeBase, extensionRunner: ExtensionRunner): ResourceDiagnostic[] {\n return extensionRunner\n .getRegisteredCommands()\n .filter((command) => BUILTIN_SLASH_COMMAND_NAMES.has(command.name))\n .map((command) => ({\n type: \"warning\" as const,\n message:\n command.invocationName === command.name\n ? `Extension command '/${command.name}' conflicts with built-in interactive command. Skipping in autocomplete.`\n : `Extension command '/${command.name}' conflicts with built-in interactive command. Available as '/${command.invocationName}'.`,\n path: command.sourceInfo.path,\n }));\n };\n\nInteractiveModeBase.prototype.getCodexFastModeCandidateModels = function(this: InteractiveModeBase): Model<Api>[] {\n if (this.session.scopedModels.length > 0) {\n return this.session.scopedModels\n .map((scoped) => scoped.model)\n .filter((model) => this.session.modelRegistry.hasConfiguredAuth(model));\n }\n\n return this.session.modelRegistry.getAvailable();\n };\n\nInteractiveModeBase.prototype.hasCodexFastModeSupportedModels = function(this: InteractiveModeBase): boolean {\n return hasSupportedCodexFastModeModel(\n this.getCodexFastModeCandidateModels(),\n );\n };\n\nInteractiveModeBase.prototype.createBaseAutocompleteProvider = function(this: InteractiveModeBase): AutocompleteProvider {\n // Define commands for autocomplete\n const slashCommands: SlashCommand[] = BUILTIN_SLASH_COMMANDS.filter(\n (command) => command.name !== \"fast\" || this.hasCodexFastModeSupportedModels(),\n ).map((command) => ({\n name: command.name,\n description: command.description,\n getArgumentCompletions: command.getArgumentCompletions,\n }));\n\n const modelCommand = slashCommands.find(\n (command) => command.name === \"model\",\n );\n if (modelCommand) {\n modelCommand.getArgumentCompletions = (\n prefix: string,\n ): AutocompleteItem[] | null => {\n // Get available models (scoped or from registry)\n const models =\n this.session.scopedModels.length > 0\n ? this.session.scopedModels.map((s) => s.model)\n : this.session.modelRegistry.getAvailable();\n\n if (models.length === 0) return null;\n\n // Create items with provider/id format\n const items = models.map((m) => ({\n id: m.id,\n provider: m.provider,\n name: m.name,\n label: `${m.provider}/${m.id}`,\n }));\n\n // Fuzzy filter by model ID + provider in either order.\n const filtered = fuzzyFilter(items, prefix, getModelSearchText);\n\n if (filtered.length === 0) return null;\n\n return filtered.map((item) => ({\n value: item.label,\n label: item.id,\n description: item.provider,\n }));\n };\n }\n\n // Convert prompt templates to SlashCommand format for autocomplete\n const templateCommands: SlashCommand[] = this.session.promptTemplates.map(\n (cmd) => ({\n name: cmd.name,\n description: this.prefixAutocompleteDescription(\n cmd.description,\n cmd.sourceInfo,\n ),\n ...(cmd.argumentHint && { argumentHint: cmd.argumentHint }),\n }),\n );\n\n // Convert extension commands to SlashCommand format. Built-in command names\n // stay reserved even when a built-in is contextually hidden (for example,\n // /fast without a supported OpenAI model) so extension visibility cannot\n // change as auth/model state changes. While extension loading is deferred,\n // expose lightweight bundled command metadata without importing heavy\n // implementations; the submit path loads the implementation on demand.\n const registeredExtensionCommands = this.session.extensionRunner\n .getRegisteredCommands()\n .filter((cmd) => !BUILTIN_SLASH_COMMAND_NAMES.has(cmd.name));\n const registeredNames = new Set(registeredExtensionCommands.map((cmd) => cmd.invocationName));\n const extensionCommands: SlashCommand[] = [\n ...(this.deferredStartupPending\n ? BUNDLED_EXTENSION_SLASH_COMMANDS.filter(\n (cmd) => !BUILTIN_SLASH_COMMAND_NAMES.has(cmd.name) && !registeredNames.has(cmd.name),\n ).map((cmd) => ({\n name: cmd.name,\n description: cmd.description,\n getArgumentCompletions: cmd.getArgumentCompletions,\n }))\n : []),\n ...registeredExtensionCommands.map((cmd) => ({\n name: cmd.invocationName,\n description: this.prefixAutocompleteDescription(\n cmd.description,\n cmd.sourceInfo,\n ),\n getArgumentCompletions: cmd.getArgumentCompletions,\n })),\n ];\n\n // Build skill commands from session.skills (if enabled)\n this.skillCommands.clear();\n const skillCommandList: SlashCommand[] = [];\n if (this.settingsManager.getEnableSkillCommands()) {\n for (const skill of this.session.resourceLoader.getSkills().skills) {\n const commandName = `skill:${skill.name}`;\n this.skillCommands.set(commandName, skill.filePath);\n skillCommandList.push({\n name: commandName,\n description: this.prefixAutocompleteDescription(\n skill.description,\n skill.sourceInfo,\n ),\n });\n }\n }\n\n const commands = [\n ...slashCommands,\n ...templateCommands,\n ...extensionCommands,\n ...skillCommandList,\n ];\n const cwd = this.sessionManager.getCwd();\n return new AtMentionFallbackAutocompleteProvider(\n new CombinedAutocompleteProvider(commands, cwd, this.fdPath),\n new CombinedAutocompleteProvider(commands, cwd, null),\n );\n };\n\nInteractiveModeBase.prototype.setupAutocompleteProvider = function(this: InteractiveModeBase): void {\n let provider = this.createBaseAutocompleteProvider();\n for (const wrapProvider of this.autocompleteProviderWrappers) {\n provider = wrapProvider(provider);\n }\n\n this.autocompleteProvider = provider;\n this.defaultEditor.setAutocompleteProvider(provider);\n if (this.editor !== this.defaultEditor) {\n this.editor.setAutocompleteProvider?.(provider);\n }\n };\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Component, Container } from "@earendil-works/pi-tui";
|
|
2
|
+
/**
|
|
3
|
+
* Append rendered children normally, then move only newly appended components
|
|
4
|
+
* before an already-attached anchor without detaching or recreating the anchor.
|
|
5
|
+
*/
|
|
6
|
+
export declare function appendNewChildrenBeforeAttachedChild(container: Container, anchor: Component | undefined, append: () => void): void;
|
|
7
|
+
//# sourceMappingURL=interactive-child-ordering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive-child-ordering.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-child-ordering.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnE;;;GAGG;AACH,wBAAgB,oCAAoC,CACnD,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,SAAS,GAAG,SAAS,EAC7B,MAAM,EAAE,MAAM,IAAI,GAChB,IAAI,CAoBN","sourcesContent":["import type { Component, Container } from \"@earendil-works/pi-tui\";\n\n/**\n * Append rendered children normally, then move only newly appended components\n * before an already-attached anchor without detaching or recreating the anchor.\n */\nexport function appendNewChildrenBeforeAttachedChild(\n\tcontainer: Container,\n\tanchor: Component | undefined,\n\tappend: () => void,\n): void {\n\tconst anchorIndex = anchor ? container.children.indexOf(anchor) : -1;\n\tif (anchorIndex < 0) {\n\t\tappend();\n\t\treturn;\n\t}\n\n\tconst existingChildren = new Set(container.children);\n\tappend();\n\tif (!anchor || !container.children.includes(anchor)) return;\n\n\tconst appendedChildren = container.children.filter((child) => !existingChildren.has(child));\n\tif (appendedChildren.length === 0) return;\n\n\t// Direct splices preserve live child instances; remove/add APIs would detach and remount them.\n\tconst appendedSet = new Set(appendedChildren);\n\tfor (let index = container.children.length - 1; index >= 0; index--) {\n\t\tif (appendedSet.has(container.children[index]!)) container.children.splice(index, 1);\n\t}\n\tcontainer.children.splice(anchorIndex, 0, ...appendedChildren);\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Append rendered children normally, then move only newly appended components
|
|
3
|
+
* before an already-attached anchor without detaching or recreating the anchor.
|
|
4
|
+
*/
|
|
5
|
+
export function appendNewChildrenBeforeAttachedChild(container, anchor, append) {
|
|
6
|
+
const anchorIndex = anchor ? container.children.indexOf(anchor) : -1;
|
|
7
|
+
if (anchorIndex < 0) {
|
|
8
|
+
append();
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const existingChildren = new Set(container.children);
|
|
12
|
+
append();
|
|
13
|
+
if (!anchor || !container.children.includes(anchor))
|
|
14
|
+
return;
|
|
15
|
+
const appendedChildren = container.children.filter((child) => !existingChildren.has(child));
|
|
16
|
+
if (appendedChildren.length === 0)
|
|
17
|
+
return;
|
|
18
|
+
// Direct splices preserve live child instances; remove/add APIs would detach and remount them.
|
|
19
|
+
const appendedSet = new Set(appendedChildren);
|
|
20
|
+
for (let index = container.children.length - 1; index >= 0; index--) {
|
|
21
|
+
if (appendedSet.has(container.children[index]))
|
|
22
|
+
container.children.splice(index, 1);
|
|
23
|
+
}
|
|
24
|
+
container.children.splice(anchorIndex, 0, ...appendedChildren);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=interactive-child-ordering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive-child-ordering.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-child-ordering.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,oCAAoC,CACnD,SAAoB,EACpB,MAA6B,EAC7B,MAAkB;IAElB,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,EAAE,CAAC;QACT,OAAO;IACR,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC;IACT,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO;IAE5D,MAAM,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5F,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE1C,+FAA+F;IAC/F,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9C,KAAK,IAAI,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACrE,IAAI,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAE,CAAC;YAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtF,CAAC;IACD,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,gBAAgB,CAAC,CAAC;AAChE,CAAC","sourcesContent":["import type { Component, Container } from \"@earendil-works/pi-tui\";\n\n/**\n * Append rendered children normally, then move only newly appended components\n * before an already-attached anchor without detaching or recreating the anchor.\n */\nexport function appendNewChildrenBeforeAttachedChild(\n\tcontainer: Container,\n\tanchor: Component | undefined,\n\tappend: () => void,\n): void {\n\tconst anchorIndex = anchor ? container.children.indexOf(anchor) : -1;\n\tif (anchorIndex < 0) {\n\t\tappend();\n\t\treturn;\n\t}\n\n\tconst existingChildren = new Set(container.children);\n\tappend();\n\tif (!anchor || !container.children.includes(anchor)) return;\n\n\tconst appendedChildren = container.children.filter((child) => !existingChildren.has(child));\n\tif (appendedChildren.length === 0) return;\n\n\t// Direct splices preserve live child instances; remove/add APIs would detach and remount them.\n\tconst appendedSet = new Set(appendedChildren);\n\tfor (let index = container.children.length - 1; index >= 0; index--) {\n\t\tif (appendedSet.has(container.children[index]!)) container.children.splice(index, 1);\n\t}\n\tcontainer.children.splice(anchorIndex, 0, ...appendedChildren);\n}\n"]}
|
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import { InteractiveModeBase } from "./interactive-mode-base.ts";
|
|
2
|
+
export interface DeferredStartupMode {
|
|
3
|
+
deferredStartupPending: boolean;
|
|
4
|
+
deferredStartupPromise: Promise<void> | undefined;
|
|
5
|
+
completeDeferredStartup(): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export declare function ensureDeferredStartupComplete(mode: DeferredStartupMode): Promise<void>;
|
|
8
|
+
export declare function applyDeferredModelScope(mode: InteractiveModeBase): Promise<void>;
|
|
2
9
|
//# sourceMappingURL=interactive-deferred-startup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-deferred-startup.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-deferred-startup.ts"],"names":[],"mappings":"","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {
|
|
1
|
+
{"version":3,"file":"interactive-deferred-startup.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-deferred-startup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAIjE,MAAM,WAAW,mBAAmB;IAChC,sBAAsB,EAAE,OAAO,CAAC;IAChC,sBAAsB,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAClD,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAEH,wBAAsB,6BAA6B,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa1F;AAoDH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCpF","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { modelsAreEqual } from \"@earendil-works/pi-ai/compat\";\nimport { type Container, recordTimeSinceReset, resolveModelScopeWithDiagnostics, resolveRestoredModelReference, setRegisteredThemes } from \"./interactive-mode-deps.ts\";\n\nexport interface DeferredStartupMode {\n deferredStartupPending: boolean;\n deferredStartupPromise: Promise<void> | undefined;\n completeDeferredStartup(): Promise<void>;\n }\n\nexport async function ensureDeferredStartupComplete(mode: DeferredStartupMode): Promise<void> {\n if (!mode.deferredStartupPending && !mode.deferredStartupPromise) return;\n const startupPromise = mode.deferredStartupPromise ?? Promise.resolve().then(() => mode.completeDeferredStartup());\n mode.deferredStartupPromise = startupPromise;\n try {\n await startupPromise;\n } catch {\n mode.deferredStartupPending = false;\n } finally {\n if (mode.deferredStartupPromise === startupPromise && !mode.deferredStartupPending) {\n mode.deferredStartupPromise = undefined;\n }\n }\n }\n\nInteractiveModeBase.prototype.ensureDeferredStartupComplete = async function(this: InteractiveModeBase): Promise<void> {\n await ensureDeferredStartupComplete(this);\n };\n\n/**\n * Finishes a startup where extension loading was deferred so the TUI could\n * paint immediately. Loads extension code via session.reload(), then applies\n * the same post-load UI wiring as /reload and discloses loaded resources.\n */\nInteractiveModeBase.prototype.completeDeferredStartup = async function(this: InteractiveModeBase): Promise<void> {\n try {\n await this.bindCurrentSessionExtensions();\n await this.session.reload({ reason: \"startup\" });\n\n this.stopWorkingLoader();\n this.deferredStartupPending = false;\n recordTimeSinceReset(\"deferred-extension-load\");\n\n setRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n await this.themeController.applyFromSettings();\n this.setupAutocompleteProvider();\n this.setupExtensionShortcuts(this.session.extensionRunner);\n await applyDeferredModelScope(this);\n await this.retryDeferredModelRestore(this.startupNoticesContainer);\n if (this.deferLoadedResourcesDisclosureUntilAgentEnd) {\n this.pendingLoadedResourcesDisclosure = true;\n } else {\n this.showLoadedResources({ force: true, showDiagnosticsWhenQuiet: true, targetContainer: this.startupNoticesContainer });\n // Keep the subscription warning after the RESOURCES disclosure.\n void this.maybeWarnAboutAnthropicSubscriptionAuth(undefined, this.startupNoticesContainer);\n this.showStartupNoticesIfNeeded(this.startupNoticesContainer);\n }\n const modelsJsonError = this.session.modelRegistry.getError();\n if (modelsJsonError) {\n this.showError(`models.json error: ${modelsJsonError}`);\n }\n void this.updateAvailableProviderCount().catch(() => {});\n this.updateEditorBorderColor();\n this.ui.requestRender();\n } catch (error) {\n this.stopWorkingLoader();\n this.deferredStartupPending = false;\n this.showError(\n `Extension loading failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n // The RESOURCES disclosure will not render; surface the held warning.\n void this.maybeWarnAboutAnthropicSubscriptionAuth(undefined, this.startupNoticesContainer);\n }\n };\n\nexport async function applyDeferredModelScope(mode: InteractiveModeBase): Promise<void> {\n const patterns = mode.options.deferredModelScopePatterns;\n if (!patterns || patterns.length === 0) {\n return;\n }\n\n const { scopedModels, diagnostics } = await resolveModelScopeWithDiagnostics(patterns, mode.session.modelRegistry);\n for (const diagnostic of diagnostics) {\n mode.showWarning(diagnostic.message);\n }\n mode.session.setScopedModels(scopedModels);\n\n if (mode.sessionManager.buildSessionContext().messages.length > 0 || scopedModels.length === 0) {\n return;\n }\n\n const currentModel = mode.session.model;\n if (currentModel && scopedModels.some((scoped) => modelsAreEqual(scoped.model, currentModel))) {\n return;\n }\n\n const savedProvider = mode.settingsManager.getDefaultProvider();\n const savedModelId = mode.settingsManager.getDefaultModel();\n const savedModel = savedProvider && savedModelId ? mode.session.modelRegistry.find(savedProvider, savedModelId) : undefined;\n const preferred = savedModel ? scopedModels.find((scoped) => modelsAreEqual(scoped.model, savedModel)) : undefined;\n const nextScopedModel = preferred ?? scopedModels[0];\n if (mode.session.modelRegistry.hasConfiguredAuth(nextScopedModel.model)) {\n await mode.session.setModel(nextScopedModel.model);\n if (nextScopedModel.thinkingLevel && !mode.options.deferredModelScopePreserveThinking) {\n mode.session.setThinkingLevel(nextScopedModel.thinkingLevel);\n }\n }\n }\n\n/**\n * A session model saved with an extension-registered provider cannot resolve\n * until extensions load; retry the restore now and only surface the fallback\n * warning if it still fails.\n */\nInteractiveModeBase.prototype.retryDeferredModelRestore = async function(this: InteractiveModeBase, targetContainer?: Container): Promise<void> {\n const fallbackMessage = this.options.modelFallbackMessage;\n if (!fallbackMessage) {\n return;\n }\n const savedModel = this.sessionManager.buildSessionContext().model;\n if (!savedModel && this.session.model && this.session.modelRegistry.hasConfiguredAuth(this.session.model)) {\n return;\n }\n if (savedModel) {\n const restoredModel = await resolveRestoredModelReference(\n savedModel.provider,\n savedModel.modelId,\n this.session.modelRegistry,\n );\n if (restoredModel && this.session.modelRegistry.hasConfiguredAuth(restoredModel)) {\n await this.session.setModel(restoredModel);\n return;\n }\n }\n this.showWarning(fallbackMessage, targetContainer);\n };\n"]}
|
|
@@ -1,59 +1,119 @@
|
|
|
1
1
|
import { InteractiveModeBase } from "./interactive-mode-base.js";
|
|
2
|
-
import {
|
|
2
|
+
import { modelsAreEqual } from "@earendil-works/pi-ai/compat";
|
|
3
|
+
import { recordTimeSinceReset, resolveModelScopeWithDiagnostics, resolveRestoredModelReference, setRegisteredThemes } from "./interactive-mode-deps.js";
|
|
4
|
+
export async function ensureDeferredStartupComplete(mode) {
|
|
5
|
+
if (!mode.deferredStartupPending && !mode.deferredStartupPromise)
|
|
6
|
+
return;
|
|
7
|
+
const startupPromise = mode.deferredStartupPromise ?? Promise.resolve().then(() => mode.completeDeferredStartup());
|
|
8
|
+
mode.deferredStartupPromise = startupPromise;
|
|
9
|
+
try {
|
|
10
|
+
await startupPromise;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
mode.deferredStartupPending = false;
|
|
14
|
+
}
|
|
15
|
+
finally {
|
|
16
|
+
if (mode.deferredStartupPromise === startupPromise && !mode.deferredStartupPending) {
|
|
17
|
+
mode.deferredStartupPromise = undefined;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
InteractiveModeBase.prototype.ensureDeferredStartupComplete = async function () {
|
|
22
|
+
await ensureDeferredStartupComplete(this);
|
|
23
|
+
};
|
|
3
24
|
/**
|
|
4
25
|
* Finishes a startup where extension loading was deferred so the TUI could
|
|
5
26
|
* paint immediately. Loads extension code via session.reload(), then applies
|
|
6
27
|
* the same post-load UI wiring as /reload and discloses loaded resources.
|
|
7
28
|
*/
|
|
8
29
|
InteractiveModeBase.prototype.completeDeferredStartup = async function () {
|
|
9
|
-
const loadingIndicator = new Text(theme.fg("dim", "Loading extensions, skills, prompts, themes..."), 1, 0);
|
|
10
|
-
this.chatContainer.addChild(loadingIndicator);
|
|
11
|
-
this.ui.requestRender();
|
|
12
30
|
try {
|
|
31
|
+
await this.bindCurrentSessionExtensions();
|
|
13
32
|
await this.session.reload({ reason: "startup" });
|
|
33
|
+
this.stopWorkingLoader();
|
|
34
|
+
this.deferredStartupPending = false;
|
|
35
|
+
recordTimeSinceReset("deferred-extension-load");
|
|
36
|
+
setRegisteredThemes(this.session.resourceLoader.getThemes().themes);
|
|
37
|
+
await this.themeController.applyFromSettings();
|
|
38
|
+
this.setupAutocompleteProvider();
|
|
39
|
+
this.setupExtensionShortcuts(this.session.extensionRunner);
|
|
40
|
+
await applyDeferredModelScope(this);
|
|
41
|
+
await this.retryDeferredModelRestore(this.startupNoticesContainer);
|
|
42
|
+
if (this.deferLoadedResourcesDisclosureUntilAgentEnd) {
|
|
43
|
+
this.pendingLoadedResourcesDisclosure = true;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
this.showLoadedResources({ force: true, showDiagnosticsWhenQuiet: true, targetContainer: this.startupNoticesContainer });
|
|
47
|
+
// Keep the subscription warning after the RESOURCES disclosure.
|
|
48
|
+
void this.maybeWarnAboutAnthropicSubscriptionAuth(undefined, this.startupNoticesContainer);
|
|
49
|
+
this.showStartupNoticesIfNeeded(this.startupNoticesContainer);
|
|
50
|
+
}
|
|
51
|
+
const modelsJsonError = this.session.modelRegistry.getError();
|
|
52
|
+
if (modelsJsonError) {
|
|
53
|
+
this.showError(`models.json error: ${modelsJsonError}`);
|
|
54
|
+
}
|
|
55
|
+
void this.updateAvailableProviderCount().catch(() => { });
|
|
56
|
+
this.updateEditorBorderColor();
|
|
57
|
+
this.ui.requestRender();
|
|
14
58
|
}
|
|
15
59
|
catch (error) {
|
|
16
|
-
this.
|
|
60
|
+
this.stopWorkingLoader();
|
|
17
61
|
this.deferredStartupPending = false;
|
|
18
62
|
this.showError(`Extension loading failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
19
|
-
|
|
63
|
+
// The RESOURCES disclosure will not render; surface the held warning.
|
|
64
|
+
void this.maybeWarnAboutAnthropicSubscriptionAuth(undefined, this.startupNoticesContainer);
|
|
20
65
|
}
|
|
21
|
-
this.chatContainer.removeChild(loadingIndicator);
|
|
22
|
-
this.deferredStartupPending = false;
|
|
23
|
-
recordTimeSinceReset("deferred-extension-load");
|
|
24
|
-
setRegisteredThemes(this.session.resourceLoader.getThemes().themes);
|
|
25
|
-
await this.themeController.applyFromSettings();
|
|
26
|
-
this.setupAutocompleteProvider();
|
|
27
|
-
this.setupExtensionShortcuts(this.session.extensionRunner);
|
|
28
|
-
await this.retryDeferredModelRestore();
|
|
29
|
-
this.showLoadedResources({ force: false, showDiagnosticsWhenQuiet: true });
|
|
30
|
-
this.showStartupNoticesIfNeeded();
|
|
31
|
-
const modelsJsonError = this.session.modelRegistry.getError();
|
|
32
|
-
if (modelsJsonError) {
|
|
33
|
-
this.showError(`models.json error: ${modelsJsonError}`);
|
|
34
|
-
}
|
|
35
|
-
void this.updateAvailableProviderCount().catch(() => { });
|
|
36
|
-
this.updateEditorBorderColor();
|
|
37
|
-
this.ui.requestRender();
|
|
38
66
|
};
|
|
67
|
+
export async function applyDeferredModelScope(mode) {
|
|
68
|
+
const patterns = mode.options.deferredModelScopePatterns;
|
|
69
|
+
if (!patterns || patterns.length === 0) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const { scopedModels, diagnostics } = await resolveModelScopeWithDiagnostics(patterns, mode.session.modelRegistry);
|
|
73
|
+
for (const diagnostic of diagnostics) {
|
|
74
|
+
mode.showWarning(diagnostic.message);
|
|
75
|
+
}
|
|
76
|
+
mode.session.setScopedModels(scopedModels);
|
|
77
|
+
if (mode.sessionManager.buildSessionContext().messages.length > 0 || scopedModels.length === 0) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const currentModel = mode.session.model;
|
|
81
|
+
if (currentModel && scopedModels.some((scoped) => modelsAreEqual(scoped.model, currentModel))) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const savedProvider = mode.settingsManager.getDefaultProvider();
|
|
85
|
+
const savedModelId = mode.settingsManager.getDefaultModel();
|
|
86
|
+
const savedModel = savedProvider && savedModelId ? mode.session.modelRegistry.find(savedProvider, savedModelId) : undefined;
|
|
87
|
+
const preferred = savedModel ? scopedModels.find((scoped) => modelsAreEqual(scoped.model, savedModel)) : undefined;
|
|
88
|
+
const nextScopedModel = preferred ?? scopedModels[0];
|
|
89
|
+
if (mode.session.modelRegistry.hasConfiguredAuth(nextScopedModel.model)) {
|
|
90
|
+
await mode.session.setModel(nextScopedModel.model);
|
|
91
|
+
if (nextScopedModel.thinkingLevel && !mode.options.deferredModelScopePreserveThinking) {
|
|
92
|
+
mode.session.setThinkingLevel(nextScopedModel.thinkingLevel);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
39
96
|
/**
|
|
40
97
|
* A session model saved with an extension-registered provider cannot resolve
|
|
41
98
|
* until extensions load; retry the restore now and only surface the fallback
|
|
42
99
|
* warning if it still fails.
|
|
43
100
|
*/
|
|
44
|
-
InteractiveModeBase.prototype.retryDeferredModelRestore = async function () {
|
|
101
|
+
InteractiveModeBase.prototype.retryDeferredModelRestore = async function (targetContainer) {
|
|
45
102
|
const fallbackMessage = this.options.modelFallbackMessage;
|
|
46
103
|
if (!fallbackMessage) {
|
|
47
104
|
return;
|
|
48
105
|
}
|
|
49
106
|
const savedModel = this.sessionManager.buildSessionContext().model;
|
|
107
|
+
if (!savedModel && this.session.model && this.session.modelRegistry.hasConfiguredAuth(this.session.model)) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
50
110
|
if (savedModel) {
|
|
51
|
-
const restoredModel = await
|
|
111
|
+
const restoredModel = await resolveRestoredModelReference(savedModel.provider, savedModel.modelId, this.session.modelRegistry);
|
|
52
112
|
if (restoredModel && this.session.modelRegistry.hasConfiguredAuth(restoredModel)) {
|
|
53
113
|
await this.session.setModel(restoredModel);
|
|
54
114
|
return;
|
|
55
115
|
}
|
|
56
116
|
}
|
|
57
|
-
this.showWarning(fallbackMessage);
|
|
117
|
+
this.showWarning(fallbackMessage, targetContainer);
|
|
58
118
|
};
|
|
59
119
|
//# sourceMappingURL=interactive-deferred-startup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-deferred-startup.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-deferred-startup.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { recordTimeSinceReset, resolveSavedModelReference, setRegisteredThemes, Text, theme } from \"./interactive-mode-deps.ts\";\n\n/**\n * Finishes a startup where extension loading was deferred so the TUI could\n * paint immediately. Loads extension code via session.reload(), then applies\n * the same post-load UI wiring as /reload and discloses loaded resources.\n */\nInteractiveModeBase.prototype.completeDeferredStartup = async function(this: InteractiveModeBase): Promise<void> {\n const loadingIndicator = new Text(theme.fg(\"dim\", \"Loading extensions, skills, prompts, themes...\"), 1, 0);\n this.chatContainer.addChild(loadingIndicator);\n this.ui.requestRender();\n\n try {\n await this.session.reload({ reason: \"startup\" });\n } catch (error) {\n this.chatContainer.removeChild(loadingIndicator);\n this.deferredStartupPending = false;\n this.showError(\n `Extension loading failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n return;\n }\n\n this.chatContainer.removeChild(loadingIndicator);\n this.deferredStartupPending = false;\n recordTimeSinceReset(\"deferred-extension-load\");\n\n setRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n await this.themeController.applyFromSettings();\n this.setupAutocompleteProvider();\n this.setupExtensionShortcuts(this.session.extensionRunner);\n await this.retryDeferredModelRestore();\n this.showLoadedResources({ force: false, showDiagnosticsWhenQuiet: true });\n this.showStartupNoticesIfNeeded();\n\n const modelsJsonError = this.session.modelRegistry.getError();\n if (modelsJsonError) {\n this.showError(`models.json error: ${modelsJsonError}`);\n }\n void this.updateAvailableProviderCount().catch(() => {});\n this.updateEditorBorderColor();\n this.ui.requestRender();\n };\n\n/**\n * A session model saved with an extension-registered provider cannot resolve\n * until extensions load; retry the restore now and only surface the fallback\n * warning if it still fails.\n */\nInteractiveModeBase.prototype.retryDeferredModelRestore = async function(this: InteractiveModeBase): Promise<void> {\n const fallbackMessage = this.options.modelFallbackMessage;\n if (!fallbackMessage) {\n return;\n }\n const savedModel = this.sessionManager.buildSessionContext().model;\n if (savedModel) {\n const restoredModel = await resolveSavedModelReference(\n savedModel.provider,\n savedModel.modelId,\n this.session.modelRegistry,\n );\n if (restoredModel && this.session.modelRegistry.hasConfiguredAuth(restoredModel)) {\n await this.session.setModel(restoredModel);\n return;\n }\n }\n this.showWarning(fallbackMessage);\n };\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-deferred-startup.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-deferred-startup.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { modelsAreEqual } from \"@earendil-works/pi-ai/compat\";\nimport { type Container, recordTimeSinceReset, resolveModelScopeWithDiagnostics, resolveRestoredModelReference, setRegisteredThemes } from \"./interactive-mode-deps.ts\";\n\nexport interface DeferredStartupMode {\n deferredStartupPending: boolean;\n deferredStartupPromise: Promise<void> | undefined;\n completeDeferredStartup(): Promise<void>;\n }\n\nexport async function ensureDeferredStartupComplete(mode: DeferredStartupMode): Promise<void> {\n if (!mode.deferredStartupPending && !mode.deferredStartupPromise) return;\n const startupPromise = mode.deferredStartupPromise ?? Promise.resolve().then(() => mode.completeDeferredStartup());\n mode.deferredStartupPromise = startupPromise;\n try {\n await startupPromise;\n } catch {\n mode.deferredStartupPending = false;\n } finally {\n if (mode.deferredStartupPromise === startupPromise && !mode.deferredStartupPending) {\n mode.deferredStartupPromise = undefined;\n }\n }\n }\n\nInteractiveModeBase.prototype.ensureDeferredStartupComplete = async function(this: InteractiveModeBase): Promise<void> {\n await ensureDeferredStartupComplete(this);\n };\n\n/**\n * Finishes a startup where extension loading was deferred so the TUI could\n * paint immediately. Loads extension code via session.reload(), then applies\n * the same post-load UI wiring as /reload and discloses loaded resources.\n */\nInteractiveModeBase.prototype.completeDeferredStartup = async function(this: InteractiveModeBase): Promise<void> {\n try {\n await this.bindCurrentSessionExtensions();\n await this.session.reload({ reason: \"startup\" });\n\n this.stopWorkingLoader();\n this.deferredStartupPending = false;\n recordTimeSinceReset(\"deferred-extension-load\");\n\n setRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n await this.themeController.applyFromSettings();\n this.setupAutocompleteProvider();\n this.setupExtensionShortcuts(this.session.extensionRunner);\n await applyDeferredModelScope(this);\n await this.retryDeferredModelRestore(this.startupNoticesContainer);\n if (this.deferLoadedResourcesDisclosureUntilAgentEnd) {\n this.pendingLoadedResourcesDisclosure = true;\n } else {\n this.showLoadedResources({ force: true, showDiagnosticsWhenQuiet: true, targetContainer: this.startupNoticesContainer });\n // Keep the subscription warning after the RESOURCES disclosure.\n void this.maybeWarnAboutAnthropicSubscriptionAuth(undefined, this.startupNoticesContainer);\n this.showStartupNoticesIfNeeded(this.startupNoticesContainer);\n }\n const modelsJsonError = this.session.modelRegistry.getError();\n if (modelsJsonError) {\n this.showError(`models.json error: ${modelsJsonError}`);\n }\n void this.updateAvailableProviderCount().catch(() => {});\n this.updateEditorBorderColor();\n this.ui.requestRender();\n } catch (error) {\n this.stopWorkingLoader();\n this.deferredStartupPending = false;\n this.showError(\n `Extension loading failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n // The RESOURCES disclosure will not render; surface the held warning.\n void this.maybeWarnAboutAnthropicSubscriptionAuth(undefined, this.startupNoticesContainer);\n }\n };\n\nexport async function applyDeferredModelScope(mode: InteractiveModeBase): Promise<void> {\n const patterns = mode.options.deferredModelScopePatterns;\n if (!patterns || patterns.length === 0) {\n return;\n }\n\n const { scopedModels, diagnostics } = await resolveModelScopeWithDiagnostics(patterns, mode.session.modelRegistry);\n for (const diagnostic of diagnostics) {\n mode.showWarning(diagnostic.message);\n }\n mode.session.setScopedModels(scopedModels);\n\n if (mode.sessionManager.buildSessionContext().messages.length > 0 || scopedModels.length === 0) {\n return;\n }\n\n const currentModel = mode.session.model;\n if (currentModel && scopedModels.some((scoped) => modelsAreEqual(scoped.model, currentModel))) {\n return;\n }\n\n const savedProvider = mode.settingsManager.getDefaultProvider();\n const savedModelId = mode.settingsManager.getDefaultModel();\n const savedModel = savedProvider && savedModelId ? mode.session.modelRegistry.find(savedProvider, savedModelId) : undefined;\n const preferred = savedModel ? scopedModels.find((scoped) => modelsAreEqual(scoped.model, savedModel)) : undefined;\n const nextScopedModel = preferred ?? scopedModels[0];\n if (mode.session.modelRegistry.hasConfiguredAuth(nextScopedModel.model)) {\n await mode.session.setModel(nextScopedModel.model);\n if (nextScopedModel.thinkingLevel && !mode.options.deferredModelScopePreserveThinking) {\n mode.session.setThinkingLevel(nextScopedModel.thinkingLevel);\n }\n }\n }\n\n/**\n * A session model saved with an extension-registered provider cannot resolve\n * until extensions load; retry the restore now and only surface the fallback\n * warning if it still fails.\n */\nInteractiveModeBase.prototype.retryDeferredModelRestore = async function(this: InteractiveModeBase, targetContainer?: Container): Promise<void> {\n const fallbackMessage = this.options.modelFallbackMessage;\n if (!fallbackMessage) {\n return;\n }\n const savedModel = this.sessionManager.buildSessionContext().model;\n if (!savedModel && this.session.model && this.session.modelRegistry.hasConfiguredAuth(this.session.model)) {\n return;\n }\n if (savedModel) {\n const restoredModel = await resolveRestoredModelReference(\n savedModel.provider,\n savedModel.modelId,\n this.session.modelRegistry,\n );\n if (restoredModel && this.session.modelRegistry.hasConfiguredAuth(restoredModel)) {\n await this.session.setModel(restoredModel);\n return;\n }\n }\n this.showWarning(fallbackMessage, targetContainer);\n };\n"]}
|