@skaile/workspaces 6.15.0 → 6.16.1

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 (428) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/dist/agent-file-refresh-VRD2SNJW.js +89 -0
  3. package/dist/agent-file-refresh-VRD2SNJW.js.map +1 -0
  4. package/dist/ai-sdk.js +8 -7
  5. package/dist/ai-sdk.js.map +1 -1
  6. package/dist/{asset-feeds-PM7FKHJP.js → asset-feeds-ON7FYHHF.js} +25 -23
  7. package/dist/asset-feeds-ON7FYHHF.js.map +1 -0
  8. package/dist/asset-manager/catalog-deployer.js +8 -7
  9. package/dist/asset-manager/history.js +7 -6
  10. package/dist/asset-manager/index.js +17 -15
  11. package/dist/asset-manager/installer.js +16 -9
  12. package/dist/asset-manager/renderers.js +8 -8
  13. package/dist/asset-manager/src/add-remove/add.d.ts +134 -0
  14. package/dist/asset-manager/src/add-remove/add.d.ts.map +1 -0
  15. package/dist/asset-manager/src/add-remove/remove.d.ts +329 -0
  16. package/dist/asset-manager/src/add-remove/remove.d.ts.map +1 -0
  17. package/dist/asset-manager/src/agent-render.d.ts +116 -0
  18. package/dist/asset-manager/src/agent-render.d.ts.map +1 -0
  19. package/dist/asset-manager/src/composed-blocks.d.ts +40 -0
  20. package/dist/asset-manager/src/composed-blocks.d.ts.map +1 -0
  21. package/dist/asset-manager/src/config/core.d.ts +297 -0
  22. package/dist/asset-manager/src/config/core.d.ts.map +1 -0
  23. package/dist/asset-manager/src/config/edit.d.ts +161 -0
  24. package/dist/asset-manager/src/config/edit.d.ts.map +1 -0
  25. package/dist/asset-manager/src/index.d.ts +31 -2961
  26. package/dist/asset-manager/src/index.d.ts.map +1 -1
  27. package/dist/asset-manager/src/install/clone-commit-fetcher.d.ts +11 -0
  28. package/dist/asset-manager/src/install/clone-commit-fetcher.d.ts.map +1 -0
  29. package/dist/asset-manager/src/install/install.d.ts +151 -0
  30. package/dist/asset-manager/src/install/install.d.ts.map +1 -0
  31. package/dist/asset-manager/src/install/restore.d.ts +76 -0
  32. package/dist/asset-manager/src/install/restore.d.ts.map +1 -0
  33. package/dist/asset-manager/src/install-agent.d.ts +52 -4
  34. package/dist/asset-manager/src/install-agent.d.ts.map +1 -1
  35. package/dist/asset-manager/src/install-instances.d.ts +70 -2
  36. package/dist/asset-manager/src/install-instances.d.ts.map +1 -1
  37. package/dist/asset-manager/src/installer.d.ts +54 -4
  38. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  39. package/dist/asset-manager/src/lock/copies.d.ts +156 -0
  40. package/dist/asset-manager/src/lock/copies.d.ts.map +1 -0
  41. package/dist/asset-manager/src/lock/library.d.ts +261 -0
  42. package/dist/asset-manager/src/lock/library.d.ts.map +1 -0
  43. package/dist/asset-manager/src/mcp-render.d.ts +86 -0
  44. package/dist/asset-manager/src/mcp-render.d.ts.map +1 -0
  45. package/dist/asset-manager/src/omp-sweep.d.ts +25 -0
  46. package/dist/asset-manager/src/omp-sweep.d.ts.map +1 -0
  47. package/dist/asset-manager/src/read/diff.d.ts +109 -0
  48. package/dist/asset-manager/src/read/diff.d.ts.map +1 -0
  49. package/dist/asset-manager/src/read/doctor.d.ts +116 -0
  50. package/dist/asset-manager/src/read/doctor.d.ts.map +1 -0
  51. package/dist/asset-manager/src/read/gaps.d.ts +120 -0
  52. package/dist/asset-manager/src/read/gaps.d.ts.map +1 -0
  53. package/dist/asset-manager/src/read/graph.d.ts +69 -0
  54. package/dist/asset-manager/src/read/graph.d.ts.map +1 -0
  55. package/dist/asset-manager/src/read/outdated.d.ts +152 -0
  56. package/dist/asset-manager/src/read/outdated.d.ts.map +1 -0
  57. package/dist/asset-manager/src/read/state.d.ts +265 -0
  58. package/dist/asset-manager/src/read/state.d.ts.map +1 -0
  59. package/dist/asset-manager/src/renderers.d.ts +11 -1
  60. package/dist/asset-manager/src/renderers.d.ts.map +1 -1
  61. package/dist/asset-manager/src/resolve/guards.d.ts +167 -0
  62. package/dist/asset-manager/src/resolve/guards.d.ts.map +1 -0
  63. package/dist/asset-manager/src/resolve/scan.d.ts +222 -0
  64. package/dist/asset-manager/src/resolve/scan.d.ts.map +1 -0
  65. package/dist/asset-manager/src/resolve/stores.d.ts +176 -0
  66. package/dist/asset-manager/src/resolve/stores.d.ts.map +1 -0
  67. package/dist/asset-manager/src/shared/files.d.ts +42 -0
  68. package/dist/asset-manager/src/shared/files.d.ts.map +1 -0
  69. package/dist/asset-manager/src/shared/library-hooks.d.ts +16 -0
  70. package/dist/asset-manager/src/shared/library-hooks.d.ts.map +1 -0
  71. package/dist/asset-manager/src/shared/library.d.ts +96 -0
  72. package/dist/asset-manager/src/shared/library.d.ts.map +1 -0
  73. package/dist/asset-manager/src/shared/refs.d.ts +101 -0
  74. package/dist/asset-manager/src/shared/refs.d.ts.map +1 -0
  75. package/dist/asset-manager/src/shared/types.d.ts +399 -0
  76. package/dist/asset-manager/src/shared/types.d.ts.map +1 -0
  77. package/dist/bridge/harnesses/claude-sdk.js +11 -17
  78. package/dist/bridge/harnesses/claude-sdk.js.map +1 -1
  79. package/dist/bridge/harnesses/codex.js +10 -10
  80. package/dist/bridge/harnesses/continue.js +12 -16
  81. package/dist/bridge/harnesses/continue.js.map +1 -1
  82. package/dist/bridge/harnesses/echo.js +3 -8
  83. package/dist/bridge/harnesses/echo.js.map +1 -1
  84. package/dist/bridge/harnesses/gemini.js +5 -5
  85. package/dist/bridge/harnesses/goose.js +13 -17
  86. package/dist/bridge/harnesses/goose.js.map +1 -1
  87. package/dist/bridge/harnesses/omp.js +5 -11
  88. package/dist/bridge/harnesses/omp.js.map +1 -1
  89. package/dist/bridge/harnesses/opencode.js +13 -17
  90. package/dist/bridge/harnesses/opencode.js.map +1 -1
  91. package/dist/bridge/harnesses/qwen.js +6 -11
  92. package/dist/bridge/harnesses/qwen.js.map +1 -1
  93. package/dist/bridge/index.js +16 -16
  94. package/dist/bridge/src/codex/managed-harness.d.ts.map +1 -1
  95. package/dist/bridge/src/driver-contract.d.ts +72 -0
  96. package/dist/bridge/src/driver-contract.d.ts.map +1 -0
  97. package/dist/bridge/src/harness-model-check.d.ts +1 -1
  98. package/dist/bridge/src/harness-model-check.d.ts.map +1 -1
  99. package/dist/bridge/src/harnesses/_subprocess-cli.d.ts +8 -0
  100. package/dist/bridge/src/harnesses/_subprocess-cli.d.ts.map +1 -1
  101. package/dist/bridge/src/harnesses/claude-sdk.d.ts.map +1 -1
  102. package/dist/bridge/src/harnesses/codex.d.ts +2 -0
  103. package/dist/bridge/src/harnesses/codex.d.ts.map +1 -1
  104. package/dist/bridge/src/harnesses/continue.d.ts.map +1 -1
  105. package/dist/bridge/src/harnesses/echo.d.ts.map +1 -1
  106. package/dist/bridge/src/harnesses/gemini.d.ts.map +1 -1
  107. package/dist/bridge/src/harnesses/goose.d.ts.map +1 -1
  108. package/dist/bridge/src/harnesses/omp.d.ts.map +1 -1
  109. package/dist/bridge/src/harnesses/opencode.d.ts.map +1 -1
  110. package/dist/bridge/src/harnesses/qwen.d.ts.map +1 -1
  111. package/dist/bridge/src/index.d.ts +2 -0
  112. package/dist/bridge/src/index.d.ts.map +1 -1
  113. package/dist/bridge/src/preflight.d.ts +114 -0
  114. package/dist/bridge/src/preflight.d.ts.map +1 -0
  115. package/dist/bridge/src/registry.d.ts +12 -0
  116. package/dist/bridge/src/registry.d.ts.map +1 -1
  117. package/dist/{chunk-MUQBP2BK.js → chunk-2JUCWMIS.js} +8808 -8337
  118. package/dist/chunk-2JUCWMIS.js.map +1 -0
  119. package/dist/{chunk-VS6XC5JE.js → chunk-2MTRRK37.js} +3 -3
  120. package/dist/{chunk-VS6XC5JE.js.map → chunk-2MTRRK37.js.map} +1 -1
  121. package/dist/chunk-2PJYJPDE.js +3 -0
  122. package/dist/chunk-2PJYJPDE.js.map +1 -0
  123. package/dist/{chunk-J7FEWDRQ.js → chunk-2SSG5B24.js} +4 -4
  124. package/dist/{chunk-J7FEWDRQ.js.map → chunk-2SSG5B24.js.map} +1 -1
  125. package/dist/{chunk-WDG5IVEA.js → chunk-2ZDZJ7XQ.js} +3 -3
  126. package/dist/{chunk-WDG5IVEA.js.map → chunk-2ZDZJ7XQ.js.map} +1 -1
  127. package/dist/{chunk-V2VDTQ7A.js → chunk-3A7JUOY2.js} +3 -3
  128. package/dist/{chunk-V2VDTQ7A.js.map → chunk-3A7JUOY2.js.map} +1 -1
  129. package/dist/{chunk-R7422XD4.js → chunk-3CRZJR7E.js} +20 -14
  130. package/dist/chunk-3CRZJR7E.js.map +1 -0
  131. package/dist/chunk-3LAJJURV.js +26 -0
  132. package/dist/chunk-3LAJJURV.js.map +1 -0
  133. package/dist/{chunk-FJJEC6O2.js → chunk-3UYKT62L.js} +5 -5
  134. package/dist/{chunk-FJJEC6O2.js.map → chunk-3UYKT62L.js.map} +1 -1
  135. package/dist/{chunk-HCIXCCUH.js → chunk-4X5WXQV7.js} +4 -4
  136. package/dist/{chunk-HCIXCCUH.js.map → chunk-4X5WXQV7.js.map} +1 -1
  137. package/dist/chunk-4ZNKEDYH.js +887 -0
  138. package/dist/chunk-4ZNKEDYH.js.map +1 -0
  139. package/dist/{chunk-OIWFXUZB.js → chunk-6M44OQKH.js} +40 -44
  140. package/dist/chunk-6M44OQKH.js.map +1 -0
  141. package/dist/{chunk-SXRN27TU.js → chunk-72DYHOO2.js} +24 -25
  142. package/dist/chunk-72DYHOO2.js.map +1 -0
  143. package/dist/{chunk-BNLXZXZN.js → chunk-BRAOB37W.js} +97 -47
  144. package/dist/chunk-BRAOB37W.js.map +1 -0
  145. package/dist/{chunk-ZLDAPZIX.js → chunk-BTMSHGN3.js} +4 -4
  146. package/dist/{chunk-ZLDAPZIX.js.map → chunk-BTMSHGN3.js.map} +1 -1
  147. package/dist/{chunk-7K73MCI6.js → chunk-CU5WY6HN.js} +3 -3
  148. package/dist/{chunk-7K73MCI6.js.map → chunk-CU5WY6HN.js.map} +1 -1
  149. package/dist/{chunk-CG63XGVV.js → chunk-EGKCKWWE.js} +3 -3
  150. package/dist/{chunk-CG63XGVV.js.map → chunk-EGKCKWWE.js.map} +1 -1
  151. package/dist/{chunk-CJO3XKO7.js → chunk-ETGC2MEM.js} +4 -4
  152. package/dist/{chunk-CJO3XKO7.js.map → chunk-ETGC2MEM.js.map} +1 -1
  153. package/dist/{chunk-PFBPESW7.js → chunk-FPG36VC4.js} +8 -13
  154. package/dist/chunk-FPG36VC4.js.map +1 -0
  155. package/dist/{chunk-SBAUZ7XH.js → chunk-H3PY5DFL.js} +4 -4
  156. package/dist/{chunk-SBAUZ7XH.js.map → chunk-H3PY5DFL.js.map} +1 -1
  157. package/dist/{chunk-7HRZACI4.js → chunk-HW4BDJPC.js} +17 -6
  158. package/dist/chunk-HW4BDJPC.js.map +1 -0
  159. package/dist/{chunk-7VBD5XUM.js → chunk-IG4YQ7ER.js} +32 -90
  160. package/dist/chunk-IG4YQ7ER.js.map +1 -0
  161. package/dist/{chunk-YDMZWVZN.js → chunk-K4763755.js} +8 -8
  162. package/dist/{chunk-YDMZWVZN.js.map → chunk-K4763755.js.map} +1 -1
  163. package/dist/{chunk-6WIZC6GM.js → chunk-KDRA6FYE.js} +120 -211
  164. package/dist/chunk-KDRA6FYE.js.map +1 -0
  165. package/dist/{chunk-KOI7QFDH.js → chunk-M7XIYHWB.js} +3 -3
  166. package/dist/{chunk-KOI7QFDH.js.map → chunk-M7XIYHWB.js.map} +1 -1
  167. package/dist/{chunk-7LJUK5JK.js → chunk-MG6QD7GE.js} +201 -43
  168. package/dist/chunk-MG6QD7GE.js.map +1 -0
  169. package/dist/{chunk-CWUHUL6W.js → chunk-NAQXDTF3.js} +3 -3
  170. package/dist/{chunk-CWUHUL6W.js.map → chunk-NAQXDTF3.js.map} +1 -1
  171. package/dist/{chunk-JIZ35OOU.js → chunk-NJ6UCY2B.js} +3 -3
  172. package/dist/{chunk-JIZ35OOU.js.map → chunk-NJ6UCY2B.js.map} +1 -1
  173. package/dist/{chunk-A3G3FHGB.js → chunk-NNJQQYHY.js} +2 -2
  174. package/dist/{chunk-A3G3FHGB.js.map → chunk-NNJQQYHY.js.map} +1 -1
  175. package/dist/{chunk-TYRAEMWE.js → chunk-OD4N5O7V.js} +4 -4
  176. package/dist/{chunk-TYRAEMWE.js.map → chunk-OD4N5O7V.js.map} +1 -1
  177. package/dist/{chunk-LBJCOEXH.js → chunk-P6FJDT35.js} +27 -7
  178. package/dist/chunk-P6FJDT35.js.map +1 -0
  179. package/dist/{chunk-IOXFT5D7.js → chunk-PD42JZWI.js} +3 -3
  180. package/dist/{chunk-IOXFT5D7.js.map → chunk-PD42JZWI.js.map} +1 -1
  181. package/dist/{chunk-MS2IXLTC.js → chunk-PMXTBWFD.js} +27 -7
  182. package/dist/chunk-PMXTBWFD.js.map +1 -0
  183. package/dist/{chunk-O74SRQ3W.js → chunk-PPSSDUN6.js} +3 -3
  184. package/dist/{chunk-O74SRQ3W.js.map → chunk-PPSSDUN6.js.map} +1 -1
  185. package/dist/{chunk-IYXOSBQ4.js → chunk-PRB67LCK.js} +126 -17
  186. package/dist/chunk-PRB67LCK.js.map +1 -0
  187. package/dist/{chunk-6VQW2X2F.js → chunk-QUIK7L3Z.js} +9 -9
  188. package/dist/{chunk-6VQW2X2F.js.map → chunk-QUIK7L3Z.js.map} +1 -1
  189. package/dist/{chunk-DRUAQ7IY.js → chunk-QUPZKTF3.js} +9 -8
  190. package/dist/chunk-QUPZKTF3.js.map +1 -0
  191. package/dist/{chunk-7FXOOUOC.js → chunk-RPRMD7XV.js} +27 -11
  192. package/dist/chunk-RPRMD7XV.js.map +1 -0
  193. package/dist/{chunk-U7EJB6LY.js → chunk-S3UOZBGE.js} +20 -3
  194. package/dist/chunk-S3UOZBGE.js.map +1 -0
  195. package/dist/{chunk-LQWOU7S2.js → chunk-SFBLZOV5.js} +3 -3
  196. package/dist/{chunk-LQWOU7S2.js.map → chunk-SFBLZOV5.js.map} +1 -1
  197. package/dist/{chunk-XPSZIBPU.js → chunk-SMCG4PMP.js} +43 -48
  198. package/dist/chunk-SMCG4PMP.js.map +1 -0
  199. package/dist/{chunk-EB2LKPI6.js → chunk-SMFZ5YGN.js} +4 -4
  200. package/dist/{chunk-EB2LKPI6.js.map → chunk-SMFZ5YGN.js.map} +1 -1
  201. package/dist/{chunk-IRIWNKQS.js → chunk-SX54OQQT.js} +4 -4
  202. package/dist/{chunk-IRIWNKQS.js.map → chunk-SX54OQQT.js.map} +1 -1
  203. package/dist/{chunk-2PVYDAFN.js → chunk-T65N4CIZ.js} +3 -3
  204. package/dist/{chunk-2PVYDAFN.js.map → chunk-T65N4CIZ.js.map} +1 -1
  205. package/dist/{chunk-C5ZCREBI.js → chunk-TVRL3IPZ.js} +3 -3
  206. package/dist/{chunk-C5ZCREBI.js.map → chunk-TVRL3IPZ.js.map} +1 -1
  207. package/dist/{chunk-RKTEHX2S.js → chunk-TW5AP6IF.js} +5 -5
  208. package/dist/{chunk-RKTEHX2S.js.map → chunk-TW5AP6IF.js.map} +1 -1
  209. package/dist/{chunk-EMIOFJQJ.js → chunk-TYK752MU.js} +3 -3
  210. package/dist/{chunk-EMIOFJQJ.js.map → chunk-TYK752MU.js.map} +1 -1
  211. package/dist/{chunk-HPQ2WDYC.js → chunk-U2WPJHRA.js} +5 -5
  212. package/dist/{chunk-HPQ2WDYC.js.map → chunk-U2WPJHRA.js.map} +1 -1
  213. package/dist/{chunk-YLKOCMU7.js → chunk-U6UFPOEK.js} +326 -1058
  214. package/dist/chunk-U6UFPOEK.js.map +1 -0
  215. package/dist/{chunk-MEU2HHGV.js → chunk-U7P22GEB.js} +386 -46
  216. package/dist/chunk-U7P22GEB.js.map +1 -0
  217. package/dist/{chunk-AEFDFCS2.js → chunk-VFEZUSB6.js} +4 -4
  218. package/dist/{chunk-AEFDFCS2.js.map → chunk-VFEZUSB6.js.map} +1 -1
  219. package/dist/{chunk-A4VKIVGB.js → chunk-WW22FS74.js} +75 -67
  220. package/dist/chunk-WW22FS74.js.map +1 -0
  221. package/dist/{chunk-72PPC4SC.js → chunk-Z23I2JA6.js} +6 -6
  222. package/dist/{chunk-72PPC4SC.js.map → chunk-Z23I2JA6.js.map} +1 -1
  223. package/dist/{chunk-KIFAU62K.js → chunk-Z7HLX4V2.js} +4 -4
  224. package/dist/{chunk-KIFAU62K.js.map → chunk-Z7HLX4V2.js.map} +1 -1
  225. package/dist/{chunk-CVUMZTNO.js → chunk-ZQPBYLCS.js} +4 -4
  226. package/dist/{chunk-CVUMZTNO.js.map → chunk-ZQPBYLCS.js.map} +1 -1
  227. package/dist/{claude-code-5QYXWC5H.js → claude-code-VL6UM7BZ.js} +4 -4
  228. package/dist/{claude-code-5QYXWC5H.js.map → claude-code-VL6UM7BZ.js.map} +1 -1
  229. package/dist/cli/index.js +491 -298
  230. package/dist/cli/index.js.map +1 -1
  231. package/dist/cli/src/agent-file-refresh.d.ts +25 -0
  232. package/dist/cli/src/agent-file-refresh.d.ts.map +1 -0
  233. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  234. package/dist/cli/src/commands/catalog.d.ts +9 -2
  235. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  236. package/dist/cli/src/commands/config.d.ts.map +1 -1
  237. package/dist/cli/src/commands/harness.d.ts +1 -1
  238. package/dist/cli/src/commands/harness.d.ts.map +1 -1
  239. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  240. package/dist/cli/src/commands/library-index.d.ts +5 -7
  241. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  242. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  243. package/dist/cli/src/commands/preset-export.d.ts.map +1 -1
  244. package/dist/cli/src/commands/project.d.ts.map +1 -1
  245. package/dist/cli/src/commands/run.d.ts.map +1 -1
  246. package/dist/cli/src/commands/serve-preflight.d.ts +27 -48
  247. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
  248. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  249. package/dist/cli/src/commands/source.d.ts +6 -9
  250. package/dist/cli/src/commands/source.d.ts.map +1 -1
  251. package/dist/cli/src/commands/validate.d.ts +6 -0
  252. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  253. package/dist/cli/src/config-checks.d.ts.map +1 -1
  254. package/dist/cli/src/harness-error.d.ts +11 -9
  255. package/dist/cli/src/harness-error.d.ts.map +1 -1
  256. package/dist/cli/src/skill-checks.d.ts +48 -74
  257. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  258. package/dist/connectors/config.js +5 -5
  259. package/dist/connectors/index.js +19 -19
  260. package/dist/{connectors-DLXW27NQ.js → connectors-7EPJRVLJ.js} +22 -22
  261. package/dist/{connectors-DLXW27NQ.js.map → connectors-7EPJRVLJ.js.map} +1 -1
  262. package/dist/core/index.js +7 -6
  263. package/dist/core/manifest.js +2 -2
  264. package/dist/core/models.js +1 -1
  265. package/dist/core/publish-manifest.js +3 -3
  266. package/dist/core/ref.js +1 -1
  267. package/dist/core/runtime-assets.js +5 -5
  268. package/dist/core/src/agent-prompt-sections.d.ts +96 -4
  269. package/dist/core/src/agent-prompt-sections.d.ts.map +1 -1
  270. package/dist/core/src/check-asset.d.ts +115 -0
  271. package/dist/core/src/check-asset.d.ts.map +1 -0
  272. package/dist/core/src/harness-model.d.ts +20 -0
  273. package/dist/core/src/harness-model.d.ts.map +1 -0
  274. package/dist/core/src/index.d.ts +10 -6
  275. package/dist/core/src/index.d.ts.map +1 -1
  276. package/dist/core/src/lock.d.ts +12 -10
  277. package/dist/core/src/lock.d.ts.map +1 -1
  278. package/dist/core/src/models.d.ts +42 -11
  279. package/dist/core/src/models.d.ts.map +1 -1
  280. package/dist/core/src/publish-manifest.d.ts +17 -0
  281. package/dist/core/src/publish-manifest.d.ts.map +1 -1
  282. package/dist/core/src/repo-identity.d.ts +41 -0
  283. package/dist/core/src/repo-identity.d.ts.map +1 -0
  284. package/dist/core/src/repo-manager.d.ts +3 -9
  285. package/dist/core/src/repo-manager.d.ts.map +1 -1
  286. package/dist/core/src/walker.d.ts.map +1 -1
  287. package/dist/core/src/workspace-config.d.ts.map +1 -1
  288. package/dist/core/workspace-config.js +4 -4
  289. package/dist/deploy/index.js +7 -6
  290. package/dist/deploy/index.js.map +1 -1
  291. package/dist/discovery/index.js +5 -5
  292. package/dist/discovery/src/source-config.d.ts.map +1 -1
  293. package/dist/{ensure-sources-I7GCXPXK.js → ensure-sources-CI3JQJST.js} +30 -28
  294. package/dist/ensure-sources-CI3JQJST.js.map +1 -0
  295. package/dist/factory-assets/connectors/box.js +19 -19
  296. package/dist/factory-assets/connectors/deploy.js +19 -19
  297. package/dist/factory-assets/connectors/devserver.js +19 -19
  298. package/dist/factory-assets/connectors/flow/adapter.js +19 -19
  299. package/dist/factory-assets/connectors/flow/engine.js +8 -7
  300. package/dist/factory-assets/connectors/flow/run-flow.js +21 -21
  301. package/dist/factory-assets/connectors/flow.js +19 -19
  302. package/dist/factory-assets/connectors/git.js +19 -19
  303. package/dist/factory-assets/connectors/gmail.js +19 -19
  304. package/dist/factory-assets/connectors/googledrive.js +19 -19
  305. package/dist/factory-assets/connectors/local.js +19 -19
  306. package/dist/factory-assets/connectors/mattermost.js +19 -19
  307. package/dist/factory-assets/connectors/memory.js +19 -19
  308. package/dist/factory-assets/connectors/minio.js +19 -19
  309. package/dist/factory-assets/connectors/postgres.js +19 -19
  310. package/dist/factory-assets/connectors/s3.js +19 -19
  311. package/dist/factory-assets/connectors/sharepoint.js +19 -19
  312. package/dist/factory-assets/connectors/sqlite.js +19 -19
  313. package/dist/factory-assets/connectors/static-server.js +19 -19
  314. package/dist/factory-assets/connectors/tunnel.js +19 -19
  315. package/dist/factory-assets/connectors/webdav.js +19 -19
  316. package/dist/factory-assets/connectors/xstate-store.js +19 -19
  317. package/dist/factory-assets/connectors/xstate.js +19 -19
  318. package/dist/{flows-J64L5MGJ.js → flows-6XQAYQS4.js} +12 -11
  319. package/dist/{flows-J64L5MGJ.js.map → flows-6XQAYQS4.js.map} +1 -1
  320. package/dist/{helpers-U75UGGH5.js → helpers-26MR5QPO.js} +30 -28
  321. package/dist/{helpers-U75UGGH5.js.map → helpers-26MR5QPO.js.map} +1 -1
  322. package/dist/library/index.js +10 -10
  323. package/dist/library/install.js +4 -4
  324. package/dist/library/src/index.d.ts +1 -1
  325. package/dist/library/src/index.d.ts.map +1 -1
  326. package/dist/library/src/local/db.d.ts.map +1 -1
  327. package/dist/library/src/local/library-manager.d.ts.map +1 -1
  328. package/dist/library/src/local/library.d.ts.map +1 -1
  329. package/dist/library/src/local/schema.d.ts +19 -0
  330. package/dist/library/src/local/schema.d.ts.map +1 -1
  331. package/dist/library/src/user-library.d.ts +18 -0
  332. package/dist/library/src/user-library.d.ts.map +1 -1
  333. package/dist/{library-publish-57422ULT.js → library-publish-YHYGA6G5.js} +71 -65
  334. package/dist/library-publish-YHYGA6G5.js.map +1 -0
  335. package/dist/model-endpoint/index.js +10 -9
  336. package/dist/{open-library-EVUKLOV7.js → open-library-FVV6GG4I.js} +33 -31
  337. package/dist/{open-library-EVUKLOV7.js.map → open-library-FVV6GG4I.js.map} +1 -1
  338. package/dist/{open-registry-4HNCWOCN.js → open-registry-VX2BVMS5.js} +16 -16
  339. package/dist/{open-registry-4HNCWOCN.js.map → open-registry-VX2BVMS5.js.map} +1 -1
  340. package/dist/{paths-PXBWY532.js → paths-PIWSSUUG.js} +10 -9
  341. package/dist/{paths-PXBWY532.js.map → paths-PIWSSUUG.js.map} +1 -1
  342. package/dist/{plugin-store-ZC3EGZ3D.js → plugin-store-MVTW6G7J.js} +10 -9
  343. package/dist/{plugin-store-ZC3EGZ3D.js.map → plugin-store-MVTW6G7J.js.map} +1 -1
  344. package/dist/{project-HB7OYPEF.js → project-BOAHGBMI.js} +47 -45
  345. package/dist/{project-HB7OYPEF.js.map → project-BOAHGBMI.js.map} +1 -1
  346. package/dist/resolver/index.js +8 -7
  347. package/dist/runner/composition-content.d.ts +2 -0
  348. package/dist/runner/composition-content.js +29 -0
  349. package/dist/runner/composition-content.js.map +1 -0
  350. package/dist/runner/index.js +37 -36
  351. package/dist/runner/src/composition/content-entry.d.ts +15 -0
  352. package/dist/runner/src/composition/content-entry.d.ts.map +1 -0
  353. package/dist/runner/src/composition/content-source.d.ts +7 -0
  354. package/dist/runner/src/composition/content-source.d.ts.map +1 -1
  355. package/dist/runner/src/composition/dry-run.d.ts +5 -1
  356. package/dist/runner/src/composition/dry-run.d.ts.map +1 -1
  357. package/dist/runner/src/composition/index.d.ts +1 -1
  358. package/dist/runner/src/composition/index.d.ts.map +1 -1
  359. package/dist/runner/src/composition/prompt-sections.d.ts +47 -20
  360. package/dist/runner/src/composition/prompt-sections.d.ts.map +1 -1
  361. package/dist/runner/src/external-mcp.d.ts +32 -7
  362. package/dist/runner/src/external-mcp.d.ts.map +1 -1
  363. package/dist/runner/src/session-builder.d.ts +3 -8
  364. package/dist/runner/src/session-builder.d.ts.map +1 -1
  365. package/dist/sdk/asset-manager.js +17 -15
  366. package/dist/sdk/bridge.js +16 -16
  367. package/dist/sdk/core.js +7 -6
  368. package/dist/sdk/flow.js +8 -7
  369. package/dist/sdk/index.js +37 -36
  370. package/dist/sdk/index.js.map +1 -1
  371. package/dist/sdk/resolver.js +8 -7
  372. package/dist/sdk/runner.js +37 -36
  373. package/dist/sdk/transport/ws/server.js +8 -7
  374. package/dist/sdk/transport/ws.js +8 -7
  375. package/dist/sdk/transport.js +8 -7
  376. package/dist/serve-preflight-XJS5OZML.js +138 -0
  377. package/dist/serve-preflight-XJS5OZML.js.map +1 -0
  378. package/dist/{setup-2XV6T53V.js → setup-BFEBJLYF.js} +31 -29
  379. package/dist/setup-BFEBJLYF.js.map +1 -0
  380. package/dist/{skills-5D4KDVPJ.js → skills-OCG7B5CL.js} +13 -12
  381. package/dist/{skills-5D4KDVPJ.js.map → skills-OCG7B5CL.js.map} +1 -1
  382. package/dist/source-J2MJIHDS.js +93 -0
  383. package/dist/{source-VXE3RSSA.js.map → source-J2MJIHDS.js.map} +1 -1
  384. package/dist/{source-manifest-publish-IIVQLM67.js → source-manifest-publish-6MYDXCKZ.js} +51 -49
  385. package/dist/source-manifest-publish-6MYDXCKZ.js.map +1 -0
  386. package/dist/transport/index.js +8 -7
  387. package/dist/transport/ws/server.js +8 -7
  388. package/dist/transport/ws.js +8 -7
  389. package/dist/tui/index.js +37 -36
  390. package/dist/tui/index.js.map +1 -1
  391. package/dist/types/src/runtime.d.ts +6 -0
  392. package/dist/types/src/runtime.d.ts.map +1 -1
  393. package/dist/workspace-plugin/adapters/mcp.js +26 -26
  394. package/dist/workspace-plugin/adapters/omp.js +14 -14
  395. package/dist/workspace-plugin/index.js +1 -1
  396. package/package.json +7 -1
  397. package/dist/asset-feeds-PM7FKHJP.js.map +0 -1
  398. package/dist/chunk-2RVEYDQK.js +0 -110
  399. package/dist/chunk-2RVEYDQK.js.map +0 -1
  400. package/dist/chunk-6WIZC6GM.js.map +0 -1
  401. package/dist/chunk-7FXOOUOC.js.map +0 -1
  402. package/dist/chunk-7HRZACI4.js.map +0 -1
  403. package/dist/chunk-7LJUK5JK.js.map +0 -1
  404. package/dist/chunk-7VBD5XUM.js.map +0 -1
  405. package/dist/chunk-A4VKIVGB.js.map +0 -1
  406. package/dist/chunk-BNLXZXZN.js.map +0 -1
  407. package/dist/chunk-DRUAQ7IY.js.map +0 -1
  408. package/dist/chunk-IYXOSBQ4.js.map +0 -1
  409. package/dist/chunk-LBJCOEXH.js.map +0 -1
  410. package/dist/chunk-MEU2HHGV.js.map +0 -1
  411. package/dist/chunk-MS2IXLTC.js.map +0 -1
  412. package/dist/chunk-MUQBP2BK.js.map +0 -1
  413. package/dist/chunk-OIWFXUZB.js.map +0 -1
  414. package/dist/chunk-PFBPESW7.js.map +0 -1
  415. package/dist/chunk-R7422XD4.js.map +0 -1
  416. package/dist/chunk-SXRN27TU.js.map +0 -1
  417. package/dist/chunk-U7EJB6LY.js.map +0 -1
  418. package/dist/chunk-XPSZIBPU.js.map +0 -1
  419. package/dist/chunk-YLKOCMU7.js.map +0 -1
  420. package/dist/cli/src/commands/harness-preflight.d.ts +0 -40
  421. package/dist/cli/src/commands/harness-preflight.d.ts.map +0 -1
  422. package/dist/ensure-sources-I7GCXPXK.js.map +0 -1
  423. package/dist/library-publish-57422ULT.js.map +0 -1
  424. package/dist/serve-preflight-YY3YC6GH.js +0 -61
  425. package/dist/serve-preflight-YY3YC6GH.js.map +0 -1
  426. package/dist/setup-2XV6T53V.js.map +0 -1
  427. package/dist/source-VXE3RSSA.js +0 -91
  428. package/dist/source-manifest-publish-IIVQLM67.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../cli/src/agent-checks.ts","../cli/src/skill-checks.ts","../cli/src/commands/publish-core.ts","../cli/src/store-auth.ts","../cli/src/commands/library-index.ts"],"names":["path","fs","posix","path2","error","fs2","join","readFileSync","dirname","parseYaml","stringifyYaml"],"mappings":"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","file":"chunk-KDRA6FYE.js","sourcesContent":["/**\n * Agent checks that need the filesystem or the library's asset list. The schema\n * refinement (`AgentManifestSchema`) already refuses what the manifest alone can\n * show: a bad cron, an unknown capability slot, an agent composing itself by name.\n * This file adds the rest: local `composes:` paths and `memory.blocks[].source`\n * files (resolved against the agent's own directory), and `composes:` refs that name\n * an asset the library does not hold.\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { Diagnostic } from \"@skaile/workspaces/core\";\nimport type { IAssetKindRegistry } from \"@skaile/workspaces/plugins\";\nimport { resolveBinding, UnknownCompositionKindError } from \"@skaile/workspaces/runner\";\nimport {\n type AgentComposeItem,\n agentDeprecationDiagnostics,\n composeRefTarget,\n composeSlotDiagnostics,\n} from \"@skaile/workspaces/types/manifests\";\nimport type { AssetFinding } from \"./skill-checks.ts\";\n\nconst error = (text: string): AssetFinding => ({ tag: \"agent\", text, conformance: false });\n\n/**\n * Pseudo-kind valid only as a convention-file composition item (`SOUL.md`); it is\n * never an asset kind and is never published.\n */\nconst PSEUDO_COMPOSE_KINDS: ReadonlySet<string> = new Set([\"soul\"]);\n\n/**\n * Check every `composes[].kind` of a parsed `agent.yaml` against the registry\n * (plus the `soul` pseudo-kind), and that a registered kind with no default binding (a\n * `preset`) names a `binding`: session build would throw `unknown_asset_kind` for it. One\n * `unknown_asset_kind` error diagnostic per offending item, pathed `composes[<i>].kind`.\n */\nexport function checkComposeKinds(parsed: unknown, registry: IAssetKindRegistry): Diagnostic[] {\n if (parsed === null || typeof parsed !== \"object\") return [];\n const composes = (parsed as Record<string, unknown>).composes;\n if (!Array.isArray(composes)) return [];\n const diagnostics: Diagnostic[] = [];\n composes.forEach((item, i) => {\n if (item === null || typeof item !== \"object\") return;\n const fields = item as Record<string, unknown>;\n const kind = fields.kind;\n if (typeof kind !== \"string\") return;\n if (!PSEUDO_COMPOSE_KINDS.has(kind) && !registry.getProvider(kind)) {\n diagnostics.push({\n code: \"unknown_asset_kind\",\n severity: \"error\",\n message: `composes item kind \"${kind}\" is not a registered asset kind (registered: ${registry.getAllKinds().join(\", \")})`,\n path: `composes[${i}].kind`,\n });\n return;\n }\n if (fields.binding !== undefined || typeof fields.ref !== \"string\") return;\n try {\n resolveBinding({ kind, ref: fields.ref } as AgentComposeItem);\n } catch (err) {\n if (!(err instanceof UnknownCompositionKindError)) throw err;\n diagnostics.push({\n code: \"unknown_asset_kind\",\n severity: \"error\",\n message: `composes item \"${fields.ref}\" of kind \"${kind}\" has no default binding; set \\`binding:\\` (the session build fails without it)`,\n path: `composes[${i}].binding`,\n });\n }\n });\n return diagnostics;\n}\n\n/**\n * The findings of an `agent.yaml` document that need no filesystem: composed kinds that are\n * not registered or have no default binding, duplicate or unknown slots, and the deprecated 0.1\n * fields. `validate`, `library index` and the publish plan all take them through\n * {@link checkAsset}'s sibling `checkParsedAsset`, so one agent gets one verdict (p415).\n *\n * @returns `errors` fail the asset; `advisories` only warn.\n */\nexport function checkAgentDefinition(\n parsed: Record<string, unknown>,\n registry: IAssetKindRegistry,\n): { errors: AssetFinding[]; advisories: AssetFinding[] } {\n const errors: AssetFinding[] = [];\n const advisories: AssetFinding[] = [];\n for (const d of [\n ...checkComposeKinds(parsed, registry),\n ...composeSlotDiagnostics(parsed),\n ...agentDeprecationDiagnostics(parsed),\n ]) {\n (d.severity === \"error\" ? errors : advisories).push({\n tag: \"agent\",\n text: `${d.code}: ${d.path}: ${d.message}`,\n conformance: false,\n });\n }\n return { errors, advisories };\n}\n\n/** `child` is `parent` or lies inside it. */\nfunction isInside(parent: string, child: string): boolean {\n const rel = path.relative(parent, child);\n return rel === \"\" || (!rel.startsWith(\"..\") && !path.isAbsolute(rel));\n}\n\nfunction records(value: unknown): Array<Record<string, unknown>> {\n return Array.isArray(value)\n ? value.filter((v): v is Record<string, unknown> => v !== null && typeof v === \"object\")\n : [];\n}\n\n/**\n * The errors an agent's files add: a local `composes[].ref` path that does not exist,\n * leaves the library or points at the agent itself, and a `memory.blocks[].source`\n * that is missing, leaves the agent directory, or holds more characters than the\n * block's `max_chars`. Paths resolve against `agentDir`.\n *\n * `library index`, `library publish` and `skaile validate` run it for an agent\n * manifest whose directory is known.\n *\n * @param parsed Parsed agent manifest (`agent.yaml` document or `AGENT.md` frontmatter).\n * @param agentDir Absolute directory of the agent manifest.\n * @param libraryRoot Absolute root of the library holding the agent; a local compose\n * path outside it cannot be published.\n * @returns One error finding per problem; empty when the agent's files are consistent.\n */\nexport function checkAgentFiles(\n parsed: Record<string, unknown>,\n agentDir: string,\n libraryRoot: string,\n): AssetFinding[] {\n const out: AssetFinding[] = [];\n\n records(parsed.composes).forEach((item, i) => {\n if (typeof item.kind !== \"string\" || typeof item.ref !== \"string\") return;\n const target = composeRefTarget({ kind: item.kind, ref: item.ref });\n if (target?.type !== \"local\") return;\n const where = `composes[${i}].ref`;\n const resolved = path.resolve(agentDir, target.path);\n if (!fs.existsSync(resolved)) {\n out.push(\n error(`${where}: local path \"${item.ref}\" does not exist (resolved from ${agentDir})`),\n );\n return;\n }\n if (!isInside(libraryRoot, resolved)) {\n out.push(\n error(`${where}: local path \"${item.ref}\" leaves the library and cannot be published`),\n );\n return;\n }\n const ownManifests = [\n agentDir,\n path.join(agentDir, \"agent.yaml\"),\n path.join(agentDir, \"AGENT.md\"),\n ];\n if (item.kind === \"agent\" && ownManifests.includes(resolved)) {\n out.push(\n error(\n `${where}: agent composes itself (${item.ref}); an agent cannot be its own sub-agent`,\n ),\n );\n }\n });\n\n const blocks = records(\n parsed.memory !== null && typeof parsed.memory === \"object\"\n ? (parsed.memory as Record<string, unknown>).blocks\n : undefined,\n );\n blocks.forEach((block, i) => {\n if (typeof block.source !== \"string\" || block.source === \"\") return;\n const where = `memory.blocks[${i}].source`;\n const resolved = path.resolve(agentDir, block.source);\n if (!isInside(agentDir, resolved)) {\n out.push(error(`${where}: \"${block.source}\" leaves the agent directory`));\n return;\n }\n let stat: fs.Stats;\n try {\n stat = fs.statSync(resolved);\n } catch {\n out.push(error(`${where}: file \"${block.source}\" does not exist in ${agentDir}`));\n return;\n }\n if (!stat.isFile()) {\n out.push(error(`${where}: \"${block.source}\" is not a file`));\n return;\n }\n const max = block.max_chars;\n if (typeof max !== \"number\") return;\n const length = [...fs.readFileSync(resolved, \"utf-8\").trim()].length;\n if (length > max) {\n out.push(\n error(\n `${where}: \"${block.source}\" holds ${length} characters, more than memory block \"${String(block.name)}\" max_chars ${max}`,\n ),\n );\n }\n });\n\n return out;\n}\n\n/** What `composes[].ref` is resolved against: the assets the library holds and the publisher it inherits. */\nexport interface ComposeRefContext {\n /** Whether the library, or a registered library of the same publisher, holds `kind:name`. */\n hasAsset: (kind: string, name: string) => boolean;\n /**\n * Whether the library or any registered library holds `kind:name` of the bare `publisher`\n * (the offline check `requires:` entries get, p1200).\n */\n holds: (publisher: string, kind: string, name: string) => boolean;\n /** The library's publisher, when known; refs naming another publisher are not judged. */\n publisher: string | undefined;\n}\n\n/**\n * The context `validate`, `library index` and the publish plan resolve `composes[]` refs with.\n *\n * @param own `kind:name` identities of the assets of the library being checked.\n * @param registered `publisher/kind:name` keys of the assets every registered library holds.\n * @param publisher The library's publisher, when known.\n */\nexport function composeRefContext(\n own: ReadonlySet<string>,\n registered: ReadonlySet<string>,\n publisher: string | undefined,\n): ComposeRefContext {\n const bare = publisher?.replace(/^@/, \"\");\n return {\n publisher,\n hasAsset: (kind, name) =>\n own.has(`${kind}:${name}`) ||\n (bare !== undefined && registered.has(`${bare}/${kind}:${name}`)),\n holds: (holder, kind, name) =>\n (holder === bare && own.has(`${kind}:${name}`)) ||\n registered.has(`${holder}/${kind}:${name}`),\n };\n}\n\n/**\n * Errors for `composes[]` items that name an asset no library holds (`kind:name` is neither in\n * the library being checked nor in a registered library of its publisher): `skaile add` fails\n * on such an agent with `requires … not found` (p415). A ref that names another publisher is\n * external and cannot be judged here. A bare ref (`skill:sea-lore`) inherits the agent's publisher.\n *\n * @param parsed Parsed agent manifest.\n * @param context What the refs are resolved against.\n * @returns One finding per unresolved ref.\n */\nexport function agentComposeRefProblems(\n parsed: Record<string, unknown>,\n context: ComposeRefContext,\n): AssetFinding[] {\n const out: AssetFinding[] = [];\n records(parsed.composes).forEach((item, i) => {\n if (typeof item.kind !== \"string\" || typeof item.ref !== \"string\") return;\n const target = composeRefTarget({ kind: item.kind, ref: item.ref });\n if (target?.type !== \"asset\" || target.kind === \"soul\") return;\n if (target.publisher !== undefined) {\n if (context.publisher === undefined) return;\n if (target.publisher.replace(/^@/, \"\") !== context.publisher.replace(/^@/, \"\")) return;\n }\n if (context.hasAsset(target.kind, target.name)) return;\n out.push({\n tag: \"agent\",\n text: `composes[${i}].ref: ${item.ref} is not held by this library or any registered library; \\`skaile add\\` fails with \"requires … not found\". Add the asset to a library (\\`skaile library create ${target.kind} ${target.name}\\`) or drop the item`,\n conformance: false,\n });\n });\n return out;\n}\n","/**\n * Per-asset checks shared by `skaile validate`, `skaile library index` and the\n * `library publish` plan, `library create`, `asset import` and `asset migrate`, so all six\n * give the same verdict for the same asset file: {@link runAssetChecks} gives the pipeline of\n * `core/src/check-asset.ts` the stages that need the kind registry, the semver rule and the\n * flow and agent definition parsers, and returns the errors and the warnings.\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport {\n type AssetCheckResult,\n type AssetCommand,\n type AssetEntry,\n type AssetFinding,\n assetRefProblem,\n type CheckDeps,\n type CheckInput,\n type CheckOptions,\n checkAsset,\n parseDep,\n readAssetBody,\n} from \"@skaile/workspaces/core\";\nimport {\n flowFileNameError,\n invalidSemverMessage,\n parseManifestFile,\n SEMVER_RE,\n} from \"@skaile/workspaces/discovery\";\nimport { parseFlowDefinition } from \"@skaile/workspaces/factory-assets/connectors/flow/contract\";\nimport { filesEntryPaths } from \"@skaile/workspaces/library\";\nimport type { IAssetKindRegistry } from \"@skaile/workspaces/plugins\";\nimport {\n agentComposeRefProblems,\n type ComposeRefContext,\n checkAgentDefinition,\n checkAgentFiles,\n} from \"./agent-checks.ts\";\n\nexport type { AssetCheckResult, AssetFinding };\n\n/** Per-type regex patterns for deterministic asset discovery. */\nexport const MANIFEST_GLOBS: Array<{ pattern: RegExp; kind: string }> = [\n { pattern: /\\/SKILL\\.md$/, kind: \"skill\" },\n { pattern: /\\/agent\\.yaml$/, kind: \"agent\" },\n { pattern: /\\/AGENT\\.md$/, kind: \"agent\" },\n { pattern: /\\/CONTRACT\\.md$/, kind: \"contract\" },\n { pattern: /\\/PERSONA\\.md$/, kind: \"persona\" },\n { pattern: /\\/RULESET\\.md$/, kind: \"ruleset\" },\n { pattern: /\\.flow\\.yaml$/, kind: \"flow\" },\n { pattern: /\\.flow\\.json$/, kind: \"flow\" },\n { pattern: /\\/CONNECTOR\\.md$/, kind: \"connector\" },\n { pattern: /\\.prompt\\.md$/, kind: \"prompt\" },\n { pattern: /\\/MCP\\.md$/, kind: \"mcp-server\" },\n { pattern: /\\/knowledge\\.yaml$/, kind: \"knowledge\" },\n { pattern: /\\/knowledge\\/index\\.yaml$/, kind: \"knowledge\" },\n { pattern: /\\.preset\\.yaml$/, kind: \"preset\" },\n];\n\n/** The kind a manifest file name stands for (`SKILL.md` → `skill`), `undefined` for any other file. */\nexport function manifestKindOfFile(file: string): string | undefined {\n const posix = file.split(path.sep).join(\"/\");\n const hay = posix.startsWith(\"/\") ? posix : `/${posix}`;\n return MANIFEST_GLOBS.find((g) => g.pattern.test(hay))?.kind;\n}\n\n/**\n * The one sentence for a manifest file that cannot be parsed (an empty or front-matter-less\n * `SKILL.md`, invalid YAML). `validate`, `library index` and the publish plan print it after their\n * own `<file> [<kind>] —` prefix, so the author reads the same cause and fix everywhere (p1206).\n */\nexport function manifestParseErrorText(reason: string): string {\n return `parse error: ${reason}`;\n}\n\n/** The version `library index` records for a parsed manifest: top-level `version`, else `metadata.version`. */\nexport function declaredVersion(parsed: Record<string, unknown>): string | undefined {\n const scalar = (v: unknown): string | undefined =>\n typeof v === \"string\" ? v : typeof v === \"number\" ? String(v) : undefined;\n const meta = parsed.metadata;\n const nested =\n meta !== null && typeof meta === \"object\"\n ? scalar((meta as Record<string, unknown>).version)\n : undefined;\n return scalar(parsed.version) ?? nested;\n}\n\n/** The refusal text for a version that is not semver, `undefined` when it is. */\nexport function invalidSemverText(version: string): string | undefined {\n return SEMVER_RE.test(version) ? undefined : invalidSemverMessage(version);\n}\n\n/**\n * The version scalar exactly as written in the manifest text (`1.0`, not the `1` yaml reads),\n * `undefined` when the text has no `version:` line. Markdown manifests are searched in their\n * frontmatter only.\n */\nfunction rawVersionScalar(text: string): string | undefined {\n const front = text.startsWith(\"---\") ? (text.split(/\\n---/, 1)[0] ?? text) : text;\n const m = /^[ \\t]*version:[ \\t]*([^\\s#][^#\\n]*?)[ \\t]*(?:#.*)?$/m.exec(front);\n return m?.[1];\n}\n\n/**\n * The refusal for a manifest version that is not semver: {@link invalidSemverText}, and for a yaml\n * number (`version: 1.0` is read as the number 1) the scalar as written plus the quoted fix.\n * `undefined` when the version is absent or valid.\n *\n * @param parsed Parsed manifest.\n * @param rawText The manifest file text, to show the scalar the author wrote.\n */\nexport function versionProblemText(\n parsed: Record<string, unknown>,\n rawText?: string,\n): string | undefined {\n const version = declaredVersion(parsed);\n const text = version === undefined ? undefined : invalidSemverText(version);\n if (text === undefined) return undefined;\n const meta = parsed.metadata;\n const nested =\n meta !== null && typeof meta === \"object\"\n ? (meta as Record<string, unknown>).version\n : undefined;\n const key =\n parsed.version === undefined || parsed.version === null ? \"metadata.version\" : \"version\";\n const written = key === \"version\" ? parsed.version : nested;\n if (typeof written !== \"number\") return text;\n const raw = (rawText === undefined ? undefined : rawVersionScalar(rawText)) ?? String(written);\n // `1` → `1.0.0`, `1.5` → `1.5.0`: the number the author meant, in three parts.\n const fix = /^\\d+(\\.\\d+)?$/.test(raw)\n ? `${raw}${raw.includes(\".\") ? \"\" : \".0\"}.0`\n : DEFAULT_VERSION;\n return `version ${raw} is not valid semver: yaml reads an unquoted number as a number, not a string. Write it quoted with three parts: ${key}: \"${fix}\"`;\n}\n\n/**\n * The refusal for a directory that holds a kind + name another directory already holds.\n * `library index` and the publish plan print it, so both name the directory and the fix alike.\n *\n * @param dir The duplicate directory, relative to the library root.\n * @param detail Why it is a duplicate, e.g. `already registered at \"fun/skills/x\"`.\n * @param library The registered library name, for the re-run hint.\n */\nexport function duplicateAssetMessage(\n kind: string,\n name: string,\n dir: string,\n detail: string,\n library: string,\n): string {\n return `${kind}:${name} found in ${dir} but ${detail}. Rename or delete one of the two directories, then re-run \\`skaile library index ${library}\\`.`;\n}\n\n/** The version a manifest without one is read at: the default `library index` records. */\nexport const DEFAULT_VERSION = \"0.1.0\";\n\n/** The kinds `library create` scaffolds; a missing version and an empty `metadata:` are handled alike for all. */\nconst SCAFFOLD_KINDS: Record<string, true> = {\n skill: true,\n agent: true,\n prompt: true,\n contract: true,\n flow: true,\n preset: true,\n};\n\n/**\n * The manifest the kind schema and the flow parser see: a missing version reads as\n * {@link DEFAULT_VERSION} and an empty `metadata:` as absent, for every scaffolded kind, so no\n * kind refuses what another accepts.\n */\nfunction withManifestDefaults(\n kind: string,\n parsed: Record<string, unknown>,\n): Record<string, unknown> {\n if (!SCAFFOLD_KINDS[kind]) return parsed;\n const out = { ...parsed };\n if (out.metadata === null) delete out.metadata;\n // Only an absent version is defaulted; a present but wrong one (an object, a list) stays an error.\n const meta = out.metadata;\n const nested =\n typeof meta === \"object\" && meta !== null && \"version\" in meta ? meta.version : undefined;\n if (out.version == null && nested == null) out.version = DEFAULT_VERSION;\n return out;\n}\n\n/**\n * The `requires:` entries of a content manifest, read where `parseRequires` reads them. An\n * `agent.yaml` has none: its `requires` is a deprecated 0.1 field no release reads (the\n * agent definition check says so, p1311).\n */\nfunction contentRequiresEntries(parsed: Record<string, unknown>, fileName?: string): string[] {\n if (fileName === \"agent.yaml\") return [];\n const metadata = parsed.metadata;\n const raw =\n parsed.requires ??\n (metadata && typeof metadata === \"object\"\n ? (metadata as Record<string, unknown>).requires\n : undefined);\n const list =\n typeof raw === \"string\"\n ? raw.split(\",\")\n : Array.isArray(raw)\n ? raw.map((e) => (typeof e === \"string\" ? e : JSON.stringify(e)))\n : [];\n return list.map((e) => e.trim()).filter(Boolean);\n}\n\n/**\n * One finding per `requires:` entry that no registered library holds, read offline (p1200): the\n * same check `dependencies:` in `skaile.manifest.yaml` gets (p119). The finding is a warning in\n * `validate` and `library index`; the publish plan asks the store about each one\n * (`unheldRef`) and refuses only when the store does not list it either. Without a `context`\n * nothing is judged.\n *\n * @param kind Asset kind of the manifest.\n * @param parsed Parsed manifest.\n * @param fileName Base name of the manifest file.\n * @param context What the refs are resolved against.\n */\nexport function unheldRequiresFindings(\n kind: string,\n parsed: Record<string, unknown>,\n fileName: string | undefined,\n context: ComposeRefContext | undefined,\n): AssetFinding[] {\n if (!context) return [];\n const out: AssetFinding[] = [];\n const bare = (p: string): string => p.replace(/^@/, \"\");\n for (const entry of contentRequiresEntries(parsed, fileName)) {\n if (assetRefProblem(entry, { allowBare: true })) continue;\n const dep = parseDep(entry);\n const publisher = dep.publisher ?? context.publisher;\n if (publisher === undefined) continue;\n if (context.holds(bare(publisher), dep.kind, dep.name)) continue;\n out.push({\n tag: kind,\n text: `requires \"${entry}\" is not held by any registered library (checked offline: this library and the local index; the store was not asked). \\`skaile add\\` fails with \"requires … not found\" unless the library that holds it is registered`,\n conformance: false,\n unheldRef: `${dep.kind}:@${bare(publisher)}/${dep.name}`,\n });\n }\n return out;\n}\n\n/**\n * The refs an asset names that `add` would refuse: every `requires:` entry (SKILL.md\n * `metadata.requires`, `AGENT.md`; a bare `name` or `kind:name` means the same publisher) and\n * every preset `items[].ref` (a `library://` instance ref is not an asset ref). One rule,\n * {@link assetRefProblem}, so `validate`, `library index` and the publish plan fail them\n * exactly as the manifest `dependencies:` check does (p135).\n */\nfunction referenceErrors(\n kind: string,\n parsed: Record<string, unknown>,\n registry: IAssetKindRegistry,\n fileName?: string,\n): string[] {\n const isKnownKind = (k: string): boolean => registry.getProvider(k) !== undefined;\n const out: string[] = [];\n for (const entry of contentRequiresEntries(parsed, fileName)) {\n const problem = assetRefProblem(entry, { allowBare: true, isKnownKind });\n if (problem) out.push(`invalid requires entry \"${entry}\": ${problem}`);\n }\n if (kind === \"preset\" && Array.isArray(parsed.items)) {\n for (const item of parsed.items) {\n const ref = typeof item === \"string\" ? item : (item as { ref?: unknown } | null)?.ref;\n if (typeof ref !== \"string\" || ref.startsWith(\"library://\")) continue;\n const problem = assetRefProblem(ref, { isKnownKind });\n if (problem) out.push(`invalid preset item \"${ref}\": ${problem}`);\n }\n }\n return out;\n}\n\n/**\n * The plain text for a `name` or `description` the kind schema refuses, `undefined` for any other\n * schema error. The schema's own words (`Invalid input: expected string, received undefined`) name no\n * fix, so every kind says the same thing for the same mistake: what is wrong and what to write (p1401).\n */\nfunction nameDescriptionProblem(\n kind: string,\n parsed: Record<string, unknown>,\n dirName: string,\n e: { path: string; message: string },\n): string | undefined {\n if (e.path === \"name\") {\n const name = parsed.name;\n if ((name ?? null) === null) {\n return `name is required: add \\`name: ${dirName}\\` (lowercase kebab-case, the name of the ${kind})`;\n }\n if (typeof name !== \"string\") {\n return `name must be text: write \\`name: ${dirName}\\` (lowercase kebab-case, the name of the ${kind})`;\n }\n return undefined;\n }\n if (e.path === \"description\") {\n const description = parsed.description;\n if ((description ?? null) === null) {\n return `description is required: say what the ${kind} does and when to use it`;\n }\n if (typeof description !== \"string\") {\n return `description must be text: say what the ${kind} does and when to use it`;\n }\n if (description.trim() === \"\" && !e.message.startsWith(\"description is empty\")) {\n return `description: description is empty — say what the ${kind} does and when to use it`;\n }\n }\n return undefined;\n}\n\n/** The asset a command hands to {@link runAssetChecks}: the parsed manifest and where it lives. */\nexport interface AssetCheckSubject extends CheckInput {\n /** The kind registry that owns each kind's manifest schema. */\n registry: IAssetKindRegistry;\n /**\n * Where the agent lives (`dir`) and the library holding it: an agent's local `composes[].ref`\n * paths and memory sources are checked against them. With `fileName` `agent.yaml` the\n * definition checks (composed kinds, slots, deprecated fields) run too, so every command\n * refuses the same agents (p415). With `composeRefs` a `composes[]` ref no library holds\n * fails the agent too.\n */\n agentFiles?: { dir: string; libraryRoot: string; composeRefs?: ComposeRefContext };\n}\n\n/**\n * The one per-asset check list behind `library create`, `asset import`, `asset migrate`,\n * `skaile validate`, `library publish` and `library index`: the pipeline of\n * `core/src/check-asset.ts` with the stages this layer owns. Errors: an asset name or publisher\n * that is not canonical, a declared version that is not semver, the kind's manifest schema, every\n * untouched `library create` placeholder, the refs `add` would refuse, and for flows and agents\n * the engine's own definition parsers: a flow the engine cannot load is no flow. A missing\n * version reads as 0.1.0 and an empty `metadata:` as absent for every scaffolded kind. Warnings:\n * agentskills.io conformance (errors under `strictConformance`), keys nothing reads, `requires:`\n * entries no registered library holds.\n *\n * @param command The command asking; selects the check set.\n * @param subject The asset, the kind registry and (for an agent) where its files live.\n * @param opts `strictConformance` makes the agentskills.io findings errors.\n */\nexport function runAssetChecks(\n command: AssetCommand,\n subject: AssetCheckSubject,\n opts: CheckOptions = {},\n): AssetCheckResult {\n const { registry, agentFiles, ...input } = subject;\n const { kind, parsed, dirName, rawText, fileName } = input;\n const error = (text: string): AssetFinding => ({ tag: kind, text, conformance: false });\n const effective = withManifestDefaults(kind, parsed);\n // The paths the kind schema already reported, so the flow definition parser does not repeat them.\n const reported = new Set<string>();\n let semver: string | undefined;\n\n const deps: CheckDeps = {\n file: () => {\n const text = kind === \"flow\" ? flowFileNameError(parsed, fileName) : undefined;\n return text ? [error(text)] : [];\n },\n version: () => {\n semver = versionProblemText(parsed, rawText);\n return semver ? [error(semver)] : [];\n },\n schema: () => {\n const errors: AssetFinding[] = [];\n // A markdown kind carries its version in the `metadata:` block, every other kind at the top level.\n const versionKey = [\"skill\", \"prompt\", \"contract\"].includes(kind)\n ? \"metadata.version\"\n : \"version\";\n const provider = registry.getProvider(kind);\n if (!provider) {\n errors.push(error(`unknown_asset_kind: kind \"${kind}\" is not registered`));\n return errors;\n }\n const result = provider.validateManifest(effective);\n if (result.ok) return errors;\n for (const e of result.errors) {\n if (e.path === \"version\" || e.path === \"metadata.version\") {\n // The semver text above already names a version that is present but wrong.\n if (!semver) {\n errors.push(\n error(`${e.path}: must be a semver string — set ${versionKey}: ${DEFAULT_VERSION}`),\n );\n }\n continue;\n }\n reported.add(e.path);\n const plain = nameDescriptionProblem(kind, parsed, dirName, e);\n errors.push(error(plain ?? `${e.path ? `${e.path}: ` : \"\"}${e.message}`));\n }\n return errors;\n },\n references: () => ({\n errors: referenceErrors(kind, parsed, registry, fileName).map(error),\n warnings: unheldRequiresFindings(kind, parsed, fileName, agentFiles?.composeRefs),\n }),\n definition: () => {\n const errors: AssetFinding[] = [];\n const warnings: AssetFinding[] = [];\n if (kind === \"flow\") {\n // The flow schema has no `description`, the other kinds do: a flow without one is refused in the\n // words of every other kind (p1402).\n if (!reported.has(\"description\")) {\n const plain = nameDescriptionProblem(kind, parsed, dirName, {\n path: \"description\",\n message: \"\",\n });\n if (plain) {\n errors.push(error(plain));\n reported.add(\"description\");\n }\n }\n const v2WithoutVersion = flowMissingSchemaVersionError(parsed);\n if (v2WithoutVersion) errors.push(error(v2WithoutVersion));\n const flow = parseFlowDefinition(effective);\n if (!flow.ok) {\n for (const e of flow.errors) {\n // The kind schema already said it, in plain words: say it once.\n if (reported.has(e.path)) continue;\n errors.push(error(`invalid flow definition: ${e.path || \"<root>\"}: ${e.message}`));\n }\n }\n }\n if (kind === \"agent\") {\n if (fileName === \"agent.yaml\") {\n const definition = checkAgentDefinition(parsed, registry);\n errors.push(...definition.errors);\n warnings.push(...definition.advisories);\n }\n if (agentFiles) {\n errors.push(...checkAgentFiles(parsed, agentFiles.dir, agentFiles.libraryRoot));\n }\n if (agentFiles?.composeRefs) {\n errors.push(...agentComposeRefProblems(parsed, agentFiles.composeRefs));\n }\n }\n return { errors, warnings };\n },\n };\n return checkAsset(command, input, deps, opts);\n}\n\n/**\n * The flow engine reads a flow without `schemaVersion: 2` as a legacy flow, and its `run:` nodes\n * as inert placeholders that never execute. A node with a `run:` block is the v2 shape, so in an\n * authored asset the missing version is a mistake: `validate`, `index`, the plan and `add` refuse it (p489).\n * `undefined` when the flow carries `schemaVersion` or has no `run:` node.\n */\nfunction flowMissingSchemaVersionError(parsed: Record<string, unknown>): string | undefined {\n if (\"schemaVersion\" in parsed || !Array.isArray(parsed.nodes)) return undefined;\n for (const node of parsed.nodes) {\n if (typeof node !== \"object\" || node === null || !(\"run\" in node)) continue;\n if (typeof node.run !== \"object\" || node.run === null) continue;\n const id = \"id\" in node ? String(node.id) : \"?\";\n return `schemaVersion is missing: node \"${id}\" has a run: block, the v2 shape; add schemaVersion: 2 as the first line (a v2 flow takes defaults:, not globals:)`;\n }\n return undefined;\n}\n\n/**\n * Locate the manifest file of a first-party asset inside its `root` directory:\n * `SKILL.md`, `agent.yaml` / `AGENT.md`, `CONTRACT.md`, `PERSONA.md`, `RULESET.md`,\n * `<name>.prompt.md`, `<name>.flow.yaml` / `.flow.json` or `<name>.preset.yaml`. `null` when none\n * exists.\n */\nexport function findAssetManifestFile(dir: string, kind: string, name: string): string | null {\n const candidates: string[] = [];\n if (kind === \"skill\") candidates.push(\"SKILL.md\");\n else if (kind === \"agent\") candidates.push(\"agent.yaml\", \"AGENT.md\");\n else if (kind === \"contract\") candidates.push(\"CONTRACT.md\");\n else if (kind === \"persona\") candidates.push(\"PERSONA.md\");\n else if (kind === \"ruleset\") candidates.push(\"RULESET.md\");\n else if (kind === \"prompt\") candidates.push(`${name}.prompt.md`);\n else if (kind === \"flow\") candidates.push(`${name}.flow.yaml`, `${name}.flow.json`);\n else if (kind === \"preset\") candidates.push(`${name}.preset.yaml`);\n for (const c of candidates) {\n const file = path.join(dir, c);\n if (fs.existsSync(file)) return file;\n }\n // A single prompt/flow/preset file whose name differs from the entry name.\n const suffix =\n kind === \"prompt\"\n ? \".prompt.md\"\n : kind === \"flow\"\n ? \".flow.yaml\"\n : kind === \"preset\"\n ? \".preset.yaml\"\n : null;\n if (suffix && fs.existsSync(dir)) {\n const matches = fs.readdirSync(dir).filter((f) => f.endsWith(suffix));\n if (matches.length === 1) return path.join(dir, matches[0]);\n }\n return null;\n}\n\n/**\n * The manifest file of a first-party manifest entry: inside its `root:` directory\n * ({@link findAssetManifestFile}), or among the files a `files:`-only entry lists (p1201).\n * `null` for a curated entry or when none exists.\n */\nexport function findEntryManifestFile(\n libraryPath: string,\n entry: Pick<AssetEntry, \"kind\" | \"name\" | \"root\" | \"files\" | \"source\">,\n): string | null {\n if (entry.root) {\n return findAssetManifestFile(path.join(libraryPath, entry.root), entry.kind, entry.name);\n }\n const listed = filesEntryPaths(libraryPath, entry as AssetEntry);\n if (!listed) return null;\n const listedAbs = new Set(listed.map((f) => path.resolve(libraryPath, f)));\n for (const f of listed) {\n const dir = path.dirname(path.join(libraryPath, f));\n const found = findAssetManifestFile(dir, entry.kind, entry.name);\n if (found && listedAbs.has(path.resolve(found))) return found;\n }\n return null;\n}\n\n/**\n * The errors and warnings of one manifest file on disk for `command`, from {@link runAssetChecks}: what\n * `library index` asks of each asset before it writes it into the manifest, and what the publish\n * plan and `add` ask too. A file that cannot be read or parsed yields none: the parse failure is\n * reported by whoever owns it. The untouched `library create` content is an error for all six\n * kinds: a passing check means the asset can be published (p1020).\n *\n * @param command The command asking; selects the check set.\n * @param file Absolute path of the manifest file.\n * @param kind Asset kind of the manifest.\n * @param registry The kind registry that owns each kind's manifest schema.\n * @param libraryRoot The library holding the asset; an agent's local files are checked against it.\n * @param composeRefs What an agent's `composes[]` refs resolve against; without it they are not checked.\n */\nexport function checkAssetFileFull(\n command: AssetCommand,\n file: string,\n kind: string,\n registry: IAssetKindRegistry,\n libraryRoot?: string,\n composeRefs?: ComposeRefContext,\n): AssetCheckResult {\n let text: string;\n try {\n text = fs.readFileSync(file, \"utf8\");\n } catch {\n return { errors: [], warnings: [] };\n }\n const res = parseManifestFile(file, text);\n if (!res.ok) return { errors: [], warnings: [] };\n return runAssetChecks(command, {\n kind,\n parsed: res.data,\n body: readAssetBody(file, text),\n dirName: path.basename(path.dirname(file)),\n registry,\n rawText: text,\n fileName: path.basename(file),\n ...(libraryRoot === undefined\n ? {}\n : {\n agentFiles: {\n dir: path.dirname(file),\n libraryRoot,\n ...(composeRefs ? { composeRefs } : {}),\n },\n }),\n });\n}\n\n/**\n * The errors of {@link checkAssetFileFull}: what fails the asset in `command`. A file that cannot\n * be read or parsed yields none; whoever owns that failure reports it.\n */\nexport function checkAssetFile(\n command: AssetCommand,\n file: string,\n kind: string,\n registry: IAssetKindRegistry,\n libraryRoot?: string,\n composeRefs?: ComposeRefContext,\n): AssetFinding[] {\n return checkAssetFileFull(command, file, kind, registry, libraryRoot, composeRefs).errors;\n}\n\n/**\n * The lines `skaile validate` prints for a library asset that fails its kind checks, as `add` shows\n * them before it refuses the asset (p1550): `<file> [<tag>] — <text>`, the file relative to the\n * library. The untouched `library create` scaffold (body or description) is one too: it is a hard\n * error in `validate`, `index`, the plan, `asset import` and `add` alike (p223). A source that is a folder is read through its manifest file.\n *\n * @param asset The library entry (`source` is the manifest file or its folder).\n * @param libraryPath The library holding it.\n */\nexport function libraryAssetRefusals(\n asset: { kind: string; name: string; source: string },\n libraryPath: string,\n registry: IAssetKindRegistry,\n): string[] {\n let file: string | null = asset.source;\n try {\n if (fs.statSync(file).isDirectory()) file = findAssetManifestFile(file, asset.kind, asset.name);\n } catch {\n return [];\n }\n // `validate` checks a file only when its name is the manifest file of a kind (`MANIFEST_GLOBS`).\n // A source asset whose `source` is a companion file of a folder agent (`DUTIES.md`) is no\n // manifest: the verdict stays `validate`'s, which does not look at it.\n if (!file || manifestKindOfFile(file) !== asset.kind) return [];\n const rel = path.relative(libraryPath, file).split(path.sep).join(\"/\");\n // `checkAssetFile` yields nothing for a file it cannot parse (the parse failure belongs to\n // whoever owns the file), so `add` reads it first: a file `library index` skips is no asset.\n try {\n const parsed = parseManifestFile(file, fs.readFileSync(file, \"utf8\"));\n if (!parsed.ok) return [`${rel} [${asset.kind}] — ${manifestParseErrorText(parsed.reason)}`];\n } catch {\n return [];\n }\n return checkAssetFile(\"index\", file, asset.kind, registry, libraryPath).map(\n (f) => `${rel} [${f.tag}] — ${f.text}`,\n );\n}\n\n/**\n * The `requires:` entries of one manifest file on disk that no registered library holds\n * ({@link unheldRequiresFindings}); `library index` prints them as warnings (p1200). A file that\n * cannot be read or parsed yields none.\n */\nexport function unheldRequiresOfFile(\n file: string,\n kind: string,\n context: ComposeRefContext,\n): AssetFinding[] {\n try {\n const res = parseManifestFile(file, fs.readFileSync(file, \"utf8\"));\n return res.ok ? unheldRequiresFindings(kind, res.data, path.basename(file), context) : [];\n } catch {\n return [];\n }\n}\n","/**\n * Shared store-interaction core for the two publish front-ends — the curator\n * sidecar flow (`source manifest publish`) and the first-party library flow\n * (`library publish`). Both differ only in their git side-effects + how they\n * resolve the source repo; the store orchestration below (register → sync →\n * candidates → per-asset preview+publish) is identical.\n *\n * The store REST surface is reached through the injectable {@link PublisherClient}\n * so the orchestration stays unit/integration-testable without a live store.\n *\n * @docLink cli/commands/source#manifest-publish\n */\n\nimport { SKAILE_MANIFEST_FILENAME, type SkPublishManifest } from \"@skaile/workspaces/core\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport type { PublisherClient } from \"../store-publisher.ts\";\n\n/**\n * One-line rendering of a namespace-availability probe for a `--dry-run` plan.\n * The `message` is store-authored (identical to what a real publish would echo)\n * — we only prepend a status glyph so the reader sees green/amber/red at a\n * glance without the CLI re-deriving any authorization logic.\n */\nexport function formatNamespaceAvailability(a: {\n status: \"owned-by-you\" | \"claimable-by-you\" | \"reserved\" | \"available\";\n message: string;\n}): string {\n switch (a.status) {\n case \"owned-by-you\":\n case \"available\":\n return `${S.ok(\"✓\")} ${a.message}`;\n case \"claimable-by-you\":\n return `${S.warn(\"!\")} ${a.message}`;\n default:\n return `${S.err(\"✗\")} ${a.message}`;\n }\n}\n\n/**\n * Preflight the target namespace against the store's availability probe BEFORE a\n * publish does any irreversible work (a public git push). Returns `{ ok: false }`\n * with a guided message for `reserved` (not yours) and `claimable-by-you` (must\n * claim first) — the two states a real publish would reject — so the caller can\n * abort with actionable guidance instead of a raw 422 after pushing bytes.\n *\n * The probe is advisory: any failure (offline, older store) returns `{ ok: true }`\n * so the store stays the authority and a valid publish is never blocked.\n */\nexport async function preflightNamespace(\n client: PublisherClient,\n namespace: string,\n): Promise<{ ok: boolean; message?: string }> {\n let a: Awaited<ReturnType<PublisherClient[\"namespaceAvailability\"]>>;\n try {\n a = await client.namespaceAvailability(namespace);\n } catch {\n return { ok: true };\n }\n switch (a.status) {\n case \"owned-by-you\":\n case \"available\":\n return { ok: true };\n case \"claimable-by-you\":\n return {\n ok: false,\n message:\n `@${namespace} isn't yours yet — claim it in the store first` +\n `${a.claimMethod ? ` (${a.claimMethod})` : \"\"}, then re-run. ${a.message}`,\n };\n default: // reserved, or any unrecognized future status (fail safe → block)\n return { ok: false, message: `Cannot publish under @${namespace} — ${a.message}` };\n }\n}\n\n/** One candidate row shape the matcher operates on (kind + name are the key). */\ninterface CandidateLike {\n kind: string;\n name: string;\n}\n\n/**\n * Keep only candidates whose `(kind, name)` pair is declared in the manifest.\n * The backend may merge extra assets from the base repo into the candidate\n * list; a publish only touches what the manifest curated/declared.\n */\nexport function matchCandidatesToManifest<T extends CandidateLike>(\n candidates: T[],\n manifest: SkPublishManifest,\n): T[] {\n const wanted = new Set((manifest.assets ?? []).map((a) => `${a.kind}:${a.name}`));\n return candidates.filter((c) => wanted.has(`${c.kind}:${c.name}`));\n}\n\n/** A canonical ref string `kind:@publisher/name[#version]` for reporting. */\nexport function refFor(kind: string, publisher: string, name: string, version?: string): string {\n const base = `${kind}:@${publisher}/${name}`;\n return version ? `${base}#${version}` : base;\n}\n\n/** Placeholder namespace shown when neither the asset nor the manifest names a publisher. */\nconst UNSET_NAMESPACE = \"<manifest publisher>\";\n\n/**\n * The publisher namespace one manifest asset publishes under:\n * `assets[].publisher` first, else the manifest's top-level `publisher` —\n * the same priority discovery applies when it indexes the asset. `undefined`\n * when neither is declared.\n */\nexport function assetNamespace(\n asset: { publisher?: string },\n manifest: SkPublishManifest,\n): string | undefined {\n return asset.publisher ?? manifest.publisher;\n}\n\n/**\n * The version-less canonical ref of one manifest asset for messages:\n * `kind:@<publisher>/<name>` (`assets[].publisher ?? publisher`), or the bare\n * `kind:name` when the manifest declares no namespace.\n */\nexport function assetEntryRef(\n asset: { kind: string; name: string; publisher?: string },\n manifest: SkPublishManifest,\n): string {\n const ns = assetNamespace(asset, manifest);\n return ns ? refFor(asset.kind, ns, asset.name) : `${asset.kind}:${asset.name}`;\n}\n\n/**\n * The warning `skaile validate` and the publish plan print when a manifest\n * entry's `version` differs from the one in the asset's own file. The file is\n * the source of truth; `skaile library index` rewrites the entry from it.\n *\n * @param entryRef - {@link assetEntryRef} of the entry.\n * @param relFile - the asset file, relative to the library root (posix).\n */\nexport function manifestVersionMismatchMessage(\n entryRef: string,\n entryVersion: string,\n relFile: string,\n fileVersion: string,\n): string {\n return (\n `${SKAILE_MANIFEST_FILENAME} [assets] — ${entryRef}: manifest version ${entryVersion} ` +\n `differs from ${relFile} (${fileVersion}). The file is the source of truth: ` +\n \"bump the version there, then run `skaile library index <library>`.\"\n );\n}\n\n/**\n * Every distinct namespace the manifest's assets (optionally narrowed to\n * `assetName`) publish under, in first-seen order. A manifest whose assets\n * carry no namespace at all falls back to its top-level `publisher` so an\n * empty inventory still reports the namespace it would claim.\n */\nexport function manifestNamespaces(manifest: SkPublishManifest, assetName?: string): string[] {\n const out = new Set<string>();\n for (const a of manifest.assets ?? []) {\n if (assetName && a.name !== assetName) continue;\n const ns = assetNamespace(a, manifest);\n if (ns) out.add(ns);\n }\n if (out.size === 0 && manifest.publisher) out.add(manifest.publisher);\n return [...out];\n}\n\n/**\n * The canonical refs a publish would produce, one per manifest asset (optionally\n * narrowed to `assetName`), each under its own `assets[].publisher ?? publisher`.\n */\nexport function plannedRefs(manifest: SkPublishManifest, assetName?: string): string[] {\n return (manifest.assets ?? [])\n .filter((a) => !assetName || a.name === assetName)\n .map((a) =>\n refFor(\n a.kind,\n assetNamespace(a, manifest) ?? UNSET_NAMESPACE,\n a.name,\n a.version ?? manifest.version,\n ),\n );\n}\n\n/** The bare asset name from a `kind:@publisher/name#version` ref or a plain name. */\nexport function bareName(ref: string): string {\n const afterKind = ref.includes(\":\") ? ref.slice(ref.indexOf(\":\") + 1) : ref;\n const afterScope = afterKind.includes(\"/\")\n ? afterKind.slice(afterKind.indexOf(\"/\") + 1)\n : afterKind;\n return afterScope.split(\"#\")[0];\n}\n\n/**\n * Refuse a present-but-empty `--asset` (`--asset \"$UNSET\"`): an empty string is falsy, so it\n * would silently select every asset of a publish, register or yank.\n */\nexport function exitOnEmptyAsset(asset: string | undefined): void {\n if (asset !== undefined && asset.trim() === \"\") {\n logErr(\n \"--asset needs a ref (`kind:@publisher/name[#version]` or a name); it is empty. Drop the option to select every asset.\",\n );\n process.exit(1);\n }\n}\n\n/**\n * Poll a job until it leaves `running` or the deadline passes. Returns the last\n * observed state — the caller MUST treat a still-`running` result as a timeout\n * (not success), since it means the deadline was hit before the job finished.\n */\nexport async function pollJob(\n client: PublisherClient,\n jobId: string,\n intervalMs = 1_500,\n timeoutMs = 60_000,\n): Promise<{ status: string; items?: Array<{ label: string; status: string; error?: string }> }> {\n const deadline = Date.now() + timeoutMs;\n let job = await client.jobGet(jobId);\n while (job.status === \"running\" && Date.now() < deadline) {\n await new Promise((r) => setTimeout(r, intervalMs));\n job = await client.jobGet(jobId);\n }\n return job;\n}\n\n/**\n * True when a `sourcesAdd` rejection is a duplicate-URL conflict (the source is\n * already registered) — the only error the publish flow recovers from by looking\n * the existing row up. Every other failure (auth, 5xx, network) must propagate.\n */\nexport function isDupSourceError(err: unknown): boolean {\n const msg = (err instanceof Error ? err.message : String(err)).toLowerCase();\n return /\\b409\\b|conflict|duplicate|already exists|already registered|unique/.test(msg);\n}\n\n/**\n * Register + sync the source, then publish its curated/declared candidates —\n * the store-side steps shared by both publish front-ends. Git side-effects (the\n * sidecar push, or the library commit+push) happen in the caller *before* this;\n * this function is purely store interaction.\n *\n * The sidecar front-end passes `sidecar` (so `sourcesAdd` carries the sidecar\n * pin); the library front-end omits it (the source repo IS the manifest host).\n * `assetName`, when set, narrows publication to the single candidate of that\n * name. Fatal store states (`sourcesAdd` non-dup failure) surface; sync failures\n * and empty candidate sets `process.exit(1)` with the same messages as before.\n */\nexport async function publishToStore(opts: {\n sourceUrl: string;\n ref: string;\n sidecar?: { url: string; ref: string };\n manifest: SkPublishManifest;\n assetName?: string;\n client: PublisherClient;\n}): Promise<{ published: string[] }> {\n const { sourceUrl, ref, sidecar, manifest, assetName, client: pub } = opts;\n\n let sourceId: string;\n try {\n const added = await pub.sourcesAdd({\n url: sourceUrl,\n ref,\n ...(sidecar ? { sidecarUrl: sidecar.url, sidecarRef: sidecar.ref } : {}),\n // Publish under the manifest's declared namespace; the store resolves a\n // claimed Publisher when it differs from the caller's login, else defaults\n // to `@<username>`. Omitted when the manifest carries no publisher.\n ...(manifest.publisher ? { namespace: manifest.publisher } : {}),\n });\n sourceId = added.id;\n } catch (err) {\n // Only a duplicate-url conflict is recoverable (source already registered);\n // auth/5xx/network failures must surface, not silently reuse a stale row.\n if (!isDupSourceError(err)) throw err;\n const rows = await pub.sourcesList();\n const found = rows.find((r) => r.url === sourceUrl);\n if (!found) {\n throw new Error(\n `Source ${sourceUrl} looked already-registered but no owned row matched: ` +\n `${err instanceof Error ? err.message : String(err)}`,\n );\n }\n sourceId = found.id;\n }\n\n const { jobId } = await pub.sourceSync(sourceId);\n const job = await pollJob(pub, jobId);\n if (job.status === \"failed\" || job.status === \"cancelled\") {\n const failed = (job.items ?? []).filter((i) => i.status === \"failed\");\n for (const i of failed) logErr(`sync: ${i.label}: ${i.error ?? \"failed\"}`);\n logErr(`Source sync ${job.status}.`);\n process.exit(1);\n }\n // A still-`running` job means the poll deadline was hit — do NOT proceed on an\n // unfinished sync (it would read incomplete candidates).\n if (job.status === \"running\") {\n logErr(\"Source sync timed out before completing — re-run `publish`, or check the store.\");\n process.exit(1);\n }\n\n let candidates = matchCandidatesToManifest(await pub.sourceCandidates(sourceId), manifest);\n if (assetName) candidates = candidates.filter((c) => c.name === assetName);\n if (candidates.length === 0) {\n logWarn(\"No candidates discovered — check the manifest and the source ref.\");\n process.exit(1);\n }\n\n const published: string[] = [];\n for (const c of candidates) {\n try {\n const preview = await pub.assetPreview(c.id);\n const res = await pub.assetPublish(c.id, { ref, files: preview.discoveredFiles });\n // Publish is async — wait for the job so we only report refs that actually\n // landed, not ones whose import is still in flight or about to fail.\n if (res.jobId) {\n const pubJob = await pollJob(pub, res.jobId);\n if (pubJob.status !== \"succeeded\") {\n const errs = (pubJob.items ?? [])\n .filter((i) => i.status === \"failed\")\n .map((i) => i.error)\n .filter(Boolean);\n logWarn(\n `Publish of ${c.kind}:${c.name} did not succeed (${pubJob.status})` +\n (errs.length ? `: ${errs.join(\"; \")}` : \"\"),\n );\n continue;\n }\n }\n published.push(refFor(c.kind, preview.candidate.publisherNamespace, c.name, c.version));\n } catch (err) {\n logWarn(\n `Failed to publish ${c.kind}:${c.name}: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n\n logOk(`Published ${published.length} asset(s):`);\n for (const r of published) logInfo(` ${r}`);\n return { published };\n}\n","/**\n * Keycloak Device Authorization Grant (RFC 8628) for the store CLI: a public\n * device-flow client (`skaile-store-cli`) issues a plain realm JWT the store's\n * `AuthGuard` accepts — a CLI can't use the storefront's confidential browser\n * client. Tokens cache at `~/.skaile/auth.json` (0600, shared with `store/cli`);\n * `getAccessToken` refreshes transparently. All targets are env-overridable.\n *\n * @docLink cli/dev-guide#store-auth\n */\nimport { createHash, randomBytes } from \"node:crypto\";\nimport { chmodSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { globalSkaileDir } from \"@skaile/workspaces/core\";\n\n/**\n * A PKCE (RFC 7636) `code_verifier` + its S256 `code_challenge`. Keycloak\n * enforces PKCE on the `skaile-store-cli` device flow (the device-authorization\n * request 400s with \"Missing parameter: code_challenge_method\" otherwise), so\n * every `deviceLogin` mints a fresh pair: the challenge goes on the device-auth\n * request, the verifier on the matching token poll. `base64url` (no padding)\n * per the spec.\n */\nfunction makePkcePair(): { verifier: string; challenge: string } {\n const verifier = randomBytes(32).toString(\"base64url\");\n const challenge = createHash(\"sha256\").update(verifier).digest(\"base64url\");\n return { verifier, challenge };\n}\n\n/** Resolved auth targets — every field has a prod default, all env-overridable. */\nexport interface StoreAuthConfig {\n keycloakUrl: string;\n realm: string;\n clientId: string;\n authFile: string;\n}\n\nfunction trimTrailingSlash(url: string): string {\n return url.replace(/\\/+$/, \"\");\n}\n\n/**\n * Load the auth config. Defaults target the production store\n * (`auth.skaile.ai`, realm `skaile-store`, public client `skaile-store-cli`);\n * override with `SKAILE_KEYCLOAK_URL` / `SKAILE_STORE_REALM` /\n * `SKAILE_STORE_CLI_CLIENT` / `SKAILE_AUTH_FILE` for dev or a preview deploy.\n */\nexport function loadStoreAuthConfig(): StoreAuthConfig {\n return {\n keycloakUrl: trimTrailingSlash(process.env.SKAILE_KEYCLOAK_URL ?? \"https://auth.skaile.ai\"),\n realm: process.env.SKAILE_STORE_REALM ?? \"skaile-store\",\n clientId: process.env.SKAILE_STORE_CLI_CLIENT ?? \"skaile-store-cli\",\n authFile: process.env.SKAILE_AUTH_FILE ?? join(globalSkaileDir(), \"auth.json\"),\n };\n}\n\n/** Keycloak OIDC endpoints derived from the realm base. */\nfunction oidc(config: StoreAuthConfig): { deviceAuth: string; token: string } {\n const base = `${config.keycloakUrl}/realms/${config.realm}/protocol/openid-connect`;\n return { deviceAuth: `${base}/auth/device`, token: `${base}/token` };\n}\n\nexport interface StoredAuth {\n access_token: string;\n refresh_token?: string;\n /** Epoch ms when the access token expires (with a safety margin already applied). */\n expires_at: number;\n}\n\ninterface TokenResponse {\n access_token: string;\n refresh_token?: string;\n expires_in?: number;\n error?: string;\n error_description?: string;\n}\n\ninterface DeviceAuthResponse {\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete?: string;\n interval?: number;\n expires_in: number;\n}\n\n/** Refresh this many ms before real expiry so an in-flight call never 401s. */\nconst EXPIRY_MARGIN_MS = 30_000;\n\n/** Injectable seams so the poll loop is unit-testable without real time or network. */\nexport interface AuthDeps {\n fetchImpl?: typeof fetch;\n sleep?: (ms: number) => Promise<void>;\n /** Called once with the verification URL + user code (default: write to stderr). */\n onPrompt?: (url: string, userCode: string) => void;\n}\n\nfunction readAuth(config: StoreAuthConfig): StoredAuth | null {\n try {\n const parsed = JSON.parse(readFileSync(config.authFile, \"utf-8\"));\n // Reject a corrupt / hand-edited file rather than treat it as a session.\n if (parsed && typeof parsed.access_token === \"string\") return parsed as StoredAuth;\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * The caller's store identity, decoded LOCALLY from the cached token's JWT\n * payload (no network, no signature check — this is an author-side hint, not an\n * authorization decision). Returns `null` when not signed in or the token is\n * unreadable. `githubLogin` is the verified GitHub handle (the preferred\n * publisher namespace); `username` is the Keycloak `preferred_username`.\n */\nexport function getStoreIdentity(\n config: StoreAuthConfig = loadStoreAuthConfig(),\n): { username?: string; githubLogin?: string } | null {\n const auth = readAuth(config);\n if (!auth) return null;\n try {\n const payload = auth.access_token.split(\".\")[1];\n const json = JSON.parse(Buffer.from(payload, \"base64url\").toString(\"utf-8\"));\n const username =\n typeof json.preferred_username === \"string\" ? json.preferred_username : undefined;\n const githubLogin = typeof json.github_login === \"string\" ? json.github_login : undefined;\n return username || githubLogin ? { username, githubLogin } : null;\n } catch {\n return null;\n }\n}\n\nfunction writeAuth(config: StoreAuthConfig, auth: StoredAuth): void {\n mkdirSync(dirname(config.authFile), { recursive: true });\n writeFileSync(config.authFile, JSON.stringify(auth, null, 2), { mode: 0o600 });\n chmodSync(config.authFile, 0o600);\n}\n\n/** Remove the cached session (sign out). */\nexport function logout(config: StoreAuthConfig): void {\n try {\n rmSync(config.authFile);\n } catch {\n // already absent — nothing to do\n }\n}\n\n/** True when a cached, well-formed session exists (validity/refresh resolved on use). */\nexport function hasStoredAuth(config: StoreAuthConfig): boolean {\n return readAuth(config) !== null;\n}\n\nfunction tokenToStored(token: TokenResponse): StoredAuth {\n return {\n access_token: token.access_token,\n refresh_token: token.refresh_token,\n expires_at: Date.now() + (token.expires_in ?? 300) * 1000 - EXPIRY_MARGIN_MS,\n };\n}\n\nconst defaultSleep = (ms: number): Promise<void> => new Promise((r) => setTimeout(r, ms));\n\nfunction defaultPrompt(url: string, userCode: string): void {\n process.stderr.write(\n `\\nTo sign in, open:\\n\\n ${url}\\n\\nand enter the code: ${userCode}\\n\\nWaiting for approval…\\n`,\n );\n}\n\n/**\n * Run the device flow to completion, persisting tokens on success. Prints the\n * verification URL + user code for the operator to approve in a browser.\n */\nexport async function deviceLogin(\n config: StoreAuthConfig,\n deps: AuthDeps = {},\n): Promise<StoredAuth> {\n const fetchImpl = deps.fetchImpl ?? fetch;\n const sleep = deps.sleep ?? defaultSleep;\n const onPrompt = deps.onPrompt ?? defaultPrompt;\n const endpoints = oidc(config);\n const pkce = makePkcePair();\n\n const deviceRes = await fetchImpl(endpoints.deviceAuth, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n client_id: config.clientId,\n scope: \"openid profile\",\n code_challenge: pkce.challenge,\n code_challenge_method: \"S256\",\n }),\n });\n if (!deviceRes.ok) {\n throw new Error(\n `Device authorization request failed (${deviceRes.status}): ${await deviceRes.text()}`,\n );\n }\n const device = (await deviceRes.json()) as DeviceAuthResponse;\n\n onPrompt(device.verification_uri_complete ?? device.verification_uri, device.user_code);\n\n const intervalMs = (device.interval ?? 5) * 1000;\n const deadline = Date.now() + device.expires_in * 1000;\n let waitMs = intervalMs;\n\n while (Date.now() < deadline) {\n await sleep(waitMs);\n const tokenRes = await fetchImpl(endpoints.token, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n grant_type: \"urn:ietf:params:oauth:grant-type:device_code\",\n device_code: device.device_code,\n client_id: config.clientId,\n code_verifier: pkce.verifier,\n }),\n });\n const token = (await tokenRes.json()) as TokenResponse;\n if (tokenRes.ok) {\n const stored = tokenToStored(token);\n writeAuth(config, stored);\n return stored;\n }\n // RFC 8628 §3.5 pending / slow-down handling.\n if (token.error === \"authorization_pending\") continue;\n if (token.error === \"slow_down\") {\n waitMs += 5_000;\n continue;\n }\n throw new Error(`Sign-in failed: ${token.error_description ?? token.error ?? \"unknown error\"}`);\n }\n throw new Error(\"Sign-in timed out before approval.\");\n}\n\n/** Exchange a refresh token for a fresh access token; persist on success. */\nasync function refresh(\n config: StoreAuthConfig,\n refreshToken: string,\n fetchImpl: typeof fetch,\n): Promise<StoredAuth> {\n const res = await fetchImpl(oidc(config).token, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n refresh_token: refreshToken,\n client_id: config.clientId,\n }),\n });\n const token = (await res.json()) as TokenResponse;\n if (!res.ok) {\n throw new Error(\n `Token refresh failed: ${token.error_description ?? token.error ?? res.status}`,\n );\n }\n const stored = tokenToStored(token);\n writeAuth(config, stored);\n return stored;\n}\n\n/**\n * Return a valid access token, refreshing if it is expired (or about to). Throws\n * a clear \"run `skaile store login`\" error when there is no usable session.\n */\nexport async function getAccessToken(\n config: StoreAuthConfig,\n deps: AuthDeps = {},\n): Promise<string> {\n const fetchImpl = deps.fetchImpl ?? fetch;\n const auth = readAuth(config);\n if (!auth) throw new Error(\"Not signed in. Run `skaile store login` first.\");\n if (Date.now() < auth.expires_at) return auth.access_token;\n if (!auth.refresh_token) throw new Error(\"Session expired. Run `skaile store login` again.\");\n try {\n return (await refresh(config, auth.refresh_token, fetchImpl)).access_token;\n } catch {\n throw new Error(\"Session expired and refresh failed. Run `skaile store login` again.\");\n }\n}\n","/**\n * library-index.ts — index a user library's on-disk assets into the shared\n * `library_assets` index so `add` / `asset install` / `search --local` can\n * resolve them, plus publisher resolution for a freshly-created asset.\n *\n * A `library create`d asset is bytes on disk only until it is indexed; the\n * index is what every resolution path reads. Indexing reuses the same\n * `LocalCatalogSource.sync()` engine `source add`/`sync` run — a library is\n * scanned + upserted keyed by `library_id = lib.id`.\n *\n * @docLink cli/commands/library\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport {\n type AssetEntry,\n assetPathProblem,\n isValidAssetName,\n loadSkPublishManifest,\n manifestTextPublisherProblems,\n matchPin,\n parseDep,\n parseFrontmatter,\n parsePublisher,\n SKAILE_MANIFEST_FILENAME,\n type SkPublishManifest,\n slugifyAssetName,\n} from \"@skaile/workspaces/core\";\nimport {\n expandManifestFiles,\n isLibraryManifestAtAssetRoot,\n isNonAssetPath,\n librarySymlinkMessage,\n listAssetFiles,\n listLibrarySymlinks,\n} from \"@skaile/workspaces/core/publish-manifest\";\nimport {\n type DiscoveredAsset,\n parseManifestFile,\n requiresSyntaxErrors,\n} from \"@skaile/workspaces/discovery\";\nimport {\n assetRootProblem,\n type Library,\n LocalIndex,\n resolveIndexPath,\n stampManifestPublisher,\n upsertManifestAsset,\n} from \"@skaile/workspaces/library\";\nimport type { RenamedLibraryEntry } from \"@skaile/workspaces/asset-manager\";\nimport { Option } from \"commander\";\nimport { parse as parseYaml, stringify as stringifyYaml } from \"yaml\";\nimport { logErr, logWarn } from \"../helpers.ts\";\nimport { openLibrary } from \"../open-library.ts\";\nimport { getKindRegistry } from \"../open-registry.ts\";\nimport {\n findAssetManifestFile,\n manifestKindOfFile,\n manifestParseErrorText,\n} from \"../skill-checks.ts\";\nimport { getStoreIdentity } from \"../store-auth.ts\";\nimport { assetEntryRef, refFor } from \"./publish-core.ts\";\n\n/** One malformed `assets[].dependencies` entry of a library's `skaile.manifest.yaml`. */\nexport interface ManifestRequiresProblem {\n /** `kind:name` of the manifest asset that declares the entry. */\n asset: string;\n /** `invalid requires entry \"<entry>\": <reason>` — one line, no class name (p1602). */\n message: string;\n}\n\n/** A registered reader library, or a source's cache clone: `library index` refuses both. */\nexport interface ReadOnlyLibraryAt {\n /** Registered library name, or the folder name of a source clone. */\n name: string;\n /** The command that refreshes it after its owner pushed a fix. */\n refresh: string;\n}\n\nfunction canonicalPath(p: string): string {\n try {\n return fs.realpathSync(p);\n } catch {\n return path.resolve(p);\n }\n}\n\n/**\n * Whether `dir` is a library `library index` refuses: a registered reader clone, or a source's\n * cache clone (`.skaile/cache/sources/…`). Its owner fixes it upstream, so a line that tells the\n * author to run `library index` there is a dead end. Offline: the index is never created.\n */\nexport async function readOnlyLibraryAt(dir: string): Promise<ReadOnlyLibraryAt | undefined> {\n const here = canonicalPath(dir);\n const segments = here.split(/[\\\\/]/);\n if (segments.some((s, i) => s === \"cache\" && segments[i + 1] === \"sources\")) {\n return { name: path.basename(here), refresh: \"skaile source sync\" };\n }\n const indexPath = resolveIndexPath();\n if (!fs.existsSync(indexPath)) return undefined;\n const index = new LocalIndex({ indexPath, kindRegistry: getKindRegistry() });\n try {\n const lib = (await index.listSources()).find(\n (l) => l.ownership === \"reader\" && canonicalPath(l.path) === here,\n );\n return lib ? { name: lib.name, refresh: `skaile library pull ${lib.name}` } : undefined;\n } catch {\n return undefined;\n } finally {\n index.close();\n }\n}\n\n/**\n * Check every `assets[].dependencies` entry of `<dir>/skaile.manifest.yaml` with\n * the discovery syntax rule. Reads the raw YAML on purpose: `decodeSkaileManifest`\n * drops a malformed dependency (with a warning) before discovery or the index ever\n * sees it, so only the raw text can say which entry is wrong. Shared by\n * `skaile validate` and `skaile library index`, so both fail with the same message.\n */\nexport function manifestRequiresProblems(dir: string): ManifestRequiresProblem[] {\n const file = path.join(dir, \"skaile.manifest.yaml\");\n let doc: unknown;\n try {\n doc = parseYaml(fs.readFileSync(file, \"utf-8\"));\n } catch {\n return []; // absent / unparsable: reported by the loaders that own that failure\n }\n const assets = (doc as { assets?: unknown } | null)?.assets;\n if (!Array.isArray(assets)) return [];\n const problems: ManifestRequiresProblem[] = [];\n for (const a of assets) {\n if (!a || typeof a !== \"object\") continue;\n const { kind, name, dependencies } = a as Record<string, unknown>;\n if (!Array.isArray(dependencies)) continue;\n const entries = dependencies.map((d) => (typeof d === \"string\" ? d : String(d)));\n for (const message of requiresSyntaxErrors(entries)) {\n problems.push({\n asset: `${String(kind)}:${String(name)}`,\n message,\n });\n }\n }\n return problems;\n}\n\n/**\n * `publisher/kind:name` → the versions registered libraries hold, read offline: the library\n * at `dir` itself (its manifest), the assets in the local index (`index.db`) and the manifest\n * of every library the index lists. The index never gets created for this: no `index.db`\n * means only `dir` counts.\n */\nasync function knownAssetVersions(dir: string): Promise<Record<string, string[]>> {\n const known: Record<string, string[]> = {};\n const add = (publisher: string | undefined, kind: string, name: string, version?: string) => {\n if (!publisher) return;\n const key = `${publisher.replace(/^@/, \"\")}/${kind}:${name}`;\n const versions = known[key] ?? [];\n if (version && !versions.includes(version)) versions.push(version);\n known[key] = versions;\n };\n const addManifest = (libPath: string): void => {\n const manifest = loadSkPublishManifest(libPath);\n for (const a of manifest?.assets ?? []) {\n add(a.publisher ?? manifest?.publisher, a.kind, a.name, a.version);\n }\n };\n addManifest(dir);\n const indexPath = resolveIndexPath();\n if (!fs.existsSync(indexPath)) return known;\n const index = new LocalIndex({ indexPath, kindRegistry: getKindRegistry() });\n try {\n for (const def of await index.listAssetDefs())\n add(def.publisher, def.kind, def.name, def.version);\n for (const lib of await index.listSources()) {\n if (path.resolve(lib.path) !== path.resolve(dir) && fs.existsSync(lib.path)) {\n addManifest(lib.path);\n }\n }\n } catch {\n // An unreadable index only narrows what counts as known.\n } finally {\n index.close();\n }\n return known;\n}\n\n/**\n * The `publisher/kind:name` keys of every asset a registered library (and the library at `dir`)\n * holds, read offline as {@link unresolvedManifestDependencies} does: what an agent's\n * `composes[]` refs resolve against besides the library being checked (p415).\n */\nexport async function registeredAssetKeys(dir: string): Promise<Set<string>> {\n return new Set(Object.keys(await knownAssetVersions(dir)));\n}\n\n/** One `assets[].dependencies` entry the offline holder check objects to. */\nexport interface ManifestDependencyProblem {\n /** `kind:name` of the manifest asset that declares the entry. */\n asset: string;\n /** The printed warning line. */\n message: string;\n /** Canonical `kind:@publisher/name` when no registered library holds it at all (a pin problem has none). */\n unheldRef?: string;\n}\n\n/**\n * Every `assets[].dependencies` entry of `<dir>/skaile.manifest.yaml` that no registered library\n * (nor the library itself) holds, or whose `#version` pin matches none of the versions held.\n * Offline: it never asks the store, so a store-only dependency is reported too — the line says\n * what was checked. Entries with invalid syntax are {@link manifestRequiresProblems}' to report.\n */\nexport async function manifestDependencyProblems(\n dir: string,\n): Promise<ManifestDependencyProblem[]> {\n let doc: unknown;\n try {\n doc = parseYaml(fs.readFileSync(path.join(dir, SKAILE_MANIFEST_FILENAME), \"utf-8\"));\n } catch {\n return [];\n }\n const assets = (doc as { assets?: unknown } | null)?.assets;\n if (!Array.isArray(assets)) return [];\n const wanted: Array<{ asset: string; entry: string }> = [];\n for (const a of assets) {\n if (!a || typeof a !== \"object\") continue;\n const { kind, name, dependencies } = a as Record<string, unknown>;\n if (!Array.isArray(dependencies)) continue;\n for (const d of dependencies) {\n const entry = typeof d === \"string\" ? d : String(d);\n if (requiresSyntaxErrors([entry]).length === 0) {\n wanted.push({ asset: `${String(kind)}:${String(name)}`, entry });\n }\n }\n }\n if (wanted.length === 0) return [];\n const known = await knownAssetVersions(dir);\n const out: ManifestDependencyProblem[] = [];\n for (const { asset, entry } of wanted) {\n const dep = parseDep(entry);\n if (!dep.publisher) continue; // the syntax check reports a publisher-less entry\n const versions = known[`${dep.publisher}/${dep.kind}:${dep.name}`];\n const prefix = `${SKAILE_MANIFEST_FILENAME} [assets] — ${asset}: dependency \"${entry}\"`;\n if (!versions) {\n out.push({\n asset,\n unheldRef: `${dep.kind}:@${dep.publisher.replace(/^@/, \"\")}/${dep.name}`,\n message: `${prefix} is not held by any registered library (checked offline: this library and the local index; the store was not asked).`,\n });\n } else if (dep.pin && versions.length > 0 && !versions.some((v) => matchPin(dep.pin, v))) {\n out.push({\n asset,\n message: `${prefix} has no version matching \"${dep.pin}\" in any registered library (held: ${versions.join(\", \")}).`,\n });\n }\n }\n return out;\n}\n\n/** One warning line per entry {@link manifestDependencyProblems} reports. Shared by `skaile validate` and `skaile library index`. */\nexport async function unresolvedManifestDependencies(dir: string): Promise<string[]> {\n return (await manifestDependencyProblems(dir)).map((p) => p.message);\n}\n\n/**\n * Validate a publisher typed on the command line (`--publisher`, `library set\n * <lib> publisher=`): one leading `@` is dropped, and a spelling {@link parsePublisher} refuses\n * exits 1 with its sentence. Returns the bare publisher.\n */\nexport function requireValidPublisherOrExit(raw: string): string {\n const parsed = parsePublisher(raw);\n if (!parsed.ok) {\n logErr(parsed.message);\n process.exit(1);\n }\n return parsed.publisher;\n}\n\n/**\n * Every publisher in `<dir>/skaile.manifest.yaml` (top-level and `assets[].publisher`)\n * that {@link parsePublisher} refuses, one message each. Shared by `skaile validate`,\n * `skaile library index`, `library create`, `asset import` and the publish plan, so all of\n * them refuse a publisher with the same text.\n */\nexport function manifestPublisherProblems(dir: string): string[] {\n let text: string;\n try {\n text = fs.readFileSync(path.join(dir, SKAILE_MANIFEST_FILENAME), \"utf-8\");\n } catch {\n return []; // absent / unreadable: reported by the loaders that own that failure\n }\n return manifestTextPublisherProblems(text).map(\n (p) => `${SKAILE_MANIFEST_FILENAME} ${p.where} — ${p.message}`,\n );\n}\n\n/**\n * Exit 1 when `<dir>/skaile.manifest.yaml` names a publisher that is not a valid slug\n * ({@link manifestPublisherProblems}); the refusal `library create`, `asset import`,\n * `library index` and the publish plan share. `libName` is the registered library.\n */\nexport function exitOnManifestPublisherProblems(dir: string, libName: string): void {\n const problems = manifestPublisherProblems(dir);\n if (problems.length === 0) return;\n for (const message of problems) logErr(message);\n logErr(\n `Fix the publisher in ${SKAILE_MANIFEST_FILENAME} (\\`skaile library set ${libName} publisher=<name>\\` rewrites the library's own), then re-run.`,\n );\n process.exit(1);\n}\n\n/**\n * The fix for an entry `library index` cannot rename: a flow whose `id:` changed but whose file\n * is still named after the old id (the flow engine loads `<id>/<id>.flow.yaml`, so the new id\n * is refused until the file follows it). `undefined` when index renames the entry.\n */\nexport function renameFileFix(\n kind: string,\n name: string,\n now: string,\n file: string,\n): string | undefined {\n if (kind !== \"flow\") return undefined;\n const stem = path.basename(file).replace(/\\.flow\\.(yaml|yml|json)$/, \"\");\n if (stem === now) return undefined;\n return `Rename the file to \"${now}.flow.yaml\" (or set id back to \"${name}\")`;\n}\n\n/**\n * Every first-party manifest entry whose asset file names another asset than the entry does: the\n * author renamed the asset in its file (`name:` / flow `id:`) and did not re-run `library index`,\n * so the entry is a ghost ref `add` cannot resolve (p700). One message each; `validate` and the\n * publish plan refuse it, `library index` renames the entry.\n */\nexport function manifestEntryNameProblems(dir: string): string[] {\n return manifestEntryRenames(dir).map(\n (r) =>\n `${SKAILE_MANIFEST_FILENAME} [assets] ${r.kind}:${r.name} — ${r.file} now names \"${r.now}\": the entry is a ref \\`add\\` cannot resolve. ` +\n (r.fileFix\n ? `${r.fileFix}, then run \\`skaile library index <library>\\`.`\n : \"Run `skaile library index <library>` to rename it, or restore the name.\"),\n );\n}\n\n/**\n * The entries {@link manifestEntryNameProblems} reports, as data: the entry's `kind`, `name` and\n * `publisher` (its own, else the manifest's), the asset file relative to `dir` and the name the\n * file carries now. `add` registers this as its lookup for a ref that resolves to nothing (p1603).\n */\nexport function manifestEntryRenames(dir: string): RenamedLibraryEntry[] {\n const manifest = loadSkPublishManifest(dir);\n if (!manifest || manifest.source) return [];\n const renames: RenamedLibraryEntry[] = [];\n for (const entry of manifest.assets ?? []) {\n if (!entry.root || entry.source) continue;\n if (assetRootProblem(dir, entry.root)) continue;\n const file = findAssetManifestFile(path.join(dir, entry.root), entry.kind, entry.name);\n if (!file) continue;\n let parsedName: unknown;\n try {\n const res = parseManifestFile(file, fs.readFileSync(file, \"utf-8\"));\n if (!res.ok) continue;\n parsedName = entry.kind === \"flow\" ? res.data.id : res.data.name;\n } catch {\n continue;\n }\n if (typeof parsedName !== \"string\" || parsedName === \"\" || parsedName === entry.name) continue;\n // An invalid name is refused on its own line; the entry is left alone, so it is no ghost ref (p1601).\n if (!isValidAssetName(parsedName)) continue;\n const publisher = entry.publisher ?? manifest.publisher;\n const fileFix = renameFileFix(entry.kind, entry.name, parsedName, path.relative(dir, file));\n renames.push({\n kind: entry.kind,\n name: entry.name,\n ...(publisher ? { publisher } : {}),\n file: path.relative(dir, file),\n now: parsedName,\n ...(fileFix ? { fileFix } : {}),\n });\n }\n return renames;\n}\n\n/**\n * Every `assets[].root` of `<dir>/skaile.manifest.yaml` that cannot be an asset directory of\n * the library: it leaves the library (`..`, absolute) or crosses a symlink\n * ({@link assetRootProblem}). `add` scans the library directory, so it never finds such an\n * asset, and a published repo holds no files for it (p701). Reads the raw YAML like\n * {@link manifestPublisherProblems}; shared by `validate`, `library index` and the publish plan.\n */\nexport function manifestRootProblems(dir: string): string[] {\n let doc: unknown;\n try {\n doc = parseYaml(fs.readFileSync(path.join(dir, SKAILE_MANIFEST_FILENAME), \"utf-8\"));\n } catch {\n return [];\n }\n if (!doc || typeof doc !== \"object\") return [];\n const { assets } = doc as { assets?: unknown };\n if (!Array.isArray(assets)) return [];\n const problems: string[] = [];\n for (const a of assets) {\n if (!a || typeof a !== \"object\") continue;\n const { kind, name, root, source, files } = a as Record<string, unknown>;\n if (typeof root !== \"string\" || source !== undefined) continue;\n const problem =\n assetRootProblem(dir, root) ??\n assetPathProblem(root) ??\n (files === undefined ? emptyRootProblem(dir, root) : undefined);\n if (problem) {\n problems.push(\n `${SKAILE_MANIFEST_FILENAME} [assets] ${String(kind)}:${String(name)} — ${problem}`,\n );\n }\n }\n return problems;\n}\n\n/**\n * Why the existing directory `root` of a manifest entry cannot be an asset: it holds no file an\n * asset ships (`undefined` when it holds one, or is no directory: a missing root has its own\n * line). `files:` entries are not asked, the list names the files. Git stores no empty\n * directory, so a reader clone meets this without a mistake of the owner.\n */\nfunction emptyRootProblem(dir: string, root: string): string | undefined {\n const abs = path.resolve(dir, root);\n if (!fs.statSync(abs, { throwIfNoEntry: false })?.isDirectory()) return undefined;\n if (listAssetFiles(abs).length > 0) return undefined;\n return `root \"${root}\" holds no files: add the asset's files, or drop the entry.`;\n}\n\n/**\n * The {@link manifestRootProblems} text for the manifest entry `kind:name` of the library at\n * `dir` (none when its root is fine). `add` calls it so an entry with an empty root fails with\n * the line `validate` prints.\n */\nexport function manifestEntryRootRefusals(dir: string, kind: string, name: string): string[] {\n const manifest = loadSkPublishManifest(dir);\n if (!manifest || manifest.source) return [];\n const entry = (manifest.assets ?? []).find((a) => a.kind === kind && a.name === name);\n if (!entry?.root || entry.source || entry.files !== undefined) return [];\n if (assetRootProblem(dir, entry.root)) return [];\n const problem = emptyRootProblem(dir, entry.root);\n return problem ? [`${SKAILE_MANIFEST_FILENAME} [assets] ${kind}:${name} — ${problem}`] : [];\n}\n\n/**\n * Every `files:` entry of a first-party manifest asset that cannot be a file of the library:\n * a path that leaves the library (`..`, absolute: `add` ignores it and a published repo holds no\n * bytes for it, p1403, the `root:` rule of {@link manifestRootProblems}), and a plain path or\n * glob of a `files:`-only entry that names no file (p1201, p1404). One text per entry, shared by\n * `validate`, `library index` and the publish plan. A curated entry (`source:`) lists upstream\n * files and is skipped.\n */\nexport function manifestFilesProblems(dir: string): string[] {\n const manifest = loadSkPublishManifest(dir);\n if (!manifest || manifest.source) return [];\n return (manifest.assets ?? []).flatMap((a) => manifestEntryFilesProblem(dir, manifest, a) ?? []);\n}\n\n/**\n * The {@link manifestFilesProblems} text of one entry, `undefined` when its `files:` list is fine.\n * `add` and `install` call it through {@link manifestEntryFilesRefusals} so a missing file stops\n * them with the line `validate` prints (p1802).\n */\nfunction manifestEntryFilesProblem(\n dir: string,\n manifest: SkPublishManifest,\n a: AssetEntry,\n): string | undefined {\n if (a.source || !Array.isArray(a.files) || a.files.length === 0) return undefined;\n const ref = assetEntryRef(a, manifest);\n const patterns = a.files.map((f) => (typeof f === \"string\" ? f : f.path)).filter(Boolean);\n const outside = patterns.filter(\n (p) => path.isAbsolute(p) || p.split(/[\\\\/]+/).includes(\"..\") || /^[a-zA-Z]:/.test(p),\n );\n if (outside.length > 0) {\n return (\n `${SKAILE_MANIFEST_FILENAME} [assets] ${ref} — files: ${outside.join(\", \")} leaves the library: ` +\n \"`add` ignores it and a published repo has no file for it. Remove the entry from the `files:` list or move the file into the library.\"\n );\n }\n // A `root:` entry ignores its `files:` list at discovery, but a missing file is still the author's\n // typo: the list is checked against the library directory like a `files:`-only entry (p1404).\n const { unmatched } = expandManifestFiles(dir, patterns);\n if (unmatched.length === 0) return undefined;\n return (\n `${SKAILE_MANIFEST_FILENAME} [assets] ${ref} — files: ${unmatched.join(\", \")} not found. ` +\n \"Fix the `files:` list or drop the entry.\"\n );\n}\n\n/**\n * The {@link manifestFilesProblems} text for the manifest entry `kind:name` of the library at\n * `dir` (none when its `files:` list is fine or the entry lists none). The check `add` runs per\n * asset, so it refuses what `validate`, `library index` and the plan refuse (p1802).\n */\nexport function manifestEntryFilesRefusals(dir: string, kind: string, name: string): string[] {\n const manifest = loadSkPublishManifest(dir);\n if (!manifest || manifest.source) return [];\n const entry = (manifest.assets ?? []).find((a) => a.kind === kind && a.name === name);\n const problem = entry ? manifestEntryFilesProblem(dir, manifest, entry) : undefined;\n return problem ? [problem] : [];\n}\n\n/** The file a library that is itself one skill keeps at its root. */\nconst ROOT_SKILL_FILE = \"SKILL.md\";\n\n/** Whether the library at `dir` is itself one skill (`SKILL.md` at its root, asset root `.`). */\nexport function isRootSkillLibrary(dir: string): boolean {\n return fs.existsSync(path.join(dir, ROOT_SKILL_FILE));\n}\n\n/**\n * One line for every other asset's manifest file below a library that is itself one skill. The\n * skill's root is the whole library, so a second asset would ship (and be hashed) inside the skill\n * and `add` would deploy it as part of it. Shared by `validate`, `library index` and the publish\n * plan.\n */\nexport function rootSkillExtraAssetProblems(dir: string): string[] {\n if (!isRootSkillLibrary(dir)) return [];\n const problems: string[] = [];\n for (const rel of listAssetFiles(dir)) {\n const kind = rel === ROOT_SKILL_FILE ? undefined : manifestKindOfFile(rel);\n if (kind === undefined) continue;\n problems.push(\n `${rel} [${kind}] — the library root is one skill (its ${ROOT_SKILL_FILE} is at the root), so this second asset would ship inside it. ` +\n `A library with a root skill holds that one asset: move ${path.posix.dirname(rel)}/ into another library, or move ${ROOT_SKILL_FILE} into its own folder.`,\n );\n }\n return problems;\n}\n\n/** Exit 1 with {@link rootSkillExtraAssetProblems} when the library holds a second asset; `verb` names the command that stopped. */\nexport function exitOnRootSkillExtraAssets(dir: string, verb: string): void {\n const problems = rootSkillExtraAssetProblems(dir);\n if (problems.length === 0) return;\n for (const message of problems) logErr(message);\n logErr(`Fix it, then re-run \\`${verb}\\`.`);\n process.exit(1);\n}\n\n/**\n * Exit 1 when a new asset would go into a library that is itself one skill: `create` and\n * `asset import` refuse it before any file lands.\n */\nexport function exitOnRootSkillLibrary(dir: string, libraryName: string): void {\n if (!isRootSkillLibrary(dir)) return;\n logErr(\n `Library \"${libraryName}\" is one skill (its ${ROOT_SKILL_FILE} is at the library root): it holds no second asset, the skill would ship it. Create the asset in another library.`,\n );\n process.exit(1);\n}\n\n/**\n * The refusal for a folder that holds an asset file of a kind other than skill at its top level\n * (`agent.yaml`, `CONTRACT.md`, `x.prompt.md`, `x.flow.yaml`, `x.preset.yaml`, ...): only a\n * `SKILL.md` can be the root of a library, every other asset needs its own directory. `undefined`\n * when the top level holds none.\n */\nexport function rootLevelAssetFileProblem(dir: string): string | undefined {\n let names: string[];\n try {\n names = fs\n .readdirSync(dir, { withFileTypes: true })\n .filter((e) => e.isFile())\n .map((e) => e.name)\n .sort();\n } catch {\n return undefined;\n }\n for (const file of names) {\n const kind = manifestKindOfFile(file);\n if (kind === undefined || kind === \"skill\") continue;\n return (\n `${path.join(dir, file)} is an asset file (${kind}) at the folder's top level: only a ${ROOT_SKILL_FILE} can be the root of a library. ` +\n `Move the ${kind} into its own folder (a library asset needs its own directory), then run \\`skaile library init\\` again; nothing was registered.`\n );\n }\n return undefined;\n}\n\n/**\n * Exit 1 when {@link manifestRootProblems} or {@link manifestFilesProblems} finds an entry;\n * `verb` names the command that stopped.\n */\nexport function exitOnManifestPathProblems(dir: string, verb: string): void {\n const problems = [...manifestRootProblems(dir), ...manifestFilesProblems(dir)];\n if (problems.length === 0) return;\n for (const message of problems) logErr(message);\n logErr(`Fix or remove the entry in ${SKAILE_MANIFEST_FILENAME}, then re-run \\`${verb}\\`.`);\n process.exit(1);\n}\n\n/**\n * Print the one refusal text ({@link librarySymlinkMessage}) for every symlink a library\n * refuses under `dir` ({@link listLibrarySymlinks}) and return how many there were.\n * `validate`, `library index`, `library publish`, `library init --path` and `asset import`\n * share it (p520).\n */\nexport function reportLibrarySymlinks(\n dir: string,\n opts?: Parameters<typeof listLibrarySymlinks>[1],\n): number {\n const links = listLibrarySymlinks(dir, opts);\n for (const link of links) logErr(librarySymlinkMessage(link));\n return links.length;\n}\n\n/**\n * Exit 1 when the library at `dir` holds any symlink (`git add -A` would commit it, and a\n * consumer's clone gets no files for it); `verb` names the command that stopped.\n */\nexport function exitOnLibrarySymlinks(dir: string, verb: string): void {\n const count = reportLibrarySymlinks(dir, { wholeTree: true });\n if (count === 0) return;\n logErr(`${count} symlink(s) in ${dir}: remove them, then re-run \\`${verb}\\`.`);\n process.exit(1);\n}\n\n/** Discovery result surfaced by {@link indexLibrary}. */\nexport interface IndexLibraryResult {\n /** Assets discovered on disk under the library root. */\n assetsFound: number;\n /** Assets upserted into `library_assets`. */\n assetsUpdated: number;\n /** Fatal per-asset errors (never advisories). */\n errors: string[];\n /** The entries of `errors` that name a manifest file the indexer could not parse. */\n unparsable: string[];\n}\n\n/**\n * The line `skaile validate` prints for a manifest file that cannot be parsed\n * (`<file> [<kind>] — parse error: <cause and fix>`, p1206), `undefined` when `rel` (relative to\n * the library at `libPath`) parses or is no file.\n */\nexport function manifestParseFailureLine(libPath: string, rel: string): string | undefined {\n const file = path.join(libPath, rel);\n try {\n if (!fs.statSync(file).isFile()) return undefined;\n const res = parseManifestFile(file, fs.readFileSync(file, \"utf-8\"));\n if (res.ok) return undefined;\n const kind = manifestKindOfFile(file) ?? \"asset\";\n return `${rel.split(path.sep).join(\"/\")} [${kind}] — ${manifestParseErrorText(res.reason)}`;\n } catch {\n return undefined;\n }\n}\n\n/**\n * One index error as the user reads it. The indexer reports a file it cannot parse as\n * `<path>: ManifestSchemaError: failed to parse manifest file <file>`; the text is the line\n * `skaile validate` prints for the same file ({@link manifestParseFailureLine}).\n */\nfunction parseFailureText(libPath: string, error: string): string {\n const m = /^(.*): ManifestSchemaError: failed to parse manifest file (.+)$/.exec(error);\n if (!m) return error;\n for (const rel of [m[1], path.join(m[1], m[2]), m[2]]) {\n const line = manifestParseFailureLine(libPath, rel);\n if (line) return line;\n }\n return error;\n}\n\n/**\n * Index a library's assets into the shared `library_assets` index.\n *\n * Runs `LocalCatalogSource.sync()` against the library's `path` keyed by\n * `library_id = lib.id`. Pass an already-open {@link LocalIndex} (e.g. the one\n * `openLibraryManager()` holds) to reuse the single connection — the caller then\n * owns closing it. With no `index` a fresh handle is opened and closed here.\n * `exclude` leaves matching discovered assets out of the index (`library index`\n * uses it for assets it refused to write into the manifest).\n * Returns the sync counters so a caller can report `Indexed N asset(s)`.\n */\nexport async function indexLibrary(\n lib: Library,\n index?: LocalIndex,\n opts: { exclude?: (asset: DiscoveredAsset) => boolean } = {},\n): Promise<IndexLibraryResult> {\n const { LocalCatalogSource } = await import(\"@skaile/workspaces/library\");\n const own = index ?? (await openLibrary());\n try {\n // A clone adopted as a reader or contributor has no manifest to hold its publisher; the one\n // recorded at adoption keys its assets (p1600).\n const config = lib.backendConfig as { publisher?: string } | undefined;\n const source = new LocalCatalogSource(own, lib.id, lib.path, getKindRegistry(), {\n publisher: config?.publisher,\n });\n const res = await source.sync({ exclude: opts.exclude });\n // A file that could not be parsed reads as `validate` says it, not as a class name (p1206).\n const unparsable: string[] = [];\n const errors = res.errors.map((e) => {\n const text = parseFailureText(lib.path, e);\n // A root with no files here is a refusal only where it is a real empty folder: that is\n // checked before the sync (`manifestRootProblems`). A root that has no local folder (a\n // curated entry whose files live upstream) stays a warning, without the class name.\n const emptyRoot = text.replace(\n /: ManifestFileMissing: (root \".*\" contains no files)$/,\n \": $1\",\n );\n if (emptyRoot !== text) return emptyRoot;\n if (text !== e) unparsable.push(text);\n return text;\n });\n return {\n assetsFound: res.assetsFound,\n assetsUpdated: res.assetsUpdated,\n errors,\n unparsable,\n };\n } finally {\n if (!index) own.close();\n }\n}\n\n/** Where {@link resolveLibraryPublisherDetailed} found the publisher. */\nexport type LibraryPublisherSource = \"flag\" | \"manifest\" | \"identity\" | \"library-name\";\n\n/**\n * Resolve the publisher for an asset created inside a library. Never throws.\n *\n * Fallback chain (first hit wins):\n * 1. `opts.publisher` (an explicit `--publisher`),\n * 2. the library manifest's top-level `publisher` (`skaile.manifest.yaml`),\n * 3. the author's verified store identity (`githubLogin`, else `username`)\n * when signed in — the publisher they can actually publish under,\n * 4. the kebab-cased library name (e.g. `My Lib` → `my-lib`) as a last resort.\n *\n * The publisher is never derived from where the asset sits in the library:\n * every asset inherits the library's publisher unless it sets its own.\n *\n * Identity beats the library name because the library name is almost never a\n * namespace the author can publish; stamping it led to publishes that only\n * failed at the store. Passed in (not read here) to keep this pure + testable.\n *\n * @param lib - The target library.\n * @param opts - Optional explicit `--publisher`.\n * @param storeIdentity - The author's decoded store identity, or null when signed out.\n * @returns The bare publisher and which link of the chain supplied it.\n */\nexport function resolveLibraryPublisherDetailed(\n lib: Pick<Library, \"name\" | \"path\">,\n opts: { publisher?: string },\n storeIdentity?: { username?: string; githubLogin?: string } | null,\n): { publisher: string; source: LibraryPublisherSource } {\n const bare = (p: string) => (p.startsWith(\"@\") ? p.slice(1) : p);\n if (opts.publisher?.trim()) return { publisher: bare(opts.publisher.trim()), source: \"flag\" };\n const declared = loadSkPublishManifest(lib.path)?.publisher?.trim();\n if (declared) return { publisher: bare(declared), source: \"manifest\" };\n // A login is case-insensitive on GitHub, so fold it to the lowercase slug; one that\n // still fails the slug rule falls through to the library name.\n const identity = (storeIdentity?.githubLogin ?? storeIdentity?.username)?.trim().toLowerCase();\n const parsedIdentity = identity === undefined ? undefined : parsePublisher(identity);\n if (parsedIdentity?.ok) return { publisher: parsedIdentity.publisher, source: \"identity\" };\n // slugifyAssetName throws on a name with no [a-z0-9] — keep the chain total. The slug is\n // cut to 39 characters so the fallback always passes the publisher rule.\n try {\n const slug = slugifyAssetName(lib.name).slice(0, 39).replace(/-+$/, \"\");\n return { publisher: slug, source: \"library-name\" };\n } catch {\n return { publisher: \"library\", source: \"library-name\" };\n }\n}\n\n/** {@link resolveLibraryPublisherDetailed} without the provenance. */\nexport function resolveLibraryPublisher(\n lib: Pick<Library, \"name\" | \"path\">,\n opts: { publisher?: string },\n storeIdentity?: { username?: string; githubLogin?: string } | null,\n): string {\n return resolveLibraryPublisherDetailed(lib, opts, storeIdentity).publisher;\n}\n\n/**\n * Warn that an asset's publisher fell back to the library name — the one text\n * `library create`, `asset import`, `library index` and the `init` adopt path\n * share. Prints nothing for any other {@link LibraryPublisherSource}.\n *\n * `hasPublisherFlag` is true for the commands that take `--publisher` (`create`,\n * `asset import`); `init` and `index` do not, so they must not advise it.\n */\nexport function warnLibraryNameFallback(\n libName: string,\n resolved: { publisher: string; source: LibraryPublisherSource },\n hasPublisherFlag = false,\n): void {\n if (resolved.source !== \"library-name\") return;\n const setLater = `\\`skaile library set ${libName} publisher=<name>\\``;\n logWarn(\n `No publisher given and not signed in — using the library name \"${resolved.publisher}\" as the publisher. ` +\n (hasPublisherFlag\n ? `Pass --publisher <name> or run \\`skaile store login\\`; change it later with ${setLater}.`\n : `Run \\`skaile store login\\`, or change it later with ${setLater}.`),\n );\n}\n\n/**\n * Re-serialise a freshly written asset's markdown marker (SKILL.md / AGENT.md /\n * CONTRACT.md / `*.prompt.md`) so `library create` and `asset import` leave the\n * same canonical frontmatter (`version: 0.1.0`, not the scaffold's quoted\n * `version: \"0.1.0\"`). Never adds or changes a key — the publisher lives in the\n * manifest only. A YAML marker (flow / preset) or an unparsable file is left\n * untouched.\n */\nfunction normalizeAssetFrontmatter(assetDir: string): void {\n let markerFile = [\"SKILL.md\", \"AGENT.md\", \"CONTRACT.md\"]\n .map((m) => path.join(assetDir, m))\n .find((f) => fs.existsSync(f));\n if (!markerFile) {\n // Only a `.prompt.md` marker carries asset frontmatter — never a bare `.md`\n // catch-all, which would rewrite (and corrupt) a template's README/CHANGELOG.\n const promptMd = fs.readdirSync(assetDir).find((f) => f.endsWith(\".prompt.md\"));\n if (promptMd) markerFile = path.join(assetDir, promptMd);\n }\n if (!markerFile) return;\n try {\n const { data, body } = parseFrontmatter(fs.readFileSync(markerFile, \"utf8\"));\n const fm = stringifyYaml(data).trimEnd();\n fs.writeFileSync(markerFile, `---\\n${fm}\\n---\\n\\n${body}\\n`, \"utf8\");\n } catch {\n // Non-fatal — the file stays as written.\n }\n}\n\n/** What {@link registerLibraryAsset} needs to know about the asset that just landed in a library. */\nexport interface RegisterLibraryAssetInput {\n kind: string;\n name: string;\n /** Absolute directory of the asset inside the library. */\n assetDir: string;\n /** Version written to the manifest entry and the printed ref. */\n version: string;\n /** Explicit `--publisher`. */\n publisher?: string;\n}\n\n/**\n * Make an asset that was just written into a library consumable — the shared\n * tail of `library create` and `asset import`, so both produce the same\n * manifest entry, frontmatter shape and index rows:\n * 1. resolve the publisher ({@link resolveLibraryPublisherDetailed}); when it\n * came from the library-name fallback, warn once how to set a real one,\n * 2. stamp it into the manifest's top-level `publisher` (first writer wins) —\n * the manifest is the only place a publisher lives; the asset file is\n * left untouched,\n * 3. upsert the manifest `assets[]` entry (`library publish` ships only that\n * inventory),\n * 4. index the library so `add` / `search --local` find the asset at once.\n *\n * @returns the bare publisher and the canonical ref (`kind:@pub/name#version`).\n */\nexport async function registerLibraryAsset(\n lib: Library,\n index: LocalIndex,\n input: RegisterLibraryAssetInput,\n): Promise<{ publisher: string; ref: string }> {\n const { publisher, source } = resolveLibraryPublisherDetailed(\n lib,\n { publisher: input.publisher },\n getStoreIdentity(),\n );\n warnLibraryNameFallback(lib.name, { publisher, source }, true);\n normalizeAssetFrontmatter(input.assetDir);\n stampManifestPublisher(lib.path, publisher);\n upsertManifestAsset(lib.path, {\n kind: input.kind,\n name: input.name,\n root: path.relative(lib.path, input.assetDir) || input.name,\n version: input.version,\n publisher,\n });\n const idx = await indexLibrary(lib, index);\n for (const e of idx.errors) logWarn(e);\n return { publisher, ref: refFor(input.kind, publisher, input.name, input.version) };\n}\n\n/** Where an npm user reads the 4.x → 5.x library upgrade (MIGRATION.md is not in the package). */\nexport const LIBRARY_UPGRADE_DOCS =\n \"https://github.com/skaile-ai/workspaces/blob/main/docs/sections/cli/commands/library.md#upgrading-a-4x-library\";\n\n/** What replaced `DOMAIN.md`: 5.0 removed domains. */\nexport const DOMAIN_REMOVED_HINT = `Domains were removed in 5.0 — delete DOMAIN.md files; group assets with .claude-plugin/marketplace.json. See ${LIBRARY_UPGRADE_DOCS}`;\n\n/** Hidden `--domain <domain>` option: 4.x muscle memory gets {@link DOMAIN_REMOVED_HINT}, not \"unknown option\". */\nexport function removedDomainOption(): Option {\n return new Option(\"--domain <domain>\", \"Removed in 5.0\").hideHelp();\n}\n\n/** Exit 1 with {@link DOMAIN_REMOVED_HINT} when the removed `--domain` option was passed. */\nexport function rejectRemovedDomainOption(opts: { domain?: unknown }): void {\n if (opts.domain === undefined) return;\n logErr(DOMAIN_REMOVED_HINT);\n process.exit(1);\n}\n\n/** Collect the files below `root` whose name satisfies `match`, skipping dot-dirs and `node_modules`. */\nfunction findFiles(root: string, match: (name: string) => boolean): string[] {\n const found: string[] = [];\n const walk = (dir: string): void => {\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const entry of entries) {\n if (entry.isDirectory()) {\n if (!entry.name.startsWith(\".\") && entry.name !== \"node_modules\") {\n walk(path.join(dir, entry.name));\n }\n } else if (match(entry.name)) {\n found.push(path.join(dir, entry.name));\n }\n }\n };\n walk(root);\n return found;\n}\n\n/** Count `DOMAIN.md` files below `root`, skipping dot-dirs and `node_modules`. */\nexport function countDomainFiles(root: string): number {\n return findFiles(root, (name) => name === \"DOMAIN.md\").length;\n}\n\n/**\n * Print ONE warning when `root` still holds `DOMAIN.md` files: since 5.0 they\n * are ignored silently, so without this an author never learns why grouping\n * stopped working. Warning only - never changes an exit code.\n *\n * @returns the number of `DOMAIN.md` files found.\n */\nexport function warnIgnoredDomainFiles(root: string): number {\n const count = countDomainFiles(root);\n if (count > 0) {\n logWarn(\n `${count} DOMAIN.md file(s) are ignored since 5.0 (domains were removed) — delete them; ` +\n `group assets with .claude-plugin/marketplace.json. See ${LIBRARY_UPGRADE_DOCS}`,\n );\n }\n return count;\n}\n\n/**\n * Print ONE warning when `root` still holds `*.bundle.yaml` files: the `bundle`\n * kind is gone (now `preset`), so neither `index` nor `validate` scans them.\n * Warning only - never changes an exit code.\n *\n * @returns the number of `*.bundle.yaml` files found.\n */\nexport function warnLegacyBundleFiles(root: string): number {\n const files = findFiles(root, (name) => name.endsWith(\".bundle.yaml\"));\n if (files.length > 0) {\n const shown = files.slice(0, 5).map((f) => path.relative(root, f) || f);\n const more = files.length > shown.length ? `, +${files.length - shown.length} more` : \"\";\n logWarn(\n `${files.length} *.bundle.yaml file(s) are not scanned (the bundle kind became preset): ${shown.join(\", \")}${more}. ` +\n `Run \\`skaile migrate assets ${root} --write\\` to rename them to *.preset.yaml. See ${LIBRARY_UPGRADE_DOCS}`,\n );\n }\n return files.length;\n}\n\n/** `git <args>` in `cwd` as NUL-separated paths; `undefined` when git fails (no repo, no commit). */\nfunction gitPaths(cwd: string, args: string[]): string[] | undefined {\n const res = spawnSync(\"git\", args, { cwd, encoding: \"utf-8\" });\n if (res.status !== 0) return undefined;\n return res.stdout.split(\"\\0\").filter((p) => p !== \"\");\n}\n\n/**\n * Print one warning per file that sits in the root of an asset the library's git repo already\n * holds, that git neither tracks nor ignores, and that the asset would ship (so not a\n * `.pyc`, `.env`, `dist/`, ...): the next clone lacks it, and `add` and the lock hash it as\n * long as it lies there. A library that is no git repo of its own, has no commit, or an\n * asset with no tracked file yet (a fresh scaffold) says nothing. Warning only.\n *\n * @returns the number of files named.\n */\nexport function warnUntrackedAssetFiles(libPath: string): number {\n const top = spawnSync(\"git\", [\"rev-parse\", \"--show-toplevel\"], {\n cwd: libPath,\n encoding: \"utf-8\",\n });\n if (top.status !== 0 || fs.realpathSync(top.stdout.trim()) !== fs.realpathSync(libPath)) return 0;\n const tracked = gitPaths(libPath, [\"ls-files\", \"-z\"]);\n const untracked = gitPaths(libPath, [\"ls-files\", \"-z\", \"--others\", \"--exclude-standard\"]);\n const manifest = loadSkPublishManifest(libPath);\n if (!tracked || !untracked || tracked.length === 0 || !manifest) return 0;\n let count = 0;\n for (const entry of manifest.assets ?? []) {\n if (!entry.root || entry.source || entry.files !== undefined) continue;\n const root = path.posix.normalize(entry.root).replace(/^\\.$/, \"\").replace(/\\/$/, \"\");\n const inRoot = (p: string) => root === \"\" || p.startsWith(`${root}/`);\n if (!tracked.some(inRoot)) continue;\n for (const file of untracked.filter(inRoot)) {\n const rel = root === \"\" ? file : file.slice(root.length + 1);\n if (isNonAssetPath(rel, \"asset-root\") || isLibraryManifestAtAssetRoot(rel)) continue;\n logWarn(\n `${file}: not tracked by git and not ignored, so it ships with ${entry.kind}:${entry.name} here but a clone lacks it. Commit it (\\`skaile library commit\\`), delete it, or add it to .gitignore.`,\n );\n count++;\n }\n }\n return count;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { withFsDeadline, tryWithFsDeadline, walkDir } from './chunk-VS6XC5JE.js';
1
+ import { withFsDeadline, tryWithFsDeadline, walkDir } from './chunk-2MTRRK37.js';
2
2
  import { createLogger } from './chunk-BOFL7GIF.js';
3
3
  import { parse } from 'yaml';
4
4
  import { readFile, stat } from 'fs/promises';
@@ -329,5 +329,5 @@ function validateFlowVersions(nodes, skillVersions) {
329
329
  }
330
330
 
331
331
  export { buildRequiresPreamble, parseCompactionDirectives, parseSkillFrontmatter, parseSkillRequirements, validateConnectorRequirements, validateFlowVersions, validateRequirements };
332
- //# sourceMappingURL=chunk-KOI7QFDH.js.map
333
- //# sourceMappingURL=chunk-KOI7QFDH.js.map
332
+ //# sourceMappingURL=chunk-M7XIYHWB.js.map
333
+ //# sourceMappingURL=chunk-M7XIYHWB.js.map