@llblab/pi-kit 0.38.4 → 0.39.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 (424) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +1 -1
  3. package/node_modules/@llblab/pi-actors/AGENTS.md +108 -20
  4. package/node_modules/@llblab/pi-actors/BACKLOG.md +207 -4
  5. package/node_modules/@llblab/pi-actors/CHANGELOG.md +13 -0
  6. package/node_modules/@llblab/pi-actors/README.md +31 -1
  7. package/node_modules/@llblab/pi-actors/dist/index.js +1 -1
  8. package/node_modules/@llblab/pi-actors/dist/lib/async-runs.d.ts +37 -0
  9. package/node_modules/@llblab/pi-actors/dist/lib/async-runs.js +131 -62
  10. package/node_modules/@llblab/pi-actors/dist/lib/automatic-review-runtime.d.ts +2 -0
  11. package/node_modules/@llblab/pi-actors/dist/lib/automatic-review-runtime.js +3 -2
  12. package/node_modules/@llblab/pi-actors/dist/lib/command-templates.d.ts +37 -0
  13. package/node_modules/@llblab/pi-actors/dist/lib/command-templates.js +263 -129
  14. package/node_modules/@llblab/pi-actors/dist/lib/execution-files.d.ts +32 -0
  15. package/node_modules/@llblab/pi-actors/dist/lib/execution-files.js +128 -0
  16. package/node_modules/@llblab/pi-actors/dist/lib/execution-output.js +5 -4
  17. package/node_modules/@llblab/pi-actors/dist/lib/execution-sessions.d.ts +19 -1
  18. package/node_modules/@llblab/pi-actors/dist/lib/execution-sessions.js +62 -26
  19. package/node_modules/@llblab/pi-actors/dist/lib/execution.d.ts +4 -1
  20. package/node_modules/@llblab/pi-actors/dist/lib/execution.js +6 -1
  21. package/node_modules/@llblab/pi-actors/dist/lib/extension-runtime.d.ts +9 -2
  22. package/node_modules/@llblab/pi-actors/dist/lib/extension-runtime.js +92 -14
  23. package/node_modules/@llblab/pi-actors/dist/lib/file-state.js +21 -2
  24. package/node_modules/@llblab/pi-actors/dist/lib/inspector-command.js +2 -2
  25. package/node_modules/@llblab/pi-actors/dist/lib/inspector-overlay.d.ts +25 -7
  26. package/node_modules/@llblab/pi-actors/dist/lib/inspector-overlay.js +562 -262
  27. package/node_modules/@llblab/pi-actors/dist/lib/inspector.d.ts +20 -10
  28. package/node_modules/@llblab/pi-actors/dist/lib/inspector.js +80 -91
  29. package/node_modules/@llblab/pi-actors/dist/lib/limits.d.ts +1 -0
  30. package/node_modules/@llblab/pi-actors/dist/lib/limits.js +1 -0
  31. package/node_modules/@llblab/pi-actors/dist/lib/observability.d.ts +15 -1
  32. package/node_modules/@llblab/pi-actors/dist/lib/observability.js +216 -99
  33. package/node_modules/@llblab/pi-actors/dist/lib/pi.d.ts +5 -4
  34. package/node_modules/@llblab/pi-actors/dist/lib/pi.js +64 -10
  35. package/node_modules/@llblab/pi-actors/dist/lib/recipe-projection.d.ts +18 -0
  36. package/node_modules/@llblab/pi-actors/dist/lib/recipe-projection.js +220 -0
  37. package/node_modules/@llblab/pi-actors/dist/lib/recipes-context.d.ts +2 -0
  38. package/node_modules/@llblab/pi-actors/dist/lib/recipes-context.js +30 -6
  39. package/node_modules/@llblab/pi-actors/dist/lib/registry.js +270 -36
  40. package/node_modules/@llblab/pi-actors/dist/lib/run-delivery.d.ts +213 -5
  41. package/node_modules/@llblab/pi-actors/dist/lib/run-delivery.js +1909 -40
  42. package/node_modules/@llblab/pi-actors/dist/lib/run-supervision.d.ts +107 -0
  43. package/node_modules/@llblab/pi-actors/dist/lib/run-supervision.js +412 -0
  44. package/node_modules/@llblab/pi-actors/dist/lib/run-ui-runtime.d.ts +9 -2
  45. package/node_modules/@llblab/pi-actors/dist/lib/run-ui-runtime.js +283 -60
  46. package/node_modules/@llblab/pi-actors/dist/lib/runs-artifacts.d.ts +26 -1
  47. package/node_modules/@llblab/pi-actors/dist/lib/runs-artifacts.js +68 -2
  48. package/node_modules/@llblab/pi-actors/dist/lib/runs-context-exports.d.ts +451 -0
  49. package/node_modules/@llblab/pi-actors/dist/lib/runs-context-exports.js +2315 -0
  50. package/node_modules/@llblab/pi-actors/dist/lib/runs-context-index.d.ts +97 -0
  51. package/node_modules/@llblab/pi-actors/dist/lib/runs-context-index.js +368 -0
  52. package/node_modules/@llblab/pi-actors/dist/lib/runs-control-delivery.js +46 -7
  53. package/node_modules/@llblab/pi-actors/dist/lib/runs-control.d.ts +78 -2
  54. package/node_modules/@llblab/pi-actors/dist/lib/runs-control.js +334 -2
  55. package/node_modules/@llblab/pi-actors/dist/lib/runs-controls.js +4 -1
  56. package/node_modules/@llblab/pi-actors/dist/lib/runs-descendant-launches.d.ts +80 -0
  57. package/node_modules/@llblab/pi-actors/dist/lib/runs-descendant-launches.js +287 -0
  58. package/node_modules/@llblab/pi-actors/dist/lib/runs-execution-evidence.d.ts +110 -0
  59. package/node_modules/@llblab/pi-actors/dist/lib/runs-execution-evidence.js +282 -0
  60. package/node_modules/@llblab/pi-actors/dist/lib/runs-index.d.ts +66 -1
  61. package/node_modules/@llblab/pi-actors/dist/lib/runs-index.js +349 -13
  62. package/node_modules/@llblab/pi-actors/dist/lib/runs-native-launches.d.ts +73 -0
  63. package/node_modules/@llblab/pi-actors/dist/lib/runs-native-launches.js +227 -0
  64. package/node_modules/@llblab/pi-actors/dist/lib/runs-outcomes.d.ts +141 -0
  65. package/node_modules/@llblab/pi-actors/dist/lib/runs-outcomes.js +292 -0
  66. package/node_modules/@llblab/pi-actors/dist/lib/runs-ownership.d.ts +10 -1
  67. package/node_modules/@llblab/pi-actors/dist/lib/runs-ownership.js +36 -4
  68. package/node_modules/@llblab/pi-actors/dist/lib/runs-process-windows-mi.d.ts +46 -0
  69. package/node_modules/@llblab/pi-actors/dist/lib/runs-process-windows-mi.js +114 -0
  70. package/node_modules/@llblab/pi-actors/dist/lib/runs-process.d.ts +34 -1
  71. package/node_modules/@llblab/pi-actors/dist/lib/runs-process.js +158 -26
  72. package/node_modules/@llblab/pi-actors/dist/lib/runs-results.d.ts +116 -0
  73. package/node_modules/@llblab/pi-actors/dist/lib/runs-results.js +518 -0
  74. package/node_modules/@llblab/pi-actors/dist/lib/runs-retention.d.ts +15 -2
  75. package/node_modules/@llblab/pi-actors/dist/lib/runs-retention.js +148 -9
  76. package/node_modules/@llblab/pi-actors/dist/lib/runs-session-exports.d.ts +95 -0
  77. package/node_modules/@llblab/pi-actors/dist/lib/runs-session-exports.js +470 -0
  78. package/node_modules/@llblab/pi-actors/dist/lib/runs-snapshot.d.ts +58 -0
  79. package/node_modules/@llblab/pi-actors/dist/lib/runs-snapshot.js +92 -0
  80. package/node_modules/@llblab/pi-actors/dist/lib/runs-start.d.ts +2 -0
  81. package/node_modules/@llblab/pi-actors/dist/lib/runs-start.js +44 -3
  82. package/node_modules/@llblab/pi-actors/dist/lib/runs-status.d.ts +15 -1
  83. package/node_modules/@llblab/pi-actors/dist/lib/runs-status.js +337 -13
  84. package/node_modules/@llblab/pi-actors/dist/lib/runs-supervision.d.ts +105 -0
  85. package/node_modules/@llblab/pi-actors/dist/lib/runs-supervision.js +501 -0
  86. package/node_modules/@llblab/pi-actors/dist/lib/runs-trace.d.ts +1 -0
  87. package/node_modules/@llblab/pi-actors/dist/lib/runs-trace.js +14 -3
  88. package/node_modules/@llblab/pi-actors/dist/lib/runtime.js +22 -3
  89. package/node_modules/@llblab/pi-actors/dist/lib/session-evidence.d.ts +37 -0
  90. package/node_modules/@llblab/pi-actors/dist/lib/session-evidence.js +59 -3
  91. package/node_modules/@llblab/pi-actors/dist/lib/state-readers.d.ts +4 -1
  92. package/node_modules/@llblab/pi-actors/dist/lib/state-readers.js +14 -8
  93. package/node_modules/@llblab/pi-actors/dist/lib/temp.d.ts +2 -4
  94. package/node_modules/@llblab/pi-actors/dist/lib/temp.js +4 -56
  95. package/node_modules/@llblab/pi-actors/dist/lib/tools-access.d.ts +3 -0
  96. package/node_modules/@llblab/pi-actors/dist/lib/tools-access.js +13 -0
  97. package/node_modules/@llblab/pi-actors/dist/lib/tools-inspect.d.ts +1 -0
  98. package/node_modules/@llblab/pi-actors/dist/lib/tools-inspect.js +110 -43
  99. package/node_modules/@llblab/pi-actors/dist/lib/tools-local.d.ts +3 -0
  100. package/node_modules/@llblab/pi-actors/dist/lib/tools-local.js +18 -6
  101. package/node_modules/@llblab/pi-actors/dist/lib/tools-message.d.ts +4 -1
  102. package/node_modules/@llblab/pi-actors/dist/lib/tools-message.js +126 -31
  103. package/node_modules/@llblab/pi-actors/dist/lib/tools-response.d.ts +31 -3
  104. package/node_modules/@llblab/pi-actors/dist/lib/tools-response.js +311 -47
  105. package/node_modules/@llblab/pi-actors/dist/lib/tools-spawn.d.ts +3 -0
  106. package/node_modules/@llblab/pi-actors/dist/lib/tools-spawn.js +29 -7
  107. package/node_modules/@llblab/pi-actors/dist/lib/trace-projection.d.ts +20 -0
  108. package/node_modules/@llblab/pi-actors/dist/lib/trace-projection.js +192 -43
  109. package/node_modules/@llblab/pi-actors/dist/scripts/async-runner.mjs +272 -194
  110. package/node_modules/@llblab/pi-actors/dist/scripts/conformance.mjs +14 -2
  111. package/node_modules/@llblab/pi-actors/dist/skills/actors/SKILL.md +46 -2
  112. package/node_modules/@llblab/pi-actors/dist/skills/actors/references/diagnostics.md +40 -0
  113. package/node_modules/@llblab/pi-actors/dist/skills/actors/references/runs.md +55 -1
  114. package/node_modules/@llblab/pi-actors/docs/README.md +9 -1
  115. package/node_modules/@llblab/pi-actors/docs/actor-inspector.md +84 -15
  116. package/node_modules/@llblab/pi-actors/docs/agent-experience.md +216 -0
  117. package/node_modules/@llblab/pi-actors/docs/async-runs.md +18 -2
  118. package/node_modules/@llblab/pi-actors/docs/composition-transport.md +103 -0
  119. package/node_modules/@llblab/pi-actors/docs/coordinator-delivery.md +204 -4
  120. package/node_modules/@llblab/pi-actors/docs/inspection.md +38 -2
  121. package/node_modules/@llblab/pi-actors/docs/output-projection-map.md +130 -0
  122. package/node_modules/@llblab/pi-actors/docs/releasing.md +19 -2
  123. package/node_modules/@llblab/pi-actors/docs/run-supervision.md +1622 -0
  124. package/node_modules/@llblab/pi-actors/docs/template-recipes.md +4 -0
  125. package/node_modules/@llblab/pi-actors/docs/windows-process-observation.md +248 -0
  126. package/node_modules/@llblab/pi-actors/index.ts +1 -1
  127. package/node_modules/@llblab/pi-actors/lib/async-runs.ts +164 -73
  128. package/node_modules/@llblab/pi-actors/lib/automatic-review-runtime.ts +4 -2
  129. package/node_modules/@llblab/pi-actors/lib/command-templates.ts +287 -138
  130. package/node_modules/@llblab/pi-actors/lib/execution-files.ts +118 -0
  131. package/node_modules/@llblab/pi-actors/lib/execution-output.ts +4 -4
  132. package/node_modules/@llblab/pi-actors/lib/execution-sessions.ts +57 -27
  133. package/node_modules/@llblab/pi-actors/lib/execution.ts +8 -0
  134. package/node_modules/@llblab/pi-actors/lib/extension-runtime.ts +102 -12
  135. package/node_modules/@llblab/pi-actors/lib/file-state.ts +16 -2
  136. package/node_modules/@llblab/pi-actors/lib/inspector-command.ts +2 -2
  137. package/node_modules/@llblab/pi-actors/lib/inspector-overlay.ts +524 -261
  138. package/node_modules/@llblab/pi-actors/lib/inspector.ts +101 -130
  139. package/node_modules/@llblab/pi-actors/lib/limits.ts +1 -0
  140. package/node_modules/@llblab/pi-actors/lib/observability.ts +235 -116
  141. package/node_modules/@llblab/pi-actors/lib/pi.ts +59 -11
  142. package/node_modules/@llblab/pi-actors/lib/recipe-projection.ts +232 -0
  143. package/node_modules/@llblab/pi-actors/lib/recipes-context.ts +27 -6
  144. package/node_modules/@llblab/pi-actors/lib/registry.ts +266 -36
  145. package/node_modules/@llblab/pi-actors/lib/run-delivery.ts +1737 -49
  146. package/node_modules/@llblab/pi-actors/lib/run-supervision.ts +411 -0
  147. package/node_modules/@llblab/pi-actors/lib/run-ui-runtime.ts +237 -73
  148. package/node_modules/@llblab/pi-actors/lib/runs-artifacts.ts +73 -1
  149. package/node_modules/@llblab/pi-actors/lib/runs-context-exports.ts +1871 -0
  150. package/node_modules/@llblab/pi-actors/lib/runs-context-index.ts +372 -0
  151. package/node_modules/@llblab/pi-actors/lib/runs-control-delivery.ts +36 -18
  152. package/node_modules/@llblab/pi-actors/lib/runs-control.ts +297 -1
  153. package/node_modules/@llblab/pi-actors/lib/runs-controls.ts +3 -1
  154. package/node_modules/@llblab/pi-actors/lib/runs-descendant-launches.ts +338 -0
  155. package/node_modules/@llblab/pi-actors/lib/runs-execution-evidence.ts +302 -0
  156. package/node_modules/@llblab/pi-actors/lib/runs-index.ts +345 -17
  157. package/node_modules/@llblab/pi-actors/lib/runs-native-launches.ts +270 -0
  158. package/node_modules/@llblab/pi-actors/lib/runs-outcomes.ts +377 -0
  159. package/node_modules/@llblab/pi-actors/lib/runs-ownership.ts +37 -4
  160. package/node_modules/@llblab/pi-actors/lib/runs-process-windows-mi.ts +113 -0
  161. package/node_modules/@llblab/pi-actors/lib/runs-process.ts +210 -34
  162. package/node_modules/@llblab/pi-actors/lib/runs-results.ts +601 -0
  163. package/node_modules/@llblab/pi-actors/lib/runs-retention.ts +134 -10
  164. package/node_modules/@llblab/pi-actors/lib/runs-session-exports.ts +406 -0
  165. package/node_modules/@llblab/pi-actors/lib/runs-snapshot.ts +143 -0
  166. package/node_modules/@llblab/pi-actors/lib/runs-start.ts +44 -2
  167. package/node_modules/@llblab/pi-actors/lib/runs-status.ts +252 -10
  168. package/node_modules/@llblab/pi-actors/lib/runs-supervision.ts +394 -0
  169. package/node_modules/@llblab/pi-actors/lib/runs-trace.ts +14 -3
  170. package/node_modules/@llblab/pi-actors/lib/runtime.ts +22 -3
  171. package/node_modules/@llblab/pi-actors/lib/session-evidence.ts +76 -4
  172. package/node_modules/@llblab/pi-actors/lib/state-readers.ts +16 -7
  173. package/node_modules/@llblab/pi-actors/lib/temp.ts +3 -56
  174. package/node_modules/@llblab/pi-actors/lib/tools-access.ts +13 -0
  175. package/node_modules/@llblab/pi-actors/lib/tools-inspect.ts +110 -51
  176. package/node_modules/@llblab/pi-actors/lib/tools-local.ts +37 -24
  177. package/node_modules/@llblab/pi-actors/lib/tools-message.ts +120 -37
  178. package/node_modules/@llblab/pi-actors/lib/tools-response.ts +273 -50
  179. package/node_modules/@llblab/pi-actors/lib/tools-spawn.ts +31 -10
  180. package/node_modules/@llblab/pi-actors/lib/trace-projection.ts +165 -42
  181. package/node_modules/@llblab/pi-actors/package.json +10 -6
  182. package/node_modules/@llblab/pi-actors/scripts/async-runner.mjs +272 -194
  183. package/node_modules/@llblab/pi-actors/scripts/conformance.mjs +14 -2
  184. package/node_modules/@llblab/pi-actors/skills/actors/SKILL.md +46 -2
  185. package/node_modules/@llblab/pi-actors/skills/actors/references/diagnostics.md +40 -0
  186. package/node_modules/@llblab/pi-actors/skills/actors/references/runs.md +55 -1
  187. package/node_modules/yaml/LICENSE +13 -0
  188. package/node_modules/yaml/README.md +172 -0
  189. package/node_modules/yaml/bin.mjs +11 -0
  190. package/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
  191. package/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
  192. package/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
  193. package/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
  194. package/node_modules/yaml/browser/dist/compose/composer.js +219 -0
  195. package/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
  196. package/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
  197. package/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
  198. package/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
  199. package/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
  200. package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +225 -0
  201. package/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
  202. package/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
  203. package/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
  204. package/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
  205. package/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
  206. package/node_modules/yaml/browser/dist/doc/Document.js +335 -0
  207. package/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
  208. package/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
  209. package/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
  210. package/node_modules/yaml/browser/dist/doc/directives.js +176 -0
  211. package/node_modules/yaml/browser/dist/errors.js +57 -0
  212. package/node_modules/yaml/browser/dist/index.js +17 -0
  213. package/node_modules/yaml/browser/dist/log.js +11 -0
  214. package/node_modules/yaml/browser/dist/nodes/Alias.js +116 -0
  215. package/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
  216. package/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
  217. package/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
  218. package/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
  219. package/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
  220. package/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
  221. package/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
  222. package/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
  223. package/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
  224. package/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
  225. package/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
  226. package/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
  227. package/node_modules/yaml/browser/dist/parse/cst.js +98 -0
  228. package/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
  229. package/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
  230. package/node_modules/yaml/browser/dist/parse/parser.js +975 -0
  231. package/node_modules/yaml/browser/dist/public-api.js +102 -0
  232. package/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
  233. package/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
  234. package/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
  235. package/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
  236. package/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
  237. package/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
  238. package/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
  239. package/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
  240. package/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
  241. package/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
  242. package/node_modules/yaml/browser/dist/schema/tags.js +96 -0
  243. package/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
  244. package/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
  245. package/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
  246. package/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
  247. package/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
  248. package/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
  249. package/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
  250. package/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
  251. package/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
  252. package/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
  253. package/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
  254. package/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
  255. package/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
  256. package/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
  257. package/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
  258. package/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
  259. package/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
  260. package/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
  261. package/node_modules/yaml/browser/dist/util.js +11 -0
  262. package/node_modules/yaml/browser/dist/visit.js +233 -0
  263. package/node_modules/yaml/browser/index.js +5 -0
  264. package/node_modules/yaml/browser/package.json +3 -0
  265. package/node_modules/yaml/dist/cli.d.ts +8 -0
  266. package/node_modules/yaml/dist/cli.mjs +201 -0
  267. package/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
  268. package/node_modules/yaml/dist/compose/compose-collection.js +90 -0
  269. package/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
  270. package/node_modules/yaml/dist/compose/compose-doc.js +45 -0
  271. package/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
  272. package/node_modules/yaml/dist/compose/compose-node.js +112 -0
  273. package/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
  274. package/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
  275. package/node_modules/yaml/dist/compose/composer.d.ts +63 -0
  276. package/node_modules/yaml/dist/compose/composer.js +224 -0
  277. package/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
  278. package/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
  279. package/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
  280. package/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
  281. package/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
  282. package/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
  283. package/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
  284. package/node_modules/yaml/dist/compose/resolve-end.js +39 -0
  285. package/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
  286. package/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
  287. package/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
  288. package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +227 -0
  289. package/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
  290. package/node_modules/yaml/dist/compose/resolve-props.js +148 -0
  291. package/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
  292. package/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
  293. package/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
  294. package/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
  295. package/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
  296. package/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
  297. package/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
  298. package/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
  299. package/node_modules/yaml/dist/doc/Document.d.ts +141 -0
  300. package/node_modules/yaml/dist/doc/Document.js +337 -0
  301. package/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
  302. package/node_modules/yaml/dist/doc/anchors.js +76 -0
  303. package/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
  304. package/node_modules/yaml/dist/doc/applyReviver.js +57 -0
  305. package/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
  306. package/node_modules/yaml/dist/doc/createNode.js +90 -0
  307. package/node_modules/yaml/dist/doc/directives.d.ts +49 -0
  308. package/node_modules/yaml/dist/doc/directives.js +178 -0
  309. package/node_modules/yaml/dist/errors.d.ts +21 -0
  310. package/node_modules/yaml/dist/errors.js +62 -0
  311. package/node_modules/yaml/dist/index.d.ts +25 -0
  312. package/node_modules/yaml/dist/index.js +50 -0
  313. package/node_modules/yaml/dist/log.d.ts +3 -0
  314. package/node_modules/yaml/dist/log.js +19 -0
  315. package/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
  316. package/node_modules/yaml/dist/nodes/Alias.js +118 -0
  317. package/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
  318. package/node_modules/yaml/dist/nodes/Collection.js +151 -0
  319. package/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
  320. package/node_modules/yaml/dist/nodes/Node.js +40 -0
  321. package/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
  322. package/node_modules/yaml/dist/nodes/Pair.js +39 -0
  323. package/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
  324. package/node_modules/yaml/dist/nodes/Scalar.js +27 -0
  325. package/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
  326. package/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
  327. package/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
  328. package/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
  329. package/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
  330. package/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
  331. package/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
  332. package/node_modules/yaml/dist/nodes/identity.js +53 -0
  333. package/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
  334. package/node_modules/yaml/dist/nodes/toJS.js +39 -0
  335. package/node_modules/yaml/dist/options.d.ts +350 -0
  336. package/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
  337. package/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
  338. package/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
  339. package/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
  340. package/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
  341. package/node_modules/yaml/dist/parse/cst-visit.js +99 -0
  342. package/node_modules/yaml/dist/parse/cst.d.ts +109 -0
  343. package/node_modules/yaml/dist/parse/cst.js +112 -0
  344. package/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
  345. package/node_modules/yaml/dist/parse/lexer.js +723 -0
  346. package/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
  347. package/node_modules/yaml/dist/parse/line-counter.js +41 -0
  348. package/node_modules/yaml/dist/parse/parser.d.ts +84 -0
  349. package/node_modules/yaml/dist/parse/parser.js +980 -0
  350. package/node_modules/yaml/dist/public-api.d.ts +44 -0
  351. package/node_modules/yaml/dist/public-api.js +107 -0
  352. package/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
  353. package/node_modules/yaml/dist/schema/Schema.js +39 -0
  354. package/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
  355. package/node_modules/yaml/dist/schema/common/map.js +19 -0
  356. package/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
  357. package/node_modules/yaml/dist/schema/common/null.js +17 -0
  358. package/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
  359. package/node_modules/yaml/dist/schema/common/seq.js +19 -0
  360. package/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
  361. package/node_modules/yaml/dist/schema/common/string.js +16 -0
  362. package/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
  363. package/node_modules/yaml/dist/schema/core/bool.js +21 -0
  364. package/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
  365. package/node_modules/yaml/dist/schema/core/float.js +47 -0
  366. package/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
  367. package/node_modules/yaml/dist/schema/core/int.js +42 -0
  368. package/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
  369. package/node_modules/yaml/dist/schema/core/schema.js +25 -0
  370. package/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
  371. package/node_modules/yaml/dist/schema/json/schema.js +64 -0
  372. package/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
  373. package/node_modules/yaml/dist/schema/tags.d.ts +48 -0
  374. package/node_modules/yaml/dist/schema/tags.js +99 -0
  375. package/node_modules/yaml/dist/schema/types.d.ts +92 -0
  376. package/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
  377. package/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
  378. package/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
  379. package/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
  380. package/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
  381. package/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
  382. package/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
  383. package/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
  384. package/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
  385. package/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
  386. package/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
  387. package/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
  388. package/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
  389. package/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
  390. package/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
  391. package/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
  392. package/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
  393. package/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
  394. package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
  395. package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
  396. package/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
  397. package/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
  398. package/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
  399. package/node_modules/yaml/dist/stringify/stringify.js +132 -0
  400. package/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
  401. package/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
  402. package/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
  403. package/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
  404. package/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
  405. package/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
  406. package/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
  407. package/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
  408. package/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
  409. package/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
  410. package/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
  411. package/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
  412. package/node_modules/yaml/dist/test-events.d.ts +4 -0
  413. package/node_modules/yaml/dist/test-events.js +134 -0
  414. package/node_modules/yaml/dist/util.d.ts +16 -0
  415. package/node_modules/yaml/dist/util.js +28 -0
  416. package/node_modules/yaml/dist/visit.d.ts +102 -0
  417. package/node_modules/yaml/dist/visit.js +236 -0
  418. package/node_modules/yaml/package.json +97 -0
  419. package/node_modules/yaml/util.js +2 -0
  420. package/package.json +2 -2
  421. package/node_modules/@llblab/pi-actors/banner.jpg +0 -0
  422. package/node_modules/@llblab/pi-actors/dist/lib/inspector-actions.d.ts +0 -16
  423. package/node_modules/@llblab/pi-actors/dist/lib/inspector-actions.js +0 -57
  424. package/node_modules/@llblab/pi-actors/lib/inspector-actions.ts +0 -79
@@ -0,0 +1,107 @@
1
+ import type { RunContextIndexIdentity } from "./runs-context-index.ts";
2
+ /** Shared lower bound for Run report policies and root-session diagnostic batches. */
3
+ export declare const RUN_DIAGNOSTIC_MIN_INTERVAL_MS = 60000;
4
+ type PolicyLayer = "recipe" | "launch";
5
+ export type RunSupervisionPolicySource = PolicyLayer | "unset";
6
+ export interface RunSupervisionPolicy {
7
+ readonly report_every_ms: number | null;
8
+ readonly max_runtime_ms: number | null;
9
+ }
10
+ export interface ResolvedRunSupervisionPolicy extends RunSupervisionPolicy {
11
+ readonly provenance: {
12
+ readonly report_every: RunSupervisionPolicySource;
13
+ readonly max_runtime: RunSupervisionPolicySource;
14
+ };
15
+ }
16
+ export declare function resolveRunSupervisionPolicy(recipe?: unknown, launch?: unknown): ResolvedRunSupervisionPolicy;
17
+ /** Decode persisted milliseconds without coercing strings or inventing absent settings. */
18
+ export declare function decodeRunSupervisionPolicy(value: unknown): RunSupervisionPolicy;
19
+ /** Compare already-normalized values, not their provenance or generation clocks. */
20
+ export declare function sameRunSupervisionPolicy(left: RunSupervisionPolicy, right: RunSupervisionPolicy): boolean;
21
+ export interface RunSupervisionState extends RunSupervisionPolicy {
22
+ readonly deadline_at: string | null;
23
+ }
24
+ export interface RunSupervisionClock {
25
+ readonly started_at: string;
26
+ readonly supervision: RunSupervisionState;
27
+ }
28
+ export declare function createRunSupervisionClock(policy: unknown, startedAtMs: number): RunSupervisionClock;
29
+ /** Wholly absent legacy clocks stay absent; decoding never consults current time. */
30
+ export declare function readRunSupervisionClock(value: unknown): RunSupervisionClock | undefined;
31
+ export declare const RUN_SUPERVISION_TIMER_SLICE_MAX_MS = 2147483647;
32
+ export interface RunSupervisionTimeSource {
33
+ wallNow(): number;
34
+ monotonicNow(): {
35
+ readonly milliseconds: number;
36
+ readonly epoch: object;
37
+ };
38
+ }
39
+ export interface RunSupervisionTimeOrigin {
40
+ readonly wall_ms: number;
41
+ }
42
+ type ClockFault = "clock_unavailable" | "monotonic_unavailable" | "monotonic_reversed" | "monotonic_epoch_changed";
43
+ export type RunSupervisionTimeObservation = {
44
+ readonly state: "available";
45
+ readonly elapsed_ms: number;
46
+ readonly remaining_ms: number | null;
47
+ readonly deadline_state: "pending" | "due" | "disabled";
48
+ readonly deadline_wake_ms: number | null;
49
+ } | {
50
+ readonly state: "unproven";
51
+ readonly reason: ClockFault;
52
+ readonly elapsed_ms: null;
53
+ readonly remaining_ms: null;
54
+ readonly deadline_state: "unproven" | "due" | "disabled";
55
+ readonly deadline_wake_ms: 0 | null;
56
+ };
57
+ export interface RunSupervisionTimebase {
58
+ readonly clock: Readonly<RunSupervisionClock>;
59
+ readonly observe: () => Readonly<RunSupervisionTimeObservation>;
60
+ }
61
+ export type RunSupervisionTimebaseReading = {
62
+ readonly state: "available";
63
+ readonly timebase: Readonly<RunSupervisionTimebase>;
64
+ } | {
65
+ readonly state: "unavailable";
66
+ readonly reason: "clock_unconfigured" | "clock_invalid" | "origin_unavailable" | "origin_mismatch" | "clock_changed";
67
+ };
68
+ /** Capture synchronously at generation admission; the returned exact reference, not its DTO, retains continuity. */
69
+ export declare function captureRunSupervisionTimeOrigin(source?: RunSupervisionTimeSource): Readonly<RunSupervisionTimeOrigin>;
70
+ /** Stored metadata alone cannot recreate an origin, renew a budget or clear previously latched clock uncertainty. */
71
+ export declare function createRunSupervisionTimebase(metadata: unknown, origin: unknown): Readonly<RunSupervisionTimebaseReading>;
72
+ export interface RunSupervisionDeadlineObservation {
73
+ readonly kind: "run_deadline_due";
74
+ readonly identity: Readonly<RunContextIndexIdentity>;
75
+ readonly deadline_at: string;
76
+ readonly timing: Readonly<RunSupervisionTimeObservation>;
77
+ readonly scope_closure: "not_asserted";
78
+ readonly stop_requested: false;
79
+ }
80
+ export interface RunSupervisionControllerPorts {
81
+ /** Synchronous caller-admitted state; stored metadata/DTOs never reconstruct work or actuation authority. */
82
+ readCurrent(): {
83
+ readonly identity: unknown;
84
+ readonly clock: unknown;
85
+ } | null;
86
+ /** Must enqueue asynchronously and return one synchronous cancellation function. */
87
+ schedule?: (wake: () => void, milliseconds: number) => () => void;
88
+ /** Synchronous observation only, not delivery acceptance or permission to signal/finalize a Run. */
89
+ onDeadlineDue(event: Readonly<RunSupervisionDeadlineObservation>): void;
90
+ }
91
+ type ControllerReason = "binding_unavailable" | "binding_changed" | "clock_changed" | "clock_invalid" | "clock_unproven" | "timer_unavailable" | "timer_provider_invalid" | "notification_failed";
92
+ export interface RunSupervisionControllerSnapshot {
93
+ readonly state: "idle" | "armed" | "disabled" | "due" | "stopped" | "unproven";
94
+ readonly identity: Readonly<RunContextIndexIdentity>;
95
+ readonly deadline_due: boolean;
96
+ readonly pending_wake_ms: number | null;
97
+ readonly reason?: ControllerReason;
98
+ readonly timer_cleanup?: "unproven";
99
+ }
100
+ export interface RunSupervisionController {
101
+ readonly start: () => Readonly<RunSupervisionControllerSnapshot>;
102
+ readonly stop: () => Readonly<RunSupervisionControllerSnapshot>;
103
+ readonly snapshot: () => Readonly<RunSupervisionControllerSnapshot>;
104
+ }
105
+ /** No lifecycle/work lock is held here; the caller owns authoritative state ports and any later admitted action. */
106
+ export declare function createRunSupervisionController(expected: unknown, timebase: RunSupervisionTimebase, ports: RunSupervisionControllerPorts): Readonly<RunSupervisionController>;
107
+ export {};
@@ -0,0 +1,412 @@
1
+ /**
2
+ * Run generation supervision policy, clocks and deadline observation.
3
+ * Owns: policy/clock validation, genuine runtime-local origins, monotonic timing and one-shot bounded deadline wake protocol.
4
+ * Excludes: canonical state admission, independent supervisor/recovery, report acceptance, lifecycle/work authority and stop/closure actuation.
5
+ */
6
+ import { performance } from "node:perf_hooks";
7
+ const POLICY_FIELDS = ["report_every", "max_runtime"];
8
+ const DURATION_MULTIPLIERS = { ms: 1, s: 1_000, m: 60_000, h: 3_600_000 };
9
+ /** Shared lower bound for Run report policies and root-session diagnostic batches. */
10
+ export const RUN_DIAGNOSTIC_MIN_INTERVAL_MS = 60_000;
11
+ function requireDiagnosticInterval(milliseconds, label) {
12
+ if (milliseconds < RUN_DIAGNOSTIC_MIN_INTERVAL_MS) {
13
+ throw new Error(`Invalid ${label}: interval must be at least ${RUN_DIAGNOSTIC_MIN_INTERVAL_MS}ms (1m).`);
14
+ }
15
+ }
16
+ function normalizeDuration(value, field, layer) {
17
+ if (value === null)
18
+ return null;
19
+ const match = typeof value === "string"
20
+ ? /^([1-9][0-9]*)(ms|s|m|h)$/u.exec(value)
21
+ : null;
22
+ // A final line terminator may satisfy $, but is not part of a literal duration.
23
+ if (!match || match[0] !== value) {
24
+ throw new Error(`Invalid ${layer}.${field}: expected a positive integer duration with ms/s/m/h, or null.`);
25
+ }
26
+ const milliseconds = Number(match[1]) *
27
+ DURATION_MULTIPLIERS[match[2]];
28
+ if (!Number.isSafeInteger(milliseconds)) {
29
+ throw new Error(`Invalid ${layer}.${field}: duration exceeds the safe integer millisecond range.`);
30
+ }
31
+ if (field === "report_every")
32
+ requireDiagnosticInterval(milliseconds, `${layer}.${field}`);
33
+ return milliseconds;
34
+ }
35
+ function normalizeLayer(value, layer) {
36
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
37
+ throw new Error(`Run supervision ${layer} policy must be an object.`);
38
+ }
39
+ const record = value;
40
+ const normalized = {
41
+ report_every: undefined,
42
+ max_runtime: undefined,
43
+ };
44
+ for (const field of POLICY_FIELDS) {
45
+ if (!Object.hasOwn(record, field))
46
+ continue;
47
+ const raw = record[field];
48
+ if (raw !== undefined)
49
+ normalized[field] = normalizeDuration(raw, field, layer);
50
+ }
51
+ return normalized;
52
+ }
53
+ export function resolveRunSupervisionPolicy(recipe = {}, launch = {}) {
54
+ const recipePolicy = normalizeLayer(recipe, "recipe");
55
+ const launchPolicy = normalizeLayer(launch, "launch");
56
+ const select = (field) => {
57
+ const launchValue = launchPolicy[field];
58
+ if (launchValue !== undefined)
59
+ return { value: launchValue, source: "launch" };
60
+ const recipeValue = recipePolicy[field];
61
+ if (recipeValue !== undefined)
62
+ return { value: recipeValue, source: "recipe" };
63
+ return { value: null, source: "unset" };
64
+ };
65
+ const report = select("report_every");
66
+ const maximum = select("max_runtime");
67
+ return {
68
+ report_every_ms: report.value,
69
+ max_runtime_ms: maximum.value,
70
+ provenance: { report_every: report.source, max_runtime: maximum.source },
71
+ };
72
+ }
73
+ /** Decode persisted milliseconds without coercing strings or inventing absent settings. */
74
+ export function decodeRunSupervisionPolicy(value) {
75
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
76
+ throw new Error("Stored run supervision policy must be an object.");
77
+ }
78
+ const record = value;
79
+ const read = (field) => {
80
+ const milliseconds = Object.hasOwn(record, field) ? record[field] : undefined;
81
+ if (milliseconds === null)
82
+ return null;
83
+ if (typeof milliseconds === "number" &&
84
+ Number.isSafeInteger(milliseconds) && milliseconds > 0) {
85
+ if (field === "report_every_ms")
86
+ requireDiagnosticInterval(milliseconds, `stored supervision ${field}`);
87
+ return milliseconds;
88
+ }
89
+ throw new Error(`Invalid stored supervision ${field}: expected positive integer milliseconds or null.`);
90
+ };
91
+ return { report_every_ms: read("report_every_ms"), max_runtime_ms: read("max_runtime_ms") };
92
+ }
93
+ /** Compare already-normalized values, not their provenance or generation clocks. */
94
+ export function sameRunSupervisionPolicy(left, right) {
95
+ return left.report_every_ms === right.report_every_ms &&
96
+ left.max_runtime_ms === right.max_runtime_ms;
97
+ }
98
+ function timestamp(milliseconds, field) {
99
+ if (!Number.isSafeInteger(milliseconds) ||
100
+ !Number.isFinite(new Date(milliseconds).getTime())) {
101
+ throw new Error(`Invalid run supervision ${field}: timestamp is outside the representable millisecond range.`);
102
+ }
103
+ return new Date(milliseconds).toISOString();
104
+ }
105
+ function parseStart(value) {
106
+ if (typeof value !== "string") {
107
+ throw new Error("Invalid run supervision started_at: expected a canonical ISO timestamp.");
108
+ }
109
+ const milliseconds = Date.parse(value);
110
+ if (!Number.isSafeInteger(milliseconds) || timestamp(milliseconds, "started_at") !== value) {
111
+ throw new Error("Invalid run supervision started_at: expected a canonical ISO timestamp.");
112
+ }
113
+ return milliseconds;
114
+ }
115
+ export function createRunSupervisionClock(policy, startedAtMs) {
116
+ const normalized = decodeRunSupervisionPolicy(policy);
117
+ const startedAt = timestamp(startedAtMs, "started_at");
118
+ const deadlineAt = normalized.max_runtime_ms === null
119
+ ? null
120
+ : timestamp(startedAtMs + normalized.max_runtime_ms, "deadline_at");
121
+ return {
122
+ started_at: startedAt,
123
+ supervision: { ...normalized, deadline_at: deadlineAt },
124
+ };
125
+ }
126
+ /** Wholly absent legacy clocks stay absent; decoding never consults current time. */
127
+ export function readRunSupervisionClock(value) {
128
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
129
+ throw new Error("Run supervision clock metadata must be an object.");
130
+ }
131
+ const record = value;
132
+ const hasStart = Object.hasOwn(record, "started_at");
133
+ const hasPolicy = Object.hasOwn(record, "supervision");
134
+ if (!hasStart && !hasPolicy && !Object.hasOwn(record, "supervision_provenance"))
135
+ return undefined;
136
+ if (!hasStart || !hasPolicy)
137
+ throw new Error("Run supervision clock metadata is incomplete.");
138
+ const clock = createRunSupervisionClock(record.supervision, parseStart(record.started_at));
139
+ if (Object.hasOwn(record, "createdAt") && record.createdAt !== clock.started_at) {
140
+ throw new Error("Run supervision started_at contradicts generation creation time.");
141
+ }
142
+ const stored = record.supervision;
143
+ if (!Object.hasOwn(stored, "deadline_at") || stored.deadline_at !== clock.supervision.deadline_at) {
144
+ throw new Error("Run supervision deadline_at contradicts its captured start and policy.");
145
+ }
146
+ return clock;
147
+ }
148
+ // --- Runtime-local timing ---
149
+ export const RUN_SUPERVISION_TIMER_SLICE_MAX_MS = 2_147_483_647;
150
+ const origins = new WeakMap();
151
+ const systemEpoch = Object.freeze({});
152
+ const systemSource = {
153
+ wallNow: () => Date.now(), monotonicNow: () => ({ milliseconds: performance.now(), epoch: systemEpoch }),
154
+ };
155
+ function monotonic(value) { return typeof value === "number" && Number.isFinite(value) && value >= 0 && value <= Number.MAX_SAFE_INTEGER; }
156
+ /** Capture synchronously at generation admission; the returned exact reference, not its DTO, retains continuity. */
157
+ export function captureRunSupervisionTimeOrigin(source = systemSource) {
158
+ const wall = source.wallNow();
159
+ createRunSupervisionClock({ report_every_ms: null, max_runtime_ms: null }, wall);
160
+ const read = source.monotonicNow.bind(source);
161
+ const sample = read();
162
+ const milliseconds = sample?.milliseconds;
163
+ const epoch = sample?.epoch;
164
+ if (!monotonic(milliseconds) || !epoch || typeof epoch !== "object") {
165
+ throw new Error("Run supervision time origin requires a finite monotonic sample and runtime-local epoch.");
166
+ }
167
+ const origin = Object.freeze({ wall_ms: wall });
168
+ origins.set(origin, { wall, start: milliseconds, last: milliseconds, elapsed: 0, epoch, read });
169
+ return origin;
170
+ }
171
+ function observe(evidence, maximum) {
172
+ if (!evidence.fault) {
173
+ try {
174
+ const sample = evidence.read();
175
+ const milliseconds = sample?.milliseconds;
176
+ const epoch = sample?.epoch;
177
+ if (epoch !== evidence.epoch)
178
+ evidence.fault = "monotonic_epoch_changed";
179
+ else if (!monotonic(milliseconds))
180
+ evidence.fault = "monotonic_unavailable";
181
+ else if (milliseconds < evidence.last)
182
+ evidence.fault = "monotonic_reversed";
183
+ else {
184
+ evidence.last = milliseconds;
185
+ evidence.elapsed = Math.floor(milliseconds - evidence.start);
186
+ }
187
+ }
188
+ catch {
189
+ evidence.fault = "clock_unavailable";
190
+ }
191
+ }
192
+ const due = maximum !== null && evidence.elapsed >= maximum;
193
+ if (evidence.fault)
194
+ return Object.freeze({ state: "unproven", reason: evidence.fault, elapsed_ms: null, remaining_ms: null,
195
+ deadline_state: maximum === null ? "disabled" : due ? "due" : "unproven", deadline_wake_ms: due ? 0 : null });
196
+ // Integer subtraction preserves ceil(maximum - elapsed) even when a huge allowance loses fractional precision.
197
+ const remaining = maximum === null ? null : Math.max(0, maximum - evidence.elapsed);
198
+ return Object.freeze({ state: "available", elapsed_ms: evidence.elapsed, remaining_ms: remaining,
199
+ deadline_state: maximum === null ? "disabled" : due ? "due" : "pending",
200
+ deadline_wake_ms: remaining === null ? null : Math.min(remaining, RUN_SUPERVISION_TIMER_SLICE_MAX_MS) });
201
+ }
202
+ /** Stored metadata alone cannot recreate an origin, renew a budget or clear previously latched clock uncertainty. */
203
+ export function createRunSupervisionTimebase(metadata, origin) {
204
+ let decoded;
205
+ try {
206
+ decoded = readRunSupervisionClock(metadata);
207
+ }
208
+ catch {
209
+ return Object.freeze({ state: "unavailable", reason: "clock_invalid" });
210
+ }
211
+ if (!decoded)
212
+ return Object.freeze({ state: "unavailable", reason: "clock_unconfigured" });
213
+ const evidence = origin && typeof origin === "object" ? origins.get(origin) : undefined;
214
+ if (!evidence)
215
+ return Object.freeze({ state: "unavailable", reason: "origin_unavailable" });
216
+ if (Date.parse(decoded.started_at) !== evidence.wall)
217
+ return Object.freeze({ state: "unavailable", reason: "origin_mismatch" });
218
+ const signature = JSON.stringify(decoded);
219
+ if (evidence.signature !== undefined && evidence.signature !== signature)
220
+ return Object.freeze({ state: "unavailable", reason: "clock_changed" });
221
+ evidence.signature = signature;
222
+ const clock = Object.freeze({ started_at: decoded.started_at, supervision: Object.freeze({ ...decoded.supervision }) });
223
+ return Object.freeze({ state: "available", timebase: Object.freeze({ clock, observe: () => observe(evidence, clock.supervision.max_runtime_ms) }) });
224
+ }
225
+ function identity(value) {
226
+ if (!value || typeof value !== "object" || Array.isArray(value))
227
+ return undefined;
228
+ const read = (key) => Object.getOwnPropertyDescriptor(value, key)?.value;
229
+ const run = read("run");
230
+ const generation = read("run_instance_id");
231
+ const owner = read("ownerId");
232
+ if (typeof run !== "string" || !/^[A-Za-z0-9_.-]+$/u.test(run) || typeof generation !== "string" || !generation ||
233
+ (owner !== undefined && (typeof owner !== "string" || !owner)))
234
+ return undefined;
235
+ return Object.freeze({ run, run_instance_id: generation, ...(owner === undefined ? {} : { ownerId: owner }) });
236
+ }
237
+ function sameIdentity(a, b) {
238
+ return a.run === b.run && a.run_instance_id === b.run_instance_id && a.ownerId === b.ownerId;
239
+ }
240
+ function number(value) { return typeof value === "number" && Number.isSafeInteger(value) && value >= 0; }
241
+ function timingSnapshot(value, maximum) {
242
+ const state = value?.state;
243
+ const elapsed = value?.elapsed_ms;
244
+ const remaining = value?.remaining_ms;
245
+ const deadline = value?.deadline_state;
246
+ const wake = value?.deadline_wake_ms;
247
+ if (state === "available" && number(elapsed) && number(remaining) && remaining === Math.max(0, maximum - elapsed) &&
248
+ deadline === (elapsed >= maximum ? "due" : "pending") && wake === Math.min(remaining, RUN_SUPERVISION_TIMER_SLICE_MAX_MS)) {
249
+ return Object.freeze({ state, elapsed_ms: elapsed, remaining_ms: remaining, deadline_state: deadline, deadline_wake_ms: wake });
250
+ }
251
+ if (state === "unproven" && elapsed === null && remaining === null && (deadline === "due" || deadline === "unproven") && wake === (deadline === "due" ? 0 : null)) {
252
+ const reason = value.reason;
253
+ if (["clock_unavailable", "monotonic_unavailable", "monotonic_reversed", "monotonic_epoch_changed"].includes(reason)) {
254
+ return Object.freeze({ state, reason, elapsed_ms: null, remaining_ms: null, deadline_state: deadline, deadline_wake_ms: deadline === "due" ? 0 : null });
255
+ }
256
+ }
257
+ return undefined;
258
+ }
259
+ function scheduleNode(wake, milliseconds) {
260
+ const timer = setTimeout(wake, milliseconds);
261
+ return () => clearTimeout(timer);
262
+ }
263
+ /** No lifecycle/work lock is held here; the caller owns authoritative state ports and any later admitted action. */
264
+ export function createRunSupervisionController(expected, timebase, ports) {
265
+ const bound = identity(expected);
266
+ if (!bound)
267
+ throw new Error("Run supervision controller requires an exact Run/generation/owner binding.");
268
+ const decoded = readRunSupervisionClock(timebase.clock);
269
+ if (!decoded || typeof timebase.observe !== "function")
270
+ throw new Error("Run supervision controller requires a configured timebase.");
271
+ const clockKey = JSON.stringify(decoded);
272
+ const maximum = decoded.supervision.max_runtime_ms;
273
+ const deadlineAt = decoded.supervision.deadline_at;
274
+ const observe = timebase.observe.bind(timebase);
275
+ const readCurrent = ports.readCurrent.bind(ports);
276
+ const schedule = ports.schedule?.bind(ports) ?? scheduleNode;
277
+ const notify = ports.onDeadlineDue.bind(ports);
278
+ let state = maximum === null ? "disabled" : "idle";
279
+ let started = false;
280
+ let active = false;
281
+ let due = false;
282
+ let reason;
283
+ let cleanup = false;
284
+ let ticket;
285
+ let cancel;
286
+ let pending = null;
287
+ const snapshot = () => Object.freeze({ state, identity: bound, deadline_due: due, pending_wake_ms: pending,
288
+ ...(reason ? { reason } : {}), ...(cleanup ? { timer_cleanup: "unproven" } : {}) });
289
+ const cancelOnce = (action) => { try {
290
+ action();
291
+ }
292
+ catch {
293
+ cleanup = true;
294
+ } };
295
+ const disarm = () => { const action = cancel; ticket = undefined; cancel = undefined; pending = null; if (action)
296
+ cancelOnce(action); };
297
+ const fail = (cause) => { active = false; reason ??= cause; if (state !== "stopped")
298
+ state = "unproven"; disarm(); };
299
+ const checkBinding = () => {
300
+ try {
301
+ const current = readCurrent();
302
+ const currentIdentity = identity(current?.identity);
303
+ if (!currentIdentity)
304
+ return "binding_unavailable";
305
+ if (!sameIdentity(bound, currentIdentity))
306
+ return "binding_changed";
307
+ const clock = readRunSupervisionClock(current?.clock);
308
+ return clock && JSON.stringify(clock) === clockKey ? undefined : "clock_changed";
309
+ }
310
+ catch {
311
+ return "binding_unavailable";
312
+ }
313
+ };
314
+ const arm = (milliseconds) => {
315
+ const currentTicket = {};
316
+ ticket = currentTicket;
317
+ pending = milliseconds;
318
+ state = "armed";
319
+ let scheduling = true;
320
+ let action;
321
+ try {
322
+ action = schedule(() => {
323
+ if (!active || ticket !== currentTicket)
324
+ return;
325
+ if (scheduling) {
326
+ fail("timer_provider_invalid");
327
+ return;
328
+ }
329
+ ticket = undefined;
330
+ cancel = undefined;
331
+ pending = null;
332
+ step();
333
+ }, milliseconds);
334
+ }
335
+ catch {
336
+ cleanup = true;
337
+ fail("timer_unavailable");
338
+ }
339
+ finally {
340
+ scheduling = false;
341
+ }
342
+ if (typeof action !== "function") {
343
+ cleanup = true;
344
+ if (active)
345
+ fail("timer_provider_invalid");
346
+ return;
347
+ }
348
+ if (!active || ticket !== currentTicket)
349
+ cancelOnce(action);
350
+ else
351
+ cancel = action;
352
+ };
353
+ const step = () => {
354
+ if (!active || maximum === null || deadlineAt === null)
355
+ return;
356
+ const before = checkBinding();
357
+ if (!active)
358
+ return;
359
+ if (before) {
360
+ fail(before);
361
+ return;
362
+ }
363
+ let timing;
364
+ try {
365
+ timing = timingSnapshot(observe(), maximum);
366
+ }
367
+ catch {
368
+ fail("clock_invalid");
369
+ return;
370
+ }
371
+ if (!active)
372
+ return;
373
+ if (!timing) {
374
+ fail("clock_invalid");
375
+ return;
376
+ }
377
+ if (timing.deadline_state !== "due" && timing.state === "unproven") {
378
+ fail("clock_unproven");
379
+ return;
380
+ }
381
+ const after = checkBinding();
382
+ if (!active)
383
+ return;
384
+ if (after) {
385
+ fail(after);
386
+ return;
387
+ }
388
+ if (timing.deadline_state === "due") {
389
+ due = true;
390
+ active = false;
391
+ state = "due";
392
+ const event = Object.freeze({ kind: "run_deadline_due", identity: bound, deadline_at: deadlineAt, timing,
393
+ scope_closure: "not_asserted", stop_requested: false });
394
+ try {
395
+ notify(event);
396
+ }
397
+ catch {
398
+ fail("notification_failed");
399
+ }
400
+ }
401
+ else if (timing.deadline_wake_ms !== null)
402
+ arm(timing.deadline_wake_ms);
403
+ };
404
+ return Object.freeze({ snapshot, start: () => { if (!started) {
405
+ started = true;
406
+ if (maximum !== null && state === "idle") {
407
+ active = true;
408
+ step();
409
+ }
410
+ } return snapshot(); },
411
+ stop: () => { active = false; state = "stopped"; disarm(); return snapshot(); } });
412
+ }
@@ -1,20 +1,25 @@
1
1
  /**
2
2
  * Ambient run observability runtime.
3
3
  * Zones: run watcher lifecycle, terminal reconciliation, status animation, shutdown teardown
4
- * Owns event-driven run UI coordination without owning actor execution semantics.
4
+ * Owns event-driven run UI/delivery coordination and callback-generation fences; excludes actor execution semantics and public stream activation.
5
5
  */
6
6
  import * as AsyncRuns from "./async-runs.ts";
7
7
  import * as Observability from "./observability.ts";
8
8
  import * as Pi from "./pi.ts";
9
+ import * as RunDelivery from "./run-delivery.ts";
9
10
  export interface RunUiRuntime {
10
11
  close(): void;
12
+ isCurrentSessionContext(ctx: Pi.ExtensionContext): boolean;
11
13
  flushCompletionBatch(ctx: Pi.ExtensionContext): boolean;
12
14
  onTurnEnd(event: Pi.TurnEndEvent, ctx: Pi.ExtensionContext): Pi.TurnEndEventResult | undefined;
13
15
  projectContext(messages: unknown[], ctx: Pi.ExtensionContext): unknown[];
14
16
  shutdown(eventReason: string, ownerId: string | undefined, ctx?: Pi.ExtensionContext): void;
15
- start(ctx: Pi.ExtensionContext, ownerId: string): void;
17
+ start(ctx: Pi.ExtensionContext, ownerId: string, event?: Pi.SessionStartEvent): void;
16
18
  }
17
19
  export interface RunUiRuntimeDeps {
20
+ /** Trusted kernel opt-in for verified fresh creation; never actor data, continuity proof or bootstrap. */
21
+ completionStreamSessionAdmission?: (ctx: Pi.ExtensionContext, event: Pi.SessionStartEvent) => boolean;
22
+ captureCompletionBatch?: typeof RunDelivery.admitRunCompletionBatch;
18
23
  animationIntervalMs?: number;
19
24
  createRunStateWatcher?: typeof Observability.createRunStateWatcher;
20
25
  createRunTerminalReconciliationLoop?: typeof Observability.createRunTerminalReconciliationLoop;
@@ -26,4 +31,6 @@ export interface RunUiRuntimeDeps {
26
31
  pi: Pi.ExtensionAPI;
27
32
  teardownRunsOwnedByParent?: typeof AsyncRuns.teardownRunsOwnedByParent;
28
33
  }
34
+ /** Transcript-only view of the exact delivered content; never re-read a Run or infer body labels. */
35
+ export declare function registerRunCompletionRenderer(pi: Pi.ExtensionAPI): void;
29
36
  export declare function createRunUiRuntime(deps: RunUiRuntimeDeps): RunUiRuntime;