@straiffi/archon 1.8.20 → 1.8.22

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 (170) hide show
  1. package/dist/client/assets/{ActivityView-DDE3U1zB.js → ActivityView-CdEPjmqD.js} +1 -1
  2. package/dist/client/assets/GitHubActionsDialog-CA189pr2.js +1 -0
  3. package/dist/client/assets/VerificationDialog-BPVkhKRj.js +4 -0
  4. package/dist/client/assets/{architectureDiagram-3BPJPVTR-oPUmRpZr.js → architectureDiagram-3BPJPVTR-BrZ08mqq.js} +1 -1
  5. package/dist/client/assets/{blockDiagram-GPEHLZMM-0sq1jkkp.js → blockDiagram-GPEHLZMM-b93XwJ6Z.js} +1 -1
  6. package/dist/client/assets/{c4Diagram-AAUBKEIU-BeDxMy7J.js → c4Diagram-AAUBKEIU-BKOdbZ_v.js} +1 -1
  7. package/dist/client/assets/channel-D0zqzBT_.js +1 -0
  8. package/dist/client/assets/{chunk-2J33WTMH-D8VGsje2.js → chunk-2J33WTMH-D7Vxn_1m.js} +1 -1
  9. package/dist/client/assets/{chunk-3OPIFGDE-DuTUTeBe.js → chunk-3OPIFGDE-B1zo2UZq.js} +1 -1
  10. package/dist/client/assets/{chunk-5ZQYHXKU-BzX5dPNW.js → chunk-5ZQYHXKU-BajvkDdQ.js} +1 -1
  11. package/dist/client/assets/{chunk-727SXJPM-DS9putxN.js → chunk-727SXJPM-CSH7cVpV.js} +1 -1
  12. package/dist/client/assets/{chunk-AQP2D5EJ-CWzFZRBv.js → chunk-AQP2D5EJ-DE-wgUNP.js} +1 -1
  13. package/dist/client/assets/{chunk-CSCIHK7Q-DXZ-ADYW.js → chunk-CSCIHK7Q-Ba7JgCEf.js} +1 -1
  14. package/dist/client/assets/{chunk-KSCS5N6A-BD7mL3KK.js → chunk-KSCS5N6A-0o3YWkHM.js} +1 -1
  15. package/dist/client/assets/{chunk-L5ZTLDWV-DmYQi9AP.js → chunk-L5ZTLDWV-DihWczP8.js} +1 -1
  16. package/dist/client/assets/{chunk-LZXEDZCA-CZyFYHvS.js → chunk-LZXEDZCA-Bxnu-hme.js} +2 -2
  17. package/dist/client/assets/{chunk-ND2GUHAM-BxdjvT9I.js → chunk-ND2GUHAM-CoaR5kmP.js} +1 -1
  18. package/dist/client/assets/{chunk-NZK2D7GU-BwuZcZ_9.js → chunk-NZK2D7GU-By92Rd3d.js} +1 -1
  19. package/dist/client/assets/{chunk-O5CBEL6O-CC-TZXr3.js → chunk-O5CBEL6O-D83Pkgfu.js} +1 -1
  20. package/dist/client/assets/{chunk-WU5MYG2G-CJZJkca2.js → chunk-WU5MYG2G-v8OVf5Lz.js} +1 -1
  21. package/dist/client/assets/classDiagram-4FO5ZUOK-ChhyvHH2.js +1 -0
  22. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-Cl02kurK.js +1 -0
  23. package/dist/client/assets/{dagre-BM42HDAG-D2L5RvPF.js → dagre-BM42HDAG-Dq1ALF7Z.js} +1 -1
  24. package/dist/client/assets/{diagram-2AECGRRQ-DBJzxSqZ.js → diagram-2AECGRRQ-1t1_TKtu.js} +1 -1
  25. package/dist/client/assets/{diagram-5GNKFQAL-J_1M-Wou.js → diagram-5GNKFQAL-DtvYRL6f.js} +1 -1
  26. package/dist/client/assets/{diagram-KO2AKTUF-CmT1Vbmc.js → diagram-KO2AKTUF-PRNrSX5F.js} +1 -1
  27. package/dist/client/assets/{diagram-LMA3HP47-DfPoJyQI.js → diagram-LMA3HP47-DaTX0DhT.js} +1 -1
  28. package/dist/client/assets/{diagram-OG6HWLK6-D4uEb6vo.js → diagram-OG6HWLK6-C2p9p-92.js} +1 -1
  29. package/dist/client/assets/{erDiagram-TEJ5UH35-l7yIFj0e.js → erDiagram-TEJ5UH35-DKzLtnp-.js} +1 -1
  30. package/dist/client/assets/{flowDiagram-I6XJVG4X-B3caTMes.js → flowDiagram-I6XJVG4X-GdL8lm6e.js} +1 -1
  31. package/dist/client/assets/{ganttDiagram-6RSMTGT7-9Am36v9m.js → ganttDiagram-6RSMTGT7-Ok-4XYwT.js} +1 -1
  32. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-B7OjYsv_.js → gitGraphDiagram-PVQCEYII-DSMrOCK7.js} +1 -1
  33. package/dist/client/assets/index-Bs8KsdV9.js +276 -0
  34. package/dist/client/assets/index-DdwM8Wgt.css +2 -0
  35. package/dist/client/assets/{infoDiagram-5YYISTIA-ZAcNejkW.js → infoDiagram-5YYISTIA-Dl4hRXis.js} +1 -1
  36. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-BaaJwuN0.js → ishikawaDiagram-YF4QCWOH-C1Dc1fTT.js} +1 -1
  37. package/dist/client/assets/{journeyDiagram-JHISSGLW-DjzTU3kM.js → journeyDiagram-JHISSGLW-CUscmJze.js} +1 -1
  38. package/dist/client/assets/{kanban-definition-UN3LZRKU-DYRchzub.js → kanban-definition-UN3LZRKU-C0nwYjQV.js} +1 -1
  39. package/dist/client/assets/{line-X0j9gj61.js → line-ByiuEIg_.js} +1 -1
  40. package/dist/client/assets/{mermaid-parser.core-DCKG87Vl.js → mermaid-parser.core-B-XdAyDR.js} +1 -1
  41. package/dist/client/assets/{mermaid.core-BxI5T2gs.js → mermaid.core-D_bIfuZD.js} +3 -3
  42. package/dist/client/assets/{mindmap-definition-RKZ34NQL-BE7MZzQO.js → mindmap-definition-RKZ34NQL-BGNiPJDK.js} +1 -1
  43. package/dist/client/assets/{pieDiagram-4H26LBE5-D3fTYovg.js → pieDiagram-4H26LBE5-CP6FpAoO.js} +1 -1
  44. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-B35nXRdQ.js → quadrantDiagram-W4KKPZXB-dsAWBAQn.js} +1 -1
  45. package/dist/client/assets/{requirementDiagram-4Y6WPE33-CLBcHvP0.js → requirementDiagram-4Y6WPE33-DJH-zHqF.js} +1 -1
  46. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-DdBCxGHF.js → sankeyDiagram-5OEKKPKP-BJMnZrqH.js} +1 -1
  47. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-KcLt0X1K.js → sequenceDiagram-3UESZ5HK-CzNjUSlM.js} +1 -1
  48. package/dist/client/assets/{stateDiagram-AJRCARHV-Bq23ObLK.js → stateDiagram-AJRCARHV-jppMhOwh.js} +1 -1
  49. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-CLR1WgdV.js +1 -0
  50. package/dist/client/assets/{timeline-definition-PNZ67QCA-SK3oVUD9.js → timeline-definition-PNZ67QCA-BX2CI5H_.js} +1 -1
  51. package/dist/client/assets/{vennDiagram-CIIHVFJN-COVtAlEC.js → vennDiagram-CIIHVFJN-Bd1KZaXh.js} +1 -1
  52. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-BvfOOwga.js → wardleyDiagram-YWT4CUSO-D-0BNz49.js} +1 -1
  53. package/dist/client/assets/{xychartDiagram-2RQKCTM6-DFnAD9k4.js → xychartDiagram-2RQKCTM6-DbYa0ZWK.js} +1 -1
  54. package/dist/client/index.html +2 -2
  55. package/dist/server/db.js +780 -16
  56. package/dist/server/db.js.map +1 -1
  57. package/dist/server/index.js +198 -20
  58. package/dist/server/index.js.map +1 -1
  59. package/dist/server/lib/agent.js +8 -4
  60. package/dist/server/lib/agent.js.map +1 -1
  61. package/dist/server/lib/agentProvider.js +8 -1
  62. package/dist/server/lib/agentProvider.js.map +1 -1
  63. package/dist/server/lib/approvalReconciliation.js +101 -0
  64. package/dist/server/lib/approvalReconciliation.js.map +1 -0
  65. package/dist/server/lib/approvalRequests.js +587 -0
  66. package/dist/server/lib/approvalRequests.js.map +1 -0
  67. package/dist/server/lib/approvalRoutes.js +143 -0
  68. package/dist/server/lib/approvalRoutes.js.map +1 -0
  69. package/dist/server/lib/automationProgression.js +44 -14
  70. package/dist/server/lib/automationProgression.js.map +1 -1
  71. package/dist/server/lib/buildCompletionContinuation.js +14 -3
  72. package/dist/server/lib/buildCompletionContinuation.js.map +1 -1
  73. package/dist/server/lib/buildExecutionEnvironment.js +350 -66
  74. package/dist/server/lib/buildExecutionEnvironment.js.map +1 -1
  75. package/dist/server/lib/buildOpenQuestionOperations.js +47 -3
  76. package/dist/server/lib/buildOpenQuestionOperations.js.map +1 -1
  77. package/dist/server/lib/buildSequences.js +267 -18
  78. package/dist/server/lib/buildSequences.js.map +1 -1
  79. package/dist/server/lib/buildSetupAuthority.js +138 -0
  80. package/dist/server/lib/buildSetupAuthority.js.map +1 -0
  81. package/dist/server/lib/bundleReviewOperations.js +15 -4
  82. package/dist/server/lib/bundleReviewOperations.js.map +1 -1
  83. package/dist/server/lib/checkDefinitions.js +29 -1
  84. package/dist/server/lib/checkDefinitions.js.map +1 -1
  85. package/dist/server/lib/checkRunner.js +306 -27
  86. package/dist/server/lib/checkRunner.js.map +1 -1
  87. package/dist/server/lib/checkRuns.js +4 -2
  88. package/dist/server/lib/checkRuns.js.map +1 -1
  89. package/dist/server/lib/consequentialActionAuthority.js +142 -0
  90. package/dist/server/lib/consequentialActionAuthority.js.map +1 -0
  91. package/dist/server/lib/consequentialActions.js +231 -0
  92. package/dist/server/lib/consequentialActions.js.map +1 -0
  93. package/dist/server/lib/dockerSandboxCredentials.js +64 -10
  94. package/dist/server/lib/dockerSandboxCredentials.js.map +1 -1
  95. package/dist/server/lib/dockerSandboxEnvironmentOperations.js +119 -0
  96. package/dist/server/lib/dockerSandboxEnvironmentOperations.js.map +1 -1
  97. package/dist/server/lib/dockerSandboxExecutionEnvironment.js +174 -11
  98. package/dist/server/lib/dockerSandboxExecutionEnvironment.js.map +1 -1
  99. package/dist/server/lib/dockerSandboxExecutionProvider.js +12 -3
  100. package/dist/server/lib/dockerSandboxExecutionProvider.js.map +1 -1
  101. package/dist/server/lib/dockerSandboxNetworkPolicy.js +222 -0
  102. package/dist/server/lib/dockerSandboxNetworkPolicy.js.map +1 -0
  103. package/dist/server/lib/executionCredentialCapabilities.js +106 -0
  104. package/dist/server/lib/executionCredentialCapabilities.js.map +1 -0
  105. package/dist/server/lib/executionEnvironment.js.map +1 -1
  106. package/dist/server/lib/executionEnvironmentContexts.js +59 -3
  107. package/dist/server/lib/executionEnvironmentContexts.js.map +1 -1
  108. package/dist/server/lib/executionEnvironmentLifecycle.js +34 -0
  109. package/dist/server/lib/executionEnvironmentLifecycle.js.map +1 -1
  110. package/dist/server/lib/executionEnvironmentRoutes.js +127 -9
  111. package/dist/server/lib/executionEnvironmentRoutes.js.map +1 -1
  112. package/dist/server/lib/executionEnvironmentValidation.js +169 -45
  113. package/dist/server/lib/executionEnvironmentValidation.js.map +1 -1
  114. package/dist/server/lib/executionEnvironmentValidationOperations.js +203 -19
  115. package/dist/server/lib/executionEnvironmentValidationOperations.js.map +1 -1
  116. package/dist/server/lib/executionEnvironments.js +103 -14
  117. package/dist/server/lib/executionEnvironments.js.map +1 -1
  118. package/dist/server/lib/executionProfileRoutes.js +67 -0
  119. package/dist/server/lib/executionProfileRoutes.js.map +1 -0
  120. package/dist/server/lib/executionProfileStore.js +117 -0
  121. package/dist/server/lib/executionProfileStore.js.map +1 -0
  122. package/dist/server/lib/executionProfiles.js +324 -0
  123. package/dist/server/lib/executionProfiles.js.map +1 -0
  124. package/dist/server/lib/executionReconciliation.js +345 -197
  125. package/dist/server/lib/executionReconciliation.js.map +1 -1
  126. package/dist/server/lib/executionRetry.js +24 -5
  127. package/dist/server/lib/executionRetry.js.map +1 -1
  128. package/dist/server/lib/executionRunAuthority.js +467 -0
  129. package/dist/server/lib/executionRunAuthority.js.map +1 -0
  130. package/dist/server/lib/executionRuns.js +30 -4
  131. package/dist/server/lib/executionRuns.js.map +1 -1
  132. package/dist/server/lib/executionTimeline.js +2 -1
  133. package/dist/server/lib/executionTimeline.js.map +1 -1
  134. package/dist/server/lib/git.js +77 -10
  135. package/dist/server/lib/git.js.map +1 -1
  136. package/dist/server/lib/gitPushApprovals.js +367 -0
  137. package/dist/server/lib/gitPushApprovals.js.map +1 -0
  138. package/dist/server/lib/hostExecutionEnvironment.js +7 -1
  139. package/dist/server/lib/hostExecutionEnvironment.js.map +1 -1
  140. package/dist/server/lib/mobileAccess.js +115 -1
  141. package/dist/server/lib/mobileAccess.js.map +1 -1
  142. package/dist/server/lib/productionCheckApprovals.js +106 -0
  143. package/dist/server/lib/productionCheckApprovals.js.map +1 -0
  144. package/dist/server/lib/projects.js +1 -0
  145. package/dist/server/lib/projects.js.map +1 -1
  146. package/dist/server/lib/run.js +58 -2
  147. package/dist/server/lib/run.js.map +1 -1
  148. package/dist/server/lib/ticketFollowUpOperations.js +32 -6
  149. package/dist/server/lib/ticketFollowUpOperations.js.map +1 -1
  150. package/dist/server/lib/transcriptRuns.js +3 -0
  151. package/dist/server/lib/transcriptRuns.js.map +1 -1
  152. package/dist/server/lib/types.js +40 -0
  153. package/dist/server/lib/types.js.map +1 -1
  154. package/dist/server/lib/workspaceProcessEnvironment.js +72 -1
  155. package/dist/server/lib/workspaceProcessEnvironment.js.map +1 -1
  156. package/dist/server/workers/build.js +214 -46
  157. package/dist/server/workers/build.js.map +1 -1
  158. package/dist/server/workers/followUp.js +74 -1
  159. package/dist/server/workers/followUp.js.map +1 -1
  160. package/dist/server/workers/review.js +30 -13
  161. package/dist/server/workers/review.js.map +1 -1
  162. package/package.json +1 -1
  163. package/dist/client/assets/GitHubActionsDialog-CM1z-amZ.js +0 -1
  164. package/dist/client/assets/VerificationDialog-oHjNllh6.js +0 -4
  165. package/dist/client/assets/channel-CF8hkOdu.js +0 -1
  166. package/dist/client/assets/classDiagram-4FO5ZUOK-D6FiG9_B.js +0 -1
  167. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-Bim05ijr.js +0 -1
  168. package/dist/client/assets/index-CsZfTdMO.css +0 -2
  169. package/dist/client/assets/index-DDefs3iM.js +0 -275
  170. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-BLzZdVo0.js +0 -1
@@ -0,0 +1,324 @@
1
+ import { createHash } from 'node:crypto';
2
+ export const EXECUTION_PROFILE_SCHEMA_VERSION = 2;
3
+ export const MAX_EXECUTION_PROFILE_PAYLOAD_BYTES = 16 * 1024;
4
+ export const MAX_EXECUTION_PROFILE_NETWORK_DESTINATIONS = 32;
5
+ const PROFILE_KEYS = [
6
+ 'schema_version',
7
+ 'compatibility',
8
+ 'provider_preference',
9
+ 'build_eligible',
10
+ 'isolation',
11
+ 'workspace_access',
12
+ 'credential_requirements',
13
+ 'fallback',
14
+ 'integration_access',
15
+ 'remote_git',
16
+ 'resources',
17
+ 'network',
18
+ ];
19
+ const LEGACY_PROFILE_KEYS = [
20
+ 'schema_version',
21
+ 'compatibility',
22
+ 'provider_preference',
23
+ 'build_eligible',
24
+ 'isolation',
25
+ 'workspace_access',
26
+ 'credential_requirements',
27
+ 'fallback',
28
+ 'integration_access',
29
+ 'remote_git',
30
+ 'resources',
31
+ 'network_enforcement',
32
+ ];
33
+ const CREDENTIAL_KEYS = [
34
+ 'id',
35
+ 'purpose',
36
+ 'workload',
37
+ 'agent',
38
+ 'model_provider',
39
+ 'authentication_mode',
40
+ 'required_protection',
41
+ ];
42
+ const isRecord = (value) => (typeof value === 'object' && value !== null && !Array.isArray(value));
43
+ const hasOnlyKeys = (value, keys) => (Object.keys(value).every(key => keys.includes(key)));
44
+ const compareCredentials = (left, right) => left.id.localeCompare(right.id);
45
+ const HOSTNAME_PATTERN = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/;
46
+ const IPV4_LITERAL_PATTERN = /^\d{1,3}(?:\.\d{1,3}){3}$/;
47
+ export const MAX_EXECUTION_PROFILE_NETWORK_HOST_BYTES = 253;
48
+ const compareStrings = (left, right) => (left < right ? -1 : left > right ? 1 : 0);
49
+ const compareDestinations = (left, right) => compareStrings(left.host, right.host)
50
+ || (left.port ?? 0) - (right.port ?? 0)
51
+ || compareStrings(left.purpose ?? '', right.purpose ?? '');
52
+ const normalizeNetworkDestination = (value) => {
53
+ if (!isRecord(value) || !hasOnlyKeys(value, ['host', 'port', 'purpose'])) {
54
+ return 'network destinations contain unsupported fields';
55
+ }
56
+ if (typeof value.host !== 'string') {
57
+ return 'network destination host must be a string';
58
+ }
59
+ const host = value.host.toLowerCase();
60
+ if (Buffer.byteLength(host, 'utf8') > MAX_EXECUTION_PROFILE_NETWORK_HOST_BYTES) {
61
+ return `network destination host must not exceed ${MAX_EXECUTION_PROFILE_NETWORK_HOST_BYTES} bytes`;
62
+ }
63
+ const wildcard = host.startsWith('*.');
64
+ const hostname = wildcard ? host.slice(2) : host;
65
+ if (hostname.includes(':')
66
+ || IPV4_LITERAL_PATTERN.test(hostname)
67
+ || !HOSTNAME_PATTERN.test(hostname)) {
68
+ return 'network destination host must be an exact hostname or a *.domain wildcard subdomain';
69
+ }
70
+ if (value.port !== undefined
71
+ && (typeof value.port !== 'number' || !Number.isInteger(value.port) || value.port < 1 || value.port > 65535)) {
72
+ return 'network destination port must be an integer between 1 and 65535';
73
+ }
74
+ if (value.purpose !== undefined
75
+ && (typeof value.purpose !== 'string' || value.purpose.trim().length === 0 || value.purpose.length > 256)) {
76
+ return 'network destination purpose must be a short non-empty string';
77
+ }
78
+ return {
79
+ host: wildcard ? `*.${hostname}` : hostname,
80
+ ...(value.port !== undefined ? { port: value.port } : {}),
81
+ ...(value.purpose !== undefined ? { purpose: value.purpose.trim() } : {}),
82
+ };
83
+ };
84
+ const normalizeNetworkSection = (value) => {
85
+ if (!isRecord(value) || !hasOnlyKeys(value, ['mode', 'destinations'])) {
86
+ return 'execution profile network section contains unsupported fields';
87
+ }
88
+ if (value.mode !== 'unrestricted' && value.mode !== 'allowlist') {
89
+ return 'execution profile network mode is unsupported';
90
+ }
91
+ if (!Array.isArray(value.destinations)) {
92
+ return 'execution profile network destinations must be an array';
93
+ }
94
+ if (value.destinations.length > MAX_EXECUTION_PROFILE_NETWORK_DESTINATIONS) {
95
+ return `execution profile network accepts at most ${MAX_EXECUTION_PROFILE_NETWORK_DESTINATIONS} destinations`;
96
+ }
97
+ const destinations = [];
98
+ for (const candidate of value.destinations) {
99
+ const normalized = normalizeNetworkDestination(candidate);
100
+ if (typeof normalized === 'string') {
101
+ return normalized;
102
+ }
103
+ destinations.push(normalized);
104
+ }
105
+ if (value.mode === 'unrestricted' && destinations.length > 0) {
106
+ return 'unrestricted network mode cannot declare destinations';
107
+ }
108
+ if (value.mode === 'allowlist' && destinations.length === 0) {
109
+ return 'execution profile network allowlist requires at least one destination';
110
+ }
111
+ const canonical = [...destinations].sort(compareDestinations);
112
+ const deduped = canonical.filter((destination, index) => (index === 0 || compareDestinations(destination, canonical[index - 1]) !== 0));
113
+ return { mode: value.mode, destinations: deduped };
114
+ };
115
+ const normalizeCredential = (value) => {
116
+ if (!isRecord(value) || !hasOnlyKeys(value, CREDENTIAL_KEYS)) {
117
+ return 'credential requirements contain unsupported fields';
118
+ }
119
+ if (typeof value.id !== 'string' || !/^[a-z][a-z0-9_-]{0,63}$/.test(value.id)) {
120
+ return 'credential requirement id must be a lowercase logical identifier';
121
+ }
122
+ if (value.purpose !== 'model_authentication' || value.workload !== 'build') {
123
+ return 'credential requirements must be for Build model authentication';
124
+ }
125
+ if (value.agent !== 'opencode' && value.agent !== 'claude') {
126
+ return 'credential requirement agent must be opencode or claude';
127
+ }
128
+ if (typeof value.model_provider !== 'string' || !/^[a-z][a-z0-9_-]{0,63}$/.test(value.model_provider)) {
129
+ return 'credential requirement model_provider must be a lowercase logical identifier';
130
+ }
131
+ if (value.authentication_mode !== 'api_key' && value.authentication_mode !== 'oauth') {
132
+ return 'credential requirement authentication_mode must be api_key or oauth';
133
+ }
134
+ if (value.required_protection !== 'docker_brokered' && value.required_protection !== 'legacy_host_inheritance') {
135
+ return 'credential requirement required_protection is unsupported';
136
+ }
137
+ if (value.agent === 'claude' && value.model_provider !== 'anthropic') {
138
+ return 'Claude credential requirements must use the anthropic model provider';
139
+ }
140
+ return {
141
+ id: value.id,
142
+ purpose: value.purpose,
143
+ workload: value.workload,
144
+ agent: value.agent,
145
+ model_provider: value.model_provider,
146
+ authentication_mode: value.authentication_mode,
147
+ required_protection: value.required_protection,
148
+ };
149
+ };
150
+ export const normalizeExecutionProfile = (value) => {
151
+ let payloadBytes;
152
+ try {
153
+ payloadBytes = Buffer.byteLength(JSON.stringify(value), 'utf8');
154
+ }
155
+ catch {
156
+ return { ok: false, error: 'execution profile must be JSON serializable' };
157
+ }
158
+ if (payloadBytes > MAX_EXECUTION_PROFILE_PAYLOAD_BYTES) {
159
+ return { ok: false, error: 'execution profile payload is too large' };
160
+ }
161
+ if (!isRecord(value)
162
+ || (value.schema_version !== EXECUTION_PROFILE_SCHEMA_VERSION && value.schema_version !== 1)) {
163
+ return { ok: false, error: 'unsupported execution profile schema_version' };
164
+ }
165
+ const isLegacyV1 = value.schema_version === 1;
166
+ if (!hasOnlyKeys(value, isLegacyV1 ? LEGACY_PROFILE_KEYS : PROFILE_KEYS)) {
167
+ return { ok: false, error: 'execution profile contains unsupported fields' };
168
+ }
169
+ if (value.compatibility !== 'governed' && value.compatibility !== 'legacy_host') {
170
+ return { ok: false, error: 'execution profile compatibility is unsupported' };
171
+ }
172
+ if (value.provider_preference !== 'host' && value.provider_preference !== 'docker_sandbox') {
173
+ return { ok: false, error: 'execution profile provider_preference is unsupported' };
174
+ }
175
+ if (typeof value.build_eligible !== 'boolean') {
176
+ return { ok: false, error: 'execution profile build_eligible must be boolean' };
177
+ }
178
+ if (value.isolation !== 'host_process_allowed' && value.isolation !== 'microvm_required') {
179
+ return { ok: false, error: 'execution profile isolation is unsupported' };
180
+ }
181
+ if (!isRecord(value.workspace_access)
182
+ || !hasOnlyKeys(value.workspace_access, ['mode', 'additional_mounts'])
183
+ || value.workspace_access.mode !== 'exact_target'
184
+ || (value.workspace_access.additional_mounts !== undefined && (!Array.isArray(value.workspace_access.additional_mounts)
185
+ || value.workspace_access.additional_mounts.length !== 0))) {
186
+ return { ok: false, error: 'execution profile workspace access must be the exact target without additional mounts' };
187
+ }
188
+ if (!Array.isArray(value.credential_requirements)) {
189
+ return { ok: false, error: 'execution profile credential_requirements must be an array' };
190
+ }
191
+ const credentialRequirements = [];
192
+ const credentialIds = new Set();
193
+ for (const candidate of value.credential_requirements) {
194
+ const normalized = normalizeCredential(candidate);
195
+ if (typeof normalized === 'string') {
196
+ return { ok: false, error: normalized };
197
+ }
198
+ if (credentialIds.has(normalized.id)) {
199
+ return { ok: false, error: `duplicate credential requirement id: ${normalized.id}` };
200
+ }
201
+ credentialIds.add(normalized.id);
202
+ credentialRequirements.push(normalized);
203
+ }
204
+ if (value.fallback !== 'block' && value.fallback !== 'explicit_host') {
205
+ return { ok: false, error: 'execution profile fallback is unsupported' };
206
+ }
207
+ if ((value.integration_access !== undefined && value.integration_access !== 'none')
208
+ || (value.remote_git !== undefined && value.remote_git !== 'denied')
209
+ || (value.resources !== undefined && value.resources !== 'provider_defaults')
210
+ || (value.network_enforcement !== undefined && value.network_enforcement !== 'not_requested')) {
211
+ return { ok: false, error: 'execution profile deferred capabilities are fixed' };
212
+ }
213
+ if (isLegacyV1 && value.network !== undefined) {
214
+ return { ok: false, error: 'execution profile contains unsupported fields' };
215
+ }
216
+ let network;
217
+ if (isLegacyV1) {
218
+ network = { mode: 'unrestricted', destinations: [] };
219
+ }
220
+ else {
221
+ if (value.network === undefined) {
222
+ return { ok: false, error: 'execution profile requires an explicit network section' };
223
+ }
224
+ const normalizedNetwork = normalizeNetworkSection(value.network);
225
+ if (typeof normalizedNetwork === 'string') {
226
+ return { ok: false, error: normalizedNetwork };
227
+ }
228
+ network = normalizedNetwork;
229
+ }
230
+ const profile = {
231
+ schema_version: EXECUTION_PROFILE_SCHEMA_VERSION,
232
+ compatibility: value.compatibility,
233
+ provider_preference: value.provider_preference,
234
+ build_eligible: value.build_eligible,
235
+ isolation: value.isolation,
236
+ workspace_access: { mode: 'exact_target', additional_mounts: [] },
237
+ credential_requirements: credentialRequirements.sort(compareCredentials),
238
+ fallback: value.fallback,
239
+ integration_access: 'none',
240
+ remote_git: 'denied',
241
+ resources: 'provider_defaults',
242
+ network,
243
+ };
244
+ const policy = evaluateExecutionProfileMaximumPolicy(profile);
245
+ if (!policy.allowed) {
246
+ return { ok: false, error: policy.violations.join('; ') };
247
+ }
248
+ return { ok: true, profile };
249
+ };
250
+ export const evaluateExecutionProfileMaximumPolicy = (profile) => {
251
+ const violations = [];
252
+ if (profile.provider_preference === 'host' && profile.network.mode === 'allowlist') {
253
+ violations.push('the host provider cannot enforce a network destination allowlist');
254
+ }
255
+ if (profile.compatibility === 'legacy_host') {
256
+ if (profile.provider_preference !== 'host' || profile.isolation !== 'host_process_allowed' || profile.fallback !== 'block') {
257
+ violations.push('legacy host compatibility cannot request sandbox isolation or fallback');
258
+ }
259
+ if (profile.credential_requirements.some(requirement => requirement.required_protection !== 'legacy_host_inheritance')) {
260
+ violations.push('legacy host compatibility only permits host-inherited credential requirements');
261
+ }
262
+ }
263
+ else {
264
+ if (profile.provider_preference === 'host' && profile.isolation === 'microvm_required') {
265
+ violations.push('the host provider cannot satisfy required microVM isolation');
266
+ }
267
+ if (profile.provider_preference === 'host' && profile.credential_requirements.some(requirement => requirement.required_protection === 'docker_brokered')) {
268
+ violations.push('the host provider cannot satisfy Docker-brokered credential protection');
269
+ }
270
+ if (profile.provider_preference === 'host' && profile.credential_requirements.some(requirement => requirement.required_protection === 'legacy_host_inheritance')) {
271
+ violations.push('governed host profiles cannot inherit ambient host credentials');
272
+ }
273
+ if (profile.provider_preference === 'docker_sandbox' && profile.credential_requirements.some(requirement => requirement.required_protection === 'legacy_host_inheritance')) {
274
+ violations.push('governed Docker Sandbox profiles cannot inherit host credentials');
275
+ }
276
+ }
277
+ if (profile.fallback === 'explicit_host' && profile.isolation === 'microvm_required') {
278
+ violations.push('explicit host fallback cannot preserve required microVM isolation');
279
+ }
280
+ return { allowed: violations.length === 0, violations };
281
+ };
282
+ export const serializeExecutionProfile = (profile) => JSON.stringify(profile);
283
+ export const fingerprintExecutionProfile = (profile) => createHash('sha256')
284
+ .update(serializeExecutionProfile(profile), 'utf8')
285
+ .digest('hex');
286
+ export const fingerprintLegacyExecutionProfileV1 = (profile) => createHash('sha256')
287
+ .update(JSON.stringify({
288
+ schema_version: 1,
289
+ compatibility: profile.compatibility,
290
+ provider_preference: profile.provider_preference,
291
+ build_eligible: profile.build_eligible,
292
+ isolation: profile.isolation,
293
+ workspace_access: profile.workspace_access,
294
+ credential_requirements: profile.credential_requirements,
295
+ fallback: profile.fallback,
296
+ integration_access: profile.integration_access,
297
+ remote_git: profile.remote_git,
298
+ resources: profile.resources,
299
+ network_enforcement: 'not_requested',
300
+ }), 'utf8')
301
+ .digest('hex');
302
+ export const fingerprintCredentialRequirements = (requirements) => createHash('sha256')
303
+ .update('archon-credential-requirements-v1\0', 'utf8')
304
+ .update(JSON.stringify([...requirements].sort(compareCredentials)), 'utf8')
305
+ .digest('hex');
306
+ export const createExecutionProfile = (provider) => ({
307
+ schema_version: EXECUTION_PROFILE_SCHEMA_VERSION,
308
+ compatibility: provider === 'host' ? 'legacy_host' : 'governed',
309
+ provider_preference: provider,
310
+ build_eligible: true,
311
+ isolation: provider === 'host' ? 'host_process_allowed' : 'microvm_required',
312
+ workspace_access: { mode: 'exact_target', additional_mounts: [] },
313
+ credential_requirements: [],
314
+ fallback: 'block',
315
+ integration_access: 'none',
316
+ remote_git: 'denied',
317
+ resources: 'provider_defaults',
318
+ network: { mode: 'unrestricted', destinations: [] },
319
+ });
320
+ export const createLegacyHostCompatibilityProfile = () => createExecutionProfile('host');
321
+ export const executionProfileSelectionMetadata = (project) => project?.active_execution_profile_revision_id
322
+ ? { execution_profile_revision_id: project.active_execution_profile_revision_id }
323
+ : {};
324
+ //# sourceMappingURL=executionProfiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executionProfiles.js","sourceRoot":"","sources":["../../../server/lib/executionProfiles.ts"],"names":[],"mappings":"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"}