@polderlabs/bizar-omp 0.6.7 → 0.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 -8
- package/dist/cli/doctor.d.ts +4 -4
- package/dist/cli/update-ink.d.ts +2 -1
- package/dist/cli/update-ink.d.ts.map +1 -1
- package/dist/core/acceptance.d.ts.map +1 -1
- package/dist/core/acceptance.js +17 -3
- package/dist/core/acceptance.js.map +1 -1
- package/dist/core/recovery.d.ts.map +1 -1
- package/dist/core/recovery.js +52 -3
- package/dist/core/recovery.js.map +1 -1
- package/dist/core/redaction.d.ts +22 -0
- package/dist/core/redaction.d.ts.map +1 -0
- package/dist/core/redaction.js +103 -0
- package/dist/core/redaction.js.map +1 -0
- package/dist/core/transitions.d.ts +3 -2
- package/dist/core/transitions.d.ts.map +1 -1
- package/dist/core/transitions.js +34 -8
- package/dist/core/transitions.js.map +1 -1
- package/dist/core/types.d.ts +33 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/extension.d.ts +14 -3
- package/dist/extension.d.ts.map +1 -1
- package/dist/extension.js +92 -36
- package/dist/extension.js.map +1 -1
- package/dist/omp/compatibility.d.ts +5 -5
- package/dist/omp/compatibility.d.ts.map +1 -1
- package/dist/omp/compatibility.js +2 -2
- package/dist/omp/compatibility.js.map +1 -1
- package/dist/omp/dispatch-admission.d.ts +4 -1
- package/dist/omp/dispatch-admission.d.ts.map +1 -1
- package/dist/omp/dispatch-admission.js +2 -2
- package/dist/omp/dispatch-admission.js.map +1 -1
- package/dist/omp/result-reconciliation.js +1 -1
- package/dist/omp/result-reconciliation.js.map +1 -1
- package/dist/omp/rpc.d.ts +4 -1
- package/dist/omp/rpc.d.ts.map +1 -1
- package/dist/services/candidate-verify.d.ts +34 -0
- package/dist/services/candidate-verify.d.ts.map +1 -0
- package/dist/services/candidate-verify.js +141 -0
- package/dist/services/candidate-verify.js.map +1 -0
- package/dist/storage/journal.d.ts.map +1 -1
- package/dist/storage/journal.js +6 -21
- package/dist/storage/journal.js.map +1 -1
- package/dist/storage/lease.d.ts +16 -0
- package/dist/storage/lease.d.ts.map +1 -0
- package/dist/storage/lease.js +236 -0
- package/dist/storage/lease.js.map +1 -0
- package/dist/storage/repository-identity.d.ts.map +1 -1
- package/dist/storage/repository-identity.js +1 -0
- package/dist/storage/repository-identity.js.map +1 -1
- package/dist/storage/resources.d.ts.map +1 -1
- package/dist/storage/resources.js +49 -22
- package/dist/storage/resources.js.map +1 -1
- package/dist/tools/integrate.d.ts.map +1 -1
- package/dist/tools/integrate.js +66 -23
- package/dist/tools/integrate.js.map +1 -1
- package/dist/tools/verify.d.ts.map +1 -1
- package/dist/tools/verify.js +43 -32
- package/dist/tools/verify.js.map +1 -1
- package/dist/tools/workflow.d.ts +12 -2
- package/dist/tools/workflow.d.ts.map +1 -1
- package/dist/tools/workflow.js +54 -7
- package/dist/tools/workflow.js.map +1 -1
- package/docs/compatibility/baseline.json +9 -8
- package/docs/compatibility/supported-surfaces.json +2 -1
- package/docs/releases/0.6.8.md +11 -0
- package/docs/releases/native-stable.md +1 -1
- package/docs/releases/npm-publishing.md +1 -1
- package/docs/releases/support-matrix.md +1 -1
- package/package.json +2 -2
- package/schemas/evidence-record.schema.json +29 -3
- package/schemas/workflow-run.schema.json +10 -3
- package/skills/bizar-omp/SKILL.md +2 -1
- package/skills/omp-native-development/SKILL.md +1 -1
- package/skills/omp-native-development/references/accuracy-and-versioning.md +1 -1
- package/skills/omp-native-development/references/source-manifest.json +3 -3
- package/optional/openkan/index.ts +0 -3
|
@@ -4,6 +4,6 @@ export function reconcileResult(intent, observation) {
|
|
|
4
4
|
throw new ContractError("Worker result is bound to a different dispatch", { expected: intent.id, actual: observation.dispatchId });
|
|
5
5
|
if (!["settled", "failed", "cancelled", "unknown-outcome"].includes(observation.status))
|
|
6
6
|
return { ...intent, status: "acknowledged", nativeCallId: observation.nativeCallId, nativeChildId: observation.nativeChildId };
|
|
7
|
-
return { ...intent, status: observation.status === "
|
|
7
|
+
return { ...intent, status: observation.status === "unknown-outcome" ? "unknown-outcome" : observation.status, nativeCallId: observation.nativeCallId, nativeChildId: observation.nativeChildId };
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=result-reconciliation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-reconciliation.js","sourceRoot":"","sources":["../../src/omp/result-reconciliation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,MAAM,UAAU,eAAe,CAAC,MAAsB,EAAE,WAA8B;IACpF,IAAI,WAAW,CAAC,UAAU,KAAK,MAAM,CAAC,EAAE;QAAE,MAAM,IAAI,aAAa,CAAC,gDAAgD,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7K,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,CAAC,aAAa,EAAE,CAAC;IACxN,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"result-reconciliation.js","sourceRoot":"","sources":["../../src/omp/result-reconciliation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,MAAM,UAAU,eAAe,CAAC,MAAsB,EAAE,WAA8B;IACpF,IAAI,WAAW,CAAC,UAAU,KAAK,MAAM,CAAC,EAAE;QAAE,MAAM,IAAI,aAAa,CAAC,gDAAgD,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7K,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,CAAC,aAAa,EAAE,CAAC;IACxN,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,KAAK,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,MAAkC,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,CAAC,aAAa,EAAE,CAAC;AAChO,CAAC"}
|
package/dist/omp/rpc.d.ts
CHANGED
|
@@ -44,6 +44,7 @@ export declare function snapshotForRpc(snapshot: StateSnapshot): {
|
|
|
44
44
|
evaluatorHash?: string;
|
|
45
45
|
executionFingerprint?: string;
|
|
46
46
|
attemptGeneration?: number;
|
|
47
|
+
reviewRevision?: number;
|
|
47
48
|
}[];
|
|
48
49
|
dispatches: {
|
|
49
50
|
id: string;
|
|
@@ -60,9 +61,11 @@ export declare function snapshotForRpc(snapshot: StateSnapshot): {
|
|
|
60
61
|
routeClass: import("../core/types.js").RouteClass;
|
|
61
62
|
routeIntent: import("../core/types.js").RouteIntent;
|
|
62
63
|
modelRole: string;
|
|
63
|
-
status: "admitted" | "acknowledged" | "settled" | "unknown-outcome" | "rejected";
|
|
64
|
+
status: "admitted" | "acknowledged" | "settled" | "failed" | "cancelled" | "unknown-outcome" | "rejected";
|
|
64
65
|
nativeCallId?: string;
|
|
65
66
|
nativeChildId?: string;
|
|
67
|
+
candidateId?: string;
|
|
68
|
+
candidateTree?: string;
|
|
66
69
|
}[];
|
|
67
70
|
};
|
|
68
71
|
//# sourceMappingURL=rpc.d.ts.map
|
package/dist/omp/rpc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/omp/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,MAAM,WAAW,UAAU;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAAE;AAChI,MAAM,WAAW,WAAW;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAAE;AACtH,wBAAgB,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,CAAwD;AACrI,wBAAgB,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,CAAqO;AAC/S,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa;IAAa,QAAQ;IAAqB,GAAG;IAAgB,QAAQ
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/omp/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,MAAM,WAAW,UAAU;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAAE;AAChI,MAAM,WAAW,WAAW;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAAE;AACtH,wBAAgB,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,CAAwD;AACrI,wBAAgB,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,CAAqO;AAC/S,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa;IAAa,QAAQ;IAAqB,GAAG;IAAgB,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAsF,UAAU;;;;;;;;;;;;;;;;;;;;;EAAkG"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { CheckSpec, EvidenceRecord } from "../core/types.js";
|
|
2
|
+
import type { SessionBinding } from "../omp/lifecycle.js";
|
|
3
|
+
export interface CandidateCheckRequest {
|
|
4
|
+
checkId: string;
|
|
5
|
+
patch: string;
|
|
6
|
+
spec: CheckSpec;
|
|
7
|
+
cwd?: string;
|
|
8
|
+
signal?: AbortSignal;
|
|
9
|
+
}
|
|
10
|
+
export interface CandidateCheckResult {
|
|
11
|
+
evidenceId: string;
|
|
12
|
+
checkId: string;
|
|
13
|
+
result: EvidenceRecord["result"];
|
|
14
|
+
exitCode: number;
|
|
15
|
+
stdout: string;
|
|
16
|
+
stderr: string;
|
|
17
|
+
targetDigest: string;
|
|
18
|
+
baseTree: string;
|
|
19
|
+
candidateId: string;
|
|
20
|
+
candidateTree: string;
|
|
21
|
+
checkSpecHash: string;
|
|
22
|
+
attemptGeneration: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A001 authoritative candidate verification.
|
|
26
|
+
*
|
|
27
|
+
* Materializes the exact patch into a disposable git worktree of the bound
|
|
28
|
+
* repository, runs one frozen CheckSpec there, and records a receipt bound to
|
|
29
|
+
* the host target digest (matching integrate), the candidate ID/tree, the
|
|
30
|
+
* CheckSpec hash, and the attempt generation. The workspace is removed before
|
|
31
|
+
* returning; the host worktree is untouched.
|
|
32
|
+
*/
|
|
33
|
+
export declare function runCandidateCheck(binding: SessionBinding, request: CandidateCheckRequest): Promise<CandidateCheckResult>;
|
|
34
|
+
//# sourceMappingURL=candidate-verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"candidate-verify.d.ts","sourceRoot":"","sources":["../../src/services/candidate-verify.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAO1D,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AA6BD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA8E9H"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { execFile, execFileSync } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
import { mkdirSync, mkdtempSync, rmSync } from "node:fs";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { randomUUID } from "node:crypto";
|
|
7
|
+
import { ContractError } from "../core/errors.js";
|
|
8
|
+
import { canonicalSpecHash } from "../core/acceptance.js";
|
|
9
|
+
import { enforceOutputPolicy } from "../core/redaction.js";
|
|
10
|
+
import { assertOwner } from "../core/recovery.js";
|
|
11
|
+
import { createEvidence } from "../core/evidence.js";
|
|
12
|
+
import { repositoryIdentity, workingTreeDigest, isDirty } from "../storage/repository-identity.js";
|
|
13
|
+
import { materializeCandidate } from "./candidates.js";
|
|
14
|
+
const execFileAsync = promisify(execFile);
|
|
15
|
+
const gitSync = (cwd, args, input) => execFileSync("git", args, { cwd, input, maxBuffer: 64 * 1024 * 1024 });
|
|
16
|
+
const gitText = (cwd, args) => gitSync(cwd, args).toString("utf8").trim();
|
|
17
|
+
const bounded = (value, limit) => {
|
|
18
|
+
const safe = value ?? "";
|
|
19
|
+
return safe.length > limit ? `[TRUNCATED]\n${safe.slice(-limit)}` : safe;
|
|
20
|
+
};
|
|
21
|
+
const runInWorkspace = async (workspace, spec, signal) => {
|
|
22
|
+
if (spec.runner !== "argv" || !spec.executable)
|
|
23
|
+
throw new ContractError("Candidate checks currently support argv runners with an explicit executable");
|
|
24
|
+
const argv = [...spec.argumentTemplate];
|
|
25
|
+
if (!argv.length)
|
|
26
|
+
throw new ContractError("CheckSpec argumentTemplate must be nonempty");
|
|
27
|
+
const executable = spec.executable;
|
|
28
|
+
const timeoutMs = Math.min(Math.max(spec.limits.timeoutMs, 1), 10 * 60 * 1000);
|
|
29
|
+
const outputBytes = Math.min(Math.max(spec.limits.outputBytes, 1), 512 * 1024);
|
|
30
|
+
try {
|
|
31
|
+
const output = await execFileAsync(executable, argv, { cwd: workspace, signal, timeout: timeoutMs, maxBuffer: outputBytes, env: { PATH: process.env.PATH ?? "", HOME: process.env.HOME ?? "", CI: "1" } });
|
|
32
|
+
return { stdout: output.stdout ?? "", stderr: output.stderr ?? "", code: 0 };
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
if (signal?.aborted)
|
|
36
|
+
throw error;
|
|
37
|
+
const typed = error;
|
|
38
|
+
if (typeof typed.code === "number")
|
|
39
|
+
return { stdout: typed.stdout ?? "", stderr: typed.stderr ?? "", code: typed.code };
|
|
40
|
+
throw new ContractError(`Candidate check could not run: ${typed.message ?? String(error)}`);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* A001 authoritative candidate verification.
|
|
45
|
+
*
|
|
46
|
+
* Materializes the exact patch into a disposable git worktree of the bound
|
|
47
|
+
* repository, runs one frozen CheckSpec there, and records a receipt bound to
|
|
48
|
+
* the host target digest (matching integrate), the candidate ID/tree, the
|
|
49
|
+
* CheckSpec hash, and the attempt generation. The workspace is removed before
|
|
50
|
+
* returning; the host worktree is untouched.
|
|
51
|
+
*/
|
|
52
|
+
export async function runCandidateCheck(binding, request) {
|
|
53
|
+
if (!request.checkId.trim())
|
|
54
|
+
throw new ContractError("A check ID is required");
|
|
55
|
+
const state = binding.journal.snapshot();
|
|
56
|
+
if (!state.run)
|
|
57
|
+
throw new ContractError("Start a workflow before candidate verification");
|
|
58
|
+
if (state.run.cancellation.requested || state.run.phase === "cancelled")
|
|
59
|
+
throw new ContractError("Candidate verification is blocked by the acknowledged cancellation fence");
|
|
60
|
+
// R007: candidate evidence must come from the run owner.
|
|
61
|
+
assertOwner(state.run.nativeSessionId, binding.owner);
|
|
62
|
+
const cwd = request.cwd ?? binding.cwd;
|
|
63
|
+
if (repositoryIdentity(cwd).root !== repositoryIdentity(binding.cwd).root)
|
|
64
|
+
throw new ContractError("Candidate verification cwd must be inside the bound worktree");
|
|
65
|
+
if (isDirty(binding.cwd))
|
|
66
|
+
throw new ContractError("Target worktree is dirty; candidate verification refused until unrelated changes are reconciled");
|
|
67
|
+
const spec = request.spec;
|
|
68
|
+
if (spec.cwdRule !== "candidate-workspace" && spec.cwdRule !== "repository-root")
|
|
69
|
+
throw new ContractError("CheckSpec cwdRule must be candidate-workspace or repository-root for candidate verification");
|
|
70
|
+
const specHash = canonicalSpecHash(spec);
|
|
71
|
+
const candidate = materializeCandidate(cwd, request.patch);
|
|
72
|
+
const targetDigest = workingTreeDigest(binding.cwd);
|
|
73
|
+
// R004: generation is always lineage-derived under journal ownership; callers cannot override it.
|
|
74
|
+
const lineage = state.evidence.filter(record => record.checkId === request.checkId && record.candidateTree === candidate.candidateTree && record.targetDigest === targetDigest);
|
|
75
|
+
const attemptGeneration = lineage.reduce((max, record) => Math.max(max, record.attemptGeneration ?? 0), 0) + 1;
|
|
76
|
+
const root = repositoryIdentity(cwd).root;
|
|
77
|
+
const workspace = mkdtempSync(join(tmpdir(), "bizar-candidate-verify-"));
|
|
78
|
+
mkdirSync(workspace, { recursive: true, mode: 0o700 });
|
|
79
|
+
let evidence;
|
|
80
|
+
try {
|
|
81
|
+
gitSync(workspace, ["init", "-q"]);
|
|
82
|
+
gitSync(workspace, ["remote", "add", "origin", root]);
|
|
83
|
+
gitSync(workspace, ["fetch", "-q", "--depth=1", "origin", candidate.baseCommit]);
|
|
84
|
+
gitSync(workspace, ["checkout", "-q", "--detach", "FETCH_HEAD"]);
|
|
85
|
+
try {
|
|
86
|
+
gitSync(workspace, ["apply", "--whitespace=error", "--recount", "-"], request.patch);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
throw new ContractError("Candidate patch does not apply onto the base commit; verification refused");
|
|
90
|
+
}
|
|
91
|
+
gitSync(workspace, ["add", "-A", "--", "."]);
|
|
92
|
+
const actualTree = gitText(workspace, ["write-tree"]);
|
|
93
|
+
if (actualTree !== candidate.candidateTree)
|
|
94
|
+
throw new ContractError("Materialized workspace tree does not match the candidate tree; verification refused");
|
|
95
|
+
const executed = await runInWorkspace(workspace, spec, request.signal);
|
|
96
|
+
const result = executed.code === 0 ? "passed" : "failed";
|
|
97
|
+
evidence = createEvidence({
|
|
98
|
+
id: `evidence_${randomUUID()}`,
|
|
99
|
+
runId: state.run.runId,
|
|
100
|
+
type: "test",
|
|
101
|
+
checkId: request.checkId,
|
|
102
|
+
command: [spec.executable, ...spec.argumentTemplate],
|
|
103
|
+
cwd: workspace,
|
|
104
|
+
result,
|
|
105
|
+
exitCode: executed.code,
|
|
106
|
+
targetDigest,
|
|
107
|
+
inputDigests: {},
|
|
108
|
+
...enforceOutputPolicy(spec, bounded(executed.stdout, spec.limits.outputBytes), bounded(executed.stderr, spec.limits.outputBytes)),
|
|
109
|
+
artifactHashes: [],
|
|
110
|
+
provenance: { producer: "bizar-candidate-verify", source: "candidate-workspace", observedAt: new Date().toISOString() },
|
|
111
|
+
candidateId: candidate.id,
|
|
112
|
+
candidateTree: candidate.candidateTree,
|
|
113
|
+
checkSpecHash: specHash,
|
|
114
|
+
evaluatorHash: spec.evaluatorHash,
|
|
115
|
+
attemptGeneration,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
rmSync(workspace, { recursive: true, force: true });
|
|
120
|
+
}
|
|
121
|
+
// R007: re-verify owner before appending; journal may have advanced during execution.
|
|
122
|
+
const post = binding.journal.snapshot();
|
|
123
|
+
if (post.run)
|
|
124
|
+
assertOwner(post.run.nativeSessionId, binding.owner);
|
|
125
|
+
binding.journal.append({ type: "evidence.recorded", runId: state.run.runId, evidence }, `verify:${state.run.runId}:${request.checkId}:${evidence.id}`, state.run.revision);
|
|
126
|
+
return {
|
|
127
|
+
evidenceId: evidence.id,
|
|
128
|
+
checkId: request.checkId,
|
|
129
|
+
result: evidence.result,
|
|
130
|
+
exitCode: evidence.exitCode ?? (evidence.result === "passed" ? 0 : 1),
|
|
131
|
+
stdout: evidence.stdout ?? "",
|
|
132
|
+
stderr: evidence.stderr ?? "",
|
|
133
|
+
targetDigest,
|
|
134
|
+
baseTree: candidate.baseTree,
|
|
135
|
+
candidateId: candidate.id,
|
|
136
|
+
candidateTree: candidate.candidateTree,
|
|
137
|
+
checkSpecHash: specHash,
|
|
138
|
+
attemptGeneration,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=candidate-verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"candidate-verify.js","sourceRoot":"","sources":["../../src/services/candidate-verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/storage/journal.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElF,qBAAa,OAAO;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,YAAY,IAAI,EAAE,MAAM,EAAkG;IAE1H,OAAO,IAAI,YAAY,EAAE,CAKxB;IACD,QAAQ,IAAI,aAAa,CAAmC;IAE5D,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/storage/journal.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElF,qBAAa,OAAO;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,YAAY,IAAI,EAAE,MAAM,EAAkG;IAE1H,OAAO,IAAI,YAAY,EAAE,CAKxB;IACD,QAAQ,IAAI,aAAa,CAAmC;IAE5D,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,YAAY,CA6B3F;IAED,MAAM,CAAC,GAAG,EAAE,OAAO,kBAAkB,EAAE,WAAW,GAAG,YAAY,CAAkF;IACnJ,KAAK,IAAI,IAAI,CAAuF;CACrG;AAED,wBAAgB,aAAa,IAAI,OAAO,CAAiF"}
|
package/dist/storage/journal.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { closeSync, existsSync, fsyncSync, mkdirSync, openSync,
|
|
2
|
-
import { randomUUID } from "node:crypto";
|
|
1
|
+
import { closeSync, existsSync, fsyncSync, mkdirSync, openSync, writeSync } from "node:fs";
|
|
3
2
|
import { dirname, join } from "node:path";
|
|
4
|
-
import { ContractError
|
|
3
|
+
import { ContractError } from "../core/errors.js";
|
|
5
4
|
import { replay } from "../core/recovery.js";
|
|
6
5
|
import { ensureStateFile, readJournal, STATE_SCHEMA, checksumFor, MAX_JOURNAL_RECORD_BYTES } from "./migrations.js";
|
|
6
|
+
import { acquireLease } from "./lease.js";
|
|
7
7
|
export class Journal {
|
|
8
8
|
path;
|
|
9
9
|
lockPath;
|
|
@@ -21,17 +21,9 @@ export class Journal {
|
|
|
21
21
|
if (!idempotencyKey.trim())
|
|
22
22
|
throw new ContractError("Idempotency key is required");
|
|
23
23
|
mkdirSync(dirname(this.path), { recursive: true, mode: 0o700 });
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
const lease = acquireLease(this.lockPath, "Journal is already being advanced by another owner");
|
|
25
|
+
let stateFd;
|
|
26
26
|
try {
|
|
27
|
-
try {
|
|
28
|
-
fd = openSync(this.lockPath, "wx", 0o600);
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
throw new OwnershipError("Journal is already being advanced by another owner");
|
|
32
|
-
}
|
|
33
|
-
writeSync(fd, lockOwner, undefined, "utf8");
|
|
34
|
-
fsyncSync(fd);
|
|
35
27
|
ensureStateFile(this.path);
|
|
36
28
|
const existingEntries = this.entries();
|
|
37
29
|
const existing = existingEntries.find(entry => entry.idempotencyKey === idempotencyKey);
|
|
@@ -50,7 +42,6 @@ export class Journal {
|
|
|
50
42
|
const serialized = `${JSON.stringify(entry)}\n`;
|
|
51
43
|
if (Buffer.byteLength(serialized) > MAX_JOURNAL_RECORD_BYTES)
|
|
52
44
|
throw new ContractError("Journal event exceeds the configured size limit", { bytes: Buffer.byteLength(serialized), limit: MAX_JOURNAL_RECORD_BYTES });
|
|
53
|
-
let stateFd;
|
|
54
45
|
try {
|
|
55
46
|
stateFd = openSync(this.path, "a", 0o600);
|
|
56
47
|
const bytes = Buffer.from(serialized, "utf8");
|
|
@@ -66,13 +57,7 @@ export class Journal {
|
|
|
66
57
|
return entry;
|
|
67
58
|
}
|
|
68
59
|
finally {
|
|
69
|
-
|
|
70
|
-
closeSync(fd);
|
|
71
|
-
try {
|
|
72
|
-
if (existsSync(this.lockPath) && readFileSync(this.lockPath, "utf8") === lockOwner)
|
|
73
|
-
unlinkSync(this.lockPath);
|
|
74
|
-
}
|
|
75
|
-
catch { /* A replacement lock belongs to another owner. */ }
|
|
60
|
+
lease.release();
|
|
76
61
|
}
|
|
77
62
|
}
|
|
78
63
|
create(run) { return this.append({ type: "run.created", run }, `run-created:${run.runId}`); }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/storage/journal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/storage/journal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC3F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AACpH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,MAAM,OAAO,OAAO;IACT,IAAI,CAAS;IACL,QAAQ,CAAS;IAClC,YAAY,IAAY,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE1H,OAAO;QACL,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,IAAI,aAAa,CAAC,+CAA+C,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACzG,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IACD,QAAQ,KAAoB,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAE5D,MAAM,CAAC,KAAmB,EAAE,cAAsB,EAAE,gBAAyB;QAC3E,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,aAAa,CAAC,6BAA6B,CAAC,CAAC;QACnF,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,oDAAoD,CAAC,CAAC;QAChG,IAAI,OAA2B,CAAC;QAChC,IAAI,CAAC;YACH,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,KAAK,cAAc,CAAC,CAAC;YACxF,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;oBAAE,MAAM,IAAI,aAAa,CAAC,kDAAkD,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;gBAC9J,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,MAAM,IAAI,aAAa,CAAC,4CAA4C,CAAC,CAAC;YAC3L,IAAI,gBAAgB,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,gBAAgB;gBAAE,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,EAAE,gBAAgB,EAAE,cAAc,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YAClL,MAAM,oBAAoB,GAAmC,EAAE,QAAQ,EAAE,OAAO,CAAC,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC5O,MAAM,KAAK,GAAiB,EAAE,GAAG,oBAAoB,EAAE,QAAQ,EAAE,WAAW,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACrG,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;YAChD,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,wBAAwB;gBAAE,MAAM,IAAI,aAAa,CAAC,iDAAiD,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC;YACpN,IAAI,CAAC;gBACH,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAC9C,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,OAAO,MAAM,GAAG,KAAK,CAAC,MAAM;oBAAE,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;gBACjG,SAAS,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;oBAAS,CAAC;gBAAC,IAAI,OAAO,KAAK,SAAS;oBAAE,SAAS,CAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,CAAC;gBAAS,CAAC;YAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAAC,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,GAA2C,IAAkB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,eAAe,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACnJ,KAAK,KAAW,MAAM,IAAI,aAAa,CAAC,wDAAwD,CAAC,CAAC,CAAC,CAAC;CACrG;AAED,MAAM,UAAU,aAAa,KAAc,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface Lease {
|
|
2
|
+
release(): void;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Acquire a recoverable ownership-safe lease at `lockPath`.
|
|
6
|
+
*
|
|
7
|
+
* Layout:
|
|
8
|
+
* - `lockPath` is a symlink that atomically names the current owner receipt. A clean
|
|
9
|
+
* release deletes both the symlink and the receipt, so the lock is naturally free.
|
|
10
|
+
* - The owner receipt records `{ token, pid }`. While held, recovery may rotate the
|
|
11
|
+
* symlink only when the recorded process is provably gone (`kill 0` -> `ESRCH`).
|
|
12
|
+
* - Release never deletes a symlink whose target is no longer our receipt, so a delayed
|
|
13
|
+
* owner cannot remove a successor's pointer.
|
|
14
|
+
*/
|
|
15
|
+
export declare function acquireLease(lockPath: string, contentionMessage: string): Lease;
|
|
16
|
+
//# sourceMappingURL=lease.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lease.d.ts","sourceRoot":"","sources":["../../src/storage/lease.ts"],"names":[],"mappings":"AAiCA,MAAM,WAAW,KAAK;IACpB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,KAAK,CA2C/E"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { closeSync, fsyncSync, openSync, readFileSync, readlinkSync, renameSync, symlinkSync, unlinkSync, writeSync } from "node:fs";
|
|
2
|
+
import { basename, dirname, join } from "node:path";
|
|
3
|
+
import { randomUUID } from "node:crypto";
|
|
4
|
+
import { OwnershipError } from "../core/errors.js";
|
|
5
|
+
// Linux: /proc/<pid>/stat field 22 is the process start time (ticks since boot).
|
|
6
|
+
// Split-aware: comm may contain spaces/parens, so parse after the last ')'.
|
|
7
|
+
function processStarttime(pid) {
|
|
8
|
+
try {
|
|
9
|
+
const stat = readFileSync(`/proc/${pid}/stat`, "utf8");
|
|
10
|
+
const afterComm = stat.slice(stat.lastIndexOf(")") + 2);
|
|
11
|
+
const fields = afterComm.split(" ");
|
|
12
|
+
return fields[20]; // field 22 overall; after stripping pid+comm, index 20
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function ownerIsGone(owner) {
|
|
19
|
+
if (!Number.isInteger(owner.pid) || owner.pid <= 0)
|
|
20
|
+
return false;
|
|
21
|
+
try {
|
|
22
|
+
process.kill(owner.pid, 0);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
if (error.code === "ESRCH")
|
|
26
|
+
return true;
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
// PID alive: if we recorded a starttime and it differs, the original owner died
|
|
30
|
+
// and the PID was recycled — treat as gone.
|
|
31
|
+
if (owner.starttime !== undefined) {
|
|
32
|
+
const current = processStarttime(owner.pid);
|
|
33
|
+
if (current !== undefined && current !== owner.starttime)
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Acquire a recoverable ownership-safe lease at `lockPath`.
|
|
40
|
+
*
|
|
41
|
+
* Layout:
|
|
42
|
+
* - `lockPath` is a symlink that atomically names the current owner receipt. A clean
|
|
43
|
+
* release deletes both the symlink and the receipt, so the lock is naturally free.
|
|
44
|
+
* - The owner receipt records `{ token, pid }`. While held, recovery may rotate the
|
|
45
|
+
* symlink only when the recorded process is provably gone (`kill 0` -> `ESRCH`).
|
|
46
|
+
* - Release never deletes a symlink whose target is no longer our receipt, so a delayed
|
|
47
|
+
* owner cannot remove a successor's pointer.
|
|
48
|
+
*/
|
|
49
|
+
export function acquireLease(lockPath, contentionMessage) {
|
|
50
|
+
const owner = { token: randomUUID(), pid: process.pid, starttime: processStarttime(process.pid) };
|
|
51
|
+
const ownerBasename = `.${basename(lockPath)}.${owner.token}.owner`;
|
|
52
|
+
const ownerPath = join(dirname(lockPath), ownerBasename);
|
|
53
|
+
let ownerFd;
|
|
54
|
+
try {
|
|
55
|
+
ownerFd = openSync(ownerPath, "wx", 0o600);
|
|
56
|
+
writeSync(ownerFd, JSON.stringify(owner), undefined, "utf8");
|
|
57
|
+
fsyncSync(ownerFd);
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
if (ownerFd !== undefined)
|
|
61
|
+
closeSync(ownerFd);
|
|
62
|
+
}
|
|
63
|
+
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
64
|
+
try {
|
|
65
|
+
symlinkSync(ownerBasename, lockPath);
|
|
66
|
+
let released = false;
|
|
67
|
+
return {
|
|
68
|
+
release() {
|
|
69
|
+
if (released)
|
|
70
|
+
return;
|
|
71
|
+
released = true;
|
|
72
|
+
removeOwner(ownerPath);
|
|
73
|
+
let pointer;
|
|
74
|
+
try {
|
|
75
|
+
pointer = readlinkSync(lockPath);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
if (error.code === "ENOENT")
|
|
79
|
+
return;
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
if (pointer !== ownerBasename)
|
|
83
|
+
return;
|
|
84
|
+
try {
|
|
85
|
+
unlinkSync(lockPath);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
if (error.code !== "ENOENT")
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
const recovered = error.code === "EEXIST" && recoverCrashedLease(lockPath);
|
|
96
|
+
if (!recovered) {
|
|
97
|
+
removeOwner(ownerPath);
|
|
98
|
+
throw new OwnershipError(contentionMessage);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
removeOwner(ownerPath);
|
|
103
|
+
throw new OwnershipError(contentionMessage);
|
|
104
|
+
}
|
|
105
|
+
function removeOwner(ownerPath) {
|
|
106
|
+
try {
|
|
107
|
+
unlinkSync(ownerPath);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
if (error.code !== "ENOENT")
|
|
111
|
+
throw error;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Rotate the lease symlink only after proving its recorded process is gone. Recovery is
|
|
116
|
+
* serialized by a recoverable lease-style guard (itself a symlink + receipt with the same
|
|
117
|
+
* dead-PID recovery) so a crashed contender cannot wedge recovery forever: an `wx` file
|
|
118
|
+
* guard would be unrecoverable, R009. Whichever contender loses the guard sees no stale
|
|
119
|
+
* pointer to recover.
|
|
120
|
+
*/
|
|
121
|
+
function recoverCrashedLease(lockPath) {
|
|
122
|
+
const guardPath = `${lockPath}.recovering`;
|
|
123
|
+
const guardToken = randomUUID();
|
|
124
|
+
const guardBasename = `.${basename(guardPath)}.${guardToken}.owner`;
|
|
125
|
+
const guardOwnerPath = join(dirname(guardPath), guardBasename);
|
|
126
|
+
const guardOwner = { token: guardToken, pid: process.pid, starttime: processStarttime(process.pid) };
|
|
127
|
+
let guardFd;
|
|
128
|
+
try {
|
|
129
|
+
guardFd = openSync(guardOwnerPath, "wx", 0o600);
|
|
130
|
+
writeSync(guardFd, JSON.stringify(guardOwner), undefined, "utf8");
|
|
131
|
+
fsyncSync(guardFd);
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
if (guardFd !== undefined)
|
|
135
|
+
closeSync(guardFd);
|
|
136
|
+
}
|
|
137
|
+
let guardHeld = false;
|
|
138
|
+
try {
|
|
139
|
+
try {
|
|
140
|
+
symlinkSync(guardBasename, guardPath);
|
|
141
|
+
guardHeld = true;
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
if (error.code !== "EEXIST")
|
|
145
|
+
throw error;
|
|
146
|
+
if (!recoverGuardLease(guardPath))
|
|
147
|
+
return false;
|
|
148
|
+
try {
|
|
149
|
+
symlinkSync(guardBasename, guardPath);
|
|
150
|
+
guardHeld = true;
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
let target;
|
|
157
|
+
try {
|
|
158
|
+
target = readlinkSync(lockPath);
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
if (error.code === "ENOENT")
|
|
162
|
+
return true;
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
if (target.includes("/") || target === "." || target === "..")
|
|
166
|
+
return false;
|
|
167
|
+
let owner;
|
|
168
|
+
try {
|
|
169
|
+
owner = JSON.parse(readFileSync(join(dirname(lockPath), target), "utf8"));
|
|
170
|
+
}
|
|
171
|
+
catch { /* missing or malformed receipt; not safely recoverable */ }
|
|
172
|
+
if (!owner || !ownerIsGone(owner))
|
|
173
|
+
return false;
|
|
174
|
+
const retired = `${lockPath}.retired-${randomUUID()}`;
|
|
175
|
+
try {
|
|
176
|
+
renameSync(lockPath, retired);
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
if (error.code === "ENOENT")
|
|
180
|
+
return true;
|
|
181
|
+
throw error;
|
|
182
|
+
}
|
|
183
|
+
try {
|
|
184
|
+
unlinkSync(retired);
|
|
185
|
+
}
|
|
186
|
+
catch { /* retired symlink may target a deleted receipt */ }
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
finally {
|
|
190
|
+
if (guardHeld) {
|
|
191
|
+
try {
|
|
192
|
+
unlinkSync(guardPath);
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
if (error.code !== "ENOENT")
|
|
196
|
+
throw error;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
removeOwner(guardOwnerPath);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// One bounded recovery pass for the guard lease itself: retire the pointer only when its
|
|
203
|
+
// owner is provably gone. Mirrors recoverCrashedLease but without recursing.
|
|
204
|
+
function recoverGuardLease(guardPath) {
|
|
205
|
+
let target;
|
|
206
|
+
try {
|
|
207
|
+
target = readlinkSync(guardPath);
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
if (target.includes("/") || target === "." || target === "..")
|
|
213
|
+
return false;
|
|
214
|
+
let owner;
|
|
215
|
+
try {
|
|
216
|
+
owner = JSON.parse(readFileSync(join(dirname(guardPath), target), "utf8"));
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
if (!owner || !ownerIsGone(owner))
|
|
222
|
+
return false;
|
|
223
|
+
const retired = `${guardPath}.retired-${randomUUID()}`;
|
|
224
|
+
try {
|
|
225
|
+
renameSync(guardPath, retired);
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
try {
|
|
231
|
+
unlinkSync(retired);
|
|
232
|
+
}
|
|
233
|
+
catch { /* best effort */ }
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=lease.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lease.js","sourceRoot":"","sources":["../../src/storage/lease.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACrI,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAInD,iFAAiF;AACjF,4EAA4E;AAC5E,SAAS,gBAAgB,CAAC,GAAW;IACnC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,uDAAuD;IAC5E,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;AAC/B,CAAC;AAED,SAAS,WAAW,CAAC,KAAiB;IACpC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACjE,IAAI,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QAC1D,IAAK,KAA+B,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,gFAAgF;IAChF,4CAA4C;IAC5C,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;IACxE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAMD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,iBAAyB;IACtE,MAAM,KAAK,GAAe,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9G,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,KAAK,QAAQ,CAAC;IACpE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC;IACzD,IAAI,OAA2B,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7D,SAAS,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;YAAS,CAAC;QAAC,IAAI,OAAO,KAAK,SAAS;YAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IAE5D,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC;YACH,WAAW,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YACrC,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,OAAO;gBACL,OAAO;oBACL,IAAI,QAAQ;wBAAE,OAAO;oBACrB,QAAQ,GAAG,IAAI,CAAC;oBAChB,WAAW,CAAC,SAAS,CAAC,CAAC;oBACvB,IAAI,OAAe,CAAC;oBACpB,IAAI,CAAC;wBAAC,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;oBAAC,CAAC;oBACzC,OAAO,KAAc,EAAE,CAAC;wBACtB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;4BAAE,OAAO;wBAC/D,MAAM,KAAK,CAAC;oBACd,CAAC;oBACD,IAAI,OAAO,KAAK,aAAa;wBAAE,OAAO;oBACtC,IAAI,CAAC;wBAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBAAC,CAAC;oBAC7B,OAAO,KAAc,EAAE,CAAC;wBACtB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;4BAAE,MAAM,KAAK,CAAC;oBACtE,CAAC;gBACH,CAAC;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,SAAS,GAAI,KAA+B,CAAC,IAAI,KAAK,QAAQ,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YACtG,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,WAAW,CAAC,SAAS,CAAC,CAAC;gBACvB,MAAM,IAAI,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IACD,WAAW,CAAC,SAAS,CAAC,CAAC;IACvB,MAAM,IAAI,cAAc,CAAC,iBAAiB,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,WAAW,CAAC,SAAiB;IACpC,IAAI,CAAC;QAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAAC,CAAC;IAC9B,OAAO,KAAc,EAAE,CAAC;QACtB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC;IACtE,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,MAAM,SAAS,GAAG,GAAG,QAAQ,aAAa,CAAC;IAC3C,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;IAChC,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,UAAU,QAAQ,CAAC;IACpE,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAe,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IACjH,IAAI,OAA2B,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,cAAc,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAChD,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAClE,SAAS,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;YAAS,CAAC;QAAC,IAAI,OAAO,KAAK,SAAS;YAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IAE5D,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,CAAC;QACH,IAAI,CAAC;YAAC,WAAW,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YAAC,SAAS,GAAG,IAAI,CAAC;QAAC,CAAC;QAChE,OAAO,KAAc,EAAE,CAAC;YACtB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;YACpE,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChD,IAAI,CAAC;gBAAC,WAAW,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;gBAAC,SAAS,GAAG,IAAI,CAAC;YAAC,CAAC;YAChE,MAAM,CAAC;gBAAC,OAAO,KAAK,CAAC;YAAC,CAAC;QACzB,CAAC;QAED,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YAAC,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QACxC,OAAO,KAAc,EAAE,CAAC;YACtB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAE5E,IAAI,KAA6B,CAAC;QAClC,IAAI,CAAC;YAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAe,CAAC;QAAC,CAAC;QAChG,MAAM,CAAC,CAAC,0DAA0D,CAAC,CAAC;QACpE,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAEhD,MAAM,OAAO,GAAG,GAAG,QAAQ,YAAY,UAAU,EAAE,EAAE,CAAC;QACtD,IAAI,CAAC;YAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAAC,CAAC;QACtC,OAAO,KAAc,EAAE,CAAC;YACtB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACpE,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC;YAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,kDAAkD,CAAC,CAAC;QACzF,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC;gBAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAAC,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACrD,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,KAAK,CAAC;YACtE,CAAC;QACH,CAAC;QACD,WAAW,CAAC,cAAc,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,yFAAyF;AACzF,6EAA6E;AAC7E,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QAAC,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAAC,CAAC;IACzC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IACvB,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5E,IAAI,KAA6B,CAAC;IAClC,IAAI,CAAC;QAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAe,CAAC;IAAC,CAAC;IACjG,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IACvB,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,OAAO,GAAG,GAAG,SAAS,YAAY,UAAU,EAAE,EAAE,CAAC;IACvD,IAAI,CAAC;QAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAAC,CAAC;IACvC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IACvB,IAAI,CAAC;QAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-identity.d.ts","sourceRoot":"","sources":["../../src/storage/repository-identity.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,kBAAkB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;CAAE;AAElH,wBAAgB,kBAAkB,CAAC,GAAG,SAAgB,GAAG,kBAAkB,CAQ1E;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAAoE;AAsBnI,wBAAgB,iBAAiB,CAAC,GAAG,SAAgB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"repository-identity.d.ts","sourceRoot":"","sources":["../../src/storage/repository-identity.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,kBAAkB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;CAAE;AAElH,wBAAgB,kBAAkB,CAAC,GAAG,SAAgB,GAAG,kBAAkB,CAQ1E;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAAoE;AAsBnI,wBAAgB,iBAAiB,CAAC,GAAG,SAAgB,GAAG,MAAM,CAsB7D;AAED,wBAAgB,OAAO,CAAC,GAAG,SAAgB,GAAG,OAAO,CAEpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-identity.js","sourceRoot":"","sources":["../../src/storage/repository-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,IAAc,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAClJ,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,IAAc,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;AAI1H,MAAM,UAAU,kBAAkB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACpD,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACxE,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,IAAI,CAAC;QAAC,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,6CAA6C,CAAC,CAAC;IACxH,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAA4B,IAAY,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;AAEnI,SAAS,YAAY,CAAC,IAAmC,EAAE,KAAsB;IAC/E,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACrE,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,oBAAoB,EAAE,IAAI,CAAC,CAAC,CAAC;IACpF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,SAAS;QAClC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1C,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,IAAI,KAAK,KAAK,MAAM,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC5F,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACnD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACnF,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAC/F,KAAK,MAAM,YAAY,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7B,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC9B,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAW,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3B,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,EAAE,eAAe,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACzC,OAAO,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACxH,CAAC"}
|
|
1
|
+
{"version":3,"file":"repository-identity.js","sourceRoot":"","sources":["../../src/storage/repository-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,IAAc,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAClJ,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,IAAc,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;AAI1H,MAAM,UAAU,kBAAkB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACpD,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACxE,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,IAAI,CAAC;QAAC,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,6CAA6C,CAAC,CAAC;IACxH,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAA4B,IAAY,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;AAEnI,SAAS,YAAY,CAAC,IAAmC,EAAE,KAAsB;IAC/E,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACrE,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,oBAAoB,EAAE,IAAI,CAAC,CAAC,CAAC;IACpF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,SAAS;QAClC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1C,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,IAAI,KAAK,KAAK,MAAM,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC5F,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACnD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACnF,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAC/F,KAAK,MAAM,YAAY,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7B,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC9B,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAW,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3B,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC5D,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,EAAE,eAAe,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACzC,OAAO,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACxH,CAAC"}
|