@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
@@ -5,36 +5,57 @@
5
5
  */
6
6
  import * as fs from "node:fs";
7
7
  import * as path from "node:path";
8
+ import { observeExecutionFileReference } from "./execution-files.js";
8
9
  import * as SessionEvidence from "./session-evidence.js";
10
+ import * as Limits from "./limits.js";
9
11
  import { readJsonFileResilient } from "./state-readers.js";
10
- function ownedSessionPath(stateDir, sessionFile) {
11
- if (path.isAbsolute(sessionFile))
12
- return undefined;
13
- const sessionsRoot = path.resolve(stateDir, "sessions");
14
- const resolved = path.resolve(stateDir, sessionFile);
15
- if (!resolved.startsWith(`${sessionsRoot}${path.sep}`))
16
- return undefined;
17
- try {
18
- const canonicalRoot = fs.realpathSync(sessionsRoot);
19
- const canonicalFile = fs.realpathSync(resolved);
20
- return canonicalFile.startsWith(`${canonicalRoot}${path.sep}`)
21
- ? canonicalFile
22
- : undefined;
23
- }
24
- catch {
25
- return undefined;
26
- }
27
- }
12
+ export const EXECUTION_CHRONOLOGY = Symbol("execution-session-chronology");
28
13
  export function readExecutionTurns(stateDir) {
29
- const execution = readJsonFileResilient(path.join(stateDir, "execution.json"), {}).value;
14
+ const read = readJsonFileResilient(path.join(stateDir, "execution.json"), {});
15
+ const execution = read.value;
16
+ const basis = "recorded_execution_metadata";
17
+ let reason = read.diagnostics.length ? "source_unavailable" : undefined;
18
+ const metadata = [];
19
+ let metadataBytes = Buffer.byteLength(JSON.stringify({ state: "available", basis, entries: [] }));
20
+ const refuse = (next) => { reason ??= next; metadata.length = 0; };
21
+ const collect = (commandId, sessionFile, frame) => {
22
+ if (reason)
23
+ return;
24
+ if (!frame || frame.state !== "available") {
25
+ refuse(frame?.state === "unavailable" ? frame.reason : "source_unavailable");
26
+ return;
27
+ }
28
+ if (SessionEvidence.redactSessionEvidenceValue(commandId) !== commandId || SessionEvidence.redactSessionEvidenceValue(sessionFile) !== sessionFile) {
29
+ refuse("namespace_unavailable");
30
+ return;
31
+ }
32
+ for (const item of frame.entries) {
33
+ const entry = Object.freeze({ ...item, commandId, sessionFile, sessionOrdinal: item.ordinal, ordinal: metadata.length + 1 });
34
+ metadataBytes += Buffer.byteLength(JSON.stringify(entry)) + Number(metadata.length > 0);
35
+ if (metadataBytes > Limits.SESSION_EVIDENCE_MAX_BYTES) {
36
+ refuse("metadata_too_large");
37
+ return;
38
+ }
39
+ metadata.push(entry);
40
+ }
41
+ };
30
42
  const commands = Array.isArray(execution.commands)
31
43
  ? execution.commands
32
44
  : [];
45
+ if ((execution.commands !== undefined && !Array.isArray(execution.commands)) || commands.some((command) => !command || typeof command !== "object" || Array.isArray(command) ||
46
+ (command.session_files !== undefined && (!Array.isArray(command.session_files) || command.session_files.some((file) => typeof file !== "string")))))
47
+ refuse("source_unavailable");
33
48
  const recordedFiles = new Set(commands.flatMap((command) => (Array.isArray(command.session_files) ? command.session_files : []).filter((file) => typeof file === "string")));
34
49
  let discoveredCommands = [];
35
50
  try {
36
- const sessionsDir = path.join(stateDir, "sessions");
37
- discoveredCommands = fs
51
+ const state = path.resolve(stateDir);
52
+ const sessionsDir = path.join(state, "sessions");
53
+ const root = fs.lstatSync(state);
54
+ const rootObserved = root.isDirectory() && !root.isSymbolicLink();
55
+ const namespace = fs.lstatSync(sessionsDir, { throwIfNoEntry: false });
56
+ if (!rootObserved || (namespace && (!namespace.isDirectory() || namespace.isSymbolicLink())))
57
+ refuse("source_unavailable");
58
+ discoveredCommands = rootObserved && namespace?.isDirectory() && !namespace.isSymbolicLink() ? fs
38
59
  .readdirSync(sessionsDir, { withFileTypes: true })
39
60
  .filter((entry) => entry.isDirectory())
40
61
  .flatMap((entry) => {
@@ -48,19 +69,30 @@ export function readExecutionTurns(stateDir) {
48
69
  return files.length > 0
49
70
  ? [{ id: entry.name, session_files: files, stage: "subagent" }]
50
71
  : [];
51
- });
72
+ }) : [];
52
73
  }
53
74
  catch {
75
+ refuse("source_unavailable");
54
76
  discoveredCommands = [];
55
77
  }
56
- return [...commands, ...discoveredCommands]
78
+ const turns = [...commands, ...discoveredCommands]
57
79
  .flatMap((command) => (Array.isArray(command.session_files) ? command.session_files : [])
58
80
  .filter((file) => typeof file === "string")
59
81
  .flatMap((file) => {
60
- const sessionPath = ownedSessionPath(stateDir, file);
61
- if (!sessionPath)
82
+ const reference = observeExecutionFileReference(stateDir, { kind: "session", path: file });
83
+ if (reference.availability !== "available") {
84
+ refuse("source_unavailable");
85
+ return [];
86
+ }
87
+ const session = SessionEvidence.readSessionEvidence(reference.local_path);
88
+ if (!reference.unchanged()) {
89
+ refuse("source_changed");
62
90
  return [];
63
- const session = SessionEvidence.readSessionEvidence(sessionPath);
91
+ }
92
+ if (typeof command.id !== "string" || !command.id)
93
+ refuse("namespace_unavailable");
94
+ else
95
+ collect(command.id, file, session[SessionEvidence.SESSION_EVIDENCE_CHRONOLOGY]);
64
96
  return session.turns.map((turn) => ({
65
97
  ...turn,
66
98
  commandId: String(command.id ?? "unknown"),
@@ -82,4 +114,8 @@ export function readExecutionTurns(stateDir) {
82
114
  }));
83
115
  }))
84
116
  .map((turn, index) => ({ ...turn, index: index + 1 }));
117
+ Object.defineProperty(turns, EXECUTION_CHRONOLOGY, { value: Object.freeze(reason
118
+ ? { state: "unavailable", basis, reason, entries: Object.freeze([]) }
119
+ : { state: "available", basis, entries: Object.freeze(metadata) }) });
120
+ return turns;
85
121
  }
@@ -96,4 +96,7 @@ export interface RegisteredToolExecutionResult {
96
96
  }
97
97
  export type RegisteredToolExec = (command: string, args: string[], options?: ToolExecOptions) => Promise<ToolExecResult>;
98
98
  export declare function applyOutputAcceptancePolicy(result: ToolExecResult, output: string | undefined): Promise<ToolExecResult>;
99
- export declare function executeRegisteredTool(cfg: RegisteredTool, params: Record<string, unknown>, exec: RegisteredToolExec, cwd: string, signal?: AbortSignal): Promise<RegisteredToolExecutionResult>;
99
+ export declare function executeRegisteredTool(cfg: RegisteredTool, params: Record<string, unknown>, exec: RegisteredToolExec, cwd: string, signal?: AbortSignal, kernel?: {
100
+ readonly onPrimaryCommandSelected?: (result: Readonly<ToolExecResult>) => void | Promise<void>;
101
+ readonly onFinalResponseSelected?: (text: string, upstreamTruncated: boolean) => void | Promise<void>;
102
+ }): Promise<RegisteredToolExecutionResult>;
@@ -674,7 +674,7 @@ function getCaptureDetails(result) {
674
674
  ...(result.stderrTruncated ? { stderrTruncated: true } : {}),
675
675
  };
676
676
  }
677
- export async function executeRegisteredTool(cfg, params, exec, cwd, signal) {
677
+ export async function executeRegisteredTool(cfg, params, exec, cwd, signal, kernel) {
678
678
  const executed = await executeTemplateSteps(cfg, Schema.normalizeRuntimeValues(params, cfg.argTypes), exec, cwd, signal);
679
679
  const command = formatCommandDetail(executed.commands);
680
680
  const result = executed.result;
@@ -700,6 +700,11 @@ export async function executeRegisteredTool(cfg, params, exec, cwd, signal) {
700
700
  },
701
701
  });
702
702
  }
703
+ // Only the plain successful leaf is admitted initially; compositions/acceptance policies are separate contracts.
704
+ if (typeof cfg.template === "string" && executed.commands.length === 1 && !executed.failures.length) {
705
+ await kernel?.onPrimaryCommandSelected?.(result);
706
+ }
707
+ await kernel?.onFinalResponseSelected?.(result.stdout, result.stdoutTruncated === true || executed.branches.some(branch => branch.status !== "done" && (branch.stderrTruncated === true || branch.stderrBytes > Buffer.byteLength(branch.stderr ?? ""))));
703
708
  const formatted = formatOutput(cfg.name, "stdout", result.stdout);
704
709
  const templateWarnings = CommandTemplates.getCommandTemplateWarnings(createTemplateConfig(cfg));
705
710
  return {
@@ -5,6 +5,10 @@
5
5
  */
6
6
  import * as Pi from "./pi.ts";
7
7
  import * as RecipesReferences from "./recipes-references.ts";
8
+ import * as RunUiRuntime from "./run-ui-runtime.ts";
9
+ import { type RunSupervisionOwnerSnapshotReading } from "./runs-supervision.ts";
10
+ import type { RunSupervisionControllerPorts } from "./run-supervision.ts";
11
+ import type { AsyncRunStartOptions } from "./async-runs.ts";
8
12
  export interface ActorExtensionRuntime {
9
13
  beforeAgentStart(systemPrompt: string, skills: RecipesReferences.ActiveSkillRecipeSource[], ctx: Pi.ExtensionContext): {
10
14
  systemPrompt: string;
@@ -17,7 +21,10 @@ export interface ActorExtensionRuntime {
17
21
  onTurnEnd(event: Pi.TurnEndEvent, ctx: Pi.ExtensionContext): Pi.TurnEndEventResult | undefined;
18
22
  onContext(messages: unknown[], ctx: Pi.ExtensionContext): unknown[];
19
23
  onSessionShutdown(reason: string, ctx: Pi.ExtensionContext): void;
20
- onSessionStart(ctx: Pi.ExtensionContext): Promise<void>;
24
+ onSessionStart(ctx: Pi.ExtensionContext, event?: Pi.SessionStartEvent): Promise<void>;
21
25
  registerCoreTools(): void;
26
+ /** Private kernel observation only; no public tool route or reconstructed origin. */
27
+ observeRunSnapshot(expected: unknown, capturedAt: unknown, stateDir?: string): Readonly<RunSupervisionOwnerSnapshotReading>;
28
+ getRunAdmissionObserver(ctx: Pi.ExtensionContext): AsyncRunStartOptions["onSupervisionClockCaptured"];
22
29
  }
23
- export declare function createActorExtensionRuntime(pi: Pi.ExtensionAPI): ActorExtensionRuntime;
30
+ export declare function createActorExtensionRuntime(pi: Pi.ExtensionAPI, supervisionPorts?: Omit<RunSupervisionControllerPorts, "readCurrent">, completionStreamSessionAdmission?: RunUiRuntime.RunUiRuntimeDeps["completionStreamSessionAdmission"], captureCompletionBatch?: RunUiRuntime.RunUiRuntimeDeps["captureCompletionBatch"]): ActorExtensionRuntime;
@@ -3,6 +3,7 @@
3
3
  * Zones: extension session lifecycle, host tool adaptation, runtime service composition
4
4
  * Owns low-level Pi lifecycle effects and tool wrapping without owning event registration.
5
5
  */
6
+ import { join } from "node:path";
6
7
  import * as AutomaticReviewRuntime from "./automatic-review-runtime.js";
7
8
  import * as CommandTemplates from "./command-templates.js";
8
9
  import * as Paths from "./paths.js";
@@ -13,14 +14,38 @@ import * as RecipesReferences from "./recipes-references.js";
13
14
  import * as RunUiRuntime from "./run-ui-runtime.js";
14
15
  import * as Runtime from "./runtime.js";
15
16
  import * as Temp from "./temp.js";
17
+ import * as RunRetention from "./runs-retention.js";
16
18
  import * as Tools from "./tools.js";
17
19
  import * as ToolsResponse from "./tools-response.js";
18
- export function createActorExtensionRuntime(pi) {
20
+ import { createRunSupervisionOwner, } from "./runs-supervision.js";
21
+ export function createActorExtensionRuntime(pi, supervisionPorts, completionStreamSessionAdmission, captureCompletionBatch) {
19
22
  let activeRunContext;
20
23
  let activeRunOwnerId;
21
- const runOwnerIdsByContext = new WeakMap();
24
+ let sessionStartTicket;
25
+ let parentSession;
26
+ const parentSessionsByContext = new WeakMap();
27
+ const seenParentManagers = new WeakSet();
22
28
  const recipeResolutionContextsBySession = new Map();
23
29
  const getRunOwnerId = Pi.getSessionId;
30
+ let supervision;
31
+ const closeSupervision = () => {
32
+ const scope = supervision;
33
+ supervision = undefined;
34
+ scope?.owner.close();
35
+ };
36
+ const getRunAdmissionObserver = (ctx) => {
37
+ if (!supervisionPorts)
38
+ return undefined;
39
+ const scope = supervision;
40
+ const sessionManager = ctx.sessionManager;
41
+ const ownerId = sessionManager.getSessionId();
42
+ return capture => {
43
+ if (!scope || supervision !== scope || !scope.ready || scope.sessionManager !== sessionManager || scope.ownerId !== ownerId || capture.identity.ownerId !== ownerId) {
44
+ throw new Error("Run supervision coordinator admission is unavailable or changed.");
45
+ }
46
+ scope.owner.onSupervisionClockCaptured(capture);
47
+ };
48
+ };
24
49
  const getRecipeResolutionContext = (ctx) => {
25
50
  const sessionId = getRunOwnerId(ctx);
26
51
  const resolutionContext = recipeResolutionContextsBySession.get(sessionId);
@@ -33,6 +58,7 @@ export function createActorExtensionRuntime(pi) {
33
58
  getActiveContext: () => activeRunContext,
34
59
  getRunOwnerId,
35
60
  getThinkingLevel: () => pi.getThinkingLevel(),
61
+ getRunAdmissionObserver,
36
62
  });
37
63
  let recipeReload;
38
64
  let runUiRuntime;
@@ -40,13 +66,17 @@ export function createActorExtensionRuntime(pi) {
40
66
  const ownerId = activeRunOwnerId;
41
67
  activeRunContext = undefined;
42
68
  activeRunOwnerId = undefined;
69
+ sessionStartTicket = undefined;
43
70
  runUiRuntime?.close();
44
71
  automaticReview.close();
45
72
  recipeReload?.close();
46
73
  if (ownerId)
47
74
  recipeResolutionContextsBySession.delete(ownerId);
48
75
  };
76
+ RunUiRuntime.registerRunCompletionRenderer(pi);
49
77
  runUiRuntime = RunUiRuntime.createRunUiRuntime({
78
+ completionStreamSessionAdmission,
79
+ captureCompletionBatch,
50
80
  getActiveContext: () => activeRunContext,
51
81
  onCallbackError: closeActiveSessionRuntimes,
52
82
  onRunEvent: automaticReview.schedule,
@@ -67,6 +97,7 @@ export function createActorExtensionRuntime(pi) {
67
97
  ...ctx,
68
98
  recipeResolutionContext: getRecipeResolutionContext(ctx),
69
99
  getThinkingLevel: () => pi.getThinkingLevel(),
100
+ onSupervisionClockCaptured: getRunAdmissionObserver(ctx),
70
101
  };
71
102
  }
72
103
  try {
@@ -112,7 +143,13 @@ export function createActorExtensionRuntime(pi) {
112
143
  return skillPaths.length > 0 ? { skillPaths } : undefined;
113
144
  },
114
145
  getRunOwnerId,
146
+ getRunAdmissionObserver,
147
+ observeRunSnapshot(expected, capturedAt, stateDir) {
148
+ return supervision?.owner.observeSnapshot(expected, capturedAt, stateDir) ?? Object.freeze({ state: "unavailable", reason: "origin_not_retained" });
149
+ },
115
150
  onAgentSettled(ctx) {
151
+ if ((completionStreamSessionAdmission || captureCompletionBatch) && !runUiRuntime.isCurrentSessionContext(ctx))
152
+ return;
116
153
  if (!activeRunOwnerId || getRunOwnerId(ctx) !== activeRunOwnerId)
117
154
  return;
118
155
  if (!runUiRuntime.flushCompletionBatch(ctx))
@@ -125,29 +162,70 @@ export function createActorExtensionRuntime(pi) {
125
162
  return runUiRuntime.projectContext(messages, ctx);
126
163
  },
127
164
  onSessionShutdown(reason, ctx) {
128
- const ownerId = runOwnerIdsByContext.get(ctx);
129
- runOwnerIdsByContext.delete(ctx);
130
- if (activeRunContext === ctx)
131
- closeActiveSessionRuntimes();
132
- if (ownerId)
133
- recipeResolutionContextsBySession.delete(ownerId);
134
- runUiRuntime.shutdown(reason, ownerId, ctx);
165
+ const scope = parentSession;
166
+ if (!scope?.shutdownAdmitted)
167
+ return;
168
+ const known = parentSessionsByContext.get(ctx);
169
+ if (known && known !== scope)
170
+ return;
171
+ if (!known) {
172
+ try {
173
+ if (ctx.sessionManager !== scope.sessionManager || scope.sessionManager.getSessionId() !== scope.ownerId)
174
+ return;
175
+ }
176
+ catch {
177
+ return; /* Unknown invalidated wrappers cannot identify this lifetime. */
178
+ }
179
+ }
180
+ if (parentSession !== scope)
181
+ return;
182
+ // Consume before cleanup/teardown: stale or reentrant callbacks cannot stop a replacement.
183
+ scope.shutdownAdmitted = false;
184
+ parentSessionsByContext.set(ctx, scope);
185
+ closeSupervision();
186
+ if (parentSession !== scope)
187
+ return;
188
+ closeActiveSessionRuntimes();
189
+ if (parentSession !== scope)
190
+ return;
191
+ recipeResolutionContextsBySession.delete(scope.ownerId);
192
+ runUiRuntime.shutdown(reason, scope.ownerId, ctx);
135
193
  },
136
- async onSessionStart(ctx) {
137
- const sessionId = getRunOwnerId(ctx);
194
+ async onSessionStart(ctx, event) {
195
+ const ticket = {};
196
+ sessionStartTicket = ticket;
197
+ parentSession = undefined;
198
+ const sessionManager = ctx.sessionManager;
199
+ const sessionId = sessionManager.getSessionId();
200
+ if (sessionStartTicket !== ticket)
201
+ return;
202
+ const scopeBinding = { ownerId: sessionId, sessionManager,
203
+ shutdownAdmitted: !seenParentManagers.has(sessionManager) && !parentSessionsByContext.has(ctx) };
204
+ seenParentManagers.add(sessionManager);
205
+ if (!parentSessionsByContext.has(ctx))
206
+ parentSessionsByContext.set(ctx, scopeBinding);
207
+ parentSession = scopeBinding;
208
+ closeSupervision();
138
209
  recipeResolutionContextsBySession.set(sessionId, RecipeResolution.createEmptyRecipeResolutionContext(sessionId, ctx.cwd));
139
210
  ctx.ui.setWidget("zz-pi-actors-comms", undefined);
140
211
  activeRunContext = ctx;
141
212
  activeRunOwnerId = sessionId;
142
- runOwnerIdsByContext.set(ctx, sessionId);
143
213
  runUiRuntime.close();
144
214
  automaticReview.close();
145
215
  recipeReload.close();
216
+ const scope = supervisionPorts ? {
217
+ context: ctx, ownerId: sessionId, owner: createRunSupervisionOwner(supervisionPorts),
218
+ ready: false, sessionManager,
219
+ } : undefined;
220
+ supervision = scope;
146
221
  await Temp.prepareExtensionTempDir(Paths.EXTENSION_RUNTIME_PATHS.tempDir);
147
- if (activeRunContext !== ctx || activeRunOwnerId !== sessionId)
222
+ await RunRetention.cleanupStaleRunEntries(join(Paths.EXTENSION_RUNTIME_PATHS.tempDir, "runs"));
223
+ if (sessionStartTicket !== ticket || activeRunContext !== ctx || activeRunOwnerId !== sessionId || supervision !== scope)
148
224
  return;
225
+ if (scope)
226
+ scope.ready = true;
149
227
  automaticReview.start(ctx);
150
- runUiRuntime.start(ctx, sessionId);
228
+ runUiRuntime.start(ctx, sessionId, event);
151
229
  recipeReload.watch(ctx);
152
230
  },
153
231
  registerCoreTools() {
@@ -266,11 +266,24 @@ export function acquireFileMutationLock(path, options = {}) {
266
266
  }
267
267
  export function withFileMutationLock(path, mutate, options = {}) {
268
268
  const release = acquireFileMutationLock(path, options);
269
+ let mutationFailed = false, mutationFailure;
269
270
  try {
270
271
  return mutate();
271
272
  }
273
+ catch (error) {
274
+ mutationFailed = true;
275
+ mutationFailure = error;
276
+ throw error;
277
+ }
272
278
  finally {
273
- release();
279
+ try {
280
+ release();
281
+ }
282
+ catch (releaseError) {
283
+ if (mutationFailed)
284
+ throw new AggregateError([mutationFailure, releaseError], "File mutation callback and lock release failed; effects may already exist.", { cause: mutationFailure });
285
+ throw releaseError;
286
+ }
274
287
  }
275
288
  }
276
289
  function replaceFileWithRetry(source, target) {
@@ -280,7 +293,13 @@ function replaceFileWithRetry(source, target) {
280
293
  return;
281
294
  }
282
295
  catch (error) {
283
- const code = error.code;
296
+ let code;
297
+ try {
298
+ code = error?.code;
299
+ }
300
+ catch (observationError) {
301
+ throw new AggregateError([error, observationError], "File replacement failed and retry-code inspection also failed; effects may already exist.", { cause: error });
302
+ }
284
303
  if ((code !== "EPERM" && code !== "EBUSY") || attempt >= 19)
285
304
  throw error;
286
305
  Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 50);
@@ -4,7 +4,7 @@
4
4
  * Owns host-facing Inspector launch wiring without owning Inspector state or actions.
5
5
  */
6
6
  import * as AsyncRuns from "./async-runs.js";
7
- import * as InspectorActions from "./inspector-actions.js";
7
+ import * as Inspector from "./inspector.js";
8
8
  import * as InspectorOverlay from "./inspector-overlay.js";
9
9
  import * as Paths from "./paths.js";
10
10
  export function registerActorInspectorCommand(pi, getRunOwnerId) {
@@ -14,7 +14,7 @@ export function registerActorInspectorCommand(pi, getRunOwnerId) {
14
14
  ctx.ui.setWidget("zz-pi-actors-comms", undefined);
15
15
  await ctx.ui.custom((tui, theme, _keybindings, done) => new InspectorOverlay.ActorInspectorOverlay({
16
16
  done,
17
- killRun: (run, runInstanceId) => InspectorActions.killOwnedRunFromInspector(getRunOwnerId(ctx), run, Paths.EXTENSION_RUNTIME_PATHS.runStateRoot, runInstanceId, {
17
+ killRun: (run, runInstanceId) => Inspector.killOwnedRunFromInspector(getRunOwnerId(ctx), run, Paths.EXTENSION_RUNTIME_PATHS.runStateRoot, runInstanceId, {
18
18
  getRunStatus: AsyncRuns.getRunStatus,
19
19
  killRun: AsyncRuns.killRun,
20
20
  }),
@@ -3,7 +3,7 @@
3
3
  * Zones: owned actor selection, Recipe/Trace/Control tabs, safe Run Kill confirmation
4
4
  * Owns manual kernel navigation; evidence parsing and lifecycle mutation stay in ports.
5
5
  */
6
- import type { Theme } from "@earendil-works/pi-coding-agent";
6
+ import { type Theme } from "@earendil-works/pi-coding-agent";
7
7
  import { type TUI } from "@earendil-works/pi-tui";
8
8
  import * as ActorInspector from "./inspector.ts";
9
9
  import * as TraceProjection from "./trace-projection.ts";
@@ -37,12 +37,20 @@ export declare class ActorInspectorOverlay {
37
37
  private documentScroll;
38
38
  private detailScroll;
39
39
  private feedback?;
40
+ private feedbackFromAction;
41
+ private feedbackScroll;
42
+ private feedbackPageRows;
43
+ private inspectorFrame?;
40
44
  private focus;
41
45
  private killConfirmation?;
42
46
  private killDialogChoice;
47
+ private killDialogScroll;
48
+ private killDialogPageRows;
43
49
  private rowIndex;
44
50
  private runCache?;
45
51
  private selectedTraceId?;
52
+ private controlCache?;
53
+ private controlSelection?;
46
54
  private runIndex;
47
55
  private selectorIndex;
48
56
  private selectorMode?;
@@ -55,6 +63,7 @@ export declare class ActorInspectorOverlay {
55
63
  invalidate(): void;
56
64
  handleInput(data: string): void;
57
65
  render(width: number): string[];
66
+ private renderInspector;
58
67
  private get tab();
59
68
  private runs;
60
69
  private contentViewportRows;
@@ -71,25 +80,34 @@ export declare class ActorInspectorOverlay {
71
80
  private renderRunControl;
72
81
  private renderTabs;
73
82
  private renderContent;
83
+ private modalUnderlay;
84
+ private compositePopup;
85
+ private popupLayout;
86
+ private renderFeedbackPopup;
87
+ private closureWarning;
74
88
  private renderSelector;
75
89
  private runSelectorOptions;
76
90
  private renderMenuBox;
91
+ private traceTableLine;
77
92
  private renderTraceList;
78
93
  private renderTraceDetail;
94
+ private agentDetailSegments;
95
+ private metadataText;
96
+ private agentDetailProjection;
79
97
  private controlDocument;
98
+ private controlObservation;
99
+ private selectedControl;
100
+ private openControlList;
101
+ private handleControlInput;
102
+ private renderControlContent;
80
103
  private allTraceItems;
81
104
  private traceSources;
82
105
  private traceSource;
83
106
  private traceItems;
84
107
  private readRunMeta;
85
108
  private documentProjection;
86
- private inlineDocumentValue;
87
- private labeledDocumentLines;
88
- private labeledScalarLines;
89
- private document;
90
109
  private wrapDocument;
91
- private styleDocumentLine;
92
- private visiblePrefix;
110
+ private keyHints;
93
111
  private renderKeyHints;
94
112
  private statusColor;
95
113
  private footerBorder;