@skaile/workspaces 3.2.1 → 3.4.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 (215) hide show
  1. package/CHANGELOG.md +168 -0
  2. package/dist/{asset-feeds-SEYSNNEM.js → asset-feeds-CBY723RG.js} +11 -11
  3. package/dist/{asset-feeds-SEYSNNEM.js.map → asset-feeds-CBY723RG.js.map} +1 -1
  4. package/dist/asset-manager/catalog-deployer.js +7 -7
  5. package/dist/asset-manager/index.js +10 -10
  6. package/dist/asset-manager/installer.js +7 -7
  7. package/dist/bridge/drivers/claude-sdk.js +8 -8
  8. package/dist/bridge/drivers/codex.js +3 -3
  9. package/dist/bridge/drivers/continue.js +4 -4
  10. package/dist/bridge/drivers/echo.js +3 -3
  11. package/dist/bridge/drivers/gemini.js +5 -5
  12. package/dist/bridge/drivers/goose.js +4 -4
  13. package/dist/bridge/drivers/omp.js +3 -3
  14. package/dist/bridge/drivers/opencode.js +4 -4
  15. package/dist/bridge/drivers/qwen.js +5 -5
  16. package/dist/bridge/index.js +9 -9
  17. package/dist/{chunk-57RFYEVM.js → chunk-2Y2AWWWM.js} +4 -10
  18. package/dist/chunk-2Y2AWWWM.js.map +1 -0
  19. package/dist/{chunk-O6B3ZZ5S.js → chunk-3A3ETJFD.js} +4 -4
  20. package/dist/{chunk-O6B3ZZ5S.js.map → chunk-3A3ETJFD.js.map} +1 -1
  21. package/dist/{chunk-7GOCNYUV.js → chunk-3A5IKBHQ.js} +47 -47
  22. package/dist/{chunk-7GOCNYUV.js.map → chunk-3A5IKBHQ.js.map} +1 -1
  23. package/dist/{chunk-I7S6DFRU.js → chunk-3Q7JDLLH.js} +46 -6
  24. package/dist/chunk-3Q7JDLLH.js.map +1 -0
  25. package/dist/{chunk-PTAUN5CY.js → chunk-3UGP7I2Y.js} +3 -3
  26. package/dist/{chunk-PTAUN5CY.js.map → chunk-3UGP7I2Y.js.map} +1 -1
  27. package/dist/{chunk-CZZRDYT4.js → chunk-4VTBZ2MF.js} +4 -4
  28. package/dist/{chunk-CZZRDYT4.js.map → chunk-4VTBZ2MF.js.map} +1 -1
  29. package/dist/{chunk-U5POE4BA.js → chunk-5Q7HA4JP.js} +3 -3
  30. package/dist/{chunk-U5POE4BA.js.map → chunk-5Q7HA4JP.js.map} +1 -1
  31. package/dist/{chunk-P43HBWKK.js → chunk-6BV24JPZ.js} +36 -7
  32. package/dist/chunk-6BV24JPZ.js.map +1 -0
  33. package/dist/{chunk-AM5LFRXJ.js → chunk-A7XP4C7C.js} +3 -3
  34. package/dist/{chunk-AM5LFRXJ.js.map → chunk-A7XP4C7C.js.map} +1 -1
  35. package/dist/{chunk-ZNIHTT22.js → chunk-AXFOJ2UG.js} +5 -5
  36. package/dist/{chunk-ZNIHTT22.js.map → chunk-AXFOJ2UG.js.map} +1 -1
  37. package/dist/{chunk-PKEAYYEJ.js → chunk-BCXI27BH.js} +219 -4
  38. package/dist/chunk-BCXI27BH.js.map +1 -0
  39. package/dist/{chunk-3HVASHBF.js → chunk-BJ7QIUBM.js} +6 -15
  40. package/dist/chunk-BJ7QIUBM.js.map +1 -0
  41. package/dist/{chunk-CH3UTJBT.js → chunk-BYPQHEI4.js} +6 -6
  42. package/dist/{chunk-CH3UTJBT.js.map → chunk-BYPQHEI4.js.map} +1 -1
  43. package/dist/{chunk-NWFZUQPF.js → chunk-DFZ6QENJ.js} +18 -18
  44. package/dist/{chunk-NWFZUQPF.js.map → chunk-DFZ6QENJ.js.map} +1 -1
  45. package/dist/{chunk-F5VREBV2.js → chunk-ELPR5XBG.js} +40 -3
  46. package/dist/chunk-ELPR5XBG.js.map +1 -0
  47. package/dist/{chunk-MWFYXUFK.js → chunk-G2CXWUO5.js} +4 -4
  48. package/dist/{chunk-MWFYXUFK.js.map → chunk-G2CXWUO5.js.map} +1 -1
  49. package/dist/{chunk-BEAIJRVF.js → chunk-GHWJHOYX.js} +4 -4
  50. package/dist/{chunk-BEAIJRVF.js.map → chunk-GHWJHOYX.js.map} +1 -1
  51. package/dist/{chunk-FLBDLF3I.js → chunk-HGFKNJA5.js} +6 -4
  52. package/dist/chunk-HGFKNJA5.js.map +1 -0
  53. package/dist/{chunk-BK3WL3QK.js → chunk-JAHHMZWG.js} +3 -3
  54. package/dist/{chunk-BK3WL3QK.js.map → chunk-JAHHMZWG.js.map} +1 -1
  55. package/dist/{chunk-UFY2HFLO.js → chunk-KBXYT5HD.js} +4 -4
  56. package/dist/{chunk-UFY2HFLO.js.map → chunk-KBXYT5HD.js.map} +1 -1
  57. package/dist/{chunk-DNYE3SSL.js → chunk-MR3LQTGA.js} +4 -4
  58. package/dist/{chunk-DNYE3SSL.js.map → chunk-MR3LQTGA.js.map} +1 -1
  59. package/dist/{chunk-HCNVX34E.js → chunk-OI36ITDV.js} +8 -8
  60. package/dist/{chunk-HCNVX34E.js.map → chunk-OI36ITDV.js.map} +1 -1
  61. package/dist/{chunk-BEA7RXI3.js → chunk-P6V5GORE.js} +230 -41
  62. package/dist/chunk-P6V5GORE.js.map +1 -0
  63. package/dist/{chunk-2OCYS5EP.js → chunk-PEGIQ67F.js} +4 -4
  64. package/dist/{chunk-2OCYS5EP.js.map → chunk-PEGIQ67F.js.map} +1 -1
  65. package/dist/{chunk-I7MKEZ6J.js → chunk-PHJ2DU6D.js} +3 -3
  66. package/dist/{chunk-I7MKEZ6J.js.map → chunk-PHJ2DU6D.js.map} +1 -1
  67. package/dist/{chunk-NLZYBWVH.js → chunk-POYF2P7E.js} +10 -10
  68. package/dist/{chunk-NLZYBWVH.js.map → chunk-POYF2P7E.js.map} +1 -1
  69. package/dist/{chunk-NU4E7C5I.js → chunk-PW4SJE3X.js} +3 -3
  70. package/dist/{chunk-NU4E7C5I.js.map → chunk-PW4SJE3X.js.map} +1 -1
  71. package/dist/{chunk-Q26C5GLO.js → chunk-RD6MMBHQ.js} +3 -3
  72. package/dist/{chunk-Q26C5GLO.js.map → chunk-RD6MMBHQ.js.map} +1 -1
  73. package/dist/{chunk-46LE3GNY.js → chunk-RUFTB7QN.js} +3 -3
  74. package/dist/{chunk-46LE3GNY.js.map → chunk-RUFTB7QN.js.map} +1 -1
  75. package/dist/{chunk-BKUANJB7.js → chunk-S5N33NGZ.js} +50 -64
  76. package/dist/chunk-S5N33NGZ.js.map +1 -0
  77. package/dist/{chunk-IAIHZRG7.js → chunk-SJQ7544V.js} +7 -7
  78. package/dist/{chunk-IAIHZRG7.js.map → chunk-SJQ7544V.js.map} +1 -1
  79. package/dist/{chunk-VT6HDD2L.js → chunk-SUGDZOYZ.js} +3 -3
  80. package/dist/{chunk-VT6HDD2L.js.map → chunk-SUGDZOYZ.js.map} +1 -1
  81. package/dist/{chunk-XVIFPGYH.js → chunk-U2KIY532.js} +3 -3
  82. package/dist/{chunk-XVIFPGYH.js.map → chunk-U2KIY532.js.map} +1 -1
  83. package/dist/{chunk-HWEW3VII.js → chunk-VFL4STB7.js} +3 -3
  84. package/dist/{chunk-HWEW3VII.js.map → chunk-VFL4STB7.js.map} +1 -1
  85. package/dist/{chunk-DYMWJAL4.js → chunk-VQ4P7UYE.js} +3 -3
  86. package/dist/{chunk-DYMWJAL4.js.map → chunk-VQ4P7UYE.js.map} +1 -1
  87. package/dist/{chunk-KPZZI2KG.js → chunk-ZCIK44M7.js} +3 -3
  88. package/dist/{chunk-KPZZI2KG.js.map → chunk-ZCIK44M7.js.map} +1 -1
  89. package/dist/cli/index.js +396 -409
  90. package/dist/cli/index.js.map +1 -1
  91. package/dist/cli/src/commands/complete-resolvers.d.ts +4 -0
  92. package/dist/cli/src/commands/complete-resolvers.d.ts.map +1 -1
  93. package/dist/cli/src/commands/flow.d.ts +8 -4
  94. package/dist/cli/src/commands/flow.d.ts.map +1 -1
  95. package/dist/cli/src/commands/run.d.ts.map +1 -1
  96. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  97. package/dist/cli/src/flow-discovery.d.ts +31 -15
  98. package/dist/cli/src/flow-discovery.d.ts.map +1 -1
  99. package/dist/cli/src/paths.d.ts +9 -19
  100. package/dist/cli/src/paths.d.ts.map +1 -1
  101. package/dist/connectors/config.js +7 -7
  102. package/dist/connectors/index.js +14 -14
  103. package/dist/core/index.js +6 -6
  104. package/dist/core/logging.js +2 -2
  105. package/dist/core/manifest.js +2 -2
  106. package/dist/core/runtime-assets.js +4 -4
  107. package/dist/core/src/asset-roots.d.ts +74 -0
  108. package/dist/core/src/asset-roots.d.ts.map +1 -0
  109. package/dist/core/src/index.d.ts +1 -0
  110. package/dist/core/src/index.d.ts.map +1 -1
  111. package/dist/core/workspace-config.js +3 -3
  112. package/dist/deploy/index.js +6 -6
  113. package/dist/discovery/index.js +3 -3
  114. package/dist/{ensure-sources-IM3JMW2L.js → ensure-sources-O6AWQXAY.js} +13 -13
  115. package/dist/{ensure-sources-IM3JMW2L.js.map → ensure-sources-O6AWQXAY.js.map} +1 -1
  116. package/dist/factory-assets/connectors/box.js +14 -14
  117. package/dist/factory-assets/connectors/deploy.js +14 -14
  118. package/dist/factory-assets/connectors/devserver.js +14 -14
  119. package/dist/factory-assets/connectors/flow/CONNECTOR.md +42 -9
  120. package/dist/factory-assets/connectors/flow/adapter.d.ts +1 -1
  121. package/dist/factory-assets/connectors/flow/adapter.d.ts.map +1 -1
  122. package/dist/factory-assets/connectors/flow/adapter.js +14 -14
  123. package/dist/factory-assets/connectors/flow/engine/index.d.ts +2 -0
  124. package/dist/factory-assets/connectors/flow/engine/index.d.ts.map +1 -1
  125. package/dist/factory-assets/connectors/flow/engine/locate.d.ts +75 -0
  126. package/dist/factory-assets/connectors/flow/engine/locate.d.ts.map +1 -0
  127. package/dist/factory-assets/connectors/flow/engine/node-shape.d.ts +56 -0
  128. package/dist/factory-assets/connectors/flow/engine/node-shape.d.ts.map +1 -1
  129. package/dist/factory-assets/connectors/flow/engine.js +8 -8
  130. package/dist/factory-assets/connectors/flow/index.d.ts +1 -1
  131. package/dist/factory-assets/connectors/flow/index.d.ts.map +1 -1
  132. package/dist/factory-assets/connectors/flow/node-executor.d.ts +23 -3
  133. package/dist/factory-assets/connectors/flow/node-executor.d.ts.map +1 -1
  134. package/dist/factory-assets/connectors/flow/prompt-fragments.d.ts +4 -0
  135. package/dist/factory-assets/connectors/flow/prompt-fragments.d.ts.map +1 -1
  136. package/dist/factory-assets/connectors/flow/prompt-fragments.js +2 -2
  137. package/dist/factory-assets/connectors/flow/run-flow.d.ts +9 -1
  138. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
  139. package/dist/factory-assets/connectors/flow/run-flow.js +16 -16
  140. package/dist/factory-assets/connectors/flow.js +14 -14
  141. package/dist/factory-assets/connectors/git.js +14 -14
  142. package/dist/factory-assets/connectors/gmail.js +14 -14
  143. package/dist/factory-assets/connectors/googledrive.js +14 -14
  144. package/dist/factory-assets/connectors/local.js +14 -14
  145. package/dist/factory-assets/connectors/mattermost.js +14 -14
  146. package/dist/factory-assets/connectors/memory.js +14 -14
  147. package/dist/factory-assets/connectors/minio.js +14 -14
  148. package/dist/factory-assets/connectors/postgres.js +14 -14
  149. package/dist/factory-assets/connectors/s3.js +14 -14
  150. package/dist/factory-assets/connectors/sharepoint.js +14 -14
  151. package/dist/factory-assets/connectors/sqlite.js +14 -14
  152. package/dist/factory-assets/connectors/static-server.js +14 -14
  153. package/dist/factory-assets/connectors/tunnel.js +14 -14
  154. package/dist/factory-assets/connectors/webdav.js +14 -14
  155. package/dist/factory-assets/connectors/xstate-store.js +14 -14
  156. package/dist/factory-assets/connectors/xstate.js +14 -14
  157. package/dist/flows-66NOT5N6.js +20 -0
  158. package/dist/{flows-PBNW6BEH.js.map → flows-66NOT5N6.js.map} +1 -1
  159. package/dist/{helpers-LJFOH4RB.js → helpers-QUGRH2MW.js} +13 -13
  160. package/dist/{helpers-LJFOH4RB.js.map → helpers-QUGRH2MW.js.map} +1 -1
  161. package/dist/library/index.js +8 -8
  162. package/dist/library/install.js +6 -6
  163. package/dist/library/src/config.d.ts +6 -6
  164. package/dist/library/src/config.d.ts.map +1 -1
  165. package/dist/{library-publish-BEFA7OCS.js → library-publish-TCT652H4.js} +18 -18
  166. package/dist/{library-publish-BEFA7OCS.js.map → library-publish-TCT652H4.js.map} +1 -1
  167. package/dist/open-library-6OSZX2O6.js +32 -0
  168. package/dist/{open-library-WJ7P7B4N.js.map → open-library-6OSZX2O6.js.map} +1 -1
  169. package/dist/paths-ESJHWGBR.js +16 -0
  170. package/dist/{paths-2ZZMB7HU.js.map → paths-ESJHWGBR.js.map} +1 -1
  171. package/dist/{plugin-store-EOP3S7OU.js → plugin-store-3BYOBKYT.js} +8 -8
  172. package/dist/{plugin-store-EOP3S7OU.js.map → plugin-store-3BYOBKYT.js.map} +1 -1
  173. package/dist/{project-6RXDBSRV.js → project-5RGSHTZ7.js} +14 -14
  174. package/dist/{project-6RXDBSRV.js.map → project-5RGSHTZ7.js.map} +1 -1
  175. package/dist/resolver/index.js +7 -7
  176. package/dist/runner/index.js +19 -19
  177. package/dist/sdk/asset-manager.js +10 -10
  178. package/dist/sdk/bridge.js +9 -9
  179. package/dist/sdk/core.js +6 -6
  180. package/dist/sdk/flow.js +8 -8
  181. package/dist/sdk/index.js +19 -19
  182. package/dist/sdk/resolver.js +7 -7
  183. package/dist/sdk/runner.js +19 -19
  184. package/dist/sdk/session.js +1 -1
  185. package/dist/session/index.js +1 -1
  186. package/dist/session/src/dispatcher.d.ts +15 -0
  187. package/dist/session/src/dispatcher.d.ts.map +1 -1
  188. package/dist/session/src/workspace-change-digest.d.ts +34 -0
  189. package/dist/session/src/workspace-change-digest.d.ts.map +1 -0
  190. package/dist/{setup-XI7TCIGF.js → setup-X2T3NW7P.js} +11 -11
  191. package/dist/{setup-XI7TCIGF.js.map → setup-X2T3NW7P.js.map} +1 -1
  192. package/dist/skills-TYMTW4V4.js +20 -0
  193. package/dist/{skills-5PJ6YVM7.js.map → skills-TYMTW4V4.js.map} +1 -1
  194. package/dist/{source-TJ457ZRQ.js → source-JS3G5P6Z.js} +17 -17
  195. package/dist/{source-TJ457ZRQ.js.map → source-JS3G5P6Z.js.map} +1 -1
  196. package/dist/{source-manifest-publish-R3Q4MT5W.js → source-manifest-publish-Y7BOFFO4.js} +19 -19
  197. package/dist/{source-manifest-publish-R3Q4MT5W.js.map → source-manifest-publish-Y7BOFFO4.js.map} +1 -1
  198. package/dist/tui/index.js +19 -19
  199. package/dist/workspace-plugin/adapters/mcp.js +11 -11
  200. package/dist/workspace-plugin/adapters/omp.js +7 -7
  201. package/dist/workspace-plugin/index.js +3 -3
  202. package/package.json +1 -1
  203. package/dist/chunk-3HVASHBF.js.map +0 -1
  204. package/dist/chunk-57RFYEVM.js.map +0 -1
  205. package/dist/chunk-BEA7RXI3.js.map +0 -1
  206. package/dist/chunk-BKUANJB7.js.map +0 -1
  207. package/dist/chunk-F5VREBV2.js.map +0 -1
  208. package/dist/chunk-FLBDLF3I.js.map +0 -1
  209. package/dist/chunk-I7S6DFRU.js.map +0 -1
  210. package/dist/chunk-P43HBWKK.js.map +0 -1
  211. package/dist/chunk-PKEAYYEJ.js.map +0 -1
  212. package/dist/flows-PBNW6BEH.js +0 -20
  213. package/dist/open-library-WJ7P7B4N.js +0 -32
  214. package/dist/paths-2ZZMB7HU.js +0 -22
  215. package/dist/skills-5PJ6YVM7.js +0 -20
@@ -1,16 +1,16 @@
1
- import { resolveAuthRef } from './chunk-ZNIHTT22.js';
2
- import { EventNormalizer } from './chunk-KPZZI2KG.js';
1
+ import { resolveAuthRef } from './chunk-AXFOJ2UG.js';
2
+ import { EventNormalizer } from './chunk-ZCIK44M7.js';
3
3
  import { resolveModelTier } from './chunk-V34ZEXSE.js';
4
- import { createDriver } from './chunk-VT6HDD2L.js';
4
+ import { createDriver } from './chunk-SUGDZOYZ.js';
5
5
  import { pluginRegistry } from './chunk-6E6PKKAD.js';
6
6
  import { computeStimulus } from './chunk-IFGTRL2I.js';
7
- import { resolveNodeBindings, getConsumedOutputSchema, validateConsumedNodeOutput, appendAttempt, resolveTerminalFailureStatus, remainingActiveExecutionMs, interpolateNodeInstruction, deriveCheckEvidence, computeFlowStateFromSnapshots, availableRouterFrontier, evaluateRouterSelection, routerSelectionOutput, planRouterSkips, unsettledRouterBranchIds, countFailedAttempts, hasAutomaticRetryBudget, persistedRouterSelection } from './chunk-I7S6DFRU.js';
7
+ import { resolveNodeBindings, getConsumedOutputSchema, validateConsumedNodeOutput, appendAttempt, resolveTerminalFailureStatus, remainingActiveExecutionMs, interpolateNodeInstruction, deriveCheckEvidence, computeFlowStateFromSnapshots, availableRouterFrontier, evaluateRouterSelection, routerSelectionOutput, planRouterSkips, unsettledRouterBranchIds, countFailedAttempts, hasAutomaticRetryBudget, persistedRouterSelection } from './chunk-3Q7JDLLH.js';
8
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
- import { portableSpawn } from './chunk-P43HBWKK.js';
12
- import { withFsDeadline, tryWithFsDeadline, FsDeadlineError, fsDeadlineMs } from './chunk-DYMWJAL4.js';
13
- import { createLogger } from './chunk-7GOCNYUV.js';
9
+ import { renderSubpromptPrompt, renderStimulusPrompt } from './chunk-HGFKNJA5.js';
10
+ import { deterministicNodeKindLabel, flowDefaults, isAgentNode, isGateNode, isCheckNode, nodeRequiresApproval, isSubFlowNode, isFunctionNode, isSubpromptNode, nodeInstruction, isRouterNode, isActiveRuntimeNode, nodeIsOptional, nodeLabel, nodeAssets } from './chunk-ELPR5XBG.js';
11
+ import { portableSpawn } from './chunk-6BV24JPZ.js';
12
+ import { withFsDeadline, tryWithFsDeadline, FsDeadlineError, fsDeadlineMs } from './chunk-VQ4P7UYE.js';
13
+ import { createLogger } from './chunk-3A5IKBHQ.js';
14
14
  import { resolve, relative, sep, isAbsolute, join, dirname } from 'path';
15
15
  import { mkdir, rename, writeFile, readFile, stat, cp, readdir, chmod, realpath } from 'fs/promises';
16
16
  import * as z4 from 'zod';
@@ -346,6 +346,28 @@ function commandFor(node) {
346
346
  return ["python3", "-c", node.run.command];
347
347
  }
348
348
  }
349
+ var ABORT_SIGKILL_GRACE_MS = 2e3;
350
+ function abortError(nodeLabel2) {
351
+ const error = new Error(`${nodeLabel2} was aborted`);
352
+ error.name = "AbortError";
353
+ return error;
354
+ }
355
+ var liveDetachedChildren = /* @__PURE__ */ new Set();
356
+ var shutdownSweepInstalled = false;
357
+ function sweepOnShutdown(child) {
358
+ liveDetachedChildren.add(child);
359
+ void child.exited.then(() => liveDetachedChildren.delete(child));
360
+ if (shutdownSweepInstalled) return;
361
+ shutdownSweepInstalled = true;
362
+ globalThis.process.once("exit", () => {
363
+ for (const live of liveDetachedChildren) {
364
+ try {
365
+ live.kill("SIGKILL");
366
+ } catch {
367
+ }
368
+ }
369
+ });
370
+ }
349
371
  var SessionNodeExecutor = class {
350
372
  workspaceDir;
351
373
  /** Creates an executor scoped to one already-materialized session workspace. */
@@ -353,7 +375,7 @@ var SessionNodeExecutor = class {
353
375
  this.workspaceDir = resolve(options.workspaceDir);
354
376
  }
355
377
  /** Runs one function or check node process with session environment and binding overrides. */
356
- async execute(request) {
378
+ async execute(request, options) {
357
379
  const nodeLabel2 = `${deterministicNodeKindLabel(request.node.run.kind)} node ${request.node.id}`;
358
380
  const cwd = resolve(this.workspaceDir, request.node.run.cwd ?? ".");
359
381
  const workspaceRelative = relative(this.workspaceDir, cwd);
@@ -366,16 +388,35 @@ var SessionNodeExecutor = class {
366
388
  serializeEnvironmentInput(name, value, nodeLabel2)
367
389
  ])
368
390
  );
391
+ const signal = options?.signal;
392
+ if (signal?.aborted) throw abortError(nodeLabel2);
369
393
  const process2 = portableSpawn(commandFor(request.node), {
370
394
  cwd,
371
- env: { ...globalThis.process.env, ...boundEnvironment }
395
+ env: { ...globalThis.process.env, ...boundEnvironment },
396
+ detached: true
372
397
  });
373
- const [stdout, stderr, exitStatus] = await Promise.all([
374
- new Response(process2.stdout).text(),
375
- new Response(process2.stderr).text(),
376
- process2.exited
377
- ]);
378
- return { exitStatus, stdout, stderr };
398
+ sweepOnShutdown(process2);
399
+ let aborted = false;
400
+ let escalation;
401
+ const onAbort = () => {
402
+ aborted = true;
403
+ process2.kill("SIGTERM");
404
+ escalation = setTimeout(() => process2.kill("SIGKILL"), ABORT_SIGKILL_GRACE_MS);
405
+ escalation.unref?.();
406
+ };
407
+ signal?.addEventListener("abort", onAbort, { once: true });
408
+ try {
409
+ const [stdout, stderr, exitStatus] = await Promise.all([
410
+ new Response(process2.stdout).text(),
411
+ new Response(process2.stderr).text(),
412
+ process2.exited
413
+ ]);
414
+ if (aborted) throw abortError(nodeLabel2);
415
+ return { exitStatus, stdout, stderr };
416
+ } finally {
417
+ if (escalation) clearTimeout(escalation);
418
+ signal?.removeEventListener("abort", onAbort);
419
+ }
379
420
  }
380
421
  };
381
422
 
@@ -7584,6 +7625,18 @@ function raceWithTimeout(promise, ms, timeoutMessage) {
7584
7625
  );
7585
7626
  });
7586
7627
  }
7628
+ var ABORTED_ATTEMPT_SETTLE_MS = ABORT_SIGKILL_GRACE_MS + 1e3;
7629
+ function settleWithin(promise, ms) {
7630
+ return new Promise((resolve6) => {
7631
+ const timer = setTimeout(resolve6, ms);
7632
+ timer.unref?.();
7633
+ const settled = () => {
7634
+ clearTimeout(timer);
7635
+ resolve6();
7636
+ };
7637
+ promise.then(settled, settled);
7638
+ });
7639
+ }
7587
7640
  function mergeInteractionHistory(history, interaction) {
7588
7641
  if (!interaction) return history;
7589
7642
  const next = [...history];
@@ -8799,6 +8852,7 @@ var FlowAdapter = class extends AbstractConnector {
8799
8852
  }
8800
8853
  async drainAvailableRuntimeNodes(handle, includeRoutersAndGates) {
8801
8854
  const advancedSubFlows = /* @__PURE__ */ new Set();
8855
+ let abortedAttempt;
8802
8856
  while (true) {
8803
8857
  const state = this.s(handle);
8804
8858
  if (state.execution.status === "cancelled" || state.execution.status === "failed") break;
@@ -8874,7 +8928,7 @@ var FlowAdapter = class extends AbstractConnector {
8874
8928
  state.flowInputOrigins
8875
8929
  );
8876
8930
  subFlowInputOrigins = resolved.origins;
8877
- const runPromise = runner.run({
8931
+ const runPromise2 = runner.run({
8878
8932
  node,
8879
8933
  flowId: node.run.flow,
8880
8934
  inputs: resolved.values,
@@ -8892,10 +8946,10 @@ var FlowAdapter = class extends AbstractConnector {
8892
8946
  }
8893
8947
  });
8894
8948
  result = remainingMs !== void 0 ? await raceWithTimeout(
8895
- runPromise,
8949
+ runPromise2,
8896
8950
  Math.max(0, remainingMs),
8897
8951
  `Sub-flow node ${node.id} timed out after ${timeoutSec}s`
8898
- ) : await runPromise;
8952
+ ) : await runPromise2;
8899
8953
  } catch (error) {
8900
8954
  if (error instanceof NodeTimeoutError) {
8901
8955
  const target = state.inlineOperationTargets.get(node.id);
@@ -9015,17 +9069,17 @@ var FlowAdapter = class extends AbstractConnector {
9015
9069
  interpolateNodeInstruction(instruction, resolved.values),
9016
9070
  outputSchema
9017
9071
  );
9018
- const runPromise = runner.execute({
9072
+ const runPromise2 = runner.execute({
9019
9073
  node,
9020
9074
  prompt,
9021
9075
  inputs: resolved.values,
9022
9076
  inputOrigins: resolved.origins
9023
9077
  });
9024
9078
  const result = subpromptRemainingMs !== void 0 ? await raceWithTimeout(
9025
- runPromise,
9079
+ runPromise2,
9026
9080
  Math.max(0, subpromptRemainingMs),
9027
9081
  `Subprompt node ${node.id} timed out after ${subpromptTimeoutSec}s`
9028
- ) : await runPromise;
9082
+ ) : await runPromise2;
9029
9083
  subpromptOutput = subpromptNodeOutput(node, result.text);
9030
9084
  const validation = validateConsumedNodeOutput(
9031
9085
  state.flowDef,
@@ -9099,6 +9153,12 @@ var FlowAdapter = class extends AbstractConnector {
9099
9153
  continue;
9100
9154
  }
9101
9155
  if (!isFunctionNode(node) && !isCheckNode(node)) continue;
9156
+ if (abortedAttempt) {
9157
+ const settling = abortedAttempt;
9158
+ abortedAttempt = void 0;
9159
+ await settleWithin(settling, ABORTED_ATTEMPT_SETTLE_MS);
9160
+ continue;
9161
+ }
9102
9162
  this.mutate(
9103
9163
  handle,
9104
9164
  (current) => {
@@ -9129,6 +9189,8 @@ var FlowAdapter = class extends AbstractConnector {
9129
9189
  let capturedInputOrigins;
9130
9190
  let checkEvidence;
9131
9191
  let deterministicOutcome;
9192
+ const deterministicAbort = new AbortController();
9193
+ let runPromise;
9132
9194
  try {
9133
9195
  const executor = state.nodeExecutor;
9134
9196
  if (!executor)
@@ -9140,11 +9202,10 @@ var FlowAdapter = class extends AbstractConnector {
9140
9202
  state.flowInputOrigins
9141
9203
  );
9142
9204
  capturedInputOrigins = resolved.origins;
9143
- const runPromise = executor.execute({
9144
- node,
9145
- inputs: resolved.values,
9146
- inputOrigins: resolved.origins
9147
- });
9205
+ runPromise = executor.execute(
9206
+ { node, inputs: resolved.values, inputOrigins: resolved.origins },
9207
+ { signal: deterministicAbort.signal }
9208
+ );
9148
9209
  const result = deterministicRemainingMs !== void 0 ? await raceWithTimeout(
9149
9210
  runPromise,
9150
9211
  Math.max(0, deterministicRemainingMs),
@@ -9193,12 +9254,21 @@ var FlowAdapter = class extends AbstractConnector {
9193
9254
  deterministicOutcome = { kind: "success" };
9194
9255
  }
9195
9256
  } catch (error) {
9196
- deterministicOutcome = error instanceof NodeTimeoutError ? { kind: "failure", message: error.message } : {
9197
- kind: "failure",
9198
- message: `${deterministicKindLabel} node ${node.id} failed: ${error instanceof Error ? error.message : String(error)}`
9199
- };
9257
+ if (error instanceof NodeTimeoutError) {
9258
+ deterministicAbort.abort();
9259
+ abortedAttempt = runPromise;
9260
+ deterministicOutcome = { kind: "failure", message: error.message };
9261
+ } else {
9262
+ deterministicOutcome = {
9263
+ kind: "failure",
9264
+ message: `${deterministicKindLabel} node ${node.id} failed: ${error instanceof Error ? error.message : String(error)}`
9265
+ };
9266
+ }
9267
+ }
9268
+ if (this.s(handle).executionGeneration !== deterministicExecutionGeneration) {
9269
+ deterministicAbort.abort();
9270
+ break;
9200
9271
  }
9201
- if (this.s(handle).executionGeneration !== deterministicExecutionGeneration) break;
9202
9272
  if (deterministicOutcome.kind === "success") {
9203
9273
  this.mutate(
9204
9274
  handle,
@@ -9717,6 +9787,7 @@ ${targetExecution.outputCorrection.issues.map((issue) => `- ${issue}`).join("\n"
9717
9787
  ${assets.map((asset) => `- ${asset}`).join("\n")}`);
9718
9788
  }
9719
9789
  const deps = flowPredecessors(s.flowDef, nodeId);
9790
+ const supplied = suppliedProducerFields(resolved);
9720
9791
  const handoff = [];
9721
9792
  for (const depId of deps) {
9722
9793
  const exec = s.execution.nodes[depId];
@@ -9729,8 +9800,9 @@ Concerns: ${output.concerns.join("; ")}` : "";
9729
9800
  const predecessor = s.flowDef.nodes.find((n) => n.id === depId);
9730
9801
  const label = predecessor ? nodeLabel(predecessor) : depId;
9731
9802
  const summary = predecessor && isRouterNode(predecessor) ? routerSelectionHandoffSummary(predecessor, exec) ?? output.summary : output.summary;
9803
+ const fields = exec?.status === "complete" ? upstreamFieldsBlock(predecessor, output, supplied) : "";
9732
9804
  handoff.push(`### ${label} (${exec?.status})
9733
- ${summary}${artifacts}${concerns}`);
9805
+ ${summary}${fields}${artifacts}${concerns}`);
9734
9806
  }
9735
9807
  sections.push(
9736
9808
  `## Upstream handoff
@@ -9748,6 +9820,62 @@ function routerSelectionHandoffSummary(router, execution) {
9748
9820
  if (!selection) return void 0;
9749
9821
  return selection.selectedTarget === null ? "Router completed without selecting a target." : `Router selected ${selection.selectedTarget}.`;
9750
9822
  }
9823
+ var HANDOFF_FIELD_VALUE_MAX_CHARS = 500;
9824
+ var HANDOFF_FIELD_MAX_COUNT = 20;
9825
+ function declaredOutputFieldNames(node) {
9826
+ const schema = node?.contract?.output?.fields;
9827
+ if (!schema || typeof schema !== "object" || Array.isArray(schema)) return [];
9828
+ const properties = schema.properties;
9829
+ if (!properties || typeof properties !== "object" || Array.isArray(properties)) return [];
9830
+ return Object.keys(properties);
9831
+ }
9832
+ function suppliedProducerFields(resolved) {
9833
+ const supplied = /* @__PURE__ */ new Set();
9834
+ for (const [name, originList] of Object.entries(resolved.origins)) {
9835
+ const serialized = JSON.stringify(resolved.values[name]);
9836
+ if (serialized === void 0) continue;
9837
+ for (const origin of originList) {
9838
+ if (origin.source !== "node-output") continue;
9839
+ const root = origin.path.split(".")[4];
9840
+ if (root) supplied.add(`${origin.nodeId} ${root} ${serialized}`);
9841
+ }
9842
+ }
9843
+ return supplied;
9844
+ }
9845
+ function upstreamFieldsBlock(predecessor, output, supplied) {
9846
+ const fields = output.fields;
9847
+ if (!predecessor || !fields) return "";
9848
+ const renderable = [];
9849
+ let suppressed = 0;
9850
+ for (const name of declaredOutputFieldNames(predecessor)) {
9851
+ if (!Object.hasOwn(fields, name)) continue;
9852
+ const serialized = JSON.stringify(fields[name]) ?? "null";
9853
+ if (supplied.has(`${predecessor.id} ${name} ${serialized}`)) {
9854
+ suppressed += 1;
9855
+ continue;
9856
+ }
9857
+ renderable.push([name, serialized]);
9858
+ }
9859
+ if (renderable.length === 0) return "";
9860
+ const lines = renderable.slice(0, HANDOFF_FIELD_MAX_COUNT).map(([name, serialized]) => {
9861
+ const value = serialized.length > HANDOFF_FIELD_VALUE_MAX_CHARS ? `${serialized.slice(0, HANDOFF_FIELD_VALUE_MAX_CHARS)} \u2026 [truncated from ${serialized.length} chars]` : serialized;
9862
+ return `- ${name}: ${value}`;
9863
+ });
9864
+ const overflow = renderable.length - lines.length;
9865
+ if (overflow > 0) {
9866
+ lines.push(
9867
+ `- \u2026 ${overflow} more declared field(s) not shown (${HANDOFF_FIELD_MAX_COUNT}-field cap)`
9868
+ );
9869
+ }
9870
+ if (suppressed > 0) {
9871
+ lines.push(
9872
+ `- (${suppressed} declared field(s) omitted \u2014 already shown under "Supplied bindings")`
9873
+ );
9874
+ }
9875
+ return `
9876
+ Fields:
9877
+ ${lines.join("\n")}`;
9878
+ }
9751
9879
  function deterministicNodeOutput(node, result, passed) {
9752
9880
  const kindLabel = deterministicNodeKindLabel(node.run.kind);
9753
9881
  const capturedFields = [];
@@ -9770,19 +9898,80 @@ function deterministicNodeOutput(node, result, passed) {
9770
9898
  ...Object.keys(fields).length > 0 ? { fields } : {}
9771
9899
  };
9772
9900
  }
9901
+ function findSoleJsonSpan(text) {
9902
+ const spans = [];
9903
+ const stack = [];
9904
+ let spanStart = null;
9905
+ let inString = false;
9906
+ let escaped = false;
9907
+ for (let i = 0; i < text.length; i++) {
9908
+ const char = text[i];
9909
+ if (inString) {
9910
+ if (escaped) escaped = false;
9911
+ else if (char === "\\") escaped = true;
9912
+ else if (char === '"') inString = false;
9913
+ continue;
9914
+ }
9915
+ if (stack.length > 0 && char === '"') {
9916
+ inString = true;
9917
+ } else if (char === "{" || char === "[") {
9918
+ if (stack.length === 0) spanStart = i;
9919
+ stack.push(char === "{" ? "}" : "]");
9920
+ } else if (char === "}" || char === "]") {
9921
+ if (stack.length === 0) {
9922
+ return { ambiguity: "a closing bracket appears outside any JSON structure" };
9923
+ }
9924
+ if (stack.pop() !== char) return { ambiguity: "mismatched bracket" };
9925
+ if (stack.length === 0 && spanStart !== null) {
9926
+ spans.push({ text: text.slice(spanStart, i + 1), end: i + 1 });
9927
+ spanStart = null;
9928
+ }
9929
+ }
9930
+ }
9931
+ if (stack.length > 0 || inString) return { ambiguity: "unterminated JSON structure" };
9932
+ if (spans.length > 1) {
9933
+ return {
9934
+ ambiguity: `found ${spans.length} candidate JSON values; refusing to guess which is the answer`
9935
+ };
9936
+ }
9937
+ const sole = spans[0];
9938
+ if (!sole) return {};
9939
+ const afterSpan = text.slice(sole.end);
9940
+ const lineBreak = afterSpan.indexOf("\n");
9941
+ const restOfLine = lineBreak === -1 ? afterSpan : afterSpan.slice(0, lineBreak);
9942
+ if (restOfLine.trim() !== "") {
9943
+ return { ambiguity: "the candidate JSON value is embedded mid-sentence" };
9944
+ }
9945
+ return { span: sole.text };
9946
+ }
9773
9947
  function extractSubpromptJsonPayload(text) {
9948
+ const parses = (value) => {
9949
+ try {
9950
+ JSON.parse(value);
9951
+ return true;
9952
+ } catch {
9953
+ return false;
9954
+ }
9955
+ };
9774
9956
  const trimmed = text.trim();
9775
9957
  const fenceMatch = /^```(?:json)?\s*([\s\S]*?)\s*```$/.exec(trimmed);
9776
- return fenceMatch?.[1] ?? trimmed;
9958
+ const direct = fenceMatch?.[1] ?? trimmed;
9959
+ if (parses(direct)) return { payload: direct };
9960
+ const scan = findSoleJsonSpan(direct);
9961
+ if (scan.span !== void 0) {
9962
+ if (parses(scan.span)) return { payload: scan.span };
9963
+ return { payload: direct, ambiguity: "the sole candidate JSON value did not parse" };
9964
+ }
9965
+ return scan.ambiguity ? { payload: direct, ambiguity: scan.ambiguity } : { payload: direct };
9777
9966
  }
9778
9967
  function subpromptNodeOutput(node, text) {
9779
9968
  const outputSchema = node.contract?.output?.fields;
9780
9969
  if (!outputSchema) return { summary: text.trim(), artifacts: [] };
9781
- const parsed = safeParseFields(extractSubpromptJsonPayload(text));
9970
+ const extracted = extractSubpromptJsonPayload(text);
9971
+ const parsed = safeParseFields(extracted.payload);
9782
9972
  if (!parsed.fields) {
9783
- throw new Error(
9784
- `Subprompt node ${node.id} response is not valid JSON: ${parsed.issues.join("; ")}`
9785
- );
9973
+ const detail = extracted.ambiguity ? `${parsed.issues.join("; ")} (${extracted.ambiguity})` : parsed.issues.join("; ");
9974
+ throw new Error(`Subprompt node ${node.id} response is not valid JSON: ${detail}`);
9786
9975
  }
9787
9976
  return {
9788
9977
  summary: text.trim(),
@@ -9859,5 +10048,5 @@ function createConnector() {
9859
10048
  }
9860
10049
 
9861
10050
  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 };
9862
- //# sourceMappingURL=chunk-BEA7RXI3.js.map
9863
- //# sourceMappingURL=chunk-BEA7RXI3.js.map
10051
+ //# sourceMappingURL=chunk-P6V5GORE.js.map
10052
+ //# sourceMappingURL=chunk-P6V5GORE.js.map