@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,15 +1,17 @@
1
+ import { z } from "zod";
1
2
  declare const AKU_ID: unique symbol;
2
3
  export type AkuId = string & {
3
4
  readonly [AKU_ID]: true;
4
5
  };
5
6
  export declare function parsePublicHistoryId(value: string): number | null;
6
- export type AkumaPaths = Readonly<{
7
- directory: string;
8
- heart: string;
9
- leash: string;
10
- log: string;
11
- requests: string;
12
- }>;
7
+ export declare const akumaPathsSchema: z.ZodObject<{
8
+ directory: z.ZodString;
9
+ heart: z.ZodString;
10
+ leash: z.ZodString;
11
+ log: z.ZodString;
12
+ requests: z.ZodString;
13
+ }, z.core.$strict>;
14
+ export type AkumaPaths = z.infer<typeof akumaPathsSchema>;
13
15
  export type AllocatedAkuma = Readonly<{
14
16
  id: AkuId;
15
17
  archetype: string;
@@ -26,6 +28,7 @@ export declare function parseAkuId(value: string): Readonly<{
26
28
  archetype: string;
27
29
  suffix: string;
28
30
  }>;
31
+ export declare const akumaIdSchema: z.ZodPipe<z.ZodString, z.ZodTransform<AkuId, string>>;
29
32
  export declare function akumaRunRoot(worldRoot: string): string;
30
33
  export declare function akumaPaths(input: Readonly<{
31
34
  runRoot: string;
@@ -1,3 +1,4 @@
1
+ import { z } from "zod";
1
2
  import { randomBytes } from "node:crypto";
2
3
  import { mkdir, writeFile } from "node:fs/promises";
3
4
  import { dirname, join } from "node:path";
@@ -11,6 +12,16 @@ export function parsePublicHistoryId(value) {
11
12
  const sequence = Number(match[1]);
12
13
  return Number.isSafeInteger(sequence) ? sequence : null;
13
14
  }
15
+ const pathText = z.string().refine((value) => value.trim() !== "");
16
+ export const akumaPathsSchema = z
17
+ .object({
18
+ directory: pathText,
19
+ heart: pathText,
20
+ leash: pathText,
21
+ log: pathText,
22
+ requests: pathText,
23
+ })
24
+ .strict();
14
25
  export function archetypeName(value) {
15
26
  return validateAkumaName(value);
16
27
  }
@@ -36,6 +47,18 @@ export function parseAkuId(value) {
36
47
  const suffix = suffixSegment(segments[1]);
37
48
  return { id: value, archetype, suffix };
38
49
  }
50
+ export const akumaIdSchema = z.string().transform((value, context) => {
51
+ try {
52
+ const id = parseAkuId(value).id;
53
+ if (id !== value)
54
+ throw new Error("not canonical");
55
+ return id;
56
+ }
57
+ catch {
58
+ context.addIssue({ code: "custom", message: "expected canonical AkuId" });
59
+ return z.NEVER;
60
+ }
61
+ });
39
62
  export function akumaRunRoot(worldRoot) {
40
63
  return join(worldRoot, ".keiyaku", "akuma", "run");
41
64
  }
@@ -1,12 +1,14 @@
1
+ export type { WorldRoot } from "../world.js";
2
+ export { AkumaBusyError, AkumaDecodeError, AkumaNotBornError, AkumaProviderError } from "./akuma-errors.js";
1
3
  export { Akuma } from "./akuma-instance.js";
2
- export type { AkumaBirthInput, AkumaHistoryOptions, AkumaIdleOptions, AkumaIdleResult, AkumaSignalOptions, AkumaTellOptions, } from "./akuma-instance.js";
3
- export type { InterruptReceipt, KillEvidence } from "./akuma.js";
4
- export { Schema } from "./schema.js";
5
- export type { JsonSchema, JsonSchemaDocument, StandardSchemaV1, SchemaLike } from "./schema.js";
6
- export type { AkuId } from "./identity.js";
4
+ export type { AkumaAskOptions, AkumaBirthInput, AkumaHistoryOptions, AkumaIdleOptions, AkumaIdleResult, AkumaSignalOptions, AkumaTellOptions, } from "./akuma-instance.js";
5
+ export type { InterruptReceipt } from "./akuma-owner.js";
7
6
  export type { AkumaStatus } from "./akuma.js";
8
- export type { ActivityHistory, ActivityRow } from "./projection.js";
9
7
  export { ALLOWED_ACTIONS } from "./allowed.js";
10
8
  export type { AllowedAction, AllowedActions } from "./allowed.js";
11
- export type { WorldRoot } from "../world.js";
12
- export { AkumaBusyError, AkumaDecodeError, AkumaNotBornError, AkumaProviderError } from "./akuma-errors.js";
9
+ export type { KillEvidence } from "./heart/index.js";
10
+ export type { AkuId } from "./identity.js";
11
+ export type { ActivityHistory, ActivityRow } from "./projection.js";
12
+ export { Schema } from "./schema.js";
13
+ export type { JsonSchema, JsonSchemaDocument, SchemaLike, StandardSchemaV1 } from "./schema.js";
14
+ export type { AkumaAskObservation, AkumaAskResult, AkumaTellResult } from "./selection-observation.js";
@@ -1,4 +1,4 @@
1
+ export { AkumaBusyError, AkumaDecodeError, AkumaNotBornError, AkumaProviderError } from "./akuma-errors.js";
1
2
  export { Akuma } from "./akuma-instance.js";
2
- export { Schema } from "./schema.js";
3
3
  export { ALLOWED_ACTIONS } from "./allowed.js";
4
- export { AkumaBusyError, AkumaDecodeError, AkumaNotBornError, AkumaProviderError } from "./akuma-errors.js";
4
+ export { Schema } from "./schema.js";
@@ -1,2 +1,5 @@
1
1
  import type { WorldRoot } from "../world.js";
2
+ export declare class AkumaResetStopError extends Error {
3
+ constructor(message: string);
4
+ }
2
5
  export declare function stopAkuma(world: WorldRoot): Promise<() => Promise<void>>;
@@ -1,10 +1,16 @@
1
1
  import { lstat, readdir, rm, rmdir } from "node:fs/promises";
2
2
  import { dirname, join } from "node:path";
3
3
  import { nukeAliases } from "../alias/index.js";
4
- import { classifyHeartSchema, readHeart } from "./heart/index.js";
4
+ import { settleAkumaKill } from "./akuma-owner.js";
5
5
  import { acquireLeash } from "./control.js";
6
- import { settleAkumaKill } from "./akuma-handle.js";
6
+ import { classifyHeartSchema, readHeart } from "./heart/index.js";
7
7
  import { akuIdFromDirectoryName, akumaPaths, akumaRunRoot } from "./identity.js";
8
+ export class AkumaResetStopError extends Error {
9
+ constructor(message) {
10
+ super(message);
11
+ this.name = "AkumaResetStopError";
12
+ }
13
+ }
8
14
  async function hasAkumaCustody(paths) {
9
15
  try {
10
16
  const value = await lstat(paths.heart);
@@ -20,13 +26,13 @@ async function stopRunningAkuma(entry) {
20
26
  const settled = await settleAkumaKill(entry.paths, undefined, true);
21
27
  if (settled.leash !== undefined)
22
28
  return settled.leash;
23
- throw new Error(`Akuma ${entry.id} could not be stopped: ${settled.evidence}`);
29
+ throw new AkumaResetStopError(`Akuma ${entry.id} could not be stopped: ${settled.evidence}`);
24
30
  }
25
31
  async function removeKnownRegularFile(path) {
26
32
  try {
27
33
  const value = await lstat(path);
28
34
  if (!value.isFile() || value.isSymbolicLink())
29
- throw new Error(`Akuma custody is not a regular file: ${path}`);
35
+ throw new AkumaResetStopError(`Akuma custody is not a regular file: ${path}`);
30
36
  await rm(path, { force: true });
31
37
  }
32
38
  catch (error) {
@@ -68,7 +74,7 @@ async function removeKnownRequestChannel(path) {
68
74
  try {
69
75
  const value = await lstat(path);
70
76
  if (!value.isDirectory() || value.isSymbolicLink())
71
- throw new Error(`Akuma custody is not a directory: ${path}`);
77
+ throw new AkumaResetStopError(`Akuma custody is not a directory: ${path}`);
72
78
  }
73
79
  catch (error) {
74
80
  if (error.code === "ENOENT")
@@ -174,14 +180,14 @@ export async function stopAkuma(world) {
174
180
  ? await stopRunningAkuma(entry)
175
181
  : await acquireLeash(entry.paths);
176
182
  if (leash === null)
177
- throw new Error(`Akuma ${entry.id} could not be verified stopped`);
183
+ throw new AkumaResetStopError(`Akuma ${entry.id} could not be verified stopped`);
178
184
  try {
179
185
  const after = await readHeart(entry.paths);
180
186
  if (after.soul === null || after.latestBody?.end !== undefined) {
181
187
  held.push(leash);
182
188
  continue;
183
189
  }
184
- throw new Error(`Akuma ${entry.id} stopped without a durable end`);
190
+ throw new AkumaResetStopError(`Akuma ${entry.id} stopped without a durable end`);
185
191
  }
186
192
  catch (error) {
187
193
  leash.release();
@@ -105,8 +105,7 @@ function isActiveTool(row) {
105
105
  return row.kind === "tool" && row.state === "active";
106
106
  }
107
107
  function isProtectedCurrentTurnActivity(row) {
108
- return (row.kind === "said" ||
109
- (row.kind === "tool" && row.call.kind === "fileChange" && row.state !== "active" && row.state !== "unsettled"));
108
+ return row.kind === "said";
110
109
  }
111
110
  function isSettledTellDeliveredTo(row, turnSequence) {
112
111
  return (row.kind === "tell" &&
@@ -135,7 +135,6 @@ declare const completedToolRowSchema: z.ZodObject<{
135
135
  sequence: z.ZodNumber;
136
136
  turnSequence: z.ZodNumber;
137
137
  at: z.ZodString;
138
- completedAt: z.ZodOptional<z.ZodString>;
139
138
  durationMs: z.ZodOptional<z.ZodNumber>;
140
139
  name: z.ZodString;
141
140
  call: z.ZodUnion<readonly [z.ZodObject<{
@@ -352,7 +351,6 @@ declare const openSnapshotRowSchema: z.ZodUnion<readonly [z.ZodUnion<readonly [z
352
351
  sequence: z.ZodNumber;
353
352
  turnSequence: z.ZodNumber;
354
353
  at: z.ZodString;
355
- completedAt: z.ZodOptional<z.ZodString>;
356
354
  durationMs: z.ZodOptional<z.ZodNumber>;
357
355
  name: z.ZodString;
358
356
  call: z.ZodUnion<readonly [z.ZodObject<{
@@ -470,7 +468,6 @@ declare const idleSnapshotRowSchema: z.ZodUnion<readonly [z.ZodUnion<readonly [z
470
468
  sequence: z.ZodNumber;
471
469
  turnSequence: z.ZodNumber;
472
470
  at: z.ZodString;
473
- completedAt: z.ZodOptional<z.ZodString>;
474
471
  durationMs: z.ZodOptional<z.ZodNumber>;
475
472
  name: z.ZodString;
476
473
  call: z.ZodUnion<readonly [z.ZodObject<{
@@ -709,7 +706,6 @@ export declare const activitySnapshotSchema: z.ZodUnion<readonly [z.ZodObject<{
709
706
  sequence: z.ZodNumber;
710
707
  turnSequence: z.ZodNumber;
711
708
  at: z.ZodString;
712
- completedAt: z.ZodOptional<z.ZodString>;
713
709
  durationMs: z.ZodOptional<z.ZodNumber>;
714
710
  name: z.ZodString;
715
711
  call: z.ZodUnion<readonly [z.ZodObject<{
@@ -868,7 +864,6 @@ export declare const activitySnapshotSchema: z.ZodUnion<readonly [z.ZodObject<{
868
864
  sequence: z.ZodNumber;
869
865
  turnSequence: z.ZodNumber;
870
866
  at: z.ZodString;
871
- completedAt: z.ZodOptional<z.ZodString>;
872
867
  durationMs: z.ZodOptional<z.ZodNumber>;
873
868
  name: z.ZodString;
874
869
  call: z.ZodUnion<readonly [z.ZodObject<{
@@ -1,44 +1,25 @@
1
- import { decodeAgentEvent } from "./provider.js";
1
+ import { toolCallSchema, toolResultSchema, toolInputSchema, fileChangeSchema, diffstatSchema, } from "./heart/activity-schema.js";
2
2
  import { projectTell } from "./heart/facts.js";
3
3
  import { z } from "zod";
4
4
  const nonblankTextSchema = z.string().refine((value) => value.trim() !== "");
5
5
  const countSchema = z.number().int().nonnegative();
6
6
  const sequenceSchema = z.number().int().positive();
7
7
  const timestampSchema = z.string().refine((value) => Number.isFinite(Date.parse(value)), "expected timestamp");
8
- const diffstatSchema = z.object({ added: countSchema, removed: countSchema }).strict();
9
- const fileChangeSchema = z
10
- .object({
11
- op: z.enum(["add", "update", "delete", "unspecified"]),
12
- path: z.string(),
13
- diffstat: diffstatSchema.optional(),
14
- })
15
- .strict();
16
- const toolInputSchema = z.object({ json: z.string(), truncated: z.boolean() }).strict();
17
- const toolCallSchema = z.union([
18
- z.object({ kind: z.literal("run"), command: z.string() }).strict(),
19
- z
20
- .object({
21
- kind: z.literal("read"),
22
- path: z.string(),
23
- offset: countSchema.optional(),
24
- limit: countSchema.optional(),
25
- })
26
- .strict(),
27
- z
28
- .object({
29
- kind: z.literal("search"),
30
- query: z.string(),
31
- scope: z.enum(["content", "files", "web"]).optional(),
32
- path: z.string().optional(),
33
- glob: z.string().optional(),
8
+ const strictDiffstatSchema = diffstatSchema.strict();
9
+ const [runCall, readCall, searchCall, changeCall, otherCall] = toolCallSchema.options;
10
+ // Public observation historically admits zero-based read positions, unlike native narration.
11
+ const publicToolCallSchema = z.union([
12
+ runCall.strict(),
13
+ readCall.extend({ offset: countSchema.optional(), limit: countSchema.optional() }).strict(),
14
+ searchCall.strict(),
15
+ changeCall
16
+ .extend({
17
+ changes: z.array(fileChangeSchema.extend({ diffstat: strictDiffstatSchema.optional() }).strict()).readonly(),
34
18
  })
35
19
  .strict(),
36
- z.object({ kind: z.literal("fileChange"), changes: z.array(fileChangeSchema).readonly() }).strict(),
37
- z.object({ kind: z.literal("other"), display: z.string(), input: toolInputSchema.optional() }).strict(),
20
+ otherCall.extend({ input: toolInputSchema.strict().optional() }).strict(),
38
21
  ]);
39
- const toolResultSchema = z
40
- .object({ status: z.enum(["ok", "error"]), message: z.string().optional(), exitCode: z.number().int().optional() })
41
- .strict();
22
+ const publicToolResultSchema = toolResultSchema.strict();
42
23
  const tellDeliverySchema = z
43
24
  .object({
44
25
  deliveredAt: timestampSchema,
@@ -107,7 +88,7 @@ const activeToolRowSchema = z
107
88
  turnSequence: countSchema,
108
89
  at: timestampSchema,
109
90
  name: nonblankTextSchema,
110
- call: toolCallSchema,
91
+ call: publicToolCallSchema,
111
92
  state: z.literal("active"),
112
93
  truncated: z.literal(true).optional(),
113
94
  })
@@ -118,11 +99,10 @@ const completedToolRowSchema = z
118
99
  sequence: countSchema,
119
100
  turnSequence: countSchema,
120
101
  at: timestampSchema,
121
- completedAt: timestampSchema.optional(),
122
102
  durationMs: z.number().finite().nonnegative().optional(),
123
103
  name: nonblankTextSchema,
124
- call: toolCallSchema,
125
- state: toolResultSchema,
104
+ call: publicToolCallSchema,
105
+ state: publicToolResultSchema,
126
106
  truncated: z.literal(true).optional(),
127
107
  })
128
108
  .strict();
@@ -133,7 +113,7 @@ const unsettledToolRowSchema = z
133
113
  turnSequence: countSchema,
134
114
  at: timestampSchema,
135
115
  name: nonblankTextSchema,
136
- call: toolCallSchema,
116
+ call: publicToolCallSchema,
137
117
  state: z.literal("unsettled"),
138
118
  truncated: z.literal(true).optional(),
139
119
  })
@@ -157,7 +137,7 @@ const reportedFileChangeSchema = z
157
137
  at: timestampSchema,
158
138
  op: z.enum(["add", "update", "delete", "unspecified"]),
159
139
  path: z.string(),
160
- diffstat: diffstatSchema.optional(),
140
+ diffstat: strictDiffstatSchema.optional(),
161
141
  })
162
142
  .strict();
163
143
  const reportedChangeFields = {
@@ -283,10 +263,9 @@ function projectToolEvent(rows, running, fact, event, phase) {
283
263
  const durationMs = duration(started.at, fact.at);
284
264
  rows[index] = {
285
265
  kind: "tool",
286
- sequence: started.sequence,
266
+ sequence: fact.sequence,
287
267
  turnSequence: fact.turnSequence,
288
- at: started.at,
289
- completedAt: fact.at,
268
+ at: fact.at,
290
269
  ...(durationMs === undefined ? {} : { durationMs }),
291
270
  name: event.name,
292
271
  call: event.call,
@@ -296,7 +275,7 @@ function projectToolEvent(rows, running, fact, event, phase) {
296
275
  running.delete(key);
297
276
  }
298
277
  function projectActivityEvent(state, fact) {
299
- const event = decodeAgentEvent(fact.event);
278
+ const event = fact.event;
300
279
  const narration = narrationRow(fact, event);
301
280
  if (narration !== null) {
302
281
  const turn = state.turnsBySequence.get(fact.turnSequence);
@@ -328,7 +307,7 @@ function foldOutcomeVoice(rows, outcome) {
328
307
  : rows;
329
308
  }
330
309
  function finishTurn(turn) {
331
- const rows = foldOutcomeVoice(turn.rows, turn.outcome);
310
+ const rows = [...foldOutcomeVoice(turn.rows, turn.outcome)].sort((left, right) => left.sequence - right.sequence);
332
311
  if (turn.phase === "closed" && turn.outcome !== undefined) {
333
312
  return { kind: "closed", turn: turn.turn, rows: rows.map(demoteActive), outcome: turn.outcome };
334
313
  }
@@ -1,27 +1,62 @@
1
- export type SystemPromptMode = "append" | "replace";
2
- export type ProviderOptions = Readonly<{
3
- model?: string;
4
- effort?: string;
5
- readonly?: true;
6
- network?: "disabled" | "enabled";
7
- sandbox?: "full-access";
8
- systemPrompt?: string;
9
- systemPromptMode?: SystemPromptMode;
10
- }>;
11
- export type ReadonlyRestraint = Readonly<{
12
- enforcement: "native";
13
- diagnostic?: never;
14
- } | {
15
- enforcement: "none";
16
- diagnostic: string;
1
+ import { z } from "zod";
2
+ declare const systemPromptModeSchema: z.ZodEnum<{
3
+ append: "append";
4
+ replace: "replace";
17
5
  }>;
18
- export type ProviderExecution = Readonly<{
6
+ export type SystemPromptMode = z.infer<typeof systemPromptModeSchema>;
7
+ export declare const providerOptionsSchema: z.ZodPipe<z.ZodObject<{
8
+ model: z.ZodOptional<z.ZodString>;
9
+ effort: z.ZodOptional<z.ZodString>;
10
+ network: z.ZodOptional<z.ZodEnum<{
11
+ disabled: "disabled";
12
+ enabled: "enabled";
13
+ }>>;
14
+ systemPrompt: z.ZodOptional<z.ZodString>;
15
+ systemPromptMode: z.ZodOptional<z.ZodEnum<{
16
+ append: "append";
17
+ replace: "replace";
18
+ }>>;
19
+ }, z.core.$strip>, z.ZodTransform<Readonly<{
20
+ systemPromptMode?: "append" | "replace";
21
+ systemPrompt?: string;
22
+ network?: "disabled" | "enabled";
23
+ effort?: string;
24
+ model?: string;
25
+ }>, {
26
+ model?: string | undefined;
27
+ effort?: string | undefined;
28
+ network?: "disabled" | "enabled" | undefined;
29
+ systemPrompt?: string | undefined;
30
+ systemPromptMode?: "append" | "replace" | undefined;
31
+ }>>;
32
+ export type ProviderOptions = z.infer<typeof providerOptionsSchema>;
33
+ export declare const providerRecipeSchema: z.ZodPipe<z.ZodObject<{
34
+ name: z.ZodString;
35
+ kind: z.ZodEnum<{
36
+ acp: "acp";
37
+ "claude-agent-sdk": "claude-agent-sdk";
38
+ "codex-app-server": "codex-app-server";
39
+ "grok-build": "grok-build";
40
+ "opencode-sdk": "opencode-sdk";
41
+ pi: "pi";
42
+ }>;
43
+ executable: z.ZodOptional<z.ZodString>;
44
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
45
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
46
+ }, z.core.$strip>, z.ZodTransform<Readonly<{
47
+ env?: Readonly<Record<string, string>>;
48
+ config?: Readonly<Record<string, unknown>>;
49
+ executable?: string;
19
50
  name: string;
20
51
  kind: "acp" | "claude-agent-sdk" | "codex-app-server" | "grok-build" | "opencode-sdk" | "pi";
21
- executable?: string;
22
- config?: Readonly<Record<string, unknown>>;
23
- env?: Readonly<Record<string, string>>;
24
- }>;
52
+ }>, {
53
+ name: string;
54
+ kind: "acp" | "claude-agent-sdk" | "codex-app-server" | "grok-build" | "opencode-sdk" | "pi";
55
+ executable?: string | undefined;
56
+ config?: Record<string, unknown> | undefined;
57
+ env?: Record<string, string> | undefined;
58
+ }>>;
59
+ export type ProviderExecution = z.infer<typeof providerRecipeSchema>;
25
60
  export declare function decodeProviderOptions(value: unknown): ProviderOptions;
26
- export declare function decodeReadonlyRestraint(value: unknown): ReadonlyRestraint;
27
- export declare function decodeProviderRecipe(input: unknown): ProviderExecution;
61
+ export declare function decodeProviderRecipe(value: unknown): ProviderExecution;
62
+ export {};
@@ -1,111 +1,70 @@
1
- function record(value) {
2
- return value !== null && typeof value === "object" && !Array.isArray(value)
3
- ? value
4
- : null;
5
- }
1
+ import { z } from "zod";
2
+ const modelText = z
3
+ .string({ error: "provider option model must be a nonblank string" })
4
+ .refine((value) => value.trim() !== "", "provider option model must be a nonblank string");
5
+ const effortText = z
6
+ .string({ error: "provider option effort must be a nonblank string" })
7
+ .refine((value) => value.trim() !== "", "provider option effort must be a nonblank string");
8
+ const systemPromptModeSchema = z.enum(["append", "replace"], {
9
+ error: "provider option systemPromptMode must be append, replace",
10
+ });
11
+ export const providerOptionsSchema = z
12
+ .object({
13
+ model: modelText.optional(),
14
+ effort: effortText.optional(),
15
+ network: z.enum(["disabled", "enabled"], { error: "provider option network must be disabled, enabled" }).optional(),
16
+ systemPrompt: z.string({ error: "provider option systemPrompt must be a string" }).optional(),
17
+ systemPromptMode: systemPromptModeSchema.optional(),
18
+ })
19
+ .refine((value) => value.systemPromptMode === undefined || value.systemPrompt !== undefined, "provider option systemPromptMode requires systemPrompt")
20
+ .transform(({ model, effort, network, systemPrompt, systemPromptMode }) => Object.freeze({
21
+ ...(model === undefined ? {} : { model }),
22
+ ...(effort === undefined ? {} : { effort }),
23
+ ...(network === undefined ? {} : { network }),
24
+ ...(systemPrompt === undefined ? {} : { systemPrompt }),
25
+ ...(systemPromptMode === undefined ? {} : { systemPromptMode }),
26
+ }));
27
+ // Recipe configuration deliberately stays adapter-owned opaque data, including historical keys.
6
28
  function snapshot(value) {
7
29
  if (Array.isArray(value))
8
30
  return Object.freeze(value.map(snapshot));
9
- const object = record(value);
10
- if (object === null)
31
+ if (value === null || typeof value !== "object")
11
32
  return value;
12
- return Object.freeze(Object.fromEntries(Object.entries(object).map(([key, item]) => [key, snapshot(item)])));
13
- }
14
- function optionText(options, field, blank) {
15
- const selected = options[field];
16
- if (selected === undefined)
17
- return undefined;
18
- if (typeof selected !== "string" || (blank === "refuse" && selected.trim().length === 0)) {
19
- throw new TypeError(`provider option ${field} must be ${blank === "allow" ? "a string" : "a nonblank string"}`);
20
- }
21
- return selected;
33
+ return Object.freeze(Object.fromEntries(Object.entries(value).map(([key, item]) => [key, snapshot(item)])));
22
34
  }
35
+ export const providerRecipeSchema = z
36
+ .object({
37
+ name: z.string().refine((value) => value.trim() !== "", "provider execution name must be a nonblank string"),
38
+ kind: z.enum(["acp", "claude-agent-sdk", "codex-app-server", "grok-build", "opencode-sdk", "pi"], {
39
+ error: "provider execution has unknown kind",
40
+ }),
41
+ executable: z
42
+ .string()
43
+ .refine((value) => value.trim() !== "", "provider execution executable must be a nonblank string")
44
+ .optional(),
45
+ config: z.record(z.string(), z.unknown()).optional(),
46
+ env: z.record(z.string(), z.string()).optional(),
47
+ })
48
+ .transform(({ name, kind, executable, config, env }) => Object.freeze({
49
+ name,
50
+ kind,
51
+ ...(executable === undefined ? {} : { executable }),
52
+ ...(config === undefined ? {} : { config: snapshot(config) }),
53
+ ...(env === undefined ? {} : { env: Object.freeze(env) }),
54
+ }));
23
55
  export function decodeProviderOptions(value) {
24
- const options = record(value);
25
- if (options === null)
26
- throw new TypeError("provider options must be an object");
27
- const model = optionText(options, "model", "refuse");
28
- const effort = optionText(options, "effort", "refuse");
29
- if (options.readonly !== undefined && options.readonly !== true) {
30
- throw new TypeError("provider option readonly must be true");
31
- }
32
- const network = options.network;
33
- if (network !== undefined && network !== "disabled" && network !== "enabled") {
34
- throw new TypeError("provider option network must be disabled, enabled");
35
- }
36
- const sandbox = options.sandbox;
37
- if (sandbox !== undefined && sandbox !== "full-access") {
38
- throw new TypeError("provider option sandbox must be full-access");
39
- }
40
- const systemPrompt = optionText(options, "systemPrompt", "allow");
41
- const systemPromptMode = options.systemPromptMode;
42
- if (systemPromptMode !== undefined) {
43
- if (systemPromptMode !== "append" && systemPromptMode !== "replace") {
44
- throw new TypeError("provider option systemPromptMode must be append, replace");
45
- }
46
- if (systemPrompt === undefined) {
47
- throw new TypeError("provider option systemPromptMode requires systemPrompt");
48
- }
49
- }
50
- return Object.freeze({
51
- ...(model === undefined ? {} : { model }),
52
- ...(effort === undefined ? {} : { effort }),
53
- ...(options.readonly === undefined ? {} : { readonly: true }),
54
- ...(network === undefined ? {} : { network }),
55
- ...(sandbox === undefined ? {} : { sandbox }),
56
- ...(systemPrompt === undefined ? {} : { systemPrompt }),
57
- ...(systemPromptMode === undefined ? {} : { systemPromptMode }),
58
- });
59
- }
60
- export function decodeReadonlyRestraint(value) {
61
- const restraint = record(value);
62
- if (restraint === null)
63
- throw new TypeError("readonly restraint must be an object");
64
- if (restraint.enforcement === "native") {
65
- return Object.freeze({ enforcement: "native" });
66
- }
67
- if (restraint.enforcement === "none" &&
68
- typeof restraint.diagnostic === "string" &&
69
- restraint.diagnostic.trim().length > 0) {
70
- return Object.freeze({ enforcement: "none", diagnostic: restraint.diagnostic });
71
- }
72
- throw new TypeError("readonly restraint must be native or none with a diagnostic");
73
- }
74
- function providerKind(value) {
75
- return (value === "acp" ||
76
- value === "claude-agent-sdk" ||
77
- value === "codex-app-server" ||
78
- value === "grok-build" ||
79
- value === "opencode-sdk" ||
80
- value === "pi");
56
+ const parsed = providerOptionsSchema.safeParse(value);
57
+ if (!parsed.success)
58
+ throw new TypeError(parsed.error.issues[0]?.message ?? "provider options must be an object", {
59
+ cause: parsed.error,
60
+ });
61
+ return parsed.data;
81
62
  }
82
- export function decodeProviderRecipe(input) {
83
- const value = record(input);
84
- if (value === null)
85
- throw new TypeError("provider execution must be an object");
86
- if (typeof value.name !== "string" || value.name.trim().length === 0) {
87
- throw new TypeError("provider execution name must be a nonblank string");
88
- }
89
- if (!providerKind(value.kind))
90
- throw new TypeError("provider execution has unknown kind");
91
- if (value.executable !== undefined &&
92
- (typeof value.executable !== "string" || value.executable.trim().length === 0)) {
93
- throw new TypeError("provider execution executable must be a nonblank string");
94
- }
95
- const config = value.config === undefined ? undefined : record(value.config);
96
- if (config === null)
97
- throw new TypeError("provider execution config must be an object");
98
- const env = value.env === undefined ? undefined : record(value.env);
99
- if (env === null)
100
- throw new TypeError("provider execution env must be an object");
101
- if (env !== undefined && Object.values(env).some((item) => typeof item !== "string")) {
102
- throw new TypeError("provider execution env must contain only string values");
103
- }
104
- return Object.freeze({
105
- name: value.name,
106
- kind: value.kind,
107
- ...(value.executable === undefined ? {} : { executable: value.executable }),
108
- ...(config === undefined ? {} : { config: snapshot(config) }),
109
- ...(env === undefined ? {} : { env: Object.freeze({ ...env }) }),
110
- });
63
+ export function decodeProviderRecipe(value) {
64
+ const parsed = providerRecipeSchema.safeParse(value);
65
+ if (!parsed.success)
66
+ throw new TypeError(parsed.error.issues[0]?.message ?? "provider execution must be an object", {
67
+ cause: parsed.error,
68
+ });
69
+ return parsed.data;
111
70
  }