@skaile/workspaces 1.9.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/dist/{asset-feeds-SS336LXB.js → asset-feeds-FMV3SJVQ.js} +4 -4
  3. package/dist/{asset-feeds-SS336LXB.js.map → asset-feeds-FMV3SJVQ.js.map} +1 -1
  4. package/dist/asset-manager/index.js +1 -1
  5. package/dist/bridge/drivers/claude-sdk.js +1 -1
  6. package/dist/bridge/drivers/codex.js +1 -1
  7. package/dist/bridge/drivers/continue.js +2 -2
  8. package/dist/bridge/drivers/echo.js +201 -1
  9. package/dist/bridge/drivers/echo.js.map +1 -1
  10. package/dist/bridge/drivers/gemini.js +3 -3
  11. package/dist/bridge/drivers/goose.js +2 -2
  12. package/dist/bridge/drivers/omp.js +1 -1
  13. package/dist/bridge/drivers/opencode.js +2 -2
  14. package/dist/bridge/drivers/qwen.js +3 -3
  15. package/dist/bridge/index.js +2 -2
  16. package/dist/bridge/src/drivers/echo.d.ts +16 -0
  17. package/dist/bridge/src/drivers/echo.d.ts.map +1 -1
  18. package/dist/bridge/src/drivers/flow-script.d.ts +129 -0
  19. package/dist/bridge/src/drivers/flow-script.d.ts.map +1 -0
  20. package/dist/bridge/src/types.d.ts +32 -1
  21. package/dist/bridge/src/types.d.ts.map +1 -1
  22. package/dist/{chunk-4DFBHEXQ.js → chunk-2257NSNY.js} +96 -17
  23. package/dist/chunk-2257NSNY.js.map +1 -0
  24. package/dist/{chunk-MWZGGCMF.js → chunk-2ZP6KIIQ.js} +2 -2
  25. package/dist/{chunk-MWZGGCMF.js.map → chunk-2ZP6KIIQ.js.map} +1 -1
  26. package/dist/{chunk-NKTFEV7Q.js → chunk-6XQ5QG63.js} +4 -4
  27. package/dist/{chunk-NKTFEV7Q.js.map → chunk-6XQ5QG63.js.map} +1 -1
  28. package/dist/{chunk-TNSCHS4I.js → chunk-APHTT5GE.js} +2 -2
  29. package/dist/{chunk-TNSCHS4I.js.map → chunk-APHTT5GE.js.map} +1 -1
  30. package/dist/{chunk-UNJGSISX.js → chunk-DEBMR6MK.js} +3 -3
  31. package/dist/{chunk-UNJGSISX.js.map → chunk-DEBMR6MK.js.map} +1 -1
  32. package/dist/{chunk-UQ5FK2AB.js → chunk-FRD4NU3W.js} +3 -3
  33. package/dist/{chunk-UQ5FK2AB.js.map → chunk-FRD4NU3W.js.map} +1 -1
  34. package/dist/{chunk-GKPUN2YQ.js → chunk-GEZMBQ3R.js} +3 -3
  35. package/dist/{chunk-GKPUN2YQ.js.map → chunk-GEZMBQ3R.js.map} +1 -1
  36. package/dist/{chunk-TJNEKDWS.js → chunk-IFCHOBEF.js} +6 -6
  37. package/dist/{chunk-TJNEKDWS.js.map → chunk-IFCHOBEF.js.map} +1 -1
  38. package/dist/{chunk-HKX5VSWQ.js → chunk-LVQO4X4U.js} +3 -3
  39. package/dist/{chunk-HKX5VSWQ.js.map → chunk-LVQO4X4U.js.map} +1 -1
  40. package/dist/{chunk-QY47VHNI.js → chunk-PU3FGN4T.js} +2 -2
  41. package/dist/{chunk-QY47VHNI.js.map → chunk-PU3FGN4T.js.map} +1 -1
  42. package/dist/{chunk-OMBYBUOF.js → chunk-SMWXVW6Z.js} +3 -3
  43. package/dist/{chunk-OMBYBUOF.js.map → chunk-SMWXVW6Z.js.map} +1 -1
  44. package/dist/{chunk-R5UMZEBH.js → chunk-TR6E5JOF.js} +6 -6
  45. package/dist/{chunk-R5UMZEBH.js.map → chunk-TR6E5JOF.js.map} +1 -1
  46. package/dist/{chunk-DTZ7JUZY.js → chunk-YNEJXDCZ.js} +250 -195
  47. package/dist/chunk-YNEJXDCZ.js.map +1 -0
  48. package/dist/{chunk-5DC744E3.js → chunk-ZDRAMXBS.js} +3 -3
  49. package/dist/{chunk-5DC744E3.js.map → chunk-ZDRAMXBS.js.map} +1 -1
  50. package/dist/cli/index.js +27 -27
  51. package/dist/connectors/index.js +1 -1
  52. package/dist/connectors/src/connector-prompt.d.ts +23 -0
  53. package/dist/connectors/src/connector-prompt.d.ts.map +1 -1
  54. package/dist/connectors/src/credential-helper-script.d.ts +8 -5
  55. package/dist/connectors/src/credential-helper-script.d.ts.map +1 -1
  56. package/dist/connectors/src/index.d.ts +1 -1
  57. package/dist/connectors/src/index.d.ts.map +1 -1
  58. package/dist/connectors/src/managed-gitconfig.d.ts +4 -2
  59. package/dist/connectors/src/managed-gitconfig.d.ts.map +1 -1
  60. package/dist/{ensure-sources-ELLWRQAT.js → ensure-sources-OJ5GIRZF.js} +4 -4
  61. package/dist/{ensure-sources-ELLWRQAT.js.map → ensure-sources-OJ5GIRZF.js.map} +1 -1
  62. package/dist/factory-assets/connectors/box.js +1 -1
  63. package/dist/factory-assets/connectors/deploy.js +1 -1
  64. package/dist/factory-assets/connectors/devserver.js +1 -1
  65. package/dist/factory-assets/connectors/flow/adapter.js +1 -1
  66. package/dist/factory-assets/connectors/flow/run-flow.js +2 -2
  67. package/dist/factory-assets/connectors/flow.js +1 -1
  68. package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -1
  69. package/dist/factory-assets/connectors/git.js +1 -1
  70. package/dist/factory-assets/connectors/gmail.js +1 -1
  71. package/dist/factory-assets/connectors/googledrive.js +1 -1
  72. package/dist/factory-assets/connectors/local.js +1 -1
  73. package/dist/factory-assets/connectors/mattermost.js +1 -1
  74. package/dist/factory-assets/connectors/memory.js +1 -1
  75. package/dist/factory-assets/connectors/minio.js +1 -1
  76. package/dist/factory-assets/connectors/postgres.js +1 -1
  77. package/dist/factory-assets/connectors/s3.js +1 -1
  78. package/dist/factory-assets/connectors/sharepoint.js +1 -1
  79. package/dist/factory-assets/connectors/sqlite.js +1 -1
  80. package/dist/factory-assets/connectors/static-server.js +1 -1
  81. package/dist/factory-assets/connectors/tunnel.js +1 -1
  82. package/dist/factory-assets/connectors/webdav.js +1 -1
  83. package/dist/factory-assets/connectors/xstate-store.js +1 -1
  84. package/dist/factory-assets/connectors/xstate.js +1 -1
  85. package/dist/{helpers-7Y4DTFR6.js → helpers-PS37RNFV.js} +4 -4
  86. package/dist/{helpers-7Y4DTFR6.js.map → helpers-PS37RNFV.js.map} +1 -1
  87. package/dist/{library-publish-7AH63NKA.js → library-publish-CRG7JLDZ.js} +6 -6
  88. package/dist/{library-publish-7AH63NKA.js.map → library-publish-CRG7JLDZ.js.map} +1 -1
  89. package/dist/{open-library-J2PRSM3J.js → open-library-5SRCSBSY.js} +5 -5
  90. package/dist/{open-library-J2PRSM3J.js.map → open-library-5SRCSBSY.js.map} +1 -1
  91. package/dist/{project-CSNHUQFK.js → project-SM2VMQOZ.js} +5 -5
  92. package/dist/{project-CSNHUQFK.js.map → project-SM2VMQOZ.js.map} +1 -1
  93. package/dist/run-group-engine/index.js.map +1 -1
  94. package/dist/run-group-engine/src/rollup.d.ts +5 -3
  95. package/dist/run-group-engine/src/rollup.d.ts.map +1 -1
  96. package/dist/runner/index.js +5 -5
  97. package/dist/runner/src/serve.d.ts.map +1 -1
  98. package/dist/runner/src/session-capability-wiring.d.ts +49 -0
  99. package/dist/runner/src/session-capability-wiring.d.ts.map +1 -0
  100. package/dist/runner/src/session-resource-handlers.d.ts +1 -2
  101. package/dist/runner/src/session-resource-handlers.d.ts.map +1 -1
  102. package/dist/sdk/asset-manager.js +1 -1
  103. package/dist/sdk/bridge.js +2 -2
  104. package/dist/sdk/index.js +5 -5
  105. package/dist/sdk/runner.js +5 -5
  106. package/dist/{setup-ETGRXSZG.js → setup-H3WCLOEH.js} +4 -4
  107. package/dist/{setup-ETGRXSZG.js.map → setup-H3WCLOEH.js.map} +1 -1
  108. package/dist/{source-4YG45QO6.js → source-Y7ZTBG2U.js} +6 -6
  109. package/dist/{source-4YG45QO6.js.map → source-Y7ZTBG2U.js.map} +1 -1
  110. package/dist/{source-manifest-publish-RFU4YBC6.js → source-manifest-publish-SXJ6LF4S.js} +7 -7
  111. package/dist/{source-manifest-publish-RFU4YBC6.js.map → source-manifest-publish-SXJ6LF4S.js.map} +1 -1
  112. package/dist/tui/index.js +5 -5
  113. package/dist/types/src/run-group.d.ts +2 -2
  114. package/dist/types/src/run-group.d.ts.map +1 -1
  115. package/dist/workspace-plugin/index.js +1 -1
  116. package/package.json +1 -1
  117. package/dist/chunk-4DFBHEXQ.js.map +0 -1
  118. package/dist/chunk-DTZ7JUZY.js.map +0 -1
@@ -1231,7 +1231,6 @@ var GitConnector = class extends AbstractConnector {
1231
1231
  async refreshExposedCredential(connectorId, handle) {
1232
1232
  const s = handle.state;
1233
1233
  if (!s.managedGitconfig || !s.tokenMediator) return;
1234
- const { credentialsPath, urlPrefix } = s.managedGitconfig;
1235
1234
  const result = await s.tokenMediator({ connectorId, reason: "retry-401" });
1236
1235
  if (!result.ok) {
1237
1236
  this.log.warn("refresh-flag-driven mediation failed", {
@@ -1241,6 +1240,8 @@ var GitConnector = class extends AbstractConnector {
1241
1240
  });
1242
1241
  return;
1243
1242
  }
1243
+ if (!s.managedGitconfig) return;
1244
+ const { credentialsPath, urlPrefix } = s.managedGitconfig;
1244
1245
  atomicReplaceCredential({
1245
1246
  mountId: connectorId,
1246
1247
  urlPrefix,
@@ -6078,6 +6079,77 @@ async function buildSdkConnectorTools(manager, options) {
6078
6079
  }
6079
6080
  return sdk.createSdkMcpServer({ name: "skaile-connectors", tools });
6080
6081
  }
6082
+ var FLOW_AGENT_OPS = /* @__PURE__ */ new Set([
6083
+ "get_available",
6084
+ "get_state",
6085
+ "build_handoff",
6086
+ "validate_node",
6087
+ "start_node",
6088
+ "request_approval",
6089
+ "request_input",
6090
+ "complete_node",
6091
+ "skip_node",
6092
+ "fail_node"
6093
+ ]);
6094
+ async function buildSdkFlowTools(manager, connectorId, options) {
6095
+ let sdk = options?.sdk;
6096
+ if (!sdk) {
6097
+ try {
6098
+ sdk = await import('@anthropic-ai/claude-agent-sdk');
6099
+ } catch {
6100
+ return null;
6101
+ }
6102
+ }
6103
+ const z4 = options?.z ?? zStatic;
6104
+ let ops;
6105
+ try {
6106
+ ops = manager.getOperations(connectorId);
6107
+ } catch {
6108
+ return null;
6109
+ }
6110
+ const agentOps = ops.filter((op) => FLOW_AGENT_OPS.has(op.name));
6111
+ if (agentOps.length === 0) return null;
6112
+ const tools = agentOps.map((op) => ({
6113
+ name: op.name,
6114
+ description: op.description,
6115
+ inputSchema: buildOperationInputSchema(op.args, z4),
6116
+ handler: async (input) => {
6117
+ try {
6118
+ const result = await manager.executeOp(connectorId, op.name, input ?? {});
6119
+ return { content: [{ type: "text", text: result || "(ok)" }] };
6120
+ } catch (err) {
6121
+ return {
6122
+ content: [{ type: "text", text: `Error: ${err.message}` }],
6123
+ isError: true
6124
+ };
6125
+ }
6126
+ }
6127
+ }));
6128
+ return sdk.createSdkMcpServer({ name: "skaile-flow", tools });
6129
+ }
6130
+ function buildOperationInputSchema(args, z4) {
6131
+ const shape = {};
6132
+ for (const arg of args) {
6133
+ let schema;
6134
+ switch (arg.type) {
6135
+ case "boolean":
6136
+ schema = z4.boolean();
6137
+ break;
6138
+ case "number":
6139
+ schema = z4.number();
6140
+ break;
6141
+ case "json":
6142
+ schema = z4.union([z4.string(), z4.record(z4.unknown()), z4.array(z4.unknown())]);
6143
+ break;
6144
+ default:
6145
+ schema = z4.string();
6146
+ }
6147
+ if (arg.description) schema = schema.describe(arg.description);
6148
+ if (!arg.required) schema = schema.optional();
6149
+ shape[arg.name] = schema;
6150
+ }
6151
+ return shape;
6152
+ }
6081
6153
  function buildConnectorPromptSection(manager, options) {
6082
6154
  const shellAccess = options?.shellAccess ?? true;
6083
6155
  const allConnectors = manager.listConnectors();
@@ -6216,7 +6288,7 @@ function renderCredentialHelperScript(opts) {
6216
6288
  return `#!/bin/sh
6217
6289
  # Generated by skaile-runner -- do not edit.
6218
6290
  # Tier-2 git credential helper: serves the latest cached token and triggers a
6219
- # wake-mid-401 refresh when the credentials file is older than ${triggerAgeSec}s.
6291
+ # wake-mid-401 refresh when the credentials file is empty or older than ${triggerAgeSec}s.
6220
6292
  # Spec: _devlog/specs/2026-05-07-unified-credential-mediation.md
6221
6293
 
6222
6294
  set -u
@@ -6235,10 +6307,6 @@ TAG='${tag}'
6235
6307
  # file already keys by URL prefix via the helper's gitconfig block.
6236
6308
  cat > /dev/null 2>&1 || true
6237
6309
 
6238
- # Bail silently if the credentials file is missing or empty: git falls
6239
- # through to the next helper or its own prompt.
6240
- [ -s "$CRED_FILE" ] || exit 0
6241
-
6242
6310
  # Cross-platform mtime in epoch seconds: GNU stat -c first (Linux), then BSD
6243
6311
  # stat -f (macOS), then 0 if neither is present (in which case we skip the
6244
6312
  # refresh-flag dance entirely and just serve what we have).
@@ -6250,12 +6318,23 @@ now=$(date +%s 2>/dev/null || echo 0)
6250
6318
  mtime=$(get_mtime "$CRED_FILE")
6251
6319
  age=$((now - mtime))
6252
6320
 
6253
- if [ "$age" -gt ${triggerAgeSec} ]; then
6321
+ # Emptiness is its own trigger: a truncated file has a recent mtime, so the age
6322
+ # check alone would leave it empty forever.
6323
+ started_empty=0
6324
+ [ -s "$CRED_FILE" ] || started_empty=1
6325
+
6326
+ if [ "$started_empty" -eq 1 ] || [ "$age" -gt ${triggerAgeSec} ]; then
6254
6327
  # Touch the refresh-flag (atomic open+close emits 'change' to fs.watch).
6255
6328
  : > "$FLAG_FILE" 2>/dev/null || true
6256
6329
 
6257
6330
  # Poll for the credentials file mtime to advance. usleep gives sub-second
6258
- # resolution where available; sleep 1 is the portable fallback.
6331
+ # resolution where available; sleep 1 is the portable fallback. Resolve which
6332
+ # once, up front, rather than probing PATH on every iteration.
6333
+ if command -v usleep >/dev/null 2>&1; then
6334
+ have_usleep=1
6335
+ else
6336
+ have_usleep=0
6337
+ fi
6259
6338
  end=$((now + ${waitTimeoutSec}))
6260
6339
  while :; do
6261
6340
  cur=$(date +%s 2>/dev/null || echo 0)
@@ -6266,7 +6345,12 @@ if [ "$age" -gt ${triggerAgeSec} ]; then
6266
6345
  if [ "$new_mtime" -gt "$mtime" ]; then
6267
6346
  break
6268
6347
  fi
6269
- if command -v usleep >/dev/null 2>&1; then
6348
+ # A same-second rewrite doesn't advance the second-resolution mtime, so an
6349
+ # empty file that gained content must break on content, not on mtime.
6350
+ if [ "$started_empty" -eq 1 ] && [ -s "$CRED_FILE" ]; then
6351
+ break
6352
+ fi
6353
+ if [ "$have_usleep" -eq 1 ]; then
6270
6354
  usleep 200000
6271
6355
  else
6272
6356
  sleep 1
@@ -6549,11 +6633,6 @@ function atomicReplaceCredential(opts) {
6549
6633
  const lines = readCredentialLines(credentialsPath);
6550
6634
  const tag = credentialTag(mountId);
6551
6635
  const without = lines.filter((l) => !l.endsWith(tag));
6552
- if (without.length === lines.length) {
6553
- throw new Error(
6554
- `atomicReplaceCredential: no existing credential line for mount '${mountId}' in ${credentialsPath}`
6555
- );
6556
- }
6557
6636
  without.push(buildCredentialLine(urlPrefix, token, mountId));
6558
6637
  writeCredentialLines(credentialsPath, without);
6559
6638
  }
@@ -7775,6 +7854,6 @@ function createConnector() {
7775
7854
  return new FlowAdapter();
7776
7855
  }
7777
7856
 
7778
- 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, SharePointConnector, StaticServerConnector, TunnelConnector, WebDAVConnector, XStateConnector, XStateStoreConnector, __test, atomicReplaceCredential, buildConnectorPromptSection, buildSdkConnectorTools, 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 };
7779
- //# sourceMappingURL=chunk-4DFBHEXQ.js.map
7780
- //# sourceMappingURL=chunk-4DFBHEXQ.js.map
7857
+ 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, 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 };
7858
+ //# sourceMappingURL=chunk-2257NSNY.js.map
7859
+ //# sourceMappingURL=chunk-2257NSNY.js.map