codex-orchestrator 2.0.10 → 2.0.11
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/CHANGELOG.md +37 -0
- package/README.md +26 -1
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/v2/acceptance-proof.d.ts +29 -16
- package/dist/src/v2/acceptance-proof.d.ts.map +1 -1
- package/dist/src/v2/acceptance-proof.js +159 -129
- package/dist/src/v2/acceptance-proof.js.map +1 -1
- package/dist/src/v2/adapters/command.d.ts +1 -0
- package/dist/src/v2/adapters/command.d.ts.map +1 -1
- package/dist/src/v2/adapters/command.js +1 -1
- package/dist/src/v2/adapters/command.js.map +1 -1
- package/dist/src/v2/adapters/gh-pull-request-adapter.js +1 -0
- package/dist/src/v2/adapters/gh-pull-request-adapter.js.map +1 -1
- package/dist/src/v2/adapters/pull-requests.d.ts +1 -0
- package/dist/src/v2/adapters/pull-requests.d.ts.map +1 -1
- package/dist/src/v2/adapters/pull-requests.js +1 -0
- package/dist/src/v2/adapters/pull-requests.js.map +1 -1
- package/dist/src/v2/adapters/worktree.js +3 -3
- package/dist/src/v2/adapters/worktree.js.map +1 -1
- package/dist/src/v2/atomic-store.d.ts +15 -0
- package/dist/src/v2/atomic-store.d.ts.map +1 -1
- package/dist/src/v2/atomic-store.js +55 -8
- package/dist/src/v2/atomic-store.js.map +1 -1
- package/dist/src/v2/candidate.d.ts +152 -0
- package/dist/src/v2/candidate.d.ts.map +1 -0
- package/dist/src/v2/candidate.js +129 -0
- package/dist/src/v2/candidate.js.map +1 -0
- package/dist/src/v2/checked-change.d.ts +37 -6
- package/dist/src/v2/checked-change.d.ts.map +1 -1
- package/dist/src/v2/checked-change.js +71 -0
- package/dist/src/v2/checked-change.js.map +1 -1
- package/dist/src/v2/cli.d.ts +6 -0
- package/dist/src/v2/cli.d.ts.map +1 -1
- package/dist/src/v2/cli.js +57 -21
- package/dist/src/v2/cli.js.map +1 -1
- package/dist/src/v2/codex-process.d.ts +1 -0
- package/dist/src/v2/codex-process.d.ts.map +1 -1
- package/dist/src/v2/codex-process.js +12 -1
- package/dist/src/v2/codex-process.js.map +1 -1
- package/dist/src/v2/contained-report-operation.d.ts +196 -30
- package/dist/src/v2/contained-report-operation.d.ts.map +1 -1
- package/dist/src/v2/contained-report-operation.js +464 -150
- package/dist/src/v2/contained-report-operation.js.map +1 -1
- package/dist/src/v2/direct-delivery.d.ts +10 -28
- package/dist/src/v2/direct-delivery.d.ts.map +1 -1
- package/dist/src/v2/direct-delivery.js +44 -114
- package/dist/src/v2/direct-delivery.js.map +1 -1
- package/dist/src/v2/implementation-reviewer.d.ts +4 -24
- package/dist/src/v2/implementation-reviewer.d.ts.map +1 -1
- package/dist/src/v2/implementation-reviewer.js +29 -35
- package/dist/src/v2/implementation-reviewer.js.map +1 -1
- package/dist/src/v2/owner-control-lock.d.ts +13 -1
- package/dist/src/v2/owner-control-lock.d.ts.map +1 -1
- package/dist/src/v2/owner-control-lock.js +66 -7
- package/dist/src/v2/owner-control-lock.js.map +1 -1
- package/dist/src/v2/proof-report.d.ts +2 -1
- package/dist/src/v2/proof-report.d.ts.map +1 -1
- package/dist/src/v2/proof-report.js +6 -40
- package/dist/src/v2/proof-report.js.map +1 -1
- package/dist/src/v2/proof-store.d.ts +19 -7
- package/dist/src/v2/proof-store.d.ts.map +1 -1
- package/dist/src/v2/proof-store.js +162 -41
- package/dist/src/v2/proof-store.js.map +1 -1
- package/dist/src/v2/review-feedback-coordinator.d.ts +7 -1
- package/dist/src/v2/review-feedback-coordinator.d.ts.map +1 -1
- package/dist/src/v2/review-feedback-coordinator.js +97 -70
- package/dist/src/v2/review-feedback-coordinator.js.map +1 -1
- package/dist/src/v2/review-feedback.d.ts +0 -18
- package/dist/src/v2/review-feedback.d.ts.map +1 -1
- package/dist/src/v2/review-feedback.js +9 -34
- package/dist/src/v2/review-feedback.js.map +1 -1
- package/dist/src/v2/route-coordinator.d.ts +7 -12
- package/dist/src/v2/route-coordinator.d.ts.map +1 -1
- package/dist/src/v2/route-coordinator.js +33 -128
- package/dist/src/v2/route-coordinator.js.map +1 -1
- package/dist/src/v2/route-decision.d.ts +0 -9
- package/dist/src/v2/route-decision.d.ts.map +1 -1
- package/dist/src/v2/route-decision.js +7 -27
- package/dist/src/v2/route-decision.js.map +1 -1
- package/dist/src/v2/run-issue.d.ts +64 -26
- package/dist/src/v2/run-issue.d.ts.map +1 -1
- package/dist/src/v2/run-issue.js +1298 -620
- package/dist/src/v2/run-issue.js.map +1 -1
- package/dist/src/v2/run-store.d.ts +39 -25
- package/dist/src/v2/run-store.d.ts.map +1 -1
- package/dist/src/v2/run-store.js +469 -88
- package/dist/src/v2/run-store.js.map +1 -1
- package/dist/src/v2/runtime.d.ts +61 -36
- package/dist/src/v2/runtime.d.ts.map +1 -1
- package/dist/src/v2/runtime.js +992 -402
- package/dist/src/v2/runtime.js.map +1 -1
- package/dist/src/v2/spec-coordinator.d.ts +16 -28
- package/dist/src/v2/spec-coordinator.d.ts.map +1 -1
- package/dist/src/v2/spec-coordinator.js +81 -43
- package/dist/src/v2/spec-coordinator.js.map +1 -1
- package/dist/src/v2/spec-delivery.d.ts +3 -34
- package/dist/src/v2/spec-delivery.d.ts.map +1 -1
- package/dist/src/v2/spec-delivery.js +42 -107
- package/dist/src/v2/spec-delivery.js.map +1 -1
- package/docs/deep-dive.md +52 -14
- package/internal-workflow/evals/coding-skill-evals.json +58 -17
- package/internal-workflow/manifest.json +1 -1
- package/internal-workflow/schemas/proof-report-v1.json +1 -1
- package/internal-workflow/skills/code-review/SKILL.md +18 -0
- package/internal-workflow/skills/spec-implementer/SKILL.md +8 -1
- package/package.json +1 -1
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
import type { ContainedReportOperation,
|
|
2
|
-
import type
|
|
1
|
+
import type { ContainedReportOperation, DurableReportInvocationState } from './contained-report-operation.js';
|
|
2
|
+
import { type CodeReviewDefectV1, type CodeReviewReportV1, type ReviewMode, type ReviewOperation } from './code-review-report.js';
|
|
3
3
|
import type { WorkflowGenerationReceipt } from './workflow-assets.js';
|
|
4
|
-
export interface ImplementationReviewInvocation {
|
|
5
|
-
attemptId: string;
|
|
6
|
-
operation: ReviewOperation;
|
|
7
|
-
mode: ReviewMode;
|
|
8
|
-
reviewerSessionId: string;
|
|
9
|
-
targetRevision: number;
|
|
10
|
-
targetFingerprint: string;
|
|
11
|
-
closureRequestSha256: string | null;
|
|
12
|
-
}
|
|
13
4
|
export interface ImplementationReviewerInput {
|
|
14
5
|
runId: string;
|
|
15
6
|
worktreePath: string;
|
|
@@ -36,11 +27,7 @@ export interface ImplementationReviewerInput {
|
|
|
36
27
|
validationDiagnostic: string | null;
|
|
37
28
|
originalReportBytes: Buffer | null;
|
|
38
29
|
signal: AbortSignal;
|
|
39
|
-
|
|
40
|
-
onLaunched(invocation: ImplementationReviewInvocation & {
|
|
41
|
-
pid: number;
|
|
42
|
-
processGroupId: number;
|
|
43
|
-
}): Promise<void>;
|
|
30
|
+
invocationState: DurableReportInvocationState;
|
|
44
31
|
}
|
|
45
32
|
export type ImplementationReviewerResult = {
|
|
46
33
|
kind: 'completed';
|
|
@@ -57,13 +44,7 @@ export type ImplementationReviewerResult = {
|
|
|
57
44
|
originalReportBytes: Buffer;
|
|
58
45
|
} | {
|
|
59
46
|
kind: 'safe-halt';
|
|
60
|
-
|
|
61
|
-
pid: number;
|
|
62
|
-
processGroupId: number;
|
|
63
|
-
startedAt: string;
|
|
64
|
-
baseline: ReportOnlyWorktreeSnapshot;
|
|
65
|
-
};
|
|
66
|
-
waitForAbsence(): Promise<void>;
|
|
47
|
+
code: string;
|
|
67
48
|
} | {
|
|
68
49
|
kind: 'cancelled';
|
|
69
50
|
} | {
|
|
@@ -74,7 +55,6 @@ export declare class ContainedImplementationReviewer {
|
|
|
74
55
|
private readonly dependencies;
|
|
75
56
|
constructor(dependencies: {
|
|
76
57
|
operation: ContainedReportOperation;
|
|
77
|
-
createAttemptId?: () => string;
|
|
78
58
|
});
|
|
79
59
|
run(input: ImplementationReviewerInput): Promise<ImplementationReviewerResult>;
|
|
80
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implementation-reviewer.d.ts","sourceRoot":"","sources":["../../../src/v2/implementation-reviewer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAAkC,
|
|
1
|
+
{"version":3,"file":"implementation-reviewer.d.ts","sourceRoot":"","sources":["../../../src/v2/implementation-reviewer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAAkC,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC9I,OAAO,EAAkD,KAAK,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAElL,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAKtE,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,eAAe,CAAC;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,OAAO,EAAE,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,mBAAmB,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACxE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,EAAE,yBAAyB,CAAC;IAC9C,UAAU,EAAE,OAAO,CAAC;IACpB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,eAAe,EAAE,4BAA4B,CAAC;CAC/C;AAED,MAAM,MAAM,4BAA4B,GACpC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC5F;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,SAAS,EAAE,IAAI,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAA;CAAE,GACzG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7C,qBAAa,+BAA+B;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE;QAAE,SAAS,EAAE,wBAAwB,CAAA;KAAE;IAE5E,GAAG,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,4BAA4B,CAAC;CAqCrF"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { createHash
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
2
|
import { canonicalJson, containsCredentialEvidence } from './containment.js';
|
|
3
|
+
import { hashCodeReviewReport, validateCodeReviewReport } from './code-review-report.js';
|
|
4
|
+
import { decodeAgentReportForValidation } from './report-envelope.js';
|
|
3
5
|
const SHA256 = /^[0-9a-f]{64}$/u;
|
|
4
6
|
const MAX_CAPSULE_BYTES = 1024 * 1024;
|
|
5
7
|
export class ContainedImplementationReviewer {
|
|
@@ -8,14 +10,11 @@ export class ContainedImplementationReviewer {
|
|
|
8
10
|
this.dependencies = dependencies;
|
|
9
11
|
}
|
|
10
12
|
async run(input) {
|
|
11
|
-
let attemptId;
|
|
12
13
|
let promptFacts;
|
|
13
14
|
try {
|
|
14
|
-
attemptId = (this.dependencies.createAttemptId ?? randomUUID)();
|
|
15
|
-
assertText(attemptId, 'review attempt ID');
|
|
16
15
|
assertText(input.reviewerSessionId, 'reviewer session ID');
|
|
17
16
|
assertText(input.implementationAttemptId, 'implementation attempt ID');
|
|
18
|
-
if (
|
|
17
|
+
if (input.reviewerSessionId === input.implementationAttemptId) {
|
|
19
18
|
throw new Error('reviewer identity is not independent');
|
|
20
19
|
}
|
|
21
20
|
assertPositiveInteger(input.targetRevision, 'target revision');
|
|
@@ -32,35 +31,23 @@ export class ContainedImplementationReviewer {
|
|
|
32
31
|
code: safeCode(error, input.repairOnly ? 'review-report-repair-input-invalid' : 'review-input-invalid'),
|
|
33
32
|
};
|
|
34
33
|
}
|
|
35
|
-
const invocation = {
|
|
36
|
-
attemptId, operation: input.operation, mode: input.mode, reviewerSessionId: input.reviewerSessionId,
|
|
37
|
-
targetRevision: input.targetRevision, targetFingerprint: input.targetFingerprint,
|
|
38
|
-
closureRequestSha256: input.closureRequestSha256,
|
|
39
|
-
};
|
|
40
34
|
let result;
|
|
41
35
|
try {
|
|
42
36
|
result = await this.dependencies.operation.run({
|
|
43
37
|
operation: input.operation,
|
|
44
|
-
attemptId,
|
|
45
38
|
runId: input.runId,
|
|
46
39
|
worktreePath: input.worktreePath,
|
|
47
40
|
workflowGeneration: structuredClone(input.workflowGeneration),
|
|
48
41
|
promptFacts,
|
|
49
42
|
signal: input.signal,
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
targetFingerprint: input.targetFingerprint, reviewerSessionId: input.reviewerSessionId,
|
|
53
|
-
closureRequestSha256: input.closureRequestSha256,
|
|
54
|
-
fixedRepairFindingIds: input.fixedRepairFindings.map((finding) => finding.id).sort(),
|
|
55
|
-
},
|
|
56
|
-
onPrepared: () => input.onPrepared(structuredClone(invocation)),
|
|
57
|
-
onLaunched: ({ pid, processGroupId }) => input.onLaunched({ ...structuredClone(invocation), pid, processGroupId }),
|
|
43
|
+
invocationState: input.invocationState,
|
|
44
|
+
forbiddenAttemptIds: [input.implementationAttemptId, input.reviewerSessionId],
|
|
58
45
|
});
|
|
59
46
|
}
|
|
60
47
|
catch {
|
|
61
48
|
return { kind: 'internal-error', code: 'review-operation-threw' };
|
|
62
49
|
}
|
|
63
|
-
return mapResult(result);
|
|
50
|
+
return mapResult(result, input);
|
|
64
51
|
}
|
|
65
52
|
}
|
|
66
53
|
function buildCapsule(input) {
|
|
@@ -103,26 +90,33 @@ function rejectUnexpectedRepairInput(hash, diagnostic, bytes) {
|
|
|
103
90
|
throw new Error('Full/Closure review cannot carry report repair bytes');
|
|
104
91
|
return null;
|
|
105
92
|
}
|
|
106
|
-
function mapResult(result) {
|
|
107
|
-
if (result.status === 'completed')
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
93
|
+
function mapResult(result, input) {
|
|
94
|
+
if (result.status === 'completed') {
|
|
95
|
+
try {
|
|
96
|
+
const report = validateCodeReviewReport(decodeAgentReportForValidation(result.reportBytes), {
|
|
97
|
+
operation: input.operation, mode: input.mode, targetRevision: input.targetRevision,
|
|
98
|
+
targetFingerprint: input.targetFingerprint, reviewerSessionId: input.reviewerSessionId,
|
|
99
|
+
closureRequestSha256: input.closureRequestSha256,
|
|
100
|
+
fixedRepairFindingIds: input.fixedRepairFindings.map((finding) => finding.id).sort(),
|
|
101
|
+
});
|
|
102
|
+
return { kind: 'completed', attemptId: result.attemptId, report, artifactSha256: hashCodeReviewReport(report) };
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
const text = result.reportBytes.toString('utf8');
|
|
106
|
+
if (!Buffer.from(text, 'utf8').equals(result.reportBytes) || containsCredentialEvidence(text)) {
|
|
107
|
+
return { kind: 'internal-error', code: 'review-report-invalid' };
|
|
108
|
+
}
|
|
109
|
+
return { kind: 'report-invalid', diagnostic: error instanceof Error ? error.message : 'review report invalid',
|
|
110
|
+
originalReportSha256: result.reportSha256, originalReportBytes: Buffer.from(result.reportBytes) };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
112
113
|
if (result.status === 'retryable')
|
|
113
114
|
return { kind: 'transport-failed', resumable: true };
|
|
114
115
|
if (result.status === 'safe-halt')
|
|
115
|
-
return { kind: 'safe-halt',
|
|
116
|
+
return { kind: 'safe-halt', code: result.code };
|
|
116
117
|
if (result.status === 'cancelled')
|
|
117
118
|
return { kind: 'cancelled' };
|
|
118
|
-
|
|
119
|
-
return {
|
|
120
|
-
kind: 'report-invalid',
|
|
121
|
-
diagnostic: result.findings[0] ?? 'review report is invalid',
|
|
122
|
-
originalReportSha256: result.repairInput.originalReportSha256,
|
|
123
|
-
originalReportBytes: Buffer.from(result.repairInput.originalReportBytes),
|
|
124
|
-
};
|
|
125
|
-
return { kind: 'internal-error', code: result.status === 'invalid' ? 'review-report-invalid' : result.code };
|
|
119
|
+
return { kind: 'internal-error', code: result.code };
|
|
126
120
|
}
|
|
127
121
|
function sortedUnique(value, field) {
|
|
128
122
|
if (!Array.isArray(value) || value.length > 256 || value.some((item) => typeof item !== 'string' || item.length === 0))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implementation-reviewer.js","sourceRoot":"","sources":["../../../src/v2/implementation-reviewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"implementation-reviewer.js","sourceRoot":"","sources":["../../../src/v2/implementation-reviewer.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ interface OwnerControlRecordV1 {
|
|
|
5
5
|
host: string;
|
|
6
6
|
bootId: string;
|
|
7
7
|
pid: number;
|
|
8
|
+
processStartIdentity: string;
|
|
8
9
|
acquiredAt: string;
|
|
9
10
|
}
|
|
10
11
|
export declare function inspectOwnerControlLock(input: {
|
|
@@ -13,8 +14,9 @@ export declare function inspectOwnerControlLock(input: {
|
|
|
13
14
|
bootId: string;
|
|
14
15
|
host: string;
|
|
15
16
|
processAlive(pid: number): boolean;
|
|
17
|
+
inspectProcessIdentity?(pid: number): Promise<ProcessIdentityInspection>;
|
|
16
18
|
}): Promise<{
|
|
17
|
-
status: 'absent' | 'active' | 'ambiguous';
|
|
19
|
+
status: 'absent' | 'inactive' | 'active' | 'ambiguous';
|
|
18
20
|
reason?: string;
|
|
19
21
|
}>;
|
|
20
22
|
export declare class OwnerControlLockBlockedError extends Error {
|
|
@@ -30,6 +32,8 @@ export interface OwnerControlLockInput {
|
|
|
30
32
|
now(): string;
|
|
31
33
|
createToken(): string;
|
|
32
34
|
processAlive(pid: number): boolean;
|
|
35
|
+
processStartIdentity?: string;
|
|
36
|
+
inspectProcessIdentity?: (pid: number) => Promise<ProcessIdentityInspection>;
|
|
33
37
|
waitMs?: number;
|
|
34
38
|
pollMs?: number;
|
|
35
39
|
afterObservedOwner?(owner: Readonly<OwnerControlRecordV1>): Promise<void>;
|
|
@@ -37,5 +41,13 @@ export interface OwnerControlLockInput {
|
|
|
37
41
|
export declare function acquireOwnerControlLock(input: OwnerControlLockInput): Promise<{
|
|
38
42
|
release(): Promise<void>;
|
|
39
43
|
}>;
|
|
44
|
+
type ProcessIdentityInspection = {
|
|
45
|
+
status: 'present';
|
|
46
|
+
processStartIdentity: string;
|
|
47
|
+
} | {
|
|
48
|
+
status: 'absent';
|
|
49
|
+
} | {
|
|
50
|
+
status: 'unknown';
|
|
51
|
+
};
|
|
40
52
|
export {};
|
|
41
53
|
//# sourceMappingURL=owner-control-lock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owner-control-lock.d.ts","sourceRoot":"","sources":["../../../src/v2/owner-control-lock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"owner-control-lock.d.ts","sourceRoot":"","sources":["../../../src/v2/owner-control-lock.ts"],"names":[],"mappings":"AASA,UAAU,oBAAoB;IAC5B,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,oBAAoB,EAAE,MAAM,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,sBAAsB,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAC1E,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA2BvF;AAED,qBAAa,4BAA6B,SAAQ,KAAK;IACY,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,QAAQ;gBAAhG,OAAO,SAA4C,EAAW,IAAI,GAAE,iBAAiB,GAAG,QAAmB;CAIxH;AAED,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,IAAI,MAAM,CAAC;IACd,WAAW,IAAI,MAAM,CAAC;IACtB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3E;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC;IAAE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAgDjH;AAwDD,KAAK,yBAAyB,GAC1B;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,GACpB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
import { lstat, mkdir } from 'node:fs/promises';
|
|
1
|
+
import { execFile, spawn } from 'node:child_process';
|
|
2
|
+
import { lstat, mkdir, readFile } from 'node:fs/promises';
|
|
3
|
+
import { platform } from 'node:os';
|
|
3
4
|
import { join } from 'node:path';
|
|
4
5
|
import { canonicalJson, sha256 } from './containment.js';
|
|
5
6
|
const ZERO_OID = '0'.repeat(40);
|
|
@@ -35,9 +36,18 @@ export async function inspectOwnerControlLock(input) {
|
|
|
35
36
|
if (owner.canonicalRepository !== input.canonicalRepository || owner.host !== input.host || owner.bootId !== input.bootId) {
|
|
36
37
|
return { status: 'ambiguous', reason: 'Owner control identity is foreign or stale.' };
|
|
37
38
|
}
|
|
38
|
-
|
|
39
|
+
let observation;
|
|
40
|
+
try {
|
|
41
|
+
observation = await (input.inspectProcessIdentity ?? inspectProcessIdentity)(owner.pid);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return { status: 'ambiguous', reason: 'Owner control process identity is unavailable.' };
|
|
45
|
+
}
|
|
46
|
+
if (observation.status === 'unknown')
|
|
47
|
+
return { status: 'ambiguous', reason: 'Owner control process identity is unavailable.' };
|
|
48
|
+
return observation.status === 'present' && observation.processStartIdentity === owner.processStartIdentity
|
|
39
49
|
? { status: 'active' }
|
|
40
|
-
: { status: '
|
|
50
|
+
: { status: 'inactive' };
|
|
41
51
|
}
|
|
42
52
|
export class OwnerControlLockBlockedError extends Error {
|
|
43
53
|
kind;
|
|
@@ -57,6 +67,9 @@ export async function acquireOwnerControlLock(input) {
|
|
|
57
67
|
if (initialized.code !== 0)
|
|
58
68
|
throw new OwnerControlLockBlockedError('owner control store initialization failed');
|
|
59
69
|
const ref = `refs/codex-orchestrator/owners/${sha256(input.canonicalRepository)}`;
|
|
70
|
+
const processStartIdentity = input.processStartIdentity ?? await readProcessStartIdentity(input.pid);
|
|
71
|
+
if (!processStartIdentity)
|
|
72
|
+
throw new OwnerControlLockBlockedError('owner process identity is unavailable');
|
|
60
73
|
const owner = {
|
|
61
74
|
version: 1,
|
|
62
75
|
token: input.createToken(),
|
|
@@ -64,6 +77,7 @@ export async function acquireOwnerControlLock(input) {
|
|
|
64
77
|
host: input.host,
|
|
65
78
|
bootId: input.bootId,
|
|
66
79
|
pid: input.pid,
|
|
80
|
+
processStartIdentity,
|
|
67
81
|
acquiredAt: input.now(),
|
|
68
82
|
};
|
|
69
83
|
const blob = await writeBlob(controlGitDir, owner);
|
|
@@ -82,7 +96,16 @@ export async function acquireOwnerControlLock(input) {
|
|
|
82
96
|
|| observed.bootId !== input.bootId) {
|
|
83
97
|
throw new OwnerControlLockBlockedError();
|
|
84
98
|
}
|
|
85
|
-
|
|
99
|
+
let observation;
|
|
100
|
+
try {
|
|
101
|
+
observation = await (input.inspectProcessIdentity ?? inspectProcessIdentity)(observed.pid);
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
throw new OwnerControlLockBlockedError('owner process identity is unavailable');
|
|
105
|
+
}
|
|
106
|
+
if (observation.status === 'unknown')
|
|
107
|
+
throw new OwnerControlLockBlockedError('owner process identity is unavailable');
|
|
108
|
+
if (observation.status === 'present' && observation.processStartIdentity === observed.processStartIdentity) {
|
|
86
109
|
if (Date.now() - startedAt >= (input.waitMs ?? 5_000))
|
|
87
110
|
throw new OwnerControlLockBlockedError('owner control lock wait timed out', 'live-contention');
|
|
88
111
|
await delay(input.pollMs ?? 25);
|
|
@@ -140,18 +163,54 @@ function parseOwner(value) {
|
|
|
140
163
|
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
141
164
|
throw new Error('owner control record is invalid');
|
|
142
165
|
const keys = Object.keys(value).sort();
|
|
143
|
-
const expected = ['version', 'token', 'canonicalRepository', 'host', 'bootId', 'pid', 'acquiredAt'].sort();
|
|
166
|
+
const expected = ['version', 'token', 'canonicalRepository', 'host', 'bootId', 'pid', 'processStartIdentity', 'acquiredAt'].sort();
|
|
144
167
|
if (keys.length !== expected.length || keys.some((key, index) => key !== expected[index]))
|
|
145
168
|
throw new Error('owner control record keys are invalid');
|
|
146
169
|
const owner = value;
|
|
147
170
|
validateRepository(owner.canonicalRepository);
|
|
148
171
|
if (owner.version !== 1 || !owner.token || !owner.host || !owner.bootId
|
|
149
|
-
|| !Number.isSafeInteger(owner.pid) || owner.pid <= 0
|
|
172
|
+
|| !Number.isSafeInteger(owner.pid) || owner.pid <= 0 || !owner.processStartIdentity
|
|
150
173
|
|| Number.isNaN(Date.parse(owner.acquiredAt)) || new Date(owner.acquiredAt).toISOString() !== owner.acquiredAt) {
|
|
151
174
|
throw new Error('owner control record fields are invalid');
|
|
152
175
|
}
|
|
153
176
|
return owner;
|
|
154
177
|
}
|
|
178
|
+
async function inspectProcessIdentity(pid) {
|
|
179
|
+
const identity = await readProcessStartIdentity(pid);
|
|
180
|
+
if (identity)
|
|
181
|
+
return { status: 'present', processStartIdentity: identity };
|
|
182
|
+
try {
|
|
183
|
+
process.kill(pid, 0);
|
|
184
|
+
return { status: 'unknown' };
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
return isErrorCode(error, 'ESRCH') ? { status: 'absent' } : { status: 'unknown' };
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
async function readProcessStartIdentity(pid) {
|
|
191
|
+
if (!Number.isSafeInteger(pid) || pid <= 0)
|
|
192
|
+
return undefined;
|
|
193
|
+
if (platform() === 'linux') {
|
|
194
|
+
try {
|
|
195
|
+
const text = await readFile(`/proc/${pid}/stat`, 'utf8');
|
|
196
|
+
const close = text.lastIndexOf(') ');
|
|
197
|
+
const fields = close < 0 ? [] : text.slice(close + 2).trim().split(/\s+/u);
|
|
198
|
+
return fields[19] ? `linux:${fields[19]}` : undefined;
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
return undefined;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return await new Promise((resolveIdentity) => {
|
|
205
|
+
execFile('/bin/ps', ['-o', 'lstart=', '-p', String(pid)], { encoding: 'utf8' }, (error, stdout) => {
|
|
206
|
+
const value = error ? '' : stdout.trim().replace(/\s+/gu, ' ');
|
|
207
|
+
resolveIdentity(value ? `${platform()}:${value}` : undefined);
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
function isErrorCode(error, code) {
|
|
212
|
+
return typeof error === 'object' && error !== null && error.code === code;
|
|
213
|
+
}
|
|
155
214
|
function validateRepository(value) {
|
|
156
215
|
if (!/^[a-z0-9._-]+\/[a-z0-9._-]+$/u.test(value))
|
|
157
216
|
throw new OwnerControlLockBlockedError('canonical repository is invalid');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owner-control-lock.js","sourceRoot":"","sources":["../../../src/v2/owner-control-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAYhC,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAM7C;IACC,kBAAkB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;IAC9E,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,yCAAyC,EAAE,CAAC;IACrI,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACnI,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,0CAA0C,EAAE,CAAC;IACrF,CAAC;IACD,MAAM,GAAG,GAAG,kCAAkC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC;IAClF,IAAI,GAAuB,CAAC;IAC5B,IAAI,CAAC;QAAC,GAAG,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAAC,CAAC;IAChD,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;IAAC,CAAC;IAClF,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACtC,IAAI,KAA2B,CAAC;IAChC,IAAI,CAAC;QAAC,KAAK,GAAG,MAAM,SAAS,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAAC,CAAC;IACpD,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,oCAAoC,EAAE,CAAC;IAAC,CAAC;IACvF,IAAI,KAAK,CAAC,mBAAmB,KAAK,KAAK,CAAC,mBAAmB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QAC1H,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,6CAA6C,EAAE,CAAC;IACxF,CAAC;IACD,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;QAClC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE;QACtB,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,8CAA8C,EAAE,CAAC;AACtF,CAAC;AAED,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACqB;IAA1E,YAAY,OAAO,GAAG,yCAAyC,EAAW,OAAqC,QAAQ;QACrH,KAAK,CAAC,OAAO,CAAC,CAAC;QADyD,SAAI,GAAJ,IAAI,CAAyC;QAErH,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAgBD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAA4B;IACxE,kBAAkB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC;QAAE,MAAM,IAAI,4BAA4B,CAAC,2BAA2B,CAAC,CAAC;IAC5J,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;IAC9E,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAClF,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,sBAAsB,EAAE,aAAa,CAAC,CAAC,CAAC;IACvG,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC;QAAE,MAAM,IAAI,4BAA4B,CAAC,2CAA2C,CAAC,CAAC;IAChH,MAAM,GAAG,GAAG,kCAAkC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC;IAClF,MAAM,KAAK,GAAyB;QAClC,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE;QAC1B,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,UAAU,EAAE,KAAK,CAAC,GAAG,EAAE;KACxB,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,MAAM,SAAS,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC;gBAAE,OAAO,MAAM,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACjG,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACpF,IAAI,CAAC,QAAQ;eACR,QAAQ,CAAC,mBAAmB,KAAK,KAAK,CAAC,mBAAmB;eAC1D,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;eAC5B,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,IAAI,4BAA4B,EAAE,CAAC;QAC3C,CAAC;QACD,IAAI,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;gBAAE,MAAM,IAAI,4BAA4B,CAAC,mCAAmC,EAAE,iBAAiB,CAAC,CAAC;YACtJ,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QACD,MAAM,KAAK,CAAC,kBAAkB,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5D,IAAI,MAAM,SAAS,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC;YAAE,OAAO,MAAM,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACpG,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;YAAE,MAAM,IAAI,4BAA4B,CAAC,iCAAiC,CAAC,CAAC;IACnI,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,aAAqB,EAAE,GAAW,EAAE,OAAe;IACjE,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO;QACL,KAAK,CAAC,OAAO;YACX,IAAI,QAAQ;gBAAE,OAAO;YACrB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;YAC5F,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;YACnD,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,QAAQ,KAAK,OAAO;gBAAE,MAAM,IAAI,4BAA4B,CAAC,mCAAmC,CAAC,CAAC;YAC3H,IAAI,QAAQ,KAAK,OAAO;gBAAE,MAAM,IAAI,4BAA4B,CAAC,8CAA8C,CAAC,CAAC;YACjH,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,aAAqB,EAAE,KAA2B;IACzE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvH,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,4BAA4B,CAAC,iCAAiC,CAAC,CAAC;IACjI,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,aAAqB,EAAE,GAAW;IACvD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IACnG,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,4BAA4B,CAAC,8BAA8B,CAAC,CAAC;IAC9H,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,aAAqB,EAAE,GAAW;IACzD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACnF,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACxH,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,aAAqB,EAAE,GAAW,EAAE,IAAY,EAAE,QAAgB;IACzF,OAAO,CAAC,MAAM,MAAM,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;AACpG,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC5H,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3G,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACpJ,MAAM,KAAK,GAAG,KAAwC,CAAC;IACvD,kBAAkB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC9C,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;WAClE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC;WAClD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;QACjH,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,4BAA4B,CAAC,iCAAiC,CAAC,CAAC;AAC9H,CAAC;AAED,SAAS,MAAM,CAAC,IAAc,EAAE,KAAc;IAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACtE,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5J,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
|
1
|
+
{"version":3,"file":"owner-control-lock.js","sourceRoot":"","sources":["../../../src/v2/owner-control-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -103,13 +103,14 @@ export interface ProofReceipt {
|
|
|
103
103
|
}>;
|
|
104
104
|
localEvidenceId: string;
|
|
105
105
|
}
|
|
106
|
-
export declare function validateProofReport(value: unknown): ProofReportV1;
|
|
106
|
+
export declare function validateProofReport(value: unknown, trustedCheckIds?: string[]): ProofReportV1;
|
|
107
107
|
export declare function createProofReceipt(input: {
|
|
108
108
|
proofId: string;
|
|
109
109
|
bindingSha256: string;
|
|
110
110
|
summary: string;
|
|
111
111
|
localEvidenceId: string;
|
|
112
112
|
report: ProofReportV1;
|
|
113
|
+
trustedCheckIds?: string[];
|
|
113
114
|
}): ProofReceipt;
|
|
114
115
|
export declare function proofReportOutputSchema(): Record<string, unknown>;
|
|
115
116
|
export declare function proofReportRepairDiagnostic(error: unknown): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proof-report.d.ts","sourceRoot":"","sources":["../../../src/v2/proof-report.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"proof-report.d.ts","sourceRoot":"","sources":["../../../src/v2/proof-report.ts"],"names":[],"mappings":"AAWA,QAAA,MAAM,cAAc,8KAGV,CAAC;AAEX,UAAU,eAAe;IACvB,IAAI,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,kBAAkB,CAAC;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,QAAQ,GAAG,cAAc,GAAG,gBAAgB,CAAC;IACrD,QAAQ,EAAE;QAAE,IAAI,EAAE,YAAY,GAAG,QAAQ,CAAC;QAAC,OAAO,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC,CAAA;KAAE,CAAC;IAC3F,QAAQ,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QACxC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;QACtC,QAAQ,EAAE,KAAK,CAAC,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC;QAC9D,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,mBAAmB,CAAC;QAClD,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,SAAS,EAAE,KAAK,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;QACpC,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,OAAO,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,cAAc,CAAC,EAAE,uBAAuB,GAAG,uBAAuB,GAAG,mBAAmB,CAAC;IACzF,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED,UAAU,eAAe,CAAC,MAAM,SAAS,SAAS,GAAG,SAAS,GAAG,KAAK;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,sBAAsB;IAC9B,QAAQ,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,SAAS,EAAE;QAAE,6BAA6B,EAAE,IAAI,CAAA;KAAE,CAAC;IACnD,YAAY,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACjE,UAAU,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,uBAAwB,SAAQ,sBAAsB;IACrE,QAAQ,EAAE,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5C,WAAW,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD;AAED,MAAM,WAAW,uBAAwB,SAAQ,sBAAsB;IACrE,QAAQ,EAAE,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5C,WAAW,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAoB,SAAQ,sBAAsB;IACjE,QAAQ,EAAE,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,WAAW,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,KAAK,CAAC;QACzB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC;QAC/B,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe,GAAE,MAAM,EAAO,GAAG,aAAa,CA6DjG;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,GAAG,YAAY,CAoBf;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKjE;AAgDD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGlE;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD"}
|
|
@@ -11,7 +11,7 @@ const ARTIFACT_KINDS = [
|
|
|
11
11
|
'command-output', 'static-inspection', 'generated-file', 'screenshot',
|
|
12
12
|
'dom-snapshot', 'console-log', 'network-log', 'ui-hierarchy', 'device-log', 'lease-record',
|
|
13
13
|
];
|
|
14
|
-
export function validateProofReport(value) {
|
|
14
|
+
export function validateProofReport(value, trustedCheckIds = []) {
|
|
15
15
|
assertRecord(value, 'proof report');
|
|
16
16
|
const commonKeys = ['version', 'status', 'decision', 'criteria', 'checks', 'artifacts', 'findings', 'residualRisks'];
|
|
17
17
|
const visualReport = value.status !== 'external-block' && isRecord(value.decision) && value.decision.mode === 'visual';
|
|
@@ -28,7 +28,8 @@ export function validateProofReport(value) {
|
|
|
28
28
|
throw new Error('proof report.version must be 1');
|
|
29
29
|
validateDecision(value.decision);
|
|
30
30
|
validateCriteria(value.criteria, value.status);
|
|
31
|
-
|
|
31
|
+
if (!Array.isArray(value.checks) || value.checks.length !== 0)
|
|
32
|
+
throw new Error('proof report cannot claim runner-owned checks');
|
|
32
33
|
validateArtifacts(value.artifacts);
|
|
33
34
|
assertStringArray(value.findings, 'proof report.findings');
|
|
34
35
|
assertStringArray(value.residualRisks, 'proof report.residualRisks');
|
|
@@ -58,7 +59,7 @@ export function validateProofReport(value) {
|
|
|
58
59
|
validateVisualEvidence(value.visualEvidence, criteria, value.artifacts, decision);
|
|
59
60
|
}
|
|
60
61
|
const evidenceIds = new Set([
|
|
61
|
-
...
|
|
62
|
+
...trustedCheckIds,
|
|
62
63
|
...value.artifacts.map((artifact) => artifact.id),
|
|
63
64
|
]);
|
|
64
65
|
for (const criterion of criteria) {
|
|
@@ -77,7 +78,7 @@ export function createProofReceipt(input) {
|
|
|
77
78
|
assertSha256(input.bindingSha256, 'bindingSha256');
|
|
78
79
|
assertBoundedString(input.summary, 'summary', MAX_SUMMARY_LENGTH, true);
|
|
79
80
|
assertBoundedString(input.localEvidenceId, 'localEvidenceId', MAX_STRING_LENGTH, true);
|
|
80
|
-
const report = validateProofReport(input.report);
|
|
81
|
+
const report = validateProofReport(input.report, input.trustedCheckIds);
|
|
81
82
|
return {
|
|
82
83
|
proofId: input.proofId,
|
|
83
84
|
bindingSha256: input.bindingSha256,
|
|
@@ -117,7 +118,7 @@ function proofReportGenerationBranch(passed) {
|
|
|
117
118
|
type: 'array', minItems: 1, maxItems: MAX_ARRAY_LENGTH,
|
|
118
119
|
items: criterionSchema(passed, SURFACES),
|
|
119
120
|
},
|
|
120
|
-
checks: { type: 'array', maxItems:
|
|
121
|
+
checks: { type: 'array', maxItems: 0, items: { type: 'string' } },
|
|
121
122
|
artifacts: { type: 'array', maxItems: MAX_ARRAY_LENGTH, items: artifactSchema() },
|
|
122
123
|
visualEvidence: {
|
|
123
124
|
anyOf: [
|
|
@@ -218,22 +219,6 @@ function criterionSchema(passed, surfaces) {
|
|
|
218
219
|
},
|
|
219
220
|
};
|
|
220
221
|
}
|
|
221
|
-
function checkSchema(passed) {
|
|
222
|
-
return {
|
|
223
|
-
type: 'object',
|
|
224
|
-
additionalProperties: false,
|
|
225
|
-
required: ['id', 'command', 'status', 'summary', 'outputSha256'],
|
|
226
|
-
properties: {
|
|
227
|
-
id: boundedStringSchema(MAX_STRING_LENGTH),
|
|
228
|
-
command: boundedStringSchema(MAX_STRING_LENGTH),
|
|
229
|
-
status: passed
|
|
230
|
-
? { type: 'string', enum: ['passed', 'unchanged-failure'] }
|
|
231
|
-
: { type: 'string', enum: ['passed', 'failed', 'unchanged-failure'] },
|
|
232
|
-
summary: boundedStringSchema(MAX_SUMMARY_LENGTH),
|
|
233
|
-
outputSha256: sha256Schema(),
|
|
234
|
-
},
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
222
|
function artifactSchema() {
|
|
238
223
|
return {
|
|
239
224
|
anyOf: [
|
|
@@ -414,25 +399,6 @@ function validateCriteria(value, reportStatus) {
|
|
|
414
399
|
}
|
|
415
400
|
assertUnique(ids, 'proof report.criteria ids');
|
|
416
401
|
}
|
|
417
|
-
function validateChecks(value, reportStatus) {
|
|
418
|
-
if (!Array.isArray(value) || value.length > MAX_ARRAY_LENGTH)
|
|
419
|
-
throw new Error('proof report.checks must contain at most 256 entries');
|
|
420
|
-
const ids = [];
|
|
421
|
-
for (const [index, check] of value.entries()) {
|
|
422
|
-
const field = `proof report.checks[${index}]`;
|
|
423
|
-
assertExactObject(check, ['id', 'command', 'status', 'summary', 'outputSha256'], field);
|
|
424
|
-
assertBoundedString(check.id, `${field}.id`, MAX_STRING_LENGTH, true);
|
|
425
|
-
assertBoundedString(check.command, `${field}.command`, MAX_STRING_LENGTH, true);
|
|
426
|
-
if (!['passed', 'failed', 'unchanged-failure'].includes(check.status))
|
|
427
|
-
throw new Error(`${field}.status is invalid`);
|
|
428
|
-
if (reportStatus === 'passed' && check.status === 'failed')
|
|
429
|
-
throw new Error('passed proof forbids task-introduced failed checks');
|
|
430
|
-
assertBoundedString(check.summary, `${field}.summary`, MAX_SUMMARY_LENGTH, true);
|
|
431
|
-
assertSha256(check.outputSha256, `${field}.outputSha256`);
|
|
432
|
-
ids.push(check.id);
|
|
433
|
-
}
|
|
434
|
-
assertUnique(ids, 'proof report.check ids');
|
|
435
|
-
}
|
|
436
402
|
function validateArtifacts(value) {
|
|
437
403
|
if (!Array.isArray(value) || value.length > MAX_ARRAY_LENGTH)
|
|
438
404
|
throw new Error('proof report.artifacts must contain at most 256 entries');
|