@xopcai/xopc 0.0.82 → 0.0.84

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 (740) hide show
  1. package/README.md +3 -1
  2. package/README.zh-CN.md +3 -1
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/feishu/src/outbound/media-load.js +2 -3
  5. package/dist/extensions/feishu/src/outbound/media-load.js.map +1 -1
  6. package/dist/extensions/feishu/src/schema/config-schema.d.ts +6 -6
  7. package/dist/extensions/telegram/src/config-schema.d.ts +6 -6
  8. package/dist/extensions/telegram/src/plugin.d.ts +1 -1
  9. package/dist/extensions/telegram/src/plugin.js +1 -1
  10. package/dist/extensions/telegram/src/routing-integration.js +2 -2
  11. package/dist/extensions/telegram/xopc.extension.json +1 -1
  12. package/dist/extensions/weixin/src/api/api.js +3 -3
  13. package/dist/extensions/weixin/src/auth/accounts.js +1 -1
  14. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  15. package/dist/extensions/weixin/src/config-schema.d.ts +3 -3
  16. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  17. package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
  18. package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
  19. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  20. package/dist/extensions/weixin/src/plugin.js +1 -1
  21. package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
  22. package/dist/gateway/static/root/assets/agents-tR-nNP04.js +222 -0
  23. package/dist/gateway/static/root/assets/{apps-page-pJ27dsqn.js → apps-page-BDw6SP-d.js} +1 -1
  24. package/dist/gateway/static/root/assets/channels-settings-DEFd-jj1.js +1 -0
  25. package/dist/gateway/static/root/assets/{channels-status-swr-D1KYmOmi.js → channels-status-swr-DI5FHdGe.js} +1 -1
  26. package/dist/gateway/static/root/assets/{cron-api-Y2wfSJVI.js → cron-api-BSqY8LwW.js} +1 -1
  27. package/dist/gateway/static/root/assets/{cron-page-B97KU_RG.js → cron-page-D7lVDjcR.js} +1 -1
  28. package/dist/gateway/static/root/assets/{dist-CboA_Css.js → dist-CqNMNhJM.js} +1 -1
  29. package/dist/gateway/static/root/assets/{extension-debug-page-DN_zNmpo.js → extension-debug-page-gf2L0kY_.js} +1 -1
  30. package/dist/gateway/static/root/assets/{extension-page-BUXtOzv5.js → extension-page-CQo2Xsmg.js} +1 -1
  31. package/dist/gateway/static/root/assets/{extension-settings-page-C2dX4KCW.js → extension-settings-page-CZf0WoZg.js} +1 -1
  32. package/dist/gateway/static/root/assets/fetch-2iRFmd3n.js +3 -0
  33. package/dist/gateway/static/root/assets/{field-primitives-B9rOLqdm.js → field-primitives-DTtlp-l8.js} +1 -1
  34. package/dist/gateway/static/root/assets/{heartbeat-config-api-DvfiRVrc.js → heartbeat-config-api-B0drdQEJ.js} +1 -1
  35. package/dist/gateway/static/root/assets/{index-DQuaMye9.js → index-0Gt3TG4j.js} +94 -85
  36. package/dist/gateway/static/root/assets/index-BuFldCsB.css +1 -0
  37. package/dist/gateway/static/root/assets/{logs-page-BQuBpHcc.js → logs-page-DMuORLfC.js} +1 -1
  38. package/dist/gateway/static/root/assets/sessions-page-_UO8g6NN.js +1 -0
  39. package/dist/gateway/static/root/assets/{settings-form-section-2Yu-FASs.js → settings-form-section-DkmHkknc.js} +1 -1
  40. package/dist/gateway/static/root/assets/settings-page-Cz8FoW_A.js +3 -0
  41. package/dist/gateway/static/root/assets/skills-page-HrUOxF7H.js +2 -0
  42. package/dist/gateway/static/root/assets/{theme-store-DnwYutiX.js → theme-store-D01dJt95.js} +1 -1
  43. package/dist/gateway/static/root/assets/{utils-D2Gn2qod.js → utils-BFwcR6pL.js} +1 -1
  44. package/dist/gateway/static/root/assets/voice-api-key-field-JF8-aqc5.js +1 -0
  45. package/dist/gateway/static/root/index.html +4 -4
  46. package/dist/package.js +1 -1
  47. package/dist/src/agent/agent-instance-gateway.d.ts +50 -0
  48. package/dist/src/agent/agent-instance-gateway.js +1 -0
  49. package/dist/src/agent/agent-manager.d.ts +20 -14
  50. package/dist/src/agent/agent-manager.js +74 -186
  51. package/dist/src/agent/agent-manager.js.map +1 -1
  52. package/dist/src/agent/background-review/coordinator.d.ts +61 -0
  53. package/dist/src/agent/background-review/coordinator.js +120 -0
  54. package/dist/src/agent/background-review/coordinator.js.map +1 -0
  55. package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
  56. package/dist/src/agent/child-agent-factory.d.ts +14 -0
  57. package/dist/src/agent/child-agent-factory.js +2 -8
  58. package/dist/src/agent/child-agent-factory.js.map +1 -1
  59. package/dist/src/agent/context/workspace-seed.js +3 -3
  60. package/dist/src/agent/embedded/index.d.ts +1 -2
  61. package/dist/src/agent/embedded/index.js +2 -3
  62. package/dist/src/agent/embedded/run-for-session.d.ts +2 -2
  63. package/dist/src/agent/embedded/run-for-session.js.map +1 -1
  64. package/dist/src/agent/embedded/runs.d.ts +32 -0
  65. package/dist/src/agent/embedded/runs.js +79 -19
  66. package/dist/src/agent/embedded/runs.js.map +1 -1
  67. package/dist/src/agent/embedded/session-manager-cache.d.ts +14 -0
  68. package/dist/src/agent/embedded/session-manager-cache.js +32 -11
  69. package/dist/src/agent/embedded/session-manager-cache.js.map +1 -1
  70. package/dist/src/agent/embedded/session-runner.d.ts +37 -7
  71. package/dist/src/agent/embedded/session-runner.js +184 -153
  72. package/dist/src/agent/embedded/session-runner.js.map +1 -1
  73. package/dist/src/agent/embedded/session-tool-result-guard.d.ts +57 -9
  74. package/dist/src/agent/embedded/session-tool-result-guard.js +159 -67
  75. package/dist/src/agent/embedded/session-tool-result-guard.js.map +1 -1
  76. package/dist/src/agent/goals/goal-run-store.js +4 -4
  77. package/dist/src/agent/goals/persistent-goal-service.d.ts +84 -0
  78. package/dist/src/agent/goals/persistent-goal-service.js +139 -0
  79. package/dist/src/agent/goals/persistent-goal-service.js.map +1 -0
  80. package/dist/src/agent/goals/post-turn.js +2 -2
  81. package/dist/src/agent/goals/state.d.ts +1 -1
  82. package/dist/src/agent/goals/state.js.map +1 -1
  83. package/dist/src/agent/image/load-image-media.js +1 -1
  84. package/dist/src/agent/inbound/inbound-loop.d.ts +77 -0
  85. package/dist/src/agent/inbound/inbound-loop.js +226 -0
  86. package/dist/src/agent/inbound/inbound-loop.js.map +1 -0
  87. package/dist/src/agent/inbound/turn-dispatcher.d.ts +80 -0
  88. package/dist/src/agent/inbound/turn-dispatcher.js +138 -0
  89. package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -0
  90. package/dist/src/agent/ipc/bus.js +1 -1
  91. package/dist/src/agent/ipc/inbox.js +2 -2
  92. package/dist/src/agent/ipc/socket.js +1 -1
  93. package/dist/src/agent/lifecycle/handlers/compaction.d.ts +1 -1
  94. package/dist/src/agent/lifecycle/handlers/compaction.js.map +1 -1
  95. package/dist/src/agent/lifecycle/manager.d.ts +1 -1
  96. package/dist/src/agent/lifecycle/manager.js.map +1 -1
  97. package/dist/src/agent/lifecycle/types.d.ts +1 -1
  98. package/dist/src/agent/memory/builtin-memory-store.js +1 -1
  99. package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
  100. package/dist/src/agent/memory/dreaming/events.js +1 -1
  101. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  102. package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
  103. package/dist/src/agent/memory/dreaming/preview.js +1 -1
  104. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  105. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  106. package/dist/src/agent/memory/dreaming/utils.d.ts +12 -2
  107. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  108. package/dist/src/agent/memory/dreaming/utils.js.map +1 -1
  109. package/dist/src/agent/memory/index.js +3 -3
  110. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  111. package/dist/src/agent/memory/prefetch-coordinator.d.ts +37 -0
  112. package/dist/src/agent/memory/prefetch-coordinator.js +45 -0
  113. package/dist/src/agent/memory/prefetch-coordinator.js.map +1 -0
  114. package/dist/src/agent/messaging/command-handler.d.ts +5 -1
  115. package/dist/src/agent/messaging/command-handler.js +24 -96
  116. package/dist/src/agent/messaging/command-handler.js.map +1 -1
  117. package/dist/src/agent/messaging/index.d.ts +1 -0
  118. package/dist/src/agent/messaging/index.js +2 -1
  119. package/dist/src/agent/messaging/message-router.d.ts +1 -1
  120. package/dist/src/agent/messaging/message-router.js.map +1 -1
  121. package/dist/src/agent/messaging/outbound-coordinator.d.ts +82 -0
  122. package/dist/src/agent/messaging/outbound-coordinator.js +123 -0
  123. package/dist/src/agent/messaging/outbound-coordinator.js.map +1 -0
  124. package/dist/src/agent/models/manager.js +1 -1
  125. package/dist/src/agent/orchestration/agent-event-handler.d.ts +36 -33
  126. package/dist/src/agent/orchestration/agent-event-handler.js +212 -174
  127. package/dist/src/agent/orchestration/agent-event-handler.js.map +1 -1
  128. package/dist/src/agent/orchestration/agent-orchestrator.d.ts +4 -4
  129. package/dist/src/agent/orchestration/agent-orchestrator.js +4 -8
  130. package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
  131. package/dist/src/agent/orchestration/index.d.ts +1 -1
  132. package/dist/src/agent/orchestration/index.js +2 -2
  133. package/dist/src/agent/prompt/service-prompt-builder.js +4 -4
  134. package/dist/src/agent/reply/post-compaction-context.js +1 -1
  135. package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
  136. package/dist/src/agent/sandbox/path-policy.js +1 -1
  137. package/dist/src/agent/service/async-queue.d.ts +20 -0
  138. package/dist/src/agent/service/async-queue.js +53 -0
  139. package/dist/src/agent/service/async-queue.js.map +1 -0
  140. package/dist/src/agent/service/build-direct-message-content.d.ts +2 -2
  141. package/dist/src/agent/service/build-direct-message-content.js.map +1 -1
  142. package/dist/src/agent/service/direct-turn-helpers.d.ts +70 -0
  143. package/dist/src/agent/service/direct-turn-helpers.js +90 -0
  144. package/dist/src/agent/service/direct-turn-helpers.js.map +1 -0
  145. package/dist/src/agent/service/process-direct-one-shot.d.ts +3 -3
  146. package/dist/src/agent/service/process-direct-one-shot.js +17 -34
  147. package/dist/src/agent/service/process-direct-one-shot.js.map +1 -1
  148. package/dist/src/agent/service/process-direct-streaming.d.ts +2 -2
  149. package/dist/src/agent/service/process-direct-streaming.js +122 -168
  150. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  151. package/dist/src/agent/service/webchat-tts.d.ts +2 -2
  152. package/dist/src/agent/service/webchat-tts.js +1 -1
  153. package/dist/src/agent/service/webchat-tts.js.map +1 -1
  154. package/dist/src/agent/service.d.ts +62 -167
  155. package/dist/src/agent/service.js +177 -786
  156. package/dist/src/agent/service.js.map +1 -1
  157. package/dist/src/agent/session/index.d.ts +4 -0
  158. package/dist/src/agent/session/index.js +5 -1
  159. package/dist/src/agent/session/session-config-service.d.ts +68 -0
  160. package/dist/src/agent/session/session-config-service.js +172 -0
  161. package/dist/src/agent/session/session-config-service.js.map +1 -0
  162. package/dist/src/agent/session/session-context.d.ts +27 -19
  163. package/dist/src/agent/session/session-context.js +39 -24
  164. package/dist/src/agent/session/session-context.js.map +1 -1
  165. package/dist/src/agent/session/session-hydrator.d.ts +42 -0
  166. package/dist/src/agent/session/session-hydrator.js +66 -0
  167. package/dist/src/agent/session/session-hydrator.js.map +1 -0
  168. package/dist/src/agent/session/session-inspector.d.ts +80 -0
  169. package/dist/src/agent/session/session-inspector.js +119 -0
  170. package/dist/src/agent/session/session-inspector.js.map +1 -0
  171. package/dist/src/agent/session/session-state-bag.d.ts +83 -0
  172. package/dist/src/agent/session/session-state-bag.js +192 -0
  173. package/dist/src/agent/session/session-state-bag.js.map +1 -0
  174. package/dist/src/agent/skills/config.js +1 -1
  175. package/dist/src/agent/skills/hub-hash.js +2 -2
  176. package/dist/src/agent/skills/hub-lock.js +1 -1
  177. package/dist/src/agent/skills/hub-pull.js +2 -2
  178. package/dist/src/agent/skills/index.d.ts +0 -2
  179. package/dist/src/agent/skills/index.js +3 -5
  180. package/dist/src/agent/skills/index.js.map +1 -1
  181. package/dist/src/agent/skills/managed-store.js +1 -1
  182. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +11 -6
  183. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js.map +1 -1
  184. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +35 -7
  185. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +1 -1
  186. package/dist/src/agent/skills/scanner.js +1 -1
  187. package/dist/src/agent/skills/skill-manage-ops.js +2 -2
  188. package/dist/src/agent/skills/skill-manager.js +1 -1
  189. package/dist/src/agent/tools/browser/tool/browser-use-tool.d.ts +7 -0
  190. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +37 -0
  191. package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
  192. package/dist/src/agent/tools/delegate-tool.d.ts +7 -0
  193. package/dist/src/agent/tools/delegate-tool.js +2 -1
  194. package/dist/src/agent/tools/delegate-tool.js.map +1 -1
  195. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  196. package/dist/src/agent/tools/executor.d.ts +34 -15
  197. package/dist/src/agent/tools/executor.js +44 -79
  198. package/dist/src/agent/tools/executor.js.map +1 -1
  199. package/dist/src/agent/tools/factory.d.ts +6 -0
  200. package/dist/src/agent/tools/factory.js +63 -4
  201. package/dist/src/agent/tools/factory.js.map +1 -1
  202. package/dist/src/agent/tools/image-generate-tool.js +1 -1
  203. package/dist/src/agent/tools/send-media.js +1 -1
  204. package/dist/src/agent/tools/skill-manage-tool.js +1 -1
  205. package/dist/src/agent/tools/skills-tools.js +1 -1
  206. package/dist/src/agent/tools/tts-tool.js +1 -1
  207. package/dist/src/agent/tools/write.js +1 -1
  208. package/dist/src/agent/workspace-runtime/registry.d.ts +48 -0
  209. package/dist/src/agent/workspace-runtime/registry.js +59 -0
  210. package/dist/src/agent/workspace-runtime/registry.js.map +1 -0
  211. package/dist/src/auth/credentials.js +3 -3
  212. package/dist/src/auth/profiles/store.js +1 -1
  213. package/dist/src/auth/sync-provider-auth.js +1 -1
  214. package/dist/src/browser/cdp-local-launcher.js +4 -3
  215. package/dist/src/browser/cdp-local-launcher.js.map +1 -1
  216. package/dist/src/browser/index.d.ts +1 -0
  217. package/dist/src/browser/index.js +2 -1
  218. package/dist/src/browser/manager.js +3 -2
  219. package/dist/src/browser/manager.js.map +1 -1
  220. package/dist/src/browser/providers/browser-ext-install.js +4 -4
  221. package/dist/src/browser/providers/browser-use.js +2 -1
  222. package/dist/src/browser/providers/browser-use.js.map +1 -1
  223. package/dist/src/browser/providers/browserbase.js +2 -1
  224. package/dist/src/browser/providers/browserbase.js.map +1 -1
  225. package/dist/src/browser/providers/cloakbrowser.js +7 -6
  226. package/dist/src/browser/providers/cloakbrowser.js.map +1 -1
  227. package/dist/src/browser/providers/playwright-doctor.d.ts +2 -0
  228. package/dist/src/browser/providers/playwright-doctor.js +7 -3
  229. package/dist/src/browser/providers/playwright-doctor.js.map +1 -1
  230. package/dist/src/browser/readiness.d.ts +33 -0
  231. package/dist/src/browser/readiness.js +138 -0
  232. package/dist/src/browser/readiness.js.map +1 -0
  233. package/dist/src/browser/stealth.js +2 -2
  234. package/dist/src/channels/attachments/inbound-persist.js +1 -1
  235. package/dist/src/channels/attachments/outbound-tts-persist.js +1 -1
  236. package/dist/src/channels/channel-domain.d.ts +1 -1
  237. package/dist/src/channels/config-helpers.d.ts +1 -1
  238. package/dist/src/channels/config-helpers.js.map +1 -1
  239. package/dist/src/channels/heartbeat-scheduler.d.ts +40 -0
  240. package/dist/src/channels/heartbeat-scheduler.js +94 -0
  241. package/dist/src/channels/heartbeat-scheduler.js.map +1 -0
  242. package/dist/src/channels/lifecycle-supervisor.d.ts +81 -0
  243. package/dist/src/channels/lifecycle-supervisor.js +263 -0
  244. package/dist/src/channels/lifecycle-supervisor.js.map +1 -0
  245. package/dist/src/channels/manager.d.ts +34 -68
  246. package/dist/src/channels/manager.js +107 -477
  247. package/dist/src/channels/manager.js.map +1 -1
  248. package/dist/src/channels/outbound/deliver.d.ts +1 -1
  249. package/dist/src/channels/outbound/deliver.js.map +1 -1
  250. package/dist/src/channels/outbound/persist-store.js +1 -1
  251. package/dist/src/channels/outbound-sender.d.ts +51 -0
  252. package/dist/src/channels/outbound-sender.js +125 -0
  253. package/dist/src/channels/outbound-sender.js.map +1 -0
  254. package/dist/src/channels/pairing/allow-from-file.js +1 -1
  255. package/dist/src/channels/pairing/pairing-service.d.ts +3 -10
  256. package/dist/src/channels/pairing/pairing-service.js.map +1 -1
  257. package/dist/src/channels/pairing/pairing-store.js +2 -2
  258. package/dist/src/channels/pairing/pairing-types.d.ts +15 -0
  259. package/dist/src/channels/pairing/pairing-types.js +1 -0
  260. package/dist/src/channels/plugin-registry.d.ts +22 -0
  261. package/dist/src/channels/plugin-registry.js +44 -0
  262. package/dist/src/channels/plugin-registry.js.map +1 -0
  263. package/dist/src/channels/plugin-types.d.ts +1 -1
  264. package/dist/src/channels/plugins/types.adapters.d.ts +2 -2
  265. package/dist/src/channels/security-helpers.d.ts +1 -1
  266. package/dist/src/channels/security-helpers.js.map +1 -1
  267. package/dist/src/channels/setup-wizard.d.ts +1 -1
  268. package/dist/src/chat-commands/builtins/config.js +2 -2
  269. package/dist/src/chat-commands/context.js +1 -1
  270. package/dist/src/cli/command-catalog.js +110 -8
  271. package/dist/src/cli/command-catalog.js.map +1 -1
  272. package/dist/src/cli/command-loaders.js +2 -0
  273. package/dist/src/cli/command-loaders.js.map +1 -1
  274. package/dist/src/cli/command-manifest.js +9 -1
  275. package/dist/src/cli/command-manifest.js.map +1 -1
  276. package/dist/src/cli/commands/agent/stream-renderer.js +1 -1
  277. package/dist/src/cli/commands/agent/stream-renderer.js.map +1 -1
  278. package/dist/src/cli/commands/agent.js +4 -4
  279. package/dist/src/cli/commands/agent.js.map +1 -1
  280. package/dist/src/cli/commands/browser-cli-helpers.js +2 -1
  281. package/dist/src/cli/commands/browser-cli-helpers.js.map +1 -1
  282. package/dist/src/cli/commands/config.js +70 -19
  283. package/dist/src/cli/commands/config.js.map +1 -1
  284. package/dist/src/cli/commands/cron-cli.d.ts +2 -0
  285. package/dist/src/cli/commands/cron-cli.js +15 -0
  286. package/dist/src/cli/commands/cron-cli.js.map +1 -0
  287. package/dist/src/cli/commands/cron.d.ts +4 -1
  288. package/dist/src/cli/commands/cron.js +76 -41
  289. package/dist/src/cli/commands/cron.js.map +1 -1
  290. package/dist/src/cli/commands/doctor/checks/channel-config.js +1 -1
  291. package/dist/src/cli/commands/doctor/checks/channel-config.js.map +1 -1
  292. package/dist/src/cli/commands/doctor/checks/config-health.js +2 -2
  293. package/dist/src/cli/commands/doctor/checks/config-health.js.map +1 -1
  294. package/dist/src/cli/commands/doctor/checks/cron-health.js +1 -1
  295. package/dist/src/cli/commands/doctor/checks/cron-health.js.map +1 -1
  296. package/dist/src/cli/commands/doctor/checks/gateway-health.js +2 -2
  297. package/dist/src/cli/commands/doctor/checks/gateway-health.js.map +1 -1
  298. package/dist/src/cli/commands/doctor/checks/gateway-service.js +2 -2
  299. package/dist/src/cli/commands/doctor/checks/gateway-service.js.map +1 -1
  300. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  301. package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -1
  302. package/dist/src/cli/commands/doctor/checks/state-integrity.js +2 -2
  303. package/dist/src/cli/commands/doctor/checks/state-integrity.js.map +1 -1
  304. package/dist/src/cli/commands/doctor/checks/workspace-status.js +4 -4
  305. package/dist/src/cli/commands/doctor/checks/workspace-status.js.map +1 -1
  306. package/dist/src/cli/commands/extension-dev.js +2 -2
  307. package/dist/src/cli/commands/extension-dev.js.map +1 -1
  308. package/dist/src/cli/commands/extension-marketplace.js +2 -2
  309. package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
  310. package/dist/src/cli/commands/extension-pack.js +1 -1
  311. package/dist/src/cli/commands/gateway/call.js +1 -1
  312. package/dist/src/cli/commands/gateway/call.js.map +1 -1
  313. package/dist/src/cli/commands/gateway/health.js +1 -1
  314. package/dist/src/cli/commands/gateway/health.js.map +1 -1
  315. package/dist/src/cli/commands/gateway/index.d.ts +1 -1
  316. package/dist/src/cli/commands/gateway/index.js +2 -2
  317. package/dist/src/cli/commands/gateway/lifecycle-core.d.ts +31 -12
  318. package/dist/src/cli/commands/gateway/lifecycle-core.js +167 -116
  319. package/dist/src/cli/commands/gateway/lifecycle-core.js.map +1 -1
  320. package/dist/src/cli/commands/gateway/lifecycle.d.ts +11 -0
  321. package/dist/src/cli/commands/gateway/lifecycle.js +102 -0
  322. package/dist/src/cli/commands/gateway/lifecycle.js.map +1 -0
  323. package/dist/src/cli/commands/gateway/logs.js +1 -1
  324. package/dist/src/cli/commands/gateway/logs.js.map +1 -1
  325. package/dist/src/cli/commands/gateway/probe.js +1 -1
  326. package/dist/src/cli/commands/gateway/probe.js.map +1 -1
  327. package/dist/src/cli/commands/gateway/restart-health.d.ts +12 -0
  328. package/dist/src/cli/commands/gateway/restart-health.js +45 -1
  329. package/dist/src/cli/commands/gateway/restart-health.js.map +1 -1
  330. package/dist/src/cli/commands/gateway/restart.js +3 -3
  331. package/dist/src/cli/commands/gateway/restart.js.map +1 -1
  332. package/dist/src/cli/commands/gateway/run-foreground.d.ts +0 -1
  333. package/dist/src/cli/commands/gateway/run-foreground.js +0 -35
  334. package/dist/src/cli/commands/gateway/run-foreground.js.map +1 -1
  335. package/dist/src/cli/commands/gateway/service.d.ts +4 -0
  336. package/dist/src/cli/commands/gateway/service.js +18 -3
  337. package/dist/src/cli/commands/gateway/service.js.map +1 -1
  338. package/dist/src/cli/commands/gateway/shared.d.ts +3 -0
  339. package/dist/src/cli/commands/gateway/shared.js +54 -0
  340. package/dist/src/cli/commands/gateway/shared.js.map +1 -0
  341. package/dist/src/cli/commands/gateway/status.js +1 -1
  342. package/dist/src/cli/commands/gateway/status.js.map +1 -1
  343. package/dist/src/cli/commands/gateway/stop.js +2 -2
  344. package/dist/src/cli/commands/gateway/stop.js.map +1 -1
  345. package/dist/src/cli/commands/gateway/subcommands.js +1 -4
  346. package/dist/src/cli/commands/gateway/subcommands.js.map +1 -1
  347. package/dist/src/cli/commands/gateway/token.js +1 -1
  348. package/dist/src/cli/commands/gateway/token.js.map +1 -1
  349. package/dist/src/cli/commands/gateway.js +5 -5
  350. package/dist/src/cli/commands/gateway.js.map +1 -1
  351. package/dist/src/cli/commands/image.js +2 -2
  352. package/dist/src/cli/commands/image.js.map +1 -1
  353. package/dist/src/cli/commands/init.js +31 -4
  354. package/dist/src/cli/commands/init.js.map +1 -1
  355. package/dist/src/cli/commands/models.d.ts +4 -1
  356. package/dist/src/cli/commands/models.js +87 -75
  357. package/dist/src/cli/commands/models.js.map +1 -1
  358. package/dist/src/cli/commands/onboard/gateway.d.ts +0 -8
  359. package/dist/src/cli/commands/onboard/gateway.js +48 -49
  360. package/dist/src/cli/commands/onboard/gateway.js.map +1 -1
  361. package/dist/src/cli/commands/onboard.js +11 -64
  362. package/dist/src/cli/commands/onboard.js.map +1 -1
  363. package/dist/src/cli/commands/profile.d.ts +3 -5
  364. package/dist/src/cli/commands/profile.js +31 -31
  365. package/dist/src/cli/commands/profile.js.map +1 -1
  366. package/dist/src/cli/commands/session/utils.js +1 -1
  367. package/dist/src/cli/commands/session/utils.js.map +1 -1
  368. package/dist/src/cli/commands/setup.js +6 -1
  369. package/dist/src/cli/commands/setup.js.map +1 -1
  370. package/dist/src/cli/commands/skills.js +1 -1
  371. package/dist/src/cli/commands/tailscale.js +1 -1
  372. package/dist/src/cli/commands/tailscale.js.map +1 -1
  373. package/dist/src/cli/context.d.ts +20 -0
  374. package/dist/src/cli/context.js +23 -0
  375. package/dist/src/cli/context.js.map +1 -0
  376. package/dist/src/cli/extension-cli-register.js +3 -3
  377. package/dist/src/cli/gateway-run-argv.js +16 -9
  378. package/dist/src/cli/gateway-run-argv.js.map +1 -1
  379. package/dist/src/cli/gateway-run-fast-path.js +1 -1
  380. package/dist/src/cli/gateway-run-fast-path.js.map +1 -1
  381. package/dist/src/cli/index.d.ts +1 -7
  382. package/dist/src/cli/index.js +4 -6
  383. package/dist/src/cli/index.js.map +1 -1
  384. package/dist/src/cli/utils/init-workspace-core.js +2 -2
  385. package/dist/src/config/commands.flags.d.ts +3 -0
  386. package/dist/src/config/commands.flags.js +11 -0
  387. package/dist/src/config/commands.flags.js.map +1 -0
  388. package/dist/src/config/index.d.ts +1 -0
  389. package/dist/src/config/index.js +6 -5
  390. package/dist/src/config/index.js.map +1 -1
  391. package/dist/src/config/loader.js +2 -2
  392. package/dist/src/config/models-json.js +2 -2
  393. package/dist/src/config/profile.js +2 -2
  394. package/dist/src/config/schema.d.ts +11 -4
  395. package/dist/src/config/schema.js +13 -12
  396. package/dist/src/config/schema.js.map +1 -1
  397. package/dist/src/config/workspace-path-helpers.d.ts +15 -0
  398. package/dist/src/config/workspace-path-helpers.js +14 -0
  399. package/dist/src/config/workspace-path-helpers.js.map +1 -0
  400. package/dist/src/cron/executor.js +4 -4
  401. package/dist/src/cron/executor.js.map +1 -1
  402. package/dist/src/cron/persistence.js +1 -1
  403. package/dist/src/cron/run-log-store.js +1 -1
  404. package/dist/src/daemon/index.d.ts +0 -1
  405. package/dist/src/daemon/index.js +1 -2
  406. package/dist/src/daemon/install-plan.js +3 -2
  407. package/dist/src/daemon/install-plan.js.map +1 -1
  408. package/dist/src/daemon/launchd.js +2 -2
  409. package/dist/src/daemon/systemd.js +2 -2
  410. package/dist/src/daemon/types.d.ts +0 -6
  411. package/dist/src/extensions/api.d.ts +1 -1
  412. package/dist/src/extensions/api.js +2 -2
  413. package/dist/src/extensions/api.js.map +1 -1
  414. package/dist/src/extensions/bundle-mcp.js +1 -1
  415. package/dist/src/extensions/discover-extensions.js +1 -1
  416. package/dist/src/extensions/extension-registry-impl.d.ts +51 -0
  417. package/dist/src/extensions/extension-registry-impl.js +117 -0
  418. package/dist/src/extensions/extension-registry-impl.js.map +1 -0
  419. package/dist/src/extensions/health.js +1 -1
  420. package/dist/src/extensions/index.js +3 -2
  421. package/dist/src/extensions/loader.d.ts +3 -43
  422. package/dist/src/extensions/loader.js +3 -110
  423. package/dist/src/extensions/loader.js.map +1 -1
  424. package/dist/src/extensions/lockfile.js +2 -2
  425. package/dist/src/extensions/sdk/index.js +2 -1
  426. package/dist/src/extensions/sdk/index.js.map +1 -1
  427. package/dist/src/extensions/types/events.d.ts +7 -1
  428. package/dist/src/gateway/agents-admin.js +2 -2
  429. package/dist/src/gateway/file-path-classifier.js +2 -2
  430. package/dist/src/gateway/heartbeat/service.js +1 -1
  431. package/dist/src/gateway/heartbeat/service.js.map +1 -1
  432. package/dist/src/gateway/hono/app.js +5 -53
  433. package/dist/src/gateway/hono/app.js.map +1 -1
  434. package/dist/src/gateway/hono/lib/extension-store.js +1 -1
  435. package/dist/src/gateway/hono/lib/static-ui.js +2 -2
  436. package/dist/src/gateway/hono/middleware/auth.d.ts +5 -14
  437. package/dist/src/gateway/hono/middleware/auth.js +89 -126
  438. package/dist/src/gateway/hono/middleware/auth.js.map +1 -1
  439. package/dist/src/gateway/hono/middleware/logger.js +1 -1
  440. package/dist/src/gateway/hono/middleware/logger.js.map +1 -1
  441. package/dist/src/gateway/hono/middleware/strict-rate-limit.d.ts +14 -0
  442. package/dist/src/gateway/hono/middleware/strict-rate-limit.js +62 -0
  443. package/dist/src/gateway/hono/middleware/strict-rate-limit.js.map +1 -0
  444. package/dist/src/gateway/hono/oauth.js +1 -1
  445. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +4 -4
  446. package/dist/src/gateway/hono/routes/auth-registry-extensions.js.map +1 -1
  447. package/dist/src/gateway/hono/routes/browser.d.ts +20 -0
  448. package/dist/src/gateway/hono/routes/browser.js +626 -0
  449. package/dist/src/gateway/hono/routes/browser.js.map +1 -0
  450. package/dist/src/gateway/hono/routes/commands-skills.js +13 -13
  451. package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
  452. package/dist/src/gateway/hono/routes/config-patch/agents.d.ts +18 -0
  453. package/dist/src/gateway/hono/routes/config-patch/agents.js +418 -0
  454. package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -0
  455. package/dist/src/gateway/hono/routes/config-patch/channels.d.ts +12 -0
  456. package/dist/src/gateway/hono/routes/config-patch/channels.js +186 -0
  457. package/dist/src/gateway/hono/routes/config-patch/channels.js.map +1 -0
  458. package/dist/src/gateway/hono/routes/config-patch/gateway.d.ts +18 -0
  459. package/dist/src/gateway/hono/routes/config-patch/gateway.js +264 -0
  460. package/dist/src/gateway/hono/routes/config-patch/gateway.js.map +1 -0
  461. package/dist/src/gateway/hono/routes/config-patch/index.d.ts +9 -0
  462. package/dist/src/gateway/hono/routes/config-patch/index.js +6 -0
  463. package/dist/src/gateway/hono/routes/config-patch/misc.d.ts +23 -0
  464. package/dist/src/gateway/hono/routes/config-patch/misc.js +139 -0
  465. package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -0
  466. package/dist/src/gateway/hono/routes/config-patch/result.d.ts +18 -0
  467. package/dist/src/gateway/hono/routes/config-patch/result.js +13 -0
  468. package/dist/src/gateway/hono/routes/config-patch/result.js.map +1 -0
  469. package/dist/src/gateway/hono/routes/config.js +20 -1764
  470. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  471. package/dist/src/gateway/hono/routes/dreaming.js +2 -3
  472. package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
  473. package/dist/src/gateway/hono/routes/host-fs.js +1 -1
  474. package/dist/src/gateway/hono/routes/lazy-bundles.js +10 -5
  475. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  476. package/dist/src/gateway/hono/routes/mcp.js +1 -2
  477. package/dist/src/gateway/hono/routes/mcp.js.map +1 -1
  478. package/dist/src/gateway/hono/routes/models.js +1 -1
  479. package/dist/src/gateway/hono/routes/sessions.js +32 -32
  480. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  481. package/dist/src/gateway/hono/routes/shares.js +4 -4
  482. package/dist/src/gateway/hono/routes/shares.js.map +1 -1
  483. package/dist/src/gateway/hono/routes/tunnel.js +1 -1
  484. package/dist/src/gateway/hono/routes/tunnel.js.map +1 -1
  485. package/dist/src/gateway/hono/routes/workspace.js +6 -7
  486. package/dist/src/gateway/hono/routes/workspace.js.map +1 -1
  487. package/dist/src/gateway/hono/sse.js +2 -2
  488. package/dist/src/gateway/index.d.ts +1 -1
  489. package/dist/src/gateway/index.js +4 -2
  490. package/dist/src/gateway/lock.js +3 -3
  491. package/dist/src/gateway/rate-limit/auth-policy.d.ts +34 -0
  492. package/dist/src/gateway/rate-limit/auth-policy.js +49 -0
  493. package/dist/src/gateway/rate-limit/auth-policy.js.map +1 -0
  494. package/dist/src/gateway/rate-limit/buckets.d.ts +63 -0
  495. package/dist/src/gateway/rate-limit/buckets.js +143 -0
  496. package/dist/src/gateway/rate-limit/buckets.js.map +1 -0
  497. package/dist/src/gateway/rate-limit/env-flags.d.ts +13 -0
  498. package/dist/src/gateway/rate-limit/env-flags.js +16 -0
  499. package/dist/src/gateway/rate-limit/env-flags.js.map +1 -0
  500. package/dist/src/gateway/rate-limit/index.d.ts +3 -0
  501. package/dist/src/gateway/rate-limit/index.js +4 -0
  502. package/dist/src/gateway/run-loop.d.ts +1 -1
  503. package/dist/src/gateway/run-loop.js +24 -4
  504. package/dist/src/gateway/run-loop.js.map +1 -1
  505. package/dist/src/gateway/runtime-config.js +2 -1
  506. package/dist/src/gateway/runtime-config.js.map +1 -1
  507. package/dist/src/gateway/security/audit.js +2 -1
  508. package/dist/src/gateway/security/audit.js.map +1 -1
  509. package/dist/src/gateway/security/index.d.ts +0 -1
  510. package/dist/src/gateway/security/index.js +1 -2
  511. package/dist/src/gateway/security/loopback.d.ts +13 -0
  512. package/dist/src/gateway/security/loopback.js +45 -0
  513. package/dist/src/gateway/security/loopback.js.map +1 -0
  514. package/dist/src/gateway/service/agent-runner.d.ts +108 -0
  515. package/dist/src/gateway/service/agent-runner.js +184 -0
  516. package/dist/src/gateway/service/agent-runner.js.map +1 -0
  517. package/dist/src/gateway/service/config-coordinator.d.ts +119 -0
  518. package/dist/src/gateway/service/config-coordinator.js +351 -0
  519. package/dist/src/gateway/service/config-coordinator.js.map +1 -0
  520. package/dist/src/gateway/service/marketplace-service.d.ts +85 -0
  521. package/dist/src/gateway/service/marketplace-service.js +239 -0
  522. package/dist/src/gateway/service/marketplace-service.js.map +1 -0
  523. package/dist/src/gateway/service/run-gateway-agent.js +5 -5
  524. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
  525. package/dist/src/gateway/service/sessions-api.d.ts +125 -0
  526. package/dist/src/gateway/service/sessions-api.js +135 -0
  527. package/dist/src/gateway/service/sessions-api.js.map +1 -0
  528. package/dist/src/gateway/service.d.ts +30 -360
  529. package/dist/src/gateway/service.js +122 -904
  530. package/dist/src/gateway/service.js.map +1 -1
  531. package/dist/src/gateway/workspace-fs-file-list.js +1 -1
  532. package/dist/src/gateway/workspace-heartbeat-path.js +1 -2
  533. package/dist/src/gateway/workspace-heartbeat-path.js.map +1 -1
  534. package/dist/src/infra/gateway-process-argv.d.ts +4 -0
  535. package/dist/src/infra/gateway-process-argv.js +26 -0
  536. package/dist/src/infra/gateway-process-argv.js.map +1 -0
  537. package/dist/src/infra/gateway-processes.d.ts +5 -0
  538. package/dist/src/infra/gateway-processes.js +65 -0
  539. package/dist/src/infra/gateway-processes.js.map +1 -0
  540. package/dist/src/infra/rate-limit/failure-limiter.d.ts +50 -0
  541. package/dist/src/infra/rate-limit/failure-limiter.js +100 -0
  542. package/dist/src/infra/rate-limit/failure-limiter.js.map +1 -0
  543. package/dist/src/infra/rate-limit/index.d.ts +5 -0
  544. package/dist/src/infra/rate-limit/index.js +3 -0
  545. package/dist/src/infra/rate-limit/keyed-store.d.ts +34 -0
  546. package/dist/src/infra/rate-limit/keyed-store.js +44 -0
  547. package/dist/src/infra/rate-limit/keyed-store.js.map +1 -0
  548. package/dist/src/infra/rate-limit/rate-limiter.d.ts +39 -0
  549. package/dist/src/infra/rate-limit/rate-limiter.js +65 -0
  550. package/dist/src/infra/rate-limit/rate-limiter.js.map +1 -0
  551. package/dist/src/infra/restart.d.ts +21 -0
  552. package/dist/src/infra/restart.js +122 -0
  553. package/dist/src/infra/restart.js.map +1 -0
  554. package/dist/src/infra/update-check.js +1 -1
  555. package/dist/src/infra/update-lock.js +3 -3
  556. package/dist/src/infra/update-runner.js +1 -1
  557. package/dist/src/infra/update-startup.js +2 -2
  558. package/dist/src/infra/write-file-atomic.js +2 -2
  559. package/dist/src/mcp/channel-bridge.d.ts +0 -6
  560. package/dist/src/mcp/channel-bridge.js +1 -5
  561. package/dist/src/mcp/channel-bridge.js.map +1 -1
  562. package/dist/src/media-shared/http/ssrf-guard.js +1 -1
  563. package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
  564. package/dist/src/providers/index.js +2 -2
  565. package/dist/src/providers/model-registry.js +1 -1
  566. package/dist/src/session/config-store.js +2 -2
  567. package/dist/src/session/parity/jsonl-transcript-io.js +2 -2
  568. package/dist/src/session/parity/sessions-json-file-read.d.ts +2 -1
  569. package/dist/src/session/parity/sessions-json-file-read.js.map +1 -1
  570. package/dist/src/session/parity/sessions-json-file.js +1 -1
  571. package/dist/src/session/parity/transcript-file-lock.js +2 -2
  572. package/dist/src/session/parity/transcript-paths.js +1 -1
  573. package/dist/src/session/search-index-cache.js +1 -1
  574. package/dist/src/session/search-index.js +1 -1
  575. package/dist/src/session/session-title.js +1 -1
  576. package/dist/src/session/store.js +5 -5
  577. package/dist/src/share/share-rate-limit.d.ts +10 -2
  578. package/dist/src/share/share-rate-limit.js +33 -42
  579. package/dist/src/share/share-rate-limit.js.map +1 -1
  580. package/dist/src/share/share-store.js +3 -3
  581. package/dist/src/tui/backends/embedded-backend.js +16 -12
  582. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  583. package/dist/src/tui/clipboard-image.js +2 -2
  584. package/dist/src/tui/extension-host/load-extensions.js +1 -1
  585. package/dist/src/tui/format-tui-hotkeys.js +1 -1
  586. package/dist/src/tui/theme-manager.js +1 -1
  587. package/dist/src/tui/tui-keybindings-file.js +1 -1
  588. package/dist/src/tui/tui-scoped-models.js +1 -1
  589. package/dist/src/tui/tui-settings.js +1 -1
  590. package/dist/src/tui/tui-skills-autocomplete.js +1 -1
  591. package/dist/src/tui/tui.js +1 -2
  592. package/dist/src/tui/tui.js.map +1 -1
  593. package/dist/src/tui/xopc-tui-keybindings.d.ts +0 -1
  594. package/dist/src/tui/xopc-tui-keybindings.js +1 -2
  595. package/dist/src/tui/xopc-tui-keybindings.js.map +1 -1
  596. package/dist/src/tunnel/frpc-binary.js +2 -2
  597. package/dist/src/tunnel/frpc-config.js +1 -1
  598. package/dist/src/tunnel/frpc-extract.js +1 -1
  599. package/dist/src/tunnel/pairing-rate-limit.d.ts +10 -2
  600. package/dist/src/tunnel/pairing-rate-limit.js +19 -15
  601. package/dist/src/tunnel/pairing-rate-limit.js.map +1 -1
  602. package/dist/src/tunnel/tunnel-rate-limit.d.ts +6 -3
  603. package/dist/src/tunnel/tunnel-rate-limit.js +11 -22
  604. package/dist/src/tunnel/tunnel-rate-limit.js.map +1 -1
  605. package/dist/src/tunnel/tunnel-state.js +1 -1
  606. package/dist/src/utils/logger/audit.js +1 -1
  607. package/dist/src/utils/logger/log-store.js +1 -1
  608. package/dist/src/utils/logger/rotation.js +1 -1
  609. package/dist/src/utils/logger/stats.d.ts +1 -1
  610. package/dist/src/voice/tts/audio.js +1 -1
  611. package/dist/src/voice/tts/factory.js +1 -1
  612. package/dist/src/voice/tts/index.js +2 -2
  613. package/dist/src/voice/tts/merge-config.js +1 -1
  614. package/dist/src/voice/tts/providers/edge-speech.js +1 -1
  615. package/dist/src/voice/tts/service.js +1 -1
  616. package/dist/src/voice/tts/service.js.map +1 -1
  617. package/dist/src/voice/tts/speak-core.js +1 -1
  618. package/package.json +10 -5
  619. package/dist/gateway/static/root/assets/agents-Cqh1ts38.js +0 -222
  620. package/dist/gateway/static/root/assets/channels-settings-wTiWStg9.js +0 -1
  621. package/dist/gateway/static/root/assets/fetch-BAAh_kXG.js +0 -3
  622. package/dist/gateway/static/root/assets/index-C8yHX-AA.css +0 -1
  623. package/dist/gateway/static/root/assets/sessions-page-BeiFm0Ms.js +0 -1
  624. package/dist/gateway/static/root/assets/settings-page-RPAz_Wg_.js +0 -3
  625. package/dist/gateway/static/root/assets/skills-page-Wu4aNWDx.js +0 -2
  626. package/dist/gateway/static/root/assets/voice-api-key-field-BxIGhhEL.js +0 -1
  627. package/dist/src/agent/embedded/session-raw-append-message.d.ts +0 -11
  628. package/dist/src/agent/embedded/session-raw-append-message.js +0 -15
  629. package/dist/src/agent/embedded/session-raw-append-message.js.map +0 -1
  630. package/dist/src/agent/embedded/session-tool-result-guard-wrapper.d.ts +0 -15
  631. package/dist/src/agent/embedded/session-tool-result-guard-wrapper.js +0 -24
  632. package/dist/src/agent/embedded/session-tool-result-guard-wrapper.js.map +0 -1
  633. package/dist/src/agent/embedded/session-tool-result-state.d.ts +0 -17
  634. package/dist/src/agent/embedded/session-tool-result-state.js +0 -26
  635. package/dist/src/agent/embedded/session-tool-result-state.js.map +0 -1
  636. package/dist/src/daemon/launchd-restart-handoff.d.ts +0 -25
  637. package/dist/src/daemon/launchd-restart-handoff.js +0 -132
  638. package/dist/src/daemon/launchd-restart-handoff.js.map +0 -1
  639. package/dist/src/gateway/auth-rate-limit.d.ts +0 -71
  640. package/dist/src/gateway/auth-rate-limit.js +0 -192
  641. package/dist/src/gateway/auth-rate-limit.js.map +0 -1
  642. package/dist/src/gateway/restart-handler.d.ts +0 -14
  643. package/dist/src/gateway/restart-handler.js +0 -64
  644. package/dist/src/gateway/restart-handler.js.map +0 -1
  645. package/dist/src/gateway/security/flood-guard.d.ts +0 -28
  646. package/dist/src/gateway/security/flood-guard.js +0 -42
  647. package/dist/src/gateway/security/flood-guard.js.map +0 -1
  648. package/dist/src/infra/rate-limit.d.ts +0 -38
  649. package/dist/src/infra/rate-limit.js +0 -60
  650. package/dist/src/infra/rate-limit.js.map +0 -1
  651. package/dist/src/infra/restart-intent.d.ts +0 -13
  652. package/dist/src/infra/restart-intent.js +0 -40
  653. package/dist/src/infra/restart-intent.js.map +0 -1
  654. package/dist/src/infra/restart-sentinel.d.ts +0 -23
  655. package/dist/src/infra/restart-sentinel.js +0 -75
  656. package/dist/src/infra/restart-sentinel.js.map +0 -1
  657. package/skills/creative/canvas-design/LICENSE.txt +0 -202
  658. package/skills/creative/canvas-design/SKILL-zh.md +0 -130
  659. package/skills/creative/canvas-design/SKILL.md +0 -130
  660. package/skills/creative/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -93
  661. package/skills/creative/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  662. package/skills/creative/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  663. package/skills/creative/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -93
  664. package/skills/creative/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  665. package/skills/creative/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -93
  666. package/skills/creative/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  667. package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  668. package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -93
  669. package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  670. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  671. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  672. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -93
  673. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  674. package/skills/creative/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -93
  675. package/skills/creative/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  676. package/skills/creative/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -94
  677. package/skills/creative/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  678. package/skills/creative/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  679. package/skills/creative/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -93
  680. package/skills/creative/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  681. package/skills/creative/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -93
  682. package/skills/creative/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  683. package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  684. package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -93
  685. package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  686. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  687. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  688. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  689. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  690. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  691. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  692. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  693. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -93
  694. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  695. package/skills/creative/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  696. package/skills/creative/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  697. package/skills/creative/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -93
  698. package/skills/creative/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  699. package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  700. package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -93
  701. package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  702. package/skills/creative/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  703. package/skills/creative/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  704. package/skills/creative/canvas-design/canvas-fonts/Jura-OFL.txt +0 -93
  705. package/skills/creative/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -93
  706. package/skills/creative/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  707. package/skills/creative/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  708. package/skills/creative/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  709. package/skills/creative/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  710. package/skills/creative/canvas-design/canvas-fonts/Lora-OFL.txt +0 -93
  711. package/skills/creative/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  712. package/skills/creative/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  713. package/skills/creative/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -93
  714. package/skills/creative/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  715. package/skills/creative/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -93
  716. package/skills/creative/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  717. package/skills/creative/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  718. package/skills/creative/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -93
  719. package/skills/creative/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  720. package/skills/creative/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  721. package/skills/creative/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -93
  722. package/skills/creative/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -93
  723. package/skills/creative/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  724. package/skills/creative/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  725. package/skills/creative/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -93
  726. package/skills/creative/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  727. package/skills/creative/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -93
  728. package/skills/creative/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  729. package/skills/creative/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  730. package/skills/creative/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -93
  731. package/skills/creative/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  732. package/skills/creative/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -93
  733. package/skills/creative/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  734. package/skills/creative/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  735. package/skills/creative/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  736. package/skills/creative/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  737. package/skills/creative/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -93
  738. package/skills/creative/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  739. package/skills/creative/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -93
  740. package/skills/creative/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
@@ -5,7 +5,11 @@ import { getWorkspaceStatus } from "../utils/workspace.js";
5
5
  import { Command } from "commander";
6
6
  //#region src/cli/commands/setup.ts
7
7
  function createSetupCommand(ctx) {
8
- return new Command("setup").description("Initialize config file and workspace directory").addHelpText("after", formatExamples(["xopc setup # Create config + workspace", "xopc setup --workspace /path # Custom workspace path"])).option("--workspace <path>", "Workspace directory path", ctx.workspacePath).action(async (options) => {
8
+ return new Command("setup").description("Initialize config file and workspace directory").addHelpText("after", formatExamples([
9
+ "xopc setup # Create config + workspace",
10
+ "xopc setup --workspace /path # Custom workspace path",
11
+ "xopc init # Full state dirs + agent profile seeds"
12
+ ])).option("--workspace <path>", "Workspace directory path", ctx.workspacePath).action(async (options) => {
9
13
  const workspacePath = options.workspace || ctx.workspacePath;
10
14
  const configPath = ctx.configPath;
11
15
  console.log("🔧 xopc Setup\n");
@@ -29,6 +33,7 @@ function createSetupCommand(ctx) {
29
33
  console.log(" Config:", configPath);
30
34
  console.log(" Workspace:", workspacePath);
31
35
  console.log("\n🚀 Next Steps:");
36
+ console.log(" xopc init # Full Agent OS dirs (optional, beyond setup)");
32
37
  console.log(" xopc onboard # Run full setup wizard");
33
38
  console.log(" xopc onboard --model # Configure model only");
34
39
  console.log(" xopc onboard --channels # Configure channels only");
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","names":[],"sources":["../../../../src/cli/commands/setup.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\nimport { seedMainAgentProfileMarkdown } from '../../agent/context/workspace-seed.js';\nimport { getWorkspaceStatus } from '../utils/workspace.js';\nimport { initWorkspace } from '../utils/init-workspace.js';\n\nfunction createSetupCommand(ctx: CLIContext): Command {\n const cmd = new Command('setup')\n .description('Initialize config file and workspace directory')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc setup # Create config + workspace',\n 'xopc setup --workspace /path # Custom workspace path',\n ])\n )\n .option('--workspace <path>', 'Workspace directory path', ctx.workspacePath)\n .action(async (options) => {\n const workspacePath = options.workspace || ctx.workspacePath;\n const configPath = ctx.configPath;\n\n console.log('🔧 xopc Setup\\n');\n console.log('═'.repeat(40));\n\n // Check current status\n const status = getWorkspaceStatus(configPath, workspacePath);\n\n console.log('\\n📊 Current Status:');\n console.log(` Config: ${status.configExists ? '✅ exists' : '❌ not found'}`);\n console.log(` Workspace: ${status.workspaceSetup ? '✅ setup' : '❌ not found'}`);\n\n const result = await initWorkspace({ configPath, workspacePath });\n\n if (result.configCreated) {\n console.log('\\n📝 Created config file.');\n } else {\n console.log('\\n📝 Config already present (verified).');\n }\n\n if (result.workspaceCreated) {\n console.log('\\n📁 Created workspace + memory/.');\n } else {\n console.log('\\n📁 Workspace already present (verified).');\n }\n\n seedMainAgentProfileMarkdown(result.config);\n\n console.log('\\n' + '═'.repeat(40));\n console.log('\\n✅ Setup complete!\\n');\n\n console.log('📁 Files:');\n console.log(' Config:', configPath);\n console.log(' Workspace:', workspacePath);\n\n console.log('\\n🚀 Next Steps:');\n console.log(' xopc onboard # Run full setup wizard');\n console.log(' xopc onboard --model # Configure model only');\n console.log(' xopc onboard --channels # Configure channels only');\n });\n\n return cmd;\n}\n\nregister({\n id: 'setup',\n name: 'setup',\n description: 'Initialize config file and workspace directory',\n factory: createSetupCommand,\n metadata: {\n category: 'setup',\n examples: [\n 'xopc setup',\n 'xopc setup --workspace ~/.my-workspace',\n ],\n },\n});\n"],"mappings":";;;;;;AAMA,SAAS,mBAAmB,KAA0B;AAsDpD,QArDY,IAAI,QAAQ,QAAQ,CAC7B,YAAY,iDAAiD,CAC7D,YACC,SACA,eAAe,CACb,6DACA,wDACD,CAAC,CACH,CACA,OAAO,sBAAsB,4BAA4B,IAAI,cAAc,CAC3E,OAAO,OAAO,YAAY;EACzB,MAAM,gBAAgB,QAAQ,aAAa,IAAI;EAC/C,MAAM,aAAa,IAAI;AAEvB,UAAQ,IAAI,kBAAkB;AAC9B,UAAQ,IAAI,IAAI,OAAO,GAAG,CAAC;EAG3B,MAAM,SAAS,mBAAmB,YAAY,cAAc;AAE5D,UAAQ,IAAI,uBAAuB;AACnC,UAAQ,IAAI,cAAc,OAAO,eAAe,aAAa,gBAAgB;AAC7E,UAAQ,IAAI,iBAAiB,OAAO,iBAAiB,YAAY,gBAAgB;EAEjF,MAAM,SAAS,MAAM,cAAc;GAAE;GAAY;GAAe,CAAC;AAEjE,MAAI,OAAO,cACT,SAAQ,IAAI,4BAA4B;MAExC,SAAQ,IAAI,0CAA0C;AAGxD,MAAI,OAAO,iBACT,SAAQ,IAAI,oCAAoC;MAEhD,SAAQ,IAAI,6CAA6C;AAG3D,+BAA6B,OAAO,OAAO;AAE3C,UAAQ,IAAI,OAAO,IAAI,OAAO,GAAG,CAAC;AAClC,UAAQ,IAAI,wBAAwB;AAEpC,UAAQ,IAAI,YAAY;AACxB,UAAQ,IAAI,cAAc,WAAW;AACrC,UAAQ,IAAI,iBAAiB,cAAc;AAE3C,UAAQ,IAAI,mBAAmB;AAC/B,UAAQ,IAAI,uDAAuD;AACnE,UAAQ,IAAI,sDAAsD;AAClE,UAAQ,IAAI,wDAAwD;GAG9D;;AAGZ,SAAS;CACP,IAAI;CACJ,MAAM;CACN,aAAa;CACb,SAAS;CACT,UAAU;EACR,UAAU;EACV,UAAU,CACR,cACA,yCACD;EACF;CACF,CAAC"}
1
+ {"version":3,"file":"setup.js","names":[],"sources":["../../../../src/cli/commands/setup.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\nimport { seedMainAgentProfileMarkdown } from '../../agent/context/workspace-seed.js';\nimport { getWorkspaceStatus } from '../utils/workspace.js';\nimport { initWorkspace } from '../utils/init-workspace.js';\n\nfunction createSetupCommand(ctx: CLIContext): Command {\n const cmd = new Command('setup')\n .description('Initialize config file and workspace directory')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc setup # Create config + workspace',\n 'xopc setup --workspace /path # Custom workspace path',\n 'xopc init # Full state dirs + agent profile seeds',\n ])\n )\n .option('--workspace <path>', 'Workspace directory path', ctx.workspacePath)\n .action(async (options) => {\n const workspacePath = options.workspace || ctx.workspacePath;\n const configPath = ctx.configPath;\n\n console.log('🔧 xopc Setup\\n');\n console.log('═'.repeat(40));\n\n // Check current status\n const status = getWorkspaceStatus(configPath, workspacePath);\n\n console.log('\\n📊 Current Status:');\n console.log(` Config: ${status.configExists ? '✅ exists' : '❌ not found'}`);\n console.log(` Workspace: ${status.workspaceSetup ? '✅ setup' : '❌ not found'}`);\n\n const result = await initWorkspace({ configPath, workspacePath });\n\n if (result.configCreated) {\n console.log('\\n📝 Created config file.');\n } else {\n console.log('\\n📝 Config already present (verified).');\n }\n\n if (result.workspaceCreated) {\n console.log('\\n📁 Created workspace + memory/.');\n } else {\n console.log('\\n📁 Workspace already present (verified).');\n }\n\n seedMainAgentProfileMarkdown(result.config);\n\n console.log('\\n' + '═'.repeat(40));\n console.log('\\n✅ Setup complete!\\n');\n\n console.log('📁 Files:');\n console.log(' Config:', configPath);\n console.log(' Workspace:', workspacePath);\n\n console.log('\\n🚀 Next Steps:');\n console.log(' xopc init # Full Agent OS dirs (optional, beyond setup)');\n console.log(' xopc onboard # Run full setup wizard');\n console.log(' xopc onboard --model # Configure model only');\n console.log(' xopc onboard --channels # Configure channels only');\n });\n\n return cmd;\n}\n\nregister({\n id: 'setup',\n name: 'setup',\n description: 'Initialize config file and workspace directory',\n factory: createSetupCommand,\n metadata: {\n category: 'setup',\n examples: [\n 'xopc setup',\n 'xopc setup --workspace ~/.my-workspace',\n ],\n },\n});\n"],"mappings":";;;;;;AAMA,SAAS,mBAAmB,KAA0B;AAwDpD,QAvDY,IAAI,QAAQ,QAAQ,CAC7B,YAAY,iDAAiD,CAC7D,YACC,SACA,eAAe;EACb;EACA;EACA;EACD,CAAC,CACH,CACA,OAAO,sBAAsB,4BAA4B,IAAI,cAAc,CAC3E,OAAO,OAAO,YAAY;EACzB,MAAM,gBAAgB,QAAQ,aAAa,IAAI;EAC/C,MAAM,aAAa,IAAI;AAEvB,UAAQ,IAAI,kBAAkB;AAC9B,UAAQ,IAAI,IAAI,OAAO,GAAG,CAAC;EAG3B,MAAM,SAAS,mBAAmB,YAAY,cAAc;AAE5D,UAAQ,IAAI,uBAAuB;AACnC,UAAQ,IAAI,cAAc,OAAO,eAAe,aAAa,gBAAgB;AAC7E,UAAQ,IAAI,iBAAiB,OAAO,iBAAiB,YAAY,gBAAgB;EAEjF,MAAM,SAAS,MAAM,cAAc;GAAE;GAAY;GAAe,CAAC;AAEjE,MAAI,OAAO,cACT,SAAQ,IAAI,4BAA4B;MAExC,SAAQ,IAAI,0CAA0C;AAGxD,MAAI,OAAO,iBACT,SAAQ,IAAI,oCAAoC;MAEhD,SAAQ,IAAI,6CAA6C;AAG3D,+BAA6B,OAAO,OAAO;AAE3C,UAAQ,IAAI,OAAO,IAAI,OAAO,GAAG,CAAC;AAClC,UAAQ,IAAI,wBAAwB;AAEpC,UAAQ,IAAI,YAAY;AACxB,UAAQ,IAAI,cAAc,WAAW;AACrC,UAAQ,IAAI,iBAAiB,cAAc;AAE3C,UAAQ,IAAI,mBAAmB;AAC/B,UAAQ,IAAI,6EAA6E;AACzF,UAAQ,IAAI,uDAAuD;AACnE,UAAQ,IAAI,sDAAsD;AAClE,UAAQ,IAAI,wDAAwD;GAG9D;;AAGZ,SAAS;CACP,IAAI;CACJ,MAAM;CACN,aAAa;CACb,SAAS;CACT,UAAU;EACR,UAAU;EACV,UAAU,CACR,cACA,yCACD;EACF;CACF,CAAC"}
@@ -3,8 +3,8 @@ import { init_paths, resolveBundledSkillsDir, resolveSkillsLockPath } from "../.
3
3
  import { findInstallSpec, getDefaultInstallerPreferences, hasBinary, installSkill } from "../../agent/skills/installer.js";
4
4
  import { createSkillConfigManager, isSkillEnabled } from "../../agent/skills/config.js";
5
5
  import { formatScanSummary, scanSkillDirectory } from "../../agent/skills/scanner.js";
6
- import { createSkillLoader } from "../../agent/skills/index.js";
7
6
  import { loadSkillsLock } from "../../agent/skills/hub-lock.js";
7
+ import { createSkillLoader } from "../../agent/skills/index.js";
8
8
  import { register } from "../registry.js";
9
9
  import { pullSkillFromSource, updateSkillFromLock } from "../../agent/skills/hub-pull.js";
10
10
  import { createSkillsTestCommand } from "./skills-test.js";
@@ -1,5 +1,5 @@
1
1
  import { formatExamples, register } from "../registry.js";
2
- import { getContextWithOpts } from "../index.js";
2
+ import { getContextWithOpts } from "../context.js";
3
3
  import { Command } from "commander";
4
4
  //#region src/cli/commands/tailscale.ts
5
5
  function createTailscaleCommand(_ctx) {
@@ -1 +1 @@
1
- {"version":3,"file":"tailscale.js","names":[],"sources":["../../../../src/cli/commands/tailscale.ts"],"sourcesContent":["import { Command } from 'commander';\n\nimport { register, formatExamples, type CLIContext } from '../registry.js';\nimport { getContextWithOpts } from '../index.js';\n\nfunction createTailscaleCommand(_ctx: CLIContext): Command {\n return new Command('tailscale')\n .description('Tailscale status for gateway remote access')\n .addCommand(\n new Command('status')\n .description('Show tailnet IP, hostname, and Serve/Funnel state')\n .action(async () => {\n const {\n getTailnetIPv4,\n getTailnetHostname,\n isTailscaleInstalled,\n } = await import('../../infra/tailscale.js');\n const { getTailscaleExposureState } = await import('../../gateway/tailscale-lifecycle.js');\n\n const installed = await isTailscaleInstalled();\n if (!installed) {\n console.log('Tailscale: not installed or not found in PATH');\n process.exit(1);\n }\n\n const ip = await getTailnetIPv4();\n let hostname: string | null = null;\n try {\n hostname = await getTailnetHostname();\n } catch {\n hostname = null;\n }\n\n const exposure = getTailscaleExposureState();\n console.log('Tailscale');\n console.log(` Tailnet IPv4: ${ip ?? '(unavailable)'}`);\n console.log(` MagicDNS: ${hostname ?? '(unavailable)'}`);\n console.log(` Gateway exposure: ${exposure.mode}${exposure.active ? ' (active)' : ''}`);\n if (hostname && exposure.active) {\n console.log(` URL: https://${hostname}/`);\n }\n }),\n )\n .addHelpText(\n 'after',\n formatExamples(['xopc tailscale status']),\n );\n}\n\nregister({\n id: 'tailscale',\n name: 'tailscale',\n description: 'Tailscale helpers for gateway exposure',\n factory: () => createTailscaleCommand(getContextWithOpts()),\n metadata: {\n category: 'runtime',\n examples: ['xopc tailscale status'],\n },\n});\n\nexport default createTailscaleCommand;\n"],"mappings":";;;;AAKA,SAAS,uBAAuB,MAA2B;AACzD,QAAO,IAAI,QAAQ,YAAY,CAC5B,YAAY,6CAA6C,CACzD,WACC,IAAI,QAAQ,SAAS,CAClB,YAAY,oDAAoD,CAChE,OAAO,YAAY;EAClB,MAAM,EACJ,gBACA,oBACA,yBACE,MAAM,OAAO;EACjB,MAAM,EAAE,8BAA8B,MAAM,OAAO;AAGnD,MAAI,CAAC,MADmB,sBAAsB,EAC9B;AACd,WAAQ,IAAI,gDAAgD;AAC5D,WAAQ,KAAK,EAAE;;EAGjB,MAAM,KAAK,MAAM,gBAAgB;EACjC,IAAI,WAA0B;AAC9B,MAAI;AACF,cAAW,MAAM,oBAAoB;UAC/B;AACN,cAAW;;EAGb,MAAM,WAAW,2BAA2B;AAC5C,UAAQ,IAAI,YAAY;AACxB,UAAQ,IAAI,mBAAmB,MAAM,kBAAkB;AACvD,UAAQ,IAAI,mBAAmB,YAAY,kBAAkB;AAC7D,UAAQ,IAAI,uBAAuB,SAAS,OAAO,SAAS,SAAS,cAAc,KAAK;AACxF,MAAI,YAAY,SAAS,OACvB,SAAQ,IAAI,kBAAkB,SAAS,GAAG;GAE5C,CACL,CACA,YACC,SACA,eAAe,CAAC,wBAAwB,CAAC,CAC1C;;AAGL,SAAS;CACP,IAAI;CACJ,MAAM;CACN,aAAa;CACb,eAAe,uBAAuB,oBAAoB,CAAC;CAC3D,UAAU;EACR,UAAU;EACV,UAAU,CAAC,wBAAwB;EACpC;CACF,CAAC"}
1
+ {"version":3,"file":"tailscale.js","names":[],"sources":["../../../../src/cli/commands/tailscale.ts"],"sourcesContent":["import { Command } from 'commander';\n\nimport { register, formatExamples, type CLIContext } from '../registry.js';\nimport { getContextWithOpts } from '../context.js';\n\nfunction createTailscaleCommand(_ctx: CLIContext): Command {\n return new Command('tailscale')\n .description('Tailscale status for gateway remote access')\n .addCommand(\n new Command('status')\n .description('Show tailnet IP, hostname, and Serve/Funnel state')\n .action(async () => {\n const {\n getTailnetIPv4,\n getTailnetHostname,\n isTailscaleInstalled,\n } = await import('../../infra/tailscale.js');\n const { getTailscaleExposureState } = await import('../../gateway/tailscale-lifecycle.js');\n\n const installed = await isTailscaleInstalled();\n if (!installed) {\n console.log('Tailscale: not installed or not found in PATH');\n process.exit(1);\n }\n\n const ip = await getTailnetIPv4();\n let hostname: string | null = null;\n try {\n hostname = await getTailnetHostname();\n } catch {\n hostname = null;\n }\n\n const exposure = getTailscaleExposureState();\n console.log('Tailscale');\n console.log(` Tailnet IPv4: ${ip ?? '(unavailable)'}`);\n console.log(` MagicDNS: ${hostname ?? '(unavailable)'}`);\n console.log(` Gateway exposure: ${exposure.mode}${exposure.active ? ' (active)' : ''}`);\n if (hostname && exposure.active) {\n console.log(` URL: https://${hostname}/`);\n }\n }),\n )\n .addHelpText(\n 'after',\n formatExamples(['xopc tailscale status']),\n );\n}\n\nregister({\n id: 'tailscale',\n name: 'tailscale',\n description: 'Tailscale helpers for gateway exposure',\n factory: () => createTailscaleCommand(getContextWithOpts()),\n metadata: {\n category: 'runtime',\n examples: ['xopc tailscale status'],\n },\n});\n\nexport default createTailscaleCommand;\n"],"mappings":";;;;AAKA,SAAS,uBAAuB,MAA2B;AACzD,QAAO,IAAI,QAAQ,YAAY,CAC5B,YAAY,6CAA6C,CACzD,WACC,IAAI,QAAQ,SAAS,CAClB,YAAY,oDAAoD,CAChE,OAAO,YAAY;EAClB,MAAM,EACJ,gBACA,oBACA,yBACE,MAAM,OAAO;EACjB,MAAM,EAAE,8BAA8B,MAAM,OAAO;AAGnD,MAAI,CAAC,MADmB,sBAAsB,EAC9B;AACd,WAAQ,IAAI,gDAAgD;AAC5D,WAAQ,KAAK,EAAE;;EAGjB,MAAM,KAAK,MAAM,gBAAgB;EACjC,IAAI,WAA0B;AAC9B,MAAI;AACF,cAAW,MAAM,oBAAoB;UAC/B;AACN,cAAW;;EAGb,MAAM,WAAW,2BAA2B;AAC5C,UAAQ,IAAI,YAAY;AACxB,UAAQ,IAAI,mBAAmB,MAAM,kBAAkB;AACvD,UAAQ,IAAI,mBAAmB,YAAY,kBAAkB;AAC7D,UAAQ,IAAI,uBAAuB,SAAS,OAAO,SAAS,SAAS,cAAc,KAAK;AACxF,MAAI,YAAY,SAAS,OACvB,SAAQ,IAAI,kBAAkB,SAAS,GAAG;GAE5C,CACL,CACA,YACC,SACA,eAAe,CAAC,wBAAwB,CAAC,CAC1C;;AAGL,SAAS;CACP,IAAI;CACJ,MAAM;CACN,aAAa;CACb,eAAe,uBAAuB,oBAAoB,CAAC;CAC3D,UAAU;EACR,UAAU;EACV,UAAU,CAAC,wBAAwB;EACpC;CACF,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * CLI parsed-options + context builder.
3
+ *
4
+ * Extracted from `cli/index.ts` so command modules can import
5
+ * `getContextWithOpts` without pulling the full CLI wiring graph (which
6
+ * imports `command-loaders.ts`, which lazy-imports every command file). Before
7
+ * this split, every command file circularly depended on `cli/index.ts` →
8
+ * `command-loaders.ts` → that same command file.
9
+ */
10
+ import { type CLIContext } from './registry.js';
11
+ /**
12
+ * Global parsed options — updated before each command via the Commander
13
+ * `preAction` hook in `cli/index.ts`.
14
+ */
15
+ export declare const parsedOpts: {
16
+ config?: string;
17
+ workspace?: string;
18
+ verbose?: boolean;
19
+ };
20
+ export declare function getContextWithOpts(argv?: string[]): CLIContext;
@@ -0,0 +1,23 @@
1
+ import { createDefaultContext } from "./registry.js";
2
+ //#region src/cli/context.ts
3
+ /**
4
+ * CLI parsed-options + context builder.
5
+ *
6
+ * Extracted from `cli/index.ts` so command modules can import
7
+ * `getContextWithOpts` without pulling the full CLI wiring graph (which
8
+ * imports `command-loaders.ts`, which lazy-imports every command file). Before
9
+ * this split, every command file circularly depended on `cli/index.ts` →
10
+ * `command-loaders.ts` → that same command file.
11
+ */
12
+ /**
13
+ * Global parsed options — updated before each command via the Commander
14
+ * `preAction` hook in `cli/index.ts`.
15
+ */
16
+ const parsedOpts = {};
17
+ function getContextWithOpts(argv = process.argv) {
18
+ return createDefaultContext(argv, parsedOpts);
19
+ }
20
+ //#endregion
21
+ export { getContextWithOpts, parsedOpts };
22
+
23
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../src/cli/context.ts"],"sourcesContent":["/**\n * CLI parsed-options + context builder.\n *\n * Extracted from `cli/index.ts` so command modules can import\n * `getContextWithOpts` without pulling the full CLI wiring graph (which\n * imports `command-loaders.ts`, which lazy-imports every command file). Before\n * this split, every command file circularly depended on `cli/index.ts` →\n * `command-loaders.ts` → that same command file.\n */\n\nimport { createDefaultContext, type CLIContext } from './registry.js';\n\n/**\n * Global parsed options — updated before each command via the Commander\n * `preAction` hook in `cli/index.ts`.\n */\nexport const parsedOpts: { config?: string; workspace?: string; verbose?: boolean } = {};\n\nexport function getContextWithOpts(argv: string[] = process.argv): CLIContext {\n return createDefaultContext(argv, parsedOpts);\n}\n"],"mappings":";;;;;;;;;;;;;;;AAgBA,MAAa,aAAyE,EAAE;AAExF,SAAgB,mBAAmB,OAAiB,QAAQ,MAAkB;AAC5E,QAAO,qBAAqB,MAAM,WAAW"}
@@ -1,10 +1,10 @@
1
- import { getWorkspacePath } from "../config/schema.js";
2
1
  import { loadConfig } from "../config/loader.js";
3
- import { MessageBus } from "../infra/bus/queue.js";
4
- import "../infra/bus/index.js";
5
2
  import { collectConfiguredChannelIds } from "../extensions/activation-context.js";
3
+ import { getWorkspacePath } from "../config/workspace-path-helpers.js";
6
4
  import { ExtensionLoader } from "../extensions/loader.js";
7
5
  import "../extensions/index.js";
6
+ import { MessageBus } from "../infra/bus/queue.js";
7
+ import "../infra/bus/index.js";
8
8
  import { createDefaultContext } from "./registry.js";
9
9
  import "../config/index.js";
10
10
  import { registerExtensionCliProgram } from "../extensions/sdk/channel-helpers.js";
@@ -10,8 +10,7 @@ const GATEWAY_RUN_BOOLEAN_FLAGS = new Set([
10
10
  "--tailscale-reset-on-exit",
11
11
  "--force",
12
12
  "--no-hot-reload",
13
- "--foreground",
14
- "--background"
13
+ "--foreground"
15
14
  ]);
16
15
  const GATEWAY_SUBCOMMANDS = new Set([
17
16
  "token",
@@ -22,10 +21,7 @@ const GATEWAY_SUBCOMMANDS = new Set([
22
21
  "stop",
23
22
  "restart",
24
23
  "logs",
25
- "install",
26
- "uninstall",
27
- "start",
28
- "service-status",
24
+ "service",
29
25
  "ssh-tunnel"
30
26
  ]);
31
27
  function isValueToken(token) {
@@ -74,13 +70,26 @@ function resolveGatewayCatalogCommandPath(argv) {
74
70
  continue;
75
71
  }
76
72
  if (arg.startsWith("-")) continue;
73
+ if (arg === "service") {
74
+ for (let nestedIndex = index + 1; nestedIndex < args.length; nestedIndex += 1) {
75
+ const nested = args[nestedIndex];
76
+ if (!nested || nested === "--") break;
77
+ if (nested.startsWith("-")) continue;
78
+ return [
79
+ "gateway",
80
+ "service",
81
+ nested
82
+ ];
83
+ }
84
+ return ["gateway", "service"];
85
+ }
77
86
  return ["gateway", arg];
78
87
  }
79
88
  return sawGateway ? ["gateway"] : null;
80
89
  }
81
90
  function resolveGatewaySubcommandName(argv) {
82
91
  const path = resolveGatewayCatalogCommandPath(argv);
83
- return path && path.length === 2 ? path[1] : void 0;
92
+ return path && path.length >= 2 ? path[1] : void 0;
84
93
  }
85
94
  function isGatewayRunFastPathArgv(argv) {
86
95
  if (process.env.XOPC_DISABLE_GATEWAY_RUN_FAST_PATH === "1") return false;
@@ -102,8 +111,6 @@ function isGatewayRunFastPathArgv(argv) {
102
111
  }
103
112
  const consumed = consumeGatewayRunOptionToken(args, index);
104
113
  if (consumed > 0) {
105
- const flag = args[index] ?? "";
106
- if (flag === "--background" || flag.startsWith("--background=")) return false;
107
114
  index += consumed - 1;
108
115
  continue;
109
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-run-argv.js","names":[],"sources":["../../../src/cli/gateway-run-argv.ts"],"sourcesContent":["import { resolveCliArgvInvocation } from './argv-invocation.js';\n\nconst GATEWAY_RUN_VALUE_FLAGS = new Set([\n '--port',\n '--bind',\n '--token',\n '--tailscale',\n]);\n\nconst GATEWAY_RUN_BOOLEAN_FLAGS = new Set([\n '--tailscale-reset-on-exit',\n '--force',\n '--no-hot-reload',\n '--foreground',\n '--background',\n]);\n\nconst GATEWAY_SUBCOMMANDS = new Set([\n 'token',\n 'status',\n 'health',\n 'call',\n 'probe',\n 'stop',\n 'restart',\n 'logs',\n 'install',\n 'uninstall',\n 'start',\n 'service-status',\n 'ssh-tunnel',\n]);\n\nfunction isValueToken(token: string | undefined): boolean {\n return typeof token === 'string' && token.length > 0 && !token.startsWith('-');\n}\n\nexport function consumeGatewayRunOptionToken(args: ReadonlyArray<string>, index: number): number {\n const arg = args[index];\n if (!arg || arg === '--' || !arg.startsWith('-')) {\n return 0;\n }\n const equalsIndex = arg.indexOf('=');\n const flag = equalsIndex === -1 ? arg : arg.slice(0, equalsIndex);\n if (GATEWAY_RUN_BOOLEAN_FLAGS.has(flag)) {\n return equalsIndex === -1 ? 1 : 0;\n }\n if (!GATEWAY_RUN_VALUE_FLAGS.has(flag)) {\n return 0;\n }\n if (equalsIndex !== -1) {\n return arg.slice(equalsIndex + 1).trim() ? 1 : 0;\n }\n return isValueToken(args[index + 1]) ? 2 : 0;\n}\n\nexport function consumeGatewayFastPathRootOptionToken(\n args: ReadonlyArray<string>,\n index: number,\n): number {\n const arg = args[index];\n if (!arg || arg === '--') {\n return 0;\n }\n if (arg.startsWith('--config=')) {\n return arg.slice('--config='.length).trim() ? 1 : 0;\n }\n if (arg === '--config') {\n return isValueToken(args[index + 1]) ? 2 : 0;\n }\n if (arg.startsWith('--workspace=')) {\n return arg.slice('--workspace='.length).trim() ? 1 : 0;\n }\n if (arg === '--workspace') {\n return isValueToken(args[index + 1]) ? 2 : 0;\n }\n if (arg === '--verbose' || arg === '-v') {\n return 1;\n }\n return 0;\n}\n\nexport function resolveGatewayCatalogCommandPath(argv: string[]): string[] | null {\n const args = argv.slice(2).filter((arg) => arg !== '--');\n let sawGateway = false;\n\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index];\n if (!arg || arg === '--') {\n break;\n }\n if (!sawGateway) {\n const consumed = consumeGatewayFastPathRootOptionToken(args, index);\n if (consumed > 0) {\n index += consumed - 1;\n continue;\n }\n if (arg.startsWith('-')) {\n continue;\n }\n if (arg !== 'gateway') {\n return null;\n }\n sawGateway = true;\n continue;\n }\n\n const consumed = consumeGatewayRunOptionToken(args, index);\n if (consumed > 0) {\n index += consumed - 1;\n continue;\n }\n if (arg.startsWith('-')) {\n continue;\n }\n return ['gateway', arg];\n }\n\n return sawGateway ? ['gateway'] : null;\n}\n\nexport function resolveGatewaySubcommandName(argv: string[]): string | undefined {\n const path = resolveGatewayCatalogCommandPath(argv);\n return path && path.length === 2 ? path[1] : undefined;\n}\n\nexport function isGatewayRunFastPathArgv(argv: string[]): boolean {\n if (process.env.XOPC_DISABLE_GATEWAY_RUN_FAST_PATH === '1') {\n return false;\n }\n\n const invocation = resolveCliArgvInvocation(argv);\n if (invocation.hasHelpOrVersion) {\n return false;\n }\n\n const args = argv.slice(2).filter((arg) => arg !== '--');\n let sawGateway = false;\n\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index];\n if (!arg || arg === '--') {\n return false;\n }\n if (!sawGateway) {\n const consumed = consumeGatewayFastPathRootOptionToken(args, index);\n if (consumed > 0) {\n index += consumed - 1;\n continue;\n }\n if (arg !== 'gateway') {\n return false;\n }\n sawGateway = true;\n continue;\n }\n\n const consumed = consumeGatewayRunOptionToken(args, index);\n if (consumed > 0) {\n const flag = args[index] ?? '';\n if (flag === '--background' || flag.startsWith('--background=')) {\n return false;\n }\n index += consumed - 1;\n continue;\n }\n if (arg.startsWith('-')) {\n continue;\n }\n return false;\n }\n\n return sawGateway;\n}\n\nexport function isKnownGatewaySubcommand(name: string): boolean {\n return GATEWAY_SUBCOMMANDS.has(name);\n}\n"],"mappings":";;AAEA,MAAM,0BAA0B,IAAI,IAAI;CACtC;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAM,4BAA4B,IAAI,IAAI;CACxC;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAM,sBAAsB,IAAI,IAAI;CAClC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAS,aAAa,OAAoC;AACxD,QAAO,OAAO,UAAU,YAAY,MAAM,SAAS,KAAK,CAAC,MAAM,WAAW,IAAI;;AAGhF,SAAgB,6BAA6B,MAA6B,OAAuB;CAC/F,MAAM,MAAM,KAAK;AACjB,KAAI,CAAC,OAAO,QAAQ,QAAQ,CAAC,IAAI,WAAW,IAAI,CAC9C,QAAO;CAET,MAAM,cAAc,IAAI,QAAQ,IAAI;CACpC,MAAM,OAAO,gBAAgB,KAAK,MAAM,IAAI,MAAM,GAAG,YAAY;AACjE,KAAI,0BAA0B,IAAI,KAAK,CACrC,QAAO,gBAAgB,KAAK,IAAI;AAElC,KAAI,CAAC,wBAAwB,IAAI,KAAK,CACpC,QAAO;AAET,KAAI,gBAAgB,GAClB,QAAO,IAAI,MAAM,cAAc,EAAE,CAAC,MAAM,GAAG,IAAI;AAEjD,QAAO,aAAa,KAAK,QAAQ,GAAG,GAAG,IAAI;;AAG7C,SAAgB,sCACd,MACA,OACQ;CACR,MAAM,MAAM,KAAK;AACjB,KAAI,CAAC,OAAO,QAAQ,KAClB,QAAO;AAET,KAAI,IAAI,WAAW,YAAY,CAC7B,QAAO,IAAI,MAAM,EAAmB,CAAC,MAAM,GAAG,IAAI;AAEpD,KAAI,QAAQ,WACV,QAAO,aAAa,KAAK,QAAQ,GAAG,GAAG,IAAI;AAE7C,KAAI,IAAI,WAAW,eAAe,CAChC,QAAO,IAAI,MAAM,GAAsB,CAAC,MAAM,GAAG,IAAI;AAEvD,KAAI,QAAQ,cACV,QAAO,aAAa,KAAK,QAAQ,GAAG,GAAG,IAAI;AAE7C,KAAI,QAAQ,eAAe,QAAQ,KACjC,QAAO;AAET,QAAO;;AAGT,SAAgB,iCAAiC,MAAiC;CAChF,MAAM,OAAO,KAAK,MAAM,EAAE,CAAC,QAAQ,QAAQ,QAAQ,KAAK;CACxD,IAAI,aAAa;AAEjB,MAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;EACnD,MAAM,MAAM,KAAK;AACjB,MAAI,CAAC,OAAO,QAAQ,KAClB;AAEF,MAAI,CAAC,YAAY;GACf,MAAM,WAAW,sCAAsC,MAAM,MAAM;AACnE,OAAI,WAAW,GAAG;AAChB,aAAS,WAAW;AACpB;;AAEF,OAAI,IAAI,WAAW,IAAI,CACrB;AAEF,OAAI,QAAQ,UACV,QAAO;AAET,gBAAa;AACb;;EAGF,MAAM,WAAW,6BAA6B,MAAM,MAAM;AAC1D,MAAI,WAAW,GAAG;AAChB,YAAS,WAAW;AACpB;;AAEF,MAAI,IAAI,WAAW,IAAI,CACrB;AAEF,SAAO,CAAC,WAAW,IAAI;;AAGzB,QAAO,aAAa,CAAC,UAAU,GAAG;;AAGpC,SAAgB,6BAA6B,MAAoC;CAC/E,MAAM,OAAO,iCAAiC,KAAK;AACnD,QAAO,QAAQ,KAAK,WAAW,IAAI,KAAK,KAAK,KAAA;;AAG/C,SAAgB,yBAAyB,MAAyB;AAChE,KAAI,QAAQ,IAAI,uCAAuC,IACrD,QAAO;AAIT,KADmB,yBAAyB,KAC9B,CAAC,iBACb,QAAO;CAGT,MAAM,OAAO,KAAK,MAAM,EAAE,CAAC,QAAQ,QAAQ,QAAQ,KAAK;CACxD,IAAI,aAAa;AAEjB,MAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;EACnD,MAAM,MAAM,KAAK;AACjB,MAAI,CAAC,OAAO,QAAQ,KAClB,QAAO;AAET,MAAI,CAAC,YAAY;GACf,MAAM,WAAW,sCAAsC,MAAM,MAAM;AACnE,OAAI,WAAW,GAAG;AAChB,aAAS,WAAW;AACpB;;AAEF,OAAI,QAAQ,UACV,QAAO;AAET,gBAAa;AACb;;EAGF,MAAM,WAAW,6BAA6B,MAAM,MAAM;AAC1D,MAAI,WAAW,GAAG;GAChB,MAAM,OAAO,KAAK,UAAU;AAC5B,OAAI,SAAS,kBAAkB,KAAK,WAAW,gBAAgB,CAC7D,QAAO;AAET,YAAS,WAAW;AACpB;;AAEF,MAAI,IAAI,WAAW,IAAI,CACrB;AAEF,SAAO;;AAGT,QAAO;;AAGT,SAAgB,yBAAyB,MAAuB;AAC9D,QAAO,oBAAoB,IAAI,KAAK"}
1
+ {"version":3,"file":"gateway-run-argv.js","names":[],"sources":["../../../src/cli/gateway-run-argv.ts"],"sourcesContent":["import { resolveCliArgvInvocation } from './argv-invocation.js';\n\nconst GATEWAY_RUN_VALUE_FLAGS = new Set([\n '--port',\n '--bind',\n '--token',\n '--tailscale',\n]);\n\nconst GATEWAY_RUN_BOOLEAN_FLAGS = new Set([\n '--tailscale-reset-on-exit',\n '--force',\n '--no-hot-reload',\n '--foreground',\n]);\n\nconst GATEWAY_SUBCOMMANDS = new Set([\n 'token',\n 'status',\n 'health',\n 'call',\n 'probe',\n 'stop',\n 'restart',\n 'logs',\n 'service',\n 'ssh-tunnel',\n]);\n\nfunction isValueToken(token: string | undefined): boolean {\n return typeof token === 'string' && token.length > 0 && !token.startsWith('-');\n}\n\nexport function consumeGatewayRunOptionToken(args: ReadonlyArray<string>, index: number): number {\n const arg = args[index];\n if (!arg || arg === '--' || !arg.startsWith('-')) {\n return 0;\n }\n const equalsIndex = arg.indexOf('=');\n const flag = equalsIndex === -1 ? arg : arg.slice(0, equalsIndex);\n if (GATEWAY_RUN_BOOLEAN_FLAGS.has(flag)) {\n return equalsIndex === -1 ? 1 : 0;\n }\n if (!GATEWAY_RUN_VALUE_FLAGS.has(flag)) {\n return 0;\n }\n if (equalsIndex !== -1) {\n return arg.slice(equalsIndex + 1).trim() ? 1 : 0;\n }\n return isValueToken(args[index + 1]) ? 2 : 0;\n}\n\nexport function consumeGatewayFastPathRootOptionToken(\n args: ReadonlyArray<string>,\n index: number,\n): number {\n const arg = args[index];\n if (!arg || arg === '--') {\n return 0;\n }\n if (arg.startsWith('--config=')) {\n return arg.slice('--config='.length).trim() ? 1 : 0;\n }\n if (arg === '--config') {\n return isValueToken(args[index + 1]) ? 2 : 0;\n }\n if (arg.startsWith('--workspace=')) {\n return arg.slice('--workspace='.length).trim() ? 1 : 0;\n }\n if (arg === '--workspace') {\n return isValueToken(args[index + 1]) ? 2 : 0;\n }\n if (arg === '--verbose' || arg === '-v') {\n return 1;\n }\n return 0;\n}\n\nexport function resolveGatewayCatalogCommandPath(argv: string[]): string[] | null {\n const args = argv.slice(2).filter((arg) => arg !== '--');\n let sawGateway = false;\n\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index];\n if (!arg || arg === '--') {\n break;\n }\n if (!sawGateway) {\n const consumed = consumeGatewayFastPathRootOptionToken(args, index);\n if (consumed > 0) {\n index += consumed - 1;\n continue;\n }\n if (arg.startsWith('-')) {\n continue;\n }\n if (arg !== 'gateway') {\n return null;\n }\n sawGateway = true;\n continue;\n }\n\n const consumed = consumeGatewayRunOptionToken(args, index);\n if (consumed > 0) {\n index += consumed - 1;\n continue;\n }\n if (arg.startsWith('-')) {\n continue;\n }\n if (arg === 'service') {\n for (let nestedIndex = index + 1; nestedIndex < args.length; nestedIndex += 1) {\n const nested = args[nestedIndex];\n if (!nested || nested === '--') {\n break;\n }\n if (nested.startsWith('-')) {\n continue;\n }\n return ['gateway', 'service', nested];\n }\n return ['gateway', 'service'];\n }\n return ['gateway', arg];\n }\n\n return sawGateway ? ['gateway'] : null;\n}\n\nexport function resolveGatewaySubcommandName(argv: string[]): string | undefined {\n const path = resolveGatewayCatalogCommandPath(argv);\n return path && path.length >= 2 ? path[1] : undefined;\n}\n\nexport function isGatewayRunFastPathArgv(argv: string[]): boolean {\n if (process.env.XOPC_DISABLE_GATEWAY_RUN_FAST_PATH === '1') {\n return false;\n }\n\n const invocation = resolveCliArgvInvocation(argv);\n if (invocation.hasHelpOrVersion) {\n return false;\n }\n\n const args = argv.slice(2).filter((arg) => arg !== '--');\n let sawGateway = false;\n\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index];\n if (!arg || arg === '--') {\n return false;\n }\n if (!sawGateway) {\n const consumed = consumeGatewayFastPathRootOptionToken(args, index);\n if (consumed > 0) {\n index += consumed - 1;\n continue;\n }\n if (arg !== 'gateway') {\n return false;\n }\n sawGateway = true;\n continue;\n }\n\n const consumed = consumeGatewayRunOptionToken(args, index);\n if (consumed > 0) {\n index += consumed - 1;\n continue;\n }\n if (arg.startsWith('-')) {\n continue;\n }\n return false;\n }\n\n return sawGateway;\n}\n\nexport function isKnownGatewaySubcommand(name: string): boolean {\n return GATEWAY_SUBCOMMANDS.has(name);\n}\n"],"mappings":";;AAEA,MAAM,0BAA0B,IAAI,IAAI;CACtC;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAM,4BAA4B,IAAI,IAAI;CACxC;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAM,sBAAsB,IAAI,IAAI;CAClC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAS,aAAa,OAAoC;AACxD,QAAO,OAAO,UAAU,YAAY,MAAM,SAAS,KAAK,CAAC,MAAM,WAAW,IAAI;;AAGhF,SAAgB,6BAA6B,MAA6B,OAAuB;CAC/F,MAAM,MAAM,KAAK;AACjB,KAAI,CAAC,OAAO,QAAQ,QAAQ,CAAC,IAAI,WAAW,IAAI,CAC9C,QAAO;CAET,MAAM,cAAc,IAAI,QAAQ,IAAI;CACpC,MAAM,OAAO,gBAAgB,KAAK,MAAM,IAAI,MAAM,GAAG,YAAY;AACjE,KAAI,0BAA0B,IAAI,KAAK,CACrC,QAAO,gBAAgB,KAAK,IAAI;AAElC,KAAI,CAAC,wBAAwB,IAAI,KAAK,CACpC,QAAO;AAET,KAAI,gBAAgB,GAClB,QAAO,IAAI,MAAM,cAAc,EAAE,CAAC,MAAM,GAAG,IAAI;AAEjD,QAAO,aAAa,KAAK,QAAQ,GAAG,GAAG,IAAI;;AAG7C,SAAgB,sCACd,MACA,OACQ;CACR,MAAM,MAAM,KAAK;AACjB,KAAI,CAAC,OAAO,QAAQ,KAClB,QAAO;AAET,KAAI,IAAI,WAAW,YAAY,CAC7B,QAAO,IAAI,MAAM,EAAmB,CAAC,MAAM,GAAG,IAAI;AAEpD,KAAI,QAAQ,WACV,QAAO,aAAa,KAAK,QAAQ,GAAG,GAAG,IAAI;AAE7C,KAAI,IAAI,WAAW,eAAe,CAChC,QAAO,IAAI,MAAM,GAAsB,CAAC,MAAM,GAAG,IAAI;AAEvD,KAAI,QAAQ,cACV,QAAO,aAAa,KAAK,QAAQ,GAAG,GAAG,IAAI;AAE7C,KAAI,QAAQ,eAAe,QAAQ,KACjC,QAAO;AAET,QAAO;;AAGT,SAAgB,iCAAiC,MAAiC;CAChF,MAAM,OAAO,KAAK,MAAM,EAAE,CAAC,QAAQ,QAAQ,QAAQ,KAAK;CACxD,IAAI,aAAa;AAEjB,MAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;EACnD,MAAM,MAAM,KAAK;AACjB,MAAI,CAAC,OAAO,QAAQ,KAClB;AAEF,MAAI,CAAC,YAAY;GACf,MAAM,WAAW,sCAAsC,MAAM,MAAM;AACnE,OAAI,WAAW,GAAG;AAChB,aAAS,WAAW;AACpB;;AAEF,OAAI,IAAI,WAAW,IAAI,CACrB;AAEF,OAAI,QAAQ,UACV,QAAO;AAET,gBAAa;AACb;;EAGF,MAAM,WAAW,6BAA6B,MAAM,MAAM;AAC1D,MAAI,WAAW,GAAG;AAChB,YAAS,WAAW;AACpB;;AAEF,MAAI,IAAI,WAAW,IAAI,CACrB;AAEF,MAAI,QAAQ,WAAW;AACrB,QAAK,IAAI,cAAc,QAAQ,GAAG,cAAc,KAAK,QAAQ,eAAe,GAAG;IAC7E,MAAM,SAAS,KAAK;AACpB,QAAI,CAAC,UAAU,WAAW,KACxB;AAEF,QAAI,OAAO,WAAW,IAAI,CACxB;AAEF,WAAO;KAAC;KAAW;KAAW;KAAO;;AAEvC,UAAO,CAAC,WAAW,UAAU;;AAE/B,SAAO,CAAC,WAAW,IAAI;;AAGzB,QAAO,aAAa,CAAC,UAAU,GAAG;;AAGpC,SAAgB,6BAA6B,MAAoC;CAC/E,MAAM,OAAO,iCAAiC,KAAK;AACnD,QAAO,QAAQ,KAAK,UAAU,IAAI,KAAK,KAAK,KAAA;;AAG9C,SAAgB,yBAAyB,MAAyB;AAChE,KAAI,QAAQ,IAAI,uCAAuC,IACrD,QAAO;AAIT,KADmB,yBAAyB,KAC9B,CAAC,iBACb,QAAO;CAGT,MAAM,OAAO,KAAK,MAAM,EAAE,CAAC,QAAQ,QAAQ,QAAQ,KAAK;CACxD,IAAI,aAAa;AAEjB,MAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;EACnD,MAAM,MAAM,KAAK;AACjB,MAAI,CAAC,OAAO,QAAQ,KAClB,QAAO;AAET,MAAI,CAAC,YAAY;GACf,MAAM,WAAW,sCAAsC,MAAM,MAAM;AACnE,OAAI,WAAW,GAAG;AAChB,aAAS,WAAW;AACpB;;AAEF,OAAI,QAAQ,UACV,QAAO;AAET,gBAAa;AACb;;EAGF,MAAM,WAAW,6BAA6B,MAAM,MAAM;AAC1D,MAAI,WAAW,GAAG;AAChB,YAAS,WAAW;AACpB;;AAEF,MAAI,IAAI,WAAW,IAAI,CACrB;AAEF,SAAO;;AAGT,QAAO;;AAGT,SAAgB,yBAAyB,MAAuB;AAC9D,QAAO,oBAAoB,IAAI,KAAK"}
@@ -8,7 +8,7 @@ function getContextWithOpts(argv = process.argv) {
8
8
  return createDefaultContext(argv, parsedOpts);
9
9
  }
10
10
  function buildGatewayRunOptions(cmd) {
11
- return cmd.description("Start the xopc gateway server").option("--bind <mode>", "Bind mode: loopback | lan | auto | custom | tailnet").option("--port <number>", "Port to listen on (defaults to gateway.port in config, else 18790)").option("--token <token>", "Authentication token").option("--tailscale <mode>", "Tailscale exposure: off | serve | funnel (overrides config for this run)").option("--tailscale-reset-on-exit", "Reset Tailscale serve/funnel on gateway shutdown", false).option("--force", "Force kill existing process on port", false).option("--no-hot-reload", "Disable config hot reload").option("--foreground", "Start gateway in foreground mode (blocks terminal)", true).option("--background", "Start gateway in background mode (detached)", false);
11
+ return cmd.description("Start the xopc gateway server").option("--bind <mode>", "Bind mode: loopback | lan | auto | custom | tailnet").option("--port <number>", "Port to listen on (defaults to gateway.port in config, else 18790)").option("--token <token>", "Authentication token").option("--tailscale <mode>", "Tailscale exposure: off | serve | funnel (overrides config for this run)").option("--tailscale-reset-on-exit", "Reset Tailscale serve/funnel on gateway shutdown", false).option("--force", "Force kill existing process on port", false).option("--no-hot-reload", "Disable config hot reload").option("--foreground", "Start gateway in foreground mode (blocks terminal)", true);
12
12
  }
13
13
  async function tryRunGatewayRunFastPath(argv = process.argv) {
14
14
  if (!isGatewayRunFastPathArgv(argv)) return false;
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-run-fast-path.js","names":["pkg.version"],"sources":["../../../src/cli/gateway-run-fast-path.ts"],"sourcesContent":["import type { Command } from 'commander';\n\nimport { ROOT_COMMAND_DESCRIPTION } from './command-manifest.js';\nimport { createDefaultContext, type CLIContext } from './registry.js';\nimport { isGatewayRunFastPathArgv } from './gateway-run-argv.js';\nimport pkg from '../../package.json' with { type: 'json' };\n\nlet parsedOpts: { config?: string; workspace?: string; verbose?: boolean } = {};\n\nfunction getContextWithOpts(argv: string[] = process.argv): CLIContext {\n return createDefaultContext(argv, parsedOpts);\n}\n\nfunction buildGatewayRunOptions(cmd: Command) {\n return cmd\n .description('Start the xopc gateway server')\n .option('--bind <mode>', 'Bind mode: loopback | lan | auto | custom | tailnet')\n .option('--port <number>', 'Port to listen on (defaults to gateway.port in config, else 18790)')\n .option('--token <token>', 'Authentication token')\n .option(\n '--tailscale <mode>',\n 'Tailscale exposure: off | serve | funnel (overrides config for this run)',\n )\n .option('--tailscale-reset-on-exit', 'Reset Tailscale serve/funnel on gateway shutdown', false)\n .option('--force', 'Force kill existing process on port', false)\n .option('--no-hot-reload', 'Disable config hot reload')\n .option('--foreground', 'Start gateway in foreground mode (blocks terminal)', true)\n .option('--background', 'Start gateway in background mode (detached)', false);\n}\n\nexport async function tryRunGatewayRunFastPath(argv: string[] = process.argv): Promise<boolean> {\n if (!isGatewayRunFastPathArgv(argv)) {\n return false;\n }\n\n const { Command } = await import('commander');\n const { runGatewayFromCliOptions } = await import('./commands/gateway/run-foreground.js');\n\n const program = new Command()\n .name('xopc')\n .description(ROOT_COMMAND_DESCRIPTION)\n .version(pkg.version)\n .option('--verbose', 'Enable verbose logging', false)\n .option('--config <path>', 'Config file path')\n .option('--workspace <path>', 'Workspace directory');\n\n program.hook('preAction', (thisCommand) => {\n parsedOpts = thisCommand.opts();\n });\n\n const gateway = buildGatewayRunOptions(new Command('gateway'));\n gateway.action(async (options) => {\n await runGatewayFromCliOptions(options, getContextWithOpts(argv));\n });\n program.addCommand(gateway);\n\n await program.parseAsync(argv);\n\n const { flushAndClose } = await import('../utils/logger/shutdown.js');\n await flushAndClose();\n return true;\n}\n"],"mappings":";;;;;AAOA,IAAI,aAAyE,EAAE;AAE/E,SAAS,mBAAmB,OAAiB,QAAQ,MAAkB;AACrE,QAAO,qBAAqB,MAAM,WAAW;;AAG/C,SAAS,uBAAuB,KAAc;AAC5C,QAAO,IACJ,YAAY,gCAAgC,CAC5C,OAAO,iBAAiB,sDAAsD,CAC9E,OAAO,mBAAmB,qEAAqE,CAC/F,OAAO,mBAAmB,uBAAuB,CACjD,OACC,sBACA,2EACD,CACA,OAAO,6BAA6B,oDAAoD,MAAM,CAC9F,OAAO,WAAW,uCAAuC,MAAM,CAC/D,OAAO,mBAAmB,4BAA4B,CACtD,OAAO,gBAAgB,sDAAsD,KAAK,CAClF,OAAO,gBAAgB,+CAA+C,MAAM;;AAGjF,eAAsB,yBAAyB,OAAiB,QAAQ,MAAwB;AAC9F,KAAI,CAAC,yBAAyB,KAAK,CACjC,QAAO;CAGT,MAAM,EAAE,YAAY,MAAM,OAAO;CACjC,MAAM,EAAE,6BAA6B,MAAM,OAAO;CAElD,MAAM,UAAU,IAAI,SAAS,CAC1B,KAAK,OAAO,CACZ,YAAY,yBAAyB,CACrC,QAAQA,QAAY,CACpB,OAAO,aAAa,0BAA0B,MAAM,CACpD,OAAO,mBAAmB,mBAAmB,CAC7C,OAAO,sBAAsB,sBAAsB;AAEtD,SAAQ,KAAK,cAAc,gBAAgB;AACzC,eAAa,YAAY,MAAM;GAC/B;CAEF,MAAM,UAAU,uBAAuB,IAAI,QAAQ,UAAU,CAAC;AAC9D,SAAQ,OAAO,OAAO,YAAY;AAChC,QAAM,yBAAyB,SAAS,mBAAmB,KAAK,CAAC;GACjE;AACF,SAAQ,WAAW,QAAQ;AAE3B,OAAM,QAAQ,WAAW,KAAK;CAE9B,MAAM,EAAE,kBAAkB,MAAM,OAAO;AACvC,OAAM,eAAe;AACrB,QAAO"}
1
+ {"version":3,"file":"gateway-run-fast-path.js","names":["pkg.version"],"sources":["../../../src/cli/gateway-run-fast-path.ts"],"sourcesContent":["import type { Command } from 'commander';\n\nimport { ROOT_COMMAND_DESCRIPTION } from './command-manifest.js';\nimport { createDefaultContext, type CLIContext } from './registry.js';\nimport { isGatewayRunFastPathArgv } from './gateway-run-argv.js';\nimport pkg from '../../package.json' with { type: 'json' };\n\nlet parsedOpts: { config?: string; workspace?: string; verbose?: boolean } = {};\n\nfunction getContextWithOpts(argv: string[] = process.argv): CLIContext {\n return createDefaultContext(argv, parsedOpts);\n}\n\nfunction buildGatewayRunOptions(cmd: Command) {\n return cmd\n .description('Start the xopc gateway server')\n .option('--bind <mode>', 'Bind mode: loopback | lan | auto | custom | tailnet')\n .option('--port <number>', 'Port to listen on (defaults to gateway.port in config, else 18790)')\n .option('--token <token>', 'Authentication token')\n .option(\n '--tailscale <mode>',\n 'Tailscale exposure: off | serve | funnel (overrides config for this run)',\n )\n .option('--tailscale-reset-on-exit', 'Reset Tailscale serve/funnel on gateway shutdown', false)\n .option('--force', 'Force kill existing process on port', false)\n .option('--no-hot-reload', 'Disable config hot reload')\n .option('--foreground', 'Start gateway in foreground mode (blocks terminal)', true);\n}\n\nexport async function tryRunGatewayRunFastPath(argv: string[] = process.argv): Promise<boolean> {\n if (!isGatewayRunFastPathArgv(argv)) {\n return false;\n }\n\n const { Command } = await import('commander');\n const { runGatewayFromCliOptions } = await import('./commands/gateway/run-foreground.js');\n\n const program = new Command()\n .name('xopc')\n .description(ROOT_COMMAND_DESCRIPTION)\n .version(pkg.version)\n .option('--verbose', 'Enable verbose logging', false)\n .option('--config <path>', 'Config file path')\n .option('--workspace <path>', 'Workspace directory');\n\n program.hook('preAction', (thisCommand) => {\n parsedOpts = thisCommand.opts();\n });\n\n const gateway = buildGatewayRunOptions(new Command('gateway'));\n gateway.action(async (options) => {\n await runGatewayFromCliOptions(options, getContextWithOpts(argv));\n });\n program.addCommand(gateway);\n\n await program.parseAsync(argv);\n\n const { flushAndClose } = await import('../utils/logger/shutdown.js');\n await flushAndClose();\n return true;\n}\n"],"mappings":";;;;;AAOA,IAAI,aAAyE,EAAE;AAE/E,SAAS,mBAAmB,OAAiB,QAAQ,MAAkB;AACrE,QAAO,qBAAqB,MAAM,WAAW;;AAG/C,SAAS,uBAAuB,KAAc;AAC5C,QAAO,IACJ,YAAY,gCAAgC,CAC5C,OAAO,iBAAiB,sDAAsD,CAC9E,OAAO,mBAAmB,qEAAqE,CAC/F,OAAO,mBAAmB,uBAAuB,CACjD,OACC,sBACA,2EACD,CACA,OAAO,6BAA6B,oDAAoD,MAAM,CAC9F,OAAO,WAAW,uCAAuC,MAAM,CAC/D,OAAO,mBAAmB,4BAA4B,CACtD,OAAO,gBAAgB,sDAAsD,KAAK;;AAGvF,eAAsB,yBAAyB,OAAiB,QAAQ,MAAwB;AAC9F,KAAI,CAAC,yBAAyB,KAAK,CACjC,QAAO;CAGT,MAAM,EAAE,YAAY,MAAM,OAAO;CACjC,MAAM,EAAE,6BAA6B,MAAM,OAAO;CAElD,MAAM,UAAU,IAAI,SAAS,CAC1B,KAAK,OAAO,CACZ,YAAY,yBAAyB,CACrC,QAAQA,QAAY,CACpB,OAAO,aAAa,0BAA0B,MAAM,CACpD,OAAO,mBAAmB,mBAAmB,CAC7C,OAAO,sBAAsB,sBAAsB;AAEtD,SAAQ,KAAK,cAAc,gBAAgB;AACzC,eAAa,YAAY,MAAM;GAC/B;CAEF,MAAM,UAAU,uBAAuB,IAAI,QAAQ,UAAU,CAAC;AAC9D,SAAQ,OAAO,OAAO,YAAY;AAChC,QAAM,yBAAyB,SAAS,mBAAmB,KAAK,CAAC;GACjE;AACF,SAAQ,WAAW,QAAQ;AAE3B,OAAM,QAAQ,WAAW,KAAK;CAE9B,MAAM,EAAE,kBAAkB,MAAM,OAAO;AACvC,OAAM,eAAe;AACrB,QAAO"}
@@ -1,9 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import { type CLIContext } from './registry.js';
3
- export declare let parsedOpts: {
4
- config?: string;
5
- workspace?: string;
6
- verbose?: boolean;
7
- };
8
- export declare function getContextWithOpts(argv?: string[]): CLIContext;
2
+ export { parsedOpts, getContextWithOpts } from './context.js';
9
3
  export declare function runCli(argv?: string[]): Promise<void>;
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { version } from "../../package.js";
3
3
  import { ROOT_COMMAND_DESCRIPTION } from "./command-manifest.js";
4
- import { createDefaultContext } from "./registry.js";
5
4
  import { loadAllCommands, resolveCommandName, tryLoadCommand } from "./command-loaders.js";
5
+ import { getContextWithOpts, parsedOpts } from "./context.js";
6
6
  import { Command } from "commander";
7
7
  //#region src/cli/index.ts
8
8
  /** Command wiring and `program.parse`; executable entry is `bin.ts` (log preset before logger init). */
@@ -11,10 +11,6 @@ async function flushLoggerAndExit(code) {
11
11
  await flushAndClose();
12
12
  process.exit(code);
13
13
  }
14
- let parsedOpts = {};
15
- function getContextWithOpts(argv = process.argv) {
16
- return createDefaultContext(argv, parsedOpts);
17
- }
18
14
  const LONG_RUNNING_COMMANDS = new Set(["gateway", "agent"]);
19
15
  function isExtensionsDevCommand(command) {
20
16
  return command.name() === "dev" && command.parent?.name() === "extensions";
@@ -22,7 +18,9 @@ function isExtensionsDevCommand(command) {
22
18
  function buildProgram() {
23
19
  const program = new Command().name("xopc").description(ROOT_COMMAND_DESCRIPTION).version(version).option("--verbose", "Enable verbose logging", false).option("--config <path>", "Config file path").option("--workspace <path>", "Workspace directory");
24
20
  program.hook("preAction", (thisCommand) => {
25
- parsedOpts = thisCommand.opts();
21
+ const next = thisCommand.opts();
22
+ for (const k of Object.keys(parsedOpts)) delete parsedOpts[k];
23
+ Object.assign(parsedOpts, next);
26
24
  });
27
25
  program.hook("postAction", async (_hookOwner, actionCommand) => {
28
26
  const cmd = actionCommand ?? program;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["pkg.version"],"sources":["../../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\n/** Command wiring and `program.parse`; executable entry is `bin.ts` (log preset before logger init). */\nimport { Command } from 'commander';\nimport { ROOT_COMMAND_DESCRIPTION } from './command-manifest.js';\nimport { createDefaultContext, type CLIContext } from './registry.js';\nimport pkg from '../../package.json' with { type: 'json' };\nimport { resolveCommandName, tryLoadCommand, loadAllCommands } from './command-loaders.js';\n\n// Lazy logger flush so that pure parameter-parsing paths (--help, --version,\n// `<unknown>`) never load the logger barrel. Imports `logger/shutdown.js`\n// directly to bypass `logger/index.ts` (pino + 8 sub-modules) on the cold path\n// — when an action did log, that import is already cached.\nasync function flushLoggerAndExit(code: number): Promise<never> {\n const { flushAndClose } = await import('../utils/logger/shutdown.js');\n await flushAndClose();\n process.exit(code);\n}\n\n// Global parsed options - updated before each command via the preAction hook.\nexport let parsedOpts: { config?: string; workspace?: string; verbose?: boolean } = {};\n\nexport function getContextWithOpts(argv: string[] = process.argv): CLIContext {\n return createDefaultContext(argv, parsedOpts);\n}\n\n// Commands whose action never resolves until an external shutdown signal.\n// `tui` is intentionally omitted: `await runTui()` completes when the user exits\n// the TUI and the process must call `process.exit` (interactive stdin stays open).\nconst LONG_RUNNING_COMMANDS = new Set(['gateway', 'agent']);\n\nfunction isExtensionsDevCommand(command: Command): boolean {\n return command.name() === 'dev' && command.parent?.name() === 'extensions';\n}\n\nfunction buildProgram(): Command {\n const program = new Command()\n .name('xopc')\n .description(ROOT_COMMAND_DESCRIPTION)\n .version(pkg.version)\n .option('--verbose', 'Enable verbose logging', false)\n .option('--config <path>', 'Config file path')\n .option('--workspace <path>', 'Workspace directory');\n\n // Hook to capture parsed options before each command runs\n program.hook('preAction', (thisCommand) => {\n parsedOpts = thisCommand.opts();\n });\n\n // Hook to ensure process exits after command completion.\n // Second arg is the command whose action ran; the first is the ancestor that\n // registered the hook (often the root program), so using only the first arg\n // mis-detects the subcommand as \"xopc\".\n program.hook('postAction', async (_hookOwner, actionCommand) => {\n const cmd = actionCommand ?? program;\n const args = cmd.args;\n const subCommandName = args.length > 0 ? args[0] : cmd.name();\n\n if (LONG_RUNNING_COMMANDS.has(subCommandName) || isExtensionsDevCommand(cmd)) {\n if (subCommandName === 'agent') {\n const hasInteractiveFlag = process.argv.includes('-i') || process.argv.includes('--interactive');\n if (!hasInteractiveFlag) {\n await flushLoggerAndExit(0);\n }\n }\n return;\n }\n await flushLoggerAndExit(0);\n });\n\n return program;\n}\n\nexport async function runCli(argv: string[] = process.argv): Promise<void> {\n const program = buildProgram();\n const ctx = getContextWithOpts(argv);\n\n // Filter out standalone '--' separator (passed by pnpm run -- <cmd>).\n // npm removes it automatically, pnpm passes it through. Keep '--' if it's a\n // script argument (index < 2), drop it only when it sits between the script\n // name and the actual command.\n const filteredArgv = argv.filter((arg, index) => {\n if (arg !== '--') return true;\n return index < 2;\n });\n\n const target = resolveCommandName(filteredArgv);\n let loaded = false;\n if (target) {\n loaded = await tryLoadCommand(program, ctx, target, getContextWithOpts);\n }\n if (!loaded) {\n // Unknown command, no command, or commander needs the full set (e.g. for\n // root help fallback). Load every command so commander can dispatch\n // properly.\n await loadAllCommands(program, ctx, getContextWithOpts);\n }\n\n program.parse(filteredArgv);\n}\n"],"mappings":";;;;;;;;AAYA,eAAe,mBAAmB,MAA8B;CAC9D,MAAM,EAAE,kBAAkB,MAAM,OAAO;AACvC,OAAM,eAAe;AACrB,SAAQ,KAAK,KAAK;;AAIpB,IAAW,aAAyE,EAAE;AAEtF,SAAgB,mBAAmB,OAAiB,QAAQ,MAAkB;AAC5E,QAAO,qBAAqB,MAAM,WAAW;;AAM/C,MAAM,wBAAwB,IAAI,IAAI,CAAC,WAAW,QAAQ,CAAC;AAE3D,SAAS,uBAAuB,SAA2B;AACzD,QAAO,QAAQ,MAAM,KAAK,SAAS,QAAQ,QAAQ,MAAM,KAAK;;AAGhE,SAAS,eAAwB;CAC/B,MAAM,UAAU,IAAI,SAAS,CAC1B,KAAK,OAAO,CACZ,YAAY,yBAAyB,CACrC,QAAQA,QAAY,CACpB,OAAO,aAAa,0BAA0B,MAAM,CACpD,OAAO,mBAAmB,mBAAmB,CAC7C,OAAO,sBAAsB,sBAAsB;AAGtD,SAAQ,KAAK,cAAc,gBAAgB;AACzC,eAAa,YAAY,MAAM;GAC/B;AAMF,SAAQ,KAAK,cAAc,OAAO,YAAY,kBAAkB;EAC9D,MAAM,MAAM,iBAAiB;EAC7B,MAAM,OAAO,IAAI;EACjB,MAAM,iBAAiB,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,MAAM;AAE7D,MAAI,sBAAsB,IAAI,eAAe,IAAI,uBAAuB,IAAI,EAAE;AAC5E,OAAI,mBAAmB;QAEjB,EADuB,QAAQ,KAAK,SAAS,KAAK,IAAI,QAAQ,KAAK,SAAS,gBAAgB,EAE9F,OAAM,mBAAmB,EAAE;;AAG/B;;AAEF,QAAM,mBAAmB,EAAE;GAC3B;AAEF,QAAO;;AAGT,eAAsB,OAAO,OAAiB,QAAQ,MAAqB;CACzE,MAAM,UAAU,cAAc;CAC9B,MAAM,MAAM,mBAAmB,KAAK;CAMpC,MAAM,eAAe,KAAK,QAAQ,KAAK,UAAU;AAC/C,MAAI,QAAQ,KAAM,QAAO;AACzB,SAAO,QAAQ;GACf;CAEF,MAAM,SAAS,mBAAmB,aAAa;CAC/C,IAAI,SAAS;AACb,KAAI,OACF,UAAS,MAAM,eAAe,SAAS,KAAK,QAAQ,mBAAmB;AAEzE,KAAI,CAAC,OAIH,OAAM,gBAAgB,SAAS,KAAK,mBAAmB;AAGzD,SAAQ,MAAM,aAAa"}
1
+ {"version":3,"file":"index.js","names":["pkg.version"],"sources":["../../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\n/** Command wiring and `program.parse`; executable entry is `bin.ts` (log preset before logger init). */\nimport { Command } from 'commander';\nimport { ROOT_COMMAND_DESCRIPTION } from './command-manifest.js';\nimport pkg from '../../package.json' with { type: 'json' };\nimport { resolveCommandName, tryLoadCommand, loadAllCommands } from './command-loaders.js';\n\n// Lazy logger flush so that pure parameter-parsing paths (--help, --version,\n// `<unknown>`) never load the logger barrel. Imports `logger/shutdown.js`\n// directly to bypass `logger/index.ts` (pino + 8 sub-modules) on the cold path\n// — when an action did log, that import is already cached.\nasync function flushLoggerAndExit(code: number): Promise<never> {\n const { flushAndClose } = await import('../utils/logger/shutdown.js');\n await flushAndClose();\n process.exit(code);\n}\n\n// Re-exported from `./context.js` for backward compat. Command modules should\n// import from `./context.js` directly to avoid the CLI barrel cycle.\nexport { parsedOpts, getContextWithOpts } from './context.js';\nimport { parsedOpts, getContextWithOpts } from './context.js';\n\n// Commands whose action never resolves until an external shutdown signal.\n// `tui` is intentionally omitted: `await runTui()` completes when the user exits\n// the TUI and the process must call `process.exit` (interactive stdin stays open).\nconst LONG_RUNNING_COMMANDS = new Set(['gateway', 'agent']);\n\nfunction isExtensionsDevCommand(command: Command): boolean {\n return command.name() === 'dev' && command.parent?.name() === 'extensions';\n}\n\nfunction buildProgram(): Command {\n const program = new Command()\n .name('xopc')\n .description(ROOT_COMMAND_DESCRIPTION)\n .version(pkg.version)\n .option('--verbose', 'Enable verbose logging', false)\n .option('--config <path>', 'Config file path')\n .option('--workspace <path>', 'Workspace directory');\n\n // Hook to capture parsed options before each command runs. Mutate the\n // shared object in place — `parsedOpts` is a `const` import from\n // `./context.js` so command modules see updates through the same reference.\n program.hook('preAction', (thisCommand) => {\n const next = thisCommand.opts() as Record<string, unknown>;\n for (const k of Object.keys(parsedOpts)) {\n delete (parsedOpts as Record<string, unknown>)[k];\n }\n Object.assign(parsedOpts, next);\n });\n\n // Hook to ensure process exits after command completion.\n // Second arg is the command whose action ran; the first is the ancestor that\n // registered the hook (often the root program), so using only the first arg\n // mis-detects the subcommand as \"xopc\".\n program.hook('postAction', async (_hookOwner, actionCommand) => {\n const cmd = actionCommand ?? program;\n const args = cmd.args;\n const subCommandName = args.length > 0 ? args[0] : cmd.name();\n\n if (LONG_RUNNING_COMMANDS.has(subCommandName) || isExtensionsDevCommand(cmd)) {\n if (subCommandName === 'agent') {\n const hasInteractiveFlag = process.argv.includes('-i') || process.argv.includes('--interactive');\n if (!hasInteractiveFlag) {\n await flushLoggerAndExit(0);\n }\n }\n return;\n }\n await flushLoggerAndExit(0);\n });\n\n return program;\n}\n\nexport async function runCli(argv: string[] = process.argv): Promise<void> {\n const program = buildProgram();\n const ctx = getContextWithOpts(argv);\n\n // Filter out standalone '--' separator (passed by pnpm run -- <cmd>).\n // npm removes it automatically, pnpm passes it through. Keep '--' if it's a\n // script argument (index < 2), drop it only when it sits between the script\n // name and the actual command.\n const filteredArgv = argv.filter((arg, index) => {\n if (arg !== '--') return true;\n return index < 2;\n });\n\n const target = resolveCommandName(filteredArgv);\n let loaded = false;\n if (target) {\n loaded = await tryLoadCommand(program, ctx, target, getContextWithOpts);\n }\n if (!loaded) {\n // Unknown command, no command, or commander needs the full set (e.g. for\n // root help fallback). Load every command so commander can dispatch\n // properly.\n await loadAllCommands(program, ctx, getContextWithOpts);\n }\n\n program.parse(filteredArgv);\n}\n"],"mappings":";;;;;;;;AAWA,eAAe,mBAAmB,MAA8B;CAC9D,MAAM,EAAE,kBAAkB,MAAM,OAAO;AACvC,OAAM,eAAe;AACrB,SAAQ,KAAK,KAAK;;AAWpB,MAAM,wBAAwB,IAAI,IAAI,CAAC,WAAW,QAAQ,CAAC;AAE3D,SAAS,uBAAuB,SAA2B;AACzD,QAAO,QAAQ,MAAM,KAAK,SAAS,QAAQ,QAAQ,MAAM,KAAK;;AAGhE,SAAS,eAAwB;CAC/B,MAAM,UAAU,IAAI,SAAS,CAC1B,KAAK,OAAO,CACZ,YAAY,yBAAyB,CACrC,QAAQA,QAAY,CACpB,OAAO,aAAa,0BAA0B,MAAM,CACpD,OAAO,mBAAmB,mBAAmB,CAC7C,OAAO,sBAAsB,sBAAsB;AAKtD,SAAQ,KAAK,cAAc,gBAAgB;EACzC,MAAM,OAAO,YAAY,MAAM;AAC/B,OAAK,MAAM,KAAK,OAAO,KAAK,WAAW,CACrC,QAAQ,WAAuC;AAEjD,SAAO,OAAO,YAAY,KAAK;GAC/B;AAMF,SAAQ,KAAK,cAAc,OAAO,YAAY,kBAAkB;EAC9D,MAAM,MAAM,iBAAiB;EAC7B,MAAM,OAAO,IAAI;EACjB,MAAM,iBAAiB,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,MAAM;AAE7D,MAAI,sBAAsB,IAAI,eAAe,IAAI,uBAAuB,IAAI,EAAE;AAC5E,OAAI,mBAAmB;QAEjB,EADuB,QAAQ,KAAK,SAAS,KAAK,IAAI,QAAQ,KAAK,SAAS,gBAAgB,EAE9F,OAAM,mBAAmB,EAAE;;AAG/B;;AAEF,QAAM,mBAAmB,EAAE;GAC3B;AAEF,QAAO;;AAGT,eAAsB,OAAO,OAAiB,QAAQ,MAAqB;CACzE,MAAM,UAAU,cAAc;CAC9B,MAAM,MAAM,mBAAmB,KAAK;CAMpC,MAAM,eAAe,KAAK,QAAQ,KAAK,UAAU;AAC/C,MAAI,QAAQ,KAAM,QAAO;AACzB,SAAO,QAAQ;GACf;CAEF,MAAM,SAAS,mBAAmB,aAAa;CAC/C,IAAI,SAAS;AACb,KAAI,OACF,UAAS,MAAM,eAAe,SAAS,KAAK,QAAQ,mBAAmB;AAEzE,KAAI,CAAC,OAIH,OAAM,gBAAgB,SAAS,KAAK,mBAAmB;AAGzD,SAAQ,MAAM,aAAa"}
@@ -1,8 +1,8 @@
1
1
  import { ConfigSchema, init_schema } from "../../config/schema.js";
2
2
  import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
3
- import { dirname, join } from "node:path";
4
- import { existsSync, mkdirSync, readFileSync } from "node:fs";
5
3
  import { randomBytes } from "node:crypto";
4
+ import { existsSync, mkdirSync, readFileSync } from "node:fs";
5
+ import { dirname, join } from "node:path";
6
6
  //#region src/cli/utils/init-workspace-core.ts
7
7
  init_schema();
8
8
  init_loader();
@@ -0,0 +1,3 @@
1
+ export declare function isRestartEnabled(config?: {
2
+ commands?: unknown;
3
+ }): boolean;
@@ -0,0 +1,11 @@
1
+ //#region src/config/commands.flags.ts
2
+ function isRestartEnabled(config) {
3
+ const commands = config?.commands;
4
+ if (!commands || typeof commands !== "object" || Array.isArray(commands)) return true;
5
+ if (!Object.prototype.hasOwnProperty.call(commands, "restart")) return true;
6
+ return commands.restart !== false;
7
+ }
8
+ //#endregion
9
+ export { isRestartEnabled };
10
+
11
+ //# sourceMappingURL=commands.flags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.flags.js","names":[],"sources":["../../../src/config/commands.flags.ts"],"sourcesContent":["export function isRestartEnabled(config?: { commands?: unknown }): boolean {\n const commands = config?.commands;\n if (!commands || typeof commands !== 'object' || Array.isArray(commands)) {\n return true;\n }\n if (!Object.prototype.hasOwnProperty.call(commands, 'restart')) {\n return true;\n }\n return (commands as { restart?: unknown }).restart !== false;\n}\n"],"mappings":";AAAA,SAAgB,iBAAiB,QAA0C;CACzE,MAAM,WAAW,QAAQ;AACzB,KAAI,CAAC,YAAY,OAAO,aAAa,YAAY,MAAM,QAAQ,SAAS,CACtE,QAAO;AAET,KAAI,CAAC,OAAO,UAAU,eAAe,KAAK,UAAU,UAAU,CAC5D,QAAO;AAET,QAAQ,SAAmC,YAAY"}
@@ -1,4 +1,5 @@
1
1
  export * from './schema.js';
2
+ export { getWorkspacePath } from './workspace-path-helpers.js';
2
3
  export * from './agent-profile.js';
3
4
  export * from './loader.js';
4
5
  export * from './paths.js';
@@ -2,18 +2,19 @@ import { ENV_VARS, resolveHomeDir, resolveStateDir } from "./paths-state.js";
2
2
  import { expandWorkspacePathString, init_workspace_path, normalizeWorkspaceDir, resolveWorkspaceRoot } from "./workspace-path.js";
3
3
  import { resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
4
4
  import { resolveAgentDir as resolveAgentDir$1, resolveAgentHomeDir as resolveAgentHomeDir$1, resolveAgentWorkspaceDir, resolveSessionsDir as resolveSessionsDir$1 } from "../agent/agent-scope.js";
5
+ import { resolveSessionFilePath, resolveSessionTranscriptPathInDir } from "../session/parity/transcript-paths.js";
6
+ import { FILENAMES, WORKSPACE_FILES, existsSync, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentMetadataPath, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveCronDir, resolveCronJobsPath, resolveCronLogPath, resolveCronLogsDir, resolveCronRunsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveMemoryDir, resolveMemoryPath, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSessionTranscriptPath, resolveSessionsArchiveDir, resolveSessionsDir, resolveSessionsMapPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
5
7
  import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema } from "../../extensions/telegram/src/config-schema.js";
6
8
  import { WeixinAccountConfigSchema, WeixinConfigSchema } from "../../extensions/weixin/src/config-schema.js";
7
- import { AgentConfigSchema, AgentDefaultsSchema, AgentImageGenerationModelSchema, AgentModelRefSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, ChannelsConfigSchema, ConfigSchema, CronConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultModelRef, getWorkspacePath, init_schema, parseModelRef } from "./schema.js";
9
+ import { AgentConfigSchema, AgentDefaultsSchema, AgentImageGenerationModelSchema, AgentModelRefSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigSchema, CronConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultModelRef, init_schema, parseModelRef } from "./schema.js";
10
+ import { init_loader, loadConfig, registerChannelConfigValidator, saveConfig } from "./loader.js";
8
11
  import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
9
12
  import { extractProfileAgentId, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
10
- import { resolveSessionFilePath, resolveSessionTranscriptPathInDir } from "../session/parity/transcript-paths.js";
11
- import { FILENAMES, WORKSPACE_FILES, existsSync, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentMetadataPath, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveCronDir, resolveCronJobsPath, resolveCronLogPath, resolveCronLogsDir, resolveCronRunsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveMemoryDir, resolveMemoryPath, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSessionTranscriptPath, resolveSessionsArchiveDir, resolveSessionsDir, resolveSessionsMapPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
12
- import { init_loader, loadConfig, registerChannelConfigValidator, saveConfig } from "./loader.js";
13
13
  import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
14
14
  import { CustomModelSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
15
15
  import { canonicalizeConfiguredMcpServer, isKnownCliMcpTypeAlias, normalizeConfiguredMcpServers, resolveXopcMcpTransportAlias } from "./mcp-config-normalize.js";
16
16
  import { formatThinkingLevels, listThinkingLevels, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, thinkLevelToNumber } from "../agent/transcript/thinking-types.js";
17
+ import { getWorkspacePath } from "./workspace-path-helpers.js";
17
18
  import { listAgentProfileMarkdownDirs, listAgentWorkspaceDirs } from "./workspace-dirs.js";
18
19
  import { ProfileManager, createProfile, deleteProfile, getCurrentProfile, getProfileManager, getProfileNameFromDir, getSwitchCommand, listProfiles, resolveProfileStateDir } from "./profile.js";
19
20
  import { diffConfigPaths } from "./diff.js";
@@ -28,6 +29,6 @@ init_workspace_path();
28
29
  init_models_json();
29
30
  init_resolve_config_value();
30
31
  //#endregion
31
- export { AgentConfigSchema, AgentDefaultsSchema, AgentImageGenerationModelSchema, AgentModelRefSchema, AgentsConfigSchema, BASE_RELOAD_RULES, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, ChannelsConfigSchema, ConfigHotReloader, ConfigSchema, CronConfigSchema, CustomModelSchema, ENV_VARS, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, FILENAMES, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelOverrideSchema, ModelsDevConfigSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProfileManager, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VercelGatewayRoutingSchema, WORKSPACE_FILES, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WeixinAccountConfigSchema, WeixinConfigSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, applyConfigOverrides, buildReloadPlan, canonicalizeConfiguredMcpServer, clearConfigValueCache, createProfile, deleteProfile, diffConfigPaths, existsSync, expandWorkspacePathString, extractProfileAgentId, formatThinkingLevels, getAgentDefaultModelRef, getAllowedCommands, getCacheStats, getConfigOverrides, getCurrentProfile, getDefaultModelValues, resolveModelsJsonPath as getModelsJsonPath, getProfileManager, getProfileNameFromDir, getSwitchCommand, getWorkspacePath, isKnownCliMcpTypeAlias, listAgentProfileMarkdownDirs, listAgentWorkspaceDirs, listConfiguredMcpServers, listProfiles, listThinkingLevels, loadConfig, loadModelsJson, matchReloadRule, modelsJsonExists, normalizeConfiguredMcpServers, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, normalizeWorkspaceDir, parseModelRef, registerChannelConfigValidator, resetConfigOverrides, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentMetadataPath, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveConfigValue, resolveCredentialsDir, resolveCronDir, resolveCronJobsPath, resolveCronLogPath, resolveCronLogsDir, resolveCronRunsDir, resolveDefaultAgentWorkspaceDir, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHeaders, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveMemoryDir, resolveMemoryPath, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveProfileStateDir, resolveSessionFilePath, resolveSessionTranscriptPath, resolveSessionTranscriptPathInDir, resolveSessionsArchiveDir, resolveSessionsDir, resolveSessionsDir$1 as resolveSessionsDirFromConfig, resolveSessionsMapPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceRoot, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcMcpTransportAlias, saveConfig, saveModelsJson, setConfigOverride, setConfiguredMcpServer, testApiKeyResolution, thinkLevelToNumber, unsetConfigOverride, unsetConfiguredMcpServer, validateModelsConfig };
32
+ export { AgentConfigSchema, AgentDefaultsSchema, AgentImageGenerationModelSchema, AgentModelRefSchema, AgentsConfigSchema, BASE_RELOAD_RULES, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigHotReloader, ConfigSchema, CronConfigSchema, CustomModelSchema, ENV_VARS, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, FILENAMES, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelOverrideSchema, ModelsDevConfigSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProfileManager, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VercelGatewayRoutingSchema, WORKSPACE_FILES, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WeixinAccountConfigSchema, WeixinConfigSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, applyConfigOverrides, buildReloadPlan, canonicalizeConfiguredMcpServer, clearConfigValueCache, createProfile, deleteProfile, diffConfigPaths, existsSync, expandWorkspacePathString, extractProfileAgentId, formatThinkingLevels, getAgentDefaultModelRef, getAllowedCommands, getCacheStats, getConfigOverrides, getCurrentProfile, getDefaultModelValues, resolveModelsJsonPath as getModelsJsonPath, getProfileManager, getProfileNameFromDir, getSwitchCommand, getWorkspacePath, isKnownCliMcpTypeAlias, listAgentProfileMarkdownDirs, listAgentWorkspaceDirs, listConfiguredMcpServers, listProfiles, listThinkingLevels, loadConfig, loadModelsJson, matchReloadRule, modelsJsonExists, normalizeConfiguredMcpServers, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, normalizeWorkspaceDir, parseModelRef, registerChannelConfigValidator, resetConfigOverrides, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentMetadataPath, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveConfigValue, resolveCredentialsDir, resolveCronDir, resolveCronJobsPath, resolveCronLogPath, resolveCronLogsDir, resolveCronRunsDir, resolveDefaultAgentWorkspaceDir, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHeaders, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveMemoryDir, resolveMemoryPath, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveProfileStateDir, resolveSessionFilePath, resolveSessionTranscriptPath, resolveSessionTranscriptPathInDir, resolveSessionsArchiveDir, resolveSessionsDir, resolveSessionsDir$1 as resolveSessionsDirFromConfig, resolveSessionsMapPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceRoot, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcMcpTransportAlias, saveConfig, saveModelsJson, setConfigOverride, setConfiguredMcpServer, testApiKeyResolution, thinkLevelToNumber, unsetConfigOverride, unsetConfiguredMcpServer, validateModelsConfig };
32
33
 
33
34
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/config/index.ts"],"sourcesContent":["export * from './schema.js';\nexport * from './agent-profile.js';\nexport * from './loader.js';\nexport * from './paths.js';\nexport * from './workspace-dirs.js';\nexport { expandWorkspacePathString, normalizeWorkspaceDir, resolveWorkspaceRoot } from './workspace-path.js';\nexport * from './profile.js';\nexport * from './reload.js';\nexport * from './diff.js';\nexport * from './rules.js';\nexport * from './defaults.js';\nexport * from './integration.js';\nexport * from './models-json.js';\nexport * from './resolve-config-value.js';\nexport * from './runtime-overrides.js';\nexport * from './mcp-config-normalize.js';\nexport * from './mcp-config.js';\n\n// Re-export thinking types\nexport type {\n ThinkLevel,\n ReasoningLevel,\n VerboseLevel,\n ElevatedMode,\n SessionAgentConfig,\n} from '../agent/transcript/thinking-types.js';\nexport {\n normalizeThinkLevel,\n normalizeReasoningLevel,\n normalizeVerboseLevel,\n normalizeElevatedMode,\n listThinkingLevels,\n formatThinkingLevels,\n thinkLevelToNumber,\n} from '../agent/transcript/thinking-types.js';\n\n// Re-export types from types.models (avoid conflict with schema.js)\nexport type {\n ModelApi,\n ModelCompatConfig,\n ModelProviderAuthMode,\n ModelDefinitionConfig,\n ModelProviderConfig,\n BedrockDiscoveryConfig,\n ModelsConfig,\n} from './types.models.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;qBAK6G"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/config/index.ts"],"sourcesContent":["export * from './schema.js';\nexport { getWorkspacePath } from './workspace-path-helpers.js';\nexport * from './agent-profile.js';\nexport * from './loader.js';\nexport * from './paths.js';\nexport * from './workspace-dirs.js';\nexport { expandWorkspacePathString, normalizeWorkspaceDir, resolveWorkspaceRoot } from './workspace-path.js';\nexport * from './profile.js';\nexport * from './reload.js';\nexport * from './diff.js';\nexport * from './rules.js';\nexport * from './defaults.js';\nexport * from './integration.js';\nexport * from './models-json.js';\nexport * from './resolve-config-value.js';\nexport * from './runtime-overrides.js';\nexport * from './mcp-config-normalize.js';\nexport * from './mcp-config.js';\n\n// Re-export thinking types\nexport type {\n ThinkLevel,\n ReasoningLevel,\n VerboseLevel,\n ElevatedMode,\n SessionAgentConfig,\n} from '../agent/transcript/thinking-types.js';\nexport {\n normalizeThinkLevel,\n normalizeReasoningLevel,\n normalizeVerboseLevel,\n normalizeElevatedMode,\n listThinkingLevels,\n formatThinkingLevels,\n thinkLevelToNumber,\n} from '../agent/transcript/thinking-types.js';\n\n// Re-export types from types.models (avoid conflict with schema.js)\nexport type {\n ModelApi,\n ModelCompatConfig,\n ModelProviderAuthMode,\n ModelDefinitionConfig,\n ModelProviderConfig,\n BedrockDiscoveryConfig,\n ModelsConfig,\n} from './types.models.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;qBAM6G"}
@@ -1,9 +1,9 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { ConfigSchema, init_schema } from "./schema.js";
2
+ import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
3
3
  import { createLogger } from "../utils/logger/index.js";
4
4
  import { init_logger } from "../utils/logger.js";
5
5
  import { init_paths, resolveConfigPath } from "./paths.js";
6
- import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
6
+ import { ConfigSchema, init_schema } from "./schema.js";
7
7
  import { dirname } from "path";
8
8
  import { existsSync, mkdirSync, promises, readFileSync } from "fs";
9
9
  import { config } from "dotenv";
@@ -1,8 +1,8 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { init_paths, resolveModelsJsonPath } from "./paths.js";
3
2
  import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
4
- import { z } from "zod";
3
+ import { init_paths, resolveModelsJsonPath } from "./paths.js";
5
4
  import { existsSync, readFileSync } from "fs";
5
+ import { z } from "zod";
6
6
  //#region src/config/models-json.ts
7
7
  /**
8
8
  * Models.json configuration types and schema
@@ -1,9 +1,9 @@
1
- import { ENV_VARS, init_paths_state, resolveHomeDir } from "./paths-state.js";
2
1
  import { createLogger } from "../utils/logger/index.js";
3
2
  import { init_logger } from "../utils/logger.js";
3
+ import { ENV_VARS, init_paths_state, resolveHomeDir } from "./paths-state.js";
4
+ import { mkdir, readdir, rm, stat } from "fs/promises";
4
5
  import { join } from "path";
5
6
  import { existsSync } from "fs";
6
- import { mkdir, readdir, rm, stat } from "fs/promises";
7
7
  //#region src/config/profile.ts
8
8
  init_logger();
9
9
  init_paths_state();
@@ -741,6 +741,7 @@ export declare const GatewayAuthRateLimitSchema: z.ZodOptional<z.ZodObject<{
741
741
  blockDurationMs: z.ZodDefault<z.ZodNumber>;
742
742
  lockoutMs: z.ZodOptional<z.ZodNumber>;
743
743
  exemptLoopback: z.ZodDefault<z.ZodBoolean>;
744
+ burstCoalesceMs: z.ZodDefault<z.ZodNumber>;
744
745
  }, z.core.$strip>>;
745
746
  export declare const GatewaySecuritySchema: z.ZodOptional<z.ZodObject<{
746
747
  strict: z.ZodOptional<z.ZodBoolean>;
@@ -768,6 +769,7 @@ export declare const GatewayAuthSchema: z.ZodDefault<z.ZodObject<{
768
769
  blockDurationMs: z.ZodDefault<z.ZodNumber>;
769
770
  lockoutMs: z.ZodOptional<z.ZodNumber>;
770
771
  exemptLoopback: z.ZodDefault<z.ZodBoolean>;
772
+ burstCoalesceMs: z.ZodDefault<z.ZodNumber>;
771
773
  }, z.core.$strip>>;
772
774
  trustedProxy: z.ZodOptional<z.ZodObject<{
773
775
  userHeader: z.ZodString;
@@ -937,6 +939,7 @@ export declare const GatewayConfigSchema: z.ZodDefault<z.ZodObject<{
937
939
  blockDurationMs: z.ZodDefault<z.ZodNumber>;
938
940
  lockoutMs: z.ZodOptional<z.ZodNumber>;
939
941
  exemptLoopback: z.ZodDefault<z.ZodBoolean>;
942
+ burstCoalesceMs: z.ZodDefault<z.ZodNumber>;
940
943
  }, z.core.$strip>>;
941
944
  trustedProxy: z.ZodOptional<z.ZodObject<{
942
945
  userHeader: z.ZodString;
@@ -1463,6 +1466,10 @@ export declare const UpdateConfigSchema: z.ZodOptional<z.ZodObject<{
1463
1466
  }, z.core.$strict>>;
1464
1467
  }, z.core.$strict>>;
1465
1468
  export type UpdateConfig = z.infer<typeof UpdateConfigSchema>;
1469
+ export declare const CommandsConfigSchema: z.ZodOptional<z.ZodObject<{
1470
+ restart: z.ZodOptional<z.ZodBoolean>;
1471
+ }, z.core.$strict>>;
1472
+ export type CommandsConfig = z.infer<typeof CommandsConfigSchema>;
1466
1473
  export declare const McpServerSchema: z.ZodObject<{
1467
1474
  command: z.ZodOptional<z.ZodString>;
1468
1475
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -1838,6 +1845,7 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
1838
1845
  blockDurationMs: z.ZodDefault<z.ZodNumber>;
1839
1846
  lockoutMs: z.ZodOptional<z.ZodNumber>;
1840
1847
  exemptLoopback: z.ZodDefault<z.ZodBoolean>;
1848
+ burstCoalesceMs: z.ZodDefault<z.ZodNumber>;
1841
1849
  }, z.core.$strip>>;
1842
1850
  trustedProxy: z.ZodOptional<z.ZodObject<{
1843
1851
  userHeader: z.ZodString;
@@ -2128,6 +2136,9 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
2128
2136
  betaCheckIntervalHours: z.ZodDefault<z.ZodNumber>;
2129
2137
  }, z.core.$strict>>;
2130
2138
  }, z.core.$strict>>;
2139
+ commands: z.ZodOptional<z.ZodObject<{
2140
+ restart: z.ZodOptional<z.ZodBoolean>;
2141
+ }, z.core.$strict>>;
2131
2142
  }, z.core.$strip>>;
2132
2143
  export type Config = z.infer<typeof ConfigSchema>;
2133
2144
  export type AgentDefaults = z.infer<typeof AgentDefaultsSchema>;
@@ -2144,10 +2155,6 @@ export interface ParsedModelRef {
2144
2155
  provider: string;
2145
2156
  model: string;
2146
2157
  }
2147
- /**
2148
- * Default agent’s resolved Markdown workspace root (`resolveAgentWorkspaceDir` for the default agent id).
2149
- */
2150
- export declare function getWorkspacePath(config: Config): string;
2151
2158
  /**
2152
2159
  * Primary model ref from `agents.defaults.model` (string or `{ primary }`).
2153
2160
  * Returns undefined when unset or empty.