@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.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +8 -7
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.js +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +6 -0
- package/.next/server/app/_global-error/page.js +2 -2
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +2 -2
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +17 -16
- package/.next/server/app/_not-found.segments/_full.segment.rsc +17 -16
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +6 -5
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/agent/[id]/events/route.js +2 -2
- package/.next/server/app/api/agent/[id]/route.js +1 -1
- package/.next/server/app/api/agent/new/route.js +1 -1
- package/.next/server/app/api/agent/runtime/route.js +2 -2
- package/.next/server/app/api/auth/all-providers/route.js +1 -1
- package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
- package/.next/server/app/api/auth/login/[provider]/route.js +1 -1
- package/.next/server/app/api/auth/login/route.js +1 -1
- package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
- package/.next/server/app/api/auth/providers/route.js +1 -1
- package/.next/server/app/api/auth/status/route.js +1 -1
- package/.next/server/app/api/default-cwd/route.js +1 -1
- package/.next/server/app/api/extensions/discover/route.js +1 -1
- package/.next/server/app/api/extensions/mcp/route.js +1 -1
- package/.next/server/app/api/extensions/plugin/route.js +1 -1
- package/.next/server/app/api/extensions/plugin-marketplace/route.js +1 -1
- package/.next/server/app/api/extensions/route.js +1 -1
- package/.next/server/app/api/extensions/session/route.js +1 -1
- package/.next/server/app/api/files/[...path]/route.js +1 -1
- package/.next/server/app/api/harness/route.js +1 -1
- package/.next/server/app/api/home/route.js +1 -1
- package/.next/server/app/api/im/gateway-status/route.js +2 -0
- package/.next/server/app/api/im/gateway-status/route.js.nft.json +1 -0
- package/.next/server/app/api/im/gateway-status/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/im/gateway-token/route.js +1 -1
- package/.next/server/app/api/im/project/route.js +2 -2
- package/.next/server/app/api/im/projects/route.js +1 -1
- package/.next/server/app/api/im/turn/route.js +2 -2
- package/.next/server/app/api/images/upload/route.js +1 -1
- package/.next/server/app/api/internal/runtime/route.js +1 -1
- package/.next/server/app/api/memory/promote/route.js +2 -2
- package/.next/server/app/api/memory/recall/route.js +2 -2
- package/.next/server/app/api/memory/reflect/route.js +1 -1
- package/.next/server/app/api/memory/retain/route.js +1 -1
- package/.next/server/app/api/memory/status/route.js +1 -1
- package/.next/server/app/api/models/route.js +1 -1
- package/.next/server/app/api/models-config/discover/route.js +1 -1
- package/.next/server/app/api/models-config/route.js +1 -1
- package/.next/server/app/api/models-config/test/route.js +1 -1
- package/.next/server/app/api/projects/browse/route.js +1 -1
- package/.next/server/app/api/projects/route.js +1 -1
- package/.next/server/app/api/search/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/.next/server/app/api/sessions/new/route.js +1 -1
- package/.next/server/app/api/sessions/route.js +1 -1
- package/.next/server/app/api/settings/route.js +1 -1
- package/.next/server/app/api/skills/install/route.js +2 -2
- package/.next/server/app/api/skills/route.js +2 -2
- package/.next/server/app/api/skills/search/route.js +1 -1
- package/.next/server/app/api/soul/route.js +1 -1
- package/.next/server/app/api/version/route.js +1 -1
- package/.next/server/app/docs/changelog/page.js +3 -3
- package/.next/server/app/docs/changelog/page_client-reference-manifest.js +1 -1
- package/.next/server/app/docs/changelog.html +2 -2
- package/.next/server/app/docs/changelog.rsc +21 -20
- package/.next/server/app/docs/changelog.segments/_full.segment.rsc +21 -20
- package/.next/server/app/docs/changelog.segments/_head.segment.rsc +1 -1
- package/.next/server/app/docs/changelog.segments/_index.segment.rsc +6 -5
- package/.next/server/app/docs/changelog.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/docs/changelog.segments/docs/changelog/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/docs/changelog.segments/docs/changelog.segment.rsc +1 -1
- package/.next/server/app/docs/changelog.segments/docs.segment.rsc +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +16 -15
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/index.segments/_full.segment.rsc +16 -15
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +6 -5
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page.js +2 -2
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +21 -20
- package/.next/server/app/login.segments/_full.segment.rsc +21 -20
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +6 -5
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/server/app/page.js +2 -2
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/workspace/page.js +13 -13
- package/.next/server/app/workspace/page_client-reference-manifest.js +1 -1
- package/.next/server/app/workspace.html +1 -1
- package/.next/server/app/workspace.rsc +18 -17
- package/.next/server/app/workspace.segments/_full.segment.rsc +18 -17
- package/.next/server/app/workspace.segments/_head.segment.rsc +1 -1
- package/.next/server/app/workspace.segments/_index.segment.rsc +6 -5
- package/.next/server/app/workspace.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/workspace.segments/workspace/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/workspace.segments/workspace.segment.rsc +1 -1
- package/.next/server/app-paths-manifest.json +8 -7
- package/.next/server/chunks/6983.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/next-font-manifest.js +1 -1
- package/.next/server/next-font-manifest.json +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/3bvCFCK3i_Ntk7XEeeKag/_buildManifest.js +1 -0
- package/.next/static/chunks/app/_global-error/page-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/events/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/agent/new/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/agent/runtime/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/auth/all-providers/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/auth/api-key/[provider]/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/auth/login/[provider]/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/[provider]/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/auth/providers/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/default-cwd/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/extensions/discover/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/extensions/mcp/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/extensions/plugin/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/extensions/plugin-marketplace/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/extensions/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/extensions/session/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/files/[...path]/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/harness/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/home/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/im/gateway-status/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/im/gateway-token/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/im/project/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/im/projects/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/im/turn/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/images/upload/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/internal/runtime/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/memory/promote/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/memory/recall/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/memory/reflect/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/memory/retain/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/memory/status/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/models/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/models-config/discover/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/models-config/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/models-config/test/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/projects/browse/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/projects/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/search/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/context/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/sessions/new/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/sessions/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/settings/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/skills/install/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/skills/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/skills/search/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/soul/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/api/version/route-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/layout-2e8a047b671c8731.js +1 -0
- package/.next/static/chunks/app/page-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/app/workspace/page-205fe36cdc70dc1c.js +264 -0
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e99818a566cf3a8f.js +1 -0
- package/.next/static/chunks/{webpack-8ff073aee98f20c0.js → webpack-7606de11217524fe.js} +1 -1
- package/bin/annodex-im-gateway.js +173 -3
- package/lib/im-media.js +171 -0
- package/package.json +2 -1
- package/.next/static/9ja2nMxYXszS_1ydk3Gb9/_buildManifest.js +0 -1
- package/.next/static/chunks/app/_global-error/page-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/events/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/agent/new/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/agent/runtime/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/auth/all-providers/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/auth/api-key/[provider]/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/auth/login/[provider]/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/[provider]/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/auth/providers/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/default-cwd/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/extensions/discover/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/extensions/mcp/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/extensions/plugin/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/extensions/plugin-marketplace/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/extensions/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/extensions/session/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/files/[...path]/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/harness/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/home/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/im/gateway-token/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/im/project/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/im/projects/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/im/turn/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/images/upload/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/internal/runtime/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/memory/promote/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/memory/recall/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/memory/reflect/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/memory/retain/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/memory/status/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/models/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/models-config/discover/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/models-config/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/models-config/test/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/projects/browse/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/projects/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/search/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/context/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/sessions/new/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/sessions/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/settings/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/skills/install/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/skills/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/skills/search/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/soul/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/api/version/route-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/layout-10d99d038798f290.js +0 -1
- package/.next/static/chunks/app/page-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/app/workspace/page-9879349ec16c1136.js +0 -264
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-e4c3159b5453fb6b.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e4c3159b5453fb6b.js +0 -1
- /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()}]);
|
package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e99818a566cf3a8f.js
ADDED
|
@@ -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,
|
|
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
|
-
|
|
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
|
|
824
|
+
const rawReply = typeof result.reply === "string" && result.reply.trim()
|
|
662
825
|
? result.reply.trim()
|
|
663
826
|
: "No reply from annodex.";
|
|
664
|
-
|
|
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)}`);
|
package/lib/im-media.js
ADDED
|
@@ -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.
|
|
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()}]);
|