@skaile/workspaces 0.22.0-beta.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 +136 -0
- package/dist/{asset-feeds-PJDJ3QYI.js → asset-feeds-QXCSAJRN.js} +9 -9
- package/dist/{asset-feeds-PJDJ3QYI.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 +7 -7
- package/dist/asset-manager/installer.d.ts +2 -0
- package/dist/asset-manager/installer.js +6 -6
- 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 +8 -8
- package/dist/base-assets/connectors/devserver.d.ts +2 -0
- package/dist/base-assets/connectors/devserver.js +8 -8
- package/dist/base-assets/connectors/flow/adapter.js +8 -8
- package/dist/base-assets/connectors/flow/engine.d.ts +2 -0
- package/dist/base-assets/connectors/flow/run-flow.js +9 -9
- package/dist/base-assets/connectors/flow.d.ts +2 -0
- package/dist/base-assets/connectors/flow.js +8 -8
- package/dist/base-assets/connectors/git.d.ts +2 -0
- package/dist/base-assets/connectors/git.js +8 -8
- package/dist/base-assets/connectors/gmail.d.ts +2 -0
- package/dist/base-assets/connectors/gmail.js +8 -8
- package/dist/base-assets/connectors/googledrive.d.ts +2 -0
- package/dist/base-assets/connectors/googledrive.js +8 -8
- package/dist/base-assets/connectors/local.d.ts +2 -0
- package/dist/base-assets/connectors/local.js +8 -8
- package/dist/base-assets/connectors/mattermost.d.ts +2 -0
- package/dist/base-assets/connectors/mattermost.js +8 -8
- package/dist/base-assets/connectors/memory.d.ts +2 -0
- package/dist/base-assets/connectors/memory.js +8 -8
- package/dist/base-assets/connectors/minio.d.ts +2 -0
- package/dist/base-assets/connectors/minio.js +8 -8
- package/dist/base-assets/connectors/postgres.d.ts +2 -0
- package/dist/base-assets/connectors/postgres.js +8 -8
- package/dist/base-assets/connectors/s3.d.ts +2 -0
- package/dist/base-assets/connectors/s3.js +8 -8
- package/dist/base-assets/connectors/sharepoint.d.ts +2 -0
- package/dist/base-assets/connectors/sharepoint.js +8 -8
- package/dist/base-assets/connectors/sqlite.d.ts +2 -0
- package/dist/base-assets/connectors/sqlite.js +8 -8
- package/dist/base-assets/connectors/static-server.d.ts +2 -0
- package/dist/base-assets/connectors/static-server.js +8 -8
- package/dist/base-assets/connectors/tunnel.d.ts +2 -0
- package/dist/base-assets/connectors/tunnel.js +8 -8
- package/dist/base-assets/connectors/webdav.d.ts +2 -0
- package/dist/base-assets/connectors/webdav.js +8 -8
- package/dist/base-assets/connectors/xstate-store.d.ts +2 -0
- package/dist/base-assets/connectors/xstate-store.js +8 -8
- package/dist/base-assets/connectors/xstate.d.ts +2 -0
- package/dist/base-assets/connectors/xstate.js +8 -8
- package/dist/bridge/drivers/claude-sdk.d.ts +2 -0
- package/dist/bridge/drivers/claude-sdk.js +2 -2
- package/dist/bridge/drivers/codex.d.ts +2 -0
- package/dist/bridge/drivers/codex.js +2 -2
- package/dist/bridge/drivers/echo.d.ts +2 -0
- package/dist/bridge/drivers/echo.js +2 -2
- package/dist/bridge/drivers/omp.d.ts +2 -0
- package/dist/bridge/drivers/omp.js +2 -2
- package/dist/bridge/index.d.ts +2 -0
- package/dist/bridge/index.js +3 -3
- package/dist/bridge/src/registry.d.ts +4 -2
- package/dist/bridge/src/registry.d.ts.map +1 -1
- package/dist/{chunk-UZVHJ7LX.js → chunk-3ECS5PFD.js} +4 -4
- package/dist/{chunk-UZVHJ7LX.js.map → chunk-3ECS5PFD.js.map} +1 -1
- package/dist/{chunk-WIR34WMU.js → chunk-4AZKT2BU.js} +13 -13
- package/dist/chunk-4AZKT2BU.js.map +1 -0
- package/dist/{chunk-UZRY5UI2.js → chunk-6E6PKKAD.js} +68 -3
- package/dist/chunk-6E6PKKAD.js.map +1 -0
- package/dist/{chunk-IGQEXBBG.js → chunk-6VTG73UY.js} +13 -9
- package/dist/chunk-6VTG73UY.js.map +1 -0
- package/dist/{chunk-GKM6MDUC.js → chunk-APAOQLPT.js} +3 -3
- package/dist/{chunk-GKM6MDUC.js.map → chunk-APAOQLPT.js.map} +1 -1
- package/dist/{chunk-SL6JVGRD.js → chunk-D7K72XEY.js} +3 -3
- package/dist/{chunk-SL6JVGRD.js.map → chunk-D7K72XEY.js.map} +1 -1
- package/dist/{chunk-CSDQBWE6.js → chunk-DKGDOALM.js} +5 -5
- package/dist/{chunk-CSDQBWE6.js.map → chunk-DKGDOALM.js.map} +1 -1
- package/dist/{chunk-TTY56FQQ.js → chunk-GFNW72LW.js} +17 -5
- package/dist/chunk-GFNW72LW.js.map +1 -0
- package/dist/{chunk-X5Y4EGZB.js → chunk-I3UEM3FX.js} +36 -8
- package/dist/chunk-I3UEM3FX.js.map +1 -0
- package/dist/{chunk-TKOLD2O7.js → chunk-J3VKAEQP.js} +497 -143
- package/dist/chunk-J3VKAEQP.js.map +1 -0
- package/dist/{chunk-KA46DUM4.js → chunk-JHF66MCK.js} +49 -3
- package/dist/chunk-JHF66MCK.js.map +1 -0
- package/dist/{chunk-G6GKWGOW.js → chunk-LT4DLEYE.js} +6 -6
- package/dist/chunk-LT4DLEYE.js.map +1 -0
- package/dist/{chunk-XHFMUGDD.js → chunk-M5TE6YI5.js} +3 -3
- package/dist/{chunk-XHFMUGDD.js.map → chunk-M5TE6YI5.js.map} +1 -1
- package/dist/{chunk-J2FCO6TM.js → chunk-NJLHHZIW.js} +2 -2
- package/dist/{chunk-J2FCO6TM.js.map → chunk-NJLHHZIW.js.map} +1 -1
- package/dist/{chunk-MO4JPTRD.js → chunk-PTIHB2TV.js} +5 -5
- package/dist/{chunk-MO4JPTRD.js.map → chunk-PTIHB2TV.js.map} +1 -1
- package/dist/{chunk-RENHNO4J.js → chunk-UMOENHVH.js} +206 -137
- package/dist/chunk-UMOENHVH.js.map +1 -0
- package/dist/{chunk-NGC7ZQI4.js → chunk-V3QMSM5I.js} +38 -43
- package/dist/chunk-V3QMSM5I.js.map +1 -0
- package/dist/{chunk-2DNSSQ22.js → chunk-VCYXVP2S.js} +263 -177
- package/dist/chunk-VCYXVP2S.js.map +1 -0
- package/dist/{chunk-F3MGZ5E6.js → chunk-XIHFJVOD.js} +3 -3
- package/dist/{chunk-F3MGZ5E6.js.map → chunk-XIHFJVOD.js.map} +1 -1
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +102 -100
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/commands/deploy.d.ts.map +1 -1
- package/dist/cli/src/commands/manage.d.ts +1 -1
- package/dist/cli/src/commands/project.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/client/index.d.ts +2 -0
- package/dist/connectors/config.d.ts +2 -0
- package/dist/connectors/config.js +6 -6
- package/dist/connectors/index.d.ts +2 -0
- package/dist/connectors/index.js +8 -8
- package/dist/connectors/rclone-config.d.ts +2 -0
- package/dist/connectors/rclone.d.ts +2 -0
- package/dist/connectors-shared/index.d.ts +2 -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 +5 -5
- 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 +7 -5
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/lock.d.ts +47 -26
- package/dist/core/src/lock.d.ts.map +1 -1
- package/dist/core/src/models.d.ts +53 -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 +160 -45
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/src/workspace-yaml-editor.d.ts +33 -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 +34 -15
- package/dist/deploy/index.js.map +1 -1
- package/dist/deploy/src/targets/container-runtime.d.ts +1 -0
- package/dist/deploy/src/targets/container-runtime.d.ts.map +1 -1
- package/dist/deploy/src/targets/docker.d.ts +1 -0
- package/dist/deploy/src/targets/docker.d.ts.map +1 -1
- package/dist/deploy/src/targets/local.d.ts.map +1 -1
- package/dist/deploy/src/targets/podman.d.ts +1 -0
- package/dist/deploy/src/targets/podman.d.ts.map +1 -1
- 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-COGVKY44.js → ensure-sources-SL2S4UEX.js} +20 -16
- package/dist/ensure-sources-SL2S4UEX.js.map +1 -0
- 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-DWAQFUSQ.js.map → open-library-M4DB3D3J.js.map} +1 -1
- package/dist/plugin-registry/index.d.ts +2 -0
- package/dist/plugin-registry/index.js +1 -1
- package/dist/plugin-registry/src/deploy-handle.d.ts +17 -1
- package/dist/plugin-registry/src/deploy-handle.d.ts.map +1 -1
- 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/index.d.ts +6 -4
- package/dist/plugin-registry/src/index.d.ts.map +1 -1
- package/dist/plugin-registry/src/internal.d.ts.map +1 -1
- package/dist/plugin-registry/src/registry.d.ts +1 -0
- package/dist/plugin-registry/src/registry.d.ts.map +1 -1
- package/dist/plugin-registry/src/targets.d.ts +4 -0
- package/dist/plugin-registry/src/targets.d.ts.map +1 -1
- package/dist/{plugin-store-6OENKNFW.js → plugin-store-AJ3FGXIC.js} +8 -8
- package/dist/{plugin-store-6OENKNFW.js.map → plugin-store-AJ3FGXIC.js.map} +1 -1
- 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 +13 -13
- 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 +7 -7
- package/dist/sdk/bridge.d.ts +2 -0
- package/dist/sdk/bridge.js +3 -3
- package/dist/sdk/client.d.ts +2 -0
- package/dist/sdk/core.d.ts +2 -0
- package/dist/sdk/core.js +5 -5
- package/dist/sdk/flow.d.ts +2 -0
- package/dist/sdk/index.d.ts +2 -0
- package/dist/sdk/index.js +49 -16
- 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 +13 -13
- 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-ACMP3QZC.js → setup-GBSQX7JF.js} +10 -10
- package/dist/{setup-ACMP3QZC.js.map → setup-GBSQX7JF.js.map} +1 -1
- 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-ZSLNOOQG.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 +13 -13
- 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/omp.d.ts +2 -0
- package/dist/workspace-plugin/index.d.ts +2 -0
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +4 -2
- package/dist/chunk-2DNSSQ22.js.map +0 -1
- package/dist/chunk-G6GKWGOW.js.map +0 -1
- package/dist/chunk-IGQEXBBG.js.map +0 -1
- package/dist/chunk-KA46DUM4.js.map +0 -1
- package/dist/chunk-NGC7ZQI4.js.map +0 -1
- package/dist/chunk-RENHNO4J.js.map +0 -1
- package/dist/chunk-TKOLD2O7.js.map +0 -1
- package/dist/chunk-TTY56FQQ.js.map +0 -1
- package/dist/chunk-UZRY5UI2.js.map +0 -1
- package/dist/chunk-WIR34WMU.js.map +0 -1
- package/dist/chunk-X5Y4EGZB.js.map +0 -1
- package/dist/ensure-sources-COGVKY44.js.map +0 -1
- package/dist/open-library-DWAQFUSQ.js +0 -13
- package/dist/store-client-ZSLNOOQG.js +0 -14
|
@@ -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
|
package/dist/deploy/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { pluginRegistry } from '../chunk-
|
|
2
|
-
import { portableSpawnSync, portableSpawn } from '../chunk-
|
|
1
|
+
import { pluginRegistry } from '../chunk-6E6PKKAD.js';
|
|
2
|
+
import { portableSpawnSync, portableSpawn } from '../chunk-UMOENHVH.js';
|
|
3
3
|
import '../chunk-K5GBV4SA.js';
|
|
4
4
|
import '../chunk-KLNL7QHN.js';
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
7
|
-
import '../chunk-
|
|
8
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-GFNW72LW.js';
|
|
6
|
+
import '../chunk-J3VKAEQP.js';
|
|
7
|
+
import '../chunk-4AZKT2BU.js';
|
|
8
|
+
import '../chunk-I3UEM3FX.js';
|
|
9
9
|
import '../chunk-JKNWJ64A.js';
|
|
10
10
|
import '../chunk-O4JH3KUE.js';
|
|
11
11
|
import '../chunk-24UIWON4.js';
|
|
@@ -120,7 +120,8 @@ var containerConfigSchema = z.object({
|
|
|
120
120
|
env: z.record(z.string(), z.string()).default({}),
|
|
121
121
|
network: z.string().optional(),
|
|
122
122
|
pullPolicy: z.enum(["always", "if-missing", "never"]).default("if-missing"),
|
|
123
|
-
//
|
|
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.
|
|
124
125
|
buildStrategy: z.literal("local").default("local"),
|
|
125
126
|
containerPort: z.number().int().positive().optional(),
|
|
126
127
|
readyPattern: z.string().optional()
|
|
@@ -134,16 +135,34 @@ function payloadSchemaFor(bin) {
|
|
|
134
135
|
hostPort: z.number(),
|
|
135
136
|
runtime: z.enum(["docker", "podman"]).refine((r) => r === bin, {
|
|
136
137
|
message: `runtime mismatch: handle belongs to ${bin}`
|
|
137
|
-
})
|
|
138
|
+
}),
|
|
139
|
+
// Older handles predate `bind`; default to loopback so restore stays valid.
|
|
140
|
+
bind: z.string().default("127.0.0.1")
|
|
138
141
|
});
|
|
139
142
|
}
|
|
140
143
|
function pullFlag(policy) {
|
|
141
144
|
const mapped = policy === "if-missing" ? "missing" : policy;
|
|
142
145
|
return ["--pull", mapped];
|
|
143
146
|
}
|
|
144
|
-
function
|
|
145
|
-
const
|
|
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";
|
|
147
166
|
}
|
|
148
167
|
function buildHandle(bin, payload, config, ctx, ready) {
|
|
149
168
|
let state = "starting";
|
|
@@ -164,7 +183,7 @@ function buildHandle(bin, payload, config, ctx, ready) {
|
|
|
164
183
|
}
|
|
165
184
|
},
|
|
166
185
|
async health() {
|
|
167
|
-
const healthy = isRunning(bin, payload.containerId);
|
|
186
|
+
const healthy = await isRunning(bin, payload.containerId);
|
|
168
187
|
return healthy ? { healthy } : { healthy, detail: `container ${payload.containerId} not running` };
|
|
169
188
|
},
|
|
170
189
|
async *logs(opts) {
|
|
@@ -242,7 +261,7 @@ function makeContainerDeployTarget(bin) {
|
|
|
242
261
|
}
|
|
243
262
|
const containerId = runRes.stdout.trim();
|
|
244
263
|
log.info("container started", { runtime: bin, containerId, hostPort });
|
|
245
|
-
const payload = { containerId, hostPort, runtime: bin };
|
|
264
|
+
const payload = { containerId, hostPort, runtime: bin, bind: config.bind };
|
|
246
265
|
const ready = async () => {
|
|
247
266
|
const buffer = new LineBuffer();
|
|
248
267
|
const logProc = portableSpawn([bin, "logs", "--follow", containerId]);
|
|
@@ -261,14 +280,14 @@ function makeContainerDeployTarget(bin) {
|
|
|
261
280
|
},
|
|
262
281
|
async restore(payload, ctx) {
|
|
263
282
|
const log = ctx.log;
|
|
264
|
-
if (!isRunning(bin, payload.containerId)) {
|
|
283
|
+
if (!await isRunning(bin, payload.containerId)) {
|
|
265
284
|
throw new Error(`${bin} container ${payload.containerId} is not running`);
|
|
266
285
|
}
|
|
267
286
|
log.info("re-attached to container", { runtime: bin, containerId: payload.containerId });
|
|
268
287
|
return buildHandle(
|
|
269
288
|
bin,
|
|
270
289
|
payload,
|
|
271
|
-
{ bind:
|
|
290
|
+
{ bind: payload.bind},
|
|
272
291
|
ctx,
|
|
273
292
|
async () => {
|
|
274
293
|
}
|
package/dist/deploy/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../deploy/src/targets/port.ts","../../deploy/src/targets/stream-lines.ts","../../deploy/src/targets/container-runtime.ts","../../deploy/src/targets/docker.ts","../../deploy/src/targets/local.ts","../../deploy/src/targets/podman.ts","../../deploy/src/handle-store.ts","../../deploy/src/index.ts"],"names":["z2","DEFAULT_READY_PATTERN","DEFAULT_READY_TIMEOUT_MS","require","resolvePath","buildHandle","z3","dirname"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Free-port allocation for deploy targets.\n *\n * `connectors/src/port-pool.ts` exists but its `PortPool` is a stateful\n * range-allocator scoped to the connectors package; deploy targets just need a\n * single OS-assigned ephemeral port, so a small inline finder is the right fit.\n */\n\nimport { createServer } from \"node:net\";\n\n/** Bind to port 0, read the OS-assigned port, release it, and return it. */\nexport function allocateFreePort(host = \"127.0.0.1\"): Promise<number> {\n return new Promise((resolve, reject) => {\n const server = createServer();\n server.once(\"error\", reject);\n server.listen(0, host, () => {\n const addr = server.address();\n if (addr === null || typeof addr === \"string\") {\n server.close();\n reject(new Error(\"could not determine allocated port\"));\n return;\n }\n const { port } = addr;\n server.close(() => resolve(port));\n });\n });\n}\n","/**\n * Shared line-buffering helpers for deploy targets.\n *\n * Both the local target (subprocess stdout) and the container runtimes\n * (`<bin> logs`) read text off a web `ReadableStream<Uint8Array>` and need the\n * same UTF-8 decode + newline-split logic, plus a timestamped ring buffer so\n * `DeployHandle.logs()` can replay what was already seen.\n */\n\n/** One buffered log line with the wall-clock time it was observed. */\nexport interface BufferedLine {\n ts: number;\n line: string;\n}\n\n/**\n * Bounded FIFO of decoded lines. Drives both the readiness watcher and\n * `logs()` replay; the cap keeps a long-running process from growing unbounded.\n */\nexport class LineBuffer {\n private readonly lines: BufferedLine[] = [];\n private readonly waiters = new Set<(line: BufferedLine) => void>();\n\n constructor(private readonly max = 1000) {}\n\n push(line: string): void {\n const entry: BufferedLine = { ts: Date.now(), line };\n this.lines.push(entry);\n if (this.lines.length > this.max) this.lines.shift();\n for (const w of this.waiters) w(entry);\n }\n\n /** Snapshot of buffered lines at or after `sinceMs` (epoch millis). */\n since(sinceMs = 0): BufferedLine[] {\n return this.lines.filter((l) => l.ts >= sinceMs);\n }\n\n /** Subscribe to future pushes; returns an unsubscribe fn. */\n subscribe(fn: (line: BufferedLine) => void): () => void {\n this.waiters.add(fn);\n return () => this.waiters.delete(fn);\n }\n}\n\n/**\n * Pump a byte stream into a {@link LineBuffer}, splitting on `\\n`. Resolves when\n * the stream ends. Errors (e.g. the process being killed mid-read) are\n * swallowed — a dead stream just means no more lines.\n */\nexport async function pumpLines(\n stream: ReadableStream<Uint8Array>,\n buffer: LineBuffer,\n): Promise<void> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let pending = \"\";\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n pending += decoder.decode(value, { stream: true });\n let idx = pending.indexOf(\"\\n\");\n while (idx !== -1) {\n buffer.push(pending.slice(0, idx));\n pending = pending.slice(idx + 1);\n idx = pending.indexOf(\"\\n\");\n }\n }\n } catch {\n // Stream torn down (process killed) — nothing more to read.\n } finally {\n if (pending.length > 0) buffer.push(pending);\n reader.releaseLock();\n }\n}\n\n/**\n * Resolve once a buffered line matches `pattern`, reject on timeout or abort.\n * Checks already-buffered lines first so a fast-printing process never races\n * the subscription.\n */\nexport function waitForLine(\n buffer: LineBuffer,\n pattern: RegExp,\n opts: { timeoutMs: number; signal: AbortSignal },\n): Promise<void> {\n for (const { line } of buffer.since(0)) {\n if (pattern.test(line)) return Promise.resolve();\n }\n return new Promise<void>((resolve, reject) => {\n let settled = false;\n const finish = (fn: () => void) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n unsub();\n opts.signal.removeEventListener(\"abort\", onAbort);\n fn();\n };\n const unsub = buffer.subscribe(({ line }) => {\n if (pattern.test(line)) finish(resolve);\n });\n const onAbort = () => finish(() => reject(new Error(\"aborted while waiting for ready line\")));\n const timer = setTimeout(\n () =>\n finish(() =>\n reject(new Error(`timed out after ${opts.timeoutMs}ms waiting for ready line`)),\n ),\n opts.timeoutMs,\n );\n if (opts.signal.aborted) onAbort();\n else opts.signal.addEventListener(\"abort\", onAbort);\n });\n}\n","/**\n * Shared docker/podman deploy target, parameterized by binary name.\n *\n * docker and podman expose the same CLI surface for the run/inspect/logs/rm\n * verbs this target needs, so one implementation backs both\n * (`makeContainerDeployTarget(\"docker\" | \"podman\")`). `tlsTermination: \"none\"`\n * means loopback-only: a zod refinement rejects a non-loopback `bind` until tls\n * config lands (locked decision #12).\n */\n\nimport { portableSpawn, portableSpawnSync, type PortableSubprocess } from \"@skaile/workspaces/core\";\nimport type { DeployContext, DeployHandle, DeployTarget } from \"@skaile/workspaces/plugin-registry\";\nimport * as z from \"zod\";\nimport { allocateFreePort } from \"./port.js\";\nimport { LineBuffer, pumpLines, waitForLine } from \"./stream-lines.js\";\n\ntype ContainerBin = \"docker\" | \"podman\";\n\nconst LOOPBACK_BINDS = new Set([\"127.0.0.1\", \"localhost\", \"::1\"]);\nconst DEFAULT_READY_PATTERN = \"ws://\";\nconst DEFAULT_READY_TIMEOUT_MS = 60_000;\n\nconst containerConfigSchema = z\n .object({\n image: z.string(),\n port: z.number().int().positive().optional(),\n bind: z.string().default(\"127.0.0.1\"),\n mounts: z.array(z.string()).default([]),\n env: z.record(z.string(), z.string()).default({}),\n network: z.string().optional(),\n pullPolicy: z.enum([\"always\", \"if-missing\", \"never\"]).default(\"if-missing\"),\n // v1 defers in-provider image builds; \"local\" means \"run the given image\".\n buildStrategy: z.literal(\"local\").default(\"local\"),\n containerPort: z.number().int().positive().optional(),\n readyPattern: z.string().optional(),\n })\n .strict()\n .refine((c) => LOOPBACK_BINDS.has(c.bind), {\n message: \"non-loopback bind requires tls config (not yet supported); use a loopback bind\",\n path: [\"bind\"],\n });\n\ntype ContainerConfig = z.infer<typeof containerConfigSchema>;\n\nfunction payloadSchemaFor(bin: ContainerBin) {\n return z.object({\n containerId: z.string(),\n hostPort: z.number(),\n runtime: z.enum([\"docker\", \"podman\"]).refine((r) => r === bin, {\n message: `runtime mismatch: handle belongs to ${bin}`,\n }),\n });\n}\n\ntype ContainerPayload = { containerId: string; hostPort: number; runtime: ContainerBin };\n\nfunction pullFlag(policy: ContainerConfig[\"pullPolicy\"]): string[] {\n // `docker run --pull` takes always|missing|never; map our \"if-missing\".\n const mapped = policy === \"if-missing\" ? \"missing\" : policy;\n return [\"--pull\", mapped];\n}\n\n/** True when `<bin> inspect` reports the container in a running state. */\nfunction isRunning(bin: ContainerBin, containerId: string): boolean {\n const res = portableSpawnSync([bin, \"inspect\", \"-f\", \"{{.State.Running}}\", containerId]);\n return res.exitCode === 0 && res.stdout.trim() === \"true\";\n}\n\nfunction buildHandle(\n bin: ContainerBin,\n payload: ContainerPayload,\n config: Pick<ContainerConfig, \"bind\" | \"readyPattern\">,\n ctx: DeployContext,\n ready: () => Promise<void>,\n): DeployHandle<ContainerPayload> {\n let state: DeployHandle[\"state\"] = \"starting\";\n let followProc: PortableSubprocess | null = null;\n return {\n wsUrl: `ws://${config.bind}:${payload.hostPort}`,\n get state() {\n return state;\n },\n payload,\n async waitReady(timeoutMs?: number) {\n try {\n await ready();\n state = \"ready\";\n } catch (err) {\n state = \"errored\";\n throw err;\n }\n void timeoutMs;\n },\n async health() {\n const healthy = isRunning(bin, payload.containerId);\n return healthy\n ? { healthy }\n : { healthy, detail: `container ${payload.containerId} not running` };\n },\n async *logs(opts) {\n const buffer = new LineBuffer();\n const args = [\"logs\"];\n if (opts?.follow) args.push(\"--follow\");\n followProc = portableSpawn([bin, ...args, payload.containerId]);\n void pumpLines(followProc.stdout, buffer);\n void pumpLines(followProc.stderr, buffer);\n const since = opts?.sinceMs ?? 0;\n // Give the snapshot read a tick to drain non-follow output.\n if (!opts?.follow) await followProc.exited;\n for (const l of buffer.since(since)) yield l;\n if (!opts?.follow) return;\n const queue: { ts: number; line: string }[] = [];\n let notify: (() => void) | null = null;\n const unsub = buffer.subscribe((l) => {\n queue.push(l);\n notify?.();\n });\n try {\n while (!ctx.signal.aborted) {\n if (queue.length === 0) {\n await new Promise<void>((r) => {\n notify = r;\n });\n notify = null;\n }\n while (queue.length > 0) yield queue.shift() as { ts: number; line: string };\n }\n } finally {\n unsub();\n followProc?.kill(\"SIGTERM\");\n }\n },\n async stop() {\n state = \"stopping\";\n followProc?.kill(\"SIGTERM\");\n // `rm -f` removes a running or stopped container and is a no-op (nonzero\n // exit, ignored) when the container is already gone — idempotent.\n portableSpawnSync([bin, \"rm\", \"-f\", payload.containerId]);\n state = \"stopped\";\n },\n };\n}\n\n/** Build a docker/podman deploy target backed by `bin`. */\nexport function makeContainerDeployTarget(\n bin: ContainerBin,\n): DeployTarget<ContainerConfig, ContainerPayload> {\n const payloadSchema = payloadSchemaFor(bin) as unknown as z.ZodType<ContainerPayload>;\n return {\n id: bin,\n displayName: bin === \"docker\" ? \"Docker container\" : \"Podman container\",\n apiVersion: 1,\n tlsTermination: \"none\",\n configSchema: containerConfigSchema as unknown as z.ZodType<ContainerConfig>,\n payloadSchema,\n\n async create(config, ctx) {\n const log = ctx.log;\n const hostPort = config.port ?? (await allocateFreePort(config.bind));\n const containerPort = config.containerPort ?? hostPort;\n const name = `skaile-ws-${ctx.workspaceId}`;\n const pattern = new RegExp(config.readyPattern ?? DEFAULT_READY_PATTERN);\n\n const args = [\n bin,\n \"run\",\n \"-d\",\n \"--name\",\n name,\n \"-p\",\n `${config.bind}:${hostPort}:${containerPort}`,\n ...pullFlag(config.pullPolicy),\n ];\n if (config.network) args.push(\"--network\", config.network);\n for (const [k, v] of Object.entries(config.env)) args.push(\"-e\", `${k}=${v}`);\n for (const m of config.mounts) args.push(\"-v\", m);\n args.push(config.image);\n\n const runRes = portableSpawnSync(args);\n if (runRes.exitCode !== 0) {\n throw new Error(`${bin} run failed: ${runRes.stderr.trim() || runRes.stdout.trim()}`);\n }\n const containerId = runRes.stdout.trim();\n log.info(\"container started\", { runtime: bin, containerId, hostPort });\n\n const payload: ContainerPayload = { containerId, hostPort, runtime: bin };\n const ready = async () => {\n // Poll logs for the ready line; fall back to a running-state check so a\n // ready image that never prints the marker still resolves.\n const buffer = new LineBuffer();\n const logProc = portableSpawn([bin, \"logs\", \"--follow\", containerId]);\n void pumpLines(logProc.stdout, buffer);\n void pumpLines(logProc.stderr, buffer);\n try {\n await waitForLine(buffer, pattern, {\n timeoutMs: DEFAULT_READY_TIMEOUT_MS,\n signal: ctx.signal,\n });\n } finally {\n logProc.kill(\"SIGTERM\");\n }\n };\n return buildHandle(bin, payload, config, ctx, ready);\n },\n\n async restore(payload, ctx) {\n const log = ctx.log;\n if (!isRunning(bin, payload.containerId)) {\n throw new Error(`${bin} container ${payload.containerId} is not running`);\n }\n log.info(\"re-attached to container\", { runtime: bin, containerId: payload.containerId });\n return buildHandle(\n bin,\n payload,\n { bind: \"127.0.0.1\", readyPattern: undefined },\n ctx,\n async () => {},\n );\n },\n };\n}\n","/** `dockerDeployTarget` — the shared container runtime bound to the `docker` bin. */\n\nimport { makeContainerDeployTarget } from \"./container-runtime.js\";\n\nexport const dockerDeployTarget = makeContainerDeployTarget(\"docker\");\n","/**\n * `localDeployTarget` — stand a workspace up as a local child process and reach\n * it over `ws://127.0.0.1:<port>`. `tlsTermination: \"none\"` (loopback only).\n *\n * The `command` / `args` / `readyPattern` config fields exist so the target is\n * testable hermetically: a test points them at a mock server instead of a real\n * `skaile serve`. Defaults resolve the `skaile` bin from this package and run\n * `skaile serve --port <port>`.\n */\n\nimport { createRequire } from \"node:module\";\nimport { dirname, resolve as resolvePath } from \"node:path\";\nimport { portableSpawn, type PortableSubprocess } from \"@skaile/workspaces/core\";\nimport type { DeployContext, DeployHandle, DeployTarget } from \"@skaile/workspaces/plugin-registry\";\nimport * as z from \"zod\";\nimport { allocateFreePort } from \"./port.js\";\nimport { LineBuffer, pumpLines, waitForLine } from \"./stream-lines.js\";\n\nconst localConfigSchema = z\n .object({\n port: z.number().int().positive().optional(),\n env: z.record(z.string(), z.string()).optional(),\n cwd: z.string().optional(),\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n // `skaile serve` emits structured logs rather than a single banner; the\n // ws:// URL line is the most stable readiness marker.\n readyPattern: z.string().optional(),\n })\n .strict()\n .default({});\n\ntype LocalConfig = z.infer<typeof localConfigSchema>;\n\nconst localPayloadSchema = z.object({\n pid: z.number(),\n port: z.number(),\n cwd: z.string(),\n});\n\ntype LocalPayload = z.infer<typeof localPayloadSchema>;\n\nconst DEFAULT_READY_PATTERN = \"ws://\";\nconst DEFAULT_READY_TIMEOUT_MS = 30_000;\n\n/** Resolve the `skaile` bin shipped by this package, for the default command. */\nfunction resolveSkaileBin(): string {\n const require = createRequire(import.meta.url);\n const pkgPath = require.resolve(\"@skaile/workspaces/package.json\");\n const pkg = require(\"@skaile/workspaces/package.json\") as { bin?: Record<string, string> };\n const rel = pkg.bin?.skaile ?? \"dist/cli/index.js\";\n return resolvePath(dirname(pkgPath), rel);\n}\n\n/** True when a pid is alive (signal 0 probes without delivering a signal). */\nfunction pidAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n}\n\ninterface LocalProcess {\n proc: PortableSubprocess;\n buffer: LineBuffer;\n}\n\nfunction buildHandle(\n payload: LocalPayload,\n ctx: DeployContext,\n ready: () => Promise<void>,\n proc: LocalProcess | null,\n): DeployHandle<LocalPayload> {\n let state: DeployHandle[\"state\"] = proc ? \"starting\" : \"ready\";\n return {\n wsUrl: `ws://127.0.0.1:${payload.port}`,\n get state() {\n return state;\n },\n payload,\n async waitReady(timeoutMs?: number) {\n try {\n await ready();\n state = \"ready\";\n } catch (err) {\n state = \"errored\";\n throw err;\n }\n // `timeoutMs` is honoured inside `ready()` via the config-default timeout;\n // the param stays in the signature for contract parity.\n void timeoutMs;\n },\n async health() {\n const healthy = pidAlive(payload.pid);\n return healthy ? { healthy } : { healthy, detail: `pid ${payload.pid} not alive` };\n },\n async *logs(opts) {\n if (!proc) return; // a restored handle re-attaches by pid; it has no stream.\n const since = opts?.sinceMs ?? 0;\n for (const l of proc.buffer.since(since)) yield l;\n if (!opts?.follow) return;\n const queue: { ts: number; line: string }[] = [];\n let notify: (() => void) | null = null;\n const unsub = proc.buffer.subscribe((l) => {\n queue.push(l);\n notify?.();\n });\n try {\n while (!ctx.signal.aborted) {\n if (queue.length === 0) {\n await new Promise<void>((r) => {\n notify = r;\n });\n notify = null;\n }\n while (queue.length > 0) yield queue.shift() as { ts: number; line: string };\n }\n } finally {\n unsub();\n }\n },\n async stop() {\n state = \"stopping\";\n if (pidAlive(payload.pid)) {\n try {\n process.kill(payload.pid, \"SIGTERM\");\n } catch {\n // Already gone between the check and the kill — idempotent.\n }\n }\n state = \"stopped\";\n },\n };\n}\n\n/** Built-in target that runs the workspace as a local child process. */\nexport const localDeployTarget: DeployTarget<LocalConfig, LocalPayload> = {\n id: \"local\",\n displayName: \"Local process\",\n apiVersion: 1,\n tlsTermination: \"none\",\n configSchema: localConfigSchema as unknown as z.ZodType<LocalConfig>,\n payloadSchema: localPayloadSchema,\n\n async create(config, ctx) {\n const log = ctx.log;\n const port = config.port ?? (await allocateFreePort());\n const cwd = config.cwd ?? process.cwd();\n const command = config.command ?? resolveSkaileBin();\n const args = config.args ?? [\"serve\", \"--port\", String(port)];\n const pattern = new RegExp(config.readyPattern ?? DEFAULT_READY_PATTERN);\n\n const proc = portableSpawn([command, ...args], {\n cwd,\n env: { ...process.env, ...config.env },\n });\n const buffer = new LineBuffer();\n void pumpLines(proc.stdout, buffer);\n void pumpLines(proc.stderr, buffer);\n log.info(\"local process spawned\", { pid: proc.pid, port, command });\n\n const payload: LocalPayload = { pid: proc.pid, port, cwd };\n const ready = () =>\n waitForLine(buffer, pattern, { timeoutMs: DEFAULT_READY_TIMEOUT_MS, signal: ctx.signal });\n return buildHandle(payload, ctx, ready, { proc, buffer });\n },\n\n async restore(payload, ctx) {\n const log = ctx.log;\n if (!pidAlive(payload.pid)) {\n throw new Error(`local deploy pid ${payload.pid} is no longer alive`);\n }\n log.info(\"re-attached to local process\", { pid: payload.pid, port: payload.port });\n // Re-attached handle is already running; readiness is a no-op.\n return buildHandle(payload, ctx, async () => {}, null);\n },\n};\n","/** `podmanDeployTarget` — the shared container runtime bound to the `podman` bin. */\n\nimport { makeContainerDeployTarget } from \"./container-runtime.js\";\n\nexport const podmanDeployTarget = makeContainerDeployTarget(\"podman\");\n","/**\n * Registry-owned persistence for the detach handle at\n * `<project>/.skaile/deploy/handle.json` (locked decision #13).\n *\n * The file is a `{ targetId, payload }` envelope: `targetId` selects which\n * `DeployTarget` to look up, `payload` is that target's opaque restore slice.\n * The store never interprets `payload` — it only validates the envelope shape.\n */\n\nimport { mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport * as z from \"zod\";\n\n/** Parsed detach-handle envelope. `payload` is the target's opaque restore slice. */\nexport interface StoredHandle {\n targetId: string;\n payload: unknown;\n}\n\nconst storedHandleSchema = z.object({\n targetId: z.string().min(1),\n payload: z.unknown(),\n});\n\n/** Absolute path to the detach-handle file for a project. */\nexport function handlePath(projectDir: string): string {\n return join(projectDir, \".skaile\", \"deploy\", \"handle.json\");\n}\n\n/** Write the detach handle, creating `.skaile/deploy/` if missing. */\nexport async function writeHandle(\n projectDir: string,\n targetId: string,\n payload: unknown,\n): Promise<void> {\n const path = handlePath(projectDir);\n await mkdir(dirname(path), { recursive: true });\n const envelope: StoredHandle = { targetId, payload };\n await writeFile(path, `${JSON.stringify(envelope, null, 2)}\\n`, \"utf8\");\n}\n\n/** Read + validate the detach handle. Returns null when absent or malformed. */\nexport async function readHandle(projectDir: string): Promise<StoredHandle | null> {\n let raw: string;\n try {\n raw = await readFile(handlePath(projectDir), \"utf8\");\n } catch {\n return null;\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return null;\n }\n const result = storedHandleSchema.safeParse(parsed);\n return result.success ? result.data : null;\n}\n\n/** Remove the detach handle. Idempotent — a missing file is not an error. */\nexport async function clearHandle(projectDir: string): Promise<void> {\n await rm(handlePath(projectDir), { force: true });\n}\n","/**\n * `@skaile/workspaces/deploy` — built-in deploy targets + the detach-handle store.\n *\n * Ships the three loopback-only built-ins (local, docker, podman),\n * `registerBuiltinDeployTargets()` to load them into a `PluginRegistry`, and the\n * `.skaile/deploy/handle.json` read/write/restore API. Cloud targets (fly,\n * vercel-sandbox, k8s) ship as separate packages that self-register.\n */\n\nimport { pluginRegistry, type PluginRegistry } from \"@skaile/workspaces/plugin-registry\";\nimport { dockerDeployTarget } from \"./targets/docker.js\";\nimport { localDeployTarget } from \"./targets/local.js\";\nimport { podmanDeployTarget } from \"./targets/podman.js\";\n\nexport { localDeployTarget } from \"./targets/local.js\";\nexport { dockerDeployTarget } from \"./targets/docker.js\";\nexport { podmanDeployTarget } from \"./targets/podman.js\";\nexport { makeContainerDeployTarget } from \"./targets/container-runtime.js\";\nexport {\n clearHandle,\n handlePath,\n readHandle,\n writeHandle,\n type StoredHandle,\n} from \"./handle-store.js\";\n\n/**\n * Register the built-in deploy targets into `registry` (the process-wide\n * `pluginRegistry` by default). Idempotent — an id already present is skipped,\n * so calling this from multiple CLI entrypoints is safe.\n */\nexport function registerBuiltinDeployTargets(registry: PluginRegistry = pluginRegistry): void {\n for (const t of [localDeployTarget, dockerDeployTarget, podmanDeployTarget]) {\n if (!registry.get(\"deployTarget\", t.id)) registry.register(\"deployTarget\", t);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../deploy/src/targets/port.ts","../../deploy/src/targets/stream-lines.ts","../../deploy/src/targets/container-runtime.ts","../../deploy/src/targets/docker.ts","../../deploy/src/targets/local.ts","../../deploy/src/targets/podman.ts","../../deploy/src/handle-store.ts","../../deploy/src/index.ts"],"names":["z2","DEFAULT_READY_PATTERN","DEFAULT_READY_TIMEOUT_MS","require","resolvePath","buildHandle","z3","dirname"],"mappings":";;;;;;;;;;;;;;;;;;AAWO,SAAS,gBAAA,CAAiB,OAAO,WAAA,EAA8B;AACpE,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,SAAS,YAAA,EAAa;AAC5B,IAAA,MAAA,CAAO,IAAA,CAAK,SAAS,MAAM,CAAA;AAC3B,IAAA,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG,IAAA,EAAM,MAAM;AAC3B,MAAA,MAAM,IAAA,GAAO,OAAO,OAAA,EAAQ;AAC5B,MAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AAC7C,QAAA,MAAA,CAAO,KAAA,EAAM;AACb,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,oCAAoC,CAAC,CAAA;AACtD,QAAA;AAAA,MACF;AACA,MAAA,MAAM,EAAE,MAAK,GAAI,IAAA;AACjB,MAAA,MAAA,CAAO,KAAA,CAAM,MAAM,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,IAClC,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;;;ACPO,IAAM,aAAN,MAAiB;AAAA,EAItB,WAAA,CAA6B,MAAM,GAAA,EAAM;AAAZ,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAa;AAAA,EAAb,GAAA;AAAA,EAHZ,QAAwB,EAAC;AAAA,EACzB,OAAA,uBAAc,GAAA,EAAkC;AAAA,EAIjE,KAAK,IAAA,EAAoB;AACvB,IAAA,MAAM,QAAsB,EAAE,EAAA,EAAI,IAAA,CAAK,GAAA,IAAO,IAAA,EAAK;AACnD,IAAA,IAAA,CAAK,KAAA,CAAM,KAAK,KAAK,CAAA;AACrB,IAAA,IAAI,KAAK,KAAA,CAAM,MAAA,GAAS,KAAK,GAAA,EAAK,IAAA,CAAK,MAAM,KAAA,EAAM;AACnD,IAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,OAAA,EAAS,CAAA,CAAE,KAAK,CAAA;AAAA,EACvC;AAAA;AAAA,EAGA,KAAA,CAAM,UAAU,CAAA,EAAmB;AACjC,IAAA,OAAO,KAAK,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,OAAO,CAAA;AAAA,EACjD;AAAA;AAAA,EAGA,UAAU,EAAA,EAA8C;AACtD,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAI,EAAE,CAAA;AACnB,IAAA,OAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,EAAE,CAAA;AAAA,EACrC;AACF,CAAA;AAOA,eAAsB,SAAA,CACpB,QACA,MAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,IAAI,OAAA,GAAU,EAAA;AACd,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,MAAA,IAAI,IAAA,EAAM;AACV,MAAA,OAAA,IAAW,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AACjD,MAAA,IAAI,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA;AAC9B,MAAA,OAAO,QAAQ,CAAA,CAAA,EAAI;AACjB,QAAA,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA;AACjC,QAAA,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,GAAA,GAAM,CAAC,CAAA;AAC/B,QAAA,GAAA,GAAM,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAAA,MAC5B;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER,CAAA,SAAE;AACA,IAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,MAAA,CAAO,KAAK,OAAO,CAAA;AAC3C,IAAA,MAAA,CAAO,WAAA,EAAY;AAAA,EACrB;AACF;AAOO,SAAS,WAAA,CACd,MAAA,EACA,OAAA,EACA,IAAA,EACe;AACf,EAAA,KAAA,MAAW,EAAE,IAAA,EAAK,IAAK,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAG;AACtC,IAAA,IAAI,QAAQ,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACjD;AACA,EAAA,OAAO,IAAI,OAAA,CAAc,CAAC,OAAA,EAAS,MAAA,KAAW;AAC5C,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,MAAM,MAAA,GAAS,CAAC,EAAA,KAAmB;AACjC,MAAA,IAAI,OAAA,EAAS;AACb,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,KAAA,EAAM;AACN,MAAA,IAAA,CAAK,MAAA,CAAO,mBAAA,CAAoB,OAAA,EAAS,OAAO,CAAA;AAChD,MAAA,EAAA,EAAG;AAAA,IACL,CAAA;AACA,IAAA,MAAM,QAAQ,MAAA,CAAO,SAAA,CAAU,CAAC,EAAE,MAAK,KAAM;AAC3C,MAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,SAAU,OAAO,CAAA;AAAA,IACxC,CAAC,CAAA;AACD,IAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,MAAM,OAAO,IAAI,KAAA,CAAM,sCAAsC,CAAC,CAAC,CAAA;AAC5F,IAAA,MAAM,KAAA,GAAQ,UAAA;AAAA,MACZ,MACE,MAAA;AAAA,QAAO,MACL,OAAO,IAAI,KAAA,CAAM,mBAAmB,IAAA,CAAK,SAAS,2BAA2B,CAAC;AAAA,OAChF;AAAA,MACF,IAAA,CAAK;AAAA,KACP;AACA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS,OAAA,EAAQ;AAAA,SAC5B,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,OAAA,EAAS,OAAO,CAAA;AAAA,EACpD,CAAC,CAAA;AACH;;;AC/FA,IAAM,iCAAiB,IAAI,GAAA,CAAI,CAAC,WAAA,EAAa,WAAA,EAAa,KAAK,CAAC,CAAA;AAChE,IAAM,qBAAA,GAAwB,OAAA;AAC9B,IAAM,wBAAA,GAA2B,GAAA;AAEjC,IAAM,wBACH,CAAA,CAAA,MAAA,CAAO;AAAA,EACN,OAAS,CAAA,CAAA,MAAA,EAAO;AAAA,EAChB,MAAQ,CAAA,CAAA,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,IAAA,EAAQ,CAAA,CAAA,MAAA,EAAO,CAAE,OAAA,CAAQ,WAAW,CAAA;AAAA,EACpC,QAAU,CAAA,CAAA,KAAA,CAAQ,CAAA,CAAA,MAAA,EAAQ,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EACtC,GAAA,EAAO,SAAS,CAAA,CAAA,MAAA,EAAO,EAAK,UAAQ,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAChD,OAAA,EAAW,CAAA,CAAA,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,UAAA,EAAc,OAAK,CAAC,QAAA,EAAU,cAAc,OAAO,CAAC,CAAA,CAAE,OAAA,CAAQ,YAAY,CAAA;AAAA;AAAA;AAAA,EAG1E,aAAA,EAAiB,CAAA,CAAA,OAAA,CAAQ,OAAO,CAAA,CAAE,QAAQ,OAAO,CAAA;AAAA,EACjD,eAAiB,CAAA,CAAA,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACpD,YAAA,EAAgB,CAAA,CAAA,MAAA,EAAO,CAAE,QAAA;AAC3B,CAAC,CAAA,CACA,MAAA,EAAO,CACP,MAAA,CAAO,CAAC,MAAM,cAAA,CAAe,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,EAAG;AAAA,EACzC,OAAA,EAAS,gFAAA;AAAA,EACT,IAAA,EAAM,CAAC,MAAM;AACf,CAAC,CAAA;AAIH,SAAS,iBAAiB,GAAA,EAAmB;AAC3C,EAAA,OAAS,CAAA,CAAA,MAAA,CAAO;AAAA,IACd,aAAe,CAAA,CAAA,MAAA,EAAO;AAAA,IACtB,UAAY,CAAA,CAAA,MAAA,EAAO;AAAA,IACnB,OAAA,EAAW,CAAA,CAAA,IAAA,CAAK,CAAC,QAAA,EAAU,QAAQ,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,GAAA,EAAK;AAAA,MAC7D,OAAA,EAAS,uCAAuC,GAAG,CAAA;AAAA,KACpD,CAAA;AAAA;AAAA,IAED,IAAA,EAAQ,CAAA,CAAA,MAAA,EAAO,CAAE,OAAA,CAAQ,WAAW;AAAA,GACrC,CAAA;AACH;AASA,SAAS,SAAS,MAAA,EAAiD;AAEjE,EAAA,MAAM,MAAA,GAAS,MAAA,KAAW,YAAA,GAAe,SAAA,GAAY,MAAA;AACrD,EAAA,OAAO,CAAC,UAAU,MAAM,CAAA;AAC1B;AAEA,eAAe,WAAW,MAAA,EAAqD;AAC7E,EAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI;AACF,IAAA,WAAS;AACP,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,MAAA,IAAI,IAAA,EAAM;AACV,MAAA,IAAI,KAAA,SAAc,OAAA,CAAQ,MAAA,CAAO,OAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAAA,IAC1D;AAAA,EACF,CAAA,SAAE;AACA,IAAA,MAAA,CAAO,WAAA,EAAY;AAAA,EACrB;AACA,EAAA,OAAO,GAAA,GAAM,QAAQ,MAAA,EAAO;AAC9B;AASA,eAAe,SAAA,CAAU,KAAmB,WAAA,EAAuC;AACjF,EAAA,MAAM,IAAA,GAAO,cAAc,CAAC,GAAA,EAAK,WAAW,IAAA,EAAM,oBAAA,EAAsB,WAAW,CAAC,CAAA;AACpF,EAAA,MAAM,CAAC,QAAA,EAAU,MAAM,CAAA,GAAI,MAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,UAAA,CAAW,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA;AACnF,EAAA,OAAO,QAAA,KAAa,CAAA,IAAK,MAAA,CAAO,IAAA,EAAK,KAAM,MAAA;AAC7C;AAIA,SAAS,WAAA,CACP,GAAA,EACA,OAAA,EACA,MAAA,EACA,KACA,KAAA,EACgC;AAChC,EAAA,IAAI,KAAA,GAA+B,UAAA;AACnC,EAAA,IAAI,UAAA,GAAwC,IAAA;AAC5C,EAAA,OAAO;AAAA,IACL,OAAO,CAAA,KAAA,EAAQ,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,QAAQ,QAAQ,CAAA,CAAA;AAAA,IAC9C,IAAI,KAAA,GAAQ;AACV,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAM,UAAU,SAAA,EAAoB;AAClC,MAAA,IAAI;AACF,QAAA,MAAM,KAAA,EAAM;AACZ,QAAA,KAAA,GAAQ,OAAA;AAAA,MACV,SAAS,GAAA,EAAK;AACZ,QAAA,KAAA,GAAQ,SAAA;AACR,QAAA,MAAM,GAAA;AAAA,MACR;AACK,IACP,CAAA;AAAA,IACA,MAAM,MAAA,GAAS;AACb,MAAA,MAAM,OAAA,GAAU,MAAM,SAAA,CAAU,GAAA,EAAK,QAAQ,WAAW,CAAA;AACxD,MAAA,OAAO,OAAA,GACH,EAAE,OAAA,EAAQ,GACV,EAAE,SAAS,MAAA,EAAQ,CAAA,UAAA,EAAa,OAAA,CAAQ,WAAW,CAAA,YAAA,CAAA,EAAe;AAAA,IACxE,CAAA;AAAA,IACA,OAAO,KAAK,IAAA,EAAM;AAChB,MAAA,MAAM,MAAA,GAAS,IAAI,UAAA,EAAW;AAC9B,MAAA,MAAM,IAAA,GAAO,CAAC,MAAM,CAAA;AACpB,MAAA,IAAI,IAAA,EAAM,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA;AACtC,MAAA,UAAA,GAAa,cAAc,CAAC,GAAA,EAAK,GAAG,IAAA,EAAM,OAAA,CAAQ,WAAW,CAAC,CAAA;AAC9D,MAAA,KAAK,SAAA,CAAU,UAAA,CAAW,MAAA,EAAQ,MAAM,CAAA;AACxC,MAAA,KAAK,SAAA,CAAU,UAAA,CAAW,MAAA,EAAQ,MAAM,CAAA;AACxC,MAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,IAAW,CAAA;AAE/B,MAAA,IAAI,CAAC,IAAA,EAAM,MAAA,EAAQ,MAAM,UAAA,CAAW,MAAA;AACpC,MAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,KAAA,CAAM,KAAK,GAAG,MAAM,CAAA;AAC3C,MAAA,IAAI,CAAC,MAAM,MAAA,EAAQ;AACnB,MAAA,MAAM,QAAwC,EAAC;AAC/C,MAAA,IAAI,MAAA,GAA8B,IAAA;AAClC,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,SAAA,CAAU,CAAC,CAAA,KAAM;AACpC,QAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AACZ,QAAA,MAAA,IAAS;AAAA,MACX,CAAC,CAAA;AACD,MAAA,IAAI;AACF,QAAA,OAAO,CAAC,GAAA,CAAI,MAAA,CAAO,OAAA,EAAS;AAC1B,UAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,YAAA,MAAM,IAAI,OAAA,CAAc,CAAC,CAAA,KAAM;AAC7B,cAAA,MAAA,GAAS,CAAA;AAAA,YACX,CAAC,CAAA;AACD,YAAA,MAAA,GAAS,IAAA;AAAA,UACX;AACA,UAAA,OAAO,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,MAAM,MAAM,KAAA,EAAM;AAAA,QAC7C;AAAA,MACF,CAAA,SAAE;AACA,QAAA,KAAA,EAAM;AACN,QAAA,UAAA,EAAY,KAAK,SAAS,CAAA;AAAA,MAC5B;AAAA,IACF,CAAA;AAAA,IACA,MAAM,IAAA,GAAO;AACX,MAAA,KAAA,GAAQ,UAAA;AACR,MAAA,UAAA,EAAY,KAAK,SAAS,CAAA;AAG1B,MAAA,iBAAA,CAAkB,CAAC,GAAA,EAAK,IAAA,EAAM,IAAA,EAAM,OAAA,CAAQ,WAAW,CAAC,CAAA;AACxD,MAAA,KAAA,GAAQ,SAAA;AAAA,IACV;AAAA,GACF;AACF;AAGO,SAAS,0BACd,GAAA,EACiD;AACjD,EAAA,MAAM,aAAA,GAAgB,iBAAiB,GAAG,CAAA;AAC1C,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,GAAA;AAAA,IACJ,WAAA,EAAa,GAAA,KAAQ,QAAA,GAAW,kBAAA,GAAqB,kBAAA;AAAA,IACrD,UAAA,EAAY,CAAA;AAAA,IACZ,cAAA,EAAgB,MAAA;AAAA,IAChB,YAAA,EAAc,qBAAA;AAAA,IACd,aAAA;AAAA,IAEA,MAAM,MAAA,CAAO,MAAA,EAAQ,GAAA,EAAK;AACxB,MAAA,MAAM,MAAM,GAAA,CAAI,GAAA;AAChB,MAAA,MAAM,WAAW,MAAA,CAAO,IAAA,IAAS,MAAM,gBAAA,CAAiB,OAAO,IAAI,CAAA;AACnE,MAAA,MAAM,aAAA,GAAgB,OAAO,aAAA,IAAiB,QAAA;AAC9C,MAAA,MAAM,IAAA,GAAO,CAAA,UAAA,EAAa,GAAA,CAAI,WAAW,CAAA,CAAA;AACzC,MAAA,MAAM,OAAA,GAAU,IAAI,MAAA,CAAO,MAAA,CAAO,gBAAgB,qBAAqB,CAAA;AAEvE,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,GAAA;AAAA,QACA,KAAA;AAAA,QACA,IAAA;AAAA,QACA,QAAA;AAAA,QACA,IAAA;AAAA,QACA,IAAA;AAAA,QACA,GAAG,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,QAAQ,IAAI,aAAa,CAAA,CAAA;AAAA,QAC3C,GAAG,QAAA,CAAS,MAAA,CAAO,UAAU;AAAA,OAC/B;AACA,MAAA,IAAI,OAAO,OAAA,EAAS,IAAA,CAAK,IAAA,CAAK,WAAA,EAAa,OAAO,OAAO,CAAA;AACzD,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,MAAA,CAAO,QAAQ,MAAA,CAAO,GAAG,CAAA,EAAG,IAAA,CAAK,KAAK,IAAA,EAAM,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA;AAC5E,MAAA,KAAA,MAAW,KAAK,MAAA,CAAO,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,MAAM,CAAC,CAAA;AAChD,MAAA,IAAA,CAAK,IAAA,CAAK,OAAO,KAAK,CAAA;AAEtB,MAAA,MAAM,MAAA,GAAS,kBAAkB,IAAI,CAAA;AACrC,MAAA,IAAI,MAAA,CAAO,aAAa,CAAA,EAAG;AACzB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,aAAA,EAAgB,MAAA,CAAO,MAAA,CAAO,IAAA,EAAK,IAAK,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,CAAA,CAAE,CAAA;AAAA,MACtF;AACA,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,IAAA,EAAK;AACvC,MAAA,GAAA,CAAI,KAAK,mBAAA,EAAqB,EAAE,SAAS,GAAA,EAAK,WAAA,EAAa,UAAU,CAAA;AAErE,MAAA,MAAM,OAAA,GAA4B,EAAE,WAAA,EAAa,QAAA,EAAU,SAAS,GAAA,EAAK,IAAA,EAAM,OAAO,IAAA,EAAK;AAC3F,MAAA,MAAM,QAAQ,YAAY;AAOxB,QAAA,MAAM,MAAA,GAAS,IAAI,UAAA,EAAW;AAC9B,QAAA,MAAM,UAAU,aAAA,CAAc,CAAC,KAAK,MAAA,EAAQ,UAAA,EAAY,WAAW,CAAC,CAAA;AACpE,QAAA,KAAK,SAAA,CAAU,OAAA,CAAQ,MAAA,EAAQ,MAAM,CAAA;AACrC,QAAA,KAAK,SAAA,CAAU,OAAA,CAAQ,MAAA,EAAQ,MAAM,CAAA;AACrC,QAAA,IAAI;AACF,UAAA,MAAM,WAAA,CAAY,QAAQ,OAAA,EAAS;AAAA,YACjC,SAAA,EAAW,wBAAA;AAAA,YACX,QAAQ,GAAA,CAAI;AAAA,WACb,CAAA;AAAA,QACH,CAAA,SAAE;AACA,UAAA,OAAA,CAAQ,KAAK,SAAS,CAAA;AAAA,QACxB;AAAA,MACF,CAAA;AACA,MAAA,OAAO,WAAA,CAAY,GAAA,EAAK,OAAA,EAAS,MAAA,EAAQ,KAAK,KAAK,CAAA;AAAA,IACrD,CAAA;AAAA,IAEA,MAAM,OAAA,CAAQ,OAAA,EAAS,GAAA,EAAK;AAC1B,MAAA,MAAM,MAAM,GAAA,CAAI,GAAA;AAChB,MAAA,IAAI,CAAE,MAAM,SAAA,CAAU,GAAA,EAAK,OAAA,CAAQ,WAAW,CAAA,EAAI;AAChD,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,WAAA,EAAc,OAAA,CAAQ,WAAW,CAAA,eAAA,CAAiB,CAAA;AAAA,MAC1E;AACA,MAAA,GAAA,CAAI,IAAA,CAAK,4BAA4B,EAAE,OAAA,EAAS,KAAK,WAAA,EAAa,OAAA,CAAQ,aAAa,CAAA;AACvF,MAAA,OAAO,WAAA;AAAA,QACL,GAAA;AAAA,QACA,OAAA;AAAA,QACA,EAAE,IAAA,EAAM,OAAA,CAAQ,IAA8B,CAAA;AAAA,QAC9C,GAAA;AAAA,QACA,YAAY;AAAA,QAAC;AAAA,OACf;AAAA,IACF;AAAA,GACF;AACF;;;AC7PO,IAAM,kBAAA,GAAqB,0BAA0B,QAAQ;ACcpE,IAAM,oBACHA,CAAA,CAAA,MAAA,CAAO;AAAA,EACN,MAAQA,CAAA,CAAA,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,KAAOA,CAAA,CAAA,MAAA,CAASA,CAAA,CAAA,MAAA,IAAYA,CAAA,CAAA,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAC/C,GAAA,EAAOA,CAAA,CAAA,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACzB,OAAA,EAAWA,CAAA,CAAA,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,IAAA,EAAQA,CAAA,CAAA,KAAA,CAAQA,CAAA,CAAA,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA;AAAA,EAGnC,YAAA,EAAgBA,CAAA,CAAA,MAAA,EAAO,CAAE,QAAA;AAC3B,CAAC,CAAA,CACA,MAAA,EAAO,CACP,OAAA,CAAQ,EAAE,CAAA;AAIb,IAAM,qBAAuBA,CAAA,CAAA,MAAA,CAAO;AAAA,EAClC,KAAOA,CAAA,CAAA,MAAA,EAAO;AAAA,EACd,MAAQA,CAAA,CAAA,MAAA,EAAO;AAAA,EACf,KAAOA,CAAA,CAAA,MAAA;AACT,CAAC,CAAA;AAID,IAAMC,sBAAAA,GAAwB,OAAA;AAC9B,IAAMC,yBAAAA,GAA2B,GAAA;AAGjC,SAAS,gBAAA,GAA2B;AAClC,EAAA,MAAMC,QAAAA,GAAU,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAC7C,EAAA,MAAM,OAAA,GAAUA,QAAAA,CAAQ,OAAA,CAAQ,iCAAiC,CAAA;AACjE,EAAA,MAAM,GAAA,GAAMA,SAAQ,iCAAiC,CAAA;AACrD,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,EAAK,MAAA,IAAU,mBAAA;AAC/B,EAAA,OAAOC,OAAA,CAAY,OAAA,CAAQ,OAAO,CAAA,EAAG,GAAG,CAAA;AAC1C;AAGA,SAAS,SAAS,GAAA,EAAsB;AACtC,EAAA,IAAI;AACF,IAAA,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAC,CAAA;AACnB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAYA,SAASC,YAAAA,CACP,OAAA,EACA,GAAA,EACA,KAAA,EACA,IAAA,EAC4B;AAC5B,EAAA,IAAI,KAAA,GAA+B,OAAO,UAAA,GAAa,OAAA;AACvD,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,CAAA,eAAA,EAAkB,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,IACrC,IAAI,KAAA,GAAQ;AACV,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAM,UAAU,SAAA,EAAoB;AAClC,MAAA,IAAI;AACF,QAAA,MAAM,KAAA,EAAM;AACZ,QAAA,KAAA,GAAQ,OAAA;AAAA,MACV,SAAS,GAAA,EAAK;AACZ,QAAA,KAAA,GAAQ,SAAA;AACR,QAAA,MAAM,GAAA;AAAA,MACR;AAGK,IACP,CAAA;AAAA,IACA,MAAM,MAAA,GAAS;AACb,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,OAAA,CAAQ,GAAG,CAAA;AACpC,MAAA,OAAO,OAAA,GAAU,EAAE,OAAA,EAAQ,GAAI,EAAE,SAAS,MAAA,EAAQ,CAAA,IAAA,EAAO,OAAA,CAAQ,GAAG,CAAA,UAAA,CAAA,EAAa;AAAA,IACnF,CAAA;AAAA,IACA,OAAO,KAAK,IAAA,EAAM;AAChB,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,IAAW,CAAA;AAC/B,MAAA,KAAA,MAAW,KAAK,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,KAAK,GAAG,MAAM,CAAA;AAChD,MAAA,IAAI,CAAC,MAAM,MAAA,EAAQ;AACnB,MAAA,MAAM,QAAwC,EAAC;AAC/C,MAAA,IAAI,MAAA,GAA8B,IAAA;AAClC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,CAAC,CAAA,KAAM;AACzC,QAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AACZ,QAAA,MAAA,IAAS;AAAA,MACX,CAAC,CAAA;AACD,MAAA,IAAI;AACF,QAAA,OAAO,CAAC,GAAA,CAAI,MAAA,CAAO,OAAA,EAAS;AAC1B,UAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,YAAA,MAAM,IAAI,OAAA,CAAc,CAAC,CAAA,KAAM;AAC7B,cAAA,MAAA,GAAS,CAAA;AAAA,YACX,CAAC,CAAA;AACD,YAAA,MAAA,GAAS,IAAA;AAAA,UACX;AACA,UAAA,OAAO,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,MAAM,MAAM,KAAA,EAAM;AAAA,QAC7C;AAAA,MACF,CAAA,SAAE;AACA,QAAA,KAAA,EAAM;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IACA,MAAM,IAAA,GAAO;AACX,MAAA,KAAA,GAAQ,UAAA;AACR,MAAA,IAAI,QAAA,CAAS,OAAA,CAAQ,GAAG,CAAA,EAAG;AACzB,QAAA,IAAI;AACF,UAAA,OAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,SAAS,CAAA;AAAA,QACrC,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AACA,MAAA,KAAA,GAAQ,SAAA;AAAA,IACV;AAAA,GACF;AACF;AAGO,IAAM,iBAAA,GAA6D;AAAA,EACxE,EAAA,EAAI,OAAA;AAAA,EACJ,WAAA,EAAa,eAAA;AAAA,EACb,UAAA,EAAY,CAAA;AAAA,EACZ,cAAA,EAAgB,MAAA;AAAA,EAChB,YAAA,EAAc,iBAAA;AAAA,EACd,aAAA,EAAe,kBAAA;AAAA,EAEf,MAAM,MAAA,CAAO,MAAA,EAAQ,GAAA,EAAK;AACxB,IAAA,MAAM,MAAM,GAAA,CAAI,GAAA;AAChB,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,IAAS,MAAM,gBAAA,EAAiB;AACpD,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AACtC,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,gBAAA,EAAiB;AACnD,IAAA,MAAM,IAAA,GAAO,OAAO,IAAA,IAAQ,CAAC,SAAS,QAAA,EAAU,MAAA,CAAO,IAAI,CAAC,CAAA;AAC5D,IAAA,MAAM,OAAA,GAAU,IAAI,MAAA,CAAO,MAAA,CAAO,gBAAgBJ,sBAAqB,CAAA;AAEvE,IAAA,MAAM,OAAO,aAAA,CAAc,CAAC,OAAA,EAAS,GAAG,IAAI,CAAA,EAAG;AAAA,MAC7C,GAAA;AAAA,MACA,KAAK,EAAE,GAAG,QAAQ,GAAA,EAAK,GAAG,OAAO,GAAA;AAAI,KACtC,CAAA;AACD,IAAA,MAAM,MAAA,GAAS,IAAI,UAAA,EAAW;AAC9B,IAAA,KAAK,SAAA,CAAU,IAAA,CAAK,MAAA,EAAQ,MAAM,CAAA;AAClC,IAAA,KAAK,SAAA,CAAU,IAAA,CAAK,MAAA,EAAQ,MAAM,CAAA;AAClC,IAAA,GAAA,CAAI,IAAA,CAAK,yBAAyB,EAAE,GAAA,EAAK,KAAK,GAAA,EAAK,IAAA,EAAM,SAAS,CAAA;AAElE,IAAA,MAAM,UAAwB,EAAE,GAAA,EAAK,IAAA,CAAK,GAAA,EAAK,MAAM,GAAA,EAAI;AACzD,IAAA,MAAM,KAAA,GAAQ,MACZ,WAAA,CAAY,MAAA,EAAQ,OAAA,EAAS,EAAE,SAAA,EAAWC,yBAAAA,EAA0B,MAAA,EAAQ,GAAA,CAAI,MAAA,EAAQ,CAAA;AAC1F,IAAA,OAAOG,aAAY,OAAA,EAAS,GAAA,EAAK,OAAO,EAAQ,QAAQ,CAAA;AAAA,EAC1D,CAAA;AAAA,EAEA,MAAM,OAAA,CAAQ,OAAA,EAAS,GAAA,EAAK;AAC1B,IAAA,MAAM,MAAM,GAAA,CAAI,GAAA;AAChB,IAAA,IAAI,CAAC,QAAA,CAAS,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,OAAA,CAAQ,GAAG,CAAA,mBAAA,CAAqB,CAAA;AAAA,IACtE;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,gCAAgC,EAAE,GAAA,EAAK,QAAQ,GAAA,EAAK,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,CAAA;AAEjF,IAAA,OAAOA,YAAAA,CAAY,OAAA,EAAS,GAAA,EAAK,YAAY;AAAA,IAAC,GAAG,IAAI,CAAA;AAAA,EACvD;AACF;;;ACnLO,IAAM,kBAAA,GAAqB,0BAA0B,QAAQ;ACepE,IAAM,qBAAuBC,CAAA,CAAA,MAAA,CAAO;AAAA,EAClC,QAAA,EAAYA,CAAA,CAAA,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA;AAAA,EAC1B,SAAWA,CAAA,CAAA,OAAA;AACb,CAAC,CAAA;AAGM,SAAS,WAAW,UAAA,EAA4B;AACrD,EAAA,OAAO,IAAA,CAAK,UAAA,EAAY,SAAA,EAAW,QAAA,EAAU,aAAa,CAAA;AAC5D;AAGA,eAAsB,WAAA,CACpB,UAAA,EACA,QAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,IAAA,GAAO,WAAW,UAAU,CAAA;AAClC,EAAA,MAAM,MAAMC,OAAAA,CAAQ,IAAI,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC9C,EAAA,MAAM,QAAA,GAAyB,EAAE,QAAA,EAAU,OAAA,EAAQ;AACnD,EAAA,MAAM,SAAA,CAAU,MAAM,CAAA,EAAG,IAAA,CAAK,UAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAC;AAAA,CAAA,EAAM,MAAM,CAAA;AACxE;AAGA,eAAsB,WAAW,UAAA,EAAkD;AACjF,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,GAAA,GAAM,MAAM,QAAA,CAAS,UAAA,CAAW,UAAU,GAAG,MAAM,CAAA;AAAA,EACrD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,SAAA,CAAU,MAAM,CAAA;AAClD,EAAA,OAAO,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,IAAA,GAAO,IAAA;AACxC;AAGA,eAAsB,YAAY,UAAA,EAAmC;AACnE,EAAA,MAAM,GAAG,UAAA,CAAW,UAAU,GAAG,EAAE,KAAA,EAAO,MAAM,CAAA;AAClD;;;AC/BO,SAAS,4BAAA,CAA6B,WAA2B,cAAA,EAAsB;AAC5F,EAAA,KAAA,MAAW,CAAA,IAAK,CAAC,iBAAA,EAAmB,kBAAA,EAAoB,kBAAkB,CAAA,EAAG;AAC3E,IAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,cAAA,EAAgB,CAAA,CAAE,EAAE,CAAA,EAAG,QAAA,CAAS,QAAA,CAAS,cAAA,EAAgB,CAAC,CAAA;AAAA,EAC9E;AACF","file":"index.js","sourcesContent":["/**\n * Free-port allocation for deploy targets.\n *\n * `connectors/src/port-pool.ts` exists but its `PortPool` is a stateful\n * range-allocator scoped to the connectors package; deploy targets just need a\n * single OS-assigned ephemeral port, so a small inline finder is the right fit.\n */\n\nimport { createServer } from \"node:net\";\n\n/** Bind to port 0, read the OS-assigned port, release it, and return it. */\nexport function allocateFreePort(host = \"127.0.0.1\"): Promise<number> {\n return new Promise((resolve, reject) => {\n const server = createServer();\n server.once(\"error\", reject);\n server.listen(0, host, () => {\n const addr = server.address();\n if (addr === null || typeof addr === \"string\") {\n server.close();\n reject(new Error(\"could not determine allocated port\"));\n return;\n }\n const { port } = addr;\n server.close(() => resolve(port));\n });\n });\n}\n","/**\n * Shared line-buffering helpers for deploy targets.\n *\n * Both the local target (subprocess stdout) and the container runtimes\n * (`<bin> logs`) read text off a web `ReadableStream<Uint8Array>` and need the\n * same UTF-8 decode + newline-split logic, plus a timestamped ring buffer so\n * `DeployHandle.logs()` can replay what was already seen.\n */\n\n/** One buffered log line with the wall-clock time it was observed. */\nexport interface BufferedLine {\n ts: number;\n line: string;\n}\n\n/**\n * Bounded FIFO of decoded lines. Drives both the readiness watcher and\n * `logs()` replay; the cap keeps a long-running process from growing unbounded.\n */\nexport class LineBuffer {\n private readonly lines: BufferedLine[] = [];\n private readonly waiters = new Set<(line: BufferedLine) => void>();\n\n constructor(private readonly max = 1000) {}\n\n push(line: string): void {\n const entry: BufferedLine = { ts: Date.now(), line };\n this.lines.push(entry);\n if (this.lines.length > this.max) this.lines.shift();\n for (const w of this.waiters) w(entry);\n }\n\n /** Snapshot of buffered lines at or after `sinceMs` (epoch millis). */\n since(sinceMs = 0): BufferedLine[] {\n return this.lines.filter((l) => l.ts >= sinceMs);\n }\n\n /** Subscribe to future pushes; returns an unsubscribe fn. */\n subscribe(fn: (line: BufferedLine) => void): () => void {\n this.waiters.add(fn);\n return () => this.waiters.delete(fn);\n }\n}\n\n/**\n * Pump a byte stream into a {@link LineBuffer}, splitting on `\\n`. Resolves when\n * the stream ends. Errors (e.g. the process being killed mid-read) are\n * swallowed — a dead stream just means no more lines.\n */\nexport async function pumpLines(\n stream: ReadableStream<Uint8Array>,\n buffer: LineBuffer,\n): Promise<void> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let pending = \"\";\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n pending += decoder.decode(value, { stream: true });\n let idx = pending.indexOf(\"\\n\");\n while (idx !== -1) {\n buffer.push(pending.slice(0, idx));\n pending = pending.slice(idx + 1);\n idx = pending.indexOf(\"\\n\");\n }\n }\n } catch {\n // Stream torn down (process killed) — nothing more to read.\n } finally {\n if (pending.length > 0) buffer.push(pending);\n reader.releaseLock();\n }\n}\n\n/**\n * Resolve once a buffered line matches `pattern`, reject on timeout or abort.\n * Checks already-buffered lines first so a fast-printing process never races\n * the subscription.\n */\nexport function waitForLine(\n buffer: LineBuffer,\n pattern: RegExp,\n opts: { timeoutMs: number; signal: AbortSignal },\n): Promise<void> {\n for (const { line } of buffer.since(0)) {\n if (pattern.test(line)) return Promise.resolve();\n }\n return new Promise<void>((resolve, reject) => {\n let settled = false;\n const finish = (fn: () => void) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n unsub();\n opts.signal.removeEventListener(\"abort\", onAbort);\n fn();\n };\n const unsub = buffer.subscribe(({ line }) => {\n if (pattern.test(line)) finish(resolve);\n });\n const onAbort = () => finish(() => reject(new Error(\"aborted while waiting for ready line\")));\n const timer = setTimeout(\n () =>\n finish(() =>\n reject(new Error(`timed out after ${opts.timeoutMs}ms waiting for ready line`)),\n ),\n opts.timeoutMs,\n );\n if (opts.signal.aborted) onAbort();\n else opts.signal.addEventListener(\"abort\", onAbort);\n });\n}\n","/**\n * Shared docker/podman deploy target, parameterized by binary name.\n *\n * docker and podman expose the same CLI surface for the run/inspect/logs/rm\n * verbs this target needs, so one implementation backs both\n * (`makeContainerDeployTarget(\"docker\" | \"podman\")`). `tlsTermination: \"none\"`\n * means loopback-only: a zod refinement rejects a non-loopback `bind` until tls\n * config lands (locked decision #12).\n */\n\nimport { portableSpawn, portableSpawnSync, type PortableSubprocess } from \"@skaile/workspaces/core\";\nimport type { DeployContext, DeployHandle, DeployTarget } from \"@skaile/workspaces/plugin-registry\";\nimport * as z from \"zod\";\nimport { allocateFreePort } from \"./port.js\";\nimport { LineBuffer, pumpLines, waitForLine } from \"./stream-lines.js\";\n\ntype ContainerBin = \"docker\" | \"podman\";\n\nconst LOOPBACK_BINDS = new Set([\"127.0.0.1\", \"localhost\", \"::1\"]);\nconst DEFAULT_READY_PATTERN = \"ws://\";\nconst DEFAULT_READY_TIMEOUT_MS = 60_000;\n\nconst containerConfigSchema = z\n .object({\n image: z.string(),\n port: z.number().int().positive().optional(),\n bind: z.string().default(\"127.0.0.1\"),\n mounts: z.array(z.string()).default([]),\n env: z.record(z.string(), z.string()).default({}),\n network: z.string().optional(),\n pullPolicy: z.enum([\"always\", \"if-missing\", \"never\"]).default(\"if-missing\"),\n // \"local\" only — this target runs a prebuilt image and has no in-provider builder.\n // The full buildStrategySchema (local/remote/managed) lives in plugin-registry for the provider-* packages that implement remote builds.\n buildStrategy: z.literal(\"local\").default(\"local\"),\n containerPort: z.number().int().positive().optional(),\n readyPattern: z.string().optional(),\n })\n .strict()\n .refine((c) => LOOPBACK_BINDS.has(c.bind), {\n message: \"non-loopback bind requires tls config (not yet supported); use a loopback bind\",\n path: [\"bind\"],\n });\n\ntype ContainerConfig = z.infer<typeof containerConfigSchema>;\n\nfunction payloadSchemaFor(bin: ContainerBin) {\n return z.object({\n containerId: z.string(),\n hostPort: z.number(),\n runtime: z.enum([\"docker\", \"podman\"]).refine((r) => r === bin, {\n message: `runtime mismatch: handle belongs to ${bin}`,\n }),\n // Older handles predate `bind`; default to loopback so restore stays valid.\n bind: z.string().default(\"127.0.0.1\"),\n });\n}\n\ntype ContainerPayload = {\n containerId: string;\n hostPort: number;\n runtime: ContainerBin;\n bind: string;\n};\n\nfunction pullFlag(policy: ContainerConfig[\"pullPolicy\"]): string[] {\n // `docker run --pull` takes always|missing|never; map our \"if-missing\".\n const mapped = policy === \"if-missing\" ? \"missing\" : policy;\n return [\"--pull\", mapped];\n}\n\nasync function readStream(stream: ReadableStream<Uint8Array>): Promise<string> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let out = \"\";\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n if (value) out += decoder.decode(value, { stream: true });\n }\n } finally {\n reader.releaseLock();\n }\n return out + decoder.decode();\n}\n\n/**\n * True when `<bin> inspect` reports the container in a running state.\n *\n * Async (over `portableSpawn` + `await exited`) so the inspect round-trip stays\n * off the event loop — `health()` / `restore()` poll this without freezing log\n * pumps or other connections.\n */\nasync function isRunning(bin: ContainerBin, containerId: string): Promise<boolean> {\n const proc = portableSpawn([bin, \"inspect\", \"-f\", \"{{.State.Running}}\", containerId]);\n const [exitCode, stdout] = await Promise.all([proc.exited, readStream(proc.stdout)]);\n return exitCode === 0 && stdout.trim() === \"true\";\n}\n\n// @TODO(buildHandle dup): same DeployHandle wrapper as the other 4 deploy\n// targets — see the makeDeployHandle factory note in provider-fly/target.ts.\nfunction buildHandle(\n bin: ContainerBin,\n payload: ContainerPayload,\n config: Pick<ContainerConfig, \"bind\" | \"readyPattern\">,\n ctx: DeployContext,\n ready: () => Promise<void>,\n): DeployHandle<ContainerPayload> {\n let state: DeployHandle[\"state\"] = \"starting\";\n let followProc: PortableSubprocess | null = null;\n return {\n wsUrl: `ws://${config.bind}:${payload.hostPort}`,\n get state() {\n return state;\n },\n payload,\n async waitReady(timeoutMs?: number) {\n try {\n await ready();\n state = \"ready\";\n } catch (err) {\n state = \"errored\";\n throw err;\n }\n void timeoutMs;\n },\n async health() {\n const healthy = await isRunning(bin, payload.containerId);\n return healthy\n ? { healthy }\n : { healthy, detail: `container ${payload.containerId} not running` };\n },\n async *logs(opts) {\n const buffer = new LineBuffer();\n const args = [\"logs\"];\n if (opts?.follow) args.push(\"--follow\");\n followProc = portableSpawn([bin, ...args, payload.containerId]);\n void pumpLines(followProc.stdout, buffer);\n void pumpLines(followProc.stderr, buffer);\n const since = opts?.sinceMs ?? 0;\n // Give the snapshot read a tick to drain non-follow output.\n if (!opts?.follow) await followProc.exited;\n for (const l of buffer.since(since)) yield l;\n if (!opts?.follow) return;\n const queue: { ts: number; line: string }[] = [];\n let notify: (() => void) | null = null;\n const unsub = buffer.subscribe((l) => {\n queue.push(l);\n notify?.();\n });\n try {\n while (!ctx.signal.aborted) {\n if (queue.length === 0) {\n await new Promise<void>((r) => {\n notify = r;\n });\n notify = null;\n }\n while (queue.length > 0) yield queue.shift() as { ts: number; line: string };\n }\n } finally {\n unsub();\n followProc?.kill(\"SIGTERM\");\n }\n },\n async stop() {\n state = \"stopping\";\n followProc?.kill(\"SIGTERM\");\n // `rm -f` removes a running or stopped container and is a no-op (nonzero\n // exit, ignored) when the container is already gone — idempotent.\n portableSpawnSync([bin, \"rm\", \"-f\", payload.containerId]);\n state = \"stopped\";\n },\n };\n}\n\n/** Build a docker/podman deploy target backed by `bin`. */\nexport function makeContainerDeployTarget(\n bin: ContainerBin,\n): DeployTarget<ContainerConfig, ContainerPayload> {\n const payloadSchema = payloadSchemaFor(bin) as unknown as z.ZodType<ContainerPayload>;\n return {\n id: bin,\n displayName: bin === \"docker\" ? \"Docker container\" : \"Podman container\",\n apiVersion: 1,\n tlsTermination: \"none\",\n configSchema: containerConfigSchema as unknown as z.ZodType<ContainerConfig>,\n payloadSchema,\n\n async create(config, ctx) {\n const log = ctx.log;\n const hostPort = config.port ?? (await allocateFreePort(config.bind));\n const containerPort = config.containerPort ?? hostPort;\n const name = `skaile-ws-${ctx.workspaceId}`;\n const pattern = new RegExp(config.readyPattern ?? DEFAULT_READY_PATTERN);\n\n const args = [\n bin,\n \"run\",\n \"-d\",\n \"--name\",\n name,\n \"-p\",\n `${config.bind}:${hostPort}:${containerPort}`,\n ...pullFlag(config.pullPolicy),\n ];\n if (config.network) args.push(\"--network\", config.network);\n for (const [k, v] of Object.entries(config.env)) args.push(\"-e\", `${k}=${v}`);\n for (const m of config.mounts) args.push(\"-v\", m);\n args.push(config.image);\n\n const runRes = portableSpawnSync(args);\n if (runRes.exitCode !== 0) {\n throw new Error(`${bin} run failed: ${runRes.stderr.trim() || runRes.stdout.trim()}`);\n }\n const containerId = runRes.stdout.trim();\n log.info(\"container started\", { runtime: bin, containerId, hostPort });\n\n const payload: ContainerPayload = { containerId, hostPort, runtime: bin, bind: config.bind };\n const ready = async () => {\n // Poll logs for the ready line; fall back to a running-state check so a\n // ready image that never prints the marker still resolves.\n // @TODO(duplicate log stream): this spawns a second `<bin> logs --follow`\n // + throwaway LineBuffer just for readiness, on top of the one handle.logs()\n // spawns. Pump one shared `<bin> logs --follow` into a single LineBuffer at\n // create() time and have both waitReady and logs() read from it.\n const buffer = new LineBuffer();\n const logProc = portableSpawn([bin, \"logs\", \"--follow\", containerId]);\n void pumpLines(logProc.stdout, buffer);\n void pumpLines(logProc.stderr, buffer);\n try {\n await waitForLine(buffer, pattern, {\n timeoutMs: DEFAULT_READY_TIMEOUT_MS,\n signal: ctx.signal,\n });\n } finally {\n logProc.kill(\"SIGTERM\");\n }\n };\n return buildHandle(bin, payload, config, ctx, ready);\n },\n\n async restore(payload, ctx) {\n const log = ctx.log;\n if (!(await isRunning(bin, payload.containerId))) {\n throw new Error(`${bin} container ${payload.containerId} is not running`);\n }\n log.info(\"re-attached to container\", { runtime: bin, containerId: payload.containerId });\n return buildHandle(\n bin,\n payload,\n { bind: payload.bind, readyPattern: undefined },\n ctx,\n async () => {},\n );\n },\n };\n}\n","/** `dockerDeployTarget` — the shared container runtime bound to the `docker` bin. */\n\nimport { makeContainerDeployTarget } from \"./container-runtime.js\";\n\nexport const dockerDeployTarget = makeContainerDeployTarget(\"docker\");\n","/**\n * `localDeployTarget` — stand a workspace up as a local child process and reach\n * it over `ws://127.0.0.1:<port>`. `tlsTermination: \"none\"` (loopback only).\n *\n * The `command` / `args` / `readyPattern` config fields exist so the target is\n * testable hermetically: a test points them at a mock server instead of a real\n * `skaile serve`. Defaults resolve the `skaile` bin from this package and run\n * `skaile serve --port <port>`.\n */\n\nimport { createRequire } from \"node:module\";\nimport { dirname, resolve as resolvePath } from \"node:path\";\nimport { portableSpawn, type PortableSubprocess } from \"@skaile/workspaces/core\";\nimport type { DeployContext, DeployHandle, DeployTarget } from \"@skaile/workspaces/plugin-registry\";\nimport * as z from \"zod\";\nimport { allocateFreePort } from \"./port.js\";\nimport { LineBuffer, pumpLines, waitForLine } from \"./stream-lines.js\";\n\nconst localConfigSchema = z\n .object({\n port: z.number().int().positive().optional(),\n env: z.record(z.string(), z.string()).optional(),\n cwd: z.string().optional(),\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n // `skaile serve` emits structured logs rather than a single banner; the\n // ws:// URL line is the most stable readiness marker.\n readyPattern: z.string().optional(),\n })\n .strict()\n .default({});\n\ntype LocalConfig = z.infer<typeof localConfigSchema>;\n\nconst localPayloadSchema = z.object({\n pid: z.number(),\n port: z.number(),\n cwd: z.string(),\n});\n\ntype LocalPayload = z.infer<typeof localPayloadSchema>;\n\nconst DEFAULT_READY_PATTERN = \"ws://\";\nconst DEFAULT_READY_TIMEOUT_MS = 30_000;\n\n/** Resolve the `skaile` bin shipped by this package, for the default command. */\nfunction resolveSkaileBin(): string {\n const require = createRequire(import.meta.url);\n const pkgPath = require.resolve(\"@skaile/workspaces/package.json\");\n const pkg = require(\"@skaile/workspaces/package.json\") as { bin?: Record<string, string> };\n const rel = pkg.bin?.skaile ?? \"dist/cli/index.js\";\n return resolvePath(dirname(pkgPath), rel);\n}\n\n/** True when a pid is alive (signal 0 probes without delivering a signal). */\nfunction pidAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n}\n\ninterface LocalProcess {\n proc: PortableSubprocess;\n buffer: LineBuffer;\n}\n\n// @TODO(buildHandle dup): same DeployHandle wrapper as the other 4 deploy\n// targets — see the makeDeployHandle factory note in provider-fly/target.ts.\n// The follow-mode drain loop in logs() below is also duplicated in\n// container-runtime.ts; a shared `followBuffer(buffer, signal)` in stream-lines\n// would absorb both.\nfunction buildHandle(\n payload: LocalPayload,\n ctx: DeployContext,\n ready: () => Promise<void>,\n proc: LocalProcess | null,\n): DeployHandle<LocalPayload> {\n let state: DeployHandle[\"state\"] = proc ? \"starting\" : \"ready\";\n return {\n wsUrl: `ws://127.0.0.1:${payload.port}`,\n get state() {\n return state;\n },\n payload,\n async waitReady(timeoutMs?: number) {\n try {\n await ready();\n state = \"ready\";\n } catch (err) {\n state = \"errored\";\n throw err;\n }\n // `timeoutMs` is honoured inside `ready()` via the config-default timeout;\n // the param stays in the signature for contract parity.\n void timeoutMs;\n },\n async health() {\n const healthy = pidAlive(payload.pid);\n return healthy ? { healthy } : { healthy, detail: `pid ${payload.pid} not alive` };\n },\n async *logs(opts) {\n if (!proc) return; // a restored handle re-attaches by pid; it has no stream.\n const since = opts?.sinceMs ?? 0;\n for (const l of proc.buffer.since(since)) yield l;\n if (!opts?.follow) return;\n const queue: { ts: number; line: string }[] = [];\n let notify: (() => void) | null = null;\n const unsub = proc.buffer.subscribe((l) => {\n queue.push(l);\n notify?.();\n });\n try {\n while (!ctx.signal.aborted) {\n if (queue.length === 0) {\n await new Promise<void>((r) => {\n notify = r;\n });\n notify = null;\n }\n while (queue.length > 0) yield queue.shift() as { ts: number; line: string };\n }\n } finally {\n unsub();\n }\n },\n async stop() {\n state = \"stopping\";\n if (pidAlive(payload.pid)) {\n try {\n process.kill(payload.pid, \"SIGTERM\");\n } catch {\n // Already gone between the check and the kill — idempotent.\n }\n }\n state = \"stopped\";\n },\n };\n}\n\n/** Built-in target that runs the workspace as a local child process. */\nexport const localDeployTarget: DeployTarget<LocalConfig, LocalPayload> = {\n id: \"local\",\n displayName: \"Local process\",\n apiVersion: 1,\n tlsTermination: \"none\",\n configSchema: localConfigSchema as unknown as z.ZodType<LocalConfig>,\n payloadSchema: localPayloadSchema,\n\n async create(config, ctx) {\n const log = ctx.log;\n const port = config.port ?? (await allocateFreePort());\n const cwd = config.cwd ?? process.cwd();\n const command = config.command ?? resolveSkaileBin();\n const args = config.args ?? [\"serve\", \"--port\", String(port)];\n const pattern = new RegExp(config.readyPattern ?? DEFAULT_READY_PATTERN);\n\n const proc = portableSpawn([command, ...args], {\n cwd,\n env: { ...process.env, ...config.env },\n });\n const buffer = new LineBuffer();\n void pumpLines(proc.stdout, buffer);\n void pumpLines(proc.stderr, buffer);\n log.info(\"local process spawned\", { pid: proc.pid, port, command });\n\n const payload: LocalPayload = { pid: proc.pid, port, cwd };\n const ready = () =>\n waitForLine(buffer, pattern, { timeoutMs: DEFAULT_READY_TIMEOUT_MS, signal: ctx.signal });\n return buildHandle(payload, ctx, ready, { proc, buffer });\n },\n\n async restore(payload, ctx) {\n const log = ctx.log;\n if (!pidAlive(payload.pid)) {\n throw new Error(`local deploy pid ${payload.pid} is no longer alive`);\n }\n log.info(\"re-attached to local process\", { pid: payload.pid, port: payload.port });\n // Re-attached handle is already running; readiness is a no-op.\n return buildHandle(payload, ctx, async () => {}, null);\n },\n};\n","/** `podmanDeployTarget` — the shared container runtime bound to the `podman` bin. */\n\nimport { makeContainerDeployTarget } from \"./container-runtime.js\";\n\nexport const podmanDeployTarget = makeContainerDeployTarget(\"podman\");\n","/**\n * Registry-owned persistence for the detach handle at\n * `<project>/.skaile/deploy/handle.json` (locked decision #13).\n *\n * The file is a `{ targetId, payload }` envelope: `targetId` selects which\n * `DeployTarget` to look up, `payload` is that target's opaque restore slice.\n * The store never interprets `payload` — it only validates the envelope shape.\n */\n\nimport { mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport * as z from \"zod\";\n\n/** Parsed detach-handle envelope. `payload` is the target's opaque restore slice. */\nexport interface StoredHandle {\n targetId: string;\n payload: unknown;\n}\n\nconst storedHandleSchema = z.object({\n targetId: z.string().min(1),\n payload: z.unknown(),\n});\n\n/** Absolute path to the detach-handle file for a project. */\nexport function handlePath(projectDir: string): string {\n return join(projectDir, \".skaile\", \"deploy\", \"handle.json\");\n}\n\n/** Write the detach handle, creating `.skaile/deploy/` if missing. */\nexport async function writeHandle(\n projectDir: string,\n targetId: string,\n payload: unknown,\n): Promise<void> {\n const path = handlePath(projectDir);\n await mkdir(dirname(path), { recursive: true });\n const envelope: StoredHandle = { targetId, payload };\n await writeFile(path, `${JSON.stringify(envelope, null, 2)}\\n`, \"utf8\");\n}\n\n/** Read + validate the detach handle. Returns null when absent or malformed. */\nexport async function readHandle(projectDir: string): Promise<StoredHandle | null> {\n let raw: string;\n try {\n raw = await readFile(handlePath(projectDir), \"utf8\");\n } catch {\n return null;\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return null;\n }\n const result = storedHandleSchema.safeParse(parsed);\n return result.success ? result.data : null;\n}\n\n/** Remove the detach handle. Idempotent — a missing file is not an error. */\nexport async function clearHandle(projectDir: string): Promise<void> {\n await rm(handlePath(projectDir), { force: true });\n}\n","/**\n * `@skaile/workspaces/deploy` — built-in deploy targets + the detach-handle store.\n *\n * Ships the three loopback-only built-ins (local, docker, podman),\n * `registerBuiltinDeployTargets()` to load them into a `PluginRegistry`, and the\n * `.skaile/deploy/handle.json` read/write/restore API. Cloud targets (fly,\n * vercel-sandbox, k8s) ship as separate packages that self-register.\n */\n\nimport { pluginRegistry, type PluginRegistry } from \"@skaile/workspaces/plugin-registry\";\nimport { dockerDeployTarget } from \"./targets/docker.js\";\nimport { localDeployTarget } from \"./targets/local.js\";\nimport { podmanDeployTarget } from \"./targets/podman.js\";\n\nexport { localDeployTarget } from \"./targets/local.js\";\nexport { dockerDeployTarget } from \"./targets/docker.js\";\nexport { podmanDeployTarget } from \"./targets/podman.js\";\nexport { makeContainerDeployTarget } from \"./targets/container-runtime.js\";\nexport {\n clearHandle,\n handlePath,\n readHandle,\n writeHandle,\n type StoredHandle,\n} from \"./handle-store.js\";\n\n/**\n * Register the built-in deploy targets into `registry` (the process-wide\n * `pluginRegistry` by default). Idempotent — an id already present is skipped,\n * so calling this from multiple CLI entrypoints is safe.\n */\nexport function registerBuiltinDeployTargets(registry: PluginRegistry = pluginRegistry): void {\n for (const t of [localDeployTarget, dockerDeployTarget, podmanDeployTarget]) {\n if (!registry.get(\"deployTarget\", t.id)) registry.register(\"deployTarget\", t);\n }\n}\n"]}
|
|
@@ -31,6 +31,7 @@ type ContainerPayload = {
|
|
|
31
31
|
containerId: string;
|
|
32
32
|
hostPort: number;
|
|
33
33
|
runtime: ContainerBin;
|
|
34
|
+
bind: string;
|
|
34
35
|
};
|
|
35
36
|
/** Build a docker/podman deploy target backed by `bin`. */
|
|
36
37
|
export declare function makeContainerDeployTarget(bin: ContainerBin): DeployTarget<ContainerConfig, ContainerPayload>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container-runtime.d.ts","sourceRoot":"","sources":["../../../../deploy/src/targets/container-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAA+B,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACpG,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAIzB,KAAK,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAMxC,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"container-runtime.d.ts","sourceRoot":"","sources":["../../../../deploy/src/targets/container-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAA+B,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACpG,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAIzB,KAAK,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAMxC,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;kBAmBvB,CAAC;AAEL,KAAK,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAc7D,KAAK,gBAAgB,GAAG;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAkHF,2DAA2D;AAC3D,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,YAAY,GAChB,YAAY,CAAC,eAAe,EAAE,gBAAgB,CAAC,CA8EjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../../deploy/src/targets/docker.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAIrF,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../../deploy/src/targets/docker.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAIrF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;EAAsC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../../deploy/src/targets/local.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAA+B,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACpG,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAIzB,QAAA,MAAM,iBAAiB;;;;;;;mBAYT,CAAC;AAEf,KAAK,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAErD,QAAA,MAAM,kBAAkB;;;;iBAItB,CAAC;AAEH,KAAK,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../../deploy/src/targets/local.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAA+B,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACpG,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAIzB,QAAA,MAAM,iBAAiB;;;;;;;mBAYT,CAAC;AAEf,KAAK,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAErD,QAAA,MAAM,kBAAkB;;;;iBAItB,CAAC;AAEH,KAAK,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAsGvD,wEAAwE;AACxE,eAAO,MAAM,iBAAiB,EAAE,YAAY,CAAC,WAAW,EAAE,YAAY,CAwCrE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"podman.d.ts","sourceRoot":"","sources":["../../../../deploy/src/targets/podman.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAIrF,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"podman.d.ts","sourceRoot":"","sources":["../../../../deploy/src/targets/podman.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAIrF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;EAAsC,CAAC"}
|
package/dist/discovery/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { AssetKindRegistry, BUILTIN_PROVIDERS, SEMVER_RE, SourceConfigSchema, VERSION, agentProvider, buildRequiresGraph, computeDeterministicHash, computeDeterministicHashDetailed, connectorProvider, contractProvider, createDefaultRegistry, detectCycles, discoverAssetsInTree, discoverAssetsInTreeEntries, discoverFromManifest, extractRequires, isExcludedDevPath, isManifestMode, loadMergedSourceConfig, loadSourceConfig, mcpServerProvider, mergeSourceConfigs, parseSourceConfig, personaProvider, presetProvider, promptProvider, rulesetProvider, skillProvider, validateSourceConfig } from '../chunk-
|
|
1
|
+
export { AssetKindRegistry, BUILTIN_PROVIDERS, SEMVER_RE, SourceConfigSchema, VERSION, agentProvider, buildRequiresGraph, computeDeterministicHash, computeDeterministicHashDetailed, connectorProvider, contractProvider, createDefaultRegistry, detectCycles, discoverAssetsInTree, discoverAssetsInTreeEntries, discoverFromManifest, extractRequires, isExcludedDevPath, isManifestMode, loadMergedSourceConfig, loadSourceConfig, mcpServerProvider, mergeSourceConfigs, parseSourceConfig, personaProvider, presetProvider, promptProvider, rulesetProvider, skillProvider, validateSourceConfig } from '../chunk-D7K72XEY.js';
|
|
2
2
|
import '../chunk-OKRUTSG7.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-4AZKT2BU.js';
|
|
4
|
+
import '../chunk-I3UEM3FX.js';
|
|
5
5
|
import '../chunk-NELZIQ2E.js';
|
|
6
6
|
import '../chunk-NSBPE2FW.js';
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -13,8 +13,8 @@ declare const PublisherOverrideSchema: z.ZodObject<{
|
|
|
13
13
|
}, z.core.$strip>;
|
|
14
14
|
declare const SyncConfigSchema: z.ZodObject<{
|
|
15
15
|
trigger: z.ZodDefault<z.ZodEnum<{
|
|
16
|
-
poll: "poll";
|
|
17
16
|
webhook: "webhook";
|
|
17
|
+
poll: "poll";
|
|
18
18
|
}>>;
|
|
19
19
|
poll_interval: z.ZodOptional<z.ZodNumber>;
|
|
20
20
|
}, z.core.$strip>;
|
|
@@ -64,8 +64,8 @@ export declare const SourceConfigSchema: z.ZodObject<{
|
|
|
64
64
|
dev_paths: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
65
65
|
sync: z.ZodOptional<z.ZodObject<{
|
|
66
66
|
trigger: z.ZodDefault<z.ZodEnum<{
|
|
67
|
-
poll: "poll";
|
|
68
67
|
webhook: "webhook";
|
|
68
|
+
poll: "poll";
|
|
69
69
|
}>>;
|
|
70
70
|
poll_interval: z.ZodOptional<z.ZodNumber>;
|
|
71
71
|
}, z.core.$strip>>;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { logErr, logOk, logInfo } from './chunk-4NDWKA64.js';
|
|
2
|
-
import { skaileHomeDir } from './chunk-
|
|
2
|
+
import { skaileHomeDir } from './chunk-JHF66MCK.js';
|
|
3
3
|
import './chunk-R7FOF242.js';
|
|
4
|
-
import './chunk-
|
|
4
|
+
import './chunk-D7K72XEY.js';
|
|
5
5
|
import './chunk-OKRUTSG7.js';
|
|
6
|
-
import { WorkspaceYamlEditor } from './chunk-
|
|
6
|
+
import { WorkspaceYamlEditor } from './chunk-UMOENHVH.js';
|
|
7
7
|
import './chunk-K5GBV4SA.js';
|
|
8
8
|
import './chunk-KLNL7QHN.js';
|
|
9
|
-
import './chunk-
|
|
10
|
-
import './chunk-
|
|
11
|
-
import './chunk-
|
|
12
|
-
import './chunk-
|
|
9
|
+
import './chunk-GFNW72LW.js';
|
|
10
|
+
import './chunk-J3VKAEQP.js';
|
|
11
|
+
import './chunk-4AZKT2BU.js';
|
|
12
|
+
import './chunk-I3UEM3FX.js';
|
|
13
13
|
import './chunk-JKNWJ64A.js';
|
|
14
14
|
import './chunk-O4JH3KUE.js';
|
|
15
15
|
import './chunk-24UIWON4.js';
|
|
@@ -19,8 +19,11 @@ import { spawnSync } from 'child_process';
|
|
|
19
19
|
import { existsSync } from 'fs';
|
|
20
20
|
import * as path from 'path';
|
|
21
21
|
|
|
22
|
-
function sourceClonePath(
|
|
23
|
-
return path.join(skaileHomeDir(), "sources",
|
|
22
|
+
function sourceClonePath(slug) {
|
|
23
|
+
return path.join(skaileHomeDir(), "sources", slug);
|
|
24
|
+
}
|
|
25
|
+
function deriveSlug(url) {
|
|
26
|
+
return url.replace(/\.git$/, "").split(/[/:]/).pop() ?? "source";
|
|
24
27
|
}
|
|
25
28
|
function ensureSourcesCloned(projectDir, opts = {}) {
|
|
26
29
|
const result = { cloned: [], cached: [], failed: [] };
|
|
@@ -37,22 +40,23 @@ function ensureSourcesCloned(projectDir, opts = {}) {
|
|
|
37
40
|
}
|
|
38
41
|
if (sources.length === 0) return result;
|
|
39
42
|
for (const entry of sources) {
|
|
40
|
-
const
|
|
43
|
+
const slug = deriveSlug(entry.url);
|
|
44
|
+
const dest = sourceClonePath(slug);
|
|
41
45
|
if (existsSync(dest)) {
|
|
42
|
-
result.cached.push(
|
|
46
|
+
result.cached.push(slug);
|
|
43
47
|
continue;
|
|
44
48
|
}
|
|
45
49
|
const args = ["clone", entry.url, dest];
|
|
46
|
-
if (entry.
|
|
50
|
+
if (entry.pin) args.splice(1, 0, "--branch", entry.pin);
|
|
47
51
|
const clone = spawnSync("git", args, { stdio: opts.quiet ? "pipe" : "inherit" });
|
|
48
52
|
if (clone.status !== 0) {
|
|
49
|
-
result.failed.push(
|
|
53
|
+
result.failed.push(slug);
|
|
50
54
|
if (opts.quiet) {
|
|
51
55
|
logErr(`git clone failed for ${entry.url}`);
|
|
52
56
|
}
|
|
53
57
|
continue;
|
|
54
58
|
}
|
|
55
|
-
result.cloned.push(
|
|
59
|
+
result.cloned.push(slug);
|
|
56
60
|
}
|
|
57
61
|
if (!opts.quiet) {
|
|
58
62
|
for (const n of result.cloned) logOk(`Cloned source "${n}".`);
|
|
@@ -64,5 +68,5 @@ function ensureSourcesCloned(projectDir, opts = {}) {
|
|
|
64
68
|
}
|
|
65
69
|
|
|
66
70
|
export { ensureSourcesCloned };
|
|
67
|
-
//# sourceMappingURL=ensure-sources-
|
|
68
|
-
//# sourceMappingURL=ensure-sources-
|
|
71
|
+
//# sourceMappingURL=ensure-sources-SL2S4UEX.js.map
|
|
72
|
+
//# sourceMappingURL=ensure-sources-SL2S4UEX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../cli/src/ensure-sources.ts"],"names":[],"mappings":"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","file":"ensure-sources-SL2S4UEX.js","sourcesContent":["/**\n * ensure-sources.ts — hydrate the `~/.skaile/sources/` clone cache from a\n * project's `skaile.yaml` `sources:` entries.\n *\n * Called by `skaile init` (idempotent: no-op when no sources declared) and\n * `skaile install` so checking out a project pulls its source clones onto\n * the local machine.\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport { type SourceEntry, WorkspaceYamlEditor } from \"@skaile/workspaces/core\";\nimport { skaileHomeDir } from \"@skaile/workspaces/library\";\nimport { logErr, logInfo, logOk } from \"./helpers.ts\";\n\nfunction sourceClonePath(slug: string): string {\n return path.join(skaileHomeDir(), \"sources\", slug);\n}\n\n/** Derive a cache slug from a source git URL. */\nfunction deriveSlug(url: string): string {\n return (\n url\n .replace(/\\.git$/, \"\")\n .split(/[/:]/)\n .pop() ?? \"source\"\n );\n}\n\nexport interface EnsureResult {\n cloned: string[];\n cached: string[];\n failed: string[];\n}\n\n/**\n * Walk `projectDir/skaile.yaml` `sources:` and clone any entries whose\n * clone directory does not yet exist under `~/.skaile/sources/`. Existing\n * clones are left untouched — this is hydration, not sync.\n *\n * Quiet by default: when `quiet: true` the helper only prints failures.\n * On full hydrate (`quiet: false`) it logs each cloned/cached entry.\n */\nexport function ensureSourcesCloned(\n projectDir: string,\n opts: { quiet?: boolean } = {},\n): EnsureResult {\n const result: EnsureResult = { cloned: [], cached: [], failed: [] };\n const yamlPath = path.join(projectDir, \"skaile.yaml\");\n if (!existsSync(yamlPath)) return result;\n\n let sources: SourceEntry[];\n try {\n sources = WorkspaceYamlEditor.load(yamlPath).getSources();\n } catch (err) {\n if (!opts.quiet) {\n logErr(`Could not read ${yamlPath}: ${err instanceof Error ? err.message : String(err)}`);\n }\n return result;\n }\n if (sources.length === 0) return result;\n\n for (const entry of sources) {\n const slug = deriveSlug(entry.url);\n const dest = sourceClonePath(slug);\n if (existsSync(dest)) {\n result.cached.push(slug);\n continue;\n }\n const args = [\"clone\", entry.url, dest];\n if (entry.pin) args.splice(1, 0, \"--branch\", entry.pin);\n const clone = spawnSync(\"git\", args, { stdio: opts.quiet ? \"pipe\" : \"inherit\" });\n if (clone.status !== 0) {\n result.failed.push(slug);\n if (opts.quiet) {\n logErr(`git clone failed for ${entry.url}`);\n }\n continue;\n }\n result.cloned.push(slug);\n }\n\n if (!opts.quiet) {\n for (const n of result.cloned) logOk(`Cloned source \"${n}\".`);\n if (result.cached.length > 0) {\n logInfo(`Reused cached clones: ${result.cached.join(\", \")}`);\n }\n }\n\n return result;\n}\n"]}
|
package/dist/library/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { CatalogCache, CatalogConfigSchema, CatalogHttpError, DuplicateLibraryNameError, DuplicateSubscriptionError, GitSyncDriver, InstanceHasConsumersError, InstanceNotFoundError, InterpolationError, KNOWN_ASSET_KINDS, KnowledgeManifestSchema, LIBRARY_BACKENDS, LIBRARY_OWNERSHIPS, LIBRARY_STRUCTURES, LOCAL_CATALOG_URL, LibraryConfigSchema, LibraryError, LibraryInstanceRefSchema, LibraryManager, LibrarySectionSchema, LibrarySyncError, LocalCatalogSource, LocalIndex, LocalSyncDriver, LockFileSchema, LockSubscriptionSchema, OfflineError, OperationNotPermittedError, PIN_POLICIES, PinPolicySchema, PresetAppliedSchema, PresetExpandedSchema, RemoteCatalogSource, RequiresEdgeSchema, RestCatalogSource, SidecarGit, SkaileConfigSchema, SourceNotFoundError, SubscriptionNotFoundError, TarballHashMismatchError, UserLibraryNotFoundError, WorkspaceConfigV2Schema, applyNonStructuralUpgrade, applyPreset, applyPresetFromData, classifyRef, createEmptyLockFile, deriveSlug, detectChanges, detectNestedPresetRefs, detectWorkspaceVersion, evaluateUpgrade, extractLibraryInstanceId, extractReferencedKeys, filterKey, getConfigDefaults, getDefaultValue, getSidecarRoot, getStoreManifestsDir, getStoreRoot, hasInterpolationTokens, installFromManifest, interpolate, isLocalCatalogUrl, isSecretPlaceholder, knowledgeKindProvider, listSidecarSlugsOnDisk, loadLockFile, loadWorkspaceV2, migrateSidecarsToStoreIfNeeded, migrateWorkspaceConfig, parsePreset, parsePresetYaml, parseWorkspaceV2, projectConfigPath, queryInstancePickerChoices, resolveAllItems, resolveConfig, resolveIndexPath, resolveItem, resolveLibraryDir, resolvePin, resolveSidecarPaths, saveConfig, saveLockFile, saveWorkspaceV2, sha256Hex, skaileHomeDir, storeSecrets, trpcGetUrl, userConfigPath, validateAllPlaceholders, validateKnowledge, validateNestingDepth, validatePlaceholder, writeManifestIfMissing } from '../chunk-
|
|
1
|
+
export { CatalogCache, CatalogConfigSchema, CatalogHttpError, DuplicateLibraryNameError, DuplicateSubscriptionError, GitSyncDriver, InstanceHasConsumersError, InstanceNotFoundError, InterpolationError, KNOWN_ASSET_KINDS, KnowledgeManifestSchema, LIBRARY_BACKENDS, LIBRARY_OWNERSHIPS, LIBRARY_STRUCTURES, LOCAL_CATALOG_URL, LibraryConfigSchema, LibraryError, LibraryInstanceRefSchema, LibraryManager, LibrarySectionSchema, LibrarySyncError, LocalCatalogSource, LocalIndex, LocalSyncDriver, LockFileSchema, LockSubscriptionSchema, OfflineError, OperationNotPermittedError, PIN_POLICIES, PinPolicySchema, PresetAppliedSchema, PresetExpandedSchema, RemoteCatalogSource, RequiresEdgeSchema, RestCatalogSource, SidecarGit, SkaileConfigSchema, SourceNotFoundError, SubscriptionNotFoundError, TarballHashMismatchError, UserLibraryNotFoundError, WorkspaceConfigV2Schema, applyNonStructuralUpgrade, applyPreset, applyPresetFromData, classifyRef, createEmptyLockFile, deriveSlug, detectChanges, detectNestedPresetRefs, detectWorkspaceVersion, evaluateUpgrade, extractLibraryInstanceId, extractReferencedKeys, filterKey, getConfigDefaults, getDefaultValue, getSidecarRoot, getStoreManifestsDir, getStoreRoot, hasInterpolationTokens, installFromManifest, interpolate, isLocalCatalogUrl, isSecretPlaceholder, knowledgeKindProvider, listSidecarSlugsOnDisk, loadLockFile, loadWorkspaceV2, migrateSidecarsToStoreIfNeeded, migrateWorkspaceConfig, parsePreset, parsePresetYaml, parseWorkspaceV2, projectConfigPath, queryInstancePickerChoices, resolveAllItems, resolveConfig, resolveIndexPath, resolveItem, resolveLibraryDir, resolvePin, resolveSidecarPaths, saveConfig, saveLockFile, saveWorkspaceV2, sha256Hex, skaileHomeDir, storeSecrets, trpcGetUrl, userConfigPath, validateAllPlaceholders, validateKnowledge, validateNestingDepth, validatePlaceholder, writeManifestIfMissing } from '../chunk-JHF66MCK.js';
|
|
2
2
|
export { GITHUB_PAT_ENV, fetchAssetFilesFromGitHub } from '../chunk-R7FOF242.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-D7K72XEY.js';
|
|
4
4
|
import '../chunk-OKRUTSG7.js';
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-4AZKT2BU.js';
|
|
6
|
+
import '../chunk-I3UEM3FX.js';
|
|
7
7
|
import '../chunk-NELZIQ2E.js';
|
|
8
8
|
import '../chunk-NSBPE2FW.js';
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -191,6 +191,23 @@ export declare class RemoteCatalogSource implements ICatalogSource {
|
|
|
191
191
|
* @throws {@link CatalogHttpError} on a non-2xx response or malformed envelope.
|
|
192
192
|
*/
|
|
193
193
|
getInstallManifest(ref: string): Promise<InstallManifest>;
|
|
194
|
+
/**
|
|
195
|
+
* Cheap probe used during cross-check when both a source-side and a store-side
|
|
196
|
+
* candidate at the same version need to be verified for sha256 equality.
|
|
197
|
+
* Returns only the composite sha256 — no source URL, no file list.
|
|
198
|
+
*
|
|
199
|
+
* Wire: `GET /trpc/catalog.getCanonicalDigest?input=<superjson({ ref })>`.
|
|
200
|
+
*
|
|
201
|
+
* Not cached: one-shot read during install resolution.
|
|
202
|
+
*
|
|
203
|
+
* @param ref - Canonical asset ref `<publisher>/<kind>:<name>@<version>`.
|
|
204
|
+
* @returns `{ sha256 }` on a 200, or `null` on a 404.
|
|
205
|
+
* @throws {@link CatalogHttpError} on a non-2xx/non-404 response or malformed payload.
|
|
206
|
+
* @docLink packages/library/api-reference#remote-catalog-source
|
|
207
|
+
*/
|
|
208
|
+
getCanonicalDigest(ref: string): Promise<{
|
|
209
|
+
sha256: string;
|
|
210
|
+
} | null>;
|
|
194
211
|
/**
|
|
195
212
|
* Wait for any in-flight stale-while-revalidate background fetches to settle.
|
|
196
213
|
* Test-only escape hatch.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-catalog-source.d.ts","sourceRoot":"","sources":["../../../../library/src/remote/remote-catalog-source.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"remote-catalog-source.d.ts","sourceRoot":"","sources":["../../../../library/src/remote/remote-catalog-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { openCatalogSource, openLibrary, openLibraryManager, resolveCatalogSource } from './chunk-3ECS5PFD.js';
|
|
2
|
+
import './chunk-4NDWKA64.js';
|
|
3
|
+
import './chunk-JHF66MCK.js';
|
|
4
|
+
import './chunk-R7FOF242.js';
|
|
5
|
+
import './chunk-D7K72XEY.js';
|
|
6
|
+
import './chunk-OKRUTSG7.js';
|
|
7
|
+
import './chunk-ICS76R4T.js';
|
|
8
|
+
import './chunk-4AZKT2BU.js';
|
|
9
|
+
import './chunk-I3UEM3FX.js';
|
|
10
|
+
import './chunk-NELZIQ2E.js';
|
|
11
|
+
import './chunk-NSBPE2FW.js';
|
|
12
|
+
//# sourceMappingURL=open-library-M4DB3D3J.js.map
|
|
13
|
+
//# sourceMappingURL=open-library-M4DB3D3J.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"open-library-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"open-library-M4DB3D3J.js"}
|