@skaile/workspaces 0.24.0 → 0.26.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 +276 -0
- package/README.md +2 -2
- package/dist/{asset-feeds-WKIKSZ6Z.js → asset-feeds-WMVTI7KW.js} +11 -10
- package/dist/asset-feeds-WMVTI7KW.js.map +1 -0
- package/dist/asset-manager/index.js +11 -10
- package/dist/asset-manager/installer.js +10 -9
- package/dist/asset-manager/renderers.js +2 -2
- package/dist/asset-manager/src/index.d.ts +6 -7
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/installer.d.ts.map +1 -1
- package/dist/bridge/drivers/claude-sdk.js +14 -7
- package/dist/bridge/drivers/claude-sdk.js.map +1 -1
- package/dist/bridge/drivers/codex.js +8 -34
- package/dist/bridge/drivers/codex.js.map +1 -1
- package/dist/bridge/drivers/echo.js +1 -1
- package/dist/bridge/drivers/omp.js +64 -50
- package/dist/bridge/drivers/omp.js.map +1 -1
- package/dist/bridge/index.js +4 -4
- package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
- package/dist/bridge/src/drivers/codex.d.ts.map +1 -1
- package/dist/bridge/src/drivers/omp.d.ts +20 -4
- package/dist/bridge/src/drivers/omp.d.ts.map +1 -1
- package/dist/bridge/src/error-classifier.d.ts +17 -0
- package/dist/bridge/src/error-classifier.d.ts.map +1 -1
- package/dist/bridge/src/models.d.ts +1 -1
- package/dist/bridge/src/models.d.ts.map +1 -1
- package/dist/bridge/src/provider-endpoints.d.ts +16 -0
- package/dist/bridge/src/provider-endpoints.d.ts.map +1 -0
- package/dist/bridge/src/validation.d.ts +1 -1
- package/dist/bridge/src/validation.d.ts.map +1 -1
- package/dist/{chunk-M5TE6YI5.js → chunk-23M4XZQW.js} +10 -52
- package/dist/chunk-23M4XZQW.js.map +1 -0
- package/dist/{chunk-DH4N5AW4.js → chunk-2FS4FPZ7.js} +3 -3
- package/dist/{chunk-DH4N5AW4.js.map → chunk-2FS4FPZ7.js.map} +1 -1
- package/dist/{chunk-6VTG73UY.js → chunk-45H3UO2R.js} +2 -2
- package/dist/{chunk-6VTG73UY.js.map → chunk-45H3UO2R.js.map} +1 -1
- package/dist/chunk-4SQ6Y6U7.js +28 -0
- package/dist/chunk-4SQ6Y6U7.js.map +1 -0
- package/dist/{chunk-LSGAYQ2E.js → chunk-5YO3H5Q4.js} +3 -3
- package/dist/{chunk-LSGAYQ2E.js.map → chunk-5YO3H5Q4.js.map} +1 -1
- package/dist/{chunk-JDX54X4Y.js → chunk-7GWYRVAX.js} +12 -9
- package/dist/chunk-7GWYRVAX.js.map +1 -0
- package/dist/{chunk-46COM7M5.js → chunk-7OBGSR7O.js} +5 -5
- package/dist/chunk-7OBGSR7O.js.map +1 -0
- package/dist/{chunk-2RFOFHSM.js → chunk-BKF3UFF4.js} +21 -9
- package/dist/chunk-BKF3UFF4.js.map +1 -0
- package/dist/{chunk-KOVLSBXK.js → chunk-BMQKMOQY.js} +81 -79
- package/dist/chunk-BMQKMOQY.js.map +1 -0
- package/dist/{chunk-J2TITSXF.js → chunk-BQRRBGDE.js} +2 -2
- package/dist/{chunk-J2TITSXF.js.map → chunk-BQRRBGDE.js.map} +1 -1
- package/dist/{chunk-5ESCS2OS.js → chunk-C32BRO2W.js} +67 -35
- package/dist/chunk-C32BRO2W.js.map +1 -0
- package/dist/{chunk-GZWJGNNN.js → chunk-DEYYRFQU.js} +3 -3
- package/dist/chunk-DEYYRFQU.js.map +1 -0
- package/dist/{chunk-YX3UWPJ5.js → chunk-IEJ5IOC3.js} +27 -49
- package/dist/chunk-IEJ5IOC3.js.map +1 -0
- package/dist/chunk-IERB3UXJ.js +215 -0
- package/dist/chunk-IERB3UXJ.js.map +1 -0
- package/dist/{chunk-FVTV7M76.js → chunk-IFGTRL2I.js} +3 -3
- package/dist/chunk-IFGTRL2I.js.map +1 -0
- package/dist/{chunk-LJ52ZKIU.js → chunk-JIQLLZ65.js} +203 -39
- package/dist/chunk-JIQLLZ65.js.map +1 -0
- package/dist/{chunk-Z3M5K67G.js → chunk-KL2MQ6WI.js} +114 -63
- package/dist/chunk-KL2MQ6WI.js.map +1 -0
- package/dist/{chunk-6FNCZYJY.js → chunk-MBOR7D65.js} +3 -3
- package/dist/{chunk-6FNCZYJY.js.map → chunk-MBOR7D65.js.map} +1 -1
- package/dist/{chunk-QAVZOJCV.js → chunk-OVRSNIKJ.js} +2 -2
- package/dist/chunk-OVRSNIKJ.js.map +1 -0
- package/dist/{chunk-DQWREFRQ.js → chunk-PAYAFNXG.js} +22 -3
- package/dist/chunk-PAYAFNXG.js.map +1 -0
- package/dist/{chunk-D3VO6WNC.js → chunk-PRLD7EXG.js} +3 -3
- package/dist/chunk-PRLD7EXG.js.map +1 -0
- package/dist/{chunk-N6TA6RSH.js → chunk-PY7AQRGH.js} +59 -13
- package/dist/chunk-PY7AQRGH.js.map +1 -0
- package/dist/{chunk-NELZIQ2E.js → chunk-QDJKE557.js} +20 -3
- package/dist/chunk-QDJKE557.js.map +1 -0
- package/dist/{chunk-OYRW5RCM.js → chunk-QHXS3YDV.js} +9 -9
- package/dist/chunk-QHXS3YDV.js.map +1 -0
- package/dist/{chunk-2F3RUZXC.js → chunk-RTAIGPTF.js} +161 -106
- package/dist/chunk-RTAIGPTF.js.map +1 -0
- package/dist/{chunk-IPUYL6TD.js → chunk-TV72ZJYN.js} +8 -5
- package/dist/{chunk-IPUYL6TD.js.map → chunk-TV72ZJYN.js.map} +1 -1
- package/dist/{chunk-ICS76R4T.js → chunk-W7W66MDZ.js} +10 -8
- package/dist/chunk-W7W66MDZ.js.map +1 -0
- package/dist/{chunk-JQBHCJ6N.js → chunk-WD4LP66U.js} +329 -121
- package/dist/chunk-WD4LP66U.js.map +1 -0
- package/dist/{chunk-AFLH7B64.js → chunk-XGLGS5B4.js} +3 -3
- package/dist/{chunk-AFLH7B64.js.map → chunk-XGLGS5B4.js.map} +1 -1
- package/dist/{chunk-HIIARTRZ.js → chunk-YDTW4GT6.js} +450 -207
- package/dist/chunk-YDTW4GT6.js.map +1 -0
- package/dist/{chunk-2XY6732A.js → chunk-YRU4WB6Y.js} +5 -5
- package/dist/chunk-YRU4WB6Y.js.map +1 -0
- package/dist/{chunk-542K7SR6.js → chunk-Z5DI7PDG.js} +173 -90
- package/dist/chunk-Z5DI7PDG.js.map +1 -0
- package/dist/{chunk-KLNL7QHN.js → chunk-ZAP2BDHG.js} +30 -5
- package/dist/chunk-ZAP2BDHG.js.map +1 -0
- package/dist/{chunk-GCJXPUHG.js → chunk-ZONCCO5N.js} +9 -4
- package/dist/chunk-ZONCCO5N.js.map +1 -0
- package/dist/{chunk-ODPII24X.js → chunk-ZYDE52WE.js} +3 -3
- package/dist/{chunk-ODPII24X.js.map → chunk-ZYDE52WE.js.map} +1 -1
- package/dist/cli/index.js +566 -425
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/commands/complete-resolvers.d.ts.map +1 -1
- package/dist/cli/src/commands/config.d.ts.map +1 -1
- package/dist/cli/src/commands/connector.d.ts +7 -0
- package/dist/cli/src/commands/connector.d.ts.map +1 -1
- package/dist/cli/src/commands/flow.d.ts +3 -2
- package/dist/cli/src/commands/flow.d.ts.map +1 -1
- package/dist/cli/src/commands/npx.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts.map +1 -1
- package/dist/cli/src/commands/run.d.ts.map +1 -1
- package/dist/cli/src/commands/validate.d.ts.map +1 -1
- package/dist/cli/src/flow-discovery.d.ts +24 -0
- package/dist/cli/src/flow-discovery.d.ts.map +1 -0
- package/dist/cli/src/open-registry.d.ts +2 -2
- package/dist/cli/src/paths.d.ts +26 -9
- package/dist/cli/src/paths.d.ts.map +1 -1
- package/dist/cli/src/skill-walker.d.ts +9 -5
- package/dist/cli/src/skill-walker.d.ts.map +1 -1
- package/dist/connectors/config.js +8 -7
- package/dist/connectors/index.js +13 -12
- package/dist/connectors/rclone-config.js +1 -1
- package/dist/connectors/src/connector-manager.d.ts +24 -2
- package/dist/connectors/src/connector-manager.d.ts.map +1 -1
- package/dist/connectors/src/connector-prompt.d.ts.map +1 -1
- package/dist/connectors/src/connector-registry.d.ts +3 -3
- package/dist/connectors/src/credential-helper-script.d.ts.map +1 -1
- package/dist/connectors/src/index.d.ts +4 -2
- package/dist/connectors/src/index.d.ts.map +1 -1
- package/dist/connectors/src/managed-gitconfig.d.ts.map +1 -1
- package/dist/connectors/src/mount-placeholder.d.ts +68 -0
- package/dist/connectors/src/mount-placeholder.d.ts.map +1 -0
- package/dist/connectors/src/rclone-config/googledrive.d.ts +1 -1
- package/dist/core/discovery.js +1 -1
- package/dist/core/index.js +7 -6
- package/dist/core/manifest.js +2 -2
- package/dist/core/models.js +1 -1
- package/dist/core/publish-manifest.d.ts +2 -0
- package/dist/core/publish-manifest.js +5 -0
- package/dist/core/publish-manifest.js.map +1 -0
- package/dist/core/runtime-assets.js +5 -4
- package/dist/core/src/discovery.d.ts +27 -0
- package/dist/core/src/discovery.d.ts.map +1 -1
- package/dist/core/src/index.d.ts +9 -6
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/lock.d.ts.map +1 -1
- package/dist/core/src/manifest-yaml-editor.d.ts +62 -0
- package/dist/core/src/manifest-yaml-editor.d.ts.map +1 -0
- package/dist/core/src/models.d.ts +16 -3
- package/dist/core/src/models.d.ts.map +1 -1
- package/dist/core/src/publish-manifest.d.ts +160 -0
- package/dist/core/src/publish-manifest.d.ts.map +1 -0
- package/dist/core/src/repo-manager.d.ts +9 -1
- package/dist/core/src/repo-manager.d.ts.map +1 -1
- package/dist/core/src/runtime-assets.d.ts +80 -29
- package/dist/core/src/runtime-assets.d.ts.map +1 -1
- package/dist/core/src/walker.d.ts +19 -6
- package/dist/core/src/walker.d.ts.map +1 -1
- package/dist/core/src/workspace-config.d.ts +30 -36
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/src/workspace-yaml-editor.d.ts +1 -15
- package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
- package/dist/core/workspace-config.js +4 -3
- package/dist/deploy/index.js +50 -79
- package/dist/deploy/index.js.map +1 -1
- package/dist/deploy/src/targets/container-runtime.d.ts +1 -1
- package/dist/deploy/src/targets/container-runtime.d.ts.map +1 -1
- package/dist/deploy/src/targets/local.d.ts.map +1 -1
- package/dist/deploy/src/targets/nix.d.ts.map +1 -1
- package/dist/deploy/src/targets/process-handle.d.ts +7 -5
- package/dist/deploy/src/targets/process-handle.d.ts.map +1 -1
- package/dist/discovery/index.js +5 -4
- package/dist/discovery/src/discover-manifest.d.ts +3 -2
- package/dist/discovery/src/discover-manifest.d.ts.map +1 -1
- package/dist/discovery/src/discover.d.ts +2 -2
- package/dist/discovery/src/discover.d.ts.map +1 -1
- package/dist/discovery/src/index.d.ts +1 -1
- package/dist/discovery/src/index.d.ts.map +1 -1
- package/dist/discovery/src/source-config.d.ts +53 -12
- package/dist/discovery/src/source-config.d.ts.map +1 -1
- package/dist/discovery/src/tree-entries.d.ts +2 -2
- package/dist/discovery/src/tree-entries.d.ts.map +1 -1
- package/dist/{ensure-sources-OJUBGX6Z.js → ensure-sources-CVULUVH4.js} +12 -11
- package/dist/ensure-sources-CVULUVH4.js.map +1 -0
- package/dist/factory-assets/.skaile-source.yaml +6 -0
- package/dist/factory-assets/README.md +36 -0
- package/dist/factory-assets/bundles/workspaces-authoring/workspaces-authoring.bundle.yaml +9 -0
- package/dist/factory-assets/connectors/deploy/CONNECTOR.md +41 -0
- package/dist/{base-assets → factory-assets}/connectors/deploy/adapter.d.ts +2 -2
- package/dist/factory-assets/connectors/deploy/adapter.d.ts.map +1 -0
- package/dist/factory-assets/connectors/deploy.js +22 -0
- package/dist/factory-assets/connectors/devserver/CONNECTOR.md +44 -0
- package/dist/{base-assets → factory-assets}/connectors/devserver/adapter.d.ts +2 -2
- package/dist/factory-assets/connectors/devserver/adapter.d.ts.map +1 -0
- package/dist/factory-assets/connectors/devserver.js +22 -0
- package/dist/factory-assets/connectors/flow/CONNECTOR.md +47 -0
- package/dist/{base-assets → factory-assets}/connectors/flow/adapter.d.ts +2 -2
- package/dist/factory-assets/connectors/flow/adapter.d.ts.map +1 -0
- package/dist/factory-assets/connectors/flow/adapter.js +22 -0
- package/dist/factory-assets/connectors/flow/engine/engine.d.ts.map +1 -0
- package/dist/{base-assets → factory-assets}/connectors/flow/engine/flow-kind-provider.d.ts +1 -1
- package/dist/factory-assets/connectors/flow/engine/flow-kind-provider.d.ts.map +1 -0
- package/dist/factory-assets/connectors/flow/engine/flow-manifest.d.ts.map +1 -0
- package/dist/factory-assets/connectors/flow/engine/index.d.ts.map +1 -0
- package/dist/factory-assets/connectors/flow/engine/loader.d.ts.map +1 -0
- package/dist/factory-assets/connectors/flow/engine/types.d.ts.map +1 -0
- package/dist/factory-assets/connectors/flow/engine.js +15 -0
- package/dist/factory-assets/connectors/flow/index.d.ts.map +1 -0
- package/dist/{base-assets → factory-assets}/connectors/flow/prompt-fragments.d.ts +5 -5
- package/dist/factory-assets/connectors/flow/prompt-fragments.d.ts.map +1 -0
- package/dist/{base-assets → factory-assets}/connectors/flow/prompt-fragments.js +1 -1
- package/dist/{base-assets → factory-assets}/connectors/flow/run-flow.d.ts +8 -8
- package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -0
- package/dist/factory-assets/connectors/flow/run-flow.js +25 -0
- package/dist/{base-assets → factory-assets}/connectors/flow/stimulus-driver.d.ts +2 -2
- package/dist/factory-assets/connectors/flow/stimulus-driver.d.ts.map +1 -0
- package/dist/factory-assets/connectors/flow/stimulus-driver.js +4 -0
- package/dist/factory-assets/connectors/flow.js +22 -0
- package/dist/factory-assets/connectors/git/CONNECTOR.md +145 -0
- package/dist/{base-assets → factory-assets}/connectors/git/driver.d.ts +2 -2
- package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -0
- package/dist/factory-assets/connectors/git.js +22 -0
- package/dist/factory-assets/connectors/gmail/CONNECTOR.md +50 -0
- package/dist/{base-assets → factory-assets}/connectors/gmail/adapter.d.ts +2 -2
- package/dist/factory-assets/connectors/gmail/adapter.d.ts.map +1 -0
- package/dist/factory-assets/connectors/gmail.js +22 -0
- package/dist/factory-assets/connectors/googledrive/CONNECTOR.md +150 -0
- package/dist/{base-assets → factory-assets}/connectors/googledrive/driver.d.ts +2 -2
- package/dist/factory-assets/connectors/googledrive/driver.d.ts.map +1 -0
- package/dist/factory-assets/connectors/googledrive.js +22 -0
- package/dist/factory-assets/connectors/local/CONNECTOR.md +40 -0
- package/dist/{base-assets → factory-assets}/connectors/local/driver.d.ts +2 -2
- package/dist/factory-assets/connectors/local/driver.d.ts.map +1 -0
- package/dist/factory-assets/connectors/local.js +22 -0
- package/dist/factory-assets/connectors/mattermost/CONNECTOR.md +65 -0
- package/dist/{base-assets → factory-assets}/connectors/mattermost/adapter.d.ts +2 -2
- package/dist/factory-assets/connectors/mattermost/adapter.d.ts.map +1 -0
- package/dist/factory-assets/connectors/mattermost.js +22 -0
- package/dist/factory-assets/connectors/memory/CONNECTOR.md +40 -0
- package/dist/{base-assets → factory-assets}/connectors/memory/adapter.d.ts +2 -2
- package/dist/factory-assets/connectors/memory/adapter.d.ts.map +1 -0
- package/dist/factory-assets/connectors/memory.js +22 -0
- package/dist/factory-assets/connectors/minio/CONNECTOR.md +68 -0
- package/dist/{base-assets → factory-assets}/connectors/minio/adapter.d.ts +2 -2
- package/dist/factory-assets/connectors/minio/adapter.d.ts.map +1 -0
- package/dist/factory-assets/connectors/minio.js +22 -0
- package/dist/factory-assets/connectors/postgres/CONNECTOR.md +46 -0
- package/dist/{base-assets → factory-assets}/connectors/postgres/adapter.d.ts +2 -2
- package/dist/factory-assets/connectors/postgres/adapter.d.ts.map +1 -0
- package/dist/factory-assets/connectors/postgres.js +22 -0
- package/dist/factory-assets/connectors/s3/CONNECTOR.md +76 -0
- package/dist/{base-assets → factory-assets}/connectors/s3/driver.d.ts +2 -2
- package/dist/factory-assets/connectors/s3/driver.d.ts.map +1 -0
- package/dist/factory-assets/connectors/s3.js +22 -0
- package/dist/factory-assets/connectors/sharepoint/CONNECTOR.md +181 -0
- package/dist/{base-assets → factory-assets}/connectors/sharepoint/driver.d.ts +2 -2
- package/dist/factory-assets/connectors/sharepoint/driver.d.ts.map +1 -0
- package/dist/factory-assets/connectors/sharepoint.js +22 -0
- package/dist/factory-assets/connectors/sqlite/CONNECTOR.md +44 -0
- package/dist/{base-assets → factory-assets}/connectors/sqlite/adapter.d.ts +2 -2
- package/dist/factory-assets/connectors/sqlite/adapter.d.ts.map +1 -0
- package/dist/factory-assets/connectors/sqlite.js +22 -0
- package/dist/factory-assets/connectors/static-server/CONNECTOR.md +41 -0
- package/dist/{base-assets → factory-assets}/connectors/static-server/adapter.d.ts +2 -2
- package/dist/factory-assets/connectors/static-server/adapter.d.ts.map +1 -0
- package/dist/factory-assets/connectors/static-server.js +22 -0
- package/dist/factory-assets/connectors/tunnel/CONNECTOR.md +40 -0
- package/dist/{base-assets → factory-assets}/connectors/tunnel/adapter.d.ts +2 -2
- package/dist/factory-assets/connectors/tunnel/adapter.d.ts.map +1 -0
- package/dist/factory-assets/connectors/tunnel.js +22 -0
- package/dist/factory-assets/connectors/webdav/CONNECTOR.md +139 -0
- package/dist/{base-assets → factory-assets}/connectors/webdav/driver.d.ts +2 -2
- package/dist/factory-assets/connectors/webdav/driver.d.ts.map +1 -0
- package/dist/factory-assets/connectors/webdav.js +22 -0
- package/dist/factory-assets/connectors/xstate/CONNECTOR.md +57 -0
- package/dist/{base-assets → factory-assets}/connectors/xstate/adapter.d.ts +2 -2
- package/dist/factory-assets/connectors/xstate/adapter.d.ts.map +1 -0
- package/dist/factory-assets/connectors/xstate-store/CONNECTOR.md +48 -0
- package/dist/{base-assets → factory-assets}/connectors/xstate-store/adapter.d.ts +2 -2
- package/dist/factory-assets/connectors/xstate-store/adapter.d.ts.map +1 -0
- package/dist/factory-assets/connectors/xstate-store.js +22 -0
- package/dist/factory-assets/connectors/xstate.js +22 -0
- package/dist/{base-assets → factory-assets}/index.d.ts +1 -1
- package/dist/factory-assets/index.d.ts.map +1 -0
- package/dist/{base-assets → factory-assets}/index.js +1 -1
- package/dist/factory-assets/index.js.map +1 -0
- package/dist/factory-assets/skaile.manifest.yaml +25 -0
- package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +176 -0
- package/dist/factory-assets/skills/authoring-skaile-manifests/SKILL.md +243 -0
- package/dist/factory-assets/skills/authoring-skaile-manifests/references/dependency-standard.md +197 -0
- package/dist/factory-assets/skills/manifest-compliance/SKILL.md +140 -0
- package/dist/factory-assets/skills/skaile-author-asset/SKILL.md +239 -0
- package/dist/factory-assets/skills/skaile-manage-workspace/SKILL.md +168 -0
- package/dist/{flows-DYFTPCPM.js → flows-JZFJD5IN.js} +3 -3
- package/dist/{flows-DYFTPCPM.js.map → flows-JZFJD5IN.js.map} +1 -1
- package/dist/library/index.js +14 -5
- package/dist/library/src/install/install-from-manifest.d.ts.map +1 -1
- package/dist/library/src/library.d.ts +2 -0
- package/dist/library/src/library.d.ts.map +1 -1
- package/dist/library/src/local/library.d.ts +2 -0
- package/dist/library/src/local/library.d.ts.map +1 -1
- package/dist/library/src/local/local-catalog-source.d.ts +2 -1
- package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
- package/dist/library/src/local/sidecar-paths.d.ts +4 -4
- package/dist/library/src/local/sidecar-paths.d.ts.map +1 -1
- package/dist/library/src/local/store-paths.d.ts +4 -3
- package/dist/library/src/local/store-paths.d.ts.map +1 -1
- package/dist/library/src/pin-resolver.d.ts.map +1 -1
- package/dist/library/src/preset/apply.d.ts.map +1 -1
- package/dist/library/src/preset/placeholders.d.ts.map +1 -1
- package/dist/library/src/remote/remote-catalog-source.d.ts +7 -0
- package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
- package/dist/library/src/remote/rest-catalog-source.d.ts +7 -0
- package/dist/library/src/remote/rest-catalog-source.d.ts.map +1 -1
- package/dist/library/src/sync/manifest-writeback.d.ts +1 -1
- package/dist/library/src/sync/manifest-writeback.d.ts.map +1 -1
- package/dist/open-library-WYASW4BH.js +22 -0
- package/dist/{open-library-67FSSQWE.js.map → open-library-WYASW4BH.js.map} +1 -1
- package/dist/paths-BMW6JYW6.js +15 -0
- package/dist/{paths-FKKGS6BA.js.map → paths-BMW6JYW6.js.map} +1 -1
- package/dist/{plugin-store-IZ5SCRAV.js → plugin-store-O5VR45CA.js} +9 -8
- package/dist/plugin-store-O5VR45CA.js.map +1 -0
- package/dist/plugins/src/asset-kind-provider.d.ts +1 -1
- package/dist/plugins/src/catalog-source.d.ts +13 -0
- package/dist/plugins/src/catalog-source.d.ts.map +1 -1
- package/dist/resolver/index.js +1 -1
- package/dist/resolver/src/parser.d.ts.map +1 -1
- package/dist/runner/index.js +20 -19
- package/dist/runner/src/capability-registry.d.ts +1 -1
- package/dist/runner/src/capability-registry.d.ts.map +1 -1
- package/dist/runner/src/external-mcp.d.ts +112 -0
- package/dist/runner/src/external-mcp.d.ts.map +1 -0
- package/dist/runner/src/resource-handler.d.ts.map +1 -1
- package/dist/runner/src/resources.d.ts +10 -2
- package/dist/runner/src/resources.d.ts.map +1 -1
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/runner/src/session-builder.d.ts +12 -0
- package/dist/runner/src/session-builder.d.ts.map +1 -1
- package/dist/runner/src/workspace-migration.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +11 -10
- package/dist/sdk/bridge.js +4 -4
- package/dist/sdk/core.js +7 -6
- package/dist/sdk/flow.js +12 -1
- package/dist/sdk/index.js +23 -22
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/resolver.js +1 -1
- package/dist/sdk/runner.js +20 -19
- package/dist/sdk/session.js +1 -1
- package/dist/sdk/src/flow/index.d.ts +1 -1
- package/dist/sdk/src/flow/index.d.ts.map +1 -1
- package/dist/sdk/src/workspace.d.ts +3 -2
- package/dist/sdk/src/workspace.d.ts.map +1 -1
- package/dist/sdk/telemetry.js +1 -1
- package/dist/secrets/index.js +1 -1
- package/dist/secrets/src/providers/env.d.ts.map +1 -1
- package/dist/secrets/src/providers/local.d.ts.map +1 -1
- package/dist/session/index.js +1 -1
- package/dist/session/src/mentions.d.ts.map +1 -1
- package/dist/{setup-J7CYEQOF.js → setup-YNLFR5GB.js} +13 -12
- package/dist/setup-YNLFR5GB.js.map +1 -0
- package/dist/skills-6HJ3WINN.js +7 -0
- package/dist/{skills-CRL3VJNN.js.map → skills-6HJ3WINN.js.map} +1 -1
- package/dist/store-client-CENBEASX.js +15 -0
- package/dist/{store-client-AEI6Y3KD.js.map → store-client-CENBEASX.js.map} +1 -1
- package/dist/telemetry/index.js +1 -1
- package/dist/telemetry/src/config.d.ts +0 -16
- package/dist/telemetry/src/config.d.ts.map +1 -1
- package/dist/tui/index.js +20 -19
- package/dist/tui/index.js.map +1 -1
- package/dist/types/manifests.js +1 -1
- package/dist/types/src/flow.d.ts +2 -2
- package/dist/types/src/install-manifest.d.ts +1 -1
- package/dist/types/src/install-manifest.d.ts.map +1 -1
- package/dist/types/src/manifests/index.d.ts +1 -1
- package/dist/types/src/manifests/skill.d.ts +21 -0
- package/dist/types/src/manifests/skill.d.ts.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +4 -4
- package/dist/workspace-plugin/adapters/omp.js +7 -7
- package/dist/workspace-plugin/index.js +1 -1
- package/dist/workspace-plugin/src/tools/flows.d.ts.map +1 -1
- package/package.json +158 -151
- package/dist/asset-feeds-WKIKSZ6Z.js.map +0 -1
- package/dist/base-assets/connectors/deploy/adapter.d.ts.map +0 -1
- package/dist/base-assets/connectors/deploy.js +0 -21
- package/dist/base-assets/connectors/devserver/adapter.d.ts.map +0 -1
- package/dist/base-assets/connectors/devserver.js +0 -21
- package/dist/base-assets/connectors/flow/adapter.d.ts.map +0 -1
- package/dist/base-assets/connectors/flow/adapter.js +0 -21
- package/dist/base-assets/connectors/flow/engine/engine.d.ts.map +0 -1
- package/dist/base-assets/connectors/flow/engine/flow-kind-provider.d.ts.map +0 -1
- package/dist/base-assets/connectors/flow/engine/flow-manifest.d.ts.map +0 -1
- package/dist/base-assets/connectors/flow/engine/index.d.ts.map +0 -1
- package/dist/base-assets/connectors/flow/engine/loader.d.ts.map +0 -1
- package/dist/base-assets/connectors/flow/engine/types.d.ts.map +0 -1
- package/dist/base-assets/connectors/flow/engine.js +0 -4
- package/dist/base-assets/connectors/flow/index.d.ts.map +0 -1
- package/dist/base-assets/connectors/flow/prompt-fragments.d.ts.map +0 -1
- package/dist/base-assets/connectors/flow/run-flow.d.ts.map +0 -1
- package/dist/base-assets/connectors/flow/run-flow.js +0 -24
- package/dist/base-assets/connectors/flow/stimulus-driver.d.ts.map +0 -1
- package/dist/base-assets/connectors/flow/stimulus-driver.js +0 -4
- package/dist/base-assets/connectors/flow.js +0 -21
- package/dist/base-assets/connectors/git/driver.d.ts.map +0 -1
- package/dist/base-assets/connectors/git.js +0 -21
- package/dist/base-assets/connectors/gmail/adapter.d.ts.map +0 -1
- package/dist/base-assets/connectors/gmail.js +0 -21
- package/dist/base-assets/connectors/googledrive/driver.d.ts.map +0 -1
- package/dist/base-assets/connectors/googledrive.js +0 -21
- package/dist/base-assets/connectors/local/driver.d.ts.map +0 -1
- package/dist/base-assets/connectors/local.js +0 -21
- package/dist/base-assets/connectors/mattermost/adapter.d.ts.map +0 -1
- package/dist/base-assets/connectors/mattermost.js +0 -21
- package/dist/base-assets/connectors/memory/adapter.d.ts.map +0 -1
- package/dist/base-assets/connectors/memory.js +0 -21
- package/dist/base-assets/connectors/minio/adapter.d.ts.map +0 -1
- package/dist/base-assets/connectors/minio.js +0 -21
- package/dist/base-assets/connectors/postgres/adapter.d.ts.map +0 -1
- package/dist/base-assets/connectors/postgres.js +0 -21
- package/dist/base-assets/connectors/s3/driver.d.ts.map +0 -1
- package/dist/base-assets/connectors/s3.js +0 -21
- package/dist/base-assets/connectors/sharepoint/driver.d.ts.map +0 -1
- package/dist/base-assets/connectors/sharepoint.js +0 -21
- package/dist/base-assets/connectors/sqlite/adapter.d.ts.map +0 -1
- package/dist/base-assets/connectors/sqlite.js +0 -21
- package/dist/base-assets/connectors/static-server/adapter.d.ts.map +0 -1
- package/dist/base-assets/connectors/static-server.js +0 -21
- package/dist/base-assets/connectors/tunnel/adapter.d.ts.map +0 -1
- package/dist/base-assets/connectors/tunnel.js +0 -21
- package/dist/base-assets/connectors/webdav/driver.d.ts.map +0 -1
- package/dist/base-assets/connectors/webdav.js +0 -21
- package/dist/base-assets/connectors/xstate/adapter.d.ts.map +0 -1
- package/dist/base-assets/connectors/xstate-store/adapter.d.ts.map +0 -1
- package/dist/base-assets/connectors/xstate-store.js +0 -21
- package/dist/base-assets/connectors/xstate.js +0 -21
- package/dist/base-assets/index.d.ts.map +0 -1
- package/dist/base-assets/index.js.map +0 -1
- package/dist/chunk-2F3RUZXC.js.map +0 -1
- package/dist/chunk-2M3XTMOL.js +0 -23
- package/dist/chunk-2M3XTMOL.js.map +0 -1
- package/dist/chunk-2RFOFHSM.js.map +0 -1
- package/dist/chunk-2XY6732A.js.map +0 -1
- package/dist/chunk-46COM7M5.js.map +0 -1
- package/dist/chunk-542K7SR6.js.map +0 -1
- package/dist/chunk-5ESCS2OS.js.map +0 -1
- package/dist/chunk-D3VO6WNC.js.map +0 -1
- package/dist/chunk-DQWREFRQ.js.map +0 -1
- package/dist/chunk-FVTV7M76.js.map +0 -1
- package/dist/chunk-GCJXPUHG.js.map +0 -1
- package/dist/chunk-GZWJGNNN.js.map +0 -1
- package/dist/chunk-HIIARTRZ.js.map +0 -1
- package/dist/chunk-ICS76R4T.js.map +0 -1
- package/dist/chunk-JDX54X4Y.js.map +0 -1
- package/dist/chunk-JQBHCJ6N.js.map +0 -1
- package/dist/chunk-KLNL7QHN.js.map +0 -1
- package/dist/chunk-KOVLSBXK.js.map +0 -1
- package/dist/chunk-LJ52ZKIU.js.map +0 -1
- package/dist/chunk-M5TE6YI5.js.map +0 -1
- package/dist/chunk-N6TA6RSH.js.map +0 -1
- package/dist/chunk-NELZIQ2E.js.map +0 -1
- package/dist/chunk-OYRW5RCM.js.map +0 -1
- package/dist/chunk-QAVZOJCV.js.map +0 -1
- package/dist/chunk-YX3UWPJ5.js.map +0 -1
- package/dist/chunk-Z3M5K67G.js.map +0 -1
- package/dist/ensure-sources-OJUBGX6Z.js.map +0 -1
- package/dist/open-library-67FSSQWE.js +0 -13
- package/dist/paths-FKKGS6BA.js +0 -4
- package/dist/plugin-store-IZ5SCRAV.js.map +0 -1
- package/dist/setup-J7CYEQOF.js.map +0 -1
- package/dist/skills-CRL3VJNN.js +0 -7
- package/dist/store-client-AEI6Y3KD.js +0 -14
- /package/dist/{base-assets → factory-assets}/connectors/deploy.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/deploy.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/devserver.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/devserver.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/flow/adapter.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/flow/engine/engine.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/flow/engine/flow-manifest.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/flow/engine/index.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/flow/engine/loader.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/flow/engine/types.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/flow/engine.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/flow/engine.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/flow/index.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/flow/prompt-fragments.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/flow/run-flow.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/flow/stimulus-driver.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/flow.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/flow.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/git.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/git.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/gmail.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/gmail.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/googledrive.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/googledrive.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/local.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/local.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/mattermost.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/mattermost.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/memory.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/memory.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/minio.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/minio.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/postgres.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/postgres.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/s3.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/s3.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/sharepoint.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/sharepoint.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/sqlite.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/sqlite.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/static-server.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/static-server.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/tunnel.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/tunnel.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/webdav.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/webdav.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/xstate-store.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/xstate-store.js.map +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/xstate.d.ts +0 -0
- /package/dist/{base-assets → factory-assets}/connectors/xstate.js.map +0 -0
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { resolveAuthRef, resolveAuth } from './chunk-
|
|
1
|
+
import { resolveAuthRef, resolveAuth } from './chunk-ZYDE52WE.js';
|
|
2
2
|
import { createFsWatcher, RcloneProcessManager, ensureDirMode, PortPool } from './chunk-QMONOHXT.js';
|
|
3
|
-
import { renderWebDAVConfig, renderOneDriveConfig, renderGoogleDriveConfig } from './chunk-
|
|
3
|
+
import { renderWebDAVConfig, renderOneDriveConfig, renderGoogleDriveConfig } from './chunk-OVRSNIKJ.js';
|
|
4
4
|
import { pluginRegistry } from './chunk-6E6PKKAD.js';
|
|
5
|
-
import { computeFlowStateFromSnapshots } from './chunk-
|
|
6
|
-
import { renderStimulusPrompt } from './chunk-
|
|
7
|
-
import { computeStimulus } from './chunk-
|
|
8
|
-
import { portableSpawn } from './chunk-
|
|
5
|
+
import { computeFlowStateFromSnapshots } from './chunk-W7W66MDZ.js';
|
|
6
|
+
import { renderStimulusPrompt } from './chunk-DEYYRFQU.js';
|
|
7
|
+
import { computeStimulus } from './chunk-IFGTRL2I.js';
|
|
8
|
+
import { portableSpawn } from './chunk-KL2MQ6WI.js';
|
|
9
9
|
import { createLogger } from './chunk-24UIWON4.js';
|
|
10
10
|
import { existsSync, mkdirSync, renameSync, writeFileSync, readFileSync, cpSync, statSync, createReadStream, readdirSync, openSync, writeSync, closeSync, chmodSync } from 'fs';
|
|
11
|
-
import { join, dirname, resolve, sep } from 'path';
|
|
11
|
+
import path, { join, dirname, resolve, sep } from 'path';
|
|
12
12
|
import * as zNS from 'zod';
|
|
13
|
-
import { execFile, execSync } from 'child_process';
|
|
13
|
+
import { execFile, execSync, spawn } from 'child_process';
|
|
14
14
|
import { promisify } from 'util';
|
|
15
15
|
import { createServer } from 'http';
|
|
16
16
|
import mime from 'mime';
|
|
17
|
+
import { stat, readdir, mkdir, writeFile, chmod, rm } from 'fs/promises';
|
|
17
18
|
import { createRequire } from 'module';
|
|
18
19
|
import { pathToFileURL } from 'url';
|
|
19
|
-
import { stat, readdir } from 'fs/promises';
|
|
20
20
|
|
|
21
21
|
// connectors/src/connector-base.ts
|
|
22
22
|
var AbstractConnector = class {
|
|
@@ -148,6 +148,9 @@ var GitConnector = class extends AbstractConnector {
|
|
|
148
148
|
this.log.error("connect failed: missing mount.source URL", void 0);
|
|
149
149
|
throw new Error("Git connector requires a mount.source URL");
|
|
150
150
|
}
|
|
151
|
+
if (!isValidGitRefOrSha(branch)) {
|
|
152
|
+
throw new Error(`Git connector: invalid branch name "${branch}"`);
|
|
153
|
+
}
|
|
151
154
|
this.log.info("mount start", { url, branch, targetDir });
|
|
152
155
|
const initial = await this.acquireInitialToken(declaration, secrets, tokenMediator);
|
|
153
156
|
const session = parseSessionConfig(opts);
|
|
@@ -197,6 +200,9 @@ var GitConnector = class extends AbstractConnector {
|
|
|
197
200
|
}
|
|
198
201
|
if (session.enabled && !session.isMain && session.slug) {
|
|
199
202
|
const sessionBranch = `${session.branchPrefix}${session.slug}`;
|
|
203
|
+
if (!isValidGitRefOrSha(sessionBranch)) {
|
|
204
|
+
throw new Error(`Git connector: invalid session branch name "${sessionBranch}"`);
|
|
205
|
+
}
|
|
200
206
|
try {
|
|
201
207
|
git(`rev-parse --verify origin/${sessionBranch}`, targetDir);
|
|
202
208
|
git(`checkout -B ${sessionBranch} origin/${sessionBranch}`, targetDir);
|
|
@@ -389,12 +395,19 @@ var GitConnector = class extends AbstractConnector {
|
|
|
389
395
|
this.resetAutoCommitTimer(s, handle.mountPath);
|
|
390
396
|
};
|
|
391
397
|
let fsWatcher = null;
|
|
398
|
+
let closed = false;
|
|
392
399
|
const ignored = [...options?.ignored ?? [], "**/.git/**"];
|
|
393
400
|
createFsWatcher(handle.mountPath, s.emitChange, { ...options, ignored }).then((w) => {
|
|
394
|
-
|
|
401
|
+
if (closed) void w.close();
|
|
402
|
+
else fsWatcher = w;
|
|
403
|
+
}).catch((err) => {
|
|
404
|
+
this.log.warn("watcher creation failed", {
|
|
405
|
+
error: err instanceof Error ? err.message : String(err)
|
|
406
|
+
});
|
|
395
407
|
});
|
|
396
408
|
return {
|
|
397
409
|
close: async () => {
|
|
410
|
+
closed = true;
|
|
398
411
|
s.emitChange = void 0;
|
|
399
412
|
await fsWatcher?.close();
|
|
400
413
|
}
|
|
@@ -1033,11 +1046,18 @@ var LocalConnector = class extends AbstractConnector {
|
|
|
1033
1046
|
}
|
|
1034
1047
|
watch(handle, callback, options) {
|
|
1035
1048
|
let fsWatcher = null;
|
|
1049
|
+
let closed = false;
|
|
1036
1050
|
createFsWatcher(handle.mountPath, callback, options).then((w) => {
|
|
1037
|
-
|
|
1051
|
+
if (closed) void w.close();
|
|
1052
|
+
else fsWatcher = w;
|
|
1053
|
+
}).catch((err) => {
|
|
1054
|
+
this.log.warn("watcher creation failed", {
|
|
1055
|
+
error: err instanceof Error ? err.message : String(err)
|
|
1056
|
+
});
|
|
1038
1057
|
});
|
|
1039
1058
|
return {
|
|
1040
1059
|
close: async () => {
|
|
1060
|
+
closed = true;
|
|
1041
1061
|
await fsWatcher?.close();
|
|
1042
1062
|
}
|
|
1043
1063
|
};
|
|
@@ -1090,7 +1110,7 @@ var S3Connector = class extends AbstractConnector {
|
|
|
1090
1110
|
if (endpoint) clientConfig.endpoint = endpoint;
|
|
1091
1111
|
const profile = resolveAuth(declaration.auth, secrets);
|
|
1092
1112
|
if (profile) {
|
|
1093
|
-
|
|
1113
|
+
clientConfig.profile = profile;
|
|
1094
1114
|
}
|
|
1095
1115
|
const client = new S3Client(clientConfig);
|
|
1096
1116
|
const state = { client, bucket, prefix, region };
|
|
@@ -1147,15 +1167,18 @@ var S3Connector = class extends AbstractConnector {
|
|
|
1147
1167
|
continuationToken = resp.IsTruncated ? resp.NextContinuationToken : void 0;
|
|
1148
1168
|
} while (continuationToken);
|
|
1149
1169
|
let filesWritten = 0;
|
|
1170
|
+
let bytesTransferred = 0;
|
|
1150
1171
|
for (const { key, relPath } of entries) {
|
|
1151
1172
|
try {
|
|
1152
1173
|
const resp = await client.send(new s3Mod.GetObjectCommand({ Bucket: bucket, Key: key }));
|
|
1153
|
-
const
|
|
1154
|
-
if (
|
|
1174
|
+
const bytes = await resp.Body?.transformToByteArray();
|
|
1175
|
+
if (bytes == null) continue;
|
|
1176
|
+
const body = Buffer.from(bytes);
|
|
1155
1177
|
const localPath = join(targetDir, relPath);
|
|
1156
1178
|
mkdirSync(dirname(localPath), { recursive: true });
|
|
1157
1179
|
writeFileSync(localPath, body);
|
|
1158
1180
|
filesWritten++;
|
|
1181
|
+
bytesTransferred += body.byteLength;
|
|
1159
1182
|
} catch (err) {
|
|
1160
1183
|
this.log.warn("object download failed", {
|
|
1161
1184
|
key,
|
|
@@ -1163,7 +1186,7 @@ var S3Connector = class extends AbstractConnector {
|
|
|
1163
1186
|
});
|
|
1164
1187
|
}
|
|
1165
1188
|
}
|
|
1166
|
-
return { filesWritten, filesDeleted: 0, bytesTransferred
|
|
1189
|
+
return { filesWritten, filesDeleted: 0, bytesTransferred };
|
|
1167
1190
|
}
|
|
1168
1191
|
};
|
|
1169
1192
|
function createConnector4(sdkOverride) {
|
|
@@ -1343,7 +1366,7 @@ async function obscurePassword(plain) {
|
|
|
1343
1366
|
}
|
|
1344
1367
|
}
|
|
1345
1368
|
|
|
1346
|
-
//
|
|
1369
|
+
// factory-assets/connectors/sharepoint/driver.ts
|
|
1347
1370
|
var DEFAULT_CACHE_BASE = "/var/cache/skaile";
|
|
1348
1371
|
function cacheBase() {
|
|
1349
1372
|
return process.env.SKAILE_RCLONE_CACHE_BASE ?? DEFAULT_CACHE_BASE;
|
|
@@ -1528,7 +1551,7 @@ function buildRemotePath(folderPath, basePath) {
|
|
|
1528
1551
|
return joined.length > 0 ? `/${joined}` : "/";
|
|
1529
1552
|
}
|
|
1530
1553
|
|
|
1531
|
-
//
|
|
1554
|
+
// factory-assets/connectors/googledrive/driver.ts
|
|
1532
1555
|
var CACHE_BASE2 = "/var/cache/skaile";
|
|
1533
1556
|
var ALLOWED_SCOPES = /* @__PURE__ */ new Set([
|
|
1534
1557
|
"drive",
|
|
@@ -1707,17 +1730,17 @@ function parseAuthBlob2(raw, log) {
|
|
|
1707
1730
|
}
|
|
1708
1731
|
}
|
|
1709
1732
|
|
|
1710
|
-
//
|
|
1733
|
+
// factory-assets/connectors/memory/adapter.ts
|
|
1711
1734
|
var MemoryConnector = class extends AbstractConnector {
|
|
1712
1735
|
name = "memory";
|
|
1713
1736
|
tools;
|
|
1714
1737
|
constructor() {
|
|
1715
1738
|
super();
|
|
1716
1739
|
this.tools = {
|
|
1717
|
-
read: (handle,
|
|
1718
|
-
write: (handle,
|
|
1719
|
-
delete: (handle,
|
|
1720
|
-
list: (handle,
|
|
1740
|
+
read: (handle, path2) => this._read(handle, path2),
|
|
1741
|
+
write: (handle, path2, content) => this._write(handle, path2, content),
|
|
1742
|
+
delete: (handle, path2) => this._delete(handle, path2),
|
|
1743
|
+
list: (handle, path2, options) => this._list(handle, path2, options),
|
|
1721
1744
|
search: (handle, query, options) => this._search(handle, query, options),
|
|
1722
1745
|
describeOperations: (handle) => this._describeOperations(handle),
|
|
1723
1746
|
executeOp: (handle, operation, args) => this._executeOp(handle, operation, args)
|
|
@@ -1736,26 +1759,26 @@ var MemoryConnector = class extends AbstractConnector {
|
|
|
1736
1759
|
store(handle) {
|
|
1737
1760
|
return handle.state.store;
|
|
1738
1761
|
}
|
|
1739
|
-
async _read(handle,
|
|
1740
|
-
const value = this.store(handle).get(
|
|
1762
|
+
async _read(handle, path2) {
|
|
1763
|
+
const value = this.store(handle).get(path2);
|
|
1741
1764
|
if (value === void 0) return null;
|
|
1742
1765
|
return { data: value, contentType: "application/json" };
|
|
1743
1766
|
}
|
|
1744
|
-
async _write(handle,
|
|
1745
|
-
const isNew = !this.store(handle).has(
|
|
1767
|
+
async _write(handle, path2, content) {
|
|
1768
|
+
const isNew = !this.store(handle).has(path2);
|
|
1746
1769
|
this.store(handle).set(
|
|
1747
|
-
|
|
1770
|
+
path2,
|
|
1748
1771
|
typeof content.data === "string" ? content.data : content.data.toString("utf-8")
|
|
1749
1772
|
);
|
|
1750
|
-
this.emitChange?.({ path, action: isNew ? "create" : "edit", source: "operation" });
|
|
1773
|
+
this.emitChange?.({ path: path2, action: isNew ? "create" : "edit", source: "operation" });
|
|
1751
1774
|
}
|
|
1752
|
-
async _delete(handle,
|
|
1753
|
-
const deleted = this.store(handle).delete(
|
|
1754
|
-
if (deleted) this.emitChange?.({ path, action: "delete", source: "operation" });
|
|
1775
|
+
async _delete(handle, path2) {
|
|
1776
|
+
const deleted = this.store(handle).delete(path2);
|
|
1777
|
+
if (deleted) this.emitChange?.({ path: path2, action: "delete", source: "operation" });
|
|
1755
1778
|
return deleted;
|
|
1756
1779
|
}
|
|
1757
|
-
async _list(handle,
|
|
1758
|
-
const prefix =
|
|
1780
|
+
async _list(handle, path2, options) {
|
|
1781
|
+
const prefix = path2 ?? "";
|
|
1759
1782
|
const entries = [];
|
|
1760
1783
|
for (const key of this.store(handle).keys()) {
|
|
1761
1784
|
if (prefix && !key.startsWith(prefix)) continue;
|
|
@@ -1853,22 +1876,26 @@ var MemoryConnector = class extends AbstractConnector {
|
|
|
1853
1876
|
}
|
|
1854
1877
|
};
|
|
1855
1878
|
function matchGlob(str, pattern) {
|
|
1856
|
-
const
|
|
1879
|
+
const escaped = pattern.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
1880
|
+
const regex = new RegExp(`^${escaped.replace(/\\\*/g, ".*").replace(/\\\?/g, ".")}$`);
|
|
1857
1881
|
return regex.test(str);
|
|
1858
1882
|
}
|
|
1859
1883
|
function createConnector8() {
|
|
1860
1884
|
return new MemoryConnector();
|
|
1861
1885
|
}
|
|
1862
1886
|
|
|
1863
|
-
//
|
|
1887
|
+
// factory-assets/connectors/postgres/adapter.ts
|
|
1888
|
+
function quoteIdent(ident) {
|
|
1889
|
+
return ident.replace(/"/g, '""');
|
|
1890
|
+
}
|
|
1864
1891
|
var PostgresConnector = class extends AbstractConnector {
|
|
1865
1892
|
name = "postgres";
|
|
1866
1893
|
tools;
|
|
1867
1894
|
constructor() {
|
|
1868
1895
|
super();
|
|
1869
1896
|
this.tools = {
|
|
1870
|
-
read: (handle,
|
|
1871
|
-
list: (handle,
|
|
1897
|
+
read: (handle, path2) => this._read(handle, path2),
|
|
1898
|
+
list: (handle, path2, options) => this._list(handle, path2, options),
|
|
1872
1899
|
search: (handle, query, options) => this._search(handle, query, options),
|
|
1873
1900
|
describeOperations: (handle) => this._describeOperations(handle),
|
|
1874
1901
|
executeOp: (handle, operation, args) => this._executeOp(handle, operation, args),
|
|
@@ -1947,8 +1974,8 @@ var PostgresConnector = class extends AbstractConnector {
|
|
|
1947
1974
|
return handle.state.pool;
|
|
1948
1975
|
}
|
|
1949
1976
|
// Base ops map to table/row access via path convention: <table>/<pk>
|
|
1950
|
-
async _read(handle,
|
|
1951
|
-
const parts =
|
|
1977
|
+
async _read(handle, path2) {
|
|
1978
|
+
const parts = path2.split("/");
|
|
1952
1979
|
if (parts.length === 1) {
|
|
1953
1980
|
const table2 = parts[0];
|
|
1954
1981
|
const result2 = await this.pool(handle).query(
|
|
@@ -1960,14 +1987,15 @@ var PostgresConnector = class extends AbstractConnector {
|
|
|
1960
1987
|
return { data: JSON.stringify(result2.rows, null, 2), contentType: "application/json" };
|
|
1961
1988
|
}
|
|
1962
1989
|
const [table, pk] = parts;
|
|
1963
|
-
const result = await this.pool(handle).query(
|
|
1964
|
-
|
|
1965
|
-
|
|
1990
|
+
const result = await this.pool(handle).query(
|
|
1991
|
+
`SELECT * FROM "${quoteIdent(table)}" WHERE id = $1 LIMIT 1`,
|
|
1992
|
+
[pk]
|
|
1993
|
+
);
|
|
1966
1994
|
if (result.rows.length === 0) return null;
|
|
1967
1995
|
return { data: JSON.stringify(result.rows[0], null, 2), contentType: "application/json" };
|
|
1968
1996
|
}
|
|
1969
|
-
async _list(handle,
|
|
1970
|
-
if (!
|
|
1997
|
+
async _list(handle, path2, options) {
|
|
1998
|
+
if (!path2) {
|
|
1971
1999
|
const result2 = await this.pool(handle).query(
|
|
1972
2000
|
`SELECT table_name FROM information_schema.tables
|
|
1973
2001
|
WHERE table_schema = 'public' ORDER BY table_name`
|
|
@@ -1979,10 +2007,12 @@ var PostgresConnector = class extends AbstractConnector {
|
|
|
1979
2007
|
}));
|
|
1980
2008
|
}
|
|
1981
2009
|
const limit = options?.limit ?? 100;
|
|
1982
|
-
const result = await this.pool(handle).query(`SELECT * FROM "${
|
|
2010
|
+
const result = await this.pool(handle).query(`SELECT * FROM "${quoteIdent(path2)}" LIMIT $1`, [
|
|
2011
|
+
limit
|
|
2012
|
+
]);
|
|
1983
2013
|
return result.rows.map((row, i) => ({
|
|
1984
2014
|
name: String(row.id ?? i),
|
|
1985
|
-
path: `${
|
|
2015
|
+
path: `${path2}/${row.id ?? i}`,
|
|
1986
2016
|
type: "row"
|
|
1987
2017
|
}));
|
|
1988
2018
|
}
|
|
@@ -1999,9 +2029,9 @@ var PostgresConnector = class extends AbstractConnector {
|
|
|
1999
2029
|
[table.name]
|
|
2000
2030
|
);
|
|
2001
2031
|
if (cols.rows.length === 0) continue;
|
|
2002
|
-
const conditions = cols.rows.map((c) => `"${c.column_name}"::text ILIKE $1`).join(" OR ");
|
|
2032
|
+
const conditions = cols.rows.map((c) => `"${quoteIdent(String(c.column_name))}"::text ILIKE $1`).join(" OR ");
|
|
2003
2033
|
const searchResult = await this.pool(handle).query(
|
|
2004
|
-
`SELECT * FROM "${table.name}" WHERE ${conditions} LIMIT $2`,
|
|
2034
|
+
`SELECT * FROM "${quoteIdent(table.name)}" WHERE ${conditions} LIMIT $2`,
|
|
2005
2035
|
[`%${query}%`, maxResults - results.length]
|
|
2006
2036
|
);
|
|
2007
2037
|
for (const row of searchResult.rows) {
|
|
@@ -2124,14 +2154,17 @@ var PostgresConnector = class extends AbstractConnector {
|
|
|
2124
2154
|
function createConnector9() {
|
|
2125
2155
|
return new PostgresConnector();
|
|
2126
2156
|
}
|
|
2157
|
+
function quoteIdent2(ident) {
|
|
2158
|
+
return ident.replace(/"/g, '""');
|
|
2159
|
+
}
|
|
2127
2160
|
var SQLiteConnector = class extends AbstractConnector {
|
|
2128
2161
|
name = "sqlite";
|
|
2129
2162
|
tools;
|
|
2130
2163
|
constructor() {
|
|
2131
2164
|
super();
|
|
2132
2165
|
this.tools = {
|
|
2133
|
-
read: (handle,
|
|
2134
|
-
list: (handle,
|
|
2166
|
+
read: (handle, path2) => this._read(handle, path2),
|
|
2167
|
+
list: (handle, path2, options) => this._list(handle, path2, options),
|
|
2135
2168
|
search: (handle, query, options) => this._search(handle, query, options),
|
|
2136
2169
|
describeOperations: (handle) => this._describeOperations(handle),
|
|
2137
2170
|
executeOp: (handle, operation, args) => this._executeOp(handle, operation, args)
|
|
@@ -2215,23 +2248,25 @@ var SQLiteConnector = class extends AbstractConnector {
|
|
|
2215
2248
|
const changes = db.getRowsModified();
|
|
2216
2249
|
return changes;
|
|
2217
2250
|
}
|
|
2218
|
-
async _read(handle,
|
|
2219
|
-
const parts =
|
|
2251
|
+
async _read(handle, path2) {
|
|
2252
|
+
const parts = path2.split("/");
|
|
2220
2253
|
if (parts.length === 1) {
|
|
2221
2254
|
const table2 = parts[0];
|
|
2222
|
-
const info = this.queryRows(this.db(handle), `PRAGMA table_info("${table2}")`);
|
|
2255
|
+
const info = this.queryRows(this.db(handle), `PRAGMA table_info("${quoteIdent2(table2)}")`);
|
|
2223
2256
|
if (info.length === 0) return null;
|
|
2224
2257
|
return { data: JSON.stringify(info, null, 2), contentType: "application/json" };
|
|
2225
2258
|
}
|
|
2226
2259
|
const [table, rowid] = parts;
|
|
2227
|
-
const rows = this.queryRows(
|
|
2228
|
-
|
|
2229
|
-
|
|
2260
|
+
const rows = this.queryRows(
|
|
2261
|
+
this.db(handle),
|
|
2262
|
+
`SELECT * FROM "${quoteIdent2(table)}" WHERE rowid = ?`,
|
|
2263
|
+
[rowid]
|
|
2264
|
+
);
|
|
2230
2265
|
if (rows.length === 0) return null;
|
|
2231
2266
|
return { data: JSON.stringify(rows[0], null, 2), contentType: "application/json" };
|
|
2232
2267
|
}
|
|
2233
|
-
async _list(handle,
|
|
2234
|
-
if (!
|
|
2268
|
+
async _list(handle, path2, options) {
|
|
2269
|
+
if (!path2) {
|
|
2235
2270
|
const tables = this.queryRows(
|
|
2236
2271
|
this.db(handle),
|
|
2237
2272
|
"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name"
|
|
@@ -2243,10 +2278,14 @@ var SQLiteConnector = class extends AbstractConnector {
|
|
|
2243
2278
|
}));
|
|
2244
2279
|
}
|
|
2245
2280
|
const limit = options?.limit ?? 100;
|
|
2246
|
-
const rows = this.queryRows(
|
|
2281
|
+
const rows = this.queryRows(
|
|
2282
|
+
this.db(handle),
|
|
2283
|
+
`SELECT rowid, * FROM "${quoteIdent2(path2)}" LIMIT ?`,
|
|
2284
|
+
[limit]
|
|
2285
|
+
);
|
|
2247
2286
|
return rows.map((row) => ({
|
|
2248
2287
|
name: String(row.rowid ?? row.id ?? "?"),
|
|
2249
|
-
path: `${
|
|
2288
|
+
path: `${path2}/${row.rowid ?? row.id ?? "?"}`,
|
|
2250
2289
|
type: "row"
|
|
2251
2290
|
}));
|
|
2252
2291
|
}
|
|
@@ -2257,15 +2296,18 @@ var SQLiteConnector = class extends AbstractConnector {
|
|
|
2257
2296
|
for (const table of tables) {
|
|
2258
2297
|
if (results.length >= maxResults) break;
|
|
2259
2298
|
try {
|
|
2260
|
-
const info = this.queryRows(
|
|
2299
|
+
const info = this.queryRows(
|
|
2300
|
+
this.db(handle),
|
|
2301
|
+
`PRAGMA table_info("${quoteIdent2(table.name)}")`
|
|
2302
|
+
);
|
|
2261
2303
|
const textCols = info.filter((c) => /text|varchar|char/i.test(String(c.type ?? "")));
|
|
2262
2304
|
if (textCols.length === 0) continue;
|
|
2263
|
-
const conditions = textCols.map((c) => `"${c.name}" LIKE ?`).join(" OR ");
|
|
2305
|
+
const conditions = textCols.map((c) => `"${quoteIdent2(String(c.name))}" LIKE ?`).join(" OR ");
|
|
2264
2306
|
const params = textCols.map(() => `%${query}%`);
|
|
2265
2307
|
params.push(maxResults - results.length);
|
|
2266
2308
|
const rows = this.queryRows(
|
|
2267
2309
|
this.db(handle),
|
|
2268
|
-
`SELECT rowid, * FROM "${table.name}" WHERE ${conditions} LIMIT ?`,
|
|
2310
|
+
`SELECT rowid, * FROM "${quoteIdent2(table.name)}" WHERE ${conditions} LIMIT ?`,
|
|
2269
2311
|
params
|
|
2270
2312
|
);
|
|
2271
2313
|
for (const row of rows) {
|
|
@@ -2332,7 +2374,7 @@ var SQLiteConnector = class extends AbstractConnector {
|
|
|
2332
2374
|
case "schema": {
|
|
2333
2375
|
const table = args.table ? String(args.table) : void 0;
|
|
2334
2376
|
if (table) {
|
|
2335
|
-
const info = this.queryRows(db, `PRAGMA table_info("${table}")`);
|
|
2377
|
+
const info = this.queryRows(db, `PRAGMA table_info("${quoteIdent2(table)}")`);
|
|
2336
2378
|
return JSON.stringify(info, null, 2);
|
|
2337
2379
|
}
|
|
2338
2380
|
const tables = this.queryRows(
|
|
@@ -2341,7 +2383,10 @@ var SQLiteConnector = class extends AbstractConnector {
|
|
|
2341
2383
|
);
|
|
2342
2384
|
const result = {};
|
|
2343
2385
|
for (const t of tables) {
|
|
2344
|
-
result[t.name] = this.queryRows(
|
|
2386
|
+
result[t.name] = this.queryRows(
|
|
2387
|
+
db,
|
|
2388
|
+
`PRAGMA table_info("${quoteIdent2(String(t.name))}")`
|
|
2389
|
+
);
|
|
2345
2390
|
}
|
|
2346
2391
|
return JSON.stringify(result, null, 2);
|
|
2347
2392
|
}
|
|
@@ -2363,15 +2408,15 @@ function createConnector10() {
|
|
|
2363
2408
|
return new SQLiteConnector();
|
|
2364
2409
|
}
|
|
2365
2410
|
|
|
2366
|
-
//
|
|
2411
|
+
// factory-assets/connectors/minio/adapter.ts
|
|
2367
2412
|
var MinIOConnector = class extends AbstractConnector {
|
|
2368
2413
|
name = "minio";
|
|
2369
2414
|
tools;
|
|
2370
2415
|
constructor() {
|
|
2371
2416
|
super();
|
|
2372
2417
|
this.tools = {
|
|
2373
|
-
list: (handle,
|
|
2374
|
-
read: (handle,
|
|
2418
|
+
list: (handle, path2) => this._list(handle, path2),
|
|
2419
|
+
read: (handle, path2) => this._read(handle, path2),
|
|
2375
2420
|
describeOperations: (handle) => this._describeOperations(handle),
|
|
2376
2421
|
executeOp: (handle, operation, args) => this._executeOp(handle, operation, args),
|
|
2377
2422
|
describeSkill: (handle, declaration) => this._describeSkill(handle, declaration)
|
|
@@ -2549,10 +2594,10 @@ var MinIOConnector = class extends AbstractConnector {
|
|
|
2549
2594
|
}
|
|
2550
2595
|
return ops;
|
|
2551
2596
|
}
|
|
2552
|
-
async _list(handle,
|
|
2597
|
+
async _list(handle, path2, recursive = false) {
|
|
2553
2598
|
const { client, bucket } = handle.state;
|
|
2554
2599
|
const entries = [];
|
|
2555
|
-
const stream = client.listObjects(bucket,
|
|
2600
|
+
const stream = client.listObjects(bucket, path2 ?? "", recursive);
|
|
2556
2601
|
return new Promise((resolve5, reject) => {
|
|
2557
2602
|
stream.on("data", (obj) => {
|
|
2558
2603
|
entries.push({
|
|
@@ -2567,10 +2612,10 @@ var MinIOConnector = class extends AbstractConnector {
|
|
|
2567
2612
|
stream.on("error", reject);
|
|
2568
2613
|
});
|
|
2569
2614
|
}
|
|
2570
|
-
async _read(handle,
|
|
2615
|
+
async _read(handle, path2) {
|
|
2571
2616
|
const { client, bucket } = handle.state;
|
|
2572
2617
|
const chunks = [];
|
|
2573
|
-
const stream = await client.getObject(bucket,
|
|
2618
|
+
const stream = await client.getObject(bucket, path2);
|
|
2574
2619
|
return new Promise((resolve5, reject) => {
|
|
2575
2620
|
stream.on("data", (chunk) => chunks.push(chunk));
|
|
2576
2621
|
stream.on("end", () => resolve5({ data: Buffer.concat(chunks).toString() }));
|
|
@@ -2581,7 +2626,11 @@ var MinIOConnector = class extends AbstractConnector {
|
|
|
2581
2626
|
const { client, bucket } = handle.state;
|
|
2582
2627
|
switch (operation) {
|
|
2583
2628
|
case "list_objects":
|
|
2584
|
-
return JSON.stringify(
|
|
2629
|
+
return JSON.stringify(
|
|
2630
|
+
await this._list(handle, String(args.prefix ?? ""), Boolean(args.recursive)),
|
|
2631
|
+
null,
|
|
2632
|
+
2
|
|
2633
|
+
);
|
|
2585
2634
|
case "get_object": {
|
|
2586
2635
|
const content = await this._read(handle, String(args.key));
|
|
2587
2636
|
return content?.data?.toString() ?? "(empty)";
|
|
@@ -2619,8 +2668,8 @@ var XStateConnector = class extends AbstractConnector {
|
|
|
2619
2668
|
constructor() {
|
|
2620
2669
|
super();
|
|
2621
2670
|
this.tools = {
|
|
2622
|
-
read: (handle,
|
|
2623
|
-
list: (handle,
|
|
2671
|
+
read: (handle, path2) => this._read(handle, path2),
|
|
2672
|
+
list: (handle, path2, options) => this._list(handle, path2, options),
|
|
2624
2673
|
search: (handle, query) => this._search(handle, query),
|
|
2625
2674
|
describeOperations: (handle) => this._describeOperations(handle),
|
|
2626
2675
|
executeOp: (handle, operation, args) => this._executeOp(handle, operation, args)
|
|
@@ -2722,15 +2771,15 @@ var XStateConnector = class extends AbstractConnector {
|
|
|
2722
2771
|
this.s(handle).onChange = cb;
|
|
2723
2772
|
}
|
|
2724
2773
|
// ── Tool face methods (private, wired in constructor) ─────────────────────
|
|
2725
|
-
async _read(handle,
|
|
2774
|
+
async _read(handle, path2) {
|
|
2726
2775
|
const snapshot = this.s(handle).actor.getSnapshot();
|
|
2727
|
-
if (
|
|
2776
|
+
if (path2 === "" || path2 === "state") {
|
|
2728
2777
|
return { data: JSON.stringify(snapshot.value), contentType: "application/json" };
|
|
2729
2778
|
}
|
|
2730
|
-
if (
|
|
2779
|
+
if (path2 === "context") {
|
|
2731
2780
|
return { data: JSON.stringify(snapshot.context, null, 2), contentType: "application/json" };
|
|
2732
2781
|
}
|
|
2733
|
-
const value = snapshot.context?.[
|
|
2782
|
+
const value = snapshot.context?.[path2];
|
|
2734
2783
|
if (value === void 0) return null;
|
|
2735
2784
|
return { data: JSON.stringify(value), contentType: "application/json" };
|
|
2736
2785
|
}
|
|
@@ -2917,17 +2966,17 @@ function createConnector12() {
|
|
|
2917
2966
|
return new XStateConnector();
|
|
2918
2967
|
}
|
|
2919
2968
|
|
|
2920
|
-
//
|
|
2969
|
+
// factory-assets/connectors/xstate-store/adapter.ts
|
|
2921
2970
|
var XStateStoreConnector = class extends AbstractConnector {
|
|
2922
2971
|
name = "xstate-store";
|
|
2923
2972
|
tools;
|
|
2924
2973
|
constructor() {
|
|
2925
2974
|
super();
|
|
2926
2975
|
this.tools = {
|
|
2927
|
-
read: (handle,
|
|
2928
|
-
write: (handle,
|
|
2929
|
-
delete: (handle,
|
|
2930
|
-
list: (handle,
|
|
2976
|
+
read: (handle, path2) => this._read(handle, path2),
|
|
2977
|
+
write: (handle, path2, content) => this._write(handle, path2, content),
|
|
2978
|
+
delete: (handle, path2) => this._delete(handle, path2),
|
|
2979
|
+
list: (handle, path2, options) => this._list(handle, path2, options),
|
|
2931
2980
|
search: (handle, query, options) => this._search(handle, query, options),
|
|
2932
2981
|
describeOperations: (handle) => this._describeOperations(handle),
|
|
2933
2982
|
executeOp: (handle, operation, args) => this._executeOp(handle, operation, args)
|
|
@@ -2981,17 +3030,17 @@ var XStateStoreConnector = class extends AbstractConnector {
|
|
|
2981
3030
|
handle.state.onChange = cb;
|
|
2982
3031
|
}
|
|
2983
3032
|
// ── Tool face methods (private, wired in constructor) ─────────────────────
|
|
2984
|
-
async _read(handle,
|
|
3033
|
+
async _read(handle, path2) {
|
|
2985
3034
|
const ctx = this.context(handle);
|
|
2986
|
-
if (
|
|
3035
|
+
if (path2 === "*") {
|
|
2987
3036
|
if (Object.keys(ctx).length === 0) return null;
|
|
2988
3037
|
return { data: JSON.stringify(ctx, null, 2), contentType: "application/json" };
|
|
2989
3038
|
}
|
|
2990
|
-
const value = ctx[
|
|
3039
|
+
const value = ctx[path2];
|
|
2991
3040
|
if (value === void 0) return null;
|
|
2992
3041
|
return { data: JSON.stringify(value), contentType: "application/json" };
|
|
2993
3042
|
}
|
|
2994
|
-
async _write(handle,
|
|
3043
|
+
async _write(handle, path2, content) {
|
|
2995
3044
|
const data = typeof content.data === "string" ? content.data : content.data.toString("utf-8");
|
|
2996
3045
|
let value;
|
|
2997
3046
|
try {
|
|
@@ -2999,21 +3048,22 @@ var XStateStoreConnector = class extends AbstractConnector {
|
|
|
2999
3048
|
} catch {
|
|
3000
3049
|
value = data;
|
|
3001
3050
|
}
|
|
3002
|
-
this.storeState(handle).store.send({ type: "set", key:
|
|
3003
|
-
this._recordHistory(handle, "set", { key:
|
|
3051
|
+
this.storeState(handle).store.send({ type: "set", key: path2, value });
|
|
3052
|
+
this._recordHistory(handle, "set", { key: path2, value });
|
|
3004
3053
|
}
|
|
3005
|
-
async _delete(handle,
|
|
3054
|
+
async _delete(handle, path2) {
|
|
3006
3055
|
const ctx = this.context(handle);
|
|
3007
|
-
if (!(
|
|
3008
|
-
this.storeState(handle).store.send({ type: "delete", key:
|
|
3009
|
-
this._recordHistory(handle, "delete", { key:
|
|
3056
|
+
if (!(path2 in ctx)) return false;
|
|
3057
|
+
this.storeState(handle).store.send({ type: "delete", key: path2 });
|
|
3058
|
+
this._recordHistory(handle, "delete", { key: path2 });
|
|
3010
3059
|
return true;
|
|
3011
3060
|
}
|
|
3012
3061
|
async _list(handle, _path, options) {
|
|
3013
3062
|
const ctx = this.context(handle);
|
|
3014
3063
|
let keys = Object.keys(ctx);
|
|
3015
3064
|
if (options?.glob) {
|
|
3016
|
-
const
|
|
3065
|
+
const escaped = options.glob.replace(/[.+?^${}()|[\]\\]/g, "\\$&");
|
|
3066
|
+
const regex = new RegExp(`^${escaped.replace(/\*/g, ".*")}$`);
|
|
3017
3067
|
keys = keys.filter((k) => regex.test(k));
|
|
3018
3068
|
}
|
|
3019
3069
|
if (options?.limit) keys = keys.slice(0, options.limit);
|
|
@@ -3183,7 +3233,7 @@ function createConnector13() {
|
|
|
3183
3233
|
return new XStateStoreConnector();
|
|
3184
3234
|
}
|
|
3185
3235
|
|
|
3186
|
-
//
|
|
3236
|
+
// factory-assets/connectors/gmail/adapter.ts
|
|
3187
3237
|
var GmailConnector = class extends AbstractConnector {
|
|
3188
3238
|
name = "gmail";
|
|
3189
3239
|
tools;
|
|
@@ -3390,15 +3440,15 @@ function createConnector14() {
|
|
|
3390
3440
|
return new GmailConnector();
|
|
3391
3441
|
}
|
|
3392
3442
|
|
|
3393
|
-
//
|
|
3443
|
+
// factory-assets/connectors/mattermost/adapter.ts
|
|
3394
3444
|
var MattermostConnector = class extends AbstractConnector {
|
|
3395
3445
|
name = "mattermost";
|
|
3396
3446
|
tools;
|
|
3397
3447
|
constructor() {
|
|
3398
3448
|
super();
|
|
3399
3449
|
this.tools = {
|
|
3400
|
-
read: (handle,
|
|
3401
|
-
write: (handle,
|
|
3450
|
+
read: (handle, path2) => this._read(handle, path2),
|
|
3451
|
+
write: (handle, path2, content) => this._write(handle, path2, content),
|
|
3402
3452
|
describeOperations: (handle) => this._describeOperations(handle),
|
|
3403
3453
|
executeOp: (handle, operation, args) => this._executeOp(handle, operation, args),
|
|
3404
3454
|
describeSkill: (handle, declaration) => this._describeSkill(handle, declaration)
|
|
@@ -3470,22 +3520,23 @@ var MattermostConnector = class extends AbstractConnector {
|
|
|
3470
3520
|
handle.status = "disconnected";
|
|
3471
3521
|
}
|
|
3472
3522
|
// ── Tool face methods (private, wired in constructor) ─────────────────────
|
|
3473
|
-
async _read(handle,
|
|
3523
|
+
async _read(handle, path2) {
|
|
3474
3524
|
const state = handle.state;
|
|
3475
3525
|
try {
|
|
3476
|
-
const post = await this._apiGet(state.url, state.token, `/api/v4/posts/${
|
|
3526
|
+
const post = await this._apiGet(state.url, state.token, `/api/v4/posts/${path2}`);
|
|
3527
|
+
this._assertChannelAccess(String(post.channel_id ?? ""), state.channelFilter);
|
|
3477
3528
|
return { data: JSON.stringify(post, null, 2), contentType: "application/json" };
|
|
3478
3529
|
} catch {
|
|
3479
3530
|
return null;
|
|
3480
3531
|
}
|
|
3481
3532
|
}
|
|
3482
|
-
async _write(handle,
|
|
3533
|
+
async _write(handle, path2, content) {
|
|
3483
3534
|
if (handle.access === "read-only")
|
|
3484
3535
|
throw new Error("MattermostConnector: write denied \u2014 read-only");
|
|
3485
3536
|
const state = handle.state;
|
|
3486
3537
|
const message = typeof content === "string" ? content : String(content.data ?? "");
|
|
3487
|
-
await this._apiPut(state.url, state.token, `/api/v4/posts/${
|
|
3488
|
-
this.emitChange?.({ path, action: "edit", source: "operation" });
|
|
3538
|
+
await this._apiPut(state.url, state.token, `/api/v4/posts/${path2}`, { id: path2, message });
|
|
3539
|
+
this.emitChange?.({ path: path2, action: "edit", source: "operation" });
|
|
3489
3540
|
}
|
|
3490
3541
|
_describeSkill(handle, declaration) {
|
|
3491
3542
|
const state = handle.state;
|
|
@@ -3652,12 +3703,20 @@ var MattermostConnector = class extends AbstractConnector {
|
|
|
3652
3703
|
2
|
|
3653
3704
|
);
|
|
3654
3705
|
}
|
|
3655
|
-
case "get_thread":
|
|
3706
|
+
case "get_thread": {
|
|
3707
|
+
const postId = String(args.post_id);
|
|
3708
|
+
const post = await this._apiGet(
|
|
3709
|
+
state.url,
|
|
3710
|
+
state.token,
|
|
3711
|
+
`/api/v4/posts/${postId}`
|
|
3712
|
+
);
|
|
3713
|
+
this._assertChannelAccess(String(post.channel_id ?? ""), state.channelFilter);
|
|
3656
3714
|
return JSON.stringify(
|
|
3657
|
-
await this._apiGet(state.url, state.token, `/api/v4/posts/${
|
|
3715
|
+
await this._apiGet(state.url, state.token, `/api/v4/posts/${postId}/thread`),
|
|
3658
3716
|
null,
|
|
3659
3717
|
2
|
|
3660
3718
|
);
|
|
3719
|
+
}
|
|
3661
3720
|
case "search_posts": {
|
|
3662
3721
|
const body = { terms: String(args.terms), is_or_search: false };
|
|
3663
3722
|
if (args.team_id) body.team_id = String(args.team_id);
|
|
@@ -3735,31 +3794,31 @@ var MattermostConnector = class extends AbstractConnector {
|
|
|
3735
3794
|
return typeof id === "string" && filter.has(id);
|
|
3736
3795
|
});
|
|
3737
3796
|
}
|
|
3738
|
-
async _apiGet(baseUrl, token,
|
|
3739
|
-
const res = await fetch(baseUrl +
|
|
3797
|
+
async _apiGet(baseUrl, token, path2) {
|
|
3798
|
+
const res = await fetch(baseUrl + path2, { headers: { Authorization: `Bearer ${token}` } });
|
|
3740
3799
|
if (!res.ok) {
|
|
3741
3800
|
const body = await res.text();
|
|
3742
|
-
this.log.warn("REST error", { method: "GET", endpoint:
|
|
3743
|
-
throw new Error(`Mattermost GET ${
|
|
3801
|
+
this.log.warn("REST error", { method: "GET", endpoint: path2, status: res.status });
|
|
3802
|
+
throw new Error(`Mattermost GET ${path2}: ${res.status} ${body}`);
|
|
3744
3803
|
}
|
|
3745
3804
|
return res.json();
|
|
3746
3805
|
}
|
|
3747
|
-
async _apiPost(baseUrl, token,
|
|
3748
|
-
const res = await fetch(baseUrl +
|
|
3806
|
+
async _apiPost(baseUrl, token, path2, body) {
|
|
3807
|
+
const res = await fetch(baseUrl + path2, {
|
|
3749
3808
|
method: "POST",
|
|
3750
3809
|
headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
|
|
3751
3810
|
body: JSON.stringify(body)
|
|
3752
3811
|
});
|
|
3753
|
-
if (!res.ok) throw new Error(`Mattermost POST ${
|
|
3812
|
+
if (!res.ok) throw new Error(`Mattermost POST ${path2}: ${res.status} ${await res.text()}`);
|
|
3754
3813
|
return res.json();
|
|
3755
3814
|
}
|
|
3756
|
-
async _apiPut(baseUrl, token,
|
|
3757
|
-
const res = await fetch(baseUrl +
|
|
3815
|
+
async _apiPut(baseUrl, token, path2, body) {
|
|
3816
|
+
const res = await fetch(baseUrl + path2, {
|
|
3758
3817
|
method: "PUT",
|
|
3759
3818
|
headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
|
|
3760
3819
|
body: JSON.stringify(body)
|
|
3761
3820
|
});
|
|
3762
|
-
if (!res.ok) throw new Error(`Mattermost PUT ${
|
|
3821
|
+
if (!res.ok) throw new Error(`Mattermost PUT ${path2}: ${res.status} ${await res.text()}`);
|
|
3763
3822
|
return res.json();
|
|
3764
3823
|
}
|
|
3765
3824
|
};
|
|
@@ -3767,7 +3826,7 @@ function createConnector15() {
|
|
|
3767
3826
|
return new MattermostConnector();
|
|
3768
3827
|
}
|
|
3769
3828
|
|
|
3770
|
-
//
|
|
3829
|
+
// factory-assets/connectors/devserver/adapter.ts
|
|
3771
3830
|
function isPidAlive(pid) {
|
|
3772
3831
|
try {
|
|
3773
3832
|
process.kill(pid, 0);
|
|
@@ -4446,7 +4505,7 @@ function createConnector17() {
|
|
|
4446
4505
|
return new StaticServerConnector();
|
|
4447
4506
|
}
|
|
4448
4507
|
|
|
4449
|
-
//
|
|
4508
|
+
// factory-assets/connectors/tunnel/adapter.ts
|
|
4450
4509
|
var TunnelConnector = class extends AbstractConnector {
|
|
4451
4510
|
name = "tunnel";
|
|
4452
4511
|
tools;
|
|
@@ -4646,10 +4705,14 @@ async function spawnCloudflaredTunnel(port) {
|
|
|
4646
4705
|
return;
|
|
4647
4706
|
}
|
|
4648
4707
|
}
|
|
4708
|
+
proc.kill();
|
|
4649
4709
|
reject(new Error("cloudflared: failed to parse public URL"));
|
|
4650
4710
|
};
|
|
4651
4711
|
readLoop().catch(reject);
|
|
4652
|
-
setTimeout(() =>
|
|
4712
|
+
setTimeout(() => {
|
|
4713
|
+
proc.kill();
|
|
4714
|
+
reject(new Error("cloudflared: timed out"));
|
|
4715
|
+
}, 3e4);
|
|
4653
4716
|
});
|
|
4654
4717
|
}
|
|
4655
4718
|
async function spawnNgrokTunnel(port) {
|
|
@@ -5009,6 +5072,157 @@ var ConnectorStartupError = class extends Error {
|
|
|
5009
5072
|
this.failedReadWrite = failedReadWrite;
|
|
5010
5073
|
}
|
|
5011
5074
|
};
|
|
5075
|
+
function isFleetManaged(connectorId) {
|
|
5076
|
+
const raw = process.env.SKAILE_FLEET_MANAGED_MOUNTS ?? "";
|
|
5077
|
+
if (raw.length === 0) return false;
|
|
5078
|
+
return raw.split(",").map((segment) => segment.trim()).filter((segment) => segment.length > 0).includes(connectorId);
|
|
5079
|
+
}
|
|
5080
|
+
async function ensureFleetMounted(dir, log, options) {
|
|
5081
|
+
const timeoutMs = options?.timeoutMs ?? 3e3;
|
|
5082
|
+
const pollIntervalMs = options?.pollIntervalMs ?? 100;
|
|
5083
|
+
const deadline = Date.now() + timeoutMs;
|
|
5084
|
+
let lastErr = null;
|
|
5085
|
+
while (Date.now() < deadline) {
|
|
5086
|
+
try {
|
|
5087
|
+
const st = await stat(dir);
|
|
5088
|
+
if (!st.isDirectory()) {
|
|
5089
|
+
throw new Error(`fleet mountpoint ${dir} is not a directory`);
|
|
5090
|
+
}
|
|
5091
|
+
await readdir(dir);
|
|
5092
|
+
log.info("fleet bind mount verified", { dir });
|
|
5093
|
+
return;
|
|
5094
|
+
} catch (err) {
|
|
5095
|
+
lastErr = err;
|
|
5096
|
+
await new Promise((resolve5) => setTimeout(resolve5, pollIntervalMs));
|
|
5097
|
+
}
|
|
5098
|
+
}
|
|
5099
|
+
throw new Error(
|
|
5100
|
+
`fleet mount ${dir} not ready after ${timeoutMs}ms \u2014 check SKAILE_FLEET_MANAGED_MOUNTS env var and host bind: ${lastErr instanceof Error ? lastErr.message : String(lastErr)}`
|
|
5101
|
+
);
|
|
5102
|
+
}
|
|
5103
|
+
var NOT_READY_SENTINEL = ".skaile-workspace-not-ready";
|
|
5104
|
+
var SENTINEL_BODY = [
|
|
5105
|
+
"This workspace is backed by a remote mount that is not live yet.",
|
|
5106
|
+
"It is mounted read-only on purpose: writing here would create a phantom",
|
|
5107
|
+
"workspace that diverges from the remote once the mount comes up.",
|
|
5108
|
+
"Wait for the mount to finish syncing (watch connector_status) before writing.",
|
|
5109
|
+
""
|
|
5110
|
+
].join("\n");
|
|
5111
|
+
var defaultRunner = (cmd, args) => new Promise((resolve5, reject) => {
|
|
5112
|
+
const proc = spawn(cmd, args, { stdio: "ignore" });
|
|
5113
|
+
proc.once("error", reject);
|
|
5114
|
+
proc.once("close", (code, signal) => {
|
|
5115
|
+
if (code === 0) resolve5();
|
|
5116
|
+
else reject(new Error(`${cmd} ${args.join(" ")} exited ${code ?? `signal ${signal}`}`));
|
|
5117
|
+
});
|
|
5118
|
+
});
|
|
5119
|
+
var RoMountPlaceholderBarrier = class {
|
|
5120
|
+
run;
|
|
5121
|
+
modes = /* @__PURE__ */ new Map();
|
|
5122
|
+
constructor(opts) {
|
|
5123
|
+
this.run = opts?.run ?? defaultRunner;
|
|
5124
|
+
}
|
|
5125
|
+
async establish(target, log) {
|
|
5126
|
+
if (this.modes.has(target)) return;
|
|
5127
|
+
await mkdir(target, { recursive: true });
|
|
5128
|
+
let tmpfsMounted = false;
|
|
5129
|
+
try {
|
|
5130
|
+
await this.run("mount", [
|
|
5131
|
+
"-t",
|
|
5132
|
+
"tmpfs",
|
|
5133
|
+
"-o",
|
|
5134
|
+
"mode=0755,size=1m",
|
|
5135
|
+
"skaile-not-ready",
|
|
5136
|
+
target
|
|
5137
|
+
]);
|
|
5138
|
+
tmpfsMounted = true;
|
|
5139
|
+
await writeFile(path.join(target, NOT_READY_SENTINEL), SENTINEL_BODY);
|
|
5140
|
+
await this.run("mount", ["-o", "remount,ro", target]);
|
|
5141
|
+
this.modes.set(target, "mount");
|
|
5142
|
+
log?.info("deferred mount barrier established (read-only tmpfs)", { target });
|
|
5143
|
+
} catch (err) {
|
|
5144
|
+
if (tmpfsMounted) await this.run("umount", [target]).catch(() => {
|
|
5145
|
+
});
|
|
5146
|
+
await this.chmodFallback(target, err, log);
|
|
5147
|
+
}
|
|
5148
|
+
}
|
|
5149
|
+
async onMountLive(target, log) {
|
|
5150
|
+
const mode = this.modes.get(target);
|
|
5151
|
+
if (mode === "mount") {
|
|
5152
|
+
log?.debug("deferred mount live; placeholder shadowed", { target });
|
|
5153
|
+
return;
|
|
5154
|
+
}
|
|
5155
|
+
if (mode === "chmod" || mode === "unprotected") {
|
|
5156
|
+
if (mode === "chmod") await chmod(target, 493).catch(() => {
|
|
5157
|
+
});
|
|
5158
|
+
await rm(path.join(target, NOT_READY_SENTINEL), { force: true }).catch(() => {
|
|
5159
|
+
});
|
|
5160
|
+
log?.debug("deferred mount live; degraded barrier lifted", { target, mode });
|
|
5161
|
+
}
|
|
5162
|
+
}
|
|
5163
|
+
async remove(target, log) {
|
|
5164
|
+
const mode = this.modes.get(target);
|
|
5165
|
+
if (!mode) return;
|
|
5166
|
+
this.modes.delete(target);
|
|
5167
|
+
if (mode === "mount") {
|
|
5168
|
+
let unmounted = false;
|
|
5169
|
+
try {
|
|
5170
|
+
await this.run("umount", [target]);
|
|
5171
|
+
unmounted = true;
|
|
5172
|
+
} catch {
|
|
5173
|
+
await this.run("umount", ["-l", target]).then(
|
|
5174
|
+
() => {
|
|
5175
|
+
unmounted = true;
|
|
5176
|
+
},
|
|
5177
|
+
() => {
|
|
5178
|
+
}
|
|
5179
|
+
);
|
|
5180
|
+
}
|
|
5181
|
+
if (unmounted) {
|
|
5182
|
+
log?.debug("deferred mount barrier removed (tmpfs unmounted)", { target });
|
|
5183
|
+
} else {
|
|
5184
|
+
log?.error(
|
|
5185
|
+
"deferred mount barrier: umount and umount -l both failed \u2014 tmpfs may be leaked",
|
|
5186
|
+
void 0,
|
|
5187
|
+
{ target }
|
|
5188
|
+
);
|
|
5189
|
+
}
|
|
5190
|
+
return;
|
|
5191
|
+
}
|
|
5192
|
+
if (mode === "chmod") await chmod(target, 493).catch(() => {
|
|
5193
|
+
});
|
|
5194
|
+
await rm(path.join(target, NOT_READY_SENTINEL), { force: true }).catch(() => {
|
|
5195
|
+
});
|
|
5196
|
+
log?.debug(
|
|
5197
|
+
mode === "chmod" ? "deferred mount barrier removed (chmod restored)" : "deferred mount barrier removed (was never enforced \u2014 target stayed writable)",
|
|
5198
|
+
{ target }
|
|
5199
|
+
);
|
|
5200
|
+
}
|
|
5201
|
+
async chmodFallback(target, cause, log) {
|
|
5202
|
+
await writeFile(path.join(target, NOT_READY_SENTINEL), SENTINEL_BODY).catch(() => {
|
|
5203
|
+
});
|
|
5204
|
+
const chmodOk = await chmod(target, 365).then(
|
|
5205
|
+
() => true,
|
|
5206
|
+
() => false
|
|
5207
|
+
);
|
|
5208
|
+
this.modes.set(target, chmodOk ? "chmod" : "unprotected");
|
|
5209
|
+
const detail = { target, error: cause instanceof Error ? cause.message : String(cause) };
|
|
5210
|
+
if (chmodOk) {
|
|
5211
|
+
log?.error(
|
|
5212
|
+
"deferred mount read-only barrier degraded to chmod (mount unavailable) \u2014 a write by the owning uid could bypass it",
|
|
5213
|
+
void 0,
|
|
5214
|
+
detail
|
|
5215
|
+
);
|
|
5216
|
+
} else {
|
|
5217
|
+
log?.error(
|
|
5218
|
+
"deferred mount read-only barrier FAILED (mount and chmod both unavailable) \u2014 target is WRITABLE",
|
|
5219
|
+
void 0,
|
|
5220
|
+
detail
|
|
5221
|
+
);
|
|
5222
|
+
}
|
|
5223
|
+
}
|
|
5224
|
+
};
|
|
5225
|
+
var defaultMountPlaceholderBarrier = new RoMountPlaceholderBarrier();
|
|
5012
5226
|
|
|
5013
5227
|
// connectors/src/connector-manager.ts
|
|
5014
5228
|
var KNOWN_PREFIXES = ["env:", "forge:", "op:", "kp:", "oauth:"];
|
|
@@ -5111,6 +5325,7 @@ var ConnectorManager = class {
|
|
|
5111
5325
|
this.catalogEntries = opts.catalogEntries ?? [];
|
|
5112
5326
|
this.tokenMediator = opts.tokenMediator;
|
|
5113
5327
|
this.preMintedSecrets = opts.preMintedSecrets;
|
|
5328
|
+
this.placeholderBarrier = opts.placeholderBarrier ?? defaultMountPlaceholderBarrier;
|
|
5114
5329
|
const secrets = opts.secrets;
|
|
5115
5330
|
if (secrets && typeof secrets === "object" && "prepareRef" in secrets) {
|
|
5116
5331
|
this.chain = secrets;
|
|
@@ -5131,6 +5346,7 @@ var ConnectorManager = class {
|
|
|
5131
5346
|
catalogEntries;
|
|
5132
5347
|
tokenMediator;
|
|
5133
5348
|
preMintedSecrets;
|
|
5349
|
+
placeholderBarrier;
|
|
5134
5350
|
mgrLog;
|
|
5135
5351
|
/** Set once `disconnectAll()` starts, so in-flight deferred mounts bail. */
|
|
5136
5352
|
disposed = false;
|
|
@@ -5337,7 +5553,7 @@ var ConnectorManager = class {
|
|
|
5337
5553
|
}
|
|
5338
5554
|
if (deferred.length > 0) {
|
|
5339
5555
|
for (const { decl, connector } of deferred) {
|
|
5340
|
-
this.preRegisterDeferred(decl, connector);
|
|
5556
|
+
await this.preRegisterDeferred(decl, connector);
|
|
5341
5557
|
}
|
|
5342
5558
|
const prior = this.deferredConnect;
|
|
5343
5559
|
this.deferredConnect = (async () => {
|
|
@@ -5405,7 +5621,12 @@ var ConnectorManager = class {
|
|
|
5405
5621
|
} catch {
|
|
5406
5622
|
}
|
|
5407
5623
|
}
|
|
5408
|
-
this.active.set(decl.id, {
|
|
5624
|
+
this.active.set(decl.id, {
|
|
5625
|
+
connector,
|
|
5626
|
+
handle,
|
|
5627
|
+
declaration: decl,
|
|
5628
|
+
placeholderTarget: previous?.placeholderTarget
|
|
5629
|
+
});
|
|
5409
5630
|
this.opts.onStatusChange?.({
|
|
5410
5631
|
type: "connector_status",
|
|
5411
5632
|
connectorId: decl.id,
|
|
@@ -5437,12 +5658,26 @@ var ConnectorManager = class {
|
|
|
5437
5658
|
/**
|
|
5438
5659
|
* Register a provisional entry for a deferred filesystem-face connector so
|
|
5439
5660
|
* its (deterministic) mount path shows up in `listConnectors()` / the system
|
|
5440
|
-
* prompt before the background mount completes.
|
|
5441
|
-
*
|
|
5661
|
+
* prompt before the background mount completes.
|
|
5662
|
+
*
|
|
5663
|
+
* Before exposing the target, a read-only barrier is established so the agent
|
|
5664
|
+
* cannot write a phantom workspace into a not-yet-mounted remote. Fleet-managed
|
|
5665
|
+
* mounts are skipped: the host already bound the live share at the target, so a
|
|
5666
|
+
* barrier on top would shadow real content.
|
|
5442
5667
|
*/
|
|
5443
|
-
preRegisterDeferred(decl, connector) {
|
|
5668
|
+
async preRegisterDeferred(decl, connector) {
|
|
5444
5669
|
const mountTarget = this.resolveMountTarget(decl);
|
|
5445
5670
|
if (!existsSync(mountTarget)) mkdirSync(mountTarget, { recursive: true });
|
|
5671
|
+
const fleetManaged = isFleetManaged(decl.id);
|
|
5672
|
+
let placeholderTarget;
|
|
5673
|
+
if (!fleetManaged) {
|
|
5674
|
+
try {
|
|
5675
|
+
await this.placeholderBarrier.establish(mountTarget, this.mgrLog);
|
|
5676
|
+
placeholderTarget = mountTarget;
|
|
5677
|
+
} catch (err) {
|
|
5678
|
+
this.mgrLog.error("deferred mount barrier establish failed", err, { id: decl.id });
|
|
5679
|
+
}
|
|
5680
|
+
}
|
|
5446
5681
|
const handle = {
|
|
5447
5682
|
id: decl.id,
|
|
5448
5683
|
driver: connector.name ?? decl.driver,
|
|
@@ -5454,7 +5689,7 @@ var ConnectorManager = class {
|
|
|
5454
5689
|
// returns cleanly instead of dereferencing null state.
|
|
5455
5690
|
state: {}
|
|
5456
5691
|
};
|
|
5457
|
-
this.active.set(decl.id, { connector, handle, declaration: decl });
|
|
5692
|
+
this.active.set(decl.id, { connector, handle, declaration: decl, placeholderTarget });
|
|
5458
5693
|
}
|
|
5459
5694
|
/** Drive all deferred mounts concurrently; resolves when every one settles. */
|
|
5460
5695
|
async connectDeferred(deferred) {
|
|
@@ -5473,10 +5708,15 @@ var ConnectorManager = class {
|
|
|
5473
5708
|
if (this.disposed) return;
|
|
5474
5709
|
const result = await this.attemptConnect(decl, connector);
|
|
5475
5710
|
if (!result.connected) {
|
|
5476
|
-
const
|
|
5477
|
-
if (
|
|
5711
|
+
const entry2 = this.active.get(decl.id);
|
|
5712
|
+
if (entry2 && entry2.handle.status === "connecting") entry2.handle.status = "error";
|
|
5478
5713
|
return;
|
|
5479
5714
|
}
|
|
5715
|
+
const entry = this.active.get(decl.id);
|
|
5716
|
+
if (entry?.placeholderTarget) {
|
|
5717
|
+
await this.placeholderBarrier.onMountLive(entry.placeholderTarget, this.mgrLog).catch(() => {
|
|
5718
|
+
});
|
|
5719
|
+
}
|
|
5480
5720
|
if (this.disposed && this.active.has(decl.id)) {
|
|
5481
5721
|
await this.disconnect(decl.id).catch(() => {
|
|
5482
5722
|
});
|
|
@@ -5509,6 +5749,10 @@ var ConnectorManager = class {
|
|
|
5509
5749
|
await entry.connector.disconnect(entry.handle);
|
|
5510
5750
|
} catch {
|
|
5511
5751
|
}
|
|
5752
|
+
if (entry.placeholderTarget) {
|
|
5753
|
+
await this.placeholderBarrier.remove(entry.placeholderTarget, this.mgrLog).catch(() => {
|
|
5754
|
+
});
|
|
5755
|
+
}
|
|
5512
5756
|
this.opts.onStatusChange?.({
|
|
5513
5757
|
type: "connector_status",
|
|
5514
5758
|
connectorId: id,
|
|
@@ -5523,6 +5767,10 @@ var ConnectorManager = class {
|
|
|
5523
5767
|
* Connect a single connector (hot-plug). Resolves fields and allocates
|
|
5524
5768
|
* mount target if the connector has a filesystem face.
|
|
5525
5769
|
*
|
|
5770
|
+
* This path connects immediately and does NOT establish the read-only
|
|
5771
|
+
* deferred-mount barrier — bring `deferMount` (rclone-backed) connectors up
|
|
5772
|
+
* through `connectAll({ deferMounts: true })` so the not-ready guarantee holds.
|
|
5773
|
+
*
|
|
5526
5774
|
* @returns The `ConnectorHandle` for subsequent operations.
|
|
5527
5775
|
*/
|
|
5528
5776
|
async connect(declaration) {
|
|
@@ -5591,6 +5839,10 @@ var ConnectorManager = class {
|
|
|
5591
5839
|
try {
|
|
5592
5840
|
await entry.connector.disconnect(entry.handle);
|
|
5593
5841
|
} finally {
|
|
5842
|
+
if (entry.placeholderTarget) {
|
|
5843
|
+
await this.placeholderBarrier.remove(entry.placeholderTarget, this.mgrLog).catch(() => {
|
|
5844
|
+
});
|
|
5845
|
+
}
|
|
5594
5846
|
this.active.delete(id);
|
|
5595
5847
|
this.opts.onStatusChange?.({
|
|
5596
5848
|
type: "connector_status",
|
|
@@ -5764,7 +6016,7 @@ var ConnectorManager = class {
|
|
|
5764
6016
|
}
|
|
5765
6017
|
return entry.connector.tools;
|
|
5766
6018
|
}
|
|
5767
|
-
async read(id,
|
|
6019
|
+
async read(id, path2) {
|
|
5768
6020
|
const entry = this.get(id);
|
|
5769
6021
|
const tools = this.requireToolFace(id, entry);
|
|
5770
6022
|
if (!tools.read) {
|
|
@@ -5777,10 +6029,10 @@ var ConnectorManager = class {
|
|
|
5777
6029
|
"skaile.connector.driver": entry.connector.name,
|
|
5778
6030
|
"skaile.connector.operation": "read"
|
|
5779
6031
|
},
|
|
5780
|
-
() => tools.read(entry.handle,
|
|
6032
|
+
() => tools.read(entry.handle, path2)
|
|
5781
6033
|
);
|
|
5782
6034
|
}
|
|
5783
|
-
async write(id,
|
|
6035
|
+
async write(id, path2, content) {
|
|
5784
6036
|
const entry = this.get(id);
|
|
5785
6037
|
if (entry.declaration.access === "read-only") {
|
|
5786
6038
|
throw new Error(`Connector "${id}" is read-only`);
|
|
@@ -5796,10 +6048,10 @@ var ConnectorManager = class {
|
|
|
5796
6048
|
"skaile.connector.driver": entry.connector.name,
|
|
5797
6049
|
"skaile.connector.operation": "write"
|
|
5798
6050
|
},
|
|
5799
|
-
() => tools.write(entry.handle,
|
|
6051
|
+
() => tools.write(entry.handle, path2, content)
|
|
5800
6052
|
);
|
|
5801
6053
|
}
|
|
5802
|
-
async delete(id,
|
|
6054
|
+
async delete(id, path2) {
|
|
5803
6055
|
const entry = this.get(id);
|
|
5804
6056
|
if (entry.declaration.access === "read-only") {
|
|
5805
6057
|
throw new Error(`Connector "${id}" is read-only`);
|
|
@@ -5815,10 +6067,10 @@ var ConnectorManager = class {
|
|
|
5815
6067
|
"skaile.connector.driver": entry.connector.name,
|
|
5816
6068
|
"skaile.connector.operation": "delete"
|
|
5817
6069
|
},
|
|
5818
|
-
() => tools.delete(entry.handle,
|
|
6070
|
+
() => tools.delete(entry.handle, path2)
|
|
5819
6071
|
);
|
|
5820
6072
|
}
|
|
5821
|
-
async list(id,
|
|
6073
|
+
async list(id, path2, options) {
|
|
5822
6074
|
const entry = this.get(id);
|
|
5823
6075
|
const tools = this.requireToolFace(id, entry);
|
|
5824
6076
|
if (!tools.list) {
|
|
@@ -5831,7 +6083,7 @@ var ConnectorManager = class {
|
|
|
5831
6083
|
"skaile.connector.driver": entry.connector.name,
|
|
5832
6084
|
"skaile.connector.operation": "list"
|
|
5833
6085
|
},
|
|
5834
|
-
() => tools.list(entry.handle,
|
|
6086
|
+
() => tools.list(entry.handle, path2, options)
|
|
5835
6087
|
);
|
|
5836
6088
|
}
|
|
5837
6089
|
async search(id, query, options) {
|
|
@@ -5972,9 +6224,9 @@ async function buildSdkConnectorTools(manager, options) {
|
|
|
5972
6224
|
connector_id: z4.string().describe("Connector ID"),
|
|
5973
6225
|
path: z4.string().describe("Path within the connector")
|
|
5974
6226
|
},
|
|
5975
|
-
handler: async ({ connector_id, path }) => {
|
|
6227
|
+
handler: async ({ connector_id, path: path2 }) => {
|
|
5976
6228
|
try {
|
|
5977
|
-
const content = await manager.read(connector_id,
|
|
6229
|
+
const content = await manager.read(connector_id, path2);
|
|
5978
6230
|
return {
|
|
5979
6231
|
content: [{ type: "text", text: content?.data?.toString() ?? "(empty)" }]
|
|
5980
6232
|
};
|
|
@@ -5996,11 +6248,11 @@ async function buildSdkConnectorTools(manager, options) {
|
|
|
5996
6248
|
},
|
|
5997
6249
|
handler: async ({
|
|
5998
6250
|
connector_id,
|
|
5999
|
-
path,
|
|
6251
|
+
path: path2,
|
|
6000
6252
|
content
|
|
6001
6253
|
}) => {
|
|
6002
6254
|
try {
|
|
6003
|
-
await manager.write(connector_id,
|
|
6255
|
+
await manager.write(connector_id, path2, { data: content });
|
|
6004
6256
|
return { content: [{ type: "text", text: "Written." }] };
|
|
6005
6257
|
} catch (err) {
|
|
6006
6258
|
return {
|
|
@@ -6020,11 +6272,11 @@ async function buildSdkConnectorTools(manager, options) {
|
|
|
6020
6272
|
},
|
|
6021
6273
|
handler: async ({
|
|
6022
6274
|
connector_id,
|
|
6023
|
-
path,
|
|
6275
|
+
path: path2,
|
|
6024
6276
|
recursive
|
|
6025
6277
|
}) => {
|
|
6026
6278
|
try {
|
|
6027
|
-
const entries = await manager.list(connector_id,
|
|
6279
|
+
const entries = await manager.list(connector_id, path2, { recursive });
|
|
6028
6280
|
return { content: [{ type: "text", text: JSON.stringify(entries, null, 2) }] };
|
|
6029
6281
|
} catch (err) {
|
|
6030
6282
|
return {
|
|
@@ -6060,9 +6312,9 @@ async function buildSdkConnectorTools(manager, options) {
|
|
|
6060
6312
|
connector_id: z4.string().describe("Connector ID"),
|
|
6061
6313
|
path: z4.string().describe("Path to delete")
|
|
6062
6314
|
},
|
|
6063
|
-
handler: async ({ connector_id, path }) => {
|
|
6315
|
+
handler: async ({ connector_id, path: path2 }) => {
|
|
6064
6316
|
try {
|
|
6065
|
-
const ok = await manager.delete(connector_id,
|
|
6317
|
+
const ok = await manager.delete(connector_id, path2);
|
|
6066
6318
|
return { content: [{ type: "text", text: ok ? "Deleted." : "Not found." }] };
|
|
6067
6319
|
} catch (err) {
|
|
6068
6320
|
return {
|
|
@@ -6124,9 +6376,24 @@ function buildConnectorPromptSection(manager, options) {
|
|
|
6124
6376
|
"| Mount | Driver | Path | Access |",
|
|
6125
6377
|
"|---|---|---|---|"
|
|
6126
6378
|
];
|
|
6379
|
+
let anyUnavailable = false;
|
|
6127
6380
|
for (const c of fsConnectors) {
|
|
6128
6381
|
const mountPath = c.mountPath ?? "(unmounted)";
|
|
6129
|
-
|
|
6382
|
+
if (c.status === "connected") {
|
|
6383
|
+
lines.push(`| ${c.id} | ${c.driver} | \`${mountPath}/\` | ${c.access} |`);
|
|
6384
|
+
} else {
|
|
6385
|
+
anyUnavailable = true;
|
|
6386
|
+
const state = c.status === "error" ? "failed" : "syncing";
|
|
6387
|
+
lines.push(
|
|
6388
|
+
`| ${c.id} | ${c.driver} | \`${mountPath}/\` | unavailable (${state}) \u2014 read-only, do not write |`
|
|
6389
|
+
);
|
|
6390
|
+
}
|
|
6391
|
+
}
|
|
6392
|
+
if (anyUnavailable) {
|
|
6393
|
+
lines.push("");
|
|
6394
|
+
lines.push(
|
|
6395
|
+
"> **Unavailable mounts are read-only at the filesystem layer.** A mount marked `unavailable (syncing / failed)` is not live yet \u2014 its directory is mounted read-only, so writes fail. Do not create files there: the contents are not the real workspace, and anything you write would be a phantom that diverges from the remote once it mounts. Wait for it to become writable (watch the connector status)."
|
|
6396
|
+
);
|
|
6130
6397
|
}
|
|
6131
6398
|
const fsConnectorIds = new Set(fsConnectors.map((c) => c.id));
|
|
6132
6399
|
const gitConnectors = manager.listGitConnectors().filter((g) => fsConnectorIds.has(g.id));
|
|
@@ -6307,13 +6574,19 @@ line=$(grep -F " $TAG" "$CRED_FILE" 2>/dev/null | tail -n 1)
|
|
|
6307
6574
|
|
|
6308
6575
|
# Strip the trailing ' <TAG>' from the URL.
|
|
6309
6576
|
url=\${line% *}
|
|
6310
|
-
# Extract user:pass between scheme:// and @host.
|
|
6577
|
+
# Extract user:pass between scheme:// and @host. The token (pass) was
|
|
6578
|
+
# percent-encoded at write time (buildCredentialLine), so any literal '@' in it
|
|
6579
|
+
# stays encoded here -- the rightmost '@' is unambiguously the host delimiter.
|
|
6311
6580
|
# scheme://user:pass@host -> user:pass
|
|
6312
6581
|
userinfo=\${url#*://}
|
|
6313
6582
|
userinfo=\${userinfo%@*}
|
|
6314
6583
|
user=\${userinfo%%:*}
|
|
6315
6584
|
pass=\${userinfo#*:}
|
|
6316
6585
|
|
|
6586
|
+
# Percent-decode the token (encodeURIComponent inverse). '%XX' -> byte; no '+'
|
|
6587
|
+
# handling needed since encodeURIComponent emits '%20' for spaces.
|
|
6588
|
+
pass=$(printf '%b' "$(printf '%s' "$pass" | sed 's/%/\\\\x/g')")
|
|
6589
|
+
|
|
6317
6590
|
# git wants line-oriented key=value pairs followed by a blank line.
|
|
6318
6591
|
printf 'username=%s\\n' "$user"
|
|
6319
6592
|
printf 'password=%s\\n' "$pass"
|
|
@@ -6337,19 +6610,19 @@ var ManagedGitconfigCollisionError = class extends Error {
|
|
|
6337
6610
|
var blockStart = (mountId) => `# skaile-mount: ${mountId}`;
|
|
6338
6611
|
var blockEnd = (mountId) => `# skaile-mount: ${mountId} (end)`;
|
|
6339
6612
|
var credentialTag = (mountId) => `# skaile-mount: ${mountId}`;
|
|
6340
|
-
function readFileOrEmpty(
|
|
6613
|
+
function readFileOrEmpty(path2) {
|
|
6341
6614
|
try {
|
|
6342
|
-
return readFileSync(
|
|
6615
|
+
return readFileSync(path2, "utf-8");
|
|
6343
6616
|
} catch {
|
|
6344
6617
|
return "";
|
|
6345
6618
|
}
|
|
6346
6619
|
}
|
|
6347
|
-
function atomicWrite(
|
|
6348
|
-
const dir = dirname(
|
|
6620
|
+
function atomicWrite(path2, content, mode) {
|
|
6621
|
+
const dir = dirname(path2);
|
|
6349
6622
|
if (!existsSync(dir)) {
|
|
6350
6623
|
mkdirSync(dir, { recursive: true, mode: 448 });
|
|
6351
6624
|
}
|
|
6352
|
-
const tmp = `${
|
|
6625
|
+
const tmp = `${path2}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;
|
|
6353
6626
|
const fd = openSync(tmp, "w", mode);
|
|
6354
6627
|
try {
|
|
6355
6628
|
writeSync(fd, content);
|
|
@@ -6357,7 +6630,7 @@ function atomicWrite(path, content, mode) {
|
|
|
6357
6630
|
closeSync(fd);
|
|
6358
6631
|
}
|
|
6359
6632
|
chmodSync(tmp, mode);
|
|
6360
|
-
renameSync(tmp,
|
|
6633
|
+
renameSync(tmp, path2);
|
|
6361
6634
|
}
|
|
6362
6635
|
function parseBlocks(text) {
|
|
6363
6636
|
const blocks = [];
|
|
@@ -6414,15 +6687,16 @@ function buildCredentialLine(urlPrefix, token, mountId) {
|
|
|
6414
6687
|
const u = new URL(urlPrefix);
|
|
6415
6688
|
const host = u.host;
|
|
6416
6689
|
const scheme = u.protocol.replace(/:$/, "");
|
|
6417
|
-
|
|
6690
|
+
const encodedToken = encodeURIComponent(token);
|
|
6691
|
+
return `${scheme}://x-access-token:${encodedToken}@${host} ${credentialTag(mountId)}`;
|
|
6418
6692
|
}
|
|
6419
|
-
function readCredentialLines(
|
|
6420
|
-
return readFileOrEmpty(
|
|
6693
|
+
function readCredentialLines(path2) {
|
|
6694
|
+
return readFileOrEmpty(path2).split("\n").filter((l) => l.length > 0);
|
|
6421
6695
|
}
|
|
6422
|
-
function writeCredentialLines(
|
|
6696
|
+
function writeCredentialLines(path2, lines) {
|
|
6423
6697
|
const content = lines.length > 0 ? `${lines.join("\n")}
|
|
6424
6698
|
` : "";
|
|
6425
|
-
atomicWrite(
|
|
6699
|
+
atomicWrite(path2, content, 416);
|
|
6426
6700
|
}
|
|
6427
6701
|
function findExistingBlock(blocks, mountId) {
|
|
6428
6702
|
return blocks.find((b) => b.mountId === mountId);
|
|
@@ -6526,55 +6800,27 @@ function isPackageResolvable(pkg, projectDir) {
|
|
|
6526
6800
|
function findMissingPackages(packages, projectDir) {
|
|
6527
6801
|
return packages.filter((p) => !isPackageResolvable(p, projectDir));
|
|
6528
6802
|
}
|
|
6529
|
-
function isFleetManaged(connectorId) {
|
|
6530
|
-
const raw = process.env.SKAILE_FLEET_MANAGED_MOUNTS ?? "";
|
|
6531
|
-
if (raw.length === 0) return false;
|
|
6532
|
-
return raw.split(",").map((segment) => segment.trim()).filter((segment) => segment.length > 0).includes(connectorId);
|
|
6533
|
-
}
|
|
6534
|
-
async function ensureFleetMounted(dir, log, options) {
|
|
6535
|
-
const timeoutMs = options?.timeoutMs ?? 3e3;
|
|
6536
|
-
const pollIntervalMs = options?.pollIntervalMs ?? 100;
|
|
6537
|
-
const deadline = Date.now() + timeoutMs;
|
|
6538
|
-
let lastErr = null;
|
|
6539
|
-
while (Date.now() < deadline) {
|
|
6540
|
-
try {
|
|
6541
|
-
const st = await stat(dir);
|
|
6542
|
-
if (!st.isDirectory()) {
|
|
6543
|
-
throw new Error(`fleet mountpoint ${dir} is not a directory`);
|
|
6544
|
-
}
|
|
6545
|
-
await readdir(dir);
|
|
6546
|
-
log.info("fleet bind mount verified", { dir });
|
|
6547
|
-
return;
|
|
6548
|
-
} catch (err) {
|
|
6549
|
-
lastErr = err;
|
|
6550
|
-
await new Promise((resolve5) => setTimeout(resolve5, pollIntervalMs));
|
|
6551
|
-
}
|
|
6552
|
-
}
|
|
6553
|
-
throw new Error(
|
|
6554
|
-
`fleet mount ${dir} not ready after ${timeoutMs}ms \u2014 check SKAILE_FLEET_MANAGED_MOUNTS env var and host bind: ${lastErr instanceof Error ? lastErr.message : String(lastErr)}`
|
|
6555
|
-
);
|
|
6556
|
-
}
|
|
6557
6803
|
var WorktreeRegistryImpl = class {
|
|
6558
6804
|
entries = /* @__PURE__ */ new Map();
|
|
6559
|
-
register(
|
|
6560
|
-
let owners = this.entries.get(
|
|
6805
|
+
register(path2, owner) {
|
|
6806
|
+
let owners = this.entries.get(path2);
|
|
6561
6807
|
if (!owners) {
|
|
6562
6808
|
owners = /* @__PURE__ */ new Set();
|
|
6563
|
-
this.entries.set(
|
|
6809
|
+
this.entries.set(path2, owners);
|
|
6564
6810
|
}
|
|
6565
6811
|
owners.add(owner);
|
|
6566
6812
|
}
|
|
6567
|
-
deregister(
|
|
6568
|
-
const owners = this.entries.get(
|
|
6813
|
+
deregister(path2, owner) {
|
|
6814
|
+
const owners = this.entries.get(path2);
|
|
6569
6815
|
if (!owners) return;
|
|
6570
6816
|
owners.delete(owner);
|
|
6571
|
-
if (owners.size === 0) this.entries.delete(
|
|
6817
|
+
if (owners.size === 0) this.entries.delete(path2);
|
|
6572
6818
|
}
|
|
6573
|
-
isInUse(
|
|
6574
|
-
return (this.entries.get(
|
|
6819
|
+
isInUse(path2) {
|
|
6820
|
+
return (this.entries.get(path2)?.size ?? 0) > 0;
|
|
6575
6821
|
}
|
|
6576
|
-
owners(
|
|
6577
|
-
return [...this.entries.get(
|
|
6822
|
+
owners(path2) {
|
|
6823
|
+
return [...this.entries.get(path2) ?? []];
|
|
6578
6824
|
}
|
|
6579
6825
|
};
|
|
6580
6826
|
var worktreeRegistry = new WorktreeRegistryImpl();
|
|
@@ -6638,7 +6884,7 @@ async function listWorktrees(repoRoot) {
|
|
|
6638
6884
|
return trees;
|
|
6639
6885
|
}
|
|
6640
6886
|
|
|
6641
|
-
//
|
|
6887
|
+
// factory-assets/connectors/flow/adapter.ts
|
|
6642
6888
|
var now = () => (/* @__PURE__ */ new Date()).toISOString();
|
|
6643
6889
|
function emptyNode(nodeId) {
|
|
6644
6890
|
return {
|
|
@@ -6703,8 +6949,8 @@ var FlowAdapter = class extends AbstractConnector {
|
|
|
6703
6949
|
constructor() {
|
|
6704
6950
|
super();
|
|
6705
6951
|
this.tools = {
|
|
6706
|
-
read: (handle,
|
|
6707
|
-
list: (handle,
|
|
6952
|
+
read: (handle, path2) => this.read(handle, path2),
|
|
6953
|
+
list: (handle, path2, options) => this.list(handle, path2, options),
|
|
6708
6954
|
search: (handle, query, options) => this.search(handle, query, options),
|
|
6709
6955
|
describeOperations: (handle) => this.describeOperations(handle),
|
|
6710
6956
|
executeOp: (handle, operation, args) => this.executeOp(handle, operation, args)
|
|
@@ -6748,16 +6994,16 @@ var FlowAdapter = class extends AbstractConnector {
|
|
|
6748
6994
|
s.execution = this.recompute(s);
|
|
6749
6995
|
}
|
|
6750
6996
|
// ── Base operations (private — wired into tools face in constructor) ──
|
|
6751
|
-
async read(handle,
|
|
6997
|
+
async read(handle, path2) {
|
|
6752
6998
|
const s = this.s(handle);
|
|
6753
|
-
if (
|
|
6999
|
+
if (path2 === "" || path2 === "state") {
|
|
6754
7000
|
return {
|
|
6755
7001
|
data: JSON.stringify(s.execution, null, 2),
|
|
6756
7002
|
contentType: "application/json"
|
|
6757
7003
|
};
|
|
6758
7004
|
}
|
|
6759
|
-
if (
|
|
6760
|
-
const nodeId =
|
|
7005
|
+
if (path2.startsWith("node/")) {
|
|
7006
|
+
const nodeId = path2.slice(5);
|
|
6761
7007
|
const node = s.flowDef.nodes.find((n) => n.id === nodeId);
|
|
6762
7008
|
if (!node) return null;
|
|
6763
7009
|
const exec = s.execution.nodes[nodeId];
|
|
@@ -7456,9 +7702,6 @@ var FlowAdapter = class extends AbstractConnector {
|
|
|
7456
7702
|
if (existing.status === "not_started" && ns.status === "available") {
|
|
7457
7703
|
nodes[ns.nodeId] = { ...existing, status: "available" };
|
|
7458
7704
|
}
|
|
7459
|
-
if (existing.status === "available" && ns.status === "blocked") {
|
|
7460
|
-
nodes[ns.nodeId] = { ...existing, status: "blocked" };
|
|
7461
|
-
}
|
|
7462
7705
|
}
|
|
7463
7706
|
let flowStatus = s.execution.status;
|
|
7464
7707
|
if (flowStatus !== "cancelled") {
|
|
@@ -7552,6 +7795,6 @@ function createConnector() {
|
|
|
7552
7795
|
return new FlowAdapter();
|
|
7553
7796
|
}
|
|
7554
7797
|
|
|
7555
|
-
export { AbstractConnector, BUILTIN_CONNECTOR_CATALOG, ConnectorFieldMissingError, ConnectorManager, ConnectorStartupError, DeployConnector, DevServerConnector, FlowAdapter, GitConnector, GmailConnector, GoogleDriveConnector, LocalConnector, LogBuffer, ManagedGitconfigCollisionError, MattermostConnector, MemoryConnector, MinIOConnector, PostgresConnector, S3Connector, SQLiteConnector, SharePointConnector, StaticServerConnector, TunnelConnector, WebDAVConnector, XStateConnector, XStateStoreConnector, atomicReplaceCredential, buildConnectorPromptSection, buildSdkConnectorTools, createConnector, createConnector10, createConnector11, createConnector12, createConnector13, createConnector14, createConnector15, createConnector16, createConnector17, createConnector18, createConnector19, createConnector2, createConnector3, createConnector4, createConnector5, createConnector6, createConnector7, createConnector8, createConnector9, createWorktree, defaultSpawn, ensureFleetMounted, findGitRoot, findMissingPackages, getConnector, installNpmPackages, isFleetManaged, isPackageResolvable, listConnectors, listWorktrees, parseAuthBlob2 as parseAuthBlob, registerBuiltinConnectors, removeMountBlock, renderCredentialHelperScript, tryGetConnector, worktreeRegistry, writeHelperScript, writeMountBlock };
|
|
7556
|
-
//# sourceMappingURL=chunk-
|
|
7557
|
-
//# sourceMappingURL=chunk-
|
|
7798
|
+
export { AbstractConnector, BUILTIN_CONNECTOR_CATALOG, ConnectorFieldMissingError, ConnectorManager, ConnectorStartupError, DeployConnector, DevServerConnector, FlowAdapter, GitConnector, GmailConnector, GoogleDriveConnector, LocalConnector, LogBuffer, ManagedGitconfigCollisionError, MattermostConnector, MemoryConnector, MinIOConnector, NOT_READY_SENTINEL, PostgresConnector, RoMountPlaceholderBarrier, S3Connector, SQLiteConnector, SharePointConnector, StaticServerConnector, TunnelConnector, WebDAVConnector, XStateConnector, XStateStoreConnector, atomicReplaceCredential, buildConnectorPromptSection, buildSdkConnectorTools, createConnector, createConnector10, createConnector11, createConnector12, createConnector13, createConnector14, createConnector15, createConnector16, createConnector17, createConnector18, createConnector19, createConnector2, createConnector3, createConnector4, createConnector5, createConnector6, createConnector7, createConnector8, createConnector9, createWorktree, defaultMountPlaceholderBarrier, defaultSpawn, ensureFleetMounted, findGitRoot, findMissingPackages, getConnector, installNpmPackages, isFleetManaged, isPackageResolvable, listConnectors, listWorktrees, parseAuthBlob2 as parseAuthBlob, registerBuiltinConnectors, removeMountBlock, renderCredentialHelperScript, tryGetConnector, worktreeRegistry, writeHelperScript, writeMountBlock };
|
|
7799
|
+
//# sourceMappingURL=chunk-YDTW4GT6.js.map
|
|
7800
|
+
//# sourceMappingURL=chunk-YDTW4GT6.js.map
|