@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/subcommands/handlers/providers-models.ts"],
|
|
4
|
+
"sourcesContent": ["import * as fs from 'node:fs/promises';\nimport { atomicWrite, color, expectDefined } from '@wrongstack/core/utils';\nimport type { Capabilities } from '@wrongstack/core/types';\nimport { decryptConfigSecrets, encryptConfigSecrets } from '@wrongstack/core/security';\nimport { ConfigError, type CustomModelDefinition, type ProviderConfig, type WireFamily } from '@wrongstack/core/types';\nimport { mutateConfigProviders } from '../../provider-config-utils.js';\nimport { visibleModelIds } from '../../provider-helpers.js';\nimport { activeProfileConfigPath } from '../../profile-config-path.js';\nimport type { SubcommandHandler } from '../index.js';\nexport const providersCmd: SubcommandHandler = async (args, deps) => {\n const showAll = args.includes('--all');\n const showUnsupported = args.includes('--unsupported');\n try {\n const all = await deps.modelsRegistry.listProviders();\n const byFamily: Record<WireFamily, typeof all> = {\n anthropic: [],\n 'anthropic-oauth': [],\n openai: [],\n 'openai-compatible': [],\n 'openai-codex': [],\n 'github-copilot': [],\n google: [],\n unsupported: [],\n };\n for (const p of all) byFamily[p.family].push(p);\n const families: WireFamily[] = showUnsupported\n ? ['unsupported']\n : showAll\n ? ['anthropic', 'openai', 'google', 'openai-compatible', 'unsupported']\n : ['anthropic', 'openai', 'google', 'openai-compatible'];\n for (const family of families) {\n const list = byFamily[family];\n if (list.length === 0) continue;\n deps.renderer.write(`\\n${color.bold(family)} (${list.length}):\\n`);\n for (const p of list) {\n const envFound = p.envVars.some((v) => process.env[v]);\n const marker = envFound ? color.green('\u25CF') : color.dim('\u25CB');\n const envHint = p.envVars[0] ? color.dim(`[${p.envVars[0]}]`) : '';\n const note = family === 'unsupported' ? color.dim('(needs plugin)') : '';\n deps.renderer.write(\n ` ${marker} ${p.id.padEnd(20)} ${p.name.padEnd(28)} ${envHint} ${note}\\n`,\n );\n }\n }\n deps.renderer.write(\n `\\n${color.dim(`Current: ${deps.config.provider ?? '<unset>'} / ${deps.config.model ?? '<unset>'}. Use --all to include unsupported families.`)}\\n`,\n );\n return 0;\n } catch (err) {\n deps.renderer.writeError(\n `Failed to list providers: ${err instanceof Error ? err.message : err}`,\n );\n return 1;\n }\n};\n\n/** Parse `--key value` flags from a flat args array. */\nfunction parseFlags(args: string[]): Record<string, string | boolean> {\n const flags: Record<string, string | boolean> = {};\n for (let i = 0; i < args.length; i++) {\n const a = expectDefined(args[i]);\n if (a.startsWith('--')) {\n const eq = a.indexOf('=');\n if (eq !== -1) {\n flags[a.slice(2, eq)] = a.slice(eq + 1);\n } else {\n const name = a.slice(2);\n if (i + 1 < args.length && !args[i + 1]?.startsWith('--')) {\n flags[name] = args[++i] ?? '';\n } else {\n flags[name] = true;\n }\n }\n }\n }\n return flags;\n}\n\n/** Filter out flag args and return only positional (non-flag) args. */\nfunction positionals(args: string[]): string[] {\n const out: string[] = [];\n for (let i = 0; i < args.length; i++) {\n const a = expectDefined(args[i]);\n if (a.startsWith('--')) {\n const eq = a.indexOf('=');\n if (eq === -1) {\n // If the next arg is a value (not a flag), skip it\n if (i + 1 < args.length && !args[i + 1]?.startsWith('--')) {\n i++;\n }\n }\n continue;\n }\n out.push(a);\n }\n return out;\n}\n\nconst DEFAULT_PER_PAGE = 15;\n\nfunction fmtPrice(usdPer1M: number | undefined): string {\n if (usdPer1M === undefined) return color.dim('?');\n const value = usdPer1M >= 10 ? usdPer1M.toFixed(1) : usdPer1M.toFixed(2);\n return '$' + value;\n}\n\nexport const modelsCmd: SubcommandHandler = async (args, deps) => {\n const sub = args[0];\n\n // ---- visibility commands ----\n if (sub === 'hide') return modelsHide(args.slice(1), deps);\n if (sub === 'show') return modelsShow(args.slice(1), deps);\n if (sub === 'hidden') return modelsHidden(args.slice(1), deps);\n if (sub === 'reset') return modelsReset(args.slice(1), deps);\n\n // ---- custom model commands ----\n if (sub === 'add') return modelsAdd(args.slice(1), deps);\n if (sub === 'remove') return modelsRemove(args.slice(1), deps);\n if (sub === 'list') return modelsList(args.slice(1), deps);\n if (sub === 'caps' || sub === 'capabilities') return modelsCaps(args.slice(1), deps);\n\n if (sub === 'refresh') {\n deps.renderer.writeInfo('Refreshing models.dev cache\u2026');\n try {\n const payload = await deps.modelsRegistry.refresh();\n deps.renderer.writeInfo(\n `Cached ${Object.keys(payload).length} providers to ${deps.paths.modelsCache}`,\n );\n return 0;\n } catch (err) {\n deps.renderer.writeError(`Refresh failed: ${err instanceof Error ? err.message : err}`);\n return 1;\n }\n }\n\n const flags = parseFlags(args);\n const search = typeof flags['search'] === 'string' ? flags['search'].toLowerCase() : '';\n const perPage = Number(flags['per-page']) > 0 ? Number(flags['per-page']) : DEFAULT_PER_PAGE;\n const page = Math.max(1, Number(flags['page']) || 1);\n\n // Use first positional arg as provider if given, else fall back to configured default.\n // Flags (--search, --page) filter/paginate the list \u2014 they don't change the provider.\n const providerId = sub ?? deps.config.provider ?? '';\n if (!providerId) {\n deps.renderer.writeError(\n 'Usage: wstack models <provider> [--search <term>] [--page N] [--per-page N]',\n );\n return 1;\n }\n\n let lookupId = providerId;\n const savedAlias = deps.config.providers?.[providerId];\n if (savedAlias?.type && savedAlias.type !== providerId) lookupId = savedAlias.type;\n const provider = await deps.modelsRegistry.getProvider(lookupId);\n if (!provider) {\n deps.renderer.writeError(\n lookupId !== providerId\n ? `Alias \"${providerId}\" points at catalog id \"${lookupId}\" which is not in the cache.`\n : `Provider \"${providerId}\" not in catalog.`,\n );\n return 1;\n }\n if (lookupId !== providerId)\n deps.renderer.write(\n color.dim(`(showing catalog models for \"${lookupId}\" via alias \"${providerId}\")\\n`),\n );\n deps.renderer.write(`${color.bold(provider.name)} ${color.dim(`(${provider.id})`)}\\n`);\n if (provider.doc) deps.renderer.write(color.dim(`Docs: ${provider.doc}\\n`));\n\n const savedProvider = deps.config.providers?.[providerId];\n const userModels = savedProvider?.models;\n const catalogById = new Map(provider.models.map((m) => [m.id, m]));\n const allKnownSorted = [...provider.models].sort((a, b) =>\n (b.release_date ?? '').localeCompare(a.release_date ?? ''),\n );\n const visibleIds = visibleModelIds(\n providerId,\n deps.config,\n allKnownSorted.map((m) => m.id),\n savedProvider,\n );\n const allSorted = visibleIds.map((id) => catalogById.get(id) ?? { id, name: id });\n\n if (userModels !== undefined) {\n const hiddenCount = Math.max(0, allKnownSorted.length - visibleIds.length);\n const restoredCount = Math.max(0, visibleIds.length - userModels.length);\n deps.renderer.write(\n color.dim(\n `(${visibleIds.length} visible model(s)${restoredCount > 0 ? `, ${restoredCount} from providers.json/catalog fallback` : ' from your saved config'}${hiddenCount > 0 ? `, ${hiddenCount} hidden` : ''})\\n`,\n ),\n );\n }\n\n const filtered = search\n ? allSorted.filter((m) => m.id.toLowerCase().includes(search))\n : allSorted;\n\n const total = filtered.length;\n const totalPages = Math.max(1, Math.ceil(total / perPage));\n const actualPage = Math.min(page, totalPages);\n const start = (actualPage - 1) * perPage;\n const pageItems = filtered.slice(start, start + perPage);\n const end = Math.min(start + pageItems.length, total);\n\n // Header\n const pageHint = totalPages > 1 ? color.cyan(`[page ${actualPage}/${totalPages}]`) : '';\n const searchHint = search\n ? color.yellow(` (filtered: \"${search}\" \u2014 ${total} match${total === 1 ? '' : 'es'})`)\n : color.dim(` (${total} model${total === 1 ? '' : 's'})`);\n deps.renderer.write(`${pageHint}${searchHint}\\n`);\n\n if (pageItems.length === 0) {\n deps.renderer.write(color.dim('(no models match)\\n'));\n } else {\n if (start > 0)\n deps.renderer.write(color.dim(` ${String.fromCharCode(8593)} ${start} above\\n`));\n for (const m of pageItems) {\n const caps: string[] = [];\n if ('tool_call' in m && m.tool_call) caps.push('tools');\n if ('reasoning' in m && m.reasoning) caps.push('reasoning');\n if ('modalities' in m && m.modalities?.input?.includes('image')) caps.push('vision');\n const ctx =\n 'limit' in m && m.limit?.context ? `${(m.limit.context / 1000).toFixed(0)}k` : '?';\n const cost =\n 'cost' in m && m.cost?.input !== undefined ? `${m.cost.input}/${m.cost.output ?? '?'}` : '';\n deps.renderer.write(\n ` ${m.id.padEnd(40)} ${color.dim(ctx.padStart(6))} ${color.dim(cost.padEnd(14))} ${color.dim(caps.join(','))}\\n`,\n );\n }\n if (end < total)\n deps.renderer.write(color.dim(` ${String.fromCharCode(8595)} ${total - end} below\\n`));\n }\n\n // Navigation footer\n const navLines: string[] = [];\n if (totalPages > 1) {\n if (actualPage > 1) navLines.push(`--page ${actualPage - 1} (prev)`);\n if (actualPage < totalPages) navLines.push(`--page ${actualPage + 1} (next)`);\n }\n navLines.push('--search <term> (filter)');\n deps.renderer.write(color.dim(`\\n${navLines.join(' \u00B7 ')}\\n`));\n\n const age = await deps.modelsRegistry.ageSeconds();\n deps.renderer.write(\n color.dim(\n `Cache age: ${isFinite(age) ? `${Math.round(age / 60)}m` : 'never fetched'}. Run \\`wstack models refresh\\` to update.\\n`,\n ),\n );\n return 0;\n};\n\nfunction aliasProviderId(configProviderId: string, cfg: ProviderConfig | undefined): string {\n return cfg?.type && cfg.type !== configProviderId ? cfg.type : configProviderId;\n}\n\nasync function getCatalogProviderForConfigProvider(\n providerId: string,\n deps: Parameters<SubcommandHandler>[1],\n): Promise<{ providerId: string; provider: Awaited<ReturnType<typeof deps.modelsRegistry.getProvider>> }> {\n const cfg = deps.config.providers?.[providerId];\n const lookupId = aliasProviderId(providerId, cfg);\n const provider = await deps.modelsRegistry.getProvider(lookupId);\n return { providerId: lookupId, provider };\n}\n\nfunction uniqueStrings(values: string[]): string[] {\n return [...new Set(values.map((v) => v.trim()).filter(Boolean))];\n}\n\nasync function modelsHide(args: string[], deps: Parameters<SubcommandHandler>[1]): Promise<number> {\n const providerId = args[0];\n const modelId = args[1];\n if (!providerId || !modelId) {\n deps.renderer.writeError('Usage: wstack models hide <provider> <model>');\n return 1;\n }\n const saved = deps.config.providers?.[providerId];\n if (!saved) {\n deps.renderer.writeError(`Provider \"${providerId}\" is not configured.`);\n return 1;\n }\n const { providerId: lookupId, provider } = await getCatalogProviderForConfigProvider(providerId, deps);\n if (!provider) {\n deps.renderer.writeError(\n lookupId !== providerId\n ? `Alias \"${providerId}\" points at catalog id \"${lookupId}\" which is not in the cache.`\n : `Provider \"${providerId}\" not in catalog.`,\n );\n return 1;\n }\n const knownIds = provider.models.map((m) => m.id);\n const visible = saved.models !== undefined ? [...saved.models] : [...knownIds];\n if (!visible.includes(modelId)) {\n deps.renderer.writeInfo(`${providerId}/${modelId} is already hidden.`);\n return 0;\n }\n const nextVisible = visible.filter((id) => id !== modelId);\n await mutateConfigProviders(activeProfileConfigPath(deps.paths, deps.config), deps.vault, (providers) => {\n const p = providers[providerId];\n if (!p) return;\n p.models = nextVisible;\n });\n deps.config.providers = {\n ...(deps.config.providers ?? {}),\n [providerId]: { ...saved, models: nextVisible },\n };\n deps.renderer.writeInfo(\n `Hidden ${providerId}/${modelId}. Visible: ${nextVisible.length}, hidden: ${Math.max(0, knownIds.length - nextVisible.length)}.`,\n );\n if (nextVisible.length === 0) {\n deps.renderer.write(color.dim('This provider now has no visible models. Use `wstack models show` or `wstack models reset` to restore.\\n'));\n }\n return 0;\n}\n\nasync function modelsShow(args: string[], deps: Parameters<SubcommandHandler>[1]): Promise<number> {\n const providerId = args[0];\n const modelId = args[1];\n if (!providerId || !modelId) {\n deps.renderer.writeError('Usage: wstack models show <provider> <model>');\n return 1;\n }\n const saved = deps.config.providers?.[providerId];\n if (!saved) {\n deps.renderer.writeError(`Provider \"${providerId}\" is not configured.`);\n return 1;\n }\n const { providerId: lookupId, provider } = await getCatalogProviderForConfigProvider(providerId, deps);\n if (!provider) {\n deps.renderer.writeError(\n lookupId !== providerId\n ? `Alias \"${providerId}\" points at catalog id \"${lookupId}\" which is not in the cache.`\n : `Provider \"${providerId}\" not in catalog.`,\n );\n return 1;\n }\n const knownIds = provider.models.map((m) => m.id);\n if (saved.models === undefined) {\n deps.renderer.writeInfo(`${providerId}/${modelId} is already visible.`);\n return 0;\n }\n const nextVisible = uniqueStrings([...saved.models, modelId]);\n await mutateConfigProviders(activeProfileConfigPath(deps.paths, deps.config), deps.vault, (providers) => {\n const p = providers[providerId];\n if (!p) return;\n p.models = nextVisible;\n });\n deps.config.providers = {\n ...(deps.config.providers ?? {}),\n [providerId]: { ...saved, models: nextVisible },\n };\n const isKnown = knownIds.includes(modelId);\n deps.renderer.writeInfo(\n `Visible ${providerId}/${modelId}${isKnown ? '' : ' (not in current catalog)'}. Visible: ${nextVisible.length}.`,\n );\n return 0;\n}\n\nasync function modelsHidden(args: string[], deps: Parameters<SubcommandHandler>[1]): Promise<number> {\n const providerId = args[0] ?? deps.config.provider;\n if (!providerId) {\n deps.renderer.writeError('Usage: wstack models hidden <provider>');\n return 1;\n }\n const saved = deps.config.providers?.[providerId];\n if (!saved) {\n deps.renderer.writeError(`Provider \"${providerId}\" is not configured.`);\n return 1;\n }\n const { providerId: lookupId, provider } = await getCatalogProviderForConfigProvider(providerId, deps);\n if (!provider) {\n deps.renderer.writeError(\n lookupId !== providerId\n ? `Alias \"${providerId}\" points at catalog id \"${lookupId}\" which is not in the cache.`\n : `Provider \"${providerId}\" not in catalog.`,\n );\n return 1;\n }\n const knownIds = provider.models.map((m) => m.id);\n const visible = saved.models;\n const hidden = visible === undefined ? [] : knownIds.filter((id) => !visible.includes(id));\n deps.renderer.write(`${color.bold('Hidden models')} ${color.dim(`(${providerId})`)}\\n`);\n if (hidden.length === 0) {\n deps.renderer.write(color.dim('(none hidden)\\n'));\n return 0;\n }\n for (const id of hidden) deps.renderer.write(` ${id}\\n`);\n deps.renderer.write(color.dim(`\\nRestore: wstack models show ${providerId} <model> \u00B7 reset ${providerId}\\n`));\n return 0;\n}\n\nasync function modelsReset(args: string[], deps: Parameters<SubcommandHandler>[1]): Promise<number> {\n const providerId = args[0];\n if (!providerId) {\n deps.renderer.writeError('Usage: wstack models reset <provider>');\n return 1;\n }\n const saved = deps.config.providers?.[providerId];\n if (!saved) {\n deps.renderer.writeError(`Provider \"${providerId}\" is not configured.`);\n return 1;\n }\n if (saved.models === undefined) {\n deps.renderer.writeInfo(`${providerId} already shows the full catalog model list.`);\n return 0;\n }\n await mutateConfigProviders(activeProfileConfigPath(deps.paths, deps.config), deps.vault, (providers) => {\n const p = providers[providerId];\n if (!p) return;\n delete p.models;\n });\n const nextProvider = { ...saved };\n delete nextProvider.models;\n deps.config.providers = {\n ...(deps.config.providers ?? {}),\n [providerId]: nextProvider,\n };\n deps.renderer.writeInfo(`Reset visible model list for ${providerId} to the full catalog default.`);\n return 0;\n}\n\nasync function modelsCaps(args: string[], deps: Parameters<SubcommandHandler>[1]): Promise<number> {\n const providerId = args[0] ?? deps.config.provider;\n const modelId = args[1] ?? deps.config.model;\n if (!providerId || !modelId) {\n deps.renderer.writeError('Usage: wstack models caps [provider] [model]');\n deps.renderer.write(color.dim('Defaults to current configured provider/model when omitted.\\n'));\n return 1;\n }\n\n const resolved = await deps.modelsRegistry.getModel(providerId, modelId);\n if (!resolved) {\n deps.renderer.writeError('Model not found in catalog: ' + providerId + '/' + modelId);\n deps.renderer.write(color.dim('Run `wstack models refresh` or add a custom model if this is expected.\\n'));\n return 1;\n }\n\n const caps = resolved.capabilities;\n const flags = [\n caps.tools ? 'tools' : undefined,\n caps.vision ? 'vision' : undefined,\n caps.reasoning ? 'reasoning' : undefined,\n ].filter((v): v is string => v !== undefined);\n const rc = caps.reasoningConfig;\n const cost = resolved.cost;\n\n deps.renderer.write(color.bold('Model capabilities') + ' ' + color.dim(providerId + '/' + modelId) + '\\n');\n deps.renderer.write(' context: ' + (caps.maxContext ? color.yellow(String(caps.maxContext)) : color.dim('?')) + '\\n');\n if (caps.maxOutput !== undefined) {\n deps.renderer.write(' max output: ' + color.yellow(String(caps.maxOutput)) + '\\n');\n }\n if (caps.knowledge) deps.renderer.write(' knowledge: ' + caps.knowledge + '\\n');\n deps.renderer.write(' flags: ' + (flags.length > 0 ? flags.join(', ') : color.dim('(none)')) + '\\n');\n deps.renderer.write(' pricing/1M: input ' + fmtPrice(cost?.input) + ' output ' + fmtPrice(cost?.output) + ' cacheR ' + fmtPrice(cost?.cache_read) + '\\n');\n if (cost?.cache_write !== undefined || cost?.cache_write_5m !== undefined || cost?.cache_write_1h !== undefined) {\n const cacheWrite1h = cost.cache_write_1h ?? (cost.input !== undefined ? cost.input * 2 : undefined);\n deps.renderer.write(' cache write: default ' + fmtPrice(cost.cache_write) + ' 5m ' + fmtPrice(cost.cache_write_5m ?? cost.cache_write) + ' 1h ' + fmtPrice(cacheWrite1h) + '\\n');\n }\n if (rc) {\n deps.renderer.write(' reasoning:\\n');\n deps.renderer.write(' default: ' + rc.default + '\\n');\n deps.renderer.write(' disable: ' + (rc.disableSupported ? 'supported' : 'unsupported') + '\\n');\n deps.renderer.write(' effort: ' + (rc.effortSupported ? rc.effortLevels.join(', ') : 'unsupported') + '\\n');\n deps.renderer.write(' preserve: ' + rc.preserveThinking + '\\n');\n } else if (caps.reasoning) {\n deps.renderer.write(color.dim(' reasoning: supported, but no detailed config in catalog\\n'));\n }\n return 0;\n}\n/* ------------------------------------------------------------------ */\n/* Custom model management (top-level Config.models) */\n/* ------------------------------------------------------------------ */\n\n/**\n * Load \u2192 mutate \u2192 encrypt \u2192 atomic-write for the `models` section.\n */\nasync function mutateModelsConfig(\n deps: Parameters<SubcommandHandler>[1],\n mutator: (models: Record<string, CustomModelDefinition>) => void,\n): Promise<void> {\n const vault = deps.vault;\n const configPath = activeProfileConfigPath(deps.paths, deps.config);\n let fileExists = true;\n let raw: string;\n try {\n raw = await fs.readFile(configPath, 'utf8');\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n fileExists = false;\n raw = '{}';\n }\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(raw) as Record<string, unknown>;\n } catch (err) {\n if (fileExists) {\n throw new ConfigError({\n message: `Refusing to overwrite corrupt config at ${configPath} (${(err as Error).message}).`,\n code: 'CONFIG_PARSE_FAILED',\n context: { filePath: configPath, operation: 'mutateModelsConfig' },\n });\n }\n parsed = {};\n }\n const decrypted = decryptConfigSecrets(parsed, vault) as Record<string, unknown>;\n const models = (decrypted.models as Record<string, CustomModelDefinition>) ?? {};\n mutator(models);\n decrypted.models = models;\n const encrypted = encryptConfigSecrets(decrypted, vault);\n await atomicWrite(configPath, JSON.stringify(encrypted, null, 2), { mode: 0o600 });\n}\n\n/** Parse a human-readable size like \"128k\", \"1M\", \"200000\" into a number. */\nfunction parseSizeFlag(raw: string | undefined): number | undefined {\n if (!raw) return undefined;\n const s = raw.trim().toLowerCase();\n const match = /^(\\d+(?:\\.\\d+)?)\\s*(k|m|b)?$/.exec(s);\n if (!match) return undefined;\n const num = Number.parseFloat(expectDefined(match[1]));\n const unit = match[2];\n if (unit === 'b') return Math.round(num * 1_000_000_000);\n if (unit === 'm') return Math.round(num * 1_000_000);\n if (unit === 'k') return Math.round(num * 1000);\n return Math.round(num);\n}\n\n/** Parse a boolean flag like \"--tools\" / \"--no-tools\". */\nfunction parseBoolFlag(flags: Record<string, string | boolean>, key: string): boolean | undefined {\n if (flags[key] === true || flags[key] === 'true') return true;\n if (flags[`no-${key}`] !== undefined) return false;\n return undefined;\n}\n\nasync function modelsAdd(args: string[], deps: Parameters<SubcommandHandler>[1]): Promise<number> {\n const flags = parseFlags(args);\n const pos = positionals(args);\n const modelId = pos[0];\n\n if (!modelId) {\n deps.renderer.writeError(\n 'Usage: wstack models add <modelId> [--provider <id>] [--name <name>] ' +\n '[--max-context <N>] [--max-output <N>] [--tools] [--no-tools] ' +\n '[--vision] [--no-vision] [--reasoning] [--streaming] [--no-streaming] [--json-mode]',\n );\n return 1;\n }\n\n const existing = deps.config.models?.[modelId];\n if (existing) {\n deps.renderer.writeWarning(`Model \"${modelId}\" already defined. Overwriting.`);\n }\n\n const capabilities: Partial<Capabilities> = {};\n const toolsVal = parseBoolFlag(flags, 'tools');\n if (toolsVal !== undefined) capabilities.tools = toolsVal;\n const visionVal = parseBoolFlag(flags, 'vision');\n if (visionVal !== undefined) capabilities.vision = visionVal;\n const streamingVal = parseBoolFlag(flags, 'streaming');\n if (streamingVal !== undefined) capabilities.streaming = streamingVal;\n const reasoningVal = parseBoolFlag(flags, 'reasoning');\n if (reasoningVal !== undefined) capabilities.reasoning = reasoningVal;\n const jsonModeVal = parseBoolFlag(flags, 'json-mode');\n if (jsonModeVal !== undefined) capabilities.jsonMode = jsonModeVal;\n\n const maxContextRaw = typeof flags['max-context'] === 'string' ? flags['max-context'] : undefined;\n const maxContext = parseSizeFlag(maxContextRaw);\n if (maxContext !== undefined) capabilities.maxContext = maxContext;\n\n const def: CustomModelDefinition = {};\n const nameFlag = typeof flags['name'] === 'string' ? flags['name'] : undefined;\n const providerFlag = typeof flags['provider'] === 'string' ? flags['provider'] : undefined;\n if (nameFlag) def.name = nameFlag;\n if (providerFlag) def.provider = providerFlag;\n if (Object.keys(capabilities).length > 0) def.capabilities = capabilities;\n\n const maxOutputRaw = typeof flags['max-output'] === 'string' ? flags['max-output'] : undefined;\n const maxOutput = parseSizeFlag(maxOutputRaw);\n if (maxOutput !== undefined) def.maxOutput = maxOutput;\n\n await mutateModelsConfig(deps, (models) => {\n models[modelId] = def;\n });\n\n deps.renderer.writeInfo(`Custom model \"${modelId}\" ${existing ? 'updated' : 'added'}.`);\n const capLines: string[] = [];\n if (def.capabilities) {\n for (const [k, v] of Object.entries(def.capabilities)) {\n capLines.push(` ${k}: ${v}`);\n }\n }\n if (def.maxOutput !== undefined) capLines.push(` maxOutput: ${def.maxOutput}`);\n if (capLines.length > 0) {\n deps.renderer.write(color.dim(capLines.join('\\n') + '\\n'));\n }\n return 0;\n}\n\nasync function modelsRemove(\n args: string[],\n deps: Parameters<SubcommandHandler>[1],\n): Promise<number> {\n const modelId = args[0];\n if (!modelId) {\n deps.renderer.writeError('Usage: wstack models remove <modelId>');\n return 1;\n }\n\n const existing = deps.config.models?.[modelId];\n if (!existing) {\n deps.renderer.writeError(`No custom model \"${modelId}\" found.`);\n return 1;\n }\n\n await mutateModelsConfig(deps, (models) => {\n delete models[modelId];\n });\n\n deps.renderer.writeInfo(`Removed custom model \"${modelId}\".`);\n return 0;\n}\n\nasync function modelsList(\n _args: string[],\n deps: Parameters<SubcommandHandler>[1],\n): Promise<number> {\n const models = deps.config.models ?? {};\n const entries = Object.entries(models);\n\n if (entries.length === 0) {\n deps.renderer.write(color.dim('No custom models defined.\\n'));\n deps.renderer.write(\n color.dim('Use `wstack models add <modelId> --max-context 128k --tools`\\n'),\n );\n return 0;\n }\n\n deps.renderer.write(color.bold('Custom models\\n'));\n for (const [id, def] of entries.sort(([a], [b]) => a.localeCompare(b))) {\n const label = def.name ?? id;\n const provider = def.provider ? ` ${color.dim(`(${def.provider})`)}` : '';\n deps.renderer.write(` ${color.bold(label)}${provider}\\n`);\n if (def.capabilities) {\n for (const [k, v] of Object.entries(def.capabilities)) {\n deps.renderer.write(` ${color.dim(`${k}:`)} ${v}\\n`);\n }\n }\n if (def.maxOutput !== undefined) {\n deps.renderer.write(` ${color.dim('maxOutput:')} ${def.maxOutput}\\n`);\n }\n }\n return 0;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/subcommands/handlers/quick.ts"],
|
|
4
|
+
"sourcesContent": ["import type { SubcommandHandler } from '../index.js';\n\n/**\n * `wrongstack quick` \u2014 launch directly into the TUI with sensible defaults.\n *\n * NOTE: The actual handling is done in `boot()` (boot.ts) which intercepts 'quick'\n * before the subcommand dispatch in cli-main.ts. boot() sets flags.quick and\n * flags.tui, lists plugins, clears positional, and returns BootContext.\n * execute() then goes to the TUI path with initialAgentsMonitorOpen: true.\n *\n * This handler is kept for completeness (registered in subcommands/index.ts) but\n * is never called in the `wrongstack quick` flow.\n */\nexport const quickCmd: SubcommandHandler = (_args, _deps) => {\n // This handler is never reached when `wrongstack quick` is used (boot() handles it).\n // Kept for discoverability and as a fallback if the boot() intercept is removed.\n return Promise.resolve(0);\n};\n"],
|
|
5
|
+
"mappings": ";;;;AAaO,IAAM,WAA8B,CAAC,OAAO,UAAU;AAG3D,SAAO,QAAQ,QAAQ,CAAC;AAC1B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type AutoProceedLoopGuard } from '@wrongstack/tools/auto-proceed-loop-guard';
|
|
2
|
+
import type { ReplOptions } from './repl-options.js';
|
|
3
|
+
/**
|
|
4
|
+
* Run the full auto-proceed cycle: countdown, feed suggestion to agent,
|
|
5
|
+
* parse new suggestions from the response. Returns normally when the
|
|
6
|
+
* agent turn completes, throws on abort (Ctrl+C).
|
|
7
|
+
*
|
|
8
|
+
* The caller must set `activeCtrl` before calling and clear it after.
|
|
9
|
+
*/
|
|
10
|
+
export declare function runAutoProceed(opts: ReplOptions, suggestion: string, delayMs: number, ctrl: AbortController, loopGuard: AutoProceedLoopGuard,
|
|
11
|
+
/**
|
|
12
|
+
* True when `suggestion` was synthesized from the durable todo board rather
|
|
13
|
+
* than parsed from model output. Grounded prompts go through the guard's
|
|
14
|
+
* steer-then-halt path: the first identical re-feed appends an explicit
|
|
15
|
+
* "the board has not moved — update it" note instead of halting, and the
|
|
16
|
+
* halt only fires if the board stays frozen after that steer.
|
|
17
|
+
*/
|
|
18
|
+
grounded?: boolean): Promise<boolean>;
|
|
19
|
+
//# sourceMappingURL=repl-auto-proceed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl-auto-proceed.d.ts","sourceRoot":"","sources":["../src/repl-auto-proceed.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAGlH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,oBAAoB;AAC/B;;;;;;GAMG;AACH,QAAQ,UAAQ,GACf,OAAO,CAAC,OAAO,CAAC,CAmGlB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ReplOptions } from './repl-options.js';
|
|
2
|
+
export interface ReplClientRegistration {
|
|
3
|
+
clientId: string;
|
|
4
|
+
close(): void;
|
|
5
|
+
}
|
|
6
|
+
export declare function registerReplClient(opts: ReplOptions): ReplClientRegistration;
|
|
7
|
+
//# sourceMappingURL=repl-client-registration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl-client-registration.d.ts","sourceRoot":"","sources":["../src/repl-client-registration.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,sBAAsB,CAoD5E"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ReplOptions } from './repl-options.js';
|
|
2
|
+
/**
|
|
3
|
+
* Read a line, but support two multiline patterns:
|
|
4
|
+
* 1. Trailing `\` → continue on the next line (shell-style line continuation).
|
|
5
|
+
* 2. A line that is exactly `"""` → start a heredoc; keep reading until
|
|
6
|
+
* another bare `"""`. Useful for pasting code snippets.
|
|
7
|
+
* Returns the assembled text and whether it came from a heredoc block (so
|
|
8
|
+
* the caller can decide to always collapse heredocs as pastes).
|
|
9
|
+
*/
|
|
10
|
+
export declare function readPossiblyMultiline(opts: ReplOptions): Promise<string>;
|
|
11
|
+
//# sourceMappingURL=repl-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl-input.d.ts","sourceRoot":"","sources":["../src/repl-input.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA4B9E"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { Agent } from '@wrongstack/core/agent';
|
|
2
|
+
import type { SlashCommandRegistry } from '@wrongstack/core/registry';
|
|
3
|
+
import type { AttachmentStore, TokenCounter } from '@wrongstack/core/types';
|
|
4
|
+
import type { VisionAdapters } from '@wrongstack/runtime';
|
|
5
|
+
import type { ReadlineInputReader } from './input-reader.js';
|
|
6
|
+
import type { TerminalRenderer } from './renderer.js';
|
|
7
|
+
export interface ReplOptions {
|
|
8
|
+
agent: Agent;
|
|
9
|
+
renderer: TerminalRenderer;
|
|
10
|
+
reader: ReadlineInputReader;
|
|
11
|
+
slashRegistry: SlashCommandRegistry;
|
|
12
|
+
attachments: AttachmentStore;
|
|
13
|
+
banner?: boolean | undefined;
|
|
14
|
+
tokenCounter?: TokenCounter | undefined;
|
|
15
|
+
visionAdapters?: VisionAdapters | undefined;
|
|
16
|
+
getAutonomy?: (() => import('./services/autonomy-mode.js').AutonomyMode) | undefined;
|
|
17
|
+
onAutonomy?: ((mode: import('./services/autonomy-mode.js').AutonomyMode) => void) | undefined;
|
|
18
|
+
getNextPredict?: (() => boolean) | undefined;
|
|
19
|
+
onSuggestionsParsed?: ((suggestions: string[] | null) => void) | undefined;
|
|
20
|
+
getSuggestions?: (() => string[]) | undefined;
|
|
21
|
+
getAutoSuggestions?: (() => string[]) | undefined;
|
|
22
|
+
getYolo?: (() => boolean) | undefined;
|
|
23
|
+
autonomyNextPrompt?: string | undefined;
|
|
24
|
+
autoProceedDelayMs?: number | undefined;
|
|
25
|
+
autoProceedMaxIterations?: number | undefined;
|
|
26
|
+
onValidateAutoProceed?: ((suggestion: string, lastOutput: string) => Promise<boolean>) | undefined;
|
|
27
|
+
getEternalEngine?: (() => import('@wrongstack/core/execution').EternalAutonomyEngine | null) | undefined;
|
|
28
|
+
getParallelEngine?: (() => import('@wrongstack/core/execution').ParallelEternalEngine | null) | undefined;
|
|
29
|
+
getSddRun?: (() => import('@wrongstack/sdd').SddRunControl | null) | undefined;
|
|
30
|
+
effectiveMaxContext?: number | undefined;
|
|
31
|
+
getEffectiveMaxContext?: (() => number | undefined) | undefined;
|
|
32
|
+
projectName?: string | undefined;
|
|
33
|
+
projectRoot?: string | undefined;
|
|
34
|
+
appConfig?: import('@wrongstack/core/types').Config | undefined;
|
|
35
|
+
getSessionId?: (() => string | undefined) | undefined;
|
|
36
|
+
supportsVision?: (() => boolean | Promise<boolean>) | undefined;
|
|
37
|
+
skillLoader?: import('@wrongstack/core/types').SkillLoader | undefined;
|
|
38
|
+
agentsMonitorController?: {
|
|
39
|
+
visible: boolean;
|
|
40
|
+
setVisible: (visible: boolean) => void;
|
|
41
|
+
} | undefined;
|
|
42
|
+
fleetStreamController?: {
|
|
43
|
+
mode: import('@wrongstack/core/types').FleetChatVerbosity;
|
|
44
|
+
setMode: (mode: import('@wrongstack/core/types').FleetChatVerbosity) => void;
|
|
45
|
+
} | undefined;
|
|
46
|
+
interruptController?: {
|
|
47
|
+
abortLeader: () => boolean;
|
|
48
|
+
} | undefined;
|
|
49
|
+
onInterruptFleet?: (() => number) | undefined;
|
|
50
|
+
onAgentIterationComplete?: ((estimatedTokens: number) => void) | undefined;
|
|
51
|
+
onCountdownTick?: ((remainingSeconds: number) => boolean | void) | undefined;
|
|
52
|
+
onDestroy?: (() => void) | undefined;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=repl-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl-options.d.ts","sourceRoot":"","sources":["../src/repl-options.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { TerminalRenderer } from './renderer.js';
|
|
2
|
+
export declare function renderContextChip(used: number, max: number): string;
|
|
3
|
+
export declare function printBanner(renderer: TerminalRenderer, projectName?: string): void;
|
|
4
|
+
//# sourceMappingURL=repl-rendering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl-rendering.d.ts","sourceRoot":"","sources":["../src/repl-rendering.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMtD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKnE;AASD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAUlF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { TodoItem } from '@wrongstack/core/agent';
|
|
2
|
+
/**
|
|
3
|
+
* Extract canonical "<nextsteps>" suggestions from the agent's final output.
|
|
4
|
+
* Loose "Next steps" prose is intentionally ignored; `/next` requires the tagged block.
|
|
5
|
+
* Returns null when no suggestions are found.
|
|
6
|
+
*
|
|
7
|
+
* Gated on the live todo list: when the agent still has open todos
|
|
8
|
+
* (`pending` or `in_progress`), we suppress `<nextsteps>` entirely and clear
|
|
9
|
+
* the auto-suggestion store. Surfacing suggestions mid-task would race the
|
|
10
|
+
* todo loop — YOLO+auto could pick the top suggestion and pivot away from
|
|
11
|
+
* the unfinished work, and `/next 1` would replace the next todo with an
|
|
12
|
+
* arbitrary prompt. Finishing the todo list comes first; suggestions re-arm
|
|
13
|
+
* on the next turn once everything is `completed`.
|
|
14
|
+
*/
|
|
15
|
+
export declare function parseSuggestionsFromOutput(finalText: string, todos?: readonly TodoItem[] | null): string[] | null;
|
|
16
|
+
/**
|
|
17
|
+
* Extract only the auto="true" items from next_steps output.
|
|
18
|
+
* Used by YOLO+auto autonomy mode.
|
|
19
|
+
*/
|
|
20
|
+
export declare function parseAutoSuggestionsFromOutput(finalText: string): string[] | null;
|
|
21
|
+
//# sourceMappingURL=repl-suggestions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl-suggestions.d.ts","sourceRoot":"","sources":["../src/repl-suggestions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAKvD;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,SAAS,QAAQ,EAAE,GAAG,IAAI,GACjC,MAAM,EAAE,GAAG,IAAI,CAYjB;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAGjF"}
|
package/dist/repl.d.ts
CHANGED
|
@@ -1,164 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { type VisionAdapters } from '@wrongstack/runtime';
|
|
5
|
-
import type { ReadlineInputReader } from './input-reader.js';
|
|
6
|
-
import type { TerminalRenderer } from './renderer.js';
|
|
7
|
-
/**
|
|
8
|
-
* Extract canonical "<nextsteps>" suggestions from the agent's final output.
|
|
9
|
-
* Loose "Next steps" prose is intentionally ignored; `/next` requires the tagged block.
|
|
10
|
-
* Returns null when no suggestions are found.
|
|
11
|
-
*
|
|
12
|
-
* Gated on the live todo list: when the agent still has open todos
|
|
13
|
-
* (`pending` or `in_progress`), we suppress `<nextsteps>` entirely and clear
|
|
14
|
-
* the auto-suggestion store. Surfacing suggestions mid-task would race the
|
|
15
|
-
* todo loop — YOLO+auto could pick the top suggestion and pivot away from
|
|
16
|
-
* the unfinished work, and `/next 1` would replace the next todo with an
|
|
17
|
-
* arbitrary prompt. Finishing the todo list comes first; suggestions re-arm
|
|
18
|
-
* on the next turn once everything is `completed`.
|
|
19
|
-
*/
|
|
20
|
-
export declare function parseSuggestionsFromOutput(finalText: string, todos?: readonly TodoItem[] | null): string[] | null;
|
|
21
|
-
/**
|
|
22
|
-
* Extract only the auto="true" items from next_steps output.
|
|
23
|
-
* Used by YOLO+auto autonomy mode.
|
|
24
|
-
*/
|
|
25
|
-
export declare function parseAutoSuggestionsFromOutput(finalText: string): string[] | null;
|
|
26
|
-
export interface ReplOptions {
|
|
27
|
-
agent: Agent;
|
|
28
|
-
renderer: TerminalRenderer;
|
|
29
|
-
reader: ReadlineInputReader;
|
|
30
|
-
slashRegistry: SlashCommandRegistry;
|
|
31
|
-
attachments: AttachmentStore;
|
|
32
|
-
banner?: boolean | undefined;
|
|
33
|
-
tokenCounter?: TokenCounter | undefined;
|
|
34
|
-
visionAdapters?: VisionAdapters | undefined;
|
|
35
|
-
/** Autonomy mode state getter. */
|
|
36
|
-
getAutonomy?: (() => import('./services/autonomy-mode.js').AutonomyMode) | undefined;
|
|
37
|
-
/** Set autonomy mode (used by SIGINT handler to flip back to 'off'). */
|
|
38
|
-
onAutonomy?: ((mode: import('./services/autonomy-mode.js').AutonomyMode) => void) | undefined;
|
|
39
|
-
/**
|
|
40
|
-
* Whether next-task prediction is enabled. When true, the REPL runs a
|
|
41
|
-
* lightweight single-shot prediction after each completed turn and shows
|
|
42
|
-
* the likely next steps (display-only). Toggled via `/next`.
|
|
43
|
-
*/
|
|
44
|
-
getNextPredict?: (() => boolean) | undefined;
|
|
45
|
-
/**
|
|
46
|
-
* Called after each agent turn with parsed "💡 Next steps" suggestions
|
|
47
|
-
* extracted from the final response text. The host stores these so
|
|
48
|
-
* `/next 1`, `/next 1 2 3` can select and execute them.
|
|
49
|
-
* Passed `null` when no suggestions were found in the output.
|
|
50
|
-
*/
|
|
51
|
-
onSuggestionsParsed?: ((suggestions: string[] | null) => void) | undefined;
|
|
52
|
-
/**
|
|
53
|
-
* Read the current suggestion list. Used by the auto-proceed loop to
|
|
54
|
-
* check whether there are suggestions to feed when autonomy is 'auto'.
|
|
55
|
-
*/
|
|
56
|
-
getSuggestions?: (() => string[]) | undefined;
|
|
57
|
-
/**
|
|
58
|
-
* Read the current auto suggestion list (items with auto="true" attribute).
|
|
59
|
-
* Used by YOLO+auto autonomy mode.
|
|
60
|
-
*/
|
|
61
|
-
getAutoSuggestions?: (() => string[]) | undefined;
|
|
62
|
-
/**
|
|
63
|
-
* YOLO mode getter. When true, auto="true" suggestions trigger auto-proceed.
|
|
64
|
-
*/
|
|
65
|
-
getYolo?: (() => boolean) | undefined;
|
|
66
|
-
/**
|
|
67
|
-
* Autonomy next prompt template. Used to construct the prompt when auto-submitting
|
|
68
|
-
* a next_steps item in YOLO+auto mode. Contains {{suggestion}} placeholder.
|
|
69
|
-
*/
|
|
70
|
-
autonomyNextPrompt?: string | undefined;
|
|
71
|
-
/**
|
|
72
|
-
* Delay in milliseconds before auto-proceeding with the top suggestion
|
|
73
|
-
* when autonomy mode is 'auto'. Default 45 seconds.
|
|
74
|
-
*/
|
|
75
|
-
autoProceedDelayMs?: number | undefined;
|
|
76
|
-
/**
|
|
77
|
-
* Maximum auto-proceed iterations before stopping to prevent infinite
|
|
78
|
-
* loops. Default 50. 0 means unlimited.
|
|
79
|
-
*/
|
|
80
|
-
autoProceedMaxIterations?: number | undefined;
|
|
81
|
-
/**
|
|
82
|
-
* LLM validation gate called before starting the auto-proceed countdown.
|
|
83
|
-
* Receives the top suggestion and the last agent output text. Should
|
|
84
|
-
* return `true` if auto-proceeding is safe, `false` if user review is
|
|
85
|
-
* needed. The countdown only starts when this returns `true`.
|
|
86
|
-
*/
|
|
87
|
-
onValidateAutoProceed?: ((suggestion: string, lastOutput: string) => Promise<boolean>) | undefined;
|
|
88
|
-
/**
|
|
89
|
-
* Access the eternal-autonomy engine. When autonomy mode is 'eternal'
|
|
90
|
-
* the REPL skips reading user input and instead drives engine
|
|
91
|
-
* iterations from this loop — so the engine and the REPL never compete
|
|
92
|
-
* for the shared Context. Returns null until /autonomy eternal primes it.
|
|
93
|
-
*/
|
|
94
|
-
getEternalEngine?: (() => import('@wrongstack/core/execution').EternalAutonomyEngine | null) | undefined;
|
|
95
|
-
/**
|
|
96
|
-
* Access the parallel-eternal engine. When autonomy mode is 'eternal-parallel'
|
|
97
|
-
* the REPL drives this engine instead of reading user input.
|
|
98
|
-
* Returns null until /autonomy parallel primes it.
|
|
99
|
-
*/
|
|
100
|
-
getParallelEngine?: (() => import('@wrongstack/core/execution').ParallelEternalEngine | null) | undefined;
|
|
101
|
-
/**
|
|
102
|
-
* Access the active SDD parallel run's control surface (or null). A running
|
|
103
|
-
* `/sdd parallel` blocks the prompt while it awaits completion, so this is the
|
|
104
|
-
* only mid-run stop path from the REPL — the SIGINT handler calls `stop()`.
|
|
105
|
-
*/
|
|
106
|
-
getSddRun?: (() => import('@wrongstack/sdd').SddRunControl | null) | undefined;
|
|
107
|
-
/** Model-specific max context window (tokens). Used for the context bar in turn summaries. */
|
|
108
|
-
effectiveMaxContext?: number | undefined;
|
|
109
|
-
/** Live model-specific max context window. Prefer this over the startup snapshot when provided. */
|
|
110
|
-
getEffectiveMaxContext?: (() => number | undefined) | undefined;
|
|
111
|
-
/** Project / folder name shown in the banner. Usually `path.basename(projectRoot)`. */
|
|
112
|
-
projectName?: string | undefined;
|
|
113
|
-
/** Absolute project root — used to locate .wrongstack/goal.json for the goal banner. */
|
|
114
|
-
projectRoot?: string | undefined;
|
|
115
|
-
/** Full app config, used for HQ client publishing settings. */
|
|
116
|
-
appConfig?: import('@wrongstack/core/types').Config | undefined;
|
|
117
|
-
/** Live active session id for cross-surface client registration. */
|
|
118
|
-
getSessionId?: (() => string | undefined) | undefined;
|
|
119
|
-
/** Resolve current model vision support. Falls back to provider capability when omitted. */
|
|
120
|
-
supportsVision?: (() => boolean | Promise<boolean>) | undefined;
|
|
121
|
-
/** Skill loader for the skill generator wizard. */
|
|
122
|
-
skillLoader?: import('@wrongstack/core/types').SkillLoader | undefined;
|
|
123
|
-
/** Controller for the agents monitor overlay. */
|
|
124
|
-
agentsMonitorController?: {
|
|
125
|
-
visible: boolean;
|
|
126
|
-
setVisible: (visible: boolean) => void;
|
|
127
|
-
} | undefined;
|
|
128
|
-
/** Controller for fleet stream (subagent output to history). */
|
|
129
|
-
fleetStreamController?: {
|
|
130
|
-
mode: import('@wrongstack/core/types').FleetChatVerbosity;
|
|
131
|
-
setMode: (mode: import('@wrongstack/core/types').FleetChatVerbosity) => void;
|
|
132
|
-
} | undefined;
|
|
133
|
-
/**
|
|
134
|
-
* Shared controller for the `/interrupt` slash command. The REPL installs
|
|
135
|
-
* `abortLeader` here so the command can abort the active turn. Note: the REPL
|
|
136
|
-
* prompt is blocked during a run, so `/interrupt` is only dispatched at the
|
|
137
|
-
* prompt (where nothing is in flight) — Ctrl+C is the mid-run path.
|
|
138
|
-
*/
|
|
139
|
-
interruptController?: {
|
|
140
|
-
abortLeader: () => boolean;
|
|
141
|
-
} | undefined;
|
|
142
|
-
/**
|
|
143
|
-
* Stop every running subagent. Wired to the director so the first Ctrl+C (and
|
|
144
|
-
* `/interrupt`) stops the fleet too, not just the leader. Returns the count
|
|
145
|
-
* stopped. Undefined when no fleet/director is active.
|
|
146
|
-
*/
|
|
147
|
-
onInterruptFleet?: (() => number) | undefined;
|
|
148
|
-
/**
|
|
149
|
-
* Called after each agent.run() iteration completes so the host can
|
|
150
|
-
* report context pressure to the Director (for spawn pre-checks) or
|
|
151
|
-
* other systems that track token usage across the session.
|
|
152
|
-
*/
|
|
153
|
-
onAgentIterationComplete?: ((estimatedTokens: number) => void) | undefined;
|
|
154
|
-
/**
|
|
155
|
-
* Called every second during the auto-proceed countdown with the
|
|
156
|
-
* remaining seconds until auto-proceed fires. Return true to abort
|
|
157
|
-
* the countdown and switch to manual mode.
|
|
158
|
-
*/
|
|
159
|
-
onCountdownTick?: ((remainingSeconds: number) => boolean | void) | undefined;
|
|
160
|
-
/** Called when the REPL exits — use for cleanup such as removing event listeners. */
|
|
161
|
-
onDestroy?: (() => void) | undefined;
|
|
162
|
-
}
|
|
1
|
+
import type { ReplOptions } from './repl-options.js';
|
|
2
|
+
export { parseSuggestionsFromOutput, parseAutoSuggestionsFromOutput } from './repl-suggestions.js';
|
|
3
|
+
export type { ReplOptions } from './repl-options.js';
|
|
163
4
|
export declare function runRepl(opts: ReplOptions): Promise<number>;
|
|
164
5
|
//# sourceMappingURL=repl.d.ts.map
|
package/dist/repl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMrD,OAAO,EAAE,0BAA0B,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AACnG,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAi0BhE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import "./chunk-7OCVIDC7.js";
|
|
2
|
+
|
|
3
|
+
// src/subcommands/handlers/replay.ts
|
|
4
|
+
import { color, resolveWstackPaths } from "@wrongstack/core/utils";
|
|
5
|
+
import { ReplayLogStore } from "@wrongstack/core/storage";
|
|
6
|
+
var replayCmd = async (args, deps) => {
|
|
7
|
+
const wpaths = resolveWstackPaths({
|
|
8
|
+
projectRoot: deps.projectRoot,
|
|
9
|
+
userHome: deps.userHome
|
|
10
|
+
});
|
|
11
|
+
const store = new ReplayLogStore({ dir: wpaths.projectSessions });
|
|
12
|
+
if (args[0] === "--list" || args[0] === "-l") {
|
|
13
|
+
const all = await store.list();
|
|
14
|
+
if (all.length === 0) {
|
|
15
|
+
deps.renderer.write(
|
|
16
|
+
color.dim("No replay logs recorded yet. Run with --record to start one.") + "\n"
|
|
17
|
+
);
|
|
18
|
+
return 0;
|
|
19
|
+
}
|
|
20
|
+
const lines2 = [
|
|
21
|
+
color.bold(`${all.length} replay log(s)`),
|
|
22
|
+
color.dim(" Sorted by session id. Each entry has at least one recorded request/response."),
|
|
23
|
+
""
|
|
24
|
+
];
|
|
25
|
+
for (const r of all) {
|
|
26
|
+
lines2.push(
|
|
27
|
+
` ${color.cyan(r.sessionId)} ${color.dim(`${r.entryCount} entries`)} ${color.dim(r.path)}`
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
lines2.push("");
|
|
31
|
+
lines2.push(color.dim(" Inspect: wstack replay <sessionId>"));
|
|
32
|
+
lines2.push(color.dim(" Replay: wstack --replay <sessionId>"));
|
|
33
|
+
deps.renderer.write(lines2.join("\n") + "\n");
|
|
34
|
+
return 0;
|
|
35
|
+
}
|
|
36
|
+
const sessionId = args[0];
|
|
37
|
+
if (!sessionId) {
|
|
38
|
+
deps.renderer.writeError(
|
|
39
|
+
"Usage: wstack replay <sessionId>\n wstack replay --list\n\nLists recorded provider responses for the session. To actually\nre-run the agent with frozen responses, use:\n wstack --replay " + color.cyan("<sessionId>") + "\n wstack --record # start a fresh recording\n"
|
|
40
|
+
);
|
|
41
|
+
return 1;
|
|
42
|
+
}
|
|
43
|
+
const entries = await store.load(sessionId);
|
|
44
|
+
if (entries.length === 0) {
|
|
45
|
+
deps.renderer.write(
|
|
46
|
+
color.yellow(
|
|
47
|
+
`No replay entries recorded for session ${sessionId}.
|
|
48
|
+
Run a session with --record first, then --replay to re-execute it.`
|
|
49
|
+
) + "\n"
|
|
50
|
+
);
|
|
51
|
+
return 0;
|
|
52
|
+
}
|
|
53
|
+
const lines = [
|
|
54
|
+
color.bold(`Replay log for ${sessionId}`),
|
|
55
|
+
` ${entries.length} recorded request/response pair(s)`,
|
|
56
|
+
` Log file: ${color.dim(`${sessionId}.replay.jsonl`)}`,
|
|
57
|
+
"",
|
|
58
|
+
"To replay this session deterministically:",
|
|
59
|
+
` ${color.cyan(`wstack --replay ${sessionId}`)}`,
|
|
60
|
+
"",
|
|
61
|
+
"Recorded timestamps (oldest first):"
|
|
62
|
+
];
|
|
63
|
+
for (const e of entries.slice(-10)) {
|
|
64
|
+
lines.push(` ${color.dim(e.ts.slice(11, 19))} ${e.hash.slice(0, 16)}\u2026 ${e.request.model}`);
|
|
65
|
+
}
|
|
66
|
+
if (entries.length > 10) {
|
|
67
|
+
lines.push(color.dim(` \u2026 and ${entries.length - 10} more`));
|
|
68
|
+
}
|
|
69
|
+
deps.renderer.write(lines.join("\n") + "\n");
|
|
70
|
+
return 0;
|
|
71
|
+
};
|
|
72
|
+
export {
|
|
73
|
+
replayCmd
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=replay-KCTXNMZQ.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/subcommands/handlers/replay.ts"],
|
|
4
|
+
"sourcesContent": ["import { color, resolveWstackPaths } from '@wrongstack/core/utils';\nimport { ReplayLogStore } from '@wrongstack/core/storage';\nimport type { SubcommandHandler } from '../index.js';\n\n/**\n * `wstack replay <sessionId>` \u2014 convenience wrapper around\n * `wstack --replay <sessionId>`. Lists the recorded entries for\n * the session and shows a hint for the user to re-run with\n * the actual replay flag. Keeps the flag-based path canonical\n * (so the boot container wiring stays simple) while exposing\n * a discoverable subcommand for users who type `wstack replay`\n * expecting it to exist.\n */\nexport const replayCmd: SubcommandHandler = async (args, deps) => {\n const wpaths = resolveWstackPaths({\n projectRoot: deps.projectRoot,\n userHome: deps.userHome,\n });\n const store = new ReplayLogStore({ dir: wpaths.projectSessions });\n\n // `wstack replay --list` \u2014 show every session that has a replay log.\n if (args[0] === '--list' || args[0] === '-l') {\n const all = await store.list();\n if (all.length === 0) {\n deps.renderer.write(\n color.dim('No replay logs recorded yet. Run with --record to start one.') + '\\n',\n );\n return 0;\n }\n const lines: string[] = [\n color.bold(`${all.length} replay log(s)`),\n color.dim(' Sorted by session id. Each entry has at least one recorded request/response.'),\n '',\n ];\n for (const r of all) {\n lines.push(\n ` ${color.cyan(r.sessionId)} ${color.dim(`${r.entryCount} entries`)} ${color.dim(r.path)}`,\n );\n }\n lines.push('');\n lines.push(color.dim(' Inspect: wstack replay <sessionId>'));\n lines.push(color.dim(' Replay: wstack --replay <sessionId>'));\n deps.renderer.write(lines.join('\\n') + '\\n');\n return 0;\n }\n\n const sessionId = args[0];\n if (!sessionId) {\n deps.renderer.writeError(\n 'Usage: wstack replay <sessionId>\\n' +\n ' wstack replay --list\\n\\n' +\n 'Lists recorded provider responses for the session. To actually\\n' +\n 're-run the agent with frozen responses, use:\\n' +\n ' wstack --replay ' +\n color.cyan('<sessionId>') +\n '\\n' +\n ' wstack --record # start a fresh recording\\n',\n );\n return 1;\n }\n const entries = await store.load(sessionId);\n if (entries.length === 0) {\n deps.renderer.write(\n color.yellow(\n `No replay entries recorded for session ${sessionId}.\\n` +\n `Run a session with --record first, then --replay to re-execute it.`,\n ) + '\\n',\n );\n return 0;\n }\n const lines: string[] = [\n color.bold(`Replay log for ${sessionId}`),\n ` ${entries.length} recorded request/response pair(s)`,\n ` Log file: ${color.dim(`${sessionId}.replay.jsonl`)}`,\n '',\n 'To replay this session deterministically:',\n ` ${color.cyan(`wstack --replay ${sessionId}`)}`,\n '',\n 'Recorded timestamps (oldest first):',\n ];\n for (const e of entries.slice(-10)) {\n lines.push(` ${color.dim(e.ts.slice(11, 19))} ${e.hash.slice(0, 16)}\u2026 ${e.request.model}`);\n }\n if (entries.length > 10) {\n lines.push(color.dim(` \u2026 and ${entries.length - 10} more`));\n }\n deps.renderer.write(lines.join('\\n') + '\\n');\n return 0;\n};\n"],
|
|
5
|
+
"mappings": ";;;;AAAA,SAAS,OAAO,0BAA0B;AAC1C,SAAS,sBAAsB;AAYxB,IAAM,YAA+B,OAAO,MAAM,SAAS;AAChE,QAAM,SAAS,mBAAmB;AAAA,IAChC,aAAa,KAAK;AAAA,IAClB,UAAU,KAAK;AAAA,EACjB,CAAC;AACD,QAAM,QAAQ,IAAI,eAAe,EAAE,KAAK,OAAO,gBAAgB,CAAC;AAGhE,MAAI,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,MAAM,MAAM;AAC5C,UAAM,MAAM,MAAM,MAAM,KAAK;AAC7B,QAAI,IAAI,WAAW,GAAG;AACpB,WAAK,SAAS;AAAA,QACZ,MAAM,IAAI,8DAA8D,IAAI;AAAA,MAC9E;AACA,aAAO;AAAA,IACT;AACA,UAAMA,SAAkB;AAAA,MACtB,MAAM,KAAK,GAAG,IAAI,MAAM,gBAAgB;AAAA,MACxC,MAAM,IAAI,gFAAgF;AAAA,MAC1F;AAAA,IACF;AACA,eAAW,KAAK,KAAK;AACnB,MAAAA,OAAM;AAAA,QACJ,KAAK,MAAM,KAAK,EAAE,SAAS,CAAC,KAAK,MAAM,IAAI,GAAG,EAAE,UAAU,UAAU,CAAC,KAAK,MAAM,IAAI,EAAE,IAAI,CAAC;AAAA,MAC7F;AAAA,IACF;AACA,IAAAA,OAAM,KAAK,EAAE;AACb,IAAAA,OAAM,KAAK,MAAM,IAAI,uCAAuC,CAAC;AAC7D,IAAAA,OAAM,KAAK,MAAM,IAAI,yCAAyC,CAAC;AAC/D,SAAK,SAAS,MAAMA,OAAM,KAAK,IAAI,IAAI,IAAI;AAC3C,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,KAAK,CAAC;AACxB,MAAI,CAAC,WAAW;AACd,SAAK,SAAS;AAAA,MACZ,sMAKE,MAAM,KAAK,aAAa,IACxB;AAAA,IAEJ;AACA,WAAO;AAAA,EACT;AACA,QAAM,UAAU,MAAM,MAAM,KAAK,SAAS;AAC1C,MAAI,QAAQ,WAAW,GAAG;AACxB,SAAK,SAAS;AAAA,MACZ,MAAM;AAAA,QACJ,0CAA0C,SAAS;AAAA;AAAA,MAErD,IAAI;AAAA,IACN;AACA,WAAO;AAAA,EACT;AACA,QAAM,QAAkB;AAAA,IACtB,MAAM,KAAK,kBAAkB,SAAS,EAAE;AAAA,IACxC,KAAK,QAAQ,MAAM;AAAA,IACnB,eAAe,MAAM,IAAI,GAAG,SAAS,eAAe,CAAC;AAAA,IACrD;AAAA,IACA;AAAA,IACA,KAAK,MAAM,KAAK,mBAAmB,SAAS,EAAE,CAAC;AAAA,IAC/C;AAAA,IACA;AAAA,EACF;AACA,aAAW,KAAK,QAAQ,MAAM,GAAG,GAAG;AAClC,UAAM,KAAK,KAAK,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,MAAM,GAAG,EAAE,CAAC,WAAM,EAAE,QAAQ,KAAK,EAAE;AAAA,EAC9F;AACA,MAAI,QAAQ,SAAS,IAAI;AACvB,UAAM,KAAK,MAAM,IAAI,gBAAW,QAAQ,SAAS,EAAE,OAAO,CAAC;AAAA,EAC7D;AACA,OAAK,SAAS,MAAM,MAAM,KAAK,IAAI,IAAI,IAAI;AAC3C,SAAO;AACT;",
|
|
6
|
+
"names": ["lines"]
|
|
7
|
+
}
|