@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextclaw-app.service.js","names":[],"sources":["../../../../src/shared/services/gateway/nextclaw-app.service.ts"],"sourcesContent":["import type { NextclawKernel } from \"@nextclaw/kernel\";\nimport { logStartupTrace, measureStartupAsync } from \"@nextclaw-service/shared/utils/startup-trace.js\";\nimport type { NextclawGatewayRuntime } from \"@nextclaw-service/shared/services/gateway/nextclaw-gateway-runtime.service.js\";\n\nexport type UiStartupHandle = {\n endpoint: string;\n};\n\ntype NextclawAppKernel = Pick<\n NextclawKernel,\n \"extensions\" | \"start\"\n>;\n\nexport class NextclawApp {\n private readonly kernel: NextclawAppKernel;\n\n constructor(private readonly gateway: NextclawGatewayRuntime) {\n this.kernel = gateway.kernel;\n }\n\n start = async (): Promise<void> => {\n logStartupTrace(\"service.deferred_startup.begin\");\n try {\n await this.bootstrapKernel();\n } catch (error) {\n this.handleKernelStartupError(error);\n }\n\n await this.startDeferredRuntimeServices();\n console.log(\"✓ Deferred startup: plugin gateways and channels settled\");\n logStartupTrace(\"service.deferred_startup.end\");\n };\n\n bootstrapKernel = async (): Promise<void> => {\n this.gateway.bootstrapStatus.markNcpAgentRunning();\n await measureStartupAsync(\n \"service.deferred_startup.bootstrap_kernel\",\n async () => await this.kernel.start(),\n );\n this.gateway.bootstrapStatus.markNcpAgentReady();\n if (this.gateway.uiConfig.enabled) {\n console.log(\"✓ UI NCP agent: ready\");\n return;\n }\n console.log(\"✓ Service NCP agent: ready\");\n };\n\n startDeferredRuntimeServices = async (): Promise<void> => {\n await measureStartupAsync(\n \"service.deferred_startup.load_plugins\",\n this.gateway.plugins.load,\n );\n await measureStartupAsync(\n \"service.deferred_startup.start_plugin_gateways\",\n this.gateway.plugins.startGateways,\n );\n await measureStartupAsync(\n \"service.deferred_startup.start_extensions\",\n async () => await this.kernel.extensions.start({ endpoint: this.gateway.uiStartup.endpoint }),\n );\n await measureStartupAsync(\"service.deferred_startup.start_channels\", this.gateway.startDeferredChannels);\n await measureStartupAsync(\n \"service.deferred_startup.wake_restart_sentinel\",\n this.gateway.restartWake.wakeFromRestartSentinel,\n );\n };\n\n private readonly handleKernelStartupError = (error: unknown): void => {\n this.gateway.bootstrapStatus.markNcpAgentError(\n error instanceof Error ? error.message : String(error),\n );\n console.error(\n `UI NCP agent startup failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n };\n}\n"],"mappings":";;AAaA,IAAa,cAAb,MAAyB;CACvB;CAEA,YAAY,SAAkD;AAAjC,OAAA,UAAA;AAC3B,OAAK,SAAS,QAAQ;;CAGxB,QAAQ,YAA2B;AACjC,kBAAgB,iCAAiC;AACjD,MAAI;AACF,SAAM,KAAK,iBAAiB;WACrB,OAAO;AACd,QAAK,yBAAyB,MAAM;;AAGtC,QAAM,KAAK,8BAA8B;AACzC,UAAQ,IAAI,2DAA2D;AACvE,kBAAgB,+BAA+B;;CAGjD,kBAAkB,YAA2B;AAC3C,OAAK,QAAQ,gBAAgB,qBAAqB;AAClD,QAAM,oBACJ,6CACA,YAAY,MAAM,KAAK,OAAO,OAAO,CACtC;AACD,OAAK,QAAQ,gBAAgB,mBAAmB;AAChD,MAAI,KAAK,QAAQ,SAAS,SAAS;AACjC,WAAQ,IAAI,wBAAwB;AACpC;;AAEF,UAAQ,IAAI,6BAA6B;;CAG3C,+BAA+B,YAA2B;AACxD,QAAM,oBACJ,yCACA,KAAK,QAAQ,QAAQ,KACtB;AACD,QAAM,oBACJ,kDACA,KAAK,QAAQ,QAAQ,cACtB;AACD,QAAM,oBACJ,6CACA,YAAY,MAAM,KAAK,OAAO,WAAW,MAAM,EAAE,UAAU,KAAK,QAAQ,UAAU,UAAU,CAAC,CAC9F;AACD,QAAM,oBAAoB,2CAA2C,KAAK,QAAQ,sBAAsB;AACxG,QAAM,oBACJ,kDACA,KAAK,QAAQ,YAAY,wBAC1B;;CAGH,4BAA6C,UAAyB;AACpE,OAAK,QAAQ,gBAAgB,kBAC3B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,CACvD;AACD,UAAQ,MACN,gCAAgC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,GACvF"}
@@ -83,4 +83,5 @@ declare class NextclawGatewayRuntime {
83
83
  private configureIngressHandlers;
84
84
  }
85
85
  //#endregion
86
- export { GatewayRuntimeDeps, NextclawGatewayRuntime };
86
+ export { GatewayRuntimeDeps, NextclawGatewayRuntime };
87
+ //# sourceMappingURL=nextclaw-gateway-runtime.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextclaw-gateway-runtime.service.d.ts","names":[],"sources":["../../../../src/shared/services/gateway/nextclaw-gateway-runtime.service.ts"],"mappings":";;;;;;;;;;;;;;;KAkEK,QAAA,GAAS,YAAA,CAAa,MAAA;AAAA,KACtB,YAAA,GAAa,YAAA,CAAa,UAAA;AAAA,KAC1B,gBAAA,GAAiB,YAAA,CAAa,cAAA;AAAA,KAE9B,qBAAA;EACH,WAAA,GAAc,OAAA,CAAQ,QAAA;EACtB,WAAA;AAAA;AAAA,KAGU,kBAAA;EACV,cAAA,GAAiB,MAAA,EAAQ,oBAAA,KAAyB,OAAA;EAClD,4BAAA,GAA+B,aAAA;EAC/B,YAAA,GAAe,OAAA;IAAW,WAAA,EAAa,MAAA;IAAyB,IAAA;EAAA,MAAoB,OAAA;EACpF,WAAA,QAAmB,OAAA;EACnB,gBAAA,GAAmB,IAAA,eAAmB,OAAA;EACtC,8BAAA,GAAiC,IAAA,UAAc,KAAA;IAAiC,OAAA;IAAiB,MAAA;EAAA;AAAA;AAAA,cAGtF,sBAAA;EAAA,iBA4BQ,IAAA;EAAA,iBACA,OAAA;EAAA,SA5BV,MAAA,EAAQ,cAAA;EAAA,SACR,WAAA,EAAa,QAAA;EAAA,SACb,UAAA,EAAY,YAAA;EAAA,SACZ,cAAA,EAAgB,gBAAA;EAAA,SAChB,UAAA,EAAY,iBAAA;EAAA,SACZ,cAAA,EAAgB,oBAAA;EAAA,SAChB,aAAA,EAAe,mBAAA;EAAA,SACf,OAAA,EAAS,OAAA;EAAA,SACT,YAAA,EADgB,oBAAA;EAAA,SAEhB,cAAA;EAAA,SACA,eAAA,EAAiB,kBAAA;EAAA,SACjB,iBAAA,EAAmB,qBAAA;EAAA,SAEnB,aAAA,EAAe,aAAA;EAAA,SACf,QAAA,EAAU,QAAA;EAAA,SACV,WAAA;EAAA,SACA,SAAA;EAAA,SACA,aAAA,EAAe,oBAAA;EAAA,SACf,WAAA,EAAa,oBAAA;EAAA,SACb,OAAA,EAAS,oBAAA;EAAA,SACT,WAAA,EAAa,yBAAA;EACtB,eAAA,EAAiB,2BAAA;EACjB,SAAA,EAAW,eAAA;EAAA,SACF,YAAA,EAAY,0BAAA;EAAA,QACb,sBAAA;cAGW,IAAA,EAAM,kBAAA,EACN,OAAA,EAAS,qBAAA;EAyD5B,KAAA,QAAkB,OAAA;EAAA,QAcV,KAAA;EAAA,QAOA,qBAAA;EAAA,QAOA,uBAAA;EAAA,QAIA,cAAA;EAAA,QAiCA,qBAAA;EAAA,QAkBA,cAAA;EAAA,QAmBA,oBAAA;EAAA,SAKC,qBAAA,QAAkC,OAAA;EAAA,QAInC,0BAAA;EAAA,iBAcS,aAAA;EAAA,QAWT,iBAAA;EAAA,QASA,OAAA;EAAA,QASA,kBAAA;EAAA,QAKA,uBAAA;EAAA,QAqBA,oBAAA;EAAA,QAiBA,sBAAA;EAAA,QAIA,sBAAA;EAAA,QA2BA,wBAAA;AAAA"}
@@ -300,3 +300,5 @@ var NextclawGatewayRuntime = class {
300
300
  };
301
301
  //#endregion
302
302
  export { NextclawGatewayRuntime };
303
+
304
+ //# sourceMappingURL=nextclaw-gateway-runtime.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextclaw-gateway-runtime.service.js","names":["getConfigPath","getDataDir","getWorkspacePath","waitForNextTick"],"sources":["../../../../src/shared/services/gateway/nextclaw-gateway-runtime.service.ts"],"sourcesContent":["import * as NextclawCore from \"@nextclaw/core\";\nimport {\n NextclawKernel,\n runGatewayInboundLoop,\n type AutomationManager,\n type ConfigManager,\n type LlmProviderManager,\n} from \"@nextclaw/kernel\";\nimport type { EventBus, Ingress } from \"@nextclaw/shared\";\nimport {\n setPluginRuntimeBridge,\n} from \"@nextclaw/openclaw-compat\";\nimport {\n startUiServer,\n type MarketplaceApiConfig,\n type UiRouterOptions,\n type UiRuntimeControlHost,\n type UiRuntimeUpdateHost,\n} from \"@nextclaw/server\";\nimport { resolve } from \"node:path\";\nimport { setImmediate as waitForNextTick } from \"node:timers/promises\";\nimport { GatewayControllerImpl } from \"@nextclaw-service/shared/controllers/gateway.controller.js\";\nimport { GatewayPluginManager } from \"@nextclaw-service/shared/services/gateway/managers/gateway-plugin.manager.js\";\nimport { GatewayRemoteManager } from \"@nextclaw-service/shared/services/gateway/managers/gateway-remote.manager.js\";\nimport { GatewayRestartWakeService } from \"@nextclaw-service/shared/services/gateway/gateway-restart-wake.service.js\";\nimport { createCronJobHandler } from \"@nextclaw-service/shared/services/gateway/utils/cron-job-handler.utils.js\";\nimport { companionRuntimeService } from \"@nextclaw-service/shared/services/ui/companion-runtime.service.js\";\nimport { handleGatewayDeferredStartupError } from \"@nextclaw-service/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.js\";\nimport { NextclawApp, type UiStartupHandle } from \"@nextclaw-service/shared/services/gateway/nextclaw-app.service.js\";\nimport { NextclawDistributionService } from \"@nextclaw-service/shared/services/runtime/nextclaw-distribution.service.js\";\nimport { ServiceBootstrapStatusStore } from \"@nextclaw-service/shared/services/gateway/service-bootstrap-status.service.js\";\nimport { ServiceFileWatcherRegistry, markLocalUiRuntimeIfStarted, startGatewayRuntimeSupport, watchServiceConfigFile } from \"@nextclaw-service/shared/services/gateway/service-startup-support.service.js\";\nimport { installPluginRuntimeBridge } from \"@nextclaw-service/shared/services/plugin/utils/plugin-runtime-bridge.utils.js\";\nimport { wrapStartChannelsWithDevPluginHotReload } from \"@nextclaw-service/shared/services/plugin/utils/plugin-dev-hot-reload.utils.js\";\nimport { ServiceMarketplaceInstaller } from \"@nextclaw-service/shared/services/marketplace/service-marketplace-installer.service.js\";\nimport { NpmRuntimeUpdateHost } from \"@nextclaw-service/shared/services/ui/npm-runtime-update-host.service.js\";\nimport { createRuntimeControlHost } from \"@nextclaw-service/shared/services/ui/runtime-control-host.service.js\";\nimport { localUiRuntimeStore } from \"@nextclaw-service/shared/stores/local-ui-runtime.store.js\";\nimport { managedServiceStateStore } from \"@nextclaw-service/shared/stores/managed-service-state.store.js\";\nimport type { RequestRestartParams } from \"@nextclaw-service/shared/types/cli.types.js\";\nimport { openBrowser, resolveUiConfig, resolveUiStaticDir } from \"@nextclaw-service/shared/utils/cli.utils.js\";\nimport { logStartupTrace, measureStartupAsync, measureStartupSync } from \"@nextclaw-service/shared/utils/startup-trace.js\";\n\nconst {\n getConfigPath,\n getDataDir,\n getWorkspacePath,\n} = NextclawCore;\n\nconst DEV_PLUGIN_HOT_RELOAD_STARTUP_SETTLE_MS = 5_000;\n\nfunction resolveApplyRestartMode(uiPort: number): \"managed-service-restart\" | \"manual-process-restart\" {\n const serviceState = managedServiceStateStore.read();\n if (serviceState?.pid === process.pid) {\n return \"managed-service-restart\";\n }\n if (\n process.env.NEXTCLAW_RUNTIME_BUNDLE_CHILD === \"1\" &&\n typeof serviceState?.uiPort === \"number\" &&\n serviceState.uiPort === uiPort\n ) {\n return \"managed-service-restart\";\n }\n return \"manual-process-restart\";\n}\n\ntype Config = NextclawCore.Config;\ntype MessageBus = NextclawCore.MessageBus;\ntype SessionManager = NextclawCore.SessionManager;\n\ntype GatewayRuntimeOptions = {\n uiOverrides?: Partial<Config[\"ui\"]>;\n uiStaticDir?: string | null;\n};\n\nexport type GatewayRuntimeDeps = {\n requestRestart: (params: RequestRestartParams) => Promise<void>;\n initializeAgentHomeDirectory: (homeDirectory: string) => void;\n startService: (options: { uiOverrides: Record<string, unknown>; open: boolean }) => Promise<void>;\n stopService: () => Promise<void>;\n runCliSubcommand: (args: string[]) => Promise<string>;\n installBuiltinMarketplaceSkill: (slug: string, force: boolean | undefined) => { message: string; output?: string } | null;\n};\n\nexport class NextclawGatewayRuntime {\n readonly kernel: NextclawKernel;\n readonly appEventBus: EventBus;\n readonly messageBus: MessageBus;\n readonly sessionManager: SessionManager;\n readonly automation: AutomationManager;\n readonly runtimeControl: UiRuntimeControlHost;\n readonly runtimeUpdate: UiRuntimeUpdateHost | null;\n readonly ingress: Ingress;\n readonly distribution = NextclawDistributionService.get();\n readonly productVersion: string;\n readonly providerManager: LlmProviderManager;\n readonly gatewayController: GatewayControllerImpl;\n\n readonly configManager: ConfigManager;\n readonly uiConfig: Config[\"ui\"];\n readonly uiStaticDir: string | null;\n readonly workspace: string;\n readonly remoteManager: GatewayRemoteManager;\n readonly marketplace: MarketplaceApiConfig;\n readonly plugins: GatewayPluginManager;\n readonly restartWake: GatewayRestartWakeService;\n bootstrapStatus: ServiceBootstrapStatusStore;\n uiStartup: UiStartupHandle;\n readonly fileWatchers = new ServiceFileWatcherRegistry();\n private deferredChannelStarter: () => Promise<void>;\n\n constructor(\n private readonly deps: GatewayRuntimeDeps,\n private readonly options: GatewayRuntimeOptions,\n ) {\n const configPath = getConfigPath();\n this.kernel = measureStartupSync(\n \"service.gateway.kernel\",\n () => new NextclawKernel({\n homeDir: getDataDir(),\n configPath,\n }),\n );\n this.configManager = this.kernel.configManager;\n const config = this.configManager.config;\n this.uiConfig = resolveUiConfig(config, options.uiOverrides);\n this.uiStaticDir = options.uiStaticDir === undefined ? resolveUiStaticDir(this.distribution.uiDistDir) : options.uiStaticDir;\n this.workspace = getWorkspacePath(config.agents.defaults.workspace);\n this.appEventBus = this.kernel.eventBus;\n this.ingress = this.kernel.ingress;\n this.messageBus = this.kernel.messageBus;\n this.sessionManager = this.kernel.sessions;\n this.automation = this.kernel.automation;\n this.productVersion = this.distribution.version;\n this.plugins = new GatewayPluginManager(this);\n this.providerManager = this.kernel.llmProviders;\n this.installConfigHostHooks();\n this.restartWake = new GatewayRestartWakeService(this);\n this.bootstrapStatus = this.createBootstrapStatus();\n this.uiStartup = this.createDisabledUiStartup();\n this.remoteManager = new GatewayRemoteManager({\n deps: this.deps,\n configManager: this.configManager,\n uiConfig: this.uiConfig,\n onRemoteStateChange: (state) => this.bootstrapStatus.syncRemoteRuntimeState(state),\n });\n this.marketplace = this.createMarketplace();\n this.runtimeControl = createRuntimeControlHost({\n serviceCommands: this.deps,\n requestRestart: this.deps.requestRestart,\n uiConfig: this.uiConfig,\n });\n this.runtimeUpdate =\n process.env.NEXTCLAW_DISABLE_RUNTIME_UPDATE_HOST === \"1\"\n ? null\n : new NpmRuntimeUpdateHost({\n eventBus: this.appEventBus,\n applyRestartMode: resolveApplyRestartMode(this.uiConfig.port),\n requestRestart: this.deps.requestRestart,\n uiConfig: this.uiConfig,\n });\n this.gatewayController = this.createGatewayController();\n this.kernel.provideGatewayController(this.gatewayController);\n this.deferredChannelStarter = this.startChannels;\n this.automation.onJob = createCronJobHandler({\n agentRunRequests: this.kernel.agentRunRequestManager,\n bus: this.messageBus,\n });\n }\n\n start = async (): Promise<void> => {\n logStartupTrace(\"service.start_gateway.begin\");\n await this.reset();\n this.configureIngressHandlers();\n this.uiStartup = await this.startUiRuntime();\n await companionRuntimeService.applyConfig(this.configManager.config);\n await this.markUiRuntimeReady();\n await this.startSupportServices();\n this.installChannelDevHotReload();\n await this.runRuntimeLoop();\n await companionRuntimeService.ensureStopped();\n logStartupTrace(\"service.start_gateway.end\");\n };\n\n private reset = async (): Promise<void> => {\n await this.fileWatchers.clear();\n this.bootstrapStatus = this.createBootstrapStatus();\n this.uiStartup = this.createDisabledUiStartup();\n this.deferredChannelStarter = this.startChannels;\n };\n\n private createBootstrapStatus = (): ServiceBootstrapStatusStore => {\n const bootstrapStatus = new ServiceBootstrapStatusStore();\n bootstrapStatus.markChannelsPending();\n bootstrapStatus.setRemoteState(this.configManager.config.remote.enabled ? \"pending\" : \"disabled\");\n return bootstrapStatus;\n };\n\n private createDisabledUiStartup = (): UiStartupHandle => ({\n endpoint: \"\",\n });\n\n private startUiRuntime = async (): Promise<UiStartupHandle> => {\n const uiStartup = await measureStartupAsync(\"service.start_ui_runtime\", async () => {\n logStartupTrace(\"service.start_ui_runtime.begin\");\n if (!this.uiConfig.enabled) {\n return this.createDisabledUiStartup();\n }\n const uiServer = await startUiServer(this.createUiRouterOptions());\n const uiUrl = NextclawCore.resolveLocalUiBaseUrl({\n host: uiServer.host,\n port: uiServer.port,\n });\n console.log(`✓ UI API: ${uiUrl}/api`);\n if (this.uiStaticDir) {\n console.log(`✓ UI frontend: ${uiUrl}`);\n }\n if (this.uiConfig.open) {\n openBrowser(uiUrl);\n }\n logStartupTrace(\"service.start_ui_runtime.ready\", {\n host: uiServer.host,\n port: uiServer.port,\n });\n return {\n endpoint: uiUrl,\n };\n });\n markLocalUiRuntimeIfStarted({\n uiStartup: this.uiConfig.enabled ? uiStartup : null,\n uiConfig: this.uiConfig,\n });\n return uiStartup;\n };\n\n private createUiRouterOptions = (): UiRouterOptions => ({\n kernel: this.kernel,\n configPath: this.configManager.configPath,\n appEventBus: this.appEventBus,\n uiConfig: this.uiConfig,\n uiStaticDir: this.uiStaticDir,\n productVersion: this.productVersion,\n applyLiveConfigReload: this.configManager.applyLiveConfigReload,\n initializeAgentHomeDirectory: this.deps.initializeAgentHomeDirectory,\n marketplace: this.marketplace,\n cron: this.automation,\n remoteAccess: this.remoteManager.remoteAccess,\n runtimeControl: this.runtimeControl,\n ...(this.runtimeUpdate ? { runtimeUpdate: this.runtimeUpdate } : {}),\n bootstrapStatus: this.bootstrapStatus,\n plugins: this.plugins,\n });\n\n private runRuntimeLoop = async (): Promise<void> => {\n logStartupTrace(\"service.start_gateway.runtime_loop_begin\");\n let startupTask: Promise<void> | null = null;\n try {\n const runtimeLoopTask = runGatewayInboundLoop(this);\n startupTask = this.startDeferredRuntime();\n void startupTask.catch((error) => handleGatewayDeferredStartupError({\n bootstrapStatus: this.bootstrapStatus,\n error,\n }));\n await runtimeLoopTask;\n } finally {\n if (startupTask) {\n await startupTask.catch(() => undefined);\n }\n await this.cleanup();\n }\n };\n\n private startDeferredRuntime = async (): Promise<void> => {\n const app = new NextclawApp(this);\n await app.start();\n };\n\n readonly startDeferredChannels = async (): Promise<void> => {\n await this.deferredChannelStarter();\n };\n\n private installChannelDevHotReload = (): void => {\n this.deferredChannelStarter = wrapStartChannelsWithDevPluginHotReload({\n startChannels: this.startChannels,\n watcherRegistry: this.fileWatchers,\n isRuntimeActive: () => true,\n reloadPlugins: async (pluginIds: string[]) => {\n await this.plugins.reloadForDevHotReload(\n pluginIds.map((pluginId) => `plugins.entries.${pluginId}.source`),\n );\n },\n startupSettleMs: DEV_PLUGIN_HOT_RELOAD_STARTUP_SETTLE_MS,\n });\n };\n\n private readonly startChannels = async (): Promise<void> => {\n await this.kernel.channels.start();\n const enabledChannels = this.kernel.channels.enabledChannels;\n if (enabledChannels.length > 0) {\n console.log(`✓ Channels enabled: ${enabledChannels.join(\", \")}`);\n } else {\n console.log(\"Warning: No channels enabled\");\n }\n this.bootstrapStatus.markChannelsReady(enabledChannels);\n };\n\n private createMarketplace = (): MarketplaceApiConfig => ({\n apiBaseUrl: process.env.NEXTCLAW_MARKETPLACE_API_BASE,\n installer: new ServiceMarketplaceInstaller({\n applyLiveConfigReload: this.configManager.applyLiveConfigReload,\n runCliSubcommand: this.deps.runCliSubcommand,\n installBuiltinSkill: this.deps.installBuiltinMarketplaceSkill,\n }).createInstaller(),\n });\n\n private cleanup = async (): Promise<void> => {\n localUiRuntimeStore.clearIfOwnedByProcess();\n await this.fileWatchers.clear();\n await this.kernel.extensions.stop();\n await this.remoteManager.stop();\n await this.plugins.stopGateways();\n setPluginRuntimeBridge(null);\n };\n\n private markUiRuntimeReady = async (): Promise<void> => {\n this.bootstrapStatus.markShellReady();\n await waitForNextTick();\n };\n\n private createGatewayController = (): GatewayControllerImpl => {\n return measureStartupSync(\n \"service.gateway.gateway_controller\",\n () => new GatewayControllerImpl({\n configManager: this.configManager,\n channels: this.kernel.channels,\n cron: this.automation,\n sessionManager: this.sessionManager,\n requestRestart: async (options) => {\n await this.deps.requestRestart({\n reason: options?.reason ?? \"gateway tool restart\",\n manualMessage: \"Restart the gateway to apply changes.\",\n strategy: \"background-service-or-exit\",\n delayMs: options?.delayMs,\n silentOnServiceRestart: true,\n });\n },\n })\n );\n };\n\n private startSupportServices = async (): Promise<void> => {\n this.plugins.publishConfigChanges();\n this.configurePluginRuntime();\n await measureStartupAsync(\"service.start_gateway_support_services\", async () =>\n await startGatewayRuntimeSupport({\n automation: this.automation,\n remoteModule: this.remoteManager.remoteModule,\n watchConfigFile: () => watchServiceConfigFile({\n configPath: resolve(getConfigPath()),\n watcherRegistry: this.fileWatchers,\n scheduleReload: (reason) => this.configManager.scheduleReload(reason)\n }),\n watcherRegistry: this.fileWatchers\n })\n );\n };\n\n private configurePluginRuntime = (): void => {\n installPluginRuntimeBridge(this);\n };\n\n private installConfigHostHooks = (): void => {\n this.configManager.installRuntimeHooks({\n reloadCompanion: async ({ config: nextConfig }) => {\n await companionRuntimeService.applyConfig(nextConfig);\n },\n reloadPlugins: async ({ config: nextConfig, changedPaths }) => {\n const result = await this.plugins.reloadForConfigChange({\n config: nextConfig,\n changedPaths,\n });\n if (result.restartChannels) {\n console.log(\"Config reload: plugin channel gateways restarted.\");\n }\n return { restartChannels: result.restartChannels };\n },\n onRestartRequired: (paths) => {\n void this.deps.requestRestart({\n changedPaths: paths,\n manualMessage: `已保存以下改动,等待你手动重启后生效:${paths.join(\", \")}`,\n mode: \"notify\",\n reason: `config reload requires restart: ${paths.join(\", \")}`,\n strategy: \"background-service-or-manual\",\n });\n },\n });\n };\n\n private configureIngressHandlers = (): void => {\n this.kernel.extensions.registerIngressHandlers();\n };\n\n}\n"],"mappings":"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"}
@@ -29,4 +29,5 @@ declare class ServiceBootstrapStatusStore {
29
29
  markError(error: string): void;
30
30
  }
31
31
  //#endregion
32
- export { ServiceBootstrapStatusStore };
32
+ export { ServiceBootstrapStatusStore };
33
+ //# sourceMappingURL=service-bootstrap-status.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-bootstrap-status.service.d.ts","names":[],"sources":["../../../../src/shared/services/gateway/service-bootstrap-status.service.ts"],"mappings":";;;;cAOa,2BAAA;EAAA,QACH,KAAA;EAmBR,SAAA,CAAA,GAAa,mBAAA;EAab,cAAA,CAAA;EAKA,mBAAA,CAAA;EASA,iBAAA,CAAA;EASA,iBAAA,CAAkB,KAAA;EASlB,0BAAA,CAA2B,MAAA;IACzB,gBAAA;EAAA;EAcF,2BAAA,CAA4B,MAAA;IAC1B,iBAAA;IACA,gBAAA;EAAA;EAUF,wBAAA,CAAyB,MAAA;IACvB,iBAAA;IACA,gBAAA;EAAA;EAYF,wBAAA,CAAyB,KAAA;EAWzB,mBAAA,CAAA;EAOA,iBAAA,CAAkB,OAAA;EAWlB,iBAAA,CAAkB,KAAA;EAUlB,cAAA,CAAe,KAAA,EAAO,oBAAA,EAAsB,OAAA;EAO5C,sBAAA,CAAuB,OAAA,EAAS,kBAAA;EAWhC,SAAA,CAAU,KAAA;AAAA"}
@@ -140,3 +140,5 @@ var ServiceBootstrapStatusStore = class {
140
140
  };
141
141
  //#endregion
142
142
  export { ServiceBootstrapStatusStore };
143
+
144
+ //# sourceMappingURL=service-bootstrap-status.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-bootstrap-status.service.js","names":[],"sources":["../../../../src/shared/services/gateway/service-bootstrap-status.service.ts"],"sourcesContent":["import type { BootstrapRemoteState, BootstrapStatusView } from \"@nextclaw/server\";\nimport type { RemoteRuntimeState } from \"@nextclaw/remote\";\n\nfunction now(): string {\n return new Date().toISOString();\n}\n\nexport class ServiceBootstrapStatusStore {\n private state: BootstrapStatusView = {\n phase: \"kernel-starting\",\n ncpAgent: {\n state: \"pending\",\n },\n pluginHydration: {\n state: \"pending\",\n loadedPluginCount: 0,\n totalPluginCount: 0\n },\n channels: {\n state: \"pending\",\n enabled: []\n },\n remote: {\n state: \"pending\"\n }\n };\n\n getStatus(): BootstrapStatusView {\n return {\n ...this.state,\n ncpAgent: { ...this.state.ncpAgent },\n pluginHydration: { ...this.state.pluginHydration },\n channels: {\n ...this.state.channels,\n enabled: [...this.state.channels.enabled]\n },\n remote: { ...this.state.remote }\n };\n }\n\n markShellReady(): void {\n this.state.phase = \"shell-ready\";\n this.state.shellReadyAt = this.state.shellReadyAt ?? now();\n }\n\n markNcpAgentRunning(): void {\n this.state.ncpAgent = {\n state: \"running\",\n startedAt: this.state.ncpAgent.startedAt ?? now(),\n completedAt: undefined,\n error: undefined\n };\n }\n\n markNcpAgentReady(): void {\n this.state.ncpAgent = {\n state: \"ready\",\n startedAt: this.state.ncpAgent.startedAt ?? now(),\n completedAt: now(),\n error: undefined\n };\n }\n\n markNcpAgentError(error: string): void {\n this.state.ncpAgent = {\n state: \"error\",\n startedAt: this.state.ncpAgent.startedAt ?? now(),\n completedAt: now(),\n error\n };\n }\n\n markPluginHydrationRunning(params: {\n totalPluginCount: number;\n }): void {\n this.state.phase = \"hydrating-capabilities\";\n this.state.pluginHydration = {\n ...this.state.pluginHydration,\n state: \"running\",\n loadedPluginCount: 0,\n totalPluginCount: params.totalPluginCount,\n startedAt: this.state.pluginHydration.startedAt ?? now(),\n completedAt: undefined,\n error: undefined\n };\n }\n\n markPluginHydrationProgress(params: {\n loadedPluginCount: number;\n totalPluginCount?: number;\n }): void {\n this.state.pluginHydration = {\n ...this.state.pluginHydration,\n state: \"running\",\n loadedPluginCount: params.loadedPluginCount,\n totalPluginCount: params.totalPluginCount ?? this.state.pluginHydration.totalPluginCount\n };\n }\n\n markPluginHydrationReady(params: {\n loadedPluginCount: number;\n totalPluginCount: number;\n }): void {\n this.state.pluginHydration = {\n ...this.state.pluginHydration,\n state: \"ready\",\n loadedPluginCount: params.loadedPluginCount,\n totalPluginCount: params.totalPluginCount,\n completedAt: now(),\n error: undefined\n };\n }\n\n markPluginHydrationError(error: string): void {\n this.state.phase = \"error\";\n this.state.lastError = error;\n this.state.pluginHydration = {\n ...this.state.pluginHydration,\n state: \"error\",\n completedAt: now(),\n error\n };\n }\n\n markChannelsPending(): void {\n this.state.channels = {\n state: \"pending\",\n enabled: []\n };\n }\n\n markChannelsReady(enabled: string[]): void {\n this.state.channels = {\n state: \"ready\",\n enabled: [...enabled]\n };\n if (this.state.pluginHydration.state === \"ready\") {\n this.state.phase = \"ready\";\n this.state.lastError = undefined;\n }\n }\n\n markChannelsError(error: string): void {\n this.state.phase = \"error\";\n this.state.lastError = error;\n this.state.channels = {\n state: \"error\",\n enabled: [...this.state.channels.enabled],\n error\n };\n }\n\n setRemoteState(state: BootstrapRemoteState, message?: string): void {\n this.state.remote = {\n state,\n ...(message ? { message } : {})\n };\n }\n\n syncRemoteRuntimeState(runtime: RemoteRuntimeState): void {\n const message = runtime.lastError?.trim() || undefined;\n const state =\n runtime.state === \"connected\" ? \"ready\"\n : runtime.state === \"disabled\" ? \"disabled\"\n : runtime.state === \"error\" && message?.includes(\"already owned\") ? \"conflict\"\n : runtime.state === \"error\" ? \"error\"\n : \"pending\";\n this.setRemoteState(state, message);\n }\n\n markError(error: string): void {\n this.state.phase = \"error\";\n this.state.lastError = error;\n }\n}\n"],"mappings":"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"}
@@ -39,4 +39,5 @@ declare function startGatewayRuntimeSupport(params: {
39
39
  watcherRegistry: ServiceFileWatcherRegistry;
40
40
  }): Promise<void>;
41
41
  //#endregion
42
- export { ServiceFileWatcherRegistry, logPluginGatewayDiagnostics, markLocalUiRuntimeIfStarted, pluginGatewayLogger, startGatewayRuntimeSupport, startGatewaySupportServices, watchCronStoreFile, watchServiceConfigFile };
42
+ export { ServiceFileWatcherRegistry, logPluginGatewayDiagnostics, markLocalUiRuntimeIfStarted, pluginGatewayLogger, startGatewayRuntimeSupport, startGatewaySupportServices, watchCronStoreFile, watchServiceConfigFile };
43
+ //# sourceMappingURL=service-startup-support.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-startup-support.service.d.ts","names":[],"sources":["../../../../src/shared/services/gateway/service-startup-support.service.ts"],"mappings":";;;;;;;cAQa,mBAAA;;;;;;iBAOG,2BAAA,CACd,WAAA,EAAa,gBAAA;AAAA,iBAaO,2BAAA,CAA4B,MAAA;EAChD,UAAA,EAAY,iBAAA;EACZ,YAAA,EAAc,mBAAA;EACd,eAAA;AAAA,IACE,OAAA;AAAA,iBAWY,kBAAA,CAAmB,UAAA,EAAY,iBAAA,GAAoB,SAAA;AAAA,iBAqBnD,sBAAA,CAAuB,MAAA;EACrC,UAAA;EACA,eAAA,EAAiB,0BAAA;EACjB,cAAA,GAAiB,MAAA;AAAA;AAAA,cA0BN,0BAAA;EAAA,iBACM,QAAA;EAAA,SAER,QAAA,GAAY,OAAA,EAAS,SAAA;EAAA,SAIrB,KAAA,QAAkB,OAAA;AAAA;AAAA,iBAYb,2BAAA,CAA4B,MAAA;EAC1C,SAAA;EACA,QAAA,EAAU,IAAA,CAAK,MAAA;AAAA;AAAA,iBAQK,0BAAA,CAA2B,MAAA;EAC/C,UAAA,EAAY,iBAAA;EACZ,YAAA,EAAc,mBAAA;EACd,eAAA;EACA,eAAA,EAAiB,0BAAA;AAAA,IACf,OAAA"}
@@ -94,3 +94,5 @@ async function startGatewayRuntimeSupport(params) {
94
94
  }
95
95
  //#endregion
96
96
  export { ServiceFileWatcherRegistry, logPluginGatewayDiagnostics, markLocalUiRuntimeIfStarted, pluginGatewayLogger, startGatewayRuntimeSupport, startGatewaySupportServices, watchCronStoreFile, watchServiceConfigFile };
97
+
98
+ //# sourceMappingURL=service-startup-support.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-startup-support.service.js","names":[],"sources":["../../../../src/shared/services/gateway/service-startup-support.service.ts"],"sourcesContent":["import type { Config } from \"@nextclaw/core\";\nimport type { AutomationManager } from \"@nextclaw/kernel\";\nimport type { PluginDiagnostic } from \"@nextclaw/openclaw-compat\";\nimport type { RemoteServiceModule } from \"@nextclaw/remote\";\nimport chokidar, { type FSWatcher } from \"chokidar\";\nimport { resolve } from \"node:path\";\nimport { localUiRuntimeStore } from \"../../../shared/stores/local-ui-runtime.store.js\";\n\nexport const pluginGatewayLogger = {\n info: (message: string) => console.log(`[plugins] ${message}`),\n warn: (message: string) => console.warn(`[plugins] ${message}`),\n error: (message: string) => console.error(`[plugins] ${message}`),\n debug: (message: string) => console.debug(`[plugins] ${message}`)\n};\n\nexport function logPluginGatewayDiagnostics(\n diagnostics: PluginDiagnostic[],\n): void {\n for (const diag of diagnostics) {\n const prefix = diag.pluginId ? `${diag.pluginId}: ` : \"\";\n const text = `${prefix}${diag.message}`;\n if (diag.level === \"error\") {\n console.error(`[plugins] ${text}`);\n } else {\n console.warn(`[plugins] ${text}`);\n }\n }\n}\n\nexport async function startGatewaySupportServices(params: {\n automation: AutomationManager;\n remoteModule: RemoteServiceModule | null;\n watchConfigFile: () => void;\n}): Promise<void> {\n const { automation, remoteModule, watchConfigFile } = params;\n const cronJobs = automation.status().jobs;\n if (cronJobs > 0) {\n console.log(`✓ Cron: ${cronJobs} scheduled jobs`);\n }\n remoteModule?.start();\n watchConfigFile();\n await automation.start();\n}\n\nexport function watchCronStoreFile(automation: AutomationManager): FSWatcher {\n const cronStorePath = resolve(automation.storePath);\n const watcher = chokidar.watch(cronStorePath, {\n ignoreInitial: true,\n awaitWriteFinish: { stabilityThreshold: 200, pollInterval: 50 }\n });\n watcher.on(\"all\", (event, changedPath) => {\n if (resolve(changedPath) !== cronStorePath) {\n return;\n }\n if (event === \"add\" || event === \"change\" || event === \"unlink\") {\n try {\n automation.reloadFromStore();\n } catch (error) {\n console.error(`Cron store reload failed (${event}): ${String(error)}`);\n }\n }\n });\n return watcher;\n}\n\nexport function watchServiceConfigFile(params: {\n configPath: string;\n watcherRegistry: ServiceFileWatcherRegistry;\n scheduleReload: (reason: string) => void;\n}): void {\n const configPath = resolve(params.configPath);\n const watcher = chokidar.watch(configPath, {\n ignoreInitial: true,\n awaitWriteFinish: { stabilityThreshold: 200, pollInterval: 50 }\n });\n params.watcherRegistry.remember(watcher);\n watcher.on(\"all\", (event, changedPath) => {\n if (resolve(changedPath) !== configPath) {\n return;\n }\n if (event === \"add\") {\n params.scheduleReload(\"config add\");\n return;\n }\n if (event === \"change\") {\n params.scheduleReload(\"config change\");\n return;\n }\n if (event === \"unlink\") {\n params.scheduleReload(\"config unlink\");\n }\n });\n}\n\nexport class ServiceFileWatcherRegistry {\n private readonly watchers: FSWatcher[] = [];\n\n readonly remember = (watcher: FSWatcher): void => {\n this.watchers.push(watcher);\n };\n\n readonly clear = async (): Promise<void> => {\n const watchers = this.watchers.splice(0);\n await Promise.allSettled(watchers.map(async (watcher) => {\n try {\n await watcher.close();\n } catch {\n void 0;\n }\n }));\n };\n}\n\nexport function markLocalUiRuntimeIfStarted(params: {\n uiStartup: unknown | null | undefined;\n uiConfig: Pick<Config[\"ui\"], \"host\" | \"port\">;\n}): void {\n const { uiConfig, uiStartup } = params;\n if (uiStartup) {\n localUiRuntimeStore.writeCurrentProcess(uiConfig);\n }\n}\n\nexport async function startGatewayRuntimeSupport(params: {\n automation: AutomationManager;\n remoteModule: RemoteServiceModule | null;\n watchConfigFile: () => void;\n watcherRegistry: ServiceFileWatcherRegistry;\n}): Promise<void> {\n const {\n automation,\n remoteModule,\n watchConfigFile,\n watcherRegistry\n } = params;\n await startGatewaySupportServices({\n automation,\n remoteModule,\n watchConfigFile\n });\n watcherRegistry.remember(watchCronStoreFile(automation));\n}\n"],"mappings":";;;;AAQA,MAAa,sBAAsB;CACjC,OAAO,YAAoB,QAAQ,IAAI,aAAa,UAAU;CAC9D,OAAO,YAAoB,QAAQ,KAAK,aAAa,UAAU;CAC/D,QAAQ,YAAoB,QAAQ,MAAM,aAAa,UAAU;CACjE,QAAQ,YAAoB,QAAQ,MAAM,aAAa,UAAU;CAClE;AAED,SAAgB,4BACd,aACM;AACN,MAAK,MAAM,QAAQ,aAAa;EAE9B,MAAM,OAAO,GADE,KAAK,WAAW,GAAG,KAAK,SAAS,MAAM,KAC7B,KAAK;AAC9B,MAAI,KAAK,UAAU,QACjB,SAAQ,MAAM,aAAa,OAAO;MAElC,SAAQ,KAAK,aAAa,OAAO;;;AAKvC,eAAsB,4BAA4B,QAIhC;CAChB,MAAM,EAAE,YAAY,cAAc,oBAAoB;CACtD,MAAM,WAAW,WAAW,QAAQ,CAAC;AACrC,KAAI,WAAW,EACb,SAAQ,IAAI,WAAW,SAAS,iBAAiB;AAEnD,eAAc,OAAO;AACrB,kBAAiB;AACjB,OAAM,WAAW,OAAO;;AAG1B,SAAgB,mBAAmB,YAA0C;CAC3E,MAAM,gBAAgB,QAAQ,WAAW,UAAU;CACnD,MAAM,UAAU,SAAS,MAAM,eAAe;EAC5C,eAAe;EACf,kBAAkB;GAAE,oBAAoB;GAAK,cAAc;GAAI;EAChE,CAAC;AACF,SAAQ,GAAG,QAAQ,OAAO,gBAAgB;AACxC,MAAI,QAAQ,YAAY,KAAK,cAC3B;AAEF,MAAI,UAAU,SAAS,UAAU,YAAY,UAAU,SACrD,KAAI;AACF,cAAW,iBAAiB;WACrB,OAAO;AACd,WAAQ,MAAM,6BAA6B,MAAM,KAAK,OAAO,MAAM,GAAG;;GAG1E;AACF,QAAO;;AAGT,SAAgB,uBAAuB,QAI9B;CACP,MAAM,aAAa,QAAQ,OAAO,WAAW;CAC7C,MAAM,UAAU,SAAS,MAAM,YAAY;EACzC,eAAe;EACf,kBAAkB;GAAE,oBAAoB;GAAK,cAAc;GAAI;EAChE,CAAC;AACF,QAAO,gBAAgB,SAAS,QAAQ;AACxC,SAAQ,GAAG,QAAQ,OAAO,gBAAgB;AACxC,MAAI,QAAQ,YAAY,KAAK,WAC3B;AAEF,MAAI,UAAU,OAAO;AACnB,UAAO,eAAe,aAAa;AACnC;;AAEF,MAAI,UAAU,UAAU;AACtB,UAAO,eAAe,gBAAgB;AACtC;;AAEF,MAAI,UAAU,SACZ,QAAO,eAAe,gBAAgB;GAExC;;AAGJ,IAAa,6BAAb,MAAwC;CACtC,WAAyC,EAAE;CAE3C,YAAqB,YAA6B;AAChD,OAAK,SAAS,KAAK,QAAQ;;CAG7B,QAAiB,YAA2B;EAC1C,MAAM,WAAW,KAAK,SAAS,OAAO,EAAE;AACxC,QAAM,QAAQ,WAAW,SAAS,IAAI,OAAO,YAAY;AACvD,OAAI;AACF,UAAM,QAAQ,OAAO;WACf;IAGR,CAAC;;;AAIP,SAAgB,4BAA4B,QAGnC;CACP,MAAM,EAAE,UAAU,cAAc;AAChC,KAAI,UACF,qBAAoB,oBAAoB,SAAS;;AAIrD,eAAsB,2BAA2B,QAK/B;CAChB,MAAM,EACJ,YACA,cACA,iBACA,oBACE;AACJ,OAAM,4BAA4B;EAChC;EACA;EACA;EACD,CAAC;AACF,iBAAgB,SAAS,mBAAmB,WAAW,CAAC"}
@@ -20,4 +20,5 @@ declare function createCronJobHandler(params: {
20
20
  bus: MessageBus;
21
21
  }): (job: CronJobLike) => Promise<string>;
22
22
  //#endregion
23
- export { createCronJobHandler };
23
+ export { createCronJobHandler };
24
+ //# sourceMappingURL=cron-job-handler.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-job-handler.utils.d.ts","names":[],"sources":["../../../../../src/shared/services/gateway/utils/cron-job-handler.utils.ts"],"mappings":";;;;KAGK,WAAA;EACH,EAAA;EACA,IAAA;EACA,OAAA;IACE,OAAA;IACA,OAAA;IACA,SAAA;IACA,OAAA;IACA,OAAA;IACA,EAAA;IACA,SAAA;EAAA;AAAA;AAAA,iBAsCY,oBAAA,CAAqB,MAAA;EACnC,gBAAA,EAAkB,cAAA;EAClB,GAAA,EAAK,UAAA;AAAA,KACF,GAAA,EAAK,WAAA,KAAgB,OAAA"}
@@ -55,3 +55,5 @@ function createCronJobHandler(params) {
55
55
  }
56
56
  //#endregion
57
57
  export { createCronJobHandler };
58
+
59
+ //# sourceMappingURL=cron-job-handler.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-job-handler.utils.js","names":[],"sources":["../../../../../src/shared/services/gateway/utils/cron-job-handler.utils.ts"],"sourcesContent":["import type { MessageBus } from \"@nextclaw/core\";\nimport { runPromptOverNcp, type NcpRunnerAgent } from \"@nextclaw/kernel\";\n\ntype CronJobLike = {\n id: string;\n name: string;\n payload: {\n message: string;\n agentId?: string | null;\n sessionId?: string | null;\n deliver?: boolean;\n channel?: string | null;\n to?: string | null;\n accountId?: string | null;\n };\n};\n\nfunction normalizeOptionalString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\nfunction buildCronSessionMetadata(params: {\n job: CronJobLike;\n agentId: string;\n accountId?: string;\n}): Record<string, unknown> {\n const { job, agentId, accountId } = params;\n const channel = normalizeOptionalString(job.payload.channel) ?? \"cli\";\n const chatId = normalizeOptionalString(job.payload.to) ?? \"direct\";\n const metadata: Record<string, unknown> = {\n agentId,\n agent_id: agentId,\n channel,\n chatId,\n chat_id: chatId,\n label: job.name,\n cron_job_id: job.id,\n cron_job_name: job.name,\n session_origin: \"cron\",\n };\n if (accountId) {\n metadata.accountId = accountId;\n metadata.account_id = accountId;\n }\n return metadata;\n}\n\nexport function createCronJobHandler(params: {\n agentRunRequests: NcpRunnerAgent;\n bus: MessageBus;\n}): (job: CronJobLike) => Promise<string> {\n return async (job: CronJobLike): Promise<string> => {\n const accountId = normalizeOptionalString(job.payload.accountId);\n const agentId = normalizeOptionalString(job.payload.agentId) ?? \"main\";\n const sessionId = normalizeOptionalString(job.payload.sessionId) ?? `cron:${job.id}`;\n const metadata = buildCronSessionMetadata({\n job,\n agentId,\n accountId,\n });\n const result = await runPromptOverNcp({\n agent: params.agentRunRequests,\n sessionId,\n content: job.payload.message,\n metadata,\n missingCompletedMessageError: \"cron job completed without a final assistant message\",\n runErrorMessage: \"cron job failed\",\n });\n const response = result.text;\n\n if (job.payload.deliver && job.payload.to) {\n await params.bus.publishOutbound({\n channel: job.payload.channel ?? \"cli\",\n chatId: job.payload.to,\n content: response,\n media: [],\n metadata,\n });\n }\n\n return response;\n };\n}\n"],"mappings":";;AAiBA,SAAS,wBAAwB,OAAoC;AACnE,KAAI,OAAO,UAAU,SACnB;AAGF,QADgB,MAAM,MAAM,IACV,KAAA;;AAGpB,SAAS,yBAAyB,QAIN;CAC1B,MAAM,EAAE,KAAK,SAAS,cAAc;CACpC,MAAM,UAAU,wBAAwB,IAAI,QAAQ,QAAQ,IAAI;CAChE,MAAM,SAAS,wBAAwB,IAAI,QAAQ,GAAG,IAAI;CAC1D,MAAM,WAAoC;EACxC;EACA,UAAU;EACV;EACA;EACA,SAAS;EACT,OAAO,IAAI;EACX,aAAa,IAAI;EACjB,eAAe,IAAI;EACnB,gBAAgB;EACjB;AACD,KAAI,WAAW;AACb,WAAS,YAAY;AACrB,WAAS,aAAa;;AAExB,QAAO;;AAGT,SAAgB,qBAAqB,QAGK;AACxC,QAAO,OAAO,QAAsC;EAClD,MAAM,YAAY,wBAAwB,IAAI,QAAQ,UAAU;EAChE,MAAM,UAAU,wBAAwB,IAAI,QAAQ,QAAQ,IAAI;EAChE,MAAM,YAAY,wBAAwB,IAAI,QAAQ,UAAU,IAAI,QAAQ,IAAI;EAChF,MAAM,WAAW,yBAAyB;GACxC;GACA;GACA;GACD,CAAC;EASF,MAAM,YARS,MAAM,iBAAiB;GACpC,OAAO,OAAO;GACd;GACA,SAAS,IAAI,QAAQ;GACrB;GACA,8BAA8B;GAC9B,iBAAiB;GAClB,CAAC,EACsB;AAExB,MAAI,IAAI,QAAQ,WAAW,IAAI,QAAQ,GACrC,OAAM,OAAO,IAAI,gBAAgB;GAC/B,SAAS,IAAI,QAAQ,WAAW;GAChC,QAAQ,IAAI,QAAQ;GACpB,SAAS;GACT,OAAO,EAAE;GACT;GACD,CAAC;AAGJ,SAAO"}
@@ -6,4 +6,5 @@ declare function handleGatewayDeferredStartupError(params: {
6
6
  error: unknown;
7
7
  }): void;
8
8
  //#endregion
9
- export { handleGatewayDeferredStartupError };
9
+ export { handleGatewayDeferredStartupError };
10
+ //# sourceMappingURL=gateway-runtime-lifecycle.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-runtime-lifecycle.utils.d.ts","names":[],"sources":["../../../../../src/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.ts"],"mappings":";;;iBAEgB,iCAAA,CAAkC,MAAA;EAChD,eAAA,EAAiB,2BAAA;EACjB,KAAA;AAAA"}
@@ -8,3 +8,5 @@ function handleGatewayDeferredStartupError(params) {
8
8
  }
9
9
  //#endregion
10
10
  export { handleGatewayDeferredStartupError };
11
+
12
+ //# sourceMappingURL=gateway-runtime-lifecycle.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-runtime-lifecycle.utils.js","names":[],"sources":["../../../../../src/shared/services/gateway/utils/gateway-runtime-lifecycle.utils.ts"],"sourcesContent":["import type { ServiceBootstrapStatusStore } from \"../service-bootstrap-status.service.js\";\n\nexport function handleGatewayDeferredStartupError(params: {\n bootstrapStatus: ServiceBootstrapStatusStore;\n error: unknown;\n}): void {\n const { bootstrapStatus, error } = params;\n const message = error instanceof Error ? error.message : String(error);\n bootstrapStatus.markError(message);\n if (bootstrapStatus.getStatus().pluginHydration.state === \"running\") {\n bootstrapStatus.markPluginHydrationError(message);\n }\n console.error(\n `Deferred startup failed: ${message}`,\n );\n}\n"],"mappings":";AAEA,SAAgB,kCAAkC,QAGzC;CACP,MAAM,EAAE,iBAAiB,UAAU;CACnC,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACtE,iBAAgB,UAAU,QAAQ;AAClC,KAAI,gBAAgB,WAAW,CAAC,gBAAgB,UAAU,UACxD,iBAAgB,yBAAyB,QAAQ;AAEnD,SAAQ,MACN,4BAA4B,UAC7B"}
@@ -28,4 +28,5 @@ declare class ServiceMarketplaceInstaller {
28
28
  private createMcpMarketplaceOps;
29
29
  }
30
30
  //#endregion
31
- export { ServiceMarketplaceInstaller };
31
+ export { ServiceMarketplaceInstaller };
32
+ //# sourceMappingURL=service-marketplace-installer.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-marketplace-installer.service.d.ts","names":[],"sources":["../../../../src/shared/services/marketplace/service-marketplace-installer.service.ts"],"mappings":";;;KAkBK,gBAAA;EACH,OAAA;EACA,MAAA;AAAA;AAAA,KAGG,yBAAA,GAA4B,gBAAA;AAAA,cAEpB,2BAAA;EAAA,iBAEQ,IAAA;cAAA,IAAA;IACf,qBAAA,SAA8B,OAAA;IAC9B,gBAAA,GAAmB,IAAA,eAAmB,OAAA;IACtC,mBAAA,GAAsB,IAAA,UAAc,KAAA,eAAoB,yBAAA;EAAA;EAI5D,eAAA,CAAA,GAAmB,oBAAA;EAAA,QAgBL,aAAA;EAAA,QAMA,YAAA;EAAA,QAiCA,UAAA;EAAA,QAIA,YAAA;EAAA,QAMA,aAAA;EAAA,QAMA,eAAA;EAAA,QAQA,cAAA;EAAA,QAeA,SAAA;EAAA,QAIA,UAAA;EAAA,QAIA,SAAA;EAAA,QAIA,SAAA;EAAA,QAIN,uBAAA;AAAA"}
@@ -97,3 +97,5 @@ var ServiceMarketplaceInstaller = class {
97
97
  };
98
98
  //#endregion
99
99
  export { ServiceMarketplaceInstaller };
100
+
101
+ //# sourceMappingURL=service-marketplace-installer.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-marketplace-installer.service.js","names":[],"sources":["../../../../src/shared/services/marketplace/service-marketplace-installer.service.ts"],"sourcesContent":["import { getSkillsPath, getWorkspacePath, loadConfig } from \"@nextclaw/core\";\nimport type {\n MarketplaceInstallSkillParams,\n MarketplaceInstaller,\n MarketplaceMcpDoctorResult,\n MarketplaceMcpInstallRequest\n} from \"@nextclaw/server\";\nimport { existsSync, rmSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n disablePluginMutation,\n enablePluginMutation,\n installPluginMutation,\n uninstallPluginMutation\n} from \"@nextclaw-service/commands/plugin/plugin-mutation-actions.utils.js\";\nimport { buildMarketplaceSkillInstallArgs, pickUserFacingCommandSummary } from \"@nextclaw-service/shared/utils/marketplace/service-marketplace-helpers.utils.js\";\nimport { ServiceMcpMarketplaceOps } from \"@nextclaw-service/shared/services/marketplace/service-mcp-marketplace-ops.js\";\n\ntype UserFacingResult = {\n message: string;\n output?: string;\n};\n\ntype BuiltinSkillInstallResult = UserFacingResult | null;\n\nexport class ServiceMarketplaceInstaller {\n constructor(\n private readonly deps: {\n applyLiveConfigReload?: () => Promise<void>;\n runCliSubcommand: (args: string[]) => Promise<string>;\n installBuiltinSkill: (slug: string, force?: boolean) => BuiltinSkillInstallResult;\n }\n ) {}\n\n createInstaller(): MarketplaceInstaller {\n return {\n installPlugin: (spec) => this.installPlugin(spec),\n installSkill: (params) => this.installSkill(params),\n installMcp: (params) => this.installMcp(params),\n enablePlugin: (id) => this.enablePlugin(id),\n disablePlugin: (id) => this.disablePlugin(id),\n uninstallPlugin: (id) => this.uninstallPlugin(id),\n uninstallSkill: (slug) => this.uninstallSkill(slug),\n enableMcp: (name) => this.enableMcp(name),\n disableMcp: (name) => this.disableMcp(name),\n removeMcp: (name) => this.removeMcp(name),\n doctorMcp: (name) => this.doctorMcp(name)\n };\n }\n\n private async installPlugin(spec: string): Promise<UserFacingResult> {\n const result = await installPluginMutation(spec);\n await this.deps.applyLiveConfigReload?.();\n return { message: result.message };\n }\n\n private async installSkill(params: MarketplaceInstallSkillParams): Promise<UserFacingResult> {\n if (params.kind === \"builtin\") {\n const result = this.deps.installBuiltinSkill(params.slug, params.force);\n if (!result) {\n throw new Error(`Builtin skill not found: ${params.slug}`);\n }\n return result;\n }\n\n if (params.kind && params.kind !== \"marketplace\") {\n throw new Error(`Unsupported marketplace skill kind: ${params.kind}`);\n }\n\n const workspace = getWorkspacePath(loadConfig().agents.defaults.workspace);\n const args = buildMarketplaceSkillInstallArgs({\n slug: params.slug,\n workspace,\n force: params.force\n });\n\n try {\n const output = await this.deps.runCliSubcommand(args);\n const summary = pickUserFacingCommandSummary(output, `Installed skill: ${params.slug}`);\n return { message: summary };\n } catch (error) {\n const fallback = this.deps.installBuiltinSkill(params.slug, params.force);\n if (!fallback) {\n throw error;\n }\n return fallback;\n }\n }\n\n private async installMcp(params: MarketplaceMcpInstallRequest): Promise<{ name: string; message: string; output?: string }> {\n return await this.createMcpMarketplaceOps().install(params);\n }\n\n private async enablePlugin(id: string): Promise<UserFacingResult> {\n const result = await enablePluginMutation(id);\n await this.deps.applyLiveConfigReload?.();\n return { message: result.message };\n }\n\n private async disablePlugin(id: string): Promise<UserFacingResult> {\n const result = await disablePluginMutation(id);\n await this.deps.applyLiveConfigReload?.();\n return { message: result.message };\n }\n\n private async uninstallPlugin(id: string): Promise<UserFacingResult> {\n await disablePluginMutation(id);\n await this.deps.applyLiveConfigReload?.();\n const result = await uninstallPluginMutation(id, { force: true });\n await this.deps.applyLiveConfigReload?.();\n return { message: result.message };\n }\n\n private async uninstallSkill(slug: string): Promise<UserFacingResult> {\n const workspace = getWorkspacePath(loadConfig().agents.defaults.workspace);\n const targetDir = join(getSkillsPath(workspace), slug);\n\n if (!existsSync(targetDir)) {\n throw new Error(`Skill not installed in workspace: ${slug}`);\n }\n\n rmSync(targetDir, { recursive: true, force: true });\n\n return {\n message: `Uninstalled skill: ${slug}`\n };\n }\n\n private async enableMcp(name: string): Promise<UserFacingResult> {\n return await this.createMcpMarketplaceOps().enable(name);\n }\n\n private async disableMcp(name: string): Promise<UserFacingResult> {\n return await this.createMcpMarketplaceOps().disable(name);\n }\n\n private async removeMcp(name: string): Promise<UserFacingResult> {\n return await this.createMcpMarketplaceOps().remove(name);\n }\n\n private async doctorMcp(name: string): Promise<MarketplaceMcpDoctorResult> {\n return await this.createMcpMarketplaceOps().doctor(name);\n }\n\n private createMcpMarketplaceOps(): ServiceMcpMarketplaceOps {\n return new ServiceMcpMarketplaceOps({\n applyLiveConfigReload: this.deps.applyLiveConfigReload\n });\n }\n}\n"],"mappings":"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"}
@@ -36,4 +36,5 @@ declare class ServiceMcpMarketplaceOps {
36
36
  private createDoctorFacade;
37
37
  }
38
38
  //#endregion
39
- export { ServiceMcpMarketplaceOps };
39
+ export { ServiceMcpMarketplaceOps };
40
+ //# sourceMappingURL=service-mcp-marketplace-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-mcp-marketplace-ops.d.ts","names":[],"sources":["../../../../src/shared/services/marketplace/service-mcp-marketplace-ops.ts"],"mappings":";;;cAGa,wBAAA;EAAA,iBAEQ,OAAA;cAAA,OAAA;IACf,qBAAA,SAA8B,OAAA;EAAA;EAI5B,OAAA,CAAQ,MAAA;IACZ,IAAA;IACA,IAAA;IACA,OAAA;IACA,SAAA;IACA,MAAA;IACA,MAAA,GAAS,MAAA;IACT,QAAA;EAAA,IACE,OAAA;IAAU,IAAA;IAAc,OAAA;IAAiB,MAAA;EAAA;EA+BvC,MAAA,CAAO,IAAA,WAAe,OAAA;IAAU,OAAA;IAAiB,MAAA;EAAA;EASjD,OAAA,CAAQ,IAAA,WAAe,OAAA;IAAU,OAAA;IAAiB,MAAA;EAAA;EASlD,MAAA,CAAO,IAAA,WAAe,OAAA;IAAU,OAAA;IAAiB,MAAA;EAAA;EASjD,MAAA,CAAO,IAAA,WAAY,OAAA,CATU,gBAAA,CASV,eAAA;EAAA,QAQjB,qBAAA;EAAA,QAOA,kBAAA;AAAA"}
@@ -65,3 +65,5 @@ var ServiceMcpMarketplaceOps = class {
65
65
  };
66
66
  //#endregion
67
67
  export { ServiceMcpMarketplaceOps };
68
+
69
+ //# sourceMappingURL=service-mcp-marketplace-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-mcp-marketplace-ops.js","names":[],"sources":["../../../../src/shared/services/marketplace/service-mcp-marketplace-ops.ts"],"sourcesContent":["import { loadConfig, saveConfig } from \"@nextclaw/core\";\nimport { McpDoctorFacade, McpMutationService, type McpMarketplaceInstallTemplate } from \"@nextclaw/mcp\";\n\nexport class ServiceMcpMarketplaceOps {\n constructor(\n private readonly options: {\n applyLiveConfigReload?: () => Promise<void>;\n }\n ) {}\n\n async install(params: {\n spec: string;\n name?: string;\n enabled?: boolean;\n allAgents?: boolean;\n agents?: string[];\n inputs?: Record<string, string>;\n template?: unknown;\n }): Promise<{ name: string; message: string; output?: string }> {\n if (!params.template) {\n throw new Error(`Missing MCP marketplace template for ${params.spec}`);\n }\n\n const template = params.template as McpMarketplaceInstallTemplate;\n const result = this.createMutationService().installFromTemplate({\n template,\n name: params.name,\n enabled: params.enabled,\n scope: {\n allAgents: params.allAgents ?? true,\n agents: params.allAgents === false ? params.agents ?? [] : []\n },\n inputs: params.inputs,\n metadata: {\n source: \"marketplace\",\n catalogSlug: params.spec,\n displayName: template.defaultName\n }\n });\n if (!result.changed) {\n throw new Error(result.message);\n }\n await this.options.applyLiveConfigReload?.();\n return {\n name: result.name,\n message: result.message\n };\n }\n\n async enable(name: string): Promise<{ message: string; output?: string }> {\n const result = this.createMutationService().toggleEnabled(name, true);\n if (!result.changed) {\n throw new Error(result.message);\n }\n await this.options.applyLiveConfigReload?.();\n return { message: result.message };\n }\n\n async disable(name: string): Promise<{ message: string; output?: string }> {\n const result = this.createMutationService().toggleEnabled(name, false);\n if (!result.changed) {\n throw new Error(result.message);\n }\n await this.options.applyLiveConfigReload?.();\n return { message: result.message };\n }\n\n async remove(name: string): Promise<{ message: string; output?: string }> {\n const result = this.createMutationService().removeServer(name);\n if (!result.changed) {\n throw new Error(result.message);\n }\n await this.options.applyLiveConfigReload?.();\n return { message: result.message };\n }\n\n async doctor(name: string) {\n const report = await this.createDoctorFacade().inspectOne(name);\n if (!report) {\n throw new Error(`Unknown MCP server: ${name}`);\n }\n return report;\n }\n\n private createMutationService(): McpMutationService {\n return new McpMutationService({\n getConfig: () => loadConfig(),\n saveConfig: (config) => saveConfig(config)\n });\n }\n\n private createDoctorFacade(): McpDoctorFacade {\n return new McpDoctorFacade({\n getConfig: () => loadConfig()\n });\n }\n}\n"],"mappings":";;;AAGA,IAAa,2BAAb,MAAsC;CACpC,YACE,SAGA;AAHiB,OAAA,UAAA;;CAKnB,MAAM,QAAQ,QAQkD;AAC9D,MAAI,CAAC,OAAO,SACV,OAAM,IAAI,MAAM,wCAAwC,OAAO,OAAO;EAGxE,MAAM,WAAW,OAAO;EACxB,MAAM,SAAS,KAAK,uBAAuB,CAAC,oBAAoB;GAC9D;GACA,MAAM,OAAO;GACb,SAAS,OAAO;GAChB,OAAO;IACL,WAAW,OAAO,aAAa;IAC/B,QAAQ,OAAO,cAAc,QAAQ,OAAO,UAAU,EAAE,GAAG,EAAE;IAC9D;GACD,QAAQ,OAAO;GACf,UAAU;IACR,QAAQ;IACR,aAAa,OAAO;IACpB,aAAa,SAAS;IACvB;GACF,CAAC;AACF,MAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,OAAO,QAAQ;AAEjC,QAAM,KAAK,QAAQ,yBAAyB;AAC5C,SAAO;GACL,MAAM,OAAO;GACb,SAAS,OAAO;GACjB;;CAGH,MAAM,OAAO,MAA6D;EACxE,MAAM,SAAS,KAAK,uBAAuB,CAAC,cAAc,MAAM,KAAK;AACrE,MAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,OAAO,QAAQ;AAEjC,QAAM,KAAK,QAAQ,yBAAyB;AAC5C,SAAO,EAAE,SAAS,OAAO,SAAS;;CAGpC,MAAM,QAAQ,MAA6D;EACzE,MAAM,SAAS,KAAK,uBAAuB,CAAC,cAAc,MAAM,MAAM;AACtE,MAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,OAAO,QAAQ;AAEjC,QAAM,KAAK,QAAQ,yBAAyB;AAC5C,SAAO,EAAE,SAAS,OAAO,SAAS;;CAGpC,MAAM,OAAO,MAA6D;EACxE,MAAM,SAAS,KAAK,uBAAuB,CAAC,aAAa,KAAK;AAC9D,MAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,OAAO,QAAQ;AAEjC,QAAM,KAAK,QAAQ,yBAAyB;AAC5C,SAAO,EAAE,SAAS,OAAO,SAAS;;CAGpC,MAAM,OAAO,MAAc;EACzB,MAAM,SAAS,MAAM,KAAK,oBAAoB,CAAC,WAAW,KAAK;AAC/D,MAAI,CAAC,OACH,OAAM,IAAI,MAAM,uBAAuB,OAAO;AAEhD,SAAO;;CAGT,wBAAoD;AAClD,SAAO,IAAI,mBAAmB;GAC5B,iBAAiB,YAAY;GAC7B,aAAa,WAAW,WAAW,OAAO;GAC3C,CAAC;;CAGJ,qBAA8C;AAC5C,SAAO,IAAI,gBAAgB,EACzB,iBAAiB,YAAY,EAC9B,CAAC"}
@@ -21,4 +21,5 @@ declare function wrapStartChannelsWithDevPluginHotReload(params: {
21
21
  startupSettleMs: number;
22
22
  }): () => Promise<void>;
23
23
  //#endregion
24
- export { DEV_PLUGIN_HOT_RELOAD_TARGETS_ENV, DevPluginHotReloadTarget, resolveDevPluginHotReloadTargets, startDevPluginHotReloadWatcher, wrapStartChannelsWithDevPluginHotReload };
24
+ export { DEV_PLUGIN_HOT_RELOAD_TARGETS_ENV, DevPluginHotReloadTarget, resolveDevPluginHotReloadTargets, startDevPluginHotReloadWatcher, wrapStartChannelsWithDevPluginHotReload };
25
+ //# sourceMappingURL=plugin-dev-hot-reload.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-dev-hot-reload.utils.d.ts","names":[],"sources":["../../../../../src/shared/services/plugin/utils/plugin-dev-hot-reload.utils.ts"],"mappings":";;;cAIa,iCAAA;AAAA,KAED,wBAAA;EACV,QAAA;EACA,UAAA;EACA,UAAA;AAAA;AAAA,iBAiCc,gCAAA,CACd,QAAA,wBACC,wBAAA;AAAA,iBA+Ca,8BAAA,CAA+B,MAAA;EAC7C,eAAA,EAAiB,0BAAA;EACjB,aAAA,GAAgB,SAAA,eAAwB,OAAA;EACxC,OAAA,GAAU,wBAAA;AAAA;AAAA,iBA+EI,uCAAA,CAAwC,MAAA;EACtD,aAAA,QAAqB,OAAA;EACrB,eAAA,EAAiB,0BAAA;EACjB,eAAA;EACA,aAAA,GAAgB,SAAA,eAAwB,OAAA;EACxC,eAAA;AAAA,UACQ,OAAA"}
@@ -115,3 +115,5 @@ function wrapStartChannelsWithDevPluginHotReload(params) {
115
115
  }
116
116
  //#endregion
117
117
  export { DEV_PLUGIN_HOT_RELOAD_TARGETS_ENV, resolveDevPluginHotReloadTargets, startDevPluginHotReloadWatcher, wrapStartChannelsWithDevPluginHotReload };
118
+
119
+ //# sourceMappingURL=plugin-dev-hot-reload.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-dev-hot-reload.utils.js","names":[],"sources":["../../../../../src/shared/services/plugin/utils/plugin-dev-hot-reload.utils.ts"],"sourcesContent":["import chokidar from \"chokidar\";\nimport { resolve, sep } from \"node:path\";\nimport type { ServiceFileWatcherRegistry } from \"@nextclaw-service/shared/services/gateway/service-startup-support.service.js\";\n\nexport const DEV_PLUGIN_HOT_RELOAD_TARGETS_ENV = \"NEXTCLAW_DEV_PLUGIN_HOT_RELOAD_TARGETS\";\n\nexport type DevPluginHotReloadTarget = {\n pluginId: string;\n pluginPath: string;\n watchPaths: string[];\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readOptionalString(value: unknown): 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\nfunction normalizeWatchPaths(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n const watchPaths: string[] = [];\n for (const entry of value) {\n const normalized = readOptionalString(entry);\n if (!normalized) {\n continue;\n }\n const resolvedPath = resolve(normalized);\n if (!watchPaths.includes(resolvedPath)) {\n watchPaths.push(resolvedPath);\n }\n }\n return watchPaths;\n}\n\nexport function resolveDevPluginHotReloadTargets(\n rawValue = process.env[DEV_PLUGIN_HOT_RELOAD_TARGETS_ENV],\n): DevPluginHotReloadTarget[] {\n if (typeof rawValue !== \"string\" || rawValue.trim().length === 0) {\n return [];\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(rawValue);\n } catch (error) {\n throw new Error(\n `[dev-plugin-hot-reload] failed to parse ${DEV_PLUGIN_HOT_RELOAD_TARGETS_ENV}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n\n if (!Array.isArray(parsed)) {\n throw new Error(\n `[dev-plugin-hot-reload] ${DEV_PLUGIN_HOT_RELOAD_TARGETS_ENV} must be a JSON array`,\n );\n }\n\n const seenPluginIds = new Set<string>();\n const targets: DevPluginHotReloadTarget[] = [];\n for (const entry of parsed) {\n if (!isRecord(entry)) {\n continue;\n }\n const pluginId = readOptionalString(entry.pluginId);\n const pluginPath = readOptionalString(entry.pluginPath);\n const watchPaths = normalizeWatchPaths(entry.watchPaths);\n if (!pluginId || !pluginPath || watchPaths.length === 0) {\n continue;\n }\n if (seenPluginIds.has(pluginId)) {\n throw new Error(\n `[dev-plugin-hot-reload] duplicate plugin target for \"${pluginId}\"`,\n );\n }\n seenPluginIds.add(pluginId);\n targets.push({\n pluginId,\n pluginPath: resolve(pluginPath),\n watchPaths,\n });\n }\n return targets;\n}\n\nexport function startDevPluginHotReloadWatcher(params: {\n watcherRegistry: ServiceFileWatcherRegistry;\n reloadPlugins: (pluginIds: string[]) => Promise<void>;\n targets?: DevPluginHotReloadTarget[];\n}): void {\n const targets = params.targets ?? resolveDevPluginHotReloadTargets();\n if (targets.length === 0) {\n return;\n }\n\n const pendingPluginIds = new Set<string>();\n let flushTimer: ReturnType<typeof setTimeout> | null = null;\n let reloadRunning = false;\n let reloadPending = false;\n\n const flushReload = async (): Promise<void> => {\n if (reloadRunning) {\n reloadPending = true;\n return;\n }\n const pluginIds = [...pendingPluginIds];\n pendingPluginIds.clear();\n if (pluginIds.length === 0) {\n return;\n }\n\n reloadRunning = true;\n try {\n console.log(`[dev] Plugin dist updated: ${pluginIds.join(\", \")}`);\n await params.reloadPlugins(pluginIds);\n console.log(`[dev] Plugin hot reload applied: ${pluginIds.join(\", \")}`);\n } catch (error) {\n console.error(\n `[dev] Plugin hot reload failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n } finally {\n reloadRunning = false;\n if (reloadPending || pendingPluginIds.size > 0) {\n reloadPending = false;\n await flushReload();\n }\n }\n };\n\n const scheduleReload = (pluginId: string): void => {\n pendingPluginIds.add(pluginId);\n if (flushTimer) {\n clearTimeout(flushTimer);\n }\n flushTimer = setTimeout(() => {\n flushTimer = null;\n void flushReload();\n }, 150);\n };\n\n const watcher = chokidar.watch(\n targets.flatMap((entry) => entry.watchPaths),\n {\n ignoreInitial: true,\n awaitWriteFinish: { stabilityThreshold: 200, pollInterval: 50 },\n },\n );\n params.watcherRegistry.remember(watcher);\n watcher.on(\"all\", (_event, changedPath) => {\n const normalizedChangedPath = resolve(changedPath);\n for (const target of targets) {\n if (\n target.watchPaths.some((watchPath) =>\n normalizedChangedPath === watchPath ||\n normalizedChangedPath.startsWith(`${watchPath}${sep}`),\n )\n ) {\n scheduleReload(target.pluginId);\n }\n }\n });\n\n console.log(\n `[dev] Plugin hot reload watcher: ${targets.map((entry) => entry.pluginId).join(\", \")}`,\n );\n}\n\nexport function wrapStartChannelsWithDevPluginHotReload(params: {\n startChannels: () => Promise<void>;\n watcherRegistry: ServiceFileWatcherRegistry;\n isRuntimeActive: () => boolean;\n reloadPlugins: (pluginIds: string[]) => Promise<void>;\n startupSettleMs: number;\n}): () => Promise<void> {\n return async () => {\n await params.startChannels();\n console.log(\n `[dev] Plugin hot reload watcher will arm after ${params.startupSettleMs}ms startup settle window.`,\n );\n const timer = setTimeout(() => {\n if (!params.isRuntimeActive()) {\n return;\n }\n startDevPluginHotReloadWatcher({\n watcherRegistry: params.watcherRegistry,\n reloadPlugins: params.reloadPlugins,\n });\n }, params.startupSettleMs);\n timer.unref?.();\n };\n}\n"],"mappings":"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"}
@@ -3,4 +3,5 @@ import { NextclawGatewayRuntime } from "../../gateway/nextclaw-gateway-runtime.s
3
3
  //#region src/shared/services/plugin/utils/plugin-runtime-bridge.utils.d.ts
4
4
  declare function installPluginRuntimeBridge(gateway: NextclawGatewayRuntime): void;
5
5
  //#endregion
6
- export { installPluginRuntimeBridge };
6
+ export { installPluginRuntimeBridge };
7
+ //# sourceMappingURL=plugin-runtime-bridge.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-runtime-bridge.utils.d.ts","names":[],"sources":["../../../../../src/shared/services/plugin/utils/plugin-runtime-bridge.utils.ts"],"mappings":";;;iBAwBgB,0BAAA,CAA2B,OAAA,EAAS,sBAAA"}
@@ -93,3 +93,5 @@ function resolvePluginRuntimeAttachments(ctx) {
93
93
  }
94
94
  //#endregion
95
95
  export { installPluginRuntimeBridge };
96
+
97
+ //# sourceMappingURL=plugin-runtime-bridge.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-runtime-bridge.utils.js","names":[],"sources":["../../../../../src/shared/services/plugin/utils/plugin-runtime-bridge.utils.ts"],"sourcesContent":["import { loadConfig, saveConfig, type InboundAttachment } from \"@nextclaw/core\";\nimport { setPluginRuntimeBridge } from \"@nextclaw/openclaw-compat\";\nimport { dispatchPromptOverNcp } from \"@nextclaw/kernel\";\nimport type { NextclawGatewayRuntime } from \"@nextclaw-service/shared/services/gateway/nextclaw-gateway-runtime.service.js\";\n\ntype PluginRuntimeDispatchContext = {\n BodyForAgent?: unknown;\n Body?: unknown;\n SessionKey?: unknown;\n OriginatingChannel?: unknown;\n OriginatingTo?: unknown;\n SenderId?: unknown;\n AccountId?: unknown;\n AgentId?: unknown;\n Model?: unknown;\n AgentModel?: unknown;\n MediaPath?: unknown;\n MediaPaths?: unknown;\n MediaUrl?: unknown;\n MediaUrls?: unknown;\n MediaType?: unknown;\n MediaTypes?: unknown;\n};\n\nexport function installPluginRuntimeBridge(gateway: NextclawGatewayRuntime): void {\n setPluginRuntimeBridge({\n loadConfig: () =>\n gateway.kernel.extensions.toConfigView(gateway.configManager.loadConfig()),\n writeConfigFile: async (nextConfigView) => {\n if (!nextConfigView || typeof nextConfigView !== \"object\" || Array.isArray(nextConfigView)) {\n throw new Error(\"plugin runtime writeConfigFile expects an object config\");\n }\n const current = loadConfig();\n const next = gateway.kernel.extensions.mergeConfigView(current, nextConfigView);\n saveConfig(next);\n },\n dispatchReplyWithBufferedBlockDispatcher: async ({ ctx, dispatcherOptions }) => {\n const request = resolvePluginRuntimeRequest(ctx as PluginRuntimeDispatchContext);\n if (!request) {\n return;\n }\n\n try {\n await dispatcherOptions.onReplyStart?.();\n const response = await dispatchPromptOverNcp({\n config: gateway.configManager.loadConfig(),\n agentRunRequests: gateway.kernel.agentRunRequestManager,\n ...request,\n });\n const replyText = typeof response === \"string\" ? response : String(response ?? \"\");\n if (replyText.trim()) {\n await dispatcherOptions.deliver({ text: replyText }, { kind: \"final\" });\n }\n } catch (error) {\n dispatcherOptions.onError?.(error);\n throw error;\n }\n }\n });\n}\n\nfunction resolvePluginRuntimeRequest(ctx: PluginRuntimeDispatchContext) {\n const bodyForAgent = typeof ctx.BodyForAgent === \"string\" ? ctx.BodyForAgent : \"\";\n const body = typeof ctx.Body === \"string\" ? ctx.Body : \"\";\n const content = (bodyForAgent || body).trim();\n const attachments = resolvePluginRuntimeAttachments(ctx);\n if (!content && attachments.length === 0) {\n return null;\n }\n\n const sessionKey = typeof ctx.SessionKey === \"string\" && ctx.SessionKey.trim().length > 0 ? ctx.SessionKey : undefined;\n const channel =\n typeof ctx.OriginatingChannel === \"string\" && ctx.OriginatingChannel.trim().length > 0\n ? ctx.OriginatingChannel\n : \"cli\";\n const chatId =\n typeof ctx.OriginatingTo === \"string\" && ctx.OriginatingTo.trim().length > 0\n ? ctx.OriginatingTo\n : typeof ctx.SenderId === \"string\" && ctx.SenderId.trim().length > 0\n ? ctx.SenderId\n : \"direct\";\n const agentId = typeof ctx.AgentId === \"string\" ? ctx.AgentId : undefined;\n const modelOverride = resolveModelOverride(ctx);\n const accountId = typeof ctx.AccountId === \"string\" && ctx.AccountId.trim().length > 0 ? ctx.AccountId : undefined;\n\n return {\n content,\n sessionKey,\n channel,\n chatId,\n agentId,\n attachments,\n metadata: {\n ...(accountId ? { account_id: accountId } : {}),\n ...(modelOverride ? { model: modelOverride } : {})\n }\n };\n}\n\nfunction resolveModelOverride(ctx: PluginRuntimeDispatchContext): string | undefined {\n if (typeof ctx.Model === \"string\" && ctx.Model.trim().length > 0) {\n return ctx.Model.trim();\n }\n if (typeof ctx.AgentModel === \"string\" && ctx.AgentModel.trim().length > 0) {\n return ctx.AgentModel.trim();\n }\n return undefined;\n}\n\nfunction readStringList(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => (typeof entry === \"string\" ? entry.trim() : \"\"))\n .filter(Boolean);\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\nfunction resolvePluginRuntimeAttachments(ctx: PluginRuntimeDispatchContext): InboundAttachment[] {\n const mediaPaths = readStringList(ctx.MediaPaths);\n const mediaUrls = readStringList(ctx.MediaUrls);\n const fallbackPath = readOptionalString(ctx.MediaPath);\n const fallbackUrl = readOptionalString(ctx.MediaUrl);\n const mediaTypes = readStringList(ctx.MediaTypes);\n const fallbackType = readOptionalString(ctx.MediaType);\n const entryCount = Math.max(\n mediaPaths.length,\n mediaUrls.length,\n fallbackPath ? 1 : 0,\n fallbackUrl ? 1 : 0,\n );\n\n const attachments: InboundAttachment[] = [];\n for (let index = 0; index < entryCount; index += 1) {\n const path = mediaPaths[index] ?? (index === 0 ? fallbackPath : undefined);\n const rawUrl = mediaUrls[index] ?? (index === 0 ? fallbackUrl : undefined);\n const url = rawUrl && rawUrl !== path ? rawUrl : undefined;\n const mimeType = mediaTypes[index] ?? fallbackType;\n if (!path && !url) {\n continue;\n }\n attachments.push({\n path,\n url,\n mimeType,\n source: \"plugin-runtime\",\n status: path ? \"ready\" : \"remote-only\",\n });\n }\n\n return attachments;\n}\n"],"mappings":"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"}
@@ -27,4 +27,5 @@ declare class RestartCoordinator {
27
27
  readonly requestRestart: (request: RestartRequest) => Promise<RestartResult>;
28
28
  }
29
29
  //#endregion
30
- export { RestartCoordinator, RestartRequest, RestartResult, RestartStrategy };
30
+ export { RestartCoordinator, RestartRequest, RestartResult, RestartStrategy };
31
+ //# sourceMappingURL=restart-coordinator.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-coordinator.service.d.ts","names":[],"sources":["../../../../src/shared/services/restart/restart-coordinator.service.ts"],"mappings":";;;KAEY,eAAA;AAAA,KAEA,cAAA;EACV,MAAA;EACA,QAAA,GAAW,eAAA;EACX,OAAA;EACA,aAAA;AAAA;AAAA,KAGU,aAAA;EACV,MAAA;EACA,OAAA;AAAA;AAAA,KAGG,sBAAA;EACH,gBAAA,QAAwB,mBAAA;EACxB,gBAAA,GAAmB,GAAA;EACnB,UAAA;EACA,wBAAA,GAA2B,MAAA,aAAmB,OAAA;EAC9C,mBAAA,GAAsB,OAAA,UAAiB,MAAA;AAAA;AAAA,cAG5B,kBAAA;EAAA,QAIS,IAAA;EAAA,QAHZ,iBAAA;EAAA,QACA,aAAA;cAEY,IAAA,EAAM,sBAAA;EAAA,SAEjB,cAAA,GAAwB,OAAA,EAAS,cAAA,KAAiB,OAAA,CAAQ,aAAA;AAAA"}
@@ -49,3 +49,5 @@ var RestartCoordinator = class {
49
49
  };
50
50
  //#endregion
51
51
  export { RestartCoordinator };
52
+
53
+ //# sourceMappingURL=restart-coordinator.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-coordinator.service.js","names":[],"sources":["../../../../src/shared/services/restart/restart-coordinator.service.ts"],"sourcesContent":["import type { ManagedServiceState } from \"@nextclaw-service/shared/stores/managed-service-state.store.js\";\n\nexport type RestartStrategy = \"background-service-or-manual\" | \"background-service-or-exit\" | \"exit-process\";\n\nexport type RestartRequest = {\n reason: string;\n strategy?: RestartStrategy;\n delayMs?: number;\n manualMessage?: string;\n};\n\nexport type RestartResult = {\n status: \"service-restarted\" | \"restart-in-progress\" | \"exit-scheduled\" | \"manual-required\";\n message: string;\n};\n\ntype RestartCoordinatorDeps = {\n readServiceState: () => ManagedServiceState | null;\n isProcessRunning: (pid: number) => boolean;\n currentPid: () => number;\n restartBackgroundService: (reason: string) => Promise<boolean>;\n scheduleProcessExit: (delayMs: number, reason: string) => void;\n};\n\nexport class RestartCoordinator {\n private restartingService = false;\n private exitScheduled = false;\n\n constructor(private deps: RestartCoordinatorDeps) {}\n\n readonly requestRestart = async (request: RestartRequest): Promise<RestartResult> => {\n const reason = request.reason.trim() || \"config changed\";\n const strategy = request.strategy ?? \"background-service-or-manual\";\n\n if (strategy !== \"exit-process\") {\n const state = this.deps.readServiceState();\n const serviceRunning = Boolean(state && this.deps.isProcessRunning(state.pid));\n const managedByCurrentProcess = Boolean(state && state.pid === this.deps.currentPid());\n\n if (serviceRunning && !managedByCurrentProcess) {\n if (this.restartingService) {\n return {\n status: \"restart-in-progress\",\n message: \"Restart already in progress; skipping duplicate request.\"\n };\n }\n this.restartingService = true;\n try {\n const restarted = await this.deps.restartBackgroundService(reason);\n if (restarted) {\n return {\n status: \"service-restarted\",\n message: `Restarted background service to apply changes (${reason}).`\n };\n }\n } finally {\n this.restartingService = false;\n }\n }\n }\n\n if (strategy === \"background-service-or-exit\" || strategy === \"exit-process\") {\n if (this.exitScheduled) {\n return {\n status: \"exit-scheduled\",\n message: \"Restart already scheduled; skipping duplicate request.\"\n };\n }\n const delay =\n typeof request.delayMs === \"number\" && Number.isFinite(request.delayMs) ? Math.max(0, Math.floor(request.delayMs)) : 100;\n this.exitScheduled = true;\n this.deps.scheduleProcessExit(delay, reason);\n return {\n status: \"exit-scheduled\",\n message: `Restart scheduled (${reason}).`\n };\n }\n\n return {\n status: \"manual-required\",\n message: request.manualMessage ?? \"Restart the gateway to apply changes.\"\n };\n };\n}\n"],"mappings":";AAwBA,IAAa,qBAAb,MAAgC;CAC9B,oBAA4B;CAC5B,gBAAwB;CAExB,YAAY,MAAsC;AAA9B,OAAA,OAAA;;CAEpB,iBAA0B,OAAO,YAAoD;EACnF,MAAM,SAAS,QAAQ,OAAO,MAAM,IAAI;EACxC,MAAM,WAAW,QAAQ,YAAY;AAErC,MAAI,aAAa,gBAAgB;GAC/B,MAAM,QAAQ,KAAK,KAAK,kBAAkB;GAC1C,MAAM,iBAAiB,QAAQ,SAAS,KAAK,KAAK,iBAAiB,MAAM,IAAI,CAAC;GAC9E,MAAM,0BAA0B,QAAQ,SAAS,MAAM,QAAQ,KAAK,KAAK,YAAY,CAAC;AAEtF,OAAI,kBAAkB,CAAC,yBAAyB;AAC9C,QAAI,KAAK,kBACP,QAAO;KACL,QAAQ;KACR,SAAS;KACV;AAEH,SAAK,oBAAoB;AACzB,QAAI;AAEF,SADkB,MAAM,KAAK,KAAK,yBAAyB,OAAO,CAEhE,QAAO;MACL,QAAQ;MACR,SAAS,kDAAkD,OAAO;MACnE;cAEK;AACR,UAAK,oBAAoB;;;;AAK/B,MAAI,aAAa,gCAAgC,aAAa,gBAAgB;AAC5E,OAAI,KAAK,cACP,QAAO;IACL,QAAQ;IACR,SAAS;IACV;GAEH,MAAM,QACJ,OAAO,QAAQ,YAAY,YAAY,OAAO,SAAS,QAAQ,QAAQ,GAAG,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,QAAQ,CAAC,GAAG;AACvH,QAAK,gBAAgB;AACrB,QAAK,KAAK,oBAAoB,OAAO,OAAO;AAC5C,UAAO;IACL,QAAQ;IACR,SAAS,sBAAsB,OAAO;IACvC;;AAGH,SAAO;GACL,QAAQ;GACR,SAAS,QAAQ,iBAAiB;GACnC"}
@@ -36,4 +36,5 @@ declare function parseSessionKey(sessionKey?: string): {
36
36
  } | null;
37
37
  declare function enqueuePendingSystemEvent(sessionManager: SessionManager, sessionKey: string, message: string): void;
38
38
  //#endregion
39
- export { RestartSentinelDeliveryContext, RestartSentinelPayload, consumeRestartSentinel, enqueuePendingSystemEvent, formatRestartSentinelMessage, parseSessionKey, resolveRestartSentinelPath, summarizeRestartSentinel, writeRestartSentinel };
39
+ export { RestartSentinelDeliveryContext, RestartSentinelPayload, consumeRestartSentinel, enqueuePendingSystemEvent, formatRestartSentinelMessage, parseSessionKey, resolveRestartSentinelPath, summarizeRestartSentinel, writeRestartSentinel };
40
+ //# sourceMappingURL=restart-sentinel.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-sentinel.service.d.ts","names":[],"sources":["../../../../src/shared/services/restart/restart-sentinel.service.ts"],"mappings":";;;KAIY,8BAAA;EACV,OAAA;EACA,MAAA;EACA,OAAA;EACA,SAAA;EACA,QAAA,GAAW,MAAA;AAAA;AAAA,KAGD,sBAAA;EACV,IAAA;EACA,MAAA;EACA,EAAA;EACA,UAAA;EACA,eAAA,GAAkB,8BAAA;EAClB,OAAA;EACA,KAAA;IACE,MAAA;IACA,QAAA;IACA,UAAA;EAAA;AAAA;AAAA,KAIC,mBAAA;EACH,OAAA;EACA,OAAA,EAAS,sBAAA;AAAA;AAAA,iBAyBK,0BAAA,CAAA;AAAA,iBAIM,oBAAA,CAAqB,OAAA,EAAS,sBAAA,GAAyB,OAAA;AAAA,iBAWvD,sBAAA,CAAA,GAA0B,OAAA,CAAQ,mBAAA;AAAA,iBAoBxC,wBAAA,CAAyB,OAAA,EAAS,sBAAA;AAAA,iBAkBlC,4BAAA,CAA6B,OAAA,EAAS,sBAAA;AAAA,iBAetC,eAAA,CACd,UAAA;EACG,OAAA;EAAiB,MAAA;AAAA;AAAA,iBAeN,yBAAA,CACd,cAAA,EAAgB,cAAA,EAChB,UAAA,UACA,OAAA"}
@@ -86,3 +86,5 @@ function enqueuePendingSystemEvent(sessionManager, sessionKey, message) {
86
86
  }
87
87
  //#endregion
88
88
  export { consumeRestartSentinel, enqueuePendingSystemEvent, formatRestartSentinelMessage, parseSessionKey, resolveRestartSentinelPath, summarizeRestartSentinel, writeRestartSentinel };
89
+
90
+ //# sourceMappingURL=restart-sentinel.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-sentinel.service.js","names":[],"sources":["../../../../src/shared/services/restart/restart-sentinel.service.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { getDataDir, type SessionManager } from \"@nextclaw/core\";\n\nexport type RestartSentinelDeliveryContext = {\n channel?: string;\n chatId?: string;\n replyTo?: string | null;\n accountId?: string | null;\n metadata?: Record<string, unknown>;\n};\n\nexport type RestartSentinelPayload = {\n kind: \"config.apply\" | \"config.patch\" | \"update.run\" | \"restart\";\n status: \"ok\" | \"error\" | \"skipped\";\n ts: number;\n sessionKey?: string;\n deliveryContext?: RestartSentinelDeliveryContext;\n message?: string | null;\n stats?: {\n reason?: string | null;\n strategy?: string | null;\n durationMs?: number | null;\n };\n};\n\ntype RestartSentinelFile = {\n version: 1;\n payload: RestartSentinelPayload;\n};\n\nconst RESTART_SENTINEL_FILENAME = \"restart-sentinel.json\";\nconst PENDING_SYSTEM_EVENTS_KEY = \"pending_system_events\";\nconst RESTART_REASON_MAX_CHARS = 240;\nconst RESTART_NOTE_MAX_CHARS = 600;\nconst RESTART_OUTBOUND_MAX_CHARS = 1200;\n\nfunction trimTo(value: string, maxChars: number): string {\n const text = value.trim();\n if (!text) {\n return \"\";\n }\n if (text.length <= maxChars) {\n return text;\n }\n return `${text.slice(0, Math.max(0, maxChars - 1)).trimEnd()}…`;\n}\n\nfunction normalizeLine(value: string, maxChars: number): string | null {\n const trimmed = trimTo(value, maxChars);\n return trimmed ? trimmed : null;\n}\n\nexport function resolveRestartSentinelPath(): string {\n return resolve(getDataDir(), \"run\", RESTART_SENTINEL_FILENAME);\n}\n\nexport async function writeRestartSentinel(payload: RestartSentinelPayload): Promise<string> {\n const path = resolveRestartSentinelPath();\n mkdirSync(resolve(path, \"..\"), { recursive: true });\n const file: RestartSentinelFile = {\n version: 1,\n payload\n };\n writeFileSync(path, `${JSON.stringify(file, null, 2)}\\n`, \"utf-8\");\n return path;\n}\n\nexport async function consumeRestartSentinel(): Promise<RestartSentinelFile | null> {\n const path = resolveRestartSentinelPath();\n if (!existsSync(path)) {\n return null;\n }\n try {\n const raw = readFileSync(path, \"utf-8\");\n const parsed = JSON.parse(raw) as RestartSentinelFile;\n if (!parsed || parsed.version !== 1 || !parsed.payload) {\n rmSync(path, { force: true });\n return null;\n }\n rmSync(path, { force: true });\n return parsed;\n } catch {\n rmSync(path, { force: true });\n return null;\n }\n}\n\nexport function summarizeRestartSentinel(payload: RestartSentinelPayload): string {\n const reason = normalizeLine(payload.stats?.reason ?? \"\", RESTART_REASON_MAX_CHARS);\n if (payload.kind === \"update.run\") {\n return payload.status === \"ok\"\n ? \"✅ NextClaw update completed and service restarted.\"\n : \"⚠️ NextClaw update finished with issues.\";\n }\n if (payload.kind === \"config.apply\" || payload.kind === \"config.patch\") {\n return payload.status === \"ok\"\n ? \"✅ Config applied and service restarted.\"\n : \"⚠️ Config change restart finished with issues.\";\n }\n if (reason) {\n return `Gateway restart complete (${reason}).`;\n }\n return \"Gateway restart complete.\";\n}\n\nexport function formatRestartSentinelMessage(payload: RestartSentinelPayload): string {\n const lines = [summarizeRestartSentinel(payload)];\n const note = normalizeLine(payload.message ?? \"\", RESTART_NOTE_MAX_CHARS);\n if (note) {\n lines.push(note);\n }\n const reason = normalizeLine(payload.stats?.reason ?? \"\", RESTART_REASON_MAX_CHARS);\n if (reason && !lines.some((line) => line.includes(reason))) {\n lines.push(`Reason: ${reason}`);\n }\n\n const message = lines.join(\"\\n\").trim();\n return trimTo(message, RESTART_OUTBOUND_MAX_CHARS);\n}\n\nexport function parseSessionKey(\n sessionKey?: string\n): { channel: string; chatId: string } | null {\n const value = sessionKey?.trim();\n if (!value) {\n return null;\n }\n const separator = value.indexOf(\":\");\n if (separator <= 0 || separator >= value.length - 1) {\n return null;\n }\n return {\n channel: value.slice(0, separator),\n chatId: value.slice(separator + 1)\n };\n}\n\nexport function enqueuePendingSystemEvent(\n sessionManager: SessionManager,\n sessionKey: string,\n message: string\n): void {\n const text = message.trim();\n if (!text) {\n return;\n }\n const session = sessionManager.getOrCreate(sessionKey);\n const queueRaw = session.metadata[PENDING_SYSTEM_EVENTS_KEY];\n const queue = Array.isArray(queueRaw)\n ? queueRaw\n .filter((item): item is string => typeof item === \"string\")\n .map((item) => item.trim())\n .filter(Boolean)\n : [];\n if (queue.at(-1) === text) {\n return;\n }\n queue.push(text);\n if (queue.length > 20) {\n queue.splice(0, queue.length - 20);\n }\n session.metadata[PENDING_SYSTEM_EVENTS_KEY] = queue;\n session.updatedAt = new Date();\n sessionManager.save(session);\n}\n"],"mappings":"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"}
@@ -21,4 +21,5 @@ declare class RuntimeRestartRequestService {
21
21
  readonly run: (params: RequestRestartParams) => Promise<void>;
22
22
  }
23
23
  //#endregion
24
- export { RuntimeRestartRequestService };
24
+ export { RuntimeRestartRequestService };
25
+ //# sourceMappingURL=runtime-restart-request.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-restart-request.service.d.ts","names":[],"sources":["../../../../src/shared/services/restart/runtime-restart-request.service.ts"],"mappings":";;;;KAIK,gCAAA;EACH,yBAAA,GAA4B,MAAA;IAC1B,OAAA;IACA,MAAA;IACA,QAAA,GAAW,oBAAA;EAAA;EAEb,6BAAA,GAAgC,MAAA;IAC9B,OAAA;IACA,aAAA;IACA,MAAA;IACA,QAAA,GAAW,oBAAA;EAAA,MACP,OAAA,CAAQ,aAAA;AAAA;AAAA,cAGH,4BAAA;EAAA,iBACkB,IAAA;cAAA,IAAA,EAAM,gCAAA;EAAA,SAE1B,GAAA,GAAa,MAAA,EAAQ,oBAAA,KAAuB,OAAA;AAAA"}
@@ -40,3 +40,5 @@ var RuntimeRestartRequestService = class {
40
40
  };
41
41
  //#endregion
42
42
  export { RuntimeRestartRequestService };
43
+
44
+ //# sourceMappingURL=runtime-restart-request.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-restart-request.service.js","names":[],"sources":["../../../../src/shared/services/restart/runtime-restart-request.service.ts"],"sourcesContent":["import type { RestartResult } from \"./restart-coordinator.service.js\";\nimport type { RequestRestartParams } from \"@nextclaw-service/shared/types/cli.types.js\";\nimport { pendingRestartStore } from \"@nextclaw-service/shared/stores/pending-restart.store.js\";\n\ntype RuntimeRestartRequestServiceDeps = {\n armManagedServiceRelaunch: (params: {\n delayMs?: number;\n reason: string;\n strategy?: RequestRestartParams[\"strategy\"];\n }) => void;\n requestRestartFromCoordinator: (params: {\n delayMs?: number;\n manualMessage?: string;\n reason: string;\n strategy?: RequestRestartParams[\"strategy\"];\n }) => Promise<RestartResult>;\n};\n\nexport class RuntimeRestartRequestService {\n constructor(private readonly deps: RuntimeRestartRequestServiceDeps) {}\n\n readonly run = async (params: RequestRestartParams): Promise<void> => {\n const {\n changedPaths,\n delayMs,\n manualMessage,\n mode,\n reason,\n silentOnServiceRestart,\n strategy\n } = params;\n if (mode === \"notify\") {\n pendingRestartStore.mark({\n changedPaths,\n manualMessage,\n reason\n });\n console.warn(manualMessage);\n return;\n }\n\n this.deps.armManagedServiceRelaunch({\n reason,\n strategy,\n delayMs\n });\n\n const result = await this.deps.requestRestartFromCoordinator({\n reason,\n strategy,\n delayMs,\n manualMessage\n });\n if (result.status === \"manual-required\" || result.status === \"restart-in-progress\") {\n console.log(result.message);\n return;\n }\n\n pendingRestartStore.clear();\n if (result.status === \"service-restarted\") {\n if (!silentOnServiceRestart) {\n console.log(result.message);\n }\n return;\n }\n\n console.warn(result.message);\n };\n}\n"],"mappings":";;AAkBA,IAAa,+BAAb,MAA0C;CACxC,YAAY,MAAyD;AAAxC,OAAA,OAAA;;CAE7B,MAAe,OAAO,WAAgD;EACpE,MAAM,EACJ,cACA,SACA,eACA,MACA,QACA,wBACA,aACE;AACJ,MAAI,SAAS,UAAU;AACrB,uBAAoB,KAAK;IACvB;IACA;IACA;IACD,CAAC;AACF,WAAQ,KAAK,cAAc;AAC3B;;AAGF,OAAK,KAAK,0BAA0B;GAClC;GACA;GACA;GACD,CAAC;EAEF,MAAM,SAAS,MAAM,KAAK,KAAK,8BAA8B;GAC3D;GACA;GACA;GACA;GACD,CAAC;AACF,MAAI,OAAO,WAAW,qBAAqB,OAAO,WAAW,uBAAuB;AAClF,WAAQ,IAAI,OAAO,QAAQ;AAC3B;;AAGF,sBAAoB,OAAO;AAC3B,MAAI,OAAO,WAAW,qBAAqB;AACzC,OAAI,CAAC,uBACH,SAAQ,IAAI,OAAO,QAAQ;AAE7B;;AAGF,UAAQ,KAAK,OAAO,QAAQ"}
@@ -81,4 +81,5 @@ declare class ManagedServiceSupervisor {
81
81
  private resolveLeaseStatus;
82
82
  }
83
83
  //#endregion
84
- export { ManagedServiceSupervisor };
84
+ export { ManagedServiceSupervisor };
85
+ //# sourceMappingURL=managed-service-supervisor.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-service-supervisor.service.d.ts","names":[],"sources":["../../../../src/shared/services/runtime/managed-service-supervisor.service.ts"],"mappings":";;;;;;KA0BK,QAAA,GAAS,YAAA,CAAa,MAAA;AAAA,KAEtB,qBAAA;EACH,KAAA,EAAO,YAAA;EACP,OAAA;EACA,kBAAA;EACA,mBAAA;EACA,sBAAA;EACA,QAAA,EAAU,sBAAA;AAAA;AAAA,KAGP,sBAAA;EACH,aAAA;EACA,OAAA;EACA,UAAA;EACA,WAAA;EACA,YAAA;EACA,YAAA;EACA,eAAA;AAAA;AAAA,KAGG,+BAAA;EACH,UAAA,GAAa,wBAAA;EACb,GAAA,SAAY,IAAA;EACZ,kBAAA,IAAsB,GAAA;EACtB,mBAAA;EACA,UAAA;AAAA;AAAA,cAGW,wBAAA;EAAA,iBACM,UAAA;EAAA,iBACA,GAAA;EAAA,iBACA,kBAAA;EAAA,iBACA,mBAAA;EAAA,iBACA,UAAA;EAAA,iBACA,oBAAA;EAAA,QACT,cAAA;EAAA,QACA,0BAAA;EAAA,QACA,WAAA;cAEI,OAAA,GAAS,+BAAA;EAQrB,mBAAA,GAAuB,MAAA;IACrB,OAAA;IACA,MAAA,EAAQ,QAAA;IACR,QAAA;MAAY,IAAA;MAAc,IAAA;IAAA;IAC1B,KAAA;IACA,MAAA;IACA,SAAA;IACA,gBAAA;IACA,uBAAA,GAA0B,iBAAA;IAC1B,kBAAA,GAAqB,OAAA,UAAiB,OAAA;IACtC,8BAAA,GAAiC,MAAA;MAC/B,KAAA;MACA,MAAA;MACA,SAAA;MACA,OAAA;MACA,cAAA;IAAA;IAEF,qBAAA;EAAA,MACE,qBAAA;EA6FJ,eAAA,GAAmB,MAAA;IACjB,kBAAA;IACA,SAAA;MAAa,KAAA;MAAgB,cAAA;IAAA;IAC7B,QAAA,EAAU,sBAAA;EAAA,MACR,mBAAA;EAOJ,sCAAA;EA4CA,+BAAA,GAAmC,GAAA;EAenC,8BAAA;EAIA,oBAAA,GAAwB,KAAA,EAAO,mBAAA,YAA6B,sBAAA;EAAA,QAgDpD,cAAA;EAuBR,wBAAA,GAA4B,IAAA,EAAM,sBAAA;EAAA,QAY1B,aAAA;EAAA,iBAQS,WAAA;EAAA,QAOT,kBAAA;AAAA"}
@@ -267,3 +267,5 @@ var ManagedServiceSupervisor = class {
267
267
  };
268
268
  //#endregion
269
269
  export { ManagedServiceSupervisor };
270
+
271
+ //# sourceMappingURL=managed-service-supervisor.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-service-supervisor.service.js","names":[],"sources":["../../../../src/shared/services/runtime/managed-service-supervisor.service.ts"],"sourcesContent":["import { spawn, type ChildProcess } from \"node:child_process\";\nimport { mkdirSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport * as NextclawCore from \"@nextclaw/core\";\nimport { FileLogSink } from \"@nextclaw/core\";\nimport {\n managedServiceStateStore,\n type ManagedServiceLastExit,\n type ManagedServiceLease,\n type ManagedServiceState,\n type ManagedServiceStateStore\n} from \"@nextclaw-service/shared/stores/managed-service-state.store.js\";\nimport { writeInitialManagedServiceState, writeReadyManagedServiceState } from \"@nextclaw-service/shared/services/runtime/utils/service-remote-runtime.utils.js\";\nimport type { ManagedServiceSnapshot } from \"@nextclaw-service/shared/services/runtime/utils/managed-service-routing.utils.js\";\nimport { resolveCliSubcommandLaunch } from \"@nextclaw-service/shared/utils/marketplace/cli-subcommand-launch.utils.js\";\nimport { createTopLevelNextclawCommandEnv } from \"@nextclaw-service/shared/utils/top-level-nextclaw-command-env.utils.js\";\nimport { isProcessRunning, resolveServiceLogPath } from \"@nextclaw-service/shared/utils/cli.utils.js\";\n\nconst DEFAULT_HEARTBEAT_INTERVAL_MS = 2_000;\nconst DEFAULT_LEASE_TTL_MS = 10_000;\nconst SIGNAL_EXIT_CODES: Record<string, number> = {\n SIGHUP: 129,\n SIGINT: 130,\n SIGTERM: 143\n};\n\ntype Config = NextclawCore.Config;\n\ntype ManagedServiceStartup = {\n child: ChildProcess;\n logPath: string;\n readinessTimeoutMs: number;\n quickPhaseTimeoutMs: number;\n extendedPhaseTimeoutMs: number;\n snapshot: ManagedServiceSnapshot;\n};\n\ntype ManagedServiceLiveness = {\n processExists: boolean;\n running: boolean;\n staleState: boolean;\n staleReason: \"process-not-running\" | \"lease-expired\" | null;\n leaseExpired: boolean;\n leaseMissing: boolean;\n lastHeartbeatAt: string | null;\n};\n\ntype ManagedServiceSupervisorOptions = {\n stateStore?: ManagedServiceStateStore;\n now?: () => Date;\n isProcessRunningFn?: (pid: number) => boolean;\n heartbeatIntervalMs?: number;\n leaseTtlMs?: number;\n};\n\nexport class ManagedServiceSupervisor {\n private readonly stateStore: ManagedServiceStateStore;\n private readonly now: () => Date;\n private readonly isProcessRunningFn: (pid: number) => boolean;\n private readonly heartbeatIntervalMs: number;\n private readonly leaseTtlMs: number;\n private readonly serviceStartupLogger = NextclawCore.getAppLogger(\"service.startup\");\n private heartbeatTimer: NodeJS.Timeout | null = null;\n private lifecycleTrackingInstalled = false;\n private pendingExit: ManagedServiceLastExit | null = null;\n\n constructor(options: ManagedServiceSupervisorOptions = {}) {\n this.stateStore = options.stateStore ?? managedServiceStateStore;\n this.now = options.now ?? (() => new Date());\n this.isProcessRunningFn = options.isProcessRunningFn ?? isProcessRunning;\n this.heartbeatIntervalMs = options.heartbeatIntervalMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS;\n this.leaseTtlMs = options.leaseTtlMs ?? DEFAULT_LEASE_TTL_MS;\n }\n\n spawnManagedService = (params: {\n appName: string;\n config: Config;\n uiConfig: { host: string; port: number };\n uiUrl: string;\n apiUrl: string;\n healthUrl: string;\n startupTimeoutMs?: number;\n resolveStartupTimeoutMs: (overrideTimeoutMs: number | undefined) => number;\n appendStartupStage: (logPath: string, message: string) => void;\n printStartupFailureDiagnostics: (params: {\n uiUrl: string;\n apiUrl: string;\n healthUrl: string;\n logPath: string;\n lastProbeError: string | null;\n }) => void;\n resolveServiceLogPath?: () => string;\n }): ManagedServiceStartup | null => {\n const {\n appName,\n apiUrl,\n appendStartupStage,\n config,\n healthUrl,\n printStartupFailureDiagnostics,\n resolveStartupTimeoutMs,\n startupTimeoutMs,\n uiConfig,\n uiUrl\n } = params;\n const logPath = (params.resolveServiceLogPath ?? resolveServiceLogPath)();\n new FileLogSink({ serviceLogPath: logPath }).ensureReady();\n mkdirSync(dirname(logPath), { recursive: true });\n const readinessTimeoutMs = resolveStartupTimeoutMs(startupTimeoutMs);\n const quickPhaseTimeoutMs = Math.min(8000, readinessTimeoutMs);\n const extendedPhaseTimeoutMs = Math.max(0, readinessTimeoutMs - quickPhaseTimeoutMs);\n appendStartupStage(\n logPath,\n `start requested: ui=${uiConfig.host}:${uiConfig.port}, readinessTimeoutMs=${readinessTimeoutMs}`\n );\n console.log(`Starting ${appName} background service (readiness timeout ${Math.ceil(readinessTimeoutMs / 1000)}s)...`);\n\n const cliLaunch = resolveCliSubcommandLaunch({\n argvEntry: process.argv[1],\n importMetaUrl: import.meta.url,\n cliArgs: [\"serve\", \"--ui-port\", String(uiConfig.port)],\n nodePath: process.execPath\n });\n const childArgs = [...process.execArgv, ...cliLaunch.args];\n appendStartupStage(logPath, `spawning background process: ${cliLaunch.command} ${childArgs.join(\" \")}`);\n const child = spawn(cliLaunch.command, childArgs, {\n env: createTopLevelNextclawCommandEnv(process.env),\n stdio: \"ignore\",\n detached: true,\n windowsHide: true\n });\n appendStartupStage(logPath, `spawned background process pid=${child.pid ?? \"unknown\"}`);\n if (!child.pid) {\n appendStartupStage(logPath, \"spawn failed: child pid missing\");\n console.error(\"Error: Failed to start background service.\");\n printStartupFailureDiagnostics({\n uiUrl,\n apiUrl,\n healthUrl,\n logPath,\n lastProbeError: null\n });\n return null;\n }\n\n const snapshot: ManagedServiceSnapshot = {\n pid: child.pid,\n uiUrl,\n apiUrl,\n uiHost: uiConfig.host,\n uiPort: uiConfig.port,\n logPath\n };\n writeInitialManagedServiceState({\n config,\n lease: this.createLease(child.pid),\n readinessTimeoutMs,\n snapshot\n });\n this.serviceStartupLogger.info(\"runtime.process.started\", {\n runtimeKind: \"managed-service\",\n childPid: child.pid,\n uiUrl,\n apiUrl,\n uiHost: uiConfig.host,\n uiPort: uiConfig.port,\n entrypoint: `${cliLaunch.command} ${childArgs.join(\" \")}`\n });\n this.serviceStartupLogger.info(\"service_state.written\", {\n runtimeKind: \"managed-service\",\n childPid: child.pid,\n statePath: this.stateStore.path,\n uiUrl,\n apiUrl\n });\n return {\n child,\n logPath,\n readinessTimeoutMs,\n quickPhaseTimeoutMs,\n extendedPhaseTimeoutMs,\n snapshot\n };\n };\n\n writeReadyState = (params: {\n readinessTimeoutMs: number;\n readiness: { ready: boolean; lastProbeError: string | null };\n snapshot: ManagedServiceSnapshot;\n }): ManagedServiceState => {\n return writeReadyManagedServiceState({\n ...params,\n lease: this.createLease(params.snapshot.pid)\n });\n };\n\n installCurrentProcessLifecycleTracking = (): void => {\n if (this.lifecycleTrackingInstalled) {\n return;\n }\n this.lifecycleTrackingInstalled = true;\n this.startHeartbeatForCurrentProcess();\n\n for (const signal of [\"SIGHUP\", \"SIGINT\", \"SIGTERM\"] as const) {\n process.once(signal, () => {\n this.pendingExit = {\n pid: process.pid,\n reason: \"signal\",\n exitedAt: this.now().toISOString(),\n code: SIGNAL_EXIT_CODES[signal],\n signal\n };\n this.recordCurrentProcessExit(this.pendingExit);\n this.stopHeartbeat();\n process.exit(SIGNAL_EXIT_CODES[signal]);\n });\n }\n\n process.once(\"uncaughtExceptionMonitor\", (error) => {\n this.pendingExit = {\n pid: process.pid,\n reason: \"uncaughtException\",\n exitedAt: this.now().toISOString(),\n message: error instanceof Error ? error.message : String(error)\n };\n });\n\n process.once(\"exit\", (code) => {\n this.recordCurrentProcessExit({\n ...(this.pendingExit ?? {\n pid: process.pid,\n reason: \"exit\",\n exitedAt: this.now().toISOString()\n }),\n code\n });\n this.stopHeartbeat();\n });\n };\n\n startHeartbeatForCurrentProcess = (pid = process.pid): void => {\n if (this.heartbeatTimer) {\n return;\n }\n if (!this.writeHeartbeat(pid)) {\n return;\n }\n this.heartbeatTimer = setInterval(() => {\n if (!this.writeHeartbeat(pid)) {\n this.stopHeartbeat();\n }\n }, this.heartbeatIntervalMs);\n this.heartbeatTimer.unref();\n };\n\n stopHeartbeatForCurrentProcess = (): void => {\n this.stopHeartbeat();\n };\n\n resolveStateLiveness = (state: ManagedServiceState | null): ManagedServiceLiveness => {\n if (!state) {\n return {\n processExists: false,\n running: false,\n staleState: false,\n staleReason: null,\n leaseExpired: false,\n leaseMissing: false,\n lastHeartbeatAt: null\n };\n }\n\n const processExists = this.isProcessRunningFn(state.pid);\n const leaseStatus = this.resolveLeaseStatus(state.lease);\n if (!processExists) {\n return {\n processExists,\n running: false,\n staleState: true,\n staleReason: \"process-not-running\",\n leaseExpired: leaseStatus.expired,\n leaseMissing: leaseStatus.missing,\n lastHeartbeatAt: leaseStatus.heartbeatAt\n };\n }\n if (leaseStatus.expired) {\n return {\n processExists,\n running: false,\n staleState: true,\n staleReason: \"lease-expired\",\n leaseExpired: true,\n leaseMissing: false,\n lastHeartbeatAt: leaseStatus.heartbeatAt\n };\n }\n return {\n processExists,\n running: true,\n staleState: false,\n staleReason: null,\n leaseExpired: false,\n leaseMissing: leaseStatus.missing,\n lastHeartbeatAt: leaseStatus.heartbeatAt\n };\n };\n\n private writeHeartbeat = (pid: number): boolean => {\n let wrote = false;\n this.stateStore.update((state) => {\n if (state.pid !== pid) {\n return state;\n }\n wrote = true;\n const next: ManagedServiceState = {\n ...state,\n lease: {\n ...(state.lease ?? this.createLease(pid)),\n ownerPid: pid,\n heartbeatAt: this.now().toISOString(),\n heartbeatIntervalMs: this.heartbeatIntervalMs,\n ttlMs: this.leaseTtlMs\n }\n };\n delete next.lastExit;\n return next;\n });\n return wrote;\n };\n\n recordCurrentProcessExit = (exit: ManagedServiceLastExit): void => {\n this.stateStore.update((state) => {\n if (state.pid !== exit.pid) {\n return state;\n }\n return {\n ...state,\n lastExit: exit\n };\n });\n };\n\n private stopHeartbeat = (): void => {\n if (!this.heartbeatTimer) {\n return;\n }\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = null;\n };\n\n private readonly createLease = (ownerPid: number): ManagedServiceLease => ({\n ownerPid,\n heartbeatAt: this.now().toISOString(),\n heartbeatIntervalMs: this.heartbeatIntervalMs,\n ttlMs: this.leaseTtlMs\n });\n\n private resolveLeaseStatus = (lease: ManagedServiceLease | undefined): {\n expired: boolean;\n missing: boolean;\n heartbeatAt: string | null;\n } => {\n if (!lease) {\n return {\n expired: false,\n missing: true,\n heartbeatAt: null\n };\n }\n const heartbeatAtMs = Date.parse(lease.heartbeatAt);\n const ttlMs = Number.isFinite(lease.ttlMs) ? lease.ttlMs : this.leaseTtlMs;\n return {\n expired: !Number.isFinite(heartbeatAtMs) || heartbeatAtMs + ttlMs < this.now().getTime(),\n missing: false,\n heartbeatAt: lease.heartbeatAt\n };\n };\n}\n"],"mappings":"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"}
@@ -7,4 +7,5 @@ declare class NextclawDistributionService {
7
7
  static get(): NextclawDistribution;
8
8
  }
9
9
  //#endregion
10
- export { NextclawDistributionService };
10
+ export { NextclawDistributionService };
11
+ //# sourceMappingURL=nextclaw-distribution.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextclaw-distribution.service.d.ts","names":[],"sources":["../../../../src/shared/services/runtime/nextclaw-distribution.service.ts"],"mappings":";;;cAEa,2BAAA;EAAA,eACI,mBAAA;EAAA,OAER,SAAA,CAAU,YAAA,EAAc,oBAAA;EAAA,OAIxB,GAAA,CAAA,GAAO,oBAAA;AAAA"}
@@ -11,3 +11,5 @@ var NextclawDistributionService = class NextclawDistributionService {
11
11
  };
12
12
  //#endregion
13
13
  export { NextclawDistributionService };
14
+
15
+ //# sourceMappingURL=nextclaw-distribution.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextclaw-distribution.service.js","names":[],"sources":["../../../../src/shared/services/runtime/nextclaw-distribution.service.ts"],"sourcesContent":["import type { NextclawDistribution } from \"@nextclaw-service/shared/types/distribution.types.js\";\n\nexport class NextclawDistributionService {\n private static currentDistribution: NextclawDistribution | null = null;\n\n static configure(distribution: NextclawDistribution): void {\n NextclawDistributionService.currentDistribution = distribution;\n }\n\n static get(): NextclawDistribution {\n if (!NextclawDistributionService.currentDistribution) {\n throw new Error(\"NextClaw distribution is not configured.\");\n }\n return NextclawDistributionService.currentDistribution;\n }\n}\n"],"mappings":";AAEA,IAAa,8BAAb,MAAa,4BAA4B;CACvC,OAAe,sBAAmD;CAElE,OAAO,UAAU,cAA0C;AACzD,8BAA4B,sBAAsB;;CAGpD,OAAO,MAA4B;AACjC,MAAI,CAAC,4BAA4B,oBAC/B,OAAM,IAAI,MAAM,2CAA2C;AAE7D,SAAO,4BAA4B"}