@seqyuan/annodex 0.1.72 → 0.1.75

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 (249) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +8 -7
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.js +1 -1
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/routes-manifest.json +6 -0
  8. package/.next/server/app/_global-error/page.js +2 -2
  9. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/_global-error.html +1 -1
  11. package/.next/server/app/_global-error.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/.next/server/app/_not-found/page.js +2 -2
  19. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/_not-found.html +1 -1
  21. package/.next/server/app/_not-found.rsc +17 -16
  22. package/.next/server/app/_not-found.segments/_full.segment.rsc +17 -16
  23. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_index.segment.rsc +6 -5
  25. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  26. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  27. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  28. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  29. package/.next/server/app/api/agent/[id]/route.js +1 -1
  30. package/.next/server/app/api/agent/new/route.js +1 -1
  31. package/.next/server/app/api/agent/runtime/route.js +2 -2
  32. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  33. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  34. package/.next/server/app/api/auth/login/[provider]/route.js +1 -1
  35. package/.next/server/app/api/auth/login/route.js +1 -1
  36. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  37. package/.next/server/app/api/auth/providers/route.js +1 -1
  38. package/.next/server/app/api/auth/status/route.js +1 -1
  39. package/.next/server/app/api/default-cwd/route.js +1 -1
  40. package/.next/server/app/api/extensions/discover/route.js +1 -1
  41. package/.next/server/app/api/extensions/mcp/route.js +1 -1
  42. package/.next/server/app/api/extensions/plugin/route.js +1 -1
  43. package/.next/server/app/api/extensions/plugin-marketplace/route.js +1 -1
  44. package/.next/server/app/api/extensions/route.js +1 -1
  45. package/.next/server/app/api/extensions/session/route.js +1 -1
  46. package/.next/server/app/api/files/[...path]/route.js +1 -1
  47. package/.next/server/app/api/harness/route.js +1 -1
  48. package/.next/server/app/api/home/route.js +1 -1
  49. package/.next/server/app/api/im/gateway-status/route.js +2 -0
  50. package/.next/server/app/api/im/gateway-status/route.js.nft.json +1 -0
  51. package/.next/server/app/api/im/gateway-status/route_client-reference-manifest.js +1 -0
  52. package/.next/server/app/api/im/gateway-token/route.js +1 -1
  53. package/.next/server/app/api/im/project/route.js +2 -2
  54. package/.next/server/app/api/im/projects/route.js +1 -1
  55. package/.next/server/app/api/im/turn/route.js +2 -2
  56. package/.next/server/app/api/images/upload/route.js +1 -1
  57. package/.next/server/app/api/internal/runtime/route.js +1 -1
  58. package/.next/server/app/api/memory/promote/route.js +2 -2
  59. package/.next/server/app/api/memory/recall/route.js +2 -2
  60. package/.next/server/app/api/memory/reflect/route.js +1 -1
  61. package/.next/server/app/api/memory/retain/route.js +1 -1
  62. package/.next/server/app/api/memory/status/route.js +1 -1
  63. package/.next/server/app/api/models/route.js +1 -1
  64. package/.next/server/app/api/models-config/discover/route.js +1 -1
  65. package/.next/server/app/api/models-config/route.js +1 -1
  66. package/.next/server/app/api/models-config/test/route.js +1 -1
  67. package/.next/server/app/api/projects/browse/route.js +1 -1
  68. package/.next/server/app/api/projects/route.js +1 -1
  69. package/.next/server/app/api/search/route.js +1 -1
  70. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  71. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  72. package/.next/server/app/api/sessions/new/route.js +1 -1
  73. package/.next/server/app/api/sessions/route.js +1 -1
  74. package/.next/server/app/api/settings/route.js +1 -1
  75. package/.next/server/app/api/skills/install/route.js +2 -2
  76. package/.next/server/app/api/skills/route.js +2 -2
  77. package/.next/server/app/api/skills/search/route.js +1 -1
  78. package/.next/server/app/api/soul/route.js +1 -1
  79. package/.next/server/app/api/version/route.js +1 -1
  80. package/.next/server/app/docs/changelog/page.js +3 -3
  81. package/.next/server/app/docs/changelog/page_client-reference-manifest.js +1 -1
  82. package/.next/server/app/docs/changelog.html +2 -2
  83. package/.next/server/app/docs/changelog.rsc +21 -20
  84. package/.next/server/app/docs/changelog.segments/_full.segment.rsc +21 -20
  85. package/.next/server/app/docs/changelog.segments/_head.segment.rsc +1 -1
  86. package/.next/server/app/docs/changelog.segments/_index.segment.rsc +6 -5
  87. package/.next/server/app/docs/changelog.segments/_tree.segment.rsc +2 -2
  88. package/.next/server/app/docs/changelog.segments/docs/changelog/__PAGE__.segment.rsc +1 -1
  89. package/.next/server/app/docs/changelog.segments/docs/changelog.segment.rsc +1 -1
  90. package/.next/server/app/docs/changelog.segments/docs.segment.rsc +1 -1
  91. package/.next/server/app/index.html +1 -1
  92. package/.next/server/app/index.rsc +16 -15
  93. package/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  94. package/.next/server/app/index.segments/_full.segment.rsc +16 -15
  95. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  96. package/.next/server/app/index.segments/_index.segment.rsc +6 -5
  97. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  98. package/.next/server/app/login/page.js +2 -2
  99. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  100. package/.next/server/app/login.html +1 -1
  101. package/.next/server/app/login.rsc +21 -20
  102. package/.next/server/app/login.segments/_full.segment.rsc +21 -20
  103. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  104. package/.next/server/app/login.segments/_index.segment.rsc +6 -5
  105. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  106. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  107. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  108. package/.next/server/app/page.js +2 -2
  109. package/.next/server/app/page_client-reference-manifest.js +1 -1
  110. package/.next/server/app/workspace/page.js +13 -13
  111. package/.next/server/app/workspace/page_client-reference-manifest.js +1 -1
  112. package/.next/server/app/workspace.html +1 -1
  113. package/.next/server/app/workspace.rsc +18 -17
  114. package/.next/server/app/workspace.segments/_full.segment.rsc +18 -17
  115. package/.next/server/app/workspace.segments/_head.segment.rsc +1 -1
  116. package/.next/server/app/workspace.segments/_index.segment.rsc +6 -5
  117. package/.next/server/app/workspace.segments/_tree.segment.rsc +2 -2
  118. package/.next/server/app/workspace.segments/workspace/__PAGE__.segment.rsc +2 -2
  119. package/.next/server/app/workspace.segments/workspace.segment.rsc +1 -1
  120. package/.next/server/app-paths-manifest.json +8 -7
  121. package/.next/server/chunks/6983.js +1 -1
  122. package/.next/server/middleware-build-manifest.js +1 -1
  123. package/.next/server/next-font-manifest.js +1 -1
  124. package/.next/server/next-font-manifest.json +1 -1
  125. package/.next/server/pages/404.html +1 -1
  126. package/.next/server/pages/500.html +1 -1
  127. package/.next/server/server-reference-manifest.json +1 -1
  128. package/.next/static/3bvCFCK3i_Ntk7XEeeKag/_buildManifest.js +1 -0
  129. package/.next/static/chunks/app/_global-error/page-e99818a566cf3a8f.js +1 -0
  130. package/.next/static/chunks/app/api/agent/[id]/events/route-e99818a566cf3a8f.js +1 -0
  131. package/.next/static/chunks/app/api/agent/[id]/route-e99818a566cf3a8f.js +1 -0
  132. package/.next/static/chunks/app/api/agent/new/route-e99818a566cf3a8f.js +1 -0
  133. package/.next/static/chunks/app/api/agent/runtime/route-e99818a566cf3a8f.js +1 -0
  134. package/.next/static/chunks/app/api/auth/all-providers/route-e99818a566cf3a8f.js +1 -0
  135. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-e99818a566cf3a8f.js +1 -0
  136. package/.next/static/chunks/app/api/auth/login/[provider]/route-e99818a566cf3a8f.js +1 -0
  137. package/.next/static/chunks/app/api/auth/login/route-e99818a566cf3a8f.js +1 -0
  138. package/.next/static/chunks/app/api/auth/logout/[provider]/route-e99818a566cf3a8f.js +1 -0
  139. package/.next/static/chunks/app/api/auth/providers/route-e99818a566cf3a8f.js +1 -0
  140. package/.next/static/chunks/app/api/auth/status/route-e99818a566cf3a8f.js +1 -0
  141. package/.next/static/chunks/app/api/default-cwd/route-e99818a566cf3a8f.js +1 -0
  142. package/.next/static/chunks/app/api/extensions/discover/route-e99818a566cf3a8f.js +1 -0
  143. package/.next/static/chunks/app/api/extensions/mcp/route-e99818a566cf3a8f.js +1 -0
  144. package/.next/static/chunks/app/api/extensions/plugin/route-e99818a566cf3a8f.js +1 -0
  145. package/.next/static/chunks/app/api/extensions/plugin-marketplace/route-e99818a566cf3a8f.js +1 -0
  146. package/.next/static/chunks/app/api/extensions/route-e99818a566cf3a8f.js +1 -0
  147. package/.next/static/chunks/app/api/extensions/session/route-e99818a566cf3a8f.js +1 -0
  148. package/.next/static/chunks/app/api/files/[...path]/route-e99818a566cf3a8f.js +1 -0
  149. package/.next/static/chunks/app/api/harness/route-e99818a566cf3a8f.js +1 -0
  150. package/.next/static/chunks/app/api/home/route-e99818a566cf3a8f.js +1 -0
  151. package/.next/static/chunks/app/api/im/gateway-status/route-e99818a566cf3a8f.js +1 -0
  152. package/.next/static/chunks/app/api/im/gateway-token/route-e99818a566cf3a8f.js +1 -0
  153. package/.next/static/chunks/app/api/im/project/route-e99818a566cf3a8f.js +1 -0
  154. package/.next/static/chunks/app/api/im/projects/route-e99818a566cf3a8f.js +1 -0
  155. package/.next/static/chunks/app/api/im/turn/route-e99818a566cf3a8f.js +1 -0
  156. package/.next/static/chunks/app/api/images/upload/route-e99818a566cf3a8f.js +1 -0
  157. package/.next/static/chunks/app/api/internal/runtime/route-e99818a566cf3a8f.js +1 -0
  158. package/.next/static/chunks/app/api/memory/promote/route-e99818a566cf3a8f.js +1 -0
  159. package/.next/static/chunks/app/api/memory/recall/route-e99818a566cf3a8f.js +1 -0
  160. package/.next/static/chunks/app/api/memory/reflect/route-e99818a566cf3a8f.js +1 -0
  161. package/.next/static/chunks/app/api/memory/retain/route-e99818a566cf3a8f.js +1 -0
  162. package/.next/static/chunks/app/api/memory/status/route-e99818a566cf3a8f.js +1 -0
  163. package/.next/static/chunks/app/api/models/route-e99818a566cf3a8f.js +1 -0
  164. package/.next/static/chunks/app/api/models-config/discover/route-e99818a566cf3a8f.js +1 -0
  165. package/.next/static/chunks/app/api/models-config/route-e99818a566cf3a8f.js +1 -0
  166. package/.next/static/chunks/app/api/models-config/test/route-e99818a566cf3a8f.js +1 -0
  167. package/.next/static/chunks/app/api/projects/browse/route-e99818a566cf3a8f.js +1 -0
  168. package/.next/static/chunks/app/api/projects/route-e99818a566cf3a8f.js +1 -0
  169. package/.next/static/chunks/app/api/search/route-e99818a566cf3a8f.js +1 -0
  170. package/.next/static/chunks/app/api/sessions/[id]/context/route-e99818a566cf3a8f.js +1 -0
  171. package/.next/static/chunks/app/api/sessions/[id]/route-e99818a566cf3a8f.js +1 -0
  172. package/.next/static/chunks/app/api/sessions/new/route-e99818a566cf3a8f.js +1 -0
  173. package/.next/static/chunks/app/api/sessions/route-e99818a566cf3a8f.js +1 -0
  174. package/.next/static/chunks/app/api/settings/route-e99818a566cf3a8f.js +1 -0
  175. package/.next/static/chunks/app/api/skills/install/route-e99818a566cf3a8f.js +1 -0
  176. package/.next/static/chunks/app/api/skills/route-e99818a566cf3a8f.js +1 -0
  177. package/.next/static/chunks/app/api/skills/search/route-e99818a566cf3a8f.js +1 -0
  178. package/.next/static/chunks/app/api/soul/route-e99818a566cf3a8f.js +1 -0
  179. package/.next/static/chunks/app/api/version/route-e99818a566cf3a8f.js +1 -0
  180. package/.next/static/chunks/app/layout-2e8a047b671c8731.js +1 -0
  181. package/.next/static/chunks/app/page-e99818a566cf3a8f.js +1 -0
  182. package/.next/static/chunks/app/workspace/page-205fe36cdc70dc1c.js +264 -0
  183. package/.next/static/chunks/next/dist/client/components/builtin/app-error-e99818a566cf3a8f.js +1 -0
  184. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-e99818a566cf3a8f.js +1 -0
  185. package/.next/static/chunks/next/dist/client/components/builtin/not-found-e99818a566cf3a8f.js +1 -0
  186. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e99818a566cf3a8f.js +1 -0
  187. package/.next/static/chunks/{webpack-8ff073aee98f20c0.js → webpack-7606de11217524fe.js} +1 -1
  188. package/bin/annodex-im-gateway.js +173 -3
  189. package/lib/im-media.js +171 -0
  190. package/package.json +2 -1
  191. package/.next/static/9ja2nMxYXszS_1ydk3Gb9/_buildManifest.js +0 -1
  192. package/.next/static/chunks/app/_global-error/page-e4c3159b5453fb6b.js +0 -1
  193. package/.next/static/chunks/app/api/agent/[id]/events/route-e4c3159b5453fb6b.js +0 -1
  194. package/.next/static/chunks/app/api/agent/[id]/route-e4c3159b5453fb6b.js +0 -1
  195. package/.next/static/chunks/app/api/agent/new/route-e4c3159b5453fb6b.js +0 -1
  196. package/.next/static/chunks/app/api/agent/runtime/route-e4c3159b5453fb6b.js +0 -1
  197. package/.next/static/chunks/app/api/auth/all-providers/route-e4c3159b5453fb6b.js +0 -1
  198. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-e4c3159b5453fb6b.js +0 -1
  199. package/.next/static/chunks/app/api/auth/login/[provider]/route-e4c3159b5453fb6b.js +0 -1
  200. package/.next/static/chunks/app/api/auth/login/route-e4c3159b5453fb6b.js +0 -1
  201. package/.next/static/chunks/app/api/auth/logout/[provider]/route-e4c3159b5453fb6b.js +0 -1
  202. package/.next/static/chunks/app/api/auth/providers/route-e4c3159b5453fb6b.js +0 -1
  203. package/.next/static/chunks/app/api/auth/status/route-e4c3159b5453fb6b.js +0 -1
  204. package/.next/static/chunks/app/api/default-cwd/route-e4c3159b5453fb6b.js +0 -1
  205. package/.next/static/chunks/app/api/extensions/discover/route-e4c3159b5453fb6b.js +0 -1
  206. package/.next/static/chunks/app/api/extensions/mcp/route-e4c3159b5453fb6b.js +0 -1
  207. package/.next/static/chunks/app/api/extensions/plugin/route-e4c3159b5453fb6b.js +0 -1
  208. package/.next/static/chunks/app/api/extensions/plugin-marketplace/route-e4c3159b5453fb6b.js +0 -1
  209. package/.next/static/chunks/app/api/extensions/route-e4c3159b5453fb6b.js +0 -1
  210. package/.next/static/chunks/app/api/extensions/session/route-e4c3159b5453fb6b.js +0 -1
  211. package/.next/static/chunks/app/api/files/[...path]/route-e4c3159b5453fb6b.js +0 -1
  212. package/.next/static/chunks/app/api/harness/route-e4c3159b5453fb6b.js +0 -1
  213. package/.next/static/chunks/app/api/home/route-e4c3159b5453fb6b.js +0 -1
  214. package/.next/static/chunks/app/api/im/gateway-token/route-e4c3159b5453fb6b.js +0 -1
  215. package/.next/static/chunks/app/api/im/project/route-e4c3159b5453fb6b.js +0 -1
  216. package/.next/static/chunks/app/api/im/projects/route-e4c3159b5453fb6b.js +0 -1
  217. package/.next/static/chunks/app/api/im/turn/route-e4c3159b5453fb6b.js +0 -1
  218. package/.next/static/chunks/app/api/images/upload/route-e4c3159b5453fb6b.js +0 -1
  219. package/.next/static/chunks/app/api/internal/runtime/route-e4c3159b5453fb6b.js +0 -1
  220. package/.next/static/chunks/app/api/memory/promote/route-e4c3159b5453fb6b.js +0 -1
  221. package/.next/static/chunks/app/api/memory/recall/route-e4c3159b5453fb6b.js +0 -1
  222. package/.next/static/chunks/app/api/memory/reflect/route-e4c3159b5453fb6b.js +0 -1
  223. package/.next/static/chunks/app/api/memory/retain/route-e4c3159b5453fb6b.js +0 -1
  224. package/.next/static/chunks/app/api/memory/status/route-e4c3159b5453fb6b.js +0 -1
  225. package/.next/static/chunks/app/api/models/route-e4c3159b5453fb6b.js +0 -1
  226. package/.next/static/chunks/app/api/models-config/discover/route-e4c3159b5453fb6b.js +0 -1
  227. package/.next/static/chunks/app/api/models-config/route-e4c3159b5453fb6b.js +0 -1
  228. package/.next/static/chunks/app/api/models-config/test/route-e4c3159b5453fb6b.js +0 -1
  229. package/.next/static/chunks/app/api/projects/browse/route-e4c3159b5453fb6b.js +0 -1
  230. package/.next/static/chunks/app/api/projects/route-e4c3159b5453fb6b.js +0 -1
  231. package/.next/static/chunks/app/api/search/route-e4c3159b5453fb6b.js +0 -1
  232. package/.next/static/chunks/app/api/sessions/[id]/context/route-e4c3159b5453fb6b.js +0 -1
  233. package/.next/static/chunks/app/api/sessions/[id]/route-e4c3159b5453fb6b.js +0 -1
  234. package/.next/static/chunks/app/api/sessions/new/route-e4c3159b5453fb6b.js +0 -1
  235. package/.next/static/chunks/app/api/sessions/route-e4c3159b5453fb6b.js +0 -1
  236. package/.next/static/chunks/app/api/settings/route-e4c3159b5453fb6b.js +0 -1
  237. package/.next/static/chunks/app/api/skills/install/route-e4c3159b5453fb6b.js +0 -1
  238. package/.next/static/chunks/app/api/skills/route-e4c3159b5453fb6b.js +0 -1
  239. package/.next/static/chunks/app/api/skills/search/route-e4c3159b5453fb6b.js +0 -1
  240. package/.next/static/chunks/app/api/soul/route-e4c3159b5453fb6b.js +0 -1
  241. package/.next/static/chunks/app/api/version/route-e4c3159b5453fb6b.js +0 -1
  242. package/.next/static/chunks/app/layout-10d99d038798f290.js +0 -1
  243. package/.next/static/chunks/app/page-e4c3159b5453fb6b.js +0 -1
  244. package/.next/static/chunks/app/workspace/page-9879349ec16c1136.js +0 -264
  245. package/.next/static/chunks/next/dist/client/components/builtin/app-error-e4c3159b5453fb6b.js +0 -1
  246. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-e4c3159b5453fb6b.js +0 -1
  247. package/.next/static/chunks/next/dist/client/components/builtin/not-found-e4c3159b5453fb6b.js +0 -1
  248. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e4c3159b5453fb6b.js +0 -1
  249. /package/.next/static/{9ja2nMxYXszS_1ydk3Gb9 → 3bvCFCK3i_Ntk7XEeeKag}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6710,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6710,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6710,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6710,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +1 @@
1
- (()=>{"use strict";var e,t,a,r,c,f,d,o,b={},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var a=n[e]={exports:{}},r=!0;try{b[e].call(a.exports,a,a.exports,i),r=!1}finally{r&&delete n[e]}return a.exports}i.m=b,e=[],i.O=(t,a,r,c)=>{if(a){c=c||0;for(var f=e.length;f>0&&e[f-1][2]>c;f--)e[f]=e[f-1];e[f]=[a,r,c];return}for(var d=1/0,f=0;f<e.length;f++){for(var[a,r,c]=e[f],o=!0,b=0;b<a.length;b++)(!1&c||d>=c)&&Object.keys(i.O).every(e=>i.O[e](a[b]))?a.splice(b--,1):(o=!1,c<d&&(d=c));if(o){e.splice(f--,1);var n=r();void 0!==n&&(t=n)}}return t},i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var c=Object.create(null);i.r(c);var f={};t=t||[null,a({}),a([]),a(a)];for(var d=2&r&&e;"object"==typeof d&&!~t.indexOf(d);d=a(d))Object.getOwnPropertyNames(d).forEach(t=>f[t]=()=>e[t]);return f.default=()=>e,i.d(c,f),c},i.d=(e,t)=>{for(var a in t)i.o(t,a)&&!i.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce((t,a)=>(i.f[a](e,t),t),[])),i.u=e=>7627===e?"static/chunks/7627-1f8c705195c83044.js":"static/chunks/"+(({2213:"51fb665c",2941:"73972abe",2995:"0b9a0da7",3524:"2170a4aa",4954:"2918becc",7330:"d3ac728e",8184:"58bb9007",8747:"90542734"})[e]||e)+"."+({83:"85d62d7fc9850b75",394:"91597771688df6d0",498:"fe1d9da9ecad6c36",532:"5956ed631aff722b",547:"902a733488cfe3f7",1413:"922d232de90c0c41",1643:"467a526a1f24f54d",1960:"b1e26436d7a5f586",2213:"0950e1b79671348d",2274:"6cd173f80a1405a2",2419:"347fdfe3c170854d",2619:"9aac8983f30c7c8a",2623:"d20fabd8e18197c6",2632:"f12f984b8009d7f1",2729:"f5365061a849d659",2821:"934bcf60fbdc28c6",2941:"25a4cffa03b2bcef",2947:"114e51cb06d1c01a",2995:"9075af772487e743",3079:"4c511fa1144e3adf",3274:"208ca44844cd7d95",3308:"15865ff66152df82",3325:"e4bfe1ca657f3b5b",3506:"2a7eaa08b9f55337",3524:"4213bb2183c9cdf9",3837:"a755ccfe6f9c1c1c",3997:"1009c06025691712",4453:"91a357dc43c21745",4491:"44fdf20580ac72bd",4660:"6d9fc47e6ed8e7e4",4829:"cf1d50e43e6d9db5",4954:"abff2ece1de37bc1",5019:"b5a1a2b8daf17525",5034:"8f16c3fa3ce75411",5074:"d16651da01ec4e02",5326:"69460442bdcd6cd3",5403:"ff110bf5bf600758",5567:"540d7fc108ad6ee5",5590:"ef62922166d308b4",5690:"9d6eb1edb1399995",5749:"25faee4a1e55b854",6121:"f3f43f1896ea0cd9",6600:"583c88eef37aa524",6606:"789f1fc26b9150dd",6696:"a41aec266e657d54",6878:"3d114dd7c83aa676",6922:"42148793782d2fe7",7006:"e191611ffc2b9528",7330:"7964f816a1ca64e5",7343:"9fbb58204d8ac681",7547:"58bda8a2aabba0d4",7648:"4ae2f183b4db0353",7874:"8db6929b94cdf697",7959:"1f20a35df316216a",8184:"1ccb6bba34b4c635",8436:"cab94b59cca0a8ff",8451:"ff6ff72b57dc52e1",8489:"45f22859734f514f",8568:"f85d8b36fc9a9037",8747:"dc1a2723e4f6affb",8863:"be51033a67436277",9471:"95facb3cb29a466e",9500:"1488aec06ee78127",9566:"2b92edbd162fb97d",9633:"155548b5fca6e580",9695:"9e959b13b18c3485",9779:"673004a62d70e36a",9855:"1127e644bd68ced0"})[e]+".js",i.miniCssF=e=>{},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},i.l=(e,t,a,c)=>{if(r[e])return void r[e].push(t);if(void 0!==a)for(var f,d,o=document.getElementsByTagName("script"),b=0;b<o.length;b++){var n=o[b];if(n.getAttribute("src")==e||n.getAttribute("data-webpack")=="_N_E:"+a){f=n;break}}f||(d=!0,(f=document.createElement("script")).charset="utf-8",f.timeout=120,i.nc&&f.setAttribute("nonce",i.nc),f.setAttribute("data-webpack","_N_E:"+a),f.src=i.tu(e)),r[e]=[t];var u=(t,a)=>{f.onerror=f.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],f.parentNode&&f.parentNode.removeChild(f),c&&c.forEach(e=>e(a)),t)return t(a)},l=setTimeout(u.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=u.bind(null,f.onerror),f.onload=u.bind(null,f.onload),d&&document.head.appendChild(f)},i.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.U=function(e){var t=new URL(e,"x:/"),a={};for(var r in t)a[r]=t[r];for(var r in a.href=e,a.pathname=e.replace(/[?#].*/,""),a.origin=a.protocol="",a.toString=a.toJSON=()=>e,a)Object.defineProperty(this,r,{enumerable:!0,configurable:!0,value:a[r]})},i.U.prototype=URL.prototype,i.tt=()=>(void 0===c&&(c={createScriptURL:e=>e},"u">typeof trustedTypes&&trustedTypes.createPolicy&&(c=trustedTypes.createPolicy("nextjs#bundler",c))),c),i.tu=e=>i.tt().createScriptURL(e),i.p="/_next/",f={8068:0,5928:0,7513:0},i.f.j=(e,t)=>{var a=i.o(f,e)?f[e]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(5928|7513|8068)$/.test(e))f[e]=0;else{var r=new Promise((t,r)=>a=f[e]=[t,r]);t.push(a[2]=r);var c=i.p+i.u(e),d=Error();i.l(c,t=>{if(i.o(f,e)&&(0!==(a=f[e])&&(f[e]=void 0),a)){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;d.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",d.name="ChunkLoadError",d.type=r,d.request=c,a[1](d)}},"chunk-"+e,e)}},i.O.j=e=>0===f[e],d=(e,t)=>{var a,r,[c,d,o]=t,b=0;if(c.some(e=>0!==f[e])){for(a in d)i.o(d,a)&&(i.m[a]=d[a]);if(o)var n=o(i)}for(e&&e(t);b<c.length;b++)r=c[b],i.o(f,r)&&f[r]&&f[r][0](),f[r]=0;return i.O(n)},(o=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(d.bind(null,0)),o.push=d.bind(null,o.push.bind(o)),i.nc=void 0})();
1
+ (()=>{"use strict";var e,t,a,r,c,f,d,o,b={},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var a=n[e]={exports:{}},r=!0;try{b[e].call(a.exports,a,a.exports,i),r=!1}finally{r&&delete n[e]}return a.exports}i.m=b,e=[],i.O=(t,a,r,c)=>{if(a){c=c||0;for(var f=e.length;f>0&&e[f-1][2]>c;f--)e[f]=e[f-1];e[f]=[a,r,c];return}for(var d=1/0,f=0;f<e.length;f++){for(var[a,r,c]=e[f],o=!0,b=0;b<a.length;b++)(!1&c||d>=c)&&Object.keys(i.O).every(e=>i.O[e](a[b]))?a.splice(b--,1):(o=!1,c<d&&(d=c));if(o){e.splice(f--,1);var n=r();void 0!==n&&(t=n)}}return t},i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var c=Object.create(null);i.r(c);var f={};t=t||[null,a({}),a([]),a(a)];for(var d=2&r&&e;"object"==typeof d&&!~t.indexOf(d);d=a(d))Object.getOwnPropertyNames(d).forEach(t=>f[t]=()=>e[t]);return f.default=()=>e,i.d(c,f),c},i.d=(e,t)=>{for(var a in t)i.o(t,a)&&!i.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce((t,a)=>(i.f[a](e,t),t),[])),i.u=e=>7627===e?"static/chunks/7627-1f8c705195c83044.js":"static/chunks/"+(({2213:"51fb665c",2941:"73972abe",2995:"0b9a0da7",3524:"2170a4aa",4954:"2918becc",7330:"d3ac728e",8184:"58bb9007",8747:"90542734"})[e]||e)+"."+({83:"85d62d7fc9850b75",394:"91597771688df6d0",498:"fe1d9da9ecad6c36",532:"5956ed631aff722b",547:"902a733488cfe3f7",1413:"922d232de90c0c41",1643:"467a526a1f24f54d",1960:"b1e26436d7a5f586",2213:"0950e1b79671348d",2274:"6cd173f80a1405a2",2419:"347fdfe3c170854d",2619:"9aac8983f30c7c8a",2623:"d20fabd8e18197c6",2632:"f12f984b8009d7f1",2729:"f5365061a849d659",2821:"934bcf60fbdc28c6",2941:"25a4cffa03b2bcef",2947:"114e51cb06d1c01a",2995:"9075af772487e743",3079:"4c511fa1144e3adf",3274:"208ca44844cd7d95",3308:"15865ff66152df82",3325:"e4bfe1ca657f3b5b",3506:"2a7eaa08b9f55337",3524:"4213bb2183c9cdf9",3837:"a755ccfe6f9c1c1c",3997:"1009c06025691712",4453:"91a357dc43c21745",4491:"44fdf20580ac72bd",4660:"6d9fc47e6ed8e7e4",4829:"cf1d50e43e6d9db5",4954:"abff2ece1de37bc1",5019:"b5a1a2b8daf17525",5034:"8f16c3fa3ce75411",5074:"d16651da01ec4e02",5326:"69460442bdcd6cd3",5403:"ff110bf5bf600758",5567:"540d7fc108ad6ee5",5590:"ef62922166d308b4",5690:"9d6eb1edb1399995",5749:"25faee4a1e55b854",6121:"f3f43f1896ea0cd9",6600:"583c88eef37aa524",6606:"789f1fc26b9150dd",6696:"a41aec266e657d54",6878:"3d114dd7c83aa676",6922:"42148793782d2fe7",7006:"e191611ffc2b9528",7330:"7964f816a1ca64e5",7343:"9fbb58204d8ac681",7547:"58bda8a2aabba0d4",7648:"4ae2f183b4db0353",7874:"8db6929b94cdf697",7959:"1f20a35df316216a",8184:"1ccb6bba34b4c635",8436:"cab94b59cca0a8ff",8451:"ff6ff72b57dc52e1",8489:"45f22859734f514f",8568:"f85d8b36fc9a9037",8747:"dc1a2723e4f6affb",8863:"be51033a67436277",9471:"95facb3cb29a466e",9500:"1488aec06ee78127",9566:"2b92edbd162fb97d",9633:"155548b5fca6e580",9695:"9e959b13b18c3485",9779:"673004a62d70e36a",9855:"1127e644bd68ced0"})[e]+".js",i.miniCssF=e=>{},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},i.l=(e,t,a,c)=>{if(r[e])return void r[e].push(t);if(void 0!==a)for(var f,d,o=document.getElementsByTagName("script"),b=0;b<o.length;b++){var n=o[b];if(n.getAttribute("src")==e||n.getAttribute("data-webpack")=="_N_E:"+a){f=n;break}}f||(d=!0,(f=document.createElement("script")).charset="utf-8",f.timeout=120,i.nc&&f.setAttribute("nonce",i.nc),f.setAttribute("data-webpack","_N_E:"+a),f.src=i.tu(e)),r[e]=[t];var u=(t,a)=>{f.onerror=f.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],f.parentNode&&f.parentNode.removeChild(f),c&&c.forEach(e=>e(a)),t)return t(a)},l=setTimeout(u.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=u.bind(null,f.onerror),f.onload=u.bind(null,f.onload),d&&document.head.appendChild(f)},i.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.U=function(e){var t=new URL(e,"x:/"),a={};for(var r in t)a[r]=t[r];for(var r in a.href=e,a.pathname=e.replace(/[?#].*/,""),a.origin=a.protocol="",a.toString=a.toJSON=()=>e,a)Object.defineProperty(this,r,{enumerable:!0,configurable:!0,value:a[r]})},i.U.prototype=URL.prototype,i.tt=()=>(void 0===c&&(c={createScriptURL:e=>e},"u">typeof trustedTypes&&trustedTypes.createPolicy&&(c=trustedTypes.createPolicy("nextjs#bundler",c))),c),i.tu=e=>i.tt().createScriptURL(e),i.p="/_next/",f={8068:0,7513:0,5928:0},i.f.j=(e,t)=>{var a=i.o(f,e)?f[e]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(5928|7513|8068)$/.test(e))f[e]=0;else{var r=new Promise((t,r)=>a=f[e]=[t,r]);t.push(a[2]=r);var c=i.p+i.u(e),d=Error();i.l(c,t=>{if(i.o(f,e)&&(0!==(a=f[e])&&(f[e]=void 0),a)){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;d.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",d.name="ChunkLoadError",d.type=r,d.request=c,a[1](d)}},"chunk-"+e,e)}},i.O.j=e=>0===f[e],d=(e,t)=>{var a,r,[c,d,o]=t,b=0;if(c.some(e=>0!==f[e])){for(a in d)i.o(d,a)&&(i.m[a]=d[a]);if(o)var n=o(i)}for(e&&e(t);b<c.length;b++)r=c[b],i.o(f,r)&&f[r]&&f[r][0](),f[r]=0;return i.O(n)},(o=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(d.bind(null,0)),o.push=d.bind(null,o.push.bind(o)),i.nc=void 0})();
@@ -6,7 +6,12 @@ const http = require("http");
6
6
  const https = require("https");
7
7
  const os = require("os");
8
8
  const path = require("path");
9
+ const crypto = require("crypto");
9
10
  const WebSocket = require("ws");
11
+ const imMedia = require("../lib/im-media.js");
12
+
13
+ const UPLOAD_CHUNK_SIZE = 512 * 1024;
14
+ const REQUEST_TIMEOUT_MS = 30_000;
10
15
 
11
16
  const REVISION_DIGITS = ["\u200b", "\u200c", "\u200d", "\u2060", "\ufeff"];
12
17
  const REVISION_SUFFIX_PATTERN = /[\u200b\u200c\u200d\u2060\ufeff]+$/u;
@@ -340,6 +345,7 @@ class WeComWsClient {
340
345
  this.ws = null;
341
346
  this.heartbeatTimer = null;
342
347
  this.pendingAcks = new Map();
348
+ this.pendingResponses = new Map();
343
349
  this.authenticated = createDeferred();
344
350
  }
345
351
 
@@ -408,6 +414,90 @@ class WeComWsClient {
408
414
  }).catch(() => undefined);
409
415
  }
410
416
 
417
+ async sendRequest(cmd, body, timeoutMs = REQUEST_TIMEOUT_MS, reqId = `${cmd}_${crypto.randomUUID()}`) {
418
+ return new Promise((resolve, reject) => {
419
+ const timeout = setTimeout(() => {
420
+ this.pendingResponses.delete(reqId);
421
+ reject(new Error(`wecom request timeout for ${cmd}`));
422
+ }, timeoutMs);
423
+ this.pendingResponses.set(reqId, { resolve, reject, timeout });
424
+ void this.sendFrame({ cmd, headers: { req_id: reqId }, body }).catch((error) => {
425
+ clearTimeout(timeout);
426
+ this.pendingResponses.delete(reqId);
427
+ reject(error);
428
+ });
429
+ });
430
+ }
431
+
432
+ raiseForWeComError(frame, context) {
433
+ if ((frame.errcode ?? 0) === 0) return;
434
+ const error = new Error(frame.errmsg || `wecom ${context} failed (${frame.errcode})`);
435
+ error.errcode = frame.errcode;
436
+ error.errmsg = frame.errmsg;
437
+ throw error;
438
+ }
439
+
440
+ async uploadMediaFile(filePath, options = {}) {
441
+ const data = fs.readFileSync(filePath);
442
+ const fileName = (options.fileName || path.basename(filePath) || "file").trim();
443
+ const mediaType = (options.mediaType || "file").trim();
444
+ const totalSize = data.length;
445
+ const totalChunks = Math.ceil(totalSize / UPLOAD_CHUNK_SIZE);
446
+ if (totalChunks > 100) {
447
+ throw new Error(`File too large for WeCom upload (${totalChunks} chunks)`);
448
+ }
449
+
450
+ const initResponse = await this.sendRequest("aibot_upload_media_init", {
451
+ type: mediaType,
452
+ filename: fileName,
453
+ total_size: totalSize,
454
+ total_chunks: totalChunks,
455
+ md5: crypto.createHash("md5").update(data).digest("hex"),
456
+ });
457
+ this.raiseForWeComError(initResponse, "media upload init");
458
+
459
+ const initBody = asRecord(initResponse.body);
460
+ const uploadId = resolveOptionalString(initBody?.upload_id);
461
+ if (!uploadId) throw new Error("media upload init failed: missing upload_id");
462
+
463
+ for (let chunkIndex = 0; chunkIndex < totalChunks; chunkIndex += 1) {
464
+ const start = chunkIndex * UPLOAD_CHUNK_SIZE;
465
+ const chunk = data.subarray(start, start + UPLOAD_CHUNK_SIZE);
466
+ const chunkResponse = await this.sendRequest("aibot_upload_media_chunk", {
467
+ upload_id: uploadId,
468
+ chunk_index: chunkIndex,
469
+ base64_data: chunk.toString("base64"),
470
+ });
471
+ this.raiseForWeComError(chunkResponse, `media upload chunk ${chunkIndex}`);
472
+ }
473
+
474
+ const finishResponse = await this.sendRequest("aibot_upload_media_finish", { upload_id: uploadId });
475
+ this.raiseForWeComError(finishResponse, "media upload finish");
476
+
477
+ const finishBody = asRecord(finishResponse.body);
478
+ const mediaId = resolveOptionalString(finishBody?.media_id);
479
+ if (!mediaId) throw new Error("media upload finish failed: missing media_id");
480
+
481
+ return {
482
+ mediaId,
483
+ mediaType: resolveOptionalString(finishBody?.type) || mediaType,
484
+ fileName,
485
+ };
486
+ }
487
+
488
+ async replyMediaMessage(reqId, mediaType, mediaId) {
489
+ const response = await this.sendRequest(
490
+ "aibot_respond_msg",
491
+ {
492
+ msgtype: mediaType,
493
+ [mediaType]: { media_id: mediaId },
494
+ },
495
+ REQUEST_TIMEOUT_MS,
496
+ reqId,
497
+ );
498
+ this.raiseForWeComError(response, "send reply media");
499
+ }
500
+
411
501
  async disconnect() {
412
502
  this.stopHeartbeat();
413
503
  this.rejectPendingAcks(new Error("wecom websocket disconnected"));
@@ -424,6 +514,23 @@ class WeComWsClient {
424
514
  const frame = JSON.parse(frameText);
425
515
  const reqId = frame.headers?.req_id?.trim();
426
516
 
517
+ if (reqId && this.pendingResponses.has(reqId)) {
518
+ const pending = this.pendingResponses.get(reqId);
519
+ if (pending) {
520
+ this.pendingResponses.delete(reqId);
521
+ clearTimeout(pending.timeout);
522
+ if ((frame.errcode ?? 0) !== 0) {
523
+ pending.reject(Object.assign(new Error(frame.errmsg || "wecom request failed"), {
524
+ errcode: frame.errcode,
525
+ errmsg: frame.errmsg,
526
+ }));
527
+ } else {
528
+ pending.resolve(frame);
529
+ }
530
+ }
531
+ return;
532
+ }
533
+
427
534
  if (reqId && this.pendingAcks.has(reqId)) {
428
535
  const pending = this.pendingAcks.get(reqId);
429
536
  if (pending) {
@@ -485,6 +592,11 @@ class WeComWsClient {
485
592
  clearTimeout(pending.timeout);
486
593
  pending.reject(error);
487
594
  }
595
+ for (const [reqId, pending] of this.pendingResponses) {
596
+ this.pendingResponses.delete(reqId);
597
+ clearTimeout(pending.timeout);
598
+ pending.reject(error);
599
+ }
488
600
  }
489
601
  }
490
602
 
@@ -575,6 +687,7 @@ class ProjectWeComBridge {
575
687
  this.client = null;
576
688
  this.stopped = false;
577
689
  this.reconnectTimer = null;
690
+ this.mediaUploadDisabled = false;
578
691
  }
579
692
 
580
693
  async start() {
@@ -620,6 +733,53 @@ class ProjectWeComBridge {
620
733
  this.client = null;
621
734
  }
622
735
 
736
+ async deliverMedia(reqId, mediaPaths) {
737
+ const fallbacks = [];
738
+ if (!mediaPaths.length || !this.client) return fallbacks;
739
+
740
+ for (const rawPath of mediaPaths) {
741
+ const resolved = imMedia.resolveMediaPath(rawPath, this.project.cwd);
742
+ if (!resolved.ok) {
743
+ console.error(`[im] skip media ${rawPath}: ${resolved.error}`);
744
+ continue;
745
+ }
746
+
747
+ if (this.mediaUploadDisabled) {
748
+ fallbacks.push(imMedia.formatMediaUploadFallback(resolved.path, "企业微信机器人未开通图片/文件上传权限"));
749
+ continue;
750
+ }
751
+
752
+ const mediaType = imMedia.detectWeComMediaType(resolved.path, resolved.size);
753
+ try {
754
+ const upload = await this.client.uploadMediaFile(resolved.path, { mediaType });
755
+ await this.client.replyMediaMessage(reqId, upload.mediaType, upload.mediaId);
756
+ console.error(`[im] delivered media ${resolved.path} as ${upload.mediaType}`);
757
+ } catch (error) {
758
+ const errcode = error && typeof error === "object" ? error.errcode : undefined;
759
+ const errmsg = error && typeof error === "object" ? error.errmsg : undefined;
760
+ if (imMedia.isWeComMediaPermissionError(errcode, errmsg || String(error))) {
761
+ this.mediaUploadDisabled = true;
762
+ console.error(`[im] media upload disabled for ${this.project.cwd}: ${errmsg || String(error)}`);
763
+ fallbacks.push(imMedia.formatMediaUploadFallback(
764
+ resolved.path,
765
+ "企业微信机器人未开通图片/文件上传权限",
766
+ ));
767
+ } else {
768
+ console.error(`[im] media delivery failed for ${resolved.path}: ${String(error)}`);
769
+ fallbacks.push(imMedia.formatMediaUploadFallback(resolved.path, String(error)));
770
+ }
771
+ }
772
+ }
773
+
774
+ return fallbacks;
775
+ }
776
+
777
+ async sendFallbackText(reqId, text) {
778
+ if (!text.trim() || !this.client) return;
779
+ const streamId = `${reqId}-fallback-${Date.now()}`;
780
+ await this.client.replyStream(reqId, streamId, text, true);
781
+ }
782
+
623
783
  async handleFrame(frame) {
624
784
  const inbound = extractWeComInboundMessage(frame);
625
785
  if (!inbound) return;
@@ -629,6 +789,7 @@ class ProjectWeComBridge {
629
789
  const startedAt = Date.now();
630
790
  let refreshTimer = null;
631
791
  let toolsRunning = false;
792
+ let lastCleanedText = "";
632
793
 
633
794
  try {
634
795
  await reply.beginProcessing();
@@ -650,7 +811,9 @@ class ProjectWeComBridge {
650
811
  },
651
812
  onDelta: (text) => {
652
813
  toolsRunning = false;
653
- reply.schedulePush(text);
814
+ const cleaned = imMedia.cleanImReplyText(text).cleaned;
815
+ lastCleanedText = cleaned;
816
+ reply.schedulePush(cleaned);
654
817
  },
655
818
  });
656
819
 
@@ -658,10 +821,17 @@ class ProjectWeComBridge {
658
821
  console.error(`[im] turn failed for ${this.project.cwd} user ${inbound.userId}: ${result.reply || "unknown error"}`);
659
822
  }
660
823
 
661
- const text = typeof result.reply === "string" && result.reply.trim()
824
+ const rawReply = typeof result.reply === "string" && result.reply.trim()
662
825
  ? result.reply.trim()
663
826
  : "No reply from annodex.";
664
- await reply.finish(text);
827
+ const { cleaned, mediaPaths } = imMedia.cleanImReplyText(rawReply);
828
+ const finishText = cleaned || lastCleanedText || "No reply from annodex.";
829
+ await reply.finish(finishText);
830
+
831
+ const fallbacks = await this.deliverMedia(inbound.reqId, mediaPaths);
832
+ if (fallbacks.length) {
833
+ await this.sendFallbackText(inbound.reqId, fallbacks.join("\n\n"));
834
+ }
665
835
  } catch (error) {
666
836
  console.error(`[im] turn request failed for ${this.project.cwd} user ${inbound.userId}: ${String(error)}`);
667
837
  await reply.fail(`annodex IM error: ${String(error)}`);
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+
3
+ const fs = require("fs");
4
+ const os = require("os");
5
+ const path = require("path");
6
+
7
+ const MEDIA_DELIVERY_EXTS = [
8
+ "png", "jpg", "jpeg", "gif", "webp", "bmp", "svg",
9
+ "pdf", "csv", "tsv", "txt", "md", "json", "yaml", "yml",
10
+ "html", "htm", "xml",
11
+ "xlsx", "xls", "docx", "doc", "pptx", "ppt",
12
+ "zip", "tar", "gz", "tgz", "7z",
13
+ "mp4", "mov", "webm", "mp3", "wav", "ogg", "amr",
14
+ ].join("|");
15
+
16
+ const MEDIA_TAG_RE = /\bMEDIA:\s*(`[^`\n]+`|"[^"\n]+"|'[^'\n]+'|(?:~\/|\/|[A-Za-z]:[/\\])[^\s"'`,;:)\]}]+)/gi;
17
+
18
+ const SHOW_WIDGET_FENCE_RE = /```\s*show-widget[\s\S]*?```/gi;
19
+ const SHOW_WIDGET_PARTIAL_RE = /```\s*show-widget[\s\S]*$/;
20
+
21
+ const IMAGE_EXTS = new Set([".png", ".jpg", ".jpeg", ".gif", ".webp", ".bmp", ".svg"]);
22
+ const VIDEO_EXTS = new Set([".mp4", ".mov", ".webm", ".avi", ".mkv"]);
23
+ const AUDIO_EXTS = new Set([".mp3", ".wav", ".ogg", ".amr"]);
24
+
25
+ const ABSOLUTE_MAX_BYTES = 20 * 1024 * 1024;
26
+ const IMAGE_MAX_BYTES = 10 * 1024 * 1024;
27
+
28
+ const WECOM_MEDIA_PERMISSION_ERRCODES = new Set([48002, 60020, 81013]);
29
+
30
+ function collapseBlankLines(text) {
31
+ return text.replace(/\n{3,}/g, "\n\n").trim();
32
+ }
33
+
34
+ function stripShowWidgetFences(text) {
35
+ let cleaned = text.replace(SHOW_WIDGET_FENCE_RE, "");
36
+ cleaned = cleaned.replace(SHOW_WIDGET_PARTIAL_RE, "");
37
+ return cleaned;
38
+ }
39
+
40
+ function normalizeMediaTagPath(rawPath) {
41
+ let value = String(rawPath || "").trim();
42
+ if (!value) return "";
43
+ if (value.length >= 2 && value[0] === value[value.length - 1] && "`\"'".includes(value[0])) {
44
+ value = value.slice(1, -1).trim();
45
+ }
46
+ return value.replace(/^[`"'\\]+|[`"'\\.,;:)\]}]+$/g, "").trim();
47
+ }
48
+
49
+ function extractMediaFromText(text) {
50
+ const media = [];
51
+ const seen = new Set();
52
+ let cleaned = text;
53
+
54
+ for (const match of text.matchAll(MEDIA_TAG_RE)) {
55
+ const rawPath = normalizeMediaTagPath(match[1] || "");
56
+ if (!rawPath || seen.has(rawPath)) continue;
57
+ if (!hasDeliverableExtension(rawPath)) continue;
58
+ seen.add(rawPath);
59
+ media.push(rawPath);
60
+ }
61
+
62
+ cleaned = cleaned.replace(MEDIA_TAG_RE, "");
63
+ cleaned = collapseBlankLines(cleaned);
64
+ return { mediaPaths: media, cleaned };
65
+ }
66
+
67
+ function hasDeliverableExtension(filePath) {
68
+ const ext = path.extname(filePath).slice(1).toLowerCase();
69
+ if (!ext) return false;
70
+ return MEDIA_DELIVERY_EXTS.split("|").includes(ext);
71
+ }
72
+
73
+ function resolveMediaPath(rawPath, cwd) {
74
+ const trimmed = String(rawPath || "").trim();
75
+ if (!trimmed) {
76
+ return { ok: false, error: "empty path" };
77
+ }
78
+
79
+ let resolved;
80
+ try {
81
+ if (trimmed.startsWith("~")) {
82
+ resolved = path.resolve(trimmed.replace(/^~(?=$|[/\\])/, os.homedir()));
83
+ } else if (path.isAbsolute(trimmed)) {
84
+ resolved = path.resolve(trimmed);
85
+ } else if (cwd) {
86
+ resolved = path.resolve(cwd, trimmed);
87
+ } else {
88
+ return { ok: false, error: "relative path requires cwd" };
89
+ }
90
+ } catch (error) {
91
+ return { ok: false, error: String(error) };
92
+ }
93
+
94
+ let stat;
95
+ try {
96
+ stat = fs.statSync(resolved);
97
+ } catch {
98
+ return { ok: false, error: `file not found: ${resolved}` };
99
+ }
100
+ if (!stat.isFile()) {
101
+ return { ok: false, error: `not a file: ${resolved}` };
102
+ }
103
+ if (stat.size > ABSOLUTE_MAX_BYTES) {
104
+ return { ok: false, error: `file exceeds 20MB WeCom limit: ${resolved}` };
105
+ }
106
+
107
+ return { ok: true, path: resolved, size: stat.size };
108
+ }
109
+
110
+ function detectWeComMediaType(filePath, sizeBytes) {
111
+ const ext = path.extname(filePath).toLowerCase();
112
+ if (IMAGE_EXTS.has(ext)) {
113
+ if (sizeBytes > IMAGE_MAX_BYTES) return "file";
114
+ return "image";
115
+ }
116
+ if (VIDEO_EXTS.has(ext)) return "video";
117
+ if (AUDIO_EXTS.has(ext)) return "voice";
118
+ return "file";
119
+ }
120
+
121
+ function cleanImReplyText(text) {
122
+ let cleaned = stripShowWidgetFences(String(text || ""));
123
+ const extracted = extractMediaFromText(cleaned);
124
+ cleaned = extracted.cleaned;
125
+ if (stripShowWidgetFences(String(text || "")).includes("show-widget") && !cleaned) {
126
+ cleaned = "(visual diagram — see attachment below if available)";
127
+ }
128
+ return { cleaned, mediaPaths: extracted.mediaPaths };
129
+ }
130
+
131
+ function isWeComMediaPermissionError(errcode, errmsg) {
132
+ if (WECOM_MEDIA_PERMISSION_ERRCODES.has(Number(errcode))) return true;
133
+ const msg = String(errmsg || "").toLowerCase();
134
+ return (
135
+ msg.includes("permission")
136
+ || msg.includes("privilege")
137
+ || msg.includes("auth")
138
+ || msg.includes("权限")
139
+ || msg.includes("上传")
140
+ || msg.includes("upload")
141
+ );
142
+ }
143
+
144
+ function formatMediaUploadFallback(filePath, reason) {
145
+ const label = reason || "企业微信机器人可能未开通图片/文件上传权限";
146
+ return `附件未能上传(${label})。文件路径:\`${filePath}\``;
147
+ }
148
+
149
+ function buildImMediaGuidance() {
150
+ return [
151
+ "WeCom IM cannot render show-widget, HTML, or interactive charts in chat.",
152
+ "For diagrams, charts, or exports: save PNG/PDF (or other files) under the project directory, then include one line per file:",
153
+ "MEDIA:/absolute/path/to/file.png",
154
+ "Always mention the saved file path in plain text as well — some enterprises disable bot file/image upload.",
155
+ "Do not use show-widget fences in IM replies.",
156
+ ].join("\n");
157
+ }
158
+
159
+ module.exports = {
160
+ ABSOLUTE_MAX_BYTES,
161
+ IMAGE_MAX_BYTES,
162
+ cleanImReplyText,
163
+ collapseBlankLines,
164
+ detectWeComMediaType,
165
+ extractMediaFromText,
166
+ formatMediaUploadFallback,
167
+ isWeComMediaPermissionError,
168
+ resolveMediaPath,
169
+ stripShowWidgetFences,
170
+ buildImMediaGuidance,
171
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seqyuan/annodex",
3
- "version": "0.1.72",
3
+ "version": "0.1.75",
4
4
  "description": "AI-native bioinformatics workspace by Annoroad",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -23,6 +23,7 @@
23
23
  "lib/macos-codex-security.js",
24
24
  "lib/default-SOUL.md",
25
25
  "lib/default-HARNESS.md",
26
+ "lib/im-media.js",
26
27
  "public",
27
28
  "next.config.ts",
28
29
  "package.json"
@@ -1 +0,0 @@
1
- self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:47,errorRate:1e-4,numBits:901,numHashes:14,bitArray:[1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,1,0,1,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,1,0,1,0,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,1,0,1,1,0,0,1,1,0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,1,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,1,0,1,1,0,1,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,0,0,0,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,1,1,0,1,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,1,0,1,0,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0]},__routerFilterDynamic:{numItems:6,errorRate:1e-4,numBits:116,numHashes:14,bitArray:[1,1,0,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,0,0,0]},sortedPages:["/_app"]},self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,186,222,552,976,1004,1097,1109,1327,1541,1852,1921,2234,2752,2922,2976,3412,3785,3851,3955,4037,4352,4368,4610,4896,5177,5221,5281,5738,5781,5907,6202,6450,6709,6819,6849,6919,6988,7070,7473,7483,7758,7778,7812,7851,8167,8658,8733,8743,8933,8974,9787,9815,9949,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);