@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","names":[],"sources":["../../../../../src/gateway/hono/routes/browser.ts"],"sourcesContent":["/**\n * Browser/extension settings routes: `/api/browser/*` except for the\n * long-running install streams under `/api/browser/{playwright,cloakbrowser}/install/stream`\n * (those live in `browser-install.ts` so the SSE pump doesn't have to load\n * with the rest of settings).\n *\n * Four backend families:\n * - **Extension WS bridge** — pair Chrome via the xopc browser extension.\n * Owns a module-scoped manual handle so the bridge can outlive a config\n * save (UI flow: Start → pair → Save).\n * - **CloakBrowser** — install / launch / probe runtime status.\n * - **Playwright Chromium** — doctor + on-demand install of bundled browser.\n * - **Local CDP** — launch / list / stop user-driven debug Chrome instances.\n * - **Cloud providers** (browserbase / browser-use) — connection test.\n *\n * Extracted from `config.ts` (which was 2237 lines and 80% browser routes).\n */\nimport type { Hono } from 'hono';\nimport net from 'node:net';\n\nimport type { Config } from '../../../config/schema.js';\nimport type { AuthenticatedRouteDeps } from './deps.js';\n\nconst DEFAULT_EXTENSION_PORT = 19820;\nconst DEFAULT_EXTENSION_HOST = '127.0.0.1';\n\n/**\n * Optional manual hold on the extension WS server kept alive from the UI so\n * users can pair the extension before saving config / running a browser tool.\n * Module-scoped so repeat Start calls are idempotent and the bridge survives\n * config patches.\n */\ntype ManualHandle = { release: () => Promise<void>; host: string; port: number };\nlet manualExtensionHandle: ManualHandle | null = null;\n\nfunction loopbackHostnameFromUrl(input: string): string | null {\n let parsed: URL;\n try {\n parsed = new URL(input);\n } catch {\n return null;\n }\n const proto = parsed.protocol;\n if (proto !== 'ws:' && proto !== 'wss:' && proto !== 'http:' && proto !== 'https:') {\n return null;\n }\n const host = parsed.hostname.toLowerCase();\n if (host === '127.0.0.1' || host === 'localhost' || host === '::1') return host;\n return null;\n}\n\nfunction isLoopbackHost(host: string): boolean {\n const h = host.trim().toLowerCase();\n return h === '127.0.0.1' || h === 'localhost' || h === '::1' || h === '[::1]';\n}\n\nfunction parseExtensionProbePort(raw: string | undefined): number | undefined {\n if (!raw) return undefined;\n const n = Number.parseInt(raw, 10);\n if (!Number.isFinite(n) || n < 1024 || n > 65_535) return undefined;\n return n;\n}\n\nfunction isLoopbackPortOpen(host: string, port: number, timeoutMs = 500): Promise<boolean> {\n return new Promise((resolve) => {\n const socket = net.connect({ host, port });\n const finish = (open: boolean) => {\n socket.removeAllListeners();\n try {\n socket.destroy();\n } catch {\n /* */\n }\n resolve(open);\n };\n socket.setTimeout(timeoutMs);\n socket.once('connect', () => finish(true));\n socket.once('timeout', () => finish(false));\n socket.once('error', () => finish(false));\n });\n}\n\nasync function readExtensionBridgeSnapshot() {\n const { getExtensionBrowserServerSnapshot } = await import(\n '../../../browser/providers/extension-ws-acquire.js'\n );\n return getExtensionBrowserServerSnapshot();\n}\n\nasync function stopExtensionBridgeFromSettings(service: AuthenticatedRouteDeps['service']): Promise<{\n forcedShutdown: boolean;\n}> {\n if (manualExtensionHandle) {\n try {\n await manualExtensionHandle.release();\n } catch {\n /* refcount underflow should not surface */\n }\n manualExtensionHandle = null;\n }\n await service.releaseBrowserExtensionBridge();\n const { forceShutdownExtensionBrowserServer } = await import(\n '../../../browser/providers/extension-ws-acquire.js'\n );\n const forcedShutdown = await forceShutdownExtensionBrowserServer();\n return { forcedShutdown };\n}\n\nfunction resolveExtensionStatusTarget(\n browser: Record<string, unknown> | undefined,\n query: { probe?: string; host?: string; port?: string },\n): { host: string; port: number; backend: string } | null {\n const backend = typeof browser?.backend === 'string' ? browser.backend : 'extension';\n const probe = query.probe === '1' || query.probe === 'true';\n if (!probe && backend !== 'extension') {\n return null;\n }\n\n const ext = browser?.extension as Record<string, unknown> | undefined;\n const configPort =\n typeof ext?.port === 'number' && ext.port >= 1024 && ext.port <= 65_535\n ? Math.floor(ext.port)\n : DEFAULT_EXTENSION_PORT;\n const configHost =\n typeof ext?.host === 'string' && ext.host.trim() ? ext.host.trim() : DEFAULT_EXTENSION_HOST;\n\n const port = parseExtensionProbePort(query.port) ?? configPort;\n const host =\n typeof query.host === 'string' && query.host.trim() ? query.host.trim() : configHost;\n if (!isLoopbackHost(host)) {\n return null;\n }\n\n return { host, port, backend: probe && backend !== 'extension' ? 'extension' : backend };\n}\n\nexport function registerBrowserRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void {\n const { service, strictRateLimitMiddleware } = deps;\n\n // Browser extension bridge status — gateway-side check so frontend doesn't cross-origin fetch.\n authenticated.get('/api/browser/extension-status', async (c) => {\n const config: Config = service.currentConfig as Config;\n const browser = config?.agents?.defaults?.browser as Record<string, unknown> | undefined;\n const target = resolveExtensionStatusTarget(browser, {\n probe: c.req.query('probe'),\n host: c.req.query('host'),\n port: c.req.query('port'),\n });\n\n let artifacts: Record<string, unknown> | undefined;\n try {\n const { browserExtDoctor } = await import('../../../browser/providers/browser-ext-install.js');\n const doctor = await browserExtDoctor();\n artifacts = {\n installed: doctor.installed,\n extensionDir: doctor.extensionDir,\n xopcVersion: doctor.xopcVersion,\n installedVersion: doctor.installedVersion,\n needsRefresh: doctor.needsRefresh,\n needsChromeReload: doctor.needsChromeReload,\n };\n } catch {\n /* optional */\n }\n\n if (!target) {\n const backend = typeof browser?.backend === 'string' ? browser.backend : 'extension';\n return c.json({ running: false, connected: false, backend, artifacts });\n }\n const snapshot = await readExtensionBridgeSnapshot();\n let probeRunning = false;\n let probeConnected = false;\n try {\n const res = await fetch(`http://${target.host}:${target.port}/`, { signal: AbortSignal.timeout(2000) });\n const data = (await res.json()) as { ok?: boolean; connected?: boolean };\n probeRunning = Boolean(data.ok);\n probeConnected = Boolean(data.connected);\n } catch {\n /* probe failed — fall through to snapshot / port check */\n }\n const running = probeRunning || snapshot.active;\n const portConflict =\n !running && !snapshot.active\n ? await isLoopbackPortOpen(target.host, target.port)\n : false;\n return c.json({\n running,\n connected: probeConnected,\n backend: target.backend,\n artifacts,\n bridgeHeld: snapshot.active,\n refCount: snapshot.refCount,\n manualBridge: manualExtensionHandle !== null,\n portConflict,\n });\n });\n\n authenticated.get('/api/browser/extension/doctor', async (c) => {\n const cacheDirRaw = c.req.query('cacheDir');\n try {\n const { browserExtDoctor } = await import('../../../browser/providers/browser-ext-install.js');\n const status = await browserExtDoctor({\n cacheDir: cacheDirRaw && cacheDirRaw.trim() ? cacheDirRaw.trim() : undefined,\n });\n return c.json({ ok: true, payload: status });\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return c.json({ ok: false, error: message }, 400);\n }\n });\n\n authenticated.post('/api/browser/extension/install', strictRateLimitMiddleware, async (c) => {\n let body: unknown;\n try {\n body = await c.req.json();\n } catch {\n body = {};\n }\n const input = body && typeof body === 'object' && !Array.isArray(body)\n ? (body as Record<string, unknown>)\n : {};\n const cacheDir = typeof input.cacheDir === 'string' && input.cacheDir.trim()\n ? input.cacheDir.trim()\n : undefined;\n const force = input.force === true;\n\n try {\n const { ensureBrowserExtensionArtifacts, browserExtDoctor } = await import(\n '../../../browser/providers/browser-ext-install.js'\n );\n const result = await ensureBrowserExtensionArtifacts({ cacheDir, force });\n const doctor = await browserExtDoctor({ cacheDir });\n return c.json({ ok: true, payload: { ...result, doctor } });\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return c.json({ ok: false, error: message }, 500);\n }\n });\n\n authenticated.post('/api/browser/extension/open', strictRateLimitMiddleware, async (c) => {\n let body: unknown;\n try {\n body = await c.req.json();\n } catch {\n body = {};\n }\n const input = body && typeof body === 'object' && !Array.isArray(body)\n ? (body as Record<string, unknown>)\n : {};\n const cacheDir = typeof input.cacheDir === 'string' && input.cacheDir.trim()\n ? input.cacheDir.trim()\n : undefined;\n const actionRaw = typeof input.action === 'string' ? input.action.trim() : 'both';\n const action =\n actionRaw === 'chrome' || actionRaw === 'folder' || actionRaw === 'both' ? actionRaw : 'both';\n\n try {\n const { openBrowserExtensionInstallUi } = await import(\n '../../../browser/providers/browser-ext-install.js'\n );\n const result = await openBrowserExtensionInstallUi({ action, cacheDir });\n return c.json({ ok: true, payload: result });\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return c.json({ ok: false, error: message }, 500);\n }\n });\n\n // Start the extension WS bridge eagerly so the user can pair the extension\n // before saving config / running any tool. Idempotent (returns current state\n // if already running).\n authenticated.post('/api/browser/extension/start', strictRateLimitMiddleware, async (c) => {\n let body: unknown;\n try {\n body = await c.req.json();\n } catch {\n body = {};\n }\n const input = body && typeof body === 'object' && !Array.isArray(body)\n ? (body as Record<string, unknown>)\n : {};\n const port =\n typeof input.port === 'number' && input.port >= 1024 && input.port <= 65535\n ? Math.floor(input.port)\n : DEFAULT_EXTENSION_PORT;\n const hostRaw = typeof input.host === 'string' && input.host.trim() ? input.host.trim() : DEFAULT_EXTENSION_HOST;\n if (!isLoopbackHost(hostRaw)) {\n return c.json({ ok: false, error: 'extension bridge host must be loopback' }, 400);\n }\n\n try {\n if (manualExtensionHandle && (manualExtensionHandle.host !== hostRaw || manualExtensionHandle.port !== port)) {\n await manualExtensionHandle.release();\n manualExtensionHandle = null;\n }\n if (!manualExtensionHandle) {\n const { acquireExtensionBrowserServer } = await import(\n '../../../browser/providers/extension-ws-acquire.js'\n );\n const { release } = await acquireExtensionBrowserServer({ host: hostRaw, port });\n manualExtensionHandle = { release, host: hostRaw, port };\n }\n return c.json({ ok: true, payload: { running: true, host: hostRaw, port } });\n } catch (e) {\n return c.json({ ok: false, error: e instanceof Error ? e.message : String(e) }, 500);\n }\n });\n\n authenticated.post('/api/browser/extension/stop', strictRateLimitMiddleware, async (c) => {\n try {\n const { forcedShutdown } = await stopExtensionBridgeFromSettings(service);\n return c.json({\n ok: true,\n payload: { running: false, forcedShutdown },\n });\n } catch (e) {\n return c.json({ ok: false, error: e instanceof Error ? e.message : String(e) }, 500);\n }\n });\n\n authenticated.post('/api/browser/extension/disconnect', strictRateLimitMiddleware, async (c) => {\n try {\n const { getExtensionBrowserProvider } = await import(\n '../../../browser/providers/extension-ws-acquire.js'\n );\n const provider = getExtensionBrowserProvider();\n if (!provider?.isConnected()) {\n return c.json({\n ok: true,\n payload: { connected: false, alreadyDisconnected: true },\n });\n }\n provider.disconnectClient();\n return c.json({ ok: true, payload: { connected: false } });\n } catch (e) {\n return c.json({ ok: false, error: e instanceof Error ? e.message : String(e) }, 500);\n }\n });\n\n // Doctor: does Playwright have a runnable Chromium on disk?\n authenticated.get('/api/browser/playwright/doctor', async (c) => {\n try {\n const { playwrightChromiumDoctor } = await import('../../../browser/providers/playwright-doctor.js');\n const payload = await playwrightChromiumDoctor();\n return c.json({ ok: true, payload });\n } catch (e) {\n return c.json(\n { ok: false, error: e instanceof Error ? e.message : String(e) },\n 500,\n );\n }\n });\n\n // Doctor: CloakBrowser installed?\n authenticated.get('/api/browser/cloakbrowser/doctor', async (c) => {\n const cacheDirRaw = c.req.query('cacheDir');\n const binaryPathRaw = c.req.query('binaryPath');\n try {\n const { cloakBrowserDoctor } = await import('../../../browser/providers/cloakbrowser.js');\n const status = await cloakBrowserDoctor({\n cacheDir: cacheDirRaw && cacheDirRaw.trim() ? cacheDirRaw.trim() : undefined,\n binaryPath: binaryPathRaw && binaryPathRaw.trim() ? binaryPathRaw.trim() : undefined,\n });\n return c.json({ ok: true, payload: status });\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return c.json({ ok: false, error: message }, 400);\n }\n });\n\n // Runtime status for CloakBrowser (CDP port + profile dir from saved agent defaults).\n authenticated.get('/api/browser/cloakbrowser/status', async (c) => {\n try {\n const { cloakBrowserConfigFromAgentDefaults } = await import('../../../browser/backend-from-config.js');\n const { probeCloakBrowserRuntime } = await import('../../../browser/providers/cloakbrowser.js');\n const config = cloakBrowserConfigFromAgentDefaults(service.currentConfig as Config);\n const status = await probeCloakBrowserRuntime(config);\n return c.json({ ok: true, payload: status });\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return c.json({ ok: false, error: message }, 500);\n }\n });\n\n // Open CloakBrowser with the same profile/settings agents use (saved config, headed).\n authenticated.post('/api/browser/cloakbrowser/launch', strictRateLimitMiddleware, async (c) => {\n try {\n const { cloakBrowserConfigFromAgentDefaults } = await import('../../../browser/backend-from-config.js');\n const { launchCloakBrowser } = await import('../../../browser/providers/cloakbrowser.js');\n const config = cloakBrowserConfigFromAgentDefaults(service.currentConfig as Config);\n const result = await launchCloakBrowser({\n ...config,\n skipPlaywrightConnect: true,\n });\n return c.json({\n ok: true,\n payload: {\n running: true,\n reused: result.reused,\n port: result.cdpPort,\n pid: result.pid,\n userDataDir: result.userDataDir,\n temporaryProfile: config.temporaryProfile === true,\n },\n });\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return c.json({ ok: false, error: message }, 500);\n }\n });\n\n // Ping a user-supplied CDP endpoint — loopback only (SSRF guard).\n authenticated.post('/api/browser/cdp/ping', strictRateLimitMiddleware, async (c) => {\n let body: unknown;\n try {\n body = await c.req.json();\n } catch {\n return c.json({ ok: false, error: 'invalid JSON body' }, 400);\n }\n const input = body && typeof body === 'object' && !Array.isArray(body)\n ? (body as Record<string, unknown>)\n : {};\n const cdpUrl = typeof input.cdpUrl === 'string' ? input.cdpUrl.trim() : '';\n if (!cdpUrl) return c.json({ ok: false, error: 'cdpUrl is required' }, 400);\n\n const loopback = loopbackHostnameFromUrl(cdpUrl);\n if (!loopback) {\n return c.json(\n { ok: false, error: 'CDP ping only allowed for loopback hosts (127.0.0.1 / localhost / ::1)' },\n 403,\n );\n }\n let httpBase: URL;\n try {\n httpBase = new URL(cdpUrl);\n httpBase.protocol = httpBase.protocol === 'wss:' ? 'https:' : 'http:';\n httpBase.pathname = '/json/version';\n httpBase.search = '';\n httpBase.hash = '';\n } catch (e) {\n return c.json({ ok: false, error: e instanceof Error ? e.message : 'invalid cdpUrl' }, 400);\n }\n try {\n const res = await fetch(httpBase.toString(), { signal: AbortSignal.timeout(2000) });\n if (!res.ok) {\n return c.json({ ok: true, payload: { reachable: false, status: res.status } });\n }\n const data = (await res.json()) as { Browser?: string; 'Protocol-Version'?: string; webSocketDebuggerUrl?: string };\n return c.json({\n ok: true,\n payload: {\n reachable: true,\n browser: data.Browser ?? null,\n protocolVersion: data['Protocol-Version'] ?? null,\n webSocketDebuggerUrl: data.webSocketDebuggerUrl ?? null,\n },\n });\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return c.json({ ok: true, payload: { reachable: false, error: message } });\n }\n });\n\n // Spawn a local debuggable Chrome and return its WS endpoint.\n authenticated.post('/api/browser/cdp/launch', strictRateLimitMiddleware, async (c) => {\n let body: unknown;\n try {\n body = await c.req.json();\n } catch {\n body = {};\n }\n const input = body && typeof body === 'object' && !Array.isArray(body)\n ? (body as Record<string, unknown>)\n : {};\n const executablePath =\n typeof input.executablePath === 'string' && input.executablePath.trim()\n ? input.executablePath.trim()\n : undefined;\n try {\n const { launchLocalCdpChrome } = await import('../../../browser/cdp-local-launcher.js');\n const result = await launchLocalCdpChrome({ executablePath });\n return c.json({ ok: true, payload: result });\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return c.json({ ok: false, error: message }, 500);\n }\n });\n\n authenticated.post('/api/browser/cdp/stop', strictRateLimitMiddleware, async (c) => {\n let body: unknown;\n try {\n body = await c.req.json();\n } catch {\n return c.json({ ok: false, error: 'invalid JSON body' }, 400);\n }\n const input = body && typeof body === 'object' && !Array.isArray(body)\n ? (body as Record<string, unknown>)\n : {};\n const port = typeof input.port === 'number' && Number.isInteger(input.port) ? input.port : NaN;\n if (!Number.isFinite(port) || port < 1024 || port > 65535) {\n return c.json({ ok: false, error: 'port must be an integer in [1024, 65535]' }, 400);\n }\n const { stopLocalCdpChrome } = await import('../../../browser/cdp-local-launcher.js');\n const stopped = await stopLocalCdpChrome(port);\n return c.json({ ok: true, payload: { stopped } });\n });\n\n authenticated.get('/api/browser/cdp/instances', async (c) => {\n const { listLocalCdpInstances } = await import('../../../browser/cdp-local-launcher.js');\n return c.json({ ok: true, payload: { instances: listLocalCdpInstances() } });\n });\n\n // Cloud provider connection test.\n authenticated.post('/api/browser/cloud/test-connection', strictRateLimitMiddleware, async (c) => {\n let body: unknown;\n try {\n body = await c.req.json();\n } catch {\n return c.json({ ok: false, error: 'invalid JSON body' }, 400);\n }\n const input = body && typeof body === 'object' && !Array.isArray(body)\n ? (body as Record<string, unknown>)\n : {};\n const provider = input.provider;\n const apiKeyRaw = typeof input.apiKey === 'string' ? input.apiKey.trim() : '';\n\n // The masked sentinel means \"use the stored config key\".\n let apiKey = apiKeyRaw;\n if (apiKey === '***' || apiKey === '••••••••••••') {\n const stored =\n (service.currentConfig as Config)?.agents?.defaults?.browser?.cloud?.apiKey;\n apiKey = typeof stored === 'string' ? stored.trim() : '';\n }\n if (!apiKey) {\n if (provider === 'browserbase') apiKey = process.env.BROWSERBASE_API_KEY ?? '';\n else if (provider === 'browser-use') apiKey = process.env.BROWSER_USE_API_KEY ?? '';\n }\n if (!apiKey) {\n return c.json({ ok: true, payload: { reachable: false, error: 'No API key configured' } });\n }\n\n try {\n if (provider === 'browserbase') {\n const res = await fetch('https://api.browserbase.com/v1/projects', {\n headers: { 'x-bb-api-key': apiKey },\n signal: AbortSignal.timeout(5000),\n });\n if (!res.ok) {\n return c.json({\n ok: true,\n payload: { reachable: false, status: res.status, error: await res.text().catch(() => '') },\n });\n }\n const data = (await res.json().catch(() => null)) as unknown;\n const projects = Array.isArray(data) ? data : Array.isArray((data as { data?: unknown[] })?.data) ? (data as { data: unknown[] }).data : [];\n return c.json({ ok: true, payload: { reachable: true, projectCount: projects.length } });\n }\n if (provider === 'browser-use') {\n const res = await fetch('https://api.browser-use.com/api/v1/users/me', {\n headers: { Authorization: `Bearer ${apiKey}` },\n signal: AbortSignal.timeout(5000),\n });\n if (!res.ok) {\n return c.json({\n ok: true,\n payload: { reachable: false, status: res.status, error: await res.text().catch(() => '') },\n });\n }\n return c.json({ ok: true, payload: { reachable: true } });\n }\n return c.json({ ok: false, error: 'provider must be browserbase or browser-use' }, 400);\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return c.json({ ok: true, payload: { reachable: false, error: message } });\n }\n });\n\n authenticated.post('/api/browser/playwright/install', strictRateLimitMiddleware, async (c) => {\n try {\n const { installPlaywrightChromium } = await import('../../../browser/providers/playwright-install.js');\n const payload = await installPlaywrightChromium();\n return c.json({ ok: true, payload });\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return c.json({ ok: false, error: message || 'Failed to install Playwright Chromium' }, 500);\n }\n });\n\n authenticated.post('/api/browser/cloakbrowser/install', strictRateLimitMiddleware, async (c) => {\n let body: unknown;\n try {\n body = await c.req.json();\n } catch {\n body = {};\n }\n const input = body && typeof body === 'object' && !Array.isArray(body)\n ? (body as Record<string, unknown>)\n : {};\n const cacheDir = typeof input.cacheDir === 'string' && input.cacheDir.trim()\n ? input.cacheDir.trim()\n : undefined;\n const binaryPath = typeof input.binaryPath === 'string' && input.binaryPath.trim()\n ? input.binaryPath.trim()\n : undefined;\n\n try {\n const { installCloakBrowser } = await import('../../../browser/providers/cloakbrowser.js');\n const status = await installCloakBrowser({ cacheDir, binaryPath });\n return c.json({ ok: true, payload: status });\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return c.json({ ok: false, error: message }, 500);\n }\n });\n}\n"],"mappings":"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"}
@@ -37,7 +37,7 @@ function registerCommandsSkillsRoutes(authenticated, deps) {
37
37
  });
38
38
  authenticated.get("/api/skills", (c) => {
39
39
  const lang = c.req.query("lang")?.trim() || void 0;
40
- const payload = service.getSkillsApi(lang);
40
+ const payload = service.marketplace.getSkillsApi(lang);
41
41
  return c.json({
42
42
  ok: true,
43
43
  payload
@@ -59,7 +59,7 @@ function registerCommandsSkillsRoutes(authenticated, deps) {
59
59
  }, 400);
60
60
  }
61
61
  const lang = c.req.query("lang")?.trim() || void 0;
62
- const data = service.getSkillMarkdownSource(skillName, lang);
62
+ const data = service.marketplace.getSkillMarkdownSource(skillName, lang);
63
63
  if (!data) return c.json({
64
64
  ok: false,
65
65
  error: "Skill not found"
@@ -70,7 +70,7 @@ function registerCommandsSkillsRoutes(authenticated, deps) {
70
70
  });
71
71
  });
72
72
  authenticated.post("/api/skills/reload", (c) => {
73
- service.reloadSkillsFromDisk();
73
+ service.marketplace.reloadSkills();
74
74
  return c.json({ ok: true });
75
75
  });
76
76
  authenticated.patch("/api/skills/enabled", async (c) => {
@@ -90,7 +90,7 @@ function registerCommandsSkillsRoutes(authenticated, deps) {
90
90
  error: "Expected { skillName: string, enabled: boolean }"
91
91
  }, 400);
92
92
  try {
93
- service.patchSkillEnabled(skillName, enabled);
93
+ service.marketplace.patchSkillEnabled(skillName, enabled);
94
94
  return c.json({ ok: true });
95
95
  } catch (err) {
96
96
  return c.json({
@@ -110,7 +110,7 @@ function registerCommandsSkillsRoutes(authenticated, deps) {
110
110
  const category = c.req.query("category")?.trim() ?? "";
111
111
  const provider = parseMarketplaceProviderQuery(c.req.query("provider"));
112
112
  try {
113
- const payload = await service.fetchSkillsMarketplaceCatalog({
113
+ const payload = await service.marketplace.fetchSkillsCatalog({
114
114
  q: q || void 0,
115
115
  page,
116
116
  pageSize,
@@ -129,7 +129,7 @@ function registerCommandsSkillsRoutes(authenticated, deps) {
129
129
  }
130
130
  });
131
131
  authenticated.get("/api/skills/marketplace/provider", (c) => {
132
- const info = service.getSkillsMarketplaceProvider();
132
+ const info = service.marketplace.getSkillsProvider();
133
133
  return c.json({
134
134
  ok: true,
135
135
  payload: info
@@ -137,8 +137,8 @@ function registerCommandsSkillsRoutes(authenticated, deps) {
137
137
  });
138
138
  /** All registered marketplace providers (built-in + extension-contributed). */
139
139
  authenticated.get("/api/skills/marketplace/providers", (c) => {
140
- const providers = service.getSkillsMarketplaceProviders();
141
- const current = service.getSkillsMarketplaceProvider();
140
+ const providers = service.marketplace.getSkillsProviders();
141
+ const current = service.marketplace.getSkillsProvider();
142
142
  return c.json({
143
143
  ok: true,
144
144
  payload: {
@@ -150,7 +150,7 @@ function registerCommandsSkillsRoutes(authenticated, deps) {
150
150
  authenticated.get("/api/skills/marketplace/categories", async (c) => {
151
151
  const provider = parseMarketplaceProviderQuery(c.req.query("provider"));
152
152
  try {
153
- const payload = await service.fetchSkillsMarketplaceCategories(provider);
153
+ const payload = await service.marketplace.fetchSkillsCategories(provider);
154
154
  return c.json({
155
155
  ok: true,
156
156
  payload
@@ -179,7 +179,7 @@ function registerCommandsSkillsRoutes(authenticated, deps) {
179
179
  }
180
180
  try {
181
181
  const provider = parseMarketplaceProviderQuery(c.req.query("provider"));
182
- const payload = await service.fetchSkillsMarketplacePackageDetail(pkgName, provider);
182
+ const payload = await service.marketplace.fetchSkillsPackageDetail(pkgName, provider);
183
183
  return c.json({
184
184
  ok: true,
185
185
  payload
@@ -210,7 +210,7 @@ function registerCommandsSkillsRoutes(authenticated, deps) {
210
210
  error: "Expected { name: string, version?: string, overwrite?: boolean }"
211
211
  }, 400);
212
212
  try {
213
- const payload = await service.installSkillFromMarketplace({
213
+ const payload = await service.marketplace.installSkill({
214
214
  name,
215
215
  version,
216
216
  overwrite,
@@ -254,7 +254,7 @@ function registerCommandsSkillsRoutes(authenticated, deps) {
254
254
  const skillId = typeof skillIdRaw === "string" && skillIdRaw.trim() ? skillIdRaw.trim() : void 0;
255
255
  const overwrite = overwriteRaw === "true" || overwriteRaw === true || overwriteRaw === "1";
256
256
  try {
257
- const result = service.installManagedSkillZip(buf, {
257
+ const result = service.marketplace.installSkillZip(buf, {
258
258
  skillId,
259
259
  overwrite
260
260
  });
@@ -276,7 +276,7 @@ function registerCommandsSkillsRoutes(authenticated, deps) {
276
276
  error: "Missing id"
277
277
  }, 400);
278
278
  try {
279
- service.deleteManagedSkill(id);
279
+ service.marketplace.deleteSkill(id);
280
280
  return c.json({ ok: true });
281
281
  } catch (err) {
282
282
  return c.json({
@@ -1 +1 @@
1
- {"version":3,"file":"commands-skills.js","names":[],"sources":["../../../../../src/gateway/hono/routes/commands-skills.ts"],"sourcesContent":["import type { Hono } from 'hono';\n\nimport { commandRegistry } from '../../../chat-commands/index.js';\nimport { isRegisteredProvider } from '../../../agent/skills/skills-marketplace.js';\nimport type { AuthenticatedRouteDeps } from './deps.js';\n\nfunction parseMarketplaceProviderQuery(raw: string | undefined): string | undefined {\n const v = raw?.trim().toLowerCase();\n if (v && isRegisteredProvider(v)) return v;\n return undefined;\n}\n\nexport function registerCommandsSkillsRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void {\n const { service } = deps;\n\n // ========== Chat slash commands (CommandRegistry) ==========\n\n authenticated.get('/api/commands', (c) => {\n const all = commandRegistry.list();\n const commands = all\n .filter((cmd) => cmd.scope.includes('global') || cmd.scope.includes('private'))\n .map((cmd) => ({\n id: cmd.id,\n name: cmd.name,\n aliases: cmd.aliases ?? [],\n description: cmd.description,\n category: cmd.category,\n scope: cmd.scope,\n acceptsArgs: cmd.acceptsArgs ?? false,\n examples: cmd.examples ?? [],\n }));\n const extensionCommands = all\n .filter((cmd) => cmd.category === 'extension')\n .map((cmd) => ({\n id: cmd.id,\n name: cmd.name,\n description: cmd.description,\n extensionId: cmd.id.startsWith('ext.') ? cmd.id.split('.')[1] : undefined,\n }));\n return c.json({ ok: true, payload: { commands, extensionCommands } });\n });\n\n // ========== Skills (managed global skills under ~/.xopc/skills) ==========\n\n authenticated.get('/api/skills', (c) => {\n const lang = c.req.query('lang')?.trim() || undefined;\n const payload = service.getSkillsApi(lang);\n return c.json({ ok: true, payload });\n });\n\n authenticated.get('/api/skills/:skillName/content', (c) => {\n const raw = c.req.param('skillName');\n if (!raw) {\n return c.json({ ok: false, error: 'Missing skill name' }, 400);\n }\n let skillName: string;\n try {\n skillName = decodeURIComponent(raw);\n } catch {\n return c.json({ ok: false, error: 'Invalid skill name' }, 400);\n }\n const lang = c.req.query('lang')?.trim() || undefined;\n const data = service.getSkillMarkdownSource(skillName, lang);\n if (!data) {\n return c.json({ ok: false, error: 'Skill not found' }, 404);\n }\n return c.json({ ok: true, payload: data });\n });\n\n authenticated.post('/api/skills/reload', (c) => {\n service.reloadSkillsFromDisk();\n return c.json({ ok: true });\n });\n\n authenticated.patch('/api/skills/enabled', async (c) => {\n let body: { skillName?: unknown; enabled?: unknown };\n try {\n body = (await c.req.json()) as { skillName?: unknown; enabled?: unknown };\n } catch {\n return c.json({ ok: false, error: 'Invalid JSON' }, 400);\n }\n const skillName = typeof body.skillName === 'string' ? body.skillName.trim() : '';\n const enabled = body.enabled;\n if (!skillName || typeof enabled !== 'boolean') {\n return c.json({ ok: false, error: 'Expected { skillName: string, enabled: boolean }' }, 400);\n }\n try {\n service.patchSkillEnabled(skillName, enabled);\n return c.json({ ok: true });\n } catch (err) {\n return c.json(\n { ok: false, error: err instanceof Error ? err.message : 'Update failed' },\n 400,\n );\n }\n });\n\n authenticated.get('/api/skills/marketplace', async (c) => {\n const q = c.req.query('q')?.trim() ?? '';\n const pageRaw = c.req.query('page');\n const pageSizeRaw = c.req.query('pageSize');\n const sortRaw = c.req.query('sort');\n const page = pageRaw != null && pageRaw !== '' ? Math.max(1, Number(pageRaw) || 1) : undefined;\n const pageSize =\n pageSizeRaw != null && pageSizeRaw !== ''\n ? Math.min(50, Math.max(1, Number(pageSizeRaw) || 20))\n : undefined;\n const sort =\n sortRaw === 'newest' || sortRaw === 'downloads' ? sortRaw : undefined;\n const category = c.req.query('category')?.trim() ?? '';\n const provider = parseMarketplaceProviderQuery(c.req.query('provider'));\n try {\n const payload = await service.fetchSkillsMarketplaceCatalog(\n {\n q: q || undefined,\n page,\n pageSize,\n sort,\n category: category || undefined,\n },\n provider,\n );\n return c.json({ ok: true, payload });\n } catch (err) {\n return c.json(\n { ok: false, error: err instanceof Error ? err.message : 'Marketplace request failed' },\n 502,\n );\n }\n });\n\n authenticated.get('/api/skills/marketplace/provider', (c) => {\n const info = service.getSkillsMarketplaceProvider();\n return c.json({ ok: true, payload: info });\n });\n\n /** All registered marketplace providers (built-in + extension-contributed). */\n authenticated.get('/api/skills/marketplace/providers', (c) => {\n const providers = service.getSkillsMarketplaceProviders();\n const current = service.getSkillsMarketplaceProvider();\n return c.json({ ok: true, payload: { providers, current: current.provider } });\n });\n\n authenticated.get('/api/skills/marketplace/categories', async (c) => {\n const provider = parseMarketplaceProviderQuery(c.req.query('provider'));\n try {\n const payload = await service.fetchSkillsMarketplaceCategories(provider);\n return c.json({ ok: true, payload });\n } catch (err) {\n return c.json(\n { ok: false, error: err instanceof Error ? err.message : 'Marketplace categories failed' },\n 502,\n );\n }\n });\n\n authenticated.get('/api/skills/marketplace/packages/:pkgName', async (c) => {\n const raw = c.req.param('pkgName');\n if (!raw) {\n return c.json({ ok: false, error: 'Missing package name' }, 400);\n }\n let pkgName: string;\n try {\n pkgName = decodeURIComponent(raw);\n } catch {\n return c.json({ ok: false, error: 'Invalid package name' }, 400);\n }\n try {\n const provider = parseMarketplaceProviderQuery(c.req.query('provider'));\n const payload = await service.fetchSkillsMarketplacePackageDetail(pkgName, provider);\n return c.json({ ok: true, payload });\n } catch (err) {\n return c.json(\n { ok: false, error: err instanceof Error ? err.message : 'Marketplace request failed' },\n 502,\n );\n }\n });\n\n authenticated.post('/api/skills/marketplace/install', async (c) => {\n let body: { name?: unknown; version?: unknown; overwrite?: unknown; provider?: unknown };\n try {\n body = (await c.req.json()) as typeof body;\n } catch {\n return c.json({ ok: false, error: 'Invalid JSON' }, 400);\n }\n const name = typeof body.name === 'string' ? body.name.trim() : '';\n const version = typeof body.version === 'string' ? body.version.trim() : undefined;\n const overwrite =\n body.overwrite === true ||\n body.overwrite === 'true' ||\n body.overwrite === '1';\n const provider = parseMarketplaceProviderQuery(\n typeof body.provider === 'string' ? body.provider : undefined,\n );\n if (!name) {\n return c.json({ ok: false, error: 'Expected { name: string, version?: string, overwrite?: boolean }' }, 400);\n }\n try {\n const payload = await service.installSkillFromMarketplace({ name, version, overwrite, provider });\n return c.json({ ok: true, payload });\n } catch (err) {\n return c.json(\n { ok: false, error: err instanceof Error ? err.message : 'Install failed' },\n 400,\n );\n }\n });\n\n authenticated.post('/api/skills/upload', async (c) => {\n let body: Record<string, unknown>;\n try {\n body = await c.req.parseBody({ all: true });\n } catch {\n return c.json({ ok: false, error: 'Invalid multipart body' }, 400);\n }\n const file = body['file'];\n if (!file || typeof file !== 'object') {\n return c.json({ ok: false, error: 'Missing file field' }, 400);\n }\n let buf: Buffer;\n if (file instanceof File) {\n buf = Buffer.from(await file.arrayBuffer());\n } else if (typeof (file as Blob).arrayBuffer === 'function') {\n buf = Buffer.from(await (file as Blob).arrayBuffer());\n } else {\n return c.json({ ok: false, error: 'Invalid file upload' }, 400);\n }\n const skillIdRaw = body['skillId'];\n const overwriteRaw = body['overwrite'];\n const skillId = typeof skillIdRaw === 'string' && skillIdRaw.trim() ? skillIdRaw.trim() : undefined;\n const overwrite =\n overwriteRaw === 'true' ||\n overwriteRaw === true ||\n overwriteRaw === '1';\n\n try {\n const result = service.installManagedSkillZip(buf, { skillId, overwrite });\n return c.json({ ok: true, payload: result });\n } catch (err) {\n return c.json(\n { ok: false, error: err instanceof Error ? err.message : 'Install failed' },\n 400,\n );\n }\n });\n\n authenticated.delete('/api/skills/:id', (c) => {\n const id = c.req.param('id');\n if (!id) {\n return c.json({ ok: false, error: 'Missing id' }, 400);\n }\n try {\n service.deleteManagedSkill(id);\n return c.json({ ok: true });\n } catch (err) {\n return c.json(\n { ok: false, error: err instanceof Error ? err.message : 'Delete failed' },\n 400,\n );\n }\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"commands-skills.js","names":[],"sources":["../../../../../src/gateway/hono/routes/commands-skills.ts"],"sourcesContent":["import type { Hono } from 'hono';\n\nimport { commandRegistry } from '../../../chat-commands/index.js';\nimport { isRegisteredProvider } from '../../../agent/skills/skills-marketplace.js';\nimport type { AuthenticatedRouteDeps } from './deps.js';\n\nfunction parseMarketplaceProviderQuery(raw: string | undefined): string | undefined {\n const v = raw?.trim().toLowerCase();\n if (v && isRegisteredProvider(v)) return v;\n return undefined;\n}\n\nexport function registerCommandsSkillsRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void {\n const { service } = deps;\n\n // ========== Chat slash commands (CommandRegistry) ==========\n\n authenticated.get('/api/commands', (c) => {\n const all = commandRegistry.list();\n const commands = all\n .filter((cmd) => cmd.scope.includes('global') || cmd.scope.includes('private'))\n .map((cmd) => ({\n id: cmd.id,\n name: cmd.name,\n aliases: cmd.aliases ?? [],\n description: cmd.description,\n category: cmd.category,\n scope: cmd.scope,\n acceptsArgs: cmd.acceptsArgs ?? false,\n examples: cmd.examples ?? [],\n }));\n const extensionCommands = all\n .filter((cmd) => cmd.category === 'extension')\n .map((cmd) => ({\n id: cmd.id,\n name: cmd.name,\n description: cmd.description,\n extensionId: cmd.id.startsWith('ext.') ? cmd.id.split('.')[1] : undefined,\n }));\n return c.json({ ok: true, payload: { commands, extensionCommands } });\n });\n\n // ========== Skills (managed global skills under ~/.xopc/skills) ==========\n\n authenticated.get('/api/skills', (c) => {\n const lang = c.req.query('lang')?.trim() || undefined;\n const payload = service.marketplace.getSkillsApi(lang);\n return c.json({ ok: true, payload });\n });\n\n authenticated.get('/api/skills/:skillName/content', (c) => {\n const raw = c.req.param('skillName');\n if (!raw) {\n return c.json({ ok: false, error: 'Missing skill name' }, 400);\n }\n let skillName: string;\n try {\n skillName = decodeURIComponent(raw);\n } catch {\n return c.json({ ok: false, error: 'Invalid skill name' }, 400);\n }\n const lang = c.req.query('lang')?.trim() || undefined;\n const data = service.marketplace.getSkillMarkdownSource(skillName, lang);\n if (!data) {\n return c.json({ ok: false, error: 'Skill not found' }, 404);\n }\n return c.json({ ok: true, payload: data });\n });\n\n authenticated.post('/api/skills/reload', (c) => {\n service.marketplace.reloadSkills();\n return c.json({ ok: true });\n });\n\n authenticated.patch('/api/skills/enabled', async (c) => {\n let body: { skillName?: unknown; enabled?: unknown };\n try {\n body = (await c.req.json()) as { skillName?: unknown; enabled?: unknown };\n } catch {\n return c.json({ ok: false, error: 'Invalid JSON' }, 400);\n }\n const skillName = typeof body.skillName === 'string' ? body.skillName.trim() : '';\n const enabled = body.enabled;\n if (!skillName || typeof enabled !== 'boolean') {\n return c.json({ ok: false, error: 'Expected { skillName: string, enabled: boolean }' }, 400);\n }\n try {\n service.marketplace.patchSkillEnabled(skillName, enabled);\n return c.json({ ok: true });\n } catch (err) {\n return c.json(\n { ok: false, error: err instanceof Error ? err.message : 'Update failed' },\n 400,\n );\n }\n });\n\n authenticated.get('/api/skills/marketplace', async (c) => {\n const q = c.req.query('q')?.trim() ?? '';\n const pageRaw = c.req.query('page');\n const pageSizeRaw = c.req.query('pageSize');\n const sortRaw = c.req.query('sort');\n const page = pageRaw != null && pageRaw !== '' ? Math.max(1, Number(pageRaw) || 1) : undefined;\n const pageSize =\n pageSizeRaw != null && pageSizeRaw !== ''\n ? Math.min(50, Math.max(1, Number(pageSizeRaw) || 20))\n : undefined;\n const sort =\n sortRaw === 'newest' || sortRaw === 'downloads' ? sortRaw : undefined;\n const category = c.req.query('category')?.trim() ?? '';\n const provider = parseMarketplaceProviderQuery(c.req.query('provider'));\n try {\n const payload = await service.marketplace.fetchSkillsCatalog(\n {\n q: q || undefined,\n page,\n pageSize,\n sort,\n category: category || undefined,\n },\n provider,\n );\n return c.json({ ok: true, payload });\n } catch (err) {\n return c.json(\n { ok: false, error: err instanceof Error ? err.message : 'Marketplace request failed' },\n 502,\n );\n }\n });\n\n authenticated.get('/api/skills/marketplace/provider', (c) => {\n const info = service.marketplace.getSkillsProvider();\n return c.json({ ok: true, payload: info });\n });\n\n /** All registered marketplace providers (built-in + extension-contributed). */\n authenticated.get('/api/skills/marketplace/providers', (c) => {\n const providers = service.marketplace.getSkillsProviders();\n const current = service.marketplace.getSkillsProvider();\n return c.json({ ok: true, payload: { providers, current: current.provider } });\n });\n\n authenticated.get('/api/skills/marketplace/categories', async (c) => {\n const provider = parseMarketplaceProviderQuery(c.req.query('provider'));\n try {\n const payload = await service.marketplace.fetchSkillsCategories(provider);\n return c.json({ ok: true, payload });\n } catch (err) {\n return c.json(\n { ok: false, error: err instanceof Error ? err.message : 'Marketplace categories failed' },\n 502,\n );\n }\n });\n\n authenticated.get('/api/skills/marketplace/packages/:pkgName', async (c) => {\n const raw = c.req.param('pkgName');\n if (!raw) {\n return c.json({ ok: false, error: 'Missing package name' }, 400);\n }\n let pkgName: string;\n try {\n pkgName = decodeURIComponent(raw);\n } catch {\n return c.json({ ok: false, error: 'Invalid package name' }, 400);\n }\n try {\n const provider = parseMarketplaceProviderQuery(c.req.query('provider'));\n const payload = await service.marketplace.fetchSkillsPackageDetail(pkgName, provider);\n return c.json({ ok: true, payload });\n } catch (err) {\n return c.json(\n { ok: false, error: err instanceof Error ? err.message : 'Marketplace request failed' },\n 502,\n );\n }\n });\n\n authenticated.post('/api/skills/marketplace/install', async (c) => {\n let body: { name?: unknown; version?: unknown; overwrite?: unknown; provider?: unknown };\n try {\n body = (await c.req.json()) as typeof body;\n } catch {\n return c.json({ ok: false, error: 'Invalid JSON' }, 400);\n }\n const name = typeof body.name === 'string' ? body.name.trim() : '';\n const version = typeof body.version === 'string' ? body.version.trim() : undefined;\n const overwrite =\n body.overwrite === true ||\n body.overwrite === 'true' ||\n body.overwrite === '1';\n const provider = parseMarketplaceProviderQuery(\n typeof body.provider === 'string' ? body.provider : undefined,\n );\n if (!name) {\n return c.json({ ok: false, error: 'Expected { name: string, version?: string, overwrite?: boolean }' }, 400);\n }\n try {\n const payload = await service.marketplace.installSkill({ name, version, overwrite, provider });\n return c.json({ ok: true, payload });\n } catch (err) {\n return c.json(\n { ok: false, error: err instanceof Error ? err.message : 'Install failed' },\n 400,\n );\n }\n });\n\n authenticated.post('/api/skills/upload', async (c) => {\n let body: Record<string, unknown>;\n try {\n body = await c.req.parseBody({ all: true });\n } catch {\n return c.json({ ok: false, error: 'Invalid multipart body' }, 400);\n }\n const file = body['file'];\n if (!file || typeof file !== 'object') {\n return c.json({ ok: false, error: 'Missing file field' }, 400);\n }\n let buf: Buffer;\n if (file instanceof File) {\n buf = Buffer.from(await file.arrayBuffer());\n } else if (typeof (file as Blob).arrayBuffer === 'function') {\n buf = Buffer.from(await (file as Blob).arrayBuffer());\n } else {\n return c.json({ ok: false, error: 'Invalid file upload' }, 400);\n }\n const skillIdRaw = body['skillId'];\n const overwriteRaw = body['overwrite'];\n const skillId = typeof skillIdRaw === 'string' && skillIdRaw.trim() ? skillIdRaw.trim() : undefined;\n const overwrite =\n overwriteRaw === 'true' ||\n overwriteRaw === true ||\n overwriteRaw === '1';\n\n try {\n const result = service.marketplace.installSkillZip(buf, { skillId, overwrite });\n return c.json({ ok: true, payload: result });\n } catch (err) {\n return c.json(\n { ok: false, error: err instanceof Error ? err.message : 'Install failed' },\n 400,\n );\n }\n });\n\n authenticated.delete('/api/skills/:id', (c) => {\n const id = c.req.param('id');\n if (!id) {\n return c.json({ ok: false, error: 'Missing id' }, 400);\n }\n try {\n service.marketplace.deleteSkill(id);\n return c.json({ ok: true });\n } catch (err) {\n return c.json(\n { ok: false, error: err instanceof Error ? err.message : 'Delete failed' },\n 400,\n );\n }\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * `PATCH /api/config` — `body.agents.defaults.*` section.
3
+ *
4
+ * Mutates `config.agents.defaults` in place to match the patch body. All
5
+ * branches are field-by-field "if undefined skip, if null delete, else
6
+ * coerce/validate then assign" so the web UI can clear individual settings
7
+ * with `{ field: null }` without rewriting the rest.
8
+ *
9
+ * Was 660 lines inlined in `config.ts` (40% of the route handler) — extracted
10
+ * so the dispatcher can chain section patchers instead of being a single 1600
11
+ * -line if-else cascade.
12
+ *
13
+ * **No early returns / errors.** This section never rejects the patch; out-of
14
+ * -range numbers and unrecognized strings are silently dropped (preserves
15
+ * pre-extraction behavior so the route stays a "best-effort merge").
16
+ */
17
+ import type { Config } from '../../../../config/schema.js';
18
+ export declare function applyAgentsPatch(config: Config, body: any): void;