@astrosheep/keiyaku 4.5.11 → 4.5.13

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 (272) hide show
  1. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-workflow/SKILL.md +135 -377
  2. package/build/integrations/pi/keiyaku.ts +11 -116
  3. package/build/src/akuma/akuma-errors.d.ts +1 -0
  4. package/build/src/akuma/akuma-errors.js +1 -0
  5. package/build/src/akuma/akuma-handle.d.ts +1 -0
  6. package/build/src/akuma/akuma-handle.js +6 -7
  7. package/build/src/akuma/akuma-product.d.ts +6 -8
  8. package/build/src/akuma/akuma-product.js +141 -57
  9. package/build/src/akuma/akuma.d.ts +5 -7
  10. package/build/src/akuma/akuma.js +1 -22
  11. package/build/src/akuma/archetype.d.ts +6 -5
  12. package/build/src/akuma/archetype.js +137 -38
  13. package/build/src/akuma/body.d.ts +5 -5
  14. package/build/src/akuma/body.js +223 -63
  15. package/build/src/akuma/call-input.d.ts +4 -0
  16. package/build/src/akuma/call-input.js +21 -0
  17. package/build/src/akuma/call-request.d.ts +5 -8
  18. package/build/src/akuma/call-request.js +28 -73
  19. package/build/src/akuma/fleet-execution.d.ts +26 -0
  20. package/build/src/akuma/fleet-execution.js +109 -0
  21. package/build/src/{library/fleet-result.d.ts → akuma/fleet-observation.d.ts} +13 -57
  22. package/build/src/{library/fleet-result.js → akuma/fleet-observation.js} +4 -25
  23. package/build/src/akuma/fleet-request.d.ts +122 -0
  24. package/build/src/akuma/fleet-request.js +168 -0
  25. package/build/src/akuma/heart/facts.d.ts +23 -0
  26. package/build/src/akuma/heart/facts.js +7 -0
  27. package/build/src/akuma/heart/index.d.ts +43 -4
  28. package/build/src/akuma/heart/index.js +107 -7
  29. package/build/src/akuma/heart/request-authority.d.ts +2 -0
  30. package/build/src/akuma/heart/request-authority.js +28 -3
  31. package/build/src/akuma/heart/request-rows.d.ts +2 -0
  32. package/build/src/akuma/heart/request-rows.js +24 -5
  33. package/build/src/akuma/heart/rows.d.ts +4 -1
  34. package/build/src/akuma/heart/rows.js +46 -19
  35. package/build/src/akuma/heart/schema.d.ts +1 -1
  36. package/build/src/akuma/heart/schema.js +28 -6
  37. package/build/src/akuma/heart/storage.d.ts +1 -1
  38. package/build/src/akuma/heart/tells.d.ts +29 -0
  39. package/build/src/akuma/heart/tells.js +136 -5
  40. package/build/src/akuma/heart/timeline.js +9 -3
  41. package/build/src/akuma/projection-read.js +36 -3
  42. package/build/src/akuma/projection.js +3 -4
  43. package/build/src/akuma/provider.d.ts +4 -0
  44. package/build/src/akuma/provider.js +56 -3
  45. package/build/src/akuma/providers/claude/index.js +3 -0
  46. package/build/src/akuma/providers/codex-app-server/index.js +14 -12
  47. package/build/src/akuma/providers/pi/index.js +7 -1
  48. package/build/src/akuma/publication.js +65 -49
  49. package/build/src/akuma/request-lifecycle.d.ts +5 -4
  50. package/build/src/akuma/request-lifecycle.js +29 -16
  51. package/build/src/akuma/request-rendezvous.d.ts +15 -12
  52. package/build/src/akuma/request-rendezvous.js +80 -51
  53. package/build/src/akuma/request-serve.d.ts +1 -2
  54. package/build/src/akuma/request-serve.js +94 -39
  55. package/build/src/akuma/request-wire.d.ts +57 -26
  56. package/build/src/akuma/request-wire.js +64 -25
  57. package/build/src/akuma/turn-drive.d.ts +5 -4
  58. package/build/src/akuma/turn-drive.js +27 -11
  59. package/build/src/akuma-body.d.ts +4 -6
  60. package/build/src/akuma-body.js +19 -17
  61. package/build/src/bounded-list.d.ts +8 -0
  62. package/build/src/bounded-list.js +14 -0
  63. package/build/src/cli/accepted.d.ts +1 -1
  64. package/build/src/cli/accepted.js +1 -0
  65. package/build/src/cli/commands/akuma-invoke.js +1 -25
  66. package/build/src/cli/commands/contract-help.d.ts +5 -2
  67. package/build/src/cli/commands/contract-help.js +62 -12
  68. package/build/src/cli/commands/contract-invoke.d.ts +5 -0
  69. package/build/src/cli/commands/contract-invoke.js +26 -1
  70. package/build/src/cli/commands/contract.js +50 -18
  71. package/build/src/cli/commands/task-invoke.js +10 -2
  72. package/build/src/cli/commands/task-query.js +3 -4
  73. package/build/src/cli/coordinates.d.ts +13 -0
  74. package/build/src/cli/coordinates.js +38 -24
  75. package/build/src/cli/draft.d.ts +1 -1
  76. package/build/src/cli/invoke.js +14 -1
  77. package/build/src/cli/render/akuma-activity.d.ts +0 -1
  78. package/build/src/cli/render/akuma-activity.js +5 -38
  79. package/build/src/cli/render/akuma.js +4 -1
  80. package/build/src/cli/render/audit.js +4 -1
  81. package/build/src/cli/render/catalog.js +13 -39
  82. package/build/src/cli/render/contract.js +4 -14
  83. package/build/src/cli/render/kanshi-akuma.js +3 -8
  84. package/build/src/cli/render/kanshi.js +8 -34
  85. package/build/src/cli/render/nuke.js +7 -3
  86. package/build/src/cli/render/receipt.d.ts +1 -0
  87. package/build/src/cli/render/receipt.js +8 -0
  88. package/build/src/cli/render/refusal.js +4 -3
  89. package/build/src/cli/render/task.js +4 -37
  90. package/build/src/cli/render/terminal.d.ts +2 -6
  91. package/build/src/cli/render/terminal.js +4 -9
  92. package/build/src/cli/result.d.ts +2 -1
  93. package/build/src/contract-guidance.js +13 -3
  94. package/build/src/contract-worktree.d.ts +1 -0
  95. package/build/src/contract-worktree.js +26 -2
  96. package/build/src/core/facts/codec.d.ts +2 -1
  97. package/build/src/core/facts/codec.js +3 -0
  98. package/build/src/core/facts/gate.d.ts +2 -1
  99. package/build/src/core/facts/gate.js +63 -0
  100. package/build/src/core/verbs/abandon.d.ts +2 -1
  101. package/build/src/core/verbs/abandon.js +16 -0
  102. package/build/src/core/verbs/amend.d.ts +2 -1
  103. package/build/src/core/verbs/amend.js +20 -0
  104. package/build/src/core/verbs/arc.d.ts +2 -1
  105. package/build/src/core/verbs/arc.js +16 -0
  106. package/build/src/core/verbs/attestation.d.ts +2 -1
  107. package/build/src/core/verbs/attestation.js +16 -0
  108. package/build/src/core/verbs/bind.d.ts +2 -1
  109. package/build/src/core/verbs/bind.js +16 -0
  110. package/build/src/core/verbs/deliver.d.ts +2 -1
  111. package/build/src/core/verbs/deliver.js +16 -0
  112. package/build/src/core/verbs/placement.d.ts +2 -1
  113. package/build/src/core/verbs/placement.js +58 -1
  114. package/build/src/dispatch/association.d.ts +13 -0
  115. package/build/src/dispatch/association.js +20 -0
  116. package/build/src/dispatch/index.d.ts +6 -0
  117. package/build/src/dispatch/index.js +27 -3
  118. package/build/src/git/hooks.d.ts +9 -1
  119. package/build/src/git/hooks.js +79 -1
  120. package/build/src/git/nuke.d.ts +2 -1
  121. package/build/src/git/nuke.js +6 -11
  122. package/build/src/git/private-state-seat.d.ts +26 -1
  123. package/build/src/git/private-state-seat.js +78 -13
  124. package/build/src/git/process.d.ts +2 -0
  125. package/build/src/git/reconcile.d.ts +1 -2
  126. package/build/src/git/reconcile.js +0 -6
  127. package/build/src/git/repository.d.ts +0 -2
  128. package/build/src/git/repository.js +27 -25
  129. package/build/src/git/result-codec.d.ts +29 -0
  130. package/build/src/git/result-codec.js +306 -0
  131. package/build/src/git/target-placement.js +2 -8
  132. package/build/src/git/workspace.d.ts +2 -0
  133. package/build/src/git/workspace.js +4 -0
  134. package/build/src/index.d.ts +1 -0
  135. package/build/src/kanshi/fleet.js +1 -1
  136. package/build/src/kanshi/read.js +55 -28
  137. package/build/src/kanshi/report.d.ts +4 -3
  138. package/build/src/kanshi/select.js +14 -1
  139. package/build/src/library/address.d.ts +1 -0
  140. package/build/src/library/address.js +4 -7
  141. package/build/src/library/akuma-creation.d.ts +5 -3
  142. package/build/src/library/akuma-creation.js +90 -33
  143. package/build/src/library/audit.js +2 -1
  144. package/build/src/library/catalog.d.ts +10 -2
  145. package/build/src/library/catalog.js +65 -25
  146. package/build/src/library/composition.d.ts +1 -0
  147. package/build/src/library/composition.js +1 -0
  148. package/build/src/library/configuration.d.ts +4 -21
  149. package/build/src/library/configuration.js +2 -158
  150. package/build/src/library/continuation.d.ts +20 -1
  151. package/build/src/library/continuation.js +36 -0
  152. package/build/src/library/contract-bind.d.ts +1 -0
  153. package/build/src/library/contract-bind.js +16 -5
  154. package/build/src/library/contract-forwarding.d.ts +2 -2
  155. package/build/src/library/contract-forwarding.js +18 -4
  156. package/build/src/library/contract-handle.js +4 -3
  157. package/build/src/library/contract-operations.d.ts +5 -9
  158. package/build/src/library/contract-operations.js +34 -47
  159. package/build/src/library/contract.d.ts +11 -2
  160. package/build/src/library/contract.js +21 -1
  161. package/build/src/library/delivery.d.ts +4 -1
  162. package/build/src/library/delivery.js +47 -0
  163. package/build/src/library/fleet.d.ts +4 -136
  164. package/build/src/library/fleet.js +31 -315
  165. package/build/src/library/keiyaku.d.ts +7 -3
  166. package/build/src/library/keiyaku.js +1 -0
  167. package/build/src/library/mutation.d.ts +431 -3
  168. package/build/src/library/mutation.js +192 -19
  169. package/build/src/library/nuke.d.ts +7 -1
  170. package/build/src/library/nuke.js +18 -4
  171. package/build/src/library/reconcile.d.ts +14 -0
  172. package/build/src/library/reconcile.js +22 -8
  173. package/build/src/library/refusal.d.ts +9 -1
  174. package/build/src/library/refusal.js +76 -0
  175. package/build/src/library/region.d.ts +0 -8
  176. package/build/src/library/region.js +1 -29
  177. package/build/src/library/result-codec.d.ts +2 -0
  178. package/build/src/library/result-codec.js +12 -0
  179. package/build/src/markdown/lex.js +9 -2
  180. package/build/src/markdown/types.d.ts +2 -1
  181. package/build/src/markdown/types.js +3 -1
  182. package/build/src/plugin/akuma-signals.d.ts +12 -0
  183. package/build/src/plugin/akuma-signals.js +14 -0
  184. package/build/src/plugin/public.d.ts +51 -0
  185. package/build/src/plugin/public.js +1 -0
  186. package/build/src/plugin/runtime.d.ts +14 -0
  187. package/build/src/plugin/runtime.js +357 -0
  188. package/build/src/protocol/amend.js +3 -3
  189. package/build/src/protocol/attempt.d.ts +2 -1
  190. package/build/src/protocol/attempt.js +1 -1
  191. package/build/src/protocol/audit.d.ts +1 -1
  192. package/build/src/protocol/audit.js +1 -1
  193. package/build/src/protocol/bind.d.ts +3 -1
  194. package/build/src/protocol/bind.js +26 -0
  195. package/build/src/protocol/completion.js +0 -1
  196. package/build/src/protocol/deliver.d.ts +1 -1
  197. package/build/src/protocol/deliver.js +136 -57
  198. package/build/src/protocol/intent.d.ts +0 -1
  199. package/build/src/protocol/intent.js +0 -1
  200. package/build/src/protocol/operations.d.ts +9 -2
  201. package/build/src/protocol/operations.js +16 -1
  202. package/build/src/protocol/outcome.d.ts +3 -0
  203. package/build/src/protocol/outcome.js +17 -1
  204. package/build/src/protocol/placement.js +10 -3
  205. package/build/src/protocol/read/status.d.ts +8 -0
  206. package/build/src/protocol/read/status.js +49 -0
  207. package/build/src/protocol/reintegrate.js +10 -3
  208. package/build/src/protocol/result-codec.d.ts +22 -0
  209. package/build/src/protocol/result-codec.js +442 -0
  210. package/build/src/protocol/review.d.ts +1 -1
  211. package/build/src/protocol/review.js +81 -46
  212. package/build/src/protocol/run.d.ts +22 -2
  213. package/build/src/protocol/run.js +119 -29
  214. package/build/src/runtime/proc/lifecycle.js +1 -1
  215. package/build/src/runtime/proc/line-rpc.d.ts +7 -1
  216. package/build/src/runtime/proc/line-rpc.js +49 -9
  217. package/build/src/runtime/proc/run.d.ts +0 -1
  218. package/build/src/runtime/proc/run.js +1 -11
  219. package/build/src/runtime/proc/termination.d.ts +1 -0
  220. package/build/src/runtime/proc/termination.js +63 -18
  221. package/build/src/runtime/proc/windows-launch.exe +0 -0
  222. package/build/src/settings.d.ts +10 -0
  223. package/build/src/settings.js +88 -2
  224. package/build/src/settlement/result-codec.d.ts +2 -0
  225. package/build/src/settlement/result-codec.js +56 -0
  226. package/build/src/settlement/settle.d.ts +5 -12
  227. package/build/src/settlement/settle.js +60 -55
  228. package/build/src/task/board.d.ts +3 -0
  229. package/build/src/task/board.js +22 -4
  230. package/build/src/task/catalog.d.ts +13 -2
  231. package/build/src/task/catalog.js +59 -5
  232. package/build/src/task/compose.d.ts +4 -2
  233. package/build/src/task/compose.js +56 -30
  234. package/build/src/task/created-observation.d.ts +39 -0
  235. package/build/src/task/created-observation.js +26 -0
  236. package/build/src/task/identity.d.ts +6 -0
  237. package/build/src/task/identity.js +48 -7
  238. package/build/src/task/index.d.ts +4 -3
  239. package/build/src/task/index.js +19 -16
  240. package/build/src/task/input.d.ts +3 -1
  241. package/build/src/task/input.js +7 -4
  242. package/build/src/task/lifecycle-operations.d.ts +6 -0
  243. package/build/src/task/lifecycle-operations.js +116 -0
  244. package/build/src/task/mutation-result.d.ts +762 -20
  245. package/build/src/task/mutation-result.js +34 -9
  246. package/build/src/task/mutation.d.ts +4 -9
  247. package/build/src/task/mutation.js +17 -52
  248. package/build/src/task/operation-types.d.ts +114 -0
  249. package/build/src/task/operation-types.js +1 -0
  250. package/build/src/task/operations.d.ts +6 -113
  251. package/build/src/task/operations.js +75 -117
  252. package/build/src/task/query.d.ts +8 -11
  253. package/build/src/task/query.js +7 -14
  254. package/build/src/task/store.d.ts +11 -1
  255. package/build/src/task/store.js +169 -55
  256. package/build/src/task/view.d.ts +4 -0
  257. package/build/src/task/view.js +7 -0
  258. package/build/src/verification/declaration.d.ts +1 -0
  259. package/build/src/verification/declaration.js +18 -1
  260. package/build/src/verification/execution.d.ts +0 -1
  261. package/build/src/verification/execution.js +5 -5
  262. package/build/src/world.d.ts +0 -2
  263. package/build/src/world.js +3 -7
  264. package/package.json +17 -5
  265. package/build/src/cli/square-edge.d.ts +0 -7
  266. package/build/src/cli/square-edge.js +0 -159
  267. package/build/src/git/ref-migration.d.ts +0 -22
  268. package/build/src/git/ref-migration.js +0 -55
  269. package/build/src/library/contract-forwarding-reconciliation-result.d.ts +0 -102
  270. package/build/src/library/contract-forwarding-reconciliation-result.js +0 -92
  271. package/build/src/library/contract-forwarding-result.d.ts +0 -4270
  272. package/build/src/library/contract-forwarding-result.js +0 -521
@@ -1,7 +1,8 @@
1
+ /** @architectureCompositionRoot */
1
2
  import { Akuma } from "../akuma/akuma.js";
2
3
  import { listArchetypeDefinitions } from "../akuma/archetype.js";
3
- import { observeTaskCatalogRows } from "../task/catalog.js";
4
- import { listKeiyaku } from "./contract.js";
4
+ import { observeTaskCatalog } from "../task/catalog.js";
5
+ import { listContractCatalogue } from "./contract.js";
5
6
  import { requireInput } from "./input.js";
6
7
  import { Repo } from "./repo.js";
7
8
  import { World } from "../world.js";
@@ -21,34 +22,62 @@ async function worldRoot(value) {
21
22
  function taskQueryValue(query) {
22
23
  if (query.namespace !== undefined && !Array.isArray(query.namespace))
23
24
  throw new TypeError("Keiyaku.ls Task namespace must be an array");
25
+ if (query.limit !== undefined && typeof query.limit !== "number")
26
+ throw new TypeError("Keiyaku.ls Task limit must be a number");
24
27
  return {
25
28
  kind: "tasks",
26
29
  ...(query.namespace === undefined ? {} : { namespace: query.namespace }),
30
+ ...(query.limit === undefined ? {} : { limit: query.limit }),
27
31
  };
28
32
  }
29
- function queryValue(value) {
30
- if (typeof value !== "object" || value === null || Array.isArray(value)) {
31
- throw new TypeError("Keiyaku.ls query must be an object");
32
- }
33
- const query = value;
34
- if (query.kind !== "tasks" && query.kind !== "contracts" && query.kind !== "archetypes" && query.kind !== "akuma") {
35
- throw new TypeError("Keiyaku.ls query kind is invalid");
36
- }
33
+ const catalogQueryKeys = {
34
+ tasks: ["kind", "namespace", "limit"],
35
+ contracts: ["kind", "limit"],
36
+ archetypes: ["kind"],
37
+ akuma: ["kind", "archetype", "limit"],
38
+ };
39
+ function catalogQueryKind(value) {
40
+ if (value === "tasks" || value === "contracts" || value === "archetypes" || value === "akuma")
41
+ return value;
42
+ throw new TypeError("Keiyaku.ls query kind is invalid");
43
+ }
44
+ function assertCatalogQueryKeys(query, kind) {
37
45
  for (const key of Object.keys(query)) {
38
- if (key !== "kind" &&
39
- !(query.kind === "akuma" && key === "archetype") &&
40
- !(query.kind === "tasks" && key === "namespace")) {
46
+ if (!catalogQueryKeys[kind].includes(key))
41
47
  throw new TypeError(`Keiyaku.ls query has unknown field: ${key}`);
42
- }
43
48
  }
44
- if (query.kind === "tasks")
45
- return taskQueryValue(query);
46
- if (query.kind !== "akuma")
47
- return { kind: query.kind };
49
+ }
50
+ function akumaQueryValue(query) {
48
51
  if (query.archetype !== undefined && typeof query.archetype !== "string") {
49
52
  throw new TypeError("Keiyaku.ls Akuma name must be a string");
50
53
  }
51
- return { kind: "akuma", ...(query.archetype === undefined ? {} : { archetype: query.archetype }) };
54
+ if (query.limit !== undefined && typeof query.limit !== "number")
55
+ throw new TypeError("Keiyaku.ls Akuma limit must be a number");
56
+ return {
57
+ kind: "akuma",
58
+ ...(query.archetype === undefined ? {} : { archetype: query.archetype }),
59
+ ...(query.limit === undefined ? {} : { limit: query.limit }),
60
+ };
61
+ }
62
+ function contractQueryValue(query) {
63
+ if (query.limit !== undefined && typeof query.limit !== "number")
64
+ throw new TypeError("Keiyaku.ls Contract limit must be a number");
65
+ return { kind: "contracts", ...(query.limit === undefined ? {} : { limit: query.limit }) };
66
+ }
67
+ function queryValue(value) {
68
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
69
+ throw new TypeError("Keiyaku.ls query must be an object");
70
+ }
71
+ const query = value;
72
+ const kind = catalogQueryKind(query.kind);
73
+ assertCatalogQueryKeys(query, kind);
74
+ if (kind === "tasks")
75
+ return taskQueryValue(query);
76
+ if (kind === "contracts")
77
+ return contractQueryValue(query);
78
+ if (kind === "archetypes")
79
+ return { kind };
80
+ return akumaQueryValue(query);
52
81
  }
53
82
  export async function listCatalog(input) {
54
83
  const values = requireInput(input, "Keiyaku.ls input");
@@ -56,7 +85,7 @@ export async function listCatalog(input) {
56
85
  const allowed = query.kind === "contracts"
57
86
  ? ["query", "repo"]
58
87
  : query.kind === "archetypes"
59
- ? ["query", "home"]
88
+ ? ["query", "path", "home"]
60
89
  : ["query", "path"];
61
90
  for (const key of Object.keys(values)) {
62
91
  if (!allowed.includes(key))
@@ -65,21 +94,31 @@ export async function listCatalog(input) {
65
94
  if (query.kind === "contracts") {
66
95
  if (!(values.repo instanceof Repo))
67
96
  throw new TypeError("repo must be a Repo");
68
- const board = await listKeiyaku({ repo: values.repo });
69
- return { kind: "contracts", root: board.root, state: board.state, observedAt: board.observedAt, rows: board.rows };
97
+ const catalogue = await listContractCatalogue({
98
+ repo: values.repo,
99
+ ...(query.limit === undefined ? {} : { limit: query.limit }),
100
+ });
101
+ return { kind: "contracts", ...catalogue };
70
102
  }
71
103
  if (query.kind === "archetypes") {
104
+ const path = values.path === undefined ? undefined : await worldRoot(values.path);
72
105
  const home = optionalHome(values.home);
73
106
  return {
74
107
  kind: "archetypes",
75
- rows: await listArchetypeDefinitions(home === undefined ? {} : { home }),
108
+ rows: await listArchetypeDefinitions({
109
+ ...(path === undefined ? {} : { project: path }),
110
+ ...(home === undefined ? {} : { home }),
111
+ }),
76
112
  };
77
113
  }
78
114
  const path = await worldRoot(values.path);
79
115
  if (query.kind === "tasks") {
80
- return { kind: "tasks", root: path, rows: await observeTaskCatalogRows(path, query.namespace) };
116
+ return { kind: "tasks", root: path, ...(await observeTaskCatalog(path, query)) };
81
117
  }
82
- const listed = await Akuma.of(path).list(query.archetype === undefined ? undefined : { archetype: query.archetype });
118
+ const listed = await Akuma.of(path).list({
119
+ ...(query.archetype === undefined ? {} : { archetype: query.archetype }),
120
+ ...(query.limit === undefined ? {} : { limit: query.limit }),
121
+ });
83
122
  return {
84
123
  kind: "akuma",
85
124
  root: path,
@@ -87,5 +126,6 @@ export async function listCatalog(input) {
87
126
  observedAt: listed.observedAt,
88
127
  rows: listed.rows,
89
128
  searched: listed.searched,
129
+ hasMore: listed.hasMore,
90
130
  };
91
131
  }
@@ -1,3 +1,4 @@
1
+ /** @architectureCompositionRoot */
1
2
  import { KeiyakuHandle, bindKeiyaku, keiyakuOf, listKeiyaku, observeKeiyaku } from "./contract.js";
2
3
  import { callKeiyaku, forkKeiyaku } from "./akuma-creation.js";
3
4
  import { historyAkuma, interruptAkuma, killAkuma, statusAkuma, tellAkuma, waitAkuma } from "./fleet.js";
@@ -1,3 +1,4 @@
1
+ /** @architectureCompositionRoot */
1
2
  import { KeiyakuHandle, bindKeiyaku, keiyakuOf, listKeiyaku, observeKeiyaku } from "./contract.js";
2
3
  import { callKeiyaku, forkKeiyaku } from "./akuma-creation.js";
3
4
  import { historyAkuma, interruptAkuma, killAkuma, statusAkuma, tellAkuma, waitAkuma } from "./fleet.js";
@@ -1,21 +1,4 @@
1
- import { SettingsError, type Settings } from "../settings.js";
2
- import type { WorktreeHooks } from "../git/hooks.js";
3
- export type { HookCommand, WorktreeHooks } from "../git/hooks.js";
4
- export type Gate = string;
5
- export type GatesFromInput = Readonly<{
6
- settings: Settings;
7
- names?: readonly string[];
8
- }>;
9
- export type RequireBranchesToBeUpToDateFromInput = Readonly<{
10
- settings: Settings;
11
- }>;
12
- export type WorktreeHooksFromInput = Readonly<{
13
- settings: Settings;
14
- }>;
15
- export { SettingsError };
16
- export declare function gatesFrom(input: GatesFromInput): readonly Gate[];
17
- export declare function requireBranchesToBeUpToDateFrom(input: RequireBranchesToBeUpToDateFromInput): boolean;
18
- export declare function worktreeHooksFrom(input: WorktreeHooksFromInput): WorktreeHooks;
19
- export declare function normalizedWorktreeHooks(value: unknown): WorktreeHooks;
20
- export declare const EMPTY_WORKTREE_HOOKS: WorktreeHooks;
21
- export declare function worktreeHooksOption(value: unknown): WorktreeHooks;
1
+ export { gatesFrom, requireBranchesToBeUpToDateFrom, SettingsError } from "../settings.js";
2
+ export type { Gate, GatesFromInput, RequireBranchesToBeUpToDateFromInput } from "../settings.js";
3
+ export { EMPTY_WORKTREE_HOOKS, normalizedWorktreeHooks, worktreeHooksFrom, worktreeHooksOption } from "../git/hooks.js";
4
+ export type { HookCommand, WorktreeHooks, WorktreeHooksFromInput } from "../git/hooks.js";
@@ -1,158 +1,2 @@
1
- import { gateWord } from "../core/facts/types.js";
2
- import { SettingsError } from "../settings.js";
3
- export { SettingsError };
4
- function record(value) {
5
- return value !== null && typeof value === "object" && !Array.isArray(value);
6
- }
7
- function namespaceFailure(view) {
8
- if (view.kind !== "failed")
9
- throw new Error("settings namespace failure expected");
10
- throw new SettingsError(view.failures.map((failure) => `${failure.scope}: ${failure.diagnostic}`).join("; "));
11
- }
12
- function bundleGates(name, value) {
13
- if (!record(value))
14
- throw new SettingsError(`gate bundle '${name}' must be an object`);
15
- if (value.kind !== "bundle") {
16
- throw new SettingsError(`gate bundle '${name}' has unsupported kind: ${String(value.kind)}`);
17
- }
18
- for (const field of Object.keys(value)) {
19
- if (field !== "kind" && field !== "gates") {
20
- throw new SettingsError(`gate bundle '${name}' has unknown field: ${field}`);
21
- }
22
- }
23
- if (!Array.isArray(value.gates)) {
24
- throw new SettingsError(`gate bundle '${name}'.gates must be an array`);
25
- }
26
- return value.gates.map((gate) => {
27
- if (!gateWord(gate)) {
28
- throw new SettingsError(`gate bundle '${name}' contains an invalid gate word`);
29
- }
30
- if (gate !== "reviewed" && gate !== "verified") {
31
- throw new SettingsError(`gate bundle '${name}' contains a gate without a producer: ${gate}`);
32
- }
33
- return gate;
34
- });
35
- }
36
- export function gatesFrom(input) {
37
- if (!record(input))
38
- throw new TypeError("gatesFrom input must be an object");
39
- if (input.names !== undefined && !Array.isArray(input.names)) {
40
- throw new TypeError("gatesFrom names must be an array");
41
- }
42
- const names = input.names ?? ["default"];
43
- for (const name of names) {
44
- if (!gateWord(name))
45
- throw new SettingsError("gate bundle name must match ^[a-z][a-z0-9-]{0,63}$");
46
- }
47
- const view = input.settings.namespace("gates");
48
- if (view.kind === "failed")
49
- namespaceFailure(view);
50
- const expanded = [];
51
- const seen = new Set();
52
- for (const name of names) {
53
- const selected = view.entries.find((entry) => entry.name === name);
54
- if (selected === undefined) {
55
- if (input.names === undefined) {
56
- if (!seen.has("reviewed"))
57
- expanded.push("reviewed");
58
- seen.add("reviewed");
59
- continue;
60
- }
61
- throw new SettingsError(`unknown gate bundle: ${name}`);
62
- }
63
- for (const gate of bundleGates(name, selected.value)) {
64
- if (seen.has(gate))
65
- continue;
66
- seen.add(gate);
67
- expanded.push(gate);
68
- }
69
- }
70
- return Object.freeze(expanded);
71
- }
72
- function command(value, coordinate, ErrorType) {
73
- if (!record(value))
74
- throw new ErrorType(`${coordinate} must be an object`);
75
- for (const key of Object.keys(value)) {
76
- if (key !== "name" && key !== "argv" && key !== "timeoutMs")
77
- throw new ErrorType(`${coordinate} has unknown field: ${key}`);
78
- }
79
- if (typeof value.name !== "string" || value.name.trim().length === 0)
80
- throw new ErrorType(`${coordinate}.name must be nonblank`);
81
- if (!Array.isArray(value.argv) || value.argv.length === 0 || !value.argv.every((item) => typeof item === "string")) {
82
- throw new ErrorType(`${coordinate}.argv must be a nonempty string array`);
83
- }
84
- if (value.argv[0].trim().length === 0)
85
- throw new ErrorType(`${coordinate}.argv[0] must be nonblank`);
86
- if (!Number.isSafeInteger(value.timeoutMs) ||
87
- value.timeoutMs < 1 ||
88
- value.timeoutMs > 2_147_483_647) {
89
- throw new ErrorType(`${coordinate}.timeoutMs must be an integer from 1 through 2147483647`);
90
- }
91
- return Object.freeze({
92
- name: value.name.trim(),
93
- argv: Object.freeze([...value.argv]),
94
- timeoutMs: value.timeoutMs,
95
- });
96
- }
97
- function commands(value, coordinate, ErrorType) {
98
- if (!Array.isArray(value))
99
- throw new ErrorType(`${coordinate} must be an array`);
100
- return Object.freeze(value.map((item, index) => command(item, `${coordinate}[${index}]`, ErrorType)));
101
- }
102
- export function requireBranchesToBeUpToDateFrom(input) {
103
- if (!record(input))
104
- throw new TypeError("requireBranchesToBeUpToDateFrom input must be an object");
105
- const view = input.settings.namespace("git");
106
- if (view.kind === "failed")
107
- namespaceFailure(view);
108
- for (const entry of view.entries) {
109
- if (entry.name !== "requireBranchesToBeUpToDate") {
110
- throw new SettingsError(`git has unknown entry: ${entry.name}`);
111
- }
112
- }
113
- const selected = view.entries.find((entry) => entry.name === "requireBranchesToBeUpToDate");
114
- if (selected === undefined)
115
- return false;
116
- if (typeof selected.value !== "boolean") {
117
- throw new SettingsError("git.requireBranchesToBeUpToDate must be a boolean");
118
- }
119
- return selected.value;
120
- }
121
- export function worktreeHooksFrom(input) {
122
- if (!record(input))
123
- throw new TypeError("worktreeHooksFrom input must be an object");
124
- const view = input.settings.namespace("worktree");
125
- if (view.kind === "failed")
126
- namespaceFailure(view);
127
- for (const entry of view.entries) {
128
- if (entry.name !== "create" && entry.name !== "destroy") {
129
- throw new SettingsError(`worktree has unknown entry: ${entry.name}`);
130
- }
131
- }
132
- const selected = (phase) => {
133
- const entry = view.entries.find((item) => item.name === phase);
134
- if (entry === undefined)
135
- return Object.freeze([]);
136
- return commands(entry.value, `worktree.${phase}`, SettingsError);
137
- };
138
- return Object.freeze({ create: selected("create"), destroy: selected("destroy") });
139
- }
140
- export function normalizedWorktreeHooks(value) {
141
- if (!record(value))
142
- throw new TypeError("hooks must be an object");
143
- for (const key of Object.keys(value)) {
144
- if (key !== "create" && key !== "destroy")
145
- throw new TypeError(`hooks has unknown field: ${key}`);
146
- }
147
- return Object.freeze({
148
- create: commands(value.create, "hooks.create", TypeError),
149
- destroy: commands(value.destroy, "hooks.destroy", TypeError),
150
- });
151
- }
152
- export const EMPTY_WORKTREE_HOOKS = Object.freeze({
153
- create: Object.freeze([]),
154
- destroy: Object.freeze([]),
155
- });
156
- export function worktreeHooksOption(value) {
157
- return value === undefined ? EMPTY_WORKTREE_HOOKS : normalizedWorktreeHooks(value);
158
- }
1
+ export { gatesFrom, requireBranchesToBeUpToDateFrom, SettingsError } from "../settings.js";
2
+ export { EMPTY_WORKTREE_HOOKS, normalizedWorktreeHooks, worktreeHooksFrom, worktreeHooksOption } from "../git/hooks.js";
@@ -1,7 +1,8 @@
1
- import type { ContractId, ContractState } from "../core/facts/types.js";
1
+ import { type ContractId, type ContractState } from "../core/facts/types.js";
2
2
  import { type GitDecodeChannel } from "../git/read-observation.js";
3
3
  import type { DocumentDerivation, PlacementStop, RepositoryScope } from "../protocol/operations.js";
4
4
  import type { AcceptedIntent } from "./mutation.js";
5
+ import { z } from "zod";
5
6
  export type ContinuationReport = Readonly<{
6
7
  claimed: readonly ContractId[];
7
8
  stopped: readonly Readonly<{
@@ -11,6 +12,24 @@ export type ContinuationReport = Readonly<{
11
12
  }>;
12
13
  }>[];
13
14
  }>;
15
+ export declare function decodeContinuationReport(value: unknown): ContinuationReport;
16
+ export declare const continuationReportSchema: z.ZodType<Readonly<{
17
+ claimed: readonly ContractId[];
18
+ stopped: readonly Readonly<{
19
+ contractId: ContractId;
20
+ stop: PlacementStop | Readonly<{
21
+ kind: "already-terminal";
22
+ }>;
23
+ }>[];
24
+ }>, unknown, z.core.$ZodTypeInternals<Readonly<{
25
+ claimed: readonly ContractId[];
26
+ stopped: readonly Readonly<{
27
+ contractId: ContractId;
28
+ stop: PlacementStop | Readonly<{
29
+ kind: "already-terminal";
30
+ }>;
31
+ }>[];
32
+ }>, unknown>>;
14
33
  export declare function continueDeliveredDependents<Value extends object>(input: Readonly<{
15
34
  scope: RepositoryScope;
16
35
  channel: GitDecodeChannel;
@@ -1,9 +1,43 @@
1
+ import { contractId } from "../core/facts/types.js";
1
2
  import { observeActiveContractWorld } from "../git/observe.js";
2
3
  import { withGitReadObservation } from "../git/read-observation.js";
3
4
  import { reconcileDependentWorktree } from "../git/reconcile.js";
4
5
  import { worktreePath } from "../git/workspace.js";
5
6
  import { continueDeliveryOperation } from "../protocol/deliver.js";
7
+ import { decodePlacementStop } from "../protocol/result-codec.js";
8
+ import { concatenatePrivateStateSeatClose } from "../git/private-state-seat.js";
9
+ import { ownerSchema } from "./result-codec.js";
6
10
  import { appointmentFor, readPlaceRegister } from "../workspace-place.js";
11
+ export function decodeContinuationReport(value) {
12
+ if (value === null || typeof value !== "object" || Array.isArray(value))
13
+ throw new Error("malformed continuation report");
14
+ const object = value;
15
+ if (!Array.isArray(object.claimed) || !Array.isArray(object.stopped))
16
+ throw new Error("malformed continuation report");
17
+ if (Object.keys(object).some((key) => key !== "claimed" && key !== "stopped"))
18
+ throw new Error("malformed continuation report");
19
+ return {
20
+ claimed: object.claimed.map((id) => contractId(String(id))),
21
+ stopped: object.stopped.map((item) => {
22
+ if (item === null || typeof item !== "object" || Array.isArray(item))
23
+ throw new Error("malformed continuation report");
24
+ const stopped = item;
25
+ if (Object.keys(stopped).some((key) => key !== "contractId" && key !== "stop"))
26
+ throw new Error("malformed continuation report");
27
+ const stopValue = stopped.stop;
28
+ const alreadyTerminal = stopValue !== null &&
29
+ typeof stopValue === "object" &&
30
+ !Array.isArray(stopValue) &&
31
+ stopValue.kind === "already-terminal" &&
32
+ Object.keys(stopValue).length === 1;
33
+ return {
34
+ contractId: contractId(String(stopped.contractId)),
35
+ stop: alreadyTerminal ? { kind: "already-terminal" } : decodePlacementStop(stopValue),
36
+ };
37
+ }),
38
+ };
39
+ }
40
+ export const continuationReportSchema = ownerSchema(decodeContinuationReport, "expected continuation report");
7
41
  function reverseDependents(world) {
8
42
  const index = new Map();
9
43
  for (const record of world.contracts.values()) {
@@ -24,10 +58,12 @@ function reverseDependents(world) {
24
58
  function appendAccepted(primary, child) {
25
59
  const effects = [...(primary.physical?.effects ?? []), ...(child.physical?.effects ?? [])];
26
60
  const lag = [...(primary.physical?.lag ?? []), ...(child.physical?.lag ?? [])];
61
+ const seatClose = concatenatePrivateStateSeatClose(primary.seatClose, child.seatClose);
27
62
  return {
28
63
  ...primary,
29
64
  facts: [...primary.facts, ...child.facts],
30
65
  ...(effects.length === 0 && lag.length === 0 ? {} : { physical: { effects, lag } }),
66
+ ...(seatClose === undefined ? {} : { seatClose }),
31
67
  };
32
68
  }
33
69
  function appendPhysical(primary, physical) {
@@ -21,6 +21,7 @@ type BindResult<Handle> = Readonly<Omit<MutationResult<Handle>, "value"> & {
21
21
  } & RegionObservation>;
22
22
  type HandleFactory<Handle> = (contractId: ContractId, scope: RepositoryScope) => Handle;
23
23
  export declare function bindKeiyaku<Handle>(input: BindInput, createHandle: HandleFactory<Handle>): Promise<BindResult<Handle>>;
24
+ export declare function parseMarkdownBindDocument(markdown: string): import("../body/types.js").DecodedContractDocument;
24
25
  /** Internal CLI composition; not exported from the package root. */
25
26
  export declare function bindFromCli<Handle>(input: BindInput, createHandle: HandleFactory<Handle>): Promise<BindResult<Handle>>;
26
27
  export {};
@@ -9,14 +9,19 @@ import { observeRegion } from "./region.js";
9
9
  import { scopeForRepo } from "./repo.js";
10
10
  import { worktreeHooksOption } from "./configuration.js";
11
11
  function acceptedBindResult(result, region) {
12
- const { facts, head, lags, settlementLags, recoverySnapshot } = result;
12
+ const { facts, head, lags, settlementLags, recoverySnapshot, pending, cleanup, leak, seatClose } = result;
13
13
  return {
14
+ kind: "accepted",
14
15
  facts,
15
16
  head,
16
17
  keiyaku: result.value,
17
18
  lags,
18
19
  settlementLags,
20
+ pending,
19
21
  ...(recoverySnapshot === undefined ? {} : { recoverySnapshot }),
22
+ ...(cleanup === undefined ? {} : { cleanup }),
23
+ ...(leak === undefined ? {} : { leak }),
24
+ ...(seatClose === undefined || seatClose.length === 0 ? {} : { seatClose }),
20
25
  ...region,
21
26
  };
22
27
  }
@@ -58,7 +63,7 @@ export async function bindKeiyaku(input, createHandle) {
58
63
  const id = admission.value.contractId;
59
64
  const toHandle = ({ contractId: contract }) => createHandle(contract, sourceScope);
60
65
  const result = await completeMutation({
61
- ...completionInput(sourceScope, channel, id, toHandle, hooks),
66
+ ...completionInput({ scope: sourceScope, channel, contractId: id, value: toHandle, hooks }),
62
67
  accepted: admission,
63
68
  });
64
69
  return acceptedBindResult(result, await observeRegion(sourceScope, channel, id, fork.document.region));
@@ -66,6 +71,9 @@ export async function bindKeiyaku(input, createHandle) {
66
71
  }
67
72
  return bindMarkdownFromValues(values, "targetless", createHandle);
68
73
  }
74
+ export function parseMarkdownBindDocument(markdown) {
75
+ return decodeContractDocument(requireMarkdown(markdown));
76
+ }
69
77
  /** Internal CLI composition; not exported from the package root. */
70
78
  export async function bindFromCli(input, createHandle) {
71
79
  const values = requireInput(input, "Keiyaku.bind input");
@@ -77,7 +85,7 @@ async function bindMarkdownFromValues(values, omittedTarget, createHandle) {
77
85
  const hooks = worktreeHooksOption(values.hooks);
78
86
  const scope = scopeForRepo(values.repo);
79
87
  const task = taskOption(values.task);
80
- const document = decodeContractDocument(requireMarkdown(values.markdown));
88
+ const document = parseMarkdownBindDocument(requireMarkdown(values.markdown));
81
89
  if ((values.workspace ?? "worktree") !== "worktree")
82
90
  throw new TypeError("workspace must be worktree");
83
91
  const target = values.target;
@@ -103,9 +111,12 @@ async function bindMarkdownFromValues(values, omittedTarget, createHandle) {
103
111
  const id = accepted.value.contractId;
104
112
  const toHandle = ({ contractId: contract }) => createHandle(contract, scope);
105
113
  const result = admission.admission === null
106
- ? await completeMutation({ ...completionInput(scope, channel, id, toHandle, hooks), accepted })
114
+ ? await completeMutation({
115
+ ...completionInput({ scope, channel, contractId: id, value: toHandle, hooks }),
116
+ accepted,
117
+ })
107
118
  : await completeHolderMutation({
108
- completion: completionInput(scope, channel, id, toHandle, hooks),
119
+ completion: completionInput({ scope, channel, contractId: id, value: toHandle, hooks }),
109
120
  admission: admission.admission,
110
121
  requireAccepted,
111
122
  });
@@ -6,8 +6,8 @@ import type { AuditReport } from "../protocol/audit.js";
6
6
  import type { WorktreeHooks } from "./configuration.js";
7
7
  import type { DeliveryValue } from "./delivery.js";
8
8
  import { type MutationResult } from "./mutation.js";
9
- import type { Review } from "./contract-forwarding-result.js";
10
- export type { Review } from "./contract-forwarding-result.js";
9
+ import type { Review } from "./mutation.js";
10
+ export type { Review } from "./mutation.js";
11
11
  import { Repo } from "./repo.js";
12
12
  export type DeliveryExecutionInput = Readonly<{
13
13
  scope: RepositoryScope;
@@ -5,7 +5,7 @@ import { reviewOperation } from "../protocol/review.js";
5
5
  import { auditContract } from "./audit.js";
6
6
  import { continueAcceptedCompletion } from "./continuation.js";
7
7
  import { documentDerivation } from "./input.js";
8
- import { completionInput, completeMutation } from "./mutation.js";
8
+ import { completionInput, completeMutation, completionPending } from "./mutation.js";
9
9
  import { requireAccepted } from "./refusal.js";
10
10
  import { scopeForRepo } from "./repo.js";
11
11
  function derivedDocument(state) {
@@ -37,7 +37,14 @@ export async function executeLocalDelivery(input) {
37
37
  ...(input.signal === undefined ? {} : { signal: input.signal }),
38
38
  });
39
39
  return completeMutation({
40
- ...completionInput(scope, channel, input.contractId, (delivery) => delivery, input.hooks),
40
+ ...completionInput({
41
+ scope,
42
+ channel,
43
+ contractId: input.contractId,
44
+ value: (delivery) => delivery,
45
+ hooks: input.hooks,
46
+ valuePending: completionPending,
47
+ }),
41
48
  accepted: continued,
42
49
  });
43
50
  });
@@ -57,7 +64,14 @@ export async function executeLocalReview(input) {
57
64
  ...(input.actor === undefined ? {} : { actor: input.actor }),
58
65
  });
59
66
  return completeMutation({
60
- ...completionInput(input.scope, channel, input.contractId, (review) => review, input.hooks),
67
+ ...completionInput({
68
+ scope: input.scope,
69
+ channel,
70
+ contractId: input.contractId,
71
+ value: (review) => review,
72
+ hooks: input.hooks,
73
+ valuePending: completionPending,
74
+ }),
61
75
  accepted: continued,
62
76
  });
63
77
  });
@@ -74,7 +88,7 @@ export async function executeForwardedDeliver(input) {
74
88
  ...(input.signal === undefined ? {} : { signal: input.signal }),
75
89
  hooks: input.hooks,
76
90
  });
77
- if (!("facts" in result))
91
+ if (result.kind !== "accepted")
78
92
  return { result };
79
93
  const delivery = result.facts.find((fact) => fact.kind === "deliver");
80
94
  if (delivery === undefined)
@@ -1,3 +1,4 @@
1
+ /** @architectureCompositionRoot */
1
2
  import { documentDiff } from "../markdown/diff.js";
2
3
  import { applyAmendDocument } from "../body/amend.js";
3
4
  import { decodeArcDocument } from "../body/arc.js";
@@ -131,7 +132,7 @@ export class KeiyakuHandle {
131
132
  },
132
133
  }));
133
134
  const completed = await completeMutation({
134
- ...completionInput(this.scope, channel, this.id, () => undefined, hooks),
135
+ ...completionInput({ scope: this.scope, channel, contractId: this.id, value: () => undefined, hooks }),
135
136
  accepted,
136
137
  });
137
138
  return {
@@ -232,7 +233,7 @@ export class KeiyakuHandle {
232
233
  },
233
234
  }));
234
235
  return completeHolderMutation({
235
- completion: completionInput(this.scope, channel, this.id, () => undefined, hooks),
236
+ completion: completionInput({ scope: this.scope, channel, contractId: this.id, value: () => undefined, hooks }),
236
237
  admission,
237
238
  requireAccepted,
238
239
  });
@@ -251,7 +252,7 @@ export class KeiyakuHandle {
251
252
  chapter,
252
253
  }));
253
254
  return completeMutation({
254
- ...completionInput(this.scope, channel, this.id, () => undefined, hooks),
255
+ ...completionInput({ scope: this.scope, channel, contractId: this.id, value: () => undefined, hooks }),
255
256
  accepted,
256
257
  });
257
258
  });
@@ -1,8 +1,8 @@
1
- import { type ErasedRequestCommand, type RequestCommand } from "../akuma/request-wire.js";
1
+ import { type ErasedRequestCommand, type RequestProtocol, type ServiceRequestCommand } from "../akuma/request-wire.js";
2
2
  import type { AuditReport } from "../protocol/audit.js";
3
3
  import type { IntegrationConflictMaterialized } from "../protocol/deliver.js";
4
4
  import type { DeliveryValue } from "./delivery.js";
5
- import type { MutationResult } from "./mutation.js";
5
+ import { type MutationResult } from "./mutation.js";
6
6
  import type { DeliveryExecutionInput, Review } from "./contract-forwarding.js";
7
7
  import { z } from "zod";
8
8
  type DeliveryResult = MutationResult<DeliveryValue> | IntegrationConflictMaterialized;
@@ -225,13 +225,9 @@ export type ContractRequestPort = Readonly<{
225
225
  reviewFactId?: string;
226
226
  }>>;
227
227
  }>;
228
- type ContractExecutionContext = Readonly<{
229
- requester: ContractRequester;
230
- signal: AbortSignal;
231
- upstream: ContractRequestPort;
232
- }>;
233
- export declare function contractRequestCommand(action: ContractRequest["action"]): RequestCommand<ContractRequest, ContractResult, ContractService, ContractReference, ContractExecutionContext>;
234
- export declare function contractRequestCommands(): Readonly<Record<"contract.audit" | "contract.deliver" | "contract.review", ErasedRequestCommand>>;
228
+ export declare function contractRequestProtocol(action: ContractRequest["action"]): RequestProtocol<ContractRequest, ContractResult, ContractReference>;
229
+ export declare function contractRequestCommand(action: ContractRequest["action"], port: ContractRequestPort): ServiceRequestCommand<ContractRequest, ContractResult, ContractService, ContractReference>;
230
+ export declare function contractRequestCommands(port: ContractRequestPort): Readonly<Record<"contract.audit" | "contract.deliver" | "contract.review", ErasedRequestCommand>>;
235
231
  export declare function requestForwardedContractLive<Action extends ContractRequest["action"]>(input: Readonly<{
236
232
  directory: string;
237
233
  action: Action;