@skaile/workspaces 4.36.0 → 4.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/dist/app-sdk/index.js +1 -1
  3. package/dist/{asset-feeds-SJELMLNK.js → asset-feeds-UYIFZKKG.js} +16 -16
  4. package/dist/asset-feeds-UYIFZKKG.js.map +1 -0
  5. package/dist/asset-manager/catalog-deployer.js +9 -8
  6. package/dist/asset-manager/index.js +15 -14
  7. package/dist/asset-manager/installer.js +11 -10
  8. package/dist/asset-manager/renderers.js +2 -2
  9. package/dist/asset-manager/src/index.d.ts +77 -18
  10. package/dist/asset-manager/src/index.d.ts.map +1 -1
  11. package/dist/asset-manager/src/installer.d.ts +11 -1
  12. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  13. package/dist/bridge/drivers/claude-sdk.js +14 -13
  14. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  15. package/dist/bridge/drivers/codex.js +11 -10
  16. package/dist/bridge/drivers/codex.js.map +1 -1
  17. package/dist/bridge/drivers/continue.js +12 -11
  18. package/dist/bridge/drivers/continue.js.map +1 -1
  19. package/dist/bridge/drivers/echo.js +3 -3
  20. package/dist/bridge/drivers/gemini.js +6 -6
  21. package/dist/bridge/drivers/goose.js +12 -11
  22. package/dist/bridge/drivers/goose.js.map +1 -1
  23. package/dist/bridge/drivers/omp.js +4 -4
  24. package/dist/bridge/drivers/opencode.js +12 -11
  25. package/dist/bridge/drivers/opencode.js.map +1 -1
  26. package/dist/bridge/drivers/qwen.js +6 -6
  27. package/dist/bridge/index.js +15 -14
  28. package/dist/{chunk-3CLUU45N.js → chunk-27DN4DZD.js} +8 -8
  29. package/dist/{chunk-3CLUU45N.js.map → chunk-27DN4DZD.js.map} +1 -1
  30. package/dist/{chunk-VOEBLPXO.js → chunk-2EL2PBRC.js} +3 -3
  31. package/dist/{chunk-VOEBLPXO.js.map → chunk-2EL2PBRC.js.map} +1 -1
  32. package/dist/{chunk-VRFKCF3R.js → chunk-36ML6SFP.js} +4 -4
  33. package/dist/{chunk-VRFKCF3R.js.map → chunk-36ML6SFP.js.map} +1 -1
  34. package/dist/{chunk-O63QZ6XX.js → chunk-4WKZEMBD.js} +4 -4
  35. package/dist/{chunk-O63QZ6XX.js.map → chunk-4WKZEMBD.js.map} +1 -1
  36. package/dist/{chunk-2D3C4AJP.js → chunk-5CYEWBPB.js} +11 -4
  37. package/dist/chunk-5CYEWBPB.js.map +1 -0
  38. package/dist/{chunk-SQ7IN7KR.js → chunk-5K2VT6E2.js} +3 -3
  39. package/dist/{chunk-SQ7IN7KR.js.map → chunk-5K2VT6E2.js.map} +1 -1
  40. package/dist/{chunk-NTASYPDN.js → chunk-5NYBY6ZE.js} +3 -3
  41. package/dist/{chunk-NTASYPDN.js.map → chunk-5NYBY6ZE.js.map} +1 -1
  42. package/dist/{chunk-FQE2NBUH.js → chunk-6EMF4UZI.js} +8 -8
  43. package/dist/{chunk-FQE2NBUH.js.map → chunk-6EMF4UZI.js.map} +1 -1
  44. package/dist/{chunk-MQU632EK.js → chunk-6KPQDP7P.js} +2 -2
  45. package/dist/{chunk-MQU632EK.js.map → chunk-6KPQDP7P.js.map} +1 -1
  46. package/dist/{chunk-LVRKJW53.js → chunk-6VRZ6M2L.js} +10 -3
  47. package/dist/chunk-6VRZ6M2L.js.map +1 -0
  48. package/dist/{chunk-5L55HNNA.js → chunk-7FZSABQV.js} +5 -5
  49. package/dist/{chunk-5L55HNNA.js.map → chunk-7FZSABQV.js.map} +1 -1
  50. package/dist/{chunk-FLGLODDF.js → chunk-7RC37XFW.js} +3 -3
  51. package/dist/{chunk-FLGLODDF.js.map → chunk-7RC37XFW.js.map} +1 -1
  52. package/dist/{chunk-3VUHHDZW.js → chunk-7UL2SQQH.js} +4 -4
  53. package/dist/{chunk-3VUHHDZW.js.map → chunk-7UL2SQQH.js.map} +1 -1
  54. package/dist/{chunk-GEEW6SY2.js → chunk-A5EDMBFG.js} +2 -2
  55. package/dist/{chunk-GEEW6SY2.js.map → chunk-A5EDMBFG.js.map} +1 -1
  56. package/dist/{chunk-QABZZROM.js → chunk-ARUJBGAH.js} +3 -3
  57. package/dist/{chunk-QABZZROM.js.map → chunk-ARUJBGAH.js.map} +1 -1
  58. package/dist/{chunk-TILISP6X.js → chunk-BQ3HXZNT.js} +2 -2
  59. package/dist/{chunk-TILISP6X.js.map → chunk-BQ3HXZNT.js.map} +1 -1
  60. package/dist/{chunk-NVNKPWL4.js → chunk-CACCIOQL.js} +12 -12
  61. package/dist/{chunk-NVNKPWL4.js.map → chunk-CACCIOQL.js.map} +1 -1
  62. package/dist/{chunk-5JAO4MXA.js → chunk-DOVURNRK.js} +3 -3
  63. package/dist/{chunk-5JAO4MXA.js.map → chunk-DOVURNRK.js.map} +1 -1
  64. package/dist/{chunk-P4VHQA4N.js → chunk-DSB6X25D.js} +3 -3
  65. package/dist/{chunk-P4VHQA4N.js.map → chunk-DSB6X25D.js.map} +1 -1
  66. package/dist/{chunk-ZWTCXL3H.js → chunk-DV47JNI4.js} +3 -3
  67. package/dist/{chunk-ZWTCXL3H.js.map → chunk-DV47JNI4.js.map} +1 -1
  68. package/dist/{chunk-Q7SIVPM2.js → chunk-EETXMMZS.js} +3 -3
  69. package/dist/{chunk-Q7SIVPM2.js.map → chunk-EETXMMZS.js.map} +1 -1
  70. package/dist/{chunk-OEBAXTQ4.js → chunk-EOKAFBJ7.js} +3 -3
  71. package/dist/{chunk-OEBAXTQ4.js.map → chunk-EOKAFBJ7.js.map} +1 -1
  72. package/dist/{chunk-6BEGKO2Q.js → chunk-HUNZYTOS.js} +4 -3
  73. package/dist/chunk-HUNZYTOS.js.map +1 -0
  74. package/dist/{chunk-YOIENZHA.js → chunk-HXG6IZSF.js} +6 -6
  75. package/dist/{chunk-YOIENZHA.js.map → chunk-HXG6IZSF.js.map} +1 -1
  76. package/dist/{chunk-L22WTIIC.js → chunk-ILAZDNIA.js} +3 -3
  77. package/dist/{chunk-L22WTIIC.js.map → chunk-ILAZDNIA.js.map} +1 -1
  78. package/dist/{chunk-FWZTKSYI.js → chunk-J5UF3OOS.js} +10 -10
  79. package/dist/{chunk-FWZTKSYI.js.map → chunk-J5UF3OOS.js.map} +1 -1
  80. package/dist/{chunk-QKXDRBLL.js → chunk-JEPSP6XK.js} +11 -80
  81. package/dist/chunk-JEPSP6XK.js.map +1 -0
  82. package/dist/{chunk-KIFJWSNC.js → chunk-KAJH3XPW.js} +7 -3
  83. package/dist/chunk-KAJH3XPW.js.map +1 -0
  84. package/dist/chunk-LOHQTTUV.js +29 -0
  85. package/dist/chunk-LOHQTTUV.js.map +1 -0
  86. package/dist/{chunk-MDBAEEY5.js → chunk-MQ42OYKH.js} +159 -7
  87. package/dist/chunk-MQ42OYKH.js.map +1 -0
  88. package/dist/{chunk-5JJ5KQUM.js → chunk-MS2JK4V7.js} +6 -6
  89. package/dist/{chunk-5JJ5KQUM.js.map → chunk-MS2JK4V7.js.map} +1 -1
  90. package/dist/{chunk-JRSLMZOT.js → chunk-OKGUDNDT.js} +37 -7
  91. package/dist/chunk-OKGUDNDT.js.map +1 -0
  92. package/dist/{chunk-DFZDL62S.js → chunk-OLMNDIAU.js} +14 -9
  93. package/dist/chunk-OLMNDIAU.js.map +1 -0
  94. package/dist/{chunk-3SUWLY3H.js → chunk-OQRB7JUS.js} +3 -3
  95. package/dist/{chunk-3SUWLY3H.js.map → chunk-OQRB7JUS.js.map} +1 -1
  96. package/dist/{chunk-TTITGVXV.js → chunk-PRCUGFXV.js} +3 -3
  97. package/dist/{chunk-TTITGVXV.js.map → chunk-PRCUGFXV.js.map} +1 -1
  98. package/dist/{chunk-MRS5YHPI.js → chunk-QBQITQAM.js} +3 -3
  99. package/dist/{chunk-MRS5YHPI.js.map → chunk-QBQITQAM.js.map} +1 -1
  100. package/dist/{chunk-PKGI5QG7.js → chunk-QWWDDU5Z.js} +274 -67
  101. package/dist/chunk-QWWDDU5Z.js.map +1 -0
  102. package/dist/{chunk-NKYNDLCB.js → chunk-R2U346ER.js} +3 -3
  103. package/dist/{chunk-NKYNDLCB.js.map → chunk-R2U346ER.js.map} +1 -1
  104. package/dist/{chunk-KVDXSEQH.js → chunk-R5ARWJGE.js} +104 -63
  105. package/dist/chunk-R5ARWJGE.js.map +1 -0
  106. package/dist/chunk-TLKM4M47.js +78 -0
  107. package/dist/chunk-TLKM4M47.js.map +1 -0
  108. package/dist/{chunk-NFECHLV6.js → chunk-TNWXGHLD.js} +3 -3
  109. package/dist/{chunk-NFECHLV6.js.map → chunk-TNWXGHLD.js.map} +1 -1
  110. package/dist/{chunk-H3KXUUYQ.js → chunk-VDBP6Y5M.js} +4 -4
  111. package/dist/{chunk-H3KXUUYQ.js.map → chunk-VDBP6Y5M.js.map} +1 -1
  112. package/dist/{chunk-XN7DAZB7.js → chunk-VJNTB4DN.js} +5 -5
  113. package/dist/chunk-VJNTB4DN.js.map +1 -0
  114. package/dist/{chunk-BSIHJZKN.js → chunk-XU7JET5Z.js} +107 -26
  115. package/dist/chunk-XU7JET5Z.js.map +1 -0
  116. package/dist/{chunk-LIS5KT2X.js → chunk-YCJ3PJNB.js} +5 -5
  117. package/dist/{chunk-LIS5KT2X.js.map → chunk-YCJ3PJNB.js.map} +1 -1
  118. package/dist/{chunk-VCLN2IUM.js → chunk-YCMZHL4T.js} +31 -27
  119. package/dist/chunk-YCMZHL4T.js.map +1 -0
  120. package/dist/{chunk-JS7DCCDA.js → chunk-YNUBJY3L.js} +4 -4
  121. package/dist/chunk-YNUBJY3L.js.map +1 -0
  122. package/dist/{chunk-S63H4HDH.js → chunk-YQEF36D5.js} +4 -4
  123. package/dist/{chunk-S63H4HDH.js.map → chunk-YQEF36D5.js.map} +1 -1
  124. package/dist/{chunk-FJYOQMXT.js → chunk-YV3YI3TA.js} +32 -16
  125. package/dist/chunk-YV3YI3TA.js.map +1 -0
  126. package/dist/cli/index.js +755 -533
  127. package/dist/cli/index.js.map +1 -1
  128. package/dist/cli/src/asset-feeds.d.ts.map +1 -1
  129. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  130. package/dist/cli/src/commands/cache.d.ts.map +1 -1
  131. package/dist/cli/src/commands/catalog.d.ts +28 -3
  132. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  133. package/dist/cli/src/commands/complete-resolvers.d.ts +1 -7
  134. package/dist/cli/src/commands/complete-resolvers.d.ts.map +1 -1
  135. package/dist/cli/src/commands/complete.d.ts.map +1 -1
  136. package/dist/cli/src/commands/diff.d.ts +3 -1
  137. package/dist/cli/src/commands/diff.d.ts.map +1 -1
  138. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  139. package/dist/cli/src/commands/library-index.d.ts +8 -0
  140. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  141. package/dist/cli/src/commands/library-publish.d.ts +7 -2
  142. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  143. package/dist/cli/src/commands/manage.d.ts.map +1 -1
  144. package/dist/cli/src/commands/outdated.d.ts +12 -2
  145. package/dist/cli/src/commands/outdated.d.ts.map +1 -1
  146. package/dist/cli/src/commands/project.d.ts +2 -2
  147. package/dist/cli/src/commands/publish-core.d.ts +21 -0
  148. package/dist/cli/src/commands/publish-core.d.ts.map +1 -1
  149. package/dist/cli/src/commands/skailify-lib.d.ts +18 -1
  150. package/dist/cli/src/commands/skailify-lib.d.ts.map +1 -1
  151. package/dist/cli/src/commands/source-manifest-publish.d.ts.map +1 -1
  152. package/dist/cli/src/commands/store.d.ts.map +1 -1
  153. package/dist/cli/src/commands/update.d.ts.map +1 -1
  154. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  155. package/dist/cli/src/paths.d.ts +1 -1
  156. package/dist/cli/src/paths.d.ts.map +1 -1
  157. package/dist/cli/src/store-auth.d.ts.map +1 -1
  158. package/dist/connectors/config.js +6 -5
  159. package/dist/connectors/index.js +19 -18
  160. package/dist/connectors-shared/index.js +2 -2
  161. package/dist/core/index.js +8 -7
  162. package/dist/core/manifest.js +2 -2
  163. package/dist/core/models.js +1 -1
  164. package/dist/core/publish-manifest.js +2 -2
  165. package/dist/core/ref.js +1 -1
  166. package/dist/core/runtime-assets.js +6 -5
  167. package/dist/core/src/asset-roots.d.ts +2 -12
  168. package/dist/core/src/asset-roots.d.ts.map +1 -1
  169. package/dist/core/src/cache-paths.d.ts +7 -3
  170. package/dist/core/src/cache-paths.d.ts.map +1 -1
  171. package/dist/core/src/index.d.ts +3 -3
  172. package/dist/core/src/index.d.ts.map +1 -1
  173. package/dist/core/src/lock.d.ts +27 -4
  174. package/dist/core/src/lock.d.ts.map +1 -1
  175. package/dist/core/src/models.d.ts +26 -6
  176. package/dist/core/src/models.d.ts.map +1 -1
  177. package/dist/core/src/repo-manager.d.ts.map +1 -1
  178. package/dist/core/src/settings.d.ts +2 -1
  179. package/dist/core/src/settings.d.ts.map +1 -1
  180. package/dist/core/src/store.d.ts.map +1 -1
  181. package/dist/core/src/workspace-config.d.ts.map +1 -1
  182. package/dist/core/store.js +2 -1
  183. package/dist/core/workspace-config.js +5 -4
  184. package/dist/deploy/index.js +8 -7
  185. package/dist/deploy/index.js.map +1 -1
  186. package/dist/discovery/index.js +5 -5
  187. package/dist/discovery/src/domains.d.ts +6 -1
  188. package/dist/discovery/src/domains.d.ts.map +1 -1
  189. package/dist/discovery/src/index.d.ts +1 -1
  190. package/dist/discovery/src/index.d.ts.map +1 -1
  191. package/dist/{ensure-sources-SYZO2HNP.js → ensure-sources-VX63EKY7.js} +18 -17
  192. package/dist/ensure-sources-VX63EKY7.js.map +1 -0
  193. package/dist/factory-assets/connectors/box.js +19 -18
  194. package/dist/factory-assets/connectors/deploy.js +19 -18
  195. package/dist/factory-assets/connectors/devserver.js +19 -18
  196. package/dist/factory-assets/connectors/flow/adapter.js +19 -18
  197. package/dist/factory-assets/connectors/flow/engine.js +9 -8
  198. package/dist/factory-assets/connectors/flow/run-flow.js +21 -20
  199. package/dist/factory-assets/connectors/flow.js +19 -18
  200. package/dist/factory-assets/connectors/git.js +19 -18
  201. package/dist/factory-assets/connectors/gmail.js +19 -18
  202. package/dist/factory-assets/connectors/googledrive.js +19 -18
  203. package/dist/factory-assets/connectors/local.js +19 -18
  204. package/dist/factory-assets/connectors/mattermost.js +19 -18
  205. package/dist/factory-assets/connectors/memory.js +19 -18
  206. package/dist/factory-assets/connectors/minio.js +19 -18
  207. package/dist/factory-assets/connectors/postgres.js +19 -18
  208. package/dist/factory-assets/connectors/s3.js +19 -18
  209. package/dist/factory-assets/connectors/sharepoint.js +19 -18
  210. package/dist/factory-assets/connectors/sqlite.js +19 -18
  211. package/dist/factory-assets/connectors/static-server.js +19 -18
  212. package/dist/factory-assets/connectors/tunnel.js +19 -18
  213. package/dist/factory-assets/connectors/webdav.js +19 -18
  214. package/dist/factory-assets/connectors/xstate-store.js +19 -18
  215. package/dist/factory-assets/connectors/xstate.js +19 -18
  216. package/dist/flows-PX53XFV7.js +25 -0
  217. package/dist/{flows-6MDMBQUZ.js.map → flows-PX53XFV7.js.map} +1 -1
  218. package/dist/{helpers-IMUCDNME.js → helpers-DF55G2YC.js} +18 -17
  219. package/dist/{helpers-IMUCDNME.js.map → helpers-DF55G2YC.js.map} +1 -1
  220. package/dist/library/index.js +12 -11
  221. package/dist/library/install.js +2 -2
  222. package/dist/library/src/config.d.ts +11 -9
  223. package/dist/library/src/config.d.ts.map +1 -1
  224. package/dist/library/src/index.d.ts +2 -2
  225. package/dist/library/src/index.d.ts.map +1 -1
  226. package/dist/library/src/local/db.d.ts.map +1 -1
  227. package/dist/library/src/local/library-manager.d.ts +7 -0
  228. package/dist/library/src/local/library-manager.d.ts.map +1 -1
  229. package/dist/library/src/local/library.d.ts +5 -4
  230. package/dist/library/src/local/library.d.ts.map +1 -1
  231. package/dist/library/src/local/schema.d.ts +2 -0
  232. package/dist/library/src/local/schema.d.ts.map +1 -1
  233. package/dist/library/src/local/sidecar-paths.d.ts.map +1 -1
  234. package/dist/library/src/local/store-paths.d.ts.map +1 -1
  235. package/dist/library/src/remote/cache.d.ts.map +1 -1
  236. package/dist/library/src/sync/git-driver.d.ts +34 -0
  237. package/dist/library/src/sync/git-driver.d.ts.map +1 -1
  238. package/dist/{library-publish-XAIAHKRL.js → library-publish-2PNWJJOY.js} +95 -41
  239. package/dist/library-publish-2PNWJJOY.js.map +1 -0
  240. package/dist/open-library-SUVOMIWZ.js +38 -0
  241. package/dist/{open-library-6N3XZ2XL.js.map → open-library-SUVOMIWZ.js.map} +1 -1
  242. package/dist/paths-W4LDORQQ.js +21 -0
  243. package/dist/{paths-4MTICP3T.js.map → paths-W4LDORQQ.js.map} +1 -1
  244. package/dist/{plugin-store-GQ4WQZJ2.js → plugin-store-D45CREMJ.js} +10 -9
  245. package/dist/plugin-store-D45CREMJ.js.map +1 -0
  246. package/dist/project-RTLVOXUU.js +34 -0
  247. package/dist/{project-HESTMGPU.js.map → project-RTLVOXUU.js.map} +1 -1
  248. package/dist/resolver/index.js +9 -8
  249. package/dist/runner/index.js +28 -27
  250. package/dist/runner/src/composition/bootstrap.d.ts +1 -1
  251. package/dist/runner/src/composition/bootstrap.d.ts.map +1 -1
  252. package/dist/runner/src/prompt-turn-queue.d.ts +27 -4
  253. package/dist/runner/src/prompt-turn-queue.d.ts.map +1 -1
  254. package/dist/runner/src/runtime-session-emit.d.ts +2 -1
  255. package/dist/runner/src/runtime-session-emit.d.ts.map +1 -1
  256. package/dist/runner/src/serve.d.ts.map +1 -1
  257. package/dist/sdk/asset-manager.js +15 -14
  258. package/dist/sdk/bridge.js +15 -14
  259. package/dist/sdk/core.js +8 -7
  260. package/dist/sdk/flow.js +9 -8
  261. package/dist/sdk/index.js +28 -27
  262. package/dist/sdk/index.js.map +1 -1
  263. package/dist/sdk/resolver.js +9 -8
  264. package/dist/sdk/runner.js +28 -27
  265. package/dist/sdk/session.js +2 -2
  266. package/dist/sdk/store.js +1 -1
  267. package/dist/sdk/types.js +1 -1
  268. package/dist/secrets/index.js +18 -1
  269. package/dist/secrets/src/providers/local.d.ts.map +1 -1
  270. package/dist/session/index.js +2 -2
  271. package/dist/session/src/dispatcher.d.ts.map +1 -1
  272. package/dist/{setup-PQG5DH5Z.js → setup-ZA7VZL72.js} +25 -24
  273. package/dist/setup-ZA7VZL72.js.map +1 -0
  274. package/dist/skills-R3RPIPWP.js +25 -0
  275. package/dist/{skills-JHUY4DFE.js.map → skills-R3RPIPWP.js.map} +1 -1
  276. package/dist/{source-PNYNVVPM.js → source-Y5YQ7M53.js} +21 -20
  277. package/dist/{source-PNYNVVPM.js.map → source-Y5YQ7M53.js.map} +1 -1
  278. package/dist/{source-manifest-publish-6O6H4T2P.js → source-manifest-publish-RZIJNRIW.js} +24 -25
  279. package/dist/source-manifest-publish-RZIJNRIW.js.map +1 -0
  280. package/dist/store/index.js +1 -1
  281. package/dist/store/src/store.d.ts +9 -0
  282. package/dist/store/src/store.d.ts.map +1 -1
  283. package/dist/store/src/types.d.ts +17 -0
  284. package/dist/store/src/types.d.ts.map +1 -1
  285. package/dist/tui/index.js +28 -27
  286. package/dist/tui/index.js.map +1 -1
  287. package/dist/types/index.js +1 -1
  288. package/dist/types/manifests.js +1 -1
  289. package/dist/types/src/events.d.ts +28 -3
  290. package/dist/types/src/events.d.ts.map +1 -1
  291. package/dist/types/src/index.d.ts +1 -1
  292. package/dist/types/src/index.d.ts.map +1 -1
  293. package/dist/types/src/manifests/index.d.ts +1 -1
  294. package/dist/types/src/manifests/index.d.ts.map +1 -1
  295. package/dist/types/src/manifests/skill.d.ts +10 -0
  296. package/dist/types/src/manifests/skill.d.ts.map +1 -1
  297. package/dist/types/src/protocol.d.ts +2 -0
  298. package/dist/types/src/protocol.d.ts.map +1 -1
  299. package/dist/types/src/version.d.ts +12 -1
  300. package/dist/types/src/version.d.ts.map +1 -1
  301. package/dist/workspace-plugin/adapters/mcp.js +15 -14
  302. package/dist/workspace-plugin/adapters/omp.js +7 -7
  303. package/dist/workspace-plugin/index.js +1 -1
  304. package/package.json +1 -1
  305. package/dist/asset-feeds-SJELMLNK.js.map +0 -1
  306. package/dist/chunk-2D3C4AJP.js.map +0 -1
  307. package/dist/chunk-422WJ2QC.js +0 -158
  308. package/dist/chunk-422WJ2QC.js.map +0 -1
  309. package/dist/chunk-6BEGKO2Q.js.map +0 -1
  310. package/dist/chunk-BSIHJZKN.js.map +0 -1
  311. package/dist/chunk-DFZDL62S.js.map +0 -1
  312. package/dist/chunk-FJYOQMXT.js.map +0 -1
  313. package/dist/chunk-JRSLMZOT.js.map +0 -1
  314. package/dist/chunk-JS7DCCDA.js.map +0 -1
  315. package/dist/chunk-KIFJWSNC.js.map +0 -1
  316. package/dist/chunk-KVDXSEQH.js.map +0 -1
  317. package/dist/chunk-LVRKJW53.js.map +0 -1
  318. package/dist/chunk-MDBAEEY5.js.map +0 -1
  319. package/dist/chunk-PKGI5QG7.js.map +0 -1
  320. package/dist/chunk-QKXDRBLL.js.map +0 -1
  321. package/dist/chunk-VCLN2IUM.js.map +0 -1
  322. package/dist/chunk-XN7DAZB7.js.map +0 -1
  323. package/dist/ensure-sources-SYZO2HNP.js.map +0 -1
  324. package/dist/flows-6MDMBQUZ.js +0 -24
  325. package/dist/library-publish-XAIAHKRL.js.map +0 -1
  326. package/dist/open-library-6N3XZ2XL.js +0 -37
  327. package/dist/paths-4MTICP3T.js +0 -20
  328. package/dist/plugin-store-GQ4WQZJ2.js.map +0 -1
  329. package/dist/project-HESTMGPU.js +0 -33
  330. package/dist/setup-PQG5DH5Z.js.map +0 -1
  331. package/dist/skills-JHUY4DFE.js +0 -24
  332. package/dist/source-manifest-publish-6O6H4T2P.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../store/src/resource-client.ts","../store/src/store.ts"],"names":[],"mappings":"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","file":"chunk-OKGUDNDT.js","sourcesContent":["import type {\n AgentEvent,\n ConnectorContent,\n ConnectorEntry,\n ConnectorInfo,\n ConnectorOperation,\n ConnectorResponseEvent,\n ConnectorResponseFailureCode,\n ConnectorStat,\n ConnectorStatusEvent,\n ListOptions,\n MountInfo,\n ReadOptions,\n SearchOptions,\n StatOptions,\n} from \"@skaile/workspaces/types\";\nimport type {\n ConnectorStatus,\n ResourceClientSnapshot,\n StoreTransport,\n SubscribableStore,\n} from \"./types.js\";\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\n\n/**\n * Rejection for a `resource_response` that carried an `error`. `code` is the\n * runner's machine-readable failure class, absent from runners older than\n * protocol 4.2.0.\n */\nexport class ResourceRequestError extends Error {\n readonly code: ConnectorResponseFailureCode | undefined;\n\n constructor(message: string, code?: ConnectorResponseFailureCode) {\n super(message);\n this.name = \"ResourceRequestError\";\n this.code = code;\n }\n}\n\n/**\n * Lazy resource browser for agent connectors.\n *\n * Provides a reactive list of connected mounts and connectors, and\n * request/response methods for browsing connector contents. Shares\n * the same transport (`send` + `onEvent`) as `AgentStore`.\n * @docLink packages/store/concepts#resource-client\n */\nexport class ResourceClient implements SubscribableStore<ResourceClientSnapshot> {\n private readonly _send: StoreTransport[\"send\"];\n private _mounts: readonly MountInfo[] = [];\n private _connectors: readonly ConnectorInfo[] = [];\n\n /** Live connection status per connector, keyed by connector ID. Updated by connector_status events. */\n connectorStatus: Map<string, ConnectorStatus> = new Map();\n\n private _snapshot: ResourceClientSnapshot | null = null;\n private readonly _listeners = new Set<() => void>();\n private readonly _pendingRequests = new Map<\n string,\n {\n resolve: (event: ConnectorResponseEvent) => void;\n reject: (error: Error) => void;\n timer: ReturnType<typeof setTimeout>;\n }\n >();\n private readonly _unsubEvent: () => void;\n\n /**\n * @param transport - Shared transport (same instance as the AgentStore for this session).\n */\n constructor(transport: StoreTransport) {\n this._send = transport.send;\n this._unsubEvent = transport.onEvent((event) => this._handleEvent(event));\n }\n\n // -- Reactive state --------------------------------------------------------\n\n /** Mounts available in this session, populated from `resources_available` events. */\n get mounts(): readonly MountInfo[] {\n return this._mounts;\n }\n\n /** Tool-based connectors available in this session, populated from `resources_available` events. */\n get connectors(): readonly ConnectorInfo[] {\n return this._connectors;\n }\n\n // -- Resource operations ---------------------------------------------------\n\n /**\n * List directory entries at the given path within a connector.\n *\n * @param connectorId - ID of the connector to query.\n * @param path - Directory path to list. Omit for the connector root.\n * @param opts - Optional pagination and filter options.\n * @returns Array of entries (files, directories, etc.) at the given path.\n * @throws If the request times out or the connector returns an error.\n */\n async list(connectorId: string, path?: string, opts?: ListOptions): Promise<ConnectorEntry[]> {\n const response = await this._request(connectorId, \"list\", path, opts);\n return (response.data as ConnectorEntry[]) ?? [];\n }\n\n /**\n * Read the content of a single resource.\n *\n * @param connectorId - ID of the connector to query.\n * @param path - Full path to the resource within the connector.\n * @param opts - `{ encoding: \"binary\" }` asks a filesystem mount for base64\n * of the bytes instead of text guessed from a NUL sniff (protocol 4.6.0;\n * an older runner ignores it).\n * @returns The resource content object.\n * @throws If the request times out or the connector returns an error.\n */\n async read(connectorId: string, path: string, opts?: ReadOptions): Promise<ConnectorContent> {\n const response = await this._request(connectorId, \"read\", path, opts);\n return response.data as ConnectorContent;\n }\n\n /**\n * Write content to a resource, creating it if it does not exist.\n *\n * @param connectorId - ID of the connector to write to.\n * @param path - Full path to the resource within the connector.\n * @param content - Content to write.\n * @throws If the request times out or the connector returns an error.\n */\n async write(connectorId: string, path: string, content: ConnectorContent): Promise<void> {\n await this._request(connectorId, \"write\", path, undefined, content);\n }\n\n /**\n * Delete a resource from a connector.\n *\n * @param connectorId - ID of the connector to delete from.\n * @param path - Full path to the resource within the connector.\n * @throws If the request times out or the connector returns an error.\n */\n async delete(connectorId: string, path: string): Promise<void> {\n await this._request(connectorId, \"delete\", path);\n }\n\n /**\n * Full-text search within a connector.\n *\n * @param connectorId - ID of the connector to search.\n * @param query - Search query string.\n * @param opts - Optional search options (e.g. path prefix, result limit).\n * @returns Matching entries, ordered by relevance as determined by the connector.\n * @throws If the request times out or the connector returns an error.\n */\n async search(\n connectorId: string,\n query: string,\n opts?: SearchOptions,\n ): Promise<ConnectorEntry[]> {\n const response = await this._request(connectorId, \"search\", query, opts);\n return (response.data as ConnectorEntry[]) ?? [];\n }\n\n /**\n * Create an empty directory on a filesystem mount, parents included.\n *\n * @param connectorId - ID of the mount.\n * @param path - Directory path within the mount.\n * @throws {ResourceRequestError} with `code: \"already_exists\"` if something\n * is already at `path`; also if the target is not a filesystem mount or the\n * runner predates protocol 4.2.0 (then `code` is absent).\n */\n async mkdir(connectorId: string, path: string): Promise<void> {\n await this._request(connectorId, \"mkdir\", path);\n }\n\n /**\n * Describe one path on a filesystem mount; with `opts.recursive`, a\n * directory also carries capped recursive totals.\n *\n * @param connectorId - ID of the mount.\n * @param path - Path within the mount; omit for the mount root.\n * @param opts - Optional stat options.\n * @throws If the path does not exist, the target is not a filesystem mount,\n * or the runner predates protocol 4.2.0.\n */\n async stat(connectorId: string, path?: string, opts?: StatOptions): Promise<ConnectorStat> {\n const response = await this._request(connectorId, \"stat\", path, opts);\n return response.data as ConnectorStat;\n }\n\n // -- useSyncExternalStore interface ----------------------------------------\n\n /**\n * Register a change listener. Called after every resource availability change.\n *\n * Conforms to the `subscribe` parameter of React's `useSyncExternalStore`.\n *\n * @param listener - Callback invoked whenever mounts or connectors change.\n * @returns Unsubscribe function — call to stop receiving notifications.\n */\n subscribe = (listener: () => void): (() => void) => {\n this._listeners.add(listener);\n return () => this._listeners.delete(listener);\n };\n\n /**\n * Return the current immutable resource snapshot.\n *\n * A new object is produced lazily after each `resources_available` event.\n * Conforms to the `getSnapshot` parameter of React's `useSyncExternalStore`.\n */\n getSnapshot = (): ResourceClientSnapshot => {\n if (!this._snapshot) {\n this._snapshot = { mounts: this._mounts, connectors: this._connectors };\n }\n return this._snapshot;\n };\n\n // -- Connector config mutations --------------------------------------------\n\n /**\n * Send a `connector_config` add command to wire a new connector at runtime,\n * without restarting the session. The runner receives this command and\n * calls `ConnectorManager.connect()`, which fires a `connector_status` event\n * back to the store once the connector is live.\n *\n * @param declaration - Connector declaration (id, driver, access level, options).\n */\n addConnector(declaration: {\n id: string;\n driver: string;\n access?: \"read-only\" | \"read-write\";\n options?: Record<string, unknown>;\n }): void {\n this._send({ type: \"connector_config\", action: \"add\", declaration });\n }\n\n /**\n * Send a `connector_config` remove command to disconnect a connector by ID\n * without restarting the session.\n *\n * @param connectorId - ID of the connector to disconnect and remove.\n */\n removeConnector(connectorId: string): void {\n this._send({ type: \"connector_config\", action: \"remove\", connectorId });\n }\n\n /**\n * Send a `connector_config` refresh command to reconnect all configured\n * connectors (e.g. after a credentials change).\n */\n refreshConnectors(): void {\n this._send({ type: \"connector_config\", action: \"refresh\" });\n }\n\n // -- Cleanup ---------------------------------------------------------------\n\n /**\n * Unsubscribe from transport events, reject all pending requests, and\n * clear all change listeners.\n *\n * All in-flight resource requests will reject\n * with `\"ResourceClient disposed\"`.\n */\n dispose(): void {\n this._unsubEvent();\n for (const [, pending] of this._pendingRequests) {\n clearTimeout(pending.timer);\n pending.reject(new Error(\"ResourceClient disposed\"));\n }\n this._pendingRequests.clear();\n this._listeners.clear();\n }\n\n // -- Internal --------------------------------------------------------------\n\n private _handleEvent(event: AgentEvent): void {\n if (event.type === \"connector_status\") {\n const e = event as ConnectorStatusEvent;\n const existing = this.connectorStatus.get(e.connectorId);\n const next = new Map(this.connectorStatus);\n next.set(e.connectorId, {\n id: e.connectorId,\n driver:\n existing?.driver ?? this._connectors.find((c) => c.id === e.connectorId)?.driver ?? \"\",\n state: e.status,\n ...(e.error !== undefined ? { error: e.error } : {}),\n ...(e.errorKind !== undefined ? { errorKind: e.errorKind } : {}),\n ...(e.latencyMs !== undefined ? { latencyMs: e.latencyMs } : {}),\n lastUpdated: new Date(),\n });\n this.connectorStatus = next;\n for (const listener of this._listeners) {\n listener();\n }\n return;\n }\n\n if (event.type === \"resources_available\") {\n this._mounts = event.mounts;\n this._connectors = event.connectors;\n this._snapshot = null;\n for (const listener of this._listeners) {\n listener();\n }\n return;\n }\n\n if (event.type === \"resource_response\") {\n const pending = this._pendingRequests.get(event.requestId);\n if (!pending) return;\n\n clearTimeout(pending.timer);\n this._pendingRequests.delete(event.requestId);\n\n if (event.error) {\n pending.reject(new ResourceRequestError(event.error, event.code));\n } else {\n pending.resolve(event);\n }\n }\n }\n\n private _request(\n connectorId: string,\n operation: ConnectorOperation,\n path?: string,\n options?: ListOptions | SearchOptions | StatOptions | ReadOptions,\n content?: ConnectorContent,\n ): Promise<ConnectorResponseEvent> {\n const requestId = crypto.randomUUID();\n\n return new Promise<ConnectorResponseEvent>((resolve, reject) => {\n const timer = setTimeout(() => {\n this._pendingRequests.delete(requestId);\n reject(\n new Error(\n `Resource request timed out after ${DEFAULT_TIMEOUT_MS}ms: ${operation} ${connectorId}${path ? ` ${path}` : \"\"}`,\n ),\n );\n }, DEFAULT_TIMEOUT_MS);\n\n this._pendingRequests.set(requestId, { resolve, reject, timer });\n\n this._send({\n type: \"resource_request\",\n requestId,\n connectorId,\n operation,\n ...(path !== undefined ? { path } : {}),\n ...(options ? { options } : {}),\n ...(content ? { content } : {}),\n });\n });\n }\n}\n","import type {\n AgentCommand,\n AgentEvent,\n AgentPhase,\n Capability,\n IncompatibleProtocolEvent,\n Message,\n ProtocolInfoEvent,\n QuestionEvent,\n RenderInvokedEvent,\n} from \"@skaile/workspaces/types\";\nimport type {\n AgentClientLike,\n AgentStoreOptions,\n AgentStoreSnapshot,\n ConnectionStatus,\n SubscribableStore,\n} from \"./types.js\";\n\nconst DEFAULT_PAGE_SIZE = 50;\n\n/** Conservative equality for plain JSON data; unsupported or unverifiable values fail open. */\nfunction isSameJsonValue<T>(a: T | undefined, b: T, conservativeCommandInput = false): boolean {\n const aObjects = new WeakSet<object>();\n const bObjects = new WeakSet<object>();\n\n const compare = (left: unknown, right: unknown): boolean => {\n if (left === null || right === null) return left === right;\n if (typeof left !== typeof right) return false;\n\n switch (typeof left) {\n case \"string\":\n case \"boolean\":\n return left === right;\n case \"number\":\n return (\n Number.isFinite(left) &&\n Number.isFinite(right) &&\n !Object.is(left, -0) &&\n !Object.is(right, -0) &&\n left === right\n );\n case \"object\":\n break;\n default:\n return false;\n }\n\n const leftObject = left as object;\n const rightObject = right as object;\n if (aObjects.has(leftObject) || bObjects.has(rightObject)) return false;\n if (conservativeCommandInput) {\n if (leftObject === rightObject || bObjects.has(leftObject) || aObjects.has(rightObject)) {\n return false;\n }\n }\n aObjects.add(leftObject);\n bObjects.add(rightObject);\n\n const leftIsArray = Array.isArray(leftObject);\n if (leftIsArray !== Array.isArray(rightObject)) return false;\n\n const leftPrototype = Object.getPrototypeOf(leftObject);\n const rightPrototype = Object.getPrototypeOf(rightObject);\n const leftHasPlainPrototype = leftIsArray\n ? leftPrototype === Array.prototype\n : leftPrototype === Object.prototype || leftPrototype === null;\n const rightHasPlainPrototype = leftIsArray\n ? rightPrototype === Array.prototype\n : rightPrototype === Object.prototype || rightPrototype === null;\n if (\n !leftHasPlainPrototype ||\n !rightHasPlainPrototype ||\n leftPrototype !== rightPrototype ||\n !Object.isExtensible(leftObject) ||\n !Object.isExtensible(rightObject)\n ) {\n return false;\n }\n\n const leftKeys = Reflect.ownKeys(leftObject);\n const rightKeys = Reflect.ownKeys(rightObject);\n if (\n leftKeys.length !== rightKeys.length ||\n leftKeys.some((key) => typeof key !== \"string\") ||\n rightKeys.some((key) => typeof key !== \"string\")\n ) {\n return false;\n }\n\n if (leftIsArray) {\n const leftLengthDescriptor = Object.getOwnPropertyDescriptor(leftObject, \"length\");\n const rightLengthDescriptor = Object.getOwnPropertyDescriptor(rightObject, \"length\");\n const leftLength = leftLengthDescriptor?.value;\n const rightLength = rightLengthDescriptor?.value;\n if (\n !leftLengthDescriptor ||\n !(\"value\" in leftLengthDescriptor) ||\n !leftLengthDescriptor.writable ||\n leftLengthDescriptor.enumerable ||\n leftLengthDescriptor.configurable ||\n !rightLengthDescriptor ||\n !(\"value\" in rightLengthDescriptor) ||\n !rightLengthDescriptor.writable ||\n rightLengthDescriptor.enumerable ||\n rightLengthDescriptor.configurable ||\n typeof leftLength !== \"number\" ||\n leftLength !== rightLength ||\n leftKeys.length !== leftLength + 1\n ) {\n return false;\n }\n\n for (let index = 0; index < leftLength; index++) {\n const key = String(index);\n const leftDescriptor = Object.getOwnPropertyDescriptor(leftObject, key);\n const rightDescriptor = Object.getOwnPropertyDescriptor(rightObject, key);\n if (\n !leftDescriptor?.enumerable ||\n !(\"value\" in leftDescriptor) ||\n !leftDescriptor.writable ||\n !leftDescriptor.configurable ||\n !rightDescriptor?.enumerable ||\n !(\"value\" in rightDescriptor) ||\n !rightDescriptor.writable ||\n !rightDescriptor.configurable ||\n !compare(leftDescriptor.value, rightDescriptor.value)\n ) {\n return false;\n }\n }\n return true;\n }\n\n for (let index = 0; index < leftKeys.length; index++) {\n const leftKey = leftKeys[index] as string;\n const rightKey = rightKeys[index] as string;\n if (leftKey !== rightKey) return false;\n\n const leftDescriptor = Object.getOwnPropertyDescriptor(leftObject, leftKey);\n const rightDescriptor = Object.getOwnPropertyDescriptor(rightObject, rightKey);\n if (\n !leftDescriptor?.enumerable ||\n !(\"value\" in leftDescriptor) ||\n !leftDescriptor.writable ||\n !leftDescriptor.configurable ||\n !rightDescriptor?.enumerable ||\n !(\"value\" in rightDescriptor) ||\n !rightDescriptor.writable ||\n !rightDescriptor.configurable ||\n !compare(leftDescriptor.value, rightDescriptor.value)\n ) {\n return false;\n }\n }\n return true;\n };\n\n try {\n const same = compare(a, b);\n if (!same || !conservativeCommandInput) return same;\n structuredClone(a);\n structuredClone(b);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Headless reactive store for agent conversation state.\n *\n * Framework-agnostic — works with React (`useSyncExternalStore`),\n * Vue (`shallowRef` + `subscribe`), or any other UI framework.\n *\n * Accepts a minimal transport interface (`send` + `onEvent`) so it works\n * with WebSocket, tRPC, SSE, or any other delivery mechanism.\n * @docLink packages/store/concepts#agent-store\n */\nexport class AgentStore implements SubscribableStore<AgentStoreSnapshot> {\n private readonly _options: AgentStoreOptions;\n private _messages: Message[];\n private _streamingText = \"\";\n private _cancelledText = \"\";\n private _status: ConnectionStatus = \"idle\";\n private _phase: AgentPhase = \"idle\";\n private _pendingQuestion: AgentStoreSnapshot[\"pendingQuestion\"] = null;\n /**\n * Unanswered sub-questions of the parked ask, oldest first. Drivers resume\n * only once every one has an answer; `_pendingQuestion` is its last entry.\n */\n private _openQuestions: QuestionEvent[] = [];\n /** Every sub-question text of the parked ask, answered or not. */\n private _askQuestions = new Set<string>();\n /**\n * Own unnamed replies whose runner echo has not arrived yet. Best effort: a\n * reply the driver rejects is never echoed, and its count lingers until the\n * ask ends.\n */\n private _unnamedEchoesOwed = 0;\n private _error: AgentStoreSnapshot[\"error\"] = null;\n private _isAllLoaded: boolean;\n /** Prompts a cancel dropped before they ran; new Set on every change. */\n private _notSentPromptIds: ReadonlySet<string> = new Set();\n private _seq: number;\n private _streamingFlushed = true;\n /** Shared state per store namespace — new Map instance on every mutation. */\n private _sharedState: Map<string, Record<string, unknown>> = new Map();\n /** Protocol v2 capability registry — new Map instance on every mutation. */\n private _capabilities: Map<string, Capability> = new Map();\n /** Protocol v2 active render invocations — new Map instance on every mutation. */\n private _activeRenderInvocations: Map<string, RenderInvokedEvent> = new Map();\n /** Protocol v2 — most recent `protocol_info` event from the runner. */\n private _protocolInfo: ProtocolInfoEvent | null = null;\n /** Protocol v2 — latest incompatible-protocol notice. */\n private _incompatibleProtocol: IncompatibleProtocolEvent | null = null;\n\n private _snapshot: AgentStoreSnapshot | null = null;\n private readonly _listeners = new Set<() => void>();\n private readonly _unsubEvent: () => void;\n private readonly _unsubStatus: (() => void) | undefined;\n\n /**\n * @param options - Store configuration including transport and optional pagination support.\n */\n constructor(options: AgentStoreOptions) {\n this._options = options;\n this._messages = options.initialMessages ? [...options.initialMessages] : [];\n this._isAllLoaded = !options.loadMessages;\n this._seq = this._messages.reduce((max, m) => Math.max(max, m.seq), 0);\n\n this._unsubEvent = options.onEvent((event) => this._handleEvent(event));\n this._unsubStatus = options.onStatusChange?.((status) => this.setStatus(status));\n }\n\n // -- Reactive state --------------------------------------------------------\n\n /** Accumulated conversation messages, oldest first. */\n get messages(): readonly Message[] {\n return this._messages;\n }\n\n /** Text currently streaming from the agent. Empty when not streaming. */\n get streamingText(): string {\n return this._streamingText;\n }\n\n /** Current connection lifecycle state. */\n get status(): ConnectionStatus {\n return this._status;\n }\n\n /** Current agent execution phase (e.g. `\"idle\"`, `\"thinking\"`, `\"executing\"`). */\n get phase(): AgentPhase {\n return this._phase;\n }\n\n /** The pending question the agent is waiting for the user to answer, or null. */\n get pendingQuestion(): AgentStoreSnapshot[\"pendingQuestion\"] {\n return this._pendingQuestion;\n }\n\n /** Most recent error, or null when no error is active. */\n get error(): AgentStoreSnapshot[\"error\"] {\n return this._error;\n }\n\n /** Partial text that was visible when the user cancelled. Empty when not cancelled. */\n get cancelledText(): string {\n return this._cancelledText;\n }\n\n /** True when there are no more older messages to load via pagination. */\n get isAllLoaded(): boolean {\n return this._isAllLoaded;\n }\n\n /** `messageId`s of prompts a cancel dropped before they ran. */\n get notSentPromptIds(): ReadonlySet<string> {\n return this._notSentPromptIds;\n }\n\n /**\n * Whether `message` is a prompt a cancel dropped before it ran, so the UI\n * shows it as \"Not sent\". Matches on the prompt payload's `messageId`.\n */\n isPromptNotSent(message: Message): boolean {\n const payload = message.payload as { type: string; messageId?: unknown };\n return (\n payload.type === \"prompt\" &&\n typeof payload.messageId === \"string\" &&\n this._notSentPromptIds.has(payload.messageId)\n );\n }\n\n // -- Commands --------------------------------------------------------------\n\n /**\n * Send a user prompt to the agent and optimistically update local state.\n *\n * Clears any previous error and cancelled text, sets phase to `\"thinking\"`,\n * and appends the prompt as a local message before forwarding to the agent.\n *\n * @param text - The user's prompt text.\n */\n prompt(text: string): void {\n // A prompt sent mid-turn (sender interjecting while the agent streams) is a\n // boundary: finalize the in-flight text before this prompt so the two don't\n // merge into one bubble. No-op at turn start (nothing streaming).\n this._flushStreaming();\n this._error = null;\n this._cancelledText = \"\";\n this._streamingFlushed = false;\n // A free-form prompt abandons any unanswered question: the turn it belonged\n // to is over. Left set, it would gate every status of the new turn.\n this._setOpenQuestions([]);\n this._phase = \"thinking\";\n const userId = this._options.userId;\n if (userId) {\n // The local message id doubles as the receipt token, so a drop report\n // for this prompt finds its message.\n const id = crypto.randomUUID();\n const command = { type: \"prompt\", prompt: text, messageId: id, senderId: userId } as const;\n this._appendMessage(command, \"user\", id);\n this._options.send(command);\n } else {\n this._appendMessage({ type: \"prompt\", prompt: text }, \"user\");\n this._options.send({ type: \"prompt\", prompt: text });\n }\n this._notify();\n }\n\n /**\n * Send a reply to the agent's pending question.\n *\n * Closes the answered sub-question locally before forwarding the reply command.\n *\n * @param answer - The user's answer text.\n * @param question - The sub-question being answered, verbatim from its\n * `question` event. Required for correctness in hosts that surface several\n * queued questions at once ({@link pendingQuestion} tracks only the latest,\n * so those hosts drive this from their own message history): without it the\n * agent files the answer under its next unanswered sub-question, which\n * mismatches any non-sequential reply.\n * @param requestId - Exact identity from the rendered question; never inferred from pending state.\n *\n * A multi-question ask stays parked until every sub-question has an answer:\n * until the last one, the phase stays idle and {@link pendingQuestion} moves\n * to the latest sub-question still open.\n */\n reply(answer: string, question?: string, requestId?: string): void {\n // A reply to a stale card must not clear a newer request in this client.\n if (this._pendingQuestion?.requestId && this._pendingQuestion.requestId !== requestId) return;\n if (this._openQuestions.length > 0) {\n // Same slot rule as the drivers: a name from this ask binds to its own\n // sub-question (re-answering a closed one closes nothing else), anything\n // else fills the oldest open one.\n const known = question !== undefined && this._askQuestions.has(question);\n const index = known ? this._openIndexOf(question) : 0;\n if (index !== -1) {\n this._setOpenQuestions(this._openQuestions.filter((_, i) => i !== index));\n }\n if (question === undefined && this._openQuestions.length > 0) this._unnamedEchoesOwed++;\n }\n // Answering the last open question resumes the agent turn — restore the\n // busy phase (mirrors prompt()) so the thinking indicator reappears at once\n // rather than after the agent's first resumed event lands.\n if (this._openQuestions.length === 0) this._phase = \"thinking\";\n const command = {\n type: \"reply\",\n answer,\n ...(question !== undefined ? { question } : {}),\n ...(requestId !== undefined ? { requestId } : {}),\n } as const;\n this._appendMessage(command, \"user\");\n this._options.send(command);\n this._notify();\n }\n\n /**\n * Cancel the current agent turn.\n *\n * Preserves partial streaming text in {@link cancelledText} so the UI can\n * display it. Clears streaming state, sets phase to `\"cancelling\"` (not\n * yet confirmed idle — see {@link AgentPhase}), and sends a `cancel`\n * command to the agent.\n */\n cancel(): void {\n // Preserve partial streaming text so the UI can still display it\n this._cancelledText = this._streamingText;\n this._streamingText = \"\";\n this._streamingFlushed = true;\n this._phase = \"cancelling\";\n const userId = this._options.userId;\n this._options.send(userId ? { type: \"cancel\", senderId: userId } : { type: \"cancel\" });\n this._notify();\n }\n\n /**\n * Update shared state for a store namespace.\n *\n * Sends a `state_update` command to the agent and optimistically\n * updates local state so the change is reflected immediately.\n *\n * @param store - Store namespace (e.g. \"app\", \"component:render-123\").\n * @param state - Full state snapshot (replaces previous).\n */\n updateState(store: string, state: Record<string, unknown>): void {\n this._options.send({ type: \"state_update\", store, state });\n if (isSameJsonValue(this._sharedState.get(store), state, true)) return;\n // Optimistic local update\n this._sharedState = new Map(this._sharedState);\n this._sharedState.set(store, state);\n this._notify();\n }\n\n /**\n * Send an arbitrary command to the agent.\n *\n * Use this for commands that don't have a dedicated convenience method\n * (e.g. `ui_interaction`). No local state changes — the command is\n * forwarded as-is to the transport.\n *\n * @param cmd - The command to send.\n */\n send(cmd: AgentCommand): void {\n this._options.send(cmd);\n }\n\n /**\n * Load the previous page of messages and prepend them to the current list.\n *\n * No-op when `loadMessages` was not provided at construction time or when\n * all history has already been loaded ({@link isAllLoaded} is true).\n * Sets {@link isAllLoaded} to true once the server returns fewer messages\n * than the configured page size.\n */\n async loadPreviousMessages(): Promise<void> {\n if (!this._options.loadMessages || this._isAllLoaded) return;\n\n const pageSize = this._options.pageSize ?? DEFAULT_PAGE_SIZE;\n const before = this._messages.length > 0 ? this._messages[0].seq : undefined;\n const older = await this._options.loadMessages({ before, limit: pageSize });\n\n if (older.length < pageSize) this._isAllLoaded = true;\n\n const existingIds = new Set(this._messages.map((m) => m.id));\n const unique = older.filter((m) => !existingIds.has(m.id));\n this._messages = [...unique, ...this._messages];\n\n this._notify();\n }\n\n // -- External control ------------------------------------------------------\n\n /**\n * Programmatically update the connection status.\n *\n * Called by transport wrappers that cannot use the `onStatusChange`\n * callback (e.g. tRPC subscriptions that track status externally).\n *\n * Writing the status the store already holds is a no-op: it neither rotates\n * the snapshot nor notifies listeners.\n *\n * @param status - The new connection status.\n */\n setStatus(status: ConnectionStatus): void {\n if (this._status === status) return;\n this._status = status;\n this._notify();\n }\n\n // -- useSyncExternalStore interface ----------------------------------------\n\n /**\n * Register a change listener. Called synchronously after every state change.\n *\n * Conforms to the `subscribe` parameter of React's `useSyncExternalStore`.\n *\n * @param listener - Callback invoked whenever state changes.\n * @returns Unsubscribe function — call to stop receiving notifications.\n */\n subscribe = (listener: () => void): (() => void) => {\n this._listeners.add(listener);\n return () => this._listeners.delete(listener);\n };\n\n /**\n * Return the current immutable state snapshot.\n *\n * A new object is produced lazily on the first call after each state change.\n * Subsequent calls return the same cached object until the next change.\n * Conforms to the `getSnapshot` parameter of React's `useSyncExternalStore`.\n */\n getSnapshot = (): AgentStoreSnapshot => {\n if (!this._snapshot) {\n this._snapshot = {\n messages: this._messages,\n streamingText: this._streamingText,\n cancelledText: this._cancelledText,\n status: this._status,\n phase: this._phase,\n pendingQuestion: this._pendingQuestion,\n error: this._error,\n isAllLoaded: this._isAllLoaded,\n notSentPromptIds: this._notSentPromptIds,\n sharedState: this._sharedState,\n capabilities: this._capabilities,\n activeRenderInvocations: this._activeRenderInvocations,\n protocolInfo: this._protocolInfo,\n incompatibleProtocol: this._incompatibleProtocol,\n };\n }\n return this._snapshot;\n };\n\n // -- Cleanup ---------------------------------------------------------------\n\n /**\n * Unsubscribe from transport events and clear all change listeners.\n *\n * Call this when the component or service that owns the store unmounts or\n * shuts down to prevent memory leaks.\n */\n dispose(): void {\n this._unsubEvent();\n this._unsubStatus?.();\n this._listeners.clear();\n }\n\n // -- Factory ---------------------------------------------------------------\n\n /**\n * Create an {@link AgentStore} connected to a duck-typed agent client.\n *\n * Adapts the client's `send`/`onEvent`/`offEvent` API to the\n * {@link StoreTransport} interface expected by the constructor, without\n * creating a hard runtime dependency on `@skaile/workspaces/client`.\n *\n * @param client - Any object implementing {@link AgentClientLike}.\n * @param opts - Optional store configuration.\n * @param opts.sessionId - Session ID for message envelopes (defaults to a new UUID).\n * @param opts.initialMessages - Messages to pre-populate the store with.\n *\n * @example\n * ```ts\n * const store = AgentStore.fromClient(agentClient, { sessionId: 'sess-123' })\n * ```\n */\n static fromClient(\n client: AgentClientLike,\n opts?: { sessionId?: string; initialMessages?: Message[] },\n ): AgentStore {\n return new AgentStore({\n sessionId: opts?.sessionId ?? crypto.randomUUID(),\n send: (cmd) => client.send(cmd),\n onEvent: (handler) => {\n client.onEvent(handler);\n return () => client.offEvent(handler);\n },\n initialMessages: opts?.initialMessages,\n });\n }\n\n // -- Internal --------------------------------------------------------------\n\n /** Replace the open sub-questions; `pendingQuestion` follows the latest one. */\n private _setOpenQuestions(open: QuestionEvent[]): void {\n this._openQuestions = open;\n this._pendingQuestion = open.at(-1) ?? null;\n if (open.length === 0) {\n this._askQuestions = new Set();\n this._unnamedEchoesOwed = 0;\n }\n }\n\n private _openIndexOf(question: string): number {\n return this._openQuestions.findIndex((q) => q.question === question);\n }\n\n private _handleEvent(event: AgentEvent): void {\n switch (event.type) {\n case \"text\":\n this._cancelledText = \"\";\n this._streamingText += event.content;\n this._streamingFlushed = false;\n break;\n\n case \"text_retract\":\n // The driver abandoned an attempt mid-message and is replaying it. Cut\n // only a matching tail: text already flushed into a message, or a\n // stream that no longer ends in the fragment, is left as it is.\n if (!event.content || !this._streamingText.endsWith(event.content)) return;\n this._streamingText = this._streamingText.slice(\n 0,\n this._streamingText.length - event.content.length,\n );\n break;\n\n case \"finished\":\n this._cancelledText = \"\";\n this._flushStreaming();\n this._appendMessage(event);\n // A cancelled finished is synthetic (persisted immediately for reload-\n // durability) and precedes the driver's real abort/kill sequence — stay\n // \"cancelling\" until the later, genuine status event reports \"idle\".\n if (!event.cancelled) this._phase = \"idle\";\n this._setOpenQuestions([]);\n break;\n\n case \"status\":\n // While cancelling, the driver's interrupt/unwind window can still emit\n // stale \"working\" statuses for already-buffered tool activity — ignore\n // anything but the genuine idle confirmation.\n if (this._phase === \"cancelling\" && event.phase !== \"idle\") return;\n // A parked question is the same shape: the driver re-emits the turn's\n // buffered tool activity — including one call for the question tool\n // itself — while nothing is actually running. Only the genuine idle\n // confirmation may move the phase until the user answers.\n if (this._pendingQuestion !== null && event.phase !== \"idle\") return;\n // The bridge re-emits phase:\"working\" on every tool call, so most status\n // events in a turn carry the phase we already hold. `_notify()` rotates\n // the snapshot, so notifying for them re-renders consumers for nothing.\n if (this._phase === event.phase) return;\n this._phase = event.phase;\n break;\n\n case \"user_message\":\n // A peer's message mid-turn is a boundary: finalize the in-flight text\n // so it renders before the interjection. Flush-only — the peer message\n // is delivered via the host's history, not this transient echo. The\n // flush is internally conditional, so an echo arriving while nothing is\n // streaming (the common case — peers talk between turns) changed no\n // state and notifying for it was a pure fanout.\n if (!this._flushStreaming()) return;\n break;\n\n case \"question_reply\": {\n // A peer answered: close its sub-question the same way `reply()` does.\n // The runner echoes every reply to all clients, so the replier's own\n // echo (its sub-question already closed) must leave this client\n // untouched. A named echo finds nothing left to close; an unnamed one\n // is matched by count. A complete arm rather than a fall through into\n // the group below: sharing that body once let a tool_call clear the flag.\n const pending = this._pendingQuestion;\n if (pending === null) return;\n if (pending.requestId !== undefined && pending.requestId !== event.requestId) return;\n let index = 0;\n if (event.question !== undefined) {\n index = this._openIndexOf(event.question);\n if (index === -1) return;\n } else if (this._unnamedEchoesOwed > 0) {\n this._unnamedEchoesOwed--;\n return;\n }\n this._setOpenQuestions(this._openQuestions.filter((_, i) => i !== index));\n this._flushStreaming();\n this._appendMessage(event);\n break;\n }\n\n case \"tool_call\":\n case \"tool_result\":\n case \"file_changed\":\n case \"subagent\":\n case \"dev_server\":\n case \"handoff\":\n // Flush in-flight text first so each text block becomes its own\n // Message, interleaved with tool activity in order — otherwise text\n // before and after a tool call merges into one wall-of-text blob.\n this._flushStreaming();\n this._appendMessage(event);\n break;\n\n case \"question\":\n // A pending question is a human-in-the-loop pause — the agent is waiting\n // for the user, not working. Reset to idle (like finished/error) so any\n // phase-derived busy indicator clears until the user replies.\n this._flushStreaming();\n this._phase = \"idle\";\n // One event arrives per sub-question. A different requestId is a new\n // ask; the same one (or none, as claude-sdk sends) extends the open set.\n if (this._openQuestions[0]?.requestId !== event.requestId) this._setOpenQuestions([]);\n this._setOpenQuestions([\n ...this._openQuestions.filter((q) => q.question !== event.question),\n event,\n ]);\n this._askQuestions.add(event.question);\n this._appendMessage(event);\n break;\n\n case \"error\":\n this._error = { message: event.message, fatal: event.fatal };\n this._streamingText = \"\";\n this._streamingFlushed = true;\n this._phase = \"idle\";\n // A fatal error ends the turn like `finished`; a surviving question would\n // keep the status gate shut. Non-fatal side-channel errors leave it parked.\n if (event.fatal) this._setOpenQuestions([]);\n this._appendMessage(event);\n break;\n\n case \"state_changed\": {\n // Accumulate state per store namespace (notify only — no message).\n // Re-emits of unchanged state are routine, not exceptional: `serve.ts`\n // replays every namespace on connect (`buildStoreSnapshotReplay`), on a\n // seeded execution, on re-registering an already-registered store, and\n // immediately after registration — and the `xstate-store` adapter is\n // equality-free, so writing a key its current value emits too. Each of\n // those rebuilt the Map and rotated the snapshot for identical state.\n if (isSameJsonValue(this._sharedState.get(event.store), event.state)) return;\n this._sharedState = new Map(this._sharedState);\n this._sharedState.set(event.store, event.state);\n break;\n }\n\n // ── Protocol v2 ────────────────────────────────────────────────────────\n\n case \"capability_register\": {\n // TRANSIENT — accumulate v2 capabilities into the registry (no message).\n // The gateway replays the whole set on every (re)attach; a byte-identical\n // replay must not rotate the Map identity or notify, or a reconnect storm\n // compounds into an unbounded render loop in consumers.\n if (\n event.capabilities.every((cap) => isSameJsonValue(this._capabilities.get(cap.name), cap))\n ) {\n return;\n }\n this._capabilities = new Map(this._capabilities);\n for (const cap of event.capabilities) {\n this._capabilities.set(cap.name, cap);\n }\n break;\n }\n\n case \"capability_deregister\": {\n // TRANSIENT — drop capabilities by name. Names we never had are a no-op:\n // rebuilding the Map for them would notify with an identical registry.\n const present = event.names.filter((name) => this._capabilities.has(name));\n if (present.length === 0) return;\n this._capabilities = new Map(this._capabilities);\n for (const name of present) {\n this._capabilities.delete(name);\n }\n break;\n }\n\n case \"render_invoked\":\n // TRANSIENT — record latest render invocation (frontend pairs with\n // the matching `Capability.render` for placement).\n this._activeRenderInvocations = new Map(this._activeRenderInvocations);\n this._activeRenderInvocations.set(event.callId, event);\n break;\n\n case \"protocol_info\": {\n // TRANSIENT — runner announced its protocol version. It announces on\n // every attach, so tab mounts, StrictMode remounts and SSE reconnects\n // almost always carry the version we already hold. `ProtocolInfoEvent`\n // is nothing but `version`, and `ProtocolVersion` is exactly three\n // numbers, so the field comparison is complete, not conservative.\n //\n // A fresh announcement also retires any incompatibility notice: the\n // platform restarts the session on `incompatible_protocol`, and this\n // event is the replacement container introducing itself. Nothing cleared\n // `_incompatibleProtocol` before, so the restart banner was sticky for\n // the life of the store even though the platform's debug pane documents\n // this clear as already happening. Guarding without clearing would make\n // that permanent, since a repeat announcement would never get here.\n const held = this._protocolInfo?.version;\n const sameVersion =\n held !== undefined &&\n held.major === event.version.major &&\n held.minor === event.version.minor &&\n held.patch === event.version.patch;\n if (sameVersion && this._incompatibleProtocol === null) return;\n // Keep the held event object when the version is unchanged so consumers\n // with an effect keyed on `snapshot.protocolInfo` do not re-fire.\n if (!sameVersion) this._protocolInfo = event;\n this._incompatibleProtocol = null;\n break;\n }\n\n case \"queued_prompts_dropped\": {\n // TRANSIENT — the runner dropped these queued prompts on a cancel.\n // Ids already held are a no-op: no Set rebuild, no notify.\n const fresh = event.messageIds.filter((id) => !this._notSentPromptIds.has(id));\n if (fresh.length === 0) return;\n this._notSentPromptIds = new Set([...this._notSentPromptIds, ...fresh]);\n break;\n }\n\n case \"incompatible_protocol\":\n // TRANSIENT — runner detected version drift; platform restarts session.\n this._incompatibleProtocol = event;\n break;\n\n case \"capability_invoked\":\n // Backend intercepts client-side invocations and dispatches them\n // through V2CapabilityRegistryService — frontends should not see\n // these. Drop silently if one slips through.\n return;\n\n case \"resource_response\":\n case \"resources_available\":\n // Transient — handled by ResourceClient, not AgentStore\n return;\n\n default:\n // The switch names 24 of `AgentEvent`'s 61 members. The other 37 —\n // `log_entry` above all, one per line of container output — hold no\n // AgentStore state, so falling through to the trailing `_notify()`\n // rotated the snapshot and re-rendered every consumer for state that\n // had not changed. Unlike the guarded cases this was not a replay\n // artifact: it happened on every single occurrence. Hosts that need\n // these events (log panels, mount indicators, typing bubbles) read them\n // off the transport upstream of the store, not out of the snapshot.\n //\n // Deliberately not an `assertNever` exhaustiveness check: that is a\n // compile error while 37 members are unnamed, and naming all 61 would\n // enumerate events the store holds no state for just to satisfy it.\n return;\n }\n\n this._notify();\n }\n\n /**\n * Finalize buffered streaming text as a `text` Message.\n *\n * @returns true when text was flushed; false when there was nothing to flush,\n * so callers can skip a notify that would change nothing.\n */\n private _flushStreaming(): boolean {\n if (this._streamingFlushed || !this._streamingText) return false;\n this._appendMessage({ type: \"text\", content: this._streamingText });\n this._streamingText = \"\";\n this._streamingFlushed = true;\n return true;\n }\n\n private _appendMessage(\n payload: AgentCommand | AgentEvent,\n senderId?: string,\n id: string = crypto.randomUUID(),\n ): void {\n this._seq++;\n this._messages = [\n ...this._messages,\n {\n id,\n seq: this._seq,\n timestamp: new Date().toISOString(),\n sessionId: this._options.sessionId,\n ...(senderId ? { senderId } : {}),\n payload,\n },\n ];\n }\n\n private _notify(): void {\n this._snapshot = null;\n for (const listener of this._listeners) {\n listener();\n }\n }\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  import { AssetKindRegistryFrozenError, AssetKindConflictError, AssetKindPatternConflictError, AssetKindPathAmbiguityError } from './chunk-JXT46QFC.js';
2
- import { decodeSkaileManifest, SKAILE_MANIFEST_FILENAME } from './chunk-P4VHQA4N.js';
3
- import { parseFrontmatter } from './chunk-SQ7IN7KR.js';
4
- import { isValidAssetName } from './chunk-GEEW6SY2.js';
5
- import { validatePersona, validateRuleset, validateSkill, validateAgent, validateConnector, validateMcpServer, validateContract, validatePrompt, validatePreset } from './chunk-2D3C4AJP.js';
2
+ import { decodeSkaileManifest, SKAILE_MANIFEST_FILENAME } from './chunk-DSB6X25D.js';
3
+ import { parseFrontmatter } from './chunk-5K2VT6E2.js';
4
+ import { isValidAssetName } from './chunk-A5EDMBFG.js';
5
+ import { validatePersona, validateRuleset, validateSkill, validateAgent, validateConnector, validateMcpServer, validateContract, validatePrompt, validatePreset } from './chunk-5CYEWBPB.js';
6
6
  import * as fs from 'fs';
7
7
  import * as path from 'path';
8
8
  import * as yaml from 'js-yaml';
@@ -1063,6 +1063,9 @@ var DOMAIN_RELATIONS = /* @__PURE__ */ new Set([
1063
1063
  ]);
1064
1064
  var DOMAIN_SLUG_RE = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
1065
1065
  var DOMAIN_SLUG_MAX = 39;
1066
+ function isValidDomainSlug(slug) {
1067
+ return slug.length > 0 && slug.length <= DOMAIN_SLUG_MAX && DOMAIN_SLUG_RE.test(slug);
1068
+ }
1066
1069
  var DOMAIN_MD_FILENAME = "DOMAIN.md";
1067
1070
  function isDomainMdPath(relativePath) {
1068
1071
  return relativePath === DOMAIN_MD_FILENAME || relativePath.endsWith(`/${DOMAIN_MD_FILENAME}`);
@@ -1088,8 +1091,9 @@ function normalizeMembers(raw) {
1088
1091
  return out.length > 0 ? out : void 0;
1089
1092
  }
1090
1093
  function parseDomainMd(domainMdPath, frontmatter) {
1091
- const slug = typeof frontmatter.slug === "string" ? frontmatter.slug : "";
1094
+ const slug = typeof frontmatter.slug === "string" ? frontmatter.slug : typeof frontmatter.name === "string" ? frontmatter.name : "";
1092
1095
  const title = typeof frontmatter.title === "string" && frontmatter.title.length > 0 ? frontmatter.title : slug;
1096
+ const publisher = typeof frontmatter.publisher === "string" && frontmatter.publisher.trim().length > 0 ? frontmatter.publisher.trim() : void 0;
1093
1097
  const description = typeof frontmatter.description === "string" ? frontmatter.description.trim() : "";
1094
1098
  const relation = typeof frontmatter.relation === "string" ? frontmatter.relation : "additions";
1095
1099
  const order = typeof frontmatter.order === "number" ? frontmatter.order : void 0;
@@ -1098,6 +1102,7 @@ function parseDomainMd(domainMdPath, frontmatter) {
1098
1102
  domainRoot: posixDirname(domainMdPath),
1099
1103
  slug,
1100
1104
  title,
1105
+ ...publisher !== void 0 ? { publisher } : {},
1101
1106
  description,
1102
1107
  relation,
1103
1108
  ...order !== void 0 ? { order } : {},
@@ -1111,7 +1116,7 @@ function claims(root, target) {
1111
1116
  function validateDomains(domains) {
1112
1117
  const errors = [];
1113
1118
  for (const d of domains) {
1114
- if (!d.slug || !DOMAIN_SLUG_RE.test(d.slug) || d.slug.length > DOMAIN_SLUG_MAX) {
1119
+ if (!isValidDomainSlug(d.slug)) {
1115
1120
  errors.push({ code: "InvalidSlug", root: d.domainRoot, value: d.slug });
1116
1121
  }
1117
1122
  if (!DOMAIN_RELATIONS.has(d.relation)) {
@@ -2436,6 +2441,6 @@ function validateRequiresSyntax2(requires) {
2436
2441
  // discovery/src/index.ts
2437
2442
  var VERSION = "0.0.0";
2438
2443
 
2439
- export { AGENT_COMPANION_DIRS, AssetKindRegistry, BUILTIN_PROVIDERS, DEFAULT_ATOMIZATION_POLICY, DOMAIN_MD_FILENAME, SEMVER_RE, SKILL_COMPANION_DIRS, SourceConfigSchema, VERSION, agentProvider, assignDomain, barePublisher, buildDomainIndex, buildRequiresGraph, closeOverReferences, computeDeterministicHash, computeDeterministicHashDetailed, connectorProvider, contractProvider, createDefaultRegistry, createNodeAssetFs, decodeManifestSourceConfig, detectCycles, discoverAssetsInTree, discoverAssetsInTreeEntries, discoverFromManifest, extractPathCandidates, extractRequires, extractSlashCommands, isDomainMdPath, isExcludedDevPath, isManifestMode, lintUncoveredReferences, loadMergedSourceConfig, loadMergedSourceConfigFromFile, loadSourceConfig, manifestToSourceConfig, mcpServerProvider, mergeSourceConfigs, parseDomainMd, parseSourceConfig, personaProvider, presetProvider, promptProvider, readManifestSourceConfig, rulesetProvider, scanAssetReferences, scanSlashCommandNames, skillProvider, validateDomains, validateSourceConfig };
2440
- //# sourceMappingURL=chunk-DFZDL62S.js.map
2441
- //# sourceMappingURL=chunk-DFZDL62S.js.map
2444
+ export { AGENT_COMPANION_DIRS, AssetKindRegistry, BUILTIN_PROVIDERS, DEFAULT_ATOMIZATION_POLICY, DOMAIN_MD_FILENAME, SEMVER_RE, SKILL_COMPANION_DIRS, SourceConfigSchema, VERSION, agentProvider, assignDomain, barePublisher, buildDomainIndex, buildRequiresGraph, closeOverReferences, computeDeterministicHash, computeDeterministicHashDetailed, connectorProvider, contractProvider, createDefaultRegistry, createNodeAssetFs, decodeManifestSourceConfig, detectCycles, discoverAssetsInTree, discoverAssetsInTreeEntries, discoverFromManifest, extractPathCandidates, extractRequires, extractSlashCommands, isDomainMdPath, isExcludedDevPath, isManifestMode, isValidDomainSlug, lintUncoveredReferences, loadMergedSourceConfig, loadMergedSourceConfigFromFile, loadSourceConfig, manifestToSourceConfig, mcpServerProvider, mergeSourceConfigs, parseDomainMd, parseSourceConfig, personaProvider, presetProvider, promptProvider, readManifestSourceConfig, rulesetProvider, scanAssetReferences, scanSlashCommandNames, skillProvider, validateDomains, validateSourceConfig };
2445
+ //# sourceMappingURL=chunk-OLMNDIAU.js.map
2446
+ //# sourceMappingURL=chunk-OLMNDIAU.js.map