@astrosheep/keiyaku 4.5.29 → 4.6.2

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 (418) hide show
  1. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku/SKILL.md +0 -13
  2. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/SKILL.md +47 -78
  3. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/references/automation.md +54 -41
  4. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-babysit/SKILL.md +10 -0
  5. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-bind/SKILL.md +27 -9
  6. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-workflow/SKILL.md +68 -71
  7. package/build/src/akuma/akuma-call.d.ts +53 -0
  8. package/build/src/akuma/akuma-call.js +113 -0
  9. package/build/src/akuma/akuma-instance.d.ts +20 -18
  10. package/build/src/akuma/akuma-instance.js +65 -175
  11. package/build/src/akuma/akuma-observe.d.ts +3 -21
  12. package/build/src/akuma/akuma-observe.js +7 -24
  13. package/build/src/akuma/{akuma-handle.d.ts → akuma-owner.d.ts} +55 -27
  14. package/build/src/akuma/{akuma-handle.js → akuma-owner.js} +24 -23
  15. package/build/src/akuma/akuma-selection-execution.d.ts +51 -0
  16. package/build/src/akuma/akuma-selection-execution.js +134 -0
  17. package/build/src/akuma/{fleet-execution.d.ts → akuma-wait.d.ts} +24 -44
  18. package/build/src/akuma/akuma-wait.js +113 -0
  19. package/build/src/akuma/akuma.d.ts +35 -89
  20. package/build/src/akuma/akuma.js +148 -30
  21. package/build/src/akuma/archetype.d.ts +12 -0
  22. package/build/src/akuma/archetype.js +47 -19
  23. package/build/src/akuma/body.d.ts +76 -36
  24. package/build/src/akuma/body.js +84 -49
  25. package/build/src/akuma/call-initial-tell.d.ts +131 -22
  26. package/build/src/akuma/call-initial-tell.js +31 -1
  27. package/build/src/akuma/call-request.d.ts +237 -31
  28. package/build/src/akuma/call-request.js +67 -94
  29. package/build/src/akuma/coordinate.d.ts +15 -5
  30. package/build/src/akuma/coordinate.js +12 -22
  31. package/build/src/akuma/dispatch-association.d.ts +1 -1
  32. package/build/src/akuma/dispatch-association.js +1 -10
  33. package/build/src/akuma/heart/activity-schema.d.ts +325 -0
  34. package/build/src/akuma/heart/activity-schema.js +53 -0
  35. package/build/src/akuma/heart/facts.d.ts +1 -6
  36. package/build/src/akuma/heart/index.d.ts +3 -1
  37. package/build/src/akuma/heart/index.js +4 -1
  38. package/build/src/akuma/heart/rows.d.ts +49 -2
  39. package/build/src/akuma/heart/rows.js +16 -2
  40. package/build/src/akuma/heart/soul.d.ts +1 -0
  41. package/build/src/akuma/heart/soul.js +6 -4
  42. package/build/src/akuma/heart/tells.d.ts +1 -0
  43. package/build/src/akuma/heart/tells.js +18 -0
  44. package/build/src/akuma/identity.d.ts +10 -7
  45. package/build/src/akuma/identity.js +23 -0
  46. package/build/src/akuma/index.d.ts +10 -8
  47. package/build/src/akuma/index.js +2 -2
  48. package/build/src/akuma/nuke.d.ts +3 -0
  49. package/build/src/akuma/nuke.js +13 -7
  50. package/build/src/akuma/projection.d.ts +0 -5
  51. package/build/src/akuma/projection.js +22 -43
  52. package/build/src/akuma/provider-recipe.d.ts +58 -13
  53. package/build/src/akuma/provider-recipe.js +62 -80
  54. package/build/src/akuma/provider.d.ts +6 -76
  55. package/build/src/akuma/provider.js +11 -219
  56. package/build/src/akuma/providers/acp/config.d.ts +2 -0
  57. package/build/src/akuma/providers/acp/config.js +26 -1
  58. package/build/src/akuma/providers/acp/core.d.ts +7 -0
  59. package/build/src/akuma/providers/acp/core.js +49 -18
  60. package/build/src/akuma/providers/acp/index.js +14 -6
  61. package/build/src/akuma/providers/grok-build/index.js +44 -13
  62. package/build/src/akuma/providers/index.d.ts +3 -3
  63. package/build/src/akuma/providers/index.js +2 -13
  64. package/build/src/akuma/providers/opencode-sdk/event-stream.d.ts +28 -0
  65. package/build/src/akuma/providers/opencode-sdk/event-stream.js +92 -0
  66. package/build/src/akuma/providers/opencode-sdk/events.d.ts +0 -1
  67. package/build/src/akuma/providers/opencode-sdk/index.js +200 -64
  68. package/build/src/akuma/providers/opencode-sdk/session.d.ts +41 -1
  69. package/build/src/akuma/providers/opencode-sdk/session.js +69 -2
  70. package/build/src/akuma/providers/pi/events.js +5 -2
  71. package/build/src/akuma/providers/pi/index.d.ts +3 -4
  72. package/build/src/akuma/providers/pi/index.js +99 -45
  73. package/build/src/akuma/publication.d.ts +84 -3
  74. package/build/src/akuma/publication.js +145 -2
  75. package/build/src/akuma/read-pool.d.ts +2 -0
  76. package/build/src/akuma/read-pool.js +15 -0
  77. package/build/src/akuma/request-rendezvous.js +10 -0
  78. package/build/src/akuma/request-serve.js +7 -0
  79. package/build/src/akuma/request-wire.d.ts +14 -26
  80. package/build/src/akuma/request-wire.js +4 -0
  81. package/build/src/akuma/requests.d.ts +0 -2
  82. package/build/src/akuma/requests.js +0 -17
  83. package/build/src/akuma/{fleet-observation.d.ts → selection-observation.d.ts} +37 -36
  84. package/build/src/akuma/selection-observation.js +65 -0
  85. package/build/src/akuma/{fleet-owner-port.d.ts → selection-owner-port.d.ts} +3 -3
  86. package/build/src/akuma/{fleet-owner-port.js → selection-owner-port.js} +11 -17
  87. package/build/src/akuma/{fleet-request.d.ts → selection-request.d.ts} +42 -82
  88. package/build/src/akuma/{fleet-request.js → selection-request.js} +92 -136
  89. package/build/src/akuma/turn-drive.js +73 -14
  90. package/build/src/akuma-body.js +91 -56
  91. package/build/src/body/amend.d.ts +5 -0
  92. package/build/src/body/amend.js +26 -50
  93. package/build/src/body/arc.d.ts +4 -2
  94. package/build/src/body/arc.js +19 -26
  95. package/build/src/body/criteria.d.ts +6 -0
  96. package/build/src/body/criteria.js +37 -0
  97. package/build/src/body/decode.js +5 -42
  98. package/build/src/body/region.d.ts +5 -0
  99. package/build/src/body/region.js +45 -2
  100. package/build/src/body/render.js +2 -4
  101. package/build/src/cli/activity.d.ts +26 -0
  102. package/build/src/cli/activity.js +75 -0
  103. package/build/src/cli/actor.d.ts +3 -1
  104. package/build/src/cli/actor.js +15 -2
  105. package/build/src/cli/commands/akuma-grammar.d.ts +75 -0
  106. package/build/src/cli/commands/akuma-grammar.js +414 -0
  107. package/build/src/cli/commands/akuma.d.ts +5 -69
  108. package/build/src/cli/commands/akuma.js +352 -319
  109. package/build/src/cli/commands/amend.d.ts +4 -5
  110. package/build/src/cli/commands/amend.js +1 -2
  111. package/build/src/cli/commands/bind.d.ts +4 -5
  112. package/build/src/cli/commands/bind.js +7 -10
  113. package/build/src/cli/commands/contract-grammar.d.ts +112 -0
  114. package/build/src/cli/commands/contract-grammar.js +282 -0
  115. package/build/src/cli/commands/contract-help.d.ts +17 -22
  116. package/build/src/cli/commands/contract-help.js +37 -24
  117. package/build/src/cli/commands/contract.d.ts +18 -97
  118. package/build/src/cli/commands/contract.js +621 -233
  119. package/build/src/cli/commands/install.d.ts +1 -1
  120. package/build/src/cli/commands/install.js +2 -2
  121. package/build/src/cli/commands/task-grammar.d.ts +19 -0
  122. package/build/src/cli/commands/task-grammar.js +438 -0
  123. package/build/src/cli/commands/task-query.js +23 -104
  124. package/build/src/cli/commands/task.d.ts +5 -20
  125. package/build/src/cli/commands/task.js +414 -364
  126. package/build/src/cli/coordinates.d.ts +10 -0
  127. package/build/src/cli/coordinates.js +20 -0
  128. package/build/src/cli/draft.d.ts +7 -1
  129. package/build/src/cli/main.js +10 -1
  130. package/build/src/cli/parse.d.ts +8 -9
  131. package/build/src/cli/parse.js +62 -62
  132. package/build/src/cli/render/akuma-activity.d.ts +54 -36
  133. package/build/src/cli/render/akuma-activity.js +262 -242
  134. package/build/src/cli/render/akuma-tool.d.ts +8 -4
  135. package/build/src/cli/render/akuma-tool.js +6 -5
  136. package/build/src/cli/render/akuma.d.ts +36 -16
  137. package/build/src/cli/render/akuma.js +65 -132
  138. package/build/src/cli/render/audit.d.ts +6 -2
  139. package/build/src/cli/render/audit.js +59 -28
  140. package/build/src/cli/render/catalog.d.ts +11 -2
  141. package/build/src/cli/render/catalog.js +75 -95
  142. package/build/src/cli/render/contract-history.d.ts +3 -1
  143. package/build/src/cli/render/contract-history.js +215 -22
  144. package/build/src/cli/render/contract-observation.d.ts +10 -5
  145. package/build/src/cli/render/contract-observation.js +29 -46
  146. package/build/src/cli/render/contract.d.ts +10 -3
  147. package/build/src/cli/render/contract.js +252 -103
  148. package/build/src/cli/render/effects.d.ts +26 -0
  149. package/build/src/cli/render/effects.js +41 -0
  150. package/build/src/cli/render/execution-progress.d.ts +18 -6
  151. package/build/src/cli/render/execution-progress.js +34 -31
  152. package/build/src/cli/render/kanshi-akuma.d.ts +1 -2
  153. package/build/src/cli/render/kanshi-akuma.js +5 -26
  154. package/build/src/cli/render/kanshi.js +107 -128
  155. package/build/src/cli/render/marks.d.ts +13 -0
  156. package/build/src/cli/render/marks.js +74 -0
  157. package/build/src/cli/render/nuke.js +18 -7
  158. package/build/src/cli/render/receipt.d.ts +10 -4
  159. package/build/src/cli/render/receipt.js +124 -44
  160. package/build/src/cli/render/reconcile.d.ts +5 -0
  161. package/build/src/cli/render/reconcile.js +152 -0
  162. package/build/src/cli/render/refusal.d.ts +21 -4
  163. package/build/src/cli/render/refusal.js +60 -33
  164. package/build/src/cli/render/region.js +3 -2
  165. package/build/src/cli/render/settings.js +2 -12
  166. package/build/src/cli/render/task.d.ts +37 -6
  167. package/build/src/cli/render/task.js +161 -157
  168. package/build/src/cli/render/terminal.d.ts +20 -1
  169. package/build/src/cli/render/terminal.js +92 -18
  170. package/build/src/cli/runtime.d.ts +32 -8
  171. package/build/src/cli/runtime.js +157 -165
  172. package/build/src/cli/selectors.d.ts +5 -2
  173. package/build/src/cli/selectors.js +11 -3
  174. package/build/src/cli/streams.d.ts +11 -0
  175. package/build/src/cli/streams.js +32 -0
  176. package/build/src/cli/usage.d.ts +2 -0
  177. package/build/src/cli/usage.js +12 -8
  178. package/build/src/contract-guidance.js +3 -7
  179. package/build/src/contract-worktree.d.ts +20 -28
  180. package/build/src/contract-worktree.js +18 -70
  181. package/build/src/coordination/durable-file.d.ts +2 -2
  182. package/build/src/coordination/durable-file.js +0 -27
  183. package/build/src/core/facts/codec.d.ts +1 -2
  184. package/build/src/core/facts/codec.js +6 -7
  185. package/build/src/core/facts/gate.d.ts +0 -1
  186. package/build/src/core/facts/gate.js +0 -82
  187. package/build/src/core/facts/types.d.ts +1 -2
  188. package/build/src/core/verbs/abandon.d.ts +2 -6
  189. package/build/src/core/verbs/abandon.js +0 -16
  190. package/build/src/core/verbs/amend.d.ts +0 -1
  191. package/build/src/core/verbs/amend.js +0 -20
  192. package/build/src/core/verbs/arc.d.ts +7 -8
  193. package/build/src/core/verbs/arc.js +2 -19
  194. package/build/src/core/verbs/attestation.d.ts +2 -6
  195. package/build/src/core/verbs/attestation.js +0 -16
  196. package/build/src/core/verbs/bind.d.ts +0 -1
  197. package/build/src/core/verbs/bind.js +0 -16
  198. package/build/src/core/verbs/deliver.d.ts +0 -1
  199. package/build/src/core/verbs/deliver.js +0 -16
  200. package/build/src/core/verbs/placement.d.ts +2 -1
  201. package/build/src/core/verbs/placement.js +10 -59
  202. package/build/src/git/admission.d.ts +6 -4
  203. package/build/src/git/admission.js +4 -0
  204. package/build/src/git/hooks.d.ts +55 -30
  205. package/build/src/git/hooks.js +30 -3
  206. package/build/src/git/identity.d.ts +6 -0
  207. package/build/src/git/identity.js +47 -0
  208. package/build/src/git/integration.d.ts +31 -13
  209. package/build/src/git/integration.js +32 -1
  210. package/build/src/git/nuke.d.ts +10 -1
  211. package/build/src/git/nuke.js +31 -11
  212. package/build/src/git/observe.js +2 -15
  213. package/build/src/git/private-state-seat.d.ts +6 -7
  214. package/build/src/git/private-state-seat.js +8 -6
  215. package/build/src/git/read-observation.d.ts +6 -1
  216. package/build/src/git/read-observation.js +81 -46
  217. package/build/src/git/reconcile.d.ts +117 -40
  218. package/build/src/git/reconcile.js +169 -40
  219. package/build/src/git/scratch.d.ts +7 -4
  220. package/build/src/git/scratch.js +28 -6
  221. package/build/src/git/target-placement.d.ts +53 -38
  222. package/build/src/git/target-placement.js +69 -54
  223. package/build/src/git/tender.d.ts +37 -28
  224. package/build/src/git/tender.js +39 -0
  225. package/build/src/git/terminal-reconcile.js +21 -23
  226. package/build/src/git/terminal-seal.d.ts +8 -6
  227. package/build/src/git/terminal-seal.js +10 -0
  228. package/build/src/git/workspace.d.ts +29 -15
  229. package/build/src/git/workspace.js +28 -2
  230. package/build/src/identity/normalize.js +19 -6
  231. package/build/src/index.d.ts +78 -7
  232. package/build/src/index.js +52 -4
  233. package/build/src/kanshi/read.d.ts +3 -3
  234. package/build/src/kanshi/read.js +21 -21
  235. package/build/src/kanshi/report.d.ts +9 -8
  236. package/build/src/kanshi/roster.d.ts +2 -0
  237. package/build/src/kanshi/roster.js +2 -0
  238. package/build/src/kanshi/select.js +7 -3
  239. package/build/src/library/address.d.ts +3 -7
  240. package/build/src/library/address.js +7 -7
  241. package/build/src/library/akuma-creation.d.ts +21 -32
  242. package/build/src/library/akuma-creation.js +148 -165
  243. package/build/src/library/akumas.d.ts +20 -22
  244. package/build/src/library/akumas.js +43 -20
  245. package/build/src/library/bind.d.ts +107 -13
  246. package/build/src/library/bind.js +29 -23
  247. package/build/src/library/continuation.d.ts +556 -28
  248. package/build/src/library/continuation.js +29 -54
  249. package/build/src/library/contract-composition.d.ts +40 -0
  250. package/build/src/library/contract-composition.js +105 -0
  251. package/build/src/library/contract-creation.d.ts +7 -0
  252. package/build/src/library/contract-creation.js +192 -0
  253. package/build/src/library/contract-execution.d.ts +29 -40
  254. package/build/src/library/contract-execution.js +503 -128
  255. package/build/src/library/contract-operations.d.ts +275 -134
  256. package/build/src/library/contract-operations.js +83 -92
  257. package/build/src/library/contract-outcomes.d.ts +71 -0
  258. package/build/src/library/contract-outcomes.js +32 -0
  259. package/build/src/library/contract-settings.d.ts +25 -0
  260. package/build/src/library/contract-settings.js +135 -0
  261. package/build/src/library/contract-types.d.ts +17 -38
  262. package/build/src/library/delivery.d.ts +530 -10
  263. package/build/src/library/delivery.js +20 -45
  264. package/build/src/library/input.d.ts +3 -1
  265. package/build/src/library/input.js +11 -16
  266. package/build/src/library/invocation.d.ts +87 -0
  267. package/build/src/library/invocation.js +290 -0
  268. package/build/src/library/keiyaku.d.ts +45 -22
  269. package/build/src/library/keiyaku.js +134 -8
  270. package/build/src/library/nuke.d.ts +2 -11
  271. package/build/src/library/nuke.js +70 -57
  272. package/build/src/library/outcome.d.ts +13196 -0
  273. package/build/src/library/outcome.js +487 -0
  274. package/build/src/library/reconcile.d.ts +96 -24
  275. package/build/src/library/reconcile.js +102 -42
  276. package/build/src/library/refusal.d.ts +470 -42
  277. package/build/src/library/refusal.js +55 -143
  278. package/build/src/library/region.d.ts +15 -7
  279. package/build/src/library/region.js +23 -3
  280. package/build/src/library/repo.d.ts +2 -12
  281. package/build/src/library/repo.js +1 -22
  282. package/build/src/library/selection.d.ts +121 -0
  283. package/build/src/library/{fleet.js → selection.js} +169 -152
  284. package/build/src/plugin/public.d.ts +2 -0
  285. package/build/src/protocol/abandon.d.ts +2 -2
  286. package/build/src/protocol/abandon.js +1 -0
  287. package/build/src/protocol/amend.js +1 -0
  288. package/build/src/protocol/arc.d.ts +6 -4
  289. package/build/src/protocol/attempt.d.ts +4 -2
  290. package/build/src/protocol/attempt.js +10 -0
  291. package/build/src/protocol/audit.d.ts +255 -52
  292. package/build/src/protocol/audit.js +63 -5
  293. package/build/src/protocol/bind.d.ts +18 -17
  294. package/build/src/protocol/bind.js +9 -28
  295. package/build/src/protocol/completion.d.ts +256 -22
  296. package/build/src/protocol/completion.js +100 -12
  297. package/build/src/protocol/deliver.d.ts +34 -23
  298. package/build/src/protocol/deliver.js +39 -25
  299. package/build/src/protocol/execution-observation.d.ts +36 -37
  300. package/build/src/protocol/execution-observation.js +7 -9
  301. package/build/src/protocol/intent.d.ts +101 -30
  302. package/build/src/protocol/intent.js +74 -1
  303. package/build/src/protocol/operations.d.ts +570 -64
  304. package/build/src/protocol/operations.js +189 -9
  305. package/build/src/protocol/outcome.d.ts +2 -1
  306. package/build/src/protocol/placement.d.ts +2 -2
  307. package/build/src/protocol/placement.js +3 -1
  308. package/build/src/protocol/progress.d.ts +108 -65
  309. package/build/src/protocol/progress.js +82 -132
  310. package/build/src/protocol/read/status.d.ts +4 -3
  311. package/build/src/protocol/read/status.js +6 -5
  312. package/build/src/protocol/reconcile.d.ts +3 -3
  313. package/build/src/protocol/reconcile.js +4 -0
  314. package/build/src/protocol/reintegrate.d.ts +2 -2
  315. package/build/src/protocol/review.d.ts +30 -12
  316. package/build/src/protocol/review.js +15 -24
  317. package/build/src/protocol/run.d.ts +34 -5
  318. package/build/src/protocol/run.js +24 -12
  319. package/build/src/runtime/proc/windows-launch.exe +0 -0
  320. package/build/src/settings.d.ts +0 -10
  321. package/build/src/settings.js +0 -76
  322. package/build/src/settlement/holder.d.ts +1 -1
  323. package/build/src/settlement/settle.d.ts +25 -16
  324. package/build/src/settlement/settle.js +80 -20
  325. package/build/src/task/board.d.ts +3 -1
  326. package/build/src/task/board.js +13 -17
  327. package/build/src/task/catalog.d.ts +0 -4
  328. package/build/src/task/catalog.js +0 -15
  329. package/build/src/task/compose-language.d.ts +19 -9
  330. package/build/src/task/compose-language.js +30 -20
  331. package/build/src/task/compose.d.ts +7 -37
  332. package/build/src/task/compose.js +20 -2
  333. package/build/src/task/created-observation.d.ts +0 -1
  334. package/build/src/task/created-observation.js +1 -4
  335. package/build/src/task/document.d.ts +12 -2
  336. package/build/src/task/document.js +4 -0
  337. package/build/src/task/identity.d.ts +4 -1
  338. package/build/src/task/identity.js +21 -17
  339. package/build/src/task/index.d.ts +36 -16
  340. package/build/src/task/index.js +103 -96
  341. package/build/src/task/lifecycle-operations.d.ts +1 -1
  342. package/build/src/task/mutation-result.d.ts +647 -586
  343. package/build/src/task/mutation-result.js +79 -46
  344. package/build/src/task/mutation.d.ts +298 -270
  345. package/build/src/task/mutation.js +93 -110
  346. package/build/src/task/operation-types.d.ts +6 -49
  347. package/build/src/task/operations.d.ts +2 -1
  348. package/build/src/task/operations.js +35 -12
  349. package/build/src/task/query.d.ts +9 -3
  350. package/build/src/task/query.js +42 -16
  351. package/build/src/task/store.d.ts +2 -1
  352. package/build/src/task/store.js +10 -14
  353. package/build/src/verification/declaration.d.ts +0 -1
  354. package/build/src/verification/declaration.js +1 -18
  355. package/build/src/verification/execution.d.ts +6 -2
  356. package/build/src/verification/observation.d.ts +1 -1
  357. package/package.json +2 -18
  358. package/build/src/akuma/akuma-product.d.ts +0 -58
  359. package/build/src/akuma/akuma-product.js +0 -276
  360. package/build/src/akuma/fleet-execution.js +0 -234
  361. package/build/src/akuma/fleet-observation.js +0 -97
  362. package/build/src/cli/accepted.d.ts +0 -24
  363. package/build/src/cli/accepted.js +0 -167
  364. package/build/src/cli/catalog.d.ts +0 -45
  365. package/build/src/cli/catalog.js +0 -1
  366. package/build/src/cli/commands/akuma-invoke.d.ts +0 -114
  367. package/build/src/cli/commands/akuma-invoke.js +0 -375
  368. package/build/src/cli/commands/contract-invoke.d.ts +0 -34
  369. package/build/src/cli/commands/contract-invoke.js +0 -259
  370. package/build/src/cli/commands/nuke.d.ts +0 -10
  371. package/build/src/cli/commands/nuke.js +0 -20
  372. package/build/src/cli/commands/status-set.d.ts +0 -4
  373. package/build/src/cli/commands/status-set.js +0 -52
  374. package/build/src/cli/commands/task-invoke.d.ts +0 -49
  375. package/build/src/cli/commands/task-invoke.js +0 -306
  376. package/build/src/cli/invoke.d.ts +0 -27
  377. package/build/src/cli/invoke.js +0 -521
  378. package/build/src/cli/render/board.d.ts +0 -3
  379. package/build/src/cli/render/board.js +0 -25
  380. package/build/src/cli/render/status-set.d.ts +0 -5
  381. package/build/src/cli/render/status-set.js +0 -19
  382. package/build/src/cli/render/text.d.ts +0 -3
  383. package/build/src/cli/render/text.js +0 -33
  384. package/build/src/cli/result.d.ts +0 -240
  385. package/build/src/cli/result.js +0 -1
  386. package/build/src/git/result-codec.d.ts +0 -29
  387. package/build/src/git/result-codec.js +0 -309
  388. package/build/src/kanshi/fleet.d.ts +0 -6
  389. package/build/src/kanshi/fleet.js +0 -27
  390. package/build/src/library/audit.d.ts +0 -29
  391. package/build/src/library/audit.js +0 -41
  392. package/build/src/library/composition.d.ts +0 -15
  393. package/build/src/library/composition.js +0 -28
  394. package/build/src/library/configuration.d.ts +0 -4
  395. package/build/src/library/configuration.js +0 -2
  396. package/build/src/library/contract-bind.d.ts +0 -31
  397. package/build/src/library/contract-bind.js +0 -140
  398. package/build/src/library/contract-forwarding.d.ts +0 -55
  399. package/build/src/library/contract-forwarding.js +0 -67
  400. package/build/src/library/contract-handle.d.ts +0 -50
  401. package/build/src/library/contract-handle.js +0 -385
  402. package/build/src/library/contract.d.ts +0 -46
  403. package/build/src/library/contract.js +0 -73
  404. package/build/src/library/execution-result.d.ts +0 -243
  405. package/build/src/library/execution-result.js +0 -101
  406. package/build/src/library/execution.d.ts +0 -8
  407. package/build/src/library/execution.js +0 -102
  408. package/build/src/library/fleet.d.ts +0 -83
  409. package/build/src/library/mutation.d.ts +0 -501
  410. package/build/src/library/mutation.js +0 -248
  411. package/build/src/library/result-codec.d.ts +0 -2
  412. package/build/src/library/result-codec.js +0 -12
  413. package/build/src/protocol/result-codec.d.ts +0 -23
  414. package/build/src/protocol/result-codec.js +0 -488
  415. package/build/src/settlement/result-codec.d.ts +0 -2
  416. package/build/src/settlement/result-codec.js +0 -56
  417. package/build/src/task/public.d.ts +0 -2
  418. package/build/src/task/public.js +0 -1
@@ -21,26 +21,14 @@ function admitPiOptions(options) {
21
21
  options: Object.freeze({ ...options }),
22
22
  };
23
23
  }
24
- async function piCreateOptions(sdk, input) {
24
+ function piCreateOptions(sdk, input, services) {
25
25
  let model;
26
- let modelRuntime;
27
26
  if (input.options.model !== undefined) {
28
27
  const slash = input.options.model.indexOf("/");
29
- modelRuntime = await sdk.ModelRuntime.create();
30
- model = modelRuntime.getModel(input.options.model.slice(0, slash), input.options.model.slice(slash + 1));
28
+ model = services.modelRuntime.getModel(input.options.model.slice(0, slash), input.options.model.slice(slash + 1));
31
29
  if (model === undefined)
32
30
  throw new Error(`Pi model '${input.options.model}' is unavailable`);
33
31
  }
34
- const resourceLoader = input.options.systemPrompt === undefined
35
- ? undefined
36
- : new sdk.DefaultResourceLoader({
37
- cwd: input.cwd,
38
- agentDir: sdk.getAgentDir(),
39
- ...(input.options.systemPromptMode === "append"
40
- ? { appendSystemPromptOverride: (base) => [...base, input.options.systemPrompt] }
41
- : { systemPromptOverride: () => input.options.systemPrompt }),
42
- });
43
- await resourceLoader?.reload();
44
32
  const sessionManager = input.session.kind === "fresh"
45
33
  ? sdk.SessionManager.create(input.cwd)
46
34
  : "sessionFile" in input.session.coordinate
@@ -59,22 +47,39 @@ async function piCreateOptions(sdk, input) {
59
47
  }),
60
48
  ];
61
49
  return {
62
- cwd: input.cwd,
50
+ services,
63
51
  sessionManager,
64
- ...(model === undefined || modelRuntime === undefined ? {} : { model, modelRuntime }),
65
- ...(resourceLoader === undefined ? {} : { resourceLoader }),
52
+ ...(model === undefined ? {} : { model }),
66
53
  ...(input.options.effort === undefined ? {} : { thinkingLevel: input.options.effort }),
67
54
  ...(customTools === undefined ? {} : { customTools }),
68
55
  };
69
56
  }
70
57
  async function createPiSession(sdk, execution, input) {
71
- const setup = piCreateOptions(sdk, input).then(async (options) => {
72
- if (execution.config !== undefined) {
73
- throw new TypeError("Pi provider config cannot be consumed by native CreateAgentSessionOptions");
74
- }
75
- return await sdk.createAgentSession(options);
58
+ if (execution.config !== undefined) {
59
+ throw new TypeError("Pi provider config cannot be consumed by native CreateAgentSessionOptions");
60
+ }
61
+ const services = await sdk.createAgentSessionServices({
62
+ cwd: input.cwd,
63
+ agentDir: sdk.getAgentDir(),
64
+ modelRuntimeSignal: input.signal,
65
+ ...(input.options.systemPrompt === undefined
66
+ ? {}
67
+ : {
68
+ resourceLoaderOptions: input.options.systemPromptMode === "append"
69
+ ? { appendSystemPromptOverride: (base) => [...base, input.options.systemPrompt] }
70
+ : { systemPromptOverride: () => input.options.systemPrompt },
71
+ }),
76
72
  });
77
- return await setup;
73
+ try {
74
+ input.signal?.throwIfAborted();
75
+ return await sdk.createAgentSessionFromServices(piCreateOptions(sdk, input, services));
76
+ }
77
+ catch (error) {
78
+ // Before a session owns the extension runtime, failed selection/setup must
79
+ // retire registrations and event-bus subscriptions loaded by the services.
80
+ services.resourceLoader.getExtensions().runtime.invalidate();
81
+ throw error;
82
+ }
78
83
  }
79
84
  async function runPiPrompt(native, input, events, state, settle) {
80
85
  try {
@@ -126,20 +131,51 @@ async function drivePi(sdk, execution, input, signal, custody) {
126
131
  aborting: false,
127
132
  settled: false,
128
133
  };
134
+ const pendingTells = new Map();
135
+ const endPendingTells = () => {
136
+ for (const waiter of pendingTells.values())
137
+ waiter.resolve({ kind: "turn-ended" });
138
+ pendingTells.clear();
139
+ };
129
140
  let settleCompletion;
130
141
  const completion = new Promise((resolve) => {
131
142
  settleCompletion = resolve;
132
143
  });
133
- const unsubscribe = native.subscribe((event) => {
134
- if (event.type === "agent_end" && !event.willRetry)
135
- state.terminalFailure = piTerminalFailure(event.messages);
136
- for (const translated of translatePiEvent(event, eventState))
137
- events.emit(translated);
138
- });
144
+ const agent = native.agent;
145
+ let unsubscribeAgent;
146
+ let unsubscribe;
147
+ try {
148
+ unsubscribeAgent = agent.subscribe((event) => {
149
+ if (event.type === "message_end") {
150
+ const waiter = pendingTells.get(event.message);
151
+ if (waiter !== undefined) {
152
+ pendingTells.delete(event.message);
153
+ waiter.resolve({ kind: "accepted", fence: `${native.sessionId}:${waiter.id}` });
154
+ }
155
+ }
156
+ });
157
+ unsubscribe = native.subscribe((event) => {
158
+ if (event.type === "agent_end" && !event.willRetry) {
159
+ state.terminalFailure = piTerminalFailure(event.messages);
160
+ }
161
+ for (const translated of translatePiEvent(event, eventState))
162
+ events.emit(translated);
163
+ });
164
+ }
165
+ catch (error) {
166
+ try {
167
+ unsubscribeAgent?.();
168
+ }
169
+ finally {
170
+ native.dispose();
171
+ }
172
+ throw error;
173
+ }
139
174
  const settle = (result) => {
140
175
  if (state.settled)
141
176
  return closed;
142
177
  state.settled = true;
178
+ endPendingTells();
143
179
  let failure;
144
180
  try {
145
181
  unsubscribe();
@@ -147,19 +183,19 @@ async function drivePi(sdk, execution, input, signal, custody) {
147
183
  catch (error) {
148
184
  failure = error;
149
185
  }
150
- finally {
151
- try {
152
- events.end();
153
- }
154
- finally {
155
- settleCompletion(result);
156
- try {
157
- native.dispose();
158
- }
159
- catch (error) {
160
- failure ??= error;
161
- }
162
- }
186
+ try {
187
+ unsubscribeAgent?.();
188
+ }
189
+ catch (error) {
190
+ failure ??= error;
191
+ }
192
+ events.end();
193
+ settleCompletion(result);
194
+ try {
195
+ native.dispose();
196
+ }
197
+ catch (error) {
198
+ failure ??= error;
163
199
  }
164
200
  if (failure === undefined)
165
201
  settleRetired();
@@ -189,6 +225,25 @@ async function drivePi(sdk, execution, input, signal, custody) {
189
225
  admission: { fence: native.sessionId },
190
226
  events,
191
227
  completion,
228
+ tell: (tell) => {
229
+ if (state.settled)
230
+ return Promise.resolve({ kind: "turn-ended" });
231
+ const message = {
232
+ role: "user",
233
+ content: [{ type: "text", text: tell.text }],
234
+ timestamp: new Date().getTime(),
235
+ };
236
+ return new Promise((resolve, reject) => {
237
+ pendingTells.set(message, { id: tell.id, resolve });
238
+ try {
239
+ agent.steer(message);
240
+ }
241
+ catch (error) {
242
+ pendingTells.delete(message);
243
+ reject(error);
244
+ }
245
+ });
246
+ },
192
247
  abort: () => {
193
248
  state.abortRequest ??= (async () => {
194
249
  if (state.settled)
@@ -223,11 +278,10 @@ async function forkPi(sdk, input) {
223
278
  async function loadPiSdk() {
224
279
  const sdk = await import("@earendil-works/pi-coding-agent");
225
280
  return {
226
- createAgentSession: sdk.createAgentSession,
281
+ createAgentSessionFromServices: sdk.createAgentSessionFromServices,
282
+ createAgentSessionServices: sdk.createAgentSessionServices,
227
283
  createBashToolDefinition: sdk.createBashToolDefinition,
228
- DefaultResourceLoader: sdk.DefaultResourceLoader,
229
284
  getAgentDir: sdk.getAgentDir,
230
- ModelRuntime: sdk.ModelRuntime,
231
285
  SessionManager: sdk.SessionManager,
232
286
  };
233
287
  }
@@ -1,5 +1,9 @@
1
- import { type AllocatedAkuma } from "./identity.js";
1
+ import { type Soul } from "./heart/index.js";
2
+ import { type AllocatedAkuma, type AkumaPaths, type AkuId } from "./identity.js";
2
3
  import type { OwnedProcess } from "../runtime/proc/run.js";
4
+ import type { RequestRecipe } from "./heart/facts.js";
5
+ import type { CallInitialTell, CallInitialTellAdmission, TellResult } from "./call-initial-tell.js";
6
+ import { type WorldRoot } from "../world.js";
3
7
  export declare const BIRTH_TIMEOUT_MS = 30000;
4
8
  export type BirthInput = Readonly<{
5
9
  worldPath: string;
@@ -12,6 +16,83 @@ export type LaunchInput = Readonly<{
12
16
  launch(allocated: AllocatedAkuma): Promise<OwnedProcess | void>;
13
17
  signal?: AbortSignal;
14
18
  }>;
15
- export declare function birthAkuma(input: BirthInput): Promise<AllocatedAkuma>;
16
- export declare function launchAkuma(input: LaunchInput): Promise<AllocatedAkuma>;
17
19
  export declare function publishAkuma(input: BirthInput & Omit<LaunchInput, "allocated">): Promise<AllocatedAkuma>;
20
+ /**
21
+ * The one prepared-call recipe shape, owned by the Heart Soul projection. Both
22
+ * custody kinds carry the same raw recipe: the decoded provider execution plus
23
+ * the options the one prepared-call executor admits exactly once.
24
+ */
25
+ export type PreparedCallRecipe = RequestRecipe;
26
+ /**
27
+ * The one owner-typed admission failure the prepared executor raises before any
28
+ * allocation. It carries only the failing stage and the provider owner's native
29
+ * diagnostic; the initiating edge maps it back to its own refusal meaning.
30
+ */
31
+ export declare class PreparedCallAdmissionError extends Error {
32
+ readonly stage: "resolve" | "options";
33
+ readonly diagnostic: string;
34
+ readonly kind = "prepared-call-admission";
35
+ constructor(stage: "resolve" | "options", diagnostic: string);
36
+ }
37
+ export type PreparedCallSpawn = Readonly<{
38
+ paths: AkumaPaths;
39
+ seed: Omit<Soul, "createdAt">;
40
+ }>;
41
+ export type PreparedCallInitialTellAdmission = Readonly<{
42
+ id: AkuId;
43
+ initialTell: CallInitialTell;
44
+ signal?: AbortSignal;
45
+ }>;
46
+ type PreparedCallPorts = Readonly<{
47
+ /** Spawn one already-allocated child; publication already owns the allocated directory. */
48
+ spawn(launch: PreparedCallSpawn): Promise<OwnedProcess | void>;
49
+ /** Admit the optional initial Tell against the just-confirmed child. */
50
+ admitInitialTell(input: PreparedCallInitialTellAdmission): Promise<CallInitialTellAdmission>;
51
+ }>;
52
+ /**
53
+ * The one discriminated custody the prepared executor serves. Local custody
54
+ * carries the initiating process's own proved World and local spawn/initial-Tell
55
+ * ports. Request custody carries the authenticated direct parent, the serving
56
+ * request identity, the reservation edge, and the parent scope its allowed
57
+ * actions are clipped against. Both kinds carry the same raw recipe.
58
+ */
59
+ type PreparedCallCustody = (PreparedCallPorts & Readonly<{
60
+ kind: "local";
61
+ world: WorldRoot;
62
+ recipe: PreparedCallRecipe;
63
+ }>) | (PreparedCallPorts & Readonly<{
64
+ kind: "request";
65
+ world: WorldRoot;
66
+ coordinate: string;
67
+ recipe: PreparedCallRecipe;
68
+ parent: Soul;
69
+ requestId: string;
70
+ admissionOpen(): boolean;
71
+ reserve(child: AkuId): Promise<void>;
72
+ refuse(diagnostic: string): Promise<void>;
73
+ }>);
74
+ type PreparedCallResult = Readonly<{
75
+ child: AllocatedAkuma;
76
+ /** The exact initial TellResult, present only when its admission completed. */
77
+ tell?: TellResult;
78
+ /** The native launch or initial-Tell failure that stopped after a confirmed birth. */
79
+ failure?: unknown;
80
+ }>;
81
+ type PreparedCallInput = Readonly<{
82
+ archetype: string;
83
+ cwd: string;
84
+ initialTell?: CallInitialTell;
85
+ signal?: AbortSignal;
86
+ custody: PreparedCallCustody;
87
+ }>;
88
+ export declare function callDiagnostic(error: unknown): string;
89
+ /**
90
+ * The one lower birth owner for a prepared call. It alone orders World
91
+ * proof/consumption, request-custody provider resolution and options admission,
92
+ * allowed clipping, child allocation, the launch admission gate and reservation,
93
+ * spawn/publication, and optional initial-Tell admission. It never loads
94
+ * Settings or an Archetype and never imports Library, and it never replaces a
95
+ * durably born child with a thrown error.
96
+ */
97
+ export declare function executePreparedCall(input: PreparedCallInput): Promise<PreparedCallResult>;
98
+ export {};
@@ -2,6 +2,9 @@ import { HeldAkumaLeash, initializeHeart, readHeart, readSeal, readSoul } from "
2
2
  import { acquireLeash } from "./control.js";
3
3
  import { allocateAkumaDirectory } from "./identity.js";
4
4
  import { abortableDelay } from "./abort.js";
5
+ import { clipAllowedActions } from "./allowed.js";
6
+ import { resolveProviderExecution } from "./providers/index.js";
7
+ import { World } from "../world.js";
5
8
  const POLL_MS = 100;
6
9
  const CUSTODY_HANDOFF_MS = 1_000;
7
10
  export const BIRTH_TIMEOUT_MS = 30_000;
@@ -220,7 +223,7 @@ async function sealLocalFailure(allocated, error) {
220
223
  /* the original local publication failure remains authoritative */
221
224
  }
222
225
  }
223
- export async function birthAkuma(input) {
226
+ async function birthAkuma(input) {
224
227
  input.signal?.throwIfAborted();
225
228
  const allocated = await allocateAkumaDirectory({ worldRoot: input.worldPath, archetype: input.archetype });
226
229
  try {
@@ -233,7 +236,7 @@ export async function birthAkuma(input) {
233
236
  throw error;
234
237
  }
235
238
  }
236
- export async function launchAkuma(input) {
239
+ async function launchAkuma(input) {
237
240
  const { allocated } = input;
238
241
  let owned = undefined;
239
242
  try {
@@ -272,3 +275,143 @@ export async function publishAkuma(input) {
272
275
  const allocated = await birthAkuma(input);
273
276
  return await launchAkuma({ ...input, allocated });
274
277
  }
278
+ /**
279
+ * The one owner-typed admission failure the prepared executor raises before any
280
+ * allocation. It carries only the failing stage and the provider owner's native
281
+ * diagnostic; the initiating edge maps it back to its own refusal meaning.
282
+ */
283
+ export class PreparedCallAdmissionError extends Error {
284
+ stage;
285
+ diagnostic;
286
+ kind = "prepared-call-admission";
287
+ constructor(stage, diagnostic) {
288
+ super(diagnostic);
289
+ this.stage = stage;
290
+ this.diagnostic = diagnostic;
291
+ this.name = "PreparedCallAdmissionError";
292
+ }
293
+ }
294
+ export function callDiagnostic(error) {
295
+ return error instanceof Error ? error.message : String(error);
296
+ }
297
+ /**
298
+ * The one provider-owner admission shared by both custody kinds: resolve the
299
+ * decoded execution to its adapter, admit the raw options once, and clip the
300
+ * requested actions only when a parent ceiling applies.
301
+ */
302
+ async function admittedRecipe(recipe, bounds = {}) {
303
+ let selected;
304
+ try {
305
+ selected = await resolveProviderExecution(recipe.provider);
306
+ }
307
+ catch (error) {
308
+ if (error instanceof TypeError)
309
+ throw new PreparedCallAdmissionError("resolve", error.message);
310
+ throw error;
311
+ }
312
+ const admission = selected.adapter.admitOptions(recipe.options);
313
+ if (admission.kind === "refused") {
314
+ if (bounds.refuse !== undefined)
315
+ await bounds.refuse(admission.diagnostic);
316
+ throw new PreparedCallAdmissionError("options", admission.diagnostic);
317
+ }
318
+ return Object.freeze({
319
+ ...(recipe.description === undefined ? {} : { description: recipe.description }),
320
+ provider: selected.execution,
321
+ options: admission.options,
322
+ allowed: bounds.ceiling === undefined ? recipe.allowed : clipAllowedActions(recipe.allowed, bounds.ceiling),
323
+ });
324
+ }
325
+ /** Judge durable birth from the allocated child's own evidence, never from the caught error. */
326
+ async function durablyBorn(allocated) {
327
+ const soul = await readSoul(allocated.paths);
328
+ return soul !== null && soul.id === allocated.id;
329
+ }
330
+ /**
331
+ * The one lower birth owner for a prepared call. It alone orders World
332
+ * proof/consumption, request-custody provider resolution and options admission,
333
+ * allowed clipping, child allocation, the launch admission gate and reservation,
334
+ * spawn/publication, and optional initial-Tell admission. It never loads
335
+ * Settings or an Archetype and never imports Library, and it never replaces a
336
+ * durably born child with a thrown error.
337
+ */
338
+ export async function executePreparedCall(input) {
339
+ const { custody } = input;
340
+ let world;
341
+ if (custody.kind === "local") {
342
+ world = custody.world;
343
+ }
344
+ else {
345
+ const requestWorld = await World.prove(custody.coordinate);
346
+ if (requestWorld !== custody.world) {
347
+ const diagnostic = `request world ${requestWorld} does not match ${custody.world}`;
348
+ await custody.refuse(diagnostic);
349
+ throw new Error(diagnostic);
350
+ }
351
+ world = custody.world;
352
+ }
353
+ const recipe = custody.kind === "request"
354
+ ? await admittedRecipe(custody.recipe, { ceiling: custody.parent.allowed, refuse: custody.refuse })
355
+ : await admittedRecipe(custody.recipe);
356
+ const origin = custody.kind === "request"
357
+ ? { kind: "request", parent: custody.parent.id, requestId: custody.requestId }
358
+ : { kind: "direct" };
359
+ const allocated = await birthAkuma({
360
+ worldPath: world,
361
+ archetype: input.archetype,
362
+ ...(input.signal === undefined ? {} : { signal: input.signal }),
363
+ });
364
+ let child = allocated;
365
+ try {
366
+ child = await launchAkuma({
367
+ allocated,
368
+ ...(input.signal === undefined ? {} : { signal: input.signal }),
369
+ launch: async (ready) => {
370
+ if (custody.kind === "request") {
371
+ if (!custody.admissionOpen())
372
+ throw new Error("body closed request admission");
373
+ await custody.reserve(ready.id);
374
+ }
375
+ return await custody.spawn({
376
+ paths: ready.paths,
377
+ seed: {
378
+ id: ready.id,
379
+ archetype: ready.archetype,
380
+ ...(recipe.description === undefined ? {} : { description: recipe.description }),
381
+ provider: recipe.provider,
382
+ options: recipe.options,
383
+ allowed: recipe.allowed,
384
+ cwd: input.cwd,
385
+ origin,
386
+ },
387
+ });
388
+ },
389
+ });
390
+ }
391
+ catch (error) {
392
+ if (!(await durablyBorn(allocated)))
393
+ throw error;
394
+ return { child: allocated, failure: error };
395
+ }
396
+ if (input.initialTell === undefined)
397
+ return { child };
398
+ let told;
399
+ try {
400
+ const admitted = await custody.admitInitialTell({
401
+ id: child.id,
402
+ initialTell: input.initialTell,
403
+ ...(input.signal === undefined ? {} : { signal: input.signal }),
404
+ });
405
+ if (admitted.kind === "birth-failed")
406
+ throw new Error(admitted.diagnostic);
407
+ if (admitted.kind === "not-born")
408
+ throw new Error(`Akuma ${child.id} was not born for its initial Tell`);
409
+ told = await admitted.wake;
410
+ return { child, tell: told };
411
+ }
412
+ catch (error) {
413
+ if (told !== undefined)
414
+ return { child, tell: told };
415
+ return { child, failure: error };
416
+ }
417
+ }
@@ -0,0 +1,2 @@
1
+ export declare const PAGE_POOL_SIZE = 16;
2
+ export declare function boundedMap<Value, Result>(values: readonly Value[], mapper: (value: Value) => Promise<Result>): Promise<readonly Result[]>;
@@ -0,0 +1,15 @@
1
+ export const PAGE_POOL_SIZE = 16;
2
+ export async function boundedMap(values, mapper) {
3
+ const results = [];
4
+ let index = 0;
5
+ const worker = async () => {
6
+ for (;;) {
7
+ const selected = index++;
8
+ if (selected >= values.length)
9
+ return;
10
+ results[selected] = await mapper(values[selected]);
11
+ }
12
+ };
13
+ await Promise.all(Array.from({ length: Math.min(PAGE_POOL_SIZE, values.length) }, worker));
14
+ return results;
15
+ }
@@ -53,6 +53,16 @@ async function readRequestReceipt(input, path, id) {
53
53
  if (receipt.state === "refused") {
54
54
  throw new AkumaBodyRequestError(receipt.action, "refused", receipt.diagnostic, receipt.id);
55
55
  }
56
+ if (receipt.state === "voided" && receipt.outcome !== undefined) {
57
+ let result;
58
+ try {
59
+ result = input.command.decodeResult(receipt.outcome);
60
+ }
61
+ catch (error) {
62
+ throw new Error(`transport integrity: invalid voided live result: ${error instanceof Error ? error.message : String(error)}`);
63
+ }
64
+ return withRequestMetadata({ kind: "returned", result }, id, input.command.action);
65
+ }
56
66
  if (receipt.state === "voided") {
57
67
  throwVoidedRequestFailure(receipt.action, receipt.evidence, receipt.failure, input.command.decodeFailure, receipt.id);
58
68
  }
@@ -30,6 +30,7 @@ async function projectCommandReceipt(input, fact, command, outcome, failure) {
30
30
  state: "voided",
31
31
  evidence: fact.evidence,
32
32
  ...(failure === undefined ? {} : { failure }),
33
+ ...(outcome === undefined ? {} : { outcome: outcome.result }),
33
34
  }
34
35
  : fact.state === "unproven"
35
36
  ? {
@@ -152,6 +153,12 @@ async function serveServiceCommand(input, command) {
152
153
  return await serveResolvedCommand(input, command, request, async (fact, facts) => {
153
154
  await beginRequest(input.paths, fact.id);
154
155
  const served = await request.execute(facts);
156
+ if (served.kind === "voided") {
157
+ return {
158
+ fact: await voidRequest(input.paths, fact.id, "returned owner outcome was voided"),
159
+ outcome: { kind: "returned", result: served.outcome },
160
+ };
161
+ }
155
162
  return {
156
163
  fact: await serveUpstreamRequest(input.paths, fact.id, served.serviceJson),
157
164
  outcome: { kind: "returned", result: served.result },
@@ -4,26 +4,6 @@ declare const requestEnvelopeSchema: z.ZodObject<{
4
4
  action: z.ZodString;
5
5
  payload: z.ZodUnknown;
6
6
  }, z.core.$strict>;
7
- declare const upstreamRequestFailureSchema: z.ZodUnion<readonly [z.ZodObject<{
8
- kind: z.ZodLiteral<"akuma-not-born">;
9
- id: z.ZodString;
10
- }, z.core.$strict>, z.ZodObject<{
11
- kind: z.ZodLiteral<"failed">;
12
- diagnostic: z.ZodString;
13
- }, z.core.$strict>]>;
14
- declare const returnedEnvelopeSchema: z.ZodUnion<readonly [z.ZodObject<{
15
- kind: z.ZodLiteral<"returned">;
16
- result: z.ZodUnknown;
17
- }, z.core.$strict>, z.ZodObject<{
18
- kind: z.ZodLiteral<"failed">;
19
- failure: z.ZodUnion<readonly [z.ZodObject<{
20
- kind: z.ZodLiteral<"akuma-not-born">;
21
- id: z.ZodString;
22
- }, z.core.$strict>, z.ZodObject<{
23
- kind: z.ZodLiteral<"failed">;
24
- diagnostic: z.ZodString;
25
- }, z.core.$strict>]>;
26
- }, z.core.$strict>]>;
27
7
  declare const receiptEnvelopeSchema: z.ZodUnion<readonly [z.ZodObject<{
28
8
  id: z.ZodString;
29
9
  action: z.ZodString;
@@ -57,6 +37,7 @@ declare const receiptEnvelopeSchema: z.ZodUnion<readonly [z.ZodObject<{
57
37
  state: z.ZodLiteral<"voided">;
58
38
  evidence: z.ZodString;
59
39
  failure: z.ZodOptional<z.ZodUnknown>;
40
+ outcome: z.ZodOptional<z.ZodUnknown>;
60
41
  }, z.core.$strict>, z.ZodObject<{
61
42
  id: z.ZodString;
62
43
  action: z.ZodString;
@@ -100,16 +81,21 @@ export type ChildRequestCommand<Input, Output, Reference> = Readonly<{
100
81
  child: string;
101
82
  }>>;
102
83
  }>;
84
+ export type ServiceCompletion<Output, Service> = Readonly<{
85
+ kind: "served";
86
+ result: Output;
87
+ service: Service;
88
+ }> | Readonly<{
89
+ kind: "voided";
90
+ outcome: Output;
91
+ }>;
103
92
  export type ServiceRequestCommand<Input, Output, Service, Reference> = Readonly<{
104
93
  completion: "service";
105
94
  protocol: RequestProtocol<Input, Output, Reference>;
106
95
  encodeService(service: Service): unknown;
107
96
  decodeService(service: unknown): Service;
108
97
  projectService(service: Service): Reference;
109
- execute(input: Input, facts: ExecutionFacts): Promise<Readonly<{
110
- result: Output;
111
- service: Service;
112
- }>>;
98
+ execute(input: Input, facts: ExecutionFacts): Promise<ServiceCompletion<Output, Service>>;
113
99
  }>;
114
100
  type ErasedRequest = Readonly<{
115
101
  payloadJson: string;
@@ -125,8 +111,12 @@ type ErasedChildRequest = ErasedRequest & Readonly<{
125
111
  }>;
126
112
  type ErasedServiceRequest = ErasedRequest & Readonly<{
127
113
  execute(facts: ExecutionFacts): Promise<Readonly<{
114
+ kind: "served";
128
115
  result: unknown;
129
116
  serviceJson: string;
117
+ }> | Readonly<{
118
+ kind: "voided";
119
+ outcome: unknown;
130
120
  }>>;
131
121
  }>;
132
122
  export type ErasedRequestCommand = Readonly<{
@@ -144,8 +134,6 @@ export type ErasedRequestCommand = Readonly<{
144
134
  export declare function eraseRequestCommand<Input, Output, Reference>(command: ChildRequestCommand<Input, Output, Reference>): ErasedRequestCommand;
145
135
  export declare function eraseRequestCommand<Input, Output, Service, Reference>(command: ServiceRequestCommand<Input, Output, Service, Reference>): ErasedRequestCommand;
146
136
  export declare function composeRequestCommands(...maps: readonly Readonly<Record<string, ErasedRequestCommand>>[]): Readonly<Record<string, ErasedRequestCommand>>;
147
- export type UpstreamRequestFailure = z.infer<typeof upstreamRequestFailureSchema>;
148
- export type ReturnedEnvelope = z.infer<typeof returnedEnvelopeSchema>;
149
137
  export type ReceiptEnvelope = z.infer<typeof receiptEnvelopeSchema>;
150
138
  export declare function decodeEnvelope(bytes: string, fileId: string): RequestEnvelope | null;
151
139
  export declare function decodeReceiptEnvelope(bytes: string, id: string, action: string): ReceiptEnvelope | null;
@@ -27,6 +27,7 @@ const receiptEnvelopeSchema = z.union([
27
27
  state: z.literal("voided"),
28
28
  evidence: z.string(),
29
29
  failure: z.unknown().optional(),
30
+ outcome: z.unknown().optional(),
30
31
  })
31
32
  .strict(),
32
33
  z
@@ -78,7 +79,10 @@ export function eraseRequestCommand(command) {
78
79
  isPermitted: (allowed) => protocol.isPermitted(allowed),
79
80
  execute: async (facts) => {
80
81
  const served = await command.execute(input, facts);
82
+ if (served.kind === "voided")
83
+ return { kind: "voided", outcome: protocol.encodeResult(served.outcome) };
81
84
  return {
85
+ kind: "served",
82
86
  result: protocol.encodeResult(served.result),
83
87
  serviceJson: JSON.stringify(command.encodeService(served.service)),
84
88
  };
@@ -15,6 +15,4 @@ export declare function bodyRequestExecutionContext(directory: unknown): Executi
15
15
  export declare function bodyRequestExecution(input: Readonly<{
16
16
  directory: string;
17
17
  }>): LibraryExecution;
18
- /** Normalizes the public carrier before a composition captures its immutable channel. */
19
- export declare function libraryExecution(value: unknown): LibraryExecution;
20
18
  export declare function executionChannel(context?: ExecutionContext): ExecutionChannel;
@@ -35,23 +35,6 @@ export function bodyRequestExecution(input) {
35
35
  throw new TypeError(error instanceof Error ? error.message : String(error));
36
36
  }
37
37
  }
38
- /** Normalizes the public carrier before a composition captures its immutable channel. */
39
- export function libraryExecution(value) {
40
- const context = valueRecord(value, "execution");
41
- closed(context, ["channel"], "execution");
42
- const channel = valueRecord(context.channel, "execution channel");
43
- if (channel.kind === "local") {
44
- closed(channel, ["kind"], "execution channel");
45
- return localExecutionContext();
46
- }
47
- if (channel.kind === "body-request") {
48
- closed(channel, ["directory", "kind"], "execution channel");
49
- if (typeof channel.directory !== "string")
50
- throw new TypeError("execution channel directory must be a string");
51
- return bodyRequestExecution({ directory: channel.directory });
52
- }
53
- throw new TypeError("execution channel must be local or body-request");
54
- }
55
38
  export function executionChannel(context) {
56
39
  return context?.channel ?? LOCAL_CHANNEL;
57
40
  }