@xopcai/xopc 0.0.149 → 0.0.151

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 (2914) 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-uu1xu9Pl.js} +1 -1
  158. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BSccACje.js → agent-avatar-dicebear-BuO-OVfD.js} +1 -1
  159. package/dist/gateway/static/root/assets/agents-Bpv3h31T.js +2 -0
  160. package/dist/gateway/static/root/assets/{api-BMdUsNCV.js → api-CwL38LEV.js} +1 -1
  161. package/dist/gateway/static/root/assets/{app-management-settings-panel-DrLGhYkI.js → app-management-settings-panel-B6OU3Eol.js} +1 -1
  162. package/dist/gateway/static/root/assets/appearance-settings-BaP4GFvN.js +1 -0
  163. package/dist/gateway/static/root/assets/apps-page-DZKNIMRg.js +1 -0
  164. package/dist/gateway/static/root/assets/{archive-plugin-BQ17IK9x.js → archive-plugin-CJX3zIh_.js} +1 -1
  165. package/dist/gateway/static/root/assets/{attachment-load-HXvgWHXu.js → attachment-load-CI1ejk_l.js} +1 -1
  166. package/dist/gateway/static/root/assets/{automation-suggestion-card-CjIWpsch.js → automation-suggestion-card-CjmhICbv.js} +1 -1
  167. package/dist/gateway/static/root/assets/automations-page-BtZl3B8m.js +6 -0
  168. package/dist/gateway/static/root/assets/{binary-plugins-DifWJzNZ.js → binary-plugins-CZ8nOXqK.js} +1 -1
  169. package/dist/gateway/static/root/assets/{block-editor-DtRzIkPU.js → block-editor-BoSfyS_j.js} +46 -46
  170. package/dist/gateway/static/root/assets/browser-settings-page-CL1UiPcb.js +8 -0
  171. package/dist/gateway/static/root/assets/{capability-presets-api-DazKjWW1.js → capability-presets-api-XzDKxPZ8.js} +1 -1
  172. package/dist/gateway/static/root/assets/{capability-presets-settings-panel-Cvrw4fD1.js → capability-presets-settings-panel-Dc_uHYgl.js} +2 -2
  173. package/dist/gateway/static/root/assets/{channel-recipient-api-Bea6if_6.js → channel-recipient-api-DYLBAhFF.js} +1 -1
  174. package/dist/gateway/static/root/assets/channels-settings-mALvXpJj.js +1 -0
  175. package/dist/gateway/static/root/assets/channels-status-swr-CZuEsO5b.js +1 -0
  176. package/dist/gateway/static/root/assets/{connector-logo-BjbYbJjQ.js → connector-logo-BSjlInHT.js} +1 -1
  177. package/dist/gateway/static/root/assets/connectors-page-Cm_E3mmI.js +2 -0
  178. package/dist/gateway/static/root/assets/desktop-pet-DcJc91-C.js +1 -0
  179. package/dist/gateway/static/root/assets/desktop-pet-settings-CdeqTa3Q.js +1 -0
  180. package/dist/gateway/static/root/assets/{directory-picker-path-field-C8zZNUzC.js → directory-picker-path-field-Cp3fpm0k.js} +1 -1
  181. package/dist/gateway/static/root/assets/{dreaming-settings-gJSw7Adk.js → dreaming-settings-Bwj1O3zr.js} +3 -3
  182. package/dist/gateway/static/root/assets/{extension-debug-page-DFE5ADJ0.js → extension-debug-page-D_1xpKbZ.js} +1 -1
  183. package/dist/gateway/static/root/assets/{extension-page-CfR-aW8G.js → extension-page-CqZNCj96.js} +1 -1
  184. package/dist/gateway/static/root/assets/{extension-settings-page-CFIEbs2L.js → extension-settings-page-5MWbtQaQ.js} +1 -1
  185. package/dist/gateway/static/root/assets/{gateway-config-api-B6M_ra8U.js → gateway-config-api-Co_IaS34.js} +1 -1
  186. package/dist/gateway/static/root/assets/gateway-settings-kmeWm2Pt.js +1 -0
  187. package/dist/gateway/static/root/assets/{gateway-startup-retry-DNA3OOzV.js → gateway-startup-retry-BM_xvzl0.js} +1 -1
  188. package/dist/gateway/static/root/assets/goal-create-dialog-FoO-R4_U.js +1 -0
  189. package/dist/gateway/static/root/assets/goal-detail-page-CkJq7N5g.js +4 -0
  190. package/dist/gateway/static/root/assets/{goals-config-api-D88opgcs.js → goals-config-api-DrtsYjXz.js} +1 -1
  191. package/dist/gateway/static/root/assets/goals-page-DRAN-R64.js +2 -0
  192. package/dist/gateway/static/root/assets/{goals-settings-D07UL8Jo.js → goals-settings-wq9TKhIZ.js} +1 -1
  193. package/dist/gateway/static/root/assets/{heartbeat-settings-YCSNOcXC.js → heartbeat-settings-B5zDoHbo.js} +1 -1
  194. package/dist/gateway/static/root/assets/index-DIlxvrlG.css +1 -0
  195. package/dist/gateway/static/root/assets/index-apLU0Hun.js +196 -0
  196. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-3tC9iD21.js +1 -0
  197. package/dist/gateway/static/root/assets/local-app-workbench-page-CT-vDTLK.js +2 -0
  198. package/dist/gateway/static/root/assets/{local-apps-page-CKvtLzsF.js → local-apps-page-B9ruF9GV.js} +1 -1
  199. package/dist/gateway/static/root/assets/locale-store-GfSwnwIZ.js +1 -0
  200. package/dist/gateway/static/root/assets/logs-page-Ca1X8X2P.js +7 -0
  201. package/dist/gateway/static/root/assets/{markdown-split-BVSFG99p.js → markdown-split-CzuhSQAB.js} +1 -1
  202. package/dist/gateway/static/root/assets/{media-plugins-DdOjIVk3.js → media-plugins-a3R4y-EL.js} +1 -1
  203. package/dist/gateway/static/root/assets/messages-B0B40tpO.js +5 -0
  204. package/dist/gateway/static/root/assets/models-hub-panel-CbTlz9Of.js +2 -0
  205. package/dist/gateway/static/root/assets/{notes-page-ZbLR3awn.js → notes-page-BCxDy2dV.js} +1 -1
  206. package/dist/gateway/static/root/assets/notes-workbench-z6sBX9B2.js +4 -0
  207. package/dist/gateway/static/root/assets/{page-tabs-DMlQERNg.js → page-tabs-CJfk6M78.js} +1 -1
  208. package/dist/gateway/static/root/assets/{preview-open-alternatives-CbiJRPxK.js → preview-open-alternatives-MFopTSgF.js} +1 -1
  209. package/dist/gateway/static/root/assets/project-detail-page-DU29deIr.js +1 -0
  210. package/dist/gateway/static/root/assets/projects-page-Ck3DLTlZ.js +1 -0
  211. package/dist/gateway/static/root/assets/remote-access-hub-gLsLyAyi.js +1 -0
  212. package/dist/gateway/static/root/assets/{save-bar-controls-BZTj3hxl.js → save-bar-controls-D0uhU3Z8.js} +1 -1
  213. package/dist/gateway/static/root/assets/{schedule-field-CxYDObjT.js → schedule-field-NGOH-7wV.js} +1 -1
  214. package/dist/gateway/static/root/assets/{schema-form-CBbXgpKQ.js → schema-form-BJz5LoqG.js} +1 -1
  215. package/dist/gateway/static/root/assets/schemas-DgQq6Z5S.js +64 -0
  216. package/dist/gateway/static/root/assets/sessions-page-TmNoWpa_.js +1 -0
  217. package/dist/gateway/static/root/assets/settings-advanced-gate-CtPhh2m9.js +1 -0
  218. package/dist/gateway/static/root/assets/{settings-collapsible-section-BySKZ8rp.js → settings-collapsible-section-oDnUHnX_.js} +1 -1
  219. package/dist/gateway/static/root/assets/{settings-form-section-CjINay6t.js → settings-form-section-DND90dDt.js} +1 -1
  220. package/dist/gateway/static/root/assets/settings-loading-skeleton-CEJtaoQp.js +1 -0
  221. package/dist/gateway/static/root/assets/{settings-page-BNrVwuL7.js → settings-page-B1LJlRi9.js} +1 -1
  222. package/dist/gateway/static/root/assets/{settings-page-layout-HdlQOOqp.js → settings-page-layout-CsrLuDsW.js} +1 -1
  223. package/dist/gateway/static/root/assets/setup-status-panel-BPCJPHHY.js +1 -0
  224. package/dist/gateway/static/root/assets/{share-preview-page-DC-eQONB.js → share-preview-page-C1PwLh-p.js} +1 -1
  225. package/dist/gateway/static/root/assets/shares-settings-DCuqr7js.js +1 -0
  226. package/dist/gateway/static/root/assets/skill-reload-api-kn1Vypcy.js +1 -0
  227. package/dist/gateway/static/root/assets/skills-page-k6VIqTkK.js +2 -0
  228. package/dist/gateway/static/root/assets/{system-settings-panel-CVa90q2f.js → system-settings-panel-BEsrEkSx.js} +1 -1
  229. package/dist/gateway/static/root/assets/{theme-store-D1cOpgsy.js → theme-store-Bi6hMBDb.js} +1 -1
  230. package/dist/gateway/static/root/assets/{typed-models-lib-DIKF9vpz.js → typed-models-lib-dOypdlMf.js} +1 -1
  231. package/dist/gateway/static/root/assets/{use-channel-catalog-DnvpI0Ys.js → use-channel-catalog-f8A-PVuq.js} +1 -1
  232. package/dist/gateway/static/root/assets/user-context-page-B9Y_Ciav.js +1 -0
  233. package/dist/gateway/static/root/assets/{user-profile-fields-editor-y8gTmkPX.js → user-profile-fields-editor-DGC38Lx7.js} +1 -1
  234. package/dist/gateway/static/root/assets/{user-profile-settings-panel-C3pvqe28.js → user-profile-settings-panel-DFkZ-tan.js} +1 -1
  235. package/dist/gateway/static/root/assets/{utils-BK2vwu_3.js → utils-CEIYZihF.js} +1 -1
  236. package/dist/gateway/static/root/assets/voice-api-key-field-DK6gaQsA.js +1 -0
  237. package/dist/gateway/static/root/assets/work-discovery-page-DSJb9Kq7.js +1 -0
  238. package/dist/gateway/static/root/assets/work-item-detail-page-DVavwV3D.js +1 -0
  239. package/dist/gateway/static/root/assets/work-page-foJDp0nz.js +1 -0
  240. package/dist/gateway/static/root/assets/workflow-run-setup-panel-BYqZpFCC.js +3 -0
  241. package/dist/gateway/static/root/assets/workflows-page-DgO0WAzs.js +11 -0
  242. package/dist/gateway/static/root/favicon.svg +1 -187
  243. package/dist/gateway/static/root/index.html +8 -7
  244. package/dist/gateway/static/root/logo-dark.svg +1 -185
  245. package/dist/gateway/static/root/logo.svg +1 -185
  246. package/dist/package.js +1 -3
  247. package/dist/src/activity/context.js +0 -2
  248. package/dist/src/activity/emitter.js +0 -2
  249. package/dist/src/activity/service.js +0 -2
  250. package/dist/src/agent/agent-manager.d.ts +1 -0
  251. package/dist/src/agent/agent-manager.js +1 -2
  252. package/dist/src/agent/agent-scope.js +0 -2
  253. package/dist/src/agent/background-review/coordinator.js +0 -2
  254. package/dist/src/agent/background-review/prompts.js +0 -2
  255. package/dist/src/agent/background-review/run-background-review.js +0 -2
  256. package/dist/src/agent/background-review/settings.js +0 -2
  257. package/dist/src/agent/bootstrap/bootstrap-cache.js +0 -2
  258. package/dist/src/agent/bootstrap/bootstrap-context.js +0 -2
  259. package/dist/src/agent/bootstrap/bootstrap-files.js +0 -2
  260. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +0 -2
  261. package/dist/src/agent/bootstrap/load-bootstrap-files.js +0 -2
  262. package/dist/src/agent/bootstrap/project-agents-context.js +0 -2
  263. package/dist/src/agent/capabilities/definitions.js +0 -2
  264. package/dist/src/agent/capabilities/registry.js +0 -2
  265. package/dist/src/agent/child-agent-factory.js +0 -2
  266. package/dist/src/agent/client-error-format.js +0 -2
  267. package/dist/src/agent/code-intelligence/binary.js +0 -2
  268. package/dist/src/agent/code-intelligence/runtime.js +0 -2
  269. package/dist/src/agent/code-intelligence/tools.js +0 -2
  270. package/dist/src/agent/coding/turn-diff-tracker.js +0 -2
  271. package/dist/src/agent/context/expand-at-file-mentions.js +0 -2
  272. package/dist/src/agent/context/project-context.js +0 -2
  273. package/dist/src/agent/context/workspace-seed.js +0 -2
  274. package/dist/src/agent/context/workspace-state.js +0 -2
  275. package/dist/src/agent/context/workspace.js +0 -2
  276. package/dist/src/agent/embedded/run-for-session.js +0 -2
  277. package/dist/src/agent/embedded/run-turn.js +0 -2
  278. package/dist/src/agent/embedded/runs.js +0 -2
  279. package/dist/src/agent/embedded/session-manager-init.js +0 -2
  280. package/dist/src/agent/embedded/session-runner.js +0 -2
  281. package/dist/src/agent/embedded/session-tool-result-guard.js +0 -2
  282. package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js +0 -2
  283. package/dist/src/agent/embedded/subscribe-session.js +0 -2
  284. package/dist/src/agent/embedded/system-prompt-override.js +0 -2
  285. package/dist/src/agent/embedded/tool-result-context-guard.js +0 -2
  286. package/dist/src/agent/embedded/tool-result-truncation.js +0 -2
  287. package/dist/src/agent/embedded/xopc-auth-storage.js +0 -2
  288. package/dist/src/agent/embedded/xopc-stream-bridge.js +0 -2
  289. package/dist/src/agent/embedded/xopc-tools-bridge.js +0 -2
  290. package/dist/src/agent/failover-error.js +0 -2
  291. package/dist/src/agent/fallback/candidates.js +0 -2
  292. package/dist/src/agent/fallback/reason.js +0 -2
  293. package/dist/src/agent/feedback/feedback-coordinator.js +0 -2
  294. package/dist/src/agent/goals/checklist-judge.js +0 -2
  295. package/dist/src/agent/goals/checklist-types.js +0 -2
  296. package/dist/src/agent/goals/evaluate-turn.js +0 -2
  297. package/dist/src/agent/goals/goal-locale.js +0 -2
  298. package/dist/src/agent/goals/judge.js +0 -2
  299. package/dist/src/agent/goals/persistent-goal-service.js +0 -2
  300. package/dist/src/agent/goals/post-turn.js +0 -2
  301. package/dist/src/agent/goals/state.js +0 -2
  302. package/dist/src/agent/image/generation/bundled-registry.js +0 -2
  303. package/dist/src/agent/image/generation/bundled.js +0 -2
  304. package/dist/src/agent/image/generation/image-assets.js +0 -2
  305. package/dist/src/agent/image/generation/model-ref.js +0 -2
  306. package/dist/src/agent/image/generation/normalization.js +0 -2
  307. package/dist/src/agent/image/generation/openai-compatible-image-provider.js +0 -2
  308. package/dist/src/agent/image/generation/provider-registry.js +0 -2
  309. package/dist/src/agent/image/generation/runtime.js +0 -2
  310. package/dist/src/agent/image/image-helpers.js +0 -2
  311. package/dist/src/agent/image/image-model-fallback.js +0 -2
  312. package/dist/src/agent/image/inbound-image-handling.js +0 -2
  313. package/dist/src/agent/image/load-image-media.js +0 -2
  314. package/dist/src/agent/image/tool-model-config.js +0 -2
  315. package/dist/src/agent/image/understanding/pi-ai-provider.js +0 -2
  316. package/dist/src/agent/image/understanding/provider-registry.js +0 -2
  317. package/dist/src/agent/image/understanding/runtime.js +0 -2
  318. package/dist/src/agent/image/vision-detection.js +0 -2
  319. package/dist/src/agent/inbound/attachment-pipeline.js +0 -2
  320. package/dist/src/agent/inbound/inbound-loop.js +0 -2
  321. package/dist/src/agent/inbound/turn-dispatcher.js +0 -2
  322. package/dist/src/agent/ipc/bus.js +0 -2
  323. package/dist/src/agent/ipc/inbox.js +0 -2
  324. package/dist/src/agent/ipc/socket.js +0 -2
  325. package/dist/src/agent/ipc/types.js +0 -2
  326. package/dist/src/agent/lifecycle/handlers/compaction.js +0 -2
  327. package/dist/src/agent/lifecycle/hook-handler.js +0 -2
  328. package/dist/src/agent/lifecycle/manager.js +0 -2
  329. package/dist/src/agent/lifecycle/progress.js +0 -2
  330. package/dist/src/agent/lifecycle/timeout-wrapper.js +0 -2
  331. package/dist/src/agent/lifecycle/typing.js +0 -2
  332. package/dist/src/agent/mcp/bundle-mcp-config.js +0 -2
  333. package/dist/src/agent/mcp/bundle-mcp-materialize.js +0 -2
  334. package/dist/src/agent/mcp/bundle-mcp-names.js +0 -2
  335. package/dist/src/agent/mcp/bundle-mcp-policy.js +0 -2
  336. package/dist/src/agent/mcp/bundle-mcp-runtime.js +0 -2
  337. package/dist/src/agent/mcp/embedded-mcp.js +0 -2
  338. package/dist/src/agent/mcp/mcp-config-shared.js +0 -2
  339. package/dist/src/agent/mcp/mcp-http.js +0 -2
  340. package/dist/src/agent/mcp/mcp-stdio-transport.js +0 -2
  341. package/dist/src/agent/mcp/mcp-stdio.js +0 -2
  342. package/dist/src/agent/mcp/mcp-tool-meta.js +0 -2
  343. package/dist/src/agent/mcp/mcp-transport-config.js +0 -2
  344. package/dist/src/agent/mcp/mcp-transport.js +0 -2
  345. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js +0 -2
  346. package/dist/src/agent/media-generation/model-ref.js +0 -2
  347. package/dist/src/agent/media-generation/normalization.types.js +0 -2
  348. package/dist/src/agent/media-generation/runtime-shared.js +0 -2
  349. package/dist/src/agent/memory/agent-message-access.js +0 -2
  350. package/dist/src/agent/memory/builtin-memory-store.js +0 -2
  351. package/dist/src/agent/memory/builtin-provider.js +0 -2
  352. package/dist/src/agent/memory/compaction.js +0 -2
  353. package/dist/src/agent/memory/context/planner.js +0 -2
  354. package/dist/src/agent/memory/context-fence.js +0 -2
  355. package/dist/src/agent/memory/create-memory-manager.js +0 -2
  356. package/dist/src/agent/memory/dreaming/config.js +0 -2
  357. package/dist/src/agent/memory/dreaming/constants.js +0 -2
  358. package/dist/src/agent/memory/dreaming/deep-promotion.js +0 -2
  359. package/dist/src/agent/memory/dreaming/events.js +0 -2
  360. package/dist/src/agent/memory/dreaming/last-run.js +0 -2
  361. package/dist/src/agent/memory/dreaming/light-sweep.js +0 -2
  362. package/dist/src/agent/memory/dreaming/preview.js +0 -2
  363. package/dist/src/agent/memory/dreaming/promotion-lifecycle.js +0 -2
  364. package/dist/src/agent/memory/dreaming/rem-patterns.js +0 -2
  365. package/dist/src/agent/memory/dreaming/scope.js +0 -2
  366. package/dist/src/agent/memory/dreaming/short-term-store.js +0 -2
  367. package/dist/src/agent/memory/dreaming/utils.js +0 -2
  368. package/dist/src/agent/memory/lifecycle.js +0 -2
  369. package/dist/src/agent/memory/manager.js +0 -2
  370. package/dist/src/agent/memory/memory-config.js +0 -2
  371. package/dist/src/agent/memory/message-sanitizer.js +0 -2
  372. package/dist/src/agent/memory/plugin-discovery.js +0 -2
  373. package/dist/src/agent/memory/sensitivity.js +0 -2
  374. package/dist/src/agent/memory/source-origin.js +0 -2
  375. package/dist/src/agent/memory/stub-memory-provider.js +0 -2
  376. package/dist/src/agent/memory/summary-generator.js +0 -2
  377. package/dist/src/agent/memory/understanding/correction.js +0 -2
  378. package/dist/src/agent/memory/understanding/quality.js +0 -2
  379. package/dist/src/agent/memory/understanding/service.js +0 -2
  380. package/dist/src/agent/memory/user-context-coordinator.js +0 -2
  381. package/dist/src/agent/memory/user-message-text.js +0 -2
  382. package/dist/src/agent/memory/window.js +0 -2
  383. package/dist/src/agent/messaging/command-handler.js +0 -2
  384. package/dist/src/agent/messaging/message-router.js +0 -2
  385. package/dist/src/agent/messaging/outbound-coordinator.js +0 -2
  386. package/dist/src/agent/messaging/stream-manager.js +0 -2
  387. package/dist/src/agent/middleware/context.js +0 -2
  388. package/dist/src/agent/middleware/self-verify.js +0 -2
  389. package/dist/src/agent/models/manager.js +0 -2
  390. package/dist/src/agent/models/request-limiter.js +0 -2
  391. package/dist/src/agent/models/selection.js +0 -2
  392. package/dist/src/agent/orchestration/agent-event-handler.js +0 -2
  393. package/dist/src/agent/orchestration/agent-orchestrator.js +0 -2
  394. package/dist/src/agent/orchestration/llm-turn-retry.js +0 -2
  395. package/dist/src/agent/orchestration/loop-guard.js +0 -2
  396. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +0 -2
  397. package/dist/src/agent/prompt/cache-boundary.js +0 -2
  398. package/dist/src/agent/prompt/memory/index.js +0 -2
  399. package/dist/src/agent/prompt/safety.js +0 -2
  400. package/dist/src/agent/prompt/sanitize-for-prompt.js +0 -2
  401. package/dist/src/agent/prompt/sections/behavior.js +0 -2
  402. package/dist/src/agent/prompt/sections/memory-skills.js +0 -2
  403. package/dist/src/agent/prompt/sections/messaging-runtime.js +0 -2
  404. package/dist/src/agent/prompt/sections/project-context.js +0 -2
  405. package/dist/src/agent/prompt/sections/tooling.js +0 -2
  406. package/dist/src/agent/prompt/sections/workspace-runtime.js +0 -2
  407. package/dist/src/agent/prompt/service-prompt-builder.js +0 -2
  408. package/dist/src/agent/prompt/subagent-context.js +0 -2
  409. package/dist/src/agent/prompt/system-prompt-params.js +0 -2
  410. package/dist/src/agent/prompt/system-prompt.js +0 -2
  411. package/dist/src/agent/prompt/system-reminder.js +0 -2
  412. package/dist/src/agent/reply/apply-turn-user-enrichment.js +0 -2
  413. package/dist/src/agent/reply/post-compaction-context.js +0 -2
  414. package/dist/src/agent/reply/startup-context.js +0 -2
  415. package/dist/src/agent/reply/workspace-boundary-read.js +0 -2
  416. package/dist/src/agent/sandbox/command-validator.js +0 -2
  417. package/dist/src/agent/sandbox/exec-policy.js +0 -2
  418. package/dist/src/agent/sandbox/path-policy.js +0 -2
  419. package/dist/src/agent/sandbox/sanitize-env-vars.js +0 -2
  420. package/dist/src/agent/sandbox/types.js +0 -2
  421. package/dist/src/agent/service/async-queue.js +0 -2
  422. package/dist/src/agent/service/btw-query.js +0 -2
  423. package/dist/src/agent/service/build-direct-message-content.js +0 -2
  424. package/dist/src/agent/service/direct-turn-helpers.js +0 -2
  425. package/dist/src/agent/service/parse-outbound-session-key.js +0 -2
  426. package/dist/src/agent/service/process-direct-one-shot.js +0 -2
  427. package/dist/src/agent/service/process-direct-streaming.js +0 -2
  428. package/dist/src/agent/service/session-context-report.js +0 -2
  429. package/dist/src/agent/service/webchat-tts.js +0 -2
  430. package/dist/src/agent/service-inbound-utils.js +0 -2
  431. package/dist/src/agent/service.js +1 -2
  432. package/dist/src/agent/service.types.d.ts +2 -0
  433. package/dist/src/agent/session/session-config-service.js +0 -2
  434. package/dist/src/agent/session/session-context.js +0 -2
  435. package/dist/src/agent/session/session-hydrator.js +0 -2
  436. package/dist/src/agent/session/session-inspector.js +0 -2
  437. package/dist/src/agent/session/session-lifecycle.js +0 -2
  438. package/dist/src/agent/session/session-state-bag.js +0 -2
  439. package/dist/src/agent/session/tracker.js +0 -2
  440. package/dist/src/agent/skills/config.js +0 -2
  441. package/dist/src/agent/skills/filesystem-watcher.js +0 -2
  442. package/dist/src/agent/skills/format-skills-prompt.js +0 -2
  443. package/dist/src/agent/skills/hub-hash.js +0 -2
  444. package/dist/src/agent/skills/hub-lock.js +0 -2
  445. package/dist/src/agent/skills/hub-pull.js +0 -2
  446. package/dist/src/agent/skills/index.js +0 -2
  447. package/dist/src/agent/skills/install-target.js +0 -2
  448. package/dist/src/agent/skills/installer.js +0 -2
  449. package/dist/src/agent/skills/managed-store.js +0 -2
  450. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +0 -2
  451. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +0 -2
  452. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +0 -2
  453. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +0 -2
  454. package/dist/src/agent/skills/marketplace/marketplace-category-order.js +0 -2
  455. package/dist/src/agent/skills/marketplace/registry.js +0 -2
  456. package/dist/src/agent/skills/marketplace/resolve-adapter.js +0 -2
  457. package/dist/src/agent/skills/parse-skill-metadata.js +0 -2
  458. package/dist/src/agent/skills/required-env-vars.js +0 -2
  459. package/dist/src/agent/skills/scanner.js +0 -2
  460. package/dist/src/agent/skills/skill-manage-ops.js +0 -2
  461. package/dist/src/agent/skills/skill-manager.js +0 -2
  462. package/dist/src/agent/skills/skill-markdown-preview-from-raw.js +0 -2
  463. package/dist/src/agent/skills/skill-tool-gating.js +0 -2
  464. package/dist/src/agent/skills/skill-view-path.js +0 -2
  465. package/dist/src/agent/skills/skills-marketplace.js +0 -2
  466. package/dist/src/agent/skills/test-framework.js +0 -2
  467. package/dist/src/agent/skills/watcher.js +0 -2
  468. package/dist/src/agent/skills/workspace-skills-dir.js +0 -2
  469. package/dist/src/agent/source-context/injector.js +0 -2
  470. package/dist/src/agent/source-context/types.js +0 -2
  471. package/dist/src/agent/starter-agents.js +0 -2
  472. package/dist/src/agent/streaming/reasoning-visibility-sse.js +0 -2
  473. package/dist/src/agent/tool-manuals/browser.js +0 -2
  474. package/dist/src/agent/tool-manuals/index.js +0 -2
  475. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
  476. package/dist/src/agent/tool-manuals/xopc-use.js +41 -4
  477. package/dist/src/agent/tools/apply-patch.js +0 -2
  478. package/dist/src/agent/tools/automation-tool.js +45 -8
  479. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +0 -2
  480. package/dist/src/agent/tools/browser/tool/schemas.js +0 -2
  481. package/dist/src/agent/tools/chain-tracker.js +0 -2
  482. package/dist/src/agent/tools/clarify-tool.js +0 -2
  483. package/dist/src/agent/tools/cli-clarify.js +0 -2
  484. package/dist/src/agent/tools/communication.js +0 -2
  485. package/dist/src/agent/tools/composio-tool.js +0 -2
  486. package/dist/src/agent/tools/concurrency.js +0 -2
  487. package/dist/src/agent/tools/create-share-tool.js +0 -2
  488. package/dist/src/agent/tools/curated-memory-tool.js +0 -2
  489. package/dist/src/agent/tools/delegate-tool.js +0 -2
  490. package/dist/src/agent/tools/desktop-pet-tool.d.ts +12 -0
  491. package/dist/src/agent/tools/desktop-pet-tool.js +28 -2
  492. package/dist/src/agent/tools/dreaming-tool.js +0 -2
  493. package/dist/src/agent/tools/edit-diff.js +0 -2
  494. package/dist/src/agent/tools/error-pattern-matcher.js +0 -2
  495. package/dist/src/agent/tools/error-tracker.js +0 -2
  496. package/dist/src/agent/tools/exec-command.js +0 -2
  497. package/dist/src/agent/tools/execute-code-tool.js +0 -2
  498. package/dist/src/agent/tools/executor.js +0 -2
  499. package/dist/src/agent/tools/factory.d.ts +2 -0
  500. package/dist/src/agent/tools/factory.js +3 -4
  501. package/dist/src/agent/tools/find.js +0 -2
  502. package/dist/src/agent/tools/goal-evidence-recorder.js +0 -2
  503. package/dist/src/agent/tools/goal-tool.d.ts +7 -1
  504. package/dist/src/agent/tools/goal-tool.js +34 -7
  505. package/dist/src/agent/tools/grep.js +0 -2
  506. package/dist/src/agent/tools/image-generate-tool.js +0 -2
  507. package/dist/src/agent/tools/image-tool.js +0 -2
  508. package/dist/src/agent/tools/list-dir.js +0 -2
  509. package/dist/src/agent/tools/media-read-tool.js +0 -2
  510. package/dist/src/agent/tools/memory-tool.js +0 -2
  511. package/dist/src/agent/tools/metadata.js +0 -2
  512. package/dist/src/agent/tools/read.js +0 -2
  513. package/dist/src/agent/tools/search/http.js +0 -2
  514. package/dist/src/agent/tools/search/providers/bing-api.js +0 -2
  515. package/dist/src/agent/tools/search/providers/bing-html.js +0 -2
  516. package/dist/src/agent/tools/search/providers/brave.js +0 -2
  517. package/dist/src/agent/tools/search/providers/duckduckgo-html.js +0 -2
  518. package/dist/src/agent/tools/search/providers/searxng.js +0 -2
  519. package/dist/src/agent/tools/search/providers/tavily.js +0 -2
  520. package/dist/src/agent/tools/search/region.js +0 -2
  521. package/dist/src/agent/tools/search/registry.js +0 -2
  522. package/dist/src/agent/tools/search/resolve-config.js +0 -2
  523. package/dist/src/agent/tools/send-media.js +0 -2
  524. package/dist/src/agent/tools/session-search-tool.js +0 -2
  525. package/dist/src/agent/tools/session-status-tool.js +0 -2
  526. package/dist/src/agent/tools/skill-install-tool.js +0 -2
  527. package/dist/src/agent/tools/skill-manage-tool.js +0 -2
  528. package/dist/src/agent/tools/skills-tools.js +0 -2
  529. package/dist/src/agent/tools/structured-output.js +0 -2
  530. package/dist/src/agent/tools/todo-tool.js +0 -2
  531. package/dist/src/agent/tools/tool-manual-tool.js +0 -2
  532. package/dist/src/agent/tools/tool-paths.js +0 -2
  533. package/dist/src/agent/tools/truncate.js +0 -2
  534. package/dist/src/agent/tools/tts-tool.js +0 -2
  535. package/dist/src/agent/tools/update-plan-tool.js +0 -2
  536. package/dist/src/agent/tools/url-safety.js +0 -2
  537. package/dist/src/agent/tools/usage-analyzer.js +0 -2
  538. package/dist/src/agent/tools/web-extract.js +0 -2
  539. package/dist/src/agent/tools/web.js +4 -4
  540. package/dist/src/agent/tools/workflow-tool.js +32 -4
  541. package/dist/src/agent/tools/write.js +23 -5
  542. package/dist/src/agent/tools/xopc-use-tool.d.ts +6 -2
  543. package/dist/src/agent/tools/xopc-use-tool.js +216 -8
  544. package/dist/src/agent/transcript/google-api.js +0 -2
  545. package/dist/src/agent/transcript/model-selection.js +0 -2
  546. package/dist/src/agent/transcript/provider-capabilities.js +0 -2
  547. package/dist/src/agent/transcript/session-transcript-repair.js +0 -2
  548. package/dist/src/agent/transcript/strip-tool-messages.js +0 -2
  549. package/dist/src/agent/transcript/thinking-types.js +0 -2
  550. package/dist/src/agent/transcript/thinking.js +0 -2
  551. package/dist/src/agent/transcript/tool-call-id.js +0 -2
  552. package/dist/src/agent/transcript/transcript-hygiene.js +0 -2
  553. package/dist/src/agent/transcript/transcript-policy.js +0 -2
  554. package/dist/src/agent/workflow/agent-progress.js +0 -2
  555. package/dist/src/agent/workflow/builtins/index.js +0 -2
  556. package/dist/src/agent/workflow/catalog.js +0 -2
  557. package/dist/src/agent/workflow/progress-broker.js +0 -2
  558. package/dist/src/agent/workflow/snapshot-empty.js +0 -2
  559. package/dist/src/agent/workflow/snapshot.js +0 -2
  560. package/dist/src/agent/workflow/step-labels.js +0 -2
  561. package/dist/src/agent/workflow/structured-output-tool.js +0 -2
  562. package/dist/src/agent/workflow/subagent-runner.js +0 -2
  563. package/dist/src/agent/workflow/workflow-child-tools.js +0 -2
  564. package/dist/src/agent/workspace-runtime/registry.js +0 -2
  565. package/dist/src/agent-manifest/index.js +0 -2
  566. package/dist/src/agent-manifest/preset-chain.js +0 -2
  567. package/dist/src/agent-manifest/prompt.js +0 -2
  568. package/dist/src/agent-manifest/resolver.js +0 -2
  569. package/dist/src/agent-manifest/schema.js +0 -2
  570. package/dist/src/agent-manifest/validator.js +0 -2
  571. package/dist/src/agent-runtime/boundary-guard.js +0 -2
  572. package/dist/src/agent-runtime/memory-runtime.js +0 -2
  573. package/dist/src/agent-runtime/model-router.js +0 -2
  574. package/dist/src/agent-runtime/run-trace.js +0 -2
  575. package/dist/src/agent-runtime/runtime-profile.js +0 -2
  576. package/dist/src/agent-runtime/tool-registry.js +0 -2
  577. package/dist/src/agent-runtime/workflow-runtime.js +0 -2
  578. package/dist/src/ai-assist/text-assist.js +0 -2
  579. package/dist/src/auth/credentials.js +0 -2
  580. package/dist/src/auth/index.js +0 -2
  581. package/dist/src/auth/oauth/anthropic.js +0 -2
  582. package/dist/src/auth/oauth/github-copilot.js +0 -2
  583. package/dist/src/auth/oauth/google-oauth/google-antigravity.js +0 -2
  584. package/dist/src/auth/oauth/google-oauth/google-gemini-cli.js +0 -2
  585. package/dist/src/auth/oauth/google-oauth/oauth-page.js +0 -2
  586. package/dist/src/auth/oauth/google-oauth/pkce.js +0 -2
  587. package/dist/src/auth/oauth/kimi-coding.js +0 -2
  588. package/dist/src/auth/oauth/minimax-cn.js +0 -2
  589. package/dist/src/auth/oauth/minimax.js +0 -2
  590. package/dist/src/auth/oauth/openai-codex.js +0 -2
  591. package/dist/src/auth/oauth/pkce.js +0 -2
  592. package/dist/src/auth/profiles/oauth.js +0 -2
  593. package/dist/src/auth/profiles/order.js +0 -2
  594. package/dist/src/auth/profiles/profiles.js +0 -2
  595. package/dist/src/auth/profiles/store.js +0 -2
  596. package/dist/src/auth/sync-provider-auth.js +0 -2
  597. package/dist/src/automations/api/routes.js +0 -2
  598. package/dist/src/automations/domain/schedule.js +0 -2
  599. package/dist/src/automations/domain/validation.js +0 -2
  600. package/dist/src/automations/draft/automation-draft-prompt.js +0 -2
  601. package/dist/src/automations/draft/automation-draft-service.js +0 -2
  602. package/dist/src/automations/draft/automation-draft-validator.js +0 -2
  603. package/dist/src/automations/product-events.js +0 -2
  604. package/dist/src/automations/service/action-executor.js +0 -2
  605. package/dist/src/automations/service/automation-service.js +0 -2
  606. package/dist/src/automations/storage/automation-repository.js +0 -2
  607. package/dist/src/automations/storage/automation-run-repository.js +0 -2
  608. package/dist/src/browser/actions/extension-registry-bridge.js +0 -2
  609. package/dist/src/browser/actions/registry.js +0 -2
  610. package/dist/src/browser/backend-from-config.js +0 -2
  611. package/dist/src/browser/browser-command-timeout.js +0 -2
  612. package/dist/src/browser/cache-dir-policy.js +0 -2
  613. package/dist/src/browser/cdp-local-launcher.js +0 -2
  614. package/dist/src/browser/cdp-supervisor.js +0 -2
  615. package/dist/src/browser/free-port.js +0 -2
  616. package/dist/src/browser/humanize.js +0 -2
  617. package/dist/src/browser/install-lock.js +0 -2
  618. package/dist/src/browser/manager.js +0 -2
  619. package/dist/src/browser/pipeline/output.js +0 -2
  620. package/dist/src/browser/pipeline/runner.js +0 -2
  621. package/dist/src/browser/pipeline/schema.js +0 -2
  622. package/dist/src/browser/pipeline/source.js +0 -2
  623. package/dist/src/browser/pipeline/template.js +0 -2
  624. package/dist/src/browser/providers/browser-ext-install.js +0 -2
  625. package/dist/src/browser/providers/browser-use.js +0 -2
  626. package/dist/src/browser/providers/browserbase.js +0 -2
  627. package/dist/src/browser/providers/cloakbrowser.js +0 -2
  628. package/dist/src/browser/providers/extension-ws-acquire.js +0 -2
  629. package/dist/src/browser/providers/extension.js +0 -2
  630. package/dist/src/browser/providers/playwright-doctor.js +13 -4
  631. package/dist/src/browser/providers/playwright-install.js +0 -2
  632. package/dist/src/browser/readiness.js +0 -2
  633. package/dist/src/browser/schemas.js +0 -2
  634. package/dist/src/browser/session-lifecycle.js +0 -2
  635. package/dist/src/browser/snapshot-helpers.js +0 -2
  636. package/dist/src/browser/stealth.js +0 -2
  637. package/dist/src/browser/url-policy.js +0 -2
  638. package/dist/src/capabilities/store-connector.js +0 -2
  639. package/dist/src/channels/attachments/attachment-classifiers.js +0 -2
  640. package/dist/src/channels/attachments/inbound-persist.js +0 -2
  641. package/dist/src/channels/attachments/inbound-types.js +0 -2
  642. package/dist/src/channels/attachments/outbound-tts-persist.js +0 -2
  643. package/dist/src/channels/attachments/voice-stt-webchat.js +0 -2
  644. package/dist/src/channels/catalog/channel-catalog-service.js +0 -2
  645. package/dist/src/channels/config-helpers.js +0 -2
  646. package/dist/src/channels/envelope-timestamp.js +0 -2
  647. package/dist/src/channels/exec-approval-runtime.js +0 -2
  648. package/dist/src/channels/health-monitor.js +0 -2
  649. package/dist/src/channels/heartbeat-scheduler.js +0 -2
  650. package/dist/src/channels/internal-outbound.js +0 -2
  651. package/dist/src/channels/lifecycle-supervisor.js +0 -2
  652. package/dist/src/channels/manager.js +0 -2
  653. package/dist/src/channels/media.js +0 -2
  654. package/dist/src/channels/outbound/deliver.js +0 -2
  655. package/dist/src/channels/outbound/normalize.js +0 -2
  656. package/dist/src/channels/outbound/persist-store.js +0 -2
  657. package/dist/src/channels/outbound/queue.js +0 -2
  658. package/dist/src/channels/outbound-sender.js +0 -2
  659. package/dist/src/channels/pairing/allow-from-file.js +0 -2
  660. package/dist/src/channels/pairing/approve-cli.js +0 -2
  661. package/dist/src/channels/pairing/pairing-challenge.js +0 -2
  662. package/dist/src/channels/pairing/pairing-constants.js +0 -2
  663. package/dist/src/channels/pairing/pairing-events.js +0 -2
  664. package/dist/src/channels/pairing/pairing-messages.js +0 -2
  665. package/dist/src/channels/pairing/pairing-service.js +0 -2
  666. package/dist/src/channels/pairing/pairing-store-adapter.js +0 -2
  667. package/dist/src/channels/pairing/pairing-store.js +0 -2
  668. package/dist/src/channels/pairing/paths.js +0 -2
  669. package/dist/src/channels/pairing/preseed-allow-from.js +0 -2
  670. package/dist/src/channels/pipeline.js +0 -2
  671. package/dist/src/channels/plugin-registry.js +0 -2
  672. package/dist/src/channels/plugins/registry.js +0 -2
  673. package/dist/src/channels/restart-policy.js +0 -2
  674. package/dist/src/channels/security-helpers.js +0 -2
  675. package/dist/src/channels/security.js +0 -2
  676. package/dist/src/channels/setup-wizard-discovery.js +0 -2
  677. package/dist/src/chat-commands/agent-edit.js +0 -2
  678. package/dist/src/chat-commands/builtins/config.js +0 -2
  679. package/dist/src/chat-commands/builtins/context.js +0 -2
  680. package/dist/src/chat-commands/builtins/goal.js +0 -2
  681. package/dist/src/chat-commands/builtins/model.js +0 -2
  682. package/dist/src/chat-commands/builtins/review.js +0 -2
  683. package/dist/src/chat-commands/builtins/session.js +0 -2
  684. package/dist/src/chat-commands/builtins/skill.js +0 -2
  685. package/dist/src/chat-commands/builtins/subgoal.js +0 -2
  686. package/dist/src/chat-commands/builtins/system.js +0 -2
  687. package/dist/src/chat-commands/builtins/thinking.js +0 -2
  688. package/dist/src/chat-commands/builtins/tts.js +0 -2
  689. package/dist/src/chat-commands/builtins/workflow.js +0 -2
  690. package/dist/src/chat-commands/command-parse.js +0 -2
  691. package/dist/src/chat-commands/config-paths.js +0 -2
  692. package/dist/src/chat-commands/config-value.js +0 -2
  693. package/dist/src/chat-commands/context.js +0 -2
  694. package/dist/src/chat-commands/format-output.js +0 -2
  695. package/dist/src/chat-commands/index.js +0 -2
  696. package/dist/src/chat-commands/processor.js +0 -2
  697. package/dist/src/chat-commands/registry.js +0 -2
  698. package/dist/src/chat-commands/session-key.js +0 -2
  699. package/dist/src/cli/argv-invocation.js +0 -2
  700. package/dist/src/cli/argv.js +0 -2
  701. package/dist/src/cli/bin.js +0 -2
  702. package/dist/src/cli/cli-log-level-preset.js +0 -2
  703. package/dist/src/cli/command-catalog.js +0 -2
  704. package/dist/src/cli/command-loaders.js +0 -2
  705. package/dist/src/cli/command-manifest.js +0 -2
  706. package/dist/src/cli/command-path-matches.js +0 -2
  707. package/dist/src/cli/command-path-policy.js +0 -2
  708. package/dist/src/cli/command-startup-policy.js +0 -2
  709. package/dist/src/cli/commands/agent/interactive.js +0 -2
  710. package/dist/src/cli/commands/agent/sessions.js +0 -2
  711. package/dist/src/cli/commands/agent/stream-renderer.js +0 -2
  712. package/dist/src/cli/commands/agent.js +0 -2
  713. package/dist/src/cli/commands/agents.js +0 -2
  714. package/dist/src/cli/commands/auth.js +0 -2
  715. package/dist/src/cli/commands/browser-cli-helpers.js +0 -2
  716. package/dist/src/cli/commands/browser.js +0 -2
  717. package/dist/src/cli/commands/channels.js +0 -2
  718. package/dist/src/cli/commands/config.js +0 -2
  719. package/dist/src/cli/commands/connectors.js +0 -2
  720. package/dist/src/cli/commands/doctor/checks/channel-config.js +0 -2
  721. package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js +0 -2
  722. package/dist/src/cli/commands/doctor/checks/channel-plugins.js +0 -2
  723. package/dist/src/cli/commands/doctor/checks/config-health.js +0 -2
  724. package/dist/src/cli/commands/doctor/checks/database-schema.js +0 -2
  725. package/dist/src/cli/commands/doctor/checks/gateway-health.js +0 -2
  726. package/dist/src/cli/commands/doctor/checks/gateway-service.js +0 -2
  727. package/dist/src/cli/commands/doctor/checks/migrations.js +0 -2
  728. package/dist/src/cli/commands/doctor/checks/node-version.js +0 -2
  729. package/dist/src/cli/commands/doctor/checks/provider-auth.js +0 -2
  730. package/dist/src/cli/commands/doctor/checks/security-audit.js +0 -2
  731. package/dist/src/cli/commands/doctor/checks/session-integrity.js +0 -2
  732. package/dist/src/cli/commands/doctor/checks/state-integrity.js +0 -2
  733. package/dist/src/cli/commands/doctor/checks/version-check.js +0 -2
  734. package/dist/src/cli/commands/doctor/checks/workspace-status.js +0 -2
  735. package/dist/src/cli/commands/doctor/flow.js +0 -2
  736. package/dist/src/cli/commands/doctor/format.js +0 -2
  737. package/dist/src/cli/commands/doctor/index.js +0 -2
  738. package/dist/src/cli/commands/extension-create.js +0 -2
  739. package/dist/src/cli/commands/extension-dev.js +0 -2
  740. package/dist/src/cli/commands/extension-marketplace.js +0 -2
  741. package/dist/src/cli/commands/extension-pack.js +0 -2
  742. package/dist/src/cli/commands/extension.js +0 -2
  743. package/dist/src/cli/commands/gateway/call.js +0 -2
  744. package/dist/src/cli/commands/gateway/health.js +0 -2
  745. package/dist/src/cli/commands/gateway/lifecycle-core.js +0 -2
  746. package/dist/src/cli/commands/gateway/lifecycle.js +0 -2
  747. package/dist/src/cli/commands/gateway/logs.js +0 -2
  748. package/dist/src/cli/commands/gateway/probe.js +0 -2
  749. package/dist/src/cli/commands/gateway/restart-health.js +0 -2
  750. package/dist/src/cli/commands/gateway/restart.js +0 -2
  751. package/dist/src/cli/commands/gateway/run-foreground.js +0 -2
  752. package/dist/src/cli/commands/gateway/service.js +0 -2
  753. package/dist/src/cli/commands/gateway/shared.js +0 -2
  754. package/dist/src/cli/commands/gateway/status.js +0 -2
  755. package/dist/src/cli/commands/gateway/stop.js +0 -2
  756. package/dist/src/cli/commands/gateway/subcommands.js +0 -2
  757. package/dist/src/cli/commands/gateway/token.js +0 -2
  758. package/dist/src/cli/commands/gateway-ssh-tunnel.js +0 -2
  759. package/dist/src/cli/commands/gateway.js +0 -2
  760. package/dist/src/cli/commands/goal.js +0 -2
  761. package/dist/src/cli/commands/image.js +0 -2
  762. package/dist/src/cli/commands/init.js +0 -2
  763. package/dist/src/cli/commands/logs.js +0 -2
  764. package/dist/src/cli/commands/models.js +0 -2
  765. package/dist/src/cli/commands/onboard/channels/index.js +0 -2
  766. package/dist/src/cli/commands/onboard/channels/onboard-to-configurator.js +0 -2
  767. package/dist/src/cli/commands/onboard/channels/registry.js +0 -2
  768. package/dist/src/cli/commands/onboard/channels/wizard-to-configurator.js +0 -2
  769. package/dist/src/cli/commands/onboard/gateway.js +0 -2
  770. package/dist/src/cli/commands/onboard/model.js +0 -2
  771. package/dist/src/cli/commands/onboard.js +0 -2
  772. package/dist/src/cli/commands/profile.js +0 -2
  773. package/dist/src/cli/commands/project.js +0 -2
  774. package/dist/src/cli/commands/providers.js +0 -2
  775. package/dist/src/cli/commands/resume.js +0 -2
  776. package/dist/src/cli/commands/search.js +0 -2
  777. package/dist/src/cli/commands/session/actions.js +0 -2
  778. package/dist/src/cli/commands/session/utils.js +0 -2
  779. package/dist/src/cli/commands/session.js +0 -2
  780. package/dist/src/cli/commands/setup-shared/output.js +0 -2
  781. package/dist/src/cli/commands/setup-shared/prompts.js +0 -2
  782. package/dist/src/cli/commands/setup-shared/runner.js +0 -2
  783. package/dist/src/cli/commands/setup-shared/types.js +0 -2
  784. package/dist/src/cli/commands/setup.js +0 -2
  785. package/dist/src/cli/commands/skills-test.js +0 -2
  786. package/dist/src/cli/commands/skills.js +0 -2
  787. package/dist/src/cli/commands/tailscale.js +0 -2
  788. package/dist/src/cli/commands/tui-runner.js +0 -2
  789. package/dist/src/cli/commands/tui.js +0 -2
  790. package/dist/src/cli/commands/tunnel.js +0 -2
  791. package/dist/src/cli/commands/update.js +0 -2
  792. package/dist/src/cli/commands/voice.js +0 -2
  793. package/dist/src/cli/context.js +0 -2
  794. package/dist/src/cli/extension-cli-register.js +0 -2
  795. package/dist/src/cli/gateway-run-argv.js +0 -2
  796. package/dist/src/cli/gateway-run-fast-path.js +0 -2
  797. package/dist/src/cli/index.js +0 -2
  798. package/dist/src/cli/registry.js +0 -2
  799. package/dist/src/cli/templates.js +0 -2
  800. package/dist/src/cli/utils/colors.js +0 -2
  801. package/dist/src/cli/utils/gateway-client-options.js +0 -2
  802. package/dist/src/cli/utils/gateway-client.js +0 -2
  803. package/dist/src/cli/utils/init-workspace-core.js +0 -2
  804. package/dist/src/cli/utils/init-workspace.js +0 -2
  805. package/dist/src/cli/utils/oauth-login.js +0 -2
  806. package/dist/src/cli/utils/oauth-providers.js +0 -2
  807. package/dist/src/cli/utils/session.js +0 -2
  808. package/dist/src/commands/agents.config.js +0 -2
  809. package/dist/src/config/agent-profile.js +0 -2
  810. package/dist/src/config/agent-typed-models.js +0 -2
  811. package/dist/src/config/commands.flags.js +0 -2
  812. package/dist/src/config/default-model.js +0 -2
  813. package/dist/src/config/diff.js +0 -2
  814. package/dist/src/config/gateway-bind.js +0 -2
  815. package/dist/src/config/index.js +0 -2
  816. package/dist/src/config/loader.js +0 -2
  817. package/dist/src/config/mcp-config-normalize.js +0 -2
  818. package/dist/src/config/model-input.js +0 -2
  819. package/dist/src/config/models-json.js +0 -2
  820. package/dist/src/config/paths-state.js +0 -2
  821. package/dist/src/config/paths.js +0 -2
  822. package/dist/src/config/profile.js +0 -2
  823. package/dist/src/config/public-url.js +0 -2
  824. package/dist/src/config/reload.js +0 -2
  825. package/dist/src/config/resolve-config-value.js +0 -2
  826. package/dist/src/config/rules.js +0 -2
  827. package/dist/src/config/runtime-overrides.js +0 -2
  828. package/dist/src/config/schema.js +0 -2
  829. package/dist/src/config/validate-channel-configs.js +0 -2
  830. package/dist/src/config/voice.js +0 -2
  831. package/dist/src/config/web-patch.js +0 -2
  832. package/dist/src/config/workspace-defaults.js +0 -2
  833. package/dist/src/config/workspace-dirs.js +0 -2
  834. package/dist/src/config/workspace-path-helpers.js +0 -2
  835. package/dist/src/config/workspace-path.js +0 -2
  836. package/dist/src/connectors/approval.js +0 -2
  837. package/dist/src/connectors/auth-provider-registry.js +0 -2
  838. package/dist/src/connectors/builtin-catalog.js +0 -2
  839. package/dist/src/connectors/catalog.js +0 -2
  840. package/dist/src/connectors/composio-catalog.js +0 -2
  841. package/dist/src/connectors/composio-logo.js +0 -2
  842. package/dist/src/connectors/composio-sessions.js +9 -5
  843. package/dist/src/connectors/composio-triggers.js +0 -2
  844. package/dist/src/connectors/composio.js +0 -2
  845. package/dist/src/connectors/connector-memory-sync.js +0 -2
  846. package/dist/src/connectors/health.js +0 -2
  847. package/dist/src/connectors/install.js +0 -2
  848. package/dist/src/connectors/instances.js +0 -2
  849. package/dist/src/connectors/integration-strategy.js +0 -2
  850. package/dist/src/connectors/lifecycle.js +0 -2
  851. package/dist/src/connectors/materialize.js +0 -2
  852. package/dist/src/connectors/policy.js +0 -2
  853. package/dist/src/connectors/providers.js +0 -2
  854. package/dist/src/connectors/registries/modelscope.js +0 -2
  855. package/dist/src/connectors/registries/official-mcp.js +0 -2
  856. package/dist/src/connectors/registries/search.js +0 -2
  857. package/dist/src/connectors/registries/smithery.js +0 -2
  858. package/dist/src/connectors/runtime-adapter-registry.js +0 -2
  859. package/dist/src/connectors/secret-store.js +0 -2
  860. package/dist/src/connectors/setup-secrets.js +0 -2
  861. package/dist/src/connectors/supervisor.js +0 -2
  862. package/dist/src/connectors/usage.js +0 -2
  863. package/dist/src/connectors/workflow-preflight.js +0 -2
  864. package/dist/src/daemon/constants.js +0 -2
  865. package/dist/src/daemon/install-plan.js +0 -2
  866. package/dist/src/daemon/launchd.js +0 -2
  867. package/dist/src/daemon/schtasks.js +0 -2
  868. package/dist/src/daemon/service-audit.js +0 -2
  869. package/dist/src/daemon/service.js +0 -2
  870. package/dist/src/daemon/systemd.js +0 -2
  871. package/dist/src/document-understanding/extract.js +0 -2
  872. package/dist/src/errors/index.js +0 -2
  873. package/dist/src/extensions/activation-context.js +0 -2
  874. package/dist/src/extensions/activation-planner.js +0 -2
  875. package/dist/src/extensions/api.js +0 -2
  876. package/dist/src/extensions/bundle-mcp.js +0 -2
  877. package/dist/src/extensions/bundled-extension-activation.js +0 -2
  878. package/dist/src/extensions/diagnostics.js +0 -2
  879. package/dist/src/extensions/discover-extensions.js +0 -2
  880. package/dist/src/extensions/engine-check.js +0 -2
  881. package/dist/src/extensions/extension-metadata-snapshot.js +0 -2
  882. package/dist/src/extensions/extension-registry-impl.js +0 -2
  883. package/dist/src/extensions/health.js +0 -2
  884. package/dist/src/extensions/hooks.js +0 -2
  885. package/dist/src/extensions/index.js +0 -2
  886. package/dist/src/extensions/install-transaction.js +0 -2
  887. package/dist/src/extensions/install.js +0 -2
  888. package/dist/src/extensions/loader.js +0 -2
  889. package/dist/src/extensions/lockfile.js +0 -2
  890. package/dist/src/extensions/manifest-registry.js +0 -2
  891. package/dist/src/extensions/marketplace.js +0 -2
  892. package/dist/src/extensions/media-provider-contracts.js +0 -2
  893. package/dist/src/extensions/normalize-manifest.js +0 -2
  894. package/dist/src/extensions/onboard-helpers.js +0 -2
  895. package/dist/src/extensions/package-contract.js +0 -2
  896. package/dist/src/extensions/sdk/channel-entry.js +0 -2
  897. package/dist/src/extensions/sdk/channel-helpers.js +0 -2
  898. package/dist/src/extensions/sdk/index.js +0 -2
  899. package/dist/src/extensions/sdk/lazy.js +0 -2
  900. package/dist/src/extensions/sdk/testing.js +0 -2
  901. package/dist/src/extensions/security.js +0 -2
  902. package/dist/src/extensions/slots.js +0 -2
  903. package/dist/src/extensions/speech-provider-contracts.js +0 -2
  904. package/dist/src/extensions/store-zip-limits.js +0 -2
  905. package/dist/src/extensions/typed-event-bus.js +0 -2
  906. package/dist/src/extensions/types/hooks.js +0 -2
  907. package/dist/src/extensions/types/providers.js +0 -2
  908. package/dist/src/extensions/update.js +0 -2
  909. package/dist/src/extensions/when-context.js +0 -2
  910. package/dist/src/extensions/when-expression.js +0 -2
  911. package/dist/src/gateway/agent-builtin-tools.js +0 -2
  912. package/dist/src/gateway/agent-run-relay.js +0 -2
  913. package/dist/src/gateway/agents-admin.js +0 -2
  914. package/dist/src/gateway/auth.js +0 -2
  915. package/dist/src/gateway/capability-presets-admin.js +0 -2
  916. package/dist/src/gateway/chat-limits.js +0 -2
  917. package/dist/src/gateway/chat-stream/mapper.js +28 -14
  918. package/dist/src/gateway/chat-stream/pet-feedback.d.ts +13 -0
  919. package/dist/src/gateway/chat-stream/pet-feedback.js +45 -0
  920. package/dist/src/gateway/chat-stream/protocol.d.ts +26 -0
  921. package/dist/src/gateway/clarify-bridge.js +3 -3
  922. package/dist/src/gateway/clarify-runtime.js +0 -2
  923. package/dist/src/gateway/client-ip.js +0 -2
  924. package/dist/src/gateway/config-tools-web.js +0 -2
  925. package/dist/src/gateway/credential.js +0 -2
  926. package/dist/src/gateway/discovery/mdns.js +0 -2
  927. package/dist/src/gateway/dreaming-automation-reconciler.js +0 -2
  928. package/dist/src/gateway/ensure-network-cors.js +0 -2
  929. package/dist/src/gateway/file-path-classifier.js +0 -2
  930. package/dist/src/gateway/file-reference-registry.js +0 -2
  931. package/dist/src/gateway/global-defaults-admin.js +0 -2
  932. package/dist/src/gateway/heartbeat/service.js +0 -2
  933. package/dist/src/gateway/hono/app.js +0 -2
  934. package/dist/src/gateway/hono/lib/agent-model.js +0 -2
  935. package/dist/src/gateway/hono/lib/config-payload.js +0 -2
  936. package/dist/src/gateway/hono/lib/extension-assets.js +0 -2
  937. package/dist/src/gateway/hono/lib/extension-store.js +0 -2
  938. package/dist/src/gateway/hono/lib/mask-secret-length.js +0 -2
  939. package/dist/src/gateway/hono/lib/route-logger.js +0 -2
  940. package/dist/src/gateway/hono/lib/safe-providers-config.js +0 -2
  941. package/dist/src/gateway/hono/lib/safe-voice-config.js +0 -2
  942. package/dist/src/gateway/hono/lib/startup-unavailable.js +0 -2
  943. package/dist/src/gateway/hono/lib/static-ui.js +0 -2
  944. package/dist/src/gateway/hono/middleware/auth.js +0 -2
  945. package/dist/src/gateway/hono/middleware/log-context.js +0 -2
  946. package/dist/src/gateway/hono/middleware/logger.js +0 -2
  947. package/dist/src/gateway/hono/middleware/route-errors.js +0 -2
  948. package/dist/src/gateway/hono/middleware/scopes.js +0 -2
  949. package/dist/src/gateway/hono/middleware/strict-rate-limit.js +0 -2
  950. package/dist/src/gateway/hono/oauth-async.js +0 -2
  951. package/dist/src/gateway/hono/oauth.js +0 -2
  952. package/dist/src/gateway/hono/routes/activity.js +0 -2
  953. package/dist/src/gateway/hono/routes/agent-stream.js +0 -2
  954. package/dist/src/gateway/hono/routes/agents.js +0 -2
  955. package/dist/src/gateway/hono/routes/ai-assist.js +0 -2
  956. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +0 -2
  957. package/dist/src/gateway/hono/routes/browser-install.js +0 -2
  958. package/dist/src/gateway/hono/routes/browser.js +0 -2
  959. package/dist/src/gateway/hono/routes/capabilities.js +0 -2
  960. package/dist/src/gateway/hono/routes/capability-presets.js +0 -2
  961. package/dist/src/gateway/hono/routes/channels.js +0 -2
  962. package/dist/src/gateway/hono/routes/commands-skills.js +0 -2
  963. package/dist/src/gateway/hono/routes/config-patch/agents.js +0 -2
  964. package/dist/src/gateway/hono/routes/config-patch/channels.js +0 -2
  965. package/dist/src/gateway/hono/routes/config-patch/gateway.js +0 -2
  966. package/dist/src/gateway/hono/routes/config-patch/misc.js +0 -2
  967. package/dist/src/gateway/hono/routes/config-patch/result.js +0 -2
  968. package/dist/src/gateway/hono/routes/config.js +0 -2
  969. package/dist/src/gateway/hono/routes/connectors.js +0 -2
  970. package/dist/src/gateway/hono/routes/doctor.js +0 -2
  971. package/dist/src/gateway/hono/routes/dreaming.js +0 -2
  972. package/dist/src/gateway/hono/routes/exposure.js +0 -2
  973. package/dist/src/gateway/hono/routes/extension-gateway.js +0 -2
  974. package/dist/src/gateway/hono/routes/global-defaults.js +0 -2
  975. package/dist/src/gateway/hono/routes/goals.js +0 -2
  976. package/dist/src/gateway/hono/routes/home.js +0 -2
  977. package/dist/src/gateway/hono/routes/host-fs.js +0 -2
  978. package/dist/src/gateway/hono/routes/index.js +0 -2
  979. package/dist/src/gateway/hono/routes/lazy-bundles.js +0 -2
  980. package/dist/src/gateway/hono/routes/lazy-fallback.js +0 -2
  981. package/dist/src/gateway/hono/routes/local-apps.js +0 -2
  982. package/dist/src/gateway/hono/routes/logs.js +0 -2
  983. package/dist/src/gateway/hono/routes/mcp.js +0 -2
  984. package/dist/src/gateway/hono/routes/media.js +0 -2
  985. package/dist/src/gateway/hono/routes/memory.js +0 -2
  986. package/dist/src/gateway/hono/routes/migrations.js +0 -2
  987. package/dist/src/gateway/hono/routes/mobile.js +0 -2
  988. package/dist/src/gateway/hono/routes/models.js +0 -2
  989. package/dist/src/gateway/hono/routes/notes.js +3 -3
  990. package/dist/src/gateway/hono/routes/projects.js +0 -2
  991. package/dist/src/gateway/hono/routes/public-gateway.js +0 -2
  992. package/dist/src/gateway/hono/routes/search.js +0 -2
  993. package/dist/src/gateway/hono/routes/sessions.js +0 -2
  994. package/dist/src/gateway/hono/routes/shares.js +0 -2
  995. package/dist/src/gateway/hono/routes/site-shares.js +0 -2
  996. package/dist/src/gateway/hono/routes/status.js +0 -2
  997. package/dist/src/gateway/hono/routes/tui.js +0 -2
  998. package/dist/src/gateway/hono/routes/tunnel.js +0 -2
  999. package/dist/src/gateway/hono/routes/update.js +0 -2
  1000. package/dist/src/gateway/hono/routes/voice.js +0 -2
  1001. package/dist/src/gateway/hono/routes/work-discovery.js +0 -2
  1002. package/dist/src/gateway/hono/routes/workflows.js +0 -2
  1003. package/dist/src/gateway/hono/routes/workspace.js +0 -2
  1004. package/dist/src/gateway/hono/routes/you.js +0 -2
  1005. package/dist/src/gateway/hono/sse-json.js +0 -2
  1006. package/dist/src/gateway/hono/sse.js +0 -2
  1007. package/dist/src/gateway/host.js +0 -2
  1008. package/dist/src/gateway/image-capabilities.js +0 -2
  1009. package/dist/src/gateway/listen.js +0 -2
  1010. package/dist/src/gateway/lock.js +0 -2
  1011. package/dist/src/gateway/ports.js +0 -2
  1012. package/dist/src/gateway/protocol.js +0 -2
  1013. package/dist/src/gateway/public-url.js +0 -2
  1014. package/dist/src/gateway/rate-limit/auth-policy.js +0 -2
  1015. package/dist/src/gateway/rate-limit/buckets.js +0 -2
  1016. package/dist/src/gateway/rate-limit/env-flags.js +0 -2
  1017. package/dist/src/gateway/resolve-channel-connect-defer.js +0 -2
  1018. package/dist/src/gateway/resolve-webchat-session-key.js +0 -2
  1019. package/dist/src/gateway/respawn.js +0 -2
  1020. package/dist/src/gateway/run-loop.js +0 -2
  1021. package/dist/src/gateway/runtime-config.js +0 -2
  1022. package/dist/src/gateway/security/audit.js +0 -2
  1023. package/dist/src/gateway/security/csp.js +0 -2
  1024. package/dist/src/gateway/security/dangerous-tools.js +0 -2
  1025. package/dist/src/gateway/security/external-content.js +0 -2
  1026. package/dist/src/gateway/security/known-weak-secrets.js +0 -2
  1027. package/dist/src/gateway/security/loopback.js +0 -2
  1028. package/dist/src/gateway/security/operator-scopes.js +0 -2
  1029. package/dist/src/gateway/security/origin-check.js +0 -2
  1030. package/dist/src/gateway/security/preauth-connection-budget.js +0 -2
  1031. package/dist/src/gateway/security/secret-equal.js +0 -2
  1032. package/dist/src/gateway/server-tailscale.js +0 -2
  1033. package/dist/src/gateway/server.js +0 -2
  1034. package/dist/src/gateway/service/agent-runner.js +0 -2
  1035. package/dist/src/gateway/service/config-coordinator.js +0 -2
  1036. package/dist/src/gateway/service/marketplace-service.js +0 -2
  1037. package/dist/src/gateway/service/run-gateway-agent.js +0 -2
  1038. package/dist/src/gateway/service/session-chat-ids.js +0 -2
  1039. package/dist/src/gateway/service/sessions-api.js +0 -2
  1040. package/dist/src/gateway/service/sse-hub.js +0 -2
  1041. package/dist/src/gateway/service.js +1 -2
  1042. package/dist/src/gateway/session-reset-service.js +0 -2
  1043. package/dist/src/gateway/startup-readiness.js +0 -2
  1044. package/dist/src/gateway/startup-trace.js +0 -2
  1045. package/dist/src/gateway/tailscale-auth.js +0 -2
  1046. package/dist/src/gateway/tailscale-lifecycle.js +0 -2
  1047. package/dist/src/gateway/tls-server.js +0 -2
  1048. package/dist/src/gateway/trusted-proxy.js +0 -2
  1049. package/dist/src/gateway/user-turn-input.js +0 -2
  1050. package/dist/src/gateway/workspace-editor-path.js +0 -2
  1051. package/dist/src/gateway/workspace-file-search.js +0 -2
  1052. package/dist/src/gateway/workspace-fs-file-list.js +0 -2
  1053. package/dist/src/gateway/workspace-heartbeat-path.js +0 -2
  1054. package/dist/src/gateway/workspace-ripgrep.js +0 -2
  1055. package/dist/src/gateway/ws-security.js +0 -2
  1056. package/dist/src/generated/bundled-image-generation-providers.js +0 -2
  1057. package/dist/src/goals/goal-contract-draft.js +0 -2
  1058. package/dist/src/goals/goal-evidence-review.js +0 -2
  1059. package/dist/src/goals/goal-notifications.js +0 -2
  1060. package/dist/src/goals/goal-queue-store.js +0 -2
  1061. package/dist/src/goals/goal-runner.js +0 -2
  1062. package/dist/src/goals/goal-service.js +0 -2
  1063. package/dist/src/goals/goal-store.js +0 -2
  1064. package/dist/src/goals/goal-workflow-judge.js +0 -2
  1065. package/dist/src/heartbeat/active-hours.js +0 -2
  1066. package/dist/src/heartbeat/content-check.js +0 -2
  1067. package/dist/src/heartbeat/event-prompt.js +0 -2
  1068. package/dist/src/heartbeat/tokens.js +0 -2
  1069. package/dist/src/heartbeat/wake.js +0 -2
  1070. package/dist/src/i18n/format.js +0 -2
  1071. package/dist/src/i18n/goals-bundle.js +0 -2
  1072. package/dist/src/i18n/locale.js +0 -2
  1073. package/dist/src/i18n/locales/goals.en.js +0 -2
  1074. package/dist/src/i18n/locales/goals.zh.js +0 -2
  1075. package/dist/src/i18n/locales/share-tool.en.js +0 -2
  1076. package/dist/src/i18n/locales/share-tool.zh.js +0 -2
  1077. package/dist/src/i18n/share-tool-bundle.js +0 -2
  1078. package/dist/src/index.js +0 -2
  1079. package/dist/src/infra/brew.js +0 -2
  1080. package/dist/src/infra/bus/queue.js +0 -2
  1081. package/dist/src/infra/debounce.js +0 -2
  1082. package/dist/src/infra/exec.js +0 -2
  1083. package/dist/src/infra/gateway-process-argv.js +0 -2
  1084. package/dist/src/infra/gateway-processes.js +0 -2
  1085. package/dist/src/infra/host-env-security-policy.js +0 -2
  1086. package/dist/src/infra/host-env-security.js +0 -2
  1087. package/dist/src/infra/http-proxy-env.js +0 -2
  1088. package/dist/src/infra/is-main.js +0 -2
  1089. package/dist/src/infra/json-utf8-bytes.js +0 -2
  1090. package/dist/src/infra/node-sqlite.js +0 -2
  1091. package/dist/src/infra/package-json.js +0 -2
  1092. package/dist/src/infra/package-update-steps.js +0 -2
  1093. package/dist/src/infra/path-env.js +0 -2
  1094. package/dist/src/infra/path-prepend.js +0 -2
  1095. package/dist/src/infra/ports.js +0 -2
  1096. package/dist/src/infra/rate-limit/failure-limiter.js +0 -2
  1097. package/dist/src/infra/rate-limit/keyed-store.js +0 -2
  1098. package/dist/src/infra/rate-limit/rate-limiter.js +0 -2
  1099. package/dist/src/infra/restart.js +0 -2
  1100. package/dist/src/infra/retry.js +0 -2
  1101. package/dist/src/infra/run-command.js +0 -2
  1102. package/dist/src/infra/sqlite-errors.js +0 -2
  1103. package/dist/src/infra/ssh-tunnel.js +0 -2
  1104. package/dist/src/infra/stable-node-path.js +0 -2
  1105. package/dist/src/infra/tailscale.js +0 -2
  1106. package/dist/src/infra/undici-fetch.js +0 -2
  1107. package/dist/src/infra/unhandled-rejections.js +0 -2
  1108. package/dist/src/infra/update-channels.js +0 -2
  1109. package/dist/src/infra/update-check.js +0 -2
  1110. package/dist/src/infra/update-global.js +0 -2
  1111. package/dist/src/infra/update-lock.js +0 -2
  1112. package/dist/src/infra/update-log.js +0 -2
  1113. package/dist/src/infra/update-restart.js +0 -2
  1114. package/dist/src/infra/update-runner.js +0 -2
  1115. package/dist/src/infra/update-startup.js +0 -2
  1116. package/dist/src/infra/warning-filter.js +0 -2
  1117. package/dist/src/infra/write-file-atomic.js +0 -2
  1118. package/dist/src/knowledge/connected-knowledge-pipeline.js +0 -2
  1119. package/dist/src/knowledge/coordinator.js +0 -2
  1120. package/dist/src/knowledge/ingestion-service.js +0 -2
  1121. package/dist/src/local-apps/acceptance.js +0 -2
  1122. package/dist/src/local-apps/preview-runtime-bridge.js +0 -2
  1123. package/dist/src/local-apps/runtime-entry.js +0 -2
  1124. package/dist/src/local-apps/scaffold.js +0 -2
  1125. package/dist/src/local-apps/service.js +0 -2
  1126. package/dist/src/local-apps/store.js +0 -2
  1127. package/dist/src/markdown/chunk.js +0 -2
  1128. package/dist/src/markdown/code-spans.js +0 -2
  1129. package/dist/src/markdown/fences.js +0 -2
  1130. package/dist/src/markdown/frontmatter.js +0 -2
  1131. package/dist/src/markdown/ir.js +0 -2
  1132. package/dist/src/markdown/render.js +0 -2
  1133. package/dist/src/markdown/tables.js +0 -2
  1134. package/dist/src/mcp/channel-bridge.js +0 -2
  1135. package/dist/src/mcp/channel-server.js +0 -2
  1136. package/dist/src/mcp/channel-shared.js +0 -2
  1137. package/dist/src/mcp/channel-tools.js +0 -2
  1138. package/dist/src/mcp/gateway-http-client.js +0 -2
  1139. package/dist/src/media/media-reference.js +0 -2
  1140. package/dist/src/media/paths.js +0 -2
  1141. package/dist/src/media/session-references.js +0 -2
  1142. package/dist/src/media/store.js +0 -2
  1143. package/dist/src/media/uri.js +0 -2
  1144. package/dist/src/media-shared/http/api-key-rotation.js +0 -2
  1145. package/dist/src/media-shared/http/deadline.js +0 -2
  1146. package/dist/src/media-shared/http/private-network.js +0 -2
  1147. package/dist/src/media-shared/http/provider-http-errors.js +0 -2
  1148. package/dist/src/media-shared/http/provider-http.js +0 -2
  1149. package/dist/src/media-shared/http/resolve-provider-http-request-config.js +0 -2
  1150. package/dist/src/media-shared/http/ssrf-guard.js +0 -2
  1151. package/dist/src/media-shared/http/test-helpers/mock-server.js +0 -2
  1152. package/dist/src/media-understanding/audio-transcription-runner.js +0 -2
  1153. package/dist/src/media-understanding/openai-compatible-audio.js +0 -2
  1154. package/dist/src/media-understanding/registry.js +0 -2
  1155. package/dist/src/media-understanding/resolve-entries.js +0 -2
  1156. package/dist/src/media-understanding/runner.js +0 -2
  1157. package/dist/src/migrations/config/default-capability-preset.js +0 -2
  1158. package/dist/src/migrations/registry.js +0 -2
  1159. package/dist/src/migrations/runner.js +0 -2
  1160. package/dist/src/mobile/notification-service.js +0 -2
  1161. package/dist/src/mobile/notification-store.js +0 -2
  1162. package/dist/src/mobile/notification-types.js +0 -2
  1163. package/dist/src/notes/agent-context.js +0 -2
  1164. package/dist/src/notes/attachment-ref.js +0 -2
  1165. package/dist/src/notes/note-attachment-sync.js +0 -2
  1166. package/dist/src/notes/note-index-meta.js +0 -2
  1167. package/dist/src/notes/note-markdown.js +0 -2
  1168. package/dist/src/notes/paths.js +0 -2
  1169. package/dist/src/notes/service.d.ts +3 -1
  1170. package/dist/src/notes/service.js +19 -5
  1171. package/dist/src/notes/store.js +0 -2
  1172. package/dist/src/package-version.js +0 -2
  1173. package/dist/src/pets/factory.d.ts +13 -0
  1174. package/dist/src/pets/factory.js +23 -2
  1175. package/dist/src/pets/manifest.js +0 -2
  1176. package/dist/src/pets/validator.js +0 -2
  1177. package/dist/src/process/kill-tree.js +0 -2
  1178. package/dist/src/project-trust/trust-store.js +0 -2
  1179. package/dist/src/projects/automation-bind.js +0 -2
  1180. package/dist/src/projects/goal-bind.js +0 -2
  1181. package/dist/src/projects/memory-bind.js +0 -2
  1182. package/dist/src/projects/project-agent-suggestion.js +0 -2
  1183. package/dist/src/projects/project-agent.js +0 -2
  1184. package/dist/src/projects/project-kind.js +0 -2
  1185. package/dist/src/projects/project-loop.js +0 -2
  1186. package/dist/src/projects/project-service.js +0 -2
  1187. package/dist/src/projects/project-store.js +0 -2
  1188. package/dist/src/projects/session-bind.js +0 -2
  1189. package/dist/src/projects/workflow-bind.js +0 -2
  1190. package/dist/src/projects/workspace-project.js +0 -2
  1191. package/dist/src/projects/workspace.js +0 -2
  1192. package/dist/src/providers/auth-runtime/auth-profile-store.js +0 -2
  1193. package/dist/src/providers/auth-runtime/is-configured.js +0 -2
  1194. package/dist/src/providers/auth-runtime/oauth.js +0 -2
  1195. package/dist/src/providers/auth-runtime/resolve-api-key.js +0 -2
  1196. package/dist/src/providers/auth-runtime/resolve-auth.js +0 -2
  1197. package/dist/src/providers/constants.js +0 -2
  1198. package/dist/src/providers/domestic-presets.js +0 -2
  1199. package/dist/src/providers/env-keys.js +0 -2
  1200. package/dist/src/providers/extension-stream-bridge.js +0 -2
  1201. package/dist/src/providers/index.js +0 -2
  1202. package/dist/src/providers/model-call.js +0 -2
  1203. package/dist/src/providers/model-discovery.js +0 -2
  1204. package/dist/src/providers/model-registry.js +0 -2
  1205. package/dist/src/providers/model-supplements.js +0 -2
  1206. package/dist/src/providers/plugin-registry.js +0 -2
  1207. package/dist/src/providers/presentation.js +0 -2
  1208. package/dist/src/remote-access/exposure-guards.js +0 -2
  1209. package/dist/src/remote-access/exposure-manager.js +0 -2
  1210. package/dist/src/review/review-git.js +0 -2
  1211. package/dist/src/review/review-types.js +0 -2
  1212. package/dist/src/routing/account-id.js +0 -2
  1213. package/dist/src/routing/agent-session-key.js +0 -2
  1214. package/dist/src/routing/bindings.js +0 -2
  1215. package/dist/src/routing/index.js +0 -2
  1216. package/dist/src/routing/resolve-route.js +0 -2
  1217. package/dist/src/routing/resolve-tui-session-key.js +0 -2
  1218. package/dist/src/routing/session-key-utils.js +0 -2
  1219. package/dist/src/routing/session-key.js +0 -2
  1220. package/dist/src/session/abort-cutoff.js +0 -2
  1221. package/dist/src/session/chat-export.js +0 -2
  1222. package/dist/src/session/client-history.js +0 -2
  1223. package/dist/src/session/compaction-checkpoints.js +0 -2
  1224. package/dist/src/session/config-store.js +0 -2
  1225. package/dist/src/session/init-session-turn.js +0 -2
  1226. package/dist/src/session/lifecycle-timestamps.js +0 -2
  1227. package/dist/src/session/load-jsonl-entries.js +0 -2
  1228. package/dist/src/session/manager.js +0 -2
  1229. package/dist/src/session/patch-metadata.js +0 -2
  1230. package/dist/src/session/reset-policy.js +0 -2
  1231. package/dist/src/session/reset-triggers.js +0 -2
  1232. package/dist/src/session/reset-type.js +0 -2
  1233. package/dist/src/session/resolve-session.js +0 -2
  1234. package/dist/src/session/session-context-for-llm.js +0 -2
  1235. package/dist/src/session/session-id.js +0 -2
  1236. package/dist/src/session/session-title.js +0 -2
  1237. package/dist/src/session/session-workspace.js +0 -2
  1238. package/dist/src/session/store.js +0 -2
  1239. package/dist/src/session/stored-rows-to-file-entries.js +0 -2
  1240. package/dist/src/session/thinking-resolve.js +0 -2
  1241. package/dist/src/session/transcript-events.js +0 -2
  1242. package/dist/src/session/transcript-format.js +0 -2
  1243. package/dist/src/session/transcript-outline.js +0 -2
  1244. package/dist/src/session/transcript-stats.js +0 -2
  1245. package/dist/src/session/types.js +0 -2
  1246. package/dist/src/session/user-round-delete.js +0 -2
  1247. package/dist/src/share/share-audit.js +0 -2
  1248. package/dist/src/share/share-auto.js +0 -2
  1249. package/dist/src/share/share-config.js +0 -2
  1250. package/dist/src/share/share-landing.js +0 -2
  1251. package/dist/src/share/share-rate-limit.js +0 -2
  1252. package/dist/src/share/share-store.js +0 -2
  1253. package/dist/src/share/share-thumbnail.js +0 -2
  1254. package/dist/src/share/share-types.js +0 -2
  1255. package/dist/src/share/share-url.js +0 -2
  1256. package/dist/src/share/share-zip.js +0 -2
  1257. package/dist/src/share/site-proxy.js +0 -2
  1258. package/dist/src/share/site-share-config.js +0 -2
  1259. package/dist/src/share/site-share-router.js +0 -2
  1260. package/dist/src/share/site-share-store.js +0 -2
  1261. package/dist/src/share/site-share-types.js +0 -2
  1262. package/dist/src/share/site-static-serve.js +0 -2
  1263. package/dist/src/storage/sqlite/activity-repository.js +0 -2
  1264. package/dist/src/storage/sqlite/config-repository.js +0 -2
  1265. package/dist/src/storage/sqlite/connection.js +0 -2
  1266. package/dist/src/storage/sqlite/connector-repository.js +0 -2
  1267. package/dist/src/storage/sqlite/fts.js +0 -2
  1268. package/dist/src/storage/sqlite/knowledge-repository.js +0 -2
  1269. package/dist/src/storage/sqlite/memory-index-repository.js +0 -2
  1270. package/dist/src/storage/sqlite/memory-records-repository.js +0 -2
  1271. package/dist/src/storage/sqlite/memory-reference-consent-repository.js +0 -2
  1272. package/dist/src/storage/sqlite/migrations/discover.js +0 -2
  1273. package/dist/src/storage/sqlite/migrations/errors.js +0 -2
  1274. package/dist/src/storage/sqlite/migrations/runner.js +0 -2
  1275. package/dist/src/storage/sqlite/note-agent-context-repository.js +0 -2
  1276. package/dist/src/storage/sqlite/notes-repository.js +0 -2
  1277. package/dist/src/storage/sqlite/paths.js +0 -2
  1278. package/dist/src/storage/sqlite/row-mappers.js +0 -2
  1279. package/dist/src/storage/sqlite/schema-version.js +0 -2
  1280. package/dist/src/storage/sqlite/schema.js +0 -2
  1281. package/dist/src/storage/sqlite/session-metadata.js +0 -2
  1282. package/dist/src/storage/sqlite/session-repository.js +0 -2
  1283. package/dist/src/storage/sqlite/transaction.js +0 -2
  1284. package/dist/src/storage/sqlite/transcript-repository.js +0 -2
  1285. package/dist/src/storage/sqlite/user-profile-setup-repository.js +0 -2
  1286. package/dist/src/storage/sqlite/user-trust-repository.js +0 -2
  1287. package/dist/src/tui/backends/embedded-backend.js +0 -2
  1288. package/dist/src/tui/backends/gateway-sse-backend.js +0 -2
  1289. package/dist/src/tui/chat-history.js +0 -2
  1290. package/dist/src/tui/clipboard-image.js +0 -2
  1291. package/dist/src/tui/clipboard-text.js +0 -2
  1292. package/dist/src/tui/components/assistant-message.js +0 -2
  1293. package/dist/src/tui/components/bash-execution.js +0 -2
  1294. package/dist/src/tui/components/bash-summary.js +0 -2
  1295. package/dist/src/tui/components/branch-message-summary.js +0 -2
  1296. package/dist/src/tui/components/branch-summary.js +0 -2
  1297. package/dist/src/tui/components/chat-log.js +0 -2
  1298. package/dist/src/tui/components/compaction-summary.js +0 -2
  1299. package/dist/src/tui/components/custom-editor.js +0 -2
  1300. package/dist/src/tui/components/custom-message.js +0 -2
  1301. package/dist/src/tui/components/dynamic-border.js +0 -2
  1302. package/dist/src/tui/components/extension-dialog.js +0 -2
  1303. package/dist/src/tui/components/fuzzy-filter.js +0 -2
  1304. package/dist/src/tui/components/scoped-models-selector.js +0 -2
  1305. package/dist/src/tui/components/searchable-select-list.js +0 -2
  1306. package/dist/src/tui/components/session-selector.js +0 -2
  1307. package/dist/src/tui/components/settings-selector.js +0 -2
  1308. package/dist/src/tui/components/thinking-selector.js +0 -2
  1309. package/dist/src/tui/components/tool-execution.js +0 -2
  1310. package/dist/src/tui/components/tui-bottom-bar.js +0 -2
  1311. package/dist/src/tui/components/tui-header.js +0 -2
  1312. package/dist/src/tui/components/user-message.js +0 -2
  1313. package/dist/src/tui/components/visual-truncate.js +0 -2
  1314. package/dist/src/tui/extension-host/autocomplete.js +0 -2
  1315. package/dist/src/tui/extension-host/host.js +0 -2
  1316. package/dist/src/tui/extension-host/load-extensions.js +0 -2
  1317. package/dist/src/tui/extension-host/runtime-context.js +0 -2
  1318. package/dist/src/tui/extension-host/runtime.js +0 -2
  1319. package/dist/src/tui/extension-host/surface.js +0 -2
  1320. package/dist/src/tui/extension-host/tool-renderers.js +0 -2
  1321. package/dist/src/tui/format-tui-hotkeys.js +0 -2
  1322. package/dist/src/tui/sse-consumer.js +0 -2
  1323. package/dist/src/tui/theme/dark.js +0 -2
  1324. package/dist/src/tui/theme/light.js +0 -2
  1325. package/dist/src/tui/theme-manager.js +0 -2
  1326. package/dist/src/tui/theme.js +0 -2
  1327. package/dist/src/tui/tool-summary.js +0 -2
  1328. package/dist/src/tui/tui-agent-events.js +0 -2
  1329. package/dist/src/tui/tui-command-formatters.js +0 -2
  1330. package/dist/src/tui/tui-commands.js +0 -2
  1331. package/dist/src/tui/tui-context-usage.js +0 -2
  1332. package/dist/src/tui/tui-extension-user-message.js +0 -2
  1333. package/dist/src/tui/tui-fd-path.js +0 -2
  1334. package/dist/src/tui/tui-file-autocomplete.js +0 -2
  1335. package/dist/src/tui/tui-follow-up-queue.js +0 -2
  1336. package/dist/src/tui/tui-git-branch.js +0 -2
  1337. package/dist/src/tui/tui-keybindings-file.js +0 -2
  1338. package/dist/src/tui/tui-lifecycle.js +0 -2
  1339. package/dist/src/tui/tui-local-shell.js +0 -2
  1340. package/dist/src/tui/tui-model-picker.js +0 -2
  1341. package/dist/src/tui/tui-oauth-login.js +0 -2
  1342. package/dist/src/tui/tui-overlays.js +0 -2
  1343. package/dist/src/tui/tui-picker-overlay.js +0 -2
  1344. package/dist/src/tui/tui-run-state.js +0 -2
  1345. package/dist/src/tui/tui-run-status-format.js +0 -2
  1346. package/dist/src/tui/tui-runtime-hints.js +0 -2
  1347. package/dist/src/tui/tui-scoped-models.js +0 -2
  1348. package/dist/src/tui/tui-session-actions.js +0 -2
  1349. package/dist/src/tui/tui-session-format.js +0 -2
  1350. package/dist/src/tui/tui-session-snapshot.js +0 -2
  1351. package/dist/src/tui/tui-session-stats.js +0 -2
  1352. package/dist/src/tui/tui-settings.js +0 -2
  1353. package/dist/src/tui/tui-skills-autocomplete.js +0 -2
  1354. package/dist/src/tui/tui-startup-resources.js +0 -2
  1355. package/dist/src/tui/tui-startup-text.js +0 -2
  1356. package/dist/src/tui/tui-stdio-filter.js +0 -2
  1357. package/dist/src/tui/tui-submit.js +0 -2
  1358. package/dist/src/tui/tui-suspend.js +0 -2
  1359. package/dist/src/tui/tui-timeline-picker.js +0 -2
  1360. package/dist/src/tui/tui-timeline.js +0 -2
  1361. package/dist/src/tui/tui-tool-diff.js +0 -2
  1362. package/dist/src/tui/tui-tool-result.js +0 -2
  1363. package/dist/src/tui/tui-transcript-tree-picker.js +0 -2
  1364. package/dist/src/tui/tui-transcript-tree.js +0 -2
  1365. package/dist/src/tui/tui-types.js +0 -2
  1366. package/dist/src/tui/tui-workflow-slash.js +0 -2
  1367. package/dist/src/tui/tui.js +0 -2
  1368. package/dist/src/tui/xopc-tui-keybindings.js +0 -2
  1369. package/dist/src/tunnel/broker-client.js +0 -2
  1370. package/dist/src/tunnel/consent.js +0 -2
  1371. package/dist/src/tunnel/enable-lan-pairing.js +0 -2
  1372. package/dist/src/tunnel/env.js +0 -2
  1373. package/dist/src/tunnel/frp-subdomain-host.js +0 -2
  1374. package/dist/src/tunnel/frpc-binary.js +0 -2
  1375. package/dist/src/tunnel/frpc-config.js +0 -2
  1376. package/dist/src/tunnel/frpc-extract.js +0 -2
  1377. package/dist/src/tunnel/frpc-process.js +0 -2
  1378. package/dist/src/tunnel/gateway-lifecycle.js +0 -2
  1379. package/dist/src/tunnel/pair-context.js +0 -2
  1380. package/dist/src/tunnel/pair-url.js +0 -2
  1381. package/dist/src/tunnel/pairing-rate-limit.js +0 -2
  1382. package/dist/src/tunnel/pairing.js +0 -2
  1383. package/dist/src/tunnel/tunnel-audit.js +0 -2
  1384. package/dist/src/tunnel/tunnel-config.js +0 -2
  1385. package/dist/src/tunnel/tunnel-persist.js +0 -2
  1386. package/dist/src/tunnel/tunnel-qr.js +0 -2
  1387. package/dist/src/tunnel/tunnel-rate-limit.js +0 -2
  1388. package/dist/src/tunnel/tunnel-service.js +0 -2
  1389. package/dist/src/tunnel/tunnel-state.js +0 -2
  1390. package/dist/src/tunnel/well-known.js +0 -2
  1391. package/dist/src/user-context/config.js +0 -2
  1392. package/dist/src/user-context/import.js +0 -2
  1393. package/dist/src/user-context/owner.js +0 -2
  1394. package/dist/src/user-context/profile.js +0 -2
  1395. package/dist/src/user-context/projection.js +0 -2
  1396. package/dist/src/user-context/runtime.js +0 -2
  1397. package/dist/src/user-context/source-recommendations.js +0 -2
  1398. package/dist/src/user-context/trust-policy.js +0 -2
  1399. package/dist/src/utils/global-singleton.js +0 -2
  1400. package/dist/src/utils/helpers.js +0 -2
  1401. package/dist/src/utils/index.js +0 -2
  1402. package/dist/src/utils/is-record.js +0 -2
  1403. package/dist/src/utils/logger/audit.js +0 -2
  1404. package/dist/src/utils/logger/config.js +0 -2
  1405. package/dist/src/utils/logger/context.js +0 -2
  1406. package/dist/src/utils/logger/exporters.js +0 -2
  1407. package/dist/src/utils/logger/index.js +0 -2
  1408. package/dist/src/utils/logger/log-store.js +0 -2
  1409. package/dist/src/utils/logger/log-stream.js +0 -2
  1410. package/dist/src/utils/logger/pino-record.js +0 -2
  1411. package/dist/src/utils/logger/redact.js +0 -2
  1412. package/dist/src/utils/logger/rotation.js +0 -2
  1413. package/dist/src/utils/logger/shutdown.js +0 -2
  1414. package/dist/src/utils/logger/stats.js +0 -2
  1415. package/dist/src/utils/logger/streams.js +0 -2
  1416. package/dist/src/utils/logger/types.js +0 -2
  1417. package/dist/src/utils/logger.js +0 -2
  1418. package/dist/src/utils/redact-sensitive-url.js +0 -2
  1419. package/dist/src/utils/sanitize-log.js +0 -2
  1420. package/dist/src/utils/string-coerce.js +0 -2
  1421. package/dist/src/voice/language-profile.js +0 -2
  1422. package/dist/src/voice/local/model-files.js +0 -2
  1423. package/dist/src/voice/local/model-manager.js +0 -2
  1424. package/dist/src/voice/local/models.js +0 -2
  1425. package/dist/src/voice/local/runtime-client.js +0 -2
  1426. package/dist/src/voice/local/runtime-dispatcher.js +0 -2
  1427. package/dist/src/voice/local/runtime-worker.js +12 -4
  1428. package/dist/src/voice/local/wav.js +0 -2
  1429. package/dist/src/voice/metadata/builtin.js +0 -2
  1430. package/dist/src/voice/metadata/registry.js +0 -2
  1431. package/dist/src/voice/stt/availability.js +0 -2
  1432. package/dist/src/voice/stt/config-slice.js +0 -2
  1433. package/dist/src/voice/stt/factory.js +0 -2
  1434. package/dist/src/voice/stt/index.js +0 -2
  1435. package/dist/src/voice/stt/list-providers.js +0 -2
  1436. package/dist/src/voice/stt/mention.js +0 -2
  1437. package/dist/src/voice/stt/preflight.js +0 -2
  1438. package/dist/src/voice/stt/providers/alibaba-transcription.js +0 -2
  1439. package/dist/src/voice/stt/providers/local-transcription.js +0 -2
  1440. package/dist/src/voice/stt/providers/openai-transcription.js +0 -2
  1441. package/dist/src/voice/stt/transcribe-core.js +0 -2
  1442. package/dist/src/voice/stt/types.js +0 -2
  1443. package/dist/src/voice/tts/audio.js +0 -2
  1444. package/dist/src/voice/tts/config-slice.js +0 -2
  1445. package/dist/src/voice/tts/directives.js +0 -2
  1446. package/dist/src/voice/tts/factory.js +0 -2
  1447. package/dist/src/voice/tts/list-providers.js +0 -2
  1448. package/dist/src/voice/tts/merge-config.js +0 -2
  1449. package/dist/src/voice/tts/openai-compatible-speech.js +0 -2
  1450. package/dist/src/voice/tts/payload.js +0 -2
  1451. package/dist/src/voice/tts/preprocess.js +0 -2
  1452. package/dist/src/voice/tts/providers/alibaba-speech.js +0 -2
  1453. package/dist/src/voice/tts/providers/edge-speech.js +0 -2
  1454. package/dist/src/voice/tts/providers/minimax-speech.js +0 -2
  1455. package/dist/src/voice/tts/providers/openai-speech.js +0 -2
  1456. package/dist/src/voice/tts/sentence-boundary.js +0 -2
  1457. package/dist/src/voice/tts/service.js +0 -2
  1458. package/dist/src/voice/tts/speak-core.js +0 -2
  1459. package/dist/src/voice/tts/speech-registry.js +0 -2
  1460. package/dist/src/voice/tts/status-tracker.js +0 -2
  1461. package/dist/src/voice/tts/summarize.js +0 -2
  1462. package/dist/src/voice/tts/types.js +0 -2
  1463. package/dist/src/work-discovery/analyzer.js +0 -2
  1464. package/dist/src/work-discovery/probe.js +0 -2
  1465. package/dist/src/work-discovery/repository.js +0 -2
  1466. package/dist/src/work-discovery/service.js +0 -2
  1467. package/dist/src/work-items/agent-context.js +0 -2
  1468. package/dist/src/work-items/work-item-service.js +0 -2
  1469. package/dist/src/work-items/work-item-store.js +0 -2
  1470. package/dist/src/work-items/work-item-workflow-judge.js +0 -2
  1471. package/dist/src/workflows/authoring/workflow-draft-store.js +0 -2
  1472. package/dist/src/workflows/domain/definition-utils.js +0 -2
  1473. package/dist/src/workflows/domain/run.js +0 -2
  1474. package/dist/src/workflows/domain/schema-validation.js +0 -2
  1475. package/dist/src/workflows/domain/validation.js +0 -2
  1476. package/dist/src/workflows/draft/workflow-draft-prompt.js +0 -2
  1477. package/dist/src/workflows/draft/workflow-draft-service.js +0 -2
  1478. package/dist/src/workflows/draft/workflow-draft-validator.js +0 -2
  1479. package/dist/src/workflows/engine/projector.js +0 -2
  1480. package/dist/src/workflows/engine/workflow-engine.js +0 -2
  1481. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +0 -2
  1482. package/dist/src/workflows/runtime/graph-workflow-runtime.js +0 -2
  1483. package/dist/src/workflows/service/run-view-to-snapshot.js +0 -2
  1484. package/dist/src/workflows/service/workflow-run-service.js +1 -3
  1485. package/dist/src/workflows/service/workflow-session-bridge.js +0 -2
  1486. package/dist/src/workflows/service/workflow-session-key.js +0 -2
  1487. package/dist/src/workflows/store/event-store.js +0 -2
  1488. package/dist/src/workflows/store/paths.js +0 -2
  1489. package/dist/src/workflows/store/run-index-store.js +0 -2
  1490. package/dist/src/workflows/store/run-store.js +0 -2
  1491. package/package.json +43 -12
  1492. package/skills/creative/hatch-pet/SKILL.md +1 -0
  1493. package/dist/extensions/dashscope/src/image-generation-provider.js.map +0 -1
  1494. package/dist/extensions/demo-memory/src/index.js.map +0 -1
  1495. package/dist/extensions/fal/src/image-generation-provider.js.map +0 -1
  1496. package/dist/extensions/feishu/src/actions/message-action-handler.js.map +0 -1
  1497. package/dist/extensions/feishu/src/adapters/cli-login.js.map +0 -1
  1498. package/dist/extensions/feishu/src/adapters/gateway-setup.js.map +0 -1
  1499. package/dist/extensions/feishu/src/adapters/onboard-cli.js.map +0 -1
  1500. package/dist/extensions/feishu/src/auth/app-registration.js.map +0 -1
  1501. package/dist/extensions/feishu/src/auth/pairing.js.map +0 -1
  1502. package/dist/extensions/feishu/src/auth/paths.js.map +0 -1
  1503. package/dist/extensions/feishu/src/directory/directory-adapter.js.map +0 -1
  1504. package/dist/extensions/feishu/src/format.js.map +0 -1
  1505. package/dist/extensions/feishu/src/index.js.map +0 -1
  1506. package/dist/extensions/feishu/src/outbound/actions.js.map +0 -1
  1507. package/dist/extensions/feishu/src/outbound/media-load.js.map +0 -1
  1508. package/dist/extensions/feishu/src/outbound/outbound-adapter.js.map +0 -1
  1509. package/dist/extensions/feishu/src/pairing/feishu-pairing-prompt.js.map +0 -1
  1510. package/dist/extensions/feishu/src/pairing-config-resolver.js.map +0 -1
  1511. package/dist/extensions/feishu/src/plugin.js.map +0 -1
  1512. package/dist/extensions/feishu/src/schema/config-schema.js.map +0 -1
  1513. package/dist/extensions/feishu/src/state/accounts.js.map +0 -1
  1514. package/dist/extensions/feishu/src/state/message-bindings.js.map +0 -1
  1515. package/dist/extensions/feishu/src/state/thread-bindings.js.map +0 -1
  1516. package/dist/extensions/feishu/src/status/doctor.js.map +0 -1
  1517. package/dist/extensions/feishu/src/status/status-adapter.js.map +0 -1
  1518. package/dist/extensions/feishu/src/streaming/streaming-adapter.js.map +0 -1
  1519. package/dist/extensions/feishu/src/subagent-hooks.js.map +0 -1
  1520. package/dist/extensions/feishu/src/tools/docx/docx-batch-insert.js.map +0 -1
  1521. package/dist/extensions/feishu/src/tools/docx/docx-color-text.js.map +0 -1
  1522. package/dist/extensions/feishu/src/tools/docx/docx-table-ops.js.map +0 -1
  1523. package/dist/extensions/feishu/src/tools/tools.js.map +0 -1
  1524. package/dist/extensions/feishu/src/transport/client/client.js.map +0 -1
  1525. package/dist/extensions/feishu/src/transport/client/lark-sdk-logger.js.map +0 -1
  1526. package/dist/extensions/feishu/src/transport/reliability/dedupe.js.map +0 -1
  1527. package/dist/extensions/feishu/src/transport/reliability/inbound-pipeline.js.map +0 -1
  1528. package/dist/extensions/feishu/src/transport/socket-mode/monitor.js.map +0 -1
  1529. package/dist/extensions/feishu/src/transport/socket-mode/retry.js.map +0 -1
  1530. package/dist/extensions/feishu/src/transport/text/mentions.js.map +0 -1
  1531. package/dist/extensions/feishu/src/transport/webhook/monitor.js.map +0 -1
  1532. package/dist/extensions/feishu/src/ui/config-surface.js.map +0 -1
  1533. package/dist/extensions/feishu/src/workflow-progress.js.map +0 -1
  1534. package/dist/extensions/google/src/image-generation-provider.js.map +0 -1
  1535. package/dist/extensions/minimax/src/image-generation-provider.js.map +0 -1
  1536. package/dist/extensions/openai/src/image-generation-provider.js.map +0 -1
  1537. package/dist/extensions/telegram/src/access-control.js.map +0 -1
  1538. package/dist/extensions/telegram/src/account-manager.js.map +0 -1
  1539. package/dist/extensions/telegram/src/actions/message-actions.js.map +0 -1
  1540. package/dist/extensions/telegram/src/adapters/command-adapter.js.map +0 -1
  1541. package/dist/extensions/telegram/src/adapters/config-adapter.js.map +0 -1
  1542. package/dist/extensions/telegram/src/adapters/debounce-keys.js.map +0 -1
  1543. package/dist/extensions/telegram/src/adapters/gateway-adapter.js.map +0 -1
  1544. package/dist/extensions/telegram/src/adapters/gateway-setup.js.map +0 -1
  1545. package/dist/extensions/telegram/src/adapters/inbound-access.js.map +0 -1
  1546. package/dist/extensions/telegram/src/adapters/index.js.map +0 -1
  1547. package/dist/extensions/telegram/src/adapters/onboard-cli.js.map +0 -1
  1548. package/dist/extensions/telegram/src/adapters/outbound-adapter.js.map +0 -1
  1549. package/dist/extensions/telegram/src/adapters/security-adapter.js.map +0 -1
  1550. package/dist/extensions/telegram/src/adapters/setup-wizard.js.map +0 -1
  1551. package/dist/extensions/telegram/src/adapters/status-adapter.js.map +0 -1
  1552. package/dist/extensions/telegram/src/adapters/streaming-adapter.js.map +0 -1
  1553. package/dist/extensions/telegram/src/api-root.js.map +0 -1
  1554. package/dist/extensions/telegram/src/approval-delivery.js.map +0 -1
  1555. package/dist/extensions/telegram/src/approval-store.js.map +0 -1
  1556. package/dist/extensions/telegram/src/caption.js.map +0 -1
  1557. package/dist/extensions/telegram/src/command-handler.js.map +0 -1
  1558. package/dist/extensions/telegram/src/config-schema.js.map +0 -1
  1559. package/dist/extensions/telegram/src/conversation-id.js.map +0 -1
  1560. package/dist/extensions/telegram/src/dedupe.js.map +0 -1
  1561. package/dist/extensions/telegram/src/delivery-chat-id.js.map +0 -1
  1562. package/dist/extensions/telegram/src/doctor.js.map +0 -1
  1563. package/dist/extensions/telegram/src/draft-stream-lifecycle.js.map +0 -1
  1564. package/dist/extensions/telegram/src/draft-stream-loop.js.map +0 -1
  1565. package/dist/extensions/telegram/src/draft-stream.js.map +0 -1
  1566. package/dist/extensions/telegram/src/errors.js.map +0 -1
  1567. package/dist/extensions/telegram/src/exec-approval-handler.js.map +0 -1
  1568. package/dist/extensions/telegram/src/exec-approvals.js.map +0 -1
  1569. package/dist/extensions/telegram/src/focus-handler.js.map +0 -1
  1570. package/dist/extensions/telegram/src/format.js.map +0 -1
  1571. package/dist/extensions/telegram/src/group-config-resolver.js.map +0 -1
  1572. package/dist/extensions/telegram/src/inbound-coalescer.js.map +0 -1
  1573. package/dist/extensions/telegram/src/inbound-processor.js.map +0 -1
  1574. package/dist/extensions/telegram/src/index.js.map +0 -1
  1575. package/dist/extensions/telegram/src/inline-keyboards.js.map +0 -1
  1576. package/dist/extensions/telegram/src/network-errors.js.map +0 -1
  1577. package/dist/extensions/telegram/src/outbound-sender.js.map +0 -1
  1578. package/dist/extensions/telegram/src/pairing-config-resolver.js.map +0 -1
  1579. package/dist/extensions/telegram/src/plugin-defaults.js.map +0 -1
  1580. package/dist/extensions/telegram/src/plugin.js.map +0 -1
  1581. package/dist/extensions/telegram/src/polling-session.js.map +0 -1
  1582. package/dist/extensions/telegram/src/proxy-fetch.js.map +0 -1
  1583. package/dist/extensions/telegram/src/reactions.js.map +0 -1
  1584. package/dist/extensions/telegram/src/reply-params.js.map +0 -1
  1585. package/dist/extensions/telegram/src/routing-integration.js.map +0 -1
  1586. package/dist/extensions/telegram/src/send-options.js.map +0 -1
  1587. package/dist/extensions/telegram/src/sent-cache.js.map +0 -1
  1588. package/dist/extensions/telegram/src/startup-errors.js.map +0 -1
  1589. package/dist/extensions/telegram/src/telegram-actions.js.map +0 -1
  1590. package/dist/extensions/telegram/src/telegram-draft-errors.js.map +0 -1
  1591. package/dist/extensions/telegram/src/thread-bindings.js.map +0 -1
  1592. package/dist/extensions/telegram/src/timeout-abort.js.map +0 -1
  1593. package/dist/extensions/telegram/src/token-resolver.js.map +0 -1
  1594. package/dist/extensions/telegram/src/update-offset-store.js.map +0 -1
  1595. package/dist/extensions/telegram/src/workflow-progress.js.map +0 -1
  1596. package/dist/extensions/weixin/src/adapters/onboard-cli.js.map +0 -1
  1597. package/dist/extensions/weixin/src/api/api.js.map +0 -1
  1598. package/dist/extensions/weixin/src/api/config-cache.js.map +0 -1
  1599. package/dist/extensions/weixin/src/api/session-guard.js.map +0 -1
  1600. package/dist/extensions/weixin/src/api/types.js.map +0 -1
  1601. package/dist/extensions/weixin/src/auth/accounts.js.map +0 -1
  1602. package/dist/extensions/weixin/src/auth/login-qr.js.map +0 -1
  1603. package/dist/extensions/weixin/src/auth/pairing.js.map +0 -1
  1604. package/dist/extensions/weixin/src/auth/weixin-account-id.js.map +0 -1
  1605. package/dist/extensions/weixin/src/cdn/aes-ecb.js.map +0 -1
  1606. package/dist/extensions/weixin/src/cdn/cdn-upload.js.map +0 -1
  1607. package/dist/extensions/weixin/src/cdn/cdn-url.js.map +0 -1
  1608. package/dist/extensions/weixin/src/cdn/pic-decrypt.js.map +0 -1
  1609. package/dist/extensions/weixin/src/cdn/upload.js.map +0 -1
  1610. package/dist/extensions/weixin/src/cli/gateway-qr-login.js.map +0 -1
  1611. package/dist/extensions/weixin/src/cli/qr-login.js.map +0 -1
  1612. package/dist/extensions/weixin/src/config-schema.js.map +0 -1
  1613. package/dist/extensions/weixin/src/config-surface.js.map +0 -1
  1614. package/dist/extensions/weixin/src/delivery-to.js.map +0 -1
  1615. package/dist/extensions/weixin/src/index.js.map +0 -1
  1616. package/dist/extensions/weixin/src/media/data-url.js.map +0 -1
  1617. package/dist/extensions/weixin/src/media/media-download.js.map +0 -1
  1618. package/dist/extensions/weixin/src/media/mime.js.map +0 -1
  1619. package/dist/extensions/weixin/src/media/silk-transcode.js.map +0 -1
  1620. package/dist/extensions/weixin/src/messaging/context-token-init.js.map +0 -1
  1621. package/dist/extensions/weixin/src/messaging/debug-mode.js.map +0 -1
  1622. package/dist/extensions/weixin/src/messaging/error-notice.js.map +0 -1
  1623. package/dist/extensions/weixin/src/messaging/inbound.js.map +0 -1
  1624. package/dist/extensions/weixin/src/messaging/markdown-filter.js.map +0 -1
  1625. package/dist/extensions/weixin/src/messaging/process-message.js.map +0 -1
  1626. package/dist/extensions/weixin/src/messaging/send-media.js.map +0 -1
  1627. package/dist/extensions/weixin/src/messaging/send.js.map +0 -1
  1628. package/dist/extensions/weixin/src/messaging/slash-commands.js.map +0 -1
  1629. package/dist/extensions/weixin/src/messaging/typing-ticket-store.js.map +0 -1
  1630. package/dist/extensions/weixin/src/monitor/monitor.js.map +0 -1
  1631. package/dist/extensions/weixin/src/outbound-send.js.map +0 -1
  1632. package/dist/extensions/weixin/src/pairing-config-resolver.js.map +0 -1
  1633. package/dist/extensions/weixin/src/plugin.js.map +0 -1
  1634. package/dist/extensions/weixin/src/routing-integration.js.map +0 -1
  1635. package/dist/extensions/weixin/src/storage/state-dir.js.map +0 -1
  1636. package/dist/extensions/weixin/src/storage/sync-buf.js.map +0 -1
  1637. package/dist/extensions/weixin/src/util/logger.js.map +0 -1
  1638. package/dist/extensions/weixin/src/util/random.js.map +0 -1
  1639. package/dist/extensions/weixin/src/util/redact.js.map +0 -1
  1640. package/dist/extensions/weixin/src/workflow-progress.js.map +0 -1
  1641. package/dist/gateway/static/root/assets/agents-DZDOcgz5.js +0 -2
  1642. package/dist/gateway/static/root/assets/appearance-settings-BNasnY9D.js +0 -1
  1643. package/dist/gateway/static/root/assets/apps-page-Cmr-Hvm9.js +0 -1
  1644. package/dist/gateway/static/root/assets/automations-page-TWgUAI8t.js +0 -6
  1645. package/dist/gateway/static/root/assets/browser-settings-page-DBsFItW_.js +0 -8
  1646. package/dist/gateway/static/root/assets/channels-settings-BBkzrBYy.js +0 -1
  1647. package/dist/gateway/static/root/assets/channels-status-swr-CuU6ez3y.js +0 -1
  1648. package/dist/gateway/static/root/assets/connectors-page-DLsZCAw7.js +0 -2
  1649. package/dist/gateway/static/root/assets/desktop-pet-C6V-PHwi.js +0 -1
  1650. package/dist/gateway/static/root/assets/desktop-pet-settings-5Fcz47XQ.js +0 -1
  1651. package/dist/gateway/static/root/assets/gateway-settings-BrxzyVW2.js +0 -1
  1652. package/dist/gateway/static/root/assets/goal-create-dialog-DRVRLc5Z.js +0 -1
  1653. package/dist/gateway/static/root/assets/goal-detail-page-8F7NElzP.js +0 -4
  1654. package/dist/gateway/static/root/assets/goals-page-BaoLiV8G.js +0 -2
  1655. package/dist/gateway/static/root/assets/index-CH7XN6KY.js +0 -259
  1656. package/dist/gateway/static/root/assets/index-Dfnl9tp_.css +0 -1
  1657. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-BHnh5OoY.js +0 -1
  1658. package/dist/gateway/static/root/assets/local-app-workbench-page-Boe8n4zH.js +0 -2
  1659. package/dist/gateway/static/root/assets/locale-store-BneNAR8R.js +0 -1
  1660. package/dist/gateway/static/root/assets/logs-page-Cb4Uptct.js +0 -7
  1661. package/dist/gateway/static/root/assets/messages-t1yPaVCt.js +0 -5
  1662. package/dist/gateway/static/root/assets/models-hub-panel-CNiUKZUV.js +0 -2
  1663. package/dist/gateway/static/root/assets/notes-workbench-C9__VkD6.js +0 -4
  1664. package/dist/gateway/static/root/assets/project-detail-page-CZhuB5kO.js +0 -1
  1665. package/dist/gateway/static/root/assets/projects-page-BOq4WVdR.js +0 -1
  1666. package/dist/gateway/static/root/assets/remote-access-hub-BxGq0ebQ.js +0 -1
  1667. package/dist/gateway/static/root/assets/sessions-page-B6gSU_Au.js +0 -1
  1668. package/dist/gateway/static/root/assets/settings-advanced-gate-DwuBL834.js +0 -1
  1669. package/dist/gateway/static/root/assets/settings-loading-skeleton-vitElc-n.js +0 -1
  1670. package/dist/gateway/static/root/assets/setup-status-panel-BJeA4mmk.js +0 -1
  1671. package/dist/gateway/static/root/assets/shares-settings-DB2KYA2_.js +0 -1
  1672. package/dist/gateway/static/root/assets/skill-reload-api-DQtZiejw.js +0 -1
  1673. package/dist/gateway/static/root/assets/skills-page-Pm0fNe_p.js +0 -2
  1674. package/dist/gateway/static/root/assets/user-context-page-DnLqQyRG.js +0 -1
  1675. package/dist/gateway/static/root/assets/voice-api-key-field-BiFIIWC4.js +0 -1
  1676. package/dist/gateway/static/root/assets/work-discovery-page-D2-_bC0J.js +0 -1
  1677. package/dist/gateway/static/root/assets/work-item-detail-page-B0FPG4eJ.js +0 -1
  1678. package/dist/gateway/static/root/assets/work-page-BDeVxts_.js +0 -1
  1679. package/dist/gateway/static/root/assets/workflow-run-setup-panel-BPzS67fU.js +0 -3
  1680. package/dist/gateway/static/root/assets/workflows-page-xPhmrRLs.js +0 -11
  1681. package/dist/gateway/static/root/favicon-icon.svg +0 -187
  1682. package/dist/package.js.map +0 -1
  1683. package/dist/src/activity/context.js.map +0 -1
  1684. package/dist/src/activity/emitter.js.map +0 -1
  1685. package/dist/src/activity/service.js.map +0 -1
  1686. package/dist/src/agent/agent-manager.js.map +0 -1
  1687. package/dist/src/agent/agent-scope.js.map +0 -1
  1688. package/dist/src/agent/background-review/coordinator.js.map +0 -1
  1689. package/dist/src/agent/background-review/prompts.js.map +0 -1
  1690. package/dist/src/agent/background-review/run-background-review.js.map +0 -1
  1691. package/dist/src/agent/background-review/settings.js.map +0 -1
  1692. package/dist/src/agent/bootstrap/bootstrap-cache.js.map +0 -1
  1693. package/dist/src/agent/bootstrap/bootstrap-context.js.map +0 -1
  1694. package/dist/src/agent/bootstrap/bootstrap-files.js.map +0 -1
  1695. package/dist/src/agent/bootstrap/filter-bootstrap-files.js.map +0 -1
  1696. package/dist/src/agent/bootstrap/load-bootstrap-files.js.map +0 -1
  1697. package/dist/src/agent/bootstrap/project-agents-context.js.map +0 -1
  1698. package/dist/src/agent/capabilities/definitions.js.map +0 -1
  1699. package/dist/src/agent/capabilities/registry.js.map +0 -1
  1700. package/dist/src/agent/child-agent-factory.js.map +0 -1
  1701. package/dist/src/agent/client-error-format.js.map +0 -1
  1702. package/dist/src/agent/code-intelligence/binary.js.map +0 -1
  1703. package/dist/src/agent/code-intelligence/runtime.js.map +0 -1
  1704. package/dist/src/agent/code-intelligence/tools.js.map +0 -1
  1705. package/dist/src/agent/coding/turn-diff-tracker.js.map +0 -1
  1706. package/dist/src/agent/context/expand-at-file-mentions.js.map +0 -1
  1707. package/dist/src/agent/context/project-context.js.map +0 -1
  1708. package/dist/src/agent/context/workspace-seed.js.map +0 -1
  1709. package/dist/src/agent/context/workspace-state.js.map +0 -1
  1710. package/dist/src/agent/context/workspace.js.map +0 -1
  1711. package/dist/src/agent/embedded/run-for-session.js.map +0 -1
  1712. package/dist/src/agent/embedded/run-turn.js.map +0 -1
  1713. package/dist/src/agent/embedded/runs.js.map +0 -1
  1714. package/dist/src/agent/embedded/session-manager-init.js.map +0 -1
  1715. package/dist/src/agent/embedded/session-runner.js.map +0 -1
  1716. package/dist/src/agent/embedded/session-tool-result-guard.js.map +0 -1
  1717. package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js.map +0 -1
  1718. package/dist/src/agent/embedded/subscribe-session.js.map +0 -1
  1719. package/dist/src/agent/embedded/system-prompt-override.js.map +0 -1
  1720. package/dist/src/agent/embedded/tool-result-context-guard.js.map +0 -1
  1721. package/dist/src/agent/embedded/tool-result-truncation.js.map +0 -1
  1722. package/dist/src/agent/embedded/xopc-auth-storage.js.map +0 -1
  1723. package/dist/src/agent/embedded/xopc-stream-bridge.js.map +0 -1
  1724. package/dist/src/agent/embedded/xopc-tools-bridge.js.map +0 -1
  1725. package/dist/src/agent/failover-error.js.map +0 -1
  1726. package/dist/src/agent/fallback/candidates.js.map +0 -1
  1727. package/dist/src/agent/fallback/reason.js.map +0 -1
  1728. package/dist/src/agent/feedback/feedback-coordinator.js.map +0 -1
  1729. package/dist/src/agent/goals/checklist-judge.js.map +0 -1
  1730. package/dist/src/agent/goals/checklist-types.js.map +0 -1
  1731. package/dist/src/agent/goals/evaluate-turn.js.map +0 -1
  1732. package/dist/src/agent/goals/goal-locale.js.map +0 -1
  1733. package/dist/src/agent/goals/judge.js.map +0 -1
  1734. package/dist/src/agent/goals/persistent-goal-service.js.map +0 -1
  1735. package/dist/src/agent/goals/post-turn.js.map +0 -1
  1736. package/dist/src/agent/goals/state.js.map +0 -1
  1737. package/dist/src/agent/image/generation/bundled-registry.js.map +0 -1
  1738. package/dist/src/agent/image/generation/bundled.js.map +0 -1
  1739. package/dist/src/agent/image/generation/image-assets.js.map +0 -1
  1740. package/dist/src/agent/image/generation/model-ref.js.map +0 -1
  1741. package/dist/src/agent/image/generation/normalization.js.map +0 -1
  1742. package/dist/src/agent/image/generation/openai-compatible-image-provider.js.map +0 -1
  1743. package/dist/src/agent/image/generation/provider-registry.js.map +0 -1
  1744. package/dist/src/agent/image/generation/runtime.js.map +0 -1
  1745. package/dist/src/agent/image/image-helpers.js.map +0 -1
  1746. package/dist/src/agent/image/image-model-fallback.js.map +0 -1
  1747. package/dist/src/agent/image/inbound-image-handling.js.map +0 -1
  1748. package/dist/src/agent/image/load-image-media.js.map +0 -1
  1749. package/dist/src/agent/image/tool-model-config.js.map +0 -1
  1750. package/dist/src/agent/image/understanding/pi-ai-provider.js.map +0 -1
  1751. package/dist/src/agent/image/understanding/provider-registry.js.map +0 -1
  1752. package/dist/src/agent/image/understanding/runtime.js.map +0 -1
  1753. package/dist/src/agent/image/vision-detection.js.map +0 -1
  1754. package/dist/src/agent/inbound/attachment-pipeline.js.map +0 -1
  1755. package/dist/src/agent/inbound/inbound-loop.js.map +0 -1
  1756. package/dist/src/agent/inbound/turn-dispatcher.js.map +0 -1
  1757. package/dist/src/agent/ipc/bus.js.map +0 -1
  1758. package/dist/src/agent/ipc/inbox.js.map +0 -1
  1759. package/dist/src/agent/ipc/socket.js.map +0 -1
  1760. package/dist/src/agent/ipc/types.js.map +0 -1
  1761. package/dist/src/agent/lifecycle/handlers/compaction.js.map +0 -1
  1762. package/dist/src/agent/lifecycle/hook-handler.js.map +0 -1
  1763. package/dist/src/agent/lifecycle/manager.js.map +0 -1
  1764. package/dist/src/agent/lifecycle/progress.js.map +0 -1
  1765. package/dist/src/agent/lifecycle/timeout-wrapper.js.map +0 -1
  1766. package/dist/src/agent/lifecycle/typing.js.map +0 -1
  1767. package/dist/src/agent/mcp/bundle-mcp-config.js.map +0 -1
  1768. package/dist/src/agent/mcp/bundle-mcp-materialize.js.map +0 -1
  1769. package/dist/src/agent/mcp/bundle-mcp-names.js.map +0 -1
  1770. package/dist/src/agent/mcp/bundle-mcp-policy.js.map +0 -1
  1771. package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +0 -1
  1772. package/dist/src/agent/mcp/embedded-mcp.js.map +0 -1
  1773. package/dist/src/agent/mcp/mcp-config-shared.js.map +0 -1
  1774. package/dist/src/agent/mcp/mcp-http.js.map +0 -1
  1775. package/dist/src/agent/mcp/mcp-stdio-transport.js.map +0 -1
  1776. package/dist/src/agent/mcp/mcp-stdio.js.map +0 -1
  1777. package/dist/src/agent/mcp/mcp-tool-meta.js.map +0 -1
  1778. package/dist/src/agent/mcp/mcp-transport-config.js.map +0 -1
  1779. package/dist/src/agent/mcp/mcp-transport.js.map +0 -1
  1780. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js.map +0 -1
  1781. package/dist/src/agent/media-generation/model-ref.js.map +0 -1
  1782. package/dist/src/agent/media-generation/normalization.types.js.map +0 -1
  1783. package/dist/src/agent/media-generation/runtime-shared.js.map +0 -1
  1784. package/dist/src/agent/memory/agent-message-access.js.map +0 -1
  1785. package/dist/src/agent/memory/builtin-memory-store.js.map +0 -1
  1786. package/dist/src/agent/memory/builtin-provider.js.map +0 -1
  1787. package/dist/src/agent/memory/compaction.js.map +0 -1
  1788. package/dist/src/agent/memory/context/planner.js.map +0 -1
  1789. package/dist/src/agent/memory/context-fence.js.map +0 -1
  1790. package/dist/src/agent/memory/create-memory-manager.js.map +0 -1
  1791. package/dist/src/agent/memory/dreaming/config.js.map +0 -1
  1792. package/dist/src/agent/memory/dreaming/constants.js.map +0 -1
  1793. package/dist/src/agent/memory/dreaming/deep-promotion.js.map +0 -1
  1794. package/dist/src/agent/memory/dreaming/events.js.map +0 -1
  1795. package/dist/src/agent/memory/dreaming/last-run.js.map +0 -1
  1796. package/dist/src/agent/memory/dreaming/light-sweep.js.map +0 -1
  1797. package/dist/src/agent/memory/dreaming/preview.js.map +0 -1
  1798. package/dist/src/agent/memory/dreaming/promotion-lifecycle.js.map +0 -1
  1799. package/dist/src/agent/memory/dreaming/rem-patterns.js.map +0 -1
  1800. package/dist/src/agent/memory/dreaming/scope.js.map +0 -1
  1801. package/dist/src/agent/memory/dreaming/short-term-store.js.map +0 -1
  1802. package/dist/src/agent/memory/dreaming/utils.js.map +0 -1
  1803. package/dist/src/agent/memory/lifecycle.js.map +0 -1
  1804. package/dist/src/agent/memory/manager.js.map +0 -1
  1805. package/dist/src/agent/memory/memory-config.js.map +0 -1
  1806. package/dist/src/agent/memory/message-sanitizer.js.map +0 -1
  1807. package/dist/src/agent/memory/plugin-discovery.js.map +0 -1
  1808. package/dist/src/agent/memory/sensitivity.js.map +0 -1
  1809. package/dist/src/agent/memory/source-origin.js.map +0 -1
  1810. package/dist/src/agent/memory/stub-memory-provider.js.map +0 -1
  1811. package/dist/src/agent/memory/summary-generator.js.map +0 -1
  1812. package/dist/src/agent/memory/understanding/correction.js.map +0 -1
  1813. package/dist/src/agent/memory/understanding/quality.js.map +0 -1
  1814. package/dist/src/agent/memory/understanding/service.js.map +0 -1
  1815. package/dist/src/agent/memory/user-context-coordinator.js.map +0 -1
  1816. package/dist/src/agent/memory/user-message-text.js.map +0 -1
  1817. package/dist/src/agent/memory/window.js.map +0 -1
  1818. package/dist/src/agent/messaging/command-handler.js.map +0 -1
  1819. package/dist/src/agent/messaging/message-router.js.map +0 -1
  1820. package/dist/src/agent/messaging/outbound-coordinator.js.map +0 -1
  1821. package/dist/src/agent/messaging/stream-manager.js.map +0 -1
  1822. package/dist/src/agent/middleware/context.js.map +0 -1
  1823. package/dist/src/agent/middleware/self-verify.js.map +0 -1
  1824. package/dist/src/agent/models/manager.js.map +0 -1
  1825. package/dist/src/agent/models/request-limiter.js.map +0 -1
  1826. package/dist/src/agent/models/selection.js.map +0 -1
  1827. package/dist/src/agent/orchestration/agent-event-handler.js.map +0 -1
  1828. package/dist/src/agent/orchestration/agent-orchestrator.js.map +0 -1
  1829. package/dist/src/agent/orchestration/llm-turn-retry.js.map +0 -1
  1830. package/dist/src/agent/orchestration/loop-guard.js.map +0 -1
  1831. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js.map +0 -1
  1832. package/dist/src/agent/prompt/cache-boundary.js.map +0 -1
  1833. package/dist/src/agent/prompt/memory/index.js.map +0 -1
  1834. package/dist/src/agent/prompt/safety.js.map +0 -1
  1835. package/dist/src/agent/prompt/sanitize-for-prompt.js.map +0 -1
  1836. package/dist/src/agent/prompt/sections/behavior.js.map +0 -1
  1837. package/dist/src/agent/prompt/sections/memory-skills.js.map +0 -1
  1838. package/dist/src/agent/prompt/sections/messaging-runtime.js.map +0 -1
  1839. package/dist/src/agent/prompt/sections/project-context.js.map +0 -1
  1840. package/dist/src/agent/prompt/sections/tooling.js.map +0 -1
  1841. package/dist/src/agent/prompt/sections/workspace-runtime.js.map +0 -1
  1842. package/dist/src/agent/prompt/service-prompt-builder.js.map +0 -1
  1843. package/dist/src/agent/prompt/subagent-context.js.map +0 -1
  1844. package/dist/src/agent/prompt/system-prompt-params.js.map +0 -1
  1845. package/dist/src/agent/prompt/system-prompt.js.map +0 -1
  1846. package/dist/src/agent/prompt/system-reminder.js.map +0 -1
  1847. package/dist/src/agent/reply/apply-turn-user-enrichment.js.map +0 -1
  1848. package/dist/src/agent/reply/post-compaction-context.js.map +0 -1
  1849. package/dist/src/agent/reply/startup-context.js.map +0 -1
  1850. package/dist/src/agent/reply/workspace-boundary-read.js.map +0 -1
  1851. package/dist/src/agent/sandbox/command-validator.js.map +0 -1
  1852. package/dist/src/agent/sandbox/exec-policy.js.map +0 -1
  1853. package/dist/src/agent/sandbox/path-policy.js.map +0 -1
  1854. package/dist/src/agent/sandbox/sanitize-env-vars.js.map +0 -1
  1855. package/dist/src/agent/sandbox/types.js.map +0 -1
  1856. package/dist/src/agent/service/async-queue.js.map +0 -1
  1857. package/dist/src/agent/service/btw-query.js.map +0 -1
  1858. package/dist/src/agent/service/build-direct-message-content.js.map +0 -1
  1859. package/dist/src/agent/service/direct-turn-helpers.js.map +0 -1
  1860. package/dist/src/agent/service/parse-outbound-session-key.js.map +0 -1
  1861. package/dist/src/agent/service/process-direct-one-shot.js.map +0 -1
  1862. package/dist/src/agent/service/process-direct-streaming.js.map +0 -1
  1863. package/dist/src/agent/service/session-context-report.js.map +0 -1
  1864. package/dist/src/agent/service/webchat-tts.js.map +0 -1
  1865. package/dist/src/agent/service-inbound-utils.js.map +0 -1
  1866. package/dist/src/agent/service.js.map +0 -1
  1867. package/dist/src/agent/session/session-config-service.js.map +0 -1
  1868. package/dist/src/agent/session/session-context.js.map +0 -1
  1869. package/dist/src/agent/session/session-hydrator.js.map +0 -1
  1870. package/dist/src/agent/session/session-inspector.js.map +0 -1
  1871. package/dist/src/agent/session/session-lifecycle.js.map +0 -1
  1872. package/dist/src/agent/session/session-state-bag.js.map +0 -1
  1873. package/dist/src/agent/session/tracker.js.map +0 -1
  1874. package/dist/src/agent/skills/config.js.map +0 -1
  1875. package/dist/src/agent/skills/filesystem-watcher.js.map +0 -1
  1876. package/dist/src/agent/skills/format-skills-prompt.js.map +0 -1
  1877. package/dist/src/agent/skills/hub-hash.js.map +0 -1
  1878. package/dist/src/agent/skills/hub-lock.js.map +0 -1
  1879. package/dist/src/agent/skills/hub-pull.js.map +0 -1
  1880. package/dist/src/agent/skills/index.js.map +0 -1
  1881. package/dist/src/agent/skills/install-target.js.map +0 -1
  1882. package/dist/src/agent/skills/installer.js.map +0 -1
  1883. package/dist/src/agent/skills/managed-store.js.map +0 -1
  1884. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js.map +0 -1
  1885. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +0 -1
  1886. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js.map +0 -1
  1887. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js.map +0 -1
  1888. package/dist/src/agent/skills/marketplace/marketplace-category-order.js.map +0 -1
  1889. package/dist/src/agent/skills/marketplace/registry.js.map +0 -1
  1890. package/dist/src/agent/skills/marketplace/resolve-adapter.js.map +0 -1
  1891. package/dist/src/agent/skills/parse-skill-metadata.js.map +0 -1
  1892. package/dist/src/agent/skills/required-env-vars.js.map +0 -1
  1893. package/dist/src/agent/skills/scanner.js.map +0 -1
  1894. package/dist/src/agent/skills/skill-manage-ops.js.map +0 -1
  1895. package/dist/src/agent/skills/skill-manager.js.map +0 -1
  1896. package/dist/src/agent/skills/skill-markdown-preview-from-raw.js.map +0 -1
  1897. package/dist/src/agent/skills/skill-tool-gating.js.map +0 -1
  1898. package/dist/src/agent/skills/skill-view-path.js.map +0 -1
  1899. package/dist/src/agent/skills/skills-marketplace.js.map +0 -1
  1900. package/dist/src/agent/skills/test-framework.js.map +0 -1
  1901. package/dist/src/agent/skills/watcher.js.map +0 -1
  1902. package/dist/src/agent/skills/workspace-skills-dir.js.map +0 -1
  1903. package/dist/src/agent/source-context/injector.js.map +0 -1
  1904. package/dist/src/agent/source-context/types.js.map +0 -1
  1905. package/dist/src/agent/starter-agents.js.map +0 -1
  1906. package/dist/src/agent/streaming/reasoning-visibility-sse.js.map +0 -1
  1907. package/dist/src/agent/tool-manuals/browser.js.map +0 -1
  1908. package/dist/src/agent/tool-manuals/index.js.map +0 -1
  1909. package/dist/src/agent/tool-manuals/xopc-use.js.map +0 -1
  1910. package/dist/src/agent/tools/apply-patch.js.map +0 -1
  1911. package/dist/src/agent/tools/automation-tool.js.map +0 -1
  1912. package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +0 -1
  1913. package/dist/src/agent/tools/browser/tool/schemas.js.map +0 -1
  1914. package/dist/src/agent/tools/chain-tracker.js.map +0 -1
  1915. package/dist/src/agent/tools/clarify-tool.js.map +0 -1
  1916. package/dist/src/agent/tools/cli-clarify.js.map +0 -1
  1917. package/dist/src/agent/tools/communication.js.map +0 -1
  1918. package/dist/src/agent/tools/composio-tool.js.map +0 -1
  1919. package/dist/src/agent/tools/concurrency.js.map +0 -1
  1920. package/dist/src/agent/tools/create-share-tool.js.map +0 -1
  1921. package/dist/src/agent/tools/curated-memory-tool.js.map +0 -1
  1922. package/dist/src/agent/tools/delegate-tool.js.map +0 -1
  1923. package/dist/src/agent/tools/desktop-pet-tool.js.map +0 -1
  1924. package/dist/src/agent/tools/dreaming-tool.js.map +0 -1
  1925. package/dist/src/agent/tools/edit-diff.js.map +0 -1
  1926. package/dist/src/agent/tools/error-pattern-matcher.js.map +0 -1
  1927. package/dist/src/agent/tools/error-tracker.js.map +0 -1
  1928. package/dist/src/agent/tools/exec-command.js.map +0 -1
  1929. package/dist/src/agent/tools/execute-code-tool.js.map +0 -1
  1930. package/dist/src/agent/tools/executor.js.map +0 -1
  1931. package/dist/src/agent/tools/factory.js.map +0 -1
  1932. package/dist/src/agent/tools/find.js.map +0 -1
  1933. package/dist/src/agent/tools/goal-evidence-recorder.js.map +0 -1
  1934. package/dist/src/agent/tools/goal-tool.js.map +0 -1
  1935. package/dist/src/agent/tools/grep.js.map +0 -1
  1936. package/dist/src/agent/tools/image-generate-tool.js.map +0 -1
  1937. package/dist/src/agent/tools/image-tool.js.map +0 -1
  1938. package/dist/src/agent/tools/list-dir.js.map +0 -1
  1939. package/dist/src/agent/tools/media-read-tool.js.map +0 -1
  1940. package/dist/src/agent/tools/memory-tool.js.map +0 -1
  1941. package/dist/src/agent/tools/metadata.js.map +0 -1
  1942. package/dist/src/agent/tools/read.js.map +0 -1
  1943. package/dist/src/agent/tools/search/http.js.map +0 -1
  1944. package/dist/src/agent/tools/search/providers/bing-api.js.map +0 -1
  1945. package/dist/src/agent/tools/search/providers/bing-html.js.map +0 -1
  1946. package/dist/src/agent/tools/search/providers/brave.js.map +0 -1
  1947. package/dist/src/agent/tools/search/providers/duckduckgo-html.js.map +0 -1
  1948. package/dist/src/agent/tools/search/providers/searxng.js.map +0 -1
  1949. package/dist/src/agent/tools/search/providers/tavily.js.map +0 -1
  1950. package/dist/src/agent/tools/search/region.js.map +0 -1
  1951. package/dist/src/agent/tools/search/registry.js.map +0 -1
  1952. package/dist/src/agent/tools/search/resolve-config.js.map +0 -1
  1953. package/dist/src/agent/tools/send-media.js.map +0 -1
  1954. package/dist/src/agent/tools/session-search-tool.js.map +0 -1
  1955. package/dist/src/agent/tools/session-status-tool.js.map +0 -1
  1956. package/dist/src/agent/tools/skill-install-tool.js.map +0 -1
  1957. package/dist/src/agent/tools/skill-manage-tool.js.map +0 -1
  1958. package/dist/src/agent/tools/skills-tools.js.map +0 -1
  1959. package/dist/src/agent/tools/structured-output.js.map +0 -1
  1960. package/dist/src/agent/tools/todo-tool.js.map +0 -1
  1961. package/dist/src/agent/tools/tool-manual-tool.js.map +0 -1
  1962. package/dist/src/agent/tools/tool-paths.js.map +0 -1
  1963. package/dist/src/agent/tools/truncate.js.map +0 -1
  1964. package/dist/src/agent/tools/tts-tool.js.map +0 -1
  1965. package/dist/src/agent/tools/update-plan-tool.js.map +0 -1
  1966. package/dist/src/agent/tools/url-safety.js.map +0 -1
  1967. package/dist/src/agent/tools/usage-analyzer.js.map +0 -1
  1968. package/dist/src/agent/tools/web-extract.js.map +0 -1
  1969. package/dist/src/agent/tools/web.js.map +0 -1
  1970. package/dist/src/agent/tools/workflow-tool.js.map +0 -1
  1971. package/dist/src/agent/tools/write.js.map +0 -1
  1972. package/dist/src/agent/tools/xopc-use-tool.js.map +0 -1
  1973. package/dist/src/agent/transcript/google-api.js.map +0 -1
  1974. package/dist/src/agent/transcript/model-selection.js.map +0 -1
  1975. package/dist/src/agent/transcript/provider-capabilities.js.map +0 -1
  1976. package/dist/src/agent/transcript/session-transcript-repair.js.map +0 -1
  1977. package/dist/src/agent/transcript/strip-tool-messages.js.map +0 -1
  1978. package/dist/src/agent/transcript/thinking-types.js.map +0 -1
  1979. package/dist/src/agent/transcript/thinking.js.map +0 -1
  1980. package/dist/src/agent/transcript/tool-call-id.js.map +0 -1
  1981. package/dist/src/agent/transcript/transcript-hygiene.js.map +0 -1
  1982. package/dist/src/agent/transcript/transcript-policy.js.map +0 -1
  1983. package/dist/src/agent/workflow/agent-progress.js.map +0 -1
  1984. package/dist/src/agent/workflow/builtins/index.js.map +0 -1
  1985. package/dist/src/agent/workflow/catalog.js.map +0 -1
  1986. package/dist/src/agent/workflow/progress-broker.js.map +0 -1
  1987. package/dist/src/agent/workflow/snapshot-empty.js.map +0 -1
  1988. package/dist/src/agent/workflow/snapshot.js.map +0 -1
  1989. package/dist/src/agent/workflow/step-labels.js.map +0 -1
  1990. package/dist/src/agent/workflow/structured-output-tool.js.map +0 -1
  1991. package/dist/src/agent/workflow/subagent-runner.js.map +0 -1
  1992. package/dist/src/agent/workflow/workflow-child-tools.js.map +0 -1
  1993. package/dist/src/agent/workspace-runtime/registry.js.map +0 -1
  1994. package/dist/src/agent-manifest/index.js.map +0 -1
  1995. package/dist/src/agent-manifest/preset-chain.js.map +0 -1
  1996. package/dist/src/agent-manifest/prompt.js.map +0 -1
  1997. package/dist/src/agent-manifest/resolver.js.map +0 -1
  1998. package/dist/src/agent-manifest/schema.js.map +0 -1
  1999. package/dist/src/agent-manifest/validator.js.map +0 -1
  2000. package/dist/src/agent-runtime/boundary-guard.js.map +0 -1
  2001. package/dist/src/agent-runtime/memory-runtime.js.map +0 -1
  2002. package/dist/src/agent-runtime/model-router.js.map +0 -1
  2003. package/dist/src/agent-runtime/run-trace.js.map +0 -1
  2004. package/dist/src/agent-runtime/runtime-profile.js.map +0 -1
  2005. package/dist/src/agent-runtime/tool-registry.js.map +0 -1
  2006. package/dist/src/agent-runtime/workflow-runtime.js.map +0 -1
  2007. package/dist/src/ai-assist/text-assist.js.map +0 -1
  2008. package/dist/src/auth/credentials.js.map +0 -1
  2009. package/dist/src/auth/index.js.map +0 -1
  2010. package/dist/src/auth/oauth/anthropic.js.map +0 -1
  2011. package/dist/src/auth/oauth/github-copilot.js.map +0 -1
  2012. package/dist/src/auth/oauth/google-oauth/google-antigravity.js.map +0 -1
  2013. package/dist/src/auth/oauth/google-oauth/google-gemini-cli.js.map +0 -1
  2014. package/dist/src/auth/oauth/google-oauth/oauth-page.js.map +0 -1
  2015. package/dist/src/auth/oauth/google-oauth/pkce.js.map +0 -1
  2016. package/dist/src/auth/oauth/kimi-coding.js.map +0 -1
  2017. package/dist/src/auth/oauth/minimax-cn.js.map +0 -1
  2018. package/dist/src/auth/oauth/minimax.js.map +0 -1
  2019. package/dist/src/auth/oauth/openai-codex.js.map +0 -1
  2020. package/dist/src/auth/oauth/pkce.js.map +0 -1
  2021. package/dist/src/auth/profiles/oauth.js.map +0 -1
  2022. package/dist/src/auth/profiles/order.js.map +0 -1
  2023. package/dist/src/auth/profiles/profiles.js.map +0 -1
  2024. package/dist/src/auth/profiles/store.js.map +0 -1
  2025. package/dist/src/auth/sync-provider-auth.js.map +0 -1
  2026. package/dist/src/automations/api/routes.js.map +0 -1
  2027. package/dist/src/automations/domain/schedule.js.map +0 -1
  2028. package/dist/src/automations/domain/validation.js.map +0 -1
  2029. package/dist/src/automations/draft/automation-draft-prompt.js.map +0 -1
  2030. package/dist/src/automations/draft/automation-draft-service.js.map +0 -1
  2031. package/dist/src/automations/draft/automation-draft-validator.js.map +0 -1
  2032. package/dist/src/automations/product-events.js.map +0 -1
  2033. package/dist/src/automations/service/action-executor.js.map +0 -1
  2034. package/dist/src/automations/service/automation-service.js.map +0 -1
  2035. package/dist/src/automations/storage/automation-repository.js.map +0 -1
  2036. package/dist/src/automations/storage/automation-run-repository.js.map +0 -1
  2037. package/dist/src/browser/actions/extension-registry-bridge.js.map +0 -1
  2038. package/dist/src/browser/actions/registry.js.map +0 -1
  2039. package/dist/src/browser/backend-from-config.js.map +0 -1
  2040. package/dist/src/browser/browser-command-timeout.js.map +0 -1
  2041. package/dist/src/browser/cache-dir-policy.js.map +0 -1
  2042. package/dist/src/browser/cdp-local-launcher.js.map +0 -1
  2043. package/dist/src/browser/cdp-supervisor.js.map +0 -1
  2044. package/dist/src/browser/free-port.js.map +0 -1
  2045. package/dist/src/browser/humanize.js.map +0 -1
  2046. package/dist/src/browser/install-lock.js.map +0 -1
  2047. package/dist/src/browser/manager.js.map +0 -1
  2048. package/dist/src/browser/pipeline/output.js.map +0 -1
  2049. package/dist/src/browser/pipeline/runner.js.map +0 -1
  2050. package/dist/src/browser/pipeline/schema.js.map +0 -1
  2051. package/dist/src/browser/pipeline/source.js.map +0 -1
  2052. package/dist/src/browser/pipeline/template.js.map +0 -1
  2053. package/dist/src/browser/providers/browser-ext-install.js.map +0 -1
  2054. package/dist/src/browser/providers/browser-use.js.map +0 -1
  2055. package/dist/src/browser/providers/browserbase.js.map +0 -1
  2056. package/dist/src/browser/providers/cloakbrowser.js.map +0 -1
  2057. package/dist/src/browser/providers/extension-ws-acquire.js.map +0 -1
  2058. package/dist/src/browser/providers/extension.js.map +0 -1
  2059. package/dist/src/browser/providers/playwright-doctor.js.map +0 -1
  2060. package/dist/src/browser/providers/playwright-install.js.map +0 -1
  2061. package/dist/src/browser/readiness.js.map +0 -1
  2062. package/dist/src/browser/schemas.js.map +0 -1
  2063. package/dist/src/browser/session-lifecycle.js.map +0 -1
  2064. package/dist/src/browser/snapshot-helpers.js.map +0 -1
  2065. package/dist/src/browser/stealth.js.map +0 -1
  2066. package/dist/src/browser/url-policy.js.map +0 -1
  2067. package/dist/src/capabilities/store-connector.js.map +0 -1
  2068. package/dist/src/channels/attachments/attachment-classifiers.js.map +0 -1
  2069. package/dist/src/channels/attachments/inbound-persist.js.map +0 -1
  2070. package/dist/src/channels/attachments/inbound-types.js.map +0 -1
  2071. package/dist/src/channels/attachments/outbound-tts-persist.js.map +0 -1
  2072. package/dist/src/channels/attachments/voice-stt-webchat.js.map +0 -1
  2073. package/dist/src/channels/catalog/channel-catalog-service.js.map +0 -1
  2074. package/dist/src/channels/config-helpers.js.map +0 -1
  2075. package/dist/src/channels/envelope-timestamp.js.map +0 -1
  2076. package/dist/src/channels/exec-approval-runtime.js.map +0 -1
  2077. package/dist/src/channels/health-monitor.js.map +0 -1
  2078. package/dist/src/channels/heartbeat-scheduler.js.map +0 -1
  2079. package/dist/src/channels/internal-outbound.js.map +0 -1
  2080. package/dist/src/channels/lifecycle-supervisor.js.map +0 -1
  2081. package/dist/src/channels/manager.js.map +0 -1
  2082. package/dist/src/channels/media.js.map +0 -1
  2083. package/dist/src/channels/outbound/deliver.js.map +0 -1
  2084. package/dist/src/channels/outbound/normalize.js.map +0 -1
  2085. package/dist/src/channels/outbound/persist-store.js.map +0 -1
  2086. package/dist/src/channels/outbound/queue.js.map +0 -1
  2087. package/dist/src/channels/outbound-sender.js.map +0 -1
  2088. package/dist/src/channels/pairing/allow-from-file.js.map +0 -1
  2089. package/dist/src/channels/pairing/approve-cli.js.map +0 -1
  2090. package/dist/src/channels/pairing/pairing-challenge.js.map +0 -1
  2091. package/dist/src/channels/pairing/pairing-constants.js.map +0 -1
  2092. package/dist/src/channels/pairing/pairing-events.js.map +0 -1
  2093. package/dist/src/channels/pairing/pairing-messages.js.map +0 -1
  2094. package/dist/src/channels/pairing/pairing-service.js.map +0 -1
  2095. package/dist/src/channels/pairing/pairing-store-adapter.js.map +0 -1
  2096. package/dist/src/channels/pairing/pairing-store.js.map +0 -1
  2097. package/dist/src/channels/pairing/paths.js.map +0 -1
  2098. package/dist/src/channels/pairing/preseed-allow-from.js.map +0 -1
  2099. package/dist/src/channels/pipeline.js.map +0 -1
  2100. package/dist/src/channels/plugin-registry.js.map +0 -1
  2101. package/dist/src/channels/plugins/registry.js.map +0 -1
  2102. package/dist/src/channels/restart-policy.js.map +0 -1
  2103. package/dist/src/channels/security-helpers.js.map +0 -1
  2104. package/dist/src/channels/security.js.map +0 -1
  2105. package/dist/src/channels/setup-wizard-discovery.js.map +0 -1
  2106. package/dist/src/chat-commands/agent-edit.js.map +0 -1
  2107. package/dist/src/chat-commands/builtins/config.js.map +0 -1
  2108. package/dist/src/chat-commands/builtins/context.js.map +0 -1
  2109. package/dist/src/chat-commands/builtins/goal.js.map +0 -1
  2110. package/dist/src/chat-commands/builtins/model.js.map +0 -1
  2111. package/dist/src/chat-commands/builtins/review.js.map +0 -1
  2112. package/dist/src/chat-commands/builtins/session.js.map +0 -1
  2113. package/dist/src/chat-commands/builtins/skill.js.map +0 -1
  2114. package/dist/src/chat-commands/builtins/subgoal.js.map +0 -1
  2115. package/dist/src/chat-commands/builtins/system.js.map +0 -1
  2116. package/dist/src/chat-commands/builtins/thinking.js.map +0 -1
  2117. package/dist/src/chat-commands/builtins/tts.js.map +0 -1
  2118. package/dist/src/chat-commands/builtins/workflow.js.map +0 -1
  2119. package/dist/src/chat-commands/command-parse.js.map +0 -1
  2120. package/dist/src/chat-commands/config-paths.js.map +0 -1
  2121. package/dist/src/chat-commands/config-value.js.map +0 -1
  2122. package/dist/src/chat-commands/context.js.map +0 -1
  2123. package/dist/src/chat-commands/format-output.js.map +0 -1
  2124. package/dist/src/chat-commands/index.js.map +0 -1
  2125. package/dist/src/chat-commands/processor.js.map +0 -1
  2126. package/dist/src/chat-commands/registry.js.map +0 -1
  2127. package/dist/src/chat-commands/session-key.js.map +0 -1
  2128. package/dist/src/cli/argv-invocation.js.map +0 -1
  2129. package/dist/src/cli/argv.js.map +0 -1
  2130. package/dist/src/cli/bin.js.map +0 -1
  2131. package/dist/src/cli/cli-log-level-preset.js.map +0 -1
  2132. package/dist/src/cli/command-catalog.js.map +0 -1
  2133. package/dist/src/cli/command-loaders.js.map +0 -1
  2134. package/dist/src/cli/command-manifest.js.map +0 -1
  2135. package/dist/src/cli/command-path-matches.js.map +0 -1
  2136. package/dist/src/cli/command-path-policy.js.map +0 -1
  2137. package/dist/src/cli/command-startup-policy.js.map +0 -1
  2138. package/dist/src/cli/commands/agent/interactive.js.map +0 -1
  2139. package/dist/src/cli/commands/agent/sessions.js.map +0 -1
  2140. package/dist/src/cli/commands/agent/stream-renderer.js.map +0 -1
  2141. package/dist/src/cli/commands/agent.js.map +0 -1
  2142. package/dist/src/cli/commands/agents.js.map +0 -1
  2143. package/dist/src/cli/commands/auth.js.map +0 -1
  2144. package/dist/src/cli/commands/browser-cli-helpers.js.map +0 -1
  2145. package/dist/src/cli/commands/browser.js.map +0 -1
  2146. package/dist/src/cli/commands/channels.js.map +0 -1
  2147. package/dist/src/cli/commands/config.js.map +0 -1
  2148. package/dist/src/cli/commands/connectors.js.map +0 -1
  2149. package/dist/src/cli/commands/doctor/checks/channel-config.js.map +0 -1
  2150. package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js.map +0 -1
  2151. package/dist/src/cli/commands/doctor/checks/channel-plugins.js.map +0 -1
  2152. package/dist/src/cli/commands/doctor/checks/config-health.js.map +0 -1
  2153. package/dist/src/cli/commands/doctor/checks/database-schema.js.map +0 -1
  2154. package/dist/src/cli/commands/doctor/checks/gateway-health.js.map +0 -1
  2155. package/dist/src/cli/commands/doctor/checks/gateway-service.js.map +0 -1
  2156. package/dist/src/cli/commands/doctor/checks/migrations.js.map +0 -1
  2157. package/dist/src/cli/commands/doctor/checks/node-version.js.map +0 -1
  2158. package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +0 -1
  2159. package/dist/src/cli/commands/doctor/checks/security-audit.js.map +0 -1
  2160. package/dist/src/cli/commands/doctor/checks/session-integrity.js.map +0 -1
  2161. package/dist/src/cli/commands/doctor/checks/state-integrity.js.map +0 -1
  2162. package/dist/src/cli/commands/doctor/checks/version-check.js.map +0 -1
  2163. package/dist/src/cli/commands/doctor/checks/workspace-status.js.map +0 -1
  2164. package/dist/src/cli/commands/doctor/flow.js.map +0 -1
  2165. package/dist/src/cli/commands/doctor/format.js.map +0 -1
  2166. package/dist/src/cli/commands/doctor/index.js.map +0 -1
  2167. package/dist/src/cli/commands/extension-create.js.map +0 -1
  2168. package/dist/src/cli/commands/extension-dev.js.map +0 -1
  2169. package/dist/src/cli/commands/extension-marketplace.js.map +0 -1
  2170. package/dist/src/cli/commands/extension-pack.js.map +0 -1
  2171. package/dist/src/cli/commands/extension.js.map +0 -1
  2172. package/dist/src/cli/commands/gateway/call.js.map +0 -1
  2173. package/dist/src/cli/commands/gateway/health.js.map +0 -1
  2174. package/dist/src/cli/commands/gateway/lifecycle-core.js.map +0 -1
  2175. package/dist/src/cli/commands/gateway/lifecycle.js.map +0 -1
  2176. package/dist/src/cli/commands/gateway/logs.js.map +0 -1
  2177. package/dist/src/cli/commands/gateway/probe.js.map +0 -1
  2178. package/dist/src/cli/commands/gateway/restart-health.js.map +0 -1
  2179. package/dist/src/cli/commands/gateway/restart.js.map +0 -1
  2180. package/dist/src/cli/commands/gateway/run-foreground.js.map +0 -1
  2181. package/dist/src/cli/commands/gateway/service.js.map +0 -1
  2182. package/dist/src/cli/commands/gateway/shared.js.map +0 -1
  2183. package/dist/src/cli/commands/gateway/status.js.map +0 -1
  2184. package/dist/src/cli/commands/gateway/stop.js.map +0 -1
  2185. package/dist/src/cli/commands/gateway/subcommands.js.map +0 -1
  2186. package/dist/src/cli/commands/gateway/token.js.map +0 -1
  2187. package/dist/src/cli/commands/gateway-ssh-tunnel.js.map +0 -1
  2188. package/dist/src/cli/commands/gateway.js.map +0 -1
  2189. package/dist/src/cli/commands/goal.js.map +0 -1
  2190. package/dist/src/cli/commands/image.js.map +0 -1
  2191. package/dist/src/cli/commands/init.js.map +0 -1
  2192. package/dist/src/cli/commands/logs.js.map +0 -1
  2193. package/dist/src/cli/commands/models.js.map +0 -1
  2194. package/dist/src/cli/commands/onboard/channels/index.js.map +0 -1
  2195. package/dist/src/cli/commands/onboard/channels/onboard-to-configurator.js.map +0 -1
  2196. package/dist/src/cli/commands/onboard/channels/registry.js.map +0 -1
  2197. package/dist/src/cli/commands/onboard/channels/wizard-to-configurator.js.map +0 -1
  2198. package/dist/src/cli/commands/onboard/gateway.js.map +0 -1
  2199. package/dist/src/cli/commands/onboard/model.js.map +0 -1
  2200. package/dist/src/cli/commands/onboard.js.map +0 -1
  2201. package/dist/src/cli/commands/profile.js.map +0 -1
  2202. package/dist/src/cli/commands/project.js.map +0 -1
  2203. package/dist/src/cli/commands/providers.js.map +0 -1
  2204. package/dist/src/cli/commands/resume.js.map +0 -1
  2205. package/dist/src/cli/commands/search.js.map +0 -1
  2206. package/dist/src/cli/commands/session/actions.js.map +0 -1
  2207. package/dist/src/cli/commands/session/utils.js.map +0 -1
  2208. package/dist/src/cli/commands/session.js.map +0 -1
  2209. package/dist/src/cli/commands/setup-shared/output.js.map +0 -1
  2210. package/dist/src/cli/commands/setup-shared/prompts.js.map +0 -1
  2211. package/dist/src/cli/commands/setup-shared/runner.js.map +0 -1
  2212. package/dist/src/cli/commands/setup-shared/types.js.map +0 -1
  2213. package/dist/src/cli/commands/setup.js.map +0 -1
  2214. package/dist/src/cli/commands/skills-test.js.map +0 -1
  2215. package/dist/src/cli/commands/skills.js.map +0 -1
  2216. package/dist/src/cli/commands/tailscale.js.map +0 -1
  2217. package/dist/src/cli/commands/tui-runner.js.map +0 -1
  2218. package/dist/src/cli/commands/tui.js.map +0 -1
  2219. package/dist/src/cli/commands/tunnel.js.map +0 -1
  2220. package/dist/src/cli/commands/update.js.map +0 -1
  2221. package/dist/src/cli/commands/voice.js.map +0 -1
  2222. package/dist/src/cli/context.js.map +0 -1
  2223. package/dist/src/cli/extension-cli-register.js.map +0 -1
  2224. package/dist/src/cli/gateway-run-argv.js.map +0 -1
  2225. package/dist/src/cli/gateway-run-fast-path.js.map +0 -1
  2226. package/dist/src/cli/index.js.map +0 -1
  2227. package/dist/src/cli/registry.js.map +0 -1
  2228. package/dist/src/cli/templates.js.map +0 -1
  2229. package/dist/src/cli/utils/colors.js.map +0 -1
  2230. package/dist/src/cli/utils/gateway-client-options.js.map +0 -1
  2231. package/dist/src/cli/utils/gateway-client.js.map +0 -1
  2232. package/dist/src/cli/utils/init-workspace-core.js.map +0 -1
  2233. package/dist/src/cli/utils/init-workspace.js.map +0 -1
  2234. package/dist/src/cli/utils/oauth-login.js.map +0 -1
  2235. package/dist/src/cli/utils/oauth-providers.js.map +0 -1
  2236. package/dist/src/cli/utils/session.js.map +0 -1
  2237. package/dist/src/commands/agents.config.js.map +0 -1
  2238. package/dist/src/config/agent-profile.js.map +0 -1
  2239. package/dist/src/config/agent-typed-models.js.map +0 -1
  2240. package/dist/src/config/commands.flags.js.map +0 -1
  2241. package/dist/src/config/default-model.js.map +0 -1
  2242. package/dist/src/config/diff.js.map +0 -1
  2243. package/dist/src/config/gateway-bind.js.map +0 -1
  2244. package/dist/src/config/index.js.map +0 -1
  2245. package/dist/src/config/loader.js.map +0 -1
  2246. package/dist/src/config/mcp-config-normalize.js.map +0 -1
  2247. package/dist/src/config/model-input.js.map +0 -1
  2248. package/dist/src/config/models-json.js.map +0 -1
  2249. package/dist/src/config/paths-state.js.map +0 -1
  2250. package/dist/src/config/paths.js.map +0 -1
  2251. package/dist/src/config/profile.js.map +0 -1
  2252. package/dist/src/config/public-url.js.map +0 -1
  2253. package/dist/src/config/reload.js.map +0 -1
  2254. package/dist/src/config/resolve-config-value.js.map +0 -1
  2255. package/dist/src/config/rules.js.map +0 -1
  2256. package/dist/src/config/runtime-overrides.js.map +0 -1
  2257. package/dist/src/config/schema.js.map +0 -1
  2258. package/dist/src/config/validate-channel-configs.js.map +0 -1
  2259. package/dist/src/config/voice.js.map +0 -1
  2260. package/dist/src/config/web-patch.js.map +0 -1
  2261. package/dist/src/config/workspace-defaults.js.map +0 -1
  2262. package/dist/src/config/workspace-dirs.js.map +0 -1
  2263. package/dist/src/config/workspace-path-helpers.js.map +0 -1
  2264. package/dist/src/config/workspace-path.js.map +0 -1
  2265. package/dist/src/connectors/approval.js.map +0 -1
  2266. package/dist/src/connectors/auth-provider-registry.js.map +0 -1
  2267. package/dist/src/connectors/builtin-catalog.js.map +0 -1
  2268. package/dist/src/connectors/catalog.js.map +0 -1
  2269. package/dist/src/connectors/composio-catalog.js.map +0 -1
  2270. package/dist/src/connectors/composio-logo.js.map +0 -1
  2271. package/dist/src/connectors/composio-sessions.js.map +0 -1
  2272. package/dist/src/connectors/composio-triggers.js.map +0 -1
  2273. package/dist/src/connectors/composio.js.map +0 -1
  2274. package/dist/src/connectors/connector-memory-sync.js.map +0 -1
  2275. package/dist/src/connectors/health.js.map +0 -1
  2276. package/dist/src/connectors/install.js.map +0 -1
  2277. package/dist/src/connectors/instances.js.map +0 -1
  2278. package/dist/src/connectors/integration-strategy.js.map +0 -1
  2279. package/dist/src/connectors/lifecycle.js.map +0 -1
  2280. package/dist/src/connectors/materialize.js.map +0 -1
  2281. package/dist/src/connectors/policy.js.map +0 -1
  2282. package/dist/src/connectors/providers.js.map +0 -1
  2283. package/dist/src/connectors/registries/modelscope.js.map +0 -1
  2284. package/dist/src/connectors/registries/official-mcp.js.map +0 -1
  2285. package/dist/src/connectors/registries/search.js.map +0 -1
  2286. package/dist/src/connectors/registries/smithery.js.map +0 -1
  2287. package/dist/src/connectors/runtime-adapter-registry.js.map +0 -1
  2288. package/dist/src/connectors/secret-store.js.map +0 -1
  2289. package/dist/src/connectors/setup-secrets.js.map +0 -1
  2290. package/dist/src/connectors/supervisor.js.map +0 -1
  2291. package/dist/src/connectors/usage.js.map +0 -1
  2292. package/dist/src/connectors/workflow-preflight.js.map +0 -1
  2293. package/dist/src/daemon/constants.js.map +0 -1
  2294. package/dist/src/daemon/install-plan.js.map +0 -1
  2295. package/dist/src/daemon/launchd.js.map +0 -1
  2296. package/dist/src/daemon/schtasks.js.map +0 -1
  2297. package/dist/src/daemon/service-audit.js.map +0 -1
  2298. package/dist/src/daemon/service.js.map +0 -1
  2299. package/dist/src/daemon/systemd.js.map +0 -1
  2300. package/dist/src/document-understanding/extract.js.map +0 -1
  2301. package/dist/src/errors/index.js.map +0 -1
  2302. package/dist/src/extensions/activation-context.js.map +0 -1
  2303. package/dist/src/extensions/activation-planner.js.map +0 -1
  2304. package/dist/src/extensions/api.js.map +0 -1
  2305. package/dist/src/extensions/bundle-mcp.js.map +0 -1
  2306. package/dist/src/extensions/bundled-extension-activation.js.map +0 -1
  2307. package/dist/src/extensions/diagnostics.js.map +0 -1
  2308. package/dist/src/extensions/discover-extensions.js.map +0 -1
  2309. package/dist/src/extensions/engine-check.js.map +0 -1
  2310. package/dist/src/extensions/extension-metadata-snapshot.js.map +0 -1
  2311. package/dist/src/extensions/extension-registry-impl.js.map +0 -1
  2312. package/dist/src/extensions/health.js.map +0 -1
  2313. package/dist/src/extensions/hooks.js.map +0 -1
  2314. package/dist/src/extensions/index.js.map +0 -1
  2315. package/dist/src/extensions/install-transaction.js.map +0 -1
  2316. package/dist/src/extensions/install.js.map +0 -1
  2317. package/dist/src/extensions/loader.js.map +0 -1
  2318. package/dist/src/extensions/lockfile.js.map +0 -1
  2319. package/dist/src/extensions/manifest-registry.js.map +0 -1
  2320. package/dist/src/extensions/marketplace.js.map +0 -1
  2321. package/dist/src/extensions/media-provider-contracts.js.map +0 -1
  2322. package/dist/src/extensions/normalize-manifest.js.map +0 -1
  2323. package/dist/src/extensions/onboard-helpers.js.map +0 -1
  2324. package/dist/src/extensions/package-contract.js.map +0 -1
  2325. package/dist/src/extensions/sdk/channel-entry.js.map +0 -1
  2326. package/dist/src/extensions/sdk/channel-helpers.js.map +0 -1
  2327. package/dist/src/extensions/sdk/index.js.map +0 -1
  2328. package/dist/src/extensions/sdk/lazy.js.map +0 -1
  2329. package/dist/src/extensions/sdk/testing.js.map +0 -1
  2330. package/dist/src/extensions/security.js.map +0 -1
  2331. package/dist/src/extensions/slots.js.map +0 -1
  2332. package/dist/src/extensions/speech-provider-contracts.js.map +0 -1
  2333. package/dist/src/extensions/store-zip-limits.js.map +0 -1
  2334. package/dist/src/extensions/typed-event-bus.js.map +0 -1
  2335. package/dist/src/extensions/types/hooks.js.map +0 -1
  2336. package/dist/src/extensions/types/providers.js.map +0 -1
  2337. package/dist/src/extensions/update.js.map +0 -1
  2338. package/dist/src/extensions/when-context.js.map +0 -1
  2339. package/dist/src/extensions/when-expression.js.map +0 -1
  2340. package/dist/src/gateway/agent-builtin-tools.js.map +0 -1
  2341. package/dist/src/gateway/agent-run-relay.js.map +0 -1
  2342. package/dist/src/gateway/agents-admin.js.map +0 -1
  2343. package/dist/src/gateway/auth.js.map +0 -1
  2344. package/dist/src/gateway/capability-presets-admin.js.map +0 -1
  2345. package/dist/src/gateway/chat-limits.js.map +0 -1
  2346. package/dist/src/gateway/chat-stream/mapper.js.map +0 -1
  2347. package/dist/src/gateway/clarify-bridge.js.map +0 -1
  2348. package/dist/src/gateway/clarify-runtime.js.map +0 -1
  2349. package/dist/src/gateway/client-ip.js.map +0 -1
  2350. package/dist/src/gateway/config-tools-web.js.map +0 -1
  2351. package/dist/src/gateway/credential.js.map +0 -1
  2352. package/dist/src/gateway/discovery/mdns.js.map +0 -1
  2353. package/dist/src/gateway/dreaming-automation-reconciler.js.map +0 -1
  2354. package/dist/src/gateway/ensure-network-cors.js.map +0 -1
  2355. package/dist/src/gateway/file-path-classifier.js.map +0 -1
  2356. package/dist/src/gateway/file-reference-registry.js.map +0 -1
  2357. package/dist/src/gateway/global-defaults-admin.js.map +0 -1
  2358. package/dist/src/gateway/heartbeat/service.js.map +0 -1
  2359. package/dist/src/gateway/hono/app.js.map +0 -1
  2360. package/dist/src/gateway/hono/lib/agent-model.js.map +0 -1
  2361. package/dist/src/gateway/hono/lib/config-payload.js.map +0 -1
  2362. package/dist/src/gateway/hono/lib/extension-assets.js.map +0 -1
  2363. package/dist/src/gateway/hono/lib/extension-store.js.map +0 -1
  2364. package/dist/src/gateway/hono/lib/mask-secret-length.js.map +0 -1
  2365. package/dist/src/gateway/hono/lib/route-logger.js.map +0 -1
  2366. package/dist/src/gateway/hono/lib/safe-providers-config.js.map +0 -1
  2367. package/dist/src/gateway/hono/lib/safe-voice-config.js.map +0 -1
  2368. package/dist/src/gateway/hono/lib/startup-unavailable.js.map +0 -1
  2369. package/dist/src/gateway/hono/lib/static-ui.js.map +0 -1
  2370. package/dist/src/gateway/hono/middleware/auth.js.map +0 -1
  2371. package/dist/src/gateway/hono/middleware/log-context.js.map +0 -1
  2372. package/dist/src/gateway/hono/middleware/logger.js.map +0 -1
  2373. package/dist/src/gateway/hono/middleware/route-errors.js.map +0 -1
  2374. package/dist/src/gateway/hono/middleware/scopes.js.map +0 -1
  2375. package/dist/src/gateway/hono/middleware/strict-rate-limit.js.map +0 -1
  2376. package/dist/src/gateway/hono/oauth-async.js.map +0 -1
  2377. package/dist/src/gateway/hono/oauth.js.map +0 -1
  2378. package/dist/src/gateway/hono/routes/activity.js.map +0 -1
  2379. package/dist/src/gateway/hono/routes/agent-stream.js.map +0 -1
  2380. package/dist/src/gateway/hono/routes/agents.js.map +0 -1
  2381. package/dist/src/gateway/hono/routes/ai-assist.js.map +0 -1
  2382. package/dist/src/gateway/hono/routes/auth-registry-extensions.js.map +0 -1
  2383. package/dist/src/gateway/hono/routes/browser-install.js.map +0 -1
  2384. package/dist/src/gateway/hono/routes/browser.js.map +0 -1
  2385. package/dist/src/gateway/hono/routes/capabilities.js.map +0 -1
  2386. package/dist/src/gateway/hono/routes/capability-presets.js.map +0 -1
  2387. package/dist/src/gateway/hono/routes/channels.js.map +0 -1
  2388. package/dist/src/gateway/hono/routes/commands-skills.js.map +0 -1
  2389. package/dist/src/gateway/hono/routes/config-patch/agents.js.map +0 -1
  2390. package/dist/src/gateway/hono/routes/config-patch/channels.js.map +0 -1
  2391. package/dist/src/gateway/hono/routes/config-patch/gateway.js.map +0 -1
  2392. package/dist/src/gateway/hono/routes/config-patch/misc.js.map +0 -1
  2393. package/dist/src/gateway/hono/routes/config-patch/result.js.map +0 -1
  2394. package/dist/src/gateway/hono/routes/config.js.map +0 -1
  2395. package/dist/src/gateway/hono/routes/connectors.js.map +0 -1
  2396. package/dist/src/gateway/hono/routes/doctor.js.map +0 -1
  2397. package/dist/src/gateway/hono/routes/dreaming.js.map +0 -1
  2398. package/dist/src/gateway/hono/routes/exposure.js.map +0 -1
  2399. package/dist/src/gateway/hono/routes/extension-gateway.js.map +0 -1
  2400. package/dist/src/gateway/hono/routes/global-defaults.js.map +0 -1
  2401. package/dist/src/gateway/hono/routes/goals.js.map +0 -1
  2402. package/dist/src/gateway/hono/routes/home.js.map +0 -1
  2403. package/dist/src/gateway/hono/routes/host-fs.js.map +0 -1
  2404. package/dist/src/gateway/hono/routes/index.js.map +0 -1
  2405. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +0 -1
  2406. package/dist/src/gateway/hono/routes/lazy-fallback.js.map +0 -1
  2407. package/dist/src/gateway/hono/routes/local-apps.js.map +0 -1
  2408. package/dist/src/gateway/hono/routes/logs.js.map +0 -1
  2409. package/dist/src/gateway/hono/routes/mcp.js.map +0 -1
  2410. package/dist/src/gateway/hono/routes/media.js.map +0 -1
  2411. package/dist/src/gateway/hono/routes/memory.js.map +0 -1
  2412. package/dist/src/gateway/hono/routes/migrations.js.map +0 -1
  2413. package/dist/src/gateway/hono/routes/mobile.js.map +0 -1
  2414. package/dist/src/gateway/hono/routes/models.js.map +0 -1
  2415. package/dist/src/gateway/hono/routes/notes.js.map +0 -1
  2416. package/dist/src/gateway/hono/routes/projects.js.map +0 -1
  2417. package/dist/src/gateway/hono/routes/public-gateway.js.map +0 -1
  2418. package/dist/src/gateway/hono/routes/search.js.map +0 -1
  2419. package/dist/src/gateway/hono/routes/sessions.js.map +0 -1
  2420. package/dist/src/gateway/hono/routes/shares.js.map +0 -1
  2421. package/dist/src/gateway/hono/routes/site-shares.js.map +0 -1
  2422. package/dist/src/gateway/hono/routes/status.js.map +0 -1
  2423. package/dist/src/gateway/hono/routes/tui.js.map +0 -1
  2424. package/dist/src/gateway/hono/routes/tunnel.js.map +0 -1
  2425. package/dist/src/gateway/hono/routes/update.js.map +0 -1
  2426. package/dist/src/gateway/hono/routes/voice.js.map +0 -1
  2427. package/dist/src/gateway/hono/routes/work-discovery.js.map +0 -1
  2428. package/dist/src/gateway/hono/routes/workflows.js.map +0 -1
  2429. package/dist/src/gateway/hono/routes/workspace.js.map +0 -1
  2430. package/dist/src/gateway/hono/routes/you.js.map +0 -1
  2431. package/dist/src/gateway/hono/sse-json.js.map +0 -1
  2432. package/dist/src/gateway/hono/sse.js.map +0 -1
  2433. package/dist/src/gateway/host.js.map +0 -1
  2434. package/dist/src/gateway/image-capabilities.js.map +0 -1
  2435. package/dist/src/gateway/listen.js.map +0 -1
  2436. package/dist/src/gateway/lock.js.map +0 -1
  2437. package/dist/src/gateway/ports.js.map +0 -1
  2438. package/dist/src/gateway/protocol.js.map +0 -1
  2439. package/dist/src/gateway/public-url.js.map +0 -1
  2440. package/dist/src/gateway/rate-limit/auth-policy.js.map +0 -1
  2441. package/dist/src/gateway/rate-limit/buckets.js.map +0 -1
  2442. package/dist/src/gateway/rate-limit/env-flags.js.map +0 -1
  2443. package/dist/src/gateway/resolve-channel-connect-defer.js.map +0 -1
  2444. package/dist/src/gateway/resolve-webchat-session-key.js.map +0 -1
  2445. package/dist/src/gateway/respawn.js.map +0 -1
  2446. package/dist/src/gateway/run-loop.js.map +0 -1
  2447. package/dist/src/gateway/runtime-config.js.map +0 -1
  2448. package/dist/src/gateway/security/audit.js.map +0 -1
  2449. package/dist/src/gateway/security/csp.js.map +0 -1
  2450. package/dist/src/gateway/security/dangerous-tools.js.map +0 -1
  2451. package/dist/src/gateway/security/external-content.js.map +0 -1
  2452. package/dist/src/gateway/security/known-weak-secrets.js.map +0 -1
  2453. package/dist/src/gateway/security/loopback.js.map +0 -1
  2454. package/dist/src/gateway/security/operator-scopes.js.map +0 -1
  2455. package/dist/src/gateway/security/origin-check.js.map +0 -1
  2456. package/dist/src/gateway/security/preauth-connection-budget.js.map +0 -1
  2457. package/dist/src/gateway/security/secret-equal.js.map +0 -1
  2458. package/dist/src/gateway/server-tailscale.js.map +0 -1
  2459. package/dist/src/gateway/server.js.map +0 -1
  2460. package/dist/src/gateway/service/agent-runner.js.map +0 -1
  2461. package/dist/src/gateway/service/config-coordinator.js.map +0 -1
  2462. package/dist/src/gateway/service/marketplace-service.js.map +0 -1
  2463. package/dist/src/gateway/service/run-gateway-agent.js.map +0 -1
  2464. package/dist/src/gateway/service/session-chat-ids.js.map +0 -1
  2465. package/dist/src/gateway/service/sessions-api.js.map +0 -1
  2466. package/dist/src/gateway/service/sse-hub.js.map +0 -1
  2467. package/dist/src/gateway/service.js.map +0 -1
  2468. package/dist/src/gateway/session-reset-service.js.map +0 -1
  2469. package/dist/src/gateway/startup-readiness.js.map +0 -1
  2470. package/dist/src/gateway/startup-trace.js.map +0 -1
  2471. package/dist/src/gateway/tailscale-auth.js.map +0 -1
  2472. package/dist/src/gateway/tailscale-lifecycle.js.map +0 -1
  2473. package/dist/src/gateway/tls-server.js.map +0 -1
  2474. package/dist/src/gateway/trusted-proxy.js.map +0 -1
  2475. package/dist/src/gateway/user-turn-input.js.map +0 -1
  2476. package/dist/src/gateway/workspace-editor-path.js.map +0 -1
  2477. package/dist/src/gateway/workspace-file-search.js.map +0 -1
  2478. package/dist/src/gateway/workspace-fs-file-list.js.map +0 -1
  2479. package/dist/src/gateway/workspace-heartbeat-path.js.map +0 -1
  2480. package/dist/src/gateway/workspace-ripgrep.js.map +0 -1
  2481. package/dist/src/gateway/ws-security.js.map +0 -1
  2482. package/dist/src/generated/bundled-image-generation-providers.js.map +0 -1
  2483. package/dist/src/goals/goal-contract-draft.js.map +0 -1
  2484. package/dist/src/goals/goal-evidence-review.js.map +0 -1
  2485. package/dist/src/goals/goal-notifications.js.map +0 -1
  2486. package/dist/src/goals/goal-queue-store.js.map +0 -1
  2487. package/dist/src/goals/goal-runner.js.map +0 -1
  2488. package/dist/src/goals/goal-service.js.map +0 -1
  2489. package/dist/src/goals/goal-store.js.map +0 -1
  2490. package/dist/src/goals/goal-workflow-judge.js.map +0 -1
  2491. package/dist/src/heartbeat/active-hours.js.map +0 -1
  2492. package/dist/src/heartbeat/content-check.js.map +0 -1
  2493. package/dist/src/heartbeat/event-prompt.js.map +0 -1
  2494. package/dist/src/heartbeat/tokens.js.map +0 -1
  2495. package/dist/src/heartbeat/wake.js.map +0 -1
  2496. package/dist/src/i18n/format.js.map +0 -1
  2497. package/dist/src/i18n/goals-bundle.js.map +0 -1
  2498. package/dist/src/i18n/locale.js.map +0 -1
  2499. package/dist/src/i18n/locales/goals.en.js.map +0 -1
  2500. package/dist/src/i18n/locales/goals.zh.js.map +0 -1
  2501. package/dist/src/i18n/locales/share-tool.en.js.map +0 -1
  2502. package/dist/src/i18n/locales/share-tool.zh.js.map +0 -1
  2503. package/dist/src/i18n/share-tool-bundle.js.map +0 -1
  2504. package/dist/src/index.js.map +0 -1
  2505. package/dist/src/infra/brew.js.map +0 -1
  2506. package/dist/src/infra/bus/queue.js.map +0 -1
  2507. package/dist/src/infra/debounce.js.map +0 -1
  2508. package/dist/src/infra/exec.js.map +0 -1
  2509. package/dist/src/infra/gateway-process-argv.js.map +0 -1
  2510. package/dist/src/infra/gateway-processes.js.map +0 -1
  2511. package/dist/src/infra/host-env-security-policy.js.map +0 -1
  2512. package/dist/src/infra/host-env-security.js.map +0 -1
  2513. package/dist/src/infra/http-proxy-env.js.map +0 -1
  2514. package/dist/src/infra/is-main.js.map +0 -1
  2515. package/dist/src/infra/json-utf8-bytes.js.map +0 -1
  2516. package/dist/src/infra/node-sqlite.js.map +0 -1
  2517. package/dist/src/infra/package-json.js.map +0 -1
  2518. package/dist/src/infra/package-update-steps.js.map +0 -1
  2519. package/dist/src/infra/path-env.js.map +0 -1
  2520. package/dist/src/infra/path-prepend.js.map +0 -1
  2521. package/dist/src/infra/ports.js.map +0 -1
  2522. package/dist/src/infra/rate-limit/failure-limiter.js.map +0 -1
  2523. package/dist/src/infra/rate-limit/keyed-store.js.map +0 -1
  2524. package/dist/src/infra/rate-limit/rate-limiter.js.map +0 -1
  2525. package/dist/src/infra/restart.js.map +0 -1
  2526. package/dist/src/infra/retry.js.map +0 -1
  2527. package/dist/src/infra/run-command.js.map +0 -1
  2528. package/dist/src/infra/sqlite-errors.js.map +0 -1
  2529. package/dist/src/infra/ssh-tunnel.js.map +0 -1
  2530. package/dist/src/infra/stable-node-path.js.map +0 -1
  2531. package/dist/src/infra/tailscale.js.map +0 -1
  2532. package/dist/src/infra/undici-fetch.js.map +0 -1
  2533. package/dist/src/infra/unhandled-rejections.js.map +0 -1
  2534. package/dist/src/infra/update-channels.js.map +0 -1
  2535. package/dist/src/infra/update-check.js.map +0 -1
  2536. package/dist/src/infra/update-global.js.map +0 -1
  2537. package/dist/src/infra/update-lock.js.map +0 -1
  2538. package/dist/src/infra/update-log.js.map +0 -1
  2539. package/dist/src/infra/update-restart.js.map +0 -1
  2540. package/dist/src/infra/update-runner.js.map +0 -1
  2541. package/dist/src/infra/update-startup.js.map +0 -1
  2542. package/dist/src/infra/warning-filter.js.map +0 -1
  2543. package/dist/src/infra/write-file-atomic.js.map +0 -1
  2544. package/dist/src/knowledge/connected-knowledge-pipeline.js.map +0 -1
  2545. package/dist/src/knowledge/coordinator.js.map +0 -1
  2546. package/dist/src/knowledge/ingestion-service.js.map +0 -1
  2547. package/dist/src/local-apps/acceptance.js.map +0 -1
  2548. package/dist/src/local-apps/preview-runtime-bridge.js.map +0 -1
  2549. package/dist/src/local-apps/runtime-entry.js.map +0 -1
  2550. package/dist/src/local-apps/scaffold.js.map +0 -1
  2551. package/dist/src/local-apps/service.js.map +0 -1
  2552. package/dist/src/local-apps/store.js.map +0 -1
  2553. package/dist/src/markdown/chunk.js.map +0 -1
  2554. package/dist/src/markdown/code-spans.js.map +0 -1
  2555. package/dist/src/markdown/fences.js.map +0 -1
  2556. package/dist/src/markdown/frontmatter.js.map +0 -1
  2557. package/dist/src/markdown/ir.js.map +0 -1
  2558. package/dist/src/markdown/render.js.map +0 -1
  2559. package/dist/src/markdown/tables.js.map +0 -1
  2560. package/dist/src/mcp/channel-bridge.js.map +0 -1
  2561. package/dist/src/mcp/channel-server.js.map +0 -1
  2562. package/dist/src/mcp/channel-shared.js.map +0 -1
  2563. package/dist/src/mcp/channel-tools.js.map +0 -1
  2564. package/dist/src/mcp/gateway-http-client.js.map +0 -1
  2565. package/dist/src/media/media-reference.js.map +0 -1
  2566. package/dist/src/media/paths.js.map +0 -1
  2567. package/dist/src/media/session-references.js.map +0 -1
  2568. package/dist/src/media/store.js.map +0 -1
  2569. package/dist/src/media/uri.js.map +0 -1
  2570. package/dist/src/media-shared/http/api-key-rotation.js.map +0 -1
  2571. package/dist/src/media-shared/http/deadline.js.map +0 -1
  2572. package/dist/src/media-shared/http/private-network.js.map +0 -1
  2573. package/dist/src/media-shared/http/provider-http-errors.js.map +0 -1
  2574. package/dist/src/media-shared/http/provider-http.js.map +0 -1
  2575. package/dist/src/media-shared/http/resolve-provider-http-request-config.js.map +0 -1
  2576. package/dist/src/media-shared/http/ssrf-guard.js.map +0 -1
  2577. package/dist/src/media-shared/http/test-helpers/mock-server.js.map +0 -1
  2578. package/dist/src/media-understanding/audio-transcription-runner.js.map +0 -1
  2579. package/dist/src/media-understanding/openai-compatible-audio.js.map +0 -1
  2580. package/dist/src/media-understanding/registry.js.map +0 -1
  2581. package/dist/src/media-understanding/resolve-entries.js.map +0 -1
  2582. package/dist/src/media-understanding/runner.js.map +0 -1
  2583. package/dist/src/migrations/config/default-capability-preset.js.map +0 -1
  2584. package/dist/src/migrations/registry.js.map +0 -1
  2585. package/dist/src/migrations/runner.js.map +0 -1
  2586. package/dist/src/mobile/notification-service.js.map +0 -1
  2587. package/dist/src/mobile/notification-store.js.map +0 -1
  2588. package/dist/src/mobile/notification-types.js.map +0 -1
  2589. package/dist/src/notes/agent-context.js.map +0 -1
  2590. package/dist/src/notes/attachment-ref.js.map +0 -1
  2591. package/dist/src/notes/note-attachment-sync.js.map +0 -1
  2592. package/dist/src/notes/note-index-meta.js.map +0 -1
  2593. package/dist/src/notes/note-markdown.js.map +0 -1
  2594. package/dist/src/notes/paths.js.map +0 -1
  2595. package/dist/src/notes/service.js.map +0 -1
  2596. package/dist/src/notes/store.js.map +0 -1
  2597. package/dist/src/package-version.js.map +0 -1
  2598. package/dist/src/pets/factory.js.map +0 -1
  2599. package/dist/src/pets/manifest.js.map +0 -1
  2600. package/dist/src/pets/validator.js.map +0 -1
  2601. package/dist/src/process/kill-tree.js.map +0 -1
  2602. package/dist/src/project-trust/trust-store.js.map +0 -1
  2603. package/dist/src/projects/automation-bind.js.map +0 -1
  2604. package/dist/src/projects/goal-bind.js.map +0 -1
  2605. package/dist/src/projects/memory-bind.js.map +0 -1
  2606. package/dist/src/projects/project-agent-suggestion.js.map +0 -1
  2607. package/dist/src/projects/project-agent.js.map +0 -1
  2608. package/dist/src/projects/project-kind.js.map +0 -1
  2609. package/dist/src/projects/project-loop.js.map +0 -1
  2610. package/dist/src/projects/project-service.js.map +0 -1
  2611. package/dist/src/projects/project-store.js.map +0 -1
  2612. package/dist/src/projects/session-bind.js.map +0 -1
  2613. package/dist/src/projects/workflow-bind.js.map +0 -1
  2614. package/dist/src/projects/workspace-project.js.map +0 -1
  2615. package/dist/src/projects/workspace.js.map +0 -1
  2616. package/dist/src/providers/auth-runtime/auth-profile-store.js.map +0 -1
  2617. package/dist/src/providers/auth-runtime/is-configured.js.map +0 -1
  2618. package/dist/src/providers/auth-runtime/oauth.js.map +0 -1
  2619. package/dist/src/providers/auth-runtime/resolve-api-key.js.map +0 -1
  2620. package/dist/src/providers/auth-runtime/resolve-auth.js.map +0 -1
  2621. package/dist/src/providers/constants.js.map +0 -1
  2622. package/dist/src/providers/domestic-presets.js.map +0 -1
  2623. package/dist/src/providers/env-keys.js.map +0 -1
  2624. package/dist/src/providers/extension-stream-bridge.js.map +0 -1
  2625. package/dist/src/providers/index.js.map +0 -1
  2626. package/dist/src/providers/model-call.js.map +0 -1
  2627. package/dist/src/providers/model-discovery.js.map +0 -1
  2628. package/dist/src/providers/model-registry.js.map +0 -1
  2629. package/dist/src/providers/model-supplements.js.map +0 -1
  2630. package/dist/src/providers/plugin-registry.js.map +0 -1
  2631. package/dist/src/providers/presentation.js.map +0 -1
  2632. package/dist/src/remote-access/exposure-guards.js.map +0 -1
  2633. package/dist/src/remote-access/exposure-manager.js.map +0 -1
  2634. package/dist/src/review/review-git.js.map +0 -1
  2635. package/dist/src/review/review-types.js.map +0 -1
  2636. package/dist/src/routing/account-id.js.map +0 -1
  2637. package/dist/src/routing/agent-session-key.js.map +0 -1
  2638. package/dist/src/routing/bindings.js.map +0 -1
  2639. package/dist/src/routing/index.js.map +0 -1
  2640. package/dist/src/routing/resolve-route.js.map +0 -1
  2641. package/dist/src/routing/resolve-tui-session-key.js.map +0 -1
  2642. package/dist/src/routing/session-key-utils.js.map +0 -1
  2643. package/dist/src/routing/session-key.js.map +0 -1
  2644. package/dist/src/session/abort-cutoff.js.map +0 -1
  2645. package/dist/src/session/chat-export.js.map +0 -1
  2646. package/dist/src/session/client-history.js.map +0 -1
  2647. package/dist/src/session/compaction-checkpoints.js.map +0 -1
  2648. package/dist/src/session/config-store.js.map +0 -1
  2649. package/dist/src/session/init-session-turn.js.map +0 -1
  2650. package/dist/src/session/lifecycle-timestamps.js.map +0 -1
  2651. package/dist/src/session/load-jsonl-entries.js.map +0 -1
  2652. package/dist/src/session/manager.js.map +0 -1
  2653. package/dist/src/session/patch-metadata.js.map +0 -1
  2654. package/dist/src/session/reset-policy.js.map +0 -1
  2655. package/dist/src/session/reset-triggers.js.map +0 -1
  2656. package/dist/src/session/reset-type.js.map +0 -1
  2657. package/dist/src/session/resolve-session.js.map +0 -1
  2658. package/dist/src/session/session-context-for-llm.js.map +0 -1
  2659. package/dist/src/session/session-id.js.map +0 -1
  2660. package/dist/src/session/session-title.js.map +0 -1
  2661. package/dist/src/session/session-workspace.js.map +0 -1
  2662. package/dist/src/session/store.js.map +0 -1
  2663. package/dist/src/session/stored-rows-to-file-entries.js.map +0 -1
  2664. package/dist/src/session/thinking-resolve.js.map +0 -1
  2665. package/dist/src/session/transcript-events.js.map +0 -1
  2666. package/dist/src/session/transcript-format.js.map +0 -1
  2667. package/dist/src/session/transcript-outline.js.map +0 -1
  2668. package/dist/src/session/transcript-stats.js.map +0 -1
  2669. package/dist/src/session/types.js.map +0 -1
  2670. package/dist/src/session/user-round-delete.js.map +0 -1
  2671. package/dist/src/share/share-audit.js.map +0 -1
  2672. package/dist/src/share/share-auto.js.map +0 -1
  2673. package/dist/src/share/share-config.js.map +0 -1
  2674. package/dist/src/share/share-landing.js.map +0 -1
  2675. package/dist/src/share/share-rate-limit.js.map +0 -1
  2676. package/dist/src/share/share-store.js.map +0 -1
  2677. package/dist/src/share/share-thumbnail.js.map +0 -1
  2678. package/dist/src/share/share-types.js.map +0 -1
  2679. package/dist/src/share/share-url.js.map +0 -1
  2680. package/dist/src/share/share-zip.js.map +0 -1
  2681. package/dist/src/share/site-proxy.js.map +0 -1
  2682. package/dist/src/share/site-share-config.js.map +0 -1
  2683. package/dist/src/share/site-share-router.js.map +0 -1
  2684. package/dist/src/share/site-share-store.js.map +0 -1
  2685. package/dist/src/share/site-share-types.js.map +0 -1
  2686. package/dist/src/share/site-static-serve.js.map +0 -1
  2687. package/dist/src/storage/sqlite/activity-repository.js.map +0 -1
  2688. package/dist/src/storage/sqlite/config-repository.js.map +0 -1
  2689. package/dist/src/storage/sqlite/connection.js.map +0 -1
  2690. package/dist/src/storage/sqlite/connector-repository.js.map +0 -1
  2691. package/dist/src/storage/sqlite/fts.js.map +0 -1
  2692. package/dist/src/storage/sqlite/knowledge-repository.js.map +0 -1
  2693. package/dist/src/storage/sqlite/memory-index-repository.js.map +0 -1
  2694. package/dist/src/storage/sqlite/memory-records-repository.js.map +0 -1
  2695. package/dist/src/storage/sqlite/memory-reference-consent-repository.js.map +0 -1
  2696. package/dist/src/storage/sqlite/migrations/discover.js.map +0 -1
  2697. package/dist/src/storage/sqlite/migrations/errors.js.map +0 -1
  2698. package/dist/src/storage/sqlite/migrations/runner.js.map +0 -1
  2699. package/dist/src/storage/sqlite/note-agent-context-repository.js.map +0 -1
  2700. package/dist/src/storage/sqlite/notes-repository.js.map +0 -1
  2701. package/dist/src/storage/sqlite/paths.js.map +0 -1
  2702. package/dist/src/storage/sqlite/row-mappers.js.map +0 -1
  2703. package/dist/src/storage/sqlite/schema-version.js.map +0 -1
  2704. package/dist/src/storage/sqlite/schema.js.map +0 -1
  2705. package/dist/src/storage/sqlite/session-metadata.js.map +0 -1
  2706. package/dist/src/storage/sqlite/session-repository.js.map +0 -1
  2707. package/dist/src/storage/sqlite/transaction.js.map +0 -1
  2708. package/dist/src/storage/sqlite/transcript-repository.js.map +0 -1
  2709. package/dist/src/storage/sqlite/user-profile-setup-repository.js.map +0 -1
  2710. package/dist/src/storage/sqlite/user-trust-repository.js.map +0 -1
  2711. package/dist/src/tui/backends/embedded-backend.js.map +0 -1
  2712. package/dist/src/tui/backends/gateway-sse-backend.js.map +0 -1
  2713. package/dist/src/tui/chat-history.js.map +0 -1
  2714. package/dist/src/tui/clipboard-image.js.map +0 -1
  2715. package/dist/src/tui/clipboard-text.js.map +0 -1
  2716. package/dist/src/tui/components/assistant-message.js.map +0 -1
  2717. package/dist/src/tui/components/bash-execution.js.map +0 -1
  2718. package/dist/src/tui/components/bash-summary.js.map +0 -1
  2719. package/dist/src/tui/components/branch-message-summary.js.map +0 -1
  2720. package/dist/src/tui/components/branch-summary.js.map +0 -1
  2721. package/dist/src/tui/components/chat-log.js.map +0 -1
  2722. package/dist/src/tui/components/compaction-summary.js.map +0 -1
  2723. package/dist/src/tui/components/custom-editor.js.map +0 -1
  2724. package/dist/src/tui/components/custom-message.js.map +0 -1
  2725. package/dist/src/tui/components/dynamic-border.js.map +0 -1
  2726. package/dist/src/tui/components/extension-dialog.js.map +0 -1
  2727. package/dist/src/tui/components/fuzzy-filter.js.map +0 -1
  2728. package/dist/src/tui/components/scoped-models-selector.js.map +0 -1
  2729. package/dist/src/tui/components/searchable-select-list.js.map +0 -1
  2730. package/dist/src/tui/components/session-selector.js.map +0 -1
  2731. package/dist/src/tui/components/settings-selector.js.map +0 -1
  2732. package/dist/src/tui/components/thinking-selector.js.map +0 -1
  2733. package/dist/src/tui/components/tool-execution.js.map +0 -1
  2734. package/dist/src/tui/components/tui-bottom-bar.js.map +0 -1
  2735. package/dist/src/tui/components/tui-header.js.map +0 -1
  2736. package/dist/src/tui/components/user-message.js.map +0 -1
  2737. package/dist/src/tui/components/visual-truncate.js.map +0 -1
  2738. package/dist/src/tui/extension-host/autocomplete.js.map +0 -1
  2739. package/dist/src/tui/extension-host/host.js.map +0 -1
  2740. package/dist/src/tui/extension-host/load-extensions.js.map +0 -1
  2741. package/dist/src/tui/extension-host/runtime-context.js.map +0 -1
  2742. package/dist/src/tui/extension-host/runtime.js.map +0 -1
  2743. package/dist/src/tui/extension-host/surface.js.map +0 -1
  2744. package/dist/src/tui/extension-host/tool-renderers.js.map +0 -1
  2745. package/dist/src/tui/format-tui-hotkeys.js.map +0 -1
  2746. package/dist/src/tui/sse-consumer.js.map +0 -1
  2747. package/dist/src/tui/theme/dark.js.map +0 -1
  2748. package/dist/src/tui/theme/light.js.map +0 -1
  2749. package/dist/src/tui/theme-manager.js.map +0 -1
  2750. package/dist/src/tui/theme.js.map +0 -1
  2751. package/dist/src/tui/tool-summary.js.map +0 -1
  2752. package/dist/src/tui/tui-agent-events.js.map +0 -1
  2753. package/dist/src/tui/tui-command-formatters.js.map +0 -1
  2754. package/dist/src/tui/tui-commands.js.map +0 -1
  2755. package/dist/src/tui/tui-context-usage.js.map +0 -1
  2756. package/dist/src/tui/tui-extension-user-message.js.map +0 -1
  2757. package/dist/src/tui/tui-fd-path.js.map +0 -1
  2758. package/dist/src/tui/tui-file-autocomplete.js.map +0 -1
  2759. package/dist/src/tui/tui-follow-up-queue.js.map +0 -1
  2760. package/dist/src/tui/tui-git-branch.js.map +0 -1
  2761. package/dist/src/tui/tui-keybindings-file.js.map +0 -1
  2762. package/dist/src/tui/tui-lifecycle.js.map +0 -1
  2763. package/dist/src/tui/tui-local-shell.js.map +0 -1
  2764. package/dist/src/tui/tui-model-picker.js.map +0 -1
  2765. package/dist/src/tui/tui-oauth-login.js.map +0 -1
  2766. package/dist/src/tui/tui-overlays.js.map +0 -1
  2767. package/dist/src/tui/tui-picker-overlay.js.map +0 -1
  2768. package/dist/src/tui/tui-run-state.js.map +0 -1
  2769. package/dist/src/tui/tui-run-status-format.js.map +0 -1
  2770. package/dist/src/tui/tui-runtime-hints.js.map +0 -1
  2771. package/dist/src/tui/tui-scoped-models.js.map +0 -1
  2772. package/dist/src/tui/tui-session-actions.js.map +0 -1
  2773. package/dist/src/tui/tui-session-format.js.map +0 -1
  2774. package/dist/src/tui/tui-session-snapshot.js.map +0 -1
  2775. package/dist/src/tui/tui-session-stats.js.map +0 -1
  2776. package/dist/src/tui/tui-settings.js.map +0 -1
  2777. package/dist/src/tui/tui-skills-autocomplete.js.map +0 -1
  2778. package/dist/src/tui/tui-startup-resources.js.map +0 -1
  2779. package/dist/src/tui/tui-startup-text.js.map +0 -1
  2780. package/dist/src/tui/tui-stdio-filter.js.map +0 -1
  2781. package/dist/src/tui/tui-submit.js.map +0 -1
  2782. package/dist/src/tui/tui-suspend.js.map +0 -1
  2783. package/dist/src/tui/tui-timeline-picker.js.map +0 -1
  2784. package/dist/src/tui/tui-timeline.js.map +0 -1
  2785. package/dist/src/tui/tui-tool-diff.js.map +0 -1
  2786. package/dist/src/tui/tui-tool-result.js.map +0 -1
  2787. package/dist/src/tui/tui-transcript-tree-picker.js.map +0 -1
  2788. package/dist/src/tui/tui-transcript-tree.js.map +0 -1
  2789. package/dist/src/tui/tui-types.js.map +0 -1
  2790. package/dist/src/tui/tui-workflow-slash.js.map +0 -1
  2791. package/dist/src/tui/tui.js.map +0 -1
  2792. package/dist/src/tui/xopc-tui-keybindings.js.map +0 -1
  2793. package/dist/src/tunnel/broker-client.js.map +0 -1
  2794. package/dist/src/tunnel/consent.js.map +0 -1
  2795. package/dist/src/tunnel/enable-lan-pairing.js.map +0 -1
  2796. package/dist/src/tunnel/env.js.map +0 -1
  2797. package/dist/src/tunnel/frp-subdomain-host.js.map +0 -1
  2798. package/dist/src/tunnel/frpc-binary.js.map +0 -1
  2799. package/dist/src/tunnel/frpc-config.js.map +0 -1
  2800. package/dist/src/tunnel/frpc-extract.js.map +0 -1
  2801. package/dist/src/tunnel/frpc-process.js.map +0 -1
  2802. package/dist/src/tunnel/gateway-lifecycle.js.map +0 -1
  2803. package/dist/src/tunnel/pair-context.js.map +0 -1
  2804. package/dist/src/tunnel/pair-url.js.map +0 -1
  2805. package/dist/src/tunnel/pairing-rate-limit.js.map +0 -1
  2806. package/dist/src/tunnel/pairing.js.map +0 -1
  2807. package/dist/src/tunnel/tunnel-audit.js.map +0 -1
  2808. package/dist/src/tunnel/tunnel-config.js.map +0 -1
  2809. package/dist/src/tunnel/tunnel-persist.js.map +0 -1
  2810. package/dist/src/tunnel/tunnel-qr.js.map +0 -1
  2811. package/dist/src/tunnel/tunnel-rate-limit.js.map +0 -1
  2812. package/dist/src/tunnel/tunnel-service.js.map +0 -1
  2813. package/dist/src/tunnel/tunnel-state.js.map +0 -1
  2814. package/dist/src/tunnel/well-known.js.map +0 -1
  2815. package/dist/src/user-context/config.js.map +0 -1
  2816. package/dist/src/user-context/import.js.map +0 -1
  2817. package/dist/src/user-context/owner.js.map +0 -1
  2818. package/dist/src/user-context/profile.js.map +0 -1
  2819. package/dist/src/user-context/projection.js.map +0 -1
  2820. package/dist/src/user-context/runtime.js.map +0 -1
  2821. package/dist/src/user-context/source-recommendations.js.map +0 -1
  2822. package/dist/src/user-context/trust-policy.js.map +0 -1
  2823. package/dist/src/utils/global-singleton.js.map +0 -1
  2824. package/dist/src/utils/helpers.js.map +0 -1
  2825. package/dist/src/utils/index.js.map +0 -1
  2826. package/dist/src/utils/is-record.js.map +0 -1
  2827. package/dist/src/utils/logger/audit.js.map +0 -1
  2828. package/dist/src/utils/logger/config.js.map +0 -1
  2829. package/dist/src/utils/logger/context.js.map +0 -1
  2830. package/dist/src/utils/logger/exporters.js.map +0 -1
  2831. package/dist/src/utils/logger/index.js.map +0 -1
  2832. package/dist/src/utils/logger/log-store.js.map +0 -1
  2833. package/dist/src/utils/logger/log-stream.js.map +0 -1
  2834. package/dist/src/utils/logger/pino-record.js.map +0 -1
  2835. package/dist/src/utils/logger/redact.js.map +0 -1
  2836. package/dist/src/utils/logger/rotation.js.map +0 -1
  2837. package/dist/src/utils/logger/shutdown.js.map +0 -1
  2838. package/dist/src/utils/logger/stats.js.map +0 -1
  2839. package/dist/src/utils/logger/streams.js.map +0 -1
  2840. package/dist/src/utils/logger/types.js.map +0 -1
  2841. package/dist/src/utils/logger.js.map +0 -1
  2842. package/dist/src/utils/redact-sensitive-url.js.map +0 -1
  2843. package/dist/src/utils/sanitize-log.js.map +0 -1
  2844. package/dist/src/utils/string-coerce.js.map +0 -1
  2845. package/dist/src/voice/language-profile.js.map +0 -1
  2846. package/dist/src/voice/local/model-files.js.map +0 -1
  2847. package/dist/src/voice/local/model-manager.js.map +0 -1
  2848. package/dist/src/voice/local/models.js.map +0 -1
  2849. package/dist/src/voice/local/runtime-client.js.map +0 -1
  2850. package/dist/src/voice/local/runtime-dispatcher.js.map +0 -1
  2851. package/dist/src/voice/local/runtime-worker.js.map +0 -1
  2852. package/dist/src/voice/local/wav.js.map +0 -1
  2853. package/dist/src/voice/metadata/builtin.js.map +0 -1
  2854. package/dist/src/voice/metadata/registry.js.map +0 -1
  2855. package/dist/src/voice/stt/availability.js.map +0 -1
  2856. package/dist/src/voice/stt/config-slice.js.map +0 -1
  2857. package/dist/src/voice/stt/factory.js.map +0 -1
  2858. package/dist/src/voice/stt/index.js.map +0 -1
  2859. package/dist/src/voice/stt/list-providers.js.map +0 -1
  2860. package/dist/src/voice/stt/mention.js.map +0 -1
  2861. package/dist/src/voice/stt/preflight.js.map +0 -1
  2862. package/dist/src/voice/stt/providers/alibaba-transcription.js.map +0 -1
  2863. package/dist/src/voice/stt/providers/local-transcription.js.map +0 -1
  2864. package/dist/src/voice/stt/providers/openai-transcription.js.map +0 -1
  2865. package/dist/src/voice/stt/transcribe-core.js.map +0 -1
  2866. package/dist/src/voice/stt/types.js.map +0 -1
  2867. package/dist/src/voice/tts/audio.js.map +0 -1
  2868. package/dist/src/voice/tts/config-slice.js.map +0 -1
  2869. package/dist/src/voice/tts/directives.js.map +0 -1
  2870. package/dist/src/voice/tts/factory.js.map +0 -1
  2871. package/dist/src/voice/tts/list-providers.js.map +0 -1
  2872. package/dist/src/voice/tts/merge-config.js.map +0 -1
  2873. package/dist/src/voice/tts/openai-compatible-speech.js.map +0 -1
  2874. package/dist/src/voice/tts/payload.js.map +0 -1
  2875. package/dist/src/voice/tts/preprocess.js.map +0 -1
  2876. package/dist/src/voice/tts/providers/alibaba-speech.js.map +0 -1
  2877. package/dist/src/voice/tts/providers/edge-speech.js.map +0 -1
  2878. package/dist/src/voice/tts/providers/minimax-speech.js.map +0 -1
  2879. package/dist/src/voice/tts/providers/openai-speech.js.map +0 -1
  2880. package/dist/src/voice/tts/sentence-boundary.js.map +0 -1
  2881. package/dist/src/voice/tts/service.js.map +0 -1
  2882. package/dist/src/voice/tts/speak-core.js.map +0 -1
  2883. package/dist/src/voice/tts/speech-registry.js.map +0 -1
  2884. package/dist/src/voice/tts/status-tracker.js.map +0 -1
  2885. package/dist/src/voice/tts/summarize.js.map +0 -1
  2886. package/dist/src/voice/tts/types.js.map +0 -1
  2887. package/dist/src/work-discovery/analyzer.js.map +0 -1
  2888. package/dist/src/work-discovery/probe.js.map +0 -1
  2889. package/dist/src/work-discovery/repository.js.map +0 -1
  2890. package/dist/src/work-discovery/service.js.map +0 -1
  2891. package/dist/src/work-items/agent-context.js.map +0 -1
  2892. package/dist/src/work-items/work-item-service.js.map +0 -1
  2893. package/dist/src/work-items/work-item-store.js.map +0 -1
  2894. package/dist/src/work-items/work-item-workflow-judge.js.map +0 -1
  2895. package/dist/src/workflows/authoring/workflow-draft-store.js.map +0 -1
  2896. package/dist/src/workflows/domain/definition-utils.js.map +0 -1
  2897. package/dist/src/workflows/domain/run.js.map +0 -1
  2898. package/dist/src/workflows/domain/schema-validation.js.map +0 -1
  2899. package/dist/src/workflows/domain/validation.js.map +0 -1
  2900. package/dist/src/workflows/draft/workflow-draft-prompt.js.map +0 -1
  2901. package/dist/src/workflows/draft/workflow-draft-service.js.map +0 -1
  2902. package/dist/src/workflows/draft/workflow-draft-validator.js.map +0 -1
  2903. package/dist/src/workflows/engine/projector.js.map +0 -1
  2904. package/dist/src/workflows/engine/workflow-engine.js.map +0 -1
  2905. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +0 -1
  2906. package/dist/src/workflows/runtime/graph-workflow-runtime.js.map +0 -1
  2907. package/dist/src/workflows/service/run-view-to-snapshot.js.map +0 -1
  2908. package/dist/src/workflows/service/workflow-run-service.js.map +0 -1
  2909. package/dist/src/workflows/service/workflow-session-bridge.js.map +0 -1
  2910. package/dist/src/workflows/service/workflow-session-key.js.map +0 -1
  2911. package/dist/src/workflows/store/event-store.js.map +0 -1
  2912. package/dist/src/workflows/store/paths.js.map +0 -1
  2913. package/dist/src/workflows/store/run-index-store.js.map +0 -1
  2914. package/dist/src/workflows/store/run-store.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"send-options.js","names":[],"sources":["../../../../extensions/telegram/src/send-options.ts"],"sourcesContent":["/**\n * Telegram Send Options Utilities\n *\n * Build send options for Telegram API, parse data URLs, and resolve media methods.\n * Extracted to eliminate code duplication in outbound-sender.ts\n */\n\nexport interface TelegramSendParams {\n threadId?: string;\n replyToMessageId?: string;\n silent?: boolean;\n parseMode?: 'HTML' | 'Markdown';\n caption?: string;\n}\n\nexport type TelegramMediaMethod = 'sendPhoto' | 'sendVideo' | 'sendAudio' | 'sendDocument' | 'sendVoice';\n\n/**\n * Build Telegram API send options\n * Eliminates duplicate code across multiple send paths\n */\nexport function buildSendOptions(params: TelegramSendParams): Record<string, unknown> {\n const options: Record<string, unknown> = {\n parse_mode: params.parseMode ?? 'HTML',\n };\n\n if (params.threadId) {\n options.message_thread_id = parseInt(params.threadId, 10);\n }\n\n if (params.replyToMessageId) {\n options.reply_to_message_id = parseInt(params.replyToMessageId, 10);\n }\n\n if (params.silent) {\n options.disable_notification = true;\n }\n\n if (params.caption) {\n options.caption = params.caption;\n }\n\n return options;\n}\n\n/**\n * Parse data URL into mimeType and buffer\n * Supports: data:mime/type;base64,DATA\n */\nexport function parseDataUrl(dataUrl: string): { mimeType: string; buffer: Buffer } | null {\n const match = dataUrl.match(/^data:([^;]+);base64,(.+)$/);\n if (!match) {\n return null;\n }\n\n const mimeType = match[1];\n const base64Data = match[2];\n\n // Buffer.from doesn't throw for invalid base64, it silently handles it\n const buffer = Buffer.from(base64Data, 'base64');\n return { mimeType, buffer };\n}\n\n/**\n * Resolve media method based on mime type or category\n */\nexport function resolveMediaMethod(mimeTypeOrCategory: string): TelegramMediaMethod {\n const fullNormalized = mimeTypeOrCategory.trim().toLowerCase();\n const normalized = fullNormalized.split(';')[0]?.trim() || fullNormalized;\n\n // Handle category-based resolution\n if (normalized === 'image/svg+xml') {\n return 'sendDocument';\n }\n\n if (normalized === 'image' || normalized.startsWith('image/')) {\n return 'sendPhoto';\n }\n\n if (normalized === 'video' || normalized.startsWith('video/')) {\n return 'sendVideo';\n }\n\n if (normalized === 'voice') {\n return 'sendVoice';\n }\n\n // Opus codec in OGG is typically voice\n if (fullNormalized.includes('opus')) {\n return 'sendVoice';\n }\n\n if (normalized === 'audio' || normalized.startsWith('audio/')) {\n return 'sendAudio';\n }\n\n // Default to document for unknown types\n return 'sendDocument';\n}\n"],"mappings":";;;;;AAqBA,SAAgB,iBAAiB,QAAqD;CACpF,MAAM,UAAmC,EACvC,YAAY,OAAO,aAAa,QACjC;AAED,KAAI,OAAO,SACT,SAAQ,oBAAoB,SAAS,OAAO,UAAU,GAAG;AAG3D,KAAI,OAAO,iBACT,SAAQ,sBAAsB,SAAS,OAAO,kBAAkB,GAAG;AAGrE,KAAI,OAAO,OACT,SAAQ,uBAAuB;AAGjC,KAAI,OAAO,QACT,SAAQ,UAAU,OAAO;AAG3B,QAAO;;;;;;AAOT,SAAgB,aAAa,SAA8D;CACzF,MAAM,QAAQ,QAAQ,MAAM,6BAA6B;AACzD,KAAI,CAAC,MACH,QAAO;CAGT,MAAM,WAAW,MAAM;CACvB,MAAM,aAAa,MAAM;AAIzB,QAAO;EAAE;EAAU,QADJ,OAAO,KAAK,YAAY,SACd;EAAE;;;;;AAM7B,SAAgB,mBAAmB,oBAAiD;CAClF,MAAM,iBAAiB,mBAAmB,MAAM,CAAC,aAAa;CAC9D,MAAM,aAAa,eAAe,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI;AAG3D,KAAI,eAAe,gBACjB,QAAO;AAGT,KAAI,eAAe,WAAW,WAAW,WAAW,SAAS,CAC3D,QAAO;AAGT,KAAI,eAAe,WAAW,WAAW,WAAW,SAAS,CAC3D,QAAO;AAGT,KAAI,eAAe,QACjB,QAAO;AAIT,KAAI,eAAe,SAAS,OAAO,CACjC,QAAO;AAGT,KAAI,eAAe,WAAW,WAAW,WAAW,SAAS,CAC3D,QAAO;AAIT,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sent-cache.js","names":[],"sources":["../../../../extensions/telegram/src/sent-cache.ts"],"sourcesContent":["/**\n * Sent Message Cache\n * \n * Tracks message IDs sent by the bot for:\n * - Reaction filtering (don't react to own messages)\n * - Message editing/deletion\n * - Session context tracking\n */\n\nconst DEFAULT_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours\n\ninterface CacheEntry {\n messageIds: Set<number>;\n timestamps: Map<number, number>; // messageId -> timestamp\n}\n\nexport interface SentMessageCacheOptions {\n /** Time-to-live in milliseconds */\n ttlMs?: number;\n /** Cleanup threshold - cleanup when size exceeds this */\n cleanupThreshold?: number;\n}\n\nexport class SentMessageCache {\n private cache = new Map<string, CacheEntry>();\n private ttlMs: number;\n private cleanupThreshold: number;\n\n constructor(options: SentMessageCacheOptions = {}) {\n this.ttlMs = options.ttlMs ?? DEFAULT_TTL_MS;\n this.cleanupThreshold = options.cleanupThreshold ?? 100;\n }\n\n private getChatKey(chatId: number | string): string {\n return String(chatId);\n }\n\n /**\n * Record a message ID as sent by the bot\n */\n record(chatId: number | string, messageId: number): void {\n const key = this.getChatKey(chatId);\n let entry = this.cache.get(key);\n \n if (!entry) {\n entry = { messageIds: new Set(), timestamps: new Map() };\n this.cache.set(key, entry);\n }\n\n entry.messageIds.add(messageId);\n entry.timestamps.set(messageId, Date.now());\n\n // Periodic cleanup\n if (entry.messageIds.size > this.cleanupThreshold) {\n this.cleanupEntry(entry);\n }\n }\n\n /**\n * Check if a message was sent by the bot\n */\n wasSentByBot(chatId: number | string, messageId: number): boolean {\n const key = this.getChatKey(chatId);\n const entry = this.cache.get(key);\n \n if (!entry) {\n return false;\n }\n\n // Clean up expired entries on read\n this.cleanupEntry(entry);\n \n return entry.messageIds.has(messageId);\n }\n\n /**\n * Clean up expired entries in a chat entry\n */\n private cleanupEntry(entry: CacheEntry): void {\n const now = Date.now();\n for (const [msgId, timestamp] of entry.timestamps) {\n if (now - timestamp > this.ttlMs) {\n entry.messageIds.delete(msgId);\n entry.timestamps.delete(msgId);\n }\n }\n }\n\n /**\n * Clear all entries for a chat\n */\n clearChat(chatId: number | string): void {\n this.cache.delete(this.getChatKey(chatId));\n }\n\n /**\n * Clear all entries (for testing)\n */\n clearAll(): void {\n this.cache.clear();\n }\n\n /**\n * Get cache statistics\n */\n getStats(): { \n totalChats: number; \n totalMessages: number;\n oldestMessageAt?: Date;\n newestMessageAt?: Date;\n } {\n let totalMessages = 0;\n let oldestTimestamp = Infinity;\n let newestTimestamp = 0;\n\n for (const entry of this.cache.values()) {\n totalMessages += entry.messageIds.size;\n \n for (const timestamp of entry.timestamps.values()) {\n if (timestamp < oldestTimestamp) oldestTimestamp = timestamp;\n if (timestamp > newestTimestamp) newestTimestamp = timestamp;\n }\n }\n\n return {\n totalChats: this.cache.size,\n totalMessages,\n oldestMessageAt: oldestTimestamp !== Infinity ? new Date(oldestTimestamp) : undefined,\n newestMessageAt: newestTimestamp > 0 ? new Date(newestTimestamp) : undefined,\n };\n }\n}\n\n// Singleton instance for the application\nexport const sentMessageCache = new SentMessageCache({\n ttlMs: DEFAULT_TTL_MS,\n cleanupThreshold: 100,\n});\n"],"mappings":";;;;;;;;;AASA,MAAM,iBAAiB,OAAU,KAAK;AActC,IAAa,mBAAb,MAA8B;CAC5B,wBAAgB,IAAI,KAAyB;CAC7C;CACA;CAEA,YAAY,UAAmC,EAAE,EAAE;AACjD,OAAK,QAAQ,QAAQ,SAAS;AAC9B,OAAK,mBAAmB,QAAQ,oBAAoB;;CAGtD,WAAmB,QAAiC;AAClD,SAAO,OAAO,OAAO;;;;;CAMvB,OAAO,QAAyB,WAAyB;EACvD,MAAM,MAAM,KAAK,WAAW,OAAO;EACnC,IAAI,QAAQ,KAAK,MAAM,IAAI,IAAI;AAE/B,MAAI,CAAC,OAAO;AACV,WAAQ;IAAE,4BAAY,IAAI,KAAK;IAAE,4BAAY,IAAI,KAAK;IAAE;AACxD,QAAK,MAAM,IAAI,KAAK,MAAM;;AAG5B,QAAM,WAAW,IAAI,UAAU;AAC/B,QAAM,WAAW,IAAI,WAAW,KAAK,KAAK,CAAC;AAG3C,MAAI,MAAM,WAAW,OAAO,KAAK,iBAC/B,MAAK,aAAa,MAAM;;;;;CAO5B,aAAa,QAAyB,WAA4B;EAChE,MAAM,MAAM,KAAK,WAAW,OAAO;EACnC,MAAM,QAAQ,KAAK,MAAM,IAAI,IAAI;AAEjC,MAAI,CAAC,MACH,QAAO;AAIT,OAAK,aAAa,MAAM;AAExB,SAAO,MAAM,WAAW,IAAI,UAAU;;;;;CAMxC,aAAqB,OAAyB;EAC5C,MAAM,MAAM,KAAK,KAAK;AACtB,OAAK,MAAM,CAAC,OAAO,cAAc,MAAM,WACrC,KAAI,MAAM,YAAY,KAAK,OAAO;AAChC,SAAM,WAAW,OAAO,MAAM;AAC9B,SAAM,WAAW,OAAO,MAAM;;;;;;CAQpC,UAAU,QAA+B;AACvC,OAAK,MAAM,OAAO,KAAK,WAAW,OAAO,CAAC;;;;;CAM5C,WAAiB;AACf,OAAK,MAAM,OAAO;;;;;CAMpB,WAKE;EACA,IAAI,gBAAgB;EACpB,IAAI,kBAAkB;EACtB,IAAI,kBAAkB;AAEtB,OAAK,MAAM,SAAS,KAAK,MAAM,QAAQ,EAAE;AACvC,oBAAiB,MAAM,WAAW;AAElC,QAAK,MAAM,aAAa,MAAM,WAAW,QAAQ,EAAE;AACjD,QAAI,YAAY,gBAAiB,mBAAkB;AACnD,QAAI,YAAY,gBAAiB,mBAAkB;;;AAIvD,SAAO;GACL,YAAY,KAAK,MAAM;GACvB;GACA,iBAAiB,oBAAoB,WAAW,IAAI,KAAK,gBAAgB,GAAG,KAAA;GAC5E,iBAAiB,kBAAkB,IAAI,IAAI,KAAK,gBAAgB,GAAG,KAAA;GACpE;;;AAKL,MAAa,mBAAmB,IAAI,iBAAiB;CACnD,OAAO;CACP,kBAAkB;CACnB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"startup-errors.js","names":[],"sources":["../../../../extensions/telegram/src/startup-errors.ts"],"sourcesContent":["/** Detect Telegram Bot API 401 Unauthorized (invalid/revoked token). */\nexport function isTelegramUnauthorizedTokenError(err: unknown): boolean {\n const text = extractErrorText(err);\n if (!text) return false;\n if (/401/.test(text) && /unauthorized/i.test(text)) return true;\n if (/401:\\s*Unauthorized/i.test(text)) return true;\n return false;\n}\n\nexport function formatTelegramStartupError(err: unknown): string {\n const text = extractErrorText(err);\n if (isTelegramUnauthorizedTokenError(err)) {\n return 'Telegram bot token rejected (401 Unauthorized). Check the token with BotFather or update tokenFile.';\n }\n return text || 'Unknown startup error';\n}\n\nfunction extractErrorText(err: unknown): string {\n if (typeof err === 'string') return err;\n if (err instanceof Error) return err.message;\n if (err && typeof err === 'object' && 'description' in err) {\n const d = (err as { description?: unknown }).description;\n return typeof d === 'string' ? d : '';\n }\n return String(err);\n}\n"],"mappings":";;AACA,SAAgB,iCAAiC,KAAuB;CACtE,MAAM,OAAO,iBAAiB,IAAI;AAClC,KAAI,CAAC,KAAM,QAAO;AAClB,KAAI,MAAM,KAAK,KAAK,IAAI,gBAAgB,KAAK,KAAK,CAAE,QAAO;AAC3D,KAAI,uBAAuB,KAAK,KAAK,CAAE,QAAO;AAC9C,QAAO;;AAGT,SAAgB,2BAA2B,KAAsB;CAC/D,MAAM,OAAO,iBAAiB,IAAI;AAClC,KAAI,iCAAiC,IAAI,CACvC,QAAO;AAET,QAAO,QAAQ;;AAGjB,SAAS,iBAAiB,KAAsB;AAC9C,KAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,KAAI,eAAe,MAAO,QAAO,IAAI;AACrC,KAAI,OAAO,OAAO,QAAQ,YAAY,iBAAiB,KAAK;EAC1D,MAAM,IAAK,IAAkC;AAC7C,SAAO,OAAO,MAAM,WAAW,IAAI;;AAErC,QAAO,OAAO,IAAI"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"telegram-actions.js","names":[],"sources":["../../../../extensions/telegram/src/telegram-actions.ts"],"sourcesContent":["import type { Bot } from 'grammy';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\n\nconst log = createLogger('TelegramActions');\n\nexport async function telegramSetReaction(params: {\n bot: Bot;\n chatId: string;\n messageId: number;\n emoji: string;\n}): Promise<boolean> {\n try {\n await params.bot.api.setMessageReaction(params.chatId, params.messageId, [\n { type: 'emoji', emoji: params.emoji as '👍' },\n ]);\n return true;\n } catch (err) {\n log.warn({ err, chatId: params.chatId, messageId: params.messageId }, 'setMessageReaction failed');\n return false;\n }\n}\n\nexport async function telegramEditMessage(params: {\n bot: Bot;\n chatId: string;\n messageId: number;\n text: string;\n}): Promise<boolean> {\n try {\n await params.bot.api.editMessageText(params.chatId, params.messageId, params.text);\n return true;\n } catch (err) {\n log.warn({ err, chatId: params.chatId, messageId: params.messageId }, 'editMessageText failed');\n return false;\n }\n}\n\nexport async function telegramDeleteMessage(params: {\n bot: Bot;\n chatId: string;\n messageId: number;\n}): Promise<boolean> {\n try {\n await params.bot.api.deleteMessage(params.chatId, params.messageId);\n return true;\n } catch (err) {\n log.warn({ err, chatId: params.chatId, messageId: params.messageId }, 'deleteMessage failed');\n return false;\n }\n}\n\nexport async function telegramSendPoll(params: {\n bot: Bot;\n chatId: string;\n question: string;\n options: string[];\n threadId?: number;\n}): Promise<number | undefined> {\n try {\n const result = await params.bot.api.sendPoll(params.chatId, params.question, params.options, {\n ...(params.threadId ? { message_thread_id: params.threadId } : {}),\n is_anonymous: true,\n });\n return result.message_id;\n } catch (err) {\n log.warn({ err, chatId: params.chatId }, 'sendPoll failed');\n return undefined;\n }\n}\n"],"mappings":";;;aAC4D;AAE5D,MAAM,MAAM,aAAa,kBAAkB;AAE3C,eAAsB,oBAAoB,QAKrB;AACnB,KAAI;AACF,QAAM,OAAO,IAAI,IAAI,mBAAmB,OAAO,QAAQ,OAAO,WAAW,CACvE;GAAE,MAAM;GAAS,OAAO,OAAO;GAAe,CAC/C,CAAC;AACF,SAAO;UACA,KAAK;AACZ,MAAI,KAAK;GAAE;GAAK,QAAQ,OAAO;GAAQ,WAAW,OAAO;GAAW,EAAE,4BAA4B;AAClG,SAAO;;;AAIX,eAAsB,oBAAoB,QAKrB;AACnB,KAAI;AACF,QAAM,OAAO,IAAI,IAAI,gBAAgB,OAAO,QAAQ,OAAO,WAAW,OAAO,KAAK;AAClF,SAAO;UACA,KAAK;AACZ,MAAI,KAAK;GAAE;GAAK,QAAQ,OAAO;GAAQ,WAAW,OAAO;GAAW,EAAE,yBAAyB;AAC/F,SAAO;;;AAIX,eAAsB,sBAAsB,QAIvB;AACnB,KAAI;AACF,QAAM,OAAO,IAAI,IAAI,cAAc,OAAO,QAAQ,OAAO,UAAU;AACnE,SAAO;UACA,KAAK;AACZ,MAAI,KAAK;GAAE;GAAK,QAAQ,OAAO;GAAQ,WAAW,OAAO;GAAW,EAAE,uBAAuB;AAC7F,SAAO;;;AAIX,eAAsB,iBAAiB,QAMP;AAC9B,KAAI;AAKF,UAAO,MAJc,OAAO,IAAI,IAAI,SAAS,OAAO,QAAQ,OAAO,UAAU,OAAO,SAAS;GAC3F,GAAI,OAAO,WAAW,EAAE,mBAAmB,OAAO,UAAU,GAAG,EAAE;GACjE,cAAc;GACf,CAAC,EACY;UACP,KAAK;AACZ,MAAI,KAAK;GAAE;GAAK,QAAQ,OAAO;GAAQ,EAAE,kBAAkB;AAC3D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"telegram-draft-errors.js","names":[],"sources":["../../../../extensions/telegram/src/telegram-draft-errors.ts"],"sourcesContent":["/**\n * Error classification for Telegram draft streaming.\n */\n\nexport function extractTelegramErrorText(err: unknown): string {\n return typeof err === 'string'\n ? err\n : err instanceof Error\n ? err.message\n : typeof err === 'object' && err && 'description' in err\n ? typeof (err as { description?: unknown }).description === 'string'\n ? (err as { description: string }).description\n : ''\n : '';\n}\n\nexport function shouldFallbackFromDraftTransport(err: unknown): boolean {\n const text = extractTelegramErrorText(err);\n if (!/sendMessageDraft/i.test(text)) {\n return false;\n }\n return (\n /(unknown method|method .*not (found|available|supported)|unsupported)/i.test(text) ||\n /(can't be used|can be used only)/i.test(text)\n );\n}\n\nconst THREAD_NOT_FOUND_RE =\n /400:\\s*Bad Request:\\s*message thread not found/i;\n\nexport function isTelegramThreadNotFoundError(err: unknown): boolean {\n return THREAD_NOT_FOUND_RE.test(extractTelegramErrorText(err));\n}\n\nexport function isSafeToRetrySendError(err: unknown): boolean {\n const text = extractTelegramErrorText(err);\n return /ECONNRESET|ETIMEDOUT|ENOTFOUND|ENETUNREACH|EAI_AGAIN|socket hang up/i.test(text);\n}\n\nexport function isTelegramClientRejection(err: unknown): boolean {\n const text = extractTelegramErrorText(err);\n return /400:\\s*Bad Request|403:|404:/i.test(text);\n}\n"],"mappings":";;;;AAIA,SAAgB,yBAAyB,KAAsB;AAC7D,QAAO,OAAO,QAAQ,WAClB,MACA,eAAe,QACb,IAAI,UACJ,OAAO,QAAQ,YAAY,OAAO,iBAAiB,MACjD,OAAQ,IAAkC,gBAAgB,WACvD,IAAgC,cACjC,KACF;;AAGV,SAAgB,iCAAiC,KAAuB;CACtE,MAAM,OAAO,yBAAyB,IAAI;AAC1C,KAAI,CAAC,oBAAoB,KAAK,KAAK,CACjC,QAAO;AAET,QACE,yEAAyE,KAAK,KAAK,IACnF,oCAAoC,KAAK,KAAK;;AAIlD,MAAM,sBACJ;AAEF,SAAgB,8BAA8B,KAAuB;AACnE,QAAO,oBAAoB,KAAK,yBAAyB,IAAI,CAAC;;AAGhE,SAAgB,uBAAuB,KAAuB;CAC5D,MAAM,OAAO,yBAAyB,IAAI;AAC1C,QAAO,uEAAuE,KAAK,KAAK;;AAG1F,SAAgB,0BAA0B,KAAuB;CAC/D,MAAM,OAAO,yBAAyB,IAAI;AAC1C,QAAO,gCAAgC,KAAK,KAAK"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"thread-bindings.js","names":[],"sources":["../../../../extensions/telegram/src/thread-bindings.ts"],"sourcesContent":["/**\n * Thread bindings (/focus) — scaffold for OpenClaw parity (Phase 4).\n * Full implementation requires subagent spawn + session focus routing.\n */\n\nexport interface TelegramThreadBinding {\n sessionKey: string;\n chatId: string;\n threadId?: string;\n createdAtMs: number;\n lastActivityMs: number;\n}\n\nconst bindings = new Map<string, TelegramThreadBinding>();\n\nfunction bindingKey(chatId: string, threadId?: string): string {\n return threadId ? `${chatId}:topic:${threadId}` : chatId;\n}\n\nexport function setTelegramThreadBinding(binding: TelegramThreadBinding): void {\n bindings.set(bindingKey(binding.chatId, binding.threadId), binding);\n}\n\nexport function getTelegramThreadBinding(chatId: string, threadId?: string): TelegramThreadBinding | undefined {\n return bindings.get(bindingKey(chatId, threadId));\n}\n\nexport function clearTelegramThreadBinding(chatId: string, threadId?: string): void {\n bindings.delete(bindingKey(chatId, threadId));\n}\n\nexport function sweepIdleTelegramThreadBindings(idleTimeoutMs: number): void {\n const now = Date.now();\n for (const [key, binding] of bindings) {\n if (now - binding.lastActivityMs > idleTimeoutMs) {\n bindings.delete(key);\n }\n }\n}\n"],"mappings":";AAaA,MAAM,2BAAW,IAAI,KAAoC;AAEzD,SAAS,WAAW,QAAgB,UAA2B;AAC7D,QAAO,WAAW,GAAG,OAAO,SAAS,aAAa;;AAGpD,SAAgB,yBAAyB,SAAsC;AAC7E,UAAS,IAAI,WAAW,QAAQ,QAAQ,QAAQ,SAAS,EAAE,QAAQ;;AAGrE,SAAgB,yBAAyB,QAAgB,UAAsD;AAC7G,QAAO,SAAS,IAAI,WAAW,QAAQ,SAAS,CAAC;;AAGnD,SAAgB,2BAA2B,QAAgB,UAAyB;AAClF,UAAS,OAAO,WAAW,QAAQ,SAAS,CAAC;;AAG/C,SAAgB,gCAAgC,eAA6B;CAC3E,MAAM,MAAM,KAAK,KAAK;AACtB,MAAK,MAAM,CAAC,KAAK,YAAY,SAC3B,KAAI,MAAM,QAAQ,iBAAiB,cACjC,UAAS,OAAO,IAAI"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"timeout-abort.js","names":[],"sources":["../../../../extensions/telegram/src/timeout-abort.ts"],"sourcesContent":["import { AbortController } from 'abort-controller';\n\n/** grammY `Api` expects `abort-controller` signals, not Node/DOM `AbortSignal.timeout()`. */\nexport function createTimeoutAbortSignal(ms: number): {\n signal: InstanceType<typeof AbortController>['signal'];\n dispose: () => void;\n} {\n const ac = new AbortController();\n const t = setTimeout(() => ac.abort(), ms);\n return {\n signal: ac.signal,\n dispose: () => clearTimeout(t),\n };\n}\n"],"mappings":";;;AAGA,SAAgB,yBAAyB,IAGvC;CACA,MAAM,KAAK,IAAI,iBAAiB;CAChC,MAAM,IAAI,iBAAiB,GAAG,OAAO,EAAE,GAAG;AAC1C,QAAO;EACL,QAAQ,GAAG;EACX,eAAe,aAAa,EAAE;EAC/B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"token-resolver.js","names":[],"sources":["../../../../extensions/telegram/src/token-resolver.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\n\n/** Resolve bot token from inline value or tokenFile path. */\nexport function resolveTelegramBotToken(params: {\n botToken?: string;\n tokenFile?: string;\n}): { token: string; source: 'inline' | 'file' | 'none' } {\n const inline = params.botToken?.trim() ?? '';\n if (inline) {\n return { token: inline, source: 'inline' };\n }\n const filePath = params.tokenFile?.trim();\n if (!filePath) {\n return { token: '', source: 'none' };\n }\n try {\n const raw = readFileSync(filePath, 'utf8').trim();\n return raw ? { token: raw, source: 'file' } : { token: '', source: 'none' };\n } catch {\n return { token: '', source: 'none' };\n }\n}\n"],"mappings":";;;AAGA,SAAgB,wBAAwB,QAGkB;CACxD,MAAM,SAAS,OAAO,UAAU,MAAM,IAAI;AAC1C,KAAI,OACF,QAAO;EAAE,OAAO;EAAQ,QAAQ;EAAU;CAE5C,MAAM,WAAW,OAAO,WAAW,MAAM;AACzC,KAAI,CAAC,SACH,QAAO;EAAE,OAAO;EAAI,QAAQ;EAAQ;AAEtC,KAAI;EACF,MAAM,MAAM,aAAa,UAAU,OAAO,CAAC,MAAM;AACjD,SAAO,MAAM;GAAE,OAAO;GAAK,QAAQ;GAAQ,GAAG;GAAE,OAAO;GAAI,QAAQ;GAAQ;SACrE;AACN,SAAO;GAAE,OAAO;GAAI,QAAQ;GAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-offset-store.js","names":[],"sources":["../../../../extensions/telegram/src/update-offset-store.ts"],"sourcesContent":["import { mkdirSync, readFileSync, writeFileSync, renameSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { resolveStateDir } from '@xopcai/xopc/config/paths.js';\n\nconst STORE_VERSION = 2;\n\ntype TelegramUpdateOffsetState = {\n version: number;\n lastUpdateId: number | null;\n botId: string | null;\n};\n\nfunction normalizeAccountId(accountId?: string): string {\n const trimmed = accountId?.trim();\n if (!trimmed) return 'default';\n return trimmed.replace(/[^a-z0-9._-]+/gi, '_');\n}\n\nfunction resolveOffsetPath(accountId?: string): string {\n const stateDir = resolveStateDir();\n const dir = join(stateDir, 'telegram');\n mkdirSync(dir, { recursive: true });\n return join(dir, `update-offset-${normalizeAccountId(accountId)}.json`);\n}\n\nfunction extractBotIdFromToken(token?: string): string | null {\n const trimmed = token?.trim();\n if (!trimmed) return null;\n const [rawBotId] = trimmed.split(':', 1);\n if (!rawBotId || !/^\\d+$/.test(rawBotId)) return null;\n return rawBotId;\n}\n\nfunction safeParseState(raw: string): TelegramUpdateOffsetState | null {\n try {\n const parsed = JSON.parse(raw) as {\n version?: number;\n lastUpdateId?: number | null;\n botId?: string | null;\n };\n if (parsed?.version !== STORE_VERSION && parsed?.version !== 1) return null;\n if (parsed.lastUpdateId != null && (!Number.isSafeInteger(parsed.lastUpdateId) || parsed.lastUpdateId < 0)) {\n return null;\n }\n return {\n version: STORE_VERSION,\n lastUpdateId: parsed.lastUpdateId ?? null,\n botId: parsed.version === STORE_VERSION ? (parsed.botId ?? null) : null,\n };\n } catch {\n return null;\n }\n}\n\nexport function readTelegramUpdateOffset(params: {\n accountId?: string;\n botToken?: string;\n}): number | undefined {\n const path = resolveOffsetPath(params.accountId);\n try {\n const raw = readFileSync(path, 'utf8');\n const state = safeParseState(raw);\n if (!state || state.lastUpdateId == null) return undefined;\n const botId = extractBotIdFromToken(params.botToken);\n if (state.botId && botId && state.botId !== botId) return undefined;\n return state.lastUpdateId;\n } catch {\n return undefined;\n }\n}\n\nexport function writeTelegramUpdateOffset(params: {\n accountId?: string;\n botToken?: string;\n lastUpdateId: number;\n}): void {\n if (!Number.isSafeInteger(params.lastUpdateId) || params.lastUpdateId < 0) return;\n const path = resolveOffsetPath(params.accountId);\n const tmp = `${path}.tmp`;\n const state: TelegramUpdateOffsetState = {\n version: STORE_VERSION,\n lastUpdateId: params.lastUpdateId,\n botId: extractBotIdFromToken(params.botToken),\n };\n writeFileSync(tmp, JSON.stringify(state, null, 2), 'utf8');\n renameSync(tmp, path);\n}\n"],"mappings":";;;;;YAE+D;AAE/D,MAAM,gBAAgB;AAQtB,SAAS,mBAAmB,WAA4B;CACtD,MAAM,UAAU,WAAW,MAAM;AACjC,KAAI,CAAC,QAAS,QAAO;AACrB,QAAO,QAAQ,QAAQ,mBAAmB,IAAI;;AAGhD,SAAS,kBAAkB,WAA4B;CAErD,MAAM,MAAM,KADK,iBACQ,EAAE,WAAW;AACtC,WAAU,KAAK,EAAE,WAAW,MAAM,CAAC;AACnC,QAAO,KAAK,KAAK,iBAAiB,mBAAmB,UAAU,CAAC,OAAO;;AAGzE,SAAS,sBAAsB,OAA+B;CAC5D,MAAM,UAAU,OAAO,MAAM;AAC7B,KAAI,CAAC,QAAS,QAAO;CACrB,MAAM,CAAC,YAAY,QAAQ,MAAM,KAAK,EAAE;AACxC,KAAI,CAAC,YAAY,CAAC,QAAQ,KAAK,SAAS,CAAE,QAAO;AACjD,QAAO;;AAGT,SAAS,eAAe,KAA+C;AACrE,KAAI;EACF,MAAM,SAAS,KAAK,MAAM,IAAI;AAK9B,MAAI,QAAQ,YAAY,iBAAiB,QAAQ,YAAY,EAAG,QAAO;AACvE,MAAI,OAAO,gBAAgB,SAAS,CAAC,OAAO,cAAc,OAAO,aAAa,IAAI,OAAO,eAAe,GACtG,QAAO;AAET,SAAO;GACL,SAAS;GACT,cAAc,OAAO,gBAAgB;GACrC,OAAO,OAAO,YAAY,gBAAiB,OAAO,SAAS,OAAQ;GACpE;SACK;AACN,SAAO;;;AAIX,SAAgB,yBAAyB,QAGlB;CACrB,MAAM,OAAO,kBAAkB,OAAO,UAAU;AAChD,KAAI;EAEF,MAAM,QAAQ,eADF,aAAa,MAAM,OACC,CAAC;AACjC,MAAI,CAAC,SAAS,MAAM,gBAAgB,KAAM,QAAO,KAAA;EACjD,MAAM,QAAQ,sBAAsB,OAAO,SAAS;AACpD,MAAI,MAAM,SAAS,SAAS,MAAM,UAAU,MAAO,QAAO,KAAA;AAC1D,SAAO,MAAM;SACP;AACN;;;AAIJ,SAAgB,0BAA0B,QAIjC;AACP,KAAI,CAAC,OAAO,cAAc,OAAO,aAAa,IAAI,OAAO,eAAe,EAAG;CAC3E,MAAM,OAAO,kBAAkB,OAAO,UAAU;CAChD,MAAM,MAAM,GAAG,KAAK;CACpB,MAAM,QAAmC;EACvC,SAAS;EACT,cAAc,OAAO;EACrB,OAAO,sBAAsB,OAAO,SAAS;EAC9C;AACD,eAAc,KAAK,KAAK,UAAU,OAAO,MAAM,EAAE,EAAE,OAAO;AAC1D,YAAW,KAAK,KAAK"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow-progress.js","names":[],"sources":["../../../../extensions/telegram/src/workflow-progress.ts"],"sourcesContent":["/**\n * Telegram capability for the {@link WorkflowProgressBroker}.\n *\n * Strategy: send the first progress update as a fresh message, then edit it in\n * place on every subsequent update. The broker enforces per-channel throttle\n * (default 5 s) and bypasses it for key events (phase change / new error /\n * tool_end), so users always see milestones promptly without us hammering\n * Telegram's edit rate limit.\n *\n * Failure handling is intentionally narrow:\n * - `message is not modified` from `editMessageText` → swallow (it's a\n * no-op the broker shouldn't retry).\n * - Lost / inaccessible message during edit → fall back to a new send so\n * the user always sees the latest snapshot.\n * - 429 / network → bubble up, broker logs and drops the update; the next\n * scheduled (or key) tick will retry.\n *\n * We deliberately use plain text (no parse_mode) — the snapshot renderer\n * emits ASCII-friendly output and we don't want HTML/markdown surprises with\n * `<` in agent labels or shell-style payloads.\n */\n\nimport type { ChannelProgressCapability, WorkflowProgressPostInput } from '@xopcai/xopc/agent/workflow/channel-capability.js';\nimport { parseSessionKey } from '@xopcai/xopc/routing/session-key.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\n\nimport type { TelegramAccountManager } from './account-manager.js';\n\nconst log = createLogger('TelegramWorkflowProgress');\n\n/** Telegram bot API: 4096 char hard cap; leave 96 chars of headroom for re-renders. */\nconst TELEGRAM_TEXT_MAX = 4000;\n\n/** Telegram bot edit rate ≈ 1/s per chat; broker default 5 s leaves ample headroom. */\nconst DEFAULT_THROTTLE_MS = 5_000;\n\nexport function createTelegramWorkflowProgressCapability(\n accountManager: TelegramAccountManager,\n): ChannelProgressCapability {\n return {\n channelId: 'telegram',\n supportsEdit: true,\n defaultThrottleMs: DEFAULT_THROTTLE_MS,\n defaultMode: 'edit',\n\n async postProgress(input: WorkflowProgressPostInput) {\n const target = resolveTarget(input.sessionKey);\n if (!target) {\n throw new Error(`telegram workflow progress: cannot route sessionKey \"${input.sessionKey}\"`);\n }\n const bot = accountManager.getBot(target.accountId);\n if (!bot) {\n throw new Error(\n `telegram workflow progress: no bot for accountId \"${target.accountId}\" (sessionKey \"${input.sessionKey}\")`,\n );\n }\n\n const text = clampForTelegram(input.text);\n\n // Edit-in-place when we have a previous message id and we're not on the\n // final send (final could be substantially longer; sending fresh keeps\n // the conclusion visible even when scrolled past the streaming bubble).\n if (input.previousMessageId && !input.isFinal) {\n try {\n await bot.api.editMessageText(\n target.chatId,\n Number(input.previousMessageId),\n text,\n );\n return { messageId: input.previousMessageId };\n } catch (err) {\n if (isMessageNotModified(err)) {\n // Snapshot rendered identically to the last edit (e.g. only\n // running spinner ticked) — silently keep the same message id.\n return { messageId: input.previousMessageId };\n }\n if (isEditTargetGone(err)) {\n log.debug(\n { sessionKey: input.sessionKey, previousMessageId: input.previousMessageId },\n 'edit target gone; falling back to sendMessage',\n );\n // fall through to the send path below\n } else {\n throw err;\n }\n }\n }\n\n const sent = await bot.api.sendMessage(target.chatId, text, {\n message_thread_id: target.threadId ? Number(target.threadId) : undefined,\n disable_notification: !input.isFinal,\n });\n return { messageId: String(sent.message_id) };\n },\n };\n}\n\ninterface ResolvedTarget {\n accountId: string;\n chatId: string;\n threadId?: string;\n}\n\nfunction resolveTarget(sessionKey: string): ResolvedTarget | null {\n const parsed = parseSessionKey(sessionKey);\n if (!parsed) return null;\n if (parsed.source !== 'telegram') return null;\n if (!parsed.peerId) return null;\n return {\n accountId: parsed.accountId,\n chatId: parsed.peerId,\n threadId: parsed.threadId,\n };\n}\n\nfunction clampForTelegram(text: string): string {\n if (text.length <= TELEGRAM_TEXT_MAX) return text;\n return `${text.slice(0, TELEGRAM_TEXT_MAX - 1)}…`;\n}\n\nfunction isMessageNotModified(err: unknown): boolean {\n const msg = errorMessage(err).toLowerCase();\n return msg.includes('message is not modified');\n}\n\nfunction isEditTargetGone(err: unknown): boolean {\n const msg = errorMessage(err).toLowerCase();\n return (\n msg.includes('message to edit not found') ||\n msg.includes(\"message can't be edited\") ||\n msg.includes('chat not found')\n );\n}\n\nfunction errorMessage(err: unknown): string {\n if (!err) return '';\n if (err instanceof Error) return err.message;\n return String(err);\n}\n"],"mappings":";;;;kBAuBsE;aACV;AAI5D,MAAM,MAAM,aAAa,2BAA2B;;AAGpD,MAAM,oBAAoB;;AAG1B,MAAM,sBAAsB;AAE5B,SAAgB,yCACd,gBAC2B;AAC3B,QAAO;EACL,WAAW;EACX,cAAc;EACd,mBAAmB;EACnB,aAAa;EAEb,MAAM,aAAa,OAAkC;GACnD,MAAM,SAAS,cAAc,MAAM,WAAW;AAC9C,OAAI,CAAC,OACH,OAAM,IAAI,MAAM,wDAAwD,MAAM,WAAW,GAAG;GAE9F,MAAM,MAAM,eAAe,OAAO,OAAO,UAAU;AACnD,OAAI,CAAC,IACH,OAAM,IAAI,MACR,qDAAqD,OAAO,UAAU,iBAAiB,MAAM,WAAW,IACzG;GAGH,MAAM,OAAO,iBAAiB,MAAM,KAAK;AAKzC,OAAI,MAAM,qBAAqB,CAAC,MAAM,QACpC,KAAI;AACF,UAAM,IAAI,IAAI,gBACZ,OAAO,QACP,OAAO,MAAM,kBAAkB,EAC/B,KACD;AACD,WAAO,EAAE,WAAW,MAAM,mBAAmB;YACtC,KAAK;AACZ,QAAI,qBAAqB,IAAI,CAG3B,QAAO,EAAE,WAAW,MAAM,mBAAmB;AAE/C,QAAI,iBAAiB,IAAI,CACvB,KAAI,MACF;KAAE,YAAY,MAAM;KAAY,mBAAmB,MAAM;KAAmB,EAC5E,gDACD;QAGD,OAAM;;GAKZ,MAAM,OAAO,MAAM,IAAI,IAAI,YAAY,OAAO,QAAQ,MAAM;IAC1D,mBAAmB,OAAO,WAAW,OAAO,OAAO,SAAS,GAAG,KAAA;IAC/D,sBAAsB,CAAC,MAAM;IAC9B,CAAC;AACF,UAAO,EAAE,WAAW,OAAO,KAAK,WAAW,EAAE;;EAEhD;;AASH,SAAS,cAAc,YAA2C;CAChE,MAAM,SAAS,gBAAgB,WAAW;AAC1C,KAAI,CAAC,OAAQ,QAAO;AACpB,KAAI,OAAO,WAAW,WAAY,QAAO;AACzC,KAAI,CAAC,OAAO,OAAQ,QAAO;AAC3B,QAAO;EACL,WAAW,OAAO;EAClB,QAAQ,OAAO;EACf,UAAU,OAAO;EAClB;;AAGH,SAAS,iBAAiB,MAAsB;AAC9C,KAAI,KAAK,UAAU,kBAAmB,QAAO;AAC7C,QAAO,GAAG,KAAK,MAAM,GAAG,oBAAoB,EAAE,CAAC;;AAGjD,SAAS,qBAAqB,KAAuB;AAEnD,QADY,aAAa,IAAI,CAAC,aACpB,CAAC,SAAS,0BAA0B;;AAGhD,SAAS,iBAAiB,KAAuB;CAC/C,MAAM,MAAM,aAAa,IAAI,CAAC,aAAa;AAC3C,QACE,IAAI,SAAS,4BAA4B,IACzC,IAAI,SAAS,0BAA0B,IACvC,IAAI,SAAS,iBAAiB;;AAIlC,SAAS,aAAa,KAAsB;AAC1C,KAAI,CAAC,IAAK,QAAO;AACjB,KAAI,eAAe,MAAO,QAAO,IAAI;AACrC,QAAO,OAAO,IAAI"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"onboard-cli.js","names":[],"sources":["../../../../../extensions/weixin/src/adapters/onboard-cli.ts"],"sourcesContent":["/**\n * Weixin interactive onboarding — {@link ChannelOnboardAdapter} (QR scan).\n */\n\nimport { confirm } from '@inquirer/prompts';\n\nimport type { Config } from '@xopcai/xopc/config/schema.js';\nimport type { ChannelOnboardAdapter } from '@xopcai/xopc/channels/plugins/types.adapters.js';\nimport { resolveConfigPath } from '@xopcai/xopc/config/paths.js';\n\nimport { resolveWeixinAccount, listWeixinAccountIds } from '../auth/accounts.js';\nimport { mergeWeixinConfigAfterLogin, runWeixinQrLoginCli } from '../cli/qr-login.js';\n\nexport function isWeixinOnboardConfigured(config: Config): boolean {\n const ids = listWeixinAccountIds(config);\n for (const id of ids) {\n try {\n if (resolveWeixinAccount(config, id).configured) return true;\n } catch {\n // Skip invalid ids\n }\n }\n return false;\n}\n\nfunction resolveCliConfigPath(): string {\n return (\n process.env.XOPC_CONFIG_PATH?.trim() ||\n process.env.XOPC_CONFIG?.trim() ||\n resolveConfigPath()\n );\n}\n\nasync function configureWeixin(config: Config): Promise<Config> {\n console.log(`\\n${'='.repeat(50)}`);\n console.log('💬 Weixin (WeChat ilink)');\n console.log(`${'='.repeat(50)}\\n`);\n\n if (isWeixinOnboardConfigured(config)) {\n const rescan = await confirm({\n message: 'Weixin appears configured. Scan QR again to replace login?',\n default: false,\n });\n if (!rescan) {\n console.log('ℹ️ Weixin onboarding skipped.');\n return config;\n }\n } else {\n const proceed = await confirm({\n message: 'Log in with WeChat using a QR scan?',\n default: true,\n });\n if (!proceed) {\n console.log('ℹ️ Weixin onboarding skipped.');\n console.log(' Configure later with: xopc onboard --channels\\n');\n return config;\n }\n }\n\n const configPath = resolveCliConfigPath();\n const result = await runWeixinQrLoginCli({\n configPath,\n writeConfig: true,\n existingConfig: config,\n });\n\n if (!result.ok || !result.accountId) {\n console.log(`\\n⚠️ ${result.message || 'Weixin login did not complete.'}`);\n console.log(' You can retry from channel setup with: xopc onboard --channels\\n');\n return config;\n }\n\n const merged = mergeWeixinConfigAfterLogin(config, result.accountId);\n console.log('\\n✅ Weixin onboarding complete\\n');\n return merged;\n}\n\nexport const weixinOnboardAdapter: ChannelOnboardAdapter = {\n isConfigured: isWeixinOnboardConfigured,\n configure: configureWeixin,\n};\n"],"mappings":";;;;;;;;YAQiE;AAKjE,SAAgB,0BAA0B,QAAyB;CACjE,MAAM,MAAM,qBAAqB,OAAO;AACxC,MAAK,MAAM,MAAM,IACf,KAAI;AACF,MAAI,qBAAqB,QAAQ,GAAG,CAAC,WAAY,QAAO;SAClD;AAIV,QAAO;;AAGT,SAAS,uBAA+B;AACtC,QACE,QAAQ,IAAI,kBAAkB,MAAM,IACpC,QAAQ,IAAI,aAAa,MAAM,IAC/B,mBAAmB;;AAIvB,eAAe,gBAAgB,QAAiC;AAC9D,SAAQ,IAAI,KAAK,IAAI,OAAO,GAAG,GAAG;AAClC,SAAQ,IAAI,2BAA2B;AACvC,SAAQ,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI;AAElC,KAAI,0BAA0B,OAAO;MAK/B,CAAC,MAJgB,QAAQ;GAC3B,SAAS;GACT,SAAS;GACV,CAAC,EACW;AACX,WAAQ,IAAI,iCAAiC;AAC7C,UAAO;;YAOL,CAAC,MAJiB,QAAQ;EAC5B,SAAS;EACT,SAAS;EACV,CAAC,EACY;AACZ,UAAQ,IAAI,iCAAiC;AAC7C,UAAQ,IAAI,qDAAqD;AACjE,SAAO;;CAKX,MAAM,SAAS,MAAM,oBAAoB;EACvC,YAFiB,sBAEP;EACV,aAAa;EACb,gBAAgB;EACjB,CAAC;AAEF,KAAI,CAAC,OAAO,MAAM,CAAC,OAAO,WAAW;AACnC,UAAQ,IAAI,SAAS,OAAO,WAAW,mCAAmC;AAC1E,UAAQ,IAAI,sEAAsE;AAClF,SAAO;;CAGT,MAAM,SAAS,4BAA4B,QAAQ,OAAO,UAAU;AACpE,SAAQ,IAAI,mCAAmC;AAC/C,QAAO;;AAGT,MAAa,uBAA8C;CACzD,cAAc;CACd,WAAW;CACZ"}
@@ -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":";;;;;;;aAK6D;AAmC7D,SAAgB,yBAAyB,KAAa,aAA8D;CAElH,MAAM,eADU,IAAI,UAAU,SACD;CAC7B,MAAM,kBACJ,OAAO,gBAAgB,WACnB,OAAO,YAAY,GACnB,OAAO,gBAAgB,YAAY,YAAY,MAAM,GACnD,YAAY,MAAM,GAClB,KAAA;AAER,KAAI,aAAa,MAAM,CACrB,KAAI;EACF,MAAM,IAAI,qBAAqB,KAAK,YAAY;AAChD,SAAO;GAAE,SAAS,EAAE;GAAS,UAAU,EAAE,YAAY;GAAiB;SAChE;AAIV,QAAO;EAAE,SAAS;EAAkB,UAAU;EAAiB;;AAGjE,SAAgB,4BAA4B,KAAa,qBAAqC;CAC5F,MAAM,OAAO,IAAI,UAAU;CAC3B,MAAM,eAAgB,MAAM,YAAoE,EAAE;CAClG,MAAM,SAAS;EACb,GAAG;EACH,UAAU;GACR,GAAG,IAAI;GACP,QAAQ;IACN,GAAI,QAAQ,EAAE;IACd,SAAS;IACT,UAAU;KACR,GAAG;MACF,sBAAsB;MACrB,GAAI,aAAa,wBAAwB,EAAE;MAC3C,SAAS;MACV;KACF;IACF;GACF;EACF;AACD,QAAO,aAAa,MAAM,OAAO;;;;;AAMnC,eAAsB,oBAAoB,MAIvC;CACD,MAAM,aAAa,KAAK,cAAc,QAAQ,IAAI;CAClD,MAAM,EAAE,eAAe,MAAM,OAAO;CACpC,MAAM,MAAM,KAAK,kBAAkB,WAAW,WAAW;CACzD,MAAM,EAAE,SAAS,aAAa,yBAAyB,KAAK,KAAK,QAAQ;CACzE,MAAM,YAAY,KAAK,aAAa;CACpC,MAAM,UAAU,QAAQ,KAAK,QAAQ;AAErC,SAAQ,IAAI,uBAAuB;AACnC,SAAQ,IAAI,gBAAgB,QAAQ,IAAI;CAExC,MAAM,cAAc,MAAM,uBAAuB;EAC/C,WAAW,KAAK,SAAS,MAAM,IAAI,KAAA;EACnC,SAAA;EACA;EACA;EACD,CAAC;AAEF,KAAI,CAAC,YAAY,UACf,QAAO;EAAE,IAAI;EAAO,SAAS,YAAY,WAAW;EAAyB;AAG/E,SAAQ,IAAI,mCAAmC;AAC/C,KAAI;EACF,MAAM,iBAAiB,MAAM;;GAA0B;;AACvD,QAAM,IAAI,SAAe,YAAY;AACnC,kBAAe,QAAQ,SAAS,YAAY,WAAY,EAAE,OAAO,MAAM,GAAG,OAAe;AACvF,YAAQ,IAAI,GAAG;AACf,aAAS;KACT;IACF;SACI;AACN,UAAQ,IAAI,wCAAwC;AACpD,UAAQ,IAAI,YAAY,UAAU;;AAEpC,SAAQ,IAAI,kCAAkC;CAE9C,MAAM,aAAa,MAAM,mBAAmB;EAC1C,YAAY,YAAY;EACxB;EACA;EACA;EACA,SAAA;EACD,CAAC;AAEF,KAAI,CAAC,WAAW,aAAa,CAAC,WAAW,YAAY,CAAC,WAAW,UAC/D,QAAO;EACL,IAAI;EACJ,SAAS,WAAW,WAAW;EAChC;CAGH,MAAM,eAAe,yBAAyB,WAAW,UAAU;AAEnE,KAAI;AACF,oBAAkB,cAAc;GAC9B,OAAO,WAAW;GAClB,SAAS,WAAW,SAAS,MAAM,IAAI;GACvC,QAAQ,WAAW;GACpB,CAAC;AACF,0BAAwB,aAAa;AACrC,MAAI,WAAW,OACb,6BAA4B,cAAc,WAAW,QAAQ,6BAA6B;UAErF,KAAK;AACZ,SAAO,MAAM,kCAAkC,OAAO,IAAI,GAAG;AAC7D,SAAO;GAAE,IAAI;GAAO,SAAS,uBAAuB,OAAO,IAAI;GAAI;;AAGrE,KAAI,KAAK,gBAAgB,MACvB,KAAI;EACF,MAAM,OAAO,4BAA4B,KAAK,aAAa;EAC3D,MAAM,EAAE,eAAe,MAAM,OAAO;AACpC,QAAM,WAAW,MAAM,WAAW;UAC3B,KAAK;AACZ,SAAO,KAAK,oDAAoD,OAAO,IAAI,GAAG;;AAIlF,SAAQ,IAAI,oCAAoC,aAAa,IAAI;AACjE,SAAQ,IAAI,qDAAqD;AAEjE,QAAO;EAAE,IAAI;EAAM,WAAW;EAAc,SAAS;EAAM"}
@@ -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":"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"}
@@ -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"}