@wrongstack/cli 0.297.0 → 0.298.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{acp-A5OSIU2P.js → acp-S4LZQB66.js} +91 -23
- package/dist/{auth-CJWQJVRH.js → auth-NLLGEYQR.js} +3 -3
- package/dist/boot/governance-evidence-candidate.d.ts +3 -0
- package/dist/boot/governance-shadow-bridge.d.ts +19 -0
- package/dist/boot/governance-trace-context.d.ts +64 -0
- package/dist/boot/tui-session-resume.d.ts +10 -1
- package/dist/chimera-leader-wake.d.ts +57 -0
- package/dist/chimera-reviewer-policy.d.ts +89 -1
- package/dist/chimera-subagent-ladder.d.ts +72 -0
- package/dist/{chunk-AZESNNIC.js → chunk-4HH3YGG4.js} +3 -3
- package/dist/{chunk-IHBYBYGA.js → chunk-A6Q5KGLV.js} +51 -18
- package/dist/{chunk-ABXK4VVY.js → chunk-ARWGQUB3.js} +2 -1
- package/dist/{chunk-7JABKXET.js → chunk-C5GH4YBL.js} +1018 -175
- package/dist/{chunk-TADVX644.js → chunk-GO3TJICK.js} +11 -2
- package/dist/{chunk-JBTFWWKV.js → chunk-I2BM6FK6.js} +9 -4
- package/dist/{chunk-AXVZMEWG.js → chunk-I5MEUFDI.js} +2 -2
- package/dist/chunk-U3SS4NRH.js +10 -0
- package/dist/{chunk-QZKWRNIP.js → chunk-V3XH6XBJ.js} +12 -9
- package/dist/{cli-main-GOY5YGVL.js → cli-main-TJEU4OUY.js} +954 -268
- package/dist/cli-main-helpers.d.ts +42 -2
- package/dist/{execution-A4PGK4XV.js → execution-INOV5P7N.js} +1236 -652
- package/dist/execution-chimera-cascade.d.ts +7 -1
- package/dist/execution-chimera-review.d.ts +35 -0
- package/dist/fleet/host-types.d.ts +6 -1
- package/dist/fleet-statusline.d.ts +1 -0
- package/dist/governance-V2Z42RBE.js +65 -0
- package/dist/governance-hq-telemetry.d.ts +17 -0
- package/dist/{hq-GBPGXIR5.js → hq-WO6CLUSI.js} +2 -2
- package/dist/hq-server/auth.d.ts +33 -2
- package/dist/hq-server/login-attempt-store.d.ts +73 -0
- package/dist/hq-server/routes/auth-handlers.d.ts +73 -5
- package/dist/hq-server/routes.d.ts +5 -5
- package/dist/hq-server/types.d.ts +36 -2
- package/dist/hq-server/utils.d.ts +51 -6
- package/dist/{hq-server-YQUUMTPU.js → hq-server-6TSAORAC.js} +2 -2
- package/dist/hq-server.d.ts +10 -0
- package/dist/index.js +49 -21
- package/dist/live-settings-input.d.ts +1 -1
- package/dist/settings-menu.d.ts +1 -1
- package/dist/slash-commands/fallback.d.ts +2 -0
- package/dist/slash-commands/goal-refiner.d.ts +1 -1
- package/dist/subcommands/handlers/acp-connection-gate.d.ts +20 -0
- package/dist/subcommands/handlers/governance.d.ts +8 -0
- package/dist/{update-YC4TYW2Y.js → update-MV6TUACD.js} +3 -3
- package/dist/utils/win32-cmd.d.ts +9 -6
- package/dist/{version-help-DROHZRW6.js → version-help-ASKQYXDJ.js} +2 -2
- package/dist/{webui-server-XKFUOKMJ.js → webui-server-PCLSXX6L.js} +10 -3
- package/dist/wiring/brain-and-orchestration.d.ts +2 -0
- package/dist/wiring/provider-runtime-setup.d.ts +2 -2
- package/package.json +23 -22
- package/dist/acp-A5OSIU2P.js.map +0 -7
- package/dist/acp-registry-cache.d.ts.map +0 -1
- package/dist/acp-server-agent.d.ts.map +0 -1
- package/dist/arg-parser.d.ts.map +0 -1
- package/dist/audit-2ZSFGNIF.js.map +0 -7
- package/dist/auth-CJWQJVRH.js.map +0 -7
- package/dist/auth-menu/add-provider.d.ts.map +0 -1
- package/dist/auth-menu/anthropic-oauth.d.ts.map +0 -1
- package/dist/auth-menu/auth-menu-audit.d.ts.map +0 -1
- package/dist/auth-menu/direct.d.ts.map +0 -1
- package/dist/auth-menu/github-copilot-oauth.d.ts.map +0 -1
- package/dist/auth-menu/helpers.d.ts.map +0 -1
- package/dist/auth-menu/index.d.ts.map +0 -1
- package/dist/auth-menu/local-presets.d.ts.map +0 -1
- package/dist/auth-menu/local.d.ts.map +0 -1
- package/dist/auth-menu/loopback-server.d.ts.map +0 -1
- package/dist/auth-menu/oauth-menu.d.ts.map +0 -1
- package/dist/auth-menu/openai-codex-oauth.d.ts.map +0 -1
- package/dist/auth-menu/panel-service.d.ts.map +0 -1
- package/dist/auth-menu/provider-menu.d.ts.map +0 -1
- package/dist/auth-menu/shared.d.ts.map +0 -1
- package/dist/auth-menu/top-menu.d.ts.map +0 -1
- package/dist/auth-menu/types.d.ts.map +0 -1
- package/dist/auth-menu.d.ts.map +0 -1
- package/dist/bench-7ZDWSNEF.js.map +0 -7
- package/dist/boot/auto-discover-providers.d.ts.map +0 -1
- package/dist/boot/brain-decision-log.d.ts.map +0 -1
- package/dist/boot/config-backup-recovery.d.ts.map +0 -1
- package/dist/boot/container-wiring.d.ts.map +0 -1
- package/dist/boot/dispatch-singleshot.d.ts.map +0 -1
- package/dist/boot/dispatch-tui.d.ts.map +0 -1
- package/dist/boot/dispatch-webui.d.ts.map +0 -1
- package/dist/boot/event-wiring.d.ts.map +0 -1
- package/dist/boot/execution-mode.d.ts.map +0 -1
- package/dist/boot/launch-banner.d.ts.map +0 -1
- package/dist/boot/launch-menu.d.ts.map +0 -1
- package/dist/boot/short-circuit-desktop.d.ts.map +0 -1
- package/dist/boot/short-circuit-flags.d.ts.map +0 -1
- package/dist/boot/short-circuit-hq.d.ts.map +0 -1
- package/dist/boot/simpleui-full-auto.d.ts.map +0 -1
- package/dist/boot/system-prompt-builder.d.ts.map +0 -1
- package/dist/boot/system-prompt.d.ts.map +0 -1
- package/dist/boot/tool-registry.d.ts.map +0 -1
- package/dist/boot/tui-coordinator-callbacks.d.ts.map +0 -1
- package/dist/boot/tui-coordinator-setup.d.ts.map +0 -1
- package/dist/boot/tui-debug-stream.d.ts.map +0 -1
- package/dist/boot/tui-goal-wiring.d.ts.map +0 -1
- package/dist/boot/tui-live-sessions.d.ts.map +0 -1
- package/dist/boot/tui-project-picker-callback.d.ts.map +0 -1
- package/dist/boot/tui-project-spawn.d.ts.map +0 -1
- package/dist/boot/tui-project-switch.d.ts.map +0 -1
- package/dist/boot/tui-runtime-state.d.ts.map +0 -1
- package/dist/boot/tui-sdd-callback.d.ts.map +0 -1
- package/dist/boot/tui-session-resume.d.ts.map +0 -1
- package/dist/boot/tui-settings-adapter.d.ts.map +0 -1
- package/dist/boot-config.d.ts.map +0 -1
- package/dist/boot.d.ts.map +0 -1
- package/dist/brain-menu/panel-service.d.ts.map +0 -1
- package/dist/chimera-review-task.d.ts.map +0 -1
- package/dist/chimera-reviewer-policy.d.ts.map +0 -1
- package/dist/chronicle-QQEQFSSE.js.map +0 -7
- package/dist/chunk-5N34EWJR.js.map +0 -7
- package/dist/chunk-66T43Q4Y.js.map +0 -7
- package/dist/chunk-7JABKXET.js.map +0 -7
- package/dist/chunk-7OCVIDC7.js.map +0 -7
- package/dist/chunk-ABXK4VVY.js.map +0 -7
- package/dist/chunk-AXVZMEWG.js.map +0 -7
- package/dist/chunk-AZESNNIC.js.map +0 -7
- package/dist/chunk-BGFM3PD7.js.map +0 -7
- package/dist/chunk-DPJZQCVP.js.map +0 -7
- package/dist/chunk-F4PEGAJZ.js.map +0 -7
- package/dist/chunk-IHBYBYGA.js.map +0 -7
- package/dist/chunk-JBSQ7ONN.js.map +0 -7
- package/dist/chunk-JBTFWWKV.js.map +0 -7
- package/dist/chunk-JUHRI6OV.js.map +0 -7
- package/dist/chunk-JW75HY4F.js.map +0 -7
- package/dist/chunk-OP47B3IX.js.map +0 -7
- package/dist/chunk-PJHET45A.js.map +0 -7
- package/dist/chunk-Q5GTM25S.js.map +0 -7
- package/dist/chunk-QD544J2B.js.map +0 -7
- package/dist/chunk-QUNHS6O3.js.map +0 -7
- package/dist/chunk-QZKWRNIP.js.map +0 -7
- package/dist/chunk-TADVX644.js.map +0 -7
- package/dist/chunk-TGDHN4LM.js.map +0 -7
- package/dist/chunk-TYO2OVAD.js.map +0 -7
- package/dist/chunk-VCYZ3WZV.js.map +0 -7
- package/dist/chunk-VJUEZZYB.js +0 -29
- package/dist/chunk-VJUEZZYB.js.map +0 -7
- package/dist/chunk-WHOIR577.js.map +0 -7
- package/dist/chunk-XJXDOF63.js.map +0 -7
- package/dist/chunk-XTIXVJXP.js.map +0 -7
- package/dist/chunk-XWEGWYDU.js.map +0 -7
- package/dist/chunk-YWUPHRGB.js.map +0 -7
- package/dist/cli-bundled-prompts.d.ts.map +0 -1
- package/dist/cli-bundled-skills.d.ts.map +0 -1
- package/dist/cli-context.d.ts.map +0 -1
- package/dist/cli-entry-main.d.ts.map +0 -1
- package/dist/cli-entry-point.d.ts.map +0 -1
- package/dist/cli-eternal-flag.d.ts.map +0 -1
- package/dist/cli-main-GOY5YGVL.js.map +0 -7
- package/dist/cli-main-helpers.d.ts.map +0 -1
- package/dist/cli-main.d.ts.map +0 -1
- package/dist/cli-update-notice.d.ts.map +0 -1
- package/dist/config-doctor.d.ts.map +0 -1
- package/dist/config-history.d.ts.map +0 -1
- package/dist/context-limit.d.ts.map +0 -1
- package/dist/context-overflow-diagnostic.d.ts.map +0 -1
- package/dist/diag-doctor-OQ3AA63O.js.map +0 -7
- package/dist/diff-renderer.d.ts.map +0 -1
- package/dist/execute-deps.d.ts.map +0 -1
- package/dist/execution-A4PGK4XV.js.map +0 -7
- package/dist/execution-chimera-ask.d.ts.map +0 -1
- package/dist/execution-chimera-cascade.d.ts.map +0 -1
- package/dist/execution-cleanup.d.ts.map +0 -1
- package/dist/execution-kanban-dispatch.d.ts.map +0 -1
- package/dist/execution-repl-fleet-callbacks.d.ts.map +0 -1
- package/dist/execution-storage-observability.d.ts.map +0 -1
- package/dist/execution-tui-next-step-callbacks.d.ts.map +0 -1
- package/dist/execution.d.ts.map +0 -1
- package/dist/export-TPORYVRZ.js.map +0 -7
- package/dist/fleet/host-acp-runner-cache.d.ts.map +0 -1
- package/dist/fleet/host-acp.d.ts.map +0 -1
- package/dist/fleet/host-concurrency.d.ts.map +0 -1
- package/dist/fleet/host-context.d.ts.map +0 -1
- package/dist/fleet/host-director-builder.d.ts.map +0 -1
- package/dist/fleet/host-director-event-bridges.d.ts.map +0 -1
- package/dist/fleet/host-director-services.d.ts.map +0 -1
- package/dist/fleet/host-event-bridge.d.ts.map +0 -1
- package/dist/fleet/host-helpers.d.ts.map +0 -1
- package/dist/fleet/host-learning-tracker.d.ts.map +0 -1
- package/dist/fleet/host-learning.d.ts.map +0 -1
- package/dist/fleet/host-lifecycle-events.d.ts.map +0 -1
- package/dist/fleet/host-paths.d.ts.map +0 -1
- package/dist/fleet/host-provider.d.ts.map +0 -1
- package/dist/fleet/host-session-writer.d.ts.map +0 -1
- package/dist/fleet/host-shadow-pass.d.ts.map +0 -1
- package/dist/fleet/host-spawn-types.d.ts.map +0 -1
- package/dist/fleet/host-status.d.ts.map +0 -1
- package/dist/fleet/host-subagent-factory.d.ts.map +0 -1
- package/dist/fleet/host-supervisor.d.ts.map +0 -1
- package/dist/fleet/host-task-result-report.d.ts.map +0 -1
- package/dist/fleet/host-types.d.ts.map +0 -1
- package/dist/fleet/host.d.ts.map +0 -1
- package/dist/fleet/routing.d.ts.map +0 -1
- package/dist/fleet/status-broadcast.d.ts.map +0 -1
- package/dist/fleet/supervisor-registry.d.ts.map +0 -1
- package/dist/fleet-statusline.d.ts.map +0 -1
- package/dist/goal-host.d.ts.map +0 -1
- package/dist/hooks-wiring.d.ts.map +0 -1
- package/dist/hq-GBPGXIR5.js.map +0 -7
- package/dist/hq-command-controller.d.ts.map +0 -1
- package/dist/hq-publisher.d.ts.map +0 -1
- package/dist/hq-recovery-html.d.ts.map +0 -1
- package/dist/hq-server/audit-actor.d.ts.map +0 -1
- package/dist/hq-server/auth-state.d.ts.map +0 -1
- package/dist/hq-server/auth.d.ts.map +0 -1
- package/dist/hq-server/preflight.d.ts.map +0 -1
- package/dist/hq-server/project-root.d.ts.map +0 -1
- package/dist/hq-server/routes/auth-handlers.d.ts.map +0 -1
- package/dist/hq-server/routes/session-handlers.d.ts.map +0 -1
- package/dist/hq-server/routes/system-handlers.d.ts.map +0 -1
- package/dist/hq-server/routes.d.ts.map +0 -1
- package/dist/hq-server/snapshot.d.ts.map +0 -1
- package/dist/hq-server/startup.d.ts.map +0 -1
- package/dist/hq-server/trust-boundary.d.ts.map +0 -1
- package/dist/hq-server/types.d.ts.map +0 -1
- package/dist/hq-server/utils.d.ts.map +0 -1
- package/dist/hq-server/ws.d.ts.map +0 -1
- package/dist/hq-server-YQUUMTPU.js.map +0 -7
- package/dist/hq-server.d.ts.map +0 -1
- package/dist/hq-static-serve.d.ts.map +0 -1
- package/dist/hq-ttl-U2FAYFAT.js.map +0 -7
- package/dist/hq-tunnel-RFKGC4HI.js.map +0 -7
- package/dist/hq-tunnel.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -7
- package/dist/init-E2NDDOHI.js.map +0 -7
- package/dist/input-reader.d.ts.map +0 -1
- package/dist/kanban-dispatch-route.d.ts.map +0 -1
- package/dist/kanban-hq-sync.d.ts.map +0 -1
- package/dist/kanban-run-mirror-EKVNGXWW.js.map +0 -7
- package/dist/launch-hints.d.ts.map +0 -1
- package/dist/live-settings-input.d.ts.map +0 -1
- package/dist/mailbox-bridge-bootstrap.d.ts.map +0 -1
- package/dist/mailbox-serve-DBOOOOWZ.js.map +0 -7
- package/dist/mcp-CYLPUEHC.js.map +0 -7
- package/dist/mcp-serve.d.ts.map +0 -1
- package/dist/modeldiag-HENYJ4N7.js.map +0 -7
- package/dist/multi-agent.d.ts.map +0 -1
- package/dist/next-task-predictor.d.ts.map +0 -1
- package/dist/permission-prompt.d.ts.map +0 -1
- package/dist/permissions-FNYLZIL4.js.map +0 -7
- package/dist/picker-key-state.d.ts.map +0 -1
- package/dist/picker-model-picker.d.ts.map +0 -1
- package/dist/picker-ui.d.ts.map +0 -1
- package/dist/picker.d.ts.map +0 -1
- package/dist/plugin-api-factory.d.ts.map +0 -1
- package/dist/plugin-management.d.ts.map +0 -1
- package/dist/plugin-usage-OU6X6LM3.js.map +0 -7
- package/dist/plugins-4LJ5IUBI.js.map +0 -7
- package/dist/pre-launch/launch-prompts.d.ts.map +0 -1
- package/dist/pre-launch/project-check.d.ts.map +0 -1
- package/dist/pre-launch.d.ts.map +0 -1
- package/dist/preflight.d.ts.map +0 -1
- package/dist/profile-config-path.d.ts.map +0 -1
- package/dist/project-BLQ3ALVL.js.map +0 -7
- package/dist/project-manifest-GE25PW4S.js.map +0 -7
- package/dist/project-picker-BOCWHBXP.js.map +0 -7
- package/dist/project-picker.d.ts.map +0 -1
- package/dist/projects-XE76NFNZ.js.map +0 -7
- package/dist/provider-config-utils.d.ts.map +0 -1
- package/dist/provider-helpers.d.ts.map +0 -1
- package/dist/provider-id.d.ts.map +0 -1
- package/dist/providers-models-GDELBHZK.js.map +0 -7
- package/dist/quick-VIO2BEHS.js.map +0 -7
- package/dist/renderer.d.ts.map +0 -1
- package/dist/repl-auto-proceed.d.ts.map +0 -1
- package/dist/repl-client-registration.d.ts.map +0 -1
- package/dist/repl-input.d.ts.map +0 -1
- package/dist/repl-options.d.ts.map +0 -1
- package/dist/repl-rendering.d.ts.map +0 -1
- package/dist/repl-suggestions.d.ts.map +0 -1
- package/dist/repl.d.ts.map +0 -1
- package/dist/replay-KCTXNMZQ.js.map +0 -7
- package/dist/rewind-EJMVFVLS.js.map +0 -7
- package/dist/sdd-runtime-AIJCJGWC.js.map +0 -7
- package/dist/services/autonomy-mode.d.ts.map +0 -1
- package/dist/services/commit-message.d.ts.map +0 -1
- package/dist/services/dispatch-classifier.d.ts.map +0 -1
- package/dist/services/mcp-management.d.ts.map +0 -1
- package/dist/services/project-facts.d.ts.map +0 -1
- package/dist/services/project-manifest.d.ts.map +0 -1
- package/dist/services/sdd/project-context.d.ts.map +0 -1
- package/dist/services/sdd/spec-detection.d.ts.map +0 -1
- package/dist/services/sdd/state.d.ts.map +0 -1
- package/dist/services/sdd/task-manager.d.ts.map +0 -1
- package/dist/services/sdd-runtime.d.ts.map +0 -1
- package/dist/services/statusline-config.d.ts.map +0 -1
- package/dist/services/suggestion-store.d.ts.map +0 -1
- package/dist/session-event-wiring.d.ts.map +0 -1
- package/dist/session-stats.d.ts.map +0 -1
- package/dist/sessions-config-NLCMK3BY.js.map +0 -7
- package/dist/settings-menu.d.ts.map +0 -1
- package/dist/shutdown-cleanup.d.ts.map +0 -1
- package/dist/simpleui-dist-JIFGUJO7.js.map +0 -7
- package/dist/simpleui-dist.d.ts.map +0 -1
- package/dist/slash-commands/acp.d.ts.map +0 -1
- package/dist/slash-commands/agent-improve.d.ts.map +0 -1
- package/dist/slash-commands/agents.d.ts.map +0 -1
- package/dist/slash-commands/audit.d.ts.map +0 -1
- package/dist/slash-commands/auth.d.ts.map +0 -1
- package/dist/slash-commands/autonomy.d.ts.map +0 -1
- package/dist/slash-commands/brain.d.ts.map +0 -1
- package/dist/slash-commands/btw.d.ts.map +0 -1
- package/dist/slash-commands/clear.d.ts.map +0 -1
- package/dist/slash-commands/codebase-reindex.d.ts.map +0 -1
- package/dist/slash-commands/collab.d.ts.map +0 -1
- package/dist/slash-commands/command-context.d.ts.map +0 -1
- package/dist/slash-commands/commit-llm.d.ts.map +0 -1
- package/dist/slash-commands/compact.d.ts.map +0 -1
- package/dist/slash-commands/context.d.ts.map +0 -1
- package/dist/slash-commands/coordinator.d.ts.map +0 -1
- package/dist/slash-commands/delegate.d.ts.map +0 -1
- package/dist/slash-commands/design.d.ts.map +0 -1
- package/dist/slash-commands/dev.d.ts.map +0 -1
- package/dist/slash-commands/diag-stats.d.ts.map +0 -1
- package/dist/slash-commands/dispatch-llm.d.ts.map +0 -1
- package/dist/slash-commands/doctor.d.ts.map +0 -1
- package/dist/slash-commands/enhance.d.ts.map +0 -1
- package/dist/slash-commands/ensemble.d.ts.map +0 -1
- package/dist/slash-commands/f-keys.d.ts.map +0 -1
- package/dist/slash-commands/fallback.d.ts.map +0 -1
- package/dist/slash-commands/fix-classifier.d.ts.map +0 -1
- package/dist/slash-commands/fix.d.ts.map +0 -1
- package/dist/slash-commands/fleet.d.ts.map +0 -1
- package/dist/slash-commands/git.d.ts.map +0 -1
- package/dist/slash-commands/gitid.d.ts.map +0 -1
- package/dist/slash-commands/goal-refiner.d.ts.map +0 -1
- package/dist/slash-commands/goal.d.ts.map +0 -1
- package/dist/slash-commands/health.d.ts.map +0 -1
- package/dist/slash-commands/help.d.ts.map +0 -1
- package/dist/slash-commands/helpers.d.ts.map +0 -1
- package/dist/slash-commands/hq.d.ts.map +0 -1
- package/dist/slash-commands/index.d.ts.map +0 -1
- package/dist/slash-commands/init.d.ts.map +0 -1
- package/dist/slash-commands/interrupt.d.ts.map +0 -1
- package/dist/slash-commands/kanban-agent-helpers.d.ts.map +0 -1
- package/dist/slash-commands/kanban-format.d.ts.map +0 -1
- package/dist/slash-commands/kanban-help.d.ts.map +0 -1
- package/dist/slash-commands/kanban.d.ts.map +0 -1
- package/dist/slash-commands/mailbox-demo.d.ts.map +0 -1
- package/dist/slash-commands/mailbox-serve.d.ts.map +0 -1
- package/dist/slash-commands/mailbox.d.ts.map +0 -1
- package/dist/slash-commands/mcp-utils.d.ts.map +0 -1
- package/dist/slash-commands/mcp.d.ts.map +0 -1
- package/dist/slash-commands/memory-compact.d.ts.map +0 -1
- package/dist/slash-commands/memory-flags.d.ts.map +0 -1
- package/dist/slash-commands/memory-formatters.d.ts.map +0 -1
- package/dist/slash-commands/memory.d.ts.map +0 -1
- package/dist/slash-commands/metrics.d.ts.map +0 -1
- package/dist/slash-commands/mode.d.ts.map +0 -1
- package/dist/slash-commands/modelcaps.d.ts.map +0 -1
- package/dist/slash-commands/models.d.ts.map +0 -1
- package/dist/slash-commands/mouse.d.ts.map +0 -1
- package/dist/slash-commands/next.d.ts.map +0 -1
- package/dist/slash-commands/plan.d.ts.map +0 -1
- package/dist/slash-commands/plugin.d.ts.map +0 -1
- package/dist/slash-commands/profile.d.ts.map +0 -1
- package/dist/slash-commands/project-utils.d.ts.map +0 -1
- package/dist/slash-commands/project.d.ts.map +0 -1
- package/dist/slash-commands/provider-status.d.ts.map +0 -1
- package/dist/slash-commands/prune.d.ts.map +0 -1
- package/dist/slash-commands/refiner.d.ts.map +0 -1
- package/dist/slash-commands/review.d.ts.map +0 -1
- package/dist/slash-commands/sdd/rendering.d.ts.map +0 -1
- package/dist/slash-commands/sdd-command-helpers.d.ts.map +0 -1
- package/dist/slash-commands/sdd-format.d.ts.map +0 -1
- package/dist/slash-commands/sdd.d.ts.map +0 -1
- package/dist/slash-commands/security.d.ts.map +0 -1
- package/dist/slash-commands/session.d.ts.map +0 -1
- package/dist/slash-commands/setmodel.d.ts.map +0 -1
- package/dist/slash-commands/settings.d.ts.map +0 -1
- package/dist/slash-commands/shadow.d.ts.map +0 -1
- package/dist/slash-commands/slash-deep-help.d.ts.map +0 -1
- package/dist/slash-commands/spawn-agents.d.ts.map +0 -1
- package/dist/slash-commands/statusline.d.ts.map +0 -1
- package/dist/slash-commands/suggest.d.ts.map +0 -1
- package/dist/slash-commands/suggestion-store.d.ts.map +0 -1
- package/dist/slash-commands/supervisor.d.ts.map +0 -1
- package/dist/slash-commands/surfaces.d.ts.map +0 -1
- package/dist/slash-commands/tasks.d.ts.map +0 -1
- package/dist/slash-commands/techstack.d.ts.map +0 -1
- package/dist/slash-commands/telegram-pairing.d.ts.map +0 -1
- package/dist/slash-commands/telegram-settings.d.ts.map +0 -1
- package/dist/slash-commands/telegram-setup.d.ts.map +0 -1
- package/dist/slash-commands/todos.d.ts.map +0 -1
- package/dist/slash-commands/tool.d.ts.map +0 -1
- package/dist/slash-commands/tools.d.ts.map +0 -1
- package/dist/slash-commands/tuneup.d.ts.map +0 -1
- package/dist/slash-commands/working-dir.d.ts.map +0 -1
- package/dist/slash-commands/worktree.d.ts.map +0 -1
- package/dist/slash-commands/yolo.d.ts.map +0 -1
- package/dist/spinner.d.ts.map +0 -1
- package/dist/subcommands/contracts.d.ts.map +0 -1
- package/dist/subcommands/handlers/acp.d.ts.map +0 -1
- package/dist/subcommands/handlers/audit.d.ts.map +0 -1
- package/dist/subcommands/handlers/auth-local-help.d.ts.map +0 -1
- package/dist/subcommands/handlers/auth.d.ts.map +0 -1
- package/dist/subcommands/handlers/bench-run-help.d.ts.map +0 -1
- package/dist/subcommands/handlers/bench.d.ts.map +0 -1
- package/dist/subcommands/handlers/chronicle.d.ts.map +0 -1
- package/dist/subcommands/handlers/config-history.d.ts.map +0 -1
- package/dist/subcommands/handlers/diag-doctor.d.ts.map +0 -1
- package/dist/subcommands/handlers/export.d.ts.map +0 -1
- package/dist/subcommands/handlers/helpers.d.ts.map +0 -1
- package/dist/subcommands/handlers/hq.d.ts.map +0 -1
- package/dist/subcommands/handlers/init.d.ts.map +0 -1
- package/dist/subcommands/handlers/mailbox-serve.d.ts.map +0 -1
- package/dist/subcommands/handlers/mcp.d.ts.map +0 -1
- package/dist/subcommands/handlers/model-smoke-test.d.ts.map +0 -1
- package/dist/subcommands/handlers/modeldiag-profiles.d.ts.map +0 -1
- package/dist/subcommands/handlers/modeldiag.d.ts.map +0 -1
- package/dist/subcommands/handlers/models-add-help.d.ts.map +0 -1
- package/dist/subcommands/handlers/per-subcommand-deep-help-table.d.ts.map +0 -1
- package/dist/subcommands/handlers/per-subcommand-help-data.d.ts.map +0 -1
- package/dist/subcommands/handlers/per-subcommand-help-table.d.ts.map +0 -1
- package/dist/subcommands/handlers/per-subcommand-help-types.d.ts.map +0 -1
- package/dist/subcommands/handlers/per-subcommand-help.d.ts.map +0 -1
- package/dist/subcommands/handlers/permissions.d.ts.map +0 -1
- package/dist/subcommands/handlers/plugin-usage.d.ts.map +0 -1
- package/dist/subcommands/handlers/project.d.ts.map +0 -1
- package/dist/subcommands/handlers/projects.d.ts.map +0 -1
- package/dist/subcommands/handlers/providers-models.d.ts.map +0 -1
- package/dist/subcommands/handlers/quick.d.ts.map +0 -1
- package/dist/subcommands/handlers/replay.d.ts.map +0 -1
- package/dist/subcommands/handlers/rewind.d.ts.map +0 -1
- package/dist/subcommands/handlers/sessions-config.d.ts.map +0 -1
- package/dist/subcommands/handlers/sessions-fleet.d.ts.map +0 -1
- package/dist/subcommands/handlers/tools-skills.d.ts.map +0 -1
- package/dist/subcommands/handlers/update.d.ts.map +0 -1
- package/dist/subcommands/handlers/version-help.d.ts.map +0 -1
- package/dist/subcommands/index.d.ts.map +0 -1
- package/dist/theme.d.ts.map +0 -1
- package/dist/tools-skills-UNKLOB7M.js.map +0 -7
- package/dist/tui-thinking-word.d.ts.map +0 -1
- package/dist/tuneup.d.ts.map +0 -1
- package/dist/update-YC4TYW2Y.js.map +0 -7
- package/dist/update-check-UMYTOH7Z.js.map +0 -7
- package/dist/update-check.d.ts.map +0 -1
- package/dist/utils/delay-format.d.ts.map +0 -1
- package/dist/utils/hq-ttl.d.ts.map +0 -1
- package/dist/utils/win32-cmd.d.ts.map +0 -1
- package/dist/utils.d.ts.map +0 -1
- package/dist/version-help-DROHZRW6.js.map +0 -7
- package/dist/version.d.ts.map +0 -1
- package/dist/webui-server/client-registration.d.ts.map +0 -1
- package/dist/webui-server/connection-handler.d.ts.map +0 -1
- package/dist/webui-server/context-breakdown.d.ts.map +0 -1
- package/dist/webui-server/contracts.d.ts.map +0 -1
- package/dist/webui-server/cost-helpers.d.ts.map +0 -1
- package/dist/webui-server/kanban-host-adapter.d.ts.map +0 -1
- package/dist/webui-server/kanban-run-mirror.d.ts.map +0 -1
- package/dist/webui-server/kanban-supervisor.d.ts.map +0 -1
- package/dist/webui-server/lifecycle.d.ts.map +0 -1
- package/dist/webui-server/listen-helpers.d.ts.map +0 -1
- package/dist/webui-server/logger-shim.d.ts.map +0 -1
- package/dist/webui-server/node-pty-loader.d.ts.map +0 -1
- package/dist/webui-server/prefs-seeding.d.ts.map +0 -1
- package/dist/webui-server/privileged-actions.d.ts.map +0 -1
- package/dist/webui-server/provider-config.d.ts.map +0 -1
- package/dist/webui-server/session-start-payload.d.ts.map +0 -1
- package/dist/webui-server/setup-events.d.ts.map +0 -1
- package/dist/webui-server/static-serve.d.ts.map +0 -1
- package/dist/webui-server/stream-coalescer.d.ts.map +0 -1
- package/dist/webui-server/terminal-log-view.d.ts.map +0 -1
- package/dist/webui-server-XKFUOKMJ.js.map +0 -7
- package/dist/webui-server-options.d.ts.map +0 -1
- package/dist/webui-server.d.ts.map +0 -1
- package/dist/wiring/brain-and-orchestration.d.ts.map +0 -1
- package/dist/wiring/codebase-index.d.ts.map +0 -1
- package/dist/wiring/command-host-adapters.d.ts.map +0 -1
- package/dist/wiring/command-host-state.d.ts.map +0 -1
- package/dist/wiring/controllers.d.ts.map +0 -1
- package/dist/wiring/dep-watcher-bridge.d.ts.map +0 -1
- package/dist/wiring/dep-watcher.d.ts.map +0 -1
- package/dist/wiring/design-studio.d.ts.map +0 -1
- package/dist/wiring/director-setup.d.ts.map +0 -1
- package/dist/wiring/eternal-command-handlers.d.ts.map +0 -1
- package/dist/wiring/fleet-command-handlers.d.ts.map +0 -1
- package/dist/wiring/hq-telemetry.d.ts.map +0 -1
- package/dist/wiring/lifecycle-plugins.d.ts.map +0 -1
- package/dist/wiring/mailbox-bridge-bootstrap.d.ts.map +0 -1
- package/dist/wiring/management-tools.d.ts.map +0 -1
- package/dist/wiring/metrics.d.ts.map +0 -1
- package/dist/wiring/pipeline.d.ts.map +0 -1
- package/dist/wiring/plugins.d.ts.map +0 -1
- package/dist/wiring/provider-runtime-setup.d.ts.map +0 -1
- package/dist/wiring/provider-runtime.d.ts.map +0 -1
- package/dist/wiring/provider-status.d.ts.map +0 -1
- package/dist/wiring/provider-utility-tools.d.ts.map +0 -1
- package/dist/wiring/provider.d.ts.map +0 -1
- package/dist/wiring/replay.d.ts.map +0 -1
- package/dist/wiring/runtime-controller-deps.d.ts.map +0 -1
- package/dist/wiring/runtime-dispatch-state.d.ts.map +0 -1
- package/dist/wiring/runtime-lifecycle-deps.d.ts.map +0 -1
- package/dist/wiring/runtime-picker-deps.d.ts.map +0 -1
- package/dist/wiring/sage.d.ts.map +0 -1
- package/dist/wiring/sdd-handlers.d.ts.map +0 -1
- package/dist/wiring/security-command.d.ts.map +0 -1
- package/dist/wiring/session-command-handlers.d.ts.map +0 -1
- package/dist/wiring/session-registry.d.ts.map +0 -1
- package/dist/wiring/session.d.ts.map +0 -1
- package/dist/wiring/slash-commands.d.ts.map +0 -1
- package/dist/wiring/to-execute-deps.d.ts.map +0 -1
- package/dist/wiring/tools.d.ts.map +0 -1
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
makePromptDelegate,
|
|
7
7
|
renderAgentsTemplate,
|
|
8
8
|
renderDiff
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-A6Q5KGLV.js";
|
|
10
10
|
import {
|
|
11
11
|
theme
|
|
12
12
|
} from "./chunk-QD544J2B.js";
|
|
@@ -16,21 +16,21 @@ import {
|
|
|
16
16
|
import {
|
|
17
17
|
helpCmd,
|
|
18
18
|
versionCmd
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-ARWGQUB3.js";
|
|
20
20
|
import {
|
|
21
21
|
discoverAndMergeProviders
|
|
22
22
|
} from "./chunk-TGDHN4LM.js";
|
|
23
23
|
import {
|
|
24
24
|
DEFAULT_PORT
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-C5GH4YBL.js";
|
|
26
26
|
import "./chunk-Q5GTM25S.js";
|
|
27
27
|
import {
|
|
28
28
|
CLI_VERSION
|
|
29
29
|
} from "./chunk-XJXDOF63.js";
|
|
30
30
|
import {
|
|
31
31
|
runUpdateCommand
|
|
32
|
-
} from "./chunk-
|
|
33
|
-
import "./chunk-
|
|
32
|
+
} from "./chunk-I5MEUFDI.js";
|
|
33
|
+
import "./chunk-U3SS4NRH.js";
|
|
34
34
|
import "./chunk-F4PEGAJZ.js";
|
|
35
35
|
import {
|
|
36
36
|
parseArgs,
|
|
@@ -54,7 +54,7 @@ import {
|
|
|
54
54
|
import "./chunk-7OCVIDC7.js";
|
|
55
55
|
|
|
56
56
|
// src/cli-entry-point.ts
|
|
57
|
-
import { writeErr } from "@wrongstack/core/utils";
|
|
57
|
+
import { installCrashShield, writeErr } from "@wrongstack/core/utils";
|
|
58
58
|
var SQLITE_WARNING_RE = /sqlite is an experimental feature/i;
|
|
59
59
|
function installSqliteWarningFilter() {
|
|
60
60
|
const originalEmit = process.emitWarning.bind(process);
|
|
@@ -91,6 +91,7 @@ function installBrokenPipeHandlers(options = {}) {
|
|
|
91
91
|
function runAsMain(mainFn) {
|
|
92
92
|
if (!isMain) return;
|
|
93
93
|
installBrokenPipeHandlers();
|
|
94
|
+
installCrashShield();
|
|
94
95
|
mainFn(process.argv.slice(2)).then(
|
|
95
96
|
(c) => {
|
|
96
97
|
process.exitCode = c;
|
|
@@ -1494,10 +1495,10 @@ function compactSingleLine(text) {
|
|
|
1494
1495
|
|
|
1495
1496
|
// src/subcommands/index.ts
|
|
1496
1497
|
var loaders = {
|
|
1497
|
-
acp: async () => (await import("./acp-
|
|
1498
|
+
acp: async () => (await import("./acp-S4LZQB66.js")).acpCmd,
|
|
1498
1499
|
init: async () => (await import("./init-E2NDDOHI.js")).initCmd,
|
|
1499
|
-
auth: async () => (await import("./auth-
|
|
1500
|
-
update: async () => (await import("./update-
|
|
1500
|
+
auth: async () => (await import("./auth-NLLGEYQR.js")).authCmd,
|
|
1501
|
+
update: async () => (await import("./update-MV6TUACD.js")).updateCmd,
|
|
1501
1502
|
sessions: async () => (await import("./sessions-config-NLCMK3BY.js")).sessionsCmd,
|
|
1502
1503
|
config: async () => (await import("./sessions-config-NLCMK3BY.js")).configCmd,
|
|
1503
1504
|
rewind: async () => (await import("./rewind-EJMVFVLS.js")).rewindCmd,
|
|
@@ -1514,17 +1515,18 @@ var loaders = {
|
|
|
1514
1515
|
doctor: async () => (await import("./diag-doctor-OQ3AA63O.js")).doctorCmd,
|
|
1515
1516
|
export: async () => (await import("./export-TPORYVRZ.js")).exportCmd,
|
|
1516
1517
|
usage: async () => (await import("./plugin-usage-OU6X6LM3.js")).usageCmd,
|
|
1517
|
-
version: async () => (await import("./version-help-
|
|
1518
|
-
help: async () => (await import("./version-help-
|
|
1518
|
+
version: async () => (await import("./version-help-ASKQYXDJ.js")).versionCmd,
|
|
1519
|
+
help: async () => (await import("./version-help-ASKQYXDJ.js")).helpCmd,
|
|
1519
1520
|
projects: async () => (await import("./projects-XE76NFNZ.js")).projectsCmd,
|
|
1520
1521
|
modeldiag: async () => (await import("./modeldiag-HENYJ4N7.js")).modeldiagCmd,
|
|
1521
1522
|
quick: async () => (await import("./quick-VIO2BEHS.js")).quickCmd,
|
|
1522
1523
|
bench: async () => (await import("./bench-7ZDWSNEF.js")).benchCmd,
|
|
1523
1524
|
chronicle: async () => (await import("./chronicle-QQEQFSSE.js")).chronicleCmd,
|
|
1524
|
-
hq: async () => (await import("./hq-
|
|
1525
|
+
hq: async () => (await import("./hq-WO6CLUSI.js")).hqCmd,
|
|
1525
1526
|
mailbox: async () => (await import("./mailbox-serve-DBOOOOWZ.js")).mailboxServeCmd,
|
|
1526
1527
|
permissions: async () => (await import("./permissions-FNYLZIL4.js")).permissionsCmd,
|
|
1527
|
-
project: async () => (await import("./project-BLQ3ALVL.js")).projectCmd
|
|
1528
|
+
project: async () => (await import("./project-BLQ3ALVL.js")).projectCmd,
|
|
1529
|
+
governance: async () => (await import("./governance-V2Z42RBE.js")).governanceCmd
|
|
1528
1530
|
};
|
|
1529
1531
|
var subcommands = Object.fromEntries(
|
|
1530
1532
|
Object.entries(loaders).map(([name, load]) => [
|
|
@@ -2157,7 +2159,7 @@ async function isPortInUse(host, port) {
|
|
|
2157
2159
|
}
|
|
2158
2160
|
async function handleHqShortCircuit(flags) {
|
|
2159
2161
|
if (flags["hq"] !== true) return null;
|
|
2160
|
-
const { startHqServer } = await import("./hq-server-
|
|
2162
|
+
const { startHqServer } = await import("./hq-server-6TSAORAC.js");
|
|
2161
2163
|
const tunnelRequested = flags["tunnel"] === true;
|
|
2162
2164
|
const host = typeof flags["host"] === "string" ? flags["host"] : tunnelRequested ? "127.0.0.1" : HQ_CLI_DEFAULT_HOST;
|
|
2163
2165
|
if (tunnelRequested && !isLoopbackHost(host)) {
|
|
@@ -2316,9 +2318,9 @@ ${color8.green("Cloudflare Quick Tunnel ready:")} ${browserUrl}
|
|
|
2316
2318
|
}
|
|
2317
2319
|
|
|
2318
2320
|
// src/boot/launch-menu.ts
|
|
2319
|
-
import { atomicWrite as atomicWrite3, color as color9, isStdinTTY as isStdinTTY2, setRawMode as setRawMode2 } from "@wrongstack/core/utils";
|
|
2320
|
-
import { HQ_CLI_DEFAULT_HOST as HQ_CLI_DEFAULT_HOST2 } from "@wrongstack/core/hq";
|
|
2321
2321
|
import * as fs8 from "node:fs/promises";
|
|
2322
|
+
import { HQ_CLI_DEFAULT_HOST as HQ_CLI_DEFAULT_HOST2 } from "@wrongstack/core/hq";
|
|
2323
|
+
import { atomicWrite as atomicWrite3, color as color9, isStdinTTY as isStdinTTY2, setRawMode as setRawMode2 } from "@wrongstack/core/utils";
|
|
2322
2324
|
|
|
2323
2325
|
// src/boot/launch-banner.ts
|
|
2324
2326
|
var STACK_ORANGE = { r: 253, g: 159, b: 2 };
|
|
@@ -2443,10 +2445,34 @@ function defaultHostFor(mode) {
|
|
|
2443
2445
|
return mode === "hq" ? HQ_DEFAULT_HOST : DEFAULT_HOST;
|
|
2444
2446
|
}
|
|
2445
2447
|
var MODE_OPTIONS = [
|
|
2446
|
-
{
|
|
2447
|
-
|
|
2448
|
-
|
|
2449
|
-
|
|
2448
|
+
{
|
|
2449
|
+
key: 1,
|
|
2450
|
+
mode: "tui-repl",
|
|
2451
|
+
label: "TUI / REPL",
|
|
2452
|
+
hint: "interactive terminal (default)",
|
|
2453
|
+
icon: "\u2328"
|
|
2454
|
+
},
|
|
2455
|
+
{
|
|
2456
|
+
key: 2,
|
|
2457
|
+
mode: "webui",
|
|
2458
|
+
label: "WebUI",
|
|
2459
|
+
hint: `browser-based project UI (port ${DEFAULT_PORTS.webui})`,
|
|
2460
|
+
icon: "\u{1F310}"
|
|
2461
|
+
},
|
|
2462
|
+
{
|
|
2463
|
+
key: 3,
|
|
2464
|
+
mode: "simpleui",
|
|
2465
|
+
label: "SimpleUI",
|
|
2466
|
+
hint: `lightweight browser UI (port ${DEFAULT_PORTS.simpleui})`,
|
|
2467
|
+
icon: "\u{1F4C4}"
|
|
2468
|
+
},
|
|
2469
|
+
{
|
|
2470
|
+
key: 4,
|
|
2471
|
+
mode: "hq",
|
|
2472
|
+
label: "HQ",
|
|
2473
|
+
hint: `project-independent dashboard (port ${DEFAULT_PORT})`,
|
|
2474
|
+
icon: "\u{1F4CA}"
|
|
2475
|
+
}
|
|
2450
2476
|
];
|
|
2451
2477
|
var MENU_TIMEOUT_MS = 8e3;
|
|
2452
2478
|
var SUMMARY_TIMEOUT_MS = 5e3;
|
|
@@ -2478,6 +2504,7 @@ var KNOWN_SUBCOMMANDS = /* @__PURE__ */ new Set([
|
|
|
2478
2504
|
"help",
|
|
2479
2505
|
"provider",
|
|
2480
2506
|
"project",
|
|
2507
|
+
"governance",
|
|
2481
2508
|
"session",
|
|
2482
2509
|
"sessions",
|
|
2483
2510
|
"replay",
|
|
@@ -2620,6 +2647,7 @@ async function promptModeArrow(deps) {
|
|
|
2620
2647
|
const settle = (result, finalLine) => {
|
|
2621
2648
|
if (settled) return;
|
|
2622
2649
|
settled = true;
|
|
2650
|
+
stopCountdown();
|
|
2623
2651
|
stopInput();
|
|
2624
2652
|
if (drawn > 0) out(`\x1B[${drawn}A`);
|
|
2625
2653
|
out("\x1B[0J");
|
|
@@ -3121,7 +3149,7 @@ async function initializeCli(argv) {
|
|
|
3121
3149
|
async function main(argv) {
|
|
3122
3150
|
const cliCtx = await initializeCli(argv);
|
|
3123
3151
|
if (typeof cliCtx === "number") return cliCtx;
|
|
3124
|
-
const { runInteractive } = await import("./cli-main-
|
|
3152
|
+
const { runInteractive } = await import("./cli-main-TJEU4OUY.js");
|
|
3125
3153
|
return runInteractive(cliCtx);
|
|
3126
3154
|
}
|
|
3127
3155
|
|
|
@@ -47,7 +47,7 @@ export interface LiveSettingsInput {
|
|
|
47
47
|
breakerEnabled?: boolean | undefined;
|
|
48
48
|
/** Auto kill/reset delay (ms) when the breaker trips. 0 = manual recovery. */
|
|
49
49
|
breakerAutoKillResetMs?: number | undefined;
|
|
50
|
-
/** TUI statusline density. Defaults to
|
|
50
|
+
/** TUI statusline density. Defaults to minimum when unset. */
|
|
51
51
|
statuslineMode?: 'minimum' | 'detailed' | undefined;
|
|
52
52
|
/** Single word shown in the TUI rainbow working-state chip. */
|
|
53
53
|
thinkingWord?: string | undefined;
|
package/dist/settings-menu.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type SecretVault } from '@wrongstack/core/types';
|
|
2
1
|
import type { ConfigStore } from '@wrongstack/core/types';
|
|
2
|
+
import { type SecretVault } from '@wrongstack/core/types';
|
|
3
3
|
/** Configuration and storage dependencies needed to persist a setting.
|
|
4
4
|
* This is safe to call from non-interactive surfaces such as the TUI,
|
|
5
5
|
* headless runs, and the arg-driven `/settings` slash command. */
|
|
@@ -14,6 +14,8 @@ import type { SlashCommandContext } from './command-context.js';
|
|
|
14
14
|
* remove <n|ref> Remove by 1-based index or by exact reference.
|
|
15
15
|
* clear Empty the explicit chain (smart default takes over
|
|
16
16
|
* again when `auto` is on).
|
|
17
|
+
* bridge set <ref> Set the single continuity route tried before the chain.
|
|
18
|
+
* bridge clear Disable the continuity bridge.
|
|
17
19
|
* auto on|off Toggle the smart default (config.fallbackAuto).
|
|
18
20
|
*/
|
|
19
21
|
export declare function buildFallbackCommand(opts: SlashCommandContext): SlashCommand;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Config, Provider } from '@wrongstack/core/types';
|
|
2
1
|
import type { OneShotOrchestrator } from '@wrongstack/core/execution';
|
|
2
|
+
import type { Config, Provider } from '@wrongstack/core/types';
|
|
3
3
|
/**
|
|
4
4
|
* Result of refining a user's raw goal into a clear, actionable mission.
|
|
5
5
|
*/
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { IncomingMessage } from 'node:http';
|
|
2
|
+
export interface AcpGateVerdict {
|
|
3
|
+
ok: boolean;
|
|
4
|
+
/** WebSocket close code to send when `ok` is false. */
|
|
5
|
+
code?: number;
|
|
6
|
+
reason?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface AcpConnectionGateOptions {
|
|
9
|
+
host: string;
|
|
10
|
+
port: number;
|
|
11
|
+
token: string;
|
|
12
|
+
/** Concurrent connection ceiling. */
|
|
13
|
+
maxConnections?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface AcpConnectionGate {
|
|
16
|
+
/** Decide whether to admit a handshake. Does not mutate connection count. */
|
|
17
|
+
check(req: Pick<IncomingMessage, 'headers' | 'url'>, liveConnections: number): AcpGateVerdict;
|
|
18
|
+
}
|
|
19
|
+
export declare function createAcpConnectionGate(opts: AcpConnectionGateOptions): AcpConnectionGate;
|
|
20
|
+
//# sourceMappingURL=acp-connection-gate.d.ts.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { GovernanceDaemonOperatorStatusReadResult } from '@wrongstack/runtime/governance-bootstrap';
|
|
2
|
+
import type { SubcommandDeps, SubcommandHandler } from '../contracts.js';
|
|
3
|
+
export interface GovernanceStatusCommandDependencies {
|
|
4
|
+
readonly readStatus: (projectRoot: string) => Promise<GovernanceDaemonOperatorStatusReadResult>;
|
|
5
|
+
}
|
|
6
|
+
export declare function runGovernanceStatusCommand(args: string[], deps: SubcommandDeps, dependencies?: GovernanceStatusCommandDependencies): Promise<number>;
|
|
7
|
+
export declare const governanceCmd: SubcommandHandler;
|
|
8
|
+
//# sourceMappingURL=governance.d.ts.map
|
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
detectUpdatePackageName,
|
|
4
4
|
runUpdateCommand,
|
|
5
5
|
updateCmd
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-I5MEUFDI.js";
|
|
7
|
+
import "./chunk-U3SS4NRH.js";
|
|
8
8
|
import "./chunk-F4PEGAJZ.js";
|
|
9
9
|
import "./chunk-7OCVIDC7.js";
|
|
10
10
|
export {
|
|
@@ -13,4 +13,4 @@ export {
|
|
|
13
13
|
runUpdateCommand,
|
|
14
14
|
updateCmd
|
|
15
15
|
};
|
|
16
|
-
//# sourceMappingURL=update-
|
|
16
|
+
//# sourceMappingURL=update-MV6TUACD.js.map
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Re-export of the canonical Windows `.cmd`/`.bat` shim builder.
|
|
3
|
+
*
|
|
4
|
+
* This file previously held its own copy, byte-identical to the one in
|
|
5
|
+
* `@wrongstack/acp`, while `@wrongstack/mcp` used a weaker quoting helper that
|
|
6
|
+
* left metacharacter-bearing arguments unquoted under `shell: true`. Keeping one
|
|
7
|
+
* implementation in core removes the divergence risk (WS-004 / CMDI-005).
|
|
8
|
+
*/
|
|
9
|
+
export { buildWin32CmdShimInvocation, type Win32CmdShimInvocation, } from '@wrongstack/core/utils';
|
|
7
10
|
//# sourceMappingURL=win32-cmd.d.ts.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
helpCmd,
|
|
3
3
|
versionCmd
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ARWGQUB3.js";
|
|
5
5
|
import "./chunk-XJXDOF63.js";
|
|
6
6
|
import "./chunk-7OCVIDC7.js";
|
|
7
7
|
export {
|
|
8
8
|
helpCmd,
|
|
9
9
|
versionCmd
|
|
10
10
|
};
|
|
11
|
-
//# sourceMappingURL=version-help-
|
|
11
|
+
//# sourceMappingURL=version-help-ASKQYXDJ.js.map
|
|
@@ -841,7 +841,7 @@ async function runWebUI(opts) {
|
|
|
841
841
|
const wsPort = httpPort;
|
|
842
842
|
const globalRoot = opts.globalConfigPath ? path5.dirname(opts.globalConfigPath) : wstackGlobalRoot();
|
|
843
843
|
const profileConfigPath = opts.profileConfigPath ?? opts.globalConfigPath ?? path5.join(globalRoot, "config.json");
|
|
844
|
-
const rateLimitMax = Number.parseInt(process.env["WEBUI_RATE_LIMIT"] ?? "
|
|
844
|
+
const rateLimitMax = Number.parseInt(process.env["WEBUI_RATE_LIMIT"] ?? "600", 10);
|
|
845
845
|
const clients = /* @__PURE__ */ new Map();
|
|
846
846
|
const pendingConfirms = /* @__PURE__ */ new Map();
|
|
847
847
|
const secretScrubber = new DefaultSecretScrubber();
|
|
@@ -1127,18 +1127,25 @@ async function runWebUI(opts) {
|
|
|
1127
1127
|
// not inside the profile directory — resolve via global root to stay correct.
|
|
1128
1128
|
getVault(opts.globalConfigPath),
|
|
1129
1129
|
(snapshot) => {
|
|
1130
|
+
const hadFallbackBridge = Boolean(opts.appConfig?.fallbackBridge?.trim());
|
|
1130
1131
|
try {
|
|
1131
1132
|
if (opts.appConfig && !Object.isFrozen(opts.appConfig)) {
|
|
1132
1133
|
opts.appConfig.providers = snapshot.providers;
|
|
1133
1134
|
if (snapshot.uiLocale) opts.appConfig.uiLocale = snapshot.uiLocale;
|
|
1135
|
+
if (snapshot.fallbackBridge !== void 0) {
|
|
1136
|
+
opts.appConfig.fallbackBridge = snapshot.fallbackBridge;
|
|
1137
|
+
} else {
|
|
1138
|
+
delete opts.appConfig.fallbackBridge;
|
|
1139
|
+
}
|
|
1134
1140
|
}
|
|
1135
1141
|
} catch {
|
|
1136
1142
|
}
|
|
1137
|
-
const routingChanged = snapshot.fallbackModels !== void 0 || snapshot.fallbackProfiles !== void 0 || snapshot.favoriteModels !== void 0 || snapshot.favoriteModelsOnly !== void 0 || snapshot.modelMatrix !== void 0 || snapshot.fallbackAuto !== void 0;
|
|
1143
|
+
const routingChanged = snapshot.fallbackModels !== void 0 || snapshot.fallbackBridge !== void 0 || hadFallbackBridge || snapshot.fallbackProfiles !== void 0 || snapshot.favoriteModels !== void 0 || snapshot.favoriteModelsOnly !== void 0 || snapshot.modelMatrix !== void 0 || snapshot.fallbackAuto !== void 0;
|
|
1138
1144
|
if (routingChanged) {
|
|
1139
1145
|
const configStore = opts.agent.container?.safeResolve?.(TOKENS.ConfigStore);
|
|
1140
1146
|
configStore?.update({
|
|
1141
1147
|
...snapshot.fallbackModels !== void 0 ? { fallbackModels: snapshot.fallbackModels } : {},
|
|
1148
|
+
fallbackBridge: snapshot.fallbackBridge ?? "",
|
|
1142
1149
|
...snapshot.fallbackProfiles !== void 0 ? { fallbackProfiles: snapshot.fallbackProfiles } : {},
|
|
1143
1150
|
...snapshot.favoriteModels !== void 0 ? { favoriteModels: snapshot.favoriteModels } : {},
|
|
1144
1151
|
...snapshot.favoriteModelsOnly !== void 0 ? { favoriteModelsOnly: snapshot.favoriteModelsOnly } : {},
|
|
@@ -1480,4 +1487,4 @@ async function runWebUI(opts) {
|
|
|
1480
1487
|
export {
|
|
1481
1488
|
runWebUI
|
|
1482
1489
|
};
|
|
1483
|
-
//# sourceMappingURL=webui-server-
|
|
1490
|
+
//# sourceMappingURL=webui-server-PCLSXX6L.js.map
|
|
@@ -58,6 +58,8 @@ export interface BrainOrchestrationDeps {
|
|
|
58
58
|
modeId?: string | undefined;
|
|
59
59
|
/** Shared provider/model status tracker for the Director. */
|
|
60
60
|
statusTracker?: import('@wrongstack/core/coordination').ProviderModelStatusTracker | undefined;
|
|
61
|
+
/** Trusted governance hook for in-process Fleet tool pipelines. */
|
|
62
|
+
installToolBoundary?: ((pipelines: import('@wrongstack/core/agent').AgentPipelines) => void) | undefined;
|
|
61
63
|
}
|
|
62
64
|
export interface BrainOrchestrationResult {
|
|
63
65
|
brain: ObservableBrainArbiter;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { Config, Logger, ModelsRegistry, Provider, ProviderConfig, SecretVault } from '@wrongstack/core/types';
|
|
2
1
|
import { type FallbackProfileManager } from '@wrongstack/core/agent';
|
|
3
|
-
import type { EventBus } from '@wrongstack/core/kernel';
|
|
4
2
|
import type { ProviderModelStatusTracker } from '@wrongstack/core/coordination';
|
|
3
|
+
import type { EventBus } from '@wrongstack/core/kernel';
|
|
5
4
|
import type { ProviderRegistry } from '@wrongstack/core/registry';
|
|
5
|
+
import type { Config, Logger, ModelsRegistry, Provider, ProviderConfig, SecretVault } from '@wrongstack/core/types';
|
|
6
6
|
import type { WstackPaths } from '@wrongstack/core/utils';
|
|
7
7
|
export declare function serializeProviderRuntimeSnapshot(snapshot: unknown): string;
|
|
8
8
|
type AnyObj = any;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wrongstack/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.298.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "WrongStack CLI — terminal AI coding agent with provider catalog from models.dev. Provides `wrongstack` and `wstack` binaries.",
|
|
6
6
|
"keywords": [
|
|
@@ -37,33 +37,34 @@
|
|
|
37
37
|
},
|
|
38
38
|
"files": [
|
|
39
39
|
"dist",
|
|
40
|
+
"!dist/**/*.map",
|
|
40
41
|
"data"
|
|
41
42
|
],
|
|
42
43
|
"dependencies": {
|
|
43
44
|
"ws": "^8.21.1",
|
|
44
|
-
"@wrongstack/
|
|
45
|
-
"@wrongstack/
|
|
46
|
-
"@wrongstack/
|
|
47
|
-
"@wrongstack/
|
|
48
|
-
"@wrongstack/
|
|
49
|
-
"@wrongstack/
|
|
50
|
-
"@wrongstack/
|
|
51
|
-
"@wrongstack/
|
|
52
|
-
"@wrongstack/
|
|
53
|
-
"@wrongstack/
|
|
54
|
-
"@wrongstack/
|
|
55
|
-
"@wrongstack/techstack": "0.
|
|
56
|
-
"@wrongstack/
|
|
57
|
-
"@wrongstack/
|
|
58
|
-
"@wrongstack/
|
|
59
|
-
"@wrongstack/
|
|
60
|
-
"@wrongstack/tools": "0.
|
|
61
|
-
"@wrongstack/webui-
|
|
62
|
-
"@wrongstack/
|
|
63
|
-
"@wrongstack/
|
|
45
|
+
"@wrongstack/mcp": "0.298.0",
|
|
46
|
+
"@wrongstack/bench": "0.298.0",
|
|
47
|
+
"@wrongstack/core": "0.298.0",
|
|
48
|
+
"@wrongstack/acp": "0.298.0",
|
|
49
|
+
"@wrongstack/providers": "0.298.0",
|
|
50
|
+
"@wrongstack/plug-lsp": "0.298.0",
|
|
51
|
+
"@wrongstack/kanban": "0.298.0",
|
|
52
|
+
"@wrongstack/runtime": "0.298.0",
|
|
53
|
+
"@wrongstack/security-scanner": "0.298.0",
|
|
54
|
+
"@wrongstack/sdd": "0.298.0",
|
|
55
|
+
"@wrongstack/simpleui": "0.298.0",
|
|
56
|
+
"@wrongstack/techstack": "0.298.0",
|
|
57
|
+
"@wrongstack/tui": "0.298.0",
|
|
58
|
+
"@wrongstack/webui": "0.298.0",
|
|
59
|
+
"@wrongstack/telegram": "0.298.0",
|
|
60
|
+
"@wrongstack/plugins": "0.298.0",
|
|
61
|
+
"@wrongstack/tools": "0.298.0",
|
|
62
|
+
"@wrongstack/webui-hq": "0.298.0",
|
|
63
|
+
"@wrongstack/sage": "0.298.0",
|
|
64
|
+
"@wrongstack/webui-server": "0.298.0"
|
|
64
65
|
},
|
|
65
66
|
"optionalDependencies": {
|
|
66
|
-
"@wrongstack/desktop": "0.
|
|
67
|
+
"@wrongstack/desktop": "0.298.0"
|
|
67
68
|
},
|
|
68
69
|
"devDependencies": {
|
|
69
70
|
"@types/node": "^26.1.1",
|
package/dist/acp-A5OSIU2P.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/subcommands/handlers/acp.ts", "../src/acp-server-agent.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * ACP CLI integration.\n *\n * `wstack acp` \u2014 start WrongStack as an ACP server (blocks)\n * `wstack acp list` \u2014 list ACP agents installed on $PATH\n * `wstack acp spawn <id> <task>` \u2014 run a task on one named ACP agent\n * `wstack acp parallel <csv> <task>` \u2014 fan a task out to multiple agents\n *\n * DIR-2: `wstack acp` runs WrongStack as a standard-compliant ACP agent.\n * ACP clients (Zed, JetBrains, VS Code ACP extension) spawn it as a subprocess.\n * This is the correct CLI entry point to test DIR-2 against a real ACP client.\n */\n\nimport {\n type ACPProgressEvent,\n type AcpAgentCommandOverrides,\n defaultPermissionPolicy,\n EnsembleRegistry,\n probeAcpAgents,\n renderAcpBenchText,\n resolveAcpAgentCommand,\n runAcpBench,\n runEnsemble,\n runOneAcpTask,\n} from '@wrongstack/acp';\nimport {\n ACPProtocolHandler,\n ACPSessionStore,\n makeACPServerAgentTurn,\n type RunTurn,\n WrongStackACPServer,\n WsBridgeTransport,\n} from '@wrongstack/acp/agent';\nimport * as path from 'node:path';\nimport { WebSocketServer } from 'ws';\nimport { AcpServerConfigError, buildAcpServerAgentFactory } from '../../acp-server-agent.js';\nimport {\n type LoadedAcpRegistry,\n loadCachedAcpRegistry,\n refreshAcpRegistry,\n} from '../../acp-registry-cache.js';\nimport { createGracefulShutdown } from '../../shutdown-cleanup.js';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\n/** User-config ACP command overrides (never sourced from in-project config). */\nfunction acpOverrides(deps: SubcommandDeps): AcpAgentCommandOverrides | undefined {\n return deps.config.acp?.agents;\n}\n\n/** Load the synced registry cache, or null if never synced / unavailable. */\nasync function loadLive(deps: SubcommandDeps): Promise<LoadedAcpRegistry | null> {\n return deps.paths ? loadCachedAcpRegistry(deps.paths) : null;\n}\n\nexport const acpCmd: SubcommandHandler = async (args, deps) => {\n const sub = args[0];\n\n if (!sub || sub === 'server' || sub === 'serve') {\n return runACPServer(deps);\n }\n\n if (sub === 'help') {\n deps.renderer.write(`\\\nwstack acp \u2014 ACP (Agent Client Protocol) integration\n\nUsage:\n wstack acp Start WrongStack as an ACP server (blocks)\n wstack acp server Same as above\n wstack acp list List available ACP agents\n wstack acp sync Pull the official agentclientprotocol/registry into cache\n wstack acp spawn <id> <task>\n Spawn an ACP agent as a subagent and wait for result\n wstack acp parallel <agent-id-csv> <task>\n Fan a task out to multiple ACP agents in parallel\n and aggregate the results\n wstack acp probe [agent-id-csv]\n Handshake-test agents (bounded concurrency). Defaults\n to all installed agents.\n wstack acp bench [agent-id-csv] [--fs]\n End-to-end verify each agent (handshake \u2192 prompt \u2192\n marker, optional fs check) and print a graded report.\n Defaults to all installed agents.\n wstack acp help Show this help\n\nACP Mode:\n When run as \\`wstack acp\\`. WrongStack acts as an ACP-compatible agent driven\n by your configured model provider. ACP clients (Zed, JetBrains, VS Code)\n spawn it as a subprocess and communicate over stdio JSON-RPC. Run\n \\`wstack auth\\` first to configure a provider, or pass \\`--echo\\` for a no-op\n connectivity test that needs no provider. Press Ctrl+C to stop.\n\n Transports:\n (default) stdio JSON-RPC (the usual editor-spawned-subprocess mode)\n --ws[=port] serve over WebSocket on 127.0.0.1:<port> (default 8889) \u2014\n full-duplex, so updates/permission prompts stream live.\n\nspawn:\n Spawns a named ACP agent (claude-code, gemini-cli, codex-cli, copilot,\n cline, goose, openhands, qwen-code, kiro-cli, opencode, mistral-vibe,\n cursor) with the given task and waits for its result.\n Example: wstack acp spawn cline \"fix the login bug\"\n\nparallel:\n Runs the same task on a comma-separated list of ACP agents concurrently.\n Example: wstack acp parallel claude-code,gemini-cli,codex-cli \"review this diff\"\n Each agent's result is rendered under a clearly-marked header. Returns 0\n if at least one agent succeeds, 1 if all fail. Agents that aren't\n installed are skipped with a warning.\n`);\n return 0;\n }\n\n if (sub === 'list') {\n return listACPAgents(deps);\n }\n\n if (sub === 'sync') {\n return syncACPRegistry(deps);\n }\n\n if (sub === 'spawn') {\n return spawnACPAgent(args.slice(1), deps);\n }\n\n if (sub === 'parallel') {\n return parallelACPAgents(args.slice(1), deps);\n }\n\n if (sub === 'probe') {\n return probeACPAgents(args.slice(1), deps);\n }\n\n if (sub === 'bench') {\n return benchACPAgents(args.slice(1), deps);\n }\n\n deps.renderer.writeError(`Unknown acp subcommand: ${sub}\\n`);\n deps.renderer.write('Run `wstack acp help` for usage.\\n');\n return 1;\n};\n\n/** Parse the `--ws[=port]` flag into a port number, or null if not set. */\nfunction parseWsPort(flag: unknown): number | null {\n if (flag === undefined || flag === false) return null;\n if (flag === true || flag === 'true') return 8889;\n const n = Number(flag);\n return Number.isInteger(n) && n > 0 && n < 65_536 ? n : 8889;\n}\n\n/**\n * Serve WrongStack as an ACP agent over WebSocket. Unlike the HTTP transport\n * (one POST per message, notifications buffered), a WebSocket is full-duplex:\n * the agent streams `session/update` and makes `session/request_permission`\n * callbacks live during a turn. One handler + transport per connection.\n */\nasync function runACPWebSocketServer(deps: SubcommandDeps, port: number): Promise<number> {\n const host = '127.0.0.1';\n // `--echo` over WS: a no-provider connectivity test, mirroring stdio `--echo`.\n const echo = deps.flags?.echo === true || deps.flags?.echo === 'true';\n\n let turnFactory: (() => ReturnType<typeof makeACPServerAgentTurn>) | undefined;\n let echoTurn: RunTurn | undefined;\n let store: ACPSessionStore | undefined;\n if (echo) {\n echoTurn = async () => ({ stopReason: 'end_turn' });\n } else {\n let agentFor;\n try {\n agentFor = buildAcpServerAgentFactory(deps);\n } catch (err) {\n if (err instanceof AcpServerConfigError) {\n deps.renderer.writeError(`${err.message}\\n`);\n return 1;\n }\n throw err;\n }\n turnFactory = () => makeACPServerAgentTurn({ agentFor });\n store = deps.paths?.projectDir\n ? new ACPSessionStore({ dir: path.join(deps.paths.projectDir, 'acp-sessions') })\n : undefined;\n }\n\n const wss = new WebSocketServer({ host, port, maxPayload: 20 * 1024 * 1024 });\n wss.on('connection', (socket, req) => {\n // Origin guard: real ACP clients send no Origin; reject cross-origin\n // browser connections so a web page can't drive this loopback agent.\n const origin = req.headers.origin;\n if (origin && origin !== `http://${host}:${port}` && origin !== `ws://${host}:${port}`) {\n socket.close(1008, 'cross-origin forbidden');\n return;\n }\n const connectionTurn = turnFactory?.();\n const transport = new WsBridgeTransport((m) => {\n const data = JSON.stringify(m);\n if (socket.bufferedAmount + Buffer.byteLength(data, 'utf8') > 32 * 1024 * 1024) {\n socket.terminate();\n return;\n }\n socket.send(data);\n });\n const handler = new ACPProtocolHandler({\n transport,\n defaultCwd: deps.cwd ?? process.cwd(),\n runTurn: connectionTurn ?? echoTurn!,\n ...(connectionTurn\n ? {\n replayFor: connectionTurn.replay,\n seedFor: connectionTurn.seed,\n disposeFor: connectionTurn.dispose,\n }\n : {}),\n ...(store ? { store } : {}),\n });\n socket.on('message', (data: { toString(): string }) => {\n let msg: unknown;\n try {\n msg = JSON.parse(data.toString());\n } catch {\n return;\n }\n transport.receive(msg as never);\n void handler.handleMessage(msg);\n });\n const teardown = (): void => {\n handler.close();\n transport.close();\n };\n socket.on('close', teardown);\n socket.on('error', teardown);\n });\n\n deps.renderer.writeInfo(\n echo\n ? `ACP server (echo, no provider) listening on ws://${host}:${port}. Press Ctrl+C to stop.\\n`\n : `WrongStack ACP server listening on ws://${host}:${port} (${deps.config.provider}/${deps.config.model}). Press Ctrl+C to stop.\\n`,\n );\n\n await new Promise<void>((resolve) => {\n const shutdown = (): void => {\n deps.renderer.writeWarning('\\nShutting down ACP WebSocket server...');\n wss.close();\n resolve();\n };\n process.on('SIGINT', shutdown);\n process.on('SIGTERM', shutdown);\n });\n return 0;\n}\n\nasync function runACPServer(deps: SubcommandDeps): Promise<number> {\n const wsPort = parseWsPort(deps.flags?.ws);\n if (wsPort !== null) {\n return runACPWebSocketServer(deps, wsPort);\n }\n // `--echo` keeps the no-op connectivity-smoke-test path that the default\n // runTurn provided before this server was wired to a real Agent. Useful for\n // `wstack acp --echo` when you just want to verify the wire format against a\n // client without needing a configured provider.\n const echo = deps.flags?.echo === true || deps.flags?.echo === 'true';\n\n const server = new WrongStackACPServer(\n echo\n ? {}\n : (() => {\n let agentFor;\n try {\n agentFor = buildAcpServerAgentFactory(deps);\n } catch (err) {\n if (err instanceof AcpServerConfigError) {\n deps.renderer.writeError(`${err.message}\\n`);\n return {};\n }\n throw err;\n }\n const turn = makeACPServerAgentTurn({ agentFor });\n // Persist sessions under the project's wstack dir so `session/load`\n // survives a server restart (project-scoped, not in the repo).\n const store = deps.paths?.projectDir\n ? new ACPSessionStore({ dir: path.join(deps.paths.projectDir, 'acp-sessions') })\n : undefined;\n return {\n runTurn: turn,\n replayFor: turn.replay,\n seedFor: turn.seed,\n disposeFor: turn.dispose,\n ...(store ? { store } : {}),\n };\n })(),\n );\n\n if (echo) {\n deps.renderer.writeInfo('ACP server starting in --echo mode (no-op turn; no provider needed).\\n');\n } else {\n deps.renderer.writeInfo(\n `Starting WrongStack ACP server (${deps.config.provider}/${deps.config.model})\u2026\\n`,\n );\n deps.renderer.writeInfo('Waiting for an ACP client connection on stdin/stdout. Press Ctrl+C to stop.\\n');\n }\n\n // Graceful shutdown. The old code did `server.stop(); process.exit(0)`\n // back-to-back, which cut off `server.stop()`'s async teardown (it\n // initiates cleanup of underlying agents and the session store, but\n // returns void rather than a promise \u2014 yet Node still has pending\n // microtasks scheduled that `process.exit` would abandon). Use the\n // same pattern as cli-main.ts: idempotent guard, await any cleanup,\n // set exitCode, give Node a 500ms grace to drain, then force exit.\n createGracefulShutdown({\n run: async () => {\n try {\n server.stop();\n } catch (err) {\n deps.renderer.writeError(\n `ACP stop failed: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n }\n },\n }).install();\n\n try {\n await server.start();\n } catch (err) {\n deps.renderer.writeError(\n `ACP server error: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n return 1;\n }\n\n return 0;\n}\n\nasync function listACPAgents(deps: SubcommandDeps): Promise<number> {\n const registry = new EnsembleRegistry();\n const detected = await registry.list();\n deps.renderer.write('Detected ACP agents:\\n\\n');\n // Print installed first, then not-installed with a \"not installed\" note.\n const installed = detected.filter((a) => a.installed);\n const missing = detected.filter((a) => !a.installed);\n for (const a of installed) {\n const ver = a.version ? ` (${a.version.split('\\n')[0]})` : '';\n deps.renderer.write(` \u2713 ${a.id.padEnd(16)} ${a.displayName}${ver}\\n`);\n }\n for (const a of missing) {\n deps.renderer.write(` \u2717 ${a.id.padEnd(16)} ${a.displayName} (${a.reason ?? 'not installed'})\\n`);\n }\n deps.renderer.write(`\\n${installed.length} of ${detected.length} agents available.\\n`);\n const live = await loadLive(deps);\n if (live && live.agents.length > 0) {\n deps.renderer.write(\n `Synced registry: ${live.agents.length} agents available (run \\`wstack acp spawn <id> <task>\\`).\\n`,\n );\n } else {\n deps.renderer.write('Run `wstack acp sync` to pull the full official registry (37+ agents).\\n');\n }\n deps.renderer.write('Use `wstack acp spawn <agent-id> <task>` to delegate a task.\\n');\n return 0;\n}\n\nasync function syncACPRegistry(deps: SubcommandDeps): Promise<number> {\n if (!deps.paths) {\n deps.renderer.writeError('Cannot sync: no cache directory available.\\n');\n return 1;\n }\n deps.renderer.writeInfo('Fetching the official ACP registry\u2026\\n');\n try {\n const { count, location } = await refreshAcpRegistry(deps.paths);\n deps.renderer.write(`Synced ${count} agents from the official ACP registry.\\n`);\n deps.renderer.writeInfo(`Cached at ${location}\\n`);\n return 0;\n } catch (err) {\n deps.renderer.writeError(`ACP registry sync failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n deps.renderer.write('The bundled offline catalog is still available via `wstack acp list`.\\n');\n return 1;\n }\n}\n\nasync function spawnACPAgent(args: string[], deps: SubcommandDeps): Promise<number> {\n const [subagentId, ...taskParts] = args;\n if (!subagentId) {\n deps.renderer.writeError('Usage: wstack acp spawn <agent-id> <task>\\n');\n deps.renderer.write('Run `wstack acp list` to see available agents.\\n');\n return 1;\n }\n\n const task = taskParts.join(' ');\n if (!task) {\n deps.renderer.writeError('Usage: wstack acp spawn <agent-id> <task>\\n');\n deps.renderer.write('Task description is required.\\n');\n return 1;\n }\n\n const live = await loadLive(deps);\n const cmd = resolveAcpAgentCommand(subagentId, acpOverrides(deps), live?.byId);\n if (!cmd) {\n deps.renderer.writeError(`Unknown ACP agent: ${subagentId}\\n`);\n deps.renderer.write('Run `wstack acp list` (or `wstack acp sync`) to see available agents.\\n');\n return 1;\n }\n\n deps.renderer.writeInfo(`Spawning ACP agent '${subagentId}'\u2026\\n`);\n\n // Wire Ctrl+C to an AbortSignal so a long-running external agent is\n // cancelled (runOneAcpTask tears the child down on signal + in its finally).\n const ac = new AbortController();\n const cleanup = () => ac.abort();\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n\n try {\n deps.renderer.writeInfo('Running task\u2026\\n');\n const result = await runOneAcpTask({\n command: cmd.command,\n ...(cmd.args !== undefined ? { args: cmd.args } : {}),\n ...(cmd.env !== undefined ? { env: cmd.env } : {}),\n role: subagentId,\n task,\n signal: ac.signal,\n permissionPolicy: defaultPermissionPolicy,\n onProgress: (event) => {\n const line = formatProgress(event);\n if (line) deps.renderer.writeInfo(` ${line}\\n`);\n },\n });\n\n deps.renderer.write('\\n--- Result ---\\n');\n deps.renderer.write(result.result.length > 0 ? result.result : 'no result');\n deps.renderer.write('\\n---------------\\n');\n deps.renderer.writeInfo(\n `Done. iterations=${result.iterations} toolCalls=${result.toolCalls}\\n`,\n );\n return 0;\n } catch (err) {\n // runOneAcpTask throws structured SubagentError shapes; surface the\n // `kind` for clarity (e.g. aborted_by_parent, bridge_failed).\n const e = err as { kind?: string; message?: string };\n const detail = e.kind ? `[${e.kind}] ` : '';\n const message = e.message ?? (err instanceof Error ? err.message : String(err));\n deps.renderer.writeError(`ACP agent error: ${detail}${message}\\n`);\n return 1;\n } finally {\n process.off('SIGINT', cleanup);\n process.off('SIGTERM', cleanup);\n }\n}\n\n/**\n * Render one streamed ACP progress event as a compact one-line summary\n * for the CLI. Returns '' for events that shouldn't print a line (the\n * final assistant text is already shown in the result block, so we skip\n * `message`/`raw` to avoid double-printing).\n */\nfunction formatProgress(event: ACPProgressEvent): string {\n switch (event.type) {\n case 'tool_call':\n return `\u25B8 ${event.toolCall.title} (${event.toolCall.status})`;\n case 'tool_call_update':\n return event.toolCall.status === 'completed' || event.toolCall.status === 'failed'\n ? ` \u21B3 ${event.toolCall.title}: ${event.toolCall.status}`\n : '';\n case 'diff':\n return `\u270E ${event.diff.path}${event.diff.oldText === null ? ' (new)' : ''}`;\n case 'plan':\n return `\u2630 plan: ${event.entries.length} step(s)`;\n default:\n return '';\n }\n}\n\nasync function parallelACPAgents(\n args: string[],\n deps: SubcommandDeps,\n): Promise<number> {\n const [csv, ...taskParts] = args;\n if (!csv) {\n deps.renderer.writeError('Usage: wstack acp parallel <agent-id-csv> <task>\\n');\n deps.renderer.write('Example: wstack acp parallel claude-code,gemini-cli \"review this diff\"\\n');\n return 1;\n }\n const task = taskParts.join(' ');\n if (!task) {\n deps.renderer.writeError('Usage: wstack acp parallel <agent-id-csv> <task>\\n');\n deps.renderer.writeError('Task description is required.\\n');\n return 1;\n }\n\n // Forward SIGINT to abort the run. Each child process tears down in\n // its own finally; the AbortController propagates into the agent.\n const ac = new AbortController();\n const onSignal = () => ac.abort();\n process.on('SIGINT', onSignal);\n process.on('SIGTERM', onSignal);\n\n try {\n const overrides = acpOverrides(deps);\n const live = await loadLive(deps);\n const result = await runEnsemble({\n agentIds: csv,\n task,\n resolveCmd: (id) => resolveAcpAgentCommand(id, overrides, live?.byId),\n signal: ac.signal,\n onProgress: (agentId, event) => {\n const line = formatProgress(event);\n if (line) deps.renderer.writeInfo(` [${agentId}] ${line}\\n`);\n },\n });\n\n // Surface skipped agents up-front, before the per-agent output.\n const skipped = result.results.filter((r) => r.status === 'skipped');\n if (skipped.length > 0) {\n deps.renderer.writeWarning(\n `Skipping ${skipped.length} agent(s) not installed: ${skipped.map((s) => `${s.agentId} (${s.reason ?? 'not installed'})`).join(', ')}\\n`,\n );\n }\n if (result.summary.succeeded + result.summary.failed + result.summary.cancelled === 0) {\n deps.renderer.writeError('No installed agents to run.\\n');\n deps.renderer.write('Run `wstack acp list` to see what is available.\\n');\n return 1;\n }\n\n const fannedOut = result.results\n .filter((r) => r.status !== 'skipped')\n .map((r) => r.agentId)\n .join(', ');\n deps.renderer.writeInfo(\n `Fanning out to ${result.summary.succeeded + result.summary.failed + result.summary.cancelled} agent(s): ${fannedOut}\\n`,\n );\n deps.renderer.writeInfo(`Task: ${result.task}\\n\\n`);\n\n // Render each result under a clear header, in input order.\n for (const r of result.results) {\n if (r.status === 'skipped') continue;\n deps.renderer.write(`\\n=== ${r.agentId} ===\\n`);\n if (r.status === 'success') {\n deps.renderer.write(r.result && r.result.length > 0 ? r.result : '(no result)');\n deps.renderer.write(\n `\\n[${r.agentId}] success ${r.durationMs}ms iterations=${r.iterations} toolCalls=${r.toolCalls}\\n`,\n );\n } else if (r.status === 'failed') {\n deps.renderer.writeError(\n `[${r.error?.kind ?? 'unknown'}] ${r.error?.message ?? 'failed'}\\n`,\n );\n deps.renderer.write(\n `[${r.agentId}] failed ${r.durationMs}ms\\n`,\n );\n } else {\n // cancelled\n deps.renderer.writeError(\n `[${r.error?.kind ?? 'aborted'}] ${r.error?.message ?? 'cancelled'}\\n`,\n );\n deps.renderer.write(\n `[${r.agentId}] cancelled ${r.durationMs}ms\\n`,\n );\n }\n }\n\n const { succeeded, failed, cancelled, skipped: skip } = result.summary;\n deps.renderer.write(\n `\\nParallel summary: ${succeeded} succeeded, ${failed} failed, ${cancelled} cancelled, ${skip} skipped.\\n`,\n );\n\n // 0 if at least one agent succeeded, 1 otherwise.\n return succeeded > 0 ? 0 : 1;\n } finally {\n process.off('SIGINT', onSignal);\n process.off('SIGTERM', onSignal);\n }\n}\n\nasync function probeACPAgents(args: string[], deps: SubcommandDeps): Promise<number> {\n const csv = args.join(' ');\n let ids: string[];\n if (csv) {\n ids = csv.split(',').flatMap((s) => s.split(/\\s+/)).map((s) => s.trim()).filter(Boolean);\n } else {\n const detected = await new EnsembleRegistry().list();\n ids = detected.filter((a) => a.installed).map((a) => a.id);\n }\n if (ids.length === 0) {\n deps.renderer.writeError('No installed agents to probe.\\n');\n return 1;\n }\n const overrides = acpOverrides(deps);\n const live = await loadLive(deps);\n deps.renderer.writeInfo(\n `Probing ${ids.length} agent(s)\u2026 (npx-based agents may download on first run)\\n`,\n );\n const results = await probeAcpAgents({\n agentIds: ids,\n resolveCmd: (id) => resolveAcpAgentCommand(id, overrides, live?.byId),\n projectRoot: deps.cwd ?? process.cwd(),\n onProgress: (id, r) => deps.renderer.writeInfo(` ${r.ok ? '\u2713' : '\u2717'} ${id} (${r.ms}ms)\\n`),\n });\n deps.renderer.write('\\nACP handshake probe:\\n\\n');\n for (const r of results) {\n if (r.ok) {\n const info = r.agentInfo ? ` \u2014 ${r.agentInfo.name} ${r.agentInfo.version}` : '';\n deps.renderer.write(` \u2713 ${r.id.padEnd(16)} ok ${r.ms}ms${info}\\n`);\n } else {\n deps.renderer.write(` \u2717 ${r.id.padEnd(16)} ${r.error ?? 'failed'} (${r.ms}ms)\\n`);\n }\n }\n const ok = results.filter((r) => r.ok).length;\n deps.renderer.write(`\\n${ok} of ${results.length} agents completed the ACP handshake.\\n`);\n return ok > 0 ? 0 : 1;\n}\n\nasync function benchACPAgents(args: string[], deps: SubcommandDeps): Promise<number> {\n // `--fs` is parsed into deps.flags by the subcommand arg parser (flags never\n // arrive in `args`); tolerate a literal token too for safety.\n const checkFs =\n deps.flags?.fs === true || deps.flags?.fs === 'true' || args.includes('--fs');\n const csv = args.filter((a) => a !== '--fs').join(' ');\n\n let ids: string[];\n if (csv) {\n ids = csv\n .split(',')\n .flatMap((s) => s.split(/\\s+/))\n .map((s) => s.trim())\n .filter(Boolean);\n } else {\n const detected = await new EnsembleRegistry().list();\n ids = detected.filter((a) => a.installed).map((a) => a.id);\n }\n if (ids.length === 0) {\n deps.renderer.writeError('No installed agents to bench.\\n');\n deps.renderer.write('Pass ids explicitly: `wstack acp bench gemini-cli,codex-cli`.\\n');\n return 1;\n }\n\n const ac = new AbortController();\n const onSignal = () => ac.abort();\n process.on('SIGINT', onSignal);\n process.on('SIGTERM', onSignal);\n\n try {\n const overrides = acpOverrides(deps);\n const live = await loadLive(deps);\n deps.renderer.writeInfo(\n `Benching ${ids.length} agent(s)${checkFs ? ' (with fs check)' : ''}: ${ids.join(', ')}\u2026\\n`,\n );\n const result = await runAcpBench({\n agentIds: ids,\n resolveCmd: (id) => resolveAcpAgentCommand(id, overrides, live?.byId),\n projectRoot: deps.cwd ?? process.cwd(),\n checkFs,\n signal: ac.signal,\n onProgress: (agentId, phase, r) => {\n if (phase === 'start') deps.renderer.writeInfo(` \u25B8 ${agentId}\u2026\\n`);\n else if (r) deps.renderer.writeInfo(` \u21B3 ${agentId}: ${r.status}\\n`);\n },\n });\n deps.renderer.write(`\\n${renderAcpBenchText(result)}\\n`);\n // Exit 0 if at least one agent passed; 1 otherwise.\n return result.summary.pass > 0 ? 0 : 1;\n } finally {\n process.off('SIGINT', onSignal);\n process.off('SIGTERM', onSignal);\n }\n}\n", "/**\n * ACP server \u2192 real WrongStack Agent wiring.\n *\n * `wstack acp` exposes WrongStack as an ACP v1 agent so any ACP-capable\n * client (Zed, JetBrains, VS Code ACP extension, etc.) can drive it. The\n * server-side `runTurn` adapter (`makeACPServerAgentTurn` in `@wrongstack/acp`)\n * needs a factory that produces a fresh, isolated `Agent` per session \u2014 this\n * module is that factory, reusing the same boot pieces the interactive CLI\n * uses (`setupProvider`, `createDefaultContainer`, builtin tools).\n *\n * Scope: a minimal but real agent. It deliberately does NOT wire MCP servers,\n * compaction middleware, model-runtime overlays, or lifecycle hooks \u2014 those\n * belong in the interactive host. The ACP server is a headless single-turn\n * surface; a future PR can layer richer session behaviour if needed.\n */\nimport { Agent, Context, createDefaultPipelines } from '@wrongstack/core/agent';\nimport { AutoApprovePermissionPolicy, ToolCapabilities } from '@wrongstack/core/security';\nimport { DefaultLogger } from '@wrongstack/core/infrastructure';\nimport { EventBus, TOKENS } from '@wrongstack/core/kernel';\nimport { type Logger, type PermissionDecision, type PermissionPolicy, type Tool, ToolValidationError } from '@wrongstack/core/types';\nimport { ToolRegistry } from '@wrongstack/core/registry';\nimport type { WstackPaths } from '@wrongstack/core/utils';\nimport { DefaultTokenCounter } from '@wrongstack/core/infrastructure';\nimport { ToolExecutor } from '@wrongstack/core/execution';\nimport type { RunTurnApi } from '@wrongstack/acp/agent';\nimport { createDefaultContainer } from '@wrongstack/runtime';\nimport type { SubcommandDeps } from './subcommands/index.js';\nimport { setupProvider } from './wiring/provider.js';\n\n/**\n * Error thrown when the server cannot start because no model provider is\n * configured. The CLI handler catches this and prints a actionable message\n * (`wstack auth`) rather than a stack trace.\n */\nexport class AcpServerConfigError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'AcpServerConfigError';\n }\n}\n\nexport interface AcpAgentFactoryOptions {\n /** Caller-supplied logger; a minimal stderr logger is created when omitted. */\n logger?: Logger | undefined;\n}\n\n/** Capabilities considered safe to auto-approve without asking the client. */\nconst SAFE_CAPS = new Set<string>([\n ToolCapabilities.FS_READ,\n ToolCapabilities.NET_OUTBOUND,\n ToolCapabilities.COORDINATION_FLEET_READ,\n]);\n\n/**\n * Permission policy that routes side-effecting tool calls to the connected\n * ACP client via `session/request_permission` (the v1-correct behavior),\n * while auto-approving read-only/safe tools. This replaces the blanket\n * auto-approve so an editor driving WrongStack-as-agent gets a real\n * permission prompt before file writes / shell commands run.\n *\n * Exported for direct regression testing of the malformed-response path \u2014\n * `acp-server-agent.test.ts` injects a response whose `optionId` is missing\n * (which previously threw a TypeError at `outcome.optionId.startsWith(...)`\n * and was misattributed to \"no permission channel\" by the surrounding\n * try/catch). Production callers go through `buildAcpServerAgentFactory`,\n * which constructs this internally when the client exposes a permission\n * channel.\n */\nexport class ACPClientPermissionPolicy implements PermissionPolicy {\n constructor(private readonly requestPermission: RunTurnApi['requestPermission']) {}\n\n async evaluate(tool: Tool, input: unknown): Promise<PermissionDecision> {\n const caps = tool.capabilities ?? [];\n // Safe iff every declared capability is in the safe set (and at least\n // one exists). A tool with no declared caps is treated as unsafe.\n const isSafe = caps.length > 0 && caps.every((c) => SAFE_CAPS.has(c));\n if (isSafe) {\n return { permission: 'auto', source: 'default' };\n }\n\n const title = describeToolCall(tool.name, input);\n try {\n const outcome = await this.requestPermission({\n toolCall: { toolCallId: `tc_${tool.name}_${Date.now()}`, title },\n options: [\n { optionId: 'allow_once', name: 'Allow', kind: 'allow_once' },\n { optionId: 'allow_always', name: 'Always allow', kind: 'allow_always' },\n { optionId: 'reject_once', name: 'Reject', kind: 'reject_once' },\n ],\n });\n const optionId = outcome.outcome === 'selected' ? outcome.optionId : undefined;\n const allowed = typeof optionId === 'string' && optionId.startsWith('allow');\n return allowed\n ? { permission: 'auto', source: 'user' }\n : { permission: 'deny', source: 'user', reason: 'rejected by ACP client' };\n } catch {\n // No client channel or the request timed out. Fail safe: deny the\n // side-effecting tool rather than silently running it.\n return { permission: 'deny', source: 'deny', reason: 'no permission channel' };\n }\n }\n\n async trust(): Promise<void> {}\n async deny(): Promise<void> {}\n denyOnce(): void {}\n allowOnce(): void {}\n async reload(): Promise<void> {}\n}\n\nfunction describeToolCall(name: string, input: unknown): string {\n if (input && typeof input === 'object') {\n const r = input as Record<string, unknown>;\n const arg = r.path ?? r.file ?? r.command ?? r.pattern;\n if (typeof arg === 'string') return `${name}: ${arg}`;\n }\n return name;\n}\n\n/**\n * Swap filesystem/terminal tools for ACP-backed versions that operate on the\n * connected client's `fs/*` + `terminal/*`, gated on the client's advertised\n * capabilities. Each ACP tool reuses the builtin's name/description/inputSchema\n * so the model calls it identically \u2014 only execution is redirected.\n *\n * Note: for a local (stdio) client the agent and editor share a filesystem, so\n * tools that aren't redirected still operate on the same real files; this swap\n * adds editor-buffer awareness and makes remote (WebSocket) agents correct.\n */\nfunction wireClientBackedTools(tools: ToolRegistry, api: RunTurnApi): void {\n const caps = api.clientCapabilities ?? {};\n const swap = (name: string, make: (base: Tool) => Tool): void => {\n const base = tools.get(name);\n if (!base) return;\n tools.unregister(name);\n tools.register(make(base));\n };\n if (caps.fs?.readTextFile) {\n swap('read', (base) => makeAcpRead(base, api));\n }\n if (caps.fs?.writeTextFile) {\n swap('write', (base) => makeAcpWrite(base, api));\n swap('edit', (base) => makeAcpEdit(base, api));\n }\n if (caps.terminal) {\n swap('bash', (base) => makeAcpBash(base, api));\n }\n}\n\nfunction makeAcpRead(base: Tool, api: RunTurnApi): Tool {\n return {\n ...base,\n mutating: false,\n execute: async (input: unknown) => {\n const i = (input ?? {}) as { path?: string; offset?: number; limit?: number };\n if (!i.path) throw new ToolValidationError({ message: 'read: path is required', field: 'path' });\n const content = await api.readTextFile({\n path: i.path,\n ...(typeof i.offset === 'number' ? { line: i.offset } : {}),\n ...(typeof i.limit === 'number' ? { limit: i.limit } : {}),\n });\n const lines = content.split(/\\r\\n|\\r|\\n/);\n const start = Math.max(1, i.offset ?? 1);\n const width = String(start + lines.length - 1).length;\n const text = lines\n .map((l, idx) => `${String(start + idx).padStart(width, ' ')}\u2192${l}`)\n .join('\\n');\n return { text, total_lines: lines.length, encoding: 'utf8', truncated: false };\n },\n } as Tool;\n}\n\nfunction makeAcpWrite(base: Tool, api: RunTurnApi): Tool {\n return {\n ...base,\n execute: async (input: unknown) => {\n const i = (input ?? {}) as { path?: string; content?: string };\n if (!i.path) throw new ToolValidationError({ message: 'write: path is required', field: 'path' });\n await api.writeTextFile({ path: i.path, content: i.content ?? '' });\n return { path: i.path, ok: true };\n },\n } as Tool;\n}\n\nfunction makeAcpEdit(base: Tool, api: RunTurnApi): Tool {\n return {\n ...base,\n execute: async (input: unknown) => {\n const i = (input ?? {}) as {\n path?: string;\n old_string?: string;\n new_string?: string;\n replace_all?: boolean;\n };\n if (!i.path) throw new ToolValidationError({ message: 'edit: path is required', field: 'path' });\n if (!i.old_string) throw new ToolValidationError({ message: 'edit: old_string is required', field: 'old_string' });\n const before = await api.readTextFile({ path: i.path });\n const occurrences = before.split(i.old_string).length - 1;\n if (occurrences === 0) {\n throw new ToolValidationError({\n message: `edit: old_string not found in \"${i.path}\"`,\n field: 'old_string',\n context: { path: i.path },\n });\n }\n if (occurrences > 1 && !i.replace_all) {\n throw new ToolValidationError({\n message: `edit: old_string appears ${occurrences} times in \"${i.path}\"; pass replace_all or use a more specific string`,\n field: 'old_string',\n context: { path: i.path, occurrences, replaceAll: false },\n });\n }\n const after = i.replace_all\n ? before.split(i.old_string).join(i.new_string ?? '')\n : before.replace(i.old_string, i.new_string ?? '');\n await api.writeTextFile({ path: i.path, content: after });\n return { path: i.path, replacements: i.replace_all ? occurrences : 1 };\n },\n } as Tool;\n}\n\nfunction makeAcpBash(base: Tool, api: RunTurnApi): Tool {\n return {\n ...base,\n execute: async (input: unknown) => {\n const i = (input ?? {}) as { command?: string; cwd?: string };\n if (!i.command) throw new ToolValidationError({ message: 'bash: command is required', field: 'command' });\n // ACP terminals run the command through the client's shell; we pass it\n // as `sh -c \"<command>\"` so pipelines/operators work as the model expects.\n const { output, exitCode } = await api.runTerminal({\n command: 'sh',\n args: ['-c', i.command],\n ...(i.cwd ? { cwd: i.cwd } : {}),\n });\n return { stdout: output, exit_code: exitCode, command: i.command };\n },\n } as Tool;\n}\n\n/**\n * Build a per-session `Agent` factory suitable for `makeACPServerAgentTurn`.\n *\n * The provider registry + container are built once (they're stateless across\n * sessions); each `agentFor(sessionId, cwd)` call builds a fresh `EventBus`,\n * `Context`, and `Agent` so sessions stay isolated per the v1 spec.\n *\n * Throws `AcpServerConfigError` up front if no provider is configured.\n */\nexport function buildAcpServerAgentFactory(\n deps: SubcommandDeps,\n options: AcpAgentFactoryOptions = {},\n): (sessionId: string, cwd: string, api?: RunTurnApi) => Promise<Agent> {\n const config = deps.config;\n if (!config.provider || !config.model) {\n throw new AcpServerConfigError(\n 'No model provider is configured. Run `wstack auth` to add credentials, ' +\n 'or start the server with `wstack acp --echo` for a no-op connectivity test.',\n );\n }\n\n const logger = options.logger ?? new DefaultLogger({ stderr: true });\n const wpaths: WstackPaths = deps.paths;\n\n // Provider + registry \u2014 built once, reused across sessions.\n // setupProvider is async, but factory consumers expect a sync `agentFor`.\n // We kick it off lazily and memoize so the first session pays the one-time\n // models.dev lookup cost; later sessions reuse the resolved registry.\n type ProviderBoot = Awaited<ReturnType<typeof setupProvider>>;\n let providerBoot: Promise<ProviderBoot> | null = null;\n const bootProvider = (): Promise<ProviderBoot> => {\n if (!providerBoot) {\n providerBoot = setupProvider({ config, modelsRegistry: deps.modelsRegistry, logger });\n }\n return providerBoot;\n };\n\n // Container \u2014 built once; safe to share across sessions (it only holds\n // stateless service bindings, not per-run state).\n const container = createDefaultContainer({\n config,\n wpaths,\n logger,\n modelsRegistry: deps.modelsRegistry,\n });\n\n return async function agentFor(\n _sessionId: string,\n cwd: string,\n api?: RunTurnApi,\n ): Promise<Agent> {\n await container.resolve(TOKENS.MemoryStore).initialize();\n const { provider, providerRegistry } = await bootProvider();\n\n // Per-session event bus \u2014 keeps each ACP session's tool/iteration events\n // isolated from the others.\n const events = new EventBus();\n\n // Per-session tool registry: start from the builtins, then (when the\n // client advertises fs/terminal) swap read/write/edit/bash for\n // ACP-backed versions that operate on the CLIENT's filesystem and\n // terminal \u2014 so the editor's view (incl. unsaved buffers) is the source\n // of truth. A fresh registry avoids mutating the shared builtin one.\n const source = deps.toolRegistry ?? new ToolRegistry();\n const tools = new ToolRegistry();\n for (const t of source.list()) tools.register(t);\n if (api) {\n wireClientBackedTools(tools, api);\n }\n\n // Permission posture: when the ACP client exposes a permission channel\n // (the live `wstack acp` path always does), route side-effecting tools\n // to the client for approval. Without a channel (tests, --echo) fall\n // back to the headless auto-approve, matching the subagent posture in\n // fleet/host.ts.\n const permissionPolicy: PermissionPolicy = api?.requestPermission\n ? new ACPClientPermissionPolicy(api.requestPermission)\n : new AutoApprovePermissionPolicy();\n\n const tokenCounter = new DefaultTokenCounter({\n registry: deps.modelsRegistry,\n providerId: config.provider,\n events,\n });\n\n // Minimal session writer \u2014 ACP sessions don't persist to the JSONL\n // transcript store yet. A no-op writer keeps the Context contract happy.\n const session = { append: async () => {} } as never;\n\n const context = new Context({\n systemPrompt: [],\n provider,\n session,\n signal: new AbortController().signal,\n tokenCounter,\n cwd,\n projectRoot: cwd,\n allowOutsideProjectRoot: config.features?.allowOutsideProjectRoot ?? false,\n model: config.model,\n tools: [...tools.list()] as Tool[],\n agentId: 'acp-server',\n agentName: 'wrongstack-acp',\n });\n\n const toolExecutor = new ToolExecutor(tools, {\n permissionPolicy,\n secretScrubber: container.resolve(TOKENS.SecretScrubber),\n renderer: undefined,\n events,\n confirmAwaiter: undefined,\n iterationTimeoutMs: config.tools?.iterationTimeoutMs ?? 120_000,\n maxToolTimeoutMs: config.tools?.maxToolTimeoutMs ?? 300_000,\n perIterationOutputCapBytes: config.tools?.perIterationOutputCapBytes ?? 100_000,\n tracer: undefined,\n });\n\n return new Agent({\n container,\n tools,\n providers: providerRegistry,\n events,\n pipelines: createDefaultPipelines(),\n context,\n permissionPolicy,\n toolExecutor,\n loopDetection: config.tools?.loopDetection,\n });\n };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acp-registry-cache.d.ts","sourceRoot":"","sources":["../src/acp-registry-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAS1D,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,IAAI,EAAE,cAAc,CAAC;IACrB,qCAAqC;IACrC,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAC9B;AAED,gDAAgD;AAChD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAE/D;AAED,yEAAyE;AACzE,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAkBnC;AAED,+EAA+E;AAC/E,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,WAAW,EAClB,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAClD,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAUjE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acp-server-agent.d.ts","sourceRoot":"","sources":["../src/acp-server-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,KAAK,EAAmC,MAAM,wBAAwB,CAAC;AAIhF,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,KAAK,IAAI,EAAuB,MAAM,wBAAwB,CAAC;AAKrI,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED,MAAM,WAAW,sBAAsB;IACrC,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AASD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,yBAA0B,YAAW,gBAAgB;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAA9C,YAA6B,iBAAiB,EAAE,UAAU,CAAC,mBAAmB,CAAC,EAAI;IAE7E,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA6BtE;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAG;IACzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAG;IAC9B,QAAQ,IAAI,IAAI,CAAG;IACnB,SAAS,IAAI,IAAI,CAAG;IACd,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAG;CACjC;AAmID;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,sBAA2B,GACnC,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,KAAK,CAAC,CAoHtE"}
|
package/dist/arg-parser.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"arg-parser.d.ts","sourceRoot":"","sources":["../src/arg-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,kEAAkE;AAClE,eAAO,MAAM,aAAa,aAuExB,CAAC;AAIH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;IACxC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,yCAAyC;AACzC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAoCpD;AAyCD,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,wBAAwB,EAAE,UAAU,GAAG,SAAS,CAAC;IACjE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAChC;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAyBxD;AAID,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE;QACJ,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B,CAAC;CACH;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CA8CzD"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/subcommands/handlers/audit.ts"],
|
|
4
|
-
"sourcesContent": ["import { color, resolveWstackPaths } from '@wrongstack/core/utils';\nimport { ToolAuditLog } from '@wrongstack/core/storage';\nimport type { SubcommandHandler } from '../index.js';\n\n/**\n * `wstack audit <sessionId>` \u2014 inspect a session's tamper-evident\n * tool audit log. Shows the chained hash entries and runs\n * `ToolAuditLog.verify()` to surface any post-hoc modifications.\n *\n * Subcommands:\n * - `wstack audit <sessionId>` \u2014 show entries + verify\n * - `wstack audit --list` \u2014 list all sessions with audit logs\n */\nexport const auditCmd: SubcommandHandler = async (args, deps) => {\n const wpaths = resolveWstackPaths({\n projectRoot: deps.projectRoot,\n userHome: deps.userHome,\n });\n const log = new ToolAuditLog({ dir: wpaths.projectSessions });\n\n if (args[0] === '--list' || args[0] === '-l') {\n return listAudits(log, wpaths.projectSessions, deps);\n }\n\n const sessionId = args[0];\n if (!sessionId) {\n deps.renderer.writeError(\n 'Usage: wstack audit <sessionId>\\n' +\n ' wstack audit --list\\n\\n' +\n \"Inspects a session's tamper-evident tool audit log. Each entry\\n\" +\n 'is chained to the previous via SHA-256; any post-hoc modification\\n' +\n 'breaks the chain. Use this to verify a session was not tampered\\n' +\n 'with after recording.\\n',\n );\n return 1;\n }\n\n const entries = await log.load(sessionId);\n if (entries.length === 0) {\n deps.renderer.write(\n color.yellow(\n `No audit entries for session ${sessionId}. ` +\n `(The audit log is written when tools are recorded \u2014 check that the session ran with audit enabled.)`,\n ) + '\\n',\n );\n return 0;\n }\n const verify = await log.verify(sessionId);\n const lines: string[] = [\n color.bold(`Audit log for ${sessionId}`),\n verify.ok\n ? ` ${color.green('\u2713 Verified')} ${entries.length} entries, chain intact`\n : ` ${color.red('\u2717 BROKEN')} at entry ${(verify as { brokenAt: number }).brokenAt}: ${(verify as { reason: string }).reason}`,\n '',\n ' Entries (oldest first):',\n ];\n const cap = 12;\n for (const e of entries.slice(0, cap)) {\n const t = color.dim(e.ts.slice(11, 19));\n const idx = color.dim(`#${e.index}`.padStart(4));\n const tool = e.toolName;\n const err = e.isError ? color.red('(error)') : '';\n lines.push(\n ` ${t} ${idx} ${color.cyan(tool.padEnd(14))} ${err} ${color.dim(e.hash.slice(0, 12) + '\u2026')}`,\n );\n }\n if (entries.length > cap) {\n lines.push(color.dim(` \u2026 and ${entries.length - cap} more`));\n }\n deps.renderer.write(lines.join('\\n') + '\\n');\n return verify.ok ? 0 : 1;\n};\n\nasync function listAudits(\n log: ToolAuditLog,\n dir: string,\n deps: import('../index.js').SubcommandDeps,\n): Promise<number> {\n // Sidecar files end in .audit.jsonl. They sit next to their session\n // JSONL \u2014 flat at the root for legacy ids, inside a date-shard dir for\n // modern ids (\"2026-06-11/<base>.audit.jsonl\"). Scan both levels.\n const fs = await import('node:fs/promises');\n const path = await import('node:path');\n const out: Array<{ sessionId: string; entryCount: number; ok: boolean }> = [];\n let foundRoot = true;\n const scan = async (scanDir: string, prefix: string, depth: number): Promise<void> => {\n let entries: import('node:fs').Dirent[];\n try {\n entries = await fs.readdir(scanDir, { withFileTypes: true });\n } catch {\n if (depth === 0) foundRoot = false;\n return;\n }\n for (const entry of entries) {\n if (entry.name.startsWith('.')) continue;\n if (entry.isDirectory()) {\n if (depth === 0) await scan(path.join(scanDir, entry.name), entry.name, depth + 1);\n continue;\n }\n if (!entry.isFile() || !entry.name.endsWith('.audit.jsonl')) continue;\n const base = entry.name.slice(0, -'.audit.jsonl'.length);\n const sessionId = prefix ? `${prefix}/${base}` : base;\n const all = await log.load(sessionId);\n const verify = await log.verify(sessionId);\n out.push({ sessionId, entryCount: all.length, ok: verify.ok });\n }\n };\n await scan(dir, '', 0);\n if (!foundRoot) {\n deps.renderer.write(color.dim(`No sessions dir found at ${dir}. Run a session first.`) + '\\n');\n return 0;\n }\n out.sort((a, b) => a.sessionId.localeCompare(b.sessionId));\n if (out.length === 0) {\n deps.renderer.write(color.dim('No audit logs recorded yet.') + '\\n');\n return 0;\n }\n const lines: string[] = [color.bold(`${out.length} audit log(s)`), ''];\n for (const r of out) {\n const status = r.ok ? color.green('\u2713 intact') : color.red('\u2717 broken');\n lines.push(` ${color.cyan(r.sessionId)} ${color.dim(`${r.entryCount} entries`)} ${status}`);\n }\n deps.renderer.write(lines.join('\\n') + '\\n');\n return 0;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|