@straiffi/archon 1.8.22 → 1.10.0
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-CdEPjmqD.js → ActivityView-Y5IaJiim.js} +1 -1
- package/dist/client/assets/GitHubActionsDialog-GWVxWGPK.js +1 -0
- package/dist/client/assets/VerificationDialog-C4RMuI4y.js +4 -0
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-BrZ08mqq.js → architectureDiagram-3BPJPVTR-CeM6gbLN.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-b93XwJ6Z.js → blockDiagram-GPEHLZMM-BP4hta96.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-BKOdbZ_v.js → c4Diagram-AAUBKEIU-5aJScvhn.js} +1 -1
- package/dist/client/assets/channel-B3DjZXbm.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-D7Vxn_1m.js → chunk-2J33WTMH-BKc2IelV.js} +1 -1
- package/dist/client/assets/{chunk-3OPIFGDE-B1zo2UZq.js → chunk-3OPIFGDE-DCc15la5.js} +1 -1
- package/dist/client/assets/{chunk-5ZQYHXKU-BajvkDdQ.js → chunk-5ZQYHXKU-DSD9HbTp.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-CSH7cVpV.js → chunk-727SXJPM-DrAjnKiA.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-DE-wgUNP.js → chunk-AQP2D5EJ-DxKnpHfQ.js} +1 -1
- package/dist/client/assets/{chunk-CSCIHK7Q-Ba7JgCEf.js → chunk-CSCIHK7Q-DLejrAB_.js} +1 -1
- package/dist/client/assets/{chunk-KSCS5N6A-0o3YWkHM.js → chunk-KSCS5N6A-BWRNmF8S.js} +1 -1
- package/dist/client/assets/{chunk-L5ZTLDWV-DihWczP8.js → chunk-L5ZTLDWV-D48i966f.js} +1 -1
- package/dist/client/assets/{chunk-LZXEDZCA-Bxnu-hme.js → chunk-LZXEDZCA-DLhg6Bok.js} +2 -2
- package/dist/client/assets/{chunk-ND2GUHAM-CoaR5kmP.js → chunk-ND2GUHAM-B4-7cOEq.js} +1 -1
- package/dist/client/assets/{chunk-NZK2D7GU-By92Rd3d.js → chunk-NZK2D7GU-D2ttXA_d.js} +1 -1
- package/dist/client/assets/{chunk-O5CBEL6O-D83Pkgfu.js → chunk-O5CBEL6O-BrWrOVCq.js} +1 -1
- package/dist/client/assets/{chunk-WU5MYG2G-v8OVf5Lz.js → chunk-WU5MYG2G-CLcPwxPe.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-DproSkn2.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-JVMMzJxJ.js +1 -0
- package/dist/client/assets/{dagre-BM42HDAG-Dq1ALF7Z.js → dagre-BM42HDAG-DIXN8_VX.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-1t1_TKtu.js → diagram-2AECGRRQ-D2wjdCij.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-DtvYRL6f.js → diagram-5GNKFQAL-E1Og_PHE.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-PRNrSX5F.js → diagram-KO2AKTUF-B6P1Ud8a.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-DaTX0DhT.js → diagram-LMA3HP47-C3Jxq56v.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-C2p9p-92.js → diagram-OG6HWLK6-Do9LVhdL.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-DKzLtnp-.js → erDiagram-TEJ5UH35-DLb5E4-f.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-GdL8lm6e.js → flowDiagram-I6XJVG4X-CcTs_wU9.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-Ok-4XYwT.js → ganttDiagram-6RSMTGT7-q9ez5fri.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-DSMrOCK7.js → gitGraphDiagram-PVQCEYII-BcaKiz4c.js} +1 -1
- package/dist/client/assets/index-1CokwSFm.css +2 -0
- package/dist/client/assets/index-CSOKbu3w.js +276 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-Dl4hRXis.js → infoDiagram-5YYISTIA-Cu0w4frE.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-C1Dc1fTT.js → ishikawaDiagram-YF4QCWOH-CJ47Z-ak.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-CUscmJze.js → journeyDiagram-JHISSGLW-fAL_Zcvs.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-C0nwYjQV.js → kanban-definition-UN3LZRKU-BTNIybMC.js} +1 -1
- package/dist/client/assets/{line-ByiuEIg_.js → line-BvsadeZR.js} +1 -1
- package/dist/client/assets/{mermaid-parser.core-B-XdAyDR.js → mermaid-parser.core-C0EkH2y_.js} +1 -1
- package/dist/client/assets/{mermaid.core-D_bIfuZD.js → mermaid.core-BU5QIIbY.js} +3 -3
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-BGNiPJDK.js → mindmap-definition-RKZ34NQL-CWbSYK8f.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-CP6FpAoO.js → pieDiagram-4H26LBE5-t4w2cB-y.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-dsAWBAQn.js → quadrantDiagram-W4KKPZXB-Cqasvrpa.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-DJH-zHqF.js → requirementDiagram-4Y6WPE33-_l-mY-tb.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-BJMnZrqH.js → sankeyDiagram-5OEKKPKP-Cr9YrZ-Y.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-CzNjUSlM.js → sequenceDiagram-3UESZ5HK-DvzZhQpb.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-jppMhOwh.js → stateDiagram-AJRCARHV-cFjPpAO3.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-btHMH5Cg.js +1 -0
- package/dist/client/assets/{timeline-definition-PNZ67QCA-BX2CI5H_.js → timeline-definition-PNZ67QCA-BjRNrEJY.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-Bd1KZaXh.js → vennDiagram-CIIHVFJN-xs9afjrw.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-D-0BNz49.js → wardleyDiagram-YWT4CUSO-DH68ZYti.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-DbYa0ZWK.js → xychartDiagram-2RQKCTM6-DLW5ktTU.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/db.js +231 -14
- package/dist/server/db.js.map +1 -1
- package/dist/server/index.js +93 -9
- package/dist/server/index.js.map +1 -1
- package/dist/server/lib/agent.js +368 -143
- package/dist/server/lib/agent.js.map +1 -1
- package/dist/server/lib/agentProvider.js.map +1 -1
- package/dist/server/lib/approvalReconciliation.js +14 -2
- package/dist/server/lib/approvalReconciliation.js.map +1 -1
- package/dist/server/lib/buildExecutionEnvironment.js +251 -57
- package/dist/server/lib/buildExecutionEnvironment.js.map +1 -1
- package/dist/server/lib/chatOperations.js +125 -3
- package/dist/server/lib/chatOperations.js.map +1 -1
- package/dist/server/lib/chatPostBuildRuns.js +12 -6
- package/dist/server/lib/chatPostBuildRuns.js.map +1 -1
- package/dist/server/lib/chatTargets.js +2 -1
- package/dist/server/lib/chatTargets.js.map +1 -1
- package/dist/server/lib/checkDefinitionCwd.js +34 -0
- package/dist/server/lib/checkDefinitionCwd.js.map +1 -0
- package/dist/server/lib/checkExecutionEnvironment.js +95 -0
- package/dist/server/lib/checkExecutionEnvironment.js.map +1 -0
- package/dist/server/lib/checkPolicyDefinitionIds.js +41 -0
- package/dist/server/lib/checkPolicyDefinitionIds.js.map +1 -0
- package/dist/server/lib/checkRepairDispatch.js +2 -0
- package/dist/server/lib/checkRepairDispatch.js.map +1 -1
- package/dist/server/lib/checkRunner.js +371 -175
- package/dist/server/lib/checkRunner.js.map +1 -1
- package/dist/server/lib/checkRuns.js +99 -8
- package/dist/server/lib/checkRuns.js.map +1 -1
- package/dist/server/lib/claudeAgentProvider.js +3 -6
- package/dist/server/lib/claudeAgentProvider.js.map +1 -1
- package/dist/server/lib/claudeStdin.js +27 -0
- package/dist/server/lib/claudeStdin.js.map +1 -0
- package/dist/server/lib/completedAssistantOutput.js +38 -0
- package/dist/server/lib/completedAssistantOutput.js.map +1 -0
- package/dist/server/lib/consequentialActionAuthority.js +99 -8
- package/dist/server/lib/consequentialActionAuthority.js.map +1 -1
- package/dist/server/lib/consequentialActions.js +42 -2
- package/dist/server/lib/consequentialActions.js.map +1 -1
- package/dist/server/lib/dockerSandboxCredentials.js +10 -3
- package/dist/server/lib/dockerSandboxCredentials.js.map +1 -1
- package/dist/server/lib/dockerSandboxEnvironmentOperations.js +9 -8
- package/dist/server/lib/dockerSandboxEnvironmentOperations.js.map +1 -1
- package/dist/server/lib/dockerSandboxExecutionEnvironment.js +167 -75
- package/dist/server/lib/dockerSandboxExecutionEnvironment.js.map +1 -1
- package/dist/server/lib/dockerSandboxExecutionProvider.js +22 -14
- package/dist/server/lib/dockerSandboxExecutionProvider.js.map +1 -1
- package/dist/server/lib/dockerSandboxNetworkPolicy.js +23 -14
- package/dist/server/lib/dockerSandboxNetworkPolicy.js.map +1 -1
- package/dist/server/lib/dockerSandboxReleaseProfiles.js +91 -0
- package/dist/server/lib/dockerSandboxReleaseProfiles.js.map +1 -0
- package/dist/server/lib/dockerSandboxRuntimeController.js +16 -1
- package/dist/server/lib/dockerSandboxRuntimeController.js.map +1 -1
- package/dist/server/lib/executionCredentialCapabilities.js +9 -6
- package/dist/server/lib/executionCredentialCapabilities.js.map +1 -1
- package/dist/server/lib/executionEnvironment.js.map +1 -1
- package/dist/server/lib/executionEnvironmentLifecycle.js +7 -0
- package/dist/server/lib/executionEnvironmentLifecycle.js.map +1 -1
- package/dist/server/lib/executionEnvironmentOperations.js +241 -0
- package/dist/server/lib/executionEnvironmentOperations.js.map +1 -0
- package/dist/server/lib/executionEnvironmentReconciliation.js +98 -3
- package/dist/server/lib/executionEnvironmentReconciliation.js.map +1 -1
- package/dist/server/lib/executionEnvironmentRoutes.js +83 -29
- package/dist/server/lib/executionEnvironmentRoutes.js.map +1 -1
- package/dist/server/lib/executionEnvironmentValidation.js +19 -5
- package/dist/server/lib/executionEnvironmentValidation.js.map +1 -1
- package/dist/server/lib/executionEnvironmentValidationOperations.js +58 -31
- package/dist/server/lib/executionEnvironmentValidationOperations.js.map +1 -1
- package/dist/server/lib/executionEnvironments.js +187 -9
- package/dist/server/lib/executionEnvironments.js.map +1 -1
- package/dist/server/lib/executionProfileCheckPolicy.js +14 -0
- package/dist/server/lib/executionProfileCheckPolicy.js.map +1 -0
- package/dist/server/lib/executionProfileRoutes.js +9 -1
- package/dist/server/lib/executionProfileRoutes.js.map +1 -1
- package/dist/server/lib/executionProfileStore.js +5 -3
- package/dist/server/lib/executionProfileStore.js.map +1 -1
- package/dist/server/lib/executionProfiles.js +97 -15
- package/dist/server/lib/executionProfiles.js.map +1 -1
- package/dist/server/lib/executionReconciliation.js +43 -6
- package/dist/server/lib/executionReconciliation.js.map +1 -1
- package/dist/server/lib/executionRunAuthority.js +115 -24
- package/dist/server/lib/executionRunAuthority.js.map +1 -1
- package/dist/server/lib/executionTargets.js +30 -4
- package/dist/server/lib/executionTargets.js.map +1 -1
- package/dist/server/lib/executionWorkloads.js +75 -0
- package/dist/server/lib/executionWorkloads.js.map +1 -0
- package/dist/server/lib/git.js +10 -1
- package/dist/server/lib/git.js.map +1 -1
- package/dist/server/lib/opencodeAgentProvider.js +3 -1
- package/dist/server/lib/opencodeAgentProvider.js.map +1 -1
- package/dist/server/lib/opencodeSessionOperations.js +5 -3
- package/dist/server/lib/opencodeSessionOperations.js.map +1 -1
- package/dist/server/lib/planQuestions.js +2 -1
- package/dist/server/lib/planQuestions.js.map +1 -1
- package/dist/server/lib/postBuildCheckRuns.js +9 -5
- package/dist/server/lib/postBuildCheckRuns.js.map +1 -1
- package/dist/server/lib/preview.js +47 -6
- package/dist/server/lib/preview.js.map +1 -1
- package/dist/server/lib/previewProxy.js +11 -3
- package/dist/server/lib/previewProxy.js.map +1 -1
- package/dist/server/lib/productionCheckApprovals.js +97 -35
- package/dist/server/lib/productionCheckApprovals.js.map +1 -1
- package/dist/server/lib/projectMemorySuggestions.js +29 -6
- package/dist/server/lib/projectMemorySuggestions.js.map +1 -1
- package/dist/server/lib/requiredCheckPolicy.js +3 -40
- package/dist/server/lib/requiredCheckPolicy.js.map +1 -1
- package/dist/server/lib/reviewAgentWatchdog.js +75 -0
- package/dist/server/lib/reviewAgentWatchdog.js.map +1 -0
- package/dist/server/lib/reviewFindingReconciliation.js +176 -0
- package/dist/server/lib/reviewFindingReconciliation.js.map +1 -0
- package/dist/server/lib/reviewFindings.js +45 -17
- package/dist/server/lib/reviewFindings.js.map +1 -1
- package/dist/server/lib/run.js +370 -80
- package/dist/server/lib/run.js.map +1 -1
- package/dist/server/lib/serviceRuns.js +196 -0
- package/dist/server/lib/serviceRuns.js.map +1 -0
- package/dist/server/lib/sessionTargets.js +34 -0
- package/dist/server/lib/sessionTargets.js.map +1 -1
- package/dist/server/lib/shell.js +20 -0
- package/dist/server/lib/shell.js.map +1 -1
- package/dist/server/lib/specArtifact.js +36 -15
- package/dist/server/lib/specArtifact.js.map +1 -1
- package/dist/server/lib/specBundleGroups.js +4 -4
- package/dist/server/lib/specBundleGroups.js.map +1 -1
- package/dist/server/lib/specOperations.js +2 -0
- package/dist/server/lib/specOperations.js.map +1 -1
- package/dist/server/lib/specReviewOperations.js +2 -0
- package/dist/server/lib/specReviewOperations.js.map +1 -1
- package/dist/server/lib/specTicketMaterialization.js +37 -24
- package/dist/server/lib/specTicketMaterialization.js.map +1 -1
- package/dist/server/lib/ticketFollowUpOperations.js +9 -4
- package/dist/server/lib/ticketFollowUpOperations.js.map +1 -1
- package/dist/server/lib/ticketRunOperations.js +1 -0
- package/dist/server/lib/ticketRunOperations.js.map +1 -1
- package/dist/server/lib/types.js +1 -0
- package/dist/server/lib/types.js.map +1 -1
- package/dist/server/lib/workloadExecutionEnvironment.js +2 -0
- package/dist/server/lib/workloadExecutionEnvironment.js.map +1 -0
- package/dist/server/lib/workspaceIdentity.js +30 -6
- package/dist/server/lib/workspaceIdentity.js.map +1 -1
- package/dist/server/workers/build.js +39 -8
- package/dist/server/workers/build.js.map +1 -1
- package/dist/server/workers/chat.js +142 -15
- package/dist/server/workers/chat.js.map +1 -1
- package/dist/server/workers/followUp.js +77 -20
- package/dist/server/workers/followUp.js.map +1 -1
- package/dist/server/workers/plan.js +295 -48
- package/dist/server/workers/plan.js.map +1 -1
- package/dist/server/workers/planFollowUp.js +77 -7
- package/dist/server/workers/planFollowUp.js.map +1 -1
- package/dist/server/workers/review.js +153 -40
- package/dist/server/workers/review.js.map +1 -1
- package/dist/server/workers/specReview.js +43 -5
- package/dist/server/workers/specReview.js.map +1 -1
- package/dist/server/workers/specSession.js +156 -31
- package/dist/server/workers/specSession.js.map +1 -1
- package/package.json +1 -1
- package/dist/client/assets/GitHubActionsDialog-CA189pr2.js +0 -1
- package/dist/client/assets/VerificationDialog-BPVkhKRj.js +0 -4
- package/dist/client/assets/channel-D0zqzBT_.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-ChhyvHH2.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-Cl02kurK.js +0 -1
- package/dist/client/assets/index-Bs8KsdV9.js +0 -276
- package/dist/client/assets/index-DdwM8Wgt.css +0 -2
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-CLR1WgdV.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentProvider.js","sourceRoot":"","sources":["../../../server/lib/agentProvider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iCAAiC,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AACjH,OAAO,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"agentProvider.js","sourceRoot":"","sources":["../../../server/lib/agentProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,9 @@ import { expireApprovalRequests, getApprovalRequest, invalidateApprovalRequest }
|
|
|
4
4
|
import { getActiveExecutionProfileRevision } from './executionProfileStore.js';
|
|
5
5
|
import { getCheckDefinitionFingerprint } from './checkDefinitions.js';
|
|
6
6
|
import { getProjectById, getProjectCheckDefinitions } from './projects.js';
|
|
7
|
-
|
|
7
|
+
import { fingerprintConsequentialAction } from './consequentialActions.js';
|
|
8
|
+
import { rebuildProductionCheckAction } from './productionCheckApprovals.js';
|
|
9
|
+
const invalidReason = async (request) => {
|
|
8
10
|
const activeProfile = getActiveExecutionProfileRevision(request.project_id);
|
|
9
11
|
if (!activeProfile
|
|
10
12
|
|| activeProfile.id !== request.authority.selected_profile.revision_id
|
|
@@ -42,6 +44,16 @@ const invalidReason = (request) => {
|
|
|
42
44
|
|| getCheckDefinitionFingerprint(definition) !== target.check_definition_fingerprint) {
|
|
43
45
|
return 'custom_check_definition_changed';
|
|
44
46
|
}
|
|
47
|
+
try {
|
|
48
|
+
const current = await rebuildProductionCheckAction(request);
|
|
49
|
+
if (fingerprintConsequentialAction(current.action) !== request.action_fingerprint
|
|
50
|
+
|| JSON.stringify(current.authority) !== JSON.stringify(request.authority)) {
|
|
51
|
+
return 'custom_check_action_or_authority_changed';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return 'custom_check_revalidation_failed';
|
|
56
|
+
}
|
|
45
57
|
}
|
|
46
58
|
return null;
|
|
47
59
|
};
|
|
@@ -69,7 +81,7 @@ export const reconcileApprovalRequests = async (input = {}) => {
|
|
|
69
81
|
await input.reconcileConsumed?.(request);
|
|
70
82
|
continue;
|
|
71
83
|
}
|
|
72
|
-
const reason = invalidReason(request);
|
|
84
|
+
const reason = await invalidReason(request);
|
|
73
85
|
if (reason) {
|
|
74
86
|
const invalidatedRequest = invalidateApprovalRequest({
|
|
75
87
|
projectId: request.project_id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approvalReconciliation.js","sourceRoot":"","sources":["../../../server/lib/approvalReconciliation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,MAAM,UAAU,CAAA;AACzB,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AAC7G,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAA;AAG9E,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"approvalReconciliation.js","sourceRoot":"","sources":["../../../server/lib/approvalReconciliation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import db from '../db.js';
|
|
2
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
2
3
|
import { ExecutionEnvironmentFailure, } from './executionEnvironment.js';
|
|
3
|
-
import {
|
|
4
|
+
import { DockerSandboxNetworkRollbackFailure, proveScopedDestinationAccess, removeScopedRulesBestEffort, } from './dockerSandboxExecutionEnvironment.js';
|
|
5
|
+
import { resolveDockerSandboxReleaseForPersistedEnvironment } from './dockerSandboxReleaseProfiles.js';
|
|
4
6
|
import { createDockerSandboxExecutionProvider } from './dockerSandboxExecutionProvider.js';
|
|
5
7
|
import { createDockerSandboxOpencodeSessionOperations } from './dockerSandboxOpencodeSessionOperations.js';
|
|
6
8
|
import { defaultDockerSandboxEnvironmentDependencies, dockerSandboxRunner, ensureDockerSandboxRuntimeReady, reconnectAndInspectDockerSandbox, resolveExpectedDockerSandboxIdentity, stopAndVerifyDockerSandbox, } from './dockerSandboxEnvironmentOperations.js';
|
|
@@ -9,8 +11,9 @@ import { validateExecutionEnvironmentSkills } from './executionEnvironmentValida
|
|
|
9
11
|
import { acquireExecutionEnvironmentLease, appendExecutionEnvironmentEvent, captureExecutionEnvironmentPlacement, getExecutionEnvironment, getExecutionEnvironmentBindingForRun, listExecutionEnvironments, releaseExecutionEnvironmentLease, transitionExecutionEnvironment, } from './executionEnvironments.js';
|
|
10
12
|
import { hostExecutionEnvironment } from './hostExecutionEnvironment.js';
|
|
11
13
|
import { getModelProvider, normalizeModelId } from './models.js';
|
|
12
|
-
import { createExecutionRunAuthority, persistExecutionRunAuthority, resolveEnvironmentCredentialEvidence, resolveExecutionRunProfile, } from './executionRunAuthority.js';
|
|
14
|
+
import { createExecutionRunAuthority, getExecutionRunAuthority, persistExecutionRunAuthority, resolveEnvironmentCredentialEvidence, resolveExecutionRunProfile, } from './executionRunAuthority.js';
|
|
13
15
|
import { fingerprintCredentialRequirements } from './executionProfiles.js';
|
|
16
|
+
import { isExecutionProfileEligibleForWorkload, resolveExecutionCredentialRequirements, resolveExecutionTemplateAgent, } from './executionWorkloads.js';
|
|
14
17
|
import { normalizeExecutionEnvironmentDestinations } from './executionEnvironmentLifecycle.js';
|
|
15
18
|
import { createDockerSandboxLauncherEnvironment, createGovernedHostRuntimeEnvironment, createHostLauncherEnvironment, createLegacyHostRuntimeEnvironment, createProviderManagedRuntimeEnvironment, } from './workspaceProcessEnvironment.js';
|
|
16
19
|
export class BuildExecutionEnvironmentFailure extends Error {
|
|
@@ -29,13 +32,14 @@ const describePreparationFailure = (error) => {
|
|
|
29
32
|
}
|
|
30
33
|
return '';
|
|
31
34
|
};
|
|
32
|
-
const getLatestValidation = (projectId, environmentId, agent, provider) => db.prepare(`
|
|
35
|
+
const getLatestValidation = (projectId, environmentId, agent, provider, workload) => db.prepare(`
|
|
33
36
|
SELECT run.id, run.status, run.domain_status, run.metadata_json
|
|
34
37
|
FROM execution_environment_run_bindings binding
|
|
35
38
|
JOIN execution_runs run ON run.id = binding.execution_run_id AND run.project_id = binding.project_id
|
|
36
39
|
WHERE binding.project_id = ? AND binding.environment_id = ?
|
|
37
40
|
AND binding.relationship = 'validation' AND run.kind = 'environment_validation'
|
|
38
41
|
AND json_extract(run.metadata_json, '$.agent') = ?
|
|
42
|
+
AND COALESCE(json_extract(run.metadata_json, '$.workload'), 'build') = ?
|
|
39
43
|
AND (
|
|
40
44
|
(? IS NULL AND json_extract(run.metadata_json, '$.provider') IS NULL AND json_extract(run.metadata_json, '$.model') IS NULL)
|
|
41
45
|
OR json_extract(run.metadata_json, '$.provider') = ?
|
|
@@ -44,7 +48,7 @@ const getLatestValidation = (projectId, environmentId, agent, provider) => db.pr
|
|
|
44
48
|
)
|
|
45
49
|
ORDER BY run.created_at DESC, run.id DESC
|
|
46
50
|
LIMIT 1
|
|
47
|
-
`).get(projectId, environmentId, agent, provider, provider, provider, provider ? `${provider}/%` : null, provider) ?? null;
|
|
51
|
+
`).get(projectId, environmentId, agent, workload, provider, provider, provider, provider ? `${provider}/%` : null, provider) ?? null;
|
|
48
52
|
const validationAgent = (row) => {
|
|
49
53
|
if (!row.metadata_json) {
|
|
50
54
|
return null;
|
|
@@ -86,7 +90,7 @@ const validationProvider = (row) => {
|
|
|
86
90
|
return null;
|
|
87
91
|
}
|
|
88
92
|
};
|
|
89
|
-
const getValidationCredentialCapability = (projectId, environmentId, validationRunId) => {
|
|
93
|
+
const getValidationCredentialCapability = (projectId, environmentId, validationRunId, workload) => {
|
|
90
94
|
const row = db.prepare(`
|
|
91
95
|
SELECT metadata_json
|
|
92
96
|
FROM execution_environment_events
|
|
@@ -111,7 +115,7 @@ const getValidationCredentialCapability = (projectId, environmentId, validationR
|
|
|
111
115
|
const capability = value;
|
|
112
116
|
if ((capability.execution_provider !== 'host' && capability.execution_provider !== 'docker_sandbox')
|
|
113
117
|
|| (capability.agent !== 'opencode' && capability.agent !== 'claude')
|
|
114
|
-
|| capability.workload !==
|
|
118
|
+
|| capability.workload !== workload
|
|
115
119
|
|| typeof capability.satisfies_requested_protection !== 'boolean'
|
|
116
120
|
|| !capability.inventory
|
|
117
121
|
|| !capability.destination
|
|
@@ -125,40 +129,50 @@ const getValidationCredentialCapability = (projectId, environmentId, validationR
|
|
|
125
129
|
}
|
|
126
130
|
};
|
|
127
131
|
const findExecutionEnvironment = (project, agent, target, profileRevision, pinnedEnvironmentId, pinnedEnvironmentRevision, pinnedEnvironmentValidationFingerprint) => {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
132
|
+
return listExecutionEnvironments(project.id).find(candidate => {
|
|
133
|
+
const releaseProfile = resolveDockerSandboxReleaseForPersistedEnvironment(candidate.provider_version, candidate.template_identity, candidate.agent_identity);
|
|
134
|
+
if (!releaseProfile) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
const fingerprint = currentExecutionEnvironmentValidationFingerprint(agent, releaseProfile);
|
|
138
|
+
return ((!pinnedEnvironmentId || candidate.id === pinnedEnvironmentId)
|
|
139
|
+
&& (pinnedEnvironmentRevision === undefined || candidate.environment_revision === pinnedEnvironmentRevision)
|
|
140
|
+
&& (pinnedEnvironmentValidationFingerprint === undefined
|
|
141
|
+
|| candidate.environment_validation_fingerprint === pinnedEnvironmentValidationFingerprint)
|
|
142
|
+
&& candidate.provider_kind === 'docker_sandbox'
|
|
143
|
+
&& candidate.provider_version === releaseProfile.version
|
|
144
|
+
&& candidate.target_kind === target.identity.kind
|
|
145
|
+
&& candidate.target_key === target.identity.key
|
|
146
|
+
&& candidate.target_workspace_path === target.workspacePath
|
|
147
|
+
&& candidate.environment_validation_fingerprint === fingerprint
|
|
148
|
+
&& (candidate.execution_profile_fingerprint === profileRevision.fingerprint
|
|
149
|
+
|| (profileRevision.revision === 0 && candidate.execution_profile_fingerprint == null))
|
|
150
|
+
&& (candidate.credential_requirements_fingerprint === fingerprintCredentialRequirements(profileRevision.profile.credential_requirements)
|
|
151
|
+
|| (profileRevision.revision === 0 && candidate.credential_requirements_fingerprint == null))
|
|
152
|
+
&& candidate.retirement_requested_at == null
|
|
153
|
+
&& candidate.template_identity === releaseProfile.templates[agent]
|
|
154
|
+
&& candidate.agent_identity === agent
|
|
155
|
+
&& candidate.compatible_agents.length === 1
|
|
156
|
+
&& candidate.compatible_agents[0] === agent
|
|
157
|
+
&& ['ready', 'running', 'stopped'].includes(candidate.lifecycle_state));
|
|
158
|
+
}) ?? null;
|
|
150
159
|
};
|
|
151
|
-
const resolveValidatedEnvironment = (project, agent, target, model, profileRevision, pinnedEnvironmentId, pinnedEnvironmentRevision, pinnedEnvironmentValidationFingerprint) => {
|
|
160
|
+
const resolveValidatedEnvironment = (project, agent, target, model, profileRevision, workload, pinnedEnvironmentId, pinnedEnvironmentRevision, pinnedEnvironmentValidationFingerprint) => {
|
|
152
161
|
const requestedModel = agent === 'opencode' ? normalizeModelId(model) : null;
|
|
153
|
-
const requestedProvider =
|
|
154
|
-
|
|
162
|
+
const requestedProvider = workload === 'check'
|
|
163
|
+
? null
|
|
164
|
+
: agent === 'opencode' ? getModelProvider(requestedModel) : 'anthropic';
|
|
165
|
+
if (workload !== 'check' && agent === 'opencode' && !requestedProvider) {
|
|
155
166
|
throw new BuildExecutionEnvironmentFailure('validation_provider_missing', 'OpenCode Build requires a model with a provider before a Docker Sandbox can be used.', 'Choose a provider-backed OpenCode model for this ticket, then retry Build.');
|
|
156
167
|
}
|
|
157
168
|
const environment = findExecutionEnvironment(project, agent, target, profileRevision, pinnedEnvironmentId, pinnedEnvironmentRevision, pinnedEnvironmentValidationFingerprint);
|
|
158
169
|
if (!environment) {
|
|
159
170
|
throw new BuildExecutionEnvironmentFailure('environment_missing', 'No validated Docker Sandbox matches this exact Build target and agent.', `Select this target and validate its ${agent} Docker Sandbox before starting Build.`);
|
|
160
171
|
}
|
|
161
|
-
|
|
172
|
+
if (workload === 'check') {
|
|
173
|
+
return environment;
|
|
174
|
+
}
|
|
175
|
+
const validation = getLatestValidation(project.id, environment.id, agent, requestedProvider, workload);
|
|
162
176
|
if (!validation) {
|
|
163
177
|
throw new BuildExecutionEnvironmentFailure('validation_missing', 'The matching Docker Sandbox has no durable validation evidence.', `Validate the environment for ${agent} before starting Build.`);
|
|
164
178
|
}
|
|
@@ -184,6 +198,7 @@ const validateBuildProvider = async (input) => {
|
|
|
184
198
|
initiatedBy: 'automation',
|
|
185
199
|
signal: input.signal,
|
|
186
200
|
profileRevision: input.profileRevision,
|
|
201
|
+
workload: input.workload,
|
|
187
202
|
}, {
|
|
188
203
|
adapter: input.dependencies.adapter,
|
|
189
204
|
runtimeController: input.dependencies.runtimeController,
|
|
@@ -326,6 +341,102 @@ export const resolveBuildLineage = (projectId, ticketId, currentRunId, sessionId
|
|
|
326
341
|
return parseBuildLineage(row);
|
|
327
342
|
};
|
|
328
343
|
export const resolveBuildLineageProvider = (projectId, ticketId, currentRunId, sessionId) => resolveBuildLineage(projectId, ticketId, currentRunId, sessionId)?.provider ?? null;
|
|
344
|
+
const resolveChatLineageRow = (projectId, chatSessionId, currentRunId, sessionId) => db.prepare(`${buildLineageSelect}
|
|
345
|
+
INNER JOIN agent_runs agent_run
|
|
346
|
+
ON agent_run.execution_run_id = run.id
|
|
347
|
+
AND agent_run.parent_type = 'chat'
|
|
348
|
+
AND agent_run.parent_id = run.source_id
|
|
349
|
+
AND agent_run.role = 'main'
|
|
350
|
+
AND agent_run.session_id = ?
|
|
351
|
+
WHERE run.project_id = ? AND run.source_kind = 'chat_session' AND run.source_id = ?
|
|
352
|
+
AND run.id <> ? AND run.kind = 'chat_turn'
|
|
353
|
+
AND json_extract(run.metadata_json, '$.retry_mode') = 'build'
|
|
354
|
+
ORDER BY run.created_at DESC, run.id DESC
|
|
355
|
+
LIMIT 1
|
|
356
|
+
`).get(sessionId, projectId, chatSessionId, currentRunId);
|
|
357
|
+
const resolveChatLineageForRow = (projectId, row) => {
|
|
358
|
+
const lineage = parseBuildLineage(row);
|
|
359
|
+
if (!lineage || !row) {
|
|
360
|
+
return null;
|
|
361
|
+
}
|
|
362
|
+
const authority = getExecutionRunAuthority(projectId, row.id);
|
|
363
|
+
if (!authority || authority.workload !== 'chat_build') {
|
|
364
|
+
throw new BuildExecutionEnvironmentFailure('environment_identity_invalid', 'The historical Chat Build authority is unavailable or belongs to another workload.', 'Start a fresh Chat Build session under the selected execution profile.');
|
|
365
|
+
}
|
|
366
|
+
if (authority.effective.provider !== lineage.provider
|
|
367
|
+
|| authority.effective.environment_id !== lineage.environmentId
|
|
368
|
+
|| authority.effective.environment_revision !== lineage.environmentRevision
|
|
369
|
+
|| authority.effective.environment_validation_fingerprint !== lineage.environmentValidationFingerprint) {
|
|
370
|
+
throw new BuildExecutionEnvironmentFailure('environment_identity_invalid', 'The historical Chat Build provider metadata does not match its immutable authority.', 'Start a fresh Chat Build session under the selected execution profile.');
|
|
371
|
+
}
|
|
372
|
+
let metadata = null;
|
|
373
|
+
try {
|
|
374
|
+
metadata = row.metadata_json ? JSON.parse(row.metadata_json) : null;
|
|
375
|
+
}
|
|
376
|
+
catch {
|
|
377
|
+
metadata = null;
|
|
378
|
+
}
|
|
379
|
+
const historicalAgent = metadata?.retry_tool;
|
|
380
|
+
const historicalModel = typeof metadata?.retry_model === 'string' ? metadata.retry_model : null;
|
|
381
|
+
const modelProvider = historicalAgent === 'claude' ? 'anthropic' : getModelProvider(historicalModel);
|
|
382
|
+
if ((historicalAgent !== 'opencode' && historicalAgent !== 'claude')
|
|
383
|
+
|| authority.agent.agent !== historicalAgent
|
|
384
|
+
|| !modelProvider) {
|
|
385
|
+
throw new BuildExecutionEnvironmentFailure('environment_identity_invalid', 'The historical Chat Build agent or model provider authority is incomplete.', 'Start a fresh Chat Build session under the selected agent and model provider.');
|
|
386
|
+
}
|
|
387
|
+
return {
|
|
388
|
+
...lineage,
|
|
389
|
+
agent: authority.agent.agent,
|
|
390
|
+
modelProvider,
|
|
391
|
+
target: {
|
|
392
|
+
kind: authority.target.kind,
|
|
393
|
+
key: authority.target.key,
|
|
394
|
+
workspacePath: authority.target.workspace_path,
|
|
395
|
+
},
|
|
396
|
+
};
|
|
397
|
+
};
|
|
398
|
+
export const resolveChatLineage = (projectId, chatSessionId, currentRunId, sessionId) => resolveChatLineageForRow(projectId, resolveChatLineageRow(projectId, chatSessionId, currentRunId, sessionId));
|
|
399
|
+
export const resolvePlanChatProviderSession = (projectId, chatSessionId, sessionId) => {
|
|
400
|
+
const row = db.prepare(`
|
|
401
|
+
SELECT run.metadata_json
|
|
402
|
+
FROM execution_runs run
|
|
403
|
+
INNER JOIN agent_runs agent_run
|
|
404
|
+
ON agent_run.execution_run_id = run.id
|
|
405
|
+
AND agent_run.parent_type = 'chat'
|
|
406
|
+
AND agent_run.parent_id = run.source_id
|
|
407
|
+
AND agent_run.role = 'main'
|
|
408
|
+
AND agent_run.session_id = ?
|
|
409
|
+
WHERE run.project_id = ? AND run.source_kind = 'chat_session' AND run.source_id = ?
|
|
410
|
+
AND run.kind = 'chat_turn'
|
|
411
|
+
AND json_extract(run.metadata_json, '$.retry_mode') = 'plan'
|
|
412
|
+
ORDER BY run.created_at DESC, run.id DESC
|
|
413
|
+
LIMIT 1
|
|
414
|
+
`).get(sessionId, projectId, chatSessionId);
|
|
415
|
+
if (!row?.metadata_json) {
|
|
416
|
+
return null;
|
|
417
|
+
}
|
|
418
|
+
try {
|
|
419
|
+
const metadata = JSON.parse(row.metadata_json);
|
|
420
|
+
const agent = metadata.retry_tool;
|
|
421
|
+
const model = typeof metadata.retry_model === 'string' ? metadata.retry_model : null;
|
|
422
|
+
const modelProvider = agent === 'claude' ? 'anthropic' : getModelProvider(model);
|
|
423
|
+
if ((agent !== 'opencode' && agent !== 'claude') || !modelProvider) {
|
|
424
|
+
return null;
|
|
425
|
+
}
|
|
426
|
+
return { agent, modelProvider };
|
|
427
|
+
}
|
|
428
|
+
catch {
|
|
429
|
+
return null;
|
|
430
|
+
}
|
|
431
|
+
};
|
|
432
|
+
export const resolveChatLineageForRun = (projectId, executionRunId) => {
|
|
433
|
+
const row = db.prepare(`${buildLineageSelect}
|
|
434
|
+
WHERE run.project_id = ? AND run.id = ? AND run.kind = 'chat_turn'
|
|
435
|
+
AND json_extract(run.metadata_json, '$.retry_mode') = 'build'
|
|
436
|
+
LIMIT 1
|
|
437
|
+
`).get(projectId, executionRunId);
|
|
438
|
+
return resolveChatLineageForRow(projectId, row);
|
|
439
|
+
};
|
|
329
440
|
export const recordBuildExecutionProvider = (projectId, executionRunId, provider) => {
|
|
330
441
|
const updated = db.prepare(`
|
|
331
442
|
UPDATE execution_runs
|
|
@@ -337,9 +448,40 @@ export const recordBuildExecutionProvider = (projectId, executionRunId, provider
|
|
|
337
448
|
throw new Error('Build execution provider lineage could not be recorded');
|
|
338
449
|
}
|
|
339
450
|
};
|
|
340
|
-
export const
|
|
451
|
+
export const recordChatExecutionProvider = (projectId, executionRunId, provider) => {
|
|
452
|
+
const updated = db.prepare(`
|
|
453
|
+
UPDATE execution_runs
|
|
454
|
+
SET metadata_json = json_set(COALESCE(metadata_json, '{}'), '$.build_execution_provider', ?),
|
|
455
|
+
updated_at = CURRENT_TIMESTAMP
|
|
456
|
+
WHERE id = ? AND project_id = ? AND kind = 'chat_turn'
|
|
457
|
+
AND json_extract(metadata_json, '$.retry_mode') = 'build'
|
|
458
|
+
`).run(provider, executionRunId, projectId);
|
|
459
|
+
if (updated.changes !== 1) {
|
|
460
|
+
throw new Error('Chat Build execution provider lineage could not be recorded');
|
|
461
|
+
}
|
|
462
|
+
};
|
|
463
|
+
export const resolveWorkloadExecutionEnvironment = async (input) => {
|
|
341
464
|
const profileRevision = resolveExecutionRunProfile(input.project, input.executionRunId);
|
|
342
|
-
|
|
465
|
+
if (!isExecutionProfileEligibleForWorkload(profileRevision.profile, input.workload)) {
|
|
466
|
+
throw new Error(`The selected execution profile is not eligible for ${input.workload} workloads`);
|
|
467
|
+
}
|
|
468
|
+
const templateAgent = resolveExecutionTemplateAgent({
|
|
469
|
+
profile: profileRevision.profile,
|
|
470
|
+
workload: input.workload,
|
|
471
|
+
agent: input.agent,
|
|
472
|
+
});
|
|
473
|
+
if (!templateAgent || templateAgent !== input.agent) {
|
|
474
|
+
throw new Error(`The selected execution profile has no matching template for ${input.workload} and ${input.agent}`);
|
|
475
|
+
}
|
|
476
|
+
const selectedProvider = input.pinnedProvider ?? profileRevision.profile.provider_preference;
|
|
477
|
+
if (input.pinnedProvider
|
|
478
|
+
&& input.pinnedProvider !== profileRevision.profile.provider_preference
|
|
479
|
+
&& !(input.pinnedProvider === 'host'
|
|
480
|
+
&& profileRevision.profile.provider_preference === 'docker_sandbox'
|
|
481
|
+
&& profileRevision.profile.fallback === 'explicit_host'
|
|
482
|
+
&& profileRevision.profile.isolation === 'host_process_allowed')) {
|
|
483
|
+
throw new BuildExecutionEnvironmentFailure('environment_identity_invalid', 'The historical execution provider conflicts with the selected execution profile.', 'Start a fresh execution under the selected profile.');
|
|
484
|
+
}
|
|
343
485
|
const hasPinnedEnvironmentLineage = input.pinnedEnvironmentId !== undefined
|
|
344
486
|
|| input.pinnedEnvironmentRevision !== undefined
|
|
345
487
|
|| input.pinnedEnvironmentValidationFingerprint !== undefined;
|
|
@@ -350,7 +492,9 @@ export const resolveBuildExecutionEnvironment = async (input) => {
|
|
|
350
492
|
|| !input.pinnedEnvironmentValidationFingerprint)) {
|
|
351
493
|
throw new BuildExecutionEnvironmentFailure('environment_identity_invalid', 'The historical Docker Sandbox lineage is incomplete or conflicts with the selected execution profile.', 'Retry as a fresh Build instead of resuming this historical provider session.');
|
|
352
494
|
}
|
|
353
|
-
const modelProvider = input.
|
|
495
|
+
const modelProvider = input.workload === 'check'
|
|
496
|
+
? null
|
|
497
|
+
: input.agent === 'opencode' ? getModelProvider(input.model) || null : 'anthropic';
|
|
354
498
|
const resolveHostEnvironment = (fallback) => {
|
|
355
499
|
const runAuthority = createExecutionRunAuthority({
|
|
356
500
|
profileRevision,
|
|
@@ -360,6 +504,7 @@ export const resolveBuildExecutionEnvironment = async (input) => {
|
|
|
360
504
|
target: input.target,
|
|
361
505
|
environment: null,
|
|
362
506
|
fallback: fallback ? { used: true, from: fallback.from, reason: fallback.reason } : undefined,
|
|
507
|
+
workload: input.workload,
|
|
363
508
|
});
|
|
364
509
|
persistExecutionRunAuthority({
|
|
365
510
|
projectId: input.project.id,
|
|
@@ -368,7 +513,14 @@ export const resolveBuildExecutionEnvironment = async (input) => {
|
|
|
368
513
|
authority: runAuthority,
|
|
369
514
|
});
|
|
370
515
|
if (fallback) {
|
|
371
|
-
|
|
516
|
+
const runKind = db.prepare('SELECT kind FROM execution_runs WHERE id = ? AND project_id = ?')
|
|
517
|
+
.get(input.executionRunId, input.project.id);
|
|
518
|
+
if (runKind?.kind === 'chat_turn') {
|
|
519
|
+
recordChatExecutionProvider(input.project.id, input.executionRunId, 'host');
|
|
520
|
+
}
|
|
521
|
+
else if (runKind?.kind !== 'service') {
|
|
522
|
+
recordBuildExecutionProvider(input.project.id, input.executionRunId, 'host');
|
|
523
|
+
}
|
|
372
524
|
}
|
|
373
525
|
return {
|
|
374
526
|
provider: hostExecutionEnvironment,
|
|
@@ -383,10 +535,17 @@ export const resolveBuildExecutionEnvironment = async (input) => {
|
|
|
383
535
|
};
|
|
384
536
|
};
|
|
385
537
|
if (selectedProvider !== 'docker_sandbox') {
|
|
386
|
-
return resolveHostEnvironment(
|
|
538
|
+
return resolveHostEnvironment(input.pinnedProvider === 'host' && profileRevision.profile.provider_preference === 'docker_sandbox'
|
|
539
|
+
? { from: 'docker_sandbox', reason: 'historical_provider_lineage' }
|
|
540
|
+
: undefined);
|
|
387
541
|
}
|
|
388
542
|
const dependencies = input.dependencies ?? defaultDockerSandboxEnvironmentDependencies;
|
|
389
|
-
const applicableRequirements =
|
|
543
|
+
const applicableRequirements = resolveExecutionCredentialRequirements({
|
|
544
|
+
profile: profileRevision.profile,
|
|
545
|
+
workload: input.workload,
|
|
546
|
+
agent: input.agent,
|
|
547
|
+
modelProvider,
|
|
548
|
+
});
|
|
390
549
|
const canFallback = profileRevision.profile.fallback === 'explicit_host'
|
|
391
550
|
&& !hasPinnedEnvironmentLineage
|
|
392
551
|
&& profileRevision.profile.isolation === 'host_process_allowed'
|
|
@@ -407,12 +566,13 @@ export const resolveBuildExecutionEnvironment = async (input) => {
|
|
|
407
566
|
let validatedDuringResolution = false;
|
|
408
567
|
try {
|
|
409
568
|
try {
|
|
410
|
-
environment = resolveValidatedEnvironment(input.project, input.agent, input.target, input.model ?? null, profileRevision, input.pinnedEnvironmentId, input.pinnedEnvironmentRevision, input.pinnedEnvironmentValidationFingerprint);
|
|
569
|
+
environment = resolveValidatedEnvironment(input.project, input.agent, input.target, input.model ?? null, profileRevision, input.workload, input.pinnedEnvironmentId, input.pinnedEnvironmentRevision, input.pinnedEnvironmentValidationFingerprint);
|
|
411
570
|
}
|
|
412
571
|
catch (error) {
|
|
413
572
|
if (error instanceof BuildExecutionEnvironmentFailure
|
|
414
573
|
&& error.code === 'environment_missing'
|
|
415
|
-
&& !input.pinnedEnvironmentId
|
|
574
|
+
&& !input.pinnedEnvironmentId
|
|
575
|
+
&& input.workload !== 'check') {
|
|
416
576
|
const requestedProvider = input.agent === 'opencode' ? getModelProvider(input.model) : 'anthropic';
|
|
417
577
|
try {
|
|
418
578
|
await prepareAndValidateExecutionEnvironmentForTarget({
|
|
@@ -424,6 +584,7 @@ export const resolveBuildExecutionEnvironment = async (input) => {
|
|
|
424
584
|
initiatedBy: 'automation',
|
|
425
585
|
signal: input.signal,
|
|
426
586
|
profileRevision,
|
|
587
|
+
workload: input.workload,
|
|
427
588
|
}, {
|
|
428
589
|
adapter: dependencies.adapter,
|
|
429
590
|
runtimeController: dependencies.runtimeController,
|
|
@@ -434,7 +595,7 @@ export const resolveBuildExecutionEnvironment = async (input) => {
|
|
|
434
595
|
catch (preparationError) {
|
|
435
596
|
throw new BuildExecutionEnvironmentFailure('validation_stale', `The exact ticket Build target could not be prepared for Docker Sandbox execution.${describePreparationFailure(preparationError)}`, 'Review the reported Docker Sandbox preparation failure, resolve it, then retry Build.', { cause: preparationError });
|
|
436
597
|
}
|
|
437
|
-
environment = resolveValidatedEnvironment(input.project, input.agent, input.target, input.model ?? null, profileRevision, input.pinnedEnvironmentId, input.pinnedEnvironmentRevision, input.pinnedEnvironmentValidationFingerprint);
|
|
598
|
+
environment = resolveValidatedEnvironment(input.project, input.agent, input.target, input.model ?? null, profileRevision, input.workload, input.pinnedEnvironmentId, input.pinnedEnvironmentRevision, input.pinnedEnvironmentValidationFingerprint);
|
|
438
599
|
}
|
|
439
600
|
else if (!shouldRetryValidation(error)) {
|
|
440
601
|
throw error;
|
|
@@ -454,6 +615,7 @@ export const resolveBuildExecutionEnvironment = async (input) => {
|
|
|
454
615
|
signal: input.signal,
|
|
455
616
|
dependencies,
|
|
456
617
|
profileRevision,
|
|
618
|
+
workload: input.workload,
|
|
457
619
|
});
|
|
458
620
|
validatedDuringResolution = true;
|
|
459
621
|
}
|
|
@@ -463,7 +625,7 @@ export const resolveBuildExecutionEnvironment = async (input) => {
|
|
|
463
625
|
}
|
|
464
626
|
throw new BuildExecutionEnvironmentFailure('validation_stale', 'The Docker Sandbox provider preflight failed before Build could start.', `Resolve ${input.agent} authentication and provider access, then retry Build.`, { cause: validationError });
|
|
465
627
|
}
|
|
466
|
-
environment = resolveValidatedEnvironment(input.project, input.agent, input.target, input.model ?? null, profileRevision, input.pinnedEnvironmentId, input.pinnedEnvironmentRevision, input.pinnedEnvironmentValidationFingerprint);
|
|
628
|
+
environment = resolveValidatedEnvironment(input.project, input.agent, input.target, input.model ?? null, profileRevision, input.workload, input.pinnedEnvironmentId, input.pinnedEnvironmentRevision, input.pinnedEnvironmentValidationFingerprint);
|
|
467
629
|
}
|
|
468
630
|
}
|
|
469
631
|
}
|
|
@@ -476,7 +638,7 @@ export const resolveBuildExecutionEnvironment = async (input) => {
|
|
|
476
638
|
|| environment.environment_validation_fingerprint !== input.pinnedEnvironmentValidationFingerprint)) {
|
|
477
639
|
throw new BuildExecutionEnvironmentFailure('environment_identity_invalid', 'The resolved Docker Sandbox does not match the historical environment lineage.', 'Restore the exact historical environment or retry as a fresh Build.');
|
|
478
640
|
}
|
|
479
|
-
if (!validatedDuringResolution) {
|
|
641
|
+
if (!validatedDuringResolution && input.workload !== 'check') {
|
|
480
642
|
try {
|
|
481
643
|
await validateBuildProvider({
|
|
482
644
|
project: input.project,
|
|
@@ -487,29 +649,46 @@ export const resolveBuildExecutionEnvironment = async (input) => {
|
|
|
487
649
|
signal: input.signal,
|
|
488
650
|
dependencies,
|
|
489
651
|
profileRevision,
|
|
652
|
+
workload: input.workload,
|
|
490
653
|
});
|
|
491
654
|
}
|
|
492
655
|
catch (error) {
|
|
493
656
|
return resolveFallback(new BuildExecutionEnvironmentFailure('validation_stale', 'The Docker Sandbox provider preflight could not refresh credential and destination evidence before Build.', `Resolve ${input.agent} authentication and provider access, then retry Build.`, { cause: error }));
|
|
494
657
|
}
|
|
495
658
|
}
|
|
496
|
-
const validation = getLatestValidation(input.project.id, environment.id, input.agent, modelProvider);
|
|
659
|
+
const validation = getLatestValidation(input.project.id, environment.id, input.agent, modelProvider, input.workload);
|
|
497
660
|
const credentialCapability = validation
|
|
498
|
-
? getValidationCredentialCapability(input.project.id, environment.id, validation.id)
|
|
661
|
+
? getValidationCredentialCapability(input.project.id, environment.id, validation.id, input.workload)
|
|
499
662
|
: null;
|
|
500
663
|
const authority = createAuthority(environment, input.agent, resolveEnvironmentCredentialEvidence({
|
|
501
664
|
profileRevision,
|
|
502
665
|
agent: input.agent,
|
|
503
666
|
modelProvider,
|
|
504
667
|
credentialCapability,
|
|
668
|
+
workload: input.workload,
|
|
505
669
|
}));
|
|
506
670
|
try {
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
671
|
+
const existingBinding = getExecutionEnvironmentBindingForRun(input.project.id, input.executionRunId);
|
|
672
|
+
if (existingBinding?.released_at === null) {
|
|
673
|
+
const existingAuthority = existingBinding.authority_json
|
|
674
|
+
? JSON.parse(existingBinding.authority_json)
|
|
675
|
+
: null;
|
|
676
|
+
if (existingBinding.environment_id !== environment.id
|
|
677
|
+
|| existingBinding.environment_revision !== environment.environment_revision
|
|
678
|
+
|| existingBinding.environment_validation_fingerprint !== environment.environment_validation_fingerprint
|
|
679
|
+
|| existingBinding.execution_profile_fingerprint !== environment.execution_profile_fingerprint
|
|
680
|
+
|| !isDeepStrictEqual(existingAuthority, authority)) {
|
|
681
|
+
throw new Error('The retained execution environment lease does not match current authority');
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
else {
|
|
685
|
+
acquireExecutionEnvironmentLease({
|
|
686
|
+
projectId: input.project.id,
|
|
687
|
+
environmentId: environment.id,
|
|
688
|
+
executionRunId: input.executionRunId,
|
|
689
|
+
authority,
|
|
690
|
+
});
|
|
691
|
+
}
|
|
513
692
|
}
|
|
514
693
|
catch (error) {
|
|
515
694
|
return resolveFallback(new BuildExecutionEnvironmentFailure('environment_leased', 'The selected Docker Sandbox is already leased by another run.', 'Wait for the active Build or reconciliation to release the environment.', { cause: error }));
|
|
@@ -584,6 +763,16 @@ export const resolveBuildExecutionEnvironment = async (input) => {
|
|
|
584
763
|
try {
|
|
585
764
|
await ensureDockerSandboxRuntimeReady(dependencies, input.signal);
|
|
586
765
|
await reconnectAndInspectDockerSandbox(environment, dependencies, input.signal);
|
|
766
|
+
if (environment.lifecycle_state === 'stopped') {
|
|
767
|
+
transitionExecutionEnvironment({
|
|
768
|
+
projectId: input.project.id,
|
|
769
|
+
environmentId: environment.id,
|
|
770
|
+
state: 'ready',
|
|
771
|
+
eventType: 'environment_execution_reconnected',
|
|
772
|
+
message: 'Docker Sandbox was reconnected for workload execution.',
|
|
773
|
+
metadata: { executionRunId: input.executionRunId },
|
|
774
|
+
});
|
|
775
|
+
}
|
|
587
776
|
}
|
|
588
777
|
catch (error) {
|
|
589
778
|
if (input.signal?.aborted) {
|
|
@@ -721,6 +910,7 @@ export const resolveBuildExecutionEnvironment = async (input) => {
|
|
|
721
910
|
environment,
|
|
722
911
|
credentialCapability,
|
|
723
912
|
networkEvidence,
|
|
913
|
+
workload: input.workload,
|
|
724
914
|
});
|
|
725
915
|
}
|
|
726
916
|
catch (error) {
|
|
@@ -744,6 +934,7 @@ export const resolveBuildExecutionEnvironment = async (input) => {
|
|
|
744
934
|
binding: {
|
|
745
935
|
environmentId: environment.id,
|
|
746
936
|
environmentRevision: environment.environment_revision,
|
|
937
|
+
providerVersion: environment.provider_version,
|
|
747
938
|
executionRunId: input.executionRunId,
|
|
748
939
|
target: input.target,
|
|
749
940
|
sandbox: expected,
|
|
@@ -766,12 +957,14 @@ export const resolveBuildExecutionEnvironment = async (input) => {
|
|
|
766
957
|
return null;
|
|
767
958
|
}
|
|
768
959
|
try {
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
960
|
+
if (placement.executionRunId === input.executionRunId) {
|
|
961
|
+
captureExecutionEnvironmentPlacement({
|
|
962
|
+
projectId: input.project.id,
|
|
963
|
+
environmentId: environment.id,
|
|
964
|
+
executionRunId: input.executionRunId,
|
|
965
|
+
placement,
|
|
966
|
+
});
|
|
967
|
+
}
|
|
775
968
|
transitionExecutionEnvironment({
|
|
776
969
|
projectId: input.project.id,
|
|
777
970
|
environmentId: environment.id,
|
|
@@ -816,4 +1009,5 @@ export const resolveBuildExecutionEnvironment = async (input) => {
|
|
|
816
1009
|
release,
|
|
817
1010
|
};
|
|
818
1011
|
};
|
|
1012
|
+
export const resolveBuildExecutionEnvironment = (input) => resolveWorkloadExecutionEnvironment({ ...input, workload: 'build' });
|
|
819
1013
|
//# sourceMappingURL=buildExecutionEnvironment.js.map
|