codex-orchestrator 0.1.47 → 0.1.49

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 (180) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/src/config/schema.d.ts +5 -1
  3. package/dist/src/config/schema.d.ts.map +1 -1
  4. package/dist/src/config/schema.js +16 -0
  5. package/dist/src/config/schema.js.map +1 -1
  6. package/dist/src/github/gh-issue-adapter.d.ts +3 -1
  7. package/dist/src/github/gh-issue-adapter.d.ts.map +1 -1
  8. package/dist/src/github/gh-issue-adapter.js +44 -6
  9. package/dist/src/github/gh-issue-adapter.js.map +1 -1
  10. package/dist/src/github/gh-pull-request-adapter.d.ts +3 -1
  11. package/dist/src/github/gh-pull-request-adapter.d.ts.map +1 -1
  12. package/dist/src/github/gh-pull-request-adapter.js +74 -0
  13. package/dist/src/github/gh-pull-request-adapter.js.map +1 -1
  14. package/dist/src/github/issues.d.ts +4 -0
  15. package/dist/src/github/issues.d.ts.map +1 -1
  16. package/dist/src/github/issues.js +6 -0
  17. package/dist/src/github/issues.js.map +1 -1
  18. package/dist/src/github/pull-requests.d.ts +9 -0
  19. package/dist/src/github/pull-requests.d.ts.map +1 -1
  20. package/dist/src/github/pull-requests.js +13 -0
  21. package/dist/src/github/pull-requests.js.map +1 -1
  22. package/dist/src/runner/command-utils.d.ts.map +1 -1
  23. package/dist/src/runner/command-utils.js +1 -0
  24. package/dist/src/runner/command-utils.js.map +1 -1
  25. package/dist/src/runner/local-execution-session.d.ts.map +1 -1
  26. package/dist/src/runner/local-execution-session.js +5 -2
  27. package/dist/src/runner/local-execution-session.js.map +1 -1
  28. package/dist/src/runner/mission-activation.d.ts +29 -0
  29. package/dist/src/runner/mission-activation.d.ts.map +1 -0
  30. package/dist/src/runner/mission-activation.js +54 -0
  31. package/dist/src/runner/mission-activation.js.map +1 -0
  32. package/dist/src/runner/mission-agent-broker.d.ts +53 -0
  33. package/dist/src/runner/mission-agent-broker.d.ts.map +1 -0
  34. package/dist/src/runner/mission-agent-broker.js +182 -0
  35. package/dist/src/runner/mission-agent-broker.js.map +1 -0
  36. package/dist/src/runner/mission-cancellation.d.ts +77 -0
  37. package/dist/src/runner/mission-cancellation.d.ts.map +1 -0
  38. package/dist/src/runner/mission-cancellation.js +180 -0
  39. package/dist/src/runner/mission-cancellation.js.map +1 -0
  40. package/dist/src/runner/mission-canonical-path.d.ts +34 -0
  41. package/dist/src/runner/mission-canonical-path.d.ts.map +1 -0
  42. package/dist/src/runner/mission-canonical-path.js +121 -0
  43. package/dist/src/runner/mission-canonical-path.js.map +1 -0
  44. package/dist/src/runner/mission-capability-kernel.d.ts +34 -0
  45. package/dist/src/runner/mission-capability-kernel.d.ts.map +1 -0
  46. package/dist/src/runner/mission-capability-kernel.js +158 -0
  47. package/dist/src/runner/mission-capability-kernel.js.map +1 -0
  48. package/dist/src/runner/mission-check-policy.d.ts +17 -0
  49. package/dist/src/runner/mission-check-policy.d.ts.map +1 -0
  50. package/dist/src/runner/mission-check-policy.js +31 -0
  51. package/dist/src/runner/mission-check-policy.js.map +1 -0
  52. package/dist/src/runner/mission-coordinator-lock.d.ts +16 -0
  53. package/dist/src/runner/mission-coordinator-lock.d.ts.map +1 -0
  54. package/dist/src/runner/mission-coordinator-lock.js +170 -0
  55. package/dist/src/runner/mission-coordinator-lock.js.map +1 -0
  56. package/dist/src/runner/mission-deployment.d.ts +21 -0
  57. package/dist/src/runner/mission-deployment.d.ts.map +1 -0
  58. package/dist/src/runner/mission-deployment.js +108 -0
  59. package/dist/src/runner/mission-deployment.js.map +1 -0
  60. package/dist/src/runner/mission-evaluation.d.ts +61 -0
  61. package/dist/src/runner/mission-evaluation.d.ts.map +1 -0
  62. package/dist/src/runner/mission-evaluation.js +183 -0
  63. package/dist/src/runner/mission-evaluation.js.map +1 -0
  64. package/dist/src/runner/mission-executor-probe.d.ts +10 -0
  65. package/dist/src/runner/mission-executor-probe.d.ts.map +1 -0
  66. package/dist/src/runner/mission-executor-probe.js +180 -0
  67. package/dist/src/runner/mission-executor-probe.js.map +1 -0
  68. package/dist/src/runner/mission-git-contracts.d.ts +75 -0
  69. package/dist/src/runner/mission-git-contracts.d.ts.map +1 -0
  70. package/dist/src/runner/mission-git-contracts.js +201 -0
  71. package/dist/src/runner/mission-git-contracts.js.map +1 -0
  72. package/dist/src/runner/mission-git-runtime-owner-ref.d.ts +13 -0
  73. package/dist/src/runner/mission-git-runtime-owner-ref.d.ts.map +1 -0
  74. package/dist/src/runner/mission-git-runtime-owner-ref.js +111 -0
  75. package/dist/src/runner/mission-git-runtime-owner-ref.js.map +1 -0
  76. package/dist/src/runner/mission-git-transaction.d.ts +97 -0
  77. package/dist/src/runner/mission-git-transaction.d.ts.map +1 -0
  78. package/dist/src/runner/mission-git-transaction.js +1009 -0
  79. package/dist/src/runner/mission-git-transaction.js.map +1 -0
  80. package/dist/src/runner/mission-identifiers.d.ts +31 -0
  81. package/dist/src/runner/mission-identifiers.d.ts.map +1 -0
  82. package/dist/src/runner/mission-identifiers.js +75 -0
  83. package/dist/src/runner/mission-identifiers.js.map +1 -0
  84. package/dist/src/runner/mission-input-snapshot.d.ts +21 -0
  85. package/dist/src/runner/mission-input-snapshot.d.ts.map +1 -0
  86. package/dist/src/runner/mission-input-snapshot.js +63 -0
  87. package/dist/src/runner/mission-input-snapshot.js.map +1 -0
  88. package/dist/src/runner/mission-ownership.d.ts +38 -0
  89. package/dist/src/runner/mission-ownership.d.ts.map +1 -0
  90. package/dist/src/runner/mission-ownership.js +88 -0
  91. package/dist/src/runner/mission-ownership.js.map +1 -0
  92. package/dist/src/runner/mission-patch-audit.d.ts +21 -0
  93. package/dist/src/runner/mission-patch-audit.d.ts.map +1 -0
  94. package/dist/src/runner/mission-patch-audit.js +186 -0
  95. package/dist/src/runner/mission-patch-audit.js.map +1 -0
  96. package/dist/src/runner/mission-path-language.d.ts +6 -0
  97. package/dist/src/runner/mission-path-language.d.ts.map +1 -0
  98. package/dist/src/runner/mission-path-language.js +106 -0
  99. package/dist/src/runner/mission-path-language.js.map +1 -0
  100. package/dist/src/runner/mission-permit-authority.d.ts +26 -0
  101. package/dist/src/runner/mission-permit-authority.d.ts.map +1 -0
  102. package/dist/src/runner/mission-permit-authority.js +145 -0
  103. package/dist/src/runner/mission-permit-authority.js.map +1 -0
  104. package/dist/src/runner/mission-plan-parent-coordinator.d.ts +87 -0
  105. package/dist/src/runner/mission-plan-parent-coordinator.d.ts.map +1 -0
  106. package/dist/src/runner/mission-plan-parent-coordinator.js +441 -0
  107. package/dist/src/runner/mission-plan-parent-coordinator.js.map +1 -0
  108. package/dist/src/runner/mission-plan-parent.d.ts +156 -0
  109. package/dist/src/runner/mission-plan-parent.d.ts.map +1 -0
  110. package/dist/src/runner/mission-plan-parent.js +589 -0
  111. package/dist/src/runner/mission-plan-parent.js.map +1 -0
  112. package/dist/src/runner/mission-process-executor.d.ts +25 -0
  113. package/dist/src/runner/mission-process-executor.d.ts.map +1 -0
  114. package/dist/src/runner/mission-process-executor.js +182 -0
  115. package/dist/src/runner/mission-process-executor.js.map +1 -0
  116. package/dist/src/runner/mission-publication-git.d.ts +21 -0
  117. package/dist/src/runner/mission-publication-git.d.ts.map +1 -0
  118. package/dist/src/runner/mission-publication-git.js +61 -0
  119. package/dist/src/runner/mission-publication-git.js.map +1 -0
  120. package/dist/src/runner/mission-publication.d.ts +192 -0
  121. package/dist/src/runner/mission-publication.d.ts.map +1 -0
  122. package/dist/src/runner/mission-publication.js +1001 -0
  123. package/dist/src/runner/mission-publication.js.map +1 -0
  124. package/dist/src/runner/mission-quarantine-patch-executor.d.ts +29 -0
  125. package/dist/src/runner/mission-quarantine-patch-executor.d.ts.map +1 -0
  126. package/dist/src/runner/mission-quarantine-patch-executor.js +121 -0
  127. package/dist/src/runner/mission-quarantine-patch-executor.js.map +1 -0
  128. package/dist/src/runner/mission-repository-executor.d.ts +54 -0
  129. package/dist/src/runner/mission-repository-executor.d.ts.map +1 -0
  130. package/dist/src/runner/mission-repository-executor.js +192 -0
  131. package/dist/src/runner/mission-repository-executor.js.map +1 -0
  132. package/dist/src/runner/mission-repository-observer.d.ts +8 -0
  133. package/dist/src/runner/mission-repository-observer.d.ts.map +1 -0
  134. package/dist/src/runner/mission-repository-observer.js +24 -0
  135. package/dist/src/runner/mission-repository-observer.js.map +1 -0
  136. package/dist/src/runner/mission-reservations.d.ts +15 -0
  137. package/dist/src/runner/mission-reservations.d.ts.map +1 -0
  138. package/dist/src/runner/mission-reservations.js +116 -0
  139. package/dist/src/runner/mission-reservations.js.map +1 -0
  140. package/dist/src/runner/mission-resolution-loop.d.ts +172 -0
  141. package/dist/src/runner/mission-resolution-loop.d.ts.map +1 -0
  142. package/dist/src/runner/mission-resolution-loop.js +318 -0
  143. package/dist/src/runner/mission-resolution-loop.js.map +1 -0
  144. package/dist/src/runner/mission-runtime-owner.d.ts +36 -0
  145. package/dist/src/runner/mission-runtime-owner.d.ts.map +1 -0
  146. package/dist/src/runner/mission-runtime-owner.js +174 -0
  147. package/dist/src/runner/mission-runtime-owner.js.map +1 -0
  148. package/dist/src/runner/mission-safe-executor.d.ts +96 -0
  149. package/dist/src/runner/mission-safe-executor.d.ts.map +1 -0
  150. package/dist/src/runner/mission-safe-executor.js +288 -0
  151. package/dist/src/runner/mission-safe-executor.js.map +1 -0
  152. package/dist/src/runner/mission-sandbox.d.ts +16 -0
  153. package/dist/src/runner/mission-sandbox.d.ts.map +1 -0
  154. package/dist/src/runner/mission-sandbox.js +91 -0
  155. package/dist/src/runner/mission-sandbox.js.map +1 -0
  156. package/dist/src/runner/mission-scheduler.d.ts +57 -0
  157. package/dist/src/runner/mission-scheduler.d.ts.map +1 -0
  158. package/dist/src/runner/mission-scheduler.js +205 -0
  159. package/dist/src/runner/mission-scheduler.js.map +1 -0
  160. package/dist/src/runner/mission-scope-expansion.d.ts +47 -0
  161. package/dist/src/runner/mission-scope-expansion.d.ts.map +1 -0
  162. package/dist/src/runner/mission-scope-expansion.js +147 -0
  163. package/dist/src/runner/mission-scope-expansion.js.map +1 -0
  164. package/dist/src/runner/mission-state-machine.d.ts +118 -0
  165. package/dist/src/runner/mission-state-machine.d.ts.map +1 -0
  166. package/dist/src/runner/mission-state-machine.js +316 -0
  167. package/dist/src/runner/mission-state-machine.js.map +1 -0
  168. package/dist/src/runner/mission-state-store.d.ts +70 -0
  169. package/dist/src/runner/mission-state-store.d.ts.map +1 -0
  170. package/dist/src/runner/mission-state-store.js +916 -0
  171. package/dist/src/runner/mission-state-store.js.map +1 -0
  172. package/dist/src/runner/rework-policy.d.ts +2 -1
  173. package/dist/src/runner/rework-policy.d.ts.map +1 -1
  174. package/dist/src/runner/rework-policy.js +3 -0
  175. package/dist/src/runner/rework-policy.js.map +1 -1
  176. package/dist/src/setup/project-config.d.ts.map +1 -1
  177. package/dist/src/setup/project-config.js +5 -0
  178. package/dist/src/setup/project-config.js.map +1 -1
  179. package/docs/deep-dive.md +25 -16
  180. package/package.json +1 -1
@@ -0,0 +1,118 @@
1
+ import type { EvaluationResult } from './mission-evaluation.js';
2
+ import { type MissionCapabilityPermit } from './mission-capability-kernel.js';
3
+ import type { MissionApplyIntent, MissionApplyPermit, MissionApplyReceipt } from './mission-git-contracts.js';
4
+ export declare const missionStates: readonly ["created", "claiming", "evaluating", "diagnosing", "authorizing", "executing", "auditing", "apply-authorizing", "apply-prepared", "applying", "reconciling", "candidate-ready", "publication-prepared", "integration-ready", "resumable", "cancelling", "external-input-required", "safety-stop", "cancelled", "completed"];
5
+ export type MissionState = (typeof missionStates)[number];
6
+ export interface MissionRecord {
7
+ id: string;
8
+ revision: number;
9
+ state: MissionState;
10
+ findingIds?: string[];
11
+ residualFindingIds?: string[];
12
+ resumeTarget?: SafeResumeTarget;
13
+ nextEligibleAt?: string;
14
+ resumableReason?: string;
15
+ requiredPredicate?: string;
16
+ actionKey?: string;
17
+ inputSnapshot?: string;
18
+ fencingEpoch?: number;
19
+ authorizedPermit?: MissionCapabilityPermit;
20
+ actionExecutions?: Record<string, MissionActionExecution>;
21
+ applyPermit?: MissionApplyPermit;
22
+ applyIntent?: MissionApplyIntent;
23
+ applyReceipt?: MissionApplyReceipt;
24
+ applyHistory?: MissionApplyReceipt[];
25
+ claim?: MissionClaim;
26
+ cancellation?: MissionCancellation;
27
+ }
28
+ export interface MissionProcessHandle {
29
+ actionKey: string;
30
+ pid: number;
31
+ hostId: string;
32
+ bootNonce: string;
33
+ startedAt: string;
34
+ }
35
+ export interface MissionClaim {
36
+ version: 1;
37
+ token: string;
38
+ daemonId: string;
39
+ hostId: string;
40
+ bootNonce: string;
41
+ fencingEpoch: number;
42
+ claimedAt: string;
43
+ leaseUntil: string;
44
+ processes: MissionProcessHandle[];
45
+ }
46
+ export interface MissionCancellation {
47
+ requestedAt: string;
48
+ requestedBy: string;
49
+ }
50
+ export interface MissionActionExecution {
51
+ permitFingerprint: string;
52
+ status: 'in-flight' | 'completed';
53
+ receiptSha256?: string;
54
+ }
55
+ export declare const safeResumeTargets: readonly ["claiming", "diagnosing", "authorizing", "apply-authorizing", "reconciling", "publication-prepared"];
56
+ export type SafeResumeTarget = (typeof safeResumeTargets)[number];
57
+ export type MissionEvent = {
58
+ type: 'evaluation-completed';
59
+ result: EvaluationResult;
60
+ } | {
61
+ type: 'execution-transient-failure';
62
+ actionKey: string;
63
+ nextEligibleAt: string;
64
+ } | {
65
+ type: 'resume-eligible';
66
+ now: string;
67
+ } | {
68
+ type: 'apply-reconciled-old-identity';
69
+ } | {
70
+ type: 'claim-transient-failure' | 'diagnosis-transient-failure' | 'authorization-temporary' | 'apply-authorization-temporary' | 'reconciliation-transient-failure' | 'publication-transient-failure';
71
+ actionKey: string;
72
+ nextEligibleAt: string;
73
+ } | {
74
+ type: 'capability-authorized';
75
+ actionKey: string;
76
+ permit: MissionCapabilityPermit;
77
+ } | {
78
+ type: 'apply-authorized';
79
+ actionKey: string;
80
+ permit: MissionApplyPermit;
81
+ } | {
82
+ type: 'apply-started';
83
+ intent: MissionApplyIntent;
84
+ } | {
85
+ type: 'apply-reconciled-new-identity';
86
+ intent: MissionApplyIntent;
87
+ receipt: MissionApplyReceipt;
88
+ } | {
89
+ type: 'claim-requested' | 'claim-observed' | 'diagnosis-valid' | 'diagnosis-invalid' | 'authorization-rejected' | 'authorization-external' | 'authorization-safety' | 'patch-received' | 'observation-received' | 'execution-deterministic-failure' | 'audit-rejected' | 'audit-safety' | 'audit-accepted' | 'apply-authorization-rejected' | 'apply-reconciled-third-identity' | 'reconciliation-satisfied' | 'adapt-to-publication' | 'adapt-to-integration' | 'publication-review-ready' | 'publication-external' | 'publication-safety' | 'publication-cancelled' | 'integration-accepted' | 'cancel-requested' | 'cancellation-reconciled';
90
+ };
91
+ export declare const missionEventTypes: readonly ["evaluation-completed", "execution-transient-failure", "resume-eligible", "apply-reconciled-old-identity", "claim-transient-failure", "diagnosis-transient-failure", "authorization-temporary", "apply-authorization-temporary", "reconciliation-transient-failure", "publication-transient-failure", "capability-authorized", "claim-requested", "claim-observed", "diagnosis-valid", "diagnosis-invalid", "authorization-rejected", "authorization-external", "authorization-safety", "patch-received", "observation-received", "execution-deterministic-failure", "audit-rejected", "audit-safety", "audit-accepted", "apply-authorized", "apply-authorization-rejected", "apply-started", "apply-reconciled-new-identity", "apply-reconciled-third-identity", "reconciliation-satisfied", "adapt-to-publication", "adapt-to-integration", "publication-review-ready", "publication-external", "publication-safety", "publication-cancelled", "integration-accepted", "cancel-requested", "cancellation-reconciled"];
92
+ export type MissionCliOutcome = {
93
+ kind: 'success';
94
+ missionId: string;
95
+ state: 'completed';
96
+ } | {
97
+ kind: 'retryable';
98
+ missionId: string;
99
+ state: 'resumable';
100
+ nextEligibleAt: string;
101
+ } | {
102
+ kind: 'external-input';
103
+ missionId: string;
104
+ state: 'external-input-required';
105
+ resumePredicate: string;
106
+ } | {
107
+ kind: 'safety-stop';
108
+ missionId: string;
109
+ state: 'safety-stop';
110
+ reason: string;
111
+ } | {
112
+ kind: 'cancelled';
113
+ missionId: string;
114
+ state: 'cancelled';
115
+ };
116
+ export declare const terminalMissionStates: Set<"completed" | "created" | "resumable" | "safety-stop" | "external-input-required" | "claiming" | "evaluating" | "diagnosing" | "authorizing" | "executing" | "auditing" | "apply-authorizing" | "apply-prepared" | "applying" | "reconciling" | "candidate-ready" | "publication-prepared" | "integration-ready" | "cancelling" | "cancelled">;
117
+ export declare function transitionMission(record: MissionRecord, event: MissionEvent): MissionRecord;
118
+ //# sourceMappingURL=mission-state-machine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mission-state-machine.d.ts","sourceRoot":"","sources":["../../../src/runner/mission-state-machine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,316 @@
1
+ import { authorizeMissionCapability, } from './mission-capability-kernel.js';
2
+ import { assertMissionApplyIntent, assertMissionApplyReceipt, missionApplyPermitFingerprint, validateMissionApplyPermit, } from './mission-git-contracts.js';
3
+ export const missionStates = [
4
+ 'created', 'claiming', 'evaluating', 'diagnosing', 'authorizing', 'executing',
5
+ 'auditing', 'apply-authorizing', 'apply-prepared', 'applying', 'reconciling',
6
+ 'candidate-ready', 'publication-prepared', 'integration-ready', 'resumable',
7
+ 'cancelling', 'external-input-required', 'safety-stop', 'cancelled', 'completed',
8
+ ];
9
+ export const safeResumeTargets = [
10
+ 'claiming',
11
+ 'diagnosing',
12
+ 'authorizing',
13
+ 'apply-authorizing',
14
+ 'reconciling',
15
+ 'publication-prepared',
16
+ ];
17
+ export const missionEventTypes = [
18
+ 'evaluation-completed',
19
+ 'execution-transient-failure',
20
+ 'resume-eligible',
21
+ 'apply-reconciled-old-identity',
22
+ 'claim-transient-failure',
23
+ 'diagnosis-transient-failure',
24
+ 'authorization-temporary',
25
+ 'apply-authorization-temporary',
26
+ 'reconciliation-transient-failure',
27
+ 'publication-transient-failure',
28
+ 'capability-authorized',
29
+ 'claim-requested',
30
+ 'claim-observed',
31
+ 'diagnosis-valid',
32
+ 'diagnosis-invalid',
33
+ 'authorization-rejected',
34
+ 'authorization-external',
35
+ 'authorization-safety',
36
+ 'patch-received',
37
+ 'observation-received',
38
+ 'execution-deterministic-failure',
39
+ 'audit-rejected',
40
+ 'audit-safety',
41
+ 'audit-accepted',
42
+ 'apply-authorized',
43
+ 'apply-authorization-rejected',
44
+ 'apply-started',
45
+ 'apply-reconciled-new-identity',
46
+ 'apply-reconciled-third-identity',
47
+ 'reconciliation-satisfied',
48
+ 'adapt-to-publication',
49
+ 'adapt-to-integration',
50
+ 'publication-review-ready',
51
+ 'publication-external',
52
+ 'publication-safety',
53
+ 'publication-cancelled',
54
+ 'integration-accepted',
55
+ 'cancel-requested',
56
+ 'cancellation-reconciled',
57
+ ];
58
+ const missionEventTypesAreExhaustive = true;
59
+ void missionEventTypesAreExhaustive;
60
+ export const terminalMissionStates = new Set([
61
+ 'external-input-required',
62
+ 'safety-stop',
63
+ 'cancelled',
64
+ 'completed',
65
+ ]);
66
+ const transitionTargets = {
67
+ created: {
68
+ 'claim-requested': 'claiming',
69
+ },
70
+ claiming: {
71
+ 'claim-observed': 'evaluating',
72
+ },
73
+ diagnosing: {
74
+ 'diagnosis-valid': 'authorizing',
75
+ 'diagnosis-invalid': 'diagnosing',
76
+ },
77
+ authorizing: {
78
+ 'capability-authorized': 'executing',
79
+ 'authorization-rejected': 'diagnosing',
80
+ 'authorization-external': 'external-input-required',
81
+ 'authorization-safety': 'safety-stop',
82
+ },
83
+ executing: {
84
+ 'patch-received': 'auditing',
85
+ 'observation-received': 'reconciling',
86
+ 'execution-deterministic-failure': 'diagnosing',
87
+ },
88
+ auditing: {
89
+ 'audit-rejected': 'diagnosing',
90
+ 'audit-safety': 'safety-stop',
91
+ 'audit-accepted': 'apply-authorizing',
92
+ },
93
+ 'apply-authorizing': {
94
+ 'apply-authorized': 'apply-prepared',
95
+ 'apply-authorization-rejected': 'diagnosing',
96
+ },
97
+ 'apply-prepared': {
98
+ 'apply-started': 'applying',
99
+ 'apply-reconciled-new-identity': 'reconciling',
100
+ 'apply-reconciled-third-identity': 'safety-stop',
101
+ },
102
+ applying: {
103
+ 'apply-reconciled-new-identity': 'reconciling',
104
+ 'apply-reconciled-third-identity': 'safety-stop',
105
+ },
106
+ reconciling: {
107
+ 'reconciliation-satisfied': 'evaluating',
108
+ 'apply-reconciled-third-identity': 'safety-stop',
109
+ },
110
+ 'candidate-ready': {
111
+ 'adapt-to-publication': 'publication-prepared',
112
+ 'adapt-to-integration': 'integration-ready',
113
+ },
114
+ 'publication-prepared': {
115
+ 'publication-review-ready': 'completed',
116
+ 'publication-external': 'external-input-required',
117
+ 'publication-safety': 'safety-stop',
118
+ 'publication-cancelled': 'cancelled',
119
+ },
120
+ 'integration-ready': {
121
+ 'integration-accepted': 'completed',
122
+ },
123
+ cancelling: {
124
+ 'cancellation-reconciled': 'cancelled',
125
+ },
126
+ };
127
+ const transientResumeTargets = {
128
+ 'claim-transient-failure': 'claiming',
129
+ 'diagnosis-transient-failure': 'diagnosing',
130
+ 'authorization-temporary': 'authorizing',
131
+ 'execution-transient-failure': 'authorizing',
132
+ 'apply-authorization-temporary': 'apply-authorizing',
133
+ 'reconciliation-transient-failure': 'reconciling',
134
+ 'publication-transient-failure': 'publication-prepared',
135
+ };
136
+ export function transitionMission(record, event) {
137
+ let authorizedCapabilityPermit;
138
+ let authorizedApplyPermit;
139
+ if (event.type === 'capability-authorized') {
140
+ authorizedCapabilityPermit = authorizeMissionCapability(event.permit);
141
+ if (authorizedCapabilityPermit.missionId !== record.id
142
+ || authorizedCapabilityPermit.actionKey !== event.actionKey) {
143
+ throw new Error('Mission capability authorization does not match the aggregate identity.');
144
+ }
145
+ }
146
+ if (event.type === 'apply-authorized') {
147
+ authorizedApplyPermit = validateMissionApplyPermit(event.permit);
148
+ if (authorizedApplyPermit.missionId !== record.id
149
+ || authorizedApplyPermit.actionKey !== event.actionKey) {
150
+ throw new Error('Mission apply authorization does not match the aggregate identity.');
151
+ }
152
+ const fingerprint = missionApplyPermitFingerprint(authorizedApplyPermit);
153
+ if (record.applyHistory?.some((receipt) => receipt.permitFingerprint === fingerprint)) {
154
+ throw new Error('Mission apply authorization reuses an already completed permit.');
155
+ }
156
+ }
157
+ if (event.type === 'apply-started') {
158
+ assertMissionApplyIntent(event.intent);
159
+ if (!record.applyPermit
160
+ || event.intent.permitFingerprint !== missionApplyPermitFingerprint(record.applyPermit)) {
161
+ throw new Error('Mission apply intent does not match the authorized permit.');
162
+ }
163
+ }
164
+ if (event.type === 'apply-reconciled-new-identity') {
165
+ assertMissionApplyIntent(event.intent);
166
+ assertMissionApplyReceipt(event.receipt);
167
+ if (!record.applyPermit
168
+ || event.intent.permitFingerprint !== missionApplyPermitFingerprint(record.applyPermit)
169
+ || event.receipt.permitFingerprint !== event.intent.permitFingerprint) {
170
+ throw new Error('Mission apply receipt does not match the authorized intent.');
171
+ }
172
+ }
173
+ if (record.state === 'evaluating' && event.type === 'evaluation-completed') {
174
+ return {
175
+ ...record,
176
+ revision: record.revision + 1,
177
+ state: stateForEvaluation(event.result.blockingDisposition),
178
+ findingIds: event.result.findings.map((finding) => finding.id),
179
+ residualFindingIds: event.result.findings
180
+ .filter((finding) => finding.disposition === 'residual-warning')
181
+ .map((finding) => finding.id),
182
+ };
183
+ }
184
+ if (record.state === 'reconciling' && event.type === 'reconciliation-satisfied'
185
+ && record.applyReceipt) {
186
+ const { applyPermit: _applyPermit, applyIntent: _applyIntent, applyReceipt, ...rest } = record;
187
+ return {
188
+ ...rest,
189
+ revision: record.revision + 1,
190
+ state: 'evaluating',
191
+ applyHistory: [...(record.applyHistory ?? []), structuredClone(applyReceipt)],
192
+ };
193
+ }
194
+ if (record.state === 'executing' && event.type === 'execution-transient-failure') {
195
+ return resumable(record, 'authorizing', event.actionKey, event.nextEligibleAt);
196
+ }
197
+ if (record.state === 'executing' && (event.type === 'patch-received'
198
+ || event.type === 'observation-received'
199
+ || event.type === 'execution-deterministic-failure')) {
200
+ const { authorizedPermit: _authorizedPermit, ...rest } = record;
201
+ return {
202
+ ...rest,
203
+ revision: record.revision + 1,
204
+ state: event.type === 'patch-received' ? 'auditing'
205
+ : event.type === 'observation-received' ? 'reconciling' : 'diagnosing',
206
+ };
207
+ }
208
+ const transientTarget = transientResumeTargets[event.type];
209
+ if (transientTarget && 'actionKey' in event && 'nextEligibleAt' in event
210
+ && transientEventAllowed(record.state, event.type)) {
211
+ return resumable(record, transientTarget, event.actionKey, event.nextEligibleAt);
212
+ }
213
+ if (record.state === 'resumable' && event.type === 'resume-eligible') {
214
+ if (!record.resumeTarget || !record.nextEligibleAt || event.now < record.nextEligibleAt) {
215
+ throw new Error('Mission is not eligible to resume.');
216
+ }
217
+ const { resumeTarget, nextEligibleAt: _nextEligibleAt, resumableReason: _resumableReason, requiredPredicate: _requiredPredicate, ...rest } = record;
218
+ return {
219
+ ...rest,
220
+ revision: record.revision + 1,
221
+ state: resumeTarget,
222
+ };
223
+ }
224
+ if ((record.state === 'apply-prepared' || record.state === 'applying')
225
+ && event.type === 'apply-reconciled-old-identity') {
226
+ const { applyPermit: _applyPermit, applyIntent: _applyIntent, applyReceipt: _applyReceipt, ...rest } = record;
227
+ return {
228
+ ...rest,
229
+ revision: record.revision + 1,
230
+ state: 'apply-authorizing',
231
+ };
232
+ }
233
+ if (event.type === 'cancel-requested' && !terminalMissionStates.has(record.state) && record.state !== 'cancelling') {
234
+ const { resumeTarget: _resumeTarget, nextEligibleAt: _nextEligibleAt, resumableReason: _resumableReason, requiredPredicate: _requiredPredicate, authorizedPermit: _authorizedPermit, ...rest } = record;
235
+ return {
236
+ ...rest,
237
+ revision: record.revision + 1,
238
+ state: 'cancelling',
239
+ };
240
+ }
241
+ if (record.state === 'cancelling' && event.type === 'cancellation-reconciled') {
242
+ const { claim: _claim, authorizedPermit: _authorizedPermit, applyPermit: _applyPermit, applyIntent: _applyIntent, applyReceipt: _applyReceipt, ...rest } = record;
243
+ return {
244
+ ...rest,
245
+ revision: record.revision + 1,
246
+ state: 'cancelled',
247
+ };
248
+ }
249
+ if (record.state === 'cancelling' && event.type === 'apply-reconciled-third-identity') {
250
+ const { claim: _claim, authorizedPermit: _authorizedPermit, applyPermit: _applyPermit, applyIntent: _applyIntent, applyReceipt: _applyReceipt, ...rest } = record;
251
+ return {
252
+ ...rest,
253
+ revision: record.revision + 1,
254
+ state: 'safety-stop',
255
+ };
256
+ }
257
+ const target = transitionTargets[record.state]?.[event.type];
258
+ if (target) {
259
+ return {
260
+ ...record,
261
+ revision: record.revision + 1,
262
+ state: target,
263
+ ...('actionKey' in event ? { actionKey: event.actionKey } : {}),
264
+ ...(event.type === 'capability-authorized' ? {
265
+ authorizedPermit: authorizedCapabilityPermit,
266
+ inputSnapshot: authorizedCapabilityPermit.inputSnapshot,
267
+ fencingEpoch: authorizedCapabilityPermit.fencingEpoch,
268
+ } : {}),
269
+ ...(event.type === 'apply-authorized' ? {
270
+ actionKey: event.actionKey,
271
+ applyPermit: authorizedApplyPermit,
272
+ fencingEpoch: authorizedApplyPermit.fencingEpoch,
273
+ } : {}),
274
+ ...(event.type === 'apply-started' ? {
275
+ applyIntent: structuredClone(event.intent),
276
+ } : {}),
277
+ ...(event.type === 'apply-reconciled-new-identity' ? {
278
+ applyIntent: structuredClone(event.intent),
279
+ applyReceipt: structuredClone(event.receipt),
280
+ } : {}),
281
+ };
282
+ }
283
+ throw new Error(`Mission transition is not allowed: ${record.state} + ${event.type}`);
284
+ }
285
+ function resumable(record, resumeTarget, actionKey, nextEligibleAt) {
286
+ const { authorizedPermit: _authorizedPermit, claim: _claim, ...rest } = record;
287
+ return {
288
+ ...rest,
289
+ revision: record.revision + 1,
290
+ state: 'resumable',
291
+ resumeTarget,
292
+ nextEligibleAt,
293
+ actionKey,
294
+ };
295
+ }
296
+ function transientEventAllowed(state, type) {
297
+ return (state === 'claiming' && type === 'claim-transient-failure')
298
+ || (state === 'diagnosing' && type === 'diagnosis-transient-failure')
299
+ || (state === 'authorizing' && type === 'authorization-temporary')
300
+ || (state === 'apply-authorizing' && type === 'apply-authorization-temporary')
301
+ || (state === 'reconciling' && type === 'reconciliation-transient-failure')
302
+ || (state === 'publication-prepared' && type === 'publication-transient-failure');
303
+ }
304
+ function stateForEvaluation(disposition) {
305
+ switch (disposition) {
306
+ case 'none':
307
+ return 'candidate-ready';
308
+ case 'diagnose':
309
+ return 'diagnosing';
310
+ case 'external-input':
311
+ return 'external-input-required';
312
+ case 'safety-stop':
313
+ return 'safety-stop';
314
+ }
315
+ }
316
+ //# sourceMappingURL=mission-state-machine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mission-state-machine.js","sourceRoot":"","sources":["../../../src/runner/mission-state-machine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { type FileHandle } from 'node:fs/promises';
2
+ import { type MissionRecord } from './mission-state-machine.js';
3
+ import { type PlanParentRecord } from './mission-plan-parent.js';
4
+ export type JsonValue = null | boolean | number | string | JsonValue[] | {
5
+ [key: string]: JsonValue;
6
+ };
7
+ export interface StoredAggregate {
8
+ revision: number;
9
+ value: JsonValue;
10
+ }
11
+ export interface MissionTombstone {
12
+ kind: 'mission' | 'plan-parent' | 'publication';
13
+ terminalState: string;
14
+ retainedAt: string;
15
+ }
16
+ export interface MissionBlobReference {
17
+ sha256: string;
18
+ size: number;
19
+ }
20
+ export interface MissionStateDraft {
21
+ missions: Record<string, MissionRecord>;
22
+ planParents: Record<string, PlanParentRecord>;
23
+ publications: Record<string, StoredAggregate>;
24
+ reservations: Record<string, StoredAggregate>;
25
+ nextEligibleAt: Record<string, string>;
26
+ tombstones: Record<string, MissionTombstone>;
27
+ blobs: Record<string, MissionBlobReference>;
28
+ }
29
+ export interface MissionStateSnapshot extends MissionStateDraft {
30
+ version: 1;
31
+ generation: number;
32
+ checksum: string;
33
+ }
34
+ export interface MissionStateStoreOptions {
35
+ maxStateBytes?: number;
36
+ atomicOperations?: Partial<MissionStateAtomicOperations>;
37
+ }
38
+ export interface MissionStateAtomicOperations {
39
+ syncFile(file: FileHandle, generation: number): Promise<void>;
40
+ rename(source: string, destination: string, generation: number): Promise<void>;
41
+ syncDirectory(directory: FileHandle, generation: number): Promise<void>;
42
+ }
43
+ export interface MissionStateExclusiveSession {
44
+ load(): Promise<MissionStateSnapshot>;
45
+ mutate(expectedGeneration: number, reducer: (draft: MissionStateDraft) => void): Promise<MissionStateSnapshot>;
46
+ }
47
+ export declare class MissionStateStore {
48
+ private readonly targetRoot;
49
+ private readonly stateDir;
50
+ private readonly maxStateBytes;
51
+ private readonly atomicOperations;
52
+ constructor(targetRoot: string, stateDir: string, options?: MissionStateStoreOptions);
53
+ statePath(): string;
54
+ stateDirectory(): string;
55
+ temporaryDirectory(name: string): Promise<string>;
56
+ load(): Promise<MissionStateSnapshot>;
57
+ mutate(expectedGeneration: number, reducer: (draft: MissionStateDraft) => void): Promise<MissionStateSnapshot>;
58
+ exclusive<T>(operation: (session: MissionStateExclusiveSession) => Promise<T>): Promise<T>;
59
+ mutateWithBlobs(expectedGeneration: number, contents: Uint8Array[], reducer: (draft: MissionStateDraft, references: MissionBlobReference[]) => void): Promise<MissionStateSnapshot>;
60
+ private putBlob;
61
+ private ensureDurableDirectory;
62
+ private ensureNoFollowDirectories;
63
+ private assertExistingStatePathSafe;
64
+ readBlob(reference: MissionBlobReference): Promise<Buffer>;
65
+ pruneUnreferencedBlobs(): Promise<string[]>;
66
+ private acquireCoordinator;
67
+ private commitMutation;
68
+ private atomicWrite;
69
+ }
70
+ //# sourceMappingURL=mission-state-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mission-state-store.d.ts","sourceRoot":"","sources":["../../../src/runner/mission-state-store.ts"],"names":[],"mappings":"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"}