@skaile/workspaces 5.3.0 → 5.4.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 (190) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +8 -1
  3. package/dist/{asset-feeds-VIZXYDAO.js → asset-feeds-3MVRNS5U.js} +7 -7
  4. package/dist/{asset-feeds-VIZXYDAO.js.map → asset-feeds-3MVRNS5U.js.map} +1 -1
  5. package/dist/asset-manager/catalog-deployer.js +3 -3
  6. package/dist/asset-manager/index.js +6 -6
  7. package/dist/asset-manager/installer.js +4 -4
  8. package/dist/asset-manager/src/index.d.ts +10 -0
  9. package/dist/asset-manager/src/index.d.ts.map +1 -1
  10. package/dist/asset-manager/src/installer.d.ts +7 -0
  11. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  12. package/dist/bridge/drivers/claude-sdk.js +5 -5
  13. package/dist/bridge/drivers/codex.js +5 -5
  14. package/dist/bridge/drivers/continue.js +6 -6
  15. package/dist/bridge/drivers/echo.js +1 -1
  16. package/dist/bridge/drivers/gemini.js +5 -5
  17. package/dist/bridge/drivers/goose.js +6 -6
  18. package/dist/bridge/drivers/omp.js +2 -2
  19. package/dist/bridge/drivers/opencode.js +6 -6
  20. package/dist/bridge/drivers/qwen.js +5 -5
  21. package/dist/bridge/index.js +6 -6
  22. package/dist/{chunk-OMD4TAJX.js → chunk-2XXAVTTO.js} +3 -3
  23. package/dist/{chunk-OMD4TAJX.js.map → chunk-2XXAVTTO.js.map} +1 -1
  24. package/dist/{chunk-K2JVODQD.js → chunk-37DN45RR.js} +5 -5
  25. package/dist/{chunk-K2JVODQD.js.map → chunk-37DN45RR.js.map} +1 -1
  26. package/dist/{chunk-ZCSFGGLG.js → chunk-5NH3U6N5.js} +4 -4
  27. package/dist/{chunk-ZCSFGGLG.js.map → chunk-5NH3U6N5.js.map} +1 -1
  28. package/dist/{chunk-KBAE7PU7.js → chunk-6IGFSUTE.js} +7 -5
  29. package/dist/chunk-6IGFSUTE.js.map +1 -0
  30. package/dist/{chunk-ZDMGMWK6.js → chunk-7KITVWXK.js} +20 -19
  31. package/dist/chunk-7KITVWXK.js.map +1 -0
  32. package/dist/{chunk-YXNYBUQY.js → chunk-A67BHJCH.js} +4 -4
  33. package/dist/{chunk-YXNYBUQY.js.map → chunk-A67BHJCH.js.map} +1 -1
  34. package/dist/{chunk-FTYM4VRZ.js → chunk-AE42DHSH.js} +2 -2
  35. package/dist/{chunk-FTYM4VRZ.js.map → chunk-AE42DHSH.js.map} +1 -1
  36. package/dist/{chunk-WGNFDLHT.js → chunk-BATL2CWI.js} +63 -19
  37. package/dist/chunk-BATL2CWI.js.map +1 -0
  38. package/dist/{chunk-QHIMMBJO.js → chunk-BHUHGLNS.js} +4 -4
  39. package/dist/{chunk-QHIMMBJO.js.map → chunk-BHUHGLNS.js.map} +1 -1
  40. package/dist/{chunk-FZGL7Z52.js → chunk-DTV7HL5R.js} +2 -2
  41. package/dist/{chunk-FZGL7Z52.js.map → chunk-DTV7HL5R.js.map} +1 -1
  42. package/dist/{chunk-7L4WFH3Y.js → chunk-IDUGP4V7.js} +3 -3
  43. package/dist/{chunk-7L4WFH3Y.js.map → chunk-IDUGP4V7.js.map} +1 -1
  44. package/dist/{chunk-4SSKKFDF.js → chunk-JCATNLY3.js} +3 -3
  45. package/dist/{chunk-4SSKKFDF.js.map → chunk-JCATNLY3.js.map} +1 -1
  46. package/dist/{chunk-WGN7Z36G.js → chunk-JEA32KB6.js} +3 -3
  47. package/dist/{chunk-WGN7Z36G.js.map → chunk-JEA32KB6.js.map} +1 -1
  48. package/dist/{chunk-TR7KFBIO.js → chunk-JF26V3BC.js} +5 -5
  49. package/dist/{chunk-TR7KFBIO.js.map → chunk-JF26V3BC.js.map} +1 -1
  50. package/dist/{chunk-ERCSHLTF.js → chunk-LUBS5DXY.js} +3 -3
  51. package/dist/{chunk-ERCSHLTF.js.map → chunk-LUBS5DXY.js.map} +1 -1
  52. package/dist/chunk-NESV47MF.js +20 -0
  53. package/dist/chunk-NESV47MF.js.map +1 -0
  54. package/dist/{chunk-DECPI7DN.js → chunk-OANSNVCP.js} +5 -5
  55. package/dist/{chunk-DECPI7DN.js.map → chunk-OANSNVCP.js.map} +1 -1
  56. package/dist/{chunk-OOKFZW6H.js → chunk-ONWTPXVU.js} +7 -7
  57. package/dist/{chunk-OOKFZW6H.js.map → chunk-ONWTPXVU.js.map} +1 -1
  58. package/dist/{chunk-YTJZQ4HY.js → chunk-OXE5A6H6.js} +3 -3
  59. package/dist/{chunk-YTJZQ4HY.js.map → chunk-OXE5A6H6.js.map} +1 -1
  60. package/dist/{chunk-6GBQND2F.js → chunk-QEXEHXX5.js} +4 -4
  61. package/dist/{chunk-6GBQND2F.js.map → chunk-QEXEHXX5.js.map} +1 -1
  62. package/dist/{chunk-VLEWVR44.js → chunk-QK756IRJ.js} +10 -10
  63. package/dist/{chunk-VLEWVR44.js.map → chunk-QK756IRJ.js.map} +1 -1
  64. package/dist/{chunk-CZ35I4RK.js → chunk-RD6GE4HU.js} +3 -3
  65. package/dist/{chunk-CZ35I4RK.js.map → chunk-RD6GE4HU.js.map} +1 -1
  66. package/dist/{chunk-4257Q2LH.js → chunk-SQBPE66C.js} +6 -6
  67. package/dist/{chunk-4257Q2LH.js.map → chunk-SQBPE66C.js.map} +1 -1
  68. package/dist/{chunk-AWGQVAC5.js → chunk-U6ORGQHZ.js} +3 -3
  69. package/dist/{chunk-AWGQVAC5.js.map → chunk-U6ORGQHZ.js.map} +1 -1
  70. package/dist/{chunk-LM5XEFNS.js → chunk-UAAAERXI.js} +3 -3
  71. package/dist/{chunk-LM5XEFNS.js.map → chunk-UAAAERXI.js.map} +1 -1
  72. package/dist/chunk-UKDFOOEG.js +22 -0
  73. package/dist/chunk-UKDFOOEG.js.map +1 -0
  74. package/dist/{chunk-A223FDDC.js → chunk-UNRZCQD4.js} +6 -6
  75. package/dist/{chunk-A223FDDC.js.map → chunk-UNRZCQD4.js.map} +1 -1
  76. package/dist/{chunk-D63AJVBW.js → chunk-VETH6MDG.js} +13 -13
  77. package/dist/{chunk-D63AJVBW.js.map → chunk-VETH6MDG.js.map} +1 -1
  78. package/dist/{chunk-BUZ3K2PT.js → chunk-XMQAV6T3.js} +2 -2
  79. package/dist/{chunk-BUZ3K2PT.js.map → chunk-XMQAV6T3.js.map} +1 -1
  80. package/dist/{chunk-3ZVSINEV.js → chunk-Y5OCUOXF.js} +10 -7
  81. package/dist/chunk-Y5OCUOXF.js.map +1 -0
  82. package/dist/{chunk-FXN4PLRO.js → chunk-ZIYYMR6Y.js} +3 -3
  83. package/dist/{chunk-FXN4PLRO.js.map → chunk-ZIYYMR6Y.js.map} +1 -1
  84. package/dist/{chunk-TVFSA5IQ.js → chunk-ZUZ5LLZ2.js} +4 -4
  85. package/dist/{chunk-TVFSA5IQ.js.map → chunk-ZUZ5LLZ2.js.map} +1 -1
  86. package/dist/cli/index.js +307 -166
  87. package/dist/cli/index.js.map +1 -1
  88. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  89. package/dist/cli/src/commands/catalog.d.ts +33 -3
  90. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  91. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  92. package/dist/cli/src/commands/library-index.d.ts +14 -0
  93. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  94. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  95. package/dist/cli/src/commands/npx.d.ts.map +1 -1
  96. package/dist/cli/src/commands/project.d.ts.map +1 -1
  97. package/dist/cli/src/commands/update.d.ts.map +1 -1
  98. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  99. package/dist/cli/src/setup.d.ts.map +1 -1
  100. package/dist/cli/src/skill-checks.d.ts +21 -0
  101. package/dist/cli/src/skill-checks.d.ts.map +1 -0
  102. package/dist/cli/src/spinner.d.ts +24 -0
  103. package/dist/cli/src/spinner.d.ts.map +1 -0
  104. package/dist/connectors/config.js +2 -2
  105. package/dist/connectors/index.js +9 -9
  106. package/dist/{connectors-Z2FUGAJU.js → connectors-OB3OAZTK.js} +12 -12
  107. package/dist/{connectors-Z2FUGAJU.js.map → connectors-OB3OAZTK.js.map} +1 -1
  108. package/dist/core/index.js +3 -3
  109. package/dist/core/runtime-assets.js +2 -2
  110. package/dist/core/src/repo-manager.d.ts.map +1 -1
  111. package/dist/core/workspace-config.js +1 -1
  112. package/dist/deploy/index.js +3 -3
  113. package/dist/{ensure-sources-3IH5XHAP.js → ensure-sources-Z3KKLEM6.js} +9 -9
  114. package/dist/{ensure-sources-3IH5XHAP.js.map → ensure-sources-Z3KKLEM6.js.map} +1 -1
  115. package/dist/factory-assets/README.md +2 -2
  116. package/dist/factory-assets/connectors/box.js +9 -9
  117. package/dist/factory-assets/connectors/deploy.js +9 -9
  118. package/dist/factory-assets/connectors/devserver.js +9 -9
  119. package/dist/factory-assets/connectors/flow/adapter.js +9 -9
  120. package/dist/factory-assets/connectors/flow/engine.js +4 -4
  121. package/dist/factory-assets/connectors/flow/run-flow.js +10 -10
  122. package/dist/factory-assets/connectors/flow.js +9 -9
  123. package/dist/factory-assets/connectors/git.js +9 -9
  124. package/dist/factory-assets/connectors/gmail.js +9 -9
  125. package/dist/factory-assets/connectors/googledrive.js +9 -9
  126. package/dist/factory-assets/connectors/local.js +9 -9
  127. package/dist/factory-assets/connectors/mattermost.js +9 -9
  128. package/dist/factory-assets/connectors/memory.js +9 -9
  129. package/dist/factory-assets/connectors/minio.js +9 -9
  130. package/dist/factory-assets/connectors/postgres.js +9 -9
  131. package/dist/factory-assets/connectors/s3.js +9 -9
  132. package/dist/factory-assets/connectors/sharepoint.js +9 -9
  133. package/dist/factory-assets/connectors/sqlite.js +9 -9
  134. package/dist/factory-assets/connectors/static-server.js +9 -9
  135. package/dist/factory-assets/connectors/tunnel.js +9 -9
  136. package/dist/factory-assets/connectors/webdav.js +9 -9
  137. package/dist/factory-assets/connectors/xstate-store.js +9 -9
  138. package/dist/factory-assets/connectors/xstate.js +9 -9
  139. package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +17 -15
  140. package/dist/factory-assets/skills/authoring-skaile-manifests/SKILL.md +20 -17
  141. package/dist/factory-assets/skills/skaile-author-asset/SKILL.md +82 -71
  142. package/dist/factory-assets/skills/skaile-manage-workspace/SKILL.md +17 -11
  143. package/dist/factory-assets/skills/skailify/SKILL.md +8 -4
  144. package/dist/{flows-64OAOYLP.js → flows-DTADYIXH.js} +6 -6
  145. package/dist/{flows-64OAOYLP.js.map → flows-DTADYIXH.js.map} +1 -1
  146. package/dist/{helpers-HV5Y57CY.js → helpers-F2RFRT5D.js} +9 -9
  147. package/dist/{helpers-HV5Y57CY.js.map → helpers-F2RFRT5D.js.map} +1 -1
  148. package/dist/library/index.js +4 -4
  149. package/dist/library/src/local/install-library-asset.d.ts +3 -2
  150. package/dist/library/src/local/install-library-asset.d.ts.map +1 -1
  151. package/dist/{library-publish-TVS3WQ4C.js → library-publish-62RFU74A.js} +36 -18
  152. package/dist/library-publish-62RFU74A.js.map +1 -0
  153. package/dist/{open-library-AT6RYQ5M.js → open-library-NVG3CZUO.js} +12 -12
  154. package/dist/{open-library-AT6RYQ5M.js.map → open-library-NVG3CZUO.js.map} +1 -1
  155. package/dist/{open-registry-F2Z4OLXJ.js → open-registry-IYH6W6CN.js} +8 -8
  156. package/dist/{open-registry-F2Z4OLXJ.js.map → open-registry-IYH6W6CN.js.map} +1 -1
  157. package/dist/{paths-P7ZXMDCX.js → paths-STQO4FYF.js} +6 -6
  158. package/dist/{paths-P7ZXMDCX.js.map → paths-STQO4FYF.js.map} +1 -1
  159. package/dist/{plugin-store-27KGLW4S.js → plugin-store-2DTEIJTG.js} +5 -5
  160. package/dist/{plugin-store-27KGLW4S.js.map → plugin-store-2DTEIJTG.js.map} +1 -1
  161. package/dist/{project-J2EROMBW.js → project-44LM6SRV.js} +11 -10
  162. package/dist/{project-J2EROMBW.js.map → project-44LM6SRV.js.map} +1 -1
  163. package/dist/resolver/index.js +3 -3
  164. package/dist/runner/index.js +15 -15
  165. package/dist/sdk/asset-manager.js +6 -6
  166. package/dist/sdk/bridge.js +6 -6
  167. package/dist/sdk/core.js +3 -3
  168. package/dist/sdk/flow.js +4 -4
  169. package/dist/sdk/index.js +15 -15
  170. package/dist/sdk/resolver.js +3 -3
  171. package/dist/sdk/runner.js +15 -15
  172. package/dist/{setup-IFGA4NQA.js → setup-4BV5ZWOZ.js} +16 -15
  173. package/dist/setup-4BV5ZWOZ.js.map +1 -0
  174. package/dist/{skills-3T55L4YT.js → skills-M7OU3WMP.js} +5 -5
  175. package/dist/{skills-3T55L4YT.js.map → skills-M7OU3WMP.js.map} +1 -1
  176. package/dist/{source-HEAE43IL.js → source-HTT6CXUP.js} +13 -13
  177. package/dist/{source-HEAE43IL.js.map → source-HTT6CXUP.js.map} +1 -1
  178. package/dist/{source-manifest-publish-SCAHAYSQ.js → source-manifest-publish-CPXUX3CL.js} +15 -15
  179. package/dist/{source-manifest-publish-SCAHAYSQ.js.map → source-manifest-publish-CPXUX3CL.js.map} +1 -1
  180. package/dist/tui/index.js +15 -15
  181. package/dist/workspace-plugin/adapters/mcp.js +12 -12
  182. package/dist/workspace-plugin/adapters/omp.js +14 -14
  183. package/dist/workspace-plugin/index.js +1 -1
  184. package/package.json +1 -1
  185. package/dist/chunk-3ZVSINEV.js.map +0 -1
  186. package/dist/chunk-KBAE7PU7.js.map +0 -1
  187. package/dist/chunk-WGNFDLHT.js.map +0 -1
  188. package/dist/chunk-ZDMGMWK6.js.map +0 -1
  189. package/dist/library-publish-TVS3WQ4C.js.map +0 -1
  190. package/dist/setup-IFGA4NQA.js.map +0 -1
package/dist/cli/index.js CHANGED
@@ -1,22 +1,24 @@
1
1
  #!/usr/bin/env node
2
- import { makeProvidersCommand, loadRegistryView, addProviderEntry, ProviderRegistryWriteError } from '../chunk-DECPI7DN.js';
3
- import { makeSourceCommand, syncProjectSources } from '../chunk-VLEWVR44.js';
4
- import { AI_RESOURCES } from '../chunk-TVFSA5IQ.js';
5
- import { getStoreConfig, storeFetch, deviceLogin, loadStoreAuthConfig, logout, hasStoredAuth, isStoreAuthenticated, getStoreToken, getStoreIdentity, assetEntryRef, refFor } from '../chunk-YXNYBUQY.js';
6
- import { makeInstallCommand, makeCheckCommand, makeCleanCommand, reportInstalledSoftDeps } from '../chunk-ZDMGMWK6.js';
7
- import { openCatalogSource, openLibraryManager, openLibrary } from '../chunk-TR7KFBIO.js';
8
- import { logErr, S, logOk, logInfo, logWarn, TARGET_DEFAULT_HINT, warnLegacyClaudeCopies, kindColorPad, kindColor, colorRef, formatSoftDepSection, bareSoftDepName, formatSoftDepHint, formatRelativeTime, formatSoftDepRemovePreview, formatSoftDepAddPreview, fitWidth, KIND_COL_WIDTH } from '../chunk-WGN7Z36G.js';
9
- import { createFullRegistry } from '../chunk-ZCSFGGLG.js';
2
+ import { makeProvidersCommand, loadRegistryView, addProviderEntry, ProviderRegistryWriteError } from '../chunk-OANSNVCP.js';
3
+ import { makeSourceCommand, syncProjectSources } from '../chunk-QK756IRJ.js';
4
+ import { AI_RESOURCES } from '../chunk-ZUZ5LLZ2.js';
5
+ import { checkSkillManifest } from '../chunk-UKDFOOEG.js';
6
+ import { getStoreConfig, storeFetch, deviceLogin, loadStoreAuthConfig, logout, hasStoredAuth, isStoreAuthenticated, getStoreToken, getStoreIdentity, assetEntryRef, refFor } from '../chunk-A67BHJCH.js';
7
+ import { makeInstallCommand, makeCheckCommand, makeCleanCommand, reportInstalledSoftDeps } from '../chunk-7KITVWXK.js';
8
+ import { createSpinner } from '../chunk-NESV47MF.js';
9
+ import { openCatalogSource, openLibraryManager, openLibrary } from '../chunk-JF26V3BC.js';
10
+ import { logErr, S, logOk, logInfo, logWarn, TARGET_DEFAULT_HINT, warnLegacyClaudeCopies, kindColorPad, kindColor, colorRef, formatSoftDepSection, bareSoftDepName, formatSoftDepHint, formatRelativeTime, formatSoftDepRemovePreview, formatSoftDepAddPreview, fitWidth, KIND_COL_WIDTH } from '../chunk-JEA32KB6.js';
11
+ import { createFullRegistry } from '../chunk-5NH3U6N5.js';
10
12
  import { LocalSecretsProvider } from '../chunk-HTKZ4AOW.js';
11
- import { runAgentChat, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, loadAgentManifest, compileComposition, MarkdownStreamer, resolveMixin } from '../chunk-D63AJVBW.js';
12
- import { buildClaudePluginFiles } from '../chunk-FZGL7Z52.js';
13
- import '../chunk-QHIMMBJO.js';
14
- import '../chunk-BUZ3K2PT.js';
13
+ import { runAgentChat, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, loadAgentManifest, compileComposition, MarkdownStreamer, resolveMixin } from '../chunk-VETH6MDG.js';
14
+ import { buildClaudePluginFiles } from '../chunk-DTV7HL5R.js';
15
+ import '../chunk-BHUHGLNS.js';
16
+ import '../chunk-XMQAV6T3.js';
15
17
  import '../chunk-R6O6YWU7.js';
16
18
  import '../chunk-GCYD4EGY.js';
17
19
  import '../chunk-JELTQ4H7.js';
18
20
  import '../chunk-4ZTPYIBE.js';
19
- import '../chunk-YTJZQ4HY.js';
21
+ import '../chunk-OXE5A6H6.js';
20
22
  import '../chunk-X5YPJV4N.js';
21
23
  import '../chunk-O7SG5PC2.js';
22
24
  import '../chunk-7QBNJTTQ.js';
@@ -25,47 +27,47 @@ import '../chunk-5LKOAX7I.js';
25
27
  import '../chunk-32NA4TVC.js';
26
28
  import '../chunk-W3UDISS2.js';
27
29
  import '../chunk-HCYS7GFP.js';
28
- import { runFlow, resumeFlow } from '../chunk-4257Q2LH.js';
30
+ import { runFlow, resumeFlow } from '../chunk-SQBPE66C.js';
29
31
  import '../chunk-4R6DROGN.js';
30
32
  import { validateFlowVersions, parseSkillFrontmatter } from '../chunk-JAJG4G5E.js';
31
33
  import '../chunk-JKWU6ULI.js';
32
34
  import '../chunk-CT6NQSA4.js';
33
- import '../chunk-OOKFZW6H.js';
35
+ import '../chunk-ONWTPXVU.js';
34
36
  import '../chunk-QMWMSZQ4.js';
35
- import '../chunk-CZ35I4RK.js';
36
- import '../chunk-7L4WFH3Y.js';
37
+ import '../chunk-RD6GE4HU.js';
38
+ import '../chunk-IDUGP4V7.js';
37
39
  import '../chunk-LAI7X6I2.js';
38
40
  import '../chunk-EINLFFP6.js';
39
41
  import '../chunk-LOO5CB5M.js';
40
42
  import '../chunk-BNUZEYC3.js';
41
- import '../chunk-ERCSHLTF.js';
43
+ import '../chunk-LUBS5DXY.js';
42
44
  import '../chunk-XBSQ4KMC.js';
43
45
  import '../chunk-YROR332M.js';
44
- import { getProviderPreset, AI_PROVIDER_PRESETS } from '../chunk-FTYM4VRZ.js';
46
+ import { getProviderPreset, AI_PROVIDER_PRESETS } from '../chunk-AE42DHSH.js';
45
47
  import '../chunk-6E6PKKAD.js';
46
48
  import '../chunk-IFGTRL2I.js';
47
- import { projectAiAssetsRoots, loadFlow, loadAllFlowEntries, findFlowFileInRoots } from '../chunk-LM5XEFNS.js';
49
+ import { projectAiAssetsRoots, loadFlow, loadAllFlowEntries, findFlowFileInRoots } from '../chunk-UAAAERXI.js';
48
50
  import '../chunk-37FTLYFP.js';
49
51
  import '../chunk-QZLWJETK.js';
50
52
  import '../chunk-XUUYAS3Z.js';
51
53
  import { nodeLabel, nodeSkillAsset, nodeIsInert, nodeIsOptional, nodeRunKind, flowSkillVersionPins } from '../chunk-NFGRW3L7.js';
52
54
  import '../chunk-QCI6D7E4.js';
53
55
  import '../chunk-K2K7OF4P.js';
54
- import { AssetManager, NON_DEPLOYABLE_KINDS, MissingManifestError, parseRefTolerant, normalizeRepoUrl, FACTORY_SOURCE_URL } from '../chunk-WGNFDLHT.js';
55
- import { cloneOrInitGitRepo, ensureGitRepo, setManifestPublisher, syncManifestWithDisk, isGitRepo, assertManifestEditable, installLibraryAsset, missingRootAssets, stampManifestPublisher, upsertManifestAsset, getStoreManifestsDir, getDefaultValue, isSecretPlaceholder } from '../chunk-3ZVSINEV.js';
56
+ import { AssetManager, NON_DEPLOYABLE_KINDS, MissingManifestError, parseRefTolerant, normalizeRepoUrl, FACTORY_SOURCE_URL } from '../chunk-BATL2CWI.js';
57
+ import { cloneOrInitGitRepo, ensureGitRepo, setManifestPublisher, syncManifestWithDisk, isGitRepo, assertManifestEditable, installLibraryAsset, missingRootAssets, stampManifestPublisher, upsertManifestAsset, getStoreManifestsDir, getDefaultValue, isSecretPlaceholder } from '../chunk-Y5OCUOXF.js';
56
58
  import { parseManifestFile } from '../chunk-Y7UBRRKG.js';
57
59
  import '../chunk-VKSA2CDJ.js';
58
60
  import '../chunk-R7FOF242.js';
59
61
  import '../chunk-ZDKJHQY2.js';
60
- import '../chunk-K2JVODQD.js';
62
+ import '../chunk-37DN45RR.js';
61
63
  import '../chunk-CGYEHQOX.js';
62
- import { resolveSettings, globalSettingsPath, projectSettingsPath, loadSettings, saveSettings, WorkspaceYamlEditor, resolveLibraryDir, checkAgentSkillConformance, globalInstallDir, GLOBAL_INSTALL_DIR_NAME, readLock, workspaceProviderRegistryPath, userProviderRegistryPath, loadProviderRegistryFile, aiResourceRoots } from '../chunk-6GBQND2F.js';
64
+ import { resolveSettings, globalSettingsPath, projectSettingsPath, loadSettings, saveSettings, WorkspaceYamlEditor, resolveLibraryDir, checkAgentSkillConformance, globalInstallDir, GLOBAL_INSTALL_DIR_NAME, readLock, workspaceProviderRegistryPath, userProviderRegistryPath, loadProviderRegistryFile, aiResourceRoots } from '../chunk-QEXEHXX5.js';
63
65
  import '../chunk-4GY63JU6.js';
64
- import { factoryAssetRoots } from '../chunk-4SSKKFDF.js';
66
+ import { factoryAssetRoots } from '../chunk-JCATNLY3.js';
65
67
  import '../chunk-XGIS325V.js';
66
68
  import { DEFAULT_DRIVER_ID, DRIVER_DEFAULTS } from '../chunk-5BEFNLOR.js';
67
69
  import { findKindDirs } from '../chunk-A2ULN3KX.js';
68
- import { sourceCacheKey, getGlobalCacheDir, resolveAgentDir, AgentRefResolutionError, matchPin, coerceVersion, loadSkWorkspaceConfig, resolveSkWorkspaceConfig, storeManifestSlug, isWorkspaceConfigFilename } from '../chunk-KBAE7PU7.js';
70
+ import { sourceCacheKey, getGlobalCacheDir, resolveAgentDir, AgentRefResolutionError, matchPin, coerceVersion, loadSkWorkspaceConfig, resolveSkWorkspaceConfig, storeManifestSlug, isWorkspaceConfigFilename } from '../chunk-6IGFSUTE.js';
69
71
  import { globalCacheRoot, globalSkaileDir, userConfigPath } from '../chunk-MFHKHXDE.js';
70
72
  import { SUPPORTED_DRIVER_TARGETS } from '../chunk-TOSHZX4C.js';
71
73
  import { loadSkPublishManifest, SKAILE_MANIFEST_FILENAME, decodeSkaileManifest } from '../chunk-SR4RFKHM.js';
@@ -80,7 +82,7 @@ import '../chunk-BOFL7GIF.js';
80
82
  import '../chunk-KTBKW2FI.js';
81
83
  import '../chunk-UQ6LFBPZ.js';
82
84
  import '../chunk-TNWXGHLD.js';
83
- import { validatePreset, SKILL_BODY_PLACEHOLDER } from '../chunk-5CYEWBPB.js';
85
+ import { validatePreset } from '../chunk-5CYEWBPB.js';
84
86
  import '../chunk-NSBPE2FW.js';
85
87
  import * as fs12 from 'fs';
86
88
  import fs12__default, { readFileSync, existsSync, mkdirSync, writeFileSync, lstatSync, rmSync, readdirSync, statSync } from 'fs';
@@ -89,7 +91,7 @@ import path36__default, { resolve, join } from 'path';
89
91
  import { fileURLToPath } from 'url';
90
92
  import { Help, Command, Option } from 'commander';
91
93
  import { rcompare } from 'semver';
92
- import * as p5 from '@clack/prompts';
94
+ import * as p4 from '@clack/prompts';
93
95
  import pc5 from 'picocolors';
94
96
  import { parse, stringify, parseDocument } from 'yaml';
95
97
  import * as os from 'os';
@@ -132,6 +134,10 @@ async function runSearch(kind, query, opts) {
132
134
  query = kind;
133
135
  kind = void 0;
134
136
  }
137
+ if (kind && query === void 0 && !ASSET_KINDS.includes(kind)) {
138
+ query = kind;
139
+ kind = void 0;
140
+ }
135
141
  const showLocal = !opts.store;
136
142
  const showStore = !opts.local;
137
143
  const { resolveConfig } = await import('../library/index.js');
@@ -144,7 +150,7 @@ async function runSearch(kind, query, opts) {
144
150
  }
145
151
  }
146
152
  async function searchIndex(query, kind) {
147
- const { openLibrary: openLibrary2 } = await import('../open-library-AT6RYQ5M.js');
153
+ const { openLibrary: openLibrary2 } = await import('../open-library-NVG3CZUO.js');
148
154
  const library = await openLibrary2();
149
155
  try {
150
156
  const defs = await library.listAssetDefs(kind ? { kind } : {});
@@ -177,7 +183,7 @@ async function searchIndex(query, kind) {
177
183
  }
178
184
  async function searchFactory(projectDir, query, kind) {
179
185
  const prefixes = factoryAssetRoots().map((r) => r.endsWith(path36__default.sep) ? r : r + path36__default.sep);
180
- const isFactoryPath = (p7) => prefixes.some((fp) => p7 === fp.slice(0, -1) || p7.startsWith(fp));
186
+ const isFactoryPath = (p6) => prefixes.some((fp) => p6 === fp.slice(0, -1) || p6.startsWith(fp));
181
187
  try {
182
188
  const entries = await new AssetManager({ projectDir }).search(query, kind);
183
189
  return entries.filter((e) => isFactoryPath(e.source));
@@ -197,7 +203,7 @@ async function searchLocal(query, kind, opts, showStore, airGapped) {
197
203
  const factory = await searchFactory(projectDir, query, kind);
198
204
  let entries = unionEntries(await searchIndex(query, kind), factory);
199
205
  if (entries.length === 0 && !query && !kind && !airGapped) {
200
- const { autoSyncForSearch } = await import('../source-HEAE43IL.js');
206
+ const { autoSyncForSearch } = await import('../source-HTT6CXUP.js');
201
207
  if (await autoSyncForSearch(projectDir)) {
202
208
  entries = unionEntries(await searchIndex(query, kind), factory);
203
209
  }
@@ -216,31 +222,70 @@ async function searchLocal(query, kind, opts, showStore, airGapped) {
216
222
  }
217
223
  printLocalEntries(entries);
218
224
  }
225
+ var MIN_LOCAL_DESCRIPTION_WIDTH = 10;
226
+ function layoutLocalTable(rows, width, style = {}) {
227
+ const styleRef = style.ref ?? ((s) => s);
228
+ const styleVer = style.version ?? ((s) => s);
229
+ const gap = COLUMN_GAP.length;
230
+ const indent = 2;
231
+ const pad = " ".repeat(indent);
232
+ const nameW = Math.max(4, ...rows.map((r) => r.ref.length));
233
+ const verW = Math.max(0, ...rows.map((r) => r.version.length));
234
+ const verSpan = verW > 0 ? gap + verW : 0;
235
+ const refCell = (ref) => styleRef(ref) + " ".repeat(nameW - ref.length);
236
+ const lines = [];
237
+ const descW = width - (indent + nameW + gap + verSpan);
238
+ if (descW >= MIN_LOCAL_DESCRIPTION_WIDTH) {
239
+ for (const r of rows) {
240
+ const desc = truncateText(r.description, descW);
241
+ const descCell = verW > 0 ? desc.padEnd(descW) : desc;
242
+ lines.push(
243
+ `${pad}${refCell(r.ref)}${COLUMN_GAP}${descCell}${r.version ? `${COLUMN_GAP}${styleVer(r.version)}` : ""}`
244
+ );
245
+ }
246
+ return { ruleWidth: nameW + gap + descW + verSpan, lines };
247
+ }
248
+ if (indent + nameW + verSpan <= width) {
249
+ for (const r of rows) {
250
+ lines.push(
251
+ verW > 0 ? `${pad}${refCell(r.ref)}${r.version ? `${COLUMN_GAP}${styleVer(r.version)}` : ""}` : `${pad}${styleRef(r.ref)}`
252
+ );
253
+ }
254
+ return { ruleWidth: nameW + verSpan, lines };
255
+ }
256
+ const subPad = " ".repeat(indent + 2);
257
+ const subDescW = width - (indent + 2) - verSpan;
258
+ for (const r of rows) {
259
+ lines.push(`${pad}${styleRef(r.ref)}`);
260
+ const desc = subDescW >= MIN_LOCAL_DESCRIPTION_WIDTH ? truncateText(r.description, subDescW) : "";
261
+ const descCell = r.version && desc ? desc.padEnd(subDescW) : desc;
262
+ const parts = [descCell, r.version ? styleVer(r.version) : ""].filter((s) => s !== "");
263
+ if (parts.length > 0) lines.push(`${subPad}${parts.join(COLUMN_GAP)}`);
264
+ }
265
+ return { ruleWidth: Math.max(1, Math.min(nameW, width - indent)), lines };
266
+ }
219
267
  function printLocalEntries(entries, width = terminalWidth()) {
220
268
  const byKind = /* @__PURE__ */ new Map();
221
269
  for (const e of entries) {
222
270
  if (!byKind.has(e.kind)) byKind.set(e.kind, []);
223
271
  byKind.get(e.kind).push(e);
224
272
  }
225
- const verOf = (e) => e.version ? `v${e.version}` : "";
226
273
  for (const [k, items] of byKind) {
227
- const nameW = Math.max(4, ...items.map((e) => localEntryRef(e).length));
228
- const verW = Math.max(0, ...items.map((e) => verOf(e).length));
229
- const fixed = 2 + nameW + COLUMN_GAP.length + (verW > 0 ? COLUMN_GAP.length + verW : 0);
230
- const descW = Math.max(MIN_DESCRIPTION_WIDTH, width - fixed);
274
+ const { ruleWidth, lines } = layoutLocalTable(
275
+ items.map((e) => ({
276
+ ref: localEntryRef(e),
277
+ description: e.description,
278
+ version: e.version ? `v${e.version}` : ""
279
+ })),
280
+ width,
281
+ { ref: S.cmd, version: S.dim }
282
+ );
231
283
  console.log();
232
284
  console.log(
233
285
  ` ${kindColor(k)} ${S.heading(`${k.toUpperCase()}S`)} ${S.dim(`(${items.length})`)}`
234
286
  );
235
- console.log(` ${S.rule(fixed - 2 + descW)}`);
236
- for (const e of items) {
237
- const desc = truncateText(e.description, descW);
238
- const ver = verOf(e);
239
- const descCell = ver ? desc.padEnd(descW) : desc;
240
- console.log(
241
- ` ${S.cmd(localEntryRef(e).padEnd(nameW))}${COLUMN_GAP}${descCell}${ver ? `${COLUMN_GAP}${S.dim(ver)}` : ""}`
242
- );
243
- }
287
+ console.log(` ${S.rule(Math.max(1, Math.min(ruleWidth, width - 2)))}`);
288
+ for (const line of lines) console.log(line);
244
289
  }
245
290
  console.log(`
246
291
  ${S.dim(`${entries.length} total`)}
@@ -267,7 +312,7 @@ async function searchStore(query, kind, opts, airGapped) {
267
312
  logInfo("air-gapped (cache_ttl: 0) \u2014 local sources only");
268
313
  return;
269
314
  }
270
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError } = await import('../open-library-AT6RYQ5M.js');
315
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError } = await import('../open-library-NVG3CZUO.js');
271
316
  try {
272
317
  const remote = await openCatalogSource2({ projectDir: path36__default.resolve(opts.projectDir) });
273
318
  const assets = await remote.listAssets(kind ? { kind } : {});
@@ -293,7 +338,7 @@ async function searchStore(query, kind, opts, airGapped) {
293
338
  }
294
339
  }
295
340
  function makeSearchCommand() {
296
- return new Command("search").description("Search across all repos").argument("[kind]", "Filter by asset kind").argument("[query]", "Search query").option("--project-dir <path>", "Project directory", process.cwd()).option("--store", "Search only the store").option("--local", "Search only local repos").action(async (kind, query, opts) => {
341
+ return new Command("search").description("Search across all repos").argument("[kind]", "Filter by asset kind (a single non-kind argument is the query)").argument("[query]", "Search query").option("--project-dir <path>", "Project directory", process.cwd()).option("--store", "Search only the store").option("--local", "Search only local repos").action(async (kind, query, opts) => {
297
342
  await runSearch(kind, query, opts);
298
343
  });
299
344
  }
@@ -390,18 +435,22 @@ function makeAddCommand() {
390
435
  harnesses,
391
436
  driverTarget: opts.target
392
437
  });
393
- const spinner4 = p5.spinner();
394
- spinner4.start(`Adding ${ref}`);
438
+ const spinner = createSpinner();
439
+ spinner.start(`Adding ${ref}`);
395
440
  try {
396
- const added = await am2.add(ref, { link: opts.link });
397
- spinner4.stop("Done");
441
+ const libraryOf = /* @__PURE__ */ new Map();
442
+ const added = await am2.add(ref, {
443
+ link: opts.link,
444
+ onLibraryOrigin: (deployedRef, library) => libraryOf.set(deployedRef, library)
445
+ });
446
+ spinner.stop("Done");
398
447
  await promptSoftDepAdds(am2, ref, {
399
448
  isTTY: !!process.stdin.isTTY,
400
449
  link: opts.link,
401
450
  withSoftDeps: opts.withSoftDeps,
402
451
  noSoftDeps: opts.softDeps === false,
403
- confirm: (message) => p5.confirm({ message, initialValue: false }),
404
- isCancel: p5.isCancel,
452
+ confirm: (message) => p4.confirm({ message, initialValue: false }),
453
+ isCancel: p4.isCancel,
405
454
  onAdded: logOk,
406
455
  onError: logErr,
407
456
  onHint: (line) => logInfo(S.dim(line))
@@ -413,10 +462,15 @@ function makeAddCommand() {
413
462
  `Recorded in skaile.yaml${kind === "mcp-server" ? " (bytes fetched + verified into .skaile/cache/store)" : ""}. ${kind} assets are not deployed into the driver target \u2014 they are wired when skaile runs the agent.`
414
463
  );
415
464
  else logInfo("Nothing to deploy (already up to date).");
416
- } else for (const a of added) logOk(a);
465
+ } else {
466
+ for (const a of added) {
467
+ const library = libraryOf.get(a);
468
+ logOk(library ? `${a} (library ${library})` : a);
469
+ }
470
+ }
417
471
  await reportBundleMembership(am2, ref, (line) => logInfo(S.dim(line)));
418
472
  } catch (err) {
419
- spinner4.stop("Failed");
473
+ spinner.stop("Failed");
420
474
  logErr(String(err));
421
475
  process.exit(1);
422
476
  }
@@ -443,8 +497,8 @@ function makeRemoveCommand() {
443
497
  await promptSoftDepRemovals(am2, ref, {
444
498
  isTTY: !!process.stdin.isTTY,
445
499
  noSoftDeps: opts.softDeps === false,
446
- confirm: (message) => p5.confirm({ message, initialValue: false }),
447
- isCancel: p5.isCancel,
500
+ confirm: (message) => p4.confirm({ message, initialValue: false }),
501
+ isCancel: p4.isCancel,
448
502
  onRemoved: logOk,
449
503
  onHint: (line) => logInfo(S.dim(line))
450
504
  });
@@ -589,7 +643,7 @@ async function resolveInfoEntry(am2, ref, opts) {
589
643
  return { entry: match ?? deployed };
590
644
  }
591
645
  const lookup = opts.storeLookup ?? (async (filter) => {
592
- const { resolveCatalogSource } = await import('../open-library-AT6RYQ5M.js');
646
+ const { resolveCatalogSource } = await import('../open-library-NVG3CZUO.js');
593
647
  const { source, close } = await resolveCatalogSource({ projectDir: opts.projectDir });
594
648
  try {
595
649
  return await source.listAssets(filter);
@@ -605,7 +659,7 @@ async function resolveInfoEntry(am2, ref, opts) {
605
659
  );
606
660
  return { entry: hit ? catalogAssetToEntry(hit) : null };
607
661
  } catch (err) {
608
- const { LocalCatalogDisabledError } = await import('../open-library-AT6RYQ5M.js');
662
+ const { LocalCatalogDisabledError } = await import('../open-library-NVG3CZUO.js');
609
663
  const storeNote = err instanceof Error ? err.message : String(err);
610
664
  const disabled = err instanceof LocalCatalogDisabledError || /catalog\.url/i.test(storeNote);
611
665
  return { entry: null, storeNote, ...disabled ? { storeDisabled: true } : {} };
@@ -706,7 +760,7 @@ async function indexLibrary(lib, index) {
706
760
  }
707
761
  }
708
762
  function resolveLibraryPublisherDetailed(lib, opts, storeIdentity) {
709
- const bare = (p7) => p7.startsWith("@") ? p7.slice(1) : p7;
763
+ const bare = (p6) => p6.startsWith("@") ? p6.slice(1) : p6;
710
764
  if (opts.publisher?.trim()) return { publisher: bare(opts.publisher.trim()), source: "flag" };
711
765
  const declared = loadSkPublishManifest(lib.path)?.publisher?.trim();
712
766
  if (declared) return { publisher: bare(declared), source: "manifest" };
@@ -775,6 +829,39 @@ async function registerLibraryAsset(lib, index, input) {
775
829
  for (const e of idx.errors) logWarn(e);
776
830
  return { publisher, ref: refFor(input.kind, publisher, input.name, input.version) };
777
831
  }
832
+ var LIBRARY_UPGRADE_DOCS = "https://github.com/skaile-ai/workspaces/blob/main/docs/sections/cli/commands/library.md#upgrading-a-4x-library";
833
+ var DOMAIN_REMOVED_HINT = `Domains were removed in 5.0 \u2014 delete DOMAIN.md files; group assets with .claude-plugin/marketplace.json. See ${LIBRARY_UPGRADE_DOCS}`;
834
+ function countDomainFiles(root) {
835
+ let count = 0;
836
+ const walk = (dir) => {
837
+ let entries;
838
+ try {
839
+ entries = fs12.readdirSync(dir, { withFileTypes: true });
840
+ } catch {
841
+ return;
842
+ }
843
+ for (const entry of entries) {
844
+ if (entry.isDirectory()) {
845
+ if (!entry.name.startsWith(".") && entry.name !== "node_modules") {
846
+ walk(path36.join(dir, entry.name));
847
+ }
848
+ } else if (entry.name === "DOMAIN.md") {
849
+ count++;
850
+ }
851
+ }
852
+ };
853
+ walk(root);
854
+ return count;
855
+ }
856
+ function warnIgnoredDomainFiles(root) {
857
+ const count = countDomainFiles(root);
858
+ if (count > 0) {
859
+ logWarn(
860
+ `${count} DOMAIN.md file(s) are ignored since 5.0 (domains were removed) \u2014 delete them; group assets with .claude-plugin/marketplace.json. See ${LIBRARY_UPGRADE_DOCS}`
861
+ );
862
+ }
863
+ return count;
864
+ }
778
865
  var DEFAULT_IMPORT_VERSION = "0.1.0";
779
866
  var DEFAULT_IMPORT_STAGE = "alpha";
780
867
  function claudeSkillRoots() {
@@ -872,9 +959,18 @@ async function resolveDefByRef(library, ref, opts) {
872
959
  function withCanonicalRef(def) {
873
960
  return { ref: catalogAssetRef(def), ...def };
874
961
  }
962
+ function resolveLibraryOption(opts) {
963
+ if (opts.library && opts.to && opts.library !== opts.to) {
964
+ logErr(
965
+ `Conflicting options: --library "${opts.library}" and --to "${opts.to}". Use --library.`
966
+ );
967
+ process.exit(1);
968
+ }
969
+ return opts.library ?? opts.to;
970
+ }
875
971
  function makeAssetCommand() {
876
972
  const cmd = new Command("asset").description("Author and install AI assets");
877
- cmd.command("import <name-or-path>").description("Import + skailify an existing coding-agent skill into a library").option("--to <library>", "Target library (default: auto / personal)").option("--version <semver>", "Version to stamp when the skill ships none").option("--stage <stage>", "Lifecycle stage to stamp (default: alpha)").option("--no-normalize", "Copy verbatim \u2014 skip frontmatter normalization").option(
973
+ cmd.command("import <name-or-path>").description("Import + skailify an existing coding-agent skill into a library").option("--library <library>", "Target library (default: auto / personal)").addOption(new Option("--to <library>", "Alias for --library").hideHelp()).option("--version <semver>", "Version to stamp when the skill ships none").option("--stage <stage>", "Lifecycle stage to stamp (default: alpha)").option("--no-normalize", "Copy verbatim \u2014 skip frontmatter normalization").option(
878
974
  "--publisher <name>",
879
975
  "Publisher for the imported skill (default: the library's, else your store login)"
880
976
  ).option("--commit", "Auto-commit in git-backed libraries", false).action(
@@ -887,18 +983,19 @@ function makeAssetCommand() {
887
983
  process.exit(1);
888
984
  }
889
985
  logInfo(`Source: ${S.dim(src.dir)} (${src.via})`);
986
+ const libraryName = resolveLibraryOption(opts);
890
987
  const { manager, library, close } = await openLibraryManager();
891
988
  try {
892
989
  let target;
893
- if (opts.to) {
894
- target = await manager.requireLibrary(opts.to);
990
+ if (libraryName) {
991
+ target = await manager.requireLibrary(libraryName);
895
992
  } else {
896
993
  const found = await manager.findDefaultLibrary();
897
994
  const def = found && found.ownership !== "reader" ? found : void 0;
898
995
  target = def ?? (await manager.ensurePersonalLibrary(resolveLibraryDir())).library;
899
996
  }
900
997
  if (target.ownership === "reader") {
901
- logErr(`Library "${target.name}" is read-only (ownership=reader). Choose --to.`);
998
+ logErr(`Library "${target.name}" is read-only (ownership=reader). Choose --library.`);
902
999
  process.exit(1);
903
1000
  }
904
1001
  try {
@@ -957,7 +1054,7 @@ function makeAssetCommand() {
957
1054
  }
958
1055
  }
959
1056
  );
960
- cmd.command("migrate <path>").description("Move/copy/link a workspace asset into a library").option("--to <library>", "Target library (default: auto)").option("--mode <mode>", "copy | move | link", "copy").option("--commit", "Auto-commit in git-backed libraries", false).action(
1057
+ cmd.command("migrate <path>").description("Move/copy/link a workspace asset into a library").option("--library <library>", "Target library (default: auto)").addOption(new Option("--to <library>", "Alias for --library").hideHelp()).option("--mode <mode>", "copy | move | link", "copy").option("--commit", "Auto-commit in git-backed libraries", false).action(
961
1058
  async (srcPath, opts) => {
962
1059
  if (!["copy", "move", "link"].includes(opts.mode)) {
963
1060
  logErr(`Invalid --mode "${opts.mode}". Expected: copy | move | link.`);
@@ -967,11 +1064,12 @@ function makeAssetCommand() {
967
1064
  logErr(`Source path does not exist: ${srcPath}`);
968
1065
  process.exit(1);
969
1066
  }
1067
+ const libraryName = resolveLibraryOption(opts);
970
1068
  const { manager, close } = await openLibraryManager();
971
1069
  try {
972
1070
  let target;
973
- if (opts.to) {
974
- target = await manager.requireLibrary(opts.to);
1071
+ if (libraryName) {
1072
+ target = await manager.requireLibrary(libraryName);
975
1073
  } else {
976
1074
  const found = await manager.findDefaultLibrary();
977
1075
  const def = found && found.ownership !== "reader" ? found : void 0;
@@ -984,7 +1082,7 @@ function makeAssetCommand() {
984
1082
  }
985
1083
  if (target.ownership === "reader") {
986
1084
  logErr(
987
- `Library "${target.name}" is read-only (ownership=reader). Choose another with --to.`
1085
+ `Library "${target.name}" is read-only (ownership=reader). Choose another with --library.`
988
1086
  );
989
1087
  process.exit(1);
990
1088
  }
@@ -1078,7 +1176,7 @@ function makeAssetCommand() {
1078
1176
  }
1079
1177
  );
1080
1178
  cmd.addCommand(makeListCommand());
1081
- cmd.command("show <ref>").description("Show details for an asset by canonical ref").action(async (ref) => {
1179
+ cmd.command("show <ref>").description("Show details for an asset by canonical ref (prints JSON)").option("--json", "Print JSON (the default and only output format)").action(async (ref, _opts) => {
1082
1180
  const { library, close } = await openLibraryManager();
1083
1181
  try {
1084
1182
  const def = await resolveDefByRef(library, ref);
@@ -1198,10 +1296,10 @@ function makeCacheCommand() {
1198
1296
  return;
1199
1297
  }
1200
1298
  if (!opts.yes) {
1201
- const ok = await p5.confirm({
1299
+ const ok = await p4.confirm({
1202
1300
  message: opts.global ? "Clear project AND global cache?" : "Clear project cache?"
1203
1301
  });
1204
- if (p5.isCancel(ok) || !ok) {
1302
+ if (p4.isCancel(ok) || !ok) {
1205
1303
  logInfo("Cancelled.");
1206
1304
  return;
1207
1305
  }
@@ -1259,7 +1357,7 @@ function makeCatalogCommand() {
1259
1357
  return catalog;
1260
1358
  }
1261
1359
  async function runLocalCatalogTest(projectDir) {
1262
- const { resolveCatalogSource } = await import('../open-library-AT6RYQ5M.js');
1360
+ const { resolveCatalogSource } = await import('../open-library-NVG3CZUO.js');
1263
1361
  let resolved;
1264
1362
  try {
1265
1363
  resolved = await resolveCatalogSource({ projectDir });
@@ -1403,8 +1501,8 @@ async function scanLibraryFlowEntries() {
1403
1501
  const indexPath = resolveIndexPath();
1404
1502
  if (!existsSync(indexPath)) return entries;
1405
1503
  const [{ authoringLibraries }, { createFullRegistry: createFullRegistry2 }] = await Promise.all([
1406
- import('../open-library-AT6RYQ5M.js'),
1407
- import('../open-registry-F2Z4OLXJ.js')
1504
+ import('../open-library-NVG3CZUO.js'),
1505
+ import('../open-registry-IYH6W6CN.js')
1408
1506
  ]);
1409
1507
  const index = new LocalIndex({ indexPath });
1410
1508
  try {
@@ -1546,12 +1644,12 @@ var API_KEY_PREFIX = "apiKey.";
1546
1644
  function collectWorkspaceDefaults(projectDir) {
1547
1645
  const wsDefaults = {};
1548
1646
  const ws = resolveSkWorkspaceConfig(projectDir);
1549
- const p7 = ws.agent_config?.default ?? {};
1550
- if (p7.driver) wsDefaults.driver = p7.driver;
1551
- if (p7.model) wsDefaults.model = p7.model;
1552
- if (p7.skills_dir) wsDefaults.skills_dir = p7.skills_dir;
1553
- if (p7.agents_dir) wsDefaults.agents_dir = p7.agents_dir;
1554
- if (p7.prompts_dir) wsDefaults.prompts_dir = p7.prompts_dir;
1647
+ const p6 = ws.agent_config?.default ?? {};
1648
+ if (p6.driver) wsDefaults.driver = p6.driver;
1649
+ if (p6.model) wsDefaults.model = p6.model;
1650
+ if (p6.skills_dir) wsDefaults.skills_dir = p6.skills_dir;
1651
+ if (p6.agents_dir) wsDefaults.agents_dir = p6.agents_dir;
1652
+ if (p6.prompts_dir) wsDefaults.prompts_dir = p6.prompts_dir;
1555
1653
  for (const [role, target] of Object.entries(ws.roles ?? {})) {
1556
1654
  wsDefaults[`@${role}`] = target;
1557
1655
  }
@@ -2364,7 +2462,7 @@ async function ensureTargetsRegistered(projectDir) {
2364
2462
  const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
2365
2463
  const config = resolveSkWorkspaceConfig2(projectDir);
2366
2464
  if (config.plugins && config.plugins.length > 0) {
2367
- const { ensurePluginsLoaded } = await import('../plugin-store-27KGLW4S.js');
2465
+ const { ensurePluginsLoaded } = await import('../plugin-store-2DTEIJTG.js');
2368
2466
  const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
2369
2467
  for (const f of result.failed) logWarn(f.error);
2370
2468
  }
@@ -2589,10 +2687,10 @@ var MCP_SERVER_ENTRY = {
2589
2687
  function pluginDir(projectDir) {
2590
2688
  return path36__default.join(projectDir, ".claude", "plugins", "skaile");
2591
2689
  }
2592
- async function readJsonStrict(p7) {
2690
+ async function readJsonStrict(p6) {
2593
2691
  let raw;
2594
2692
  try {
2595
- raw = await fs6.readFile(p7, "utf-8");
2693
+ raw = await fs6.readFile(p6, "utf-8");
2596
2694
  } catch {
2597
2695
  return null;
2598
2696
  }
@@ -2600,13 +2698,13 @@ async function readJsonStrict(p7) {
2600
2698
  return JSON.parse(raw);
2601
2699
  } catch (e) {
2602
2700
  throw new Error(
2603
- `cannot parse ${p7}: ${e instanceof Error ? e.message : String(e)}; please fix or remove`
2701
+ `cannot parse ${p6}: ${e instanceof Error ? e.message : String(e)}; please fix or remove`
2604
2702
  );
2605
2703
  }
2606
2704
  }
2607
- async function writeJson(p7, value) {
2608
- await fs6.mkdir(path36__default.dirname(p7), { recursive: true });
2609
- await fs6.writeFile(p7, `${JSON.stringify(value, null, 2)}
2705
+ async function writeJson(p6, value) {
2706
+ await fs6.mkdir(path36__default.dirname(p6), { recursive: true });
2707
+ await fs6.writeFile(p6, `${JSON.stringify(value, null, 2)}
2610
2708
  `);
2611
2709
  }
2612
2710
  async function copyDir(src, dest) {
@@ -2661,7 +2759,7 @@ async function uninstall(projectDir) {
2661
2759
  let changed = false;
2662
2760
  const settings = await readJsonStrict(settingsPath);
2663
2761
  if (settings && Array.isArray(settings.plugins)) {
2664
- const next = settings.plugins.filter((p7) => p7 !== dir);
2762
+ const next = settings.plugins.filter((p6) => p6 !== dir);
2665
2763
  if (next.length !== settings.plugins.length) {
2666
2764
  changed = true;
2667
2765
  const updated = { ...settings, plugins: next };
@@ -2708,7 +2806,7 @@ async function enable(projectDir) {
2708
2806
  const settings = await readJsonStrict(settingsPath) ?? {};
2709
2807
  if (detected.method === "plugin") {
2710
2808
  const disabled2 = settings.disabledPlugins ?? [];
2711
- const next2 = disabled2.filter((p7) => p7 !== detected.pluginPath);
2809
+ const next2 = disabled2.filter((p6) => p6 !== detected.pluginPath);
2712
2810
  if (next2.length === disabled2.length) return { changed: false };
2713
2811
  const updated2 = { ...settings, disabledPlugins: next2 };
2714
2812
  if (next2.length === 0) delete updated2.disabledPlugins;
@@ -2789,10 +2887,10 @@ function buildEntry(projectDir) {
2789
2887
  env: { SKAILE_PROJECT_DIR: projectDir }
2790
2888
  };
2791
2889
  }
2792
- async function readConfig(p7) {
2890
+ async function readConfig(p6) {
2793
2891
  let raw;
2794
2892
  try {
2795
- raw = await fs6.readFile(p7, "utf-8");
2893
+ raw = await fs6.readFile(p6, "utf-8");
2796
2894
  } catch {
2797
2895
  return null;
2798
2896
  }
@@ -2800,41 +2898,41 @@ async function readConfig(p7) {
2800
2898
  return parse$1(raw);
2801
2899
  } catch (e) {
2802
2900
  throw new Error(
2803
- `cannot parse ${p7}: ${e instanceof Error ? e.message : String(e)}; please fix or remove`
2901
+ `cannot parse ${p6}: ${e instanceof Error ? e.message : String(e)}; please fix or remove`
2804
2902
  );
2805
2903
  }
2806
2904
  }
2807
- async function writeConfig(p7, value) {
2808
- await fs6.mkdir(path36__default.dirname(p7), { recursive: true });
2905
+ async function writeConfig(p6, value) {
2906
+ await fs6.mkdir(path36__default.dirname(p6), { recursive: true });
2809
2907
  const cleaned = {};
2810
2908
  for (const [k, v] of Object.entries(value)) {
2811
2909
  if (v === void 0) continue;
2812
2910
  cleaned[k] = v;
2813
2911
  }
2814
- await fs6.writeFile(p7, stringify$1(cleaned));
2912
+ await fs6.writeFile(p6, stringify$1(cleaned));
2815
2913
  }
2816
2914
  function configPath(projectDir) {
2817
2915
  return path36__default.join(projectDir, ".codex", "config.toml");
2818
2916
  }
2819
2917
  async function install2(projectDir) {
2820
- const p7 = configPath(projectDir);
2821
- const cfg = await readConfig(p7) ?? {};
2918
+ const p6 = configPath(projectDir);
2919
+ const cfg = await readConfig(p6) ?? {};
2822
2920
  const next = buildEntry(projectDir);
2823
2921
  const servers = { ...cfg.mcp_servers ?? {} };
2824
2922
  const previous = servers[SKAILE_MCP_NAME2];
2825
2923
  const matches = previous && JSON.stringify(previous) === JSON.stringify(next);
2826
2924
  let warning;
2827
2925
  if (previous && !matches) {
2828
- warning = `overwrote existing ${SKAILE_MCP_NAME2} entry in ${path36__default.relative(projectDir, p7)}`;
2926
+ warning = `overwrote existing ${SKAILE_MCP_NAME2} entry in ${path36__default.relative(projectDir, p6)}`;
2829
2927
  }
2830
2928
  if (matches) return { changed: false, method: "toml" };
2831
2929
  servers[SKAILE_MCP_NAME2] = next;
2832
- await writeConfig(p7, { ...cfg, mcp_servers: servers });
2930
+ await writeConfig(p6, { ...cfg, mcp_servers: servers });
2833
2931
  return { changed: true, method: "toml", warning };
2834
2932
  }
2835
2933
  async function uninstall2(projectDir) {
2836
- const p7 = configPath(projectDir);
2837
- const cfg = await readConfig(p7);
2934
+ const p6 = configPath(projectDir);
2935
+ const cfg = await readConfig(p6);
2838
2936
  if (!cfg?.mcp_servers || !(SKAILE_MCP_NAME2 in cfg.mcp_servers)) {
2839
2937
  return { changed: false };
2840
2938
  }
@@ -2842,15 +2940,15 @@ async function uninstall2(projectDir) {
2842
2940
  const updated = { ...cfg, mcp_servers: rest };
2843
2941
  if (Object.keys(rest).length === 0) delete updated.mcp_servers;
2844
2942
  if (Object.keys(updated).length === 0) {
2845
- await fs6.unlink(p7);
2943
+ await fs6.unlink(p6);
2846
2944
  } else {
2847
- await writeConfig(p7, updated);
2945
+ await writeConfig(p6, updated);
2848
2946
  }
2849
2947
  return { changed: true };
2850
2948
  }
2851
2949
  async function status2(projectDir) {
2852
- const p7 = configPath(projectDir);
2853
- const cfg = await readConfig(p7);
2950
+ const p6 = configPath(projectDir);
2951
+ const cfg = await readConfig(p6);
2854
2952
  const installed = !!(cfg?.mcp_servers && SKAILE_MCP_NAME2 in cfg.mcp_servers);
2855
2953
  if (!installed) {
2856
2954
  return {
@@ -2866,7 +2964,7 @@ async function status2(projectDir) {
2866
2964
  installed: "yes",
2867
2965
  enabled: "n/a",
2868
2966
  method: "mcp",
2869
- location: path36__default.relative(projectDir, p7)
2967
+ location: path36__default.relative(projectDir, p6)
2870
2968
  };
2871
2969
  }
2872
2970
  async function install3(projectDir) {
@@ -3083,7 +3181,7 @@ function printStatusTable(rows) {
3083
3181
  const widths = cols.map(
3084
3182
  (c) => Math.max(c.header.length, ...rows.map((r) => String(r[c.key] ?? "").length))
3085
3183
  );
3086
- const fmtRow = (parts) => parts.map((p7, i) => p7.padEnd(widths[i] ?? p7.length)).join(" ");
3184
+ const fmtRow = (parts) => parts.map((p6, i) => p6.padEnd(widths[i] ?? p6.length)).join(" ");
3087
3185
  console.log();
3088
3186
  console.log(` ${S.heading(fmtRow(cols.map((c) => c.header)))}`);
3089
3187
  for (const r of rows) {
@@ -3217,6 +3315,23 @@ function refuseGlobalInstallFolder(name, dir) {
3217
3315
  process.exit(1);
3218
3316
  }
3219
3317
  }
3318
+ function readOriginTracking(dir) {
3319
+ if (!isGitRepo(dir)) return null;
3320
+ const origin = spawnSync("git", ["remote", "get-url", "origin"], { cwd: dir, encoding: "utf-8" });
3321
+ const url = origin.status === 0 ? origin.stdout.trim() : "";
3322
+ if (!url) return null;
3323
+ const head = spawnSync("git", ["symbolic-ref", "--short", "HEAD"], {
3324
+ cwd: dir,
3325
+ encoding: "utf-8"
3326
+ });
3327
+ return { url, branch: head.status === 0 && head.stdout.trim() || "main" };
3328
+ }
3329
+ function requireGitBackend(lib, verb) {
3330
+ if (lib.backend !== "git") {
3331
+ logErr(`\`library ${verb}\` only applies to git-backed libraries.`);
3332
+ process.exit(1);
3333
+ }
3334
+ }
3220
3335
  function scaffoldLibraryFiles(dir, name) {
3221
3336
  const readme = `# ${name}
3222
3337
 
@@ -3329,7 +3444,7 @@ function makeLibraryCommand() {
3329
3444
  logErr(`${libPath} exists and is not a directory.`);
3330
3445
  process.exit(1);
3331
3446
  }
3332
- const { manager, close } = await openLibraryManager();
3447
+ const { manager, library, close } = await openLibraryManager();
3333
3448
  try {
3334
3449
  if (await manager.getLibrary(name)) {
3335
3450
  logErr(`A library named "${name}" is already registered.`);
@@ -3339,6 +3454,7 @@ function makeLibraryCommand() {
3339
3454
  const hasDefault = (await manager.listLibraries()).some((l) => l.isDefault);
3340
3455
  let backend = "local";
3341
3456
  let backendConfig;
3457
+ let adoptedOrigin = false;
3342
3458
  if (opts.git) {
3343
3459
  const { branch, reason } = cloneOrInitGitRepo(libPath, opts.git, "main");
3344
3460
  if (reason) {
@@ -3349,7 +3465,14 @@ function makeLibraryCommand() {
3349
3465
  backend = "git";
3350
3466
  backendConfig = { url: opts.git, branch, authHint: "ssh" };
3351
3467
  } else {
3352
- fs12.mkdirSync(libPath, { recursive: true });
3468
+ const origin = readOriginTracking(libPath);
3469
+ if (origin) {
3470
+ backend = "git";
3471
+ backendConfig = { url: origin.url, branch: origin.branch, authHint: "ssh" };
3472
+ adoptedOrigin = true;
3473
+ } else {
3474
+ fs12.mkdirSync(libPath, { recursive: true });
3475
+ }
3353
3476
  }
3354
3477
  const blank = fs12.readdirSync(libPath).every((entry) => entry === ".git");
3355
3478
  const isDefault = !hasDefault && ownership !== "reader";
@@ -3366,6 +3489,16 @@ function makeLibraryCommand() {
3366
3489
  `Library "${name}" ${blank ? "created" : "registered"} at ${libPath}${isDefault ? " (default)" : ""}`
3367
3490
  );
3368
3491
  if (scaffolded.length > 0) logInfo(`Scaffolded ${scaffolded.join(", ")}.`);
3492
+ if (adoptedOrigin && backendConfig) {
3493
+ logInfo(`Adopted existing git clone as a git library tracking ${backendConfig.url}.`);
3494
+ }
3495
+ if (!blank) {
3496
+ const lib = await manager.requireLibrary(name);
3497
+ const res = await indexLibrary(lib, library);
3498
+ for (const e of res.errors) logWarn(e);
3499
+ logOk(`Indexed ${res.assetsUpdated} asset(s) from ${name}.`);
3500
+ warnIgnoredDomainFiles(libPath);
3501
+ }
3369
3502
  } catch (err) {
3370
3503
  exitOnSyncError(err);
3371
3504
  } finally {
@@ -3547,11 +3680,11 @@ function makeLibraryCommand() {
3547
3680
  const { manager, close } = await openLibraryManager();
3548
3681
  try {
3549
3682
  if (!opts.yes) {
3550
- const confirmed = await p5.confirm({
3683
+ const confirmed = await p4.confirm({
3551
3684
  message: `Remove library "${name}"${opts.purge ? " AND delete its directory" : ""}?`,
3552
3685
  initialValue: false
3553
3686
  });
3554
- if (!confirmed || p5.isCancel(confirmed)) {
3687
+ if (!confirmed || p4.isCancel(confirmed)) {
3555
3688
  logInfo("Cancelled.");
3556
3689
  return;
3557
3690
  }
@@ -3566,10 +3699,11 @@ function makeLibraryCommand() {
3566
3699
  const { manager, close } = await openLibraryManager();
3567
3700
  try {
3568
3701
  const lib = await manager.requireLibrary(name);
3702
+ requireGitBackend(lib, "sync");
3569
3703
  const drv = manager.driverFor(lib.backend);
3570
3704
  const pull = await drv.pull(lib);
3571
3705
  logInfo(`Pulled: applied=${pull.applied}, conflicts=${pull.conflicts.length}`);
3572
- if (lib.ownership === "owner" && lib.backend !== "local") {
3706
+ if (lib.ownership === "owner") {
3573
3707
  const push = await drv.push(lib);
3574
3708
  logInfo(`Pushed: ${push.pushed}`);
3575
3709
  }
@@ -3599,6 +3733,7 @@ function makeLibraryCommand() {
3599
3733
  const unparsable = res.errors.filter((e) => e.includes("ManifestSchemaError:"));
3600
3734
  for (const e of res.errors) (unparsable.includes(e) ? logErr : logWarn)(e);
3601
3735
  logOk(`Indexed ${res.assetsUpdated} asset(s) from ${name}.`);
3736
+ warnIgnoredDomainFiles(lib.path);
3602
3737
  if (unparsable.length > 0) {
3603
3738
  logErr(`${unparsable.length} asset(s) skipped: manifest could not be parsed.`);
3604
3739
  process.exitCode = 1;
@@ -3611,6 +3746,7 @@ function makeLibraryCommand() {
3611
3746
  const { manager, close } = await openLibraryManager();
3612
3747
  try {
3613
3748
  const lib = await manager.requireLibrary(name);
3749
+ requireGitBackend(lib, "pull");
3614
3750
  const res = await manager.driverFor(lib.backend).pull(lib);
3615
3751
  if (res.conflicts.length > 0) {
3616
3752
  logWarn(`Conflicts: ${res.conflicts.map((c) => c.path).join(", ")}`);
@@ -3627,6 +3763,7 @@ function makeLibraryCommand() {
3627
3763
  const { manager, close } = await openLibraryManager();
3628
3764
  try {
3629
3765
  const lib = await manager.requireLibrary(name);
3766
+ requireGitBackend(lib, "push");
3630
3767
  const res = await manager.driverFor(lib.backend).push(lib, { force: opts.force });
3631
3768
  logOk(`Pushed (${res.pushed}).`);
3632
3769
  } catch (err) {
@@ -3651,10 +3788,7 @@ function makeLibraryCommand() {
3651
3788
  const { manager, close } = await openLibraryManager();
3652
3789
  try {
3653
3790
  const lib = await manager.requireLibrary(name);
3654
- if (lib.backend !== "git") {
3655
- logErr("`library commit` only applies to git-backed libraries.");
3656
- process.exit(1);
3657
- }
3791
+ requireGitBackend(lib, "commit");
3658
3792
  if (!isGitRepo(lib.path)) {
3659
3793
  logErr(
3660
3794
  `${lib.path} is not a git repository. Run \`skaile library link ${name} <url>\` to initialise it.`
@@ -3691,6 +3825,10 @@ function makeLibraryCommand() {
3691
3825
  close();
3692
3826
  }
3693
3827
  });
3828
+ cmd.command("domain", { hidden: true }).description("Removed in 5.0 (domains were removed)").allowUnknownOption().allowExcessArguments().argument("[args...]").action(() => {
3829
+ logErr(DOMAIN_REMOVED_HINT);
3830
+ process.exit(1);
3831
+ });
3694
3832
  cmd.command("git <name> [args...]").description("Pass-through: run arbitrary git commands inside the library").allowUnknownOption().passThroughOptions().action(async (name, rawArgs) => {
3695
3833
  const args = rawArgs[0] === "--" ? rawArgs.slice(1) : rawArgs;
3696
3834
  const { manager, close } = await openLibraryManager();
@@ -3711,16 +3849,16 @@ function makeLibraryCommand() {
3711
3849
  "With --create-repo: create the repo private (the store only accepts public repos)"
3712
3850
  ).option("--ref <gitref>", "Git ref to ingest (default: the library branch or main)").option("--dry-run", "Print the plan; push nothing and call no store endpoint").action(
3713
3851
  async (lib, opts) => {
3714
- const { runLibraryPublish } = await import('../library-publish-TVS3WQ4C.js');
3852
+ const { runLibraryPublish } = await import('../library-publish-62RFU74A.js');
3715
3853
  await withStoreErrorHandling(() => runLibraryPublish(lib, opts));
3716
3854
  }
3717
3855
  );
3718
3856
  cmd.command("register <lib>").description("Register the library's manifest without pushing (bytes already on github)").option("--asset <ref>", "Publish only the single asset matching this ref/name").option("--ref <gitref>", "Git ref to ingest (default: the library branch or main)").option("--dry-run", "Print the plan; call no store endpoint").action(async (lib, opts) => {
3719
- const { runLibraryRegister } = await import('../library-publish-TVS3WQ4C.js');
3857
+ const { runLibraryRegister } = await import('../library-publish-62RFU74A.js');
3720
3858
  await withStoreErrorHandling(() => runLibraryRegister(lib, opts));
3721
3859
  });
3722
3860
  cmd.command("yank <lib>").description("Retract the library's published assets from the store").option("--asset <ref>", "Yank only the single asset matching this ref/name").action(async (lib, opts) => {
3723
- const { runLibraryYank } = await import('../library-publish-TVS3WQ4C.js');
3861
+ const { runLibraryYank } = await import('../library-publish-62RFU74A.js');
3724
3862
  await withStoreErrorHandling(() => runLibraryYank(lib, opts));
3725
3863
  });
3726
3864
  return cmd;
@@ -4380,7 +4518,7 @@ function scheduleSoftDepPreview() {
4380
4518
  }
4381
4519
  async function loadAssets() {
4382
4520
  softDepPreviewCache.clear();
4383
- const { gatherAssetFeeds } = await import('../asset-feeds-VIZXYDAO.js');
4521
+ const { gatherAssetFeeds } = await import('../asset-feeds-3MVRNS5U.js');
4384
4522
  const { entries, notes } = await gatherAssetFeeds(am, am.projectDir);
4385
4523
  if (notes.length > 0) {
4386
4524
  state.message = notes.map((n) => `[${n.feed}] ${n.message}`).join(" \u2022 ");
@@ -4547,7 +4685,7 @@ function reconcileCollapsedSets(rows) {
4547
4685
  async function loadSourcesAndLibraries() {
4548
4686
  try {
4549
4687
  const [{ openLibraryManager: openLibraryManager2 }, { getGlobalCacheDir: getGlobalCacheDir2, globalSkaileDir: globalSkaileDir2 }] = await Promise.all([
4550
- import('../open-library-AT6RYQ5M.js'),
4688
+ import('../open-library-NVG3CZUO.js'),
4551
4689
  import('../core/index.js')
4552
4690
  ]);
4553
4691
  const { manager, library, close } = await openLibraryManager2();
@@ -5897,18 +6035,18 @@ function makeNpxCommand() {
5897
6035
  );
5898
6036
  process.exit(1);
5899
6037
  }
5900
- const spinner4 = p5.spinner();
6038
+ const spinner = createSpinner();
5901
6039
  const key = sourceCacheKey(url);
5902
6040
  const clonePath = path36__default.join(getGlobalCacheDir(), key);
5903
- spinner4.start(`Cloning ${url}`);
6041
+ spinner.start(`Cloning ${url}`);
5904
6042
  try {
5905
6043
  if (!existsSync(clonePath)) {
5906
6044
  mkdirSync(path36__default.dirname(clonePath), { recursive: true });
5907
6045
  execSync(`git clone ${url} ${clonePath}`, { stdio: "ignore" });
5908
6046
  }
5909
- spinner4.stop(`Cloned to ${key}`);
6047
+ spinner.stop(`Cloned to ${key}`);
5910
6048
  } catch (err) {
5911
- spinner4.stop("Clone failed");
6049
+ spinner.stop("Clone failed");
5912
6050
  logErr(err instanceof Error ? err.message : String(err));
5913
6051
  process.exit(1);
5914
6052
  }
@@ -5928,10 +6066,10 @@ function makeNpxCommand() {
5928
6066
  }
5929
6067
  const skillRef = `skill:@${publisher}/${skillName}`;
5930
6068
  const am2 = new AssetManager({ projectDir, global: opts.global, driverTarget: opts.target });
5931
- spinner4.start(`Installing ${skillRef}`);
6069
+ spinner.start(`Installing ${skillRef}`);
5932
6070
  try {
5933
6071
  const added = await am2.add(skillRef);
5934
- spinner4.stop("Done");
6072
+ spinner.stop("Done");
5935
6073
  if (added.length === 0) {
5936
6074
  logInfo(`${opts.skill} already deployed or not found in source.`);
5937
6075
  } else {
@@ -5939,7 +6077,7 @@ function makeNpxCommand() {
5939
6077
  }
5940
6078
  logInfo(`Source registered in skaile.yaml \u2014 manage via ${S.cmd("skaile source")}.`);
5941
6079
  } catch (err) {
5942
- spinner4.stop("Failed");
6080
+ spinner.stop("Failed");
5943
6081
  logErr(err.message);
5944
6082
  process.exit(1);
5945
6083
  }
@@ -6085,7 +6223,7 @@ function action2(fn) {
6085
6223
  };
6086
6224
  }
6087
6225
  async function reconcileAndReport(projectDir, plugins) {
6088
- const { reconcilePlugins } = await import('../plugin-store-27KGLW4S.js');
6226
+ const { reconcilePlugins } = await import('../plugin-store-2DTEIJTG.js');
6089
6227
  if (plugins.length === 0) {
6090
6228
  logInfo("No plugins declared \u2014 nothing to reconcile.");
6091
6229
  return;
@@ -6101,7 +6239,7 @@ async function reconcileAndReport(projectDir, plugins) {
6101
6239
  async function runInstall2(spec, opts) {
6102
6240
  const projectDir = path36__default.resolve(opts.projectDir);
6103
6241
  const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
6104
- const { specName } = await import('../plugin-store-27KGLW4S.js');
6242
+ const { specName } = await import('../plugin-store-2DTEIJTG.js');
6105
6243
  const yamlPath = path36__default.join(projectDir, "skaile.yaml");
6106
6244
  const editor = WorkspaceYamlEditor2.load(yamlPath);
6107
6245
  const replaced = editor.addPlugin(spec, specName);
@@ -6113,7 +6251,7 @@ async function runInstall2(spec, opts) {
6113
6251
  async function runRemove(name, opts) {
6114
6252
  const projectDir = path36__default.resolve(opts.projectDir);
6115
6253
  const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
6116
- const { specName } = await import('../plugin-store-27KGLW4S.js');
6254
+ const { specName } = await import('../plugin-store-2DTEIJTG.js');
6117
6255
  const yamlPath = path36__default.join(projectDir, "skaile.yaml");
6118
6256
  const editor = WorkspaceYamlEditor2.load(yamlPath);
6119
6257
  const removed = editor.removePlugin(name, specName);
@@ -6141,7 +6279,7 @@ async function runList(opts) {
6141
6279
  const registry = createPluginRegistry();
6142
6280
  if (declared.length > 0) {
6143
6281
  try {
6144
- const { loadPlugins } = await import('../plugin-store-27KGLW4S.js');
6282
+ const { loadPlugins } = await import('../plugin-store-2DTEIJTG.js');
6145
6283
  const result = await loadPlugins(projectDir, declared, registry);
6146
6284
  for (const f of result.failed) logWarn(f.error);
6147
6285
  } catch (err) {
@@ -7017,7 +7155,7 @@ function makeRunCommand() {
7017
7155
  logErr("No flows available.");
7018
7156
  process.exit(1);
7019
7157
  }
7020
- const selected = await p5.select({
7158
+ const selected = await p4.select({
7021
7159
  message: "Select a flow to run",
7022
7160
  options: flows.map((f) => ({
7023
7161
  value: f.id,
@@ -7025,8 +7163,8 @@ function makeRunCommand() {
7025
7163
  hint: f.description
7026
7164
  }))
7027
7165
  });
7028
- if (p5.isCancel(selected)) {
7029
- p5.cancel("Cancelled.");
7166
+ if (p4.isCancel(selected)) {
7167
+ p4.cancel("Cancelled.");
7030
7168
  process.exit(0);
7031
7169
  }
7032
7170
  flowId = selected;
@@ -7185,11 +7323,11 @@ function makeReplCommand() {
7185
7323
  console.log();
7186
7324
  logWarn(`No skaile.yaml found in ${S.cmd(userCwd)} or any parent directory.`);
7187
7325
  console.log();
7188
- const shouldCreate = await p5.confirm({
7326
+ const shouldCreate = await p4.confirm({
7189
7327
  message: "Create a temporary workspace? (session state in /tmp/)"
7190
7328
  });
7191
- if (p5.isCancel(shouldCreate) || !shouldCreate) {
7192
- p5.cancel("Cancelled.");
7329
+ if (p4.isCancel(shouldCreate) || !shouldCreate) {
7330
+ p4.cancel("Cancelled.");
7193
7331
  process.exit(0);
7194
7332
  }
7195
7333
  const tmpDir = fs12__default.mkdtempSync(path36__default.join(os2.tmpdir(), "skaile-repl-"));
@@ -7270,12 +7408,12 @@ function makeServeCommand() {
7270
7408
  );
7271
7409
  }
7272
7410
  async function ensurePluginsLoadedForServe(projectDir) {
7273
- const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-HV5Y57CY.js');
7411
+ const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-F2RFRT5D.js');
7274
7412
  try {
7275
7413
  const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
7276
7414
  const config = resolveSkWorkspaceConfig2(projectDir);
7277
7415
  if (!config.plugins || config.plugins.length === 0) return;
7278
- const { ensurePluginsLoaded } = await import('../plugin-store-27KGLW4S.js');
7416
+ const { ensurePluginsLoaded } = await import('../plugin-store-2DTEIJTG.js');
7279
7417
  const { pluginRegistry } = await import('../plugin-registry/index.js');
7280
7418
  const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
7281
7419
  if (result.loaded.length > 0) {
@@ -7289,14 +7427,14 @@ async function ensurePluginsLoadedForServe(projectDir) {
7289
7427
  }
7290
7428
  }
7291
7429
  async function runCompileTest(opts) {
7292
- const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-HV5Y57CY.js');
7430
+ const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-F2RFRT5D.js');
7293
7431
  const { tmpdir } = await import('os');
7294
7432
  const { dirname: dirname3, join: join7, resolve: resolve5 } = await import('path');
7295
7433
  const { fileURLToPath: fileURLToPath2 } = await import('url');
7296
7434
  const { unlinkSync, existsSync: existsSync16 } = await import('fs');
7297
7435
  const { spawn } = await import('child_process');
7298
7436
  const { portableSpawnSync: portableSpawnSync2 } = await import('../core/index.js');
7299
- const { MONOREPO_ROOT } = await import('../paths-P7ZXMDCX.js');
7437
+ const { MONOREPO_ROOT } = await import('../paths-STQO4FYF.js');
7300
7438
  if (MONOREPO_ROOT === null) {
7301
7439
  logErr2("--compile-test is only available inside the skaile-dev workspace.");
7302
7440
  logInfo2("Run it from a checkout of skaile-ai/skaile-dev (the monorepo shell).");
@@ -8172,7 +8310,7 @@ function makeStoreCommand() {
8172
8310
  process.exit(2);
8173
8311
  });
8174
8312
  store.command("search <query>").description("Search the AI Asset Store catalog by name, description, or publisher").option("--kind <kind>", "Filter by asset kind (skill, agent, prompt, flow, \u2026)").option("-C, --project-dir <dir>", "Project directory (catalog config overlay)", process.cwd()).action(async (query, opts) => {
8175
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError } = await import('../open-library-AT6RYQ5M.js');
8313
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError } = await import('../open-library-NVG3CZUO.js');
8176
8314
  try {
8177
8315
  const remote = await openCatalogSource2({ projectDir: path36__default.resolve(opts.projectDir) });
8178
8316
  const assets = await remote.listAssets(opts.kind ? { kind: opts.kind } : {});
@@ -8200,8 +8338,8 @@ function makeStoreCommand() {
8200
8338
  }
8201
8339
  });
8202
8340
  store.command("show <ref>").description("Show a store asset's details + provenance (source, files, integrity)").option("-C, --project-dir <dir>", "Project directory (catalog config overlay)", process.cwd()).action(async (ref, opts) => {
8203
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError } = await import('../open-library-AT6RYQ5M.js');
8204
- const { supportsInstallManifest } = await import('../project-J2EROMBW.js');
8341
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError } = await import('../open-library-NVG3CZUO.js');
8342
+ const { supportsInstallManifest } = await import('../project-44LM6SRV.js');
8205
8343
  try {
8206
8344
  const remote = await openCatalogSource2({ projectDir: path36__default.resolve(opts.projectDir) });
8207
8345
  const asset = await remote.resolve(ref);
@@ -8348,7 +8486,7 @@ function makeUpdateCommand() {
8348
8486
  return new Command("update").description("Refresh the Catalog cache and re-deploy outdated assets in the current project").argument("[name]", "Update a specific asset (kind:name)").option("--project-dir <path>", "Project directory", process.cwd()).option("--no-catalog", "Skip refreshing the catalog cache").option("--catalog-only", "Refresh the catalog cache only; do not re-deploy assets").option("--no-sync", "Skip syncing sources from upstream before re-deploying").option("-y, --yes", "Sync sources without the confirmation prompt").action(
8349
8487
  async (_name, opts) => {
8350
8488
  if (opts.catalog !== false) {
8351
- const catalogSpinner = p5.spinner();
8489
+ const catalogSpinner = createSpinner();
8352
8490
  catalogSpinner.start("Refreshing catalog cache");
8353
8491
  try {
8354
8492
  const remote = await openCatalogSource({ projectDir: path36__default.resolve(opts.projectDir) });
@@ -8366,7 +8504,7 @@ function makeUpdateCommand() {
8366
8504
  if (opts.catalogOnly) return;
8367
8505
  const projectDir = path36__default.resolve(opts.projectDir);
8368
8506
  if (await shouldSyncSources(opts)) {
8369
- const syncSpinner = p5.spinner();
8507
+ const syncSpinner = createSpinner();
8370
8508
  syncSpinner.start("Syncing sources");
8371
8509
  const { total, synced, failed } = await syncProjectSources(projectDir);
8372
8510
  syncSpinner.stop(
@@ -8374,10 +8512,10 @@ function makeUpdateCommand() {
8374
8512
  );
8375
8513
  }
8376
8514
  const am2 = new AssetManager({ projectDir });
8377
- const spinner4 = p5.spinner();
8378
- spinner4.start("Re-deploying assets");
8515
+ const spinner = createSpinner();
8516
+ spinner.start("Re-deploying assets");
8379
8517
  const result = await am2.install();
8380
- spinner4.stop("Done");
8518
+ spinner.stop("Done");
8381
8519
  if (result.deployed.length > 0) {
8382
8520
  for (const d of result.deployed) logOk(`Updated ${d}`);
8383
8521
  } else {
@@ -8389,12 +8527,12 @@ function makeUpdateCommand() {
8389
8527
  async function shouldSyncSources(opts) {
8390
8528
  if (opts.sync === false) return false;
8391
8529
  if (opts.yes || !process.stdin.isTTY) return true;
8392
- const answer = await p5.confirm({
8530
+ const answer = await p4.confirm({
8393
8531
  message: "Sync sources from upstream before re-deploying?",
8394
8532
  initialValue: true
8395
8533
  });
8396
- if (p5.isCancel(answer)) {
8397
- p5.cancel("Cancelled.");
8534
+ if (p4.isCancel(answer)) {
8535
+ p4.cancel("Cancelled.");
8398
8536
  process.exit(130);
8399
8537
  }
8400
8538
  return answer;
@@ -8484,10 +8622,9 @@ function validateManifestCandidate(c, parsed, body, absRoot, registry, strictCon
8484
8622
  }
8485
8623
  if (c.kind === "skill" && parsed && typeof parsed === "object") {
8486
8624
  const dirName = path36__default.basename(path36__default.dirname(c.filePath));
8487
- const findings = checkAgentSkillConformance(parsed, { dirName });
8488
- for (const f of findings) {
8489
- const line = `${relPath} [skill conformance] \u2014 ${f.field}: ${f.message}`;
8490
- if (strictConformance) {
8625
+ for (const f of checkSkillManifest(parsed, body, dirName)) {
8626
+ const line = `${relPath} [${f.tag}] \u2014 ${f.text}`;
8627
+ if (f.conformance && strictConformance) {
8491
8628
  logErr(line);
8492
8629
  errors++;
8493
8630
  } else {
@@ -8496,10 +8633,6 @@ function validateManifestCandidate(c, parsed, body, absRoot, registry, strictCon
8496
8633
  }
8497
8634
  }
8498
8635
  }
8499
- if (c.kind === "skill" && body?.replace(/^#[^\n]*\n+/, "") === SKILL_BODY_PLACEHOLDER) {
8500
- logWarn(`${relPath} [skill] \u2014 body is still the scaffold placeholder; write the skill prompt`);
8501
- warnings++;
8502
- }
8503
8636
  const provider = registry.getProvider(c.kind);
8504
8637
  if (!provider) {
8505
8638
  logWarn(`${relPath} [${c.kind}] \u2014 kind "${c.kind}" is not registered, skipping validation`);
@@ -8647,8 +8780,8 @@ function validatePublishManifestRoots(rootPath) {
8647
8780
  return missing.length;
8648
8781
  }
8649
8782
  var EXCLUDED_PATHS = ["skaileup-shared/", "external/", "docs/"];
8650
- function toPosix(p7) {
8651
- return p7.split(path36__default.sep).join("/");
8783
+ function toPosix(p6) {
8784
+ return p6.split(path36__default.sep).join("/");
8652
8785
  }
8653
8786
  function isExcludedPath(relPath) {
8654
8787
  const rel = toPosix(relPath);
@@ -8896,6 +9029,7 @@ function makeValidateCommand() {
8896
9029
  const rootErrors = validatePublishManifestRoots(absPath);
8897
9030
  const totalErrors = errors + ws.errors + rootErrors;
8898
9031
  console.log();
9032
+ warnIgnoredDomainFiles(absPath);
8899
9033
  logInfo(`Scanned ${total} asset manifest(s) and ${ws.total} skaile.yaml file(s)`);
8900
9034
  if (warnings > 0) logWarn(`${warnings} warning(s)`);
8901
9035
  if (totalErrors === 0) {
@@ -9305,7 +9439,7 @@ async function bootstrapUserConfig() {
9305
9439
  }
9306
9440
  async function hydrateInitSources(resolved, created) {
9307
9441
  try {
9308
- const { ensureSourcesCloned } = await import('../ensure-sources-3IH5XHAP.js');
9442
+ const { ensureSourcesCloned } = await import('../ensure-sources-Z3KKLEM6.js');
9309
9443
  const hydrate = ensureSourcesCloned(resolved, { quiet: true });
9310
9444
  for (const n of hydrate.cloned) created.push(`~/.skaile/cache/sources/${n}/`);
9311
9445
  if (hydrate.failed.length > 0) {
@@ -9345,7 +9479,7 @@ function printInitSummary(resolved, projectDir, created) {
9345
9479
  console.log();
9346
9480
  }
9347
9481
  program.command("setup").description("Interactive provider setup wizard").action(async () => {
9348
- const { cmdSetup } = await import('../setup-IFGA4NQA.js');
9482
+ const { cmdSetup } = await import('../setup-4BV5ZWOZ.js');
9349
9483
  await cmdSetup([], { projectDir: process.cwd() });
9350
9484
  });
9351
9485
  program.addCommand(makeInstallCommand());
@@ -9419,6 +9553,13 @@ program.command("path").description("Show resolved paths (honours SKAILE_HOME an
9419
9553
  console.log();
9420
9554
  });
9421
9555
  program.addCommand(makeCompleteCommand(program));
9422
- await program.parseAsync();
9556
+ try {
9557
+ await program.parseAsync();
9558
+ } catch (err) {
9559
+ const { LibrarySyncError } = await import('../library/index.js');
9560
+ if (!(err instanceof LibrarySyncError)) throw err;
9561
+ logErr(err.message);
9562
+ process.exit(1);
9563
+ }
9423
9564
  //# sourceMappingURL=index.js.map
9424
9565
  //# sourceMappingURL=index.js.map