@calliopelabs/cli 3.5.4 → 3.6.0

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 (291) hide show
  1. package/README.md +8 -0
  2. package/dist/acp.d.ts +10 -3
  3. package/dist/acp.d.ts.map +1 -1
  4. package/dist/acp.js +27 -7
  5. package/dist/acp.js.map +1 -1
  6. package/dist/bin.d.ts.map +1 -1
  7. package/dist/bin.js +28 -8
  8. package/dist/bin.js.map +1 -1
  9. package/dist/execution/authority.d.ts +4 -1
  10. package/dist/execution/authority.d.ts.map +1 -1
  11. package/dist/execution/authority.js +23 -7
  12. package/dist/execution/authority.js.map +1 -1
  13. package/dist/execution/child-grants.d.ts +2 -0
  14. package/dist/execution/child-grants.d.ts.map +1 -1
  15. package/dist/execution/child-grants.js +19 -4
  16. package/dist/execution/child-grants.js.map +1 -1
  17. package/dist/execution/delegated.d.ts +14 -0
  18. package/dist/execution/delegated.d.ts.map +1 -0
  19. package/dist/execution/delegated.js +66 -0
  20. package/dist/execution/delegated.js.map +1 -0
  21. package/dist/execution/files.js +6 -6
  22. package/dist/execution/files.js.map +1 -1
  23. package/dist/execution/guard.d.ts +5 -0
  24. package/dist/execution/guard.d.ts.map +1 -1
  25. package/dist/execution/guard.js +31 -16
  26. package/dist/execution/guard.js.map +1 -1
  27. package/dist/execution/index.d.ts +4 -0
  28. package/dist/execution/index.d.ts.map +1 -1
  29. package/dist/execution/index.js +4 -0
  30. package/dist/execution/index.js.map +1 -1
  31. package/dist/execution/ledger-cli.d.ts +2 -1
  32. package/dist/execution/ledger-cli.d.ts.map +1 -1
  33. package/dist/execution/ledger-cli.js +51 -14
  34. package/dist/execution/ledger-cli.js.map +1 -1
  35. package/dist/execution/ledger-protocol.d.ts +6 -2
  36. package/dist/execution/ledger-protocol.d.ts.map +1 -1
  37. package/dist/execution/ledger-protocol.js +110 -24
  38. package/dist/execution/ledger-protocol.js.map +1 -1
  39. package/dist/execution/ledger-server.d.ts +13 -0
  40. package/dist/execution/ledger-server.d.ts.map +1 -1
  41. package/dist/execution/ledger-server.js +57 -13
  42. package/dist/execution/ledger-server.js.map +1 -1
  43. package/dist/execution/ledger-tunnel.d.ts +50 -0
  44. package/dist/execution/ledger-tunnel.d.ts.map +1 -0
  45. package/dist/execution/ledger-tunnel.js +307 -0
  46. package/dist/execution/ledger-tunnel.js.map +1 -0
  47. package/dist/execution/ledger.d.ts +4 -0
  48. package/dist/execution/ledger.d.ts.map +1 -1
  49. package/dist/execution/ledger.js +30 -4
  50. package/dist/execution/ledger.js.map +1 -1
  51. package/dist/execution/parent-accounting.d.ts +41 -0
  52. package/dist/execution/parent-accounting.d.ts.map +1 -0
  53. package/dist/execution/parent-accounting.js +52 -0
  54. package/dist/execution/parent-accounting.js.map +1 -0
  55. package/dist/execution/parent-budget.d.ts +25 -0
  56. package/dist/execution/parent-budget.d.ts.map +1 -0
  57. package/dist/execution/parent-budget.js +102 -0
  58. package/dist/execution/parent-budget.js.map +1 -0
  59. package/dist/execution/project-spend.d.ts.map +1 -1
  60. package/dist/execution/project-spend.js +35 -5
  61. package/dist/execution/project-spend.js.map +1 -1
  62. package/dist/execution/remote-checkpoint.d.ts +15 -0
  63. package/dist/execution/remote-checkpoint.d.ts.map +1 -0
  64. package/dist/execution/remote-checkpoint.js +165 -0
  65. package/dist/execution/remote-checkpoint.js.map +1 -0
  66. package/dist/execution/remote-ledger.d.ts +12 -2
  67. package/dist/execution/remote-ledger.d.ts.map +1 -1
  68. package/dist/execution/remote-ledger.js +53 -21
  69. package/dist/execution/remote-ledger.js.map +1 -1
  70. package/dist/execution/types.d.ts +23 -5
  71. package/dist/execution/types.d.ts.map +1 -1
  72. package/dist/execution/types.js.map +1 -1
  73. package/dist/goals/supervised.js +2 -2
  74. package/dist/goals/supervised.js.map +1 -1
  75. package/dist/headless.d.ts +2 -6
  76. package/dist/headless.d.ts.map +1 -1
  77. package/dist/headless.js +17 -21
  78. package/dist/headless.js.map +1 -1
  79. package/dist/improvement/actions.d.ts +3 -4
  80. package/dist/improvement/actions.d.ts.map +1 -1
  81. package/dist/improvement/actions.js +10 -7
  82. package/dist/improvement/actions.js.map +1 -1
  83. package/dist/improvement/capabilities.d.ts +54 -0
  84. package/dist/improvement/capabilities.d.ts.map +1 -0
  85. package/dist/improvement/capabilities.js +44 -0
  86. package/dist/improvement/capabilities.js.map +1 -0
  87. package/dist/improvement/cli.d.ts +1 -1
  88. package/dist/improvement/cli.d.ts.map +1 -1
  89. package/dist/improvement/cli.js +14 -2
  90. package/dist/improvement/cli.js.map +1 -1
  91. package/dist/improvement/index.d.ts +5 -0
  92. package/dist/improvement/index.d.ts.map +1 -1
  93. package/dist/improvement/index.js +5 -0
  94. package/dist/improvement/index.js.map +1 -1
  95. package/dist/improvement/proposal-hash.d.ts +3 -0
  96. package/dist/improvement/proposal-hash.d.ts.map +1 -0
  97. package/dist/improvement/proposal-hash.js +5 -0
  98. package/dist/improvement/proposal-hash.js.map +1 -0
  99. package/dist/improvement/review-contract.d.ts +32 -0
  100. package/dist/improvement/review-contract.d.ts.map +1 -0
  101. package/dist/improvement/review-contract.js +62 -0
  102. package/dist/improvement/review-contract.js.map +1 -0
  103. package/dist/improvement/review-requests.d.ts +72 -0
  104. package/dist/improvement/review-requests.d.ts.map +1 -0
  105. package/dist/improvement/review-requests.js +63 -0
  106. package/dist/improvement/review-requests.js.map +1 -0
  107. package/dist/improvement/source-changes.d.ts +78 -0
  108. package/dist/improvement/source-changes.d.ts.map +1 -0
  109. package/dist/improvement/source-changes.js +91 -0
  110. package/dist/improvement/source-changes.js.map +1 -0
  111. package/dist/improvement/task-outcomes.d.ts +82 -0
  112. package/dist/improvement/task-outcomes.d.ts.map +1 -0
  113. package/dist/improvement/task-outcomes.js +72 -0
  114. package/dist/improvement/task-outcomes.js.map +1 -0
  115. package/dist/index.d.ts +10 -0
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +6 -0
  118. package/dist/index.js.map +1 -1
  119. package/dist/isolation/contracts.d.ts +13 -0
  120. package/dist/isolation/contracts.d.ts.map +1 -1
  121. package/dist/isolation/contracts.js +9 -1
  122. package/dist/isolation/contracts.js.map +1 -1
  123. package/dist/isolation/coordinator.d.ts.map +1 -1
  124. package/dist/isolation/coordinator.js +4 -0
  125. package/dist/isolation/coordinator.js.map +1 -1
  126. package/dist/isolation/process.d.ts.map +1 -1
  127. package/dist/isolation/process.js +3 -1
  128. package/dist/isolation/process.js.map +1 -1
  129. package/dist/isolation/worktree.d.ts +9 -1
  130. package/dist/isolation/worktree.d.ts.map +1 -1
  131. package/dist/isolation/worktree.js +8 -3
  132. package/dist/isolation/worktree.js.map +1 -1
  133. package/dist/memory.d.ts +5 -3
  134. package/dist/memory.d.ts.map +1 -1
  135. package/dist/memory.js +8 -6
  136. package/dist/memory.js.map +1 -1
  137. package/dist/migration/assessment-contract.d.ts +60 -0
  138. package/dist/migration/assessment-contract.d.ts.map +1 -0
  139. package/dist/migration/assessment-contract.js +132 -0
  140. package/dist/migration/assessment-contract.js.map +1 -0
  141. package/dist/migration/assessment-schema.d.ts +19 -0
  142. package/dist/migration/assessment-schema.d.ts.map +1 -0
  143. package/dist/migration/assessment-schema.js +43 -0
  144. package/dist/migration/assessment-schema.js.map +1 -0
  145. package/dist/migration/assessment.d.ts +159 -0
  146. package/dist/migration/assessment.d.ts.map +1 -0
  147. package/dist/migration/assessment.js +219 -0
  148. package/dist/migration/assessment.js.map +1 -0
  149. package/dist/migration/cli.d.ts +6 -0
  150. package/dist/migration/cli.d.ts.map +1 -0
  151. package/dist/migration/cli.js +101 -0
  152. package/dist/migration/cli.js.map +1 -0
  153. package/dist/migration/evidence.d.ts +27 -0
  154. package/dist/migration/evidence.d.ts.map +1 -0
  155. package/dist/migration/evidence.js +124 -0
  156. package/dist/migration/evidence.js.map +1 -0
  157. package/dist/migration/example.d.ts +33 -0
  158. package/dist/migration/example.d.ts.map +1 -0
  159. package/dist/migration/example.js +28 -0
  160. package/dist/migration/example.js.map +1 -0
  161. package/dist/migration/index.d.ts +21 -0
  162. package/dist/migration/index.d.ts.map +1 -0
  163. package/dist/migration/index.js +15 -0
  164. package/dist/migration/index.js.map +1 -0
  165. package/dist/migration/inventory.d.ts +70 -0
  166. package/dist/migration/inventory.d.ts.map +1 -0
  167. package/dist/migration/inventory.js +233 -0
  168. package/dist/migration/inventory.js.map +1 -0
  169. package/dist/migration/schema.d.ts +61 -0
  170. package/dist/migration/schema.d.ts.map +1 -0
  171. package/dist/migration/schema.js +76 -0
  172. package/dist/migration/schema.js.map +1 -0
  173. package/dist/migration/verification.d.ts +146 -0
  174. package/dist/migration/verification.d.ts.map +1 -0
  175. package/dist/migration/verification.js +260 -0
  176. package/dist/migration/verification.js.map +1 -0
  177. package/dist/orchestration/actions.d.ts +2 -0
  178. package/dist/orchestration/actions.d.ts.map +1 -1
  179. package/dist/orchestration/actions.js.map +1 -1
  180. package/dist/orchestration/artifact-host.d.ts +46 -0
  181. package/dist/orchestration/artifact-host.d.ts.map +1 -0
  182. package/dist/orchestration/artifact-host.js +64 -0
  183. package/dist/orchestration/artifact-host.js.map +1 -0
  184. package/dist/orchestration/coordinator-actions.d.ts +1 -1
  185. package/dist/orchestration/coordinator-actions.d.ts.map +1 -1
  186. package/dist/orchestration/coordinator-actions.js +5 -3
  187. package/dist/orchestration/coordinator-actions.js.map +1 -1
  188. package/dist/orchestration/coordinator-types.d.ts +23 -2
  189. package/dist/orchestration/coordinator-types.d.ts.map +1 -1
  190. package/dist/orchestration/coordinator.d.ts +5 -0
  191. package/dist/orchestration/coordinator.d.ts.map +1 -1
  192. package/dist/orchestration/coordinator.js +30 -13
  193. package/dist/orchestration/coordinator.js.map +1 -1
  194. package/dist/orchestration/execution-cli.d.ts +1 -1
  195. package/dist/orchestration/execution-cli.d.ts.map +1 -1
  196. package/dist/orchestration/execution-cli.js +29 -6
  197. package/dist/orchestration/execution-cli.js.map +1 -1
  198. package/dist/orchestration/execution-journal.d.ts.map +1 -1
  199. package/dist/orchestration/execution-journal.js +79 -6
  200. package/dist/orchestration/execution-journal.js.map +1 -1
  201. package/dist/orchestration/execution-store.d.ts +5 -1
  202. package/dist/orchestration/execution-store.d.ts.map +1 -1
  203. package/dist/orchestration/execution-store.js +66 -5
  204. package/dist/orchestration/execution-store.js.map +1 -1
  205. package/dist/orchestration/execution.d.ts.map +1 -1
  206. package/dist/orchestration/execution.js +37 -10
  207. package/dist/orchestration/execution.js.map +1 -1
  208. package/dist/orchestration/index.d.ts +6 -0
  209. package/dist/orchestration/index.d.ts.map +1 -1
  210. package/dist/orchestration/index.js +6 -0
  211. package/dist/orchestration/index.js.map +1 -1
  212. package/dist/orchestration/interruption.d.ts +10 -0
  213. package/dist/orchestration/interruption.d.ts.map +1 -0
  214. package/dist/orchestration/interruption.js +38 -0
  215. package/dist/orchestration/interruption.js.map +1 -0
  216. package/dist/orchestration/question-contract.d.ts +19 -0
  217. package/dist/orchestration/question-contract.d.ts.map +1 -0
  218. package/dist/orchestration/question-contract.js +21 -0
  219. package/dist/orchestration/question-contract.js.map +1 -0
  220. package/dist/orchestration/questions.d.ts +9 -0
  221. package/dist/orchestration/questions.d.ts.map +1 -0
  222. package/dist/orchestration/questions.js +75 -0
  223. package/dist/orchestration/questions.js.map +1 -0
  224. package/dist/orchestration/reviewed-ledger.d.ts +23 -0
  225. package/dist/orchestration/reviewed-ledger.d.ts.map +1 -0
  226. package/dist/orchestration/reviewed-ledger.js +49 -0
  227. package/dist/orchestration/reviewed-ledger.js.map +1 -0
  228. package/dist/orchestration/source-candidates.d.ts +64 -0
  229. package/dist/orchestration/source-candidates.d.ts.map +1 -0
  230. package/dist/orchestration/source-candidates.js +95 -0
  231. package/dist/orchestration/source-candidates.js.map +1 -0
  232. package/dist/orchestration/validation.js +1 -1
  233. package/dist/orchestration/validation.js.map +1 -1
  234. package/dist/runlog.js +2 -2
  235. package/dist/runlog.js.map +1 -1
  236. package/dist/runtime/permissions.d.ts.map +1 -1
  237. package/dist/runtime/permissions.js +3 -2
  238. package/dist/runtime/permissions.js.map +1 -1
  239. package/dist/runtime/turn.d.ts +2 -0
  240. package/dist/runtime/turn.d.ts.map +1 -1
  241. package/dist/runtime/turn.js +21 -7
  242. package/dist/runtime/turn.js.map +1 -1
  243. package/dist/session-management/actions.js +1 -1
  244. package/dist/session-management/actions.js.map +1 -1
  245. package/dist/sessions/execution-binding.d.ts +8 -0
  246. package/dist/sessions/execution-binding.d.ts.map +1 -0
  247. package/dist/sessions/execution-binding.js +9 -0
  248. package/dist/sessions/execution-binding.js.map +1 -0
  249. package/dist/sessions/index.d.ts +1 -0
  250. package/dist/sessions/index.d.ts.map +1 -1
  251. package/dist/sessions/index.js +1 -0
  252. package/dist/sessions/index.js.map +1 -1
  253. package/dist/source-changes/writer.d.ts +77 -0
  254. package/dist/source-changes/writer.d.ts.map +1 -0
  255. package/dist/source-changes/writer.js +189 -0
  256. package/dist/source-changes/writer.js.map +1 -0
  257. package/dist/spawning/actions.d.ts +10 -1
  258. package/dist/spawning/actions.d.ts.map +1 -1
  259. package/dist/spawning/actions.js +26 -7
  260. package/dist/spawning/actions.js.map +1 -1
  261. package/dist/spawning/cli.js +1 -1
  262. package/dist/spawning/cli.js.map +1 -1
  263. package/dist/spawning/execution.d.ts.map +1 -1
  264. package/dist/spawning/execution.js +2 -0
  265. package/dist/spawning/execution.js.map +1 -1
  266. package/dist/spawning/types.d.ts +19 -6
  267. package/dist/spawning/types.d.ts.map +1 -1
  268. package/dist/spawning/validation.d.ts +16 -0
  269. package/dist/spawning/validation.d.ts.map +1 -1
  270. package/dist/spawning/validation.js +44 -8
  271. package/dist/spawning/validation.js.map +1 -1
  272. package/dist/storage.d.ts +3 -0
  273. package/dist/storage.d.ts.map +1 -1
  274. package/dist/storage.js +6 -1
  275. package/dist/storage.js.map +1 -1
  276. package/dist/supervision/contracts.js +4 -1
  277. package/dist/supervision/contracts.js.map +1 -1
  278. package/dist/tools.d.ts +1 -0
  279. package/dist/tools.d.ts.map +1 -1
  280. package/dist/tools.js +5 -0
  281. package/dist/tools.js.map +1 -1
  282. package/docs/README.md +66 -0
  283. package/docs/delegation-ledger.md +329 -0
  284. package/docs/migration-assessment.md +113 -0
  285. package/docs/migration-example-plan.json +88 -0
  286. package/docs/migration-example-report.json +511 -0
  287. package/docs/migration-inventory.md +63 -0
  288. package/docs/migration-playbook.md +152 -0
  289. package/docs/migration-verification.md +177 -0
  290. package/docs/releases/3.6.0.md +43 -0
  291. package/package.json +7 -2
@@ -0,0 +1,41 @@
1
+ import type { ExecutionManifest } from './types.js';
2
+ export interface ParentAccountBalance {
3
+ runId: string;
4
+ agentId: string;
5
+ manifestHash: string;
6
+ revision: string;
7
+ deadline: number;
8
+ authority: 'active' | 'inactive' | 'expired' | 'exceeded';
9
+ tokens: {
10
+ limit: number;
11
+ accounted: number;
12
+ remaining: number;
13
+ };
14
+ costNanos: {
15
+ limit: number;
16
+ accounted: number;
17
+ remaining: number;
18
+ };
19
+ requests: {
20
+ pending: number;
21
+ settled: number;
22
+ unknown: number;
23
+ exceeded: number;
24
+ };
25
+ }
26
+ export type ParentBudgetAccounting = {
27
+ version: 1;
28
+ status: 'unlinked';
29
+ } | {
30
+ version: 1;
31
+ status: 'available';
32
+ basis: 'reservations-and-settlements';
33
+ parents: ParentAccountBalance[];
34
+ } | {
35
+ version: 1;
36
+ status: 'unavailable';
37
+ };
38
+ /** Read-only account balances, never an admission promise or a sum of expenses.
39
+ * A request must still fit every run/account, grant allocation and provider quote. */
40
+ export declare function readParentBudgetAccounting(input: ExecutionManifest, cwd: string, signal?: AbortSignal): Promise<ParentBudgetAccounting>;
41
+ //# sourceMappingURL=parent-accounting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parent-accounting.d.ts","sourceRoot":"","sources":["../../src/execution/parent-accounting.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAC,MAAM,CAAC;IAAA,OAAO,EAAC,MAAM,CAAC;IAAA,YAAY,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAChF,SAAS,EAAC,QAAQ,GAAC,UAAU,GAAC,SAAS,GAAC,UAAU,CAAC;IACnD,MAAM,EAAC;QAAC,KAAK,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAA;KAAC,CAAC;IACxD,SAAS,EAAC;QAAC,KAAK,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAA;KAAC,CAAC;IAC3D,QAAQ,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAC;QAAA,QAAQ,EAAC,MAAM,CAAA;KAAC,CAAC;CACzE;AACD,MAAM,MAAM,sBAAsB,GAAG;IAAC,OAAO,EAAC,CAAC,CAAC;IAAA,MAAM,EAAC,UAAU,CAAA;CAAC,GAC/D;IAAC,OAAO,EAAC,CAAC,CAAC;IAAA,MAAM,EAAC,WAAW,CAAC;IAAA,KAAK,EAAC,8BAA8B,CAAC;IAAA,OAAO,EAAC,oBAAoB,EAAE,CAAA;CAAC,GAClG;IAAC,OAAO,EAAC,CAAC,CAAC;IAAA,MAAM,EAAC,aAAa,CAAA;CAAC,CAAC;AAEpC;sFACsF;AACtF,wBAAsB,0BAA0B,CAAC,KAAK,EAAC,iBAAiB,EAAC,GAAG,EAAC,MAAM,EAAC,MAAM,CAAC,EAAC,WAAW,GAAE,OAAO,CAAC,sBAAsB,CAAC,CAgCvI"}
@@ -0,0 +1,52 @@
1
+ import { accountLineage, validateExecutionManifest } from './authority.js';
2
+ import { effectiveExecutionManifest } from './child-grants.js';
3
+ import { parentBudgetAuthority } from './parent-budget.js';
4
+ /** Read-only account balances, never an admission promise or a sum of expenses.
5
+ * A request must still fit every run/account, grant allocation and provider quote. */
6
+ export async function readParentBudgetAccounting(input, cwd, signal) {
7
+ try {
8
+ let child = validateExecutionManifest(input);
9
+ if (!child.parent)
10
+ return { version: 1, status: 'unlinked' };
11
+ const parents = [], checks = [];
12
+ // The native authority reader validates the whole bounded, acyclic lineage.
13
+ while (child.parent) {
14
+ const authority = await parentBudgetAuthority(child, cwd, false, signal);
15
+ const saved = authority.ledger.read(cwd), manifest = effectiveExecutionManifest(saved.manifest, saved.projection);
16
+ const selected = child.parent.agentId, account = accountLineage(manifest, selected)[0], spent = saved.projection.accounts[selected];
17
+ let state = 'active';
18
+ try {
19
+ await parentBudgetAuthority(child, cwd, true, signal);
20
+ }
21
+ catch (error) {
22
+ const code = error.code;
23
+ if (code === 'authority' || code === 'policy-denied')
24
+ state = 'inactive';
25
+ else if (code === 'deadline')
26
+ state = 'expired';
27
+ else if (code === 'budget')
28
+ state = 'exceeded';
29
+ else
30
+ throw error;
31
+ }
32
+ const balance = (limit, accounted) => ({ limit, accounted, remaining: Math.max(0, limit - accounted) });
33
+ const requests = { pending: 0, settled: 0, unknown: 0, exceeded: 0 };
34
+ for (const entry of Object.values(saved.projection.requests)) {
35
+ if (accountLineage(manifest, entry.reservation.agentId).some(a => a.id === selected))
36
+ requests[entry.state]++;
37
+ }
38
+ parents.push({ runId: manifest.runId, agentId: selected, manifestHash: saved.projection.manifestHash, revision: saved.projection.revision,
39
+ deadline: account.deadline, authority: state, tokens: balance(account.tokenBudget, spent.tokens),
40
+ costNanos: balance(account.costBudgetNanos, spent.costNanos), requests });
41
+ checks.push(() => authority.ledger.read(cwd).projection.revision === saved.projection.revision);
42
+ child = saved.manifest;
43
+ }
44
+ if (!checks.every(check => check()))
45
+ return { version: 1, status: 'unavailable' };
46
+ return { version: 1, status: 'available', basis: 'reservations-and-settlements', parents };
47
+ }
48
+ catch {
49
+ return { version: 1, status: 'unavailable' };
50
+ }
51
+ }
52
+ //# sourceMappingURL=parent-accounting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parent-accounting.js","sourceRoot":"","sources":["../../src/execution/parent-accounting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { ReservationLedger } from './ledger.js';
2
+ import { type ExecutionManifest, type RequestReservation, type RequestSettlement } from './types.js';
3
+ export declare const parentBudgetCapabilities: () => {
4
+ version: 1;
5
+ manifestVersion: 2;
6
+ owner: 'calliope-cli';
7
+ semantics: 'charge-native-parent-before-child';
8
+ maxLinks: number;
9
+ placement: 'same-project-local';
10
+ };
11
+ /** Deterministic per-child identity lets an interrupted admission reconcile its
12
+ * existing parent charge; identical caller UUIDs in sibling runs cannot collide. */
13
+ export declare function parentRequestId(child: ExecutionManifest, requestId: string): string;
14
+ export interface ParentBudgetAuthority {
15
+ ledger: ReservationLedger;
16
+ hash: string;
17
+ assertActive: () => void;
18
+ reservation: (request: RequestReservation) => RequestReservation;
19
+ settlement: (settlement: RequestSettlement) => RequestSettlement;
20
+ }
21
+ export declare function parentBudgetAuthority(input: ExecutionManifest, cwd: string, admission?: boolean, signal?: AbortSignal, seen?: string[]): Promise<ParentBudgetAuthority | undefined>;
22
+ /** Only an identical recorded reservation can recover an interrupted parent admission. */
23
+ export declare function reserveParent(authority: NonNullable<Awaited<ReturnType<typeof parentBudgetAuthority>>>, cwd: string, request: RequestReservation, signal?: AbortSignal, beforeCommit?: () => void): Promise<void>;
24
+ export declare function settleParent(authority: NonNullable<Awaited<ReturnType<typeof parentBudgetAuthority>>>, cwd: string, settlement: RequestSettlement): Promise<void>;
25
+ //# sourceMappingURL=parent-budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parent-budget.d.ts","sourceRoot":"","sources":["../../src/execution/parent-budget.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,iBAAiB,EAAC,MAAM,aAAa,CAAC;AAG9C,OAAO,EAAqB,KAAK,iBAAiB,EAAC,KAAK,kBAAkB,EAAC,KAAK,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAGrH,eAAO,MAAM,wBAAwB;IAAO,OAAO,EAAC,CAAC;IAAU,eAAe,EAAC,CAAC;IAAU,KAAK,EAAC,cAAc;IAAU,SAAS,EAAC,mCAAmC;IAAU,QAAQ;IAAG,SAAS,EAAC,oBAAoB;CAAW,CAAC;AACpO;oFACoF;AACpF,wBAAgB,eAAe,CAAC,KAAK,EAAC,iBAAiB,EAAC,SAAS,EAAC,MAAM,GAAE,MAAM,CAI/E;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAC,iBAAiB,CAAC;IAAA,IAAI,EAAC,MAAM,CAAC;IAAA,YAAY,EAAC,MAAI,IAAI,CAAC;IAC3D,WAAW,EAAC,CAAC,OAAO,EAAC,kBAAkB,KAAG,kBAAkB,CAAC;IAC7D,UAAU,EAAC,CAAC,UAAU,EAAC,iBAAiB,KAAG,iBAAiB,CAAC;CAC9D;AACD,wBAAsB,qBAAqB,CAAC,KAAK,EAAC,iBAAiB,EAAC,GAAG,EAAC,MAAM,EAAC,SAAS,UAAK,EAAC,MAAM,CAAC,EAAC,WAAW,EAAC,IAAI,GAAC,MAAM,EAAK,GAAE,OAAO,CAAC,qBAAqB,GAAC,SAAS,CAAC,CAmC3K;AAED,0FAA0F;AAC1F,wBAAsB,aAAa,CAAC,SAAS,EAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,EAAC,GAAG,EAAC,MAAM,EAAC,OAAO,EAAC,kBAAkB,EAAC,MAAM,CAAC,EAAC,WAAW,EAAC,YAAY,CAAC,EAAC,MAAI,IAAI,GAAE,OAAO,CAAC,IAAI,CAAC,CAQ3M;AAED,wBAAsB,YAAY,CAAC,SAAS,EAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,EAAC,GAAG,EAAC,MAAM,EAAC,UAAU,EAAC,iBAAiB,GAAE,OAAO,CAAC,IAAI,CAAC,CAUjK"}
@@ -0,0 +1,102 @@
1
+ /** A native run may draw from another reviewed run's account. No synthetic usage or
2
+ * second accounting store: the same provider request is reserved in both ledgers. */
3
+ import { join } from 'node:path';
4
+ import { createHash } from 'node:crypto';
5
+ import { canonicalJson } from '../approvals/index.js';
6
+ import { throwIfCancelled } from '../cancellation.js';
7
+ import { ReservationLedger } from './ledger.js';
8
+ import { accountLineage, assertExecutionStoreOutsideProject, manifestHash, permits, validateExecutionManifest } from './authority.js';
9
+ import { effectiveExecutionManifest } from './child-grants.js';
10
+ import { ExecutionLimitError } from './types.js';
11
+ const denied = (message) => new ExecutionLimitError('authority', message);
12
+ export const parentBudgetCapabilities = () => ({ version: 1, manifestVersion: 2, owner: 'calliope-cli', semantics: 'charge-native-parent-before-child', maxLinks: 8, placement: 'same-project-local' });
13
+ /** Deterministic per-child identity lets an interrupted admission reconcile its
14
+ * existing parent charge; identical caller UUIDs in sibling runs cannot collide. */
15
+ export function parentRequestId(child, requestId) {
16
+ const bytes = createHash('sha256').update(canonicalJson({ child: manifestHash(child), requestId })).digest().subarray(0, 16);
17
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
18
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
19
+ const h = bytes.toString('hex');
20
+ return `${h.slice(0, 8)}-${h.slice(8, 12)}-${h.slice(12, 16)}-${h.slice(16, 20)}-${h.slice(20)}`;
21
+ }
22
+ export async function parentBudgetAuthority(input, cwd, admission = true, signal, seen = []) {
23
+ const child = validateExecutionManifest(input), link = child.parent;
24
+ if (!link)
25
+ return undefined;
26
+ throwIfCancelled(signal);
27
+ if (seen.includes(child.runId) || seen.length >= 8 || link.runId === child.runId)
28
+ throw denied('Parent budget lineage is cyclic or exceeds eight links.');
29
+ assertExecutionStoreOutsideProject(child.project.root, link.runsRoot);
30
+ const { RunStore } = await import('../orchestration/store.js');
31
+ const { ExecutionStore } = await import('../orchestration/execution-store.js');
32
+ const { inspectSpawnAuthority } = await import('../spawning/authority.js');
33
+ const { agentStopped } = await import('../orchestration/execution-journal.js');
34
+ const runs = new RunStore(link.runsRoot), view = await runs.read(link.runId, cwd, signal);
35
+ if (view.manifest.hash !== link.runManifestHash || !view.events.some(event => event.id === link.approvalRevision && event.change.type === 'approved'))
36
+ throw denied('Parent budget does not match its reviewed native run.');
37
+ const ledger = new ReservationLedger(join(runs.root, link.runId, 'budget')), saved = ledger.read(cwd);
38
+ if (saved.projection.manifestHash !== link.budgetManifestHash || saved.manifest.runId !== link.runId || saved.manifest.planHash !== view.manifest.planHash)
39
+ throw denied('Parent budget identity changed.');
40
+ const parent = effectiveExecutionManifest(saved.manifest, saved.projection), account = accountLineage(parent, link.agentId)[0];
41
+ if (child.project.key !== parent.project.key || child.project.root !== parent.project.root || child.tokenBudget > account.tokenBudget || child.costBudgetNanos > account.costBudgetNanos || child.deadline > account.deadline || child.accounts.some(a => a.allowedTools.some(tool => !account.allowedTools.includes(tool)) || a.allowedPaths.some(path => !permits(account.allowedPaths, path.path, path.access))))
42
+ throw denied('Child budget, clock or scope exceeds its parent account.');
43
+ const store = new ExecutionStore(join(runs.root, link.runId), view.manifest);
44
+ // Reconcile settled work even after cancellation; never require fresh execution authority to record usage.
45
+ const goal = admission ? (await import('../goals/index.js')).goalRunAuthority(view.manifest, runs.root) : undefined;
46
+ const ancestor = await parentBudgetAuthority(saved.manifest, cwd, admission, signal, [...seen, child.runId]);
47
+ const assertActive = () => {
48
+ throwIfCancelled(signal);
49
+ store.assertApproval({ approvalRevision: link.approvalRevision });
50
+ goal?.assertActive();
51
+ ancestor?.assertActive();
52
+ const current = ledger.read(cwd);
53
+ if (current.projection.manifestHash !== link.budgetManifestHash)
54
+ throw denied('Parent budget identity changed.');
55
+ if (current.projection.exceeded)
56
+ throw new ExecutionLimitError('budget', 'Parent usage exceeded its reservation; further admission is stopped.');
57
+ if (Date.now() >= account.deadline)
58
+ throw new ExecutionLimitError('deadline', 'Parent allowance expired.');
59
+ if (store.exists()) {
60
+ const authority = inspectSpawnAuthority(store, ledger);
61
+ store.assertApproval(authority.view.header);
62
+ if (authority.view.state.status === 'completed' || !authority.context.plan.agents.some(agent => agent.id === link.agentId) || agentStopped(authority.view.state, authority.context, link.agentId))
63
+ throw denied('Parent account is completed, stopped or not admitted.');
64
+ }
65
+ else if (!view.manifest.plan.agents.some(agent => agent.id === link.agentId))
66
+ throw denied('Parent account is not admitted to the native plan.');
67
+ };
68
+ if (admission)
69
+ assertActive();
70
+ return { ledger, hash: link.budgetManifestHash, assertActive,
71
+ reservation: (request) => {
72
+ return { ...request, id: parentRequestId(child, request.id), agentId: link.agentId };
73
+ },
74
+ settlement: (settlement) => ({ ...settlement, requestId: parentRequestId(child, settlement.requestId) }) };
75
+ }
76
+ /** Only an identical recorded reservation can recover an interrupted parent admission. */
77
+ export async function reserveParent(authority, cwd, request, signal, beforeCommit) {
78
+ const check = () => { authority.assertActive(); beforeCommit?.(); };
79
+ check();
80
+ const existing = authority.ledger.read(cwd).projection.requests[request.id];
81
+ if (existing) {
82
+ if (existing.state !== 'pending' || canonicalJson(existing.reservation) !== canonicalJson(request))
83
+ throw denied('Parent reservation was settled or belongs to another request.');
84
+ return;
85
+ }
86
+ await authority.ledger.reserve(cwd, authority.hash, request, signal, check);
87
+ check();
88
+ }
89
+ export async function settleParent(authority, cwd, settlement) {
90
+ const saved = authority.ledger.read(cwd), entry = saved.projection.requests[settlement.requestId];
91
+ if (entry && entry.state !== 'pending') {
92
+ const event = saved.events.find(event => event.change.type === 'settle' && event.change.settlement.requestId === settlement.requestId);
93
+ if (!event || event.change.type !== 'settle' || canonicalJson(event.change.settlement) !== canonicalJson(settlement))
94
+ throw denied('Parent request was settled with different usage.');
95
+ // A linked parent may itself have an interrupted settlement to reconcile.
96
+ if (saved.manifest.parent)
97
+ await authority.ledger.settle(cwd, authority.hash, settlement);
98
+ return;
99
+ }
100
+ await authority.ledger.settle(cwd, authority.hash, settlement);
101
+ }
102
+ //# sourceMappingURL=parent-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parent-budget.js","sourceRoot":"","sources":["../../src/execution/parent-budget.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"project-spend.d.ts","sourceRoot":"","sources":["../../src/execution/project-spend.ts"],"names":[],"mappings":"AASA,KAAK,MAAM,GAAC;IAAC,IAAI,EAAC,QAAQ,GAAC,QAAQ,CAAC;IAAA,SAAS,EAAC,MAAM,CAAA;CAAC,GAAC;IAAC,IAAI,EAAC,SAAS,CAAC;IAAA,SAAS,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAA;CAAC,GAAC;IAAC,IAAI,EAAC,QAAQ,CAAC;IAAA,SAAS,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,MAAM,GAAC,IAAI,CAAC;IAAA,OAAO,CAAC,EAAC,IAAI,CAAA;CAAC,GAAC;IAAC,IAAI,EAAC,OAAO,CAAA;CAAC,CAAC;AAC1N,UAAU,KAAK;IAAE,OAAO,EAAC,CAAC,CAAC;IAAA,EAAE,EAAC,MAAM,CAAC;IAAA,EAAE,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,GAAC,IAAI,CAAC;IAAA,MAAM,EAAC,MAAM,CAAC;IAAA,IAAI,EAAC,MAAM,CAAA;CAAC;AAI9F,wBAAgB,cAAc,CAAC,KAAK,EAAC,MAAM,GAAE,MAAM,CAAwG;AAkD3J,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,IAAI,EAAC,MAAM,CAAC;IACrB,YAAY,IAAI,EAAC,MAAM,EAA2B;IAClD,IAAI,IAAG;QAAC,QAAQ,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,OAAO,CAAC;QAAA,MAAM,EAAC,KAAK,EAAE,CAAA;KAAC,CAIvE;IACK,OAAO,CAAC,SAAS,EAAC,MAAM,EAAC,KAAK,EAAC,MAAM,EAAC,SAAS,EAAC,MAAM,EAAC,QAAQ,EAAC,MAAM,EAAC,MAAM,CAAC,EAAC,WAAW,GAAE,OAAO,CAAC,IAAI,CAAC,CAAqF;IAC9L,MAAM,CAAC,SAAS,EAAC,MAAM,EAAC,SAAS,EAAC,MAAM,GAAC,IAAI,EAAC,OAAO,UAAM,GAAE,OAAO,CAAC,IAAI,CAAC,CAAsG;IACtL,MAAM,CAAC,IAAI,EAAC,MAAM,GAAE,MAAM,CAAyF;IACnH,KAAK,IAAG,IAAI,CAAmC;YACjC,WAAW;IACzB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;CAgBf"}
1
+ {"version":3,"file":"project-spend.d.ts","sourceRoot":"","sources":["../../src/execution/project-spend.ts"],"names":[],"mappings":"AASA,KAAK,MAAM,GAAC;IAAC,IAAI,EAAC,QAAQ,GAAC,QAAQ,CAAC;IAAA,SAAS,EAAC,MAAM,CAAA;CAAC,GAAC;IAAC,IAAI,EAAC,SAAS,CAAC;IAAA,SAAS,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAA;CAAC,GAAC;IAAC,IAAI,EAAC,QAAQ,CAAC;IAAA,SAAS,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,MAAM,GAAC,IAAI,CAAC;IAAA,OAAO,CAAC,EAAC,IAAI,CAAA;CAAC,GAAC;IAAC,IAAI,EAAC,OAAO,CAAA;CAAC,CAAC;AAC1N,UAAU,KAAK;IAAE,OAAO,EAAC,CAAC,CAAC;IAAA,EAAE,EAAC,MAAM,CAAC;IAAA,EAAE,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,GAAC,IAAI,CAAC;IAAA,MAAM,EAAC,MAAM,CAAC;IAAA,IAAI,EAAC,MAAM,CAAA;CAAC;AAI9F,wBAAgB,cAAc,CAAC,KAAK,EAAC,MAAM,GAAE,MAAM,CAAwG;AAkD3J,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,IAAI,EAAC,MAAM,CAAC;IACrB,YAAY,IAAI,EAAC,MAAM,EAA2B;IAClD,IAAI,IAAG;QAAC,QAAQ,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,OAAO,CAAC;QAAA,MAAM,EAAC,KAAK,EAAE,CAAA;KAAC,CAyBvE;IACK,OAAO,CAAC,SAAS,EAAC,MAAM,EAAC,KAAK,EAAC,MAAM,EAAC,SAAS,EAAC,MAAM,EAAC,QAAQ,EAAC,MAAM,EAAC,MAAM,CAAC,EAAC,WAAW,GAAE,OAAO,CAAC,IAAI,CAAC,CAAqF;IAC9L,MAAM,CAAC,SAAS,EAAC,MAAM,EAAC,SAAS,EAAC,MAAM,GAAC,IAAI,EAAC,OAAO,UAAM,GAAE,OAAO,CAAC,IAAI,CAAC,CAAsG;IACtL,MAAM,CAAC,IAAI,EAAC,MAAM,GAAE,MAAM,CAAyF;IACnH,KAAK,IAAG,IAAI,CAAmC;YACjC,WAAW;IACzB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;CAgBf"}
@@ -181,11 +181,41 @@ export class ProjectSpendLedger {
181
181
  throw damaged();
182
182
  if (fs.existsSync(dir))
183
183
  directory(dir);
184
- const raw = readRaw(this.file), marked = initialized(this.file + '.initialized');
185
- if (raw === null && marked)
186
- throw damaged();
187
- const { state } = parse(raw);
188
- return { spentUsd: state.spentNanos / 1e9, updatedAt: state.events.at(-1)?.at ?? state.legacyUpdatedAt ?? new Date(0).toISOString(), blocked: state.blocked, events: state.events };
184
+ const lock = this.file + '.lock';
185
+ let retriedUnstable = false;
186
+ for (let attempt = 0; attempt <= 50; attempt++) {
187
+ if (fs.existsSync(lock)) {
188
+ if (attempt === 50)
189
+ break;
190
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 10);
191
+ continue;
192
+ }
193
+ try {
194
+ const raw = readRaw(this.file), marked = initialized(this.file + '.initialized');
195
+ // Initial writers commit the marker before the atomic journal rename.
196
+ // Never combine observations from opposite sides of that transaction.
197
+ if (fs.existsSync(lock) || readRaw(this.file) !== raw)
198
+ continue;
199
+ if (raw === null && marked)
200
+ throw damaged();
201
+ const { state } = parse(raw);
202
+ if (fs.existsSync(lock))
203
+ continue;
204
+ return { spentUsd: state.spentNanos / 1e9, updatedAt: state.events.at(-1)?.at ?? state.legacyUpdatedAt ?? new Date(0).toISOString(), blocked: state.blocked, events: state.events };
205
+ }
206
+ catch (error) {
207
+ // A writer may finish between a partial marker read and this catch.
208
+ // Retry that observation once; persistent damage remains an error.
209
+ if (fs.existsSync(lock))
210
+ continue;
211
+ if (!retriedUnstable) {
212
+ retriedUnstable = true;
213
+ continue;
214
+ }
215
+ throw error;
216
+ }
217
+ }
218
+ throw new ExecutionLimitError('locked', 'Project budget has another writer.');
189
219
  }
190
220
  async reserve(requestId, runId, costNanos, capNanos, signal) { await this.updateAsync({ type: 'reserve', requestId, runId, costNanos, capNanos }, signal); }
191
221
  async settle(requestId, costNanos, invalid = false) { await this.updateAsync({ type: 'settle', requestId, costNanos, ...(invalid ? { invalid: true } : {}) }); }
@@ -1 +1 @@
1
- {"version":3,"file":"project-spend.js","sourceRoot":"","sources":["../../src/execution/project-spend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-spend.js","sourceRoot":"","sources":["../../src/execution/project-spend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type ExecutionManifest, type ReservationEvent } from './types.js';
2
+ export interface RemoteJournal {
3
+ manifest: ExecutionManifest;
4
+ events: ReservationEvent[];
5
+ }
6
+ export declare function verifiedJournal(value: unknown): RemoteJournal;
7
+ export declare function extendsJournal(previous: RemoteJournal, next: RemoteJournal): boolean;
8
+ export declare class RemoteLedgerCheckpoint {
9
+ readonly root: string;
10
+ private readonly dir;
11
+ constructor(root: string);
12
+ read(): RemoteJournal | undefined;
13
+ save(next: RemoteJournal, current?: RemoteJournal, projectRoot?: string): RemoteJournal;
14
+ }
15
+ //# sourceMappingURL=remote-checkpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-checkpoint.d.ts","sourceRoot":"","sources":["../../src/execution/remote-checkpoint.ts"],"names":[],"mappings":"AAOA,OAAO,EAAqB,KAAK,iBAAiB,EAAC,KAAK,gBAAgB,EAAC,MAAM,YAAY,CAAC;AAG5F,MAAM,WAAW,aAAa;IAAE,QAAQ,EAAC,iBAAiB,CAAC;IAAA,MAAM,EAAC,gBAAgB,EAAE,CAAA;CAAC;AAErF,wBAAgB,eAAe,CAAC,KAAK,EAAC,OAAO,GAAE,aAAa,CAM3D;AACD,wBAAgB,cAAc,CAAC,QAAQ,EAAC,aAAa,EAAC,IAAI,EAAC,aAAa,GAAE,OAAO,CAEhF;AAyBD,qBAAa,sBAAsB;IACjC,QAAQ,CAAC,IAAI,EAAC,MAAM,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,YAAY,IAAI,EAAC,MAAM,EAAsE;IAC7F,IAAI,IAAG,aAAa,GAAC,SAAS,CAQ7B;IACD,IAAI,CAAC,IAAI,EAAC,aAAa,EAAC,OAAO,CAAC,EAAC,aAAa,EAAC,WAAW,SAA2B,GAAE,aAAa,CAmCnG;CACF"}
@@ -0,0 +1,165 @@
1
+ /** Verified parent history survives a child restart; it never grants admission locally. */
2
+ import * as fs from 'node:fs';
3
+ import { dirname, join, resolve } from 'node:path';
4
+ import { randomUUID } from 'node:crypto';
5
+ import { canonicalJson, digest } from '../approvals/index.js';
6
+ import { validateExecutionManifest, assertExecutionStoreOutsideProject } from './authority.js';
7
+ import { MAX_RESERVATION_BYTES, replayReservations } from './ledger.js';
8
+ import { ExecutionLimitError } from './types.js';
9
+ import { recoverDeadWriterLock } from './writer-recovery.js';
10
+ const damaged = () => new ExecutionLimitError('unavailable', 'Verified parent history is unavailable or damaged; preserve it and restore a verified backup.');
11
+ export function verifiedJournal(value) {
12
+ const next = value;
13
+ if (!next || !Array.isArray(next.events))
14
+ throw damaged();
15
+ const manifest = validateExecutionManifest(next.manifest);
16
+ replayReservations(manifest, next.events);
17
+ return structuredClone({ manifest, events: next.events });
18
+ }
19
+ export function extendsJournal(previous, next) {
20
+ return canonicalJson(previous.manifest) === canonicalJson(next.manifest) && previous.events.length <= next.events.length && previous.events.every((event, i) => event.hash === next.events[i].hash);
21
+ }
22
+ const conflict = () => new ExecutionLimitError('conflict', 'Parent ledger history was rewritten or rolled back; execution stopped.');
23
+ function directory(path) {
24
+ const stat = fs.lstatSync(path);
25
+ if (!stat.isDirectory() || stat.isSymbolicLink() || stat.mode & 0o077 || fs.realpathSync(path) !== path)
26
+ throw damaged();
27
+ return stat;
28
+ }
29
+ function exists(path) {
30
+ try {
31
+ fs.lstatSync(path);
32
+ return true;
33
+ }
34
+ catch (error) {
35
+ if (error.code === 'ENOENT')
36
+ return false;
37
+ throw error;
38
+ }
39
+ }
40
+ function readFile(file) {
41
+ const before = fs.lstatSync(file);
42
+ if (!before.isFile() || before.isSymbolicLink())
43
+ throw damaged();
44
+ const fd = fs.openSync(file, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW | fs.constants.O_NONBLOCK);
45
+ try {
46
+ const stat = fs.fstatSync(fd);
47
+ if (!stat.isFile() || stat.dev !== before.dev || stat.ino !== before.ino || stat.nlink !== 1 || stat.mode & 0o077 || stat.size > MAX_RESERVATION_BYTES)
48
+ throw damaged();
49
+ const buffer = Buffer.alloc(stat.size + 1);
50
+ let size = 0, n;
51
+ while (size < buffer.length && (n = fs.readSync(fd, buffer, size, buffer.length - size, null)) > 0)
52
+ size += n;
53
+ if (size !== stat.size)
54
+ throw damaged();
55
+ return buffer.subarray(0, size).toString('utf8');
56
+ }
57
+ finally {
58
+ fs.closeSync(fd);
59
+ }
60
+ }
61
+ function syncDir(path) {
62
+ if (process.platform === 'win32')
63
+ return;
64
+ const fd = fs.openSync(path, 'r');
65
+ try {
66
+ fs.fsyncSync(fd);
67
+ }
68
+ finally {
69
+ fs.closeSync(fd);
70
+ }
71
+ }
72
+ export class RemoteLedgerCheckpoint {
73
+ root;
74
+ dir;
75
+ constructor(root) { this.root = resolve(root); this.dir = join(this.root, 'verified-parent'); }
76
+ read() {
77
+ try {
78
+ if (!exists(this.root))
79
+ return undefined;
80
+ directory(this.root);
81
+ if (!exists(this.dir))
82
+ return undefined;
83
+ directory(this.dir);
84
+ const value = JSON.parse(readFile(join(this.dir, 'history.json')));
85
+ if (value?.version !== 1 || typeof value.hash !== 'string' || value.hash !== digest(canonicalJson(value.journal)))
86
+ throw damaged();
87
+ return verifiedJournal(value.journal);
88
+ }
89
+ catch {
90
+ throw damaged();
91
+ }
92
+ }
93
+ save(next, current, projectRoot = next.manifest.project.root) {
94
+ assertExecutionStoreOutsideProject(projectRoot, this.root);
95
+ if (!exists(this.root))
96
+ fs.mkdirSync(this.root, { mode: 0o700 });
97
+ directory(this.root);
98
+ let fresh = false;
99
+ try {
100
+ fs.mkdirSync(this.dir, { mode: 0o700 });
101
+ fresh = true;
102
+ }
103
+ catch (error) {
104
+ if (error.code !== 'EEXIST')
105
+ throw error;
106
+ }
107
+ const before = directory(this.dir), lock = join(this.dir, 'writer.lock');
108
+ let fd;
109
+ try {
110
+ fd = fs.openSync(lock, 'wx', 0o600);
111
+ }
112
+ catch (error) {
113
+ if (error.code !== 'EEXIST')
114
+ throw error;
115
+ if (!recoverDeadWriterLock(lock))
116
+ throw new ExecutionLimitError('locked', 'Verified parent history is being updated; retry without resetting it.');
117
+ fd = fs.openSync(lock, 'wx', 0o600);
118
+ }
119
+ let temp;
120
+ try {
121
+ fs.writeFileSync(fd, String(process.pid));
122
+ fs.fsyncSync(fd);
123
+ let selected = next;
124
+ for (const saved of [current, fresh ? undefined : this.read()]) {
125
+ if (!saved)
126
+ continue;
127
+ if (extendsJournal(selected, saved))
128
+ selected = saved;
129
+ else if (!extendsJournal(saved, selected))
130
+ throw conflict();
131
+ }
132
+ const raw = JSON.stringify({ version: 1, journal: selected, hash: digest(canonicalJson(selected)) });
133
+ if (Buffer.byteLength(raw) > MAX_RESERVATION_BYTES)
134
+ throw new ExecutionLimitError('limit', 'Verified parent history reached its byte limit; existing reservations remain charged.');
135
+ temp = join(this.dir, `history.${randomUUID()}.tmp`);
136
+ const output = fs.openSync(temp, 'wx', 0o600);
137
+ try {
138
+ fs.writeFileSync(output, raw);
139
+ fs.fsyncSync(output);
140
+ }
141
+ finally {
142
+ fs.closeSync(output);
143
+ }
144
+ const after = directory(this.dir);
145
+ if (before.dev !== after.dev || before.ino !== after.ino)
146
+ throw conflict();
147
+ fs.renameSync(temp, join(this.dir, 'history.json'));
148
+ temp = undefined;
149
+ syncDir(this.dir);
150
+ syncDir(this.root);
151
+ syncDir(dirname(this.root));
152
+ return selected;
153
+ }
154
+ finally {
155
+ if (temp)
156
+ fs.unlinkSync(temp);
157
+ const held = fs.fstatSync(fd);
158
+ fs.closeSync(fd);
159
+ const actual = fs.lstatSync(lock);
160
+ if (held.ino === actual.ino && held.dev === actual.dev)
161
+ fs.unlinkSync(lock);
162
+ }
163
+ }
164
+ }
165
+ //# sourceMappingURL=remote-checkpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-checkpoint.js","sourceRoot":"","sources":["../../src/execution/remote-checkpoint.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,14 @@
1
- import { type ChildGrant, type ExecutionManifest, type RequestReservation, type RequestSettlement, type ReservationEvent, type ReservationProjection } from './types.js';
1
+ import { type ChildGrant, type ExecutionManifest, type ReservationEvent, type RequestReservation, type RequestSettlement, type ReservationProjection } from './types.js';
2
2
  export interface RemoteLedgerOptions {
3
3
  url: string;
4
4
  token: string;
5
- /** Local, private directory outside the project (ExecutionGuard checks it is not inside). */
5
+ /** Persistent private directory outside the project; reuse it after reconnect/restart. */
6
6
  root: string;
7
+ /** Explicit host invocation; the server must verify the account and local project binding. */
8
+ execution?: {
9
+ cwd: string;
10
+ agentId: string;
11
+ };
7
12
  fetch?: typeof fetch;
8
13
  attempts?: number;
9
14
  timeoutMs?: number;
@@ -12,7 +17,9 @@ export declare class RemoteReservationLedger {
12
17
  private readonly options;
13
18
  readonly root: string;
14
19
  private journal;
20
+ private readonly checkpoint;
15
21
  private readonly confirmedRejections;
22
+ private binding?;
16
23
  private constructor();
17
24
  static connect(options: RemoteLedgerOptions): Promise<RemoteReservationLedger>;
18
25
  read(cwd: string): {
@@ -20,6 +27,9 @@ export declare class RemoteReservationLedger {
20
27
  events: ReservationEvent[];
21
28
  projection: ReservationProjection;
22
29
  };
30
+ executionProject(cwd: string, agentId: string): ExecutionManifest['project'];
31
+ /** A journal read is available for reconciliation even when its owner has stopped. */
32
+ refreshAuthority(cwd: string, agentId: string, signal?: AbortSignal): Promise<void>;
23
33
  refresh(): Promise<void>;
24
34
  canReleaseFailedReservation(error: unknown): boolean;
25
35
  reserve(_cwd: string, manifestHash: string, reservation: RequestReservation, signal?: AbortSignal): Promise<ReservationProjection>;