@straiffi/archon 1.8.21 → 1.8.23

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 (133) hide show
  1. package/dist/client/assets/{ActivityView-BcguXTZ5.js → ActivityView-BaIZ8eHC.js} +1 -1
  2. package/dist/client/assets/GitHubActionsDialog-BFCqikDY.js +1 -0
  3. package/dist/client/assets/VerificationDialog-B1_6HMdt.js +4 -0
  4. package/dist/client/assets/{architectureDiagram-3BPJPVTR-DnC7Twj0.js → architectureDiagram-3BPJPVTR-Dl5UF67P.js} +1 -1
  5. package/dist/client/assets/{blockDiagram-GPEHLZMM-D0VbjiKd.js → blockDiagram-GPEHLZMM-DCcERfrZ.js} +1 -1
  6. package/dist/client/assets/{c4Diagram-AAUBKEIU-CzQ3l15K.js → c4Diagram-AAUBKEIU-BGhbASFm.js} +1 -1
  7. package/dist/client/assets/channel-BfskvH2B.js +1 -0
  8. package/dist/client/assets/{chunk-2J33WTMH-B5UGiqLW.js → chunk-2J33WTMH-C1ARozTV.js} +1 -1
  9. package/dist/client/assets/{chunk-3OPIFGDE-SCksTqtu.js → chunk-3OPIFGDE-BEovLizF.js} +1 -1
  10. package/dist/client/assets/{chunk-5ZQYHXKU-IOkwLOtG.js → chunk-5ZQYHXKU-C5MmlLa_.js} +1 -1
  11. package/dist/client/assets/{chunk-727SXJPM-Do60Xs9p.js → chunk-727SXJPM-8y8jBk4n.js} +1 -1
  12. package/dist/client/assets/{chunk-AQP2D5EJ-CuQT3imB.js → chunk-AQP2D5EJ-q-mByAd3.js} +1 -1
  13. package/dist/client/assets/{chunk-CSCIHK7Q-BkxMIESX.js → chunk-CSCIHK7Q-BOx2mLSz.js} +1 -1
  14. package/dist/client/assets/{chunk-KSCS5N6A-uUU3sWgR.js → chunk-KSCS5N6A-zEwQFq7q.js} +1 -1
  15. package/dist/client/assets/{chunk-L5ZTLDWV-DLYccV6J.js → chunk-L5ZTLDWV-C80z6rY_.js} +1 -1
  16. package/dist/client/assets/{chunk-LZXEDZCA-CgJFfCRZ.js → chunk-LZXEDZCA-BLaEsGPd.js} +2 -2
  17. package/dist/client/assets/{chunk-ND2GUHAM-D7IQSQfK.js → chunk-ND2GUHAM-x26BZ95L.js} +1 -1
  18. package/dist/client/assets/{chunk-NZK2D7GU-B4O6JWAo.js → chunk-NZK2D7GU-D2WAxr1p.js} +1 -1
  19. package/dist/client/assets/{chunk-O5CBEL6O-DidlQEqb.js → chunk-O5CBEL6O-DDPCrzKh.js} +1 -1
  20. package/dist/client/assets/{chunk-WU5MYG2G-2-oq_Gue.js → chunk-WU5MYG2G-CE-JcvIc.js} +1 -1
  21. package/dist/client/assets/classDiagram-4FO5ZUOK-D4HPfxL3.js +1 -0
  22. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DQQ_WqAU.js +1 -0
  23. package/dist/client/assets/{dagre-BM42HDAG-TubuN0hR.js → dagre-BM42HDAG-Bf7wpUk_.js} +1 -1
  24. package/dist/client/assets/{diagram-2AECGRRQ-DNcUk6rV.js → diagram-2AECGRRQ-BQoKmc3B.js} +1 -1
  25. package/dist/client/assets/{diagram-5GNKFQAL-B1sJn4w_.js → diagram-5GNKFQAL-D2jarPLn.js} +1 -1
  26. package/dist/client/assets/{diagram-KO2AKTUF-CnW6ZuQe.js → diagram-KO2AKTUF-Bcbbjvsl.js} +1 -1
  27. package/dist/client/assets/{diagram-LMA3HP47-YHUmDzyS.js → diagram-LMA3HP47-t862RRBQ.js} +1 -1
  28. package/dist/client/assets/{diagram-OG6HWLK6-BkOQphxq.js → diagram-OG6HWLK6-CacbMcO0.js} +1 -1
  29. package/dist/client/assets/{erDiagram-TEJ5UH35-oNMxAdxN.js → erDiagram-TEJ5UH35-DRQ79baI.js} +1 -1
  30. package/dist/client/assets/{flowDiagram-I6XJVG4X-ByuCV-Am.js → flowDiagram-I6XJVG4X-BfW4KEdc.js} +1 -1
  31. package/dist/client/assets/{ganttDiagram-6RSMTGT7-CRkNH8Ft.js → ganttDiagram-6RSMTGT7-BPIl0TAj.js} +1 -1
  32. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-DRXzXjd8.js → gitGraphDiagram-PVQCEYII-CRIusBMV.js} +1 -1
  33. package/dist/client/assets/index-CZ1z72fo.js +276 -0
  34. package/dist/client/assets/index-SMj5ZmMs.css +2 -0
  35. package/dist/client/assets/{infoDiagram-5YYISTIA-CJ4-hWch.js → infoDiagram-5YYISTIA-DTKzK8EJ.js} +1 -1
  36. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-CW1xqvim.js → ishikawaDiagram-YF4QCWOH-DVIHZLvL.js} +1 -1
  37. package/dist/client/assets/{journeyDiagram-JHISSGLW-BVVFg8_h.js → journeyDiagram-JHISSGLW-CQBZ4tCx.js} +1 -1
  38. package/dist/client/assets/{kanban-definition-UN3LZRKU-AcLZ63tA.js → kanban-definition-UN3LZRKU-D7naegR0.js} +1 -1
  39. package/dist/client/assets/{line-CG_TG6Ci.js → line-CizZlaeV.js} +1 -1
  40. package/dist/client/assets/{mermaid-parser.core-UDLSm_c3.js → mermaid-parser.core-NrDqgpZa.js} +1 -1
  41. package/dist/client/assets/{mermaid.core-IvBk22DF.js → mermaid.core-CwVO3oX0.js} +3 -3
  42. package/dist/client/assets/{mindmap-definition-RKZ34NQL-BflWNtnl.js → mindmap-definition-RKZ34NQL-BWxy3Aa_.js} +1 -1
  43. package/dist/client/assets/{pieDiagram-4H26LBE5-Dm1iGMm7.js → pieDiagram-4H26LBE5-B3gXpmBn.js} +1 -1
  44. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-CM4zJd_R.js → quadrantDiagram-W4KKPZXB-Dpp4g8Al.js} +1 -1
  45. package/dist/client/assets/{requirementDiagram-4Y6WPE33-miuP86cp.js → requirementDiagram-4Y6WPE33-lFKXnxml.js} +1 -1
  46. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-zUcRagtr.js → sankeyDiagram-5OEKKPKP-BBdtwqrS.js} +1 -1
  47. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-BRYqVpsT.js → sequenceDiagram-3UESZ5HK-ANpVZzqm.js} +1 -1
  48. package/dist/client/assets/{stateDiagram-AJRCARHV-DwcF0DJm.js → stateDiagram-AJRCARHV-D58ZxmKY.js} +1 -1
  49. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-Cv8cmDfz.js +1 -0
  50. package/dist/client/assets/{timeline-definition-PNZ67QCA-BzH929s_.js → timeline-definition-PNZ67QCA-B6FK8IQC.js} +1 -1
  51. package/dist/client/assets/{vennDiagram-CIIHVFJN-BIq8rooy.js → vennDiagram-CIIHVFJN-lFWtZEEY.js} +1 -1
  52. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-CyV_gL5J.js → wardleyDiagram-YWT4CUSO-DteAVp4l.js} +1 -1
  53. package/dist/client/assets/{xychartDiagram-2RQKCTM6-Dxo-U-qe.js → xychartDiagram-2RQKCTM6-CNcDlRLN.js} +1 -1
  54. package/dist/client/index.html +2 -2
  55. package/dist/server/db.js +359 -21
  56. package/dist/server/db.js.map +1 -1
  57. package/dist/server/index.js +152 -4
  58. package/dist/server/index.js.map +1 -1
  59. package/dist/server/lib/approvalReconciliation.js +101 -0
  60. package/dist/server/lib/approvalReconciliation.js.map +1 -0
  61. package/dist/server/lib/approvalRequests.js +587 -0
  62. package/dist/server/lib/approvalRequests.js.map +1 -0
  63. package/dist/server/lib/approvalRoutes.js +143 -0
  64. package/dist/server/lib/approvalRoutes.js.map +1 -0
  65. package/dist/server/lib/buildExecutionEnvironment.js +128 -11
  66. package/dist/server/lib/buildExecutionEnvironment.js.map +1 -1
  67. package/dist/server/lib/checkDefinitions.js +29 -1
  68. package/dist/server/lib/checkDefinitions.js.map +1 -1
  69. package/dist/server/lib/checkRunner.js +306 -27
  70. package/dist/server/lib/checkRunner.js.map +1 -1
  71. package/dist/server/lib/checkRuns.js +4 -2
  72. package/dist/server/lib/checkRuns.js.map +1 -1
  73. package/dist/server/lib/consequentialActionAuthority.js +142 -0
  74. package/dist/server/lib/consequentialActionAuthority.js.map +1 -0
  75. package/dist/server/lib/consequentialActions.js +231 -0
  76. package/dist/server/lib/consequentialActions.js.map +1 -0
  77. package/dist/server/lib/dockerSandboxEnvironmentOperations.js +119 -0
  78. package/dist/server/lib/dockerSandboxEnvironmentOperations.js.map +1 -1
  79. package/dist/server/lib/dockerSandboxExecutionEnvironment.js +194 -14
  80. package/dist/server/lib/dockerSandboxExecutionEnvironment.js.map +1 -1
  81. package/dist/server/lib/dockerSandboxExecutionProvider.js +1 -1
  82. package/dist/server/lib/dockerSandboxExecutionProvider.js.map +1 -1
  83. package/dist/server/lib/dockerSandboxNetworkPolicy.js +222 -0
  84. package/dist/server/lib/dockerSandboxNetworkPolicy.js.map +1 -0
  85. package/dist/server/lib/executionEnvironmentContexts.js +4 -2
  86. package/dist/server/lib/executionEnvironmentContexts.js.map +1 -1
  87. package/dist/server/lib/executionEnvironmentLifecycle.js +34 -0
  88. package/dist/server/lib/executionEnvironmentLifecycle.js.map +1 -1
  89. package/dist/server/lib/executionEnvironmentRoutes.js +68 -6
  90. package/dist/server/lib/executionEnvironmentRoutes.js.map +1 -1
  91. package/dist/server/lib/executionEnvironmentValidation.js +71 -5
  92. package/dist/server/lib/executionEnvironmentValidation.js.map +1 -1
  93. package/dist/server/lib/executionEnvironmentValidationOperations.js +155 -11
  94. package/dist/server/lib/executionEnvironmentValidationOperations.js.map +1 -1
  95. package/dist/server/lib/executionEnvironments.js +11 -5
  96. package/dist/server/lib/executionEnvironments.js.map +1 -1
  97. package/dist/server/lib/executionProfileStore.js +12 -3
  98. package/dist/server/lib/executionProfileStore.js.map +1 -1
  99. package/dist/server/lib/executionProfiles.js +131 -8
  100. package/dist/server/lib/executionProfiles.js.map +1 -1
  101. package/dist/server/lib/executionReconciliation.js +206 -143
  102. package/dist/server/lib/executionReconciliation.js.map +1 -1
  103. package/dist/server/lib/executionRunAuthority.js +175 -7
  104. package/dist/server/lib/executionRunAuthority.js.map +1 -1
  105. package/dist/server/lib/executionRuns.js +26 -4
  106. package/dist/server/lib/executionRuns.js.map +1 -1
  107. package/dist/server/lib/executionTimeline.js +2 -1
  108. package/dist/server/lib/executionTimeline.js.map +1 -1
  109. package/dist/server/lib/git.js +52 -10
  110. package/dist/server/lib/git.js.map +1 -1
  111. package/dist/server/lib/gitPushApprovals.js +367 -0
  112. package/dist/server/lib/gitPushApprovals.js.map +1 -0
  113. package/dist/server/lib/mobileAccess.js +115 -1
  114. package/dist/server/lib/mobileAccess.js.map +1 -1
  115. package/dist/server/lib/productionCheckApprovals.js +106 -0
  116. package/dist/server/lib/productionCheckApprovals.js.map +1 -0
  117. package/dist/server/lib/reviewFindings.js +14 -8
  118. package/dist/server/lib/reviewFindings.js.map +1 -1
  119. package/dist/server/lib/types.js +40 -0
  120. package/dist/server/lib/types.js.map +1 -1
  121. package/dist/server/lib/workspaceProcessEnvironment.js +2 -2
  122. package/dist/server/lib/workspaceProcessEnvironment.js.map +1 -1
  123. package/dist/server/workers/review.js +19 -11
  124. package/dist/server/workers/review.js.map +1 -1
  125. package/package.json +1 -1
  126. package/dist/client/assets/GitHubActionsDialog-BGecTzoq.js +0 -1
  127. package/dist/client/assets/VerificationDialog-D4QkMLZr.js +0 -4
  128. package/dist/client/assets/channel-BwRO4uiw.js +0 -1
  129. package/dist/client/assets/classDiagram-4FO5ZUOK-BIszcze-.js +0 -1
  130. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-D5dvxldS.js +0 -1
  131. package/dist/client/assets/index-CYPgEn1h.css +0 -2
  132. package/dist/client/assets/index-Ck2OKMsl.js +0 -276
  133. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DmICWsmn.js +0 -1
@@ -0,0 +1,231 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { normalizeCheckDefinitions } from './checkDefinitions.js';
3
+ export const CONSEQUENTIAL_ACTION_SCHEMA_VERSION = 1;
4
+ export const MAX_CONSEQUENTIAL_ACTION_BYTES = 64 * 1024;
5
+ const SHA256_PATTERN = /^[0-9a-f]{64}$/;
6
+ const GIT_OBJECT_ID_PATTERN = /^[0-9a-f]{40}([0-9a-f]{24})?$/;
7
+ const LOGICAL_REFERENCE_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:/@-]*$/;
8
+ const boundedString = (value, name, maxBytes) => {
9
+ const normalized = value.trim();
10
+ if (normalized.length === 0 || Buffer.byteLength(normalized, 'utf8') > maxBytes) {
11
+ throw new Error(`${name} must contain between 1 and ${maxBytes} bytes`);
12
+ }
13
+ return normalized;
14
+ };
15
+ const boundedExactString = (value, name, maxBytes) => {
16
+ if (value.length === 0 || value.includes('\0') || Buffer.byteLength(value, 'utf8') > maxBytes) {
17
+ throw new Error(`${name} must contain between 1 and ${maxBytes} bytes without null characters`);
18
+ }
19
+ return value;
20
+ };
21
+ const fingerprint = (value, name) => {
22
+ const normalized = boundedString(value, name, 64);
23
+ if (!SHA256_PATTERN.test(normalized)) {
24
+ throw new Error(`${name} must be a lowercase SHA-256 fingerprint`);
25
+ }
26
+ return normalized;
27
+ };
28
+ const gitObjectId = (value, name) => {
29
+ const normalized = boundedString(value, name, 64);
30
+ if (!GIT_OBJECT_ID_PATTERN.test(normalized)) {
31
+ throw new Error(`${name} must be a lowercase Git object ID`);
32
+ }
33
+ return normalized;
34
+ };
35
+ const sortedUnique = (values, name, maxEntries) => {
36
+ if (values.length > maxEntries) {
37
+ throw new Error(`${name} may contain at most ${maxEntries} entries`);
38
+ }
39
+ const normalized = [...new Set(values.map(value => boundedString(value, name, 200)))].sort();
40
+ if (normalized.some(value => !LOGICAL_REFERENCE_PATTERN.test(value))) {
41
+ throw new Error(`${name} contains an invalid logical reference`);
42
+ }
43
+ return normalized;
44
+ };
45
+ const uniqueBounded = (values, name, maxEntries, maxBytes) => {
46
+ if (values.length > maxEntries) {
47
+ throw new Error(`${name} may contain at most ${maxEntries} entries`);
48
+ }
49
+ return [...new Set(values.map(value => boundedString(value, name, maxBytes)))];
50
+ };
51
+ const normalizeCommon = (action) => {
52
+ const environmentFields = [
53
+ action.authority.environment_id,
54
+ action.authority.environment_revision,
55
+ action.authority.environment_validation_fingerprint,
56
+ ];
57
+ if (environmentFields.some(value => value !== null) && environmentFields.some(value => value === null)) {
58
+ throw new Error('Consequential action environment authority must be wholly present or absent');
59
+ }
60
+ if (action.authority.environment_revision !== null
61
+ && (!Number.isSafeInteger(action.authority.environment_revision) || action.authority.environment_revision < 1)) {
62
+ throw new Error('Consequential action environment revision must be a positive integer');
63
+ }
64
+ if (!Number.isSafeInteger(action.authority.execution_profile_revision) || action.authority.execution_profile_revision < 0) {
65
+ throw new Error('Consequential action execution profile revision must be a non-negative integer');
66
+ }
67
+ if (!['governed', 'legacy_host'].includes(action.authority.execution_profile_compatibility)) {
68
+ throw new Error('Consequential action execution profile compatibility is invalid');
69
+ }
70
+ return {
71
+ schema_version: CONSEQUENTIAL_ACTION_SCHEMA_VERSION,
72
+ workspace_git: {
73
+ workspace_path: boundedExactString(action.workspace_git.workspace_path, 'Workspace path', 4096),
74
+ branch: action.workspace_git.branch === null
75
+ ? null
76
+ : boundedString(action.workspace_git.branch, 'Git branch', 500),
77
+ head_sha: gitObjectId(action.workspace_git.head_sha, 'Git HEAD'),
78
+ remote_head_sha: action.workspace_git.remote_head_sha === null
79
+ ? null
80
+ : gitObjectId(action.workspace_git.remote_head_sha, 'Remote Git HEAD'),
81
+ state_fingerprint: fingerprint(action.workspace_git.state_fingerprint, 'Workspace Git state fingerprint'),
82
+ },
83
+ authority: {
84
+ execution_profile_revision_id: boundedString(action.authority.execution_profile_revision_id, 'Execution profile revision ID', 128),
85
+ execution_profile_revision: action.authority.execution_profile_revision,
86
+ execution_profile_fingerprint: fingerprint(action.authority.execution_profile_fingerprint, 'Execution profile fingerprint'),
87
+ execution_profile_compatibility: action.authority.execution_profile_compatibility,
88
+ effective_capabilities: sortedUnique(action.authority.effective_capabilities, 'Effective capability', 64),
89
+ environment_id: action.authority.environment_id === null
90
+ ? null
91
+ : boundedString(action.authority.environment_id, 'Environment ID', 128),
92
+ environment_revision: action.authority.environment_revision,
93
+ environment_validation_fingerprint: action.authority.environment_validation_fingerprint === null
94
+ ? null
95
+ : fingerprint(action.authority.environment_validation_fingerprint, 'Environment validation fingerprint'),
96
+ },
97
+ logical_secret_references: sortedUnique(action.logical_secret_references, 'Logical secret reference', 64),
98
+ };
99
+ };
100
+ export const normalizeConsequentialAction = (action) => {
101
+ if (action.schema_version !== CONSEQUENTIAL_ACTION_SCHEMA_VERSION) {
102
+ throw new Error(`Unsupported consequential action schema version: ${String(action.schema_version)}`);
103
+ }
104
+ const common = normalizeCommon(action);
105
+ let normalized;
106
+ if (action.kind === 'git_push') {
107
+ if (typeof action.target.force !== 'boolean') {
108
+ throw new Error('Git push force classification must be boolean');
109
+ }
110
+ if (action.target.source_kind !== undefined && !['project', 'ticket'].includes(action.target.source_kind)) {
111
+ throw new Error('Unsupported Git push source kind');
112
+ }
113
+ if (action.target.target_kind !== undefined && !['repo_root', 'bundle', 'ticket'].includes(action.target.target_kind)) {
114
+ throw new Error('Unsupported Git push target kind');
115
+ }
116
+ if (action.target.expires_at !== undefined && !Number.isFinite(new Date(action.target.expires_at).getTime())) {
117
+ throw new Error('Git push approval expiry is invalid');
118
+ }
119
+ normalized = {
120
+ ...common,
121
+ kind: 'git_push',
122
+ target: {
123
+ remote_name: boundedString(action.target.remote_name, 'Git remote name', 200),
124
+ remote_url_fingerprint: fingerprint(action.target.remote_url_fingerprint, 'Git remote URL fingerprint'),
125
+ ref: boundedString(action.target.ref, 'Git target ref', 500),
126
+ force: action.target.force,
127
+ ...(action.target.project_id !== undefined
128
+ ? { project_id: boundedString(action.target.project_id, 'Git push project ID', 128) }
129
+ : {}),
130
+ ...(action.target.source_kind !== undefined ? { source_kind: action.target.source_kind } : {}),
131
+ ...(action.target.source_id !== undefined
132
+ ? { source_id: boundedString(action.target.source_id, 'Git push source ID', 128) }
133
+ : {}),
134
+ ...(action.target.target_kind !== undefined ? { target_kind: action.target.target_kind } : {}),
135
+ ...(action.target.bundle_id !== undefined
136
+ ? { bundle_id: action.target.bundle_id === null ? null : boundedString(action.target.bundle_id, 'Git push bundle ID', 128) }
137
+ : {}),
138
+ ...(action.target.effective_git_authority !== undefined
139
+ ? { effective_git_authority: boundedString(action.target.effective_git_authority, 'Effective Git authority', 200) }
140
+ : {}),
141
+ ...(action.target.capabilities !== undefined
142
+ ? { capabilities: sortedUnique(action.target.capabilities, 'Git push capability', 64) }
143
+ : {}),
144
+ ...(action.target.degradations !== undefined
145
+ ? { degradations: uniqueBounded(action.target.degradations, 'Git push degradation', 64, 200).sort() }
146
+ : {}),
147
+ ...(action.target.expires_at !== undefined
148
+ ? { expires_at: new Date(action.target.expires_at).toISOString() }
149
+ : {}),
150
+ },
151
+ };
152
+ }
153
+ else if (action.kind === 'custom_check') {
154
+ if (!['project', 'bundle', 'ticket'].includes(action.target.scope_kind)) {
155
+ throw new Error('Unsupported custom check scope kind');
156
+ }
157
+ if (!['production', 'non_production'].includes(action.target.environment_classification)) {
158
+ throw new Error('Unsupported custom check environment classification');
159
+ }
160
+ const definitionResult = action.target.definition_snapshot
161
+ ? normalizeCheckDefinitions([action.target.definition_snapshot], { allowOversizedIds: true })
162
+ : null;
163
+ if (definitionResult && 'error' in definitionResult) {
164
+ throw new Error(`Custom check definition snapshot is invalid: ${definitionResult.error}`);
165
+ }
166
+ if (action.target.expires_at !== undefined && !Number.isFinite(new Date(action.target.expires_at).getTime())) {
167
+ throw new Error('Custom check approval expiry is invalid');
168
+ }
169
+ if (action.target.target_workspace_identity && (!SHA256_PATTERN.test(action.target.target_workspace_identity.fingerprint)
170
+ || !GIT_OBJECT_ID_PATTERN.test(action.target.target_workspace_identity.head))) {
171
+ throw new Error('Custom check target workspace identity is invalid');
172
+ }
173
+ const selectedDefinitionIds = action.target.selected_definition_ids
174
+ ? uniqueBounded(action.target.selected_definition_ids, 'Selected check definition ID', 128, 500)
175
+ : undefined;
176
+ normalized = {
177
+ ...common,
178
+ kind: 'custom_check',
179
+ target: {
180
+ check_definition_id: boundedString(action.target.check_definition_id, 'Check definition ID', 500),
181
+ check_definition_fingerprint: fingerprint(action.target.check_definition_fingerprint, 'Check definition fingerprint'),
182
+ scope_kind: action.target.scope_kind,
183
+ scope_id: boundedString(action.target.scope_id, 'Check scope ID', 128),
184
+ environment_classification: action.target.environment_classification,
185
+ ...(definitionResult && 'value' in definitionResult
186
+ ? { definition_snapshot: definitionResult.value[0] }
187
+ : {}),
188
+ ...(action.target.effective_command !== undefined
189
+ ? { effective_command: boundedExactString(action.target.effective_command, 'Effective check command', 16 * 1024) }
190
+ : {}),
191
+ ...(action.target.effective_cwd !== undefined
192
+ ? { effective_cwd: boundedExactString(action.target.effective_cwd, 'Effective check working directory', 4096) }
193
+ : {}),
194
+ ...(selectedDefinitionIds ? { selected_definition_ids: selectedDefinitionIds } : {}),
195
+ ...(action.target.target_workspace_identity
196
+ ? { target_workspace_identity: action.target.target_workspace_identity }
197
+ : {}),
198
+ ...(action.target.automation_lineage ? {
199
+ automation_lineage: {
200
+ batch_run_id: boundedString(action.target.automation_lineage.batch_run_id, 'Check batch run ID', 128),
201
+ parent_run_id: action.target.automation_lineage.parent_run_id === null
202
+ ? null
203
+ : boundedString(action.target.automation_lineage.parent_run_id, 'Automation parent run ID', 128),
204
+ boundary_purpose: action.target.automation_lineage.boundary_purpose === null
205
+ ? null
206
+ : boundedString(action.target.automation_lineage.boundary_purpose, 'Automation boundary purpose', 100),
207
+ depth: action.target.automation_lineage.depth,
208
+ review_fix_enabled: action.target.automation_lineage.review_fix_enabled,
209
+ },
210
+ } : {}),
211
+ ...(action.target.expires_at !== undefined
212
+ ? { expires_at: new Date(action.target.expires_at).toISOString() }
213
+ : {}),
214
+ },
215
+ };
216
+ }
217
+ else {
218
+ throw new Error('Unsupported consequential action kind');
219
+ }
220
+ const serialized = JSON.stringify(normalized);
221
+ if (Buffer.byteLength(serialized, 'utf8') > MAX_CONSEQUENTIAL_ACTION_BYTES) {
222
+ throw new Error('Consequential action snapshot exceeds the durable evidence limit');
223
+ }
224
+ return normalized;
225
+ };
226
+ export const serializeConsequentialAction = (action) => (JSON.stringify(normalizeConsequentialAction(action)));
227
+ export const fingerprintConsequentialAction = (action) => createHash('sha256')
228
+ .update('archon-consequential-action-v1\0', 'utf8')
229
+ .update(serializeConsequentialAction(action), 'utf8')
230
+ .digest('hex');
231
+ //# sourceMappingURL=consequentialActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consequentialActions.js","sourceRoot":"","sources":["../../../server/lib/consequentialActions.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,17 @@
1
1
  import { QUALIFIED_DOCKER_SANDBOX_TEMPLATES, DockerSandboxCollisionFailure, DockerSandboxStopVerificationFailure, createDockerSandboxAdapter, createSbxCommandRunner, } from './dockerSandboxExecutionEnvironment.js';
2
+ import { applyScopedNetworkRules, checkDestinationAccess, inspectSandboxNetworkRules, removeScopedNetworkRules, } from './dockerSandboxNetworkPolicy.js';
2
3
  import { createDockerSandboxRuntimeController, } from './dockerSandboxRuntimeController.js';
4
+ import { appendExecutionEnvironmentEvent, listExecutionEnvironmentEvents, } from './executionEnvironments.js';
3
5
  const runner = createSbxCommandRunner();
4
6
  export const dockerSandboxAdapter = createDockerSandboxAdapter(runner);
5
7
  export const dockerSandboxRuntimeController = createDockerSandboxRuntimeController({ runner });
6
8
  export const dockerSandboxRunner = runner;
9
+ export const dockerSandboxNetworkPolicyOperations = {
10
+ applyScopedNetworkRules: (sandboxName, resources, options) => applyScopedNetworkRules(runner, sandboxName, resources, options),
11
+ inspectSandboxNetworkRules: (sandboxName, options) => (inspectSandboxNetworkRules(runner, sandboxName, options)),
12
+ checkDestinationAccess: (sandboxName, target, options) => (checkDestinationAccess(runner, sandboxName, target, options)),
13
+ removeScopedNetworkRules: (sandboxName, ruleIds, options) => (removeScopedNetworkRules(runner, sandboxName, ruleIds, options)),
14
+ };
7
15
  export const defaultDockerSandboxEnvironmentDependencies = {
8
16
  adapter: dockerSandboxAdapter,
9
17
  runtimeController: dockerSandboxRuntimeController,
@@ -32,12 +40,123 @@ export const reconnectAndInspectDockerSandbox = async (environment, dependencies
32
40
  }
33
41
  return reconnected;
34
42
  };
43
+ export const resolveArchonOwnedNetworkRuleIds = (environment) => {
44
+ const sandboxName = resolveExpectedDockerSandboxIdentity(environment).name;
45
+ const events = listExecutionEnvironmentEvents(environment.project_id, environment.id);
46
+ const ownedRuleIds = new Set();
47
+ for (const event of events) {
48
+ if (event.event_type !== 'environment_network_rules_applied') {
49
+ continue;
50
+ }
51
+ if (event.metadata?.sandboxName !== sandboxName) {
52
+ continue;
53
+ }
54
+ const appliedRuleIds = event.metadata?.appliedRuleIds;
55
+ if (!Array.isArray(appliedRuleIds)) {
56
+ continue;
57
+ }
58
+ for (const ruleId of appliedRuleIds) {
59
+ if (typeof ruleId === 'string' && ruleId.length > 0) {
60
+ ownedRuleIds.add(ruleId);
61
+ }
62
+ }
63
+ }
64
+ return [...ownedRuleIds];
65
+ };
66
+ export const removeScopedRulesBestEffort = async (environment, dependencies = defaultDockerSandboxEnvironmentDependencies) => {
67
+ const sandboxName = resolveExpectedDockerSandboxIdentity(environment).name;
68
+ let ownedRuleIds;
69
+ try {
70
+ ownedRuleIds = resolveArchonOwnedNetworkRuleIds(environment);
71
+ }
72
+ catch (error) {
73
+ return {
74
+ sandboxName,
75
+ removedRuleIds: [],
76
+ failures: [{
77
+ ruleId: '*',
78
+ message: error instanceof Error ? error.message : 'Archon-created network rules could not be resolved.',
79
+ }],
80
+ };
81
+ }
82
+ if (ownedRuleIds.length === 0) {
83
+ return { sandboxName, removedRuleIds: [], failures: [] };
84
+ }
85
+ let scopedRuleIds;
86
+ try {
87
+ scopedRuleIds = new Set((await dependencies.adapter.inspectSandboxNetworkRules(sandboxName)).map(rule => rule.id));
88
+ }
89
+ catch (error) {
90
+ return {
91
+ sandboxName,
92
+ removedRuleIds: [],
93
+ failures: [{
94
+ ruleId: '*',
95
+ message: error instanceof Error ? error.message : 'Scoped network rules could not be inspected.',
96
+ }],
97
+ };
98
+ }
99
+ const removedRuleIds = [];
100
+ const failures = [];
101
+ for (const ruleId of ownedRuleIds) {
102
+ if (!scopedRuleIds.has(ruleId)) {
103
+ continue;
104
+ }
105
+ try {
106
+ await dependencies.adapter.removeScopedNetworkRules(sandboxName, [ruleId]);
107
+ removedRuleIds.push(ruleId);
108
+ }
109
+ catch (error) {
110
+ failures.push({
111
+ ruleId,
112
+ message: error instanceof Error ? error.message : `Scoped network rule ${ruleId} could not be removed.`,
113
+ });
114
+ }
115
+ }
116
+ return { sandboxName, removedRuleIds, failures };
117
+ };
118
+ const recordNetworkRuleCleanupFailure = (environment, outcome) => {
119
+ if (outcome.failures.length === 0) {
120
+ return;
121
+ }
122
+ try {
123
+ appendExecutionEnvironmentEvent({
124
+ projectId: environment.project_id,
125
+ environmentId: environment.id,
126
+ eventType: 'environment_network_rule_cleanup_pending',
127
+ fromState: environment.lifecycle_state,
128
+ toState: environment.lifecycle_state,
129
+ message: `Archon-created scoped network rules could not be fully cleaned up for ${outcome.sandboxName}.`,
130
+ metadata: {
131
+ sandboxName: outcome.sandboxName,
132
+ removedRuleIds: outcome.removedRuleIds,
133
+ failures: outcome.failures,
134
+ },
135
+ });
136
+ }
137
+ catch {
138
+ // Best-effort evidence only; cleanup failure must never block termination.
139
+ }
140
+ };
35
141
  export const stopAndVerifyDockerSandbox = async (environment, dependencies = defaultDockerSandboxEnvironmentDependencies) => {
36
142
  const expected = resolveExpectedDockerSandboxIdentity(environment);
37
143
  const observed = await dependencies.adapter.inspect(expected.name);
38
144
  if (!observed) {
39
145
  return 'absent';
40
146
  }
147
+ if (observed.name !== expected.name
148
+ || observed.agent !== expected.agent
149
+ || observed.workspacePath !== expected.workspacePath
150
+ || observed.template !== expected.template) {
151
+ throw new DockerSandboxCollisionFailure(expected.name, `Docker Sandbox ${expected.name} identity does not match the persisted environment`);
152
+ }
153
+ try {
154
+ const networkCleanup = await removeScopedRulesBestEffort(environment, dependencies);
155
+ recordNetworkRuleCleanupFailure(environment, networkCleanup);
156
+ }
157
+ catch {
158
+ // Best-effort rule cleanup must never block sandbox termination.
159
+ }
41
160
  await dependencies.adapter.stop(expected);
42
161
  const after = await dependencies.adapter.inspect(expected.name);
43
162
  if (after && (after.name !== expected.name
@@ -1 +1 @@
1
- {"version":3,"file":"dockerSandboxEnvironmentOperations.js","sourceRoot":"","sources":["../../../server/lib/dockerSandboxEnvironmentOperations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dockerSandboxEnvironmentOperations.js","sourceRoot":"","sources":["../../../server/lib/dockerSandboxEnvironmentOperations.ts"],"names":[],"mappings":"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"}