wicked-crew 0.16.11 → 0.16.13

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 (341) hide show
  1. package/README.md +28 -8
  2. package/dist/api/artifact-outline.d.ts +64 -0
  3. package/dist/api/artifact-outline.d.ts.map +1 -0
  4. package/dist/api/artifact-outline.js +254 -0
  5. package/dist/api/artifact-outline.js.map +1 -0
  6. package/dist/api/beneath.d.ts +76 -0
  7. package/dist/api/beneath.d.ts.map +1 -0
  8. package/dist/api/beneath.js +214 -0
  9. package/dist/api/beneath.js.map +1 -0
  10. package/dist/api/capture.d.ts +2 -2
  11. package/dist/api/chat-citations.d.ts +25 -1
  12. package/dist/api/chat-citations.d.ts.map +1 -1
  13. package/dist/api/chat-citations.js +186 -61
  14. package/dist/api/chat-citations.js.map +1 -1
  15. package/dist/api/chat-context.d.ts +236 -0
  16. package/dist/api/chat-context.d.ts.map +1 -0
  17. package/dist/api/chat-context.js +808 -0
  18. package/dist/api/chat-context.js.map +1 -0
  19. package/dist/api/chat-history.d.ts +20 -0
  20. package/dist/api/chat-history.d.ts.map +1 -1
  21. package/dist/api/chat-history.js +46 -1
  22. package/dist/api/chat-history.js.map +1 -1
  23. package/dist/api/chat-proposals.d.ts +534 -0
  24. package/dist/api/chat-proposals.d.ts.map +1 -0
  25. package/dist/api/chat-proposals.js +1562 -0
  26. package/dist/api/chat-proposals.js.map +1 -0
  27. package/dist/api/chat-scope.d.ts +41 -0
  28. package/dist/api/chat-scope.d.ts.map +1 -1
  29. package/dist/api/chat-scope.js +87 -15
  30. package/dist/api/chat-scope.js.map +1 -1
  31. package/dist/api/chat-transcripts.d.ts +27 -2
  32. package/dist/api/chat-transcripts.d.ts.map +1 -1
  33. package/dist/api/chat-transcripts.js +105 -4
  34. package/dist/api/chat-transcripts.js.map +1 -1
  35. package/dist/api/diagnostics.d.ts +15 -0
  36. package/dist/api/diagnostics.d.ts.map +1 -1
  37. package/dist/api/diagnostics.js +56 -0
  38. package/dist/api/diagnostics.js.map +1 -1
  39. package/dist/api/elicitation-cache.d.ts +13 -0
  40. package/dist/api/elicitation-cache.d.ts.map +1 -1
  41. package/dist/api/elicitation-cache.js +12 -0
  42. package/dist/api/elicitation-cache.js.map +1 -1
  43. package/dist/api/eval-sample.d.ts +12 -12
  44. package/dist/api/frame-guard.d.ts +62 -0
  45. package/dist/api/frame-guard.d.ts.map +1 -0
  46. package/dist/api/frame-guard.js +97 -0
  47. package/dist/api/frame-guard.js.map +1 -0
  48. package/dist/api/governance-steering.d.ts +4 -4
  49. package/dist/api/multiscope.d.ts +3 -0
  50. package/dist/api/multiscope.d.ts.map +1 -1
  51. package/dist/api/multiscope.js +13 -0
  52. package/dist/api/multiscope.js.map +1 -1
  53. package/dist/api/needs.d.ts +6 -0
  54. package/dist/api/needs.d.ts.map +1 -1
  55. package/dist/api/needs.js +31 -4
  56. package/dist/api/needs.js.map +1 -1
  57. package/dist/api/product.d.ts.map +1 -1
  58. package/dist/api/product.js +13 -2
  59. package/dist/api/product.js.map +1 -1
  60. package/dist/api/project-aggregates.d.ts +6 -6
  61. package/dist/api/project-aggregates.d.ts.map +1 -1
  62. package/dist/api/project-aggregates.js +16 -24
  63. package/dist/api/project-aggregates.js.map +1 -1
  64. package/dist/api/requirements.d.ts +261 -6
  65. package/dist/api/requirements.d.ts.map +1 -1
  66. package/dist/api/requirements.js +344 -64
  67. package/dist/api/requirements.js.map +1 -1
  68. package/dist/api/routes.d.ts +156 -4
  69. package/dist/api/routes.d.ts.map +1 -1
  70. package/dist/api/routes.js +851 -78
  71. package/dist/api/routes.js.map +1 -1
  72. package/dist/api/run-brief.d.ts +78 -0
  73. package/dist/api/run-brief.d.ts.map +1 -0
  74. package/dist/api/run-brief.js +318 -0
  75. package/dist/api/run-brief.js.map +1 -0
  76. package/dist/api/run-files.d.ts.map +1 -1
  77. package/dist/api/run-files.js +5 -1
  78. package/dist/api/run-files.js.map +1 -1
  79. package/dist/api/run-timing-index.d.ts +27 -0
  80. package/dist/api/run-timing-index.d.ts.map +1 -1
  81. package/dist/api/run-timing-index.js +65 -0
  82. package/dist/api/run-timing-index.js.map +1 -1
  83. package/dist/api/seat-images.d.ts +102 -0
  84. package/dist/api/seat-images.d.ts.map +1 -0
  85. package/dist/api/seat-images.js +333 -0
  86. package/dist/api/seat-images.js.map +1 -0
  87. package/dist/api/server.d.ts +3 -0
  88. package/dist/api/server.d.ts.map +1 -1
  89. package/dist/api/server.js +265 -2
  90. package/dist/api/server.js.map +1 -1
  91. package/dist/api/steering-landing.d.ts +48 -1
  92. package/dist/api/steering-landing.d.ts.map +1 -1
  93. package/dist/api/steering-landing.js +116 -42
  94. package/dist/api/steering-landing.js.map +1 -1
  95. package/dist/api/system-snapshot.d.ts +51 -2
  96. package/dist/api/system-snapshot.d.ts.map +1 -1
  97. package/dist/api/system-snapshot.js +151 -15
  98. package/dist/api/system-snapshot.js.map +1 -1
  99. package/dist/api/testing.d.ts +4 -4
  100. package/dist/api/testing.js +2 -2
  101. package/dist/api/testing.js.map +1 -1
  102. package/dist/apps/spec.d.ts +3009 -0
  103. package/dist/apps/spec.d.ts.map +1 -0
  104. package/dist/apps/spec.js +870 -0
  105. package/dist/apps/spec.js.map +1 -0
  106. package/dist/campaigns/routes.js +1 -1
  107. package/dist/campaigns/routes.js.map +1 -1
  108. package/dist/cli/index.js +3 -3
  109. package/dist/cli/index.js.map +1 -1
  110. package/dist/core/adapter.d.ts +12 -0
  111. package/dist/core/adapter.d.ts.map +1 -1
  112. package/dist/core/adapter.js +36 -1
  113. package/dist/core/adapter.js.map +1 -1
  114. package/dist/core/deliver-text.d.ts.map +1 -1
  115. package/dist/core/deliver-text.js +22 -10
  116. package/dist/core/deliver-text.js.map +1 -1
  117. package/dist/core/estate-mcp-client.d.ts +7 -1
  118. package/dist/core/estate-mcp-client.d.ts.map +1 -1
  119. package/dist/core/estate-mcp-client.js +10 -2
  120. package/dist/core/estate-mcp-client.js.map +1 -1
  121. package/dist/core/exec.d.ts +12 -0
  122. package/dist/core/exec.d.ts.map +1 -1
  123. package/dist/core/exec.js +23 -0
  124. package/dist/core/exec.js.map +1 -1
  125. package/dist/core/reassign-refusal.d.ts.map +1 -1
  126. package/dist/core/reassign-refusal.js +23 -3
  127. package/dist/core/reassign-refusal.js.map +1 -1
  128. package/dist/core/repoPaths.d.ts +32 -7
  129. package/dist/core/repoPaths.d.ts.map +1 -1
  130. package/dist/core/repoPaths.js +56 -9
  131. package/dist/core/repoPaths.js.map +1 -1
  132. package/dist/core/requirements-graph-setting.d.ts +32 -0
  133. package/dist/core/requirements-graph-setting.d.ts.map +1 -0
  134. package/dist/core/requirements-graph-setting.js +84 -0
  135. package/dist/core/requirements-graph-setting.js.map +1 -0
  136. package/dist/core/run-boot-resume.d.ts +4 -1
  137. package/dist/core/run-boot-resume.d.ts.map +1 -1
  138. package/dist/core/run-boot-resume.js +6 -1
  139. package/dist/core/run-boot-resume.js.map +1 -1
  140. package/dist/core/run-identity.d.ts.map +1 -1
  141. package/dist/core/run-identity.js +6 -0
  142. package/dist/core/run-identity.js.map +1 -1
  143. package/dist/core/types.d.ts +14 -0
  144. package/dist/core/types.d.ts.map +1 -1
  145. package/dist/core/types.js.map +1 -1
  146. package/dist/decisions/chat-recorder.d.ts +14 -3
  147. package/dist/decisions/chat-recorder.d.ts.map +1 -1
  148. package/dist/decisions/chat-recorder.js +54 -9
  149. package/dist/decisions/chat-recorder.js.map +1 -1
  150. package/dist/editors/csp.d.ts +24 -4
  151. package/dist/editors/csp.d.ts.map +1 -1
  152. package/dist/editors/csp.js +35 -8
  153. package/dist/editors/csp.js.map +1 -1
  154. package/dist/editors/registry.d.ts +46 -21
  155. package/dist/editors/registry.d.ts.map +1 -1
  156. package/dist/editors/registry.js +13 -2
  157. package/dist/editors/registry.js.map +1 -1
  158. package/dist/editors/routes.d.ts +4 -1
  159. package/dist/editors/routes.d.ts.map +1 -1
  160. package/dist/editors/routes.js +30 -3
  161. package/dist/editors/routes.js.map +1 -1
  162. package/dist/editors/visuals.d.ts +51 -0
  163. package/dist/editors/visuals.d.ts.map +1 -0
  164. package/dist/editors/visuals.js +164 -0
  165. package/dist/editors/visuals.js.map +1 -0
  166. package/dist/editors/webrtc-guard.d.ts +94 -0
  167. package/dist/editors/webrtc-guard.d.ts.map +1 -0
  168. package/dist/editors/webrtc-guard.js +506 -0
  169. package/dist/editors/webrtc-guard.js.map +1 -0
  170. package/dist/inspect/reading.d.ts +110 -0
  171. package/dist/inspect/reading.d.ts.map +1 -0
  172. package/dist/inspect/reading.js +325 -0
  173. package/dist/inspect/reading.js.map +1 -0
  174. package/dist/inspect/routes.d.ts +14 -0
  175. package/dist/inspect/routes.d.ts.map +1 -0
  176. package/dist/inspect/routes.js +44 -0
  177. package/dist/inspect/routes.js.map +1 -0
  178. package/dist/inspect/service.d.ts +161 -0
  179. package/dist/inspect/service.d.ts.map +1 -0
  180. package/dist/inspect/service.js +466 -0
  181. package/dist/inspect/service.js.map +1 -0
  182. package/dist/interactive/bridge-pool.d.ts +11 -2
  183. package/dist/interactive/bridge-pool.d.ts.map +1 -1
  184. package/dist/interactive/bridge-pool.js +10 -1
  185. package/dist/interactive/bridge-pool.js.map +1 -1
  186. package/dist/interactive/doc-binding.d.ts +156 -0
  187. package/dist/interactive/doc-binding.d.ts.map +1 -0
  188. package/dist/interactive/doc-binding.js +277 -0
  189. package/dist/interactive/doc-binding.js.map +1 -0
  190. package/dist/interactive/doc-delete-routes.d.ts +3 -0
  191. package/dist/interactive/doc-delete-routes.d.ts.map +1 -1
  192. package/dist/interactive/doc-delete-routes.js +4 -0
  193. package/dist/interactive/doc-delete-routes.js.map +1 -1
  194. package/dist/interactive/draft-events.d.ts +89 -3
  195. package/dist/interactive/draft-events.d.ts.map +1 -1
  196. package/dist/interactive/draft-events.js +441 -30
  197. package/dist/interactive/draft-events.js.map +1 -1
  198. package/dist/interactive/draft-skill.d.ts +7 -0
  199. package/dist/interactive/draft-skill.d.ts.map +1 -1
  200. package/dist/interactive/draft-skill.js +10 -3
  201. package/dist/interactive/draft-skill.js.map +1 -1
  202. package/dist/interactive/edit-events.d.ts +2 -0
  203. package/dist/interactive/edit-events.d.ts.map +1 -1
  204. package/dist/interactive/edit-events.js +11 -0
  205. package/dist/interactive/edit-events.js.map +1 -1
  206. package/dist/interactive/proposal-create.d.ts +143 -0
  207. package/dist/interactive/proposal-create.d.ts.map +1 -0
  208. package/dist/interactive/proposal-create.js +318 -0
  209. package/dist/interactive/proposal-create.js.map +1 -0
  210. package/dist/interactive/proxy-routes.d.ts +60 -3
  211. package/dist/interactive/proxy-routes.d.ts.map +1 -1
  212. package/dist/interactive/proxy-routes.js +217 -3
  213. package/dist/interactive/proxy-routes.js.map +1 -1
  214. package/dist/interactive/source-packet.d.ts +126 -0
  215. package/dist/interactive/source-packet.d.ts.map +1 -0
  216. package/dist/interactive/source-packet.js +482 -0
  217. package/dist/interactive/source-packet.js.map +1 -0
  218. package/dist/learnings/estate.d.ts +16 -0
  219. package/dist/learnings/estate.d.ts.map +1 -0
  220. package/dist/learnings/estate.js +68 -0
  221. package/dist/learnings/estate.js.map +1 -0
  222. package/dist/learnings/extract.d.ts +56 -0
  223. package/dist/learnings/extract.d.ts.map +1 -0
  224. package/dist/learnings/extract.js +252 -0
  225. package/dist/learnings/extract.js.map +1 -0
  226. package/dist/learnings/recall.d.ts +43 -0
  227. package/dist/learnings/recall.d.ts.map +1 -0
  228. package/dist/learnings/recall.js +104 -0
  229. package/dist/learnings/recall.js.map +1 -0
  230. package/dist/learnings/service.d.ts +183 -0
  231. package/dist/learnings/service.d.ts.map +1 -0
  232. package/dist/learnings/service.js +571 -0
  233. package/dist/learnings/service.js.map +1 -0
  234. package/dist/mcp/ask-server.d.ts.map +1 -1
  235. package/dist/mcp/ask-server.js +37 -4
  236. package/dist/mcp/ask-server.js.map +1 -1
  237. package/dist/mcp/broker.d.ts +12 -1
  238. package/dist/mcp/broker.d.ts.map +1 -1
  239. package/dist/mcp/broker.js +24 -5
  240. package/dist/mcp/broker.js.map +1 -1
  241. package/dist/mcp/invoke.d.ts +26 -2
  242. package/dist/mcp/invoke.d.ts.map +1 -1
  243. package/dist/mcp/invoke.js +51 -5
  244. package/dist/mcp/invoke.js.map +1 -1
  245. package/dist/persona/routes.d.ts +92 -0
  246. package/dist/persona/routes.d.ts.map +1 -0
  247. package/dist/persona/routes.js +69 -0
  248. package/dist/persona/routes.js.map +1 -0
  249. package/dist/persona/store.d.ts +104 -0
  250. package/dist/persona/store.d.ts.map +1 -0
  251. package/dist/persona/store.js +176 -0
  252. package/dist/persona/store.js.map +1 -0
  253. package/dist/persona/voice.d.ts +4 -0
  254. package/dist/persona/voice.d.ts.map +1 -0
  255. package/dist/persona/voice.js +58 -0
  256. package/dist/persona/voice.js.map +1 -0
  257. package/dist/projects/routes.d.ts +2 -2
  258. package/dist/setup/known.d.ts +56 -0
  259. package/dist/setup/known.d.ts.map +1 -0
  260. package/dist/setup/known.js +159 -0
  261. package/dist/setup/known.js.map +1 -0
  262. package/dist/setup/routes.d.ts +13 -0
  263. package/dist/setup/routes.d.ts.map +1 -0
  264. package/dist/setup/routes.js +20 -0
  265. package/dist/setup/routes.js.map +1 -0
  266. package/dist/standing-orders/history.d.ts +2 -0
  267. package/dist/standing-orders/history.d.ts.map +1 -1
  268. package/dist/standing-orders/history.js +1 -0
  269. package/dist/standing-orders/history.js.map +1 -1
  270. package/dist/studio/assets/WickedSans-Regular-fb698rcD.woff2 +0 -0
  271. package/dist/studio/assets/WickedSans-SemiBold-CD53n1AC.woff2 +0 -0
  272. package/dist/studio/assets/WickedScript-Regular-CY5juO6I.woff2 +0 -0
  273. package/dist/studio/assets/WickedSerif-Regular-mdPEjaVZ.woff2 +0 -0
  274. package/dist/studio/assets/index-BUZ_-Syk.css +32 -0
  275. package/dist/studio/assets/index-u4O_7N-b.js +986 -0
  276. package/dist/studio/editors/wicked-deck/editor.json +6 -1
  277. package/dist/studio/editors/wicked-deck/icon.svg +1 -0
  278. package/dist/studio/editors/wicked-deck/index.html +1 -1
  279. package/dist/studio/editors/wicked-doc/editor.json +6 -1
  280. package/dist/studio/editors/wicked-doc/icon.svg +1 -0
  281. package/dist/studio/editors/wicked-doc/index.html +1 -1
  282. package/dist/studio/editors/wicked-insights/editor.json +6 -1
  283. package/dist/studio/editors/wicked-insights/icon.svg +1 -0
  284. package/dist/studio/editors/wicked-insights/index.html +1 -1
  285. package/dist/studio/editors/wicked-page/editor.json +6 -1
  286. package/dist/studio/editors/wicked-page/icon.svg +1 -0
  287. package/dist/studio/editors/wicked-page/index.html +1 -1
  288. package/dist/studio/editors/wicked-video/editor.json +6 -1
  289. package/dist/studio/editors/wicked-video/icon.svg +1 -0
  290. package/dist/studio/editors/wicked-video/index.html +1 -1
  291. package/dist/studio/index.html +2 -2
  292. package/dist/studio/testid-inventory.json +5155 -2707
  293. package/dist/voice/dashboard.d.ts +376 -0
  294. package/dist/voice/dashboard.d.ts.map +1 -0
  295. package/dist/voice/dashboard.js +92 -0
  296. package/dist/voice/dashboard.js.map +1 -0
  297. package/dist/voice/inject-input.d.ts +51 -0
  298. package/dist/voice/inject-input.d.ts.map +1 -0
  299. package/dist/voice/inject-input.js +126 -0
  300. package/dist/voice/inject-input.js.map +1 -0
  301. package/dist/voice/routes.d.ts +41 -0
  302. package/dist/voice/routes.d.ts.map +1 -0
  303. package/dist/voice/routes.js +116 -0
  304. package/dist/voice/routes.js.map +1 -0
  305. package/dist/voice/service.d.ts +177 -0
  306. package/dist/voice/service.d.ts.map +1 -0
  307. package/dist/voice/service.js +400 -0
  308. package/dist/voice/service.js.map +1 -0
  309. package/dist/workflow-catalog/build.d.ts +35 -0
  310. package/dist/workflow-catalog/build.d.ts.map +1 -0
  311. package/dist/workflow-catalog/build.js +229 -0
  312. package/dist/workflow-catalog/build.js.map +1 -0
  313. package/dist/workflow-catalog/catalog-data.d.ts +36 -0
  314. package/dist/workflow-catalog/catalog-data.d.ts.map +1 -0
  315. package/dist/workflow-catalog/catalog-data.js +430 -0
  316. package/dist/workflow-catalog/catalog-data.js.map +1 -0
  317. package/dist/working-doc/event-lines.d.ts +76 -0
  318. package/dist/working-doc/event-lines.d.ts.map +1 -0
  319. package/dist/working-doc/event-lines.js +247 -0
  320. package/dist/working-doc/event-lines.js.map +1 -0
  321. package/dist/working-doc/routes.d.ts +1 -1
  322. package/dist/working-doc/routes.d.ts.map +1 -1
  323. package/dist/working-doc/routes.js +2 -1
  324. package/dist/working-doc/routes.js.map +1 -1
  325. package/dist/working-doc/sections.d.ts +3 -1
  326. package/dist/working-doc/sections.d.ts.map +1 -1
  327. package/dist/working-doc/sections.js +4 -2
  328. package/dist/working-doc/sections.js.map +1 -1
  329. package/dist/working-doc/service.d.ts +66 -1
  330. package/dist/working-doc/service.d.ts.map +1 -1
  331. package/dist/working-doc/service.js +298 -22
  332. package/dist/working-doc/service.js.map +1 -1
  333. package/dist/working-doc/store.d.ts +8 -2
  334. package/dist/working-doc/store.d.ts.map +1 -1
  335. package/dist/working-doc/store.js.map +1 -1
  336. package/endpoint-manifest.json +205 -2
  337. package/package.json +5 -4
  338. package/workflows/distill-learnings.json +27 -0
  339. package/workflows/inspect-unit.json +27 -0
  340. package/dist/studio/assets/index-B-f_VEL2.css +0 -32
  341. package/dist/studio/assets/index-DhkxIK-0.js +0 -845
@@ -56,6 +56,8 @@ export class RunTimingIndex {
56
56
  runToChatId = new Map();
57
57
  /** crew#854: runs an ask launched (the `run.launched` entry's `askPath`). */
58
58
  askPathRuns = new Set();
59
+ /** wf-catalog: run → the NON-system principal its `run.launched` entry names (`Actor.id`), for per-operator usage. */
60
+ runToPrincipal = new Map();
59
61
  /** crew#1157: runs an ANALYSIS chat launched → its workflow (the entry's `chatWorkflow`). */
60
62
  runToChatWorkflow = new Map();
61
63
  /** crew#552: chained run → the onboarding run it was launched from (`detail.chainedFrom`). */
@@ -66,12 +68,17 @@ export class RunTimingIndex {
66
68
  autoCaptureOffRuns = new Set();
67
69
  /** crew#762: the RESOLVED delivery decision the launch recorded (`detail.deliver`). */
68
70
  runToLaunchDeliver = new Map();
71
+ /** DES-CHAT-ARTIFACTS-001 (A3): the proposal a run answers and the artifact it makes (`detail.proposalId`/`artifactRef`). */
72
+ runToProposal = new Map();
73
+ /** A3 (§6.2): a proposal-bound attempt that ended without landing (`run.landing_failed`). */
74
+ runToLandingFailed = new Map();
69
75
  /**
70
76
  * Consume pre-read `run.launched` entries — the seam that lets `createServer` feed this index
71
77
  * from the ONE `readAll({ action: 'run.launched' })` it already runs for `RetryIndex` +
72
78
  * `GroupIndex`, so boot stays at the same full-file trail scans, not one more.
73
79
  */
74
80
  hydrateFromLaunchEntries(entries) {
81
+ const principalSeen = new Set();
75
82
  for (const entry of entries) {
76
83
  if (typeof entry.runId === 'string' && typeof entry.ts === 'number' && entry.ts > 0) {
77
84
  this.runToCreatedAt.set(entry.runId, toSeconds(entry.ts));
@@ -79,6 +86,16 @@ export class RunTimingIndex {
79
86
  const runId = entry.runId;
80
87
  if (typeof runId !== 'string')
81
88
  continue;
89
+ // The trail reads newest first: a reused run id keeps its NEWEST launch's principal (codex r2), and a
90
+ // system relaunch means "nobody's use".
91
+ if (!principalSeen.has(runId)) {
92
+ principalSeen.add(runId);
93
+ const launcher = entry.actor;
94
+ if (typeof launcher?.id === 'string' && launcher.kind !== 'system')
95
+ this.setPrincipal(runId, launcher.id);
96
+ else
97
+ this.runToPrincipal.delete(runId);
98
+ }
82
99
  const detail = entry.detail;
83
100
  const ch = detail?.['channel'];
84
101
  if (ch === 'studio' || ch === 'cli' || ch === 'api')
@@ -105,9 +122,37 @@ export class RunTimingIndex {
105
122
  const deliver = detail?.['deliver'];
106
123
  if (deliver === 'pr' || deliver === 'none')
107
124
  this.runToLaunchDeliver.set(runId, deliver);
125
+ this.noteProposal(runId, detail);
108
126
  this.noteChain(runId, detail);
109
127
  }
110
128
  }
129
+ /** A3: a launch entry's proposal facts (`proposalId`, `artifactRef`), both or neither. */
130
+ noteProposal(runId, detail) {
131
+ const pid = detail?.['proposalId'];
132
+ const ref = detail?.['artifactRef'];
133
+ if (typeof pid === 'string' && pid !== '' && typeof ref === 'string' && ref !== '')
134
+ this.runToProposal.set(runId, { proposalId: pid, artifactRef: ref });
135
+ }
136
+ /** A3: the proposal a run answers and the artifact it makes, or `undefined`. */
137
+ proposalOf(runId) {
138
+ return this.runToProposal.get(runId);
139
+ }
140
+ /** A3: the `run.landing_failed` entries (newest first: the oldest, i.e. the first recorded, wins). */
141
+ hydrateLandingFailed(entries) {
142
+ for (const entry of entries) {
143
+ const reason = entry.detail?.['reason'];
144
+ if (typeof entry.runId !== 'string' || typeof reason !== 'string' || typeof entry.ts !== 'number')
145
+ continue;
146
+ this.runToLandingFailed.set(entry.runId, { reason, at: entry.ts });
147
+ }
148
+ }
149
+ setLandingFailed(runId, reason, at) {
150
+ if (!this.runToLandingFailed.has(runId))
151
+ this.runToLandingFailed.set(runId, { reason, at });
152
+ }
153
+ landingFailedOf(runId) {
154
+ return this.runToLandingFailed.get(runId);
155
+ }
111
156
  /**
112
157
  * Load launch times from EVERY `run.launched` entry in the trail — exhaustively, not capped, for
113
158
  * the same reason `RetryIndex.hydrate` is (BRIEF-UX-002 C5): a launch fact thousands of runs deep
@@ -147,6 +192,20 @@ export class RunTimingIndex {
147
192
  setLaunchActor(runId, actor) {
148
193
  this.runToLaunchActor.set(runId, actor);
149
194
  }
195
+ /** wf-catalog: record the principal that launched a run (the live half of the hydrate above). Callers pass
196
+ * only a NON-system launcher: a schedule's or the daemon's launch is nobody's use, whatever its id. */
197
+ setPrincipal(runId, actorId) {
198
+ if (actorId.length > 0)
199
+ this.runToPrincipal.set(runId, actorId);
200
+ }
201
+ /** wf-catalog: a system relaunch of a reused run id is nobody's use. */
202
+ clearPrincipal(runId) {
203
+ this.runToPrincipal.delete(runId);
204
+ }
205
+ /** The principal (`Actor.id`) the run's `run.launched` entry names, or `undefined` when there is none. */
206
+ principalFor(runId) {
207
+ return this.runToPrincipal.get(runId);
208
+ }
150
209
  /** The launch actor string, or `undefined` (ABSENT when the launch did not name one). */
151
210
  launchActorFor(runId) {
152
211
  return this.runToLaunchActor.get(runId);
@@ -316,6 +375,10 @@ export function recordRunLaunched(audit, runTimingIndex, actor, runId, detail) {
316
375
  const ts = audit.record('run.launched', actor, { runId, detail });
317
376
  if (ts > 0)
318
377
  runTimingIndex?.set(runId, ts);
378
+ if (actor.kind !== 'system')
379
+ runTimingIndex?.setPrincipal(runId, actor.id);
380
+ else
381
+ runTimingIndex?.clearPrincipal(runId);
319
382
  // crew#632: also stamp channel/actor into the index for live serving (same posture as created_at).
320
383
  const ch = detail['channel'];
321
384
  if ((ch === 'studio' || ch === 'cli' || ch === 'api') && runTimingIndex !== undefined) {
@@ -340,6 +403,8 @@ export function recordRunLaunched(audit, runTimingIndex, actor, runId, detail) {
340
403
  }
341
404
  // crew#552: the chain facts, live — the same fields a restart rehydrates.
342
405
  runTimingIndex?.noteChain(runId, detail);
406
+ // A3: the proposal facts, live — the same fields a restart rehydrates.
407
+ runTimingIndex?.noteProposal(runId, detail);
343
408
  // crew#762: the launch's delivery decision, live — the same field a restart rehydrates.
344
409
  const deliver = detail['deliver'];
345
410
  if ((deliver === 'pr' || deliver === 'none') && runTimingIndex !== undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"run-timing-index.js","sourceRoot":"","sources":["../../src/api/run-timing-index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-timing-index.js","sourceRoot":"","sources":["../../src/api/run-timing-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import type { SystemInfraRow } from '../core/types.js';
2
+ /** VM disk used, %, from which the row warns (the kubelet starts deleting unheld images at 85). */
3
+ export declare const SEAT_DISK_WARN_PCT = 75;
4
+ /** VM disk used, %, from which the row is down: the runtime is close to refusing writes. */
5
+ export declare const SEAT_DISK_DOWN_PCT = 92;
6
+ /** How long a rebuild may run: the engine bounds each image build (30 min), so this only catches
7
+ * an engine that stopped answering. */
8
+ export declare const REBUILD_TIMEOUT_MS: number;
9
+ export interface SeatImageEntry {
10
+ image: string;
11
+ present: boolean;
12
+ held: boolean;
13
+ }
14
+ export interface SeatImageSeat extends SeatImageEntry {
15
+ cli: string;
16
+ operatorImage: boolean;
17
+ }
18
+ /** `wicked-core seat-image status --json`. */
19
+ export interface SeatImageStatus {
20
+ runtime: string;
21
+ base: SeatImageEntry | null;
22
+ baseRecipe: boolean;
23
+ holdSupported: boolean;
24
+ floor: SeatImageEntry;
25
+ seats: SeatImageSeat[];
26
+ disk: {
27
+ totalBytes: number;
28
+ availBytes: number;
29
+ usedPct: number;
30
+ } | null;
31
+ imageGcHighPct: number;
32
+ }
33
+ /** Parse the engine's answer; `null` when it is not the shape (an older engine prints text). */
34
+ export declare function parseSeatImageStatus(stdout: string): SeatImageStatus | null;
35
+ /** What a rebuild is doing, or did last. */
36
+ export interface RebuildState {
37
+ running: boolean;
38
+ startedAt: string;
39
+ finishedAt: string | null;
40
+ /** The engine's exit code; `null` while running. */
41
+ rc: number | null;
42
+ /** The last lines it printed (bounded, home paths spelled `~`), live while it runs. */
43
+ tail: string[];
44
+ /** The last line that reads as a failure (`failed`, `error`, `denied`…), kept apart from the
45
+ * tail so a later seat's success never stands in for it; `null` when none. */
46
+ error: string | null;
47
+ clis: string[];
48
+ }
49
+ export interface SeatImagesProbeInput {
50
+ containerFloor: boolean;
51
+ /** The roster's seat CLIs; `null` when the roster could not be read. */
52
+ clis: string[] | null;
53
+ /** A fresh `seat-image status --json` read. */
54
+ status: () => Promise<SeatImageStatus | null>;
55
+ /** The rebuild, read AFTER the status settles (a rebuild that ends during the read is seen). */
56
+ rebuild: () => RebuildState | null;
57
+ timeoutMs?: number;
58
+ }
59
+ /**
60
+ * The `seat_images` row: `down` when a missing image cannot be built (the operator's base is gone
61
+ * with no recipe, or an operator image is missing) or the VM disk is nearly full; `degraded` when
62
+ * roster images are missing (the next unit builds each first, minutes), not yet held, or the VM
63
+ * disk is past the warning line; `unknown` with no reading (of the images, the roster or the disk);
64
+ * `ok` otherwise. `off` on the host floor.
65
+ */
66
+ export declare function probeSeatImages(input: SeatImagesProbeInput): Promise<SystemInfraRow>;
67
+ /** A running rebuild: `onLine` per output line; `started` settles once the engine process exists
68
+ * (rejects when it cannot be started); `done` resolves with its exit code. */
69
+ export type SpawnLines = (file: string, args: string[], opts: {
70
+ timeout: number;
71
+ onLine: (line: string) => void;
72
+ killAfterMs?: number;
73
+ }) => {
74
+ started: Promise<void>;
75
+ done: Promise<number>;
76
+ };
77
+ /** The real runner: `spawn`, lines as they come (stdout and stderr), killed at `timeout`. */
78
+ export declare const spawnLines: SpawnLines;
79
+ /**
80
+ * One rebuild at a time: `wicked-core seat-image build <clis…>` (builds the floor and each seat
81
+ * image, rebuilding a missing base from its recipe; holds them, and an operator's own image). Its
82
+ * state is kept for the row, its output read live into a bounded tail.
83
+ */
84
+ export declare class SeatImageRebuilder {
85
+ private readonly exe;
86
+ private readonly run;
87
+ private readonly now;
88
+ private state;
89
+ constructor(exe: () => string | null, run?: SpawnLines, now?: () => Date);
90
+ current(): RebuildState | null;
91
+ /** Start a rebuild of `clis`; `started: false` with why when one runs, no engine binary is set or
92
+ * it cannot be started, or there is nothing to rebuild. */
93
+ start(clis: string[]): Promise<{
94
+ started: true;
95
+ state: RebuildState;
96
+ } | {
97
+ started: false;
98
+ reason: string;
99
+ state: RebuildState | null;
100
+ }>;
101
+ }
102
+ //# sourceMappingURL=seat-images.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seat-images.d.ts","sourceRoot":"","sources":["../../src/api/seat-images.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,333 @@
1
+ /**
2
+ * The seat images row of the Nerve Center (`GET /system` infra key `seat_images`) and its one fix,
3
+ * "Rebuild seat images" (`POST /system/seat-images/rebuild`).
4
+ *
5
+ * Governed seats run in container images the engine builds (wicked-core `container_floor.rs`). A
6
+ * desktop runtime that also runs Kubernetes (Rancher Desktop's k3s) has a kubelet that deletes every
7
+ * image no container references once the VM's image disk passes 85 % (`imageGCHighThresholdPercent`).
8
+ * The engine keeps each seat image with a stopped holder container, so the kubelet cannot delete it
9
+ * (wicked-core#1225); this row says whether the images are there and held, and warns while the VM
10
+ * disk climbs toward that line, BEFORE the cleanup runs.
11
+ *
12
+ * The reading is `wicked-core seat-image status --json` (the engine owns the image tags), run per
13
+ * request under the probe's bound: never a cached "ok".
14
+ */
15
+ import { spawn } from 'node:child_process';
16
+ import { basename } from 'node:path';
17
+ import { childEnvWithBootEstateDb } from '../core/governance-store.js';
18
+ import { homeless } from './seat-standing.js';
19
+ import { infraRow, PROBE_TIMEOUT_MS, settleWithin } from './system-snapshot.js';
20
+ /** VM disk used, %, from which the row warns (the kubelet starts deleting unheld images at 85). */
21
+ export const SEAT_DISK_WARN_PCT = 75;
22
+ /** VM disk used, %, from which the row is down: the runtime is close to refusing writes. */
23
+ export const SEAT_DISK_DOWN_PCT = 92;
24
+ /** How long a rebuild may run: the engine bounds each image build (30 min), so this only catches
25
+ * an engine that stopped answering. */
26
+ export const REBUILD_TIMEOUT_MS = 4 * 60 * 60_000;
27
+ /** Lines of a rebuild's output kept for the row. */
28
+ const TAIL_LINES = 6;
29
+ const LINE_MAX = 240;
30
+ /** Only the fields this row reads, picked one by one (nothing else the engine prints rides along). */
31
+ function entry(v) {
32
+ const o = v;
33
+ if (o === null || typeof o !== 'object' || typeof o['image'] !== 'string' || typeof o['present'] !== 'boolean' || typeof o['held'] !== 'boolean')
34
+ return null;
35
+ return { image: o['image'], present: o['present'], held: o['held'] };
36
+ }
37
+ /** Parse the engine's answer; `null` when it is not the shape (an older engine prints text). */
38
+ export function parseSeatImageStatus(stdout) {
39
+ let v;
40
+ try {
41
+ v = JSON.parse(stdout.trim());
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ const o = v;
47
+ if (o === null || typeof o !== 'object' || !Array.isArray(o['seats']))
48
+ return null;
49
+ const floor = entry(o['floor']);
50
+ if (floor === null)
51
+ return null;
52
+ const seats = [];
53
+ for (const s of o['seats']) {
54
+ const e = entry(s);
55
+ const cli = s?.cli;
56
+ if (e !== null && typeof cli === 'string')
57
+ seats.push({ cli, ...e, operatorImage: s.operatorImage === true });
58
+ }
59
+ const d = o['disk'];
60
+ const disk = d !== null && typeof d === 'object' && typeof d['totalBytes'] === 'number' && typeof d['availBytes'] === 'number' && typeof d['usedPct'] === 'number'
61
+ ? { totalBytes: d['totalBytes'], availBytes: d['availBytes'], usedPct: d['usedPct'] }
62
+ : null;
63
+ return {
64
+ runtime: typeof o['runtime'] === 'string' ? homeless(o['runtime']) : '',
65
+ base: entry(o['base']),
66
+ baseRecipe: o['baseRecipe'] === true,
67
+ // An engine before the field held on docker only: read as supported where it says nothing.
68
+ holdSupported: o['holdSupported'] !== false,
69
+ floor,
70
+ seats,
71
+ disk,
72
+ imageGcHighPct: typeof o['imageGcHighPct'] === 'number' ? o['imageGcHighPct'] : 85,
73
+ };
74
+ }
75
+ const gib = (n) => `${Math.round((n / 2 ** 30) * 10) / 10} GiB`;
76
+ /**
77
+ * The `seat_images` row: `down` when a missing image cannot be built (the operator's base is gone
78
+ * with no recipe, or an operator image is missing) or the VM disk is nearly full; `degraded` when
79
+ * roster images are missing (the next unit builds each first, minutes), not yet held, or the VM
80
+ * disk is past the warning line; `unknown` with no reading (of the images, the roster or the disk);
81
+ * `ok` otherwise. `off` on the host floor.
82
+ */
83
+ export async function probeSeatImages(input) {
84
+ const started = Date.now();
85
+ const timeoutMs = input.timeoutMs ?? PROBE_TIMEOUT_MS;
86
+ if (!input.containerFloor)
87
+ return infraRow('seat_images', 'off', 'not used: seats run on the host floor, not in containers', null, started);
88
+ const settled = await settleWithin(input.status, timeoutMs);
89
+ const rebuild = input.rebuild();
90
+ if (settled.kind === 'timeout') {
91
+ return infraRow('seat_images', 'unknown', `the engine's seat image status did not answer within ${Math.round(timeoutMs / 1000)} s`, 'Re-check; a container runtime under load answers late.', started, { rebuild }, timeoutMs);
92
+ }
93
+ if (settled.kind === 'error' || settled.value === null) {
94
+ const why = settled.kind === 'error' ? homeless(settled.error) : 'the engine gave no status (an engine older than wicked-core#1225 prints none)';
95
+ return infraRow('seat_images', 'unknown', `the seat images could not be read: ${why}`, 'Re-check; if it persists, the engine binary (WICKED_CORE_EXE) may be missing or older.', started, { rebuild }, timeoutMs);
96
+ }
97
+ if (input.clis === null) {
98
+ return infraRow('seat_images', 'unknown', 'the roster could not be read, so which seat images matter is not known', 'Re-check.', started, { rebuild }, timeoutMs);
99
+ }
100
+ const st = settled.value;
101
+ const roster = new Set(input.clis);
102
+ const seats = st.seats.filter((s) => roster.has(s.cli));
103
+ const missing = seats.filter((s) => !s.present && !s.operatorImage).map((s) => s.cli);
104
+ const operatorMissing = seats.filter((s) => !s.present && s.operatorImage).map((s) => s.cli);
105
+ // The operator base matters only to a seat the engine builds (an operator image does not build
106
+ // on it).
107
+ const base = seats.some((s) => !s.operatorImage) ? st.base : null;
108
+ const baseGone = base !== null && !base.present;
109
+ const unheld = st.holdSupported
110
+ ? [
111
+ ...(base !== null && base.present && !base.held ? ['base'] : []),
112
+ ...(st.floor.present && !st.floor.held ? ['floor'] : []),
113
+ ...seats.filter((s) => s.present && !s.held).map((s) => s.cli),
114
+ ]
115
+ : [];
116
+ const disk = st.disk;
117
+ const details = {
118
+ images: { base, baseRecipe: st.baseRecipe, holdSupported: st.holdSupported, floor: st.floor, seats },
119
+ disk,
120
+ missing,
121
+ unheld,
122
+ imageGcHighPct: st.imageGcHighPct,
123
+ rebuild,
124
+ };
125
+ const diskWords = disk === null ? null : `runtime VM disk ${disk.usedPct}% used (${gib(disk.availBytes)} free of ${gib(disk.totalBytes)})`;
126
+ const rebuilding = rebuild?.running === true;
127
+ const rebuildWords = rebuilding
128
+ ? `; rebuilding since ${rebuild.startedAt}`
129
+ : rebuild !== null && rebuild.rc !== null && rebuild.rc !== 0
130
+ ? `; the last rebuild failed (exit ${rebuild.rc})${rebuild.error !== null ? `: ${rebuild.error}` : ''}`
131
+ : '';
132
+ const problems = [];
133
+ let state = 'ok';
134
+ const worse = (s) => {
135
+ if (s === 'down' || state === 'ok')
136
+ state = s;
137
+ };
138
+ // Something must be built: a missing engine seat image, or the floor image.
139
+ const mustBuild = missing.length > 0 || !st.floor.present;
140
+ if (baseGone) {
141
+ if (st.baseRecipe) {
142
+ worse('degraded');
143
+ problems.push(`the seat base ${base.image} is missing; it is rebuilt from its Dockerfile before the next seat image`);
144
+ }
145
+ else if (missing.length > 0) {
146
+ worse('down');
147
+ problems.push(`the seat base ${base.image} is missing and nothing can rebuild it, so the missing seat images cannot be built`);
148
+ }
149
+ else {
150
+ worse('degraded');
151
+ problems.push(`the seat base ${base.image} is missing and nothing can rebuild it: the seats run on the images they have, but a seat image deleted now could not be rebuilt`);
152
+ }
153
+ }
154
+ if (missing.length > 0) {
155
+ const unbuildable = baseGone && !st.baseRecipe;
156
+ worse(unbuildable ? 'down' : 'degraded');
157
+ problems.push(`seat images missing: ${missing.join(', ')}${unbuildable ? '' : ' (the next unit on each builds it first, minutes)'}`);
158
+ }
159
+ if (operatorMissing.length > 0) {
160
+ worse('down');
161
+ problems.push(`the operator's own seat image is missing for ${operatorMissing.join(', ')} (WICKED_SEAT_IMAGE_<CLI>; the engine never builds it)`);
162
+ }
163
+ if (!st.floor.present) {
164
+ worse('degraded');
165
+ problems.push(`the floor image ${st.floor.image} is missing (built on the next seat)`);
166
+ }
167
+ if (unheld.length > 0) {
168
+ worse('degraded');
169
+ problems.push(`not held against image cleanup: ${unheld.join(', ')} (the engine holds them on the next seat)`);
170
+ }
171
+ if (disk !== null && disk.usedPct >= SEAT_DISK_DOWN_PCT) {
172
+ worse('down');
173
+ problems.push(`${diskWords}: the container runtime is close to refusing writes`);
174
+ }
175
+ else if (disk !== null && disk.usedPct >= SEAT_DISK_WARN_PCT) {
176
+ worse('degraded');
177
+ problems.push(`${diskWords}: from ${st.imageGcHighPct}% a kubelet's image cleanup deletes every image no container holds`);
178
+ }
179
+ if (state === 'ok') {
180
+ if (disk === null) {
181
+ return infraRow('seat_images', 'unknown', `the seat images are present${st.holdSupported ? ' and held' : ''}, but the runtime VM disk could not be read`, 'Re-check; the disk is read in a throwaway floor container.', started, details, timeoutMs);
182
+ }
183
+ const n = seats.length + 1 + (base !== null ? 1 : 0);
184
+ const heldWord = st.holdSupported ? 'present and held' : 'present (this runtime cannot hold them against image cleanup)';
185
+ return infraRow('seat_images', 'ok', `${n} seat image(s) ${heldWord}; ${diskWords}${rebuilding ? rebuildWords : ''}`, null, started, details, timeoutMs);
186
+ }
187
+ const diskPressed = disk !== null && disk.usedPct >= SEAT_DISK_WARN_PCT;
188
+ // Every image the seats use is there and held: only then do they survive the cleanup.
189
+ const allHeld = st.holdSupported && unheld.length === 0 && !mustBuild && !baseGone && operatorMissing.length === 0;
190
+ // The runtime the engine reads (its CLI), so the cleanup goes to the right one.
191
+ const rt = basename(st.runtime) || 'docker';
192
+ // docker's `volume prune` removes only anonymous volumes no container uses; podman's removes every
193
+ // unused volume, named ones too, so it is never suggested there.
194
+ const volumes = rt === 'docker'
195
+ ? 'dangling volumes (`docker volume prune` removes anonymous volumes no container uses) and build cache (`docker builder prune`)'
196
+ : `the dangling volumes you no longer need (\`${rt} volume ls --filter dangling=true\`, then remove them by name) and its build cache`;
197
+ const freeDisk = `Free space in the container runtime VM first: ${volumes}.${allHeld ? ' The seat images are held and survive the cleanup.' : ''}`;
198
+ const fix = rebuilding
199
+ ? 'Wait for the running rebuild to finish, then re-check.'
200
+ : operatorMissing.length > 0
201
+ ? 'Rebuild or re-pull your own seat image (WICKED_SEAT_IMAGE_<CLI>), then re-check.'
202
+ : baseGone && !st.baseRecipe
203
+ ? `Rebuild ${base.image} from its Dockerfile (or set WICKED_SEAT_BASE_DOCKERFILE so the engine rebuilds it)${missing.length > 0 ? ', then Rebuild seat images' : ''}.`
204
+ : mustBuild || unheld.length > 0 || baseGone
205
+ ? 'Rebuild seat images now, or let the next unit build or hold each on first use.'
206
+ : '';
207
+ // A pressed disk comes first: building onto it makes it worse.
208
+ const remedy = diskPressed ? `${freeDisk}${fix !== '' ? ` Then: ${fix}` : ''}` : fix || 'Re-check.';
209
+ return infraRow('seat_images', state, `${problems.join('; ')}${rebuildWords}`, remedy, started, details, timeoutMs);
210
+ }
211
+ /** The real runner: `spawn`, lines as they come (stdout and stderr), killed at `timeout`. */
212
+ export const spawnLines = (file, args, opts) => {
213
+ // The daemon's boot governance store, never one a caller exported (crew#495).
214
+ const child = spawn(file, args, { stdio: ['ignore', 'pipe', 'pipe'], env: childEnvWithBootEstateDb(process.env) });
215
+ const started = new Promise((resolve, reject) => {
216
+ child.once('spawn', () => resolve());
217
+ child.once('error', reject);
218
+ });
219
+ const done = new Promise((resolve) => {
220
+ // Past the bound: SIGTERM, then SIGKILL if it is still there 10 s later.
221
+ let kill;
222
+ const timer = setTimeout(() => {
223
+ child.kill('SIGTERM');
224
+ kill = setTimeout(() => child.kill('SIGKILL'), opts.killAfterMs ?? 10_000);
225
+ kill.unref?.();
226
+ }, opts.timeout);
227
+ timer.unref?.();
228
+ const feed = (stream) => {
229
+ let buf = '';
230
+ let dropping = false;
231
+ stream?.setEncoding('utf8');
232
+ stream?.on('data', (chunk) => {
233
+ buf += chunk;
234
+ let i;
235
+ while ((i = buf.indexOf('\n')) >= 0) {
236
+ if (!dropping)
237
+ opts.onLine(buf.slice(0, i));
238
+ dropping = false;
239
+ buf = buf.slice(i + 1);
240
+ }
241
+ // An overlong line keeps its start (what names it) and drops the rest until its end.
242
+ if (buf.length > LINE_MAX) {
243
+ if (!dropping)
244
+ opts.onLine(buf.slice(0, LINE_MAX));
245
+ dropping = true;
246
+ buf = '';
247
+ }
248
+ });
249
+ stream?.on('end', () => {
250
+ if (buf !== '' && !dropping)
251
+ opts.onLine(buf);
252
+ });
253
+ };
254
+ feed(child.stdout);
255
+ feed(child.stderr);
256
+ const end = (rc) => {
257
+ clearTimeout(timer);
258
+ if (kill !== undefined)
259
+ clearTimeout(kill);
260
+ resolve(rc);
261
+ };
262
+ child.once('error', () => end(127));
263
+ // `exit`, not `close`: a descendant still holding the pipes cannot keep the slot taken.
264
+ child.once('exit', (code) => end(typeof code === 'number' ? code : 1));
265
+ });
266
+ return { started, done };
267
+ };
268
+ /**
269
+ * One rebuild at a time: `wicked-core seat-image build <clis…>` (builds the floor and each seat
270
+ * image, rebuilding a missing base from its recipe; holds them, and an operator's own image). Its
271
+ * state is kept for the row, its output read live into a bounded tail.
272
+ */
273
+ export class SeatImageRebuilder {
274
+ exe;
275
+ run;
276
+ now;
277
+ state = null;
278
+ constructor(exe, run = spawnLines, now = () => new Date()) {
279
+ this.exe = exe;
280
+ this.run = run;
281
+ this.now = now;
282
+ }
283
+ current() {
284
+ return this.state === null ? null : { ...this.state, tail: [...this.state.tail], clis: [...this.state.clis] };
285
+ }
286
+ /** Start a rebuild of `clis`; `started: false` with why when one runs, no engine binary is set or
287
+ * it cannot be started, or there is nothing to rebuild. */
288
+ async start(clis) {
289
+ if (this.state?.running === true)
290
+ return { started: false, reason: 'a rebuild is already running', state: this.current() };
291
+ const exe = this.exe();
292
+ if (exe === null)
293
+ return { started: false, reason: 'WICKED_CORE_EXE is not set: crew cannot reach the engine binary', state: this.current() };
294
+ const wanted = [...new Set(clis)].filter((c) => /^[a-z][a-z0-9-]{0,31}$/.test(c));
295
+ if (wanted.length === 0)
296
+ return { started: false, reason: 'no container seat on the roster has an engine seat image', state: this.current() };
297
+ const state = { running: true, startedAt: this.now().toISOString(), finishedAt: null, rc: null, tail: [], error: null, clis: wanted };
298
+ // Taken before the spawn settles: a second press in that moment is refused, never a second run.
299
+ this.state = state;
300
+ const onLine = (raw) => {
301
+ const line = raw.trim();
302
+ // Buildkit's step frames are noise for a person; the engine's own lines are kept.
303
+ if (line === '' || /^#\d+ /.test(line) || /^=>/.test(line))
304
+ return;
305
+ const l = homeless(line);
306
+ const kept = l.length > LINE_MAX ? `${l.slice(0, LINE_MAX - 1)}…` : l;
307
+ state.tail.push(kept);
308
+ if (state.tail.length > TAIL_LINES)
309
+ state.tail.splice(0, state.tail.length - TAIL_LINES);
310
+ if (/\b(fail(ed|s)?|error|denied|missing|cannot|refused)\b/i.test(kept))
311
+ state.error = kept;
312
+ };
313
+ const finish = (rc) => {
314
+ state.running = false;
315
+ state.rc = rc;
316
+ state.finishedAt = this.now().toISOString();
317
+ };
318
+ let h;
319
+ try {
320
+ h = this.run(exe, ['seat-image', 'build', ...wanted], { timeout: REBUILD_TIMEOUT_MS, onLine });
321
+ await h.started;
322
+ }
323
+ catch (e) {
324
+ const why = homeless(e instanceof Error ? e.message : String(e));
325
+ onLine(why);
326
+ finish(127);
327
+ return { started: false, reason: `the engine could not be started: ${why}`, state: this.current() };
328
+ }
329
+ void h.done.then(finish, () => finish(1));
330
+ return { started: true, state: this.current() };
331
+ }
332
+ }
333
+ //# sourceMappingURL=seat-images.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seat-images.js","sourceRoot":"","sources":["../../src/api/seat-images.ts"],"names":[],"mappings":"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"}