@skaile/workspaces 3.1.0 → 3.2.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.
Files changed (114) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +5 -1
  3. package/dist/{asset-feeds-3XCKB542.js → asset-feeds-25DVAGVD.js} +4 -4
  4. package/dist/{asset-feeds-3XCKB542.js.map → asset-feeds-25DVAGVD.js.map} +1 -1
  5. package/dist/asset-manager/index.js +1 -1
  6. package/dist/{chunk-VBMY3VCW.js → chunk-3IGXVTOS.js} +3 -3
  7. package/dist/{chunk-VBMY3VCW.js.map → chunk-3IGXVTOS.js.map} +1 -1
  8. package/dist/{chunk-5QGMEPUX.js → chunk-B4J6TV4G.js} +21 -5
  9. package/dist/chunk-B4J6TV4G.js.map +1 -0
  10. package/dist/{chunk-ZGTM4BOU.js → chunk-CO4DNTIL.js} +2 -2
  11. package/dist/{chunk-ZGTM4BOU.js.map → chunk-CO4DNTIL.js.map} +1 -1
  12. package/dist/{chunk-PUEHYNBT.js → chunk-CTCCFKZV.js} +3 -3
  13. package/dist/{chunk-PUEHYNBT.js.map → chunk-CTCCFKZV.js.map} +1 -1
  14. package/dist/{chunk-HNR2IT34.js → chunk-DEW2G3QZ.js} +8 -8
  15. package/dist/{chunk-HNR2IT34.js.map → chunk-DEW2G3QZ.js.map} +1 -1
  16. package/dist/{chunk-BENN6MO4.js → chunk-DPFSO4T2.js} +4 -4
  17. package/dist/{chunk-BENN6MO4.js.map → chunk-DPFSO4T2.js.map} +1 -1
  18. package/dist/{chunk-S5FV6ISY.js → chunk-EYBGQJNF.js} +26 -6
  19. package/dist/chunk-EYBGQJNF.js.map +1 -0
  20. package/dist/{chunk-PT2ZUW2E.js → chunk-F5YPDCN6.js} +2 -2
  21. package/dist/{chunk-PT2ZUW2E.js.map → chunk-F5YPDCN6.js.map} +1 -1
  22. package/dist/{chunk-7KFN2EPR.js → chunk-FLBDLF3I.js} +4 -4
  23. package/dist/{chunk-7KFN2EPR.js.map → chunk-FLBDLF3I.js.map} +1 -1
  24. package/dist/{chunk-N4GFUWWC.js → chunk-HNBWU5RA.js} +3 -3
  25. package/dist/{chunk-N4GFUWWC.js.map → chunk-HNBWU5RA.js.map} +1 -1
  26. package/dist/{chunk-MJ6EME7A.js → chunk-IMA5H7AG.js} +6 -6
  27. package/dist/{chunk-MJ6EME7A.js.map → chunk-IMA5H7AG.js.map} +1 -1
  28. package/dist/{chunk-TARN55L3.js → chunk-K5OKE4G2.js} +6 -6
  29. package/dist/{chunk-TARN55L3.js.map → chunk-K5OKE4G2.js.map} +1 -1
  30. package/dist/{chunk-H26KDA7J.js → chunk-RW4I42MW.js} +71 -34
  31. package/dist/chunk-RW4I42MW.js.map +1 -0
  32. package/dist/{chunk-7HXS7WZF.js → chunk-ST4RC2JF.js} +2 -2
  33. package/dist/{chunk-7HXS7WZF.js.map → chunk-ST4RC2JF.js.map} +1 -1
  34. package/dist/{chunk-X73AMPOT.js → chunk-XL7ZDZ4O.js} +5 -5
  35. package/dist/{chunk-X73AMPOT.js.map → chunk-XL7ZDZ4O.js.map} +1 -1
  36. package/dist/cli/index.js +30 -30
  37. package/dist/connectors/index.js +4 -4
  38. package/dist/{ensure-sources-AST427RF.js → ensure-sources-YOJ5HOCL.js} +4 -4
  39. package/dist/{ensure-sources-AST427RF.js.map → ensure-sources-YOJ5HOCL.js.map} +1 -1
  40. package/dist/factory-assets/connectors/box.js +4 -4
  41. package/dist/factory-assets/connectors/deploy.js +4 -4
  42. package/dist/factory-assets/connectors/devserver.js +4 -4
  43. package/dist/factory-assets/connectors/flow/CONNECTOR.md +26 -9
  44. package/dist/factory-assets/connectors/flow/adapter.d.ts +15 -7
  45. package/dist/factory-assets/connectors/flow/adapter.d.ts.map +1 -1
  46. package/dist/factory-assets/connectors/flow/adapter.js +4 -4
  47. package/dist/factory-assets/connectors/flow/contract/expression.d.ts +3 -1
  48. package/dist/factory-assets/connectors/flow/contract/expression.d.ts.map +1 -1
  49. package/dist/factory-assets/connectors/flow/contract/schema.d.ts.map +1 -1
  50. package/dist/factory-assets/connectors/flow/contract.js +2 -2
  51. package/dist/factory-assets/connectors/flow/engine/bindings.d.ts +12 -0
  52. package/dist/factory-assets/connectors/flow/engine/bindings.d.ts.map +1 -1
  53. package/dist/factory-assets/connectors/flow/engine/check-provenance.d.ts +13 -2
  54. package/dist/factory-assets/connectors/flow/engine/check-provenance.d.ts.map +1 -1
  55. package/dist/factory-assets/connectors/flow/engine/engine.d.ts +5 -1
  56. package/dist/factory-assets/connectors/flow/engine/engine.d.ts.map +1 -1
  57. package/dist/factory-assets/connectors/flow/engine/index.d.ts +1 -0
  58. package/dist/factory-assets/connectors/flow/engine/index.d.ts.map +1 -1
  59. package/dist/factory-assets/connectors/flow/engine/optional-failure.d.ts +24 -0
  60. package/dist/factory-assets/connectors/flow/engine/optional-failure.d.ts.map +1 -0
  61. package/dist/factory-assets/connectors/flow/engine/router-settlement.d.ts.map +1 -1
  62. package/dist/factory-assets/connectors/flow/engine/types.d.ts +3 -1
  63. package/dist/factory-assets/connectors/flow/engine/types.d.ts.map +1 -1
  64. package/dist/factory-assets/connectors/flow/engine.js +2 -2
  65. package/dist/factory-assets/connectors/flow/prompt-fragments.js +1 -1
  66. package/dist/factory-assets/connectors/flow/run-flow.js +5 -5
  67. package/dist/factory-assets/connectors/flow/sub-flow-runner.d.ts +9 -1
  68. package/dist/factory-assets/connectors/flow/sub-flow-runner.d.ts.map +1 -1
  69. package/dist/factory-assets/connectors/flow.js +4 -4
  70. package/dist/factory-assets/connectors/git.js +4 -4
  71. package/dist/factory-assets/connectors/gmail.js +4 -4
  72. package/dist/factory-assets/connectors/googledrive.js +4 -4
  73. package/dist/factory-assets/connectors/local.js +4 -4
  74. package/dist/factory-assets/connectors/mattermost.js +4 -4
  75. package/dist/factory-assets/connectors/memory.js +4 -4
  76. package/dist/factory-assets/connectors/minio.js +4 -4
  77. package/dist/factory-assets/connectors/postgres.js +4 -4
  78. package/dist/factory-assets/connectors/s3.js +4 -4
  79. package/dist/factory-assets/connectors/sharepoint.js +4 -4
  80. package/dist/factory-assets/connectors/sqlite.js +4 -4
  81. package/dist/factory-assets/connectors/static-server.js +4 -4
  82. package/dist/factory-assets/connectors/tunnel.js +4 -4
  83. package/dist/factory-assets/connectors/webdav.js +4 -4
  84. package/dist/factory-assets/connectors/xstate-store.js +4 -4
  85. package/dist/factory-assets/connectors/xstate.js +4 -4
  86. package/dist/{flows-LQSVM45J.js → flows-7KUZGZ77.js} +3 -3
  87. package/dist/{flows-LQSVM45J.js.map → flows-7KUZGZ77.js.map} +1 -1
  88. package/dist/{helpers-IZDG57TR.js → helpers-YNZ5SWNX.js} +4 -4
  89. package/dist/{helpers-IZDG57TR.js.map → helpers-YNZ5SWNX.js.map} +1 -1
  90. package/dist/{library-publish-XGJ7IOU2.js → library-publish-JBZ2TEQI.js} +8 -8
  91. package/dist/{library-publish-XGJ7IOU2.js.map → library-publish-JBZ2TEQI.js.map} +1 -1
  92. package/dist/{open-library-YDS66KLH.js → open-library-H2LAGVTM.js} +7 -7
  93. package/dist/{open-library-YDS66KLH.js.map → open-library-H2LAGVTM.js.map} +1 -1
  94. package/dist/{project-NR53RZOT.js → project-WBIYBTN3.js} +5 -5
  95. package/dist/{project-NR53RZOT.js.map → project-WBIYBTN3.js.map} +1 -1
  96. package/dist/runner/index.js +8 -8
  97. package/dist/sdk/asset-manager.js +1 -1
  98. package/dist/sdk/flow.js +2 -2
  99. package/dist/sdk/index.js +8 -8
  100. package/dist/sdk/runner.js +8 -8
  101. package/dist/{source-DDZKKQH2.js → source-UCMNKSA2.js} +8 -8
  102. package/dist/{source-DDZKKQH2.js.map → source-UCMNKSA2.js.map} +1 -1
  103. package/dist/{source-manifest-publish-OTVKHRX3.js → source-manifest-publish-BZ777MH5.js} +9 -9
  104. package/dist/{source-manifest-publish-OTVKHRX3.js.map → source-manifest-publish-BZ777MH5.js.map} +1 -1
  105. package/dist/tui/index.js +8 -8
  106. package/dist/types/src/flow.d.ts +38 -12
  107. package/dist/types/src/flow.d.ts.map +1 -1
  108. package/dist/workspace-plugin/adapters/mcp.js +1 -1
  109. package/dist/workspace-plugin/adapters/omp.js +3 -3
  110. package/dist/workspace-plugin/index.js +1 -1
  111. package/package.json +1 -1
  112. package/dist/chunk-5QGMEPUX.js.map +0 -1
  113. package/dist/chunk-H26KDA7J.js.map +0 -1
  114. package/dist/chunk-S5FV6ISY.js.map +0 -1
@@ -4,10 +4,10 @@ import { resolveModelTier } from './chunk-V34ZEXSE.js';
4
4
  import { createDriver } from './chunk-QFO4IYBZ.js';
5
5
  import { pluginRegistry } from './chunk-6E6PKKAD.js';
6
6
  import { computeStimulus } from './chunk-IFGTRL2I.js';
7
- import { getConsumedOutputSchema, validateConsumedNodeOutput, appendAttempt, remainingActiveExecutionMs, resolveNodeBindings, interpolateNodeInstruction, deriveCheckEvidence, computeFlowStateFromSnapshots, availableRouterFrontier, evaluateRouterSelection, routerSelectionOutput, planRouterSkips, unsettledRouterBranchIds, countFailedAttempts, hasAutomaticRetryBudget, persistedRouterSelection } from './chunk-S5FV6ISY.js';
8
- import { parseFlowDefinition } from './chunk-5QGMEPUX.js';
9
- import { renderSubpromptPrompt, renderStimulusPrompt } from './chunk-7KFN2EPR.js';
10
- import { deterministicNodeKindLabel, flowDefaults, isAgentNode, isGateNode, isCheckNode, nodeRequiresApproval, isSubFlowNode, isFunctionNode, isSubpromptNode, nodeIsOptional, nodeInstruction, isRouterNode, isActiveRuntimeNode, nodeLabel, nodeAssets } from './chunk-F5VREBV2.js';
7
+ import { resolveNodeBindings, getConsumedOutputSchema, validateConsumedNodeOutput, appendAttempt, resolveTerminalFailureStatus, remainingActiveExecutionMs, interpolateNodeInstruction, deriveCheckEvidence, computeFlowStateFromSnapshots, availableRouterFrontier, evaluateRouterSelection, routerSelectionOutput, planRouterSkips, unsettledRouterBranchIds, countFailedAttempts, hasAutomaticRetryBudget, persistedRouterSelection } from './chunk-EYBGQJNF.js';
8
+ import { parseFlowDefinition } from './chunk-B4J6TV4G.js';
9
+ import { renderSubpromptPrompt, renderStimulusPrompt } from './chunk-FLBDLF3I.js';
10
+ import { deterministicNodeKindLabel, flowDefaults, isAgentNode, isGateNode, isCheckNode, nodeRequiresApproval, isSubFlowNode, isFunctionNode, isSubpromptNode, nodeInstruction, isRouterNode, isActiveRuntimeNode, nodeIsOptional, nodeLabel, nodeAssets } from './chunk-F5VREBV2.js';
11
11
  import { portableSpawn } from './chunk-P43HBWKK.js';
12
12
  import { withFsDeadline, tryWithFsDeadline, FsDeadlineError, fsDeadlineMs } from './chunk-DYMWJAL4.js';
13
13
  import { createLogger } from './chunk-7GOCNYUV.js';
@@ -7640,7 +7640,8 @@ function toSnapshot(exec) {
7640
7640
  input: exec.input,
7641
7641
  output: exec.output,
7642
7642
  error: exec.error,
7643
- failedPreconditions: exec.failedPreconditions
7643
+ failedPreconditions: exec.failedPreconditions,
7644
+ inputOrigins: exec.inputOrigins
7644
7645
  };
7645
7646
  }
7646
7647
  function snapshotMap(execution) {
@@ -7687,7 +7688,10 @@ function prepareExecutionSnapshot(flowDef, execution) {
7687
7688
  output: void 0,
7688
7689
  approval: void 0,
7689
7690
  input: void 0,
7690
- error: void 0
7691
+ error: void 0,
7692
+ // Moves with `output`: the node restarts from scratch, so origins that
7693
+ // described the discarded attempt would be stale.
7694
+ inputOrigins: void 0
7691
7695
  };
7692
7696
  continue;
7693
7697
  }
@@ -7985,7 +7989,7 @@ var FlowAdapter = class extends AbstractConnector {
7985
7989
  },
7986
7990
  {
7987
7991
  name: "fail_node",
7988
- description: "Mark a node as failed. `recoverable: true` transitions back to `available` so the runner can retry; `recoverable: false` marks the node and flow as failed.",
7992
+ description: "Mark a node as failed. `recoverable: true` transitions back to `available` so the runner can retry; `recoverable: false` is terminal \u2014 an optional node becomes `skipped` so its dependents still proceed, any other node becomes `failed`.",
7989
7993
  accessLevel: "write",
7990
7994
  args: [
7991
7995
  { name: "nodeId", description: "Node ID", type: "string", required: true },
@@ -8312,17 +8316,27 @@ var FlowAdapter = class extends AbstractConnector {
8312
8316
  // ── Agent-side mutations (tool calls) ─────────────────────────────────────
8313
8317
  doStartNode(handle, nodeId) {
8314
8318
  return this.mutate(handle, (s) => {
8315
- assertLegal(
8316
- isAgentNode(findNode(s.flowDef, nodeId)),
8317
- `node is not an active agent node: ${nodeId}`
8318
- );
8319
+ const definition = findNode(s.flowDef, nodeId);
8320
+ assertLegal(isAgentNode(definition), `node is not an active agent node: ${nodeId}`);
8319
8321
  const node = s.execution.nodes[nodeId];
8320
8322
  assertLegal(node, `node not in execution: ${nodeId}`);
8321
8323
  assertLegal(node.status === "available", `cannot start ${nodeId}: status is ${node.status}`);
8324
+ let inputOrigins;
8325
+ try {
8326
+ inputOrigins = resolveNodeBindings(
8327
+ s.flowDef,
8328
+ definition,
8329
+ snapshotMap(s.execution),
8330
+ s.flowInputOrigins
8331
+ ).origins;
8332
+ } catch {
8333
+ inputOrigins = void 0;
8334
+ }
8322
8335
  s.execution.nodes[nodeId] = {
8323
8336
  ...node,
8324
8337
  status: "running",
8325
- startedAt: now()
8338
+ startedAt: now(),
8339
+ inputOrigins
8326
8340
  };
8327
8341
  return JSON.stringify({ ok: true, status: "running" });
8328
8342
  });
@@ -8435,7 +8449,7 @@ var FlowAdapter = class extends AbstractConnector {
8435
8449
  ) : execution.outputHistory;
8436
8450
  current.execution.nodes[nodeId] = {
8437
8451
  ...execution,
8438
- status: "failed",
8452
+ status: resolveTerminalFailureStatus(findNode(current.flowDef, nodeId)),
8439
8453
  completedAt,
8440
8454
  error,
8441
8455
  errorHistory: [...execution.errorHistory, error],
@@ -8538,7 +8552,7 @@ var FlowAdapter = class extends AbstractConnector {
8538
8552
  ) : node.outputHistory;
8539
8553
  s.execution.nodes[nodeId] = {
8540
8554
  ...node,
8541
- status: "failed",
8555
+ status: resolveTerminalFailureStatus(findNode(s.flowDef, nodeId)),
8542
8556
  completedAt,
8543
8557
  error,
8544
8558
  errorHistory: [...node.errorHistory, error],
@@ -8606,7 +8620,7 @@ var FlowAdapter = class extends AbstractConnector {
8606
8620
  } else if (isCheckNode(definition)) {
8607
8621
  s.execution.nodes[nodeId] = {
8608
8622
  ...node,
8609
- status: "failed",
8623
+ status: resolveTerminalFailureStatus(definition),
8610
8624
  completedAt: now(),
8611
8625
  approval,
8612
8626
  approvalHistory: history
@@ -8660,11 +8674,21 @@ var FlowAdapter = class extends AbstractConnector {
8660
8674
  * Transition a recoverable failed node back to `available` for retry.
8661
8675
  * Preserves the failure in `errorHistory` so the next turn's agent can
8662
8676
  * see the prior failure context.
8677
+ *
8678
+ * `failed` is the only status accepted; a `skipped` node is refused
8679
+ * deliberately, because a skip has already released its dependents and this
8680
+ * operation owns no cascade machinery to unwind the ones that ran without
8681
+ * the producer's output. Reasoning in
8682
+ * `_devlog/entries/2026-08-15-optional-node-skip-semantics.md`.
8663
8683
  */
8664
8684
  retryNode(handle, nodeId) {
8665
8685
  this.mutate(handle, (s) => {
8666
8686
  const node = s.execution.nodes[nodeId];
8667
8687
  assertLegal(node, `retryNode: unknown node ${nodeId}`);
8688
+ assertLegal(
8689
+ node.status !== "skipped",
8690
+ `retryNode: node ${nodeId} was skipped, and a skip is not recoverable \u2014 it already released its dependents, which may have run without this node's output`
8691
+ );
8668
8692
  assertLegal(
8669
8693
  node.status === "failed" && node.error?.recoverable === true,
8670
8694
  `retryNode: node ${nodeId} is not a recoverable failure (status=${node.status}, recoverable=${node.error?.recoverable})`
@@ -8837,6 +8861,7 @@ var FlowAdapter = class extends AbstractConnector {
8837
8861
  const runningExecution = state.execution.nodes[node.id];
8838
8862
  const remainingMs = runningExecution ? remainingActiveExecutionMs(runningExecution, timeoutSec, Date.now()) : void 0;
8839
8863
  let result;
8864
+ let subFlowInputOrigins;
8840
8865
  try {
8841
8866
  const runner = state.inlineSubFlowRunner;
8842
8867
  if (!runner) {
@@ -8848,6 +8873,7 @@ var FlowAdapter = class extends AbstractConnector {
8848
8873
  snapshotMap(state.execution),
8849
8874
  state.flowInputOrigins
8850
8875
  );
8876
+ subFlowInputOrigins = resolved.origins;
8851
8877
  const runPromise = runner.run({
8852
8878
  node,
8853
8879
  flowId: node.run.flow,
@@ -8919,7 +8945,8 @@ var FlowAdapter = class extends AbstractConnector {
8919
8945
  status: "complete",
8920
8946
  completedAt,
8921
8947
  output: result.output,
8922
- outputHistory
8948
+ outputHistory,
8949
+ inputOrigins: subFlowInputOrigins
8923
8950
  };
8924
8951
  return;
8925
8952
  }
@@ -8935,7 +8962,7 @@ var FlowAdapter = class extends AbstractConnector {
8935
8962
  current.execution.nodes[node.id] = retry ? { ...execution2, ...patch, status: "available", error: void 0 } : {
8936
8963
  ...execution2,
8937
8964
  ...patch,
8938
- status: nodeIsOptional(node) ? "skipped" : "failed",
8965
+ status: resolveTerminalFailureStatus(node),
8939
8966
  completedAt
8940
8967
  };
8941
8968
  },
@@ -8967,6 +8994,7 @@ var FlowAdapter = class extends AbstractConnector {
8967
8994
  const subpromptRunningExecution = state.execution.nodes[node.id];
8968
8995
  const subpromptRemainingMs = subpromptRunningExecution ? remainingActiveExecutionMs(subpromptRunningExecution, subpromptTimeoutSec, Date.now()) : void 0;
8969
8996
  let subpromptOutput;
8997
+ let subpromptInputOrigins;
8970
8998
  let subpromptOutcome;
8971
8999
  try {
8972
9000
  const runner = state.subpromptRunner;
@@ -8979,6 +9007,7 @@ var FlowAdapter = class extends AbstractConnector {
8979
9007
  snapshotMap(state.execution),
8980
9008
  state.flowInputOrigins
8981
9009
  );
9010
+ subpromptInputOrigins = resolved.origins;
8982
9011
  const instruction = nodeInstruction(node);
8983
9012
  assertLegal(instruction, `subprompt node ${node.id} has no instruction`);
8984
9013
  const outputSchema = node.contract?.output?.fields;
@@ -9036,7 +9065,8 @@ var FlowAdapter = class extends AbstractConnector {
9036
9065
  status: "complete",
9037
9066
  completedAt,
9038
9067
  output: subpromptOutput,
9039
- outputHistory
9068
+ outputHistory,
9069
+ inputOrigins: subpromptInputOrigins
9040
9070
  };
9041
9071
  },
9042
9072
  false
@@ -9059,7 +9089,7 @@ var FlowAdapter = class extends AbstractConnector {
9059
9089
  current.execution.nodes[node.id] = retry ? { ...execution, ...patch, status: "available", error: void 0 } : {
9060
9090
  ...execution,
9061
9091
  ...patch,
9062
- status: nodeIsOptional(node) ? "skipped" : "failed",
9092
+ status: resolveTerminalFailureStatus(node),
9063
9093
  completedAt
9064
9094
  };
9065
9095
  },
@@ -9096,6 +9126,7 @@ var FlowAdapter = class extends AbstractConnector {
9096
9126
  ) : void 0;
9097
9127
  const deterministicKindLabel = deterministicNodeKindLabel(node.run.kind);
9098
9128
  let capturedOutput;
9129
+ let capturedInputOrigins;
9099
9130
  let checkEvidence;
9100
9131
  let deterministicOutcome;
9101
9132
  try {
@@ -9108,6 +9139,7 @@ var FlowAdapter = class extends AbstractConnector {
9108
9139
  snapshotMap(state.execution),
9109
9140
  state.flowInputOrigins
9110
9141
  );
9142
+ capturedInputOrigins = resolved.origins;
9111
9143
  const runPromise = executor.execute({
9112
9144
  node,
9113
9145
  inputs: resolved.values,
@@ -9188,7 +9220,8 @@ var FlowAdapter = class extends AbstractConnector {
9188
9220
  status: "complete",
9189
9221
  completedAt,
9190
9222
  output: capturedOutput,
9191
- outputHistory
9223
+ outputHistory,
9224
+ inputOrigins: capturedInputOrigins
9192
9225
  };
9193
9226
  },
9194
9227
  false
@@ -9222,7 +9255,7 @@ var FlowAdapter = class extends AbstractConnector {
9222
9255
  current.execution.nodes[node.id] = {
9223
9256
  ...execution,
9224
9257
  ...patch,
9225
- status: "failed",
9258
+ status: resolveTerminalFailureStatus(node),
9226
9259
  completedAt
9227
9260
  };
9228
9261
  } else {
@@ -9257,7 +9290,7 @@ var FlowAdapter = class extends AbstractConnector {
9257
9290
  completedAt,
9258
9291
  capturedOutput
9259
9292
  );
9260
- current.execution.nodes[node.id] = retry ? { ...execution, ...patch, status: "available", error: void 0 } : { ...execution, ...patch, status: "failed", completedAt };
9293
+ current.execution.nodes[node.id] = retry ? { ...execution, ...patch, status: "available", error: void 0 } : { ...execution, ...patch, status: resolveTerminalFailureStatus(node), completedAt };
9261
9294
  },
9262
9295
  false
9263
9296
  );
@@ -9337,7 +9370,9 @@ var FlowAdapter = class extends AbstractConnector {
9337
9370
  };
9338
9371
  current.execution.nodes[settlement.routerNodeId] = {
9339
9372
  ...execution,
9340
- status: "failed",
9373
+ status: resolveTerminalFailureStatus(
9374
+ findNode(current.flowDef, settlement.routerNodeId)
9375
+ ),
9341
9376
  startedAt: execution.startedAt ?? settledAt,
9342
9377
  completedAt: settledAt,
9343
9378
  output,
@@ -9563,7 +9598,7 @@ var FlowAdapter = class extends AbstractConnector {
9563
9598
  completedAt,
9564
9599
  execution.output
9565
9600
  );
9566
- current.execution.nodes[node.id] = retry ? { ...execution, ...patch, status: "available", error: void 0 } : { ...execution, ...patch, status: "failed", completedAt };
9601
+ current.execution.nodes[node.id] = retry ? { ...execution, ...patch, status: "available", error: void 0 } : { ...execution, ...patch, status: resolveTerminalFailureStatus(node), completedAt };
9567
9602
  },
9568
9603
  true
9569
9604
  );
@@ -9579,13 +9614,15 @@ var FlowAdapter = class extends AbstractConnector {
9579
9614
  * once, the same way, everywhere.
9580
9615
  *
9581
9616
  * Returns the `NodeExecution` patch (error/errorHistory/outputHistory/
9582
- * output) plus whether budget remains; the caller decides the resulting
9583
- * `status` because that differs by kind (e.g. sub-flow degrades an
9584
- * optional node's exhausted failure to `skipped`; agent/function do not,
9585
- * preserving their existing behavior). A terminal failure whose node has
9586
- * any `control.retries` configured carries `recoverable: true` so the
9587
- * manual `retryNode` operator override which sits outside this budget
9588
- * entirelyremains usable once the automatic budget runs out.
9617
+ * output) plus whether budget remains. The terminal *failure* status is
9618
+ * uniform across kinds and computed by {@link resolveTerminalFailureStatus};
9619
+ * the caller still writes the status because its non-failure outcomes differ
9620
+ * (a check's escalation parks at `awaiting_approval`, a surviving budget
9621
+ * returns to `available`). A terminal failure whose node has any
9622
+ * `control.retries` configured carries `recoverable: true` so the manual
9623
+ * `retryNode` operator override which sits outside this budget entirely
9624
+ * remains usable once the automatic budget runs out; a node that will be
9625
+ * written `skipped` never claims it, because a skip is not retryable.
9589
9626
  *
9590
9627
  * @param sourceErrorAtIso - The failure's own timestamp, when the caller has
9591
9628
  * one more precise than `completedAtIso` (e.g. a sub-flow child reports
@@ -9602,7 +9639,7 @@ var FlowAdapter = class extends AbstractConnector {
9602
9639
  const retry = hasAutomaticRetryBudget(priorFailures, retries);
9603
9640
  const error = {
9604
9641
  message,
9605
- recoverable: !retry && !!retries,
9642
+ recoverable: !retry && !!retries && resolveTerminalFailureStatus(node) === "failed",
9606
9643
  at: sourceErrorAtIso ?? completedAtIso
9607
9644
  };
9608
9645
  const outputHistory = appendAttempt(
@@ -9822,5 +9859,5 @@ function createConnector() {
9822
9859
  }
9823
9860
 
9824
9861
  export { AbstractConnector, BUILTIN_CONNECTOR_CATALOG, BoxConnector, ConnectorFieldMissingError, ConnectorManager, ConnectorStartupError, DeployConnector, DevServerConnector, FlowAdapter, GitConnector, GmailConnector, GoogleDriveConnector, LocalConnector, LogBuffer, ManagedGitconfigCollisionError, MattermostConnector, MemoryConnector, MinIOConnector, PortPool, PostgresConnector, S3Connector, SQLiteConnector, SessionInlineSubFlowRunner, SessionNodeExecutor, SessionSubpromptRunner, SharePointConnector, StaticServerConnector, TunnelConnector, WebDAVConnector, XStateConnector, XStateStoreConnector, __test, atomicReplaceCredential, buildConnectorPromptSection, buildSdkConnectorTools, buildSdkFlowTools, createConnector, createConnector10, createConnector11, createConnector12, createConnector13, createConnector14, createConnector15, createConnector16, createConnector17, createConnector18, createConnector19, createConnector2, createConnector20, createConnector3, createConnector4, createConnector5, createConnector6, createConnector7, createConnector8, createConnector9, createFsWatcher, createWorktree, defaultSpawn, ensureDirMode, ensureFleetMounted, findGitRoot, findMissingPackages, getConnector, installNpmPackages, isFleetManaged, isPackageResolvable, listConnectors, listWorktrees, readGitSyncStatus, registerBuiltinConnectors, removeMountBlock, renderCredentialHelperScript, tryGetConnector, worktreeRegistry, writeHelperScript, writeMountBlock };
9825
- //# sourceMappingURL=chunk-H26KDA7J.js.map
9826
- //# sourceMappingURL=chunk-H26KDA7J.js.map
9862
+ //# sourceMappingURL=chunk-RW4I42MW.js.map
9863
+ //# sourceMappingURL=chunk-RW4I42MW.js.map