@skaile/workspaces 4.34.0 → 4.36.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 +42 -0
- package/dist/{asset-feeds-EIHLRBUG.js → asset-feeds-SJELMLNK.js} +10 -10
- package/dist/{asset-feeds-EIHLRBUG.js.map → asset-feeds-SJELMLNK.js.map} +1 -1
- package/dist/asset-manager/catalog-deployer.js +5 -5
- package/dist/asset-manager/index.js +10 -10
- package/dist/asset-manager/installer.js +7 -7
- package/dist/asset-manager/renderers.js +2 -2
- package/dist/asset-manager/src/index.d.ts +18 -0
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/mcp-config.d.ts.map +1 -1
- package/dist/bridge/drivers/claude-sdk.js +12 -9
- package/dist/bridge/drivers/claude-sdk.js.map +1 -1
- package/dist/bridge/drivers/codex.js +7 -7
- package/dist/bridge/drivers/continue.js +8 -8
- package/dist/bridge/drivers/echo.js +1 -1
- package/dist/bridge/drivers/gemini.js +6 -6
- package/dist/bridge/drivers/goose.js +8 -8
- package/dist/bridge/drivers/omp.js +7 -4
- package/dist/bridge/drivers/omp.js.map +1 -1
- package/dist/bridge/drivers/opencode.js +8 -8
- package/dist/bridge/drivers/qwen.js +6 -6
- package/dist/bridge/index.js +9 -9
- package/dist/bridge/src/drivers/claude-sdk.d.ts +1 -0
- package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
- package/dist/bridge/src/drivers/omp.d.ts +3 -2
- package/dist/bridge/src/drivers/omp.d.ts.map +1 -1
- package/dist/bridge/src/types.d.ts +8 -0
- package/dist/bridge/src/types.d.ts.map +1 -1
- package/dist/{chunk-TGE33MKN.js → chunk-2D3C4AJP.js} +4 -2
- package/dist/chunk-2D3C4AJP.js.map +1 -0
- package/dist/{chunk-JRSCSYRF.js → chunk-3CLUU45N.js} +7 -7
- package/dist/{chunk-JRSCSYRF.js.map → chunk-3CLUU45N.js.map} +1 -1
- package/dist/{chunk-T3YUSWVK.js → chunk-3SUWLY3H.js} +3 -3
- package/dist/{chunk-T3YUSWVK.js.map → chunk-3SUWLY3H.js.map} +1 -1
- package/dist/{chunk-NVQLE4MK.js → chunk-3VUHHDZW.js} +3 -3
- package/dist/{chunk-NVQLE4MK.js.map → chunk-3VUHHDZW.js.map} +1 -1
- package/dist/{chunk-LA7DCX2U.js → chunk-422WJ2QC.js} +4 -4
- package/dist/{chunk-LA7DCX2U.js.map → chunk-422WJ2QC.js.map} +1 -1
- package/dist/{chunk-Q6NDQ6BH.js → chunk-5JAO4MXA.js} +3 -3
- package/dist/{chunk-Q6NDQ6BH.js.map → chunk-5JAO4MXA.js.map} +1 -1
- package/dist/{chunk-ENV5DDQ7.js → chunk-5JJ5KQUM.js} +6 -6
- package/dist/{chunk-ENV5DDQ7.js.map → chunk-5JJ5KQUM.js.map} +1 -1
- package/dist/{chunk-AKBPLLFB.js → chunk-5L55HNNA.js} +5 -5
- package/dist/{chunk-AKBPLLFB.js.map → chunk-5L55HNNA.js.map} +1 -1
- package/dist/{chunk-DOF77WEV.js → chunk-BSIHJZKN.js} +6 -6
- package/dist/{chunk-DOF77WEV.js.map → chunk-BSIHJZKN.js.map} +1 -1
- package/dist/{chunk-VOXFI3XS.js → chunk-DFZDL62S.js} +4 -4
- package/dist/{chunk-VOXFI3XS.js.map → chunk-DFZDL62S.js.map} +1 -1
- package/dist/{chunk-3ELIPWCH.js → chunk-FJYOQMXT.js} +4 -4
- package/dist/{chunk-3ELIPWCH.js.map → chunk-FJYOQMXT.js.map} +1 -1
- package/dist/{chunk-7HJ6SFFF.js → chunk-FLGLODDF.js} +3 -3
- package/dist/{chunk-7HJ6SFFF.js.map → chunk-FLGLODDF.js.map} +1 -1
- package/dist/{chunk-JR2QQLAQ.js → chunk-FQE2NBUH.js} +7 -7
- package/dist/{chunk-JR2QQLAQ.js.map → chunk-FQE2NBUH.js.map} +1 -1
- package/dist/{chunk-OWN2W2IW.js → chunk-FWZTKSYI.js} +284 -19
- package/dist/chunk-FWZTKSYI.js.map +1 -0
- package/dist/{chunk-P2DLXBZK.js → chunk-H3KXUUYQ.js} +4 -4
- package/dist/{chunk-P2DLXBZK.js.map → chunk-H3KXUUYQ.js.map} +1 -1
- package/dist/{chunk-7LZJRVKJ.js → chunk-JRSLMZOT.js} +59 -11
- package/dist/chunk-JRSLMZOT.js.map +1 -0
- package/dist/{chunk-OS6256B2.js → chunk-KVDXSEQH.js} +317 -30
- package/dist/chunk-KVDXSEQH.js.map +1 -0
- package/dist/{chunk-FDZL5QVZ.js → chunk-L22WTIIC.js} +3 -3
- package/dist/{chunk-FDZL5QVZ.js.map → chunk-L22WTIIC.js.map} +1 -1
- package/dist/{chunk-N2UGG6WV.js → chunk-LIS5KT2X.js} +4 -4
- package/dist/{chunk-N2UGG6WV.js.map → chunk-LIS5KT2X.js.map} +1 -1
- package/dist/{chunk-Z2QI42YH.js → chunk-LVRKJW53.js} +22 -8
- package/dist/chunk-LVRKJW53.js.map +1 -0
- package/dist/{chunk-TB3LJ6NA.js → chunk-MDBAEEY5.js} +3 -3
- package/dist/{chunk-TB3LJ6NA.js.map → chunk-MDBAEEY5.js.map} +1 -1
- package/dist/{chunk-MTWZ7KHZ.js → chunk-MQU632EK.js} +11 -2
- package/dist/chunk-MQU632EK.js.map +1 -0
- package/dist/{chunk-C3256F2F.js → chunk-MRS5YHPI.js} +3 -3
- package/dist/{chunk-C3256F2F.js.map → chunk-MRS5YHPI.js.map} +1 -1
- package/dist/{chunk-7LBPHRRP.js → chunk-NFECHLV6.js} +3 -3
- package/dist/{chunk-7LBPHRRP.js.map → chunk-NFECHLV6.js.map} +1 -1
- package/dist/{chunk-GKTFGCQZ.js → chunk-NKYNDLCB.js} +3 -3
- package/dist/{chunk-GKTFGCQZ.js.map → chunk-NKYNDLCB.js.map} +1 -1
- package/dist/{chunk-LX3FKVLL.js → chunk-NTASYPDN.js} +3 -3
- package/dist/{chunk-LX3FKVLL.js.map → chunk-NTASYPDN.js.map} +1 -1
- package/dist/{chunk-WFRVQ2RY.js → chunk-NVNKPWL4.js} +10 -10
- package/dist/{chunk-WFRVQ2RY.js.map → chunk-NVNKPWL4.js.map} +1 -1
- package/dist/{chunk-75LXFKQR.js → chunk-O63QZ6XX.js} +4 -4
- package/dist/{chunk-75LXFKQR.js.map → chunk-O63QZ6XX.js.map} +1 -1
- package/dist/{chunk-7IH3RKKK.js → chunk-OEBAXTQ4.js} +3 -3
- package/dist/{chunk-7IH3RKKK.js.map → chunk-OEBAXTQ4.js.map} +1 -1
- package/dist/{chunk-RR4PJZLK.js → chunk-PKGI5QG7.js} +64 -8
- package/dist/chunk-PKGI5QG7.js.map +1 -0
- package/dist/{chunk-TGJIX77V.js → chunk-Q7SIVPM2.js} +3 -3
- package/dist/{chunk-TGJIX77V.js.map → chunk-Q7SIVPM2.js.map} +1 -1
- package/dist/{chunk-T762W5CI.js → chunk-QABZZROM.js} +3 -3
- package/dist/{chunk-T762W5CI.js.map → chunk-QABZZROM.js.map} +1 -1
- package/dist/{chunk-LRCSWOZO.js → chunk-QKXDRBLL.js} +5 -3
- package/dist/chunk-QKXDRBLL.js.map +1 -0
- package/dist/{chunk-DHLE66FV.js → chunk-S63H4HDH.js} +8 -4
- package/dist/chunk-S63H4HDH.js.map +1 -0
- package/dist/{chunk-2FBPAR2V.js → chunk-SQ7IN7KR.js} +3 -2
- package/dist/chunk-SQ7IN7KR.js.map +1 -0
- package/dist/{chunk-2EUW6NZD.js → chunk-TILISP6X.js} +2 -2
- package/dist/{chunk-2EUW6NZD.js.map → chunk-TILISP6X.js.map} +1 -1
- package/dist/{chunk-5YXKEM7Q.js → chunk-VCLN2IUM.js} +5 -5
- package/dist/{chunk-5YXKEM7Q.js.map → chunk-VCLN2IUM.js.map} +1 -1
- package/dist/{chunk-JRIU5GA7.js → chunk-VRFKCF3R.js} +4 -4
- package/dist/{chunk-JRIU5GA7.js.map → chunk-VRFKCF3R.js.map} +1 -1
- package/dist/{chunk-7ERHZQ7O.js → chunk-XN7DAZB7.js} +3 -3
- package/dist/{chunk-7ERHZQ7O.js.map → chunk-XN7DAZB7.js.map} +1 -1
- package/dist/{chunk-RHESVS7V.js → chunk-YOIENZHA.js} +6 -6
- package/dist/{chunk-RHESVS7V.js.map → chunk-YOIENZHA.js.map} +1 -1
- package/dist/cli/index.js +69 -61
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/commands/catalog.d.ts +7 -0
- package/dist/cli/src/commands/catalog.d.ts.map +1 -1
- package/dist/cli/src/commands/connector.d.ts.map +1 -1
- package/dist/connectors/config.js +3 -3
- package/dist/connectors/index.js +12 -12
- package/dist/connectors/src/config.d.ts.map +1 -1
- package/dist/connectors/src/connect-failure-carry-over.d.ts +38 -0
- package/dist/connectors/src/connect-failure-carry-over.d.ts.map +1 -0
- package/dist/connectors/src/connector-manager.d.ts +15 -0
- package/dist/connectors/src/connector-manager.d.ts.map +1 -1
- package/dist/connectors/src/connector-types.d.ts +7 -0
- package/dist/connectors/src/connector-types.d.ts.map +1 -1
- package/dist/connectors/src/index.d.ts +1 -0
- package/dist/connectors/src/index.d.ts.map +1 -1
- package/dist/connectors/src/materialized-connectors.d.ts.map +1 -1
- package/dist/core/index.js +4 -4
- package/dist/core/manifest.js +1 -1
- package/dist/core/runtime-assets.js +3 -3
- package/dist/core/src/manifest.d.ts.map +1 -1
- package/dist/core/src/workspace-config.d.ts +7 -0
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/workspace-config.js +2 -2
- package/dist/deploy/index.js +4 -4
- package/dist/discovery/index.js +3 -3
- package/dist/{ensure-sources-JR4QI2MY.js → ensure-sources-SYZO2HNP.js} +13 -13
- package/dist/{ensure-sources-JR4QI2MY.js.map → ensure-sources-SYZO2HNP.js.map} +1 -1
- package/dist/factory-assets/connectors/box.js +12 -12
- package/dist/factory-assets/connectors/deploy.js +12 -12
- package/dist/factory-assets/connectors/devserver.js +12 -12
- package/dist/factory-assets/connectors/flow/adapter.js +12 -12
- package/dist/factory-assets/connectors/flow/engine.js +5 -5
- package/dist/factory-assets/connectors/flow/run-flow.js +14 -14
- package/dist/factory-assets/connectors/flow.js +12 -12
- package/dist/factory-assets/connectors/git/CONNECTOR.md +1 -0
- package/dist/factory-assets/connectors/git/driver.d.ts +29 -0
- package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/git.js +12 -12
- package/dist/factory-assets/connectors/gmail.js +12 -12
- package/dist/factory-assets/connectors/googledrive.js +12 -12
- package/dist/factory-assets/connectors/local.js +12 -12
- package/dist/factory-assets/connectors/mattermost.js +12 -12
- package/dist/factory-assets/connectors/memory.js +12 -12
- package/dist/factory-assets/connectors/minio.js +12 -12
- package/dist/factory-assets/connectors/postgres.js +12 -12
- package/dist/factory-assets/connectors/s3.js +12 -12
- package/dist/factory-assets/connectors/sharepoint.js +12 -12
- package/dist/factory-assets/connectors/sqlite.js +12 -12
- package/dist/factory-assets/connectors/static-server.js +12 -12
- package/dist/factory-assets/connectors/tunnel.js +12 -12
- package/dist/factory-assets/connectors/webdav.js +12 -12
- package/dist/factory-assets/connectors/xstate-store.js +12 -12
- package/dist/factory-assets/connectors/xstate.js +12 -12
- package/dist/{flows-X7JFAVRR.js → flows-6MDMBQUZ.js} +9 -9
- package/dist/{flows-X7JFAVRR.js.map → flows-6MDMBQUZ.js.map} +1 -1
- package/dist/{helpers-HTET53KB.js → helpers-IMUCDNME.js} +13 -13
- package/dist/{helpers-HTET53KB.js.map → helpers-IMUCDNME.js.map} +1 -1
- package/dist/library/index.js +7 -7
- package/dist/{library-publish-T6KHQ3TE.js → library-publish-XAIAHKRL.js} +17 -17
- package/dist/{library-publish-T6KHQ3TE.js.map → library-publish-XAIAHKRL.js.map} +1 -1
- package/dist/{open-library-O5I2DAEK.js → open-library-6N3XZ2XL.js} +15 -15
- package/dist/{open-library-O5I2DAEK.js.map → open-library-6N3XZ2XL.js.map} +1 -1
- package/dist/{paths-OI5IIS22.js → paths-4MTICP3T.js} +7 -7
- package/dist/{paths-OI5IIS22.js.map → paths-4MTICP3T.js.map} +1 -1
- package/dist/{plugin-store-C67RLSPD.js → plugin-store-GQ4WQZJ2.js} +6 -6
- package/dist/{plugin-store-C67RLSPD.js.map → plugin-store-GQ4WQZJ2.js.map} +1 -1
- package/dist/{project-QIOXU2NS.js → project-HESTMGPU.js} +14 -14
- package/dist/{project-QIOXU2NS.js.map → project-HESTMGPU.js.map} +1 -1
- package/dist/resolver/index.js +5 -5
- package/dist/runner/index.js +21 -21
- package/dist/runner/src/capability-registry.d.ts +13 -0
- package/dist/runner/src/capability-registry.d.ts.map +1 -1
- package/dist/runner/src/compaction/orchestrator.d.ts +8 -0
- package/dist/runner/src/compaction/orchestrator.d.ts.map +1 -1
- package/dist/runner/src/compaction-gate.d.ts +64 -1
- package/dist/runner/src/compaction-gate.d.ts.map +1 -1
- package/dist/runner/src/driver-swap-gate.d.ts +17 -0
- package/dist/runner/src/driver-swap-gate.d.ts.map +1 -1
- package/dist/runner/src/external-mcp.d.ts +6 -0
- package/dist/runner/src/external-mcp.d.ts.map +1 -1
- package/dist/runner/src/mcp-pinned-ca.d.ts +8 -0
- package/dist/runner/src/mcp-pinned-ca.d.ts.map +1 -0
- package/dist/runner/src/prompt-turn-queue.d.ts +28 -0
- package/dist/runner/src/prompt-turn-queue.d.ts.map +1 -0
- package/dist/runner/src/resources.d.ts.map +1 -1
- package/dist/runner/src/serve.d.ts +46 -0
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/runner/src/session-stimulus.d.ts +5 -0
- package/dist/runner/src/session-stimulus.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +10 -10
- package/dist/sdk/bridge.js +9 -9
- package/dist/sdk/core.js +4 -4
- package/dist/sdk/flow.js +5 -5
- package/dist/sdk/index.js +21 -21
- package/dist/sdk/resolver.js +5 -5
- package/dist/sdk/runner.js +21 -21
- package/dist/sdk/session.js +1 -1
- package/dist/sdk/store.js +1 -1
- package/dist/session/index.js +1 -1
- package/dist/session/src/bounded-subscriber-transport.d.ts +11 -4
- package/dist/session/src/bounded-subscriber-transport.d.ts.map +1 -1
- package/dist/session/src/dispatcher.d.ts +5 -0
- package/dist/session/src/dispatcher.d.ts.map +1 -1
- package/dist/session/src/index.d.ts +1 -1
- package/dist/session/src/index.d.ts.map +1 -1
- package/dist/session/src/types.d.ts +20 -1
- package/dist/session/src/types.d.ts.map +1 -1
- package/dist/{setup-SSGPDDWL.js → setup-PQG5DH5Z.js} +18 -18
- package/dist/{setup-SSGPDDWL.js.map → setup-PQG5DH5Z.js.map} +1 -1
- package/dist/{skills-4YTVHMOH.js → skills-JHUY4DFE.js} +10 -10
- package/dist/{skills-4YTVHMOH.js.map → skills-JHUY4DFE.js.map} +1 -1
- package/dist/{source-NPU7ZWID.js → source-PNYNVVPM.js} +16 -16
- package/dist/{source-NPU7ZWID.js.map → source-PNYNVVPM.js.map} +1 -1
- package/dist/{source-manifest-publish-4EYDVPR3.js → source-manifest-publish-6O6H4T2P.js} +18 -18
- package/dist/{source-manifest-publish-4EYDVPR3.js.map → source-manifest-publish-6O6H4T2P.js.map} +1 -1
- package/dist/store/index.js +1 -1
- package/dist/store/src/store.d.ts +21 -1
- package/dist/store/src/store.d.ts.map +1 -1
- package/dist/tui/index.js +21 -21
- package/dist/types/manifests.js +1 -1
- package/dist/types/src/manifests/mcp-server.d.ts +1 -0
- package/dist/types/src/manifests/mcp-server.d.ts.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +10 -10
- package/dist/workspace-plugin/adapters/omp.js +7 -7
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-2FBPAR2V.js.map +0 -1
- package/dist/chunk-7LZJRVKJ.js.map +0 -1
- package/dist/chunk-DHLE66FV.js.map +0 -1
- package/dist/chunk-LRCSWOZO.js.map +0 -1
- package/dist/chunk-MTWZ7KHZ.js.map +0 -1
- package/dist/chunk-OS6256B2.js.map +0 -1
- package/dist/chunk-OWN2W2IW.js.map +0 -1
- package/dist/chunk-RR4PJZLK.js.map +0 -1
- package/dist/chunk-TGE33MKN.js.map +0 -1
- package/dist/chunk-Z2QI42YH.js.map +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { declaredConnectErrorKind, ClassifiedConnectError, withConnectErrorKind } from './chunk-ZWTCXL3H.js';
|
|
2
|
-
import { OAuthRequiredError, ConnectorFieldMissingError, LegacyAuthGrammarError, resolveAuthRef, readUnavailableMarker, ConnectorStartupError } from './chunk-
|
|
3
|
-
import { EventNormalizer } from './chunk-
|
|
4
|
-
import { resolveModelTier } from './chunk-
|
|
5
|
-
import { createDriver } from './chunk-
|
|
2
|
+
import { OAuthRequiredError, ConnectorFieldMissingError, LegacyAuthGrammarError, resolveAuthRef, readUnavailableMarker, ConnectorStartupError } from './chunk-S63H4HDH.js';
|
|
3
|
+
import { EventNormalizer } from './chunk-3VUHHDZW.js';
|
|
4
|
+
import { resolveModelTier } from './chunk-O63QZ6XX.js';
|
|
5
|
+
import { createDriver } from './chunk-MQU632EK.js';
|
|
6
6
|
import { pluginRegistry } from './chunk-6E6PKKAD.js';
|
|
7
7
|
import { computeStimulus } from './chunk-IFGTRL2I.js';
|
|
8
|
-
import { interpolateNodeInstruction, resolveNodeBindings, validateConsumedNodeOutput, appendAttempt, resolveTerminalFailureStatus, remainingActiveExecutionMs, deriveCheckEvidence, computeFlowStateFromSnapshots, availableRouterFrontier, evaluateRouterSelection, routerSelectionOutput, planRouterSkips, unsettledRouterBranchIds, countFailedAttempts, hasAutomaticRetryBudget, persistedRouterSelection } from './chunk-
|
|
8
|
+
import { interpolateNodeInstruction, resolveNodeBindings, validateConsumedNodeOutput, appendAttempt, resolveTerminalFailureStatus, remainingActiveExecutionMs, deriveCheckEvidence, computeFlowStateFromSnapshots, availableRouterFrontier, evaluateRouterSelection, routerSelectionOutput, planRouterSkips, unsettledRouterBranchIds, countFailedAttempts, hasAutomaticRetryBudget, persistedRouterSelection } from './chunk-FLGLODDF.js';
|
|
9
9
|
import { INPUT_SCHEMA_SHAPES_HINT, coerceInputSchema } from './chunk-YYH5EVPM.js';
|
|
10
10
|
import { parseFlowDefinition } from './chunk-DIQDYNXZ.js';
|
|
11
11
|
import { describeStimulus, buildOrchestratorPrompt, renderSubpromptPrompt, renderStimulusPrompt } from './chunk-K3IBZ2UZ.js';
|
|
@@ -13,7 +13,7 @@ import { deterministicNodeKindLabel, nodeInstruction, flowDefaults, isAgentNode,
|
|
|
13
13
|
import { classifierDecision, getConsumedOutputSchema, withoutReservedClassifierFields, FLOW_CAPTURE_CHANNELS, captureDestinationFieldName, invalidCaptureDestinationMessage } from './chunk-ORH2BZEM.js';
|
|
14
14
|
import { withActivityLabelDefs } from './chunk-JS7DCCDA.js';
|
|
15
15
|
import { processAlive } from './chunk-4GY63JU6.js';
|
|
16
|
-
import { withFsDeadline, tryWithFsDeadline, FsDeadlineError, fsDeadlineMs } from './chunk-
|
|
16
|
+
import { withFsDeadline, tryWithFsDeadline, FsDeadlineError, fsDeadlineMs } from './chunk-SQ7IN7KR.js';
|
|
17
17
|
import { portableSpawn } from './chunk-ICSCSM5D.js';
|
|
18
18
|
import { createLogger, redactCredentials } from './chunk-BOFL7GIF.js';
|
|
19
19
|
import { resolve, relative, sep, isAbsolute, join, dirname } from 'path';
|
|
@@ -1534,6 +1534,28 @@ function resolveGitConfig(args) {
|
|
|
1534
1534
|
lifecycle: parseLifecycleConfig(args.options, defaults.lifecycle)
|
|
1535
1535
|
};
|
|
1536
1536
|
}
|
|
1537
|
+
function applyReadOnly(config, options) {
|
|
1538
|
+
const rawSync = options?.sync ?? {};
|
|
1539
|
+
return {
|
|
1540
|
+
session: { ...config.session, enabled: false },
|
|
1541
|
+
sync: {
|
|
1542
|
+
fetchIntervalSec: rawSync.fetchIntervalSec != null ? config.sync.fetchIntervalSec : MODE_DEFAULTS.sync.sync.fetchIntervalSec,
|
|
1543
|
+
autoRebase: false,
|
|
1544
|
+
autoPull: true
|
|
1545
|
+
},
|
|
1546
|
+
lifecycle: {
|
|
1547
|
+
commitOnHibernate: false,
|
|
1548
|
+
pushOnHibernate: false,
|
|
1549
|
+
mergeOnClose: false,
|
|
1550
|
+
pushOnClose: false,
|
|
1551
|
+
autoCommitIdleMs: 0,
|
|
1552
|
+
pushAfterCommit: false,
|
|
1553
|
+
publishOnCreate: false
|
|
1554
|
+
}
|
|
1555
|
+
};
|
|
1556
|
+
}
|
|
1557
|
+
var READ_ONLY_PUSH_URL = "DISABLED";
|
|
1558
|
+
var READ_ONLY_HOOK_DETAIL = "read-only mount: nothing committed or pushed";
|
|
1537
1559
|
var modeLog = createLogger({ kind: "connector", subkind: "git" });
|
|
1538
1560
|
var REFRESH_LEAD_MS = 5 * 60 * 1e3;
|
|
1539
1561
|
var MIN_REFRESH_DELAY_MS = 3e4;
|
|
@@ -2072,6 +2094,7 @@ async function assertOriginIsMount(s, cwd, op) {
|
|
|
2072
2094
|
["remote", "get-url", "--push", "origin"]
|
|
2073
2095
|
]) {
|
|
2074
2096
|
const actual = await gitOrNull(args, cwd);
|
|
2097
|
+
if (s.readOnly && args.includes("--push") && actual === READ_ONLY_PUSH_URL) continue;
|
|
2075
2098
|
if (actual === null || comparableRemoteUrl(actual) !== expected) {
|
|
2076
2099
|
throw new Error(
|
|
2077
2100
|
`git ${op}: origin${args.includes("--push") ? " (push)" : ""} resolves to ${actual === null ? "nothing" : redactCredentials(actual)}, not this mount's remote ${expected}. Remove the pushurl / insteadOf / url override from the git config first.`
|
|
@@ -2461,10 +2484,9 @@ var GitConnector = class extends AbstractConnector {
|
|
|
2461
2484
|
this.log.info("mount start", { url, branch, targetDir });
|
|
2462
2485
|
this.clearUnavailableCredentialHelper(declaration.id, url);
|
|
2463
2486
|
const initial = await this.acquireInitialToken(declaration, secrets, tokenMediator);
|
|
2464
|
-
const
|
|
2465
|
-
|
|
2466
|
-
|
|
2467
|
-
});
|
|
2487
|
+
const readOnly = declaration.access === "read-only" && declaration.accessDefaulted !== true;
|
|
2488
|
+
const resolved = resolveGitConfig({ mode: declaration.mode, options: opts });
|
|
2489
|
+
const { session, sync, lifecycle } = readOnly ? applyReadOnly(resolved, opts) : resolved;
|
|
2468
2490
|
const state = {
|
|
2469
2491
|
url,
|
|
2470
2492
|
branch,
|
|
@@ -2474,7 +2496,8 @@ var GitConnector = class extends AbstractConnector {
|
|
|
2474
2496
|
sync,
|
|
2475
2497
|
lifecycle,
|
|
2476
2498
|
targetDir,
|
|
2477
|
-
tokenMediator: initial.authRef?.kind === "backend" ? tokenMediator : void 0
|
|
2499
|
+
tokenMediator: initial.authRef?.kind === "backend" ? tokenMediator : void 0,
|
|
2500
|
+
readOnly
|
|
2478
2501
|
};
|
|
2479
2502
|
await this.prepareCheckout(
|
|
2480
2503
|
targetDir,
|
|
@@ -2491,9 +2514,6 @@ var GitConnector = class extends AbstractConnector {
|
|
|
2491
2514
|
}
|
|
2492
2515
|
await this.checkoutSessionBranch(state, session, targetDir);
|
|
2493
2516
|
}
|
|
2494
|
-
if (sync.fetchIntervalSec > 0) {
|
|
2495
|
-
this.startPeriodicFetch(state, targetDir);
|
|
2496
|
-
}
|
|
2497
2517
|
if (declaration.mount?.exposeAccessToken === true) {
|
|
2498
2518
|
try {
|
|
2499
2519
|
if (initial.token && (url.startsWith("https://") || url.startsWith("http://")) && process.env.GIT_CONFIG_GLOBAL) {
|
|
@@ -2542,6 +2562,18 @@ var GitConnector = class extends AbstractConnector {
|
|
|
2542
2562
|
}
|
|
2543
2563
|
}
|
|
2544
2564
|
await ensureSkaileExcluded(targetDir, this.log);
|
|
2565
|
+
if (readOnly) {
|
|
2566
|
+
state.readOnlySaveOwed = await gitOrNull(["config", "--get", "remote.origin.pushurl"], targetDir) !== READ_ONLY_PUSH_URL;
|
|
2567
|
+
await this.withMountLock(
|
|
2568
|
+
state,
|
|
2569
|
+
() => this.refreshReadOnly(state, targetDir, { tolerateFetchFailure: true })
|
|
2570
|
+
);
|
|
2571
|
+
} else {
|
|
2572
|
+
await this.applyPushGuard(state, targetDir);
|
|
2573
|
+
}
|
|
2574
|
+
if (sync.fetchIntervalSec > 0) {
|
|
2575
|
+
this.startPeriodicFetch(state, targetDir);
|
|
2576
|
+
}
|
|
2545
2577
|
this.log.info("mount ok", {
|
|
2546
2578
|
targetDir,
|
|
2547
2579
|
activeBranch: state.activeBranch,
|
|
@@ -2852,6 +2884,9 @@ var GitConnector = class extends AbstractConnector {
|
|
|
2852
2884
|
* so a base branch that origin moved past is pushed rather than rejected.
|
|
2853
2885
|
*/
|
|
2854
2886
|
async pushActiveBranch(s, cwd) {
|
|
2887
|
+
if (s.readOnly) {
|
|
2888
|
+
throw new Error(`git push refused: this mount is read-only (branch ${s.activeBranch})`);
|
|
2889
|
+
}
|
|
2855
2890
|
if (s.activeBranch === s.branch) {
|
|
2856
2891
|
await integrateOriginBaseBranch(s.branch, cwd, s);
|
|
2857
2892
|
await gitRemote(["push", "origin", s.activeBranch], cwd, s, 6e4);
|
|
@@ -3011,6 +3046,11 @@ var GitConnector = class extends AbstractConnector {
|
|
|
3011
3046
|
return this.withMountLock(s, async () => {
|
|
3012
3047
|
this.log.debug("sync (pull) start", { branch: s.activeBranch });
|
|
3013
3048
|
try {
|
|
3049
|
+
if (s.readOnly) {
|
|
3050
|
+
await this.refreshReadOnly(s, handle.mountPath, { tolerateFetchFailure: false });
|
|
3051
|
+
this.log.debug("sync ok");
|
|
3052
|
+
return { filesWritten: 0, filesDeleted: 0, bytesTransferred: 0 };
|
|
3053
|
+
}
|
|
3014
3054
|
await pullByMerge(s.activeBranch, handle.mountPath, s, 6e4);
|
|
3015
3055
|
await syncSubmodules(handle.mountPath, this.log, s);
|
|
3016
3056
|
this.log.debug("sync ok");
|
|
@@ -3069,7 +3109,7 @@ var GitConnector = class extends AbstractConnector {
|
|
|
3069
3109
|
}
|
|
3070
3110
|
const cwd = handle.mountPath;
|
|
3071
3111
|
return this.withMountLock(s, async () => {
|
|
3072
|
-
const detail = await this.hibernateSave(s, cwd);
|
|
3112
|
+
const detail = s.readOnly ? READ_ONLY_HOOK_DETAIL : await this.hibernateSave(s, cwd);
|
|
3073
3113
|
const pushState = await this.readPushState(s, cwd);
|
|
3074
3114
|
return detail === void 0 ? { pushState } : { detail, pushState };
|
|
3075
3115
|
});
|
|
@@ -3217,6 +3257,7 @@ var GitConnector = class extends AbstractConnector {
|
|
|
3217
3257
|
const details = [];
|
|
3218
3258
|
return this.withMountLock(s, async () => {
|
|
3219
3259
|
try {
|
|
3260
|
+
if (s.readOnly) return READ_ONLY_HOOK_DETAIL;
|
|
3220
3261
|
const commitResult = await commitAll(handle.mountPath, `skaile: session close`, this.log);
|
|
3221
3262
|
if (commitResult) {
|
|
3222
3263
|
const sha = await git(["rev-parse", "--short", "HEAD"], handle.mountPath);
|
|
@@ -3908,6 +3949,145 @@ var GitConnector = class extends AbstractConnector {
|
|
|
3908
3949
|
});
|
|
3909
3950
|
}
|
|
3910
3951
|
}
|
|
3952
|
+
// ── Read-only mount ────────────────────────────────────────────────────────
|
|
3953
|
+
/**
|
|
3954
|
+
* Set `remote.origin.pushurl` to {@link READ_ONLY_PUSH_URL} on a read-only
|
|
3955
|
+
* mount, and remove it again (only that value) once the mount is read-write,
|
|
3956
|
+
* because the driver's own pushes go through `origin` and would hit it too.
|
|
3957
|
+
*/
|
|
3958
|
+
async applyPushGuard(s, cwd) {
|
|
3959
|
+
const current = await gitOrNull(["config", "--get", "remote.origin.pushurl"], cwd);
|
|
3960
|
+
if (s.readOnly) {
|
|
3961
|
+
if (current === READ_ONLY_PUSH_URL) return;
|
|
3962
|
+
await git(["config", "remote.origin.pushurl", READ_ONLY_PUSH_URL], cwd, 5e3);
|
|
3963
|
+
} else if (current === READ_ONLY_PUSH_URL) {
|
|
3964
|
+
await git(["config", "--unset", "remote.origin.pushurl"], cwd, 5e3);
|
|
3965
|
+
}
|
|
3966
|
+
}
|
|
3967
|
+
/**
|
|
3968
|
+
* Bring a read-only mount to origin's base branch tip and drop every local
|
|
3969
|
+
* change: edits, untracked files (ignored ones stay, so `.skaile/` and build
|
|
3970
|
+
* output survive), local commits, an unfinished merge or rebase, and a branch
|
|
3971
|
+
* switch. Replaces the pull, so the rebase and merge-conflict paths never run.
|
|
3972
|
+
*
|
|
3973
|
+
* With `tolerateFetchFailure` (connect), an unreachable origin is logged and
|
|
3974
|
+
* the checkout is reset to the last fetched `origin/<base>` instead, so a
|
|
3975
|
+
* mount that was usable stays usable. With `skipWhenAtTarget` (periodic tick)
|
|
3976
|
+
* a checkout already on origin's tip is left as it is. While
|
|
3977
|
+
* `readOnlySaveOwed` is set the work is saved first ({@link preserveLocalWork});
|
|
3978
|
+
* when that fails nothing is discarded. The first reset after a save sets the
|
|
3979
|
+
* push block. Runs under the mount lock. True when the checkout was reset.
|
|
3980
|
+
*/
|
|
3981
|
+
async refreshReadOnly(s, cwd, opts) {
|
|
3982
|
+
let fetched = false;
|
|
3983
|
+
try {
|
|
3984
|
+
await runRemoteGit(["fetch", "origin", s.branch], repoScopedAuth(s), {
|
|
3985
|
+
cwd,
|
|
3986
|
+
safeDir: cwd,
|
|
3987
|
+
timeout: 6e4,
|
|
3988
|
+
env: cLocaleEnv()
|
|
3989
|
+
});
|
|
3990
|
+
fetched = true;
|
|
3991
|
+
} catch (err) {
|
|
3992
|
+
if (!opts.tolerateFetchFailure) throw err;
|
|
3993
|
+
this.log.warn("read-only mount: fetch failed, resetting to the last fetched base branch", {
|
|
3994
|
+
branch: s.branch,
|
|
3995
|
+
error: redactCredentials(err instanceof Error ? err.message : String(err))
|
|
3996
|
+
});
|
|
3997
|
+
}
|
|
3998
|
+
if (s.disposed) return false;
|
|
3999
|
+
const target = fetched ? await gitOrNull(["rev-parse", "--verify", "--quiet", "FETCH_HEAD^{commit}"], cwd) : await gitOrNull(
|
|
4000
|
+
["rev-parse", "--verify", "--quiet", `refs/remotes/origin/${s.branch}^{commit}`],
|
|
4001
|
+
cwd
|
|
4002
|
+
) ?? await gitOrNull(["rev-parse", "--verify", "--quiet", "HEAD^{commit}"], cwd);
|
|
4003
|
+
if (!target) {
|
|
4004
|
+
this.log.warn("read-only mount: no commit to reset to, local edits kept", {
|
|
4005
|
+
branch: s.branch
|
|
4006
|
+
});
|
|
4007
|
+
return false;
|
|
4008
|
+
}
|
|
4009
|
+
if (opts.skipWhenAtTarget && await gitOrNull(["symbolic-ref", "--quiet", "--short", "HEAD"], cwd) === s.branch && await gitOrNull(["rev-parse", "--verify", "--quiet", "HEAD^{commit}"], cwd) === target) {
|
|
4010
|
+
return false;
|
|
4011
|
+
}
|
|
4012
|
+
if (s.readOnlySaveOwed && !await this.preserveLocalWork(s, cwd, target)) return false;
|
|
4013
|
+
await gitOrNull(["rebase", "--quit"], cwd);
|
|
4014
|
+
await git(["checkout", "-f", "-B", s.branch, target], cwd, 12e4);
|
|
4015
|
+
await git(["clean", "-fd"], cwd, 12e4);
|
|
4016
|
+
if (fetched) {
|
|
4017
|
+
await gitOrNull(["update-ref", `refs/remotes/origin/${s.branch}`, target], cwd);
|
|
4018
|
+
await syncSubmodules(cwd, this.log, s);
|
|
4019
|
+
} else {
|
|
4020
|
+
await checkoutSubmodulesOffline(cwd);
|
|
4021
|
+
}
|
|
4022
|
+
s.activeBranch = s.branch;
|
|
4023
|
+
if (s.readOnlySaveOwed) {
|
|
4024
|
+
await this.applyPushGuard(s, cwd);
|
|
4025
|
+
s.readOnlySaveOwed = false;
|
|
4026
|
+
}
|
|
4027
|
+
this.log.info("read-only mount refreshed", { branch: s.branch, fetched });
|
|
4028
|
+
return true;
|
|
4029
|
+
}
|
|
4030
|
+
/**
|
|
4031
|
+
* Save what the first read-only discard would destroy on a checkout that was
|
|
4032
|
+
* used read-write: local commits on the base branch or a detached HEAD go to a
|
|
4033
|
+
* `skaile/pre-read-only-<time>` branch, uncommitted edits and untracked files
|
|
4034
|
+
* to a stash. Other local branches are left alone by the discard anyway.
|
|
4035
|
+
* False (logged) when the stash fails, e.g. over unmerged paths.
|
|
4036
|
+
*/
|
|
4037
|
+
async preserveLocalWork(s, cwd, target) {
|
|
4038
|
+
const stamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[-:]/g, "").replace(/\..*$/, "");
|
|
4039
|
+
const saved = [];
|
|
4040
|
+
const tips = /* @__PURE__ */ new Set();
|
|
4041
|
+
for (const ref of ["HEAD", `refs/heads/${s.branch}`]) {
|
|
4042
|
+
const tip = await gitOrNull(["rev-parse", "--verify", "--quiet", `${ref}^{commit}`], cwd);
|
|
4043
|
+
if (!tip || tips.has(tip)) continue;
|
|
4044
|
+
tips.add(tip);
|
|
4045
|
+
if (await isAncestor(tip, target, cwd)) continue;
|
|
4046
|
+
const existing = await gitOrNull(
|
|
4047
|
+
[
|
|
4048
|
+
"for-each-ref",
|
|
4049
|
+
"--points-at",
|
|
4050
|
+
tip,
|
|
4051
|
+
"--format=%(refname:short)",
|
|
4052
|
+
"refs/heads/skaile/pre-read-only-*"
|
|
4053
|
+
],
|
|
4054
|
+
cwd
|
|
4055
|
+
);
|
|
4056
|
+
if (existing) {
|
|
4057
|
+
saved.push(existing.split("\n")[0]);
|
|
4058
|
+
continue;
|
|
4059
|
+
}
|
|
4060
|
+
let name = `skaile/pre-read-only-${stamp}`;
|
|
4061
|
+
for (let n = 1; await localBranchExists(name, cwd); n++) {
|
|
4062
|
+
name = `skaile/pre-read-only-${stamp}-${n}`;
|
|
4063
|
+
}
|
|
4064
|
+
await git(["branch", name, tip], cwd);
|
|
4065
|
+
saved.push(name);
|
|
4066
|
+
}
|
|
4067
|
+
const dirty = await gitOrNull(["status", "--porcelain", "--untracked-files=normal"], cwd);
|
|
4068
|
+
if (dirty) {
|
|
4069
|
+
try {
|
|
4070
|
+
await gitCommitting(
|
|
4071
|
+
["stash", "push", "--include-untracked", "-m", `skaile: before read-only ${stamp}`],
|
|
4072
|
+
cwd,
|
|
4073
|
+
12e4
|
|
4074
|
+
);
|
|
4075
|
+
saved.push("stash@{0}");
|
|
4076
|
+
} catch (err) {
|
|
4077
|
+
this.log.error("read-only mount: could not save local edits, nothing discarded", err, {
|
|
4078
|
+
branch: s.branch
|
|
4079
|
+
});
|
|
4080
|
+
return false;
|
|
4081
|
+
}
|
|
4082
|
+
}
|
|
4083
|
+
if (saved.length > 0) {
|
|
4084
|
+
this.log.warn("read-only mount: saved local work before discarding it", {
|
|
4085
|
+
branch: s.branch,
|
|
4086
|
+
saved
|
|
4087
|
+
});
|
|
4088
|
+
}
|
|
4089
|
+
return true;
|
|
4090
|
+
}
|
|
3911
4091
|
// ── Periodic fetch ─────────────────────────────────────────────────────────
|
|
3912
4092
|
startPeriodicFetch(s, mountPath) {
|
|
3913
4093
|
if (s.fetchTimer) clearInterval(s.fetchTimer);
|
|
@@ -3935,6 +4115,13 @@ var GitConnector = class extends AbstractConnector {
|
|
|
3935
4115
|
}
|
|
3936
4116
|
/** One periodic-fetch tick. Bails out at each resumption point once disconnected. */
|
|
3937
4117
|
async runPeriodicFetch(s, mountPath) {
|
|
4118
|
+
if (s.readOnly) {
|
|
4119
|
+
await this.refreshReadOnly(s, mountPath, {
|
|
4120
|
+
tolerateFetchFailure: false,
|
|
4121
|
+
skipWhenAtTarget: true
|
|
4122
|
+
});
|
|
4123
|
+
return;
|
|
4124
|
+
}
|
|
3938
4125
|
await this.fetchOrigin(s, mountPath);
|
|
3939
4126
|
if (s.disposed) return;
|
|
3940
4127
|
if (s.sync.autoRebase && s.activeBranch !== s.branch) {
|
|
@@ -4148,6 +4335,7 @@ var GitConnector = class extends AbstractConnector {
|
|
|
4148
4335
|
}, s.lifecycle.autoCommitIdleMs);
|
|
4149
4336
|
}
|
|
4150
4337
|
async performAutoCommit(s, mountPath) {
|
|
4338
|
+
if (s.readOnly) return;
|
|
4151
4339
|
try {
|
|
4152
4340
|
if (await refuseUnfinishedOperation(mountPath, this.log)) return;
|
|
4153
4341
|
const message = await this.generateCommitMessage(mountPath);
|
|
@@ -7945,6 +8133,8 @@ var ConnectorManager = class {
|
|
|
7945
8133
|
* that will never sync. See {@link listFailedConnectors}.
|
|
7946
8134
|
*/
|
|
7947
8135
|
failedConnectors = /* @__PURE__ */ new Map();
|
|
8136
|
+
/** Kind of each failed bulk-connect attempt, so a carried failure replays it. */
|
|
8137
|
+
attemptErrorKinds = /* @__PURE__ */ new Map();
|
|
7948
8138
|
// Allocated absolute mount target → owning connector id; collisions rejected at setup, released on disconnect.
|
|
7949
8139
|
mountTargets = /* @__PURE__ */ new Map();
|
|
7950
8140
|
/**
|
|
@@ -8275,8 +8465,13 @@ var ConnectorManager = class {
|
|
|
8275
8465
|
throw err;
|
|
8276
8466
|
}
|
|
8277
8467
|
const results = [];
|
|
8468
|
+
const carriedIds = /* @__PURE__ */ new Set();
|
|
8278
8469
|
for (const decl of declarations) {
|
|
8279
|
-
|
|
8470
|
+
const carried = this.opts.failureCarryOver?.take(decl);
|
|
8471
|
+
if (carried !== void 0) carriedIds.add(decl.id);
|
|
8472
|
+
results.push(
|
|
8473
|
+
carried !== void 0 ? this.carryFailure(decl, carried) : await this.attemptConnect(decl)
|
|
8474
|
+
);
|
|
8280
8475
|
}
|
|
8281
8476
|
const report = { results };
|
|
8282
8477
|
this.mgrLog.info("connectAll complete", {
|
|
@@ -8289,6 +8484,15 @@ var ConnectorManager = class {
|
|
|
8289
8484
|
const decl = declById.get(r.id);
|
|
8290
8485
|
return !r.connected && r.access === "read-write" && decl?.mount != null && !readUnavailableMarker(decl.unavailable);
|
|
8291
8486
|
}).map((r) => ({ id: r.id, error: r.error ?? "unknown error" }));
|
|
8487
|
+
for (const f of failedRw) {
|
|
8488
|
+
const decl = declById.get(f.id);
|
|
8489
|
+
if (!decl || carriedIds.has(f.id)) continue;
|
|
8490
|
+
const errorKind = this.attemptErrorKinds.get(f.id);
|
|
8491
|
+
this.opts.failureCarryOver?.record(decl, {
|
|
8492
|
+
error: f.error,
|
|
8493
|
+
...errorKind ? { errorKind } : {}
|
|
8494
|
+
});
|
|
8495
|
+
}
|
|
8292
8496
|
if (failedRw.length > 0) {
|
|
8293
8497
|
const summary = failedRw.map((f) => `"${f.id}": ${f.error}`).join("; ");
|
|
8294
8498
|
this.mgrLog.error("connectAll failed: required read-write connector(s) failed", void 0, {
|
|
@@ -8344,6 +8548,7 @@ var ConnectorManager = class {
|
|
|
8344
8548
|
});
|
|
8345
8549
|
this.createdMountDirs.delete(decl.id);
|
|
8346
8550
|
this.failedConnectors.delete(decl.id);
|
|
8551
|
+
this.attemptErrorKinds.delete(decl.id);
|
|
8347
8552
|
this.opts.onStatusChange?.({
|
|
8348
8553
|
type: "connector_status",
|
|
8349
8554
|
connectorId: decl.id,
|
|
@@ -8363,6 +8568,8 @@ var ConnectorManager = class {
|
|
|
8363
8568
|
const msg = redactCredentials(err instanceof Error ? err.message : String(err));
|
|
8364
8569
|
this.recordFailure(decl, msg);
|
|
8365
8570
|
const errorKind = classifyConnectError(err);
|
|
8571
|
+
if (errorKind) this.attemptErrorKinds.set(decl.id, errorKind);
|
|
8572
|
+
else this.attemptErrorKinds.delete(decl.id);
|
|
8366
8573
|
this.mgrLog.error("connect failed", err, {
|
|
8367
8574
|
id: decl.id,
|
|
8368
8575
|
driver: decl.driver,
|
|
@@ -8383,6 +8590,26 @@ var ConnectorManager = class {
|
|
|
8383
8590
|
};
|
|
8384
8591
|
}
|
|
8385
8592
|
}
|
|
8593
|
+
/**
|
|
8594
|
+
* Fail `decl` with the error a previous build's `connectAll` carried over,
|
|
8595
|
+
* without calling its driver. Same records and events as a failed attempt.
|
|
8596
|
+
*/
|
|
8597
|
+
carryFailure(decl, { error, errorKind }) {
|
|
8598
|
+
if (!this.active.has(decl.id)) this.releaseMountTarget(decl.id);
|
|
8599
|
+
this.recordFailure(decl, error);
|
|
8600
|
+
this.mgrLog.warn("connect skipped: it failed in the previous build moments ago", {
|
|
8601
|
+
id: decl.id,
|
|
8602
|
+
driver: decl.driver
|
|
8603
|
+
});
|
|
8604
|
+
this.opts.onStatusChange?.({
|
|
8605
|
+
type: "connector_status",
|
|
8606
|
+
connectorId: decl.id,
|
|
8607
|
+
status: "error",
|
|
8608
|
+
error,
|
|
8609
|
+
...errorKind ? { errorKind } : {}
|
|
8610
|
+
});
|
|
8611
|
+
return { id: decl.id, connected: false, error, access: decl.access };
|
|
8612
|
+
}
|
|
8386
8613
|
/**
|
|
8387
8614
|
* Compatibility no-op for the removed in-container fleet health gate. Host
|
|
8388
8615
|
* fleet-managed cloud mounts are verified at connect time by their drivers.
|
|
@@ -8414,6 +8641,7 @@ var ConnectorManager = class {
|
|
|
8414
8641
|
this.mountTargets.clear();
|
|
8415
8642
|
this.createdMountDirs.clear();
|
|
8416
8643
|
this.failedConnectors.clear();
|
|
8644
|
+
this.attemptErrorKinds.clear();
|
|
8417
8645
|
this.mgrLog.info("disconnectAll complete");
|
|
8418
8646
|
}
|
|
8419
8647
|
// ── Hot-plug ──────────────────────────────────────────────────────────────────
|
|
@@ -8923,6 +9151,43 @@ function redactMarker(marker) {
|
|
|
8923
9151
|
...marker.detail !== void 0 ? { detail: redactCredentials(marker.detail) } : {}
|
|
8924
9152
|
};
|
|
8925
9153
|
}
|
|
9154
|
+
|
|
9155
|
+
// connectors/src/connect-failure-carry-over.ts
|
|
9156
|
+
var CONNECT_FAILURE_CARRY_OVER_TTL_MS = 3e4;
|
|
9157
|
+
var ConnectFailureCarryOver = class {
|
|
9158
|
+
entries = /* @__PURE__ */ new Map();
|
|
9159
|
+
ttlMs;
|
|
9160
|
+
now;
|
|
9161
|
+
constructor(opts = {}) {
|
|
9162
|
+
this.ttlMs = opts.ttlMs ?? CONNECT_FAILURE_CARRY_OVER_TTL_MS;
|
|
9163
|
+
this.now = opts.now ?? Date.now;
|
|
9164
|
+
}
|
|
9165
|
+
/** Remember how `decl` failed in the bulk connect that just ran. */
|
|
9166
|
+
record(decl, failure) {
|
|
9167
|
+
const fingerprint = fingerprintOf(decl);
|
|
9168
|
+
if (fingerprint === void 0) return;
|
|
9169
|
+
this.entries.set(decl.id, { ...failure, fingerprint, at: this.now() });
|
|
9170
|
+
}
|
|
9171
|
+
/**
|
|
9172
|
+
* The carried failure for `decl`, or `undefined` when it must connect.
|
|
9173
|
+
* Removes the entry either way, so a failure is carried over once at most.
|
|
9174
|
+
*/
|
|
9175
|
+
take(decl) {
|
|
9176
|
+
const entry = this.entries.get(decl.id);
|
|
9177
|
+
if (!entry) return void 0;
|
|
9178
|
+
this.entries.delete(decl.id);
|
|
9179
|
+
if (this.now() - entry.at > this.ttlMs) return void 0;
|
|
9180
|
+
if (fingerprintOf(decl) !== entry.fingerprint) return void 0;
|
|
9181
|
+
return { error: entry.error, ...entry.errorKind ? { errorKind: entry.errorKind } : {} };
|
|
9182
|
+
}
|
|
9183
|
+
};
|
|
9184
|
+
function fingerprintOf(decl) {
|
|
9185
|
+
try {
|
|
9186
|
+
return JSON.stringify(decl);
|
|
9187
|
+
} catch {
|
|
9188
|
+
return void 0;
|
|
9189
|
+
}
|
|
9190
|
+
}
|
|
8926
9191
|
var zStatic = z4.z ?? z4.default ?? z4;
|
|
8927
9192
|
function readFailedConnectors(manager) {
|
|
8928
9193
|
if (typeof manager.listFailedConnectors !== "function") return [];
|
|
@@ -12875,6 +13140,6 @@ function describeFlowOperations() {
|
|
|
12875
13140
|
return new FlowAdapter().tools.describeOperations({ access: "read-write" });
|
|
12876
13141
|
}
|
|
12877
13142
|
|
|
12878
|
-
export { AbstractConnector, BUILTIN_CONNECTOR_CATALOG, BoxConnector, ClassifierSubpromptRunner, ConnectorManager, 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, S3FetchStoppedError, S3PresignedRequestError, S3_PRESIGN_BATCH, SQLiteConnector, SessionInlineSubFlowRunner, SessionNodeExecutor, SessionSubpromptRunner, SharePointConnector, StaticServerConnector, TunnelConnector, WebDAVConnector, XStateConnector, XStateStoreConnector, __test, atomicReplaceCredential, buildConnectorPromptSection, buildConnectorToolDefs, buildFlowPromptEvent, buildFlowToolDefs, buildLazyFlowToolDefs, buildLazySdkFlowTools, buildSdkConnectorTools, buildSdkFlowTools, checkFleetMountLiveness, 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, missingTokenMediatorMessage, parseListObjectsV2, presignScopePrefix, presignableKey, readGitSyncStatus, registerBuiltinConnectors, removeMountBlock, removeUnavailableMountBlock, renderCredentialHelperScript, tryGetConnector, worktreeRegistry, writeHelperScript, writeMountBlock, writeUnavailableMountBlock };
|
|
12879
|
-
//# sourceMappingURL=chunk-
|
|
12880
|
-
//# sourceMappingURL=chunk-
|
|
13143
|
+
export { AbstractConnector, BUILTIN_CONNECTOR_CATALOG, BoxConnector, CONNECT_FAILURE_CARRY_OVER_TTL_MS, ClassifierSubpromptRunner, ConnectFailureCarryOver, ConnectorManager, 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, S3FetchStoppedError, S3PresignedRequestError, S3_PRESIGN_BATCH, SQLiteConnector, SessionInlineSubFlowRunner, SessionNodeExecutor, SessionSubpromptRunner, SharePointConnector, StaticServerConnector, TunnelConnector, WebDAVConnector, XStateConnector, XStateStoreConnector, __test, atomicReplaceCredential, buildConnectorPromptSection, buildConnectorToolDefs, buildFlowPromptEvent, buildFlowToolDefs, buildLazyFlowToolDefs, buildLazySdkFlowTools, buildSdkConnectorTools, buildSdkFlowTools, checkFleetMountLiveness, 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, missingTokenMediatorMessage, parseListObjectsV2, presignScopePrefix, presignableKey, readGitSyncStatus, registerBuiltinConnectors, removeMountBlock, removeUnavailableMountBlock, renderCredentialHelperScript, tryGetConnector, worktreeRegistry, writeHelperScript, writeMountBlock, writeUnavailableMountBlock };
|
|
13144
|
+
//# sourceMappingURL=chunk-FWZTKSYI.js.map
|
|
13145
|
+
//# sourceMappingURL=chunk-FWZTKSYI.js.map
|