@skaile/workspaces 0.21.0 → 0.22.0-beta.1
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 +176 -0
- package/dist/{asset-feeds-CI76R7FI.js → asset-feeds-QXCSAJRN.js} +11 -11
- package/dist/{asset-feeds-CI76R7FI.js.map → asset-feeds-QXCSAJRN.js.map} +1 -1
- package/dist/asset-manager/catalog-deployer.d.ts +2 -0
- package/dist/asset-manager/contrib.d.ts +2 -0
- package/dist/asset-manager/fragments.d.ts +2 -0
- package/dist/asset-manager/history.d.ts +2 -0
- package/dist/asset-manager/index.d.ts +2 -0
- package/dist/asset-manager/index.js +9 -9
- package/dist/asset-manager/installer.d.ts +2 -0
- package/dist/asset-manager/installer.js +8 -8
- package/dist/asset-manager/renderers.d.ts +2 -0
- package/dist/asset-manager/src/index.d.ts +18 -7
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/installer.d.ts +3 -3
- package/dist/asset-manager/src/installer.d.ts.map +1 -1
- package/dist/base-assets/connectors/deploy.d.ts +2 -0
- package/dist/base-assets/connectors/deploy.js +10 -9
- package/dist/base-assets/connectors/devserver.d.ts +2 -0
- package/dist/base-assets/connectors/devserver.js +10 -9
- package/dist/base-assets/connectors/flow/adapter.js +10 -9
- package/dist/base-assets/connectors/flow/engine.d.ts +2 -0
- package/dist/base-assets/connectors/flow/run-flow.js +11 -10
- package/dist/base-assets/connectors/flow.d.ts +2 -0
- package/dist/base-assets/connectors/flow.js +10 -9
- package/dist/base-assets/connectors/git.d.ts +2 -0
- package/dist/base-assets/connectors/git.js +10 -9
- package/dist/base-assets/connectors/gmail.d.ts +2 -0
- package/dist/base-assets/connectors/gmail.js +10 -9
- package/dist/base-assets/connectors/googledrive.d.ts +2 -0
- package/dist/base-assets/connectors/googledrive.js +10 -9
- package/dist/base-assets/connectors/local.d.ts +2 -0
- package/dist/base-assets/connectors/local.js +10 -9
- package/dist/base-assets/connectors/mattermost.d.ts +2 -0
- package/dist/base-assets/connectors/mattermost.js +10 -9
- package/dist/base-assets/connectors/memory.d.ts +2 -0
- package/dist/base-assets/connectors/memory.js +10 -9
- package/dist/base-assets/connectors/minio.d.ts +2 -0
- package/dist/base-assets/connectors/minio.js +10 -9
- package/dist/base-assets/connectors/postgres.d.ts +2 -0
- package/dist/base-assets/connectors/postgres.js +10 -9
- package/dist/base-assets/connectors/s3.d.ts +2 -0
- package/dist/base-assets/connectors/s3.js +10 -9
- package/dist/base-assets/connectors/sharepoint.d.ts +2 -0
- package/dist/base-assets/connectors/sharepoint.js +10 -9
- package/dist/base-assets/connectors/sqlite.d.ts +2 -0
- package/dist/base-assets/connectors/sqlite.js +10 -9
- package/dist/base-assets/connectors/static-server.d.ts +2 -0
- package/dist/base-assets/connectors/static-server.js +10 -9
- package/dist/base-assets/connectors/tunnel.d.ts +2 -0
- package/dist/base-assets/connectors/tunnel.js +10 -9
- package/dist/base-assets/connectors/webdav.d.ts +2 -0
- package/dist/base-assets/connectors/webdav.js +10 -9
- package/dist/base-assets/connectors/xstate-store.d.ts +2 -0
- package/dist/base-assets/connectors/xstate-store.js +10 -9
- package/dist/base-assets/connectors/xstate.d.ts +2 -0
- package/dist/base-assets/connectors/xstate.js +10 -9
- package/dist/bridge/drivers/claude-sdk.d.ts +2 -0
- package/dist/bridge/drivers/claude-sdk.js +13 -3
- package/dist/bridge/drivers/claude-sdk.js.map +1 -1
- package/dist/bridge/drivers/codex.d.ts +2 -0
- package/dist/bridge/drivers/codex.js +13 -3
- package/dist/bridge/drivers/codex.js.map +1 -1
- package/dist/bridge/drivers/echo.d.ts +2 -0
- package/dist/bridge/drivers/echo.js +13 -4
- package/dist/bridge/drivers/echo.js.map +1 -1
- package/dist/bridge/drivers/omp.d.ts +2 -0
- package/dist/bridge/drivers/omp.js +13 -3
- package/dist/bridge/drivers/omp.js.map +1 -1
- package/dist/bridge/index.d.ts +2 -0
- package/dist/bridge/index.js +3 -2
- package/dist/bridge/src/drivers/claude-sdk.d.ts +7 -0
- package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
- package/dist/bridge/src/drivers/codex.d.ts +7 -0
- package/dist/bridge/src/drivers/codex.d.ts.map +1 -1
- package/dist/bridge/src/drivers/echo.d.ts +6 -0
- package/dist/bridge/src/drivers/echo.d.ts.map +1 -1
- package/dist/bridge/src/drivers/omp.d.ts +6 -0
- package/dist/bridge/src/drivers/omp.d.ts.map +1 -1
- package/dist/bridge/src/registry.d.ts +34 -34
- package/dist/bridge/src/registry.d.ts.map +1 -1
- package/dist/{chunk-ZWIG55ZX.js → chunk-2XY6732A.js} +3 -3
- package/dist/{chunk-ZWIG55ZX.js.map → chunk-2XY6732A.js.map} +1 -1
- package/dist/{chunk-NCUTHLRV.js → chunk-3ECS5PFD.js} +4 -4
- package/dist/{chunk-NCUTHLRV.js.map → chunk-3ECS5PFD.js.map} +1 -1
- package/dist/{chunk-FRPKLIEZ.js → chunk-4AZKT2BU.js} +13 -13
- package/dist/chunk-4AZKT2BU.js.map +1 -0
- package/dist/chunk-6E6PKKAD.js +161 -0
- package/dist/chunk-6E6PKKAD.js.map +1 -0
- package/dist/{chunk-4ACWI5YT.js → chunk-6VTG73UY.js} +48 -36
- package/dist/chunk-6VTG73UY.js.map +1 -0
- package/dist/{chunk-H45ANMIU.js → chunk-APAOQLPT.js} +3 -3
- package/dist/{chunk-H45ANMIU.js.map → chunk-APAOQLPT.js.map} +1 -1
- package/dist/{chunk-4S4TZDCD.js → chunk-D7K72XEY.js} +3 -3
- package/dist/{chunk-4S4TZDCD.js.map → chunk-D7K72XEY.js.map} +1 -1
- package/dist/{chunk-2WVQMRIE.js → chunk-DKGDOALM.js} +5 -5
- package/dist/{chunk-2WVQMRIE.js.map → chunk-DKGDOALM.js.map} +1 -1
- package/dist/{chunk-DFUXWNTS.js → chunk-GFNW72LW.js} +17 -5
- package/dist/chunk-GFNW72LW.js.map +1 -0
- package/dist/{chunk-37JKX6D7.js → chunk-I3UEM3FX.js} +36 -8
- package/dist/chunk-I3UEM3FX.js.map +1 -0
- package/dist/{chunk-5QNQLSBW.js → chunk-J3VKAEQP.js} +514 -143
- package/dist/chunk-J3VKAEQP.js.map +1 -0
- package/dist/{chunk-BSY56QS7.js → chunk-JHF66MCK.js} +49 -3
- package/dist/chunk-JHF66MCK.js.map +1 -0
- package/dist/{chunk-XAVM2BAJ.js → chunk-LT4DLEYE.js} +114 -619
- package/dist/chunk-LT4DLEYE.js.map +1 -0
- package/dist/{chunk-S2OVTCAL.js → chunk-M5TE6YI5.js} +3 -3
- package/dist/{chunk-S2OVTCAL.js.map → chunk-M5TE6YI5.js.map} +1 -1
- package/dist/{chunk-RDH4SSMH.js → chunk-NJLHHZIW.js} +2 -2
- package/dist/{chunk-RDH4SSMH.js.map → chunk-NJLHHZIW.js.map} +1 -1
- package/dist/{chunk-XGWGLIHZ.js → chunk-PTIHB2TV.js} +5 -5
- package/dist/{chunk-XGWGLIHZ.js.map → chunk-PTIHB2TV.js.map} +1 -1
- package/dist/{chunk-W5DFC35Z.js → chunk-UMOENHVH.js} +279 -133
- package/dist/chunk-UMOENHVH.js.map +1 -0
- package/dist/{chunk-G4BR355S.js → chunk-V3QMSM5I.js} +38 -43
- package/dist/chunk-V3QMSM5I.js.map +1 -0
- package/dist/{chunk-DEQ3OOTU.js → chunk-VCYXVP2S.js} +263 -177
- package/dist/chunk-VCYXVP2S.js.map +1 -0
- package/dist/{chunk-KFDTS7RX.js → chunk-XIHFJVOD.js} +3 -3
- package/dist/{chunk-KFDTS7RX.js.map → chunk-XIHFJVOD.js.map} +1 -1
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +762 -472
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/commands/deploy.d.ts +24 -0
- package/dist/cli/src/commands/deploy.d.ts.map +1 -0
- package/dist/cli/src/commands/integration.d.ts +19 -0
- package/dist/cli/src/commands/integration.d.ts.map +1 -0
- package/dist/cli/src/commands/manage.d.ts +1 -1
- package/dist/cli/src/commands/plugin-registry-cmd.d.ts +22 -0
- package/dist/cli/src/commands/plugin-registry-cmd.d.ts.map +1 -0
- package/dist/cli/src/commands/project.d.ts.map +1 -1
- package/dist/cli/src/commands/serve.d.ts.map +1 -1
- package/dist/cli/src/commands/source.d.ts.map +1 -1
- package/dist/cli/src/commands/update.d.ts.map +1 -1
- package/dist/cli/src/ensure-sources.d.ts.map +1 -1
- package/dist/cli/src/plugin-store/index.d.ts +37 -0
- package/dist/cli/src/plugin-store/index.d.ts.map +1 -0
- package/dist/cli/src/plugin-store/load.d.ts +35 -0
- package/dist/cli/src/plugin-store/load.d.ts.map +1 -0
- package/dist/cli/src/plugin-store/paths.d.ts +23 -0
- package/dist/cli/src/plugin-store/paths.d.ts.map +1 -0
- package/dist/cli/src/plugin-store/reconcile.d.ts +50 -0
- package/dist/cli/src/plugin-store/reconcile.d.ts.map +1 -0
- package/dist/cli/src/plugin-store/spec.d.ts +25 -0
- package/dist/cli/src/plugin-store/spec.d.ts.map +1 -0
- package/dist/client/index.d.ts +2 -0
- package/dist/connectors/config.d.ts +2 -0
- package/dist/connectors/config.js +8 -8
- package/dist/connectors/index.d.ts +2 -0
- package/dist/connectors/index.js +10 -9
- package/dist/connectors/rclone-config.d.ts +2 -0
- package/dist/connectors/rclone.d.ts +2 -0
- package/dist/connectors/src/connector-manager.d.ts.map +1 -1
- package/dist/connectors/src/connector-registry.d.ts +42 -22
- package/dist/connectors/src/connector-registry.d.ts.map +1 -1
- package/dist/connectors/src/index.d.ts +2 -3
- package/dist/connectors/src/index.d.ts.map +1 -1
- package/dist/connectors-shared/index.d.ts +2 -0
- package/dist/connectors-shared/index.js +8 -0
- package/dist/connectors-shared/index.js.map +1 -0
- package/dist/connectors-shared/src/index.d.ts +11 -0
- package/dist/connectors-shared/src/index.d.ts.map +1 -0
- package/dist/connectors-shared/src/schemas.d.ts +10 -0
- package/dist/connectors-shared/src/schemas.d.ts.map +1 -0
- package/dist/connectors-shared/src/types.d.ts +11 -0
- package/dist/connectors-shared/src/types.d.ts.map +1 -0
- package/dist/core/discovery.d.ts +2 -0
- package/dist/core/driver-targets.d.ts +2 -0
- package/dist/core/framework.d.ts +2 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.js +7 -7
- package/dist/core/logging.d.ts +2 -0
- package/dist/core/manifest.d.ts +2 -0
- package/dist/core/manifest.js +2 -2
- package/dist/core/models.d.ts +2 -0
- package/dist/core/models.js +1 -1
- package/dist/core/runtime-assets.d.ts +2 -0
- package/dist/core/runtime-assets.js +4 -4
- package/dist/core/src/index.d.ts +8 -6
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/lock.d.ts +64 -24
- package/dist/core/src/lock.d.ts.map +1 -1
- package/dist/core/src/models.d.ts +66 -47
- package/dist/core/src/models.d.ts.map +1 -1
- package/dist/core/src/repo-manager.d.ts +62 -34
- package/dist/core/src/repo-manager.d.ts.map +1 -1
- package/dist/core/src/runtime-assets.d.ts.map +1 -1
- package/dist/core/src/walker.d.ts +52 -0
- package/dist/core/src/walker.d.ts.map +1 -0
- package/dist/core/src/workspace-config.d.ts +174 -45
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/src/workspace-yaml-editor.d.ts +53 -16
- package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
- package/dist/core/store.d.ts +2 -0
- package/dist/core/workspace-config.d.ts +2 -0
- package/dist/core/workspace-config.js +3 -3
- package/dist/deploy/index.d.ts +2 -0
- package/dist/deploy/index.js +473 -0
- package/dist/deploy/index.js.map +1 -0
- package/dist/deploy/src/handle-store.d.ts +22 -0
- package/dist/deploy/src/handle-store.d.ts.map +1 -0
- package/dist/deploy/src/index.d.ts +21 -0
- package/dist/deploy/src/index.d.ts.map +1 -0
- package/dist/deploy/src/targets/container-runtime.d.ts +39 -0
- package/dist/deploy/src/targets/container-runtime.d.ts.map +1 -0
- package/dist/deploy/src/targets/docker.d.ts +19 -0
- package/dist/deploy/src/targets/docker.d.ts.map +1 -0
- package/dist/deploy/src/targets/local.d.ts +30 -0
- package/dist/deploy/src/targets/local.d.ts.map +1 -0
- package/dist/deploy/src/targets/podman.d.ts +19 -0
- package/dist/deploy/src/targets/podman.d.ts.map +1 -0
- package/dist/deploy/src/targets/port.d.ts +10 -0
- package/dist/deploy/src/targets/port.d.ts.map +1 -0
- package/dist/deploy/src/targets/stream-lines.d.ts +44 -0
- package/dist/deploy/src/targets/stream-lines.d.ts.map +1 -0
- package/dist/discovery/index.d.ts +2 -0
- package/dist/discovery/index.js +3 -3
- package/dist/discovery/src/source-config.d.ts +2 -2
- package/dist/{ensure-sources-IDVQ77NJ.js → ensure-sources-SL2S4UEX.js} +22 -18
- package/dist/ensure-sources-SL2S4UEX.js.map +1 -0
- package/dist/{flows-6BNO4GKK.js → flows-DYFTPCPM.js} +4 -4
- package/dist/{flows-6BNO4GKK.js.map → flows-DYFTPCPM.js.map} +1 -1
- package/dist/library/index.d.ts +2 -0
- package/dist/library/index.js +4 -4
- package/dist/library/src/remote/remote-catalog-source.d.ts +17 -0
- package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
- package/dist/open-library-M4DB3D3J.js +13 -0
- package/dist/{open-library-IOYWFK7M.js.map → open-library-M4DB3D3J.js.map} +1 -1
- package/dist/plugin-registry/index.d.ts +2 -0
- package/dist/plugin-registry/index.js +4 -0
- package/dist/plugin-registry/index.js.map +1 -0
- package/dist/plugin-registry/src/context.d.ts +29 -0
- package/dist/plugin-registry/src/context.d.ts.map +1 -0
- package/dist/plugin-registry/src/deploy-handle.d.ts +76 -0
- package/dist/plugin-registry/src/deploy-handle.d.ts.map +1 -0
- package/dist/plugin-registry/src/deploy-helpers.d.ts +69 -0
- package/dist/plugin-registry/src/deploy-helpers.d.ts.map +1 -0
- package/dist/plugin-registry/src/errors.d.ts +23 -0
- package/dist/plugin-registry/src/errors.d.ts.map +1 -0
- package/dist/plugin-registry/src/index.d.ts +18 -0
- package/dist/plugin-registry/src/index.d.ts.map +1 -0
- package/dist/plugin-registry/src/internal.d.ts +13 -0
- package/dist/plugin-registry/src/internal.d.ts.map +1 -0
- package/dist/plugin-registry/src/registry.d.ts +26 -0
- package/dist/plugin-registry/src/registry.d.ts.map +1 -0
- package/dist/plugin-registry/src/targets.d.ts +46 -0
- package/dist/plugin-registry/src/targets.d.ts.map +1 -0
- package/dist/plugin-store-AJ3FGXIC.js +144 -0
- package/dist/plugin-store-AJ3FGXIC.js.map +1 -0
- package/dist/plugins/index.d.ts +2 -0
- package/dist/resolver/index.d.ts +2 -0
- package/dist/runner/index.d.ts +2 -0
- package/dist/runner/index.js +15 -14
- package/dist/runner/prompt-assembly.d.ts +2 -0
- package/dist/runner/src/resources.d.ts.map +1 -1
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/sdk/asset-manager.d.ts +2 -0
- package/dist/sdk/asset-manager.js +9 -9
- package/dist/sdk/bridge.d.ts +2 -0
- package/dist/sdk/bridge.js +3 -2
- package/dist/sdk/client.d.ts +2 -0
- package/dist/sdk/core.d.ts +2 -0
- package/dist/sdk/core.js +7 -7
- package/dist/sdk/flow.d.ts +2 -0
- package/dist/sdk/index.d.ts +2 -0
- package/dist/sdk/index.js +51 -17
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/resolver.d.ts +2 -0
- package/dist/sdk/runner.d.ts +2 -0
- package/dist/sdk/runner.js +15 -14
- package/dist/sdk/session.d.ts +2 -0
- package/dist/sdk/src/local-runtime.d.ts +8 -0
- package/dist/sdk/src/local-runtime.d.ts.map +1 -1
- package/dist/sdk/src/transport.d.ts +7 -1
- package/dist/sdk/src/transport.d.ts.map +1 -1
- package/dist/sdk/store.d.ts +2 -0
- package/dist/sdk/telemetry.d.ts +2 -0
- package/dist/sdk/transport/ws/client.d.ts +2 -0
- package/dist/sdk/transport/ws/server.d.ts +2 -0
- package/dist/sdk/transport/ws.d.ts +2 -0
- package/dist/sdk/transport.d.ts +2 -0
- package/dist/sdk/types.d.ts +2 -0
- package/dist/secrets/index.d.ts +2 -0
- package/dist/session/index.d.ts +2 -0
- package/dist/{setup-AIOLUTKV.js → setup-GBSQX7JF.js} +12 -11
- package/dist/setup-GBSQX7JF.js.map +1 -0
- package/dist/store/index.d.ts +2 -0
- package/dist/store/react.d.ts +2 -0
- package/dist/store/vue.d.ts +2 -0
- package/dist/store-client-5WBRUC5U.js +14 -0
- package/dist/{store-client-CYEH2GKC.js.map → store-client-5WBRUC5U.js.map} +1 -1
- package/dist/telemetry/index.d.ts +2 -0
- package/dist/transport/index.d.ts +2 -0
- package/dist/transport/ws/client.d.ts +2 -0
- package/dist/transport/ws/server.d.ts +2 -0
- package/dist/transport/ws.d.ts +2 -0
- package/dist/tui/index.d.ts +2 -0
- package/dist/tui/index.js +15 -14
- package/dist/tui/index.js.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/manifests.d.ts +2 -0
- package/dist/workspace-plugin/adapters/mcp.d.ts +2 -0
- package/dist/workspace-plugin/adapters/mcp.js +2 -2
- package/dist/workspace-plugin/adapters/omp.d.ts +2 -0
- package/dist/workspace-plugin/adapters/omp.js +3 -3
- package/dist/workspace-plugin/index.d.ts +2 -0
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +23 -24
- package/dist/base-assets/connectors/redis/adapter.d.ts +0 -39
- package/dist/base-assets/connectors/redis/adapter.d.ts.map +0 -1
- package/dist/base-assets/connectors/redis.js +0 -20
- package/dist/base-assets/connectors/redis.js.map +0 -1
- package/dist/base-assets/connectors/yjs/adapter.d.ts +0 -50
- package/dist/base-assets/connectors/yjs/adapter.d.ts.map +0 -1
- package/dist/base-assets/connectors/yjs.js +0 -20
- package/dist/base-assets/connectors/yjs.js.map +0 -1
- package/dist/chunk-37JKX6D7.js.map +0 -1
- package/dist/chunk-4ACWI5YT.js.map +0 -1
- package/dist/chunk-5QNQLSBW.js.map +0 -1
- package/dist/chunk-BSY56QS7.js.map +0 -1
- package/dist/chunk-DEQ3OOTU.js.map +0 -1
- package/dist/chunk-DFUXWNTS.js.map +0 -1
- package/dist/chunk-FRPKLIEZ.js.map +0 -1
- package/dist/chunk-G4BR355S.js.map +0 -1
- package/dist/chunk-W5DFC35Z.js.map +0 -1
- package/dist/chunk-XAVM2BAJ.js.map +0 -1
- package/dist/cli/src/commands/plugin.d.ts +0 -14
- package/dist/cli/src/commands/plugin.d.ts.map +0 -1
- package/dist/ensure-sources-IDVQ77NJ.js.map +0 -1
- package/dist/open-library-IOYWFK7M.js +0 -13
- package/dist/setup-AIOLUTKV.js.map +0 -1
- package/dist/store-client-CYEH2GKC.js +0 -14
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
*
|
|
12
12
|
* const editor = WorkspaceYamlEditor.load('/project/skaile.yaml')
|
|
13
13
|
* editor.setAgentConfig('default', { driver: 'claude-sdk', model: 'claude-sonnet-4-6' })
|
|
14
|
-
* editor.
|
|
14
|
+
* editor.setSource({ url: 'https://github.com/skaile-ai/ai-assets' })
|
|
15
15
|
* editor.save()
|
|
16
16
|
*/
|
|
17
17
|
import { Document } from "yaml";
|
|
18
|
-
import type { AgentConfigProfile,
|
|
18
|
+
import type { AgentConfigProfile, AssetEntry, ConnectorDeclaration, OverrideEntry, SourceEntry, StoreEntry } from "./workspace-config.js";
|
|
19
19
|
/**
|
|
20
20
|
* Comment-preserving editor for `skaile.yaml` files.
|
|
21
21
|
* Uses the `yaml` library's Document AST so untouched sections remain byte-identical.
|
|
@@ -53,30 +53,67 @@ export declare class WorkspaceYamlEditor {
|
|
|
53
53
|
*/
|
|
54
54
|
deleteAgentConfigField(profile: string, field: string): void;
|
|
55
55
|
private _getAgentConfigSection;
|
|
56
|
-
/** Get
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
removeAiResource(name: string): boolean;
|
|
56
|
+
/** Get the publication-half `publisher:` field. */
|
|
57
|
+
getPublisher(): string | undefined;
|
|
58
|
+
/** Set the publication-half `publisher:` field. */
|
|
59
|
+
setPublisher(p: string): void;
|
|
60
|
+
/** Get the publication-half `version:` field. */
|
|
61
|
+
getVersion(): string | undefined;
|
|
62
|
+
/** Set the publication-half `version:` field. */
|
|
63
|
+
setVersion(v: string): void;
|
|
65
64
|
/** Get all connectors. */
|
|
66
65
|
getConnectors(): ConnectorDeclaration[];
|
|
67
66
|
/** Add or update a connector by id. */
|
|
68
67
|
setConnector(connector: ConnectorDeclaration): void;
|
|
69
68
|
/** Remove a connector by id. */
|
|
70
69
|
removeConnector(id: string): boolean;
|
|
71
|
-
/** Get all
|
|
70
|
+
/** Get all `plugins:` specifiers. */
|
|
71
|
+
getPlugins(): string[];
|
|
72
|
+
/**
|
|
73
|
+
* Add a plugin specifier to `plugins:`, deduped by package name.
|
|
74
|
+
* If an entry with the same package name exists it is replaced (so a version
|
|
75
|
+
* bump re-pins in place); otherwise the spec is appended.
|
|
76
|
+
*
|
|
77
|
+
* @param spec - npm specifier, e.g. `"@skaile/provider-fly@^0.1.0"`.
|
|
78
|
+
* @param nameOf - Extracts the package name from a spec (caller passes `parseSpec`-derived names).
|
|
79
|
+
* @returns `true` when an existing entry was replaced, `false` when appended.
|
|
80
|
+
*/
|
|
81
|
+
addPlugin(spec: string, nameOf: (s: string) => string): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Remove the `plugins:` entry whose package name matches `name`.
|
|
84
|
+
*
|
|
85
|
+
* @param name - Package name to remove (e.g. `"@skaile/provider-fly"`).
|
|
86
|
+
* @param nameOf - Extracts the package name from a spec.
|
|
87
|
+
* @returns `true` when an entry was removed.
|
|
88
|
+
*/
|
|
89
|
+
removePlugin(name: string, nameOf: (s: string) => string): boolean;
|
|
90
|
+
/** Get all source entries (`{url, pin?}`). */
|
|
72
91
|
getSources(): SourceEntry[];
|
|
73
92
|
/**
|
|
74
|
-
* Add or update a source entry by
|
|
75
|
-
* If an entry with the same
|
|
93
|
+
* Add or update a source entry, matched by `url`.
|
|
94
|
+
* If an entry with the same url exists, it is replaced.
|
|
76
95
|
*/
|
|
77
96
|
setSource(entry: SourceEntry): void;
|
|
78
|
-
/** Remove a source entry by
|
|
79
|
-
removeSource(
|
|
97
|
+
/** Remove a source entry by url. Returns true when an entry was removed. */
|
|
98
|
+
removeSource(url: string): boolean;
|
|
99
|
+
/** Get all store entries (`{url}`). */
|
|
100
|
+
getStores(): StoreEntry[];
|
|
101
|
+
/** Add or update a store entry, matched by `url`. */
|
|
102
|
+
setStore(entry: StoreEntry): void;
|
|
103
|
+
/** Remove a store entry by url. Returns true when an entry was removed. */
|
|
104
|
+
removeStore(url: string): boolean;
|
|
105
|
+
/** Get all override entries (`{ref, source, reason}`). */
|
|
106
|
+
getOverrides(): OverrideEntry[];
|
|
107
|
+
/** Add or update an override entry, matched by `ref`. */
|
|
108
|
+
setOverride(entry: OverrideEntry): void;
|
|
109
|
+
/** Remove an override entry by ref. Returns true when an entry was removed. */
|
|
110
|
+
removeOverride(ref: string): boolean;
|
|
111
|
+
/** Get all publication-half `assets:` entries. */
|
|
112
|
+
getPublicationAssets(): AssetEntry[];
|
|
113
|
+
/** Add or update a publication asset entry, matched by `kind` + `name`. */
|
|
114
|
+
setPublicationAsset(entry: AssetEntry): void;
|
|
115
|
+
/** Remove a publication asset entry by kind + name. Returns true when removed. */
|
|
116
|
+
removePublicationAsset(kind: string, name: string): boolean;
|
|
80
117
|
/** Get the underlying yaml Document for advanced manipulation. */
|
|
81
118
|
get document(): Document;
|
|
82
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-yaml-editor.d.ts","sourceRoot":"","sources":["../../../core/src/workspace-yaml-editor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,QAAQ,EAA6C,MAAM,MAAM,CAAC;AAC3E,OAAO,KAAK,EACV,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"workspace-yaml-editor.d.ts","sourceRoot":"","sources":["../../../core/src/workspace-yaml-editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { COMPACTION_DEFAULTS, SKAILE_YAML_DEFAULT, SKAILE_YAML_SUFFIX, SK_WORKSPACE_DEFAULT_NAME, SK_WORKSPACE_SUFFIX, decodeSkaileYaml, encodeSkaileYaml, findWorkspaceRoot, isWorkspaceConfigFilename, listSkWorkspaceConfigs, loadMcpServerDeclarations, loadSkWorkspaceConfig, mergeSkWorkspaceConfigs, normalizeConfig, resolveAgentDir, resolveSkWorkspaceConfig, saveSkWorkspaceConfig, validateAssetRecipeAttr, workspaceConfigFilename, workspaceNameFromFilename } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { COMPACTION_DEFAULTS, DEFAULT_RECIPE_ATTR, SKAILE_YAML_DEFAULT, SKAILE_YAML_SUFFIX, SK_WORKSPACE_DEFAULT_NAME, SK_WORKSPACE_SUFFIX, decodeSkaileYaml, encodeSkaileYaml, findWorkspaceRoot, isWorkspaceConfigFilename, listSkWorkspaceConfigs, loadMcpServerDeclarations, loadSkWorkspaceConfig, mergeSkWorkspaceConfigs, normalizeConfig, resolveAgentDir, resolveSkWorkspaceConfig, saveSkWorkspaceConfig, validateAssetRecipeAttr, validateAssetRecipeFlake, workspaceConfigFilename, workspaceNameFromFilename } from '../chunk-J3VKAEQP.js';
|
|
2
|
+
import '../chunk-4AZKT2BU.js';
|
|
3
|
+
import '../chunk-I3UEM3FX.js';
|
|
4
4
|
import '../chunk-NSBPE2FW.js';
|
|
5
5
|
//# sourceMappingURL=workspace-config.js.map
|
|
6
6
|
//# sourceMappingURL=workspace-config.js.map
|
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
import { pluginRegistry } from '../chunk-6E6PKKAD.js';
|
|
2
|
+
import { portableSpawnSync, portableSpawn } from '../chunk-UMOENHVH.js';
|
|
3
|
+
import '../chunk-K5GBV4SA.js';
|
|
4
|
+
import '../chunk-KLNL7QHN.js';
|
|
5
|
+
import '../chunk-GFNW72LW.js';
|
|
6
|
+
import '../chunk-J3VKAEQP.js';
|
|
7
|
+
import '../chunk-4AZKT2BU.js';
|
|
8
|
+
import '../chunk-I3UEM3FX.js';
|
|
9
|
+
import '../chunk-JKNWJ64A.js';
|
|
10
|
+
import '../chunk-O4JH3KUE.js';
|
|
11
|
+
import '../chunk-24UIWON4.js';
|
|
12
|
+
import '../chunk-NSBPE2FW.js';
|
|
13
|
+
import * as z from 'zod';
|
|
14
|
+
import { createServer } from 'net';
|
|
15
|
+
import { createRequire } from 'module';
|
|
16
|
+
import { join, dirname, resolve } from 'path';
|
|
17
|
+
import { mkdir, writeFile, readFile, rm } from 'fs/promises';
|
|
18
|
+
|
|
19
|
+
function allocateFreePort(host = "127.0.0.1") {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
const server = createServer();
|
|
22
|
+
server.once("error", reject);
|
|
23
|
+
server.listen(0, host, () => {
|
|
24
|
+
const addr = server.address();
|
|
25
|
+
if (addr === null || typeof addr === "string") {
|
|
26
|
+
server.close();
|
|
27
|
+
reject(new Error("could not determine allocated port"));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const { port } = addr;
|
|
31
|
+
server.close(() => resolve(port));
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// deploy/src/targets/stream-lines.ts
|
|
37
|
+
var LineBuffer = class {
|
|
38
|
+
constructor(max = 1e3) {
|
|
39
|
+
this.max = max;
|
|
40
|
+
}
|
|
41
|
+
max;
|
|
42
|
+
lines = [];
|
|
43
|
+
waiters = /* @__PURE__ */ new Set();
|
|
44
|
+
push(line) {
|
|
45
|
+
const entry = { ts: Date.now(), line };
|
|
46
|
+
this.lines.push(entry);
|
|
47
|
+
if (this.lines.length > this.max) this.lines.shift();
|
|
48
|
+
for (const w of this.waiters) w(entry);
|
|
49
|
+
}
|
|
50
|
+
/** Snapshot of buffered lines at or after `sinceMs` (epoch millis). */
|
|
51
|
+
since(sinceMs = 0) {
|
|
52
|
+
return this.lines.filter((l) => l.ts >= sinceMs);
|
|
53
|
+
}
|
|
54
|
+
/** Subscribe to future pushes; returns an unsubscribe fn. */
|
|
55
|
+
subscribe(fn) {
|
|
56
|
+
this.waiters.add(fn);
|
|
57
|
+
return () => this.waiters.delete(fn);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
async function pumpLines(stream, buffer) {
|
|
61
|
+
const reader = stream.getReader();
|
|
62
|
+
const decoder = new TextDecoder();
|
|
63
|
+
let pending = "";
|
|
64
|
+
try {
|
|
65
|
+
while (true) {
|
|
66
|
+
const { done, value } = await reader.read();
|
|
67
|
+
if (done) break;
|
|
68
|
+
pending += decoder.decode(value, { stream: true });
|
|
69
|
+
let idx = pending.indexOf("\n");
|
|
70
|
+
while (idx !== -1) {
|
|
71
|
+
buffer.push(pending.slice(0, idx));
|
|
72
|
+
pending = pending.slice(idx + 1);
|
|
73
|
+
idx = pending.indexOf("\n");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
} catch {
|
|
77
|
+
} finally {
|
|
78
|
+
if (pending.length > 0) buffer.push(pending);
|
|
79
|
+
reader.releaseLock();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function waitForLine(buffer, pattern, opts) {
|
|
83
|
+
for (const { line } of buffer.since(0)) {
|
|
84
|
+
if (pattern.test(line)) return Promise.resolve();
|
|
85
|
+
}
|
|
86
|
+
return new Promise((resolve, reject) => {
|
|
87
|
+
let settled = false;
|
|
88
|
+
const finish = (fn) => {
|
|
89
|
+
if (settled) return;
|
|
90
|
+
settled = true;
|
|
91
|
+
clearTimeout(timer);
|
|
92
|
+
unsub();
|
|
93
|
+
opts.signal.removeEventListener("abort", onAbort);
|
|
94
|
+
fn();
|
|
95
|
+
};
|
|
96
|
+
const unsub = buffer.subscribe(({ line }) => {
|
|
97
|
+
if (pattern.test(line)) finish(resolve);
|
|
98
|
+
});
|
|
99
|
+
const onAbort = () => finish(() => reject(new Error("aborted while waiting for ready line")));
|
|
100
|
+
const timer = setTimeout(
|
|
101
|
+
() => finish(
|
|
102
|
+
() => reject(new Error(`timed out after ${opts.timeoutMs}ms waiting for ready line`))
|
|
103
|
+
),
|
|
104
|
+
opts.timeoutMs
|
|
105
|
+
);
|
|
106
|
+
if (opts.signal.aborted) onAbort();
|
|
107
|
+
else opts.signal.addEventListener("abort", onAbort);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// deploy/src/targets/container-runtime.ts
|
|
112
|
+
var LOOPBACK_BINDS = /* @__PURE__ */ new Set(["127.0.0.1", "localhost", "::1"]);
|
|
113
|
+
var DEFAULT_READY_PATTERN = "ws://";
|
|
114
|
+
var DEFAULT_READY_TIMEOUT_MS = 6e4;
|
|
115
|
+
var containerConfigSchema = z.object({
|
|
116
|
+
image: z.string(),
|
|
117
|
+
port: z.number().int().positive().optional(),
|
|
118
|
+
bind: z.string().default("127.0.0.1"),
|
|
119
|
+
mounts: z.array(z.string()).default([]),
|
|
120
|
+
env: z.record(z.string(), z.string()).default({}),
|
|
121
|
+
network: z.string().optional(),
|
|
122
|
+
pullPolicy: z.enum(["always", "if-missing", "never"]).default("if-missing"),
|
|
123
|
+
// "local" only — this target runs a prebuilt image and has no in-provider builder.
|
|
124
|
+
// The full buildStrategySchema (local/remote/managed) lives in plugin-registry for the provider-* packages that implement remote builds.
|
|
125
|
+
buildStrategy: z.literal("local").default("local"),
|
|
126
|
+
containerPort: z.number().int().positive().optional(),
|
|
127
|
+
readyPattern: z.string().optional()
|
|
128
|
+
}).strict().refine((c) => LOOPBACK_BINDS.has(c.bind), {
|
|
129
|
+
message: "non-loopback bind requires tls config (not yet supported); use a loopback bind",
|
|
130
|
+
path: ["bind"]
|
|
131
|
+
});
|
|
132
|
+
function payloadSchemaFor(bin) {
|
|
133
|
+
return z.object({
|
|
134
|
+
containerId: z.string(),
|
|
135
|
+
hostPort: z.number(),
|
|
136
|
+
runtime: z.enum(["docker", "podman"]).refine((r) => r === bin, {
|
|
137
|
+
message: `runtime mismatch: handle belongs to ${bin}`
|
|
138
|
+
}),
|
|
139
|
+
// Older handles predate `bind`; default to loopback so restore stays valid.
|
|
140
|
+
bind: z.string().default("127.0.0.1")
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
function pullFlag(policy) {
|
|
144
|
+
const mapped = policy === "if-missing" ? "missing" : policy;
|
|
145
|
+
return ["--pull", mapped];
|
|
146
|
+
}
|
|
147
|
+
async function readStream(stream) {
|
|
148
|
+
const reader = stream.getReader();
|
|
149
|
+
const decoder = new TextDecoder();
|
|
150
|
+
let out = "";
|
|
151
|
+
try {
|
|
152
|
+
for (; ; ) {
|
|
153
|
+
const { done, value } = await reader.read();
|
|
154
|
+
if (done) break;
|
|
155
|
+
if (value) out += decoder.decode(value, { stream: true });
|
|
156
|
+
}
|
|
157
|
+
} finally {
|
|
158
|
+
reader.releaseLock();
|
|
159
|
+
}
|
|
160
|
+
return out + decoder.decode();
|
|
161
|
+
}
|
|
162
|
+
async function isRunning(bin, containerId) {
|
|
163
|
+
const proc = portableSpawn([bin, "inspect", "-f", "{{.State.Running}}", containerId]);
|
|
164
|
+
const [exitCode, stdout] = await Promise.all([proc.exited, readStream(proc.stdout)]);
|
|
165
|
+
return exitCode === 0 && stdout.trim() === "true";
|
|
166
|
+
}
|
|
167
|
+
function buildHandle(bin, payload, config, ctx, ready) {
|
|
168
|
+
let state = "starting";
|
|
169
|
+
let followProc = null;
|
|
170
|
+
return {
|
|
171
|
+
wsUrl: `ws://${config.bind}:${payload.hostPort}`,
|
|
172
|
+
get state() {
|
|
173
|
+
return state;
|
|
174
|
+
},
|
|
175
|
+
payload,
|
|
176
|
+
async waitReady(timeoutMs) {
|
|
177
|
+
try {
|
|
178
|
+
await ready();
|
|
179
|
+
state = "ready";
|
|
180
|
+
} catch (err) {
|
|
181
|
+
state = "errored";
|
|
182
|
+
throw err;
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
async health() {
|
|
186
|
+
const healthy = await isRunning(bin, payload.containerId);
|
|
187
|
+
return healthy ? { healthy } : { healthy, detail: `container ${payload.containerId} not running` };
|
|
188
|
+
},
|
|
189
|
+
async *logs(opts) {
|
|
190
|
+
const buffer = new LineBuffer();
|
|
191
|
+
const args = ["logs"];
|
|
192
|
+
if (opts?.follow) args.push("--follow");
|
|
193
|
+
followProc = portableSpawn([bin, ...args, payload.containerId]);
|
|
194
|
+
void pumpLines(followProc.stdout, buffer);
|
|
195
|
+
void pumpLines(followProc.stderr, buffer);
|
|
196
|
+
const since = opts?.sinceMs ?? 0;
|
|
197
|
+
if (!opts?.follow) await followProc.exited;
|
|
198
|
+
for (const l of buffer.since(since)) yield l;
|
|
199
|
+
if (!opts?.follow) return;
|
|
200
|
+
const queue = [];
|
|
201
|
+
let notify = null;
|
|
202
|
+
const unsub = buffer.subscribe((l) => {
|
|
203
|
+
queue.push(l);
|
|
204
|
+
notify?.();
|
|
205
|
+
});
|
|
206
|
+
try {
|
|
207
|
+
while (!ctx.signal.aborted) {
|
|
208
|
+
if (queue.length === 0) {
|
|
209
|
+
await new Promise((r) => {
|
|
210
|
+
notify = r;
|
|
211
|
+
});
|
|
212
|
+
notify = null;
|
|
213
|
+
}
|
|
214
|
+
while (queue.length > 0) yield queue.shift();
|
|
215
|
+
}
|
|
216
|
+
} finally {
|
|
217
|
+
unsub();
|
|
218
|
+
followProc?.kill("SIGTERM");
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
async stop() {
|
|
222
|
+
state = "stopping";
|
|
223
|
+
followProc?.kill("SIGTERM");
|
|
224
|
+
portableSpawnSync([bin, "rm", "-f", payload.containerId]);
|
|
225
|
+
state = "stopped";
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
function makeContainerDeployTarget(bin) {
|
|
230
|
+
const payloadSchema = payloadSchemaFor(bin);
|
|
231
|
+
return {
|
|
232
|
+
id: bin,
|
|
233
|
+
displayName: bin === "docker" ? "Docker container" : "Podman container",
|
|
234
|
+
apiVersion: 1,
|
|
235
|
+
tlsTermination: "none",
|
|
236
|
+
configSchema: containerConfigSchema,
|
|
237
|
+
payloadSchema,
|
|
238
|
+
async create(config, ctx) {
|
|
239
|
+
const log = ctx.log;
|
|
240
|
+
const hostPort = config.port ?? await allocateFreePort(config.bind);
|
|
241
|
+
const containerPort = config.containerPort ?? hostPort;
|
|
242
|
+
const name = `skaile-ws-${ctx.workspaceId}`;
|
|
243
|
+
const pattern = new RegExp(config.readyPattern ?? DEFAULT_READY_PATTERN);
|
|
244
|
+
const args = [
|
|
245
|
+
bin,
|
|
246
|
+
"run",
|
|
247
|
+
"-d",
|
|
248
|
+
"--name",
|
|
249
|
+
name,
|
|
250
|
+
"-p",
|
|
251
|
+
`${config.bind}:${hostPort}:${containerPort}`,
|
|
252
|
+
...pullFlag(config.pullPolicy)
|
|
253
|
+
];
|
|
254
|
+
if (config.network) args.push("--network", config.network);
|
|
255
|
+
for (const [k, v] of Object.entries(config.env)) args.push("-e", `${k}=${v}`);
|
|
256
|
+
for (const m of config.mounts) args.push("-v", m);
|
|
257
|
+
args.push(config.image);
|
|
258
|
+
const runRes = portableSpawnSync(args);
|
|
259
|
+
if (runRes.exitCode !== 0) {
|
|
260
|
+
throw new Error(`${bin} run failed: ${runRes.stderr.trim() || runRes.stdout.trim()}`);
|
|
261
|
+
}
|
|
262
|
+
const containerId = runRes.stdout.trim();
|
|
263
|
+
log.info("container started", { runtime: bin, containerId, hostPort });
|
|
264
|
+
const payload = { containerId, hostPort, runtime: bin, bind: config.bind };
|
|
265
|
+
const ready = async () => {
|
|
266
|
+
const buffer = new LineBuffer();
|
|
267
|
+
const logProc = portableSpawn([bin, "logs", "--follow", containerId]);
|
|
268
|
+
void pumpLines(logProc.stdout, buffer);
|
|
269
|
+
void pumpLines(logProc.stderr, buffer);
|
|
270
|
+
try {
|
|
271
|
+
await waitForLine(buffer, pattern, {
|
|
272
|
+
timeoutMs: DEFAULT_READY_TIMEOUT_MS,
|
|
273
|
+
signal: ctx.signal
|
|
274
|
+
});
|
|
275
|
+
} finally {
|
|
276
|
+
logProc.kill("SIGTERM");
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
return buildHandle(bin, payload, config, ctx, ready);
|
|
280
|
+
},
|
|
281
|
+
async restore(payload, ctx) {
|
|
282
|
+
const log = ctx.log;
|
|
283
|
+
if (!await isRunning(bin, payload.containerId)) {
|
|
284
|
+
throw new Error(`${bin} container ${payload.containerId} is not running`);
|
|
285
|
+
}
|
|
286
|
+
log.info("re-attached to container", { runtime: bin, containerId: payload.containerId });
|
|
287
|
+
return buildHandle(
|
|
288
|
+
bin,
|
|
289
|
+
payload,
|
|
290
|
+
{ bind: payload.bind},
|
|
291
|
+
ctx,
|
|
292
|
+
async () => {
|
|
293
|
+
}
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// deploy/src/targets/docker.ts
|
|
300
|
+
var dockerDeployTarget = makeContainerDeployTarget("docker");
|
|
301
|
+
var localConfigSchema = z.object({
|
|
302
|
+
port: z.number().int().positive().optional(),
|
|
303
|
+
env: z.record(z.string(), z.string()).optional(),
|
|
304
|
+
cwd: z.string().optional(),
|
|
305
|
+
command: z.string().optional(),
|
|
306
|
+
args: z.array(z.string()).optional(),
|
|
307
|
+
// `skaile serve` emits structured logs rather than a single banner; the
|
|
308
|
+
// ws:// URL line is the most stable readiness marker.
|
|
309
|
+
readyPattern: z.string().optional()
|
|
310
|
+
}).strict().default({});
|
|
311
|
+
var localPayloadSchema = z.object({
|
|
312
|
+
pid: z.number(),
|
|
313
|
+
port: z.number(),
|
|
314
|
+
cwd: z.string()
|
|
315
|
+
});
|
|
316
|
+
var DEFAULT_READY_PATTERN2 = "ws://";
|
|
317
|
+
var DEFAULT_READY_TIMEOUT_MS2 = 3e4;
|
|
318
|
+
function resolveSkaileBin() {
|
|
319
|
+
const require2 = createRequire(import.meta.url);
|
|
320
|
+
const pkgPath = require2.resolve("@skaile/workspaces/package.json");
|
|
321
|
+
const pkg = require2("@skaile/workspaces/package.json");
|
|
322
|
+
const rel = pkg.bin?.skaile ?? "dist/cli/index.js";
|
|
323
|
+
return resolve(dirname(pkgPath), rel);
|
|
324
|
+
}
|
|
325
|
+
function pidAlive(pid) {
|
|
326
|
+
try {
|
|
327
|
+
process.kill(pid, 0);
|
|
328
|
+
return true;
|
|
329
|
+
} catch {
|
|
330
|
+
return false;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
function buildHandle2(payload, ctx, ready, proc) {
|
|
334
|
+
let state = proc ? "starting" : "ready";
|
|
335
|
+
return {
|
|
336
|
+
wsUrl: `ws://127.0.0.1:${payload.port}`,
|
|
337
|
+
get state() {
|
|
338
|
+
return state;
|
|
339
|
+
},
|
|
340
|
+
payload,
|
|
341
|
+
async waitReady(timeoutMs) {
|
|
342
|
+
try {
|
|
343
|
+
await ready();
|
|
344
|
+
state = "ready";
|
|
345
|
+
} catch (err) {
|
|
346
|
+
state = "errored";
|
|
347
|
+
throw err;
|
|
348
|
+
}
|
|
349
|
+
},
|
|
350
|
+
async health() {
|
|
351
|
+
const healthy = pidAlive(payload.pid);
|
|
352
|
+
return healthy ? { healthy } : { healthy, detail: `pid ${payload.pid} not alive` };
|
|
353
|
+
},
|
|
354
|
+
async *logs(opts) {
|
|
355
|
+
if (!proc) return;
|
|
356
|
+
const since = opts?.sinceMs ?? 0;
|
|
357
|
+
for (const l of proc.buffer.since(since)) yield l;
|
|
358
|
+
if (!opts?.follow) return;
|
|
359
|
+
const queue = [];
|
|
360
|
+
let notify = null;
|
|
361
|
+
const unsub = proc.buffer.subscribe((l) => {
|
|
362
|
+
queue.push(l);
|
|
363
|
+
notify?.();
|
|
364
|
+
});
|
|
365
|
+
try {
|
|
366
|
+
while (!ctx.signal.aborted) {
|
|
367
|
+
if (queue.length === 0) {
|
|
368
|
+
await new Promise((r) => {
|
|
369
|
+
notify = r;
|
|
370
|
+
});
|
|
371
|
+
notify = null;
|
|
372
|
+
}
|
|
373
|
+
while (queue.length > 0) yield queue.shift();
|
|
374
|
+
}
|
|
375
|
+
} finally {
|
|
376
|
+
unsub();
|
|
377
|
+
}
|
|
378
|
+
},
|
|
379
|
+
async stop() {
|
|
380
|
+
state = "stopping";
|
|
381
|
+
if (pidAlive(payload.pid)) {
|
|
382
|
+
try {
|
|
383
|
+
process.kill(payload.pid, "SIGTERM");
|
|
384
|
+
} catch {
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
state = "stopped";
|
|
388
|
+
}
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
var localDeployTarget = {
|
|
392
|
+
id: "local",
|
|
393
|
+
displayName: "Local process",
|
|
394
|
+
apiVersion: 1,
|
|
395
|
+
tlsTermination: "none",
|
|
396
|
+
configSchema: localConfigSchema,
|
|
397
|
+
payloadSchema: localPayloadSchema,
|
|
398
|
+
async create(config, ctx) {
|
|
399
|
+
const log = ctx.log;
|
|
400
|
+
const port = config.port ?? await allocateFreePort();
|
|
401
|
+
const cwd = config.cwd ?? process.cwd();
|
|
402
|
+
const command = config.command ?? resolveSkaileBin();
|
|
403
|
+
const args = config.args ?? ["serve", "--port", String(port)];
|
|
404
|
+
const pattern = new RegExp(config.readyPattern ?? DEFAULT_READY_PATTERN2);
|
|
405
|
+
const proc = portableSpawn([command, ...args], {
|
|
406
|
+
cwd,
|
|
407
|
+
env: { ...process.env, ...config.env }
|
|
408
|
+
});
|
|
409
|
+
const buffer = new LineBuffer();
|
|
410
|
+
void pumpLines(proc.stdout, buffer);
|
|
411
|
+
void pumpLines(proc.stderr, buffer);
|
|
412
|
+
log.info("local process spawned", { pid: proc.pid, port, command });
|
|
413
|
+
const payload = { pid: proc.pid, port, cwd };
|
|
414
|
+
const ready = () => waitForLine(buffer, pattern, { timeoutMs: DEFAULT_READY_TIMEOUT_MS2, signal: ctx.signal });
|
|
415
|
+
return buildHandle2(payload, ctx, ready, { buffer });
|
|
416
|
+
},
|
|
417
|
+
async restore(payload, ctx) {
|
|
418
|
+
const log = ctx.log;
|
|
419
|
+
if (!pidAlive(payload.pid)) {
|
|
420
|
+
throw new Error(`local deploy pid ${payload.pid} is no longer alive`);
|
|
421
|
+
}
|
|
422
|
+
log.info("re-attached to local process", { pid: payload.pid, port: payload.port });
|
|
423
|
+
return buildHandle2(payload, ctx, async () => {
|
|
424
|
+
}, null);
|
|
425
|
+
}
|
|
426
|
+
};
|
|
427
|
+
|
|
428
|
+
// deploy/src/targets/podman.ts
|
|
429
|
+
var podmanDeployTarget = makeContainerDeployTarget("podman");
|
|
430
|
+
var storedHandleSchema = z.object({
|
|
431
|
+
targetId: z.string().min(1),
|
|
432
|
+
payload: z.unknown()
|
|
433
|
+
});
|
|
434
|
+
function handlePath(projectDir) {
|
|
435
|
+
return join(projectDir, ".skaile", "deploy", "handle.json");
|
|
436
|
+
}
|
|
437
|
+
async function writeHandle(projectDir, targetId, payload) {
|
|
438
|
+
const path = handlePath(projectDir);
|
|
439
|
+
await mkdir(dirname(path), { recursive: true });
|
|
440
|
+
const envelope = { targetId, payload };
|
|
441
|
+
await writeFile(path, `${JSON.stringify(envelope, null, 2)}
|
|
442
|
+
`, "utf8");
|
|
443
|
+
}
|
|
444
|
+
async function readHandle(projectDir) {
|
|
445
|
+
let raw;
|
|
446
|
+
try {
|
|
447
|
+
raw = await readFile(handlePath(projectDir), "utf8");
|
|
448
|
+
} catch {
|
|
449
|
+
return null;
|
|
450
|
+
}
|
|
451
|
+
let parsed;
|
|
452
|
+
try {
|
|
453
|
+
parsed = JSON.parse(raw);
|
|
454
|
+
} catch {
|
|
455
|
+
return null;
|
|
456
|
+
}
|
|
457
|
+
const result = storedHandleSchema.safeParse(parsed);
|
|
458
|
+
return result.success ? result.data : null;
|
|
459
|
+
}
|
|
460
|
+
async function clearHandle(projectDir) {
|
|
461
|
+
await rm(handlePath(projectDir), { force: true });
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
// deploy/src/index.ts
|
|
465
|
+
function registerBuiltinDeployTargets(registry = pluginRegistry) {
|
|
466
|
+
for (const t of [localDeployTarget, dockerDeployTarget, podmanDeployTarget]) {
|
|
467
|
+
if (!registry.get("deployTarget", t.id)) registry.register("deployTarget", t);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
export { clearHandle, dockerDeployTarget, handlePath, localDeployTarget, makeContainerDeployTarget, podmanDeployTarget, readHandle, registerBuiltinDeployTargets, writeHandle };
|
|
472
|
+
//# sourceMappingURL=index.js.map
|
|
473
|
+
//# sourceMappingURL=index.js.map
|