pi-daddy 0.22.0 → 0.24.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 (385) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +12 -6
  3. package/contracts/daily-view/v1/README.md +114 -0
  4. package/contracts/daily-view/v1/fixtures/view.json +525 -0
  5. package/contracts/daily-view/v1/fixtures/view.txt +75 -0
  6. package/contracts/daily-view/v1/fixtures/work.jsonl +17 -0
  7. package/contracts/daily-view/v1/p03/README.md +26 -0
  8. package/contracts/daily-view/v1/p03/fixtures/retained-executions.json +241 -0
  9. package/contracts/daily-view/v1/p03/projection.schema.json +194 -0
  10. package/contracts/daily-view/v1/p03/provenance.json +21 -0
  11. package/contracts/dashboard-host/v1/README.md +176 -0
  12. package/contracts/debrief/v1/README.md +146 -0
  13. package/contracts/debrief/v1/intervention/README.md +32 -0
  14. package/contracts/debrief/v1/intervention/fixtures/artifact-3ee11136beb864f518252e5024dae9197421fbf97b6e981d3243c782b5c44bd0.txt +1 -0
  15. package/contracts/debrief/v1/intervention/fixtures/artifact-58905d872dd3c54a9705f67b05fa82edbad7af6476ae8993faf1a7b9fadfb905.txt +1 -0
  16. package/contracts/debrief/v1/intervention/fixtures/assessment.json +29 -0
  17. package/contracts/debrief/v1/intervention/fixtures/blind-view.json +20 -0
  18. package/contracts/debrief/v1/intervention/fixtures/choice.json +7 -0
  19. package/contracts/debrief/v1/intervention/fixtures/manifest.json +57 -0
  20. package/contracts/debrief/v1/intervention/fixtures/reveal.json +39 -0
  21. package/contracts/debrief/v1/provenance.json +89 -0
  22. package/contracts/debrief/v1/work-capture/README.md +38 -0
  23. package/contracts/debrief/v1/work-capture/fixtures/batch.json +17 -0
  24. package/contracts/debrief/v1/work-capture/fixtures/cases.json +184 -0
  25. package/contracts/debrief/v1/work-capture/fixtures/review.json +184 -0
  26. package/contracts/debrief/v1/work-capture/review-request.schema.json +41 -0
  27. package/contracts/debrief/v1/work-capture/work-case.schema.json +190 -0
  28. package/contracts/debrief/v2/README.md +71 -0
  29. package/contracts/debrief/v2/input-pin.json +66 -0
  30. package/contracts/debrief/v2/intervention-upstream.md +40 -0
  31. package/contracts/debrief/v2/work-signals-upstream.md +22 -0
  32. package/contracts/dispatch-control/v1/README.md +109 -0
  33. package/contracts/dispatch-control/v1/request.schema.json +19 -0
  34. package/contracts/effect-profile/v1/README.md +124 -0
  35. package/contracts/execution-retention/v1/README.md +109 -0
  36. package/contracts/execution-retention/v2/README.md +148 -0
  37. package/contracts/execution-retention/v2/fixtures/interrupted-native-bytes.json +91 -0
  38. package/contracts/execution-retention/v2/fixtures/missing-native-session.json +91 -0
  39. package/contracts/execution-retention/v2/fixtures/native-file-unknown-branch.json +91 -0
  40. package/contracts/execution-retention/v2/fixtures/native-id-without-bytes.json +91 -0
  41. package/contracts/execution-retention/v2/fixtures/native-live-branch.json +90 -0
  42. package/contracts/execution-retention/v2/fixtures/replaced-native-session.json +92 -0
  43. package/contracts/execution-retention/v2/fixtures/result-82c620cdfeb8ca6b858cf653d7f5e2eedca5315d6244216d60e8b36f03223d6a.bin +1 -0
  44. package/contracts/execution-retention/v2/fixtures/session-2ec1f134bc739984434f7fca689e1c3d1c39fce2dcadae709e9b6faedfcc4ac7.bin +3 -0
  45. package/contracts/execution-retention/v2/fixtures/session-9bdb4bd16a901da31580acf056bda525225259e15ec409e0410480109011772f.bin +3 -0
  46. package/contracts/execution-retention/v2/manifest.schema.json +858 -0
  47. package/contracts/experiment/v1/README.md +164 -0
  48. package/contracts/factory-order/v1/README.md +151 -0
  49. package/contracts/factory-order/v1/adoption-pin.json +8 -0
  50. package/contracts/intent-control/v1/README.md +135 -0
  51. package/contracts/intent-control/v1/request.schema.json +1096 -0
  52. package/contracts/intent-control/v2/README.md +34 -0
  53. package/contracts/intent-control/v2/request.schema.json +1070 -0
  54. package/contracts/ledger/v4/README.md +241 -0
  55. package/contracts/ledger/v4/fixtures/layout-options.json +428 -0
  56. package/contracts/ledger/v4/fixtures/work-acceptance.json +57 -0
  57. package/contracts/ledger/v4/fixtures/work-occurrence.json +44 -0
  58. package/contracts/ledger/v4/fixtures/work-revision.json +26 -0
  59. package/contracts/ledger/v4/fixtures/work-snapshot.json +73 -0
  60. package/contracts/ledger/v4/ledger-event.schema.json +162 -0
  61. package/contracts/ordinary-control/v1/README.md +59 -0
  62. package/contracts/producer-ipc/v1/README.md +137 -0
  63. package/dist/check-runner.d.ts +5 -0
  64. package/dist/check-runner.d.ts.map +1 -1
  65. package/dist/check-runner.js +16 -2
  66. package/dist/check-runner.js.map +1 -1
  67. package/dist/cli.d.ts +3 -1
  68. package/dist/cli.d.ts.map +1 -1
  69. package/dist/cli.js +49 -3
  70. package/dist/cli.js.map +1 -1
  71. package/dist/control-journal.d.ts +20 -0
  72. package/dist/control-journal.d.ts.map +1 -0
  73. package/dist/control-journal.js +73 -0
  74. package/dist/control-journal.js.map +1 -0
  75. package/dist/daily-dashboard-host.d.ts +99 -0
  76. package/dist/daily-dashboard-host.d.ts.map +1 -0
  77. package/dist/daily-dashboard-host.js +71 -0
  78. package/dist/daily-dashboard-host.js.map +1 -0
  79. package/dist/daily-view-input.d.ts +44 -0
  80. package/dist/daily-view-input.d.ts.map +1 -0
  81. package/dist/daily-view-input.js +68 -0
  82. package/dist/daily-view-input.js.map +1 -0
  83. package/dist/daily-view-render.d.ts +4 -0
  84. package/dist/daily-view-render.d.ts.map +1 -0
  85. package/dist/daily-view-render.js +41 -0
  86. package/dist/daily-view-render.js.map +1 -0
  87. package/dist/daily-view.d.ts +74 -0
  88. package/dist/daily-view.d.ts.map +1 -0
  89. package/dist/daily-view.js +170 -0
  90. package/dist/daily-view.js.map +1 -0
  91. package/dist/dashboard-cli.d.ts +26 -1
  92. package/dist/dashboard-cli.d.ts.map +1 -1
  93. package/dist/dashboard-cli.js +128 -3
  94. package/dist/dashboard-cli.js.map +1 -1
  95. package/dist/dashboard-harness.d.ts +22 -0
  96. package/dist/dashboard-harness.d.ts.map +1 -0
  97. package/dist/dashboard-harness.js +89 -0
  98. package/dist/dashboard-harness.js.map +1 -0
  99. package/dist/dashboard-herdr.d.ts.map +1 -1
  100. package/dist/dashboard-herdr.js +7 -2
  101. package/dist/dashboard-herdr.js.map +1 -1
  102. package/dist/dashboard-host-contract.d.ts +116 -0
  103. package/dist/dashboard-host-contract.d.ts.map +1 -0
  104. package/dist/dashboard-host-contract.js +14 -0
  105. package/dist/dashboard-host-contract.js.map +1 -0
  106. package/dist/dashboard-host-transport.d.ts +16 -0
  107. package/dist/dashboard-host-transport.d.ts.map +1 -0
  108. package/dist/dashboard-host-transport.js +124 -0
  109. package/dist/dashboard-host-transport.js.map +1 -0
  110. package/dist/dashboard-host.d.ts +203 -0
  111. package/dist/dashboard-host.d.ts.map +1 -0
  112. package/dist/dashboard-host.js +376 -0
  113. package/dist/dashboard-host.js.map +1 -0
  114. package/dist/dashboard-observation.d.ts +28 -0
  115. package/dist/dashboard-observation.d.ts.map +1 -0
  116. package/dist/dashboard-observation.js +86 -0
  117. package/dist/dashboard-observation.js.map +1 -0
  118. package/dist/debrief-contract.d.ts +65 -0
  119. package/dist/debrief-contract.d.ts.map +1 -0
  120. package/dist/debrief-contract.js +151 -0
  121. package/dist/debrief-contract.js.map +1 -0
  122. package/dist/debrief-fixture.d.ts +16 -0
  123. package/dist/debrief-fixture.d.ts.map +1 -0
  124. package/dist/debrief-fixture.js +41 -0
  125. package/dist/debrief-fixture.js.map +1 -0
  126. package/dist/debrief-host.d.ts +59 -0
  127. package/dist/debrief-host.d.ts.map +1 -0
  128. package/dist/debrief-host.js +49 -0
  129. package/dist/debrief-host.js.map +1 -0
  130. package/dist/debrief-render.d.ts +5 -0
  131. package/dist/debrief-render.d.ts.map +1 -0
  132. package/dist/debrief-render.js +65 -0
  133. package/dist/debrief-render.js.map +1 -0
  134. package/dist/debrief.d.ts +90 -0
  135. package/dist/debrief.d.ts.map +1 -0
  136. package/dist/debrief.js +263 -0
  137. package/dist/debrief.js.map +1 -0
  138. package/dist/delegate-types.d.ts +2 -0
  139. package/dist/delegate-types.d.ts.map +1 -1
  140. package/dist/delegate-types.js.map +1 -1
  141. package/dist/delegate.d.ts.map +1 -1
  142. package/dist/delegate.js +1 -0
  143. package/dist/delegate.js.map +1 -1
  144. package/dist/dispatch-control.d.ts +45 -0
  145. package/dist/dispatch-control.d.ts.map +1 -0
  146. package/dist/dispatch-control.js +76 -0
  147. package/dist/dispatch-control.js.map +1 -0
  148. package/dist/effect-profile-runtime.d.ts +40 -0
  149. package/dist/effect-profile-runtime.d.ts.map +1 -0
  150. package/dist/effect-profile-runtime.js +51 -0
  151. package/dist/effect-profile-runtime.js.map +1 -0
  152. package/dist/effect-profile.d.ts +40 -0
  153. package/dist/effect-profile.d.ts.map +1 -0
  154. package/dist/effect-profile.js +152 -0
  155. package/dist/effect-profile.js.map +1 -0
  156. package/dist/execution-retention.d.ts +90 -0
  157. package/dist/execution-retention.d.ts.map +1 -0
  158. package/dist/execution-retention.js +247 -0
  159. package/dist/execution-retention.js.map +1 -0
  160. package/dist/experiment-contract.d.ts +56 -0
  161. package/dist/experiment-contract.d.ts.map +1 -0
  162. package/dist/experiment-contract.js +80 -0
  163. package/dist/experiment-contract.js.map +1 -0
  164. package/dist/experiment-state.d.ts +22 -0
  165. package/dist/experiment-state.d.ts.map +1 -0
  166. package/dist/experiment-state.js +79 -0
  167. package/dist/experiment-state.js.map +1 -0
  168. package/dist/experiment-store.d.ts +30 -0
  169. package/dist/experiment-store.d.ts.map +1 -0
  170. package/dist/experiment-store.js +147 -0
  171. package/dist/experiment-store.js.map +1 -0
  172. package/dist/experiment.d.ts +65 -0
  173. package/dist/experiment.d.ts.map +1 -0
  174. package/dist/experiment.js +357 -0
  175. package/dist/experiment.js.map +1 -0
  176. package/dist/factory-contract.d.ts +79 -0
  177. package/dist/factory-contract.d.ts.map +1 -0
  178. package/dist/factory-contract.js +89 -0
  179. package/dist/factory-contract.js.map +1 -0
  180. package/dist/factory-migration.d.ts +20 -0
  181. package/dist/factory-migration.d.ts.map +1 -0
  182. package/dist/factory-migration.js +55 -0
  183. package/dist/factory-migration.js.map +1 -0
  184. package/dist/factory-order.d.ts +848 -0
  185. package/dist/factory-order.d.ts.map +1 -0
  186. package/dist/factory-order.js +83 -0
  187. package/dist/factory-order.js.map +1 -0
  188. package/dist/factory-registry.d.ts +121 -0
  189. package/dist/factory-registry.d.ts.map +1 -0
  190. package/dist/factory-registry.js +133 -0
  191. package/dist/factory-registry.js.map +1 -0
  192. package/dist/file-lock.d.ts +8 -2
  193. package/dist/file-lock.d.ts.map +1 -1
  194. package/dist/file-lock.js +78 -19
  195. package/dist/file-lock.js.map +1 -1
  196. package/dist/herdr-poll.d.ts +8 -0
  197. package/dist/herdr-poll.d.ts.map +1 -1
  198. package/dist/herdr-poll.js +23 -0
  199. package/dist/herdr-poll.js.map +1 -1
  200. package/dist/index.d.ts +20 -0
  201. package/dist/index.d.ts.map +1 -1
  202. package/dist/index.js +20 -0
  203. package/dist/index.js.map +1 -1
  204. package/dist/intent-application.d.ts +17 -0
  205. package/dist/intent-application.d.ts.map +1 -0
  206. package/dist/intent-application.js +113 -0
  207. package/dist/intent-application.js.map +1 -0
  208. package/dist/intent-control.d.ts +201 -0
  209. package/dist/intent-control.d.ts.map +1 -0
  210. package/dist/intent-control.js +110 -0
  211. package/dist/intent-control.js.map +1 -0
  212. package/dist/intent-scheduling.d.ts +9 -0
  213. package/dist/intent-scheduling.d.ts.map +1 -0
  214. package/dist/intent-scheduling.js +15 -0
  215. package/dist/intent-scheduling.js.map +1 -0
  216. package/dist/ledger-append.d.ts +15 -0
  217. package/dist/ledger-append.d.ts.map +1 -0
  218. package/dist/ledger-append.js +94 -0
  219. package/dist/ledger-append.js.map +1 -0
  220. package/dist/ledger.d.ts +11 -0
  221. package/dist/ledger.d.ts.map +1 -1
  222. package/dist/ledger.js +3 -7
  223. package/dist/ledger.js.map +1 -1
  224. package/dist/native-session-target.d.ts +9 -0
  225. package/dist/native-session-target.d.ts.map +1 -0
  226. package/dist/native-session-target.js +29 -0
  227. package/dist/native-session-target.js.map +1 -0
  228. package/dist/native-session.d.ts +59 -0
  229. package/dist/native-session.d.ts.map +1 -0
  230. package/dist/native-session.js +154 -0
  231. package/dist/native-session.js.map +1 -0
  232. package/dist/order-schedule.d.ts +37 -0
  233. package/dist/order-schedule.d.ts.map +1 -0
  234. package/dist/order-schedule.js +81 -0
  235. package/dist/order-schedule.js.map +1 -0
  236. package/dist/ordinary-children.d.ts +52 -0
  237. package/dist/ordinary-children.d.ts.map +1 -0
  238. package/dist/ordinary-children.js +93 -0
  239. package/dist/ordinary-children.js.map +1 -0
  240. package/dist/producer-ipc-contract.d.ts +29 -0
  241. package/dist/producer-ipc-contract.d.ts.map +1 -0
  242. package/dist/producer-ipc-contract.js +29 -0
  243. package/dist/producer-ipc-contract.js.map +1 -0
  244. package/dist/producer-ipc.d.ts +55 -0
  245. package/dist/producer-ipc.d.ts.map +1 -0
  246. package/dist/producer-ipc.js +143 -0
  247. package/dist/producer-ipc.js.map +1 -0
  248. package/dist/resource-budget.d.ts +334 -0
  249. package/dist/resource-budget.d.ts.map +1 -0
  250. package/dist/resource-budget.js +415 -0
  251. package/dist/resource-budget.js.map +1 -0
  252. package/dist/retention-contract.d.ts +73 -0
  253. package/dist/retention-contract.d.ts.map +1 -0
  254. package/dist/retention-contract.js +104 -0
  255. package/dist/retention-contract.js.map +1 -0
  256. package/dist/retention-json.d.ts +3 -0
  257. package/dist/retention-json.d.ts.map +1 -0
  258. package/dist/retention-json.js +32 -0
  259. package/dist/retention-json.js.map +1 -0
  260. package/dist/run-child.d.ts +4 -0
  261. package/dist/run-child.d.ts.map +1 -1
  262. package/dist/run-child.js +16 -2
  263. package/dist/run-child.js.map +1 -1
  264. package/dist/run-herdr.d.ts +6 -0
  265. package/dist/run-herdr.d.ts.map +1 -1
  266. package/dist/run-herdr.js +19 -6
  267. package/dist/run-herdr.js.map +1 -1
  268. package/dist/vendor/adoption.d.ts +129 -0
  269. package/dist/vendor/adoption.d.ts.map +1 -0
  270. package/dist/vendor/adoption.js +102 -0
  271. package/dist/vendor/adoption.js.map +1 -0
  272. package/dist/work-command.d.ts +30 -0
  273. package/dist/work-command.d.ts.map +1 -0
  274. package/dist/work-command.js +148 -0
  275. package/dist/work-command.js.map +1 -0
  276. package/dist/work-ledger-destination.d.ts +20 -0
  277. package/dist/work-ledger-destination.d.ts.map +1 -0
  278. package/dist/work-ledger-destination.js +131 -0
  279. package/dist/work-ledger-destination.js.map +1 -0
  280. package/dist/work-ledger-json.d.ts +25 -0
  281. package/dist/work-ledger-json.d.ts.map +1 -0
  282. package/dist/work-ledger-json.js +267 -0
  283. package/dist/work-ledger-json.js.map +1 -0
  284. package/dist/work-ledger-occurrences.d.ts +227 -0
  285. package/dist/work-ledger-occurrences.d.ts.map +1 -0
  286. package/dist/work-ledger-occurrences.js +115 -0
  287. package/dist/work-ledger-occurrences.js.map +1 -0
  288. package/dist/work-ledger-projection.d.ts +295 -0
  289. package/dist/work-ledger-projection.d.ts.map +1 -0
  290. package/dist/work-ledger-projection.js +237 -0
  291. package/dist/work-ledger-projection.js.map +1 -0
  292. package/dist/work-ledger-snapshot.d.ts +29 -0
  293. package/dist/work-ledger-snapshot.d.ts.map +1 -0
  294. package/dist/work-ledger-snapshot.js +267 -0
  295. package/dist/work-ledger-snapshot.js.map +1 -0
  296. package/dist/work-ledger-types.d.ts +261 -0
  297. package/dist/work-ledger-types.d.ts.map +1 -0
  298. package/dist/work-ledger-types.js +13 -0
  299. package/dist/work-ledger-types.js.map +1 -0
  300. package/dist/work-ledger-validation.d.ts +14 -0
  301. package/dist/work-ledger-validation.d.ts.map +1 -0
  302. package/dist/work-ledger-validation.js +226 -0
  303. package/dist/work-ledger-validation.js.map +1 -0
  304. package/dist/work-ledger.d.ts +43 -0
  305. package/dist/work-ledger.d.ts.map +1 -0
  306. package/dist/work-ledger.js +225 -0
  307. package/dist/work-ledger.js.map +1 -0
  308. package/extensions/daily-dashboard-session.ts +30 -0
  309. package/extensions/daily-work-session.ts +20 -0
  310. package/extensions/delegate-chain.ts +1 -0
  311. package/extensions/delegation-native.ts +12 -0
  312. package/extensions/delegation.ts +25 -11
  313. package/extensions/execute-child.ts +44 -5
  314. package/extensions/executor-session.ts +9 -0
  315. package/extensions/grants-command.ts +14 -15
  316. package/extensions/grants-connected-command.ts +19 -0
  317. package/extensions/grants.ts +26 -2
  318. package/extensions/ordinary-runtime.ts +14 -0
  319. package/extensions/primary-shadow.ts +11 -0
  320. package/extensions/run-delegation.ts +9 -7
  321. package/extensions/session.ts +10 -20
  322. package/extensions/work-runtime.ts +44 -0
  323. package/package.json +78 -4
  324. package/src/check-runner.ts +20 -2
  325. package/src/cli.ts +41 -4
  326. package/src/control-journal.ts +26 -0
  327. package/src/daily-dashboard-host.ts +49 -0
  328. package/src/daily-view-input.ts +59 -0
  329. package/src/daily-view-render.ts +44 -0
  330. package/src/daily-view.ts +152 -0
  331. package/src/dashboard-cli.ts +108 -4
  332. package/src/dashboard-harness.ts +37 -0
  333. package/src/dashboard-herdr.ts +7 -2
  334. package/src/dashboard-host-contract.ts +45 -0
  335. package/src/dashboard-host-transport.ts +40 -0
  336. package/src/dashboard-host.ts +191 -0
  337. package/src/dashboard-observation.ts +45 -0
  338. package/src/debrief-contract.ts +127 -0
  339. package/src/debrief-fixture.ts +29 -0
  340. package/src/debrief-host.ts +53 -0
  341. package/src/debrief-render.ts +49 -0
  342. package/src/debrief.ts +198 -0
  343. package/src/delegate-types.ts +2 -0
  344. package/src/delegate.ts +1 -0
  345. package/src/dispatch-control.ts +81 -0
  346. package/src/effect-profile-runtime.ts +46 -0
  347. package/src/effect-profile.ts +129 -0
  348. package/src/execution-retention.ts +230 -0
  349. package/src/experiment-contract.ts +66 -0
  350. package/src/experiment-state.ts +44 -0
  351. package/src/experiment-store.ts +98 -0
  352. package/src/experiment.ts +231 -0
  353. package/src/factory-contract.ts +47 -0
  354. package/src/factory-migration.ts +29 -0
  355. package/src/factory-order.ts +56 -0
  356. package/src/factory-registry.ts +60 -0
  357. package/src/file-lock.ts +47 -11
  358. package/src/herdr-poll.ts +18 -0
  359. package/src/index.ts +32 -0
  360. package/src/intent-application.ts +90 -0
  361. package/src/intent-control.ts +107 -0
  362. package/src/intent-scheduling.ts +14 -0
  363. package/src/ledger-append.ts +72 -0
  364. package/src/ledger.ts +3 -9
  365. package/src/native-session-target.ts +23 -0
  366. package/src/native-session.ts +139 -0
  367. package/src/order-schedule.ts +42 -0
  368. package/src/ordinary-children.ts +59 -0
  369. package/src/producer-ipc-contract.ts +26 -0
  370. package/src/producer-ipc.ts +107 -0
  371. package/src/resource-budget.ts +349 -0
  372. package/src/retention-contract.ts +84 -0
  373. package/src/retention-json.ts +20 -0
  374. package/src/run-child.ts +13 -2
  375. package/src/run-herdr.ts +11 -7
  376. package/src/vendor/adoption.ts +109 -0
  377. package/src/work-command.ts +179 -0
  378. package/src/work-ledger-destination.ts +113 -0
  379. package/src/work-ledger-json.ts +228 -0
  380. package/src/work-ledger-occurrences.ts +99 -0
  381. package/src/work-ledger-projection.ts +262 -0
  382. package/src/work-ledger-snapshot.ts +246 -0
  383. package/src/work-ledger-types.ts +229 -0
  384. package/src/work-ledger-validation.ts +174 -0
  385. package/src/work-ledger.ts +186 -0
@@ -0,0 +1,143 @@
1
+ import { Readable } from "node:stream";
2
+ import { createHash } from "node:crypto";
3
+ import { performance } from "node:perf_hooks";
4
+ import { claimResourcePermit } from "./resource-budget.js";
5
+ import { digestRuntime, digestNamespaceArgs } from "./effect-profile-runtime.js";
6
+ import { runChild } from "./run-child.js";
7
+ import { ipcShape, ipcReferences, producerIpcBinding, producerIpcBindingDigest, producerIpcDemand, producerIpcFrame, PRODUCER_IPC_LIMITS as LIMITS } from "./producer-ipc-contract.js";
8
+ export { producerIpcBinding, producerIpcBindingDigest, producerIpcDemand, PRODUCER_IPC_LIMITS } from "./producer-ipc-contract.js";
9
+ const hosts = new WeakMap();
10
+ /** Trusted host-only capability constructor, NOT approval/entitlement discovery. */
11
+ export function createProducerIpcHost(input) {
12
+ ipcShape(input, ["owner", "binding", "exchange"]);
13
+ if (typeof input.exchange !== "function")
14
+ throw new TypeError("original host exchange required");
15
+ const port = Object.freeze({ binding: producerIpcBinding(input.binding) });
16
+ hosts.set(port, { owner: input.owner, exchange: input.exchange, used: false });
17
+ return port;
18
+ }
19
+ // This is a separate fixed model-free emitter, not a new operation on linux-bwrap-digest-v1.
20
+ const WORKER = "/* producer-ipc-v1 */process.stdout.write(Buffer.from(process.argv[1],'base64'));";
21
+ function deferred() { let resolve; const promise = new Promise(r => { resolve = r; }); return { promise, resolve }; }
22
+ export async function startProducerIpc(input) {
23
+ ipcShape(input, ["owner", "permit", "binding", "host", "signal", "timeoutMs"]);
24
+ const binding = producerIpcBinding(input.binding), host = hosts.get(input.host);
25
+ if (!host || host.used || host.owner !== input.owner || producerIpcBindingDigest(input.host.binding) !== producerIpcBindingDigest(binding))
26
+ throw Error("original unused host with exact owner/charter/invocation required");
27
+ if (!(input.signal instanceof AbortSignal) || !Number.isSafeInteger(input.timeoutMs) || input.timeoutMs < 50 || input.timeoutMs > LIMITS.maxElapsedMs)
28
+ throw new TypeError("bounded original cancellation/deadline required");
29
+ const permit = claimResourcePermit(input.owner, input.permit, binding.budgetDigest, producerIpcDemand(binding));
30
+ host.used = true;
31
+ const caller = input.signal, deadline = performance.now() + input.timeoutMs, abort = new AbortController(), signal = AbortSignal.any([caller, abort.signal]);
32
+ const started = deferred(), readiness = deferred(), result = deferred();
33
+ let outcome = "pending", reason = null, child = null;
34
+ let childState = "pending", hostState = "not-called", settlement = "pending";
35
+ let references = null, frameSha256 = null, frames, timer;
36
+ const inspect = () => Object.freeze({ binding, outcome, reason, child: child ? Object.freeze({ ...child }) : null, childState, hostState, frameSha256, references, settlement, acceptance: "not-assessed" });
37
+ const latch = (next, why) => {
38
+ if (outcome !== "pending")
39
+ return;
40
+ outcome = next;
41
+ reason = why;
42
+ clearTimeout(timer);
43
+ caller.removeEventListener("abort", cancel);
44
+ result.resolve(inspect());
45
+ };
46
+ const cancel = () => { latch("cancelled", "CANCELLED"); abort.abort(); frames?.destroy(); };
47
+ const expire = () => { latch("timed-out", "DEADLINE"); abort.abort(); frames?.destroy(); };
48
+ const current = () => { if (outcome !== "pending")
49
+ return false; if (caller.aborted)
50
+ cancel();
51
+ else if (performance.now() >= deadline)
52
+ expire(); return outcome === "pending"; };
53
+ timer = setTimeout(expire, input.timeoutMs);
54
+ caller.addEventListener("abort", cancel, { once: true });
55
+ if (caller.aborted)
56
+ cancel();
57
+ let stdout = Buffer.alloc(0), overflow = false, eof = false, spawned = false;
58
+ const childPromise = (async () => {
59
+ try {
60
+ await permit.admission;
61
+ }
62
+ catch {
63
+ latch("failed", "ADMISSION_FAILED");
64
+ return null;
65
+ }
66
+ if (!current())
67
+ return null;
68
+ try {
69
+ const runtime = await digestRuntime();
70
+ if (!current())
71
+ return null;
72
+ return Object.freeze(await runChild({ command: "/usr/bin/bwrap", args: digestNamespaceArgs(runtime, WORKER, [producerIpcFrame(binding).toString("base64")]), env: {}, cwd: "/", signal,
73
+ timeoutMs: LIMITS.childMs, killGraceMs: LIMITS.graceMs, hardDeadlineAt: Date.now() + LIMITS.childMs + 500, maxOutputBytes: LIMITS.frameBytes,
74
+ onSpawn: () => { spawned = true; started.resolve("spawned"); }, onStreamEnd: s => { if (s === "stdout")
75
+ eof = true; },
76
+ onObservation: (s, b) => { if (s !== "stdout" || overflow)
77
+ return; if (stdout.length + b.length > LIMITS.frameBytes) {
78
+ overflow = true;
79
+ return;
80
+ } stdout = Buffer.concat([stdout, Buffer.from(b)]); } }));
81
+ }
82
+ catch {
83
+ latch("failed", "RUNTIME_FAILED");
84
+ return null;
85
+ }
86
+ })();
87
+ const completion = (async () => {
88
+ child = await childPromise;
89
+ childState = spawned ? (child ? "settled" : "unknown") : "not-spawned";
90
+ started.resolve("not-spawned");
91
+ if (childState === "unknown") {
92
+ readiness.resolve("not-ready");
93
+ settlement = "failed-or-unknown";
94
+ return inspect();
95
+ }
96
+ if (current()) {
97
+ if (!child || child.code !== 0 || child.aborted || child.timedOut || child.truncated || child.spawnError || child.signal)
98
+ latch("failed", "CHILD_FAILED");
99
+ else if (!eof || overflow || !stdout.equals(producerIpcFrame(binding)))
100
+ latch("failed", "FRAME_INVALID");
101
+ else {
102
+ frameSha256 = createHash("sha256").update(stdout).digest("hex");
103
+ readiness.resolve("frame-ready");
104
+ // Replay ONLY exact bytes from the original completed pipe; never reconstruct a host-authored frame.
105
+ frames = Readable.from([Buffer.from(stdout)]);
106
+ try {
107
+ if (current()) {
108
+ hostState = "pending";
109
+ references = ipcReferences(await host.exchange(frames, Object.freeze({ binding, signal })));
110
+ if (!frames.readableEnded)
111
+ throw Error("original host frame not consumed");
112
+ hostState = "acknowledged";
113
+ if (current())
114
+ latch("completed", null);
115
+ }
116
+ }
117
+ catch {
118
+ hostState = "failed";
119
+ if (current())
120
+ latch("failed", "HOST_FAILED");
121
+ }
122
+ finally {
123
+ frames.destroy();
124
+ }
125
+ }
126
+ }
127
+ readiness.resolve("not-ready");
128
+ // Observation timeout never reaches here until the ORIGINAL child and invoked host have acknowledged.
129
+ const terminal = inspect().outcome;
130
+ try {
131
+ await permit.settle(terminal === "completed" ? "completed" : terminal === "cancelled" ? "cancelled" : "failed");
132
+ settlement = "acknowledged";
133
+ }
134
+ catch {
135
+ settlement = "failed-or-unknown";
136
+ }
137
+ clearTimeout(timer);
138
+ caller.removeEventListener("abort", cancel);
139
+ return inspect();
140
+ })();
141
+ return Object.freeze({ started: started.promise, readiness: readiness.promise, child: childPromise, result: result.promise, completion, inspect });
142
+ }
143
+ //# sourceMappingURL=producer-ipc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"producer-ipc.js","sourceRoot":"","sources":["../src/producer-ipc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,334 @@
1
+ import { readIntentWork } from "./intent-application.ts";
2
+ import { type WorkIntentBinding, type IntentRequest, type IntentAdmission } from "./intent-control.ts";
3
+ import { type DispatchAuthority, type DispatchRequest } from "./dispatch-control.ts";
4
+ export interface ResourceLimits {
5
+ maxAttempts: number;
6
+ maxInputBytes: number;
7
+ maxConcurrent: number;
8
+ }
9
+ export interface BudgetBinding<V extends "1.0" | "2.0" | "3.0" | "4.0" = "1.0"> {
10
+ version: V;
11
+ directory: string;
12
+ device: string;
13
+ inode: string;
14
+ journalDevice: string;
15
+ journalInode: string;
16
+ authorityDigest: string;
17
+ limits: ResourceLimits;
18
+ intent?: V extends "3.0" ? WorkIntentBinding : never;
19
+ }
20
+ export type DispatchBudgetBinding = BudgetBinding<"2.0">;
21
+ export type ExperimentBudgetBinding = BudgetBinding<"4.0">;
22
+ export type GovernedBudgetBinding = BudgetBinding<"1.0" | "2.0" | "3.0" | "4.0">;
23
+ export type IntentBudgetBinding = BudgetBinding<"3.0"> & {
24
+ intent: WorkIntentBinding;
25
+ };
26
+ export interface AttemptDemand {
27
+ attemptId: string;
28
+ orderId: string;
29
+ experimentId: string;
30
+ kind: "primary" | "retry" | "shadow" | "descendant";
31
+ parentAttemptId: string | null;
32
+ inputBytes: number;
33
+ inputDigest: string;
34
+ }
35
+ interface Reservation extends AttemptDemand {
36
+ intent?: IntentAdmission;
37
+ owner: string;
38
+ state: "reserved" | "settled";
39
+ outcome: string | null;
40
+ }
41
+ export interface BudgetSnapshot {
42
+ attempts: number;
43
+ inputBytes: number;
44
+ active: number;
45
+ reservations: readonly Readonly<Reservation>[];
46
+ }
47
+ export interface ResourcePermit {
48
+ readonly attemptId: string;
49
+ settle(outcome: "completed" | "failed" | "cancelled"): Promise<void>;
50
+ }
51
+ /** Exclusive original-permit handoff for the separate opt-in IPC route. No mint/recovery API. */
52
+ export declare function claimResourcePermit(owner: object, permit: ResourcePermit, bindingDigest: string, expected: AttemptDemand): Readonly<{
53
+ admission: Promise<void>;
54
+ settle: (outcome: "completed" | "failed" | "cancelled") => Promise<void>;
55
+ }>;
56
+ export declare class ResourceAdmissionError extends Error {
57
+ readonly code: "INVALID" | "AUTHORITY_CHANGED" | "DUPLICATE" | "EXHAUSTED" | "OWNERSHIP_LOST" | "DISPATCH_BLOCKED";
58
+ constructor(code: ResourceAdmissionError["code"], message: string);
59
+ }
60
+ /** Explicit one-time creation, never implicit reset/recovery. Keep this binding outside the mutable journal. */
61
+ type BudgetCreation = {
62
+ directory: string;
63
+ authorityDigest: string;
64
+ limits: ResourceLimits;
65
+ };
66
+ export declare function createResourceBudget(input: BudgetCreation): Promise<Readonly<BudgetBinding>>;
67
+ /** Explicit opt-in v2 journal; old readers refuse rather than ignore control events. */
68
+ export declare function createDispatchBudget(input: BudgetCreation): Promise<Readonly<DispatchBudgetBinding>>;
69
+ export declare function createIntentBudget(input: BudgetCreation, intent: Parameters<typeof readIntentWork>[0]): Promise<Readonly<IntentBudgetBinding>>;
70
+ /** Explicit batch semantics. All queued slots remain conservatively active until original settlement. */
71
+ export declare function createExperimentBudget(input: BudgetCreation): Promise<Readonly<ExperimentBudgetBinding>>;
72
+ /** Host-side arithmetic for this exact independently retained binding. Not a money/CPU/memory cap. */
73
+ export declare function openResourceBudget<T extends GovernedBudgetBinding>(input: T): Readonly<{
74
+ binding: Readonly<T>;
75
+ reserveBatch(inputs: readonly AttemptDemand[]): Promise<readonly Readonly<ResourcePermit>[]>;
76
+ intentControls(input: DispatchAuthority | null): Readonly<{
77
+ inspect: () => Promise<{
78
+ readonly dispatchPaused: boolean;
79
+ readonly nextObligation: {
80
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
81
+ readonly id: string;
82
+ readonly revision: number;
83
+ readonly digest: string;
84
+ } | null;
85
+ readonly revision: number;
86
+ readonly selection: {
87
+ readonly snapshot: {
88
+ readonly id: string;
89
+ readonly digest: string;
90
+ };
91
+ readonly event: {
92
+ readonly eventId: string;
93
+ readonly digest: string;
94
+ };
95
+ };
96
+ readonly priorities: readonly {
97
+ readonly obligation: {
98
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
99
+ readonly id: string;
100
+ readonly revision: number;
101
+ readonly digest: string;
102
+ };
103
+ readonly rank: number;
104
+ }[];
105
+ readonly records: readonly {
106
+ readonly requestId: string;
107
+ readonly digest: string;
108
+ readonly expectedRevision: number;
109
+ readonly expectedSelection: {
110
+ readonly snapshot: {
111
+ readonly id: string;
112
+ readonly digest: string;
113
+ };
114
+ readonly event: {
115
+ readonly eventId: string;
116
+ readonly digest: string;
117
+ };
118
+ };
119
+ readonly action: IntentRequest["action"];
120
+ readonly selection: {
121
+ readonly snapshot: {
122
+ readonly id: string;
123
+ readonly digest: string;
124
+ };
125
+ readonly event: {
126
+ readonly eventId: string;
127
+ readonly digest: string;
128
+ };
129
+ };
130
+ readonly priorities: readonly {
131
+ readonly obligation: {
132
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
133
+ readonly id: string;
134
+ readonly revision: number;
135
+ readonly digest: string;
136
+ };
137
+ readonly rank: number;
138
+ }[];
139
+ readonly events: readonly {
140
+ readonly eventId: string;
141
+ readonly digest: string;
142
+ }[];
143
+ readonly decision: "approved" | "authority-unavailable" | "stale" | "busy";
144
+ readonly application: "pending-or-unknown" | "applied" | "not-applied";
145
+ readonly outcome: "pending-or-unknown" | "selection-applied" | "priority-applied" | "refused";
146
+ readonly resultSelection: {
147
+ readonly snapshot: {
148
+ readonly id: string;
149
+ readonly digest: string;
150
+ };
151
+ readonly event: {
152
+ readonly eventId: string;
153
+ readonly digest: string;
154
+ };
155
+ } | null;
156
+ }[];
157
+ readonly version: "intent-controller-snapshot-v1";
158
+ readonly bindingDigest: string;
159
+ readonly admission: "blocked-pending" | "intent-ready";
160
+ readonly acceptance: "not-assessed";
161
+ readonly freshness: "snapshot-unknown";
162
+ }>;
163
+ request(input: IntentRequest): Promise<{
164
+ readonly revision: number;
165
+ readonly selection: {
166
+ readonly snapshot: {
167
+ readonly id: string;
168
+ readonly digest: string;
169
+ };
170
+ readonly event: {
171
+ readonly eventId: string;
172
+ readonly digest: string;
173
+ };
174
+ };
175
+ readonly priorities: readonly {
176
+ readonly obligation: {
177
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
178
+ readonly id: string;
179
+ readonly revision: number;
180
+ readonly digest: string;
181
+ };
182
+ readonly rank: number;
183
+ }[];
184
+ readonly records: readonly {
185
+ readonly requestId: string;
186
+ readonly digest: string;
187
+ readonly expectedRevision: number;
188
+ readonly expectedSelection: {
189
+ readonly snapshot: {
190
+ readonly id: string;
191
+ readonly digest: string;
192
+ };
193
+ readonly event: {
194
+ readonly eventId: string;
195
+ readonly digest: string;
196
+ };
197
+ };
198
+ readonly action: IntentRequest["action"];
199
+ readonly selection: {
200
+ readonly snapshot: {
201
+ readonly id: string;
202
+ readonly digest: string;
203
+ };
204
+ readonly event: {
205
+ readonly eventId: string;
206
+ readonly digest: string;
207
+ };
208
+ };
209
+ readonly priorities: readonly {
210
+ readonly obligation: {
211
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
212
+ readonly id: string;
213
+ readonly revision: number;
214
+ readonly digest: string;
215
+ };
216
+ readonly rank: number;
217
+ }[];
218
+ readonly events: readonly {
219
+ readonly eventId: string;
220
+ readonly digest: string;
221
+ }[];
222
+ readonly decision: "approved" | "authority-unavailable" | "stale" | "busy";
223
+ readonly application: "pending-or-unknown" | "applied" | "not-applied";
224
+ readonly outcome: "pending-or-unknown" | "selection-applied" | "priority-applied" | "refused";
225
+ readonly resultSelection: {
226
+ readonly snapshot: {
227
+ readonly id: string;
228
+ readonly digest: string;
229
+ };
230
+ readonly event: {
231
+ readonly eventId: string;
232
+ readonly digest: string;
233
+ };
234
+ } | null;
235
+ }[];
236
+ readonly version: "intent-controller-snapshot-v1";
237
+ readonly bindingDigest: string;
238
+ readonly admission: "blocked-pending" | "intent-ready";
239
+ readonly acceptance: "not-assessed";
240
+ readonly freshness: "snapshot-unknown";
241
+ }>;
242
+ reconcile(input: IntentRequest): Promise<{
243
+ readonly revision: number;
244
+ readonly selection: {
245
+ readonly snapshot: {
246
+ readonly id: string;
247
+ readonly digest: string;
248
+ };
249
+ readonly event: {
250
+ readonly eventId: string;
251
+ readonly digest: string;
252
+ };
253
+ };
254
+ readonly priorities: readonly {
255
+ readonly obligation: {
256
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
257
+ readonly id: string;
258
+ readonly revision: number;
259
+ readonly digest: string;
260
+ };
261
+ readonly rank: number;
262
+ }[];
263
+ readonly records: readonly {
264
+ readonly requestId: string;
265
+ readonly digest: string;
266
+ readonly expectedRevision: number;
267
+ readonly expectedSelection: {
268
+ readonly snapshot: {
269
+ readonly id: string;
270
+ readonly digest: string;
271
+ };
272
+ readonly event: {
273
+ readonly eventId: string;
274
+ readonly digest: string;
275
+ };
276
+ };
277
+ readonly action: IntentRequest["action"];
278
+ readonly selection: {
279
+ readonly snapshot: {
280
+ readonly id: string;
281
+ readonly digest: string;
282
+ };
283
+ readonly event: {
284
+ readonly eventId: string;
285
+ readonly digest: string;
286
+ };
287
+ };
288
+ readonly priorities: readonly {
289
+ readonly obligation: {
290
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
291
+ readonly id: string;
292
+ readonly revision: number;
293
+ readonly digest: string;
294
+ };
295
+ readonly rank: number;
296
+ }[];
297
+ readonly events: readonly {
298
+ readonly eventId: string;
299
+ readonly digest: string;
300
+ }[];
301
+ readonly decision: "approved" | "authority-unavailable" | "stale" | "busy";
302
+ readonly application: "pending-or-unknown" | "applied" | "not-applied";
303
+ readonly outcome: "pending-or-unknown" | "selection-applied" | "priority-applied" | "refused";
304
+ readonly resultSelection: {
305
+ readonly snapshot: {
306
+ readonly id: string;
307
+ readonly digest: string;
308
+ };
309
+ readonly event: {
310
+ readonly eventId: string;
311
+ readonly digest: string;
312
+ };
313
+ } | null;
314
+ }[];
315
+ readonly version: "intent-controller-snapshot-v1";
316
+ readonly bindingDigest: string;
317
+ readonly admission: "blocked-pending" | "intent-ready";
318
+ readonly acceptance: "not-assessed";
319
+ readonly freshness: "snapshot-unknown";
320
+ }>;
321
+ }>;
322
+ controls(input: DispatchAuthority | null): Readonly<{
323
+ inspect: () => Promise<Readonly<import("./dispatch-control.ts").DispatchSnapshot>>;
324
+ reconcile(requestId: string): Promise<Readonly<import("./dispatch-control.ts").DispatchSnapshot>>;
325
+ request(input: DispatchRequest): Promise<Readonly<import("./dispatch-control.ts").DispatchSnapshot>>;
326
+ }>;
327
+ /** Explicit control-path synchronization; unlike inspect, this takes the existing journal lock. */
328
+ controlSnapshot(): Promise<Readonly<BudgetSnapshot>>;
329
+ inspect(): Promise<Readonly<BudgetSnapshot>>;
330
+ reserve(input: AttemptDemand, selection?: IntentAdmission): Promise<Readonly<ResourcePermit>>;
331
+ }>;
332
+ export declare function resourceBindingDigest(b: GovernedBudgetBinding): string;
333
+ export {};
334
+ //# sourceMappingURL=resource-budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-budget.d.ts","sourceRoot":"","sources":["../src/resource-budget.ts"],"names":[],"mappings":"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"}