@viewportai/daemon 0.25.11 → 0.25.13
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/cli/check-command.d.ts +2 -0
- package/dist/cli/check-command.d.ts.map +1 -0
- package/dist/cli/check-command.js +168 -0
- package/dist/cli/check-command.js.map +1 -0
- package/dist/cli/commands.d.ts +2 -0
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +2 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/diagnostic-command.d.ts +2 -0
- package/dist/cli/diagnostic-command.d.ts.map +1 -0
- package/dist/cli/diagnostic-command.js +102 -0
- package/dist/cli/diagnostic-command.js.map +1 -0
- package/dist/cli/lifecycle-commands.d.ts.map +1 -1
- package/dist/cli/lifecycle-commands.js +2 -1
- package/dist/cli/lifecycle-commands.js.map +1 -1
- package/dist/cli/lifecycle-pair-command.d.ts.map +1 -1
- package/dist/cli/lifecycle-pair-command.js +31 -0
- package/dist/cli/lifecycle-pair-command.js.map +1 -1
- package/dist/cli/policy-schema-validator.d.ts +221 -0
- package/dist/cli/policy-schema-validator.d.ts.map +1 -0
- package/dist/cli/policy-schema-validator.js +280 -0
- package/dist/cli/policy-schema-validator.js.map +1 -0
- package/dist/cli/support-packet.d.ts +7 -0
- package/dist/cli/support-packet.d.ts.map +1 -0
- package/dist/cli/support-packet.js +19 -0
- package/dist/cli/support-packet.js.map +1 -0
- package/dist/cli/worker-command.d.ts.map +1 -1
- package/dist/cli/worker-command.js +367 -14
- package/dist/cli/worker-command.js.map +1 -1
- package/dist/cli/worker-process-lock.d.ts +27 -0
- package/dist/cli/worker-process-lock.d.ts.map +1 -0
- package/dist/cli/worker-process-lock.js +150 -0
- package/dist/cli/worker-process-lock.js.map +1 -0
- package/dist/cli/worker-profile.d.ts +20 -0
- package/dist/cli/worker-profile.d.ts.map +1 -1
- package/dist/cli/worker-profile.js +38 -0
- package/dist/cli/worker-profile.js.map +1 -1
- package/dist/cli/worker-runtime.d.ts +2 -1
- package/dist/cli/worker-runtime.d.ts.map +1 -1
- package/dist/cli/worker-runtime.js +282 -88
- package/dist/cli/worker-runtime.js.map +1 -1
- package/dist/cli/workflow-managed-worker-format.d.ts.map +1 -1
- package/dist/cli/workflow-managed-worker-format.js +3 -1
- package/dist/cli/workflow-managed-worker-format.js.map +1 -1
- package/dist/cli/workflow-managed-worker.d.ts.map +1 -1
- package/dist/cli/workflow-managed-worker.js +236 -21
- package/dist/cli/workflow-managed-worker.js.map +1 -1
- package/dist/core/logger.d.ts.map +1 -1
- package/dist/core/logger.js +6 -0
- package/dist/core/logger.js.map +1 -1
- package/dist/core/output.d.ts.map +1 -1
- package/dist/core/output.js +5 -4
- package/dist/core/output.js.map +1 -1
- package/dist/core/redaction.d.ts +4 -0
- package/dist/core/redaction.d.ts.map +1 -0
- package/dist/core/redaction.js +76 -0
- package/dist/core/redaction.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/workflows/action-provider-adapters.js +52 -4
- package/dist/workflows/action-provider-adapters.js.map +1 -1
- package/dist/workflows/checkout-node.d.ts +1 -0
- package/dist/workflows/checkout-node.d.ts.map +1 -1
- package/dist/workflows/checkout-node.js +9 -4
- package/dist/workflows/checkout-node.js.map +1 -1
- package/dist/workflows/event-types.d.ts +1 -1
- package/dist/workflows/event-types.d.ts.map +1 -1
- package/dist/workflows/git-publish-node.d.ts +20 -0
- package/dist/workflows/git-publish-node.d.ts.map +1 -1
- package/dist/workflows/git-publish-node.js +87 -3
- package/dist/workflows/git-publish-node.js.map +1 -1
- package/dist/workflows/node-executor.d.ts +6 -0
- package/dist/workflows/node-executor.d.ts.map +1 -1
- package/dist/workflows/node-executor.js +53 -2
- package/dist/workflows/node-executor.js.map +1 -1
- package/dist/workflows/node-registry.d.ts +2 -2
- package/dist/workflows/node-registry.d.ts.map +1 -1
- package/dist/workflows/node-registry.js +129 -5
- package/dist/workflows/node-registry.js.map +1 -1
- package/dist/workflows/parser.d.ts.map +1 -1
- package/dist/workflows/parser.js +17 -1
- package/dist/workflows/parser.js.map +1 -1
- package/dist/workflows/platform-command-applier.d.ts +4 -0
- package/dist/workflows/platform-command-applier.d.ts.map +1 -1
- package/dist/workflows/platform-command-applier.js +152 -1
- package/dist/workflows/platform-command-applier.js.map +1 -1
- package/dist/workflows/platform-runtime-command.d.ts +2 -0
- package/dist/workflows/platform-runtime-command.d.ts.map +1 -1
- package/dist/workflows/platform-runtime-command.js +2 -0
- package/dist/workflows/platform-runtime-command.js.map +1 -1
- package/dist/workflows/platform-sync-payload.js +18 -4
- package/dist/workflows/platform-sync-payload.js.map +1 -1
- package/dist/workflows/platform-sync.js +7 -2
- package/dist/workflows/platform-sync.js.map +1 -1
- package/dist/workflows/policy-enforcement.d.ts +43 -0
- package/dist/workflows/policy-enforcement.d.ts.map +1 -0
- package/dist/workflows/policy-enforcement.js +0 -0
- package/dist/workflows/policy-enforcement.js.map +1 -0
- package/dist/workflows/run-types.d.ts +1 -0
- package/dist/workflows/run-types.d.ts.map +1 -1
- package/dist/workflows/runner.d.ts +4 -1
- package/dist/workflows/runner.d.ts.map +1 -1
- package/dist/workflows/runner.js +46 -12
- package/dist/workflows/runner.js.map +1 -1
- package/dist/workflows/types.d.ts +33 -0
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/workflow-authority-contract.d.ts +1 -1
- package/dist/workflows/workflow-authority-contract.d.ts.map +1 -1
- package/dist/workflows/workflow-authority-contract.js +23 -0
- package/dist/workflows/workflow-authority-contract.js.map +1 -1
- package/dist/workflows/workflow-production-schema.d.ts +13 -0
- package/dist/workflows/workflow-production-schema.d.ts.map +1 -1
- package/dist/workflows/workflow-production-schema.js +26 -0
- package/dist/workflows/workflow-production-schema.js.map +1 -1
- package/dist/workflows/workflow-production-types.d.ts +6 -0
- package/dist/workflows/workflow-production-types.d.ts.map +1 -1
- package/dist/workflows/workflow-schema.d.ts +50 -0
- package/dist/workflows/workflow-schema.d.ts.map +1 -1
- package/dist/workflows/workflow-schema.js +41 -0
- package/dist/workflows/workflow-schema.js.map +1 -1
- package/package.json +6 -3
|
@@ -100,7 +100,9 @@ export function approvalActor(node) {
|
|
|
100
100
|
export function approvalExpectedActionDigest(node) {
|
|
101
101
|
const approval = node.metadata?.['approval'];
|
|
102
102
|
if (approval && typeof approval === 'object') {
|
|
103
|
-
const digest = approval.
|
|
103
|
+
const digest = approval.expectedActionDigest ??
|
|
104
|
+
approval.expected_action_digest ??
|
|
105
|
+
approval.actionDigest;
|
|
104
106
|
if (typeof digest === 'string' && digest.trim() !== '')
|
|
105
107
|
return digest;
|
|
106
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-managed-worker-format.js","sourceRoot":"","sources":["../../src/cli/workflow-managed-worker-format.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"workflow-managed-worker-format.js","sourceRoot":"","sources":["../../src/cli/workflow-managed-worker-format.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-managed-worker.d.ts","sourceRoot":"","sources":["../../src/cli/workflow-managed-worker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workflow-managed-worker.d.ts","sourceRoot":"","sources":["../../src/cli/workflow-managed-worker.ts"],"names":[],"mappings":"AAyDA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA4NpD"}
|
|
@@ -13,6 +13,7 @@ import { executeProviderAction, WorkflowActionError, } from '../workflows/action
|
|
|
13
13
|
import { envNameForCredentialRef } from '../workflows/action-provider-utils.js';
|
|
14
14
|
import { sanitizeActionInput } from '../workflows/action-digest.js';
|
|
15
15
|
import { approvalActor, approvalExecutionGrant, approvalFeedback, approvalExpectedActionDigest, approvalMessage, capabilityPayload, dataFrom, localRunToSyncPayload, progressSyncEveryMs, readRun, } from './workflow-managed-worker-format.js';
|
|
16
|
+
import { acquireWorkerProcessLock } from './worker-process-lock.js';
|
|
16
17
|
export async function workflowWorker() {
|
|
17
18
|
if (hasFlag('help') || getArgs().includes('-h')) {
|
|
18
19
|
console.log(workflowWorkerUsage());
|
|
@@ -63,6 +64,7 @@ export async function workflowWorker() {
|
|
|
63
64
|
failed: 0,
|
|
64
65
|
};
|
|
65
66
|
let failed = false;
|
|
67
|
+
const processLock = options.once ? undefined : acquireWorkerProcessLock(options);
|
|
66
68
|
try {
|
|
67
69
|
do {
|
|
68
70
|
await heartbeat(options, 'online', 'idle');
|
|
@@ -91,7 +93,37 @@ export async function workflowWorker() {
|
|
|
91
93
|
continue;
|
|
92
94
|
}
|
|
93
95
|
stats.claimed += 1;
|
|
94
|
-
|
|
96
|
+
if (assignment.status === 'canceled') {
|
|
97
|
+
const canceledRun = assignmentCanceledBeforeStartRun(assignment);
|
|
98
|
+
clearRunCredentialMaterial(assignment.id);
|
|
99
|
+
await syncLocalRun(options, assignment.id, canceledRun, assignment.assignment_claim_token);
|
|
100
|
+
stats.failed += 1;
|
|
101
|
+
if (options.once ||
|
|
102
|
+
(options.maxRuns !== undefined && totalClaimed(stats) >= options.maxRuns)) {
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
let localRun;
|
|
108
|
+
try {
|
|
109
|
+
localRun = await runAssignmentLocally(options, assignment);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
stats.failed += 1;
|
|
113
|
+
const failureRun = assignmentExecutionFailureRun(assignment, error);
|
|
114
|
+
clearRunCredentialMaterial(assignment.id);
|
|
115
|
+
try {
|
|
116
|
+
await syncLocalRun(options, assignment.id, failureRun, assignment.assignment_claim_token);
|
|
117
|
+
}
|
|
118
|
+
catch (syncError) {
|
|
119
|
+
throw new Error(`Worker failed assignment ${assignment.id} before local run start (${errorMessage(error)}) and could not sync the failure (${errorMessage(syncError)}).`);
|
|
120
|
+
}
|
|
121
|
+
if (options.once ||
|
|
122
|
+
(options.maxRuns !== undefined && totalClaimed(stats) >= options.maxRuns)) {
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
95
127
|
if (localRun.status === 'blocked' && !options.once) {
|
|
96
128
|
const approved = await approvedNodeForAssignment(options, assignment.id, assignment.assignment_claim_token, localRun.id);
|
|
97
129
|
if (approved) {
|
|
@@ -112,7 +144,21 @@ export async function workflowWorker() {
|
|
|
112
144
|
continue;
|
|
113
145
|
}
|
|
114
146
|
}
|
|
115
|
-
|
|
147
|
+
let synced;
|
|
148
|
+
try {
|
|
149
|
+
synced = await syncLocalRun(options, assignment.id, localRun, assignment.assignment_claim_token);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
if (localRun.status === 'canceled' && isPlatformAccessDenied(error)) {
|
|
153
|
+
stats.failed += 1;
|
|
154
|
+
if (options.once ||
|
|
155
|
+
(options.maxRuns !== undefined && totalClaimed(stats) >= options.maxRuns)) {
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
throw error;
|
|
161
|
+
}
|
|
116
162
|
if (synced.status === 'blocked') {
|
|
117
163
|
stats.blocked += 1;
|
|
118
164
|
if (!options.once) {
|
|
@@ -139,6 +185,7 @@ export async function workflowWorker() {
|
|
|
139
185
|
throw error;
|
|
140
186
|
}
|
|
141
187
|
finally {
|
|
188
|
+
processLock?.release();
|
|
142
189
|
await safeHeartbeat(options, 'offline', failed ? 'degraded' : 'offline');
|
|
143
190
|
}
|
|
144
191
|
if (isJsonMode()) {
|
|
@@ -189,6 +236,9 @@ async function syncDaemonModelCapabilities(options) {
|
|
|
189
236
|
if (allModels.length === 0) {
|
|
190
237
|
return;
|
|
191
238
|
}
|
|
239
|
+
if (options.capabilities.agents.length === 0) {
|
|
240
|
+
options.capabilities.agents = Object.keys(catalog);
|
|
241
|
+
}
|
|
192
242
|
options.capabilities.models = allModels;
|
|
193
243
|
options.capabilities.agentModels = catalog;
|
|
194
244
|
}
|
|
@@ -931,7 +981,16 @@ async function runAssignmentLocally(options, assignment) {
|
|
|
931
981
|
if (existingRun) {
|
|
932
982
|
if (existingRun.status === 'running' || existingRun.status === 'queued') {
|
|
933
983
|
const completed = await pollLocalRun(existingRun.id, async (run) => {
|
|
934
|
-
|
|
984
|
+
try {
|
|
985
|
+
await syncLocalRun(options, assignment.id, run, assignment.assignment_claim_token);
|
|
986
|
+
}
|
|
987
|
+
catch (error) {
|
|
988
|
+
if (isPlatformAccessDenied(error)) {
|
|
989
|
+
return cancelLocalRun(existingRun.id);
|
|
990
|
+
}
|
|
991
|
+
throw error;
|
|
992
|
+
}
|
|
993
|
+
return cancelLocalRunIfAssignmentCanceled(options, assignment.id, existingRun.id, assignment.assignment_claim_token);
|
|
935
994
|
}, progressSyncEveryMs(options.leaseSeconds));
|
|
936
995
|
if (terminalRunStatus(completed.status)) {
|
|
937
996
|
clearRunCredentialMaterial(assignment.id);
|
|
@@ -971,7 +1030,16 @@ async function runAssignmentLocally(options, assignment) {
|
|
|
971
1030
|
});
|
|
972
1031
|
const runId = readRun(started).id;
|
|
973
1032
|
const completed = await pollLocalRun(runId, async (run) => {
|
|
974
|
-
|
|
1033
|
+
try {
|
|
1034
|
+
await syncLocalRun(options, assignment.id, run, assignment.assignment_claim_token);
|
|
1035
|
+
}
|
|
1036
|
+
catch (error) {
|
|
1037
|
+
if (isPlatformAccessDenied(error)) {
|
|
1038
|
+
return cancelLocalRun(runId);
|
|
1039
|
+
}
|
|
1040
|
+
throw error;
|
|
1041
|
+
}
|
|
1042
|
+
return cancelLocalRunIfAssignmentCanceled(options, assignment.id, runId, assignment.assignment_claim_token);
|
|
975
1043
|
}, progressSyncEveryMs(options.leaseSeconds));
|
|
976
1044
|
if (terminalRunStatus(completed.status)) {
|
|
977
1045
|
clearRunCredentialMaterial(assignment.id);
|
|
@@ -1053,6 +1121,124 @@ function missingLocalStateRun(assignment) {
|
|
|
1053
1121
|
error: message,
|
|
1054
1122
|
};
|
|
1055
1123
|
}
|
|
1124
|
+
function assignmentExecutionFailureRun(assignment, error) {
|
|
1125
|
+
const now = Date.now();
|
|
1126
|
+
const runtimeRunId = `assignment-start-failed-${assignment.id}`;
|
|
1127
|
+
const message = `Worker failed before it could start or resume the local workflow run: ${errorMessage(error)}`;
|
|
1128
|
+
return {
|
|
1129
|
+
id: runtimeRunId,
|
|
1130
|
+
workflowName: 'managed-assignment-start-failure',
|
|
1131
|
+
sourceType: 'viewport_snapshot',
|
|
1132
|
+
sourcePath: assignment.source_ref ?? `viewport://managed-executor/${assignment.id}`,
|
|
1133
|
+
digest: `managed-assignment-start-failure:${assignment.id}`,
|
|
1134
|
+
schema: 'viewport.workflow/v1',
|
|
1135
|
+
yamlSnapshot: assignment.yaml_snapshot ?? '',
|
|
1136
|
+
directoryId: 'managed-assignment-start-failure',
|
|
1137
|
+
directoryPath: assignment.directory_path ?? process.cwd(),
|
|
1138
|
+
resourceId: undefined,
|
|
1139
|
+
runtimeTargetId: assignment.runtime_target_id ?? undefined,
|
|
1140
|
+
platformRunId: assignment.id,
|
|
1141
|
+
machineId: 'managed-executor',
|
|
1142
|
+
dataCapturePolicy: {
|
|
1143
|
+
transcripts: assignment.data_capture_policy?.transcripts ?? 'none',
|
|
1144
|
+
logs: assignment.data_capture_policy?.logs ?? 'metadata',
|
|
1145
|
+
artifacts: assignment.data_capture_policy?.artifacts ?? 'metadata',
|
|
1146
|
+
},
|
|
1147
|
+
initiation: 'cli',
|
|
1148
|
+
status: 'failed',
|
|
1149
|
+
inputs: assignment.input_snapshot ?? {},
|
|
1150
|
+
preflight: {
|
|
1151
|
+
ok: false,
|
|
1152
|
+
issues: [
|
|
1153
|
+
{
|
|
1154
|
+
kind: 'node',
|
|
1155
|
+
name: 'managed-assignment-start-failure',
|
|
1156
|
+
message,
|
|
1157
|
+
},
|
|
1158
|
+
],
|
|
1159
|
+
},
|
|
1160
|
+
nodes: {},
|
|
1161
|
+
artifacts: [],
|
|
1162
|
+
events: [
|
|
1163
|
+
{
|
|
1164
|
+
id: 'managed-assignment-start-failure',
|
|
1165
|
+
runId: runtimeRunId,
|
|
1166
|
+
timestamp: now,
|
|
1167
|
+
type: 'run-failed',
|
|
1168
|
+
message,
|
|
1169
|
+
data: {
|
|
1170
|
+
platform_run_id: assignment.id,
|
|
1171
|
+
runtime_run_id: runtimeRunId,
|
|
1172
|
+
recovery_policy: 'sync_failed_assignment_start',
|
|
1173
|
+
},
|
|
1174
|
+
},
|
|
1175
|
+
],
|
|
1176
|
+
createdAt: now,
|
|
1177
|
+
startedAt: now,
|
|
1178
|
+
updatedAt: now,
|
|
1179
|
+
completedAt: now,
|
|
1180
|
+
error: message,
|
|
1181
|
+
};
|
|
1182
|
+
}
|
|
1183
|
+
function assignmentCanceledBeforeStartRun(assignment) {
|
|
1184
|
+
const now = Date.now();
|
|
1185
|
+
const runtimeRunId = `assignment-canceled-before-start-${assignment.id}`;
|
|
1186
|
+
const message = 'Managed workflow assignment was canceled before local execution started.';
|
|
1187
|
+
return {
|
|
1188
|
+
id: runtimeRunId,
|
|
1189
|
+
workflowName: 'managed-assignment-canceled',
|
|
1190
|
+
sourceType: 'viewport_snapshot',
|
|
1191
|
+
sourcePath: assignment.source_ref ?? `viewport://managed-executor/${assignment.id}`,
|
|
1192
|
+
digest: `managed-assignment-canceled:${assignment.id}`,
|
|
1193
|
+
schema: 'viewport.workflow/v1',
|
|
1194
|
+
yamlSnapshot: assignment.yaml_snapshot ?? '',
|
|
1195
|
+
directoryId: 'managed-assignment-canceled',
|
|
1196
|
+
directoryPath: assignment.directory_path ?? process.cwd(),
|
|
1197
|
+
resourceId: undefined,
|
|
1198
|
+
runtimeTargetId: assignment.runtime_target_id ?? undefined,
|
|
1199
|
+
platformRunId: assignment.id,
|
|
1200
|
+
machineId: 'managed-executor',
|
|
1201
|
+
dataCapturePolicy: {
|
|
1202
|
+
transcripts: assignment.data_capture_policy?.transcripts ?? 'none',
|
|
1203
|
+
logs: assignment.data_capture_policy?.logs ?? 'metadata',
|
|
1204
|
+
artifacts: assignment.data_capture_policy?.artifacts ?? 'metadata',
|
|
1205
|
+
},
|
|
1206
|
+
initiation: 'cli',
|
|
1207
|
+
status: 'canceled',
|
|
1208
|
+
inputs: assignment.input_snapshot ?? {},
|
|
1209
|
+
preflight: {
|
|
1210
|
+
ok: false,
|
|
1211
|
+
issues: [
|
|
1212
|
+
{
|
|
1213
|
+
kind: 'node',
|
|
1214
|
+
name: 'managed-assignment-canceled',
|
|
1215
|
+
message,
|
|
1216
|
+
},
|
|
1217
|
+
],
|
|
1218
|
+
},
|
|
1219
|
+
nodes: {},
|
|
1220
|
+
artifacts: [],
|
|
1221
|
+
events: [
|
|
1222
|
+
{
|
|
1223
|
+
id: 'managed-assignment-canceled-before-start',
|
|
1224
|
+
runId: runtimeRunId,
|
|
1225
|
+
timestamp: now,
|
|
1226
|
+
type: 'run-canceled',
|
|
1227
|
+
message,
|
|
1228
|
+
data: {
|
|
1229
|
+
platform_run_id: assignment.id,
|
|
1230
|
+
runtime_run_id: runtimeRunId,
|
|
1231
|
+
recovery_policy: 'skip_local_execution_for_canceled_assignment',
|
|
1232
|
+
},
|
|
1233
|
+
},
|
|
1234
|
+
],
|
|
1235
|
+
createdAt: now,
|
|
1236
|
+
startedAt: now,
|
|
1237
|
+
updatedAt: now,
|
|
1238
|
+
completedAt: now,
|
|
1239
|
+
error: message,
|
|
1240
|
+
};
|
|
1241
|
+
}
|
|
1056
1242
|
function recordChildValue(value, key) {
|
|
1057
1243
|
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
1058
1244
|
return undefined;
|
|
@@ -1227,9 +1413,13 @@ async function materializeCredential(options, assignment, handle) {
|
|
|
1227
1413
|
return data;
|
|
1228
1414
|
}
|
|
1229
1415
|
function repositoryForCredentialMaterialization(assignment, handle) {
|
|
1230
|
-
const
|
|
1231
|
-
if (
|
|
1232
|
-
return { repository:
|
|
1416
|
+
const actionRepositories = repositoriesFromActionCredentialRef(assignment, handle);
|
|
1417
|
+
if (actionRepositories.length === 1 && actionRepositories[0]) {
|
|
1418
|
+
return { repository: actionRepositories[0] };
|
|
1419
|
+
}
|
|
1420
|
+
if (actionRepositories.length > 1) {
|
|
1421
|
+
return { repositories: actionRepositories };
|
|
1422
|
+
}
|
|
1233
1423
|
const checkoutEntries = [
|
|
1234
1424
|
...credentialEntriesFrom(pathValue(asRecord(assignment.execution_profile_snapshot), ['credentials', 'repo_checkout'])),
|
|
1235
1425
|
...credentialEntriesFrom(pathValue(asRecord(assignment.workflow_snapshot), ['credentials', 'repo_checkout'])),
|
|
@@ -1349,11 +1539,12 @@ function actionCredentialRefs(nodes) {
|
|
|
1349
1539
|
return credentialRef ? [credentialRef] : [];
|
|
1350
1540
|
});
|
|
1351
1541
|
}
|
|
1352
|
-
function
|
|
1542
|
+
function repositoriesFromActionCredentialRef(assignment, handle) {
|
|
1353
1543
|
const workflow = yamlSnapshotDocument(assignment);
|
|
1354
1544
|
const nodes = isRecord(workflow) ? workflow['nodes'] : undefined;
|
|
1355
1545
|
if (!isRecord(nodes))
|
|
1356
|
-
return
|
|
1546
|
+
return [];
|
|
1547
|
+
const repositories = new Set();
|
|
1357
1548
|
for (const node of Object.values(nodes)) {
|
|
1358
1549
|
if (!isRecord(node) || stringField(node, 'type') !== 'action')
|
|
1359
1550
|
continue;
|
|
@@ -1364,9 +1555,9 @@ function repositoryFromActionCredentialRef(assignment, handle) {
|
|
|
1364
1555
|
const repository = stringField(withValue, 'repository') ?? stringField(withValue, 'repo');
|
|
1365
1556
|
const rendered = renderCredentialTemplate(repository, assignment);
|
|
1366
1557
|
if (rendered)
|
|
1367
|
-
|
|
1558
|
+
repositories.add(rendered);
|
|
1368
1559
|
}
|
|
1369
|
-
return
|
|
1560
|
+
return [...repositories].sort();
|
|
1370
1561
|
}
|
|
1371
1562
|
function renderCredentialTemplate(value, assignment) {
|
|
1372
1563
|
if (!value)
|
|
@@ -1454,11 +1645,7 @@ async function waitForApprovalAndResume(options, platformRunId, localRunId, assi
|
|
|
1454
1645
|
}
|
|
1455
1646
|
}
|
|
1456
1647
|
if (assignment.status === 'canceled' || assignment.status === 'failed') {
|
|
1457
|
-
const
|
|
1458
|
-
message: 'Managed workflow assignment was canceled from Viewport.',
|
|
1459
|
-
actor: { name: 'Viewport', source: 'managed-executor' },
|
|
1460
|
-
});
|
|
1461
|
-
const run = readRun(canceled);
|
|
1648
|
+
const run = await cancelLocalRun(localRunId);
|
|
1462
1649
|
await syncLocalRun(options, platformRunId, run, assignmentClaimToken);
|
|
1463
1650
|
return run;
|
|
1464
1651
|
}
|
|
@@ -1469,6 +1656,19 @@ async function waitForApprovalAndResume(options, platformRunId, localRunId, assi
|
|
|
1469
1656
|
await delay(options.commandSleepSeconds * 1000);
|
|
1470
1657
|
}
|
|
1471
1658
|
}
|
|
1659
|
+
async function cancelLocalRunIfAssignmentCanceled(options, platformRunId, localRunId, assignmentClaimToken) {
|
|
1660
|
+
const assignment = await getAssignment(options, platformRunId, assignmentClaimToken);
|
|
1661
|
+
if (assignment.status !== 'canceled' && assignment.status !== 'failed')
|
|
1662
|
+
return undefined;
|
|
1663
|
+
return cancelLocalRun(localRunId);
|
|
1664
|
+
}
|
|
1665
|
+
async function cancelLocalRun(localRunId) {
|
|
1666
|
+
const canceled = await daemonJson('POST', `/api/workflows/runs/${encodeURIComponent(localRunId)}/cancel`, {
|
|
1667
|
+
message: 'Managed workflow assignment was canceled from Viewport.',
|
|
1668
|
+
actor: { name: 'Viewport', source: 'managed-executor' },
|
|
1669
|
+
});
|
|
1670
|
+
return readRun(canceled);
|
|
1671
|
+
}
|
|
1472
1672
|
async function applyBrokerActionCompletedCommands(options, platformRunId, assignment, localRunId, assignmentClaimToken) {
|
|
1473
1673
|
const localRun = await readExistingLocalRun(localRunId);
|
|
1474
1674
|
const commands = (assignment.runtime_commands ?? []).filter((command) => command['type'] === 'workflow.action_completed' &&
|
|
@@ -1581,7 +1781,7 @@ async function resumeApprovedLocalRun(options, platformRunId, localRunId, approv
|
|
|
1581
1781
|
});
|
|
1582
1782
|
}
|
|
1583
1783
|
catch (error) {
|
|
1584
|
-
if (!
|
|
1784
|
+
if (!isNonFatalApprovalResumeError(error))
|
|
1585
1785
|
throw error;
|
|
1586
1786
|
const current = await readExistingLocalRun(localRunId);
|
|
1587
1787
|
if (!current)
|
|
@@ -1657,9 +1857,10 @@ function assignmentWorkflowAuthorityContracts(assignment) {
|
|
|
1657
1857
|
recordChildValue(recordChildValue(asRecord(assignment.input_snapshot), 'viewport'), 'workflowAuthorityContract'),
|
|
1658
1858
|
].filter(isRecord);
|
|
1659
1859
|
}
|
|
1660
|
-
function
|
|
1860
|
+
function isNonFatalApprovalResumeError(error) {
|
|
1661
1861
|
const message = error instanceof Error ? error.message : String(error);
|
|
1662
|
-
return message.includes('Workflow node is not awaiting approval')
|
|
1862
|
+
return (message.includes('Workflow node is not awaiting approval') ||
|
|
1863
|
+
message.includes('The proposed action changed before approval'));
|
|
1663
1864
|
}
|
|
1664
1865
|
function isResolvedManagedGateNode(node) {
|
|
1665
1866
|
if (!['approval', 'gate', 'plan'].includes(String(node.type ?? '')))
|
|
@@ -1722,6 +1923,7 @@ async function ensureDirectory(directoryPath) {
|
|
|
1722
1923
|
const existing = directories.find((directory) => directory.path === resolvedPath);
|
|
1723
1924
|
if (existing)
|
|
1724
1925
|
return existing;
|
|
1926
|
+
await fs.promises.mkdir(resolvedPath, { recursive: true, mode: 0o700 });
|
|
1725
1927
|
const created = (await daemonJson('POST', '/api/directories', { path: resolvedPath }));
|
|
1726
1928
|
if (!created.id)
|
|
1727
1929
|
throw new Error(`Failed to register workflow worker directory: ${resolvedPath}`);
|
|
@@ -1735,12 +1937,25 @@ async function pollLocalRun(runId, onProgress, progressEveryMs = 30_000) {
|
|
|
1735
1937
|
if (['completed', 'failed', 'blocked', 'canceled'].includes(run.status))
|
|
1736
1938
|
return run;
|
|
1737
1939
|
if (onProgress && Date.now() >= nextProgressAt) {
|
|
1738
|
-
await onProgress(run);
|
|
1940
|
+
const progressRun = await onProgress(run);
|
|
1941
|
+
if (progressRun)
|
|
1942
|
+
return progressRun;
|
|
1739
1943
|
nextProgressAt = Date.now() + progressEveryMs;
|
|
1740
1944
|
}
|
|
1741
1945
|
await delay(500);
|
|
1742
1946
|
}
|
|
1743
1947
|
}
|
|
1948
|
+
class PlatformRequestError extends Error {
|
|
1949
|
+
status;
|
|
1950
|
+
constructor(status, message) {
|
|
1951
|
+
super(message);
|
|
1952
|
+
this.status = status;
|
|
1953
|
+
this.name = 'PlatformRequestError';
|
|
1954
|
+
}
|
|
1955
|
+
}
|
|
1956
|
+
function isPlatformAccessDenied(error) {
|
|
1957
|
+
return error instanceof PlatformRequestError && [401, 402, 403, 404].includes(error.status);
|
|
1958
|
+
}
|
|
1744
1959
|
async function daemonJson(method, urlPath, body) {
|
|
1745
1960
|
const response = await daemonFetch(urlPath, {
|
|
1746
1961
|
method,
|
|
@@ -1777,7 +1992,7 @@ async function platformFetch(options, method, pathSuffix, body, assignmentClaimT
|
|
|
1777
1992
|
tlsPins: parseCsvList(process.env['VPD_SERVER_TLS_PINS']),
|
|
1778
1993
|
});
|
|
1779
1994
|
if (!response.ok && response.status !== 204) {
|
|
1780
|
-
throw new
|
|
1995
|
+
throw new PlatformRequestError(response.status, `Platform request failed: HTTP ${response.status} ${await response.text()}`);
|
|
1781
1996
|
}
|
|
1782
1997
|
return response;
|
|
1783
1998
|
}
|