@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
@@ -1,26 +1,51 @@
1
- import { type CallInitialTell, type CallInitialTellAdmission } from "./call-initial-tell.js";
1
+ import type { WorldRoot } from "../world.js";
2
+ import { type LiveStatusObservation, type WaitReason } from "./akuma-observe.js";
3
+ import type { AkumaStatus } from "./akuma.js";
2
4
  import { type TellResult, type TellWakeRuntime } from "./body.js";
3
- 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";
4
7
  import { type AkuId, type AkumaPaths } from "./identity.js";
5
- import { type ActivityHistory, type ExactHistory } from "./projection.js";
6
- import { type WaitReason } from "./akuma-observe.js";
7
- import type { AkumaCallExecution, AkumaStatus, ForkReceipt, InterruptReceipt } from "./akuma.js";
8
- import type { WorldRoot } from "../world.js";
9
- declare const CALL_EXECUTION: unique symbol;
10
- export declare function settleAkumaKill(paths: AkumaPaths, signal?: AbortSignal, retainLeash?: boolean): Promise<Readonly<{
11
- evidence: KillEvidence;
12
- leash?: HeldAkumaLeash;
13
- }>>;
14
- export declare function killAkumaWithRecovery(paths: AkumaPaths, recover?: (paths: AkumaPaths) => Promise<void>, signal?: AbortSignal): Promise<KillEvidence>;
15
- 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<{
16
41
  kind: "not-born";
17
42
  }> | Readonly<{
18
43
  kind: "admitted";
19
44
  tell: TellFact;
20
45
  wake: Promise<TellResult>;
21
46
  }>;
22
- export type InitialTellAdmission = CallInitialTellAdmission;
23
- export type InterruptAdmission = Readonly<{
47
+ type InitialTellAdmission = CallInitialTellAdmission;
48
+ type InterruptAdmission = Readonly<{
24
49
  kind: "unavailable";
25
50
  evidence: "hung" | "untidy" | "unavailable";
26
51
  }> | Readonly<{
@@ -29,11 +54,21 @@ export type InterruptAdmission = Readonly<{
29
54
  putDown: "was-idle" | "self-aborted";
30
55
  wake: Promise<TellResult>;
31
56
  }>;
32
- 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 {
33
69
  readonly id: AkuId;
34
70
  private readonly worldPath;
35
- readonly [CALL_EXECUTION]?: AkumaCallExecution;
36
- constructor(id: AkuId, worldPath: WorldRoot, execution?: AkumaCallExecution);
71
+ constructor(id: AkuId, worldPath: WorldRoot);
37
72
  private get paths();
38
73
  private projectHistoryTurns;
39
74
  private exactHistory;
@@ -84,7 +119,7 @@ export declare class AkumaHandle {
84
119
  tellOutcome(tellId: string, options?: Readonly<{
85
120
  timeoutMs?: number;
86
121
  signal?: AbortSignal;
87
- observe?: (observation: import("./akuma-observe.js").LiveStatusObservation) => void | Promise<void>;
122
+ observe?: (observation: LiveStatusObservation) => void | Promise<void>;
88
123
  }>): Promise<Readonly<{
89
124
  reason: WaitReason;
90
125
  outcome: TurnOutcome | null;
@@ -117,12 +152,5 @@ export declare class AkumaHandle {
117
152
  }>): Promise<KillEvidence>;
118
153
  lastAnswer(): Promise<LastAnswer>;
119
154
  }
120
- /** Package-internal provenance retained only by the handle returned from call. */
121
- export declare function akumaCallExecution(handle: AkumaHandle): AkumaCallExecution | undefined;
122
- export type LastAnswer = Readonly<{
123
- kind: "answer";
124
- answer: string;
125
- }> | Readonly<{
126
- kind: "no-answer";
127
- }>;
128
155
  export {};
156
+ /** The alias and Dispatch association an upper caller resolves for one observed Akuma. */
@@ -1,16 +1,15 @@
1
1
  import { randomUUID } from "node:crypto";
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";
2
6
  import { admitCallInitialTell } from "./call-initial-tell.js";
3
- import { handoffPendingTells, wakeRecordedTell } from "./body.js";
4
- import { HeldAkumaLeash, activitySlice, readForkPoint, readHeart, readKill, readLastAnsweredTurn, readSoul, readTell, readTurn, recordTell, requestPause, requestStop, projectTell, } from "./heart/index.js";
5
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";
6
9
  import { parsePublicHistoryId, pathsForAkuId } from "./identity.js";
7
- import { projectTurns, selectHistory, selectExactHistory, } from "./projection.js";
10
+ import { projectTurns, selectExactHistory, selectHistory } from "./projection.js";
8
11
  import { resolveProviderExecution } from "./providers/index.js";
9
12
  import { publishAkuma } from "./publication.js";
10
- import { spawnAkumaBody } from "./body.js";
11
- import { AkumaNotBornError, AkumaProviderError } from "./akuma-errors.js";
12
- import { bornStatus, bornLiveStatus, defaultWaitComplete, readWaitComplete, waitForObservation, } from "./akuma-observe.js";
13
- const CALL_EXECUTION = Symbol("akuma-call-execution");
14
13
  function diagnostic(error) {
15
14
  return error instanceof Error ? error.message : String(error);
16
15
  }
@@ -80,15 +79,18 @@ export async function killAkumaWithRecovery(paths, recover, signal) {
80
79
  void recover(paths).catch(() => undefined);
81
80
  }
82
81
  }
83
- 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 {
84
89
  id;
85
90
  worldPath;
86
- [CALL_EXECUTION];
87
- constructor(id, worldPath, execution) {
91
+ constructor(id, worldPath) {
88
92
  this.id = id;
89
93
  this.worldPath = worldPath;
90
- if (execution !== undefined)
91
- this[CALL_EXECUTION] = execution;
92
94
  }
93
95
  get paths() {
94
96
  return pathsForAkuId(this.worldPath, this.id);
@@ -137,16 +139,15 @@ export class AkumaHandle {
137
139
  if (options.timeoutMs !== undefined && (!Number.isFinite(options.timeoutMs) || options.timeoutMs < 0)) {
138
140
  throw new TypeError("Akuma wait timeoutMs must be a nonnegative finite millisecond duration");
139
141
  }
140
- const waited = await waitForObservation({
142
+ const waited = await executeWaitAkuma({
143
+ path: this.worldPath,
144
+ ids: [this.id],
145
+ completion: "all",
141
146
  ...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),
142
147
  ...(options.signal === undefined ? {} : { signal: options.signal }),
143
- ...(predicate === defaultWaitComplete
144
- ? { probe: async () => await readWaitComplete(this.worldPath, this.id) }
145
- : {}),
146
- observe: async () => await this.status(),
147
- complete: predicate,
148
+ ...(predicate === defaultWaitComplete ? {} : { predicate }),
148
149
  });
149
- return { reason: waited.reason, status: waited.value };
150
+ return { reason: waited.reason, status: waited.observations[0] };
150
151
  }
151
152
  async wait(predicate = defaultWaitComplete, options = {}) {
152
153
  return (await this.waitReceipt(predicate, options)).status;
@@ -373,7 +374,7 @@ export class AkumaHandle {
373
374
  : { kind: "no-answer" };
374
375
  }
375
376
  }
376
- /** Package-internal provenance retained only by the handle returned from call. */
377
- export function akumaCallExecution(handle) {
378
- return handle[CALL_EXECUTION];
379
- }
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,11 +1,10 @@
1
- import type { Schema } from "./schema.js";
2
- import { type AkumaStatus, type TellResult } from "./akuma.js";
3
- import { type LiveStatusObservation } from "./akuma-observe.js";
4
- import type { ActivityRow } from "./projection.js";
5
- import { type DispatchAssociation } from "./dispatch-association.js";
6
1
  import type { AkumaAlias } from "../identity/selector.js";
7
2
  import type { WorldRoot } from "../world.js";
8
- import { type AkumaKillResult, type AkumaTellResult, type AkumaTellWaitObservation, 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";
9
8
  export type WaitIdentityFacts = Readonly<{
10
9
  /** The alias currently addressing this Akuma in its world, when one is bound to it. */
11
10
  alias?: AkumaAlias;
@@ -26,12 +25,14 @@ export type WaitObserver = Readonly<{
26
25
  selected?: (selected: readonly WaitSelectedAkuma[]) => void;
27
26
  observe?: (observed: readonly WaitObservedAkuma[]) => void;
28
27
  }>;
29
- export type WaitExecutionInput = Readonly<{
28
+ type WaitExecutionInput = Readonly<{
30
29
  path: WorldRoot;
31
30
  ids: readonly AkumaStatus["id"][];
32
31
  completion: "any" | "all";
33
32
  timeoutMs?: number;
34
33
  signal?: AbortSignal;
34
+ /** Internal custom completion judge over the full final observation where supplied. */
35
+ predicate?: (status: AkumaStatus) => boolean;
35
36
  /** Resolves one Akuma's identity facts; consulted once per Akuma a viewer first sees. */
36
37
  identity?: (id: AkumaStatus["id"]) => Promise<WaitIdentityFacts>;
37
38
  /** The selected set in the caller's order; a viewer's head and scoreboard follow it. */
@@ -41,41 +42,20 @@ export type WaitExecutionInput = Readonly<{
41
42
  /** Reports every observation round to a live viewer. */
42
43
  observe?: (observed: readonly WaitObservedAkuma[]) => void;
43
44
  }>;
44
- export declare function executeWaitAkuma(input: WaitExecutionInput): Promise<AkumaWaitResult>;
45
- export type TellWaitObserver = Readonly<{
46
- admitted?: (tell: TellResult, id: AkumaStatus["id"]) => void | Promise<void>;
47
- observe?: (observation: LiveStatusObservation) => void | Promise<void>;
48
- }>;
49
- export type TellExecutionInput = Readonly<{
50
- path: WorldRoot;
51
- id: AkumaStatus["id"];
52
- body: string;
53
- tellId?: string;
54
- recordedAt?: string;
55
- initiator?: string;
56
- signal?: AbortSignal;
57
- onObserve?: TellWaitObserver;
58
- }>;
59
- export declare function executeTellAkuma(input: TellExecutionInput): Promise<AkumaTellResult>;
60
- export declare function decodeTellWaitObservation(observation: AkumaTellWaitObservation, schema: Schema<unknown>): AkumaTellWaitObservation;
61
- export declare function observeAdmittedTellWaitAkuma(input: Readonly<{
62
- path: WorldRoot;
63
- id: AkumaStatus["id"];
64
- tellId: string;
65
- timeoutMs: number;
66
- signal?: AbortSignal;
67
- startedAt?: number;
68
- wake?: Promise<TellResult>;
69
- onObserve?: TellWaitObserver;
70
- }>): Promise<AkumaTellWaitResult>;
71
- export declare function executeTellWaitAkuma(input: TellExecutionInput & Readonly<{
72
- timeoutMs: number;
73
- schemaJson?: string;
74
- interrupt?: boolean;
75
- }>): Promise<AkumaTellWaitResult>;
76
- export type KillExecutionInput = Readonly<{
77
- path: WorldRoot;
78
- ids: readonly AkumaStatus["id"][];
79
- 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[];
80
51
  }>;
81
- 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
+ }