wicked-crew 0.7.35 → 0.7.37

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 (117) hide show
  1. package/dist/api/chat-scope.d.ts +25 -1
  2. package/dist/api/chat-scope.d.ts.map +1 -1
  3. package/dist/api/chat-scope.js +59 -10
  4. package/dist/api/chat-scope.js.map +1 -1
  5. package/dist/api/delivery-cache.d.ts +23 -6
  6. package/dist/api/delivery-cache.d.ts.map +1 -1
  7. package/dist/api/delivery-cache.js +27 -17
  8. package/dist/api/delivery-cache.js.map +1 -1
  9. package/dist/api/delivery-index.d.ts +45 -3
  10. package/dist/api/delivery-index.d.ts.map +1 -1
  11. package/dist/api/delivery-index.js +79 -4
  12. package/dist/api/delivery-index.js.map +1 -1
  13. package/dist/api/retry-index.d.ts +14 -0
  14. package/dist/api/retry-index.d.ts.map +1 -1
  15. package/dist/api/retry-index.js +29 -0
  16. package/dist/api/retry-index.js.map +1 -1
  17. package/dist/api/roster-standing.d.ts +4 -4
  18. package/dist/api/roster-standing.d.ts.map +1 -1
  19. package/dist/api/roster-standing.js +24 -12
  20. package/dist/api/roster-standing.js.map +1 -1
  21. package/dist/api/routes.d.ts +138 -10
  22. package/dist/api/routes.d.ts.map +1 -1
  23. package/dist/api/routes.js +261 -39
  24. package/dist/api/routes.js.map +1 -1
  25. package/dist/api/run-timing-index.d.ts +22 -0
  26. package/dist/api/run-timing-index.d.ts.map +1 -1
  27. package/dist/api/run-timing-index.js +34 -0
  28. package/dist/api/run-timing-index.js.map +1 -1
  29. package/dist/api/seat-health.d.ts +2 -46
  30. package/dist/api/seat-health.d.ts.map +1 -1
  31. package/dist/api/seat-health.js +28 -111
  32. package/dist/api/seat-health.js.map +1 -1
  33. package/dist/api/seat-standing.d.ts +9 -8
  34. package/dist/api/seat-standing.d.ts.map +1 -1
  35. package/dist/api/seat-standing.js +22 -32
  36. package/dist/api/seat-standing.js.map +1 -1
  37. package/dist/api/server.d.ts.map +1 -1
  38. package/dist/api/server.js +96 -9
  39. package/dist/api/server.js.map +1 -1
  40. package/dist/api/skills.d.ts +2 -2
  41. package/dist/api/stall-frame-index.d.ts +68 -0
  42. package/dist/api/stall-frame-index.d.ts.map +1 -0
  43. package/dist/api/stall-frame-index.js +106 -0
  44. package/dist/api/stall-frame-index.js.map +1 -0
  45. package/dist/api/stall-watchdog.d.ts +22 -2
  46. package/dist/api/stall-watchdog.d.ts.map +1 -1
  47. package/dist/api/stall-watchdog.js +41 -11
  48. package/dist/api/stall-watchdog.js.map +1 -1
  49. package/dist/campaigns/plan.d.ts +12 -2
  50. package/dist/campaigns/plan.d.ts.map +1 -1
  51. package/dist/campaigns/plan.js +3 -0
  52. package/dist/campaigns/plan.js.map +1 -1
  53. package/dist/campaigns/rollup.d.ts +5 -0
  54. package/dist/campaigns/rollup.d.ts.map +1 -1
  55. package/dist/campaigns/rollup.js +3 -2
  56. package/dist/campaigns/rollup.js.map +1 -1
  57. package/dist/campaigns/routes.d.ts +5 -2
  58. package/dist/campaigns/routes.d.ts.map +1 -1
  59. package/dist/campaigns/routes.js +13 -3
  60. package/dist/campaigns/routes.js.map +1 -1
  61. package/dist/cli/index.js +73 -16
  62. package/dist/cli/index.js.map +1 -1
  63. package/dist/cli/port.d.ts +19 -0
  64. package/dist/cli/port.d.ts.map +1 -0
  65. package/dist/cli/port.js +39 -0
  66. package/dist/cli/port.js.map +1 -0
  67. package/dist/core/adapter.d.ts +56 -11
  68. package/dist/core/adapter.d.ts.map +1 -1
  69. package/dist/core/adapter.js +119 -31
  70. package/dist/core/adapter.js.map +1 -1
  71. package/dist/core/bridge-reaper.d.ts +57 -1
  72. package/dist/core/bridge-reaper.d.ts.map +1 -1
  73. package/dist/core/bridge-reaper.js +143 -21
  74. package/dist/core/bridge-reaper.js.map +1 -1
  75. package/dist/core/cursor.d.ts +7 -0
  76. package/dist/core/cursor.d.ts.map +1 -1
  77. package/dist/core/cursor.js +7 -1
  78. package/dist/core/cursor.js.map +1 -1
  79. package/dist/core/deliver-text.d.ts +35 -2
  80. package/dist/core/deliver-text.d.ts.map +1 -1
  81. package/dist/core/deliver-text.js +127 -17
  82. package/dist/core/deliver-text.js.map +1 -1
  83. package/dist/core/deliver-triage.d.ts.map +1 -1
  84. package/dist/core/deliver-triage.js +5 -2
  85. package/dist/core/deliver-triage.js.map +1 -1
  86. package/dist/core/deliver.d.ts +76 -2
  87. package/dist/core/deliver.d.ts.map +1 -1
  88. package/dist/core/deliver.js +209 -16
  89. package/dist/core/deliver.js.map +1 -1
  90. package/dist/core/engine-roster.d.ts +4 -3
  91. package/dist/core/engine-roster.d.ts.map +1 -1
  92. package/dist/core/engine-roster.js +10 -14
  93. package/dist/core/engine-roster.js.map +1 -1
  94. package/dist/core/types.d.ts +20 -0
  95. package/dist/core/types.d.ts.map +1 -1
  96. package/dist/core/types.js.map +1 -1
  97. package/dist/interactive/bridge-pool.d.ts +48 -5
  98. package/dist/interactive/bridge-pool.d.ts.map +1 -1
  99. package/dist/interactive/bridge-pool.js +100 -8
  100. package/dist/interactive/bridge-pool.js.map +1 -1
  101. package/dist/projects/graph.d.ts +4 -0
  102. package/dist/projects/graph.d.ts.map +1 -1
  103. package/dist/projects/graph.js +4 -2
  104. package/dist/projects/graph.js.map +1 -1
  105. package/dist/projects/routes.d.ts +2 -2
  106. package/dist/qe/acceptance.d.ts.map +1 -1
  107. package/dist/qe/acceptance.js +7 -1
  108. package/dist/qe/acceptance.js.map +1 -1
  109. package/dist/skills/base-skill.d.ts +10 -0
  110. package/dist/skills/base-skill.d.ts.map +1 -1
  111. package/dist/skills/base-skill.js +16 -4
  112. package/dist/skills/base-skill.js.map +1 -1
  113. package/dist/studio/assets/{index-CJp35PKj.js → index-Dk98qXKv.js} +103 -102
  114. package/dist/studio/index.html +1 -1
  115. package/dist/studio/testid-inventory.json +29 -5
  116. package/endpoint-manifest.json +12 -0
  117. package/package.json +3 -3
@@ -39,6 +39,19 @@
39
39
  * boot, one periodic while the daemon lives) reap those under a conservative triple
40
40
  * gate: ppid == 1, a token-boundary command match, and a cwd inside a run worktree.
41
41
  *
42
+ * A fourth joined with F-W1-103 (FIX-IT-ALL wave 1): the INTERACTIVE document bridge the pool
43
+ * spawns per docs root (`npx wicked-interactive serve --root …`, `interactive/bridge-pool.ts`,
44
+ * detached and unref'd) was outside every sweep — it is not a `*-acp` binary, and its server is
45
+ * this daemon's GRANDCHILD (an `npm exec` wrapper is the child) — so it outlived every daemon that
46
+ * started it: two such pairs were found ~20 h after their daemon had exited, on ports nothing
47
+ * would ever look up again. Now (1) the shutdown sweep reaps the wrapper AND its server child
48
+ * (npm does not forward a signal to it), and (2) both orphan sweeps reap a ppid-1 interactive tree
49
+ * whose docs root carries crew's own sidecar (`.wi-serve.crew.json`) naming one of its pids with
50
+ * an owning daemon that is gone. Adopting a bridge stamps the adopter as its owner, so a bridge in
51
+ * use by a LIVE daemon — spawner or adopter — is never matched; a bridge nobody recorded (an
52
+ * operator's own `serve`) is never matched either. Crew-spawned bridges therefore live exactly as
53
+ * long as a crew daemon owns them: adopt-or-kill, never leak.
54
+ *
42
55
  * # Why a process-table sweep rather than tracked pids alone
43
56
  *
44
57
  * The spawn happens inside the engine (the native actor thread), which reports no pid
@@ -49,6 +62,7 @@
49
62
  * fails OPEN (returns nothing) when the platform tooling is unavailable: a shutdown
50
63
  * that cannot enumerate children must still shut down.
51
64
  */
65
+ import { type CrewSidecar } from '../interactive/bridge-pool.js';
52
66
  /**
53
67
  * The bridge binaries the engine spawns by bare name on PATH. Mirrors the set audited
54
68
  * by `bridge-names.test.ts` (declared dependencies of this package + the shims a real
@@ -68,8 +82,30 @@ export declare const BRIDGE_BINS: readonly string[];
68
82
  * engine run worktree — an operator's own `claude`/`codex` never runs from one of those.
69
83
  */
70
84
  export declare const WORKER_CLI_BINS: readonly string[];
85
+ /**
86
+ * The interactive document bridge the pool spawns per docs root (F-W1-103): `npx --yes
87
+ * wicked-interactive@<spec> serve --root <root>`, detached. It runs as an `npm exec` WRAPPER whose
88
+ * child is the `node …/wicked-interactive serve --root <root>` that holds the port — the wrapper is
89
+ * this daemon's child, the server its grandchild, and SIGTERM to the wrapper alone leaves the
90
+ * server running (npm does not forward it). Every matcher below treats the pair as one tree.
91
+ */
92
+ export declare const INTERACTIVE_BIN = "wicked-interactive";
71
93
  /** How long a SIGTERM'd bridge gets to exit before the SIGKILL escalation. */
72
94
  export declare const BRIDGE_KILL_GRACE_MS = 2000;
95
+ /** Is `command` an interactive bridge `serve` — the npm wrapper or the server itself? */
96
+ export declare function isInteractiveServe(command: string): boolean;
97
+ /**
98
+ * The `--root <path>` of an interactive `serve` command line, or null when absent or not absolute.
99
+ * A quoted value is unquoted; an unquoted one runs to the next `--flag` or the end of the line, so a
100
+ * root with a space in it survives and the blanks `ps` pads a line with are dropped.
101
+ */
102
+ export declare function rootArgOf(command: string): string | null;
103
+ /**
104
+ * A `pid ppid command` process listing → the pids of the DIRECT children of `parentPid` whose
105
+ * command line names a bridge binary or an interactive `serve`, plus the `serve` children of those
106
+ * interactive wrappers (this daemon's grandchildren, F-W1-103). Pure, so the parsing is testable
107
+ * without a real process table.
108
+ */
73
109
  export declare function parseBridgeChildren(listing: string, parentPid: number): number[];
74
110
  /**
75
111
  * Pids of every live bridge process that is a direct child of `parentPid`. Fails open:
@@ -87,10 +123,25 @@ export declare function discoverBridgeChildren(parentPid?: number): number[];
87
123
  * shutdown-only reaping leaves pre-existing orphans alive forever).
88
124
  */
89
125
  export declare function parseOrphanedRunProcesses(listing: string): number[];
126
+ /** An interactive bridge tree reparented to init: the docs root its command line names and the
127
+ * pids to reap — the ppid-1 process first (the npm wrapper, or the server itself once its wrapper
128
+ * is gone), then any `serve` child of it. */
129
+ export interface OrphanedInteractiveBridge {
130
+ root: string;
131
+ pids: number[];
132
+ }
133
+ /**
134
+ * Every interactive bridge tree whose parent is init (F-W1-103): a ppid-1 `wicked-interactive …
135
+ * serve --root <root>` plus its own `serve` children. Pure — the OWNERSHIP gate (crew's sidecar in
136
+ * `root` naming one of these pids, with an owner daemon that is gone) is applied by the sweeps,
137
+ * so a shell-parented or nohup'd operator bridge is parsed here but never reaped there.
138
+ */
139
+ export declare function parseOrphanedInteractiveBridges(listing: string): OrphanedInteractiveBridge[];
90
140
  /**
91
141
  * Boot-time sweep: SIGTERM orphaned bridges from a prior daemon generation AND orphaned
92
142
  * worker CLIs from any bridge that died too hard to reap them — ppid 1 AND cwd inside a
93
- * run worktree, so user-started processes are never matched.
143
+ * run worktree, so user-started processes are never matched — AND crew-spawned interactive
144
+ * bridge trees whose owning daemon is gone (ppid 1 AND crew's sidecar names them, F-W1-103).
94
145
  */
95
146
  export declare function reapOrphansAtBoot(io?: BridgeReaperIo): number[];
96
147
  /** How often the live daemon re-scans for orphaned run processes. */
@@ -123,6 +174,11 @@ export interface BridgeReaperIo {
123
174
  cwdInWorktree?: (pid: number) => boolean;
124
175
  /** Orphan-sweep process listing (`pid ppid command` lines); defaults to the real table. */
125
176
  list?: () => string | null;
177
+ /** Interactive-orphan gate: crew's sidecar for a docs root (F-W1-103); injectable so tests avoid real files. */
178
+ sidecar?: (root: string) => CrewSidecar | null;
179
+ /** Interactive-orphan gate: is the daemon the sidecar names as owner still THAT daemon — pid AND
180
+ * start time ({@link ownerAlive}), so a recycled pid reads as "owner gone"? Injectable for tests. */
181
+ ownerAlive?: (sidecar: CrewSidecar) => boolean;
126
182
  sleep?: (ms: number) => Promise<void>;
127
183
  graceMs?: number;
128
184
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-reaper.d.ts","sourceRoot":"","sources":["../../src/core/bridge-reaper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAKH;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAKxC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAAkD,CAAC;AAKhG,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAgCzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAehF;AA+BD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,GAAE,MAAoB,GAAG,MAAM,EAAE,CAGhF;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAYnE;AAyBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,GAAE,cAAmB,GAAG,MAAM,EAAE,CAgBnE;AAWD,qEAAqE;AACrE,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAM,GAAG,SAAwD,GAAG,MAAM,CAK5G;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,EAAE,GAAE,cAAmB,GACtB;IAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAgC5C;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,GAAE,MAAwB,EAAE,EAAE,GAAE,cAAmB,GAAG,MAAM,IAAI,CAe1G;AAED,kFAAkF;AAClF,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,IAAI,CAAC;IACzD,yEAAyE;IACzE,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAC3C,oFAAoF;IACpF,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC,2FAA2F;IAC3F,IAAI,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,sDAAsD;AACtD,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,oDAAoD;IACpD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAiB;gBAExB,EAAE,GAAE,cAAmB;IAInC,6FAA6F;IAC7F,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIvC,8EAA8E;IAC9E,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B,gFAAgF;IAChF,IAAI,IAAI,MAAM,EAAE;IAIhB;;;;OAIG;IACH,OAAO,CAAC,MAAM;IAUd,uEAAuE;IACvE,OAAO,CAAC,OAAO;IAMf;;;;;OAKG;IACG,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAuBrC;;;;;OAKG;IACH,SAAS,IAAI,IAAI;CAIlB;AAED,uEAAuE;AACvE,eAAO,MAAM,YAAY,cAAqB,CAAC"}
1
+ {"version":3,"file":"bridge-reaper.d.ts","sourceRoot":"","sources":["../../src/core/bridge-reaper.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,19 @@
39
39
  * boot, one periodic while the daemon lives) reap those under a conservative triple
40
40
  * gate: ppid == 1, a token-boundary command match, and a cwd inside a run worktree.
41
41
  *
42
+ * A fourth joined with F-W1-103 (FIX-IT-ALL wave 1): the INTERACTIVE document bridge the pool
43
+ * spawns per docs root (`npx wicked-interactive serve --root …`, `interactive/bridge-pool.ts`,
44
+ * detached and unref'd) was outside every sweep — it is not a `*-acp` binary, and its server is
45
+ * this daemon's GRANDCHILD (an `npm exec` wrapper is the child) — so it outlived every daemon that
46
+ * started it: two such pairs were found ~20 h after their daemon had exited, on ports nothing
47
+ * would ever look up again. Now (1) the shutdown sweep reaps the wrapper AND its server child
48
+ * (npm does not forward a signal to it), and (2) both orphan sweeps reap a ppid-1 interactive tree
49
+ * whose docs root carries crew's own sidecar (`.wi-serve.crew.json`) naming one of its pids with
50
+ * an owning daemon that is gone. Adopting a bridge stamps the adopter as its owner, so a bridge in
51
+ * use by a LIVE daemon — spawner or adopter — is never matched; a bridge nobody recorded (an
52
+ * operator's own `serve`) is never matched either. Crew-spawned bridges therefore live exactly as
53
+ * long as a crew daemon owns them: adopt-or-kill, never leak.
54
+ *
42
55
  * # Why a process-table sweep rather than tracked pids alone
43
56
  *
44
57
  * The spawn happens inside the engine (the native actor thread), which reports no pid
@@ -50,6 +63,8 @@
50
63
  * that cannot enumerate children must still shut down.
51
64
  */
52
65
  import { spawnSync } from 'node:child_process';
66
+ import { isAbsolute } from 'node:path';
67
+ import { ownerAlive, readCrewSidecar } from '../interactive/bridge-pool.js';
53
68
  import { childEnvWithBootEstateDb } from './governance-store.js';
54
69
  /**
55
70
  * The bridge binaries the engine spawns by bare name on PATH. Mirrors the set audited
@@ -78,15 +93,18 @@ export const WORKER_CLI_BINS = ['agy', 'claude', 'codex', 'pi', 'wicked-pi'];
78
93
  // `wicked-pi` is the launcher pi-acp starts as pi (F-079; `PI_ACP_PI_COMMAND`) — a grandchild that
79
94
  // sits BETWEEN the bridge and pi. Through the npm shim it runs as `node …/wicked-pi.mjs …`, so
80
95
  // the token matcher below also accepts a `.mjs` launcher extension.
96
+ /**
97
+ * The interactive document bridge the pool spawns per docs root (F-W1-103): `npx --yes
98
+ * wicked-interactive@<spec> serve --root <root>`, detached. It runs as an `npm exec` WRAPPER whose
99
+ * child is the `node …/wicked-interactive serve --root <root>` that holds the port — the wrapper is
100
+ * this daemon's child, the server its grandchild, and SIGTERM to the wrapper alone leaves the
101
+ * server running (npm does not forward it). Every matcher below treats the pair as one tree.
102
+ */
103
+ export const INTERACTIVE_BIN = 'wicked-interactive';
81
104
  /** How long a SIGTERM'd bridge gets to exit before the SIGKILL escalation. */
82
105
  export const BRIDGE_KILL_GRACE_MS = 2000;
83
106
  /** How often the grace window re-checks survivor liveness. */
84
107
  const POLL_INTERVAL_MS = 100;
85
- /**
86
- * One line of a `pid ppid command` process listing → the pids of DIRECT children of
87
- * `parentPid` whose command line names a bridge binary. Pure, so the parsing is
88
- * testable without a real process table.
89
- */
90
108
  /**
91
109
  * Matches `bin` as a whole command token, never a substring: start/whitespace/path-sep/
92
110
  * quote before; an optional launcher extension (.cmd/.exe/.bat on Windows; .mjs for the
@@ -104,15 +122,54 @@ const BRIDGE_TOKEN_RES = BRIDGE_BINS.map((bin) => bridgeTokenRe(bin));
104
122
  * match. The direct-child shutdown sweep stays bridges-only: worker CLIs are grandchildren
105
123
  * by construction, and a `claude` that IS our direct child is the operator's own business. */
106
124
  const ORPHAN_TOKEN_RES = [...BRIDGE_BINS, ...WORKER_CLI_BINS].map((bin) => bridgeTokenRe(bin));
107
- export function parseBridgeChildren(listing, parentPid) {
108
- const pids = [];
125
+ /**
126
+ * `wicked-interactive` as a whole token — the npx spec spelling (`wicked-interactive@^0.9.3`), the
127
+ * npm shim (`…/.bin/wicked-interactive`), a Windows launcher (`wicked-interactive.cmd`) and the
128
+ * package path (`…/wicked-interactive/dist/cli.js`) all count, `wicked-interactive-export` never
129
+ * does — followed IMMEDIATELY by the `serve` subcommand (interactive's options come after the
130
+ * subcommand: `serve --root <dir> [--port N]`). `render --mode serve` is not a bridge, and neither
131
+ * is anything with another token between the bin and `serve` — review NIT on crew #606: the
132
+ * shutdown path has no sidecar gate, so the subcommand must be the anchor.
133
+ */
134
+ const INTERACTIVE_SERVE_RE = new RegExp(`(?:^|[\\s/\\\\"'])${INTERACTIVE_BIN}(?:@[^\\s"'/\\\\]*)?(?:\\.(?:cmd|exe|bat|mjs|js))?(?:[/\\\\][^\\s"']*)?["']?\\s+serve(?:\\s|$)`, 'i');
135
+ /** Is `command` an interactive bridge `serve` — the npm wrapper or the server itself? */
136
+ export function isInteractiveServe(command) {
137
+ return INTERACTIVE_SERVE_RE.test(command);
138
+ }
139
+ /**
140
+ * The `--root <path>` of an interactive `serve` command line, or null when absent or not absolute.
141
+ * A quoted value is unquoted; an unquoted one runs to the next `--flag` or the end of the line, so a
142
+ * root with a space in it survives and the blanks `ps` pads a line with are dropped.
143
+ */
144
+ export function rootArgOf(command) {
145
+ const m = /(?:^|\s)--root(?:=|\s+)(?:"([^"]*)"|'([^']*)'|(.+?))(?=\s+--[a-z]|\s*$)/i.exec(command);
146
+ if (m === null)
147
+ return null;
148
+ const raw = (m[1] ?? m[2] ?? m[3] ?? '').trim();
149
+ return raw !== '' && isAbsolute(raw) ? raw : null;
150
+ }
151
+ /** The parseable rows of a `pid ppid command` listing; garbage lines a real `ps` never quite spares us are skipped. */
152
+ function parseListing(listing) {
153
+ const rows = [];
109
154
  for (const line of listing.split('\n')) {
110
155
  const m = /^\s*(\d+)\s+(\d+)\s+(.*)$/.exec(line);
111
156
  if (m === null)
112
157
  continue;
113
- const pid = Number(m[1]);
114
- const ppid = Number(m[2]);
115
- const command = m[3];
158
+ rows.push({ pid: Number(m[1]), ppid: Number(m[2]), command: m[3] });
159
+ }
160
+ return rows;
161
+ }
162
+ /**
163
+ * A `pid ppid command` process listing → the pids of the DIRECT children of `parentPid` whose
164
+ * command line names a bridge binary or an interactive `serve`, plus the `serve` children of those
165
+ * interactive wrappers (this daemon's grandchildren, F-W1-103). Pure, so the parsing is testable
166
+ * without a real process table.
167
+ */
168
+ export function parseBridgeChildren(listing, parentPid) {
169
+ const rows = parseListing(listing);
170
+ const pids = [];
171
+ const wrappers = [];
172
+ for (const { pid, ppid, command } of rows) {
116
173
  if (ppid !== parentPid || pid === parentPid)
117
174
  continue;
118
175
  // Token-boundary match: `pi-acp` must not match inside `api-acp` (Copilot review
@@ -120,6 +177,16 @@ export function parseBridgeChildren(listing, parentPid) {
120
177
  // whitespace, or a path separator before it; end-of-token after.
121
178
  if (BRIDGE_TOKEN_RES.some((re) => re.test(command)))
122
179
  pids.push(pid);
180
+ else if (isInteractiveServe(command)) {
181
+ pids.push(pid);
182
+ wrappers.push(pid);
183
+ }
184
+ }
185
+ // The interactive server is the npm wrapper's child — this daemon's GRANDCHILD — and a SIGTERM
186
+ // to the wrapper alone orphans it (F-W1-103). The pair is one tree; reap both.
187
+ for (const { pid, ppid, command } of rows) {
188
+ if (wrappers.includes(ppid) && pid !== parentPid && !pids.includes(pid) && isInteractiveServe(command))
189
+ pids.push(pid);
123
190
  }
124
191
  return pids;
125
192
  }
@@ -168,13 +235,7 @@ export function discoverBridgeChildren(parentPid = process.pid) {
168
235
  */
169
236
  export function parseOrphanedRunProcesses(listing) {
170
237
  const pids = [];
171
- for (const line of listing.split('\n')) {
172
- const m = /^\s*(\d+)\s+(\d+)\s+(.*)$/.exec(line);
173
- if (m === null)
174
- continue;
175
- const pid = Number(m[1]);
176
- const ppid = Number(m[2]);
177
- const command = m[3];
238
+ for (const { pid, ppid, command } of parseListing(listing)) {
178
239
  if (ppid !== 1 || pid === process.pid)
179
240
  continue;
180
241
  if (ORPHAN_TOKEN_RES.some((re) => re.test(command)))
@@ -182,6 +243,57 @@ export function parseOrphanedRunProcesses(listing) {
182
243
  }
183
244
  return pids;
184
245
  }
246
+ /**
247
+ * Every interactive bridge tree whose parent is init (F-W1-103): a ppid-1 `wicked-interactive …
248
+ * serve --root <root>` plus its own `serve` children. Pure — the OWNERSHIP gate (crew's sidecar in
249
+ * `root` naming one of these pids, with an owner daemon that is gone) is applied by the sweeps,
250
+ * so a shell-parented or nohup'd operator bridge is parsed here but never reaped there.
251
+ */
252
+ export function parseOrphanedInteractiveBridges(listing) {
253
+ const rows = parseListing(listing);
254
+ const trees = [];
255
+ for (const { pid, ppid, command } of rows) {
256
+ if (ppid !== 1 || pid === process.pid || !isInteractiveServe(command))
257
+ continue;
258
+ const root = rootArgOf(command);
259
+ if (root === null)
260
+ continue;
261
+ const pids = [pid];
262
+ for (const child of rows) {
263
+ if (child.ppid === pid && child.pid !== process.pid && isInteractiveServe(child.command))
264
+ pids.push(child.pid);
265
+ }
266
+ trees.push({ root, pids });
267
+ }
268
+ return trees;
269
+ }
270
+ /**
271
+ * The ownership gate for an orphaned interactive tree, mirroring the pool's own adopt-or-recycle
272
+ * rules (`interactive/bridge-pool.ts`, codex on crew#506): crew's `.wi-serve.crew.json` in the root
273
+ * the command line names must record one of the tree's pids — the proof crew spawned it; an
274
+ * operator's `wicked-interactive serve` has no sidecar and is never matched — and the daemon it
275
+ * records as owner must be GONE: not in the process table, or a DIFFERENT incarnation of that pid
276
+ * (`ownerStartedAt` no longer matches — a recycled pid must not keep a bridge alive for weeks). A
277
+ * live owner (the spawner, or a daemon that adopted the bridge and stamped itself) is using it; a
278
+ * sidecar without an owner is of unproven ownership and left alone.
279
+ */
280
+ function orphanedInteractiveTargets(listing, io) {
281
+ const sidecarOf = io.sidecar ?? readCrewSidecar;
282
+ const isOwnerAlive = io.ownerAlive ?? ownerAlive;
283
+ const targets = [];
284
+ for (const { root, pids } of parseOrphanedInteractiveBridges(listing)) {
285
+ const sidecar = sidecarOf(root);
286
+ if (sidecar === null || !pids.includes(sidecar.pid))
287
+ continue;
288
+ const owner = sidecar.ownerPid;
289
+ if (owner === undefined || !Number.isInteger(owner) || owner <= 0)
290
+ continue; // unproven ownership: not ours to kill
291
+ if (isOwnerAlive(sidecar))
292
+ continue; // the same daemon incarnation still owns it
293
+ targets.push(...pids);
294
+ }
295
+ return targets;
296
+ }
185
297
  /**
186
298
  * True when `pid`'s working directory sits inside an engine run worktree — the cwd
187
299
  * contract of every engine-spawned bridge. A user's own nohup'd `*-acp` process also
@@ -210,13 +322,17 @@ function pidRunsInRunWorktree(pid) {
210
322
  /**
211
323
  * Boot-time sweep: SIGTERM orphaned bridges from a prior daemon generation AND orphaned
212
324
  * worker CLIs from any bridge that died too hard to reap them — ppid 1 AND cwd inside a
213
- * run worktree, so user-started processes are never matched.
325
+ * run worktree, so user-started processes are never matched — AND crew-spawned interactive
326
+ * bridge trees whose owning daemon is gone (ppid 1 AND crew's sidecar names them, F-W1-103).
214
327
  */
215
328
  export function reapOrphansAtBoot(io = {}) {
216
329
  const listing = (io.list ?? listProcesses)();
217
330
  if (listing === null)
218
331
  return [];
219
- const orphans = parseOrphanedRunProcesses(listing).filter((pid) => (io.cwdInWorktree ?? pidRunsInRunWorktree)(pid));
332
+ const orphans = [
333
+ ...parseOrphanedRunProcesses(listing).filter((pid) => (io.cwdInWorktree ?? pidRunsInRunWorktree)(pid)),
334
+ ...orphanedInteractiveTargets(listing, io),
335
+ ];
220
336
  const reaped = [];
221
337
  for (const pid of orphans) {
222
338
  try {
@@ -236,7 +352,10 @@ export function reapOrphansAtBoot(io = {}) {
236
352
  // that orphan keeps the engine-minted shared worker config home busy — the next
237
353
  // `session/new` contends on it until something reaps the orphan or the daemon restarts.
238
354
  // So the daemon keeps sweeping, on an unref'd timer, with the SAME conservative triple
239
- // gate as the boot sweep (ppid 1 + token match + cwd inside a run worktree).
355
+ // gate as the boot sweep (ppid 1 + token match + cwd inside a run worktree) — and, for
356
+ // interactive bridge trees, the same sidecar gate (ppid 1 + crew's sidecar names the pid +
357
+ // its owning daemon is gone), so a sibling daemon that dies hard cannot leak its bridges past
358
+ // the next tick either (F-W1-103).
240
359
  /** How often the live daemon re-scans for orphaned run processes. */
241
360
  export const ORPHAN_SWEEP_DEFAULT_MS = 30_000;
242
361
  /** The sweep interval: `WICKED_CREW_ORPHAN_SWEEP_SECS` (0 disables), else 30s. */
@@ -257,7 +376,10 @@ export function sweepOrphanedRunProcesses(pendingKill, io = {}) {
257
376
  const listing = (io.list ?? listProcesses)();
258
377
  if (listing === null)
259
378
  return { terminated: [], killed: [] };
260
- const alive = new Set(parseOrphanedRunProcesses(listing).filter((pid) => (io.cwdInWorktree ?? pidRunsInRunWorktree)(pid)));
379
+ const alive = new Set([
380
+ ...parseOrphanedRunProcesses(listing).filter((pid) => (io.cwdInWorktree ?? pidRunsInRunWorktree)(pid)),
381
+ ...orphanedInteractiveTargets(listing, io),
382
+ ]);
261
383
  const kill = io.kill ?? process.kill;
262
384
  const terminated = [];
263
385
  const killed = [];
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-reaper.js","sourceRoot":"","sources":["../../src/core/bridge-reaper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridge-reaper.js","sourceRoot":"","sources":["../../src/core/bridge-reaper.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,13 @@ export interface CursorUnit {
3
3
  ord: number;
4
4
  /** The cursor's assigned seat — absent when the engine hasn't assigned one yet. */
5
5
  cli?: string;
6
+ /** What runs the unit (crew #580 / #581, DES-L3 addendum): `tool` = the engine's own command
7
+ * (`tool_cmd` on the unit DTO — the deliver script, a wicked-estate index), `agent` = a CLI
8
+ * seat. The stall watchdog never fails a tool unit over to a seat — there is none to fail to. */
9
+ executor: 'tool' | 'agent';
10
+ /** The cursor's declared phase role when the def carries one (`evaluator` / `creator` / …);
11
+ * absent on free-text units. Read by the watchdog's role-aware failover (DES-L3 PR-3E). */
12
+ role?: string;
6
13
  }
7
14
  /**
8
15
  * Resolves a run's cursor unit, or `undefined` when the view carries no units (older engines,
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/core/cursor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,mFAAmF;IACnF,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,CAI3E"}
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/core/cursor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,mFAAmF;IACnF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;sGAEkG;IAClG,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B;gGAC4F;IAC5F,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,CAU3E"}
@@ -6,6 +6,12 @@ export function resolveCursorUnit(view) {
6
6
  const cursor = [...view.units].sort((a, b) => a.ord - b.ord)[view.session.unit_ix];
7
7
  if (cursor === undefined)
8
8
  return undefined;
9
- return { ord: cursor.ord, ...(cursor.assigned_cli != null ? { cli: cursor.assigned_cli } : {}) };
9
+ const role = cursor.role;
10
+ return {
11
+ ord: cursor.ord,
12
+ ...(cursor.assigned_cli != null ? { cli: cursor.assigned_cli } : {}),
13
+ executor: cursor.tool_cmd != null ? 'tool' : 'agent',
14
+ ...(typeof role === 'string' ? { role } : {}),
15
+ };
10
16
  }
11
17
  //# sourceMappingURL=cursor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/core/cursor.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IACjD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACnF,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACnG,CAAC"}
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/core/cursor.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IACjD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACnF,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,IAAI,GAAI,MAA6B,CAAC,IAAI,CAAC;IACjD,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;QACpD,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC"}
@@ -41,14 +41,20 @@ export interface DeliverPhaseFact {
41
41
  /** The recorded gate outcome / unit status, or `—` at launch time. */
42
42
  outcome: string;
43
43
  }
44
- /** One repo check the verify phase ran (`typecheck` / `lint` / `test`), as the engine recorded it. */
44
+ /** One repo check a phase's floor ran (`typecheck` / `lint` / `test`), as the engine recorded it. */
45
45
  export interface DeliverCheckFact {
46
+ /** The phase whose floor ran it (`verify`, `deliver`, …) — DES-L9. */
47
+ phase: string;
46
48
  name: string;
47
49
  command: string;
48
50
  exitCode: number | null;
49
51
  durationMs: number | null;
50
52
  timedOut: boolean;
51
53
  spawnError: string | null;
54
+ /** The engine's verdict on a non-zero exit (api-types 0.38.0 `RepoCheckRun.classification`) —
55
+ * `floor_env_mismatch` / `pre_existing_in_sandbox` / … — so a reader never sees "tests fail"
56
+ * over a run the engine itself excused (review-benchmark-prs D3). `null` when none. */
57
+ classification: string | null;
52
58
  }
53
59
  /** An evaluator-role phase's recorded verdict. */
54
60
  export interface DeliverVerdictFact {
@@ -78,6 +84,11 @@ export interface DeliverTextFacts {
78
84
  */
79
85
  checksNote: string | null;
80
86
  verdicts: DeliverVerdictFact[];
87
+ /** DES-L9: the open pull request this run REVISES (its commits land there; no new PR). */
88
+ revisesPr?: {
89
+ number: number;
90
+ url: string;
91
+ } | null;
81
92
  }
82
93
  export interface DeliverText {
83
94
  /** ≤ {@link DELIVER_TITLE_MAX} characters, one line, never cut mid-word. */
@@ -91,6 +102,12 @@ export interface IssueRefs {
91
102
  /** Every other issue mention — emitted as `Refs: …`. */
92
103
  refs: string[];
93
104
  }
105
+ /**
106
+ * The conventional-commit prefix for a headline: derived from the workflow (`bug` → `fix`,
107
+ * `feature` → `feat`, `migration` → `refactor`, anything else → `chore`), applied only when the
108
+ * headline does not already start with one (DES-L9; review-benchmark-prs D1).
109
+ */
110
+ export declare function conventionalPrefix(workflowId: string | null | undefined): string;
94
111
  /**
95
112
  * The PR title / commit subject: the intent's first line, whole when it fits, otherwise cut at the
96
113
  * last word boundary that leaves room for a single `…` — so the result is ≤ 72 characters and never
@@ -99,7 +116,15 @@ export interface IssueRefs {
99
116
  * long caller-supplied session id (the CLI passes `--session` through) is never cut mid-id either
100
117
  * (Copilot on #525): the body names the run id in full.
101
118
  */
102
- export declare function deliverTitle(intent: string, runId: string): string;
119
+ export declare function deliverTitle(intent: string, runId: string, workflowId?: string | null): string;
120
+ /**
121
+ * `line` whole when it fits, else cut at a word boundary with a single `…` — ≤ 72 characters —
122
+ * choosing the LAST boundary at nesting depth 0: never inside a quoted or bracketed phrase (crew#550
123
+ * P-1: `… truncated at '(Failed):' and 'sign a seat…`). A straight apostrophe opens a quote only
124
+ * after a space or at the start (so `daemon's` is a word, not a quote). When no depth-0 boundary
125
+ * exists inside the room, any word boundary is taken; a single 72+ character token is cut hard.
126
+ */
127
+ export declare function boundedTitle(line: string): string;
103
128
  /**
104
129
  * The issues the intent names, split into the ones it says it fixes and the rest.
105
130
  *
@@ -166,6 +191,10 @@ export declare function baseWorkflowId(workflowId: string, runId: string): strin
166
191
  */
167
192
  export declare function factsFromRun(view: SessionView, runUrl: string | null, resolved?: {
168
193
  workflowId?: string | null;
194
+ revisesPr?: {
195
+ number: number;
196
+ url: string;
197
+ } | null;
169
198
  }): DeliverTextFacts;
170
199
  /** What is known at LAUNCH, from the workflow definition — the script's embedded fallback. */
171
200
  export declare function factsFromWorkflow(input: {
@@ -175,6 +204,10 @@ export declare function factsFromWorkflow(input: {
175
204
  repoRef: string | null;
176
205
  phases: PhaseDef[];
177
206
  runUrl: string | null;
207
+ revisesPr?: {
208
+ number: number;
209
+ url: string;
210
+ } | null;
178
211
  }): DeliverTextFacts;
179
212
  /**
180
213
  * `s` as ONE URL path segment, RFC 3986 strict: everything but unreserved characters is
@@ -1 +1 @@
1
- {"version":3,"file":"deliver-text.d.ts","sourceRoot":"","sources":["../../src/core/deliver-text.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deliver-text.d.ts","sourceRoot":"","sources":["../../src/core/deliver-text.ts"],"names":[],"mappings":"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"}