@skaile/workspaces 4.5.2 → 4.6.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 (139) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/app-sdk/index.js +1 -1
  3. package/dist/{asset-feeds-G4WIFRFX.js → asset-feeds-3XUEJHLJ.js} +4 -4
  4. package/dist/{asset-feeds-G4WIFRFX.js.map → asset-feeds-3XUEJHLJ.js.map} +1 -1
  5. package/dist/asset-manager/index.js +1 -1
  6. package/dist/bridge/drivers/claude-sdk.js +4 -4
  7. package/dist/bridge/drivers/codex.js +2 -2
  8. package/dist/bridge/drivers/continue.js +2 -2
  9. package/dist/bridge/drivers/echo.js +3 -3
  10. package/dist/bridge/drivers/gemini.js +4 -4
  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 +4 -4
  15. package/dist/bridge/index.js +5 -5
  16. package/dist/{chunk-JHPBSZIP.js → chunk-2CFREMKM.js} +3 -3
  17. package/dist/{chunk-JHPBSZIP.js.map → chunk-2CFREMKM.js.map} +1 -1
  18. package/dist/{chunk-CKLCKPC7.js → chunk-2HZJKDLG.js} +2 -2
  19. package/dist/{chunk-CKLCKPC7.js.map → chunk-2HZJKDLG.js.map} +1 -1
  20. package/dist/{chunk-NOH5UDO7.js → chunk-3GKBSHUG.js} +3 -3
  21. package/dist/{chunk-NOH5UDO7.js.map → chunk-3GKBSHUG.js.map} +1 -1
  22. package/dist/{chunk-XXRQHASJ.js → chunk-5CDL6VZQ.js} +6 -6
  23. package/dist/{chunk-XXRQHASJ.js.map → chunk-5CDL6VZQ.js.map} +1 -1
  24. package/dist/{chunk-AMJEPVNB.js → chunk-63PBQN5U.js} +6 -6
  25. package/dist/{chunk-AMJEPVNB.js.map → chunk-63PBQN5U.js.map} +1 -1
  26. package/dist/{chunk-YVQZQGVW.js → chunk-6ZQU5WKJ.js} +3 -3
  27. package/dist/{chunk-YVQZQGVW.js.map → chunk-6ZQU5WKJ.js.map} +1 -1
  28. package/dist/{chunk-3OLCTLTH.js → chunk-7WVPAQPE.js} +3 -2
  29. package/dist/chunk-7WVPAQPE.js.map +1 -0
  30. package/dist/{chunk-JF77XKD7.js → chunk-CU32AWH5.js} +3 -3
  31. package/dist/{chunk-JF77XKD7.js.map → chunk-CU32AWH5.js.map} +1 -1
  32. package/dist/{chunk-DHYIUGZW.js → chunk-D3332IMQ.js} +3 -3
  33. package/dist/{chunk-DHYIUGZW.js.map → chunk-D3332IMQ.js.map} +1 -1
  34. package/dist/{chunk-VJJUKODI.js → chunk-DXXIALYF.js} +3 -3
  35. package/dist/{chunk-VJJUKODI.js.map → chunk-DXXIALYF.js.map} +1 -1
  36. package/dist/{chunk-Q5C77OZW.js → chunk-EVVE4SL4.js} +3 -3
  37. package/dist/{chunk-Q5C77OZW.js.map → chunk-EVVE4SL4.js.map} +1 -1
  38. package/dist/{chunk-C2CYBRYJ.js → chunk-KMFZVPYR.js} +2 -2
  39. package/dist/{chunk-C2CYBRYJ.js.map → chunk-KMFZVPYR.js.map} +1 -1
  40. package/dist/{chunk-U4AA7MOV.js → chunk-QAH24E5U.js} +6 -3
  41. package/dist/chunk-QAH24E5U.js.map +1 -0
  42. package/dist/{chunk-VP2CACF2.js → chunk-QVTROHEZ.js} +3 -3
  43. package/dist/{chunk-VP2CACF2.js.map → chunk-QVTROHEZ.js.map} +1 -1
  44. package/dist/{chunk-CNYIITSZ.js → chunk-R4OMDCGZ.js} +3 -3
  45. package/dist/{chunk-CNYIITSZ.js.map → chunk-R4OMDCGZ.js.map} +1 -1
  46. package/dist/{chunk-6GA27VV4.js → chunk-SAXTWLXZ.js} +10 -10
  47. package/dist/{chunk-6GA27VV4.js.map → chunk-SAXTWLXZ.js.map} +1 -1
  48. package/dist/chunk-SDNGG6FB.js +32 -0
  49. package/dist/chunk-SDNGG6FB.js.map +1 -0
  50. package/dist/{chunk-Y5E6LHSQ.js → chunk-TRGMQUAZ.js} +94 -55
  51. package/dist/chunk-TRGMQUAZ.js.map +1 -0
  52. package/dist/{chunk-GVOPQBGM.js → chunk-V7SHQXDI.js} +4 -4
  53. package/dist/{chunk-GVOPQBGM.js.map → chunk-V7SHQXDI.js.map} +1 -1
  54. package/dist/{chunk-PJP2TOCB.js → chunk-VZOUBMM4.js} +5 -5
  55. package/dist/{chunk-PJP2TOCB.js.map → chunk-VZOUBMM4.js.map} +1 -1
  56. package/dist/{chunk-GNXKNQPU.js → chunk-YNZ5FIFH.js} +2 -2
  57. package/dist/{chunk-GNXKNQPU.js.map → chunk-YNZ5FIFH.js.map} +1 -1
  58. package/dist/{chunk-MKJ2QYID.js → chunk-ZGYPEVZW.js} +4 -4
  59. package/dist/{chunk-MKJ2QYID.js.map → chunk-ZGYPEVZW.js.map} +1 -1
  60. package/dist/cli/index.js +35 -34
  61. package/dist/cli/index.js.map +1 -1
  62. package/dist/connectors/index.js +7 -6
  63. package/dist/connectors/src/classify-connect-error.d.ts +20 -0
  64. package/dist/connectors/src/classify-connect-error.d.ts.map +1 -0
  65. package/dist/connectors/src/connect-error-kind.d.ts +47 -0
  66. package/dist/connectors/src/connect-error-kind.d.ts.map +1 -0
  67. package/dist/connectors/src/connector-manager.d.ts.map +1 -1
  68. package/dist/connectors/src/index.d.ts +3 -0
  69. package/dist/connectors/src/index.d.ts.map +1 -1
  70. package/dist/connectors-shared/index.js +2 -0
  71. package/dist/connectors-shared/index.js.map +1 -1
  72. package/dist/connectors-shared/src/index.d.ts +7 -2
  73. package/dist/connectors-shared/src/index.d.ts.map +1 -1
  74. package/dist/{ensure-sources-J5J2TBRA.js → ensure-sources-MFQDQPYL.js} +4 -4
  75. package/dist/{ensure-sources-J5J2TBRA.js.map → ensure-sources-MFQDQPYL.js.map} +1 -1
  76. package/dist/factory-assets/connectors/box.js +7 -6
  77. package/dist/factory-assets/connectors/deploy.js +7 -6
  78. package/dist/factory-assets/connectors/devserver.js +7 -6
  79. package/dist/factory-assets/connectors/flow/adapter.js +7 -6
  80. package/dist/factory-assets/connectors/flow/run-flow.js +8 -7
  81. package/dist/factory-assets/connectors/flow.js +7 -6
  82. package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -1
  83. package/dist/factory-assets/connectors/git.js +7 -6
  84. package/dist/factory-assets/connectors/gmail.js +7 -6
  85. package/dist/factory-assets/connectors/googledrive.js +7 -6
  86. package/dist/factory-assets/connectors/local.js +7 -6
  87. package/dist/factory-assets/connectors/mattermost.js +7 -6
  88. package/dist/factory-assets/connectors/memory.js +7 -6
  89. package/dist/factory-assets/connectors/minio.js +7 -6
  90. package/dist/factory-assets/connectors/postgres.js +7 -6
  91. package/dist/factory-assets/connectors/s3.js +7 -6
  92. package/dist/factory-assets/connectors/sharepoint.js +7 -6
  93. package/dist/factory-assets/connectors/sqlite.js +7 -6
  94. package/dist/factory-assets/connectors/static-server.js +7 -6
  95. package/dist/factory-assets/connectors/tunnel.js +7 -6
  96. package/dist/factory-assets/connectors/webdav.js +7 -6
  97. package/dist/factory-assets/connectors/xstate-store.js +7 -6
  98. package/dist/factory-assets/connectors/xstate.js +7 -6
  99. package/dist/{helpers-OJJNDSPO.js → helpers-VQLLQ6HB.js} +4 -4
  100. package/dist/{helpers-OJJNDSPO.js.map → helpers-VQLLQ6HB.js.map} +1 -1
  101. package/dist/{library-publish-TDT5HCLA.js → library-publish-73SFVNCE.js} +6 -6
  102. package/dist/{library-publish-TDT5HCLA.js.map → library-publish-73SFVNCE.js.map} +1 -1
  103. package/dist/{open-library-OAVUUOAN.js → open-library-QGTUQMUG.js} +5 -5
  104. package/dist/{open-library-OAVUUOAN.js.map → open-library-QGTUQMUG.js.map} +1 -1
  105. package/dist/{project-PNSDEXUH.js → project-LWS5PYIF.js} +5 -5
  106. package/dist/{project-PNSDEXUH.js.map → project-LWS5PYIF.js.map} +1 -1
  107. package/dist/runner/index.js +11 -10
  108. package/dist/sdk/asset-manager.js +1 -1
  109. package/dist/sdk/bridge.js +5 -5
  110. package/dist/sdk/index.js +11 -10
  111. package/dist/sdk/index.js.map +1 -1
  112. package/dist/sdk/runner.js +11 -10
  113. package/dist/sdk/session.js +2 -2
  114. package/dist/sdk/store.js +1 -1
  115. package/dist/sdk/types.js +1 -1
  116. package/dist/session/index.js +2 -2
  117. package/dist/{setup-6FAITLPM.js → setup-EOJWDJK2.js} +10 -10
  118. package/dist/{setup-6FAITLPM.js.map → setup-EOJWDJK2.js.map} +1 -1
  119. package/dist/{source-RTVNF6GB.js → source-Q5IIYTRA.js} +6 -6
  120. package/dist/{source-RTVNF6GB.js.map → source-Q5IIYTRA.js.map} +1 -1
  121. package/dist/{source-manifest-publish-U2PVHXCF.js → source-manifest-publish-Z3WC4HA2.js} +7 -7
  122. package/dist/{source-manifest-publish-U2PVHXCF.js.map → source-manifest-publish-Z3WC4HA2.js.map} +1 -1
  123. package/dist/store/index.js +1 -1
  124. package/dist/store/src/resource-client.d.ts.map +1 -1
  125. package/dist/store/src/types.d.ts +3 -1
  126. package/dist/store/src/types.d.ts.map +1 -1
  127. package/dist/tui/index.js +11 -10
  128. package/dist/tui/index.js.map +1 -1
  129. package/dist/types/index.js +1 -1
  130. package/dist/types/src/events.d.ts +22 -0
  131. package/dist/types/src/events.d.ts.map +1 -1
  132. package/dist/types/src/index.d.ts +2 -1
  133. package/dist/types/src/index.d.ts.map +1 -1
  134. package/dist/workspace-plugin/adapters/mcp.js +2 -2
  135. package/dist/workspace-plugin/index.js +1 -1
  136. package/package.json +1 -1
  137. package/dist/chunk-3OLCTLTH.js.map +0 -1
  138. package/dist/chunk-U4AA7MOV.js.map +0 -1
  139. package/dist/chunk-Y5E6LHSQ.js.map +0 -1
@@ -0,0 +1,32 @@
1
+ import { CONNECTOR_ERROR_KINDS } from './chunk-QAH24E5U.js';
2
+
3
+ // connectors/src/connect-error-kind.ts
4
+ var CONNECT_ERROR_KIND_PROPERTY = "skaileConnectErrorKind";
5
+ function declaredConnectErrorKind(err) {
6
+ if (err === null || typeof err !== "object" || !(CONNECT_ERROR_KIND_PROPERTY in err)) {
7
+ return void 0;
8
+ }
9
+ const value = err[CONNECT_ERROR_KIND_PROPERTY];
10
+ return CONNECTOR_ERROR_KINDS.includes(value) ? value : void 0;
11
+ }
12
+ function withConnectErrorKind(err, kind) {
13
+ if (err !== null && typeof err === "object" && !(CONNECT_ERROR_KIND_PROPERTY in err)) {
14
+ try {
15
+ err[CONNECT_ERROR_KIND_PROPERTY] = kind;
16
+ } catch {
17
+ }
18
+ }
19
+ return err;
20
+ }
21
+ var ClassifiedConnectError = class extends Error {
22
+ [CONNECT_ERROR_KIND_PROPERTY];
23
+ constructor(message, kind) {
24
+ super(message);
25
+ this.name = "ClassifiedConnectError";
26
+ this[CONNECT_ERROR_KIND_PROPERTY] = kind;
27
+ }
28
+ };
29
+
30
+ export { CONNECT_ERROR_KIND_PROPERTY, ClassifiedConnectError, declaredConnectErrorKind, withConnectErrorKind };
31
+ //# sourceMappingURL=chunk-SDNGG6FB.js.map
32
+ //# sourceMappingURL=chunk-SDNGG6FB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../connectors/src/connect-error-kind.ts"],"names":[],"mappings":";;;AAuBO,IAAM,2BAAA,GAA8B;AAYpC,SAAS,yBAAyB,GAAA,EAA8C;AACrF,EAAA,IAAI,QAAQ,IAAA,IAAQ,OAAO,QAAQ,QAAA,IAAY,EAAE,+BAA+B,GAAA,CAAA,EAAM;AACpF,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAA,GAAS,IAAgC,2BAA2B,CAAA;AAC1E,EAAA,OAAQ,qBAAA,CAA6C,QAAA,CAAS,KAAK,CAAA,GAC9D,KAAA,GACD,MAAA;AACN;AAOO,SAAS,oBAAA,CAAwB,KAAQ,IAAA,EAA6B;AAC3E,EAAA,IAAI,QAAQ,IAAA,IAAQ,OAAO,QAAQ,QAAA,IAAY,EAAE,+BAA+B,GAAA,CAAA,EAAM;AACpF,IAAA,IAAI;AACF,MAAC,GAAA,CAAgC,2BAA2B,CAAA,GAAI,IAAA;AAAA,IAClE,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAMO,IAAM,sBAAA,GAAN,cAAqC,KAAA,CAAM;AAAA,EAChD,CAAU,2BAA2B;AAAA,EACrC,WAAA,CAAY,SAAiB,IAAA,EAA0B;AACrD,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AACZ,IAAA,IAAA,CAAK,2BAA2B,CAAA,GAAI,IAAA;AAAA,EACtC;AACF","file":"chunk-SDNGG6FB.js","sourcesContent":["/**\n * The driver-side contract for classifying a connect failure: how a thrower\n * says which {@link ConnectorErrorKind} its error is. Read by the manager's\n * `classifyConnectError` (`classify-connect-error.ts`) into the `errorKind`\n * field of `connector_status` error events.\n *\n * Depends on nothing but `types`, so the `connectors-shared` subpath can\n * re-export it to out-of-tree drivers.\n *\n * @docLink packages/connectors/concepts#connector-manager\n */\n\nimport { CONNECTOR_ERROR_KINDS, type ConnectorErrorKind } from \"@skaile/workspaces/types\";\n\n/**\n * The property a thrown error carries its kind on.\n *\n * Namespaced because it is read off any thrown object: a bare `errorKind` is\n * a name a library's own error may already use, and a value that happened to\n * read `\"config\"` would silently misroute the failure. A plain string key\n * rather than a symbol, so a driver with no import from this package can still\n * set it: `throw Object.assign(new Error(msg), { skaileConnectErrorKind: \"config\" })`.\n */\nexport const CONNECT_ERROR_KIND_PROPERTY = \"skaileConnectErrorKind\";\n\n/**\n * The shape of an error that declares its kind. For classes that must spell the\n * key out instead of computing it (see the git driver's `TokenMediatorError`):\n * `implements` keeps the literal tied to {@link CONNECT_ERROR_KIND_PROPERTY}.\n */\nexport type DeclaresConnectErrorKind = {\n readonly [CONNECT_ERROR_KIND_PROPERTY]: ConnectorErrorKind;\n};\n\n/** The kind `err` declares for itself, or `undefined` when it declares none (or an unknown one). */\nexport function declaredConnectErrorKind(err: unknown): ConnectorErrorKind | undefined {\n if (err === null || typeof err !== \"object\" || !(CONNECT_ERROR_KIND_PROPERTY in err)) {\n return undefined;\n }\n const value = (err as Record<string, unknown>)[CONNECT_ERROR_KIND_PROPERTY];\n return (CONNECTOR_ERROR_KINDS as readonly unknown[]).includes(value)\n ? (value as ConnectorErrorKind)\n : undefined;\n}\n\n/**\n * Stamp `kind` onto `err` unless it already declares one, and return it for\n * rethrowing. For throw sites that know what a failure means but throw an\n * error they did not construct (a failed `git` child, say).\n */\nexport function withConnectErrorKind<T>(err: T, kind: ConnectorErrorKind): T {\n if (err !== null && typeof err === \"object\" && !(CONNECT_ERROR_KIND_PROPERTY in err)) {\n try {\n (err as Record<string, unknown>)[CONNECT_ERROR_KIND_PROPERTY] = kind;\n } catch {\n // Frozen or sealed: unclassified beats replacing the real error with a TypeError.\n }\n }\n return err;\n}\n\n/**\n * An `Error` carrying an explicit {@link ConnectorErrorKind}, for throw sites\n * that build their own error.\n */\nexport class ClassifiedConnectError extends Error {\n readonly [CONNECT_ERROR_KIND_PROPERTY]: ConnectorErrorKind;\n constructor(message: string, kind: ConnectorErrorKind) {\n super(message);\n this.name = \"ClassifiedConnectError\";\n this[CONNECT_ERROR_KIND_PROPERTY] = kind;\n }\n}\n"]}
@@ -1,7 +1,8 @@
1
- import { resolveAuthRef } from './chunk-KW7YIRYL.js';
2
- import { EventNormalizer } from './chunk-GVOPQBGM.js';
3
- import { resolveModelTier } from './chunk-VP2CACF2.js';
4
- import { createDriver } from './chunk-C2CYBRYJ.js';
1
+ import { declaredConnectErrorKind, ClassifiedConnectError, withConnectErrorKind } from './chunk-SDNGG6FB.js';
2
+ import { OAuthRequiredError, LegacyAuthGrammarError, resolveAuthRef } from './chunk-KW7YIRYL.js';
3
+ import { EventNormalizer } from './chunk-V7SHQXDI.js';
4
+ import { resolveModelTier } from './chunk-QVTROHEZ.js';
5
+ import { createDriver } from './chunk-KMFZVPYR.js';
5
6
  import { pluginRegistry } from './chunk-6E6PKKAD.js';
6
7
  import { computeStimulus } from './chunk-IFGTRL2I.js';
7
8
  import { interpolateNodeInstruction, resolveNodeBindings, getConsumedOutputSchema, validateConsumedNodeOutput, appendAttempt, resolveTerminalFailureStatus, remainingActiveExecutionMs, deriveCheckEvidence, computeFlowStateFromSnapshots, availableRouterFrontier, evaluateRouterSelection, routerSelectionOutput, planRouterSkips, unsettledRouterBranchIds, countFailedAttempts, hasAutomaticRetryBudget, persistedRouterSelection } from './chunk-NWZQMJTI.js';
@@ -9,7 +10,7 @@ import { INPUT_SCHEMA_SHAPES_HINT, coerceInputSchema } from './chunk-TIOT3ZOQ.js
9
10
  import { classifierDecision, withoutReservedClassifierFields, parseFlowDefinition } from './chunk-53ORCYPJ.js';
10
11
  import { describeStimulus, buildOrchestratorPrompt, renderSubpromptPrompt, renderStimulusPrompt } from './chunk-2D5BYAL6.js';
11
12
  import { deterministicNodeKindLabel, nodeInstruction, flowDefaults, isAgentNode, isGateNode, isCheckNode, nodeRequiresApproval, isSubFlowNode, isFunctionNode, isSubpromptNode, isRouterNode, isActiveRuntimeNode, nodeIsOptional, nodeLabel, nodeAssets } from './chunk-ELPR5XBG.js';
12
- import { withActivityLabelDefs } from './chunk-U4AA7MOV.js';
13
+ import { withActivityLabelDefs } from './chunk-QAH24E5U.js';
13
14
  import { processAlive } from './chunk-UJPVUN6H.js';
14
15
  import { withFsDeadline, tryWithFsDeadline, FsDeadlineError, fsDeadlineMs } from './chunk-MKZOK4JU.js';
15
16
  import { portableSpawn } from './chunk-KSIRR5PL.js';
@@ -734,6 +735,44 @@ function runIsolatedPrompt(driver, prompt) {
734
735
  driver.prompt(prompt).catch(done);
735
736
  });
736
737
  }
738
+
739
+ // connectors/src/connector-types.ts
740
+ var ConnectorFieldMissingError = class extends Error {
741
+ connectorId;
742
+ field;
743
+ triedRef;
744
+ availableProviders;
745
+ constructor(opts) {
746
+ super(
747
+ `Connector "${opts.connectorId}" is missing required field "${opts.field.key}" (tried: ${opts.triedRef || "(none)"}). Available providers: ${opts.availableProviders.join(", ") || "(none)"}`
748
+ );
749
+ this.name = "ConnectorFieldMissingError";
750
+ this.connectorId = opts.connectorId;
751
+ this.field = opts.field;
752
+ this.triedRef = opts.triedRef;
753
+ this.availableProviders = opts.availableProviders;
754
+ }
755
+ };
756
+ var ConnectorStartupError = class extends Error {
757
+ report;
758
+ failedReadWrite;
759
+ constructor(message, report, failedReadWrite) {
760
+ super(message);
761
+ this.name = "ConnectorStartupError";
762
+ this.report = report;
763
+ this.failedReadWrite = failedReadWrite;
764
+ }
765
+ };
766
+
767
+ // connectors/src/classify-connect-error.ts
768
+ function classifyConnectError(err) {
769
+ const declared = declaredConnectErrorKind(err);
770
+ if (declared) return declared;
771
+ if (err instanceof OAuthRequiredError) return "credential";
772
+ if (err instanceof ConnectorFieldMissingError) return "config";
773
+ if (err instanceof LegacyAuthGrammarError) return "config";
774
+ return void 0;
775
+ }
737
776
  var execFileAsync = promisify(execFile);
738
777
  var GIT_REV_PARSE_TIMEOUT_MS = 15e3;
739
778
  var DeployConnector = class extends AbstractConnector {
@@ -1663,6 +1702,15 @@ async function clearStaleIndexLock(targetDir, log) {
1663
1702
  log.warn("removed an abandoned .git/index.lock", { lockPath, ageMs });
1664
1703
  }
1665
1704
  }
1705
+ function isIndexLockFailure(err) {
1706
+ const stderr = err?.stderr;
1707
+ return typeof stderr === "string" && /index\.lock/.test(stderr);
1708
+ }
1709
+ function gitLocalCheckout(args, cwd) {
1710
+ return git(["checkout", ...args], cwd).catch((err) => {
1711
+ throw typeof err?.code === "number" ? withConnectErrorKind(err, "repo-state") : err;
1712
+ });
1713
+ }
1666
1714
  async function syncSubmodules(cwd, log) {
1667
1715
  if (!await pathExists(join(cwd, ".gitmodules"))) return;
1668
1716
  try {
@@ -1743,6 +1791,8 @@ async function commitAll(cwd, message) {
1743
1791
  return gitCommitting(["commit", "-m", message], cwd);
1744
1792
  }
1745
1793
  var TokenMediatorError = class extends Error {
1794
+ /** Every mediator refusal is fixed where the credential lives, whatever its code. */
1795
+ skaileConnectErrorKind = "credential";
1746
1796
  code;
1747
1797
  constructor(message, code, connectorId) {
1748
1798
  super(`Git connector '${connectorId}': backend mediator ${code} \u2014 ${message}`);
@@ -1804,10 +1854,10 @@ var GitConnector = class extends AbstractConnector {
1804
1854
  let credentialAlignmentAttempted = false;
1805
1855
  if (!url) {
1806
1856
  this.log.error("connect failed: missing mount.source URL", void 0);
1807
- throw new Error("Git connector requires a mount.source URL");
1857
+ throw new ClassifiedConnectError("Git connector requires a mount.source URL", "config");
1808
1858
  }
1809
1859
  if (!isValidGitRefOrSha(branch)) {
1810
- throw new Error(`Git connector: invalid branch name "${branch}"`);
1860
+ throw new ClassifiedConnectError(`Git connector: invalid branch name "${branch}"`, "config");
1811
1861
  }
1812
1862
  try {
1813
1863
  this.log.info("mount start", { url, branch, targetDir });
@@ -1888,6 +1938,7 @@ var GitConnector = class extends AbstractConnector {
1888
1938
  }
1889
1939
  }
1890
1940
  this.registerUnavailableCredentialHelper(declaration, credentialScopeUrl, err);
1941
+ if (isIndexLockFailure(err)) withConnectErrorKind(err, "repo-state");
1891
1942
  throw err;
1892
1943
  }
1893
1944
  }
@@ -1976,11 +2027,14 @@ var GitConnector = class extends AbstractConnector {
1976
2027
  async checkoutSessionBranch(state, session, targetDir) {
1977
2028
  const sessionBranch = `${session.branchPrefix}${session.slug}`;
1978
2029
  if (!isValidGitRefOrSha(sessionBranch)) {
1979
- throw new Error(`Git connector: invalid session branch name "${sessionBranch}"`);
2030
+ throw new ClassifiedConnectError(
2031
+ `Git connector: invalid session branch name "${sessionBranch}"`,
2032
+ "config"
2033
+ );
1980
2034
  }
1981
2035
  let created = false;
1982
2036
  if (await localBranchExists(sessionBranch, targetDir)) {
1983
- await git(["checkout", sessionBranch], targetDir);
2037
+ await gitLocalCheckout([sessionBranch], targetDir);
1984
2038
  this.log.info("reusing existing local session branch", { sessionBranch });
1985
2039
  } else {
1986
2040
  let originHasBranch = false;
@@ -1990,9 +2044,9 @@ var GitConnector = class extends AbstractConnector {
1990
2044
  } catch {
1991
2045
  }
1992
2046
  if (originHasBranch) {
1993
- await git(["checkout", "-B", sessionBranch, `origin/${sessionBranch}`], targetDir);
2047
+ await gitLocalCheckout(["-B", sessionBranch, `origin/${sessionBranch}`], targetDir);
1994
2048
  } else if (!await this.branchFromRef(session, sessionBranch, targetDir)) {
1995
- await git(["checkout", "-b", sessionBranch], targetDir);
2049
+ await gitLocalCheckout(["-b", sessionBranch], targetDir);
1996
2050
  created = true;
1997
2051
  } else {
1998
2052
  created = true;
@@ -2312,8 +2366,9 @@ var GitConnector = class extends AbstractConnector {
2312
2366
  }
2313
2367
  if (authRef.kind === "backend") {
2314
2368
  if (!tokenMediator) {
2315
- throw new Error(
2316
- `Connector '${declaration.id}' uses 'auth: backend' but no token mediator is wired (standalone CLI does not have one \u2014 use 'pat:env:NAME' instead).`
2369
+ throw new ClassifiedConnectError(
2370
+ `Connector '${declaration.id}' uses 'auth: backend' but no token mediator is wired (standalone CLI does not have one \u2014 use 'pat:env:NAME' instead).`,
2371
+ "config"
2317
2372
  );
2318
2373
  }
2319
2374
  const result = await tokenMediator({ connectorId: declaration.id, reason: "initial" });
@@ -2342,8 +2397,9 @@ var GitConnector = class extends AbstractConnector {
2342
2397
  token = inner;
2343
2398
  }
2344
2399
  if (!token) {
2345
- throw new Error(
2346
- `PAT auth ref '${authRef.raw}' did not resolve to a token. Provision '${authRef.value}' in the SecretProviderChain.`
2400
+ throw new ClassifiedConnectError(
2401
+ `PAT auth ref '${authRef.raw}' did not resolve to a token. Provision '${authRef.value}' in the SecretProviderChain.`,
2402
+ "credential"
2347
2403
  );
2348
2404
  }
2349
2405
  return { authRef, token, expiresAt: null };
@@ -6261,34 +6317,6 @@ function ensureBuiltinsRegistered() {
6261
6317
  }
6262
6318
  }
6263
6319
 
6264
- // connectors/src/connector-types.ts
6265
- var ConnectorFieldMissingError = class extends Error {
6266
- connectorId;
6267
- field;
6268
- triedRef;
6269
- availableProviders;
6270
- constructor(opts) {
6271
- super(
6272
- `Connector "${opts.connectorId}" is missing required field "${opts.field.key}" (tried: ${opts.triedRef || "(none)"}). Available providers: ${opts.availableProviders.join(", ") || "(none)"}`
6273
- );
6274
- this.name = "ConnectorFieldMissingError";
6275
- this.connectorId = opts.connectorId;
6276
- this.field = opts.field;
6277
- this.triedRef = opts.triedRef;
6278
- this.availableProviders = opts.availableProviders;
6279
- }
6280
- };
6281
- var ConnectorStartupError = class extends Error {
6282
- report;
6283
- failedReadWrite;
6284
- constructor(message, report, failedReadWrite) {
6285
- super(message);
6286
- this.name = "ConnectorStartupError";
6287
- this.report = report;
6288
- this.failedReadWrite = failedReadWrite;
6289
- }
6290
- };
6291
-
6292
6320
  // connectors/src/connector-manager.ts
6293
6321
  var KNOWN_PREFIXES = ["env:", "forge:", "op:", "kp:", "oauth:"];
6294
6322
  function hasKnownPrefix(ref) {
@@ -6491,16 +6519,18 @@ var ConnectorManager = class {
6491
6519
  if (registered) return registered;
6492
6520
  const entry = this.catalogEntries.find((e) => e.kind === "connector" && e.name === driver);
6493
6521
  if (!entry) {
6494
- throw new Error(
6495
- `Unknown connector: "${driver}". Run 'skaile search connector' to see available connectors.`
6522
+ throw new ClassifiedConnectError(
6523
+ `Unknown connector: "${driver}". Run 'skaile search connector' to see available connectors.`,
6524
+ "config"
6496
6525
  );
6497
6526
  }
6498
6527
  const entryPoint = entry.metadata?.entry ?? "./connector.ts";
6499
6528
  const connectorPath = resolve(dirname(entry.source), entryPoint);
6500
6529
  const mod = await import(connectorPath);
6501
6530
  if (typeof mod.createConnector !== "function") {
6502
- throw new Error(
6503
- `Connector "${driver}" at ${connectorPath} does not export createConnector()`
6531
+ throw new ClassifiedConnectError(
6532
+ `Connector "${driver}" at ${connectorPath} does not export createConnector()`,
6533
+ "config"
6504
6534
  );
6505
6535
  }
6506
6536
  const connector = mod.createConnector();
@@ -6535,8 +6565,9 @@ var ConnectorManager = class {
6535
6565
  const owner = this.mountTargets.get(absPath);
6536
6566
  if (owner === id) return;
6537
6567
  if (owner !== void 0) {
6538
- throw new Error(
6539
- `Mount target collision: connectors "${owner}" and "${id}" both resolve to "${absPath}". Each filesystem connector needs a distinct mount.target.`
6568
+ throw new ClassifiedConnectError(
6569
+ `Mount target collision: connectors "${owner}" and "${id}" both resolve to "${absPath}". Each filesystem connector needs a distinct mount.target.`,
6570
+ "config"
6540
6571
  );
6541
6572
  }
6542
6573
  for (const [otherPath, otherId] of this.mountTargets) {
@@ -6744,12 +6775,18 @@ var ConnectorManager = class {
6744
6775
  if (!this.active.has(decl.id)) this.releaseMountTarget(decl.id);
6745
6776
  const msg = err instanceof Error ? err.message : String(err);
6746
6777
  this.recordFailure(decl, msg);
6747
- this.mgrLog.error("connect failed", err, { id: decl.id, driver: decl.driver });
6778
+ const errorKind = classifyConnectError(err);
6779
+ this.mgrLog.error("connect failed", err, {
6780
+ id: decl.id,
6781
+ driver: decl.driver,
6782
+ ...errorKind ? { errorKind } : {}
6783
+ });
6748
6784
  this.opts.onStatusChange?.({
6749
6785
  type: "connector_status",
6750
6786
  connectorId: decl.id,
6751
6787
  status: "error",
6752
- error: msg
6788
+ error: msg,
6789
+ ...errorKind ? { errorKind } : {}
6753
6790
  });
6754
6791
  return {
6755
6792
  id: decl.id,
@@ -6834,11 +6871,13 @@ var ConnectorManager = class {
6834
6871
  this.releaseMountTarget(declaration.id);
6835
6872
  const msg = err instanceof Error ? err.message : String(err);
6836
6873
  this.recordFailure(declaration, msg);
6874
+ const errorKind = classifyConnectError(err);
6837
6875
  this.opts.onStatusChange?.({
6838
6876
  type: "connector_status",
6839
6877
  connectorId: declaration.id,
6840
6878
  status: "error",
6841
- error: msg
6879
+ error: msg,
6880
+ ...errorKind ? { errorKind } : {}
6842
6881
  });
6843
6882
  throw err;
6844
6883
  }
@@ -11081,6 +11120,6 @@ function describeFlowOperations() {
11081
11120
  return new FlowAdapter().tools.describeOperations({ access: "read-write" });
11082
11121
  }
11083
11122
 
11084
- export { AbstractConnector, BUILTIN_CONNECTOR_CATALOG, BoxConnector, ClassifierSubpromptRunner, ConnectorFieldMissingError, ConnectorManager, ConnectorStartupError, DeployConnector, DevServerConnector, FlowAdapter, GitConnector, GmailConnector, GoogleDriveConnector, LocalConnector, LogBuffer, MAX_REARM_MS, MIN_REFRESH_DELAY_MS, ManagedGitconfigCollisionError, MattermostConnector, MemoryConnector, MinIOConnector, NO_ACTIVE_FLOW_ERROR, PortPool, PostgresConnector, REFRESH_LEAD_MS, S3Connector, SQLiteConnector, SessionInlineSubFlowRunner, SessionNodeExecutor, SessionSubpromptRunner, SharePointConnector, StaticServerConnector, TunnelConnector, WebDAVConnector, XStateConnector, XStateStoreConnector, __test, atomicReplaceCredential, buildConnectorPromptSection, buildConnectorToolDefs, buildFlowPromptEvent, buildFlowToolDefs, buildLazyFlowToolDefs, buildLazySdkFlowTools, buildSdkConnectorTools, buildSdkFlowTools, classifierQuestion, createConnector, createConnector10, createConnector11, createConnector12, createConnector13, createConnector14, createConnector15, createConnector16, createConnector17, createConnector18, createConnector19, createConnector2, createConnector20, createConnector3, createConnector4, createConnector5, createConnector6, createConnector7, createConnector8, createConnector9, createFsWatcher, createWorktree, defaultSpawn, describeFlowOperations, driveOrchestratorTurn, ensureDirMode, ensureFleetMounted, ensureRefreshAttemptStamp, findGitRoot, findMissingPackages, getConnector, installNpmPackages, isFleetManaged, isPackageResolvable, listConnectors, listWorktrees, readGitSyncStatus, registerBuiltinConnectors, removeMountBlock, removeUnavailableMountBlock, renderCredentialHelperScript, tryGetConnector, worktreeRegistry, writeHelperScript, writeMountBlock, writeUnavailableMountBlock };
11085
- //# sourceMappingURL=chunk-Y5E6LHSQ.js.map
11086
- //# sourceMappingURL=chunk-Y5E6LHSQ.js.map
11123
+ export { AbstractConnector, BUILTIN_CONNECTOR_CATALOG, BoxConnector, ClassifierSubpromptRunner, ConnectorFieldMissingError, ConnectorManager, ConnectorStartupError, DeployConnector, DevServerConnector, FlowAdapter, GitConnector, GmailConnector, GoogleDriveConnector, LocalConnector, LogBuffer, MAX_REARM_MS, MIN_REFRESH_DELAY_MS, ManagedGitconfigCollisionError, MattermostConnector, MemoryConnector, MinIOConnector, NO_ACTIVE_FLOW_ERROR, PortPool, PostgresConnector, REFRESH_LEAD_MS, S3Connector, SQLiteConnector, SessionInlineSubFlowRunner, SessionNodeExecutor, SessionSubpromptRunner, SharePointConnector, StaticServerConnector, TunnelConnector, WebDAVConnector, XStateConnector, XStateStoreConnector, __test, atomicReplaceCredential, buildConnectorPromptSection, buildConnectorToolDefs, buildFlowPromptEvent, buildFlowToolDefs, buildLazyFlowToolDefs, buildLazySdkFlowTools, buildSdkConnectorTools, buildSdkFlowTools, classifierQuestion, classifyConnectError, createConnector, createConnector10, createConnector11, createConnector12, createConnector13, createConnector14, createConnector15, createConnector16, createConnector17, createConnector18, createConnector19, createConnector2, createConnector20, createConnector3, createConnector4, createConnector5, createConnector6, createConnector7, createConnector8, createConnector9, createFsWatcher, createWorktree, defaultSpawn, describeFlowOperations, driveOrchestratorTurn, ensureDirMode, ensureFleetMounted, ensureRefreshAttemptStamp, findGitRoot, findMissingPackages, getConnector, installNpmPackages, isFleetManaged, isPackageResolvable, listConnectors, listWorktrees, readGitSyncStatus, registerBuiltinConnectors, removeMountBlock, removeUnavailableMountBlock, renderCredentialHelperScript, tryGetConnector, worktreeRegistry, writeHelperScript, writeMountBlock, writeUnavailableMountBlock };
11124
+ //# sourceMappingURL=chunk-TRGMQUAZ.js.map
11125
+ //# sourceMappingURL=chunk-TRGMQUAZ.js.map