@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.
- package/dist/client/assets/{ActivityView-BcguXTZ5.js → ActivityView-BaIZ8eHC.js} +1 -1
- package/dist/client/assets/GitHubActionsDialog-BFCqikDY.js +1 -0
- package/dist/client/assets/VerificationDialog-B1_6HMdt.js +4 -0
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-DnC7Twj0.js → architectureDiagram-3BPJPVTR-Dl5UF67P.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-D0VbjiKd.js → blockDiagram-GPEHLZMM-DCcERfrZ.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-CzQ3l15K.js → c4Diagram-AAUBKEIU-BGhbASFm.js} +1 -1
- package/dist/client/assets/channel-BfskvH2B.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-B5UGiqLW.js → chunk-2J33WTMH-C1ARozTV.js} +1 -1
- package/dist/client/assets/{chunk-3OPIFGDE-SCksTqtu.js → chunk-3OPIFGDE-BEovLizF.js} +1 -1
- package/dist/client/assets/{chunk-5ZQYHXKU-IOkwLOtG.js → chunk-5ZQYHXKU-C5MmlLa_.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-Do60Xs9p.js → chunk-727SXJPM-8y8jBk4n.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-CuQT3imB.js → chunk-AQP2D5EJ-q-mByAd3.js} +1 -1
- package/dist/client/assets/{chunk-CSCIHK7Q-BkxMIESX.js → chunk-CSCIHK7Q-BOx2mLSz.js} +1 -1
- package/dist/client/assets/{chunk-KSCS5N6A-uUU3sWgR.js → chunk-KSCS5N6A-zEwQFq7q.js} +1 -1
- package/dist/client/assets/{chunk-L5ZTLDWV-DLYccV6J.js → chunk-L5ZTLDWV-C80z6rY_.js} +1 -1
- package/dist/client/assets/{chunk-LZXEDZCA-CgJFfCRZ.js → chunk-LZXEDZCA-BLaEsGPd.js} +2 -2
- package/dist/client/assets/{chunk-ND2GUHAM-D7IQSQfK.js → chunk-ND2GUHAM-x26BZ95L.js} +1 -1
- package/dist/client/assets/{chunk-NZK2D7GU-B4O6JWAo.js → chunk-NZK2D7GU-D2WAxr1p.js} +1 -1
- package/dist/client/assets/{chunk-O5CBEL6O-DidlQEqb.js → chunk-O5CBEL6O-DDPCrzKh.js} +1 -1
- package/dist/client/assets/{chunk-WU5MYG2G-2-oq_Gue.js → chunk-WU5MYG2G-CE-JcvIc.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-D4HPfxL3.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DQQ_WqAU.js +1 -0
- package/dist/client/assets/{dagre-BM42HDAG-TubuN0hR.js → dagre-BM42HDAG-Bf7wpUk_.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-DNcUk6rV.js → diagram-2AECGRRQ-BQoKmc3B.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-B1sJn4w_.js → diagram-5GNKFQAL-D2jarPLn.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-CnW6ZuQe.js → diagram-KO2AKTUF-Bcbbjvsl.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-YHUmDzyS.js → diagram-LMA3HP47-t862RRBQ.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-BkOQphxq.js → diagram-OG6HWLK6-CacbMcO0.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-oNMxAdxN.js → erDiagram-TEJ5UH35-DRQ79baI.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-ByuCV-Am.js → flowDiagram-I6XJVG4X-BfW4KEdc.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-CRkNH8Ft.js → ganttDiagram-6RSMTGT7-BPIl0TAj.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-DRXzXjd8.js → gitGraphDiagram-PVQCEYII-CRIusBMV.js} +1 -1
- package/dist/client/assets/index-CZ1z72fo.js +276 -0
- package/dist/client/assets/index-SMj5ZmMs.css +2 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-CJ4-hWch.js → infoDiagram-5YYISTIA-DTKzK8EJ.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-CW1xqvim.js → ishikawaDiagram-YF4QCWOH-DVIHZLvL.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-BVVFg8_h.js → journeyDiagram-JHISSGLW-CQBZ4tCx.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-AcLZ63tA.js → kanban-definition-UN3LZRKU-D7naegR0.js} +1 -1
- package/dist/client/assets/{line-CG_TG6Ci.js → line-CizZlaeV.js} +1 -1
- package/dist/client/assets/{mermaid-parser.core-UDLSm_c3.js → mermaid-parser.core-NrDqgpZa.js} +1 -1
- package/dist/client/assets/{mermaid.core-IvBk22DF.js → mermaid.core-CwVO3oX0.js} +3 -3
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-BflWNtnl.js → mindmap-definition-RKZ34NQL-BWxy3Aa_.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-Dm1iGMm7.js → pieDiagram-4H26LBE5-B3gXpmBn.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-CM4zJd_R.js → quadrantDiagram-W4KKPZXB-Dpp4g8Al.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-miuP86cp.js → requirementDiagram-4Y6WPE33-lFKXnxml.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-zUcRagtr.js → sankeyDiagram-5OEKKPKP-BBdtwqrS.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-BRYqVpsT.js → sequenceDiagram-3UESZ5HK-ANpVZzqm.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-DwcF0DJm.js → stateDiagram-AJRCARHV-D58ZxmKY.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-Cv8cmDfz.js +1 -0
- package/dist/client/assets/{timeline-definition-PNZ67QCA-BzH929s_.js → timeline-definition-PNZ67QCA-B6FK8IQC.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-BIq8rooy.js → vennDiagram-CIIHVFJN-lFWtZEEY.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-CyV_gL5J.js → wardleyDiagram-YWT4CUSO-DteAVp4l.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-Dxo-U-qe.js → xychartDiagram-2RQKCTM6-CNcDlRLN.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/db.js +359 -21
- package/dist/server/db.js.map +1 -1
- package/dist/server/index.js +152 -4
- package/dist/server/index.js.map +1 -1
- package/dist/server/lib/approvalReconciliation.js +101 -0
- package/dist/server/lib/approvalReconciliation.js.map +1 -0
- package/dist/server/lib/approvalRequests.js +587 -0
- package/dist/server/lib/approvalRequests.js.map +1 -0
- package/dist/server/lib/approvalRoutes.js +143 -0
- package/dist/server/lib/approvalRoutes.js.map +1 -0
- package/dist/server/lib/buildExecutionEnvironment.js +128 -11
- package/dist/server/lib/buildExecutionEnvironment.js.map +1 -1
- package/dist/server/lib/checkDefinitions.js +29 -1
- package/dist/server/lib/checkDefinitions.js.map +1 -1
- package/dist/server/lib/checkRunner.js +306 -27
- package/dist/server/lib/checkRunner.js.map +1 -1
- package/dist/server/lib/checkRuns.js +4 -2
- package/dist/server/lib/checkRuns.js.map +1 -1
- package/dist/server/lib/consequentialActionAuthority.js +142 -0
- package/dist/server/lib/consequentialActionAuthority.js.map +1 -0
- package/dist/server/lib/consequentialActions.js +231 -0
- package/dist/server/lib/consequentialActions.js.map +1 -0
- package/dist/server/lib/dockerSandboxEnvironmentOperations.js +119 -0
- package/dist/server/lib/dockerSandboxEnvironmentOperations.js.map +1 -1
- package/dist/server/lib/dockerSandboxExecutionEnvironment.js +194 -14
- package/dist/server/lib/dockerSandboxExecutionEnvironment.js.map +1 -1
- package/dist/server/lib/dockerSandboxExecutionProvider.js +1 -1
- package/dist/server/lib/dockerSandboxExecutionProvider.js.map +1 -1
- package/dist/server/lib/dockerSandboxNetworkPolicy.js +222 -0
- package/dist/server/lib/dockerSandboxNetworkPolicy.js.map +1 -0
- package/dist/server/lib/executionEnvironmentContexts.js +4 -2
- package/dist/server/lib/executionEnvironmentContexts.js.map +1 -1
- package/dist/server/lib/executionEnvironmentLifecycle.js +34 -0
- package/dist/server/lib/executionEnvironmentLifecycle.js.map +1 -1
- package/dist/server/lib/executionEnvironmentRoutes.js +68 -6
- package/dist/server/lib/executionEnvironmentRoutes.js.map +1 -1
- package/dist/server/lib/executionEnvironmentValidation.js +71 -5
- package/dist/server/lib/executionEnvironmentValidation.js.map +1 -1
- package/dist/server/lib/executionEnvironmentValidationOperations.js +155 -11
- package/dist/server/lib/executionEnvironmentValidationOperations.js.map +1 -1
- package/dist/server/lib/executionEnvironments.js +11 -5
- package/dist/server/lib/executionEnvironments.js.map +1 -1
- package/dist/server/lib/executionProfileStore.js +12 -3
- package/dist/server/lib/executionProfileStore.js.map +1 -1
- package/dist/server/lib/executionProfiles.js +131 -8
- package/dist/server/lib/executionProfiles.js.map +1 -1
- package/dist/server/lib/executionReconciliation.js +206 -143
- package/dist/server/lib/executionReconciliation.js.map +1 -1
- package/dist/server/lib/executionRunAuthority.js +175 -7
- package/dist/server/lib/executionRunAuthority.js.map +1 -1
- package/dist/server/lib/executionRuns.js +26 -4
- package/dist/server/lib/executionRuns.js.map +1 -1
- package/dist/server/lib/executionTimeline.js +2 -1
- package/dist/server/lib/executionTimeline.js.map +1 -1
- package/dist/server/lib/git.js +52 -10
- package/dist/server/lib/git.js.map +1 -1
- package/dist/server/lib/gitPushApprovals.js +367 -0
- package/dist/server/lib/gitPushApprovals.js.map +1 -0
- package/dist/server/lib/mobileAccess.js +115 -1
- package/dist/server/lib/mobileAccess.js.map +1 -1
- package/dist/server/lib/productionCheckApprovals.js +106 -0
- package/dist/server/lib/productionCheckApprovals.js.map +1 -0
- package/dist/server/lib/reviewFindings.js +14 -8
- package/dist/server/lib/reviewFindings.js.map +1 -1
- package/dist/server/lib/types.js +40 -0
- package/dist/server/lib/types.js.map +1 -1
- package/dist/server/lib/workspaceProcessEnvironment.js +2 -2
- package/dist/server/lib/workspaceProcessEnvironment.js.map +1 -1
- package/dist/server/workers/review.js +19 -11
- package/dist/server/workers/review.js.map +1 -1
- package/package.json +1 -1
- package/dist/client/assets/GitHubActionsDialog-BGecTzoq.js +0 -1
- package/dist/client/assets/VerificationDialog-D4QkMLZr.js +0 -4
- package/dist/client/assets/channel-BwRO4uiw.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-BIszcze-.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-D5dvxldS.js +0 -1
- package/dist/client/assets/index-CYPgEn1h.css +0 -2
- package/dist/client/assets/index-Ck2OKMsl.js +0 -276
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DmICWsmn.js +0 -1
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { SbxContractFailure, asRecord, parseJsonObject, requireSuccessfulCommand, } from './dockerSandboxExecutionEnvironment.js';
|
|
2
|
+
const POLICY_LS_COMMAND = 'policy ls';
|
|
3
|
+
const POLICY_ALLOW_COMMAND = 'policy allow';
|
|
4
|
+
const POLICY_CHECK_COMMAND = 'policy check';
|
|
5
|
+
const POLICY_RM_COMMAND = 'policy rm';
|
|
6
|
+
const SANDBOX_SCOPE_PREFIX = 'sandbox:';
|
|
7
|
+
const assertBoundedArgument = (name, value) => {
|
|
8
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
9
|
+
throw new Error(`${name} must be a non-empty string`);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
const dedupe = (values) => [...new Set(values)];
|
|
13
|
+
const scopedNetworkRulesForSandbox = (rules, sandboxName) => rules.filter(rule => rule.scope === `${SANDBOX_SCOPE_PREFIX}${sandboxName}` && rule.resourceType === 'network');
|
|
14
|
+
export const parseScopedSbxPolicyLsOutput = (output) => {
|
|
15
|
+
const record = parseJsonObject(POLICY_LS_COMMAND, output);
|
|
16
|
+
if (!Array.isArray(record.rules)) {
|
|
17
|
+
throw new SbxContractFailure(POLICY_LS_COMMAND, 'sbx policy ls returned an unsupported schema');
|
|
18
|
+
}
|
|
19
|
+
return record.rules.map((value, index) => {
|
|
20
|
+
const rule = asRecord(value);
|
|
21
|
+
const requiredStringFields = ['id', 'scope', 'resource_type', 'decision', 'status'];
|
|
22
|
+
const hasRequiredStrings = rule !== null && requiredStringFields.every(field => (typeof rule[field] === 'string' && rule[field].length > 0));
|
|
23
|
+
const resources = rule?.resources;
|
|
24
|
+
const hasValidResources = Array.isArray(resources)
|
|
25
|
+
&& resources.every(resource => typeof resource === 'string' && resource.length > 0);
|
|
26
|
+
if (!hasRequiredStrings || !hasValidResources) {
|
|
27
|
+
throw new SbxContractFailure(POLICY_LS_COMMAND, `sbx policy ls rule ${index} was unrecognized`);
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
id: rule.id,
|
|
31
|
+
scope: rule.scope,
|
|
32
|
+
resourceType: rule.resource_type,
|
|
33
|
+
decision: rule.decision,
|
|
34
|
+
resources: [...resources],
|
|
35
|
+
status: rule.status,
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
export const parseSbxPolicyCheckOutput = (output, target, sandboxName) => {
|
|
40
|
+
const record = parseJsonObject(POLICY_CHECK_COMMAND, output);
|
|
41
|
+
const normalizedTarget = /:\d+$/.test(target) ? target : `${target}:443`;
|
|
42
|
+
if (record.action !== 'net:connect:tcp'
|
|
43
|
+
||
|
|
44
|
+
record.context !== `${SANDBOX_SCOPE_PREFIX}${sandboxName}`
|
|
45
|
+
|| record.type !== 'network'
|
|
46
|
+
|| record.resource_type !== 'net:domain'
|
|
47
|
+
|| record.target !== normalizedTarget
|
|
48
|
+
|| record.resource_value !== normalizedTarget) {
|
|
49
|
+
throw new SbxContractFailure(POLICY_CHECK_COMMAND, 'sbx policy check returned a response that does not match the requested destination context');
|
|
50
|
+
}
|
|
51
|
+
const governance = asRecord(record.governance);
|
|
52
|
+
if (governance?.active !== true) {
|
|
53
|
+
throw new SbxContractFailure(POLICY_CHECK_COMMAND, 'sbx policy check did not report active network governance');
|
|
54
|
+
}
|
|
55
|
+
if (typeof record.allowed !== 'boolean') {
|
|
56
|
+
throw new SbxContractFailure(POLICY_CHECK_COMMAND, 'sbx policy check returned an unsupported schema');
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
target,
|
|
60
|
+
decision: record.allowed ? 'allow' : 'deny',
|
|
61
|
+
rawDecision: null,
|
|
62
|
+
evaluatedRuleId: null,
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
export const parseSbxPolicyAllowOutput = (output, sandboxName, requestedResources) => {
|
|
66
|
+
const trimmed = output.trim();
|
|
67
|
+
if (trimmed.length === 0) {
|
|
68
|
+
throw new SbxContractFailure(POLICY_ALLOW_COMMAND, 'sbx policy allow returned no created rule identifiers');
|
|
69
|
+
}
|
|
70
|
+
let parsed;
|
|
71
|
+
try {
|
|
72
|
+
parsed = JSON.parse(trimmed);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
throw new SbxContractFailure(POLICY_ALLOW_COMMAND, 'sbx policy allow returned invalid JSON', { cause: error });
|
|
76
|
+
}
|
|
77
|
+
const values = Array.isArray(parsed) ? parsed : [parsed];
|
|
78
|
+
const requested = new Set(requestedResources);
|
|
79
|
+
const returnedResources = new Set();
|
|
80
|
+
const ids = [];
|
|
81
|
+
for (const value of values) {
|
|
82
|
+
const rule = asRecord(value);
|
|
83
|
+
const resources = rule?.resources;
|
|
84
|
+
if (!rule
|
|
85
|
+
|| typeof rule.id !== 'string'
|
|
86
|
+
|| rule.id.length === 0
|
|
87
|
+
|| rule.scope !== `${SANDBOX_SCOPE_PREFIX}${sandboxName}`
|
|
88
|
+
|| rule.resource_type !== 'network'
|
|
89
|
+
|| rule.decision !== 'allow'
|
|
90
|
+
|| rule.status !== 'active'
|
|
91
|
+
|| !Array.isArray(resources)
|
|
92
|
+
|| resources.length === 0
|
|
93
|
+
|| !resources.every(resource => typeof resource === 'string' && requested.has(resource))) {
|
|
94
|
+
throw new SbxContractFailure(POLICY_ALLOW_COMMAND, 'sbx policy allow returned an unqualified scoped rule');
|
|
95
|
+
}
|
|
96
|
+
ids.push(rule.id);
|
|
97
|
+
resources.forEach(resource => returnedResources.add(resource));
|
|
98
|
+
}
|
|
99
|
+
if (returnedResources.size !== requested.size || [...requested].some(resource => !returnedResources.has(resource))) {
|
|
100
|
+
throw new SbxContractFailure(POLICY_ALLOW_COMMAND, 'sbx policy allow did not create the exact requested resources');
|
|
101
|
+
}
|
|
102
|
+
return ids;
|
|
103
|
+
};
|
|
104
|
+
export const assertExactSandboxNetworkAllowlist = (rules, requestedResources) => {
|
|
105
|
+
const requested = new Set(requestedResources);
|
|
106
|
+
const activeAllows = rules.filter(rule => rule.status === 'active' && rule.decision === 'allow');
|
|
107
|
+
const effectiveResources = new Set(activeAllows.flatMap(rule => rule.resources));
|
|
108
|
+
const broaderResources = [...effectiveResources].filter(resource => !requested.has(resource));
|
|
109
|
+
const missingResources = [...requested].filter(resource => !effectiveResources.has(resource));
|
|
110
|
+
if (broaderResources.length > 0 || missingResources.length > 0) {
|
|
111
|
+
const details = [
|
|
112
|
+
broaderResources.length > 0 ? `broader active resources: ${broaderResources.join(', ')}` : null,
|
|
113
|
+
missingResources.length > 0 ? `missing resources: ${missingResources.join(', ')}` : null,
|
|
114
|
+
].filter((detail) => detail !== null);
|
|
115
|
+
throw new SbxContractFailure(POLICY_LS_COMMAND, `Sandbox network rules do not exactly match the requested allowlist (${details.join('; ')})`);
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
export const inspectSandboxNetworkRules = async (runner, sandboxName, options = {}) => {
|
|
119
|
+
assertBoundedArgument('Docker Sandbox name', sandboxName);
|
|
120
|
+
const result = await runner.run(['policy', 'ls', sandboxName, '--json', '--wide'], options);
|
|
121
|
+
requireSuccessfulCommand(POLICY_LS_COMMAND, result);
|
|
122
|
+
return scopedNetworkRulesForSandbox(parseScopedSbxPolicyLsOutput(result.stdout), sandboxName);
|
|
123
|
+
};
|
|
124
|
+
const sandboxApplicationLocks = new Map();
|
|
125
|
+
const withSandboxApplicationLock = async (sandboxName, operation) => {
|
|
126
|
+
const previous = sandboxApplicationLocks.get(sandboxName) ?? Promise.resolve();
|
|
127
|
+
const gate = previous.then(() => undefined, () => undefined);
|
|
128
|
+
let release;
|
|
129
|
+
const current = new Promise(resolve => {
|
|
130
|
+
release = resolve;
|
|
131
|
+
});
|
|
132
|
+
sandboxApplicationLocks.set(sandboxName, current);
|
|
133
|
+
await gate;
|
|
134
|
+
try {
|
|
135
|
+
return await operation();
|
|
136
|
+
}
|
|
137
|
+
finally {
|
|
138
|
+
release();
|
|
139
|
+
if (sandboxApplicationLocks.get(sandboxName) === current) {
|
|
140
|
+
sandboxApplicationLocks.delete(sandboxName);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
export const applyScopedNetworkRules = (runner, sandboxName, resources, options = {}) => withSandboxApplicationLock(sandboxName, async () => {
|
|
145
|
+
assertBoundedArgument('Docker Sandbox name', sandboxName);
|
|
146
|
+
const requested = dedupe(resources);
|
|
147
|
+
requested.forEach(resource => assertBoundedArgument('Network resource', resource));
|
|
148
|
+
if (requested.length === 0) {
|
|
149
|
+
return [];
|
|
150
|
+
}
|
|
151
|
+
const existing = await inspectSandboxNetworkRules(runner, sandboxName, options);
|
|
152
|
+
const covered = new Set(existing
|
|
153
|
+
.filter(rule => rule.status === 'active' && rule.decision === 'allow')
|
|
154
|
+
.flatMap(rule => rule.resources));
|
|
155
|
+
const missing = requested.filter(resource => !covered.has(resource));
|
|
156
|
+
if (missing.length === 0) {
|
|
157
|
+
return [];
|
|
158
|
+
}
|
|
159
|
+
const result = await runner.run(['policy', 'allow', 'network', '--sandbox', sandboxName, missing.join(',')], options);
|
|
160
|
+
requireSuccessfulCommand(POLICY_ALLOW_COMMAND, result);
|
|
161
|
+
return parseSbxPolicyAllowOutput(result.stdout, sandboxName, missing);
|
|
162
|
+
});
|
|
163
|
+
export const checkDestinationAccess = async (runner, sandboxName, target, options = {}) => {
|
|
164
|
+
assertBoundedArgument('Docker Sandbox name', sandboxName);
|
|
165
|
+
assertBoundedArgument('Network destination target', target);
|
|
166
|
+
const result = await runner.run(['policy', 'check', 'network', '--sandbox', sandboxName, target, '--json'], options);
|
|
167
|
+
requireSuccessfulCommand(POLICY_CHECK_COMMAND, result);
|
|
168
|
+
return parseSbxPolicyCheckOutput(result.stdout, target, sandboxName);
|
|
169
|
+
};
|
|
170
|
+
export const inspectGlobalNetworkPosture = async (runner, options = {}) => {
|
|
171
|
+
const result = await runner.run(['policy', 'ls', '--json', '--wide'], options);
|
|
172
|
+
requireSuccessfulCommand(POLICY_LS_COMMAND, result);
|
|
173
|
+
return classifyGlobalNetworkPosture(parseScopedSbxPolicyLsOutput(result.stdout));
|
|
174
|
+
};
|
|
175
|
+
const CATCH_ALL_RESOURCES = new Set(['**', '*', '*:*', 'any']);
|
|
176
|
+
const isCatchAllRule = (rule) => (rule.resources.length === 0
|
|
177
|
+
|| rule.resources.some(resource => CATCH_ALL_RESOURCES.has(resource.trim().toLowerCase())));
|
|
178
|
+
export const classifyGlobalNetworkPosture = (rules) => {
|
|
179
|
+
const activeGlobalNetworkRules = rules.filter(rule => (rule.scope === 'global' && rule.resourceType === 'network' && rule.status === 'active'));
|
|
180
|
+
if (activeGlobalNetworkRules.length === 0) {
|
|
181
|
+
return 'none_initialized';
|
|
182
|
+
}
|
|
183
|
+
const catchAllRules = activeGlobalNetworkRules.filter(isCatchAllRule);
|
|
184
|
+
if (catchAllRules.length === 0) {
|
|
185
|
+
return 'mixed';
|
|
186
|
+
}
|
|
187
|
+
const decisions = new Set(catchAllRules.map(rule => rule.decision));
|
|
188
|
+
if (decisions.size > 1) {
|
|
189
|
+
return 'unknown';
|
|
190
|
+
}
|
|
191
|
+
const decision = [...decisions][0];
|
|
192
|
+
const hasResourceSpecificAllowException = activeGlobalNetworkRules.some(rule => (!isCatchAllRule(rule) && rule.decision === 'allow'));
|
|
193
|
+
if (decision === 'deny' && hasResourceSpecificAllowException) {
|
|
194
|
+
return 'mixed';
|
|
195
|
+
}
|
|
196
|
+
if (decision === 'allow') {
|
|
197
|
+
return 'allow_all';
|
|
198
|
+
}
|
|
199
|
+
if (decision === 'deny') {
|
|
200
|
+
return 'deny_all';
|
|
201
|
+
}
|
|
202
|
+
return 'unknown';
|
|
203
|
+
};
|
|
204
|
+
export const removeScopedNetworkRules = async (runner, sandboxName, ruleIds, options = {}) => {
|
|
205
|
+
assertBoundedArgument('Docker Sandbox name', sandboxName);
|
|
206
|
+
const ids = dedupe(ruleIds);
|
|
207
|
+
ids.forEach(id => assertBoundedArgument('Network policy rule ID', id));
|
|
208
|
+
if (ids.length === 0) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
const scoped = await inspectSandboxNetworkRules(runner, sandboxName, options);
|
|
212
|
+
const owned = new Set(scoped.map(rule => rule.id));
|
|
213
|
+
const foreign = ids.filter(id => !owned.has(id));
|
|
214
|
+
if (foreign.length > 0) {
|
|
215
|
+
throw new SbxContractFailure(POLICY_RM_COMMAND, `Refusing to remove network policy rules Archon did not create for sandbox ${sandboxName}`);
|
|
216
|
+
}
|
|
217
|
+
for (const id of ids) {
|
|
218
|
+
const result = await runner.run(['policy', 'rm', 'network', '--sandbox', sandboxName, '--id', id], options);
|
|
219
|
+
requireSuccessfulCommand(POLICY_RM_COMMAND, result);
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
//# sourceMappingURL=dockerSandboxNetworkPolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dockerSandboxNetworkPolicy.js","sourceRoot":"","sources":["../../../server/lib/dockerSandboxNetworkPolicy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import db from '../db.js';
|
|
2
|
+
import { EXECUTION_ENVIRONMENT_AUTHENTICATION_MODES, EXECUTION_ENVIRONMENT_CREDENTIAL_DELIVERIES } from './types.js';
|
|
2
3
|
const parseSnapshot = (value) => {
|
|
3
4
|
if (!value) {
|
|
4
5
|
return null;
|
|
@@ -15,6 +16,7 @@ const parseSnapshot = (value) => {
|
|
|
15
16
|
}
|
|
16
17
|
};
|
|
17
18
|
const hasString = (value, key) => typeof value[key] === 'string';
|
|
19
|
+
const parseEnumValue = (allowed, value) => (typeof value === 'string' && allowed.includes(value) ? value : null);
|
|
18
20
|
const isPlacementSnapshot = (value) => {
|
|
19
21
|
const scope = value.scope;
|
|
20
22
|
if (!hasString(value, 'provider')
|
|
@@ -71,8 +73,8 @@ const parseAuthority = (row) => {
|
|
|
71
73
|
? degradationReasons
|
|
72
74
|
: null,
|
|
73
75
|
agent: value?.agent === 'opencode' || value?.agent === 'claude' ? value.agent : null,
|
|
74
|
-
authentication_mode: value?.authentication_mode
|
|
75
|
-
credential_delivery: value?.credential_delivery
|
|
76
|
+
authentication_mode: parseEnumValue(EXECUTION_ENVIRONMENT_AUTHENTICATION_MODES, value?.authentication_mode),
|
|
77
|
+
credential_delivery: parseEnumValue(EXECUTION_ENVIRONMENT_CREDENTIAL_DELIVERIES, value?.credential_delivery),
|
|
76
78
|
run_authority: runAuthority,
|
|
77
79
|
};
|
|
78
80
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executionEnvironmentContexts.js","sourceRoot":"","sources":["../../../server/lib/executionEnvironmentContexts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"executionEnvironmentContexts.js","sourceRoot":"","sources":["../../../server/lib/executionEnvironmentContexts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,40 @@
|
|
|
1
1
|
import { createHash } from 'crypto';
|
|
2
2
|
import { ExecutionEnvironmentUnsupportedFailure } from './executionEnvironment.js';
|
|
3
3
|
export const EXECUTION_ENVIRONMENT_VALIDATION_FINGERPRINT_FORMAT = 'archon-environment-validation-v1';
|
|
4
|
+
const MAX_NETWORK_DESTINATION_HOST_BYTES = 253;
|
|
5
|
+
export const normalizeExecutionEnvironmentDestinations = (destinations) => {
|
|
6
|
+
const normalized = [];
|
|
7
|
+
const seen = new Set();
|
|
8
|
+
for (const destination of destinations) {
|
|
9
|
+
if (typeof destination?.host !== 'string') {
|
|
10
|
+
throw new Error('Network destination host must be a string');
|
|
11
|
+
}
|
|
12
|
+
const host = destination.host.trim().toLowerCase();
|
|
13
|
+
if (host.length === 0
|
|
14
|
+
|| Buffer.byteLength(host, 'utf8') > MAX_NETWORK_DESTINATION_HOST_BYTES) {
|
|
15
|
+
throw new Error(`Network destination host must contain between 1 and ${MAX_NETWORK_DESTINATION_HOST_BYTES} bytes`);
|
|
16
|
+
}
|
|
17
|
+
const rawPort = destination.port;
|
|
18
|
+
let port;
|
|
19
|
+
if (rawPort !== undefined && rawPort !== null) {
|
|
20
|
+
if (typeof rawPort !== 'number'
|
|
21
|
+
|| !Number.isSafeInteger(rawPort)
|
|
22
|
+
|| rawPort < 1
|
|
23
|
+
|| rawPort > 65535) {
|
|
24
|
+
throw new Error('Network destination port must be an integer between 1 and 65535');
|
|
25
|
+
}
|
|
26
|
+
port = rawPort;
|
|
27
|
+
}
|
|
28
|
+
const key = `${host}:${port ?? ''}`;
|
|
29
|
+
if (seen.has(key)) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
seen.add(key);
|
|
33
|
+
normalized.push(port === undefined ? { host } : { host, port });
|
|
34
|
+
}
|
|
35
|
+
return normalized;
|
|
36
|
+
};
|
|
37
|
+
export const networkDestinationTarget = (destination) => destination.port === undefined ? destination.host : `${destination.host}:${destination.port}`;
|
|
4
38
|
const assertFingerprintComponent = (value, name) => {
|
|
5
39
|
if (value.length === 0 || Buffer.byteLength(value, 'utf8') > 500) {
|
|
6
40
|
throw new Error(`${name} must contain between 1 and 500 bytes`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executionEnvironmentLifecycle.js","sourceRoot":"","sources":["../../../server/lib/executionEnvironmentLifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,sCAAsC,EAAE,MAAM,2BAA2B,CAAA;AAGlF,MAAM,CAAC,MAAM,mDAAmD,GAAG,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"executionEnvironmentLifecycle.js","sourceRoot":"","sources":["../../../server/lib/executionEnvironmentLifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,15 @@ const withRequestAbortSignal = async (req, res, operation) => {
|
|
|
27
27
|
res.removeListener('close', abort);
|
|
28
28
|
}
|
|
29
29
|
};
|
|
30
|
+
const parseUserRouteModel = (agent, value) => {
|
|
31
|
+
const model = value == null || (typeof value === 'string' && value.trim() === '')
|
|
32
|
+
? null
|
|
33
|
+
: parseExecutionEnvironmentModel(value);
|
|
34
|
+
if (agent === 'opencode' && model === null) {
|
|
35
|
+
throw new ExecutionEnvironmentRouteError(400, 'model_required', 'An explicit OpenCode model is required for validation.');
|
|
36
|
+
}
|
|
37
|
+
return model;
|
|
38
|
+
};
|
|
30
39
|
const serializeValidationChecks = (value) => {
|
|
31
40
|
if (!Array.isArray(value)) {
|
|
32
41
|
return [];
|
|
@@ -36,7 +45,7 @@ const serializeValidationChecks = (value) => {
|
|
|
36
45
|
return [];
|
|
37
46
|
}
|
|
38
47
|
const check = candidate;
|
|
39
|
-
const kinds = ['workspace_location', 'workspace_readable', 'workspace_writable', 'executable', 'headless', 'authentication', 'skills', 'destination'];
|
|
48
|
+
const kinds = ['workspace_location', 'workspace_readable', 'workspace_writable', 'executable', 'headless', 'authentication', 'skills', 'destination', 'network'];
|
|
40
49
|
if (!kinds.some(kind => kind === check.kind)
|
|
41
50
|
|| (check.agent !== null && check.agent !== 'opencode' && check.agent !== 'claude')
|
|
42
51
|
|| (check.state !== 'cancelled' && check.state !== 'failed' && check.state !== 'passed')) {
|
|
@@ -91,6 +100,8 @@ const serializeValidationChecks = (value) => {
|
|
|
91
100
|
|| rawDetails.reason === 'model_required'
|
|
92
101
|
|| rawDetails.reason === 'provider_required'
|
|
93
102
|
|| rawDetails.reason === 'credential_inventory_unavailable'
|
|
103
|
+
|| rawDetails.reason === 'runtime_version_unrecognized'
|
|
104
|
+
|| typeof rawDetails.runtimeVersion === 'string'
|
|
94
105
|
|| availableSkills !== undefined
|
|
95
106
|
|| missingSkills !== undefined
|
|
96
107
|
|| rawDetails.destinationReason === 'invalid_json'
|
|
@@ -99,8 +110,10 @@ const serializeValidationChecks = (value) => {
|
|
|
99
110
|
|| rawDetails.destinationReason === 'provider_error'
|
|
100
111
|
|| rawDetails.destinationReason === 'model_not_found'
|
|
101
112
|
|| rawDetails.destinationReason === 'credential_rejected'
|
|
113
|
+
|| rawDetails.destinationReason === 'empty_completion'
|
|
102
114
|
|| rawDetails.destinationReason === 'unexpected_response'
|
|
103
|
-
|| providerError !== undefined
|
|
115
|
+
|| providerError !== undefined
|
|
116
|
+
|| typeof rawDetails.networkTarget === 'string')
|
|
104
117
|
? {
|
|
105
118
|
...(typeof rawDetails.credentialSource === 'string' ? { credential_source: rawDetails.credentialSource } : {}),
|
|
106
119
|
...(typeof rawDetails.credentialProvider === 'string' ? { credential_provider: rawDetails.credentialProvider } : {}),
|
|
@@ -110,17 +123,30 @@ const serializeValidationChecks = (value) => {
|
|
|
110
123
|
...(rawDetails.reason === 'model_required'
|
|
111
124
|
|| rawDetails.reason === 'provider_required'
|
|
112
125
|
|| rawDetails.reason === 'credential_inventory_unavailable'
|
|
126
|
+
|| rawDetails.reason === 'runtime_version_unrecognized'
|
|
113
127
|
? { reason: rawDetails.reason }
|
|
114
128
|
: {}),
|
|
129
|
+
...(typeof rawDetails.runtimeVersion === 'string' ? { runtime_version: rawDetails.runtimeVersion.slice(0, 100) } : {}),
|
|
115
130
|
...(rawDetails.destinationReason === 'invalid_json'
|
|
116
131
|
|| rawDetails.destinationReason === 'nonzero_exit'
|
|
117
132
|
|| rawDetails.destinationReason === 'timeout'
|
|
118
133
|
|| rawDetails.destinationReason === 'provider_error'
|
|
119
134
|
|| rawDetails.destinationReason === 'model_not_found'
|
|
120
135
|
|| rawDetails.destinationReason === 'credential_rejected'
|
|
136
|
+
|| rawDetails.destinationReason === 'empty_completion'
|
|
121
137
|
|| rawDetails.destinationReason === 'unexpected_response'
|
|
122
138
|
? { destination_reason: rawDetails.destinationReason }
|
|
123
139
|
: {}),
|
|
140
|
+
...(typeof rawDetails.networkTarget === 'string'
|
|
141
|
+
? {
|
|
142
|
+
network_target: rawDetails.networkTarget,
|
|
143
|
+
...(rawDetails.networkDecision === 'allow'
|
|
144
|
+
|| rawDetails.networkDecision === 'deny'
|
|
145
|
+
|| rawDetails.networkDecision === 'unknown'
|
|
146
|
+
? { network_decision: rawDetails.networkDecision }
|
|
147
|
+
: {}),
|
|
148
|
+
}
|
|
149
|
+
: {}),
|
|
124
150
|
...(providerError ? { provider_error: providerError } : {}),
|
|
125
151
|
}
|
|
126
152
|
: undefined;
|
|
@@ -191,6 +217,37 @@ const serializeCredentialCapability = (value) => {
|
|
|
191
217
|
remediation: typeof capability.remediation === 'string' ? capability.remediation.slice(0, 500) : null,
|
|
192
218
|
};
|
|
193
219
|
};
|
|
220
|
+
const NETWORK_GLOBAL_POSTURES = ['allow_all', 'deny_all', 'mixed', 'none_initialized', 'unknown'];
|
|
221
|
+
const serializeValidationNetworkEvidence = (rawValidation, checks, requestedMode) => {
|
|
222
|
+
const posture = rawValidation?.observedNetworkPosture ?? rawValidation?.observed_network_posture;
|
|
223
|
+
if (typeof posture !== 'string' || !NETWORK_GLOBAL_POSTURES.includes(posture)) {
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
const decisions = checks.flatMap(check => (check.kind === 'network' && typeof check.details?.network_target === 'string'
|
|
227
|
+
? [{
|
|
228
|
+
target: check.details.network_target,
|
|
229
|
+
decision: check.details.network_decision ?? 'unknown',
|
|
230
|
+
state: check.state,
|
|
231
|
+
}]
|
|
232
|
+
: []));
|
|
233
|
+
const allDestinationsAllowed = decisions.length > 0 && decisions.every(decision => (decision.state === 'passed' && decision.decision === 'allow'));
|
|
234
|
+
const enforcement = requestedMode === 'unrestricted'
|
|
235
|
+
? 'none'
|
|
236
|
+
: posture === 'deny_all' && allDestinationsAllowed
|
|
237
|
+
? 'enforced_scoped'
|
|
238
|
+
: posture === 'allow_all' && allDestinationsAllowed
|
|
239
|
+
? 'declarative_only'
|
|
240
|
+
: 'unknown';
|
|
241
|
+
return {
|
|
242
|
+
observed_global_posture: posture,
|
|
243
|
+
enforcement,
|
|
244
|
+
decisions,
|
|
245
|
+
};
|
|
246
|
+
};
|
|
247
|
+
const serializeRequestedNetworkMode = (rawValidation) => {
|
|
248
|
+
const mode = rawValidation?.requestedNetworkMode ?? rawValidation?.requested_network_mode;
|
|
249
|
+
return mode === 'allowlist' || mode === 'unrestricted' ? mode : null;
|
|
250
|
+
};
|
|
194
251
|
const getEnvironmentValidations = (projectId, environment) => {
|
|
195
252
|
const validations = {};
|
|
196
253
|
const providerValidations = {};
|
|
@@ -232,12 +289,15 @@ const getEnvironmentValidations = (projectId, environment) => {
|
|
|
232
289
|
}
|
|
233
290
|
}
|
|
234
291
|
const rawValidation = event?.metadata?.validation;
|
|
235
|
-
const
|
|
292
|
+
const eventValidation = typeof rawValidation === 'object' && rawValidation !== null
|
|
236
293
|
? rawValidation
|
|
237
294
|
: null;
|
|
295
|
+
const validation = { ...(run.metadata ?? {}), ...(eventValidation ?? {}) };
|
|
238
296
|
const validationAgent = typeof validation?.agent === 'object' && validation.agent !== null && !Array.isArray(validation.agent)
|
|
239
297
|
? validation.agent
|
|
240
298
|
: null;
|
|
299
|
+
const checks = serializeValidationChecks(validation?.checks);
|
|
300
|
+
const requestedNetworkMode = serializeRequestedNetworkMode(validation);
|
|
241
301
|
const serialized = {
|
|
242
302
|
agent,
|
|
243
303
|
environment_id: environment.id,
|
|
@@ -253,7 +313,9 @@ const getEnvironmentValidations = (projectId, environment) => {
|
|
|
253
313
|
? validation.model
|
|
254
314
|
: typeof validationAgent?.model === 'string' ? validationAgent.model : null,
|
|
255
315
|
credential_capability: serializeCredentialCapability(validation?.credentialCapability ?? validationAgent?.credentialCapability),
|
|
256
|
-
|
|
316
|
+
network_evidence: serializeValidationNetworkEvidence(validation, checks, requestedNetworkMode),
|
|
317
|
+
requested_network_mode: requestedNetworkMode,
|
|
318
|
+
checks,
|
|
257
319
|
};
|
|
258
320
|
validations[agent] ??= serialized;
|
|
259
321
|
if (serialized.provider && !seenProviderValidationKeys.has(providerValidationKey)) {
|
|
@@ -413,7 +475,7 @@ export const registerExecutionEnvironmentRoutes = (app, dependencies = {}) => {
|
|
|
413
475
|
const environmentId = Array.isArray(req.params.environmentId) ? req.params.environmentId[0] : req.params.environmentId;
|
|
414
476
|
const agent = parseExecutionEnvironmentAgent(req.body?.agent);
|
|
415
477
|
const body = req.body;
|
|
416
|
-
const model =
|
|
478
|
+
const model = parseUserRouteModel(agent, body?.model);
|
|
417
479
|
const provider = agent === 'claude' ? 'anthropic' : parseExecutionEnvironmentProvider(body?.provider, model);
|
|
418
480
|
return res.json(await validateExecutionEnvironment({ projectId, environmentId, agent, model, provider, signal }, validationDependencies));
|
|
419
481
|
}));
|
|
@@ -422,7 +484,7 @@ export const registerExecutionEnvironmentRoutes = (app, dependencies = {}) => {
|
|
|
422
484
|
const projectId = Array.isArray(req.params.id) ? req.params.id[0] : req.params.id;
|
|
423
485
|
const body = req.body;
|
|
424
486
|
const agent = parseExecutionEnvironmentAgent(body?.agent);
|
|
425
|
-
const model =
|
|
487
|
+
const model = parseUserRouteModel(agent, body?.model);
|
|
426
488
|
const provider = agent === 'claude' ? 'anthropic' : parseExecutionEnvironmentProvider(body?.provider, model);
|
|
427
489
|
return res.json(await prepareAndValidateExecutionEnvironment({ projectId, agent, model, provider, signal }, validationDependencies));
|
|
428
490
|
}))));
|