@nextclaw/service 0.1.15 → 0.1.16

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 (417) hide show
  1. package/dist/cli/commands/agent/agent-runtime.utils.d.ts +2 -1
  2. package/dist/cli/commands/agent/agent-runtime.utils.d.ts.map +1 -0
  3. package/dist/cli/commands/agent/agent-runtime.utils.js +2 -0
  4. package/dist/cli/commands/agent/agent-runtime.utils.js.map +1 -0
  5. package/dist/cli/commands/agent/cli-agent-runner.utils.d.ts +2 -1
  6. package/dist/cli/commands/agent/cli-agent-runner.utils.d.ts.map +1 -0
  7. package/dist/cli/commands/agent/cli-agent-runner.utils.js +2 -0
  8. package/dist/cli/commands/agent/cli-agent-runner.utils.js.map +1 -0
  9. package/dist/cli/commands/agent/services/agent-commands.service.d.ts +2 -1
  10. package/dist/cli/commands/agent/services/agent-commands.service.d.ts.map +1 -0
  11. package/dist/cli/commands/agent/services/agent-commands.service.js +2 -0
  12. package/dist/cli/commands/agent/services/agent-commands.service.js.map +1 -0
  13. package/dist/cli/commands/config/services/config-commands.service.d.ts +2 -1
  14. package/dist/cli/commands/config/services/config-commands.service.d.ts.map +1 -0
  15. package/dist/cli/commands/config/services/config-commands.service.js +2 -0
  16. package/dist/cli/commands/config/services/config-commands.service.js.map +1 -0
  17. package/dist/cli/commands/cron/services/cron-commands.service.d.ts +2 -1
  18. package/dist/cli/commands/cron/services/cron-commands.service.d.ts.map +1 -0
  19. package/dist/cli/commands/cron/services/cron-commands.service.js +2 -0
  20. package/dist/cli/commands/cron/services/cron-commands.service.js.map +1 -0
  21. package/dist/cli/commands/cron/services/cron-local.service.d.ts +2 -1
  22. package/dist/cli/commands/cron/services/cron-local.service.d.ts.map +1 -0
  23. package/dist/cli/commands/cron/services/cron-local.service.js +2 -0
  24. package/dist/cli/commands/cron/services/cron-local.service.js.map +1 -0
  25. package/dist/cli/commands/cron/utils/cron-job.utils.d.ts +2 -1
  26. package/dist/cli/commands/cron/utils/cron-job.utils.d.ts.map +1 -0
  27. package/dist/cli/commands/cron/utils/cron-job.utils.js +2 -0
  28. package/dist/cli/commands/cron/utils/cron-job.utils.js.map +1 -0
  29. package/dist/cli/commands/diagnostics/services/diagnostics-commands.service.d.ts +2 -1
  30. package/dist/cli/commands/diagnostics/services/diagnostics-commands.service.d.ts.map +1 -0
  31. package/dist/cli/commands/diagnostics/services/diagnostics-commands.service.js +2 -0
  32. package/dist/cli/commands/diagnostics/services/diagnostics-commands.service.js.map +1 -0
  33. package/dist/cli/commands/diagnostics/utils/diagnostics-render.utils.d.ts +2 -1
  34. package/dist/cli/commands/diagnostics/utils/diagnostics-render.utils.d.ts.map +1 -0
  35. package/dist/cli/commands/diagnostics/utils/diagnostics-render.utils.js +2 -0
  36. package/dist/cli/commands/diagnostics/utils/diagnostics-render.utils.js.map +1 -0
  37. package/dist/cli/commands/gateway/index.d.ts +2 -1
  38. package/dist/cli/commands/gateway/index.d.ts.map +1 -0
  39. package/dist/cli/commands/gateway/index.js +2 -0
  40. package/dist/cli/commands/gateway/index.js.map +1 -0
  41. package/dist/cli/commands/logs/index.d.ts +2 -1
  42. package/dist/cli/commands/logs/index.d.ts.map +1 -0
  43. package/dist/cli/commands/logs/index.js +2 -0
  44. package/dist/cli/commands/logs/index.js.map +1 -0
  45. package/dist/cli/commands/mcp/index.d.ts +2 -1
  46. package/dist/cli/commands/mcp/index.d.ts.map +1 -0
  47. package/dist/cli/commands/mcp/index.js +2 -0
  48. package/dist/cli/commands/mcp/index.js.map +1 -0
  49. package/dist/cli/commands/restart/index.d.ts +2 -1
  50. package/dist/cli/commands/restart/index.d.ts.map +1 -0
  51. package/dist/cli/commands/restart/index.js +2 -0
  52. package/dist/cli/commands/restart/index.js.map +1 -0
  53. package/dist/cli/commands/secrets/index.d.ts +2 -1
  54. package/dist/cli/commands/secrets/index.d.ts.map +1 -0
  55. package/dist/cli/commands/secrets/index.js +2 -0
  56. package/dist/cli/commands/secrets/index.js.map +1 -0
  57. package/dist/cli/commands/serve/index.d.ts +2 -1
  58. package/dist/cli/commands/serve/index.d.ts.map +1 -0
  59. package/dist/cli/commands/serve/index.js +2 -0
  60. package/dist/cli/commands/serve/index.js.map +1 -0
  61. package/dist/cli/commands/skills/index.d.ts +2 -1
  62. package/dist/cli/commands/skills/index.d.ts.map +1 -0
  63. package/dist/cli/commands/skills/index.js +2 -0
  64. package/dist/cli/commands/skills/index.js.map +1 -0
  65. package/dist/cli/commands/skills/marketplace-client.d.ts +2 -1
  66. package/dist/cli/commands/skills/marketplace-client.d.ts.map +1 -0
  67. package/dist/cli/commands/skills/marketplace-client.js +2 -0
  68. package/dist/cli/commands/skills/marketplace-client.js.map +1 -0
  69. package/dist/cli/commands/skills/marketplace-command-options.utils.d.ts +2 -1
  70. package/dist/cli/commands/skills/marketplace-command-options.utils.d.ts.map +1 -0
  71. package/dist/cli/commands/skills/marketplace-command-options.utils.js +2 -0
  72. package/dist/cli/commands/skills/marketplace-command-options.utils.js.map +1 -0
  73. package/dist/cli/commands/skills/marketplace-identity.utils.d.ts +2 -1
  74. package/dist/cli/commands/skills/marketplace-identity.utils.d.ts.map +1 -0
  75. package/dist/cli/commands/skills/marketplace-identity.utils.js +2 -0
  76. package/dist/cli/commands/skills/marketplace-identity.utils.js.map +1 -0
  77. package/dist/cli/commands/skills/marketplace-network-retry.d.ts +2 -1
  78. package/dist/cli/commands/skills/marketplace-network-retry.d.ts.map +1 -0
  79. package/dist/cli/commands/skills/marketplace-network-retry.js +2 -0
  80. package/dist/cli/commands/skills/marketplace-network-retry.js.map +1 -0
  81. package/dist/cli/commands/skills/marketplace.metadata.d.ts +2 -1
  82. package/dist/cli/commands/skills/marketplace.metadata.d.ts.map +1 -0
  83. package/dist/cli/commands/skills/marketplace.metadata.js +2 -0
  84. package/dist/cli/commands/skills/marketplace.metadata.js.map +1 -0
  85. package/dist/cli/commands/skills/marketplace.utils.d.ts +2 -1
  86. package/dist/cli/commands/skills/marketplace.utils.d.ts.map +1 -0
  87. package/dist/cli/commands/skills/marketplace.utils.js +2 -0
  88. package/dist/cli/commands/skills/marketplace.utils.js.map +1 -0
  89. package/dist/cli/commands/skills/skills-query.service.d.ts +2 -1
  90. package/dist/cli/commands/skills/skills-query.service.d.ts.map +1 -0
  91. package/dist/cli/commands/skills/skills-query.service.js +2 -0
  92. package/dist/cli/commands/skills/skills-query.service.js.map +1 -0
  93. package/dist/cli/commands/start/index.d.ts +2 -1
  94. package/dist/cli/commands/start/index.d.ts.map +1 -0
  95. package/dist/cli/commands/start/index.js +2 -0
  96. package/dist/cli/commands/start/index.js.map +1 -0
  97. package/dist/cli/commands/stop/index.d.ts +2 -1
  98. package/dist/cli/commands/stop/index.d.ts.map +1 -0
  99. package/dist/cli/commands/stop/index.js +2 -0
  100. package/dist/cli/commands/stop/index.js.map +1 -0
  101. package/dist/cli/commands/ui/index.d.ts +2 -1
  102. package/dist/cli/commands/ui/index.d.ts.map +1 -0
  103. package/dist/cli/commands/ui/index.js +2 -0
  104. package/dist/cli/commands/ui/index.js.map +1 -0
  105. package/dist/cli/commands/usage/services/llm-usage-command.service.d.ts +2 -1
  106. package/dist/cli/commands/usage/services/llm-usage-command.service.d.ts.map +1 -0
  107. package/dist/cli/commands/usage/services/llm-usage-command.service.js +2 -0
  108. package/dist/cli/commands/usage/services/llm-usage-command.service.js.map +1 -0
  109. package/dist/commands/channel/channel-config-view.d.ts +2 -1
  110. package/dist/commands/channel/channel-config-view.d.ts.map +1 -0
  111. package/dist/commands/channel/channel-config-view.js +2 -0
  112. package/dist/commands/channel/channel-config-view.js.map +1 -0
  113. package/dist/commands/channel/channel-list-view.service.d.ts +2 -1
  114. package/dist/commands/channel/channel-list-view.service.d.ts.map +1 -0
  115. package/dist/commands/channel/channel-list-view.service.js +2 -0
  116. package/dist/commands/channel/channel-list-view.service.js.map +1 -0
  117. package/dist/commands/channel/index.d.ts +2 -1
  118. package/dist/commands/channel/index.d.ts.map +1 -0
  119. package/dist/commands/channel/index.js +2 -0
  120. package/dist/commands/channel/index.js.map +1 -0
  121. package/dist/commands/platform-auth/services/account-status.service.d.ts +2 -1
  122. package/dist/commands/platform-auth/services/account-status.service.d.ts.map +1 -0
  123. package/dist/commands/platform-auth/services/account-status.service.js +2 -0
  124. package/dist/commands/platform-auth/services/account-status.service.js.map +1 -0
  125. package/dist/commands/platform-auth/services/platform-auth-commands.service.d.ts +2 -1
  126. package/dist/commands/platform-auth/services/platform-auth-commands.service.d.ts.map +1 -0
  127. package/dist/commands/platform-auth/services/platform-auth-commands.service.js +2 -0
  128. package/dist/commands/platform-auth/services/platform-auth-commands.service.js.map +1 -0
  129. package/dist/commands/platform-auth/utils/payload.utils.d.ts +2 -1
  130. package/dist/commands/platform-auth/utils/payload.utils.d.ts.map +1 -0
  131. package/dist/commands/platform-auth/utils/payload.utils.js +2 -0
  132. package/dist/commands/platform-auth/utils/payload.utils.js.map +1 -0
  133. package/dist/commands/plugin/index.d.ts +2 -1
  134. package/dist/commands/plugin/index.d.ts.map +1 -0
  135. package/dist/commands/plugin/index.js +2 -0
  136. package/dist/commands/plugin/index.js.map +1 -0
  137. package/dist/commands/plugin/plugin-command.utils.d.ts +4 -3
  138. package/dist/commands/plugin/plugin-command.utils.d.ts.map +1 -0
  139. package/dist/commands/plugin/plugin-command.utils.js +2 -0
  140. package/dist/commands/plugin/plugin-command.utils.js.map +1 -0
  141. package/dist/commands/plugin/plugin-mutation-actions.utils.d.ts +2 -1
  142. package/dist/commands/plugin/plugin-mutation-actions.utils.d.ts.map +1 -0
  143. package/dist/commands/plugin/plugin-mutation-actions.utils.js +2 -0
  144. package/dist/commands/plugin/plugin-mutation-actions.utils.js.map +1 -0
  145. package/dist/commands/remote/index.d.ts +2 -1
  146. package/dist/commands/remote/index.d.ts.map +1 -0
  147. package/dist/commands/remote/index.js +2 -0
  148. package/dist/commands/remote/index.js.map +1 -0
  149. package/dist/commands/remote/services/remote-access-host.service.d.ts +2 -1
  150. package/dist/commands/remote/services/remote-access-host.service.d.ts.map +1 -0
  151. package/dist/commands/remote/services/remote-access-host.service.js +2 -0
  152. package/dist/commands/remote/services/remote-access-host.service.js.map +1 -0
  153. package/dist/commands/remote/services/remote-service-control.service.d.ts +2 -1
  154. package/dist/commands/remote/services/remote-service-control.service.d.ts.map +1 -0
  155. package/dist/commands/remote/services/remote-service-control.service.js +2 -0
  156. package/dist/commands/remote/services/remote-service-control.service.js.map +1 -0
  157. package/dist/commands/remote/utils/platform-api-base.utils.d.ts +2 -1
  158. package/dist/commands/remote/utils/platform-api-base.utils.d.ts.map +1 -0
  159. package/dist/commands/remote/utils/platform-api-base.utils.js +2 -0
  160. package/dist/commands/remote/utils/platform-api-base.utils.js.map +1 -0
  161. package/dist/commands/remote/utils/remote-runtime-support.utils.d.ts +2 -1
  162. package/dist/commands/remote/utils/remote-runtime-support.utils.d.ts.map +1 -0
  163. package/dist/commands/remote/utils/remote-runtime-support.utils.js +2 -0
  164. package/dist/commands/remote/utils/remote-runtime-support.utils.js.map +1 -0
  165. package/dist/commands/service/index.d.ts +2 -1
  166. package/dist/commands/service/index.d.ts.map +1 -0
  167. package/dist/commands/service/index.js +2 -0
  168. package/dist/commands/service/index.js.map +1 -0
  169. package/dist/commands/service/services/autostart/host-autostart-command.service.d.ts +2 -1
  170. package/dist/commands/service/services/autostart/host-autostart-command.service.d.ts.map +1 -0
  171. package/dist/commands/service/services/autostart/host-autostart-command.service.js +2 -0
  172. package/dist/commands/service/services/autostart/host-autostart-command.service.js.map +1 -0
  173. package/dist/commands/service/services/autostart/host-autostart-runtime.service.d.ts +2 -1
  174. package/dist/commands/service/services/autostart/host-autostart-runtime.service.d.ts.map +1 -0
  175. package/dist/commands/service/services/autostart/host-autostart-runtime.service.js +2 -0
  176. package/dist/commands/service/services/autostart/host-autostart-runtime.service.js.map +1 -0
  177. package/dist/commands/service/services/autostart/host-autostart.service.d.ts +2 -1
  178. package/dist/commands/service/services/autostart/host-autostart.service.d.ts.map +1 -0
  179. package/dist/commands/service/services/autostart/host-autostart.service.js +2 -0
  180. package/dist/commands/service/services/autostart/host-autostart.service.js.map +1 -0
  181. package/dist/commands/service/services/autostart/linux-systemd-autostart.service.d.ts +2 -1
  182. package/dist/commands/service/services/autostart/linux-systemd-autostart.service.d.ts.map +1 -0
  183. package/dist/commands/service/services/autostart/linux-systemd-autostart.service.js +2 -0
  184. package/dist/commands/service/services/autostart/linux-systemd-autostart.service.js.map +1 -0
  185. package/dist/commands/service/services/autostart/macos-launch-agent-autostart.service.d.ts +2 -1
  186. package/dist/commands/service/services/autostart/macos-launch-agent-autostart.service.d.ts.map +1 -0
  187. package/dist/commands/service/services/autostart/macos-launch-agent-autostart.service.js +2 -0
  188. package/dist/commands/service/services/autostart/macos-launch-agent-autostart.service.js.map +1 -0
  189. package/dist/commands/service/services/autostart/windows-task-autostart.service.d.ts +2 -1
  190. package/dist/commands/service/services/autostart/windows-task-autostart.service.d.ts.map +1 -0
  191. package/dist/commands/service/services/autostart/windows-task-autostart.service.js +2 -0
  192. package/dist/commands/service/services/autostart/windows-task-autostart.service.js.map +1 -0
  193. package/dist/commands/service/types/autostart/host-autostart.types.d.ts +2 -1
  194. package/dist/commands/service/types/autostart/host-autostart.types.d.ts.map +1 -0
  195. package/dist/launcher/npm-runtime-bundle-layout.store.d.ts +2 -1
  196. package/dist/launcher/npm-runtime-bundle-layout.store.d.ts.map +1 -0
  197. package/dist/launcher/npm-runtime-bundle-layout.store.js +2 -0
  198. package/dist/launcher/npm-runtime-bundle-layout.store.js.map +1 -0
  199. package/dist/launcher/npm-runtime-bundle-manifest.service.d.ts +2 -1
  200. package/dist/launcher/npm-runtime-bundle-manifest.service.d.ts.map +1 -0
  201. package/dist/launcher/npm-runtime-bundle-manifest.service.js +2 -0
  202. package/dist/launcher/npm-runtime-bundle-manifest.service.js.map +1 -0
  203. package/dist/launcher/npm-runtime-bundle.service.d.ts +2 -1
  204. package/dist/launcher/npm-runtime-bundle.service.d.ts.map +1 -0
  205. package/dist/launcher/npm-runtime-bundle.service.js +2 -0
  206. package/dist/launcher/npm-runtime-bundle.service.js.map +1 -0
  207. package/dist/launcher/npm-runtime-bundle.types.d.ts +2 -1
  208. package/dist/launcher/npm-runtime-bundle.types.d.ts.map +1 -0
  209. package/dist/launcher/npm-runtime-launcher.service.d.ts +2 -1
  210. package/dist/launcher/npm-runtime-launcher.service.d.ts.map +1 -0
  211. package/dist/launcher/npm-runtime-launcher.service.js +2 -0
  212. package/dist/launcher/npm-runtime-launcher.service.js.map +1 -0
  213. package/dist/launcher/npm-runtime-update-command.service.d.ts +5 -1
  214. package/dist/launcher/npm-runtime-update-command.service.d.ts.map +1 -0
  215. package/dist/launcher/npm-runtime-update-command.service.js +32 -0
  216. package/dist/launcher/npm-runtime-update-command.service.js.map +1 -0
  217. package/dist/launcher/npm-runtime-update-source.service.d.ts +2 -1
  218. package/dist/launcher/npm-runtime-update-source.service.d.ts.map +1 -0
  219. package/dist/launcher/npm-runtime-update-source.service.js +2 -0
  220. package/dist/launcher/npm-runtime-update-source.service.js.map +1 -0
  221. package/dist/launcher/npm-runtime-update-state.store.d.ts +2 -1
  222. package/dist/launcher/npm-runtime-update-state.store.d.ts.map +1 -0
  223. package/dist/launcher/npm-runtime-update-state.store.js +2 -0
  224. package/dist/launcher/npm-runtime-update-state.store.js.map +1 -0
  225. package/dist/launcher/npm-runtime-update.manager.d.ts +2 -1
  226. package/dist/launcher/npm-runtime-update.manager.d.ts.map +1 -0
  227. package/dist/launcher/npm-runtime-update.manager.js +2 -0
  228. package/dist/launcher/npm-runtime-update.manager.js.map +1 -0
  229. package/dist/launcher/npm-runtime-update.service.d.ts +2 -1
  230. package/dist/launcher/npm-runtime-update.service.d.ts.map +1 -0
  231. package/dist/launcher/npm-runtime-update.service.js +2 -0
  232. package/dist/launcher/npm-runtime-update.service.js.map +1 -0
  233. package/dist/service-runtime.service.d.ts +2 -1
  234. package/dist/service-runtime.service.d.ts.map +1 -0
  235. package/dist/service-runtime.service.js +6 -1
  236. package/dist/service-runtime.service.js.map +1 -0
  237. package/dist/shared/controllers/gateway.controller.d.ts +2 -1
  238. package/dist/shared/controllers/gateway.controller.d.ts.map +1 -0
  239. package/dist/shared/controllers/gateway.controller.js +2 -0
  240. package/dist/shared/controllers/gateway.controller.js.map +1 -0
  241. package/dist/shared/services/gateway/gateway-restart-wake.service.d.ts +2 -1
  242. package/dist/shared/services/gateway/gateway-restart-wake.service.d.ts.map +1 -0
  243. package/dist/shared/services/gateway/gateway-restart-wake.service.js +2 -0
  244. package/dist/shared/services/gateway/gateway-restart-wake.service.js.map +1 -0
  245. package/dist/shared/services/gateway/managers/gateway-plugin.manager.d.ts +2 -1
  246. package/dist/shared/services/gateway/managers/gateway-plugin.manager.d.ts.map +1 -0
  247. package/dist/shared/services/gateway/managers/gateway-plugin.manager.js +2 -0
  248. package/dist/shared/services/gateway/managers/gateway-plugin.manager.js.map +1 -0
  249. package/dist/shared/services/gateway/managers/gateway-remote.manager.d.ts +2 -1
  250. package/dist/shared/services/gateway/managers/gateway-remote.manager.d.ts.map +1 -0
  251. package/dist/shared/services/gateway/managers/gateway-remote.manager.js +2 -0
  252. package/dist/shared/services/gateway/managers/gateway-remote.manager.js.map +1 -0
  253. package/dist/shared/services/gateway/nextclaw-app.service.d.ts +2 -1
  254. package/dist/shared/services/gateway/nextclaw-app.service.d.ts.map +1 -0
  255. package/dist/shared/services/gateway/nextclaw-app.service.js +2 -0
  256. package/dist/shared/services/gateway/nextclaw-app.service.js.map +1 -0
  257. package/dist/shared/services/gateway/nextclaw-gateway-runtime.service.d.ts +2 -1
  258. package/dist/shared/services/gateway/nextclaw-gateway-runtime.service.d.ts.map +1 -0
  259. package/dist/shared/services/gateway/nextclaw-gateway-runtime.service.js +2 -0
  260. package/dist/shared/services/gateway/nextclaw-gateway-runtime.service.js.map +1 -0
  261. package/dist/shared/services/gateway/service-bootstrap-status.service.d.ts +2 -1
  262. package/dist/shared/services/gateway/service-bootstrap-status.service.d.ts.map +1 -0
  263. package/dist/shared/services/gateway/service-bootstrap-status.service.js +2 -0
  264. package/dist/shared/services/gateway/service-bootstrap-status.service.js.map +1 -0
  265. package/dist/shared/services/gateway/service-startup-support.service.d.ts +2 -1
  266. package/dist/shared/services/gateway/service-startup-support.service.d.ts.map +1 -0
  267. package/dist/shared/services/gateway/service-startup-support.service.js +2 -0
  268. package/dist/shared/services/gateway/service-startup-support.service.js.map +1 -0
  269. package/dist/shared/services/gateway/utils/cron-job-handler.utils.d.ts +2 -1
  270. package/dist/shared/services/gateway/utils/cron-job-handler.utils.d.ts.map +1 -0
  271. package/dist/shared/services/gateway/utils/cron-job-handler.utils.js +2 -0
  272. package/dist/shared/services/gateway/utils/cron-job-handler.utils.js.map +1 -0
  273. package/dist/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.d.ts +2 -1
  274. package/dist/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.d.ts.map +1 -0
  275. package/dist/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.js +2 -0
  276. package/dist/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.js.map +1 -0
  277. package/dist/shared/services/marketplace/service-marketplace-installer.service.d.ts +2 -1
  278. package/dist/shared/services/marketplace/service-marketplace-installer.service.d.ts.map +1 -0
  279. package/dist/shared/services/marketplace/service-marketplace-installer.service.js +2 -0
  280. package/dist/shared/services/marketplace/service-marketplace-installer.service.js.map +1 -0
  281. package/dist/shared/services/marketplace/service-mcp-marketplace-ops.d.ts +2 -1
  282. package/dist/shared/services/marketplace/service-mcp-marketplace-ops.d.ts.map +1 -0
  283. package/dist/shared/services/marketplace/service-mcp-marketplace-ops.js +2 -0
  284. package/dist/shared/services/marketplace/service-mcp-marketplace-ops.js.map +1 -0
  285. package/dist/shared/services/plugin/utils/plugin-dev-hot-reload.utils.d.ts +2 -1
  286. package/dist/shared/services/plugin/utils/plugin-dev-hot-reload.utils.d.ts.map +1 -0
  287. package/dist/shared/services/plugin/utils/plugin-dev-hot-reload.utils.js +2 -0
  288. package/dist/shared/services/plugin/utils/plugin-dev-hot-reload.utils.js.map +1 -0
  289. package/dist/shared/services/plugin/utils/plugin-runtime-bridge.utils.d.ts +2 -1
  290. package/dist/shared/services/plugin/utils/plugin-runtime-bridge.utils.d.ts.map +1 -0
  291. package/dist/shared/services/plugin/utils/plugin-runtime-bridge.utils.js +2 -0
  292. package/dist/shared/services/plugin/utils/plugin-runtime-bridge.utils.js.map +1 -0
  293. package/dist/shared/services/restart/restart-coordinator.service.d.ts +2 -1
  294. package/dist/shared/services/restart/restart-coordinator.service.d.ts.map +1 -0
  295. package/dist/shared/services/restart/restart-coordinator.service.js +2 -0
  296. package/dist/shared/services/restart/restart-coordinator.service.js.map +1 -0
  297. package/dist/shared/services/restart/restart-sentinel.service.d.ts +2 -1
  298. package/dist/shared/services/restart/restart-sentinel.service.d.ts.map +1 -0
  299. package/dist/shared/services/restart/restart-sentinel.service.js +2 -0
  300. package/dist/shared/services/restart/restart-sentinel.service.js.map +1 -0
  301. package/dist/shared/services/restart/runtime-restart-request.service.d.ts +2 -1
  302. package/dist/shared/services/restart/runtime-restart-request.service.d.ts.map +1 -0
  303. package/dist/shared/services/restart/runtime-restart-request.service.js +2 -0
  304. package/dist/shared/services/restart/runtime-restart-request.service.js.map +1 -0
  305. package/dist/shared/services/runtime/managed-service-supervisor.service.d.ts +2 -1
  306. package/dist/shared/services/runtime/managed-service-supervisor.service.d.ts.map +1 -0
  307. package/dist/shared/services/runtime/managed-service-supervisor.service.js +2 -0
  308. package/dist/shared/services/runtime/managed-service-supervisor.service.js.map +1 -0
  309. package/dist/shared/services/runtime/nextclaw-distribution.service.d.ts +2 -1
  310. package/dist/shared/services/runtime/nextclaw-distribution.service.d.ts.map +1 -0
  311. package/dist/shared/services/runtime/nextclaw-distribution.service.js +2 -0
  312. package/dist/shared/services/runtime/nextclaw-distribution.service.js.map +1 -0
  313. package/dist/shared/services/runtime/runtime-command.service.d.ts +2 -1
  314. package/dist/shared/services/runtime/runtime-command.service.d.ts.map +1 -0
  315. package/dist/shared/services/runtime/runtime-command.service.js +2 -0
  316. package/dist/shared/services/runtime/runtime-command.service.js.map +1 -0
  317. package/dist/shared/services/runtime/runtime-config-init.service.d.ts +2 -1
  318. package/dist/shared/services/runtime/runtime-config-init.service.d.ts.map +1 -0
  319. package/dist/shared/services/runtime/runtime-config-init.service.js +2 -0
  320. package/dist/shared/services/runtime/runtime-config-init.service.js.map +1 -0
  321. package/dist/shared/services/runtime/service-managed-startup.service.d.ts +2 -1
  322. package/dist/shared/services/runtime/service-managed-startup.service.d.ts.map +1 -0
  323. package/dist/shared/services/runtime/service-managed-startup.service.js +2 -0
  324. package/dist/shared/services/runtime/service-managed-startup.service.js.map +1 -0
  325. package/dist/shared/services/runtime/utils/managed-service-routing.utils.d.ts +2 -1
  326. package/dist/shared/services/runtime/utils/managed-service-routing.utils.d.ts.map +1 -0
  327. package/dist/shared/services/runtime/utils/managed-service-routing.utils.js +2 -0
  328. package/dist/shared/services/runtime/utils/managed-service-routing.utils.js.map +1 -0
  329. package/dist/shared/services/runtime/utils/service-remote-runtime.utils.d.ts +2 -1
  330. package/dist/shared/services/runtime/utils/service-remote-runtime.utils.d.ts.map +1 -0
  331. package/dist/shared/services/runtime/utils/service-remote-runtime.utils.js +2 -0
  332. package/dist/shared/services/runtime/utils/service-remote-runtime.utils.js.map +1 -0
  333. package/dist/shared/services/ui/companion-runtime.service.d.ts +2 -1
  334. package/dist/shared/services/ui/companion-runtime.service.d.ts.map +1 -0
  335. package/dist/shared/services/ui/companion-runtime.service.js +2 -0
  336. package/dist/shared/services/ui/companion-runtime.service.js.map +1 -0
  337. package/dist/shared/services/ui/local-ui-discovery.service.d.ts +2 -1
  338. package/dist/shared/services/ui/local-ui-discovery.service.d.ts.map +1 -0
  339. package/dist/shared/services/ui/local-ui-discovery.service.js +2 -0
  340. package/dist/shared/services/ui/local-ui-discovery.service.js.map +1 -0
  341. package/dist/shared/services/ui/npm-runtime-update-host.service.d.ts +2 -1
  342. package/dist/shared/services/ui/npm-runtime-update-host.service.d.ts.map +1 -0
  343. package/dist/shared/services/ui/npm-runtime-update-host.service.js +2 -0
  344. package/dist/shared/services/ui/npm-runtime-update-host.service.js.map +1 -0
  345. package/dist/shared/services/ui/runtime-control-host.service.d.ts +2 -1
  346. package/dist/shared/services/ui/runtime-control-host.service.d.ts.map +1 -0
  347. package/dist/shared/services/ui/runtime-control-host.service.js +2 -0
  348. package/dist/shared/services/ui/runtime-control-host.service.js.map +1 -0
  349. package/dist/shared/services/ui/service-remote-access.service.d.ts +2 -1
  350. package/dist/shared/services/ui/service-remote-access.service.d.ts.map +1 -0
  351. package/dist/shared/services/ui/service-remote-access.service.js +2 -0
  352. package/dist/shared/services/ui/service-remote-access.service.js.map +1 -0
  353. package/dist/shared/services/ui/ui-bridge-api.service.d.ts +2 -1
  354. package/dist/shared/services/ui/ui-bridge-api.service.d.ts.map +1 -0
  355. package/dist/shared/services/ui/ui-bridge-api.service.js +2 -0
  356. package/dist/shared/services/ui/ui-bridge-api.service.js.map +1 -0
  357. package/dist/shared/services/workspace/workspace-manager.service.d.ts +2 -1
  358. package/dist/shared/services/workspace/workspace-manager.service.d.ts.map +1 -0
  359. package/dist/shared/services/workspace/workspace-manager.service.js +2 -0
  360. package/dist/shared/services/workspace/workspace-manager.service.js.map +1 -0
  361. package/dist/shared/stores/companion-runtime.store.d.ts +2 -1
  362. package/dist/shared/stores/companion-runtime.store.d.ts.map +1 -0
  363. package/dist/shared/stores/companion-runtime.store.js +2 -0
  364. package/dist/shared/stores/companion-runtime.store.js.map +1 -0
  365. package/dist/shared/stores/local-ui-runtime.store.d.ts +2 -1
  366. package/dist/shared/stores/local-ui-runtime.store.d.ts.map +1 -0
  367. package/dist/shared/stores/local-ui-runtime.store.js +2 -0
  368. package/dist/shared/stores/local-ui-runtime.store.js.map +1 -0
  369. package/dist/shared/stores/managed-service-state.store.d.ts +2 -1
  370. package/dist/shared/stores/managed-service-state.store.d.ts.map +1 -0
  371. package/dist/shared/stores/managed-service-state.store.js +2 -0
  372. package/dist/shared/stores/managed-service-state.store.js.map +1 -0
  373. package/dist/shared/stores/pending-restart.store.d.ts +2 -1
  374. package/dist/shared/stores/pending-restart.store.d.ts.map +1 -0
  375. package/dist/shared/stores/pending-restart.store.js +2 -0
  376. package/dist/shared/stores/pending-restart.store.js.map +1 -0
  377. package/dist/shared/types/cli.types.d.ts +2 -1
  378. package/dist/shared/types/cli.types.d.ts.map +1 -0
  379. package/dist/shared/types/distribution.types.d.ts +2 -1
  380. package/dist/shared/types/distribution.types.d.ts.map +1 -0
  381. package/dist/shared/utils/cli.utils.d.ts +2 -1
  382. package/dist/shared/utils/cli.utils.d.ts.map +1 -0
  383. package/dist/shared/utils/cli.utils.js +2 -0
  384. package/dist/shared/utils/cli.utils.js.map +1 -0
  385. package/dist/shared/utils/config-path.d.ts +2 -1
  386. package/dist/shared/utils/config-path.d.ts.map +1 -0
  387. package/dist/shared/utils/config-path.js +2 -0
  388. package/dist/shared/utils/config-path.js.map +1 -0
  389. package/dist/shared/utils/marketplace/cli-subcommand-launch.utils.d.ts +2 -1
  390. package/dist/shared/utils/marketplace/cli-subcommand-launch.utils.d.ts.map +1 -0
  391. package/dist/shared/utils/marketplace/cli-subcommand-launch.utils.js +2 -0
  392. package/dist/shared/utils/marketplace/cli-subcommand-launch.utils.js.map +1 -0
  393. package/dist/shared/utils/marketplace/service-marketplace-helpers.utils.d.ts +2 -1
  394. package/dist/shared/utils/marketplace/service-marketplace-helpers.utils.d.ts.map +1 -0
  395. package/dist/shared/utils/marketplace/service-marketplace-helpers.utils.js +2 -0
  396. package/dist/shared/utils/marketplace/service-marketplace-helpers.utils.js.map +1 -0
  397. package/dist/shared/utils/package/package-manifest.utils.d.ts +2 -1
  398. package/dist/shared/utils/package/package-manifest.utils.d.ts.map +1 -0
  399. package/dist/shared/utils/package/package-manifest.utils.js +2 -0
  400. package/dist/shared/utils/package/package-manifest.utils.js.map +1 -0
  401. package/dist/shared/utils/runtime-helpers.d.ts +2 -1
  402. package/dist/shared/utils/runtime-helpers.d.ts.map +1 -0
  403. package/dist/shared/utils/runtime-helpers.js +2 -0
  404. package/dist/shared/utils/runtime-helpers.js.map +1 -0
  405. package/dist/shared/utils/service-port-probe.utils.d.ts +2 -1
  406. package/dist/shared/utils/service-port-probe.utils.d.ts.map +1 -0
  407. package/dist/shared/utils/service-port-probe.utils.js +2 -0
  408. package/dist/shared/utils/service-port-probe.utils.js.map +1 -0
  409. package/dist/shared/utils/startup-trace.d.ts +2 -1
  410. package/dist/shared/utils/startup-trace.d.ts.map +1 -0
  411. package/dist/shared/utils/startup-trace.js +2 -0
  412. package/dist/shared/utils/startup-trace.js.map +1 -0
  413. package/dist/shared/utils/top-level-nextclaw-command-env.utils.d.ts +2 -1
  414. package/dist/shared/utils/top-level-nextclaw-command-env.utils.d.ts.map +1 -0
  415. package/dist/shared/utils/top-level-nextclaw-command-env.utils.js +2 -0
  416. package/dist/shared/utils/top-level-nextclaw-command-env.utils.js.map +1 -0
  417. package/package.json +20 -20
@@ -11,4 +11,5 @@ declare class ServeCommands {
11
11
  run: (opts: StartCommandOptions) => Promise<void>;
12
12
  }
13
13
  //#endregion
14
- export { ServeCommands };
14
+ export { ServeCommands };
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/cli/commands/serve/index.ts"],"mappings":";;;;cAIa,aAAA;EAAA,iBAEQ,IAAA;cAAA,IAAA;IACf,qBAAA,EAAuB,qBAAA;IACvB,gBAAA;EAAA;EAIJ,GAAA,GAAa,IAAA,EAAM,mBAAA,KAAsB,OAAA;AAAA"}
@@ -17,3 +17,5 @@ var ServeCommands = class {
17
17
  };
18
18
  //#endregion
19
19
  export { ServeCommands };
20
+
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/cli/commands/serve/index.ts"],"sourcesContent":["import { resolveManagedServiceUiOverrides } from \"@nextclaw-service/shared/utils/runtime-helpers.js\";\nimport type { RuntimeCommandService } from \"@nextclaw-service/shared/services/runtime/runtime-command.service.js\";\nimport type { StartCommandOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\n\nexport class ServeCommands {\n constructor(\n private readonly deps: {\n runtimeCommandService: RuntimeCommandService;\n forcedPublicHost: string;\n }\n ) {}\n\n run = async (opts: StartCommandOptions): Promise<void> => {\n const uiOverrides = resolveManagedServiceUiOverrides({\n uiPort: opts.uiPort,\n forcedPublicHost: this.deps.forcedPublicHost\n });\n\n await this.deps.runtimeCommandService.runForeground({\n uiOverrides,\n open: Boolean(opts.open),\n });\n };\n}\n"],"mappings":";;AAIA,IAAa,gBAAb,MAA2B;CACzB,YACE,MAIA;AAJiB,OAAA,OAAA;;CAMnB,MAAM,OAAO,SAA6C;EACxD,MAAM,cAAc,iCAAiC;GACnD,QAAQ,KAAK;GACb,kBAAkB,KAAK,KAAK;GAC7B,CAAC;AAEF,QAAM,KAAK,KAAK,sBAAsB,cAAc;GAClD;GACA,MAAM,QAAQ,KAAK,KAAK;GACzB,CAAC"}
@@ -23,4 +23,5 @@ declare class SkillsCommands {
23
23
  update: (options: Omit<MarketplacePublishCommandOptions, "publishedAt">) => Promise<void>;
24
24
  }
25
25
  //#endregion
26
- export { SkillsCommands };
26
+ export { SkillsCommands };
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/cli/commands/skills/index.ts"],"mappings":";;;;cAWa,cAAA;EAAA,iBACM,kBAAA;EAEjB,SAAA,GAAmB,OAAA,GAAS,6BAAA,KAAqC,OAAA;EAiCjE,IAAA,GAAc,QAAA,UAAkB,OAAA,GAAS,wBAAA,KAAgC,OAAA;EA0BzE,OAAA,GAAiB,OAAA;IACf,IAAA;IACA,OAAA;IACA,GAAA;IACA,KAAA;IACA,UAAA;EAAA,MACE,OAAA;EAuBJ,iBAAA,GAA2B,OAAA,GAAS,qCAAA,KAA6C,OAAA;EA6BjF,eAAA,GAAyB,IAAA,UAAc,OAAA;IAAW,OAAA;IAAkB,IAAA;EAAA,MAAwB,OAAA;EAyB5F,oBAAA,GAA8B,OAAA,GAAS,wCAAA,KAAgD,OAAA;EAqBvF,OAAA,GAAiB,OAAA,EAAS,gCAAA,KAAmC,OAAA;EAK7D,MAAA,GAAgB,OAAA,EAAS,IAAA,CAAK,gCAAA,qBAAmD,OAAA;AAAA"}
@@ -145,3 +145,5 @@ var SkillsCommands = class {
145
145
  };
146
146
  //#endregion
147
147
  export { SkillsCommands };
148
+
149
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/cli/commands/skills/index.ts"],"sourcesContent":["import { loadConfig } from \"@nextclaw/core\";\nimport { resolveSkillsInstallWorkdir } from \"@nextclaw-service/shared/utils/runtime-helpers.js\";\nimport {\n buildMarketplacePublishOptions,\n buildMarketplaceUpdateOptions,\n type MarketplacePublishCommandOptions,\n} from \"./marketplace-command-options.utils.js\";\nimport { installMarketplaceSkill, publishMarketplaceSkill } from \"./marketplace.utils.js\";\nimport { SkillsQueryService } from \"./skills-query.service.js\";\nimport type { MarketplaceSkillsRecommendCommandOptions, MarketplaceSkillsSearchCommandOptions, SkillsInfoCommandOptions, SkillsInstalledCommandOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\n\nexport class SkillsCommands {\n private readonly skillsQueryService = new SkillsQueryService();\n\n installed = async (options: SkillsInstalledCommandOptions = {}): Promise<void> => {\n const config = loadConfig();\n const workdir = resolveSkillsInstallWorkdir({\n explicitWorkdir: options.workdir,\n configuredWorkspace: config.agents.defaults.workspace,\n });\n const result = this.skillsQueryService.listInstalled({\n workdir,\n scope: options.scope,\n query: options.query,\n });\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n if (result.skills.length === 0) {\n console.log(\"No installed skills found.\");\n return;\n }\n\n for (const skill of result.skills) {\n console.log(`${skill.name} (${skill.scope})`);\n console.log(` ref: ${skill.ref}`);\n console.log(` path: ${skill.path}`);\n console.log(` summary: ${skill.summary ?? \"-\"}`);\n console.log(` description: ${skill.description ?? \"-\"}`);\n console.log(` tags: ${skill.tags.join(\", \") || \"-\"}`);\n console.log(` always: ${skill.always ? \"yes\" : \"no\"}`);\n }\n };\n\n info = async (selector: string, options: SkillsInfoCommandOptions = {}): Promise<void> => {\n const config = loadConfig();\n const workdir = resolveSkillsInstallWorkdir({\n explicitWorkdir: options.workdir,\n configuredWorkspace: config.agents.defaults.workspace,\n });\n const result = this.skillsQueryService.getInstalledInfo({\n workdir,\n selector,\n });\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log(`${result.name} (${result.scope})`);\n console.log(` ref: ${result.ref}`);\n console.log(` path: ${result.path}`);\n console.log(` summary: ${result.summary ?? \"-\"}`);\n console.log(` description: ${result.description ?? \"-\"}`);\n console.log(` author: ${result.author ?? \"-\"}`);\n console.log(` tags: ${result.tags.join(\", \") || \"-\"}`);\n console.log(` always: ${result.always ? \"yes\" : \"no\"}`);\n };\n\n install = async (options: {\n slug: string;\n workdir?: string;\n dir?: string;\n force?: boolean;\n apiBaseUrl?: string;\n }): Promise<void> => {\n const { apiBaseUrl, dir, force, slug, workdir: explicitWorkdir } = options;\n const config = loadConfig();\n const workdir = resolveSkillsInstallWorkdir({\n explicitWorkdir,\n configuredWorkspace: config.agents.defaults.workspace,\n });\n const result = await installMarketplaceSkill({\n slug,\n workdir,\n dir,\n force,\n apiBaseUrl,\n });\n\n if (result.alreadyInstalled) {\n console.log(`✓ ${result.slug} is already installed`);\n } else {\n console.log(`✓ Installed ${result.slug} (${result.source})`);\n }\n console.log(` Path: ${result.destinationDir}`);\n };\n\n marketplaceSearch = async (options: MarketplaceSkillsSearchCommandOptions = {}): Promise<void> => {\n const result = await this.skillsQueryService.searchMarketplaceSkills({\n apiBaseUrl: options.apiBase,\n query: options.query,\n tag: options.tag,\n sort: options.sort,\n page: options.page,\n pageSize: options.pageSize,\n });\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n if (result.items.length === 0) {\n console.log(\"No marketplace skills found.\");\n return;\n }\n\n for (const item of result.items) {\n console.log(`${item.name} (${item.slug})`);\n console.log(` summary: ${item.summary}`);\n console.log(` author: ${item.author}`);\n console.log(` tags: ${item.tags.join(\", \") || \"-\"}`);\n console.log(` install: ${item.install.command}`);\n }\n };\n\n marketplaceInfo = async (slug: string, options: { apiBase?: string; json?: boolean } = {}): Promise<void> => {\n const result = await this.skillsQueryService.getMarketplaceSkillInfo({\n apiBaseUrl: options.apiBase,\n slug,\n });\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log(`${result.item.name} (${result.item.slug})`);\n console.log(` summary: ${result.item.summary}`);\n console.log(` description: ${result.item.description ?? \"-\"}`);\n console.log(` author: ${result.item.author}`);\n console.log(` tags: ${result.item.tags.join(\", \") || \"-\"}`);\n console.log(` install: ${result.item.install.command}`);\n console.log(` content: ${result.content ? \"available\" : \"unavailable\"}`);\n if (result.content) {\n console.log(` source: ${result.content.source}`);\n } else if (result.contentUnavailableReason) {\n console.log(` reason: ${result.contentUnavailableReason}`);\n }\n };\n\n marketplaceRecommend = async (options: MarketplaceSkillsRecommendCommandOptions = {}): Promise<void> => {\n const result = await this.skillsQueryService.recommendMarketplaceSkills({\n apiBaseUrl: options.apiBase,\n scene: options.scene,\n limit: options.limit,\n });\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log(`${result.title} (${result.sceneId})`);\n if (result.description) {\n console.log(` ${result.description}`);\n }\n for (const item of result.items) {\n console.log(`- ${item.name} (${item.slug})`);\n }\n };\n\n publish = async (options: MarketplacePublishCommandOptions): Promise<void> => {\n const result = await publishMarketplaceSkill(buildMarketplacePublishOptions(options));\n console.log(`${result.created ? `✓ Published new skill: ${result.packageName}` : `✓ Updated skill: ${result.packageName}`}\\n Alias: ${result.slug}\\n Files: ${result.fileCount}`);\n };\n\n update = async (options: Omit<MarketplacePublishCommandOptions, \"publishedAt\">): Promise<void> => {\n const result = await publishMarketplaceSkill(buildMarketplaceUpdateOptions(options));\n console.log(`✓ Updated skill: ${result.packageName}`);\n console.log(` Alias: ${result.slug}`);\n console.log(` Files: ${result.fileCount}`);\n };\n}\n"],"mappings":"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"}
@@ -38,4 +38,5 @@ declare function writeMarketplaceSkillFiles(params: {
38
38
  }): Promise<void>;
39
39
  declare function readMarketplaceEnvelope<T>(response: Response): Promise<MarketplaceEnvelope<T>>;
40
40
  //#endregion
41
- export { MarketplaceSkillFileManifestEntry, collectMarketplaceSkillFiles, fetchMarketplaceSkillFileBlob, fetchMarketplaceSkillFiles, fetchMarketplaceSkillItem, readMarketplaceEnvelope, resolveMarketplaceAdminToken, resolveMarketplaceApiBase, writeMarketplaceSkillFiles };
41
+ export { MarketplaceSkillFileManifestEntry, collectMarketplaceSkillFiles, fetchMarketplaceSkillFileBlob, fetchMarketplaceSkillFiles, fetchMarketplaceSkillItem, readMarketplaceEnvelope, resolveMarketplaceAdminToken, resolveMarketplaceApiBase, writeMarketplaceSkillFiles };
42
+ //# sourceMappingURL=marketplace-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace-client.d.ts","names":[],"sources":["../../../../src/cli/commands/skills/marketplace-client.ts"],"mappings":";KAMK,mBAAA;EACH,EAAA;EACA,IAAA,GAAO,CAAA;EACP,KAAA;IACE,IAAA;IACA,OAAA;EAAA;AAAA;AAAA,KAIC,2BAAA;AAAA,KAEO,iCAAA;EACV,IAAA;EACA,YAAA;EACA,aAAA;AAAA;AAAA,iBAGc,yBAAA,CAA0B,YAAA;AAAA,iBAO1B,4BAAA,CAA6B,aAAA;AAAA,iBAKvB,yBAAA,CACpB,OAAA,UACA,IAAA,WACC,OAAA;EAAU,IAAA;EAAc,WAAA;EAAsB,OAAA;IAAW,IAAA,EAAM,2BAAA;EAAA;AAAA;AAAA,iBAqC5C,0BAAA,CACpB,OAAA,UACA,IAAA,WACC,OAAA;EAAU,KAAA,EAAO,iCAAA;AAAA;AAAA,iBAsCE,6BAAA,CACpB,OAAA,UACA,IAAA,UACA,IAAA,EAAM,iCAAA,GACL,OAAA,CAAQ,MAAA;AAAA,iBAiBK,4BAAA,CAA6B,OAAA,WAAkB,KAAA;EAAQ,IAAA;EAAc,aAAA;AAAA;AAAA,iBA0B/D,0BAAA,CAA2B,MAAA;EAC/C,cAAA;EACA,KAAA,EAAO,iCAAA;EACP,OAAA;EACA,IAAA;AAAA,IACE,OAAA;AAAA,iBAiBkB,uBAAA,GAAA,CAA2B,QAAA,EAAU,QAAA,GAAW,OAAA,CAAQ,mBAAA,CAAoB,CAAA"}
@@ -120,3 +120,5 @@ function isRecord(value) {
120
120
  }
121
121
  //#endregion
122
122
  export { collectMarketplaceSkillFiles, fetchMarketplaceSkillFileBlob, fetchMarketplaceSkillFiles, fetchMarketplaceSkillItem, readMarketplaceEnvelope, resolveMarketplaceAdminToken, resolveMarketplaceApiBase, writeMarketplaceSkillFiles };
123
+
124
+ //# sourceMappingURL=marketplace-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace-client.js","names":[],"sources":["../../../../src/cli/commands/skills/marketplace-client.ts"],"sourcesContent":["import { mkdirSync, readdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { runWithMarketplaceNetworkRetry } from \"./marketplace-network-retry.js\";\n\nconst DEFAULT_MARKETPLACE_API_BASE = \"https://marketplace-api.nextclaw.io\";\n\ntype MarketplaceEnvelope<T> = {\n ok: boolean;\n data?: T;\n error?: {\n code?: string;\n message?: string;\n };\n};\n\ntype MarketplaceSkillInstallKind = \"builtin\" | \"marketplace\";\n\nexport type MarketplaceSkillFileManifestEntry = {\n path: string;\n downloadPath?: string;\n contentBase64?: string;\n};\n\nexport function resolveMarketplaceApiBase(explicitBase: string | undefined): string {\n const raw = explicitBase?.trim()\n || process.env.NEXTCLAW_MARKETPLACE_API_BASE?.trim()\n || DEFAULT_MARKETPLACE_API_BASE;\n return raw.replace(/\\/+$/, \"\");\n}\n\nexport function resolveMarketplaceAdminToken(explicitToken: string | undefined): string | undefined {\n const token = explicitToken?.trim() || process.env.NEXTCLAW_MARKETPLACE_ADMIN_TOKEN?.trim();\n return token && token.length > 0 ? token : undefined;\n}\n\nexport async function fetchMarketplaceSkillItem(\n apiBase: string,\n slug: string\n): Promise<{ slug: string; packageName?: string; install: { kind: MarketplaceSkillInstallKind } }> {\n return runWithMarketplaceNetworkRetry(async () => {\n const response = await fetch(`${apiBase}/api/v1/skills/items/${encodeURIComponent(slug)}`, {\n headers: {\n Accept: \"application/json\"\n }\n });\n const payload = await readMarketplaceEnvelope<{\n slug?: string;\n packageName?: string;\n install: { kind: MarketplaceSkillInstallKind | string };\n }>(response);\n\n if (!payload.ok || !payload.data) {\n const message = payload.error?.message || `marketplace skill fetch failed: ${response.status}`;\n throw new Error(message);\n }\n\n const kind = payload.data.install?.kind;\n if (kind !== \"builtin\" && kind !== \"marketplace\") {\n throw new Error(`Unsupported skill install kind from marketplace: ${String(kind)}`);\n }\n\n return {\n slug: typeof payload.data.slug === \"string\" && payload.data.slug.trim()\n ? payload.data.slug.trim()\n : slug,\n packageName: typeof payload.data.packageName === \"string\" && payload.data.packageName.trim()\n ? payload.data.packageName.trim()\n : undefined,\n install: {\n kind\n }\n };\n });\n}\n\nexport async function fetchMarketplaceSkillFiles(\n apiBase: string,\n slug: string\n): Promise<{ files: MarketplaceSkillFileManifestEntry[] }> {\n return runWithMarketplaceNetworkRetry(async () => {\n const response = await fetch(`${apiBase}/api/v1/skills/items/${encodeURIComponent(slug)}/files`, {\n headers: {\n Accept: \"application/json\"\n }\n });\n\n const payload = await readMarketplaceEnvelope<{ files: unknown }>(response);\n if (!payload.ok || !payload.data) {\n const message = payload.error?.message || `marketplace skill file fetch failed: ${response.status}`;\n throw new Error(message);\n }\n\n if (!isRecord(payload.data) || !Array.isArray(payload.data.files)) {\n throw new Error(\"Invalid marketplace skill file manifest response\");\n }\n\n const files = payload.data.files.map((entry, index) => {\n if (!isRecord(entry) || typeof entry.path !== \"string\" || entry.path.trim().length === 0) {\n throw new Error(`Invalid marketplace skill file manifest at index ${index}`);\n }\n const normalized: MarketplaceSkillFileManifestEntry = {\n path: entry.path.trim()\n };\n if (typeof entry.downloadPath === \"string\" && entry.downloadPath.trim().length > 0) {\n normalized.downloadPath = entry.downloadPath.trim();\n }\n if (typeof entry.contentBase64 === \"string\" && entry.contentBase64.trim().length > 0) {\n normalized.contentBase64 = entry.contentBase64.trim();\n }\n return normalized;\n });\n\n return { files };\n });\n}\n\nexport async function fetchMarketplaceSkillFileBlob(\n apiBase: string,\n slug: string,\n file: MarketplaceSkillFileManifestEntry\n): Promise<Buffer> {\n const downloadUrl = resolveSkillFileDownloadUrl(apiBase, slug, file);\n return runWithMarketplaceNetworkRetry(async () => {\n const response = await fetch(downloadUrl, {\n headers: {\n Accept: \"application/octet-stream\"\n }\n });\n if (!response.ok) {\n const message = extractMarketplaceErrorMessage(await response.text(), response.status)\n || `marketplace skill file download failed: ${response.status}`;\n throw new Error(message);\n }\n return Buffer.from(await response.arrayBuffer());\n });\n}\n\nexport function collectMarketplaceSkillFiles(rootDir: string): Array<{ path: string; contentBase64: string }> {\n const output: Array<{ path: string; contentBase64: string }> = [];\n\n const walk = (dir: string, prefix: string): void => {\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const absolute = join(dir, entry.name);\n const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isDirectory()) {\n walk(absolute, relativePath);\n continue;\n }\n if (!entry.isFile()) {\n continue;\n }\n output.push({\n path: relativePath,\n contentBase64: readFileSync(absolute).toString(\"base64\"),\n });\n }\n };\n\n walk(rootDir, \"\");\n return output;\n}\n\nexport async function writeMarketplaceSkillFiles(params: {\n destinationDir: string;\n files: MarketplaceSkillFileManifestEntry[];\n apiBase: string;\n slug: string;\n}): Promise<void> {\n const { destinationDir, files, apiBase, slug } = params;\n for (const file of files) {\n const targetPath = resolve(destinationDir, ...file.path.split(\"/\"));\n const rel = relative(destinationDir, targetPath);\n if (rel.startsWith(\"..\") || isAbsolute(rel)) {\n throw new Error(`Invalid marketplace file path: ${file.path}`);\n }\n\n mkdirSync(dirname(targetPath), { recursive: true });\n const bytes = file.contentBase64\n ? decodeMarketplaceFileContent(file.path, file.contentBase64)\n : await fetchMarketplaceSkillFileBlob(apiBase, slug, file);\n writeFileSync(targetPath, bytes);\n }\n}\n\nexport async function readMarketplaceEnvelope<T>(response: Response): Promise<MarketplaceEnvelope<T>> {\n const raw = await response.text();\n let payload: unknown;\n try {\n payload = raw.length > 0 ? JSON.parse(raw) : null;\n } catch {\n throw new Error(`Invalid marketplace response: ${response.status}`);\n }\n\n if (!isRecord(payload) || typeof payload.ok !== \"boolean\") {\n throw new Error(`Invalid marketplace response shape: ${response.status}`);\n }\n\n return payload as MarketplaceEnvelope<T>;\n}\n\nfunction resolveSkillFileDownloadUrl(\n apiBase: string,\n slug: string,\n file: MarketplaceSkillFileManifestEntry\n): string {\n if (file.downloadPath) {\n return file.downloadPath.startsWith(\"http://\") || file.downloadPath.startsWith(\"https://\")\n ? file.downloadPath\n : `${apiBase}${file.downloadPath}`;\n }\n return `${apiBase}/api/v1/skills/items/${encodeURIComponent(slug)}/files/blob?path=${encodeURIComponent(file.path)}`;\n}\n\nfunction extractMarketplaceErrorMessage(raw: string, fallbackStatus: number): string | undefined {\n if (!raw) {\n return undefined;\n }\n try {\n const payload = JSON.parse(raw) as MarketplaceEnvelope<unknown>;\n return payload.error?.message;\n } catch {\n return raw || `Request failed (${fallbackStatus})`;\n }\n}\n\nfunction decodeMarketplaceFileContent(path: string, contentBase64: string): Buffer {\n const normalized = contentBase64.replace(/\\s+/g, \"\");\n if (!normalized || normalized.length % 4 !== 0 || !/^[A-Za-z0-9+/]+={0,2}$/.test(normalized)) {\n throw new Error(`Invalid marketplace file contentBase64 for path: ${path}`);\n }\n return Buffer.from(normalized, \"base64\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"mappings":"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"}
@@ -22,4 +22,5 @@ type MarketplacePublishCommandOptions = {
22
22
  declare function buildMarketplacePublishOptions(options: MarketplacePublishCommandOptions): MarketplaceSkillPublishOptions;
23
23
  declare function buildMarketplaceUpdateOptions(options: Omit<MarketplacePublishCommandOptions, "publishedAt">): MarketplaceSkillPublishOptions;
24
24
  //#endregion
25
- export { MarketplacePublishCommandOptions, buildMarketplacePublishOptions, buildMarketplaceUpdateOptions };
25
+ export { MarketplacePublishCommandOptions, buildMarketplacePublishOptions, buildMarketplaceUpdateOptions };
26
+ //# sourceMappingURL=marketplace-command-options.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace-command-options.utils.d.ts","names":[],"sources":["../../../../src/cli/commands/skills/marketplace-command-options.utils.ts"],"mappings":";;;KAGY,gCAAA;EACV,GAAA;EACA,IAAA;EACA,IAAA;EACA,WAAA;EACA,KAAA;EACA,IAAA;EACA,OAAA;EACA,WAAA;EACA,MAAA;EACA,GAAA;EACA,UAAA;EACA,QAAA;EACA,WAAA;EACA,SAAA;EACA,UAAA;EACA,KAAA;AAAA;AAAA,iBAGc,8BAAA,CAA+B,OAAA,EAAS,gCAAA,GAAmC,8BAAA;AAAA,iBAuC3E,6BAAA,CACd,OAAA,EAAS,IAAA,CAAK,gCAAA,mBACb,8BAAA"}
@@ -29,3 +29,5 @@ function buildMarketplaceUpdateOptions(options) {
29
29
  }
30
30
  //#endregion
31
31
  export { buildMarketplacePublishOptions, buildMarketplaceUpdateOptions };
32
+
33
+ //# sourceMappingURL=marketplace-command-options.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace-command-options.utils.js","names":[],"sources":["../../../../src/cli/commands/skills/marketplace-command-options.utils.ts"],"sourcesContent":["import { expandHome } from \"@nextclaw/core\";\nimport type { MarketplaceSkillPublishOptions } from \"./marketplace.utils.js\";\n\nexport type MarketplacePublishCommandOptions = {\n dir: string;\n meta?: string;\n slug?: string;\n packageName?: string;\n scope?: string;\n name?: string;\n summary?: string;\n description?: string;\n author?: string;\n tag?: string[];\n sourceRepo?: string;\n homepage?: string;\n publishedAt?: string;\n updatedAt?: string;\n apiBaseUrl?: string;\n token?: string;\n};\n\nexport function buildMarketplacePublishOptions(options: MarketplacePublishCommandOptions): MarketplaceSkillPublishOptions {\n const {\n apiBaseUrl,\n author,\n description,\n dir,\n homepage,\n meta,\n name,\n packageName,\n publishedAt,\n scope,\n slug,\n sourceRepo,\n summary,\n tag,\n token,\n updatedAt\n } = options;\n return {\n skillDir: expandHome(dir),\n metaFile: meta ? expandHome(meta) : undefined,\n slug,\n packageName,\n scope,\n name,\n summary,\n description,\n author,\n tags: tag,\n sourceRepo,\n homepage,\n publishedAt,\n updatedAt,\n apiBaseUrl,\n token\n };\n}\n\nexport function buildMarketplaceUpdateOptions(\n options: Omit<MarketplacePublishCommandOptions, \"publishedAt\">\n): MarketplaceSkillPublishOptions {\n return {\n ...buildMarketplacePublishOptions(options),\n requireExisting: true\n };\n}\n"],"mappings":";;AAsBA,SAAgB,+BAA+B,SAA2E;CACxH,MAAM,EACJ,YACA,QACA,aACA,KACA,UACA,MACA,MACA,aACA,aACA,OACA,MACA,YACA,SACA,KACA,OACA,cACE;AACJ,QAAO;EACL,UAAU,WAAW,IAAI;EACzB,UAAU,OAAO,WAAW,KAAK,GAAG,KAAA;EACpC;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACD;;AAGH,SAAgB,8BACd,SACgC;AAChC,QAAO;EACL,GAAG,+BAA+B,QAAQ;EAC1C,iBAAiB;EAClB"}
@@ -11,4 +11,5 @@ declare function validateSkillSlug(raw: string, fieldName: string): string;
11
11
  declare function validateSkillSelector(raw: string, fieldName: string): string;
12
12
  declare function normalizeTags(rawTags: string[] | undefined): string[];
13
13
  //#endregion
14
- export { normalizeTags, resolvePublishPackageName, validateSkillSelector, validateSkillSlug };
14
+ export { normalizeTags, resolvePublishPackageName, validateSkillSelector, validateSkillSlug };
15
+ //# sourceMappingURL=marketplace-identity.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace-identity.utils.d.ts","names":[],"sources":["../../../../src/cli/commands/skills/marketplace-identity.utils.ts"],"mappings":";;iBAEgB,yBAAA,CAA0B,MAAA;EACxC,mBAAA;EACA,aAAA;EACA,IAAA;EACA,iBAAA;EACA,WAAA,EAAa,gBAAA;AAAA;AAAA,iBA8DC,iBAAA,CAAkB,GAAA,UAAa,SAAA;AAAA,iBAO/B,qBAAA,CAAsB,GAAA,UAAa,SAAA;AAAA,iBAQnC,aAAA,CAAc,OAAA"}
@@ -75,3 +75,5 @@ function parsePackageName(raw, fieldName) {
75
75
  }
76
76
  //#endregion
77
77
  export { normalizeTags, resolvePublishPackageName, validateSkillSelector, validateSkillSlug };
78
+
79
+ //# sourceMappingURL=marketplace-identity.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace-identity.utils.js","names":[],"sources":["../../../../src/cli/commands/skills/marketplace-identity.utils.ts"],"sourcesContent":["import type { PlatformMeResult } from \"@nextclaw-service/commands/platform-auth/index.js\";\n\nexport function resolvePublishPackageName(params: {\n explicitPackageName?: string;\n explicitScope?: string;\n slug: string;\n adminTokenPresent: boolean;\n currentUser: PlatformMeResult | null;\n}): string {\n const {\n explicitPackageName,\n explicitScope,\n slug,\n adminTokenPresent,\n currentUser\n } = params;\n const normalizedExplicitPackageName = explicitPackageName?.trim();\n if (normalizedExplicitPackageName) {\n return resolveExplicitPackageName(normalizedExplicitPackageName, adminTokenPresent, currentUser);\n }\n\n const normalizedScope = explicitScope?.trim().toLowerCase();\n if (normalizedScope) {\n return resolveScopedPackageName(normalizedScope, slug, adminTokenPresent, currentUser);\n }\n\n return resolveDefaultPackageName(slug, adminTokenPresent, currentUser);\n}\n\nfunction resolveExplicitPackageName(\n packageName: string,\n adminTokenPresent: boolean,\n currentUser: PlatformMeResult | null\n): string {\n const parsed = parsePackageName(packageName, \"packageName\");\n if (parsed.scope === \"nextclaw\") {\n assertOfficialScopeAllowed(adminTokenPresent, currentUser);\n return packageName;\n }\n assertPersonalScopeAllowed(parsed.scope, currentUser);\n return packageName;\n}\n\nfunction resolveScopedPackageName(\n scope: string,\n slug: string,\n adminTokenPresent: boolean,\n currentUser: PlatformMeResult | null\n): string {\n if (scope === \"nextclaw\") {\n assertOfficialScopeAllowed(adminTokenPresent, currentUser);\n return `@nextclaw/${slug}`;\n }\n assertPersonalScopeAllowed(scope, currentUser);\n return `@${scope}/${slug}`;\n}\n\nfunction resolveDefaultPackageName(\n slug: string,\n adminTokenPresent: boolean,\n currentUser: PlatformMeResult | null\n): string {\n if (adminTokenPresent) {\n return `@nextclaw/${slug}`;\n }\n const username = requirePlatformUsername(currentUser);\n return `@${username}/${slug}`;\n}\n\nexport function validateSkillSlug(raw: string, fieldName: string): string {\n if (!/^[A-Za-z0-9._-]+$/.test(raw)) {\n throw new Error(`Invalid ${fieldName}: ${raw}`);\n }\n return raw;\n}\n\nexport function validateSkillSelector(raw: string, fieldName: string): string {\n if (raw.startsWith(\"@\")) {\n parsePackageName(raw, fieldName);\n return raw;\n }\n return validateSkillSlug(raw, fieldName);\n}\n\nexport function normalizeTags(rawTags: string[] | undefined): string[] {\n const seen = new Set<string>();\n const output: string[] = [];\n for (const rawTag of rawTags ?? []) {\n const tag = rawTag.trim();\n if (!tag || seen.has(tag)) {\n continue;\n }\n seen.add(tag);\n output.push(tag);\n }\n return output.length > 0 ? output : [\"skill\"];\n}\n\nfunction canPublishOfficialScope(\n adminTokenPresent: boolean,\n currentUser: PlatformMeResult | null\n): boolean {\n return adminTokenPresent || currentUser?.user.role === \"admin\";\n}\n\nfunction assertOfficialScopeAllowed(adminTokenPresent: boolean, currentUser: PlatformMeResult | null): void {\n if (!canPublishOfficialScope(adminTokenPresent, currentUser)) {\n throw new Error(\"Publishing to @nextclaw/* requires admin permission.\");\n }\n}\n\nfunction assertPersonalScopeAllowed(scope: string, currentUser: PlatformMeResult | null): void {\n const username = requirePlatformUsername(currentUser);\n if (scope !== username) {\n throw new Error(`Personal publish scope must match your username: @${username}/*`);\n }\n}\n\nfunction requirePlatformUsername(currentUser: PlatformMeResult | null): string {\n const username = currentUser?.user.username;\n if (!username) {\n throw new Error(\n \"Set your NextClaw username before publishing personal skills. \"\n + \"Open NextClaw Web account settings: https://platform.nextclaw.io/account \"\n + \"or run `nextclaw account set-username <username>`.\"\n );\n }\n return username;\n}\n\nfunction parsePackageName(raw: string, fieldName: string): { scope: string; name: string } {\n const match = raw.match(/^@([a-z0-9](?:[a-z0-9-]{1,30}[a-z0-9])?)\\/([A-Za-z0-9._-]+)$/);\n if (!match) {\n throw new Error(`Invalid ${fieldName}: ${raw}`);\n }\n return {\n scope: match[1],\n name: match[2]\n };\n}\n"],"mappings":";AAEA,SAAgB,0BAA0B,QAM/B;CACT,MAAM,EACJ,qBACA,eACA,MACA,mBACA,gBACE;CACJ,MAAM,gCAAgC,qBAAqB,MAAM;AACjE,KAAI,8BACF,QAAO,2BAA2B,+BAA+B,mBAAmB,YAAY;CAGlG,MAAM,kBAAkB,eAAe,MAAM,CAAC,aAAa;AAC3D,KAAI,gBACF,QAAO,yBAAyB,iBAAiB,MAAM,mBAAmB,YAAY;AAGxF,QAAO,0BAA0B,MAAM,mBAAmB,YAAY;;AAGxE,SAAS,2BACP,aACA,mBACA,aACQ;CACR,MAAM,SAAS,iBAAiB,aAAa,cAAc;AAC3D,KAAI,OAAO,UAAU,YAAY;AAC/B,6BAA2B,mBAAmB,YAAY;AAC1D,SAAO;;AAET,4BAA2B,OAAO,OAAO,YAAY;AACrD,QAAO;;AAGT,SAAS,yBACP,OACA,MACA,mBACA,aACQ;AACR,KAAI,UAAU,YAAY;AACxB,6BAA2B,mBAAmB,YAAY;AAC1D,SAAO,aAAa;;AAEtB,4BAA2B,OAAO,YAAY;AAC9C,QAAO,IAAI,MAAM,GAAG;;AAGtB,SAAS,0BACP,MACA,mBACA,aACQ;AACR,KAAI,kBACF,QAAO,aAAa;AAGtB,QAAO,IADU,wBAAwB,YAAY,CACjC,GAAG;;AAGzB,SAAgB,kBAAkB,KAAa,WAA2B;AACxE,KAAI,CAAC,oBAAoB,KAAK,IAAI,CAChC,OAAM,IAAI,MAAM,WAAW,UAAU,IAAI,MAAM;AAEjD,QAAO;;AAGT,SAAgB,sBAAsB,KAAa,WAA2B;AAC5E,KAAI,IAAI,WAAW,IAAI,EAAE;AACvB,mBAAiB,KAAK,UAAU;AAChC,SAAO;;AAET,QAAO,kBAAkB,KAAK,UAAU;;AAG1C,SAAgB,cAAc,SAAyC;CACrE,MAAM,uBAAO,IAAI,KAAa;CAC9B,MAAM,SAAmB,EAAE;AAC3B,MAAK,MAAM,UAAU,WAAW,EAAE,EAAE;EAClC,MAAM,MAAM,OAAO,MAAM;AACzB,MAAI,CAAC,OAAO,KAAK,IAAI,IAAI,CACvB;AAEF,OAAK,IAAI,IAAI;AACb,SAAO,KAAK,IAAI;;AAElB,QAAO,OAAO,SAAS,IAAI,SAAS,CAAC,QAAQ;;AAG/C,SAAS,wBACP,mBACA,aACS;AACT,QAAO,qBAAqB,aAAa,KAAK,SAAS;;AAGzD,SAAS,2BAA2B,mBAA4B,aAA4C;AAC1G,KAAI,CAAC,wBAAwB,mBAAmB,YAAY,CAC1D,OAAM,IAAI,MAAM,uDAAuD;;AAI3E,SAAS,2BAA2B,OAAe,aAA4C;CAC7F,MAAM,WAAW,wBAAwB,YAAY;AACrD,KAAI,UAAU,SACZ,OAAM,IAAI,MAAM,qDAAqD,SAAS,IAAI;;AAItF,SAAS,wBAAwB,aAA8C;CAC7E,MAAM,WAAW,aAAa,KAAK;AACnC,KAAI,CAAC,SACH,OAAM,IAAI,MACR,4LAGD;AAEH,QAAO;;AAGT,SAAS,iBAAiB,KAAa,WAAoD;CACzF,MAAM,QAAQ,IAAI,MAAM,+DAA+D;AACvF,KAAI,CAAC,MACH,OAAM,IAAI,MAAM,WAAW,UAAU,IAAI,MAAM;AAEjD,QAAO;EACL,OAAO,MAAM;EACb,MAAM,MAAM;EACb"}
@@ -1,4 +1,5 @@
1
1
  //#region src/cli/commands/skills/marketplace-network-retry.d.ts
2
2
  declare function runWithMarketplaceNetworkRetry<T>(action: () => Promise<T>): Promise<T>;
3
3
  //#endregion
4
- export { runWithMarketplaceNetworkRetry };
4
+ export { runWithMarketplaceNetworkRetry };
5
+ //# sourceMappingURL=marketplace-network-retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace-network-retry.d.ts","names":[],"sources":["../../../../src/cli/commands/skills/marketplace-network-retry.ts"],"mappings":";iBAoCsB,8BAAA,GAAA,CAAkC,MAAA,QAAc,OAAA,CAAQ,CAAA,IAAK,OAAA,CAAQ,CAAA"}
@@ -30,3 +30,5 @@ async function runWithMarketplaceNetworkRetry(action) {
30
30
  }
31
31
  //#endregion
32
32
  export { runWithMarketplaceNetworkRetry };
33
+
34
+ //# sourceMappingURL=marketplace-network-retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace-network-retry.js","names":[],"sources":["../../../../src/cli/commands/skills/marketplace-network-retry.ts"],"sourcesContent":["const MARKETPLACE_NETWORK_RETRY_ATTEMPTS = 5;\nconst MARKETPLACE_NETWORK_RETRY_BASE_MS = 350;\n\nfunction sleepMs(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction isRetryableMarketplaceNetworkError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n if (error.name === \"AbortError\") {\n return false;\n }\n const cause = (error as Error & { cause?: unknown }).cause;\n if (cause && typeof cause === \"object\" && cause !== null && \"code\" in cause) {\n const code = (cause as { code?: unknown }).code;\n if (\n code === \"ECONNRESET\"\n || code === \"ECONNREFUSED\"\n || code === \"ETIMEDOUT\"\n || code === \"EPIPE\"\n || code === \"ENOTFOUND\"\n || code === \"EAI_AGAIN\"\n ) {\n return true;\n }\n }\n if (error instanceof TypeError && error.message === \"fetch failed\") {\n return true;\n }\n return false;\n}\n\nexport async function runWithMarketplaceNetworkRetry<T>(action: () => Promise<T>): Promise<T> {\n let last: unknown;\n for (let attempt = 1; attempt <= MARKETPLACE_NETWORK_RETRY_ATTEMPTS; attempt++) {\n try {\n return await action();\n } catch (error) {\n last = error;\n if (attempt === MARKETPLACE_NETWORK_RETRY_ATTEMPTS || !isRetryableMarketplaceNetworkError(error)) {\n throw error;\n }\n await sleepMs(MARKETPLACE_NETWORK_RETRY_BASE_MS * 2 ** (attempt - 1));\n }\n }\n throw last;\n}\n"],"mappings":";AAAA,MAAM,qCAAqC;AAC3C,MAAM,oCAAoC;AAE1C,SAAS,QAAQ,IAA2B;AAC1C,QAAO,IAAI,SAAS,YAAY;AAC9B,aAAW,SAAS,GAAG;GACvB;;AAGJ,SAAS,mCAAmC,OAAyB;AACnE,KAAI,EAAE,iBAAiB,OACrB,QAAO;AAET,KAAI,MAAM,SAAS,aACjB,QAAO;CAET,MAAM,QAAS,MAAsC;AACrD,KAAI,SAAS,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAU,OAAO;EAC3E,MAAM,OAAQ,MAA6B;AAC3C,MACE,SAAS,gBACN,SAAS,kBACT,SAAS,eACT,SAAS,WACT,SAAS,eACT,SAAS,YAEZ,QAAO;;AAGX,KAAI,iBAAiB,aAAa,MAAM,YAAY,eAClD,QAAO;AAET,QAAO;;AAGT,eAAsB,+BAAkC,QAAsC;CAC5F,IAAI;AACJ,MAAK,IAAI,UAAU,GAAG,WAAW,oCAAoC,UACnE,KAAI;AACF,SAAO,MAAM,QAAQ;UACd,OAAO;AACd,SAAO;AACP,MAAI,YAAY,sCAAsC,CAAC,mCAAmC,MAAM,CAC9F,OAAM;AAER,QAAM,QAAQ,oCAAoC,MAAM,UAAU,GAAG;;AAGzE,OAAM"}
@@ -17,4 +17,5 @@ type MarketplaceSkillPublishMetadata = {
17
17
  };
18
18
  declare function readMarketplaceMetadataFile(skillDir: string, explicitMetaFile?: string): MarketplaceSkillPublishMetadata;
19
19
  //#endregion
20
- export { type LocalizedTextMap, MarketplaceSkillPublishMetadata, buildLocalizedTextMap, parseSkillFrontmatter, readMarketplaceMetadataFile };
20
+ export { type LocalizedTextMap, MarketplaceSkillPublishMetadata, buildLocalizedTextMap, parseSkillFrontmatter, readMarketplaceMetadataFile };
21
+ //# sourceMappingURL=marketplace.metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace.metadata.d.ts","names":[],"sources":["../../../../src/cli/commands/skills/marketplace.metadata.ts"],"mappings":";;;KAgBY,+BAAA;EACV,IAAA;EACA,IAAA;EACA,OAAA;EACA,WAAA,GAAc,gBAAA;EACd,WAAA;EACA,eAAA,GAAkB,gBAAA;EAClB,MAAA;EACA,IAAA;EACA,UAAA;EACA,QAAA;EACA,WAAA;EACA,SAAA;AAAA;AAAA,iBAGc,2BAAA,CACd,QAAA,UACA,gBAAA,YACC,+BAAA"}
@@ -70,3 +70,5 @@ function isRecord(value) {
70
70
  }
71
71
  //#endregion
72
72
  export { buildLocalizedTextMap, parseSkillFrontmatter, readMarketplaceMetadataFile };
73
+
74
+ //# sourceMappingURL=marketplace.metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace.metadata.js","names":[],"sources":["../../../../src/cli/commands/skills/marketplace.metadata.ts"],"sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport {\n buildLocalizedTextMap,\n parseSkillFrontmatter,\n type LocalizedTextMap,\n} from \"@nextclaw/kernel\";\n\nconst DEFAULT_MARKETPLACE_META_FILENAME = \"marketplace.json\";\n\nexport {\n buildLocalizedTextMap,\n parseSkillFrontmatter,\n type LocalizedTextMap,\n};\n\nexport type MarketplaceSkillPublishMetadata = {\n slug?: string;\n name?: string;\n summary?: string;\n summaryI18n?: LocalizedTextMap;\n description?: string;\n descriptionI18n?: LocalizedTextMap;\n author?: string;\n tags?: string[];\n sourceRepo?: string;\n homepage?: string;\n publishedAt?: string;\n updatedAt?: string;\n};\n\nexport function readMarketplaceMetadataFile(\n skillDir: string,\n explicitMetaFile?: string\n): MarketplaceSkillPublishMetadata {\n const metadataPath = resolveMarketplaceMetadataPath(skillDir, explicitMetaFile);\n if (!metadataPath) {\n return {};\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(readFileSync(metadataPath, \"utf8\"));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Invalid marketplace metadata file: ${metadataPath} (${message})`);\n }\n\n if (!isRecord(parsed)) {\n throw new Error(`Invalid marketplace metadata file: ${metadataPath} (root must be an object)`);\n }\n\n return {\n slug: readMetadataString(parsed, \"slug\"),\n name: readMetadataString(parsed, \"name\"),\n summary: readMetadataString(parsed, \"summary\"),\n summaryI18n: readMetadataLocalizedTextMap(parsed, \"summaryI18n\"),\n description: readMetadataString(parsed, \"description\"),\n descriptionI18n: readMetadataLocalizedTextMap(parsed, \"descriptionI18n\"),\n author: readMetadataString(parsed, \"author\"),\n tags: readMetadataStringArray(parsed, \"tags\"),\n sourceRepo: readMetadataString(parsed, \"sourceRepo\"),\n homepage: readMetadataString(parsed, \"homepage\"),\n publishedAt: readMetadataString(parsed, \"publishedAt\"),\n updatedAt: readMetadataString(parsed, \"updatedAt\")\n };\n}\n\nfunction resolveMarketplaceMetadataPath(skillDir: string, explicitMetaFile?: string): string | undefined {\n const resolved = explicitMetaFile?.trim()\n ? resolve(explicitMetaFile)\n : resolve(skillDir, DEFAULT_MARKETPLACE_META_FILENAME);\n return existsSync(resolved) ? resolved : undefined;\n}\n\nfunction readMetadataString(record: Record<string, unknown>, fieldName: string): string | undefined {\n const value = record[fieldName];\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"string\") {\n throw new Error(`Invalid marketplace metadata field: ${fieldName} must be a string`);\n }\n const normalized = value.trim();\n return normalized || undefined;\n}\n\nfunction readMetadataStringArray(record: Record<string, unknown>, fieldName: string): string[] | undefined {\n const value = record[fieldName];\n if (value == null) {\n return undefined;\n }\n if (!Array.isArray(value)) {\n throw new Error(`Invalid marketplace metadata field: ${fieldName} must be an array`);\n }\n const tags = value.map((entry, index) => {\n if (typeof entry !== \"string\") {\n throw new Error(`Invalid marketplace metadata field: ${fieldName}[${index}] must be a string`);\n }\n return entry.trim();\n }).filter(Boolean);\n return tags.length > 0 ? tags : undefined;\n}\n\nfunction readMetadataLocalizedTextMap(record: Record<string, unknown>, fieldName: string): LocalizedTextMap | undefined {\n const value = record[fieldName];\n if (value == null) {\n return undefined;\n }\n if (!isRecord(value)) {\n throw new Error(`Invalid marketplace metadata field: ${fieldName} must be an object`);\n }\n const localized: LocalizedTextMap = {};\n for (const [locale, text] of Object.entries(value)) {\n if (typeof text !== \"string\") {\n throw new Error(`Invalid marketplace metadata field: ${fieldName}.${locale} must be a string`);\n }\n const normalized = text.trim();\n if (!normalized) {\n continue;\n }\n localized[normalizeLocaleTag(locale)] = normalized;\n }\n return Object.keys(localized).length > 0 ? localized : undefined;\n}\n\nfunction normalizeLocaleTag(raw: string): string {\n return raw.trim().toLowerCase();\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"mappings":";;;;AAQA,MAAM,oCAAoC;AAuB1C,SAAgB,4BACd,UACA,kBACiC;CACjC,MAAM,eAAe,+BAA+B,UAAU,iBAAiB;AAC/E,KAAI,CAAC,aACH,QAAO,EAAE;CAGX,IAAI;AACJ,KAAI;AACF,WAAS,KAAK,MAAM,aAAa,cAAc,OAAO,CAAC;UAChD,OAAO;EACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACtE,QAAM,IAAI,MAAM,sCAAsC,aAAa,IAAI,QAAQ,GAAG;;AAGpF,KAAI,CAAC,SAAS,OAAO,CACnB,OAAM,IAAI,MAAM,sCAAsC,aAAa,2BAA2B;AAGhG,QAAO;EACL,MAAM,mBAAmB,QAAQ,OAAO;EACxC,MAAM,mBAAmB,QAAQ,OAAO;EACxC,SAAS,mBAAmB,QAAQ,UAAU;EAC9C,aAAa,6BAA6B,QAAQ,cAAc;EAChE,aAAa,mBAAmB,QAAQ,cAAc;EACtD,iBAAiB,6BAA6B,QAAQ,kBAAkB;EACxE,QAAQ,mBAAmB,QAAQ,SAAS;EAC5C,MAAM,wBAAwB,QAAQ,OAAO;EAC7C,YAAY,mBAAmB,QAAQ,aAAa;EACpD,UAAU,mBAAmB,QAAQ,WAAW;EAChD,aAAa,mBAAmB,QAAQ,cAAc;EACtD,WAAW,mBAAmB,QAAQ,YAAY;EACnD;;AAGH,SAAS,+BAA+B,UAAkB,kBAA+C;CACvG,MAAM,WAAW,kBAAkB,MAAM,GACrC,QAAQ,iBAAiB,GACzB,QAAQ,UAAU,kCAAkC;AACxD,QAAO,WAAW,SAAS,GAAG,WAAW,KAAA;;AAG3C,SAAS,mBAAmB,QAAiC,WAAuC;CAClG,MAAM,QAAQ,OAAO;AACrB,KAAI,SAAS,KACX;AAEF,KAAI,OAAO,UAAU,SACnB,OAAM,IAAI,MAAM,uCAAuC,UAAU,mBAAmB;AAGtF,QADmB,MAAM,MAAM,IACV,KAAA;;AAGvB,SAAS,wBAAwB,QAAiC,WAAyC;CACzG,MAAM,QAAQ,OAAO;AACrB,KAAI,SAAS,KACX;AAEF,KAAI,CAAC,MAAM,QAAQ,MAAM,CACvB,OAAM,IAAI,MAAM,uCAAuC,UAAU,mBAAmB;CAEtF,MAAM,OAAO,MAAM,KAAK,OAAO,UAAU;AACvC,MAAI,OAAO,UAAU,SACnB,OAAM,IAAI,MAAM,uCAAuC,UAAU,GAAG,MAAM,oBAAoB;AAEhG,SAAO,MAAM,MAAM;GACnB,CAAC,OAAO,QAAQ;AAClB,QAAO,KAAK,SAAS,IAAI,OAAO,KAAA;;AAGlC,SAAS,6BAA6B,QAAiC,WAAiD;CACtH,MAAM,QAAQ,OAAO;AACrB,KAAI,SAAS,KACX;AAEF,KAAI,CAAC,SAAS,MAAM,CAClB,OAAM,IAAI,MAAM,uCAAuC,UAAU,oBAAoB;CAEvF,MAAM,YAA8B,EAAE;AACtC,MAAK,MAAM,CAAC,QAAQ,SAAS,OAAO,QAAQ,MAAM,EAAE;AAClD,MAAI,OAAO,SAAS,SAClB,OAAM,IAAI,MAAM,uCAAuC,UAAU,GAAG,OAAO,mBAAmB;EAEhG,MAAM,aAAa,KAAK,MAAM;AAC9B,MAAI,CAAC,WACH;AAEF,YAAU,mBAAmB,OAAO,IAAI;;AAE1C,QAAO,OAAO,KAAK,UAAU,CAAC,SAAS,IAAI,YAAY,KAAA;;AAGzD,SAAS,mBAAmB,KAAqB;AAC/C,QAAO,IAAI,MAAM,CAAC,aAAa;;AAGjC,SAAS,SAAS,OAAkD;AAClE,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,MAAM"}
@@ -43,4 +43,5 @@ declare function publishMarketplaceSkill(options: MarketplaceSkillPublishOptions
43
43
  fileCount: number;
44
44
  }>;
45
45
  //#endregion
46
- export { MarketplaceSkillInstallOptions, MarketplaceSkillPublishOptions, installMarketplaceSkill, publishMarketplaceSkill };
46
+ export { MarketplaceSkillInstallOptions, MarketplaceSkillPublishOptions, installMarketplaceSkill, publishMarketplaceSkill };
47
+ //# sourceMappingURL=marketplace.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace.utils.d.ts","names":[],"sources":["../../../../src/cli/commands/skills/marketplace.utils.ts"],"mappings":";;;KA6BK,2BAAA;AAAA,KAEO,8BAAA;EACV,IAAA;EACA,OAAA;EACA,GAAA;EACA,KAAA;EACA,UAAA;AAAA;AAAA,KAGU,8BAAA;EACV,QAAA;EACA,QAAA;EACA,IAAA;EACA,WAAA;EACA,KAAA;EACA,IAAA;EACA,OAAA;EACA,WAAA,GAAc,gBAAA;EACd,WAAA;EACA,eAAA,GAAkB,gBAAA;EAClB,MAAA;EACA,IAAA;EACA,UAAA;EACA,QAAA;EACA,WAAA;EACA,SAAA;EACA,UAAA;EACA,KAAA;EACA,eAAA;AAAA;AAAA,iBAGoB,uBAAA,CAAwB,OAAA,EAAS,8BAAA,GAAiC,OAAA;EACtF,IAAA;EACA,cAAA;EACA,gBAAA;EACA,MAAA,EAAQ,2BAAA;AAAA;AAAA,iBA4LY,uBAAA,CAAwB,OAAA,EAAS,8BAAA,GAAiC,OAAA;EACtF,OAAA;EACA,IAAA;EACA,WAAA;EACA,SAAA;AAAA"}
@@ -200,3 +200,5 @@ function resolveBuiltinSkillDir(workdir, skillName) {
200
200
  }
201
201
  //#endregion
202
202
  export { installMarketplaceSkill, publishMarketplaceSkill };
203
+
204
+ //# sourceMappingURL=marketplace.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace.utils.js","names":[],"sources":["../../../../src/cli/commands/skills/marketplace.utils.ts"],"sourcesContent":["import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync } from \"node:fs\";\nimport { basename, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { DEFAULT_SKILLS_DIR } from \"@nextclaw/core\";\nimport { SkillManager } from \"@nextclaw/kernel\";\nimport {\n buildLocalizedTextMap,\n parseSkillFrontmatter,\n readMarketplaceMetadataFile,\n type LocalizedTextMap\n} from \"./marketplace.metadata.js\";\nimport { PlatformAuthCommands } from \"@nextclaw-service/commands/platform-auth/index.js\";\nimport {\n fetchMarketplaceSkillFiles,\n fetchMarketplaceSkillItem,\n collectMarketplaceSkillFiles,\n type MarketplaceSkillFileManifestEntry,\n readMarketplaceEnvelope,\n resolveMarketplaceAdminToken,\n resolveMarketplaceApiBase,\n writeMarketplaceSkillFiles\n} from \"./marketplace-client.js\";\nimport {\n normalizeTags,\n resolvePublishPackageName,\n validateSkillSelector,\n validateSkillSlug\n} from \"./marketplace-identity.utils.js\";\nimport { runWithMarketplaceNetworkRetry } from \"./marketplace-network-retry.js\";\n\ntype MarketplaceSkillInstallKind = \"builtin\" | \"marketplace\";\n\nexport type MarketplaceSkillInstallOptions = {\n slug: string;\n workdir: string;\n dir?: string;\n force?: boolean;\n apiBaseUrl?: string;\n};\n\nexport type MarketplaceSkillPublishOptions = {\n skillDir: string;\n metaFile?: string;\n slug?: string;\n packageName?: string;\n scope?: string;\n name?: string;\n summary?: string;\n summaryI18n?: LocalizedTextMap;\n description?: string;\n descriptionI18n?: LocalizedTextMap;\n author?: string;\n tags?: string[];\n sourceRepo?: string;\n homepage?: string;\n publishedAt?: string;\n updatedAt?: string;\n apiBaseUrl?: string;\n token?: string;\n requireExisting?: boolean;\n};\n\nexport async function installMarketplaceSkill(options: MarketplaceSkillInstallOptions): Promise<{\n slug: string;\n destinationDir: string;\n alreadyInstalled?: boolean;\n source: MarketplaceSkillInstallKind;\n}> {\n const { slug, workdir: rawWorkdir, dir, force, apiBaseUrl } = options;\n const selector = validateSkillSelector(slug.trim(), \"slug\");\n const workdir = resolve(rawWorkdir);\n if (!existsSync(workdir)) {\n throw new Error(`Workdir does not exist: ${workdir}`);\n }\n\n const apiBase = resolveMarketplaceApiBase(apiBaseUrl);\n const item = await fetchMarketplaceSkillItem(apiBase, selector);\n const installSlug = item.slug;\n const resolvedSlug = item.packageName || item.slug;\n const destinationDir = resolveMarketplaceSkillDestinationDir({\n workdir,\n slug: installSlug,\n dir,\n });\n\n if (item.install.kind === \"builtin\") {\n const builtinResult = resolveBuiltinMarketplaceInstallResult({\n workdir,\n slug: installSlug,\n });\n builtinResult.slug = resolvedSlug;\n return builtinResult;\n }\n\n const filesPayload = await fetchMarketplaceSkillFiles(apiBase, selector);\n const existingInstall = prepareMarketplaceSkillDestinationDir({\n destinationDir,\n files: filesPayload.files,\n force,\n slug: installSlug,\n });\n if (existingInstall) {\n existingInstall.slug = resolvedSlug;\n return existingInstall;\n }\n await writeMarketplaceSkillFiles({\n destinationDir,\n files: filesPayload.files,\n apiBase,\n slug: selector,\n });\n ensureInstalledMarketplaceSkill(destinationDir, installSlug);\n return buildMarketplaceInstallResult(resolvedSlug, destinationDir);\n}\n\nfunction resolveMarketplaceSkillDestinationDir(params: {\n workdir: string;\n slug: string;\n dir?: string;\n}): string {\n const { workdir, slug, dir } = params;\n const dirName = dir?.trim() || DEFAULT_SKILLS_DIR;\n return isAbsolute(dirName)\n ? resolve(dirName, slug)\n : resolve(workdir, dirName, slug);\n}\n\nfunction resolveBuiltinMarketplaceInstallResult(params: {\n workdir: string;\n slug: string;\n}): {\n slug: string;\n destinationDir: string;\n alreadyInstalled: true;\n source: \"builtin\";\n} {\n return {\n slug: params.slug,\n destinationDir: resolveBuiltinSkillDir(params.workdir, params.slug),\n alreadyInstalled: true,\n source: \"builtin\",\n };\n}\n\nfunction prepareMarketplaceSkillDestinationDir(params: {\n destinationDir: string;\n files: MarketplaceSkillFileManifestEntry[];\n force?: boolean;\n slug: string;\n}): {\n slug: string;\n destinationDir: string;\n alreadyInstalled: true;\n source: \"marketplace\";\n} | null {\n const { destinationDir, files, force, slug } = params;\n if (!force && existsSync(destinationDir)) {\n const existingDirState = inspectMarketplaceSkillDirectory(destinationDir, files);\n if (existingDirState === \"installed\") {\n return {\n slug,\n destinationDir,\n alreadyInstalled: true,\n source: \"marketplace\",\n };\n }\n if (existingDirState !== \"recoverable\") {\n throw new Error(`Skill directory already exists: ${destinationDir} (use --force)`);\n }\n rmSync(destinationDir, { recursive: true, force: true });\n }\n\n if (force && existsSync(destinationDir)) {\n rmSync(destinationDir, { recursive: true, force: true });\n }\n\n mkdirSync(destinationDir, { recursive: true });\n return null;\n}\n\nfunction ensureInstalledMarketplaceSkill(destinationDir: string, slug: string): void {\n if (!existsSync(join(destinationDir, \"SKILL.md\"))) {\n throw new Error(`Marketplace skill ${slug} does not include SKILL.md`);\n }\n}\n\nfunction buildMarketplaceInstallResult(slug: string, destinationDir: string): {\n slug: string;\n destinationDir: string;\n source: \"marketplace\";\n} {\n return {\n slug,\n destinationDir,\n source: \"marketplace\",\n };\n}\n\nfunction inspectMarketplaceSkillDirectory(\n destinationDir: string,\n files: MarketplaceSkillFileManifestEntry[]\n): \"installed\" | \"recoverable\" | \"conflict\" {\n if (existsSync(join(destinationDir, \"SKILL.md\"))) {\n return \"installed\";\n }\n\n const discoveredFiles = collectRelativeFiles(destinationDir);\n if (discoveredFiles === null) {\n return \"conflict\";\n }\n\n const relevantFiles = discoveredFiles.filter((file) => !isIgnorableMarketplaceResidue(file));\n if (relevantFiles.length === 0) {\n return \"recoverable\";\n }\n\n const manifestPaths = new Set(files.map((file) => normalizeMarketplaceRelativePath(file.path)));\n return relevantFiles.every((file) => manifestPaths.has(normalizeMarketplaceRelativePath(file)))\n ? \"recoverable\"\n : \"conflict\";\n}\n\nfunction collectRelativeFiles(rootDir: string): string[] | null {\n const output: string[] = [];\n const walk = (dir: string): boolean => {\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const absolute = join(dir, entry.name);\n if (entry.isDirectory()) {\n if (!walk(absolute)) {\n return false;\n }\n continue;\n }\n if (!entry.isFile()) {\n return false;\n }\n const relativePath = relative(rootDir, absolute);\n output.push(normalizeMarketplaceRelativePath(relativePath));\n }\n return true;\n };\n\n return walk(rootDir) ? output : null;\n}\n\nfunction normalizeMarketplaceRelativePath(path: string): string {\n return path.replace(/\\\\/g, \"/\");\n}\n\nfunction isIgnorableMarketplaceResidue(path: string): boolean {\n return path === \".DS_Store\";\n}\n\nexport async function publishMarketplaceSkill(options: MarketplaceSkillPublishOptions): Promise<{\n created: boolean;\n slug: string;\n packageName: string;\n fileCount: number;\n}> {\n const {\n skillDir: rawSkillDir,\n slug: explicitSlug,\n metaFile,\n packageName: explicitPackageName,\n scope: explicitScope,\n name: explicitName,\n summary: explicitSummary,\n summaryI18n: explicitSummaryI18n,\n description: explicitDescription,\n descriptionI18n: explicitDescriptionI18n,\n tags: explicitTags,\n sourceRepo: explicitSourceRepo,\n homepage: explicitHomepage,\n publishedAt: explicitPublishedAt,\n updatedAt: explicitUpdatedAt,\n apiBaseUrl,\n token: explicitToken,\n requireExisting\n } = options;\n const skillDir = resolve(rawSkillDir);\n if (!existsSync(skillDir)) {\n throw new Error(`Skill directory not found: ${skillDir}`);\n }\n\n const files = collectMarketplaceSkillFiles(skillDir);\n if (!files.some((file) => file.path === \"SKILL.md\")) {\n throw new Error(`Skill directory must include SKILL.md: ${skillDir}`);\n }\n\n const parsedFrontmatter = parseSkillFrontmatter(readFileSync(join(skillDir, \"SKILL.md\"), \"utf8\"));\n const metadata = readMarketplaceMetadataFile(skillDir, metaFile);\n const slug = validateSkillSlug(explicitSlug?.trim() || metadata.slug || basename(skillDir), \"slug\");\n const name = explicitName?.trim() || metadata.name || parsedFrontmatter.name || slug;\n const description = explicitDescription?.trim()\n || metadata.description\n || metadata.descriptionI18n?.en\n || parsedFrontmatter.description;\n const summary = explicitSummary?.trim()\n || metadata.summary\n || metadata.summaryI18n?.en\n || parsedFrontmatter.summary\n || description\n || `${slug} skill`;\n const summaryI18n = buildLocalizedTextMap(summary, parsedFrontmatter.summaryI18n, metadata.summaryI18n, explicitSummaryI18n);\n const descriptionI18n = description\n ? buildLocalizedTextMap(description, parsedFrontmatter.descriptionI18n, metadata.descriptionI18n, explicitDescriptionI18n)\n : undefined;\n const tags = normalizeTags(explicitTags && explicitTags.length > 0 ? explicitTags : (metadata.tags ?? parsedFrontmatter.tags));\n\n const apiBase = resolveMarketplaceApiBase(apiBaseUrl);\n const adminToken = resolveMarketplaceAdminToken(explicitToken);\n const platformAuth = new PlatformAuthCommands();\n const currentUser = adminToken ? null : await platformAuth.me();\n const packageName = resolvePublishPackageName({\n explicitPackageName,\n explicitScope,\n slug,\n adminTokenPresent: Boolean(adminToken),\n currentUser\n });\n const authToken = adminToken ?? currentUser?.token;\n if (!authToken) {\n throw new Error(\"Publishing requires either a marketplace admin token or an active NextClaw platform login.\");\n }\n\n const response = await runWithMarketplaceNetworkRetry(() =>\n fetch(`${apiBase}/api/v1/skills/publish`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n Authorization: `Bearer ${authToken}`\n },\n body: JSON.stringify({\n slug,\n packageName,\n name,\n summary,\n summaryI18n,\n description,\n descriptionI18n,\n tags,\n sourceRepo: explicitSourceRepo?.trim() || metadata.sourceRepo,\n homepage: explicitHomepage?.trim() || metadata.homepage,\n publishedAt: explicitPublishedAt?.trim() || metadata.publishedAt,\n updatedAt: explicitUpdatedAt?.trim() || metadata.updatedAt,\n requireExisting,\n files\n })\n })\n );\n\n const payload = await readMarketplaceEnvelope<{\n created: boolean;\n fileCount: number;\n item?: {\n slug?: string;\n packageName?: string;\n };\n }>(response);\n\n if (!payload.ok || !payload.data) {\n const message = payload.error?.message || `marketplace publish failed: HTTP ${response.status}`;\n throw new Error(message);\n }\n\n return {\n created: payload.data.created,\n slug: payload.data.item?.slug || slug,\n packageName: payload.data.item?.packageName || packageName,\n fileCount: payload.data.fileCount\n };\n}\n\nfunction resolveBuiltinSkillDir(workdir: string, skillName: string): string {\n const skillDir = new SkillManager({ workspace: workdir }).resolveBuiltinSkillDir(skillName);\n if (!skillDir) {\n throw new Error(`Built-in skill not found in local installation: ${skillName}`);\n }\n return skillDir;\n}\n"],"mappings":"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"}
@@ -106,4 +106,5 @@ declare class SkillsQueryService {
106
106
  private fetchMarketplaceView;
107
107
  }
108
108
  //#endregion
109
- export { MarketplaceSkillInfoView, MarketplaceSkillsRecommendationResultView, MarketplaceSkillsSearchView, SkillsQueryService };
109
+ export { MarketplaceSkillInfoView, MarketplaceSkillsRecommendationResultView, MarketplaceSkillsSearchView, SkillsQueryService };
110
+ //# sourceMappingURL=skills-query.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-query.service.d.ts","names":[],"sources":["../../../../src/cli/commands/skills/skills-query.service.ts"],"mappings":";;;;KAQK,oBAAA;AAAA,KACA,2BAAA;AAAA,KAEA,sBAAA;EACH,IAAA,EAAM,2BAAA;EACN,IAAA;EACA,OAAA;AAAA;AAAA,KAGG,2BAAA;EACH,EAAA;EACA,IAAA;EACA,IAAA;EACA,IAAA;EACA,OAAA;EACA,WAAA,EAAa,gBAAA;EACb,IAAA;EACA,MAAA;EACA,OAAA,EAAS,sBAAA;EACT,SAAA;AAAA;AAAA,KAGG,wBAAA,GAA2B,2BAAA;EAC9B,WAAA;EACA,eAAA,GAAkB,gBAAA;EAClB,UAAA;EACA,QAAA;EACA,WAAA;AAAA;AAAA,KAGG,2BAAA;EACH,IAAA;EACA,IAAA;EACA,IAAA;EACA,OAAA,EAAS,sBAAA;EACT,MAAA;EACA,GAAA;EACA,WAAA;EACA,OAAA;EACA,SAAA;AAAA;AAAA,KAGG,wBAAA;EACH,KAAA;EACA,IAAA;EACA,QAAA;EACA,UAAA;EACA,IAAA,EAAM,oBAAA;EACN,KAAA;EACA,KAAA,EAAO,2BAAA;AAAA;AAAA,KAGJ,kCAAA;EACH,IAAA;EACA,OAAA;EACA,KAAA;EACA,WAAA;EACA,KAAA;EACA,KAAA,EAAO,2BAAA;AAAA;AAAA,KAGG,2BAAA,GAA8B,wBAAA;EACxC,UAAA;AAAA;AAAA,KAGU,wBAAA;EACV,UAAA;EACA,IAAA,EAAM,wBAAA;EACN,OAAA,EAAS,2BAAA;EACT,wBAAA;AAAA;AAAA,KAGU,yCAAA,GAA4C,kCAAA;EACtD,UAAA;AAAA;AAAA,cAGW,kBAAA;EACX,aAAA,GAAiB,MAAA;IACf,OAAA;IACA,KAAA;IACA,KAAA;EAAA,MAJ2B,mBAAA,CAK5B,mBAAA;EAOD,gBAAA,GAAoB,MAAA;IAClB,OAAA;IACA,QAAA;EAAA,MATD,mBAAA,CAUA,oBAAA;EASD,uBAAA,GAAiC,MAAA;IAC/B,UAAA;IACA,KAAA;IACA,GAAA;IACA,IAAA;IACA,IAAA;IACA,QAAA;EAAA,MACE,OAAA,CAAQ,2BAAA;EAsBZ,uBAAA,GAAiC,MAAA;IAC/B,UAAA;IACA,IAAA;EAAA,MACE,OAAA,CAAQ,wBAAA;EA6BZ,0BAAA,GAAoC,MAAA;IAClC,UAAA;IACA,KAAA;IACA,KAAA;EAAA,MACE,OAAA,CAAQ,yCAAA;EAAA,QAkBJ,2BAAA;EAAA,QAOA,wBAAA;EAAA,QAOA,2BAAA;EAAA,QAOA,+BAAA;EAAA,QAQA,wBAAA;EAAA,QAWA,wBAAA;EAAA,QAWA,uBAAA;EAAA,QAQA,uBAAA;EAAA,QAQA,oBAAA;AAAA"}
@@ -128,3 +128,5 @@ var SkillsQueryService = class {
128
128
  };
129
129
  //#endregion
130
130
  export { SkillsQueryService };
131
+
132
+ //# sourceMappingURL=skills-query.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-query.service.js","names":[],"sources":["../../../../src/cli/commands/skills/skills-query.service.ts"],"sourcesContent":["import { resolve } from \"node:path\";\nimport {\n SkillManager,\n type LocalizedTextMap,\n} from \"@nextclaw/kernel\";\nimport { readMarketplaceEnvelope, resolveMarketplaceApiBase } from \"./marketplace-client.js\";\nimport { runWithMarketplaceNetworkRetry } from \"./marketplace-network-retry.js\";\n\ntype MarketplaceSkillSort = \"relevance\" | \"updated\";\ntype MarketplaceSkillInstallKind = \"builtin\" | \"marketplace\";\n\ntype MarketplaceInstallSpec = {\n kind: MarketplaceSkillInstallKind;\n spec: string;\n command: string;\n};\n\ntype MarketplaceSkillItemSummary = {\n id: string;\n slug: string;\n type: \"skill\";\n name: string;\n summary: string;\n summaryI18n: LocalizedTextMap;\n tags: string[];\n author: string;\n install: MarketplaceInstallSpec;\n updatedAt: string;\n};\n\ntype MarketplaceSkillItemView = MarketplaceSkillItemSummary & {\n description?: string;\n descriptionI18n?: LocalizedTextMap;\n sourceRepo?: string;\n homepage?: string;\n publishedAt: string;\n};\n\ntype MarketplaceSkillContentView = {\n type: \"skill\";\n slug: string;\n name: string;\n install: MarketplaceInstallSpec;\n source: \"builtin\" | \"marketplace\" | \"remote\";\n raw: string;\n metadataRaw?: string;\n bodyRaw: string;\n sourceUrl?: string;\n};\n\ntype MarketplaceSkillListView = {\n total: number;\n page: number;\n pageSize: number;\n totalPages: number;\n sort: MarketplaceSkillSort;\n query?: string;\n items: MarketplaceSkillItemSummary[];\n};\n\ntype MarketplaceSkillRecommendationView = {\n type: \"skill\";\n sceneId: string;\n title: string;\n description?: string;\n total: number;\n items: MarketplaceSkillItemSummary[];\n};\n\nexport type MarketplaceSkillsSearchView = MarketplaceSkillListView & {\n apiBaseUrl: string;\n};\n\nexport type MarketplaceSkillInfoView = {\n apiBaseUrl: string;\n item: MarketplaceSkillItemView;\n content: MarketplaceSkillContentView | null;\n contentUnavailableReason: string | null;\n};\n\nexport type MarketplaceSkillsRecommendationResultView = MarketplaceSkillRecommendationView & {\n apiBaseUrl: string;\n};\n\nexport class SkillsQueryService {\n listInstalled = (params: {\n workdir: string;\n query?: string;\n scope?: string;\n }) => {\n return new SkillManager({ workspace: resolve(params.workdir) }).listInstalledSkills({\n scope: params.scope,\n query: params.query,\n });\n };\n\n getInstalledInfo = (params: {\n workdir: string;\n selector: string;\n }) => {\n const skillManager = new SkillManager({ workspace: resolve(params.workdir) });\n const detail = skillManager.getInstalledSkillDetail(params.selector);\n if (!detail) {\n throw new Error(`Installed skill not found: ${params.selector}`);\n }\n return detail;\n };\n\n searchMarketplaceSkills = async (params: {\n apiBaseUrl?: string;\n query?: string;\n tag?: string;\n sort?: string;\n page?: string | number;\n pageSize?: string | number;\n }): Promise<MarketplaceSkillsSearchView> => {\n const { apiBaseUrl: rawApiBaseUrl, page, pageSize, query, sort, tag } = params;\n const apiBaseUrl = resolveMarketplaceApiBase(rawApiBaseUrl);\n const result = await this.fetchMarketplaceView<MarketplaceSkillListView>({\n apiBaseUrl,\n path: \"/api/v1/skills/items\",\n query: {\n q: this.normalizeOptionalString(query) ?? undefined,\n tag: this.normalizeOptionalString(tag) ?? undefined,\n sort: this.normalizeMarketplaceSort(sort),\n page: this.normalizePositiveInteger(page),\n pageSize: this.normalizePositiveInteger(pageSize),\n },\n });\n\n return {\n apiBaseUrl,\n ...result,\n items: result.items.map((item) => this.normalizeMarketplaceSummary(item)),\n };\n };\n\n getMarketplaceSkillInfo = async (params: {\n apiBaseUrl?: string;\n slug: string;\n }): Promise<MarketplaceSkillInfoView> => {\n const slug = this.normalizeRequiredString(params.slug, \"skill slug\");\n const apiBaseUrl = resolveMarketplaceApiBase(params.apiBaseUrl);\n const encodedSlug = encodeURIComponent(slug);\n\n const item = await this.fetchMarketplaceView<MarketplaceSkillItemView>({\n apiBaseUrl,\n path: `/api/v1/skills/items/${encodedSlug}`,\n });\n\n let content: MarketplaceSkillContentView | null = null;\n let contentUnavailableReason: string | null = null;\n try {\n content = this.normalizeMarketplaceContent(await this.fetchMarketplaceView<MarketplaceSkillContentView>({\n apiBaseUrl,\n path: `/api/v1/skills/items/${encodedSlug}/content`,\n }));\n } catch (error) {\n contentUnavailableReason = error instanceof Error ? error.message : String(error);\n }\n\n return {\n apiBaseUrl,\n item: this.normalizeMarketplaceItem(item),\n content,\n contentUnavailableReason,\n };\n };\n\n recommendMarketplaceSkills = async (params: {\n apiBaseUrl?: string;\n scene?: string;\n limit?: string | number;\n }): Promise<MarketplaceSkillsRecommendationResultView> => {\n const apiBaseUrl = resolveMarketplaceApiBase(params.apiBaseUrl);\n const result = await this.fetchMarketplaceView<MarketplaceSkillRecommendationView>({\n apiBaseUrl,\n path: \"/api/v1/skills/recommendations\",\n query: {\n scene: this.normalizeOptionalString(params.scene) ?? undefined,\n limit: this.normalizePositiveInteger(params.limit),\n },\n });\n\n return {\n apiBaseUrl,\n ...result,\n items: result.items.map((item) => this.normalizeMarketplaceSummary(item)),\n };\n };\n\n private normalizeMarketplaceSummary = (\n item: MarketplaceSkillItemSummary,\n ): MarketplaceSkillItemSummary => ({\n ...item,\n install: this.normalizeMarketplaceInstallSpec(item.install, item.slug),\n });\n\n private normalizeMarketplaceItem = (\n item: MarketplaceSkillItemView,\n ): MarketplaceSkillItemView => ({\n ...item,\n install: this.normalizeMarketplaceInstallSpec(item.install, item.slug),\n });\n\n private normalizeMarketplaceContent = (\n content: MarketplaceSkillContentView,\n ): MarketplaceSkillContentView => ({\n ...content,\n install: this.normalizeMarketplaceInstallSpec(content.install, content.slug),\n });\n\n private normalizeMarketplaceInstallSpec = (\n install: MarketplaceInstallSpec,\n slug: string,\n ): MarketplaceInstallSpec => ({\n ...install,\n command: `nextclaw marketplace skills install ${slug}`,\n });\n\n private normalizeMarketplaceSort = (value: string | undefined): MarketplaceSkillSort | undefined => {\n const normalized = this.normalizeOptionalString(value);\n if (!normalized) {\n return undefined;\n }\n if (normalized === \"relevance\" || normalized === \"updated\") {\n return normalized;\n }\n throw new Error(`Invalid marketplace sort: ${value}. Expected relevance or updated.`);\n };\n\n private normalizePositiveInteger = (value: string | number | undefined): string | undefined => {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || parsed <= 0) {\n throw new Error(`Expected a positive integer, received: ${String(value)}`);\n }\n return String(Math.floor(parsed));\n };\n\n private normalizeRequiredString = (value: string, label: string): string => {\n const normalized = this.normalizeOptionalString(value);\n if (!normalized) {\n throw new Error(`Missing ${label}`);\n }\n return normalized;\n };\n\n private normalizeOptionalString = (value: string | undefined): string | null => {\n if (typeof value !== \"string\") {\n return null;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n };\n\n private fetchMarketplaceView = async <T>(params: {\n apiBaseUrl: string;\n path: string;\n query?: Record<string, string | undefined>;\n }): Promise<T> => {\n const url = new URL(params.path, `${params.apiBaseUrl}/`);\n for (const [key, value] of Object.entries(params.query ?? {})) {\n if (typeof value === \"string\" && value.length > 0) {\n url.searchParams.set(key, value);\n }\n }\n\n const response = await runWithMarketplaceNetworkRetry(async () =>\n await fetch(url.toString(), {\n headers: {\n Accept: \"application/json\",\n },\n })\n );\n\n const payload = await readMarketplaceEnvelope<T>(response);\n if (!payload.ok || !payload.data) {\n const message = payload.error?.message || `marketplace request failed: ${response.status}`;\n throw new Error(message);\n }\n\n return payload.data;\n };\n}\n"],"mappings":"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"}
@@ -15,4 +15,5 @@ declare class StartCommands {
15
15
  run: (opts: StartCommandOptions) => Promise<void>;
16
16
  }
17
17
  //#endregion
18
- export { StartCommands };
18
+ export { StartCommands };
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/cli/commands/start/index.ts"],"mappings":";;;;cAIa,aAAA;EAAA,iBAEQ,IAAA;cAAA,IAAA;IACf,qBAAA,EAAuB,qBAAA;IACvB,gBAAA;IACA,IAAA,GAAO,MAAA;MAAU,MAAA;MAAgB,IAAA;IAAA,MAAoB,OAAA;EAAA;EAIzD,GAAA,GAAa,IAAA,EAAM,mBAAA,KAAsB,OAAA;AAAA"}
@@ -23,3 +23,5 @@ var StartCommands = class {
23
23
  };
24
24
  //#endregion
25
25
  export { StartCommands };
26
+
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/cli/commands/start/index.ts"],"sourcesContent":["import { parseStartTimeoutMs, resolveManagedServiceUiOverrides } from \"@nextclaw-service/shared/utils/runtime-helpers.js\";\nimport type { StartCommandOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\nimport type { RuntimeCommandService } from \"@nextclaw-service/shared/services/runtime/runtime-command.service.js\";\n\nexport class StartCommands {\n constructor(\n private readonly deps: {\n runtimeCommandService: RuntimeCommandService;\n forcedPublicHost: string;\n init: (params: { source: string; auto: boolean }) => Promise<void>;\n }\n ) {}\n\n run = async (opts: StartCommandOptions): Promise<void> => {\n const startupTimeoutMs = parseStartTimeoutMs(opts.startTimeout);\n await this.deps.init({ source: \"start\", auto: true });\n const uiOverrides = resolveManagedServiceUiOverrides({\n uiPort: opts.uiPort,\n forcedPublicHost: this.deps.forcedPublicHost\n });\n\n await this.deps.runtimeCommandService.startService({\n uiOverrides,\n open: Boolean(opts.open),\n startupTimeoutMs,\n });\n };\n}\n"],"mappings":";;AAIA,IAAa,gBAAb,MAA2B;CACzB,YACE,MAKA;AALiB,OAAA,OAAA;;CAOnB,MAAM,OAAO,SAA6C;EACxD,MAAM,mBAAmB,oBAAoB,KAAK,aAAa;AAC/D,QAAM,KAAK,KAAK,KAAK;GAAE,QAAQ;GAAS,MAAM;GAAM,CAAC;EACrD,MAAM,cAAc,iCAAiC;GACnD,QAAQ,KAAK;GACb,kBAAkB,KAAK,KAAK;GAC7B,CAAC;AAEF,QAAM,KAAK,KAAK,sBAAsB,aAAa;GACjD;GACA,MAAM,QAAQ,KAAK,KAAK;GACxB;GACD,CAAC"}
@@ -9,4 +9,5 @@ declare class StopCommands {
9
9
  run: () => Promise<void>;
10
10
  }
11
11
  //#endregion
12
- export { StopCommands };
12
+ export { StopCommands };
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/cli/commands/stop/index.ts"],"mappings":";;;cAEa,YAAA;EAAA,iBAEQ,IAAA;cAAA,IAAA;IACf,qBAAA,EAAuB,qBAAA;EAAA;EAI3B,GAAA,QAAgB,OAAA;AAAA"}
@@ -9,3 +9,5 @@ var StopCommands = class {
9
9
  };
10
10
  //#endregion
11
11
  export { StopCommands };
12
+
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/cli/commands/stop/index.ts"],"sourcesContent":["import type { RuntimeCommandService } from \"@nextclaw-service/shared/services/runtime/runtime-command.service.js\";\n\nexport class StopCommands {\n constructor(\n private readonly deps: {\n runtimeCommandService: RuntimeCommandService;\n }\n ) {}\n\n run = async (): Promise<void> => {\n await this.deps.runtimeCommandService.stopService();\n };\n}\n"],"mappings":";AAEA,IAAa,eAAb,MAA0B;CACxB,YACE,MAGA;AAHiB,OAAA,OAAA;;CAKnB,MAAM,YAA2B;AAC/B,QAAM,KAAK,KAAK,sBAAsB,aAAa"}
@@ -11,4 +11,5 @@ declare class UiCommands {
11
11
  run: (opts: UiCommandOptions) => Promise<void>;
12
12
  }
13
13
  //#endregion
14
- export { UiCommands };
14
+ export { UiCommands };
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/cli/commands/ui/index.ts"],"mappings":";;;;cAIa,UAAA;EAAA,iBAEQ,IAAA;cAAA,IAAA;IACf,qBAAA,EAAuB,qBAAA;IACvB,gBAAA;EAAA;EAIJ,GAAA,GAAa,IAAA,EAAM,gBAAA,KAAmB,OAAA;AAAA"}
@@ -15,3 +15,5 @@ var UiCommands = class {
15
15
  };
16
16
  //#endregion
17
17
  export { UiCommands };
18
+
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/cli/commands/ui/index.ts"],"sourcesContent":["import type { Config } from \"@nextclaw/core\";\nimport type { UiCommandOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\nimport type { RuntimeCommandService } from \"@nextclaw-service/shared/services/runtime/runtime-command.service.js\";\n\nexport class UiCommands {\n constructor(\n private readonly deps: {\n runtimeCommandService: RuntimeCommandService;\n forcedPublicHost: string;\n }\n ) {}\n\n run = async (opts: UiCommandOptions): Promise<void> => {\n const uiOverrides: Partial<Config[\"ui\"]> = {\n enabled: true,\n host: this.deps.forcedPublicHost,\n open: Boolean(opts.open),\n };\n if (opts.port) {\n uiOverrides.port = Number(opts.port);\n }\n await this.deps.runtimeCommandService.startGateway({\n uiOverrides,\n });\n };\n}\n"],"mappings":";AAIA,IAAa,aAAb,MAAwB;CACtB,YACE,MAIA;AAJiB,OAAA,OAAA;;CAMnB,MAAM,OAAO,SAA0C;EACrD,MAAM,cAAqC;GACzC,SAAS;GACT,MAAM,KAAK,KAAK;GAChB,MAAM,QAAQ,KAAK,KAAK;GACzB;AACD,MAAI,KAAK,KACP,aAAY,OAAO,OAAO,KAAK,KAAK;AAEtC,QAAM,KAAK,KAAK,sBAAsB,aAAa,EACjD,aACD,CAAC"}
@@ -17,4 +17,5 @@ declare class LlmUsageCommandService {
17
17
  private readonly toPercent;
18
18
  }
19
19
  //#endregion
20
- export { LlmUsageCommandService };
20
+ export { LlmUsageCommandService };
21
+ //# sourceMappingURL=llm-usage-command.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-usage-command.service.d.ts","names":[],"sources":["../../../../../src/cli/commands/usage/services/llm-usage-command.service.ts"],"mappings":";;;;cAMa,sBAAA;EAAA,iBACM,YAAA;cAEL,IAAA;IACV,YAAA,GAAe,eAAA;EAAA;EAAA,SAKR,IAAA,GAAc,IAAA,GAAM,mBAAA,KAA2B,OAAA;EAAA,iBAiBvC,YAAA;EAAA,iBAoBA,WAAA;EAAA,iBA0BA,SAAA;EAAA,iBAoBA,cAAA;EAAA,iBAsBA,aAAA;EAAA,iBAeA,WAAA;EAAA,iBA0BA,SAAA;AAAA"}
@@ -148,3 +148,5 @@ var LlmUsageCommandService = class {
148
148
  };
149
149
  //#endregion
150
150
  export { LlmUsageCommandService };
151
+
152
+ //# sourceMappingURL=llm-usage-command.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-usage-command.service.js","names":[],"sources":["../../../../../src/cli/commands/usage/services/llm-usage-command.service.ts"],"sourcesContent":["import type { UsageCommandOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\nimport {\n LlmUsageManager,\n type LlmUsageStats,\n} from \"@nextclaw/kernel\";\n\nexport class LlmUsageCommandService {\n private readonly usageManager: LlmUsageManager;\n\n constructor(deps: {\n usageManager?: LlmUsageManager;\n } = {}) {\n this.usageManager = deps.usageManager ?? new LlmUsageManager();\n }\n\n readonly show = async (opts: UsageCommandOptions = {}): Promise<void> => {\n if (opts.history && opts.stats) {\n console.error(\"Choose only one usage mode: `--history` or `--stats`.\");\n process.exitCode = 1;\n return;\n }\n if (opts.history) {\n this.showHistory(opts);\n return;\n }\n if (opts.stats) {\n this.showStats(opts);\n return;\n }\n this.showSnapshot(opts);\n };\n\n private readonly showSnapshot = (opts: UsageCommandOptions): void => {\n const snapshot = this.usageManager.getSnapshot();\n if (opts.json) {\n console.log(JSON.stringify({ ok: Boolean(snapshot), mode: \"snapshot\", path: this.usageManager.snapshotPath, snapshot }, null, 2));\n process.exitCode = 0;\n return;\n }\n if (!snapshot) {\n console.log([\n \"No LLM usage snapshot recorded yet.\",\n `Snapshot path: ${this.usageManager.snapshotPath}`,\n \"Run `nextclaw agent -m \\\"ping\\\"` or use the local UI once, then retry `nextclaw usage`.\",\n ].join(\"\\n\"));\n process.exitCode = 0;\n return;\n }\n console.log(this.renderSnapshot(snapshot));\n process.exitCode = 0;\n };\n\n private readonly showHistory = (opts: UsageCommandOptions): void => {\n const records = this.usageManager.getHistory(opts.limit);\n if (opts.json) {\n console.log(JSON.stringify({\n ok: records.length > 0,\n mode: \"history\",\n path: this.usageManager.historyPath,\n limit: this.usageManager.resolveHistoryLimit(opts.limit),\n records,\n }, null, 2));\n process.exitCode = 0;\n return;\n }\n if (records.length === 0) {\n console.log([\n \"No LLM usage history recorded yet.\",\n `History path: ${this.usageManager.historyPath}`,\n \"Run `nextclaw agent -m \\\"ping\\\"` or use the local UI once, then retry `nextclaw usage --history`.\",\n ].join(\"\\n\"));\n process.exitCode = 0;\n return;\n }\n console.log(this.renderHistory(records));\n process.exitCode = 0;\n };\n\n private readonly showStats = (opts: UsageCommandOptions): void => {\n const stats = this.usageManager.getStats();\n if (opts.json) {\n console.log(JSON.stringify({ ok: stats.totalRecords > 0, mode: \"stats\", path: this.usageManager.historyPath, stats }, null, 2));\n process.exitCode = 0;\n return;\n }\n if (stats.totalRecords === 0) {\n console.log([\n \"No LLM usage history recorded yet.\",\n `History path: ${this.usageManager.historyPath}`,\n \"Run `nextclaw agent -m \\\"ping\\\"` or use the local UI once, then retry `nextclaw usage --stats`.\",\n ].join(\"\\n\"));\n process.exitCode = 0;\n return;\n }\n console.log(this.renderStats(stats));\n process.exitCode = 0;\n };\n\n private readonly renderSnapshot = (snapshot: NonNullable<ReturnType<LlmUsageManager[\"getSnapshot\"]>>): string => {\n const lines = [\n \"Latest LLM usage snapshot\",\n `Observed at: ${snapshot.observedAt}`,\n `Source: ${snapshot.source}`,\n `Model: ${snapshot.model ?? \"unknown\"}`,\n `Prompt tokens: ${snapshot.summary.promptTokens}`,\n `Completion tokens: ${snapshot.summary.completionTokens}`,\n `Total tokens: ${snapshot.summary.totalTokens}`,\n `Cached tokens: ${snapshot.summary.cachedTokens}`,\n `Cache hit: ${snapshot.summary.cacheHit ? \"yes\" : \"no\"}`,\n `Snapshot path: ${this.usageManager.snapshotPath}`,\n ];\n if (snapshot.summary.cacheMetricKeys.length > 0) {\n lines.push(`Cache metric keys: ${snapshot.summary.cacheMetricKeys.join(\", \")}`);\n }\n if (Object.keys(snapshot.usage).length > 0) {\n lines.push(\"\", \"Raw usage:\", JSON.stringify(snapshot.usage, null, 2));\n }\n return lines.join(\"\\n\");\n };\n\n private readonly renderHistory = (records: ReturnType<LlmUsageManager[\"getHistory\"]>): string => {\n const lines = [\n \"Recent LLM usage history\",\n `History path: ${this.usageManager.historyPath}`,\n `Showing: ${records.length} record(s)`,\n \"\",\n ];\n for (const [index, record] of records.entries()) {\n lines.push(\n `${index + 1}. ${record.observedAt} | source=${record.source} | model=${record.model ?? \"unknown\"} | total=${record.summary.totalTokens} | cached=${record.summary.cachedTokens} | cache-hit=${record.summary.cacheHit ? \"yes\" : \"no\"}`\n );\n }\n return lines.join(\"\\n\");\n };\n\n private readonly renderStats = (stats: LlmUsageStats): string => {\n const lines = [\n \"LLM usage history stats\",\n `History path: ${this.usageManager.historyPath}`,\n `Records: ${stats.totalRecords}`,\n `Usage records: ${stats.usageRecordCount}`,\n `Empty usage records: ${stats.emptyUsageRecordCount}`,\n `Prompt-bearing records: ${stats.promptTokenRecordCount}`,\n `Oldest observed at: ${stats.oldestObservedAt ?? \"n/a\"}`,\n `Latest observed at: ${stats.latestObservedAt ?? \"n/a\"}`,\n `Prompt tokens: ${stats.totalPromptTokens}`,\n `Completion tokens: ${stats.totalCompletionTokens}`,\n `Total tokens: ${stats.totalTokens}`,\n `Cached tokens: ${stats.totalCachedTokens}`,\n `Cache hit records: ${stats.cacheHitRecords}/${stats.promptTokenRecordCount} (${this.toPercent(stats.cacheHitRate)})`,\n `Cache token rate: ${this.toPercent(stats.tokenCacheRate)}`,\n ];\n if (stats.sources.length > 0) {\n lines.push(`Sources: ${stats.sources.map((item) => `${item.value}=${item.count}`).join(\", \")}`);\n }\n if (stats.models.length > 0) {\n lines.push(`Models: ${stats.models.map((item) => `${item.value}=${item.count}`).join(\", \")}`);\n }\n return lines.join(\"\\n\");\n };\n\n private readonly toPercent = (value: number): string => {\n return `${(value * 100).toFixed(1)}%`;\n };\n}\n"],"mappings":"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"}
@@ -4,4 +4,5 @@ import { PluginChannelBinding } from "@nextclaw/openclaw-compat";
4
4
  //#region src/commands/channel/channel-config-view.d.ts
5
5
  declare function resolveChannelConfigView(config: Config, bindings: PluginChannelBinding[]): Config;
6
6
  //#endregion
7
- export { resolveChannelConfigView };
7
+ export { resolveChannelConfigView };
8
+ //# sourceMappingURL=channel-config-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-config-view.d.ts","names":[],"sources":["../../../src/commands/channel/channel-config-view.ts"],"mappings":";;;;iBAGgB,wBAAA,CAAyB,MAAA,EAAQ,MAAA,EAAQ,QAAA,EAAU,oBAAA,KAAyB,MAAA"}
@@ -5,3 +5,5 @@ function resolveChannelConfigView(config, bindings) {
5
5
  }
6
6
  //#endregion
7
7
  export { resolveChannelConfigView };
8
+
9
+ //# sourceMappingURL=channel-config-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-config-view.js","names":[],"sources":["../../../src/commands/channel/channel-config-view.ts"],"sourcesContent":["import type { Config } from \"@nextclaw/core\";\nimport { toPluginConfigView, type PluginChannelBinding } from \"@nextclaw/openclaw-compat\";\n\nexport function resolveChannelConfigView(config: Config, bindings: PluginChannelBinding[]): Config {\n return toPluginConfigView(config, bindings) as Config;\n}\n"],"mappings":";;AAGA,SAAgB,yBAAyB,QAAgB,UAA0C;AACjG,QAAO,mBAAmB,QAAQ,SAAS"}
@@ -29,4 +29,5 @@ declare class ChannelListViewService {
29
29
  private resolveDefaultAccountId;
30
30
  }
31
31
  //#endregion
32
- export { ChannelListAccount, ChannelListEntry, ChannelListOutput, ChannelListViewService };
32
+ export { ChannelListAccount, ChannelListEntry, ChannelListOutput, ChannelListViewService };
33
+ //# sourceMappingURL=channel-list-view.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-list-view.service.d.ts","names":[],"sources":["../../../src/commands/channel/channel-list-view.service.ts"],"mappings":";;;;KAKY,gBAAA;EACV,EAAA;EACA,OAAA;EACA,gBAAA;EACA,QAAA,GAAW,kBAAA;AAAA;AAAA,KAGD,kBAAA;EACV,EAAA;EACA,MAAA;AAAA;AAAA,KAGU,iBAAA;EACV,QAAA,EAAU,gBAAA;AAAA;AAAA,cAmBC,sBAAA;EACX,KAAA,GAAS,MAAA;IACP,MAAA,EAAQ,MAAA;IACR,YAAA;IACA,cAAA,EAAgB,oBAAA;EAAA,MACd,iBAAA;EAAA,QAkBI,wBAAA;EAAA,QAGA,qBAAA;EAAA,QAKA,kBAAA;EAAA,QAYA,eAAA;EAAA,QAiBA,mBAAA;EAAA,QAWA,uBAAA;AAAA"}
@@ -62,3 +62,5 @@ var ChannelListViewService = class {
62
62
  };
63
63
  //#endregion
64
64
  export { ChannelListViewService };
65
+
66
+ //# sourceMappingURL=channel-list-view.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-list-view.service.js","names":[],"sources":["../../../src/commands/channel/channel-list-view.service.ts"],"sourcesContent":["import type { Config } from \"@nextclaw/core\";\nimport type { PluginChannelBinding } from \"@nextclaw/openclaw-compat\";\nimport { resolveChannelConfigView } from \"./channel-config-view.js\";\nimport { listExtensionChannelIds } from \"@nextclaw/kernel\";\n\nexport type ChannelListEntry = {\n id: string;\n enabled: boolean;\n defaultAccountId?: string;\n accounts?: ChannelListAccount[];\n};\n\nexport type ChannelListAccount = {\n id: string;\n userId?: string;\n};\n\nexport type ChannelListOutput = {\n channels: ChannelListEntry[];\n};\n\ntype ChannelListSource = {\n id: string;\n resolveDefaultAccountId?: (channelConfig: Record<string, unknown> | undefined) => string | undefined;\n};\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n return value as Record<string, unknown>;\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nexport class ChannelListViewService {\n build = (params: {\n config: Config;\n workspaceDir: string;\n pluginBindings: PluginChannelBinding[];\n }): ChannelListOutput => {\n const { config, pluginBindings, workspaceDir } = params;\n const sources = this.mergeChannelSources(\n pluginBindings.map(this.toPluginChannelSource),\n this.toManifestChannelSources(listExtensionChannelIds({\n config,\n workspace: workspaceDir,\n })),\n );\n const channelConfig = resolveChannelConfigView(config, pluginBindings);\n const channelConfigs = readRecord(channelConfig.channels) ?? {};\n return {\n channels: sources\n .map((source) => this.toChannelListEntry(source, channelConfigs[source.id]))\n .sort((left, right) => left.id.localeCompare(right.id))\n };\n };\n\n private toManifestChannelSources = (channelIds: string[]): ChannelListSource[] =>\n channelIds.map((id) => ({ id }));\n\n private toPluginChannelSource = (binding: PluginChannelBinding): ChannelListSource => ({\n id: binding.channelId,\n resolveDefaultAccountId: (channelConfig) => this.resolveDefaultAccountId(binding, channelConfig),\n });\n\n private toChannelListEntry = (source: ChannelListSource, rawChannelConfig: unknown): ChannelListEntry => {\n const channelConfig = readRecord(rawChannelConfig);\n const defaultAccountId = readString(channelConfig?.defaultAccountId) ?? source.resolveDefaultAccountId?.(channelConfig);\n const accounts = this.resolveAccounts(channelConfig);\n return {\n id: source.id,\n enabled: channelConfig?.enabled === true,\n ...(defaultAccountId ? { defaultAccountId } : {}),\n ...(accounts.length > 0 ? { accounts } : {})\n };\n };\n\n private resolveAccounts = (channelConfig: Record<string, unknown> | undefined): ChannelListAccount[] => {\n const accounts = readRecord(channelConfig?.accounts);\n if (!accounts) {\n return [];\n }\n return Object.entries(accounts)\n .map(([id, rawAccount]) => {\n const accountConfig = readRecord(rawAccount);\n const userId = readString(accountConfig?.userId);\n return {\n id,\n ...(userId ? { userId } : {})\n };\n })\n .sort((left, right) => left.id.localeCompare(right.id));\n };\n\n private mergeChannelSources = (\n pluginSources: ChannelListSource[],\n extensionSources: ChannelListSource[],\n ): ChannelListSource[] => {\n const sourcesByChannelId = new Map<string, ChannelListSource>();\n for (const source of [...pluginSources, ...extensionSources]) {\n sourcesByChannelId.set(source.id, source);\n }\n return [...sourcesByChannelId.values()];\n };\n\n private resolveDefaultAccountId = (\n binding: PluginChannelBinding,\n channelConfig: Record<string, unknown> | undefined,\n ): string | undefined => {\n const configAdapter = binding.channel.config?.defaultAccountId;\n if (!configAdapter) {\n return undefined;\n }\n try {\n return readString(configAdapter({ channels: { [binding.channelId]: channelConfig ?? {} } }));\n } catch {\n return undefined;\n }\n };\n}\n"],"mappings":";;;AA0BA,SAAS,WAAW,OAAqD;AACvE,KAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,MAAM,CAC7D;AAEF,QAAO;;AAGT,SAAS,WAAW,OAAoC;AACtD,QAAO,OAAO,UAAU,YAAY,MAAM,MAAM,CAAC,SAAS,IAAI,MAAM,MAAM,GAAG,KAAA;;AAG/E,IAAa,yBAAb,MAAoC;CAClC,SAAS,WAIgB;EACvB,MAAM,EAAE,QAAQ,gBAAgB,iBAAiB;EACjD,MAAM,UAAU,KAAK,oBACnB,eAAe,IAAI,KAAK,sBAAsB,EAC9C,KAAK,yBAAyB,wBAAwB;GACpD;GACA,WAAW;GACZ,CAAC,CAAC,CACJ;EAED,MAAM,iBAAiB,WADD,yBAAyB,QAAQ,eAAe,CACtB,SAAS,IAAI,EAAE;AAC/D,SAAO,EACL,UAAU,QACP,KAAK,WAAW,KAAK,mBAAmB,QAAQ,eAAe,OAAO,IAAI,CAAC,CAC3E,MAAM,MAAM,UAAU,KAAK,GAAG,cAAc,MAAM,GAAG,CAAC,EAC1D;;CAGH,4BAAoC,eAClC,WAAW,KAAK,QAAQ,EAAE,IAAI,EAAE;CAElC,yBAAiC,aAAsD;EACrF,IAAI,QAAQ;EACZ,0BAA0B,kBAAkB,KAAK,wBAAwB,SAAS,cAAc;EACjG;CAED,sBAA8B,QAA2B,qBAAgD;EACvG,MAAM,gBAAgB,WAAW,iBAAiB;EAClD,MAAM,mBAAmB,WAAW,eAAe,iBAAiB,IAAI,OAAO,0BAA0B,cAAc;EACvH,MAAM,WAAW,KAAK,gBAAgB,cAAc;AACpD,SAAO;GACL,IAAI,OAAO;GACX,SAAS,eAAe,YAAY;GACpC,GAAI,mBAAmB,EAAE,kBAAkB,GAAG,EAAE;GAChD,GAAI,SAAS,SAAS,IAAI,EAAE,UAAU,GAAG,EAAE;GAC5C;;CAGH,mBAA2B,kBAA6E;EACtG,MAAM,WAAW,WAAW,eAAe,SAAS;AACpD,MAAI,CAAC,SACH,QAAO,EAAE;AAEX,SAAO,OAAO,QAAQ,SAAS,CAC5B,KAAK,CAAC,IAAI,gBAAgB;GAEzB,MAAM,SAAS,WADO,WAAW,WAAW,EACH,OAAO;AAChD,UAAO;IACL;IACA,GAAI,SAAS,EAAE,QAAQ,GAAG,EAAE;IAC7B;IACD,CACD,MAAM,MAAM,UAAU,KAAK,GAAG,cAAc,MAAM,GAAG,CAAC;;CAG3D,uBACE,eACA,qBACwB;EACxB,MAAM,qCAAqB,IAAI,KAAgC;AAC/D,OAAK,MAAM,UAAU,CAAC,GAAG,eAAe,GAAG,iBAAiB,CAC1D,oBAAmB,IAAI,OAAO,IAAI,OAAO;AAE3C,SAAO,CAAC,GAAG,mBAAmB,QAAQ,CAAC;;CAGzC,2BACE,SACA,kBACuB;EACvB,MAAM,gBAAgB,QAAQ,QAAQ,QAAQ;AAC9C,MAAI,CAAC,cACH;AAEF,MAAI;AACF,UAAO,WAAW,cAAc,EAAE,UAAU,GAAG,QAAQ,YAAY,iBAAiB,EAAE,EAAE,EAAE,CAAC,CAAC;UACtF;AACN"}
@@ -28,4 +28,5 @@ declare class ChannelCommands {
28
28
  private buildChannelSetupInput;
29
29
  }
30
30
  //#endregion
31
- export { ChannelCommands, resolveChannelConfigView };
31
+ export { ChannelCommands, resolveChannelConfigView };
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/commands/channel/index.ts"],"mappings":";;;;cA4Ca,eAAA;EAAA,QAID,IAAA;EAAA,iBAHO,eAAA;cAGP,IAAA;IACN,IAAA;IACA,YAAA;IACA,cAAA,GAAiB,MAAA,EAAQ,oBAAA,KAAyB,OAAA;EAAA;EAItD,MAAA;EA+BA,IAAA,GAAQ,IAAA,GAAM,mBAAA;EAiBd,KAAA,GAAe,IAAA,GAAM,oBAAA,KAA4B,OAAA;EAAA,QA4BzC,oBAAA;EAAA,QAUA,2BAAA;EAAA,QAWA,sBAAA;EAAA,QAWA,kBAAA;EAAA,QA8BA,iBAAA;EAAA,QAOA,4BAAA;EAAA,QAYA,gCAAA;EAAA,QAeA,6BAAA;EAUR,GAAA,GAAa,IAAA,EAAM,kBAAA,KAAqB,OAAA;EAAA,QA6ChC,gBAAA;EAAA,QASA,6BAAA;EAAA,QAaA,2BAAA;EAAA,QASA,sBAAA;AAAA"}
@@ -245,3 +245,5 @@ var ChannelCommands = class {
245
245
  };
246
246
  //#endregion
247
247
  export { ChannelCommands, resolveChannelConfigView };
248
+
249
+ //# sourceMappingURL=index.js.map