@nextclaw/service 0.1.14 → 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 +3 -1
  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 +3 -5
  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 +4 -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 +40 -14
  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 +8 -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 +2 -1
  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 +134 -75
  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 -1
  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 +85 -0
  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 +271 -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 +3 -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 +5 -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 +4 -32
  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 +10 -92
  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 +5 -2
  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 +23 -17
  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 +19 -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 +16 -1
  378. package/dist/shared/types/cli.types.d.ts.map +1 -0
  379. package/dist/shared/types/distribution.types.d.ts +2 -1
  380. package/dist/shared/types/distribution.types.d.ts.map +1 -0
  381. package/dist/shared/utils/cli.utils.d.ts +2 -1
  382. package/dist/shared/utils/cli.utils.d.ts.map +1 -0
  383. package/dist/shared/utils/cli.utils.js +2 -0
  384. package/dist/shared/utils/cli.utils.js.map +1 -0
  385. package/dist/shared/utils/config-path.d.ts +2 -1
  386. package/dist/shared/utils/config-path.d.ts.map +1 -0
  387. package/dist/shared/utils/config-path.js +2 -0
  388. package/dist/shared/utils/config-path.js.map +1 -0
  389. package/dist/shared/utils/marketplace/cli-subcommand-launch.utils.d.ts +2 -1
  390. package/dist/shared/utils/marketplace/cli-subcommand-launch.utils.d.ts.map +1 -0
  391. package/dist/shared/utils/marketplace/cli-subcommand-launch.utils.js +2 -0
  392. package/dist/shared/utils/marketplace/cli-subcommand-launch.utils.js.map +1 -0
  393. package/dist/shared/utils/marketplace/service-marketplace-helpers.utils.d.ts +2 -1
  394. package/dist/shared/utils/marketplace/service-marketplace-helpers.utils.d.ts.map +1 -0
  395. package/dist/shared/utils/marketplace/service-marketplace-helpers.utils.js +2 -0
  396. package/dist/shared/utils/marketplace/service-marketplace-helpers.utils.js.map +1 -0
  397. package/dist/shared/utils/package/package-manifest.utils.d.ts +2 -1
  398. package/dist/shared/utils/package/package-manifest.utils.d.ts.map +1 -0
  399. package/dist/shared/utils/package/package-manifest.utils.js +2 -0
  400. package/dist/shared/utils/package/package-manifest.utils.js.map +1 -0
  401. package/dist/shared/utils/runtime-helpers.d.ts +2 -1
  402. package/dist/shared/utils/runtime-helpers.d.ts.map +1 -0
  403. package/dist/shared/utils/runtime-helpers.js +2 -0
  404. package/dist/shared/utils/runtime-helpers.js.map +1 -0
  405. package/dist/shared/utils/service-port-probe.utils.d.ts +2 -1
  406. package/dist/shared/utils/service-port-probe.utils.d.ts.map +1 -0
  407. package/dist/shared/utils/service-port-probe.utils.js +2 -0
  408. package/dist/shared/utils/service-port-probe.utils.js.map +1 -0
  409. package/dist/shared/utils/startup-trace.d.ts +2 -1
  410. package/dist/shared/utils/startup-trace.d.ts.map +1 -0
  411. package/dist/shared/utils/startup-trace.js +2 -0
  412. package/dist/shared/utils/startup-trace.js.map +1 -0
  413. package/dist/shared/utils/top-level-nextclaw-command-env.utils.d.ts +2 -1
  414. package/dist/shared/utils/top-level-nextclaw-command-env.utils.d.ts.map +1 -0
  415. package/dist/shared/utils/top-level-nextclaw-command-env.utils.js +2 -0
  416. package/dist/shared/utils/top-level-nextclaw-command-env.utils.js.map +1 -0
  417. package/package.json +20 -20
@@ -11,4 +11,5 @@ type AgentRuntimeListResult = {
11
11
  };
12
12
  declare function listAvailableAgentRuntimes(params?: AgentRuntimeSessionTypeDescribeParams): Promise<AgentRuntimeListResult>;
13
13
  //#endregion
14
- export { AgentRuntimeListEntry, AgentRuntimeListResult, listAvailableAgentRuntimes };
14
+ export { AgentRuntimeListEntry, AgentRuntimeListResult, listAvailableAgentRuntimes };
15
+ //# sourceMappingURL=agent-runtime.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runtime.utils.d.ts","names":[],"sources":["../../../../src/cli/commands/agent/agent-runtime.utils.ts"],"mappings":";;;KAYY,qBAAA,GAAwB,6BAAA;EAClC,OAAA;EACA,MAAA;AAAA;AAAA,KAGU,sBAAA;EACV,cAAA;EACA,QAAA,EAAU,qBAAA;AAAA;AAAA,iBAOU,0BAAA,CACpB,MAAA,GAAS,qCAAA,GACR,OAAA,CAAQ,sBAAA"}
@@ -15,7 +15,7 @@ async function listAvailableAgentRuntimes(params) {
15
15
  createRuntime: createUnusedRuntime
16
16
  });
17
17
  runtimeSourceByKind.set(DEFAULT_AGENT_RUNTIME_ENTRY_ID, { source: "builtin" });
18
- for (const provider of new BuiltinNarpRuntimeProviderService(() => config).createProviders()) runtimeRegistry.register(provider);
18
+ for (const provider of new BuiltinNarpRuntimeProviderService({ loadConfig: () => config }).createProviders()) runtimeRegistry.register(provider);
19
19
  runtimeSourceByKind.set("narp-http", { source: "builtin" });
20
20
  runtimeSourceByKind.set("narp-stdio", { source: "builtin" });
21
21
  const resolvedEntries = resolveAgentRuntimeEntries({ config });
@@ -39,3 +39,5 @@ async function listAvailableAgentRuntimes(params) {
39
39
  }
40
40
  //#endregion
41
41
  export { listAvailableAgentRuntimes };
42
+
43
+ //# sourceMappingURL=agent-runtime.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runtime.utils.js","names":[],"sources":["../../../../src/cli/commands/agent/agent-runtime.utils.ts"],"sourcesContent":["import { loadConfig } from \"@nextclaw/core\";\nimport type { NcpAgentRuntime } from \"@nextclaw/ncp\";\nimport type { RuntimeFactoryParams } from \"@nextclaw/ncp-toolkit\";\nimport {\n AgentRuntimeRegistry,\n BuiltinNarpRuntimeProviderService,\n DEFAULT_AGENT_RUNTIME_ENTRY_ID,\n resolveAgentRuntimeEntries,\n type AgentRuntimeSessionTypeDescribeParams,\n type AgentRuntimeSessionTypeOption,\n} from \"@nextclaw/kernel\";\n\nexport type AgentRuntimeListEntry = AgentRuntimeSessionTypeOption & {\n default: boolean;\n source: \"builtin\";\n};\n\nexport type AgentRuntimeListResult = {\n defaultRuntime: string;\n runtimes: AgentRuntimeListEntry[];\n};\n\nfunction createUnusedRuntime(_params: RuntimeFactoryParams): NcpAgentRuntime {\n throw new Error(\"runtime creation is not available during runtime listing\");\n}\n\nexport async function listAvailableAgentRuntimes(\n params?: AgentRuntimeSessionTypeDescribeParams,\n): Promise<AgentRuntimeListResult> {\n const config = loadConfig();\n const runtimeRegistry = new AgentRuntimeRegistry();\n const runtimeSourceByKind = new Map<string, {\n source: \"builtin\";\n }>();\n const runtimeSourceByEntryId = new Map<string, {\n source: \"builtin\";\n }>();\n\n runtimeRegistry.register({\n kind: DEFAULT_AGENT_RUNTIME_ENTRY_ID,\n label: \"Native\",\n createRuntime: createUnusedRuntime,\n });\n runtimeSourceByKind.set(DEFAULT_AGENT_RUNTIME_ENTRY_ID, {\n source: \"builtin\",\n });\n for (const provider of new BuiltinNarpRuntimeProviderService({ loadConfig: () => config }).createProviders()) {\n runtimeRegistry.register(provider);\n }\n runtimeSourceByKind.set(\"narp-http\", {\n source: \"builtin\",\n });\n runtimeSourceByKind.set(\"narp-stdio\", {\n source: \"builtin\",\n });\n\n const resolvedEntries = resolveAgentRuntimeEntries({\n config,\n });\n runtimeRegistry.applyEntries(resolvedEntries);\n for (const entry of resolvedEntries.entries) {\n const source = runtimeSourceByKind.get(entry.type);\n runtimeSourceByEntryId.set(entry.id, source ?? {\n source: \"builtin\",\n });\n }\n\n const listed = await runtimeRegistry.listSessionTypes(params);\n return {\n defaultRuntime: listed.defaultType,\n runtimes: listed.options.map((runtime) => {\n const source = runtimeSourceByEntryId.get(runtime.value);\n return {\n ...runtime,\n default: runtime.value === listed.defaultType,\n source: source?.source ?? \"builtin\",\n };\n }),\n };\n}\n"],"mappings":";;;AAsBA,SAAS,oBAAoB,SAAgD;AAC3E,OAAM,IAAI,MAAM,2DAA2D;;AAG7E,eAAsB,2BACpB,QACiC;CACjC,MAAM,SAAS,YAAY;CAC3B,MAAM,kBAAkB,IAAI,sBAAsB;CAClD,MAAM,sCAAsB,IAAI,KAE5B;CACJ,MAAM,yCAAyB,IAAI,KAE/B;AAEJ,iBAAgB,SAAS;EACvB,MAAM;EACN,OAAO;EACP,eAAe;EAChB,CAAC;AACF,qBAAoB,IAAI,gCAAgC,EACtD,QAAQ,WACT,CAAC;AACF,MAAK,MAAM,YAAY,IAAI,kCAAkC,EAAE,kBAAkB,QAAQ,CAAC,CAAC,iBAAiB,CAC1G,iBAAgB,SAAS,SAAS;AAEpC,qBAAoB,IAAI,aAAa,EACnC,QAAQ,WACT,CAAC;AACF,qBAAoB,IAAI,cAAc,EACpC,QAAQ,WACT,CAAC;CAEF,MAAM,kBAAkB,2BAA2B,EACjD,QACD,CAAC;AACF,iBAAgB,aAAa,gBAAgB;AAC7C,MAAK,MAAM,SAAS,gBAAgB,SAAS;EAC3C,MAAM,SAAS,oBAAoB,IAAI,MAAM,KAAK;AAClD,yBAAuB,IAAI,MAAM,IAAI,UAAU,EAC7C,QAAQ,WACT,CAAC;;CAGJ,MAAM,SAAS,MAAM,gBAAgB,iBAAiB,OAAO;AAC7D,QAAO;EACL,gBAAgB,OAAO;EACvB,UAAU,OAAO,QAAQ,KAAK,YAAY;GACxC,MAAM,SAAS,uBAAuB,IAAI,QAAQ,MAAM;AACxD,UAAO;IACL,GAAG;IACH,SAAS,QAAQ,UAAU,OAAO;IAClC,QAAQ,QAAQ,UAAU;IAC3B;IACD;EACH"}
@@ -11,4 +11,5 @@ declare function runCliAgentCommand(params: {
11
11
  providerManager: LlmProviderRuntime;
12
12
  }): Promise<void>;
13
13
  //#endregion
14
- export { runCliAgentCommand };
14
+ export { runCliAgentCommand };
15
+ //# sourceMappingURL=cli-agent-runner.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-agent-runner.utils.d.ts","names":[],"sources":["../../../../src/cli/commands/agent/cli-agent-runner.utils.ts"],"mappings":";;;;;iBAkFsB,kBAAA,CAAmB,MAAA;EACvC,IAAA;EACA,IAAA,EAAM,mBAAA;EACN,MAAA,EAAQ,MAAA;EACR,MAAA,EAAQ,cAAA;EACR,eAAA,EAAiB,kBAAA;AAAA,IACf,OAAA"}
@@ -30,7 +30,7 @@ function createCliHistoryInterface() {
30
30
  return rl;
31
31
  }
32
32
  async function runCliInteractiveLoop(params) {
33
- const { agentRunRequests, config, logo, metadata, sessionKey, sessionManager } = params;
33
+ const { agentRunRequests, config, logo, metadata, sessionKey } = params;
34
34
  console.log(`${logo} Interactive mode (type exit or Ctrl+C to quit)\n`);
35
35
  const rl = createCliHistoryInterface();
36
36
  let running = true;
@@ -44,7 +44,6 @@ async function runCliInteractiveLoop(params) {
44
44
  }
45
45
  printAgentResponse(await dispatchPromptOverNcp({
46
46
  config,
47
- sessionManager,
48
47
  agentRunRequests,
49
48
  sessionKey,
50
49
  content: trimmed,
@@ -54,7 +53,6 @@ async function runCliInteractiveLoop(params) {
54
53
  }
55
54
  async function runCliAgentCommand(params) {
56
55
  const { config, kernel, logo, opts } = params;
57
- const sessionManager = kernel.sessions;
58
56
  await kernel.extensions.load({ config });
59
57
  await kernel.start();
60
58
  try {
@@ -63,7 +61,6 @@ async function runCliAgentCommand(params) {
63
61
  if (opts.message) {
64
62
  printAgentResponse(await dispatchPromptOverNcp({
65
63
  config,
66
- sessionManager,
67
64
  agentRunRequests: kernel.agentRunRequestManager,
68
65
  sessionKey,
69
66
  content: opts.message,
@@ -74,7 +71,6 @@ async function runCliAgentCommand(params) {
74
71
  await runCliInteractiveLoop({
75
72
  logo,
76
73
  config,
77
- sessionManager,
78
74
  agentRunRequests: kernel.agentRunRequestManager,
79
75
  sessionKey,
80
76
  metadata: sharedMetadata
@@ -85,3 +81,5 @@ async function runCliAgentCommand(params) {
85
81
  }
86
82
  //#endregion
87
83
  export { runCliAgentCommand };
84
+
85
+ //# sourceMappingURL=cli-agent-runner.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-agent-runner.utils.js","names":[],"sources":["../../../../src/cli/commands/agent/cli-agent-runner.utils.ts"],"sourcesContent":["import {\n getDataDir,\n type Config,\n} from \"@nextclaw/core\";\nimport {\n dispatchPromptOverNcp,\n type LlmProviderRuntime,\n type NextclawKernel,\n} from \"@nextclaw/kernel\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport type { AgentCommandOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\nimport { printAgentResponse, prompt } from \"@nextclaw-service/shared/utils/cli.utils.js\";\n\nconst EXIT_COMMANDS = new Set([\"exit\", \"quit\", \"/exit\", \"/quit\", \":q\"]);\n\nfunction buildCliSharedMetadata(\n opts: Pick<AgentCommandOptions, \"model\">,\n): Record<string, unknown> {\n return typeof opts.model === \"string\" && opts.model.trim()\n ? { model: opts.model.trim() }\n : {};\n}\n\nfunction createCliHistoryInterface() {\n const historyFile = join(getDataDir(), \"history\", \"cli_history\");\n const historyDir = resolve(historyFile, \"..\");\n mkdirSync(historyDir, { recursive: true });\n\n const history = existsSync(historyFile)\n ? readFileSync(historyFile, \"utf-8\").split(\"\\n\").filter(Boolean)\n : [];\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n rl.on(\"close\", () => {\n const merged = history.concat(\n (rl as unknown as { history: string[] }).history ?? [],\n );\n writeFileSync(historyFile, merged.join(\"\\n\"));\n process.exit(0);\n });\n\n return rl;\n}\n\nasync function runCliInteractiveLoop(params: {\n logo: string;\n config: Config;\n agentRunRequests: NextclawKernel[\"agentRunRequestManager\"];\n sessionKey: string;\n metadata: Record<string, unknown>;\n}): Promise<void> {\n const { agentRunRequests, config, logo, metadata, sessionKey } = params;\n console.log(`${logo} Interactive mode (type exit or Ctrl+C to quit)\\n`);\n const rl = createCliHistoryInterface();\n\n let running = true;\n while (running) {\n const line = await prompt(rl, \"You: \");\n const trimmed = line.trim();\n if (!trimmed) {\n continue;\n }\n if (EXIT_COMMANDS.has(trimmed.toLowerCase())) {\n rl.close();\n running = false;\n break;\n }\n const response = await dispatchPromptOverNcp({\n config,\n agentRunRequests,\n sessionKey,\n content: trimmed,\n metadata,\n });\n printAgentResponse(response);\n }\n}\n\nexport async function runCliAgentCommand(params: {\n logo: string;\n opts: AgentCommandOptions;\n config: Config;\n kernel: NextclawKernel;\n providerManager: LlmProviderRuntime;\n}): Promise<void> {\n const {\n config,\n kernel,\n logo,\n opts,\n } = params;\n await kernel.extensions.load({ config });\n await kernel.start();\n\n try {\n const sessionKey = opts.session ?? \"cli:default\";\n const sharedMetadata = buildCliSharedMetadata(opts);\n\n if (opts.message) {\n const response = await dispatchPromptOverNcp({\n config,\n agentRunRequests: kernel.agentRunRequestManager,\n sessionKey,\n content: opts.message,\n metadata: sharedMetadata,\n });\n printAgentResponse(response);\n return;\n }\n\n await runCliInteractiveLoop({\n logo,\n config,\n agentRunRequests: kernel.agentRunRequestManager,\n sessionKey,\n metadata: sharedMetadata,\n });\n } finally {\n await kernel.dispose();\n }\n}\n"],"mappings":";;;;;;;AAeA,MAAM,gBAAgB,IAAI,IAAI;CAAC;CAAQ;CAAQ;CAAS;CAAS;CAAK,CAAC;AAEvE,SAAS,uBACP,MACyB;AACzB,QAAO,OAAO,KAAK,UAAU,YAAY,KAAK,MAAM,MAAM,GACtD,EAAE,OAAO,KAAK,MAAM,MAAM,EAAE,GAC5B,EAAE;;AAGR,SAAS,4BAA4B;CACnC,MAAM,cAAc,KAAK,YAAY,EAAE,WAAW,cAAc;AAEhE,WADmB,QAAQ,aAAa,KAAK,EACvB,EAAE,WAAW,MAAM,CAAC;CAE1C,MAAM,UAAU,WAAW,YAAY,GACnC,aAAa,aAAa,QAAQ,CAAC,MAAM,KAAK,CAAC,OAAO,QAAQ,GAC9D,EAAE;CACN,MAAM,KAAK,gBAAgB;EACzB,OAAO,QAAQ;EACf,QAAQ,QAAQ;EACjB,CAAC;AACF,IAAG,GAAG,eAAe;AAInB,gBAAc,aAHC,QAAQ,OACpB,GAAwC,WAAW,EAAE,CACvD,CACiC,KAAK,KAAK,CAAC;AAC7C,UAAQ,KAAK,EAAE;GACf;AAEF,QAAO;;AAGT,eAAe,sBAAsB,QAMnB;CAChB,MAAM,EAAE,kBAAkB,QAAQ,MAAM,UAAU,eAAe;AACjE,SAAQ,IAAI,GAAG,KAAK,mDAAmD;CACvE,MAAM,KAAK,2BAA2B;CAEtC,IAAI,UAAU;AACd,QAAO,SAAS;EAEd,MAAM,WADO,MAAM,OAAO,IAAI,QAAQ,EACjB,MAAM;AAC3B,MAAI,CAAC,QACH;AAEF,MAAI,cAAc,IAAI,QAAQ,aAAa,CAAC,EAAE;AAC5C,MAAG,OAAO;AACV,aAAU;AACV;;AASF,qBAPiB,MAAM,sBAAsB;GAC3C;GACA;GACA;GACA,SAAS;GACT;GACD,CAAC,CAC0B;;;AAIhC,eAAsB,mBAAmB,QAMvB;CAChB,MAAM,EACJ,QACA,QACA,MACA,SACE;AACJ,OAAM,OAAO,WAAW,KAAK,EAAE,QAAQ,CAAC;AACxC,OAAM,OAAO,OAAO;AAEpB,KAAI;EACF,MAAM,aAAa,KAAK,WAAW;EACnC,MAAM,iBAAiB,uBAAuB,KAAK;AAEnD,MAAI,KAAK,SAAS;AAQhB,sBAPiB,MAAM,sBAAsB;IAC3C;IACA,kBAAkB,OAAO;IACzB;IACA,SAAS,KAAK;IACd,UAAU;IACX,CAAC,CAC0B;AAC5B;;AAGF,QAAM,sBAAsB;GAC1B;GACA;GACA,kBAAkB,OAAO;GACzB;GACA,UAAU;GACX,CAAC;WACM;AACR,QAAM,OAAO,SAAS"}
@@ -14,4 +14,5 @@ declare class AgentCommands {
14
14
  private toAgentListEntry;
15
15
  }
16
16
  //#endregion
17
- export { AgentCommands };
17
+ export { AgentCommands };
18
+ //# sourceMappingURL=agent-commands.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-commands.service.d.ts","names":[],"sources":["../../../../../src/cli/commands/agent/services/agent-commands.service.ts"],"mappings":";;;cAYa,aAAA;EAAA,iBACkB,IAAA;cAAA,IAAA;IAC3B,4BAAA,GAA+B,aAAA;EAAA;EAGjC,IAAA,GAAQ,IAAA,GAAM,wBAAA;EAkBd,QAAA,GAAkB,IAAA,GAAM,4BAAA,KAAoC,OAAA;EAyB5D,MAAA,GAAgB,OAAA,UAAiB,IAAA,GAAM,uBAAA,KAA+B,OAAA;EA4BtE,MAAA,GAAgB,OAAA,UAAiB,IAAA,GAAM,0BAAA,KAAkC,OAAA;EAsBzE,MAAA,GAAgB,OAAA,UAAiB,IAAA,GAAM,0BAAA,KAAkC,OAAA;EAAA,QAkBjE,gBAAA;AAAA"}
@@ -109,3 +109,5 @@ var AgentCommands = class {
109
109
  };
110
110
  //#endregion
111
111
  export { AgentCommands };
112
+
113
+ //# sourceMappingURL=agent-commands.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-commands.service.js","names":[],"sources":["../../../../../src/cli/commands/agent/services/agent-commands.service.ts"],"sourcesContent":["import {\n BUILTIN_MAIN_AGENT_ID,\n createAgentProfile,\n loadConfig,\n removeAgentProfile,\n resolveEffectiveAgentProfiles,\n updateAgentProfile,\n type EffectiveAgentProfile\n} from \"@nextclaw/core\";\nimport { listAvailableAgentRuntimes } from \"../agent-runtime.utils.js\";\nimport type { AgentsListCommandOptions, AgentsNewCommandOptions, AgentsRemoveCommandOptions, AgentsRuntimesCommandOptions, AgentsUpdateCommandOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\n\nexport class AgentCommands {\n constructor(private readonly deps: {\n initializeAgentHomeDirectory: (homeDirectory: string) => void;\n }) {}\n\n list = (opts: AgentsListCommandOptions = {}): void => {\n const config = loadConfig();\n const agents = resolveEffectiveAgentProfiles(config).map((agent) => this.toAgentListEntry(agent));\n if (opts.json) {\n console.log(JSON.stringify(agents, null, 2));\n return;\n }\n for (const agent of agents) {\n const head = agent.builtIn ? `${agent.id} (built-in)` : agent.id;\n console.log(head);\n console.log(` name: ${agent.displayName ?? \"-\"}`);\n console.log(` description: ${agent.description ?? \"-\"}`);\n console.log(` home: ${agent.workspace}`);\n console.log(` avatar: ${agent.avatar ?? \"-\"}`);\n console.log(` runtime: ${agent.runtime ?? \"-\"}`);\n }\n };\n\n runtimes = async (opts: AgentsRuntimesCommandOptions = {}): Promise<void> => {\n const describeMode = opts.probe ? \"probe\" : \"observation\";\n const listed = await listAvailableAgentRuntimes({ describeMode });\n if (opts.json) {\n console.log(JSON.stringify({\n defaultRuntime: listed.defaultRuntime,\n describeMode,\n runtimes: listed.runtimes,\n }, null, 2));\n return;\n }\n\n for (const runtime of listed.runtimes) {\n const head = runtime.default ? `${runtime.value} (default)` : runtime.value;\n console.log(head);\n console.log(` label: ${runtime.label}`);\n console.log(` source: ${runtime.source}`);\n console.log(` ready: ${runtime.ready === false ? \"no\" : \"yes\"}`);\n console.log(` reason: ${runtime.reason ?? \"-\"}`);\n console.log(` reasonMessage: ${runtime.reasonMessage ?? \"-\"}`);\n console.log(` recommendedModel: ${runtime.recommendedModel ?? \"-\"}`);\n console.log(` supportedModels: ${runtime.supportedModels?.join(\", \") ?? \"-\"}`);\n }\n };\n\n create = async (agentId: string, opts: AgentsNewCommandOptions = {}): Promise<void> => {\n const created = createAgentProfile(\n {\n id: agentId,\n displayName: opts.name,\n description: opts.description,\n avatar: opts.avatar,\n home: opts.home,\n runtime: opts.runtime\n },\n {\n initializeHomeDirectory: this.deps.initializeAgentHomeDirectory\n }\n );\n if (opts.json) {\n console.log(JSON.stringify({\n agent: created\n }, null, 2));\n return;\n }\n console.log(`✓ Created agent ${created.id}`);\n console.log(` name: ${created.displayName ?? \"-\"}`);\n console.log(` description: ${created.description ?? \"-\"}`);\n console.log(` home: ${created.workspace}`);\n console.log(` avatar: ${created.avatar ?? \"-\"}`);\n console.log(` runtime: ${created.runtime ?? created.engine ?? \"-\"}`);\n };\n\n update = async (agentId: string, opts: AgentsUpdateCommandOptions = {}): Promise<void> => {\n const updated = updateAgentProfile({\n id: agentId,\n displayName: opts.name,\n description: opts.description,\n avatar: opts.avatar,\n runtime: opts.runtime\n });\n if (opts.json) {\n console.log(JSON.stringify({\n agent: updated\n }, null, 2));\n return;\n }\n console.log(`✓ Updated agent ${updated.id}`);\n console.log(` name: ${updated.displayName ?? \"-\"}`);\n console.log(` description: ${updated.description ?? \"-\"}`);\n console.log(` home: ${updated.workspace}`);\n console.log(` avatar: ${updated.avatar ?? \"-\"}`);\n console.log(` runtime: ${updated.runtime ?? updated.engine ?? \"-\"}`);\n };\n\n remove = async (agentId: string, opts: AgentsRemoveCommandOptions = {}): Promise<void> => {\n if (agentId.trim().toLowerCase() === BUILTIN_MAIN_AGENT_ID) {\n throw new Error(`agent id '${BUILTIN_MAIN_AGENT_ID}' is reserved`);\n }\n const removed = removeAgentProfile(agentId);\n if (!removed) {\n throw new Error(`agent '${agentId}' not found`);\n }\n if (opts.json) {\n console.log(JSON.stringify({\n removed: true,\n agentId\n }, null, 2));\n return;\n }\n console.log(`✓ Removed agent ${agentId}`);\n };\n\n private toAgentListEntry = (agent: EffectiveAgentProfile) => {\n return {\n id: agent.id,\n displayName: agent.displayName ?? null,\n description: agent.description ?? null,\n avatar: agent.avatar ?? null,\n workspace: agent.workspace,\n runtime: agent.runtime ?? agent.engine ?? null,\n builtIn: agent.builtIn === true\n };\n };\n}\n"],"mappings":"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"}
@@ -15,4 +15,5 @@ declare class ConfigCommands {
15
15
  private requestRestartForConfigDiff;
16
16
  }
17
17
  //#endregion
18
- export { ConfigCommands };
18
+ export { ConfigCommands };
19
+ //# sourceMappingURL=config-commands.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-commands.service.d.ts","names":[],"sources":["../../../../../src/cli/commands/config/services/config-commands.service.ts"],"mappings":";;;cAOa,cAAA;EAAA,QAED,IAAA;cAAA,IAAA;IACN,cAAA,GAAiB,MAAA,EAAQ,oBAAA,KAAyB,OAAA;EAAA;EAItD,GAAA,GAAO,QAAA,UAAkB,IAAA,GAAM,gBAAA;EAoC/B,GAAA,GAAa,QAAA,UAAkB,KAAA,UAAe,IAAA,GAAM,gBAAA,KAAwB,OAAA;EA4C5E,KAAA,GAAe,QAAA,aAAmB,OAAA;EAAA,QAkC1B,qBAAA;EAAA,QAQA,8BAAA;EAAA,QAoBA,yBAAA;EAAA,QAUA,2BAAA;AAAA"}
@@ -131,3 +131,5 @@ var ConfigCommands = class {
131
131
  };
132
132
  //#endregion
133
133
  export { ConfigCommands };
134
+
135
+ //# sourceMappingURL=config-commands.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-commands.service.js","names":[],"sources":["../../../../../src/cli/commands/config/services/config-commands.service.ts"],"sourcesContent":["import { buildReloadPlan, diffConfigPaths, getWorkspacePath, loadConfig, saveConfig, type Config } from \"@nextclaw/core\";\nimport { getPluginChannelBindings } from \"@nextclaw/openclaw-compat\";\nimport { getAtConfigPath, parseConfigSetValue, parseRequiredConfigPath, setAtConfigPath, unsetAtConfigPath } from \"@nextclaw-service/shared/utils/config-path.js\";\nimport { resolveChannelConfigView } from \"@nextclaw-service/commands/channel/index.js\";\nimport { loadPluginRegistry, mergePluginConfigView } from \"@nextclaw-service/commands/plugin/index.js\";\nimport type { ConfigGetOptions, ConfigSetOptions, RequestRestartParams } from \"@nextclaw-service/shared/types/cli.types.js\";\n\nexport class ConfigCommands {\n constructor(\n private deps: {\n requestRestart: (params: RequestRestartParams) => Promise<void>;\n }\n ) {}\n\n get = (pathExpr: string, opts: ConfigGetOptions = {}): void => {\n let parsedPath: string[];\n try {\n parsedPath = parseRequiredConfigPath(pathExpr);\n } catch (error) {\n console.error(String(error));\n process.exit(1);\n return;\n }\n\n const config = loadConfig();\n const resolvedConfig = this.resolveReadConfigView(config, parsedPath) as unknown as Record<string, unknown>;\n const result = getAtConfigPath(resolvedConfig, parsedPath);\n if (!result.found) {\n console.error(`Config path not found: ${pathExpr}`);\n process.exit(1);\n return;\n }\n\n if (opts.json) {\n console.log(JSON.stringify(result.value ?? null, null, 2));\n return;\n }\n\n if (\n typeof result.value === \"string\" ||\n typeof result.value === \"number\" ||\n typeof result.value === \"boolean\"\n ) {\n console.log(String(result.value));\n return;\n }\n\n console.log(JSON.stringify(result.value ?? null, null, 2));\n };\n\n set = async (pathExpr: string, value: string, opts: ConfigSetOptions = {}): Promise<void> => {\n let parsedPath: string[];\n try {\n parsedPath = parseRequiredConfigPath(pathExpr);\n } catch (error) {\n console.error(String(error));\n process.exit(1);\n return;\n }\n\n let parsedValue: unknown;\n try {\n parsedValue = parseConfigSetValue(value, opts);\n } catch (error) {\n console.error(`Failed to parse config value: ${String(error)}`);\n process.exit(1);\n return;\n }\n\n const prevConfig = loadConfig();\n const projectedContext = this.resolveProjectedChannelContext(prevConfig, parsedPath);\n const nextConfigTarget = projectedContext\n ? structuredClone(projectedContext.view) as unknown as Record<string, unknown>\n : structuredClone(prevConfig) as unknown as Record<string, unknown>;\n try {\n setAtConfigPath(nextConfigTarget, parsedPath, parsedValue);\n } catch (error) {\n console.error(String(error));\n process.exit(1);\n return;\n }\n\n const nextConfig = projectedContext\n ? mergePluginConfigView(prevConfig, nextConfigTarget, projectedContext.bindings)\n : nextConfigTarget as Config;\n saveConfig(nextConfig as Config);\n await this.requestRestartForConfigDiff({\n prevConfig,\n nextConfig: nextConfig as Config,\n reason: `config.set ${pathExpr}`,\n manualMessage: `Updated ${pathExpr}. Restart the gateway to apply.`\n });\n };\n\n unset = async (pathExpr: string): Promise<void> => {\n let parsedPath: string[];\n try {\n parsedPath = parseRequiredConfigPath(pathExpr);\n } catch (error) {\n console.error(String(error));\n process.exit(1);\n return;\n }\n\n const prevConfig = loadConfig();\n const projectedContext = this.resolveProjectedChannelContext(prevConfig, parsedPath);\n const nextConfigTarget = projectedContext\n ? structuredClone(projectedContext.view) as unknown as Record<string, unknown>\n : structuredClone(prevConfig) as unknown as Record<string, unknown>;\n const removed = unsetAtConfigPath(nextConfigTarget, parsedPath);\n if (!removed) {\n console.error(`Config path not found: ${pathExpr}`);\n process.exit(1);\n return;\n }\n\n const nextConfig = projectedContext\n ? mergePluginConfigView(prevConfig, nextConfigTarget, projectedContext.bindings)\n : nextConfigTarget as Config;\n saveConfig(nextConfig as Config);\n await this.requestRestartForConfigDiff({\n prevConfig,\n nextConfig: nextConfig as Config,\n reason: `config.unset ${pathExpr}`,\n manualMessage: `Removed ${pathExpr}. Restart the gateway to apply.`\n });\n };\n\n private resolveReadConfigView = (config: Config, parsedPath: string[]): Config => {\n if (parsedPath[0] !== \"channels\") {\n return config;\n }\n const { bindings } = this.loadPluginChannelBindings(config);\n return resolveChannelConfigView(config, bindings);\n };\n\n private resolveProjectedChannelContext = (config: Config, parsedPath: string[]): {\n bindings: ReturnType<typeof getPluginChannelBindings>;\n view: Config;\n } | null => {\n if (parsedPath[0] !== \"channels\" || parsedPath.length < 2) {\n return null;\n }\n\n const channelId = parsedPath[1];\n const { bindings } = this.loadPluginChannelBindings(config);\n if (!bindings.some((binding) => binding.channelId === channelId)) {\n return null;\n }\n\n return {\n bindings,\n view: resolveChannelConfigView(config, bindings)\n };\n };\n\n private loadPluginChannelBindings = (config: Config): {\n bindings: ReturnType<typeof getPluginChannelBindings>;\n } => {\n const workspaceDir = getWorkspacePath(config.agents.defaults.workspace);\n const pluginRegistry = loadPluginRegistry(config, workspaceDir);\n return {\n bindings: getPluginChannelBindings(pluginRegistry)\n };\n };\n\n private requestRestartForConfigDiff = async (params: {\n prevConfig: Config;\n nextConfig: Config;\n reason: string;\n manualMessage: string;\n }): Promise<void> => {\n const { manualMessage, nextConfig, prevConfig, reason } = params;\n const changedPaths = diffConfigPaths(prevConfig, nextConfig);\n if (!changedPaths.length) {\n return;\n }\n const plan = buildReloadPlan(changedPaths);\n if (plan.restartRequired.length === 0) {\n return;\n }\n await this.deps.requestRestart({\n changedPaths: plan.restartRequired,\n mode: \"notify\",\n reason: `${reason} (${plan.restartRequired.join(\", \")})`,\n manualMessage\n });\n };\n}\n"],"mappings":"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"}
@@ -19,4 +19,5 @@ declare class CronCommands {
19
19
  }) => Promise<void>;
20
20
  }
21
21
  //#endregion
22
- export { CronCommands };
22
+ export { CronCommands };
23
+ //# sourceMappingURL=cron-commands.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-commands.service.d.ts","names":[],"sources":["../../../../../src/cli/commands/cron/services/cron-commands.service.ts"],"mappings":";;;;cAuBa,YAAA;EAAA,QAED,KAAA;cAAA,KAAA,GAAK,gBAAA;EAAA,QAGP,eAAA;EAQR,IAAA,GAAc,IAAA;IAAQ,WAAA;EAAA,MAA0B,OAAA;EAkBhD,GAAA,GAAa,IAAA,EAAM,cAAA,KAAiB,OAAA;EAyBpC,MAAA,GAAgB,KAAA,aAAgB,OAAA;EAwBhC,MAAA,GAAgB,KAAA,UAAe,IAAA;IAAQ,OAAA;EAAA,MAAsB,OAAA;EA2B7D,GAAA,GAAa,KAAA,UAAe,IAAA;IAAQ,KAAA;EAAA,MAAoB,OAAA;AAAA"}
@@ -105,3 +105,5 @@ var CronCommands = class {
105
105
  };
106
106
  //#endregion
107
107
  export { CronCommands };
108
+
109
+ //# sourceMappingURL=cron-commands.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-commands.service.js","names":[],"sources":["../../../../../src/cli/commands/cron/services/cron-commands.service.ts"],"sourcesContent":["import type { CronCreateResult } from \"@nextclaw/server\";\nimport type { CronAddOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\nimport { createCronCreateRequest, CronLocalService } from \"./cron-local.service.js\";\nimport { printCronJobs, type CronJobView } from \"@nextclaw-service/cli/commands/cron/utils/cron-job.utils.js\";\nimport { UiBridgeApiClient, resolveLocalUiApiBase } from \"@nextclaw-service/shared/services/ui/ui-bridge-api.service.js\";\n\ntype CronListApiData = {\n jobs: CronJobView[];\n};\n\ntype CronActionApiData = {\n deleted?: boolean;\n job?: CronJobView | null;\n executed?: boolean;\n};\n\nfunction readErrorMessage(error: unknown): string {\n if (error instanceof Error && error.message.trim().length > 0) {\n return error.message.trim();\n }\n return String(error ?? \"unknown error\");\n}\n\nexport class CronCommands {\n constructor(\n private local = new CronLocalService()\n ) {}\n\n private createApiClient = (): UiBridgeApiClient | null => {\n const apiBase = resolveLocalUiApiBase();\n if (!apiBase) {\n return null;\n }\n return new UiBridgeApiClient(apiBase);\n };\n\n list = async (opts: { enabledOnly?: boolean }): Promise<void> => {\n const includeDisabled = opts.enabledOnly !== true;\n const apiClient = this.createApiClient();\n if (apiClient) {\n try {\n const query = includeDisabled ? \"\" : \"?enabledOnly=1\";\n const data = await apiClient.request<CronListApiData>({\n path: `/api/cron${query}`\n });\n printCronJobs(data.jobs);\n return;\n } catch {\n void 0;\n }\n }\n printCronJobs(this.local.list(includeDisabled));\n };\n\n add = async (opts: CronAddOptions): Promise<void> => {\n const request = createCronCreateRequest(opts);\n if (!request.request) {\n console.error(request.error ?? \"Error: Failed to add job\");\n return;\n }\n const apiClient = this.createApiClient();\n if (apiClient) {\n try {\n const data = await apiClient.request<CronCreateResult>({\n path: \"/api/cron\",\n method: \"POST\",\n body: request.request\n });\n console.log(`✓ Added job '${data.job.name}' (${data.job.id})`);\n return;\n } catch (error) {\n console.error(`Error: ${readErrorMessage(error)}`);\n return;\n }\n }\n const job = this.local.addRequest(request.request);\n console.log(`✓ Added job '${job.name}' (${job.id})`);\n };\n\n remove = async (jobId: string): Promise<void> => {\n const apiClient = this.createApiClient();\n if (apiClient) {\n try {\n const data = await apiClient.request<CronActionApiData>({\n path: `/api/cron/${encodeURIComponent(jobId)}`,\n method: \"DELETE\"\n });\n if (data.deleted) {\n console.log(`✓ Removed job ${jobId}`);\n return;\n }\n } catch (error) {\n console.error(`Error: ${readErrorMessage(error)}`);\n return;\n }\n }\n if (this.local.remove(jobId)) {\n console.log(`✓ Removed job ${jobId}`);\n } else {\n console.log(`Job ${jobId} not found`);\n }\n };\n\n enable = async (jobId: string, opts: { disable?: boolean }): Promise<void> => {\n const apiClient = this.createApiClient();\n const enabled = !opts.disable;\n if (apiClient) {\n try {\n const data = await apiClient.request<CronActionApiData>({\n path: `/api/cron/${encodeURIComponent(jobId)}/enable`,\n method: \"PUT\",\n body: { enabled }\n });\n if (data.job) {\n console.log(`✓ Job '${data.job.name}' ${opts.disable ? \"disabled\" : \"enabled\"}`);\n return;\n }\n } catch (error) {\n console.error(`Error: ${readErrorMessage(error)}`);\n return;\n }\n }\n const job = this.local.enable(jobId, enabled);\n if (job) {\n console.log(`✓ Job '${job.name}' ${opts.disable ? \"disabled\" : \"enabled\"}`);\n } else {\n console.log(`Job ${jobId} not found`);\n }\n };\n\n run = async (jobId: string, opts: { force?: boolean }): Promise<void> => {\n const apiClient = this.createApiClient();\n if (apiClient) {\n try {\n const data = await apiClient.request<CronActionApiData>({\n path: `/api/cron/${encodeURIComponent(jobId)}/run`,\n method: \"POST\",\n body: { force: Boolean(opts.force) }\n });\n console.log(data.executed ? \"✓ Job executed\" : `Failed to run job ${jobId}`);\n return;\n } catch (error) {\n console.error(`Error: ${readErrorMessage(error)}`);\n return;\n }\n }\n const ok = await this.local.run(jobId, Boolean(opts.force));\n console.log(ok ? \"✓ Job executed\" : `Failed to run job ${jobId}`);\n };\n}\n"],"mappings":"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"}
@@ -22,4 +22,5 @@ declare class CronLocalService {
22
22
  readonly run: (jobId: string, force: boolean) => Promise<boolean>;
23
23
  }
24
24
  //#endregion
25
- export { CronLocalService, createCronCreateRequest };
25
+ export { CronLocalService, createCronCreateRequest };
26
+ //# sourceMappingURL=cron-local.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-local.service.d.ts","names":[],"sources":["../../../../../src/cli/commands/cron/services/cron-local.service.ts"],"mappings":";;;;;;iBAwCgB,uBAAA,CAAwB,IAAA,EAAM,cAAA;EAAmB,OAAA,GAAU,iBAAA;EAAmB,KAAA;AAAA;AAAA,cAyBjF,gBAAA;EAAA,iBAEQ,UAAA;cAAA,UAAA,GAAU,iBAAA;EAAA,SAKpB,IAAA,GAAQ,GAAA,cAAe,WAAA;EAAA,SAIvB,UAAA,GAAc,OAAA,EAAS,iBAAA,KAAoB,WAAA;EAAA,SAe3C,GAAA,GAAO,IAAA,EAAM,cAAA;IAAmB,GAAA,EAAK,WAAA;IAAoB,KAAA;EAAA;EAAA,SAQzD,MAAA,GAAU,KAAA;EAAA,SAIV,MAAA,GAAU,KAAA,UAAe,OAAA,cAAmB,WAAA;EAAA,SAI5C,GAAA,GAAa,KAAA,UAAe,KAAA,cAAiB,OAAA;AAAA"}
@@ -93,3 +93,5 @@ var CronLocalService = class {
93
93
  };
94
94
  //#endregion
95
95
  export { CronLocalService, createCronCreateRequest };
96
+
97
+ //# sourceMappingURL=cron-local.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-local.service.js","names":[],"sources":["../../../../../src/cli/commands/cron/services/cron-local.service.ts"],"sourcesContent":["import { getDataDir } from \"@nextclaw/core\";\nimport { AutomationManager } from \"@nextclaw/kernel\";\nimport type { CronCreateRequest } from \"@nextclaw/server\";\nimport type { CronAddOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\nimport type { CronJobView } from \"@nextclaw-service/cli/commands/cron/utils/cron-job.utils.js\";\nimport { resolve } from \"node:path\";\n\nfunction readTrimmed(value: string | undefined): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\nfunction toSchedule(opts: CronAddOptions): { schedule?: CronCreateRequest[\"schedule\"]; error?: string } {\n const every = readTrimmed(opts.every);\n const cron = readTrimmed(opts.cron);\n const at = readTrimmed(opts.at);\n const scheduleFlags = [every, cron, at].filter((value) => value !== undefined);\n if (scheduleFlags.length !== 1) {\n return { error: \"Error: Must specify exactly one of --every, --cron, or --at\" };\n }\n if (every) {\n const everySeconds = Number(every);\n if (!Number.isFinite(everySeconds) || everySeconds <= 0) {\n return { error: \"Error: --every must be a positive number of seconds\" };\n }\n return { schedule: { kind: \"every\", everyMs: everySeconds * 1000 } };\n }\n if (cron) {\n return { schedule: { kind: \"cron\", expr: cron } };\n }\n const atMs = Date.parse(String(at));\n if (!Number.isFinite(atMs)) {\n return { error: \"Error: --at must be a valid ISO datetime\" };\n }\n return { schedule: { kind: \"at\", atMs } };\n}\n\nexport function createCronCreateRequest(opts: CronAddOptions): { request?: CronCreateRequest; error?: string } {\n const name = readTrimmed(opts.name);\n const message = readTrimmed(opts.message);\n if (!name || !message) {\n return { error: \"Error: name and message are required\" };\n }\n const schedule = toSchedule(opts);\n if (!schedule.schedule) {\n return { error: schedule.error ?? \"Error: Must specify --every, --cron, or --at\" };\n }\n return {\n request: {\n name,\n message,\n schedule: schedule.schedule,\n agentId: readTrimmed(opts.agent),\n sessionId: readTrimmed(opts.session),\n deliver: Boolean(opts.deliver),\n channel: readTrimmed(opts.channel),\n to: readTrimmed(opts.to),\n accountId: readTrimmed(opts.account)\n }\n };\n}\n\nexport class CronLocalService {\n constructor(\n private readonly automation = new AutomationManager({\n storePath: resolve(getDataDir(), \"cron\", \"jobs.json\")\n })\n ) {}\n\n readonly list = (all: boolean): CronJobView[] => {\n return this.automation.listJobs(all) as CronJobView[];\n };\n\n readonly addRequest = (request: CronCreateRequest): CronJobView => {\n return this.automation.addJob({\n name: request.name,\n schedule: request.schedule,\n message: request.message,\n agentId: request.agentId ?? undefined,\n sessionId: request.sessionId ?? undefined,\n deliver: request.deliver === true,\n channel: request.channel ?? undefined,\n to: request.to ?? undefined,\n accountId: request.accountId ?? undefined,\n deleteAfterRun: request.deleteAfterRun === true\n }) as CronJobView;\n };\n\n readonly add = (opts: CronAddOptions): { job: CronJobView | null; error?: string } => {\n const request = createCronCreateRequest(opts);\n if (!request.request) {\n return { job: null, error: request.error };\n }\n return { job: this.addRequest(request.request) };\n };\n\n readonly remove = (jobId: string): boolean => {\n return this.automation.removeJob(jobId);\n };\n\n readonly enable = (jobId: string, enabled: boolean): CronJobView | null => {\n return (this.automation.enableJob(jobId, enabled) as CronJobView | null) ?? null;\n };\n\n readonly run = async (jobId: string, force: boolean): Promise<boolean> => {\n return this.automation.runJob(jobId, force);\n };\n}\n"],"mappings":";;;;AAOA,SAAS,YAAY,OAA+C;AAClE,KAAI,OAAO,UAAU,SACnB;AAGF,QADgB,MAAM,MAAM,IACV,KAAA;;AAGpB,SAAS,WAAW,MAAoF;CACtG,MAAM,QAAQ,YAAY,KAAK,MAAM;CACrC,MAAM,OAAO,YAAY,KAAK,KAAK;CACnC,MAAM,KAAK,YAAY,KAAK,GAAG;AAE/B,KADsB;EAAC;EAAO;EAAM;EAAG,CAAC,QAAQ,UAAU,UAAU,KAAA,EAAU,CAC5D,WAAW,EAC3B,QAAO,EAAE,OAAO,+DAA+D;AAEjF,KAAI,OAAO;EACT,MAAM,eAAe,OAAO,MAAM;AAClC,MAAI,CAAC,OAAO,SAAS,aAAa,IAAI,gBAAgB,EACpD,QAAO,EAAE,OAAO,uDAAuD;AAEzE,SAAO,EAAE,UAAU;GAAE,MAAM;GAAS,SAAS,eAAe;GAAM,EAAE;;AAEtE,KAAI,KACF,QAAO,EAAE,UAAU;EAAE,MAAM;EAAQ,MAAM;EAAM,EAAE;CAEnD,MAAM,OAAO,KAAK,MAAM,OAAO,GAAG,CAAC;AACnC,KAAI,CAAC,OAAO,SAAS,KAAK,CACxB,QAAO,EAAE,OAAO,4CAA4C;AAE9D,QAAO,EAAE,UAAU;EAAE,MAAM;EAAM;EAAM,EAAE;;AAG3C,SAAgB,wBAAwB,MAAuE;CAC7G,MAAM,OAAO,YAAY,KAAK,KAAK;CACnC,MAAM,UAAU,YAAY,KAAK,QAAQ;AACzC,KAAI,CAAC,QAAQ,CAAC,QACZ,QAAO,EAAE,OAAO,wCAAwC;CAE1D,MAAM,WAAW,WAAW,KAAK;AACjC,KAAI,CAAC,SAAS,SACZ,QAAO,EAAE,OAAO,SAAS,SAAS,gDAAgD;AAEpF,QAAO,EACL,SAAS;EACP;EACA;EACA,UAAU,SAAS;EACnB,SAAS,YAAY,KAAK,MAAM;EAChC,WAAW,YAAY,KAAK,QAAQ;EACpC,SAAS,QAAQ,KAAK,QAAQ;EAC9B,SAAS,YAAY,KAAK,QAAQ;EAClC,IAAI,YAAY,KAAK,GAAG;EACxB,WAAW,YAAY,KAAK,QAAQ;EACrC,EACF;;AAGH,IAAa,mBAAb,MAA8B;CAC5B,YACE,aAA8B,IAAI,kBAAkB,EAClD,WAAW,QAAQ,YAAY,EAAE,QAAQ,YAAY,EACtD,CAAC,EACF;AAHiB,OAAA,aAAA;;CAKnB,QAAiB,QAAgC;AAC/C,SAAO,KAAK,WAAW,SAAS,IAAI;;CAGtC,cAAuB,YAA4C;AACjE,SAAO,KAAK,WAAW,OAAO;GAC5B,MAAM,QAAQ;GACd,UAAU,QAAQ;GAClB,SAAS,QAAQ;GACjB,SAAS,QAAQ,WAAW,KAAA;GAC5B,WAAW,QAAQ,aAAa,KAAA;GAChC,SAAS,QAAQ,YAAY;GAC7B,SAAS,QAAQ,WAAW,KAAA;GAC5B,IAAI,QAAQ,MAAM,KAAA;GAClB,WAAW,QAAQ,aAAa,KAAA;GAChC,gBAAgB,QAAQ,mBAAmB;GAC5C,CAAC;;CAGJ,OAAgB,SAAsE;EACpF,MAAM,UAAU,wBAAwB,KAAK;AAC7C,MAAI,CAAC,QAAQ,QACX,QAAO;GAAE,KAAK;GAAM,OAAO,QAAQ;GAAO;AAE5C,SAAO,EAAE,KAAK,KAAK,WAAW,QAAQ,QAAQ,EAAE;;CAGlD,UAAmB,UAA2B;AAC5C,SAAO,KAAK,WAAW,UAAU,MAAM;;CAGzC,UAAmB,OAAe,YAAyC;AACzE,SAAQ,KAAK,WAAW,UAAU,OAAO,QAAQ,IAA2B;;CAG9E,MAAe,OAAO,OAAe,UAAqC;AACxE,SAAO,KAAK,WAAW,OAAO,OAAO,MAAM"}
@@ -28,4 +28,5 @@ type CronJobView = {
28
28
  declare function formatCronSchedule(schedule: CronSchedule): string;
29
29
  declare function printCronJobs(jobs: CronJobView[]): void;
30
30
  //#endregion
31
- export { CronJobView, CronPayload, CronSchedule, formatCronSchedule, printCronJobs };
31
+ export { CronJobView, CronPayload, CronSchedule, formatCronSchedule, printCronJobs };
32
+ //# sourceMappingURL=cron-job.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-job.utils.d.ts","names":[],"sources":["../../../../../src/cli/commands/cron/utils/cron-job.utils.ts"],"mappings":";KAAY,YAAA;EACN,IAAA;EAAe,OAAA;AAAA;EACf,IAAA;EAAc,IAAA;AAAA;EACd,IAAA;EAAY,IAAA;AAAA;AAAA,KAEN,WAAA;EACV,OAAA;EACA,OAAA;EACA,SAAA;EACA,OAAA;EACA,OAAA;EACA,EAAA;EACA,SAAA;AAAA;AAAA,KAGU,WAAA;EACV,EAAA;EACA,IAAA;EACA,OAAA;EACA,QAAA,EAAU,YAAA;EACV,OAAA,EAAS,WAAA;AAAA;AAAA,iBAGK,kBAAA,CAAmB,QAAA,EAAU,YAAA;AAAA,iBAU7B,aAAA,CAAc,IAAA,EAAM,WAAA"}
@@ -13,3 +13,5 @@ function printCronJobs(jobs) {
13
13
  }
14
14
  //#endregion
15
15
  export { formatCronSchedule, printCronJobs };
16
+
17
+ //# sourceMappingURL=cron-job.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-job.utils.js","names":[],"sources":["../../../../../src/cli/commands/cron/utils/cron-job.utils.ts"],"sourcesContent":["export type CronSchedule =\n | { kind: \"every\"; everyMs?: number | null }\n | { kind: \"cron\"; expr?: string | null }\n | { kind: \"at\"; atMs?: number | null };\n\nexport type CronPayload = {\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\nexport type CronJobView = {\n id: string;\n name: string;\n enabled: boolean;\n schedule: CronSchedule;\n payload: CronPayload;\n};\n\nexport function formatCronSchedule(schedule: CronSchedule): string {\n if (schedule.kind === \"every\") {\n return `every ${Math.round((schedule.everyMs ?? 0) / 1000)}s`;\n }\n if (schedule.kind === \"cron\") {\n return schedule.expr ?? \"\";\n }\n return schedule.atMs ? new Date(schedule.atMs).toISOString() : \"\";\n}\n\nexport function printCronJobs(jobs: CronJobView[]): void {\n if (!jobs.length) {\n console.log(\"No scheduled jobs.\");\n return;\n }\n for (const job of jobs) {\n console.log(`${job.id} [${job.enabled ? \"enabled\" : \"disabled\"}] ${job.name} ${formatCronSchedule(job.schedule)}`);\n }\n}\n"],"mappings":";AAuBA,SAAgB,mBAAmB,UAAgC;AACjE,KAAI,SAAS,SAAS,QACpB,QAAO,SAAS,KAAK,OAAO,SAAS,WAAW,KAAK,IAAK,CAAC;AAE7D,KAAI,SAAS,SAAS,OACpB,QAAO,SAAS,QAAQ;AAE1B,QAAO,SAAS,OAAO,IAAI,KAAK,SAAS,KAAK,CAAC,aAAa,GAAG;;AAGjE,SAAgB,cAAc,MAA2B;AACvD,KAAI,CAAC,KAAK,QAAQ;AAChB,UAAQ,IAAI,qBAAqB;AACjC;;AAEF,MAAK,MAAM,OAAO,KAChB,SAAQ,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,UAAU,YAAY,WAAW,IAAI,IAAI,KAAK,GAAG,mBAAmB,IAAI,SAAS,GAAG"}
@@ -3,6 +3,7 @@ import { DoctorCommandOptions, StatusCommandOptions } from "../../../../shared/t
3
3
  //#region src/cli/commands/diagnostics/services/diagnostics-commands.service.d.ts
4
4
  declare class DiagnosticsCommands {
5
5
  private deps;
6
+ private readonly managedServiceSupervisor;
6
7
  constructor(deps: {
7
8
  logo: string;
8
9
  });
@@ -12,6 +13,7 @@ declare class DiagnosticsCommands {
12
13
  private readonly buildDoctorChecks;
13
14
  private readonly resolveDoctorExitCode;
14
15
  private readonly collectRuntimeStatus;
16
+ private readonly resolveManagedServiceStatus;
15
17
  private readonly probeApiHealth;
16
18
  private readonly listProviderStatuses;
17
19
  private readonly collectRuntimeIssues;
@@ -19,4 +21,5 @@ declare class DiagnosticsCommands {
19
21
  private readonly checkPortAvailability;
20
22
  }
21
23
  //#endregion
22
- export { DiagnosticsCommands };
24
+ export { DiagnosticsCommands };
25
+ //# sourceMappingURL=diagnostics-commands.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics-commands.service.d.ts","names":[],"sources":["../../../../../src/cli/commands/diagnostics/services/diagnostics-commands.service.ts"],"mappings":";;;cAmBa,mBAAA;EAAA,QAGS,IAAA;EAAA,iBAFH,wBAAA;cAEG,IAAA;IAAQ,IAAA;EAAA;EAAA,SAEnB,MAAA,GAAgB,IAAA,GAAM,oBAAA,KAA4B,OAAA;EAAA,SAelD,MAAA,GAAgB,IAAA,GAAM,oBAAA,KAA4B,OAAA;EAAA,iBAsC1C,4BAAA;EAAA,iBAoBA,iBAAA;EAAA,iBAuDA,qBAAA;EAAA,iBAUA,oBAAA;EAAA,iBA0GA,2BAAA;EAAA,iBAuBA,cAAA;EAAA,iBAuBA,oBAAA;EAAA,iBAyBA,oBAAA;EAAA,iBAoEA,WAAA;EAAA,iBAeA,qBAAA;AAAA"}
@@ -2,6 +2,7 @@ import { isProcessRunning, resolveUiApiBase, resolveUiConfig } from "../../../..
2
2
  import { managedServiceStateStore } from "../../../../shared/stores/managed-service-state.store.js";
3
3
  import { resolveNextclawRemoteStatusSnapshot } from "../../../../commands/remote/utils/remote-runtime-support.utils.js";
4
4
  import "../../../../commands/remote/index.js";
5
+ import { ManagedServiceSupervisor } from "../../../../shared/services/runtime/managed-service-supervisor.service.js";
5
6
  import { printDoctorReport, printStatusReport } from "../utils/diagnostics-render.utils.js";
6
7
  import { APP_NAME, getConfigPath, getWorkspacePath, hasSecretRef, loadConfig, resolveAppLogPath } from "@nextclaw/core";
7
8
  import { existsSync, readFileSync } from "node:fs";
@@ -9,6 +10,7 @@ import { createServer } from "node:net";
9
10
  import { listBuiltinProviders } from "@nextclaw/runtime";
10
11
  //#region src/cli/commands/diagnostics/services/diagnostics-commands.service.ts
11
12
  var DiagnosticsCommands = class {
13
+ managedServiceSupervisor = new ManagedServiceSupervisor();
12
14
  constructor(deps) {
13
15
  this.deps = deps;
14
16
  }
@@ -87,8 +89,8 @@ var DiagnosticsCommands = class {
87
89
  },
88
90
  {
89
91
  name: "service-state",
90
- status: report.process.staleState ? "fail" : report.process.running ? "pass" : "warn",
91
- detail: report.process.running ? `PID ${report.process.pid}` : report.process.staleState ? "state exists but process is not running" : "service not running"
92
+ status: report.process.staleState ? "fail" : report.process.running ? report.process.lease?.missing ? "warn" : "pass" : "warn",
93
+ detail: report.process.running ? `PID ${report.process.pid}${report.process.lease?.missing ? " (missing lease heartbeat)" : ""}` : report.process.staleState ? `state is stale (${report.process.staleReason ?? "unknown"})` : "service not running"
92
94
  },
93
95
  {
94
96
  name: "service-health",
@@ -117,16 +119,10 @@ var DiagnosticsCommands = class {
117
119
  const config = loadConfig();
118
120
  const workspacePath = getWorkspacePath(config.agents.defaults.workspace);
119
121
  const serviceStatePath = managedServiceStateStore.path;
120
- const fixActions = [];
121
- let serviceState = managedServiceStateStore.read();
122
- if (params.fix && serviceState && !isProcessRunning(serviceState.pid)) {
123
- managedServiceStateStore.clear();
124
- fixActions.push("Cleared stale service state file.");
125
- serviceState = managedServiceStateStore.read();
126
- }
122
+ const { fixActions, liveness, serviceState } = this.resolveManagedServiceStatus({ fix: params.fix });
127
123
  const managedByState = Boolean(serviceState);
128
- const running = Boolean(serviceState && isProcessRunning(serviceState.pid));
129
- const staleState = Boolean(serviceState && !running);
124
+ const running = Boolean(serviceState && liveness.running);
125
+ const staleState = Boolean(serviceState && liveness.staleState);
130
126
  const configuredUi = resolveUiConfig(config, {
131
127
  enabled: true,
132
128
  host: config.ui.host,
@@ -176,8 +172,15 @@ var DiagnosticsCommands = class {
176
172
  pid: serviceState?.pid ?? null,
177
173
  running,
178
174
  staleState,
175
+ staleReason: liveness.staleReason,
179
176
  orphanSuspected,
180
- startedAt: serviceState?.startedAt ?? null
177
+ startedAt: serviceState?.startedAt ?? null,
178
+ lease: serviceState ? {
179
+ heartbeatAt: liveness.lastHeartbeatAt,
180
+ expired: liveness.leaseExpired,
181
+ missing: liveness.leaseMissing
182
+ } : null,
183
+ lastExit: serviceState?.lastExit ?? null
181
184
  },
182
185
  endpoints: {
183
186
  uiUrl: managedUiUrl,
@@ -197,6 +200,22 @@ var DiagnosticsCommands = class {
197
200
  exitCode: 0
198
201
  };
199
202
  };
203
+ resolveManagedServiceStatus = (params) => {
204
+ const fixActions = [];
205
+ let serviceState = managedServiceStateStore.read();
206
+ let liveness = this.managedServiceSupervisor.resolveStateLiveness(serviceState);
207
+ if (params.fix && serviceState && liveness.staleState && !liveness.processExists) {
208
+ managedServiceStateStore.clear();
209
+ fixActions.push("Cleared stale service state file.");
210
+ serviceState = managedServiceStateStore.read();
211
+ liveness = this.managedServiceSupervisor.resolveStateLiveness(serviceState);
212
+ } else if (params.fix && serviceState && liveness.staleState && liveness.processExists) fixActions.push("Skipped clearing stale service state because the recorded PID still exists.");
213
+ return {
214
+ fixActions,
215
+ liveness,
216
+ serviceState
217
+ };
218
+ };
200
219
  probeApiHealth = async (url, timeoutMs = 1500) => {
201
220
  const controller = new AbortController();
202
221
  const timer = setTimeout(() => controller.abort(), timeoutMs);
@@ -266,13 +285,18 @@ var DiagnosticsCommands = class {
266
285
  recommendations.push(`Run ${APP_NAME} init to create workspace templates.`);
267
286
  }
268
287
  if (staleState) {
269
- issues.push("Service state is stale (state exists but process is not running).");
270
- recommendations.push(`Run ${APP_NAME} status --fix to clean stale state.`);
288
+ const staleDetail = serviceState?.lastExit ? ` Last exit: ${serviceState.lastExit.reason}${serviceState.lastExit.signal ? ` (${serviceState.lastExit.signal})` : ""} at ${serviceState.lastExit.exitedAt}.` : "";
289
+ issues.push(`Service state is stale (${params.serviceState ? "state no longer represents a live lease" : "state missing"}).${staleDetail}`);
290
+ recommendations.push(params.serviceState && isProcessRunning(params.serviceState.pid) ? `Run ${APP_NAME} restart to replace the stale leased process.` : `Run ${APP_NAME} status --fix to clean stale state.`);
271
291
  }
272
292
  if (running && managedHealth.state !== "ok") {
273
293
  issues.push(`Managed service health check failed: ${managedHealth.detail}`);
274
294
  recommendations.push(`Check logs at ${serviceState?.logPath ?? resolveAppLogPath("service")}.`);
275
295
  }
296
+ if (running && serviceState && !serviceState.lease) {
297
+ issues.push("Managed service state is missing a lease heartbeat.");
298
+ recommendations.push(`Run ${APP_NAME} restart to refresh the managed service state contract.`);
299
+ }
276
300
  if (running && serviceState?.startupState === "degraded" && managedHealth.state !== "ok") {
277
301
  const startupHint = serviceState.startupLastProbeError ? ` (${serviceState.startupLastProbeError})` : "";
278
302
  issues.push(`Service is in degraded startup state${startupHint}.`);
@@ -317,3 +341,5 @@ var DiagnosticsCommands = class {
317
341
  };
318
342
  //#endregion
319
343
  export { DiagnosticsCommands };
344
+
345
+ //# sourceMappingURL=diagnostics-commands.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics-commands.service.js","names":["createNetServer"],"sources":["../../../../../src/cli/commands/diagnostics/services/diagnostics-commands.service.ts"],"sourcesContent":["import { createServer as createNetServer } from \"node:net\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport {\n APP_NAME,\n getConfigPath,\n getWorkspacePath,\n hasSecretRef,\n loadConfig,\n resolveAppLogPath\n} from \"@nextclaw/core\";\nimport { listBuiltinProviders } from \"@nextclaw/runtime\";\nimport { isProcessRunning, resolveUiApiBase, resolveUiConfig } from \"@nextclaw-service/shared/utils/cli.utils.js\";\nimport { managedServiceStateStore } from \"@nextclaw-service/shared/stores/managed-service-state.store.js\";\nimport type { ManagedServiceState } from \"@nextclaw-service/shared/stores/managed-service-state.store.js\";\nimport { ManagedServiceSupervisor } from \"@nextclaw-service/shared/services/runtime/managed-service-supervisor.service.js\";\nimport { printDoctorReport, printStatusReport, type DoctorCheck } from \"../utils/diagnostics-render.utils.js\";\nimport { resolveNextclawRemoteStatusSnapshot } from \"@nextclaw-service/commands/remote/index.js\";\nimport type { DoctorCommandOptions, HealthProbe, RuntimeStatusReport, StatusCommandOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\n\nexport class DiagnosticsCommands {\n private readonly managedServiceSupervisor = new ManagedServiceSupervisor();\n\n constructor(private deps: { logo: string }) {}\n\n readonly status = async (opts: StatusCommandOptions = {}): Promise<void> => {\n const report = await this.collectRuntimeStatus({\n verbose: Boolean(opts.verbose),\n fix: Boolean(opts.fix)\n });\n\n if (opts.json) {\n console.log(JSON.stringify(report, null, 2));\n process.exitCode = 0;\n return;\n }\n printStatusReport({ logo: this.deps.logo, report, verbose: Boolean(opts.verbose) });\n process.exitCode = 0;\n };\n\n readonly doctor = async (opts: DoctorCommandOptions = {}): Promise<void> => {\n const report = await this.collectRuntimeStatus({\n verbose: Boolean(opts.verbose),\n fix: Boolean(opts.fix)\n });\n\n const checkPort = await this.checkPortAvailability(this.resolveDoctorPortCheckTarget(report));\n const checks = this.buildDoctorChecks(report, checkPort);\n const exitCode = this.resolveDoctorExitCode(checks);\n\n if (opts.json) {\n console.log(\n JSON.stringify(\n {\n generatedAt: report.generatedAt,\n checks,\n status: report,\n exitCode\n },\n null,\n 2\n )\n );\n process.exitCode = exitCode;\n return;\n }\n\n printDoctorReport({\n logo: this.deps.logo,\n generatedAt: report.generatedAt,\n checks,\n recommendations: report.recommendations,\n verbose: Boolean(opts.verbose),\n logTail: report.logTail\n });\n process.exitCode = exitCode;\n };\n\n private readonly resolveDoctorPortCheckTarget = (report: RuntimeStatusReport): { host: string; port: number } => {\n const host = report.process.running && report.endpoints.uiUrl\n ? new URL(report.endpoints.uiUrl).hostname\n : \"127.0.0.1\";\n try {\n const base = report.process.running && report.endpoints.uiUrl\n ? report.endpoints.uiUrl\n : report.endpoints.configuredUiUrl;\n return {\n host,\n port: Number(new URL(base).port || 80)\n };\n } catch {\n return {\n host,\n port: 55667\n };\n }\n };\n\n private readonly buildDoctorChecks = (\n report: RuntimeStatusReport,\n checkPort: { available: boolean; detail: string }\n ): DoctorCheck[] => {\n const providerConfigured = report.providers.some((provider) => provider.configured);\n return [\n {\n name: \"config-file\",\n status: report.configExists ? \"pass\" : \"fail\",\n detail: report.configPath\n },\n {\n name: \"workspace-dir\",\n status: report.workspaceExists ? \"pass\" : \"warn\",\n detail: report.workspacePath\n },\n {\n name: \"service-state\",\n status: report.process.staleState\n ? \"fail\"\n : report.process.running\n ? report.process.lease?.missing\n ? \"warn\"\n : \"pass\"\n : \"warn\",\n detail: report.process.running\n ? `PID ${report.process.pid}${report.process.lease?.missing ? \" (missing lease heartbeat)\" : \"\"}`\n : report.process.staleState\n ? `state is stale (${report.process.staleReason ?? \"unknown\"})`\n : \"service not running\"\n },\n {\n name: \"service-health\",\n status: report.process.running\n ? report.health.managed.state === \"ok\"\n ? \"pass\"\n : \"fail\"\n : \"warn\",\n detail: report.process.running\n ? `${report.health.managed.state}: ${report.health.managed.detail}`\n : `${report.health.configured.state}: ${report.health.configured.detail}`\n },\n {\n name: \"ui-port-availability\",\n status: report.process.running || checkPort.available ? \"pass\" : \"fail\",\n detail: report.process.running ? \"managed by running service\" : checkPort.available ? \"available\" : checkPort.detail\n },\n {\n name: \"provider-config\",\n status: providerConfigured ? \"pass\" : \"warn\",\n detail: providerConfigured ? \"at least one provider configured\" : \"no provider api key configured\"\n }\n ] as const;\n };\n\n private readonly resolveDoctorExitCode = (checks: DoctorCheck[]): number => {\n if (checks.some((check) => check.status === \"fail\")) {\n return 1;\n }\n if (checks.some((check) => check.status === \"warn\")) {\n return 1;\n }\n return 0;\n };\n\n private readonly collectRuntimeStatus = async (params: { verbose: boolean; fix: boolean }): Promise<RuntimeStatusReport> => {\n const configPath = getConfigPath();\n const config = loadConfig();\n const workspacePath = getWorkspacePath(config.agents.defaults.workspace);\n const serviceStatePath = managedServiceStateStore.path;\n\n const serviceStatus = this.resolveManagedServiceStatus({ fix: params.fix });\n const { fixActions, liveness, serviceState } = serviceStatus;\n\n const managedByState = Boolean(serviceState);\n const running = Boolean(serviceState && liveness.running);\n const staleState = Boolean(serviceState && liveness.staleState);\n\n const configuredUi = resolveUiConfig(config, { enabled: true, host: config.ui.host, port: config.ui.port });\n const configuredUiUrl = resolveUiApiBase(configuredUi.host, configuredUi.port);\n const configuredApiUrl = `${configuredUiUrl}/api`;\n\n const managedUiUrl = serviceState?.uiUrl ?? null;\n const managedApiUrl = serviceState?.apiUrl ?? null;\n\n const managedHealth: HealthProbe = running && managedApiUrl\n ? await this.probeApiHealth(`${managedApiUrl}/health`)\n : { state: \"unreachable\", detail: \"service not running\" };\n\n const configuredHealth = await this.probeApiHealth(`${configuredApiUrl}/health`, 900);\n const remote = resolveNextclawRemoteStatusSnapshot(config);\n const orphanSuspected = !running && configuredHealth.state === \"ok\";\n const providers = this.listProviderStatuses(config);\n\n const issues: string[] = [];\n const recommendations: string[] = [];\n\n this.collectRuntimeIssues({\n configPath,\n workspacePath,\n staleState,\n running,\n managedHealth,\n serviceState,\n orphanSuspected,\n providers,\n issues,\n recommendations\n });\n\n const logTail = params.verbose\n ? this.readLogTail((serviceState?.logPath ?? resolveAppLogPath(\"service\")), 25)\n : [];\n\n const level: RuntimeStatusReport[\"level\"] = running\n ? managedHealth.state === \"ok\"\n ? issues.length > 0\n ? \"degraded\"\n : \"healthy\"\n : \"degraded\"\n : \"stopped\";\n\n const exitCode: RuntimeStatusReport[\"exitCode\"] = 0;\n\n return {\n generatedAt: new Date().toISOString(),\n configPath,\n configExists: existsSync(configPath),\n workspacePath,\n workspaceExists: existsSync(workspacePath),\n model: config.agents.defaults.model,\n providers,\n serviceStatePath,\n serviceStateExists: existsSync(serviceStatePath),\n fixActions,\n process: {\n managedByState,\n pid: serviceState?.pid ?? null,\n running,\n staleState,\n staleReason: liveness.staleReason,\n orphanSuspected,\n startedAt: serviceState?.startedAt ?? null,\n lease: serviceState\n ? {\n heartbeatAt: liveness.lastHeartbeatAt,\n expired: liveness.leaseExpired,\n missing: liveness.leaseMissing\n }\n : null,\n lastExit: serviceState?.lastExit ?? null\n },\n endpoints: {\n uiUrl: managedUiUrl,\n apiUrl: managedApiUrl,\n configuredUiUrl,\n configuredApiUrl\n },\n health: {\n managed: managedHealth,\n configured: configuredHealth\n },\n issues,\n recommendations,\n logTail,\n remote,\n level,\n exitCode\n };\n };\n\n private readonly resolveManagedServiceStatus = (params: { fix: boolean }): {\n fixActions: string[];\n liveness: ReturnType<ManagedServiceSupervisor[\"resolveStateLiveness\"]>;\n serviceState: ManagedServiceState | null;\n } => {\n const fixActions: string[] = [];\n let serviceState = managedServiceStateStore.read();\n let liveness = this.managedServiceSupervisor.resolveStateLiveness(serviceState);\n if (params.fix && serviceState && liveness.staleState && !liveness.processExists) {\n managedServiceStateStore.clear();\n fixActions.push(\"Cleared stale service state file.\");\n serviceState = managedServiceStateStore.read();\n liveness = this.managedServiceSupervisor.resolveStateLiveness(serviceState);\n } else if (params.fix && serviceState && liveness.staleState && liveness.processExists) {\n fixActions.push(\"Skipped clearing stale service state because the recorded PID still exists.\");\n }\n return {\n fixActions,\n liveness,\n serviceState\n };\n };\n\n private readonly probeApiHealth = async (url: string, timeoutMs = 1500): Promise<HealthProbe> => {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const response = await fetch(url, {\n method: \"GET\",\n signal: controller.signal\n });\n if (!response.ok) {\n return { state: \"invalid-response\", detail: `HTTP ${response.status}` };\n }\n const payload = (await response.json()) as { ok?: boolean; data?: { status?: string } };\n if (payload?.ok === true && payload?.data?.status === \"ok\") {\n return { state: \"ok\", detail: \"health endpoint returned ok\", payload };\n }\n return { state: \"invalid-response\", detail: \"unexpected health payload\", payload };\n } catch (error) {\n return { state: \"unreachable\", detail: String(error) };\n } finally {\n clearTimeout(timer);\n }\n };\n\n private readonly listProviderStatuses = (config: ReturnType<typeof loadConfig>): RuntimeStatusReport[\"providers\"] => {\n return listBuiltinProviders().map((spec) => {\n const provider = (config.providers as Record<string, { enabled?: boolean; apiKey?: string; apiBase?: string } | undefined>)[spec.name];\n const apiKeyRefSet = hasSecretRef(config, `providers.${spec.name}.apiKey`);\n if (!provider) {\n return { name: spec.displayName ?? spec.name, configured: false, detail: \"missing config\" };\n }\n if (provider.enabled === false) {\n return { name: spec.displayName ?? spec.name, configured: false, detail: \"disabled\" };\n }\n if (spec.isLocal) {\n return {\n name: spec.displayName ?? spec.name,\n configured: Boolean(provider.apiBase),\n detail: provider.apiBase ? provider.apiBase : \"apiBase not set\"\n };\n }\n return {\n name: spec.displayName ?? spec.name,\n configured: Boolean(provider.apiKey) || apiKeyRefSet,\n detail: provider.apiKey ? \"apiKey set\" : apiKeyRefSet ? \"apiKey ref set\" : \"apiKey not set\"\n };\n });\n };\n\n private readonly collectRuntimeIssues = (params: {\n configPath: string;\n workspacePath: string;\n staleState: boolean;\n running: boolean;\n managedHealth: HealthProbe;\n serviceState: ManagedServiceState | null;\n orphanSuspected: boolean;\n providers: RuntimeStatusReport[\"providers\"];\n issues: string[];\n recommendations: string[];\n }): void => {\n const {\n configPath,\n issues,\n managedHealth,\n orphanSuspected,\n providers,\n recommendations,\n running,\n serviceState,\n staleState,\n workspacePath\n } = params;\n if (!existsSync(configPath)) {\n issues.push(\"Config file is missing.\");\n recommendations.push(`Run ${APP_NAME} init to create config files.`);\n }\n if (!existsSync(workspacePath)) {\n issues.push(\"Workspace directory does not exist.\");\n recommendations.push(`Run ${APP_NAME} init to create workspace templates.`);\n }\n if (staleState) {\n const staleDetail = serviceState?.lastExit\n ? ` Last exit: ${serviceState.lastExit.reason}${serviceState.lastExit.signal ? ` (${serviceState.lastExit.signal})` : \"\"} at ${serviceState.lastExit.exitedAt}.`\n : \"\";\n issues.push(`Service state is stale (${params.serviceState ? \"state no longer represents a live lease\" : \"state missing\"}).${staleDetail}`);\n recommendations.push(\n params.serviceState && isProcessRunning(params.serviceState.pid)\n ? `Run ${APP_NAME} restart to replace the stale leased process.`\n : `Run ${APP_NAME} status --fix to clean stale state.`\n );\n }\n if (running && managedHealth.state !== \"ok\") {\n issues.push(`Managed service health check failed: ${managedHealth.detail}`);\n recommendations.push(`Check logs at ${serviceState?.logPath ?? resolveAppLogPath(\"service\")}.`);\n }\n if (running && serviceState && !serviceState.lease) {\n issues.push(\"Managed service state is missing a lease heartbeat.\");\n recommendations.push(`Run ${APP_NAME} restart to refresh the managed service state contract.`);\n }\n if (running && serviceState?.startupState === \"degraded\" && managedHealth.state !== \"ok\") {\n const startupHint = serviceState.startupLastProbeError ? ` (${serviceState.startupLastProbeError})` : \"\";\n issues.push(`Service is in degraded startup state${startupHint}.`);\n recommendations.push(`Wait and re-check ${APP_NAME} status; if it does not recover, inspect logs and restart.`);\n }\n if (!running) {\n recommendations.push(`Run ${APP_NAME} start to launch the service.`);\n }\n if (orphanSuspected) {\n issues.push(\"A service appears healthy on configured API endpoint, but state is missing/stale.\");\n recommendations.push(\"Another process may be occupying the UI port; stop it or use --ui-port with a free port.\");\n }\n if (!providers.some((provider) => provider.configured)) {\n recommendations.push(\"Configure at least one provider API key in UI or config before expecting agent replies.\");\n }\n };\n\n private readonly readLogTail = (path: string, maxLines = 25): string[] => {\n if (!existsSync(path)) {\n return [];\n }\n try {\n const lines = readFileSync(path, \"utf-8\").split(/\\r?\\n/).filter(Boolean);\n if (lines.length <= maxLines) {\n return lines;\n }\n return lines.slice(lines.length - maxLines);\n } catch {\n return [];\n }\n };\n\n private readonly checkPortAvailability = async (params: { host: string; port: number }): Promise<{ available: boolean; detail: string }> => {\n return await new Promise((resolve) => {\n const server = createNetServer();\n server.once(\"error\", (error) => {\n resolve({\n available: false,\n detail: `bind failed on ${params.host}:${params.port} (${String(error)})`\n });\n });\n server.listen(params.port, params.host, () => {\n server.close(() => {\n resolve({\n available: true,\n detail: `bind ok on ${params.host}:${params.port}`\n });\n });\n });\n });\n };\n}\n"],"mappings":"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"}
@@ -20,4 +20,5 @@ declare function printDoctorReport(params: {
20
20
  logTail: string[];
21
21
  }): void;
22
22
  //#endregion
23
- export { DoctorCheck, printDoctorReport, printStatusReport };
23
+ export { DoctorCheck, printDoctorReport, printStatusReport };
24
+ //# sourceMappingURL=diagnostics-render.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics-render.utils.d.ts","names":[],"sources":["../../../../../src/cli/commands/diagnostics/utils/diagnostics-render.utils.ts"],"mappings":";;;KAGY,WAAA;EACV,IAAA;EACA,MAAA;EACA,MAAA;AAAA;AAAA,iBAGc,iBAAA,CAAkB,MAAA;EAChC,IAAA;EACA,MAAA,EAAQ,mBAAA;EACR,OAAA;AAAA;AAAA,iBA0Ec,iBAAA,CAAkB,MAAA;EAChC,IAAA;EACA,WAAA;EACA,MAAA,EAAQ,WAAA;EACR,eAAA;EACA,OAAA;EACA,OAAA;AAAA"}
@@ -23,6 +23,12 @@ function printProcessSection(report) {
23
23
  console.log(`Process: ${processLabel}`);
24
24
  console.log(`State file: ${report.serviceStatePath} ${report.serviceStateExists ? "✓" : "✗"}`);
25
25
  if (report.process.startedAt) console.log(`Started: ${report.process.startedAt}`);
26
+ if (report.process.lease?.heartbeatAt) console.log(`Last heartbeat: ${report.process.lease.heartbeatAt}${report.process.lease.expired ? " (expired)" : ""}`);
27
+ if (report.process.staleReason) console.log(`Stale reason: ${report.process.staleReason}`);
28
+ if (report.process.lastExit) {
29
+ const exit = report.process.lastExit;
30
+ console.log(`Last exit: ${exit.reason}${exit.signal ? ` ${exit.signal}` : ""}${typeof exit.code === "number" ? ` code=${exit.code}` : ""} at ${exit.exitedAt}`);
31
+ }
26
32
  console.log(`Managed health: ${report.health.managed.state} (${report.health.managed.detail})`);
27
33
  if (!report.process.running) console.log(`Configured health: ${report.health.configured.state} (${report.health.configured.detail})`);
28
34
  }
@@ -64,3 +70,5 @@ function printTextList(title, items) {
64
70
  }
65
71
  //#endregion
66
72
  export { printDoctorReport, printStatusReport };
73
+
74
+ //# sourceMappingURL=diagnostics-render.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics-render.utils.js","names":[],"sources":["../../../../../src/cli/commands/diagnostics/utils/diagnostics-render.utils.ts"],"sourcesContent":["import { APP_NAME } from \"@nextclaw/core\";\nimport type { RuntimeStatusReport } from \"@nextclaw-service/shared/types/cli.types.js\";\n\nexport type DoctorCheck = {\n name: string;\n status: \"pass\" | \"warn\" | \"fail\";\n detail: string;\n};\n\nexport function printStatusReport(params: {\n logo: string;\n report: RuntimeStatusReport;\n verbose: boolean;\n}): void {\n const { logo, report, verbose } = params;\n console.log(`${logo} ${APP_NAME} Status`);\n console.log(`Level: ${report.level}`);\n console.log(`Generated: ${report.generatedAt}`);\n console.log(\"\");\n printProcessSection(report);\n printEndpointSection(report);\n printProviderSection(report);\n printTextList(\"Fix actions\", report.fixActions);\n printTextList(\"Issues\", report.issues);\n printTextList(\"Recommendations\", report.recommendations);\n\n if (verbose && report.logTail.length > 0) {\n console.log(\"\");\n console.log(\"Recent logs:\");\n for (const line of report.logTail) {\n console.log(line);\n }\n }\n}\n\nfunction printProcessSection(report: RuntimeStatusReport): void {\n const processLabel = report.process.running\n ? `running (PID ${report.process.pid})`\n : report.process.staleState\n ? \"stale-state\"\n : \"stopped\";\n console.log(`Process: ${processLabel}`);\n console.log(`State file: ${report.serviceStatePath} ${report.serviceStateExists ? \"✓\" : \"✗\"}`);\n if (report.process.startedAt) {\n console.log(`Started: ${report.process.startedAt}`);\n }\n if (report.process.lease?.heartbeatAt) {\n console.log(`Last heartbeat: ${report.process.lease.heartbeatAt}${report.process.lease.expired ? \" (expired)\" : \"\"}`);\n }\n if (report.process.staleReason) {\n console.log(`Stale reason: ${report.process.staleReason}`);\n }\n if (report.process.lastExit) {\n const exit = report.process.lastExit;\n console.log(`Last exit: ${exit.reason}${exit.signal ? ` ${exit.signal}` : \"\"}${typeof exit.code === \"number\" ? ` code=${exit.code}` : \"\"} at ${exit.exitedAt}`);\n }\n console.log(`Managed health: ${report.health.managed.state} (${report.health.managed.detail})`);\n if (!report.process.running) {\n console.log(`Configured health: ${report.health.configured.state} (${report.health.configured.detail})`);\n }\n}\n\nfunction printEndpointSection(report: RuntimeStatusReport): void {\n console.log(`UI: ${report.endpoints.uiUrl ?? report.endpoints.configuredUiUrl}`);\n console.log(`API: ${report.endpoints.apiUrl ?? report.endpoints.configuredApiUrl}`);\n console.log(`Remote: ${report.remote.configuredEnabled ? \"enabled\" : \"disabled\"}${report.remote.runtime ? ` (${report.remote.runtime.state})` : \"\"}`);\n if (report.remote.runtime?.deviceName) {\n console.log(`Remote device: ${report.remote.runtime.deviceName}`);\n }\n if (report.remote.runtime?.platformBase) {\n console.log(`Remote platform: ${report.remote.runtime.platformBase}`);\n }\n if (report.remote.runtime?.lastError) {\n console.log(`Remote error: ${report.remote.runtime.lastError}`);\n }\n console.log(`Config: ${report.configPath} ${report.configExists ? \"✓\" : \"✗\"}`);\n console.log(`Workspace: ${report.workspacePath} ${report.workspaceExists ? \"✓\" : \"✗\"}`);\n console.log(`Model: ${report.model}`);\n}\n\nfunction printProviderSection(report: RuntimeStatusReport): void {\n for (const provider of report.providers) {\n console.log(`${provider.name}: ${provider.configured ? \"✓\" : \"not set\"}${provider.detail ? ` (${provider.detail})` : \"\"}`);\n }\n}\n\nexport function printDoctorReport(params: {\n logo: string;\n generatedAt: string;\n checks: DoctorCheck[];\n recommendations: string[];\n verbose: boolean;\n logTail: string[];\n}): void {\n const { checks, generatedAt, logTail, logo, recommendations, verbose } = params;\n console.log(`${logo} ${APP_NAME} Doctor`);\n console.log(`Generated: ${generatedAt}`);\n console.log(\"\");\n\n for (const check of checks) {\n const icon = check.status === \"pass\" ? \"✓\" : check.status === \"warn\" ? \"!\" : \"✗\";\n console.log(`${icon} ${check.name}: ${check.detail}`);\n }\n\n printTextList(\"Recommendations\", recommendations);\n\n if (verbose && logTail.length > 0) {\n console.log(\"\");\n console.log(\"Recent logs:\");\n for (const line of logTail) {\n console.log(line);\n }\n }\n}\n\nfunction printTextList(title: string, items: string[]): void {\n if (items.length === 0) {\n return;\n }\n console.log(\"\");\n console.log(`${title}:`);\n for (const item of items) {\n console.log(`- ${item}`);\n }\n}\n"],"mappings":"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"}
@@ -11,4 +11,5 @@ declare class GatewayCommands {
11
11
  run: (opts: GatewayCommandOptions) => Promise<void>;
12
12
  }
13
13
  //#endregion
14
- export { GatewayCommands };
14
+ export { GatewayCommands };
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/cli/commands/gateway/index.ts"],"mappings":";;;;cAIa,eAAA;EAAA,iBAEQ,IAAA;cAAA,IAAA;IACf,qBAAA,EAAuB,qBAAA;IACvB,gBAAA;EAAA;EAIJ,GAAA,GAAa,IAAA,EAAM,qBAAA,KAAwB,OAAA;AAAA"}
@@ -13,3 +13,5 @@ var GatewayCommands = class {
13
13
  };
14
14
  //#endregion
15
15
  export { GatewayCommands };
16
+
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/cli/commands/gateway/index.ts"],"sourcesContent":["import type { Config } from \"@nextclaw/core\";\nimport type { GatewayCommandOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\nimport type { RuntimeCommandService } from \"@nextclaw-service/shared/services/runtime/runtime-command.service.js\";\n\nexport class GatewayCommands {\n constructor(\n private readonly deps: {\n runtimeCommandService: RuntimeCommandService;\n forcedPublicHost: string;\n }\n ) {}\n\n run = async (opts: GatewayCommandOptions): Promise<void> => {\n const uiOverrides: Partial<Config[\"ui\"]> = {\n host: this.deps.forcedPublicHost,\n };\n if (opts.ui) {\n uiOverrides.enabled = true;\n }\n if (opts.uiPort) {\n uiOverrides.port = Number(opts.uiPort);\n }\n if (opts.uiOpen) {\n uiOverrides.open = true;\n }\n await this.deps.runtimeCommandService.startGateway({ uiOverrides });\n };\n}\n"],"mappings":";AAIA,IAAa,kBAAb,MAA6B;CAC3B,YACE,MAIA;AAJiB,OAAA,OAAA;;CAMnB,MAAM,OAAO,SAA+C;EAC1D,MAAM,cAAqC,EACzC,MAAM,KAAK,KAAK,kBACjB;AACD,MAAI,KAAK,GACP,aAAY,UAAU;AAExB,MAAI,KAAK,OACP,aAAY,OAAO,OAAO,KAAK,OAAO;AAExC,MAAI,KAAK,OACP,aAAY,OAAO;AAErB,QAAM,KAAK,KAAK,sBAAsB,aAAa,EAAE,aAAa,CAAC"}
@@ -9,4 +9,5 @@ declare class LogsCommands {
9
9
  tail: (opts?: LogsTailCommandOptions) => void;
10
10
  }
11
11
  //#endregion
12
- export { LogsCommands };
12
+ export { LogsCommands };
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/cli/commands/logs/index.ts"],"mappings":";;;;cAGa,YAAA;EAAA,iBACkB,OAAA;cAAA,OAAA,GAAS,cAAA;EAEtC,IAAA;EAUA,IAAA,GAAQ,IAAA,GAAM,sBAAA;AAAA"}
@@ -27,3 +27,5 @@ var LogsCommands = class {
27
27
  };
28
28
  //#endregion
29
29
  export { LogsCommands };
30
+
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/cli/commands/logs/index.ts"],"sourcesContent":["import { getLoggingRuntime, type AppLogKind, type LoggingRuntime } from \"@nextclaw/core\";\nimport type { LogsTailCommandOptions } from \"@nextclaw-service/shared/types/cli.types.js\";\n\nexport class LogsCommands {\n constructor(private readonly runtime: LoggingRuntime = getLoggingRuntime()) {}\n\n path = (): void => {\n const paths = this.runtime.getPaths();\n console.log([\n `Logs directory: ${paths.logsDir}`,\n `Service log: ${paths.serviceLogPath}`,\n `Crash log: ${paths.crashLogPath}`,\n `Archive: ${paths.archiveDir}`,\n ].join(\"\\n\"));\n };\n\n tail = (opts: LogsTailCommandOptions = {}): void => {\n const kind: AppLogKind = opts.crash ? \"crash\" : \"service\";\n const rawLines = Number(opts.lines);\n const lines = Number.isFinite(rawLines) && rawLines > 0 ? Math.floor(rawLines) : 40;\n const output = this.runtime.tail(kind, lines);\n if (output.length === 0) {\n console.log(`No log entries found in ${this.runtime.resolveLogPath(kind)}.`);\n return;\n }\n console.log(output.join(\"\\n\"));\n };\n}\n"],"mappings":";;AAGA,IAAa,eAAb,MAA0B;CACxB,YAAY,UAA2C,mBAAmB,EAAE;AAA/C,OAAA,UAAA;;CAE7B,aAAmB;EACjB,MAAM,QAAQ,KAAK,QAAQ,UAAU;AACrC,UAAQ,IAAI;GACV,mBAAmB,MAAM;GACzB,gBAAgB,MAAM;GACtB,cAAc,MAAM;GACpB,YAAY,MAAM;GACnB,CAAC,KAAK,KAAK,CAAC;;CAGf,QAAQ,OAA+B,EAAE,KAAW;EAClD,MAAM,OAAmB,KAAK,QAAQ,UAAU;EAChD,MAAM,WAAW,OAAO,KAAK,MAAM;EACnC,MAAM,QAAQ,OAAO,SAAS,SAAS,IAAI,WAAW,IAAI,KAAK,MAAM,SAAS,GAAG;EACjF,MAAM,SAAS,KAAK,QAAQ,KAAK,MAAM,MAAM;AAC7C,MAAI,OAAO,WAAW,GAAG;AACvB,WAAQ,IAAI,2BAA2B,KAAK,QAAQ,eAAe,KAAK,CAAC,GAAG;AAC5E;;AAEF,UAAQ,IAAI,OAAO,KAAK,KAAK,CAAC"}