codex-orchestrator 2.0.9 → 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.
Files changed (111) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +26 -1
  3. package/dist/src/index.d.ts +3 -2
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +1 -1
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/v2/acceptance-proof.d.ts +29 -16
  8. package/dist/src/v2/acceptance-proof.d.ts.map +1 -1
  9. package/dist/src/v2/acceptance-proof.js +159 -129
  10. package/dist/src/v2/acceptance-proof.js.map +1 -1
  11. package/dist/src/v2/adapters/command.d.ts +1 -0
  12. package/dist/src/v2/adapters/command.d.ts.map +1 -1
  13. package/dist/src/v2/adapters/command.js +1 -1
  14. package/dist/src/v2/adapters/command.js.map +1 -1
  15. package/dist/src/v2/adapters/gh-issue-adapter.js +9 -3
  16. package/dist/src/v2/adapters/gh-issue-adapter.js.map +1 -1
  17. package/dist/src/v2/adapters/gh-pull-request-adapter.js +1 -0
  18. package/dist/src/v2/adapters/gh-pull-request-adapter.js.map +1 -1
  19. package/dist/src/v2/adapters/pull-requests.d.ts +1 -0
  20. package/dist/src/v2/adapters/pull-requests.d.ts.map +1 -1
  21. package/dist/src/v2/adapters/pull-requests.js +1 -0
  22. package/dist/src/v2/adapters/pull-requests.js.map +1 -1
  23. package/dist/src/v2/adapters/worktree.js +3 -3
  24. package/dist/src/v2/adapters/worktree.js.map +1 -1
  25. package/dist/src/v2/atomic-store.d.ts +15 -0
  26. package/dist/src/v2/atomic-store.d.ts.map +1 -1
  27. package/dist/src/v2/atomic-store.js +55 -8
  28. package/dist/src/v2/atomic-store.js.map +1 -1
  29. package/dist/src/v2/candidate.d.ts +152 -0
  30. package/dist/src/v2/candidate.d.ts.map +1 -0
  31. package/dist/src/v2/candidate.js +129 -0
  32. package/dist/src/v2/candidate.js.map +1 -0
  33. package/dist/src/v2/checked-change.d.ts +37 -6
  34. package/dist/src/v2/checked-change.d.ts.map +1 -1
  35. package/dist/src/v2/checked-change.js +71 -0
  36. package/dist/src/v2/checked-change.js.map +1 -1
  37. package/dist/src/v2/cli.d.ts +6 -0
  38. package/dist/src/v2/cli.d.ts.map +1 -1
  39. package/dist/src/v2/cli.js +57 -21
  40. package/dist/src/v2/cli.js.map +1 -1
  41. package/dist/src/v2/codex-process.d.ts +1 -0
  42. package/dist/src/v2/codex-process.d.ts.map +1 -1
  43. package/dist/src/v2/codex-process.js +12 -1
  44. package/dist/src/v2/codex-process.js.map +1 -1
  45. package/dist/src/v2/contained-report-operation.d.ts +196 -30
  46. package/dist/src/v2/contained-report-operation.d.ts.map +1 -1
  47. package/dist/src/v2/contained-report-operation.js +464 -150
  48. package/dist/src/v2/contained-report-operation.js.map +1 -1
  49. package/dist/src/v2/direct-delivery.d.ts +10 -28
  50. package/dist/src/v2/direct-delivery.d.ts.map +1 -1
  51. package/dist/src/v2/direct-delivery.js +44 -114
  52. package/dist/src/v2/direct-delivery.js.map +1 -1
  53. package/dist/src/v2/implementation-reviewer.d.ts +4 -24
  54. package/dist/src/v2/implementation-reviewer.d.ts.map +1 -1
  55. package/dist/src/v2/implementation-reviewer.js +29 -35
  56. package/dist/src/v2/implementation-reviewer.js.map +1 -1
  57. package/dist/src/v2/owner-control-lock.d.ts +13 -1
  58. package/dist/src/v2/owner-control-lock.d.ts.map +1 -1
  59. package/dist/src/v2/owner-control-lock.js +66 -7
  60. package/dist/src/v2/owner-control-lock.js.map +1 -1
  61. package/dist/src/v2/proof-report.d.ts +2 -1
  62. package/dist/src/v2/proof-report.d.ts.map +1 -1
  63. package/dist/src/v2/proof-report.js +6 -40
  64. package/dist/src/v2/proof-report.js.map +1 -1
  65. package/dist/src/v2/proof-store.d.ts +19 -7
  66. package/dist/src/v2/proof-store.d.ts.map +1 -1
  67. package/dist/src/v2/proof-store.js +162 -41
  68. package/dist/src/v2/proof-store.js.map +1 -1
  69. package/dist/src/v2/review-feedback-coordinator.d.ts +7 -1
  70. package/dist/src/v2/review-feedback-coordinator.d.ts.map +1 -1
  71. package/dist/src/v2/review-feedback-coordinator.js +97 -70
  72. package/dist/src/v2/review-feedback-coordinator.js.map +1 -1
  73. package/dist/src/v2/review-feedback.d.ts +0 -18
  74. package/dist/src/v2/review-feedback.d.ts.map +1 -1
  75. package/dist/src/v2/review-feedback.js +9 -34
  76. package/dist/src/v2/review-feedback.js.map +1 -1
  77. package/dist/src/v2/route-coordinator.d.ts +7 -12
  78. package/dist/src/v2/route-coordinator.d.ts.map +1 -1
  79. package/dist/src/v2/route-coordinator.js +33 -128
  80. package/dist/src/v2/route-coordinator.js.map +1 -1
  81. package/dist/src/v2/route-decision.d.ts +0 -9
  82. package/dist/src/v2/route-decision.d.ts.map +1 -1
  83. package/dist/src/v2/route-decision.js +7 -27
  84. package/dist/src/v2/route-decision.js.map +1 -1
  85. package/dist/src/v2/run-issue.d.ts +64 -26
  86. package/dist/src/v2/run-issue.d.ts.map +1 -1
  87. package/dist/src/v2/run-issue.js +1298 -620
  88. package/dist/src/v2/run-issue.js.map +1 -1
  89. package/dist/src/v2/run-store.d.ts +39 -25
  90. package/dist/src/v2/run-store.d.ts.map +1 -1
  91. package/dist/src/v2/run-store.js +469 -88
  92. package/dist/src/v2/run-store.js.map +1 -1
  93. package/dist/src/v2/runtime.d.ts +61 -36
  94. package/dist/src/v2/runtime.d.ts.map +1 -1
  95. package/dist/src/v2/runtime.js +992 -402
  96. package/dist/src/v2/runtime.js.map +1 -1
  97. package/dist/src/v2/spec-coordinator.d.ts +16 -28
  98. package/dist/src/v2/spec-coordinator.d.ts.map +1 -1
  99. package/dist/src/v2/spec-coordinator.js +81 -43
  100. package/dist/src/v2/spec-coordinator.js.map +1 -1
  101. package/dist/src/v2/spec-delivery.d.ts +3 -34
  102. package/dist/src/v2/spec-delivery.d.ts.map +1 -1
  103. package/dist/src/v2/spec-delivery.js +42 -107
  104. package/dist/src/v2/spec-delivery.js.map +1 -1
  105. package/docs/deep-dive.md +52 -14
  106. package/internal-workflow/evals/coding-skill-evals.json +58 -17
  107. package/internal-workflow/manifest.json +1 -1
  108. package/internal-workflow/schemas/proof-report-v1.json +1 -1
  109. package/internal-workflow/skills/code-review/SKILL.md +18 -0
  110. package/internal-workflow/skills/spec-implementer/SKILL.md +8 -1
  111. package/package.json +1 -1
@@ -0,0 +1,152 @@
1
+ export interface CandidateBindingV2 {
2
+ version: 2;
3
+ bindingId: string;
4
+ expectedHeadSha: string;
5
+ candidateRef: string;
6
+ candidateCommitSha: string;
7
+ candidateTreeSha: string;
8
+ canonicalChangedFiles: string[];
9
+ sourceWorktreeIdentity: string;
10
+ }
11
+ export type CandidateBoundaryV2 = {
12
+ kind: 'qualification';
13
+ repairAttempt: 0 | 1 | 2 | 3 | 4 | 5;
14
+ } | {
15
+ kind: 'implementation-cycle';
16
+ cycle: 1 | 2 | 3 | 4 | 5;
17
+ } | {
18
+ kind: 'review-feedback';
19
+ batchId: string;
20
+ repairRound: 1 | 2 | 3;
21
+ };
22
+ export interface CandidateExecutionLeaseV2 {
23
+ version: 2;
24
+ bindingId: string;
25
+ candidateCommitSha: string;
26
+ path: string;
27
+ operation: 'qualification-check' | 'direct-review' | 'final-check' | 'acceptance-proof';
28
+ attemptId: string;
29
+ phase: 'prepared' | 'launched';
30
+ pid: number | null;
31
+ processGroupId: number | null;
32
+ preparedAt: string;
33
+ launchedAt: string | null;
34
+ }
35
+ export type CandidateOperationFailureCode = 'candidate-unstable' | 'candidate-io-failed' | 'candidate-materialization-io-failed' | 'candidate-ref-update-unknown';
36
+ export type CandidateResult<T> = {
37
+ kind: 'ok';
38
+ value: T;
39
+ } | {
40
+ kind: 'failed';
41
+ code: CandidateOperationFailureCode;
42
+ detailSha256: string;
43
+ };
44
+ export interface CandidateGitV2 {
45
+ reconcileOrphans?(input: {
46
+ repositoryRoot: string;
47
+ workspaceRoot: string;
48
+ activeCandidateRefs: string[];
49
+ pendingCandidates: Array<{
50
+ runId: string;
51
+ worktreePath: string;
52
+ expectedHeadSha: string;
53
+ boundary: CandidateBoundaryV2;
54
+ artifactDir: string;
55
+ }>;
56
+ activeExecutions: Array<{
57
+ path: string;
58
+ candidateCommitSha: string;
59
+ }>;
60
+ }): Promise<CandidateResult<void>>;
61
+ captureAndPin(input: {
62
+ worktreePath: string;
63
+ expectedHeadSha: string;
64
+ runId: string;
65
+ boundary: CandidateBoundaryV2;
66
+ artifactDir: string;
67
+ }): Promise<CandidateResult<CandidateBindingV2>>;
68
+ inspectPin(binding: CandidateBindingV2): Promise<CandidateResult<'matching' | 'missing' | 'diverged'>>;
69
+ normalizeSharedIndex(input: {
70
+ worktreePath: string;
71
+ expectedHeadSha: string;
72
+ }): Promise<CandidateResult<void>>;
73
+ prepareExecution(input: {
74
+ binding: CandidateBindingV2;
75
+ runId: string;
76
+ workspaceRoot: string;
77
+ operation: CandidateExecutionLeaseV2['operation'];
78
+ attemptId: string;
79
+ }): Promise<CandidateResult<{
80
+ kind: 'prepared';
81
+ lease: CandidateExecutionLeaseV2;
82
+ } | {
83
+ kind: 'path-diverged';
84
+ path: string;
85
+ }>>;
86
+ markExecutionLaunched(input: {
87
+ lease: CandidateExecutionLeaseV2;
88
+ pid: number;
89
+ processGroupId: number;
90
+ launchedAt: string;
91
+ }): CandidateExecutionLeaseV2;
92
+ inspectExecution(input: {
93
+ binding: CandidateBindingV2;
94
+ lease: CandidateExecutionLeaseV2;
95
+ artifactDir: string;
96
+ }): Promise<CandidateResult<'matching' | 'mutated' | 'missing'>>;
97
+ removeExecution(input: {
98
+ lease: CandidateExecutionLeaseV2;
99
+ requireProcessAbsent: true;
100
+ }): Promise<CandidateResult<void>>;
101
+ copyProofArtifacts(input: {
102
+ lease: CandidateExecutionLeaseV2;
103
+ issueWorktreePath: string;
104
+ artifactDir: string;
105
+ proofId: string;
106
+ artifacts: Array<{
107
+ relativePath: string;
108
+ sha256: string;
109
+ }>;
110
+ }): Promise<CandidateResult<{
111
+ kind: 'copied-or-observed';
112
+ } | {
113
+ kind: 'artifact-conflict';
114
+ relativePath: string;
115
+ }>>;
116
+ createOrObserveCommit(input: {
117
+ worktreePath: string;
118
+ branchName: string;
119
+ parentSha: string;
120
+ treeSha: string;
121
+ message: string;
122
+ candidateRef: string;
123
+ observeOnly?: true;
124
+ }): Promise<CandidateResult<{
125
+ kind: 'created-or-observed';
126
+ sha: string;
127
+ parentSha: string;
128
+ treeSha: string;
129
+ message: string;
130
+ } | {
131
+ kind: 'parent-unchanged';
132
+ } | {
133
+ kind: 'branch-diverged';
134
+ observedHeadSha: string;
135
+ }>>;
136
+ releasePin(input: {
137
+ binding: CandidateBindingV2;
138
+ expectedPinnedCommitSha: string;
139
+ }): Promise<CandidateResult<void>>;
140
+ }
141
+ export declare function candidateBindingSeed(runId: string, boundary: CandidateBoundaryV2): string;
142
+ export declare function candidateBindingId(input: {
143
+ bindingSeed: string;
144
+ expectedHeadSha: string;
145
+ candidateTreeSha: string;
146
+ canonicalChangedFiles: string[];
147
+ sourceWorktreeIdentity: string;
148
+ }): string;
149
+ export declare function candidateRef(runId: string, bindingId: string): string;
150
+ export declare function validateCandidateBinding(value: unknown, field?: string, expectedRunId?: string): CandidateBindingV2;
151
+ export declare function validateCandidateExecutionLease(value: unknown, field?: string): CandidateExecutionLeaseV2;
152
+ //# sourceMappingURL=candidate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"candidate.d.ts","sourceRoot":"","sources":["../../../src/v2/candidate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ import { posix } from 'node:path';
2
+ import { canonicalJson, sha256 } from './containment.js';
3
+ const SHA256_PATTERN = /^[0-9a-f]{64}$/u;
4
+ const GIT_SHA_PATTERN = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u;
5
+ const UUID_V4_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u;
6
+ export function candidateBindingSeed(runId, boundary) {
7
+ assertRunId(runId);
8
+ validateCandidateBoundary(boundary);
9
+ return sha256(canonicalJson({ runId, boundary }));
10
+ }
11
+ export function candidateBindingId(input) {
12
+ assertSha256(input.bindingSeed, 'candidate binding seed');
13
+ assertGitSha(input.expectedHeadSha, 'candidate expected HEAD');
14
+ assertGitSha(input.candidateTreeSha, 'candidate tree');
15
+ validateCanonicalPaths(input.canonicalChangedFiles, 'candidate changed files');
16
+ assertSha256(input.sourceWorktreeIdentity, 'candidate source worktree identity');
17
+ return sha256(canonicalJson({ version: 2, ...input }));
18
+ }
19
+ export function candidateRef(runId, bindingId) {
20
+ assertRunId(runId);
21
+ assertSha256(bindingId, 'candidate binding ID');
22
+ return `refs/codex-orchestrator/candidates/${runId}/${bindingId}`;
23
+ }
24
+ export function validateCandidateBinding(value, field = 'candidate binding', expectedRunId) {
25
+ assertExactObject(value, [
26
+ 'version', 'bindingId', 'expectedHeadSha', 'candidateRef', 'candidateCommitSha', 'candidateTreeSha',
27
+ 'canonicalChangedFiles', 'sourceWorktreeIdentity',
28
+ ], field);
29
+ if (value.version !== 2)
30
+ throw new Error(`${field}.version is invalid`);
31
+ assertSha256(value.bindingId, `${field}.bindingId`);
32
+ for (const key of ['expectedHeadSha', 'candidateCommitSha', 'candidateTreeSha'])
33
+ assertGitSha(value[key], `${field}.${key}`);
34
+ if (typeof value.candidateRef !== 'string') {
35
+ throw new Error(`${field}.candidateRef is invalid`);
36
+ }
37
+ const match = new RegExp(`^refs/codex-orchestrator/candidates/(${UUID_V4_PATTERN.source.slice(1, -1)})/(${SHA256_PATTERN.source.slice(1, -1)})$`, 'u')
38
+ .exec(value.candidateRef);
39
+ if (!match || match[2] !== value.bindingId || (expectedRunId !== undefined && match[1] !== expectedRunId)) {
40
+ throw new Error(`${field}.candidateRef is not derived from its run and binding`);
41
+ }
42
+ validateCanonicalPaths(value.canonicalChangedFiles, `${field}.canonicalChangedFiles`);
43
+ assertSha256(value.sourceWorktreeIdentity, `${field}.sourceWorktreeIdentity`);
44
+ return value;
45
+ }
46
+ export function validateCandidateExecutionLease(value, field = 'candidate execution lease') {
47
+ assertExactObject(value, [
48
+ 'version', 'bindingId', 'candidateCommitSha', 'path', 'operation', 'attemptId', 'phase', 'pid',
49
+ 'processGroupId', 'preparedAt', 'launchedAt',
50
+ ], field);
51
+ if (value.version !== 2)
52
+ throw new Error(`${field}.version is invalid`);
53
+ assertSha256(value.bindingId, `${field}.bindingId`);
54
+ assertGitSha(value.candidateCommitSha, `${field}.candidateCommitSha`);
55
+ if (typeof value.path !== 'string' || value.path.length === 0)
56
+ throw new Error(`${field}.path is invalid`);
57
+ if (!['qualification-check', 'direct-review', 'final-check', 'acceptance-proof'].includes(value.operation)) {
58
+ throw new Error(`${field}.operation is invalid`);
59
+ }
60
+ assertSha256(value.attemptId, `${field}.attemptId`);
61
+ if (value.phase !== 'prepared' && value.phase !== 'launched')
62
+ throw new Error(`${field}.phase is invalid`);
63
+ const prepared = value.phase === 'prepared';
64
+ if (prepared ? value.pid !== null || value.processGroupId !== null || value.launchedAt !== null
65
+ : !isPositiveInteger(value.pid) || !isPositiveInteger(value.processGroupId) || !isTimestamp(value.launchedAt)) {
66
+ throw new Error(`${field} launch ownership is invalid`);
67
+ }
68
+ if (!isTimestamp(value.preparedAt))
69
+ throw new Error(`${field}.preparedAt is invalid`);
70
+ return value;
71
+ }
72
+ function validateCandidateBoundary(value) {
73
+ if (value.kind === 'qualification') {
74
+ if (!Number.isInteger(value.repairAttempt) || value.repairAttempt < 0 || value.repairAttempt > 5)
75
+ throw new Error('candidate qualification boundary is invalid');
76
+ }
77
+ else if (value.kind === 'implementation-cycle') {
78
+ if (!Number.isInteger(value.cycle) || value.cycle < 1 || value.cycle > 5)
79
+ throw new Error('candidate implementation boundary is invalid');
80
+ }
81
+ else if (value.kind === 'review-feedback') {
82
+ assertSha256(value.batchId, 'candidate review feedback batch ID');
83
+ if (!Number.isInteger(value.repairRound) || value.repairRound < 1 || value.repairRound > 3)
84
+ throw new Error('candidate review feedback boundary is invalid');
85
+ }
86
+ else {
87
+ throw new Error('candidate boundary is invalid');
88
+ }
89
+ }
90
+ function validateCanonicalPaths(value, field) {
91
+ if (!Array.isArray(value) || value.length > 256)
92
+ throw new Error(`${field} is invalid`);
93
+ for (const path of value) {
94
+ if (typeof path !== 'string' || path.includes('\0') || path.startsWith('/') || path.includes('\\') || posix.normalize(path) !== path
95
+ || path.split('/').some((segment) => segment === '' || segment === '.' || segment === '..')) {
96
+ throw new Error(`${field} contains an unsafe path`);
97
+ }
98
+ }
99
+ const sorted = [...value].sort();
100
+ if (new Set(value).size !== value.length || value.some((path, index) => path !== sorted[index]))
101
+ throw new Error(`${field} must be sorted and unique`);
102
+ }
103
+ function assertRunId(value) {
104
+ if (typeof value !== 'string' || !UUID_V4_PATTERN.test(value))
105
+ throw new Error('candidate run ID is invalid');
106
+ }
107
+ function assertGitSha(value, field) {
108
+ if (typeof value !== 'string' || !GIT_SHA_PATTERN.test(value))
109
+ throw new Error(`${field} must be a Git object ID`);
110
+ }
111
+ function assertSha256(value, field) {
112
+ if (typeof value !== 'string' || !SHA256_PATTERN.test(value))
113
+ throw new Error(`${field} must be lowercase SHA-256`);
114
+ }
115
+ function assertExactObject(value, keys, field) {
116
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
117
+ throw new Error(`${field} must be an object`);
118
+ const actual = Object.keys(value).sort();
119
+ const expected = [...keys].sort();
120
+ if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index]))
121
+ throw new Error(`${field} has unknown or missing keys`);
122
+ }
123
+ function isPositiveInteger(value) {
124
+ return Number.isSafeInteger(value) && value > 0;
125
+ }
126
+ function isTimestamp(value) {
127
+ return typeof value === 'string' && !Number.isNaN(Date.parse(value)) && new Date(value).toISOString() === value;
128
+ }
129
+ //# sourceMappingURL=candidate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"candidate.js","sourceRoot":"","sources":["../../../src/v2/candidate.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type CandidateBindingV2 } from './candidate.js';
1
2
  declare const checkedChangeBrand: unique symbol;
2
3
  export interface CheckedChangePayloadV1 {
3
4
  version: 1;
@@ -30,20 +31,50 @@ export interface CheckedChangeFreshness {
30
31
  worktreeIdentity: string;
31
32
  checkPolicySha256: string;
32
33
  }
33
- export interface CheckedChange {
34
+ export interface CheckedChangePayloadV2 {
35
+ version: 2;
36
+ canonicalRepository: string;
37
+ runId: string;
38
+ issueNumber: number;
39
+ cycle: 1 | 2 | 3 | 4 | 5;
40
+ baseSha: string;
41
+ binding: CandidateBindingV2;
42
+ changedFiles: string[];
43
+ checks: Array<{
44
+ id: string;
45
+ command: string;
46
+ status: 'passed';
47
+ outputSha256: string;
48
+ bindingId: string;
49
+ candidateTreeSha: string;
50
+ checkPolicySha256: string;
51
+ }>;
52
+ checkPolicySha256: string;
53
+ packageVersion: string;
54
+ proofSchemaVersion: 1;
55
+ }
56
+ export interface CheckedChangeCandidateFreshness {
57
+ bindingId: string;
58
+ candidateTreeSha: string;
59
+ checkPolicySha256: string;
60
+ }
61
+ export type CheckedChangePayload = CheckedChangePayloadV1 | CheckedChangePayloadV2;
62
+ export type CheckedChangeFreshnessAny = CheckedChangeFreshness | CheckedChangeCandidateFreshness;
63
+ export interface CheckedChange<TPayload extends CheckedChangePayload = CheckedChangePayloadV1> {
34
64
  readonly [checkedChangeBrand]: true;
65
+ readonly __checkedChangePayload?: TPayload;
35
66
  }
36
67
  export interface CheckedChangeMintCapability {
37
- mint(payload: CheckedChangePayloadV1): CheckedChange;
68
+ mint<TPayload extends CheckedChangePayload>(payload: TPayload): CheckedChange<TPayload>;
38
69
  }
39
70
  export interface CheckedChangeReadCapability {
40
- verifyAndRead(value: CheckedChange): {
41
- payload: CheckedChangePayloadV1;
71
+ verifyAndRead<TPayload extends CheckedChangePayload>(value: CheckedChange<TPayload>): {
72
+ payload: TPayload;
42
73
  checkedChangeSha256: string;
43
74
  };
44
75
  }
45
- export declare function checkedChangePayloadSha256(payload: CheckedChangePayloadV1): string;
76
+ export declare function checkedChangePayloadSha256(payload: CheckedChangePayload): string;
46
77
  export declare function createCheckedChangeCapabilities(): CheckedChangeMintCapability & CheckedChangeReadCapability;
47
- export declare function checkedChangeFreshnessMatches(payload: CheckedChangePayloadV1, current: CheckedChangeFreshness): boolean;
78
+ export declare function checkedChangeFreshnessMatches(payload: CheckedChangePayload, current: CheckedChangeFreshnessAny): boolean;
48
79
  export {};
49
80
  //# sourceMappingURL=checked-change.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"checked-change.d.ts","sourceRoot":"","sources":["../../../src/v2/checked-change.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,kBAAkB,EAAE,OAAO,MAAgC,CAAC;AAMlE,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,CAAC,CAAC;IACX,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,QAAQ,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,CAAC,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAAC;CACtD;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,sBAAsB,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAE,CAAC;CACvG;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAGlF;AAED,wBAAgB,+BAA+B,IAAI,2BAA2B,GAAG,2BAA2B,CAkB3G;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAOT"}
1
+ {"version":3,"file":"checked-change.d.ts","sourceRoot":"","sources":["../../../src/v2/checked-change.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { posix } from 'node:path';
2
2
  import { canonicalJson, sha256 } from './containment.js';
3
+ import { validateCandidateBinding } from './candidate.js';
3
4
  const checkedChangeBrand = Symbol('CheckedChange');
4
5
  const SHA256_PATTERN = /^[0-9a-f]{64}$/;
5
6
  const GIT_SHA_PATTERN = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/;
@@ -31,6 +32,14 @@ export function createCheckedChangeCapabilities() {
31
32
  };
32
33
  }
33
34
  export function checkedChangeFreshnessMatches(payload, current) {
35
+ if (payload.version === 2) {
36
+ return 'bindingId' in current
37
+ && payload.binding.bindingId === current.bindingId
38
+ && payload.binding.candidateTreeSha === current.candidateTreeSha
39
+ && payload.checkPolicySha256 === current.checkPolicySha256;
40
+ }
41
+ if (!('headSha' in current))
42
+ return false;
34
43
  return payload.headSha === current.headSha
35
44
  && payload.indexTreeSha === current.indexTreeSha
36
45
  && payload.trackedContentSha256 === current.trackedContentSha256
@@ -39,6 +48,13 @@ export function checkedChangeFreshnessMatches(payload, current) {
39
48
  && payload.checkPolicySha256 === current.checkPolicySha256;
40
49
  }
41
50
  function validatePayload(value) {
51
+ if (typeof value === 'object' && value !== null && !Array.isArray(value) && value.version === 2) {
52
+ validatePayloadV2(value);
53
+ return;
54
+ }
55
+ validatePayloadV1(value);
56
+ }
57
+ function validatePayloadV1(value) {
42
58
  assertExactObject(value, [
43
59
  'version',
44
60
  'canonicalRepository',
@@ -95,6 +111,61 @@ function validatePayload(value) {
95
111
  assertUnique(checkIds, 'CheckedChange check ids');
96
112
  assertNonEmptyString(value.packageVersion, 'CheckedChange.packageVersion');
97
113
  }
114
+ function validatePayloadV2(value) {
115
+ assertExactObject(value, [
116
+ 'version', 'canonicalRepository', 'runId', 'issueNumber', 'cycle', 'baseSha', 'binding', 'changedFiles',
117
+ 'checks', 'checkPolicySha256', 'packageVersion', 'proofSchemaVersion',
118
+ ], 'CheckedChange payload');
119
+ if (value.version !== 2 || !Number.isSafeInteger(value.cycle) || value.cycle < 1 || value.cycle > 5 || value.proofSchemaVersion !== 1) {
120
+ throw new Error('CheckedChange payload versions/cycle are invalid');
121
+ }
122
+ validateCommonIdentity(value);
123
+ assertGitSha(value.baseSha, 'CheckedChange.baseSha');
124
+ const binding = validateCandidateBinding(value.binding, 'CheckedChange.binding', value.runId);
125
+ validateChangedFiles(value.changedFiles);
126
+ if (!sameStrings(value.changedFiles, binding.canonicalChangedFiles))
127
+ throw new Error('CheckedChange changedFiles must equal candidate binding paths');
128
+ assertSha256(value.checkPolicySha256, 'CheckedChange.checkPolicySha256');
129
+ if (!Array.isArray(value.checks) || value.checks.length > 256)
130
+ throw new Error('CheckedChange checks are invalid');
131
+ const checkIds = [];
132
+ for (const [index, check] of value.checks.entries()) {
133
+ const field = `CheckedChange.checks[${index}]`;
134
+ assertExactObject(check, ['id', 'command', 'status', 'outputSha256', 'bindingId', 'candidateTreeSha', 'checkPolicySha256'], field);
135
+ assertNonEmptyString(check.id, `${field}.id`);
136
+ assertNonEmptyString(check.command, `${field}.command`);
137
+ if (check.status !== 'passed')
138
+ throw new Error(`${field}.status must be passed`);
139
+ assertSha256(check.outputSha256, `${field}.outputSha256`);
140
+ assertSha256(check.bindingId, `${field}.bindingId`);
141
+ assertGitSha(check.candidateTreeSha, `${field}.candidateTreeSha`);
142
+ assertSha256(check.checkPolicySha256, `${field}.checkPolicySha256`);
143
+ if (check.bindingId !== binding.bindingId || check.candidateTreeSha !== binding.candidateTreeSha
144
+ || check.checkPolicySha256 !== value.checkPolicySha256)
145
+ throw new Error(`${field} candidate binding is invalid`);
146
+ checkIds.push(check.id);
147
+ }
148
+ assertUnique(checkIds, 'CheckedChange check ids');
149
+ assertNonEmptyString(value.packageVersion, 'CheckedChange.packageVersion');
150
+ }
151
+ function validateCommonIdentity(value) {
152
+ if (typeof value.canonicalRepository !== 'string' || !REPOSITORY_PATTERN.test(value.canonicalRepository))
153
+ throw new Error('CheckedChange canonicalRepository is invalid');
154
+ if (typeof value.runId !== 'string' || !UUID_V4_PATTERN.test(value.runId))
155
+ throw new Error('CheckedChange runId is invalid');
156
+ if (!Number.isSafeInteger(value.issueNumber) || value.issueNumber <= 0)
157
+ throw new Error('CheckedChange issueNumber is invalid');
158
+ }
159
+ function validateChangedFiles(value) {
160
+ if (!Array.isArray(value) || value.length === 0 || value.length > 256)
161
+ throw new Error('CheckedChange changedFiles must contain 1 to 256 paths');
162
+ for (const path of value)
163
+ assertRelativePath(path, 'CheckedChange.changedFiles');
164
+ assertUnique(value, 'CheckedChange.changedFiles');
165
+ }
166
+ function sameStrings(left, right) {
167
+ return Array.isArray(left) && left.length === right.length && left.every((value, index) => value === right[index]);
168
+ }
98
169
  function assertRelativePath(value, field) {
99
170
  assertNonEmptyString(value, field);
100
171
  if (value.startsWith('/') || value.includes('\\') || posix.normalize(value) !== value) {
@@ -1 +1 @@
1
- {"version":3,"file":"checked-change.js","sourceRoot":"","sources":["../../../src/v2/checked-change.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checked-change.js","sourceRoot":"","sources":["../../../src/v2/checked-change.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,12 @@ export declare function runCli(argv: string[], dependencies?: {
21
21
  packageVersion?: string;
22
22
  write?: (text: string) => void;
23
23
  }): Promise<number>;
24
+ export declare function executeDaemonLoop(intent: DaemonIntent, write: (text: string) => void, dependencies: {
25
+ discover(): Promise<GitHubIssue[]>;
26
+ executeRun(input: RunIntent): Promise<RunIssueResult>;
27
+ delay(milliseconds: number): Promise<void>;
28
+ pollIntervalMilliseconds: number;
29
+ }): Promise<number>;
24
30
  export declare function executeDaemonCandidates(input: {
25
31
  targetRoot: string;
26
32
  candidates: GitHubIssue[];
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/v2/cli.ts"],"names":[],"mappings":";AASA,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAMzE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,WAAW,SAAS;IAAG,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE;AACtE,MAAM,WAAW,YAAY;IAAG,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE;AAEzF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAQtD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAc5D;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,YAAY,GAAE;IACzD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxF,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3B,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBvB;AA8BD,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,GAAG,OAAO,CAAC,MAAM,CAAC,CAalB;AA8BD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,CAGjG;AAyCD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAGnF"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/v2/cli.ts"],"names":[],"mappings":";AASA,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAMzE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,WAAW,SAAS;IAAG,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE;AACtE,MAAM,WAAW,YAAY;IAAG,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE;AAEzF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAQtD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAc5D;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,YAAY,GAAE;IACzD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxF,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3B,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBvB;AAmBD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC7B,YAAY,EAAE;IACZ,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACnC,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACtD,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,wBAAwB,EAAE,MAAM,CAAC;CAClC,GACA,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBlB;AA8BD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,CAGjG;AAyCD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAGnF"}
@@ -65,26 +65,46 @@ export async function runCli(argv, dependencies = {}) {
65
65
  async function executeProductionDaemon(intent, write) {
66
66
  const config = await readTargetConfig(intent.targetRoot);
67
67
  const issues = new GhCliIssueAdapter(config.github.owner, config.github.repo);
68
+ return executeDaemonLoop(intent, write, {
69
+ discover: () => issues.listOpenIssuesWithAnyLabel([
70
+ config.github.labels.auto.name,
71
+ config.github.labels.review.name,
72
+ ]),
73
+ executeRun: executeProductionRun,
74
+ delay: (milliseconds) => new Promise((resolveDelay) => setTimeout(resolveDelay, milliseconds)),
75
+ pollIntervalMilliseconds: config.runner.pollIntervalSeconds * 1_000,
76
+ });
77
+ }
78
+ export async function executeDaemonLoop(intent, write, dependencies) {
68
79
  let exitCode = 0;
69
80
  const lastResults = new Map();
70
81
  do {
71
- const discovered = await issues.listOpenIssuesWithAnyLabel([
72
- config.github.labels.auto.name,
73
- config.github.labels.review.name,
74
- ]);
75
- const candidates = intent.issueNumber === undefined
76
- ? discovered
77
- : discovered.filter((issue) => issue.number === intent.issueNumber);
78
- exitCode = Math.max(exitCode, await executeDaemonCandidates({
79
- targetRoot: intent.targetRoot,
80
- candidates,
81
- executeRun: executeProductionRun,
82
- write,
83
- lastResults,
84
- }));
82
+ let discovered;
83
+ try {
84
+ discovered = await dependencies.discover();
85
+ }
86
+ catch (error) {
87
+ exitCode = Math.max(exitCode, 70);
88
+ try {
89
+ write(`daemon discovery failed: ${error instanceof Error ? error.message : String(error)}\n`);
90
+ }
91
+ catch { /* output failure cannot terminate the daemon */ }
92
+ }
93
+ if (discovered) {
94
+ const candidates = intent.issueNumber === undefined
95
+ ? discovered
96
+ : discovered.filter((issue) => issue.number === intent.issueNumber);
97
+ exitCode = Math.max(exitCode, await executeDaemonCandidates({
98
+ targetRoot: intent.targetRoot,
99
+ candidates,
100
+ executeRun: dependencies.executeRun,
101
+ write,
102
+ lastResults,
103
+ }));
104
+ }
85
105
  if (intent.once)
86
106
  return exitCode;
87
- await new Promise((resolveDelay) => setTimeout(resolveDelay, config.runner.pollIntervalSeconds * 1_000));
107
+ await dependencies.delay(dependencies.pollIntervalMilliseconds);
88
108
  } while (true);
89
109
  }
90
110
  export async function executeDaemonCandidates(input) {
@@ -92,13 +112,29 @@ export async function executeDaemonCandidates(input) {
92
112
  const candidates = [...new Map(input.candidates.map((issue) => [issue.number, issue])).values()]
93
113
  .sort((left, right) => left.number - right.number);
94
114
  for (const issue of candidates) {
95
- const result = await input.executeRun({ targetRoot: input.targetRoot, issueNumber: issue.number });
96
- const rendered = renderRunResultJson(result);
97
- const previous = input.lastResults.get(issue.number);
98
- if (previous !== rendered)
99
- input.write(rendered);
100
- input.lastResults.set(issue.number, rendered);
115
+ let result;
116
+ try {
117
+ result = await input.executeRun({ targetRoot: input.targetRoot, issueNumber: issue.number });
118
+ }
119
+ catch (error) {
120
+ exitCode = Math.max(exitCode, 70);
121
+ try {
122
+ input.write(`daemon issue ${issue.number} failed: ${error instanceof Error ? error.message : String(error)}\n`);
123
+ }
124
+ catch { /* output failure cannot stop later frozen candidates */ }
125
+ continue;
126
+ }
101
127
  exitCode = Math.max(exitCode, runIssueExitCode(result));
128
+ try {
129
+ const rendered = renderRunResultJson(result);
130
+ const previous = input.lastResults.get(issue.number);
131
+ if (previous !== rendered)
132
+ input.write(rendered);
133
+ input.lastResults.set(issue.number, rendered);
134
+ }
135
+ catch {
136
+ exitCode = Math.max(exitCode, 70);
137
+ }
102
138
  }
103
139
  return exitCode;
104
140
  }