@astrosheep/keiyaku 4.5.28 → 4.6.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 (425) 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 -19
  10. package/build/src/akuma/akuma-instance.js +65 -177
  11. package/build/src/akuma/akuma-observe.d.ts +3 -21
  12. package/build/src/akuma/akuma-observe.js +7 -25
  13. package/build/src/akuma/{akuma-handle.d.ts → akuma-owner.d.ts} +60 -25
  14. package/build/src/akuma/{akuma-handle.js → akuma-owner.js} +43 -29
  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 -32
  18. package/build/src/akuma/akuma-wait.js +113 -0
  19. package/build/src/akuma/akuma.d.ts +35 -97
  20. package/build/src/akuma/akuma.js +148 -35
  21. package/build/src/akuma/archetype.d.ts +18 -6
  22. package/build/src/akuma/archetype.js +52 -34
  23. package/build/src/akuma/body.d.ts +79 -61
  24. package/build/src/akuma/body.js +101 -50
  25. package/build/src/akuma/call-initial-tell.d.ts +164 -0
  26. package/build/src/akuma/call-initial-tell.js +62 -0
  27. package/build/src/akuma/call-input.d.ts +0 -3
  28. package/build/src/akuma/call-input.js +0 -7
  29. package/build/src/akuma/call-request.d.ts +247 -38
  30. package/build/src/akuma/call-request.js +77 -92
  31. package/build/src/akuma/coordinate.d.ts +15 -5
  32. package/build/src/akuma/coordinate.js +12 -22
  33. package/build/src/akuma/dispatch-association.d.ts +1 -1
  34. package/build/src/akuma/dispatch-association.js +1 -10
  35. package/build/src/akuma/heart/activity-schema.d.ts +325 -0
  36. package/build/src/akuma/heart/activity-schema.js +53 -0
  37. package/build/src/akuma/heart/facts.d.ts +3 -9
  38. package/build/src/akuma/heart/index.d.ts +3 -1
  39. package/build/src/akuma/heart/index.js +4 -1
  40. package/build/src/akuma/heart/rows.d.ts +49 -2
  41. package/build/src/akuma/heart/rows.js +16 -2
  42. package/build/src/akuma/heart/soul.d.ts +1 -0
  43. package/build/src/akuma/heart/soul.js +7 -10
  44. package/build/src/akuma/heart/tells.d.ts +1 -0
  45. package/build/src/akuma/heart/tells.js +18 -0
  46. package/build/src/akuma/identity.d.ts +10 -7
  47. package/build/src/akuma/identity.js +23 -0
  48. package/build/src/akuma/index.d.ts +10 -8
  49. package/build/src/akuma/index.js +2 -2
  50. package/build/src/akuma/nuke.d.ts +3 -0
  51. package/build/src/akuma/nuke.js +13 -7
  52. package/build/src/akuma/projection-read.js +1 -2
  53. package/build/src/akuma/projection.d.ts +0 -5
  54. package/build/src/akuma/projection.js +22 -43
  55. package/build/src/akuma/provider-recipe.d.ts +58 -23
  56. package/build/src/akuma/provider-recipe.js +62 -103
  57. package/build/src/akuma/provider.d.ts +7 -78
  58. package/build/src/akuma/provider.js +11 -219
  59. package/build/src/akuma/providers/acp/config.d.ts +2 -0
  60. package/build/src/akuma/providers/acp/config.js +26 -1
  61. package/build/src/akuma/providers/acp/core.d.ts +7 -0
  62. package/build/src/akuma/providers/acp/core.js +49 -18
  63. package/build/src/akuma/providers/acp/index.js +14 -17
  64. package/build/src/akuma/providers/claude/index.js +2 -14
  65. package/build/src/akuma/providers/codex-app-server/index.js +0 -22
  66. package/build/src/akuma/providers/grok-build/index.js +44 -24
  67. package/build/src/akuma/providers/index.d.ts +3 -3
  68. package/build/src/akuma/providers/index.js +2 -13
  69. package/build/src/akuma/providers/opencode-sdk/event-stream.d.ts +28 -0
  70. package/build/src/akuma/providers/opencode-sdk/event-stream.js +92 -0
  71. package/build/src/akuma/providers/opencode-sdk/events.d.ts +0 -1
  72. package/build/src/akuma/providers/opencode-sdk/index.js +200 -74
  73. package/build/src/akuma/providers/opencode-sdk/session.d.ts +41 -1
  74. package/build/src/akuma/providers/opencode-sdk/session.js +69 -2
  75. package/build/src/akuma/providers/pi/events.js +5 -2
  76. package/build/src/akuma/providers/pi/index.js +70 -24
  77. package/build/src/akuma/publication.d.ts +84 -3
  78. package/build/src/akuma/publication.js +145 -2
  79. package/build/src/akuma/read-pool.d.ts +2 -0
  80. package/build/src/akuma/read-pool.js +15 -0
  81. package/build/src/akuma/request-rendezvous.js +10 -0
  82. package/build/src/akuma/request-serve.js +7 -0
  83. package/build/src/akuma/request-wire.d.ts +14 -26
  84. package/build/src/akuma/request-wire.js +4 -0
  85. package/build/src/akuma/requests.d.ts +0 -3
  86. package/build/src/akuma/requests.js +0 -24
  87. package/build/src/akuma/{fleet-observation.d.ts → selection-observation.d.ts} +61 -52
  88. package/build/src/akuma/selection-observation.js +65 -0
  89. package/build/src/akuma/{fleet-owner-port.d.ts → selection-owner-port.d.ts} +3 -3
  90. package/build/src/akuma/{fleet-owner-port.js → selection-owner-port.js} +11 -17
  91. package/build/src/akuma/{fleet-request.d.ts → selection-request.d.ts} +42 -82
  92. package/build/src/akuma/{fleet-request.js → selection-request.js} +92 -136
  93. package/build/src/akuma/turn-drive.d.ts +3 -0
  94. package/build/src/akuma/turn-drive.js +75 -16
  95. package/build/src/akuma-body.js +91 -56
  96. package/build/src/body/amend.d.ts +5 -0
  97. package/build/src/body/amend.js +26 -50
  98. package/build/src/body/arc.d.ts +4 -2
  99. package/build/src/body/arc.js +19 -26
  100. package/build/src/body/criteria.d.ts +6 -0
  101. package/build/src/body/criteria.js +37 -0
  102. package/build/src/body/decode.js +5 -42
  103. package/build/src/body/region.d.ts +5 -0
  104. package/build/src/body/region.js +45 -2
  105. package/build/src/body/render.js +2 -4
  106. package/build/src/cli/activity.d.ts +26 -0
  107. package/build/src/cli/activity.js +75 -0
  108. package/build/src/cli/actor.d.ts +3 -1
  109. package/build/src/cli/actor.js +15 -2
  110. package/build/src/cli/commands/akuma-grammar.d.ts +75 -0
  111. package/build/src/cli/commands/akuma-grammar.js +414 -0
  112. package/build/src/cli/commands/akuma.d.ts +5 -69
  113. package/build/src/cli/commands/akuma.js +352 -312
  114. package/build/src/cli/commands/amend.d.ts +4 -5
  115. package/build/src/cli/commands/amend.js +1 -2
  116. package/build/src/cli/commands/bind.d.ts +4 -5
  117. package/build/src/cli/commands/bind.js +5 -9
  118. package/build/src/cli/commands/contract-grammar.d.ts +112 -0
  119. package/build/src/cli/commands/contract-grammar.js +282 -0
  120. package/build/src/cli/commands/contract-help.d.ts +28 -30
  121. package/build/src/cli/commands/contract-help.js +69 -96
  122. package/build/src/cli/commands/contract.d.ts +18 -97
  123. package/build/src/cli/commands/contract.js +620 -237
  124. package/build/src/cli/commands/install.d.ts +1 -1
  125. package/build/src/cli/commands/install.js +2 -2
  126. package/build/src/cli/commands/task-grammar.d.ts +19 -0
  127. package/build/src/cli/commands/task-grammar.js +438 -0
  128. package/build/src/cli/commands/task-query.js +23 -104
  129. package/build/src/cli/commands/task.d.ts +5 -20
  130. package/build/src/cli/commands/task.js +415 -333
  131. package/build/src/cli/coordinates.d.ts +10 -0
  132. package/build/src/cli/coordinates.js +20 -0
  133. package/build/src/cli/draft.d.ts +7 -1
  134. package/build/src/cli/main.js +10 -1
  135. package/build/src/cli/parse.d.ts +8 -9
  136. package/build/src/cli/parse.js +63 -61
  137. package/build/src/cli/render/akuma-activity.d.ts +88 -39
  138. package/build/src/cli/render/akuma-activity.js +465 -263
  139. package/build/src/cli/render/akuma-tool.d.ts +15 -5
  140. package/build/src/cli/render/akuma-tool.js +40 -27
  141. package/build/src/cli/render/akuma.d.ts +40 -24
  142. package/build/src/cli/render/akuma.js +108 -205
  143. package/build/src/cli/render/audit.d.ts +6 -2
  144. package/build/src/cli/render/audit.js +61 -30
  145. package/build/src/cli/render/catalog.d.ts +11 -2
  146. package/build/src/cli/render/catalog.js +75 -94
  147. package/build/src/cli/render/contract-history.d.ts +3 -1
  148. package/build/src/cli/render/contract-history.js +215 -22
  149. package/build/src/cli/render/contract-observation.d.ts +10 -5
  150. package/build/src/cli/render/contract-observation.js +29 -46
  151. package/build/src/cli/render/contract.d.ts +10 -3
  152. package/build/src/cli/render/contract.js +255 -106
  153. package/build/src/cli/render/effects.d.ts +26 -0
  154. package/build/src/cli/render/effects.js +41 -0
  155. package/build/src/cli/render/execution-progress.d.ts +18 -6
  156. package/build/src/cli/render/execution-progress.js +34 -31
  157. package/build/src/cli/render/kanshi-akuma.d.ts +1 -2
  158. package/build/src/cli/render/kanshi-akuma.js +5 -26
  159. package/build/src/cli/render/kanshi.js +108 -129
  160. package/build/src/cli/render/marks.d.ts +13 -0
  161. package/build/src/cli/render/marks.js +74 -0
  162. package/build/src/cli/render/nuke.js +18 -7
  163. package/build/src/cli/render/receipt.d.ts +10 -4
  164. package/build/src/cli/render/receipt.js +126 -46
  165. package/build/src/cli/render/reconcile.d.ts +5 -0
  166. package/build/src/cli/render/reconcile.js +152 -0
  167. package/build/src/cli/render/refusal.d.ts +21 -4
  168. package/build/src/cli/render/refusal.js +61 -34
  169. package/build/src/cli/render/region.js +3 -2
  170. package/build/src/cli/render/settings.js +4 -14
  171. package/build/src/cli/render/task.d.ts +37 -6
  172. package/build/src/cli/render/task.js +162 -158
  173. package/build/src/cli/render/terminal.d.ts +25 -1
  174. package/build/src/cli/render/terminal.js +105 -18
  175. package/build/src/cli/runtime.d.ts +32 -8
  176. package/build/src/cli/runtime.js +161 -163
  177. package/build/src/cli/selectors.d.ts +5 -2
  178. package/build/src/cli/selectors.js +11 -3
  179. package/build/src/cli/streams.d.ts +11 -0
  180. package/build/src/cli/streams.js +32 -0
  181. package/build/src/cli/usage.d.ts +2 -0
  182. package/build/src/cli/usage.js +12 -8
  183. package/build/src/contract-guidance.js +3 -7
  184. package/build/src/contract-worktree.d.ts +20 -28
  185. package/build/src/contract-worktree.js +18 -70
  186. package/build/src/coordination/durable-file.d.ts +2 -2
  187. package/build/src/coordination/durable-file.js +0 -27
  188. package/build/src/core/facts/codec.d.ts +1 -2
  189. package/build/src/core/facts/codec.js +6 -7
  190. package/build/src/core/facts/gate.d.ts +0 -1
  191. package/build/src/core/facts/gate.js +0 -82
  192. package/build/src/core/facts/types.d.ts +1 -2
  193. package/build/src/core/verbs/abandon.d.ts +2 -6
  194. package/build/src/core/verbs/abandon.js +0 -16
  195. package/build/src/core/verbs/amend.d.ts +0 -1
  196. package/build/src/core/verbs/amend.js +0 -20
  197. package/build/src/core/verbs/arc.d.ts +7 -8
  198. package/build/src/core/verbs/arc.js +2 -19
  199. package/build/src/core/verbs/attestation.d.ts +2 -6
  200. package/build/src/core/verbs/attestation.js +0 -16
  201. package/build/src/core/verbs/bind.d.ts +0 -1
  202. package/build/src/core/verbs/bind.js +0 -16
  203. package/build/src/core/verbs/deliver.d.ts +0 -1
  204. package/build/src/core/verbs/deliver.js +0 -16
  205. package/build/src/core/verbs/placement.d.ts +2 -1
  206. package/build/src/core/verbs/placement.js +10 -59
  207. package/build/src/git/admission.d.ts +6 -4
  208. package/build/src/git/admission.js +4 -0
  209. package/build/src/git/hooks.d.ts +55 -30
  210. package/build/src/git/hooks.js +30 -3
  211. package/build/src/git/identity.d.ts +6 -0
  212. package/build/src/git/identity.js +47 -0
  213. package/build/src/git/integration.d.ts +31 -13
  214. package/build/src/git/integration.js +32 -1
  215. package/build/src/git/nuke.d.ts +10 -1
  216. package/build/src/git/nuke.js +31 -11
  217. package/build/src/git/observe.js +2 -15
  218. package/build/src/git/private-state-seat.d.ts +6 -7
  219. package/build/src/git/private-state-seat.js +8 -6
  220. package/build/src/git/read-observation.d.ts +6 -1
  221. package/build/src/git/read-observation.js +81 -46
  222. package/build/src/git/reconcile.d.ts +117 -40
  223. package/build/src/git/reconcile.js +169 -40
  224. package/build/src/git/scratch.d.ts +7 -4
  225. package/build/src/git/scratch.js +28 -6
  226. package/build/src/git/target-placement.d.ts +53 -38
  227. package/build/src/git/target-placement.js +69 -54
  228. package/build/src/git/tender.d.ts +37 -28
  229. package/build/src/git/tender.js +39 -0
  230. package/build/src/git/terminal-reconcile.js +21 -23
  231. package/build/src/git/terminal-seal.d.ts +8 -6
  232. package/build/src/git/terminal-seal.js +10 -0
  233. package/build/src/git/workspace.d.ts +29 -15
  234. package/build/src/git/workspace.js +28 -2
  235. package/build/src/identity/normalize.js +19 -6
  236. package/build/src/index.d.ts +78 -6
  237. package/build/src/index.js +52 -3
  238. package/build/src/kanshi/read.d.ts +3 -3
  239. package/build/src/kanshi/read.js +21 -21
  240. package/build/src/kanshi/report.d.ts +9 -8
  241. package/build/src/kanshi/roster.d.ts +2 -0
  242. package/build/src/kanshi/roster.js +2 -0
  243. package/build/src/kanshi/select.js +7 -3
  244. package/build/src/library/address.d.ts +3 -7
  245. package/build/src/library/address.js +7 -7
  246. package/build/src/library/akuma-creation.d.ts +35 -33
  247. package/build/src/library/akuma-creation.js +184 -167
  248. package/build/src/library/akumas.d.ts +40 -0
  249. package/build/src/library/akumas.js +84 -0
  250. package/build/src/library/bind.d.ts +107 -13
  251. package/build/src/library/bind.js +29 -23
  252. package/build/src/library/continuation.d.ts +556 -28
  253. package/build/src/library/continuation.js +29 -54
  254. package/build/src/library/contract-composition.d.ts +40 -0
  255. package/build/src/library/contract-composition.js +105 -0
  256. package/build/src/library/contract-creation.d.ts +7 -0
  257. package/build/src/library/contract-creation.js +192 -0
  258. package/build/src/library/contract-execution.d.ts +29 -40
  259. package/build/src/library/contract-execution.js +503 -128
  260. package/build/src/library/contract-operations.d.ts +275 -134
  261. package/build/src/library/contract-operations.js +83 -92
  262. package/build/src/library/contract-outcomes.d.ts +71 -0
  263. package/build/src/library/contract-outcomes.js +32 -0
  264. package/build/src/library/contract-settings.d.ts +25 -0
  265. package/build/src/library/contract-settings.js +135 -0
  266. package/build/src/library/contract-types.d.ts +24 -38
  267. package/build/src/library/delivery.d.ts +530 -10
  268. package/build/src/library/delivery.js +20 -45
  269. package/build/src/library/input.d.ts +3 -1
  270. package/build/src/library/input.js +11 -16
  271. package/build/src/library/invocation.d.ts +87 -0
  272. package/build/src/library/invocation.js +290 -0
  273. package/build/src/library/keiyaku.d.ts +44 -437
  274. package/build/src/library/keiyaku.js +132 -20
  275. package/build/src/library/nuke.d.ts +2 -11
  276. package/build/src/library/nuke.js +70 -57
  277. package/build/src/library/outcome.d.ts +13196 -0
  278. package/build/src/library/outcome.js +487 -0
  279. package/build/src/library/reconcile.d.ts +96 -24
  280. package/build/src/library/reconcile.js +102 -42
  281. package/build/src/library/refusal.d.ts +470 -42
  282. package/build/src/library/refusal.js +55 -143
  283. package/build/src/library/region.d.ts +15 -7
  284. package/build/src/library/region.js +23 -3
  285. package/build/src/library/repo.d.ts +2 -12
  286. package/build/src/library/repo.js +1 -22
  287. package/build/src/library/selection.d.ts +121 -0
  288. package/build/src/library/{fleet.js → selection.js} +177 -160
  289. package/build/src/plugin/public.d.ts +2 -0
  290. package/build/src/protocol/abandon.d.ts +2 -2
  291. package/build/src/protocol/abandon.js +1 -0
  292. package/build/src/protocol/amend.js +1 -0
  293. package/build/src/protocol/arc.d.ts +6 -4
  294. package/build/src/protocol/attempt.d.ts +4 -2
  295. package/build/src/protocol/attempt.js +10 -0
  296. package/build/src/protocol/audit.d.ts +255 -52
  297. package/build/src/protocol/audit.js +63 -5
  298. package/build/src/protocol/bind.d.ts +18 -17
  299. package/build/src/protocol/bind.js +9 -28
  300. package/build/src/protocol/completion.d.ts +256 -22
  301. package/build/src/protocol/completion.js +100 -12
  302. package/build/src/protocol/deliver.d.ts +34 -23
  303. package/build/src/protocol/deliver.js +39 -25
  304. package/build/src/protocol/execution-observation.d.ts +36 -37
  305. package/build/src/protocol/execution-observation.js +7 -9
  306. package/build/src/protocol/intent.d.ts +101 -30
  307. package/build/src/protocol/intent.js +74 -1
  308. package/build/src/protocol/operations.d.ts +570 -64
  309. package/build/src/protocol/operations.js +189 -9
  310. package/build/src/protocol/outcome.d.ts +2 -1
  311. package/build/src/protocol/placement.d.ts +2 -2
  312. package/build/src/protocol/placement.js +3 -1
  313. package/build/src/protocol/progress.d.ts +108 -65
  314. package/build/src/protocol/progress.js +82 -132
  315. package/build/src/protocol/read/status.d.ts +4 -3
  316. package/build/src/protocol/read/status.js +6 -5
  317. package/build/src/protocol/reconcile.d.ts +3 -3
  318. package/build/src/protocol/reconcile.js +4 -0
  319. package/build/src/protocol/reintegrate.d.ts +2 -2
  320. package/build/src/protocol/review.d.ts +30 -12
  321. package/build/src/protocol/review.js +15 -24
  322. package/build/src/protocol/run.d.ts +34 -5
  323. package/build/src/protocol/run.js +24 -12
  324. package/build/src/runtime/proc/windows-launch.exe +0 -0
  325. package/build/src/settings.d.ts +0 -10
  326. package/build/src/settings.js +0 -76
  327. package/build/src/settlement/holder.d.ts +1 -1
  328. package/build/src/settlement/settle.d.ts +25 -16
  329. package/build/src/settlement/settle.js +80 -20
  330. package/build/src/task/board.d.ts +3 -1
  331. package/build/src/task/board.js +13 -17
  332. package/build/src/task/catalog.d.ts +0 -4
  333. package/build/src/task/catalog.js +0 -15
  334. package/build/src/task/compose-language.d.ts +19 -9
  335. package/build/src/task/compose-language.js +30 -20
  336. package/build/src/task/compose.d.ts +7 -37
  337. package/build/src/task/compose.js +20 -2
  338. package/build/src/task/created-observation.d.ts +0 -1
  339. package/build/src/task/created-observation.js +1 -4
  340. package/build/src/task/document.d.ts +12 -2
  341. package/build/src/task/document.js +4 -0
  342. package/build/src/task/identity.d.ts +4 -1
  343. package/build/src/task/identity.js +21 -17
  344. package/build/src/task/index.d.ts +36 -16
  345. package/build/src/task/index.js +103 -96
  346. package/build/src/task/lifecycle-operations.d.ts +1 -1
  347. package/build/src/task/mutation-result.d.ts +647 -586
  348. package/build/src/task/mutation-result.js +79 -46
  349. package/build/src/task/mutation.d.ts +298 -270
  350. package/build/src/task/mutation.js +93 -110
  351. package/build/src/task/operation-types.d.ts +6 -49
  352. package/build/src/task/operations.d.ts +2 -1
  353. package/build/src/task/operations.js +35 -12
  354. package/build/src/task/query.d.ts +9 -3
  355. package/build/src/task/query.js +42 -16
  356. package/build/src/task/store.d.ts +2 -1
  357. package/build/src/task/store.js +10 -14
  358. package/build/src/verification/declaration.d.ts +0 -1
  359. package/build/src/verification/declaration.js +1 -18
  360. package/build/src/verification/execution.d.ts +6 -2
  361. package/build/src/verification/observation.d.ts +1 -1
  362. package/package.json +2 -14
  363. package/build/src/akuma/akuma-product-symbols.d.ts +0 -1
  364. package/build/src/akuma/akuma-product-symbols.js +0 -1
  365. package/build/src/akuma/akuma-product.d.ts +0 -62
  366. package/build/src/akuma/akuma-product.js +0 -293
  367. package/build/src/akuma/fleet-execution.js +0 -181
  368. package/build/src/akuma/fleet-observation.js +0 -91
  369. package/build/src/cli/accepted.d.ts +0 -24
  370. package/build/src/cli/accepted.js +0 -167
  371. package/build/src/cli/commands/akuma-invoke.d.ts +0 -114
  372. package/build/src/cli/commands/akuma-invoke.js +0 -402
  373. package/build/src/cli/commands/contract-invoke.d.ts +0 -34
  374. package/build/src/cli/commands/contract-invoke.js +0 -259
  375. package/build/src/cli/commands/nuke.d.ts +0 -10
  376. package/build/src/cli/commands/nuke.js +0 -20
  377. package/build/src/cli/commands/status-set.d.ts +0 -4
  378. package/build/src/cli/commands/status-set.js +0 -52
  379. package/build/src/cli/commands/task-invoke.d.ts +0 -49
  380. package/build/src/cli/commands/task-invoke.js +0 -306
  381. package/build/src/cli/invoke.d.ts +0 -27
  382. package/build/src/cli/invoke.js +0 -484
  383. package/build/src/cli/render/board.d.ts +0 -3
  384. package/build/src/cli/render/board.js +0 -25
  385. package/build/src/cli/render/status-set.d.ts +0 -5
  386. package/build/src/cli/render/status-set.js +0 -19
  387. package/build/src/cli/render/text.d.ts +0 -3
  388. package/build/src/cli/render/text.js +0 -33
  389. package/build/src/cli/result.d.ts +0 -240
  390. package/build/src/cli/result.js +0 -1
  391. package/build/src/git/result-codec.d.ts +0 -29
  392. package/build/src/git/result-codec.js +0 -309
  393. package/build/src/kanshi/fleet.d.ts +0 -6
  394. package/build/src/kanshi/fleet.js +0 -27
  395. package/build/src/library/audit.d.ts +0 -29
  396. package/build/src/library/audit.js +0 -41
  397. package/build/src/library/catalog.d.ts +0 -68
  398. package/build/src/library/catalog.js +0 -130
  399. package/build/src/library/composition.d.ts +0 -403
  400. package/build/src/library/composition.js +0 -29
  401. package/build/src/library/configuration.d.ts +0 -4
  402. package/build/src/library/configuration.js +0 -2
  403. package/build/src/library/contract-bind.d.ts +0 -31
  404. package/build/src/library/contract-bind.js +0 -140
  405. package/build/src/library/contract-forwarding.d.ts +0 -55
  406. package/build/src/library/contract-forwarding.js +0 -67
  407. package/build/src/library/contract-handle.d.ts +0 -45
  408. package/build/src/library/contract-handle.js +0 -373
  409. package/build/src/library/contract.d.ts +0 -53
  410. package/build/src/library/contract.js +0 -91
  411. package/build/src/library/execution-result.d.ts +0 -243
  412. package/build/src/library/execution-result.js +0 -101
  413. package/build/src/library/execution.d.ts +0 -8
  414. package/build/src/library/execution.js +0 -102
  415. package/build/src/library/fleet.d.ts +0 -83
  416. package/build/src/library/mutation.d.ts +0 -501
  417. package/build/src/library/mutation.js +0 -248
  418. package/build/src/library/result-codec.d.ts +0 -2
  419. package/build/src/library/result-codec.js +0 -12
  420. package/build/src/protocol/result-codec.d.ts +0 -23
  421. package/build/src/protocol/result-codec.js +0 -488
  422. package/build/src/settlement/result-codec.d.ts +0 -2
  423. package/build/src/settlement/result-codec.js +0 -56
  424. package/build/src/task/public.d.ts +0 -2
  425. package/build/src/task/public.js +0 -1
@@ -1,24 +1,51 @@
1
+ import type { WorldRoot } from "../world.js";
2
+ import { type LiveStatusObservation, type WaitReason } from "./akuma-observe.js";
3
+ import type { AkumaStatus } from "./akuma.js";
1
4
  import { type TellResult, type TellWakeRuntime } from "./body.js";
2
- import { HeldAkumaLeash, type KillEvidence, type TellFact, type TurnOutcome } from "./heart/index.js";
5
+ import { type CallInitialTell, type CallInitialTellAdmission } from "./call-initial-tell.js";
6
+ import { HeldAkumaLeash, type KillEvidence, type ResumeCoordinate, type TellFact, type TurnOutcome } from "./heart/index.js";
3
7
  import { type AkuId, type AkumaPaths } from "./identity.js";
4
- import { type ActivityHistory, type ExactHistory } from "./projection.js";
5
- import { type WaitReason } from "./akuma-observe.js";
6
- import type { AkumaCallExecution, AkumaStatus, ForkReceipt, InterruptReceipt } from "./akuma.js";
7
- import type { WorldRoot } from "../world.js";
8
- declare const CALL_EXECUTION: unique symbol;
9
- export declare function settleAkumaKill(paths: AkumaPaths, signal?: AbortSignal, retainLeash?: boolean): Promise<Readonly<{
10
- evidence: KillEvidence;
11
- leash?: HeldAkumaLeash;
12
- }>>;
13
- export declare function killAkumaWithRecovery(paths: AkumaPaths, recover?: (paths: AkumaPaths) => Promise<void>, signal?: AbortSignal): Promise<KillEvidence>;
14
- export type TellAdmission = Readonly<{
8
+ import type { ActivityHistory, ExactHistory } from "./projection.js";
9
+ export type InterruptReceipt = Readonly<{
10
+ kind: "unavailable";
11
+ evidence: "hung" | "untidy" | "unavailable";
12
+ }> | Readonly<{
13
+ kind: "interrupted";
14
+ putDown: "was-idle" | "self-aborted";
15
+ tell: TellResult;
16
+ }>;
17
+ export type ForkReceipt = Readonly<{
18
+ kind: "forked";
19
+ child: AkuId;
20
+ }> | Readonly<{
21
+ kind: "provider-cannot-fork";
22
+ provider: string;
23
+ }> | Readonly<{
24
+ kind: "unknown-history";
25
+ at: string;
26
+ }> | Readonly<{
27
+ kind: "fork-failed";
28
+ diagnostic: string;
29
+ }> | Readonly<{
30
+ kind: "upstream-forked";
31
+ childSession: ResumeCoordinate;
32
+ diagnostic: string;
33
+ }>;
34
+ export type LastAnswer = Readonly<{
35
+ kind: "answer";
36
+ answer: string;
37
+ }> | Readonly<{
38
+ kind: "no-answer";
39
+ }>;
40
+ type TellAdmission = Readonly<{
15
41
  kind: "not-born";
16
42
  }> | Readonly<{
17
43
  kind: "admitted";
18
44
  tell: TellFact;
19
45
  wake: Promise<TellResult>;
20
46
  }>;
21
- export type InterruptAdmission = Readonly<{
47
+ type InitialTellAdmission = CallInitialTellAdmission;
48
+ type InterruptAdmission = Readonly<{
22
49
  kind: "unavailable";
23
50
  evidence: "hung" | "untidy" | "unavailable";
24
51
  }> | Readonly<{
@@ -27,11 +54,21 @@ export type InterruptAdmission = Readonly<{
27
54
  putDown: "was-idle" | "self-aborted";
28
55
  wake: Promise<TellResult>;
29
56
  }>;
30
- export declare class AkumaHandle {
57
+ export declare function settleAkumaKill(paths: AkumaPaths, signal?: AbortSignal, retainLeash?: boolean): Promise<Readonly<{
58
+ evidence: KillEvidence;
59
+ leash?: HeldAkumaLeash;
60
+ }>>;
61
+ export declare function killAkumaWithRecovery(paths: AkumaPaths, recover?: (paths: AkumaPaths) => Promise<void>, signal?: AbortSignal): Promise<KillEvidence>;
62
+ /**
63
+ * The one lower native Akuma owner: standalone identity, plural selection and
64
+ * the request service all consume these same single-target algorithms. It reads
65
+ * only Heart, leash, provider and filesystem state; optional Alias, Dispatch,
66
+ * Task and Contract associations are composed above this boundary.
67
+ */
68
+ export declare class AkumaOwner {
31
69
  readonly id: AkuId;
32
70
  private readonly worldPath;
33
- readonly [CALL_EXECUTION]?: AkumaCallExecution;
34
- constructor(id: AkuId, worldPath: WorldRoot, execution?: AkumaCallExecution);
71
+ constructor(id: AkuId, worldPath: WorldRoot);
35
72
  private get paths();
36
73
  private projectHistoryTurns;
37
74
  private exactHistory;
@@ -53,6 +90,10 @@ export declare class AkumaHandle {
53
90
  timeoutMs?: number;
54
91
  signal?: AbortSignal;
55
92
  }>): Promise<AkumaStatus>;
93
+ admitInitialTell(initialTell: CallInitialTell, options?: Readonly<{
94
+ signal?: AbortSignal;
95
+ runtime?: TellWakeRuntime;
96
+ }>): Promise<InitialTellAdmission>;
56
97
  tell(body: string, tellId?: string, recordedAt?: string, runtime?: TellWakeRuntime, options?: Readonly<{
57
98
  schemaJson?: string;
58
99
  initiator?: string;
@@ -78,10 +119,11 @@ export declare class AkumaHandle {
78
119
  tellOutcome(tellId: string, options?: Readonly<{
79
120
  timeoutMs?: number;
80
121
  signal?: AbortSignal;
81
- observe?: (observation: import("./akuma-observe.js").LiveStatusObservation) => void | Promise<void>;
122
+ observe?: (observation: LiveStatusObservation) => void | Promise<void>;
82
123
  }>): Promise<Readonly<{
83
124
  reason: WaitReason;
84
125
  outcome: TurnOutcome | null;
126
+ completedAt: string | null;
85
127
  }>>;
86
128
  private boundTellOutcome;
87
129
  interrupt(body: string, options?: Readonly<{
@@ -110,12 +152,5 @@ export declare class AkumaHandle {
110
152
  }>): Promise<KillEvidence>;
111
153
  lastAnswer(): Promise<LastAnswer>;
112
154
  }
113
- /** Package-internal provenance retained only by the handle returned from call. */
114
- export declare function akumaCallExecution(handle: AkumaHandle): AkumaCallExecution | undefined;
115
- export type LastAnswer = Readonly<{
116
- kind: "answer";
117
- answer: string;
118
- }> | Readonly<{
119
- kind: "no-answer";
120
- }>;
121
155
  export {};
156
+ /** The alias and Dispatch association an upper caller resolves for one observed Akuma. */
@@ -1,15 +1,15 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { handoffPendingTells, wakeRecordedTell } from "./body.js";
3
- import { HeldAkumaLeash, activitySlice, readForkPoint, readHeart, readKill, readLastAnsweredTurn, readSoul, readTell, readTurn, recordTell, requestPause, requestStop, projectTell, } from "./heart/index.js";
2
+ import { AkumaNotBornError, AkumaProviderError } from "./akuma-errors.js";
3
+ import { bornLiveStatus, bornStatus, defaultWaitComplete, waitForObservation, } from "./akuma-observe.js";
4
+ import { executeWaitAkuma } from "./akuma-wait.js";
5
+ import { handoffPendingTells, spawnAkumaBody, wakeRecordedTell, } from "./body.js";
6
+ import { admitCallInitialTell } from "./call-initial-tell.js";
4
7
  import { acquireLeash } from "./control.js";
8
+ import { HeldAkumaLeash, activitySlice, projectTell, readForkPoint, readHeart, readKill, readLastAnsweredTurn, readSoul, readTell, readTurn, recordTell, requestPause, requestStop, } from "./heart/index.js";
5
9
  import { parsePublicHistoryId, pathsForAkuId } from "./identity.js";
6
- import { projectTurns, selectHistory, selectExactHistory, } from "./projection.js";
10
+ import { projectTurns, selectExactHistory, selectHistory } from "./projection.js";
7
11
  import { resolveProviderExecution } from "./providers/index.js";
8
12
  import { publishAkuma } from "./publication.js";
9
- import { spawnAkumaBody } from "./body.js";
10
- import { AkumaNotBornError, AkumaProviderError } from "./akuma-errors.js";
11
- import { bornStatus, bornLiveStatus, defaultWaitComplete, readWaitComplete, waitForObservation, } from "./akuma-observe.js";
12
- const CALL_EXECUTION = Symbol("akuma-call-execution");
13
13
  function diagnostic(error) {
14
14
  return error instanceof Error ? error.message : String(error);
15
15
  }
@@ -79,15 +79,18 @@ export async function killAkumaWithRecovery(paths, recover, signal) {
79
79
  void recover(paths).catch(() => undefined);
80
80
  }
81
81
  }
82
- export class AkumaHandle {
82
+ /**
83
+ * The one lower native Akuma owner: standalone identity, plural selection and
84
+ * the request service all consume these same single-target algorithms. It reads
85
+ * only Heart, leash, provider and filesystem state; optional Alias, Dispatch,
86
+ * Task and Contract associations are composed above this boundary.
87
+ */
88
+ export class AkumaOwner {
83
89
  id;
84
90
  worldPath;
85
- [CALL_EXECUTION];
86
- constructor(id, worldPath, execution) {
91
+ constructor(id, worldPath) {
87
92
  this.id = id;
88
93
  this.worldPath = worldPath;
89
- if (execution !== undefined)
90
- this[CALL_EXECUTION] = execution;
91
94
  }
92
95
  get paths() {
93
96
  return pathsForAkuId(this.worldPath, this.id);
@@ -136,20 +139,28 @@ export class AkumaHandle {
136
139
  if (options.timeoutMs !== undefined && (!Number.isFinite(options.timeoutMs) || options.timeoutMs < 0)) {
137
140
  throw new TypeError("Akuma wait timeoutMs must be a nonnegative finite millisecond duration");
138
141
  }
139
- const waited = await waitForObservation({
142
+ const waited = await executeWaitAkuma({
143
+ path: this.worldPath,
144
+ ids: [this.id],
145
+ completion: "all",
140
146
  ...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),
141
147
  ...(options.signal === undefined ? {} : { signal: options.signal }),
142
- ...(predicate === defaultWaitComplete
143
- ? { probe: async () => await readWaitComplete(this.worldPath, this.id) }
144
- : {}),
145
- observe: async () => await this.status(),
146
- complete: predicate,
148
+ ...(predicate === defaultWaitComplete ? {} : { predicate }),
147
149
  });
148
- return { reason: waited.reason, status: waited.value };
150
+ return { reason: waited.reason, status: waited.observations[0] };
149
151
  }
150
152
  async wait(predicate = defaultWaitComplete, options = {}) {
151
153
  return (await this.waitReceipt(predicate, options)).status;
152
154
  }
155
+ async admitInitialTell(initialTell, options = {}) {
156
+ return await admitCallInitialTell({
157
+ world: this.worldPath,
158
+ id: this.id,
159
+ initialTell,
160
+ ...(options.signal === undefined ? {} : { signal: options.signal }),
161
+ wake: (tell) => wakeRecordedTell(this.paths, tell.id, options.runtime, options.signal),
162
+ });
163
+ }
153
164
  async tell(body, tellId = randomUUID(), recordedAt = new Date().toISOString(), runtime, options = {}) {
154
165
  const admitted = await this.admitTell(body, tellId, recordedAt, runtime, options);
155
166
  if (admitted.kind === "not-born")
@@ -212,17 +223,21 @@ export class AkumaHandle {
212
223
  if (options.observe !== undefined) {
213
224
  await options.observe(await bornLiveStatus(this.paths, this.id, { aperture: "monitoring", admittedTellId: tellId }));
214
225
  }
215
- return { outcome, terminalWithoutTurn: tell.state === "told" && tell.binding === undefined };
226
+ return { ...outcome, terminalWithoutTurn: tell.state === "told" && tell.binding === undefined };
216
227
  },
217
228
  complete: (observed) => observed.outcome !== null || observed.terminalWithoutTurn,
218
229
  });
219
- return { reason: waited.reason, outcome: waited.value.outcome };
230
+ return {
231
+ reason: waited.reason,
232
+ outcome: waited.value.outcome,
233
+ completedAt: waited.value.completedAt,
234
+ };
220
235
  }
221
236
  async boundTellOutcome(tell) {
222
237
  if (tell.binding === undefined)
223
- return null;
224
- const turn = await readTurn(this.paths, tell.binding.turnSequence);
225
- return turn?.end?.outcome ?? null;
238
+ return { outcome: null, completedAt: null };
239
+ const end = (await readTurn(this.paths, tell.binding.turnSequence))?.end;
240
+ return { outcome: end?.outcome ?? null, completedAt: end?.completedAt ?? null };
226
241
  }
227
242
  async interrupt(body, options = {}) {
228
243
  const admitted = await this.admitInterrupt(body, options);
@@ -331,7 +346,6 @@ export class AkumaHandle {
331
346
  ...(source.description === undefined ? {} : { description: source.description }),
332
347
  provider: source.provider,
333
348
  options: source.options,
334
- ...(source.readonly === undefined ? {} : { readonly: source.readonly }),
335
349
  allowed: source.allowed,
336
350
  cwd: source.cwd,
337
351
  origin: { kind: "fork", parent: this.id, at: input.at },
@@ -360,7 +374,7 @@ export class AkumaHandle {
360
374
  : { kind: "no-answer" };
361
375
  }
362
376
  }
363
- /** Package-internal provenance retained only by the handle returned from call. */
364
- export function akumaCallExecution(handle) {
365
- return handle[CALL_EXECUTION];
366
- }
377
+ /* ---------------------------------------------------------------------------
378
+ * One wait owner and its legitimate observation modes
379
+ * ------------------------------------------------------------------------ */
380
+ /** The alias and Dispatch association an upper caller resolves for one observed Akuma. */
@@ -0,0 +1,51 @@
1
+ import type { WorldRoot } from "../world.js";
2
+ import type { LiveStatusObservation } from "./akuma-observe.js";
3
+ import type { AkumaStatus } from "./akuma.js";
4
+ import type { TellResult } from "./body.js";
5
+ import type { Schema } from "./schema.js";
6
+ import type { AkumaAskObservation, AkumaAskResult, AkumaKillResult, AkumaTellResult } from "./selection-observation.js";
7
+ export type AskObserver = Readonly<{
8
+ admitted?: (tell: TellResult, id: AkumaStatus["id"]) => void | Promise<void>;
9
+ observe?: (observation: LiveStatusObservation) => void | Promise<void>;
10
+ }>;
11
+ type TellExecutionInput = Readonly<{
12
+ path: WorldRoot;
13
+ id: AkumaStatus["id"];
14
+ body: string;
15
+ tellId?: string;
16
+ recordedAt?: string;
17
+ initiator?: string;
18
+ signal?: AbortSignal;
19
+ interrupt?: boolean;
20
+ onObserve?: AskObserver;
21
+ }>;
22
+ export declare function executeTellAkuma(input: TellExecutionInput): Promise<AkumaTellResult>;
23
+ export declare function decodeAskObservation<T>(observation: AkumaAskObservation, schema: Schema<T>): AkumaAskObservation<T>;
24
+ export declare function observeAdmittedAskAkuma(input: Readonly<{
25
+ path: WorldRoot;
26
+ id: AkumaStatus["id"];
27
+ tellId: string;
28
+ timeoutMs?: number;
29
+ signal?: AbortSignal;
30
+ startedAt?: number;
31
+ wake?: Promise<TellResult>;
32
+ /**
33
+ * The exact receipt of the admission this observation is bound to. The
34
+ * call-facing seam always supplies it so observation never substitutes a
35
+ * later Heart read for that invocation's admission evidence. Ordinary
36
+ * Tell-bound asks may omit it and keep reading the current admitted receipt.
37
+ */
38
+ receipt?: TellResult;
39
+ onObserve?: AskObserver;
40
+ }>): Promise<AkumaAskResult>;
41
+ export declare function executeAskAkuma(input: TellExecutionInput & Readonly<{
42
+ timeoutMs?: number;
43
+ schemaJson?: string;
44
+ }>): Promise<AkumaAskResult>;
45
+ type KillExecutionInput = Readonly<{
46
+ path: WorldRoot;
47
+ ids: readonly AkumaStatus["id"][];
48
+ signal?: AbortSignal;
49
+ }>;
50
+ export declare function executeKillAkuma(input: KillExecutionInput): Promise<AkumaKillResult>;
51
+ export {};
@@ -0,0 +1,134 @@
1
+ import { AkumaNotBornError, AkumaProviderError } from "./akuma-errors.js";
2
+ import { AkumaOwner } from "./akuma-owner.js";
3
+ export async function executeTellAkuma(input) {
4
+ input.signal?.throwIfAborted();
5
+ const owner = new AkumaOwner(input.id, input.path);
6
+ let tell;
7
+ if (input.interrupt === true) {
8
+ const interrupted = await owner.interrupt(input.body, {
9
+ ...(input.tellId === undefined ? {} : { tellId: input.tellId }),
10
+ ...(input.initiator === undefined ? {} : { initiator: input.initiator }),
11
+ ...(input.signal === undefined ? {} : { signal: input.signal }),
12
+ });
13
+ if (interrupted.kind === "unavailable")
14
+ throw new AkumaProviderError(`Tell interrupt unavailable: ${interrupted.evidence}`);
15
+ tell = interrupted.tell;
16
+ }
17
+ else {
18
+ tell = await owner.tell(input.body, input.tellId, input.recordedAt, undefined, {
19
+ ...(input.initiator === undefined ? {} : { initiator: input.initiator }),
20
+ ...(input.signal === undefined ? {} : { signal: input.signal }),
21
+ });
22
+ }
23
+ input.signal?.throwIfAborted();
24
+ return { akuma: input.id, tell };
25
+ }
26
+ function askObservation(observed) {
27
+ if (observed.outcome === null)
28
+ return observed.reason === "deadline" ? { reason: "deadline" } : { reason: "unanswered" };
29
+ if (observed.outcome.kind === "answered")
30
+ return { reason: "answered", answer: observed.outcome.answerJson ?? observed.outcome.answer };
31
+ if (observed.outcome.kind === "failed")
32
+ return { reason: "failed", diagnostic: observed.outcome.diagnostic };
33
+ return {
34
+ reason: "invalid-output",
35
+ diagnostic: observed.outcome.diagnostic,
36
+ answer: observed.outcome.answer,
37
+ };
38
+ }
39
+ export function decodeAskObservation(observation, schema) {
40
+ if (observation.reason !== "answered")
41
+ return observation;
42
+ let value = observation.answer;
43
+ if (typeof value === "string") {
44
+ try {
45
+ value = JSON.parse(value);
46
+ }
47
+ catch (error) {
48
+ return {
49
+ reason: "invalid-output",
50
+ diagnostic: error instanceof Error ? error.message : "Answer is not valid JSON",
51
+ answer: typeof observation.answer === "string" ? observation.answer : String(observation.answer),
52
+ };
53
+ }
54
+ }
55
+ try {
56
+ return { reason: "answered", answer: schema.decode(value) };
57
+ }
58
+ catch (error) {
59
+ return {
60
+ reason: "invalid-output",
61
+ diagnostic: error instanceof Error ? error.message : "Answer failed schema decode",
62
+ answer: typeof observation.answer === "string" ? observation.answer : String(observation.answer),
63
+ };
64
+ }
65
+ }
66
+ export async function observeAdmittedAskAkuma(input) {
67
+ const owner = new AkumaOwner(input.id, input.path);
68
+ const tell = input.receipt ?? (await owner.admittedReceipt(input.tellId));
69
+ await input.onObserve?.admitted?.(tell, input.id);
70
+ let settled;
71
+ void input.wake?.then((receipt) => {
72
+ settled = receipt;
73
+ }, () => undefined);
74
+ const admittedAt = Date.parse(tell.row.at);
75
+ const observedAt = performance.timeOrigin + performance.now();
76
+ const elapsed = input.startedAt === undefined
77
+ ? Number.isFinite(admittedAt)
78
+ ? Math.max(0, observedAt - admittedAt)
79
+ : 0
80
+ : Math.max(0, performance.now() - input.startedAt);
81
+ const observed = await owner.tellOutcome(input.tellId, {
82
+ ...(input.timeoutMs === undefined ? {} : { timeoutMs: Math.max(0, input.timeoutMs - elapsed) }),
83
+ ...(input.signal === undefined ? {} : { signal: input.signal }),
84
+ ...(input.onObserve?.observe === undefined ? {} : { observe: input.onObserve.observe }),
85
+ });
86
+ return {
87
+ akuma: input.id,
88
+ tell: settled ?? tell,
89
+ observation: askObservation(observed),
90
+ completedAt: observed.completedAt,
91
+ };
92
+ }
93
+ export async function executeAskAkuma(input) {
94
+ input.signal?.throwIfAborted();
95
+ const owner = new AkumaOwner(input.id, input.path);
96
+ const admission = input.interrupt === true
97
+ ? await owner.admitInterrupt(input.body, {
98
+ ...(input.tellId === undefined ? {} : { tellId: input.tellId }),
99
+ ...(input.schemaJson === undefined ? {} : { schemaJson: input.schemaJson }),
100
+ ...(input.initiator === undefined ? {} : { initiator: input.initiator }),
101
+ ...(input.signal === undefined ? {} : { signal: input.signal }),
102
+ })
103
+ : await owner.admitTell(input.body, input.tellId, input.recordedAt, undefined, {
104
+ ...(input.schemaJson === undefined ? {} : { schemaJson: input.schemaJson }),
105
+ ...(input.initiator === undefined ? {} : { initiator: input.initiator }),
106
+ ...(input.signal === undefined ? {} : { signal: input.signal }),
107
+ });
108
+ if (admission.kind === "unavailable")
109
+ throw new AkumaProviderError(`Tell interrupt unavailable: ${admission.evidence}`);
110
+ if (admission.kind === "not-born")
111
+ throw new AkumaNotBornError(input.id);
112
+ return await observeAdmittedAskAkuma({
113
+ path: input.path,
114
+ id: input.id,
115
+ tellId: admission.tell.id,
116
+ ...(input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs }),
117
+ startedAt: performance.now(),
118
+ wake: admission.wake,
119
+ ...(input.signal === undefined ? {} : { signal: input.signal }),
120
+ ...(input.onObserve === undefined ? {} : { onObserve: input.onObserve }),
121
+ });
122
+ }
123
+ export async function executeKillAkuma(input) {
124
+ input.signal?.throwIfAborted();
125
+ const owners = input.ids.map((id) => new AkumaOwner(id, input.path));
126
+ const evidence = await Promise.all(owners.map(async (owner) => await owner.kill(input.signal === undefined ? {} : { signal: input.signal })));
127
+ input.signal?.throwIfAborted();
128
+ return {
129
+ results: input.ids.map((id, index) => ({ id, evidence: evidence[index] })),
130
+ };
131
+ }
132
+ /* ---------------------------------------------------------------------------
133
+ * Native roster, archetype listing and the one prepared call recipe
134
+ * ------------------------------------------------------------------------ */
@@ -1,10 +1,10 @@
1
- import { type AkumaStatus, type TellResult } from "./akuma.js";
2
- import { type LiveStatusObservation } from "./akuma-observe.js";
3
- import type { ActivityRow } from "./projection.js";
4
- import { type DispatchAssociation } from "./dispatch-association.js";
5
1
  import type { AkumaAlias } from "../identity/selector.js";
6
2
  import type { WorldRoot } from "../world.js";
7
- import { type AkumaKillResult, type AkumaTellResult, type AkumaTellWaitResult, type AkumaWaitResult } from "./fleet-observation.js";
3
+ import { type WaitReason } from "./akuma-observe.js";
4
+ import type { AkumaStatus } from "./akuma.js";
5
+ import type { DispatchAssociation } from "./dispatch-association.js";
6
+ import type { ActivityRow } from "./projection.js";
7
+ import type { AkumaUnobserved } from "./selection-observation.js";
8
8
  export type WaitIdentityFacts = Readonly<{
9
9
  /** The alias currently addressing this Akuma in its world, when one is bound to it. */
10
10
  alias?: AkumaAlias;
@@ -25,12 +25,14 @@ export type WaitObserver = Readonly<{
25
25
  selected?: (selected: readonly WaitSelectedAkuma[]) => void;
26
26
  observe?: (observed: readonly WaitObservedAkuma[]) => void;
27
27
  }>;
28
- export type WaitExecutionInput = Readonly<{
28
+ type WaitExecutionInput = Readonly<{
29
29
  path: WorldRoot;
30
30
  ids: readonly AkumaStatus["id"][];
31
31
  completion: "any" | "all";
32
32
  timeoutMs?: number;
33
33
  signal?: AbortSignal;
34
+ /** Internal custom completion judge over the full final observation where supplied. */
35
+ predicate?: (status: AkumaStatus) => boolean;
34
36
  /** Resolves one Akuma's identity facts; consulted once per Akuma a viewer first sees. */
35
37
  identity?: (id: AkumaStatus["id"]) => Promise<WaitIdentityFacts>;
36
38
  /** The selected set in the caller's order; a viewer's head and scoreboard follow it. */
@@ -40,30 +42,20 @@ export type WaitExecutionInput = Readonly<{
40
42
  /** Reports every observation round to a live viewer. */
41
43
  observe?: (observed: readonly WaitObservedAkuma[]) => void;
42
44
  }>;
43
- export declare function executeWaitAkuma(input: WaitExecutionInput): Promise<AkumaWaitResult>;
44
- export type TellWaitObserver = Readonly<{
45
- admitted?: (tell: TellResult, id: AkumaStatus["id"]) => void | Promise<void>;
46
- observe?: (observation: LiveStatusObservation) => void | Promise<void>;
47
- }>;
48
- export type TellExecutionInput = Readonly<{
49
- path: WorldRoot;
50
- id: AkumaStatus["id"];
51
- body: string;
52
- tellId?: string;
53
- recordedAt?: string;
54
- initiator?: string;
55
- signal?: AbortSignal;
56
- onObserve?: TellWaitObserver;
57
- }>;
58
- export declare function executeTellAkuma(input: TellExecutionInput): Promise<AkumaTellResult>;
59
- export declare function executeTellWaitAkuma(input: TellExecutionInput & Readonly<{
60
- timeoutMs: number;
61
- schemaJson?: string;
62
- interrupt?: boolean;
63
- }>): Promise<AkumaTellWaitResult>;
64
- export type KillExecutionInput = Readonly<{
65
- path: WorldRoot;
66
- ids: readonly AkumaStatus["id"][];
67
- signal?: AbortSignal;
45
+ /** One wait's association-free native evidence; upper composition attaches cross-product context. */
46
+ export type NativeWaitResult = Readonly<{
47
+ mode: "any" | "all";
48
+ reason: WaitReason;
49
+ observations: readonly AkumaStatus[];
50
+ unobserved: readonly AkumaUnobserved[];
68
51
  }>;
69
- export declare function executeKillAkuma(input: KillExecutionInput): Promise<AkumaKillResult>;
52
+ /**
53
+ * The one lower set-observation owner for Akuma wait completion. It serves the
54
+ * standalone one-ID association-free face and the plural any/all face with one
55
+ * ordered round algorithm, one shared ordinary-detail budget, transient
56
+ * unreadable peers, and an honest final deadline edge. The default completion
57
+ * probe is used only without live row callbacks and never with a custom
58
+ * predicate; a live viewer always observes rounds.
59
+ */
60
+ export declare function executeWaitAkuma(input: WaitExecutionInput): Promise<NativeWaitResult>;
61
+ export {};
@@ -0,0 +1,113 @@
1
+ import { AkumaNotBornError } from "./akuma-errors.js";
2
+ import { defaultWaitComplete, readLiveStatus, readWaitComplete, waitForObservation, } from "./akuma-observe.js";
3
+ const SHARED_ORDINARY_BUDGET = 30;
4
+ async function observeWaitRound(path, ids, signal) {
5
+ signal?.throwIfAborted();
6
+ if (ids.length <= 1) {
7
+ const observations = await Promise.all(ids.map(async (id) => await readLiveStatus(path, id, { aperture: "monitoring" })));
8
+ return { observations, unobserved: [] };
9
+ }
10
+ let remaining = SHARED_ORDINARY_BUDGET;
11
+ const observations = [];
12
+ const unobserved = [];
13
+ for (const id of ids) {
14
+ signal?.throwIfAborted();
15
+ try {
16
+ const observed = await readLiveStatus(path, id, { aperture: "monitoring", ordinaryBudget: remaining });
17
+ observations.push(observed);
18
+ remaining -= observed.ordinarySelected;
19
+ }
20
+ catch (error) {
21
+ if (error instanceof AkumaNotBornError)
22
+ throw error;
23
+ unobserved.push({ id, diagnostic: diagnostic(error) });
24
+ }
25
+ }
26
+ return { observations, unobserved };
27
+ }
28
+ function roundComplete(round, completion, predicate) {
29
+ const judge = predicate ?? defaultWaitComplete;
30
+ const settled = round.observations.map((observation) => judge(observation.status));
31
+ return (settled.length > 0 &&
32
+ (completion === "any" ? settled.some(Boolean) : round.unobserved.length === 0 && settled.every(Boolean)));
33
+ }
34
+ /** Canonical ids in the caller's selection order, appending any id the caller never named. */
35
+ function selectionOrderedIds(ids, order) {
36
+ const present = new Set(ids);
37
+ const seen = new Set();
38
+ const ordered = [];
39
+ for (const id of order) {
40
+ if (present.has(id) && !seen.has(id)) {
41
+ seen.add(id);
42
+ ordered.push(id);
43
+ }
44
+ }
45
+ for (const id of ids) {
46
+ if (!seen.has(id)) {
47
+ seen.add(id);
48
+ ordered.push(id);
49
+ }
50
+ }
51
+ return ordered;
52
+ }
53
+ /**
54
+ * The one lower set-observation owner for Akuma wait completion. It serves the
55
+ * standalone one-ID association-free face and the plural any/all face with one
56
+ * ordered round algorithm, one shared ordinary-detail budget, transient
57
+ * unreadable peers, and an honest final deadline edge. The default completion
58
+ * probe is used only without live row callbacks and never with a custom
59
+ * predicate; a live viewer always observes rounds.
60
+ */
61
+ export async function executeWaitAkuma(input) {
62
+ // Identity facts are read once per observed Akuma, not once per 100ms round.
63
+ const facts = new Map();
64
+ if (input.onSelected !== undefined) {
65
+ for (const id of input.ids) {
66
+ input.signal?.throwIfAborted();
67
+ const known = input.identity === undefined ? undefined : await input.identity(id);
68
+ facts.set(id, known ?? { contract: { kind: "none" } });
69
+ }
70
+ const ordered = input.selectionOrder === undefined ? input.ids : selectionOrderedIds(input.ids, input.selectionOrder);
71
+ input.onSelected(ordered.map((id) => ({ id, ...facts.get(id) })));
72
+ }
73
+ const observeRound = async (round) => {
74
+ if (input.observe === undefined)
75
+ return;
76
+ const observed = [];
77
+ for (const observation of round.observations) {
78
+ input.signal?.throwIfAborted();
79
+ const { status, rows } = observation;
80
+ let known = facts.get(status.id);
81
+ if (known === undefined && input.identity !== undefined) {
82
+ known = await input.identity(status.id);
83
+ facts.set(status.id, known);
84
+ }
85
+ if (known === undefined) {
86
+ observed.push({ status, rows, contract: { kind: "none" } });
87
+ continue;
88
+ }
89
+ observed.push({ status, rows, ...known });
90
+ }
91
+ input.observe(observed);
92
+ };
93
+ const live = input.observe !== undefined;
94
+ const waited = await waitForObservation({
95
+ ...(input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs }),
96
+ ...(input.signal === undefined ? {} : { signal: input.signal }),
97
+ ...(input.predicate === undefined && !live && input.ids.length === 1
98
+ ? { probe: async () => await readWaitComplete(input.path, input.ids[0]) }
99
+ : {}),
100
+ observe: async () => await observeWaitRound(input.path, input.ids, input.signal),
101
+ complete: (round) => roundComplete(round, input.completion, input.predicate),
102
+ onObserve: async (round) => await observeRound(round),
103
+ });
104
+ return {
105
+ mode: input.completion,
106
+ reason: waited.reason,
107
+ observations: waited.value.observations.map((observation) => observation.status),
108
+ unobserved: waited.value.unobserved,
109
+ };
110
+ }
111
+ function diagnostic(error) {
112
+ return error instanceof Error ? error.message : String(error);
113
+ }