@xopcai/xopc 0.0.82 → 0.0.83

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 (704) hide show
  1. package/README.md +1 -1
  2. package/README.zh-CN.md +1 -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-CrpYTHJS.js +222 -0
  23. package/dist/gateway/static/root/assets/{apps-page-pJ27dsqn.js → apps-page-1mcKh5Rh.js} +1 -1
  24. package/dist/gateway/static/root/assets/channels-settings-zd6QNKPx.js +1 -0
  25. package/dist/gateway/static/root/assets/{channels-status-swr-D1KYmOmi.js → channels-status-swr-uRAuhiUo.js} +1 -1
  26. package/dist/gateway/static/root/assets/{cron-api-Y2wfSJVI.js → cron-api-O2Q_ruV6.js} +1 -1
  27. package/dist/gateway/static/root/assets/{cron-page-B97KU_RG.js → cron-page-By09AQD-.js} +1 -1
  28. package/dist/gateway/static/root/assets/{dist-CboA_Css.js → dist-BpQxde0t.js} +1 -1
  29. package/dist/gateway/static/root/assets/{extension-debug-page-DN_zNmpo.js → extension-debug-page-CY27wj_p.js} +1 -1
  30. package/dist/gateway/static/root/assets/{extension-page-BUXtOzv5.js → extension-page-C-Ed5ZmP.js} +1 -1
  31. package/dist/gateway/static/root/assets/{extension-settings-page-C2dX4KCW.js → extension-settings-page-raLux7E7.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-fa_hiQcX.js} +1 -1
  34. package/dist/gateway/static/root/assets/{heartbeat-config-api-DvfiRVrc.js → heartbeat-config-api-BVl5VHvL.js} +1 -1
  35. package/dist/gateway/static/root/assets/index-BuFldCsB.css +1 -0
  36. package/dist/gateway/static/root/assets/{index-DQuaMye9.js → index-Y-iqo-gL.js} +94 -85
  37. package/dist/gateway/static/root/assets/{logs-page-BQuBpHcc.js → logs-page-BdH2n7ZW.js} +1 -1
  38. package/dist/gateway/static/root/assets/sessions-page-Vpchzdp-.js +1 -0
  39. package/dist/gateway/static/root/assets/{settings-form-section-2Yu-FASs.js → settings-form-section-Kk1yAGBl.js} +1 -1
  40. package/dist/gateway/static/root/assets/settings-page-KBm0u6Dz.js +3 -0
  41. package/dist/gateway/static/root/assets/skills-page-BjeXXaOn.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-DpTxN4AF.js} +1 -1
  44. package/dist/gateway/static/root/assets/voice-api-key-field-CwO8Cf01.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/commands/agent/stream-renderer.js +1 -1
  271. package/dist/src/cli/commands/agent/stream-renderer.js.map +1 -1
  272. package/dist/src/cli/commands/agent.js +4 -4
  273. package/dist/src/cli/commands/agent.js.map +1 -1
  274. package/dist/src/cli/commands/browser-cli-helpers.js +2 -1
  275. package/dist/src/cli/commands/browser-cli-helpers.js.map +1 -1
  276. package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
  277. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  278. package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -1
  279. package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
  280. package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
  281. package/dist/src/cli/commands/extension-dev.js +2 -2
  282. package/dist/src/cli/commands/extension-dev.js.map +1 -1
  283. package/dist/src/cli/commands/extension-marketplace.js +2 -2
  284. package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
  285. package/dist/src/cli/commands/extension-pack.js +1 -1
  286. package/dist/src/cli/commands/gateway/call.js +1 -1
  287. package/dist/src/cli/commands/gateway/call.js.map +1 -1
  288. package/dist/src/cli/commands/gateway/health.js +1 -1
  289. package/dist/src/cli/commands/gateway/health.js.map +1 -1
  290. package/dist/src/cli/commands/gateway/lifecycle-core.d.ts +31 -12
  291. package/dist/src/cli/commands/gateway/lifecycle-core.js +167 -116
  292. package/dist/src/cli/commands/gateway/lifecycle-core.js.map +1 -1
  293. package/dist/src/cli/commands/gateway/lifecycle.d.ts +11 -0
  294. package/dist/src/cli/commands/gateway/lifecycle.js +102 -0
  295. package/dist/src/cli/commands/gateway/lifecycle.js.map +1 -0
  296. package/dist/src/cli/commands/gateway/logs.js +1 -1
  297. package/dist/src/cli/commands/gateway/logs.js.map +1 -1
  298. package/dist/src/cli/commands/gateway/probe.js +1 -1
  299. package/dist/src/cli/commands/gateway/probe.js.map +1 -1
  300. package/dist/src/cli/commands/gateway/restart-health.d.ts +12 -0
  301. package/dist/src/cli/commands/gateway/restart-health.js +45 -1
  302. package/dist/src/cli/commands/gateway/restart-health.js.map +1 -1
  303. package/dist/src/cli/commands/gateway/restart.js +3 -3
  304. package/dist/src/cli/commands/gateway/restart.js.map +1 -1
  305. package/dist/src/cli/commands/gateway/run-foreground.d.ts +0 -1
  306. package/dist/src/cli/commands/gateway/run-foreground.js +0 -35
  307. package/dist/src/cli/commands/gateway/run-foreground.js.map +1 -1
  308. package/dist/src/cli/commands/gateway/service.js +1 -1
  309. package/dist/src/cli/commands/gateway/service.js.map +1 -1
  310. package/dist/src/cli/commands/gateway/shared.d.ts +3 -0
  311. package/dist/src/cli/commands/gateway/shared.js +54 -0
  312. package/dist/src/cli/commands/gateway/shared.js.map +1 -0
  313. package/dist/src/cli/commands/gateway/status.js +1 -1
  314. package/dist/src/cli/commands/gateway/status.js.map +1 -1
  315. package/dist/src/cli/commands/gateway/stop.js +2 -2
  316. package/dist/src/cli/commands/gateway/stop.js.map +1 -1
  317. package/dist/src/cli/commands/gateway/token.js +1 -1
  318. package/dist/src/cli/commands/gateway/token.js.map +1 -1
  319. package/dist/src/cli/commands/gateway.js +5 -5
  320. package/dist/src/cli/commands/gateway.js.map +1 -1
  321. package/dist/src/cli/commands/image.js +2 -2
  322. package/dist/src/cli/commands/image.js.map +1 -1
  323. package/dist/src/cli/commands/init.js +4 -4
  324. package/dist/src/cli/commands/models.js +1 -1
  325. package/dist/src/cli/commands/models.js.map +1 -1
  326. package/dist/src/cli/commands/onboard/gateway.d.ts +0 -8
  327. package/dist/src/cli/commands/onboard/gateway.js +48 -49
  328. package/dist/src/cli/commands/onboard/gateway.js.map +1 -1
  329. package/dist/src/cli/commands/onboard.js +9 -64
  330. package/dist/src/cli/commands/onboard.js.map +1 -1
  331. package/dist/src/cli/commands/session/utils.js +1 -1
  332. package/dist/src/cli/commands/session/utils.js.map +1 -1
  333. package/dist/src/cli/commands/skills.js +1 -1
  334. package/dist/src/cli/commands/tailscale.js +1 -1
  335. package/dist/src/cli/commands/tailscale.js.map +1 -1
  336. package/dist/src/cli/context.d.ts +20 -0
  337. package/dist/src/cli/context.js +23 -0
  338. package/dist/src/cli/context.js.map +1 -0
  339. package/dist/src/cli/extension-cli-register.js +3 -3
  340. package/dist/src/cli/gateway-run-argv.js +1 -4
  341. package/dist/src/cli/gateway-run-argv.js.map +1 -1
  342. package/dist/src/cli/gateway-run-fast-path.js +1 -1
  343. package/dist/src/cli/gateway-run-fast-path.js.map +1 -1
  344. package/dist/src/cli/index.d.ts +1 -7
  345. package/dist/src/cli/index.js +4 -6
  346. package/dist/src/cli/index.js.map +1 -1
  347. package/dist/src/cli/utils/init-workspace-core.js +2 -2
  348. package/dist/src/config/commands.flags.d.ts +3 -0
  349. package/dist/src/config/commands.flags.js +11 -0
  350. package/dist/src/config/commands.flags.js.map +1 -0
  351. package/dist/src/config/index.d.ts +1 -0
  352. package/dist/src/config/index.js +6 -5
  353. package/dist/src/config/index.js.map +1 -1
  354. package/dist/src/config/loader.js +2 -2
  355. package/dist/src/config/models-json.js +2 -2
  356. package/dist/src/config/profile.js +2 -2
  357. package/dist/src/config/schema.d.ts +11 -4
  358. package/dist/src/config/schema.js +13 -12
  359. package/dist/src/config/schema.js.map +1 -1
  360. package/dist/src/config/workspace-path-helpers.d.ts +15 -0
  361. package/dist/src/config/workspace-path-helpers.js +14 -0
  362. package/dist/src/config/workspace-path-helpers.js.map +1 -0
  363. package/dist/src/cron/executor.js +4 -4
  364. package/dist/src/cron/executor.js.map +1 -1
  365. package/dist/src/cron/persistence.js +1 -1
  366. package/dist/src/cron/run-log-store.js +1 -1
  367. package/dist/src/daemon/index.d.ts +0 -1
  368. package/dist/src/daemon/index.js +1 -2
  369. package/dist/src/daemon/install-plan.js +3 -2
  370. package/dist/src/daemon/install-plan.js.map +1 -1
  371. package/dist/src/daemon/launchd.js +2 -2
  372. package/dist/src/daemon/systemd.js +2 -2
  373. package/dist/src/daemon/types.d.ts +0 -6
  374. package/dist/src/extensions/api.d.ts +1 -1
  375. package/dist/src/extensions/api.js +2 -2
  376. package/dist/src/extensions/api.js.map +1 -1
  377. package/dist/src/extensions/bundle-mcp.js +1 -1
  378. package/dist/src/extensions/discover-extensions.js +1 -1
  379. package/dist/src/extensions/extension-registry-impl.d.ts +51 -0
  380. package/dist/src/extensions/extension-registry-impl.js +117 -0
  381. package/dist/src/extensions/extension-registry-impl.js.map +1 -0
  382. package/dist/src/extensions/health.js +1 -1
  383. package/dist/src/extensions/index.js +3 -2
  384. package/dist/src/extensions/loader.d.ts +3 -43
  385. package/dist/src/extensions/loader.js +3 -110
  386. package/dist/src/extensions/loader.js.map +1 -1
  387. package/dist/src/extensions/lockfile.js +2 -2
  388. package/dist/src/extensions/sdk/index.js +2 -1
  389. package/dist/src/extensions/sdk/index.js.map +1 -1
  390. package/dist/src/extensions/types/events.d.ts +7 -1
  391. package/dist/src/gateway/agents-admin.js +2 -2
  392. package/dist/src/gateway/file-path-classifier.js +2 -2
  393. package/dist/src/gateway/heartbeat/service.js +2 -2
  394. package/dist/src/gateway/heartbeat/service.js.map +1 -1
  395. package/dist/src/gateway/hono/app.js +5 -53
  396. package/dist/src/gateway/hono/app.js.map +1 -1
  397. package/dist/src/gateway/hono/lib/extension-store.js +1 -1
  398. package/dist/src/gateway/hono/lib/static-ui.js +2 -2
  399. package/dist/src/gateway/hono/middleware/auth.d.ts +5 -14
  400. package/dist/src/gateway/hono/middleware/auth.js +89 -126
  401. package/dist/src/gateway/hono/middleware/auth.js.map +1 -1
  402. package/dist/src/gateway/hono/middleware/logger.js +1 -1
  403. package/dist/src/gateway/hono/middleware/logger.js.map +1 -1
  404. package/dist/src/gateway/hono/middleware/strict-rate-limit.d.ts +14 -0
  405. package/dist/src/gateway/hono/middleware/strict-rate-limit.js +62 -0
  406. package/dist/src/gateway/hono/middleware/strict-rate-limit.js.map +1 -0
  407. package/dist/src/gateway/hono/oauth.js +1 -1
  408. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +4 -4
  409. package/dist/src/gateway/hono/routes/auth-registry-extensions.js.map +1 -1
  410. package/dist/src/gateway/hono/routes/browser.d.ts +20 -0
  411. package/dist/src/gateway/hono/routes/browser.js +626 -0
  412. package/dist/src/gateway/hono/routes/browser.js.map +1 -0
  413. package/dist/src/gateway/hono/routes/commands-skills.js +13 -13
  414. package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
  415. package/dist/src/gateway/hono/routes/config-patch/agents.d.ts +18 -0
  416. package/dist/src/gateway/hono/routes/config-patch/agents.js +418 -0
  417. package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -0
  418. package/dist/src/gateway/hono/routes/config-patch/channels.d.ts +12 -0
  419. package/dist/src/gateway/hono/routes/config-patch/channels.js +186 -0
  420. package/dist/src/gateway/hono/routes/config-patch/channels.js.map +1 -0
  421. package/dist/src/gateway/hono/routes/config-patch/gateway.d.ts +18 -0
  422. package/dist/src/gateway/hono/routes/config-patch/gateway.js +264 -0
  423. package/dist/src/gateway/hono/routes/config-patch/gateway.js.map +1 -0
  424. package/dist/src/gateway/hono/routes/config-patch/index.d.ts +9 -0
  425. package/dist/src/gateway/hono/routes/config-patch/index.js +6 -0
  426. package/dist/src/gateway/hono/routes/config-patch/misc.d.ts +23 -0
  427. package/dist/src/gateway/hono/routes/config-patch/misc.js +139 -0
  428. package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -0
  429. package/dist/src/gateway/hono/routes/config-patch/result.d.ts +18 -0
  430. package/dist/src/gateway/hono/routes/config-patch/result.js +13 -0
  431. package/dist/src/gateway/hono/routes/config-patch/result.js.map +1 -0
  432. package/dist/src/gateway/hono/routes/config.js +20 -1764
  433. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  434. package/dist/src/gateway/hono/routes/dreaming.js +2 -3
  435. package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
  436. package/dist/src/gateway/hono/routes/host-fs.js +1 -1
  437. package/dist/src/gateway/hono/routes/lazy-bundles.js +10 -5
  438. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  439. package/dist/src/gateway/hono/routes/mcp.js +1 -2
  440. package/dist/src/gateway/hono/routes/mcp.js.map +1 -1
  441. package/dist/src/gateway/hono/routes/models.js +1 -1
  442. package/dist/src/gateway/hono/routes/sessions.js +32 -32
  443. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  444. package/dist/src/gateway/hono/routes/shares.js +4 -4
  445. package/dist/src/gateway/hono/routes/shares.js.map +1 -1
  446. package/dist/src/gateway/hono/routes/tunnel.js +1 -1
  447. package/dist/src/gateway/hono/routes/tunnel.js.map +1 -1
  448. package/dist/src/gateway/hono/routes/workspace.js +6 -7
  449. package/dist/src/gateway/hono/routes/workspace.js.map +1 -1
  450. package/dist/src/gateway/hono/sse.js +2 -2
  451. package/dist/src/gateway/index.d.ts +1 -1
  452. package/dist/src/gateway/index.js +4 -2
  453. package/dist/src/gateway/lock.js +3 -3
  454. package/dist/src/gateway/rate-limit/auth-policy.d.ts +34 -0
  455. package/dist/src/gateway/rate-limit/auth-policy.js +49 -0
  456. package/dist/src/gateway/rate-limit/auth-policy.js.map +1 -0
  457. package/dist/src/gateway/rate-limit/buckets.d.ts +63 -0
  458. package/dist/src/gateway/rate-limit/buckets.js +143 -0
  459. package/dist/src/gateway/rate-limit/buckets.js.map +1 -0
  460. package/dist/src/gateway/rate-limit/env-flags.d.ts +13 -0
  461. package/dist/src/gateway/rate-limit/env-flags.js +16 -0
  462. package/dist/src/gateway/rate-limit/env-flags.js.map +1 -0
  463. package/dist/src/gateway/rate-limit/index.d.ts +3 -0
  464. package/dist/src/gateway/rate-limit/index.js +4 -0
  465. package/dist/src/gateway/run-loop.d.ts +1 -1
  466. package/dist/src/gateway/run-loop.js +24 -4
  467. package/dist/src/gateway/run-loop.js.map +1 -1
  468. package/dist/src/gateway/runtime-config.js +2 -1
  469. package/dist/src/gateway/runtime-config.js.map +1 -1
  470. package/dist/src/gateway/security/audit.js +2 -1
  471. package/dist/src/gateway/security/audit.js.map +1 -1
  472. package/dist/src/gateway/security/index.d.ts +0 -1
  473. package/dist/src/gateway/security/index.js +1 -2
  474. package/dist/src/gateway/security/loopback.d.ts +13 -0
  475. package/dist/src/gateway/security/loopback.js +45 -0
  476. package/dist/src/gateway/security/loopback.js.map +1 -0
  477. package/dist/src/gateway/service/agent-runner.d.ts +108 -0
  478. package/dist/src/gateway/service/agent-runner.js +184 -0
  479. package/dist/src/gateway/service/agent-runner.js.map +1 -0
  480. package/dist/src/gateway/service/config-coordinator.d.ts +119 -0
  481. package/dist/src/gateway/service/config-coordinator.js +351 -0
  482. package/dist/src/gateway/service/config-coordinator.js.map +1 -0
  483. package/dist/src/gateway/service/marketplace-service.d.ts +85 -0
  484. package/dist/src/gateway/service/marketplace-service.js +239 -0
  485. package/dist/src/gateway/service/marketplace-service.js.map +1 -0
  486. package/dist/src/gateway/service/run-gateway-agent.js +5 -5
  487. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
  488. package/dist/src/gateway/service/sessions-api.d.ts +125 -0
  489. package/dist/src/gateway/service/sessions-api.js +135 -0
  490. package/dist/src/gateway/service/sessions-api.js.map +1 -0
  491. package/dist/src/gateway/service.d.ts +30 -360
  492. package/dist/src/gateway/service.js +121 -903
  493. package/dist/src/gateway/service.js.map +1 -1
  494. package/dist/src/gateway/workspace-fs-file-list.js +1 -1
  495. package/dist/src/gateway/workspace-heartbeat-path.js +1 -2
  496. package/dist/src/gateway/workspace-heartbeat-path.js.map +1 -1
  497. package/dist/src/heartbeat/index.js +1 -1
  498. package/dist/src/infra/gateway-process-argv.d.ts +4 -0
  499. package/dist/src/infra/gateway-process-argv.js +26 -0
  500. package/dist/src/infra/gateway-process-argv.js.map +1 -0
  501. package/dist/src/infra/gateway-processes.d.ts +5 -0
  502. package/dist/src/infra/gateway-processes.js +65 -0
  503. package/dist/src/infra/gateway-processes.js.map +1 -0
  504. package/dist/src/infra/rate-limit/failure-limiter.d.ts +50 -0
  505. package/dist/src/infra/rate-limit/failure-limiter.js +100 -0
  506. package/dist/src/infra/rate-limit/failure-limiter.js.map +1 -0
  507. package/dist/src/infra/rate-limit/index.d.ts +5 -0
  508. package/dist/src/infra/rate-limit/index.js +3 -0
  509. package/dist/src/infra/rate-limit/keyed-store.d.ts +34 -0
  510. package/dist/src/infra/rate-limit/keyed-store.js +44 -0
  511. package/dist/src/infra/rate-limit/keyed-store.js.map +1 -0
  512. package/dist/src/infra/rate-limit/rate-limiter.d.ts +39 -0
  513. package/dist/src/infra/rate-limit/rate-limiter.js +65 -0
  514. package/dist/src/infra/rate-limit/rate-limiter.js.map +1 -0
  515. package/dist/src/infra/restart.d.ts +21 -0
  516. package/dist/src/infra/restart.js +122 -0
  517. package/dist/src/infra/restart.js.map +1 -0
  518. package/dist/src/infra/update-check.js +1 -1
  519. package/dist/src/infra/update-lock.js +3 -3
  520. package/dist/src/infra/update-runner.js +1 -1
  521. package/dist/src/infra/update-startup.js +2 -2
  522. package/dist/src/infra/write-file-atomic.js +2 -2
  523. package/dist/src/mcp/channel-bridge.d.ts +0 -6
  524. package/dist/src/mcp/channel-bridge.js +1 -5
  525. package/dist/src/mcp/channel-bridge.js.map +1 -1
  526. package/dist/src/media-shared/http/ssrf-guard.js +1 -1
  527. package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
  528. package/dist/src/providers/index.js +2 -2
  529. package/dist/src/providers/model-registry.js +1 -1
  530. package/dist/src/session/config-store.js +2 -2
  531. package/dist/src/session/parity/jsonl-transcript-io.js +2 -2
  532. package/dist/src/session/parity/sessions-json-file-read.d.ts +2 -1
  533. package/dist/src/session/parity/sessions-json-file-read.js.map +1 -1
  534. package/dist/src/session/parity/sessions-json-file.js +1 -1
  535. package/dist/src/session/parity/transcript-file-lock.js +2 -2
  536. package/dist/src/session/parity/transcript-paths.js +1 -1
  537. package/dist/src/session/search-index-cache.js +1 -1
  538. package/dist/src/session/search-index.js +1 -1
  539. package/dist/src/session/session-title.js +1 -1
  540. package/dist/src/session/store.js +5 -5
  541. package/dist/src/share/share-rate-limit.d.ts +10 -2
  542. package/dist/src/share/share-rate-limit.js +33 -42
  543. package/dist/src/share/share-rate-limit.js.map +1 -1
  544. package/dist/src/share/share-store.js +3 -3
  545. package/dist/src/tui/backends/embedded-backend.js +16 -12
  546. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  547. package/dist/src/tui/clipboard-image.js +2 -2
  548. package/dist/src/tui/extension-host/load-extensions.js +1 -1
  549. package/dist/src/tui/format-tui-hotkeys.js +1 -1
  550. package/dist/src/tui/theme-manager.js +1 -1
  551. package/dist/src/tui/tui-keybindings-file.js +1 -1
  552. package/dist/src/tui/tui-scoped-models.js +1 -1
  553. package/dist/src/tui/tui-settings.js +1 -1
  554. package/dist/src/tui/tui-skills-autocomplete.js +1 -1
  555. package/dist/src/tui/tui.js +1 -2
  556. package/dist/src/tui/tui.js.map +1 -1
  557. package/dist/src/tui/xopc-tui-keybindings.d.ts +0 -1
  558. package/dist/src/tui/xopc-tui-keybindings.js +1 -2
  559. package/dist/src/tui/xopc-tui-keybindings.js.map +1 -1
  560. package/dist/src/tunnel/frpc-binary.js +2 -2
  561. package/dist/src/tunnel/frpc-config.js +1 -1
  562. package/dist/src/tunnel/frpc-extract.js +1 -1
  563. package/dist/src/tunnel/pairing-rate-limit.d.ts +10 -2
  564. package/dist/src/tunnel/pairing-rate-limit.js +19 -15
  565. package/dist/src/tunnel/pairing-rate-limit.js.map +1 -1
  566. package/dist/src/tunnel/tunnel-rate-limit.d.ts +6 -3
  567. package/dist/src/tunnel/tunnel-rate-limit.js +11 -22
  568. package/dist/src/tunnel/tunnel-rate-limit.js.map +1 -1
  569. package/dist/src/tunnel/tunnel-state.js +1 -1
  570. package/dist/src/utils/logger/audit.js +1 -1
  571. package/dist/src/utils/logger/log-store.js +1 -1
  572. package/dist/src/utils/logger/rotation.js +1 -1
  573. package/dist/src/utils/logger/stats.d.ts +1 -1
  574. package/dist/src/voice/tts/audio.js +1 -1
  575. package/dist/src/voice/tts/factory.js +1 -1
  576. package/dist/src/voice/tts/index.js +2 -2
  577. package/dist/src/voice/tts/merge-config.js +1 -1
  578. package/dist/src/voice/tts/providers/edge-speech.js +1 -1
  579. package/dist/src/voice/tts/service.js +1 -1
  580. package/dist/src/voice/tts/service.js.map +1 -1
  581. package/dist/src/voice/tts/speak-core.js +1 -1
  582. package/package.json +10 -5
  583. package/dist/gateway/static/root/assets/agents-Cqh1ts38.js +0 -222
  584. package/dist/gateway/static/root/assets/channels-settings-wTiWStg9.js +0 -1
  585. package/dist/gateway/static/root/assets/fetch-BAAh_kXG.js +0 -3
  586. package/dist/gateway/static/root/assets/index-C8yHX-AA.css +0 -1
  587. package/dist/gateway/static/root/assets/sessions-page-BeiFm0Ms.js +0 -1
  588. package/dist/gateway/static/root/assets/settings-page-RPAz_Wg_.js +0 -3
  589. package/dist/gateway/static/root/assets/skills-page-Wu4aNWDx.js +0 -2
  590. package/dist/gateway/static/root/assets/voice-api-key-field-BxIGhhEL.js +0 -1
  591. package/dist/src/agent/embedded/session-raw-append-message.d.ts +0 -11
  592. package/dist/src/agent/embedded/session-raw-append-message.js +0 -15
  593. package/dist/src/agent/embedded/session-raw-append-message.js.map +0 -1
  594. package/dist/src/agent/embedded/session-tool-result-guard-wrapper.d.ts +0 -15
  595. package/dist/src/agent/embedded/session-tool-result-guard-wrapper.js +0 -24
  596. package/dist/src/agent/embedded/session-tool-result-guard-wrapper.js.map +0 -1
  597. package/dist/src/agent/embedded/session-tool-result-state.d.ts +0 -17
  598. package/dist/src/agent/embedded/session-tool-result-state.js +0 -26
  599. package/dist/src/agent/embedded/session-tool-result-state.js.map +0 -1
  600. package/dist/src/daemon/launchd-restart-handoff.d.ts +0 -25
  601. package/dist/src/daemon/launchd-restart-handoff.js +0 -132
  602. package/dist/src/daemon/launchd-restart-handoff.js.map +0 -1
  603. package/dist/src/gateway/auth-rate-limit.d.ts +0 -71
  604. package/dist/src/gateway/auth-rate-limit.js +0 -192
  605. package/dist/src/gateway/auth-rate-limit.js.map +0 -1
  606. package/dist/src/gateway/restart-handler.d.ts +0 -14
  607. package/dist/src/gateway/restart-handler.js +0 -64
  608. package/dist/src/gateway/restart-handler.js.map +0 -1
  609. package/dist/src/gateway/security/flood-guard.d.ts +0 -28
  610. package/dist/src/gateway/security/flood-guard.js +0 -42
  611. package/dist/src/gateway/security/flood-guard.js.map +0 -1
  612. package/dist/src/infra/rate-limit.d.ts +0 -38
  613. package/dist/src/infra/rate-limit.js +0 -60
  614. package/dist/src/infra/rate-limit.js.map +0 -1
  615. package/dist/src/infra/restart-intent.d.ts +0 -13
  616. package/dist/src/infra/restart-intent.js +0 -40
  617. package/dist/src/infra/restart-intent.js.map +0 -1
  618. package/dist/src/infra/restart-sentinel.d.ts +0 -23
  619. package/dist/src/infra/restart-sentinel.js +0 -75
  620. package/dist/src/infra/restart-sentinel.js.map +0 -1
  621. package/skills/creative/canvas-design/LICENSE.txt +0 -202
  622. package/skills/creative/canvas-design/SKILL-zh.md +0 -130
  623. package/skills/creative/canvas-design/SKILL.md +0 -130
  624. package/skills/creative/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -93
  625. package/skills/creative/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  626. package/skills/creative/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  627. package/skills/creative/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -93
  628. package/skills/creative/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  629. package/skills/creative/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -93
  630. package/skills/creative/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  631. package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  632. package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -93
  633. package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  634. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  635. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  636. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -93
  637. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  638. package/skills/creative/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -93
  639. package/skills/creative/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  640. package/skills/creative/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -94
  641. package/skills/creative/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  642. package/skills/creative/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  643. package/skills/creative/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -93
  644. package/skills/creative/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  645. package/skills/creative/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -93
  646. package/skills/creative/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  647. package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  648. package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -93
  649. package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  650. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  651. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  652. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  653. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  654. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  655. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  656. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  657. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -93
  658. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  659. package/skills/creative/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  660. package/skills/creative/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  661. package/skills/creative/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -93
  662. package/skills/creative/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  663. package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  664. package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -93
  665. package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  666. package/skills/creative/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  667. package/skills/creative/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  668. package/skills/creative/canvas-design/canvas-fonts/Jura-OFL.txt +0 -93
  669. package/skills/creative/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -93
  670. package/skills/creative/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  671. package/skills/creative/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  672. package/skills/creative/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  673. package/skills/creative/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  674. package/skills/creative/canvas-design/canvas-fonts/Lora-OFL.txt +0 -93
  675. package/skills/creative/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  676. package/skills/creative/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  677. package/skills/creative/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -93
  678. package/skills/creative/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  679. package/skills/creative/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -93
  680. package/skills/creative/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  681. package/skills/creative/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  682. package/skills/creative/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -93
  683. package/skills/creative/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  684. package/skills/creative/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  685. package/skills/creative/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -93
  686. package/skills/creative/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -93
  687. package/skills/creative/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  688. package/skills/creative/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  689. package/skills/creative/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -93
  690. package/skills/creative/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  691. package/skills/creative/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -93
  692. package/skills/creative/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  693. package/skills/creative/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  694. package/skills/creative/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -93
  695. package/skills/creative/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  696. package/skills/creative/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -93
  697. package/skills/creative/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  698. package/skills/creative/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  699. package/skills/creative/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  700. package/skills/creative/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  701. package/skills/creative/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -93
  702. package/skills/creative/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  703. package/skills/creative/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -93
  704. package/skills/creative/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
package/README.md CHANGED
@@ -65,7 +65,7 @@ xopc agent -i # classic interactive CLI
65
65
  xopc agent -m "Summarize the last 5 commits" # one-shot
66
66
 
67
67
  xopc gateway # local web server + React console (URL in logs)
68
- xopc gateway --background # detached; xopc gateway stop | status | logs
68
+ xopc gateway service install # OS service; xopc gateway stop | status | logs
69
69
  ```
70
70
 
71
71
  **From source:**
package/README.zh-CN.md CHANGED
@@ -65,7 +65,7 @@ xopc agent -i # 经典交互式 CLI
65
65
  xopc agent -m "总结最近 5 条提交" # 只问一句
66
66
 
67
67
  xopc gateway # 本地网页服务 + React 控制台(地址见终端输出)
68
- xopc gateway --background # 后台常驻;停服 xopc gateway stop | status | logs
68
+ xopc gateway service install # OS service (background); xopc gateway stop | status | logs
69
69
  ```
70
70
 
71
71
  **从源码开发:**
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "xopc Browser Bridge",
4
- "version": "0.0.82",
4
+ "version": "0.0.83",
5
5
  "description": "Browser automation bridge for xopc — executes commands in Chrome via the local xopc daemon.",
6
6
  "permissions": [
7
7
  "debugger",
@@ -1,11 +1,10 @@
1
- import { getWorkspacePath, init_schema } from "../../../../src/config/schema.js";
2
1
  import { checkFileSafety } from "../../../../src/agent/prompt/safety.js";
3
2
  import { getMimeType } from "../../../../src/channels/media.js";
4
- import path from "node:path";
3
+ import { getWorkspacePath } from "../../../../src/config/workspace-path-helpers.js";
5
4
  import { promises } from "node:fs";
5
+ import path from "node:path";
6
6
  import { Readable } from "node:stream";
7
7
  //#region extensions/feishu/src/outbound/media-load.ts
8
- init_schema();
9
8
  function isPathUnderRoots(resolved, roots) {
10
9
  const norm = path.normalize(resolved);
11
10
  for (const root of roots) {
@@ -1 +1 @@
1
- {"version":3,"file":"media-load.js","names":["fs"],"sources":["../../../../../extensions/feishu/src/outbound/media-load.ts"],"sourcesContent":["import { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport { Readable } from 'node:stream';\n\nimport { getWorkspacePath } from '@xopcai/xopc/config/schema.js';\nimport type { Config } from '@xopcai/xopc/config/schema.js';\nimport { checkFileSafety } from '@xopcai/xopc/agent/prompt/safety.js';\nimport { getMimeType } from '@xopcai/xopc/channels/media.js';\n\nexport type LoadedMedia = {\n buffer: Buffer;\n mimeType: string;\n filename: string;\n stream: Readable;\n};\n\nfunction isPathUnderRoots(resolved: string, roots: string[]): boolean {\n const norm = path.normalize(resolved);\n for (const root of roots) {\n const r = path.normalize(root);\n if (norm === r || norm.startsWith(r + path.sep)) {\n return true;\n }\n }\n return false;\n}\n\nexport async function loadMediaForFeishu(\n cfg: Config,\n rawInput: string,\n opts: { maxBytes: number; localRoots?: readonly string[] },\n): Promise<LoadedMedia> {\n const input = rawInput.trim().startsWith('@') ? rawInput.trim().slice(1).trim() : rawInput.trim();\n if (!input) throw new Error('empty media reference');\n\n const isHttpUrl = /^https?:\\/\\//i.test(input);\n const isFileUrl = /^file:\\/\\//i.test(input);\n const isDataUrl = /^data:/i.test(input);\n\n if (isHttpUrl) {\n const res = await fetch(input, { redirect: 'follow' });\n if (!res.ok) throw new Error(`Failed to fetch media: HTTP ${res.status}`);\n const buf = Buffer.from(await res.arrayBuffer());\n if (buf.length > opts.maxBytes) throw new Error(`Media too large (${buf.length} bytes, max ${opts.maxBytes})`);\n const ct = res.headers.get('content-type') || 'application/octet-stream';\n const mime = ct.split(';')[0]?.trim() || 'application/octet-stream';\n const nameFromUrl = safeBasename(new URL(input).pathname) || 'media.bin';\n return { buffer: buf, mimeType: mime, filename: nameFromUrl, stream: Readable.from(buf) };\n }\n\n if (isDataUrl) {\n // data:[<mime>][;base64],<data>\n const m = /^data:([^;,]+)?(;base64)?,/i.exec(input);\n if (!m) throw new Error('Invalid data URL');\n const mime = (m[1] || 'application/octet-stream').trim();\n const isB64 = Boolean(m[2]);\n const dataPart = input.slice(m[0].length);\n const buf = isB64 ? Buffer.from(dataPart, 'base64') : Buffer.from(decodeURIComponent(dataPart), 'utf8');\n if (buf.length > opts.maxBytes) throw new Error(`Media too large (${buf.length} bytes, max ${opts.maxBytes})`);\n const filename = mime.startsWith('image/') ? `image.${mime.split('/')[1] || 'bin'}` : 'media.bin';\n return { buffer: buf, mimeType: mime, filename, stream: Readable.from(buf) };\n }\n\n // Heuristic: some callers persist raw base64 (no data: prefix). If it looks like base64, treat it as such.\n // This avoids mis-classifying huge base64 blobs as file paths during outbound replay.\n const b64Candidate = input.replace(/^['\"]|['\"]$/g, '');\n const looksBase64 =\n b64Candidate.length >= 256 &&\n b64Candidate.length % 4 === 0 &&\n /^[A-Za-z0-9+/=\\r\\n]+$/.test(b64Candidate) &&\n !b64Candidate.includes(path.sep);\n if (looksBase64) {\n const buf = Buffer.from(b64Candidate, 'base64');\n if (buf.length > 0) {\n if (buf.length > opts.maxBytes) throw new Error(`Media too large (${buf.length} bytes, max ${opts.maxBytes})`);\n const { mimeType, filename } = sniffBufferType(buf);\n return { buffer: buf, mimeType, filename, stream: Readable.from(buf) };\n }\n }\n\n let filePath = input;\n if (isFileUrl) filePath = input.slice('file://'.length);\n if (!path.isAbsolute(filePath)) {\n filePath = path.resolve(getWorkspacePath(cfg), filePath);\n }\n filePath = path.normalize(filePath);\n\n const safety = checkFileSafety('read', filePath);\n if (!safety.allowed) throw new Error(safety.message ?? 'File path not allowed');\n\n const workspace = getWorkspacePath(cfg);\n const roots = [workspace, ...(opts.localRoots ?? [])].filter(Boolean) as string[];\n const realPath = await fs.realpath(filePath).catch(() => filePath);\n const workspaceReal = await fs.realpath(workspace).catch(() => workspace);\n const resolvedRoots = await Promise.all(roots.map((r) => fs.realpath(r).catch(() => r)));\n if (!isPathUnderRoots(realPath, [workspaceReal, ...resolvedRoots])) {\n throw new Error(`Path not under workspace or allowed roots: ${filePath}`);\n }\n\n const st = await fs.stat(realPath).catch((err) => {\n const em = err instanceof Error ? err.message : String(err);\n throw new Error(`Media file not found or unreadable: ${filePath} (resolved: ${realPath}). ${em}`);\n });\n if (!st.isFile()) throw new Error(`Not a file: ${filePath}`);\n if (st.size > opts.maxBytes) throw new Error(`Media too large (${st.size} bytes, max ${opts.maxBytes})`);\n\n const buffer = await fs.readFile(realPath);\n const filename = path.basename(realPath) || 'media.bin';\n const mimeType = getMimeType('document', realPath);\n return { buffer, mimeType, filename, stream: Readable.from(buffer) };\n}\n\nfunction sniffBufferType(buf: Buffer): { mimeType: string; filename: string } {\n // PNG\n if (\n buf.length >= 8 &&\n buf[0] === 0x89 &&\n buf[1] === 0x50 &&\n buf[2] === 0x4e &&\n buf[3] === 0x47 &&\n buf[4] === 0x0d &&\n buf[5] === 0x0a &&\n buf[6] === 0x1a &&\n buf[7] === 0x0a\n ) {\n return { mimeType: 'image/png', filename: 'image.png' };\n }\n // JPEG\n if (buf.length >= 3 && buf[0] === 0xff && buf[1] === 0xd8 && buf[2] === 0xff) {\n return { mimeType: 'image/jpeg', filename: 'image.jpg' };\n }\n // GIF\n if (buf.length >= 6 && buf.subarray(0, 6).toString('ascii') === 'GIF89a') {\n return { mimeType: 'image/gif', filename: 'image.gif' };\n }\n // WEBP (RIFF....WEBP)\n if (\n buf.length >= 12 &&\n buf.subarray(0, 4).toString('ascii') === 'RIFF' &&\n buf.subarray(8, 12).toString('ascii') === 'WEBP'\n ) {\n return { mimeType: 'image/webp', filename: 'image.webp' };\n }\n // PDF\n if (buf.length >= 4 && buf.subarray(0, 4).toString('ascii') === '%PDF') {\n return { mimeType: 'application/pdf', filename: 'file.pdf' };\n }\n return { mimeType: 'application/octet-stream', filename: 'media.bin' };\n}\n\nfunction safeBasename(p: string): string {\n try {\n const b = path.basename(p);\n return b.replace(/[\\\\/:*?\"<>|]/g, '_');\n } catch {\n return '';\n }\n}\n\n"],"mappings":"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"}
1
+ {"version":3,"file":"media-load.js","names":["fs"],"sources":["../../../../../extensions/feishu/src/outbound/media-load.ts"],"sourcesContent":["import { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport { Readable } from 'node:stream';\n\nimport { getWorkspacePath } from '@xopcai/xopc/config/workspace-path-helpers.js';\nimport type { Config } from '@xopcai/xopc/config/schema.js';\nimport { checkFileSafety } from '@xopcai/xopc/agent/prompt/safety.js';\nimport { getMimeType } from '@xopcai/xopc/channels/media.js';\n\nexport type LoadedMedia = {\n buffer: Buffer;\n mimeType: string;\n filename: string;\n stream: Readable;\n};\n\nfunction isPathUnderRoots(resolved: string, roots: string[]): boolean {\n const norm = path.normalize(resolved);\n for (const root of roots) {\n const r = path.normalize(root);\n if (norm === r || norm.startsWith(r + path.sep)) {\n return true;\n }\n }\n return false;\n}\n\nexport async function loadMediaForFeishu(\n cfg: Config,\n rawInput: string,\n opts: { maxBytes: number; localRoots?: readonly string[] },\n): Promise<LoadedMedia> {\n const input = rawInput.trim().startsWith('@') ? rawInput.trim().slice(1).trim() : rawInput.trim();\n if (!input) throw new Error('empty media reference');\n\n const isHttpUrl = /^https?:\\/\\//i.test(input);\n const isFileUrl = /^file:\\/\\//i.test(input);\n const isDataUrl = /^data:/i.test(input);\n\n if (isHttpUrl) {\n const res = await fetch(input, { redirect: 'follow' });\n if (!res.ok) throw new Error(`Failed to fetch media: HTTP ${res.status}`);\n const buf = Buffer.from(await res.arrayBuffer());\n if (buf.length > opts.maxBytes) throw new Error(`Media too large (${buf.length} bytes, max ${opts.maxBytes})`);\n const ct = res.headers.get('content-type') || 'application/octet-stream';\n const mime = ct.split(';')[0]?.trim() || 'application/octet-stream';\n const nameFromUrl = safeBasename(new URL(input).pathname) || 'media.bin';\n return { buffer: buf, mimeType: mime, filename: nameFromUrl, stream: Readable.from(buf) };\n }\n\n if (isDataUrl) {\n // data:[<mime>][;base64],<data>\n const m = /^data:([^;,]+)?(;base64)?,/i.exec(input);\n if (!m) throw new Error('Invalid data URL');\n const mime = (m[1] || 'application/octet-stream').trim();\n const isB64 = Boolean(m[2]);\n const dataPart = input.slice(m[0].length);\n const buf = isB64 ? Buffer.from(dataPart, 'base64') : Buffer.from(decodeURIComponent(dataPart), 'utf8');\n if (buf.length > opts.maxBytes) throw new Error(`Media too large (${buf.length} bytes, max ${opts.maxBytes})`);\n const filename = mime.startsWith('image/') ? `image.${mime.split('/')[1] || 'bin'}` : 'media.bin';\n return { buffer: buf, mimeType: mime, filename, stream: Readable.from(buf) };\n }\n\n // Heuristic: some callers persist raw base64 (no data: prefix). If it looks like base64, treat it as such.\n // This avoids mis-classifying huge base64 blobs as file paths during outbound replay.\n const b64Candidate = input.replace(/^['\"]|['\"]$/g, '');\n const looksBase64 =\n b64Candidate.length >= 256 &&\n b64Candidate.length % 4 === 0 &&\n /^[A-Za-z0-9+/=\\r\\n]+$/.test(b64Candidate) &&\n !b64Candidate.includes(path.sep);\n if (looksBase64) {\n const buf = Buffer.from(b64Candidate, 'base64');\n if (buf.length > 0) {\n if (buf.length > opts.maxBytes) throw new Error(`Media too large (${buf.length} bytes, max ${opts.maxBytes})`);\n const { mimeType, filename } = sniffBufferType(buf);\n return { buffer: buf, mimeType, filename, stream: Readable.from(buf) };\n }\n }\n\n let filePath = input;\n if (isFileUrl) filePath = input.slice('file://'.length);\n if (!path.isAbsolute(filePath)) {\n filePath = path.resolve(getWorkspacePath(cfg), filePath);\n }\n filePath = path.normalize(filePath);\n\n const safety = checkFileSafety('read', filePath);\n if (!safety.allowed) throw new Error(safety.message ?? 'File path not allowed');\n\n const workspace = getWorkspacePath(cfg);\n const roots = [workspace, ...(opts.localRoots ?? [])].filter(Boolean) as string[];\n const realPath = await fs.realpath(filePath).catch(() => filePath);\n const workspaceReal = await fs.realpath(workspace).catch(() => workspace);\n const resolvedRoots = await Promise.all(roots.map((r) => fs.realpath(r).catch(() => r)));\n if (!isPathUnderRoots(realPath, [workspaceReal, ...resolvedRoots])) {\n throw new Error(`Path not under workspace or allowed roots: ${filePath}`);\n }\n\n const st = await fs.stat(realPath).catch((err) => {\n const em = err instanceof Error ? err.message : String(err);\n throw new Error(`Media file not found or unreadable: ${filePath} (resolved: ${realPath}). ${em}`);\n });\n if (!st.isFile()) throw new Error(`Not a file: ${filePath}`);\n if (st.size > opts.maxBytes) throw new Error(`Media too large (${st.size} bytes, max ${opts.maxBytes})`);\n\n const buffer = await fs.readFile(realPath);\n const filename = path.basename(realPath) || 'media.bin';\n const mimeType = getMimeType('document', realPath);\n return { buffer, mimeType, filename, stream: Readable.from(buffer) };\n}\n\nfunction sniffBufferType(buf: Buffer): { mimeType: string; filename: string } {\n // PNG\n if (\n buf.length >= 8 &&\n buf[0] === 0x89 &&\n buf[1] === 0x50 &&\n buf[2] === 0x4e &&\n buf[3] === 0x47 &&\n buf[4] === 0x0d &&\n buf[5] === 0x0a &&\n buf[6] === 0x1a &&\n buf[7] === 0x0a\n ) {\n return { mimeType: 'image/png', filename: 'image.png' };\n }\n // JPEG\n if (buf.length >= 3 && buf[0] === 0xff && buf[1] === 0xd8 && buf[2] === 0xff) {\n return { mimeType: 'image/jpeg', filename: 'image.jpg' };\n }\n // GIF\n if (buf.length >= 6 && buf.subarray(0, 6).toString('ascii') === 'GIF89a') {\n return { mimeType: 'image/gif', filename: 'image.gif' };\n }\n // WEBP (RIFF....WEBP)\n if (\n buf.length >= 12 &&\n buf.subarray(0, 4).toString('ascii') === 'RIFF' &&\n buf.subarray(8, 12).toString('ascii') === 'WEBP'\n ) {\n return { mimeType: 'image/webp', filename: 'image.webp' };\n }\n // PDF\n if (buf.length >= 4 && buf.subarray(0, 4).toString('ascii') === '%PDF') {\n return { mimeType: 'application/pdf', filename: 'file.pdf' };\n }\n return { mimeType: 'application/octet-stream', filename: 'media.bin' };\n}\n\nfunction safeBasename(p: string): string {\n try {\n const b = path.basename(p);\n return b.replace(/[\\\\/:*?\"<>|]/g, '_');\n } catch {\n return '';\n }\n}\n\n"],"mappings":"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"}
@@ -19,14 +19,14 @@ export declare const FeishuAccountConfigSchema: z.ZodObject<{
19
19
  encryptKey: z.ZodOptional<z.ZodString>;
20
20
  dmPolicy: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
21
21
  pairing: "pairing";
22
+ allowlist: "allowlist";
22
23
  open: "open";
23
24
  disabled: "disabled";
24
- allowlist: "allowlist";
25
25
  }>>>;
26
26
  groupPolicy: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
27
+ allowlist: "allowlist";
27
28
  open: "open";
28
29
  disabled: "disabled";
29
- allowlist: "allowlist";
30
30
  }>>>;
31
31
  allowFrom: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
32
32
  groupAllowFrom: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
@@ -94,14 +94,14 @@ export declare const FeishuConfigSchema: z.ZodObject<{
94
94
  encryptKey: z.ZodOptional<z.ZodString>;
95
95
  dmPolicy: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
96
96
  pairing: "pairing";
97
+ allowlist: "allowlist";
97
98
  open: "open";
98
99
  disabled: "disabled";
99
- allowlist: "allowlist";
100
100
  }>>>;
101
101
  groupPolicy: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
102
+ allowlist: "allowlist";
102
103
  open: "open";
103
104
  disabled: "disabled";
104
- allowlist: "allowlist";
105
105
  }>>>;
106
106
  allowFrom: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>>;
107
107
  groupAllowFrom: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>>;
@@ -158,14 +158,14 @@ export declare const FeishuConfigSchema: z.ZodObject<{
158
158
  encryptKey: z.ZodOptional<z.ZodString>;
159
159
  dmPolicy: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
160
160
  pairing: "pairing";
161
+ allowlist: "allowlist";
161
162
  open: "open";
162
163
  disabled: "disabled";
163
- allowlist: "allowlist";
164
164
  }>>>;
165
165
  groupPolicy: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
166
+ allowlist: "allowlist";
166
167
  open: "open";
167
168
  disabled: "disabled";
168
- allowlist: "allowlist";
169
169
  }>>>;
170
170
  allowFrom: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
171
171
  groupAllowFrom: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
@@ -30,14 +30,14 @@ export declare const TelegramAccountConfigSchema: z.ZodObject<{
30
30
  groupAllowFrom: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
31
31
  dmPolicy: z.ZodDefault<z.ZodEnum<{
32
32
  pairing: "pairing";
33
+ allowlist: "allowlist";
33
34
  open: "open";
34
35
  disabled: "disabled";
35
- allowlist: "allowlist";
36
36
  }>>;
37
37
  groupPolicy: z.ZodDefault<z.ZodEnum<{
38
+ allowlist: "allowlist";
38
39
  open: "open";
39
40
  disabled: "disabled";
40
- allowlist: "allowlist";
41
41
  }>>;
42
42
  replyToMode: z.ZodDefault<z.ZodEnum<{
43
43
  off: "off";
@@ -84,14 +84,14 @@ export declare const TelegramConfigSchema: z.ZodPreprocess<z.ZodObject<{
84
84
  groupAllowFrom: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
85
85
  dmPolicy: z.ZodDefault<z.ZodEnum<{
86
86
  pairing: "pairing";
87
+ allowlist: "allowlist";
87
88
  open: "open";
88
89
  disabled: "disabled";
89
- allowlist: "allowlist";
90
90
  }>>;
91
91
  groupPolicy: z.ZodDefault<z.ZodEnum<{
92
+ allowlist: "allowlist";
92
93
  open: "open";
93
94
  disabled: "disabled";
94
- allowlist: "allowlist";
95
95
  }>>;
96
96
  replyToMode: z.ZodDefault<z.ZodEnum<{
97
97
  off: "off";
@@ -124,14 +124,14 @@ export declare const TelegramConfigSchema: z.ZodPreprocess<z.ZodObject<{
124
124
  }, z.core.$strip>>>;
125
125
  dmPolicy: z.ZodDefault<z.ZodEnum<{
126
126
  pairing: "pairing";
127
+ allowlist: "allowlist";
127
128
  open: "open";
128
129
  disabled: "disabled";
129
- allowlist: "allowlist";
130
130
  }>>;
131
131
  groupPolicy: z.ZodDefault<z.ZodEnum<{
132
+ allowlist: "allowlist";
132
133
  open: "open";
133
134
  disabled: "disabled";
134
- allowlist: "allowlist";
135
135
  }>>;
136
136
  replyToMode: z.ZodDefault<z.ZodEnum<{
137
137
  off: "off";
@@ -13,7 +13,7 @@ export declare class TelegramChannelPlugin implements ChannelPlugin<TelegramReso
13
13
  readonly id: "telegram";
14
14
  readonly reload: ChannelPluginReloadMeta;
15
15
  readonly meta: {
16
- readonly id: "telegram" | "weixin" | "feishu";
16
+ readonly id: "telegram" | "feishu" | "weixin";
17
17
  readonly label: string;
18
18
  readonly selectionLabel: "Telegram Bot";
19
19
  readonly docsPath: "/channels/telegram";
@@ -1,6 +1,6 @@
1
- import { TelegramConfigSchema, init_config_schema } from "./config-schema.js";
2
1
  import { createLogger } from "../../../src/utils/logger/index.js";
3
2
  import { init_logger } from "../../../src/utils/logger.js";
3
+ import { TelegramConfigSchema, init_config_schema } from "./config-schema.js";
4
4
  import { transcribe } from "../../../src/voice/stt/transcribe-core.js";
5
5
  import { isSTTAvailable } from "../../../src/voice/stt/availability.js";
6
6
  import "../../../src/voice/stt/index.js";
@@ -1,7 +1,7 @@
1
- import { buildSessionKey } from "../../../src/routing/session-key.js";
2
- import { applyIdentityLinks, resolveRoute } from "../../../src/routing/resolve-route.js";
3
1
  import { createLogger } from "../../../src/utils/logger/index.js";
4
2
  import { init_logger } from "../../../src/utils/logger.js";
3
+ import { buildSessionKey } from "../../../src/routing/session-key.js";
4
+ import { applyIdentityLinks, resolveRoute } from "../../../src/routing/resolve-route.js";
5
5
  //#region extensions/telegram/src/routing-integration.ts
6
6
  init_logger();
7
7
  const log = createLogger("TelegramRouting");
@@ -2,7 +2,7 @@
2
2
  "id": "telegram",
3
3
  "name": "Telegram Channel",
4
4
  "description": "Bundled Telegram Bot channel (private workspace sources; ships inside @xopcai/xopc dist/)",
5
- "version": "0.0.82",
5
+ "version": "0.0.83",
6
6
  "kind": "channel",
7
7
  "main": "src/index.ts",
8
8
  "channels": ["telegram"],
@@ -1,10 +1,10 @@
1
1
  import { logger } from "../util/logger.js";
2
2
  import { redactBody, redactUrl } from "../util/redact.js";
3
- import path from "node:path";
4
- import fsSync from "node:fs";
5
3
  import crypto from "node:crypto";
6
- import { Agent, fetch as fetch$1 } from "undici";
4
+ import fsSync from "node:fs";
5
+ import path from "node:path";
7
6
  import { fileURLToPath } from "node:url";
7
+ import { Agent, fetch as fetch$1 } from "undici";
8
8
  //#region extensions/weixin/src/api/api.ts
9
9
  function readPackageJson() {
10
10
  try {
@@ -1,8 +1,8 @@
1
1
  import { logger } from "../util/logger.js";
2
2
  import { normalizeWeixinAccountId } from "./weixin-account-id.js";
3
3
  import { resolveWeixinRootDir } from "../storage/state-dir.js";
4
- import path from "node:path";
5
4
  import fsSync from "node:fs";
5
+ import path from "node:path";
6
6
  //#region extensions/weixin/src/auth/accounts.ts
7
7
  const DEFAULT_BASE_URL = "https://ilinkai.weixin.qq.com";
8
8
  const CDN_BASE_URL = "https://novac2c.cdn.weixin.qq.com/c2c";
@@ -6,9 +6,9 @@ import { getUploadUrl } from "../api/api.js";
6
6
  import { getExtensionFromContentTypeOrUrl } from "../media/mime.js";
7
7
  import { aesEcbPaddedSize } from "./aes-ecb.js";
8
8
  import { uploadBufferToCdn } from "./cdn-upload.js";
9
- import path from "node:path";
10
9
  import crypto from "node:crypto";
11
10
  import fs from "node:fs/promises";
11
+ import path from "node:path";
12
12
  //#region extensions/weixin/src/cdn/upload.ts
13
13
  /**
14
14
  * Download a remote media URL (image, video, file) to a local temp file in destDir.
@@ -6,9 +6,9 @@ export declare const WeixinAccountConfigSchema: z.ZodObject<{
6
6
  routeTag: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
7
7
  dmPolicy: z.ZodDefault<z.ZodEnum<{
8
8
  pairing: "pairing";
9
+ allowlist: "allowlist";
9
10
  open: "open";
10
11
  disabled: "disabled";
11
- allowlist: "allowlist";
12
12
  }>>;
13
13
  allowFrom: z.ZodDefault<z.ZodArray<z.ZodString>>;
14
14
  streamMode: z.ZodOptional<z.ZodEnum<{
@@ -22,9 +22,9 @@ export declare const WeixinConfigSchema: z.ZodObject<{
22
22
  enabled: z.ZodDefault<z.ZodBoolean>;
23
23
  dmPolicy: z.ZodDefault<z.ZodEnum<{
24
24
  pairing: "pairing";
25
+ allowlist: "allowlist";
25
26
  open: "open";
26
27
  disabled: "disabled";
27
- allowlist: "allowlist";
28
28
  }>>;
29
29
  allowFrom: z.ZodDefault<z.ZodArray<z.ZodString>>;
30
30
  debug: z.ZodDefault<z.ZodBoolean>;
@@ -43,9 +43,9 @@ export declare const WeixinConfigSchema: z.ZodObject<{
43
43
  routeTag: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
44
44
  dmPolicy: z.ZodDefault<z.ZodEnum<{
45
45
  pairing: "pairing";
46
+ allowlist: "allowlist";
46
47
  open: "open";
47
48
  disabled: "disabled";
48
- allowlist: "allowlist";
49
49
  }>>;
50
50
  allowFrom: z.ZodDefault<z.ZodArray<z.ZodString>>;
51
51
  streamMode: z.ZodOptional<z.ZodEnum<{
@@ -1,7 +1,7 @@
1
1
  import { getExtensionFromMime } from "./mime.js";
2
- import path from "node:path";
3
2
  import { randomBytes } from "node:crypto";
4
3
  import fs from "node:fs/promises";
4
+ import path from "node:path";
5
5
  //#region extensions/weixin/src/media/data-url.ts
6
6
  /**
7
7
  * Parse `data:mime;base64,...` into buffer (aligned with Telegram `parseDataUrl`).
@@ -1,7 +1,7 @@
1
1
  import { logger } from "../util/logger.js";
2
2
  import { resolveWeixinRootDir } from "../storage/state-dir.js";
3
- import path from "node:path";
4
3
  import fsSync from "node:fs";
4
+ import path from "node:path";
5
5
  //#region extensions/weixin/src/messaging/debug-mode.ts
6
6
  /**
7
7
  * Per-bot debug mode toggle, persisted to disk so it survives gateway restarts.
@@ -3,8 +3,8 @@ import { generateId } from "../util/random.js";
3
3
  import { MessageItemType } from "../api/types.js";
4
4
  import { canonicalWeixinPeerId, normalizeWeixinAccountId } from "../auth/weixin-account-id.js";
5
5
  import { resolveWeixinRootDir } from "../storage/state-dir.js";
6
- import path from "node:path";
7
6
  import fsSync from "node:fs";
7
+ import path from "node:path";
8
8
  //#region extensions/weixin/src/messaging/inbound.ts
9
9
  /**
10
10
  * contextToken is issued per-message by the Weixin getupdates API and must
@@ -11,9 +11,9 @@ import { downloadMediaFromItem } from "../media/media-download.js";
11
11
  import { isDebugMode } from "./debug-mode.js";
12
12
  import { sendMessageWeixin } from "./send.js";
13
13
  import { handleSlashCommand } from "./slash-commands.js";
14
- import path from "node:path";
15
14
  import { randomBytes } from "node:crypto";
16
15
  import { mkdir, readFile, writeFile } from "node:fs/promises";
16
+ import path from "node:path";
17
17
  //#region extensions/weixin/src/messaging/process-message.ts
18
18
  function extractTextBody(itemList) {
19
19
  if (!itemList?.length) return "";
@@ -1,6 +1,6 @@
1
- import { WeixinConfigSchema, init_config_schema } from "./config-schema.js";
2
1
  import { createLogger } from "../../../src/utils/logger/index.js";
3
2
  import { init_logger } from "../../../src/utils/logger.js";
3
+ import { WeixinConfigSchema, init_config_schema } from "./config-schema.js";
4
4
  import { evaluateAccess, resolveDmPolicy } from "../../../src/channels/security.js";
5
5
  import { createStandardPairingAdapter } from "../../../src/channels/pairing/pairing-store-adapter.js";
6
6
  import { restoreContextTokens } from "./messaging/inbound.js";
@@ -1,6 +1,6 @@
1
1
  import { resolveWeixinRootDir } from "./state-dir.js";
2
- import path from "node:path";
3
2
  import fsSync from "node:fs";
3
+ import path from "node:path";
4
4
  //#region extensions/weixin/src/storage/sync-buf.ts
5
5
  function resolveAccountsDir() {
6
6
  return path.join(resolveWeixinRootDir(), "accounts");