wicked-crew 0.5.0 → 0.7.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.
Files changed (167) hide show
  1. package/dist/api/audit.d.ts +70 -0
  2. package/dist/api/audit.d.ts.map +1 -0
  3. package/dist/api/audit.js +131 -0
  4. package/dist/api/audit.js.map +1 -0
  5. package/dist/api/auth.d.ts +192 -0
  6. package/dist/api/auth.d.ts.map +1 -0
  7. package/dist/api/auth.js +515 -0
  8. package/dist/api/auth.js.map +1 -0
  9. package/dist/api/gate-cache.d.ts +8 -0
  10. package/dist/api/gate-cache.d.ts.map +1 -1
  11. package/dist/api/gate-cache.js +10 -0
  12. package/dist/api/gate-cache.js.map +1 -1
  13. package/dist/api/guidance-index.d.ts +39 -0
  14. package/dist/api/guidance-index.d.ts.map +1 -0
  15. package/dist/api/guidance-index.js +67 -0
  16. package/dist/api/guidance-index.js.map +1 -0
  17. package/dist/api/open-path.d.ts +34 -0
  18. package/dist/api/open-path.d.ts.map +1 -0
  19. package/dist/api/open-path.js +101 -0
  20. package/dist/api/open-path.js.map +1 -0
  21. package/dist/api/retry-index.d.ts +30 -0
  22. package/dist/api/retry-index.d.ts.map +1 -0
  23. package/dist/api/retry-index.js +45 -0
  24. package/dist/api/retry-index.js.map +1 -0
  25. package/dist/api/routes.d.ts +164 -1
  26. package/dist/api/routes.d.ts.map +1 -1
  27. package/dist/api/routes.js +769 -21
  28. package/dist/api/routes.js.map +1 -1
  29. package/dist/api/run-files.d.ts +63 -0
  30. package/dist/api/run-files.d.ts.map +1 -0
  31. package/dist/api/run-files.js +271 -0
  32. package/dist/api/run-files.js.map +1 -0
  33. package/dist/api/seat-health.d.ts +55 -0
  34. package/dist/api/seat-health.d.ts.map +1 -0
  35. package/dist/api/seat-health.js +273 -0
  36. package/dist/api/seat-health.js.map +1 -0
  37. package/dist/api/seat-signin.d.ts +27 -0
  38. package/dist/api/seat-signin.d.ts.map +1 -0
  39. package/dist/api/seat-signin.js +143 -0
  40. package/dist/api/seat-signin.js.map +1 -0
  41. package/dist/api/server.d.ts +190 -3
  42. package/dist/api/server.d.ts.map +1 -1
  43. package/dist/api/server.js +365 -11
  44. package/dist/api/server.js.map +1 -1
  45. package/dist/api/stall-watchdog.d.ts +62 -0
  46. package/dist/api/stall-watchdog.d.ts.map +1 -0
  47. package/dist/api/stall-watchdog.js +138 -0
  48. package/dist/api/stall-watchdog.js.map +1 -0
  49. package/dist/cli/index.js +171 -12
  50. package/dist/cli/index.js.map +1 -1
  51. package/dist/cli/mcp.d.ts +14 -0
  52. package/dist/cli/mcp.d.ts.map +1 -0
  53. package/dist/cli/mcp.js +119 -0
  54. package/dist/cli/mcp.js.map +1 -0
  55. package/dist/core/adapter.d.ts +87 -10
  56. package/dist/core/adapter.d.ts.map +1 -1
  57. package/dist/core/adapter.js +347 -28
  58. package/dist/core/adapter.js.map +1 -1
  59. package/dist/core/bridge-reaper.d.ts +134 -0
  60. package/dist/core/bridge-reaper.d.ts.map +1 -0
  61. package/dist/core/bridge-reaper.js +286 -0
  62. package/dist/core/bridge-reaper.js.map +1 -0
  63. package/dist/core/deliver.d.ts +118 -0
  64. package/dist/core/deliver.d.ts.map +1 -0
  65. package/dist/core/deliver.js +241 -0
  66. package/dist/core/deliver.js.map +1 -0
  67. package/dist/core/deliverable-floor.d.ts +103 -0
  68. package/dist/core/deliverable-floor.d.ts.map +1 -0
  69. package/dist/core/deliverable-floor.js +173 -0
  70. package/dist/core/deliverable-floor.js.map +1 -0
  71. package/dist/core/exec.d.ts +2 -0
  72. package/dist/core/exec.d.ts.map +1 -1
  73. package/dist/core/exec.js.map +1 -1
  74. package/dist/core/types.d.ts +92 -352
  75. package/dist/core/types.d.ts.map +1 -1
  76. package/dist/core/types.js +14 -4
  77. package/dist/core/types.js.map +1 -1
  78. package/dist/interactive/bridge-pool.d.ts +99 -0
  79. package/dist/interactive/bridge-pool.d.ts.map +1 -0
  80. package/dist/interactive/bridge-pool.js +244 -0
  81. package/dist/interactive/bridge-pool.js.map +1 -0
  82. package/dist/interactive/bridge-root.d.ts +36 -0
  83. package/dist/interactive/bridge-root.d.ts.map +1 -0
  84. package/dist/interactive/bridge-root.js +48 -0
  85. package/dist/interactive/bridge-root.js.map +1 -0
  86. package/dist/interactive/chat-events.d.ts +207 -0
  87. package/dist/interactive/chat-events.d.ts.map +1 -0
  88. package/dist/interactive/chat-events.js +769 -0
  89. package/dist/interactive/chat-events.js.map +1 -0
  90. package/dist/interactive/demo-events.d.ts +283 -0
  91. package/dist/interactive/demo-events.d.ts.map +1 -0
  92. package/dist/interactive/demo-events.js +889 -0
  93. package/dist/interactive/demo-events.js.map +1 -0
  94. package/dist/interactive/draft-events.d.ts +224 -0
  95. package/dist/interactive/draft-events.d.ts.map +1 -0
  96. package/dist/interactive/draft-events.js +793 -0
  97. package/dist/interactive/draft-events.js.map +1 -0
  98. package/dist/interactive/edit-events.d.ts +194 -0
  99. package/dist/interactive/edit-events.d.ts.map +1 -0
  100. package/dist/interactive/edit-events.js +601 -0
  101. package/dist/interactive/edit-events.js.map +1 -0
  102. package/dist/interactive/ledger.d.ts +39 -0
  103. package/dist/interactive/ledger.d.ts.map +1 -0
  104. package/dist/interactive/ledger.js +93 -0
  105. package/dist/interactive/ledger.js.map +1 -0
  106. package/dist/interactive/proxy-routes.d.ts +39 -0
  107. package/dist/interactive/proxy-routes.d.ts.map +1 -0
  108. package/dist/interactive/proxy-routes.js +189 -0
  109. package/dist/interactive/proxy-routes.js.map +1 -0
  110. package/dist/interactive/repo-snapshot.d.ts +100 -0
  111. package/dist/interactive/repo-snapshot.d.ts.map +1 -0
  112. package/dist/interactive/repo-snapshot.js +289 -0
  113. package/dist/interactive/repo-snapshot.js.map +1 -0
  114. package/dist/interactive/ws-relay.d.ts +85 -0
  115. package/dist/interactive/ws-relay.d.ts.map +1 -0
  116. package/dist/interactive/ws-relay.js +191 -0
  117. package/dist/interactive/ws-relay.js.map +1 -0
  118. package/dist/projects/activity.d.ts +29 -0
  119. package/dist/projects/activity.d.ts.map +1 -0
  120. package/dist/projects/activity.js +172 -0
  121. package/dist/projects/activity.js.map +1 -0
  122. package/dist/projects/charter.d.ts +28 -0
  123. package/dist/projects/charter.d.ts.map +1 -0
  124. package/dist/projects/charter.js +53 -0
  125. package/dist/projects/charter.js.map +1 -0
  126. package/dist/projects/events.d.ts +55 -0
  127. package/dist/projects/events.d.ts.map +1 -0
  128. package/dist/projects/events.js +141 -0
  129. package/dist/projects/events.js.map +1 -0
  130. package/dist/projects/graph-paths.d.ts +92 -0
  131. package/dist/projects/graph-paths.d.ts.map +1 -0
  132. package/dist/projects/graph-paths.js +130 -0
  133. package/dist/projects/graph-paths.js.map +1 -0
  134. package/dist/projects/graph.d.ts +179 -0
  135. package/dist/projects/graph.d.ts.map +1 -0
  136. package/dist/projects/graph.js +775 -0
  137. package/dist/projects/graph.js.map +1 -0
  138. package/dist/projects/membership-index.d.ts +25 -0
  139. package/dist/projects/membership-index.d.ts.map +1 -0
  140. package/dist/projects/membership-index.js +46 -0
  141. package/dist/projects/membership-index.js.map +1 -0
  142. package/dist/projects/routes.d.ts +97 -0
  143. package/dist/projects/routes.d.ts.map +1 -0
  144. package/dist/projects/routes.js +510 -0
  145. package/dist/projects/routes.js.map +1 -0
  146. package/dist/projects/settings.d.ts +32 -0
  147. package/dist/projects/settings.d.ts.map +1 -0
  148. package/dist/projects/settings.js +64 -0
  149. package/dist/projects/settings.js.map +1 -0
  150. package/dist/qe/acceptance.d.ts +137 -0
  151. package/dist/qe/acceptance.d.ts.map +1 -0
  152. package/dist/qe/acceptance.js +249 -0
  153. package/dist/qe/acceptance.js.map +1 -0
  154. package/dist/qe/gate-events.d.ts +111 -0
  155. package/dist/qe/gate-events.d.ts.map +1 -0
  156. package/dist/qe/gate-events.js +168 -0
  157. package/dist/qe/gate-events.js.map +1 -0
  158. package/dist/qe/ledger.d.ts +100 -0
  159. package/dist/qe/ledger.d.ts.map +1 -0
  160. package/dist/qe/ledger.js +154 -0
  161. package/dist/qe/ledger.js.map +1 -0
  162. package/dist/studio/assets/index-8p8uwCxG.js +530 -0
  163. package/dist/studio/assets/index-D6S9zUtO.css +32 -0
  164. package/dist/studio/index.html +5 -3
  165. package/package.json +10 -4
  166. package/dist/studio/assets/index-DaaUU8Ep.css +0 -32
  167. package/dist/studio/assets/index-Fu5DRC00.js +0 -423
@@ -0,0 +1,138 @@
1
+ // Worker stall watchdog (crew#287): platform-native liveness detection for executing runs.
2
+ //
3
+ // A wedged worker emits nothing — no unitOutputDelta, no gate frames — and its run sits in
4
+ // `executing` until an operator notices by absence (run 8aa1cd42: a design unit burned 3+ hours
5
+ // with zero output before anyone looked). The daemon already observes every engine event on its
6
+ // single CoreEvent relay, so "time since the last event" is cheap to compute right here:
7
+ //
8
+ // - `ingest` stamps the run's last-observed-event time on EVERY frame carrying a `session`
9
+ // (any CoreEvent counts, `unitOutputDelta` included) and RE-ARMS the alert for that run.
10
+ // - a periodic sweep lists the runs whose engine status is `executing` (`awaiting_human` is
11
+ // quiet BY DESIGN and never counts) and, when a run has been silent past the threshold
12
+ // (`workerStallMinutes` setting, default 15), broadcasts ONE synthetic frame on /ws —
13
+ // `{ type: "workerStalled", session, ord?, quietForMs }` — and logs it at warn.
14
+ // - once per quiet period: after the frame fires, the run stays alerted until a NEW event for
15
+ // it arrives; a second quiet period then emits a second frame.
16
+ //
17
+ // DETECTION ONLY. The watchdog never cancels, mutates, or re-dispatches a run — the operator
18
+ // decides. The synthetic frame goes straight to the /ws fan-out, never back through the engine
19
+ // relay, so it cannot stamp or re-arm itself.
20
+ import { DEFAULT_WORKER_STALL_MINUTES } from '../core/types.js';
21
+ /** Default sweep cadence — frequent enough that `quietForMs` is at most ~30s stale. */
22
+ export const DEFAULT_SWEEP_INTERVAL_MS = 30_000;
23
+ export class WorkerStallWatchdog {
24
+ deps;
25
+ /** run id → epoch ms of the last engine event observed for it (or the seed, see sweep). */
26
+ lastEventAt = new Map();
27
+ /** run id → last unit ord any of its events named. */
28
+ lastOrd = new Map();
29
+ /** Runs already alerted for the CURRENT quiet period (cleared by any new event). */
30
+ alerted = new Set();
31
+ now;
32
+ log;
33
+ handle = null;
34
+ sweeping = false;
35
+ constructor(deps) {
36
+ this.deps = deps;
37
+ this.now = deps.now ?? Date.now;
38
+ this.log = deps.log ?? (() => undefined);
39
+ }
40
+ /** Fold one relay frame: any event for a run is proof of life — stamp its clock and RE-ARM. */
41
+ ingest(event) {
42
+ const session = typeof event.session === 'string' && event.session.length > 0 ? event.session : undefined;
43
+ if (session === undefined)
44
+ return;
45
+ this.lastEventAt.set(session, this.now());
46
+ if (typeof event.ord === 'number')
47
+ this.lastOrd.set(session, event.ord);
48
+ this.alerted.delete(session);
49
+ }
50
+ /** One detection pass. Public so tests drive it directly; the armed interval calls it too. */
51
+ async sweep() {
52
+ if (this.sweeping)
53
+ return; // a slow engine read must never stack sweeps
54
+ this.sweeping = true;
55
+ try {
56
+ let executing;
57
+ try {
58
+ executing = await this.deps.listExecuting();
59
+ }
60
+ catch (err) {
61
+ this.log(`[stall-watchdog] run listing failed, skipping sweep: ${String(err)}`);
62
+ return;
63
+ }
64
+ const ids = new Set(executing.map((r) => r.id));
65
+ // Prune state for runs no longer executing (completed / cancelled / awaiting_human):
66
+ // their silence is not a stall, and a later return to executing starts a fresh clock.
67
+ for (const key of [...this.lastEventAt.keys()]) {
68
+ if (!ids.has(key)) {
69
+ this.lastEventAt.delete(key);
70
+ this.lastOrd.delete(key);
71
+ this.alerted.delete(key);
72
+ }
73
+ }
74
+ const thresholdMs = await this.thresholdMs();
75
+ const now = this.now();
76
+ for (const run of executing) {
77
+ const last = this.lastEventAt.get(run.id);
78
+ if (last === undefined) {
79
+ // First observation with no event on record — e.g. the run was already executing
80
+ // (and possibly already wedged) before this daemon booted. Silence before the relay
81
+ // existed is unknowable, so the quiet clock starts HERE; the threshold still trips
82
+ // one full quiet period later, which is exactly the restart-survival the issue asks.
83
+ this.lastEventAt.set(run.id, now);
84
+ continue;
85
+ }
86
+ const quietForMs = now - last;
87
+ if (quietForMs < thresholdMs || this.alerted.has(run.id))
88
+ continue;
89
+ this.alerted.add(run.id);
90
+ const ord = this.lastOrd.get(run.id) ?? run.ord;
91
+ this.deps.broadcast({
92
+ type: 'workerStalled',
93
+ session: run.id,
94
+ ...(ord !== undefined ? { ord } : {}),
95
+ quietForMs,
96
+ });
97
+ this.log(`[stall-watchdog] run ${run.id}${ord !== undefined ? ` (unit ${ord})` : ''} silent for ` +
98
+ `${(quietForMs / 60_000).toFixed(1)} min — workerStalled frame broadcast ` +
99
+ `(detection only: the run was NOT touched; the operator decides)`);
100
+ }
101
+ }
102
+ finally {
103
+ this.sweeping = false;
104
+ }
105
+ }
106
+ /** Arm the periodic sweep. Unref'd — the daemon's server lifecycle owns shutdown. */
107
+ start(intervalMs = DEFAULT_SWEEP_INTERVAL_MS) {
108
+ if (this.handle !== null)
109
+ return;
110
+ this.handle = setInterval(() => {
111
+ this.sweep().catch((err) => {
112
+ this.log(`[stall-watchdog] sweep failed: ${String(err)}`);
113
+ });
114
+ }, intervalMs);
115
+ this.handle.unref?.();
116
+ }
117
+ stop() {
118
+ if (this.handle !== null)
119
+ clearInterval(this.handle);
120
+ this.handle = null;
121
+ }
122
+ /** Threshold in ms — an unset/invalid setting falls back to the 15-minute default. */
123
+ async thresholdMs() {
124
+ let minutes;
125
+ try {
126
+ minutes = await this.deps.stallMinutes?.();
127
+ }
128
+ catch (err) {
129
+ this.log(`[stall-watchdog] threshold read failed, using default: ${String(err)}`);
130
+ minutes = undefined;
131
+ }
132
+ const m = typeof minutes === 'number' && Number.isFinite(minutes) && minutes > 0
133
+ ? minutes
134
+ : DEFAULT_WORKER_STALL_MINUTES;
135
+ return m * 60_000;
136
+ }
137
+ }
138
+ //# sourceMappingURL=stall-watchdog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stall-watchdog.js","sourceRoot":"","sources":["../../src/api/stall-watchdog.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -6,7 +6,10 @@ import { mkdirSync } from 'node:fs';
6
6
  import { randomUUID } from 'node:crypto';
7
7
  import { CoreAdapter } from '../core/adapter.js';
8
8
  import { ensureBridgesOnPath } from '../core/bridge-path.js';
9
+ import { bridgeReaper, reapOrphansAtBoot } from '../core/bridge-reaper.js';
9
10
  import { startServer } from '../api/server.js';
11
+ import { resolveAuthMode } from '../api/auth.js';
12
+ import { runMcpServer } from './mcp.js';
10
13
  const [, , command, ...argv] = process.argv;
11
14
  function flag(args, name) {
12
15
  const i = args.indexOf(name);
@@ -15,6 +18,14 @@ function flag(args, name) {
15
18
  function hasFlag(args, name) {
16
19
  return args.includes(name);
17
20
  }
21
+ /** `true` when an env var is set to a falsy string: "", "0", "false", "no", "off" (case-insensitive, trimmed).
22
+ * An empty / whitespace-only value is treated as falsy so `VAR=` (common shell unset idiom) disables the feature. */
23
+ function isFalsy(val) {
24
+ if (val === undefined)
25
+ return false;
26
+ const v = val.trim().toLowerCase();
27
+ return v === '' || v === '0' || v === 'false' || v === 'no' || v === 'off';
28
+ }
18
29
  /** Durable state home (~/.wicked-crew) — runs/evidence must survive a reboot, which the
19
30
  * OS temp dir explicitly does not. Created on demand; --db/--bus-db still override. */
20
31
  function stateHome() {
@@ -34,7 +45,53 @@ function parseBootstrap(args) {
34
45
  const busDbPath = flag(args, '--bus-db') ??
35
46
  process.env['WICKED_BUS_DB'] ??
36
47
  join(stateHome(), 'bus.db');
37
- return { dbPath, port, stub, engineExec, busDbPath };
48
+ // OPT-IN (Phase 6a, same shape as --engine-exec): consume the QE gate's bus
49
+ // events (`wicked.qe.gate.*` + `wicked.qe.deploy.completed`) into the
50
+ // acceptance freshness cache. Default OFF → the acceptance route lazy-reads
51
+ // the ledger on demand, which needs no bus at all.
52
+ const qeGateEvents = hasFlag(args, '--qe-gate-events') ||
53
+ (process.env['WICKED_QE_GATE_EVENTS'] !== undefined && process.env['WICKED_QE_GATE_EVENTS'] !== '');
54
+ // Which bus db the QE subscription reads: an EXPLICIT --bus-db / WICKED_BUS_DB
55
+ // wins; otherwise wicked-bus's own default (`~/.something-wicked/wicked-bus/bus.db`) —
56
+ // the db the QE pipeline's CLI emits to. Deliberately NOT the exec seam's
57
+ // `~/.wicked-crew/bus.db` fallback: that default is crew-private, and the QE
58
+ // events are cross-product traffic that never lands there.
59
+ const qeBusDbPath = flag(args, '--bus-db') ?? process.env['WICKED_BUS_DB'];
60
+ // DEFAULT ON (closes #261): answer wicked-interactive's `doc.created` (kind:source) with a
61
+ // governed `interactive-draft` run. The bus is already required for the project bridge.
62
+ // Project-bound docs launch FILED runs; unbound (Unfiled) docs launch unfiled governed runs
63
+ // (CREW-UX-4 — slice U made Unfiled first-class, so nothing else answers them). Opt-out:
64
+ // --no-interactive-draft-events or WICKED_INTERACTIVE_DRAFT_EVENTS=0|false|no|off|""
65
+ // The bus db follows the SAME resolution as the QE seam — explicit --bus-db / WICKED_BUS_DB wins,
66
+ // otherwise wicked-bus's own default (which honors WICKED_BUS_DATA_DIR): interactive's service
67
+ // resolves its bus exactly that way, so by default the two meet on the same db.
68
+ const interactiveDraftEvents = !hasFlag(args, '--no-interactive-draft-events') &&
69
+ !isFalsy(process.env['WICKED_INTERACTIVE_DRAFT_EVENTS']);
70
+ // DEFAULT ON (closes #261, same rationale): answer wicked-interactive's structural feedback
71
+ // handoffs (`feedback.processed`, awaiting_structural > 0) with a governed `interactive-edit`
72
+ // run. Opt-out: --no-interactive-edit-events or WICKED_INTERACTIVE_EDIT_EVENTS=0|false|no|off|""
73
+ const interactiveEditEvents = !hasFlag(args, '--no-interactive-edit-events') &&
74
+ !isFalsy(process.env['WICKED_INTERACTIVE_EDIT_EVENTS']);
75
+ // DEFAULT ON (CREW-UX-5, same rationale): answer wicked-interactive's conversational
76
+ // iteration asks (`chat.posted`, role:user on an existing kind:source doc) with a governed
77
+ // `interactive-chat` run — the doc thread's plain send had NO answerer since the ad-hoc
78
+ // assist agent retired. Opt-out:
79
+ // --no-interactive-chat-events or WICKED_INTERACTIVE_CHAT_EVENTS=0|false|no|off|""
80
+ const interactiveChatEvents = !hasFlag(args, '--no-interactive-chat-events') &&
81
+ !isFalsy(process.env['WICKED_INTERACTIVE_CHAT_EVENTS']);
82
+ // DEFAULT ON (CREW-UX-9, same rationale): answer wicked-interactive's demo docs —
83
+ // `doc.created` (kind:demo) authors `demo.spec.mjs` and triggers the model-free recording;
84
+ // a demo doc's step feedback (`feedback.processed`, manifest kind demo) re-authors it.
85
+ // Opt-out: --no-interactive-demo-events or WICKED_INTERACTIVE_DEMO_EVENTS=0|false|no|off|""
86
+ const interactiveDemoEvents = !hasFlag(args, '--no-interactive-demo-events') &&
87
+ !isFalsy(process.env['WICKED_INTERACTIVE_DEMO_EVENTS']);
88
+ // Deterministic-worker override for harnesses (a JSON AgenticCli array); unset = the roster.
89
+ const interactiveSeats = process.env['WICKED_INTERACTIVE_SEATS'];
90
+ return {
91
+ dbPath, port, stub, engineExec, busDbPath, qeGateEvents, qeBusDbPath,
92
+ interactiveDraftEvents, interactiveEditEvents, interactiveChatEvents, interactiveDemoEvents,
93
+ interactiveSeats,
94
+ };
38
95
  }
39
96
  let adapterRef;
40
97
  async function bootstrap(opts) {
@@ -50,7 +107,65 @@ async function bootstrap(opts) {
50
107
  busDbPath: opts.busDbPath,
51
108
  });
52
109
  adapterRef = adapter;
53
- const { port } = await startServer(adapter, opts.port);
110
+ const serverOptions = {
111
+ ...(opts.qeGateEvents
112
+ ? {
113
+ qeGateEvents: {
114
+ enabled: true,
115
+ ...(opts.qeBusDbPath !== undefined ? { dbPath: opts.qeBusDbPath } : {}),
116
+ },
117
+ }
118
+ : {}),
119
+ ...(opts.interactiveDraftEvents
120
+ ? {
121
+ interactiveDraftEvents: {
122
+ enabled: true,
123
+ // Same bus-db resolution as the QE seam (explicit wins; else wicked-bus defaults).
124
+ ...(opts.qeBusDbPath !== undefined ? { dbPath: opts.qeBusDbPath } : {}),
125
+ ...(opts.interactiveSeats !== undefined ? { clisJson: opts.interactiveSeats } : {}),
126
+ },
127
+ }
128
+ : {}),
129
+ ...(opts.interactiveEditEvents
130
+ ? {
131
+ interactiveEditEvents: {
132
+ enabled: true,
133
+ // Same bus-db resolution as the QE seam (explicit wins; else wicked-bus defaults).
134
+ ...(opts.qeBusDbPath !== undefined ? { dbPath: opts.qeBusDbPath } : {}),
135
+ ...(opts.interactiveSeats !== undefined ? { clisJson: opts.interactiveSeats } : {}),
136
+ },
137
+ }
138
+ : {}),
139
+ ...(opts.interactiveChatEvents
140
+ ? {
141
+ interactiveChatEvents: {
142
+ enabled: true,
143
+ // Same bus-db resolution as the QE seam (explicit wins; else wicked-bus defaults).
144
+ ...(opts.qeBusDbPath !== undefined ? { dbPath: opts.qeBusDbPath } : {}),
145
+ ...(opts.interactiveSeats !== undefined ? { clisJson: opts.interactiveSeats } : {}),
146
+ },
147
+ }
148
+ : {}),
149
+ ...(opts.interactiveDemoEvents
150
+ ? {
151
+ interactiveDemoEvents: {
152
+ enabled: true,
153
+ // Same bus-db resolution as the QE seam (explicit wins; else wicked-bus defaults).
154
+ ...(opts.qeBusDbPath !== undefined ? { dbPath: opts.qeBusDbPath } : {}),
155
+ ...(opts.interactiveSeats !== undefined ? { clisJson: opts.interactiveSeats } : {}),
156
+ },
157
+ }
158
+ : {}),
159
+ // Projects (DES-PROJECT-001): default-ON, loud-non-fatal. Bus-db resolution follows the
160
+ // cross-product seams above (explicit --bus-db / WICKED_BUS_DB wins; otherwise wicked-bus's
161
+ // own default, where interactive's service also lands) — NOT the exec seam's crew-private
162
+ // fallback: `wicked.crew.project.*` and the interactive activity bridge are cross-product
163
+ // traffic, and the two skins must meet on one db.
164
+ ...(opts.qeBusDbPath !== undefined
165
+ ? { projectEvents: { dbPath: opts.qeBusDbPath } }
166
+ : {}),
167
+ };
168
+ const { port } = await startServer(adapter, opts.port, undefined, Object.keys(serverOptions).length > 0 ? serverOptions : undefined);
54
169
  installShutdownHandlers();
55
170
  return { adapter, port };
56
171
  }
@@ -60,18 +175,38 @@ function installShutdownHandlers() {
60
175
  if (shuttingDown)
61
176
  return;
62
177
  shuttingDown = true;
63
- // Close the single subscription so the pump thread + tsfn release and the
64
- // process can exit on its own.
65
- try {
66
- adapterRef?.close();
67
- }
68
- catch {
69
- /* already closed */
70
- }
71
- process.exit(0);
178
+ void (async () => {
179
+ // Reap ACP bridge children BEFORE this process goes away (crew#285): the engine's
180
+ // in-memory kill handles die with the daemon, so this is the last actor that can
181
+ // still find the bridges (they are our direct OS children). SIGTERM, a ~2 s grace,
182
+ // then SIGKILL for anything that ignored it. Best-effort — a reap failure must
183
+ // never block shutdown.
184
+ try {
185
+ await bridgeReaper.shutdown();
186
+ }
187
+ catch {
188
+ /* reaping is best-effort */
189
+ }
190
+ // Close the single subscription so the pump thread + tsfn release and the
191
+ // process can exit on its own.
192
+ try {
193
+ adapterRef?.close();
194
+ }
195
+ catch {
196
+ /* already closed */
197
+ }
198
+ process.exit(0);
199
+ })();
72
200
  };
73
201
  process.on('SIGTERM', shutdown);
74
202
  process.on('SIGINT', shutdown);
203
+ // Normal exit (`process.exit` anywhere, main() falling off): an 'exit' handler cannot
204
+ // await, so this is the synchronous SIGTERM sweep. After the graceful path above it is
205
+ // a no-op re-scan; on a plain exit it is the only reaping that happens, and the
206
+ // bridges' own stdin-EOF watchdog (packages/agent-acp-bridges) is the final backstop.
207
+ process.on('exit', () => {
208
+ bridgeReaper.sweepSync();
209
+ });
75
210
  }
76
211
  function printReady(fields) {
77
212
  // Machine-readable readiness marker for evidence harnesses.
@@ -81,14 +216,29 @@ async function main() {
81
216
  const t0 = performance.now();
82
217
  if (command === 'serve') {
83
218
  const opts = parseBootstrap(argv);
219
+ // Boot sweep (crew#285): bridges orphaned by a PRIOR daemon generation are
220
+ // reparented to init and would otherwise live forever — shutdown-path reaping
221
+ // can never see them. Conservative: only ppid==1 matches, so another live
222
+ // daemon's bridges are untouched.
223
+ const orphans = reapOrphansAtBoot();
224
+ if (orphans.length > 0)
225
+ console.warn(`[bridge-reaper] reaped ${orphans.length} orphaned bridge(s) from a previous daemon: ${orphans.join(', ')}`);
84
226
  const { adapter, port } = await bootstrap(opts);
85
227
  printReady({
86
228
  mode: 'serve',
87
229
  port,
88
230
  db: opts.dbPath,
89
231
  stub: opts.stub,
232
+ // The identity seam's resolved mode (task #88): `required` under
233
+ // WICKED_RUNTIME=team / WICKED_CREW_AUTH=required, else `off` (local).
234
+ auth: resolveAuthMode(),
90
235
  engineExec: adapter.engineExec,
91
236
  busDb: adapter.engineExec ? adapter.busDbPath : undefined,
237
+ qeGateEvents: opts.qeGateEvents || undefined,
238
+ interactiveDraftEvents: opts.interactiveDraftEvents || undefined,
239
+ interactiveEditEvents: opts.interactiveEditEvents || undefined,
240
+ interactiveChatEvents: opts.interactiveChatEvents || undefined,
241
+ interactiveDemoEvents: opts.interactiveDemoEvents || undefined,
92
242
  startupMs: Math.round(performance.now() - t0),
93
243
  });
94
244
  }
@@ -138,9 +288,18 @@ async function main() {
138
288
  else if (command === 'status') {
139
289
  await runStatus(argv);
140
290
  }
291
+ else if (command === 'mcp') {
292
+ const portStr = flag(argv, '--port');
293
+ const port = portStr !== undefined ? Number(portStr) : 7701;
294
+ if (!Number.isFinite(port) || !Number.isInteger(port) || port < 1 || port > 65535) {
295
+ console.error(`--port must be an integer between 1 and 65535 (got: ${portStr ?? '(missing)'})`);
296
+ process.exit(1);
297
+ }
298
+ await runMcpServer(port);
299
+ }
141
300
  else {
142
301
  console.error(`Unknown command: ${command ?? '(none)'}`);
143
- console.error('Usage: wicked-crew serve|start|resume|gate|status');
302
+ console.error('Usage: wicked-crew serve|start|resume|gate|status|mcp');
144
303
  process.exit(1);
145
304
  }
146
305
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * `wicked-crew mcp` — stdio MCP server that proxies the wicked-crew daemon's
3
+ * run-lifecycle surface. One tool per verb; all calls are 1:1 HTTP passthroughs
4
+ * to a running daemon. The MCP server is stateless: it carries NO in-process
5
+ * adapter and does NOT open the engine DB.
6
+ *
7
+ * Usage:
8
+ * wicked-crew mcp [--port <n>] # connects to daemon at 127.0.0.1:<port>
9
+ *
10
+ * The daemon must already be running (`wicked-crew serve`). Governance semantics,
11
+ * repo-scoping, and run authority all live in the daemon — no new authority here.
12
+ */
13
+ export declare function runMcpServer(port: number): Promise<void>;
14
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/cli/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAwCH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+H9D"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * `wicked-crew mcp` — stdio MCP server that proxies the wicked-crew daemon's
3
+ * run-lifecycle surface. One tool per verb; all calls are 1:1 HTTP passthroughs
4
+ * to a running daemon. The MCP server is stateless: it carries NO in-process
5
+ * adapter and does NOT open the engine DB.
6
+ *
7
+ * Usage:
8
+ * wicked-crew mcp [--port <n>] # connects to daemon at 127.0.0.1:<port>
9
+ *
10
+ * The daemon must already be running (`wicked-crew serve`). Governance semantics,
11
+ * repo-scoping, and run authority all live in the daemon — no new authority here.
12
+ */
13
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
14
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
15
+ import { z } from 'zod';
16
+ // ─── Crew daemon client ───────────────────────────────────────────────────────
17
+ class CrewClient {
18
+ base;
19
+ constructor(port) {
20
+ this.base = `http://127.0.0.1:${port}/api/v1`;
21
+ }
22
+ async get(path) {
23
+ const res = await fetch(`${this.base}${path}`);
24
+ if (!res.ok)
25
+ throw new Error(`GET ${path} → ${res.status}: ${await res.text()}`);
26
+ return res.json();
27
+ }
28
+ async post(path, body) {
29
+ const res = await fetch(`${this.base}${path}`, {
30
+ method: 'POST',
31
+ headers: { 'Content-Type': 'application/json' },
32
+ body: JSON.stringify(body),
33
+ });
34
+ if (!res.ok)
35
+ throw new Error(`POST ${path} → ${res.status}: ${await res.text()}`);
36
+ return res.json();
37
+ }
38
+ }
39
+ // ─── Tool result helpers ──────────────────────────────────────────────────────
40
+ function ok(data) {
41
+ return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
42
+ }
43
+ // ─── MCP server ──────────────────────────────────────────────────────────────
44
+ export async function runMcpServer(port) {
45
+ const client = new CrewClient(port);
46
+ // Probe the daemon before advertising ourselves — fail loudly if unreachable.
47
+ // Capture the version from the health response so serverInfo stays in sync with the daemon.
48
+ let daemonVersion = '0.0.0';
49
+ try {
50
+ const health = await client.get('/health');
51
+ if (typeof health.version === 'string')
52
+ daemonVersion = health.version;
53
+ }
54
+ catch {
55
+ throw new Error(`[wicked-crew mcp] Cannot reach daemon at port ${port}. ` +
56
+ `Start it first with: wicked-crew serve --port ${port}`);
57
+ }
58
+ const server = new McpServer({ name: 'wicked-crew', version: daemonVersion });
59
+ // ── launch_run ─────────────────────────────────────────────────────────────
60
+ server.tool('launch_run', 'Launch a new governed workflow run on the wicked-crew daemon. ' +
61
+ 'Returns the run ID which can be used with the other tools.', {
62
+ problem: z.string().min(1).describe('The task description / problem statement for the run'),
63
+ workflow: z.string().optional().describe('Workflow id (e.g. "feature", "bug", "survey-repo"). ' +
64
+ 'Use list_workflows to see available ids.'),
65
+ repo: z.string().optional().describe('Registered repo reference (id returned by the daemon registry). ' +
66
+ 'Required for workflows that need a code graph.'),
67
+ project_id: z.string().optional().describe('File the run into a project. The project must exist and be active.'),
68
+ }, async ({ problem, workflow, repo, project_id }) => {
69
+ const body = { problem };
70
+ if (workflow)
71
+ body['workflow'] = workflow;
72
+ if (repo)
73
+ body['repoRef'] = repo;
74
+ if (project_id)
75
+ body['projectId'] = project_id;
76
+ return ok(await client.post('/runs', body));
77
+ });
78
+ // ── run_status ─────────────────────────────────────────────────────────────
79
+ server.tool('run_status', 'Get the current status and unit details of a run. ' +
80
+ 'Poll this after launch_run to track progress.', {
81
+ run_id: z.string().min(1).describe('The run ID returned by launch_run'),
82
+ }, async ({ run_id }) => ok(await client.get(`/runs/${run_id}`)));
83
+ // ── list_runs ──────────────────────────────────────────────────────────────
84
+ server.tool('list_runs', 'List all runs on the daemon, most-actionable first (awaiting gate/elicitation first, ' +
85
+ 'then active, then completed).', {}, async () => ok(await client.get('/runs')));
86
+ // ── run_events ─────────────────────────────────────────────────────────────
87
+ server.tool('run_events', 'Return the durable event trail for a run. ' +
88
+ 'Useful for inspecting exactly what happened during a governed workflow. ' +
89
+ 'The daemon returns all events; `limit` truncates client-side (most-recent last).', {
90
+ run_id: z.string().min(1).describe('The run ID'),
91
+ limit: z.number().int().min(1).max(1000).optional().describe('Maximum number of events to return. Truncated from the tail (most-recent). Default: all.'),
92
+ }, async ({ run_id, limit }) => {
93
+ const data = await client.get(`/runs/${run_id}/events`);
94
+ const events = limit !== undefined ? data.events.slice(-limit) : data.events;
95
+ return ok({ ...data, returned: events.length, events });
96
+ });
97
+ // ── answer_gate ────────────────────────────────────────────────────────────
98
+ server.tool('answer_gate', 'Approve or reject the human gate on a run. ' +
99
+ 'Use run_status to check if a run is awaiting a gate decision before calling this.', {
100
+ run_id: z.string().min(1).describe('The run ID'),
101
+ approve: z.boolean().describe('true to approve, false to reject'),
102
+ amend: z.string().optional().describe('Optional steering text appended to the next unit\'s prompt when approving'),
103
+ }, async ({ run_id, approve, amend }) => {
104
+ const body = { approve };
105
+ if (amend !== undefined)
106
+ body['amend'] = amend;
107
+ return ok(await client.post(`/runs/${run_id}/gate`, body));
108
+ });
109
+ // ── cancel_run ─────────────────────────────────────────────────────────────
110
+ server.tool('cancel_run', 'Cancel an active run. The run will be marked as failed immediately.', {
111
+ run_id: z.string().min(1).describe('The run ID to cancel'),
112
+ }, async ({ run_id }) => ok(await client.post(`/runs/${run_id}/cancel`, {})));
113
+ // ── list_workflows ─────────────────────────────────────────────────────────
114
+ server.tool('list_workflows', 'List all workflows available on the daemon, ' +
115
+ 'including their phases and evidence-floor requirements.', {}, async () => ok(await client.get('/workflows')));
116
+ const transport = new StdioServerTransport();
117
+ await server.connect(transport);
118
+ }
119
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/cli/mcp.ts"],"names":[],"mappings":"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"}