@skaile/workspaces 1.1.0 → 1.3.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.
Files changed (183) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/{asset-feeds-NIAABO6U.js → asset-feeds-NEZKG6YS.js} +9 -9
  3. package/dist/{asset-feeds-NIAABO6U.js.map → asset-feeds-NEZKG6YS.js.map} +1 -1
  4. package/dist/asset-manager/index.js +7 -7
  5. package/dist/asset-manager/installer.js +6 -6
  6. package/dist/asset-manager/renderers.js +2 -2
  7. package/dist/bridge/drivers/claude-sdk.js +40 -5
  8. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  9. package/dist/bridge/drivers/codex.js +1 -1
  10. package/dist/bridge/drivers/continue.js +2 -2
  11. package/dist/bridge/drivers/echo.js +1 -1
  12. package/dist/bridge/drivers/gemini.js +3 -3
  13. package/dist/bridge/drivers/goose.js +2 -2
  14. package/dist/bridge/drivers/omp.js +1 -1
  15. package/dist/bridge/drivers/opencode.js +2 -2
  16. package/dist/bridge/drivers/qwen.js +3 -3
  17. package/dist/bridge/index.js +3 -2
  18. package/dist/bridge/src/cloud.d.ts +89 -0
  19. package/dist/bridge/src/cloud.d.ts.map +1 -0
  20. package/dist/bridge/src/drivers/claude-sdk.d.ts +12 -1
  21. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  22. package/dist/bridge/src/index.d.ts +1 -0
  23. package/dist/bridge/src/index.d.ts.map +1 -1
  24. package/dist/bridge/src/types.d.ts +31 -0
  25. package/dist/bridge/src/types.d.ts.map +1 -1
  26. package/dist/{chunk-7X53KHQ4.js → chunk-4OVPB7SI.js} +4 -2
  27. package/dist/chunk-4OVPB7SI.js.map +1 -0
  28. package/dist/{chunk-SHOKXRL4.js → chunk-5XS3BFJS.js} +8 -4
  29. package/dist/chunk-5XS3BFJS.js.map +1 -0
  30. package/dist/{chunk-EE4NL25D.js → chunk-7CNIRF42.js} +111 -45
  31. package/dist/chunk-7CNIRF42.js.map +1 -0
  32. package/dist/{chunk-MG6UIS7G.js → chunk-AZAS3FKN.js} +6 -3
  33. package/dist/chunk-AZAS3FKN.js.map +1 -0
  34. package/dist/{chunk-BCJL2UNH.js → chunk-BDUANIAR.js} +3 -3
  35. package/dist/{chunk-BCJL2UNH.js.map → chunk-BDUANIAR.js.map} +1 -1
  36. package/dist/{chunk-KVZ6XKVN.js → chunk-BZMTR5WW.js} +3 -3
  37. package/dist/{chunk-KVZ6XKVN.js.map → chunk-BZMTR5WW.js.map} +1 -1
  38. package/dist/{chunk-INUQVXUE.js → chunk-ETYDLXI5.js} +2 -2
  39. package/dist/{chunk-INUQVXUE.js.map → chunk-ETYDLXI5.js.map} +1 -1
  40. package/dist/{chunk-CU5Z7GH3.js → chunk-GB4SEEK4.js} +13 -5
  41. package/dist/chunk-GB4SEEK4.js.map +1 -0
  42. package/dist/chunk-ISQWMBKD.js +74 -0
  43. package/dist/chunk-ISQWMBKD.js.map +1 -0
  44. package/dist/{chunk-ZUE2PIJ5.js → chunk-JQMIG7D3.js} +3 -3
  45. package/dist/{chunk-ZUE2PIJ5.js.map → chunk-JQMIG7D3.js.map} +1 -1
  46. package/dist/{chunk-UY5Q2NZH.js → chunk-K5SD7FSF.js} +3 -3
  47. package/dist/{chunk-UY5Q2NZH.js.map → chunk-K5SD7FSF.js.map} +1 -1
  48. package/dist/{chunk-L3SLC3S4.js → chunk-OBSSORCE.js} +6 -6
  49. package/dist/{chunk-L3SLC3S4.js.map → chunk-OBSSORCE.js.map} +1 -1
  50. package/dist/{chunk-5AGARSQT.js → chunk-OUWNTFDG.js} +31 -3
  51. package/dist/chunk-OUWNTFDG.js.map +1 -0
  52. package/dist/{chunk-VYIK5IE5.js → chunk-P3MJYPZE.js} +24 -5
  53. package/dist/chunk-P3MJYPZE.js.map +1 -0
  54. package/dist/{chunk-B4IOSXRZ.js → chunk-PSMW5HLX.js} +19 -8
  55. package/dist/chunk-PSMW5HLX.js.map +1 -0
  56. package/dist/{chunk-U5J77IIZ.js → chunk-QK5JDAFF.js} +4 -4
  57. package/dist/{chunk-U5J77IIZ.js.map → chunk-QK5JDAFF.js.map} +1 -1
  58. package/dist/{chunk-DMHVL5MC.js → chunk-RHMQPLIK.js} +5 -5
  59. package/dist/{chunk-DMHVL5MC.js.map → chunk-RHMQPLIK.js.map} +1 -1
  60. package/dist/{chunk-52XHXSBN.js → chunk-RJ3HUSBC.js} +3 -3
  61. package/dist/{chunk-52XHXSBN.js.map → chunk-RJ3HUSBC.js.map} +1 -1
  62. package/dist/{chunk-Z4EJOBEL.js → chunk-RYRJEVQ4.js} +7 -7
  63. package/dist/{chunk-Z4EJOBEL.js.map → chunk-RYRJEVQ4.js.map} +1 -1
  64. package/dist/{chunk-QVE3ILCY.js → chunk-SUOGVHGJ.js} +2 -2
  65. package/dist/chunk-SUOGVHGJ.js.map +1 -0
  66. package/dist/{chunk-BM37QD6U.js → chunk-TJRWGMD2.js} +3 -3
  67. package/dist/{chunk-BM37QD6U.js.map → chunk-TJRWGMD2.js.map} +1 -1
  68. package/dist/{chunk-35TLBMHX.js → chunk-WFEPI5LA.js} +5 -5
  69. package/dist/{chunk-35TLBMHX.js.map → chunk-WFEPI5LA.js.map} +1 -1
  70. package/dist/{chunk-OIGYDVCM.js → chunk-XBG2YDQQ.js} +3 -3
  71. package/dist/{chunk-OIGYDVCM.js.map → chunk-XBG2YDQQ.js.map} +1 -1
  72. package/dist/{chunk-WRBF34YE.js → chunk-XKARS6EE.js} +3 -3
  73. package/dist/{chunk-WRBF34YE.js.map → chunk-XKARS6EE.js.map} +1 -1
  74. package/dist/{chunk-YI5OZ7QO.js → chunk-YOPSHV7V.js} +2 -2
  75. package/dist/{chunk-YI5OZ7QO.js.map → chunk-YOPSHV7V.js.map} +1 -1
  76. package/dist/{chunk-G2X3THJV.js → chunk-YXEPZ7LP.js} +5 -5
  77. package/dist/{chunk-G2X3THJV.js.map → chunk-YXEPZ7LP.js.map} +1 -1
  78. package/dist/cli/index.js +104 -62
  79. package/dist/cli/index.js.map +1 -1
  80. package/dist/cli/src/commands/catalog.d.ts +20 -0
  81. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  82. package/dist/cli/src/commands/project.d.ts +9 -0
  83. package/dist/cli/src/commands/project.d.ts.map +1 -1
  84. package/dist/cli/src/helpers.d.ts +10 -0
  85. package/dist/cli/src/helpers.d.ts.map +1 -1
  86. package/dist/connectors/config.js +4 -4
  87. package/dist/connectors/index.js +5 -5
  88. package/dist/core/index.js +3 -3
  89. package/dist/core/runtime-assets.js +2 -2
  90. package/dist/core/src/index.d.ts +2 -2
  91. package/dist/core/src/index.d.ts.map +1 -1
  92. package/dist/core/src/settings.d.ts +18 -0
  93. package/dist/core/src/settings.d.ts.map +1 -1
  94. package/dist/core/src/workspace-config.d.ts +45 -0
  95. package/dist/core/src/workspace-config.d.ts.map +1 -1
  96. package/dist/core/workspace-config.js +1 -1
  97. package/dist/deploy/index.js +3 -3
  98. package/dist/discovery/index.js +2 -2
  99. package/dist/{ensure-sources-MJYHZ77Y.js → ensure-sources-4BAJGJRK.js} +10 -10
  100. package/dist/{ensure-sources-MJYHZ77Y.js.map → ensure-sources-4BAJGJRK.js.map} +1 -1
  101. package/dist/factory-assets/connectors/box.js +5 -5
  102. package/dist/factory-assets/connectors/deploy.js +5 -5
  103. package/dist/factory-assets/connectors/devserver.js +5 -5
  104. package/dist/factory-assets/connectors/flow/adapter.js +5 -5
  105. package/dist/factory-assets/connectors/flow/engine.js +3 -3
  106. package/dist/factory-assets/connectors/flow/run-flow.js +6 -6
  107. package/dist/factory-assets/connectors/flow.js +5 -5
  108. package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -1
  109. package/dist/factory-assets/connectors/git.js +5 -5
  110. package/dist/factory-assets/connectors/gmail.js +5 -5
  111. package/dist/factory-assets/connectors/googledrive.js +5 -5
  112. package/dist/factory-assets/connectors/local.js +5 -5
  113. package/dist/factory-assets/connectors/mattermost.js +5 -5
  114. package/dist/factory-assets/connectors/memory.js +5 -5
  115. package/dist/factory-assets/connectors/minio.js +5 -5
  116. package/dist/factory-assets/connectors/postgres.js +5 -5
  117. package/dist/factory-assets/connectors/s3.js +5 -5
  118. package/dist/factory-assets/connectors/sharepoint.js +5 -5
  119. package/dist/factory-assets/connectors/sqlite.js +5 -5
  120. package/dist/factory-assets/connectors/static-server.js +5 -5
  121. package/dist/factory-assets/connectors/tunnel.js +5 -5
  122. package/dist/factory-assets/connectors/webdav.js +5 -5
  123. package/dist/factory-assets/connectors/xstate-store.js +5 -5
  124. package/dist/factory-assets/connectors/xstate.js +5 -5
  125. package/dist/{flows-4Z74KY2H.js → flows-UFCOGAAM.js} +3 -3
  126. package/dist/{flows-4Z74KY2H.js.map → flows-UFCOGAAM.js.map} +1 -1
  127. package/dist/helpers-2OL4FRFB.js +22 -0
  128. package/dist/{helpers-7KOVCMHW.js.map → helpers-2OL4FRFB.js.map} +1 -1
  129. package/dist/library/index.js +6 -6
  130. package/dist/library/install.js +3 -3
  131. package/dist/{open-library-PGTL332T.js → open-library-RPV2LIKL.js} +13 -13
  132. package/dist/{open-library-PGTL332T.js.map → open-library-RPV2LIKL.js.map} +1 -1
  133. package/dist/{paths-S7QNXYMB.js → paths-ML33B5SB.js} +6 -6
  134. package/dist/{paths-S7QNXYMB.js.map → paths-ML33B5SB.js.map} +1 -1
  135. package/dist/{plugin-store-3DAVGKHN.js → plugin-store-G4HKWCTU.js} +5 -5
  136. package/dist/{plugin-store-3DAVGKHN.js.map → plugin-store-G4HKWCTU.js.map} +1 -1
  137. package/dist/plugins/src/catalog-source.d.ts +7 -0
  138. package/dist/plugins/src/catalog-source.d.ts.map +1 -1
  139. package/dist/runner/index.js +10 -9
  140. package/dist/runner/src/cloud-bundle.d.ts +36 -0
  141. package/dist/runner/src/cloud-bundle.d.ts.map +1 -0
  142. package/dist/runner/src/resources.d.ts.map +1 -1
  143. package/dist/runner/src/serve.d.ts.map +1 -1
  144. package/dist/runner/src/session-builder.d.ts +32 -0
  145. package/dist/runner/src/session-builder.d.ts.map +1 -1
  146. package/dist/sdk/asset-manager.js +7 -7
  147. package/dist/sdk/bridge.js +3 -2
  148. package/dist/sdk/core.js +3 -3
  149. package/dist/sdk/flow.js +3 -3
  150. package/dist/sdk/index.js +10 -9
  151. package/dist/sdk/index.js.map +1 -1
  152. package/dist/sdk/runner.js +10 -9
  153. package/dist/sdk/store.js +1 -1
  154. package/dist/{setup-WBGDT2WY.js → setup-WS6PF6JQ.js} +8 -7
  155. package/dist/setup-WS6PF6JQ.js.map +1 -0
  156. package/dist/{source-FJXRQ2NU.js → source-22U5NOY4.js} +14 -14
  157. package/dist/{source-FJXRQ2NU.js.map → source-22U5NOY4.js.map} +1 -1
  158. package/dist/store/index.js +1 -1
  159. package/dist/store/src/store.d.ts.map +1 -1
  160. package/dist/{store-client-YGDN4L2G.js → store-client-YLMBH5MF.js} +6 -6
  161. package/dist/{store-client-YGDN4L2G.js.map → store-client-YLMBH5MF.js.map} +1 -1
  162. package/dist/tui/index.js +10 -9
  163. package/dist/tui/index.js.map +1 -1
  164. package/dist/types/manifests.js +1 -1
  165. package/dist/types/src/manifests/agent.d.ts +47 -8
  166. package/dist/types/src/manifests/agent.d.ts.map +1 -1
  167. package/dist/types/src/manifests/index.d.ts +1 -1
  168. package/dist/types/src/manifests/index.d.ts.map +1 -1
  169. package/dist/workspace-plugin/adapters/mcp.js +1 -1
  170. package/dist/workspace-plugin/adapters/omp.js +3 -3
  171. package/dist/workspace-plugin/index.js +1 -1
  172. package/package.json +1 -1
  173. package/dist/chunk-5AGARSQT.js.map +0 -1
  174. package/dist/chunk-7X53KHQ4.js.map +0 -1
  175. package/dist/chunk-B4IOSXRZ.js.map +0 -1
  176. package/dist/chunk-CU5Z7GH3.js.map +0 -1
  177. package/dist/chunk-EE4NL25D.js.map +0 -1
  178. package/dist/chunk-MG6UIS7G.js.map +0 -1
  179. package/dist/chunk-QVE3ILCY.js.map +0 -1
  180. package/dist/chunk-SHOKXRL4.js.map +0 -1
  181. package/dist/chunk-VYIK5IE5.js.map +0 -1
  182. package/dist/helpers-7KOVCMHW.js +0 -22
  183. package/dist/setup-WBGDT2WY.js.map +0 -1
package/dist/cli/index.js CHANGED
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
- import { makeSourceCommand, syncProjectSources } from '../chunk-Z4EJOBEL.js';
3
- import { openCatalogSource, openLibraryManager, createFullRegistry, openLibrary } from '../chunk-DMHVL5MC.js';
4
- import { logErr, S, logOk, logInfo, colorRef, logWarn, bareSoftDepName, kindColorPad, kindColor, formatSoftDepSection, formatRelativeTime, fitWidth, formatSoftDepRemovePreview, formatSoftDepAddPreview } from '../chunk-SHOKXRL4.js';
5
- import { getStoreConfig, storeFetch, saveStoreTokens, clearStoreTokens, isStoreAuthenticated } from '../chunk-ZUE2PIJ5.js';
6
- import { AI_RESOURCES, aiResourceRoots } from '../chunk-OIGYDVCM.js';
2
+ import { makeSourceCommand, syncProjectSources } from '../chunk-RYRJEVQ4.js';
3
+ import { openCatalogSource, openLibraryManager, createFullRegistry, openLibrary } from '../chunk-RHMQPLIK.js';
4
+ import { logErr, S, logOk, logInfo, colorRef, logWarn, kindColorPad, kindColor, formatSoftDepSection, bareSoftDepName, formatSoftDepHint, formatRelativeTime, fitWidth, formatSoftDepRemovePreview, formatSoftDepAddPreview } from '../chunk-5XS3BFJS.js';
5
+ import { getStoreConfig, storeFetch, saveStoreTokens, clearStoreTokens, isStoreAuthenticated } from '../chunk-JQMIG7D3.js';
6
+ import { AI_RESOURCES, aiResourceRoots } from '../chunk-XBG2YDQQ.js';
7
7
  import { LocalSecretsProvider } from '../chunk-6BEGKO2Q.js';
8
- import { resolveLibraryDir } from '../chunk-VYIK5IE5.js';
9
- import '../chunk-KVZ6XKVN.js';
8
+ import { resolveLibraryDir } from '../chunk-P3MJYPZE.js';
9
+ import '../chunk-BZMTR5WW.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-G2X3THJV.js';
13
+ import { runFlow, resumeFlow } from '../chunk-YXEPZ7LP.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-EE4NL25D.js';
17
- import { buildClaudePluginFiles } from '../chunk-INUQVXUE.js';
16
+ import { runAgentChat, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, loadAgentManifest, compileComposition, MarkdownStreamer, resolveMixin } from '../chunk-7CNIRF42.js';
17
+ import { buildClaudePluginFiles } from '../chunk-ETYDLXI5.js';
18
18
  import '../chunk-X5YPJV4N.js';
19
19
  import '../chunk-O7SG5PC2.js';
20
20
  import '../chunk-7QBNJTTQ.js';
@@ -23,23 +23,24 @@ 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-UY5Q2NZH.js';
26
+ import '../chunk-K5SD7FSF.js';
27
+ import '../chunk-ISQWMBKD.js';
27
28
  import '../chunk-BMQKMOQY.js';
28
29
  import '../chunk-GAH4YRCI.js';
29
30
  import '../chunk-RRVQAE5D.js';
30
- import '../chunk-QVE3ILCY.js';
31
+ import '../chunk-SUOGVHGJ.js';
31
32
  import '../chunk-LV2HPH3C.js';
32
- import '../chunk-B4IOSXRZ.js';
33
- import '../chunk-BCJL2UNH.js';
33
+ import '../chunk-PSMW5HLX.js';
34
+ import '../chunk-BDUANIAR.js';
34
35
  import '../chunk-6E6PKKAD.js';
35
36
  import { loadFlow, loadAllFlows } from '../chunk-SKADPHAM.js';
36
37
  import '../chunk-DEYYRFQU.js';
37
38
  import '../chunk-IFGTRL2I.js';
38
- import { AssetManager, NON_DEPLOYABLE_KINDS, MissingManifestError } from '../chunk-L3SLC3S4.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';
39
+ import { AssetManager, NON_DEPLOYABLE_KINDS, MissingManifestError } from '../chunk-OBSSORCE.js';
40
+ import '../chunk-WFEPI5LA.js';
41
+ import { readLock, resolveSettings, globalSettingsPath, projectSettingsPath, loadSettings, saveSettings, portableSpawn, portableSpawnSync, WorkspaceYamlEditor, checkAgentSkillConformance } from '../chunk-AZAS3FKN.js';
42
+ import '../chunk-TJRWGMD2.js';
43
+ import { globalCacheRoot, sourceCacheKey, getGlobalCacheDir, resolveAgentDir, resolveSkWorkspaceConfig } from '../chunk-OUWNTFDG.js';
43
44
  import { SKAILE_MANIFEST_FILENAME, decodeSkaileManifest, loadSkPublishManifest, saveSkPublishManifest } from '../chunk-DZCK7GRW.js';
44
45
  import { parseFrontmatter } from '../chunk-BQCGFPHW.js';
45
46
  import { parseAssetRef, ASSET_KINDS, isValidAssetName, slugifyAssetName, ASSET_NAME_HINT, assetRefToStr } from '../chunk-GEEW6SY2.js';
@@ -50,8 +51,8 @@ import { assetSearchDirs, detectDomains } from '../chunk-ZAP2BDHG.js';
50
51
  import { openSqlite } from '../chunk-JB35MVBN.js';
51
52
  import '../chunk-KTBKW2FI.js';
52
53
  import '../chunk-UQ6LFBPZ.js';
53
- import '../chunk-WRBF34YE.js';
54
- import '../chunk-CU5Z7GH3.js';
54
+ import '../chunk-XKARS6EE.js';
55
+ import '../chunk-GB4SEEK4.js';
55
56
  import '../chunk-CGYEHQOX.js';
56
57
  import '../chunk-NSBPE2FW.js';
57
58
  import * as fs12 from 'fs';
@@ -92,7 +93,7 @@ async function searchLocal(query, kind, opts, showStore, airGapped) {
92
93
  const projectDir = path14__default.resolve(opts.projectDir);
93
94
  let entries = new AssetManager({ projectDir }).search(query, kind);
94
95
  if (entries.length === 0 && !query && !kind && !airGapped) {
95
- const { autoSyncForSearch } = await import('../source-FJXRQ2NU.js');
96
+ const { autoSyncForSearch } = await import('../source-22U5NOY4.js');
96
97
  if (await autoSyncForSearch(projectDir)) {
97
98
  entries = new AssetManager({ projectDir }).search(query, kind);
98
99
  }
@@ -145,7 +146,7 @@ async function searchStore(query, kind, opts, airGapped) {
145
146
  return;
146
147
  }
147
148
  try {
148
- const { getStoreConfig: getStoreConfig2, storeFetch: storeFetch2 } = await import('../store-client-YGDN4L2G.js');
149
+ const { getStoreConfig: getStoreConfig2, storeFetch: storeFetch2 } = await import('../store-client-YLMBH5MF.js');
149
150
  const config = getStoreConfig2();
150
151
  const params = {};
151
152
  if (query) params.q = query;
@@ -190,30 +191,54 @@ function parseBackendFilter(raw) {
190
191
  return out.length > 0 ? out : void 0;
191
192
  }
192
193
  async function promptSoftDepAdds(am2, ref, io) {
194
+ if (io.noSoftDeps) return;
193
195
  const edges = await am2.reportSoftDeps([ref]);
194
196
  if (edges.length === 0) return;
195
- if (!io.isTTY) {
197
+ const addEdge = async (toRef) => {
198
+ try {
199
+ for (const a of await am2.add(toRef, { link: io.link })) io.onAdded(a);
200
+ } catch (err) {
201
+ io.onError(`Failed to add ${toRef}: ${err}`);
202
+ }
203
+ };
204
+ if (io.withSoftDeps) {
196
205
  for (const edge of edges) {
197
- const hint = edge.toRef ? ` \u2014 run \`skaile add ${edge.toRef}\` to include it.` : "";
198
- io.onHint(
199
- `${bareSoftDepName(edge.from)} references ${bareSoftDepName(edge.to)} (soft dependency)${hint}`
200
- );
206
+ if (edge.toRef) await addEdge(edge.toRef);
207
+ else io.onError(`Cannot auto-add ${bareSoftDepName(edge.to)} \u2014 no resolvable ref.`);
201
208
  }
202
209
  return;
203
210
  }
211
+ if (!io.isTTY) {
212
+ for (const edge of edges) io.onHint(formatSoftDepHint(edge));
213
+ return;
214
+ }
204
215
  for (const edge of edges) {
205
216
  if (!edge.toRef) continue;
206
217
  const yes = await io.confirm(
207
218
  `${bareSoftDepName(edge.from)} references ${bareSoftDepName(edge.to)} (soft dependency) \u2014 also add it?`
208
219
  );
209
220
  if (io.isCancel(yes)) break;
210
- if (yes === true) {
211
- try {
212
- for (const a of await am2.add(edge.toRef, { link: io.link })) io.onAdded(a);
213
- } catch (err) {
214
- io.onError(`Failed to add ${edge.toRef}: ${err}`);
215
- }
221
+ if (yes === true) await addEdge(edge.toRef);
222
+ }
223
+ }
224
+ async function promptSoftDepRemovals(am2, ref, io) {
225
+ if (io.noSoftDeps) return;
226
+ const orphans = (await am2.orphanedSoftDepsAfterRemoving([ref])).filter((o) => o.targetRef);
227
+ if (orphans.length === 0) return;
228
+ if (!io.isTTY) {
229
+ for (const o of orphans) {
230
+ io.onHint(
231
+ `${bareSoftDepName(o.target)} is now an orphaned soft dependency of ${ref} \u2014 run \`skaile remove ${o.targetRef}\` to remove it.`
232
+ );
216
233
  }
234
+ return;
235
+ }
236
+ for (const o of orphans) {
237
+ const yes = await io.confirm(
238
+ `${bareSoftDepName(o.target)} is a soft dependency of ${ref} and is no longer referenced by any installed asset \u2014 also remove it?`
239
+ );
240
+ if (io.isCancel(yes)) break;
241
+ if (yes === true && am2.remove(o.targetRef)) io.onRemoved(`Removed ${o.targetRef}`);
217
242
  }
218
243
  }
219
244
  function makeAddCommand() {
@@ -223,7 +248,14 @@ function makeAddCommand() {
223
248
  ).option("--target <agent>", "Driver target", "claude-code").option(
224
249
  "--link",
225
250
  "symlink local-path assets instead of copying (dev loop; machine-local, not for committing)"
226
- ).action(async (ref, opts) => {
251
+ ).option(
252
+ "--with-soft-deps",
253
+ "also add the asset's report-only soft (body-link) deps, without prompting"
254
+ ).option("--no-soft-deps", "skip the soft-dep prompt entirely (don't add, don't report)").action(async (ref, opts) => {
255
+ if (opts.withSoftDeps && opts.softDeps === false) {
256
+ logErr("--with-soft-deps and --no-soft-deps are mutually exclusive.");
257
+ process.exit(1);
258
+ }
227
259
  const backends = parseBackendFilter(opts.backend);
228
260
  const am2 = new AssetManager({
229
261
  projectDir: path14__default.resolve(opts.projectDir),
@@ -239,6 +271,8 @@ function makeAddCommand() {
239
271
  await promptSoftDepAdds(am2, ref, {
240
272
  isTTY: !!process.stdin.isTTY,
241
273
  link: opts.link,
274
+ withSoftDeps: opts.withSoftDeps,
275
+ noSoftDeps: opts.softDeps === false,
242
276
  confirm: (message) => p6.confirm({ message, initialValue: false }),
243
277
  isCancel: p6.isCancel,
244
278
  onAdded: logOk,
@@ -264,7 +298,7 @@ function makeRemoveCommand() {
264
298
  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(
265
299
  "--backend <ids>",
266
300
  "Comma-separated global backends to undeploy from (default: all resolved); implies --global"
267
- ).option("--target <agent>", "Driver target", "claude-code").action(async (ref, opts) => {
301
+ ).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) => {
268
302
  const backends = parseBackendFilter(opts.backend);
269
303
  const am2 = new AssetManager({
270
304
  projectDir: path14__default.resolve(opts.projectDir),
@@ -278,16 +312,14 @@ function makeRemoveCommand() {
278
312
  return;
279
313
  }
280
314
  logOk(`Removed ${ref}`);
281
- for (const orphan of await am2.orphanedSoftDepsAfterRemoving([ref])) {
282
- if (!orphan.targetRef) continue;
283
- const name = bareSoftDepName(orphan.target);
284
- const yes = await p6.confirm({
285
- message: `${name} is a soft dependency of ${ref} and is no longer referenced by any installed asset \u2014 also remove it?`,
286
- initialValue: false
287
- });
288
- if (p6.isCancel(yes)) break;
289
- if (yes === true && am2.remove(orphan.targetRef)) logOk(`Removed ${orphan.targetRef}`);
290
- }
315
+ await promptSoftDepRemovals(am2, ref, {
316
+ isTTY: !!process.stdin.isTTY,
317
+ noSoftDeps: opts.softDeps === false,
318
+ confirm: (message) => p6.confirm({ message, initialValue: false }),
319
+ isCancel: p6.isCancel,
320
+ onRemoved: logOk,
321
+ onHint: (line) => logInfo(S.dim(line))
322
+ });
291
323
  });
292
324
  }
293
325
  function stateLabel(s) {
@@ -974,7 +1006,7 @@ function makeCatalogCommand() {
974
1006
  return catalog;
975
1007
  }
976
1008
  async function runLocalCatalogTest(projectDir) {
977
- const { resolveCatalogSource } = await import('../open-library-PGTL332T.js');
1009
+ const { resolveCatalogSource } = await import('../open-library-RPV2LIKL.js');
978
1010
  let resolved;
979
1011
  try {
980
1012
  resolved = await resolveCatalogSource({ projectDir });
@@ -1964,7 +1996,7 @@ async function ensureTargetsRegistered(projectDir) {
1964
1996
  const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
1965
1997
  const config = resolveSkWorkspaceConfig2(projectDir);
1966
1998
  if (config.plugins && config.plugins.length > 0) {
1967
- const { ensurePluginsLoaded } = await import('../plugin-store-3DAVGKHN.js');
1999
+ const { ensurePluginsLoaded } = await import('../plugin-store-G4HKWCTU.js');
1968
2000
  const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
1969
2001
  for (const f of result.failed) logWarn(f.error);
1970
2002
  }
@@ -3680,7 +3712,7 @@ async function previewSoftDepsUnderCursor() {
3680
3712
  }
3681
3713
  async function loadAssets() {
3682
3714
  softDepPreviewCache.clear();
3683
- const { gatherAssetFeeds } = await import('../asset-feeds-NIAABO6U.js');
3715
+ const { gatherAssetFeeds } = await import('../asset-feeds-NEZKG6YS.js');
3684
3716
  const { entries, domains, notes } = await gatherAssetFeeds(am, am.projectDir);
3685
3717
  if (notes.length > 0) {
3686
3718
  state.message = notes.map((n) => `[${n.feed}] ${n.message}`).join(" \u2022 ");
@@ -3847,7 +3879,7 @@ function reconcileCollapsedSets(rows) {
3847
3879
  async function loadSourcesAndLibraries() {
3848
3880
  try {
3849
3881
  const [{ openLibraryManager: openLibraryManager2 }, { skaileHomeDir }, { getGlobalCacheDir: getGlobalCacheDir2 }] = await Promise.all([
3850
- import('../open-library-PGTL332T.js'),
3882
+ import('../open-library-RPV2LIKL.js'),
3851
3883
  import('../library/index.js'),
3852
3884
  import('../core/index.js')
3853
3885
  ]);
@@ -4933,7 +4965,7 @@ function action2(fn) {
4933
4965
  };
4934
4966
  }
4935
4967
  async function reconcileAndReport(projectDir, plugins) {
4936
- const { reconcilePlugins } = await import('../plugin-store-3DAVGKHN.js');
4968
+ const { reconcilePlugins } = await import('../plugin-store-G4HKWCTU.js');
4937
4969
  if (plugins.length === 0) {
4938
4970
  logInfo("No plugins declared \u2014 nothing to reconcile.");
4939
4971
  return;
@@ -4949,7 +4981,7 @@ async function reconcileAndReport(projectDir, plugins) {
4949
4981
  async function runInstall2(spec, opts) {
4950
4982
  const projectDir = path14__default.resolve(opts.projectDir);
4951
4983
  const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
4952
- const { specName } = await import('../plugin-store-3DAVGKHN.js');
4984
+ const { specName } = await import('../plugin-store-G4HKWCTU.js');
4953
4985
  const yamlPath = path14__default.join(projectDir, "skaile.yaml");
4954
4986
  const editor = WorkspaceYamlEditor2.load(yamlPath);
4955
4987
  const replaced = editor.addPlugin(spec, specName);
@@ -4961,7 +4993,7 @@ async function runInstall2(spec, opts) {
4961
4993
  async function runRemove(name, opts) {
4962
4994
  const projectDir = path14__default.resolve(opts.projectDir);
4963
4995
  const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
4964
- const { specName } = await import('../plugin-store-3DAVGKHN.js');
4996
+ const { specName } = await import('../plugin-store-G4HKWCTU.js');
4965
4997
  const yamlPath = path14__default.join(projectDir, "skaile.yaml");
4966
4998
  const editor = WorkspaceYamlEditor2.load(yamlPath);
4967
4999
  const removed = editor.removePlugin(name, specName);
@@ -4989,7 +5021,7 @@ async function runList(opts) {
4989
5021
  const registry = createPluginRegistry();
4990
5022
  if (declared.length > 0) {
4991
5023
  try {
4992
- const { loadPlugins } = await import('../plugin-store-3DAVGKHN.js');
5024
+ const { loadPlugins } = await import('../plugin-store-G4HKWCTU.js');
4993
5025
  const result = await loadPlugins(projectDir, declared, registry);
4994
5026
  for (const f of result.failed) logWarn(f.error);
4995
5027
  } catch (err) {
@@ -5243,7 +5275,7 @@ async function runRefInstall(ref, opts) {
5243
5275
  const spinner5 = p6.spinner();
5244
5276
  spinner5.start(`Installing ${ref}`);
5245
5277
  try {
5246
- const { openCatalogSource: openCatalogSource2, openLibrary: openLibrary2 } = await import('../open-library-PGTL332T.js');
5278
+ const { openCatalogSource: openCatalogSource2, openLibrary: openLibrary2 } = await import('../open-library-RPV2LIKL.js');
5247
5279
  const catalog = await openCatalogSource2({ projectDir: path14__default.resolve(opts.projectDir) });
5248
5280
  if (!supportsInstallManifest(catalog)) {
5249
5281
  throw new Error(
@@ -5280,7 +5312,7 @@ async function runYamlInstall(opts) {
5280
5312
  return;
5281
5313
  }
5282
5314
  try {
5283
- const { ensureSourcesCloned } = await import('../ensure-sources-MJYHZ77Y.js');
5315
+ const { ensureSourcesCloned } = await import('../ensure-sources-4BAJGJRK.js');
5284
5316
  const hydrate = ensureSourcesCloned(projectDir, { quiet: true });
5285
5317
  if (hydrate.cloned.length > 0) {
5286
5318
  logOk(`Cloned source(s): ${hydrate.cloned.join(", ")}`);
@@ -5316,12 +5348,22 @@ async function runYamlInstall(opts) {
5316
5348
  if (result.lockWritten) {
5317
5349
  logInfo(`Lock file written: ${S.dim("skaile.lock.yaml")}`);
5318
5350
  }
5351
+ if (!opts.locked) await reportInstalledSoftDeps(am2);
5319
5352
  } catch (err) {
5320
5353
  spinner5.stop("Failed");
5321
5354
  logErr(String(err));
5322
5355
  process.exit(1);
5323
5356
  }
5324
5357
  }
5358
+ async function reportInstalledSoftDeps(am2, onHint = (l) => logInfo(S.dim(l))) {
5359
+ try {
5360
+ const declared = am2.listDeclared().map((d) => d.ref);
5361
+ if (declared.length === 0) return;
5362
+ const edges = await am2.reportSoftDeps(declared);
5363
+ for (const edge of edges) onHint(formatSoftDepHint(edge));
5364
+ } catch {
5365
+ }
5366
+ }
5325
5367
  async function runGlobalInstall(opts, backends) {
5326
5368
  const am2 = new AssetManager({
5327
5369
  projectDir: path14__default.resolve(opts.projectDir),
@@ -5744,12 +5786,12 @@ function makeServeCommand() {
5744
5786
  );
5745
5787
  }
5746
5788
  async function ensurePluginsLoadedForServe(projectDir) {
5747
- const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-7KOVCMHW.js');
5789
+ const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-2OL4FRFB.js');
5748
5790
  try {
5749
5791
  const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
5750
5792
  const config = resolveSkWorkspaceConfig2(projectDir);
5751
5793
  if (!config.plugins || config.plugins.length === 0) return;
5752
- const { ensurePluginsLoaded } = await import('../plugin-store-3DAVGKHN.js');
5794
+ const { ensurePluginsLoaded } = await import('../plugin-store-G4HKWCTU.js');
5753
5795
  const { pluginRegistry } = await import('../plugin-registry/index.js');
5754
5796
  const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
5755
5797
  if (result.loaded.length > 0) {
@@ -5763,14 +5805,14 @@ async function ensurePluginsLoadedForServe(projectDir) {
5763
5805
  }
5764
5806
  }
5765
5807
  async function runCompileTest(opts) {
5766
- const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-7KOVCMHW.js');
5808
+ const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-2OL4FRFB.js');
5767
5809
  const { tmpdir } = await import('os');
5768
5810
  const { dirname: dirname4, join: join5, resolve: resolve5 } = await import('path');
5769
5811
  const { fileURLToPath: fileURLToPath2 } = await import('url');
5770
5812
  const { unlinkSync, existsSync: existsSync13 } = await import('fs');
5771
5813
  const { spawn } = await import('child_process');
5772
5814
  const { portableSpawnSync: portableSpawnSync2 } = await import('../core/index.js');
5773
- const { MONOREPO_ROOT } = await import('../paths-S7QNXYMB.js');
5815
+ const { MONOREPO_ROOT } = await import('../paths-ML33B5SB.js');
5774
5816
  if (MONOREPO_ROOT === null) {
5775
5817
  logErr2("--compile-test is only available inside the skaile-dev workspace.");
5776
5818
  logInfo2("Run it from a checkout of skaile-ai/skaile-dev (the monorepo shell).");
@@ -7676,7 +7718,7 @@ async function bootstrapUserConfig() {
7676
7718
  }
7677
7719
  async function hydrateInitSources(resolved, created) {
7678
7720
  try {
7679
- const { ensureSourcesCloned } = await import('../ensure-sources-MJYHZ77Y.js');
7721
+ const { ensureSourcesCloned } = await import('../ensure-sources-4BAJGJRK.js');
7680
7722
  const hydrate = ensureSourcesCloned(resolved, { quiet: true });
7681
7723
  for (const n of hydrate.cloned) created.push(`~/.skaile/cache/sources/${n}/`);
7682
7724
  if (hydrate.failed.length > 0) {
@@ -7712,7 +7754,7 @@ function printInitSummary(resolved, projectDir, created) {
7712
7754
  console.log();
7713
7755
  }
7714
7756
  program.command("setup").description("Interactive provider setup wizard").action(async () => {
7715
- const { cmdSetup } = await import('../setup-WBGDT2WY.js');
7757
+ const { cmdSetup } = await import('../setup-WS6PF6JQ.js');
7716
7758
  await cmdSetup([], { projectDir: process.cwd() });
7717
7759
  });
7718
7760
  program.addCommand(makeInstallCommand());