@wrongstack/cli 0.295.1 → 0.296.3
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/data/providers.json +0 -24
- package/dist/acp-A5OSIU2P.js +824 -0
- package/dist/acp-A5OSIU2P.js.map +7 -0
- package/dist/acp-server-agent.d.ts.map +1 -1
- package/dist/arg-parser.d.ts.map +1 -1
- package/dist/audit-2ZSFGNIF.js +102 -0
- package/dist/audit-2ZSFGNIF.js.map +7 -0
- package/dist/auth-CJWQJVRH.js +504 -0
- package/dist/auth-CJWQJVRH.js.map +7 -0
- package/dist/auth-menu/auth-menu-audit.d.ts +0 -4
- package/dist/auth-menu/auth-menu-audit.d.ts.map +1 -1
- package/dist/bench-7ZDWSNEF.js +278 -0
- package/dist/bench-7ZDWSNEF.js.map +7 -0
- package/dist/boot/brain-decision-log.d.ts +7 -5
- package/dist/boot/brain-decision-log.d.ts.map +1 -1
- package/dist/boot/dispatch-webui.d.ts +5 -8
- package/dist/boot/dispatch-webui.d.ts.map +1 -1
- package/dist/boot/system-prompt-builder.d.ts +3 -0
- package/dist/boot/system-prompt-builder.d.ts.map +1 -1
- package/dist/boot/tui-coordinator-callbacks.d.ts +45 -0
- package/dist/boot/tui-coordinator-callbacks.d.ts.map +1 -0
- package/dist/boot/tui-project-switch.d.ts +2 -3
- package/dist/boot/tui-project-switch.d.ts.map +1 -1
- package/dist/boot/tui-runtime-state.d.ts +5 -6
- package/dist/boot/tui-runtime-state.d.ts.map +1 -1
- package/dist/boot/tui-session-resume.d.ts.map +1 -1
- package/dist/boot/tui-settings-adapter.d.ts +2 -3
- package/dist/boot/tui-settings-adapter.d.ts.map +1 -1
- package/dist/boot.d.ts.map +1 -1
- package/dist/brain-menu/panel-service.d.ts.map +1 -1
- package/dist/chimera-review-task.d.ts +6 -0
- package/dist/chimera-review-task.d.ts.map +1 -0
- package/dist/chimera-reviewer-policy.d.ts +34 -0
- package/dist/chimera-reviewer-policy.d.ts.map +1 -0
- package/dist/chronicle-QQEQFSSE.js +256 -0
- package/dist/chronicle-QQEQFSSE.js.map +7 -0
- package/dist/chunk-5N34EWJR.js +418 -0
- package/dist/chunk-5N34EWJR.js.map +7 -0
- package/dist/chunk-66T43Q4Y.js +90 -0
- package/dist/chunk-66T43Q4Y.js.map +7 -0
- package/dist/chunk-7OCVIDC7.js +11 -0
- package/dist/chunk-7OCVIDC7.js.map +7 -0
- package/dist/chunk-ABXK4VVY.js +84 -0
- package/dist/chunk-ABXK4VVY.js.map +7 -0
- package/dist/chunk-AXVZMEWG.js +306 -0
- package/dist/chunk-AXVZMEWG.js.map +7 -0
- package/dist/chunk-AZESNNIC.js +216 -0
- package/dist/chunk-AZESNNIC.js.map +7 -0
- package/dist/chunk-BGFM3PD7.js +41 -0
- package/dist/chunk-BGFM3PD7.js.map +7 -0
- package/dist/chunk-BQCAJ7FI.js +425 -0
- package/dist/chunk-BQCAJ7FI.js.map +7 -0
- package/dist/chunk-DPJZQCVP.js +13 -0
- package/dist/chunk-DPJZQCVP.js.map +7 -0
- package/dist/chunk-F4PEGAJZ.js +176 -0
- package/dist/chunk-F4PEGAJZ.js.map +7 -0
- package/dist/chunk-IHBYBYGA.js +443 -0
- package/dist/chunk-IHBYBYGA.js.map +7 -0
- package/dist/chunk-JBSQ7ONN.js +1023 -0
- package/dist/chunk-JBSQ7ONN.js.map +7 -0
- package/dist/chunk-JBTFWWKV.js +1325 -0
- package/dist/chunk-JBTFWWKV.js.map +7 -0
- package/dist/chunk-JUHRI6OV.js +100 -0
- package/dist/chunk-JUHRI6OV.js.map +7 -0
- package/dist/chunk-OI7GWJDS.js +3303 -0
- package/dist/chunk-OI7GWJDS.js.map +7 -0
- package/dist/chunk-OP47B3IX.js +142 -0
- package/dist/chunk-OP47B3IX.js.map +7 -0
- package/dist/chunk-PJHET45A.js +158 -0
- package/dist/chunk-PJHET45A.js.map +7 -0
- package/dist/chunk-Q5GTM25S.js +17 -0
- package/dist/chunk-Q5GTM25S.js.map +7 -0
- package/dist/chunk-QD544J2B.js +19 -0
- package/dist/chunk-QD544J2B.js.map +7 -0
- package/dist/chunk-QUNHS6O3.js +258 -0
- package/dist/chunk-QUNHS6O3.js.map +7 -0
- package/dist/chunk-TADVX644.js +480 -0
- package/dist/chunk-TADVX644.js.map +7 -0
- package/dist/chunk-TGDHN4LM.js +81 -0
- package/dist/chunk-TGDHN4LM.js.map +7 -0
- package/dist/chunk-TYO2OVAD.js +50 -0
- package/dist/chunk-TYO2OVAD.js.map +7 -0
- package/dist/chunk-VCYZ3WZV.js +14 -0
- package/dist/chunk-VCYZ3WZV.js.map +7 -0
- package/dist/chunk-VJUEZZYB.js +29 -0
- package/dist/chunk-VJUEZZYB.js.map +7 -0
- package/dist/chunk-WHOIR577.js +1 -0
- package/dist/chunk-WHOIR577.js.map +7 -0
- package/dist/chunk-WY7KKOUK.js +460 -0
- package/dist/chunk-WY7KKOUK.js.map +7 -0
- package/dist/chunk-XJXDOF63.js +28 -0
- package/dist/chunk-XJXDOF63.js.map +7 -0
- package/dist/chunk-XWEGWYDU.js +560 -0
- package/dist/chunk-XWEGWYDU.js.map +7 -0
- package/dist/chunk-YWUPHRGB.js +346 -0
- package/dist/chunk-YWUPHRGB.js.map +7 -0
- package/dist/chunk-Z7YGASQP.js +313 -0
- package/dist/chunk-Z7YGASQP.js.map +7 -0
- package/dist/cli-entry-main.d.ts +2 -0
- package/dist/cli-entry-main.d.ts.map +1 -0
- package/dist/cli-entry-point.d.ts +3 -3
- package/dist/cli-entry-point.d.ts.map +1 -1
- package/dist/cli-main-RTY35OPD.js +29268 -0
- package/dist/cli-main-RTY35OPD.js.map +7 -0
- package/dist/cli-main-helpers.d.ts +21 -0
- package/dist/cli-main-helpers.d.ts.map +1 -0
- package/dist/cli-main.d.ts +25 -1
- package/dist/cli-main.d.ts.map +1 -1
- package/dist/context-limit.d.ts +48 -0
- package/dist/context-limit.d.ts.map +1 -1
- package/dist/diag-doctor-OQ3AA63O.js +170 -0
- package/dist/diag-doctor-OQ3AA63O.js.map +7 -0
- package/dist/execute-deps.d.ts +11 -12
- package/dist/execute-deps.d.ts.map +1 -1
- package/dist/execution-O7I5DYE6.js +4682 -0
- package/dist/execution-O7I5DYE6.js.map +7 -0
- package/dist/execution-chimera-ask.d.ts +10 -0
- package/dist/execution-chimera-ask.d.ts.map +1 -0
- package/dist/execution-chimera-cascade.d.ts +15 -0
- package/dist/execution-chimera-cascade.d.ts.map +1 -0
- package/dist/execution-cleanup.d.ts +23 -0
- package/dist/execution-cleanup.d.ts.map +1 -0
- package/dist/execution-kanban-dispatch.d.ts +10 -0
- package/dist/execution-kanban-dispatch.d.ts.map +1 -0
- package/dist/execution-repl-fleet-callbacks.d.ts +11 -0
- package/dist/execution-repl-fleet-callbacks.d.ts.map +1 -0
- package/dist/execution-storage-observability.d.ts +3 -0
- package/dist/execution-storage-observability.d.ts.map +1 -0
- package/dist/execution-tui-next-step-callbacks.d.ts +20 -0
- package/dist/execution-tui-next-step-callbacks.d.ts.map +1 -0
- package/dist/execution.d.ts +2 -139
- package/dist/execution.d.ts.map +1 -1
- package/dist/export-TPORYVRZ.js +64 -0
- package/dist/export-TPORYVRZ.js.map +7 -0
- package/dist/fleet/host-acp-runner-cache.d.ts +9 -0
- package/dist/fleet/host-acp-runner-cache.d.ts.map +1 -0
- package/dist/fleet/host-acp.d.ts +3 -0
- package/dist/fleet/host-acp.d.ts.map +1 -0
- package/dist/fleet/host-concurrency.d.ts +2 -0
- package/dist/fleet/host-concurrency.d.ts.map +1 -0
- package/dist/fleet/host-context.d.ts +5 -0
- package/dist/fleet/host-context.d.ts.map +1 -0
- package/dist/fleet/host-director-builder.d.ts +24 -0
- package/dist/fleet/host-director-builder.d.ts.map +1 -0
- package/dist/fleet/host-director-event-bridges.d.ts +37 -0
- package/dist/fleet/host-director-event-bridges.d.ts.map +1 -0
- package/dist/fleet/host-director-services.d.ts +20 -0
- package/dist/fleet/host-director-services.d.ts.map +1 -0
- package/dist/fleet/host-event-bridge.d.ts +17 -0
- package/dist/fleet/host-event-bridge.d.ts.map +1 -0
- package/dist/fleet/host-helpers.d.ts +22 -0
- package/dist/fleet/host-helpers.d.ts.map +1 -0
- package/dist/fleet/host-learning-tracker.d.ts +11 -0
- package/dist/fleet/host-learning-tracker.d.ts.map +1 -0
- package/dist/fleet/host-learning.d.ts +4 -0
- package/dist/fleet/host-learning.d.ts.map +1 -0
- package/dist/fleet/host-lifecycle-events.d.ts +4 -0
- package/dist/fleet/host-lifecycle-events.d.ts.map +1 -0
- package/dist/fleet/host-paths.d.ts +3 -0
- package/dist/fleet/host-paths.d.ts.map +1 -0
- package/dist/fleet/host-provider.d.ts +22 -0
- package/dist/fleet/host-provider.d.ts.map +1 -0
- package/dist/fleet/host-session-writer.d.ts +3 -0
- package/dist/fleet/host-session-writer.d.ts.map +1 -0
- package/dist/fleet/host-shadow-pass.d.ts +21 -0
- package/dist/fleet/host-shadow-pass.d.ts.map +1 -0
- package/dist/fleet/host-spawn-types.d.ts +25 -0
- package/dist/fleet/host-spawn-types.d.ts.map +1 -0
- package/dist/fleet/host-status.d.ts +48 -0
- package/dist/fleet/host-status.d.ts.map +1 -0
- package/dist/fleet/host-subagent-factory.d.ts +16 -0
- package/dist/fleet/host-subagent-factory.d.ts.map +1 -0
- package/dist/fleet/host-supervisor.d.ts +16 -0
- package/dist/fleet/host-supervisor.d.ts.map +1 -0
- package/dist/fleet/host-task-result-report.d.ts +11 -0
- package/dist/fleet/host-task-result-report.d.ts.map +1 -0
- package/dist/fleet/host-types.d.ts +89 -0
- package/dist/fleet/host-types.d.ts.map +1 -0
- package/dist/fleet/host.d.ts +10 -357
- package/dist/fleet/host.d.ts.map +1 -1
- package/dist/hq-JUYKUNJX.js +547 -0
- package/dist/hq-JUYKUNJX.js.map +7 -0
- package/dist/hq-command-controller.d.ts +2 -2
- package/dist/hq-command-controller.d.ts.map +1 -1
- package/dist/hq-server/auth.d.ts +15 -4
- package/dist/hq-server/auth.d.ts.map +1 -1
- package/dist/hq-server/project-root.d.ts +5 -0
- package/dist/hq-server/project-root.d.ts.map +1 -0
- package/dist/hq-server/routes/auth-handlers.d.ts +25 -0
- package/dist/hq-server/routes/auth-handlers.d.ts.map +1 -0
- package/dist/hq-server/routes/session-handlers.d.ts +8 -0
- package/dist/hq-server/routes/session-handlers.d.ts.map +1 -0
- package/dist/hq-server/routes.d.ts +8 -6
- package/dist/hq-server/routes.d.ts.map +1 -1
- package/dist/hq-server/snapshot.d.ts +44 -0
- package/dist/hq-server/snapshot.d.ts.map +1 -1
- package/dist/hq-server/types.d.ts +22 -4
- package/dist/hq-server/types.d.ts.map +1 -1
- package/dist/hq-server/utils.d.ts +8 -0
- package/dist/hq-server/utils.d.ts.map +1 -1
- package/dist/hq-server/ws.d.ts +1 -1
- package/dist/hq-server/ws.d.ts.map +1 -1
- package/dist/hq-server-6AQ3BXZA.js +39 -0
- package/dist/hq-server-6AQ3BXZA.js.map +7 -0
- package/dist/hq-server.d.ts +3 -3
- package/dist/hq-server.d.ts.map +1 -1
- package/dist/hq-ttl-U2FAYFAT.js +8 -0
- package/dist/hq-ttl-U2FAYFAT.js.map +7 -0
- package/dist/hq-tunnel-RFKGC4HI.js +114 -0
- package/dist/hq-tunnel-RFKGC4HI.js.map +7 -0
- package/dist/hq-tunnel.d.ts +1 -1
- package/dist/hq-tunnel.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2503 -53026
- package/dist/index.js.map +4 -4
- package/dist/init-E2NDDOHI.js +27 -0
- package/dist/init-E2NDDOHI.js.map +7 -0
- package/dist/kanban-dispatch-route.d.ts +14 -0
- package/dist/kanban-dispatch-route.d.ts.map +1 -0
- package/dist/kanban-hq-sync.d.ts +2 -0
- package/dist/kanban-hq-sync.d.ts.map +1 -1
- package/dist/kanban-run-mirror-EKVNGXWW.js +12 -0
- package/dist/kanban-run-mirror-EKVNGXWW.js.map +7 -0
- package/dist/live-settings-input.d.ts +69 -0
- package/dist/live-settings-input.d.ts.map +1 -0
- package/dist/mailbox-serve-2UWHEN3M.js +302 -0
- package/dist/mailbox-serve-2UWHEN3M.js.map +7 -0
- package/dist/mcp-CYLPUEHC.js +413 -0
- package/dist/mcp-CYLPUEHC.js.map +7 -0
- package/dist/modeldiag-HENYJ4N7.js +1290 -0
- package/dist/modeldiag-HENYJ4N7.js.map +7 -0
- package/dist/permissions-FNYLZIL4.js +115 -0
- package/dist/permissions-FNYLZIL4.js.map +7 -0
- package/dist/picker-key-state.d.ts +7 -0
- package/dist/picker-key-state.d.ts.map +1 -0
- package/dist/picker-model-picker.d.ts +6 -0
- package/dist/picker-model-picker.d.ts.map +1 -0
- package/dist/picker-ui.d.ts +17 -0
- package/dist/picker-ui.d.ts.map +1 -0
- package/dist/picker.d.ts +4 -37
- package/dist/picker.d.ts.map +1 -1
- package/dist/plugin-usage-OU6X6LM3.js +40 -0
- package/dist/plugin-usage-OU6X6LM3.js.map +7 -0
- package/dist/plugins-4LJ5IUBI.js +24 -0
- package/dist/plugins-4LJ5IUBI.js.map +7 -0
- package/dist/pre-launch.d.ts +0 -1
- package/dist/pre-launch.d.ts.map +1 -1
- package/dist/project-BLQ3ALVL.js +76 -0
- package/dist/project-BLQ3ALVL.js.map +7 -0
- package/dist/project-manifest-GE25PW4S.js +18 -0
- package/dist/project-manifest-GE25PW4S.js.map +7 -0
- package/dist/project-picker-BOCWHBXP.js +17 -0
- package/dist/project-picker-BOCWHBXP.js.map +7 -0
- package/dist/projects-XE76NFNZ.js +38 -0
- package/dist/projects-XE76NFNZ.js.map +7 -0
- package/dist/provider-helpers.d.ts +22 -6
- package/dist/provider-helpers.d.ts.map +1 -1
- package/dist/providers-models-GDELBHZK.js +589 -0
- package/dist/providers-models-GDELBHZK.js.map +7 -0
- package/dist/quick-VIO2BEHS.js +10 -0
- package/dist/quick-VIO2BEHS.js.map +7 -0
- package/dist/repl-auto-proceed.d.ts +19 -0
- package/dist/repl-auto-proceed.d.ts.map +1 -0
- package/dist/repl-client-registration.d.ts +7 -0
- package/dist/repl-client-registration.d.ts.map +1 -0
- package/dist/repl-input.d.ts +11 -0
- package/dist/repl-input.d.ts.map +1 -0
- package/dist/repl-options.d.ts +54 -0
- package/dist/repl-options.d.ts.map +1 -0
- package/dist/repl-rendering.d.ts +4 -0
- package/dist/repl-rendering.d.ts.map +1 -0
- package/dist/repl-suggestions.d.ts +21 -0
- package/dist/repl-suggestions.d.ts.map +1 -0
- package/dist/repl.d.ts +3 -162
- package/dist/repl.d.ts.map +1 -1
- package/dist/replay-KCTXNMZQ.js +75 -0
- package/dist/replay-KCTXNMZQ.js.map +7 -0
- package/dist/rewind-EJMVFVLS.js +185 -0
- package/dist/rewind-EJMVFVLS.js.map +7 -0
- package/dist/sdd-runtime-JG4EEKL6.js +54 -0
- package/dist/sdd-runtime-JG4EEKL6.js.map +7 -0
- package/dist/services/sdd/project-context.d.ts +1 -1
- package/dist/services/sdd/project-context.d.ts.map +1 -1
- package/dist/services/sdd/task-manager.d.ts.map +1 -1
- package/dist/services/statusline-config.d.ts +1 -1
- package/dist/services/statusline-config.d.ts.map +1 -1
- package/dist/session-event-wiring.d.ts +2 -2
- package/dist/session-event-wiring.d.ts.map +1 -1
- package/dist/sessions-config-NLCMK3BY.js +409 -0
- package/dist/sessions-config-NLCMK3BY.js.map +7 -0
- package/dist/settings-menu.d.ts +3 -18
- package/dist/settings-menu.d.ts.map +1 -1
- package/dist/simpleui-dist-JIFGUJO7.js +93 -0
- package/dist/simpleui-dist-JIFGUJO7.js.map +7 -0
- package/dist/slash-commands/brain.d.ts.map +1 -1
- package/dist/slash-commands/clear.d.ts.map +1 -1
- package/dist/slash-commands/fallback.d.ts.map +1 -1
- package/dist/slash-commands/kanban-agent-helpers.d.ts +18 -0
- package/dist/slash-commands/kanban-agent-helpers.d.ts.map +1 -0
- package/dist/slash-commands/kanban-format.d.ts +16 -0
- package/dist/slash-commands/kanban-format.d.ts.map +1 -0
- package/dist/slash-commands/kanban-help.d.ts +2 -0
- package/dist/slash-commands/kanban-help.d.ts.map +1 -0
- package/dist/slash-commands/kanban.d.ts.map +1 -1
- package/dist/slash-commands/mailbox-demo.d.ts.map +1 -1
- package/dist/slash-commands/mailbox.d.ts +2 -1
- package/dist/slash-commands/mailbox.d.ts.map +1 -1
- package/dist/slash-commands/memory-compact.d.ts +5 -0
- package/dist/slash-commands/memory-compact.d.ts.map +1 -0
- package/dist/slash-commands/memory-flags.d.ts +36 -0
- package/dist/slash-commands/memory-flags.d.ts.map +1 -0
- package/dist/slash-commands/memory-formatters.d.ts +16 -0
- package/dist/slash-commands/memory-formatters.d.ts.map +1 -0
- package/dist/slash-commands/memory.d.ts.map +1 -1
- package/dist/slash-commands/mouse.d.ts +2 -2
- package/dist/slash-commands/review.d.ts.map +1 -1
- package/dist/slash-commands/sdd-command-helpers.d.ts +23 -0
- package/dist/slash-commands/sdd-command-helpers.d.ts.map +1 -0
- package/dist/slash-commands/sdd-format.d.ts +32 -0
- package/dist/slash-commands/sdd-format.d.ts.map +1 -0
- package/dist/slash-commands/sdd.d.ts.map +1 -1
- package/dist/slash-commands/settings.d.ts.map +1 -1
- package/dist/subcommands/handlers/chronicle.d.ts.map +1 -1
- package/dist/subcommands/handlers/mailbox-serve.d.ts.map +1 -1
- package/dist/subcommands/handlers/model-smoke-test.d.ts +51 -0
- package/dist/subcommands/handlers/model-smoke-test.d.ts.map +1 -0
- package/dist/subcommands/handlers/modeldiag-profiles.d.ts +64 -0
- package/dist/subcommands/handlers/modeldiag-profiles.d.ts.map +1 -0
- package/dist/subcommands/handlers/modeldiag.d.ts.map +1 -1
- package/dist/subcommands/handlers/per-subcommand-deep-help-table.d.ts +3 -0
- package/dist/subcommands/handlers/per-subcommand-deep-help-table.d.ts.map +1 -0
- package/dist/subcommands/handlers/per-subcommand-help-data.d.ts +3 -0
- package/dist/subcommands/handlers/per-subcommand-help-data.d.ts.map +1 -0
- package/dist/subcommands/handlers/per-subcommand-help-table.d.ts +36 -0
- package/dist/subcommands/handlers/per-subcommand-help-table.d.ts.map +1 -0
- package/dist/subcommands/handlers/per-subcommand-help-types.d.ts +18 -0
- package/dist/subcommands/handlers/per-subcommand-help-types.d.ts.map +1 -0
- package/dist/subcommands/handlers/per-subcommand-help.d.ts +2 -80
- package/dist/subcommands/handlers/per-subcommand-help.d.ts.map +1 -1
- package/dist/subcommands/handlers/rewind.d.ts.map +1 -1
- package/dist/subcommands/index.d.ts +7 -0
- package/dist/subcommands/index.d.ts.map +1 -1
- package/dist/tools-skills-UNKLOB7M.js +29 -0
- package/dist/tools-skills-UNKLOB7M.js.map +7 -0
- package/dist/update-YC4TYW2Y.js +16 -0
- package/dist/update-YC4TYW2Y.js.map +7 -0
- package/dist/update-check-UMYTOH7Z.js +18 -0
- package/dist/update-check-UMYTOH7Z.js.map +7 -0
- package/dist/version-help-DROHZRW6.js +11 -0
- package/dist/version-help-DROHZRW6.js.map +7 -0
- package/dist/webui-server/connection-handler.d.ts.map +1 -1
- package/dist/webui-server/kanban-host-adapter.d.ts +5 -1
- package/dist/webui-server/kanban-host-adapter.d.ts.map +1 -1
- package/dist/webui-server/listen-helpers.d.ts +18 -0
- package/dist/webui-server/listen-helpers.d.ts.map +1 -0
- package/dist/webui-server/node-pty-loader.d.ts +6 -0
- package/dist/webui-server/node-pty-loader.d.ts.map +1 -0
- package/dist/webui-server-ZF5KVGC5.js +1460 -0
- package/dist/webui-server-ZF5KVGC5.js.map +7 -0
- package/dist/webui-server-options.d.ts +191 -0
- package/dist/webui-server-options.d.ts.map +1 -0
- package/dist/webui-server.d.ts +2 -178
- package/dist/webui-server.d.ts.map +1 -1
- package/dist/wiring/brain-and-orchestration.d.ts.map +1 -1
- package/dist/wiring/codebase-index.d.ts.map +1 -1
- package/dist/wiring/command-host-state.d.ts +4 -4
- package/dist/wiring/dep-watcher-bridge.d.ts +23 -0
- package/dist/wiring/dep-watcher-bridge.d.ts.map +1 -0
- package/dist/wiring/dep-watcher.d.ts.map +1 -1
- package/dist/wiring/hq-telemetry.d.ts +2 -2
- package/dist/wiring/lifecycle-plugins.d.ts +4 -3
- package/dist/wiring/lifecycle-plugins.d.ts.map +1 -1
- package/dist/wiring/mailbox-bridge-bootstrap.d.ts +1 -1
- package/dist/wiring/management-tools.d.ts +15 -0
- package/dist/wiring/management-tools.d.ts.map +1 -0
- package/dist/wiring/pipeline.d.ts +2 -1
- package/dist/wiring/pipeline.d.ts.map +1 -1
- package/dist/wiring/plugins.d.ts +1 -1
- package/dist/wiring/plugins.d.ts.map +1 -1
- package/dist/wiring/provider-runtime-setup.d.ts +14 -1
- package/dist/wiring/provider-runtime-setup.d.ts.map +1 -1
- package/dist/wiring/provider.d.ts.map +1 -1
- package/dist/wiring/runtime-controller-deps.d.ts +1 -1
- package/dist/wiring/runtime-controller-deps.d.ts.map +1 -1
- package/dist/wiring/sage.d.ts.map +1 -1
- package/dist/wiring/session-registry.d.ts +38 -0
- package/dist/wiring/session-registry.d.ts.map +1 -0
- package/dist/wiring/session.d.ts +10 -6
- package/dist/wiring/session.d.ts.map +1 -1
- package/dist/wiring/tools.d.ts.map +1 -1
- package/package.json +22 -22
- package/dist/cli-recovery-prompt.d.ts +0 -19
- package/dist/cli-recovery-prompt.d.ts.map +0 -1
- package/dist/first-run-auth-gate.d.ts +0 -20
- package/dist/first-run-auth-gate.d.ts.map +0 -1
- package/dist/pre-launch/indexing-question.d.ts +0 -28
- package/dist/pre-launch/indexing-question.d.ts.map +0 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/arg-parser.ts", "../src/auth-menu/local-presets.ts", "../src/picker.ts", "../src/picker-key-state.ts", "../src/picker-model-picker.ts", "../src/picker-ui.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Unified CLI argument parsing. Three parsers that were previously\n * spread across index.ts, subcommands/index.ts, and slash-commands/index.ts.\n */\n\n/** Flags that are boolean-only (no value expected after them). */\nexport const BOOLEAN_FLAGS = new Set([\n 'yolo',\n 'no-yolo',\n 'yolo-destructive',\n 'confirm-destructive',\n 'force-all-yolo',\n 'verbose',\n 'trace',\n 'help',\n 'version',\n 'yes',\n 'no-banner',\n 'no-features',\n 'tui',\n 'no-tui',\n // Legacy no-ops: every surface now starts fresh unless an explicit\n // `--resume <id>` is supplied. Keep parsing these as booleans so old\n // launch scripts do not accidentally consume the next positional token.\n 'no-recovery',\n 'recover',\n 'output-json',\n 'prompt',\n 'metrics',\n 'webui',\n 'simpleui',\n 'full-auto',\n 'desktop',\n 'open',\n 'webui-require-token',\n 'require-token',\n 'no-check',\n 'no-models-refresh',\n // (removed: 'director' and 'no-director' \u2014 Director Mode is always on)\n 'no-autonomy',\n 'no-hints',\n 'hints',\n 'no-menu',\n 'no-hooks',\n 'skip',\n 'skip-index',\n 'mouse',\n 'no-interactive',\n 'token-saving-mode',\n 'system-lite',\n 'system-pro',\n 'hq',\n 'hq-allow-exec',\n 'tunnel',\n // Opt-in to a non-loopback HQ bind with no token/password configured.\n 'insecure-open',\n 'strict-port',\n 'client',\n // `wstack update` booleans. Keeping these here prevents parseArgs from\n // consuming a following positional token as an accidental flag value.\n 'check-only',\n 'allow-scripts',\n 'lifecycle-scripts',\n 'npm',\n 'pnpm',\n 'yarn',\n 'bun',\n // `wstack acp` booleans. Without these, parseArgs treats the value after\n // `--fs`/`--echo` as the flag's value and eats a following positional\n // (e.g. the agent list in `acp bench --fs gemini-cli,codex-cli`).\n 'echo',\n 'fs',\n // `wstack modeldiag test` booleans. Keep a following positional token from\n // being consumed as the value of one of these switches.\n 'all-models',\n 'plan',\n 'json',\n]);\n\n// ------------------------------------------------------------------ main args\n\nexport interface ParsedArgs {\n flags: Record<string, string | boolean>;\n positional: string[];\n}\n\n/** Parse top-level `wstack` CLI args. */\nexport function parseArgs(argv: string[]): ParsedArgs {\n const flags: Record<string, string | boolean> = {};\n const positional: string[] = [];\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (!a) continue;\n if (a === '--') {\n positional.push(...argv.slice(i + 1));\n break;\n }\n if (a.startsWith('--')) {\n const eq = a.indexOf('=');\n if (eq !== -1) {\n flags[a.slice(2, eq)] = a.slice(eq + 1);\n continue;\n }\n const name = a.slice(2);\n if (BOOLEAN_FLAGS.has(name)) {\n flags[name] = true;\n continue;\n }\n if (i + 1 < argv.length && !(argv[i + 1] ?? '').startsWith('-')) {\n flags[name] = argv[++i] ?? '';\n } else {\n flags[name] = true;\n }\n } else if (a.startsWith('-') && a.length === 2) {\n const short = a.slice(1);\n const expand: Record<string, string> = { v: 'verbose', y: 'yes' };\n flags[expand[short] ?? short] = true;\n } else {\n positional.push(a);\n }\n }\n normalizeSurfaceAliases(flags, positional);\n return { flags, positional };\n}\n\n/**\n * Keep the user-facing launch shapes equivalent:\n * wstack --webui == wstack webui\n * wstack --simpleui == wstack simpleui\n * wstack --desktop == wstack desktop\n * wstack --hq == wstack hq / wstack hq serve\n *\n * HQ token management remains a real subcommand (`wstack hq token ...`), so\n * only the bare and explicit serve forms are normalized here.\n */\nfunction normalizeSurfaceAliases(\n flags: Record<string, string | boolean>,\n positional: string[],\n): void {\n // SimpleUI deliberately reuses the WebUI backend/runtime path. Keep its own\n // flag so dispatch can select the independent frontend build, while also\n // setting `webui` so every existing non-interactive surface guard applies.\n if (flags['simpleui']) flags['webui'] = true;\n\n const first = positional[0];\n if (first === 'simpleui') {\n flags['simpleui'] = true;\n flags['webui'] = true;\n positional.splice(0, 1);\n return;\n }\n if (first === 'webui' || first === 'desktop') {\n flags[first] = true;\n positional.splice(0, 1);\n return;\n }\n if (first === 'hq' && (positional.length === 1 || positional[1] === 'serve')) {\n flags['hq'] = true;\n positional.splice(0, positional[1] === 'serve' ? 2 : 1);\n }\n}\n\n// --------------------------------------------------------------- auth flags\n\nexport interface AuthFlags {\n positional: string[];\n label?: string | undefined;\n family?: import('@wrongstack/core/types').WireFamily | undefined;\n baseUrl?: string | undefined;\n envVars?: string[] | undefined;\n}\n\n/** Parse `wstack auth <provider> [--label ...] [--family ...] [...]` flags. */\nexport function parseAuthFlags(args: string[]): AuthFlags {\n const out: AuthFlags = { positional: [] };\n for (let i = 0; i < args.length; i++) {\n const a = args[i];\n if (a === '--label') {\n const v = args[++i];\n if (v) out.label = v;\n } else if (a === '--family') {\n const v = args[++i];\n if (v) out.family = v as AuthFlags['family'];\n } else if (a === '--base-url') {\n const v = args[++i];\n if (v) out.baseUrl = v;\n } else if (a === '--env') {\n const v = args[++i];\n if (v)\n out.envVars = v\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n } else if (a && !a.startsWith('--')) {\n out.positional.push(a);\n }\n }\n return out;\n}\n\n// -------------------------------------------------------------- spawn flags\n\nexport interface SpawnFlags {\n description: string;\n opts: {\n provider?: string | undefined;\n model?: string | undefined;\n tools?: string[] | undefined;\n name?: string | undefined;\n };\n}\n\n/**\n * Parse `/spawn` flags from the args head. Supported:\n * --provider=<id> / -p <id> override the subagent's provider id\n * --model=<id> / -m <id> override the subagent's model\n * --name=<label> / -n <label> display name\n * --tools=a,b,c restrict the subagent's tool slice\n *\n * Anything after the last flag is the task description.\n */\nexport function parseSpawnFlags(input: string): SpawnFlags {\n const opts: SpawnFlags['opts'] = {};\n let rest = input;\n const consume = (re: RegExp): RegExpMatchArray | null => {\n const m = rest.match(re);\n if (m) {\n rest = rest.slice(m[0].length).replace(/^\\s+/, '');\n return m;\n }\n return null;\n };\n while (rest.length > 0) {\n let m: RegExpMatchArray | null;\n m = consume(/^--provider=(\\S+)\\s*/);\n if (m) opts.provider = m[1];\n else {\n m = consume(/^--model=(\\S+)\\s*/);\n if (m) opts.model = m[1];\n else {\n m = consume(/^--name=(\"([^\"]+)\"|(\\S+))\\s*/);\n if (m) opts.name = m[2] ?? m[3];\n else {\n m = consume(/^--tools=(\\S+)\\s*/);\n if (m)\n opts.tools = m[1]\n ?.split(',')\n .map((t) => t.trim())\n .filter(Boolean);\n else {\n m = consume(/^-p\\s+(\\S+)\\s*/);\n if (m) opts.provider = m[1];\n else {\n m = consume(/^-m\\s+(\\S+)\\s*/);\n if (m) opts.model = m[1];\n else {\n m = consume(/^-n\\s+(\"([^\"]+)\"|(\\S+))\\s*/);\n if (m) opts.name = m[2] ?? m[3];\n else break;\n }\n }\n }\n }\n }\n }\n }\n return { description: rest.trim(), opts };\n}\n", "import { projectLocalProviderPresets } from '@wrongstack/providers/definitions';\n\nexport type { LocalProviderPresetProjection as LocalLlmPresetEntry } from '@wrongstack/providers/definitions';\nexport const LOCAL_LLM_PRESETS = projectLocalProviderPresets();\n", "import os from 'node:os';\nimport type { Config, ModelsRegistry, ResolvedProvider } from '@wrongstack/core/types';\nimport { color, expectDefined, setOutputLineGuard, setRawMode, stripAnsi, writeOut } from '@wrongstack/core/utils';\nimport { toErrorMessage } from '@wrongstack/core/utils';\nimport { LOCAL_LLM_PRESETS } from './auth-menu/local-presets.js';\nimport { appendHistory, backupCurrent } from './config-history.js';\nimport type { ReadlineInputReader } from './input-reader.js';\nimport { applyPickerKey, type ProviderPickerState } from './picker-key-state.js';\nimport {\n LIVE_PICKER_MAX_VISIBLE,\n runLiveModelPicker,\n} from './picker-model-picker.js';\nimport {\n boxBottom,\n boxDivider,\n boxRow,\n boxTop,\n codexPickerPreamble,\n keyHints,\n padVisible,\n theme,\n} from './picker-ui.js';\nimport { hasApiKey, isKeylessLocalProvider, visibleModelIds } from './provider-helpers.js';\nimport type { TerminalRenderer } from './renderer.js';\n\nexport { applyPickerKey, type ProviderPickerState } from './picker-key-state.js';\nexport { filterModels, LIVE_PICKER_MAX_VISIBLE, renderLiveModelList } from './picker-model-picker.js';\nexport { codexPickerPreamble } from './picker-ui.js';\n\n/**\n * Filter providers by a free-text query: case-insensitive substring match\n * against the provider id OR display name. An empty/whitespace query returns\n * all providers (as a copy). Input order is preserved. Powers the live\n * type-to-filter provider picker.\n */\n/**\n * Append synthetic entries for the built-in local-server presets\n * (OmniRoute / Ollama / vLLM / LM Studio) that aren't already present in\n * the merged list. These are keyless loopback gateways, so they pass the\n * `isKeylessLocalProvider` filter and become immediately selectable even\n * on a fresh install with no config and no catalog entry \u2014 mirroring the\n * `wstack auth local` shortcut. An entry is skipped when an id-match\n * already exists (catalog or saved config), so a user's customized\n * provider always wins over the preset default. Mutates and returns\n * `merged` for call-site convenience. Pure aside from the push.\n */\nexport function appendLocalPresetProviders(merged: ResolvedProvider[]): ResolvedProvider[] {\n const existing = new Set(merged.map((p) => p.id));\n for (const preset of LOCAL_LLM_PRESETS) {\n if (existing.has(preset.id)) continue;\n merged.push({\n id: preset.id,\n name: preset.label,\n family: 'openai-compatible',\n apiBase: preset.defaultBaseUrl,\n // No env vars \u2192 with a loopback apiBase this reads as a keyless\n // local gateway, so the picker offers it without a key.\n envVars: [],\n // No catalog models yet; OmniRoute/LM Studio/etc. auto-discover at\n // boot or the user picks `m` to set a list. An empty list still\n // lets the provider be chosen \u2014 pickModel surfaces the \"no models\n // listed\" hint and the user can type an id directly.\n models: [],\n });\n }\n return merged;\n}\n\nexport function filterProviders(query: string, providers: ResolvedProvider[]): ResolvedProvider[] {\n const q = query.trim().toLowerCase();\n if (!q) return [...providers];\n return providers.filter(\n (p) => p.id.toLowerCase().includes(q) || p.name.toLowerCase().includes(q),\n );\n}\n\n/** Preferred family display order; remaining families follow in insertion order. */\nconst PROVIDER_FAMILY_PREFERRED_ORDER = [\n 'anthropic',\n 'anthropic-oauth',\n 'openai',\n 'openai-codex',\n 'github-copilot',\n 'google',\n 'openai-compatible',\n];\n\n/**\n * Order providers for display: grouped by wire family in preferred order, then\n * alphabetical by id within each family. Pure. Shared by the live render and\n * the raw-stdin loop so the selection index and the rendered cursor always\n * refer to the same provider.\n */\nfunction orderProvidersForDisplay(filtered: ResolvedProvider[]): ResolvedProvider[] {\n const families = new Map<string, ResolvedProvider[]>();\n for (const p of filtered) {\n const arr = families.get(p.family) ?? [];\n arr.push(p);\n families.set(p.family, arr);\n }\n const order = [\n ...PROVIDER_FAMILY_PREFERRED_ORDER.filter((f) => families.has(f)),\n ...[...families.keys()].filter((f) => !PROVIDER_FAMILY_PREFERRED_ORDER.includes(f)),\n ];\n const flat: ResolvedProvider[] = [];\n for (const fam of order) {\n const arr = (families.get(fam) ?? [])\n .slice()\n .sort((a, b) => a.id.toLowerCase().localeCompare(b.id.toLowerCase()));\n flat.push(...arr);\n }\n return flat;\n}\n\n/**\n * Render the live type-to-filter provider view as one string: the query line,\n * providers grouped by wire family (preferred order, alphabetical within each\n * family), the selected provider marked with \u25B6, and a key hint. Capped to\n * LIVE_PICKER_MAX_VISIBLE rows so a frame always fits the viewport (the raw\n * loop redraws by moving the cursor up and clearing). Pure.\n */\nexport function renderLiveProviderList(\n query: string,\n filtered: ResolvedProvider[],\n selectedIdx: number,\n savedSet?: Set<string>,\n): string {\n const ordered = orderProvidersForDisplay(filtered);\n const scrollOffset = Math.max(0, selectedIdx - LIVE_PICKER_MAX_VISIBLE + 1);\n const visible = ordered.slice(scrollOffset, scrollOffset + LIVE_PICKER_MAX_VISIBLE);\n\n const lines: string[] = [];\n lines.push(boxTop('Select a provider'));\n // Search field. `Select provider: ${query}` is preserved verbatim (tests +\n // the raw-loop cursor math both depend on it). The prompt glyph is accented;\n // a blinking-style caret block trails the query.\n const caret = query.length > 0 ? color.dim('\u258F') : theme.cursor('\u258F');\n lines.push(boxRow(`${theme.accent('\u276F')} ${color.dim('Select provider:')} ${query}${caret}`));\n lines.push(boxDivider());\n\n if (scrollOffset > 0) {\n lines.push(boxRow(color.dim(` ${scrollOffset} more above \u2191`)));\n }\n\n let flat = 0;\n let lastFamily = '';\n for (const p of visible) {\n if (p.family !== lastFamily) {\n // Family section label \u2014 dim, small-caps feel via a leading accent tick.\n lines.push(boxRow(`${theme.accent('\u00B7')} ${color.dim(p.family.toUpperCase())}`));\n lastFamily = p.family;\n }\n const selected = flat === selectedIdx - scrollOffset;\n const sel = selected ? theme.cursor('\u25B6') : ' ';\n let marker: string;\n if (savedSet) {\n const mark = savedSet.has(p.id) ? color.cyan('\u25C9') : color.dim('\u25CB');\n marker = `${sel} ${mark}`;\n } else {\n marker = `${sel}`;\n }\n const id = selected ? theme.accent(color.bold(p.id)) : p.id;\n const name = selected ? p.name : color.dim(p.name);\n lines.push(boxRow(`${marker} ${padVisible(id, 24)} ${name}`));\n flat++;\n }\n\n if (scrollOffset + LIVE_PICKER_MAX_VISIBLE < ordered.length) {\n lines.push(\n boxRow(\n color.dim(` ${ordered.length - scrollOffset - LIVE_PICKER_MAX_VISIBLE} more below \u2193`),\n ),\n );\n }\n\n lines.push(boxDivider());\n lines.push(\n boxRow(\n keyHints([\n ['\u2191\u2193', 'scroll'],\n ['Enter', 'select'],\n ['Esc', 'clear'],\n ['Ctrl+C', 'quit'],\n ]),\n ),\n );\n lines.push(boxBottom());\n return lines.join('\\n');\n}\n\n/**\n * Save provider + model to the global config file.\n * Creates backups + history entries before writing.\n * Returns true if saved successfully.\n */\nexport async function saveToGlobalConfig(\n configPath: string,\n provider: string,\n model: string,\n homeFn: () => string = () => process.env.HOME ?? os.homedir(),\n): Promise<boolean> {\n try {\n const { atomicWrite } = await import('@wrongstack/core/utils');\n const fs = await import('node:fs/promises');\n\n let existing: Record<string, unknown> = {};\n try {\n const raw = await fs.readFile(configPath, 'utf8');\n existing = JSON.parse(raw) as Record<string, unknown>;\n } catch {\n // No existing config\n }\n\n const oldCfg = { ...existing };\n existing.provider = provider;\n existing.model = model;\n\n // Backup before writing \u2014 best-effort (never blocks save)\n try {\n await backupCurrent(homeFn, configPath);\n } catch (err) {\n console.warn(\n JSON.stringify({\n level: 'warn',\n event: 'picker.backup_failed',\n message: toErrorMessage(err),\n timestamp: new Date().toISOString(),\n }),\n );\n }\n\n await atomicWrite(configPath, JSON.stringify(existing, null, 2), { mode: 0o600 });\n\n // Record in history \u2014 best-effort (never blocks save)\n try {\n await appendHistory(\n oldCfg,\n existing,\n `Provider/model changed: ${oldCfg.provider ?? '(none)'} \u2192 ${provider}, ${oldCfg.model ?? '(none)'} \u2192 ${model}`,\n homeFn,\n configPath,\n );\n } catch {\n // best-effort\n }\n\n return true;\n } catch (err) {\n console.warn(\n JSON.stringify({\n level: 'warn',\n event: 'picker.save_failed',\n message: toErrorMessage(err),\n timestamp: new Date().toISOString(),\n }),\n );\n return false;\n }\n}\n\nexport interface PickerResult {\n provider: string;\n model: string;\n}\n\n/**\n * Interactive provider + model picker. Lists supported providers grouped\n * by wire family \u2014 by default only those with an API key (env or stored\n * config), so you see only what you can actually launch into. Falls back\n * to the full catalog when no keys are found anywhere.\n *\n * When `defaultProvider`/`defaultModel` are passed, they're pre-selected\n * so the user can press Enter to accept the previous choice.\n */\n/**\n * Live type-to-filter provider picker (TTY only). Takes over stdin in raw mode\n * and redraws the filtered, family-grouped list on every keystroke. Thin I/O\n * shell around the pure filterProviders / applyPickerKey / renderLiveProviderList\n * helpers (which are fully unit-tested). Returns the chosen provider, or\n * undefined on cancel. runPicker only calls this when stdin is a TTY; non-TTY\n * callers (CI, piped input, tests) fall through to the numbered readLine picker.\n */\n// Marker used to locate the query line within the rendered (boxed) frame.\n// renderLiveProviderList emits exactly one line containing this literal.\nconst QUERY_MARKER = 'Select provider:';\n\n/**\n * Park the terminal cursor at the end of the live query text inside the\n * boxed frame. The frame is multi-line with a border, so we (1) find which\n * physical line holds the query, (2) move up from the last line to it, then\n * (3) move to the visible column just after the typed query. Visible width\n * is measured with stripAnsi so the box border + accent colors don't offset\n * the cursor.\n */\nfunction cursorToQuery(frame: string, query: string): void {\n const rows = frame.split('\\n');\n const lastIdx = rows.length - 1;\n const queryIdx = rows.findIndex((r) => r.includes(QUERY_MARKER));\n if (queryIdx < 0) return; // frame shape changed unexpectedly \u2014 leave cursor\n const up = lastIdx - queryIdx;\n const queryLine = rows[queryIdx] ?? '';\n // Everything on the query line up to and including the typed query, minus\n // the query text itself, is the visible prefix. We locate the marker, then\n // add the marker + separator + query length in visible columns.\n const plain = stripAnsi(queryLine);\n const markerAt = plain.indexOf(QUERY_MARKER);\n // prefix = columns before the query text = markerAt + marker + ': ' gap.\n const col = markerAt + QUERY_MARKER.length + 1 + query.length + 1;\n if (up > 0) writeOut(`\\x1b[${up}A`);\n writeOut(`\\x1b[${col}G`);\n}\n\nexport async function runLiveProviderPicker(\n displayList: ResolvedProvider[],\n savedSet?: Set<string>,\n): Promise<ResolvedProvider | undefined> {\n const stdin = process.stdin;\n const out = process.stdout;\n if (!stdin.isTTY || !out.isTTY) return undefined;\n\n setOutputLineGuard(null);\n let state: ProviderPickerState = { query: '', selected: 0, status: 'typing' };\n let ordered = orderProvidersForDisplay(filterProviders(state.query, displayList));\n const visibleCount = (): number => ordered.length;\n const clamp = (): void => {\n if (state.selected >= visibleCount()) state.selected = Math.max(0, visibleCount() - 1);\n };\n clamp();\n let frame = renderLiveProviderList(state.query, ordered, state.selected, savedSet);\n writeOut(frame);\n writeOut('\\x1b7');\n cursorToQuery(frame, state.query);\n\n return new Promise<ResolvedProvider | undefined>((resolve) => {\n const wasRaw = stdin.isRaw;\n const wasPaused = stdin.isPaused();\n setRawMode(stdin, true);\n stdin.resume();\n stdin.setEncoding('utf8');\n\n const cleanup = (): void => {\n stdin.off('data', onData);\n setRawMode(stdin, wasRaw);\n if (wasPaused) stdin.pause();\n };\n const repaint = (): void => {\n writeOut('\\x1b8');\n const ups = (frame.match(/\\n/g) ?? []).length;\n writeOut(`\\x1b[${ups}A\\r\\x1b[J`);\n ordered = orderProvidersForDisplay(filterProviders(state.query, displayList));\n clamp();\n frame = renderLiveProviderList(state.query, ordered, state.selected, savedSet);\n writeOut(frame);\n writeOut('\\x1b7');\n cursorToQuery(frame, state.query);\n };\n const onData = (chunk: string): void => {\n ordered = orderProvidersForDisplay(filterProviders(state.query, displayList));\n state = applyPickerKey(state, chunk, visibleCount());\n // applyPickerKey may have changed the query (type/paste) \u2014 recompute against\n // the NEW query before resolving a selection, so a paste like \"zzz\\r\" can't\n // submit a provider from the pre-paste list.\n ordered = orderProvidersForDisplay(filterProviders(state.query, displayList));\n clamp();\n if (state.status === 'cancelled') {\n cleanup();\n writeOut('\\n');\n resolve(undefined);\n return;\n }\n if (state.status === 'submitted') {\n // Query emptied the matches mid-chunk (e.g. paste): stay in the picker.\n if (ordered.length === 0) {\n state = { ...state, status: 'typing' };\n repaint();\n return;\n }\n const pick = ordered[state.selected] ?? ordered[0];\n cleanup();\n writeOut('\\n');\n resolve(pick);\n return;\n }\n repaint();\n };\n stdin.on('data', onData);\n });\n}\n\nexport async function runPicker(deps: {\n modelsRegistry: ModelsRegistry;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n config?: Config | undefined;\n defaultProvider?: string | undefined;\n defaultModel?: string | undefined;\n}): Promise<PickerResult | undefined> {\n const { modelsRegistry, renderer, reader, config, defaultProvider, defaultModel } = deps;\n\n renderer.write(\n `\\n${theme.accent(color.bold('\u258C WrongStack'))} ${color.dim('Provider & Model Selection')}\\n`,\n );\n renderer.write(color.dim(`${theme.chrome('\u00B7')} Loading provider catalog\u2026\\n`));\n\n let providers: ResolvedProvider[];\n try {\n providers = await modelsRegistry.listProviders();\n } catch {\n renderer.writeError(\n 'Failed to load provider catalog. Pass --provider and --model to skip the picker.',\n );\n return undefined;\n }\n\n // Drop unsupported wire families \u2014 they need a plugin and can't be\n // selected through this path.\n const supported = providers.filter((p) => p.family !== 'unsupported');\n\n // Build the display list by overlaying saved config on top of the\n // catalog. Two kinds of saved entries matter:\n // 1. The map key matches a catalog id (`zai-coding-plan`) \u2014 the\n // user may have overridden family/baseUrl. We MUST honor those\n // overrides for grouping/display, otherwise an entry the user\n // saved as `family: \"anthropic\"` would still appear under the\n // catalog's `openai-compatible` group.\n // 2. The map key is an alias not in the catalog. Its `cfg.type` may\n // still point at a catalog id, in which case we inherit the\n // model list and display name from there.\n const catalogById = new Map(supported.map((p) => [p.id, p]));\n const overlay = config?.providers ?? {};\n const seen = new Set<string>();\n const merged: ResolvedProvider[] = [];\n for (const p of supported) {\n const cfg = overlay[p.id];\n seen.add(p.id);\n if (cfg) {\n merged.push({\n ...p,\n family: cfg.family ?? p.family,\n apiBase: cfg.baseUrl ?? p.apiBase,\n envVars: cfg.envVars && cfg.envVars.length > 0 ? cfg.envVars : p.envVars,\n // When the user has saved an explicit model list, it wins \u2014 they\n // know which models their endpoint actually serves (e.g. LM\n // Studio, vLLM, or a proxy with custom model ids). Otherwise the\n // catalog list keeps providing suggestions.\n models: visibleModelIds(\n p.id,\n config ?? ({ providers: {} } as Config),\n p.models.map((m) => m.id),\n cfg,\n ).map((m) => p.models.find((pm) => pm.id === m) ?? { id: m, name: m }),\n });\n } else {\n merged.push(p);\n }\n }\n for (const [id, cfg] of Object.entries(overlay)) {\n if (seen.has(id)) continue;\n if (!cfg?.family || cfg.family === 'unsupported') continue;\n const catalogType = cfg.type && cfg.type !== id ? cfg.type : undefined;\n const inherited = catalogType ? catalogById.get(catalogType) : undefined;\n merged.push({\n id,\n name: inherited ? `${inherited.name} ${color.dim('(alias)')}` : id,\n family: cfg.family,\n apiBase: cfg.baseUrl ?? inherited?.apiBase,\n envVars: cfg.envVars ?? inherited?.envVars ?? [],\n models: visibleModelIds(\n id,\n config ?? ({ providers: {} } as Config),\n (inherited?.models ?? []).map((m) => m.id),\n cfg,\n ).map((m) => inherited?.models.find((pm) => pm.id === m) ?? { id: m, name: m }),\n npm: inherited?.npm,\n });\n }\n\n // Filter to usable providers: those with a key, plus keyless local\n // gateways (omniroute/LiteLLM/\u2026 on a loopback address) which need no\n // credential and so are immediately launchable. If none qualify (fresh\n // install, no env vars set), fall back to the full list and prompt the\n // user to add a key \u2014 picking a keyless provider here is still useful\n // because the very next step (`wstack auth <prov>`) needs to know which.\n const keyed = merged.filter((p) => hasApiKey(p, config) || isKeylessLocalProvider(p));\n let displayList = keyed;\n let showingFallback = false;\n if (keyed.length === 0) {\n displayList = merged;\n // The full-catalog fallback only makes sense when there's actually a\n // catalog to fall back on. With an empty catalog, the only thing we'll\n // show is the keyless local presets (injected below), which need no\n // key \u2014 so don't nag the user about missing keys in that case.\n showingFallback = merged.length > 0;\n }\n\n // Surface the built-in local-server presets (OmniRoute / Ollama / vLLM /\n // LM Studio) that aren't already in the catalog or saved config. Done\n // AFTER the keyed/fallback decision so these always-keyless entries\n // don't suppress the \"no keys anywhere \u2192 show full catalog\" fallback;\n // they're simply appended to whichever list we're about to show.\n appendLocalPresetProviders(displayList);\n\n if (displayList.length === 0) {\n renderer.writeError('No supported providers found in catalog.');\n return undefined;\n }\n\n // TTY: live type-to-filter picker. Non-TTY (CI, piped, tests) falls through\n // to the numbered readLine picker below.\n if (process.stdin.isTTY) {\n const chosen = await runLiveProviderPicker(displayList);\n if (!chosen) {\n renderer.write(color.dim('Cancelled.\\n'));\n return undefined;\n }\n return pickModel(chosen, modelsRegistry, renderer, reader, defaultModel);\n }\n\n // Group by family for nicer display\n const families = new Map<string, ResolvedProvider[]>();\n for (const p of displayList) {\n const list = families.get(p.family) ?? [];\n list.push(p);\n families.set(p.family, list);\n }\n\n // Build a flat numbered list (family \u2192 providers). Track which entry\n // matches the current default so we can highlight + accept Enter.\n const ordered: Array<{ provider: ResolvedProvider; index: number }> = [];\n // Preferred grouping order, then any remaining families present in the list.\n // The trailing append is essential: OAuth / subscription families\n // (anthropic-oauth, openai-codex, github-copilot) live only in saved config,\n // never the catalog \u2014 a fixed allowlist would silently drop them from the\n // launch picker even though they have keys.\n const preferredOrder = [\n 'anthropic',\n 'anthropic-oauth',\n 'openai',\n 'openai-codex',\n 'github-copilot',\n 'google',\n 'openai-compatible',\n ];\n const familyOrder = [\n ...preferredOrder.filter((f) => families.has(f)),\n ...[...families.keys()].filter((f) => !preferredOrder.includes(f)),\n ];\n let idx = 1;\n let defaultIdx: number | undefined;\n renderer.write('\\n');\n renderer.write(`${boxTop('Select a provider')}\\n`);\n for (const fam of familyOrder) {\n // Sort within each family alphabetically (case-insensitive) by id.\n const list = [...(families.get(fam) ?? [])].sort((a, b) =>\n a.id.toLowerCase().localeCompare(b.id.toLowerCase()),\n );\n if (!list || list.length === 0) continue;\n // Family section label \u2014 dim UPPERCASE with a leading accent tick, matching\n // the live picker's grouping. `fam` (a lowercased id) stays contained.\n renderer.write(`${boxRow(`${theme.accent('\u00B7')} ${color.dim(fam.toUpperCase())}`)}\\n`);\n for (const p of list) {\n const envFound = p.envVars.some((v) => !!process.env[v]);\n const entry = config?.providers?.[p.id];\n const configKey =\n (typeof entry?.apiKey === 'string' && entry.apiKey.length > 0) ||\n (Array.isArray(entry?.apiKeys) && entry?.apiKeys?.some((k) => k?.apiKey));\n // \u25CF green = env key, \u25C9 cyan = stored in config, \u25CB dim = no key\n const marker = envFound ? color.green('\u25CF') : configKey ? color.cyan('\u25C9') : color.dim('\u25CB');\n const isDefault = p.id === defaultProvider;\n if (isDefault) defaultIdx = idx;\n const idLabel = isDefault ? theme.accent(color.bold(p.id)) : p.id;\n const suffix = isDefault ? color.dim(' (default)') : '';\n renderer.write(\n `${boxRow(`${color.dim(`${idx}.`.padStart(4))} ${marker} ${padVisible(idLabel, 22)} ${color.dim(p.name)}${suffix}`)}\\n`,\n );\n ordered.push({ provider: p, index: idx });\n idx++;\n }\n }\n\n renderer.write(`${boxDivider()}\\n`);\n if (showingFallback) {\n renderer.write(\n `${boxRow(`${color.yellow('\u26A0 No API keys detected.')} ${color.dim('Run `wstack auth <provider>` after picking.')}`)}\\n`,\n );\n } else {\n renderer.write(`${boxRow(color.dim('\u25CF env key \u25C9 stored in config \u25CB no key'))}\\n`);\n }\n renderer.write(`${boxBottom()}\\n`);\n\n // Provider prompt. Enter on an empty line accepts the default when one\n // is present; otherwise we treat it as cancel.\n const defaultHint =\n defaultIdx !== undefined && defaultProvider\n ? ` ${color.dim(`[Enter = ${defaultProvider}]`)}`\n : '';\n const providerAnswer = (\n await reader.readLine(\n `\\n${color.amber('?')} Select provider (1-${ordered.length})${defaultHint} ${color.dim('[q to quit]')}: `,\n )\n ).trim();\n\n if (providerAnswer.toLowerCase() === 'q') {\n renderer.write(color.dim('Cancelled.\\n'));\n return undefined;\n }\n\n if (!providerAnswer) {\n if (defaultIdx !== undefined) {\n const def = ordered[defaultIdx - 1];\n if (def) return pickModel(def.provider, modelsRegistry, renderer, reader, defaultModel);\n }\n renderer.write(color.dim('Cancelled.\\n'));\n return undefined;\n }\n\n const providerIdx = Number.parseInt(providerAnswer, 10);\n if (Number.isNaN(providerIdx) || providerIdx < 1 || providerIdx > ordered.length) {\n // Try matching by id\n const byId = ordered.find((o) => o.provider.id.toLowerCase() === providerAnswer.toLowerCase());\n if (!byId) {\n renderer.writeError(`Invalid selection: \"${providerAnswer}\"`);\n return undefined;\n }\n return pickModel(byId.provider, modelsRegistry, renderer, reader, defaultModel);\n }\n\n const chosen = ordered[providerIdx - 1];\n if (!chosen) return undefined;\n // Only honor the default-model hint when the user picked the default\n // provider; switching providers invalidates it.\n const modelHint = chosen.provider.id === defaultProvider ? defaultModel : undefined;\n return pickModel(chosen.provider, modelsRegistry, renderer, reader, modelHint);\n}\n\nasync function pickModel(\n provider: ResolvedProvider,\n registry: ModelsRegistry,\n renderer: TerminalRenderer,\n reader: ReadlineInputReader,\n defaultModel?: string | undefined,\n): Promise<PickerResult | undefined> {\n // Boxed header. The `<name> (<id>) models:` text is kept contiguous (a test\n // asserts it verbatim, and colors are no-ops off-TTY).\n renderer.write(`\\n${boxTop('Select a model')}\\n`);\n renderer.write(\n `${boxRow(`${color.bold(provider.name)} ${color.dim(`(${provider.id})`)} models:`)}\\n`,\n );\n renderer.write(`${boxBottom()}\\n`);\n // openai-codex picker mirrors the official Codex CLI header; only current\n // models are listed, but legacy ids remain usable via --model / config.json.\n // Uses the same helper as the live-TTY preamble so the two paths can't drift.\n const codexBlock = codexPickerPreamble(provider);\n if (codexBlock) renderer.write(codexBlock);\n\n const models = [...provider.models].sort((a, b) =>\n (b.release_date ?? '').localeCompare(a.release_date ?? ''),\n );\n\n if (models.length === 0) {\n // No catalog models \u2014 common for a freshly-picked local-server preset\n // (OmniRoute / Ollama / LM Studio / \u2026) whose model list auto-discovers\n // at boot or is known only to the user. Instead of dead-ending, let\n // them type a model id directly. Empty input cancels.\n renderer.write(\n color.dim(\n ' No models listed yet for this provider \u2014 type a model id to use it ' +\n '(local servers auto-discover models at launch).\\n',\n ),\n );\n const typed = (\n await reader.readLine(`\\n${color.amber('?')} Model id ${color.dim('(or Enter to cancel)')}: `)\n ).trim();\n if (!typed) {\n renderer.write(color.dim('Cancelled.\\n'));\n return undefined;\n }\n renderer.write(`\\n ${color.green('\u2713')} ${color.bold(provider.id)} / ${color.bold(typed)}\\n\\n`);\n return { provider: provider.id, model: typed };\n }\n\n // TTY: live type-to-filter model picker. Non-TYY (CI/piped/tests) falls\n // through to the paginated numbered picker below.\n if (process.stdin.isTTY) {\n const chosen = await runLiveModelPicker(provider, defaultModel);\n if (!chosen) {\n renderer.write(color.dim('Cancelled.\\n'));\n return undefined;\n }\n renderer.write(\n `\\n ${color.green('\u2713')} ${color.bold(provider.id)} / ${color.bold(chosen.id)}\\n\\n`,\n );\n return { provider: provider.id, model: chosen.id };\n }\n\n // Find default-model index for the \"Enter = default\" hint.\n const defaultIdxInModels =\n defaultModel !== undefined ? models.findIndex((m) => m.id === defaultModel) : -1;\n\n // Show paginated \u2014 up to 30 at a time\n const pageSize = 30;\n let offset = 0;\n\n while (offset < models.length) {\n const page = models.slice(offset, offset + pageSize);\n const pageFrom = offset + 1;\n const pageTo = Math.min(offset + page.length, models.length);\n // Each page is its own box so pagination prompts sit cleanly between boxes.\n renderer.write(`${boxTop(`Models ${pageFrom}\u2013${pageTo} of ${models.length}`)}\\n`);\n for (let i = 0; i < page.length; i++) {\n const m = expectDefined(page[i]);\n const num = offset + i + 1;\n const ctxRaw = m.limit?.context ? `${(m.limit.context / 1000).toFixed(0)}k` : '?';\n const ctx = theme.ctx(ctxRaw.padStart(6));\n const cost = m.cost?.input !== undefined ? `$${m.cost.input}/$${m.cost.output ?? '?'}` : '';\n const costCol = cost ? theme.cost(cost) : '';\n const capTags: string[] = [];\n if (m.tool_call) capTags.push('tools');\n if (m.reasoning) capTags.push('reason');\n if (m.modalities?.input?.includes('image')) capTags.push('vision');\n const capStr = capTags.map((c) => theme.caps(c)).join(color.dim(' '));\n const isDefault = m.id === defaultModel;\n const idLabel = isDefault ? theme.accent(color.bold(m.id)) : m.id;\n const suffix = isDefault ? color.dim(' (default)') : '';\n const num5 = color.dim(`${num}.`.padStart(5));\n renderer.write(\n `${boxRow(`${num5} ${padVisible(idLabel, 34)} ${ctx} ${padVisible(costCol, 11)} ${capStr}${suffix}`)}\\n`,\n );\n }\n renderer.write(`${boxBottom()}\\n`);\n offset += pageSize;\n\n if (offset < models.length) {\n const more = (\n await reader.readLine(\n `\\n${color.amber('?')} Showing ${Math.min(offset, models.length)}/${models.length} \u2014 Enter number, ${color.dim('Enter')} for more, or ${color.dim('q')} to quit: `,\n )\n ).trim();\n if (more.toLowerCase() === 'q') {\n renderer.write(color.dim('Cancelled.\\n'));\n return undefined;\n }\n if (!more) continue; // show next page\n return resolveModelSelection(more, models, provider, registry, renderer, reader);\n }\n }\n\n // All shown \u2014 final prompt. Enter accepts the default model when present.\n const defaultHint =\n defaultIdxInModels >= 0 && defaultModel ? ` ${color.dim(`[Enter = ${defaultModel}]`)}` : '';\n const answer = (\n await reader.readLine(\n `\\n${color.amber('?')} Select model (1-${models.length})${defaultHint} ${color.dim('[q to quit]')}: `,\n )\n ).trim();\n if (answer.toLowerCase() === 'q') {\n renderer.write(color.dim('Cancelled.\\n'));\n return undefined;\n }\n if (!answer) {\n if (defaultIdxInModels >= 0 && defaultModel) {\n renderer.write(\n `\\n ${color.green('\u2713')} ${color.bold(provider.id)} / ${color.bold(defaultModel)}\\n\\n`,\n );\n return { provider: provider.id, model: defaultModel };\n }\n renderer.write(color.dim('Cancelled.\\n'));\n return undefined;\n }\n return resolveModelSelection(answer, models, provider, registry, renderer, reader);\n}\n\nasync function resolveModelSelection(\n answer: string,\n models: {\n id: string;\n name: string;\n release_date?: string | undefined;\n limit?: { context?: number | undefined };\n cost?: { input?: number | undefined; output?: number | undefined };\n tool_call?: boolean | undefined;\n reasoning?: boolean | undefined;\n modalities?: { input?: string[] | undefined };\n }[],\n provider: ResolvedProvider,\n _registry: ModelsRegistry,\n renderer: TerminalRenderer,\n _reader: ReadlineInputReader,\n): Promise<PickerResult | undefined> {\n const idx = Number.parseInt(answer, 10);\n let modelId: string | undefined;\n\n if (!Number.isNaN(idx) && idx >= 1 && idx <= models.length) {\n modelId = models[idx - 1]?.id;\n } else {\n // Try fuzzy matching by id\n const lower = answer.toLowerCase();\n const match = models.find((m) => m.id.toLowerCase() === lower);\n if (match) {\n modelId = match.id;\n } else {\n // Partial match\n const partial = models.filter((m) => m.id.toLowerCase().includes(lower));\n if (partial.length === 1) {\n modelId = partial[0]?.id;\n } else if (partial.length > 1) {\n renderer.writeError(`\"${answer}\" matches multiple models. Be more specific.`);\n return undefined;\n }\n }\n }\n\n if (!modelId) {\n // Use as-is (user might know the exact model string)\n modelId = answer;\n }\n\n renderer.write(`\\n ${color.green('\u2713')} ${color.bold(provider.id)} / ${color.bold(modelId)}\\n\\n`);\n\n return { provider: provider.id, model: modelId };\n}\n\n// --- Helpers ---\n", "export interface ProviderPickerState {\n query: string;\n selected: number;\n status: 'typing' | 'submitted' | 'cancelled';\n}\n\nexport function applyPickerKey(\n state: ProviderPickerState,\n chunk: string,\n matchCount: number,\n): ProviderPickerState {\n if (chunk === '\\x1b[A') return { ...state, selected: Math.max(0, state.selected - 1) };\n if (chunk === '\\x1b[B')\n return { ...state, selected: Math.min(Math.max(0, matchCount - 1), state.selected + 1) };\n if (chunk === '\\x1b') return { ...state, query: '', selected: 0, status: 'typing' };\n if (chunk.charCodeAt(0) === 0x1b) return state;\n\n let query = state.query;\n let selected = state.selected;\n const status: ProviderPickerState['status'] = 'typing';\n for (const ch of chunk) {\n if (ch === '\\r' || ch === '\\n') {\n return { ...state, status: matchCount > 0 ? 'submitted' : 'typing' };\n }\n if (ch === '\\x03') return { ...state, status: 'cancelled' };\n if (ch === '\\x15') {\n query = '';\n selected = 0;\n continue;\n }\n if (ch === '\\x7f' || ch === '\\b') {\n query = query.slice(0, -1);\n selected = 0;\n continue;\n }\n if (ch >= ' ' && ch !== '\\x7f') {\n query += ch;\n selected = 0;\n }\n }\n return { query, selected, status };\n}\n", "import type { ModelsDevModel, ResolvedProvider } from '@wrongstack/core/types';\nimport { color, expectDefined, setOutputLineGuard, setRawMode, writeOut } from '@wrongstack/core/utils';\nimport { applyPickerKey, type ProviderPickerState } from './picker-key-state.js';\nimport {\n boxBottom,\n boxDivider,\n boxRow,\n boxTop,\n codexPickerPreamble,\n keyHints,\n padVisible,\n theme,\n} from './picker-ui.js';\n\nexport const LIVE_PICKER_MAX_VISIBLE = 15;\n\nexport function filterModels(query: string, models: ModelsDevModel[]): ModelsDevModel[] {\n const q = query.trim().toLowerCase();\n if (!q) return [...models];\n return models.filter((m) => m.id.toLowerCase().includes(q) || m.name.toLowerCase().includes(q));\n}\n\nexport function renderLiveModelList(\n query: string,\n filtered: ModelsDevModel[],\n selectedIdx: number,\n header: string,\n): string {\n const ordered = [...filtered].sort((a, b) =>\n (b.release_date ?? '').localeCompare(a.release_date ?? ''),\n );\n const visible = ordered.slice(0, LIVE_PICKER_MAX_VISIBLE);\n\n const lines: string[] = [];\n lines.push(boxTop('Select a model'));\n lines.push(boxRow(color.dim(header)));\n const caret = query.length > 0 ? color.dim('\u258F') : theme.cursor('\u258F');\n lines.push(boxRow(`${theme.accent('\u276F')} ${color.dim('Select model:')} ${query}${caret}`));\n lines.push(boxDivider());\n\n let flat = 0;\n for (const m of visible) {\n const selected = flat === selectedIdx;\n const marker = selected ? theme.cursor('\u25B6') : ' ';\n const ctxRaw = m.limit?.context ? `${(m.limit.context / 1000).toFixed(0)}k` : '?';\n const ctx = theme.ctx(ctxRaw.padStart(6));\n const costRaw = m.cost?.input !== undefined ? `$${m.cost.input}/$${m.cost.output ?? '?'}` : '';\n const cost = costRaw ? theme.cost(costRaw) : '';\n const capTags: string[] = [];\n if (m.tool_call) capTags.push('tools');\n if (m.reasoning) capTags.push('reason');\n if (m.modalities?.input?.includes('image')) capTags.push('vision');\n const caps = capTags.map((c) => theme.caps(c)).join(color.dim(' '));\n const id = selected ? theme.accent(color.bold(m.id)) : m.id;\n lines.push(boxRow(`${marker} ${padVisible(id, 34)} ${ctx} ${padVisible(cost, 12)} ${caps}`));\n flat++;\n }\n\n if (ordered.length > LIVE_PICKER_MAX_VISIBLE) {\n lines.push(\n boxRow(color.dim(` \u2026 ${ordered.length - LIVE_PICKER_MAX_VISIBLE} more \u2014 type to filter`)),\n );\n }\n lines.push(boxDivider());\n lines.push(\n boxRow(\n keyHints([\n ['\u2191\u2193', 'move'],\n ['Enter', 'select'],\n ['Esc', 'clear'],\n ['Ctrl+C', 'quit'],\n ]),\n ),\n );\n lines.push(boxBottom());\n return lines.join('\\n');\n}\n\nexport async function runLiveModelPicker(\n provider: ResolvedProvider,\n defaultModel?: string,\n): Promise<ModelsDevModel | undefined> {\n const stdin = process.stdin;\n const out = process.stdout;\n if (!stdin.isTTY || !out.isTTY) return undefined;\n\n const header = `${provider.name} (${provider.id}) models:`;\n const byNewest = (a: ModelsDevModel, b: ModelsDevModel): number =>\n (b.release_date ?? '').localeCompare(a.release_date ?? '');\n const ranked = [...provider.models].sort(byNewest);\n const defaultIdx =\n defaultModel !== undefined ? ranked.findIndex((m) => m.id === defaultModel) : -1;\n\n setOutputLineGuard(null);\n let state: ProviderPickerState = {\n query: '',\n selected: defaultIdx >= 0 ? defaultIdx : 0,\n status: 'typing',\n };\n const order = (filtered: ModelsDevModel[]): ModelsDevModel[] => [...filtered].sort(byNewest);\n let ordered = order(filterModels(state.query, provider.models));\n const visibleCount = (): number => Math.min(ordered.length, LIVE_PICKER_MAX_VISIBLE);\n const clamp = (): void => {\n if (state.selected >= visibleCount()) state.selected = Math.max(0, visibleCount() - 1);\n };\n clamp();\n const preamble = codexPickerPreamble(provider);\n if (preamble) writeOut(preamble);\n let frame = renderLiveModelList(state.query, ordered, state.selected, header);\n writeOut(frame);\n\n return new Promise<ModelsDevModel | undefined>((resolve) => {\n const wasRaw = stdin.isRaw;\n const wasPaused = stdin.isPaused();\n setRawMode(stdin, true);\n stdin.resume();\n stdin.setEncoding('utf8');\n\n const cleanup = (): void => {\n stdin.off('data', onData);\n setRawMode(stdin, wasRaw);\n if (wasPaused) stdin.pause();\n };\n const repaint = (): void => {\n const ups = (frame.match(/\\n/g) ?? []).length;\n writeOut(`\\x1b[${ups}A\\r\\x1b[J`);\n ordered = order(filterModels(state.query, provider.models));\n clamp();\n frame = renderLiveModelList(state.query, ordered, state.selected, header);\n writeOut(frame);\n };\n const onData = (chunk: string): void => {\n ordered = order(filterModels(state.query, provider.models));\n state = applyPickerKey(state, chunk, visibleCount());\n ordered = order(filterModels(state.query, provider.models));\n clamp();\n if (state.status === 'cancelled') {\n cleanup();\n writeOut('\\n');\n resolve(undefined);\n return;\n }\n if (state.status === 'submitted') {\n if (ordered.length === 0) {\n state = { ...state, status: 'typing' };\n repaint();\n return;\n }\n const pick = ordered[state.selected] ?? expectDefined(ordered[0]);\n cleanup();\n writeOut('\\n');\n resolve(pick);\n return;\n }\n repaint();\n };\n stdin.on('data', onData);\n });\n}\n", "import type { ResolvedProvider } from '@wrongstack/core/types';\nimport { color, stripAnsi } from '@wrongstack/core/utils';\n\nexport const theme = {\n accent: color.amber,\n chrome: color.gray,\n cursor: (s: string): string => color.amber(color.bold(s)),\n ctx: color.cyan,\n cost: color.green,\n caps: color.magenta,\n};\n\nconst BOX = {\n tl: '\u256D',\n tr: '\u256E',\n bl: '\u2570',\n br: '\u256F',\n h: '\u2500',\n v: '\u2502',\n} as const;\n\nconst PICKER_MIN_WIDTH = 74;\nconst PICKER_MAX_WIDTH = 100;\n\nfunction pickerWidth(): number {\n const cols = process.stdout.columns;\n if (typeof cols !== 'number' || !Number.isFinite(cols) || cols <= 0) {\n return PICKER_MIN_WIDTH;\n }\n return Math.max(PICKER_MIN_WIDTH, Math.min(PICKER_MAX_WIDTH, cols - 2));\n}\n\nfunction visibleWidth(s: string): number {\n return stripAnsi(s).length;\n}\n\nexport function padVisible(s: string, width: number): string {\n const w = visibleWidth(s);\n if (w === width) return s;\n if (w < width) return s + ' '.repeat(width - w);\n const plain = stripAnsi(s);\n return `${plain.slice(0, Math.max(0, width - 1))}\u2026`;\n}\n\nexport function boxTop(title: string): string {\n const width = pickerWidth();\n const label = ` ${title} `;\n const pad = Math.max(0, width - visibleWidth(label) - 1);\n return theme.chrome(\n `${BOX.tl}${BOX.h}${theme.accent(color.bold(label))}${theme.chrome(BOX.h.repeat(pad))}${BOX.tr}`,\n );\n}\n\nexport function boxBottom(): string {\n return theme.chrome(`${BOX.bl}${BOX.h.repeat(pickerWidth())}${BOX.br}`);\n}\n\nexport function boxRow(content: string): string {\n return `${theme.chrome(BOX.v)} ${padVisible(content, pickerWidth() - 2)} ${theme.chrome(BOX.v)}`;\n}\n\nexport function boxDivider(): string {\n return theme.chrome(`${BOX.v}${BOX.h.repeat(pickerWidth())}${BOX.v}`);\n}\n\nexport function keyHints(pairs: Array<[string, string]>): string {\n return pairs.map(([k, label]) => `${theme.accent(k)} ${color.dim(label)}`).join(color.dim(' \u00B7 '));\n}\n\nconst CODEX_PROVIDER_ID = 'openai-codex';\nconst CODEX_PICKER_HEADER = 'Select Model and Effort';\nconst CODEX_LEGACY_NOTE =\n 'Access legacy models by running `wstack -m <model_name>` or in your `config.json`.';\n\nexport function codexPickerPreamble(provider: ResolvedProvider): string {\n if (provider.id !== CODEX_PROVIDER_ID) return '';\n return ` ${color.bold(CODEX_PICKER_HEADER)}\\n${color.dim(` ${CODEX_LEGACY_NOTE}`)}\\n\\n`;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["color", "expectDefined", "setOutputLineGuard", "setRawMode", "stripAnsi", "writeOut", "color", "color", "color", "stripAnsi", "writeOut", "setOutputLineGuard", "setRawMode", "chosen", "expectDefined"]
|
|
7
|
+
}
|