@skaile/workspaces 1.1.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.
Files changed (83) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/dist/{asset-feeds-NIAABO6U.js → asset-feeds-OBPWVUDL.js} +4 -4
  3. package/dist/{asset-feeds-NIAABO6U.js.map → asset-feeds-OBPWVUDL.js.map} +1 -1
  4. package/dist/asset-manager/index.js +1 -1
  5. package/dist/{chunk-7X53KHQ4.js → chunk-4OVPB7SI.js} +4 -2
  6. package/dist/chunk-4OVPB7SI.js.map +1 -0
  7. package/dist/{chunk-DMHVL5MC.js → chunk-CLUJLV7Z.js} +4 -4
  8. package/dist/{chunk-DMHVL5MC.js.map → chunk-CLUJLV7Z.js.map} +1 -1
  9. package/dist/{chunk-INUQVXUE.js → chunk-EPLYVB3L.js} +2 -2
  10. package/dist/{chunk-INUQVXUE.js.map → chunk-EPLYVB3L.js.map} +1 -1
  11. package/dist/{chunk-L3SLC3S4.js → chunk-KAWKKMU4.js} +2 -2
  12. package/dist/{chunk-L3SLC3S4.js.map → chunk-KAWKKMU4.js.map} +1 -1
  13. package/dist/{chunk-SHOKXRL4.js → chunk-MQEZE6TU.js} +8 -4
  14. package/dist/chunk-MQEZE6TU.js.map +1 -0
  15. package/dist/{chunk-VYIK5IE5.js → chunk-NUS5L5ZJ.js} +21 -2
  16. package/dist/chunk-NUS5L5ZJ.js.map +1 -0
  17. package/dist/{chunk-EE4NL25D.js → chunk-TTTLCSEQ.js} +7 -12
  18. package/dist/chunk-TTTLCSEQ.js.map +1 -0
  19. package/dist/{chunk-B4IOSXRZ.js → chunk-VCBLXF7D.js} +17 -6
  20. package/dist/chunk-VCBLXF7D.js.map +1 -0
  21. package/dist/{chunk-G2X3THJV.js → chunk-W65IK4MH.js} +3 -3
  22. package/dist/{chunk-G2X3THJV.js.map → chunk-W65IK4MH.js.map} +1 -1
  23. package/dist/{chunk-Z4EJOBEL.js → chunk-XWLVIEWD.js} +5 -5
  24. package/dist/{chunk-Z4EJOBEL.js.map → chunk-XWLVIEWD.js.map} +1 -1
  25. package/dist/cli/index.js +82 -41
  26. package/dist/cli/index.js.map +1 -1
  27. package/dist/cli/src/commands/catalog.d.ts +20 -0
  28. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  29. package/dist/cli/src/commands/project.d.ts +9 -0
  30. package/dist/cli/src/commands/project.d.ts.map +1 -1
  31. package/dist/cli/src/helpers.d.ts +10 -0
  32. package/dist/cli/src/helpers.d.ts.map +1 -1
  33. package/dist/connectors/index.js +1 -1
  34. package/dist/{ensure-sources-MJYHZ77Y.js → ensure-sources-BQI2TOZZ.js} +4 -4
  35. package/dist/{ensure-sources-MJYHZ77Y.js.map → ensure-sources-BQI2TOZZ.js.map} +1 -1
  36. package/dist/factory-assets/connectors/box.js +1 -1
  37. package/dist/factory-assets/connectors/deploy.js +1 -1
  38. package/dist/factory-assets/connectors/devserver.js +1 -1
  39. package/dist/factory-assets/connectors/flow/adapter.js +1 -1
  40. package/dist/factory-assets/connectors/flow/run-flow.js +2 -2
  41. package/dist/factory-assets/connectors/flow.js +1 -1
  42. package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -1
  43. package/dist/factory-assets/connectors/git.js +1 -1
  44. package/dist/factory-assets/connectors/gmail.js +1 -1
  45. package/dist/factory-assets/connectors/googledrive.js +1 -1
  46. package/dist/factory-assets/connectors/local.js +1 -1
  47. package/dist/factory-assets/connectors/mattermost.js +1 -1
  48. package/dist/factory-assets/connectors/memory.js +1 -1
  49. package/dist/factory-assets/connectors/minio.js +1 -1
  50. package/dist/factory-assets/connectors/postgres.js +1 -1
  51. package/dist/factory-assets/connectors/s3.js +1 -1
  52. package/dist/factory-assets/connectors/sharepoint.js +1 -1
  53. package/dist/factory-assets/connectors/sqlite.js +1 -1
  54. package/dist/factory-assets/connectors/static-server.js +1 -1
  55. package/dist/factory-assets/connectors/tunnel.js +1 -1
  56. package/dist/factory-assets/connectors/webdav.js +1 -1
  57. package/dist/factory-assets/connectors/xstate-store.js +1 -1
  58. package/dist/factory-assets/connectors/xstate.js +1 -1
  59. package/dist/{helpers-7KOVCMHW.js → helpers-SC4PWN2F.js} +4 -4
  60. package/dist/{helpers-7KOVCMHW.js.map → helpers-SC4PWN2F.js.map} +1 -1
  61. package/dist/library/index.js +1 -1
  62. package/dist/{open-library-PGTL332T.js → open-library-ZNYIND7N.js} +6 -6
  63. package/dist/{open-library-PGTL332T.js.map → open-library-ZNYIND7N.js.map} +1 -1
  64. package/dist/plugins/src/catalog-source.d.ts +7 -0
  65. package/dist/plugins/src/catalog-source.d.ts.map +1 -1
  66. package/dist/runner/index.js +3 -3
  67. package/dist/runner/src/resources.d.ts.map +1 -1
  68. package/dist/sdk/asset-manager.js +1 -1
  69. package/dist/sdk/index.js +3 -3
  70. package/dist/sdk/runner.js +3 -3
  71. package/dist/sdk/store.js +1 -1
  72. package/dist/{source-FJXRQ2NU.js → source-SBFVULTG.js} +7 -7
  73. package/dist/{source-FJXRQ2NU.js.map → source-SBFVULTG.js.map} +1 -1
  74. package/dist/store/index.js +1 -1
  75. package/dist/store/src/store.d.ts.map +1 -1
  76. package/dist/tui/index.js +3 -3
  77. package/dist/workspace-plugin/index.js +1 -1
  78. package/package.json +1 -1
  79. package/dist/chunk-7X53KHQ4.js.map +0 -1
  80. package/dist/chunk-B4IOSXRZ.js.map +0 -1
  81. package/dist/chunk-EE4NL25D.js.map +0 -1
  82. package/dist/chunk-SHOKXRL4.js.map +0 -1
  83. package/dist/chunk-VYIK5IE5.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';
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
5
  import { getStoreConfig, storeFetch, saveStoreTokens, clearStoreTokens, isStoreAuthenticated } from '../chunk-ZUE2PIJ5.js';
6
6
  import { AI_RESOURCES, aiResourceRoots } from '../chunk-OIGYDVCM.js';
7
7
  import { LocalSecretsProvider } from '../chunk-6BEGKO2Q.js';
8
- import { resolveLibraryDir } from '../chunk-VYIK5IE5.js';
8
+ import { resolveLibraryDir } from '../chunk-NUS5L5ZJ.js';
9
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-G2X3THJV.js';
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-EE4NL25D.js';
17
- import { buildClaudePluginFiles } from '../chunk-INUQVXUE.js';
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';
@@ -29,13 +29,13 @@ import '../chunk-GAH4YRCI.js';
29
29
  import '../chunk-RRVQAE5D.js';
30
30
  import '../chunk-QVE3ILCY.js';
31
31
  import '../chunk-LV2HPH3C.js';
32
- import '../chunk-B4IOSXRZ.js';
32
+ import '../chunk-VCBLXF7D.js';
33
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-L3SLC3S4.js';
38
+ import { AssetManager, NON_DEPLOYABLE_KINDS, MissingManifestError } from '../chunk-KAWKKMU4.js';
39
39
  import '../chunk-35TLBMHX.js';
40
40
  import { readLock, resolveSettings, globalSettingsPath, projectSettingsPath, loadSettings, saveSettings, portableSpawn, portableSpawnSync, WorkspaceYamlEditor, checkAgentSkillConformance } from '../chunk-MG6UIS7G.js';
41
41
  import '../chunk-BM37QD6U.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-FJXRQ2NU.js');
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
  }
@@ -190,30 +190,54 @@ function parseBackendFilter(raw) {
190
190
  return out.length > 0 ? out : void 0;
191
191
  }
192
192
  async function promptSoftDepAdds(am2, ref, io) {
193
+ if (io.noSoftDeps) return;
193
194
  const edges = await am2.reportSoftDeps([ref]);
194
195
  if (edges.length === 0) return;
195
- if (!io.isTTY) {
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) {
196
204
  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
- );
205
+ if (edge.toRef) await addEdge(edge.toRef);
206
+ else io.onError(`Cannot auto-add ${bareSoftDepName(edge.to)} \u2014 no resolvable ref.`);
201
207
  }
202
208
  return;
203
209
  }
210
+ if (!io.isTTY) {
211
+ for (const edge of edges) io.onHint(formatSoftDepHint(edge));
212
+ return;
213
+ }
204
214
  for (const edge of edges) {
205
215
  if (!edge.toRef) continue;
206
216
  const yes = await io.confirm(
207
217
  `${bareSoftDepName(edge.from)} references ${bareSoftDepName(edge.to)} (soft dependency) \u2014 also add it?`
208
218
  );
209
219
  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
- }
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
+ );
216
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}`);
217
241
  }
218
242
  }
219
243
  function makeAddCommand() {
@@ -223,7 +247,14 @@ function makeAddCommand() {
223
247
  ).option("--target <agent>", "Driver target", "claude-code").option(
224
248
  "--link",
225
249
  "symlink local-path assets instead of copying (dev loop; machine-local, not for committing)"
226
- ).action(async (ref, opts) => {
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
+ }
227
258
  const backends = parseBackendFilter(opts.backend);
228
259
  const am2 = new AssetManager({
229
260
  projectDir: path14__default.resolve(opts.projectDir),
@@ -239,6 +270,8 @@ function makeAddCommand() {
239
270
  await promptSoftDepAdds(am2, ref, {
240
271
  isTTY: !!process.stdin.isTTY,
241
272
  link: opts.link,
273
+ withSoftDeps: opts.withSoftDeps,
274
+ noSoftDeps: opts.softDeps === false,
242
275
  confirm: (message) => p6.confirm({ message, initialValue: false }),
243
276
  isCancel: p6.isCancel,
244
277
  onAdded: logOk,
@@ -264,7 +297,7 @@ function makeRemoveCommand() {
264
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(
265
298
  "--backend <ids>",
266
299
  "Comma-separated global backends to undeploy from (default: all resolved); implies --global"
267
- ).option("--target <agent>", "Driver target", "claude-code").action(async (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) => {
268
301
  const backends = parseBackendFilter(opts.backend);
269
302
  const am2 = new AssetManager({
270
303
  projectDir: path14__default.resolve(opts.projectDir),
@@ -278,16 +311,14 @@ function makeRemoveCommand() {
278
311
  return;
279
312
  }
280
313
  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
- }
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
+ });
291
322
  });
292
323
  }
293
324
  function stateLabel(s) {
@@ -974,7 +1005,7 @@ function makeCatalogCommand() {
974
1005
  return catalog;
975
1006
  }
976
1007
  async function runLocalCatalogTest(projectDir) {
977
- const { resolveCatalogSource } = await import('../open-library-PGTL332T.js');
1008
+ const { resolveCatalogSource } = await import('../open-library-ZNYIND7N.js');
978
1009
  let resolved;
979
1010
  try {
980
1011
  resolved = await resolveCatalogSource({ projectDir });
@@ -3680,7 +3711,7 @@ async function previewSoftDepsUnderCursor() {
3680
3711
  }
3681
3712
  async function loadAssets() {
3682
3713
  softDepPreviewCache.clear();
3683
- const { gatherAssetFeeds } = await import('../asset-feeds-NIAABO6U.js');
3714
+ const { gatherAssetFeeds } = await import('../asset-feeds-OBPWVUDL.js');
3684
3715
  const { entries, domains, notes } = await gatherAssetFeeds(am, am.projectDir);
3685
3716
  if (notes.length > 0) {
3686
3717
  state.message = notes.map((n) => `[${n.feed}] ${n.message}`).join(" \u2022 ");
@@ -3847,7 +3878,7 @@ function reconcileCollapsedSets(rows) {
3847
3878
  async function loadSourcesAndLibraries() {
3848
3879
  try {
3849
3880
  const [{ openLibraryManager: openLibraryManager2 }, { skaileHomeDir }, { getGlobalCacheDir: getGlobalCacheDir2 }] = await Promise.all([
3850
- import('../open-library-PGTL332T.js'),
3881
+ import('../open-library-ZNYIND7N.js'),
3851
3882
  import('../library/index.js'),
3852
3883
  import('../core/index.js')
3853
3884
  ]);
@@ -5243,7 +5274,7 @@ async function runRefInstall(ref, opts) {
5243
5274
  const spinner5 = p6.spinner();
5244
5275
  spinner5.start(`Installing ${ref}`);
5245
5276
  try {
5246
- const { openCatalogSource: openCatalogSource2, openLibrary: openLibrary2 } = await import('../open-library-PGTL332T.js');
5277
+ const { openCatalogSource: openCatalogSource2, openLibrary: openLibrary2 } = await import('../open-library-ZNYIND7N.js');
5247
5278
  const catalog = await openCatalogSource2({ projectDir: path14__default.resolve(opts.projectDir) });
5248
5279
  if (!supportsInstallManifest(catalog)) {
5249
5280
  throw new Error(
@@ -5280,7 +5311,7 @@ async function runYamlInstall(opts) {
5280
5311
  return;
5281
5312
  }
5282
5313
  try {
5283
- const { ensureSourcesCloned } = await import('../ensure-sources-MJYHZ77Y.js');
5314
+ const { ensureSourcesCloned } = await import('../ensure-sources-BQI2TOZZ.js');
5284
5315
  const hydrate = ensureSourcesCloned(projectDir, { quiet: true });
5285
5316
  if (hydrate.cloned.length > 0) {
5286
5317
  logOk(`Cloned source(s): ${hydrate.cloned.join(", ")}`);
@@ -5316,12 +5347,22 @@ async function runYamlInstall(opts) {
5316
5347
  if (result.lockWritten) {
5317
5348
  logInfo(`Lock file written: ${S.dim("skaile.lock.yaml")}`);
5318
5349
  }
5350
+ if (!opts.locked) await reportInstalledSoftDeps(am2);
5319
5351
  } catch (err) {
5320
5352
  spinner5.stop("Failed");
5321
5353
  logErr(String(err));
5322
5354
  process.exit(1);
5323
5355
  }
5324
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
+ }
5325
5366
  async function runGlobalInstall(opts, backends) {
5326
5367
  const am2 = new AssetManager({
5327
5368
  projectDir: path14__default.resolve(opts.projectDir),
@@ -5744,7 +5785,7 @@ function makeServeCommand() {
5744
5785
  );
5745
5786
  }
5746
5787
  async function ensurePluginsLoadedForServe(projectDir) {
5747
- const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-7KOVCMHW.js');
5788
+ const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-SC4PWN2F.js');
5748
5789
  try {
5749
5790
  const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
5750
5791
  const config = resolveSkWorkspaceConfig2(projectDir);
@@ -5763,7 +5804,7 @@ async function ensurePluginsLoadedForServe(projectDir) {
5763
5804
  }
5764
5805
  }
5765
5806
  async function runCompileTest(opts) {
5766
- const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-7KOVCMHW.js');
5807
+ const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-SC4PWN2F.js');
5767
5808
  const { tmpdir } = await import('os');
5768
5809
  const { dirname: dirname4, join: join5, resolve: resolve5 } = await import('path');
5769
5810
  const { fileURLToPath: fileURLToPath2 } = await import('url');
@@ -7676,7 +7717,7 @@ async function bootstrapUserConfig() {
7676
7717
  }
7677
7718
  async function hydrateInitSources(resolved, created) {
7678
7719
  try {
7679
- const { ensureSourcesCloned } = await import('../ensure-sources-MJYHZ77Y.js');
7720
+ const { ensureSourcesCloned } = await import('../ensure-sources-BQI2TOZZ.js');
7680
7721
  const hydrate = ensureSourcesCloned(resolved, { quiet: true });
7681
7722
  for (const n of hydrate.cloned) created.push(`~/.skaile/cache/sources/${n}/`);
7682
7723
  if (hydrate.failed.length > 0) {