@xopcai/xopc 0.0.149 → 0.0.150

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 (2873) hide show
  1. package/README.md +10 -0
  2. package/README.zh-CN.md +10 -0
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/dashscope/src/image-generation-provider.js +0 -2
  5. package/dist/extensions/demo-memory/src/index.js +0 -2
  6. package/dist/extensions/fal/src/image-generation-provider.js +0 -2
  7. package/dist/extensions/feishu/src/actions/message-action-handler.js +0 -2
  8. package/dist/extensions/feishu/src/adapters/cli-login.js +0 -2
  9. package/dist/extensions/feishu/src/adapters/gateway-setup.js +0 -2
  10. package/dist/extensions/feishu/src/adapters/onboard-cli.js +0 -2
  11. package/dist/extensions/feishu/src/auth/app-registration.js +0 -2
  12. package/dist/extensions/feishu/src/auth/pairing.js +0 -2
  13. package/dist/extensions/feishu/src/auth/paths.js +0 -2
  14. package/dist/extensions/feishu/src/directory/directory-adapter.js +0 -2
  15. package/dist/extensions/feishu/src/format.js +0 -2
  16. package/dist/extensions/feishu/src/index.js +0 -2
  17. package/dist/extensions/feishu/src/outbound/actions.js +0 -2
  18. package/dist/extensions/feishu/src/outbound/media-load.js +0 -2
  19. package/dist/extensions/feishu/src/outbound/outbound-adapter.js +0 -2
  20. package/dist/extensions/feishu/src/pairing/feishu-pairing-prompt.js +0 -2
  21. package/dist/extensions/feishu/src/pairing-config-resolver.js +0 -2
  22. package/dist/extensions/feishu/src/plugin.js +0 -2
  23. package/dist/extensions/feishu/src/schema/config-schema.js +0 -2
  24. package/dist/extensions/feishu/src/state/accounts.js +0 -2
  25. package/dist/extensions/feishu/src/state/message-bindings.js +0 -2
  26. package/dist/extensions/feishu/src/state/thread-bindings.js +0 -2
  27. package/dist/extensions/feishu/src/status/doctor.js +0 -2
  28. package/dist/extensions/feishu/src/status/status-adapter.js +0 -2
  29. package/dist/extensions/feishu/src/streaming/streaming-adapter.js +0 -2
  30. package/dist/extensions/feishu/src/subagent-hooks.js +0 -2
  31. package/dist/extensions/feishu/src/tools/docx/docx-batch-insert.js +0 -2
  32. package/dist/extensions/feishu/src/tools/docx/docx-color-text.d.ts +6 -3386
  33. package/dist/extensions/feishu/src/tools/docx/docx-color-text.js +0 -2
  34. package/dist/extensions/feishu/src/tools/docx/docx-table-ops.d.ts +16 -16927
  35. package/dist/extensions/feishu/src/tools/docx/docx-table-ops.js +0 -2
  36. package/dist/extensions/feishu/src/tools/tools.js +0 -2
  37. package/dist/extensions/feishu/src/transport/client/client.js +2 -4
  38. package/dist/extensions/feishu/src/transport/client/lark-sdk-logger.js +0 -2
  39. package/dist/extensions/feishu/src/transport/client/lark-sdk.d.ts +3 -0
  40. package/dist/extensions/feishu/src/transport/client/lark-sdk.js +14 -0
  41. package/dist/extensions/feishu/src/transport/reliability/dedupe.js +0 -2
  42. package/dist/extensions/feishu/src/transport/reliability/inbound-pipeline.js +0 -2
  43. package/dist/extensions/feishu/src/transport/socket-mode/monitor.js +0 -2
  44. package/dist/extensions/feishu/src/transport/socket-mode/retry.js +0 -2
  45. package/dist/extensions/feishu/src/transport/text/mentions.js +0 -2
  46. package/dist/extensions/feishu/src/transport/webhook/monitor.js +3 -5
  47. package/dist/extensions/feishu/src/ui/config-surface.js +0 -2
  48. package/dist/extensions/feishu/src/workflow-progress.js +0 -2
  49. package/dist/extensions/google/src/image-generation-provider.js +0 -2
  50. package/dist/extensions/minimax/src/image-generation-provider.js +0 -2
  51. package/dist/extensions/openai/src/image-generation-provider.js +0 -2
  52. package/dist/extensions/telegram/src/access-control.js +0 -2
  53. package/dist/extensions/telegram/src/account-manager.js +0 -2
  54. package/dist/extensions/telegram/src/actions/message-actions.js +0 -2
  55. package/dist/extensions/telegram/src/adapters/command-adapter.js +0 -2
  56. package/dist/extensions/telegram/src/adapters/config-adapter.js +0 -2
  57. package/dist/extensions/telegram/src/adapters/debounce-keys.js +0 -2
  58. package/dist/extensions/telegram/src/adapters/gateway-adapter.js +0 -2
  59. package/dist/extensions/telegram/src/adapters/gateway-setup.js +0 -2
  60. package/dist/extensions/telegram/src/adapters/inbound-access.js +0 -2
  61. package/dist/extensions/telegram/src/adapters/index.js +0 -2
  62. package/dist/extensions/telegram/src/adapters/onboard-cli.js +0 -2
  63. package/dist/extensions/telegram/src/adapters/outbound-adapter.js +0 -2
  64. package/dist/extensions/telegram/src/adapters/security-adapter.js +0 -2
  65. package/dist/extensions/telegram/src/adapters/setup-wizard.js +0 -2
  66. package/dist/extensions/telegram/src/adapters/status-adapter.js +0 -2
  67. package/dist/extensions/telegram/src/adapters/streaming-adapter.js +0 -2
  68. package/dist/extensions/telegram/src/api-root.js +0 -2
  69. package/dist/extensions/telegram/src/approval-delivery.js +0 -2
  70. package/dist/extensions/telegram/src/approval-store.js +0 -2
  71. package/dist/extensions/telegram/src/caption.js +0 -2
  72. package/dist/extensions/telegram/src/command-handler.js +0 -2
  73. package/dist/extensions/telegram/src/config-schema.js +0 -2
  74. package/dist/extensions/telegram/src/conversation-id.js +0 -2
  75. package/dist/extensions/telegram/src/dedupe.js +0 -2
  76. package/dist/extensions/telegram/src/delivery-chat-id.js +0 -2
  77. package/dist/extensions/telegram/src/doctor.js +0 -2
  78. package/dist/extensions/telegram/src/draft-stream-lifecycle.js +0 -2
  79. package/dist/extensions/telegram/src/draft-stream-loop.js +0 -2
  80. package/dist/extensions/telegram/src/draft-stream.js +0 -2
  81. package/dist/extensions/telegram/src/errors.js +0 -2
  82. package/dist/extensions/telegram/src/exec-approval-handler.js +0 -2
  83. package/dist/extensions/telegram/src/exec-approvals.js +0 -2
  84. package/dist/extensions/telegram/src/focus-handler.js +0 -2
  85. package/dist/extensions/telegram/src/format.js +0 -2
  86. package/dist/extensions/telegram/src/group-config-resolver.js +0 -2
  87. package/dist/extensions/telegram/src/inbound-coalescer.js +0 -2
  88. package/dist/extensions/telegram/src/inbound-processor.js +0 -2
  89. package/dist/extensions/telegram/src/index.js +0 -2
  90. package/dist/extensions/telegram/src/inline-keyboards.js +0 -2
  91. package/dist/extensions/telegram/src/network-errors.js +0 -2
  92. package/dist/extensions/telegram/src/outbound-sender.js +0 -2
  93. package/dist/extensions/telegram/src/pairing-config-resolver.js +0 -2
  94. package/dist/extensions/telegram/src/plugin-defaults.js +0 -2
  95. package/dist/extensions/telegram/src/plugin.js +0 -2
  96. package/dist/extensions/telegram/src/polling-session.js +0 -2
  97. package/dist/extensions/telegram/src/proxy-fetch.js +0 -2
  98. package/dist/extensions/telegram/src/reactions.js +0 -2
  99. package/dist/extensions/telegram/src/reply-params.js +0 -2
  100. package/dist/extensions/telegram/src/routing-integration.js +0 -2
  101. package/dist/extensions/telegram/src/send-options.js +0 -2
  102. package/dist/extensions/telegram/src/sent-cache.js +0 -2
  103. package/dist/extensions/telegram/src/startup-errors.js +0 -2
  104. package/dist/extensions/telegram/src/telegram-actions.js +0 -2
  105. package/dist/extensions/telegram/src/telegram-draft-errors.js +0 -2
  106. package/dist/extensions/telegram/src/thread-bindings.js +0 -2
  107. package/dist/extensions/telegram/src/timeout-abort.js +0 -2
  108. package/dist/extensions/telegram/src/token-resolver.js +0 -2
  109. package/dist/extensions/telegram/src/update-offset-store.js +0 -2
  110. package/dist/extensions/telegram/src/workflow-progress.js +0 -2
  111. package/dist/extensions/telegram/xopc.extension.json +1 -1
  112. package/dist/extensions/weixin/src/adapters/onboard-cli.js +0 -2
  113. package/dist/extensions/weixin/src/api/api.js +0 -2
  114. package/dist/extensions/weixin/src/api/config-cache.js +0 -2
  115. package/dist/extensions/weixin/src/api/session-guard.js +0 -2
  116. package/dist/extensions/weixin/src/api/types.js +0 -2
  117. package/dist/extensions/weixin/src/auth/accounts.js +0 -2
  118. package/dist/extensions/weixin/src/auth/login-qr.js +0 -2
  119. package/dist/extensions/weixin/src/auth/pairing.js +0 -2
  120. package/dist/extensions/weixin/src/auth/weixin-account-id.js +0 -2
  121. package/dist/extensions/weixin/src/cdn/aes-ecb.js +0 -2
  122. package/dist/extensions/weixin/src/cdn/cdn-upload.js +0 -2
  123. package/dist/extensions/weixin/src/cdn/cdn-url.js +0 -2
  124. package/dist/extensions/weixin/src/cdn/pic-decrypt.js +0 -2
  125. package/dist/extensions/weixin/src/cdn/upload.js +0 -2
  126. package/dist/extensions/weixin/src/cli/gateway-qr-login.js +0 -2
  127. package/dist/extensions/weixin/src/cli/qr-login.js +0 -2
  128. package/dist/extensions/weixin/src/config-schema.js +0 -2
  129. package/dist/extensions/weixin/src/config-surface.js +0 -2
  130. package/dist/extensions/weixin/src/delivery-to.js +0 -2
  131. package/dist/extensions/weixin/src/index.js +0 -2
  132. package/dist/extensions/weixin/src/media/data-url.js +0 -2
  133. package/dist/extensions/weixin/src/media/media-download.js +0 -2
  134. package/dist/extensions/weixin/src/media/mime.js +0 -2
  135. package/dist/extensions/weixin/src/media/silk-transcode.js +0 -2
  136. package/dist/extensions/weixin/src/messaging/context-token-init.js +0 -2
  137. package/dist/extensions/weixin/src/messaging/debug-mode.js +0 -2
  138. package/dist/extensions/weixin/src/messaging/error-notice.js +0 -2
  139. package/dist/extensions/weixin/src/messaging/inbound.js +0 -2
  140. package/dist/extensions/weixin/src/messaging/markdown-filter.js +0 -2
  141. package/dist/extensions/weixin/src/messaging/process-message.js +0 -2
  142. package/dist/extensions/weixin/src/messaging/send-media.js +0 -2
  143. package/dist/extensions/weixin/src/messaging/send.js +0 -2
  144. package/dist/extensions/weixin/src/messaging/slash-commands.js +0 -2
  145. package/dist/extensions/weixin/src/messaging/typing-ticket-store.js +0 -2
  146. package/dist/extensions/weixin/src/monitor/monitor.js +0 -2
  147. package/dist/extensions/weixin/src/outbound-send.js +0 -2
  148. package/dist/extensions/weixin/src/pairing-config-resolver.js +0 -2
  149. package/dist/extensions/weixin/src/plugin.js +0 -2
  150. package/dist/extensions/weixin/src/routing-integration.js +0 -2
  151. package/dist/extensions/weixin/src/storage/state-dir.js +0 -2
  152. package/dist/extensions/weixin/src/storage/sync-buf.js +0 -2
  153. package/dist/extensions/weixin/src/util/logger.js +0 -2
  154. package/dist/extensions/weixin/src/util/random.js +0 -2
  155. package/dist/extensions/weixin/src/util/redact.js +0 -2
  156. package/dist/extensions/weixin/src/workflow-progress.js +0 -2
  157. package/dist/gateway/static/root/assets/{activity-store-B4s0ipx2.js → activity-store-B3YP7y9d.js} +1 -1
  158. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BSccACje.js → agent-avatar-dicebear-BaP05tRU.js} +1 -1
  159. package/dist/gateway/static/root/assets/{agents-DZDOcgz5.js → agents-QArUBYV7.js} +1 -1
  160. package/dist/gateway/static/root/assets/{api-BMdUsNCV.js → api-BirUfJgj.js} +1 -1
  161. package/dist/gateway/static/root/assets/{app-management-settings-panel-DrLGhYkI.js → app-management-settings-panel-D5Cg_a6I.js} +1 -1
  162. package/dist/gateway/static/root/assets/{appearance-settings-BNasnY9D.js → appearance-settings-BBsAkJ56.js} +1 -1
  163. package/dist/gateway/static/root/assets/{apps-page-Cmr-Hvm9.js → apps-page-D1uAUndU.js} +1 -1
  164. package/dist/gateway/static/root/assets/{archive-plugin-BQ17IK9x.js → archive-plugin-D3OmrvFx.js} +1 -1
  165. package/dist/gateway/static/root/assets/{attachment-load-HXvgWHXu.js → attachment-load-Cgkm_5mb.js} +1 -1
  166. package/dist/gateway/static/root/assets/{automation-suggestion-card-CjIWpsch.js → automation-suggestion-card-CHvxSz-t.js} +1 -1
  167. package/dist/gateway/static/root/assets/{automations-page-TWgUAI8t.js → automations-page-BWQk03Vu.js} +1 -1
  168. package/dist/gateway/static/root/assets/{binary-plugins-DifWJzNZ.js → binary-plugins-dJR5UuzL.js} +1 -1
  169. package/dist/gateway/static/root/assets/{block-editor-DtRzIkPU.js → block-editor-v4_7o92L.js} +2 -2
  170. package/dist/gateway/static/root/assets/{browser-settings-page-DBsFItW_.js → browser-settings-page-SruFGuBP.js} +1 -1
  171. package/dist/gateway/static/root/assets/{capability-presets-api-DazKjWW1.js → capability-presets-api-BcTjPLiD.js} +1 -1
  172. package/dist/gateway/static/root/assets/{capability-presets-settings-panel-Cvrw4fD1.js → capability-presets-settings-panel-CddBf58y.js} +1 -1
  173. package/dist/gateway/static/root/assets/{channel-recipient-api-Bea6if_6.js → channel-recipient-api-BbDlMRm5.js} +1 -1
  174. package/dist/gateway/static/root/assets/{channels-settings-BBkzrBYy.js → channels-settings-WI5tQ5tn.js} +1 -1
  175. package/dist/gateway/static/root/assets/channels-status-swr-Dt2EROlf.js +1 -0
  176. package/dist/gateway/static/root/assets/{connector-logo-BjbYbJjQ.js → connector-logo-BNthqff-.js} +1 -1
  177. package/dist/gateway/static/root/assets/{connectors-page-DLsZCAw7.js → connectors-page-DavHJ6rR.js} +1 -1
  178. package/dist/gateway/static/root/assets/desktop-pet-CVajXkdj.js +1 -0
  179. package/dist/gateway/static/root/assets/desktop-pet-settings-SHI66eIi.js +1 -0
  180. package/dist/gateway/static/root/assets/{directory-picker-path-field-C8zZNUzC.js → directory-picker-path-field-BdWd7m-p.js} +1 -1
  181. package/dist/gateway/static/root/assets/{dreaming-settings-gJSw7Adk.js → dreaming-settings-CXDhu3Me.js} +1 -1
  182. package/dist/gateway/static/root/assets/{extension-debug-page-DFE5ADJ0.js → extension-debug-page-CLJTGozU.js} +1 -1
  183. package/dist/gateway/static/root/assets/{extension-page-CfR-aW8G.js → extension-page-ClxpGfzA.js} +1 -1
  184. package/dist/gateway/static/root/assets/{extension-settings-page-CFIEbs2L.js → extension-settings-page-CDA3ZJ8k.js} +1 -1
  185. package/dist/gateway/static/root/assets/{gateway-config-api-B6M_ra8U.js → gateway-config-api-DpXL78pS.js} +1 -1
  186. package/dist/gateway/static/root/assets/{gateway-settings-BrxzyVW2.js → gateway-settings-Co-mXFP_.js} +1 -1
  187. package/dist/gateway/static/root/assets/{gateway-startup-retry-DNA3OOzV.js → gateway-startup-retry-D0SU7dte.js} +1 -1
  188. package/dist/gateway/static/root/assets/{goal-create-dialog-DRVRLc5Z.js → goal-create-dialog-BO6G--Ec.js} +1 -1
  189. package/dist/gateway/static/root/assets/{goal-detail-page-8F7NElzP.js → goal-detail-page-DK8eog4h.js} +1 -1
  190. package/dist/gateway/static/root/assets/{goals-config-api-D88opgcs.js → goals-config-api-r71aDqix.js} +1 -1
  191. package/dist/gateway/static/root/assets/{goals-page-BaoLiV8G.js → goals-page-AcROW97U.js} +2 -2
  192. package/dist/gateway/static/root/assets/{goals-settings-D07UL8Jo.js → goals-settings-CZOLhkTH.js} +1 -1
  193. package/dist/gateway/static/root/assets/{heartbeat-settings-YCSNOcXC.js → heartbeat-settings-F9S1gIFo.js} +1 -1
  194. package/dist/gateway/static/root/assets/index-C46C7Xee.css +1 -0
  195. package/dist/gateway/static/root/assets/{index-CH7XN6KY.js → index-IPmCli0N.js} +41 -41
  196. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BHnh5OoY.js → keyboard-shortcuts-settings-B3CUVfZ8.js} +1 -1
  197. package/dist/gateway/static/root/assets/{local-app-workbench-page-Boe8n4zH.js → local-app-workbench-page-HVq6NUvQ.js} +1 -1
  198. package/dist/gateway/static/root/assets/{local-apps-page-CKvtLzsF.js → local-apps-page-n7YJfRkU.js} +1 -1
  199. package/dist/gateway/static/root/assets/{locale-store-BneNAR8R.js → locale-store-BvcHGPHU.js} +1 -1
  200. package/dist/gateway/static/root/assets/{logs-page-Cb4Uptct.js → logs-page-Dgko6r04.js} +1 -1
  201. package/dist/gateway/static/root/assets/{markdown-split-BVSFG99p.js → markdown-split-1mnXr-JA.js} +1 -1
  202. package/dist/gateway/static/root/assets/{media-plugins-DdOjIVk3.js → media-plugins-D2bcxXrT.js} +1 -1
  203. package/dist/gateway/static/root/assets/{messages-t1yPaVCt.js → messages-BH7paqYt.js} +2 -2
  204. package/dist/gateway/static/root/assets/{models-hub-panel-CNiUKZUV.js → models-hub-panel-DD0cEfmR.js} +1 -1
  205. package/dist/gateway/static/root/assets/{notes-page-ZbLR3awn.js → notes-page-Wjc2utlj.js} +1 -1
  206. package/dist/gateway/static/root/assets/{notes-workbench-C9__VkD6.js → notes-workbench-BkA2yg9K.js} +2 -2
  207. package/dist/gateway/static/root/assets/{page-tabs-DMlQERNg.js → page-tabs-vdljrKuG.js} +1 -1
  208. package/dist/gateway/static/root/assets/{preview-open-alternatives-CbiJRPxK.js → preview-open-alternatives-BHki0l-E.js} +1 -1
  209. package/dist/gateway/static/root/assets/{project-detail-page-CZhuB5kO.js → project-detail-page-CXwVNLgg.js} +1 -1
  210. package/dist/gateway/static/root/assets/{projects-page-BOq4WVdR.js → projects-page-DlfvNcLh.js} +1 -1
  211. package/dist/gateway/static/root/assets/{remote-access-hub-BxGq0ebQ.js → remote-access-hub-BQyEX2Ui.js} +1 -1
  212. package/dist/gateway/static/root/assets/{save-bar-controls-BZTj3hxl.js → save-bar-controls-Vy4EmvEh.js} +1 -1
  213. package/dist/gateway/static/root/assets/{schedule-field-CxYDObjT.js → schedule-field-CVcwC7k_.js} +1 -1
  214. package/dist/gateway/static/root/assets/{schema-form-CBbXgpKQ.js → schema-form-DhMA1vkR.js} +1 -1
  215. package/dist/gateway/static/root/assets/{sessions-page-B6gSU_Au.js → sessions-page-CqQEW8oT.js} +1 -1
  216. package/dist/gateway/static/root/assets/settings-advanced-gate-M8fleFSc.js +1 -0
  217. package/dist/gateway/static/root/assets/{settings-collapsible-section-BySKZ8rp.js → settings-collapsible-section-C0xcL0vB.js} +1 -1
  218. package/dist/gateway/static/root/assets/{settings-form-section-CjINay6t.js → settings-form-section-Cgj4iVpx.js} +1 -1
  219. package/dist/gateway/static/root/assets/{settings-loading-skeleton-vitElc-n.js → settings-loading-skeleton-CC_NmD69.js} +1 -1
  220. package/dist/gateway/static/root/assets/{settings-page-BNrVwuL7.js → settings-page-B7_JZ2rM.js} +1 -1
  221. package/dist/gateway/static/root/assets/{settings-page-layout-HdlQOOqp.js → settings-page-layout-CKuQT4SG.js} +1 -1
  222. package/dist/gateway/static/root/assets/{setup-status-panel-BJeA4mmk.js → setup-status-panel-DvR8Y5YN.js} +1 -1
  223. package/dist/gateway/static/root/assets/{share-preview-page-DC-eQONB.js → share-preview-page-BmVw-6SJ.js} +1 -1
  224. package/dist/gateway/static/root/assets/{shares-settings-DB2KYA2_.js → shares-settings-C0JYYhGx.js} +1 -1
  225. package/dist/gateway/static/root/assets/skill-reload-api-DBFBczqN.js +1 -0
  226. package/dist/gateway/static/root/assets/{skills-page-Pm0fNe_p.js → skills-page-KAI9qBDD.js} +1 -1
  227. package/dist/gateway/static/root/assets/{system-settings-panel-CVa90q2f.js → system-settings-panel-D6d8VAk8.js} +1 -1
  228. package/dist/gateway/static/root/assets/{theme-store-D1cOpgsy.js → theme-store-EbMQ3TYi.js} +1 -1
  229. package/dist/gateway/static/root/assets/{typed-models-lib-DIKF9vpz.js → typed-models-lib-D63hJX-S.js} +1 -1
  230. package/dist/gateway/static/root/assets/{use-channel-catalog-DnvpI0Ys.js → use-channel-catalog-D-I-qki9.js} +1 -1
  231. package/dist/gateway/static/root/assets/{user-context-page-DnLqQyRG.js → user-context-page-Cuft-EbR.js} +1 -1
  232. package/dist/gateway/static/root/assets/{user-profile-fields-editor-y8gTmkPX.js → user-profile-fields-editor-CPaoS8Zl.js} +1 -1
  233. package/dist/gateway/static/root/assets/{user-profile-settings-panel-C3pvqe28.js → user-profile-settings-panel-Bs13qcx1.js} +1 -1
  234. package/dist/gateway/static/root/assets/{utils-BK2vwu_3.js → utils-3mnkFvPw.js} +1 -1
  235. package/dist/gateway/static/root/assets/{voice-api-key-field-BiFIIWC4.js → voice-api-key-field-C716UEi9.js} +1 -1
  236. package/dist/gateway/static/root/assets/{work-discovery-page-D2-_bC0J.js → work-discovery-page-CFSkHa0v.js} +1 -1
  237. package/dist/gateway/static/root/assets/{work-item-detail-page-B0FPG4eJ.js → work-item-detail-page-DaapBdoZ.js} +1 -1
  238. package/dist/gateway/static/root/assets/{work-page-BDeVxts_.js → work-page-DMtX92vs.js} +1 -1
  239. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BPzS67fU.js → workflow-run-setup-panel-B9FnZNWZ.js} +1 -1
  240. package/dist/gateway/static/root/assets/{workflows-page-xPhmrRLs.js → workflows-page-BgvE0_Iv.js} +1 -1
  241. package/dist/gateway/static/root/favicon.svg +1 -187
  242. package/dist/gateway/static/root/index.html +7 -7
  243. package/dist/gateway/static/root/logo-dark.svg +1 -185
  244. package/dist/gateway/static/root/logo.svg +1 -185
  245. package/dist/package.js +1 -3
  246. package/dist/src/activity/context.js +0 -2
  247. package/dist/src/activity/emitter.js +0 -2
  248. package/dist/src/activity/service.js +0 -2
  249. package/dist/src/agent/agent-manager.js +0 -2
  250. package/dist/src/agent/agent-scope.js +0 -2
  251. package/dist/src/agent/background-review/coordinator.js +0 -2
  252. package/dist/src/agent/background-review/prompts.js +0 -2
  253. package/dist/src/agent/background-review/run-background-review.js +0 -2
  254. package/dist/src/agent/background-review/settings.js +0 -2
  255. package/dist/src/agent/bootstrap/bootstrap-cache.js +0 -2
  256. package/dist/src/agent/bootstrap/bootstrap-context.js +0 -2
  257. package/dist/src/agent/bootstrap/bootstrap-files.js +0 -2
  258. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +0 -2
  259. package/dist/src/agent/bootstrap/load-bootstrap-files.js +0 -2
  260. package/dist/src/agent/bootstrap/project-agents-context.js +0 -2
  261. package/dist/src/agent/capabilities/definitions.js +0 -2
  262. package/dist/src/agent/capabilities/registry.js +0 -2
  263. package/dist/src/agent/child-agent-factory.js +0 -2
  264. package/dist/src/agent/client-error-format.js +0 -2
  265. package/dist/src/agent/code-intelligence/binary.js +0 -2
  266. package/dist/src/agent/code-intelligence/runtime.js +0 -2
  267. package/dist/src/agent/code-intelligence/tools.js +0 -2
  268. package/dist/src/agent/coding/turn-diff-tracker.js +0 -2
  269. package/dist/src/agent/context/expand-at-file-mentions.js +0 -2
  270. package/dist/src/agent/context/project-context.js +0 -2
  271. package/dist/src/agent/context/workspace-seed.js +0 -2
  272. package/dist/src/agent/context/workspace-state.js +0 -2
  273. package/dist/src/agent/context/workspace.js +0 -2
  274. package/dist/src/agent/embedded/run-for-session.js +0 -2
  275. package/dist/src/agent/embedded/run-turn.js +0 -2
  276. package/dist/src/agent/embedded/runs.js +0 -2
  277. package/dist/src/agent/embedded/session-manager-init.js +0 -2
  278. package/dist/src/agent/embedded/session-runner.js +0 -2
  279. package/dist/src/agent/embedded/session-tool-result-guard.js +0 -2
  280. package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js +0 -2
  281. package/dist/src/agent/embedded/subscribe-session.js +0 -2
  282. package/dist/src/agent/embedded/system-prompt-override.js +0 -2
  283. package/dist/src/agent/embedded/tool-result-context-guard.js +0 -2
  284. package/dist/src/agent/embedded/tool-result-truncation.js +0 -2
  285. package/dist/src/agent/embedded/xopc-auth-storage.js +0 -2
  286. package/dist/src/agent/embedded/xopc-stream-bridge.js +0 -2
  287. package/dist/src/agent/embedded/xopc-tools-bridge.js +0 -2
  288. package/dist/src/agent/failover-error.js +0 -2
  289. package/dist/src/agent/fallback/candidates.js +0 -2
  290. package/dist/src/agent/fallback/reason.js +0 -2
  291. package/dist/src/agent/feedback/feedback-coordinator.js +0 -2
  292. package/dist/src/agent/goals/checklist-judge.js +0 -2
  293. package/dist/src/agent/goals/checklist-types.js +0 -2
  294. package/dist/src/agent/goals/evaluate-turn.js +0 -2
  295. package/dist/src/agent/goals/goal-locale.js +0 -2
  296. package/dist/src/agent/goals/judge.js +0 -2
  297. package/dist/src/agent/goals/persistent-goal-service.js +0 -2
  298. package/dist/src/agent/goals/post-turn.js +0 -2
  299. package/dist/src/agent/goals/state.js +0 -2
  300. package/dist/src/agent/image/generation/bundled-registry.js +0 -2
  301. package/dist/src/agent/image/generation/bundled.js +0 -2
  302. package/dist/src/agent/image/generation/image-assets.js +0 -2
  303. package/dist/src/agent/image/generation/model-ref.js +0 -2
  304. package/dist/src/agent/image/generation/normalization.js +0 -2
  305. package/dist/src/agent/image/generation/openai-compatible-image-provider.js +0 -2
  306. package/dist/src/agent/image/generation/provider-registry.js +0 -2
  307. package/dist/src/agent/image/generation/runtime.js +0 -2
  308. package/dist/src/agent/image/image-helpers.js +0 -2
  309. package/dist/src/agent/image/image-model-fallback.js +0 -2
  310. package/dist/src/agent/image/inbound-image-handling.js +0 -2
  311. package/dist/src/agent/image/load-image-media.js +0 -2
  312. package/dist/src/agent/image/tool-model-config.js +0 -2
  313. package/dist/src/agent/image/understanding/pi-ai-provider.js +0 -2
  314. package/dist/src/agent/image/understanding/provider-registry.js +0 -2
  315. package/dist/src/agent/image/understanding/runtime.js +0 -2
  316. package/dist/src/agent/image/vision-detection.js +0 -2
  317. package/dist/src/agent/inbound/attachment-pipeline.js +0 -2
  318. package/dist/src/agent/inbound/inbound-loop.js +0 -2
  319. package/dist/src/agent/inbound/turn-dispatcher.js +0 -2
  320. package/dist/src/agent/ipc/bus.js +0 -2
  321. package/dist/src/agent/ipc/inbox.js +0 -2
  322. package/dist/src/agent/ipc/socket.js +0 -2
  323. package/dist/src/agent/ipc/types.js +0 -2
  324. package/dist/src/agent/lifecycle/handlers/compaction.js +0 -2
  325. package/dist/src/agent/lifecycle/hook-handler.js +0 -2
  326. package/dist/src/agent/lifecycle/manager.js +0 -2
  327. package/dist/src/agent/lifecycle/progress.js +0 -2
  328. package/dist/src/agent/lifecycle/timeout-wrapper.js +0 -2
  329. package/dist/src/agent/lifecycle/typing.js +0 -2
  330. package/dist/src/agent/mcp/bundle-mcp-config.js +0 -2
  331. package/dist/src/agent/mcp/bundle-mcp-materialize.js +0 -2
  332. package/dist/src/agent/mcp/bundle-mcp-names.js +0 -2
  333. package/dist/src/agent/mcp/bundle-mcp-policy.js +0 -2
  334. package/dist/src/agent/mcp/bundle-mcp-runtime.js +0 -2
  335. package/dist/src/agent/mcp/embedded-mcp.js +0 -2
  336. package/dist/src/agent/mcp/mcp-config-shared.js +0 -2
  337. package/dist/src/agent/mcp/mcp-http.js +0 -2
  338. package/dist/src/agent/mcp/mcp-stdio-transport.js +0 -2
  339. package/dist/src/agent/mcp/mcp-stdio.js +0 -2
  340. package/dist/src/agent/mcp/mcp-tool-meta.js +0 -2
  341. package/dist/src/agent/mcp/mcp-transport-config.js +0 -2
  342. package/dist/src/agent/mcp/mcp-transport.js +0 -2
  343. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js +0 -2
  344. package/dist/src/agent/media-generation/model-ref.js +0 -2
  345. package/dist/src/agent/media-generation/normalization.types.js +0 -2
  346. package/dist/src/agent/media-generation/runtime-shared.js +0 -2
  347. package/dist/src/agent/memory/agent-message-access.js +0 -2
  348. package/dist/src/agent/memory/builtin-memory-store.js +0 -2
  349. package/dist/src/agent/memory/builtin-provider.js +0 -2
  350. package/dist/src/agent/memory/compaction.js +0 -2
  351. package/dist/src/agent/memory/context/planner.js +0 -2
  352. package/dist/src/agent/memory/context-fence.js +0 -2
  353. package/dist/src/agent/memory/create-memory-manager.js +0 -2
  354. package/dist/src/agent/memory/dreaming/config.js +0 -2
  355. package/dist/src/agent/memory/dreaming/constants.js +0 -2
  356. package/dist/src/agent/memory/dreaming/deep-promotion.js +0 -2
  357. package/dist/src/agent/memory/dreaming/events.js +0 -2
  358. package/dist/src/agent/memory/dreaming/last-run.js +0 -2
  359. package/dist/src/agent/memory/dreaming/light-sweep.js +0 -2
  360. package/dist/src/agent/memory/dreaming/preview.js +0 -2
  361. package/dist/src/agent/memory/dreaming/promotion-lifecycle.js +0 -2
  362. package/dist/src/agent/memory/dreaming/rem-patterns.js +0 -2
  363. package/dist/src/agent/memory/dreaming/scope.js +0 -2
  364. package/dist/src/agent/memory/dreaming/short-term-store.js +0 -2
  365. package/dist/src/agent/memory/dreaming/utils.js +0 -2
  366. package/dist/src/agent/memory/lifecycle.js +0 -2
  367. package/dist/src/agent/memory/manager.js +0 -2
  368. package/dist/src/agent/memory/memory-config.js +0 -2
  369. package/dist/src/agent/memory/message-sanitizer.js +0 -2
  370. package/dist/src/agent/memory/plugin-discovery.js +0 -2
  371. package/dist/src/agent/memory/sensitivity.js +0 -2
  372. package/dist/src/agent/memory/source-origin.js +0 -2
  373. package/dist/src/agent/memory/stub-memory-provider.js +0 -2
  374. package/dist/src/agent/memory/summary-generator.js +0 -2
  375. package/dist/src/agent/memory/understanding/correction.js +0 -2
  376. package/dist/src/agent/memory/understanding/quality.js +0 -2
  377. package/dist/src/agent/memory/understanding/service.js +0 -2
  378. package/dist/src/agent/memory/user-context-coordinator.js +0 -2
  379. package/dist/src/agent/memory/user-message-text.js +0 -2
  380. package/dist/src/agent/memory/window.js +0 -2
  381. package/dist/src/agent/messaging/command-handler.js +0 -2
  382. package/dist/src/agent/messaging/message-router.js +0 -2
  383. package/dist/src/agent/messaging/outbound-coordinator.js +0 -2
  384. package/dist/src/agent/messaging/stream-manager.js +0 -2
  385. package/dist/src/agent/middleware/context.js +0 -2
  386. package/dist/src/agent/middleware/self-verify.js +0 -2
  387. package/dist/src/agent/models/manager.js +0 -2
  388. package/dist/src/agent/models/request-limiter.js +0 -2
  389. package/dist/src/agent/models/selection.js +0 -2
  390. package/dist/src/agent/orchestration/agent-event-handler.js +0 -2
  391. package/dist/src/agent/orchestration/agent-orchestrator.js +0 -2
  392. package/dist/src/agent/orchestration/llm-turn-retry.js +0 -2
  393. package/dist/src/agent/orchestration/loop-guard.js +0 -2
  394. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +0 -2
  395. package/dist/src/agent/prompt/cache-boundary.js +0 -2
  396. package/dist/src/agent/prompt/memory/index.js +0 -2
  397. package/dist/src/agent/prompt/safety.js +0 -2
  398. package/dist/src/agent/prompt/sanitize-for-prompt.js +0 -2
  399. package/dist/src/agent/prompt/sections/behavior.js +0 -2
  400. package/dist/src/agent/prompt/sections/memory-skills.js +0 -2
  401. package/dist/src/agent/prompt/sections/messaging-runtime.js +0 -2
  402. package/dist/src/agent/prompt/sections/project-context.js +0 -2
  403. package/dist/src/agent/prompt/sections/tooling.js +0 -2
  404. package/dist/src/agent/prompt/sections/workspace-runtime.js +0 -2
  405. package/dist/src/agent/prompt/service-prompt-builder.js +0 -2
  406. package/dist/src/agent/prompt/subagent-context.js +0 -2
  407. package/dist/src/agent/prompt/system-prompt-params.js +0 -2
  408. package/dist/src/agent/prompt/system-prompt.js +0 -2
  409. package/dist/src/agent/prompt/system-reminder.js +0 -2
  410. package/dist/src/agent/reply/apply-turn-user-enrichment.js +0 -2
  411. package/dist/src/agent/reply/post-compaction-context.js +0 -2
  412. package/dist/src/agent/reply/startup-context.js +0 -2
  413. package/dist/src/agent/reply/workspace-boundary-read.js +0 -2
  414. package/dist/src/agent/sandbox/command-validator.js +0 -2
  415. package/dist/src/agent/sandbox/exec-policy.js +0 -2
  416. package/dist/src/agent/sandbox/path-policy.js +0 -2
  417. package/dist/src/agent/sandbox/sanitize-env-vars.js +0 -2
  418. package/dist/src/agent/sandbox/types.js +0 -2
  419. package/dist/src/agent/service/async-queue.js +0 -2
  420. package/dist/src/agent/service/btw-query.js +0 -2
  421. package/dist/src/agent/service/build-direct-message-content.js +0 -2
  422. package/dist/src/agent/service/direct-turn-helpers.js +0 -2
  423. package/dist/src/agent/service/parse-outbound-session-key.js +0 -2
  424. package/dist/src/agent/service/process-direct-one-shot.js +0 -2
  425. package/dist/src/agent/service/process-direct-streaming.js +0 -2
  426. package/dist/src/agent/service/session-context-report.js +0 -2
  427. package/dist/src/agent/service/webchat-tts.js +0 -2
  428. package/dist/src/agent/service-inbound-utils.js +0 -2
  429. package/dist/src/agent/service.js +0 -2
  430. package/dist/src/agent/session/session-config-service.js +0 -2
  431. package/dist/src/agent/session/session-context.js +0 -2
  432. package/dist/src/agent/session/session-hydrator.js +0 -2
  433. package/dist/src/agent/session/session-inspector.js +0 -2
  434. package/dist/src/agent/session/session-lifecycle.js +0 -2
  435. package/dist/src/agent/session/session-state-bag.js +0 -2
  436. package/dist/src/agent/session/tracker.js +0 -2
  437. package/dist/src/agent/skills/config.js +0 -2
  438. package/dist/src/agent/skills/filesystem-watcher.js +0 -2
  439. package/dist/src/agent/skills/format-skills-prompt.js +0 -2
  440. package/dist/src/agent/skills/hub-hash.js +0 -2
  441. package/dist/src/agent/skills/hub-lock.js +0 -2
  442. package/dist/src/agent/skills/hub-pull.js +0 -2
  443. package/dist/src/agent/skills/index.js +0 -2
  444. package/dist/src/agent/skills/install-target.js +0 -2
  445. package/dist/src/agent/skills/installer.js +0 -2
  446. package/dist/src/agent/skills/managed-store.js +0 -2
  447. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +0 -2
  448. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +0 -2
  449. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +0 -2
  450. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +0 -2
  451. package/dist/src/agent/skills/marketplace/marketplace-category-order.js +0 -2
  452. package/dist/src/agent/skills/marketplace/registry.js +0 -2
  453. package/dist/src/agent/skills/marketplace/resolve-adapter.js +0 -2
  454. package/dist/src/agent/skills/parse-skill-metadata.js +0 -2
  455. package/dist/src/agent/skills/required-env-vars.js +0 -2
  456. package/dist/src/agent/skills/scanner.js +0 -2
  457. package/dist/src/agent/skills/skill-manage-ops.js +0 -2
  458. package/dist/src/agent/skills/skill-manager.js +0 -2
  459. package/dist/src/agent/skills/skill-markdown-preview-from-raw.js +0 -2
  460. package/dist/src/agent/skills/skill-tool-gating.js +0 -2
  461. package/dist/src/agent/skills/skill-view-path.js +0 -2
  462. package/dist/src/agent/skills/skills-marketplace.js +0 -2
  463. package/dist/src/agent/skills/test-framework.js +0 -2
  464. package/dist/src/agent/skills/watcher.js +0 -2
  465. package/dist/src/agent/skills/workspace-skills-dir.js +0 -2
  466. package/dist/src/agent/source-context/injector.js +0 -2
  467. package/dist/src/agent/source-context/types.js +0 -2
  468. package/dist/src/agent/starter-agents.js +0 -2
  469. package/dist/src/agent/streaming/reasoning-visibility-sse.js +0 -2
  470. package/dist/src/agent/tool-manuals/browser.js +0 -2
  471. package/dist/src/agent/tool-manuals/index.js +0 -2
  472. package/dist/src/agent/tool-manuals/xopc-use.js +0 -2
  473. package/dist/src/agent/tools/apply-patch.js +0 -2
  474. package/dist/src/agent/tools/automation-tool.js +0 -2
  475. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +0 -2
  476. package/dist/src/agent/tools/browser/tool/schemas.js +0 -2
  477. package/dist/src/agent/tools/chain-tracker.js +0 -2
  478. package/dist/src/agent/tools/clarify-tool.js +0 -2
  479. package/dist/src/agent/tools/cli-clarify.js +0 -2
  480. package/dist/src/agent/tools/communication.js +0 -2
  481. package/dist/src/agent/tools/composio-tool.js +0 -2
  482. package/dist/src/agent/tools/concurrency.js +0 -2
  483. package/dist/src/agent/tools/create-share-tool.js +0 -2
  484. package/dist/src/agent/tools/curated-memory-tool.js +0 -2
  485. package/dist/src/agent/tools/delegate-tool.js +0 -2
  486. package/dist/src/agent/tools/desktop-pet-tool.d.ts +12 -0
  487. package/dist/src/agent/tools/desktop-pet-tool.js +28 -2
  488. package/dist/src/agent/tools/dreaming-tool.js +0 -2
  489. package/dist/src/agent/tools/edit-diff.js +0 -2
  490. package/dist/src/agent/tools/error-pattern-matcher.js +0 -2
  491. package/dist/src/agent/tools/error-tracker.js +0 -2
  492. package/dist/src/agent/tools/exec-command.js +0 -2
  493. package/dist/src/agent/tools/execute-code-tool.js +0 -2
  494. package/dist/src/agent/tools/executor.js +0 -2
  495. package/dist/src/agent/tools/factory.js +0 -2
  496. package/dist/src/agent/tools/find.js +0 -2
  497. package/dist/src/agent/tools/goal-evidence-recorder.js +0 -2
  498. package/dist/src/agent/tools/goal-tool.js +0 -2
  499. package/dist/src/agent/tools/grep.js +0 -2
  500. package/dist/src/agent/tools/image-generate-tool.js +0 -2
  501. package/dist/src/agent/tools/image-tool.js +0 -2
  502. package/dist/src/agent/tools/list-dir.js +0 -2
  503. package/dist/src/agent/tools/media-read-tool.js +0 -2
  504. package/dist/src/agent/tools/memory-tool.js +0 -2
  505. package/dist/src/agent/tools/metadata.js +0 -2
  506. package/dist/src/agent/tools/read.js +0 -2
  507. package/dist/src/agent/tools/search/http.js +0 -2
  508. package/dist/src/agent/tools/search/providers/bing-api.js +0 -2
  509. package/dist/src/agent/tools/search/providers/bing-html.js +0 -2
  510. package/dist/src/agent/tools/search/providers/brave.js +0 -2
  511. package/dist/src/agent/tools/search/providers/duckduckgo-html.js +0 -2
  512. package/dist/src/agent/tools/search/providers/searxng.js +0 -2
  513. package/dist/src/agent/tools/search/providers/tavily.js +0 -2
  514. package/dist/src/agent/tools/search/region.js +0 -2
  515. package/dist/src/agent/tools/search/registry.js +0 -2
  516. package/dist/src/agent/tools/search/resolve-config.js +0 -2
  517. package/dist/src/agent/tools/send-media.js +0 -2
  518. package/dist/src/agent/tools/session-search-tool.js +0 -2
  519. package/dist/src/agent/tools/session-status-tool.js +0 -2
  520. package/dist/src/agent/tools/skill-install-tool.js +0 -2
  521. package/dist/src/agent/tools/skill-manage-tool.js +0 -2
  522. package/dist/src/agent/tools/skills-tools.js +0 -2
  523. package/dist/src/agent/tools/structured-output.js +0 -2
  524. package/dist/src/agent/tools/todo-tool.js +0 -2
  525. package/dist/src/agent/tools/tool-manual-tool.js +0 -2
  526. package/dist/src/agent/tools/tool-paths.js +0 -2
  527. package/dist/src/agent/tools/truncate.js +0 -2
  528. package/dist/src/agent/tools/tts-tool.js +0 -2
  529. package/dist/src/agent/tools/update-plan-tool.js +0 -2
  530. package/dist/src/agent/tools/url-safety.js +0 -2
  531. package/dist/src/agent/tools/usage-analyzer.js +0 -2
  532. package/dist/src/agent/tools/web-extract.js +0 -2
  533. package/dist/src/agent/tools/web.js +4 -4
  534. package/dist/src/agent/tools/workflow-tool.js +0 -2
  535. package/dist/src/agent/tools/write.js +0 -2
  536. package/dist/src/agent/tools/xopc-use-tool.js +0 -2
  537. package/dist/src/agent/transcript/google-api.js +0 -2
  538. package/dist/src/agent/transcript/model-selection.js +0 -2
  539. package/dist/src/agent/transcript/provider-capabilities.js +0 -2
  540. package/dist/src/agent/transcript/session-transcript-repair.js +0 -2
  541. package/dist/src/agent/transcript/strip-tool-messages.js +0 -2
  542. package/dist/src/agent/transcript/thinking-types.js +0 -2
  543. package/dist/src/agent/transcript/thinking.js +0 -2
  544. package/dist/src/agent/transcript/tool-call-id.js +0 -2
  545. package/dist/src/agent/transcript/transcript-hygiene.js +0 -2
  546. package/dist/src/agent/transcript/transcript-policy.js +0 -2
  547. package/dist/src/agent/workflow/agent-progress.js +0 -2
  548. package/dist/src/agent/workflow/builtins/index.js +0 -2
  549. package/dist/src/agent/workflow/catalog.js +0 -2
  550. package/dist/src/agent/workflow/progress-broker.js +0 -2
  551. package/dist/src/agent/workflow/snapshot-empty.js +0 -2
  552. package/dist/src/agent/workflow/snapshot.js +0 -2
  553. package/dist/src/agent/workflow/step-labels.js +0 -2
  554. package/dist/src/agent/workflow/structured-output-tool.js +0 -2
  555. package/dist/src/agent/workflow/subagent-runner.js +0 -2
  556. package/dist/src/agent/workflow/workflow-child-tools.js +0 -2
  557. package/dist/src/agent/workspace-runtime/registry.js +0 -2
  558. package/dist/src/agent-manifest/index.js +0 -2
  559. package/dist/src/agent-manifest/preset-chain.js +0 -2
  560. package/dist/src/agent-manifest/prompt.js +0 -2
  561. package/dist/src/agent-manifest/resolver.js +0 -2
  562. package/dist/src/agent-manifest/schema.js +0 -2
  563. package/dist/src/agent-manifest/validator.js +0 -2
  564. package/dist/src/agent-runtime/boundary-guard.js +0 -2
  565. package/dist/src/agent-runtime/memory-runtime.js +0 -2
  566. package/dist/src/agent-runtime/model-router.js +0 -2
  567. package/dist/src/agent-runtime/run-trace.js +0 -2
  568. package/dist/src/agent-runtime/runtime-profile.js +0 -2
  569. package/dist/src/agent-runtime/tool-registry.js +0 -2
  570. package/dist/src/agent-runtime/workflow-runtime.js +0 -2
  571. package/dist/src/ai-assist/text-assist.js +0 -2
  572. package/dist/src/auth/credentials.js +0 -2
  573. package/dist/src/auth/index.js +0 -2
  574. package/dist/src/auth/oauth/anthropic.js +0 -2
  575. package/dist/src/auth/oauth/github-copilot.js +0 -2
  576. package/dist/src/auth/oauth/google-oauth/google-antigravity.js +0 -2
  577. package/dist/src/auth/oauth/google-oauth/google-gemini-cli.js +0 -2
  578. package/dist/src/auth/oauth/google-oauth/oauth-page.js +0 -2
  579. package/dist/src/auth/oauth/google-oauth/pkce.js +0 -2
  580. package/dist/src/auth/oauth/kimi-coding.js +0 -2
  581. package/dist/src/auth/oauth/minimax-cn.js +0 -2
  582. package/dist/src/auth/oauth/minimax.js +0 -2
  583. package/dist/src/auth/oauth/openai-codex.js +0 -2
  584. package/dist/src/auth/oauth/pkce.js +0 -2
  585. package/dist/src/auth/profiles/oauth.js +0 -2
  586. package/dist/src/auth/profiles/order.js +0 -2
  587. package/dist/src/auth/profiles/profiles.js +0 -2
  588. package/dist/src/auth/profiles/store.js +0 -2
  589. package/dist/src/auth/sync-provider-auth.js +0 -2
  590. package/dist/src/automations/api/routes.js +0 -2
  591. package/dist/src/automations/domain/schedule.js +0 -2
  592. package/dist/src/automations/domain/validation.js +0 -2
  593. package/dist/src/automations/draft/automation-draft-prompt.js +0 -2
  594. package/dist/src/automations/draft/automation-draft-service.js +0 -2
  595. package/dist/src/automations/draft/automation-draft-validator.js +0 -2
  596. package/dist/src/automations/product-events.js +0 -2
  597. package/dist/src/automations/service/action-executor.js +0 -2
  598. package/dist/src/automations/service/automation-service.js +0 -2
  599. package/dist/src/automations/storage/automation-repository.js +0 -2
  600. package/dist/src/automations/storage/automation-run-repository.js +0 -2
  601. package/dist/src/browser/actions/extension-registry-bridge.js +0 -2
  602. package/dist/src/browser/actions/registry.js +0 -2
  603. package/dist/src/browser/backend-from-config.js +0 -2
  604. package/dist/src/browser/browser-command-timeout.js +0 -2
  605. package/dist/src/browser/cache-dir-policy.js +0 -2
  606. package/dist/src/browser/cdp-local-launcher.js +0 -2
  607. package/dist/src/browser/cdp-supervisor.js +0 -2
  608. package/dist/src/browser/free-port.js +0 -2
  609. package/dist/src/browser/humanize.js +0 -2
  610. package/dist/src/browser/install-lock.js +0 -2
  611. package/dist/src/browser/manager.js +0 -2
  612. package/dist/src/browser/pipeline/output.js +0 -2
  613. package/dist/src/browser/pipeline/runner.js +0 -2
  614. package/dist/src/browser/pipeline/schema.js +0 -2
  615. package/dist/src/browser/pipeline/source.js +0 -2
  616. package/dist/src/browser/pipeline/template.js +0 -2
  617. package/dist/src/browser/providers/browser-ext-install.js +0 -2
  618. package/dist/src/browser/providers/browser-use.js +0 -2
  619. package/dist/src/browser/providers/browserbase.js +0 -2
  620. package/dist/src/browser/providers/cloakbrowser.js +0 -2
  621. package/dist/src/browser/providers/extension-ws-acquire.js +0 -2
  622. package/dist/src/browser/providers/extension.js +0 -2
  623. package/dist/src/browser/providers/playwright-doctor.js +13 -4
  624. package/dist/src/browser/providers/playwright-install.js +0 -2
  625. package/dist/src/browser/readiness.js +0 -2
  626. package/dist/src/browser/schemas.js +0 -2
  627. package/dist/src/browser/session-lifecycle.js +0 -2
  628. package/dist/src/browser/snapshot-helpers.js +0 -2
  629. package/dist/src/browser/stealth.js +0 -2
  630. package/dist/src/browser/url-policy.js +0 -2
  631. package/dist/src/capabilities/store-connector.js +0 -2
  632. package/dist/src/channels/attachments/attachment-classifiers.js +0 -2
  633. package/dist/src/channels/attachments/inbound-persist.js +0 -2
  634. package/dist/src/channels/attachments/inbound-types.js +0 -2
  635. package/dist/src/channels/attachments/outbound-tts-persist.js +0 -2
  636. package/dist/src/channels/attachments/voice-stt-webchat.js +0 -2
  637. package/dist/src/channels/catalog/channel-catalog-service.js +0 -2
  638. package/dist/src/channels/config-helpers.js +0 -2
  639. package/dist/src/channels/envelope-timestamp.js +0 -2
  640. package/dist/src/channels/exec-approval-runtime.js +0 -2
  641. package/dist/src/channels/health-monitor.js +0 -2
  642. package/dist/src/channels/heartbeat-scheduler.js +0 -2
  643. package/dist/src/channels/internal-outbound.js +0 -2
  644. package/dist/src/channels/lifecycle-supervisor.js +0 -2
  645. package/dist/src/channels/manager.js +0 -2
  646. package/dist/src/channels/media.js +0 -2
  647. package/dist/src/channels/outbound/deliver.js +0 -2
  648. package/dist/src/channels/outbound/normalize.js +0 -2
  649. package/dist/src/channels/outbound/persist-store.js +0 -2
  650. package/dist/src/channels/outbound/queue.js +0 -2
  651. package/dist/src/channels/outbound-sender.js +0 -2
  652. package/dist/src/channels/pairing/allow-from-file.js +0 -2
  653. package/dist/src/channels/pairing/approve-cli.js +0 -2
  654. package/dist/src/channels/pairing/pairing-challenge.js +0 -2
  655. package/dist/src/channels/pairing/pairing-constants.js +0 -2
  656. package/dist/src/channels/pairing/pairing-events.js +0 -2
  657. package/dist/src/channels/pairing/pairing-messages.js +0 -2
  658. package/dist/src/channels/pairing/pairing-service.js +0 -2
  659. package/dist/src/channels/pairing/pairing-store-adapter.js +0 -2
  660. package/dist/src/channels/pairing/pairing-store.js +0 -2
  661. package/dist/src/channels/pairing/paths.js +0 -2
  662. package/dist/src/channels/pairing/preseed-allow-from.js +0 -2
  663. package/dist/src/channels/pipeline.js +0 -2
  664. package/dist/src/channels/plugin-registry.js +0 -2
  665. package/dist/src/channels/plugins/registry.js +0 -2
  666. package/dist/src/channels/restart-policy.js +0 -2
  667. package/dist/src/channels/security-helpers.js +0 -2
  668. package/dist/src/channels/security.js +0 -2
  669. package/dist/src/channels/setup-wizard-discovery.js +0 -2
  670. package/dist/src/chat-commands/agent-edit.js +0 -2
  671. package/dist/src/chat-commands/builtins/config.js +0 -2
  672. package/dist/src/chat-commands/builtins/context.js +0 -2
  673. package/dist/src/chat-commands/builtins/goal.js +0 -2
  674. package/dist/src/chat-commands/builtins/model.js +0 -2
  675. package/dist/src/chat-commands/builtins/review.js +0 -2
  676. package/dist/src/chat-commands/builtins/session.js +0 -2
  677. package/dist/src/chat-commands/builtins/skill.js +0 -2
  678. package/dist/src/chat-commands/builtins/subgoal.js +0 -2
  679. package/dist/src/chat-commands/builtins/system.js +0 -2
  680. package/dist/src/chat-commands/builtins/thinking.js +0 -2
  681. package/dist/src/chat-commands/builtins/tts.js +0 -2
  682. package/dist/src/chat-commands/builtins/workflow.js +0 -2
  683. package/dist/src/chat-commands/command-parse.js +0 -2
  684. package/dist/src/chat-commands/config-paths.js +0 -2
  685. package/dist/src/chat-commands/config-value.js +0 -2
  686. package/dist/src/chat-commands/context.js +0 -2
  687. package/dist/src/chat-commands/format-output.js +0 -2
  688. package/dist/src/chat-commands/index.js +0 -2
  689. package/dist/src/chat-commands/processor.js +0 -2
  690. package/dist/src/chat-commands/registry.js +0 -2
  691. package/dist/src/chat-commands/session-key.js +0 -2
  692. package/dist/src/cli/argv-invocation.js +0 -2
  693. package/dist/src/cli/argv.js +0 -2
  694. package/dist/src/cli/bin.js +0 -2
  695. package/dist/src/cli/cli-log-level-preset.js +0 -2
  696. package/dist/src/cli/command-catalog.js +0 -2
  697. package/dist/src/cli/command-loaders.js +0 -2
  698. package/dist/src/cli/command-manifest.js +0 -2
  699. package/dist/src/cli/command-path-matches.js +0 -2
  700. package/dist/src/cli/command-path-policy.js +0 -2
  701. package/dist/src/cli/command-startup-policy.js +0 -2
  702. package/dist/src/cli/commands/agent/interactive.js +0 -2
  703. package/dist/src/cli/commands/agent/sessions.js +0 -2
  704. package/dist/src/cli/commands/agent/stream-renderer.js +0 -2
  705. package/dist/src/cli/commands/agent.js +0 -2
  706. package/dist/src/cli/commands/agents.js +0 -2
  707. package/dist/src/cli/commands/auth.js +0 -2
  708. package/dist/src/cli/commands/browser-cli-helpers.js +0 -2
  709. package/dist/src/cli/commands/browser.js +0 -2
  710. package/dist/src/cli/commands/channels.js +0 -2
  711. package/dist/src/cli/commands/config.js +0 -2
  712. package/dist/src/cli/commands/connectors.js +0 -2
  713. package/dist/src/cli/commands/doctor/checks/channel-config.js +0 -2
  714. package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js +0 -2
  715. package/dist/src/cli/commands/doctor/checks/channel-plugins.js +0 -2
  716. package/dist/src/cli/commands/doctor/checks/config-health.js +0 -2
  717. package/dist/src/cli/commands/doctor/checks/database-schema.js +0 -2
  718. package/dist/src/cli/commands/doctor/checks/gateway-health.js +0 -2
  719. package/dist/src/cli/commands/doctor/checks/gateway-service.js +0 -2
  720. package/dist/src/cli/commands/doctor/checks/migrations.js +0 -2
  721. package/dist/src/cli/commands/doctor/checks/node-version.js +0 -2
  722. package/dist/src/cli/commands/doctor/checks/provider-auth.js +0 -2
  723. package/dist/src/cli/commands/doctor/checks/security-audit.js +0 -2
  724. package/dist/src/cli/commands/doctor/checks/session-integrity.js +0 -2
  725. package/dist/src/cli/commands/doctor/checks/state-integrity.js +0 -2
  726. package/dist/src/cli/commands/doctor/checks/version-check.js +0 -2
  727. package/dist/src/cli/commands/doctor/checks/workspace-status.js +0 -2
  728. package/dist/src/cli/commands/doctor/flow.js +0 -2
  729. package/dist/src/cli/commands/doctor/format.js +0 -2
  730. package/dist/src/cli/commands/doctor/index.js +0 -2
  731. package/dist/src/cli/commands/extension-create.js +0 -2
  732. package/dist/src/cli/commands/extension-dev.js +0 -2
  733. package/dist/src/cli/commands/extension-marketplace.js +0 -2
  734. package/dist/src/cli/commands/extension-pack.js +0 -2
  735. package/dist/src/cli/commands/extension.js +0 -2
  736. package/dist/src/cli/commands/gateway/call.js +0 -2
  737. package/dist/src/cli/commands/gateway/health.js +0 -2
  738. package/dist/src/cli/commands/gateway/lifecycle-core.js +0 -2
  739. package/dist/src/cli/commands/gateway/lifecycle.js +0 -2
  740. package/dist/src/cli/commands/gateway/logs.js +0 -2
  741. package/dist/src/cli/commands/gateway/probe.js +0 -2
  742. package/dist/src/cli/commands/gateway/restart-health.js +0 -2
  743. package/dist/src/cli/commands/gateway/restart.js +0 -2
  744. package/dist/src/cli/commands/gateway/run-foreground.js +0 -2
  745. package/dist/src/cli/commands/gateway/service.js +0 -2
  746. package/dist/src/cli/commands/gateway/shared.js +0 -2
  747. package/dist/src/cli/commands/gateway/status.js +0 -2
  748. package/dist/src/cli/commands/gateway/stop.js +0 -2
  749. package/dist/src/cli/commands/gateway/subcommands.js +0 -2
  750. package/dist/src/cli/commands/gateway/token.js +0 -2
  751. package/dist/src/cli/commands/gateway-ssh-tunnel.js +0 -2
  752. package/dist/src/cli/commands/gateway.js +0 -2
  753. package/dist/src/cli/commands/goal.js +0 -2
  754. package/dist/src/cli/commands/image.js +0 -2
  755. package/dist/src/cli/commands/init.js +0 -2
  756. package/dist/src/cli/commands/logs.js +0 -2
  757. package/dist/src/cli/commands/models.js +0 -2
  758. package/dist/src/cli/commands/onboard/channels/index.js +0 -2
  759. package/dist/src/cli/commands/onboard/channels/onboard-to-configurator.js +0 -2
  760. package/dist/src/cli/commands/onboard/channels/registry.js +0 -2
  761. package/dist/src/cli/commands/onboard/channels/wizard-to-configurator.js +0 -2
  762. package/dist/src/cli/commands/onboard/gateway.js +0 -2
  763. package/dist/src/cli/commands/onboard/model.js +0 -2
  764. package/dist/src/cli/commands/onboard.js +0 -2
  765. package/dist/src/cli/commands/profile.js +0 -2
  766. package/dist/src/cli/commands/project.js +0 -2
  767. package/dist/src/cli/commands/providers.js +0 -2
  768. package/dist/src/cli/commands/resume.js +0 -2
  769. package/dist/src/cli/commands/search.js +0 -2
  770. package/dist/src/cli/commands/session/actions.js +0 -2
  771. package/dist/src/cli/commands/session/utils.js +0 -2
  772. package/dist/src/cli/commands/session.js +0 -2
  773. package/dist/src/cli/commands/setup-shared/output.js +0 -2
  774. package/dist/src/cli/commands/setup-shared/prompts.js +0 -2
  775. package/dist/src/cli/commands/setup-shared/runner.js +0 -2
  776. package/dist/src/cli/commands/setup-shared/types.js +0 -2
  777. package/dist/src/cli/commands/setup.js +0 -2
  778. package/dist/src/cli/commands/skills-test.js +0 -2
  779. package/dist/src/cli/commands/skills.js +0 -2
  780. package/dist/src/cli/commands/tailscale.js +0 -2
  781. package/dist/src/cli/commands/tui-runner.js +0 -2
  782. package/dist/src/cli/commands/tui.js +0 -2
  783. package/dist/src/cli/commands/tunnel.js +0 -2
  784. package/dist/src/cli/commands/update.js +0 -2
  785. package/dist/src/cli/commands/voice.js +0 -2
  786. package/dist/src/cli/context.js +0 -2
  787. package/dist/src/cli/extension-cli-register.js +0 -2
  788. package/dist/src/cli/gateway-run-argv.js +0 -2
  789. package/dist/src/cli/gateway-run-fast-path.js +0 -2
  790. package/dist/src/cli/index.js +0 -2
  791. package/dist/src/cli/registry.js +0 -2
  792. package/dist/src/cli/templates.js +0 -2
  793. package/dist/src/cli/utils/colors.js +0 -2
  794. package/dist/src/cli/utils/gateway-client-options.js +0 -2
  795. package/dist/src/cli/utils/gateway-client.js +0 -2
  796. package/dist/src/cli/utils/init-workspace-core.js +0 -2
  797. package/dist/src/cli/utils/init-workspace.js +0 -2
  798. package/dist/src/cli/utils/oauth-login.js +0 -2
  799. package/dist/src/cli/utils/oauth-providers.js +0 -2
  800. package/dist/src/cli/utils/session.js +0 -2
  801. package/dist/src/commands/agents.config.js +0 -2
  802. package/dist/src/config/agent-profile.js +0 -2
  803. package/dist/src/config/agent-typed-models.js +0 -2
  804. package/dist/src/config/commands.flags.js +0 -2
  805. package/dist/src/config/default-model.js +0 -2
  806. package/dist/src/config/diff.js +0 -2
  807. package/dist/src/config/gateway-bind.js +0 -2
  808. package/dist/src/config/index.js +0 -2
  809. package/dist/src/config/loader.js +0 -2
  810. package/dist/src/config/mcp-config-normalize.js +0 -2
  811. package/dist/src/config/model-input.js +0 -2
  812. package/dist/src/config/models-json.js +0 -2
  813. package/dist/src/config/paths-state.js +0 -2
  814. package/dist/src/config/paths.js +0 -2
  815. package/dist/src/config/profile.js +0 -2
  816. package/dist/src/config/public-url.js +0 -2
  817. package/dist/src/config/reload.js +0 -2
  818. package/dist/src/config/resolve-config-value.js +0 -2
  819. package/dist/src/config/rules.js +0 -2
  820. package/dist/src/config/runtime-overrides.js +0 -2
  821. package/dist/src/config/schema.js +0 -2
  822. package/dist/src/config/validate-channel-configs.js +0 -2
  823. package/dist/src/config/voice.js +0 -2
  824. package/dist/src/config/web-patch.js +0 -2
  825. package/dist/src/config/workspace-defaults.js +0 -2
  826. package/dist/src/config/workspace-dirs.js +0 -2
  827. package/dist/src/config/workspace-path-helpers.js +0 -2
  828. package/dist/src/config/workspace-path.js +0 -2
  829. package/dist/src/connectors/approval.js +0 -2
  830. package/dist/src/connectors/auth-provider-registry.js +0 -2
  831. package/dist/src/connectors/builtin-catalog.js +0 -2
  832. package/dist/src/connectors/catalog.js +0 -2
  833. package/dist/src/connectors/composio-catalog.js +0 -2
  834. package/dist/src/connectors/composio-logo.js +0 -2
  835. package/dist/src/connectors/composio-sessions.js +9 -5
  836. package/dist/src/connectors/composio-triggers.js +0 -2
  837. package/dist/src/connectors/composio.js +0 -2
  838. package/dist/src/connectors/connector-memory-sync.js +0 -2
  839. package/dist/src/connectors/health.js +0 -2
  840. package/dist/src/connectors/install.js +0 -2
  841. package/dist/src/connectors/instances.js +0 -2
  842. package/dist/src/connectors/integration-strategy.js +0 -2
  843. package/dist/src/connectors/lifecycle.js +0 -2
  844. package/dist/src/connectors/materialize.js +0 -2
  845. package/dist/src/connectors/policy.js +0 -2
  846. package/dist/src/connectors/providers.js +0 -2
  847. package/dist/src/connectors/registries/modelscope.js +0 -2
  848. package/dist/src/connectors/registries/official-mcp.js +0 -2
  849. package/dist/src/connectors/registries/search.js +0 -2
  850. package/dist/src/connectors/registries/smithery.js +0 -2
  851. package/dist/src/connectors/runtime-adapter-registry.js +0 -2
  852. package/dist/src/connectors/secret-store.js +0 -2
  853. package/dist/src/connectors/setup-secrets.js +0 -2
  854. package/dist/src/connectors/supervisor.js +0 -2
  855. package/dist/src/connectors/usage.js +0 -2
  856. package/dist/src/connectors/workflow-preflight.js +0 -2
  857. package/dist/src/daemon/constants.js +0 -2
  858. package/dist/src/daemon/install-plan.js +0 -2
  859. package/dist/src/daemon/launchd.js +0 -2
  860. package/dist/src/daemon/schtasks.js +0 -2
  861. package/dist/src/daemon/service-audit.js +0 -2
  862. package/dist/src/daemon/service.js +0 -2
  863. package/dist/src/daemon/systemd.js +0 -2
  864. package/dist/src/document-understanding/extract.js +0 -2
  865. package/dist/src/errors/index.js +0 -2
  866. package/dist/src/extensions/activation-context.js +0 -2
  867. package/dist/src/extensions/activation-planner.js +0 -2
  868. package/dist/src/extensions/api.js +0 -2
  869. package/dist/src/extensions/bundle-mcp.js +0 -2
  870. package/dist/src/extensions/bundled-extension-activation.js +0 -2
  871. package/dist/src/extensions/diagnostics.js +0 -2
  872. package/dist/src/extensions/discover-extensions.js +0 -2
  873. package/dist/src/extensions/engine-check.js +0 -2
  874. package/dist/src/extensions/extension-metadata-snapshot.js +0 -2
  875. package/dist/src/extensions/extension-registry-impl.js +0 -2
  876. package/dist/src/extensions/health.js +0 -2
  877. package/dist/src/extensions/hooks.js +0 -2
  878. package/dist/src/extensions/index.js +0 -2
  879. package/dist/src/extensions/install-transaction.js +0 -2
  880. package/dist/src/extensions/install.js +0 -2
  881. package/dist/src/extensions/loader.js +0 -2
  882. package/dist/src/extensions/lockfile.js +0 -2
  883. package/dist/src/extensions/manifest-registry.js +0 -2
  884. package/dist/src/extensions/marketplace.js +0 -2
  885. package/dist/src/extensions/media-provider-contracts.js +0 -2
  886. package/dist/src/extensions/normalize-manifest.js +0 -2
  887. package/dist/src/extensions/onboard-helpers.js +0 -2
  888. package/dist/src/extensions/package-contract.js +0 -2
  889. package/dist/src/extensions/sdk/channel-entry.js +0 -2
  890. package/dist/src/extensions/sdk/channel-helpers.js +0 -2
  891. package/dist/src/extensions/sdk/index.js +0 -2
  892. package/dist/src/extensions/sdk/lazy.js +0 -2
  893. package/dist/src/extensions/sdk/testing.js +0 -2
  894. package/dist/src/extensions/security.js +0 -2
  895. package/dist/src/extensions/slots.js +0 -2
  896. package/dist/src/extensions/speech-provider-contracts.js +0 -2
  897. package/dist/src/extensions/store-zip-limits.js +0 -2
  898. package/dist/src/extensions/typed-event-bus.js +0 -2
  899. package/dist/src/extensions/types/hooks.js +0 -2
  900. package/dist/src/extensions/types/providers.js +0 -2
  901. package/dist/src/extensions/update.js +0 -2
  902. package/dist/src/extensions/when-context.js +0 -2
  903. package/dist/src/extensions/when-expression.js +0 -2
  904. package/dist/src/gateway/agent-builtin-tools.js +0 -2
  905. package/dist/src/gateway/agent-run-relay.js +0 -2
  906. package/dist/src/gateway/agents-admin.js +0 -2
  907. package/dist/src/gateway/auth.js +0 -2
  908. package/dist/src/gateway/capability-presets-admin.js +0 -2
  909. package/dist/src/gateway/chat-limits.js +0 -2
  910. package/dist/src/gateway/chat-stream/mapper.js +28 -14
  911. package/dist/src/gateway/chat-stream/pet-feedback.d.ts +13 -0
  912. package/dist/src/gateway/chat-stream/pet-feedback.js +45 -0
  913. package/dist/src/gateway/chat-stream/protocol.d.ts +26 -0
  914. package/dist/src/gateway/clarify-bridge.js +3 -3
  915. package/dist/src/gateway/clarify-runtime.js +0 -2
  916. package/dist/src/gateway/client-ip.js +0 -2
  917. package/dist/src/gateway/config-tools-web.js +0 -2
  918. package/dist/src/gateway/credential.js +0 -2
  919. package/dist/src/gateway/discovery/mdns.js +0 -2
  920. package/dist/src/gateway/dreaming-automation-reconciler.js +0 -2
  921. package/dist/src/gateway/ensure-network-cors.js +0 -2
  922. package/dist/src/gateway/file-path-classifier.js +0 -2
  923. package/dist/src/gateway/file-reference-registry.js +0 -2
  924. package/dist/src/gateway/global-defaults-admin.js +0 -2
  925. package/dist/src/gateway/heartbeat/service.js +0 -2
  926. package/dist/src/gateway/hono/app.js +0 -2
  927. package/dist/src/gateway/hono/lib/agent-model.js +0 -2
  928. package/dist/src/gateway/hono/lib/config-payload.js +0 -2
  929. package/dist/src/gateway/hono/lib/extension-assets.js +0 -2
  930. package/dist/src/gateway/hono/lib/extension-store.js +0 -2
  931. package/dist/src/gateway/hono/lib/mask-secret-length.js +0 -2
  932. package/dist/src/gateway/hono/lib/route-logger.js +0 -2
  933. package/dist/src/gateway/hono/lib/safe-providers-config.js +0 -2
  934. package/dist/src/gateway/hono/lib/safe-voice-config.js +0 -2
  935. package/dist/src/gateway/hono/lib/startup-unavailable.js +0 -2
  936. package/dist/src/gateway/hono/lib/static-ui.js +0 -2
  937. package/dist/src/gateway/hono/middleware/auth.js +0 -2
  938. package/dist/src/gateway/hono/middleware/log-context.js +0 -2
  939. package/dist/src/gateway/hono/middleware/logger.js +0 -2
  940. package/dist/src/gateway/hono/middleware/route-errors.js +0 -2
  941. package/dist/src/gateway/hono/middleware/scopes.js +0 -2
  942. package/dist/src/gateway/hono/middleware/strict-rate-limit.js +0 -2
  943. package/dist/src/gateway/hono/oauth-async.js +0 -2
  944. package/dist/src/gateway/hono/oauth.js +0 -2
  945. package/dist/src/gateway/hono/routes/activity.js +0 -2
  946. package/dist/src/gateway/hono/routes/agent-stream.js +0 -2
  947. package/dist/src/gateway/hono/routes/agents.js +0 -2
  948. package/dist/src/gateway/hono/routes/ai-assist.js +0 -2
  949. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +0 -2
  950. package/dist/src/gateway/hono/routes/browser-install.js +0 -2
  951. package/dist/src/gateway/hono/routes/browser.js +0 -2
  952. package/dist/src/gateway/hono/routes/capabilities.js +0 -2
  953. package/dist/src/gateway/hono/routes/capability-presets.js +0 -2
  954. package/dist/src/gateway/hono/routes/channels.js +0 -2
  955. package/dist/src/gateway/hono/routes/commands-skills.js +0 -2
  956. package/dist/src/gateway/hono/routes/config-patch/agents.js +0 -2
  957. package/dist/src/gateway/hono/routes/config-patch/channels.js +0 -2
  958. package/dist/src/gateway/hono/routes/config-patch/gateway.js +0 -2
  959. package/dist/src/gateway/hono/routes/config-patch/misc.js +0 -2
  960. package/dist/src/gateway/hono/routes/config-patch/result.js +0 -2
  961. package/dist/src/gateway/hono/routes/config.js +0 -2
  962. package/dist/src/gateway/hono/routes/connectors.js +0 -2
  963. package/dist/src/gateway/hono/routes/doctor.js +0 -2
  964. package/dist/src/gateway/hono/routes/dreaming.js +0 -2
  965. package/dist/src/gateway/hono/routes/exposure.js +0 -2
  966. package/dist/src/gateway/hono/routes/extension-gateway.js +0 -2
  967. package/dist/src/gateway/hono/routes/global-defaults.js +0 -2
  968. package/dist/src/gateway/hono/routes/goals.js +0 -2
  969. package/dist/src/gateway/hono/routes/home.js +0 -2
  970. package/dist/src/gateway/hono/routes/host-fs.js +0 -2
  971. package/dist/src/gateway/hono/routes/index.js +0 -2
  972. package/dist/src/gateway/hono/routes/lazy-bundles.js +0 -2
  973. package/dist/src/gateway/hono/routes/lazy-fallback.js +0 -2
  974. package/dist/src/gateway/hono/routes/local-apps.js +0 -2
  975. package/dist/src/gateway/hono/routes/logs.js +0 -2
  976. package/dist/src/gateway/hono/routes/mcp.js +0 -2
  977. package/dist/src/gateway/hono/routes/media.js +0 -2
  978. package/dist/src/gateway/hono/routes/memory.js +0 -2
  979. package/dist/src/gateway/hono/routes/migrations.js +0 -2
  980. package/dist/src/gateway/hono/routes/mobile.js +0 -2
  981. package/dist/src/gateway/hono/routes/models.js +0 -2
  982. package/dist/src/gateway/hono/routes/notes.js +3 -3
  983. package/dist/src/gateway/hono/routes/projects.js +0 -2
  984. package/dist/src/gateway/hono/routes/public-gateway.js +0 -2
  985. package/dist/src/gateway/hono/routes/search.js +0 -2
  986. package/dist/src/gateway/hono/routes/sessions.js +0 -2
  987. package/dist/src/gateway/hono/routes/shares.js +0 -2
  988. package/dist/src/gateway/hono/routes/site-shares.js +0 -2
  989. package/dist/src/gateway/hono/routes/status.js +0 -2
  990. package/dist/src/gateway/hono/routes/tui.js +0 -2
  991. package/dist/src/gateway/hono/routes/tunnel.js +0 -2
  992. package/dist/src/gateway/hono/routes/update.js +0 -2
  993. package/dist/src/gateway/hono/routes/voice.js +0 -2
  994. package/dist/src/gateway/hono/routes/work-discovery.js +0 -2
  995. package/dist/src/gateway/hono/routes/workflows.js +0 -2
  996. package/dist/src/gateway/hono/routes/workspace.js +0 -2
  997. package/dist/src/gateway/hono/routes/you.js +0 -2
  998. package/dist/src/gateway/hono/sse-json.js +0 -2
  999. package/dist/src/gateway/hono/sse.js +0 -2
  1000. package/dist/src/gateway/host.js +0 -2
  1001. package/dist/src/gateway/image-capabilities.js +0 -2
  1002. package/dist/src/gateway/listen.js +0 -2
  1003. package/dist/src/gateway/lock.js +0 -2
  1004. package/dist/src/gateway/ports.js +0 -2
  1005. package/dist/src/gateway/protocol.js +0 -2
  1006. package/dist/src/gateway/public-url.js +0 -2
  1007. package/dist/src/gateway/rate-limit/auth-policy.js +0 -2
  1008. package/dist/src/gateway/rate-limit/buckets.js +0 -2
  1009. package/dist/src/gateway/rate-limit/env-flags.js +0 -2
  1010. package/dist/src/gateway/resolve-channel-connect-defer.js +0 -2
  1011. package/dist/src/gateway/resolve-webchat-session-key.js +0 -2
  1012. package/dist/src/gateway/respawn.js +0 -2
  1013. package/dist/src/gateway/run-loop.js +0 -2
  1014. package/dist/src/gateway/runtime-config.js +0 -2
  1015. package/dist/src/gateway/security/audit.js +0 -2
  1016. package/dist/src/gateway/security/csp.js +0 -2
  1017. package/dist/src/gateway/security/dangerous-tools.js +0 -2
  1018. package/dist/src/gateway/security/external-content.js +0 -2
  1019. package/dist/src/gateway/security/known-weak-secrets.js +0 -2
  1020. package/dist/src/gateway/security/loopback.js +0 -2
  1021. package/dist/src/gateway/security/operator-scopes.js +0 -2
  1022. package/dist/src/gateway/security/origin-check.js +0 -2
  1023. package/dist/src/gateway/security/preauth-connection-budget.js +0 -2
  1024. package/dist/src/gateway/security/secret-equal.js +0 -2
  1025. package/dist/src/gateway/server-tailscale.js +0 -2
  1026. package/dist/src/gateway/server.js +0 -2
  1027. package/dist/src/gateway/service/agent-runner.js +0 -2
  1028. package/dist/src/gateway/service/config-coordinator.js +0 -2
  1029. package/dist/src/gateway/service/marketplace-service.js +0 -2
  1030. package/dist/src/gateway/service/run-gateway-agent.js +0 -2
  1031. package/dist/src/gateway/service/session-chat-ids.js +0 -2
  1032. package/dist/src/gateway/service/sessions-api.js +0 -2
  1033. package/dist/src/gateway/service/sse-hub.js +0 -2
  1034. package/dist/src/gateway/service.js +0 -2
  1035. package/dist/src/gateway/session-reset-service.js +0 -2
  1036. package/dist/src/gateway/startup-readiness.js +0 -2
  1037. package/dist/src/gateway/startup-trace.js +0 -2
  1038. package/dist/src/gateway/tailscale-auth.js +0 -2
  1039. package/dist/src/gateway/tailscale-lifecycle.js +0 -2
  1040. package/dist/src/gateway/tls-server.js +0 -2
  1041. package/dist/src/gateway/trusted-proxy.js +0 -2
  1042. package/dist/src/gateway/user-turn-input.js +0 -2
  1043. package/dist/src/gateway/workspace-editor-path.js +0 -2
  1044. package/dist/src/gateway/workspace-file-search.js +0 -2
  1045. package/dist/src/gateway/workspace-fs-file-list.js +0 -2
  1046. package/dist/src/gateway/workspace-heartbeat-path.js +0 -2
  1047. package/dist/src/gateway/workspace-ripgrep.js +0 -2
  1048. package/dist/src/gateway/ws-security.js +0 -2
  1049. package/dist/src/generated/bundled-image-generation-providers.js +0 -2
  1050. package/dist/src/goals/goal-contract-draft.js +0 -2
  1051. package/dist/src/goals/goal-evidence-review.js +0 -2
  1052. package/dist/src/goals/goal-notifications.js +0 -2
  1053. package/dist/src/goals/goal-queue-store.js +0 -2
  1054. package/dist/src/goals/goal-runner.js +0 -2
  1055. package/dist/src/goals/goal-service.js +0 -2
  1056. package/dist/src/goals/goal-store.js +0 -2
  1057. package/dist/src/goals/goal-workflow-judge.js +0 -2
  1058. package/dist/src/heartbeat/active-hours.js +0 -2
  1059. package/dist/src/heartbeat/content-check.js +0 -2
  1060. package/dist/src/heartbeat/event-prompt.js +0 -2
  1061. package/dist/src/heartbeat/tokens.js +0 -2
  1062. package/dist/src/heartbeat/wake.js +0 -2
  1063. package/dist/src/i18n/format.js +0 -2
  1064. package/dist/src/i18n/goals-bundle.js +0 -2
  1065. package/dist/src/i18n/locale.js +0 -2
  1066. package/dist/src/i18n/locales/goals.en.js +0 -2
  1067. package/dist/src/i18n/locales/goals.zh.js +0 -2
  1068. package/dist/src/i18n/locales/share-tool.en.js +0 -2
  1069. package/dist/src/i18n/locales/share-tool.zh.js +0 -2
  1070. package/dist/src/i18n/share-tool-bundle.js +0 -2
  1071. package/dist/src/index.js +0 -2
  1072. package/dist/src/infra/brew.js +0 -2
  1073. package/dist/src/infra/bus/queue.js +0 -2
  1074. package/dist/src/infra/debounce.js +0 -2
  1075. package/dist/src/infra/exec.js +0 -2
  1076. package/dist/src/infra/gateway-process-argv.js +0 -2
  1077. package/dist/src/infra/gateway-processes.js +0 -2
  1078. package/dist/src/infra/host-env-security-policy.js +0 -2
  1079. package/dist/src/infra/host-env-security.js +0 -2
  1080. package/dist/src/infra/http-proxy-env.js +0 -2
  1081. package/dist/src/infra/is-main.js +0 -2
  1082. package/dist/src/infra/json-utf8-bytes.js +0 -2
  1083. package/dist/src/infra/node-sqlite.js +0 -2
  1084. package/dist/src/infra/package-json.js +0 -2
  1085. package/dist/src/infra/package-update-steps.js +0 -2
  1086. package/dist/src/infra/path-env.js +0 -2
  1087. package/dist/src/infra/path-prepend.js +0 -2
  1088. package/dist/src/infra/ports.js +0 -2
  1089. package/dist/src/infra/rate-limit/failure-limiter.js +0 -2
  1090. package/dist/src/infra/rate-limit/keyed-store.js +0 -2
  1091. package/dist/src/infra/rate-limit/rate-limiter.js +0 -2
  1092. package/dist/src/infra/restart.js +0 -2
  1093. package/dist/src/infra/retry.js +0 -2
  1094. package/dist/src/infra/run-command.js +0 -2
  1095. package/dist/src/infra/sqlite-errors.js +0 -2
  1096. package/dist/src/infra/ssh-tunnel.js +0 -2
  1097. package/dist/src/infra/stable-node-path.js +0 -2
  1098. package/dist/src/infra/tailscale.js +0 -2
  1099. package/dist/src/infra/undici-fetch.js +0 -2
  1100. package/dist/src/infra/unhandled-rejections.js +0 -2
  1101. package/dist/src/infra/update-channels.js +0 -2
  1102. package/dist/src/infra/update-check.js +0 -2
  1103. package/dist/src/infra/update-global.js +0 -2
  1104. package/dist/src/infra/update-lock.js +0 -2
  1105. package/dist/src/infra/update-log.js +0 -2
  1106. package/dist/src/infra/update-restart.js +0 -2
  1107. package/dist/src/infra/update-runner.js +0 -2
  1108. package/dist/src/infra/update-startup.js +0 -2
  1109. package/dist/src/infra/warning-filter.js +0 -2
  1110. package/dist/src/infra/write-file-atomic.js +0 -2
  1111. package/dist/src/knowledge/connected-knowledge-pipeline.js +0 -2
  1112. package/dist/src/knowledge/coordinator.js +0 -2
  1113. package/dist/src/knowledge/ingestion-service.js +0 -2
  1114. package/dist/src/local-apps/acceptance.js +0 -2
  1115. package/dist/src/local-apps/preview-runtime-bridge.js +0 -2
  1116. package/dist/src/local-apps/runtime-entry.js +0 -2
  1117. package/dist/src/local-apps/scaffold.js +0 -2
  1118. package/dist/src/local-apps/service.js +0 -2
  1119. package/dist/src/local-apps/store.js +0 -2
  1120. package/dist/src/markdown/chunk.js +0 -2
  1121. package/dist/src/markdown/code-spans.js +0 -2
  1122. package/dist/src/markdown/fences.js +0 -2
  1123. package/dist/src/markdown/frontmatter.js +0 -2
  1124. package/dist/src/markdown/ir.js +0 -2
  1125. package/dist/src/markdown/render.js +0 -2
  1126. package/dist/src/markdown/tables.js +0 -2
  1127. package/dist/src/mcp/channel-bridge.js +0 -2
  1128. package/dist/src/mcp/channel-server.js +0 -2
  1129. package/dist/src/mcp/channel-shared.js +0 -2
  1130. package/dist/src/mcp/channel-tools.js +0 -2
  1131. package/dist/src/mcp/gateway-http-client.js +0 -2
  1132. package/dist/src/media/media-reference.js +0 -2
  1133. package/dist/src/media/paths.js +0 -2
  1134. package/dist/src/media/session-references.js +0 -2
  1135. package/dist/src/media/store.js +0 -2
  1136. package/dist/src/media/uri.js +0 -2
  1137. package/dist/src/media-shared/http/api-key-rotation.js +0 -2
  1138. package/dist/src/media-shared/http/deadline.js +0 -2
  1139. package/dist/src/media-shared/http/private-network.js +0 -2
  1140. package/dist/src/media-shared/http/provider-http-errors.js +0 -2
  1141. package/dist/src/media-shared/http/provider-http.js +0 -2
  1142. package/dist/src/media-shared/http/resolve-provider-http-request-config.js +0 -2
  1143. package/dist/src/media-shared/http/ssrf-guard.js +0 -2
  1144. package/dist/src/media-shared/http/test-helpers/mock-server.js +0 -2
  1145. package/dist/src/media-understanding/audio-transcription-runner.js +0 -2
  1146. package/dist/src/media-understanding/openai-compatible-audio.js +0 -2
  1147. package/dist/src/media-understanding/registry.js +0 -2
  1148. package/dist/src/media-understanding/resolve-entries.js +0 -2
  1149. package/dist/src/media-understanding/runner.js +0 -2
  1150. package/dist/src/migrations/config/default-capability-preset.js +0 -2
  1151. package/dist/src/migrations/registry.js +0 -2
  1152. package/dist/src/migrations/runner.js +0 -2
  1153. package/dist/src/mobile/notification-service.js +0 -2
  1154. package/dist/src/mobile/notification-store.js +0 -2
  1155. package/dist/src/mobile/notification-types.js +0 -2
  1156. package/dist/src/notes/agent-context.js +0 -2
  1157. package/dist/src/notes/attachment-ref.js +0 -2
  1158. package/dist/src/notes/note-attachment-sync.js +0 -2
  1159. package/dist/src/notes/note-index-meta.js +0 -2
  1160. package/dist/src/notes/note-markdown.js +0 -2
  1161. package/dist/src/notes/paths.js +0 -2
  1162. package/dist/src/notes/service.d.ts +3 -1
  1163. package/dist/src/notes/service.js +19 -5
  1164. package/dist/src/notes/store.js +0 -2
  1165. package/dist/src/package-version.js +0 -2
  1166. package/dist/src/pets/factory.d.ts +13 -0
  1167. package/dist/src/pets/factory.js +23 -2
  1168. package/dist/src/pets/manifest.js +0 -2
  1169. package/dist/src/pets/validator.js +0 -2
  1170. package/dist/src/process/kill-tree.js +0 -2
  1171. package/dist/src/project-trust/trust-store.js +0 -2
  1172. package/dist/src/projects/automation-bind.js +0 -2
  1173. package/dist/src/projects/goal-bind.js +0 -2
  1174. package/dist/src/projects/memory-bind.js +0 -2
  1175. package/dist/src/projects/project-agent-suggestion.js +0 -2
  1176. package/dist/src/projects/project-agent.js +0 -2
  1177. package/dist/src/projects/project-kind.js +0 -2
  1178. package/dist/src/projects/project-loop.js +0 -2
  1179. package/dist/src/projects/project-service.js +0 -2
  1180. package/dist/src/projects/project-store.js +0 -2
  1181. package/dist/src/projects/session-bind.js +0 -2
  1182. package/dist/src/projects/workflow-bind.js +0 -2
  1183. package/dist/src/projects/workspace-project.js +0 -2
  1184. package/dist/src/projects/workspace.js +0 -2
  1185. package/dist/src/providers/auth-runtime/auth-profile-store.js +0 -2
  1186. package/dist/src/providers/auth-runtime/is-configured.js +0 -2
  1187. package/dist/src/providers/auth-runtime/oauth.js +0 -2
  1188. package/dist/src/providers/auth-runtime/resolve-api-key.js +0 -2
  1189. package/dist/src/providers/auth-runtime/resolve-auth.js +0 -2
  1190. package/dist/src/providers/constants.js +0 -2
  1191. package/dist/src/providers/domestic-presets.js +0 -2
  1192. package/dist/src/providers/env-keys.js +0 -2
  1193. package/dist/src/providers/extension-stream-bridge.js +0 -2
  1194. package/dist/src/providers/index.js +0 -2
  1195. package/dist/src/providers/model-call.js +0 -2
  1196. package/dist/src/providers/model-discovery.js +0 -2
  1197. package/dist/src/providers/model-registry.js +0 -2
  1198. package/dist/src/providers/model-supplements.js +0 -2
  1199. package/dist/src/providers/plugin-registry.js +0 -2
  1200. package/dist/src/providers/presentation.js +0 -2
  1201. package/dist/src/remote-access/exposure-guards.js +0 -2
  1202. package/dist/src/remote-access/exposure-manager.js +0 -2
  1203. package/dist/src/review/review-git.js +0 -2
  1204. package/dist/src/review/review-types.js +0 -2
  1205. package/dist/src/routing/account-id.js +0 -2
  1206. package/dist/src/routing/agent-session-key.js +0 -2
  1207. package/dist/src/routing/bindings.js +0 -2
  1208. package/dist/src/routing/index.js +0 -2
  1209. package/dist/src/routing/resolve-route.js +0 -2
  1210. package/dist/src/routing/resolve-tui-session-key.js +0 -2
  1211. package/dist/src/routing/session-key-utils.js +0 -2
  1212. package/dist/src/routing/session-key.js +0 -2
  1213. package/dist/src/session/abort-cutoff.js +0 -2
  1214. package/dist/src/session/chat-export.js +0 -2
  1215. package/dist/src/session/client-history.js +0 -2
  1216. package/dist/src/session/compaction-checkpoints.js +0 -2
  1217. package/dist/src/session/config-store.js +0 -2
  1218. package/dist/src/session/init-session-turn.js +0 -2
  1219. package/dist/src/session/lifecycle-timestamps.js +0 -2
  1220. package/dist/src/session/load-jsonl-entries.js +0 -2
  1221. package/dist/src/session/manager.js +0 -2
  1222. package/dist/src/session/patch-metadata.js +0 -2
  1223. package/dist/src/session/reset-policy.js +0 -2
  1224. package/dist/src/session/reset-triggers.js +0 -2
  1225. package/dist/src/session/reset-type.js +0 -2
  1226. package/dist/src/session/resolve-session.js +0 -2
  1227. package/dist/src/session/session-context-for-llm.js +0 -2
  1228. package/dist/src/session/session-id.js +0 -2
  1229. package/dist/src/session/session-title.js +0 -2
  1230. package/dist/src/session/session-workspace.js +0 -2
  1231. package/dist/src/session/store.js +0 -2
  1232. package/dist/src/session/stored-rows-to-file-entries.js +0 -2
  1233. package/dist/src/session/thinking-resolve.js +0 -2
  1234. package/dist/src/session/transcript-events.js +0 -2
  1235. package/dist/src/session/transcript-format.js +0 -2
  1236. package/dist/src/session/transcript-outline.js +0 -2
  1237. package/dist/src/session/transcript-stats.js +0 -2
  1238. package/dist/src/session/types.js +0 -2
  1239. package/dist/src/session/user-round-delete.js +0 -2
  1240. package/dist/src/share/share-audit.js +0 -2
  1241. package/dist/src/share/share-auto.js +0 -2
  1242. package/dist/src/share/share-config.js +0 -2
  1243. package/dist/src/share/share-landing.js +0 -2
  1244. package/dist/src/share/share-rate-limit.js +0 -2
  1245. package/dist/src/share/share-store.js +0 -2
  1246. package/dist/src/share/share-thumbnail.js +0 -2
  1247. package/dist/src/share/share-types.js +0 -2
  1248. package/dist/src/share/share-url.js +0 -2
  1249. package/dist/src/share/share-zip.js +0 -2
  1250. package/dist/src/share/site-proxy.js +0 -2
  1251. package/dist/src/share/site-share-config.js +0 -2
  1252. package/dist/src/share/site-share-router.js +0 -2
  1253. package/dist/src/share/site-share-store.js +0 -2
  1254. package/dist/src/share/site-share-types.js +0 -2
  1255. package/dist/src/share/site-static-serve.js +0 -2
  1256. package/dist/src/storage/sqlite/activity-repository.js +0 -2
  1257. package/dist/src/storage/sqlite/config-repository.js +0 -2
  1258. package/dist/src/storage/sqlite/connection.js +0 -2
  1259. package/dist/src/storage/sqlite/connector-repository.js +0 -2
  1260. package/dist/src/storage/sqlite/fts.js +0 -2
  1261. package/dist/src/storage/sqlite/knowledge-repository.js +0 -2
  1262. package/dist/src/storage/sqlite/memory-index-repository.js +0 -2
  1263. package/dist/src/storage/sqlite/memory-records-repository.js +0 -2
  1264. package/dist/src/storage/sqlite/memory-reference-consent-repository.js +0 -2
  1265. package/dist/src/storage/sqlite/migrations/discover.js +0 -2
  1266. package/dist/src/storage/sqlite/migrations/errors.js +0 -2
  1267. package/dist/src/storage/sqlite/migrations/runner.js +0 -2
  1268. package/dist/src/storage/sqlite/note-agent-context-repository.js +0 -2
  1269. package/dist/src/storage/sqlite/notes-repository.js +0 -2
  1270. package/dist/src/storage/sqlite/paths.js +0 -2
  1271. package/dist/src/storage/sqlite/row-mappers.js +0 -2
  1272. package/dist/src/storage/sqlite/schema-version.js +0 -2
  1273. package/dist/src/storage/sqlite/schema.js +0 -2
  1274. package/dist/src/storage/sqlite/session-metadata.js +0 -2
  1275. package/dist/src/storage/sqlite/session-repository.js +0 -2
  1276. package/dist/src/storage/sqlite/transaction.js +0 -2
  1277. package/dist/src/storage/sqlite/transcript-repository.js +0 -2
  1278. package/dist/src/storage/sqlite/user-profile-setup-repository.js +0 -2
  1279. package/dist/src/storage/sqlite/user-trust-repository.js +0 -2
  1280. package/dist/src/tui/backends/embedded-backend.js +0 -2
  1281. package/dist/src/tui/backends/gateway-sse-backend.js +0 -2
  1282. package/dist/src/tui/chat-history.js +0 -2
  1283. package/dist/src/tui/clipboard-image.js +0 -2
  1284. package/dist/src/tui/clipboard-text.js +0 -2
  1285. package/dist/src/tui/components/assistant-message.js +0 -2
  1286. package/dist/src/tui/components/bash-execution.js +0 -2
  1287. package/dist/src/tui/components/bash-summary.js +0 -2
  1288. package/dist/src/tui/components/branch-message-summary.js +0 -2
  1289. package/dist/src/tui/components/branch-summary.js +0 -2
  1290. package/dist/src/tui/components/chat-log.js +0 -2
  1291. package/dist/src/tui/components/compaction-summary.js +0 -2
  1292. package/dist/src/tui/components/custom-editor.js +0 -2
  1293. package/dist/src/tui/components/custom-message.js +0 -2
  1294. package/dist/src/tui/components/dynamic-border.js +0 -2
  1295. package/dist/src/tui/components/extension-dialog.js +0 -2
  1296. package/dist/src/tui/components/fuzzy-filter.js +0 -2
  1297. package/dist/src/tui/components/scoped-models-selector.js +0 -2
  1298. package/dist/src/tui/components/searchable-select-list.js +0 -2
  1299. package/dist/src/tui/components/session-selector.js +0 -2
  1300. package/dist/src/tui/components/settings-selector.js +0 -2
  1301. package/dist/src/tui/components/thinking-selector.js +0 -2
  1302. package/dist/src/tui/components/tool-execution.js +0 -2
  1303. package/dist/src/tui/components/tui-bottom-bar.js +0 -2
  1304. package/dist/src/tui/components/tui-header.js +0 -2
  1305. package/dist/src/tui/components/user-message.js +0 -2
  1306. package/dist/src/tui/components/visual-truncate.js +0 -2
  1307. package/dist/src/tui/extension-host/autocomplete.js +0 -2
  1308. package/dist/src/tui/extension-host/host.js +0 -2
  1309. package/dist/src/tui/extension-host/load-extensions.js +0 -2
  1310. package/dist/src/tui/extension-host/runtime-context.js +0 -2
  1311. package/dist/src/tui/extension-host/runtime.js +0 -2
  1312. package/dist/src/tui/extension-host/surface.js +0 -2
  1313. package/dist/src/tui/extension-host/tool-renderers.js +0 -2
  1314. package/dist/src/tui/format-tui-hotkeys.js +0 -2
  1315. package/dist/src/tui/sse-consumer.js +0 -2
  1316. package/dist/src/tui/theme/dark.js +0 -2
  1317. package/dist/src/tui/theme/light.js +0 -2
  1318. package/dist/src/tui/theme-manager.js +0 -2
  1319. package/dist/src/tui/theme.js +0 -2
  1320. package/dist/src/tui/tool-summary.js +0 -2
  1321. package/dist/src/tui/tui-agent-events.js +0 -2
  1322. package/dist/src/tui/tui-command-formatters.js +0 -2
  1323. package/dist/src/tui/tui-commands.js +0 -2
  1324. package/dist/src/tui/tui-context-usage.js +0 -2
  1325. package/dist/src/tui/tui-extension-user-message.js +0 -2
  1326. package/dist/src/tui/tui-fd-path.js +0 -2
  1327. package/dist/src/tui/tui-file-autocomplete.js +0 -2
  1328. package/dist/src/tui/tui-follow-up-queue.js +0 -2
  1329. package/dist/src/tui/tui-git-branch.js +0 -2
  1330. package/dist/src/tui/tui-keybindings-file.js +0 -2
  1331. package/dist/src/tui/tui-lifecycle.js +0 -2
  1332. package/dist/src/tui/tui-local-shell.js +0 -2
  1333. package/dist/src/tui/tui-model-picker.js +0 -2
  1334. package/dist/src/tui/tui-oauth-login.js +0 -2
  1335. package/dist/src/tui/tui-overlays.js +0 -2
  1336. package/dist/src/tui/tui-picker-overlay.js +0 -2
  1337. package/dist/src/tui/tui-run-state.js +0 -2
  1338. package/dist/src/tui/tui-run-status-format.js +0 -2
  1339. package/dist/src/tui/tui-runtime-hints.js +0 -2
  1340. package/dist/src/tui/tui-scoped-models.js +0 -2
  1341. package/dist/src/tui/tui-session-actions.js +0 -2
  1342. package/dist/src/tui/tui-session-format.js +0 -2
  1343. package/dist/src/tui/tui-session-snapshot.js +0 -2
  1344. package/dist/src/tui/tui-session-stats.js +0 -2
  1345. package/dist/src/tui/tui-settings.js +0 -2
  1346. package/dist/src/tui/tui-skills-autocomplete.js +0 -2
  1347. package/dist/src/tui/tui-startup-resources.js +0 -2
  1348. package/dist/src/tui/tui-startup-text.js +0 -2
  1349. package/dist/src/tui/tui-stdio-filter.js +0 -2
  1350. package/dist/src/tui/tui-submit.js +0 -2
  1351. package/dist/src/tui/tui-suspend.js +0 -2
  1352. package/dist/src/tui/tui-timeline-picker.js +0 -2
  1353. package/dist/src/tui/tui-timeline.js +0 -2
  1354. package/dist/src/tui/tui-tool-diff.js +0 -2
  1355. package/dist/src/tui/tui-tool-result.js +0 -2
  1356. package/dist/src/tui/tui-transcript-tree-picker.js +0 -2
  1357. package/dist/src/tui/tui-transcript-tree.js +0 -2
  1358. package/dist/src/tui/tui-types.js +0 -2
  1359. package/dist/src/tui/tui-workflow-slash.js +0 -2
  1360. package/dist/src/tui/tui.js +0 -2
  1361. package/dist/src/tui/xopc-tui-keybindings.js +0 -2
  1362. package/dist/src/tunnel/broker-client.js +0 -2
  1363. package/dist/src/tunnel/consent.js +0 -2
  1364. package/dist/src/tunnel/enable-lan-pairing.js +0 -2
  1365. package/dist/src/tunnel/env.js +0 -2
  1366. package/dist/src/tunnel/frp-subdomain-host.js +0 -2
  1367. package/dist/src/tunnel/frpc-binary.js +0 -2
  1368. package/dist/src/tunnel/frpc-config.js +0 -2
  1369. package/dist/src/tunnel/frpc-extract.js +0 -2
  1370. package/dist/src/tunnel/frpc-process.js +0 -2
  1371. package/dist/src/tunnel/gateway-lifecycle.js +0 -2
  1372. package/dist/src/tunnel/pair-context.js +0 -2
  1373. package/dist/src/tunnel/pair-url.js +0 -2
  1374. package/dist/src/tunnel/pairing-rate-limit.js +0 -2
  1375. package/dist/src/tunnel/pairing.js +0 -2
  1376. package/dist/src/tunnel/tunnel-audit.js +0 -2
  1377. package/dist/src/tunnel/tunnel-config.js +0 -2
  1378. package/dist/src/tunnel/tunnel-persist.js +0 -2
  1379. package/dist/src/tunnel/tunnel-qr.js +0 -2
  1380. package/dist/src/tunnel/tunnel-rate-limit.js +0 -2
  1381. package/dist/src/tunnel/tunnel-service.js +0 -2
  1382. package/dist/src/tunnel/tunnel-state.js +0 -2
  1383. package/dist/src/tunnel/well-known.js +0 -2
  1384. package/dist/src/user-context/config.js +0 -2
  1385. package/dist/src/user-context/import.js +0 -2
  1386. package/dist/src/user-context/owner.js +0 -2
  1387. package/dist/src/user-context/profile.js +0 -2
  1388. package/dist/src/user-context/projection.js +0 -2
  1389. package/dist/src/user-context/runtime.js +0 -2
  1390. package/dist/src/user-context/source-recommendations.js +0 -2
  1391. package/dist/src/user-context/trust-policy.js +0 -2
  1392. package/dist/src/utils/global-singleton.js +0 -2
  1393. package/dist/src/utils/helpers.js +0 -2
  1394. package/dist/src/utils/index.js +0 -2
  1395. package/dist/src/utils/is-record.js +0 -2
  1396. package/dist/src/utils/logger/audit.js +0 -2
  1397. package/dist/src/utils/logger/config.js +0 -2
  1398. package/dist/src/utils/logger/context.js +0 -2
  1399. package/dist/src/utils/logger/exporters.js +0 -2
  1400. package/dist/src/utils/logger/index.js +0 -2
  1401. package/dist/src/utils/logger/log-store.js +0 -2
  1402. package/dist/src/utils/logger/log-stream.js +0 -2
  1403. package/dist/src/utils/logger/pino-record.js +0 -2
  1404. package/dist/src/utils/logger/redact.js +0 -2
  1405. package/dist/src/utils/logger/rotation.js +0 -2
  1406. package/dist/src/utils/logger/shutdown.js +0 -2
  1407. package/dist/src/utils/logger/stats.js +0 -2
  1408. package/dist/src/utils/logger/streams.js +0 -2
  1409. package/dist/src/utils/logger/types.js +0 -2
  1410. package/dist/src/utils/logger.js +0 -2
  1411. package/dist/src/utils/redact-sensitive-url.js +0 -2
  1412. package/dist/src/utils/sanitize-log.js +0 -2
  1413. package/dist/src/utils/string-coerce.js +0 -2
  1414. package/dist/src/voice/language-profile.js +0 -2
  1415. package/dist/src/voice/local/model-files.js +0 -2
  1416. package/dist/src/voice/local/model-manager.js +0 -2
  1417. package/dist/src/voice/local/models.js +0 -2
  1418. package/dist/src/voice/local/runtime-client.js +0 -2
  1419. package/dist/src/voice/local/runtime-dispatcher.js +0 -2
  1420. package/dist/src/voice/local/runtime-worker.js +12 -4
  1421. package/dist/src/voice/local/wav.js +0 -2
  1422. package/dist/src/voice/metadata/builtin.js +0 -2
  1423. package/dist/src/voice/metadata/registry.js +0 -2
  1424. package/dist/src/voice/stt/availability.js +0 -2
  1425. package/dist/src/voice/stt/config-slice.js +0 -2
  1426. package/dist/src/voice/stt/factory.js +0 -2
  1427. package/dist/src/voice/stt/index.js +0 -2
  1428. package/dist/src/voice/stt/list-providers.js +0 -2
  1429. package/dist/src/voice/stt/mention.js +0 -2
  1430. package/dist/src/voice/stt/preflight.js +0 -2
  1431. package/dist/src/voice/stt/providers/alibaba-transcription.js +0 -2
  1432. package/dist/src/voice/stt/providers/local-transcription.js +0 -2
  1433. package/dist/src/voice/stt/providers/openai-transcription.js +0 -2
  1434. package/dist/src/voice/stt/transcribe-core.js +0 -2
  1435. package/dist/src/voice/stt/types.js +0 -2
  1436. package/dist/src/voice/tts/audio.js +0 -2
  1437. package/dist/src/voice/tts/config-slice.js +0 -2
  1438. package/dist/src/voice/tts/directives.js +0 -2
  1439. package/dist/src/voice/tts/factory.js +0 -2
  1440. package/dist/src/voice/tts/list-providers.js +0 -2
  1441. package/dist/src/voice/tts/merge-config.js +0 -2
  1442. package/dist/src/voice/tts/openai-compatible-speech.js +0 -2
  1443. package/dist/src/voice/tts/payload.js +0 -2
  1444. package/dist/src/voice/tts/preprocess.js +0 -2
  1445. package/dist/src/voice/tts/providers/alibaba-speech.js +0 -2
  1446. package/dist/src/voice/tts/providers/edge-speech.js +0 -2
  1447. package/dist/src/voice/tts/providers/minimax-speech.js +0 -2
  1448. package/dist/src/voice/tts/providers/openai-speech.js +0 -2
  1449. package/dist/src/voice/tts/sentence-boundary.js +0 -2
  1450. package/dist/src/voice/tts/service.js +0 -2
  1451. package/dist/src/voice/tts/speak-core.js +0 -2
  1452. package/dist/src/voice/tts/speech-registry.js +0 -2
  1453. package/dist/src/voice/tts/status-tracker.js +0 -2
  1454. package/dist/src/voice/tts/summarize.js +0 -2
  1455. package/dist/src/voice/tts/types.js +0 -2
  1456. package/dist/src/work-discovery/analyzer.js +0 -2
  1457. package/dist/src/work-discovery/probe.js +0 -2
  1458. package/dist/src/work-discovery/repository.js +0 -2
  1459. package/dist/src/work-discovery/service.js +0 -2
  1460. package/dist/src/work-items/agent-context.js +0 -2
  1461. package/dist/src/work-items/work-item-service.js +0 -2
  1462. package/dist/src/work-items/work-item-store.js +0 -2
  1463. package/dist/src/work-items/work-item-workflow-judge.js +0 -2
  1464. package/dist/src/workflows/authoring/workflow-draft-store.js +0 -2
  1465. package/dist/src/workflows/domain/definition-utils.js +0 -2
  1466. package/dist/src/workflows/domain/run.js +0 -2
  1467. package/dist/src/workflows/domain/schema-validation.js +0 -2
  1468. package/dist/src/workflows/domain/validation.js +0 -2
  1469. package/dist/src/workflows/draft/workflow-draft-prompt.js +0 -2
  1470. package/dist/src/workflows/draft/workflow-draft-service.js +0 -2
  1471. package/dist/src/workflows/draft/workflow-draft-validator.js +0 -2
  1472. package/dist/src/workflows/engine/projector.js +0 -2
  1473. package/dist/src/workflows/engine/workflow-engine.js +0 -2
  1474. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +0 -2
  1475. package/dist/src/workflows/runtime/graph-workflow-runtime.js +0 -2
  1476. package/dist/src/workflows/service/run-view-to-snapshot.js +0 -2
  1477. package/dist/src/workflows/service/workflow-run-service.js +1 -3
  1478. package/dist/src/workflows/service/workflow-session-bridge.js +0 -2
  1479. package/dist/src/workflows/service/workflow-session-key.js +0 -2
  1480. package/dist/src/workflows/store/event-store.js +0 -2
  1481. package/dist/src/workflows/store/paths.js +0 -2
  1482. package/dist/src/workflows/store/run-index-store.js +0 -2
  1483. package/dist/src/workflows/store/run-store.js +0 -2
  1484. package/package.json +41 -11
  1485. package/skills/creative/hatch-pet/SKILL.md +1 -0
  1486. package/dist/extensions/dashscope/src/image-generation-provider.js.map +0 -1
  1487. package/dist/extensions/demo-memory/src/index.js.map +0 -1
  1488. package/dist/extensions/fal/src/image-generation-provider.js.map +0 -1
  1489. package/dist/extensions/feishu/src/actions/message-action-handler.js.map +0 -1
  1490. package/dist/extensions/feishu/src/adapters/cli-login.js.map +0 -1
  1491. package/dist/extensions/feishu/src/adapters/gateway-setup.js.map +0 -1
  1492. package/dist/extensions/feishu/src/adapters/onboard-cli.js.map +0 -1
  1493. package/dist/extensions/feishu/src/auth/app-registration.js.map +0 -1
  1494. package/dist/extensions/feishu/src/auth/pairing.js.map +0 -1
  1495. package/dist/extensions/feishu/src/auth/paths.js.map +0 -1
  1496. package/dist/extensions/feishu/src/directory/directory-adapter.js.map +0 -1
  1497. package/dist/extensions/feishu/src/format.js.map +0 -1
  1498. package/dist/extensions/feishu/src/index.js.map +0 -1
  1499. package/dist/extensions/feishu/src/outbound/actions.js.map +0 -1
  1500. package/dist/extensions/feishu/src/outbound/media-load.js.map +0 -1
  1501. package/dist/extensions/feishu/src/outbound/outbound-adapter.js.map +0 -1
  1502. package/dist/extensions/feishu/src/pairing/feishu-pairing-prompt.js.map +0 -1
  1503. package/dist/extensions/feishu/src/pairing-config-resolver.js.map +0 -1
  1504. package/dist/extensions/feishu/src/plugin.js.map +0 -1
  1505. package/dist/extensions/feishu/src/schema/config-schema.js.map +0 -1
  1506. package/dist/extensions/feishu/src/state/accounts.js.map +0 -1
  1507. package/dist/extensions/feishu/src/state/message-bindings.js.map +0 -1
  1508. package/dist/extensions/feishu/src/state/thread-bindings.js.map +0 -1
  1509. package/dist/extensions/feishu/src/status/doctor.js.map +0 -1
  1510. package/dist/extensions/feishu/src/status/status-adapter.js.map +0 -1
  1511. package/dist/extensions/feishu/src/streaming/streaming-adapter.js.map +0 -1
  1512. package/dist/extensions/feishu/src/subagent-hooks.js.map +0 -1
  1513. package/dist/extensions/feishu/src/tools/docx/docx-batch-insert.js.map +0 -1
  1514. package/dist/extensions/feishu/src/tools/docx/docx-color-text.js.map +0 -1
  1515. package/dist/extensions/feishu/src/tools/docx/docx-table-ops.js.map +0 -1
  1516. package/dist/extensions/feishu/src/tools/tools.js.map +0 -1
  1517. package/dist/extensions/feishu/src/transport/client/client.js.map +0 -1
  1518. package/dist/extensions/feishu/src/transport/client/lark-sdk-logger.js.map +0 -1
  1519. package/dist/extensions/feishu/src/transport/reliability/dedupe.js.map +0 -1
  1520. package/dist/extensions/feishu/src/transport/reliability/inbound-pipeline.js.map +0 -1
  1521. package/dist/extensions/feishu/src/transport/socket-mode/monitor.js.map +0 -1
  1522. package/dist/extensions/feishu/src/transport/socket-mode/retry.js.map +0 -1
  1523. package/dist/extensions/feishu/src/transport/text/mentions.js.map +0 -1
  1524. package/dist/extensions/feishu/src/transport/webhook/monitor.js.map +0 -1
  1525. package/dist/extensions/feishu/src/ui/config-surface.js.map +0 -1
  1526. package/dist/extensions/feishu/src/workflow-progress.js.map +0 -1
  1527. package/dist/extensions/google/src/image-generation-provider.js.map +0 -1
  1528. package/dist/extensions/minimax/src/image-generation-provider.js.map +0 -1
  1529. package/dist/extensions/openai/src/image-generation-provider.js.map +0 -1
  1530. package/dist/extensions/telegram/src/access-control.js.map +0 -1
  1531. package/dist/extensions/telegram/src/account-manager.js.map +0 -1
  1532. package/dist/extensions/telegram/src/actions/message-actions.js.map +0 -1
  1533. package/dist/extensions/telegram/src/adapters/command-adapter.js.map +0 -1
  1534. package/dist/extensions/telegram/src/adapters/config-adapter.js.map +0 -1
  1535. package/dist/extensions/telegram/src/adapters/debounce-keys.js.map +0 -1
  1536. package/dist/extensions/telegram/src/adapters/gateway-adapter.js.map +0 -1
  1537. package/dist/extensions/telegram/src/adapters/gateway-setup.js.map +0 -1
  1538. package/dist/extensions/telegram/src/adapters/inbound-access.js.map +0 -1
  1539. package/dist/extensions/telegram/src/adapters/index.js.map +0 -1
  1540. package/dist/extensions/telegram/src/adapters/onboard-cli.js.map +0 -1
  1541. package/dist/extensions/telegram/src/adapters/outbound-adapter.js.map +0 -1
  1542. package/dist/extensions/telegram/src/adapters/security-adapter.js.map +0 -1
  1543. package/dist/extensions/telegram/src/adapters/setup-wizard.js.map +0 -1
  1544. package/dist/extensions/telegram/src/adapters/status-adapter.js.map +0 -1
  1545. package/dist/extensions/telegram/src/adapters/streaming-adapter.js.map +0 -1
  1546. package/dist/extensions/telegram/src/api-root.js.map +0 -1
  1547. package/dist/extensions/telegram/src/approval-delivery.js.map +0 -1
  1548. package/dist/extensions/telegram/src/approval-store.js.map +0 -1
  1549. package/dist/extensions/telegram/src/caption.js.map +0 -1
  1550. package/dist/extensions/telegram/src/command-handler.js.map +0 -1
  1551. package/dist/extensions/telegram/src/config-schema.js.map +0 -1
  1552. package/dist/extensions/telegram/src/conversation-id.js.map +0 -1
  1553. package/dist/extensions/telegram/src/dedupe.js.map +0 -1
  1554. package/dist/extensions/telegram/src/delivery-chat-id.js.map +0 -1
  1555. package/dist/extensions/telegram/src/doctor.js.map +0 -1
  1556. package/dist/extensions/telegram/src/draft-stream-lifecycle.js.map +0 -1
  1557. package/dist/extensions/telegram/src/draft-stream-loop.js.map +0 -1
  1558. package/dist/extensions/telegram/src/draft-stream.js.map +0 -1
  1559. package/dist/extensions/telegram/src/errors.js.map +0 -1
  1560. package/dist/extensions/telegram/src/exec-approval-handler.js.map +0 -1
  1561. package/dist/extensions/telegram/src/exec-approvals.js.map +0 -1
  1562. package/dist/extensions/telegram/src/focus-handler.js.map +0 -1
  1563. package/dist/extensions/telegram/src/format.js.map +0 -1
  1564. package/dist/extensions/telegram/src/group-config-resolver.js.map +0 -1
  1565. package/dist/extensions/telegram/src/inbound-coalescer.js.map +0 -1
  1566. package/dist/extensions/telegram/src/inbound-processor.js.map +0 -1
  1567. package/dist/extensions/telegram/src/index.js.map +0 -1
  1568. package/dist/extensions/telegram/src/inline-keyboards.js.map +0 -1
  1569. package/dist/extensions/telegram/src/network-errors.js.map +0 -1
  1570. package/dist/extensions/telegram/src/outbound-sender.js.map +0 -1
  1571. package/dist/extensions/telegram/src/pairing-config-resolver.js.map +0 -1
  1572. package/dist/extensions/telegram/src/plugin-defaults.js.map +0 -1
  1573. package/dist/extensions/telegram/src/plugin.js.map +0 -1
  1574. package/dist/extensions/telegram/src/polling-session.js.map +0 -1
  1575. package/dist/extensions/telegram/src/proxy-fetch.js.map +0 -1
  1576. package/dist/extensions/telegram/src/reactions.js.map +0 -1
  1577. package/dist/extensions/telegram/src/reply-params.js.map +0 -1
  1578. package/dist/extensions/telegram/src/routing-integration.js.map +0 -1
  1579. package/dist/extensions/telegram/src/send-options.js.map +0 -1
  1580. package/dist/extensions/telegram/src/sent-cache.js.map +0 -1
  1581. package/dist/extensions/telegram/src/startup-errors.js.map +0 -1
  1582. package/dist/extensions/telegram/src/telegram-actions.js.map +0 -1
  1583. package/dist/extensions/telegram/src/telegram-draft-errors.js.map +0 -1
  1584. package/dist/extensions/telegram/src/thread-bindings.js.map +0 -1
  1585. package/dist/extensions/telegram/src/timeout-abort.js.map +0 -1
  1586. package/dist/extensions/telegram/src/token-resolver.js.map +0 -1
  1587. package/dist/extensions/telegram/src/update-offset-store.js.map +0 -1
  1588. package/dist/extensions/telegram/src/workflow-progress.js.map +0 -1
  1589. package/dist/extensions/weixin/src/adapters/onboard-cli.js.map +0 -1
  1590. package/dist/extensions/weixin/src/api/api.js.map +0 -1
  1591. package/dist/extensions/weixin/src/api/config-cache.js.map +0 -1
  1592. package/dist/extensions/weixin/src/api/session-guard.js.map +0 -1
  1593. package/dist/extensions/weixin/src/api/types.js.map +0 -1
  1594. package/dist/extensions/weixin/src/auth/accounts.js.map +0 -1
  1595. package/dist/extensions/weixin/src/auth/login-qr.js.map +0 -1
  1596. package/dist/extensions/weixin/src/auth/pairing.js.map +0 -1
  1597. package/dist/extensions/weixin/src/auth/weixin-account-id.js.map +0 -1
  1598. package/dist/extensions/weixin/src/cdn/aes-ecb.js.map +0 -1
  1599. package/dist/extensions/weixin/src/cdn/cdn-upload.js.map +0 -1
  1600. package/dist/extensions/weixin/src/cdn/cdn-url.js.map +0 -1
  1601. package/dist/extensions/weixin/src/cdn/pic-decrypt.js.map +0 -1
  1602. package/dist/extensions/weixin/src/cdn/upload.js.map +0 -1
  1603. package/dist/extensions/weixin/src/cli/gateway-qr-login.js.map +0 -1
  1604. package/dist/extensions/weixin/src/cli/qr-login.js.map +0 -1
  1605. package/dist/extensions/weixin/src/config-schema.js.map +0 -1
  1606. package/dist/extensions/weixin/src/config-surface.js.map +0 -1
  1607. package/dist/extensions/weixin/src/delivery-to.js.map +0 -1
  1608. package/dist/extensions/weixin/src/index.js.map +0 -1
  1609. package/dist/extensions/weixin/src/media/data-url.js.map +0 -1
  1610. package/dist/extensions/weixin/src/media/media-download.js.map +0 -1
  1611. package/dist/extensions/weixin/src/media/mime.js.map +0 -1
  1612. package/dist/extensions/weixin/src/media/silk-transcode.js.map +0 -1
  1613. package/dist/extensions/weixin/src/messaging/context-token-init.js.map +0 -1
  1614. package/dist/extensions/weixin/src/messaging/debug-mode.js.map +0 -1
  1615. package/dist/extensions/weixin/src/messaging/error-notice.js.map +0 -1
  1616. package/dist/extensions/weixin/src/messaging/inbound.js.map +0 -1
  1617. package/dist/extensions/weixin/src/messaging/markdown-filter.js.map +0 -1
  1618. package/dist/extensions/weixin/src/messaging/process-message.js.map +0 -1
  1619. package/dist/extensions/weixin/src/messaging/send-media.js.map +0 -1
  1620. package/dist/extensions/weixin/src/messaging/send.js.map +0 -1
  1621. package/dist/extensions/weixin/src/messaging/slash-commands.js.map +0 -1
  1622. package/dist/extensions/weixin/src/messaging/typing-ticket-store.js.map +0 -1
  1623. package/dist/extensions/weixin/src/monitor/monitor.js.map +0 -1
  1624. package/dist/extensions/weixin/src/outbound-send.js.map +0 -1
  1625. package/dist/extensions/weixin/src/pairing-config-resolver.js.map +0 -1
  1626. package/dist/extensions/weixin/src/plugin.js.map +0 -1
  1627. package/dist/extensions/weixin/src/routing-integration.js.map +0 -1
  1628. package/dist/extensions/weixin/src/storage/state-dir.js.map +0 -1
  1629. package/dist/extensions/weixin/src/storage/sync-buf.js.map +0 -1
  1630. package/dist/extensions/weixin/src/util/logger.js.map +0 -1
  1631. package/dist/extensions/weixin/src/util/random.js.map +0 -1
  1632. package/dist/extensions/weixin/src/util/redact.js.map +0 -1
  1633. package/dist/extensions/weixin/src/workflow-progress.js.map +0 -1
  1634. package/dist/gateway/static/root/assets/channels-status-swr-CuU6ez3y.js +0 -1
  1635. package/dist/gateway/static/root/assets/desktop-pet-C6V-PHwi.js +0 -1
  1636. package/dist/gateway/static/root/assets/desktop-pet-settings-5Fcz47XQ.js +0 -1
  1637. package/dist/gateway/static/root/assets/index-Dfnl9tp_.css +0 -1
  1638. package/dist/gateway/static/root/assets/settings-advanced-gate-DwuBL834.js +0 -1
  1639. package/dist/gateway/static/root/assets/skill-reload-api-DQtZiejw.js +0 -1
  1640. package/dist/gateway/static/root/favicon-icon.svg +0 -187
  1641. package/dist/package.js.map +0 -1
  1642. package/dist/src/activity/context.js.map +0 -1
  1643. package/dist/src/activity/emitter.js.map +0 -1
  1644. package/dist/src/activity/service.js.map +0 -1
  1645. package/dist/src/agent/agent-manager.js.map +0 -1
  1646. package/dist/src/agent/agent-scope.js.map +0 -1
  1647. package/dist/src/agent/background-review/coordinator.js.map +0 -1
  1648. package/dist/src/agent/background-review/prompts.js.map +0 -1
  1649. package/dist/src/agent/background-review/run-background-review.js.map +0 -1
  1650. package/dist/src/agent/background-review/settings.js.map +0 -1
  1651. package/dist/src/agent/bootstrap/bootstrap-cache.js.map +0 -1
  1652. package/dist/src/agent/bootstrap/bootstrap-context.js.map +0 -1
  1653. package/dist/src/agent/bootstrap/bootstrap-files.js.map +0 -1
  1654. package/dist/src/agent/bootstrap/filter-bootstrap-files.js.map +0 -1
  1655. package/dist/src/agent/bootstrap/load-bootstrap-files.js.map +0 -1
  1656. package/dist/src/agent/bootstrap/project-agents-context.js.map +0 -1
  1657. package/dist/src/agent/capabilities/definitions.js.map +0 -1
  1658. package/dist/src/agent/capabilities/registry.js.map +0 -1
  1659. package/dist/src/agent/child-agent-factory.js.map +0 -1
  1660. package/dist/src/agent/client-error-format.js.map +0 -1
  1661. package/dist/src/agent/code-intelligence/binary.js.map +0 -1
  1662. package/dist/src/agent/code-intelligence/runtime.js.map +0 -1
  1663. package/dist/src/agent/code-intelligence/tools.js.map +0 -1
  1664. package/dist/src/agent/coding/turn-diff-tracker.js.map +0 -1
  1665. package/dist/src/agent/context/expand-at-file-mentions.js.map +0 -1
  1666. package/dist/src/agent/context/project-context.js.map +0 -1
  1667. package/dist/src/agent/context/workspace-seed.js.map +0 -1
  1668. package/dist/src/agent/context/workspace-state.js.map +0 -1
  1669. package/dist/src/agent/context/workspace.js.map +0 -1
  1670. package/dist/src/agent/embedded/run-for-session.js.map +0 -1
  1671. package/dist/src/agent/embedded/run-turn.js.map +0 -1
  1672. package/dist/src/agent/embedded/runs.js.map +0 -1
  1673. package/dist/src/agent/embedded/session-manager-init.js.map +0 -1
  1674. package/dist/src/agent/embedded/session-runner.js.map +0 -1
  1675. package/dist/src/agent/embedded/session-tool-result-guard.js.map +0 -1
  1676. package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js.map +0 -1
  1677. package/dist/src/agent/embedded/subscribe-session.js.map +0 -1
  1678. package/dist/src/agent/embedded/system-prompt-override.js.map +0 -1
  1679. package/dist/src/agent/embedded/tool-result-context-guard.js.map +0 -1
  1680. package/dist/src/agent/embedded/tool-result-truncation.js.map +0 -1
  1681. package/dist/src/agent/embedded/xopc-auth-storage.js.map +0 -1
  1682. package/dist/src/agent/embedded/xopc-stream-bridge.js.map +0 -1
  1683. package/dist/src/agent/embedded/xopc-tools-bridge.js.map +0 -1
  1684. package/dist/src/agent/failover-error.js.map +0 -1
  1685. package/dist/src/agent/fallback/candidates.js.map +0 -1
  1686. package/dist/src/agent/fallback/reason.js.map +0 -1
  1687. package/dist/src/agent/feedback/feedback-coordinator.js.map +0 -1
  1688. package/dist/src/agent/goals/checklist-judge.js.map +0 -1
  1689. package/dist/src/agent/goals/checklist-types.js.map +0 -1
  1690. package/dist/src/agent/goals/evaluate-turn.js.map +0 -1
  1691. package/dist/src/agent/goals/goal-locale.js.map +0 -1
  1692. package/dist/src/agent/goals/judge.js.map +0 -1
  1693. package/dist/src/agent/goals/persistent-goal-service.js.map +0 -1
  1694. package/dist/src/agent/goals/post-turn.js.map +0 -1
  1695. package/dist/src/agent/goals/state.js.map +0 -1
  1696. package/dist/src/agent/image/generation/bundled-registry.js.map +0 -1
  1697. package/dist/src/agent/image/generation/bundled.js.map +0 -1
  1698. package/dist/src/agent/image/generation/image-assets.js.map +0 -1
  1699. package/dist/src/agent/image/generation/model-ref.js.map +0 -1
  1700. package/dist/src/agent/image/generation/normalization.js.map +0 -1
  1701. package/dist/src/agent/image/generation/openai-compatible-image-provider.js.map +0 -1
  1702. package/dist/src/agent/image/generation/provider-registry.js.map +0 -1
  1703. package/dist/src/agent/image/generation/runtime.js.map +0 -1
  1704. package/dist/src/agent/image/image-helpers.js.map +0 -1
  1705. package/dist/src/agent/image/image-model-fallback.js.map +0 -1
  1706. package/dist/src/agent/image/inbound-image-handling.js.map +0 -1
  1707. package/dist/src/agent/image/load-image-media.js.map +0 -1
  1708. package/dist/src/agent/image/tool-model-config.js.map +0 -1
  1709. package/dist/src/agent/image/understanding/pi-ai-provider.js.map +0 -1
  1710. package/dist/src/agent/image/understanding/provider-registry.js.map +0 -1
  1711. package/dist/src/agent/image/understanding/runtime.js.map +0 -1
  1712. package/dist/src/agent/image/vision-detection.js.map +0 -1
  1713. package/dist/src/agent/inbound/attachment-pipeline.js.map +0 -1
  1714. package/dist/src/agent/inbound/inbound-loop.js.map +0 -1
  1715. package/dist/src/agent/inbound/turn-dispatcher.js.map +0 -1
  1716. package/dist/src/agent/ipc/bus.js.map +0 -1
  1717. package/dist/src/agent/ipc/inbox.js.map +0 -1
  1718. package/dist/src/agent/ipc/socket.js.map +0 -1
  1719. package/dist/src/agent/ipc/types.js.map +0 -1
  1720. package/dist/src/agent/lifecycle/handlers/compaction.js.map +0 -1
  1721. package/dist/src/agent/lifecycle/hook-handler.js.map +0 -1
  1722. package/dist/src/agent/lifecycle/manager.js.map +0 -1
  1723. package/dist/src/agent/lifecycle/progress.js.map +0 -1
  1724. package/dist/src/agent/lifecycle/timeout-wrapper.js.map +0 -1
  1725. package/dist/src/agent/lifecycle/typing.js.map +0 -1
  1726. package/dist/src/agent/mcp/bundle-mcp-config.js.map +0 -1
  1727. package/dist/src/agent/mcp/bundle-mcp-materialize.js.map +0 -1
  1728. package/dist/src/agent/mcp/bundle-mcp-names.js.map +0 -1
  1729. package/dist/src/agent/mcp/bundle-mcp-policy.js.map +0 -1
  1730. package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +0 -1
  1731. package/dist/src/agent/mcp/embedded-mcp.js.map +0 -1
  1732. package/dist/src/agent/mcp/mcp-config-shared.js.map +0 -1
  1733. package/dist/src/agent/mcp/mcp-http.js.map +0 -1
  1734. package/dist/src/agent/mcp/mcp-stdio-transport.js.map +0 -1
  1735. package/dist/src/agent/mcp/mcp-stdio.js.map +0 -1
  1736. package/dist/src/agent/mcp/mcp-tool-meta.js.map +0 -1
  1737. package/dist/src/agent/mcp/mcp-transport-config.js.map +0 -1
  1738. package/dist/src/agent/mcp/mcp-transport.js.map +0 -1
  1739. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js.map +0 -1
  1740. package/dist/src/agent/media-generation/model-ref.js.map +0 -1
  1741. package/dist/src/agent/media-generation/normalization.types.js.map +0 -1
  1742. package/dist/src/agent/media-generation/runtime-shared.js.map +0 -1
  1743. package/dist/src/agent/memory/agent-message-access.js.map +0 -1
  1744. package/dist/src/agent/memory/builtin-memory-store.js.map +0 -1
  1745. package/dist/src/agent/memory/builtin-provider.js.map +0 -1
  1746. package/dist/src/agent/memory/compaction.js.map +0 -1
  1747. package/dist/src/agent/memory/context/planner.js.map +0 -1
  1748. package/dist/src/agent/memory/context-fence.js.map +0 -1
  1749. package/dist/src/agent/memory/create-memory-manager.js.map +0 -1
  1750. package/dist/src/agent/memory/dreaming/config.js.map +0 -1
  1751. package/dist/src/agent/memory/dreaming/constants.js.map +0 -1
  1752. package/dist/src/agent/memory/dreaming/deep-promotion.js.map +0 -1
  1753. package/dist/src/agent/memory/dreaming/events.js.map +0 -1
  1754. package/dist/src/agent/memory/dreaming/last-run.js.map +0 -1
  1755. package/dist/src/agent/memory/dreaming/light-sweep.js.map +0 -1
  1756. package/dist/src/agent/memory/dreaming/preview.js.map +0 -1
  1757. package/dist/src/agent/memory/dreaming/promotion-lifecycle.js.map +0 -1
  1758. package/dist/src/agent/memory/dreaming/rem-patterns.js.map +0 -1
  1759. package/dist/src/agent/memory/dreaming/scope.js.map +0 -1
  1760. package/dist/src/agent/memory/dreaming/short-term-store.js.map +0 -1
  1761. package/dist/src/agent/memory/dreaming/utils.js.map +0 -1
  1762. package/dist/src/agent/memory/lifecycle.js.map +0 -1
  1763. package/dist/src/agent/memory/manager.js.map +0 -1
  1764. package/dist/src/agent/memory/memory-config.js.map +0 -1
  1765. package/dist/src/agent/memory/message-sanitizer.js.map +0 -1
  1766. package/dist/src/agent/memory/plugin-discovery.js.map +0 -1
  1767. package/dist/src/agent/memory/sensitivity.js.map +0 -1
  1768. package/dist/src/agent/memory/source-origin.js.map +0 -1
  1769. package/dist/src/agent/memory/stub-memory-provider.js.map +0 -1
  1770. package/dist/src/agent/memory/summary-generator.js.map +0 -1
  1771. package/dist/src/agent/memory/understanding/correction.js.map +0 -1
  1772. package/dist/src/agent/memory/understanding/quality.js.map +0 -1
  1773. package/dist/src/agent/memory/understanding/service.js.map +0 -1
  1774. package/dist/src/agent/memory/user-context-coordinator.js.map +0 -1
  1775. package/dist/src/agent/memory/user-message-text.js.map +0 -1
  1776. package/dist/src/agent/memory/window.js.map +0 -1
  1777. package/dist/src/agent/messaging/command-handler.js.map +0 -1
  1778. package/dist/src/agent/messaging/message-router.js.map +0 -1
  1779. package/dist/src/agent/messaging/outbound-coordinator.js.map +0 -1
  1780. package/dist/src/agent/messaging/stream-manager.js.map +0 -1
  1781. package/dist/src/agent/middleware/context.js.map +0 -1
  1782. package/dist/src/agent/middleware/self-verify.js.map +0 -1
  1783. package/dist/src/agent/models/manager.js.map +0 -1
  1784. package/dist/src/agent/models/request-limiter.js.map +0 -1
  1785. package/dist/src/agent/models/selection.js.map +0 -1
  1786. package/dist/src/agent/orchestration/agent-event-handler.js.map +0 -1
  1787. package/dist/src/agent/orchestration/agent-orchestrator.js.map +0 -1
  1788. package/dist/src/agent/orchestration/llm-turn-retry.js.map +0 -1
  1789. package/dist/src/agent/orchestration/loop-guard.js.map +0 -1
  1790. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js.map +0 -1
  1791. package/dist/src/agent/prompt/cache-boundary.js.map +0 -1
  1792. package/dist/src/agent/prompt/memory/index.js.map +0 -1
  1793. package/dist/src/agent/prompt/safety.js.map +0 -1
  1794. package/dist/src/agent/prompt/sanitize-for-prompt.js.map +0 -1
  1795. package/dist/src/agent/prompt/sections/behavior.js.map +0 -1
  1796. package/dist/src/agent/prompt/sections/memory-skills.js.map +0 -1
  1797. package/dist/src/agent/prompt/sections/messaging-runtime.js.map +0 -1
  1798. package/dist/src/agent/prompt/sections/project-context.js.map +0 -1
  1799. package/dist/src/agent/prompt/sections/tooling.js.map +0 -1
  1800. package/dist/src/agent/prompt/sections/workspace-runtime.js.map +0 -1
  1801. package/dist/src/agent/prompt/service-prompt-builder.js.map +0 -1
  1802. package/dist/src/agent/prompt/subagent-context.js.map +0 -1
  1803. package/dist/src/agent/prompt/system-prompt-params.js.map +0 -1
  1804. package/dist/src/agent/prompt/system-prompt.js.map +0 -1
  1805. package/dist/src/agent/prompt/system-reminder.js.map +0 -1
  1806. package/dist/src/agent/reply/apply-turn-user-enrichment.js.map +0 -1
  1807. package/dist/src/agent/reply/post-compaction-context.js.map +0 -1
  1808. package/dist/src/agent/reply/startup-context.js.map +0 -1
  1809. package/dist/src/agent/reply/workspace-boundary-read.js.map +0 -1
  1810. package/dist/src/agent/sandbox/command-validator.js.map +0 -1
  1811. package/dist/src/agent/sandbox/exec-policy.js.map +0 -1
  1812. package/dist/src/agent/sandbox/path-policy.js.map +0 -1
  1813. package/dist/src/agent/sandbox/sanitize-env-vars.js.map +0 -1
  1814. package/dist/src/agent/sandbox/types.js.map +0 -1
  1815. package/dist/src/agent/service/async-queue.js.map +0 -1
  1816. package/dist/src/agent/service/btw-query.js.map +0 -1
  1817. package/dist/src/agent/service/build-direct-message-content.js.map +0 -1
  1818. package/dist/src/agent/service/direct-turn-helpers.js.map +0 -1
  1819. package/dist/src/agent/service/parse-outbound-session-key.js.map +0 -1
  1820. package/dist/src/agent/service/process-direct-one-shot.js.map +0 -1
  1821. package/dist/src/agent/service/process-direct-streaming.js.map +0 -1
  1822. package/dist/src/agent/service/session-context-report.js.map +0 -1
  1823. package/dist/src/agent/service/webchat-tts.js.map +0 -1
  1824. package/dist/src/agent/service-inbound-utils.js.map +0 -1
  1825. package/dist/src/agent/service.js.map +0 -1
  1826. package/dist/src/agent/session/session-config-service.js.map +0 -1
  1827. package/dist/src/agent/session/session-context.js.map +0 -1
  1828. package/dist/src/agent/session/session-hydrator.js.map +0 -1
  1829. package/dist/src/agent/session/session-inspector.js.map +0 -1
  1830. package/dist/src/agent/session/session-lifecycle.js.map +0 -1
  1831. package/dist/src/agent/session/session-state-bag.js.map +0 -1
  1832. package/dist/src/agent/session/tracker.js.map +0 -1
  1833. package/dist/src/agent/skills/config.js.map +0 -1
  1834. package/dist/src/agent/skills/filesystem-watcher.js.map +0 -1
  1835. package/dist/src/agent/skills/format-skills-prompt.js.map +0 -1
  1836. package/dist/src/agent/skills/hub-hash.js.map +0 -1
  1837. package/dist/src/agent/skills/hub-lock.js.map +0 -1
  1838. package/dist/src/agent/skills/hub-pull.js.map +0 -1
  1839. package/dist/src/agent/skills/index.js.map +0 -1
  1840. package/dist/src/agent/skills/install-target.js.map +0 -1
  1841. package/dist/src/agent/skills/installer.js.map +0 -1
  1842. package/dist/src/agent/skills/managed-store.js.map +0 -1
  1843. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js.map +0 -1
  1844. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +0 -1
  1845. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js.map +0 -1
  1846. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js.map +0 -1
  1847. package/dist/src/agent/skills/marketplace/marketplace-category-order.js.map +0 -1
  1848. package/dist/src/agent/skills/marketplace/registry.js.map +0 -1
  1849. package/dist/src/agent/skills/marketplace/resolve-adapter.js.map +0 -1
  1850. package/dist/src/agent/skills/parse-skill-metadata.js.map +0 -1
  1851. package/dist/src/agent/skills/required-env-vars.js.map +0 -1
  1852. package/dist/src/agent/skills/scanner.js.map +0 -1
  1853. package/dist/src/agent/skills/skill-manage-ops.js.map +0 -1
  1854. package/dist/src/agent/skills/skill-manager.js.map +0 -1
  1855. package/dist/src/agent/skills/skill-markdown-preview-from-raw.js.map +0 -1
  1856. package/dist/src/agent/skills/skill-tool-gating.js.map +0 -1
  1857. package/dist/src/agent/skills/skill-view-path.js.map +0 -1
  1858. package/dist/src/agent/skills/skills-marketplace.js.map +0 -1
  1859. package/dist/src/agent/skills/test-framework.js.map +0 -1
  1860. package/dist/src/agent/skills/watcher.js.map +0 -1
  1861. package/dist/src/agent/skills/workspace-skills-dir.js.map +0 -1
  1862. package/dist/src/agent/source-context/injector.js.map +0 -1
  1863. package/dist/src/agent/source-context/types.js.map +0 -1
  1864. package/dist/src/agent/starter-agents.js.map +0 -1
  1865. package/dist/src/agent/streaming/reasoning-visibility-sse.js.map +0 -1
  1866. package/dist/src/agent/tool-manuals/browser.js.map +0 -1
  1867. package/dist/src/agent/tool-manuals/index.js.map +0 -1
  1868. package/dist/src/agent/tool-manuals/xopc-use.js.map +0 -1
  1869. package/dist/src/agent/tools/apply-patch.js.map +0 -1
  1870. package/dist/src/agent/tools/automation-tool.js.map +0 -1
  1871. package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +0 -1
  1872. package/dist/src/agent/tools/browser/tool/schemas.js.map +0 -1
  1873. package/dist/src/agent/tools/chain-tracker.js.map +0 -1
  1874. package/dist/src/agent/tools/clarify-tool.js.map +0 -1
  1875. package/dist/src/agent/tools/cli-clarify.js.map +0 -1
  1876. package/dist/src/agent/tools/communication.js.map +0 -1
  1877. package/dist/src/agent/tools/composio-tool.js.map +0 -1
  1878. package/dist/src/agent/tools/concurrency.js.map +0 -1
  1879. package/dist/src/agent/tools/create-share-tool.js.map +0 -1
  1880. package/dist/src/agent/tools/curated-memory-tool.js.map +0 -1
  1881. package/dist/src/agent/tools/delegate-tool.js.map +0 -1
  1882. package/dist/src/agent/tools/desktop-pet-tool.js.map +0 -1
  1883. package/dist/src/agent/tools/dreaming-tool.js.map +0 -1
  1884. package/dist/src/agent/tools/edit-diff.js.map +0 -1
  1885. package/dist/src/agent/tools/error-pattern-matcher.js.map +0 -1
  1886. package/dist/src/agent/tools/error-tracker.js.map +0 -1
  1887. package/dist/src/agent/tools/exec-command.js.map +0 -1
  1888. package/dist/src/agent/tools/execute-code-tool.js.map +0 -1
  1889. package/dist/src/agent/tools/executor.js.map +0 -1
  1890. package/dist/src/agent/tools/factory.js.map +0 -1
  1891. package/dist/src/agent/tools/find.js.map +0 -1
  1892. package/dist/src/agent/tools/goal-evidence-recorder.js.map +0 -1
  1893. package/dist/src/agent/tools/goal-tool.js.map +0 -1
  1894. package/dist/src/agent/tools/grep.js.map +0 -1
  1895. package/dist/src/agent/tools/image-generate-tool.js.map +0 -1
  1896. package/dist/src/agent/tools/image-tool.js.map +0 -1
  1897. package/dist/src/agent/tools/list-dir.js.map +0 -1
  1898. package/dist/src/agent/tools/media-read-tool.js.map +0 -1
  1899. package/dist/src/agent/tools/memory-tool.js.map +0 -1
  1900. package/dist/src/agent/tools/metadata.js.map +0 -1
  1901. package/dist/src/agent/tools/read.js.map +0 -1
  1902. package/dist/src/agent/tools/search/http.js.map +0 -1
  1903. package/dist/src/agent/tools/search/providers/bing-api.js.map +0 -1
  1904. package/dist/src/agent/tools/search/providers/bing-html.js.map +0 -1
  1905. package/dist/src/agent/tools/search/providers/brave.js.map +0 -1
  1906. package/dist/src/agent/tools/search/providers/duckduckgo-html.js.map +0 -1
  1907. package/dist/src/agent/tools/search/providers/searxng.js.map +0 -1
  1908. package/dist/src/agent/tools/search/providers/tavily.js.map +0 -1
  1909. package/dist/src/agent/tools/search/region.js.map +0 -1
  1910. package/dist/src/agent/tools/search/registry.js.map +0 -1
  1911. package/dist/src/agent/tools/search/resolve-config.js.map +0 -1
  1912. package/dist/src/agent/tools/send-media.js.map +0 -1
  1913. package/dist/src/agent/tools/session-search-tool.js.map +0 -1
  1914. package/dist/src/agent/tools/session-status-tool.js.map +0 -1
  1915. package/dist/src/agent/tools/skill-install-tool.js.map +0 -1
  1916. package/dist/src/agent/tools/skill-manage-tool.js.map +0 -1
  1917. package/dist/src/agent/tools/skills-tools.js.map +0 -1
  1918. package/dist/src/agent/tools/structured-output.js.map +0 -1
  1919. package/dist/src/agent/tools/todo-tool.js.map +0 -1
  1920. package/dist/src/agent/tools/tool-manual-tool.js.map +0 -1
  1921. package/dist/src/agent/tools/tool-paths.js.map +0 -1
  1922. package/dist/src/agent/tools/truncate.js.map +0 -1
  1923. package/dist/src/agent/tools/tts-tool.js.map +0 -1
  1924. package/dist/src/agent/tools/update-plan-tool.js.map +0 -1
  1925. package/dist/src/agent/tools/url-safety.js.map +0 -1
  1926. package/dist/src/agent/tools/usage-analyzer.js.map +0 -1
  1927. package/dist/src/agent/tools/web-extract.js.map +0 -1
  1928. package/dist/src/agent/tools/web.js.map +0 -1
  1929. package/dist/src/agent/tools/workflow-tool.js.map +0 -1
  1930. package/dist/src/agent/tools/write.js.map +0 -1
  1931. package/dist/src/agent/tools/xopc-use-tool.js.map +0 -1
  1932. package/dist/src/agent/transcript/google-api.js.map +0 -1
  1933. package/dist/src/agent/transcript/model-selection.js.map +0 -1
  1934. package/dist/src/agent/transcript/provider-capabilities.js.map +0 -1
  1935. package/dist/src/agent/transcript/session-transcript-repair.js.map +0 -1
  1936. package/dist/src/agent/transcript/strip-tool-messages.js.map +0 -1
  1937. package/dist/src/agent/transcript/thinking-types.js.map +0 -1
  1938. package/dist/src/agent/transcript/thinking.js.map +0 -1
  1939. package/dist/src/agent/transcript/tool-call-id.js.map +0 -1
  1940. package/dist/src/agent/transcript/transcript-hygiene.js.map +0 -1
  1941. package/dist/src/agent/transcript/transcript-policy.js.map +0 -1
  1942. package/dist/src/agent/workflow/agent-progress.js.map +0 -1
  1943. package/dist/src/agent/workflow/builtins/index.js.map +0 -1
  1944. package/dist/src/agent/workflow/catalog.js.map +0 -1
  1945. package/dist/src/agent/workflow/progress-broker.js.map +0 -1
  1946. package/dist/src/agent/workflow/snapshot-empty.js.map +0 -1
  1947. package/dist/src/agent/workflow/snapshot.js.map +0 -1
  1948. package/dist/src/agent/workflow/step-labels.js.map +0 -1
  1949. package/dist/src/agent/workflow/structured-output-tool.js.map +0 -1
  1950. package/dist/src/agent/workflow/subagent-runner.js.map +0 -1
  1951. package/dist/src/agent/workflow/workflow-child-tools.js.map +0 -1
  1952. package/dist/src/agent/workspace-runtime/registry.js.map +0 -1
  1953. package/dist/src/agent-manifest/index.js.map +0 -1
  1954. package/dist/src/agent-manifest/preset-chain.js.map +0 -1
  1955. package/dist/src/agent-manifest/prompt.js.map +0 -1
  1956. package/dist/src/agent-manifest/resolver.js.map +0 -1
  1957. package/dist/src/agent-manifest/schema.js.map +0 -1
  1958. package/dist/src/agent-manifest/validator.js.map +0 -1
  1959. package/dist/src/agent-runtime/boundary-guard.js.map +0 -1
  1960. package/dist/src/agent-runtime/memory-runtime.js.map +0 -1
  1961. package/dist/src/agent-runtime/model-router.js.map +0 -1
  1962. package/dist/src/agent-runtime/run-trace.js.map +0 -1
  1963. package/dist/src/agent-runtime/runtime-profile.js.map +0 -1
  1964. package/dist/src/agent-runtime/tool-registry.js.map +0 -1
  1965. package/dist/src/agent-runtime/workflow-runtime.js.map +0 -1
  1966. package/dist/src/ai-assist/text-assist.js.map +0 -1
  1967. package/dist/src/auth/credentials.js.map +0 -1
  1968. package/dist/src/auth/index.js.map +0 -1
  1969. package/dist/src/auth/oauth/anthropic.js.map +0 -1
  1970. package/dist/src/auth/oauth/github-copilot.js.map +0 -1
  1971. package/dist/src/auth/oauth/google-oauth/google-antigravity.js.map +0 -1
  1972. package/dist/src/auth/oauth/google-oauth/google-gemini-cli.js.map +0 -1
  1973. package/dist/src/auth/oauth/google-oauth/oauth-page.js.map +0 -1
  1974. package/dist/src/auth/oauth/google-oauth/pkce.js.map +0 -1
  1975. package/dist/src/auth/oauth/kimi-coding.js.map +0 -1
  1976. package/dist/src/auth/oauth/minimax-cn.js.map +0 -1
  1977. package/dist/src/auth/oauth/minimax.js.map +0 -1
  1978. package/dist/src/auth/oauth/openai-codex.js.map +0 -1
  1979. package/dist/src/auth/oauth/pkce.js.map +0 -1
  1980. package/dist/src/auth/profiles/oauth.js.map +0 -1
  1981. package/dist/src/auth/profiles/order.js.map +0 -1
  1982. package/dist/src/auth/profiles/profiles.js.map +0 -1
  1983. package/dist/src/auth/profiles/store.js.map +0 -1
  1984. package/dist/src/auth/sync-provider-auth.js.map +0 -1
  1985. package/dist/src/automations/api/routes.js.map +0 -1
  1986. package/dist/src/automations/domain/schedule.js.map +0 -1
  1987. package/dist/src/automations/domain/validation.js.map +0 -1
  1988. package/dist/src/automations/draft/automation-draft-prompt.js.map +0 -1
  1989. package/dist/src/automations/draft/automation-draft-service.js.map +0 -1
  1990. package/dist/src/automations/draft/automation-draft-validator.js.map +0 -1
  1991. package/dist/src/automations/product-events.js.map +0 -1
  1992. package/dist/src/automations/service/action-executor.js.map +0 -1
  1993. package/dist/src/automations/service/automation-service.js.map +0 -1
  1994. package/dist/src/automations/storage/automation-repository.js.map +0 -1
  1995. package/dist/src/automations/storage/automation-run-repository.js.map +0 -1
  1996. package/dist/src/browser/actions/extension-registry-bridge.js.map +0 -1
  1997. package/dist/src/browser/actions/registry.js.map +0 -1
  1998. package/dist/src/browser/backend-from-config.js.map +0 -1
  1999. package/dist/src/browser/browser-command-timeout.js.map +0 -1
  2000. package/dist/src/browser/cache-dir-policy.js.map +0 -1
  2001. package/dist/src/browser/cdp-local-launcher.js.map +0 -1
  2002. package/dist/src/browser/cdp-supervisor.js.map +0 -1
  2003. package/dist/src/browser/free-port.js.map +0 -1
  2004. package/dist/src/browser/humanize.js.map +0 -1
  2005. package/dist/src/browser/install-lock.js.map +0 -1
  2006. package/dist/src/browser/manager.js.map +0 -1
  2007. package/dist/src/browser/pipeline/output.js.map +0 -1
  2008. package/dist/src/browser/pipeline/runner.js.map +0 -1
  2009. package/dist/src/browser/pipeline/schema.js.map +0 -1
  2010. package/dist/src/browser/pipeline/source.js.map +0 -1
  2011. package/dist/src/browser/pipeline/template.js.map +0 -1
  2012. package/dist/src/browser/providers/browser-ext-install.js.map +0 -1
  2013. package/dist/src/browser/providers/browser-use.js.map +0 -1
  2014. package/dist/src/browser/providers/browserbase.js.map +0 -1
  2015. package/dist/src/browser/providers/cloakbrowser.js.map +0 -1
  2016. package/dist/src/browser/providers/extension-ws-acquire.js.map +0 -1
  2017. package/dist/src/browser/providers/extension.js.map +0 -1
  2018. package/dist/src/browser/providers/playwright-doctor.js.map +0 -1
  2019. package/dist/src/browser/providers/playwright-install.js.map +0 -1
  2020. package/dist/src/browser/readiness.js.map +0 -1
  2021. package/dist/src/browser/schemas.js.map +0 -1
  2022. package/dist/src/browser/session-lifecycle.js.map +0 -1
  2023. package/dist/src/browser/snapshot-helpers.js.map +0 -1
  2024. package/dist/src/browser/stealth.js.map +0 -1
  2025. package/dist/src/browser/url-policy.js.map +0 -1
  2026. package/dist/src/capabilities/store-connector.js.map +0 -1
  2027. package/dist/src/channels/attachments/attachment-classifiers.js.map +0 -1
  2028. package/dist/src/channels/attachments/inbound-persist.js.map +0 -1
  2029. package/dist/src/channels/attachments/inbound-types.js.map +0 -1
  2030. package/dist/src/channels/attachments/outbound-tts-persist.js.map +0 -1
  2031. package/dist/src/channels/attachments/voice-stt-webchat.js.map +0 -1
  2032. package/dist/src/channels/catalog/channel-catalog-service.js.map +0 -1
  2033. package/dist/src/channels/config-helpers.js.map +0 -1
  2034. package/dist/src/channels/envelope-timestamp.js.map +0 -1
  2035. package/dist/src/channels/exec-approval-runtime.js.map +0 -1
  2036. package/dist/src/channels/health-monitor.js.map +0 -1
  2037. package/dist/src/channels/heartbeat-scheduler.js.map +0 -1
  2038. package/dist/src/channels/internal-outbound.js.map +0 -1
  2039. package/dist/src/channels/lifecycle-supervisor.js.map +0 -1
  2040. package/dist/src/channels/manager.js.map +0 -1
  2041. package/dist/src/channels/media.js.map +0 -1
  2042. package/dist/src/channels/outbound/deliver.js.map +0 -1
  2043. package/dist/src/channels/outbound/normalize.js.map +0 -1
  2044. package/dist/src/channels/outbound/persist-store.js.map +0 -1
  2045. package/dist/src/channels/outbound/queue.js.map +0 -1
  2046. package/dist/src/channels/outbound-sender.js.map +0 -1
  2047. package/dist/src/channels/pairing/allow-from-file.js.map +0 -1
  2048. package/dist/src/channels/pairing/approve-cli.js.map +0 -1
  2049. package/dist/src/channels/pairing/pairing-challenge.js.map +0 -1
  2050. package/dist/src/channels/pairing/pairing-constants.js.map +0 -1
  2051. package/dist/src/channels/pairing/pairing-events.js.map +0 -1
  2052. package/dist/src/channels/pairing/pairing-messages.js.map +0 -1
  2053. package/dist/src/channels/pairing/pairing-service.js.map +0 -1
  2054. package/dist/src/channels/pairing/pairing-store-adapter.js.map +0 -1
  2055. package/dist/src/channels/pairing/pairing-store.js.map +0 -1
  2056. package/dist/src/channels/pairing/paths.js.map +0 -1
  2057. package/dist/src/channels/pairing/preseed-allow-from.js.map +0 -1
  2058. package/dist/src/channels/pipeline.js.map +0 -1
  2059. package/dist/src/channels/plugin-registry.js.map +0 -1
  2060. package/dist/src/channels/plugins/registry.js.map +0 -1
  2061. package/dist/src/channels/restart-policy.js.map +0 -1
  2062. package/dist/src/channels/security-helpers.js.map +0 -1
  2063. package/dist/src/channels/security.js.map +0 -1
  2064. package/dist/src/channels/setup-wizard-discovery.js.map +0 -1
  2065. package/dist/src/chat-commands/agent-edit.js.map +0 -1
  2066. package/dist/src/chat-commands/builtins/config.js.map +0 -1
  2067. package/dist/src/chat-commands/builtins/context.js.map +0 -1
  2068. package/dist/src/chat-commands/builtins/goal.js.map +0 -1
  2069. package/dist/src/chat-commands/builtins/model.js.map +0 -1
  2070. package/dist/src/chat-commands/builtins/review.js.map +0 -1
  2071. package/dist/src/chat-commands/builtins/session.js.map +0 -1
  2072. package/dist/src/chat-commands/builtins/skill.js.map +0 -1
  2073. package/dist/src/chat-commands/builtins/subgoal.js.map +0 -1
  2074. package/dist/src/chat-commands/builtins/system.js.map +0 -1
  2075. package/dist/src/chat-commands/builtins/thinking.js.map +0 -1
  2076. package/dist/src/chat-commands/builtins/tts.js.map +0 -1
  2077. package/dist/src/chat-commands/builtins/workflow.js.map +0 -1
  2078. package/dist/src/chat-commands/command-parse.js.map +0 -1
  2079. package/dist/src/chat-commands/config-paths.js.map +0 -1
  2080. package/dist/src/chat-commands/config-value.js.map +0 -1
  2081. package/dist/src/chat-commands/context.js.map +0 -1
  2082. package/dist/src/chat-commands/format-output.js.map +0 -1
  2083. package/dist/src/chat-commands/index.js.map +0 -1
  2084. package/dist/src/chat-commands/processor.js.map +0 -1
  2085. package/dist/src/chat-commands/registry.js.map +0 -1
  2086. package/dist/src/chat-commands/session-key.js.map +0 -1
  2087. package/dist/src/cli/argv-invocation.js.map +0 -1
  2088. package/dist/src/cli/argv.js.map +0 -1
  2089. package/dist/src/cli/bin.js.map +0 -1
  2090. package/dist/src/cli/cli-log-level-preset.js.map +0 -1
  2091. package/dist/src/cli/command-catalog.js.map +0 -1
  2092. package/dist/src/cli/command-loaders.js.map +0 -1
  2093. package/dist/src/cli/command-manifest.js.map +0 -1
  2094. package/dist/src/cli/command-path-matches.js.map +0 -1
  2095. package/dist/src/cli/command-path-policy.js.map +0 -1
  2096. package/dist/src/cli/command-startup-policy.js.map +0 -1
  2097. package/dist/src/cli/commands/agent/interactive.js.map +0 -1
  2098. package/dist/src/cli/commands/agent/sessions.js.map +0 -1
  2099. package/dist/src/cli/commands/agent/stream-renderer.js.map +0 -1
  2100. package/dist/src/cli/commands/agent.js.map +0 -1
  2101. package/dist/src/cli/commands/agents.js.map +0 -1
  2102. package/dist/src/cli/commands/auth.js.map +0 -1
  2103. package/dist/src/cli/commands/browser-cli-helpers.js.map +0 -1
  2104. package/dist/src/cli/commands/browser.js.map +0 -1
  2105. package/dist/src/cli/commands/channels.js.map +0 -1
  2106. package/dist/src/cli/commands/config.js.map +0 -1
  2107. package/dist/src/cli/commands/connectors.js.map +0 -1
  2108. package/dist/src/cli/commands/doctor/checks/channel-config.js.map +0 -1
  2109. package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js.map +0 -1
  2110. package/dist/src/cli/commands/doctor/checks/channel-plugins.js.map +0 -1
  2111. package/dist/src/cli/commands/doctor/checks/config-health.js.map +0 -1
  2112. package/dist/src/cli/commands/doctor/checks/database-schema.js.map +0 -1
  2113. package/dist/src/cli/commands/doctor/checks/gateway-health.js.map +0 -1
  2114. package/dist/src/cli/commands/doctor/checks/gateway-service.js.map +0 -1
  2115. package/dist/src/cli/commands/doctor/checks/migrations.js.map +0 -1
  2116. package/dist/src/cli/commands/doctor/checks/node-version.js.map +0 -1
  2117. package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +0 -1
  2118. package/dist/src/cli/commands/doctor/checks/security-audit.js.map +0 -1
  2119. package/dist/src/cli/commands/doctor/checks/session-integrity.js.map +0 -1
  2120. package/dist/src/cli/commands/doctor/checks/state-integrity.js.map +0 -1
  2121. package/dist/src/cli/commands/doctor/checks/version-check.js.map +0 -1
  2122. package/dist/src/cli/commands/doctor/checks/workspace-status.js.map +0 -1
  2123. package/dist/src/cli/commands/doctor/flow.js.map +0 -1
  2124. package/dist/src/cli/commands/doctor/format.js.map +0 -1
  2125. package/dist/src/cli/commands/doctor/index.js.map +0 -1
  2126. package/dist/src/cli/commands/extension-create.js.map +0 -1
  2127. package/dist/src/cli/commands/extension-dev.js.map +0 -1
  2128. package/dist/src/cli/commands/extension-marketplace.js.map +0 -1
  2129. package/dist/src/cli/commands/extension-pack.js.map +0 -1
  2130. package/dist/src/cli/commands/extension.js.map +0 -1
  2131. package/dist/src/cli/commands/gateway/call.js.map +0 -1
  2132. package/dist/src/cli/commands/gateway/health.js.map +0 -1
  2133. package/dist/src/cli/commands/gateway/lifecycle-core.js.map +0 -1
  2134. package/dist/src/cli/commands/gateway/lifecycle.js.map +0 -1
  2135. package/dist/src/cli/commands/gateway/logs.js.map +0 -1
  2136. package/dist/src/cli/commands/gateway/probe.js.map +0 -1
  2137. package/dist/src/cli/commands/gateway/restart-health.js.map +0 -1
  2138. package/dist/src/cli/commands/gateway/restart.js.map +0 -1
  2139. package/dist/src/cli/commands/gateway/run-foreground.js.map +0 -1
  2140. package/dist/src/cli/commands/gateway/service.js.map +0 -1
  2141. package/dist/src/cli/commands/gateway/shared.js.map +0 -1
  2142. package/dist/src/cli/commands/gateway/status.js.map +0 -1
  2143. package/dist/src/cli/commands/gateway/stop.js.map +0 -1
  2144. package/dist/src/cli/commands/gateway/subcommands.js.map +0 -1
  2145. package/dist/src/cli/commands/gateway/token.js.map +0 -1
  2146. package/dist/src/cli/commands/gateway-ssh-tunnel.js.map +0 -1
  2147. package/dist/src/cli/commands/gateway.js.map +0 -1
  2148. package/dist/src/cli/commands/goal.js.map +0 -1
  2149. package/dist/src/cli/commands/image.js.map +0 -1
  2150. package/dist/src/cli/commands/init.js.map +0 -1
  2151. package/dist/src/cli/commands/logs.js.map +0 -1
  2152. package/dist/src/cli/commands/models.js.map +0 -1
  2153. package/dist/src/cli/commands/onboard/channels/index.js.map +0 -1
  2154. package/dist/src/cli/commands/onboard/channels/onboard-to-configurator.js.map +0 -1
  2155. package/dist/src/cli/commands/onboard/channels/registry.js.map +0 -1
  2156. package/dist/src/cli/commands/onboard/channels/wizard-to-configurator.js.map +0 -1
  2157. package/dist/src/cli/commands/onboard/gateway.js.map +0 -1
  2158. package/dist/src/cli/commands/onboard/model.js.map +0 -1
  2159. package/dist/src/cli/commands/onboard.js.map +0 -1
  2160. package/dist/src/cli/commands/profile.js.map +0 -1
  2161. package/dist/src/cli/commands/project.js.map +0 -1
  2162. package/dist/src/cli/commands/providers.js.map +0 -1
  2163. package/dist/src/cli/commands/resume.js.map +0 -1
  2164. package/dist/src/cli/commands/search.js.map +0 -1
  2165. package/dist/src/cli/commands/session/actions.js.map +0 -1
  2166. package/dist/src/cli/commands/session/utils.js.map +0 -1
  2167. package/dist/src/cli/commands/session.js.map +0 -1
  2168. package/dist/src/cli/commands/setup-shared/output.js.map +0 -1
  2169. package/dist/src/cli/commands/setup-shared/prompts.js.map +0 -1
  2170. package/dist/src/cli/commands/setup-shared/runner.js.map +0 -1
  2171. package/dist/src/cli/commands/setup-shared/types.js.map +0 -1
  2172. package/dist/src/cli/commands/setup.js.map +0 -1
  2173. package/dist/src/cli/commands/skills-test.js.map +0 -1
  2174. package/dist/src/cli/commands/skills.js.map +0 -1
  2175. package/dist/src/cli/commands/tailscale.js.map +0 -1
  2176. package/dist/src/cli/commands/tui-runner.js.map +0 -1
  2177. package/dist/src/cli/commands/tui.js.map +0 -1
  2178. package/dist/src/cli/commands/tunnel.js.map +0 -1
  2179. package/dist/src/cli/commands/update.js.map +0 -1
  2180. package/dist/src/cli/commands/voice.js.map +0 -1
  2181. package/dist/src/cli/context.js.map +0 -1
  2182. package/dist/src/cli/extension-cli-register.js.map +0 -1
  2183. package/dist/src/cli/gateway-run-argv.js.map +0 -1
  2184. package/dist/src/cli/gateway-run-fast-path.js.map +0 -1
  2185. package/dist/src/cli/index.js.map +0 -1
  2186. package/dist/src/cli/registry.js.map +0 -1
  2187. package/dist/src/cli/templates.js.map +0 -1
  2188. package/dist/src/cli/utils/colors.js.map +0 -1
  2189. package/dist/src/cli/utils/gateway-client-options.js.map +0 -1
  2190. package/dist/src/cli/utils/gateway-client.js.map +0 -1
  2191. package/dist/src/cli/utils/init-workspace-core.js.map +0 -1
  2192. package/dist/src/cli/utils/init-workspace.js.map +0 -1
  2193. package/dist/src/cli/utils/oauth-login.js.map +0 -1
  2194. package/dist/src/cli/utils/oauth-providers.js.map +0 -1
  2195. package/dist/src/cli/utils/session.js.map +0 -1
  2196. package/dist/src/commands/agents.config.js.map +0 -1
  2197. package/dist/src/config/agent-profile.js.map +0 -1
  2198. package/dist/src/config/agent-typed-models.js.map +0 -1
  2199. package/dist/src/config/commands.flags.js.map +0 -1
  2200. package/dist/src/config/default-model.js.map +0 -1
  2201. package/dist/src/config/diff.js.map +0 -1
  2202. package/dist/src/config/gateway-bind.js.map +0 -1
  2203. package/dist/src/config/index.js.map +0 -1
  2204. package/dist/src/config/loader.js.map +0 -1
  2205. package/dist/src/config/mcp-config-normalize.js.map +0 -1
  2206. package/dist/src/config/model-input.js.map +0 -1
  2207. package/dist/src/config/models-json.js.map +0 -1
  2208. package/dist/src/config/paths-state.js.map +0 -1
  2209. package/dist/src/config/paths.js.map +0 -1
  2210. package/dist/src/config/profile.js.map +0 -1
  2211. package/dist/src/config/public-url.js.map +0 -1
  2212. package/dist/src/config/reload.js.map +0 -1
  2213. package/dist/src/config/resolve-config-value.js.map +0 -1
  2214. package/dist/src/config/rules.js.map +0 -1
  2215. package/dist/src/config/runtime-overrides.js.map +0 -1
  2216. package/dist/src/config/schema.js.map +0 -1
  2217. package/dist/src/config/validate-channel-configs.js.map +0 -1
  2218. package/dist/src/config/voice.js.map +0 -1
  2219. package/dist/src/config/web-patch.js.map +0 -1
  2220. package/dist/src/config/workspace-defaults.js.map +0 -1
  2221. package/dist/src/config/workspace-dirs.js.map +0 -1
  2222. package/dist/src/config/workspace-path-helpers.js.map +0 -1
  2223. package/dist/src/config/workspace-path.js.map +0 -1
  2224. package/dist/src/connectors/approval.js.map +0 -1
  2225. package/dist/src/connectors/auth-provider-registry.js.map +0 -1
  2226. package/dist/src/connectors/builtin-catalog.js.map +0 -1
  2227. package/dist/src/connectors/catalog.js.map +0 -1
  2228. package/dist/src/connectors/composio-catalog.js.map +0 -1
  2229. package/dist/src/connectors/composio-logo.js.map +0 -1
  2230. package/dist/src/connectors/composio-sessions.js.map +0 -1
  2231. package/dist/src/connectors/composio-triggers.js.map +0 -1
  2232. package/dist/src/connectors/composio.js.map +0 -1
  2233. package/dist/src/connectors/connector-memory-sync.js.map +0 -1
  2234. package/dist/src/connectors/health.js.map +0 -1
  2235. package/dist/src/connectors/install.js.map +0 -1
  2236. package/dist/src/connectors/instances.js.map +0 -1
  2237. package/dist/src/connectors/integration-strategy.js.map +0 -1
  2238. package/dist/src/connectors/lifecycle.js.map +0 -1
  2239. package/dist/src/connectors/materialize.js.map +0 -1
  2240. package/dist/src/connectors/policy.js.map +0 -1
  2241. package/dist/src/connectors/providers.js.map +0 -1
  2242. package/dist/src/connectors/registries/modelscope.js.map +0 -1
  2243. package/dist/src/connectors/registries/official-mcp.js.map +0 -1
  2244. package/dist/src/connectors/registries/search.js.map +0 -1
  2245. package/dist/src/connectors/registries/smithery.js.map +0 -1
  2246. package/dist/src/connectors/runtime-adapter-registry.js.map +0 -1
  2247. package/dist/src/connectors/secret-store.js.map +0 -1
  2248. package/dist/src/connectors/setup-secrets.js.map +0 -1
  2249. package/dist/src/connectors/supervisor.js.map +0 -1
  2250. package/dist/src/connectors/usage.js.map +0 -1
  2251. package/dist/src/connectors/workflow-preflight.js.map +0 -1
  2252. package/dist/src/daemon/constants.js.map +0 -1
  2253. package/dist/src/daemon/install-plan.js.map +0 -1
  2254. package/dist/src/daemon/launchd.js.map +0 -1
  2255. package/dist/src/daemon/schtasks.js.map +0 -1
  2256. package/dist/src/daemon/service-audit.js.map +0 -1
  2257. package/dist/src/daemon/service.js.map +0 -1
  2258. package/dist/src/daemon/systemd.js.map +0 -1
  2259. package/dist/src/document-understanding/extract.js.map +0 -1
  2260. package/dist/src/errors/index.js.map +0 -1
  2261. package/dist/src/extensions/activation-context.js.map +0 -1
  2262. package/dist/src/extensions/activation-planner.js.map +0 -1
  2263. package/dist/src/extensions/api.js.map +0 -1
  2264. package/dist/src/extensions/bundle-mcp.js.map +0 -1
  2265. package/dist/src/extensions/bundled-extension-activation.js.map +0 -1
  2266. package/dist/src/extensions/diagnostics.js.map +0 -1
  2267. package/dist/src/extensions/discover-extensions.js.map +0 -1
  2268. package/dist/src/extensions/engine-check.js.map +0 -1
  2269. package/dist/src/extensions/extension-metadata-snapshot.js.map +0 -1
  2270. package/dist/src/extensions/extension-registry-impl.js.map +0 -1
  2271. package/dist/src/extensions/health.js.map +0 -1
  2272. package/dist/src/extensions/hooks.js.map +0 -1
  2273. package/dist/src/extensions/index.js.map +0 -1
  2274. package/dist/src/extensions/install-transaction.js.map +0 -1
  2275. package/dist/src/extensions/install.js.map +0 -1
  2276. package/dist/src/extensions/loader.js.map +0 -1
  2277. package/dist/src/extensions/lockfile.js.map +0 -1
  2278. package/dist/src/extensions/manifest-registry.js.map +0 -1
  2279. package/dist/src/extensions/marketplace.js.map +0 -1
  2280. package/dist/src/extensions/media-provider-contracts.js.map +0 -1
  2281. package/dist/src/extensions/normalize-manifest.js.map +0 -1
  2282. package/dist/src/extensions/onboard-helpers.js.map +0 -1
  2283. package/dist/src/extensions/package-contract.js.map +0 -1
  2284. package/dist/src/extensions/sdk/channel-entry.js.map +0 -1
  2285. package/dist/src/extensions/sdk/channel-helpers.js.map +0 -1
  2286. package/dist/src/extensions/sdk/index.js.map +0 -1
  2287. package/dist/src/extensions/sdk/lazy.js.map +0 -1
  2288. package/dist/src/extensions/sdk/testing.js.map +0 -1
  2289. package/dist/src/extensions/security.js.map +0 -1
  2290. package/dist/src/extensions/slots.js.map +0 -1
  2291. package/dist/src/extensions/speech-provider-contracts.js.map +0 -1
  2292. package/dist/src/extensions/store-zip-limits.js.map +0 -1
  2293. package/dist/src/extensions/typed-event-bus.js.map +0 -1
  2294. package/dist/src/extensions/types/hooks.js.map +0 -1
  2295. package/dist/src/extensions/types/providers.js.map +0 -1
  2296. package/dist/src/extensions/update.js.map +0 -1
  2297. package/dist/src/extensions/when-context.js.map +0 -1
  2298. package/dist/src/extensions/when-expression.js.map +0 -1
  2299. package/dist/src/gateway/agent-builtin-tools.js.map +0 -1
  2300. package/dist/src/gateway/agent-run-relay.js.map +0 -1
  2301. package/dist/src/gateway/agents-admin.js.map +0 -1
  2302. package/dist/src/gateway/auth.js.map +0 -1
  2303. package/dist/src/gateway/capability-presets-admin.js.map +0 -1
  2304. package/dist/src/gateway/chat-limits.js.map +0 -1
  2305. package/dist/src/gateway/chat-stream/mapper.js.map +0 -1
  2306. package/dist/src/gateway/clarify-bridge.js.map +0 -1
  2307. package/dist/src/gateway/clarify-runtime.js.map +0 -1
  2308. package/dist/src/gateway/client-ip.js.map +0 -1
  2309. package/dist/src/gateway/config-tools-web.js.map +0 -1
  2310. package/dist/src/gateway/credential.js.map +0 -1
  2311. package/dist/src/gateway/discovery/mdns.js.map +0 -1
  2312. package/dist/src/gateway/dreaming-automation-reconciler.js.map +0 -1
  2313. package/dist/src/gateway/ensure-network-cors.js.map +0 -1
  2314. package/dist/src/gateway/file-path-classifier.js.map +0 -1
  2315. package/dist/src/gateway/file-reference-registry.js.map +0 -1
  2316. package/dist/src/gateway/global-defaults-admin.js.map +0 -1
  2317. package/dist/src/gateway/heartbeat/service.js.map +0 -1
  2318. package/dist/src/gateway/hono/app.js.map +0 -1
  2319. package/dist/src/gateway/hono/lib/agent-model.js.map +0 -1
  2320. package/dist/src/gateway/hono/lib/config-payload.js.map +0 -1
  2321. package/dist/src/gateway/hono/lib/extension-assets.js.map +0 -1
  2322. package/dist/src/gateway/hono/lib/extension-store.js.map +0 -1
  2323. package/dist/src/gateway/hono/lib/mask-secret-length.js.map +0 -1
  2324. package/dist/src/gateway/hono/lib/route-logger.js.map +0 -1
  2325. package/dist/src/gateway/hono/lib/safe-providers-config.js.map +0 -1
  2326. package/dist/src/gateway/hono/lib/safe-voice-config.js.map +0 -1
  2327. package/dist/src/gateway/hono/lib/startup-unavailable.js.map +0 -1
  2328. package/dist/src/gateway/hono/lib/static-ui.js.map +0 -1
  2329. package/dist/src/gateway/hono/middleware/auth.js.map +0 -1
  2330. package/dist/src/gateway/hono/middleware/log-context.js.map +0 -1
  2331. package/dist/src/gateway/hono/middleware/logger.js.map +0 -1
  2332. package/dist/src/gateway/hono/middleware/route-errors.js.map +0 -1
  2333. package/dist/src/gateway/hono/middleware/scopes.js.map +0 -1
  2334. package/dist/src/gateway/hono/middleware/strict-rate-limit.js.map +0 -1
  2335. package/dist/src/gateway/hono/oauth-async.js.map +0 -1
  2336. package/dist/src/gateway/hono/oauth.js.map +0 -1
  2337. package/dist/src/gateway/hono/routes/activity.js.map +0 -1
  2338. package/dist/src/gateway/hono/routes/agent-stream.js.map +0 -1
  2339. package/dist/src/gateway/hono/routes/agents.js.map +0 -1
  2340. package/dist/src/gateway/hono/routes/ai-assist.js.map +0 -1
  2341. package/dist/src/gateway/hono/routes/auth-registry-extensions.js.map +0 -1
  2342. package/dist/src/gateway/hono/routes/browser-install.js.map +0 -1
  2343. package/dist/src/gateway/hono/routes/browser.js.map +0 -1
  2344. package/dist/src/gateway/hono/routes/capabilities.js.map +0 -1
  2345. package/dist/src/gateway/hono/routes/capability-presets.js.map +0 -1
  2346. package/dist/src/gateway/hono/routes/channels.js.map +0 -1
  2347. package/dist/src/gateway/hono/routes/commands-skills.js.map +0 -1
  2348. package/dist/src/gateway/hono/routes/config-patch/agents.js.map +0 -1
  2349. package/dist/src/gateway/hono/routes/config-patch/channels.js.map +0 -1
  2350. package/dist/src/gateway/hono/routes/config-patch/gateway.js.map +0 -1
  2351. package/dist/src/gateway/hono/routes/config-patch/misc.js.map +0 -1
  2352. package/dist/src/gateway/hono/routes/config-patch/result.js.map +0 -1
  2353. package/dist/src/gateway/hono/routes/config.js.map +0 -1
  2354. package/dist/src/gateway/hono/routes/connectors.js.map +0 -1
  2355. package/dist/src/gateway/hono/routes/doctor.js.map +0 -1
  2356. package/dist/src/gateway/hono/routes/dreaming.js.map +0 -1
  2357. package/dist/src/gateway/hono/routes/exposure.js.map +0 -1
  2358. package/dist/src/gateway/hono/routes/extension-gateway.js.map +0 -1
  2359. package/dist/src/gateway/hono/routes/global-defaults.js.map +0 -1
  2360. package/dist/src/gateway/hono/routes/goals.js.map +0 -1
  2361. package/dist/src/gateway/hono/routes/home.js.map +0 -1
  2362. package/dist/src/gateway/hono/routes/host-fs.js.map +0 -1
  2363. package/dist/src/gateway/hono/routes/index.js.map +0 -1
  2364. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +0 -1
  2365. package/dist/src/gateway/hono/routes/lazy-fallback.js.map +0 -1
  2366. package/dist/src/gateway/hono/routes/local-apps.js.map +0 -1
  2367. package/dist/src/gateway/hono/routes/logs.js.map +0 -1
  2368. package/dist/src/gateway/hono/routes/mcp.js.map +0 -1
  2369. package/dist/src/gateway/hono/routes/media.js.map +0 -1
  2370. package/dist/src/gateway/hono/routes/memory.js.map +0 -1
  2371. package/dist/src/gateway/hono/routes/migrations.js.map +0 -1
  2372. package/dist/src/gateway/hono/routes/mobile.js.map +0 -1
  2373. package/dist/src/gateway/hono/routes/models.js.map +0 -1
  2374. package/dist/src/gateway/hono/routes/notes.js.map +0 -1
  2375. package/dist/src/gateway/hono/routes/projects.js.map +0 -1
  2376. package/dist/src/gateway/hono/routes/public-gateway.js.map +0 -1
  2377. package/dist/src/gateway/hono/routes/search.js.map +0 -1
  2378. package/dist/src/gateway/hono/routes/sessions.js.map +0 -1
  2379. package/dist/src/gateway/hono/routes/shares.js.map +0 -1
  2380. package/dist/src/gateway/hono/routes/site-shares.js.map +0 -1
  2381. package/dist/src/gateway/hono/routes/status.js.map +0 -1
  2382. package/dist/src/gateway/hono/routes/tui.js.map +0 -1
  2383. package/dist/src/gateway/hono/routes/tunnel.js.map +0 -1
  2384. package/dist/src/gateway/hono/routes/update.js.map +0 -1
  2385. package/dist/src/gateway/hono/routes/voice.js.map +0 -1
  2386. package/dist/src/gateway/hono/routes/work-discovery.js.map +0 -1
  2387. package/dist/src/gateway/hono/routes/workflows.js.map +0 -1
  2388. package/dist/src/gateway/hono/routes/workspace.js.map +0 -1
  2389. package/dist/src/gateway/hono/routes/you.js.map +0 -1
  2390. package/dist/src/gateway/hono/sse-json.js.map +0 -1
  2391. package/dist/src/gateway/hono/sse.js.map +0 -1
  2392. package/dist/src/gateway/host.js.map +0 -1
  2393. package/dist/src/gateway/image-capabilities.js.map +0 -1
  2394. package/dist/src/gateway/listen.js.map +0 -1
  2395. package/dist/src/gateway/lock.js.map +0 -1
  2396. package/dist/src/gateway/ports.js.map +0 -1
  2397. package/dist/src/gateway/protocol.js.map +0 -1
  2398. package/dist/src/gateway/public-url.js.map +0 -1
  2399. package/dist/src/gateway/rate-limit/auth-policy.js.map +0 -1
  2400. package/dist/src/gateway/rate-limit/buckets.js.map +0 -1
  2401. package/dist/src/gateway/rate-limit/env-flags.js.map +0 -1
  2402. package/dist/src/gateway/resolve-channel-connect-defer.js.map +0 -1
  2403. package/dist/src/gateway/resolve-webchat-session-key.js.map +0 -1
  2404. package/dist/src/gateway/respawn.js.map +0 -1
  2405. package/dist/src/gateway/run-loop.js.map +0 -1
  2406. package/dist/src/gateway/runtime-config.js.map +0 -1
  2407. package/dist/src/gateway/security/audit.js.map +0 -1
  2408. package/dist/src/gateway/security/csp.js.map +0 -1
  2409. package/dist/src/gateway/security/dangerous-tools.js.map +0 -1
  2410. package/dist/src/gateway/security/external-content.js.map +0 -1
  2411. package/dist/src/gateway/security/known-weak-secrets.js.map +0 -1
  2412. package/dist/src/gateway/security/loopback.js.map +0 -1
  2413. package/dist/src/gateway/security/operator-scopes.js.map +0 -1
  2414. package/dist/src/gateway/security/origin-check.js.map +0 -1
  2415. package/dist/src/gateway/security/preauth-connection-budget.js.map +0 -1
  2416. package/dist/src/gateway/security/secret-equal.js.map +0 -1
  2417. package/dist/src/gateway/server-tailscale.js.map +0 -1
  2418. package/dist/src/gateway/server.js.map +0 -1
  2419. package/dist/src/gateway/service/agent-runner.js.map +0 -1
  2420. package/dist/src/gateway/service/config-coordinator.js.map +0 -1
  2421. package/dist/src/gateway/service/marketplace-service.js.map +0 -1
  2422. package/dist/src/gateway/service/run-gateway-agent.js.map +0 -1
  2423. package/dist/src/gateway/service/session-chat-ids.js.map +0 -1
  2424. package/dist/src/gateway/service/sessions-api.js.map +0 -1
  2425. package/dist/src/gateway/service/sse-hub.js.map +0 -1
  2426. package/dist/src/gateway/service.js.map +0 -1
  2427. package/dist/src/gateway/session-reset-service.js.map +0 -1
  2428. package/dist/src/gateway/startup-readiness.js.map +0 -1
  2429. package/dist/src/gateway/startup-trace.js.map +0 -1
  2430. package/dist/src/gateway/tailscale-auth.js.map +0 -1
  2431. package/dist/src/gateway/tailscale-lifecycle.js.map +0 -1
  2432. package/dist/src/gateway/tls-server.js.map +0 -1
  2433. package/dist/src/gateway/trusted-proxy.js.map +0 -1
  2434. package/dist/src/gateway/user-turn-input.js.map +0 -1
  2435. package/dist/src/gateway/workspace-editor-path.js.map +0 -1
  2436. package/dist/src/gateway/workspace-file-search.js.map +0 -1
  2437. package/dist/src/gateway/workspace-fs-file-list.js.map +0 -1
  2438. package/dist/src/gateway/workspace-heartbeat-path.js.map +0 -1
  2439. package/dist/src/gateway/workspace-ripgrep.js.map +0 -1
  2440. package/dist/src/gateway/ws-security.js.map +0 -1
  2441. package/dist/src/generated/bundled-image-generation-providers.js.map +0 -1
  2442. package/dist/src/goals/goal-contract-draft.js.map +0 -1
  2443. package/dist/src/goals/goal-evidence-review.js.map +0 -1
  2444. package/dist/src/goals/goal-notifications.js.map +0 -1
  2445. package/dist/src/goals/goal-queue-store.js.map +0 -1
  2446. package/dist/src/goals/goal-runner.js.map +0 -1
  2447. package/dist/src/goals/goal-service.js.map +0 -1
  2448. package/dist/src/goals/goal-store.js.map +0 -1
  2449. package/dist/src/goals/goal-workflow-judge.js.map +0 -1
  2450. package/dist/src/heartbeat/active-hours.js.map +0 -1
  2451. package/dist/src/heartbeat/content-check.js.map +0 -1
  2452. package/dist/src/heartbeat/event-prompt.js.map +0 -1
  2453. package/dist/src/heartbeat/tokens.js.map +0 -1
  2454. package/dist/src/heartbeat/wake.js.map +0 -1
  2455. package/dist/src/i18n/format.js.map +0 -1
  2456. package/dist/src/i18n/goals-bundle.js.map +0 -1
  2457. package/dist/src/i18n/locale.js.map +0 -1
  2458. package/dist/src/i18n/locales/goals.en.js.map +0 -1
  2459. package/dist/src/i18n/locales/goals.zh.js.map +0 -1
  2460. package/dist/src/i18n/locales/share-tool.en.js.map +0 -1
  2461. package/dist/src/i18n/locales/share-tool.zh.js.map +0 -1
  2462. package/dist/src/i18n/share-tool-bundle.js.map +0 -1
  2463. package/dist/src/index.js.map +0 -1
  2464. package/dist/src/infra/brew.js.map +0 -1
  2465. package/dist/src/infra/bus/queue.js.map +0 -1
  2466. package/dist/src/infra/debounce.js.map +0 -1
  2467. package/dist/src/infra/exec.js.map +0 -1
  2468. package/dist/src/infra/gateway-process-argv.js.map +0 -1
  2469. package/dist/src/infra/gateway-processes.js.map +0 -1
  2470. package/dist/src/infra/host-env-security-policy.js.map +0 -1
  2471. package/dist/src/infra/host-env-security.js.map +0 -1
  2472. package/dist/src/infra/http-proxy-env.js.map +0 -1
  2473. package/dist/src/infra/is-main.js.map +0 -1
  2474. package/dist/src/infra/json-utf8-bytes.js.map +0 -1
  2475. package/dist/src/infra/node-sqlite.js.map +0 -1
  2476. package/dist/src/infra/package-json.js.map +0 -1
  2477. package/dist/src/infra/package-update-steps.js.map +0 -1
  2478. package/dist/src/infra/path-env.js.map +0 -1
  2479. package/dist/src/infra/path-prepend.js.map +0 -1
  2480. package/dist/src/infra/ports.js.map +0 -1
  2481. package/dist/src/infra/rate-limit/failure-limiter.js.map +0 -1
  2482. package/dist/src/infra/rate-limit/keyed-store.js.map +0 -1
  2483. package/dist/src/infra/rate-limit/rate-limiter.js.map +0 -1
  2484. package/dist/src/infra/restart.js.map +0 -1
  2485. package/dist/src/infra/retry.js.map +0 -1
  2486. package/dist/src/infra/run-command.js.map +0 -1
  2487. package/dist/src/infra/sqlite-errors.js.map +0 -1
  2488. package/dist/src/infra/ssh-tunnel.js.map +0 -1
  2489. package/dist/src/infra/stable-node-path.js.map +0 -1
  2490. package/dist/src/infra/tailscale.js.map +0 -1
  2491. package/dist/src/infra/undici-fetch.js.map +0 -1
  2492. package/dist/src/infra/unhandled-rejections.js.map +0 -1
  2493. package/dist/src/infra/update-channels.js.map +0 -1
  2494. package/dist/src/infra/update-check.js.map +0 -1
  2495. package/dist/src/infra/update-global.js.map +0 -1
  2496. package/dist/src/infra/update-lock.js.map +0 -1
  2497. package/dist/src/infra/update-log.js.map +0 -1
  2498. package/dist/src/infra/update-restart.js.map +0 -1
  2499. package/dist/src/infra/update-runner.js.map +0 -1
  2500. package/dist/src/infra/update-startup.js.map +0 -1
  2501. package/dist/src/infra/warning-filter.js.map +0 -1
  2502. package/dist/src/infra/write-file-atomic.js.map +0 -1
  2503. package/dist/src/knowledge/connected-knowledge-pipeline.js.map +0 -1
  2504. package/dist/src/knowledge/coordinator.js.map +0 -1
  2505. package/dist/src/knowledge/ingestion-service.js.map +0 -1
  2506. package/dist/src/local-apps/acceptance.js.map +0 -1
  2507. package/dist/src/local-apps/preview-runtime-bridge.js.map +0 -1
  2508. package/dist/src/local-apps/runtime-entry.js.map +0 -1
  2509. package/dist/src/local-apps/scaffold.js.map +0 -1
  2510. package/dist/src/local-apps/service.js.map +0 -1
  2511. package/dist/src/local-apps/store.js.map +0 -1
  2512. package/dist/src/markdown/chunk.js.map +0 -1
  2513. package/dist/src/markdown/code-spans.js.map +0 -1
  2514. package/dist/src/markdown/fences.js.map +0 -1
  2515. package/dist/src/markdown/frontmatter.js.map +0 -1
  2516. package/dist/src/markdown/ir.js.map +0 -1
  2517. package/dist/src/markdown/render.js.map +0 -1
  2518. package/dist/src/markdown/tables.js.map +0 -1
  2519. package/dist/src/mcp/channel-bridge.js.map +0 -1
  2520. package/dist/src/mcp/channel-server.js.map +0 -1
  2521. package/dist/src/mcp/channel-shared.js.map +0 -1
  2522. package/dist/src/mcp/channel-tools.js.map +0 -1
  2523. package/dist/src/mcp/gateway-http-client.js.map +0 -1
  2524. package/dist/src/media/media-reference.js.map +0 -1
  2525. package/dist/src/media/paths.js.map +0 -1
  2526. package/dist/src/media/session-references.js.map +0 -1
  2527. package/dist/src/media/store.js.map +0 -1
  2528. package/dist/src/media/uri.js.map +0 -1
  2529. package/dist/src/media-shared/http/api-key-rotation.js.map +0 -1
  2530. package/dist/src/media-shared/http/deadline.js.map +0 -1
  2531. package/dist/src/media-shared/http/private-network.js.map +0 -1
  2532. package/dist/src/media-shared/http/provider-http-errors.js.map +0 -1
  2533. package/dist/src/media-shared/http/provider-http.js.map +0 -1
  2534. package/dist/src/media-shared/http/resolve-provider-http-request-config.js.map +0 -1
  2535. package/dist/src/media-shared/http/ssrf-guard.js.map +0 -1
  2536. package/dist/src/media-shared/http/test-helpers/mock-server.js.map +0 -1
  2537. package/dist/src/media-understanding/audio-transcription-runner.js.map +0 -1
  2538. package/dist/src/media-understanding/openai-compatible-audio.js.map +0 -1
  2539. package/dist/src/media-understanding/registry.js.map +0 -1
  2540. package/dist/src/media-understanding/resolve-entries.js.map +0 -1
  2541. package/dist/src/media-understanding/runner.js.map +0 -1
  2542. package/dist/src/migrations/config/default-capability-preset.js.map +0 -1
  2543. package/dist/src/migrations/registry.js.map +0 -1
  2544. package/dist/src/migrations/runner.js.map +0 -1
  2545. package/dist/src/mobile/notification-service.js.map +0 -1
  2546. package/dist/src/mobile/notification-store.js.map +0 -1
  2547. package/dist/src/mobile/notification-types.js.map +0 -1
  2548. package/dist/src/notes/agent-context.js.map +0 -1
  2549. package/dist/src/notes/attachment-ref.js.map +0 -1
  2550. package/dist/src/notes/note-attachment-sync.js.map +0 -1
  2551. package/dist/src/notes/note-index-meta.js.map +0 -1
  2552. package/dist/src/notes/note-markdown.js.map +0 -1
  2553. package/dist/src/notes/paths.js.map +0 -1
  2554. package/dist/src/notes/service.js.map +0 -1
  2555. package/dist/src/notes/store.js.map +0 -1
  2556. package/dist/src/package-version.js.map +0 -1
  2557. package/dist/src/pets/factory.js.map +0 -1
  2558. package/dist/src/pets/manifest.js.map +0 -1
  2559. package/dist/src/pets/validator.js.map +0 -1
  2560. package/dist/src/process/kill-tree.js.map +0 -1
  2561. package/dist/src/project-trust/trust-store.js.map +0 -1
  2562. package/dist/src/projects/automation-bind.js.map +0 -1
  2563. package/dist/src/projects/goal-bind.js.map +0 -1
  2564. package/dist/src/projects/memory-bind.js.map +0 -1
  2565. package/dist/src/projects/project-agent-suggestion.js.map +0 -1
  2566. package/dist/src/projects/project-agent.js.map +0 -1
  2567. package/dist/src/projects/project-kind.js.map +0 -1
  2568. package/dist/src/projects/project-loop.js.map +0 -1
  2569. package/dist/src/projects/project-service.js.map +0 -1
  2570. package/dist/src/projects/project-store.js.map +0 -1
  2571. package/dist/src/projects/session-bind.js.map +0 -1
  2572. package/dist/src/projects/workflow-bind.js.map +0 -1
  2573. package/dist/src/projects/workspace-project.js.map +0 -1
  2574. package/dist/src/projects/workspace.js.map +0 -1
  2575. package/dist/src/providers/auth-runtime/auth-profile-store.js.map +0 -1
  2576. package/dist/src/providers/auth-runtime/is-configured.js.map +0 -1
  2577. package/dist/src/providers/auth-runtime/oauth.js.map +0 -1
  2578. package/dist/src/providers/auth-runtime/resolve-api-key.js.map +0 -1
  2579. package/dist/src/providers/auth-runtime/resolve-auth.js.map +0 -1
  2580. package/dist/src/providers/constants.js.map +0 -1
  2581. package/dist/src/providers/domestic-presets.js.map +0 -1
  2582. package/dist/src/providers/env-keys.js.map +0 -1
  2583. package/dist/src/providers/extension-stream-bridge.js.map +0 -1
  2584. package/dist/src/providers/index.js.map +0 -1
  2585. package/dist/src/providers/model-call.js.map +0 -1
  2586. package/dist/src/providers/model-discovery.js.map +0 -1
  2587. package/dist/src/providers/model-registry.js.map +0 -1
  2588. package/dist/src/providers/model-supplements.js.map +0 -1
  2589. package/dist/src/providers/plugin-registry.js.map +0 -1
  2590. package/dist/src/providers/presentation.js.map +0 -1
  2591. package/dist/src/remote-access/exposure-guards.js.map +0 -1
  2592. package/dist/src/remote-access/exposure-manager.js.map +0 -1
  2593. package/dist/src/review/review-git.js.map +0 -1
  2594. package/dist/src/review/review-types.js.map +0 -1
  2595. package/dist/src/routing/account-id.js.map +0 -1
  2596. package/dist/src/routing/agent-session-key.js.map +0 -1
  2597. package/dist/src/routing/bindings.js.map +0 -1
  2598. package/dist/src/routing/index.js.map +0 -1
  2599. package/dist/src/routing/resolve-route.js.map +0 -1
  2600. package/dist/src/routing/resolve-tui-session-key.js.map +0 -1
  2601. package/dist/src/routing/session-key-utils.js.map +0 -1
  2602. package/dist/src/routing/session-key.js.map +0 -1
  2603. package/dist/src/session/abort-cutoff.js.map +0 -1
  2604. package/dist/src/session/chat-export.js.map +0 -1
  2605. package/dist/src/session/client-history.js.map +0 -1
  2606. package/dist/src/session/compaction-checkpoints.js.map +0 -1
  2607. package/dist/src/session/config-store.js.map +0 -1
  2608. package/dist/src/session/init-session-turn.js.map +0 -1
  2609. package/dist/src/session/lifecycle-timestamps.js.map +0 -1
  2610. package/dist/src/session/load-jsonl-entries.js.map +0 -1
  2611. package/dist/src/session/manager.js.map +0 -1
  2612. package/dist/src/session/patch-metadata.js.map +0 -1
  2613. package/dist/src/session/reset-policy.js.map +0 -1
  2614. package/dist/src/session/reset-triggers.js.map +0 -1
  2615. package/dist/src/session/reset-type.js.map +0 -1
  2616. package/dist/src/session/resolve-session.js.map +0 -1
  2617. package/dist/src/session/session-context-for-llm.js.map +0 -1
  2618. package/dist/src/session/session-id.js.map +0 -1
  2619. package/dist/src/session/session-title.js.map +0 -1
  2620. package/dist/src/session/session-workspace.js.map +0 -1
  2621. package/dist/src/session/store.js.map +0 -1
  2622. package/dist/src/session/stored-rows-to-file-entries.js.map +0 -1
  2623. package/dist/src/session/thinking-resolve.js.map +0 -1
  2624. package/dist/src/session/transcript-events.js.map +0 -1
  2625. package/dist/src/session/transcript-format.js.map +0 -1
  2626. package/dist/src/session/transcript-outline.js.map +0 -1
  2627. package/dist/src/session/transcript-stats.js.map +0 -1
  2628. package/dist/src/session/types.js.map +0 -1
  2629. package/dist/src/session/user-round-delete.js.map +0 -1
  2630. package/dist/src/share/share-audit.js.map +0 -1
  2631. package/dist/src/share/share-auto.js.map +0 -1
  2632. package/dist/src/share/share-config.js.map +0 -1
  2633. package/dist/src/share/share-landing.js.map +0 -1
  2634. package/dist/src/share/share-rate-limit.js.map +0 -1
  2635. package/dist/src/share/share-store.js.map +0 -1
  2636. package/dist/src/share/share-thumbnail.js.map +0 -1
  2637. package/dist/src/share/share-types.js.map +0 -1
  2638. package/dist/src/share/share-url.js.map +0 -1
  2639. package/dist/src/share/share-zip.js.map +0 -1
  2640. package/dist/src/share/site-proxy.js.map +0 -1
  2641. package/dist/src/share/site-share-config.js.map +0 -1
  2642. package/dist/src/share/site-share-router.js.map +0 -1
  2643. package/dist/src/share/site-share-store.js.map +0 -1
  2644. package/dist/src/share/site-share-types.js.map +0 -1
  2645. package/dist/src/share/site-static-serve.js.map +0 -1
  2646. package/dist/src/storage/sqlite/activity-repository.js.map +0 -1
  2647. package/dist/src/storage/sqlite/config-repository.js.map +0 -1
  2648. package/dist/src/storage/sqlite/connection.js.map +0 -1
  2649. package/dist/src/storage/sqlite/connector-repository.js.map +0 -1
  2650. package/dist/src/storage/sqlite/fts.js.map +0 -1
  2651. package/dist/src/storage/sqlite/knowledge-repository.js.map +0 -1
  2652. package/dist/src/storage/sqlite/memory-index-repository.js.map +0 -1
  2653. package/dist/src/storage/sqlite/memory-records-repository.js.map +0 -1
  2654. package/dist/src/storage/sqlite/memory-reference-consent-repository.js.map +0 -1
  2655. package/dist/src/storage/sqlite/migrations/discover.js.map +0 -1
  2656. package/dist/src/storage/sqlite/migrations/errors.js.map +0 -1
  2657. package/dist/src/storage/sqlite/migrations/runner.js.map +0 -1
  2658. package/dist/src/storage/sqlite/note-agent-context-repository.js.map +0 -1
  2659. package/dist/src/storage/sqlite/notes-repository.js.map +0 -1
  2660. package/dist/src/storage/sqlite/paths.js.map +0 -1
  2661. package/dist/src/storage/sqlite/row-mappers.js.map +0 -1
  2662. package/dist/src/storage/sqlite/schema-version.js.map +0 -1
  2663. package/dist/src/storage/sqlite/schema.js.map +0 -1
  2664. package/dist/src/storage/sqlite/session-metadata.js.map +0 -1
  2665. package/dist/src/storage/sqlite/session-repository.js.map +0 -1
  2666. package/dist/src/storage/sqlite/transaction.js.map +0 -1
  2667. package/dist/src/storage/sqlite/transcript-repository.js.map +0 -1
  2668. package/dist/src/storage/sqlite/user-profile-setup-repository.js.map +0 -1
  2669. package/dist/src/storage/sqlite/user-trust-repository.js.map +0 -1
  2670. package/dist/src/tui/backends/embedded-backend.js.map +0 -1
  2671. package/dist/src/tui/backends/gateway-sse-backend.js.map +0 -1
  2672. package/dist/src/tui/chat-history.js.map +0 -1
  2673. package/dist/src/tui/clipboard-image.js.map +0 -1
  2674. package/dist/src/tui/clipboard-text.js.map +0 -1
  2675. package/dist/src/tui/components/assistant-message.js.map +0 -1
  2676. package/dist/src/tui/components/bash-execution.js.map +0 -1
  2677. package/dist/src/tui/components/bash-summary.js.map +0 -1
  2678. package/dist/src/tui/components/branch-message-summary.js.map +0 -1
  2679. package/dist/src/tui/components/branch-summary.js.map +0 -1
  2680. package/dist/src/tui/components/chat-log.js.map +0 -1
  2681. package/dist/src/tui/components/compaction-summary.js.map +0 -1
  2682. package/dist/src/tui/components/custom-editor.js.map +0 -1
  2683. package/dist/src/tui/components/custom-message.js.map +0 -1
  2684. package/dist/src/tui/components/dynamic-border.js.map +0 -1
  2685. package/dist/src/tui/components/extension-dialog.js.map +0 -1
  2686. package/dist/src/tui/components/fuzzy-filter.js.map +0 -1
  2687. package/dist/src/tui/components/scoped-models-selector.js.map +0 -1
  2688. package/dist/src/tui/components/searchable-select-list.js.map +0 -1
  2689. package/dist/src/tui/components/session-selector.js.map +0 -1
  2690. package/dist/src/tui/components/settings-selector.js.map +0 -1
  2691. package/dist/src/tui/components/thinking-selector.js.map +0 -1
  2692. package/dist/src/tui/components/tool-execution.js.map +0 -1
  2693. package/dist/src/tui/components/tui-bottom-bar.js.map +0 -1
  2694. package/dist/src/tui/components/tui-header.js.map +0 -1
  2695. package/dist/src/tui/components/user-message.js.map +0 -1
  2696. package/dist/src/tui/components/visual-truncate.js.map +0 -1
  2697. package/dist/src/tui/extension-host/autocomplete.js.map +0 -1
  2698. package/dist/src/tui/extension-host/host.js.map +0 -1
  2699. package/dist/src/tui/extension-host/load-extensions.js.map +0 -1
  2700. package/dist/src/tui/extension-host/runtime-context.js.map +0 -1
  2701. package/dist/src/tui/extension-host/runtime.js.map +0 -1
  2702. package/dist/src/tui/extension-host/surface.js.map +0 -1
  2703. package/dist/src/tui/extension-host/tool-renderers.js.map +0 -1
  2704. package/dist/src/tui/format-tui-hotkeys.js.map +0 -1
  2705. package/dist/src/tui/sse-consumer.js.map +0 -1
  2706. package/dist/src/tui/theme/dark.js.map +0 -1
  2707. package/dist/src/tui/theme/light.js.map +0 -1
  2708. package/dist/src/tui/theme-manager.js.map +0 -1
  2709. package/dist/src/tui/theme.js.map +0 -1
  2710. package/dist/src/tui/tool-summary.js.map +0 -1
  2711. package/dist/src/tui/tui-agent-events.js.map +0 -1
  2712. package/dist/src/tui/tui-command-formatters.js.map +0 -1
  2713. package/dist/src/tui/tui-commands.js.map +0 -1
  2714. package/dist/src/tui/tui-context-usage.js.map +0 -1
  2715. package/dist/src/tui/tui-extension-user-message.js.map +0 -1
  2716. package/dist/src/tui/tui-fd-path.js.map +0 -1
  2717. package/dist/src/tui/tui-file-autocomplete.js.map +0 -1
  2718. package/dist/src/tui/tui-follow-up-queue.js.map +0 -1
  2719. package/dist/src/tui/tui-git-branch.js.map +0 -1
  2720. package/dist/src/tui/tui-keybindings-file.js.map +0 -1
  2721. package/dist/src/tui/tui-lifecycle.js.map +0 -1
  2722. package/dist/src/tui/tui-local-shell.js.map +0 -1
  2723. package/dist/src/tui/tui-model-picker.js.map +0 -1
  2724. package/dist/src/tui/tui-oauth-login.js.map +0 -1
  2725. package/dist/src/tui/tui-overlays.js.map +0 -1
  2726. package/dist/src/tui/tui-picker-overlay.js.map +0 -1
  2727. package/dist/src/tui/tui-run-state.js.map +0 -1
  2728. package/dist/src/tui/tui-run-status-format.js.map +0 -1
  2729. package/dist/src/tui/tui-runtime-hints.js.map +0 -1
  2730. package/dist/src/tui/tui-scoped-models.js.map +0 -1
  2731. package/dist/src/tui/tui-session-actions.js.map +0 -1
  2732. package/dist/src/tui/tui-session-format.js.map +0 -1
  2733. package/dist/src/tui/tui-session-snapshot.js.map +0 -1
  2734. package/dist/src/tui/tui-session-stats.js.map +0 -1
  2735. package/dist/src/tui/tui-settings.js.map +0 -1
  2736. package/dist/src/tui/tui-skills-autocomplete.js.map +0 -1
  2737. package/dist/src/tui/tui-startup-resources.js.map +0 -1
  2738. package/dist/src/tui/tui-startup-text.js.map +0 -1
  2739. package/dist/src/tui/tui-stdio-filter.js.map +0 -1
  2740. package/dist/src/tui/tui-submit.js.map +0 -1
  2741. package/dist/src/tui/tui-suspend.js.map +0 -1
  2742. package/dist/src/tui/tui-timeline-picker.js.map +0 -1
  2743. package/dist/src/tui/tui-timeline.js.map +0 -1
  2744. package/dist/src/tui/tui-tool-diff.js.map +0 -1
  2745. package/dist/src/tui/tui-tool-result.js.map +0 -1
  2746. package/dist/src/tui/tui-transcript-tree-picker.js.map +0 -1
  2747. package/dist/src/tui/tui-transcript-tree.js.map +0 -1
  2748. package/dist/src/tui/tui-types.js.map +0 -1
  2749. package/dist/src/tui/tui-workflow-slash.js.map +0 -1
  2750. package/dist/src/tui/tui.js.map +0 -1
  2751. package/dist/src/tui/xopc-tui-keybindings.js.map +0 -1
  2752. package/dist/src/tunnel/broker-client.js.map +0 -1
  2753. package/dist/src/tunnel/consent.js.map +0 -1
  2754. package/dist/src/tunnel/enable-lan-pairing.js.map +0 -1
  2755. package/dist/src/tunnel/env.js.map +0 -1
  2756. package/dist/src/tunnel/frp-subdomain-host.js.map +0 -1
  2757. package/dist/src/tunnel/frpc-binary.js.map +0 -1
  2758. package/dist/src/tunnel/frpc-config.js.map +0 -1
  2759. package/dist/src/tunnel/frpc-extract.js.map +0 -1
  2760. package/dist/src/tunnel/frpc-process.js.map +0 -1
  2761. package/dist/src/tunnel/gateway-lifecycle.js.map +0 -1
  2762. package/dist/src/tunnel/pair-context.js.map +0 -1
  2763. package/dist/src/tunnel/pair-url.js.map +0 -1
  2764. package/dist/src/tunnel/pairing-rate-limit.js.map +0 -1
  2765. package/dist/src/tunnel/pairing.js.map +0 -1
  2766. package/dist/src/tunnel/tunnel-audit.js.map +0 -1
  2767. package/dist/src/tunnel/tunnel-config.js.map +0 -1
  2768. package/dist/src/tunnel/tunnel-persist.js.map +0 -1
  2769. package/dist/src/tunnel/tunnel-qr.js.map +0 -1
  2770. package/dist/src/tunnel/tunnel-rate-limit.js.map +0 -1
  2771. package/dist/src/tunnel/tunnel-service.js.map +0 -1
  2772. package/dist/src/tunnel/tunnel-state.js.map +0 -1
  2773. package/dist/src/tunnel/well-known.js.map +0 -1
  2774. package/dist/src/user-context/config.js.map +0 -1
  2775. package/dist/src/user-context/import.js.map +0 -1
  2776. package/dist/src/user-context/owner.js.map +0 -1
  2777. package/dist/src/user-context/profile.js.map +0 -1
  2778. package/dist/src/user-context/projection.js.map +0 -1
  2779. package/dist/src/user-context/runtime.js.map +0 -1
  2780. package/dist/src/user-context/source-recommendations.js.map +0 -1
  2781. package/dist/src/user-context/trust-policy.js.map +0 -1
  2782. package/dist/src/utils/global-singleton.js.map +0 -1
  2783. package/dist/src/utils/helpers.js.map +0 -1
  2784. package/dist/src/utils/index.js.map +0 -1
  2785. package/dist/src/utils/is-record.js.map +0 -1
  2786. package/dist/src/utils/logger/audit.js.map +0 -1
  2787. package/dist/src/utils/logger/config.js.map +0 -1
  2788. package/dist/src/utils/logger/context.js.map +0 -1
  2789. package/dist/src/utils/logger/exporters.js.map +0 -1
  2790. package/dist/src/utils/logger/index.js.map +0 -1
  2791. package/dist/src/utils/logger/log-store.js.map +0 -1
  2792. package/dist/src/utils/logger/log-stream.js.map +0 -1
  2793. package/dist/src/utils/logger/pino-record.js.map +0 -1
  2794. package/dist/src/utils/logger/redact.js.map +0 -1
  2795. package/dist/src/utils/logger/rotation.js.map +0 -1
  2796. package/dist/src/utils/logger/shutdown.js.map +0 -1
  2797. package/dist/src/utils/logger/stats.js.map +0 -1
  2798. package/dist/src/utils/logger/streams.js.map +0 -1
  2799. package/dist/src/utils/logger/types.js.map +0 -1
  2800. package/dist/src/utils/logger.js.map +0 -1
  2801. package/dist/src/utils/redact-sensitive-url.js.map +0 -1
  2802. package/dist/src/utils/sanitize-log.js.map +0 -1
  2803. package/dist/src/utils/string-coerce.js.map +0 -1
  2804. package/dist/src/voice/language-profile.js.map +0 -1
  2805. package/dist/src/voice/local/model-files.js.map +0 -1
  2806. package/dist/src/voice/local/model-manager.js.map +0 -1
  2807. package/dist/src/voice/local/models.js.map +0 -1
  2808. package/dist/src/voice/local/runtime-client.js.map +0 -1
  2809. package/dist/src/voice/local/runtime-dispatcher.js.map +0 -1
  2810. package/dist/src/voice/local/runtime-worker.js.map +0 -1
  2811. package/dist/src/voice/local/wav.js.map +0 -1
  2812. package/dist/src/voice/metadata/builtin.js.map +0 -1
  2813. package/dist/src/voice/metadata/registry.js.map +0 -1
  2814. package/dist/src/voice/stt/availability.js.map +0 -1
  2815. package/dist/src/voice/stt/config-slice.js.map +0 -1
  2816. package/dist/src/voice/stt/factory.js.map +0 -1
  2817. package/dist/src/voice/stt/index.js.map +0 -1
  2818. package/dist/src/voice/stt/list-providers.js.map +0 -1
  2819. package/dist/src/voice/stt/mention.js.map +0 -1
  2820. package/dist/src/voice/stt/preflight.js.map +0 -1
  2821. package/dist/src/voice/stt/providers/alibaba-transcription.js.map +0 -1
  2822. package/dist/src/voice/stt/providers/local-transcription.js.map +0 -1
  2823. package/dist/src/voice/stt/providers/openai-transcription.js.map +0 -1
  2824. package/dist/src/voice/stt/transcribe-core.js.map +0 -1
  2825. package/dist/src/voice/stt/types.js.map +0 -1
  2826. package/dist/src/voice/tts/audio.js.map +0 -1
  2827. package/dist/src/voice/tts/config-slice.js.map +0 -1
  2828. package/dist/src/voice/tts/directives.js.map +0 -1
  2829. package/dist/src/voice/tts/factory.js.map +0 -1
  2830. package/dist/src/voice/tts/list-providers.js.map +0 -1
  2831. package/dist/src/voice/tts/merge-config.js.map +0 -1
  2832. package/dist/src/voice/tts/openai-compatible-speech.js.map +0 -1
  2833. package/dist/src/voice/tts/payload.js.map +0 -1
  2834. package/dist/src/voice/tts/preprocess.js.map +0 -1
  2835. package/dist/src/voice/tts/providers/alibaba-speech.js.map +0 -1
  2836. package/dist/src/voice/tts/providers/edge-speech.js.map +0 -1
  2837. package/dist/src/voice/tts/providers/minimax-speech.js.map +0 -1
  2838. package/dist/src/voice/tts/providers/openai-speech.js.map +0 -1
  2839. package/dist/src/voice/tts/sentence-boundary.js.map +0 -1
  2840. package/dist/src/voice/tts/service.js.map +0 -1
  2841. package/dist/src/voice/tts/speak-core.js.map +0 -1
  2842. package/dist/src/voice/tts/speech-registry.js.map +0 -1
  2843. package/dist/src/voice/tts/status-tracker.js.map +0 -1
  2844. package/dist/src/voice/tts/summarize.js.map +0 -1
  2845. package/dist/src/voice/tts/types.js.map +0 -1
  2846. package/dist/src/work-discovery/analyzer.js.map +0 -1
  2847. package/dist/src/work-discovery/probe.js.map +0 -1
  2848. package/dist/src/work-discovery/repository.js.map +0 -1
  2849. package/dist/src/work-discovery/service.js.map +0 -1
  2850. package/dist/src/work-items/agent-context.js.map +0 -1
  2851. package/dist/src/work-items/work-item-service.js.map +0 -1
  2852. package/dist/src/work-items/work-item-store.js.map +0 -1
  2853. package/dist/src/work-items/work-item-workflow-judge.js.map +0 -1
  2854. package/dist/src/workflows/authoring/workflow-draft-store.js.map +0 -1
  2855. package/dist/src/workflows/domain/definition-utils.js.map +0 -1
  2856. package/dist/src/workflows/domain/run.js.map +0 -1
  2857. package/dist/src/workflows/domain/schema-validation.js.map +0 -1
  2858. package/dist/src/workflows/domain/validation.js.map +0 -1
  2859. package/dist/src/workflows/draft/workflow-draft-prompt.js.map +0 -1
  2860. package/dist/src/workflows/draft/workflow-draft-service.js.map +0 -1
  2861. package/dist/src/workflows/draft/workflow-draft-validator.js.map +0 -1
  2862. package/dist/src/workflows/engine/projector.js.map +0 -1
  2863. package/dist/src/workflows/engine/workflow-engine.js.map +0 -1
  2864. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +0 -1
  2865. package/dist/src/workflows/runtime/graph-workflow-runtime.js.map +0 -1
  2866. package/dist/src/workflows/service/run-view-to-snapshot.js.map +0 -1
  2867. package/dist/src/workflows/service/workflow-run-service.js.map +0 -1
  2868. package/dist/src/workflows/service/workflow-session-bridge.js.map +0 -1
  2869. package/dist/src/workflows/service/workflow-session-key.js.map +0 -1
  2870. package/dist/src/workflows/store/event-store.js.map +0 -1
  2871. package/dist/src/workflows/store/paths.js.map +0 -1
  2872. package/dist/src/workflows/store/run-index-store.js.map +0 -1
  2873. package/dist/src/workflows/store/run-store.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.js","names":["undiciFetch"],"sources":["../../../../../extensions/weixin/src/api/api.ts"],"sourcesContent":["import crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { Agent, EnvHttpProxyAgent, type Dispatcher, fetch as undiciFetch } from \"undici\";\n\nimport { hasProxyEnv } from \"../../../../src/infra/http-proxy-env.js\";\n\nimport { logger } from \"../util/logger.js\";\nimport { redactBody, redactUrl } from \"../util/redact.js\";\n\nimport type {\n BaseInfo,\n GetUploadUrlReq,\n GetUploadUrlResp,\n GetUpdatesReq,\n GetUpdatesResp,\n SendMessageReq,\n SendMessageResp,\n SendTypingReq,\n GetConfigResp,\n} from \"./types.js\";\n\nexport type WeixinApiOptions = {\n baseUrl: string;\n token?: string;\n timeoutMs?: number;\n /** Long-poll timeout for getUpdates (server may hold the request up to this). */\n longPollTimeoutMs?: number;\n /** Optional ilink SKRouteTag (from config / account). */\n routeTag?: string;\n};\n\n// ---------------------------------------------------------------------------\n// BaseInfo — attached to every outgoing CGI request\n// ---------------------------------------------------------------------------\n\ninterface PackageJson {\n name?: string;\n version?: string;\n ilink_appid?: string;\n}\n\nfunction readPackageJson(): PackageJson {\n try {\n const dir = path.dirname(fileURLToPath(import.meta.url));\n const pkgPath = path.resolve(dir, \"..\", \"..\", \"package.json\");\n return JSON.parse(fs.readFileSync(pkgPath, \"utf-8\")) as PackageJson;\n } catch {\n return {};\n }\n}\n\nconst pkg = readPackageJson();\n\nconst CHANNEL_VERSION = pkg.version ?? \"unknown\";\n\n/** iLink-App-Id: from package.json `ilink_appid`. */\nconst ILINK_APP_ID: string = pkg.ilink_appid ?? \"\";\n\n/**\n * iLink-App-ClientVersion: uint32 encoded as 0x00MMNNPP\n * High 8 bits fixed to 0; remaining bits: major<<16 | minor<<8 | patch.\n */\nfunction buildClientVersion(version: string): number {\n const parts = version.split(\".\").map((p) => parseInt(p, 10));\n const major = parts[0] ?? 0;\n const minor = parts[1] ?? 0;\n const patch = parts[2] ?? 0;\n return ((major & 0xff) << 16) | ((minor & 0xff) << 8) | (patch & 0xff);\n}\n\nconst ILINK_APP_CLIENT_VERSION: number = buildClientVersion(pkg.version ?? \"0.0.0\");\n\n/** Build the `base_info` payload included in every API request. */\nexport function buildBaseInfo(): BaseInfo {\n return { channel_version: CHANNEL_VERSION };\n}\n\n/** Default timeout for long-poll getUpdates requests. */\nconst DEFAULT_LONG_POLL_TIMEOUT_MS = 35_000;\n/** Extra time beyond client long-poll timeout for undici `headersTimeout` (server may idle before first byte). */\nconst LONG_POLL_HEADERS_SLACK_MS = 15_000;\n/** Default timeout for regular API requests (sendMessage, getUploadUrl). */\nconst DEFAULT_API_TIMEOUT_MS = 15_000;\n/** Default timeout for lightweight API requests (getConfig, sendTyping). */\nconst DEFAULT_CONFIG_TIMEOUT_MS = 10_000;\n\nfunction ensureTrailingSlash(url: string): string {\n return url.endsWith(\"/\") ? url : `${url}/`;\n}\n\nfunction isUndiciHeadersTimeout(err: unknown): boolean {\n return (\n typeof err === \"object\" &&\n err !== null &&\n \"code\" in err &&\n (err as { code?: string }).code === \"UND_ERR_HEADERS_TIMEOUT\"\n );\n}\n\n/** X-WECHAT-UIN header: random uint32 -> decimal string -> base64. */\nfunction randomWechatUin(): string {\n const uint32 = crypto.randomBytes(4).readUInt32BE(0);\n return Buffer.from(String(uint32), \"utf-8\").toString(\"base64\");\n}\n\n/** Build headers shared by GET and POST requests. */\nfunction buildCommonHeaders(routeTag?: string): Record<string, string> {\n const headers: Record<string, string> = {\n \"iLink-App-Id\": ILINK_APP_ID,\n \"iLink-App-ClientVersion\": String(ILINK_APP_CLIENT_VERSION),\n };\n const tag = routeTag?.trim();\n if (tag) {\n headers.SKRouteTag = tag;\n }\n return headers;\n}\n\nfunction buildHeaders(opts: { token?: string; body: string; routeTag?: string }): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n AuthorizationType: \"ilink_bot_token\",\n \"Content-Length\": String(Buffer.byteLength(opts.body, \"utf-8\")),\n \"X-WECHAT-UIN\": randomWechatUin(),\n ...buildCommonHeaders(opts.routeTag),\n };\n if (opts.token?.trim()) {\n headers.Authorization = `Bearer ${opts.token.trim()}`;\n }\n logger.debug(\n `requestHeaders: ${JSON.stringify({ ...headers, Authorization: headers.Authorization ? \"Bearer ***\" : undefined })}`,\n );\n return headers;\n}\n\n/**\n * GET fetch wrapper (QR login and other GET endpoints).\n */\nexport async function apiGetFetch(params: {\n baseUrl: string;\n endpoint: string;\n timeoutMs?: number;\n label: string;\n routeTag?: string;\n}): Promise<string> {\n const base = ensureTrailingSlash(params.baseUrl);\n const url = new URL(params.endpoint, base);\n const hdrs = buildCommonHeaders(params.routeTag);\n logger.debug(`GET ${redactUrl(url.toString())}`);\n\n const timeoutMs = params.timeoutMs;\n const controller =\n timeoutMs != null && timeoutMs > 0 ? new AbortController() : undefined;\n const t =\n controller != null && timeoutMs != null\n ? setTimeout(() => controller.abort(), timeoutMs)\n : undefined;\n try {\n const res = await fetch(url.toString(), {\n method: \"GET\",\n headers: hdrs,\n ...(controller ? { signal: controller.signal } : {}),\n // 复用连接,避免 VPN/网络不稳定时卡住\n keepalive: true,\n });\n if (t !== undefined) clearTimeout(t);\n const rawText = await res.text();\n logger.debug(`${params.label} status=${res.status} raw=${redactBody(rawText)}`);\n if (!res.ok) {\n throw new Error(`${params.label} ${res.status}: ${rawText}`);\n }\n return rawText;\n } catch (err) {\n if (t !== undefined) clearTimeout(t);\n throw err;\n }\n}\n\n/**\n * Common POST fetch wrapper: POST JSON to a Weixin API endpoint with timeout + abort.\n */\nasync function apiPostFetch(params: {\n baseUrl: string;\n endpoint: string;\n body: string;\n token?: string;\n timeoutMs: number;\n label: string;\n routeTag?: string;\n dispatcher?: Dispatcher;\n keepalive?: boolean;\n abortSignal?: AbortSignal;\n}): Promise<string> {\n const base = ensureTrailingSlash(params.baseUrl);\n const url = new URL(params.endpoint, base);\n const hdrs = buildHeaders({ token: params.token, body: params.body, routeTag: params.routeTag });\n logger.debug(`POST ${redactUrl(url.toString())} body=${redactBody(params.body)}`);\n\n const controller = new AbortController();\n const t = setTimeout(() => controller.abort(), params.timeoutMs);\n const signal =\n params.abortSignal != null\n ? AbortSignal.any([controller.signal, params.abortSignal])\n : controller.signal;\n const keepalive = params.keepalive ?? true;\n try {\n const init: RequestInit = {\n method: \"POST\",\n headers: hdrs,\n body: params.body,\n signal,\n keepalive,\n };\n // `dispatcher` is an undici extension. Node's `fetch` types come from `undici-types`,\n // which may not match the installed undici version's `Dispatcher` type.\n if (params.dispatcher) (init as any).dispatcher = params.dispatcher;\n\n // Use undici's fetch implementation so `dispatcher` is interpreted consistently.\n const res = await undiciFetch(url.toString(), init as any);\n clearTimeout(t);\n const rawText = await res.text();\n logger.debug(`${params.label} status=${res.status} raw=${redactBody(rawText)}`);\n if (!res.ok) {\n throw new Error(`${params.label} ${res.status}: ${rawText}`);\n }\n return rawText;\n } catch (err) {\n clearTimeout(t);\n throw err;\n }\n}\n\n/**\n * Long-poll getUpdates. Server should hold the request until new messages or timeout.\n *\n * On client-side timeout (no server response within timeoutMs), returns an empty response\n * with ret=0 so the caller can simply retry. This is normal for long-poll.\n */\nexport async function getUpdates(\n params: GetUpdatesReq & {\n baseUrl: string;\n token?: string;\n timeoutMs?: number;\n routeTag?: string;\n abortSignal?: AbortSignal;\n },\n): Promise<GetUpdatesResp> {\n const timeout = params.timeoutMs ?? DEFAULT_LONG_POLL_TIMEOUT_MS;\n const headersTimeout = timeout + LONG_POLL_HEADERS_SLACK_MS;\n const agentOpts = {\n connectTimeout: 60_000,\n headersTimeout,\n bodyTimeout: headersTimeout,\n };\n const agent = hasProxyEnv() ? new EnvHttpProxyAgent(agentOpts) : new Agent(agentOpts);\n try {\n const rawText = await apiPostFetch({\n baseUrl: params.baseUrl,\n endpoint: \"ilink/bot/getupdates\",\n body: JSON.stringify({\n get_updates_buf: params.get_updates_buf ?? \"\",\n base_info: buildBaseInfo(),\n }),\n token: params.token,\n timeoutMs: timeout,\n label: \"getUpdates\",\n routeTag: params.routeTag,\n dispatcher: agent,\n keepalive: true,\n abortSignal: params.abortSignal,\n });\n const resp: GetUpdatesResp = JSON.parse(rawText);\n return resp;\n } catch (err) {\n if (params.abortSignal?.aborted && err instanceof Error && err.name === \"AbortError\") {\n throw err;\n }\n if (err instanceof Error && err.name === \"AbortError\") {\n logger.debug(`getUpdates: client-side timeout after ${timeout}ms, returning empty response`);\n return { ret: 0, msgs: [], get_updates_buf: params.get_updates_buf };\n }\n if (isUndiciHeadersTimeout(err)) {\n logger.debug(\n `getUpdates: undici headers timeout (UND_ERR_HEADERS_TIMEOUT), returning empty response`,\n );\n return { ret: 0, msgs: [], get_updates_buf: params.get_updates_buf ?? \"\" };\n }\n throw err;\n } finally {\n try {\n await agent.close();\n } catch {\n // ignore\n }\n }\n}\n\n/** Get a pre-signed CDN upload URL for a file. */\nexport async function getUploadUrl(\n params: GetUploadUrlReq & WeixinApiOptions,\n): Promise<GetUploadUrlResp> {\n const rawText = await apiPostFetch({\n baseUrl: params.baseUrl,\n endpoint: \"ilink/bot/getuploadurl\",\n body: JSON.stringify({\n filekey: params.filekey,\n media_type: params.media_type,\n to_user_id: params.to_user_id,\n rawsize: params.rawsize,\n rawfilemd5: params.rawfilemd5,\n filesize: params.filesize,\n thumb_rawsize: params.thumb_rawsize,\n thumb_rawfilemd5: params.thumb_rawfilemd5,\n thumb_filesize: params.thumb_filesize,\n no_need_thumb: params.no_need_thumb,\n aeskey: params.aeskey,\n base_info: buildBaseInfo(),\n }),\n token: params.token,\n timeoutMs: params.timeoutMs ?? DEFAULT_API_TIMEOUT_MS,\n label: \"getUploadUrl\",\n routeTag: params.routeTag,\n });\n const resp: GetUploadUrlResp = JSON.parse(rawText);\n return resp;\n}\n\nfunction assertSendMessageOk(resp: SendMessageResp): void {\n if (typeof resp.ret === \"number\" && resp.ret !== 0) {\n throw new Error(`sendMessage ret=${resp.ret} errmsg=${resp.errmsg ?? \"\"}`);\n }\n if (typeof resp.errcode === \"number\" && resp.errcode !== 0) {\n throw new Error(`sendMessage errcode=${resp.errcode} errmsg=${resp.errmsg ?? \"\"}`);\n }\n}\n\n/** Send a single message downstream. Returns parsed body (incl. refreshed `context_token` when present). */\nexport async function sendMessage(\n params: WeixinApiOptions & { body: SendMessageReq },\n): Promise<SendMessageResp> {\n const rawText = await apiPostFetch({\n baseUrl: params.baseUrl,\n endpoint: \"ilink/bot/sendmessage\",\n body: JSON.stringify({ ...params.body, base_info: buildBaseInfo() }),\n token: params.token,\n timeoutMs: params.timeoutMs ?? DEFAULT_API_TIMEOUT_MS,\n label: \"sendMessage\",\n routeTag: params.routeTag,\n });\n const t = rawText.trim();\n if (!t.startsWith(\"{\")) {\n return {};\n }\n let resp: SendMessageResp;\n try {\n resp = JSON.parse(t) as SendMessageResp;\n } catch (e) {\n throw new Error(`sendMessage invalid JSON: ${String(e)}`);\n }\n assertSendMessageOk(resp);\n return resp;\n}\n\n/** Fetch bot config (includes typing_ticket) for a given user. */\nexport async function getConfig(\n params: WeixinApiOptions & { ilinkUserId: string; contextToken?: string },\n): Promise<GetConfigResp> {\n const rawText = await apiPostFetch({\n baseUrl: params.baseUrl,\n endpoint: \"ilink/bot/getconfig\",\n body: JSON.stringify({\n ilink_user_id: params.ilinkUserId,\n context_token: params.contextToken,\n base_info: buildBaseInfo(),\n }),\n token: params.token,\n timeoutMs: params.timeoutMs ?? DEFAULT_CONFIG_TIMEOUT_MS,\n label: \"getConfig\",\n routeTag: params.routeTag,\n });\n const resp: GetConfigResp = JSON.parse(rawText);\n return resp;\n}\n\n/** Send a typing indicator to a user. */\nexport async function sendTyping(\n params: WeixinApiOptions & { body: SendTypingReq },\n): Promise<void> {\n await apiPostFetch({\n baseUrl: params.baseUrl,\n endpoint: \"ilink/bot/sendtyping\",\n body: JSON.stringify({ ...params.body, base_info: buildBaseInfo() }),\n token: params.token,\n timeoutMs: params.timeoutMs ?? DEFAULT_CONFIG_TIMEOUT_MS,\n label: \"sendTyping\",\n routeTag: params.routeTag,\n });\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-cache.js","names":[],"sources":["../../../../../extensions/weixin/src/api/config-cache.ts"],"sourcesContent":["import { getConfig } from \"./api.js\";\n\n/** Subset of getConfig fields that we actually need; add new fields here as needed. */\nexport interface CachedConfig {\n typingTicket: string;\n}\n\nconst CONFIG_CACHE_TTL_MS = 24 * 60 * 60 * 1000;\nconst CONFIG_CACHE_INITIAL_RETRY_MS = 2_000;\nconst CONFIG_CACHE_MAX_RETRY_MS = 60 * 60 * 1000;\n\ninterface ConfigCacheEntry {\n config: CachedConfig;\n everSucceeded: boolean;\n nextFetchAt: number;\n retryDelayMs: number;\n}\n\n/**\n * Per-user getConfig cache with periodic random refresh (within 24h) and\n * exponential-backoff retry (up to 1h) on failure.\n */\nexport class WeixinConfigManager {\n private cache = new Map<string, ConfigCacheEntry>();\n\n constructor(\n private apiOpts: { baseUrl: string; token?: string; routeTag?: string },\n private log: (msg: string) => void,\n ) {}\n\n async getForUser(userId: string, contextToken?: string): Promise<CachedConfig> {\n const now = Date.now();\n const entry = this.cache.get(userId);\n const shouldFetch = !entry || now >= entry.nextFetchAt;\n\n if (shouldFetch) {\n let fetchOk = false;\n try {\n const resp = await getConfig({\n baseUrl: this.apiOpts.baseUrl,\n token: this.apiOpts.token,\n routeTag: this.apiOpts.routeTag,\n ilinkUserId: userId,\n contextToken,\n });\n if (resp.ret === 0) {\n this.cache.set(userId, {\n config: { typingTicket: resp.typing_ticket ?? \"\" },\n everSucceeded: true,\n nextFetchAt: now + Math.random() * CONFIG_CACHE_TTL_MS,\n retryDelayMs: CONFIG_CACHE_INITIAL_RETRY_MS,\n });\n this.log(\n `[weixin] config ${entry?.everSucceeded ? \"refreshed\" : \"cached\"} for ${userId}`,\n );\n fetchOk = true;\n }\n } catch (err) {\n this.log(`[weixin] getConfig failed for ${userId} (ignored): ${String(err)}`);\n }\n if (!fetchOk) {\n const prevDelay = entry?.retryDelayMs ?? CONFIG_CACHE_INITIAL_RETRY_MS;\n const nextDelay = Math.min(prevDelay * 2, CONFIG_CACHE_MAX_RETRY_MS);\n if (entry) {\n entry.nextFetchAt = now + nextDelay;\n entry.retryDelayMs = nextDelay;\n } else {\n this.cache.set(userId, {\n config: { typingTicket: \"\" },\n everSucceeded: false,\n nextFetchAt: now + CONFIG_CACHE_INITIAL_RETRY_MS,\n retryDelayMs: CONFIG_CACHE_INITIAL_RETRY_MS,\n });\n }\n }\n }\n\n return this.cache.get(userId)?.config ?? { typingTicket: \"\" };\n }\n}\n"],"mappings":";;AAOA,MAAM,sBAAsB,OAAU,KAAK;AAC3C,MAAM,gCAAgC;AACtC,MAAM,4BAA4B,OAAU;;;;;AAa5C,IAAa,sBAAb,MAAiC;CAC/B,wBAAgB,IAAI,KAA+B;CAEnD,YACE,SACA,KACA;AAFQ,OAAA,UAAA;AACA,OAAA,MAAA;;CAGV,MAAM,WAAW,QAAgB,cAA8C;EAC7E,MAAM,MAAM,KAAK,KAAK;EACtB,MAAM,QAAQ,KAAK,MAAM,IAAI,OAAO;AAGpC,MAFoB,CAAC,SAAS,OAAO,MAAM,aAE1B;GACf,IAAI,UAAU;AACd,OAAI;IACF,MAAM,OAAO,MAAM,UAAU;KAC3B,SAAS,KAAK,QAAQ;KACtB,OAAO,KAAK,QAAQ;KACpB,UAAU,KAAK,QAAQ;KACvB,aAAa;KACb;KACD,CAAC;AACF,QAAI,KAAK,QAAQ,GAAG;AAClB,UAAK,MAAM,IAAI,QAAQ;MACrB,QAAQ,EAAE,cAAc,KAAK,iBAAiB,IAAI;MAClD,eAAe;MACf,aAAa,MAAM,KAAK,QAAQ,GAAG;MACnC,cAAc;MACf,CAAC;AACF,UAAK,IACH,mBAAmB,OAAO,gBAAgB,cAAc,SAAS,OAAO,SACzE;AACD,eAAU;;YAEL,KAAK;AACZ,SAAK,IAAI,iCAAiC,OAAO,cAAc,OAAO,IAAI,GAAG;;AAE/E,OAAI,CAAC,SAAS;IACZ,MAAM,YAAY,OAAO,gBAAgB;IACzC,MAAM,YAAY,KAAK,IAAI,YAAY,GAAG,0BAA0B;AACpE,QAAI,OAAO;AACT,WAAM,cAAc,MAAM;AAC1B,WAAM,eAAe;UAErB,MAAK,MAAM,IAAI,QAAQ;KACrB,QAAQ,EAAE,cAAc,IAAI;KAC5B,eAAe;KACf,aAAa,MAAM;KACnB,cAAc;KACf,CAAC;;;AAKR,SAAO,KAAK,MAAM,IAAI,OAAO,EAAE,UAAU,EAAE,cAAc,IAAI"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-guard.js","names":[],"sources":["../../../../../extensions/weixin/src/api/session-guard.ts"],"sourcesContent":["import { logger } from \"../util/logger.js\";\n\nconst SESSION_PAUSE_DURATION_MS = 60 * 60 * 1000;\n\n/** Error code returned by the server when the bot session has expired. */\nexport const SESSION_EXPIRED_ERRCODE = -14;\n\nconst pauseUntilMap = new Map<string, number>();\n\n/** Pause all inbound/outbound API calls for `accountId` for one hour. */\nexport function pauseSession(accountId: string): void {\n const until = Date.now() + SESSION_PAUSE_DURATION_MS;\n pauseUntilMap.set(accountId, until);\n logger.info(\n `session-guard: paused accountId=${accountId} until=${new Date(until).toISOString()} (${SESSION_PAUSE_DURATION_MS / 1000}s)`,\n );\n}\n\n/** Returns `true` when the bot is still within its one-hour cooldown window. */\nexport function isSessionPaused(accountId: string): boolean {\n const until = pauseUntilMap.get(accountId);\n if (until === undefined) return false;\n if (Date.now() >= until) {\n pauseUntilMap.delete(accountId);\n return false;\n }\n return true;\n}\n\n/** Milliseconds remaining until the pause expires (0 when not paused). */\nexport function getRemainingPauseMs(accountId: string): number {\n const until = pauseUntilMap.get(accountId);\n if (until === undefined) return 0;\n const remaining = until - Date.now();\n if (remaining <= 0) {\n pauseUntilMap.delete(accountId);\n return 0;\n }\n return remaining;\n}\n\n/** Throw if the session is currently paused. Call before any API request. */\nexport function assertSessionActive(accountId: string): void {\n if (isSessionPaused(accountId)) {\n const remainingMin = Math.ceil(getRemainingPauseMs(accountId) / 60_000);\n throw new Error(\n `session paused for accountId=${accountId}, ${remainingMin} min remaining (errcode ${SESSION_EXPIRED_ERRCODE})`,\n );\n }\n}\n\n/**\n * Reset internal state — only for tests.\n * @internal\n */\nexport function _resetForTest(): void {\n pauseUntilMap.clear();\n}\n"],"mappings":";;AAEA,MAAM,4BAA4B,OAAU;;AAG5C,MAAa,0BAA0B;AAEvC,MAAM,gCAAgB,IAAI,KAAqB;;AAG/C,SAAgB,aAAa,WAAyB;CACpD,MAAM,QAAQ,KAAK,KAAK,GAAG;AAC3B,eAAc,IAAI,WAAW,MAAM;AACnC,QAAO,KACL,mCAAmC,UAAU,SAAS,IAAI,KAAK,MAAM,CAAC,aAAa,CAAC,IAAI,4BAA4B,IAAK,IAC1H;;;AAIH,SAAgB,gBAAgB,WAA4B;CAC1D,MAAM,QAAQ,cAAc,IAAI,UAAU;AAC1C,KAAI,UAAU,KAAA,EAAW,QAAO;AAChC,KAAI,KAAK,KAAK,IAAI,OAAO;AACvB,gBAAc,OAAO,UAAU;AAC/B,SAAO;;AAET,QAAO;;;AAIT,SAAgB,oBAAoB,WAA2B;CAC7D,MAAM,QAAQ,cAAc,IAAI,UAAU;AAC1C,KAAI,UAAU,KAAA,EAAW,QAAO;CAChC,MAAM,YAAY,QAAQ,KAAK,KAAK;AACpC,KAAI,aAAa,GAAG;AAClB,gBAAc,OAAO,UAAU;AAC/B,SAAO;;AAET,QAAO;;;AAIT,SAAgB,oBAAoB,WAAyB;AAC3D,KAAI,gBAAgB,UAAU,EAAE;EAC9B,MAAM,eAAe,KAAK,KAAK,oBAAoB,UAAU,GAAG,IAAO;AACvE,QAAM,IAAI,MACR,gCAAgC,UAAU,IAAI,aAAa,8BAC5D;;;;;;;AAQL,SAAgB,gBAAsB;AACpC,eAAc,OAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../../extensions/weixin/src/api/types.ts"],"sourcesContent":["/**\n * Weixin protocol types (mirrors proto: GetUpdatesReq/Resp, WeixinMessage, SendMessageReq).\n * API uses JSON over HTTP; bytes fields are base64 strings in JSON.\n */\n\n/** Common request metadata attached to every CGI request. */\nexport interface BaseInfo {\n channel_version?: string;\n}\n\n/** proto: UploadMediaType */\nexport const UploadMediaType = {\n IMAGE: 1,\n VIDEO: 2,\n FILE: 3,\n VOICE: 4,\n} as const;\n\nexport interface GetUploadUrlReq {\n filekey?: string;\n /** proto field 2: media_type, see UploadMediaType */\n media_type?: number;\n to_user_id?: string;\n /** 原文件明文大小 */\n rawsize?: number;\n /** 原文件明文 MD5 */\n rawfilemd5?: string;\n /** 原文件密文大小(AES-128-ECB 加密后) */\n filesize?: number;\n /** 缩略图明文大小(IMAGE/VIDEO 时必填) */\n thumb_rawsize?: number;\n /** 缩略图明文 MD5(IMAGE/VIDEO 时必填) */\n thumb_rawfilemd5?: string;\n /** 缩略图密文大小(IMAGE/VIDEO 时必填) */\n thumb_filesize?: number;\n /** 不需要缩略图上传 URL,默认 false */\n no_need_thumb?: boolean;\n /** 加密 key */\n aeskey?: string;\n}\n\nexport interface GetUploadUrlResp {\n /** 原图上传加密参数 */\n upload_param?: string;\n /** 缩略图上传加密参数,无缩略图时为空 */\n thumb_upload_param?: string;\n /** 完整上传 URL(服务端直接返回,无需客户端拼接) */\n upload_full_url?: string;\n}\n\nexport const MessageType = {\n NONE: 0,\n USER: 1,\n BOT: 2,\n} as const;\n\nexport const MessageItemType = {\n NONE: 0,\n TEXT: 1,\n IMAGE: 2,\n VOICE: 3,\n FILE: 4,\n VIDEO: 5,\n} as const;\n\nexport const MessageState = {\n NEW: 0,\n GENERATING: 1,\n FINISH: 2,\n} as const;\n\nexport interface TextItem {\n text?: string;\n}\n\n/** CDN media reference; aes_key is base64-encoded bytes in JSON. */\nexport interface CDNMedia {\n encrypt_query_param?: string;\n aes_key?: string;\n /** 加密类型: 0=只加密fileid, 1=打包缩略图/中图等信息 */\n encrypt_type?: number;\n /** 服务端返回的完整 CDN URL(优先于客户端拼接) */\n full_url?: string;\n}\n\nexport interface ImageItem {\n /** 原图 CDN 引用 */\n media?: CDNMedia;\n /** 缩略图 CDN 引用 */\n thumb_media?: CDNMedia;\n /** Raw AES-128 key as hex string (16 bytes); preferred over media.aes_key for inbound decryption. */\n aeskey?: string;\n url?: string;\n mid_size?: number;\n thumb_size?: number;\n thumb_height?: number;\n thumb_width?: number;\n hd_size?: number;\n}\n\nexport interface VoiceItem {\n media?: CDNMedia;\n /** 语音编码类型:1=pcm 2=adpcm 3=feature 4=speex 5=amr 6=silk 7=mp3 8=ogg-speex */\n encode_type?: number;\n /** Ciphertext size after AES-128-ECB (same role as ImageItem.mid_size). */\n voice_size?: number;\n bits_per_sample?: number;\n /** 采样率 (Hz) */\n sample_rate?: number;\n /** 语音长度 (毫秒) */\n playtime?: number;\n /** 语音转文字内容 */\n text?: string;\n}\n\nexport interface FileItem {\n media?: CDNMedia;\n file_name?: string;\n md5?: string;\n len?: string;\n}\n\nexport interface VideoItem {\n media?: CDNMedia;\n video_size?: number;\n play_length?: number;\n video_md5?: string;\n thumb_media?: CDNMedia;\n thumb_size?: number;\n thumb_height?: number;\n thumb_width?: number;\n}\n\nexport interface RefMessage {\n message_item?: MessageItem;\n title?: string; // 摘要\n}\n\nexport interface MessageItem {\n type?: number;\n create_time_ms?: number;\n update_time_ms?: number;\n is_completed?: boolean;\n msg_id?: string;\n ref_msg?: RefMessage;\n text_item?: TextItem;\n image_item?: ImageItem;\n voice_item?: VoiceItem;\n file_item?: FileItem;\n video_item?: VideoItem;\n}\n\n/** Unified message (proto: WeixinMessage). Replaces the old split Message + MessageContent + FullMessage. */\nexport interface WeixinMessage {\n seq?: number;\n message_id?: number;\n from_user_id?: string;\n to_user_id?: string;\n client_id?: string;\n create_time_ms?: number;\n update_time_ms?: number;\n delete_time_ms?: number;\n session_id?: string;\n group_id?: string;\n message_type?: number;\n message_state?: number;\n item_list?: MessageItem[];\n context_token?: string;\n}\n\n/** GetUpdates request: bytes fields are base64 strings in JSON. */\nexport interface GetUpdatesReq {\n /** Full context buf cached locally; send \"\" when none (first request or after reset). */\n get_updates_buf?: string;\n}\n\n/** GetUpdates response: bytes fields are base64 strings in JSON. */\nexport interface GetUpdatesResp {\n ret?: number;\n /** Error code returned by the server (e.g. -14 = session timeout). Present when request fails. */\n errcode?: number;\n errmsg?: string;\n msgs?: WeixinMessage[];\n /** Full context buf to cache locally and send on next request. */\n get_updates_buf?: string;\n /** Server-suggested timeout (ms) for the next getUpdates long-poll. */\n longpolling_timeout_ms?: number;\n}\n\n/** SendMessage request: wraps a single WeixinMessage. */\nexport interface SendMessageReq {\n msg?: WeixinMessage;\n}\n\n/** Parsed `ilink/bot/sendmessage` JSON (proto may omit fields on success). */\nexport interface SendMessageResp {\n ret?: number;\n errcode?: number;\n errmsg?: string;\n /** Updated session context for the next outbound bubble (multi-part sends). */\n msg?: WeixinMessage;\n /** Some responses carry `context_token` at top level instead of under `msg`. */\n context_token?: string;\n}\n\n/** Typing status: 1 = typing (default), 2 = cancel typing. */\nexport const TypingStatus = {\n TYPING: 1,\n CANCEL: 2,\n} as const;\n\n/** SendTyping request: send a typing indicator to a user. */\nexport interface SendTypingReq {\n ilink_user_id?: string;\n typing_ticket?: string;\n /** 1=typing (default), 2=cancel typing */\n status?: number;\n}\n\nexport interface SendTypingResp {\n ret?: number;\n errmsg?: string;\n}\n\n/** GetConfig response: bot config including typing_ticket. */\nexport interface GetConfigResp {\n ret?: number;\n errmsg?: string;\n /** Base64-encoded typing ticket for sendTyping. */\n typing_ticket?: string;\n /** Present when the server can establish DM context without a prior inbound bubble (e.g. proactive send). */\n context_token?: string;\n}\n"],"mappings":";;AAWA,MAAa,kBAAkB;CAC7B,OAAO;CACP,OAAO;CACP,MAAM;CACN,OAAO;CACR;AAkCD,MAAa,cAAc;CACzB,MAAM;CACN,MAAM;CACN,KAAK;CACN;AAED,MAAa,kBAAkB;CAC7B,MAAM;CACN,MAAM;CACN,OAAO;CACP,OAAO;CACP,MAAM;CACN,OAAO;CACR;AAED,MAAa,eAAe;CAC1B,KAAK;CACL,YAAY;CACZ,QAAQ;CACT;;AAyID,MAAa,eAAe;CAC1B,QAAQ;CACR,QAAQ;CACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"accounts.js","names":[],"sources":["../../../../../extensions/weixin/src/auth/accounts.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { Config } from '@xopcai/xopc/config/schema.js';\n\nimport { clearContextTokensForAccount } from '../messaging/inbound.js';\nimport { resolveWeixinRootDir } from '../storage/state-dir.js';\nimport { logger } from '../util/logger.js';\n\nimport { normalizeWeixinAccountId } from './weixin-account-id.js';\n\nexport { normalizeWeixinAccountId };\n\nexport const DEFAULT_BASE_URL = 'https://ilinkai.weixin.qq.com';\nexport const CDN_BASE_URL = 'https://novac2c.cdn.weixin.qq.com/c2c';\n\nfunction resolveWeixinStateDir(): string {\n return resolveWeixinRootDir();\n}\n\nfunction resolveAccountIndexPath(): string {\n return path.join(resolveWeixinStateDir(), 'accounts.json');\n}\n\nexport function listIndexedWeixinAccountIds(): string[] {\n const filePath = resolveAccountIndexPath();\n try {\n if (!fs.existsSync(filePath)) return [];\n const raw = fs.readFileSync(filePath, 'utf-8');\n const parsed = JSON.parse(raw) as unknown;\n if (!Array.isArray(parsed)) return [];\n return parsed.filter((id): id is string => typeof id === 'string' && id.trim() !== '');\n } catch {\n return [];\n }\n}\n\nexport function registerWeixinAccountId(accountId: string): void {\n const dir = resolveWeixinStateDir();\n fs.mkdirSync(dir, { recursive: true });\n\n const existing = listIndexedWeixinAccountIds();\n if (existing.includes(accountId)) return;\n\n const updated = [...existing, accountId];\n fs.writeFileSync(resolveAccountIndexPath(), JSON.stringify(updated, null, 2), 'utf-8');\n}\n\nexport function unregisterWeixinAccountId(accountId: string): void {\n const existing = listIndexedWeixinAccountIds();\n const updated = existing.filter((id) => id !== accountId);\n if (updated.length !== existing.length) {\n fs.writeFileSync(resolveAccountIndexPath(), JSON.stringify(updated, null, 2), 'utf-8');\n }\n}\n\nexport function clearStaleAccountsForUserId(\n currentAccountId: string,\n userId: string,\n onClearContextTokens?: (accountId: string) => void,\n): void {\n if (!userId) return;\n const allIds = listIndexedWeixinAccountIds();\n for (const id of allIds) {\n if (id === currentAccountId) continue;\n const data = loadWeixinAccount(id);\n if (data?.userId?.trim() === userId) {\n logger.info(`clearStaleAccountsForUserId: removing stale account=${id} (same userId=${userId})`);\n onClearContextTokens?.(id);\n clearWeixinAccount(id);\n unregisterWeixinAccountId(id);\n }\n }\n}\n\nexport type WeixinAccountData = {\n token?: string;\n savedAt?: string;\n baseUrl?: string;\n userId?: string;\n};\n\nfunction resolveAccountsDir(): string {\n return path.join(resolveWeixinStateDir(), 'accounts');\n}\n\nfunction resolveAccountPath(accountId: string): string {\n return path.join(resolveAccountsDir(), `${accountId}.json`);\n}\n\nfunction readAccountFile(filePath: string): WeixinAccountData | null {\n try {\n if (fs.existsSync(filePath)) {\n return JSON.parse(fs.readFileSync(filePath, 'utf-8')) as WeixinAccountData;\n }\n } catch {\n // ignore\n }\n return null;\n}\n\nexport function loadWeixinAccount(accountId: string): WeixinAccountData | null {\n return readAccountFile(resolveAccountPath(accountId));\n}\n\nexport function saveWeixinAccount(\n accountId: string,\n update: { token?: string; baseUrl?: string; userId?: string },\n): void {\n const dir = resolveAccountsDir();\n fs.mkdirSync(dir, { recursive: true });\n\n const existing = loadWeixinAccount(accountId) ?? {};\n\n const token = update.token?.trim() || existing.token;\n const baseUrl = update.baseUrl?.trim() || existing.baseUrl;\n const userId =\n update.userId !== undefined ? update.userId.trim() || undefined : existing.userId?.trim() || undefined;\n\n const data: WeixinAccountData = {\n ...(token ? { token, savedAt: new Date().toISOString() } : {}),\n ...(baseUrl ? { baseUrl } : {}),\n ...(userId ? { userId } : {}),\n };\n\n const filePath = resolveAccountPath(accountId);\n fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');\n try {\n fs.chmodSync(filePath, 0o600);\n } catch {\n // best-effort\n }\n}\n\nexport function clearWeixinAccount(accountId: string): void {\n const dir = resolveAccountsDir();\n const accountFiles = [\n `${accountId}.json`,\n `${accountId}.sync.json`,\n `${accountId}.context-tokens.json`,\n ];\n for (const file of accountFiles) {\n try {\n fs.unlinkSync(path.join(dir, file));\n } catch {\n // ignore\n }\n }\n try {\n fs.unlinkSync(resolveFrameworkAllowFromPath(accountId));\n } catch {\n // ignore\n }\n}\n\nexport type ResolvedWeixinAccount = {\n accountId: string;\n baseUrl: string;\n cdnBaseUrl: string;\n token?: string;\n enabled: boolean;\n configured: boolean;\n name?: string;\n dmPolicy: 'pairing' | 'allowlist' | 'open' | 'disabled';\n allowFrom: string[];\n streamMode?: 'off' | 'partial' | 'block';\n routeTag?: string;\n debug?: boolean;\n};\n\ntype WeixinAccountCfg = {\n name?: string;\n enabled?: boolean;\n cdnBaseUrl?: string;\n routeTag?: number | string;\n dmPolicy?: ResolvedWeixinAccount['dmPolicy'];\n allowFrom?: string[];\n streamMode?: ResolvedWeixinAccount['streamMode'];\n debug?: boolean;\n accounts?: Record<string, WeixinAccountCfg>;\n};\n\nfunction weixinSection(cfg: Config): (WeixinAccountCfg & { accounts?: Record<string, WeixinAccountCfg> }) | undefined {\n return cfg.channels?.weixin as\n | (WeixinAccountCfg & { accounts?: Record<string, WeixinAccountCfg> })\n | undefined;\n}\n\nexport function listWeixinAccountIds(cfg: Config): string[] {\n const section = weixinSection(cfg);\n const fromConfig = section?.accounts ? Object.keys(section.accounts) : [];\n // Only merge disk index when the channel is explicitly enabled. Otherwise removed / disabled\n // config still leaves token files + accounts.json on disk and monitors would keep running.\n if (!section || section.enabled !== true) {\n return fromConfig;\n }\n const indexed = listIndexedWeixinAccountIds();\n return [...new Set([...indexed, ...fromConfig])];\n}\n\nexport function resolveWeixinAccount(cfg: Config, accountId?: string | null): ResolvedWeixinAccount {\n const raw = accountId?.trim();\n if (!raw) {\n throw new Error('weixin: accountId is required');\n }\n const id = normalizeWeixinAccountId(raw);\n const section = weixinSection(cfg);\n const fromAccount = section?.accounts?.[id];\n const { accounts: _omit, ...sectionRest } = section ?? {};\n void _omit;\n const accountCfg: WeixinAccountCfg = {\n ...sectionRest,\n ...(fromAccount ?? {}),\n };\n\n const accountData = loadWeixinAccount(id);\n const token = accountData?.token?.trim() || undefined;\n const stateBaseUrl = accountData?.baseUrl?.trim() || '';\n\n const routeTagRaw = accountCfg.routeTag;\n const routeTag =\n typeof routeTagRaw === 'number'\n ? String(routeTagRaw)\n : typeof routeTagRaw === 'string' && routeTagRaw.trim()\n ? routeTagRaw.trim()\n : undefined;\n\n const channelEnabled = section?.enabled === true;\n\n return {\n accountId: id,\n baseUrl: stateBaseUrl || DEFAULT_BASE_URL,\n cdnBaseUrl: accountCfg.cdnBaseUrl?.trim() || CDN_BASE_URL,\n token,\n enabled: channelEnabled && accountCfg.enabled !== false,\n configured: Boolean(token),\n name: accountCfg.name?.trim() || undefined,\n dmPolicy: accountCfg.dmPolicy ?? 'open',\n allowFrom: accountCfg.allowFrom ?? [],\n streamMode: accountCfg.streamMode,\n routeTag,\n debug: accountCfg.debug ?? false,\n };\n}\n\nexport function resolveFrameworkAllowFromPath(accountId: string): string {\n const base = 'xopc-weixin'.replace(/[\\\\/:*?\"<>|]/g, '_');\n const safeAccount = accountId.trim().toLowerCase().replace(/[\\\\/:*?\"<>|]/g, '_').replace(/\\.\\./g, '_');\n const { join } = path;\n const credRoot = process.env.XOPC_CREDENTIALS_DIR?.trim()\n ? process.env.XOPC_CREDENTIALS_DIR!\n : join(resolveWeixinRootDir(), 'credentials');\n return join(credRoot, `${base}-${safeAccount}-allowFrom.json`);\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"login-qr.js","names":[],"sources":["../../../../../extensions/weixin/src/auth/login-qr.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\n\nimport { apiGetFetch } from \"../api/api.js\";\nimport { logger } from \"../util/logger.js\";\nimport { redactToken } from \"../util/redact.js\";\n\ntype ActiveLogin = {\n sessionKey: string;\n id: string;\n qrcode: string;\n qrcodeUrl: string;\n startedAt: number;\n botToken?: string;\n status?: \"wait\" | \"scaned\" | \"confirmed\" | \"expired\" | \"scaned_but_redirect\";\n error?: string;\n /** The current effective polling base URL; may be updated on IDC redirect. */\n currentApiBaseUrl?: string;\n};\n\nconst ACTIVE_LOGIN_TTL_MS = 5 * 60_000;\n/** Client-side timeout for the long-poll get_qrcode_status request. */\nconst QR_LONG_POLL_TIMEOUT_MS = 35_000;\n\n/** Default `bot_type` for ilink get_bot_qrcode / get_qrcode_status (this channel build). */\nexport const DEFAULT_ILINK_BOT_TYPE = \"3\";\n\n/** Fixed API base URL for all QR code requests. */\nconst FIXED_BASE_URL = \"https://ilinkai.weixin.qq.com\";\n\nconst activeLogins = new Map<string, ActiveLogin>();\n\ninterface QRCodeResponse {\n qrcode: string;\n qrcode_img_content: string;\n}\n\ninterface StatusResponse {\n status: \"wait\" | \"scaned\" | \"confirmed\" | \"expired\" | \"scaned_but_redirect\";\n bot_token?: string;\n ilink_bot_id?: string;\n baseurl?: string;\n /** The user ID of the person who scanned the QR code. */\n ilink_user_id?: string;\n /** New host to redirect polling to when status is scaned_but_redirect. */\n redirect_host?: string;\n}\n\nfunction isLoginFresh(login: ActiveLogin): boolean {\n return Date.now() - login.startedAt < ACTIVE_LOGIN_TTL_MS;\n}\n\n/** Remove all expired entries from the activeLogins map to prevent memory leaks. */\nfunction purgeExpiredLogins(): void {\n for (const [id, login] of activeLogins) {\n if (!isLoginFresh(login)) {\n activeLogins.delete(id);\n }\n }\n}\n\nasync function fetchQRCode(botType: string, routeTag?: string): Promise<QRCodeResponse> {\n logger.info(`Fetching QR code from: ${FIXED_BASE_URL} bot_type=${botType}`);\n const rawText = await apiGetFetch({\n baseUrl: FIXED_BASE_URL,\n endpoint: `ilink/bot/get_bot_qrcode?bot_type=${encodeURIComponent(botType)}`,\n label: \"fetchQRCode\",\n routeTag,\n });\n return JSON.parse(rawText) as QRCodeResponse;\n}\n\nasync function pollQRStatus(\n apiBaseUrl: string,\n qrcode: string,\n routeTag?: string,\n): Promise<StatusResponse> {\n logger.debug(`Long-poll QR status from: ${apiBaseUrl} qrcode=***`);\n try {\n const rawText = await apiGetFetch({\n baseUrl: apiBaseUrl,\n endpoint: `ilink/bot/get_qrcode_status?qrcode=${encodeURIComponent(qrcode)}`,\n timeoutMs: QR_LONG_POLL_TIMEOUT_MS,\n label: \"pollQRStatus\",\n routeTag,\n });\n logger.debug(`pollQRStatus: body=${rawText.substring(0, 200)}`);\n return JSON.parse(rawText) as StatusResponse;\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") {\n logger.debug(`pollQRStatus: client-side timeout after ${QR_LONG_POLL_TIMEOUT_MS}ms, returning wait`);\n return { status: \"wait\" };\n }\n logger.warn(`pollQRStatus: network/gateway error, will retry: ${String(err)}`);\n return { status: \"wait\" };\n }\n}\n\nexport type WeixinQrStartResult = {\n qrcodeUrl?: string;\n message: string;\n sessionKey: string;\n};\n\nexport type WeixinQrWaitResult = {\n connected: boolean;\n botToken?: string;\n accountId?: string;\n baseUrl?: string;\n /** The user ID of the person who scanned the QR code; add to allowFrom. */\n userId?: string;\n message: string;\n};\n\nexport async function startWeixinLoginWithQr(opts: {\n verbose?: boolean;\n timeoutMs?: number;\n force?: boolean;\n accountId?: string;\n botType?: string;\n routeTag?: string;\n}): Promise<WeixinQrStartResult> {\n const sessionKey = opts.accountId || randomUUID();\n\n purgeExpiredLogins();\n\n const existing = activeLogins.get(sessionKey);\n if (!opts.force && existing && isLoginFresh(existing) && existing.qrcodeUrl) {\n return {\n qrcodeUrl: existing.qrcodeUrl,\n message: \"二维码已就绪,请使用微信扫描。\",\n sessionKey,\n };\n }\n\n try {\n const botType = opts.botType || DEFAULT_ILINK_BOT_TYPE;\n logger.info(`Starting Weixin login with bot_type=${botType}`);\n\n const qrResponse = await fetchQRCode(botType, opts.routeTag);\n logger.info(\n `QR code received, qrcode=${redactToken(qrResponse.qrcode)} imgContentLen=${qrResponse.qrcode_img_content?.length ?? 0}`,\n );\n logger.info(`二维码链接: ${qrResponse.qrcode_img_content}`);\n\n const login: ActiveLogin = {\n sessionKey,\n id: randomUUID(),\n qrcode: qrResponse.qrcode,\n qrcodeUrl: qrResponse.qrcode_img_content,\n startedAt: Date.now(),\n };\n\n activeLogins.set(sessionKey, login);\n\n return {\n qrcodeUrl: qrResponse.qrcode_img_content,\n message: \"使用微信扫描以下二维码,以完成连接。\",\n sessionKey,\n };\n } catch (err) {\n logger.error(`Failed to start Weixin login: ${String(err)}`);\n return {\n message: `Failed to start login: ${String(err)}`,\n sessionKey,\n };\n }\n}\n\nconst MAX_QR_REFRESH_COUNT = 3;\n\nexport function getWeixinActiveLoginSnapshot(sessionKey: string): {\n qrcodeUrl: string;\n status?: ActiveLogin[\"status\"];\n} | null {\n const login = activeLogins.get(sessionKey);\n if (!login || !isLoginFresh(login)) {\n return null;\n }\n return { qrcodeUrl: login.qrcodeUrl, status: login.status };\n}\n\nexport async function waitForWeixinLogin(opts: {\n timeoutMs?: number;\n verbose?: boolean;\n /** When true, do not write to stdout (browser / gateway QR flow). */\n silent?: boolean;\n sessionKey: string;\n botType?: string;\n routeTag?: string;\n}): Promise<WeixinQrWaitResult> {\n let activeLogin = activeLogins.get(opts.sessionKey);\n\n if (!activeLogin) {\n logger.warn(`waitForWeixinLogin: no active login sessionKey=${opts.sessionKey}`);\n return {\n connected: false,\n message: \"当前没有进行中的登录,请先发起登录。\",\n };\n }\n\n if (!isLoginFresh(activeLogin)) {\n logger.warn(`waitForWeixinLogin: login QR expired sessionKey=${opts.sessionKey}`);\n activeLogins.delete(opts.sessionKey);\n return {\n connected: false,\n message: \"二维码已过期,请重新生成。\",\n };\n }\n\n const timeoutMs = Math.max(opts.timeoutMs ?? 480_000, 1000);\n const deadline = Date.now() + timeoutMs;\n let scannedPrinted = false;\n let qrRefreshCount = 1;\n const silent = Boolean(opts.silent);\n\n activeLogin.currentApiBaseUrl = FIXED_BASE_URL;\n\n logger.info(\"Starting to poll QR code status...\");\n\n while (Date.now() < deadline) {\n try {\n const currentBaseUrl = activeLogin.currentApiBaseUrl ?? FIXED_BASE_URL;\n const statusResponse = await pollQRStatus(currentBaseUrl, activeLogin.qrcode, opts.routeTag);\n logger.debug(\n `pollQRStatus: status=${statusResponse.status} hasBotToken=${Boolean(statusResponse.bot_token)} hasBotId=${Boolean(statusResponse.ilink_bot_id)}`,\n );\n activeLogin.status = statusResponse.status;\n\n switch (statusResponse.status) {\n case \"wait\":\n if (opts.verbose) {\n process.stdout.write(\".\");\n }\n break;\n case \"scaned\":\n if (!scannedPrinted && !silent) {\n process.stdout.write(\"\\n👀 已扫码,在微信继续操作...\\n\");\n scannedPrinted = true;\n } else if (!scannedPrinted) {\n scannedPrinted = true;\n }\n break;\n case \"expired\": {\n qrRefreshCount++;\n if (qrRefreshCount > MAX_QR_REFRESH_COUNT) {\n logger.warn(\n `waitForWeixinLogin: QR expired ${MAX_QR_REFRESH_COUNT} times, giving up sessionKey=${opts.sessionKey}`,\n );\n activeLogins.delete(opts.sessionKey);\n return {\n connected: false,\n message: \"登录超时:二维码多次过期,请重新开始登录流程。\",\n };\n }\n\n if (!silent) {\n process.stdout.write(`\\n⏳ 二维码已过期,正在刷新...(${qrRefreshCount}/${MAX_QR_REFRESH_COUNT})\\n`);\n }\n logger.info(\n `waitForWeixinLogin: QR expired, refreshing (${qrRefreshCount}/${MAX_QR_REFRESH_COUNT})`,\n );\n\n try {\n const botType = opts.botType || DEFAULT_ILINK_BOT_TYPE;\n const qrResponse = await fetchQRCode(botType, opts.routeTag);\n activeLogin.qrcode = qrResponse.qrcode;\n activeLogin.qrcodeUrl = qrResponse.qrcode_img_content;\n activeLogin.startedAt = Date.now();\n scannedPrinted = false;\n logger.info(`waitForWeixinLogin: new QR code obtained qrcode=${redactToken(qrResponse.qrcode)}`);\n if (!silent) {\n process.stdout.write(`🔄 新二维码已生成,请重新扫描\\n\\n`);\n try {\n const qrterm = await import(/* @vite-ignore */ \"qrcode-terminal\");\n qrterm.default.generate(qrResponse.qrcode_img_content, { small: true });\n process.stdout.write(`如果二维码未能成功展示,请用浏览器打开以下链接扫码:\\n`);\n process.stdout.write(`${qrResponse.qrcode_img_content}\\n`);\n } catch {\n process.stdout.write(`二维码未加载成功,请用浏览器打开以下链接扫码:\\n`);\n process.stdout.write(`${qrResponse.qrcode_img_content}\\n`);\n }\n }\n } catch (refreshErr) {\n logger.error(`waitForWeixinLogin: failed to refresh QR code: ${String(refreshErr)}`);\n activeLogins.delete(opts.sessionKey);\n return {\n connected: false,\n message: `刷新二维码失败: ${String(refreshErr)}`,\n };\n }\n break;\n }\n case \"scaned_but_redirect\": {\n const redirectHost = statusResponse.redirect_host;\n if (redirectHost) {\n const newBaseUrl = `https://${redirectHost}`;\n activeLogin.currentApiBaseUrl = newBaseUrl;\n logger.info(`waitForWeixinLogin: IDC redirect, switching polling host to ${redirectHost}`);\n } else {\n logger.warn(\n `waitForWeixinLogin: received scaned_but_redirect but redirect_host is missing, continuing with current host`,\n );\n }\n break;\n }\n case \"confirmed\": {\n if (!statusResponse.ilink_bot_id) {\n activeLogins.delete(opts.sessionKey);\n logger.error(\"Login confirmed but ilink_bot_id missing from response\");\n return {\n connected: false,\n message: \"登录失败:服务器未返回 ilink_bot_id。\",\n };\n }\n\n activeLogin.botToken = statusResponse.bot_token;\n activeLogins.delete(opts.sessionKey);\n\n logger.info(\n `✅ Login confirmed! ilink_bot_id=${statusResponse.ilink_bot_id} ilink_user_id=${redactToken(statusResponse.ilink_user_id)}`,\n );\n\n return {\n connected: true,\n botToken: statusResponse.bot_token,\n accountId: statusResponse.ilink_bot_id,\n baseUrl: statusResponse.baseurl,\n userId: statusResponse.ilink_user_id,\n message: \"✅ 与微信连接成功!\",\n };\n }\n }\n } catch (err) {\n logger.error(`Error polling QR status: ${String(err)}`);\n activeLogins.delete(opts.sessionKey);\n return {\n connected: false,\n message: `Login failed: ${String(err)}`,\n };\n }\n\n await new Promise((r) => setTimeout(r, 1000));\n }\n\n logger.warn(\n `waitForWeixinLogin: timed out waiting for QR scan sessionKey=${opts.sessionKey} timeoutMs=${timeoutMs}`,\n );\n activeLogins.delete(opts.sessionKey);\n return {\n connected: false,\n message: \"登录超时,请重试。\",\n };\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pairing.js","names":[],"sources":["../../../../../extensions/weixin/src/auth/pairing.ts"],"sourcesContent":["import {\n appendAllowFromIdSync,\n readAllowFromIdsSync,\n resolveWeixinAllowFromPath,\n} from '@xopcai/xopc/channels/pairing/index.js';\n\nexport { resolveFrameworkAllowFromPath } from './accounts.js';\n\nexport function readFrameworkAllowFromList(accountId: string): string[] {\n return readAllowFromIdsSync(resolveWeixinAllowFromPath(accountId));\n}\n\nexport async function registerUserInFrameworkStore(params: {\n accountId: string;\n userId: string | number;\n}): Promise<{ changed: boolean }> {\n const trimmedUserId = String(typeof params.userId === 'number' ? params.userId : params.userId.trim()).trim();\n if (!trimmedUserId) return { changed: false };\n const changed = appendAllowFromIdSync(resolveWeixinAllowFromPath(params.accountId), trimmedUserId).changed;\n return { changed };\n}\n"],"mappings":";;;;AAQA,SAAgB,2BAA2B,WAA6B;AACtE,QAAO,qBAAqB,2BAA2B,UAAU,CAAC;;AAGpE,eAAsB,6BAA6B,QAGjB;CAChC,MAAM,gBAAgB,OAAO,OAAO,OAAO,WAAW,WAAW,OAAO,SAAS,OAAO,OAAO,MAAM,CAAC,CAAC,MAAM;AAC7G,KAAI,CAAC,cAAe,QAAO,EAAE,SAAS,OAAO;AAE7C,QAAO,EAAE,SADO,sBAAsB,2BAA2B,OAAO,UAAU,EAAE,cAAc,CAAC,SACjF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"weixin-account-id.js","names":[],"sources":["../../../../../extensions/weixin/src/auth/weixin-account-id.ts"],"sourcesContent":["import { sanitizeSegment } from \"@xopcai/xopc/routing/session-key.js\";\n\n/**\n * Canonical Weixin bot account id (ilink / state paths).\n * Kept separate from `accounts.ts` so token store can import it without circular deps with `inbound`.\n */\nexport function normalizeWeixinAccountId(raw: string): string {\n return raw\n .trim()\n .toLowerCase()\n .replace(/@/g, '-')\n .replace(/\\./g, '-')\n .replace(/[^a-z0-9_-]+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n}\n\n/**\n * Peer id as in session keys / context-token map (same rules as `buildSessionKey` peer segment).\n */\nexport function canonicalWeixinPeerId(rawPeerId: string): string {\n const t = rawPeerId.trim();\n const s = sanitizeSegment(t, { allowLeadingDash: true });\n return s || t.toLowerCase();\n}\n\nconst ILINK_WECHAT_USER_SUFFIX = \"-im-wechat\";\n\n/**\n * ilink sendmessage / getUploadUrl / getconfig expect `…@im.wechat` for C2C users.\n * Session/cron addresses use sanitized `…-im-wechat` (from `sanitizeSegment`); map back before API calls.\n */\nexport function toRawIlinkUserIdForApi(peerId: string): string {\n const t = peerId.trim();\n if (t.includes(\"@\")) return t;\n if (t.toLowerCase().endsWith(ILINK_WECHAT_USER_SUFFIX)) {\n const prefix = t.slice(0, t.length - ILINK_WECHAT_USER_SUFFIX.length);\n return `${prefix}@im.wechat`;\n }\n return t;\n}\n"],"mappings":";;kBAAsE;;;;;AAMtE,SAAgB,yBAAyB,KAAqB;AAC5D,QAAO,IACJ,MAAM,CACN,aAAa,CACb,QAAQ,MAAM,IAAI,CAClB,QAAQ,OAAO,IAAI,CACnB,QAAQ,iBAAiB,IAAI,CAC7B,QAAQ,OAAO,IAAI,CACnB,QAAQ,UAAU,GAAG;;;;;AAM1B,SAAgB,sBAAsB,WAA2B;CAC/D,MAAM,IAAI,UAAU,MAAM;AAE1B,QADU,gBAAgB,GAAG,EAAE,kBAAkB,MAAM,CAC/C,IAAI,EAAE,aAAa;;AAG7B,MAAM,2BAA2B;;;;;AAMjC,SAAgB,uBAAuB,QAAwB;CAC7D,MAAM,IAAI,OAAO,MAAM;AACvB,KAAI,EAAE,SAAS,IAAI,CAAE,QAAO;AAC5B,KAAI,EAAE,aAAa,CAAC,SAAS,yBAAyB,CAEpD,QAAO,GADQ,EAAE,MAAM,GAAG,EAAE,SAAS,GACrB,CAAC;AAEnB,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"aes-ecb.js","names":[],"sources":["../../../../../extensions/weixin/src/cdn/aes-ecb.ts"],"sourcesContent":["/**\n * Shared AES-128-ECB crypto utilities for CDN upload and download.\n */\nimport { createCipheriv, createDecipheriv } from \"node:crypto\";\n\n/** Encrypt buffer with AES-128-ECB (PKCS7 padding is default). */\nexport function encryptAesEcb(plaintext: Buffer, key: Buffer): Buffer {\n const cipher = createCipheriv(\"aes-128-ecb\", key, null);\n return Buffer.concat([cipher.update(plaintext), cipher.final()]);\n}\n\n/** Decrypt buffer with AES-128-ECB (PKCS7 padding). */\nexport function decryptAesEcb(ciphertext: Buffer, key: Buffer): Buffer {\n const decipher = createDecipheriv(\"aes-128-ecb\", key, null);\n return Buffer.concat([decipher.update(ciphertext), decipher.final()]);\n}\n\n/** Compute AES-128-ECB ciphertext size (PKCS7 padding to 16-byte boundary). */\nexport function aesEcbPaddedSize(plaintextSize: number): number {\n return Math.ceil((plaintextSize + 1) / 16) * 16;\n}\n"],"mappings":";;;;;;AAMA,SAAgB,cAAc,WAAmB,KAAqB;CACpE,MAAM,SAAS,eAAe,eAAe,KAAK,KAAK;AACvD,QAAO,OAAO,OAAO,CAAC,OAAO,OAAO,UAAU,EAAE,OAAO,OAAO,CAAC,CAAC;;;AAIlE,SAAgB,cAAc,YAAoB,KAAqB;CACrE,MAAM,WAAW,iBAAiB,eAAe,KAAK,KAAK;AAC3D,QAAO,OAAO,OAAO,CAAC,SAAS,OAAO,WAAW,EAAE,SAAS,OAAO,CAAC,CAAC;;;AAIvE,SAAgB,iBAAiB,eAA+B;AAC9D,QAAO,KAAK,MAAM,gBAAgB,KAAK,GAAG,GAAG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cdn-upload.js","names":[],"sources":["../../../../../extensions/weixin/src/cdn/cdn-upload.ts"],"sourcesContent":["import { encryptAesEcb } from \"./aes-ecb.js\";\nimport { buildCdnUploadUrl } from \"./cdn-url.js\";\nimport { logger } from \"../util/logger.js\";\nimport { redactUrl } from \"../util/redact.js\";\n\n/** Maximum retry attempts for CDN upload. */\nconst UPLOAD_MAX_RETRIES = 3;\n\n/**\n * Upload one buffer to the Weixin CDN with AES-128-ECB encryption.\n * Returns the download encrypted_query_param from the CDN response.\n * Retries up to UPLOAD_MAX_RETRIES times on server errors; client errors (4xx) abort immediately.\n */\nexport async function uploadBufferToCdn(params: {\n buf: Buffer;\n /** From getUploadUrl.upload_full_url; POST target when set (takes precedence over uploadParam). */\n uploadFullUrl?: string;\n uploadParam?: string;\n filekey: string;\n cdnBaseUrl: string;\n label: string;\n aeskey: Buffer;\n}): Promise<{ downloadParam: string }> {\n const { buf, uploadFullUrl, uploadParam, filekey, cdnBaseUrl, label, aeskey } = params;\n const ciphertext = encryptAesEcb(buf, aeskey);\n const trimmedFull = uploadFullUrl?.trim();\n let cdnUrl: string;\n if (trimmedFull) {\n cdnUrl = trimmedFull;\n } else if (uploadParam) {\n cdnUrl = buildCdnUploadUrl({ cdnBaseUrl, uploadParam, filekey });\n } else {\n throw new Error(`${label}: CDN upload URL missing (need upload_full_url or upload_param)`);\n }\n logger.debug(`${label}: CDN POST url=${redactUrl(cdnUrl)} ciphertextSize=${ciphertext.length}`);\n\n let downloadParam: string | undefined;\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= UPLOAD_MAX_RETRIES; attempt++) {\n try {\n const res = await fetch(cdnUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/octet-stream\" },\n body: new Uint8Array(ciphertext),\n });\n if (res.status >= 400 && res.status < 500) {\n const errMsg = res.headers.get(\"x-error-message\") ?? (await res.text());\n logger.error(\n `${label}: CDN client error attempt=${attempt} status=${res.status} errMsg=${errMsg}`,\n );\n throw new Error(`CDN upload client error ${res.status}: ${errMsg}`);\n }\n if (res.status !== 200) {\n const errMsg = res.headers.get(\"x-error-message\") ?? `status ${res.status}`;\n logger.error(\n `${label}: CDN server error attempt=${attempt} status=${res.status} errMsg=${errMsg}`,\n );\n throw new Error(`CDN upload server error: ${errMsg}`);\n }\n downloadParam = res.headers.get(\"x-encrypted-param\") ?? undefined;\n if (!downloadParam) {\n logger.error(\n `${label}: CDN response missing x-encrypted-param header attempt=${attempt}`,\n );\n throw new Error(\"CDN upload response missing x-encrypted-param header\");\n }\n logger.debug(`${label}: CDN upload success attempt=${attempt}`);\n break;\n } catch (err) {\n lastError = err;\n if (err instanceof Error && err.message.includes(\"client error\")) throw err;\n if (attempt < UPLOAD_MAX_RETRIES) {\n logger.error(`${label}: attempt ${attempt} failed, retrying... err=${String(err)}`);\n } else {\n logger.error(`${label}: all ${UPLOAD_MAX_RETRIES} attempts failed err=${String(err)}`);\n }\n }\n }\n\n if (!downloadParam) {\n throw lastError instanceof Error\n ? lastError\n : new Error(`CDN upload failed after ${UPLOAD_MAX_RETRIES} attempts`);\n }\n return { downloadParam };\n}\n"],"mappings":";;;;;;AAMA,MAAM,qBAAqB;;;;;;AAO3B,eAAsB,kBAAkB,QASD;CACrC,MAAM,EAAE,KAAK,eAAe,aAAa,SAAS,YAAY,OAAO,WAAW;CAChF,MAAM,aAAa,cAAc,KAAK,OAAO;CAC7C,MAAM,cAAc,eAAe,MAAM;CACzC,IAAI;AACJ,KAAI,YACF,UAAS;UACA,YACT,UAAS,kBAAkB;EAAE;EAAY;EAAa;EAAS,CAAC;KAEhE,OAAM,IAAI,MAAM,GAAG,MAAM,iEAAiE;AAE5F,QAAO,MAAM,GAAG,MAAM,iBAAiB,UAAU,OAAO,CAAC,kBAAkB,WAAW,SAAS;CAE/F,IAAI;CACJ,IAAI;AAEJ,MAAK,IAAI,UAAU,GAAG,WAAW,oBAAoB,UACnD,KAAI;EACF,MAAM,MAAM,MAAM,MAAM,QAAQ;GAC9B,QAAQ;GACR,SAAS,EAAE,gBAAgB,4BAA4B;GACvD,MAAM,IAAI,WAAW,WAAW;GACjC,CAAC;AACF,MAAI,IAAI,UAAU,OAAO,IAAI,SAAS,KAAK;GACzC,MAAM,SAAS,IAAI,QAAQ,IAAI,kBAAkB,IAAK,MAAM,IAAI,MAAM;AACtE,UAAO,MACL,GAAG,MAAM,6BAA6B,QAAQ,UAAU,IAAI,OAAO,UAAU,SAC9E;AACD,SAAM,IAAI,MAAM,2BAA2B,IAAI,OAAO,IAAI,SAAS;;AAErE,MAAI,IAAI,WAAW,KAAK;GACtB,MAAM,SAAS,IAAI,QAAQ,IAAI,kBAAkB,IAAI,UAAU,IAAI;AACnE,UAAO,MACL,GAAG,MAAM,6BAA6B,QAAQ,UAAU,IAAI,OAAO,UAAU,SAC9E;AACD,SAAM,IAAI,MAAM,4BAA4B,SAAS;;AAEvD,kBAAgB,IAAI,QAAQ,IAAI,oBAAoB,IAAI,KAAA;AACxD,MAAI,CAAC,eAAe;AAClB,UAAO,MACL,GAAG,MAAM,0DAA0D,UACpE;AACD,SAAM,IAAI,MAAM,uDAAuD;;AAEzE,SAAO,MAAM,GAAG,MAAM,+BAA+B,UAAU;AAC/D;UACO,KAAK;AACZ,cAAY;AACZ,MAAI,eAAe,SAAS,IAAI,QAAQ,SAAS,eAAe,CAAE,OAAM;AACxE,MAAI,UAAU,mBACZ,QAAO,MAAM,GAAG,MAAM,YAAY,QAAQ,2BAA2B,OAAO,IAAI,GAAG;MAEnF,QAAO,MAAM,GAAG,MAAM,QAAQ,mBAAmB,uBAAuB,OAAO,IAAI,GAAG;;AAK5F,KAAI,CAAC,cACH,OAAM,qBAAqB,QACvB,4BACA,IAAI,MAAM,2BAA2B,mBAAmB,WAAW;AAEzE,QAAO,EAAE,eAAe"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cdn-url.js","names":[],"sources":["../../../../../extensions/weixin/src/cdn/cdn-url.ts"],"sourcesContent":["/**\n * Unified CDN URL construction for Weixin CDN upload/download.\n */\n\n/** When true, if the server omits `full_url`, fall back to client-built URLs; when false, require `full_url`. */\nexport const ENABLE_CDN_URL_FALLBACK = true;\n\n/** Build a CDN download URL from encrypt_query_param. */\nexport function buildCdnDownloadUrl(encryptedQueryParam: string, cdnBaseUrl: string): string {\n return `${cdnBaseUrl}/download?encrypted_query_param=${encodeURIComponent(encryptedQueryParam)}`;\n}\n\n/** Build a CDN upload URL from upload_param and filekey. */\nexport function buildCdnUploadUrl(params: {\n cdnBaseUrl: string;\n uploadParam: string;\n filekey: string;\n}): string {\n return `${params.cdnBaseUrl}/upload?encrypted_query_param=${encodeURIComponent(params.uploadParam)}&filekey=${encodeURIComponent(params.filekey)}`;\n}\n"],"mappings":";;;;;AAKA,MAAa,0BAA0B;;AAGvC,SAAgB,oBAAoB,qBAA6B,YAA4B;AAC3F,QAAO,GAAG,WAAW,kCAAkC,mBAAmB,oBAAoB;;;AAIhG,SAAgB,kBAAkB,QAIvB;AACT,QAAO,GAAG,OAAO,WAAW,gCAAgC,mBAAmB,OAAO,YAAY,CAAC,WAAW,mBAAmB,OAAO,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pic-decrypt.js","names":[],"sources":["../../../../../extensions/weixin/src/cdn/pic-decrypt.ts"],"sourcesContent":["import { decryptAesEcb } from \"./aes-ecb.js\";\nimport { buildCdnDownloadUrl, ENABLE_CDN_URL_FALLBACK } from \"./cdn-url.js\";\nimport { logger } from \"../util/logger.js\";\n\n/**\n * Download raw bytes from the CDN (no decryption).\n */\nasync function fetchCdnBytes(url: string, label: string): Promise<Buffer> {\n let res: Response;\n try {\n res = await fetch(url);\n } catch (err) {\n const cause =\n (err as NodeJS.ErrnoException).cause ?? (err as NodeJS.ErrnoException).code ?? \"(no cause)\";\n logger.error(\n `${label}: fetch network error url=${url} err=${String(err)} cause=${String(cause)}`,\n );\n throw err;\n }\n logger.debug(`${label}: response status=${res.status} ok=${res.ok}`);\n if (!res.ok) {\n const body = await res.text().catch(() => \"(unreadable)\");\n const msg = `${label}: CDN download ${res.status} ${res.statusText} body=${body}`;\n logger.error(msg);\n throw new Error(msg);\n }\n return Buffer.from(await res.arrayBuffer());\n}\n\n/**\n * Parse CDNMedia.aes_key into a raw 16-byte AES key.\n *\n * Two encodings are seen in the wild:\n * - base64(raw 16 bytes) → images (aes_key from media field)\n * - base64(hex string of 16 bytes) → file / voice / video\n *\n * In the second case, base64-decoding yields 32 ASCII hex chars which must\n * then be parsed as hex to recover the actual 16-byte key.\n */\nfunction parseAesKey(aesKeyBase64: string, label: string): Buffer {\n const decoded = Buffer.from(aesKeyBase64, \"base64\");\n if (decoded.length === 16) {\n return decoded;\n }\n if (decoded.length === 32 && /^[0-9a-fA-F]{32}$/.test(decoded.toString(\"ascii\"))) {\n return Buffer.from(decoded.toString(\"ascii\"), \"hex\");\n }\n const msg = `${label}: aes_key must decode to 16 raw bytes or 32-char hex string, got ${decoded.length} bytes (base64=\"${aesKeyBase64}\")`;\n logger.error(msg);\n throw new Error(msg);\n}\n\n/**\n * Download and AES-128-ECB decrypt a CDN media file. Returns plaintext Buffer.\n * aesKeyBase64: CDNMedia.aes_key JSON field (see parseAesKey for supported formats).\n */\nexport async function downloadAndDecryptBuffer(\n encryptedQueryParam: string,\n aesKeyBase64: string,\n cdnBaseUrl: string,\n label: string,\n fullUrl?: string,\n): Promise<Buffer> {\n const key = parseAesKey(aesKeyBase64, label);\n let url: string;\n if (fullUrl) {\n url = fullUrl;\n } else if (ENABLE_CDN_URL_FALLBACK) {\n url = buildCdnDownloadUrl(encryptedQueryParam, cdnBaseUrl);\n } else {\n throw new Error(`${label}: fullUrl is required (CDN URL fallback is disabled)`);\n }\n logger.debug(`${label}: fetching url=${url}`);\n const encrypted = await fetchCdnBytes(url, label);\n logger.debug(`${label}: downloaded ${encrypted.byteLength} bytes, decrypting`);\n const decrypted = decryptAesEcb(encrypted, key);\n logger.debug(`${label}: decrypted ${decrypted.length} bytes`);\n return decrypted;\n}\n\n/**\n * Download plain (unencrypted) bytes from the CDN. Returns the raw Buffer.\n */\nexport async function downloadPlainCdnBuffer(\n encryptedQueryParam: string,\n cdnBaseUrl: string,\n label: string,\n fullUrl?: string,\n): Promise<Buffer> {\n let url: string;\n if (fullUrl) {\n url = fullUrl;\n } else if (ENABLE_CDN_URL_FALLBACK) {\n url = buildCdnDownloadUrl(encryptedQueryParam, cdnBaseUrl);\n } else {\n throw new Error(`${label}: fullUrl is required (CDN URL fallback is disabled)`);\n }\n logger.debug(`${label}: fetching url=${url}`);\n return fetchCdnBytes(url, label);\n}\n"],"mappings":";;;;;;;AAOA,eAAe,cAAc,KAAa,OAAgC;CACxE,IAAI;AACJ,KAAI;AACF,QAAM,MAAM,MAAM,IAAI;UACf,KAAK;EACZ,MAAM,QACH,IAA8B,SAAU,IAA8B,QAAQ;AACjF,SAAO,MACL,GAAG,MAAM,4BAA4B,IAAI,OAAO,OAAO,IAAI,CAAC,SAAS,OAAO,MAAM,GACnF;AACD,QAAM;;AAER,QAAO,MAAM,GAAG,MAAM,oBAAoB,IAAI,OAAO,MAAM,IAAI,KAAK;AACpE,KAAI,CAAC,IAAI,IAAI;EACX,MAAM,OAAO,MAAM,IAAI,MAAM,CAAC,YAAY,eAAe;EACzD,MAAM,MAAM,GAAG,MAAM,iBAAiB,IAAI,OAAO,GAAG,IAAI,WAAW,QAAQ;AAC3E,SAAO,MAAM,IAAI;AACjB,QAAM,IAAI,MAAM,IAAI;;AAEtB,QAAO,OAAO,KAAK,MAAM,IAAI,aAAa,CAAC;;;;;;;;;;;;AAa7C,SAAS,YAAY,cAAsB,OAAuB;CAChE,MAAM,UAAU,OAAO,KAAK,cAAc,SAAS;AACnD,KAAI,QAAQ,WAAW,GACrB,QAAO;AAET,KAAI,QAAQ,WAAW,MAAM,oBAAoB,KAAK,QAAQ,SAAS,QAAQ,CAAC,CAC9E,QAAO,OAAO,KAAK,QAAQ,SAAS,QAAQ,EAAE,MAAM;CAEtD,MAAM,MAAM,GAAG,MAAM,mEAAmE,QAAQ,OAAO,kBAAkB,aAAa;AACtI,QAAO,MAAM,IAAI;AACjB,OAAM,IAAI,MAAM,IAAI;;;;;;AAOtB,eAAsB,yBACpB,qBACA,cACA,YACA,OACA,SACiB;CACjB,MAAM,MAAM,YAAY,cAAc,MAAM;CAC5C,IAAI;AACJ,KAAI,QACF,OAAM;KAEN,OAAM,oBAAoB,qBAAqB,WAAW;AAI5D,QAAO,MAAM,GAAG,MAAM,iBAAiB,MAAM;CAC7C,MAAM,YAAY,MAAM,cAAc,KAAK,MAAM;AACjD,QAAO,MAAM,GAAG,MAAM,eAAe,UAAU,WAAW,oBAAoB;CAC9E,MAAM,YAAY,cAAc,WAAW,IAAI;AAC/C,QAAO,MAAM,GAAG,MAAM,cAAc,UAAU,OAAO,QAAQ;AAC7D,QAAO;;;;;AAMT,eAAsB,uBACpB,qBACA,YACA,OACA,SACiB;CACjB,IAAI;AACJ,KAAI,QACF,OAAM;KAEN,OAAM,oBAAoB,qBAAqB,WAAW;AAI5D,QAAO,MAAM,GAAG,MAAM,iBAAiB,MAAM;AAC7C,QAAO,cAAc,KAAK,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"upload.js","names":[],"sources":["../../../../../extensions/weixin/src/cdn/upload.ts"],"sourcesContent":["import crypto from \"node:crypto\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { toRawIlinkUserIdForApi } from \"../auth/weixin-account-id.js\";\nimport { getUploadUrl } from \"../api/api.js\";\nimport type { WeixinApiOptions } from \"../api/api.js\";\nimport { aesEcbPaddedSize } from \"./aes-ecb.js\";\nimport { uploadBufferToCdn } from \"./cdn-upload.js\";\nimport { logger } from \"../util/logger.js\";\nimport { getExtensionFromContentTypeOrUrl } from \"../media/mime.js\";\nimport { tempFileName } from \"../util/random.js\";\nimport { UploadMediaType } from \"../api/types.js\";\n\nexport type UploadedFileInfo = {\n filekey: string;\n /** 由 upload_param 上传后 CDN 返回的下载加密参数; fill into ImageItem.media.encrypt_query_param */\n downloadEncryptedQueryParam: string;\n /** AES-128-ECB key, hex-encoded; convert to base64 for CDNMedia.aes_key */\n aeskey: string;\n /** Plaintext file size in bytes */\n fileSize: number;\n /** Ciphertext file size in bytes (AES-128-ECB with PKCS7 padding); use for ImageItem.hd_size / mid_size */\n fileSizeCiphertext: number;\n};\n\n/**\n * Download a remote media URL (image, video, file) to a local temp file in destDir.\n * Returns the local file path; extension is inferred from Content-Type / URL.\n */\nexport async function downloadRemoteImageToTemp(url: string, destDir: string): Promise<string> {\n logger.debug(`downloadRemoteImageToTemp: fetching url=${url}`);\n const res = await fetch(url);\n if (!res.ok) {\n const msg = `remote media download failed: ${res.status} ${res.statusText} url=${url}`;\n logger.error(`downloadRemoteImageToTemp: ${msg}`);\n throw new Error(msg);\n }\n const buf = Buffer.from(await res.arrayBuffer());\n logger.debug(`downloadRemoteImageToTemp: downloaded ${buf.length} bytes`);\n await fs.mkdir(destDir, { recursive: true });\n const ext = getExtensionFromContentTypeOrUrl(res.headers.get(\"content-type\"), url);\n const name = tempFileName(\"weixin-remote\", ext);\n const filePath = path.join(destDir, name);\n await fs.writeFile(filePath, buf);\n logger.debug(`downloadRemoteImageToTemp: saved to ${filePath} ext=${ext}`);\n return filePath;\n}\n\n/**\n * Common upload pipeline: read file → hash → gen aeskey → getUploadUrl → uploadBufferToCdn → return info.\n */\nasync function uploadMediaToCdn(params: {\n filePath: string;\n toUserId: string;\n opts: WeixinApiOptions;\n cdnBaseUrl: string;\n mediaType: (typeof UploadMediaType)[keyof typeof UploadMediaType];\n label: string;\n}): Promise<UploadedFileInfo> {\n const { filePath, toUserId, opts, cdnBaseUrl, mediaType, label } = params;\n\n const plaintext = await fs.readFile(filePath);\n const rawsize = plaintext.length;\n const rawfilemd5 = crypto.createHash(\"md5\").update(plaintext).digest(\"hex\");\n const filesize = aesEcbPaddedSize(rawsize);\n const filekey = crypto.randomBytes(16).toString(\"hex\");\n const aeskey = crypto.randomBytes(16);\n\n logger.debug(\n `${label}: file=${filePath} rawsize=${rawsize} filesize=${filesize} md5=${rawfilemd5} filekey=${filekey}`,\n );\n\n const uploadUrlResp = await getUploadUrl({\n ...opts,\n filekey,\n media_type: mediaType,\n to_user_id: toRawIlinkUserIdForApi(toUserId),\n rawsize,\n rawfilemd5,\n filesize,\n no_need_thumb: true,\n aeskey: aeskey.toString(\"hex\"),\n });\n\n const uploadFullUrl = uploadUrlResp.upload_full_url?.trim();\n const uploadParam = uploadUrlResp.upload_param;\n if (!uploadFullUrl && !uploadParam) {\n logger.error(\n `${label}: getUploadUrl returned no upload URL (need upload_full_url or upload_param), resp=${JSON.stringify(uploadUrlResp)}`,\n );\n throw new Error(`${label}: getUploadUrl returned no upload URL`);\n }\n\n const { downloadParam: downloadEncryptedQueryParam } = await uploadBufferToCdn({\n buf: plaintext,\n uploadFullUrl: uploadFullUrl || undefined,\n uploadParam: uploadParam ?? undefined,\n filekey,\n cdnBaseUrl,\n aeskey,\n label: `${label}[orig filekey=${filekey}]`,\n });\n\n return {\n filekey,\n downloadEncryptedQueryParam,\n aeskey: aeskey.toString(\"hex\"),\n fileSize: rawsize,\n fileSizeCiphertext: filesize,\n };\n}\n\n/** Upload a local image file to the Weixin CDN with AES-128-ECB encryption. */\nexport async function uploadFileToWeixin(params: {\n filePath: string;\n toUserId: string;\n opts: WeixinApiOptions;\n cdnBaseUrl: string;\n}): Promise<UploadedFileInfo> {\n return uploadMediaToCdn({\n ...params,\n mediaType: UploadMediaType.IMAGE,\n label: \"uploadFileToWeixin\",\n });\n}\n\n/** Upload a local video file to the Weixin CDN. */\nexport async function uploadVideoToWeixin(params: {\n filePath: string;\n toUserId: string;\n opts: WeixinApiOptions;\n cdnBaseUrl: string;\n}): Promise<UploadedFileInfo> {\n return uploadMediaToCdn({\n ...params,\n mediaType: UploadMediaType.VIDEO,\n label: \"uploadVideoToWeixin\",\n });\n}\n\n/**\n * Upload a local file attachment (non-image, non-video) to the Weixin CDN.\n * Uses media_type=FILE; no thumbnail required.\n */\nexport async function uploadFileAttachmentToWeixin(params: {\n filePath: string;\n fileName: string;\n toUserId: string;\n opts: WeixinApiOptions;\n cdnBaseUrl: string;\n}): Promise<UploadedFileInfo> {\n return uploadMediaToCdn({\n ...params,\n mediaType: UploadMediaType.FILE,\n label: \"uploadFileAttachmentToWeixin\",\n });\n}\n\n"],"mappings":";;;;;;;;;;;;;;;;AA8BA,eAAsB,0BAA0B,KAAa,SAAkC;AAC7F,QAAO,MAAM,2CAA2C,MAAM;CAC9D,MAAM,MAAM,MAAM,MAAM,IAAI;AAC5B,KAAI,CAAC,IAAI,IAAI;EACX,MAAM,MAAM,iCAAiC,IAAI,OAAO,GAAG,IAAI,WAAW,OAAO;AACjF,SAAO,MAAM,8BAA8B,MAAM;AACjD,QAAM,IAAI,MAAM,IAAI;;CAEtB,MAAM,MAAM,OAAO,KAAK,MAAM,IAAI,aAAa,CAAC;AAChD,QAAO,MAAM,yCAAyC,IAAI,OAAO,QAAQ;AACzE,OAAM,GAAG,MAAM,SAAS,EAAE,WAAW,MAAM,CAAC;CAC5C,MAAM,MAAM,iCAAiC,IAAI,QAAQ,IAAI,eAAe,EAAE,IAAI;CAClF,MAAM,OAAO,aAAa,iBAAiB,IAAI;CAC/C,MAAM,WAAW,KAAK,KAAK,SAAS,KAAK;AACzC,OAAM,GAAG,UAAU,UAAU,IAAI;AACjC,QAAO,MAAM,uCAAuC,SAAS,OAAO,MAAM;AAC1E,QAAO;;;;;AAMT,eAAe,iBAAiB,QAOF;CAC5B,MAAM,EAAE,UAAU,UAAU,MAAM,YAAY,WAAW,UAAU;CAEnE,MAAM,YAAY,MAAM,GAAG,SAAS,SAAS;CAC7C,MAAM,UAAU,UAAU;CAC1B,MAAM,aAAa,OAAO,WAAW,MAAM,CAAC,OAAO,UAAU,CAAC,OAAO,MAAM;CAC3E,MAAM,WAAW,iBAAiB,QAAQ;CAC1C,MAAM,UAAU,OAAO,YAAY,GAAG,CAAC,SAAS,MAAM;CACtD,MAAM,SAAS,OAAO,YAAY,GAAG;AAErC,QAAO,MACL,GAAG,MAAM,SAAS,SAAS,WAAW,QAAQ,YAAY,SAAS,OAAO,WAAW,WAAW,UACjG;CAED,MAAM,gBAAgB,MAAM,aAAa;EACvC,GAAG;EACH;EACA,YAAY;EACZ,YAAY,uBAAuB,SAAS;EAC5C;EACA;EACA;EACA,eAAe;EACf,QAAQ,OAAO,SAAS,MAAM;EAC/B,CAAC;CAEF,MAAM,gBAAgB,cAAc,iBAAiB,MAAM;CAC3D,MAAM,cAAc,cAAc;AAClC,KAAI,CAAC,iBAAiB,CAAC,aAAa;AAClC,SAAO,MACL,GAAG,MAAM,qFAAqF,KAAK,UAAU,cAAc,GAC5H;AACD,QAAM,IAAI,MAAM,GAAG,MAAM,uCAAuC;;CAGlE,MAAM,EAAE,eAAe,gCAAgC,MAAM,kBAAkB;EAC7E,KAAK;EACL,eAAe,iBAAiB,KAAA;EAChC,aAAa,eAAe,KAAA;EAC5B;EACA;EACA;EACA,OAAO,GAAG,MAAM,gBAAgB,QAAQ;EACzC,CAAC;AAEF,QAAO;EACL;EACA;EACA,QAAQ,OAAO,SAAS,MAAM;EAC9B,UAAU;EACV,oBAAoB;EACrB;;;AAIH,eAAsB,mBAAmB,QAKX;AAC5B,QAAO,iBAAiB;EACtB,GAAG;EACH,WAAW,gBAAgB;EAC3B,OAAO;EACR,CAAC;;;AAIJ,eAAsB,oBAAoB,QAKZ;AAC5B,QAAO,iBAAiB;EACtB,GAAG;EACH,WAAW,gBAAgB;EAC3B,OAAO;EACR,CAAC;;;;;;AAOJ,eAAsB,6BAA6B,QAMrB;AAC5B,QAAO,iBAAiB;EACtB,GAAG;EACH,WAAW,gBAAgB;EAC3B,OAAO;EACR,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"gateway-qr-login.js","names":[],"sources":["../../../../../extensions/weixin/src/cli/gateway-qr-login.ts"],"sourcesContent":["/**\n * Gateway / web UI: start Weixin QR login, poll status, persist credentials (same as CLI).\n */\n\nimport { readFileSync, writeFileSync } from \"node:fs\";\n\nimport type { Config } from \"@xopcai/xopc/config/schema.js\";\n\nimport {\n clearStaleAccountsForUserId,\n normalizeWeixinAccountId,\n registerWeixinAccountId,\n saveWeixinAccount,\n} from \"../auth/accounts.js\";\nimport {\n DEFAULT_ILINK_BOT_TYPE,\n getWeixinActiveLoginSnapshot,\n startWeixinLoginWithQr,\n waitForWeixinLogin,\n} from \"../auth/login-qr.js\";\nimport { clearContextTokensForAccount } from \"../messaging/inbound.js\";\nimport { logger } from \"../util/logger.js\";\n\nimport { getWeixinLoginApiContext, mergeWeixinConfigAfterLogin } from \"./qr-login.js\";\n\nexport type WeixinGatewayQrLoginStatus =\n | {\n phase: \"polling\";\n qrcodeUrl: string;\n /** Sub-state from ilink while waiting */\n qrStatus?: string;\n }\n | { phase: \"done\"; ok: true; accountId: string }\n | { phase: \"done\"; ok: false; message: string }\n | { phase: \"unknown\"; message: string };\n\ntype TerminalRecord =\n | { phase: \"done\"; ok: true; accountId: string }\n | { phase: \"done\"; ok: false; message: string };\n\nconst completedSessions = new Map<string, TerminalRecord>();\n\nfunction loadConfigSnapshot(configPath: string | undefined, fallback: Config | undefined): Config {\n if (fallback) return fallback;\n if (!configPath) return {} as Config;\n try {\n return JSON.parse(readFileSync(configPath, 'utf8')) as Config;\n } catch {\n return {} as Config;\n }\n}\n\nfunction saveConfigSnapshot(configPath: string | undefined, config: Config): void {\n if (!configPath) return;\n writeFileSync(configPath, `${JSON.stringify(config, null, 2)}\\n`, 'utf8');\n}\n\nfunction rememberCompleted(sessionKey: string, state: TerminalRecord): void {\n completedSessions.set(sessionKey, state);\n setTimeout(() => completedSessions.delete(sessionKey), 10 * 60_000);\n}\n\nexport function getWeixinGatewayQrLoginStatus(sessionKey: string): WeixinGatewayQrLoginStatus {\n const done = completedSessions.get(sessionKey);\n if (done) {\n if (done.ok === true) {\n return { phase: \"done\", ok: true, accountId: done.accountId };\n }\n return { phase: \"done\", ok: false, message: done.message };\n }\n\n const snap = getWeixinActiveLoginSnapshot(sessionKey);\n if (snap) {\n return {\n phase: \"polling\",\n qrcodeUrl: snap.qrcodeUrl,\n qrStatus: snap.status,\n };\n }\n\n return {\n phase: \"unknown\",\n message: \"No active login for this session. Start again or the QR may have expired.\",\n };\n}\n\nexport type WeixinGatewayQrLoginStartOptions = {\n configPath?: string;\n account?: string;\n timeoutMs?: number;\n verbose?: boolean;\n /** Config snapshot from the already-running gateway; avoids loading the heavy config loader from Electron dynamic extension code. */\n initialConfig?: Config;\n /** After credentials + config file are written (or login failed after wait). */\n onPersisted?: (r: { ok: boolean; accountId?: string; message: string; config?: Config }) => void | Promise<void>;\n};\n\n/**\n * Begin QR login and wait in the background; poll with {@link getWeixinGatewayQrLoginStatus}.\n */\nexport async function startWeixinGatewayQrLogin(\n opts: WeixinGatewayQrLoginStartOptions,\n): Promise<{ ok: true; sessionKey: string; qrcodeUrl: string } | { ok: false; message: string }> {\n const configPath = opts.configPath ?? process.env.XOPC_CONFIG_PATH;\n const cfg = loadConfigSnapshot(configPath, opts.initialConfig);\n const { baseUrl, routeTag } = getWeixinLoginApiContext(cfg, opts.account);\n const timeoutMs = opts.timeoutMs ?? 480_000;\n const verbose = Boolean(opts.verbose);\n\n const startResult = await startWeixinLoginWithQr({\n accountId: opts.account?.trim() || undefined,\n botType: DEFAULT_ILINK_BOT_TYPE,\n routeTag,\n verbose,\n });\n\n if (!startResult.qrcodeUrl) {\n return { ok: false, message: startResult.message || \"Failed to get QR code\" };\n }\n\n const sessionKey = startResult.sessionKey;\n\n void (async () => {\n const waitResult = await waitForWeixinLogin({\n sessionKey,\n timeoutMs,\n verbose,\n routeTag,\n botType: DEFAULT_ILINK_BOT_TYPE,\n silent: true,\n });\n\n if (!waitResult.connected || !waitResult.botToken || !waitResult.accountId) {\n const message = waitResult.message || \"Login did not complete\";\n rememberCompleted(sessionKey, { phase: \"done\", ok: false, message });\n await opts.onPersisted?.({ ok: false, message });\n return;\n }\n\n const normalizedId = normalizeWeixinAccountId(waitResult.accountId);\n\n try {\n saveWeixinAccount(normalizedId, {\n token: waitResult.botToken,\n baseUrl: waitResult.baseUrl?.trim() || baseUrl,\n userId: waitResult.userId,\n });\n registerWeixinAccountId(normalizedId);\n if (waitResult.userId) {\n clearStaleAccountsForUserId(normalizedId, waitResult.userId, clearContextTokensForAccount);\n }\n } catch (err) {\n const message = `Saved login failed: ${String(err)}`;\n logger.error(message);\n rememberCompleted(sessionKey, { phase: \"done\", ok: false, message });\n await opts.onPersisted?.({ ok: false, message });\n return;\n }\n\n try {\n const nextCfg = mergeWeixinConfigAfterLogin(cfg as Config, normalizedId);\n saveConfigSnapshot(configPath, nextCfg);\n await opts.onPersisted?.({ ok: true, accountId: normalizedId, message: \"OK\", config: nextCfg });\n rememberCompleted(sessionKey, { phase: \"done\", ok: true, accountId: normalizedId });\n return;\n } catch (err) {\n logger.warn(`Config merge failed (credentials saved on disk): ${String(err)}`);\n }\n\n await opts.onPersisted?.({ ok: true, accountId: normalizedId, message: \"OK\", config: cfg as Config });\n rememberCompleted(sessionKey, { phase: \"done\", ok: true, accountId: normalizedId });\n })();\n\n return { ok: true, sessionKey, qrcodeUrl: startResult.qrcodeUrl };\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"qr-login.js","names":[],"sources":["../../../../../extensions/weixin/src/cli/qr-login.ts"],"sourcesContent":["/**\n * CLI: Weixin QR login — start poll, show terminal QR, persist token + optional config merge.\n */\n\nimport type { Config } from '@xopcai/xopc/config/schema.js';\nimport { ConfigSchema } from '@xopcai/xopc/config/schema.js';\n\nimport {\n clearStaleAccountsForUserId,\n normalizeWeixinAccountId,\n registerWeixinAccountId,\n resolveWeixinAccount,\n saveWeixinAccount,\n DEFAULT_BASE_URL,\n} from '../auth/accounts.js';\nimport { clearContextTokensForAccount } from '../messaging/inbound.js';\nimport {\n DEFAULT_ILINK_BOT_TYPE,\n startWeixinLoginWithQr,\n waitForWeixinLogin,\n} from '../auth/login-qr.js';\nimport { logger } from '../util/logger.js';\n\nexport type WeixinQrLoginCliOptions = {\n /** Config file path (same as CLI --config / XOPC_CONFIG). */\n configPath?: string;\n verbose?: boolean;\n /** Client wait for scan (ms). */\n timeoutMs?: number;\n /** Existing account id to re-login, or omit for a new account session. */\n account?: string;\n /** When true, merge `channels.weixin.enabled` and accounts entry after success. */\n writeConfig?: boolean;\n /**\n * When set (e.g. interactive onboard), merges Weixin after login into this in-memory snapshot\n * instead of reloading from disk so prior unsaved onboarding edits are preserved when saving.\n */\n existingConfig?: Config;\n};\n\nexport function getWeixinLoginApiContext(cfg: Config, accountHint?: string): { baseUrl: string; routeTag?: string } {\n const section = cfg.channels?.weixin as { routeTag?: string | number } | undefined;\n const routeTagRaw = section?.routeTag;\n const sectionRouteTag =\n typeof routeTagRaw === 'number'\n ? String(routeTagRaw)\n : typeof routeTagRaw === 'string' && routeTagRaw.trim()\n ? routeTagRaw.trim()\n : undefined;\n\n if (accountHint?.trim()) {\n try {\n const r = resolveWeixinAccount(cfg, accountHint);\n return { baseUrl: r.baseUrl, routeTag: r.routeTag ?? sectionRouteTag };\n } catch {\n // ignore\n }\n }\n return { baseUrl: DEFAULT_BASE_URL, routeTag: sectionRouteTag };\n}\n\nexport function mergeWeixinConfigAfterLogin(cfg: Config, normalizedAccountId: string): Config {\n const prev = cfg.channels?.weixin as Record<string, unknown> | undefined;\n const prevAccounts = (prev?.accounts as Record<string, Record<string, unknown>> | undefined) ?? {};\n const merged = {\n ...cfg,\n channels: {\n ...cfg.channels,\n weixin: {\n ...(prev ?? {}),\n enabled: true,\n accounts: {\n ...prevAccounts,\n [normalizedAccountId]: {\n ...(prevAccounts[normalizedAccountId] ?? {}),\n enabled: true,\n },\n },\n },\n },\n };\n return ConfigSchema.parse(merged);\n}\n\n/**\n * Run interactive Weixin QR login (terminal QR + long-poll until confirmed or timeout).\n */\nexport async function runWeixinQrLoginCli(opts: WeixinQrLoginCliOptions): Promise<{\n ok: boolean;\n accountId?: string;\n message: string;\n}> {\n const configPath = opts.configPath ?? process.env.XOPC_CONFIG_PATH;\n const { loadConfig } = await import('@xopcai/xopc/config/loader.js');\n const cfg = opts.existingConfig ?? loadConfig(configPath);\n const { baseUrl, routeTag } = getWeixinLoginApiContext(cfg, opts.account);\n const timeoutMs = opts.timeoutMs ?? 480_000;\n const verbose = Boolean(opts.verbose);\n\n console.log('\\n🔐 Weixin QR login');\n console.log(` API base: ${baseUrl}\\n`);\n\n const startResult = await startWeixinLoginWithQr({\n accountId: opts.account?.trim() || undefined,\n botType: DEFAULT_ILINK_BOT_TYPE,\n routeTag,\n verbose,\n });\n\n if (!startResult.qrcodeUrl) {\n return { ok: false, message: startResult.message || 'Failed to get QR code' };\n }\n\n console.log('Scan this QR code with WeChat:\\n');\n try {\n const qrcodeTerminal = await import(/* @vite-ignore */ 'qrcode-terminal');\n await new Promise<void>((resolve) => {\n qrcodeTerminal.default.generate(startResult.qrcodeUrl!, { small: true }, (qr: string) => {\n console.log(qr);\n resolve();\n });\n });\n } catch {\n console.log('Open this URL in a browser to scan:\\n');\n console.log(startResult.qrcodeUrl);\n }\n console.log('\\nWaiting for confirmation...\\n');\n\n const waitResult = await waitForWeixinLogin({\n sessionKey: startResult.sessionKey,\n timeoutMs,\n verbose,\n routeTag,\n botType: DEFAULT_ILINK_BOT_TYPE,\n });\n\n if (!waitResult.connected || !waitResult.botToken || !waitResult.accountId) {\n return {\n ok: false,\n message: waitResult.message || 'Login did not complete',\n };\n }\n\n const normalizedId = normalizeWeixinAccountId(waitResult.accountId);\n\n try {\n saveWeixinAccount(normalizedId, {\n token: waitResult.botToken,\n baseUrl: waitResult.baseUrl?.trim() || baseUrl,\n userId: waitResult.userId,\n });\n registerWeixinAccountId(normalizedId);\n if (waitResult.userId) {\n clearStaleAccountsForUserId(normalizedId, waitResult.userId, clearContextTokensForAccount);\n }\n } catch (err) {\n logger.error(`Failed to save Weixin account: ${String(err)}`);\n return { ok: false, message: `Saved login failed: ${String(err)}` };\n }\n\n if (opts.writeConfig !== false) {\n try {\n const next = mergeWeixinConfigAfterLogin(cfg, normalizedId);\n const { saveConfig } = await import('@xopcai/xopc/config/loader.js');\n await saveConfig(next, configPath);\n } catch (err) {\n logger.warn(`Config merge failed (credentials saved on disk): ${String(err)}`);\n }\n }\n\n console.log(`\\n✅ Weixin connected as account \"${normalizedId}\".`);\n console.log(' Restart the gateway if it is already running.\\n');\n\n return { ok: true, accountId: normalizedId, message: 'OK' };\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-schema.js","names":[],"sources":["../../../../extensions/weixin/src/config-schema.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const WeixinAccountConfigSchema = z.object({\n name: z.string().optional(),\n enabled: z.boolean().optional(),\n cdnBaseUrl: z.string().optional(),\n routeTag: z.union([z.string(), z.number()]).optional(),\n dmPolicy: z.enum(['pairing', 'allowlist', 'open', 'disabled']).default('open'),\n allowFrom: z.array(z.string()).default([]),\n streamMode: z.enum(['off', 'partial', 'block']).optional(),\n debug: z.boolean().optional(),\n});\n\nexport const WeixinConfigSchema = z.object({\n enabled: z.boolean().default(false),\n dmPolicy: z.enum(['pairing', 'allowlist', 'open', 'disabled']).default('open'),\n allowFrom: z.array(z.string()).default([]),\n debug: z.boolean().default(false),\n streamMode: z.enum(['off', 'partial', 'block']).optional(),\n historyLimit: z.number().default(50),\n textChunkLimit: z.number().default(4000),\n routeTag: z.union([z.string(), z.number()]).optional(),\n accounts: z.record(z.string(), WeixinAccountConfigSchema).optional(),\n});\n\nexport type WeixinConfig = z.infer<typeof WeixinConfigSchema>;\n"],"mappings":";;;;;AAEa,6BAA4B,EAAE,OAAO;EAChD,MAAM,EAAE,QAAQ,CAAC,UAAU;EAC3B,SAAS,EAAE,SAAS,CAAC,UAAU;EAC/B,YAAY,EAAE,QAAQ,CAAC,UAAU;EACjC,UAAU,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU;EACtD,UAAU,EAAE,KAAK;GAAC;GAAW;GAAa;GAAQ;GAAW,CAAC,CAAC,QAAQ,OAAO;EAC9E,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;EAC1C,YAAY,EAAE,KAAK;GAAC;GAAO;GAAW;GAAQ,CAAC,CAAC,UAAU;EAC1D,OAAO,EAAE,SAAS,CAAC,UAAU;EAC9B,CAAC;AAEW,sBAAqB,EAAE,OAAO;EACzC,SAAS,EAAE,SAAS,CAAC,QAAQ,MAAM;EACnC,UAAU,EAAE,KAAK;GAAC;GAAW;GAAa;GAAQ;GAAW,CAAC,CAAC,QAAQ,OAAO;EAC9E,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;EAC1C,OAAO,EAAE,SAAS,CAAC,QAAQ,MAAM;EACjC,YAAY,EAAE,KAAK;GAAC;GAAO;GAAW;GAAQ,CAAC,CAAC,UAAU;EAC1D,cAAc,EAAE,QAAQ,CAAC,QAAQ,GAAG;EACpC,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,IAAK;EACxC,UAAU,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU;EACtD,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,0BAA0B,CAAC,UAAU;EACrE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-surface.js","names":[],"sources":["../../../../extensions/weixin/src/config-surface.ts"],"sourcesContent":["import type { Config } from '@xopcai/xopc/config/index.js';\nimport type { ChannelConfigSurfaceAdapter } from '@xopcai/xopc/channels/plugins/types.adapters.js';\n\nexport const weixinConfigSurface: ChannelConfigSurfaceAdapter = {\n buildConfigSurface(cfg: Config): Record<string, unknown> {\n const weixin = cfg.channels?.weixin as Record<string, unknown> | undefined;\n return {\n enabled: weixin?.enabled ?? false,\n dmPolicy: weixin?.dmPolicy || 'open',\n allowFrom: weixin?.allowFrom || [],\n debug: weixin?.debug ?? false,\n streamMode: weixin?.streamMode ?? 'partial',\n historyLimit: weixin?.historyLimit ?? 50,\n textChunkLimit: weixin?.textChunkLimit ?? 4000,\n routeTag: weixin?.routeTag,\n accounts: weixin?.accounts || {},\n };\n },\n};\n"],"mappings":";AAGA,MAAa,sBAAmD,EAC9D,mBAAmB,KAAsC;CACvD,MAAM,SAAS,IAAI,UAAU;AAC7B,QAAO;EACL,SAAS,QAAQ,WAAW;EAC5B,UAAU,QAAQ,YAAY;EAC9B,WAAW,QAAQ,aAAa,EAAE;EAClC,OAAO,QAAQ,SAAS;EACxB,YAAY,QAAQ,cAAc;EAClC,cAAc,QAAQ,gBAAgB;EACtC,gBAAgB,QAAQ,kBAAkB;EAC1C,UAAU,QAAQ;EAClB,UAAU,QAAQ,YAAY,EAAE;EACjC;GAEJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"delivery-to.js","names":[],"sources":["../../../../extensions/weixin/src/delivery-to.ts"],"sourcesContent":["import { parseSessionKey } from '@xopcai/xopc/routing/session-key.js';\nimport type { SessionListReader } from '@xopcai/xopc/session/store-reader.js';\n\nexport type NormalizedWeixinCronDelivery = {\n chatId: string;\n /** Set on OutboundMessage.metadata for multi-account Weixin */\n accountId?: string;\n};\n\n/**\n * Resolves Weixin ilink `chat_id` and optional `accountId` from cron / UI `delivery.to`.\n */\nexport function normalizeWeixinCronDeliveryTo(to: string): NormalizedWeixinCronDelivery {\n const trimmed = to.trim();\n if (!trimmed) {\n return { chatId: trimmed };\n }\n\n const parsed = parseSessionKey(trimmed);\n if (parsed?.source === 'weixin' && (parsed.peerKind === 'direct' || parsed.peerKind === 'dm') && parsed.peerId) {\n const accountId = parsed.accountId && parsed.accountId !== '_' ? parsed.accountId : undefined;\n return { chatId: parsed.peerId, accountId };\n }\n\n const parts = trimmed.split(':');\n if (parts.length === 3 && parts[1]?.toLowerCase() === 'direct' && parts[0] && parts[2]) {\n return { chatId: parts[2], accountId: parts[0] };\n }\n\n return { chatId: trimmed };\n}\n\n/**\n * If exactly one indexed weixin DM session matches `ilinkPeerId`, return that session's accountId.\n */\nexport async function resolveWeixinAccountIdFromSessions(\n store: SessionListReader,\n ilinkPeerId: string,\n): Promise<string | undefined> {\n const normalized = ilinkPeerId.trim().toLowerCase();\n if (!normalized) return undefined;\n\n const accountIds = new Set<string>();\n let offset = 0;\n const pageSize = 2000;\n\n for (;;) {\n const batch = await store.list({ channel: 'weixin', limit: pageSize, offset });\n for (const s of batch.items) {\n const rp = s.routing?.peerId?.toLowerCase();\n if (rp === normalized && s.routing?.accountId) {\n accountIds.add(s.routing.accountId);\n }\n }\n if (!batch.hasMore) break;\n offset += pageSize;\n }\n\n if (accountIds.size === 1) return [...accountIds][0];\n return undefined;\n}\n\n/** Like {@link normalizeWeixinCronDeliveryTo}, plus session-index lookup for bare ilink user ids. */\nexport async function normalizeWeixinCronDeliveryToResolved(\n to: string,\n sessionStore?: SessionListReader,\n): Promise<NormalizedWeixinCronDelivery> {\n const base = normalizeWeixinCronDeliveryTo(to);\n if (base.accountId || !sessionStore) return base;\n if (!to.trim().includes(':')) {\n const accountId = await resolveWeixinAccountIdFromSessions(sessionStore, base.chatId);\n if (accountId) return { chatId: base.chatId, accountId };\n }\n return base;\n}\n"],"mappings":";;kBAAsE;;;;AAYtE,SAAgB,8BAA8B,IAA0C;CACtF,MAAM,UAAU,GAAG,MAAM;AACzB,KAAI,CAAC,QACH,QAAO,EAAE,QAAQ,SAAS;CAG5B,MAAM,SAAS,gBAAgB,QAAQ;AACvC,KAAI,QAAQ,WAAW,aAAa,OAAO,aAAa,YAAY,OAAO,aAAa,SAAS,OAAO,QAAQ;EAC9G,MAAM,YAAY,OAAO,aAAa,OAAO,cAAc,MAAM,OAAO,YAAY,KAAA;AACpF,SAAO;GAAE,QAAQ,OAAO;GAAQ;GAAW;;CAG7C,MAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,KAAI,MAAM,WAAW,KAAK,MAAM,IAAI,aAAa,KAAK,YAAY,MAAM,MAAM,MAAM,GAClF,QAAO;EAAE,QAAQ,MAAM;EAAI,WAAW,MAAM;EAAI;AAGlD,QAAO,EAAE,QAAQ,SAAS;;;;;AAM5B,eAAsB,mCACpB,OACA,aAC6B;CAC7B,MAAM,aAAa,YAAY,MAAM,CAAC,aAAa;AACnD,KAAI,CAAC,WAAY,QAAO,KAAA;CAExB,MAAM,6BAAa,IAAI,KAAa;CACpC,IAAI,SAAS;CACb,MAAM,WAAW;AAEjB,UAAS;EACP,MAAM,QAAQ,MAAM,MAAM,KAAK;GAAE,SAAS;GAAU,OAAO;GAAU;GAAQ,CAAC;AAC9E,OAAK,MAAM,KAAK,MAAM,MAEpB,KADW,EAAE,SAAS,QAAQ,aAAa,KAChC,cAAc,EAAE,SAAS,UAClC,YAAW,IAAI,EAAE,QAAQ,UAAU;AAGvC,MAAI,CAAC,MAAM,QAAS;AACpB,YAAU;;AAGZ,KAAI,WAAW,SAAS,EAAG,QAAO,CAAC,GAAG,WAAW,CAAC;;;AAKpD,eAAsB,sCACpB,IACA,cACuC;CACvC,MAAM,OAAO,8BAA8B,GAAG;AAC9C,KAAI,KAAK,aAAa,CAAC,aAAc,QAAO;AAC5C,KAAI,CAAC,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE;EAC5B,MAAM,YAAY,MAAM,mCAAmC,cAAc,KAAK,OAAO;AACrF,MAAI,UAAW,QAAO;GAAE,QAAQ,KAAK;GAAQ;GAAW;;AAE1D,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../extensions/weixin/src/index.ts"],"sourcesContent":["import { defineChannelPluginEntry } from '@xopcai/xopc/extensions/sdk/channel-entry.js';\n\nimport { weixinPlugin } from './plugin.js';\n\nexport { weixinPlugin, WeixinChannelPlugin } from './plugin.js';\nexport { defineChannelPluginEntry } from '@xopcai/xopc/extensions/sdk/channel-entry.js';\nexport {\n normalizeWeixinCronDeliveryTo,\n normalizeWeixinCronDeliveryToResolved,\n resolveWeixinAccountIdFromSessions,\n} from './delivery-to.js';\nexport type { NormalizedWeixinCronDelivery } from './delivery-to.js';\nexport { runWeixinQrLoginCli } from './cli/qr-login.js';\nexport type { WeixinQrLoginCliOptions } from './cli/qr-login.js';\nexport {\n getWeixinGatewayQrLoginStatus,\n startWeixinGatewayQrLogin,\n} from './cli/gateway-qr-login.js';\nexport type {\n WeixinGatewayQrLoginStartOptions,\n WeixinGatewayQrLoginStatus,\n} from './cli/gateway-qr-login.js';\n\nexport default defineChannelPluginEntry({\n id: 'weixin',\n name: 'Weixin',\n description: 'Personal WeChat channel through QR login',\n plugin: weixinPlugin,\n});\n"],"mappings":";;;;;;AAuBA,IAAA,cAAe,yBAAyB;CACtC,IAAI;CACJ,MAAM;CACN,aAAa;CACb,QAAQ;CACT,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-url.js","names":[],"sources":["../../../../../extensions/weixin/src/media/data-url.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { randomBytes } from \"node:crypto\";\n\nimport { getExtensionFromMime } from \"./mime.js\";\n\n/**\n * Parse `data:mime;base64,...` into buffer (aligned with Telegram `parseDataUrl`).\n */\nexport function parseDataUrl(dataUrl: string): { mimeType: string; buffer: Buffer } | null {\n if (!dataUrl.startsWith(\"data:\")) return null;\n const comma = dataUrl.indexOf(\",\");\n if (comma === -1) return null;\n const header = dataUrl.slice(0, comma);\n const mimeMatch = header.match(/^data:([^;]+)/);\n if (!mimeMatch) return null;\n if (!header.toLowerCase().includes(\";base64\")) return null;\n const b64 = dataUrl.slice(comma + 1).replace(/\\s/g, \"\");\n return {\n mimeType: mimeMatch[1].trim(),\n buffer: Buffer.from(b64, \"base64\"),\n };\n}\n\nexport async function writeDataUrlBufferToTemp(params: {\n buffer: Buffer;\n mimeType: string;\n destDir: string;\n}): Promise<string> {\n await fs.mkdir(params.destDir, { recursive: true });\n const ext = getExtensionFromMime(params.mimeType);\n const name = `weixin-data-${randomBytes(8).toString(\"hex\")}${ext}`;\n const filePath = path.join(params.destDir, name);\n await fs.writeFile(filePath, params.buffer);\n return filePath;\n}\n"],"mappings":";;;;;;;;AASA,SAAgB,aAAa,SAA8D;AACzF,KAAI,CAAC,QAAQ,WAAW,QAAQ,CAAE,QAAO;CACzC,MAAM,QAAQ,QAAQ,QAAQ,IAAI;AAClC,KAAI,UAAU,GAAI,QAAO;CACzB,MAAM,SAAS,QAAQ,MAAM,GAAG,MAAM;CACtC,MAAM,YAAY,OAAO,MAAM,gBAAgB;AAC/C,KAAI,CAAC,UAAW,QAAO;AACvB,KAAI,CAAC,OAAO,aAAa,CAAC,SAAS,UAAU,CAAE,QAAO;CACtD,MAAM,MAAM,QAAQ,MAAM,QAAQ,EAAE,CAAC,QAAQ,OAAO,GAAG;AACvD,QAAO;EACL,UAAU,UAAU,GAAG,MAAM;EAC7B,QAAQ,OAAO,KAAK,KAAK,SAAS;EACnC;;AAGH,eAAsB,yBAAyB,QAI3B;AAClB,OAAM,GAAG,MAAM,OAAO,SAAS,EAAE,WAAW,MAAM,CAAC;CACnD,MAAM,MAAM,qBAAqB,OAAO,SAAS;CACjD,MAAM,OAAO,eAAe,YAAY,EAAE,CAAC,SAAS,MAAM,GAAG;CAC7D,MAAM,WAAW,KAAK,KAAK,OAAO,SAAS,KAAK;AAChD,OAAM,GAAG,UAAU,UAAU,OAAO,OAAO;AAC3C,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"media-download.js","names":[],"sources":["../../../../../extensions/weixin/src/media/media-download.ts"],"sourcesContent":["import type { WeixinInboundMediaOpts } from \"../messaging/inbound.js\";\nimport { logger } from \"../util/logger.js\";\nimport { getMimeFromFilename } from \"./mime.js\";\nimport {\n downloadAndDecryptBuffer,\n downloadPlainCdnBuffer,\n} from \"../cdn/pic-decrypt.js\";\nimport { silkToWav } from \"./silk-transcode.js\";\nimport type { WeixinMessage } from \"../api/types.js\";\nimport { MessageItemType } from \"../api/types.js\";\n\nconst WEIXIN_MEDIA_MAX_BYTES = 100 * 1024 * 1024;\n\n/** Persist a buffer via the framework's unified media store. */\ntype SaveMediaFn = (\n buffer: Buffer,\n contentType?: string,\n subdir?: string,\n maxBytes?: number,\n originalFilename?: string,\n) => Promise<{ path: string }>;\n\n/**\n * Download and decrypt media from a single MessageItem.\n * Returns the populated WeixinInboundMediaOpts fields; empty object on unsupported type or failure.\n */\nexport async function downloadMediaFromItem(\n item: WeixinMessage[\"item_list\"] extends (infer T)[] | undefined ? T : never,\n deps: {\n cdnBaseUrl: string;\n saveMedia: SaveMediaFn;\n log: (msg: string) => void;\n errLog: (msg: string) => void;\n label: string;\n },\n): Promise<WeixinInboundMediaOpts> {\n const { cdnBaseUrl, saveMedia, errLog, label } = deps;\n const result: WeixinInboundMediaOpts = {};\n\n if (item.type === MessageItemType.IMAGE) {\n const img = item.image_item;\n if (!img?.media?.encrypt_query_param && !img?.media?.full_url) return result;\n const aesKeyBase64 = img.aeskey\n ? Buffer.from(img.aeskey, \"hex\").toString(\"base64\")\n : img.media.aes_key;\n logger.debug(\n `${label} image: encrypt_query_param=${(img.media.encrypt_query_param ?? \"\").slice(0, 40)}... hasAesKey=${Boolean(aesKeyBase64)} aeskeySource=${img.aeskey ? \"image_item.aeskey\" : \"media.aes_key\"} full_url=${Boolean(img.media.full_url)}`,\n );\n try {\n const buf = aesKeyBase64\n ? await downloadAndDecryptBuffer(\n img.media.encrypt_query_param ?? \"\",\n aesKeyBase64,\n cdnBaseUrl,\n `${label} image`,\n img.media.full_url,\n )\n : await downloadPlainCdnBuffer(\n img.media.encrypt_query_param ?? \"\",\n cdnBaseUrl,\n `${label} image-plain`,\n img.media.full_url,\n );\n const saved = await saveMedia(buf, undefined, \"inbound\", WEIXIN_MEDIA_MAX_BYTES);\n result.decryptedPicPath = saved.path;\n logger.debug(`${label} image saved: ${saved.path}`);\n } catch (err) {\n logger.error(`${label} image download/decrypt failed: ${String(err)}`);\n errLog(`weixin ${label} image download/decrypt failed: ${String(err)}`);\n }\n } else if (item.type === MessageItemType.VOICE) {\n const voice = item.voice_item;\n if ((!voice?.media?.encrypt_query_param && !voice?.media?.full_url) || !voice.media.aes_key)\n return result;\n try {\n const silkBuf = await downloadAndDecryptBuffer(\n voice.media.encrypt_query_param ?? \"\",\n voice.media.aes_key,\n cdnBaseUrl,\n `${label} voice`,\n voice.media.full_url,\n );\n logger.debug(`${label} voice: decrypted ${silkBuf.length} bytes, attempting silk transcode`);\n const wavBuf = await silkToWav(silkBuf);\n if (wavBuf) {\n const saved = await saveMedia(wavBuf, \"audio/wav\", \"inbound\", WEIXIN_MEDIA_MAX_BYTES);\n result.decryptedVoicePath = saved.path;\n result.voiceMediaType = \"audio/wav\";\n logger.debug(`${label} voice: saved WAV to ${saved.path}`);\n } else {\n const saved = await saveMedia(silkBuf, \"audio/silk\", \"inbound\", WEIXIN_MEDIA_MAX_BYTES);\n result.decryptedVoicePath = saved.path;\n result.voiceMediaType = \"audio/silk\";\n logger.debug(`${label} voice: silk transcode unavailable, saved raw SILK to ${saved.path}`);\n }\n } catch (err) {\n logger.error(`${label} voice download/transcode failed: ${String(err)}`);\n errLog(`weixin ${label} voice download/transcode failed: ${String(err)}`);\n }\n } else if (item.type === MessageItemType.FILE) {\n const fileItem = item.file_item;\n if ((!fileItem?.media?.encrypt_query_param && !fileItem?.media?.full_url) || !fileItem.media.aes_key)\n return result;\n try {\n const buf = await downloadAndDecryptBuffer(\n fileItem.media.encrypt_query_param ?? \"\",\n fileItem.media.aes_key,\n cdnBaseUrl,\n `${label} file`,\n fileItem.media.full_url,\n );\n const mime = getMimeFromFilename(fileItem.file_name ?? \"file.bin\");\n const saved = await saveMedia(\n buf,\n mime,\n \"inbound\",\n WEIXIN_MEDIA_MAX_BYTES,\n fileItem.file_name ?? undefined,\n );\n result.decryptedFilePath = saved.path;\n result.fileMediaType = mime;\n logger.debug(`${label} file: saved to ${saved.path} mime=${mime}`);\n } catch (err) {\n logger.error(`${label} file download failed: ${String(err)}`);\n errLog(`weixin ${label} file download failed: ${String(err)}`);\n }\n } else if (item.type === MessageItemType.VIDEO) {\n const videoItem = item.video_item;\n if ((!videoItem?.media?.encrypt_query_param && !videoItem?.media?.full_url) || !videoItem.media.aes_key)\n return result;\n try {\n const buf = await downloadAndDecryptBuffer(\n videoItem.media.encrypt_query_param ?? \"\",\n videoItem.media.aes_key,\n cdnBaseUrl,\n `${label} video`,\n videoItem.media.full_url,\n );\n const saved = await saveMedia(buf, \"video/mp4\", \"inbound\", WEIXIN_MEDIA_MAX_BYTES);\n result.decryptedVideoPath = saved.path;\n logger.debug(`${label} video: saved to ${saved.path}`);\n } catch (err) {\n logger.error(`${label} video download failed: ${String(err)}`);\n errLog(`weixin ${label} video download failed: ${String(err)}`);\n }\n }\n\n return result;\n}\n"],"mappings":";;;;;;AAWA,MAAM,yBAAyB,MAAM,OAAO;;;;;AAe5C,eAAsB,sBACpB,MACA,MAOiC;CACjC,MAAM,EAAE,YAAY,WAAW,QAAQ,UAAU;CACjD,MAAM,SAAiC,EAAE;AAEzC,KAAI,KAAK,SAAS,gBAAgB,OAAO;EACvC,MAAM,MAAM,KAAK;AACjB,MAAI,CAAC,KAAK,OAAO,uBAAuB,CAAC,KAAK,OAAO,SAAU,QAAO;EACtE,MAAM,eAAe,IAAI,SACrB,OAAO,KAAK,IAAI,QAAQ,MAAM,CAAC,SAAS,SAAS,GACjD,IAAI,MAAM;AACd,SAAO,MACL,GAAG,MAAM,+BAA+B,IAAI,MAAM,uBAAuB,IAAI,MAAM,GAAG,GAAG,CAAC,gBAAgB,QAAQ,aAAa,CAAC,gBAAgB,IAAI,SAAS,sBAAsB,gBAAgB,YAAY,QAAQ,IAAI,MAAM,SAAS,GAC3O;AACD,MAAI;GAeF,MAAM,QAAQ,MAAM,UAdR,eACR,MAAM,yBACJ,IAAI,MAAM,uBAAuB,IACjC,cACA,YACA,GAAG,MAAM,SACT,IAAI,MAAM,SACX,GACD,MAAM,uBACJ,IAAI,MAAM,uBAAuB,IACjC,YACA,GAAG,MAAM,eACT,IAAI,MAAM,SACX,EAC8B,KAAA,GAAW,WAAW,uBAAuB;AAChF,UAAO,mBAAmB,MAAM;AAChC,UAAO,MAAM,GAAG,MAAM,gBAAgB,MAAM,OAAO;WAC5C,KAAK;AACZ,UAAO,MAAM,GAAG,MAAM,kCAAkC,OAAO,IAAI,GAAG;AACtE,UAAO,UAAU,MAAM,kCAAkC,OAAO,IAAI,GAAG;;YAEhE,KAAK,SAAS,gBAAgB,OAAO;EAC9C,MAAM,QAAQ,KAAK;AACnB,MAAK,CAAC,OAAO,OAAO,uBAAuB,CAAC,OAAO,OAAO,YAAa,CAAC,MAAM,MAAM,QAClF,QAAO;AACT,MAAI;GACF,MAAM,UAAU,MAAM,yBACpB,MAAM,MAAM,uBAAuB,IACnC,MAAM,MAAM,SACZ,YACA,GAAG,MAAM,SACT,MAAM,MAAM,SACb;AACD,UAAO,MAAM,GAAG,MAAM,oBAAoB,QAAQ,OAAO,mCAAmC;GAC5F,MAAM,SAAS,MAAM,UAAU,QAAQ;AACvC,OAAI,QAAQ;IACV,MAAM,QAAQ,MAAM,UAAU,QAAQ,aAAa,WAAW,uBAAuB;AACrF,WAAO,qBAAqB,MAAM;AAClC,WAAO,iBAAiB;AACxB,WAAO,MAAM,GAAG,MAAM,uBAAuB,MAAM,OAAO;UACrD;IACL,MAAM,QAAQ,MAAM,UAAU,SAAS,cAAc,WAAW,uBAAuB;AACvF,WAAO,qBAAqB,MAAM;AAClC,WAAO,iBAAiB;AACxB,WAAO,MAAM,GAAG,MAAM,wDAAwD,MAAM,OAAO;;WAEtF,KAAK;AACZ,UAAO,MAAM,GAAG,MAAM,oCAAoC,OAAO,IAAI,GAAG;AACxE,UAAO,UAAU,MAAM,oCAAoC,OAAO,IAAI,GAAG;;YAElE,KAAK,SAAS,gBAAgB,MAAM;EAC7C,MAAM,WAAW,KAAK;AACtB,MAAK,CAAC,UAAU,OAAO,uBAAuB,CAAC,UAAU,OAAO,YAAa,CAAC,SAAS,MAAM,QAC3F,QAAO;AACT,MAAI;GACF,MAAM,MAAM,MAAM,yBAChB,SAAS,MAAM,uBAAuB,IACtC,SAAS,MAAM,SACf,YACA,GAAG,MAAM,QACT,SAAS,MAAM,SAChB;GACD,MAAM,OAAO,oBAAoB,SAAS,aAAa,WAAW;GAClE,MAAM,QAAQ,MAAM,UAClB,KACA,MACA,WACA,wBACA,SAAS,aAAa,KAAA,EACvB;AACD,UAAO,oBAAoB,MAAM;AACjC,UAAO,gBAAgB;AACvB,UAAO,MAAM,GAAG,MAAM,kBAAkB,MAAM,KAAK,QAAQ,OAAO;WAC3D,KAAK;AACZ,UAAO,MAAM,GAAG,MAAM,yBAAyB,OAAO,IAAI,GAAG;AAC7D,UAAO,UAAU,MAAM,yBAAyB,OAAO,IAAI,GAAG;;YAEvD,KAAK,SAAS,gBAAgB,OAAO;EAC9C,MAAM,YAAY,KAAK;AACvB,MAAK,CAAC,WAAW,OAAO,uBAAuB,CAAC,WAAW,OAAO,YAAa,CAAC,UAAU,MAAM,QAC9F,QAAO;AACT,MAAI;GAQF,MAAM,QAAQ,MAAM,UAAU,MAPZ,yBAChB,UAAU,MAAM,uBAAuB,IACvC,UAAU,MAAM,SAChB,YACA,GAAG,MAAM,SACT,UAAU,MAAM,SACjB,EACkC,aAAa,WAAW,uBAAuB;AAClF,UAAO,qBAAqB,MAAM;AAClC,UAAO,MAAM,GAAG,MAAM,mBAAmB,MAAM,OAAO;WAC/C,KAAK;AACZ,UAAO,MAAM,GAAG,MAAM,0BAA0B,OAAO,IAAI,GAAG;AAC9D,UAAO,UAAU,MAAM,0BAA0B,OAAO,IAAI,GAAG;;;AAInE,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mime.js","names":[],"sources":["../../../../../extensions/weixin/src/media/mime.ts"],"sourcesContent":["import path from \"node:path\";\n\nconst EXTENSION_TO_MIME: Record<string, string> = {\n \".pdf\": \"application/pdf\",\n \".doc\": \"application/msword\",\n \".docx\": \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \".xls\": \"application/vnd.ms-excel\",\n \".xlsx\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \".ppt\": \"application/vnd.ms-powerpoint\",\n \".pptx\": \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \".txt\": \"text/plain\",\n \".csv\": \"text/csv\",\n \".zip\": \"application/zip\",\n \".tar\": \"application/x-tar\",\n \".gz\": \"application/gzip\",\n \".mp3\": \"audio/mpeg\",\n \".ogg\": \"audio/ogg\",\n \".wav\": \"audio/wav\",\n \".mp4\": \"video/mp4\",\n \".mov\": \"video/quicktime\",\n \".webm\": \"video/webm\",\n \".mkv\": \"video/x-matroska\",\n \".avi\": \"video/x-msvideo\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n \".bmp\": \"image/bmp\",\n};\n\nconst MIME_TO_EXTENSION: Record<string, string> = {\n \"image/jpeg\": \".jpg\",\n \"image/jpg\": \".jpg\",\n \"image/png\": \".png\",\n \"image/gif\": \".gif\",\n \"image/webp\": \".webp\",\n \"image/bmp\": \".bmp\",\n \"video/mp4\": \".mp4\",\n \"video/quicktime\": \".mov\",\n \"video/webm\": \".webm\",\n \"video/x-matroska\": \".mkv\",\n \"video/x-msvideo\": \".avi\",\n \"audio/mpeg\": \".mp3\",\n \"audio/ogg\": \".ogg\",\n \"audio/wav\": \".wav\",\n \"application/pdf\": \".pdf\",\n \"application/zip\": \".zip\",\n \"application/x-tar\": \".tar\",\n \"application/gzip\": \".gz\",\n \"text/plain\": \".txt\",\n \"text/csv\": \".csv\",\n};\n\n/** Get MIME type from filename extension. Returns \"application/octet-stream\" for unknown extensions. */\nexport function getMimeFromFilename(filename: string): string {\n const ext = path.extname(filename).toLowerCase();\n return EXTENSION_TO_MIME[ext] ?? \"application/octet-stream\";\n}\n\n/** Get file extension from MIME type. Returns \".bin\" for unknown types. */\nexport function getExtensionFromMime(mimeType: string): string {\n const ct = mimeType.split(\";\")[0].trim().toLowerCase();\n return MIME_TO_EXTENSION[ct] ?? \".bin\";\n}\n\n/** Get file extension from Content-Type header or URL path. Returns \".bin\" for unknown. */\nexport function getExtensionFromContentTypeOrUrl(contentType: string | null, url: string): string {\n if (contentType) {\n const ext = getExtensionFromMime(contentType);\n if (ext !== \".bin\") return ext;\n }\n const ext = path.extname(new URL(url).pathname).toLowerCase();\n const knownExts = new Set(Object.keys(EXTENSION_TO_MIME));\n return knownExts.has(ext) ? ext : \".bin\";\n}\n"],"mappings":";;AAEA,MAAM,oBAA4C;CAChD,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,QAAQ;CACR,SAAS;CACT,QAAQ;CACR,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,QAAQ;CACR,SAAS;CACT,QAAQ;CACT;AAED,MAAM,oBAA4C;CAChD,cAAc;CACd,aAAa;CACb,aAAa;CACb,aAAa;CACb,cAAc;CACd,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,cAAc;CACd,oBAAoB;CACpB,mBAAmB;CACnB,cAAc;CACd,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,mBAAmB;CACnB,qBAAqB;CACrB,oBAAoB;CACpB,cAAc;CACd,YAAY;CACb;;AAGD,SAAgB,oBAAoB,UAA0B;AAE5D,QAAO,kBADK,KAAK,QAAQ,SAAS,CAAC,aACP,KAAK;;;AAInC,SAAgB,qBAAqB,UAA0B;AAE7D,QAAO,kBADI,SAAS,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,aACd,KAAK;;;AAIlC,SAAgB,iCAAiC,aAA4B,KAAqB;AAChG,KAAI,aAAa;EACf,MAAM,MAAM,qBAAqB,YAAY;AAC7C,MAAI,QAAQ,OAAQ,QAAO;;CAE7B,MAAM,MAAM,KAAK,QAAQ,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa;AAE7D,QAAO,IADe,IAAI,OAAO,KAAK,kBAAkB,CACxC,CAAC,IAAI,IAAI,GAAG,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"silk-transcode.js","names":[],"sources":["../../../../../extensions/weixin/src/media/silk-transcode.ts"],"sourcesContent":["import { logger } from \"../util/logger.js\";\n\n/** Default sample rate for Weixin voice messages. */\nconst SILK_SAMPLE_RATE = 24_000;\n\n/**\n * Wrap raw pcm_s16le bytes in a WAV container.\n * Mono channel, 16-bit signed little-endian.\n */\nfunction pcmBytesToWav(pcm: Uint8Array, sampleRate: number): Buffer {\n const pcmBytes = pcm.byteLength;\n const totalSize = 44 + pcmBytes;\n const buf = Buffer.allocUnsafe(totalSize);\n let offset = 0;\n\n buf.write(\"RIFF\", offset);\n offset += 4;\n buf.writeUInt32LE(totalSize - 8, offset);\n offset += 4;\n buf.write(\"WAVE\", offset);\n offset += 4;\n\n buf.write(\"fmt \", offset);\n offset += 4;\n buf.writeUInt32LE(16, offset);\n offset += 4; // fmt chunk size\n buf.writeUInt16LE(1, offset);\n offset += 2; // PCM format\n buf.writeUInt16LE(1, offset);\n offset += 2; // mono\n buf.writeUInt32LE(sampleRate, offset);\n offset += 4;\n buf.writeUInt32LE(sampleRate * 2, offset);\n offset += 4; // byte rate (mono 16-bit)\n buf.writeUInt16LE(2, offset);\n offset += 2; // block align\n buf.writeUInt16LE(16, offset);\n offset += 2; // bits per sample\n\n buf.write(\"data\", offset);\n offset += 4;\n buf.writeUInt32LE(pcmBytes, offset);\n offset += 4;\n\n Buffer.from(pcm.buffer, pcm.byteOffset, pcm.byteLength).copy(buf, offset);\n\n return buf;\n}\n\n/**\n * Try to transcode a SILK audio buffer to WAV using silk-wasm.\n * silk-wasm's decode() returns { data: Uint8Array (pcm_s16le), duration: number }.\n *\n * Returns a WAV Buffer on success, or null if silk-wasm is unavailable or decoding fails.\n * Callers should fall back to passing the raw SILK file when null is returned.\n */\nexport async function silkToWav(silkBuf: Buffer): Promise<Buffer | null> {\n try {\n const { decode } = await import(\"silk-wasm\");\n\n logger.debug(`silkToWav: decoding ${silkBuf.length} bytes of SILK`);\n const result = await decode(silkBuf, SILK_SAMPLE_RATE);\n logger.debug(\n `silkToWav: decoded duration=${result.duration}ms pcmBytes=${result.data.byteLength}`,\n );\n\n const wav = pcmBytesToWav(result.data, SILK_SAMPLE_RATE);\n logger.debug(`silkToWav: WAV size=${wav.length}`);\n return wav;\n } catch (err) {\n logger.warn(`silkToWav: transcode failed, will use raw silk err=${String(err)}`);\n return null;\n }\n}\n"],"mappings":";;;AAGA,MAAM,mBAAmB;;;;;AAMzB,SAAS,cAAc,KAAiB,YAA4B;CAClE,MAAM,WAAW,IAAI;CACrB,MAAM,YAAY,KAAK;CACvB,MAAM,MAAM,OAAO,YAAY,UAAU;CACzC,IAAI,SAAS;AAEb,KAAI,MAAM,QAAQ,OAAO;AACzB,WAAU;AACV,KAAI,cAAc,YAAY,GAAG,OAAO;AACxC,WAAU;AACV,KAAI,MAAM,QAAQ,OAAO;AACzB,WAAU;AAEV,KAAI,MAAM,QAAQ,OAAO;AACzB,WAAU;AACV,KAAI,cAAc,IAAI,OAAO;AAC7B,WAAU;AACV,KAAI,cAAc,GAAG,OAAO;AAC5B,WAAU;AACV,KAAI,cAAc,GAAG,OAAO;AAC5B,WAAU;AACV,KAAI,cAAc,YAAY,OAAO;AACrC,WAAU;AACV,KAAI,cAAc,aAAa,GAAG,OAAO;AACzC,WAAU;AACV,KAAI,cAAc,GAAG,OAAO;AAC5B,WAAU;AACV,KAAI,cAAc,IAAI,OAAO;AAC7B,WAAU;AAEV,KAAI,MAAM,QAAQ,OAAO;AACzB,WAAU;AACV,KAAI,cAAc,UAAU,OAAO;AACnC,WAAU;AAEV,QAAO,KAAK,IAAI,QAAQ,IAAI,YAAY,IAAI,WAAW,CAAC,KAAK,KAAK,OAAO;AAEzE,QAAO;;;;;;;;;AAUT,eAAsB,UAAU,SAAyC;AACvE,KAAI;EACF,MAAM,EAAE,WAAW,MAAM,OAAO;AAEhC,SAAO,MAAM,uBAAuB,QAAQ,OAAO,gBAAgB;EACnE,MAAM,SAAS,MAAM,OAAO,SAAS,iBAAiB;AACtD,SAAO,MACL,+BAA+B,OAAO,SAAS,cAAc,OAAO,KAAK,aAC1E;EAED,MAAM,MAAM,cAAc,OAAO,MAAM,iBAAiB;AACxD,SAAO,MAAM,uBAAuB,IAAI,SAAS;AACjD,SAAO;UACA,KAAK;AACZ,SAAO,KAAK,sDAAsD,OAAO,IAAI,GAAG;AAChF,SAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-token-init.js","names":[],"sources":["../../../../../extensions/weixin/src/messaging/context-token-init.ts"],"sourcesContent":["import { toRawIlinkUserIdForApi } from '../auth/weixin-account-id.js';\nimport { getConfig } from '../api/api.js';\nimport type { ResolvedWeixinAccount } from '../auth/accounts.js';\nimport { logger } from '../util/logger.js';\n\nimport { getContextToken, getWeixinOutboundSendUserId, setContextToken } from './inbound.js';\n\n/**\n * When there is no cached context_token (e.g. cron before any inbound in this process),\n * try ilink getconfig — some deployments return context_token for the given ilink_user_id.\n */\nexport async function ensureWeixinContextTokenForOutbound(\n accountId: string,\n userId: string,\n account: Pick<ResolvedWeixinAccount, 'baseUrl' | 'token' | 'routeTag'>,\n): Promise<string | undefined> {\n const cached = getContextToken(accountId, userId);\n if (cached) return cached;\n if (!account.token?.trim()) return undefined;\n\n try {\n const ilinkUserId =\n getWeixinOutboundSendUserId(accountId, userId)?.trim() || toRawIlinkUserIdForApi(userId);\n const resp = await getConfig({\n baseUrl: account.baseUrl,\n token: account.token,\n routeTag: account.routeTag,\n ilinkUserId,\n contextToken: undefined,\n });\n if (resp.ret != null && resp.ret !== 0) {\n logger.debug(\n { userId, accountId, ret: resp.ret, errmsg: resp.errmsg },\n 'ensureWeixinContextTokenForOutbound: getConfig returned error',\n );\n return undefined;\n }\n const t = resp.context_token?.trim();\n if (t) {\n setContextToken(accountId, userId, t);\n logger.info(\n { userId, accountId },\n 'ensureWeixinContextTokenForOutbound: stored context_token from getConfig',\n );\n return t;\n }\n } catch (e) {\n logger.debug({ err: e, userId, accountId }, 'ensureWeixinContextTokenForOutbound: getConfig failed');\n }\n return undefined;\n}\n"],"mappings":";;;;;;;;;AAWA,eAAsB,oCACpB,WACA,QACA,SAC6B;CAC7B,MAAM,SAAS,gBAAgB,WAAW,OAAO;AACjD,KAAI,OAAQ,QAAO;AACnB,KAAI,CAAC,QAAQ,OAAO,MAAM,CAAE,QAAO,KAAA;AAEnC,KAAI;EACF,MAAM,cACJ,4BAA4B,WAAW,OAAO,EAAE,MAAM,IAAI,uBAAuB,OAAO;EAC1F,MAAM,OAAO,MAAM,UAAU;GAC3B,SAAS,QAAQ;GACjB,OAAO,QAAQ;GACf,UAAU,QAAQ;GAClB;GACA,cAAc,KAAA;GACf,CAAC;AACF,MAAI,KAAK,OAAO,QAAQ,KAAK,QAAQ,GAAG;AACtC,UAAO,MACL;IAAE;IAAQ;IAAW,KAAK,KAAK;IAAK,QAAQ,KAAK;IAAQ,EACzD,gEACD;AACD;;EAEF,MAAM,IAAI,KAAK,eAAe,MAAM;AACpC,MAAI,GAAG;AACL,mBAAgB,WAAW,QAAQ,EAAE;AACrC,UAAO,KACL;IAAE;IAAQ;IAAW,EACrB,2EACD;AACD,UAAO;;UAEF,GAAG;AACV,SAAO,MAAM;GAAE,KAAK;GAAG;GAAQ;GAAW,EAAE,wDAAwD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-mode.js","names":[],"sources":["../../../../../extensions/weixin/src/messaging/debug-mode.ts"],"sourcesContent":["/**\n * Per-bot debug mode toggle, persisted to disk so it survives gateway restarts.\n *\n * State file: `resolveWeixinRootDir()/debug-mode.json`\n * Format: `{ \"accounts\": { \"<accountId>\": true, ... } }`\n *\n * When enabled, processOneMessage appends a timing summary after each\n * AI reply is delivered to the user.\n */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nimport { resolveWeixinRootDir } from \"../storage/state-dir.js\";\nimport { logger } from \"../util/logger.js\";\n\ninterface DebugModeState {\n accounts: Record<string, boolean>;\n}\n\nfunction resolveDebugModePath(): string {\n return path.join(resolveWeixinRootDir(), \"debug-mode.json\");\n}\n\nfunction loadState(): DebugModeState {\n try {\n const raw = fs.readFileSync(resolveDebugModePath(), \"utf-8\");\n const parsed = JSON.parse(raw) as DebugModeState;\n if (parsed && typeof parsed.accounts === \"object\") return parsed;\n } catch {\n // missing or corrupt — start fresh\n }\n return { accounts: {} };\n}\n\nfunction saveState(state: DebugModeState): void {\n const filePath = resolveDebugModePath();\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n fs.writeFileSync(filePath, JSON.stringify(state, null, 2), \"utf-8\");\n}\n\n/** Toggle debug mode for a bot account. Returns the new state. */\nexport function toggleDebugMode(accountId: string): boolean {\n const state = loadState();\n const next = !state.accounts[accountId];\n state.accounts[accountId] = next;\n try {\n saveState(state);\n } catch (err) {\n logger.error(`debug-mode: failed to persist state: ${String(err)}`);\n }\n return next;\n}\n\n/** Check whether debug mode is active for a bot account. */\nexport function isDebugMode(accountId: string): boolean {\n return loadState().accounts[accountId] === true;\n}\n\n/**\n * Reset internal state — only for tests.\n * @internal\n */\nexport function _resetForTest(): void {\n try {\n fs.unlinkSync(resolveDebugModePath());\n } catch {\n // ignore if not present\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAmBA,SAAS,uBAA+B;AACtC,QAAO,KAAK,KAAK,sBAAsB,EAAE,kBAAkB;;AAG7D,SAAS,YAA4B;AACnC,KAAI;EACF,MAAM,MAAM,GAAG,aAAa,sBAAsB,EAAE,QAAQ;EAC5D,MAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,MAAI,UAAU,OAAO,OAAO,aAAa,SAAU,QAAO;SACpD;AAGR,QAAO,EAAE,UAAU,EAAE,EAAE;;AAGzB,SAAS,UAAU,OAA6B;CAC9C,MAAM,WAAW,sBAAsB;AACvC,IAAG,UAAU,KAAK,QAAQ,SAAS,EAAE,EAAE,WAAW,MAAM,CAAC;AACzD,IAAG,cAAc,UAAU,KAAK,UAAU,OAAO,MAAM,EAAE,EAAE,QAAQ;;;AAIrE,SAAgB,gBAAgB,WAA4B;CAC1D,MAAM,QAAQ,WAAW;CACzB,MAAM,OAAO,CAAC,MAAM,SAAS;AAC7B,OAAM,SAAS,aAAa;AAC5B,KAAI;AACF,YAAU,MAAM;UACT,KAAK;AACZ,SAAO,MAAM,wCAAwC,OAAO,IAAI,GAAG;;AAErE,QAAO;;;AAIT,SAAgB,YAAY,WAA4B;AACtD,QAAO,WAAW,CAAC,SAAS,eAAe;;;;;;AAO7C,SAAgB,gBAAsB;AACpC,KAAI;AACF,KAAG,WAAW,sBAAsB,CAAC;SAC/B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-notice.js","names":[],"sources":["../../../../../extensions/weixin/src/messaging/error-notice.ts"],"sourcesContent":["import { sendMessageWeixin } from \"./send.js\";\n\n/**\n * Map send failures to user-visible copy (process-message onError behavior).\n */\nexport function mapWeixinOutboundErrorNotice(errMsg: string): string {\n if (errMsg.includes(\"remote media download failed\") || errMsg.includes(\"fetch\")) {\n return `⚠️ 媒体文件下载失败,请检查链接是否可访问。`;\n }\n if (\n errMsg.includes(\"getUploadUrl\") ||\n errMsg.includes(\"CDN upload\") ||\n errMsg.includes(\"upload_param\")\n ) {\n return `⚠️ 媒体文件上传失败,请稍后重试。`;\n }\n return `⚠️ 消息发送失败:${errMsg}`;\n}\n\n/**\n * Fire-and-forget error line to the user; logs secondary failures.\n */\nexport async function sendWeixinErrorNotice(params: {\n to: string;\n toUserIdForApi?: string;\n contextToken: string | undefined;\n message: string;\n baseUrl: string;\n token?: string;\n routeTag?: string;\n errLog: (m: string) => void;\n}): Promise<void> {\n if (!params.contextToken) {\n params.errLog(`sendWeixinErrorNotice: no contextToken for to=${params.to}`);\n }\n try {\n await sendMessageWeixin({\n to: params.to,\n toUserIdForApi: params.toUserIdForApi,\n text: params.message,\n opts: {\n baseUrl: params.baseUrl,\n token: params.token,\n routeTag: params.routeTag,\n contextToken: params.contextToken,\n },\n });\n } catch (err) {\n params.errLog(`[weixin] sendWeixinErrorNotice failed to=${params.to}: ${String(err)}`);\n }\n}\n"],"mappings":";;;;;AAKA,SAAgB,6BAA6B,QAAwB;AACnE,KAAI,OAAO,SAAS,+BAA+B,IAAI,OAAO,SAAS,QAAQ,CAC7E,QAAO;AAET,KACE,OAAO,SAAS,eAAe,IAC/B,OAAO,SAAS,aAAa,IAC7B,OAAO,SAAS,eAAe,CAE/B,QAAO;AAET,QAAO,aAAa;;;;;AAMtB,eAAsB,sBAAsB,QAS1B;AAChB,KAAI,CAAC,OAAO,aACV,QAAO,OAAO,iDAAiD,OAAO,KAAK;AAE7E,KAAI;AACF,QAAM,kBAAkB;GACtB,IAAI,OAAO;GACX,gBAAgB,OAAO;GACvB,MAAM,OAAO;GACb,MAAM;IACJ,SAAS,OAAO;IAChB,OAAO,OAAO;IACd,UAAU,OAAO;IACjB,cAAc,OAAO;IACtB;GACF,CAAC;UACK,KAAK;AACZ,SAAO,OAAO,4CAA4C,OAAO,GAAG,IAAI,OAAO,IAAI,GAAG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"inbound.js","names":[],"sources":["../../../../../extensions/weixin/src/messaging/inbound.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\n\nimport { logger } from \"../util/logger.js\";\nimport { generateId } from \"../util/random.js\";\nimport type { WeixinMessage, MessageItem } from \"../api/types.js\";\nimport { MessageItemType } from \"../api/types.js\";\nimport { canonicalWeixinPeerId, normalizeWeixinAccountId } from \"../auth/weixin-account-id.js\";\nimport { resolveWeixinRootDir } from \"../storage/state-dir.js\";\n\n// ---------------------------------------------------------------------------\n// Context token store (in-process cache + disk persistence)\n// ---------------------------------------------------------------------------\n\ntype WeixinContextTokenEntry = { token: string; sendTo?: string };\n\n/**\n * contextToken is issued per-message by the Weixin getupdates API and must\n * be echoed verbatim in every outbound send. The in-memory map is the primary\n * lookup; a disk-backed file per account ensures tokens survive gateway restarts.\n *\n * `sendTo` is the last inbound `from_user_id` verbatim. ilink often requires `to_user_id`\n * in sendmessage to match that string exactly (session/cron peer ids are sanitized).\n */\nconst contextTokenStore = new Map<string, WeixinContextTokenEntry>();\n\nfunction parsePersistedPeerVal(val: unknown): WeixinContextTokenEntry | null {\n if (typeof val === \"string\" && val.trim()) {\n return { token: val.trim() };\n }\n if (val && typeof val === \"object\" && \"token\" in val) {\n const o = val as { token: unknown; sendTo?: unknown };\n if (typeof o.token !== \"string\" || !o.token.trim()) return null;\n const sendTo = typeof o.sendTo === \"string\" && o.sendTo.trim() ? o.sendTo.trim() : undefined;\n return { token: o.token.trim(), ...(sendTo ? { sendTo } : {}) };\n }\n return null;\n}\n\n/**\n * Session keys use {@link canonicalWeixinPeerId} (same as `buildSessionKey`); cron `delivery.to`\n * and outbound `ctx.to` use that shape. ilink `from_user_id` is often `…@im.wechat` while the\n * session peer is `…-im-wechat`. Normalize so context_token cache keys match lookups.\n */\nfunction normalizeIlinkUserIdForContext(userId: string): string {\n return canonicalWeixinPeerId(userId);\n}\n\n/** ilink may use a shorter openid in one path and a suffixed id in another; treat as same peer when unambiguous. */\nfunction ilinkPeerKeysLikelySame(storedKey: string, queryPeer: string): boolean {\n const a = normalizeIlinkUserIdForContext(storedKey);\n const b = normalizeIlinkUserIdForContext(queryPeer);\n if (a === b) return true;\n if (a.length < 12 || b.length < 12) return false;\n return a.startsWith(b) || b.startsWith(a);\n}\n\nfunction contextTokenKey(accountId: string, userId: string): string {\n return `${normalizeWeixinAccountId(accountId)}:${normalizeIlinkUserIdForContext(userId)}`;\n}\n\n// ---------------------------------------------------------------------------\n// Disk persistence helpers\n// ---------------------------------------------------------------------------\n\nfunction canonicalContextTokenFilePath(accountId: string): string {\n const norm = normalizeWeixinAccountId(accountId);\n return path.join(resolveWeixinRootDir(), \"accounts\", `${norm}.context-tokens.json`);\n}\n\n/** Persist all context tokens for a given account to disk. */\nfunction persistContextTokens(accountId: string): void {\n const norm = normalizeWeixinAccountId(accountId);\n const prefix = `${norm}:`;\n const tokens: Record<string, string | { token: string; sendTo?: string }> = {};\n for (const [k, v] of contextTokenStore) {\n if (k.startsWith(prefix)) {\n const peerSuffix = k.slice(prefix.length);\n if (v.sendTo?.trim()) {\n tokens[peerSuffix] = { token: v.token, sendTo: v.sendTo.trim() };\n } else {\n tokens[peerSuffix] = v.token;\n }\n }\n }\n const filePath = canonicalContextTokenFilePath(accountId);\n try {\n const dir = path.dirname(filePath);\n fs.mkdirSync(dir, { recursive: true });\n fs.writeFileSync(filePath, JSON.stringify(tokens, null, 0), \"utf-8\");\n } catch (err) {\n logger.warn(`persistContextTokens: failed to write ${filePath}: ${String(err)}`);\n }\n}\n\n/**\n * Restore persisted context tokens for an account into the in-memory map.\n * Called once during gateway startAccount to survive restarts.\n */\nexport function restoreContextTokens(accountId: string): void {\n let count = 0;\n const norm = normalizeWeixinAccountId(accountId);\n const filePath = canonicalContextTokenFilePath(accountId);\n try {\n if (fs.existsSync(filePath)) {\n const raw = fs.readFileSync(filePath, \"utf-8\");\n const tokens = JSON.parse(raw) as Record<string, unknown>;\n for (const [userId, val] of Object.entries(tokens)) {\n const entry = parsePersistedPeerVal(val);\n if (entry?.token) {\n contextTokenStore.set(contextTokenKey(norm, userId), entry);\n count++;\n }\n }\n }\n } catch (err) {\n logger.warn(`restoreContextTokens: failed to read ${filePath}: ${String(err)}`);\n }\n if (count > 0) {\n logger.info(`restoreContextTokens: restored ${count} tokens for account=${norm}`);\n }\n}\n\n/** Remove all context tokens for a given account (memory + disk). */\nexport function clearContextTokensForAccount(accountId: string): void {\n const norm = normalizeWeixinAccountId(accountId);\n const prefix = `${norm}:`;\n for (const k of [...contextTokenStore.keys()]) {\n if (k.startsWith(prefix)) {\n contextTokenStore.delete(k);\n }\n }\n try {\n const filePath = canonicalContextTokenFilePath(accountId);\n if (fs.existsSync(filePath)) fs.unlinkSync(filePath);\n } catch (err) {\n logger.warn(`clearContextTokensForAccount: failed to remove context tokens file: ${String(err)}`);\n }\n logger.info(`clearContextTokensForAccount: cleared tokens for account=${norm}`);\n}\n\nfunction tryHydratePeerEntryFromDisk(accountId: string, userId: string): WeixinContextTokenEntry | undefined {\n const peer = normalizeIlinkUserIdForContext(userId);\n const norm = normalizeWeixinAccountId(accountId);\n const filePath = canonicalContextTokenFilePath(accountId);\n if (!fs.existsSync(filePath)) return undefined;\n try {\n const raw = fs.readFileSync(filePath, \"utf-8\");\n const tokens = JSON.parse(raw) as Record<string, unknown>;\n for (const [jsonKey, val] of Object.entries(tokens)) {\n const entry = parsePersistedPeerVal(val);\n if (!entry?.token) continue;\n if (!ilinkPeerKeysLikelySame(jsonKey, peer)) continue;\n contextTokenStore.set(contextTokenKey(norm, peer), entry);\n persistContextTokens(accountId);\n return entry;\n }\n } catch (err) {\n logger.debug(`tryHydratePeerEntryFromDisk: ${filePath}: ${String(err)}`);\n }\n return undefined;\n}\n\nfunction getWeixinContextPeerEntry(\n accountId: string,\n userId: string,\n): WeixinContextTokenEntry | undefined {\n const k = contextTokenKey(accountId, userId);\n let e = contextTokenStore.get(k);\n if (e?.token) {\n return e;\n }\n const hydrated = tryHydratePeerEntryFromDisk(accountId, userId);\n if (hydrated) return hydrated;\n return contextTokenStore.get(k);\n}\n\n/** Last inbound `from_user_id` for API `to_user_id` (verbatim), when known. */\nexport function getWeixinOutboundSendUserId(accountId: string, userId: string): string | undefined {\n return getWeixinContextPeerEntry(accountId, userId)?.sendTo?.trim() || undefined;\n}\n\n/** Store a context token for a given account+user pair (memory + disk). */\nexport function setContextToken(\n accountId: string,\n userId: string,\n token: string,\n options?: { sendToUserId?: string },\n): void {\n const k = contextTokenKey(accountId, userId);\n const prev = contextTokenStore.get(k);\n const sendTo =\n options && options.sendToUserId !== undefined\n ? options.sendToUserId.trim() || undefined\n : prev?.sendTo;\n const next: WeixinContextTokenEntry = { token, ...(sendTo ? { sendTo } : {}) };\n logger.debug(`setContextToken: key=${k} sendTo=${sendTo ? \"yes\" : \"no\"}`);\n contextTokenStore.set(k, next);\n persistContextTokens(accountId);\n}\n\n/** Retrieve the cached context token for a given account+user pair. */\nexport function getContextToken(accountId: string, userId: string): string | undefined {\n const k = contextTokenKey(accountId, userId);\n const e = getWeixinContextPeerEntry(accountId, userId);\n logger.debug(\n `getContextToken: key=${k} found=${e?.token !== undefined} storeSize=${contextTokenStore.size}`,\n );\n return e?.token;\n}\n\n/**\n * Find all accountIds that have an active contextToken for the given userId.\n * Used to infer the sending bot account from the recipient address when\n * accountId is not explicitly provided (e.g. cron delivery).\n *\n * Returns all matching accountIds (not just the first) so the caller can\n * detect ambiguity when multiple accounts have sessions with the same user.\n */\nexport function findAccountIdsByContextToken(\n accountIds: string[],\n userId: string,\n): string[] {\n return accountIds.filter((id) => contextTokenStore.has(contextTokenKey(id, userId)));\n}\n\n/** In-memory entries whose peer id matches (exact or ilink prefix/suffix variant). */\nexport function findContextTokenEntriesByPeer(\n peerUserId: string,\n): Array<{ accountId: string; token: string; sendTo?: string }> {\n const peer = normalizeIlinkUserIdForContext(peerUserId);\n const out: Array<{ accountId: string; token: string; sendTo?: string }> = [];\n for (const [k, entry] of contextTokenStore) {\n if (!entry?.token?.trim()) continue;\n const idx = k.indexOf(':');\n if (idx <= 0 || idx >= k.length - 1) continue;\n const accountId = k.slice(0, idx);\n const storedPeer = k.slice(idx + 1);\n if (!ilinkPeerKeysLikelySame(storedPeer, peer)) continue;\n if (accountId) {\n out.push({\n accountId,\n token: entry.token,\n ...(entry.sendTo?.trim() ? { sendTo: entry.sendTo.trim() } : {}),\n });\n }\n }\n return out;\n}\n\n/**\n * When the preferred account id does not match the token filename, scan every\n * `accounts/*.context-tokens.json` for this peer (case-insensitive user key).\n */\nexport function tryHydrateAnyAccountContextTokenFromDisk(\n peerUserId: string,\n): { accountId: string; token: string; sendTo?: string } | undefined {\n const peer = normalizeIlinkUserIdForContext(peerUserId);\n const accountsDir = path.join(resolveWeixinRootDir(), 'accounts');\n if (!fs.existsSync(accountsDir)) return undefined;\n const hits: Array<{ accountId: string; token: string; sendTo?: string }> = [];\n let names: string[];\n try {\n names = fs.readdirSync(accountsDir);\n } catch {\n return undefined;\n }\n const suffix = '.context-tokens.json';\n for (const name of names) {\n if (!name.endsWith(suffix)) continue;\n const accountFromFile = name.slice(0, -suffix.length);\n const filePath = path.join(accountsDir, name);\n try {\n const raw = fs.readFileSync(filePath, 'utf-8');\n const tokens = JSON.parse(raw) as Record<string, unknown>;\n for (const [jsonKey, val] of Object.entries(tokens)) {\n const entry = parsePersistedPeerVal(val);\n if (!entry?.token) continue;\n if (!ilinkPeerKeysLikelySame(jsonKey, peer)) continue;\n hits.push({\n accountId: normalizeWeixinAccountId(accountFromFile),\n token: entry.token,\n ...(entry.sendTo?.trim() ? { sendTo: entry.sendTo.trim() } : {}),\n });\n }\n } catch {\n /* skip corrupt file */\n }\n }\n if (hits.length === 0) return undefined;\n const byAccount = new Map<string, { token: string; sendTo?: string }>();\n for (const h of hits) {\n if (!byAccount.has(h.accountId)) byAccount.set(h.accountId, { token: h.token, sendTo: h.sendTo });\n }\n if (byAccount.size > 1) return undefined;\n const [accountId, hit] = [...byAccount.entries()][0]!;\n setContextToken(accountId, peer, hit.token, hit.sendTo ? { sendToUserId: hit.sendTo } : undefined);\n return { accountId, token: hit.token, sendTo: hit.sendTo };\n}\n\n// ---------------------------------------------------------------------------\n// Message ID generation\n// ---------------------------------------------------------------------------\n\nfunction generateMessageSid(): string {\n return generateId(\"weixin\");\n}\n\n/** Inbound context for the core message pipeline (matches MsgContext shape). */\nexport type WeixinMsgContext = {\n Body: string;\n From: string;\n To: string;\n AccountId: string;\n OriginatingChannel: \"weixin\";\n OriginatingTo: string;\n MessageSid: string;\n Timestamp?: number;\n Provider: \"weixin\";\n ChatType: \"direct\";\n /** Set by monitor after resolveAgentRoute so dispatchReplyFromConfig uses the correct session. */\n SessionKey?: string;\n context_token?: string;\n MediaUrl?: string;\n MediaPath?: string;\n MediaType?: string;\n /** Raw message body for framework command authorization. */\n CommandBody?: string;\n /** Whether the sender is authorized to execute slash commands. */\n CommandAuthorized?: boolean;\n};\n\n/** Returns true if the message item is a media type (image, video, file, or voice). */\nexport function isMediaItem(item: MessageItem): boolean {\n return (\n item.type === MessageItemType.IMAGE ||\n item.type === MessageItemType.VIDEO ||\n item.type === MessageItemType.FILE ||\n item.type === MessageItemType.VOICE\n );\n}\n\nfunction bodyFromItemList(itemList?: MessageItem[]): string {\n if (!itemList?.length) return \"\";\n for (const item of itemList) {\n if (item.type === MessageItemType.TEXT && item.text_item?.text != null) {\n const text = String(item.text_item.text);\n const ref = item.ref_msg;\n if (!ref) return text;\n // Quoted media is passed as MediaPath; only include the current text as body.\n if (ref.message_item && isMediaItem(ref.message_item)) return text;\n // Build quoted context from both title and message_item content.\n const parts: string[] = [];\n if (ref.title) parts.push(ref.title);\n if (ref.message_item) {\n const refBody = bodyFromItemList([ref.message_item]);\n if (refBody) parts.push(refBody);\n }\n if (!parts.length) return text;\n return `[引用: ${parts.join(\" | \")}]\\n${text}`;\n }\n // 语音转文字:如果语音消息有 text 字段,直接使用文字内容\n if (item.type === MessageItemType.VOICE && item.voice_item?.text) {\n return item.voice_item.text;\n }\n }\n return \"\";\n}\n\nexport type WeixinInboundMediaOpts = {\n /** Local path to decrypted image file. */\n decryptedPicPath?: string;\n /** Local path to transcoded/raw voice file (.wav or .silk). */\n decryptedVoicePath?: string;\n /** MIME type for the voice file (e.g. \"audio/wav\" or \"audio/silk\"). */\n voiceMediaType?: string;\n /** Local path to decrypted file attachment. */\n decryptedFilePath?: string;\n /** MIME type for the file attachment (guessed from file_name). */\n fileMediaType?: string;\n /** Local path to decrypted video file. */\n decryptedVideoPath?: string;\n};\n\n/**\n * Convert a WeixinMessage from getUpdates to the inbound MsgContext for the core pipeline.\n * Media: only pass MediaPath (local file, after CDN download + decrypt).\n * We never pass MediaUrl — the upstream CDN URL is encrypted/auth-only.\n * Priority when multiple media types present: image > video > file > voice.\n */\nexport function weixinMessageToMsgContext(\n msg: WeixinMessage,\n accountId: string,\n opts?: WeixinInboundMediaOpts,\n): WeixinMsgContext {\n const from_user_id = msg.from_user_id ?? \"\";\n const ctx: WeixinMsgContext = {\n Body: bodyFromItemList(msg.item_list),\n From: from_user_id,\n To: from_user_id,\n AccountId: accountId,\n OriginatingChannel: \"weixin\",\n OriginatingTo: from_user_id,\n MessageSid: generateMessageSid(),\n Timestamp: msg.create_time_ms,\n Provider: \"weixin\",\n ChatType: \"direct\",\n };\n if (msg.context_token) {\n ctx.context_token = msg.context_token;\n }\n\n if (opts?.decryptedPicPath) {\n ctx.MediaPath = opts.decryptedPicPath;\n ctx.MediaType = \"image/*\";\n } else if (opts?.decryptedVideoPath) {\n ctx.MediaPath = opts.decryptedVideoPath;\n ctx.MediaType = \"video/mp4\";\n } else if (opts?.decryptedFilePath) {\n ctx.MediaPath = opts.decryptedFilePath;\n ctx.MediaType = opts.fileMediaType ?? \"application/octet-stream\";\n } else if (opts?.decryptedVoicePath) {\n ctx.MediaPath = opts.decryptedVoicePath;\n ctx.MediaType = opts.voiceMediaType ?? \"audio/wav\";\n }\n\n return ctx;\n}\n\n/** Extract the context_token from an inbound WeixinMsgContext. */\nexport function getContextTokenFromMsgContext(ctx: WeixinMsgContext): string | undefined {\n return ctx.context_token;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown-filter.js","names":[],"sources":["../../../../../extensions/weixin/src/messaging/markdown-filter.ts"],"sourcesContent":["/**\n * Streaming markdown filter — character-level state machine that strips\n * unsupported markdown syntax on-the-fly.\n */\nexport class StreamingMarkdownFilter {\n private buf = \"\";\n private fence = false;\n private sol = true;\n private inl: { type: \"image\" | \"bold3\" | \"italic\" | \"ubold3\" | \"uitalic\"; acc: string } | null =\n null;\n\n feed(delta: string): string {\n this.buf += delta;\n return this.pump(false);\n }\n\n flush(): string {\n return this.pump(true);\n }\n\n private pump(eof: boolean): string {\n let out = \"\";\n while (this.buf) {\n const sLen = this.buf.length;\n const sSol = this.sol;\n const sFence = this.fence;\n const sInl = this.inl;\n\n if (this.fence) out += this.pumpFence(eof);\n else if (this.inl) out += this.pumpInline(eof);\n else if (this.sol) out += this.pumpSOL(eof);\n else out += this.pumpBody(eof);\n\n if (\n this.buf.length === sLen &&\n this.sol === sSol &&\n this.fence === sFence &&\n this.inl === sInl\n )\n break;\n }\n\n if (eof && this.inl) {\n const markers: Record<string, string> = {\n image: \"![\",\n bold3: \"***\",\n italic: \"*\",\n ubold3: \"___\",\n uitalic: \"_\",\n };\n out += (markers[this.inl.type] ?? \"\") + this.inl.acc;\n this.inl = null;\n }\n return out;\n }\n\n private pumpFence(eof: boolean): string {\n if (this.sol) {\n if (this.buf.length < 3 && !eof) return \"\";\n if (this.buf.startsWith(\"```\")) {\n const nl = this.buf.indexOf(\"\\n\", 3);\n if (nl !== -1) {\n this.fence = false;\n const line = this.buf.slice(0, nl + 1);\n this.buf = this.buf.slice(nl + 1);\n this.sol = true;\n return line;\n }\n if (eof) {\n this.fence = false;\n const line = this.buf;\n this.buf = \"\";\n return line;\n }\n return \"\";\n }\n this.sol = false;\n }\n const nl = this.buf.indexOf(\"\\n\");\n if (nl !== -1) {\n const chunk = this.buf.slice(0, nl + 1);\n this.buf = this.buf.slice(nl + 1);\n this.sol = true;\n return chunk;\n }\n const chunk = this.buf;\n this.buf = \"\";\n return chunk;\n }\n\n private pumpSOL(eof: boolean): string {\n const b = this.buf;\n\n if (b[0] === \"\\n\") {\n this.buf = b.slice(1);\n return \"\\n\";\n }\n\n if (b[0] === \"`\") {\n if (b.length < 3 && !eof) return \"\";\n if (b.startsWith(\"```\")) {\n const nl = b.indexOf(\"\\n\", 3);\n if (nl !== -1) {\n this.fence = true;\n const line = b.slice(0, nl + 1);\n this.buf = b.slice(nl + 1);\n this.sol = true;\n return line;\n }\n if (eof) {\n this.buf = \"\";\n return b;\n }\n return \"\";\n }\n this.sol = false;\n return \"\";\n }\n\n if (b[0] === \">\") {\n this.sol = false;\n return \"\";\n }\n\n if (b[0] === \"#\") {\n let n = 0;\n while (n < b.length && b[n] === \"#\") n++;\n if (n === b.length && !eof) return \"\";\n if (n >= 5 && n <= 6 && n < b.length && b[n] === \" \") {\n this.buf = b.slice(n + 1);\n this.sol = false;\n return \"\";\n }\n this.sol = false;\n return \"\";\n }\n\n if (b[0] === \" \" || b[0] === \"\\t\") {\n if (b.search(/[^ \\t]/) === -1 && !eof) return \"\";\n this.sol = false;\n return \"\";\n }\n\n if (b[0] === \"-\" || b[0] === \"*\" || b[0] === \"_\") {\n const ch = b[0];\n let j = 0;\n while (j < b.length && (b[j] === ch || b[j] === \" \")) j++;\n if (j === b.length && !eof) return \"\";\n if (j === b.length || b[j] === \"\\n\") {\n let count = 0;\n for (let k = 0; k < j; k++) if (b[k] === ch) count++;\n if (count >= 3) {\n if (j < b.length) {\n this.buf = b.slice(j + 1);\n this.sol = true;\n return b.slice(0, j + 1);\n }\n this.buf = \"\";\n return b;\n }\n }\n this.sol = false;\n return \"\";\n }\n\n this.sol = false;\n return \"\";\n }\n\n private pumpBody(eof: boolean): string {\n let out = \"\";\n let i = 0;\n while (i < this.buf.length) {\n const c = this.buf[i];\n if (c === \"\\n\") {\n out += this.buf.slice(0, i + 1);\n this.buf = this.buf.slice(i + 1);\n this.sol = true;\n return out;\n }\n if (c === \"!\" && i + 1 < this.buf.length && this.buf[i + 1] === \"[\") {\n out += this.buf.slice(0, i);\n this.buf = this.buf.slice(i + 2);\n this.inl = { type: \"image\", acc: \"\" };\n return out;\n }\n if (c === \"~\") {\n i++;\n continue;\n }\n if (c === \"*\") {\n if (i + 2 < this.buf.length && this.buf[i + 1] === \"*\" && this.buf[i + 2] === \"*\") {\n out += this.buf.slice(0, i);\n this.buf = this.buf.slice(i + 3);\n this.inl = { type: \"bold3\", acc: \"\" };\n return out;\n }\n if (i + 1 < this.buf.length && this.buf[i + 1] === \"*\") {\n i += 2;\n continue;\n }\n if (i + 1 < this.buf.length && this.buf[i + 1] !== \" \" && this.buf[i + 1] !== \"\\n\") {\n out += this.buf.slice(0, i);\n this.buf = this.buf.slice(i + 1);\n this.inl = { type: \"italic\", acc: \"\" };\n return out;\n }\n i++;\n continue;\n }\n if (c === \"_\") {\n if (i + 2 < this.buf.length && this.buf[i + 1] === \"_\" && this.buf[i + 2] === \"_\") {\n out += this.buf.slice(0, i);\n this.buf = this.buf.slice(i + 3);\n this.inl = { type: \"ubold3\", acc: \"\" };\n return out;\n }\n if (i + 1 < this.buf.length && this.buf[i + 1] === \"_\") {\n i += 2;\n continue;\n }\n if (i + 1 < this.buf.length && this.buf[i + 1] !== \" \" && this.buf[i + 1] !== \"\\n\") {\n out += this.buf.slice(0, i);\n this.buf = this.buf.slice(i + 1);\n this.inl = { type: \"uitalic\", acc: \"\" };\n return out;\n }\n i++;\n continue;\n }\n i++;\n }\n\n let hold = 0;\n if (!eof) {\n if (this.buf.endsWith(\"**\")) hold = 2;\n else if (this.buf.endsWith(\"__\")) hold = 2;\n else if (this.buf.endsWith(\"*\")) hold = 1;\n else if (this.buf.endsWith(\"_\")) hold = 1;\n else if (this.buf.endsWith(\"!\")) hold = 1;\n }\n out += this.buf.slice(0, this.buf.length - hold);\n this.buf = hold > 0 ? this.buf.slice(-hold) : \"\";\n return out;\n }\n\n private pumpInline(_eof: boolean): string {\n if (!this.inl) return \"\";\n this.inl.acc += this.buf;\n this.buf = \"\";\n\n switch (this.inl.type) {\n case \"bold3\": {\n const idx = this.inl.acc.indexOf(\"***\");\n if (idx !== -1) {\n const content = this.inl.acc.slice(0, idx);\n this.buf = this.inl.acc.slice(idx + 3);\n this.inl = null;\n if (StreamingMarkdownFilter.containsCJK(content)) return content;\n return `***${content}***`;\n }\n return \"\";\n }\n case \"ubold3\": {\n const idx = this.inl.acc.indexOf(\"___\");\n if (idx !== -1) {\n const content = this.inl.acc.slice(0, idx);\n this.buf = this.inl.acc.slice(idx + 3);\n this.inl = null;\n if (StreamingMarkdownFilter.containsCJK(content)) return content;\n return `___${content}___`;\n }\n return \"\";\n }\n case \"italic\": {\n for (let j = 0; j < this.inl.acc.length; j++) {\n if (this.inl.acc[j] === \"\\n\") {\n const r = \"*\" + this.inl.acc.slice(0, j + 1);\n this.buf = this.inl.acc.slice(j + 1);\n this.inl = null;\n this.sol = true;\n return r;\n }\n if (this.inl.acc[j] === \"*\") {\n if (j + 1 < this.inl.acc.length && this.inl.acc[j + 1] === \"*\") {\n j++;\n continue;\n }\n const content = this.inl.acc.slice(0, j);\n this.buf = this.inl.acc.slice(j + 1);\n this.inl = null;\n if (StreamingMarkdownFilter.containsCJK(content)) return content;\n return `*${content}*`;\n }\n }\n return \"\";\n }\n case \"uitalic\": {\n for (let j = 0; j < this.inl.acc.length; j++) {\n if (this.inl.acc[j] === \"\\n\") {\n const r = \"_\" + this.inl.acc.slice(0, j + 1);\n this.buf = this.inl.acc.slice(j + 1);\n this.inl = null;\n this.sol = true;\n return r;\n }\n if (this.inl.acc[j] === \"_\") {\n if (j + 1 < this.inl.acc.length && this.inl.acc[j + 1] === \"_\") {\n j++;\n continue;\n }\n const content = this.inl.acc.slice(0, j);\n this.buf = this.inl.acc.slice(j + 1);\n this.inl = null;\n if (StreamingMarkdownFilter.containsCJK(content)) return content;\n return `_${content}_`;\n }\n }\n return \"\";\n }\n case \"image\": {\n const cb = this.inl.acc.indexOf(\"]\");\n if (cb === -1) return \"\";\n if (cb + 1 >= this.inl.acc.length) return \"\";\n if (this.inl.acc[cb + 1] !== \"(\") {\n const r = \"![\" + this.inl.acc.slice(0, cb + 1);\n this.buf = this.inl.acc.slice(cb + 1);\n this.inl = null;\n return r;\n }\n const cp = this.inl.acc.indexOf(\")\", cb + 2);\n if (cp !== -1) {\n this.buf = this.inl.acc.slice(cp + 1);\n this.inl = null;\n return \"\";\n }\n return \"\";\n }\n }\n return \"\";\n }\n\n private static containsCJK(text: string): boolean {\n return /[\\u2E80-\\u9FFF\\uAC00-\\uD7AF\\uF900-\\uFAFF]/.test(text);\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"process-message.js","names":[],"sources":["../../../../../extensions/weixin/src/messaging/process-message.ts"],"sourcesContent":["import { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { randomBytes } from 'node:crypto';\n\nimport type { Config } from '@xopcai/xopc/config/schema.js';\nimport type { MessageBus } from '@xopcai/xopc/infra/bus/index.js';\nimport { issuePairingChallenge, resolveWeixinPairingPath } from '@xopcai/xopc/channels/pairing/index.js';\nimport { evaluateAccess } from '@xopcai/xopc/channels/security.js';\nimport type { WeixinMessage } from '../api/types.js';\nimport { MessageItemType } from '../api/types.js';\nimport type { ResolvedWeixinAccount } from '../auth/accounts.js';\nimport { readFrameworkAllowFromList } from '../auth/pairing.js';\nimport { downloadMediaFromItem } from '../media/media-download.js';\nimport { logger } from '../util/logger.js';\nimport { resolveWeixinRootDir } from '../storage/state-dir.js';\nimport { handleSlashCommand } from './slash-commands.js';\nimport { sendMessageWeixin } from './send.js';\nimport {\n setContextToken,\n weixinMessageToMsgContext,\n isMediaItem,\n type WeixinInboundMediaOpts,\n} from './inbound.js';\nimport { isDebugMode } from './debug-mode.js';\nimport { generateWeixinSessionKeyWithRouting } from '../routing-integration.js';\n\nfunction extractTextBody(itemList?: import('../api/types.js').MessageItem[]): string {\n if (!itemList?.length) return '';\n for (const item of itemList) {\n if (item.type === MessageItemType.TEXT && item.text_item?.text != null) {\n return String(item.text_item.text);\n }\n }\n return '';\n}\n\nfunction mergeAllowFrom(account: ResolvedWeixinAccount, accountId: string): string[] {\n const store = readFrameworkAllowFromList(accountId);\n return [...new Set([...(account.allowFrom ?? []).map(String), ...store])];\n}\n\nasync function saveMediaBuffer(\n buffer: Buffer,\n contentType?: string,\n _subdir?: string,\n maxBytes?: number,\n originalFilename?: string,\n): Promise<{ path: string }> {\n const cap = maxBytes ?? 100 * 1024 * 1024;\n if (buffer.length > cap) {\n throw new Error(`weixin media exceeds max bytes (${cap})`);\n }\n const dir = path.join(resolveWeixinRootDir(), 'media', 'inbound-temp');\n await mkdir(dir, { recursive: true });\n const ext = originalFilename ? path.extname(originalFilename) : contentType?.includes('wav') ? '.wav' : '.bin';\n const fname = `${Date.now()}-${randomBytes(6).toString('hex')}${ext || '.bin'}`;\n const filePath = path.join(dir, fname);\n await writeFile(filePath, buffer);\n return { path: filePath };\n}\n\nexport type ProcessWeixinMessageDeps = {\n accountId: string;\n account: ResolvedWeixinAccount;\n config: Config;\n bus: MessageBus;\n baseUrl: string;\n cdnBaseUrl: string;\n token?: string;\n routeTag?: string;\n};\n\nexport async function processWeixinInboundMessage(\n full: WeixinMessage,\n deps: ProcessWeixinMessageDeps,\n): Promise<void> {\n const receivedAt = Date.now();\n const senderId = full.from_user_id ?? '';\n // Persist ilink context_token before slash handling and DM policy. Pairing only gates the agent\n // pipeline; cron/tools still need a cached token to call sendmessage.\n if (full.context_token?.trim() && senderId) {\n setContextToken(deps.accountId, senderId, full.context_token, { sendToUserId: senderId });\n }\n\n const textBody = extractTextBody(full.item_list);\n\n if (textBody.startsWith('/')) {\n const slashResult = await handleSlashCommand(\n textBody,\n {\n to: full.from_user_id ?? '',\n contextToken: full.context_token,\n baseUrl: deps.baseUrl,\n token: deps.token,\n accountId: deps.accountId,\n log: () => {},\n errLog: () => {},\n },\n receivedAt,\n full.create_time_ms,\n );\n if (slashResult.handled) {\n return;\n }\n }\n\n const mergedAllow = mergeAllowFrom(deps.account, deps.accountId);\n const access = evaluateAccess({\n context: {\n channel: 'weixin',\n accountId: deps.accountId,\n chatId: senderId,\n senderId,\n isGroup: false,\n isDm: true,\n },\n dmPolicy: deps.account.dmPolicy ?? 'open',\n allowFrom: mergedAllow,\n });\n if (!access.allowed) {\n if (access.reason === 'pairing-required' && deps.token) {\n try {\n await issuePairingChallenge({\n channel: 'weixin',\n pairingFilePath: resolveWeixinPairingPath(deps.accountId),\n accountId: deps.accountId,\n senderId,\n senderIdLine: `Your Weixin user id: ${senderId}`,\n sendPairingReply: async (text) => {\n await sendMessageWeixin({\n to: senderId,\n text,\n opts: {\n baseUrl: deps.baseUrl,\n token: deps.token,\n contextToken: full.context_token,\n routeTag: deps.routeTag,\n },\n });\n },\n onReplyError: (err) => {\n logger.warn(`weixin pairing reply failed from=${senderId} err=${String(err)}`);\n },\n });\n } catch (err) {\n logger.warn(`weixin pairing prompt failed from=${senderId} err=${String(err)}`);\n }\n } else {\n logger.info(\n `weixin: dropped message from=${senderId} dmPolicy=${deps.account.dmPolicy ?? 'open'} reason=${access.reason ?? 'not allowed'}`,\n );\n }\n return;\n }\n\n const mediaOpts: WeixinInboundMediaOpts = {};\n\n const hasDownloadableMedia = (m?: { encrypt_query_param?: string; full_url?: string }) =>\n Boolean(m?.encrypt_query_param || m?.full_url);\n\n const mainMediaItem =\n full.item_list?.find(\n (i) => i.type === MessageItemType.IMAGE && hasDownloadableMedia(i.image_item?.media),\n ) ??\n full.item_list?.find(\n (i) => i.type === MessageItemType.VIDEO && hasDownloadableMedia(i.video_item?.media),\n ) ??\n full.item_list?.find(\n (i) => i.type === MessageItemType.FILE && hasDownloadableMedia(i.file_item?.media),\n ) ??\n full.item_list?.find(\n (i) =>\n i.type === MessageItemType.VOICE &&\n hasDownloadableMedia(i.voice_item?.media) &&\n !i.voice_item?.text,\n );\n const refMediaItem = !mainMediaItem\n ? full.item_list?.find(\n (i) =>\n i.type === MessageItemType.TEXT &&\n i.ref_msg?.message_item &&\n isMediaItem(i.ref_msg.message_item!),\n )?.ref_msg?.message_item\n : undefined;\n\n const mediaItem = mainMediaItem ?? refMediaItem;\n if (mediaItem) {\n const label = refMediaItem ? 'ref' : 'inbound';\n const downloaded = await downloadMediaFromItem(mediaItem, {\n cdnBaseUrl: deps.cdnBaseUrl,\n saveMedia: saveMediaBuffer,\n log: (m) => logger.debug(m),\n errLog: (m) => logger.warn(m),\n label,\n });\n Object.assign(mediaOpts, downloaded);\n }\n\n const ctx = weixinMessageToMsgContext(full, deps.accountId, mediaOpts);\n const body = ctx.Body?.trim() ?? '';\n\n const sessionKey = generateWeixinSessionKeyWithRouting(\n { accountId: deps.accountId, senderId },\n deps.config,\n );\n\n const attachments: Array<{ type: string; mimeType?: string; data?: string; name?: string }> = [];\n\n if (mediaOpts.decryptedPicPath) {\n const buf = await readFile(mediaOpts.decryptedPicPath);\n attachments.push({\n type: 'image',\n mimeType: 'image/jpeg',\n data: buf.toString('base64'),\n name: path.basename(mediaOpts.decryptedPicPath),\n });\n } else if (mediaOpts.decryptedVoicePath) {\n const buf = await readFile(mediaOpts.decryptedVoicePath);\n attachments.push({\n type: 'audio',\n mimeType: mediaOpts.voiceMediaType ?? 'audio/wav',\n data: buf.toString('base64'),\n name: path.basename(mediaOpts.decryptedVoicePath),\n });\n } else if (mediaOpts.decryptedFilePath) {\n const buf = await readFile(mediaOpts.decryptedFilePath);\n attachments.push({\n type: 'file',\n mimeType: mediaOpts.fileMediaType ?? 'application/octet-stream',\n data: buf.toString('base64'),\n name: path.basename(mediaOpts.decryptedFilePath),\n });\n } else if (mediaOpts.decryptedVideoPath) {\n const buf = await readFile(mediaOpts.decryptedVideoPath);\n attachments.push({\n type: 'file',\n mimeType: 'video/mp4',\n data: buf.toString('base64'),\n name: path.basename(mediaOpts.decryptedVideoPath),\n });\n }\n\n const debug = isDebugMode(deps.accountId);\n if (debug) {\n logger.debug(\n `weixin debug inbound from=${senderId} bodyLen=${body.length} attachments=${attachments.length}`,\n );\n }\n\n await deps.bus.publishInbound({\n channel: 'weixin',\n sender_id: senderId,\n chat_id: senderId,\n content: body,\n metadata: {\n accountId: deps.accountId,\n sessionKey,\n messageId: full.message_id != null ? String(full.message_id) : undefined,\n isGroup: false,\n isCommand: body.trim().startsWith('/'),\n contextToken: ctx.context_token,\n },\n attachments: attachments.length ? attachments : undefined,\n });\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"send-media.js","names":[],"sources":["../../../../../extensions/weixin/src/messaging/send-media.ts"],"sourcesContent":["import path from \"node:path\";\nimport type { WeixinApiOptions } from \"../api/api.js\";\nimport { toRawIlinkUserIdForApi } from \"../auth/weixin-account-id.js\";\nimport { logger } from \"../util/logger.js\";\nimport { getMimeFromFilename } from \"../media/mime.js\";\nimport { sendFileMessageWeixin, sendImageMessageWeixin, sendVideoMessageWeixin } from \"./send.js\";\nimport { uploadFileAttachmentToWeixin, uploadFileToWeixin, uploadVideoToWeixin } from \"../cdn/upload.js\";\n\n/**\n * Upload a local file and send it as a weixin message, routing by MIME type:\n * video/* → uploadVideoToWeixin + sendVideoMessageWeixin\n * image/* → uploadFileToWeixin + sendImageMessageWeixin\n * else → uploadFileAttachmentToWeixin + sendFileMessageWeixin\n *\n * Used by both the auto-reply deliver path (monitor.ts) and the outbound\n * sendMedia path (channel.ts) so they stay in sync.\n *\n * `audio/*` (e.g. TTS mp3) hits the `else` branch (file attachment, not VoiceItem).\n */\nexport async function sendWeixinMediaFile(params: {\n filePath: string;\n to: string;\n toUserIdForApi?: string;\n text: string;\n opts: WeixinApiOptions & { contextToken?: string };\n cdnBaseUrl: string;\n}): Promise<{ messageId: string }> {\n const { filePath, to, text, opts, cdnBaseUrl } = params;\n const apiTo = params.toUserIdForApi?.trim() || toRawIlinkUserIdForApi(to);\n const mime = getMimeFromFilename(filePath);\n /** `{ baseUrl, token }` only; xopc adds `routeTag` for `SKRouteTag` on getUploadUrl. */\n const uploadOpts: WeixinApiOptions = { baseUrl: opts.baseUrl, token: opts.token };\n if (opts.routeTag?.trim()) {\n uploadOpts.routeTag = opts.routeTag;\n }\n\n if (mime.startsWith(\"video/\")) {\n logger.info(`[weixin] sendWeixinMediaFile: uploading video filePath=${filePath} to=${to}`);\n const uploaded = await uploadVideoToWeixin({\n filePath,\n toUserId: apiTo,\n opts: uploadOpts,\n cdnBaseUrl,\n });\n logger.info(\n `[weixin] sendWeixinMediaFile: video upload done filekey=${uploaded.filekey} size=${uploaded.fileSize}`,\n );\n return sendVideoMessageWeixin({ to, toUserIdForApi: apiTo, text, uploaded, opts });\n }\n\n if (mime.startsWith(\"image/\")) {\n logger.info(`[weixin] sendWeixinMediaFile: uploading image filePath=${filePath} to=${to}`);\n const uploaded = await uploadFileToWeixin({\n filePath,\n toUserId: apiTo,\n opts: uploadOpts,\n cdnBaseUrl,\n });\n logger.info(\n `[weixin] sendWeixinMediaFile: image upload done filekey=${uploaded.filekey} size=${uploaded.fileSize}`,\n );\n return sendImageMessageWeixin({ to, toUserIdForApi: apiTo, text, uploaded, opts });\n }\n\n // File attachment: pdf, doc, zip, etc.\n const fileName = path.basename(filePath);\n logger.info(\n `[weixin] sendWeixinMediaFile: uploading file attachment filePath=${filePath} name=${fileName} to=${to}`,\n );\n const uploaded = await uploadFileAttachmentToWeixin({\n filePath,\n fileName,\n toUserId: apiTo,\n opts: uploadOpts,\n cdnBaseUrl,\n });\n logger.info(\n `[weixin] sendWeixinMediaFile: file upload done filekey=${uploaded.filekey} size=${uploaded.fileSize}`,\n );\n return sendFileMessageWeixin({ to, toUserIdForApi: apiTo, text, fileName, uploaded, opts });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAmBA,eAAsB,oBAAoB,QAOP;CACjC,MAAM,EAAE,UAAU,IAAI,MAAM,MAAM,eAAe;CACjD,MAAM,QAAQ,OAAO,gBAAgB,MAAM,IAAI,uBAAuB,GAAG;CACzE,MAAM,OAAO,oBAAoB,SAAS;;CAE1C,MAAM,aAA+B;EAAE,SAAS,KAAK;EAAS,OAAO,KAAK;EAAO;AACjF,KAAI,KAAK,UAAU,MAAM,CACvB,YAAW,WAAW,KAAK;AAG7B,KAAI,KAAK,WAAW,SAAS,EAAE;AAC7B,SAAO,KAAK,0DAA0D,SAAS,MAAM,KAAK;EAC1F,MAAM,WAAW,MAAM,oBAAoB;GACzC;GACA,UAAU;GACV,MAAM;GACN;GACD,CAAC;AACF,SAAO,KACL,2DAA2D,SAAS,QAAQ,QAAQ,SAAS,WAC9F;AACD,SAAO,uBAAuB;GAAE;GAAI,gBAAgB;GAAO;GAAM;GAAU;GAAM,CAAC;;AAGpF,KAAI,KAAK,WAAW,SAAS,EAAE;AAC7B,SAAO,KAAK,0DAA0D,SAAS,MAAM,KAAK;EAC1F,MAAM,WAAW,MAAM,mBAAmB;GACxC;GACA,UAAU;GACV,MAAM;GACN;GACD,CAAC;AACF,SAAO,KACL,2DAA2D,SAAS,QAAQ,QAAQ,SAAS,WAC9F;AACD,SAAO,uBAAuB;GAAE;GAAI,gBAAgB;GAAO;GAAM;GAAU;GAAM,CAAC;;CAIpF,MAAM,WAAW,KAAK,SAAS,SAAS;AACxC,QAAO,KACL,oEAAoE,SAAS,QAAQ,SAAS,MAAM,KACrG;CACD,MAAM,WAAW,MAAM,6BAA6B;EAClD;EACA;EACA,UAAU;EACV,MAAM;EACN;EACD,CAAC;AACF,QAAO,KACL,0DAA0D,SAAS,QAAQ,QAAQ,SAAS,WAC7F;AACD,QAAO,sBAAsB;EAAE;EAAI,gBAAgB;EAAO;EAAM;EAAU;EAAU;EAAM,CAAC"}