@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,17 +1,32 @@
|
|
|
1
|
-
import { removeAsset, deployAll, createScaffold } from './chunk-
|
|
2
|
-
import {
|
|
3
|
-
import { resolveRuntimeAssets } from './chunk-
|
|
4
|
-
import { resolveSkWorkspaceConfig, ensureRepo,
|
|
5
|
-
import { parseAssetRef } from './chunk-
|
|
1
|
+
import { removeAsset, deployAll, createScaffold } from './chunk-PTIHB2TV.js';
|
|
2
|
+
import { writeLock, buildLockFile, readLock, verifyLock, extractForPatch, generatePatch, savePatch, applyPatch } from './chunk-UMOENHVH.js';
|
|
3
|
+
import { resolveRuntimeAssets } from './chunk-GFNW72LW.js';
|
|
4
|
+
import { resolveSkWorkspaceConfig, getRepoCommit, ensureRepo, buildProvenanceIndex, resolveAll, scanRepo, checkRepoStatus, resolveAsset, readLinks, getGlobalCacheDir } from './chunk-J3VKAEQP.js';
|
|
5
|
+
import { parseAssetRef } from './chunk-I3UEM3FX.js';
|
|
6
6
|
import { deployedBase, isDeployed, deployedDir } from './chunk-JKNWJ64A.js';
|
|
7
7
|
import { appendHistory, getRecentHistory, clearHistory } from './chunk-KTBKW2FI.js';
|
|
8
8
|
import { commitChanges } from './chunk-UQ6LFBPZ.js';
|
|
9
9
|
import { spawnSync } from 'child_process';
|
|
10
|
-
import { existsSync,
|
|
10
|
+
import { existsSync, readdirSync, rmSync, lstatSync, unlinkSync, readFileSync, writeFileSync } from 'fs';
|
|
11
11
|
import { homedir } from 'os';
|
|
12
12
|
import { resolve, join, dirname } from 'path';
|
|
13
13
|
import { parse, stringify } from 'yaml';
|
|
14
14
|
|
|
15
|
+
function sourceSlug(url) {
|
|
16
|
+
return url.replace(/\.git$/, "").split(/[/:]/).pop() ?? "source";
|
|
17
|
+
}
|
|
18
|
+
function parseCanonicalLockKey(key) {
|
|
19
|
+
const slash = key.indexOf("/");
|
|
20
|
+
const colon = key.indexOf(":", slash + 1);
|
|
21
|
+
const at = key.lastIndexOf("@");
|
|
22
|
+
if (slash === -1 || colon === -1 || at === -1 || at < colon) return {};
|
|
23
|
+
return {
|
|
24
|
+
publisher: key.slice(0, slash),
|
|
25
|
+
kind: key.slice(slash + 1, colon),
|
|
26
|
+
name: key.slice(colon + 1, at),
|
|
27
|
+
version: key.slice(at + 1)
|
|
28
|
+
};
|
|
29
|
+
}
|
|
15
30
|
var AssetManager = class {
|
|
16
31
|
/** Resolved absolute path to the workspace root. */
|
|
17
32
|
projectDir;
|
|
@@ -37,44 +52,85 @@ var AssetManager = class {
|
|
|
37
52
|
return { driverTarget: this.driverTarget, global: this.global, cwd: this.projectDir };
|
|
38
53
|
}
|
|
39
54
|
loadConfig() {
|
|
40
|
-
const configPath = join(this.projectDir, "skaile.yaml");
|
|
41
|
-
let raw = {};
|
|
42
|
-
if (existsSync(configPath)) {
|
|
43
|
-
try {
|
|
44
|
-
raw = parse(readFileSync(configPath, "utf8")) ?? {};
|
|
45
|
-
} catch {
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
55
|
const config = resolveSkWorkspaceConfig(this.projectDir);
|
|
56
|
+
const sources = config.sources ?? [];
|
|
57
|
+
const stores = config.stores ?? [];
|
|
58
|
+
const dependencies = config.dependencies ?? [];
|
|
59
|
+
const overrides = config.overrides ?? [];
|
|
60
|
+
const patches = config.patches ?? {};
|
|
61
|
+
const skaileHome = process.env.SKAILE_HOME ?? join(homedir(), ".skaile");
|
|
62
|
+
const sourcesDir = join(skaileHome, "sources");
|
|
49
63
|
const repositories = {};
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
64
|
+
for (const s of sources) {
|
|
65
|
+
const slug = sourceSlug(s.url);
|
|
66
|
+
if (repositories[slug]) continue;
|
|
67
|
+
repositories[slug] = { path: join(sourcesDir, slug), url: s.url, branch: s.pin };
|
|
68
|
+
}
|
|
69
|
+
return { repositories, sources, stores, dependencies, overrides, patches, config };
|
|
70
|
+
}
|
|
71
|
+
/** Build provenance-index clones from the resolved source declarations. */
|
|
72
|
+
buildClones(repositories) {
|
|
73
|
+
const clones = [];
|
|
74
|
+
for (const [slug, decl] of Object.entries(repositories)) {
|
|
75
|
+
const localPath = this.resolveRepoDir(decl, slug);
|
|
76
|
+
if (!localPath || !existsSync(localPath)) continue;
|
|
77
|
+
const commit = getRepoCommit(localPath) ?? "0".repeat(40);
|
|
78
|
+
clones.push({
|
|
79
|
+
localPath,
|
|
80
|
+
sourceUrl: decl.url ?? localPath,
|
|
81
|
+
commit,
|
|
82
|
+
tag: decl.branch
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return clones;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Bridge a resolved {@link ProvenanceCandidate} to a {@link CatalogEntry} for
|
|
89
|
+
* the deploy pipeline. `source` is the absolute path to the asset's primary
|
|
90
|
+
* manifest (or its directory) inside the clone; `publisher` is set to the
|
|
91
|
+
* clone slug so `deployAll`'s repositories lookup resolves local-vs-remote.
|
|
92
|
+
*/
|
|
93
|
+
candidateToCatalogEntry(c, repositories) {
|
|
94
|
+
let slug;
|
|
95
|
+
let cloneDir;
|
|
96
|
+
for (const [s, decl] of Object.entries(repositories)) {
|
|
97
|
+
if (decl.url === c.sourceUrl) {
|
|
98
|
+
slug = s;
|
|
99
|
+
cloneDir = this.resolveRepoDir(decl, s) ?? void 0;
|
|
100
|
+
break;
|
|
61
101
|
}
|
|
62
102
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (!entry?.name || !entry.url) continue;
|
|
69
|
-
if (repositories[entry.name]) continue;
|
|
70
|
-
repositories[entry.name] = {
|
|
71
|
-
path: join(sourcesDir, entry.name),
|
|
72
|
-
url: entry.url,
|
|
73
|
-
branch: entry.branch
|
|
74
|
-
};
|
|
103
|
+
if (!cloneDir) {
|
|
104
|
+
const first = Object.entries(repositories)[0];
|
|
105
|
+
if (first) {
|
|
106
|
+
slug = first[0];
|
|
107
|
+
cloneDir = this.resolveRepoDir(first[1], first[0]) ?? void 0;
|
|
75
108
|
}
|
|
76
109
|
}
|
|
77
|
-
|
|
110
|
+
if (!cloneDir || !slug) return null;
|
|
111
|
+
const MD_BY_KIND = {
|
|
112
|
+
skill: "SKILL.md",
|
|
113
|
+
agent: "AGENT.md",
|
|
114
|
+
bundle: "BUNDLE.md",
|
|
115
|
+
"mcp-server": "MCP.md",
|
|
116
|
+
connector: "CONNECTOR.md",
|
|
117
|
+
prompt: "PROMPT.md",
|
|
118
|
+
contract: "CONTRACT.md"
|
|
119
|
+
};
|
|
120
|
+
const mdName = MD_BY_KIND[c.kind];
|
|
121
|
+
const mdRel = c.files.find((f) => mdName ? f.path.endsWith(mdName) : false)?.path;
|
|
122
|
+
const source = mdRel ? join(cloneDir, mdRel) : cloneDir;
|
|
123
|
+
return {
|
|
124
|
+
name: c.name,
|
|
125
|
+
kind: c.kind,
|
|
126
|
+
description: "",
|
|
127
|
+
source,
|
|
128
|
+
publisher: slug,
|
|
129
|
+
version: c.version,
|
|
130
|
+
requires: [],
|
|
131
|
+
dependencies: [],
|
|
132
|
+
metadata: c.metadata
|
|
133
|
+
};
|
|
78
134
|
}
|
|
79
135
|
// ── Install / resolve ──────────────────────────────────────────────────
|
|
80
136
|
/**
|
|
@@ -89,50 +145,46 @@ var AssetManager = class {
|
|
|
89
145
|
* @returns {@link InstallResult} summarising what was deployed, what was missing, and any collisions.
|
|
90
146
|
*/
|
|
91
147
|
async install(opts) {
|
|
92
|
-
const { repositories, dependencies, patches } = this.loadConfig();
|
|
148
|
+
const { repositories, stores, dependencies, overrides, patches } = this.loadConfig();
|
|
93
149
|
if (opts?.locked) {
|
|
94
150
|
return this.installLocked(repositories, patches);
|
|
95
151
|
}
|
|
96
152
|
for (const [name, decl] of Object.entries(repositories)) {
|
|
97
153
|
try {
|
|
98
154
|
ensureRepo(decl, name, this.reposDir, { projectDir: this.projectDir });
|
|
99
|
-
} catch
|
|
100
|
-
return {
|
|
101
|
-
deployed: [],
|
|
102
|
-
removed: [],
|
|
103
|
-
missing: [`repo:${name}`],
|
|
104
|
-
lockWritten: false,
|
|
105
|
-
collisions: []
|
|
106
|
-
};
|
|
155
|
+
} catch {
|
|
156
|
+
return { deployed: [], removed: [], missing: [`source:${name}`], lockWritten: false };
|
|
107
157
|
}
|
|
108
158
|
}
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
159
|
+
const provenanceIndex = buildProvenanceIndex(this.buildClones(repositories), {
|
|
160
|
+
projectDir: this.projectDir
|
|
161
|
+
});
|
|
162
|
+
const { resolved, missing, overridesApplied } = await resolveAll(dependencies, {
|
|
163
|
+
provenanceIndex,
|
|
164
|
+
overrides,
|
|
165
|
+
stores,
|
|
166
|
+
storeFetcher: this.buildStoreFetcher(stores),
|
|
167
|
+
projectDir: this.projectDir
|
|
168
|
+
});
|
|
169
|
+
const oldLock = this.tryReadLock();
|
|
170
|
+
const resolvedRefs = new Set(
|
|
171
|
+
resolved.map((c) => `${c.publisher}/${c.kind}:${c.name}@${c.version}`)
|
|
114
172
|
);
|
|
115
|
-
const oldLock = readLock(this.lockPath);
|
|
116
|
-
const resolvedRefs = new Set(resolved.map((e) => `${e.kind}:${e.name}`));
|
|
117
173
|
const removed = [];
|
|
118
174
|
if (oldLock) {
|
|
119
175
|
for (const ref of Object.keys(oldLock.assets)) {
|
|
120
176
|
if (!resolvedRefs.has(ref)) {
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
177
|
+
const { kind, name } = parseCanonicalLockKey(ref);
|
|
178
|
+
if (kind && name) {
|
|
179
|
+
removeAsset(kind, name, this.deployOpts);
|
|
180
|
+
removed.push(ref);
|
|
181
|
+
}
|
|
124
182
|
}
|
|
125
183
|
}
|
|
126
184
|
}
|
|
127
|
-
const
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
resolved,
|
|
131
|
-
resolvedBy,
|
|
132
|
-
this.reposDir,
|
|
133
|
-
this.projectDir
|
|
134
|
-
);
|
|
135
|
-
writeLock(this.lockPath, lockData);
|
|
185
|
+
const entries = resolved.map((c) => this.candidateToCatalogEntry(c, repositories)).filter((e) => e !== null);
|
|
186
|
+
const deployed = deployAll(entries, repositories, patches, this.deployOpts);
|
|
187
|
+
writeLock(this.lockPath, buildLockFile(resolved, overridesApplied));
|
|
136
188
|
for (const ref of deployed) {
|
|
137
189
|
appendHistory(this.projectDir, {
|
|
138
190
|
ref,
|
|
@@ -150,14 +202,41 @@ var AssetManager = class {
|
|
|
150
202
|
});
|
|
151
203
|
}
|
|
152
204
|
const { npmInstalled, npmFailed } = await this.installRuntimeAssetDeps();
|
|
205
|
+
return { deployed, removed, missing, lockWritten: true, npmInstalled, npmFailed };
|
|
206
|
+
}
|
|
207
|
+
/** Read the lock, returning null on a legacy v1 lock instead of throwing. */
|
|
208
|
+
tryReadLock() {
|
|
209
|
+
try {
|
|
210
|
+
return readLock(this.lockPath);
|
|
211
|
+
} catch {
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/** Build a store fetcher from the configured stores, or undefined when none. */
|
|
216
|
+
buildStoreFetcher(stores) {
|
|
217
|
+
if (stores.length === 0) return void 0;
|
|
153
218
|
return {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
219
|
+
getInstallManifest: async (storeUrl, ref) => {
|
|
220
|
+
const { RemoteCatalogSource, CatalogHttpError } = await import('./library/index.js');
|
|
221
|
+
const src = new RemoteCatalogSource({ baseUrl: storeUrl });
|
|
222
|
+
try {
|
|
223
|
+
const m = await src.getInstallManifest(ref);
|
|
224
|
+
return {
|
|
225
|
+
sourceUrl: m.source.url,
|
|
226
|
+
commit: m.source.commitSha,
|
|
227
|
+
sha256: m.sha256,
|
|
228
|
+
files: m.files
|
|
229
|
+
};
|
|
230
|
+
} catch (err) {
|
|
231
|
+
if (err instanceof CatalogHttpError && err.status === 404) return null;
|
|
232
|
+
throw err;
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
getCanonicalDigest: async (storeUrl, ref) => {
|
|
236
|
+
const { RemoteCatalogSource } = await import('./library/index.js');
|
|
237
|
+
const src = new RemoteCatalogSource({ baseUrl: storeUrl });
|
|
238
|
+
return src.getCanonicalDigest(ref);
|
|
239
|
+
}
|
|
161
240
|
};
|
|
162
241
|
}
|
|
163
242
|
/**
|
|
@@ -192,19 +271,22 @@ var AssetManager = class {
|
|
|
192
271
|
return { npmInstalled, npmFailed };
|
|
193
272
|
}
|
|
194
273
|
installLocked(repositories, patches) {
|
|
195
|
-
const lock =
|
|
274
|
+
const lock = this.tryReadLock();
|
|
196
275
|
if (!lock) {
|
|
197
276
|
throw new Error("No lock file found. Run `skaile install` first.");
|
|
198
277
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
};
|
|
205
|
-
ensureRepo(decl, name, this.reposDir, { projectDir: this.projectDir });
|
|
278
|
+
const declBySlug = new Map(Object.entries(repositories));
|
|
279
|
+
for (const src of lock.sources) {
|
|
280
|
+
const slug = sourceSlug(src.url);
|
|
281
|
+
const decl = declBySlug.get(slug) ?? { url: src.url };
|
|
282
|
+
ensureRepo(decl, slug, this.reposDir, { projectDir: this.projectDir, pin: src.commit });
|
|
206
283
|
}
|
|
207
|
-
const
|
|
284
|
+
const resolveCloneDir = (sourceUrl) => {
|
|
285
|
+
const slug = sourceSlug(sourceUrl);
|
|
286
|
+
const decl = declBySlug.get(slug) ?? { url: sourceUrl };
|
|
287
|
+
return this.resolveRepoDir(decl, slug);
|
|
288
|
+
};
|
|
289
|
+
const verification = verifyLock(lock, resolveCloneDir);
|
|
208
290
|
if (!verification.ok) {
|
|
209
291
|
const issues = [
|
|
210
292
|
...verification.drifted.map((r) => `drifted: ${r}`),
|
|
@@ -215,27 +297,25 @@ var AssetManager = class {
|
|
|
215
297
|
}
|
|
216
298
|
const resolved = [];
|
|
217
299
|
for (const [ref, entry] of Object.entries(lock.assets)) {
|
|
218
|
-
const
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
} else {
|
|
224
|
-
repoDir = join(this.reposDir, entry.repository);
|
|
225
|
-
}
|
|
300
|
+
const { publisher, kind, name } = parseCanonicalLockKey(ref);
|
|
301
|
+
if (!publisher || !kind || !name) continue;
|
|
302
|
+
const slug = sourceSlug(entry.source.url);
|
|
303
|
+
const cloneDir = resolveCloneDir(entry.source.url) ?? join(this.reposDir, slug);
|
|
304
|
+
const mdRel = entry.files.find((f) => /\.(md|yaml)$/i.test(f.path))?.path ?? entry.files[0]?.path ?? "";
|
|
226
305
|
resolved.push({
|
|
227
306
|
name,
|
|
228
307
|
kind,
|
|
229
308
|
description: "",
|
|
230
|
-
source: join(
|
|
231
|
-
|
|
232
|
-
version: entry.
|
|
309
|
+
source: mdRel ? join(cloneDir, mdRel) : cloneDir,
|
|
310
|
+
publisher: slug,
|
|
311
|
+
version: entry.source.commit,
|
|
233
312
|
requires: [],
|
|
234
313
|
dependencies: []
|
|
235
314
|
});
|
|
315
|
+
if (!repositories[slug]) repositories[slug] = { url: entry.source.url, path: cloneDir };
|
|
236
316
|
}
|
|
237
317
|
const deployed = deployAll(resolved, repositories, patches, this.deployOpts);
|
|
238
|
-
return { deployed, removed: [], missing: [], lockWritten: false
|
|
318
|
+
return { deployed, removed: [], missing: [], lockWritten: false };
|
|
239
319
|
}
|
|
240
320
|
/**
|
|
241
321
|
* Add a single asset (and its transitive dependencies) to the workspace.
|
|
@@ -247,21 +327,31 @@ var AssetManager = class {
|
|
|
247
327
|
* @returns Array of asset refs that were deployed in this call.
|
|
248
328
|
* @throws When the asset cannot be found in any configured repository.
|
|
249
329
|
*/
|
|
250
|
-
add(ref) {
|
|
251
|
-
const { repositories, patches } = this.loadConfig();
|
|
252
|
-
|
|
330
|
+
async add(ref) {
|
|
331
|
+
const { repositories, stores, overrides, patches } = this.loadConfig();
|
|
332
|
+
parseAssetRef(ref);
|
|
253
333
|
for (const [name, decl] of Object.entries(repositories)) {
|
|
254
334
|
try {
|
|
255
335
|
ensureRepo(decl, name, this.reposDir, { projectDir: this.projectDir });
|
|
256
336
|
} catch {
|
|
257
337
|
}
|
|
258
338
|
}
|
|
259
|
-
const
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
|
|
339
|
+
const provenanceIndex = buildProvenanceIndex(this.buildClones(repositories), {
|
|
340
|
+
projectDir: this.projectDir
|
|
341
|
+
});
|
|
342
|
+
const { resolved, missing } = await resolveAll([ref], {
|
|
343
|
+
provenanceIndex,
|
|
344
|
+
overrides,
|
|
345
|
+
stores,
|
|
346
|
+
storeFetcher: this.buildStoreFetcher(stores),
|
|
347
|
+
projectDir: this.projectDir
|
|
348
|
+
});
|
|
349
|
+
if (resolved.length === 0) {
|
|
350
|
+
throw new Error(`Asset not found: ${ref}${missing.length ? ` (missing: ${missing.join(", ")})` : ""}`);
|
|
351
|
+
}
|
|
352
|
+
const entries = resolved.map((c) => this.candidateToCatalogEntry(c, repositories)).filter((e) => e !== null);
|
|
353
|
+
const deployed = deployAll(entries, repositories, patches, this.deployOpts);
|
|
354
|
+
this.addDependencyToConfig(ref);
|
|
265
355
|
for (const d of deployed) {
|
|
266
356
|
appendHistory(this.projectDir, {
|
|
267
357
|
ref: d,
|
|
@@ -332,7 +422,7 @@ var AssetManager = class {
|
|
|
332
422
|
for (const [name, decl] of Object.entries(repositories)) {
|
|
333
423
|
const repoDir = this.resolveRepoDir(decl, name);
|
|
334
424
|
if (!repoDir) continue;
|
|
335
|
-
if (parsed.
|
|
425
|
+
if (parsed.publisher && parsed.publisher !== name) continue;
|
|
336
426
|
const entries = scanRepo(repoDir, name);
|
|
337
427
|
const match = entries.find((e) => e.kind === parsed.kind && e.name === parsed.name);
|
|
338
428
|
if (match) return match;
|
|
@@ -393,7 +483,7 @@ var AssetManager = class {
|
|
|
393
483
|
*/
|
|
394
484
|
overview() {
|
|
395
485
|
const { repositories } = this.loadConfig();
|
|
396
|
-
const lock =
|
|
486
|
+
const lock = this.tryReadLock();
|
|
397
487
|
const deployed = this.listDeployed();
|
|
398
488
|
const repoStatuses = /* @__PURE__ */ new Map();
|
|
399
489
|
for (const [name, decl] of Object.entries(repositories)) {
|
|
@@ -406,23 +496,34 @@ var AssetManager = class {
|
|
|
406
496
|
error: status.error
|
|
407
497
|
});
|
|
408
498
|
}
|
|
499
|
+
const lockByKindName = /* @__PURE__ */ new Map();
|
|
500
|
+
for (const [key] of Object.entries(lock?.assets ?? {})) {
|
|
501
|
+
const parsed = parseCanonicalLockKey(key);
|
|
502
|
+
if (parsed.kind && parsed.name && parsed.publisher && parsed.version) {
|
|
503
|
+
lockByKindName.set(`${parsed.kind}:${parsed.name}`, {
|
|
504
|
+
publisher: parsed.publisher,
|
|
505
|
+
version: parsed.version,
|
|
506
|
+
url: lock.assets[key].source.url
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
}
|
|
409
510
|
const entries = [];
|
|
410
511
|
for (const d of deployed) {
|
|
411
|
-
const
|
|
412
|
-
const
|
|
413
|
-
const domain = lockEntry?.domain ?? "unknown";
|
|
414
|
-
const repository = lockEntry?.repository ?? "";
|
|
512
|
+
const lockEntry = lockByKindName.get(`${d.kind}:${d.name}`);
|
|
513
|
+
const publisher = lockEntry?.publisher ?? "";
|
|
415
514
|
const version = lockEntry?.version ?? "";
|
|
515
|
+
const slug = lockEntry ? sourceSlug(lockEntry.url) : "";
|
|
416
516
|
let syncStatus = "unknown";
|
|
417
|
-
if (
|
|
418
|
-
const repoStatus = repoStatuses.get(
|
|
517
|
+
if (slug) {
|
|
518
|
+
const repoStatus = repoStatuses.get(slug);
|
|
419
519
|
if (!repoStatus) syncStatus = "unknown";
|
|
420
520
|
else if (repoStatus.kind === "local") syncStatus = "local";
|
|
421
521
|
else if (repoStatus.error) syncStatus = "error";
|
|
422
522
|
else if (repoStatus.upToDate) syncStatus = "synced";
|
|
423
523
|
else syncStatus = "outdated";
|
|
424
524
|
}
|
|
425
|
-
|
|
525
|
+
const domain = publisher || "unknown";
|
|
526
|
+
entries.push({ kind: d.kind, name: d.name, domain, publisher, version, syncStatus });
|
|
426
527
|
}
|
|
427
528
|
const byDomain = /* @__PURE__ */ new Map();
|
|
428
529
|
for (const e of entries) {
|
|
@@ -452,22 +553,11 @@ var AssetManager = class {
|
|
|
452
553
|
* Returns a single node with `ref === "(no lock file)"` when no lock exists.
|
|
453
554
|
*/
|
|
454
555
|
tree() {
|
|
455
|
-
const lock =
|
|
556
|
+
const lock = this.tryReadLock();
|
|
456
557
|
if (!lock) return { ref: "(no lock file)", children: [] };
|
|
457
|
-
const byParent = /* @__PURE__ */ new Map();
|
|
458
|
-
for (const [ref, entry] of Object.entries(lock.assets)) {
|
|
459
|
-
const parent = entry.resolved_by;
|
|
460
|
-
if (!byParent.has(parent)) byParent.set(parent, []);
|
|
461
|
-
byParent.get(parent).push(ref);
|
|
462
|
-
}
|
|
463
|
-
function buildNode(ref) {
|
|
464
|
-
const children = (byParent.get(ref) ?? []).map(buildNode);
|
|
465
|
-
return { ref, children };
|
|
466
|
-
}
|
|
467
|
-
const directChildren = byParent.get("direct") ?? [];
|
|
468
558
|
return {
|
|
469
559
|
ref: "project",
|
|
470
|
-
children:
|
|
560
|
+
children: Object.keys(lock.assets).map((ref) => ({ ref, children: [] }))
|
|
471
561
|
};
|
|
472
562
|
}
|
|
473
563
|
/**
|
|
@@ -478,22 +568,10 @@ var AssetManager = class {
|
|
|
478
568
|
* the asset is not in the lock file.
|
|
479
569
|
*/
|
|
480
570
|
why(ref) {
|
|
481
|
-
const lock =
|
|
571
|
+
const lock = this.tryReadLock();
|
|
482
572
|
if (!lock) return [];
|
|
483
573
|
if (!lock.assets[ref]) return [];
|
|
484
|
-
|
|
485
|
-
let current = ref;
|
|
486
|
-
const seen = /* @__PURE__ */ new Set();
|
|
487
|
-
while (current && current !== "direct") {
|
|
488
|
-
if (seen.has(current)) break;
|
|
489
|
-
seen.add(current);
|
|
490
|
-
chain.push(current);
|
|
491
|
-
const entry = lock.assets[current];
|
|
492
|
-
if (!entry) break;
|
|
493
|
-
current = entry.resolved_by;
|
|
494
|
-
}
|
|
495
|
-
if (current === "direct") chain.push("direct (skaile.yaml)");
|
|
496
|
-
return chain;
|
|
574
|
+
return [ref, "direct (skaile.yaml)"];
|
|
497
575
|
}
|
|
498
576
|
/**
|
|
499
577
|
* List installed assets whose source repository is behind the remote.
|
|
@@ -505,27 +583,26 @@ var AssetManager = class {
|
|
|
505
583
|
*/
|
|
506
584
|
outdated() {
|
|
507
585
|
const { repositories } = this.loadConfig();
|
|
508
|
-
const lock =
|
|
586
|
+
const lock = this.tryReadLock();
|
|
509
587
|
if (!lock) return [];
|
|
510
588
|
const result = [];
|
|
511
|
-
for (const
|
|
512
|
-
|
|
513
|
-
const decl = repositories[
|
|
514
|
-
if (!decl) continue;
|
|
515
|
-
const status = checkRepoStatus(decl,
|
|
516
|
-
if (status.behind
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
}
|
|
589
|
+
for (const src of lock.sources) {
|
|
590
|
+
const slug = sourceSlug(src.url);
|
|
591
|
+
const decl = repositories[slug];
|
|
592
|
+
if (!decl || decl.path) continue;
|
|
593
|
+
const status = checkRepoStatus(decl, slug, this.reposDir);
|
|
594
|
+
if (status.behind <= 0) continue;
|
|
595
|
+
for (const [ref, entry] of Object.entries(lock.assets)) {
|
|
596
|
+
if (entry.source.url !== src.url) continue;
|
|
597
|
+
const { publisher, kind, name, version } = parseCanonicalLockKey(ref);
|
|
598
|
+
if (!kind || !name) continue;
|
|
599
|
+
result.push({
|
|
600
|
+
kind,
|
|
601
|
+
name,
|
|
602
|
+
publisher: publisher ?? slug,
|
|
603
|
+
currentVersion: version ?? "",
|
|
604
|
+
behind: status.behind
|
|
605
|
+
});
|
|
529
606
|
}
|
|
530
607
|
}
|
|
531
608
|
return result;
|
|
@@ -561,22 +638,25 @@ var AssetManager = class {
|
|
|
561
638
|
*
|
|
562
639
|
* @returns The written {@link LockFile} data.
|
|
563
640
|
*/
|
|
564
|
-
lock() {
|
|
565
|
-
const { repositories, dependencies } = this.loadConfig();
|
|
641
|
+
async lock() {
|
|
642
|
+
const { repositories, stores, dependencies, overrides } = this.loadConfig();
|
|
566
643
|
for (const [name, decl] of Object.entries(repositories)) {
|
|
567
644
|
try {
|
|
568
645
|
ensureRepo(decl, name, this.reposDir, { projectDir: this.projectDir });
|
|
569
646
|
} catch {
|
|
570
647
|
}
|
|
571
648
|
}
|
|
572
|
-
const
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
649
|
+
const provenanceIndex = buildProvenanceIndex(this.buildClones(repositories), {
|
|
650
|
+
projectDir: this.projectDir
|
|
651
|
+
});
|
|
652
|
+
const { resolved, overridesApplied } = await resolveAll(dependencies, {
|
|
653
|
+
provenanceIndex,
|
|
654
|
+
overrides,
|
|
655
|
+
stores,
|
|
656
|
+
storeFetcher: this.buildStoreFetcher(stores),
|
|
657
|
+
projectDir: this.projectDir
|
|
658
|
+
});
|
|
659
|
+
const lockData = buildLockFile(resolved, overridesApplied);
|
|
580
660
|
writeLock(this.lockPath, lockData);
|
|
581
661
|
return lockData;
|
|
582
662
|
}
|
|
@@ -633,11 +713,11 @@ var AssetManager = class {
|
|
|
633
713
|
patchSubmit(ref) {
|
|
634
714
|
const parsed = parseAssetRef(ref);
|
|
635
715
|
const entry = this.info(ref);
|
|
636
|
-
if (!entry?.
|
|
716
|
+
if (!entry?.publisher) throw new Error(`Asset not found or no publisher: ${ref}`);
|
|
637
717
|
const { repositories } = this.loadConfig();
|
|
638
|
-
const decl = repositories[entry.
|
|
639
|
-
if (!decl?.url) throw new Error("Can only submit patches for remote
|
|
640
|
-
const repoDir = join(this.reposDir, entry.
|
|
718
|
+
const decl = repositories[entry.publisher];
|
|
719
|
+
if (!decl?.url) throw new Error("Can only submit patches for remote sources.");
|
|
720
|
+
const repoDir = join(this.reposDir, entry.publisher);
|
|
641
721
|
const branchName = `patch/${parsed.kind}-${parsed.name}`;
|
|
642
722
|
const patchFile = join(this.patchDir, `${parsed.kind}-${parsed.name}.patch`);
|
|
643
723
|
if (!existsSync(patchFile)) throw new Error("No patch file. Run `skaile patch-commit` first.");
|
|
@@ -749,12 +829,13 @@ var AssetManager = class {
|
|
|
749
829
|
* and `unmanaged` (deployed assets not in the lock file).
|
|
750
830
|
*/
|
|
751
831
|
clean(opts) {
|
|
752
|
-
const lock =
|
|
832
|
+
const lock = this.tryReadLock();
|
|
753
833
|
const removed = [];
|
|
754
834
|
const skipped = [];
|
|
755
835
|
if (lock) {
|
|
756
836
|
for (const ref of Object.keys(lock.assets)) {
|
|
757
|
-
const
|
|
837
|
+
const { kind, name } = parseCanonicalLockKey(ref);
|
|
838
|
+
if (!kind || !name) continue;
|
|
758
839
|
const dest = deployedDir(
|
|
759
840
|
kind,
|
|
760
841
|
name,
|
|
@@ -772,7 +853,12 @@ var AssetManager = class {
|
|
|
772
853
|
}
|
|
773
854
|
}
|
|
774
855
|
}
|
|
775
|
-
const lockRefs = lock ? new Set(
|
|
856
|
+
const lockRefs = lock ? new Set(
|
|
857
|
+
Object.keys(lock.assets).map((r) => {
|
|
858
|
+
const p = parseCanonicalLockKey(r);
|
|
859
|
+
return p.kind && p.name ? `${p.kind}:${p.name}` : r;
|
|
860
|
+
})
|
|
861
|
+
) : /* @__PURE__ */ new Set();
|
|
776
862
|
const unmanaged = [];
|
|
777
863
|
const allDeployed = this.listDeployed();
|
|
778
864
|
for (const d of allDeployed) {
|
|
@@ -846,5 +932,5 @@ var AssetManager = class {
|
|
|
846
932
|
};
|
|
847
933
|
|
|
848
934
|
export { AssetManager };
|
|
849
|
-
//# sourceMappingURL=chunk-
|
|
850
|
-
//# sourceMappingURL=chunk-
|
|
935
|
+
//# sourceMappingURL=chunk-VCYXVP2S.js.map
|
|
936
|
+
//# sourceMappingURL=chunk-VCYXVP2S.js.map
|