@skaile/workspaces 0.22.0-beta.0 → 0.22.0-beta.2
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 +221 -0
- package/dist/{asset-feeds-PJDJ3QYI.js → asset-feeds-2M6UKEJ7.js} +13 -14
- package/dist/asset-feeds-2M6UKEJ7.js.map +1 -0
- 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/driver.d.ts.map +1 -1
- 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-32NA4TVC.js +30 -0
- package/dist/chunk-32NA4TVC.js.map +1 -0
- package/dist/{chunk-CSDQBWE6.js → chunk-3KLWGHDE.js} +5 -5
- package/dist/{chunk-CSDQBWE6.js.map → chunk-3KLWGHDE.js.map} +1 -1
- package/dist/{chunk-UZRY5UI2.js → chunk-6E6PKKAD.js} +68 -3
- package/dist/chunk-6E6PKKAD.js.map +1 -0
- package/dist/{chunk-G6GKWGOW.js → chunk-6SA2SIOU.js} +26 -10
- package/dist/chunk-6SA2SIOU.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-TTY56FQQ.js → chunk-74GTZ4TJ.js} +17 -5
- package/dist/chunk-74GTZ4TJ.js.map +1 -0
- package/dist/chunk-7QBNJTTQ.js +3 -0
- package/dist/{chunk-W2O5LWYU.js.map → chunk-7QBNJTTQ.js.map} +1 -1
- package/dist/{chunk-SL6JVGRD.js → chunk-CEUHU3C4.js} +3 -3
- package/dist/{chunk-SL6JVGRD.js.map → chunk-CEUHU3C4.js.map} +1 -1
- package/dist/{chunk-J2FCO6TM.js → chunk-FIHVQFXB.js} +2 -2
- package/dist/{chunk-J2FCO6TM.js.map → chunk-FIHVQFXB.js.map} +1 -1
- package/dist/{chunk-F3MGZ5E6.js → chunk-FVZLCBSX.js} +3 -3
- package/dist/{chunk-F3MGZ5E6.js.map → chunk-FVZLCBSX.js.map} +1 -1
- package/dist/{chunk-7PTP3SQJ.js → chunk-GTS2FODO.js} +32 -7
- package/dist/chunk-GTS2FODO.js.map +1 -0
- package/dist/{chunk-KA46DUM4.js → chunk-I5SGBFMM.js} +51 -3
- package/dist/chunk-I5SGBFMM.js.map +1 -0
- package/dist/{chunk-MO4JPTRD.js → chunk-LDLZFYLR.js} +5 -5
- package/dist/{chunk-MO4JPTRD.js.map → chunk-LDLZFYLR.js.map} +1 -1
- package/dist/{chunk-TKOLD2O7.js → chunk-LDYPQVRU.js} +516 -145
- package/dist/chunk-LDYPQVRU.js.map +1 -0
- package/dist/{chunk-GKM6MDUC.js → chunk-M5JDVO6D.js} +3 -3
- package/dist/{chunk-GKM6MDUC.js.map → chunk-M5JDVO6D.js.map} +1 -1
- 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-NGC7ZQI4.js → chunk-NICAMYPV.js} +39 -45
- package/dist/chunk-NICAMYPV.js.map +1 -0
- package/dist/{chunk-WIR34WMU.js → chunk-NQL3T75I.js} +24 -59
- package/dist/chunk-NQL3T75I.js.map +1 -0
- package/dist/{chunk-RENHNO4J.js → chunk-P4FYHEHW.js} +206 -137
- package/dist/chunk-P4FYHEHW.js.map +1 -0
- package/dist/{chunk-2DNSSQ22.js → chunk-TWQPDBHB.js} +270 -173
- package/dist/chunk-TWQPDBHB.js.map +1 -0
- package/dist/{chunk-UZVHJ7LX.js → chunk-UBLTUFFI.js} +4 -4
- package/dist/{chunk-UZVHJ7LX.js.map → chunk-UBLTUFFI.js.map} +1 -1
- package/dist/{chunk-X5Y4EGZB.js → chunk-VUCPJBAG.js} +43 -10
- package/dist/chunk-VUCPJBAG.js.map +1 -0
- package/dist/{chunk-PBWMV5GM.js → chunk-WQ7DE5UC.js} +18 -4
- package/dist/chunk-WQ7DE5UC.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +258 -262
- 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 +22 -31
- package/dist/cli/src/commands/manage.d.ts.map +1 -1
- package/dist/cli/src/commands/npx.d.ts +5 -3
- package/dist/cli/src/commands/npx.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts.map +1 -1
- package/dist/cli/src/commands/source.d.ts +7 -0
- 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/manifest.d.ts.map +1 -1
- package/dist/core/src/models.d.ts +61 -49
- package/dist/core/src/models.d.ts.map +1 -1
- package/dist/core/src/repo-manager.d.ts +79 -36
- 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 +167 -52
- package/dist/deploy/index.js.map +1 -1
- package/dist/deploy/src/index.d.ts +4 -3
- package/dist/deploy/src/index.d.ts.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/nix.d.ts +36 -0
- package/dist/deploy/src/targets/nix.d.ts.map +1 -0
- package/dist/deploy/src/targets/podman.d.ts +1 -0
- package/dist/deploy/src/targets/podman.d.ts.map +1 -1
- package/dist/deploy/src/targets/process-handle.d.ts +34 -0
- package/dist/deploy/src/targets/process-handle.d.ts.map +1 -0
- package/dist/discovery/index.d.ts +2 -0
- package/dist/discovery/index.js +3 -3
- package/dist/discovery/src/source-config.d.ts +2 -2
- package/dist/{ensure-sources-COGVKY44.js → ensure-sources-ALTI5PXR.js} +20 -16
- package/dist/ensure-sources-ALTI5PXR.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-EEGG6RDN.js +13 -0
- package/dist/{open-library-DWAQFUSQ.js.map → open-library-EEGG6RDN.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/context.d.ts +30 -1
- package/dist/plugin-registry/src/context.d.ts.map +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-G277ZX3B.js} +8 -8
- package/dist/{plugin-store-6OENKNFW.js.map → plugin-store-G277ZX3B.js.map} +1 -1
- package/dist/plugins/index.d.ts +2 -0
- package/dist/plugins/src/catalog-source.d.ts +5 -0
- package/dist/plugins/src/catalog-source.d.ts.map +1 -1
- package/dist/resolver/index.d.ts +2 -0
- package/dist/runner/index.d.ts +2 -0
- package/dist/runner/index.js +17 -16
- 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 +7 -0
- 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 +53 -19
- 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 +17 -16
- 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/client.js +2 -1
- package/dist/sdk/transport/ws/server.d.ts +2 -0
- package/dist/sdk/transport/ws/server.js +2 -1
- package/dist/sdk/transport/ws.d.ts +2 -0
- package/dist/sdk/transport/ws.js +4 -3
- package/dist/sdk/transport.d.ts +2 -0
- package/dist/sdk/transport.js +4 -3
- 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-REX4I5NE.js} +10 -10
- package/dist/{setup-ACMP3QZC.js.map → setup-REX4I5NE.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-IX3Y67NK.js +14 -0
- package/dist/{store-client-ZSLNOOQG.js.map → store-client-IX3Y67NK.js.map} +1 -1
- package/dist/telemetry/index.d.ts +2 -0
- package/dist/transport/index.d.ts +2 -0
- package/dist/transport/index.js +4 -3
- package/dist/transport/src/ws/auth.d.ts +34 -0
- package/dist/transport/src/ws/auth.d.ts.map +1 -0
- package/dist/transport/src/ws/client.d.ts +4 -0
- package/dist/transport/src/ws/client.d.ts.map +1 -1
- package/dist/transport/src/ws/index.d.ts +3 -2
- package/dist/transport/src/ws/index.d.ts.map +1 -1
- package/dist/transport/src/ws/server.d.ts +5 -0
- package/dist/transport/src/ws/server.d.ts.map +1 -1
- package/dist/transport/ws/client.d.ts +2 -0
- package/dist/transport/ws/client.js +2 -1
- package/dist/transport/ws/server.d.ts +2 -0
- package/dist/transport/ws/server.js +2 -1
- package/dist/transport/ws.d.ts +2 -0
- package/dist/transport/ws.js +4 -3
- package/dist/tui/index.d.ts +2 -0
- package/dist/tui/index.js +17 -16
- package/dist/tui/index.js.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/manifests.d.ts +2 -0
- package/dist/workspace-plugin/adapters/mcp.d.ts +2 -0
- package/dist/workspace-plugin/adapters/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/asset-feeds-PJDJ3QYI.js.map +0 -1
- package/dist/chunk-2DNSSQ22.js.map +0 -1
- package/dist/chunk-7PTP3SQJ.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-PBWMV5GM.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-W2O5LWYU.js +0 -3
- 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-LDLZFYLR.js';
|
|
2
|
+
import { writeLock, buildLockFile, readLock, verifyLock, extractForPatch, generatePatch, savePatch, applyPatch } from './chunk-P4FYHEHW.js';
|
|
3
|
+
import { resolveRuntimeAssets } from './chunk-74GTZ4TJ.js';
|
|
4
|
+
import { resolveSkWorkspaceConfig, getRepoCommit, ensureRepo, buildProvenanceIndex, resolveAll, scanRepo, checkRepoStatus, resolveAsset, readLinks, getGlobalCacheDir } from './chunk-LDYPQVRU.js';
|
|
5
|
+
import { parseAssetRef } from './chunk-VUCPJBAG.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 };
|
|
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,55 @@ 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, sources, stores, dependencies, overrides, patches } = this.loadConfig();
|
|
93
149
|
if (opts?.locked) {
|
|
94
150
|
return this.installLocked(repositories, patches);
|
|
95
151
|
}
|
|
152
|
+
const pinBySlug = new Map(sources.map((s) => [sourceSlug(s.url), s.pin]));
|
|
96
153
|
for (const [name, decl] of Object.entries(repositories)) {
|
|
97
154
|
try {
|
|
98
|
-
ensureRepo(decl, name, this.reposDir, {
|
|
155
|
+
ensureRepo(decl, name, this.reposDir, {
|
|
156
|
+
projectDir: this.projectDir,
|
|
157
|
+
pin: pinBySlug.get(name)
|
|
158
|
+
});
|
|
99
159
|
} catch (err) {
|
|
100
160
|
return {
|
|
101
161
|
deployed: [],
|
|
102
162
|
removed: [],
|
|
103
|
-
missing: [`
|
|
104
|
-
lockWritten: false
|
|
105
|
-
collisions: []
|
|
163
|
+
missing: [`source:${name} (${err instanceof Error ? err.message : String(err)})`],
|
|
164
|
+
lockWritten: false
|
|
106
165
|
};
|
|
107
166
|
}
|
|
108
167
|
}
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
168
|
+
const provenanceIndex = buildProvenanceIndex(this.buildClones(repositories), {
|
|
169
|
+
projectDir: this.projectDir
|
|
170
|
+
});
|
|
171
|
+
const { resolved, missing, overridesApplied } = await resolveAll(dependencies, {
|
|
172
|
+
provenanceIndex,
|
|
173
|
+
overrides,
|
|
174
|
+
stores,
|
|
175
|
+
storeFetcher: this.buildStoreFetcher(stores),
|
|
176
|
+
projectDir: this.projectDir
|
|
177
|
+
});
|
|
178
|
+
const oldLock = this.tryReadLock();
|
|
179
|
+
const resolvedRefs = new Set(
|
|
180
|
+
resolved.map((c) => `${c.publisher}/${c.kind}:${c.name}@${c.version}`)
|
|
114
181
|
);
|
|
115
|
-
const oldLock = readLock(this.lockPath);
|
|
116
|
-
const resolvedRefs = new Set(resolved.map((e) => `${e.kind}:${e.name}`));
|
|
117
182
|
const removed = [];
|
|
118
183
|
if (oldLock) {
|
|
119
184
|
for (const ref of Object.keys(oldLock.assets)) {
|
|
120
185
|
if (!resolvedRefs.has(ref)) {
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
186
|
+
const { kind, name } = parseCanonicalLockKey(ref);
|
|
187
|
+
if (kind && name) {
|
|
188
|
+
removeAsset(kind, name, this.deployOpts);
|
|
189
|
+
removed.push(ref);
|
|
190
|
+
}
|
|
124
191
|
}
|
|
125
192
|
}
|
|
126
193
|
}
|
|
127
|
-
const
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
resolved,
|
|
131
|
-
resolvedBy,
|
|
132
|
-
this.reposDir,
|
|
133
|
-
this.projectDir
|
|
134
|
-
);
|
|
135
|
-
writeLock(this.lockPath, lockData);
|
|
194
|
+
const entries = resolved.map((c) => this.candidateToCatalogEntry(c, repositories)).filter((e) => e !== null);
|
|
195
|
+
const deployed = deployAll(entries, repositories, patches, this.deployOpts);
|
|
196
|
+
writeLock(this.lockPath, buildLockFile(resolved, overridesApplied));
|
|
136
197
|
for (const ref of deployed) {
|
|
137
198
|
appendHistory(this.projectDir, {
|
|
138
199
|
ref,
|
|
@@ -150,14 +211,41 @@ var AssetManager = class {
|
|
|
150
211
|
});
|
|
151
212
|
}
|
|
152
213
|
const { npmInstalled, npmFailed } = await this.installRuntimeAssetDeps();
|
|
214
|
+
return { deployed, removed, missing, lockWritten: true, npmInstalled, npmFailed };
|
|
215
|
+
}
|
|
216
|
+
/** Read the lock, returning null on a legacy v1 lock instead of throwing. */
|
|
217
|
+
tryReadLock() {
|
|
218
|
+
try {
|
|
219
|
+
return readLock(this.lockPath);
|
|
220
|
+
} catch {
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/** Build a store fetcher from the configured stores, or undefined when none. */
|
|
225
|
+
buildStoreFetcher(stores) {
|
|
226
|
+
if (stores.length === 0) return void 0;
|
|
153
227
|
return {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
228
|
+
getInstallManifest: async (storeUrl, ref) => {
|
|
229
|
+
const { RemoteCatalogSource, CatalogHttpError } = await import('./library/index.js');
|
|
230
|
+
const src = new RemoteCatalogSource({ baseUrl: storeUrl });
|
|
231
|
+
try {
|
|
232
|
+
const m = await src.getInstallManifest(ref);
|
|
233
|
+
return {
|
|
234
|
+
sourceUrl: m.source.url,
|
|
235
|
+
commit: m.source.commitSha,
|
|
236
|
+
sha256: m.sha256,
|
|
237
|
+
files: m.files
|
|
238
|
+
};
|
|
239
|
+
} catch (err) {
|
|
240
|
+
if (err instanceof CatalogHttpError && err.status === 404) return null;
|
|
241
|
+
throw err;
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
getCanonicalDigest: async (storeUrl, ref) => {
|
|
245
|
+
const { RemoteCatalogSource } = await import('./library/index.js');
|
|
246
|
+
const src = new RemoteCatalogSource({ baseUrl: storeUrl });
|
|
247
|
+
return src.getCanonicalDigest(ref);
|
|
248
|
+
}
|
|
161
249
|
};
|
|
162
250
|
}
|
|
163
251
|
/**
|
|
@@ -192,19 +280,22 @@ var AssetManager = class {
|
|
|
192
280
|
return { npmInstalled, npmFailed };
|
|
193
281
|
}
|
|
194
282
|
installLocked(repositories, patches) {
|
|
195
|
-
const lock =
|
|
283
|
+
const lock = this.tryReadLock();
|
|
196
284
|
if (!lock) {
|
|
197
285
|
throw new Error("No lock file found. Run `skaile install` first.");
|
|
198
286
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
};
|
|
205
|
-
ensureRepo(decl, name, this.reposDir, { projectDir: this.projectDir });
|
|
287
|
+
const declBySlug = new Map(Object.entries(repositories));
|
|
288
|
+
for (const src of lock.sources) {
|
|
289
|
+
const slug = sourceSlug(src.url);
|
|
290
|
+
const decl = declBySlug.get(slug) ?? { url: src.url };
|
|
291
|
+
ensureRepo(decl, slug, this.reposDir, { projectDir: this.projectDir, pin: src.commit });
|
|
206
292
|
}
|
|
207
|
-
const
|
|
293
|
+
const resolveCloneDir = (sourceUrl) => {
|
|
294
|
+
const slug = sourceSlug(sourceUrl);
|
|
295
|
+
const decl = declBySlug.get(slug) ?? { url: sourceUrl };
|
|
296
|
+
return this.resolveRepoDir(decl, slug);
|
|
297
|
+
};
|
|
298
|
+
const verification = verifyLock(lock, resolveCloneDir);
|
|
208
299
|
if (!verification.ok) {
|
|
209
300
|
const issues = [
|
|
210
301
|
...verification.drifted.map((r) => `drifted: ${r}`),
|
|
@@ -215,27 +306,25 @@ var AssetManager = class {
|
|
|
215
306
|
}
|
|
216
307
|
const resolved = [];
|
|
217
308
|
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
|
-
}
|
|
309
|
+
const { publisher, kind, name } = parseCanonicalLockKey(ref);
|
|
310
|
+
if (!publisher || !kind || !name) continue;
|
|
311
|
+
const slug = sourceSlug(entry.source.url);
|
|
312
|
+
const cloneDir = resolveCloneDir(entry.source.url) ?? join(this.reposDir, slug);
|
|
313
|
+
const mdRel = entry.files.find((f) => /\.(md|yaml)$/i.test(f.path))?.path ?? entry.files[0]?.path ?? "";
|
|
226
314
|
resolved.push({
|
|
227
315
|
name,
|
|
228
316
|
kind,
|
|
229
317
|
description: "",
|
|
230
|
-
source: join(
|
|
231
|
-
|
|
232
|
-
version: entry.
|
|
318
|
+
source: mdRel ? join(cloneDir, mdRel) : cloneDir,
|
|
319
|
+
publisher: slug,
|
|
320
|
+
version: entry.source.commit,
|
|
233
321
|
requires: [],
|
|
234
322
|
dependencies: []
|
|
235
323
|
});
|
|
324
|
+
if (!repositories[slug]) repositories[slug] = { url: entry.source.url, path: cloneDir };
|
|
236
325
|
}
|
|
237
326
|
const deployed = deployAll(resolved, repositories, patches, this.deployOpts);
|
|
238
|
-
return { deployed, removed: [], missing: [], lockWritten: false
|
|
327
|
+
return { deployed, removed: [], missing: [], lockWritten: false };
|
|
239
328
|
}
|
|
240
329
|
/**
|
|
241
330
|
* Add a single asset (and its transitive dependencies) to the workspace.
|
|
@@ -247,21 +336,33 @@ var AssetManager = class {
|
|
|
247
336
|
* @returns Array of asset refs that were deployed in this call.
|
|
248
337
|
* @throws When the asset cannot be found in any configured repository.
|
|
249
338
|
*/
|
|
250
|
-
add(ref) {
|
|
251
|
-
const { repositories, patches } = this.loadConfig();
|
|
252
|
-
|
|
339
|
+
async add(ref) {
|
|
340
|
+
const { repositories, stores, overrides, patches } = this.loadConfig();
|
|
341
|
+
parseAssetRef(ref);
|
|
253
342
|
for (const [name, decl] of Object.entries(repositories)) {
|
|
254
343
|
try {
|
|
255
344
|
ensureRepo(decl, name, this.reposDir, { projectDir: this.projectDir });
|
|
256
345
|
} catch {
|
|
257
346
|
}
|
|
258
347
|
}
|
|
259
|
-
const
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
|
|
348
|
+
const provenanceIndex = buildProvenanceIndex(this.buildClones(repositories), {
|
|
349
|
+
projectDir: this.projectDir
|
|
350
|
+
});
|
|
351
|
+
const { resolved, missing } = await resolveAll([ref], {
|
|
352
|
+
provenanceIndex,
|
|
353
|
+
overrides,
|
|
354
|
+
stores,
|
|
355
|
+
storeFetcher: this.buildStoreFetcher(stores),
|
|
356
|
+
projectDir: this.projectDir
|
|
357
|
+
});
|
|
358
|
+
if (resolved.length === 0) {
|
|
359
|
+
throw new Error(
|
|
360
|
+
`Asset not found: ${ref}${missing.length ? ` (missing: ${missing.join(", ")})` : ""}`
|
|
361
|
+
);
|
|
362
|
+
}
|
|
363
|
+
const entries = resolved.map((c) => this.candidateToCatalogEntry(c, repositories)).filter((e) => e !== null);
|
|
364
|
+
const deployed = deployAll(entries, repositories, patches, this.deployOpts);
|
|
365
|
+
this.addDependencyToConfig(ref);
|
|
265
366
|
for (const d of deployed) {
|
|
266
367
|
appendHistory(this.projectDir, {
|
|
267
368
|
ref: d,
|
|
@@ -332,7 +433,7 @@ var AssetManager = class {
|
|
|
332
433
|
for (const [name, decl] of Object.entries(repositories)) {
|
|
333
434
|
const repoDir = this.resolveRepoDir(decl, name);
|
|
334
435
|
if (!repoDir) continue;
|
|
335
|
-
if (parsed.
|
|
436
|
+
if (parsed.publisher && parsed.publisher !== name) continue;
|
|
336
437
|
const entries = scanRepo(repoDir, name);
|
|
337
438
|
const match = entries.find((e) => e.kind === parsed.kind && e.name === parsed.name);
|
|
338
439
|
if (match) return match;
|
|
@@ -393,7 +494,7 @@ var AssetManager = class {
|
|
|
393
494
|
*/
|
|
394
495
|
overview() {
|
|
395
496
|
const { repositories } = this.loadConfig();
|
|
396
|
-
const lock =
|
|
497
|
+
const lock = this.tryReadLock();
|
|
397
498
|
const deployed = this.listDeployed();
|
|
398
499
|
const repoStatuses = /* @__PURE__ */ new Map();
|
|
399
500
|
for (const [name, decl] of Object.entries(repositories)) {
|
|
@@ -406,23 +507,34 @@ var AssetManager = class {
|
|
|
406
507
|
error: status.error
|
|
407
508
|
});
|
|
408
509
|
}
|
|
510
|
+
const lockByKindName = /* @__PURE__ */ new Map();
|
|
511
|
+
for (const [key] of Object.entries(lock?.assets ?? {})) {
|
|
512
|
+
const parsed = parseCanonicalLockKey(key);
|
|
513
|
+
if (parsed.kind && parsed.name && parsed.publisher && parsed.version) {
|
|
514
|
+
lockByKindName.set(`${parsed.kind}:${parsed.name}`, {
|
|
515
|
+
publisher: parsed.publisher,
|
|
516
|
+
version: parsed.version,
|
|
517
|
+
url: lock.assets[key].source.url
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
}
|
|
409
521
|
const entries = [];
|
|
410
522
|
for (const d of deployed) {
|
|
411
|
-
const
|
|
412
|
-
const
|
|
413
|
-
const domain = lockEntry?.domain ?? "unknown";
|
|
414
|
-
const repository = lockEntry?.repository ?? "";
|
|
523
|
+
const lockEntry = lockByKindName.get(`${d.kind}:${d.name}`);
|
|
524
|
+
const publisher = lockEntry?.publisher ?? "";
|
|
415
525
|
const version = lockEntry?.version ?? "";
|
|
526
|
+
const slug = lockEntry ? sourceSlug(lockEntry.url) : "";
|
|
416
527
|
let syncStatus = "unknown";
|
|
417
|
-
if (
|
|
418
|
-
const repoStatus = repoStatuses.get(
|
|
528
|
+
if (slug) {
|
|
529
|
+
const repoStatus = repoStatuses.get(slug);
|
|
419
530
|
if (!repoStatus) syncStatus = "unknown";
|
|
420
531
|
else if (repoStatus.kind === "local") syncStatus = "local";
|
|
421
532
|
else if (repoStatus.error) syncStatus = "error";
|
|
422
533
|
else if (repoStatus.upToDate) syncStatus = "synced";
|
|
423
534
|
else syncStatus = "outdated";
|
|
424
535
|
}
|
|
425
|
-
|
|
536
|
+
const domain = publisher || "unknown";
|
|
537
|
+
entries.push({ kind: d.kind, name: d.name, domain, publisher, version, syncStatus });
|
|
426
538
|
}
|
|
427
539
|
const byDomain = /* @__PURE__ */ new Map();
|
|
428
540
|
for (const e of entries) {
|
|
@@ -452,22 +564,11 @@ var AssetManager = class {
|
|
|
452
564
|
* Returns a single node with `ref === "(no lock file)"` when no lock exists.
|
|
453
565
|
*/
|
|
454
566
|
tree() {
|
|
455
|
-
const lock =
|
|
567
|
+
const lock = this.tryReadLock();
|
|
456
568
|
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
569
|
return {
|
|
469
570
|
ref: "project",
|
|
470
|
-
children:
|
|
571
|
+
children: Object.keys(lock.assets).map((ref) => ({ ref, children: [] }))
|
|
471
572
|
};
|
|
472
573
|
}
|
|
473
574
|
/**
|
|
@@ -478,22 +579,10 @@ var AssetManager = class {
|
|
|
478
579
|
* the asset is not in the lock file.
|
|
479
580
|
*/
|
|
480
581
|
why(ref) {
|
|
481
|
-
const lock =
|
|
582
|
+
const lock = this.tryReadLock();
|
|
482
583
|
if (!lock) return [];
|
|
483
584
|
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;
|
|
585
|
+
return [ref, "direct (skaile.yaml)"];
|
|
497
586
|
}
|
|
498
587
|
/**
|
|
499
588
|
* List installed assets whose source repository is behind the remote.
|
|
@@ -505,27 +594,26 @@ var AssetManager = class {
|
|
|
505
594
|
*/
|
|
506
595
|
outdated() {
|
|
507
596
|
const { repositories } = this.loadConfig();
|
|
508
|
-
const lock =
|
|
597
|
+
const lock = this.tryReadLock();
|
|
509
598
|
if (!lock) return [];
|
|
510
599
|
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
|
-
}
|
|
600
|
+
for (const src of lock.sources) {
|
|
601
|
+
const slug = sourceSlug(src.url);
|
|
602
|
+
const decl = repositories[slug];
|
|
603
|
+
if (!decl || decl.path) continue;
|
|
604
|
+
const status = checkRepoStatus(decl, slug, this.reposDir);
|
|
605
|
+
if (status.behind <= 0) continue;
|
|
606
|
+
for (const [ref, entry] of Object.entries(lock.assets)) {
|
|
607
|
+
if (entry.source.url !== src.url) continue;
|
|
608
|
+
const { publisher, kind, name, version } = parseCanonicalLockKey(ref);
|
|
609
|
+
if (!kind || !name) continue;
|
|
610
|
+
result.push({
|
|
611
|
+
kind,
|
|
612
|
+
name,
|
|
613
|
+
publisher: publisher ?? slug,
|
|
614
|
+
currentVersion: version ?? "",
|
|
615
|
+
behind: status.behind
|
|
616
|
+
});
|
|
529
617
|
}
|
|
530
618
|
}
|
|
531
619
|
return result;
|
|
@@ -561,22 +649,25 @@ var AssetManager = class {
|
|
|
561
649
|
*
|
|
562
650
|
* @returns The written {@link LockFile} data.
|
|
563
651
|
*/
|
|
564
|
-
lock() {
|
|
565
|
-
const { repositories, dependencies } = this.loadConfig();
|
|
652
|
+
async lock() {
|
|
653
|
+
const { repositories, stores, dependencies, overrides } = this.loadConfig();
|
|
566
654
|
for (const [name, decl] of Object.entries(repositories)) {
|
|
567
655
|
try {
|
|
568
656
|
ensureRepo(decl, name, this.reposDir, { projectDir: this.projectDir });
|
|
569
657
|
} catch {
|
|
570
658
|
}
|
|
571
659
|
}
|
|
572
|
-
const
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
660
|
+
const provenanceIndex = buildProvenanceIndex(this.buildClones(repositories), {
|
|
661
|
+
projectDir: this.projectDir
|
|
662
|
+
});
|
|
663
|
+
const { resolved, overridesApplied } = await resolveAll(dependencies, {
|
|
664
|
+
provenanceIndex,
|
|
665
|
+
overrides,
|
|
666
|
+
stores,
|
|
667
|
+
storeFetcher: this.buildStoreFetcher(stores),
|
|
668
|
+
projectDir: this.projectDir
|
|
669
|
+
});
|
|
670
|
+
const lockData = buildLockFile(resolved, overridesApplied);
|
|
580
671
|
writeLock(this.lockPath, lockData);
|
|
581
672
|
return lockData;
|
|
582
673
|
}
|
|
@@ -633,11 +724,11 @@ var AssetManager = class {
|
|
|
633
724
|
patchSubmit(ref) {
|
|
634
725
|
const parsed = parseAssetRef(ref);
|
|
635
726
|
const entry = this.info(ref);
|
|
636
|
-
if (!entry?.
|
|
727
|
+
if (!entry?.publisher) throw new Error(`Asset not found or no publisher: ${ref}`);
|
|
637
728
|
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.
|
|
729
|
+
const decl = repositories[entry.publisher];
|
|
730
|
+
if (!decl?.url) throw new Error("Can only submit patches for remote sources.");
|
|
731
|
+
const repoDir = join(this.reposDir, entry.publisher);
|
|
641
732
|
const branchName = `patch/${parsed.kind}-${parsed.name}`;
|
|
642
733
|
const patchFile = join(this.patchDir, `${parsed.kind}-${parsed.name}.patch`);
|
|
643
734
|
if (!existsSync(patchFile)) throw new Error("No patch file. Run `skaile patch-commit` first.");
|
|
@@ -749,12 +840,13 @@ var AssetManager = class {
|
|
|
749
840
|
* and `unmanaged` (deployed assets not in the lock file).
|
|
750
841
|
*/
|
|
751
842
|
clean(opts) {
|
|
752
|
-
const lock =
|
|
843
|
+
const lock = this.tryReadLock();
|
|
753
844
|
const removed = [];
|
|
754
845
|
const skipped = [];
|
|
755
846
|
if (lock) {
|
|
756
847
|
for (const ref of Object.keys(lock.assets)) {
|
|
757
|
-
const
|
|
848
|
+
const { kind, name } = parseCanonicalLockKey(ref);
|
|
849
|
+
if (!kind || !name) continue;
|
|
758
850
|
const dest = deployedDir(
|
|
759
851
|
kind,
|
|
760
852
|
name,
|
|
@@ -772,7 +864,12 @@ var AssetManager = class {
|
|
|
772
864
|
}
|
|
773
865
|
}
|
|
774
866
|
}
|
|
775
|
-
const lockRefs = lock ? new Set(
|
|
867
|
+
const lockRefs = lock ? new Set(
|
|
868
|
+
Object.keys(lock.assets).map((r) => {
|
|
869
|
+
const p = parseCanonicalLockKey(r);
|
|
870
|
+
return p.kind && p.name ? `${p.kind}:${p.name}` : r;
|
|
871
|
+
})
|
|
872
|
+
) : /* @__PURE__ */ new Set();
|
|
776
873
|
const unmanaged = [];
|
|
777
874
|
const allDeployed = this.listDeployed();
|
|
778
875
|
for (const d of allDeployed) {
|
|
@@ -846,5 +943,5 @@ var AssetManager = class {
|
|
|
846
943
|
};
|
|
847
944
|
|
|
848
945
|
export { AssetManager };
|
|
849
|
-
//# sourceMappingURL=chunk-
|
|
850
|
-
//# sourceMappingURL=chunk-
|
|
946
|
+
//# sourceMappingURL=chunk-TWQPDBHB.js.map
|
|
947
|
+
//# sourceMappingURL=chunk-TWQPDBHB.js.map
|