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
@@ -0,0 +1,571 @@
1
+ /**
2
+ * Run learnings, part 2: from a run's record to the approve queue (the operator's 2026-10-30 ask).
3
+ *
4
+ * - At the run's CHECKPOINTS (a power checkpoint, a unit done, a gate decided) the template
5
+ * learnings found so far ({@link extractLearnings}: a flaky test, a check the sandbox could not
6
+ * start) are filed at once.
7
+ * - At the run's END the rest of the evidence (rulings, steers, decisions, review findings, base-red
8
+ * checks) goes to ONE cheap seat that did not build the run: a `distill-learnings` run, one seat,
9
+ * one turn, no repository. Crew files what it writes. When no such seat can run (none signed in,
10
+ * the launch refused, it wrote nothing usable), the evidence is filed raw, trimmed and capped.
11
+ * - The distil run is never a person's to answer (wicked-crew#1251 follow-up: a codex distil that
12
+ * rightly found nothing replied in under 200 characters, failed the engine's substance floor and
13
+ * sat in the operator's queue as "Waiting on you"). Its outcome is its report file, read here, so
14
+ * whatever gate it stops at (a short reply, a crashed seat), crew stops the run and files from
15
+ * the report: an empty one is recorded as "none found", a missing one files the evidence raw.
16
+ *
17
+ * Everything filed is a PROPOSAL of kind `memory` in estate's queue, attributed to the SOURCE run
18
+ * (`provenance.run_id`), faceted by repo, project and seat. Nothing is written without a person's
19
+ * approval. The same evidence is never proposed twice: a candidate whose text is already in the queue
20
+ * (pending or approved) or in the memory store is skipped, whichever run filed it.
21
+ *
22
+ * Never throws into the event pump: every failure is logged and the run is left as it was.
23
+ */
24
+ import { mkdirSync, readdirSync, readFileSync, renameSync, writeFileSync, existsSync } from 'node:fs';
25
+ import { homedir } from 'node:os';
26
+ import { join } from 'node:path';
27
+ import { fileURLToPath } from 'node:url';
28
+ import { creatorSeats, extractLearnings, normalizeLearning, projectOf, repoOf } from './extract.js';
29
+ export const DISTILL_WORKFLOW = 'distill-learnings';
30
+ export const DISTILL_WORKFLOW_FILE = fileURLToPath(new URL('../../workflows/distill-learnings.json', import.meta.url));
31
+ export const HANDOFF_FILE = 'handoff.json';
32
+ export const OUT_DIR = 'out';
33
+ export const REPORT_FILE = 'report.json';
34
+ /** Written once a source run's learnings were filed at its end: a resume's second terminal frame files nothing. */
35
+ export const FILED_FILE = 'filed.json';
36
+ /** The distil run launched for a source run (its id and seat). */
37
+ export const DISTILL_FILE = 'distill.json';
38
+ /** The agent named on a learning crew worded itself (a template, or raw evidence). */
39
+ export const CREW_AGENT = 'crew';
40
+ /** The most learnings one run proposes from its end (the distil seat's, or the raw fallback). */
41
+ export const MAX_END_LEARNINGS = 5;
42
+ /** The shortest learning worth a person's time (estate refuses shorter bodies too). */
43
+ export const MIN_LEARNING_CHARS = 40;
44
+ export const MAX_LEARNING_CHARS = 1500;
45
+ /** Runs whose own record is not a source of learnings: they capture, review or set up. */
46
+ export const NO_LEARNINGS_WORKFLOWS = new Set([
47
+ DISTILL_WORKFLOW,
48
+ 'inspect-unit',
49
+ 'capture-learnings',
50
+ 'review-recent-work',
51
+ 'run-evals',
52
+ 'onboarding',
53
+ 'learn',
54
+ ]);
55
+ const TERMINAL = new Set(['completed', 'failed', 'cancelled']);
56
+ const CHECKPOINT_EVENTS = new Set(['powerCheckpointReached', 'unitDone', 'gateDecided']);
57
+ const END_EVENTS = new Set(['sessionCompleted', 'sessionFailed', 'runCancelled']);
58
+ /** A run stopped at a gate for a person. On a distil run, crew answers it by stopping the run. */
59
+ const PARKED_EVENT = 'awaitingHuman';
60
+ /** `WICKED_CREW_RUN_LEARNINGS`: `off`, `extract` (no distil seat), `distill` (the default). A test process
61
+ * (vitest, NODE_ENV=test) defaults to `off`, so a headless server never spawns estate on a stub run's frames. */
62
+ export function runLearningsMode(env = process.env) {
63
+ const v = (env['WICKED_CREW_RUN_LEARNINGS'] ?? '').trim().toLowerCase();
64
+ if (v === 'off' || v === 'extract' || v === 'distill')
65
+ return v;
66
+ return env['VITEST'] !== undefined || env['NODE_ENV'] === 'test' ? 'off' : 'distill';
67
+ }
68
+ /** Where each source run's distil handoff lives: outside the daemon state home (the worker fence), like reviews. */
69
+ export function defaultLearningsDir(env = process.env) {
70
+ return env['WICKED_CREW_LEARNINGS_DIR'] ?? join(homedir(), '.wicked', 'learnings');
71
+ }
72
+ export function loadDistillWorkflow(file = DISTILL_WORKFLOW_FILE) {
73
+ const def = JSON.parse(readFileSync(file, 'utf8'));
74
+ delete def['$comment'];
75
+ return def;
76
+ }
77
+ const isRecord = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
78
+ const KINDS = new Set(['gotcha', 'decision', 'pattern', 'steering']);
79
+ /** Raw fallback order: the operator's own words first, then what bit, then the rest. */
80
+ const FALLBACK_ORDER = { operator_ruling: 0, steer: 1, qe_review: 2, working_notes: 3, review: 4, repo_checks: 5 };
81
+ function tierOf(kind) {
82
+ return kind === 'pattern' ? 'procedural' : 'semantic';
83
+ }
84
+ /** The proposals one run filed (provenance), as the run's end card and the queue's filter read them. */
85
+ export function learningsOfRun(runId, rows) {
86
+ return rows
87
+ .filter((r) => r.kind_type === 'memory' && r.provenance['run_id'] === runId)
88
+ .map((r) => ({
89
+ id: r.id,
90
+ state: r.state,
91
+ capture: typeof r.payload['capture'] === 'string' ? r.payload['capture'] : null,
92
+ content: typeof r.payload['content'] === 'string' ? r.payload['content'] : '',
93
+ agent: typeof r.provenance['run_agent'] === 'string' ? r.provenance['run_agent'] : null,
94
+ createdAt: typeof r.created_at === 'number' ? r.created_at : null,
95
+ }));
96
+ }
97
+ /** Replace a record whole or not at all: a crash mid-write never leaves a truncated `distill.json` (the run's identity). */
98
+ function writeJsonAtomic(path, value) {
99
+ const tmp = `${path}.${process.pid}.tmp`;
100
+ writeFileSync(tmp, JSON.stringify(value), 'utf8');
101
+ renameSync(tmp, path);
102
+ }
103
+ /** How many distinct evidence items the distil seat accounted for (`checked[]`, kept or dropped with a reason). */
104
+ export function checkedCount(raw, evidenceIds) {
105
+ if (!isRecord(raw) || !Array.isArray(raw['checked']))
106
+ return 0;
107
+ const text = (v) => typeof v === 'string' && v.trim() !== '';
108
+ const ids = new Set();
109
+ for (const c of raw['checked']) {
110
+ if (!isRecord(c) || !text(c['evidence']) || typeof c['kept'] !== 'boolean' || !text(c['why']))
111
+ continue;
112
+ const id = c['evidence'].trim();
113
+ // Only an item the handoff actually held: the report is the seat's, not evidence of what it read.
114
+ if (evidenceIds === undefined || evidenceIds.has(id))
115
+ ids.add(id);
116
+ }
117
+ return ids.size;
118
+ }
119
+ /**
120
+ * A distil report's learnings, validated: known kind, sane length, at most {@link MAX_END_LEARNINGS}. `null` when
121
+ * there is no usable report: none, malformed, or entries none of which survive validation. An explicitly EMPTY list is
122
+ * the seat's judgment (nothing durable) and is kept as `[]`.
123
+ */
124
+ export function parseDistillReport(raw) {
125
+ if (!isRecord(raw) || !Array.isArray(raw['learnings']))
126
+ return null;
127
+ const entries = raw['learnings'];
128
+ const out = [];
129
+ for (const e of entries) {
130
+ if (!isRecord(e))
131
+ continue;
132
+ const kind = typeof e['kind'] === 'string' && KINDS.has(e['kind']) ? e['kind'] : 'gotcha';
133
+ const content = typeof e['content'] === 'string' ? e['content'].replace(/\s+/gu, ' ').trim() : '';
134
+ if (content.length < MIN_LEARNING_CHARS || content.length > MAX_LEARNING_CHARS)
135
+ continue;
136
+ out.push({ kind, content });
137
+ if (out.length >= MAX_END_LEARNINGS)
138
+ break;
139
+ }
140
+ return entries.length > 0 && out.length === 0 ? null : out;
141
+ }
142
+ export class RunLearningsService {
143
+ deps;
144
+ /**
145
+ * Every sweep and reconcile runs on ONE daemon-wide queue: the dedupe read and the submits that follow it are
146
+ * atomic across runs (two runs that hit the same flaky test propose it once), and a run's end, its distil report
147
+ * and a resume's second terminal frame never interleave. A task already queued and not yet started is not queued
148
+ * twice.
149
+ */
150
+ tail = Promise.resolve();
151
+ queued = new Set();
152
+ /** distil run id → its source run (rebuilt from disk after a restart). */
153
+ distills = new Map();
154
+ distillsLoaded = false;
155
+ constructor(deps) {
156
+ this.deps = deps;
157
+ }
158
+ dirOf(sourceRunId) {
159
+ return join(this.deps.learningsDir, sourceRunId);
160
+ }
161
+ enqueue(key, task) {
162
+ if (this.queued.has(key))
163
+ return this.tail;
164
+ this.queued.add(key);
165
+ this.tail = this.tail.then(async () => {
166
+ this.queued.delete(key);
167
+ try {
168
+ await task();
169
+ }
170
+ catch (err) {
171
+ this.deps.log(`[learnings] ${key} failed: ${err instanceof Error ? err.message : String(err)}`);
172
+ }
173
+ });
174
+ return this.tail;
175
+ }
176
+ /** Fold one engine frame. Never throws. */
177
+ onEvent(event) {
178
+ if (this.deps.mode === 'off')
179
+ return;
180
+ const session = event.session;
181
+ if (typeof session !== 'string' || session === '')
182
+ return;
183
+ if (END_EVENTS.has(event.type)) {
184
+ void this.enqueue(`end:${session}`, () => this.onEnd(session));
185
+ }
186
+ else if (event.type === PARKED_EVENT) {
187
+ this.loadDistills();
188
+ const source = this.distills.get(session);
189
+ if (source !== undefined)
190
+ void this.enqueue(`parked:${session}`, () => this.stopParkedDistill(session, source, event));
191
+ }
192
+ else if (CHECKPOINT_EVENTS.has(event.type)) {
193
+ void this.enqueue(`checkpoint:${session}`, () => this.sweepOnce(session, 'checkpoint'));
194
+ }
195
+ }
196
+ /** Read the run's record and file what is new (a test's direct entry; frames go through {@link onEvent}). */
197
+ sweep(runId, phase) {
198
+ return this.enqueue(`${phase}:${runId}`, () => (phase === 'end' ? this.onEnd(runId) : this.sweepOnce(runId, 'checkpoint')));
199
+ }
200
+ async onEnd(runId) {
201
+ this.loadDistills();
202
+ const source = this.distills.get(runId);
203
+ if (source !== undefined) {
204
+ await this.reconcileDistill(runId, source);
205
+ return;
206
+ }
207
+ await this.sweepOnce(runId, 'end');
208
+ }
209
+ /**
210
+ * After a restart: finish every run whose end was interrupted. A handoff with no distil run (the daemon stopped
211
+ * before the launch) is ended again; a distil run that ended while the daemon was down is reconciled; one the
212
+ * daemon no longer knows is filed raw. Never throws.
213
+ */
214
+ recover() {
215
+ if (this.deps.mode === 'off')
216
+ return Promise.resolve();
217
+ return this.enqueue('recover', async () => {
218
+ if (!existsSync(this.deps.learningsDir))
219
+ return;
220
+ const views = new Map((await this.deps.adapter.sessionsDetail()).map((v) => [v.session.id, v]));
221
+ for (const name of readdirSync(this.deps.learningsDir)) {
222
+ const dir = join(this.deps.learningsDir, name);
223
+ const rec = this.readJson(join(dir, DISTILL_FILE));
224
+ const child = isRecord(rec) && typeof rec['distillRunId'] === 'string' ? rec['distillRunId'] : null;
225
+ // A distil crew stopped at a gate whose stop did not take (the engine refused it) is stopped again, filed or
226
+ // not: crew owns that run's gate. A distil parked before crew stopped any (no `stopped` record) is left alone.
227
+ const childStatus = child !== null ? views.get(child)?.session.status : undefined;
228
+ const stopped = isRecord(rec) && typeof rec['stopped'] === 'string';
229
+ if (child !== null && stopped && childStatus !== undefined && !TERMINAL.has(childStatus)) {
230
+ await this.deps.adapter.cancelRun(child).catch((err) => {
231
+ this.deps.log(`[learnings] stopping distill-learnings ${child} again failed: ${err instanceof Error ? err.message : String(err)}`);
232
+ });
233
+ }
234
+ if (existsSync(join(dir, FILED_FILE)))
235
+ continue;
236
+ if (child === null) {
237
+ if (views.has(name))
238
+ await this.sweepOnce(name, 'end');
239
+ continue;
240
+ }
241
+ this.distills.set(child, name);
242
+ // A stopped distil is filed from its report whatever its status, as the live stop files it whether or not the
243
+ // stop took (its end frame may have been sent before this daemon listened).
244
+ if (stopped || childStatus === undefined || TERMINAL.has(childStatus))
245
+ await this.reconcileDistill(child, name);
246
+ }
247
+ });
248
+ }
249
+ async viewOf(runId) {
250
+ return (await this.deps.adapter.sessionsDetail()).find((v) => v.session.id === runId) ?? null;
251
+ }
252
+ async sweepOnce(runId, phase) {
253
+ const view = await this.viewOf(runId);
254
+ if (view === null)
255
+ return;
256
+ const workflow = String(view.session.workflow_id ?? '');
257
+ if (NO_LEARNINGS_WORKFLOWS.has(workflow))
258
+ return;
259
+ const dir = this.dirOf(runId);
260
+ if (phase === 'end' && (existsSync(join(dir, FILED_FILE)) || this.distillOf(runId) !== null))
261
+ return;
262
+ const events = (await this.deps.adapter.runEvents(runId)) ?? [];
263
+ const candidates = extractLearnings(view, events);
264
+ const known = await this.knownTexts();
265
+ const fresh = (c) => !known.has(normalizeLearning(c.content));
266
+ let failed = 0;
267
+ for (const c of candidates.filter((x) => x.form === 'template' && fresh(x))) {
268
+ if ((await this.file(view, CREW_AGENT, c.kind, c.content, c.cli)) === null)
269
+ failed += 1;
270
+ else
271
+ known.add(normalizeLearning(c.content));
272
+ }
273
+ if (phase !== 'end')
274
+ return;
275
+ const material = candidates.filter((x) => x.form === 'material' && fresh(x));
276
+ mkdirSync(dir, { recursive: true });
277
+ if (material.length === 0) {
278
+ if (failed === 0)
279
+ this.markFiled(runId, { distilled: false, filed: 0 });
280
+ return;
281
+ }
282
+ const launched = this.deps.mode === 'distill' ? await this.launchDistill(view, material, known) : null;
283
+ if (launched === null)
284
+ await this.fileRaw(view, material, failed);
285
+ }
286
+ /** The distil run recorded for a source run, if one was launched. */
287
+ distillOf(sourceRunId) {
288
+ const rec = this.readJson(join(this.dirOf(sourceRunId), DISTILL_FILE));
289
+ return isRecord(rec) && typeof rec['distillRunId'] === 'string' ? rec['distillRunId'] : null;
290
+ }
291
+ /** The normalized text of every proposal in the queue (a person's rejection is not proposed again) and every stored memory. */
292
+ async knownTexts() {
293
+ const out = new Set();
294
+ for (const p of await this.deps.listProposals()) {
295
+ const text = p.payload['content'];
296
+ if (typeof text === 'string')
297
+ out.add(normalizeLearning(text));
298
+ }
299
+ try {
300
+ for (const m of await this.deps.listMemoryContents())
301
+ out.add(normalizeLearning(m));
302
+ }
303
+ catch (err) {
304
+ this.deps.log(`[learnings] memory list unreadable, deduping against the queue only: ${err instanceof Error ? err.message : String(err)}`);
305
+ }
306
+ return out;
307
+ }
308
+ async file(view, agent, kind, content, cli) {
309
+ const facets = {};
310
+ const repo = repoOf(view);
311
+ const project = projectOf(view);
312
+ if (repo !== null)
313
+ facets['repo'] = repo;
314
+ if (project !== null)
315
+ facets['project'] = project;
316
+ if (cli !== null)
317
+ facets['cli'] = cli;
318
+ try {
319
+ return await this.deps.submit(view.session.id, agent, {
320
+ kind_type: 'memory',
321
+ payload: { content, capture: kind, tier: tierOf(kind), reach: 'project' },
322
+ facets,
323
+ });
324
+ }
325
+ catch (err) {
326
+ this.deps.log(`[learnings] proposing a learning from ${view.session.id} failed: ${err instanceof Error ? err.message : String(err)}`);
327
+ return null;
328
+ }
329
+ }
330
+ /** No distil seat: the evidence as it is, trimmed and capped, for a person to edit or reject. */
331
+ /** `failedBefore`: submits of this end that already failed. The run is marked filed only when none did, so a
332
+ * failed submit is retried on the next recovery (the dedupe keeps what landed from landing twice). */
333
+ async fileRaw(view, material, failedBefore = 0, note = {}) {
334
+ const ordered = material
335
+ .filter((c) => c.content.length >= MIN_LEARNING_CHARS)
336
+ .sort((a, b) => (FALLBACK_ORDER[a.source] ?? 9) - (FALLBACK_ORDER[b.source] ?? 9))
337
+ .slice(0, MAX_END_LEARNINGS);
338
+ let filed = 0;
339
+ let failed = failedBefore;
340
+ for (const c of ordered) {
341
+ if ((await this.file(view, CREW_AGENT, c.kind, c.content, c.cli)) !== null)
342
+ filed += 1;
343
+ else
344
+ failed += 1;
345
+ }
346
+ if (failed === 0)
347
+ this.markFiled(view.session.id, { distilled: false, filed, ...note });
348
+ else
349
+ this.deps.log(`[learnings] ${view.session.id}: ${failed} learning(s) could not be proposed; retried at the next recovery`);
350
+ }
351
+ markFiled(sourceRunId, what) {
352
+ try {
353
+ mkdirSync(this.dirOf(sourceRunId), { recursive: true });
354
+ writeFileSync(join(this.dirOf(sourceRunId), FILED_FILE), JSON.stringify({ ...what, at: new Date().toISOString() }), 'utf8');
355
+ }
356
+ catch (err) {
357
+ this.deps.log(`[learnings] could not record ${sourceRunId} as filed: ${err instanceof Error ? err.message : String(err)}`);
358
+ }
359
+ }
360
+ /** A seat that did not build this run, signed in and eligible; `null` when there is none. */
361
+ async distillSeat(view) {
362
+ const builders = new Set(creatorSeats(view));
363
+ for (const seat of await this.deps.adapter.seatsForWorkflow(DISTILL_WORKFLOW)) {
364
+ if (!isRecord(seat))
365
+ continue;
366
+ const key = typeof seat['key'] === 'string' ? seat['key'] : null;
367
+ if (key === null || builders.has(key))
368
+ continue;
369
+ if (typeof seat['cli'] === 'string' && builders.has(seat['cli']))
370
+ continue;
371
+ if (seat['council_eligible'] === false)
372
+ continue;
373
+ const health = seat['health'];
374
+ if (isRecord(health) && typeof health['status'] === 'string' && health['status'] !== 'active')
375
+ continue;
376
+ return seat;
377
+ }
378
+ return null;
379
+ }
380
+ /** Launch the distil run. `null` when it could not be launched (the caller files the evidence raw). */
381
+ async launchDistill(view, material, known) {
382
+ const sourceRunId = view.session.id;
383
+ const dir = this.dirOf(sourceRunId);
384
+ let seat;
385
+ try {
386
+ seat = await this.distillSeat(view);
387
+ }
388
+ catch (err) {
389
+ this.deps.log(`[learnings] no roster for the distil seat of ${sourceRunId}: ${err instanceof Error ? err.message : String(err)}`);
390
+ seat = null;
391
+ }
392
+ if (seat === null) {
393
+ this.deps.log(`[learnings] ${sourceRunId}: no signed-in seat other than the builder's to distil its learnings; filing the evidence as it is`);
394
+ return null;
395
+ }
396
+ const out = join(dir, OUT_DIR);
397
+ mkdirSync(out, { recursive: true });
398
+ const reportPath = join(out, REPORT_FILE);
399
+ const handoffPath = join(dir, HANDOFF_FILE);
400
+ const title = String(view.session['title'] ?? view.session.problem.split('\n')[0] ?? sourceRunId).slice(0, 160);
401
+ writeFileSync(handoffPath, JSON.stringify({
402
+ source_run: sourceRunId,
403
+ title,
404
+ repository: repoOf(view),
405
+ status: view.session.status,
406
+ evidence: material.map((c, i) => ({ id: `e${i + 1}`, kind: c.kind, source: c.source, text: c.content })),
407
+ already_proposed: [...known].slice(0, 200),
408
+ report_path: reportPath,
409
+ max_learnings: MAX_END_LEARNINGS,
410
+ }, null, 2), 'utf8');
411
+ const distillRunId = this.deps.newRunId();
412
+ const record = { sourceRunId, distillRunId, seat: String(seat['key']) };
413
+ writeFileSync(join(dir, DISTILL_FILE), JSON.stringify(record), 'utf8');
414
+ this.distills.set(distillRunId, sourceRunId);
415
+ const projectId = projectOf(view);
416
+ const input = {
417
+ problem: `Distill learnings from the run "${title}". Read the handoff file at ${handoffPath}. ` +
418
+ `It holds the run's evidence and names report_path, the one file you write.`,
419
+ sessionId: distillRunId,
420
+ clisJson: JSON.stringify([seat]),
421
+ workflow: DISTILL_WORKFLOW,
422
+ extraWriteRoots: [out],
423
+ extraReadRoots: [dir],
424
+ requireDeliverables: [reportPath],
425
+ ...(projectId !== null ? { projectId } : {}),
426
+ };
427
+ try {
428
+ const launched = await this.deps.adapter.launchRun(input);
429
+ this.deps.launched?.(launched, sourceRunId, projectId);
430
+ this.deps.log(`[learnings] ${sourceRunId} ended with ${material.length} piece(s) of evidence → distill-learnings ${launched} on ${record.seat}`);
431
+ return launched;
432
+ }
433
+ catch (err) {
434
+ this.distills.delete(distillRunId);
435
+ writeJsonAtomic(join(dir, DISTILL_FILE), { ...record, distillRunId: null, refused: err instanceof Error ? err.message : String(err) });
436
+ this.deps.log(`[learnings] distill launch for ${sourceRunId} refused (${err instanceof Error ? err.message : String(err)}); filing the evidence as it is`);
437
+ return null;
438
+ }
439
+ }
440
+ /** After a restart: which distil run belongs to which source run, from the handoff directories. */
441
+ loadDistills() {
442
+ if (this.distillsLoaded)
443
+ return;
444
+ try {
445
+ if (existsSync(this.deps.learningsDir)) {
446
+ for (const name of readdirSync(this.deps.learningsDir)) {
447
+ if (existsSync(join(this.deps.learningsDir, name, FILED_FILE)))
448
+ continue;
449
+ const rec = this.readJson(join(this.deps.learningsDir, name, DISTILL_FILE));
450
+ if (isRecord(rec) && typeof rec['distillRunId'] === 'string' && typeof rec['sourceRunId'] === 'string') {
451
+ this.distills.set(rec['distillRunId'], rec['sourceRunId']);
452
+ }
453
+ }
454
+ }
455
+ this.distillsLoaded = true;
456
+ }
457
+ catch (err) {
458
+ // Read again on the next frame.
459
+ this.deps.log(`[learnings] the learnings directory is unreadable: ${err instanceof Error ? err.message : String(err)}`);
460
+ }
461
+ }
462
+ /** The evidence ids the distil seat was handed (`e1`…), as crew wrote them. */
463
+ handoffEvidenceIds(dir) {
464
+ const handoff = this.readJson(join(dir, HANDOFF_FILE));
465
+ const evidence = isRecord(handoff) && Array.isArray(handoff['evidence']) ? handoff['evidence'] : [];
466
+ return new Set(evidence.filter(isRecord).map((e) => e['id']).filter((id) => typeof id === 'string'));
467
+ }
468
+ readJson(path) {
469
+ if (!existsSync(path))
470
+ return null;
471
+ try {
472
+ return JSON.parse(readFileSync(path, 'utf8'));
473
+ }
474
+ catch {
475
+ return null;
476
+ }
477
+ }
478
+ /**
479
+ * A distil run stopped at a gate. It is never a person's to answer: crew stops it and files from its report (the
480
+ * seat's judgment, even when it is "none found"), or files the evidence raw when the seat wrote nothing usable.
481
+ * Only a live frame does this; a distil already parked when the daemon starts is left as it is.
482
+ */
483
+ async stopParkedDistill(distillRunId, sourceRunId, event) {
484
+ const dir = this.dirOf(sourceRunId);
485
+ if (existsSync(join(dir, FILED_FILE)))
486
+ return;
487
+ const prompt = typeof event['prompt'] === 'string' ? event['prompt'].replace(/\s+/gu, ' ').trim().slice(0, 300) : '';
488
+ const gate = typeof event['gateKind'] === 'string' ? event['gateKind'] : 'a gate';
489
+ const stopped = `stopped at ${gate}${prompt !== '' ? `: ${prompt}` : ''}`;
490
+ this.deps.log(`[learnings] distill-learnings ${distillRunId} for ${sourceRunId} ${stopped}; crew stops it and files from its report`);
491
+ try {
492
+ const rec = this.readJson(join(dir, DISTILL_FILE));
493
+ if (isRecord(rec))
494
+ writeJsonAtomic(join(dir, DISTILL_FILE), { ...rec, stopped });
495
+ }
496
+ catch (err) {
497
+ this.deps.log(`[learnings] could not record why ${distillRunId} stopped: ${err instanceof Error ? err.message : String(err)}`);
498
+ }
499
+ try {
500
+ await this.deps.adapter.cancelRun(distillRunId);
501
+ }
502
+ catch (err) {
503
+ // Filed below either way: its `stopped` record makes the next recovery stop it again, without filing twice.
504
+ this.deps.log(`[learnings] stopping distill-learnings ${distillRunId} failed: ${err instanceof Error ? err.message : String(err)}`);
505
+ }
506
+ await this.reconcileDistill(distillRunId, sourceRunId);
507
+ }
508
+ /** A distil run ended: file what it wrote under the source run, or the raw evidence when it wrote nothing usable. */
509
+ async reconcileDistill(distillRunId, sourceRunId) {
510
+ const dir = this.dirOf(sourceRunId);
511
+ if (existsSync(join(dir, FILED_FILE)))
512
+ return;
513
+ try {
514
+ const view = await this.viewOf(sourceRunId);
515
+ if (view === null)
516
+ return;
517
+ const rec = this.readJson(join(dir, DISTILL_FILE));
518
+ const seat = isRecord(rec) && typeof rec['seat'] === 'string' ? rec['seat'] : CREW_AGENT;
519
+ const raw = this.readJson(join(dir, OUT_DIR, REPORT_FILE));
520
+ const report = parseDistillReport(raw);
521
+ const stopped = isRecord(rec) && typeof rec['stopped'] === 'string' ? { stopped: rec['stopped'] } : {};
522
+ if (report === null) {
523
+ this.deps.log(`[learnings] distill-learnings ${distillRunId} wrote no usable report for ${sourceRunId}; filing the evidence as it is`);
524
+ const events = (await this.deps.adapter.runEvents(sourceRunId)) ?? [];
525
+ const known = await this.knownTexts();
526
+ await this.fileRaw(view, extractLearnings(view, events).filter((c) => c.form === 'material' && !known.has(normalizeLearning(c.content))), 0, stopped);
527
+ return;
528
+ }
529
+ const known = await this.knownTexts();
530
+ let filed = 0;
531
+ let failed = 0;
532
+ for (const l of report) {
533
+ if (known.has(normalizeLearning(l.content)))
534
+ continue;
535
+ if ((await this.file(view, seat, l.kind, l.content, null)) === null) {
536
+ failed += 1;
537
+ continue;
538
+ }
539
+ filed += 1;
540
+ known.add(normalizeLearning(l.content));
541
+ }
542
+ // "None found" is a recorded outcome, with how many evidence items the seat said it checked.
543
+ if (failed === 0)
544
+ this.markFiled(sourceRunId, { distilled: true, distillRunId, seat, filed, found: report.length, noneFound: report.length === 0, checked: checkedCount(raw, this.handoffEvidenceIds(dir)), ...stopped });
545
+ else
546
+ this.deps.log(`[learnings] ${sourceRunId}: ${failed} distilled learning(s) could not be proposed; retried at the next recovery`);
547
+ }
548
+ catch (err) {
549
+ this.deps.log(`[learnings] reconciling distill-learnings ${distillRunId} failed: ${err instanceof Error ? err.message : String(err)}`);
550
+ }
551
+ finally {
552
+ this.distills.delete(distillRunId);
553
+ }
554
+ }
555
+ /** The run's end card: what it proposed, and whether a distil seat is still at it. */
556
+ async view(runId) {
557
+ this.loadDistills();
558
+ const items = learningsOfRun(runId, await this.deps.listProposals());
559
+ const distilling = [...this.distills.values()].includes(runId) && !existsSync(join(this.dirOf(runId), FILED_FILE));
560
+ return {
561
+ runId,
562
+ proposed: items.length,
563
+ pending: items.filter((i) => i.state === 'pending').length,
564
+ approved: items.filter((i) => i.state === 'approved').length,
565
+ rejected: items.filter((i) => i.state === 'rejected').length,
566
+ distilling,
567
+ items,
568
+ };
569
+ }
570
+ }
571
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/learnings/service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ask-server.d.ts","sourceRoot":"","sources":["../../src/mcp/ask-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAM5D,OAAO,EAAiC,KAAK,UAAU,EAAgC,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAwDhI,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,UAAU,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,UAAU,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,YAAY,CAAC;CAClC;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IAaR,OAAO,CAAC,QAAQ,CAAC,IAAI;IAZjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;IAC/D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuD;IAC7E,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;gBAEpB,IAAI,EAAE,aAAa;IAM1C,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA0ErE,OAAO,CAAC,YAAY;IASpB;;;;OAIG;IACH,OAAO,CAAC,IAAI;IAiDZ,OAAO,CAAC,OAAO;IAWf,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;CAoB/B"}
1
+ {"version":3,"file":"ask-server.d.ts","sourceRoot":"","sources":["../../src/mcp/ask-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAM5D,OAAO,EAAiC,KAAK,UAAU,EAAgC,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA+EhI,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,UAAU,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,UAAU,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,YAAY,CAAC;CAClC;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IAaR,OAAO,CAAC,QAAQ,CAAC,IAAI;IAZjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;IAC/D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuD;IAC7E,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;gBAEpB,IAAI,EAAE,aAAa;IAM1C,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA6ErE,OAAO,CAAC,YAAY;IASpB;;;;OAIG;IACH,OAAO,CAAC,IAAI;IAiDZ,OAAO,CAAC,OAAO;IAgBf,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;CAoB/B"}