@skaile/workspaces 0.26.0 → 0.27.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 (161) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/{asset-feeds-WMVTI7KW.js → asset-feeds-DGZO27M7.js} +17 -10
  3. package/dist/asset-feeds-DGZO27M7.js.map +1 -0
  4. package/dist/asset-manager/index.js +7 -7
  5. package/dist/asset-manager/installer.js +6 -6
  6. package/dist/bridge/drivers/claude-sdk.js +2 -2
  7. package/dist/bridge/drivers/codex.js +1 -1
  8. package/dist/bridge/drivers/continue.d.ts +2 -0
  9. package/dist/bridge/drivers/continue.js +103 -0
  10. package/dist/bridge/drivers/continue.js.map +1 -0
  11. package/dist/bridge/drivers/echo.js +1 -1
  12. package/dist/bridge/drivers/gemini.d.ts +2 -0
  13. package/dist/bridge/drivers/gemini.js +10 -0
  14. package/dist/bridge/drivers/gemini.js.map +1 -0
  15. package/dist/bridge/drivers/goose.d.ts +2 -0
  16. package/dist/bridge/drivers/goose.js +88 -0
  17. package/dist/bridge/drivers/goose.js.map +1 -0
  18. package/dist/bridge/drivers/omp.js +1 -1
  19. package/dist/bridge/drivers/opencode.d.ts +2 -0
  20. package/dist/bridge/drivers/opencode.js +99 -0
  21. package/dist/bridge/drivers/opencode.js.map +1 -0
  22. package/dist/bridge/drivers/qwen.d.ts +2 -0
  23. package/dist/bridge/drivers/qwen.js +57 -0
  24. package/dist/bridge/drivers/qwen.js.map +1 -0
  25. package/dist/bridge/index.js +3 -3
  26. package/dist/bridge/src/drivers/_subprocess-cli.d.ts +136 -0
  27. package/dist/bridge/src/drivers/_subprocess-cli.d.ts.map +1 -0
  28. package/dist/bridge/src/drivers/continue.d.ts +43 -0
  29. package/dist/bridge/src/drivers/continue.d.ts.map +1 -0
  30. package/dist/bridge/src/drivers/gemini.d.ts +55 -0
  31. package/dist/bridge/src/drivers/gemini.d.ts.map +1 -0
  32. package/dist/bridge/src/drivers/goose.d.ts +42 -0
  33. package/dist/bridge/src/drivers/goose.d.ts.map +1 -0
  34. package/dist/bridge/src/drivers/opencode.d.ts +43 -0
  35. package/dist/bridge/src/drivers/opencode.d.ts.map +1 -0
  36. package/dist/bridge/src/drivers/qwen.d.ts +39 -0
  37. package/dist/bridge/src/drivers/qwen.d.ts.map +1 -0
  38. package/dist/bridge/src/registry.d.ts.map +1 -1
  39. package/dist/{chunk-XGLGS5B4.js → chunk-2NOE4AGD.js} +3 -3
  40. package/dist/{chunk-XGLGS5B4.js.map → chunk-2NOE4AGD.js.map} +1 -1
  41. package/dist/{chunk-Z5DI7PDG.js → chunk-3QQSSRYN.js} +29 -5
  42. package/dist/chunk-3QQSSRYN.js.map +1 -0
  43. package/dist/{chunk-7OBGSR7O.js → chunk-3ZER5DST.js} +4 -4
  44. package/dist/{chunk-7OBGSR7O.js.map → chunk-3ZER5DST.js.map} +1 -1
  45. package/dist/chunk-5RBPPBEK.js +110 -0
  46. package/dist/chunk-5RBPPBEK.js.map +1 -0
  47. package/dist/chunk-5V5KZQIC.js +445 -0
  48. package/dist/chunk-5V5KZQIC.js.map +1 -0
  49. package/dist/{chunk-PY7AQRGH.js → chunk-A4ASAIKK.js} +6 -6
  50. package/dist/{chunk-PY7AQRGH.js.map → chunk-A4ASAIKK.js.map} +1 -1
  51. package/dist/{chunk-23M4XZQW.js → chunk-AKSR434V.js} +3 -3
  52. package/dist/{chunk-23M4XZQW.js.map → chunk-AKSR434V.js.map} +1 -1
  53. package/dist/{chunk-QHXS3YDV.js → chunk-BUL5H6J7.js} +5 -5
  54. package/dist/{chunk-QHXS3YDV.js.map → chunk-BUL5H6J7.js.map} +1 -1
  55. package/dist/{chunk-ZYDE52WE.js → chunk-DGM74UP4.js} +3 -3
  56. package/dist/{chunk-ZYDE52WE.js.map → chunk-DGM74UP4.js.map} +1 -1
  57. package/dist/{chunk-C32BRO2W.js → chunk-FWHOU3CX.js} +3 -3
  58. package/dist/{chunk-C32BRO2W.js.map → chunk-FWHOU3CX.js.map} +1 -1
  59. package/dist/{chunk-WSZAFRQL.js → chunk-GYPA2Q7F.js} +6 -5
  60. package/dist/chunk-GYPA2Q7F.js.map +1 -0
  61. package/dist/{chunk-KL2MQ6WI.js → chunk-M4KLIEIJ.js} +3 -3
  62. package/dist/{chunk-KL2MQ6WI.js.map → chunk-M4KLIEIJ.js.map} +1 -1
  63. package/dist/{chunk-WD4LP66U.js → chunk-MZDXEFXF.js} +22 -13
  64. package/dist/chunk-MZDXEFXF.js.map +1 -0
  65. package/dist/{chunk-BKF3UFF4.js → chunk-SF4GWVR5.js} +4 -4
  66. package/dist/{chunk-BKF3UFF4.js.map → chunk-SF4GWVR5.js.map} +1 -1
  67. package/dist/{chunk-BQRRBGDE.js → chunk-UAW7VRAL.js} +2 -2
  68. package/dist/{chunk-BQRRBGDE.js.map → chunk-UAW7VRAL.js.map} +1 -1
  69. package/dist/{chunk-4SQ6Y6U7.js → chunk-UBCZVONU.js} +3 -3
  70. package/dist/{chunk-4SQ6Y6U7.js.map → chunk-UBCZVONU.js.map} +1 -1
  71. package/dist/{chunk-YRU4WB6Y.js → chunk-UIZKIUC6.js} +3 -3
  72. package/dist/{chunk-YRU4WB6Y.js.map → chunk-UIZKIUC6.js.map} +1 -1
  73. package/dist/{chunk-RTAIGPTF.js → chunk-WRRYESHC.js} +4 -85
  74. package/dist/chunk-WRRYESHC.js.map +1 -0
  75. package/dist/{chunk-YDTW4GT6.js → chunk-XHBPQ7QP.js} +5 -5
  76. package/dist/{chunk-YDTW4GT6.js.map → chunk-XHBPQ7QP.js.map} +1 -1
  77. package/dist/chunk-Z3XXKR5E.js +88 -0
  78. package/dist/chunk-Z3XXKR5E.js.map +1 -0
  79. package/dist/{chunk-45H3UO2R.js → chunk-ZEKWHJBB.js} +52 -2
  80. package/dist/chunk-ZEKWHJBB.js.map +1 -0
  81. package/dist/cli/index.js +213 -104
  82. package/dist/cli/index.js.map +1 -1
  83. package/dist/cli/src/asset-feeds.d.ts +14 -1
  84. package/dist/cli/src/asset-feeds.d.ts.map +1 -1
  85. package/dist/cli/src/commands/manage.d.ts +46 -23
  86. package/dist/cli/src/commands/manage.d.ts.map +1 -1
  87. package/dist/cli/src/helpers.d.ts +10 -1
  88. package/dist/cli/src/helpers.d.ts.map +1 -1
  89. package/dist/connectors/config.js +6 -6
  90. package/dist/connectors/index.js +8 -8
  91. package/dist/core/index.js +5 -5
  92. package/dist/core/runtime-assets.js +2 -2
  93. package/dist/core/src/workspace-config.d.ts +10 -1
  94. package/dist/core/src/workspace-config.d.ts.map +1 -1
  95. package/dist/core/workspace-config.js +1 -1
  96. package/dist/deploy/index.js +5 -5
  97. package/dist/{ensure-sources-CVULUVH4.js → ensure-sources-KQQEUDKM.js} +11 -10
  98. package/dist/ensure-sources-KQQEUDKM.js.map +1 -0
  99. package/dist/factory-assets/connectors/deploy.js +8 -8
  100. package/dist/factory-assets/connectors/devserver.js +8 -8
  101. package/dist/factory-assets/connectors/flow/adapter.js +8 -8
  102. package/dist/factory-assets/connectors/flow/engine.js +5 -5
  103. package/dist/factory-assets/connectors/flow/run-flow.js +9 -9
  104. package/dist/factory-assets/connectors/flow.js +8 -8
  105. package/dist/factory-assets/connectors/git.js +8 -8
  106. package/dist/factory-assets/connectors/gmail.js +8 -8
  107. package/dist/factory-assets/connectors/googledrive.js +8 -8
  108. package/dist/factory-assets/connectors/local.js +8 -8
  109. package/dist/factory-assets/connectors/mattermost.js +8 -8
  110. package/dist/factory-assets/connectors/memory.js +8 -8
  111. package/dist/factory-assets/connectors/minio.js +8 -8
  112. package/dist/factory-assets/connectors/postgres.js +8 -8
  113. package/dist/factory-assets/connectors/s3.js +8 -8
  114. package/dist/factory-assets/connectors/sharepoint.js +8 -8
  115. package/dist/factory-assets/connectors/sqlite.js +8 -8
  116. package/dist/factory-assets/connectors/static-server.js +8 -8
  117. package/dist/factory-assets/connectors/tunnel.js +8 -8
  118. package/dist/factory-assets/connectors/webdav.js +8 -8
  119. package/dist/factory-assets/connectors/xstate-store.js +8 -8
  120. package/dist/factory-assets/connectors/xstate.js +8 -8
  121. package/dist/{flows-JZFJD5IN.js → flows-L3GHQD7F.js} +4 -4
  122. package/dist/{flows-JZFJD5IN.js.map → flows-L3GHQD7F.js.map} +1 -1
  123. package/dist/helpers-F4NZ66VD.js +4 -0
  124. package/dist/{helpers-LTN3HMD3.js.map → helpers-F4NZ66VD.js.map} +1 -1
  125. package/dist/library/index.js +8 -7
  126. package/dist/library/install.d.ts +2 -0
  127. package/dist/library/install.js +16 -0
  128. package/dist/library/install.js.map +1 -0
  129. package/dist/library/src/install/index.d.ts +3 -0
  130. package/dist/library/src/install/index.d.ts.map +1 -0
  131. package/dist/{open-library-WYASW4BH.js → open-library-I7YTADMD.js} +12 -11
  132. package/dist/{open-library-WYASW4BH.js.map → open-library-I7YTADMD.js.map} +1 -1
  133. package/dist/{paths-BMW6JYW6.js → paths-CE66L3AL.js} +8 -8
  134. package/dist/{paths-BMW6JYW6.js.map → paths-CE66L3AL.js.map} +1 -1
  135. package/dist/{plugin-store-O5VR45CA.js → plugin-store-GL5VKYUA.js} +7 -7
  136. package/dist/{plugin-store-O5VR45CA.js.map → plugin-store-GL5VKYUA.js.map} +1 -1
  137. package/dist/runner/index.js +14 -14
  138. package/dist/runner/src/serve.d.ts.map +1 -1
  139. package/dist/sdk/asset-manager.js +7 -7
  140. package/dist/sdk/bridge.js +3 -3
  141. package/dist/sdk/core.js +5 -5
  142. package/dist/sdk/flow.js +5 -5
  143. package/dist/sdk/index.js +14 -14
  144. package/dist/sdk/runner.js +14 -14
  145. package/dist/{setup-YNLFR5GB.js → setup-4YMN2BDU.js} +10 -10
  146. package/dist/{setup-YNLFR5GB.js.map → setup-4YMN2BDU.js.map} +1 -1
  147. package/dist/{store-client-CENBEASX.js → store-client-BCP5LCAZ.js} +8 -8
  148. package/dist/{store-client-CENBEASX.js.map → store-client-BCP5LCAZ.js.map} +1 -1
  149. package/dist/tui/index.js +14 -14
  150. package/dist/workspace-plugin/adapters/mcp.js +3 -3
  151. package/dist/workspace-plugin/adapters/omp.js +3 -3
  152. package/dist/workspace-plugin/index.js +1 -1
  153. package/package.json +37 -1
  154. package/dist/asset-feeds-WMVTI7KW.js.map +0 -1
  155. package/dist/chunk-45H3UO2R.js.map +0 -1
  156. package/dist/chunk-RTAIGPTF.js.map +0 -1
  157. package/dist/chunk-WD4LP66U.js.map +0 -1
  158. package/dist/chunk-WSZAFRQL.js.map +0 -1
  159. package/dist/chunk-Z5DI7PDG.js.map +0 -1
  160. package/dist/ensure-sources-CVULUVH4.js.map +0 -1
  161. package/dist/helpers-LTN3HMD3.js +0 -4
package/dist/cli/index.js CHANGED
@@ -1,52 +1,53 @@
1
1
  #!/usr/bin/env node
2
- import { AI_RESOURCES, aiResourceRoots } from '../chunk-4SQ6Y6U7.js';
3
- import { openCatalogSource, openLibraryManager, createFullRegistry, openLibrary } from '../chunk-7OBGSR7O.js';
4
- import { logErr, S, logOk, colorRef, logInfo, logWarn, kindColorPad, kindColor, formatRelativeTime, fitWidth } from '../chunk-WSZAFRQL.js';
5
- import { getStoreConfig, storeFetch, saveStoreTokens, clearStoreTokens, isStoreAuthenticated } from '../chunk-XGLGS5B4.js';
2
+ import { openCatalogSource, openLibraryManager, createFullRegistry, openLibrary } from '../chunk-3ZER5DST.js';
3
+ import { logErr, S, logOk, colorRef, logInfo, logWarn, kindColorPad, kindColor, formatRelativeTime, fitWidth } from '../chunk-GYPA2Q7F.js';
4
+ import { getStoreConfig, storeFetch, saveStoreTokens, clearStoreTokens, isStoreAuthenticated } from '../chunk-2NOE4AGD.js';
5
+ import { AI_RESOURCES, aiResourceRoots } from '../chunk-UBCZVONU.js';
6
6
  import { LocalSecretsProvider } from '../chunk-7GWYRVAX.js';
7
- import { resolveLibraryDir, LocalCatalogSource, skaileHomeDir } from '../chunk-RTAIGPTF.js';
8
- import '../chunk-R7FOF242.js';
7
+ import { resolveLibraryDir, LocalCatalogSource, skaileHomeDir } from '../chunk-WRRYESHC.js';
9
8
  import '../chunk-JIQLLZ65.js';
9
+ import '../chunk-Z3XXKR5E.js';
10
+ import '../chunk-R7FOF242.js';
10
11
  import '../chunk-OKRUTSG7.js';
11
- import { runFlow, resumeFlow } from '../chunk-QHXS3YDV.js';
12
+ import { runFlow, resumeFlow } from '../chunk-BUL5H6J7.js';
12
13
  import '../chunk-ZONCCO5N.js';
13
14
  import { validateFlowVersions, parseSkillFrontmatter } from '../chunk-TV72ZJYN.js';
14
- import { runAgentChat, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, loadAgentManifest, compileComposition, MarkdownStreamer, resolveMixin } from '../chunk-WD4LP66U.js';
15
- import { buildClaudePluginFiles } from '../chunk-BQRRBGDE.js';
15
+ import { runAgentChat, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, loadAgentManifest, compileComposition, MarkdownStreamer, resolveMixin } from '../chunk-MZDXEFXF.js';
16
+ import { buildClaudePluginFiles } from '../chunk-UAW7VRAL.js';
16
17
  import '../chunk-X5YPJV4N.js';
17
- import '../chunk-TDSRLMDB.js';
18
18
  import '../chunk-O7SG5PC2.js';
19
19
  import '../chunk-7QBNJTTQ.js';
20
20
  import '../chunk-GTS2FODO.js';
21
21
  import '../chunk-WQ7DE5UC.js';
22
22
  import '../chunk-32NA4TVC.js';
23
23
  import '../chunk-W3UDISS2.js';
24
- import '../chunk-23M4XZQW.js';
24
+ import '../chunk-TDSRLMDB.js';
25
+ import '../chunk-AKSR434V.js';
26
+ import '../chunk-RRVQAE5D.js';
25
27
  import '../chunk-BMQKMOQY.js';
26
28
  import '../chunk-PAYAFNXG.js';
27
- import '../chunk-RRVQAE5D.js';
28
- import '../chunk-45H3UO2R.js';
29
+ import '../chunk-ZEKWHJBB.js';
29
30
  import '../chunk-LV2HPH3C.js';
30
- import '../chunk-YDTW4GT6.js';
31
- import '../chunk-ZYDE52WE.js';
32
- import '../chunk-QMONOHXT.js';
31
+ import '../chunk-XHBPQ7QP.js';
33
32
  import '../chunk-OVRSNIKJ.js';
33
+ import '../chunk-DGM74UP4.js';
34
+ import '../chunk-QMONOHXT.js';
34
35
  import '../chunk-6E6PKKAD.js';
35
36
  import { loadFlow, loadAllFlows } from '../chunk-W7W66MDZ.js';
36
37
  import '../chunk-DEYYRFQU.js';
37
38
  import '../chunk-IFGTRL2I.js';
38
- import { AssetManager } from '../chunk-PY7AQRGH.js';
39
- import '../chunk-BKF3UFF4.js';
40
- import { readLock, resolveSettings, globalSettingsPath, projectSettingsPath, loadSettings, saveSettings, portableSpawn, portableSpawnSync, WorkspaceYamlEditor } from '../chunk-KL2MQ6WI.js';
41
- import { DRIVER_DEFAULTS } from '../chunk-K5GBV4SA.js';
42
- import { assetSearchDirs, detectDomains } from '../chunk-ZAP2BDHG.js';
43
- import '../chunk-C32BRO2W.js';
44
- import { resolveAgentDir, resolveSkWorkspaceConfig, findWorkspaceRoot, workspaceConfigFilename } from '../chunk-Z5DI7PDG.js';
39
+ import { AssetManager } from '../chunk-A4ASAIKK.js';
40
+ import '../chunk-SF4GWVR5.js';
41
+ import { readLock, resolveSettings, globalSettingsPath, projectSettingsPath, loadSettings, saveSettings, portableSpawn, portableSpawnSync, WorkspaceYamlEditor } from '../chunk-M4KLIEIJ.js';
42
+ import '../chunk-FWHOU3CX.js';
43
+ import { resolveAgentDir, resolveSkWorkspaceConfig, findWorkspaceRoot, workspaceConfigFilename } from '../chunk-3QQSSRYN.js';
45
44
  import { SKAILE_MANIFEST_FILENAME, decodeSkaileManifest } from '../chunk-IERB3UXJ.js';
46
45
  import { parseFrontmatter } from '../chunk-2FS4FPZ7.js';
47
46
  import { ASSET_KINDS, parseAssetRef, isValidAssetName, ASSET_NAME_HINT, assetRefToStr } from '../chunk-IEJ5IOC3.js';
48
47
  import '../chunk-JKNWJ64A.js';
49
48
  import { SUPPORTED_DRIVER_TARGETS } from '../chunk-O4JH3KUE.js';
49
+ import { DRIVER_DEFAULTS } from '../chunk-K5GBV4SA.js';
50
+ import { assetSearchDirs, detectDomains } from '../chunk-ZAP2BDHG.js';
50
51
  import { openSqlite } from '../chunk-24UIWON4.js';
51
52
  import '../chunk-KTBKW2FI.js';
52
53
  import '../chunk-UQ6LFBPZ.js';
@@ -311,7 +312,7 @@ function makeSearchCommand() {
311
312
  }
312
313
  if (showStore) {
313
314
  try {
314
- const { getStoreConfig: getStoreConfig2, storeFetch: storeFetch2 } = await import('../store-client-CENBEASX.js');
315
+ const { getStoreConfig: getStoreConfig2, storeFetch: storeFetch2 } = await import('../store-client-BCP5LCAZ.js');
315
316
  const config = getStoreConfig2();
316
317
  const params = {};
317
318
  if (query) params.q = query;
@@ -473,7 +474,7 @@ function makeCatalogCommand() {
473
474
  const cfg = resolveConfig({ projectDir });
474
475
  const baseUrl = opts.url ?? cfg.catalog.url;
475
476
  if (isLocalCatalogUrl(baseUrl)) {
476
- const { resolveCatalogSource } = await import('../open-library-WYASW4BH.js');
477
+ const { resolveCatalogSource } = await import('../open-library-I7YTADMD.js');
477
478
  let resolved;
478
479
  try {
479
480
  resolved = await resolveCatalogSource({ projectDir: opts.projectDir });
@@ -1471,7 +1472,7 @@ async function ensureTargetsRegistered(projectDir) {
1471
1472
  const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
1472
1473
  const config = resolveSkWorkspaceConfig2(projectDir);
1473
1474
  if (config.plugins && config.plugins.length > 0) {
1474
- const { ensurePluginsLoaded } = await import('../plugin-store-O5VR45CA.js');
1475
+ const { ensurePluginsLoaded } = await import('../plugin-store-GL5VKYUA.js');
1475
1476
  const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
1476
1477
  for (const f of result.failed) logWarn(f.error);
1477
1478
  }
@@ -2231,6 +2232,14 @@ function makeLogsCommand() {
2231
2232
  }
2232
2233
  );
2233
2234
  }
2235
+ var ORIGIN_META = {
2236
+ library: { icon: "\u{1F4DA}", label: "Library" },
2237
+ source: { icon: "\u{1F517}", label: "Sources" },
2238
+ store: { icon: "\u{1F4E6}", label: "Store" }
2239
+ };
2240
+ var ORIGIN_ORDER = ["library", "source", "store"];
2241
+ var srcKey = (origin, publisher) => `${origin}:${publisher}`;
2242
+ var repoKey = (origin, publisher, repo) => `${origin}:${publisher}:${repo}`;
2234
2243
  var am;
2235
2244
  var state = {
2236
2245
  tab: "assets",
@@ -2241,39 +2250,61 @@ var state = {
2241
2250
  visibleRows: [],
2242
2251
  pendingAdds: /* @__PURE__ */ new Set(),
2243
2252
  pendingRemoves: /* @__PURE__ */ new Set(),
2253
+ collapsedOrigins: /* @__PURE__ */ new Set(),
2244
2254
  collapsedSources: /* @__PURE__ */ new Set(),
2245
2255
  collapsedRepos: /* @__PURE__ */ new Set(),
2256
+ seenOrigins: /* @__PURE__ */ new Set(),
2257
+ originFilter: null,
2246
2258
  message: "",
2247
2259
  cols: 80,
2248
2260
  awaitingExitConfirm: false
2249
2261
  };
2250
- function buildVisibleRows(rows, collapsedSources, collapsedRepos) {
2262
+ function buildVisibleRows(rows, collapsedOrigins, collapsedSources, collapsedRepos, originFilter = null) {
2251
2263
  return rows.filter((row) => {
2264
+ const origin = rowOrigin(row);
2265
+ if (originFilter && origin !== originFilter) return false;
2266
+ if (row.type === "origin-header") return true;
2267
+ if (collapsedOrigins.has(origin)) return false;
2252
2268
  if (row.type === "publisher-header") return true;
2253
2269
  if (row.type === "repo-header") {
2254
- return !collapsedSources.has(row.source);
2270
+ return !collapsedSources.has(srcKey(origin, row.source));
2255
2271
  }
2256
- const publisher = row.entry?.publisher || "other";
2257
- if (collapsedSources.has(publisher)) return false;
2258
- const repo = row.entry?.repo || "";
2259
- return repo === "" || !collapsedRepos.has(`${publisher}:${repo}`);
2272
+ const publisher = rowPublisher(row);
2273
+ if (collapsedSources.has(srcKey(origin, publisher))) return false;
2274
+ const repo = rowRepo(row);
2275
+ return repo === "" || !collapsedRepos.has(repoKey(origin, publisher, repo));
2260
2276
  });
2261
2277
  }
2262
- function repoAssetRefs(rows, publisher, repo) {
2263
- return rows.filter((r) => isAsset(r) && inRepo(r, publisher, repo)).map((r) => assetRefOf(r)).filter((ref) => ref !== null);
2278
+ function originAssetRefs(rows, origin) {
2279
+ return refsOf(rows.filter((r) => isAsset(r) && rowOrigin(r) === origin));
2280
+ }
2281
+ function repoAssetRefs(rows, origin, publisher, repo) {
2282
+ return refsOf(rows.filter((r) => isAsset(r) && inRepo(r, origin, publisher, repo)));
2264
2283
  }
2265
- function sourceAssetRefs(rows, source) {
2266
- return rows.filter((r) => isAsset(r) && inSource(r, source)).map((r) => assetRefOf(r)).filter((ref) => ref !== null);
2284
+ function sourceAssetRefs(rows, origin, source) {
2285
+ return refsOf(rows.filter((r) => isAsset(r) && inSource(r, origin, source)));
2267
2286
  }
2268
2287
  function isAsset(r) {
2269
2288
  return r.type === "asset";
2270
2289
  }
2271
- function inSource(r, source) {
2272
- return (r.entry?.publisher || "other") === source;
2290
+ function rowOrigin(r) {
2291
+ return r.origin ?? "source";
2273
2292
  }
2274
- function inRepo(r, publisher, repo) {
2275
- if (!inSource(r, publisher)) return false;
2276
- return (r.entry?.repo || "") === repo;
2293
+ function rowPublisher(r) {
2294
+ return r.entry?.publisher || "other";
2295
+ }
2296
+ function rowRepo(r) {
2297
+ return r.entry?.repo || "";
2298
+ }
2299
+ function refsOf(rows) {
2300
+ return rows.map((r) => assetRefOf(r)).filter((ref) => ref !== null);
2301
+ }
2302
+ function inSource(r, origin, source) {
2303
+ return rowOrigin(r) === origin && rowPublisher(r) === source;
2304
+ }
2305
+ function inRepo(r, origin, publisher, repo) {
2306
+ if (!inSource(r, origin, publisher)) return false;
2307
+ return rowRepo(r) === repo;
2277
2308
  }
2278
2309
  function assetRefOf(r) {
2279
2310
  if (!isAsset(r) || !r.entry?.publisher) return null;
@@ -2319,62 +2350,84 @@ function bulkSelection(refs, action3) {
2319
2350
  for (const ref of refs) setSelection(ref, action3);
2320
2351
  }
2321
2352
  function actOnHeader(row, action3) {
2353
+ if (row.type === "origin-header") {
2354
+ bulkSelection(originAssetRefs(state.assetRows, rowOrigin(row)), action3);
2355
+ return true;
2356
+ }
2322
2357
  if (row.type === "publisher-header") {
2323
- bulkSelection(sourceAssetRefs(state.assetRows, row.source), action3);
2358
+ bulkSelection(sourceAssetRefs(state.assetRows, rowOrigin(row), row.source), action3);
2324
2359
  return true;
2325
2360
  }
2326
2361
  if (row.type === "repo-header") {
2327
- bulkSelection(repoAssetRefs(state.assetRows, row.source, row.repo), action3);
2362
+ bulkSelection(repoAssetRefs(state.assetRows, rowOrigin(row), row.source, row.repo), action3);
2328
2363
  return true;
2329
2364
  }
2330
2365
  return false;
2331
2366
  }
2332
2367
  async function loadAssets() {
2333
- const { gatherAssetFeeds } = await import('../asset-feeds-WMVTI7KW.js');
2368
+ const { gatherAssetFeeds } = await import('../asset-feeds-DGZO27M7.js');
2334
2369
  const { entries, notes } = await gatherAssetFeeds(am, am.projectDir);
2335
2370
  if (notes.length > 0) {
2336
2371
  state.message = notes.map((n) => `[${n.feed}] ${n.message}`).join(" \u2022 ");
2337
2372
  }
2338
2373
  const installed = new Set(am.listDeployed().map((e) => `${e.kind}:${e.name}`));
2339
- const byPublisher = /* @__PURE__ */ new Map();
2340
- for (const e of entries) {
2341
- const publisher = e.publisher || "other";
2342
- const repo = e.repo || "";
2374
+ const byOrigin = /* @__PURE__ */ new Map();
2375
+ for (const { origin, entry } of entries) {
2376
+ const publisher = entry.publisher || "other";
2377
+ const repo = entry.repo || "";
2378
+ if (!byOrigin.has(origin)) byOrigin.set(origin, /* @__PURE__ */ new Map());
2379
+ const byPublisher = byOrigin.get(origin);
2343
2380
  if (!byPublisher.has(publisher)) byPublisher.set(publisher, /* @__PURE__ */ new Map());
2344
2381
  const byRepo = byPublisher.get(publisher);
2345
2382
  if (!byRepo.has(repo)) byRepo.set(repo, []);
2346
- byRepo.get(repo).push(e);
2383
+ byRepo.get(repo).push(entry);
2347
2384
  }
2348
2385
  const rows = [];
2349
- for (const [publisher, byRepo] of [...byPublisher.entries()].sort(
2350
- (a, b) => a[0].localeCompare(b[0])
2351
- )) {
2352
- rows.push({ type: "publisher-header", source: publisher });
2353
- const pushAssets = (items) => {
2354
- items.sort(
2355
- (a, b) => a.kind !== b.kind ? a.kind.localeCompare(b.kind) : a.name.localeCompare(b.name)
2356
- );
2357
- for (const entry of items) {
2358
- const ref = `${entry.kind}:${entry.name}`;
2359
- rows.push({ type: "asset", entry, installed: installed.has(ref) });
2386
+ for (const origin of ORIGIN_ORDER) {
2387
+ const byPublisher = byOrigin.get(origin);
2388
+ if (!byPublisher || byPublisher.size === 0) continue;
2389
+ rows.push({ type: "origin-header", origin });
2390
+ for (const [publisher, byRepo] of [...byPublisher.entries()].sort(
2391
+ (a, b) => a[0].localeCompare(b[0])
2392
+ )) {
2393
+ rows.push({ type: "publisher-header", origin, source: publisher });
2394
+ const pushAssets = (items) => {
2395
+ items.sort(
2396
+ (a, b) => a.kind !== b.kind ? a.kind.localeCompare(b.kind) : a.name.localeCompare(b.name)
2397
+ );
2398
+ for (const entry of items) {
2399
+ const ref = `${entry.kind}:${entry.name}`;
2400
+ rows.push({ type: "asset", origin, entry, installed: installed.has(ref) });
2401
+ }
2402
+ };
2403
+ const noRepo = byRepo.get("");
2404
+ if (noRepo) pushAssets(noRepo);
2405
+ for (const [repo, items] of [...byRepo.entries()].filter(([r]) => r !== "").sort((a, b) => a[0].localeCompare(b[0]))) {
2406
+ rows.push({ type: "repo-header", origin, source: publisher, repo });
2407
+ pushAssets(items);
2360
2408
  }
2361
- };
2362
- const noRepo = byRepo.get("");
2363
- if (noRepo) pushAssets(noRepo);
2364
- for (const [repo, items] of [...byRepo.entries()].filter(([r]) => r !== "").sort((a, b) => a[0].localeCompare(b[0]))) {
2365
- rows.push({ type: "repo-header", source: publisher, repo });
2366
- pushAssets(items);
2367
2409
  }
2368
2410
  }
2369
2411
  state.assetRows = rows;
2412
+ const presentOrigins = new Set(rows.filter((r) => r.type === "origin-header").map(rowOrigin));
2413
+ for (const o of presentOrigins) {
2414
+ if (!state.seenOrigins.has(o)) {
2415
+ if (o === "store") state.collapsedOrigins.add(o);
2416
+ state.seenOrigins.add(o);
2417
+ }
2418
+ }
2419
+ for (const o of state.collapsedOrigins) {
2420
+ if (!presentOrigins.has(o)) state.collapsedOrigins.delete(o);
2421
+ }
2422
+ if (state.originFilter && !presentOrigins.has(state.originFilter)) state.originFilter = null;
2370
2423
  const newSources = new Set(
2371
- rows.filter((r) => r.type === "publisher-header").map((r) => r.source)
2424
+ rows.filter((r) => r.type === "publisher-header").map((r) => srcKey(rowOrigin(r), r.source))
2372
2425
  );
2373
2426
  for (const s of state.collapsedSources) {
2374
2427
  if (!newSources.has(s)) state.collapsedSources.delete(s);
2375
2428
  }
2376
2429
  const newRepoKeys = new Set(
2377
- rows.filter((r) => r.type === "repo-header").map((r) => `${r.source}:${r.repo}`)
2430
+ rows.filter((r) => r.type === "repo-header").map((r) => repoKey(rowOrigin(r), r.source, r.repo))
2378
2431
  );
2379
2432
  for (const d of state.collapsedRepos) {
2380
2433
  if (!newRepoKeys.has(d)) state.collapsedRepos.delete(d);
@@ -2385,7 +2438,7 @@ async function loadAssets() {
2385
2438
  async function loadSourcesAndLibraries() {
2386
2439
  try {
2387
2440
  const [{ openLibraryManager: openLibraryManager2 }, { skaileHomeDir: skaileHomeDir2 }] = await Promise.all([
2388
- import('../open-library-WYASW4BH.js'),
2441
+ import('../open-library-I7YTADMD.js'),
2389
2442
  import('../library/index.js')
2390
2443
  ]);
2391
2444
  const { manager, library, close } = await openLibraryManager2();
@@ -2423,8 +2476,10 @@ async function loadSourcesAndLibraries() {
2423
2476
  function rebuildVisible() {
2424
2477
  state.visibleRows = buildVisibleRows(
2425
2478
  state.assetRows,
2479
+ state.collapsedOrigins,
2426
2480
  state.collapsedSources,
2427
- state.collapsedRepos
2481
+ state.collapsedRepos,
2482
+ state.originFilter
2428
2483
  );
2429
2484
  clampCursor();
2430
2485
  }
@@ -2448,7 +2503,7 @@ var TABS = {
2448
2503
  rowCount: () => state.visibleRows.length,
2449
2504
  selectableCount: () => state.assetRows.filter(isAsset).length,
2450
2505
  renderRow: (i, sel) => renderAssetRow(state.visibleRows[i], sel),
2451
- footer: " \u2191\u2193/jk navigate \u2190/\u2192 collapse/expand [space/+/-] select [a/\u21B5] apply [i] info Tab switch [q/esc] quit"
2506
+ footer: " \u2191\u2193/jk nav \u2190/\u2192 collapse/expand [space/+/-] select [a/\u21B5] apply [i] info [1]lib [2]src [3]store [0]all Tab switch [q] quit"
2452
2507
  },
2453
2508
  sources: {
2454
2509
  label: "Sources",
@@ -2532,24 +2587,38 @@ function renderHeaderLine(opts) {
2532
2587
  return opts.selected ? pc5.bgWhite(pc5.black(`${line} `.padEnd(state.cols))) : line;
2533
2588
  }
2534
2589
  function renderAssetRow(row, selected) {
2535
- if (row.type === "publisher-header") {
2590
+ if (row.type === "origin-header") {
2591
+ const origin = rowOrigin(row);
2592
+ const meta = ORIGIN_META[origin];
2536
2593
  return renderHeaderLine({
2537
2594
  indent: " ",
2538
- collapsed: state.collapsedSources.has(row.source),
2539
- match: (r) => isAsset(r) && inSource(r, row.source),
2540
- refs: sourceAssetRefs(state.assetRows, row.source),
2595
+ collapsed: state.collapsedOrigins.has(origin),
2596
+ match: (r) => isAsset(r) && rowOrigin(r) === origin,
2597
+ refs: originAssetRefs(state.assetRows, origin),
2598
+ label: `${meta.icon} ${pc5.bold(pc5.cyan(meta.label))}`,
2599
+ selected
2600
+ });
2601
+ }
2602
+ if (row.type === "publisher-header") {
2603
+ const origin = rowOrigin(row);
2604
+ return renderHeaderLine({
2605
+ indent: " ".repeat(3),
2606
+ collapsed: state.collapsedSources.has(srcKey(origin, row.source)),
2607
+ match: (r) => isAsset(r) && inSource(r, origin, row.source),
2608
+ refs: sourceAssetRefs(state.assetRows, origin, row.source),
2541
2609
  label: pc5.bold(pc5.cyan(row.source)),
2542
2610
  selected
2543
2611
  });
2544
2612
  }
2545
2613
  if (row.type === "repo-header") {
2614
+ const origin = rowOrigin(row);
2546
2615
  const slug = row.repo;
2547
2616
  const bare = slug.includes("/") ? slug.slice(slug.indexOf("/") + 1) : slug;
2548
2617
  return renderHeaderLine({
2549
- indent: " ".repeat(3),
2550
- collapsed: state.collapsedRepos.has(`${row.source}:${slug}`),
2551
- match: (r) => isAsset(r) && inRepo(r, row.source, slug),
2552
- refs: repoAssetRefs(state.assetRows, row.source, slug),
2618
+ indent: " ".repeat(5),
2619
+ collapsed: state.collapsedRepos.has(repoKey(origin, row.source, slug)),
2620
+ match: (r) => isAsset(r) && inRepo(r, origin, row.source, slug),
2621
+ refs: repoAssetRefs(state.assetRows, origin, row.source, slug),
2553
2622
  label: pc5.bold(bare),
2554
2623
  selected
2555
2624
  });
@@ -2561,12 +2630,12 @@ function renderAssetRow(row, selected) {
2561
2630
  else if (state.pendingRemoves.has(ref)) status4 = pc5.red("- ");
2562
2631
  else if (row.installed) status4 = pc5.green("\u2713 ");
2563
2632
  else status4 = pc5.dim("\xB7 ");
2564
- const kind = kindColorPad(e.kind, 8);
2633
+ const kind = kindColorPad(e.kind);
2565
2634
  const name = fitWidth(e.name, 30);
2566
2635
  const badge = e.category ? `${pc5.dim("[")}${pc5.cyan(e.category)}${pc5.dim("]")} ` : "";
2567
2636
  const badgeWidth = e.category ? e.category.length + 3 : 0;
2568
- const desc = e.description?.slice(0, Math.max(0, state.cols - 52 - badgeWidth)) ?? "";
2569
- const indent = " ".repeat(e.repo ? 5 : 3);
2637
+ const desc = e.description?.slice(0, Math.max(0, state.cols - 56 - badgeWidth)) ?? "";
2638
+ const indent = " ".repeat(e.repo ? 7 : 5);
2570
2639
  const line = `${indent}${status4} ${kind} ${name} ${badge}${pc5.dim(desc)}`;
2571
2640
  return selected ? pc5.inverse(line.padEnd(state.cols)) : line;
2572
2641
  }
@@ -2587,7 +2656,8 @@ function render() {
2587
2656
  const overhead = 5 + pendingLines + msgLines;
2588
2657
  const maxRows = Math.max(5, (process.stdout.rows || 30) - overhead);
2589
2658
  console.log();
2590
- console.log(` ${pc5.bold("skaile manage")} ${renderTabs()}`);
2659
+ const filterTag = state.tab === "assets" && state.originFilter ? ` ${pc5.bgYellow(pc5.black(` filter: ${ORIGIN_META[state.originFilter].label} `))} ${pc5.dim("[0] clear")}` : "";
2660
+ console.log(` ${pc5.bold("skaile manage")} ${renderTabs()}${filterTag}`);
2591
2661
  console.log(` ${S.rule(state.cols - 4)}`);
2592
2662
  const spec = TABS[state.tab];
2593
2663
  const total = spec.rowCount();
@@ -2680,9 +2750,10 @@ async function showInfo() {
2680
2750
  console.log();
2681
2751
  console.log(` ${kindColor(e.kind)} ${pc5.bold(e.name)}`);
2682
2752
  console.log(` ${S.rule(50)}`);
2753
+ console.log(` origin: ${pc5.dim(ORIGIN_META[rowOrigin(row)].label)}`);
2683
2754
  if (e.version) console.log(` version: ${e.version}`);
2684
2755
  if (e.description) console.log(` description: ${e.description}`);
2685
- if (e.publisher) console.log(` source: ${pc5.dim(e.publisher)}`);
2756
+ if (e.publisher) console.log(` publisher: ${pc5.dim(e.publisher)}`);
2686
2757
  console.log(` manifest: ${pc5.dim(e.source)}`);
2687
2758
  console.log(` installed: ${row.installed ? pc5.green("yes") : pc5.red("no")}`);
2688
2759
  if (e.requires.length) {
@@ -2703,14 +2774,31 @@ async function showInfo() {
2703
2774
  process.stdin.once("data", onData);
2704
2775
  });
2705
2776
  }
2777
+ function setOriginFilter(origin) {
2778
+ if (origin === null || state.originFilter === origin) {
2779
+ state.originFilter = null;
2780
+ } else if (state.seenOrigins.has(origin)) {
2781
+ state.originFilter = origin;
2782
+ state.collapsedOrigins.delete(origin);
2783
+ } else {
2784
+ state.message = pc5.dim(`No ${ORIGIN_META[origin].label} assets to show.`);
2785
+ return;
2786
+ }
2787
+ state.cursor = 0;
2788
+ rebuildVisible();
2789
+ }
2706
2790
  function expandUnderCursor() {
2707
2791
  const row = state.visibleRows[state.cursor];
2708
2792
  if (!row) return;
2709
- if (row.type === "publisher-header" && state.collapsedSources.has(row.source)) {
2710
- state.collapsedSources.delete(row.source);
2793
+ const origin = rowOrigin(row);
2794
+ if (row.type === "origin-header" && state.collapsedOrigins.has(origin)) {
2795
+ state.collapsedOrigins.delete(origin);
2796
+ rebuildVisible();
2797
+ } else if (row.type === "publisher-header" && state.collapsedSources.has(srcKey(origin, row.source))) {
2798
+ state.collapsedSources.delete(srcKey(origin, row.source));
2711
2799
  rebuildVisible();
2712
2800
  } else if (row.type === "repo-header") {
2713
- const dk = `${row.source}:${row.repo}`;
2801
+ const dk = repoKey(origin, row.source, row.repo);
2714
2802
  if (state.collapsedRepos.has(dk)) {
2715
2803
  state.collapsedRepos.delete(dk);
2716
2804
  rebuildVisible();
@@ -2720,15 +2808,31 @@ function expandUnderCursor() {
2720
2808
  function collapseOrJumpUnderCursor() {
2721
2809
  const row = state.visibleRows[state.cursor];
2722
2810
  if (!row) return;
2811
+ const origin = rowOrigin(row);
2812
+ if (row.type === "origin-header") {
2813
+ if (!state.collapsedOrigins.has(origin)) {
2814
+ state.collapsedOrigins.add(origin);
2815
+ rebuildVisible();
2816
+ }
2817
+ return;
2818
+ }
2723
2819
  if (row.type === "publisher-header") {
2724
- if (!state.collapsedSources.has(row.source)) {
2725
- state.collapsedSources.add(row.source);
2820
+ const sk = srcKey(origin, row.source);
2821
+ if (!state.collapsedSources.has(sk)) {
2822
+ state.collapsedSources.add(sk);
2726
2823
  rebuildVisible();
2824
+ } else {
2825
+ const idx2 = findLastIndex(
2826
+ state.visibleRows,
2827
+ state.cursor,
2828
+ (r) => r.type === "origin-header"
2829
+ );
2830
+ if (idx2 >= 0) state.cursor = idx2;
2727
2831
  }
2728
2832
  return;
2729
2833
  }
2730
2834
  if (row.type === "repo-header") {
2731
- const dk = `${row.source}:${row.repo}`;
2835
+ const dk = repoKey(origin, row.source, row.repo);
2732
2836
  if (!state.collapsedRepos.has(dk)) {
2733
2837
  state.collapsedRepos.add(dk);
2734
2838
  rebuildVisible();
@@ -2745,7 +2849,7 @@ function collapseOrJumpUnderCursor() {
2745
2849
  const idx = findLastIndex(
2746
2850
  state.visibleRows,
2747
2851
  state.cursor,
2748
- (r) => r.type === "repo-header" || r.type === "publisher-header"
2852
+ (r) => r.type === "repo-header" || r.type === "publisher-header" || r.type === "origin-header"
2749
2853
  );
2750
2854
  if (idx >= 0) state.cursor = idx;
2751
2855
  }
@@ -2846,7 +2950,12 @@ var KEYMAP = [
2846
2950
  // Enter — apply on assets tab
2847
2951
  { keys: ["\r", "\n"], when: TAB_ASSETS, run: applyChanges },
2848
2952
  // Info — assets only
2849
- { keys: ["i"], when: TAB_ASSETS, run: showInfo }
2953
+ { keys: ["i"], when: TAB_ASSETS, run: showInfo },
2954
+ // Origin filter — assets only. 1/2/3 isolate one origin, 0 clears.
2955
+ { keys: ["1"], when: TAB_ASSETS, run: () => setOriginFilter("library") },
2956
+ { keys: ["2"], when: TAB_ASSETS, run: () => setOriginFilter("source") },
2957
+ { keys: ["3"], when: TAB_ASSETS, run: () => setOriginFilter("store") },
2958
+ { keys: ["0"], when: TAB_ASSETS, run: () => setOriginFilter(null) }
2850
2959
  ];
2851
2960
  async function dispatchKey(key) {
2852
2961
  for (const b of KEYMAP) {
@@ -3717,7 +3826,7 @@ function action2(fn) {
3717
3826
  };
3718
3827
  }
3719
3828
  async function reconcileAndReport(projectDir, plugins) {
3720
- const { reconcilePlugins } = await import('../plugin-store-O5VR45CA.js');
3829
+ const { reconcilePlugins } = await import('../plugin-store-GL5VKYUA.js');
3721
3830
  if (plugins.length === 0) {
3722
3831
  logInfo("No plugins declared \u2014 nothing to reconcile.");
3723
3832
  return;
@@ -3733,7 +3842,7 @@ async function reconcileAndReport(projectDir, plugins) {
3733
3842
  async function runInstall2(spec, opts) {
3734
3843
  const projectDir = path15__default.resolve(opts.projectDir);
3735
3844
  const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
3736
- const { specName } = await import('../plugin-store-O5VR45CA.js');
3845
+ const { specName } = await import('../plugin-store-GL5VKYUA.js');
3737
3846
  const yamlPath = path15__default.join(projectDir, "skaile.yaml");
3738
3847
  const editor = WorkspaceYamlEditor2.load(yamlPath);
3739
3848
  const replaced = editor.addPlugin(spec, specName);
@@ -3745,7 +3854,7 @@ async function runInstall2(spec, opts) {
3745
3854
  async function runRemove(name, opts) {
3746
3855
  const projectDir = path15__default.resolve(opts.projectDir);
3747
3856
  const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
3748
- const { specName } = await import('../plugin-store-O5VR45CA.js');
3857
+ const { specName } = await import('../plugin-store-GL5VKYUA.js');
3749
3858
  const yamlPath = path15__default.join(projectDir, "skaile.yaml");
3750
3859
  const editor = WorkspaceYamlEditor2.load(yamlPath);
3751
3860
  const removed = editor.removePlugin(name, specName);
@@ -3773,7 +3882,7 @@ async function runList(opts) {
3773
3882
  const registry = createPluginRegistry();
3774
3883
  if (declared.length > 0) {
3775
3884
  try {
3776
- const { loadPlugins } = await import('../plugin-store-O5VR45CA.js');
3885
+ const { loadPlugins } = await import('../plugin-store-GL5VKYUA.js');
3777
3886
  const result = await loadPlugins(projectDir, declared, registry);
3778
3887
  for (const f of result.failed) logWarn(f.error);
3779
3888
  } catch (err) {
@@ -3984,7 +4093,7 @@ function makeInstallCommand() {
3984
4093
  const spinner6 = p5.spinner();
3985
4094
  spinner6.start(`Installing ${ref}`);
3986
4095
  try {
3987
- const { openCatalogSource: openCatalogSource2, openLibrary: openLibrary2 } = await import('../open-library-WYASW4BH.js');
4096
+ const { openCatalogSource: openCatalogSource2, openLibrary: openLibrary2 } = await import('../open-library-I7YTADMD.js');
3988
4097
  const catalog = await openCatalogSource2({ projectDir: path15__default.resolve(opts.projectDir) });
3989
4098
  if (!supportsInstallManifest(catalog)) {
3990
4099
  throw new Error(
@@ -4016,7 +4125,7 @@ function makeInstallCommand() {
4016
4125
  }
4017
4126
  const projectDir = path15__default.resolve(opts.projectDir);
4018
4127
  try {
4019
- const { ensureSourcesCloned } = await import('../ensure-sources-CVULUVH4.js');
4128
+ const { ensureSourcesCloned } = await import('../ensure-sources-KQQEUDKM.js');
4020
4129
  const hydrate = ensureSourcesCloned(projectDir, { quiet: true });
4021
4130
  if (hydrate.cloned.length > 0) {
4022
4131
  logOk(`Cloned source(s): ${hydrate.cloned.join(", ")}`);
@@ -4451,12 +4560,12 @@ function makeServeCommand() {
4451
4560
  );
4452
4561
  }
4453
4562
  async function ensurePluginsLoadedForServe(projectDir) {
4454
- const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-LTN3HMD3.js');
4563
+ const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-F4NZ66VD.js');
4455
4564
  try {
4456
4565
  const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
4457
4566
  const config = resolveSkWorkspaceConfig2(projectDir);
4458
4567
  if (!config.plugins || config.plugins.length === 0) return;
4459
- const { ensurePluginsLoaded } = await import('../plugin-store-O5VR45CA.js');
4568
+ const { ensurePluginsLoaded } = await import('../plugin-store-GL5VKYUA.js');
4460
4569
  const { pluginRegistry } = await import('../plugin-registry/index.js');
4461
4570
  const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
4462
4571
  if (result.loaded.length > 0) {
@@ -4470,14 +4579,14 @@ async function ensurePluginsLoadedForServe(projectDir) {
4470
4579
  }
4471
4580
  }
4472
4581
  async function runCompileTest(opts) {
4473
- const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-LTN3HMD3.js');
4582
+ const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-F4NZ66VD.js');
4474
4583
  const { tmpdir } = await import('os');
4475
4584
  const { dirname: dirname3, join: join5, resolve: resolve4 } = await import('path');
4476
4585
  const { fileURLToPath: fileURLToPath2 } = await import('url');
4477
4586
  const { unlinkSync, existsSync: existsSync12 } = await import('fs');
4478
4587
  const { spawn } = await import('child_process');
4479
4588
  const { portableSpawnSync: portableSpawnSync2 } = await import('../core/index.js');
4480
- const { MONOREPO_ROOT } = await import('../paths-BMW6JYW6.js');
4589
+ const { MONOREPO_ROOT } = await import('../paths-CE66L3AL.js');
4481
4590
  if (MONOREPO_ROOT === null) {
4482
4591
  logErr2("--compile-test is only available inside the skaile-dev workspace.");
4483
4592
  logInfo2("Run it from a checkout of skaile-ai/skaile-dev (the monorepo shell).");
@@ -6478,7 +6587,7 @@ program.command("init [project-dir]").description("Initialize a project director
6478
6587
  );
6479
6588
  }
6480
6589
  try {
6481
- const { ensureSourcesCloned } = await import('../ensure-sources-CVULUVH4.js');
6590
+ const { ensureSourcesCloned } = await import('../ensure-sources-KQQEUDKM.js');
6482
6591
  const hydrate = ensureSourcesCloned(resolved, { quiet: true });
6483
6592
  for (const n of hydrate.cloned) created.push(`~/.skaile/sources/${n}/`);
6484
6593
  if (hydrate.failed.length > 0) {
@@ -6504,7 +6613,7 @@ program.command("init [project-dir]").description("Initialize a project director
6504
6613
  console.log();
6505
6614
  });
6506
6615
  program.command("setup").description("Interactive provider setup wizard").action(async () => {
6507
- const { cmdSetup } = await import('../setup-YNLFR5GB.js');
6616
+ const { cmdSetup } = await import('../setup-4YMN2BDU.js');
6508
6617
  await cmdSetup([], { projectDir: process.cwd() });
6509
6618
  });
6510
6619
  program.addCommand(makeInstallCommand());