@skaile/workspaces 4.5.1 → 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.
- package/CHANGELOG.md +12 -0
- package/dist/app-sdk/index.js +1 -1
- package/dist/{asset-feeds-UQDXXKYK.js → asset-feeds-3XUEJHLJ.js} +4 -4
- package/dist/{asset-feeds-UQDXXKYK.js.map → asset-feeds-3XUEJHLJ.js.map} +1 -1
- package/dist/asset-manager/index.js +1 -1
- package/dist/bridge/drivers/claude-sdk.js +4 -4
- package/dist/bridge/drivers/codex.js +2 -2
- package/dist/bridge/drivers/continue.js +2 -2
- package/dist/bridge/drivers/echo.js +3 -3
- package/dist/bridge/drivers/gemini.js +4 -4
- package/dist/bridge/drivers/goose.js +2 -2
- package/dist/bridge/drivers/omp.js +1 -1
- package/dist/bridge/drivers/opencode.js +2 -2
- package/dist/bridge/drivers/qwen.js +4 -4
- package/dist/bridge/index.js +5 -5
- package/dist/{chunk-WIBL34ZS.js → chunk-2CFREMKM.js} +3 -3
- package/dist/{chunk-WIBL34ZS.js.map → chunk-2CFREMKM.js.map} +1 -1
- package/dist/{chunk-7ZFC3E2C.js → chunk-2HZJKDLG.js} +2 -2
- package/dist/{chunk-7ZFC3E2C.js.map → chunk-2HZJKDLG.js.map} +1 -1
- package/dist/{chunk-NOH5UDO7.js → chunk-3GKBSHUG.js} +3 -3
- package/dist/{chunk-NOH5UDO7.js.map → chunk-3GKBSHUG.js.map} +1 -1
- package/dist/{chunk-RBQOLTC4.js → chunk-5CDL6VZQ.js} +6 -6
- package/dist/{chunk-RBQOLTC4.js.map → chunk-5CDL6VZQ.js.map} +1 -1
- package/dist/{chunk-KIIH2T7W.js → chunk-63PBQN5U.js} +6 -6
- package/dist/{chunk-KIIH2T7W.js.map → chunk-63PBQN5U.js.map} +1 -1
- package/dist/{chunk-YVQZQGVW.js → chunk-6ZQU5WKJ.js} +3 -3
- package/dist/{chunk-YVQZQGVW.js.map → chunk-6ZQU5WKJ.js.map} +1 -1
- package/dist/{chunk-3OLCTLTH.js → chunk-7WVPAQPE.js} +3 -2
- package/dist/chunk-7WVPAQPE.js.map +1 -0
- package/dist/{chunk-JF77XKD7.js → chunk-CU32AWH5.js} +3 -3
- package/dist/{chunk-JF77XKD7.js.map → chunk-CU32AWH5.js.map} +1 -1
- package/dist/{chunk-GWSVMX53.js → chunk-D3332IMQ.js} +3 -3
- package/dist/{chunk-GWSVMX53.js.map → chunk-D3332IMQ.js.map} +1 -1
- package/dist/{chunk-QCXQXLS2.js → chunk-DXXIALYF.js} +3 -3
- package/dist/{chunk-QCXQXLS2.js.map → chunk-DXXIALYF.js.map} +1 -1
- package/dist/{chunk-F54V4XMH.js → chunk-EVVE4SL4.js} +3 -3
- package/dist/{chunk-F54V4XMH.js.map → chunk-EVVE4SL4.js.map} +1 -1
- package/dist/{chunk-C2CYBRYJ.js → chunk-KMFZVPYR.js} +2 -2
- package/dist/{chunk-C2CYBRYJ.js.map → chunk-KMFZVPYR.js.map} +1 -1
- package/dist/{chunk-U4AA7MOV.js → chunk-QAH24E5U.js} +6 -3
- package/dist/chunk-QAH24E5U.js.map +1 -0
- package/dist/{chunk-VP2CACF2.js → chunk-QVTROHEZ.js} +3 -3
- package/dist/{chunk-VP2CACF2.js.map → chunk-QVTROHEZ.js.map} +1 -1
- package/dist/{chunk-CNYIITSZ.js → chunk-R4OMDCGZ.js} +3 -3
- package/dist/{chunk-CNYIITSZ.js.map → chunk-R4OMDCGZ.js.map} +1 -1
- package/dist/{chunk-UHKFMUM2.js → chunk-SAXTWLXZ.js} +10 -10
- package/dist/{chunk-UHKFMUM2.js.map → chunk-SAXTWLXZ.js.map} +1 -1
- package/dist/chunk-SDNGG6FB.js +32 -0
- package/dist/chunk-SDNGG6FB.js.map +1 -0
- package/dist/{chunk-KY5VVPM2.js → chunk-TRGMQUAZ.js} +129 -66
- package/dist/chunk-TRGMQUAZ.js.map +1 -0
- package/dist/{chunk-GVOPQBGM.js → chunk-V7SHQXDI.js} +4 -4
- package/dist/{chunk-GVOPQBGM.js.map → chunk-V7SHQXDI.js.map} +1 -1
- package/dist/{chunk-PJP2TOCB.js → chunk-VZOUBMM4.js} +5 -5
- package/dist/{chunk-PJP2TOCB.js.map → chunk-VZOUBMM4.js.map} +1 -1
- package/dist/{chunk-LKAWUFZA.js → chunk-YNZ5FIFH.js} +2 -2
- package/dist/{chunk-LKAWUFZA.js.map → chunk-YNZ5FIFH.js.map} +1 -1
- package/dist/{chunk-XHNK67X7.js → chunk-ZGYPEVZW.js} +4 -4
- package/dist/{chunk-XHNK67X7.js.map → chunk-ZGYPEVZW.js.map} +1 -1
- package/dist/cli/index.js +35 -34
- package/dist/cli/index.js.map +1 -1
- package/dist/connectors/index.js +7 -6
- package/dist/connectors/src/classify-connect-error.d.ts +20 -0
- package/dist/connectors/src/classify-connect-error.d.ts.map +1 -0
- package/dist/connectors/src/connect-error-kind.d.ts +47 -0
- package/dist/connectors/src/connect-error-kind.d.ts.map +1 -0
- package/dist/connectors/src/connector-manager.d.ts.map +1 -1
- package/dist/connectors/src/index.d.ts +3 -0
- package/dist/connectors/src/index.d.ts.map +1 -1
- package/dist/connectors-shared/index.js +2 -0
- package/dist/connectors-shared/index.js.map +1 -1
- package/dist/connectors-shared/src/index.d.ts +7 -2
- package/dist/connectors-shared/src/index.d.ts.map +1 -1
- package/dist/{ensure-sources-FDDMDIDJ.js → ensure-sources-MFQDQPYL.js} +4 -4
- package/dist/{ensure-sources-FDDMDIDJ.js.map → ensure-sources-MFQDQPYL.js.map} +1 -1
- package/dist/factory-assets/connectors/box.js +7 -6
- package/dist/factory-assets/connectors/deploy.js +7 -6
- package/dist/factory-assets/connectors/devserver.js +7 -6
- package/dist/factory-assets/connectors/flow/adapter.js +7 -6
- package/dist/factory-assets/connectors/flow/run-flow.js +8 -7
- package/dist/factory-assets/connectors/flow.js +7 -6
- package/dist/factory-assets/connectors/git/driver.d.ts +24 -4
- package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/git.js +7 -6
- package/dist/factory-assets/connectors/gmail.js +7 -6
- package/dist/factory-assets/connectors/googledrive.js +7 -6
- package/dist/factory-assets/connectors/local.js +7 -6
- package/dist/factory-assets/connectors/mattermost.js +7 -6
- package/dist/factory-assets/connectors/memory.js +7 -6
- package/dist/factory-assets/connectors/minio.js +7 -6
- package/dist/factory-assets/connectors/postgres.js +7 -6
- package/dist/factory-assets/connectors/s3.js +7 -6
- package/dist/factory-assets/connectors/sharepoint.js +7 -6
- package/dist/factory-assets/connectors/sqlite.js +7 -6
- package/dist/factory-assets/connectors/static-server.js +7 -6
- package/dist/factory-assets/connectors/tunnel.js +7 -6
- package/dist/factory-assets/connectors/webdav.js +7 -6
- package/dist/factory-assets/connectors/xstate-store.js +7 -6
- package/dist/factory-assets/connectors/xstate.js +7 -6
- package/dist/{helpers-QWMKOP52.js → helpers-VQLLQ6HB.js} +4 -4
- package/dist/{helpers-QWMKOP52.js.map → helpers-VQLLQ6HB.js.map} +1 -1
- package/dist/{library-publish-GW7JXEPE.js → library-publish-73SFVNCE.js} +6 -6
- package/dist/{library-publish-GW7JXEPE.js.map → library-publish-73SFVNCE.js.map} +1 -1
- package/dist/{open-library-QVBKKXX5.js → open-library-QGTUQMUG.js} +5 -5
- package/dist/{open-library-QVBKKXX5.js.map → open-library-QGTUQMUG.js.map} +1 -1
- package/dist/{project-JEEMFZUN.js → project-LWS5PYIF.js} +5 -5
- package/dist/{project-JEEMFZUN.js.map → project-LWS5PYIF.js.map} +1 -1
- package/dist/runner/index.js +11 -10
- package/dist/sdk/asset-manager.js +1 -1
- package/dist/sdk/bridge.js +5 -5
- package/dist/sdk/index.js +11 -10
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/runner.js +11 -10
- package/dist/sdk/session.js +2 -2
- package/dist/sdk/store.js +1 -1
- package/dist/sdk/types.js +1 -1
- package/dist/session/index.js +2 -2
- package/dist/{setup-5UZ4VPI4.js → setup-EOJWDJK2.js} +10 -10
- package/dist/{setup-5UZ4VPI4.js.map → setup-EOJWDJK2.js.map} +1 -1
- package/dist/{source-WZICRPYZ.js → source-Q5IIYTRA.js} +6 -6
- package/dist/{source-WZICRPYZ.js.map → source-Q5IIYTRA.js.map} +1 -1
- package/dist/{source-manifest-publish-4Y47IQYN.js → source-manifest-publish-Z3WC4HA2.js} +7 -7
- package/dist/{source-manifest-publish-4Y47IQYN.js.map → source-manifest-publish-Z3WC4HA2.js.map} +1 -1
- package/dist/store/index.js +1 -1
- package/dist/store/src/resource-client.d.ts.map +1 -1
- package/dist/store/src/types.d.ts +3 -1
- package/dist/store/src/types.d.ts.map +1 -1
- package/dist/tui/index.js +11 -10
- package/dist/tui/index.js.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/src/events.d.ts +22 -0
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +2 -2
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-3OLCTLTH.js.map +0 -1
- package/dist/chunk-KY5VVPM2.js.map +0 -1
- package/dist/chunk-U4AA7MOV.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 {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
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-
|
|
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 {
|
|
@@ -1519,6 +1558,10 @@ function resolveGitConfig(args) {
|
|
|
1519
1558
|
};
|
|
1520
1559
|
}
|
|
1521
1560
|
var modeLog = createLogger({ kind: "connector", subkind: "git" });
|
|
1561
|
+
var REFRESH_LEAD_MS = 5 * 60 * 1e3;
|
|
1562
|
+
var MIN_REFRESH_DELAY_MS = 3e4;
|
|
1563
|
+
var TRANSIENT_REFRESH_RETRY_MS = 3e4;
|
|
1564
|
+
var MAX_REARM_MS = 24 * 24 * 60 * 60 * 1e3;
|
|
1522
1565
|
var execFileAsync2 = promisify(execFile);
|
|
1523
1566
|
function redactUrlAuth(text) {
|
|
1524
1567
|
return text.replace(/\/\/[^/\s]*@/g, "//***@");
|
|
@@ -1659,6 +1702,15 @@ async function clearStaleIndexLock(targetDir, log) {
|
|
|
1659
1702
|
log.warn("removed an abandoned .git/index.lock", { lockPath, ageMs });
|
|
1660
1703
|
}
|
|
1661
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
|
+
}
|
|
1662
1714
|
async function syncSubmodules(cwd, log) {
|
|
1663
1715
|
if (!await pathExists(join(cwd, ".gitmodules"))) return;
|
|
1664
1716
|
try {
|
|
@@ -1739,6 +1791,8 @@ async function commitAll(cwd, message) {
|
|
|
1739
1791
|
return gitCommitting(["commit", "-m", message], cwd);
|
|
1740
1792
|
}
|
|
1741
1793
|
var TokenMediatorError = class extends Error {
|
|
1794
|
+
/** Every mediator refusal is fixed where the credential lives, whatever its code. */
|
|
1795
|
+
skaileConnectErrorKind = "credential";
|
|
1742
1796
|
code;
|
|
1743
1797
|
constructor(message, code, connectorId) {
|
|
1744
1798
|
super(`Git connector '${connectorId}': backend mediator ${code} \u2014 ${message}`);
|
|
@@ -1800,10 +1854,10 @@ var GitConnector = class extends AbstractConnector {
|
|
|
1800
1854
|
let credentialAlignmentAttempted = false;
|
|
1801
1855
|
if (!url) {
|
|
1802
1856
|
this.log.error("connect failed: missing mount.source URL", void 0);
|
|
1803
|
-
throw new
|
|
1857
|
+
throw new ClassifiedConnectError("Git connector requires a mount.source URL", "config");
|
|
1804
1858
|
}
|
|
1805
1859
|
if (!isValidGitRefOrSha(branch)) {
|
|
1806
|
-
throw new
|
|
1860
|
+
throw new ClassifiedConnectError(`Git connector: invalid branch name "${branch}"`, "config");
|
|
1807
1861
|
}
|
|
1808
1862
|
try {
|
|
1809
1863
|
this.log.info("mount start", { url, branch, targetDir });
|
|
@@ -1884,6 +1938,7 @@ var GitConnector = class extends AbstractConnector {
|
|
|
1884
1938
|
}
|
|
1885
1939
|
}
|
|
1886
1940
|
this.registerUnavailableCredentialHelper(declaration, credentialScopeUrl, err);
|
|
1941
|
+
if (isIndexLockFailure(err)) withConnectErrorKind(err, "repo-state");
|
|
1887
1942
|
throw err;
|
|
1888
1943
|
}
|
|
1889
1944
|
}
|
|
@@ -1972,11 +2027,14 @@ var GitConnector = class extends AbstractConnector {
|
|
|
1972
2027
|
async checkoutSessionBranch(state, session, targetDir) {
|
|
1973
2028
|
const sessionBranch = `${session.branchPrefix}${session.slug}`;
|
|
1974
2029
|
if (!isValidGitRefOrSha(sessionBranch)) {
|
|
1975
|
-
throw new
|
|
2030
|
+
throw new ClassifiedConnectError(
|
|
2031
|
+
`Git connector: invalid session branch name "${sessionBranch}"`,
|
|
2032
|
+
"config"
|
|
2033
|
+
);
|
|
1976
2034
|
}
|
|
1977
2035
|
let created = false;
|
|
1978
2036
|
if (await localBranchExists(sessionBranch, targetDir)) {
|
|
1979
|
-
await
|
|
2037
|
+
await gitLocalCheckout([sessionBranch], targetDir);
|
|
1980
2038
|
this.log.info("reusing existing local session branch", { sessionBranch });
|
|
1981
2039
|
} else {
|
|
1982
2040
|
let originHasBranch = false;
|
|
@@ -1986,9 +2044,9 @@ var GitConnector = class extends AbstractConnector {
|
|
|
1986
2044
|
} catch {
|
|
1987
2045
|
}
|
|
1988
2046
|
if (originHasBranch) {
|
|
1989
|
-
await
|
|
2047
|
+
await gitLocalCheckout(["-B", sessionBranch, `origin/${sessionBranch}`], targetDir);
|
|
1990
2048
|
} else if (!await this.branchFromRef(session, sessionBranch, targetDir)) {
|
|
1991
|
-
await
|
|
2049
|
+
await gitLocalCheckout(["-b", sessionBranch], targetDir);
|
|
1992
2050
|
created = true;
|
|
1993
2051
|
} else {
|
|
1994
2052
|
created = true;
|
|
@@ -2308,8 +2366,9 @@ var GitConnector = class extends AbstractConnector {
|
|
|
2308
2366
|
}
|
|
2309
2367
|
if (authRef.kind === "backend") {
|
|
2310
2368
|
if (!tokenMediator) {
|
|
2311
|
-
throw new
|
|
2312
|
-
`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"
|
|
2313
2372
|
);
|
|
2314
2373
|
}
|
|
2315
2374
|
const result = await tokenMediator({ connectorId: declaration.id, reason: "initial" });
|
|
@@ -2338,8 +2397,9 @@ var GitConnector = class extends AbstractConnector {
|
|
|
2338
2397
|
token = inner;
|
|
2339
2398
|
}
|
|
2340
2399
|
if (!token) {
|
|
2341
|
-
throw new
|
|
2342
|
-
`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"
|
|
2343
2403
|
);
|
|
2344
2404
|
}
|
|
2345
2405
|
return { authRef, token, expiresAt: null };
|
|
@@ -2524,25 +2584,44 @@ var GitConnector = class extends AbstractConnector {
|
|
|
2524
2584
|
}
|
|
2525
2585
|
}
|
|
2526
2586
|
/**
|
|
2527
|
-
* Schedule the next refresh of the credential file
|
|
2587
|
+
* Schedule the next refresh of the credential file, {@link REFRESH_LEAD_MS}
|
|
2588
|
+
* before `expiresAt`.
|
|
2528
2589
|
*
|
|
2529
2590
|
* Cancels any existing timer first so re-connects (and the test harness)
|
|
2530
|
-
* do not double-fire.
|
|
2531
|
-
*
|
|
2532
|
-
*
|
|
2591
|
+
* do not double-fire. The delay is clamped into
|
|
2592
|
+
* [{@link MIN_REFRESH_DELAY_MS}, {@link MAX_REARM_MS}]: the floor stops a
|
|
2593
|
+
* mediator that keeps minting tokens inside the lead from re-minting every
|
|
2594
|
+
* second, and a delay above the cap is served as re-arms that mint nothing
|
|
2595
|
+
* until the real refresh point — `setTimeout` silently collapses anything
|
|
2596
|
+
* over 2^31-1 ms (~24.8d) to 1 ms, which would mint in a loop.
|
|
2533
2597
|
*/
|
|
2534
2598
|
scheduleRefresh(connectorId, state, expiresAt) {
|
|
2535
2599
|
if (state.refreshTimer) {
|
|
2536
2600
|
clearTimeout(state.refreshTimer);
|
|
2537
2601
|
state.refreshTimer = void 0;
|
|
2538
2602
|
}
|
|
2539
|
-
const
|
|
2540
|
-
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
|
|
2603
|
+
const delay = Math.max(
|
|
2604
|
+
MIN_REFRESH_DELAY_MS,
|
|
2605
|
+
expiresAt.getTime() - Date.now() - REFRESH_LEAD_MS
|
|
2606
|
+
);
|
|
2607
|
+
if (delay > MAX_REARM_MS) {
|
|
2608
|
+
this.log.info("refresh delay exceeds the re-arm cap; re-arming without a refresh", {
|
|
2609
|
+
connectorId,
|
|
2610
|
+
delayMs: delay,
|
|
2611
|
+
rearmMs: MAX_REARM_MS
|
|
2544
2612
|
});
|
|
2545
|
-
|
|
2613
|
+
state.refreshTimer = setTimeout(
|
|
2614
|
+
() => this.scheduleRefresh(connectorId, state, expiresAt),
|
|
2615
|
+
MAX_REARM_MS
|
|
2616
|
+
);
|
|
2617
|
+
} else {
|
|
2618
|
+
state.refreshTimer = setTimeout(() => {
|
|
2619
|
+
this.refreshManagedCredential(connectorId, state).catch((err) => {
|
|
2620
|
+
this.log.error("managed-gitconfig refresh failed", err, { connectorId });
|
|
2621
|
+
});
|
|
2622
|
+
}, delay);
|
|
2623
|
+
}
|
|
2624
|
+
state.refreshTimer.unref?.();
|
|
2546
2625
|
}
|
|
2547
2626
|
async refreshManagedCredential(connectorId, state) {
|
|
2548
2627
|
if (!state.tokenMediator) return;
|
|
@@ -2562,7 +2641,8 @@ var GitConnector = class extends AbstractConnector {
|
|
|
2562
2641
|
this.refreshManagedCredential(connectorId, state).catch((err) => {
|
|
2563
2642
|
this.log.error("managed-gitconfig refresh retry failed", err, { connectorId });
|
|
2564
2643
|
});
|
|
2565
|
-
},
|
|
2644
|
+
}, TRANSIENT_REFRESH_RETRY_MS);
|
|
2645
|
+
state.refreshTimer.unref?.();
|
|
2566
2646
|
}
|
|
2567
2647
|
return;
|
|
2568
2648
|
}
|
|
@@ -6237,34 +6317,6 @@ function ensureBuiltinsRegistered() {
|
|
|
6237
6317
|
}
|
|
6238
6318
|
}
|
|
6239
6319
|
|
|
6240
|
-
// connectors/src/connector-types.ts
|
|
6241
|
-
var ConnectorFieldMissingError = class extends Error {
|
|
6242
|
-
connectorId;
|
|
6243
|
-
field;
|
|
6244
|
-
triedRef;
|
|
6245
|
-
availableProviders;
|
|
6246
|
-
constructor(opts) {
|
|
6247
|
-
super(
|
|
6248
|
-
`Connector "${opts.connectorId}" is missing required field "${opts.field.key}" (tried: ${opts.triedRef || "(none)"}). Available providers: ${opts.availableProviders.join(", ") || "(none)"}`
|
|
6249
|
-
);
|
|
6250
|
-
this.name = "ConnectorFieldMissingError";
|
|
6251
|
-
this.connectorId = opts.connectorId;
|
|
6252
|
-
this.field = opts.field;
|
|
6253
|
-
this.triedRef = opts.triedRef;
|
|
6254
|
-
this.availableProviders = opts.availableProviders;
|
|
6255
|
-
}
|
|
6256
|
-
};
|
|
6257
|
-
var ConnectorStartupError = class extends Error {
|
|
6258
|
-
report;
|
|
6259
|
-
failedReadWrite;
|
|
6260
|
-
constructor(message, report, failedReadWrite) {
|
|
6261
|
-
super(message);
|
|
6262
|
-
this.name = "ConnectorStartupError";
|
|
6263
|
-
this.report = report;
|
|
6264
|
-
this.failedReadWrite = failedReadWrite;
|
|
6265
|
-
}
|
|
6266
|
-
};
|
|
6267
|
-
|
|
6268
6320
|
// connectors/src/connector-manager.ts
|
|
6269
6321
|
var KNOWN_PREFIXES = ["env:", "forge:", "op:", "kp:", "oauth:"];
|
|
6270
6322
|
function hasKnownPrefix(ref) {
|
|
@@ -6467,16 +6519,18 @@ var ConnectorManager = class {
|
|
|
6467
6519
|
if (registered) return registered;
|
|
6468
6520
|
const entry = this.catalogEntries.find((e) => e.kind === "connector" && e.name === driver);
|
|
6469
6521
|
if (!entry) {
|
|
6470
|
-
throw new
|
|
6471
|
-
`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"
|
|
6472
6525
|
);
|
|
6473
6526
|
}
|
|
6474
6527
|
const entryPoint = entry.metadata?.entry ?? "./connector.ts";
|
|
6475
6528
|
const connectorPath = resolve(dirname(entry.source), entryPoint);
|
|
6476
6529
|
const mod = await import(connectorPath);
|
|
6477
6530
|
if (typeof mod.createConnector !== "function") {
|
|
6478
|
-
throw new
|
|
6479
|
-
`Connector "${driver}" at ${connectorPath} does not export createConnector()
|
|
6531
|
+
throw new ClassifiedConnectError(
|
|
6532
|
+
`Connector "${driver}" at ${connectorPath} does not export createConnector()`,
|
|
6533
|
+
"config"
|
|
6480
6534
|
);
|
|
6481
6535
|
}
|
|
6482
6536
|
const connector = mod.createConnector();
|
|
@@ -6511,8 +6565,9 @@ var ConnectorManager = class {
|
|
|
6511
6565
|
const owner = this.mountTargets.get(absPath);
|
|
6512
6566
|
if (owner === id) return;
|
|
6513
6567
|
if (owner !== void 0) {
|
|
6514
|
-
throw new
|
|
6515
|
-
`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"
|
|
6516
6571
|
);
|
|
6517
6572
|
}
|
|
6518
6573
|
for (const [otherPath, otherId] of this.mountTargets) {
|
|
@@ -6720,12 +6775,18 @@ var ConnectorManager = class {
|
|
|
6720
6775
|
if (!this.active.has(decl.id)) this.releaseMountTarget(decl.id);
|
|
6721
6776
|
const msg = err instanceof Error ? err.message : String(err);
|
|
6722
6777
|
this.recordFailure(decl, msg);
|
|
6723
|
-
|
|
6778
|
+
const errorKind = classifyConnectError(err);
|
|
6779
|
+
this.mgrLog.error("connect failed", err, {
|
|
6780
|
+
id: decl.id,
|
|
6781
|
+
driver: decl.driver,
|
|
6782
|
+
...errorKind ? { errorKind } : {}
|
|
6783
|
+
});
|
|
6724
6784
|
this.opts.onStatusChange?.({
|
|
6725
6785
|
type: "connector_status",
|
|
6726
6786
|
connectorId: decl.id,
|
|
6727
6787
|
status: "error",
|
|
6728
|
-
error: msg
|
|
6788
|
+
error: msg,
|
|
6789
|
+
...errorKind ? { errorKind } : {}
|
|
6729
6790
|
});
|
|
6730
6791
|
return {
|
|
6731
6792
|
id: decl.id,
|
|
@@ -6810,11 +6871,13 @@ var ConnectorManager = class {
|
|
|
6810
6871
|
this.releaseMountTarget(declaration.id);
|
|
6811
6872
|
const msg = err instanceof Error ? err.message : String(err);
|
|
6812
6873
|
this.recordFailure(declaration, msg);
|
|
6874
|
+
const errorKind = classifyConnectError(err);
|
|
6813
6875
|
this.opts.onStatusChange?.({
|
|
6814
6876
|
type: "connector_status",
|
|
6815
6877
|
connectorId: declaration.id,
|
|
6816
6878
|
status: "error",
|
|
6817
|
-
error: msg
|
|
6879
|
+
error: msg,
|
|
6880
|
+
...errorKind ? { errorKind } : {}
|
|
6818
6881
|
});
|
|
6819
6882
|
throw err;
|
|
6820
6883
|
}
|
|
@@ -11057,6 +11120,6 @@ function describeFlowOperations() {
|
|
|
11057
11120
|
return new FlowAdapter().tools.describeOperations({ access: "read-write" });
|
|
11058
11121
|
}
|
|
11059
11122
|
|
|
11060
|
-
export { AbstractConnector, BUILTIN_CONNECTOR_CATALOG, BoxConnector, ClassifierSubpromptRunner, ConnectorFieldMissingError, ConnectorManager, ConnectorStartupError, DeployConnector, DevServerConnector, FlowAdapter, GitConnector, GmailConnector, GoogleDriveConnector, LocalConnector, LogBuffer, ManagedGitconfigCollisionError, MattermostConnector, MemoryConnector, MinIOConnector, NO_ACTIVE_FLOW_ERROR, PortPool, PostgresConnector, 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 };
|
|
11061
|
-
//# sourceMappingURL=chunk-
|
|
11062
|
-
//# sourceMappingURL=chunk-
|
|
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
|