@calliopelabs/cli 3.5.4 → 3.7.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.
- package/README.md +8 -0
- package/dist/acp/controls.d.ts +10 -0
- package/dist/acp/controls.d.ts.map +1 -0
- package/dist/acp/controls.js +81 -0
- package/dist/acp/controls.js.map +1 -0
- package/dist/acp.d.ts +21 -7
- package/dist/acp.d.ts.map +1 -1
- package/dist/acp.js +139 -23
- package/dist/acp.js.map +1 -1
- package/dist/bin.d.ts.map +1 -1
- package/dist/bin.js +28 -8
- package/dist/bin.js.map +1 -1
- package/dist/build-identity.d.ts +27 -0
- package/dist/build-identity.d.ts.map +1 -0
- package/dist/build-identity.js +32 -0
- package/dist/build-identity.js.map +1 -0
- package/dist/build-metadata.json +1 -0
- package/dist/execution/authority.d.ts +4 -1
- package/dist/execution/authority.d.ts.map +1 -1
- package/dist/execution/authority.js +23 -7
- package/dist/execution/authority.js.map +1 -1
- package/dist/execution/child-grants.d.ts +2 -0
- package/dist/execution/child-grants.d.ts.map +1 -1
- package/dist/execution/child-grants.js +19 -4
- package/dist/execution/child-grants.js.map +1 -1
- package/dist/execution/delegated.d.ts +14 -0
- package/dist/execution/delegated.d.ts.map +1 -0
- package/dist/execution/delegated.js +66 -0
- package/dist/execution/delegated.js.map +1 -0
- package/dist/execution/files.js +6 -6
- package/dist/execution/files.js.map +1 -1
- package/dist/execution/guard.d.ts +5 -0
- package/dist/execution/guard.d.ts.map +1 -1
- package/dist/execution/guard.js +31 -16
- package/dist/execution/guard.js.map +1 -1
- package/dist/execution/index.d.ts +4 -0
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/index.js +4 -0
- package/dist/execution/index.js.map +1 -1
- package/dist/execution/ledger-cli.d.ts +2 -1
- package/dist/execution/ledger-cli.d.ts.map +1 -1
- package/dist/execution/ledger-cli.js +51 -14
- package/dist/execution/ledger-cli.js.map +1 -1
- package/dist/execution/ledger-protocol.d.ts +6 -2
- package/dist/execution/ledger-protocol.d.ts.map +1 -1
- package/dist/execution/ledger-protocol.js +110 -24
- package/dist/execution/ledger-protocol.js.map +1 -1
- package/dist/execution/ledger-server.d.ts +13 -0
- package/dist/execution/ledger-server.d.ts.map +1 -1
- package/dist/execution/ledger-server.js +57 -13
- package/dist/execution/ledger-server.js.map +1 -1
- package/dist/execution/ledger-tunnel.d.ts +50 -0
- package/dist/execution/ledger-tunnel.d.ts.map +1 -0
- package/dist/execution/ledger-tunnel.js +307 -0
- package/dist/execution/ledger-tunnel.js.map +1 -0
- package/dist/execution/ledger.d.ts +4 -0
- package/dist/execution/ledger.d.ts.map +1 -1
- package/dist/execution/ledger.js +30 -4
- package/dist/execution/ledger.js.map +1 -1
- package/dist/execution/parent-accounting.d.ts +41 -0
- package/dist/execution/parent-accounting.d.ts.map +1 -0
- package/dist/execution/parent-accounting.js +52 -0
- package/dist/execution/parent-accounting.js.map +1 -0
- package/dist/execution/parent-budget.d.ts +25 -0
- package/dist/execution/parent-budget.d.ts.map +1 -0
- package/dist/execution/parent-budget.js +102 -0
- package/dist/execution/parent-budget.js.map +1 -0
- package/dist/execution/project-spend.d.ts.map +1 -1
- package/dist/execution/project-spend.js +35 -5
- package/dist/execution/project-spend.js.map +1 -1
- package/dist/execution/remote-checkpoint.d.ts +15 -0
- package/dist/execution/remote-checkpoint.d.ts.map +1 -0
- package/dist/execution/remote-checkpoint.js +165 -0
- package/dist/execution/remote-checkpoint.js.map +1 -0
- package/dist/execution/remote-ledger.d.ts +12 -2
- package/dist/execution/remote-ledger.d.ts.map +1 -1
- package/dist/execution/remote-ledger.js +53 -21
- package/dist/execution/remote-ledger.js.map +1 -1
- package/dist/execution/types.d.ts +23 -5
- package/dist/execution/types.d.ts.map +1 -1
- package/dist/execution/types.js.map +1 -1
- package/dist/goals/supervised.js +2 -2
- package/dist/goals/supervised.js.map +1 -1
- package/dist/headless.d.ts +2 -6
- package/dist/headless.d.ts.map +1 -1
- package/dist/headless.js +17 -21
- package/dist/headless.js.map +1 -1
- package/dist/improvement/actions.d.ts +3 -4
- package/dist/improvement/actions.d.ts.map +1 -1
- package/dist/improvement/actions.js +10 -7
- package/dist/improvement/actions.js.map +1 -1
- package/dist/improvement/capabilities.d.ts +54 -0
- package/dist/improvement/capabilities.d.ts.map +1 -0
- package/dist/improvement/capabilities.js +44 -0
- package/dist/improvement/capabilities.js.map +1 -0
- package/dist/improvement/cli.d.ts +1 -1
- package/dist/improvement/cli.d.ts.map +1 -1
- package/dist/improvement/cli.js +29 -3
- package/dist/improvement/cli.js.map +1 -1
- package/dist/improvement/host-capabilities.d.ts +119 -0
- package/dist/improvement/host-capabilities.d.ts.map +1 -0
- package/dist/improvement/host-capabilities.js +18 -0
- package/dist/improvement/host-capabilities.js.map +1 -0
- package/dist/improvement/index.d.ts +6 -0
- package/dist/improvement/index.d.ts.map +1 -1
- package/dist/improvement/index.js +6 -0
- package/dist/improvement/index.js.map +1 -1
- package/dist/improvement/proposal-hash.d.ts +3 -0
- package/dist/improvement/proposal-hash.d.ts.map +1 -0
- package/dist/improvement/proposal-hash.js +5 -0
- package/dist/improvement/proposal-hash.js.map +1 -0
- package/dist/improvement/review-contract.d.ts +32 -0
- package/dist/improvement/review-contract.d.ts.map +1 -0
- package/dist/improvement/review-contract.js +62 -0
- package/dist/improvement/review-contract.js.map +1 -0
- package/dist/improvement/review-requests.d.ts +72 -0
- package/dist/improvement/review-requests.d.ts.map +1 -0
- package/dist/improvement/review-requests.js +63 -0
- package/dist/improvement/review-requests.js.map +1 -0
- package/dist/improvement/source-changes.d.ts +78 -0
- package/dist/improvement/source-changes.d.ts.map +1 -0
- package/dist/improvement/source-changes.js +91 -0
- package/dist/improvement/source-changes.js.map +1 -0
- package/dist/improvement/task-outcomes.d.ts +82 -0
- package/dist/improvement/task-outcomes.d.ts.map +1 -0
- package/dist/improvement/task-outcomes.js +72 -0
- package/dist/improvement/task-outcomes.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/isolation/contracts.d.ts +13 -0
- package/dist/isolation/contracts.d.ts.map +1 -1
- package/dist/isolation/contracts.js +9 -1
- package/dist/isolation/contracts.js.map +1 -1
- package/dist/isolation/coordinator.d.ts.map +1 -1
- package/dist/isolation/coordinator.js +4 -0
- package/dist/isolation/coordinator.js.map +1 -1
- package/dist/isolation/process.d.ts.map +1 -1
- package/dist/isolation/process.js +3 -1
- package/dist/isolation/process.js.map +1 -1
- package/dist/isolation/worktree.d.ts +9 -1
- package/dist/isolation/worktree.d.ts.map +1 -1
- package/dist/isolation/worktree.js +8 -3
- package/dist/isolation/worktree.js.map +1 -1
- package/dist/memory.d.ts +5 -3
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +8 -6
- package/dist/memory.js.map +1 -1
- package/dist/migration/assessment-contract.d.ts +60 -0
- package/dist/migration/assessment-contract.d.ts.map +1 -0
- package/dist/migration/assessment-contract.js +132 -0
- package/dist/migration/assessment-contract.js.map +1 -0
- package/dist/migration/assessment-schema.d.ts +19 -0
- package/dist/migration/assessment-schema.d.ts.map +1 -0
- package/dist/migration/assessment-schema.js +43 -0
- package/dist/migration/assessment-schema.js.map +1 -0
- package/dist/migration/assessment.d.ts +159 -0
- package/dist/migration/assessment.d.ts.map +1 -0
- package/dist/migration/assessment.js +219 -0
- package/dist/migration/assessment.js.map +1 -0
- package/dist/migration/cli.d.ts +6 -0
- package/dist/migration/cli.d.ts.map +1 -0
- package/dist/migration/cli.js +101 -0
- package/dist/migration/cli.js.map +1 -0
- package/dist/migration/evidence.d.ts +27 -0
- package/dist/migration/evidence.d.ts.map +1 -0
- package/dist/migration/evidence.js +124 -0
- package/dist/migration/evidence.js.map +1 -0
- package/dist/migration/example.d.ts +33 -0
- package/dist/migration/example.d.ts.map +1 -0
- package/dist/migration/example.js +28 -0
- package/dist/migration/example.js.map +1 -0
- package/dist/migration/index.d.ts +21 -0
- package/dist/migration/index.d.ts.map +1 -0
- package/dist/migration/index.js +15 -0
- package/dist/migration/index.js.map +1 -0
- package/dist/migration/inventory.d.ts +70 -0
- package/dist/migration/inventory.d.ts.map +1 -0
- package/dist/migration/inventory.js +233 -0
- package/dist/migration/inventory.js.map +1 -0
- package/dist/migration/schema.d.ts +61 -0
- package/dist/migration/schema.d.ts.map +1 -0
- package/dist/migration/schema.js +76 -0
- package/dist/migration/schema.js.map +1 -0
- package/dist/migration/verification.d.ts +146 -0
- package/dist/migration/verification.d.ts.map +1 -0
- package/dist/migration/verification.js +260 -0
- package/dist/migration/verification.js.map +1 -0
- package/dist/orchestration/actions.d.ts +2 -0
- package/dist/orchestration/actions.d.ts.map +1 -1
- package/dist/orchestration/actions.js.map +1 -1
- package/dist/orchestration/artifact-host.d.ts +46 -0
- package/dist/orchestration/artifact-host.d.ts.map +1 -0
- package/dist/orchestration/artifact-host.js +64 -0
- package/dist/orchestration/artifact-host.js.map +1 -0
- package/dist/orchestration/coordinator-actions.d.ts +1 -1
- package/dist/orchestration/coordinator-actions.d.ts.map +1 -1
- package/dist/orchestration/coordinator-actions.js +5 -3
- package/dist/orchestration/coordinator-actions.js.map +1 -1
- package/dist/orchestration/coordinator-types.d.ts +23 -2
- package/dist/orchestration/coordinator-types.d.ts.map +1 -1
- package/dist/orchestration/coordinator.d.ts +5 -0
- package/dist/orchestration/coordinator.d.ts.map +1 -1
- package/dist/orchestration/coordinator.js +30 -13
- package/dist/orchestration/coordinator.js.map +1 -1
- package/dist/orchestration/execution-cli.d.ts +1 -1
- package/dist/orchestration/execution-cli.d.ts.map +1 -1
- package/dist/orchestration/execution-cli.js +29 -6
- package/dist/orchestration/execution-cli.js.map +1 -1
- package/dist/orchestration/execution-journal.d.ts.map +1 -1
- package/dist/orchestration/execution-journal.js +79 -6
- package/dist/orchestration/execution-journal.js.map +1 -1
- package/dist/orchestration/execution-store.d.ts +5 -1
- package/dist/orchestration/execution-store.d.ts.map +1 -1
- package/dist/orchestration/execution-store.js +66 -5
- package/dist/orchestration/execution-store.js.map +1 -1
- package/dist/orchestration/execution.d.ts.map +1 -1
- package/dist/orchestration/execution.js +37 -10
- package/dist/orchestration/execution.js.map +1 -1
- package/dist/orchestration/index.d.ts +6 -0
- package/dist/orchestration/index.d.ts.map +1 -1
- package/dist/orchestration/index.js +6 -0
- package/dist/orchestration/index.js.map +1 -1
- package/dist/orchestration/interruption.d.ts +10 -0
- package/dist/orchestration/interruption.d.ts.map +1 -0
- package/dist/orchestration/interruption.js +38 -0
- package/dist/orchestration/interruption.js.map +1 -0
- package/dist/orchestration/question-contract.d.ts +19 -0
- package/dist/orchestration/question-contract.d.ts.map +1 -0
- package/dist/orchestration/question-contract.js +21 -0
- package/dist/orchestration/question-contract.js.map +1 -0
- package/dist/orchestration/questions.d.ts +9 -0
- package/dist/orchestration/questions.d.ts.map +1 -0
- package/dist/orchestration/questions.js +75 -0
- package/dist/orchestration/questions.js.map +1 -0
- package/dist/orchestration/reviewed-ledger.d.ts +23 -0
- package/dist/orchestration/reviewed-ledger.d.ts.map +1 -0
- package/dist/orchestration/reviewed-ledger.js +57 -0
- package/dist/orchestration/reviewed-ledger.js.map +1 -0
- package/dist/orchestration/routing.d.ts +3 -0
- package/dist/orchestration/routing.d.ts.map +1 -1
- package/dist/orchestration/routing.js +5 -1
- package/dist/orchestration/routing.js.map +1 -1
- package/dist/orchestration/source-candidates.d.ts +64 -0
- package/dist/orchestration/source-candidates.d.ts.map +1 -0
- package/dist/orchestration/source-candidates.js +95 -0
- package/dist/orchestration/source-candidates.js.map +1 -0
- package/dist/orchestration/validation.js +1 -1
- package/dist/orchestration/validation.js.map +1 -1
- package/dist/runlog.js +2 -2
- package/dist/runlog.js.map +1 -1
- package/dist/runtime/permissions.d.ts.map +1 -1
- package/dist/runtime/permissions.js +3 -2
- package/dist/runtime/permissions.js.map +1 -1
- package/dist/runtime/turn.d.ts +2 -0
- package/dist/runtime/turn.d.ts.map +1 -1
- package/dist/runtime/turn.js +21 -7
- package/dist/runtime/turn.js.map +1 -1
- package/dist/session-management/actions.js +1 -1
- package/dist/session-management/actions.js.map +1 -1
- package/dist/sessions/execution-binding.d.ts +8 -0
- package/dist/sessions/execution-binding.d.ts.map +1 -0
- package/dist/sessions/execution-binding.js +9 -0
- package/dist/sessions/execution-binding.js.map +1 -0
- package/dist/sessions/index.d.ts +1 -0
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +1 -0
- package/dist/sessions/index.js.map +1 -1
- package/dist/source-changes/writer.d.ts +77 -0
- package/dist/source-changes/writer.d.ts.map +1 -0
- package/dist/source-changes/writer.js +189 -0
- package/dist/source-changes/writer.js.map +1 -0
- package/dist/spawning/actions.d.ts +10 -1
- package/dist/spawning/actions.d.ts.map +1 -1
- package/dist/spawning/actions.js +26 -7
- package/dist/spawning/actions.js.map +1 -1
- package/dist/spawning/cli.js +1 -1
- package/dist/spawning/cli.js.map +1 -1
- package/dist/spawning/execution.d.ts.map +1 -1
- package/dist/spawning/execution.js +2 -0
- package/dist/spawning/execution.js.map +1 -1
- package/dist/spawning/types.d.ts +19 -6
- package/dist/spawning/types.d.ts.map +1 -1
- package/dist/spawning/validation.d.ts +16 -0
- package/dist/spawning/validation.d.ts.map +1 -1
- package/dist/spawning/validation.js +44 -8
- package/dist/spawning/validation.js.map +1 -1
- package/dist/storage.d.ts +5 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +10 -1
- package/dist/storage.js.map +1 -1
- package/dist/supervision/contracts.js +4 -1
- package/dist/supervision/contracts.js.map +1 -1
- package/dist/tools.d.ts +1 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +5 -0
- package/dist/tools.js.map +1 -1
- package/docs/README.md +66 -0
- package/docs/acp.md +228 -0
- package/docs/delegation-ledger.md +331 -0
- package/docs/improvement-cycles.md +304 -0
- package/docs/migration-assessment.md +113 -0
- package/docs/migration-example-plan.json +88 -0
- package/docs/migration-example-report.json +511 -0
- package/docs/migration-inventory.md +63 -0
- package/docs/migration-playbook.md +152 -0
- package/docs/migration-verification.md +177 -0
- package/docs/releases/3.6.0.md +43 -0
- package/docs/releases/3.7.0.md +53 -0
- package/package.json +11 -3
|
@@ -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":"AAAA;qFACqF;AACrF,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AACvC,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,iBAAiB,EAAC,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAC,cAAc,EAAC,kCAAkC,EAAC,YAAY,EAAC,OAAO,EAAC,yBAAyB,EAAC,MAAM,gBAAgB,CAAC;AAChI,OAAO,EAAC,0BAA0B,EAAC,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAC,mBAAmB,EAAuE,MAAM,YAAY,CAAC;AAErH,MAAM,MAAM,GAAC,CAAC,OAAc,EAAC,EAAE,CAAA,IAAI,mBAAmB,CAAC,WAAW,EAAC,OAAO,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,wBAAwB,GAAC,GAAE,EAAE,CAAA,CAAC,EAAC,OAAO,EAAC,CAAU,EAAC,eAAe,EAAC,CAAU,EAAC,KAAK,EAAC,cAAuB,EAAC,SAAS,EAAC,mCAA4C,EAAC,QAAQ,EAAC,CAAC,EAAC,SAAS,EAAC,oBAA6B,EAAC,CAAC,CAAC;AACpO;oFACoF;AACpF,MAAM,UAAU,eAAe,CAAC,KAAuB,EAAC,SAAgB;IACtE,MAAM,KAAK,GAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAC,KAAK,EAAC,YAAY,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC;IACtH,KAAK,CAAC,CAAC,CAAC,GAAC,CAAC,KAAK,CAAC,CAAC,CAAE,GAAC,IAAI,CAAC,GAAC,IAAI,CAAC;IAAA,KAAK,CAAC,CAAC,CAAC,GAAC,CAAC,KAAK,CAAC,CAAC,CAAE,GAAC,IAAI,CAAC,GAAC,IAAI,CAAC;IAC9D,MAAM,CAAC,GAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAAA,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AAC7H,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAAuB,EAAC,GAAU,EAAC,SAAS,GAAC,IAAI,EAAC,MAAmB,EAAC,IAAI,GAAU,EAAE;IAChI,MAAM,KAAK,GAAC,yBAAyB,CAAC,KAAK,CAAC,EAAC,IAAI,GAAC,KAAK,CAAC,MAAM,CAAC;IAAA,IAAG,CAAC,IAAI;QAAC,OAAO,SAAS,CAAC;IACzF,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,IAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAE,IAAI,CAAC,MAAM,IAAE,CAAC,IAAE,IAAI,CAAC,KAAK,KAAG,KAAK,CAAC,KAAK;QAAC,MAAM,MAAM,CAAC,yDAAyD,CAAC,CAAC;IAChJ,kCAAkC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrE,MAAM,EAAC,QAAQ,EAAC,GAAC,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAC3D,MAAM,EAAC,cAAc,EAAC,GAAC,MAAM,MAAM,CAAC,qCAAqC,CAAC,CAAC;IAC3E,MAAM,EAAC,qBAAqB,EAAC,GAAC,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACvE,MAAM,EAAC,YAAY,EAAC,GAAC,MAAM,MAAM,CAAC,uCAAuC,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAC,IAAI,GAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAC,GAAG,EAAC,MAAM,CAAC,CAAC;IACnF,IAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAG,IAAI,CAAC,eAAe,IAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAA,EAAE,CAAA,KAAK,CAAC,EAAE,KAAG,IAAI,CAAC,gBAAgB,IAAE,KAAK,CAAC,MAAM,CAAC,IAAI,KAAG,UAAU,CAAC;QAAC,MAAM,MAAM,CAAC,uDAAuD,CAAC,CAAC;IAC/M,MAAM,MAAM,GAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAC,IAAI,CAAC,KAAK,EAAC,QAAQ,CAAC,CAAC,EAAC,KAAK,GAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/F,IAAG,KAAK,CAAC,UAAU,CAAC,YAAY,KAAG,IAAI,CAAC,kBAAkB,IAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,KAAG,IAAI,CAAC,KAAK,IAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,KAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ;QAAC,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;IAChM,MAAM,MAAM,GAAC,0BAA0B,CAAC,KAAK,CAAC,QAAQ,EAAC,KAAK,CAAC,UAAU,CAAC,EAAC,OAAO,GAAC,cAAc,CAAC,MAAM,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,CAAC;IACzH,IAAG,KAAK,CAAC,OAAO,CAAC,GAAG,KAAG,MAAM,CAAC,OAAO,CAAC,GAAG,IAAE,KAAK,CAAC,OAAO,CAAC,IAAI,KAAG,MAAM,CAAC,OAAO,CAAC,IAAI,IAAE,KAAK,CAAC,WAAW,GAAC,OAAO,CAAC,WAAW,IAAE,KAAK,CAAC,eAAe,GAAC,OAAO,CAAC,eAAe,IAAE,KAAK,CAAC,QAAQ,GAAC,OAAO,CAAC,QAAQ,IAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAA,EAAE,CAAA,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAA,EAAE,CAAA,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,EAAC,IAAI,CAAC,IAAI,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAAC,MAAM,MAAM,CAAC,0DAA0D,CAAC,CAAC;IAC9b,MAAM,KAAK,GAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAC,IAAI,CAAC,KAAK,CAAC,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzE,2GAA2G;IAC3G,MAAM,IAAI,GAAC,SAAS,CAAA,CAAC,CAAA,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAC,CAAA,SAAS,CAAC;IAC7G,MAAM,QAAQ,GAAC,MAAM,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAC,GAAG,EAAC,SAAS,EAAC,MAAM,EAAC,CAAC,GAAG,IAAI,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACtG,MAAM,YAAY,GAAC,GAAE,EAAE;QACrB,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAAA,KAAK,CAAC,cAAc,CAAC,EAAC,gBAAgB,EAAC,IAAI,CAAC,gBAAgB,EAAC,CAAC,CAAC;QAAA,IAAI,EAAE,YAAY,EAAE,CAAC;QAAA,QAAQ,EAAE,YAAY,EAAE,CAAC;QACtI,MAAM,OAAO,GAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAAA,IAAG,OAAO,CAAC,UAAU,CAAC,YAAY,KAAG,IAAI,CAAC,kBAAkB;YAAC,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;QAC5I,IAAG,OAAO,CAAC,UAAU,CAAC,QAAQ;YAAC,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAC,sEAAsE,CAAC,CAAC;QAC9I,IAAG,IAAI,CAAC,GAAG,EAAE,IAAE,OAAO,CAAC,QAAQ;YAAC,MAAM,IAAI,mBAAmB,CAAC,UAAU,EAAC,2BAA2B,CAAC,CAAC;QACtG,IAAG,KAAK,CAAC,MAAM,EAAE,EAAC,CAAC;YACjB,MAAM,SAAS,GAAC,qBAAqB,CAAC,KAAK,EAAC,MAAM,CAAC,CAAC;YAAA,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChG,IAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAG,WAAW,IAAE,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAA,EAAE,CAAA,KAAK,CAAC,EAAE,KAAG,IAAI,CAAC,OAAO,CAAC,IAAE,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAC,SAAS,CAAC,OAAO,EAAC,IAAI,CAAC,OAAO,CAAC;gBAAC,MAAM,MAAM,CAAC,uDAAuD,CAAC,CAAC;QAC7P,CAAC;aAAK,IAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAA,EAAE,CAAA,KAAK,CAAC,EAAE,KAAG,IAAI,CAAC,OAAO,CAAC;YAAC,MAAM,MAAM,CAAC,oDAAoD,CAAC,CAAC;IAC9I,CAAC,CAAC;IACF,IAAG,SAAS;QAAC,YAAY,EAAE,CAAC;IAC5B,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,CAAC,kBAAkB,EAAC,YAAY;QACtD,WAAW,EAAC,CAAC,OAA0B,EAAoB,EAAE;YAC3D,OAAO,EAAC,GAAG,OAAO,EAAC,EAAE,EAAC,eAAe,CAAC,KAAK,EAAC,OAAO,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,IAAI,CAAC,OAAO,EAAC,CAAC;QAChF,CAAC;QACD,UAAU,EAAC,CAAC,UAA4B,EAAmB,EAAE,CAAA,CAAC,EAAC,GAAG,UAAU,EAAC,SAAS,EAAC,eAAe,CAAC,KAAK,EAAC,UAAU,CAAC,SAAS,CAAC,EAAC,CAAC,EAAC,CAAC;AAC1I,CAAC;AAED,0FAA0F;AAC1F,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAwE,EAAC,GAAU,EAAC,OAA0B,EAAC,MAAmB,EAAC,YAAsB;IAC3L,MAAM,KAAK,GAAC,GAAE,EAAE,GAAC,SAAS,CAAC,YAAY,EAAE,CAAC,CAAA,YAAY,EAAE,EAAE,CAAC,CAAA,CAAC,CAAC;IAAA,KAAK,EAAE,CAAC;IACrE,MAAM,QAAQ,GAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1E,IAAG,QAAQ,EAAC,CAAC;QACX,IAAG,QAAQ,CAAC,KAAK,KAAG,SAAS,IAAE,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAG,aAAa,CAAC,OAAO,CAAC;YAAC,MAAM,MAAM,CAAC,+DAA+D,CAAC,CAAC;QAC1K,OAAO;IACT,CAAC;IACD,MAAM,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAC,SAAS,CAAC,IAAI,EAAC,OAAO,EAAC,MAAM,EAAC,KAAK,CAAC,CAAC;IAAA,KAAK,EAAE,CAAC;AAClF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAwE,EAAC,GAAU,EAAC,UAA4B;IACjJ,MAAM,KAAK,GAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAC,KAAK,GAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC7F,IAAG,KAAK,IAAE,KAAK,CAAC,KAAK,KAAG,SAAS,EAAC,CAAC;QACjC,MAAM,KAAK,GAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAA,EAAE,CAAA,KAAK,CAAC,MAAM,CAAC,IAAI,KAAG,QAAQ,IAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,KAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAC7H,IAAG,CAAC,KAAK,IAAE,KAAK,CAAC,MAAM,CAAC,IAAI,KAAG,QAAQ,IAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAG,aAAa,CAAC,UAAU,CAAC;YAAC,MAAM,MAAM,CAAC,kDAAkD,CAAC,CAAC;QAC7K,0EAA0E;QAC1E,IAAG,KAAK,CAAC,QAAQ,CAAC,MAAM;YAAC,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAC,SAAS,CAAC,IAAI,EAAC,UAAU,CAAC,CAAC;QACtF,OAAO;IACT,CAAC;IACD,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAC,SAAS,CAAC,IAAI,EAAC,UAAU,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -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,
|
|
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
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
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
|
|
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
|
-
/**
|
|
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>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-ledger.d.ts","sourceRoot":"","sources":["../../src/execution/remote-ledger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remote-ledger.d.ts","sourceRoot":"","sources":["../../src/execution/remote-ledger.ts"],"names":[],"mappings":"AASA,OAAO,EAAqB,KAAK,UAAU,EAAC,KAAK,iBAAiB,EAAC,KAAK,gBAAgB,EAAC,KAAK,kBAAkB,EAAC,KAAK,iBAAiB,EAAC,KAAK,qBAAqB,EAAC,MAAM,YAAY,CAAC;AAItL,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAC,MAAM,CAAC;IAAC,KAAK,EAAC,MAAM,CAAC;IACzB,0FAA0F;IAC1F,IAAI,EAAC,MAAM,CAAC;IACZ,8FAA8F;IAC9F,SAAS,CAAC,EAAC;QAAC,GAAG,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAA;KAAC,CAAC;IACvC,KAAK,CAAC,EAAC,OAAO,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAC,MAAM,CAAC;IAAC,SAAS,CAAC,EAAC,MAAM,CAAC;CAC1D;AAGD,qBAAa,uBAAuB;IAMd,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL5C,QAAQ,CAAC,IAAI,EAAC,MAAM,CAAC;IACrB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;IACnD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAC1D,OAAO,CAAC,OAAO,CAAC,CAAuD;IACvE,OAAO,eAGN;IAED,OAAa,OAAO,CAAC,OAAO,EAAC,mBAAmB,GAAE,OAAO,CAAC,uBAAuB,CAAC,CAQjF;IACD,IAAI,CAAC,GAAG,EAAC,MAAM,GAAE;QAAC,QAAQ,EAAC,iBAAiB,CAAC;QAAA,MAAM,EAAC,gBAAgB,EAAE,CAAC;QAAA,UAAU,EAAC,qBAAqB,CAAA;KAAC,CAGvG;IACD,gBAAgB,CAAC,GAAG,EAAC,MAAM,EAAC,OAAO,EAAC,MAAM,GAAE,iBAAiB,CAAC,SAAS,CAAC,CAIvE;IACD,sFAAsF;IAChF,gBAAgB,CAAC,GAAG,EAAC,MAAM,EAAC,OAAO,EAAC,MAAM,EAAC,MAAM,CAAC,EAAC,WAAW,GAAE,OAAO,CAAC,IAAI,CAAC,CAOlF;IACK,OAAO,IAAG,OAAO,CAAC,IAAI,CAAC,CAA6E;IAC1G,2BAA2B,CAAC,KAAK,EAAC,OAAO,GAAE,OAAO,CAEjD;IACK,OAAO,CAAC,IAAI,EAAC,MAAM,EAAC,YAAY,EAAC,MAAM,EAAC,WAAW,EAAC,kBAAkB,EAAC,MAAM,CAAC,EAAC,WAAW,GAAE,OAAO,CAAC,qBAAqB,CAAC,CAE/H;IACK,MAAM,CAAC,IAAI,EAAC,MAAM,EAAC,YAAY,EAAC,MAAM,EAAC,UAAU,EAAC,iBAAiB,GAAE,OAAO,CAAC,qBAAqB,CAAC,CAExG;IACD,+FAA+F;IACzF,aAAa,CAAC,IAAI,EAAC,MAAM,EAAC,YAAY,EAAC,MAAM,EAAC,KAAK,EAAC,UAAU,EAAC,MAAM,CAAC,EAAC,WAAW,GAAE,OAAO,CAAC;QAAC,UAAU,EAAC,qBAAqB,CAAC;QAAA,KAAK,EAAC,MAAM,CAAA;KAAC,CAAC,CAGjJ;IAED;gGAC4F;YAC9E,KAAK;IAanB,OAAO,CAAC,UAAU;IAClB,+FAA+F;IAC/F,OAAO,CAAC,MAAM;YAKA,IAAI;CAenB"}
|