@skaile/workspaces 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +141 -0
- package/dist/{asset-feeds-677S5NX7.js → asset-feeds-OBPWVUDL.js} +11 -11
- package/dist/{asset-feeds-677S5NX7.js.map → asset-feeds-OBPWVUDL.js.map} +1 -1
- package/dist/asset-manager/index.js +8 -8
- package/dist/asset-manager/installer.js +7 -7
- package/dist/asset-manager/src/index.d.ts +128 -0
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/bridge/drivers/claude-sdk.js +2 -2
- package/dist/bridge/drivers/codex.js +1 -1
- package/dist/bridge/drivers/continue.js +2 -2
- package/dist/bridge/drivers/echo.js +1 -1
- package/dist/bridge/drivers/gemini.js +3 -3
- package/dist/bridge/drivers/goose.js +2 -2
- package/dist/bridge/drivers/omp.js +1 -1
- package/dist/bridge/drivers/opencode.js +2 -2
- package/dist/bridge/drivers/qwen.js +3 -3
- package/dist/bridge/index.js +3 -3
- package/dist/{chunk-FLRHP3UC.js → chunk-35TLBMHX.js} +4 -4
- package/dist/{chunk-FLRHP3UC.js.map → chunk-35TLBMHX.js.map} +1 -1
- package/dist/{chunk-7X53KHQ4.js → chunk-4OVPB7SI.js} +4 -2
- package/dist/chunk-4OVPB7SI.js.map +1 -0
- package/dist/{chunk-6VUP6XHK.js → chunk-52XHXSBN.js} +3 -3
- package/dist/{chunk-6VUP6XHK.js.map → chunk-52XHXSBN.js.map} +1 -1
- package/dist/{chunk-NXC6IEL4.js → chunk-5AGARSQT.js} +267 -261
- package/dist/chunk-5AGARSQT.js.map +1 -0
- package/dist/{chunk-EXNTTJGP.js → chunk-BCJL2UNH.js} +3 -3
- package/dist/{chunk-EXNTTJGP.js.map → chunk-BCJL2UNH.js.map} +1 -1
- package/dist/{chunk-W53D5Q52.js → chunk-BM37QD6U.js} +3 -3
- package/dist/{chunk-W53D5Q52.js.map → chunk-BM37QD6U.js.map} +1 -1
- package/dist/{chunk-PLQVAEM2.js → chunk-CLUJLV7Z.js} +5 -5
- package/dist/{chunk-PLQVAEM2.js.map → chunk-CLUJLV7Z.js.map} +1 -1
- package/dist/{chunk-KSISPZV3.js → chunk-EPLYVB3L.js} +2 -2
- package/dist/{chunk-KSISPZV3.js.map → chunk-EPLYVB3L.js.map} +1 -1
- package/dist/{chunk-SFVEHSCI.js → chunk-KAWKKMU4.js} +253 -14
- package/dist/chunk-KAWKKMU4.js.map +1 -0
- package/dist/{chunk-UTHEIPEY.js → chunk-KVZ6XKVN.js} +56 -14
- package/dist/chunk-KVZ6XKVN.js.map +1 -0
- package/dist/{chunk-3KPNDTMR.js → chunk-MG6UIS7G.js} +3 -3
- package/dist/{chunk-3KPNDTMR.js.map → chunk-MG6UIS7G.js.map} +1 -1
- package/dist/{chunk-GYPA2Q7F.js → chunk-MQEZE6TU.js} +25 -4
- package/dist/chunk-MQEZE6TU.js.map +1 -0
- package/dist/{chunk-2D5YE3FL.js → chunk-NUS5L5ZJ.js} +104 -6
- package/dist/chunk-NUS5L5ZJ.js.map +1 -0
- package/dist/{chunk-LKOMH3QC.js → chunk-OIGYDVCM.js} +3 -3
- package/dist/{chunk-LKOMH3QC.js.map → chunk-OIGYDVCM.js.map} +1 -1
- package/dist/{chunk-N5AE5SOC.js → chunk-QVE3ILCY.js} +2 -2
- package/dist/{chunk-N5AE5SOC.js.map → chunk-QVE3ILCY.js.map} +1 -1
- package/dist/{chunk-K5JIAHDV.js → chunk-TTTLCSEQ.js} +32 -28
- package/dist/chunk-TTTLCSEQ.js.map +1 -0
- package/dist/{chunk-6AD3NS7R.js → chunk-U5J77IIZ.js} +4 -4
- package/dist/{chunk-6AD3NS7R.js.map → chunk-U5J77IIZ.js.map} +1 -1
- package/dist/{chunk-OYMSCV7T.js → chunk-UY5Q2NZH.js} +3 -3
- package/dist/{chunk-OYMSCV7T.js.map → chunk-UY5Q2NZH.js.map} +1 -1
- package/dist/{chunk-WSQ5J7CE.js → chunk-VCBLXF7D.js} +113 -53
- package/dist/chunk-VCBLXF7D.js.map +1 -0
- package/dist/{chunk-43JDPQJ4.js → chunk-W65IK4MH.js} +5 -5
- package/dist/{chunk-43JDPQJ4.js.map → chunk-W65IK4MH.js.map} +1 -1
- package/dist/{chunk-XD7GYMAU.js → chunk-XWLVIEWD.js} +7 -7
- package/dist/{chunk-XD7GYMAU.js.map → chunk-XWLVIEWD.js.map} +1 -1
- package/dist/{chunk-DW5MIJK3.js → chunk-YI5OZ7QO.js} +2 -2
- package/dist/{chunk-DW5MIJK3.js.map → chunk-YI5OZ7QO.js.map} +1 -1
- package/dist/{chunk-2ZK7M2SG.js → chunk-ZUE2PIJ5.js} +3 -3
- package/dist/{chunk-2ZK7M2SG.js.map → chunk-ZUE2PIJ5.js.map} +1 -1
- package/dist/cli/index.js +232 -56
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/commands/catalog.d.ts +38 -0
- package/dist/cli/src/commands/catalog.d.ts.map +1 -1
- package/dist/cli/src/commands/manage.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts +9 -0
- package/dist/cli/src/commands/project.d.ts.map +1 -1
- package/dist/cli/src/commands/tree.d.ts.map +1 -1
- package/dist/cli/src/commands/why.d.ts.map +1 -1
- package/dist/cli/src/helpers.d.ts +35 -0
- package/dist/cli/src/helpers.d.ts.map +1 -1
- package/dist/connectors/config.js +7 -7
- package/dist/connectors/index.js +8 -8
- package/dist/connectors/src/connector-registry.d.ts.map +1 -1
- package/dist/core/index.js +6 -6
- package/dist/core/runtime-assets.js +2 -2
- package/dist/core/src/index.d.ts +1 -1
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/repo-manager.d.ts +19 -1
- package/dist/core/src/repo-manager.d.ts.map +1 -1
- package/dist/core/src/walker.d.ts +7 -0
- package/dist/core/src/walker.d.ts.map +1 -1
- package/dist/core/workspace-config.js +1 -1
- package/dist/deploy/index.js +6 -6
- package/dist/discovery/index.js +1 -1
- package/dist/discovery/src/discover.d.ts.map +1 -1
- package/dist/discovery/src/index.d.ts +1 -1
- package/dist/discovery/src/index.d.ts.map +1 -1
- package/dist/discovery/src/reference-lint.d.ts +30 -0
- package/dist/discovery/src/reference-lint.d.ts.map +1 -1
- package/dist/discovery/src/tree-entries.d.ts.map +1 -1
- package/dist/{ensure-sources-OCMHK7LT.js → ensure-sources-BQI2TOZZ.js} +16 -9
- package/dist/ensure-sources-BQI2TOZZ.js.map +1 -0
- package/dist/factory-assets/connectors/box/CONNECTOR.md +33 -0
- package/dist/factory-assets/connectors/box/driver.d.ts +27 -0
- package/dist/factory-assets/connectors/box/driver.d.ts.map +1 -0
- package/dist/factory-assets/connectors/box.d.ts +2 -0
- package/dist/factory-assets/connectors/box.js +20 -0
- package/dist/factory-assets/connectors/box.js.map +1 -0
- package/dist/factory-assets/connectors/deploy.js +8 -8
- package/dist/factory-assets/connectors/devserver.js +8 -8
- package/dist/factory-assets/connectors/flow/adapter.js +8 -8
- package/dist/factory-assets/connectors/flow/engine.js +6 -6
- package/dist/factory-assets/connectors/flow/run-flow.js +9 -9
- package/dist/factory-assets/connectors/flow.js +8 -8
- package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/git.js +8 -8
- package/dist/factory-assets/connectors/gmail.js +8 -8
- package/dist/factory-assets/connectors/googledrive.js +8 -8
- package/dist/factory-assets/connectors/local.js +8 -8
- package/dist/factory-assets/connectors/mattermost.js +8 -8
- package/dist/factory-assets/connectors/memory.js +8 -8
- package/dist/factory-assets/connectors/minio.js +8 -8
- package/dist/factory-assets/connectors/postgres.js +8 -8
- package/dist/factory-assets/connectors/s3.js +8 -8
- package/dist/factory-assets/connectors/sharepoint.js +8 -8
- package/dist/factory-assets/connectors/sqlite.js +8 -8
- package/dist/factory-assets/connectors/static-server.js +8 -8
- package/dist/factory-assets/connectors/tunnel.js +8 -8
- package/dist/factory-assets/connectors/webdav.js +8 -8
- package/dist/factory-assets/connectors/xstate-store.js +8 -8
- package/dist/factory-assets/connectors/xstate.js +8 -8
- package/dist/factory-assets/skaile.manifest.yaml +4 -1
- package/dist/{flows-36PZESON.js → flows-4Z74KY2H.js} +3 -3
- package/dist/{flows-36PZESON.js.map → flows-4Z74KY2H.js.map} +1 -1
- package/dist/helpers-SC4PWN2F.js +22 -0
- package/dist/{helpers-F4NZ66VD.js.map → helpers-SC4PWN2F.js.map} +1 -1
- package/dist/library/index.js +8 -8
- package/dist/library/install.js +6 -6
- package/dist/library/src/library.d.ts +6 -0
- package/dist/library/src/library.d.ts.map +1 -1
- package/dist/library/src/local/db.d.ts.map +1 -1
- package/dist/library/src/local/library.d.ts +9 -0
- package/dist/library/src/local/library.d.ts.map +1 -1
- package/dist/library/src/local/local-catalog-source.d.ts +9 -0
- package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
- package/dist/library/src/local/schema.d.ts +19 -0
- package/dist/library/src/local/schema.d.ts.map +1 -1
- package/dist/open-library-ZNYIND7N.js +29 -0
- package/dist/{open-library-WRFYABFP.js.map → open-library-ZNYIND7N.js.map} +1 -1
- package/dist/{paths-EUNVMONC.js → paths-S7QNXYMB.js} +9 -9
- package/dist/{paths-EUNVMONC.js.map → paths-S7QNXYMB.js.map} +1 -1
- package/dist/{plugin-store-35KIMX6W.js → plugin-store-3DAVGKHN.js} +8 -8
- package/dist/{plugin-store-35KIMX6W.js.map → plugin-store-3DAVGKHN.js.map} +1 -1
- package/dist/plugins/src/catalog-source.d.ts +7 -0
- package/dist/plugins/src/catalog-source.d.ts.map +1 -1
- package/dist/runner/index.js +13 -13
- 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.js +8 -8
- package/dist/sdk/bridge.js +3 -3
- package/dist/sdk/core.js +6 -6
- package/dist/sdk/flow.js +6 -6
- package/dist/sdk/index.js +13 -13
- package/dist/sdk/runner.js +13 -13
- package/dist/sdk/store.js +1 -1
- package/dist/{setup-HM6HATAC.js → setup-WBGDT2WY.js} +11 -11
- package/dist/{setup-HM6HATAC.js.map → setup-WBGDT2WY.js.map} +1 -1
- package/dist/{source-EZ5Y3CKP.js → source-SBFVULTG.js} +19 -13
- package/dist/{source-EZ5Y3CKP.js.map → source-SBFVULTG.js.map} +1 -1
- package/dist/store/index.js +1 -1
- package/dist/store/src/store.d.ts.map +1 -1
- package/dist/{store-client-BUUF7BPK.js → store-client-YGDN4L2G.js} +9 -9
- package/dist/{store-client-BUUF7BPK.js.map → store-client-YGDN4L2G.js.map} +1 -1
- package/dist/tui/index.js +13 -13
- package/dist/workspace-plugin/adapters/mcp.js +2 -2
- package/dist/workspace-plugin/adapters/omp.js +3 -3
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +7 -1
- package/dist/chunk-2D5YE3FL.js.map +0 -1
- package/dist/chunk-7X53KHQ4.js.map +0 -1
- package/dist/chunk-GYPA2Q7F.js.map +0 -1
- package/dist/chunk-K5JIAHDV.js.map +0 -1
- package/dist/chunk-NXC6IEL4.js.map +0 -1
- package/dist/chunk-SFVEHSCI.js.map +0 -1
- package/dist/chunk-UTHEIPEY.js.map +0 -1
- package/dist/chunk-WSQ5J7CE.js.map +0 -1
- package/dist/ensure-sources-OCMHK7LT.js.map +0 -1
- package/dist/helpers-F4NZ66VD.js +0 -4
- package/dist/open-library-WRFYABFP.js +0 -23
package/dist/cli/index.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { makeSourceCommand, syncProjectSources } from '../chunk-
|
|
3
|
-
import { openCatalogSource, openLibraryManager, createFullRegistry, openLibrary } from '../chunk-
|
|
4
|
-
import { logErr, S, logOk, logInfo, colorRef, logWarn, kindColorPad, kindColor, formatRelativeTime, fitWidth } from '../chunk-
|
|
5
|
-
import { getStoreConfig, storeFetch, saveStoreTokens, clearStoreTokens, isStoreAuthenticated } from '../chunk-
|
|
6
|
-
import { AI_RESOURCES, aiResourceRoots } from '../chunk-
|
|
2
|
+
import { makeSourceCommand, syncProjectSources } from '../chunk-XWLVIEWD.js';
|
|
3
|
+
import { openCatalogSource, openLibraryManager, createFullRegistry, openLibrary } from '../chunk-CLUJLV7Z.js';
|
|
4
|
+
import { logErr, S, logOk, logInfo, colorRef, logWarn, kindColorPad, kindColor, formatSoftDepSection, bareSoftDepName, formatSoftDepHint, formatRelativeTime, fitWidth, formatSoftDepRemovePreview, formatSoftDepAddPreview } from '../chunk-MQEZE6TU.js';
|
|
5
|
+
import { getStoreConfig, storeFetch, saveStoreTokens, clearStoreTokens, isStoreAuthenticated } from '../chunk-ZUE2PIJ5.js';
|
|
6
|
+
import { AI_RESOURCES, aiResourceRoots } from '../chunk-OIGYDVCM.js';
|
|
7
7
|
import { LocalSecretsProvider } from '../chunk-6BEGKO2Q.js';
|
|
8
|
-
import { resolveLibraryDir } from '../chunk-
|
|
9
|
-
import '../chunk-
|
|
8
|
+
import { resolveLibraryDir } from '../chunk-NUS5L5ZJ.js';
|
|
9
|
+
import '../chunk-KVZ6XKVN.js';
|
|
10
10
|
import '../chunk-UKJMQZV6.js';
|
|
11
11
|
import '../chunk-R7FOF242.js';
|
|
12
12
|
import '../chunk-JXT46QFC.js';
|
|
13
|
-
import { runFlow, resumeFlow } from '../chunk-
|
|
13
|
+
import { runFlow, resumeFlow } from '../chunk-W65IK4MH.js';
|
|
14
14
|
import '../chunk-4R6DROGN.js';
|
|
15
15
|
import { validateFlowVersions, parseSkillFrontmatter } from '../chunk-GXC3TYMQ.js';
|
|
16
|
-
import { runAgentChat, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, loadAgentManifest, compileComposition, MarkdownStreamer, resolveMixin } from '../chunk-
|
|
17
|
-
import { buildClaudePluginFiles } from '../chunk-
|
|
16
|
+
import { runAgentChat, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, loadAgentManifest, compileComposition, MarkdownStreamer, resolveMixin } from '../chunk-TTTLCSEQ.js';
|
|
17
|
+
import { buildClaudePluginFiles } from '../chunk-EPLYVB3L.js';
|
|
18
18
|
import '../chunk-X5YPJV4N.js';
|
|
19
19
|
import '../chunk-O7SG5PC2.js';
|
|
20
20
|
import '../chunk-7QBNJTTQ.js';
|
|
@@ -23,30 +23,30 @@ import '../chunk-WQ7DE5UC.js';
|
|
|
23
23
|
import '../chunk-32NA4TVC.js';
|
|
24
24
|
import '../chunk-W3UDISS2.js';
|
|
25
25
|
import '../chunk-EVZKWY5J.js';
|
|
26
|
-
import '../chunk-
|
|
27
|
-
import '../chunk-RRVQAE5D.js';
|
|
26
|
+
import '../chunk-UY5Q2NZH.js';
|
|
28
27
|
import '../chunk-BMQKMOQY.js';
|
|
29
28
|
import '../chunk-GAH4YRCI.js';
|
|
30
|
-
import '../chunk-
|
|
29
|
+
import '../chunk-RRVQAE5D.js';
|
|
30
|
+
import '../chunk-QVE3ILCY.js';
|
|
31
31
|
import '../chunk-LV2HPH3C.js';
|
|
32
|
-
import '../chunk-
|
|
33
|
-
import '../chunk-
|
|
32
|
+
import '../chunk-VCBLXF7D.js';
|
|
33
|
+
import '../chunk-BCJL2UNH.js';
|
|
34
34
|
import '../chunk-6E6PKKAD.js';
|
|
35
35
|
import { loadFlow, loadAllFlows } from '../chunk-SKADPHAM.js';
|
|
36
36
|
import '../chunk-DEYYRFQU.js';
|
|
37
37
|
import '../chunk-IFGTRL2I.js';
|
|
38
|
-
import { AssetManager, NON_DEPLOYABLE_KINDS, MissingManifestError } from '../chunk-
|
|
39
|
-
import '../chunk-
|
|
40
|
-
import { readLock, resolveSettings, globalSettingsPath, projectSettingsPath, loadSettings, saveSettings, portableSpawn, portableSpawnSync, WorkspaceYamlEditor, checkAgentSkillConformance } from '../chunk-
|
|
41
|
-
import '../chunk-
|
|
42
|
-
import '../chunk-
|
|
43
|
-
import { DRIVER_DEFAULTS } from '../chunk-K5GBV4SA.js';
|
|
44
|
-
import { assetSearchDirs, detectDomains } from '../chunk-ZAP2BDHG.js';
|
|
45
|
-
import { globalCacheRoot, sourceCacheKey, getGlobalCacheDir, resolveAgentDir, resolveSkWorkspaceConfig } from '../chunk-NXC6IEL4.js';
|
|
38
|
+
import { AssetManager, NON_DEPLOYABLE_KINDS, MissingManifestError } from '../chunk-KAWKKMU4.js';
|
|
39
|
+
import '../chunk-35TLBMHX.js';
|
|
40
|
+
import { readLock, resolveSettings, globalSettingsPath, projectSettingsPath, loadSettings, saveSettings, portableSpawn, portableSpawnSync, WorkspaceYamlEditor, checkAgentSkillConformance } from '../chunk-MG6UIS7G.js';
|
|
41
|
+
import '../chunk-BM37QD6U.js';
|
|
42
|
+
import { globalCacheRoot, sourceCacheKey, getGlobalCacheDir, resolveAgentDir, resolveSkWorkspaceConfig } from '../chunk-5AGARSQT.js';
|
|
46
43
|
import { SKAILE_MANIFEST_FILENAME, decodeSkaileManifest, loadSkPublishManifest, saveSkPublishManifest } from '../chunk-DZCK7GRW.js';
|
|
47
44
|
import { parseFrontmatter } from '../chunk-BQCGFPHW.js';
|
|
48
45
|
import { parseAssetRef, ASSET_KINDS, isValidAssetName, slugifyAssetName, ASSET_NAME_HINT, assetRefToStr } from '../chunk-GEEW6SY2.js';
|
|
46
|
+
import '../chunk-F3HNW354.js';
|
|
49
47
|
import { SUPPORTED_DRIVER_TARGETS } from '../chunk-MENCWIHW.js';
|
|
48
|
+
import { DRIVER_DEFAULTS } from '../chunk-K5GBV4SA.js';
|
|
49
|
+
import { assetSearchDirs, detectDomains } from '../chunk-ZAP2BDHG.js';
|
|
50
50
|
import { openSqlite } from '../chunk-JB35MVBN.js';
|
|
51
51
|
import '../chunk-KTBKW2FI.js';
|
|
52
52
|
import '../chunk-UQ6LFBPZ.js';
|
|
@@ -92,7 +92,7 @@ async function searchLocal(query, kind, opts, showStore, airGapped) {
|
|
|
92
92
|
const projectDir = path14__default.resolve(opts.projectDir);
|
|
93
93
|
let entries = new AssetManager({ projectDir }).search(query, kind);
|
|
94
94
|
if (entries.length === 0 && !query && !kind && !airGapped) {
|
|
95
|
-
const { autoSyncForSearch } = await import('../source-
|
|
95
|
+
const { autoSyncForSearch } = await import('../source-SBFVULTG.js');
|
|
96
96
|
if (await autoSyncForSearch(projectDir)) {
|
|
97
97
|
entries = new AssetManager({ projectDir }).search(query, kind);
|
|
98
98
|
}
|
|
@@ -145,7 +145,7 @@ async function searchStore(query, kind, opts, airGapped) {
|
|
|
145
145
|
return;
|
|
146
146
|
}
|
|
147
147
|
try {
|
|
148
|
-
const { getStoreConfig: getStoreConfig2, storeFetch: storeFetch2 } = await import('../store-client-
|
|
148
|
+
const { getStoreConfig: getStoreConfig2, storeFetch: storeFetch2 } = await import('../store-client-YGDN4L2G.js');
|
|
149
149
|
const config = getStoreConfig2();
|
|
150
150
|
const params = {};
|
|
151
151
|
if (query) params.q = query;
|
|
@@ -189,6 +189,57 @@ function parseBackendFilter(raw) {
|
|
|
189
189
|
}
|
|
190
190
|
return out.length > 0 ? out : void 0;
|
|
191
191
|
}
|
|
192
|
+
async function promptSoftDepAdds(am2, ref, io) {
|
|
193
|
+
if (io.noSoftDeps) return;
|
|
194
|
+
const edges = await am2.reportSoftDeps([ref]);
|
|
195
|
+
if (edges.length === 0) return;
|
|
196
|
+
const addEdge = async (toRef) => {
|
|
197
|
+
try {
|
|
198
|
+
for (const a of await am2.add(toRef, { link: io.link })) io.onAdded(a);
|
|
199
|
+
} catch (err) {
|
|
200
|
+
io.onError(`Failed to add ${toRef}: ${err}`);
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
if (io.withSoftDeps) {
|
|
204
|
+
for (const edge of edges) {
|
|
205
|
+
if (edge.toRef) await addEdge(edge.toRef);
|
|
206
|
+
else io.onError(`Cannot auto-add ${bareSoftDepName(edge.to)} \u2014 no resolvable ref.`);
|
|
207
|
+
}
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
if (!io.isTTY) {
|
|
211
|
+
for (const edge of edges) io.onHint(formatSoftDepHint(edge));
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
for (const edge of edges) {
|
|
215
|
+
if (!edge.toRef) continue;
|
|
216
|
+
const yes = await io.confirm(
|
|
217
|
+
`${bareSoftDepName(edge.from)} references ${bareSoftDepName(edge.to)} (soft dependency) \u2014 also add it?`
|
|
218
|
+
);
|
|
219
|
+
if (io.isCancel(yes)) break;
|
|
220
|
+
if (yes === true) await addEdge(edge.toRef);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
async function promptSoftDepRemovals(am2, ref, io) {
|
|
224
|
+
if (io.noSoftDeps) return;
|
|
225
|
+
const orphans = (await am2.orphanedSoftDepsAfterRemoving([ref])).filter((o) => o.targetRef);
|
|
226
|
+
if (orphans.length === 0) return;
|
|
227
|
+
if (!io.isTTY) {
|
|
228
|
+
for (const o of orphans) {
|
|
229
|
+
io.onHint(
|
|
230
|
+
`${bareSoftDepName(o.target)} is now an orphaned soft dependency of ${ref} \u2014 run \`skaile remove ${o.targetRef}\` to remove it.`
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
for (const o of orphans) {
|
|
236
|
+
const yes = await io.confirm(
|
|
237
|
+
`${bareSoftDepName(o.target)} is a soft dependency of ${ref} and is no longer referenced by any installed asset \u2014 also remove it?`
|
|
238
|
+
);
|
|
239
|
+
if (io.isCancel(yes)) break;
|
|
240
|
+
if (yes === true && am2.remove(o.targetRef)) io.onRemoved(`Removed ${o.targetRef}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
192
243
|
function makeAddCommand() {
|
|
193
244
|
return new Command("add").description("Add to skaile.yaml + deploy").argument("<ref>", "Asset reference (kind:@<publisher>/name#<version>)").option("--project-dir <path>", "Project directory", process.cwd()).option("--global", "Record in ~/.skaile/skaile.yaml + deploy to every global backend").option(
|
|
194
245
|
"--backend <ids>",
|
|
@@ -196,7 +247,14 @@ function makeAddCommand() {
|
|
|
196
247
|
).option("--target <agent>", "Driver target", "claude-code").option(
|
|
197
248
|
"--link",
|
|
198
249
|
"symlink local-path assets instead of copying (dev loop; machine-local, not for committing)"
|
|
199
|
-
).
|
|
250
|
+
).option(
|
|
251
|
+
"--with-soft-deps",
|
|
252
|
+
"also add the asset's report-only soft (body-link) deps, without prompting"
|
|
253
|
+
).option("--no-soft-deps", "skip the soft-dep prompt entirely (don't add, don't report)").action(async (ref, opts) => {
|
|
254
|
+
if (opts.withSoftDeps && opts.softDeps === false) {
|
|
255
|
+
logErr("--with-soft-deps and --no-soft-deps are mutually exclusive.");
|
|
256
|
+
process.exit(1);
|
|
257
|
+
}
|
|
200
258
|
const backends = parseBackendFilter(opts.backend);
|
|
201
259
|
const am2 = new AssetManager({
|
|
202
260
|
projectDir: path14__default.resolve(opts.projectDir),
|
|
@@ -209,6 +267,17 @@ function makeAddCommand() {
|
|
|
209
267
|
try {
|
|
210
268
|
const added = await am2.add(ref, { link: opts.link });
|
|
211
269
|
spinner5.stop("Done");
|
|
270
|
+
await promptSoftDepAdds(am2, ref, {
|
|
271
|
+
isTTY: !!process.stdin.isTTY,
|
|
272
|
+
link: opts.link,
|
|
273
|
+
withSoftDeps: opts.withSoftDeps,
|
|
274
|
+
noSoftDeps: opts.softDeps === false,
|
|
275
|
+
confirm: (message) => p6.confirm({ message, initialValue: false }),
|
|
276
|
+
isCancel: p6.isCancel,
|
|
277
|
+
onAdded: logOk,
|
|
278
|
+
onError: logErr,
|
|
279
|
+
onHint: (line) => logInfo(S.dim(line))
|
|
280
|
+
});
|
|
212
281
|
if (added.length === 0) {
|
|
213
282
|
const kind = parseAssetRef(ref).kind;
|
|
214
283
|
if (NON_DEPLOYABLE_KINDS.has(kind))
|
|
@@ -228,7 +297,7 @@ function makeRemoveCommand() {
|
|
|
228
297
|
return new Command("remove").description("Remove from skaile.yaml + undeploy").argument("<ref>", "Asset reference (kind:name)").option("--project-dir <path>", "Project directory", process.cwd()).option("--global", "Remove from ~/.skaile/skaile.yaml + undeploy from every global backend").option(
|
|
229
298
|
"--backend <ids>",
|
|
230
299
|
"Comma-separated global backends to undeploy from (default: all resolved); implies --global"
|
|
231
|
-
).option("--target <agent>", "Driver target", "claude-code").action((ref, opts) => {
|
|
300
|
+
).option("--target <agent>", "Driver target", "claude-code").option("--no-soft-deps", "skip the orphaned-soft-dep prompt (don't remove, don't report)").action(async (ref, opts) => {
|
|
232
301
|
const backends = parseBackendFilter(opts.backend);
|
|
233
302
|
const am2 = new AssetManager({
|
|
234
303
|
projectDir: path14__default.resolve(opts.projectDir),
|
|
@@ -237,8 +306,19 @@ function makeRemoveCommand() {
|
|
|
237
306
|
driverTarget: opts.target
|
|
238
307
|
});
|
|
239
308
|
const ok = am2.remove(ref);
|
|
240
|
-
if (ok)
|
|
241
|
-
|
|
309
|
+
if (!ok) {
|
|
310
|
+
logErr(`Not deployed: ${ref}`);
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
logOk(`Removed ${ref}`);
|
|
314
|
+
await promptSoftDepRemovals(am2, ref, {
|
|
315
|
+
isTTY: !!process.stdin.isTTY,
|
|
316
|
+
noSoftDeps: opts.softDeps === false,
|
|
317
|
+
confirm: (message) => p6.confirm({ message, initialValue: false }),
|
|
318
|
+
isCancel: p6.isCancel,
|
|
319
|
+
onRemoved: logOk,
|
|
320
|
+
onHint: (line) => logInfo(S.dim(line))
|
|
321
|
+
});
|
|
242
322
|
});
|
|
243
323
|
}
|
|
244
324
|
function stateLabel(s) {
|
|
@@ -345,7 +425,7 @@ function runGlobalList(kind, opts, backends) {
|
|
|
345
425
|
console.log();
|
|
346
426
|
}
|
|
347
427
|
function makeInfoCommand() {
|
|
348
|
-
return new Command("info").description("Show asset metadata, deps, deploy status").argument("<ref>", "Asset reference (kind:name)").option("--project-dir <path>", "Project directory", process.cwd()).action((ref, opts) => {
|
|
428
|
+
return new Command("info").description("Show asset metadata, deps, deploy status").argument("<ref>", "Asset reference (kind:name)").option("--project-dir <path>", "Project directory", process.cwd()).action(async (ref, opts) => {
|
|
349
429
|
const am2 = new AssetManager({ projectDir: path14__default.resolve(opts.projectDir) });
|
|
350
430
|
const entry = am2.info(ref);
|
|
351
431
|
if (!entry) {
|
|
@@ -354,6 +434,7 @@ function makeInfoCommand() {
|
|
|
354
434
|
);
|
|
355
435
|
process.exit(1);
|
|
356
436
|
}
|
|
437
|
+
const softDeps = await am2.softDepsOf([ref]);
|
|
357
438
|
console.log();
|
|
358
439
|
console.log(` ${S.heading(entry.name)}`);
|
|
359
440
|
console.log(` ${S.rule(40)}`);
|
|
@@ -371,6 +452,8 @@ function makeInfoCommand() {
|
|
|
371
452
|
console.log(` dependencies:`);
|
|
372
453
|
for (const s of entry.dependencies) console.log(` ${S.dim("\xB7")} ${colorRef(s)}`);
|
|
373
454
|
}
|
|
455
|
+
for (const line of formatSoftDepSection(softDeps.map((e) => bareSoftDepName(e.to))))
|
|
456
|
+
console.log(line);
|
|
374
457
|
console.log();
|
|
375
458
|
});
|
|
376
459
|
}
|
|
@@ -922,7 +1005,7 @@ function makeCatalogCommand() {
|
|
|
922
1005
|
return catalog;
|
|
923
1006
|
}
|
|
924
1007
|
async function runLocalCatalogTest(projectDir) {
|
|
925
|
-
const { resolveCatalogSource } = await import('../open-library-
|
|
1008
|
+
const { resolveCatalogSource } = await import('../open-library-ZNYIND7N.js');
|
|
926
1009
|
let resolved;
|
|
927
1010
|
try {
|
|
928
1011
|
resolved = await resolveCatalogSource({ projectDir });
|
|
@@ -1912,7 +1995,7 @@ async function ensureTargetsRegistered(projectDir) {
|
|
|
1912
1995
|
const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
|
|
1913
1996
|
const config = resolveSkWorkspaceConfig2(projectDir);
|
|
1914
1997
|
if (config.plugins && config.plugins.length > 0) {
|
|
1915
|
-
const { ensurePluginsLoaded } = await import('../plugin-store-
|
|
1998
|
+
const { ensurePluginsLoaded } = await import('../plugin-store-3DAVGKHN.js');
|
|
1916
1999
|
const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
|
|
1917
2000
|
for (const f of result.failed) logWarn(f.error);
|
|
1918
2001
|
}
|
|
@@ -3591,8 +3674,44 @@ function actOnHeader(row, action3) {
|
|
|
3591
3674
|
}
|
|
3592
3675
|
return row.type === "domain-header" || row.type === "domain-info";
|
|
3593
3676
|
}
|
|
3677
|
+
var softDepPreviewCache = /* @__PURE__ */ new Map();
|
|
3678
|
+
function softDepCacheKeyUnderCursor() {
|
|
3679
|
+
if (state.tab !== "assets" && state.tab !== "sources") return null;
|
|
3680
|
+
const rows = state.tab === "sources" ? state.visibleSourceRows : state.visibleRows;
|
|
3681
|
+
const row = rows[state.cursor];
|
|
3682
|
+
const ref = row?.type === "asset" ? assetRefOf(row) : null;
|
|
3683
|
+
if (!row || !ref) return null;
|
|
3684
|
+
return `${row.installed ? "remove" : "add"}:${ref}`;
|
|
3685
|
+
}
|
|
3686
|
+
async function previewSoftDepsUnderCursor() {
|
|
3687
|
+
if (state.tab !== "assets" && state.tab !== "sources") return;
|
|
3688
|
+
const rows = state.tab === "sources" ? state.visibleSourceRows : state.visibleRows;
|
|
3689
|
+
const row = rows[state.cursor];
|
|
3690
|
+
const ref = row?.type === "asset" ? assetRefOf(row) : null;
|
|
3691
|
+
if (!row || !ref) {
|
|
3692
|
+
state.message = "";
|
|
3693
|
+
return;
|
|
3694
|
+
}
|
|
3695
|
+
const mode = row.installed ? "remove" : "add";
|
|
3696
|
+
const cacheKey = `${mode}:${ref}`;
|
|
3697
|
+
let msg = softDepPreviewCache.get(cacheKey);
|
|
3698
|
+
if (msg === void 0) {
|
|
3699
|
+
if (mode === "remove") {
|
|
3700
|
+
const targets = (await am.orphanedSoftDepsAfterRemoving([ref])).map(
|
|
3701
|
+
(o) => bareSoftDepName(o.target)
|
|
3702
|
+
);
|
|
3703
|
+
msg = formatSoftDepRemovePreview(row.entry.name, targets);
|
|
3704
|
+
} else {
|
|
3705
|
+
const targets = (await am.reportSoftDeps([ref])).map((e) => bareSoftDepName(e.to));
|
|
3706
|
+
msg = formatSoftDepAddPreview(row.entry.name, targets);
|
|
3707
|
+
}
|
|
3708
|
+
softDepPreviewCache.set(cacheKey, msg);
|
|
3709
|
+
}
|
|
3710
|
+
if (softDepCacheKeyUnderCursor() === cacheKey) state.message = msg;
|
|
3711
|
+
}
|
|
3594
3712
|
async function loadAssets() {
|
|
3595
|
-
|
|
3713
|
+
softDepPreviewCache.clear();
|
|
3714
|
+
const { gatherAssetFeeds } = await import('../asset-feeds-OBPWVUDL.js');
|
|
3596
3715
|
const { entries, domains, notes } = await gatherAssetFeeds(am, am.projectDir);
|
|
3597
3716
|
if (notes.length > 0) {
|
|
3598
3717
|
state.message = notes.map((n) => `[${n.feed}] ${n.message}`).join(" \u2022 ");
|
|
@@ -3759,7 +3878,7 @@ function reconcileCollapsedSets(rows) {
|
|
|
3759
3878
|
async function loadSourcesAndLibraries() {
|
|
3760
3879
|
try {
|
|
3761
3880
|
const [{ openLibraryManager: openLibraryManager2 }, { skaileHomeDir }, { getGlobalCacheDir: getGlobalCacheDir2 }] = await Promise.all([
|
|
3762
|
-
import('../open-library-
|
|
3881
|
+
import('../open-library-ZNYIND7N.js'),
|
|
3763
3882
|
import('../library/index.js'),
|
|
3764
3883
|
import('../core/index.js')
|
|
3765
3884
|
]);
|
|
@@ -4164,13 +4283,19 @@ async function applyChanges() {
|
|
|
4164
4283
|
render();
|
|
4165
4284
|
let added = 0;
|
|
4166
4285
|
let removed = 0;
|
|
4286
|
+
const appliedAdds = [];
|
|
4287
|
+
const appliedRemoves = [];
|
|
4167
4288
|
for (const ref of state.pendingRemoves) {
|
|
4168
|
-
if (am.remove(ref))
|
|
4289
|
+
if (am.remove(ref)) {
|
|
4290
|
+
removed++;
|
|
4291
|
+
appliedRemoves.push(ref);
|
|
4292
|
+
}
|
|
4169
4293
|
}
|
|
4170
4294
|
for (const ref of state.pendingAdds) {
|
|
4171
4295
|
try {
|
|
4172
|
-
am.add(ref);
|
|
4296
|
+
await am.add(ref);
|
|
4173
4297
|
added++;
|
|
4298
|
+
appliedAdds.push(ref);
|
|
4174
4299
|
} catch (err) {
|
|
4175
4300
|
state.message = pc5.red(`Failed to add ${ref}: ${err}`);
|
|
4176
4301
|
}
|
|
@@ -4181,6 +4306,19 @@ async function applyChanges() {
|
|
|
4181
4306
|
const parts = [];
|
|
4182
4307
|
if (added > 0) parts.push(pc5.green(`+${added} added`));
|
|
4183
4308
|
if (removed > 0) parts.push(pc5.red(`-${removed} removed`));
|
|
4309
|
+
const softDeps = appliedAdds.length > 0 ? await am.reportSoftDeps(appliedAdds) : [];
|
|
4310
|
+
if (softDeps.length > 0) {
|
|
4311
|
+
parts.push(pc5.dim(`${softDeps.length} soft dep${softDeps.length === 1 ? "" : "s"} referenced`));
|
|
4312
|
+
}
|
|
4313
|
+
const orphans = (appliedRemoves.length > 0 ? await am.orphanedSoftDepsAfterRemoving(appliedRemoves) : []).filter((o) => o.targetRef);
|
|
4314
|
+
if (orphans.length > 0) {
|
|
4315
|
+
const names = orphans.map((o) => bareSoftDepName(o.target)).join(", ");
|
|
4316
|
+
parts.push(
|
|
4317
|
+
pc5.dim(
|
|
4318
|
+
`${names} no longer referenced by any installed asset \u2014 remove with \`skaile remove\``
|
|
4319
|
+
)
|
|
4320
|
+
);
|
|
4321
|
+
}
|
|
4184
4322
|
if (parts.length) state.message = parts.join(" ");
|
|
4185
4323
|
}
|
|
4186
4324
|
async function syncAll() {
|
|
@@ -4458,8 +4596,20 @@ var KEYMAP = [
|
|
|
4458
4596
|
}
|
|
4459
4597
|
},
|
|
4460
4598
|
{ keys: [" "], run: () => void nextTab() },
|
|
4461
|
-
{
|
|
4462
|
-
|
|
4599
|
+
{
|
|
4600
|
+
keys: ["\x1B[A", "k"],
|
|
4601
|
+
run: async () => {
|
|
4602
|
+
moveCursor(-1);
|
|
4603
|
+
await previewSoftDepsUnderCursor();
|
|
4604
|
+
}
|
|
4605
|
+
},
|
|
4606
|
+
{
|
|
4607
|
+
keys: ["\x1B[B", "j"],
|
|
4608
|
+
run: async () => {
|
|
4609
|
+
moveCursor(1);
|
|
4610
|
+
await previewSoftDepsUnderCursor();
|
|
4611
|
+
}
|
|
4612
|
+
},
|
|
4463
4613
|
// Collapse / expand — assets tab
|
|
4464
4614
|
{ keys: ["\x1B[C"], when: TAB_ASSETS, run: expandUnderCursor },
|
|
4465
4615
|
{ keys: ["\x1B[D"], when: TAB_ASSETS, run: collapseOrJumpUnderCursor },
|
|
@@ -4470,13 +4620,14 @@ var KEYMAP = [
|
|
|
4470
4620
|
{
|
|
4471
4621
|
keys: ["+"],
|
|
4472
4622
|
when: TAB_ASSETS,
|
|
4473
|
-
run: () => {
|
|
4623
|
+
run: async () => {
|
|
4474
4624
|
const row = state.visibleRows[state.cursor];
|
|
4475
4625
|
if (!row) return;
|
|
4476
4626
|
if (!actOnHeader(row, "add")) {
|
|
4477
4627
|
const ref = assetRefOf(row);
|
|
4478
4628
|
if (ref) setSelection(ref, state.pendingAdds.has(ref) ? "clear" : "add");
|
|
4479
4629
|
}
|
|
4630
|
+
await previewSoftDepsUnderCursor();
|
|
4480
4631
|
}
|
|
4481
4632
|
},
|
|
4482
4633
|
// Sources tab: + / - / space select (asset leaf or org/repo bulk header).
|
|
@@ -4507,13 +4658,14 @@ var KEYMAP = [
|
|
|
4507
4658
|
{
|
|
4508
4659
|
keys: ["-"],
|
|
4509
4660
|
when: TAB_ASSETS,
|
|
4510
|
-
run: () => {
|
|
4661
|
+
run: async () => {
|
|
4511
4662
|
const row = state.visibleRows[state.cursor];
|
|
4512
4663
|
if (!row) return;
|
|
4513
4664
|
if (!actOnHeader(row, "remove")) {
|
|
4514
4665
|
const ref = assetRefOf(row);
|
|
4515
4666
|
if (ref) setSelection(ref, state.pendingRemoves.has(ref) ? "clear" : "remove");
|
|
4516
4667
|
}
|
|
4668
|
+
await previewSoftDepsUnderCursor();
|
|
4517
4669
|
}
|
|
4518
4670
|
},
|
|
4519
4671
|
// Space — auto-toggle (single asset or bulk header)
|
|
@@ -4812,7 +4964,7 @@ function action2(fn) {
|
|
|
4812
4964
|
};
|
|
4813
4965
|
}
|
|
4814
4966
|
async function reconcileAndReport(projectDir, plugins) {
|
|
4815
|
-
const { reconcilePlugins } = await import('../plugin-store-
|
|
4967
|
+
const { reconcilePlugins } = await import('../plugin-store-3DAVGKHN.js');
|
|
4816
4968
|
if (plugins.length === 0) {
|
|
4817
4969
|
logInfo("No plugins declared \u2014 nothing to reconcile.");
|
|
4818
4970
|
return;
|
|
@@ -4828,7 +4980,7 @@ async function reconcileAndReport(projectDir, plugins) {
|
|
|
4828
4980
|
async function runInstall2(spec, opts) {
|
|
4829
4981
|
const projectDir = path14__default.resolve(opts.projectDir);
|
|
4830
4982
|
const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
|
|
4831
|
-
const { specName } = await import('../plugin-store-
|
|
4983
|
+
const { specName } = await import('../plugin-store-3DAVGKHN.js');
|
|
4832
4984
|
const yamlPath = path14__default.join(projectDir, "skaile.yaml");
|
|
4833
4985
|
const editor = WorkspaceYamlEditor2.load(yamlPath);
|
|
4834
4986
|
const replaced = editor.addPlugin(spec, specName);
|
|
@@ -4840,7 +4992,7 @@ async function runInstall2(spec, opts) {
|
|
|
4840
4992
|
async function runRemove(name, opts) {
|
|
4841
4993
|
const projectDir = path14__default.resolve(opts.projectDir);
|
|
4842
4994
|
const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
|
|
4843
|
-
const { specName } = await import('../plugin-store-
|
|
4995
|
+
const { specName } = await import('../plugin-store-3DAVGKHN.js');
|
|
4844
4996
|
const yamlPath = path14__default.join(projectDir, "skaile.yaml");
|
|
4845
4997
|
const editor = WorkspaceYamlEditor2.load(yamlPath);
|
|
4846
4998
|
const removed = editor.removePlugin(name, specName);
|
|
@@ -4868,7 +5020,7 @@ async function runList(opts) {
|
|
|
4868
5020
|
const registry = createPluginRegistry();
|
|
4869
5021
|
if (declared.length > 0) {
|
|
4870
5022
|
try {
|
|
4871
|
-
const { loadPlugins } = await import('../plugin-store-
|
|
5023
|
+
const { loadPlugins } = await import('../plugin-store-3DAVGKHN.js');
|
|
4872
5024
|
const result = await loadPlugins(projectDir, declared, registry);
|
|
4873
5025
|
for (const f of result.failed) logWarn(f.error);
|
|
4874
5026
|
} catch (err) {
|
|
@@ -5122,7 +5274,7 @@ async function runRefInstall(ref, opts) {
|
|
|
5122
5274
|
const spinner5 = p6.spinner();
|
|
5123
5275
|
spinner5.start(`Installing ${ref}`);
|
|
5124
5276
|
try {
|
|
5125
|
-
const { openCatalogSource: openCatalogSource2, openLibrary: openLibrary2 } = await import('../open-library-
|
|
5277
|
+
const { openCatalogSource: openCatalogSource2, openLibrary: openLibrary2 } = await import('../open-library-ZNYIND7N.js');
|
|
5126
5278
|
const catalog = await openCatalogSource2({ projectDir: path14__default.resolve(opts.projectDir) });
|
|
5127
5279
|
if (!supportsInstallManifest(catalog)) {
|
|
5128
5280
|
throw new Error(
|
|
@@ -5159,7 +5311,7 @@ async function runYamlInstall(opts) {
|
|
|
5159
5311
|
return;
|
|
5160
5312
|
}
|
|
5161
5313
|
try {
|
|
5162
|
-
const { ensureSourcesCloned } = await import('../ensure-sources-
|
|
5314
|
+
const { ensureSourcesCloned } = await import('../ensure-sources-BQI2TOZZ.js');
|
|
5163
5315
|
const hydrate = ensureSourcesCloned(projectDir, { quiet: true });
|
|
5164
5316
|
if (hydrate.cloned.length > 0) {
|
|
5165
5317
|
logOk(`Cloned source(s): ${hydrate.cloned.join(", ")}`);
|
|
@@ -5195,12 +5347,22 @@ async function runYamlInstall(opts) {
|
|
|
5195
5347
|
if (result.lockWritten) {
|
|
5196
5348
|
logInfo(`Lock file written: ${S.dim("skaile.lock.yaml")}`);
|
|
5197
5349
|
}
|
|
5350
|
+
if (!opts.locked) await reportInstalledSoftDeps(am2);
|
|
5198
5351
|
} catch (err) {
|
|
5199
5352
|
spinner5.stop("Failed");
|
|
5200
5353
|
logErr(String(err));
|
|
5201
5354
|
process.exit(1);
|
|
5202
5355
|
}
|
|
5203
5356
|
}
|
|
5357
|
+
async function reportInstalledSoftDeps(am2, onHint = (l) => logInfo(S.dim(l))) {
|
|
5358
|
+
try {
|
|
5359
|
+
const declared = am2.listDeclared().map((d) => d.ref);
|
|
5360
|
+
if (declared.length === 0) return;
|
|
5361
|
+
const edges = await am2.reportSoftDeps(declared);
|
|
5362
|
+
for (const edge of edges) onHint(formatSoftDepHint(edge));
|
|
5363
|
+
} catch {
|
|
5364
|
+
}
|
|
5365
|
+
}
|
|
5204
5366
|
async function runGlobalInstall(opts, backends) {
|
|
5205
5367
|
const am2 = new AssetManager({
|
|
5206
5368
|
projectDir: path14__default.resolve(opts.projectDir),
|
|
@@ -5278,8 +5440,8 @@ function makeCleanCommand() {
|
|
|
5278
5440
|
return;
|
|
5279
5441
|
}
|
|
5280
5442
|
if (!opts.yes) {
|
|
5281
|
-
const
|
|
5282
|
-
if (p6.isCancel(
|
|
5443
|
+
const confirm7 = await p6.confirm({ message: "Proceed?" });
|
|
5444
|
+
if (p6.isCancel(confirm7) || !confirm7) {
|
|
5283
5445
|
logInfo("Cancelled.");
|
|
5284
5446
|
return;
|
|
5285
5447
|
}
|
|
@@ -5623,12 +5785,12 @@ function makeServeCommand() {
|
|
|
5623
5785
|
);
|
|
5624
5786
|
}
|
|
5625
5787
|
async function ensurePluginsLoadedForServe(projectDir) {
|
|
5626
|
-
const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-
|
|
5788
|
+
const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-SC4PWN2F.js');
|
|
5627
5789
|
try {
|
|
5628
5790
|
const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
|
|
5629
5791
|
const config = resolveSkWorkspaceConfig2(projectDir);
|
|
5630
5792
|
if (!config.plugins || config.plugins.length === 0) return;
|
|
5631
|
-
const { ensurePluginsLoaded } = await import('../plugin-store-
|
|
5793
|
+
const { ensurePluginsLoaded } = await import('../plugin-store-3DAVGKHN.js');
|
|
5632
5794
|
const { pluginRegistry } = await import('../plugin-registry/index.js');
|
|
5633
5795
|
const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
|
|
5634
5796
|
if (result.loaded.length > 0) {
|
|
@@ -5642,14 +5804,14 @@ async function ensurePluginsLoadedForServe(projectDir) {
|
|
|
5642
5804
|
}
|
|
5643
5805
|
}
|
|
5644
5806
|
async function runCompileTest(opts) {
|
|
5645
|
-
const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-
|
|
5807
|
+
const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-SC4PWN2F.js');
|
|
5646
5808
|
const { tmpdir } = await import('os');
|
|
5647
5809
|
const { dirname: dirname4, join: join5, resolve: resolve5 } = await import('path');
|
|
5648
5810
|
const { fileURLToPath: fileURLToPath2 } = await import('url');
|
|
5649
5811
|
const { unlinkSync, existsSync: existsSync13 } = await import('fs');
|
|
5650
5812
|
const { spawn } = await import('child_process');
|
|
5651
5813
|
const { portableSpawnSync: portableSpawnSync2 } = await import('../core/index.js');
|
|
5652
|
-
const { MONOREPO_ROOT } = await import('../paths-
|
|
5814
|
+
const { MONOREPO_ROOT } = await import('../paths-S7QNXYMB.js');
|
|
5653
5815
|
if (MONOREPO_ROOT === null) {
|
|
5654
5816
|
logErr2("--compile-test is only available inside the skaile-dev workspace.");
|
|
5655
5817
|
logInfo2("Run it from a checkout of skaile-ai/skaile-dev (the monorepo shell).");
|
|
@@ -6626,7 +6788,7 @@ function printTree(node, prefix = "", isLast = true) {
|
|
|
6626
6788
|
}
|
|
6627
6789
|
}
|
|
6628
6790
|
function makeTreeCommand() {
|
|
6629
|
-
return new Command("tree").description("Show full dependency tree").option("--project-dir <path>", "Project directory", process.cwd()).action((opts) => {
|
|
6791
|
+
return new Command("tree").description("Show full dependency tree").option("--project-dir <path>", "Project directory", process.cwd()).action(async (opts) => {
|
|
6630
6792
|
const am2 = new AssetManager({ projectDir: path14__default.resolve(opts.projectDir) });
|
|
6631
6793
|
const root = am2.tree();
|
|
6632
6794
|
if (root.children.length === 0) {
|
|
@@ -6635,6 +6797,14 @@ function makeTreeCommand() {
|
|
|
6635
6797
|
}
|
|
6636
6798
|
console.log();
|
|
6637
6799
|
printTree(root);
|
|
6800
|
+
const softDeps = await am2.softDepsOf(root.children.map((c) => c.ref));
|
|
6801
|
+
if (softDeps.length > 0) {
|
|
6802
|
+
console.log(` ${S.label("Soft dependencies (inferred)")}:`);
|
|
6803
|
+
for (const e of softDeps)
|
|
6804
|
+
console.log(
|
|
6805
|
+
` ${S.dim("\xB7")} ${bareSoftDepName(e.from)} \u2192 ${bareSoftDepName(e.to)} ${S.dim("(soft)")}`
|
|
6806
|
+
);
|
|
6807
|
+
}
|
|
6638
6808
|
console.log();
|
|
6639
6809
|
});
|
|
6640
6810
|
}
|
|
@@ -7278,7 +7448,7 @@ function makeVerifyCommand() {
|
|
|
7278
7448
|
});
|
|
7279
7449
|
}
|
|
7280
7450
|
function makeWhyCommand() {
|
|
7281
|
-
return new Command("why").description("Show why an asset is installed (dependency chain)").argument("<ref>", "Asset reference (kind:name)").option("--project-dir <path>", "Project directory", process.cwd()).action((ref, opts) => {
|
|
7451
|
+
return new Command("why").description("Show why an asset is installed (dependency chain)").argument("<ref>", "Asset reference (kind:name)").option("--project-dir <path>", "Project directory", process.cwd()).action(async (ref, opts) => {
|
|
7282
7452
|
const am2 = new AssetManager({ projectDir: path14__default.resolve(opts.projectDir) });
|
|
7283
7453
|
const chain = am2.why(ref);
|
|
7284
7454
|
if (chain.length === 0) {
|
|
@@ -7292,6 +7462,12 @@ function makeWhyCommand() {
|
|
|
7292
7462
|
const arrow = i === 0 ? "" : "\u2190 ";
|
|
7293
7463
|
console.log(` ${indent}${arrow}${colorRef(chain[i])}`);
|
|
7294
7464
|
}
|
|
7465
|
+
const softDeps = await am2.softDepsOf([ref]);
|
|
7466
|
+
if (softDeps.length > 0) {
|
|
7467
|
+
console.log(
|
|
7468
|
+
` ${S.dim(`also pulls (soft): ${softDeps.map((e) => bareSoftDepName(e.to)).join(", ")}`)}`
|
|
7469
|
+
);
|
|
7470
|
+
}
|
|
7295
7471
|
console.log();
|
|
7296
7472
|
});
|
|
7297
7473
|
}
|
|
@@ -7541,7 +7717,7 @@ async function bootstrapUserConfig() {
|
|
|
7541
7717
|
}
|
|
7542
7718
|
async function hydrateInitSources(resolved, created) {
|
|
7543
7719
|
try {
|
|
7544
|
-
const { ensureSourcesCloned } = await import('../ensure-sources-
|
|
7720
|
+
const { ensureSourcesCloned } = await import('../ensure-sources-BQI2TOZZ.js');
|
|
7545
7721
|
const hydrate = ensureSourcesCloned(resolved, { quiet: true });
|
|
7546
7722
|
for (const n of hydrate.cloned) created.push(`~/.skaile/cache/sources/${n}/`);
|
|
7547
7723
|
if (hydrate.failed.length > 0) {
|
|
@@ -7577,7 +7753,7 @@ function printInitSummary(resolved, projectDir, created) {
|
|
|
7577
7753
|
console.log();
|
|
7578
7754
|
}
|
|
7579
7755
|
program.command("setup").description("Interactive provider setup wizard").action(async () => {
|
|
7580
|
-
const { cmdSetup } = await import('../setup-
|
|
7756
|
+
const { cmdSetup } = await import('../setup-WBGDT2WY.js');
|
|
7581
7757
|
await cmdSetup([], { projectDir: process.cwd() });
|
|
7582
7758
|
});
|
|
7583
7759
|
program.addCommand(makeInstallCommand());
|