@astrosheep/keiyaku 2.9.11 → 2.9.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 (218) hide show
  1. package/README.md +79 -85
  2. package/build/.tsbuildinfo +1 -1
  3. package/build/agents/call-terms.js +1 -0
  4. package/build/agents/providers/claude-agent-sdk/adapter.js +17 -4
  5. package/build/cli/commands/akuma/akuma/handler.js +2 -1
  6. package/build/cli/commands/akuma/akuma/meta.js +4 -3
  7. package/build/cli/commands/akuma/catalog.js +2 -0
  8. package/build/cli/commands/akuma/list/handler.js +1 -1
  9. package/build/cli/commands/akuma/list/meta-list.js +12 -0
  10. package/build/cli/commands/akuma/list/meta-ls.js +2 -2
  11. package/build/cli/commands/akuma.js +5 -0
  12. package/build/cli/commands/contract/amend/meta.js +4 -3
  13. package/build/cli/commands/contract/arc/meta.js +2 -0
  14. package/build/cli/commands/contract/audit/handler.js +28 -2
  15. package/build/cli/commands/contract/audit/meta.js +4 -3
  16. package/build/cli/commands/contract/bind/meta.js +4 -4
  17. package/build/cli/commands/contract/petition/handler.js +2 -1
  18. package/build/cli/commands/contract/petition/meta.js +2 -2
  19. package/build/cli/commands/contract/renew/handler.js +44 -3
  20. package/build/cli/commands/contract/renew/meta.js +5 -4
  21. package/build/cli/commands/metadata.js +14 -10
  22. package/build/cli/commands/projection/call/handler.js +1 -1
  23. package/build/cli/commands/projection/call/meta.js +1 -1
  24. package/build/cli/commands/projection/catalog.js +2 -2
  25. package/build/cli/commands/projection/{revive → fork}/handler.js +10 -5
  26. package/build/cli/commands/projection/fork/meta.js +12 -0
  27. package/build/cli/commands/projection/history/handler.js +46 -2
  28. package/build/cli/commands/projection/history/meta.js +3 -3
  29. package/build/cli/commands/projection/kill/handler.js +4 -5
  30. package/build/cli/commands/projection/kill/meta.js +2 -2
  31. package/build/cli/commands/projection/status/handler.js +29 -13
  32. package/build/cli/commands/projection/status/meta.js +14 -3
  33. package/build/cli/commands/projection/tell/handler.js +8 -4
  34. package/build/cli/commands/projection/tell/meta.js +1 -1
  35. package/build/cli/commands/projection/wait/handler.js +45 -20
  36. package/build/cli/commands/projection/wait/meta.js +1 -1
  37. package/build/cli/commands/shared.js +2 -2
  38. package/build/cli/commands/system/catalog.js +2 -0
  39. package/build/cli/commands/task/add/handler.js +28 -12
  40. package/build/cli/commands/task/add/meta.js +18 -6
  41. package/build/cli/commands/task/catalog.js +4 -0
  42. package/build/cli/commands/task/compose/handler.js +18 -0
  43. package/build/cli/commands/task/compose/meta.js +10 -0
  44. package/build/cli/commands/task/doctor/handler.js +2 -3
  45. package/build/cli/commands/task/doctor/meta.js +2 -2
  46. package/build/cli/commands/task/done/meta.js +2 -2
  47. package/build/cli/commands/task/drop/handler.js +7 -2
  48. package/build/cli/commands/task/drop/meta.js +6 -3
  49. package/build/cli/commands/task/hold/meta.js +2 -2
  50. package/build/cli/commands/task/log/meta.js +2 -2
  51. package/build/cli/commands/task/ls/meta.js +2 -2
  52. package/build/cli/commands/task/note/handler.js +6 -0
  53. package/build/cli/commands/task/note/meta.js +11 -0
  54. package/build/cli/commands/task/resume/meta.js +2 -2
  55. package/build/cli/commands/task/shared.js +29 -15
  56. package/build/cli/commands/task/show/meta.js +2 -2
  57. package/build/cli/commands/task/start/meta.js +2 -2
  58. package/build/cli/commands/task/stop/meta.js +2 -2
  59. package/build/cli/commands/task/update/meta.js +3 -2
  60. package/build/cli/commands/verification/handler.js +43 -0
  61. package/build/cli/commands/verification/meta.js +13 -0
  62. package/build/cli/completion.js +16 -13
  63. package/build/cli/flags.js +48 -12
  64. package/build/cli/help.js +29 -30
  65. package/build/cli/index.js +14 -8
  66. package/build/cli/parse-flags.js +60 -21
  67. package/build/cli/parse-metadata.js +10 -4
  68. package/build/cli/parse-selectors.js +22 -4
  69. package/build/cli/parse.js +43 -30
  70. package/build/cli/projection-address.js +7 -7
  71. package/build/cli/render/arc.js +12 -3
  72. package/build/cli/render/audit.js +2 -2
  73. package/build/cli/render/call.js +4 -4
  74. package/build/cli/render/kanshi.js +122 -85
  75. package/build/cli/render/misc.js +2 -2
  76. package/build/cli/render/petition.js +16 -1
  77. package/build/cli/render/projection-history.js +17 -4
  78. package/build/cli/render/shared.js +5 -5
  79. package/build/cli/render/status-indicator.js +47 -0
  80. package/build/cli/render/status.js +106 -76
  81. package/build/cli/render/success-response.js +20 -5
  82. package/build/cli/render/task.js +33 -5
  83. package/build/cli/render/tell.js +10 -4
  84. package/build/cli/render/tool-command-normalization.js +137 -0
  85. package/build/cli/render/tool-presentation.js +2 -1
  86. package/build/cli/render/verification.js +23 -0
  87. package/build/cli/render/wait.js +101 -33
  88. package/build/cli/types.js +2 -1
  89. package/build/config/akuma-loader.js +21 -1
  90. package/build/config/settings/knobs.js +7 -1
  91. package/build/config/settings/schema.js +10 -5
  92. package/build/core/addressing.js +3 -3
  93. package/build/core/amend.js +102 -17
  94. package/build/core/arc.js +4 -4
  95. package/build/core/audit/candidate.js +10 -18
  96. package/build/core/audit/coordinates.js +12 -17
  97. package/build/core/audit/evidence.js +6 -4
  98. package/build/core/audit/facade.js +3 -3
  99. package/build/core/audit/report.js +1 -1
  100. package/build/core/bind-reconciliation.js +42 -23
  101. package/build/core/bind.js +182 -81
  102. package/build/core/call/call.js +6 -7
  103. package/build/core/call/context.js +46 -33
  104. package/build/core/call/execution.js +21 -6
  105. package/build/core/call/prompt.js +11 -42
  106. package/build/core/contract-carrier-runtime.js +209 -105
  107. package/build/core/contract-carrier.js +156 -73
  108. package/build/core/contract-view.js +43 -6
  109. package/build/core/contract.js +2 -1
  110. package/build/core/derived-replay.js +168 -35
  111. package/build/core/draft.js +60 -27
  112. package/build/core/forfeit.js +1 -1
  113. package/build/core/lifecycle-history.js +13 -0
  114. package/build/core/lifecycle-recovery.js +32 -27
  115. package/build/core/lifecycle-runner.js +14 -14
  116. package/build/core/log.js +1 -1
  117. package/build/core/outcome-base.js +2 -2
  118. package/build/core/projection/akuma-name.js +43 -0
  119. package/build/core/projection/generation/database.js +141 -79
  120. package/build/core/projection/generation/ledger.js +91 -0
  121. package/build/core/projection/generation/model.js +19 -14
  122. package/build/core/projection/generation/projection-generation-continuation.js +1 -1
  123. package/build/core/projection/generation/projection-generation-doorbell.js +88 -0
  124. package/build/core/projection/generation/projection-generation-execution.js +24 -0
  125. package/build/core/projection/generation/projection-generation-identity.js +4 -0
  126. package/build/core/projection/generation/projection-generation-launcher.js +72 -138
  127. package/build/core/projection/generation/projection-generation-process.js +16 -15
  128. package/build/core/projection/generation/projection-generation-runner.js +132 -76
  129. package/build/core/projection/generation/projection-generation-runtime.js +10 -61
  130. package/build/core/projection/generation/protocol.js +68 -0
  131. package/build/core/projection/generation/store.js +17 -7
  132. package/build/core/projection/generation/transitions.js +24 -14
  133. package/build/core/projection/index.js +5 -5
  134. package/build/core/projection/projection-core.js +6 -2
  135. package/build/core/projection/projection-execution-observer.js +1 -1
  136. package/build/core/projection/projection-history.js +8 -8
  137. package/build/core/projection/projection-kill.js +20 -10
  138. package/build/core/projection/projection-life-observer.js +8 -8
  139. package/build/core/projection/projection-mint.js +6 -8
  140. package/build/core/projection/projection-status-observation.js +77 -8
  141. package/build/core/projection/projection-status.js +151 -4
  142. package/build/core/projection/projection-wait.js +48 -29
  143. package/build/core/projection/projection-wake.js +28 -88
  144. package/build/core/projection/tell/launch-store.js +1 -1
  145. package/build/core/projection/tell/store.js +1 -1
  146. package/build/core/renew-build.js +204 -74
  147. package/build/core/renew-plan.js +34 -9
  148. package/build/core/renew-rewrite.js +56 -15
  149. package/build/core/renew.js +39 -35
  150. package/build/core/repository-ledger/accepted-fold-read.js +6 -3
  151. package/build/core/repository-ledger/claim-evidence.js +1 -1
  152. package/build/core/repository-ledger/codec.js +11 -5
  153. package/build/core/repository-ledger/current-state-store.js +464 -349
  154. package/build/core/repository-ledger/fold-repository.js +5 -6
  155. package/build/core/repository-ledger/identity.js +60 -0
  156. package/build/core/repository-ledger/inventory.js +3 -3
  157. package/build/core/repository-ledger/read-model.js +57 -9
  158. package/build/core/repository-ledger/write-transaction.js +24 -17
  159. package/build/core/run-control/connection-bound-close.js +41 -0
  160. package/build/core/run-control/detached-lease-bootstrap.js +208 -0
  161. package/build/core/run-control/detached-process.js +14 -0
  162. package/build/core/run-control/index.js +6 -0
  163. package/build/core/{process-group.js → run-control/process-tree.js} +1 -1
  164. package/build/core/run-control/runner-lease.js +172 -0
  165. package/build/core/run-control/sqlite-process-lifetime-lock.js +174 -0
  166. package/build/core/seal.js +44 -32
  167. package/build/core/settlement/claim-delivery.js +22 -9
  168. package/build/core/settlement/claim.js +8 -6
  169. package/build/core/settlement/petition-claim-gates.js +9 -8
  170. package/build/core/settlement/petition-head-guard.js +5 -6
  171. package/build/core/settlement/petition-preview.js +21 -5
  172. package/build/core/settlement/petition.js +51 -17
  173. package/build/core/settlement/settlement.js +20 -15
  174. package/build/core/settlement/verdict.js +2 -2
  175. package/build/core/settlement/verification.js +492 -364
  176. package/build/core/status/board.js +184 -75
  177. package/build/core/status/drift.js +8 -10
  178. package/build/core/task/board.js +1 -0
  179. package/build/core/task/commands.js +25 -0
  180. package/build/core/task/compose.js +328 -0
  181. package/build/core/task/document.js +102 -39
  182. package/build/core/task/index.js +4 -3
  183. package/build/core/task/settlement-git.js +70 -30
  184. package/build/core/task/settlement-policy.js +27 -14
  185. package/build/core/task/source-board.js +1 -0
  186. package/build/core/task/task-bind-preparation.js +59 -9
  187. package/build/core/task/task-contract.js +2 -2
  188. package/build/core/task/task-git-store.js +1 -0
  189. package/build/core/task/task-store-repository.js +2 -0
  190. package/build/core/task/task.js +2 -2
  191. package/build/core/transcripts.js +4 -4
  192. package/build/core/verification-declaration.js +95 -0
  193. package/build/core/worktree-bootstrap.js +1 -1
  194. package/build/core/worktree-path.js +7 -11
  195. package/build/flow-error.js +15 -2
  196. package/build/generated/version.js +2 -2
  197. package/build/git/branches.js +41 -70
  198. package/build/git/commits.js +92 -21
  199. package/build/git/core.js +9 -161
  200. package/build/git/diff/preview.js +4 -4
  201. package/build/git/diff/read.js +4 -4
  202. package/build/git/diff/structured.js +5 -5
  203. package/build/git/process.js +229 -0
  204. package/build/git/refs.js +30 -5
  205. package/build/git/staging.js +39 -115
  206. package/build/git/streaming-batch.js +9 -16
  207. package/build/git/worktree.js +104 -91
  208. package/build/index.js +7 -0
  209. package/package.json +2 -2
  210. package/skills/keiyaku-akuma/SKILL.md +27 -21
  211. package/skills/keiyaku-task/SKILL.md +61 -5
  212. package/skills/keiyaku-workflow/SKILL.md +81 -26
  213. package/build/cli/commands/projection/revive/meta.js +0 -12
  214. package/build/core/projection/projection-life-protocol.js +0 -115
  215. package/build/core/projection/projection-runner-lock.js +0 -382
  216. package/build/core/projection/tell/database.js +0 -127
  217. package/build/core/settlement/verification-coordination.js +0 -305
  218. package/build/core/settlement/verification-supervisor.js +0 -275
@@ -2,15 +2,24 @@ import { buildCallTerms } from "../../agents/call-terms.js";
2
2
  import { createAbortError, restoreOutcome, SubagentFailure, } from "../../agents/harness/index.js";
3
3
  import { resolveAkumaLaunchSnapshot } from "../../agents/launch-snapshot/resolve.js";
4
4
  import { selectSubagent } from "../../agents/selector.js";
5
+ import { assertSettingsKnobUsable } from "../../config/settings/disease.js";
6
+ import { loadKeiyakuSettings } from "../../config/settings/loader.js";
7
+ import { resolveProjectionAdoptionTimeoutMs } from "../../config/settings/knobs.js";
5
8
  import { FlowError } from "../../flow-error.js";
6
9
  import { assertProjectionAlias, moveProjectionAlias } from "../projection/index.js";
7
10
  import { projectionDir } from "../projection/index.js";
8
- import { createProjectionExecutionId } from "../projection/index.js";
9
- import { PROJECTION_ADOPTION_TIMEOUT_MS, startProjectionGeneration } from "../projection/index.js";
10
- import { openProjectionGenerationStore, openProjectionGenerationStoreReadOnly, acquireProjectionRunnerLock, } from "../projection/index.js";
11
+ import { createProjectionExecutionId, projectionRunnerLeasePath } from "../projection/index.js";
12
+ import { startProjectionGeneration } from "../projection/index.js";
13
+ import { openProjectionGenerationStore, openProjectionGenerationStoreReadOnly, } from "../projection/index.js";
14
+ import { acquireRunnerLease } from "../run-control/runner-lease.js";
11
15
  import { observeProjectionLife } from "../projection/index.js";
12
16
  import { mintProjection, mintRepositoryProjection } from "../projection/index.js";
13
17
  import { waitForProjection } from "../projection/index.js";
18
+ async function readProjectionAdoptionTimeoutMs(cwd) {
19
+ const settings = await loadKeiyakuSettings(cwd);
20
+ assertSettingsKnobUsable(settings, "projectionAdoptionTimeoutMs");
21
+ return resolveProjectionAdoptionTimeoutMs(settings.knobs);
22
+ }
14
23
  export function readCurrentGenerationOrThrow(projectionDirectory) {
15
24
  const store = openProjectionGenerationStoreReadOnly(projectionDirectory);
16
25
  try {
@@ -60,11 +69,12 @@ export function outcomeFromGeneration(current) {
60
69
  return restoreOutcome(record);
61
70
  }
62
71
  export async function executeSubagent(agentName, prompt, cwd, options) {
72
+ const adoptionTimeoutMs = await readProjectionAdoptionTimeoutMs(cwd);
63
73
  const { projection: projectionCoordinate, launchSnapshot, launchFacts } = await buildCallConfig(agentName, prompt, cwd, options);
64
74
  if (!projectionCoordinate) {
65
75
  throw new FlowError("INTERNAL_STATE", "durable execution requires a projection coordinate");
66
76
  }
67
- const launchOwnership = acquireProjectionRunnerLock(projectionCoordinate.dir);
77
+ const launchOwnership = acquireRunnerLease(projectionRunnerLeasePath(projectionCoordinate.dir));
68
78
  const launched = await startProjectionGeneration(projectionCoordinate.dir, projectionCoordinate.executionId, {
69
79
  commitLaunch: () => {
70
80
  const store = openProjectionGenerationStore(projectionCoordinate.dir);
@@ -76,6 +86,7 @@ export async function executeSubagent(agentName, prompt, cwd, options) {
76
86
  }
77
87
  },
78
88
  launchOwnership,
89
+ adoptionTimeoutMs,
79
90
  });
80
91
  launchOwnership.close();
81
92
  if (launched.status !== "adopted") {
@@ -127,11 +138,12 @@ export async function executeSubagent(agentName, prompt, cwd, options) {
127
138
  throw new FlowError("INTERNAL_STATE", "Unhandled subagent outcome state.");
128
139
  }
129
140
  export async function launchSubagentGeneration(agentName, prompt, cwd, options) {
141
+ const adoptionTimeoutMs = await readProjectionAdoptionTimeoutMs(cwd);
130
142
  const { projection, launchSnapshot, launchFacts } = await buildCallConfig(agentName, prompt, cwd, options);
131
143
  if (!projection) {
132
144
  throw new FlowError("INTERNAL_STATE", "durable launch requires a projection coordinate");
133
145
  }
134
- const launchOwnership = acquireProjectionRunnerLock(projection.dir);
146
+ const launchOwnership = acquireRunnerLease(projectionRunnerLeasePath(projection.dir));
135
147
  const launched = await startProjectionGeneration(projection.dir, projection.executionId, {
136
148
  commitLaunch: () => {
137
149
  const store = openProjectionGenerationStore(projection.dir);
@@ -143,6 +155,7 @@ export async function launchSubagentGeneration(agentName, prompt, cwd, options)
143
155
  }
144
156
  },
145
157
  launchOwnership,
158
+ adoptionTimeoutMs,
146
159
  });
147
160
  launchOwnership.close();
148
161
  if (launched.status !== "adopted") {
@@ -162,6 +175,7 @@ export async function buildCallConfig(agentName, prompt, cwd, options) {
162
175
  const resolvedTerms = buildCallTerms(launchSnapshot, prompt, cwd, {
163
176
  signal: options.signal,
164
177
  idleTimeoutMs: options.idleTimeoutMs,
178
+ carrier: options.carrier,
165
179
  });
166
180
  // Mint projection directory for supervisor pump.
167
181
  const slug = launchSnapshot.akuma.name;
@@ -196,6 +210,7 @@ export async function buildCallConfig(agentName, prompt, cwd, options) {
196
210
  ...(options.evidenceCwd !== undefined ? { evidenceCwd: options.evidenceCwd } : {}),
197
211
  ...(options.title !== undefined ? { title: options.title } : {}),
198
212
  ...(options.context !== undefined ? { context: options.context } : {}),
213
+ ...(options.carrier !== undefined ? { carrier: options.carrier } : {}),
199
214
  persistProjectionResponse: options.persistProjectionResponse ?? false,
200
215
  ...(options.continuation ? {
201
216
  session: options.continuation.session,
@@ -210,7 +225,7 @@ export async function buildCallConfig(agentName, prompt, cwd, options) {
210
225
  let previousAliasTargetStillRunning;
211
226
  if (previousAliasTarget !== undefined) {
212
227
  try {
213
- const phase = observeProjectionLife(await projectionDir(options.projectionCwd ?? cwd, previousAliasTarget), { nowMs: Date.now(), startupTimeoutMs: PROJECTION_ADOPTION_TIMEOUT_MS }).phase;
228
+ const phase = observeProjectionLife(await projectionDir(options.projectionCwd ?? cwd, previousAliasTarget), { nowMs: Date.now() }).phase;
214
229
  if (phase === "minting" || phase === "active" || phase === "quiescent") {
215
230
  previousAliasTargetStillRunning = previousAliasTarget;
216
231
  }
@@ -7,52 +7,21 @@ const COMMISSIONED_DELIVERY_BOUNDARY = [
7
7
  ].join(" ");
8
8
  export function buildCallPrompt(input) {
9
9
  const references = [...new Set((input.referenceFiles ?? []).map((file) => file.trim()).filter(Boolean))];
10
- if (input.currentIntent?.source === "arc") {
11
- const arc = input.currentIntent;
10
+ if (!input.commissioned) {
12
11
  return [
13
- `You are a called ${ACTOR_IDENTITY} working inside open arc a${arc.arc}.`,
14
- "Stay within the arc scope and do the requested work directly.",
15
- `Title: ${arc.title}`,
16
- `Objective: ${arc.objective}`,
17
- `Brief:\n${arc.brief}`,
18
- COMMISSIONED_DELIVERY_BOUNDARY,
19
- "",
20
- `Task:\n${input.task}`,
21
- `Context:\n${input.context?.trim() || "(none provided)"}`,
12
+ input.task,
13
+ input.context?.trim() ?? "",
22
14
  references.length > 0 ? `Reference files:\n${references.map((file) => `- ${file}`).join("\n")}` : "",
23
- "Provide the final result for the caller/main agent.",
24
- ].filter(Boolean).join("\n\n");
25
- }
26
- if (input.currentIntent?.source === "bind") {
27
- const bind = input.currentIntent;
28
- const trimmedContext = input.context?.trim() ?? "";
29
- const extensionsBlock = bind.extensions.length > 0
30
- ? `Extensions:\n${bind.extensions.map((extension) => `## ${extension.title}\n${extension.content}`).join("\n\n")}`
31
- : "";
32
- return [
33
- `You are a called ${ACTOR_IDENTITY} working inside derived default arc a0.`,
34
- "Stay within the contract scope and do the requested work directly.",
35
- `Contract: ${bind.title}`,
36
- `Context:\n${bind.context}`,
37
- `Objective:\n${bind.objective}`,
38
- `Design:\n${bind.design}`,
39
- `Scope:\n${bind.scope.map((value) => `- ${value}`).join("\n")}`,
40
- `Criteria:\n${bind.criteria.map((value) => `- ${value}`).join("\n")}`,
41
- `Verification:\n${bind.verification.map((value) => `- ${value}`).join("\n")}`,
42
- extensionsBlock,
43
- COMMISSIONED_DELIVERY_BOUNDARY,
44
- `Task:\n${input.task}`,
45
- trimmedContext ? `Context:\n${trimmedContext}` : "",
46
- references.length > 0 ? `Reference files:\n${references.map((file) => `- ${file}`).join("\n")}` : "",
47
- "Provide the final result for the caller/main agent.",
48
15
  ].filter(Boolean).join("\n\n");
49
16
  }
50
17
  return [
51
- input.task,
52
- input.context?.trim() ?? "",
53
- input.commissioned ? COMMISSIONED_DELIVERY_BOUNDARY : "",
18
+ `You are a called ${ACTOR_IDENTITY} working in the commissioned contract worktree.`,
19
+ input.worktree ? `Worktree: ${input.worktree}` : "",
20
+ "Before work, read .keiyaku/KEIYAKU.md. It is the sole contract body for this dispatch.",
21
+ COMMISSIONED_DELIVERY_BOUNDARY,
22
+ `Task:\n${input.task}`,
23
+ input.context?.trim() ? `Context:\n${input.context.trim()}` : "",
54
24
  references.length > 0 ? `Reference files:\n${references.map((file) => `- ${file}`).join("\n")}` : "",
55
- ]
56
- .filter(Boolean)
57
- .join("\n\n");
25
+ "Provide the final result for the caller/main agent.",
26
+ ].filter(Boolean).join("\n\n");
58
27
  }