@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.
Files changed (123) hide show
  1. package/dist/cli/check-command.d.ts +2 -0
  2. package/dist/cli/check-command.d.ts.map +1 -0
  3. package/dist/cli/check-command.js +168 -0
  4. package/dist/cli/check-command.js.map +1 -0
  5. package/dist/cli/commands.d.ts +2 -0
  6. package/dist/cli/commands.d.ts.map +1 -1
  7. package/dist/cli/commands.js +2 -0
  8. package/dist/cli/commands.js.map +1 -1
  9. package/dist/cli/diagnostic-command.d.ts +2 -0
  10. package/dist/cli/diagnostic-command.d.ts.map +1 -0
  11. package/dist/cli/diagnostic-command.js +102 -0
  12. package/dist/cli/diagnostic-command.js.map +1 -0
  13. package/dist/cli/lifecycle-commands.d.ts.map +1 -1
  14. package/dist/cli/lifecycle-commands.js +2 -1
  15. package/dist/cli/lifecycle-commands.js.map +1 -1
  16. package/dist/cli/lifecycle-pair-command.d.ts.map +1 -1
  17. package/dist/cli/lifecycle-pair-command.js +31 -0
  18. package/dist/cli/lifecycle-pair-command.js.map +1 -1
  19. package/dist/cli/policy-schema-validator.d.ts +221 -0
  20. package/dist/cli/policy-schema-validator.d.ts.map +1 -0
  21. package/dist/cli/policy-schema-validator.js +280 -0
  22. package/dist/cli/policy-schema-validator.js.map +1 -0
  23. package/dist/cli/support-packet.d.ts +7 -0
  24. package/dist/cli/support-packet.d.ts.map +1 -0
  25. package/dist/cli/support-packet.js +19 -0
  26. package/dist/cli/support-packet.js.map +1 -0
  27. package/dist/cli/worker-command.d.ts.map +1 -1
  28. package/dist/cli/worker-command.js +367 -14
  29. package/dist/cli/worker-command.js.map +1 -1
  30. package/dist/cli/worker-process-lock.d.ts +27 -0
  31. package/dist/cli/worker-process-lock.d.ts.map +1 -0
  32. package/dist/cli/worker-process-lock.js +150 -0
  33. package/dist/cli/worker-process-lock.js.map +1 -0
  34. package/dist/cli/worker-profile.d.ts +20 -0
  35. package/dist/cli/worker-profile.d.ts.map +1 -1
  36. package/dist/cli/worker-profile.js +38 -0
  37. package/dist/cli/worker-profile.js.map +1 -1
  38. package/dist/cli/worker-runtime.d.ts +2 -1
  39. package/dist/cli/worker-runtime.d.ts.map +1 -1
  40. package/dist/cli/worker-runtime.js +282 -88
  41. package/dist/cli/worker-runtime.js.map +1 -1
  42. package/dist/cli/workflow-managed-worker-format.d.ts.map +1 -1
  43. package/dist/cli/workflow-managed-worker-format.js +3 -1
  44. package/dist/cli/workflow-managed-worker-format.js.map +1 -1
  45. package/dist/cli/workflow-managed-worker.d.ts.map +1 -1
  46. package/dist/cli/workflow-managed-worker.js +236 -21
  47. package/dist/cli/workflow-managed-worker.js.map +1 -1
  48. package/dist/core/logger.d.ts.map +1 -1
  49. package/dist/core/logger.js +6 -0
  50. package/dist/core/logger.js.map +1 -1
  51. package/dist/core/output.d.ts.map +1 -1
  52. package/dist/core/output.js +5 -4
  53. package/dist/core/output.js.map +1 -1
  54. package/dist/core/redaction.d.ts +4 -0
  55. package/dist/core/redaction.d.ts.map +1 -0
  56. package/dist/core/redaction.js +76 -0
  57. package/dist/core/redaction.js.map +1 -0
  58. package/dist/index.d.ts +2 -0
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +5 -1
  61. package/dist/index.js.map +1 -1
  62. package/dist/workflows/action-provider-adapters.js +52 -4
  63. package/dist/workflows/action-provider-adapters.js.map +1 -1
  64. package/dist/workflows/checkout-node.d.ts +1 -0
  65. package/dist/workflows/checkout-node.d.ts.map +1 -1
  66. package/dist/workflows/checkout-node.js +9 -4
  67. package/dist/workflows/checkout-node.js.map +1 -1
  68. package/dist/workflows/event-types.d.ts +1 -1
  69. package/dist/workflows/event-types.d.ts.map +1 -1
  70. package/dist/workflows/git-publish-node.d.ts +20 -0
  71. package/dist/workflows/git-publish-node.d.ts.map +1 -1
  72. package/dist/workflows/git-publish-node.js +87 -3
  73. package/dist/workflows/git-publish-node.js.map +1 -1
  74. package/dist/workflows/node-executor.d.ts +6 -0
  75. package/dist/workflows/node-executor.d.ts.map +1 -1
  76. package/dist/workflows/node-executor.js +53 -2
  77. package/dist/workflows/node-executor.js.map +1 -1
  78. package/dist/workflows/node-registry.d.ts +2 -2
  79. package/dist/workflows/node-registry.d.ts.map +1 -1
  80. package/dist/workflows/node-registry.js +129 -5
  81. package/dist/workflows/node-registry.js.map +1 -1
  82. package/dist/workflows/parser.d.ts.map +1 -1
  83. package/dist/workflows/parser.js +17 -1
  84. package/dist/workflows/parser.js.map +1 -1
  85. package/dist/workflows/platform-command-applier.d.ts +4 -0
  86. package/dist/workflows/platform-command-applier.d.ts.map +1 -1
  87. package/dist/workflows/platform-command-applier.js +152 -1
  88. package/dist/workflows/platform-command-applier.js.map +1 -1
  89. package/dist/workflows/platform-runtime-command.d.ts +2 -0
  90. package/dist/workflows/platform-runtime-command.d.ts.map +1 -1
  91. package/dist/workflows/platform-runtime-command.js +2 -0
  92. package/dist/workflows/platform-runtime-command.js.map +1 -1
  93. package/dist/workflows/platform-sync-payload.js +18 -4
  94. package/dist/workflows/platform-sync-payload.js.map +1 -1
  95. package/dist/workflows/platform-sync.js +7 -2
  96. package/dist/workflows/platform-sync.js.map +1 -1
  97. package/dist/workflows/policy-enforcement.d.ts +43 -0
  98. package/dist/workflows/policy-enforcement.d.ts.map +1 -0
  99. package/dist/workflows/policy-enforcement.js +0 -0
  100. package/dist/workflows/policy-enforcement.js.map +1 -0
  101. package/dist/workflows/run-types.d.ts +1 -0
  102. package/dist/workflows/run-types.d.ts.map +1 -1
  103. package/dist/workflows/runner.d.ts +4 -1
  104. package/dist/workflows/runner.d.ts.map +1 -1
  105. package/dist/workflows/runner.js +46 -12
  106. package/dist/workflows/runner.js.map +1 -1
  107. package/dist/workflows/types.d.ts +33 -0
  108. package/dist/workflows/types.d.ts.map +1 -1
  109. package/dist/workflows/workflow-authority-contract.d.ts +1 -1
  110. package/dist/workflows/workflow-authority-contract.d.ts.map +1 -1
  111. package/dist/workflows/workflow-authority-contract.js +23 -0
  112. package/dist/workflows/workflow-authority-contract.js.map +1 -1
  113. package/dist/workflows/workflow-production-schema.d.ts +13 -0
  114. package/dist/workflows/workflow-production-schema.d.ts.map +1 -1
  115. package/dist/workflows/workflow-production-schema.js +26 -0
  116. package/dist/workflows/workflow-production-schema.js.map +1 -1
  117. package/dist/workflows/workflow-production-types.d.ts +6 -0
  118. package/dist/workflows/workflow-production-types.d.ts.map +1 -1
  119. package/dist/workflows/workflow-schema.d.ts +50 -0
  120. package/dist/workflows/workflow-schema.d.ts.map +1 -1
  121. package/dist/workflows/workflow-schema.js +41 -0
  122. package/dist/workflows/workflow-schema.js.map +1 -1
  123. 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.actionDigest;
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":"AAwDA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAsKpD"}
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
- const localRun = await runAssignmentLocally(options, assignment);
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
- const synced = await syncLocalRun(options, assignment.id, localRun, assignment.assignment_claim_token);
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
- await syncLocalRun(options, assignment.id, run, assignment.assignment_claim_token);
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
- await syncLocalRun(options, assignment.id, run, assignment.assignment_claim_token);
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 actionRepository = repositoryFromActionCredentialRef(assignment, handle);
1231
- if (actionRepository)
1232
- return { repository: actionRepository };
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 repositoryFromActionCredentialRef(assignment, handle) {
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 null;
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
- return rendered;
1558
+ repositories.add(rendered);
1368
1559
  }
1369
- return null;
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 canceled = await daemonJson('POST', `/api/workflows/runs/${encodeURIComponent(localRunId)}/cancel`, {
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 (!isAlreadyResolvedApprovalError(error))
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 isAlreadyResolvedApprovalError(error) {
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 Error(`Platform request failed: HTTP ${response.status} ${await response.text()}`);
1995
+ throw new PlatformRequestError(response.status, `Platform request failed: HTTP ${response.status} ${await response.text()}`);
1781
1996
  }
1782
1997
  return response;
1783
1998
  }