harnery 0.36.0 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. package/dist/commander.js +4 -0
  2. package/dist/commands/agents.d.ts.map +1 -1
  3. package/dist/commands/agents.js +87 -46
  4. package/dist/commands/artifacts.d.ts.map +1 -1
  5. package/dist/commands/artifacts.js +26 -1
  6. package/dist/commands/browse.d.ts.map +1 -1
  7. package/dist/commands/browse.js +11 -0
  8. package/dist/commands/diagnostics.d.ts +4 -0
  9. package/dist/commands/diagnostics.d.ts.map +1 -0
  10. package/dist/commands/diagnostics.js +229 -0
  11. package/dist/commands/files.d.ts +12 -0
  12. package/dist/commands/files.d.ts.map +1 -1
  13. package/dist/commands/files.js +54 -1
  14. package/dist/commands/governor.d.ts.map +1 -1
  15. package/dist/commands/governor.js +4 -0
  16. package/dist/commands/ledger-v3.d.ts.map +1 -1
  17. package/dist/commands/ledger-v3.js +71 -2
  18. package/dist/commands/qa-run.d.ts +4 -0
  19. package/dist/commands/qa-run.d.ts.map +1 -0
  20. package/dist/commands/qa-run.js +141 -0
  21. package/dist/commands/resources.d.ts +4 -0
  22. package/dist/commands/resources.d.ts.map +1 -0
  23. package/dist/commands/resources.js +29 -0
  24. package/dist/commands/supervisor.d.ts +4 -0
  25. package/dist/commands/supervisor.d.ts.map +1 -0
  26. package/dist/commands/supervisor.js +101 -0
  27. package/dist/commands/web.d.ts.map +1 -1
  28. package/dist/commands/web.js +17 -0
  29. package/dist/commands/workflow.d.ts.map +1 -1
  30. package/dist/commands/workflow.js +4 -0
  31. package/dist/core/agents/cli.js +7 -3
  32. package/dist/core/agents/health.d.ts +17 -0
  33. package/dist/core/agents/health.d.ts.map +1 -0
  34. package/dist/core/agents/health.js +109 -0
  35. package/dist/core/agents/mailbox.d.ts +92 -0
  36. package/dist/core/agents/mailbox.d.ts.map +1 -0
  37. package/dist/core/agents/mailbox.js +325 -0
  38. package/dist/core/agents/reconcile-coordination-v3.d.ts +44 -0
  39. package/dist/core/agents/reconcile-coordination-v3.d.ts.map +1 -0
  40. package/dist/core/agents/reconcile-coordination-v3.js +58 -0
  41. package/dist/core/agents/render/prompt-context.d.ts +5 -0
  42. package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
  43. package/dist/core/agents/render/prompt-context.js +34 -13
  44. package/dist/core/agents/render/session-context.d.ts +8 -0
  45. package/dist/core/agents/render/session-context.d.ts.map +1 -1
  46. package/dist/core/agents/render/session-context.js +34 -3
  47. package/dist/core/agents/rules/commit-conflict.d.ts.map +1 -1
  48. package/dist/core/agents/rules/commit-conflict.js +50 -1
  49. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
  50. package/dist/core/agents/rules/stop-hook.js +6 -10
  51. package/dist/core/agents/session-finalizer-v3.js +4 -1
  52. package/dist/core/artifacts/index.d.ts +26 -1
  53. package/dist/core/artifacts/index.d.ts.map +1 -1
  54. package/dist/core/artifacts/index.js +146 -6
  55. package/dist/core/config.d.ts +12 -0
  56. package/dist/core/config.d.ts.map +1 -1
  57. package/dist/core/config.js +43 -0
  58. package/dist/core/diagnostics/advice.d.ts +9 -0
  59. package/dist/core/diagnostics/advice.d.ts.map +1 -0
  60. package/dist/core/diagnostics/advice.js +112 -0
  61. package/dist/core/diagnostics/bundle.d.ts +35 -0
  62. package/dist/core/diagnostics/bundle.d.ts.map +1 -0
  63. package/dist/core/diagnostics/bundle.js +874 -0
  64. package/dist/core/diagnostics/comparison.d.ts +5 -0
  65. package/dist/core/diagnostics/comparison.d.ts.map +1 -0
  66. package/dist/core/diagnostics/comparison.js +444 -0
  67. package/dist/core/diagnostics/contract.d.ts +245 -0
  68. package/dist/core/diagnostics/contract.d.ts.map +1 -0
  69. package/dist/core/diagnostics/contract.js +18 -0
  70. package/dist/core/diagnostics/identity.d.ts +3 -0
  71. package/dist/core/diagnostics/identity.d.ts.map +1 -0
  72. package/dist/core/diagnostics/identity.js +10 -0
  73. package/dist/core/diagnostics/index.d.ts +8 -0
  74. package/dist/core/diagnostics/index.d.ts.map +1 -0
  75. package/dist/core/diagnostics/index.js +7 -0
  76. package/dist/core/diagnostics/replay.d.ts +8 -0
  77. package/dist/core/diagnostics/replay.d.ts.map +1 -0
  78. package/dist/core/diagnostics/replay.js +213 -0
  79. package/dist/core/diagnostics/sanitize.d.ts +9 -0
  80. package/dist/core/diagnostics/sanitize.d.ts.map +1 -0
  81. package/dist/core/diagnostics/sanitize.js +84 -0
  82. package/dist/core/events/legacy-storage/compression.d.ts +13 -0
  83. package/dist/core/events/legacy-storage/compression.d.ts.map +1 -0
  84. package/dist/core/events/legacy-storage/compression.js +107 -0
  85. package/dist/core/events/legacy-storage/index.d.ts +1 -0
  86. package/dist/core/events/legacy-storage/index.d.ts.map +1 -1
  87. package/dist/core/events/legacy-storage/index.js +1 -0
  88. package/dist/core/events/v3/archive-retention.d.ts +33 -0
  89. package/dist/core/events/v3/archive-retention.d.ts.map +1 -0
  90. package/dist/core/events/v3/archive-retention.js +195 -0
  91. package/dist/core/events/v3/capabilities.d.ts +1 -1
  92. package/dist/core/events/v3/capabilities.d.ts.map +1 -1
  93. package/dist/core/events/v3/capabilities.js +1 -0
  94. package/dist/core/events/v3/index.d.ts +1 -0
  95. package/dist/core/events/v3/index.d.ts.map +1 -1
  96. package/dist/core/events/v3/index.js +1 -0
  97. package/dist/core/events/v3/live-routing.d.ts.map +1 -1
  98. package/dist/core/events/v3/live-routing.js +1 -0
  99. package/dist/core/events/v3/producers/hook-base.d.ts +1 -1
  100. package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -1
  101. package/dist/core/events/v3/producers/hook-base.js +13 -2
  102. package/dist/core/events/v3/producers/intake.d.ts.map +1 -1
  103. package/dist/core/events/v3/producers/intake.js +1 -0
  104. package/dist/core/events/v3/producers/recorder.d.ts +16 -0
  105. package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
  106. package/dist/core/events/v3/producers/recorder.js +88 -1
  107. package/dist/core/hooks/adapter/output.d.ts +8 -0
  108. package/dist/core/hooks/adapter/output.d.ts.map +1 -1
  109. package/dist/core/hooks/adapter/output.js +11 -1
  110. package/dist/core/hooks/cli.js +183 -192
  111. package/dist/core/hooks/health.d.ts +59 -0
  112. package/dist/core/hooks/health.d.ts.map +1 -0
  113. package/dist/core/hooks/health.js +84 -0
  114. package/dist/core/resources/contract.d.ts +90 -0
  115. package/dist/core/resources/contract.d.ts.map +1 -0
  116. package/dist/core/resources/contract.js +2 -0
  117. package/dist/core/resources/index.d.ts +6 -0
  118. package/dist/core/resources/index.d.ts.map +1 -0
  119. package/dist/core/resources/index.js +5 -0
  120. package/dist/core/resources/sampler.d.ts +27 -0
  121. package/dist/core/resources/sampler.d.ts.map +1 -0
  122. package/dist/core/resources/sampler.js +357 -0
  123. package/dist/core/resources/service-status.d.ts +3 -0
  124. package/dist/core/resources/service-status.d.ts.map +1 -0
  125. package/dist/core/resources/service-status.js +48 -0
  126. package/dist/core/resources/service.d.ts +26 -0
  127. package/dist/core/resources/service.d.ts.map +1 -0
  128. package/dist/core/resources/service.js +292 -0
  129. package/dist/core/resources/storage.d.ts +13 -0
  130. package/dist/core/resources/storage.d.ts.map +1 -0
  131. package/dist/core/resources/storage.js +30 -0
  132. package/dist/core/storage/atomic-json.d.ts +3 -0
  133. package/dist/core/storage/atomic-json.d.ts.map +1 -0
  134. package/dist/core/storage/atomic-json.js +15 -0
  135. package/dist/core/storage/builtins.d.ts.map +1 -1
  136. package/dist/core/storage/builtins.js +45 -6
  137. package/dist/core/storage/logger.d.ts +2 -0
  138. package/dist/core/storage/logger.d.ts.map +1 -1
  139. package/dist/core/storage/logger.js +2 -0
  140. package/dist/core/storage/query.d.ts +14 -0
  141. package/dist/core/storage/query.d.ts.map +1 -1
  142. package/dist/core/storage/query.js +51 -0
  143. package/dist/core/supervisor/activity.d.ts +4 -0
  144. package/dist/core/supervisor/activity.d.ts.map +1 -0
  145. package/dist/core/supervisor/activity.js +141 -0
  146. package/dist/core/supervisor/contract.d.ts +268 -0
  147. package/dist/core/supervisor/contract.d.ts.map +1 -0
  148. package/dist/core/supervisor/contract.js +35 -0
  149. package/dist/core/supervisor/explanations.d.ts +4 -0
  150. package/dist/core/supervisor/explanations.d.ts.map +1 -0
  151. package/dist/core/supervisor/explanations.js +71 -0
  152. package/dist/core/supervisor/findings.d.ts +20 -0
  153. package/dist/core/supervisor/findings.d.ts.map +1 -0
  154. package/dist/core/supervisor/findings.js +399 -0
  155. package/dist/core/supervisor/history.d.ts +9 -0
  156. package/dist/core/supervisor/history.d.ts.map +1 -0
  157. package/dist/core/supervisor/history.js +46 -0
  158. package/dist/core/supervisor/hook-health-alerts.d.ts +14 -0
  159. package/dist/core/supervisor/hook-health-alerts.d.ts.map +1 -0
  160. package/dist/core/supervisor/hook-health-alerts.js +70 -0
  161. package/dist/core/supervisor/hook-health-storage.d.ts +5 -0
  162. package/dist/core/supervisor/hook-health-storage.d.ts.map +1 -0
  163. package/dist/core/supervisor/hook-health-storage.js +24 -0
  164. package/dist/core/supervisor/hook-health.d.ts +72 -0
  165. package/dist/core/supervisor/hook-health.d.ts.map +1 -0
  166. package/dist/core/supervisor/hook-health.js +203 -0
  167. package/dist/core/supervisor/hooks.d.ts +10 -0
  168. package/dist/core/supervisor/hooks.d.ts.map +1 -0
  169. package/dist/core/supervisor/hooks.js +28 -0
  170. package/dist/core/supervisor/index.d.ts +15 -0
  171. package/dist/core/supervisor/index.d.ts.map +1 -0
  172. package/dist/core/supervisor/index.js +14 -0
  173. package/dist/core/supervisor/log-feed.d.ts +9 -0
  174. package/dist/core/supervisor/log-feed.d.ts.map +1 -0
  175. package/dist/core/supervisor/log-feed.js +103 -0
  176. package/dist/core/supervisor/service.d.ts +29 -0
  177. package/dist/core/supervisor/service.d.ts.map +1 -0
  178. package/dist/core/supervisor/service.js +450 -0
  179. package/dist/core/supervisor/services.d.ts +11 -0
  180. package/dist/core/supervisor/services.d.ts.map +1 -0
  181. package/dist/core/supervisor/services.js +155 -0
  182. package/dist/core/supervisor/status.d.ts +3 -0
  183. package/dist/core/supervisor/status.d.ts.map +1 -0
  184. package/dist/core/supervisor/status.js +48 -0
  185. package/dist/core/supervisor/storage.d.ts +30 -0
  186. package/dist/core/supervisor/storage.d.ts.map +1 -0
  187. package/dist/core/supervisor/storage.js +73 -0
  188. package/dist/core/supervisor/timeline.d.ts +3 -0
  189. package/dist/core/supervisor/timeline.d.ts.map +1 -0
  190. package/dist/core/supervisor/timeline.js +87 -0
  191. package/dist/core/workflow/admission.d.ts +23 -0
  192. package/dist/core/workflow/admission.d.ts.map +1 -0
  193. package/dist/core/workflow/admission.js +136 -0
  194. package/dist/core/workflow/engine.d.ts.map +1 -1
  195. package/dist/core/workflow/engine.js +77 -2
  196. package/dist/core/workflow/index.d.ts +3 -2
  197. package/dist/core/workflow/index.d.ts.map +1 -1
  198. package/dist/core/workflow/index.js +2 -1
  199. package/dist/core/workflow/proof.d.ts +2 -1
  200. package/dist/core/workflow/proof.d.ts.map +1 -1
  201. package/dist/core/workflow/proof.js +39 -1
  202. package/dist/core/workflow/run-state.d.ts +3 -2
  203. package/dist/core/workflow/run-state.d.ts.map +1 -1
  204. package/dist/core/workflow/run-state.js +8 -1
  205. package/dist/core/workflow/types.d.ts +33 -1
  206. package/dist/core/workflow/types.d.ts.map +1 -1
  207. package/dist/core/workflow/types.js +2 -1
  208. package/dist/lib/browser/client.d.ts +5 -0
  209. package/dist/lib/browser/client.d.ts.map +1 -1
  210. package/dist/lib/browser/client.js +1 -0
  211. package/dist/lib/browser/index.d.ts +2 -0
  212. package/dist/lib/browser/index.d.ts.map +1 -1
  213. package/dist/lib/browser/index.js +2 -0
  214. package/dist/lib/browser/qa-run-contracts.d.ts +173 -0
  215. package/dist/lib/browser/qa-run-contracts.d.ts.map +1 -0
  216. package/dist/lib/browser/qa-run-contracts.js +226 -0
  217. package/dist/lib/browser/qa-run.d.ts +51 -0
  218. package/dist/lib/browser/qa-run.d.ts.map +1 -0
  219. package/dist/lib/browser/qa-run.js +684 -0
  220. package/dist/lib/coord-root-id.d.ts +9 -0
  221. package/dist/lib/coord-root-id.d.ts.map +1 -0
  222. package/dist/lib/coord-root-id.js +17 -0
  223. package/dist/lib/instructions/apply.d.ts +3 -1
  224. package/dist/lib/instructions/apply.d.ts.map +1 -1
  225. package/dist/lib/instructions/apply.js +74 -3
  226. package/dist/lib/instructions/templates.d.ts.map +1 -1
  227. package/dist/lib/instructions/templates.js +6 -0
  228. package/package.json +12 -1
  229. package/src/commander.ts +26 -0
  230. package/src/commands/agents.ts +102 -49
  231. package/src/commands/artifacts.ts +40 -2
  232. package/src/commands/browse.ts +15 -0
  233. package/src/commands/diagnostics.ts +271 -0
  234. package/src/commands/files.ts +102 -2
  235. package/src/commands/governor.ts +8 -0
  236. package/src/commands/ledger-v3.ts +82 -0
  237. package/src/commands/qa-run.ts +184 -0
  238. package/src/commands/resources.ts +38 -0
  239. package/src/commands/supervisor.ts +141 -0
  240. package/src/commands/web.ts +19 -0
  241. package/src/commands/workflow.ts +8 -0
  242. package/src/core/agents/cli.ts +7 -3
  243. package/src/core/agents/health.ts +142 -0
  244. package/src/core/agents/mailbox.ts +373 -0
  245. package/src/core/agents/reconcile-coordination-v3.ts +77 -0
  246. package/src/core/agents/render/prompt-context.ts +42 -12
  247. package/src/core/agents/render/session-context.ts +37 -3
  248. package/src/core/agents/rules/commit-conflict.ts +58 -1
  249. package/src/core/agents/rules/stop-hook.ts +6 -12
  250. package/src/core/agents/session-finalizer-v3.ts +4 -1
  251. package/src/core/artifacts/index.ts +196 -10
  252. package/src/core/config.ts +111 -2
  253. package/src/core/diagnostics/advice.ts +147 -0
  254. package/src/core/diagnostics/bundle.ts +1142 -0
  255. package/src/core/diagnostics/comparison.ts +565 -0
  256. package/src/core/diagnostics/contract.ts +311 -0
  257. package/src/core/diagnostics/identity.ts +11 -0
  258. package/src/core/diagnostics/index.ts +7 -0
  259. package/src/core/diagnostics/replay.ts +314 -0
  260. package/src/core/diagnostics/sanitize.ts +97 -0
  261. package/src/core/events/legacy-storage/compression.ts +130 -0
  262. package/src/core/events/legacy-storage/index.ts +1 -0
  263. package/src/core/events/v3/archive-retention.ts +251 -0
  264. package/src/core/events/v3/capabilities.ts +2 -0
  265. package/src/core/events/v3/index.ts +9 -0
  266. package/src/core/events/v3/live-routing.ts +1 -0
  267. package/src/core/events/v3/producers/hook-base.ts +14 -2
  268. package/src/core/events/v3/producers/intake.ts +1 -0
  269. package/src/core/events/v3/producers/recorder.ts +110 -1
  270. package/src/core/hooks/adapter/output.ts +12 -1
  271. package/src/core/hooks/cli.ts +192 -215
  272. package/src/core/hooks/health.ts +146 -0
  273. package/src/core/resources/contract.ts +98 -0
  274. package/src/core/resources/index.ts +5 -0
  275. package/src/core/resources/sampler.ts +458 -0
  276. package/src/core/resources/service-status.ts +62 -0
  277. package/src/core/resources/service.ts +337 -0
  278. package/src/core/resources/storage.ts +44 -0
  279. package/src/core/storage/atomic-json.ts +15 -0
  280. package/src/core/storage/builtins.ts +62 -6
  281. package/src/core/storage/logger.ts +2 -0
  282. package/src/core/storage/query.ts +58 -0
  283. package/src/core/supervisor/activity.ts +193 -0
  284. package/src/core/supervisor/contract.ts +312 -0
  285. package/src/core/supervisor/explanations.ts +104 -0
  286. package/src/core/supervisor/findings.ts +788 -0
  287. package/src/core/supervisor/history.ts +61 -0
  288. package/src/core/supervisor/hook-health-alerts.ts +108 -0
  289. package/src/core/supervisor/hook-health-storage.ts +25 -0
  290. package/src/core/supervisor/hook-health.ts +301 -0
  291. package/src/core/supervisor/hooks.ts +35 -0
  292. package/src/core/supervisor/index.ts +14 -0
  293. package/src/core/supervisor/log-feed.ts +131 -0
  294. package/src/core/supervisor/service.ts +511 -0
  295. package/src/core/supervisor/services.ts +203 -0
  296. package/src/core/supervisor/status.ts +59 -0
  297. package/src/core/supervisor/storage.ts +126 -0
  298. package/src/core/supervisor/timeline.ts +133 -0
  299. package/src/core/workflow/admission.ts +215 -0
  300. package/src/core/workflow/engine.ts +93 -1
  301. package/src/core/workflow/index.ts +10 -0
  302. package/src/core/workflow/proof.ts +54 -1
  303. package/src/core/workflow/run-state.ts +13 -1
  304. package/src/core/workflow/types.ts +39 -1
  305. package/src/lib/browser/client.ts +6 -0
  306. package/src/lib/browser/index.ts +29 -0
  307. package/src/lib/browser/qa-run-contracts.ts +380 -0
  308. package/src/lib/browser/qa-run.ts +784 -0
  309. package/src/lib/coord-root-id.ts +23 -0
  310. package/src/lib/instructions/apply.ts +81 -2
  311. package/src/lib/instructions/templates.ts +6 -0
@@ -0,0 +1,30 @@
1
+ import type { CoordinationHealthSnapshot } from "../agents/health.js";
2
+ import type { SupervisorActivitySnapshot, SupervisorConsumerRecord, SupervisorFindingExplanation, SupervisorFindings, SupervisorHistory, SupervisorLogFeed, SupervisorServiceStatusRecord, SupervisorSnapshot, SupervisorTimeline } from "./contract.js";
3
+ export interface SupervisorPaths {
4
+ root: string;
5
+ service: string;
6
+ lease: string;
7
+ stop: string;
8
+ snapshot: string;
9
+ history: string;
10
+ activity: string;
11
+ findings: string;
12
+ timelines: string;
13
+ explanations: string;
14
+ coordination_health: string;
15
+ log_feed: string;
16
+ consumers: string;
17
+ }
18
+ export declare function supervisorPaths(coordRootRaw: string): SupervisorPaths;
19
+ export declare function supervisorConsumerPath(coordRoot: string, id: string): string;
20
+ export declare function readSupervisorServiceRecord(coordRoot: string): SupervisorServiceStatusRecord | undefined;
21
+ export declare function readSupervisorSnapshot(coordRoot: string): SupervisorSnapshot | undefined;
22
+ export declare function readSupervisorHistory(coordRoot: string): SupervisorHistory | undefined;
23
+ export declare function readSupervisorActivity(coordRoot: string): SupervisorActivitySnapshot | undefined;
24
+ export declare function readSupervisorFindings(coordRoot: string): SupervisorFindings | undefined;
25
+ export declare function readSupervisorTimeline(coordRoot: string, findingId: string): SupervisorTimeline | undefined;
26
+ export declare function readSupervisorExplanation(coordRoot: string, findingId: string): SupervisorFindingExplanation | undefined;
27
+ export declare function readCoordinationHealthSnapshot(coordRoot: string): CoordinationHealthSnapshot | undefined;
28
+ export declare function readSupervisorLogFeed(coordRoot: string): SupervisorLogFeed | undefined;
29
+ export declare function readSupervisorConsumer(path: string): SupervisorConsumerRecord | undefined;
30
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,6BAA6B,EAC7B,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,CAiBrE;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,GAChB,6BAA6B,GAAG,SAAS,CAE3C;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAExF;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEtF;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,0BAA0B,GAAG,SAAS,CAEhG;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAExF;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,kBAAkB,GAAG,SAAS,CAIhC;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,4BAA4B,GAAG,SAAS,CAI1C;AAED,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,GAChB,0BAA0B,GAAG,SAAS,CAExC;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEtF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS,CAEzF"}
@@ -0,0 +1,73 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { join, resolve } from "node:path";
3
+ export function supervisorPaths(coordRootRaw) {
4
+ const root = join(resolve(coordRootRaw), ".harnery", "supervisor");
5
+ return {
6
+ root,
7
+ service: join(root, "service.json"),
8
+ lease: join(root, "service.lease.json"),
9
+ stop: join(root, "stop.json"),
10
+ snapshot: join(root, "snapshot.json"),
11
+ history: join(root, "history.json"),
12
+ activity: join(root, "activity.json"),
13
+ findings: join(root, "findings.json"),
14
+ timelines: join(root, "timelines"),
15
+ explanations: join(root, "explanations"),
16
+ coordination_health: join(root, "coordination-health.json"),
17
+ log_feed: join(root, "log-feed.json"),
18
+ consumers: join(root, "consumers"),
19
+ };
20
+ }
21
+ export function supervisorConsumerPath(coordRoot, id) {
22
+ return join(supervisorPaths(coordRoot).consumers, `${safeId(id)}.json`);
23
+ }
24
+ export function readSupervisorServiceRecord(coordRoot) {
25
+ return readJson(supervisorPaths(coordRoot).service);
26
+ }
27
+ export function readSupervisorSnapshot(coordRoot) {
28
+ return readJson(supervisorPaths(coordRoot).snapshot);
29
+ }
30
+ export function readSupervisorHistory(coordRoot) {
31
+ return readJson(supervisorPaths(coordRoot).history);
32
+ }
33
+ export function readSupervisorActivity(coordRoot) {
34
+ return readJson(supervisorPaths(coordRoot).activity);
35
+ }
36
+ export function readSupervisorFindings(coordRoot) {
37
+ return readJson(supervisorPaths(coordRoot).findings);
38
+ }
39
+ export function readSupervisorTimeline(coordRoot, findingId) {
40
+ return readJson(join(supervisorPaths(coordRoot).timelines, `${safeId(findingId)}.json`));
41
+ }
42
+ export function readSupervisorExplanation(coordRoot, findingId) {
43
+ return readJson(join(supervisorPaths(coordRoot).explanations, `${safeId(findingId)}.json`));
44
+ }
45
+ export function readCoordinationHealthSnapshot(coordRoot) {
46
+ return readJson(supervisorPaths(coordRoot).coordination_health);
47
+ }
48
+ export function readSupervisorLogFeed(coordRoot) {
49
+ return readJson(supervisorPaths(coordRoot).log_feed);
50
+ }
51
+ export function readSupervisorConsumer(path) {
52
+ return readJson(path);
53
+ }
54
+ function readJson(path) {
55
+ if (!existsSync(path))
56
+ return undefined;
57
+ try {
58
+ const value = JSON.parse(readFileSync(path, "utf8"));
59
+ return value && typeof value === "object" && !Array.isArray(value) ? value : undefined;
60
+ }
61
+ catch {
62
+ return undefined;
63
+ }
64
+ }
65
+ function safeId(value) {
66
+ const normalized = value
67
+ .toLowerCase()
68
+ .replace(/[^a-z0-9_-]+/g, "-")
69
+ .replace(/^-+|-+$/g, "");
70
+ if (!normalized)
71
+ throw new Error("supervisor consumer id must contain a letter or number");
72
+ return normalized.slice(0, 80);
73
+ }
@@ -0,0 +1,3 @@
1
+ import { type SupervisorFinding, type SupervisorSourceReference, type SupervisorTimeline } from "./contract.js";
2
+ export declare function buildSupervisorTimeline(finding: SupervisorFinding, relatedSources?: readonly SupervisorSourceReference[]): SupervisorTimeline;
3
+ //# sourceMappingURL=timeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/timeline.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EAExB,MAAM,eAAe,CAAC;AAEvB,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,iBAAiB,EAC1B,cAAc,GAAE,SAAS,yBAAyB,EAAO,GACxD,kBAAkB,CAoDpB"}
@@ -0,0 +1,87 @@
1
+ import { createHash } from "node:crypto";
2
+ import { SUPERVISOR_DIAGNOSTIC_LIMITS, SUPERVISOR_TIMELINE_SCHEMA_VERSION, } from "./contract.js";
3
+ export function buildSupervisorTimeline(finding, relatedSources = []) {
4
+ const relatedEntries = clusterRelatedSources(relatedSources);
5
+ const entries = [
6
+ entry("opened", finding.opened_at, finding.summary, finding.primary_source),
7
+ ...finding.evidence.map((evidence) => ({
8
+ ...entry("observed", evidence.source.observed_at, evidence.summary, evidence.source),
9
+ evidence_id: evidence.id,
10
+ })),
11
+ ...relatedEntries,
12
+ ...finding.capabilities
13
+ .filter((capability) => capability.state !== "supported")
14
+ .map((capability) => entry("capability", finding.observed_at, `${capability.source_kind} capability is ${capability.state}${capability.reason_code ? ` (${capability.reason_code})` : ""}.`, {
15
+ id: stableId("src", `${finding.id}:${capability.source_kind}:${capability.state}`),
16
+ source_kind: capability.source_kind,
17
+ source_id: capability.reason_code ?? capability.state,
18
+ observed_at: finding.observed_at,
19
+ capability: capability.state,
20
+ })),
21
+ ...(finding.state === "resolved" && finding.resolved_at
22
+ ? [
23
+ entry("resolved", finding.resolved_at, "The observed condition returned below its threshold.", finding.primary_source),
24
+ ]
25
+ : []),
26
+ ].sort((left, right) => left.occurred_at.localeCompare(right.occurred_at) || left.id.localeCompare(right.id));
27
+ const maxEntries = SUPERVISOR_DIAGNOSTIC_LIMITS.max_timeline_entries;
28
+ const bounded = entries.slice(-maxEntries);
29
+ return {
30
+ schema_version: SUPERVISOR_TIMELINE_SCHEMA_VERSION,
31
+ finding_id: finding.id,
32
+ start_at: bounded[0]?.occurred_at ?? finding.opened_at,
33
+ end_at: bounded[bounded.length - 1]?.occurred_at ?? finding.observed_at,
34
+ max_entries: maxEntries,
35
+ omitted_entries: Math.max(0, entries.length - bounded.length),
36
+ compacted_entries: Math.max(0, relatedSources.length - relatedEntries.length),
37
+ entries: bounded,
38
+ capabilities: finding.capabilities.slice(0, SUPERVISOR_DIAGNOSTIC_LIMITS.max_capabilities),
39
+ };
40
+ }
41
+ function entry(relation, occurredAt, summary, source) {
42
+ return {
43
+ id: stableId("tl", `${relation}\u0000${occurredAt}\u0000${source.id}\u0000${summary}`),
44
+ occurred_at: occurredAt,
45
+ first_occurred_at: occurredAt,
46
+ last_occurred_at: occurredAt,
47
+ occurrence_count: 1,
48
+ relation,
49
+ summary: summary.slice(0, SUPERVISOR_DIAGNOSTIC_LIMITS.max_summary_chars),
50
+ source,
51
+ };
52
+ }
53
+ function clusterRelatedSources(sources) {
54
+ const groups = new Map();
55
+ const ordered = [...sources].sort((left, right) => left.observed_at.localeCompare(right.observed_at) || left.id.localeCompare(right.id));
56
+ for (const source of ordered) {
57
+ const key = `${source.source_kind}\u0000${source.source_id}\u0000${source.capability}`;
58
+ const group = groups.get(key);
59
+ if (group) {
60
+ group.last = source;
61
+ group.count += 1;
62
+ }
63
+ else {
64
+ groups.set(key, { first: source, last: source, count: 1 });
65
+ }
66
+ }
67
+ return [...groups.entries()].map(([key, group]) => {
68
+ const firstAt = group.first.observed_at;
69
+ const lastAt = group.last.observed_at;
70
+ const summary = group.count === 1
71
+ ? `Related ${group.last.source_kind} activity was observed in the same time range.`
72
+ : `${group.count} related ${group.last.source_kind} ${group.last.source_id} observations were recorded in the same time range.`;
73
+ return {
74
+ id: stableId("tl", `related\u0000${key}\u0000${firstAt}\u0000${lastAt}\u0000${group.count}`),
75
+ occurred_at: lastAt,
76
+ first_occurred_at: firstAt,
77
+ last_occurred_at: lastAt,
78
+ occurrence_count: group.count,
79
+ relation: "related",
80
+ summary: summary.slice(0, SUPERVISOR_DIAGNOSTIC_LIMITS.max_summary_chars),
81
+ source: group.last,
82
+ };
83
+ });
84
+ }
85
+ function stableId(prefix, value) {
86
+ return `${prefix}_${createHash("sha256").update(value).digest("hex").slice(0, 24)}`;
87
+ }
@@ -0,0 +1,23 @@
1
+ import { type EnsureSupervisorResult, type SupervisorFindings, type SupervisorStatus } from "../supervisor/index.js";
2
+ import type { WorkflowDiagnosticAdmissionObservation } from "./types.js";
3
+ export interface WorkflowDiagnosticAdmissionRuntime {
4
+ now: () => Date;
5
+ wait: (milliseconds: number) => Promise<void>;
6
+ registerConsumer: (coordRoot: string, input: {
7
+ id: string;
8
+ pid?: number;
9
+ }) => unknown;
10
+ unregisterConsumer: (coordRoot: string, id: string) => void;
11
+ ensureSupervisor: (coordRoot: string) => Promise<EnsureSupervisorResult>;
12
+ readStatus: (coordRoot: string, nowMs?: number) => SupervisorStatus;
13
+ readFindings: (coordRoot: string) => SupervisorFindings | undefined;
14
+ }
15
+ export interface ObserveWorkflowDiagnosticAdmissionInput {
16
+ coordRoot: string;
17
+ runId: string;
18
+ freshCycleWaitMs?: number;
19
+ runtime?: Partial<WorkflowDiagnosticAdmissionRuntime>;
20
+ }
21
+ export declare function observeWorkflowDiagnosticAdmission(input: ObserveWorkflowDiagnosticAdmissionInput): Promise<WorkflowDiagnosticAdmissionObservation>;
22
+ export declare function failedWorkflowDiagnosticAdmissionObservation(error: unknown, requestedAt: Date, observedAt?: Date): WorkflowDiagnosticAdmissionObservation;
23
+ //# sourceMappingURL=admission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admission.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/admission.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,sBAAsB,EAO3B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EAEtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,YAAY,CAAC;AAKzE,MAAM,WAAW,kCAAkC;IACjD,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,IAAI,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;IACtF,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACzE,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,gBAAgB,CAAC;IACpE,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,kBAAkB,GAAG,SAAS,CAAC;CACrE;AAED,MAAM,WAAW,uCAAuC;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC,kCAAkC,CAAC,CAAC;CACvD;AAED,wBAAsB,kCAAkC,CACtD,KAAK,EAAE,uCAAuC,GAC7C,OAAO,CAAC,sCAAsC,CAAC,CAoFjD;AAED,wBAAgB,4CAA4C,CAC1D,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,IAAI,EACjB,UAAU,OAAa,GACtB,sCAAsC,CAmBxC"}
@@ -0,0 +1,136 @@
1
+ import { buildDiagnosticAdvice } from "../diagnostics/advice.js";
2
+ import { ensureSupervisorRunning, readSupervisorFindings, readSupervisorStatus, registerSupervisorConsumer, unregisterSupervisorConsumer, } from "../supervisor/index.js";
3
+ const DEFAULT_FRESH_CYCLE_WAIT_MS = 4_000;
4
+ const POLL_INTERVAL_MS = 50;
5
+ export async function observeWorkflowDiagnosticAdmission(input) {
6
+ const runtime = admissionRuntime(input.runtime);
7
+ const requested = runtime.now();
8
+ const requestedAt = requested.toISOString();
9
+ const startedMs = requested.getTime();
10
+ const consumerId = `workflow-${input.runId}`;
11
+ let serviceState = "unavailable";
12
+ try {
13
+ runtime.registerConsumer(input.coordRoot, { id: consumerId });
14
+ const ensured = await runtime.ensureSupervisor(input.coordRoot);
15
+ serviceState = ensured.state;
16
+ if (ensured.state === "unavailable") {
17
+ return unavailableObservation(runtime, requestedAt, startedMs, serviceState, "error", "supervisor_unavailable", ensured.error);
18
+ }
19
+ const deadlineMs = runtime.now().getTime() + normalizeWait(input.freshCycleWaitMs);
20
+ while (runtime.now().getTime() <= deadlineMs) {
21
+ const status = runtime.readStatus(input.coordRoot, runtime.now().getTime());
22
+ const sampledAt = status.record?.last_cycle_at;
23
+ if (status.running && sampledAt && Date.parse(sampledAt) >= requested.getTime()) {
24
+ const report = runtime.readFindings(input.coordRoot);
25
+ if (!report) {
26
+ return unavailableObservation(runtime, requestedAt, startedMs, serviceState, "unsupported", "source_missing");
27
+ }
28
+ const observedAt = runtime.now().toISOString();
29
+ return {
30
+ requested_at: requestedAt,
31
+ observed_at: observedAt,
32
+ wait_ms: elapsedMs(runtime, startedMs),
33
+ service_state: serviceState,
34
+ freshness: "fresh",
35
+ sampled_at: sampledAt,
36
+ advice: buildDiagnosticAdvice({
37
+ findings: mergeFindings(report),
38
+ sourceCapability: supportedCapability(),
39
+ evaluatedAt: observedAt,
40
+ }),
41
+ };
42
+ }
43
+ const remainingMs = deadlineMs - runtime.now().getTime();
44
+ if (remainingMs <= 0)
45
+ break;
46
+ await runtime.wait(Math.min(POLL_INTERVAL_MS, remainingMs));
47
+ }
48
+ return unavailableObservation(runtime, requestedAt, startedMs, serviceState, "expired", "fresh_cycle_timeout");
49
+ }
50
+ catch (error) {
51
+ return unavailableObservation(runtime, requestedAt, startedMs, serviceState, "error", "observation_failed", error instanceof Error ? error.message : String(error));
52
+ }
53
+ finally {
54
+ try {
55
+ runtime.unregisterConsumer(input.coordRoot, consumerId);
56
+ }
57
+ catch {
58
+ // Admission is observer-only. Cleanup failure cannot affect dispatch.
59
+ }
60
+ }
61
+ }
62
+ export function failedWorkflowDiagnosticAdmissionObservation(error, requestedAt, observedAt = new Date()) {
63
+ const capability = {
64
+ source_kind: "supervisor.findings",
65
+ state: "error",
66
+ reason_code: "observation_failed",
67
+ detail: (error instanceof Error ? error.message : String(error)).slice(0, 500),
68
+ };
69
+ return {
70
+ requested_at: requestedAt.toISOString(),
71
+ observed_at: observedAt.toISOString(),
72
+ wait_ms: Math.max(0, observedAt.getTime() - requestedAt.getTime()),
73
+ service_state: "unavailable",
74
+ freshness: "unavailable",
75
+ advice: buildDiagnosticAdvice({
76
+ findings: [],
77
+ sourceCapability: capability,
78
+ evaluatedAt: observedAt.toISOString(),
79
+ }),
80
+ };
81
+ }
82
+ function unavailableObservation(runtime, requestedAt, startedMs, serviceState, state, reasonCode, detail) {
83
+ const observedAt = runtime.now().toISOString();
84
+ const capability = {
85
+ source_kind: "supervisor.findings",
86
+ state,
87
+ reason_code: reasonCode,
88
+ ...(detail ? { detail: detail.slice(0, 500) } : {}),
89
+ };
90
+ const advice = buildDiagnosticAdvice({
91
+ findings: [],
92
+ sourceCapability: capability,
93
+ evaluatedAt: observedAt,
94
+ });
95
+ return {
96
+ requested_at: requestedAt,
97
+ observed_at: observedAt,
98
+ wait_ms: elapsedMs(runtime, startedMs),
99
+ service_state: serviceState,
100
+ freshness: "unavailable",
101
+ advice,
102
+ };
103
+ }
104
+ function mergeFindings(report) {
105
+ const byId = new Map();
106
+ for (const finding of report.transitions)
107
+ byId.set(finding.id, finding);
108
+ for (const finding of report.active)
109
+ byId.set(finding.id, finding);
110
+ return [...byId.values()];
111
+ }
112
+ function supportedCapability() {
113
+ return { source_kind: "supervisor.findings", state: "supported" };
114
+ }
115
+ function normalizeWait(value) {
116
+ if (value === undefined)
117
+ return DEFAULT_FRESH_CYCLE_WAIT_MS;
118
+ if (!Number.isFinite(value) || value < 0)
119
+ return DEFAULT_FRESH_CYCLE_WAIT_MS;
120
+ return Math.min(Math.floor(value), 30_000);
121
+ }
122
+ function elapsedMs(runtime, startedMs) {
123
+ return Math.max(0, runtime.now().getTime() - startedMs);
124
+ }
125
+ function admissionRuntime(overrides) {
126
+ return {
127
+ now: () => new Date(),
128
+ wait: (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)),
129
+ registerConsumer: registerSupervisorConsumer,
130
+ unregisterConsumer: unregisterSupervisorConsumer,
131
+ ensureSupervisor: ensureSupervisorRunning,
132
+ readStatus: readSupervisorStatus,
133
+ readFindings: readSupervisorFindings,
134
+ ...overrides,
135
+ };
136
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA2CH,OAAO,KAAK,EAIV,UAAU,EAEV,SAAS,EAYV,MAAM,YAAY,CAAC;AAiDpB,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAM/E;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;gBAEpB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;CAOvF;AAED;;;;6EAI6E;AAC7E,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;gBAEjB,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;CAUhD;AAED,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CA6E1F"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAgDH,OAAO,KAAK,EAIV,UAAU,EAEV,SAAS,EAeV,MAAM,YAAY,CAAC;AAkDpB,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAM/E;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;gBAEpB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;CAOvF;AAED;;;;6EAI6E;AAC7E,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;gBAEjB,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;CAUhD;AAED,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CA6E1F"}
@@ -30,6 +30,7 @@ import { isAbsolute, join, resolve } from "node:path";
30
30
  import { pathToFileURL } from "node:url";
31
31
  import { snapshotRepo } from "../context/index.js";
32
32
  import { evaluatePolicy, normalizePolicy, PolicyDeniedError, policyDigest, summarizePolicyRequest, } from "../policy/index.js";
33
+ import { failedWorkflowDiagnosticAdmissionObservation, observeWorkflowDiagnosticAdmission, } from "./admission.js";
33
34
  import { assertWorkflowRunId, createWorkflowApproval } from "./approvals.js";
34
35
  import { freezeWorkflowAttemptContext } from "./attempt-context.js";
35
36
  import { probeBilling } from "./billing.js";
@@ -37,10 +38,11 @@ import { stableDigest } from "./durable-record.js";
37
38
  import { evidencePreflightError } from "./evidence-preflight.js";
38
39
  import { endWorkflowChildSessionV3, startWorkflowChildSessionV3 } from "./live-session-v3.js";
39
40
  import { buildWorkflowProof, createEvidenceRecord, digestResult, normalizeWorkflowMeta, writeWorkflowProof, } from "./proof.js";
40
- import { acquireWorkflowResumeLease, assertWorkflowRunResumable, assertWorkflowScriptUnchanged, workflowScriptDigest, writeWorkflowRunManifest, } from "./run-state.js";
41
+ import { acquireWorkflowResumeLease, assertWorkflowRunResumable, assertWorkflowScriptUnchanged, WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION, workflowScriptDigest, writeWorkflowRunManifest, } from "./run-state.js";
41
42
  import { assertProjectionWithinWorkspace, resolveGitGrantRoots } from "./sandbox-projection.js";
42
43
  import { normalizeWorkflowSpecialists, resolveSpecialistAssignment } from "./specialists.js";
43
44
  import { appendWorkflowTranscriptEvent } from "./transcript.js";
45
+ import { WORKFLOW_DIAGNOSTIC_ADMISSION_SCHEMA_VERSION } from "./types.js";
44
46
  import { parseStageOutput, validateAgainstSchema } from "./validate.js";
45
47
  import { freezeWorkflowWorkContext } from "./work-context.js";
46
48
  import { attestTerminal, attestWorkspaceFailure, resolveWorkspaceBinding, } from "./workspaces/execution.js";
@@ -234,6 +236,11 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
234
236
  const approvalAddressee = frozen?.approval_addressee ?? opts.approvalAddressee ?? "operator";
235
237
  const subscriptionOnly = frozen?.subscription_only ?? Boolean(opts.subscriptionOnly);
236
238
  const allowApiBilling = frozen?.allow_api_billing ?? Boolean(opts.allowApiBilling);
239
+ const diagnosticAdmissionConfig = frozen?.diagnostic_admission
240
+ ? normalizeDiagnosticAdmissionConfig(frozen.diagnostic_admission)
241
+ : resumeState
242
+ ? undefined
243
+ : normalizeDiagnosticAdmissionConfig(opts.diagnosticAdmission);
237
244
  const startedAt = resumeState?.manifest.started_at ?? new Date().toISOString();
238
245
  const t0 = resumeState ? Date.parse(startedAt) : Date.now();
239
246
  const scriptSha256 = resumeState?.manifest.script.sha256 ?? workflowScriptDigest(absScript);
@@ -304,6 +311,7 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
304
311
  after: resumeState.manifest.repository_before,
305
312
  agents: [],
306
313
  evidence: [],
314
+ diagnosticAdmission: initialDiagnosticAdmissionProof(diagnosticAdmissionConfig),
307
315
  adapterEvidence: opts.adapterEvidence,
308
316
  adapterAttestations: opts.adapterAttestations,
309
317
  sandboxProjection: sandboxProjectionEvidence(opts.filesystemPolicy, opts.gitWrite ?? "none"),
@@ -357,7 +365,7 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
357
365
  writeWorkflowRunManifest({
358
366
  coordRoot: opts.coordRoot,
359
367
  manifest: {
360
- schema_version: 1,
368
+ schema_version: WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION,
361
369
  run_id: runId,
362
370
  work_item_id: opts.workItemId,
363
371
  work_context: workContext,
@@ -371,6 +379,7 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
371
379
  default_adapter: defaultAdapter,
372
380
  max_agents: maxAgents,
373
381
  concurrency,
382
+ diagnostic_admission: diagnosticAdmissionConfig,
374
383
  subscription_only: subscriptionOnly,
375
384
  allow_api_billing: allowApiBilling,
376
385
  approval_mode: approvalMode,
@@ -463,6 +472,8 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
463
472
  const evidenceRecords = [];
464
473
  const policyDecisions = new Map(history?.policyDecisions.map((decision) => [decision.id, decision]));
465
474
  const acceptanceIds = new Set(meta.acceptance.map((criterion) => criterion.id));
475
+ let diagnosticAdmission = initialDiagnosticAdmissionProof(diagnosticAdmissionConfig);
476
+ let diagnosticAdmissionPromise;
466
477
  const transcript = (event, data) => {
467
478
  appendWorkflowTranscriptEvent(opts.coordRoot, runId, event, { stage: currentStage, ...data });
468
479
  };
@@ -477,6 +488,42 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
477
488
  result,
478
489
  });
479
490
  };
491
+ const ensureDiagnosticAdmissionObserved = async () => {
492
+ if (!diagnosticAdmissionConfig)
493
+ return;
494
+ diagnosticAdmissionPromise ??= (async () => {
495
+ const requestedAt = new Date();
496
+ let observation;
497
+ try {
498
+ observation = await (opts.observeDiagnosticAdmission ??
499
+ ((coordRoot, observationRunId) => observeWorkflowDiagnosticAdmission({
500
+ coordRoot,
501
+ runId: observationRunId,
502
+ })))(opts.coordRoot, runId);
503
+ }
504
+ catch (error) {
505
+ observation = failedWorkflowDiagnosticAdmissionObservation(error, requestedAt);
506
+ }
507
+ diagnosticAdmission = {
508
+ schema_version: WORKFLOW_DIAGNOSTIC_ADMISSION_SCHEMA_VERSION,
509
+ mode: "shadow",
510
+ trigger: "before-first-dispatch",
511
+ state: "observed",
512
+ action: "none",
513
+ observation,
514
+ };
515
+ transcript("diagnostic.admission", {
516
+ schema_version: diagnosticAdmission.schema_version,
517
+ mode: diagnosticAdmission.mode,
518
+ trigger: diagnosticAdmission.trigger,
519
+ action: diagnosticAdmission.action,
520
+ observation,
521
+ });
522
+ log(`[admission] shadow pressure=${observation.advice.pressure} ` +
523
+ `recommendation=${observation.advice.fan_out_recommendation}; dispatch unchanged`);
524
+ })();
525
+ await diagnosticAdmissionPromise;
526
+ };
480
527
  // Bounded concurrency gate shared by every spawn in the run — direct
481
528
  // `agent()` calls and `parallel()` thunks draw from the same slot pool, so
482
529
  // the cap holds even when a script nests parallel() inside loops.
@@ -791,6 +838,7 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
791
838
  agentsSpawned++;
792
839
  await acquire();
793
840
  try {
841
+ await ensureDiagnosticAdmissionObserved();
794
842
  transcript("agent.start", {
795
843
  id,
796
844
  label,
@@ -1061,6 +1109,7 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
1061
1109
  after: snapshotRepo(executionCwd),
1062
1110
  agents: Array.from(agentProofs.values()),
1063
1111
  evidence: evidenceRecords,
1112
+ diagnosticAdmission,
1064
1113
  adapterEvidence: opts.adapterEvidence,
1065
1114
  adapterAttestations: opts.adapterAttestations,
1066
1115
  sandboxProjection: sandboxProjectionEvidence(filesystemPolicy, gitWrite),
@@ -1100,6 +1149,7 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
1100
1149
  mode: subscriptionOnly ? "subscription" : p.mode,
1101
1150
  })),
1102
1151
  policy: proof.policy?.summary,
1152
+ diagnosticAdmission,
1103
1153
  workspaceBinding,
1104
1154
  };
1105
1155
  return report;
@@ -1140,6 +1190,7 @@ async function executeWorkflow(scriptPath, absScript, opts, resumeState, workCon
1140
1190
  after: snapshotRepo(executionCwd),
1141
1191
  agents: Array.from(agentProofs.values()),
1142
1192
  evidence: evidenceRecords,
1193
+ diagnosticAdmission,
1143
1194
  adapterEvidence: opts.adapterEvidence,
1144
1195
  adapterAttestations: opts.adapterAttestations,
1145
1196
  sandboxProjection: sandboxProjectionEvidence(filesystemPolicy, gitWrite),
@@ -1278,6 +1329,30 @@ function loadRunHistory(path) {
1278
1329
  function round4(n) {
1279
1330
  return Math.round(n * 10_000) / 10_000;
1280
1331
  }
1332
+ function normalizeDiagnosticAdmissionConfig(value) {
1333
+ if (value === undefined)
1334
+ return undefined;
1335
+ if (value.schema_version !== WORKFLOW_DIAGNOSTIC_ADMISSION_SCHEMA_VERSION ||
1336
+ value.mode !== "shadow") {
1337
+ throw new Error("diagnosticAdmission must use schema_version 1 and mode shadow");
1338
+ }
1339
+ return {
1340
+ schema_version: WORKFLOW_DIAGNOSTIC_ADMISSION_SCHEMA_VERSION,
1341
+ mode: "shadow",
1342
+ };
1343
+ }
1344
+ function initialDiagnosticAdmissionProof(config) {
1345
+ if (!config)
1346
+ return undefined;
1347
+ return {
1348
+ schema_version: WORKFLOW_DIAGNOSTIC_ADMISSION_SCHEMA_VERSION,
1349
+ mode: "shadow",
1350
+ trigger: "before-first-dispatch",
1351
+ state: "not-needed",
1352
+ action: "none",
1353
+ reason_code: "no-dispatch",
1354
+ };
1355
+ }
1281
1356
  function assertAgentCapacity(agentsSpawned, maxAgents) {
1282
1357
  if (agentsSpawned >= maxAgents) {
1283
1358
  throw new Error(`workflow agent cap reached (${maxAgents}); raise --max-agents deliberately if the fan-out is intended`);
@@ -1,3 +1,4 @@
1
+ export { failedWorkflowDiagnosticAdmissionObservation, type ObserveWorkflowDiagnosticAdmissionInput, observeWorkflowDiagnosticAdmission, type WorkflowDiagnosticAdmissionRuntime, } from "./admission.js";
1
2
  export type { CreateWorkflowApprovalInput, ResolveWorkflowApprovalInput, WorkflowApproval, WorkflowApprovalDecision, WorkflowApprovalRequest, WorkflowApprovalStatus, } from "./approvals.js";
2
3
  export { assertWorkflowRunId, createWorkflowApproval, listWorkflowApprovals, readWorkflowApproval, renderWorkflowApproval, resolveWorkflowApproval, WORKFLOW_APPROVAL_SCHEMA_VERSION, workflowApprovalId, } from "./approvals.js";
3
4
  export { freezeWorkflowAttemptContext, isCanonicalWorkflowAttemptContext, normalizeWorkflowAttemptContext, } from "./attempt-context.js";
@@ -6,8 +7,8 @@ export { buildWorkflowProof, createEvidenceRecord, deriveRunFailureClass, digest
6
7
  export type { WorkflowRunManifest } from "./run-state.js";
7
8
  export { acquireWorkflowResumeLease, assertWorkflowRunResumable, assertWorkflowScriptUnchanged, readWorkflowRunManifest, WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION, workflowRunManifestPath, workflowScriptDigest, writeWorkflowRunManifest, } from "./run-state.js";
8
9
  export { isUpstreamFailureText, vendorFailureText } from "./spawn-failure.js";
9
- export type { AcceptanceCriterion, AcceptanceResult, AcceptanceStatus, AcceptanceSummary, AdapterEvidenceCapability, AdapterEvidenceCoverage, AdapterName, AgentOpts, EngineOpts, EvidenceKind, EvidenceSource, EvidenceStatus, ResultDigest, RunReport, Spawner, SpawnFailureClass, SpawnRequest, SpawnResult, StageSchema, WorkflowAgentProof, WorkflowApprovalMode, WorkflowAttemptContext, WorkflowAttemptFailureCause, WorkflowAttemptPriorContext, WorkflowAttemptUnresolvedCriterion, WorkflowContext, WorkflowEvidenceInput, WorkflowEvidenceRecord, WorkflowMeta, WorkflowModule, WorkflowPolicyProof, WorkflowProof, WorkflowProofUnknown, WorkflowRepoEvidence, WorkflowRepoSnapshot, WorkflowRunStatus, WorkflowSpecialistProfile, WorkflowWorkContext, } from "./types.js";
10
- export { WORKFLOW_ATTEMPT_CONTEXT_SCHEMA_VERSION, WORKFLOW_PROOF_SCHEMA_VERSION, WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION, } from "./types.js";
10
+ export type { AcceptanceCriterion, AcceptanceResult, AcceptanceStatus, AcceptanceSummary, AdapterEvidenceCapability, AdapterEvidenceCoverage, AdapterName, AgentOpts, EngineOpts, EvidenceKind, EvidenceSource, EvidenceStatus, ResultDigest, RunReport, Spawner, SpawnFailureClass, SpawnRequest, SpawnResult, StageSchema, WorkflowAgentProof, WorkflowApprovalMode, WorkflowAttemptContext, WorkflowAttemptFailureCause, WorkflowAttemptPriorContext, WorkflowAttemptUnresolvedCriterion, WorkflowContext, WorkflowDiagnosticAdmissionConfig, WorkflowDiagnosticAdmissionObservation, WorkflowDiagnosticAdmissionProof, WorkflowEvidenceInput, WorkflowEvidenceRecord, WorkflowMeta, WorkflowModule, WorkflowPolicyProof, WorkflowProof, WorkflowProofUnknown, WorkflowRepoEvidence, WorkflowRepoSnapshot, WorkflowRunStatus, WorkflowSpecialistProfile, WorkflowWorkContext, } from "./types.js";
11
+ export { WORKFLOW_ATTEMPT_CONTEXT_SCHEMA_VERSION, WORKFLOW_DIAGNOSTIC_ADMISSION_SCHEMA_VERSION, WORKFLOW_PROOF_SCHEMA_VERSION, WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION, } from "./types.js";
11
12
  export type { ApplyIntegrationInput, AuthorizedIntegrationPlan, AuthorizedProviderIntegrationInput, CancelWorkspaceInput, CleanupWorkspaceInput, FilesystemIdentity, IntegrationApplyAttempt, IntegrationApplyReceipt, IntegrationAuthorization, IntegrationPlan, IntegrationReviewRecord, IntegrationTarget, LocalGitWorktreeProviderOptions, PrepareIntegrationInput, ProviderIntegrationInput, ProviderIntegrationPreview, ProviderIntegrationResult, ProviderUnknown, ProviderUnsupportedReason, RepositoryBinding, ValidatedFilesystemPath, WorkflowWorkspaceInspection, WorkflowWorkspaceSelection, WorkflowWorkspaceStatus, WorkflowWorkspaceVerification, WorkspaceAllocationRequest, WorkspaceAttestation, WorkspaceBinding, WorkspaceBoundExecutionEvidence, WorkspaceCancellationReceipt, WorkspaceCancellationResult, WorkspaceCleanupAttempt, WorkspaceCleanupIntent, WorkspaceCleanupMode, WorkspaceCleanupReceipt, WorkspaceCleanupResult, WorkspaceCompatibilityExecutionEvidence, WorkspaceExecutionEvidence, WorkspaceIntegrationState, WorkspaceIsolation, WorkspaceLifecycleProjection, WorkspaceLifecycleProjectionInput, WorkspaceLifecycleState, WorkspaceObservation, WorkspaceOwner, WorkspaceProbeInput, WorkspaceProbeResult, WorkspaceProofOutcome, WorkspaceProvider, WorkspaceProviderCapabilities, WorkspaceProviderRef, WorkspaceResourceState, } from "./workspaces/index.js";
12
13
  export { applyIntegration, assertWorkspaceLifecycleTransition, cancelWorkspace, cleanupWorkspace, createLocalGitWorktreeProvider, deriveWorkspaceLifecycle, IntegrationPrepareParkedError, inspectWorkflowWorkspace, isWorkspaceLifecycleState, listWorkflowWorkspaceInspections, prepareIntegration, prepareReclaim, probeLocalGitWorktreeProvider, readWorkflowWorkspaceStatus, renderWorkflowWorkspaceStatus, validateProviderEventChain, WORKSPACE_BINDING_SCHEMA_VERSION, WORKSPACE_RECEIPT_SCHEMA_VERSION, } from "./workspaces/index.js";
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/index.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
+ export { failedWorkflowDiagnosticAdmissionObservation, observeWorkflowDiagnosticAdmission, } from "./admission.js";
1
2
  export { assertWorkflowRunId, createWorkflowApproval, listWorkflowApprovals, readWorkflowApproval, renderWorkflowApproval, resolveWorkflowApproval, WORKFLOW_APPROVAL_SCHEMA_VERSION, workflowApprovalId, } from "./approvals.js";
2
3
  export { freezeWorkflowAttemptContext, isCanonicalWorkflowAttemptContext, normalizeWorkflowAttemptContext, } from "./attempt-context.js";
3
4
  export { runWorkflow, WorkflowParkedError, WorkflowRunError } from "./engine.js";
4
5
  export { buildWorkflowProof, createEvidenceRecord, deriveRunFailureClass, digestResult, normalizeWorkflowMeta, readWorkflowProof, renderWorkflowProof, rollupAcceptance, writeWorkflowProof, } from "./proof.js";
5
6
  export { acquireWorkflowResumeLease, assertWorkflowRunResumable, assertWorkflowScriptUnchanged, readWorkflowRunManifest, WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION, workflowRunManifestPath, workflowScriptDigest, writeWorkflowRunManifest, } from "./run-state.js";
6
7
  export { isUpstreamFailureText, vendorFailureText } from "./spawn-failure.js";
7
- export { WORKFLOW_ATTEMPT_CONTEXT_SCHEMA_VERSION, WORKFLOW_PROOF_SCHEMA_VERSION, WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION, } from "./types.js";
8
+ export { WORKFLOW_ATTEMPT_CONTEXT_SCHEMA_VERSION, WORKFLOW_DIAGNOSTIC_ADMISSION_SCHEMA_VERSION, WORKFLOW_PROOF_SCHEMA_VERSION, WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION, } from "./types.js";
8
9
  export { applyIntegration, assertWorkspaceLifecycleTransition, cancelWorkspace, cleanupWorkspace, createLocalGitWorktreeProvider, deriveWorkspaceLifecycle, IntegrationPrepareParkedError, inspectWorkflowWorkspace, isWorkspaceLifecycleState, listWorkflowWorkspaceInspections, prepareIntegration, prepareReclaim, probeLocalGitWorktreeProvider, readWorkflowWorkspaceStatus, renderWorkflowWorkspaceStatus, validateProviderEventChain, WORKSPACE_BINDING_SCHEMA_VERSION, WORKSPACE_RECEIPT_SCHEMA_VERSION, } from "./workspaces/index.js";
@@ -1,6 +1,6 @@
1
1
  import type { RepoSnapshot } from "../context/index.js";
2
2
  import type { NormalizedPolicy, PolicyDecision, PolicyIsolation, PolicyNetworkAccess } from "../policy/index.js";
3
- import type { AcceptanceCriterion, AcceptanceResult, AcceptanceSummary, AdapterAttestationCitation, AdapterEvidenceCapability, ResultDigest, SpawnFailureClass, WorkflowAgentProof, WorkflowAttemptContext, WorkflowEvidenceInput, WorkflowEvidenceRecord, WorkflowMeta, WorkflowProof, WorkflowSandboxProjectionEvidence, WorkflowWorkContext } from "./types.js";
3
+ import type { AcceptanceCriterion, AcceptanceResult, AcceptanceSummary, AdapterAttestationCitation, AdapterEvidenceCapability, ResultDigest, SpawnFailureClass, WorkflowAgentProof, WorkflowAttemptContext, WorkflowDiagnosticAdmissionProof, WorkflowEvidenceInput, WorkflowEvidenceRecord, WorkflowMeta, WorkflowProof, WorkflowSandboxProjectionEvidence, WorkflowWorkContext } from "./types.js";
4
4
  import type { WorkspaceAttestation, WorkspaceBinding, WorkspaceCompatibilityExecutionEvidence } from "./workspaces/index.js";
5
5
  export interface NormalizedWorkflowMeta {
6
6
  name: string;
@@ -23,6 +23,7 @@ export interface BuildWorkflowProofInput {
23
23
  after: RepoSnapshot;
24
24
  agents: WorkflowAgentProof[];
25
25
  evidence: WorkflowEvidenceRecord[];
26
+ diagnosticAdmission?: WorkflowDiagnosticAdmissionProof;
26
27
  adapterEvidence?: Readonly<Record<string, AdapterEvidenceCapability | undefined>>;
27
28
  /** Filesystem policy actually projected into children (ADR 0039). */
28
29
  sandboxProjection?: WorkflowSandboxProjectionEvidence;
@@ -1 +1 @@
1
- {"version":3,"file":"proof.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/proof.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,yBAAyB,EAEzB,YAAY,EAEZ,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EAEZ,aAAa,EAIb,iCAAiC,EACjC,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAChB,uCAAuC,EAExC,MAAM,uBAAuB,CAAC;AAoB/B,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,mBAAmB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAC5C,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IAClD,IAAI,EAAE,sBAAsB,CAAC;IAC7B,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,yBAAyB,GAAG,SAAS,CAAC,CAAC,CAAC;IAClF,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,iCAAiC,CAAC;IACtD;+DAC2D;IAC3D,mBAAmB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,0BAA0B,GAAG,SAAS,CAAC,CAAC,CAAC;IACvF,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QACnC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;QACrC,SAAS,EAAE,eAAe,CAAC;QAC3B,aAAa,EAAE,mBAAmB,CAAC;KACpC,CAAC;IACF;mFAC+E;IAC/E,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,iBAAiB,CAAC,EAAE,uCAAuC,CAAC;IAC5D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,YAAY,GAAG,SAAS,EAC9B,YAAY,EAAE,MAAM,GACnB,sBAAsB,CAqCxB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,KAAK,EAAE,qBAAqB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,sBAAsB,CA8BzB;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,QAAQ,EAAE,sBAAsB,EAAE,GACjC;IAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAuB9D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,CAQjF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,GAAG,QAAQ,EAC9B,MAAM,EAAE,SAAS,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,OAAO,CAAC,EAAE,GAC9D,iBAAiB,GAAG,SAAS,CAS/B;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,aAAa,CA6DhF;AAgCD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAO3E;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAoDjF;AA2BD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAoChE"}
1
+ {"version":3,"file":"proof.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/proof.ts"],"names":[],"mappings":"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"}