pi-daddy 0.28.0 → 0.32.1

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 (1012) hide show
  1. package/CHANGELOG.md +108 -124
  2. package/README.md +18 -896
  3. package/THIRD_PARTY_NOTICES.md +1 -1
  4. package/contracts/ledger-record/v1/README.md +44 -0
  5. package/contracts/ledger-record/v1/fixtures/child-lifecycle.json +45 -0
  6. package/contracts/ledger-record/v1/fixtures/ledger-record.jsonl +3 -0
  7. package/contracts/ledger-record/v1/governance-event.schema.json +747 -0
  8. package/contracts/ledger-record/v1/record.schema.json +91 -0
  9. package/dist/cli.d.ts +10 -4
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +120 -106
  12. package/dist/cli.js.map +1 -1
  13. package/dist/executors/activity-session.d.ts +12 -0
  14. package/dist/executors/activity-session.d.ts.map +1 -0
  15. package/dist/executors/activity-session.js +43 -0
  16. package/dist/executors/activity-session.js.map +1 -0
  17. package/dist/executors/executor.d.ts +39 -0
  18. package/dist/executors/executor.d.ts.map +1 -0
  19. package/dist/executors/executor.js +95 -0
  20. package/dist/executors/executor.js.map +1 -0
  21. package/dist/executors/herdr-cli.d.ts +78 -0
  22. package/dist/executors/herdr-cli.d.ts.map +1 -0
  23. package/dist/executors/herdr-cli.js +114 -0
  24. package/dist/executors/herdr-cli.js.map +1 -0
  25. package/dist/executors/herdr-name.d.ts.map +1 -0
  26. package/dist/executors/herdr-name.js.map +1 -0
  27. package/dist/executors/herdr-pi-lifecycle.d.ts.map +1 -0
  28. package/dist/executors/herdr-pi-lifecycle.js +22 -0
  29. package/dist/executors/herdr-pi-lifecycle.js.map +1 -0
  30. package/dist/executors/herdr-poll.d.ts +140 -0
  31. package/dist/executors/herdr-poll.d.ts.map +1 -0
  32. package/dist/executors/herdr-poll.js +252 -0
  33. package/dist/executors/herdr-poll.js.map +1 -0
  34. package/dist/executors/herdr-stage.d.ts +40 -0
  35. package/dist/executors/herdr-stage.d.ts.map +1 -0
  36. package/dist/executors/herdr-stage.js +54 -0
  37. package/dist/executors/herdr-stage.js.map +1 -0
  38. package/dist/executors/herdr-start.d.ts.map +1 -0
  39. package/dist/executors/herdr-start.js.map +1 -0
  40. package/dist/executors/native-session-target.d.ts +9 -0
  41. package/dist/executors/native-session-target.d.ts.map +1 -0
  42. package/dist/executors/native-session-target.js +30 -0
  43. package/dist/executors/native-session-target.js.map +1 -0
  44. package/dist/executors/pane-reaper.d.ts +111 -0
  45. package/dist/executors/pane-reaper.d.ts.map +1 -0
  46. package/dist/executors/pane-reaper.js +242 -0
  47. package/dist/executors/pane-reaper.js.map +1 -0
  48. package/dist/executors/process-activity.d.ts +3 -0
  49. package/dist/executors/process-activity.d.ts.map +1 -0
  50. package/dist/executors/process-activity.js +59 -0
  51. package/dist/executors/process-activity.js.map +1 -0
  52. package/dist/executors/run-herdr.d.ts +122 -0
  53. package/dist/executors/run-herdr.d.ts.map +1 -0
  54. package/dist/executors/run-herdr.js +341 -0
  55. package/dist/executors/run-herdr.js.map +1 -0
  56. package/dist/executors/vendor/herdr-pi-lifecycle.d.ts.map +1 -0
  57. package/dist/executors/vendor/herdr-pi-lifecycle.js.map +1 -0
  58. package/dist/governance/approval-prompt.d.ts +119 -0
  59. package/dist/governance/approval-prompt.d.ts.map +1 -0
  60. package/dist/governance/approval-prompt.js +133 -0
  61. package/dist/governance/approval-prompt.js.map +1 -0
  62. package/dist/governance/approval-store.d.ts +149 -0
  63. package/dist/governance/approval-store.d.ts.map +1 -0
  64. package/dist/governance/approval-store.js +309 -0
  65. package/dist/governance/approval-store.js.map +1 -0
  66. package/dist/governance/execution-retention.d.ts +90 -0
  67. package/dist/governance/execution-retention.d.ts.map +1 -0
  68. package/dist/governance/execution-retention.js +317 -0
  69. package/dist/governance/execution-retention.js.map +1 -0
  70. package/dist/governance/file-lock.d.ts.map +1 -0
  71. package/dist/governance/file-lock.js +205 -0
  72. package/dist/governance/file-lock.js.map +1 -0
  73. package/dist/governance/finalization.d.ts.map +1 -0
  74. package/dist/governance/finalization.js.map +1 -0
  75. package/dist/governance/grant-store.d.ts +96 -0
  76. package/dist/governance/grant-store.d.ts.map +1 -0
  77. package/dist/governance/grant-store.js +186 -0
  78. package/dist/governance/grant-store.js.map +1 -0
  79. package/dist/governance/init.d.ts +129 -0
  80. package/dist/governance/init.d.ts.map +1 -0
  81. package/dist/governance/init.js +360 -0
  82. package/dist/governance/init.js.map +1 -0
  83. package/dist/governance/lease-helper.d.ts.map +1 -0
  84. package/dist/governance/lease-helper.js +121 -0
  85. package/dist/governance/lease-helper.js.map +1 -0
  86. package/dist/governance/lease-record.d.ts +90 -0
  87. package/dist/governance/lease-record.d.ts.map +1 -0
  88. package/dist/governance/lease-record.js.map +1 -0
  89. package/dist/governance/ledger-events.d.ts +111 -0
  90. package/dist/governance/ledger-events.d.ts.map +1 -0
  91. package/dist/governance/ledger-events.js +129 -0
  92. package/dist/governance/ledger-events.js.map +1 -0
  93. package/dist/governance/ledger-report.d.ts +134 -0
  94. package/dist/governance/ledger-report.d.ts.map +1 -0
  95. package/dist/governance/ledger-report.js +294 -0
  96. package/dist/governance/ledger-report.js.map +1 -0
  97. package/dist/governance/ledger-v3-validation.d.ts +21 -0
  98. package/dist/governance/ledger-v3-validation.d.ts.map +1 -0
  99. package/dist/governance/ledger-v3-validation.js +353 -0
  100. package/dist/governance/ledger-v3-validation.js.map +1 -0
  101. package/dist/governance/ledger.d.ts +258 -0
  102. package/dist/governance/ledger.d.ts.map +1 -0
  103. package/dist/governance/ledger.js +201 -0
  104. package/dist/governance/ledger.js.map +1 -0
  105. package/dist/governance/native-session.d.ts +59 -0
  106. package/dist/governance/native-session.d.ts.map +1 -0
  107. package/dist/governance/native-session.js +208 -0
  108. package/dist/governance/native-session.js.map +1 -0
  109. package/dist/governance/record.d.ts +65 -0
  110. package/dist/governance/record.d.ts.map +1 -0
  111. package/dist/governance/record.js +259 -0
  112. package/dist/governance/record.js.map +1 -0
  113. package/dist/governance/retention-contract.d.ts.map +1 -0
  114. package/dist/governance/retention-contract.js +187 -0
  115. package/dist/governance/retention-contract.js.map +1 -0
  116. package/dist/governance/retention-json.d.ts.map +1 -0
  117. package/dist/governance/retention-json.js.map +1 -0
  118. package/dist/governance/workspace-lease.d.ts +40 -0
  119. package/dist/governance/workspace-lease.d.ts.map +1 -0
  120. package/dist/governance/workspace-lease.js +357 -0
  121. package/dist/governance/workspace-lease.js.map +1 -0
  122. package/dist/index.d.ts +59 -42
  123. package/dist/index.d.ts.map +1 -1
  124. package/dist/index.js +61 -42
  125. package/dist/index.js.map +1 -1
  126. package/dist/kernel/approval.d.ts +241 -0
  127. package/dist/kernel/approval.d.ts.map +1 -0
  128. package/dist/kernel/approval.js +270 -0
  129. package/dist/kernel/approval.js.map +1 -0
  130. package/dist/kernel/capabilities.d.ts +136 -0
  131. package/dist/kernel/capabilities.d.ts.map +1 -0
  132. package/dist/kernel/capabilities.js +199 -0
  133. package/dist/kernel/capabilities.js.map +1 -0
  134. package/dist/kernel/catalog.d.ts +125 -0
  135. package/dist/kernel/catalog.d.ts.map +1 -0
  136. package/dist/kernel/catalog.js +338 -0
  137. package/dist/kernel/catalog.js.map +1 -0
  138. package/dist/kernel/chain.d.ts.map +1 -0
  139. package/dist/kernel/chain.js.map +1 -0
  140. package/dist/kernel/correlation.d.ts.map +1 -0
  141. package/dist/kernel/correlation.js +267 -0
  142. package/dist/kernel/correlation.js.map +1 -0
  143. package/dist/kernel/definitions.d.ts.map +1 -0
  144. package/dist/kernel/definitions.js +164 -0
  145. package/dist/kernel/definitions.js.map +1 -0
  146. package/dist/kernel/delegate-types.d.ts +160 -0
  147. package/dist/kernel/delegate-types.d.ts.map +1 -0
  148. package/dist/kernel/delegate-types.js +9 -0
  149. package/dist/kernel/delegate-types.js.map +1 -0
  150. package/dist/kernel/delegate.d.ts.map +1 -0
  151. package/dist/kernel/delegate.js +320 -0
  152. package/dist/kernel/delegate.js.map +1 -0
  153. package/dist/kernel/delegation-approval.d.ts.map +1 -0
  154. package/dist/kernel/delegation-approval.js +93 -0
  155. package/dist/kernel/delegation-approval.js.map +1 -0
  156. package/dist/kernel/env-names.d.ts +51 -0
  157. package/dist/kernel/env-names.d.ts.map +1 -0
  158. package/dist/kernel/env-names.js +112 -0
  159. package/dist/kernel/env-names.js.map +1 -0
  160. package/dist/kernel/execution-id.d.ts.map +1 -0
  161. package/dist/kernel/execution-id.js.map +1 -0
  162. package/dist/kernel/fanout.d.ts.map +1 -0
  163. package/dist/kernel/fanout.js +93 -0
  164. package/dist/kernel/fanout.js.map +1 -0
  165. package/dist/kernel/grant-env.d.ts +118 -0
  166. package/dist/kernel/grant-env.d.ts.map +1 -0
  167. package/dist/kernel/grant-env.js +104 -0
  168. package/dist/kernel/grant-env.js.map +1 -0
  169. package/dist/kernel/ledger-identifiers.d.ts.map +1 -0
  170. package/dist/kernel/ledger-identifiers.js.map +1 -0
  171. package/dist/kernel/model-preflight.d.ts +13 -0
  172. package/dist/kernel/model-preflight.d.ts.map +1 -0
  173. package/dist/kernel/model-preflight.js +30 -0
  174. package/dist/kernel/model-preflight.js.map +1 -0
  175. package/dist/kernel/pi-tools.d.ts.map +1 -0
  176. package/dist/kernel/pi-tools.js +29 -0
  177. package/dist/kernel/pi-tools.js.map +1 -0
  178. package/dist/kernel/progress.d.ts.map +1 -0
  179. package/dist/kernel/progress.js.map +1 -0
  180. package/dist/kernel/project-paths.d.ts +43 -0
  181. package/dist/kernel/project-paths.d.ts.map +1 -0
  182. package/dist/kernel/project-paths.js +81 -0
  183. package/dist/kernel/project-paths.js.map +1 -0
  184. package/dist/kernel/propagation.d.ts +195 -0
  185. package/dist/kernel/propagation.d.ts.map +1 -0
  186. package/dist/kernel/propagation.js +275 -0
  187. package/dist/kernel/propagation.js.map +1 -0
  188. package/dist/kernel/refusals.d.ts +16 -0
  189. package/dist/kernel/refusals.d.ts.map +1 -0
  190. package/dist/kernel/refusals.js +53 -0
  191. package/dist/kernel/refusals.js.map +1 -0
  192. package/dist/kernel/resolve.d.ts +120 -0
  193. package/dist/kernel/resolve.d.ts.map +1 -0
  194. package/dist/kernel/resolve.js +201 -0
  195. package/dist/kernel/resolve.js.map +1 -0
  196. package/dist/kernel/routing-authority.d.ts +71 -0
  197. package/dist/kernel/routing-authority.d.ts.map +1 -0
  198. package/dist/kernel/routing-authority.js +100 -0
  199. package/dist/kernel/routing-authority.js.map +1 -0
  200. package/dist/kernel/run-child.d.ts +111 -0
  201. package/dist/kernel/run-child.d.ts.map +1 -0
  202. package/dist/kernel/run-child.js +324 -0
  203. package/dist/kernel/run-child.js.map +1 -0
  204. package/dist/kernel/skill-packages.d.ts +116 -0
  205. package/dist/kernel/skill-packages.d.ts.map +1 -0
  206. package/dist/kernel/skill-packages.js +300 -0
  207. package/dist/kernel/skill-packages.js.map +1 -0
  208. package/dist/kernel/skill-resources.d.ts.map +1 -0
  209. package/dist/kernel/skill-resources.js +56 -0
  210. package/dist/kernel/skill-resources.js.map +1 -0
  211. package/dist/kernel/spawn.d.ts +60 -0
  212. package/dist/kernel/spawn.d.ts.map +1 -0
  213. package/dist/kernel/spawn.js +116 -0
  214. package/dist/kernel/spawn.js.map +1 -0
  215. package/dist/kernel/workspace.d.ts +51 -0
  216. package/dist/kernel/workspace.d.ts.map +1 -0
  217. package/dist/kernel/workspace.js +223 -0
  218. package/dist/kernel/workspace.js.map +1 -0
  219. package/dist/products/activity-timeline.d.ts +126 -0
  220. package/dist/products/activity-timeline.d.ts.map +1 -0
  221. package/dist/products/activity-timeline.js +542 -0
  222. package/dist/products/activity-timeline.js.map +1 -0
  223. package/dist/products/dashboard-cli.d.ts +26 -0
  224. package/dist/products/dashboard-cli.d.ts.map +1 -0
  225. package/dist/products/dashboard-cli.js +224 -0
  226. package/dist/products/dashboard-cli.js.map +1 -0
  227. package/dist/products/dashboard-display-controls.d.ts +17 -0
  228. package/dist/products/dashboard-display-controls.d.ts.map +1 -0
  229. package/dist/products/dashboard-display-controls.js +38 -0
  230. package/dist/products/dashboard-display-controls.js.map +1 -0
  231. package/dist/products/dashboard-handshake.d.ts +42 -0
  232. package/dist/products/dashboard-handshake.d.ts.map +1 -0
  233. package/dist/products/dashboard-handshake.js +158 -0
  234. package/dist/products/dashboard-handshake.js.map +1 -0
  235. package/dist/products/dashboard-herdr.d.ts +55 -0
  236. package/dist/products/dashboard-herdr.d.ts.map +1 -0
  237. package/dist/products/dashboard-herdr.js +324 -0
  238. package/dist/products/dashboard-herdr.js.map +1 -0
  239. package/dist/products/dashboard-projection.d.ts +62 -0
  240. package/dist/products/dashboard-projection.d.ts.map +1 -0
  241. package/dist/products/dashboard-projection.js +305 -0
  242. package/dist/products/dashboard-projection.js.map +1 -0
  243. package/dist/products/dashboard-render.d.ts.map +1 -0
  244. package/dist/products/dashboard-render.js +208 -0
  245. package/dist/products/dashboard-render.js.map +1 -0
  246. package/extensions/activity-timeline.ts +134 -28
  247. package/extensions/approval-banking.ts +3 -3
  248. package/extensions/approvals.ts +18 -12
  249. package/extensions/chain-approval-facts.ts +9 -6
  250. package/extensions/chain-ledger.ts +4 -4
  251. package/extensions/chain-plan.ts +6 -6
  252. package/extensions/correlation-shape.ts +42 -33
  253. package/extensions/delegate-chain.ts +93 -45
  254. package/extensions/delegation-authority.ts +7 -3
  255. package/extensions/delegation-ledger.ts +2 -2
  256. package/extensions/delegation-native.ts +24 -7
  257. package/extensions/delegation.ts +91 -80
  258. package/extensions/execute-child.ts +440 -293
  259. package/extensions/execution-occurrence.ts +2 -2
  260. package/extensions/executor-session.ts +5 -5
  261. package/extensions/fanout-outcome.ts +8 -6
  262. package/extensions/grant-store-refusal.ts +24 -12
  263. package/extensions/grants-command.ts +42 -34
  264. package/extensions/grants-connected-command.ts +29 -15
  265. package/extensions/grants.ts +73 -73
  266. package/extensions/init-command.ts +18 -12
  267. package/extensions/reload-environment.ts +12 -5
  268. package/extensions/run-delegation.ts +29 -19
  269. package/extensions/session-environment.ts +25 -11
  270. package/extensions/session-report.ts +61 -12
  271. package/extensions/session.ts +58 -34
  272. package/extensions/spawn-summary.ts +5 -5
  273. package/extensions/stored-grant-session.ts +5 -5
  274. package/extensions/tripwire.ts +1 -1
  275. package/extensions/workspace-runtime.ts +26 -24
  276. package/herdr-plugin/herdr-plugin.toml +1 -1
  277. package/package.json +4 -211
  278. package/src/cli.ts +149 -92
  279. package/src/executors/activity-session.ts +54 -0
  280. package/src/executors/executor.ts +123 -0
  281. package/src/executors/herdr-cli.ts +132 -0
  282. package/src/executors/herdr-pi-lifecycle.ts +21 -0
  283. package/src/executors/herdr-poll.ts +305 -0
  284. package/src/executors/herdr-stage.ts +55 -0
  285. package/src/executors/native-session-target.ts +31 -0
  286. package/src/executors/pane-reaper.ts +270 -0
  287. package/src/executors/process-activity.ts +54 -0
  288. package/src/executors/run-herdr.ts +426 -0
  289. package/src/governance/approval-prompt.ts +225 -0
  290. package/src/governance/approval-store.ts +385 -0
  291. package/src/governance/execution-retention.ts +372 -0
  292. package/src/governance/file-lock.ts +210 -0
  293. package/src/governance/finalization.ts +82 -0
  294. package/src/governance/grant-store.ts +235 -0
  295. package/src/governance/init.ts +447 -0
  296. package/src/governance/lease-helper.ts +124 -0
  297. package/src/governance/lease-record.ts +131 -0
  298. package/src/governance/ledger-events.ts +222 -0
  299. package/src/governance/ledger-report.ts +396 -0
  300. package/src/governance/ledger-v3-validation.ts +384 -0
  301. package/src/governance/ledger.ts +419 -0
  302. package/src/governance/native-session.ts +264 -0
  303. package/src/governance/record.ts +294 -0
  304. package/src/governance/retention-contract.ts +201 -0
  305. package/src/governance/retention-json.ts +24 -0
  306. package/src/governance/workspace-lease.ts +429 -0
  307. package/src/index.ts +82 -92
  308. package/src/kernel/approval.ts +406 -0
  309. package/src/kernel/capabilities.ts +216 -0
  310. package/src/kernel/catalog.ts +373 -0
  311. package/src/kernel/correlation.ts +351 -0
  312. package/src/kernel/definitions.ts +215 -0
  313. package/src/kernel/delegate-types.ts +162 -0
  314. package/src/kernel/delegate.ts +375 -0
  315. package/src/kernel/delegation-approval.ts +126 -0
  316. package/src/kernel/env-names.ts +119 -0
  317. package/src/kernel/fanout.ts +106 -0
  318. package/src/kernel/grant-env.ts +174 -0
  319. package/src/kernel/model-preflight.ts +44 -0
  320. package/src/kernel/pi-tools.ts +32 -0
  321. package/src/kernel/project-paths.ts +97 -0
  322. package/src/kernel/propagation.ts +341 -0
  323. package/src/kernel/refusals.ts +64 -0
  324. package/src/kernel/resolve.ts +258 -0
  325. package/src/kernel/routing-authority.ts +121 -0
  326. package/src/kernel/run-child.ts +418 -0
  327. package/src/kernel/skill-packages.ts +329 -0
  328. package/src/kernel/skill-resources.ts +64 -0
  329. package/src/kernel/spawn.ts +156 -0
  330. package/src/kernel/workspace.ts +336 -0
  331. package/src/products/activity-timeline.ts +679 -0
  332. package/src/products/dashboard-cli.ts +250 -0
  333. package/src/products/dashboard-display-controls.ts +44 -0
  334. package/src/products/dashboard-handshake.ts +222 -0
  335. package/src/products/dashboard-herdr.ts +427 -0
  336. package/src/products/dashboard-projection.ts +389 -0
  337. package/src/products/dashboard-render.ts +260 -0
  338. package/PRODUCT-GUIDE.md +0 -155
  339. package/REQUIREMENTS.md +0 -41
  340. package/contracts/daily-view/v1/README.md +0 -114
  341. package/contracts/daily-view/v1/fixtures/view.json +0 -525
  342. package/contracts/daily-view/v1/fixtures/view.txt +0 -75
  343. package/contracts/daily-view/v1/fixtures/work.jsonl +0 -17
  344. package/contracts/daily-view/v1/p03/README.md +0 -26
  345. package/contracts/daily-view/v1/p03/fixtures/retained-executions.json +0 -241
  346. package/contracts/daily-view/v1/p03/projection.schema.json +0 -194
  347. package/contracts/daily-view/v1/p03/provenance.json +0 -21
  348. package/contracts/dashboard-host/v1/README.md +0 -176
  349. package/contracts/debrief/v1/README.md +0 -146
  350. package/contracts/debrief/v1/intervention/README.md +0 -32
  351. package/contracts/debrief/v1/intervention/fixtures/artifact-3ee11136beb864f518252e5024dae9197421fbf97b6e981d3243c782b5c44bd0.txt +0 -1
  352. package/contracts/debrief/v1/intervention/fixtures/artifact-58905d872dd3c54a9705f67b05fa82edbad7af6476ae8993faf1a7b9fadfb905.txt +0 -1
  353. package/contracts/debrief/v1/intervention/fixtures/assessment.json +0 -29
  354. package/contracts/debrief/v1/intervention/fixtures/blind-view.json +0 -20
  355. package/contracts/debrief/v1/intervention/fixtures/choice.json +0 -7
  356. package/contracts/debrief/v1/intervention/fixtures/manifest.json +0 -57
  357. package/contracts/debrief/v1/intervention/fixtures/reveal.json +0 -39
  358. package/contracts/debrief/v1/provenance.json +0 -89
  359. package/contracts/debrief/v1/work-capture/README.md +0 -38
  360. package/contracts/debrief/v1/work-capture/fixtures/batch.json +0 -17
  361. package/contracts/debrief/v1/work-capture/fixtures/cases.json +0 -184
  362. package/contracts/debrief/v1/work-capture/fixtures/review.json +0 -184
  363. package/contracts/debrief/v1/work-capture/review-request.schema.json +0 -41
  364. package/contracts/debrief/v1/work-capture/work-case.schema.json +0 -190
  365. package/contracts/debrief/v2/README.md +0 -71
  366. package/contracts/debrief/v2/input-pin.json +0 -66
  367. package/contracts/debrief/v2/intervention-upstream.md +0 -40
  368. package/contracts/debrief/v2/work-signals-upstream.md +0 -22
  369. package/contracts/dispatch-control/v1/README.md +0 -109
  370. package/contracts/dispatch-control/v1/request.schema.json +0 -19
  371. package/contracts/effect-profile/v1/README.md +0 -124
  372. package/contracts/execution-retention/v1/README.md +0 -109
  373. package/contracts/execution-retention/v2/README.md +0 -148
  374. package/contracts/execution-retention/v2/fixtures/interrupted-native-bytes.json +0 -91
  375. package/contracts/execution-retention/v2/fixtures/missing-native-session.json +0 -91
  376. package/contracts/execution-retention/v2/fixtures/native-file-unknown-branch.json +0 -91
  377. package/contracts/execution-retention/v2/fixtures/native-id-without-bytes.json +0 -91
  378. package/contracts/execution-retention/v2/fixtures/native-live-branch.json +0 -90
  379. package/contracts/execution-retention/v2/fixtures/replaced-native-session.json +0 -92
  380. package/contracts/execution-retention/v2/fixtures/result-82c620cdfeb8ca6b858cf653d7f5e2eedca5315d6244216d60e8b36f03223d6a.bin +0 -1
  381. package/contracts/execution-retention/v2/fixtures/session-2ec1f134bc739984434f7fca689e1c3d1c39fce2dcadae709e9b6faedfcc4ac7.bin +0 -3
  382. package/contracts/execution-retention/v2/fixtures/session-9bdb4bd16a901da31580acf056bda525225259e15ec409e0410480109011772f.bin +0 -3
  383. package/contracts/execution-retention/v2/manifest.schema.json +0 -858
  384. package/contracts/experiment/v1/README.md +0 -164
  385. package/contracts/factory-order/v1/README.md +0 -151
  386. package/contracts/factory-order/v1/adoption-pin.json +0 -8
  387. package/contracts/intent-control/v1/README.md +0 -135
  388. package/contracts/intent-control/v1/request.schema.json +0 -1096
  389. package/contracts/intent-control/v2/README.md +0 -34
  390. package/contracts/intent-control/v2/request.schema.json +0 -1070
  391. package/contracts/ledger/v2/README.md +0 -59
  392. package/contracts/ledger/v2/fixtures/capability-decision.json +0 -95
  393. package/contracts/ledger/v2/fixtures/check-receipt.json +0 -40
  394. package/contracts/ledger/v2/fixtures/child-lifecycle.json +0 -42
  395. package/contracts/ledger/v2/fixtures/workspace-lease.json +0 -41
  396. package/contracts/ledger/v2/ledger-event.schema.json +0 -633
  397. package/contracts/ledger/v3/README.md +0 -36
  398. package/contracts/ledger/v3/fixtures/check-receipt.json +0 -41
  399. package/contracts/ledger/v3/fixtures/child-lifecycle.json +0 -44
  400. package/contracts/ledger/v3/fixtures/workflow-fact.json +0 -40
  401. package/contracts/ledger/v3/ledger-event.schema.json +0 -955
  402. package/contracts/ledger/v4/README.md +0 -241
  403. package/contracts/ledger/v4/fixtures/layout-options.json +0 -428
  404. package/contracts/ledger/v4/fixtures/work-acceptance.json +0 -57
  405. package/contracts/ledger/v4/fixtures/work-occurrence.json +0 -44
  406. package/contracts/ledger/v4/fixtures/work-revision.json +0 -26
  407. package/contracts/ledger/v4/fixtures/work-snapshot.json +0 -73
  408. package/contracts/ledger/v4/ledger-event.schema.json +0 -162
  409. package/contracts/ordinary-control/v1/README.md +0 -59
  410. package/contracts/producer-ipc/v1/README.md +0 -137
  411. package/dist/activity-timeline.d.ts +0 -109
  412. package/dist/activity-timeline.d.ts.map +0 -1
  413. package/dist/activity-timeline.js +0 -208
  414. package/dist/activity-timeline.js.map +0 -1
  415. package/dist/approval-prompt.d.ts +0 -119
  416. package/dist/approval-prompt.d.ts.map +0 -1
  417. package/dist/approval-prompt.js +0 -133
  418. package/dist/approval-prompt.js.map +0 -1
  419. package/dist/approval-store.d.ts +0 -149
  420. package/dist/approval-store.d.ts.map +0 -1
  421. package/dist/approval-store.js +0 -314
  422. package/dist/approval-store.js.map +0 -1
  423. package/dist/approval.d.ts +0 -241
  424. package/dist/approval.d.ts.map +0 -1
  425. package/dist/approval.js +0 -268
  426. package/dist/approval.js.map +0 -1
  427. package/dist/capabilities.d.ts +0 -136
  428. package/dist/capabilities.d.ts.map +0 -1
  429. package/dist/capabilities.js +0 -203
  430. package/dist/capabilities.js.map +0 -1
  431. package/dist/catalog.d.ts +0 -98
  432. package/dist/catalog.d.ts.map +0 -1
  433. package/dist/catalog.js +0 -273
  434. package/dist/catalog.js.map +0 -1
  435. package/dist/chain.d.ts.map +0 -1
  436. package/dist/chain.js.map +0 -1
  437. package/dist/check-runner.d.ts +0 -66
  438. package/dist/check-runner.d.ts.map +0 -1
  439. package/dist/check-runner.js +0 -275
  440. package/dist/check-runner.js.map +0 -1
  441. package/dist/control-journal.d.ts +0 -20
  442. package/dist/control-journal.d.ts.map +0 -1
  443. package/dist/control-journal.js +0 -73
  444. package/dist/control-journal.js.map +0 -1
  445. package/dist/correlation.d.ts.map +0 -1
  446. package/dist/correlation.js +0 -231
  447. package/dist/correlation.js.map +0 -1
  448. package/dist/daily-dashboard-host.d.ts +0 -136
  449. package/dist/daily-dashboard-host.d.ts.map +0 -1
  450. package/dist/daily-dashboard-host.js +0 -164
  451. package/dist/daily-dashboard-host.js.map +0 -1
  452. package/dist/daily-panel.d.ts +0 -36
  453. package/dist/daily-panel.d.ts.map +0 -1
  454. package/dist/daily-panel.js +0 -84
  455. package/dist/daily-panel.js.map +0 -1
  456. package/dist/daily-view-input.d.ts +0 -44
  457. package/dist/daily-view-input.d.ts.map +0 -1
  458. package/dist/daily-view-input.js +0 -68
  459. package/dist/daily-view-input.js.map +0 -1
  460. package/dist/daily-view-render.d.ts +0 -5
  461. package/dist/daily-view-render.d.ts.map +0 -1
  462. package/dist/daily-view-render.js +0 -42
  463. package/dist/daily-view-render.js.map +0 -1
  464. package/dist/daily-view.d.ts +0 -77
  465. package/dist/daily-view.d.ts.map +0 -1
  466. package/dist/daily-view.js +0 -176
  467. package/dist/daily-view.js.map +0 -1
  468. package/dist/dashboard-cli.d.ts +0 -54
  469. package/dist/dashboard-cli.d.ts.map +0 -1
  470. package/dist/dashboard-cli.js +0 -367
  471. package/dist/dashboard-cli.js.map +0 -1
  472. package/dist/dashboard-display-controls.d.ts +0 -15
  473. package/dist/dashboard-display-controls.d.ts.map +0 -1
  474. package/dist/dashboard-display-controls.js +0 -34
  475. package/dist/dashboard-display-controls.js.map +0 -1
  476. package/dist/dashboard-handshake.d.ts +0 -42
  477. package/dist/dashboard-handshake.d.ts.map +0 -1
  478. package/dist/dashboard-handshake.js +0 -147
  479. package/dist/dashboard-handshake.js.map +0 -1
  480. package/dist/dashboard-harness.d.ts +0 -22
  481. package/dist/dashboard-harness.d.ts.map +0 -1
  482. package/dist/dashboard-harness.js +0 -89
  483. package/dist/dashboard-harness.js.map +0 -1
  484. package/dist/dashboard-herdr.d.ts +0 -55
  485. package/dist/dashboard-herdr.d.ts.map +0 -1
  486. package/dist/dashboard-herdr.js +0 -293
  487. package/dist/dashboard-herdr.js.map +0 -1
  488. package/dist/dashboard-host-contract.d.ts +0 -127
  489. package/dist/dashboard-host-contract.d.ts.map +0 -1
  490. package/dist/dashboard-host-contract.js +0 -14
  491. package/dist/dashboard-host-contract.js.map +0 -1
  492. package/dist/dashboard-host-transport.d.ts +0 -16
  493. package/dist/dashboard-host-transport.d.ts.map +0 -1
  494. package/dist/dashboard-host-transport.js +0 -127
  495. package/dist/dashboard-host-transport.js.map +0 -1
  496. package/dist/dashboard-host.d.ts +0 -239
  497. package/dist/dashboard-host.d.ts.map +0 -1
  498. package/dist/dashboard-host.js +0 -474
  499. package/dist/dashboard-host.js.map +0 -1
  500. package/dist/dashboard-menu.d.ts +0 -16
  501. package/dist/dashboard-menu.d.ts.map +0 -1
  502. package/dist/dashboard-menu.js +0 -33
  503. package/dist/dashboard-menu.js.map +0 -1
  504. package/dist/dashboard-observation.d.ts +0 -28
  505. package/dist/dashboard-observation.d.ts.map +0 -1
  506. package/dist/dashboard-observation.js +0 -87
  507. package/dist/dashboard-observation.js.map +0 -1
  508. package/dist/dashboard-projection.d.ts +0 -73
  509. package/dist/dashboard-projection.d.ts.map +0 -1
  510. package/dist/dashboard-projection.js +0 -294
  511. package/dist/dashboard-projection.js.map +0 -1
  512. package/dist/dashboard-render.d.ts.map +0 -1
  513. package/dist/dashboard-render.js +0 -212
  514. package/dist/dashboard-render.js.map +0 -1
  515. package/dist/debrief-contract.d.ts +0 -65
  516. package/dist/debrief-contract.d.ts.map +0 -1
  517. package/dist/debrief-contract.js +0 -151
  518. package/dist/debrief-contract.js.map +0 -1
  519. package/dist/debrief-fixture.d.ts +0 -16
  520. package/dist/debrief-fixture.d.ts.map +0 -1
  521. package/dist/debrief-fixture.js +0 -41
  522. package/dist/debrief-fixture.js.map +0 -1
  523. package/dist/debrief-host.d.ts +0 -59
  524. package/dist/debrief-host.d.ts.map +0 -1
  525. package/dist/debrief-host.js +0 -49
  526. package/dist/debrief-host.js.map +0 -1
  527. package/dist/debrief-render.d.ts +0 -5
  528. package/dist/debrief-render.d.ts.map +0 -1
  529. package/dist/debrief-render.js +0 -65
  530. package/dist/debrief-render.js.map +0 -1
  531. package/dist/debrief.d.ts +0 -90
  532. package/dist/debrief.d.ts.map +0 -1
  533. package/dist/debrief.js +0 -263
  534. package/dist/debrief.js.map +0 -1
  535. package/dist/definitions.d.ts.map +0 -1
  536. package/dist/definitions.js +0 -164
  537. package/dist/definitions.js.map +0 -1
  538. package/dist/delegate-types.d.ts +0 -154
  539. package/dist/delegate-types.d.ts.map +0 -1
  540. package/dist/delegate-types.js +0 -8
  541. package/dist/delegate-types.js.map +0 -1
  542. package/dist/delegate.d.ts.map +0 -1
  543. package/dist/delegate.js +0 -313
  544. package/dist/delegate.js.map +0 -1
  545. package/dist/delegation-approval.d.ts.map +0 -1
  546. package/dist/delegation-approval.js +0 -94
  547. package/dist/delegation-approval.js.map +0 -1
  548. package/dist/dispatch-control.d.ts +0 -45
  549. package/dist/dispatch-control.d.ts.map +0 -1
  550. package/dist/dispatch-control.js +0 -76
  551. package/dist/dispatch-control.js.map +0 -1
  552. package/dist/effect-profile-runtime.d.ts +0 -40
  553. package/dist/effect-profile-runtime.d.ts.map +0 -1
  554. package/dist/effect-profile-runtime.js +0 -51
  555. package/dist/effect-profile-runtime.js.map +0 -1
  556. package/dist/effect-profile.d.ts +0 -40
  557. package/dist/effect-profile.d.ts.map +0 -1
  558. package/dist/effect-profile.js +0 -152
  559. package/dist/effect-profile.js.map +0 -1
  560. package/dist/execution-id.d.ts.map +0 -1
  561. package/dist/execution-id.js.map +0 -1
  562. package/dist/execution-retention.d.ts +0 -90
  563. package/dist/execution-retention.d.ts.map +0 -1
  564. package/dist/execution-retention.js +0 -247
  565. package/dist/execution-retention.js.map +0 -1
  566. package/dist/executor.d.ts +0 -39
  567. package/dist/executor.d.ts.map +0 -1
  568. package/dist/executor.js +0 -94
  569. package/dist/executor.js.map +0 -1
  570. package/dist/experiment-contract.d.ts +0 -56
  571. package/dist/experiment-contract.d.ts.map +0 -1
  572. package/dist/experiment-contract.js +0 -80
  573. package/dist/experiment-contract.js.map +0 -1
  574. package/dist/experiment-state.d.ts +0 -22
  575. package/dist/experiment-state.d.ts.map +0 -1
  576. package/dist/experiment-state.js +0 -79
  577. package/dist/experiment-state.js.map +0 -1
  578. package/dist/experiment-store.d.ts +0 -30
  579. package/dist/experiment-store.d.ts.map +0 -1
  580. package/dist/experiment-store.js +0 -147
  581. package/dist/experiment-store.js.map +0 -1
  582. package/dist/experiment.d.ts +0 -65
  583. package/dist/experiment.d.ts.map +0 -1
  584. package/dist/experiment.js +0 -362
  585. package/dist/experiment.js.map +0 -1
  586. package/dist/factory-contract.d.ts +0 -79
  587. package/dist/factory-contract.d.ts.map +0 -1
  588. package/dist/factory-contract.js +0 -89
  589. package/dist/factory-contract.js.map +0 -1
  590. package/dist/factory-migration.d.ts +0 -20
  591. package/dist/factory-migration.d.ts.map +0 -1
  592. package/dist/factory-migration.js +0 -55
  593. package/dist/factory-migration.js.map +0 -1
  594. package/dist/factory-order.d.ts +0 -848
  595. package/dist/factory-order.d.ts.map +0 -1
  596. package/dist/factory-order.js +0 -83
  597. package/dist/factory-order.js.map +0 -1
  598. package/dist/factory-registry.d.ts +0 -121
  599. package/dist/factory-registry.d.ts.map +0 -1
  600. package/dist/factory-registry.js +0 -133
  601. package/dist/factory-registry.js.map +0 -1
  602. package/dist/fanout.d.ts.map +0 -1
  603. package/dist/fanout.js +0 -93
  604. package/dist/fanout.js.map +0 -1
  605. package/dist/file-lock.d.ts.map +0 -1
  606. package/dist/file-lock.js +0 -201
  607. package/dist/file-lock.js.map +0 -1
  608. package/dist/finalization.d.ts.map +0 -1
  609. package/dist/finalization.js.map +0 -1
  610. package/dist/git-identity.d.ts +0 -13
  611. package/dist/git-identity.d.ts.map +0 -1
  612. package/dist/git-identity.js +0 -47
  613. package/dist/git-identity.js.map +0 -1
  614. package/dist/grant-env.d.ts +0 -75
  615. package/dist/grant-env.d.ts.map +0 -1
  616. package/dist/grant-env.js +0 -154
  617. package/dist/grant-env.js.map +0 -1
  618. package/dist/grant-store.d.ts +0 -96
  619. package/dist/grant-store.d.ts.map +0 -1
  620. package/dist/grant-store.js +0 -188
  621. package/dist/grant-store.js.map +0 -1
  622. package/dist/herdr-cli.d.ts +0 -78
  623. package/dist/herdr-cli.d.ts.map +0 -1
  624. package/dist/herdr-cli.js +0 -113
  625. package/dist/herdr-cli.js.map +0 -1
  626. package/dist/herdr-name.d.ts.map +0 -1
  627. package/dist/herdr-name.js.map +0 -1
  628. package/dist/herdr-pi-lifecycle.d.ts.map +0 -1
  629. package/dist/herdr-pi-lifecycle.js +0 -22
  630. package/dist/herdr-pi-lifecycle.js.map +0 -1
  631. package/dist/herdr-poll.d.ts +0 -133
  632. package/dist/herdr-poll.d.ts.map +0 -1
  633. package/dist/herdr-poll.js +0 -222
  634. package/dist/herdr-poll.js.map +0 -1
  635. package/dist/herdr-stage.d.ts +0 -40
  636. package/dist/herdr-stage.d.ts.map +0 -1
  637. package/dist/herdr-stage.js +0 -54
  638. package/dist/herdr-stage.js.map +0 -1
  639. package/dist/herdr-start.d.ts.map +0 -1
  640. package/dist/herdr-start.js.map +0 -1
  641. package/dist/init.d.ts +0 -117
  642. package/dist/init.d.ts.map +0 -1
  643. package/dist/init.js +0 -323
  644. package/dist/init.js.map +0 -1
  645. package/dist/intent-application.d.ts +0 -17
  646. package/dist/intent-application.d.ts.map +0 -1
  647. package/dist/intent-application.js +0 -114
  648. package/dist/intent-application.js.map +0 -1
  649. package/dist/intent-control.d.ts +0 -201
  650. package/dist/intent-control.d.ts.map +0 -1
  651. package/dist/intent-control.js +0 -110
  652. package/dist/intent-control.js.map +0 -1
  653. package/dist/intent-scheduling.d.ts +0 -9
  654. package/dist/intent-scheduling.d.ts.map +0 -1
  655. package/dist/intent-scheduling.js +0 -15
  656. package/dist/intent-scheduling.js.map +0 -1
  657. package/dist/learning-connection.d.ts +0 -127
  658. package/dist/learning-connection.d.ts.map +0 -1
  659. package/dist/learning-connection.js +0 -54
  660. package/dist/learning-connection.js.map +0 -1
  661. package/dist/lease-helper.d.ts.map +0 -1
  662. package/dist/lease-helper.js +0 -94
  663. package/dist/lease-helper.js.map +0 -1
  664. package/dist/lease-record.d.ts +0 -90
  665. package/dist/lease-record.d.ts.map +0 -1
  666. package/dist/lease-record.js.map +0 -1
  667. package/dist/ledger-append.d.ts +0 -15
  668. package/dist/ledger-append.d.ts.map +0 -1
  669. package/dist/ledger-append.js +0 -94
  670. package/dist/ledger-append.js.map +0 -1
  671. package/dist/ledger-events.d.ts +0 -131
  672. package/dist/ledger-events.d.ts.map +0 -1
  673. package/dist/ledger-events.js +0 -107
  674. package/dist/ledger-events.js.map +0 -1
  675. package/dist/ledger-identifiers.d.ts.map +0 -1
  676. package/dist/ledger-identifiers.js.map +0 -1
  677. package/dist/ledger-report.d.ts +0 -134
  678. package/dist/ledger-report.d.ts.map +0 -1
  679. package/dist/ledger-report.js +0 -271
  680. package/dist/ledger-report.js.map +0 -1
  681. package/dist/ledger-v3-validation.d.ts +0 -11
  682. package/dist/ledger-v3-validation.d.ts.map +0 -1
  683. package/dist/ledger-v3-validation.js +0 -265
  684. package/dist/ledger-v3-validation.js.map +0 -1
  685. package/dist/ledger.d.ts +0 -242
  686. package/dist/ledger.d.ts.map +0 -1
  687. package/dist/ledger.js +0 -142
  688. package/dist/ledger.js.map +0 -1
  689. package/dist/measured-order.d.ts +0 -249
  690. package/dist/measured-order.d.ts.map +0 -1
  691. package/dist/measured-order.js +0 -309
  692. package/dist/measured-order.js.map +0 -1
  693. package/dist/measured-session.d.ts +0 -97
  694. package/dist/measured-session.d.ts.map +0 -1
  695. package/dist/measured-session.js +0 -134
  696. package/dist/measured-session.js.map +0 -1
  697. package/dist/model-preflight.d.ts +0 -13
  698. package/dist/model-preflight.d.ts.map +0 -1
  699. package/dist/model-preflight.js +0 -29
  700. package/dist/model-preflight.js.map +0 -1
  701. package/dist/native-session-target.d.ts +0 -9
  702. package/dist/native-session-target.d.ts.map +0 -1
  703. package/dist/native-session-target.js +0 -29
  704. package/dist/native-session-target.js.map +0 -1
  705. package/dist/native-session.d.ts +0 -59
  706. package/dist/native-session.d.ts.map +0 -1
  707. package/dist/native-session.js +0 -154
  708. package/dist/native-session.js.map +0 -1
  709. package/dist/order-schedule.d.ts +0 -37
  710. package/dist/order-schedule.d.ts.map +0 -1
  711. package/dist/order-schedule.js +0 -81
  712. package/dist/order-schedule.js.map +0 -1
  713. package/dist/ordinary-children.d.ts +0 -52
  714. package/dist/ordinary-children.d.ts.map +0 -1
  715. package/dist/ordinary-children.js +0 -93
  716. package/dist/ordinary-children.js.map +0 -1
  717. package/dist/pane-reaper.d.ts +0 -111
  718. package/dist/pane-reaper.d.ts.map +0 -1
  719. package/dist/pane-reaper.js +0 -242
  720. package/dist/pane-reaper.js.map +0 -1
  721. package/dist/pi-tools.d.ts.map +0 -1
  722. package/dist/pi-tools.js +0 -21
  723. package/dist/pi-tools.js.map +0 -1
  724. package/dist/producer-ipc-contract.d.ts +0 -29
  725. package/dist/producer-ipc-contract.d.ts.map +0 -1
  726. package/dist/producer-ipc-contract.js +0 -29
  727. package/dist/producer-ipc-contract.js.map +0 -1
  728. package/dist/producer-ipc.d.ts +0 -55
  729. package/dist/producer-ipc.d.ts.map +0 -1
  730. package/dist/producer-ipc.js +0 -143
  731. package/dist/producer-ipc.js.map +0 -1
  732. package/dist/product-files.d.ts +0 -6
  733. package/dist/product-files.d.ts.map +0 -1
  734. package/dist/product-files.js +0 -55
  735. package/dist/product-files.js.map +0 -1
  736. package/dist/progress.d.ts.map +0 -1
  737. package/dist/progress.js.map +0 -1
  738. package/dist/propagation.d.ts +0 -203
  739. package/dist/propagation.d.ts.map +0 -1
  740. package/dist/propagation.js +0 -279
  741. package/dist/propagation.js.map +0 -1
  742. package/dist/refusals.d.ts +0 -16
  743. package/dist/refusals.d.ts.map +0 -1
  744. package/dist/refusals.js +0 -55
  745. package/dist/refusals.js.map +0 -1
  746. package/dist/resolve.d.ts +0 -120
  747. package/dist/resolve.d.ts.map +0 -1
  748. package/dist/resolve.js +0 -211
  749. package/dist/resolve.js.map +0 -1
  750. package/dist/resource-budget.d.ts +0 -334
  751. package/dist/resource-budget.d.ts.map +0 -1
  752. package/dist/resource-budget.js +0 -415
  753. package/dist/resource-budget.js.map +0 -1
  754. package/dist/retention-contract.d.ts.map +0 -1
  755. package/dist/retention-contract.js +0 -104
  756. package/dist/retention-contract.js.map +0 -1
  757. package/dist/retention-json.d.ts.map +0 -1
  758. package/dist/retention-json.js.map +0 -1
  759. package/dist/routing-authority.d.ts +0 -71
  760. package/dist/routing-authority.d.ts.map +0 -1
  761. package/dist/routing-authority.js +0 -100
  762. package/dist/routing-authority.js.map +0 -1
  763. package/dist/run-child.d.ts +0 -87
  764. package/dist/run-child.d.ts.map +0 -1
  765. package/dist/run-child.js +0 -248
  766. package/dist/run-child.js.map +0 -1
  767. package/dist/run-herdr.d.ts +0 -119
  768. package/dist/run-herdr.d.ts.map +0 -1
  769. package/dist/run-herdr.js +0 -335
  770. package/dist/run-herdr.js.map +0 -1
  771. package/dist/skill-packages.d.ts +0 -116
  772. package/dist/skill-packages.d.ts.map +0 -1
  773. package/dist/skill-packages.js +0 -295
  774. package/dist/skill-packages.js.map +0 -1
  775. package/dist/skill-resources.d.ts.map +0 -1
  776. package/dist/skill-resources.js +0 -52
  777. package/dist/skill-resources.js.map +0 -1
  778. package/dist/spawn.d.ts +0 -60
  779. package/dist/spawn.d.ts.map +0 -1
  780. package/dist/spawn.js +0 -116
  781. package/dist/spawn.js.map +0 -1
  782. package/dist/vendor/adoption.d.ts +0 -129
  783. package/dist/vendor/adoption.d.ts.map +0 -1
  784. package/dist/vendor/adoption.js +0 -102
  785. package/dist/vendor/adoption.js.map +0 -1
  786. package/dist/vendor/herdr-pi-lifecycle.d.ts.map +0 -1
  787. package/dist/vendor/herdr-pi-lifecycle.js.map +0 -1
  788. package/dist/work-command.d.ts +0 -32
  789. package/dist/work-command.d.ts.map +0 -1
  790. package/dist/work-command.js +0 -179
  791. package/dist/work-command.js.map +0 -1
  792. package/dist/work-ledger-destination.d.ts +0 -20
  793. package/dist/work-ledger-destination.d.ts.map +0 -1
  794. package/dist/work-ledger-destination.js +0 -131
  795. package/dist/work-ledger-destination.js.map +0 -1
  796. package/dist/work-ledger-json.d.ts +0 -25
  797. package/dist/work-ledger-json.d.ts.map +0 -1
  798. package/dist/work-ledger-json.js +0 -267
  799. package/dist/work-ledger-json.js.map +0 -1
  800. package/dist/work-ledger-occurrences.d.ts +0 -227
  801. package/dist/work-ledger-occurrences.d.ts.map +0 -1
  802. package/dist/work-ledger-occurrences.js +0 -115
  803. package/dist/work-ledger-occurrences.js.map +0 -1
  804. package/dist/work-ledger-projection.d.ts +0 -295
  805. package/dist/work-ledger-projection.d.ts.map +0 -1
  806. package/dist/work-ledger-projection.js +0 -237
  807. package/dist/work-ledger-projection.js.map +0 -1
  808. package/dist/work-ledger-snapshot.d.ts +0 -29
  809. package/dist/work-ledger-snapshot.d.ts.map +0 -1
  810. package/dist/work-ledger-snapshot.js +0 -267
  811. package/dist/work-ledger-snapshot.js.map +0 -1
  812. package/dist/work-ledger-types.d.ts +0 -261
  813. package/dist/work-ledger-types.d.ts.map +0 -1
  814. package/dist/work-ledger-types.js +0 -13
  815. package/dist/work-ledger-types.js.map +0 -1
  816. package/dist/work-ledger-validation.d.ts +0 -14
  817. package/dist/work-ledger-validation.d.ts.map +0 -1
  818. package/dist/work-ledger-validation.js +0 -226
  819. package/dist/work-ledger-validation.js.map +0 -1
  820. package/dist/work-ledger.d.ts +0 -43
  821. package/dist/work-ledger.d.ts.map +0 -1
  822. package/dist/work-ledger.js +0 -225
  823. package/dist/work-ledger.js.map +0 -1
  824. package/dist/work-policy-registry.d.ts +0 -133
  825. package/dist/work-policy-registry.d.ts.map +0 -1
  826. package/dist/work-policy-registry.js +0 -128
  827. package/dist/work-policy-registry.js.map +0 -1
  828. package/dist/work-run.d.ts +0 -56
  829. package/dist/work-run.d.ts.map +0 -1
  830. package/dist/work-run.js +0 -102
  831. package/dist/work-run.js.map +0 -1
  832. package/dist/work-setup.d.ts +0 -40
  833. package/dist/work-setup.d.ts.map +0 -1
  834. package/dist/work-setup.js +0 -174
  835. package/dist/work-setup.js.map +0 -1
  836. package/dist/workflow-fact-id.d.ts +0 -4
  837. package/dist/workflow-fact-id.d.ts.map +0 -1
  838. package/dist/workflow-fact-id.js +0 -14
  839. package/dist/workflow-fact-id.js.map +0 -1
  840. package/dist/workflow-facts.d.ts +0 -34
  841. package/dist/workflow-facts.d.ts.map +0 -1
  842. package/dist/workflow-facts.js +0 -43
  843. package/dist/workflow-facts.js.map +0 -1
  844. package/dist/workspace-lease.d.ts +0 -40
  845. package/dist/workspace-lease.d.ts.map +0 -1
  846. package/dist/workspace-lease.js +0 -333
  847. package/dist/workspace-lease.js.map +0 -1
  848. package/dist/workspace.d.ts +0 -57
  849. package/dist/workspace.d.ts.map +0 -1
  850. package/dist/workspace.js +0 -216
  851. package/dist/workspace.js.map +0 -1
  852. package/extensions/daily-dashboard-session.ts +0 -48
  853. package/extensions/daily-work-session.ts +0 -20
  854. package/extensions/learning-outcome-session.ts +0 -38
  855. package/extensions/learning-session.ts +0 -59
  856. package/extensions/ordinary-runtime.ts +0 -14
  857. package/extensions/primary-shadow.ts +0 -11
  858. package/extensions/work-policy-session.ts +0 -139
  859. package/extensions/work-run-session.ts +0 -75
  860. package/extensions/work-runtime.ts +0 -44
  861. package/extensions/work-session.ts +0 -132
  862. package/src/activity-timeline.ts +0 -133
  863. package/src/approval-prompt.ts +0 -225
  864. package/src/approval-store.ts +0 -386
  865. package/src/approval.ts +0 -399
  866. package/src/capabilities.ts +0 -220
  867. package/src/catalog.ts +0 -306
  868. package/src/check-runner.ts +0 -387
  869. package/src/control-journal.ts +0 -26
  870. package/src/correlation.ts +0 -320
  871. package/src/daily-dashboard-host.ts +0 -105
  872. package/src/daily-panel.ts +0 -80
  873. package/src/daily-view-input.ts +0 -59
  874. package/src/daily-view-render.ts +0 -45
  875. package/src/daily-view.ts +0 -160
  876. package/src/dashboard-cli.ts +0 -340
  877. package/src/dashboard-display-controls.ts +0 -21
  878. package/src/dashboard-handshake.ts +0 -199
  879. package/src/dashboard-harness.ts +0 -37
  880. package/src/dashboard-herdr.ts +0 -363
  881. package/src/dashboard-host-contract.ts +0 -50
  882. package/src/dashboard-host-transport.ts +0 -43
  883. package/src/dashboard-host.ts +0 -244
  884. package/src/dashboard-menu.ts +0 -28
  885. package/src/dashboard-observation.ts +0 -46
  886. package/src/dashboard-projection.ts +0 -390
  887. package/src/dashboard-render.ts +0 -259
  888. package/src/debrief-contract.ts +0 -127
  889. package/src/debrief-fixture.ts +0 -29
  890. package/src/debrief-host.ts +0 -53
  891. package/src/debrief-render.ts +0 -49
  892. package/src/debrief.ts +0 -198
  893. package/src/definitions.ts +0 -211
  894. package/src/delegate-types.ts +0 -154
  895. package/src/delegate.ts +0 -348
  896. package/src/delegation-approval.ts +0 -126
  897. package/src/dispatch-control.ts +0 -81
  898. package/src/effect-profile-runtime.ts +0 -46
  899. package/src/effect-profile.ts +0 -129
  900. package/src/execution-retention.ts +0 -230
  901. package/src/executor.ts +0 -123
  902. package/src/experiment-contract.ts +0 -66
  903. package/src/experiment-state.ts +0 -44
  904. package/src/experiment-store.ts +0 -98
  905. package/src/experiment.ts +0 -236
  906. package/src/factory-contract.ts +0 -47
  907. package/src/factory-migration.ts +0 -29
  908. package/src/factory-order.ts +0 -56
  909. package/src/factory-registry.ts +0 -60
  910. package/src/fanout.ts +0 -106
  911. package/src/file-lock.ts +0 -178
  912. package/src/finalization.ts +0 -79
  913. package/src/git-identity.ts +0 -56
  914. package/src/grant-env.ts +0 -221
  915. package/src/grant-store.ts +0 -235
  916. package/src/herdr-cli.ts +0 -125
  917. package/src/herdr-pi-lifecycle.ts +0 -21
  918. package/src/herdr-poll.ts +0 -253
  919. package/src/herdr-stage.ts +0 -55
  920. package/src/init.ts +0 -389
  921. package/src/intent-application.ts +0 -91
  922. package/src/intent-control.ts +0 -107
  923. package/src/intent-scheduling.ts +0 -14
  924. package/src/learning-connection.ts +0 -70
  925. package/src/lease-helper.ts +0 -97
  926. package/src/lease-record.ts +0 -131
  927. package/src/ledger-append.ts +0 -72
  928. package/src/ledger-events.ts +0 -226
  929. package/src/ledger-report.ts +0 -357
  930. package/src/ledger-v3-validation.ts +0 -266
  931. package/src/ledger.ts +0 -369
  932. package/src/measured-order.ts +0 -72
  933. package/src/measured-session.ts +0 -70
  934. package/src/model-preflight.ts +0 -41
  935. package/src/native-session-target.ts +0 -23
  936. package/src/native-session.ts +0 -139
  937. package/src/order-schedule.ts +0 -42
  938. package/src/ordinary-children.ts +0 -59
  939. package/src/pane-reaper.ts +0 -270
  940. package/src/pi-tools.ts +0 -25
  941. package/src/producer-ipc-contract.ts +0 -26
  942. package/src/producer-ipc.ts +0 -107
  943. package/src/product-files.ts +0 -34
  944. package/src/propagation.ts +0 -333
  945. package/src/refusals.ts +0 -70
  946. package/src/resolve.ts +0 -267
  947. package/src/resource-budget.ts +0 -349
  948. package/src/retention-contract.ts +0 -84
  949. package/src/retention-json.ts +0 -20
  950. package/src/routing-authority.ts +0 -121
  951. package/src/run-child.ts +0 -303
  952. package/src/run-herdr.ts +0 -386
  953. package/src/skill-packages.ts +0 -314
  954. package/src/skill-resources.ts +0 -48
  955. package/src/spawn.ts +0 -156
  956. package/src/vendor/adoption.ts +0 -109
  957. package/src/work-command.ts +0 -197
  958. package/src/work-ledger-destination.ts +0 -113
  959. package/src/work-ledger-json.ts +0 -228
  960. package/src/work-ledger-occurrences.ts +0 -99
  961. package/src/work-ledger-projection.ts +0 -262
  962. package/src/work-ledger-snapshot.ts +0 -246
  963. package/src/work-ledger-types.ts +0 -229
  964. package/src/work-ledger-validation.ts +0 -174
  965. package/src/work-ledger.ts +0 -186
  966. package/src/work-policy-registry.ts +0 -81
  967. package/src/work-run.ts +0 -79
  968. package/src/work-setup.ts +0 -141
  969. package/src/workflow-fact-id.ts +0 -16
  970. package/src/workflow-facts.ts +0 -65
  971. package/src/workspace-lease.ts +0 -363
  972. package/src/workspace.ts +0 -308
  973. /package/contracts/{ledger/v3 → ledger-record/v1}/fixtures/capability-decision.json +0 -0
  974. /package/contracts/{ledger/v3 → ledger-record/v1}/fixtures/workspace-lease.json +0 -0
  975. /package/dist/{herdr-name.d.ts → executors/herdr-name.d.ts} +0 -0
  976. /package/dist/{herdr-name.js → executors/herdr-name.js} +0 -0
  977. /package/dist/{herdr-pi-lifecycle.d.ts → executors/herdr-pi-lifecycle.d.ts} +0 -0
  978. /package/dist/{herdr-start.d.ts → executors/herdr-start.d.ts} +0 -0
  979. /package/dist/{herdr-start.js → executors/herdr-start.js} +0 -0
  980. /package/dist/{vendor → executors/vendor}/herdr-pi-lifecycle.d.ts +0 -0
  981. /package/dist/{vendor → executors/vendor}/herdr-pi-lifecycle.js +0 -0
  982. /package/dist/{file-lock.d.ts → governance/file-lock.d.ts} +0 -0
  983. /package/dist/{finalization.d.ts → governance/finalization.d.ts} +0 -0
  984. /package/dist/{finalization.js → governance/finalization.js} +0 -0
  985. /package/dist/{lease-helper.d.ts → governance/lease-helper.d.ts} +0 -0
  986. /package/dist/{lease-record.js → governance/lease-record.js} +0 -0
  987. /package/dist/{retention-contract.d.ts → governance/retention-contract.d.ts} +0 -0
  988. /package/dist/{retention-json.d.ts → governance/retention-json.d.ts} +0 -0
  989. /package/dist/{retention-json.js → governance/retention-json.js} +0 -0
  990. /package/dist/{chain.d.ts → kernel/chain.d.ts} +0 -0
  991. /package/dist/{chain.js → kernel/chain.js} +0 -0
  992. /package/dist/{correlation.d.ts → kernel/correlation.d.ts} +0 -0
  993. /package/dist/{definitions.d.ts → kernel/definitions.d.ts} +0 -0
  994. /package/dist/{delegate.d.ts → kernel/delegate.d.ts} +0 -0
  995. /package/dist/{delegation-approval.d.ts → kernel/delegation-approval.d.ts} +0 -0
  996. /package/dist/{execution-id.d.ts → kernel/execution-id.d.ts} +0 -0
  997. /package/dist/{execution-id.js → kernel/execution-id.js} +0 -0
  998. /package/dist/{fanout.d.ts → kernel/fanout.d.ts} +0 -0
  999. /package/dist/{ledger-identifiers.d.ts → kernel/ledger-identifiers.d.ts} +0 -0
  1000. /package/dist/{ledger-identifiers.js → kernel/ledger-identifiers.js} +0 -0
  1001. /package/dist/{pi-tools.d.ts → kernel/pi-tools.d.ts} +0 -0
  1002. /package/dist/{progress.d.ts → kernel/progress.d.ts} +0 -0
  1003. /package/dist/{progress.js → kernel/progress.js} +0 -0
  1004. /package/dist/{skill-resources.d.ts → kernel/skill-resources.d.ts} +0 -0
  1005. /package/dist/{dashboard-render.d.ts → products/dashboard-render.d.ts} +0 -0
  1006. /package/src/{herdr-name.ts → executors/herdr-name.ts} +0 -0
  1007. /package/src/{herdr-start.ts → executors/herdr-start.ts} +0 -0
  1008. /package/src/{vendor → executors/vendor}/herdr-pi-lifecycle.ts +0 -0
  1009. /package/src/{chain.ts → kernel/chain.ts} +0 -0
  1010. /package/src/{execution-id.ts → kernel/execution-id.ts} +0 -0
  1011. /package/src/{ledger-identifiers.ts → kernel/ledger-identifiers.ts} +0 -0
  1012. /package/src/{progress.ts → kernel/progress.ts} +0 -0
@@ -0,0 +1,235 @@
1
+ /**
2
+ * The init choice for a directory, stored **outside** it: its grant and, in v2, explicit project-ledger
3
+ * consent.
4
+ *
5
+ * `PI_DADDY_GRANT` and `PI_DADDY_LEDGER` remain the propagation channel to children — a parent writes them
6
+ * and every child inherits them. The store is a root-session source only, so an operator does not have to
7
+ * `source` a file and restart pi after making the project choice.
8
+ *
9
+ * **Outside the workspace, and that is the whole design.** A grant is a ceiling; a ceiling a governed child
10
+ * can rewrite is not a ceiling. `<cwd>/.pi/pi-daddy/settings.json` is writable by any child holding `tool:write`, so
11
+ * storing the live grant there would let a child widen the *next* session's ceiling — ADR-0014's
12
+ * self-defeating case verbatim, which is why persisted approvals were moved out of the workspace in the
13
+ * first place. This reuses that pattern exactly: `$PI_CODING_AGENT_DIR/pi-daddy/grants/<slug>-<hash>.json`, keyed by
14
+ * the directory, unwritable by a narrowed child because a narrowed child holds no write access to `$HOME`.
15
+ *
16
+ * **It does not defend against a child holding `bash`** (ADR-0012). Nothing here does.
17
+ *
18
+ * `.pi/pi-daddy/settings.json` is written by `init` and is worth committing — it is the *reviewable record*
19
+ * of the decision, diffable in a PR. It is not the thing the enforcer reads.
20
+ */
21
+
22
+ import { createHash } from "node:crypto";
23
+ import { readFileSync } from "node:fs";
24
+ import { mkdir, readFile, rename, rm, unlink, writeFile } from "node:fs/promises";
25
+ import { randomUUID } from "node:crypto";
26
+ import { basename, dirname, join, resolve } from "node:path";
27
+ import { withFileLock, LockTimeoutError } from "./file-lock.ts";
28
+ import type { Capability } from "../kernel/resolve.ts";
29
+ import {
30
+ grantStorePath as userGrantStorePath,
31
+ projectLedgerPath as projectLedgerFile,
32
+ agentDir as resolveAgentDir,
33
+ } from "../kernel/project-paths.ts";
34
+
35
+ interface GrantFileV1 {
36
+ version: 1;
37
+ /** The directory this grant is for. Checked on read — an entry copied elsewhere is refused (R-27). */
38
+ cwd: string;
39
+ grant: Capability[];
40
+ /** When `/grants init` wrote it. Informational; nothing expires. */
41
+ writtenAt: string;
42
+ }
43
+
44
+ interface GrantFileV2 {
45
+ version: 2;
46
+ cwd: string;
47
+ grant: Capability[];
48
+ /** Explicit consent from ADR-0037's `/grants init`; never inferred from a legacy file merely existing. */
49
+ projectLedger: true;
50
+ writtenAt: string;
51
+ }
52
+
53
+ export interface StoredGrant {
54
+ grant: Capability[];
55
+ /** Whether a root session defaults to `<cwd>/.pi/pi-daddy/grants.jsonl`. False for every legacy v1 store. */
56
+ projectLedger: boolean;
57
+ }
58
+
59
+ export type GrantStoreRefusalReason = "malformed" | "unsupported-version" | "unreadable" | "wrong-cwd";
60
+ export type StoredGrantState =
61
+ { state: "absent" } | { state: "valid"; stored: StoredGrant } | { state: "refuse"; reason: GrantStoreRefusalReason };
62
+
63
+ export interface SaveGrantOptions {
64
+ projectLedger?: boolean;
65
+ }
66
+
67
+ /** `$PI_CODING_AGENT_DIR`, or pi's default. Same resolution as the approval store. */
68
+ function agentDir(): string {
69
+ return resolveAgentDir();
70
+ }
71
+
72
+ /**
73
+ * Where this directory's grant lives.
74
+ *
75
+ * Slug plus a 64-bit hash, exactly as `approvalsPath` does it and for the same two reasons: the basename
76
+ * keeps the directory legible to a human reading it, and the hash is what makes it unambiguous, since two
77
+ * checkouts can share a basename.
78
+ */
79
+ export function grantStorePath(cwd: string): string {
80
+ return userGrantStorePath(cwd); // `<agent dir>/pi-daddy/grants/<slug>-<16 hex>.json` since ADR-0076 PR 3c
81
+ }
82
+
83
+ /**
84
+ * Parse a store file's text into its versioned project choice, or null.
85
+ *
86
+ * Split out from the readers so the **one** validation lives in one place: both the sync and async paths
87
+ * must agree, and two parsers is how they come to disagree.
88
+ *
89
+ * Rejects every doubt at this parser boundary — it never constructs a partial ceiling. The session currently
90
+ * treats absent and invalid stores alike (R-175), so do not call that wider behavior fail-closed. The `cwd`
91
+ * check is R-27's: a copied file describes a directory nobody authorised it for.
92
+ */
93
+ export function parseStoredGrantState(text: string, cwd: string): StoredGrantState {
94
+ let parsed: { version?: unknown; cwd?: unknown; grant?: unknown; projectLedger?: unknown };
95
+ try {
96
+ parsed = JSON.parse(text) as typeof parsed;
97
+ } catch {
98
+ return { state: "refuse", reason: "malformed" };
99
+ }
100
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
101
+ return { state: "refuse", reason: "malformed" };
102
+ }
103
+ if (parsed.version !== 1 && parsed.version !== 2) {
104
+ return { state: "refuse", reason: "unsupported-version" };
105
+ }
106
+ if (parsed.cwd !== cwd) return { state: "refuse", reason: "wrong-cwd" };
107
+ if (!Array.isArray(parsed.grant)) return { state: "refuse", reason: "malformed" };
108
+ if (!parsed.grant.every((c) => typeof c === "string" && c.length > 0)) {
109
+ return { state: "refuse", reason: "malformed" };
110
+ }
111
+ if (parsed.version === 2 && parsed.projectLedger !== true) {
112
+ return { state: "refuse", reason: "malformed" };
113
+ }
114
+ return {
115
+ state: "valid",
116
+ stored: { grant: parsed.grant as Capability[], projectLedger: parsed.version === 2 },
117
+ };
118
+ }
119
+
120
+ export function parseStoredGrant(text: string, cwd: string): StoredGrant | null {
121
+ const result = parseStoredGrantState(text, cwd);
122
+ return result.state === "valid" ? result.stored : null;
123
+ }
124
+
125
+ /** Compatibility view for callers that need only the capability ceiling. */
126
+ export function parseGrantFile(text: string, cwd: string): Capability[] | null {
127
+ return parseStoredGrant(text, cwd)?.grant ?? null;
128
+ }
129
+
130
+ /**
131
+ * Read this directory's stored grant, synchronously.
132
+ *
133
+ * **Sync on purpose, and this is the constraint that shapes the feature.** Whether `delegate` is registered
134
+ * at all is decided when the extension factory runs (S-5: a session without `tool:delegate` must not be
135
+ * offered the tool), and that is before any `await` is possible. An async read would resolve after the
136
+ * decision it exists to inform, so the store would silently fail to grant delegation — the exact class of
137
+ * defect R-38 and R-39 were.
138
+ */
139
+ export function loadStoredGrantStateSync(cwd: string): StoredGrantState {
140
+ try {
141
+ return parseStoredGrantState(readFileSync(grantStorePath(cwd), "utf8"), cwd);
142
+ } catch (error) {
143
+ return (error as NodeJS.ErrnoException).code === "ENOENT"
144
+ ? { state: "absent" }
145
+ : { state: "refuse", reason: "unreadable" };
146
+ }
147
+ }
148
+
149
+ export function loadStoredGrantSync(cwd: string): StoredGrant | null {
150
+ const result = loadStoredGrantStateSync(cwd);
151
+ return result.state === "valid" ? result.stored : null;
152
+ }
153
+
154
+ export function loadGrantSync(cwd: string): Capability[] | null {
155
+ return loadStoredGrantSync(cwd)?.grant ?? null;
156
+ }
157
+
158
+ /** Async twin, for callers that already have one. Same parser, so they cannot disagree. */
159
+ export async function loadStoredGrantState(cwd: string): Promise<StoredGrantState> {
160
+ try {
161
+ return parseStoredGrantState(await readFile(grantStorePath(cwd), "utf8"), cwd);
162
+ } catch (error) {
163
+ return (error as NodeJS.ErrnoException).code === "ENOENT"
164
+ ? { state: "absent" }
165
+ : { state: "refuse", reason: "unreadable" };
166
+ }
167
+ }
168
+
169
+ export async function loadStoredGrant(cwd: string): Promise<StoredGrant | null> {
170
+ const result = await loadStoredGrantState(cwd);
171
+ return result.state === "valid" ? result.stored : null;
172
+ }
173
+
174
+ export async function loadGrant(cwd: string): Promise<Capability[] | null> {
175
+ return (await loadStoredGrant(cwd))?.grant ?? null;
176
+ }
177
+
178
+ /** The one project-local default ADR-0037 binds to an explicit v2 init choice. */
179
+ export function projectLedgerPath(cwd: string): string {
180
+ return projectLedgerFile(cwd);
181
+ }
182
+
183
+ export type SaveOutcome = "saved" | "failed" | "busy";
184
+
185
+ /**
186
+ * Write this directory's grant and optional project-ledger consent as one atomic choice.
187
+ *
188
+ * Locked with the same lock the ledger and the approval store use, for the same reason: two sessions in one
189
+ * directory running `/grants init` concurrently must not interleave. A lock this cannot take yields `busy`
190
+ * and changes nothing — the caller reports it and the operator retries, which is the honest outcome for a
191
+ * write that never looked at the file (R-68).
192
+ *
193
+ * `wx` on the temp file refuses to follow a pre-existing symlink, and `rename` is atomic within a
194
+ * filesystem, so a reader never sees a half-written grant. Both copied from `writeFileSafely`, deliberately
195
+ * — a second, subtly different atomic-write is how the two come to disagree about what "safe" meant.
196
+ */
197
+ export async function saveGrant(
198
+ cwd: string,
199
+ grant: Capability[],
200
+ options: SaveGrantOptions = {},
201
+ ): Promise<SaveOutcome> {
202
+ const path = grantStorePath(cwd);
203
+ const common = { cwd, grant: [...grant].sort(), writtenAt: new Date().toISOString() };
204
+ const file: GrantFileV1 | GrantFileV2 = options.projectLedger
205
+ ? { version: 2, ...common, projectLedger: true }
206
+ : { version: 1, ...common };
207
+ try {
208
+ await mkdir(dirname(path), { recursive: true });
209
+ return await withFileLock(path, "grant store", async () => {
210
+ const temp = `${path}.${process.pid}.${randomUUID()}.tmp`;
211
+ try {
212
+ await writeFile(temp, `${JSON.stringify(file, null, 2)}\n`, { encoding: "utf8", flag: "wx" });
213
+ await rename(temp, path);
214
+ return "saved" as const;
215
+ } catch {
216
+ await unlink(temp).catch(() => undefined);
217
+ return "failed" as const;
218
+ }
219
+ });
220
+ } catch (error) {
221
+ return error instanceof LockTimeoutError ? "busy" : "failed";
222
+ }
223
+ }
224
+
225
+ /** Remove this directory's stored grant. True when a file was there to remove. */
226
+ export async function clearGrant(cwd: string): Promise<boolean> {
227
+ const path = grantStorePath(cwd);
228
+ try {
229
+ await readFile(path, "utf8");
230
+ } catch {
231
+ return false;
232
+ }
233
+ await rm(path, { force: true }).catch(() => undefined);
234
+ return true;
235
+ }
@@ -0,0 +1,447 @@
1
+ /**
2
+ * `pi-daddy init` — scaffold a governed project from the skill packages already installed (B2, P3).
3
+ *
4
+ * Legacy unregistered npm packages can be scaffolded per skill: create a directory, copy the
5
+ * body and declaration copies plus a starting `PI_DADDY_GRANT`. Configured enabled Pi resources
6
+ * are referenced where installed instead (ADR-0074); no competing .pi/skills copy is created.
7
+ *
8
+ * **The line it does not cross, and the reason this module exists at all:** `init` writes files an operator
9
+ * then **reviews, edits and commits**. It never chooses a ceiling. A skill that declares `allowed-tools` is
10
+ * copied *verbatim* — the author's declaration is the ceiling, and re-deriving it here would put a second
11
+ * opinion between the file and the enforcer. A skill that declares none is copied with a **commented**
12
+ * placeholder and stays unspawnable until a human fills it in.
13
+ *
14
+ * **What it DOES choose is the starting grant, which is a stronger act** — ADR-0029, added after a reviewer
15
+ * pointed out that ADR-0028 drew its boundary around the wrong object. The handoff's reason a third party
16
+ * may safely author `allowed-tools` is that *"the operator's `PI_DADDY_GRANT` still bounds it"*; a
17
+ * generated union gives the bound and the bounded one author, and it is not the operator. So capabilities
18
+ * that can change a machine are emitted **commented** (`./grant-env.ts`).
19
+ *
20
+ * The placeholder is deliberately not a working example. Uncommenting it unedited yields capability ids
21
+ * like `tool:<list` which the catalog refuses as unknown — a loud failure, in the direction rule 8 asks
22
+ * for, rather than a grant nobody decided.
23
+ */
24
+
25
+ import { lstat, mkdir, open, rm, writeFile } from "node:fs/promises";
26
+ import { dirname, join } from "node:path";
27
+ import { agentCapability, workspaceCapability } from "../kernel/capabilities.ts";
28
+ import { ceilingForDefinition } from "../kernel/definitions.ts";
29
+ import { runWithFinalizers } from "./finalization.ts";
30
+ import {
31
+ ALWAYS_LIVE,
32
+ assertGrantIsWritable,
33
+ isLiveByDefault,
34
+ renderProjectSettings,
35
+ type GrantEnvSkill,
36
+ } from "../kernel/grant-env.ts";
37
+ import { PI_BUILTIN_TOOLS } from "../kernel/pi-tools.ts";
38
+ import type { Capability } from "../kernel/resolve.ts";
39
+ import type { SkillPackage } from "../kernel/skill-packages.ts";
40
+ import {
41
+ PI_PROJECT_DIR,
42
+ PROJECT_FILES,
43
+ PROJECT_GITIGNORE_CONTENT,
44
+ PROJECT_STATE_DIRNAME,
45
+ piProjectDir,
46
+ projectGitignorePath,
47
+ projectSettingsPath,
48
+ projectStateDir,
49
+ } from "../kernel/project-paths.ts";
50
+ import { spawnSync } from "node:child_process";
51
+
52
+ /**
53
+ * Count declarations, not authorizations (R-73). Both pattern and needs-withheld mean the skill
54
+ * declared a ceiling; only undeclared means it did not. The CLI must report the same distinction.
55
+ */
56
+ export function countDeclaring(skills: PlannedSkill[], from: string): number {
57
+ return skills.filter((s) => s.from === from && s.withheld !== "undeclared").length;
58
+ }
59
+
60
+ export type WithholdReason = "undeclared" | "pattern" | "needs-withheld";
61
+
62
+ export interface PlannedSkill {
63
+ name: string;
64
+ /** Which package it came from, as `name@version`. */
65
+ from: string;
66
+ sourcePath: string;
67
+ targetPath: string;
68
+ /** Configured skills stay at their installed/local source, including when --force is used. */
69
+ referenced?: boolean;
70
+ /** Exactly what would be written — the file verbatim, or the file plus a commented note. */
71
+ content: string;
72
+ /** The declared ceiling, empty when the declaration is absent or unusable. */
73
+ ceiling: Capability[];
74
+ withheld: WithholdReason | null;
75
+ /** e.g. a sub-tool pattern pi's `--tools` cannot express. Reported, never reinterpreted. */
76
+ notes: string[];
77
+ }
78
+
79
+ export interface InitPlan {
80
+ skills: PlannedSkill[];
81
+ /** Definitions two packages both declare. First wins; the loser is named rather than silently dropped. */
82
+ collisions: string[];
83
+ /** The live grant — what `settings.json` records and the grant store applies. */
84
+ grant: Capability[];
85
+ /** Withheld capability → the definitions that declared it (ADR-0029). Emitted commented. */
86
+ withheldCapabilities: Map<Capability, string[]>;
87
+ /** `workspace:<id>` this project could route to (ADR-0035). Always commented — `init` does not choose. */
88
+ routableWorkspaces: Capability[];
89
+ /** `<cwd>/.pi/pi-daddy` — created owner-only by apply. */
90
+ stateDir: string;
91
+ settingsPath: string;
92
+ settingsContent: string;
93
+ gitignorePath: string;
94
+ /** Capabilities a declared ceiling names that pi 0.84.1 has no tool for — a caution, not a verdict. */
95
+ cautions: string[];
96
+ }
97
+
98
+ const PLACEHOLDER = [
99
+ "# pi-daddy: this skill declares no `allowed-tools`, so it CANNOT be spawned as a governed sub-agent —",
100
+ "# an undeclared capability set is treated as NONE, never as everything. Decide what it needs, then",
101
+ "# uncomment and complete the line below. pi-daddy does not choose this for you: the capability set is",
102
+ "# the thing you are meant to review and commit.",
103
+ "# pi 0.84.1's tools: " + PI_BUILTIN_TOOLS.join(", ") + ".",
104
+ "# allowed-tools: <list the tools this skill needs, e.g. Read, Grep>",
105
+ ];
106
+
107
+ /**
108
+ * A copied file that is unspawnable for a reason an operator cannot see by reading it.
109
+ *
110
+ * The undeclared case got four explanatory lines from the start; a pattern-carrying one got nothing, so
111
+ * opening `.pi/skills/git-ops/SKILL.md` to find out why it will not spawn showed a perfectly ordinary file.
112
+ * Same argument, opposite treatment — now the same treatment.
113
+ */
114
+ const patternNote = (patterns: string[]) => [
115
+ "# pi-daddy: this skill CANNOT be spawned as a governed sub-agent. Its `allowed-tools` restricts a tool",
116
+ `# with a pattern (${patterns.join(", ")}), and pi's --tools matches whole tool names only — granting the`,
117
+ "# bare tool would widen the declaration and dropping it would silently narrow, so neither is done.",
118
+ "# Replace the pattern with whole tool names to make it spawnable.",
119
+ ];
120
+
121
+ /**
122
+ * The file to write for one skill: verbatim when it declares a usable ceiling, plus a commented note when
123
+ * it does not.
124
+ *
125
+ * Inserted at the END of the frontmatter block, so the rest of the file — including its own key order and
126
+ * its body — is byte-identical to the package's. A `#` line is a YAML comment and this package's
127
+ * frontmatter reader skips it, so an undeclared copy is still *undeclared*: not spawnable until a human
128
+ * edits it, which is the whole point.
129
+ */
130
+ export function withPlaceholder(text: string, declared: boolean, note: string[] = PLACEHOLDER): string {
131
+ if (declared) return text;
132
+ const match = /^(---\r?\n)([\s\S]*?)(\r?\n---(?:\r?\n|$))/.exec(text);
133
+ // No frontmatter at all means `parseSkillDefinition` returned null and this skill was never discovered;
134
+ // inventing one here would invent a file shape. Left exactly as it is.
135
+ if (!match) return text;
136
+ const [full, opening, body, close] = match;
137
+ const eol = close.startsWith("\r\n") ? "\r\n" : "\n";
138
+ return opening + body + eol + note.join(eol) + close + text.slice(full.length);
139
+ }
140
+
141
+ /** `tool:` ids pi 0.84.1 has no tool for. `delegate` is this package's own, hence the exemption. */
142
+ function unknownToolIds(capabilities: Capability[]): Capability[] {
143
+ const builtins = new Set<string>(PI_BUILTIN_TOOLS);
144
+ return capabilities.filter(
145
+ (c) => c.startsWith("tool:") && c !== ALWAYS_LIVE && !builtins.has(c.slice("tool:".length)),
146
+ );
147
+ }
148
+
149
+ /**
150
+ * Decide what `init` would write. Pure: no filesystem, no npm, no decisions taken on the operator's behalf.
151
+ *
152
+ * The grant is **the read-only part** of what the copied skills declare, plus one `agent:` id per definition
153
+ * that can actually run within it, plus `tool:delegate` — without which the session registers no delegation
154
+ * tools at all and the whole file is inert. Everything else is emitted commented, named, and one uncomment
155
+ * away (ADR-0029).
156
+ */
157
+ export function planInit(
158
+ packages: SkillPackage[],
159
+ cwd: string,
160
+ /**
161
+ * Ids from the operator's workspace registry, when one is configured — read by the CALLER, because
162
+ * `planInit` is pure and stays that way.
163
+ *
164
+ * ADR-0035 made routing a capability and said `init` "scaffolds the registered ids so the common path is a
165
+ * one-line grant edit". It did not: `init` had never heard of the registry, so the ADR's own stated
166
+ * migration path for a breaking change did not exist. These are emitted **commented**, never live —
167
+ * offering the ids while refusing to choose among them is exactly ADR-0028's position.
168
+ */
169
+ registeredWorkspaceIds: readonly string[] = [],
170
+ ): InitPlan {
171
+ const skills: PlannedSkill[] = [];
172
+ const collisions: string[] = [];
173
+ const seen = new Set<string>();
174
+
175
+ for (const pkg of packages) {
176
+ for (const skill of pkg.skills) {
177
+ const name = skill.definition.name;
178
+ if (seen.has(name)) {
179
+ collisions.push(`${name} (also in ${pkg.name}@${pkg.version}, not written)`);
180
+ continue;
181
+ }
182
+ seen.add(name);
183
+
184
+ const ceiling = ceilingForDefinition(skill.definition);
185
+ const notes: string[] = [];
186
+ let withheld: WithholdReason | null = null;
187
+ let note = PLACEHOLDER;
188
+ if (ceiling.undeclared) withheld = "undeclared";
189
+ else if (ceiling.patterns.length > 0) {
190
+ withheld = "pattern";
191
+ note = patternNote(ceiling.patterns);
192
+ notes.push(
193
+ `declares ${ceiling.patterns.join(", ")} — pi's --tools matches whole tool names only, so a ` +
194
+ `sub-tool pattern is refused rather than reinterpreted (granting the bare tool would widen it)`,
195
+ );
196
+ }
197
+
198
+ skills.push({
199
+ name,
200
+ from: `${pkg.name}@${pkg.version}`,
201
+ sourcePath: skill.path,
202
+ targetPath: skill.referenced ? skill.path : join(piProjectDir(cwd), "skills", name, "SKILL.md"),
203
+ referenced: skill.referenced,
204
+ content: withPlaceholder(skill.text, withheld === null, note),
205
+ ceiling: ceiling.capabilities,
206
+ withheld,
207
+ notes,
208
+ });
209
+ }
210
+ }
211
+
212
+ // ADR-0029: split what the declared ceilings ask for into what `init` grants live and what it comments.
213
+ const declared = skills.filter((s) => s.withheld === null);
214
+ const withheldCapabilities = new Map<Capability, string[]>();
215
+ for (const skill of declared) {
216
+ for (const capability of skill.ceiling) {
217
+ if (isLiveByDefault(capability)) continue;
218
+ // A routing destination is withheld but does NOT belong in this map, and the difference is not
219
+ // cosmetic. This map drives two things: the "WITHHELD BY DEFAULT — these can change your machine"
220
+ // block, and `/grants init`'s dialog. Review found a `workspace:` id reaching both — described to the
221
+ // operator with `tool:bash`'s rationale (routing does not change your machine, and unlike `bash` it
222
+ // *is* gateable), and then granted **live and persisted** on one "Yes", off a third-party package's
223
+ // declaration. That is the rule `grant-env.ts` states — "does not become live because a package asked
224
+ // for it" — honoured by the rendered file and broken by the dialog beside it: two surfaces of one
225
+ // command disagreeing, which is R-28's shape inside the fix for R-28.
226
+ //
227
+ // Which worktree a child starts in is not derivable from a declaration (ADR-0028), so `init` lists
228
+ // routing and never grants it. `routableWorkspaces` below is where these go; the definition that
229
+ // declared one still loses its live `agent:` id via the `needs-withheld` pass, so nothing becomes
230
+ // spawnable behind the operator's back either.
231
+ if (capability.startsWith("workspace:")) continue;
232
+ withheldCapabilities.set(capability, [...(withheldCapabilities.get(capability) ?? []), skill.name]);
233
+ }
234
+ }
235
+
236
+ // A definition needing a withheld capability does not get a live `agent:` id either: authorising it to run
237
+ // and then refusing it at spawn time is a worse answer than not authorising it, and it would put an
238
+ // `agent:` id in the grant whose definition cannot work — the shape ADR-0028 rule 3 already refuses.
239
+ for (const skill of declared) {
240
+ if (skill.ceiling.some((c) => !isLiveByDefault(c))) skill.withheld = "needs-withheld";
241
+ }
242
+
243
+ const authorised = skills.filter((s) => s.withheld === null);
244
+ const written = new Set(authorised.map((s) => s.name));
245
+ // `agent:<other>` in a ceiling is legitimate — it is how a delegator learns which definitions IT may
246
+ // spawn — but a name `init` did not write here would authorise a file from another skill root that the
247
+ // operator is not reviewing, including `~/.pi/agent/skills`, which other tools install into. Reported,
248
+ // never granted: the same objection ADR-0028 rule 3 makes to authorising an undeclared skill.
249
+ const crossReferences: { from: string; capability: Capability }[] = [];
250
+ const live = new Set<Capability>([ALWAYS_LIVE]);
251
+ for (const skill of authorised) {
252
+ live.add(agentCapability(skill.name));
253
+ for (const capability of skill.ceiling) {
254
+ if (capability.startsWith("agent:") && !written.has(capability.slice("agent:".length))) {
255
+ crossReferences.push({ from: skill.name, capability });
256
+ continue;
257
+ }
258
+ live.add(capability);
259
+ }
260
+ }
261
+ const grant = [...live].sort();
262
+
263
+ const cautions = authorised.flatMap((s) =>
264
+ unknownToolIds(s.ceiling).map(
265
+ (c) =>
266
+ `${s.name} declares ${c}, which pi 0.84.1 has no tool for — unless an extension provides it, ` +
267
+ `spawning ${s.name} is refused as an unknown capability`,
268
+ ),
269
+ );
270
+
271
+ // R-78's structural backstop. Throws rather than rendering something a shell could read as more than a
272
+ // value, so a gap in the per-entry whitelist costs a refusal instead of an injection.
273
+ assertGrantIsWritable(grant);
274
+
275
+ const describe: Record<WithholdReason, (s: PlannedSkill) => string> = {
276
+ undeclared: (s) => "declares no `allowed-tools` — fill it in, then add `agent:" + s.name + "` below",
277
+ pattern: (s) => s.notes.join("; "),
278
+ "needs-withheld": (s) =>
279
+ `needs ${s.ceiling.filter((c) => !isLiveByDefault(c)).join(", ")}, withheld by default — see below`,
280
+ };
281
+
282
+ const grantEnvSkills: GrantEnvSkill[] = skills.map((s) => ({
283
+ name: s.name,
284
+ ceiling: s.ceiling,
285
+ ...(s.withheld ? { unspawnable: describe[s.withheld](s) } : {}),
286
+ }));
287
+
288
+ // Registry ids the operator could route to, plus any a copied definition actually declares — a package
289
+ // naming `workspace:prod` is evidence that id matters here, and it must still be uncommented by hand.
290
+ const declaredWorkspaces = skills.flatMap((s) => s.ceiling.filter((c) => c.startsWith("workspace:")));
291
+ const routableWorkspaces = [
292
+ ...new Set([...registeredWorkspaceIds.map(workspaceCapability), ...declaredWorkspaces]),
293
+ ].sort();
294
+
295
+ return {
296
+ skills,
297
+ collisions,
298
+ grant,
299
+ withheldCapabilities,
300
+ routableWorkspaces,
301
+ stateDir: projectStateDir(cwd),
302
+ settingsPath: projectSettingsPath(cwd),
303
+ gitignorePath: projectGitignorePath(cwd),
304
+ settingsContent: renderProjectSettings({
305
+ skills: grantEnvSkills,
306
+ live: grant,
307
+ withheld: withheldCapabilities,
308
+ withheldDefinitions: skills.filter((s) => s.withheld === "needs-withheld").map((s) => s.name),
309
+ crossReferences,
310
+ cautions,
311
+ routableWorkspaces,
312
+ }),
313
+ cautions,
314
+ };
315
+ }
316
+
317
+ export interface InitOutcome {
318
+ written: string[];
319
+ /** Present already, so left alone. `init` never silently overwrites an edited ceiling. */
320
+ kept: string[];
321
+ failed: { path: string; error: string }[];
322
+ }
323
+
324
+ /**
325
+ * Create a file only if nothing is there, and **never through a symlink**.
326
+ *
327
+ * Both properties come from `O_CREAT|O_EXCL` (`flag: "wx"`), and both were defects in the first version
328
+ * (R-79). It probed for existence with `readFile` and then called `writeFile`:
329
+ *
330
+ * - `readFile` conflates *unreadable* with *absent*, so an operator's `SKILL.md` with restrictive
331
+ * permissions was reported `wrote` and their narrowed `allowed-tools: Read` was replaced by the
332
+ * package's wider one — **without `--force`**, falsifying this package's own documented "Kept" rule.
333
+ * A FIFO at the target path hung the probe forever, with no timeout anywhere in the path.
334
+ * - `writeFile` follows symlinks, so a dangling symlink at a target path created the file at the link's
335
+ * destination, outside the project, while reporting an in-project path. That is **B-I6**, which
336
+ * `approval-store.ts` already fixed for the approval store under ADR-0014 — a new writer in the same
337
+ * package reintroducing a defect the package documents as closed, and whose comment says in so many
338
+ * words *"never through a symlink"*.
339
+ *
340
+ * `wx` fails with `EEXIST` on anything at the path, including a dangling symlink, so there is no probe, no
341
+ * race between the probe and the write, and no way to write through a link.
342
+ */
343
+ async function createUnlessPresent(path: string, content: string, outcome: InitOutcome): Promise<void> {
344
+ try {
345
+ await mkdir(join(path, ".."), { recursive: true });
346
+ const handle = await open(path, "wx");
347
+ await runWithFinalizers(
348
+ () => handle.writeFile(content, "utf8"),
349
+ [{ label: "new-file handle cleanup failed", run: () => handle.close() }],
350
+ );
351
+ outcome.written.push(path);
352
+ } catch (error) {
353
+ if ((error as { code?: string }).code === "EEXIST") outcome.kept.push(path);
354
+ else outcome.failed.push({ path, error: error instanceof Error ? error.message : String(error) });
355
+ }
356
+ }
357
+
358
+ /** Replace a file, unlinking first so a symlink is REPLACED rather than written through. */
359
+ async function replace(path: string, content: string, outcome: InitOutcome): Promise<void> {
360
+ try {
361
+ await mkdir(join(path, ".."), { recursive: true });
362
+ // `rm` unlinks the LINK, never its target — which is exactly the semantics `--force` should have.
363
+ await rm(path, { force: true });
364
+ await writeFile(path, content, { encoding: "utf8", flag: "wx" });
365
+ outcome.written.push(path);
366
+ } catch (error) {
367
+ outcome.failed.push({ path, error: error instanceof Error ? error.message : String(error) });
368
+ }
369
+ }
370
+
371
+ /**
372
+ * Apply a plan.
373
+ *
374
+ * **Existing files are kept, not overwritten**, and that default is load-bearing rather than polite: the
375
+ * edit an operator makes to one of these files IS the capability decision, and the second run of a
376
+ * scaffolding command is exactly when it would be destroyed.
377
+ *
378
+ * **`--force` never regenerates `settings.json`** (R-79). It rewrites the definition copies, which is the
379
+ * documented re-sync path for R-74 — but the grant file is the *reviewed artifact*, and an operator who had
380
+ * deleted `agent:build` and added a ledger path would have had both silently restored to generated defaults
381
+ * by a command whose usage text mentions only `allowed-tools`. Deleting the file is how to regenerate it,
382
+ * and that is not something anyone does by accident.
383
+ */
384
+ /**
385
+ * Whether git would ignore `settings.json` anyway — the common case, because most projects' root `.gitignore`
386
+ * lists `.pi/`, and git never descends into an ignored directory, so the nested `!settings.json` cannot
387
+ * re-include it (ADR-0076 PR 3c review finding). `true` = ignored, `false` = tracked-or-untracked, `null` =
388
+ * not a git checkout or git unavailable; the caller only warns on `true`.
389
+ */
390
+ export async function settingsIgnoredByGit(settingsPath: string): Promise<boolean | null> {
391
+ try {
392
+ const { status } = spawnSync(
393
+ "git",
394
+ ["-C", dirname(dirname(dirname(settingsPath))), "check-ignore", "-q", "--", settingsPath],
395
+ {
396
+ stdio: "ignore",
397
+ timeout: 5000,
398
+ },
399
+ );
400
+ if (status === 0) return true;
401
+ if (status === 1) return false;
402
+ return null; // 128: not a repository, or git refused
403
+ } catch {
404
+ return null;
405
+ }
406
+ }
407
+
408
+ /** The two lines an operator adds to the root `.gitignore` so the reviewable record is committable. */
409
+ export const GITIGNORE_REINCLUDE_LINES = [
410
+ `!${PI_PROJECT_DIR}/`,
411
+ `!${PI_PROJECT_DIR}/${PROJECT_STATE_DIRNAME}/${PROJECT_FILES.settings}`,
412
+ ];
413
+
414
+ export async function applyInit(plan: InitPlan, options: { force?: boolean } = {}): Promise<InitOutcome> {
415
+ const outcome: InitOutcome = { written: [], kept: [], failed: [] };
416
+ // pi's `.pi` first, then our owner-only state directory inside it. Existing operator/Pi state is never
417
+ // chmodded, followed through a symlink, or reused if it is not a directory.
418
+ for (const dir of [dirname(plan.stateDir), plan.stateDir]) {
419
+ try {
420
+ await mkdir(dir, { mode: 0o700 });
421
+ const created = await lstat(dir);
422
+ if (!created.isDirectory() || created.isSymbolicLink()) throw Error("private state directory creation failed");
423
+ } catch (error) {
424
+ if ((error as { code?: string }).code !== "EEXIST") {
425
+ outcome.failed.push({ path: dir, error: error instanceof Error ? error.message : String(error) });
426
+ return outcome;
427
+ }
428
+ const existing = await lstat(dir);
429
+ if (existing.isSymbolicLink() || !existing.isDirectory()) {
430
+ outcome.failed.push({
431
+ path: dir,
432
+ error: "existing state path is not a directory; it was not followed or changed",
433
+ });
434
+ return outcome;
435
+ }
436
+ }
437
+ }
438
+ const force = options.force === true;
439
+ for (const skill of plan.skills) {
440
+ if (skill.referenced) continue;
441
+ if (force) await replace(skill.targetPath, skill.content, outcome);
442
+ else await createUnlessPresent(skill.targetPath, skill.content, outcome);
443
+ }
444
+ await createUnlessPresent(plan.settingsPath, plan.settingsContent, outcome);
445
+ await createUnlessPresent(plan.gitignorePath, PROJECT_GITIGNORE_CONTENT, outcome);
446
+ return outcome;
447
+ }