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.
- package/dist/api/audit.d.ts +70 -0
- package/dist/api/audit.d.ts.map +1 -0
- package/dist/api/audit.js +131 -0
- package/dist/api/audit.js.map +1 -0
- package/dist/api/auth.d.ts +192 -0
- package/dist/api/auth.d.ts.map +1 -0
- package/dist/api/auth.js +515 -0
- package/dist/api/auth.js.map +1 -0
- package/dist/api/gate-cache.d.ts +8 -0
- package/dist/api/gate-cache.d.ts.map +1 -1
- package/dist/api/gate-cache.js +10 -0
- package/dist/api/gate-cache.js.map +1 -1
- package/dist/api/guidance-index.d.ts +39 -0
- package/dist/api/guidance-index.d.ts.map +1 -0
- package/dist/api/guidance-index.js +67 -0
- package/dist/api/guidance-index.js.map +1 -0
- package/dist/api/open-path.d.ts +34 -0
- package/dist/api/open-path.d.ts.map +1 -0
- package/dist/api/open-path.js +101 -0
- package/dist/api/open-path.js.map +1 -0
- package/dist/api/retry-index.d.ts +30 -0
- package/dist/api/retry-index.d.ts.map +1 -0
- package/dist/api/retry-index.js +45 -0
- package/dist/api/retry-index.js.map +1 -0
- package/dist/api/routes.d.ts +164 -1
- package/dist/api/routes.d.ts.map +1 -1
- package/dist/api/routes.js +769 -21
- package/dist/api/routes.js.map +1 -1
- package/dist/api/run-files.d.ts +63 -0
- package/dist/api/run-files.d.ts.map +1 -0
- package/dist/api/run-files.js +271 -0
- package/dist/api/run-files.js.map +1 -0
- package/dist/api/seat-health.d.ts +55 -0
- package/dist/api/seat-health.d.ts.map +1 -0
- package/dist/api/seat-health.js +273 -0
- package/dist/api/seat-health.js.map +1 -0
- package/dist/api/seat-signin.d.ts +27 -0
- package/dist/api/seat-signin.d.ts.map +1 -0
- package/dist/api/seat-signin.js +143 -0
- package/dist/api/seat-signin.js.map +1 -0
- package/dist/api/server.d.ts +190 -3
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +365 -11
- package/dist/api/server.js.map +1 -1
- package/dist/api/stall-watchdog.d.ts +62 -0
- package/dist/api/stall-watchdog.d.ts.map +1 -0
- package/dist/api/stall-watchdog.js +138 -0
- package/dist/api/stall-watchdog.js.map +1 -0
- package/dist/cli/index.js +171 -12
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mcp.d.ts +14 -0
- package/dist/cli/mcp.d.ts.map +1 -0
- package/dist/cli/mcp.js +119 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/core/adapter.d.ts +87 -10
- package/dist/core/adapter.d.ts.map +1 -1
- package/dist/core/adapter.js +347 -28
- package/dist/core/adapter.js.map +1 -1
- package/dist/core/bridge-reaper.d.ts +134 -0
- package/dist/core/bridge-reaper.d.ts.map +1 -0
- package/dist/core/bridge-reaper.js +286 -0
- package/dist/core/bridge-reaper.js.map +1 -0
- package/dist/core/deliver.d.ts +118 -0
- package/dist/core/deliver.d.ts.map +1 -0
- package/dist/core/deliver.js +241 -0
- package/dist/core/deliver.js.map +1 -0
- package/dist/core/deliverable-floor.d.ts +103 -0
- package/dist/core/deliverable-floor.d.ts.map +1 -0
- package/dist/core/deliverable-floor.js +173 -0
- package/dist/core/deliverable-floor.js.map +1 -0
- package/dist/core/exec.d.ts +2 -0
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js.map +1 -1
- package/dist/core/types.d.ts +92 -352
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +14 -4
- package/dist/core/types.js.map +1 -1
- package/dist/interactive/bridge-pool.d.ts +99 -0
- package/dist/interactive/bridge-pool.d.ts.map +1 -0
- package/dist/interactive/bridge-pool.js +244 -0
- package/dist/interactive/bridge-pool.js.map +1 -0
- package/dist/interactive/bridge-root.d.ts +36 -0
- package/dist/interactive/bridge-root.d.ts.map +1 -0
- package/dist/interactive/bridge-root.js +48 -0
- package/dist/interactive/bridge-root.js.map +1 -0
- package/dist/interactive/chat-events.d.ts +207 -0
- package/dist/interactive/chat-events.d.ts.map +1 -0
- package/dist/interactive/chat-events.js +769 -0
- package/dist/interactive/chat-events.js.map +1 -0
- package/dist/interactive/demo-events.d.ts +283 -0
- package/dist/interactive/demo-events.d.ts.map +1 -0
- package/dist/interactive/demo-events.js +889 -0
- package/dist/interactive/demo-events.js.map +1 -0
- package/dist/interactive/draft-events.d.ts +224 -0
- package/dist/interactive/draft-events.d.ts.map +1 -0
- package/dist/interactive/draft-events.js +793 -0
- package/dist/interactive/draft-events.js.map +1 -0
- package/dist/interactive/edit-events.d.ts +194 -0
- package/dist/interactive/edit-events.d.ts.map +1 -0
- package/dist/interactive/edit-events.js +601 -0
- package/dist/interactive/edit-events.js.map +1 -0
- package/dist/interactive/ledger.d.ts +39 -0
- package/dist/interactive/ledger.d.ts.map +1 -0
- package/dist/interactive/ledger.js +93 -0
- package/dist/interactive/ledger.js.map +1 -0
- package/dist/interactive/proxy-routes.d.ts +39 -0
- package/dist/interactive/proxy-routes.d.ts.map +1 -0
- package/dist/interactive/proxy-routes.js +189 -0
- package/dist/interactive/proxy-routes.js.map +1 -0
- package/dist/interactive/repo-snapshot.d.ts +100 -0
- package/dist/interactive/repo-snapshot.d.ts.map +1 -0
- package/dist/interactive/repo-snapshot.js +289 -0
- package/dist/interactive/repo-snapshot.js.map +1 -0
- package/dist/interactive/ws-relay.d.ts +85 -0
- package/dist/interactive/ws-relay.d.ts.map +1 -0
- package/dist/interactive/ws-relay.js +191 -0
- package/dist/interactive/ws-relay.js.map +1 -0
- package/dist/projects/activity.d.ts +29 -0
- package/dist/projects/activity.d.ts.map +1 -0
- package/dist/projects/activity.js +172 -0
- package/dist/projects/activity.js.map +1 -0
- package/dist/projects/charter.d.ts +28 -0
- package/dist/projects/charter.d.ts.map +1 -0
- package/dist/projects/charter.js +53 -0
- package/dist/projects/charter.js.map +1 -0
- package/dist/projects/events.d.ts +55 -0
- package/dist/projects/events.d.ts.map +1 -0
- package/dist/projects/events.js +141 -0
- package/dist/projects/events.js.map +1 -0
- package/dist/projects/graph-paths.d.ts +92 -0
- package/dist/projects/graph-paths.d.ts.map +1 -0
- package/dist/projects/graph-paths.js +130 -0
- package/dist/projects/graph-paths.js.map +1 -0
- package/dist/projects/graph.d.ts +179 -0
- package/dist/projects/graph.d.ts.map +1 -0
- package/dist/projects/graph.js +775 -0
- package/dist/projects/graph.js.map +1 -0
- package/dist/projects/membership-index.d.ts +25 -0
- package/dist/projects/membership-index.d.ts.map +1 -0
- package/dist/projects/membership-index.js +46 -0
- package/dist/projects/membership-index.js.map +1 -0
- package/dist/projects/routes.d.ts +97 -0
- package/dist/projects/routes.d.ts.map +1 -0
- package/dist/projects/routes.js +510 -0
- package/dist/projects/routes.js.map +1 -0
- package/dist/projects/settings.d.ts +32 -0
- package/dist/projects/settings.d.ts.map +1 -0
- package/dist/projects/settings.js +64 -0
- package/dist/projects/settings.js.map +1 -0
- package/dist/qe/acceptance.d.ts +137 -0
- package/dist/qe/acceptance.d.ts.map +1 -0
- package/dist/qe/acceptance.js +249 -0
- package/dist/qe/acceptance.js.map +1 -0
- package/dist/qe/gate-events.d.ts +111 -0
- package/dist/qe/gate-events.d.ts.map +1 -0
- package/dist/qe/gate-events.js +168 -0
- package/dist/qe/gate-events.js.map +1 -0
- package/dist/qe/ledger.d.ts +100 -0
- package/dist/qe/ledger.d.ts.map +1 -0
- package/dist/qe/ledger.js +154 -0
- package/dist/qe/ledger.js.map +1 -0
- package/dist/studio/assets/index-8p8uwCxG.js +530 -0
- package/dist/studio/assets/index-D6S9zUtO.css +32 -0
- package/dist/studio/index.html +5 -3
- package/package.json +10 -4
- package/dist/studio/assets/index-DaaUU8Ep.css +0 -32
- 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
|
-
|
|
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
|
|
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
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
}
|
package/dist/cli/index.js.map
CHANGED
|
@@ -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"}
|
package/dist/cli/mcp.js
ADDED
|
@@ -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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"}
|