larkup 0.1.28 → 0.1.30
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/build-manifest.json +3 -3
- package/.next/diagnostics/route-bundle-stats.json +22 -22
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/required-server-files.js +1 -1
- package/.next/required-server-files.json +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/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.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.nft.json +1 -1
- 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 +16 -16
- package/.next/server/app/_not-found.segments/_full.segment.rsc +16 -16
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +11 -11
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/analytics/page.js.nft.json +1 -1
- package/.next/server/app/analytics/page_client-reference-manifest.js +1 -1
- package/.next/server/app/analytics.html +1 -1
- package/.next/server/app/analytics.rsc +17 -17
- package/.next/server/app/analytics.segments/_full.segment.rsc +17 -17
- package/.next/server/app/analytics.segments/_head.segment.rsc +4 -4
- package/.next/server/app/analytics.segments/_index.segment.rsc +11 -11
- package/.next/server/app/analytics.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/analytics.segments/analytics/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/analytics.segments/analytics.segment.rsc +3 -3
- package/.next/server/app/api/chat/route.js +8 -9
- package/.next/server/app/api/chat/route.js.nft.json +1 -1
- package/.next/server/app/api/config/test-provider/route.js +4 -4
- package/.next/server/app/api/config/test-provider/route.js.nft.json +1 -1
- package/.next/server/app/api/config/verify/route.js +3 -3
- package/.next/server/app/api/config/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/marketplace/[toolId]/route.js +1 -1
- package/.next/server/app/api/marketplace/[toolId]/route.js.nft.json +1 -1
- package/.next/server/app/api/marketplace/route.js +1 -1
- package/.next/server/app/api/marketplace/route.js.nft.json +1 -1
- package/.next/server/app/api/media/process/route.js +2 -2
- package/.next/server/app/api/media/process/route.js.nft.json +1 -1
- package/.next/server/app/api/media/route.js +1 -1
- package/.next/server/app/api/media/route.js.nft.json +1 -1
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/chat.html +1 -1
- package/.next/server/app/chat.rsc +17 -17
- package/.next/server/app/chat.segments/_full.segment.rsc +17 -17
- package/.next/server/app/chat.segments/_head.segment.rsc +4 -4
- package/.next/server/app/chat.segments/_index.segment.rsc +11 -11
- package/.next/server/app/chat.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/chat.segments/chat.segment.rsc +3 -3
- package/.next/server/app/data/page.js.nft.json +1 -1
- package/.next/server/app/data/page_client-reference-manifest.js +1 -1
- package/.next/server/app/data.html +1 -1
- package/.next/server/app/data.rsc +17 -17
- package/.next/server/app/data.segments/_full.segment.rsc +17 -17
- package/.next/server/app/data.segments/_head.segment.rsc +4 -4
- package/.next/server/app/data.segments/_index.segment.rsc +11 -11
- package/.next/server/app/data.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/data.segments/data/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/data.segments/data.segment.rsc +3 -3
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +16 -16
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +16 -16
- package/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/server/app/index.segments/_index.segment.rsc +11 -11
- package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +18 -18
- package/.next/server/app/settings.segments/_full.segment.rsc +18 -18
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +11 -11
- package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
- package/.next/server/chunks/0598_next_dist_esm_build_templates_app-route_0kbcuk-.js +4 -3
- package/.next/server/chunks/0598_next_dist_esm_build_templates_app-route_1f4h7rr.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__067hiof._.js +18 -6
- package/.next/server/chunks/[root-of-the-server]__0a_0ywc._.js +18 -6
- package/.next/server/chunks/[root-of-the-server]__0c80bj0._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__1m7m2x7._.js → [root-of-the-server]__0drkoru._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__0vnm6_8._.js → [root-of-the-server]__0kmh740._.js} +6 -6
- package/.next/server/chunks/{[root-of-the-server]__0ou70-v._.js → [root-of-the-server]__0nfenje._.js} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0omd-x0._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0u17zp8._.js +18 -6
- package/.next/server/chunks/{[root-of-the-server]__1s1zui-._.js → [root-of-the-server]__10v5qsi._.js} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__1xuhh_i._.js → [root-of-the-server]__16jk_se._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__1ahdfq9._.js +19 -7
- package/.next/server/chunks/[root-of-the-server]__1idgvjh._.js +172 -0
- package/.next/server/chunks/[root-of-the-server]__1ip05r1._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1jc54o2._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0748x7h._.js → [root-of-the-server]__1lhls88._.js} +1 -1
- package/.next/server/chunks/[root-of-the-server]__1o3rcbz._.js +2 -1
- package/.next/server/chunks/{[root-of-the-server]__10gcb7d._.js → [root-of-the-server]__1qh2h5v._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__1s9is1o._.js +2 -1
- package/.next/server/chunks/[root-of-the-server]__1vsvck0._.js +18 -6
- package/.next/server/chunks/{[root-of-the-server]__0g_q-44._.js → [root-of-the-server]__1wy6wes._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__1zptg4z._.js +2 -1
- package/.next/server/chunks/{packages_1f4dx4h._.js → packages_1ggqion._.js} +2 -2
- package/.next/server/chunks/packages_core_src_generator_server-runtime_ts_1_68l7t._.js +4 -4
- package/.next/server/chunks/packages_marketplace_src_125_g2p._.js +1 -1
- package/.next/server/chunks/{packages_vector-stores_src_064-9ay._.js → packages_vector-stores_src_1fib7u-._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__0wdatpx._.js → [root-of-the-server]__0m21fli._.js} +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__1r9ap67._.js → [root-of-the-server]__0t8ud_u._.js} +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__046ldu_._.js → [root-of-the-server]__0xyo3ni._.js} +1 -1
- package/.next/server/chunks/ssr/{_0k81--x._.js → _0ckxy33._.js} +2 -2
- package/.next/server/chunks/ssr/_169pdlf._.js +6 -6
- package/.next/server/chunks/ssr/_1hetwwu._.js +4 -3
- package/.next/server/chunks/ssr/_1yqlx1m._.js +1 -1
- package/.next/server/chunks/ssr/apps_web_components_analytics_analytics-dashboard_tsx_1056-z3._.js +1 -1
- package/.next/server/chunks/ssr/apps_web_lib_pdf-images_ts_13-l5wa._.js +1 -1
- package/.next/server/functions-config-manifest.json +3 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/{3bpr59xr-_rv7.js → 0ge3nirnmx_np.js} +1 -1
- package/.next/static/chunks/{0rgt7-bqxonef.js → 1uzf7x2okeuab.js} +6 -6
- package/.next/static/chunks/{3g_wl1fri6jb-.js → 21_6-9hjj2i68.js} +1 -1
- package/.next/static/chunks/2ib3e0xrrdait.js +1 -0
- package/.next/static/chunks/2jrpgzxyrmuqp.js +121 -0
- package/.next/static/chunks/390ds7l_plpmd.js +1 -0
- package/.next/static/chunks/{3een1tiktxr6a.js → 3zw6tgf7mxo39.js} +1 -1
- package/CHANGELOG.md +22 -0
- package/app/api/chat/route.ts +1 -0
- package/app/api/chat/tools.ts +5 -1
- package/app/api/config/test-provider/route.ts +16 -18
- package/app/api/config/verify/route.ts +5 -7
- package/app/api/describe-image/route.ts +12 -4
- package/app/api/firecrawl/local/route.ts +1 -1
- package/app/api/jobs/route.ts +1 -2
- package/app/api/marketplace/[toolId]/route.ts +1 -0
- package/components/analytics/analytics-dashboard.tsx +1 -1
- package/components/data/firecrawl-notice.tsx +49 -98
- package/components/data/media-panel.tsx +34 -5
- package/components/data/scrape-panel.tsx +17 -1
- package/components/data/upload-panel.tsx +2 -1
- package/components/onboarding/welcome-screen.tsx +45 -15
- package/components/settings/general-section.tsx +15 -10
- package/components/settings/marketplace-section.tsx +14 -2
- package/components/settings/server-section.tsx +3 -3
- package/lib/error-formatter.ts +19 -4
- package/lib/pdf-images.ts +20 -5
- package/package.json +7 -7
- package/.next/server/chunks/[root-of-the-server]__00r1kgp._.js +0 -143
- package/.next/server/chunks/[root-of-the-server]__064gb96._.js +0 -3
- package/.next/server/chunks/_0ce9vcg._.js +0 -32
- package/.next/static/chunks/00z1f-adeq1lg.js +0 -1
- package/.next/static/chunks/0k405nomf6s4e.js +0 -120
- package/.next/static/chunks/13hmtkhrbm4t3.js +0 -1
- /package/.next/static/{bDwMIFYSTVBKUJkJJx77o → Laf7YhpONHOZXSCw6POiL}/_buildManifest.js +0 -0
- /package/.next/static/{bDwMIFYSTVBKUJkJJx77o → Laf7YhpONHOZXSCw6POiL}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{bDwMIFYSTVBKUJkJJx77o → Laf7YhpONHOZXSCw6POiL}/_ssgManifest.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
|
-
2:I[711184,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
3
|
-
3:I[711184,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
2
|
+
2:I[711184,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"ViewportBoundary"]
|
|
3
|
+
3:I[711184,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"MetadataBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
|
-
5:I[499693,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
6
|
-
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"larkup"}],["$","meta","1",{"name":"description","content":"larkup — a toolkit to build, index, and serve your own AI model and knowledge base."}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.05jv43wa20avt.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L5","3",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"
|
|
5
|
+
5:I[499693,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"IconMark"]
|
|
6
|
+
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"larkup"}],["$","meta","1",{"name":"description","content":"larkup — a toolkit to build, index, and serve your own AI model and knowledge base."}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.05jv43wa20avt.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L5","3",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"Laf7YhpONHOZXSCw6POiL"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
|
-
2:I[232295,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
3
|
-
3:I[82100,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
4
|
-
4:I[624529,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
5
|
-
5:I[266186,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
6
|
-
6:I[200943,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
7
|
-
7:I[724474,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
8
|
-
8:I[624727,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
9
|
-
9:I[7012,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
10
|
-
a:I[953159,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
11
|
-
b:I[721606,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
2
|
+
2:I[232295,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"UpdateBanner"]
|
|
3
|
+
3:I[82100,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"ThemeCustomizerProvider"]
|
|
4
|
+
4:I[624529,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"WorkspaceProvider"]
|
|
5
|
+
5:I[266186,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"ClientLayoutWrapper"]
|
|
6
|
+
6:I[200943,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"default"]
|
|
7
|
+
7:I[724474,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js","/_next/static/chunks/2ns4rchocl_ih.js","/_next/static/chunks/3d56c3oo26hbg.js"],"default"]
|
|
8
|
+
8:I[624727,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"default"]
|
|
9
|
+
9:I[7012,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"Toaster"]
|
|
10
|
+
a:I[953159,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"GlobalIndexProgress"]
|
|
11
|
+
b:I[721606,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"Analytics"]
|
|
12
12
|
:HL["/_next/static/chunks/233p45nuh4m5b.css","style"]
|
|
13
13
|
:HL["/_next/static/chunks/0fa79dhcoeytz.css","style"]
|
|
14
|
-
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/233p45nuh4m5b.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/0fa79dhcoeytz.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/1cxabi5yzqz57.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/
|
|
14
|
+
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/233p45nuh4m5b.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/0fa79dhcoeytz.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/1cxabi5yzqz57.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/3zw6tgf7mxo39.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/390ds7l_plpmd.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/0_jwrts3vuzsv.js","async":true}],["$","script","script-4",{"src":"/_next/static/chunks/3w4-sqe513cwc.js","async":true}],["$","script","script-5",{"src":"/_next/static/chunks/1xlxyu0yrbcp_.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"className":"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable bg-transparent","children":["$","body",null,{"suppressHydrationWarning":true,"className":"font-sans antialiased ","children":[["$","script",null,{"dangerouslySetInnerHTML":{"__html":"(function(){try{var t=localStorage.getItem('app-theme');var b=localStorage.getItem('app-background');var r=localStorage.getItem('app-radius');var d=document.body;if(t&&t!=='default')d.classList.add(t);if(b)d.classList.add(b);if(r&&r!=='radius-default')d.classList.add(r);}catch(e){}})();"}}],["$","$L2",null,{}],["$","$L3",null,{"children":["$","$L4",null,{"children":[["$","$L5",null,{"children":["$","$L6",null,{"parallelRouterKey":"children","template":["$","$L7",null,{"children":["$","$L8",null,{}]}],"templateStyles":[],"templateScripts":[["$","script","script-0",{"src":"/_next/static/chunks/2ns4rchocl_ih.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/3d56c3oo26hbg.js","async":true}]],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}],["$","$L9",null,{"position":"bottom-left"}],["$","$La",null,{}]]}]}],["$","$Lb",null,{}]]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"Laf7YhpONHOZXSCw6POiL"}
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
:HL["/_next/static/chunks/0fa79dhcoeytz.css","style"]
|
|
3
3
|
:HL["/_next/static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
4
4
|
:HL["/_next/static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
5
|
-
0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"settings","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"
|
|
5
|
+
0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"settings","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"Laf7YhpONHOZXSCw6POiL"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
|
-
2:I[638757,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
3
|
-
3:I[93505,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
4
|
-
6:I[711184,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
2
|
+
2:I[638757,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"ClientPageRoot"]
|
|
3
|
+
3:I[93505,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js","/_next/static/chunks/1g-co0b2ulsx7.js","/_next/static/chunks/2jrpgzxyrmuqp.js","/_next/static/chunks/3lpl_4iou48lk.js"],"default"]
|
|
4
|
+
6:I[711184,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"OutletBoundary"]
|
|
5
5
|
7:"$Sreact.suspense"
|
|
6
|
-
0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/1g-co0b2ulsx7.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/
|
|
6
|
+
0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/1g-co0b2ulsx7.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/2jrpgzxyrmuqp.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/3lpl_4iou48lk.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"Laf7YhpONHOZXSCw6POiL"}
|
|
7
7
|
4:{}
|
|
8
8
|
5:"$0:rsc:props:children:0:props:serverProvidedParams:params"
|
|
9
9
|
8:null
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
|
-
2:I[200943,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
3
|
-
3:I[624727,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/
|
|
2
|
+
2:I[200943,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"default"]
|
|
3
|
+
3:I[624727,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/390ds7l_plpmd.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"default"]
|
|
4
4
|
4:[]
|
|
5
|
-
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"
|
|
5
|
+
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"Laf7YhpONHOZXSCw6POiL"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
module.exports=[400660,e=>{"use strict";var t=e.i(239441),a=e.i(449055),r=e.i(391328),s=e.i(6352),i=e.i(746789),n=e.i(423437),o=e.i(178820),l=e.i(569191),c=e.i(576251),d=e.i(199962),u=e.i(547545),m=e.i(664046),p=e.i(235691),h=e.i(298907),f=e.i(110763),g=e.i(193695);e.i(673243);var y=e.i(236167),b=e.i(214312),w=e.i(367165),x=e.i(844915),v=e.i(336321),S=e.i(608778),T=e.i(416487),C=e.i(733164),A=e.i(731699),z=e.i(235072),I=e.i(528909),R=e.i(89087),N=e.i(344963),E=e.i(256485),k=e.i(638725),M=e.i(313893),D=e.i(868776),O=e.i(489694),q=e.i(432970),P=e.i(585071),j=e.i(523554),$=e.i(192441),U=e.i(705252);function _(e,t){return t?e.filter(e=>{if(t.source&&e.source!==t.source||t.status&&e.status!==t.status)return!1;if(t.titleContains){let a=t.titleContains.toLowerCase();if(!e.title.toLowerCase().includes(a))return!1}return(!t.createdAfter||!(e.createdAt<t.createdAfter))&&(!t.createdBefore||!(e.createdAt>t.createdBefore))&&(!t.metadataKey||!!e.metadata&&t.metadataKey in e.metadata&&(void 0===t.metadataValue||String(e.metadata[t.metadataKey])===t.metadataValue))&&!0}):e}async function F(e,t=200,a=0,r=!1){let s=_(await (0,U.readDocuments)(),e),i=s.length;return{documents:s.slice(a,a+t).map(e=>{let t={id:e.id,title:e.title,source:e.source,url:e.url,charCount:e.charCount,status:e.status,metadata:e.metadata,createdAt:e.createdAt};return r&&(t.content=e.content.slice(0,2e3)),t}),total:i,summary:function(e){let t={},a={},r={},s=0,i="",n="";for(let o of e){t[o.source]=(t[o.source]??0)+1;let e=o.status??"unindexed";if(a[e]=(a[e]??0)+1,s+=o.charCount,(!i||o.createdAt<i)&&(i=o.createdAt),(!n||o.createdAt>n)&&(n=o.createdAt),o.metadata)for(let e of Object.keys(o.metadata))e.startsWith("_")||(r[e]=(r[e]??0)+1)}let o=Object.entries(r).sort((e,t)=>t[1]-e[1]).slice(0,20).map(([e,t])=>({key:e,count:t}));return{totalDocuments:e.length,bySource:t,byStatus:a,topMetadataKeys:o,totalCharacters:s,dateRange:i?{earliest:i,latest:n}:null}}(s)}}async function L(e,t=1e3){let a=_(await (0,U.readDocuments)(),e);if(0===a.length)return"";let r=new Set;for(let e of a)if(e.metadata)for(let t of Object.keys(e.metadata))t.startsWith("_")||r.add(t);let s=[...r].sort(),i=["id","title","source","url","charCount","status","createdAt","content",...s.map(e=>`metadata_${e}`)],n=e=>e.includes(",")||e.includes('"')||e.includes("\n")?`"${e.replace(/"/g,'""')}"`:e,o=[i.join(",")];for(let e of a){let a=[e.id,e.title,e.source,e.url??"",String(e.charCount),e.status??"unindexed",e.createdAt,e.content.slice(0,t).replace(/\n/g," ")],r=s.map(t=>{let a=e.metadata?.[t];return null==a?"":"object"==typeof a?JSON.stringify(a):String(a)});o.push([...a,...r].map(n).join(","))}return o.join("\n")}async function K(e,t=1e3){return _(await (0,U.readDocuments)(),e).map(e=>{let a={id:e.id,title:e.title,source:e.source,url:e.url??"",charCount:e.charCount,status:e.status??"unindexed",createdAt:e.createdAt,content:e.content.slice(0,t)};if(e.metadata)for(let[t,r]of Object.entries(e.metadata))t.startsWith("_")||(a[`metadata_${t}`]=r);return JSON.stringify(a)}).join("\n")}e.i(983131);var B=e.i(778923);e.i(907667);var W=e.i(490517),H=e.i(504740),V=e.i(463857),Y=e.i(839554),G=e.i(534404);function J({output:e}){return{type:"json",value:e?.success?{success:!0,action:e.action,sessionId:e.sessionId,updatedFields:e.updatedFields??[],fileName:e.fileName,totalPages:e.totalPages,message:"The document was updated successfully. Do not repeat the edit unless requested."}:{success:!1,error:e?.error??"Document update failed"}}}async function Q(t,a,r){let s=async()=>{let s=await (0,w.readConfig)(),i=Math.max(4*a,20),n=await (0,q.refreshServerStatus)();if(n.running)try{let s=Date.now(),o=await fetch(`${n.endpoint}/query`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:t,topK:i}),signal:AbortSignal.timeout(15e3)}),l=await o.json(),{trackUsageEvent:c}=await e.A(313282);if(c({type:"server_request",endpoint:"/query",method:"POST",statusCode:o.status,latencyMs:Date.now()-s,serverId:r??void 0,timestamp:new Date().toISOString()}),o.ok&&l.hits)return X(t,l.hits,a)}catch{}let o=await (0,O.readRun)();if(!o||"completed"!==o.status||(o.totalChunks??0)===0)return{query:t,hits:[]};let l=await (0,j.embedQuery)(s,t),c=await (0,P.createAdapter)(s),d=await c.query(l,i,t);return X(t,d,a)};return r?(0,$.runWithServer)(r,s):s()}async function X(e,t,a){var r;let[s,i]=await Promise.all([(0,U.readDocuments)(),(0,Y.readMediaAssets)()]),n=new Map(s.map(e=>[e.id,e])),o=new Set(i.flatMap(e=>e.documentIds)),l=t.map(e=>{let t=n.get(e.documentId);return{...e,title:e.title||t?.title||"Untitled",url:e.url||t?.url||"",text:e.text||t?.content||"",metadata:{...t?.metadata,...e.metadata}}}),c=[],d=new Map;for(let e of l){if(e.metadata?.mediaAssetId&&(!n.has(e.documentId)||!o.has(e.documentId)))continue;let t=d.get(e.documentId)??0;if(!(t>=(e.metadata?.isMediaSummary===!0||e.metadata?.contentKind==="multimodal-segment"||e.metadata?.contentKind==="audio-transcript-segment"?1:3))&&(c.push(e),d.set(e.documentId,t+1),c.length>=a))break}let u=c.find(e=>e.metadata?.mediaAssetId)?.metadata.mediaAssetId,m=u?s.filter(e=>"indexed"===e.status&&e.metadata?.mediaAssetId===u&&o.has(e.id)):[],p=m.filter(e=>Number.isFinite(Number(e.metadata?.endSecs))).sort((e,t)=>Number(e.metadata?.endSecs??0)-Number(t.metadata?.endSecs??0)),h=Math.max(0,...p.map(e=>Number(e.metadata?.durationSecs??e.metadata?.endSecs??0))),f=Math.max(600,Math.min(1800,.2*h)),g=p.filter(e=>Number(e.metadata?.endSecs??0)>=h-f),y=[...new Map([...(r=e,/\b(who won|winner|won|final score|scoreline|result|beat|defeated|victor|champion|took (?:the )?(?:game|match|round))\b|من فاز|مين فاز|الفائز|النتيجة|نتيجة|فاز|كسب|البطل|حسم|انتصر/i.test(r))?g.filter(e=>{var t;return t=e.content,/\b(winner|won|final score|total score|scoreline|champion|victor|defeated|beat)\b|الفائز|النتيجة|فاز|كسب|البطل|حسم|انتصر/i.test(t)}).slice(-2):[],...g.slice(-4)].map(e=>[e.id,e])).values()].sort((e,t)=>Number(e.metadata?.endSecs??0)-Number(t.metadata?.endSecs??0)),b=m.find(e=>e.metadata?.isMediaSummary===!0),w=0===y.length?m.find(e=>e.metadata?.contentKind==="multimodal-timeline"):void 0,x=u?[...b?[{role:"summary",title:b.title,url:b.url,text:(0,G.queryAwareExcerpt)(b.content,e,6e3),startSecs:void 0,endSecs:void 0}]:[],...y.map(t=>({role:"ending",title:t.title,url:t.url,text:(0,G.queryAwareExcerpt)(t.content,e,3200,!0),startSecs:t.metadata?.startSecs,endSecs:t.metadata?.endSecs})),...w?[{role:"ending",title:w.title,url:w.url,text:(0,G.queryAwareExcerpt)(w.content,e,4e3,!0),startSecs:void 0,endSecs:w.metadata?.durationSecs}]:[]]:void 0;return{query:e,hits:c.map((t,a)=>{let r=Number(t.metadata?.sequence),i=Number(t.metadata?.startSecs),n=t.metadata?.mediaAssetId?s.filter(e=>{let a=Number(e.metadata?.sequence),s=Number(e.metadata?.startSecs);return"indexed"===e.status&&o.has(e.id)&&e.metadata?.mediaAssetId===t.metadata.mediaAssetId&&Number.isFinite(r)&&Number.isFinite(a)&&1>=Math.abs(a-r)&&(!Number.isFinite(i)||!Number.isFinite(s)||Math.abs(s-i)<=Math.max(90,Number(t.metadata?.endSecs??i)-i,Number(e.metadata?.endSecs??s)-s))}).sort((e,t)=>Number(e.metadata?.startSecs??0)-Number(t.metadata?.startSecs??0)).map(t=>({role:Number(t.metadata?.sequence)<r?"before":Number(t.metadata?.sequence)>r?"after":"matched",title:t.title,url:t.url,text:(0,G.queryAwareExcerpt)(t.content,e,3200),startSecs:t.metadata?.startSecs,endSecs:t.metadata?.endSecs})):void 0;return{documentId:t.documentId,title:t.title??"Untitled",url:t.url??"",score:Number((t.score??0).toFixed(3)),text:(0,G.queryAwareExcerpt)(t.text??"",e,4e3),metadata:t.metadata,timelineContext:n,endingContext:0===a?x:void 0}})}}async function Z(t){let{serverId:a,docSessionId:r,config:s}=t,i={searchKnowledgeBase:(0,M.tool)({description:"Search the user's private RAG knowledge base when their question depends on indexed documents or media and the needed evidence is not already in the conversation. Do not use for general knowledge, casual conversation, writing tasks, or a follow-up that can be answered from an earlier search result. Search once with a focused query. For media, inspect the returned timeline and endingContext when relevant, and reuse exact mediaAssetId/startSecs/endSecs values with presentMedia when a preview is useful. Never guess timestamps.",inputSchema:D.z.object({query:D.z.string().describe("The search query for the knowledge base.")}),execute:async({query:e})=>Q(e,5,a??null)}),presentMedia:(0,M.tool)({description:"Embed one indexed image, video segment, or audio segment as a compact citation in the chat. Use the exact mediaAssetId and timestamps from a current or earlier search result. Call this when the user asks to see, watch, play, or hear the media, or when one preview materially supports the answer. Prefer one best citation and do not call this for every search hit. Do not search again if the needed asset ID is already in the conversation.",inputSchema:D.z.object({assetId:D.z.string().describe("Exact mediaAssetId returned by searchKnowledgeBase."),startSecs:D.z.number().nonnegative().optional().describe("Exact segment start time returned by searchKnowledgeBase."),endSecs:D.z.number().nonnegative().optional().describe("Exact segment end time returned by searchKnowledgeBase.")}),execute:async({assetId:e,startSecs:t,endSecs:r})=>{let s=async()=>{let s=(await (0,Y.readMediaAssets)()).find(t=>t.id===e);if(!s||"completed"!==s.processingStatus)return{success:!1,error:"That indexed media asset is no longer available."};let i=(0,G.normalizeMediaCitationRange)(s.type,s.durationSecs,t,r),n=a?`?serverId=${encodeURIComponent(a)}`:"",o=`/api/media/${s.id}${n}`,l=void 0!==i.startSecs?(0,G.timestampMediaUrl)(s.originalUrl||o,i.startSecs):s.originalUrl||o;return{success:!0,assetId:s.id,mediaType:s.type,fileName:s.fileName,mediaUrl:o,sourceUrl:l,startSecs:i.startSecs,endSecs:i.endSecs}};return a?(0,$.runWithServer)(a,s):s()}}),queryTabularData:(0,M.tool)({description:"Query a tabular dataset (CSV/Excel/JSON) for exact values, filtering, grouping, and aggregations. Use this when the user asks about specific data values, comparisons, averages, sums, counts, highest/lowest, or any numerical question about uploaded data.",inputSchema:D.z.object({datasetId:D.z.string().describe("The ID of the dataset to query. Get this from the available datasets list in the system prompt."),filters:D.z.array(D.z.object({column:D.z.string(),op:D.z.enum(["eq","neq","gt","gte","lt","lte","contains","in"]),value:D.z.any()})).optional().describe("Filters to apply to the data."),groupBy:D.z.array(D.z.string()).optional().describe("Columns to group by for aggregations."),aggregations:D.z.array(D.z.object({column:D.z.string(),op:D.z.enum(["sum","avg","count","min","max","median"])})).optional().describe("Aggregation operations to perform."),sortBy:D.z.string().optional().describe("Column to sort results by."),sortOrder:D.z.enum(["asc","desc"]).optional().describe("Sort direction."),limit:D.z.number().optional().describe("Max number of rows to return."),columns:D.z.array(D.z.string()).optional().describe("Specific columns to include in results.")}),execute:async e=>{try{return await (0,S.queryTabular)(e)}catch(e){return{columns:[],rows:[],totalRows:0,error:e.message??"Query failed"}}}}),generateVisualization:(0,M.tool)({description:"Generate an interactive chart visualization. Use this when the user asks to see trends, comparisons, distributions, or any visual representation of data. The UI will render this as an interactive Recharts chart.",inputSchema:D.z.object({chartType:D.z.enum(["bar","area","line","pie","scatter","radar"]).describe("The type of chart to create."),title:D.z.string().describe("Chart title."),subtitle:D.z.string().optional().describe("Chart subtitle for additional context."),data:D.z.array(D.z.record(D.z.string(),D.z.any())).describe("Array of data points to plot. You MUST provide the data here. Example: [{'name': 'North', 'value': 3206}, {'name': 'East', 'value': 2492}]"),xAxisKey:D.z.string().describe("The key in data objects to use for the X axis (usually 'name')."),series:D.z.array(D.z.object({dataKey:D.z.string().describe("The key in data objects for this series values."),label:D.z.string().optional().describe("Display label for this series in the legend."),color:D.z.string().optional().describe("Color for this series (hex). If omitted, theme colors are used.")})).describe("Data series to plot."),stacked:D.z.boolean().optional().describe("Whether to stack bar/area charts."),showLegend:D.z.boolean().optional().default(!0).describe("Whether to show the legend."),xAxisLabel:D.z.string().optional().describe("Label for the X axis."),yAxisLabel:D.z.string().optional().describe("Label for the Y axis.")}),execute:async e=>e}),executeAnalysis:(0,M.tool)({description:"Execute Python code in a secure sandbox for deep data analysis. Use this for complex statistical computations (correlations, regressions, clustering), data transformations, or when creating custom matplotlib visualizations. The code has access to pandas, numpy, matplotlib, scipy, scikit-learn, and seaborn. Always print results to stdout and use plt.show() for charts.",inputSchema:D.z.object({code:D.z.string().describe('Python code to execute. Has pandas (2.0+), numpy, matplotlib, scipy, sklearn, seaborn available. ALWAYS use "ME" instead of "M" for resample frequency. Print results and use plt.show() for charts.'),datasetId:D.z.string().optional().describe("If provided, the dataset CSV will be available as 'data.csv' in the working directory.")}),execute:async({code:e,datasetId:t})=>{try{let a=new B.SandboxManager({backend:"docker"}),r=[];if(t){let e=await (0,S.getTabularDataset)(t);if(e&&e.rows.length>0){let t=e.columns.map(e=>e.name),a=[t.join(",")];for(let r of e.rows)a.push(t.map(e=>{let t=r[e],a=String(t??"");return a.includes(",")||a.includes('"')?`"${a.replace(/"/g,'""')}"`:a}).join(","));r.push({name:"data.csv",content:a.join("\n")})}}let s=e,i=await a.execute({code:s,language:"python",files:r,timeout:3e4});return 0!==i.exitCode&&(s=(s=(s=(s=s.replace(/resample\((['"])M(['"])\)/g,"resample($1ME$2)")).replace(/resample\((['"])Q(['"])\)/g,"resample($1QE$2)")).replace(/resample\((['"])Y(['"])\)/g,"resample($1YE$2)")).replace(/freq=(['"])M(['"])/g,"freq=$1ME$2"),i=await a.execute({code:s,language:"python",files:r,timeout:3e4})),{stdout:i.stdout.slice(0,5e3),stderr:i.stderr.slice(0,2e3),exitCode:i.exitCode,artifacts:i.artifacts.map(e=>({name:e.name,mimeType:e.mimeType,data:e.data.slice(0,5e5)})),executionTimeMs:i.executionTimeMs}}catch(e){return{stdout:"",stderr:e.message??"Sandbox execution failed",exitCode:1,artifacts:[],executionTimeMs:0}}}}),analyzeImageDeeply:(0,M.tool)({description:"Use this tool when you need to answer a detailed question about an image (like a diagram, chart, or schema) found in the knowledge base. Pass the exact imageUrl found in the document metadata, along with specific instructions on what you need to extract from it.",inputSchema:D.z.object({imageUrl:D.z.string().describe("The URL of the image to analyze (from metadata.images.imageUrl)"),prompt:D.z.string().describe("Specific instructions on what to extract or analyze from this image. Be as detailed as possible to get the best result.")}),execute:async({imageUrl:e,prompt:t})=>{try{let a=e.startsWith("/")?`http://127.0.0.1:${process.env.PORT||3e3}${e}`:e,r=await fetch(a);if(!r.ok)throw Error(`Failed to fetch image: ${r.statusText}`);let s=await r.arrayBuffer(),i=Buffer.from(s).toString("base64");r.headers.get("content-type");let n=await fetch(`http://127.0.0.1:${process.env.PORT||3e3}/api/describe-image`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({base64:i,prompt:t})});if(!n.ok)throw Error(`Vision API error: ${n.statusText}`);return{analysis:(await n.json()).description}}catch(e){return{error:`Failed to analyze image: ${e.message}`}}}}),getIndexedData:(0,M.tool)({description:'Get structured access to ALL indexed source documents. Use this for counting, listing, filtering, and overview questions about the knowledge base. Returns document metadata (title, source type, status, custom metadata fields, dates). Use this when the user asks "how many documents?", "list all X", "show progress", "what sources?", or any structural question about the corpus.',inputSchema:D.z.object({filter:D.z.object({source:D.z.enum(["paste","upload","scrape","tabular","media"]).optional().describe("Filter by document source type."),status:D.z.enum(["indexed","unindexed"]).optional().describe("Filter by indexing status."),metadataKey:D.z.string().optional().describe("Filter by metadata key existence."),metadataValue:D.z.string().optional().describe("Filter by metadata key=value (requires metadataKey)."),titleContains:D.z.string().optional().describe("Case-insensitive text search in title."),createdAfter:D.z.string().optional().describe("Only docs created on or after this ISO date."),createdBefore:D.z.string().optional().describe("Only docs created on or before this ISO date.")}).optional().describe("Optional filters to narrow down documents."),limit:D.z.number().optional().default(200).describe("Max number of document summaries to return (default 200)."),offset:D.z.number().optional().default(0).describe("Pagination offset."),includeContent:D.z.boolean().optional().default(!1).describe("Whether to include truncated document content. Default false for performance. Set true only when you need the actual text.")}),execute:async({filter:e,limit:t,offset:a,includeContent:r})=>{try{let s=Math.min(t??(r?20:100),r?20:100);return await F(e,s,a??0,r??!1)}catch(e){return{documents:[],total:0,summary:{totalDocuments:0,bySource:{},byStatus:{},topMetadataKeys:[],totalCharacters:0,dateRange:null},error:e.message??"Failed to retrieve corpus data"}}}}),analyzeCorpusWithCode:(0,M.tool)({description:'Run Python code in a sandbox with the FULL indexed corpus available as a file. Use this for complex analysis of documents: parsing fields from content, computing progress percentages, grouping by patterns, detecting duplicates, generating charts from corpus data, or any question that requires programmatic processing of hundreds/thousands of documents. The corpus is available as "corpus.csv" (or "corpus.jsonl" if format is jsonl). CSV columns: id, title, source, url, charCount, status, createdAt, content, plus any metadata_* columns.',inputSchema:D.z.object({code:D.z.string().describe('Python code to execute. The corpus file is in the working directory. Use pandas to load it: df = pd.read_csv("corpus.csv") or for JSONL: df = pd.read_json("corpus.jsonl", lines=True). Has pandas (2.0+), numpy, matplotlib, scipy, sklearn, seaborn available. ALWAYS use "ME" instead of "M" for resample frequency. Print results and use plt.show() for charts.'),format:D.z.enum(["csv","jsonl"]).optional().default("csv").describe("Format of the corpus file. Default is CSV.")}),execute:async({code:e,format:t})=>{try{let a=new B.SandboxManager({backend:"docker"}),r="jsonl"===t?await K():await L();if(!r)return{stdout:"No documents found in the corpus.",stderr:"",exitCode:0,artifacts:[],executionTimeMs:0};let s=[{name:"jsonl"===t?"corpus.jsonl":"corpus.csv",content:r}],i=e,n=await a.execute({code:i,language:"python",files:s,timeout:3e4});return 0!==n.exitCode&&(i=(i=(i=(i=i.replace(/resample\((['"])M(['"])\)/g,"resample($1ME$2)")).replace(/resample\((['"])Q(['"])\)/g,"resample($1QE$2)")).replace(/resample\((['"])Y(['"])\)/g,"resample($1YE$2)")).replace(/freq=(['"])M(['"])/g,"freq=$1ME$2"),n=await a.execute({code:i,language:"python",files:s,timeout:3e4})),{stdout:n.stdout.slice(0,5e3),stderr:n.stderr.slice(0,2e3),exitCode:n.exitCode,artifacts:n.artifacts.map(e=>({name:e.name,mimeType:e.mimeType,data:e.data.slice(0,5e5)})),executionTimeMs:n.executionTimeMs}}catch(e){return{stdout:"",stderr:e.message??"Corpus analysis failed",exitCode:1,artifacts:[],executionTimeMs:0}}}}),fillDocumentForm:(0,M.tool)({description:'Fill form fields, text inputs, or checkboxes in the currently active document. Use this when the user asks to "fill the form", "add data to fields", or "fill with dummy data". You should use the searchKnowledgeBase tool to find answers to form questions if you do not know them. The available fields are provided in your system prompt.',inputSchema:D.z.object({edits:D.z.array(D.z.object({fieldId:D.z.string().describe("The ID of the field to fill (from the active document context)"),value:D.z.string().describe("The value to set for the field")})).describe("List of fields to fill and their new values")}),execute:async({edits:e})=>{if(!r)return{success:!1,error:"Document not loaded yet. Please wait a moment or ask the user to click the document to open it in the canvas before filling it."};try{let t=e.map(e=>({...e,type:"fill"})),a=await (0,W.applyFieldEdits)(r,t);if(!a.success)return{success:!1,error:a.error};return{success:!0,action:"fill_document",sessionId:r,edits:e,updatedFields:a.updatedFields,fileName:a.parsed.fileName,mimeType:a.parsed.mimeType,fields:a.parsed.fields,pages:a.parsed.pages.map(e=>({index:e.index,text:e.text.slice(0,2e3),html:e.html,fields:e.fields,dimensions:e.dimensions})),totalPages:a.parsed.totalPages,fileBase64:a.fileBase64}}catch(e){return{success:!1,error:e.message}}},toModelOutput:J}),editDocument:(0,M.tool)({description:"Edit the content (text) of the currently active document. Use this when the user asks to modify paragraphs, rewrite text, or change slides (not form fields).",inputSchema:D.z.object({edits:D.z.array(D.z.object({pageIndex:D.z.number().default(0).describe("Page or slide index (0-based)"),type:D.z.enum(["replace_text","insert_text"]).describe("Type of edit"),search:D.z.string().optional().describe("Text to search for (if replacing)"),text:D.z.string().describe("Replacement text or text to insert")})).describe("List of content edits to apply")}),execute:async({edits:e})=>{if(!r)return{success:!1,error:"Document not loaded yet. Please wait a moment or ask the user to click the document to open it in the canvas before editing it."};try{let t=await (0,W.applyContentEdits)(r,e);if(!t.success)return{success:!1,error:t.error};return{success:!0,action:"edit_document",sessionId:r,edits:e,updatedFields:t.updatedFields,fileName:t.parsed.fileName,mimeType:t.parsed.mimeType,pages:t.parsed.pages.map(e=>({index:e.index,text:e.text.slice(0,2e3),html:e.html,fields:e.fields,dimensions:e.dimensions})),totalPages:t.parsed.totalPages,fileBase64:t.fileBase64}}catch(e){return{success:!1,error:e.message}}},toModelOutput:J}),requestDocumentSignature:(0,M.tool)({description:'STRICTLY ONLY use this when the user explicitly asks to "sign" the currently active document or asks for a "signature". CRITICAL: Do NOT use this tool for filling forms, answering questions, or adding dummy data. CRITICAL: NEVER call this tool more than once per user request. Yields a UI widget for the user to confirm the placement and provide their signature.',inputSchema:D.z.object({detectedLocations:D.z.array(D.z.object({pageIndex:D.z.number(),context:D.z.string()})).optional().describe("Optional. The detected signature locations in the document.")})}),webSearch:(0,M.tool)({description:"Search the public internet for current information, news, or facts that are not available in the local knowledge base.",inputSchema:D.z.object({query:D.z.string().describe("The search query.")}),execute:async({query:t})=>{let a,r=s?.webSearchProvider||"tavily",i=new Request("http://localhost/api/search",{method:"POST",body:JSON.stringify({query:t})});try{switch(r){case"google":case"serper":let{POST:t}=await e.A(311108);a=await t(i);break;case"tavily":let{POST:s}=await e.A(118890);a=await s(i);break;case"brave":let{POST:n}=await e.A(3366);a=await n(i);break;case"bing":let{POST:o}=await e.A(654210);a=await o(i);break;case"exa":let{POST:l}=await e.A(187616);a=await l(i);break;default:let{POST:c}=await e.A(465615);a=await c(i)}if(a.status>=400)return{error:(await a.json()).error||"Search failed",results:[]};let d=await a.json();return{results:(d.items||d.results||[]).slice(0,10).map(e=>({title:e.title,url:e.url,snippet:e.description||e.snippet||""}))}}catch(e){return{error:e.message||"Search failed",results:[]}}}})},n=s?.enabledTools||[],o={},l=e=>0===n.length||n.includes(e);for(let[e,t]of Object.entries(i))"webSearch"!==e&&(l(e)||["presentMedia","fillDocumentForm","editDocument","requestDocumentSignature"].includes(e))&&(o[e]=t);s?.webSearchEnabled===!0&&(o.webSearch=i.webSearch);try{for(let e of(await (0,V.getInstalledTools)()))if(l(e.id)){let a=await (0,H.loadTool)(e.id);a&&a.default?o[e.id]=a.default(t):a&&a.tool&&(o[e.id]=a.tool(t))}}catch(e){console.error("[marketplace] Failed to load marketplace tools for chat:",e)}return o}let ee=`
|
|
1
|
+
module.exports=[400660,e=>{"use strict";var t=e.i(239441),a=e.i(449055),r=e.i(391328),s=e.i(6352),i=e.i(746789),n=e.i(423437),o=e.i(178820),l=e.i(569191),c=e.i(576251),d=e.i(199962),u=e.i(547545),m=e.i(664046),p=e.i(235691),h=e.i(298907),f=e.i(110763),g=e.i(193695);e.i(673243);var y=e.i(236167),b=e.i(214312),w=e.i(367165),x=e.i(844915),v=e.i(336321),S=e.i(608778),T=e.i(416487),A=e.i(733164),C=e.i(731699),z=e.i(235072),I=e.i(528909),R=e.i(89087),N=e.i(344963),k=e.i(256485),E=e.i(638725),M=e.i(313893),D=e.i(868776),O=e.i(489694),q=e.i(432970),P=e.i(585071),j=e.i(523554),$=e.i(192441),U=e.i(705252);function _(e,t){return t?e.filter(e=>{if(t.source&&e.source!==t.source||t.status&&e.status!==t.status)return!1;if(t.titleContains){let a=t.titleContains.toLowerCase();if(!e.title.toLowerCase().includes(a))return!1}return(!t.createdAfter||!(e.createdAt<t.createdAfter))&&(!t.createdBefore||!(e.createdAt>t.createdBefore))&&(!t.metadataKey||!!e.metadata&&t.metadataKey in e.metadata&&(void 0===t.metadataValue||String(e.metadata[t.metadataKey])===t.metadataValue))&&!0}):e}async function F(e,t=200,a=0,r=!1){let s=_(await (0,U.readDocuments)(),e),i=s.length;return{documents:s.slice(a,a+t).map(e=>{let t={id:e.id,title:e.title,source:e.source,url:e.url,charCount:e.charCount,status:e.status,metadata:e.metadata,createdAt:e.createdAt};return r&&(t.content=e.content.slice(0,2e3)),t}),total:i,summary:function(e){let t={},a={},r={},s=0,i="",n="";for(let o of e){t[o.source]=(t[o.source]??0)+1;let e=o.status??"unindexed";if(a[e]=(a[e]??0)+1,s+=o.charCount,(!i||o.createdAt<i)&&(i=o.createdAt),(!n||o.createdAt>n)&&(n=o.createdAt),o.metadata)for(let e of Object.keys(o.metadata))e.startsWith("_")||(r[e]=(r[e]??0)+1)}let o=Object.entries(r).sort((e,t)=>t[1]-e[1]).slice(0,20).map(([e,t])=>({key:e,count:t}));return{totalDocuments:e.length,bySource:t,byStatus:a,topMetadataKeys:o,totalCharacters:s,dateRange:i?{earliest:i,latest:n}:null}}(s)}}async function L(e,t=1e3){let a=_(await (0,U.readDocuments)(),e);if(0===a.length)return"";let r=new Set;for(let e of a)if(e.metadata)for(let t of Object.keys(e.metadata))t.startsWith("_")||r.add(t);let s=[...r].sort(),i=["id","title","source","url","charCount","status","createdAt","content",...s.map(e=>`metadata_${e}`)],n=e=>e.includes(",")||e.includes('"')||e.includes("\n")?`"${e.replace(/"/g,'""')}"`:e,o=[i.join(",")];for(let e of a){let a=[e.id,e.title,e.source,e.url??"",String(e.charCount),e.status??"unindexed",e.createdAt,e.content.slice(0,t).replace(/\n/g," ")],r=s.map(t=>{let a=e.metadata?.[t];return null==a?"":"object"==typeof a?JSON.stringify(a):String(a)});o.push([...a,...r].map(n).join(","))}return o.join("\n")}async function K(e,t=1e3){return _(await (0,U.readDocuments)(),e).map(e=>{let a={id:e.id,title:e.title,source:e.source,url:e.url??"",charCount:e.charCount,status:e.status??"unindexed",createdAt:e.createdAt,content:e.content.slice(0,t)};if(e.metadata)for(let[t,r]of Object.entries(e.metadata))t.startsWith("_")||(a[`metadata_${t}`]=r);return JSON.stringify(a)}).join("\n")}e.i(983131);var B=e.i(778923);e.i(907667);var W=e.i(490517),H=e.i(504740),V=e.i(463857),Y=e.i(839554),G=e.i(534404);function J({output:e}){return{type:"json",value:e?.success?{success:!0,action:e.action,sessionId:e.sessionId,updatedFields:e.updatedFields??[],fileName:e.fileName,totalPages:e.totalPages,message:"The document was updated successfully. Do not repeat the edit unless requested."}:{success:!1,error:e?.error??"Document update failed"}}}async function Q(t,a,r){let s=async()=>{let s=await (0,w.readConfig)(),i=Math.max(4*a,20),n=await (0,q.refreshServerStatus)();if(n.running)try{let s=Date.now(),o=await fetch(`${n.endpoint}/query`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:t,topK:i}),signal:AbortSignal.timeout(15e3)}),l=await o.json(),{trackUsageEvent:c}=await e.A(313282);if(c({type:"server_request",endpoint:"/query",method:"POST",statusCode:o.status,latencyMs:Date.now()-s,serverId:r??void 0,timestamp:new Date().toISOString()}),o.ok&&Array.isArray(l.hits)&&l.hits.length>0)return X(t,l.hits,a)}catch{}let o=await (0,O.readRun)();if(!o||"completed"!==o.status||(o.totalChunks??0)===0)return{query:t,hits:[]};let l=await (0,j.embedQuery)(s,t),c=await (0,P.createAdapter)(s),d=await c.query(l,i,t);return X(t,d,a)};return r?(0,$.runWithServer)(r,s):s()}async function X(e,t,a){var r;let[s,i]=await Promise.all([(0,U.readDocuments)(),(0,Y.readMediaAssets)()]),n=new Map(s.map(e=>[e.id,e])),o=new Set(i.flatMap(e=>e.documentIds)),l=t.map(e=>{let t=n.get(e.documentId);return{...e,title:e.title||t?.title||"Untitled",url:e.url||t?.url||"",text:e.text||t?.content||"",metadata:{...t?.metadata,...e.metadata}}}),c=[],d=new Map;for(let e of l){if(e.metadata?.mediaAssetId&&(!n.has(e.documentId)||!o.has(e.documentId)))continue;let t=d.get(e.documentId)??0;if(!(t>=(e.metadata?.isMediaSummary===!0||e.metadata?.contentKind==="multimodal-segment"||e.metadata?.contentKind==="audio-transcript-segment"?1:3))&&(c.push(e),d.set(e.documentId,t+1),c.length>=a))break}let u=c.find(e=>e.metadata?.mediaAssetId)?.metadata.mediaAssetId,m=u?s.filter(e=>"indexed"===e.status&&e.metadata?.mediaAssetId===u&&o.has(e.id)):[],p=m.filter(e=>Number.isFinite(Number(e.metadata?.endSecs))).sort((e,t)=>Number(e.metadata?.endSecs??0)-Number(t.metadata?.endSecs??0)),h=Math.max(0,...p.map(e=>Number(e.metadata?.durationSecs??e.metadata?.endSecs??0))),f=Math.max(600,Math.min(1800,.2*h)),g=p.filter(e=>Number(e.metadata?.endSecs??0)>=h-f),y=[...new Map([...(r=e,/\b(who won|winner|won|final score|scoreline|result|beat|defeated|victor|champion|took (?:the )?(?:game|match|round))\b|من فاز|مين فاز|الفائز|النتيجة|نتيجة|فاز|كسب|البطل|حسم|انتصر/i.test(r))?g.filter(e=>{var t;return t=e.content,/\b(winner|won|final score|total score|scoreline|champion|victor|defeated|beat)\b|الفائز|النتيجة|فاز|كسب|البطل|حسم|انتصر/i.test(t)}).slice(-2):[],...g.slice(-4)].map(e=>[e.id,e])).values()].sort((e,t)=>Number(e.metadata?.endSecs??0)-Number(t.metadata?.endSecs??0)),b=m.find(e=>e.metadata?.isMediaSummary===!0),w=0===y.length?m.find(e=>e.metadata?.contentKind==="multimodal-timeline"):void 0,x=u?[...b?[{role:"summary",title:b.title,url:b.url,text:(0,G.queryAwareExcerpt)(b.content,e,6e3),startSecs:void 0,endSecs:void 0}]:[],...y.map(t=>({role:"ending",title:t.title,url:t.url,text:(0,G.queryAwareExcerpt)(t.content,e,3200,!0),startSecs:t.metadata?.startSecs,endSecs:t.metadata?.endSecs})),...w?[{role:"ending",title:w.title,url:w.url,text:(0,G.queryAwareExcerpt)(w.content,e,4e3,!0),startSecs:void 0,endSecs:w.metadata?.durationSecs}]:[]]:void 0;return{query:e,hits:c.map((t,a)=>{let r=Number(t.metadata?.sequence),i=Number(t.metadata?.startSecs),n=t.metadata?.mediaAssetId?s.filter(e=>{let a=Number(e.metadata?.sequence),s=Number(e.metadata?.startSecs);return"indexed"===e.status&&o.has(e.id)&&e.metadata?.mediaAssetId===t.metadata.mediaAssetId&&Number.isFinite(r)&&Number.isFinite(a)&&1>=Math.abs(a-r)&&(!Number.isFinite(i)||!Number.isFinite(s)||Math.abs(s-i)<=Math.max(90,Number(t.metadata?.endSecs??i)-i,Number(e.metadata?.endSecs??s)-s))}).sort((e,t)=>Number(e.metadata?.startSecs??0)-Number(t.metadata?.startSecs??0)).map(t=>({role:Number(t.metadata?.sequence)<r?"before":Number(t.metadata?.sequence)>r?"after":"matched",title:t.title,url:t.url,text:(0,G.queryAwareExcerpt)(t.content,e,3200),startSecs:t.metadata?.startSecs,endSecs:t.metadata?.endSecs})):void 0;return{documentId:t.documentId,title:t.title??"Untitled",url:t.url??"",score:Number((t.score??0).toFixed(3)),text:(0,G.queryAwareExcerpt)(t.text??"",e,4e3),metadata:t.metadata,timelineContext:n,endingContext:0===a?x:void 0}})}}async function Z(t){let{serverId:a,docSessionId:r,config:s}=t,i={searchKnowledgeBase:(0,M.tool)({description:"Search the user's private RAG knowledge base when their question depends on indexed documents or media and the needed evidence is not already in the conversation. Do not use for general knowledge, casual conversation, writing tasks, or a follow-up that can be answered from an earlier search result. Search once with a focused query. For media, inspect the returned timeline and endingContext when relevant, and reuse exact mediaAssetId/startSecs/endSecs values with presentMedia when a preview is useful. Never guess timestamps.",inputSchema:D.z.object({query:D.z.string().describe("The search query for the knowledge base.")}),execute:async({query:e})=>Q(e,5,a??null)}),presentMedia:(0,M.tool)({description:"Embed one indexed image, video segment, or audio segment as a compact citation in the chat. Use the exact mediaAssetId and timestamps from a current or earlier search result. Call this when the user asks to see, watch, play, or hear the media, or when one preview materially supports the answer. Prefer one best citation and do not call this for every search hit. Do not search again if the needed asset ID is already in the conversation.",inputSchema:D.z.object({assetId:D.z.string().describe("Exact mediaAssetId returned by searchKnowledgeBase."),startSecs:D.z.number().nonnegative().optional().describe("Exact segment start time returned by searchKnowledgeBase."),endSecs:D.z.number().nonnegative().optional().describe("Exact segment end time returned by searchKnowledgeBase.")}),execute:async({assetId:e,startSecs:t,endSecs:r})=>{let s=async()=>{let s=(await (0,Y.readMediaAssets)()).find(t=>t.id===e);if(!s||"completed"!==s.processingStatus)return{success:!1,error:"That indexed media asset is no longer available."};let i=(0,G.normalizeMediaCitationRange)(s.type,s.durationSecs,t,r),n=a?`?serverId=${encodeURIComponent(a)}`:"",o=`/api/media/${s.id}${n}`,l=void 0!==i.startSecs?(0,G.timestampMediaUrl)(s.originalUrl||o,i.startSecs):s.originalUrl||o;return{success:!0,assetId:s.id,mediaType:s.type,fileName:s.fileName,mediaUrl:o,sourceUrl:l,startSecs:i.startSecs,endSecs:i.endSecs}};return a?(0,$.runWithServer)(a,s):s()}}),queryTabularData:(0,M.tool)({description:"Query a tabular dataset (CSV/Excel/JSON) for exact values, filtering, grouping, and aggregations. Use this when the user asks about specific data values, comparisons, averages, sums, counts, highest/lowest, or any numerical question about uploaded data.",inputSchema:D.z.object({datasetId:D.z.string().describe("The ID of the dataset to query. Get this from the available datasets list in the system prompt."),filters:D.z.array(D.z.object({column:D.z.string(),op:D.z.enum(["eq","neq","gt","gte","lt","lte","contains","in"]),value:D.z.any()})).optional().describe("Filters to apply to the data."),groupBy:D.z.array(D.z.string()).optional().describe("Columns to group by for aggregations."),aggregations:D.z.array(D.z.object({column:D.z.string(),op:D.z.enum(["sum","avg","count","min","max","median"])})).optional().describe("Aggregation operations to perform."),sortBy:D.z.string().optional().describe("Column to sort results by."),sortOrder:D.z.enum(["asc","desc"]).optional().describe("Sort direction."),limit:D.z.number().optional().describe("Max number of rows to return."),columns:D.z.array(D.z.string()).optional().describe("Specific columns to include in results.")}),execute:async e=>{try{return await (0,S.queryTabular)(e)}catch(e){return{columns:[],rows:[],totalRows:0,error:e.message??"Query failed"}}}}),generateVisualization:(0,M.tool)({description:"Generate an interactive chart visualization. Use this when the user asks to see trends, comparisons, distributions, or any visual representation of data. The UI will render this as an interactive Recharts chart.",inputSchema:D.z.object({chartType:D.z.enum(["bar","area","line","pie","scatter","radar"]).describe("The type of chart to create."),title:D.z.string().describe("Chart title."),subtitle:D.z.string().optional().describe("Chart subtitle for additional context."),data:D.z.array(D.z.record(D.z.string(),D.z.any())).describe("Array of data points to plot. You MUST provide the data here. Example: [{'name': 'North', 'value': 3206}, {'name': 'East', 'value': 2492}]"),xAxisKey:D.z.string().describe("The key in data objects to use for the X axis (usually 'name')."),series:D.z.array(D.z.object({dataKey:D.z.string().describe("The key in data objects for this series values."),label:D.z.string().optional().describe("Display label for this series in the legend."),color:D.z.string().optional().describe("Color for this series (hex). If omitted, theme colors are used.")})).describe("Data series to plot."),stacked:D.z.boolean().optional().describe("Whether to stack bar/area charts."),showLegend:D.z.boolean().optional().default(!0).describe("Whether to show the legend."),xAxisLabel:D.z.string().optional().describe("Label for the X axis."),yAxisLabel:D.z.string().optional().describe("Label for the Y axis.")}),execute:async e=>e}),executeAnalysis:(0,M.tool)({description:"Execute Python code in a secure sandbox for deep data analysis. Use this for complex statistical computations (correlations, regressions, clustering), data transformations, or when creating custom matplotlib visualizations. The code has access to pandas, numpy, matplotlib, scipy, scikit-learn, and seaborn. Always print results to stdout and use plt.show() for charts.",inputSchema:D.z.object({code:D.z.string().describe('Python code to execute. Has pandas (2.0+), numpy, matplotlib, scipy, sklearn, seaborn available. ALWAYS use "ME" instead of "M" for resample frequency. Print results and use plt.show() for charts.'),datasetId:D.z.string().optional().describe("If provided, the dataset CSV will be available as 'data.csv' in the working directory.")}),execute:async({code:e,datasetId:t})=>{try{let a=new B.SandboxManager({backend:"docker"}),r=[];if(t){let e=await (0,S.getTabularDataset)(t);if(e&&e.rows.length>0){let t=e.columns.map(e=>e.name),a=[t.join(",")];for(let r of e.rows)a.push(t.map(e=>{let t=r[e],a=String(t??"");return a.includes(",")||a.includes('"')?`"${a.replace(/"/g,'""')}"`:a}).join(","));r.push({name:"data.csv",content:a.join("\n")})}}let s=e,i=await a.execute({code:s,language:"python",files:r,timeout:3e4});return 0!==i.exitCode&&(s=(s=(s=(s=s.replace(/resample\((['"])M(['"])\)/g,"resample($1ME$2)")).replace(/resample\((['"])Q(['"])\)/g,"resample($1QE$2)")).replace(/resample\((['"])Y(['"])\)/g,"resample($1YE$2)")).replace(/freq=(['"])M(['"])/g,"freq=$1ME$2"),i=await a.execute({code:s,language:"python",files:r,timeout:3e4})),{stdout:i.stdout.slice(0,5e3),stderr:i.stderr.slice(0,2e3),exitCode:i.exitCode,artifacts:i.artifacts.map(e=>({name:e.name,mimeType:e.mimeType,data:e.data.slice(0,5e5)})),executionTimeMs:i.executionTimeMs}}catch(e){return{stdout:"",stderr:e.message??"Sandbox execution failed",exitCode:1,artifacts:[],executionTimeMs:0}}}}),analyzeImageDeeply:(0,M.tool)({description:"Use this tool when you need to answer a detailed question about an image (like a diagram, chart, or schema) found in the knowledge base. Pass the exact imageUrl found in the document metadata, along with specific instructions on what you need to extract from it.",inputSchema:D.z.object({imageUrl:D.z.string().describe("The URL of the image to analyze (from metadata.images.imageUrl)"),prompt:D.z.string().describe("Specific instructions on what to extract or analyze from this image. Be as detailed as possible to get the best result.")}),execute:async({imageUrl:e,prompt:t})=>{try{let a=e.startsWith("/")?`http://127.0.0.1:${process.env.PORT||3e3}${e}`:e,r=await fetch(a);if(!r.ok)throw Error(`Failed to fetch image: ${r.statusText}`);let s=await r.arrayBuffer(),i=Buffer.from(s).toString("base64");r.headers.get("content-type");let n=await fetch(`http://127.0.0.1:${process.env.PORT||3e3}/api/describe-image`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({base64:i,prompt:t})});if(!n.ok)throw Error(`Vision API error: ${n.statusText}`);return{analysis:(await n.json()).description}}catch(e){return{error:`Failed to analyze image: ${e.message}`}}}}),getIndexedData:(0,M.tool)({description:'Get structured access to ALL indexed source documents. Use this for counting, listing, filtering, and overview questions about the knowledge base. Returns document metadata (title, source type, status, custom metadata fields, dates). Use this when the user asks "how many documents?", "list all X", "show progress", "what sources?", or any structural question about the corpus.',inputSchema:D.z.object({filter:D.z.object({source:D.z.enum(["paste","upload","scrape","tabular","media"]).optional().describe("Filter by document source type."),status:D.z.enum(["indexed","unindexed"]).optional().describe("Filter by indexing status."),metadataKey:D.z.string().optional().describe("Filter by metadata key existence."),metadataValue:D.z.string().optional().describe("Filter by metadata key=value (requires metadataKey)."),titleContains:D.z.string().optional().describe("Case-insensitive text search in title."),createdAfter:D.z.string().optional().describe("Only docs created on or after this ISO date."),createdBefore:D.z.string().optional().describe("Only docs created on or before this ISO date.")}).optional().describe("Optional filters to narrow down documents."),limit:D.z.number().optional().default(200).describe("Max number of document summaries to return (default 200)."),offset:D.z.number().optional().default(0).describe("Pagination offset."),includeContent:D.z.boolean().optional().default(!1).describe("Whether to include truncated document content. Default false for performance. Set true only when you need the actual text.")}),execute:async({filter:e,limit:t,offset:a,includeContent:r})=>{try{let s=Math.min(t??(r?20:100),r?20:100);return await F(e,s,a??0,r??!1)}catch(e){return{documents:[],total:0,summary:{totalDocuments:0,bySource:{},byStatus:{},topMetadataKeys:[],totalCharacters:0,dateRange:null},error:e.message??"Failed to retrieve corpus data"}}}}),analyzeCorpusWithCode:(0,M.tool)({description:'Run Python code in a sandbox with the FULL indexed corpus available as a file. Use this for complex analysis of documents: parsing fields from content, computing progress percentages, grouping by patterns, detecting duplicates, generating charts from corpus data, or any question that requires programmatic processing of hundreds/thousands of documents. The corpus is available as "corpus.csv" (or "corpus.jsonl" if format is jsonl). CSV columns: id, title, source, url, charCount, status, createdAt, content, plus any metadata_* columns.',inputSchema:D.z.object({code:D.z.string().describe('Python code to execute. The corpus file is in the working directory. Use pandas to load it: df = pd.read_csv("corpus.csv") or for JSONL: df = pd.read_json("corpus.jsonl", lines=True). Has pandas (2.0+), numpy, matplotlib, scipy, sklearn, seaborn available. ALWAYS use "ME" instead of "M" for resample frequency. Print results and use plt.show() for charts.'),format:D.z.enum(["csv","jsonl"]).optional().default("csv").describe("Format of the corpus file. Default is CSV.")}),execute:async({code:e,format:t})=>{try{let a=new B.SandboxManager({backend:"docker"}),r="jsonl"===t?await K():await L();if(!r)return{stdout:"No documents found in the corpus.",stderr:"",exitCode:0,artifacts:[],executionTimeMs:0};let s=[{name:"jsonl"===t?"corpus.jsonl":"corpus.csv",content:r}],i=e,n=await a.execute({code:i,language:"python",files:s,timeout:3e4});return 0!==n.exitCode&&(i=(i=(i=(i=i.replace(/resample\((['"])M(['"])\)/g,"resample($1ME$2)")).replace(/resample\((['"])Q(['"])\)/g,"resample($1QE$2)")).replace(/resample\((['"])Y(['"])\)/g,"resample($1YE$2)")).replace(/freq=(['"])M(['"])/g,"freq=$1ME$2"),n=await a.execute({code:i,language:"python",files:s,timeout:3e4})),{stdout:n.stdout.slice(0,5e3),stderr:n.stderr.slice(0,2e3),exitCode:n.exitCode,artifacts:n.artifacts.map(e=>({name:e.name,mimeType:e.mimeType,data:e.data.slice(0,5e5)})),executionTimeMs:n.executionTimeMs}}catch(e){return{stdout:"",stderr:e.message??"Corpus analysis failed",exitCode:1,artifacts:[],executionTimeMs:0}}}}),fillDocumentForm:(0,M.tool)({description:'Fill form fields, text inputs, or checkboxes in the currently active document. Use this when the user asks to "fill the form", "add data to fields", or "fill with dummy data". You should use the searchKnowledgeBase tool to find answers to form questions if you do not know them. The available fields are provided in your system prompt.',inputSchema:D.z.object({edits:D.z.array(D.z.object({fieldId:D.z.string().describe("The ID of the field to fill (from the active document context)"),value:D.z.string().describe("The value to set for the field")})).describe("List of fields to fill and their new values")}),execute:async({edits:e})=>{if(!r)return{success:!1,error:"Document not loaded yet. Please wait a moment or ask the user to click the document to open it in the canvas before filling it."};try{let t=e.map(e=>({...e,type:"fill"})),a=await (0,W.applyFieldEdits)(r,t);if(!a.success)return{success:!1,error:a.error};return{success:!0,action:"fill_document",sessionId:r,edits:e,updatedFields:a.updatedFields,fileName:a.parsed.fileName,mimeType:a.parsed.mimeType,fields:a.parsed.fields,pages:a.parsed.pages.map(e=>({index:e.index,text:e.text.slice(0,2e3),html:e.html,fields:e.fields,dimensions:e.dimensions})),totalPages:a.parsed.totalPages,fileBase64:a.fileBase64}}catch(e){return{success:!1,error:e.message}}},toModelOutput:J}),editDocument:(0,M.tool)({description:"Edit the content (text) of the currently active document. Use this when the user asks to modify paragraphs, rewrite text, or change slides (not form fields).",inputSchema:D.z.object({edits:D.z.array(D.z.object({pageIndex:D.z.number().default(0).describe("Page or slide index (0-based)"),type:D.z.enum(["replace_text","insert_text"]).describe("Type of edit"),search:D.z.string().optional().describe("Text to search for (if replacing)"),text:D.z.string().describe("Replacement text or text to insert")})).describe("List of content edits to apply")}),execute:async({edits:e})=>{if(!r)return{success:!1,error:"Document not loaded yet. Please wait a moment or ask the user to click the document to open it in the canvas before editing it."};try{let t=await (0,W.applyContentEdits)(r,e);if(!t.success)return{success:!1,error:t.error};return{success:!0,action:"edit_document",sessionId:r,edits:e,updatedFields:t.updatedFields,fileName:t.parsed.fileName,mimeType:t.parsed.mimeType,pages:t.parsed.pages.map(e=>({index:e.index,text:e.text.slice(0,2e3),html:e.html,fields:e.fields,dimensions:e.dimensions})),totalPages:t.parsed.totalPages,fileBase64:t.fileBase64}}catch(e){return{success:!1,error:e.message}}},toModelOutput:J}),requestDocumentSignature:(0,M.tool)({description:'STRICTLY ONLY use this when the user explicitly asks to "sign" the currently active document or asks for a "signature". CRITICAL: Do NOT use this tool for filling forms, answering questions, or adding dummy data. CRITICAL: NEVER call this tool more than once per user request. Yields a UI widget for the user to confirm the placement and provide their signature.',inputSchema:D.z.object({detectedLocations:D.z.array(D.z.object({pageIndex:D.z.number(),context:D.z.string()})).optional().describe("Optional. The detected signature locations in the document.")})}),webSearch:(0,M.tool)({description:"Search the public internet for current information, news, or facts that are not available in the local knowledge base.",inputSchema:D.z.object({query:D.z.string().describe("The search query.")}),execute:async({query:t})=>{let a,r=s?.webSearchProvider||"tavily",i=new Request("http://localhost/api/search",{method:"POST",body:JSON.stringify({query:t})});try{switch(r){case"google":case"serper":let{POST:t}=await e.A(311108);a=await t(i);break;case"tavily":let{POST:s}=await e.A(118890);a=await s(i);break;case"brave":let{POST:n}=await e.A(3366);a=await n(i);break;case"bing":let{POST:o}=await e.A(654210);a=await o(i);break;case"exa":let{POST:l}=await e.A(187616);a=await l(i);break;default:let{POST:c}=await e.A(465615);a=await c(i)}if(a.status>=400)return{error:(await a.json()).error||"Search failed",results:[]};let d=await a.json();return{results:(d.items||d.results||[]).slice(0,10).map(e=>({title:e.title,url:e.url,snippet:e.description||e.snippet||""}))}}catch(e){return{error:e.message||"Search failed",results:[]}}}})},n=s?.enabledTools||[],o={},l=e=>0===n.length||n.includes(e);for(let[e,t]of Object.entries(i))"webSearch"!==e&&(l(e)||["presentMedia","fillDocumentForm","editDocument","requestDocumentSignature"].includes(e))&&(o[e]=t);s?.webSearchEnabled===!0&&(o.webSearch=i.webSearch);try{for(let e of(await (0,V.getInstalledTools)()))if(l(e.id)){let a=await (0,H.loadTool)(e.id);a&&a.default?o[e.id]=a.default(t):a&&a.tool&&(o[e.id]=a.tool(t))}}catch(e){console.error("[marketplace] Failed to load marketplace tools for chat:",e)}return o}let ee=`
|
|
2
2
|
|
|
3
3
|
CONVERSATION, RETRIEVAL, AND MEDIA POLICY:
|
|
4
4
|
- Default to a short, direct answer. One to three sentences is usually enough; use structure only when the task is genuinely complex.
|
|
5
5
|
- Do not search for greetings, casual conversation, writing help, brainstorming, explanations you can answer reliably from general knowledge, or questions unrelated to the user's indexed data.
|
|
6
6
|
- Use searchKnowledgeBase only when the answer depends on the user's indexed/private content, an exact source-specific fact, or a topic that plausibly refers to something the user indexed.
|
|
7
|
+
- Treat questions about the user or their materials as knowledge-base questions: phrases such as "I", "my", "our", "you have", "the database", "the document", "the file", or "the diagram" require searchKnowledgeBase before answering whenever indexed content may contain the answer.
|
|
7
8
|
- Search at most once per user request unless the first search is clearly irrelevant. Never repeat a search when a prior tool result in this conversation already contains enough evidence.
|
|
8
9
|
- For a follow-up such as "show me that part", "play the clip", "show the image", or "let me hear it", reuse the mediaAssetId and timestamps already present in the earlier search result and call presentMedia directly. Do not search again just to rediscover the same media.
|
|
9
10
|
- Use presentMedia to embed exactly one best video, image, or audio citation when the user asks to see/hear it or when one compact preview materially supports the answer. Do not present every search result.
|
|
10
11
|
- Keep the written answer minimal around a media citation. Do not print internal media reference markers.
|
|
11
|
-
`;async function et(t){let{messages:a,serverId:r,chatModelId:s,docSessionId:i,docFields:n}=await t.json(),o=await (0,w.readConfig)(),l=o.chatProvider||o.embeddingProvider,c=(await (0,x.getModelsByType)("language")).map(v.toChatDescriptor),d=s||o.chatModelId||(0,v.getDefaultChatModel)(c,l)?.id||"openai/gpt-4o-mini",u=d.split("/")[0],m="vercel_ai_gateway"===l?"vercel_ai_gateway":u||l,p=function(e,t,a,r){if(t.startsWith("custom:")){let e=t.slice(7),s=(r??[]).find(t=>t.modelName===e);if(s)return(0,
|
|
12
|
+
`;async function et(t){let{messages:a,serverId:r,chatModelId:s,docSessionId:i,docFields:n}=await t.json(),o=await (0,w.readConfig)(),l=o.chatProvider||o.embeddingProvider,c=(await (0,x.getModelsByType)("language")).map(v.toChatDescriptor),d=s||o.chatModelId||(0,v.getDefaultChatModel)(c,l)?.id||"openai/gpt-4o-mini",u=d.split("/")[0],m="vercel_ai_gateway"===l?"vercel_ai_gateway":u||l,p=function(e,t,a,r){if(t.startsWith("custom:")){let e=t.slice(7),s=(r??[]).find(t=>t.modelName===e);if(s)return(0,k.createOpenAICompatible)({name:"custom_chat_provider",baseURL:s.baseUrl,apiKey:s.apiKey||a||void 0})(s.modelName)}let s=t.includes("/")?t.split("/").slice(1).join("/"):t;switch(e){case"google":return(0,A.createGoogleGenerativeAI)({apiKey:a})(s);case"cohere":return(0,C.createCohere)({apiKey:a})(s);case"mistral":return(0,z.createMistral)({apiKey:a})(s);case"deepseek":return(0,I.createDeepSeek)({apiKey:a})(s);case"anthropic":return(0,R.createAnthropic)({apiKey:a})(s);case"openai":return(0,T.createOpenAI)({apiKey:a})(s);default:return(0,N.createGateway)({apiKey:a})(t)}}(m,d,o.chatApiKey||o.embeddingApiKey||void 0,o.customChatModels),h=(a.length>20?a.slice(a.length-20):a).map(e=>{let t={...e},a=(e,t)=>{let a=e,r=!1;if("string"==typeof e)try{a=JSON.parse(e),r=!0}catch{return e}if("object"!=typeof a||null===a)return e;let s=t&&["fillDocumentForm","editDocument","requestDocumentSignature"].includes(t);if(s||a.fileBase64||a.pages){let e={...a};return delete e.fileBase64,delete e.pages,s&&(delete e.fields,e.rawText&&(e.rawText=e.rawText.slice(0,500))),r?JSON.stringify(e):e}return e};return"assistant"===t.role&&t.toolInvocations&&(t.toolInvocations=t.toolInvocations.filter(e=>"result"===e.state||"output"===e.state||"output-available"===e.state).map(e=>e.result?{...e,result:a(e.result,e.toolName)}:e)),Array.isArray(t.parts)&&(t.parts=t.parts.map(e=>{if("tool-invocation"===e.type&&e.toolInvocation){let t=e.toolInvocation;if(void 0!==t.result)return{...e,toolInvocation:{...t,result:a(t.result,t.toolName)}}}if("tool-result"===e.type&&void 0!==e.result)return{...e,result:a(e.result,e.toolName)};if("file"===e.type){let t=e.data||e.url||"";if("string"==typeof t&&t.length>5e3){let t=(e.mimeType||e.mediaType||"").toLowerCase();if(!t.startsWith("image/"))return{type:"text",text:`[File attachment: ${t||"document"} — removed from context for size]`}}}return e})),t.experimental_attachments&&(t.experimental_attachments=t.experimental_attachments.filter(e=>!(e.url&&e.url.length>5e3&&(e.contentType&&e.contentType.toLowerCase().includes("pdf")||e.name&&e.name.toLowerCase().endsWith(".pdf")||e.url.substring(0,50).toLowerCase().includes("pdf")||!(e.contentType&&e.contentType.toLowerCase().startsWith("image/"))))&&!0)),Array.isArray(t.content)&&(t.content=t.content.filter(e=>{let t=e.data||e.url||e.text;return!("string"==typeof t&&t.length>5e3&&(e.mimeType&&e.mimeType.toLowerCase().includes("pdf")||e.contentType&&e.contentType.toLowerCase().includes("pdf")||t.substring(0,50).toLowerCase().includes("pdf")||!(e.mimeType?.startsWith("image/")||e.contentType?.startsWith("image/"))))&&!0})),t}),f="";try{let e=await (0,S.listTabularDatasets)();e.length>0&&(f=`
|
|
12
13
|
|
|
13
14
|
Available tabular datasets:
|
|
14
15
|
${e.map(e=>{let t=e.columns.map(e=>{let t=`${e.name} (${e.type})`;return"date"===e.type&&e.dateRange&&(t+=` [format: ${e.dateRange.format}, range: ${e.dateRange.min} to ${e.dateRange.max}]`),e.sampleValues&&e.sampleValues.length>0&&(t+=` [samples: ${e.sampleValues.slice(0,3).join(", ")}]`),t}).join(", "),a=e.rowCount>1e4?" ⚠️ LARGE DATASET — prefer executeAnalysis with pandas for complex queries":"";return`- Dataset "${e.fileName}" (ID: ${e.id}): ${e.rowCount} rows, ${e.summary.totalColumns} columns.${a}
|
|
@@ -19,6 +20,6 @@ You are currently editing a document in the Canvas.
|
|
|
19
20
|
The user may ask you to fill out form fields or edit content.
|
|
20
21
|
IMPORTANT: Use the exact field IDs listed below when calling "fillDocumentForm". Do NOT invent field IDs.
|
|
21
22
|
Available Form Fields (${n?.length??0} total):
|
|
22
|
-
${e}`}let y=(o.systemPrompt||
|
|
23
|
+
${e}`}let y=(o.systemPrompt||E.DEFAULT_SYSTEM_PROMPT)+ee+f+g,M=await Z({serverId:r,docSessionId:i,config:o});return(0,b.streamText)({model:p,system:y,messages:await (0,b.convertToModelMessages)(h,{tools:M}),maxOutputTokens:8192,stopWhen:(0,b.stepCountIs)(8),onFinish:async({usage:t,response:a})=>{let{trackUsageEvent:r,estimateCost:s}=await e.A(313282);r({type:"chat",modelId:d,provider:m,promptTokens:t?.promptTokens??0,completionTokens:t?.completionTokens??0,totalTokens:t?.totalTokens??0,estimatedCost:s(d,t?.promptTokens??0,t?.completionTokens??0),timestamp:new Date().toISOString()})},tools:M}).toUIMessageStreamResponse({onError:e=>{if(console.error("[chat] stream error:",e),e&&"object"==typeof e){if(e.message)return e.message;if(e.error&&e.error.message)return e.error.message;try{return JSON.stringify(e)}catch{return"Something went wrong while generating a response."}}return(e instanceof Error?e.message:String(e))||"Something went wrong while generating a response."}})}e.s(["POST",0,et,"maxDuration",0,60],246037);var ea=e.i(246037);let er=new t.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/chat/route",pathname:"/api/chat",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/chat/route.ts",nextConfigOutput:"standalone",userland:ea,...{}}),{workAsyncStorage:es,workUnitAsyncStorage:ei,serverHooks:en}=er;async function eo(e,t,r){r.requestMeta&&(0,s.setRequestMeta)(e,r.requestMeta),er.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let b="/api/chat/route";b=b.replace(/\/index$/,"")||"/";let w=await er.prepare(e,t,{srcPage:b,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:x,deploymentId:v,params:S,nextConfig:T,parsedUrl:A,isDraftMode:C,prerenderManifest:z,routerServerContext:I,isOnDemandRevalidate:R,revalidateOnlyGenerated:N,resolvedPathname:k,clientReferenceManifest:E,serverActionsManifest:M}=w,D=(0,o.normalizeAppPath)(b),O=!!(z.dynamicRoutes[D]||z.routes[k]),q=async()=>((null==I?void 0:I.render404)?await I.render404(e,t,A,!1):t.end("This page could not be found"),null);if(O&&!C){let e=!!z.routes[k],t=z.dynamicRoutes[D];if(t&&!1===t.fallback&&!e){if(T.adapterPath)return await q();throw new g.NoFallbackError}}let P=null;!O||er.isDev||C||(P="/index"===(P=k)?"/":P);let j=!0===er.isDev||!O,$=O&&!j;M&&E&&(0,n.setManifestsSingleton)({page:b,clientReferenceManifest:E,serverActionsManifest:M});let U=e.method||"GET",_=(0,i.getTracer)(),F=_.getActiveScopeSpan(),L=!!(null==I?void 0:I.isWrappedByNextServer),K=!!(0,s.getRequestMeta)(e,"minimalMode"),B=(0,s.getRequestMeta)(e,"incrementalCache")||await er.getIncrementalCache(e,T,z,K);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let W={params:S,previewProps:z.preview,renderOpts:{experimental:{authInterrupts:!!T.experimental.authInterrupts},cacheComponents:!!T.cacheComponents,supportsDynamicResponse:j,incrementalCache:B,cacheLifeProfiles:T.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,r,s)=>er.onRequestError(e,t,r,s,I)},sharedContext:{buildId:x,deploymentId:v}},H=new l.NodeNextRequest(e),V=new l.NodeNextResponse(t),Y=c.NextRequestAdapter.fromNodeNextRequest(H,(0,c.signalFromNodeResponse)(t));try{let s,n=async e=>er.handle(Y,W).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=_.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route");if(r){let t=`${U} ${r}`;e.setAttributes({"next.route":r,"http.route":r,"next.span_name":t}),e.updateName(t),s&&s!==e&&(s.setAttribute("http.route",r),s.updateName(t))}else e.updateName(`${U} ${b}`)}),o=async s=>{var i,o;let l=async({previousCacheEntry:a})=>{try{if(!K&&R&&N&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await n(s);e.fetchMetrics=W.renderOpts.fetchMetrics;let o=W.renderOpts.pendingWaitUntil;o&&r.waitUntil&&(r.waitUntil(o),o=void 0);let l=W.renderOpts.collectedTags;if(!O)return await (0,m.sendResponse)(H,V,i,W.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,p.toNodeOutgoingHttpHeaders)(i.headers);l&&(t[f.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==W.renderOpts.collectedRevalidate&&!(W.renderOpts.collectedRevalidate>=f.INFINITE_CACHE)&&W.renderOpts.collectedRevalidate,r=void 0===W.renderOpts.collectedExpire||W.renderOpts.collectedExpire>=f.INFINITE_CACHE?void 0:W.renderOpts.collectedExpire;return{value:{kind:y.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==a?void 0:a.isStale)&&await er.onRequestError(e,t,{routerKind:"App Router",routePath:b,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:R})},!1,I),t}},c=await er.handleResponse({req:e,nextConfig:T,cacheKey:P,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:z,isRoutePPREnabled:!1,isOnDemandRevalidate:R,revalidateOnlyGenerated:N,responseGenerator:l,waitUntil:r.waitUntil,isMinimalMode:K});if(!O)return null;if((null==c||null==(i=c.value)?void 0:i.kind)!==y.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(o=c.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});K||t.setHeader("x-nextjs-cache",R?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),C&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let d=(0,p.fromNodeOutgoingHttpHeaders)(c.value.headers);return K&&O||d.delete(f.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||d.get("Cache-Control")||d.set("Cache-Control",(0,h.getCacheControlHeader)(c.cacheControl)),await (0,m.sendResponse)(H,V,new Response(c.value.body,{headers:d,status:c.value.status||200})),null};L&&F?await o(F):(s=_.getActiveScopeSpan(),await _.withPropagatedContext(e.headers,()=>_.trace(d.BaseServerSpan.handleRequest,{spanName:`${U} ${b}`,kind:i.SpanKind.SERVER,attributes:{"http.method":U,"http.target":e.url}},o),void 0,!L))}catch(t){if(t instanceof g.NoFallbackError||await er.onRequestError(e,t,{routerKind:"App Router",routePath:D,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:R})},!1,I),O)throw t;return await (0,m.sendResponse)(H,V,new Response(null,{status:500})),null}}e.s(["handler",0,eo,"patchFetch",0,function(){return(0,r.patchFetch)({workAsyncStorage:es,workUnitAsyncStorage:ei})},"routeModule",0,er,"serverHooks",0,en,"workAsyncStorage",0,es,"workUnitAsyncStorage",0,ei],400660)}];
|
|
23
24
|
|
|
24
25
|
//# sourceMappingURL=0598_next_dist_esm_build_templates_app-route_0kbcuk-.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[265306,e=>{"use strict";var t=e.i(239441),a=e.i(449055),r=e.i(391328),n=e.i(6352),i=e.i(746789),o=e.i(423437),s=e.i(178820),l=e.i(569191),u=e.i(576251),d=e.i(199962),c=e.i(547545),p=e.i(664046),h=e.i(235691),m=e.i(298907),g=e.i(110763),f=e.i(193695);e.i(673243);var v=e.i(236167),R=e.i(766576),y=e.i(214312),w=e.i(600373),b=e.i(399828),x=e.i(416487),E=e.i(733164),A=e.i(731699),N=e.i(235072),C=e.i(528909),_=e.i(89087),P=e.i(344963),T=e.i(256485);let k={openai:"gpt-4o-mini",anthropic:"claude-sonnet-4-20250514",google:"gemini-2.0-flash",mistral:"mistral-small-latest",deepseek:"deepseek-chat",cohere:"command-r",vercel_ai_gateway:"openai/gpt-4o-mini"},$={openai:"openai/text-embedding-3-small",google:"google/gemini-embedding-001",cohere:"cohere/embed-english-v3.0",mistral:"mistral/mistral-embed",vercel_ai_gateway:"openai/text-embedding-3-small"};async function j(e){let{embeddingProvider:t,embeddingApiKey:a,embeddingModelId:r,chatProvider:n,chatApiKey:i,chatModelId:o,customChatModels:s,customEmbeddings:l,audioProvider:u,audioApiKey:d,audioModelId:c}=await e.json();if(!t&&!n&&!u)return R.NextResponse.json({error:"No provider fields to verify"},{status:400});if(t)try{let e="vercel_ai_gateway"===t?"vercel_ai_gateway":t,n=r;if(n&&"vercel_ai_gateway"!==e&&"custom"!==e){let t=(0,b.getEmbeddingModel)(n)||(0,b.getEmbeddingModel)(`${e}/${n}`);t&&t.provider===e||(n="")}n||(n=$[e]||$.openai),"custom"===e&&l&&l.length>0&&(n=`custom:${l[0].modelName}`);let i={embeddingProvider:t,embeddingApiKey:a,embeddingModelId:n,customEmbeddings:l},o=(0,w.getAIModel)(i);try{await (0,y.embed)({model:o,value:"test"})}catch(r){let t=r.message||"";if(t.includes("not found")||t.includes("not available")||t.includes("no longer available")||t.includes("does not exist")){if("google"===e)try{let e=await fetch(`https://generativelanguage.googleapis.com/v1beta/models?key=${a}`),t=((await e.json()).models||[]).filter(e=>e.supportedGenerationMethods?.includes("embedContent")).map(e=>e.name);return R.NextResponse.json({error:`Embedding model "${n}" is not available for your API key. Available models: ${t.join(", ")}`},{status:400})}catch{}return R.NextResponse.json({error:`Embedding model "${n}" is not available. Please select a different model or check your API key.`},{status:400})}return R.NextResponse.json({error:`Embedding verification failed: ${t}`},{status:400})}}catch(e){return R.NextResponse.json({error:`Embedding Error: ${e.message}`},{status:400})}if(n)try{let e,t="vercel_ai_gateway"===n?"vercel_ai_gateway":n;e="custom"===t&&s&&s.length>0?`custom:${s[0].modelName}`:o||("vercel_ai_gateway"===t?k.vercel_ai_gateway:`${t}/${k[t]||"gpt-4o-mini"}`);let a=function(e,t,a,r){if(t.startsWith("custom:")){let e=t.slice(7),n=(r??[]).find(t=>t.modelName===e);if(n)return(0,T.createOpenAICompatible)({name:"custom_chat_provider",baseURL:n.baseUrl,apiKey:n.apiKey||a||void 0})(n.modelName)}let n=t.includes("/")?t.split("/").slice(1).join("/"):t;switch(e){case"google":return(0,E.createGoogleGenerativeAI)({apiKey:a})(n);case"cohere":return(0,A.createCohere)({apiKey:a})(n);case"mistral":return(0,N.createMistral)({apiKey:a})(n);case"deepseek":return(0,C.createDeepSeek)({apiKey:a})(n);case"anthropic":return(0,_.createAnthropic)({apiKey:a})(n);case"openai":return(0,x.createOpenAI)({apiKey:a})(n);default:return(0,P.createGateway)({apiKey:a})(t)}}(t,e,i,s);try{await (0,y.generateText)({model:a,prompt:"hi",maxOutputTokens:16})}catch(a){let t=a.message||"";if(t.includes("not found")||t.includes("not available")||t.includes("no longer available")||t.includes("does not exist")||t.includes("is not supported for generateContent")){if(o)return R.NextResponse.json({error:`Chat model "${e}" is not available for your API key. Please select a different model.`},{status:400});return R.NextResponse.json({error:`The default test model for ${n} could not be verified. Your API key might only support specific models. Please select a model manually.`},{status:400})}if(t.includes("API key")||t.includes("authentication")||t.includes("unauthorized")||t.includes("401"))return R.NextResponse.json({error:`Chat API key is invalid or unauthorized for ${n}. Please check your key.`},{status:400});return R.NextResponse.json({error:`Chat verification failed: ${t}`},{status:400})}}catch(e){return R.NextResponse.json({error:`Chat Error: ${e.message}`},{status:400})}if(u&&"local"!==u)try{let e="",t={Authorization:`Bearer ${d}`};if("openai"===u)e="https://api.openai.com/v1/audio/transcriptions";else if("groq"===u)e="https://api.groq.com/openai/v1/audio/transcriptions";else if("deepgram"===u)e="https://api.deepgram.com/v1/listen",t={Authorization:`Token ${d}`};else if("assemblyai"===u)e="https://api.assemblyai.com/v2/transcript",t={Authorization:d};else if("elevenlabs"===u)e="https://api.elevenlabs.io/v1/speech-to-text",t={"xi-api-key":d};else if("azure openai"===u)return R.NextResponse.json({success:!0});else if("rev.ai"===u)e="https://api.rev.ai/speechtotext/v1/jobs";else if("fal"===u)return R.NextResponse.json({success:!0});else if("google"===u)return R.NextResponse.json({success:!0});if(e){let a=await fetch(e,{method:"POST",headers:t});if(401===a.status||403===a.status)return R.NextResponse.json({error:`Invalid API Key for ${u}`},{status:400})}}catch(e){return R.NextResponse.json({error:`Audio verification failed: ${e.message}`},{status:400})}return R.NextResponse.json({success:!0})}e.s(["POST",0,j,"runtime",0,"nodejs"],733626);var I=e.i(733626);let O=new t.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/config/verify/route",pathname:"/api/config/verify",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/config/verify/route.ts",nextConfigOutput:"standalone",userland:I,...{}}),{workAsyncStorage:S,workUnitAsyncStorage:M,serverHooks:q}=O;async function U(e,t,r){r.requestMeta&&(0,n.setRequestMeta)(e,r.requestMeta),O.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let R="/api/config/verify/route";R=R.replace(/\/index$/,"")||"/";let y=await O.prepare(e,t,{srcPage:R,multiZoneDraftMode:!1});if(!y)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:w,deploymentId:b,params:x,nextConfig:E,parsedUrl:A,isDraftMode:N,prerenderManifest:C,routerServerContext:_,isOnDemandRevalidate:P,revalidateOnlyGenerated:T,resolvedPathname:k,clientReferenceManifest:$,serverActionsManifest:j}=y,I=(0,s.normalizeAppPath)(R),S=!!(C.dynamicRoutes[I]||C.routes[k]),M=async()=>((null==_?void 0:_.render404)?await _.render404(e,t,A,!1):t.end("This page could not be found"),null);if(S&&!N){let e=!!C.routes[k],t=C.dynamicRoutes[I];if(t&&!1===t.fallback&&!e){if(E.adapterPath)return await M();throw new f.NoFallbackError}}let q=null;!S||O.isDev||N||(q="/index"===(q=k)?"/":q);let U=!0===O.isDev||!S,H=S&&!U;j&&$&&(0,o.setManifestsSingleton)({page:R,clientReferenceManifest:$,serverActionsManifest:j});let D=e.method||"GET",K=(0,i.getTracer)(),F=K.getActiveScopeSpan(),z=!!(null==_?void 0:_.isWrappedByNextServer),B=!!(0,n.getRequestMeta)(e,"minimalMode"),G=(0,n.getRequestMeta)(e,"incrementalCache")||await O.getIncrementalCache(e,E,C,B);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let L={params:x,previewProps:C.preview,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts},cacheComponents:!!E.cacheComponents,supportsDynamicResponse:U,incrementalCache:G,cacheLifeProfiles:E.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,r,n)=>O.onRequestError(e,t,r,n,_)},sharedContext:{buildId:w,deploymentId:b}},W=new l.NodeNextRequest(e),V=new l.NodeNextResponse(t),X=u.NextRequestAdapter.fromNodeNextRequest(W,(0,u.signalFromNodeResponse)(t));try{let n,o=async e=>O.handle(X,L).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=K.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route");if(r){let t=`${D} ${r}`;e.setAttributes({"next.route":r,"http.route":r,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",r),n.updateName(t))}else e.updateName(`${D} ${R}`)}),s=async n=>{var i,s;let l=async({previousCacheEntry:a})=>{try{if(!B&&P&&T&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await o(n);e.fetchMetrics=L.renderOpts.fetchMetrics;let s=L.renderOpts.pendingWaitUntil;s&&r.waitUntil&&(r.waitUntil(s),s=void 0);let l=L.renderOpts.collectedTags;if(!S)return await (0,p.sendResponse)(W,V,i,L.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(i.headers);l&&(t[g.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==L.renderOpts.collectedRevalidate&&!(L.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&L.renderOpts.collectedRevalidate,r=void 0===L.renderOpts.collectedExpire||L.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:L.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==a?void 0:a.isStale)&&await O.onRequestError(e,t,{routerKind:"App Router",routePath:R,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:P})},!1,_),t}},u=await O.handleResponse({req:e,nextConfig:E,cacheKey:q,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:C,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:T,responseGenerator:l,waitUntil:r.waitUntil,isMinimalMode:B});if(!S)return null;if((null==u||null==(i=u.value)?void 0:i.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(s=u.value)?void 0:s.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});B||t.setHeader("x-nextjs-cache",P?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),N&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let d=(0,h.fromNodeOutgoingHttpHeaders)(u.value.headers);return B&&S||d.delete(g.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||d.get("Cache-Control")||d.set("Cache-Control",(0,m.getCacheControlHeader)(u.cacheControl)),await (0,p.sendResponse)(W,V,new Response(u.value.body,{headers:d,status:u.value.status||200})),null};z&&F?await s(F):(n=K.getActiveScopeSpan(),await K.withPropagatedContext(e.headers,()=>K.trace(d.BaseServerSpan.handleRequest,{spanName:`${D} ${R}`,kind:i.SpanKind.SERVER,attributes:{"http.method":D,"http.target":e.url}},s),void 0,!z))}catch(t){if(t instanceof f.NoFallbackError||await O.onRequestError(e,t,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:P})},!1,_),S)throw t;return await (0,p.sendResponse)(W,V,new Response(null,{status:500})),null}}e.s(["handler",0,U,"patchFetch",0,function(){return(0,r.patchFetch)({workAsyncStorage:S,workUnitAsyncStorage:M})},"routeModule",0,O,"serverHooks",0,q,"workAsyncStorage",0,S,"workUnitAsyncStorage",0,M],265306)}];
|
|
1
|
+
module.exports=[265306,e=>{"use strict";var t=e.i(239441),a=e.i(449055),r=e.i(391328),n=e.i(6352),o=e.i(746789),s=e.i(423437),i=e.i(178820),l=e.i(569191),u=e.i(576251),d=e.i(199962),c=e.i(547545),p=e.i(664046),h=e.i(235691),m=e.i(298907),g=e.i(110763),f=e.i(193695);e.i(673243);var v=e.i(236167),R=e.i(766576),y=e.i(214312),w=e.i(600373),x=e.i(399828),b=e.i(416487),E=e.i(733164),A=e.i(731699),N=e.i(235072),C=e.i(528909),_=e.i(89087),P=e.i(344963),T=e.i(256485),k=e.i(192389);let j={openai:"gpt-4o-mini",anthropic:"claude-sonnet-4-20250514",google:"gemini-2.0-flash",mistral:"mistral-small-latest",deepseek:"deepseek-chat",cohere:"command-r",vercel_ai_gateway:"openai/gpt-4o-mini"},I={openai:"openai/text-embedding-3-small",google:"google/gemini-embedding-001",cohere:"cohere/embed-english-v3.0",mistral:"mistral/mistral-embed",vercel_ai_gateway:"openai/text-embedding-3-small"};async function O(e){let{embeddingProvider:t,embeddingApiKey:a,embeddingModelId:r,chatProvider:n,chatApiKey:o,chatModelId:s,customChatModels:i,customEmbeddings:l,audioProvider:u,audioApiKey:d,audioModelId:c}=await e.json();if(!t&&!n&&!u)return R.NextResponse.json({error:"No provider fields to verify"},{status:400});if(t)try{let e="vercel_ai_gateway"===t?"vercel_ai_gateway":t,n=r;if(n&&"vercel_ai_gateway"!==e&&"custom"!==e){let t=(0,x.getEmbeddingModel)(n)||(0,x.getEmbeddingModel)(`${e}/${n}`);t&&t.provider===e||(n="")}n||(n=I[e]||I.openai),"custom"===e&&l&&l.length>0&&(n=`custom:${l[0].modelName}`);let o={embeddingProvider:t,embeddingApiKey:a,embeddingModelId:n,customEmbeddings:l},s=(0,w.getAIModel)(o);try{await (0,y.embed)({model:s,value:"test"})}catch(r){let t=r.message||"";if(t.includes("not found")||t.includes("not available")||t.includes("no longer available")||t.includes("does not exist")){if("google"===e)try{let e=await fetch(`https://generativelanguage.googleapis.com/v1beta/models?key=${a}`),t=((await e.json()).models||[]).filter(e=>e.supportedGenerationMethods?.includes("embedContent")).map(e=>e.name);return R.NextResponse.json({error:`Embedding model "${n}" is not available for your API key. Available models: ${t.join(", ")}`},{status:400})}catch{}return R.NextResponse.json({error:`Embedding model "${n}" is not available. Please select a different model or check your API key.`},{status:400})}return R.NextResponse.json({error:(0,k.formatErrorMessage)(r)},{status:400})}}catch(e){return R.NextResponse.json({error:(0,k.formatErrorMessage)(e)},{status:400})}if(n)try{let e,t="vercel_ai_gateway"===n?"vercel_ai_gateway":n;e="custom"===t&&i&&i.length>0?`custom:${i[0].modelName}`:s||("vercel_ai_gateway"===t?j.vercel_ai_gateway:`${t}/${j[t]||"gpt-4o-mini"}`);let a=function(e,t,a,r){if(t.startsWith("custom:")){let e=t.slice(7),n=(r??[]).find(t=>t.modelName===e);if(n)return(0,T.createOpenAICompatible)({name:"custom_chat_provider",baseURL:n.baseUrl,apiKey:n.apiKey||a||void 0})(n.modelName)}let n=t.includes("/")?t.split("/").slice(1).join("/"):t;switch(e){case"google":return(0,E.createGoogleGenerativeAI)({apiKey:a})(n);case"cohere":return(0,A.createCohere)({apiKey:a})(n);case"mistral":return(0,N.createMistral)({apiKey:a})(n);case"deepseek":return(0,C.createDeepSeek)({apiKey:a})(n);case"anthropic":return(0,_.createAnthropic)({apiKey:a})(n);case"openai":return(0,b.createOpenAI)({apiKey:a})(n);default:return(0,P.createGateway)({apiKey:a})(t)}}(t,e,o,i);try{await (0,y.generateText)({model:a,prompt:"hi",maxOutputTokens:16})}catch(a){let t=a.message||"";if(t.includes("not found")||t.includes("not available")||t.includes("no longer available")||t.includes("does not exist")||t.includes("is not supported for generateContent")){if(s)return R.NextResponse.json({error:`Chat model "${e}" is not available for your API key. Please select a different model.`},{status:400});return R.NextResponse.json({error:`The default test model for ${n} could not be verified. Your API key might only support specific models. Please select a model manually.`},{status:400})}if(t.includes("API key")||t.includes("authentication")||t.includes("unauthorized")||t.includes("401"))return R.NextResponse.json({error:`Chat API key is invalid or unauthorized for ${n}. Please check your key.`},{status:400});return R.NextResponse.json({error:(0,k.formatErrorMessage)(a)},{status:400})}}catch(e){return R.NextResponse.json({error:(0,k.formatErrorMessage)(e)},{status:400})}if(u&&"local"!==u)try{let e="",t={Authorization:`Bearer ${d}`};if("openai"===u)e="https://api.openai.com/v1/audio/transcriptions";else if("groq"===u)e="https://api.groq.com/openai/v1/audio/transcriptions";else if("deepgram"===u)e="https://api.deepgram.com/v1/listen",t={Authorization:`Token ${d}`};else if("assemblyai"===u)e="https://api.assemblyai.com/v2/transcript",t={Authorization:d};else if("elevenlabs"===u)e="https://api.elevenlabs.io/v1/speech-to-text",t={"xi-api-key":d};else if("azure openai"===u)return R.NextResponse.json({success:!0});else if("rev.ai"===u)e="https://api.rev.ai/speechtotext/v1/jobs";else if("fal"===u)return R.NextResponse.json({success:!0});else if("google"===u)return R.NextResponse.json({success:!0});if(e){let a=await fetch(e,{method:"POST",headers:t});if(401===a.status||403===a.status)return R.NextResponse.json({error:`Invalid API Key for ${u}`},{status:400})}}catch(e){return R.NextResponse.json({error:`Audio verification failed: ${e.message}`},{status:400})}return R.NextResponse.json({success:!0})}e.s(["POST",0,O,"runtime",0,"nodejs"],733626);var $=e.i(733626);let M=new t.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/config/verify/route",pathname:"/api/config/verify",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/config/verify/route.ts",nextConfigOutput:"standalone",userland:$,...{}}),{workAsyncStorage:S,workUnitAsyncStorage:q,serverHooks:U}=M;async function H(e,t,r){r.requestMeta&&(0,n.setRequestMeta)(e,r.requestMeta),M.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let R="/api/config/verify/route";R=R.replace(/\/index$/,"")||"/";let y=await M.prepare(e,t,{srcPage:R,multiZoneDraftMode:!1});if(!y)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:w,deploymentId:x,params:b,nextConfig:E,parsedUrl:A,isDraftMode:N,prerenderManifest:C,routerServerContext:_,isOnDemandRevalidate:P,revalidateOnlyGenerated:T,resolvedPathname:k,clientReferenceManifest:j,serverActionsManifest:I}=y,O=(0,i.normalizeAppPath)(R),$=!!(C.dynamicRoutes[O]||C.routes[k]),S=async()=>((null==_?void 0:_.render404)?await _.render404(e,t,A,!1):t.end("This page could not be found"),null);if($&&!N){let e=!!C.routes[k],t=C.dynamicRoutes[O];if(t&&!1===t.fallback&&!e){if(E.adapterPath)return await S();throw new f.NoFallbackError}}let q=null;!$||M.isDev||N||(q="/index"===(q=k)?"/":q);let U=!0===M.isDev||!$,H=$&&!U;I&&j&&(0,s.setManifestsSingleton)({page:R,clientReferenceManifest:j,serverActionsManifest:I});let D=e.method||"GET",K=(0,o.getTracer)(),F=K.getActiveScopeSpan(),z=!!(null==_?void 0:_.isWrappedByNextServer),B=!!(0,n.getRequestMeta)(e,"minimalMode"),G=(0,n.getRequestMeta)(e,"incrementalCache")||await M.getIncrementalCache(e,E,C,B);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let L={params:b,previewProps:C.preview,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts},cacheComponents:!!E.cacheComponents,supportsDynamicResponse:U,incrementalCache:G,cacheLifeProfiles:E.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,r,n)=>M.onRequestError(e,t,r,n,_)},sharedContext:{buildId:w,deploymentId:x}},W=new l.NodeNextRequest(e),V=new l.NodeNextResponse(t),X=u.NextRequestAdapter.fromNodeNextRequest(W,(0,u.signalFromNodeResponse)(t));try{let n,s=async e=>M.handle(X,L).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=K.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route");if(r){let t=`${D} ${r}`;e.setAttributes({"next.route":r,"http.route":r,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",r),n.updateName(t))}else e.updateName(`${D} ${R}`)}),i=async n=>{var o,i;let l=async({previousCacheEntry:a})=>{try{if(!B&&P&&T&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let o=await s(n);e.fetchMetrics=L.renderOpts.fetchMetrics;let i=L.renderOpts.pendingWaitUntil;i&&r.waitUntil&&(r.waitUntil(i),i=void 0);let l=L.renderOpts.collectedTags;if(!$)return await (0,p.sendResponse)(W,V,o,L.renderOpts.pendingWaitUntil),null;{let e=await o.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(o.headers);l&&(t[g.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==L.renderOpts.collectedRevalidate&&!(L.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&L.renderOpts.collectedRevalidate,r=void 0===L.renderOpts.collectedExpire||L.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:L.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:o.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==a?void 0:a.isStale)&&await M.onRequestError(e,t,{routerKind:"App Router",routePath:R,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:P})},!1,_),t}},u=await M.handleResponse({req:e,nextConfig:E,cacheKey:q,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:C,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:T,responseGenerator:l,waitUntil:r.waitUntil,isMinimalMode:B});if(!$)return null;if((null==u||null==(o=u.value)?void 0:o.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(i=u.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});B||t.setHeader("x-nextjs-cache",P?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),N&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let d=(0,h.fromNodeOutgoingHttpHeaders)(u.value.headers);return B&&$||d.delete(g.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||d.get("Cache-Control")||d.set("Cache-Control",(0,m.getCacheControlHeader)(u.cacheControl)),await (0,p.sendResponse)(W,V,new Response(u.value.body,{headers:d,status:u.value.status||200})),null};z&&F?await i(F):(n=K.getActiveScopeSpan(),await K.withPropagatedContext(e.headers,()=>K.trace(d.BaseServerSpan.handleRequest,{spanName:`${D} ${R}`,kind:o.SpanKind.SERVER,attributes:{"http.method":D,"http.target":e.url}},i),void 0,!z))}catch(t){if(t instanceof f.NoFallbackError||await M.onRequestError(e,t,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:P})},!1,_),$)throw t;return await (0,p.sendResponse)(W,V,new Response(null,{status:500})),null}}e.s(["handler",0,H,"patchFetch",0,function(){return(0,r.patchFetch)({workAsyncStorage:S,workUnitAsyncStorage:q})},"routeModule",0,M,"serverHooks",0,U,"workAsyncStorage",0,S,"workUnitAsyncStorage",0,q],265306)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=0598_next_dist_esm_build_templates_app-route_1f4h7rr.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[367165,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(638725),n=e.i(192441);async function i(){let e=await (0,n.getDataDir)();if(!e)return a.DEFAULT_CONFIG;try{let n=await t.promises.readFile(r.default.join(e,"config.json"),"utf8"),i=JSON.parse(n),o=i.customEmbeddings,s=i.embeddingModelId;if(i.customEmbedding&&!o?.length){let e=i.customEmbedding;o=[e],"custom"===s&&(s=`custom:${e.modelName}`)}let l={...a.DEFAULT_CONFIG,...i,embeddingModelId:s??a.DEFAULT_CONFIG.embeddingModelId,customEmbeddings:o,chunking:{...a.DEFAULT_CONFIG.chunking,...i.chunking},storeConfig:{...a.DEFAULT_CONFIG.storeConfig,...i.storeConfig}};return delete l.customEmbedding,l}catch{return a.DEFAULT_CONFIG}}async function o(e){let a=await (0,n.requireDataDir)(),i={...e,updatedAt:new Date().toISOString()};return await t.promises.writeFile(r.default.join(a,"config.json"),JSON.stringify(i,null,2),"utf8"),i}e.s(["readConfig",0,i,"writeConfig",0,o])},874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},812057,(e,t,r)=>{t.exports=e.x("node:util",()=>require("node:util"))},700259,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(761095),n=e.i(666680),i=e.i(874533),o=e.i(812057),s=e.i(367165);let l=(0,o.promisify)(i.exec);async function c(e,t){return l(e,{timeout:t,env:{...process.env,PATH:`${process.env.PATH||""}:/usr/local/bin:/opt/homebrew/bin:/bin:/usr/bin`}})}let
|
|
1
|
+
module.exports=[367165,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(638725),n=e.i(192441);async function i(){let e=await (0,n.getDataDir)();if(!e)return a.DEFAULT_CONFIG;try{let n=await t.promises.readFile(r.default.join(e,"config.json"),"utf8"),i=JSON.parse(n),o=i.customEmbeddings,s=i.embeddingModelId;if(i.customEmbedding&&!o?.length){let e=i.customEmbedding;o=[e],"custom"===s&&(s=`custom:${e.modelName}`)}let l={...a.DEFAULT_CONFIG,...i,embeddingModelId:s??a.DEFAULT_CONFIG.embeddingModelId,customEmbeddings:o,chunking:{...a.DEFAULT_CONFIG.chunking,...i.chunking},storeConfig:{...a.DEFAULT_CONFIG.storeConfig,...i.storeConfig}};return delete l.customEmbedding,l}catch{return a.DEFAULT_CONFIG}}async function o(e){let a=await (0,n.requireDataDir)(),i={...e,updatedAt:new Date().toISOString()};return await t.promises.writeFile(r.default.join(a,"config.json"),JSON.stringify(i,null,2),"utf8"),i}e.s(["readConfig",0,i,"writeConfig",0,o])},874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},812057,(e,t,r)=>{t.exports=e.x("node:util",()=>require("node:util"))},700259,e=>{"use strict";var t=e.i(902157),r=e.i(750227),a=e.i(761095),n=e.i(666680),i=e.i(874533),o=e.i(812057),s=e.i(367165);let l=(0,o.promisify)(i.exec);async function c(e,t){return l(e,{timeout:t,env:{...process.env,PATH:`${process.env.PATH||""}:/usr/local/bin:/opt/homebrew/bin:/bin:/usr/bin`}})}let d=r.default.join(process.cwd(),".larkup"),u=r.default.join(d,"firecrawl-local.json"),p=r.default.join(d,"firecrawl","docker-compose.yml"),h="ragtoolkit-firecrawl";async function w(e){return new Promise((t,r)=>{let n=a.default.createServer();n.listen(e,()=>{let e=n.address().port;n.close(()=>t(e))}),n.on("error",a=>{"EADDRINUSE"===a.code?w(0===e?0:e+1).then(t,r):r(a)})})}async function m(){try{let e=r.default.join(process.cwd(),"proxies.txt"),a=(await t.promises.readFile(e,"utf8")).split("\n").map(e=>e.trim()).filter(e=>e.length>0);if(a.length>0){let e=a[Math.floor(Math.random()*a.length)].split(":");if(e.length>=4)return{server:`http://${e[0]}:${e[1]}`,username:e[2],password:e[3]}}}catch(e){}let e=await (0,s.readConfig)();return e.useScraperProxy&&e.scraperProxyServer?{server:e.scraperProxyServer,username:e.scraperProxyUsername,password:e.scraperProxyPassword}:null}let f={running:!1,endpoint:"http://localhost:3002",apiKey:"",port:3002,project:h};async function g(){try{let e=await t.promises.readFile(u,"utf8");return{...f,...JSON.parse(e)}}catch{return f}}async function y(e){return await t.promises.mkdir(d,{recursive:!0}),await t.promises.writeFile(u,JSON.stringify(e,null,2),"utf8"),e}async function E(){try{await c("docker --version")}catch(e){return console.error("DOCKER ERR:",e),{docker:!1,compose:null}}try{return await c("docker compose version"),{docker:!0,compose:"docker compose"}}catch(e){console.error("DOCKER COMPOSE ERR:",e)}try{return await c("docker-compose version"),{docker:!0,compose:"docker-compose"}}catch{return{docker:!0,compose:null}}}async function R(){let{docker:e,compose:t}=await E();return e?t?{docker:!0,compose:!0,message:"Docker is ready."}:{docker:!0,compose:!1,message:"Docker is installed but the Compose plugin was not found. Install `docker compose` to launch Firecrawl locally."}:{docker:!1,compose:!1,message:"Docker isn't available on this machine. Install Docker Desktop (or the Docker engine) and make sure it's running."}}function v(e,t,r){let a=r?[`PROXY_SERVER: "${r.server}"`,...r.username&&r.password?[`PROXY_USERNAME: "${r.username}"`,`PROXY_PASSWORD: "${r.password}"`]:[]]:[],n=['PORT: "3000"',...a].map(e=>` ${e}`).join("\n"),i=['PORT: "3002"',...a,'HOST: "0.0.0.0"','REDIS_URL: "redis://redis:6379"','REDIS_RATE_LIMIT_URL: "redis://redis:6379"','PLAYWRIGHT_MICROSERVICE_URL: "http://playwright-service:3000/scrape"','USE_DB_AUTHENTICATION: "false"',`TEST_API_KEY: "${e}"`,`BULL_AUTH_KEY: "${e}"`,'DATABASE_URL: "postgresql://user:password@db:5432/postgres"','NUQ_DATABASE_URL: "postgresql://user:password@db:5432/postgres"','NUQ_RABBITMQ_URL: "amqp://user:password@rabbitmq:5672"'].map(e=>` ${e}`).join("\n");return`# Auto-generated by RAG Toolkit. Do not edit by hand.
|
|
2
2
|
services:
|
|
3
3
|
db:
|
|
4
4
|
image: ghcr.io/firecrawl/nuq-postgres:latest
|
|
@@ -6,6 +6,11 @@ services:
|
|
|
6
6
|
POSTGRES_USER: user
|
|
7
7
|
POSTGRES_PASSWORD: password
|
|
8
8
|
POSTGRES_DB: postgres
|
|
9
|
+
healthcheck:
|
|
10
|
+
test: ["CMD-SHELL", "pg_isready -U user -d postgres"]
|
|
11
|
+
interval: 5s
|
|
12
|
+
timeout: 5s
|
|
13
|
+
retries: 12
|
|
9
14
|
restart: unless-stopped
|
|
10
15
|
|
|
11
16
|
rabbitmq:
|
|
@@ -24,6 +29,11 @@ services:
|
|
|
24
29
|
redis:
|
|
25
30
|
image: redis:alpine
|
|
26
31
|
command: redis-server --save "" --appendonly no
|
|
32
|
+
healthcheck:
|
|
33
|
+
test: ["CMD", "redis-cli", "ping"]
|
|
34
|
+
interval: 5s
|
|
35
|
+
timeout: 3s
|
|
36
|
+
retries: 12
|
|
27
37
|
restart: unless-stopped
|
|
28
38
|
|
|
29
39
|
playwright-service:
|
|
@@ -35,15 +45,17 @@ ${n}
|
|
|
35
45
|
api:
|
|
36
46
|
image: ghcr.io/firecrawl/firecrawl:latest
|
|
37
47
|
depends_on:
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
48
|
+
db:
|
|
49
|
+
condition: service_healthy
|
|
50
|
+
rabbitmq:
|
|
51
|
+
condition: service_healthy
|
|
52
|
+
redis:
|
|
53
|
+
condition: service_healthy
|
|
42
54
|
ports:
|
|
43
55
|
- "${t}:3002"
|
|
44
56
|
environment:
|
|
45
57
|
${i}
|
|
46
58
|
restart: unless-stopped
|
|
47
|
-
`}async function S(){let e=await E();if(!e.compose)return y({...await g(),running:!1,lastError:e.message});let{compose:a}=await R(),i=await g(),o=i.apiKey||`fc-local-${(0,n.randomUUID)()}`,s=i.port||3002,l=await h();await t.promises.mkdir(r.default.dirname(p),{recursive:!0}),await t.promises.writeFile(p,v(o,s,l),"utf8");try{await c(`${a} -p ${w} -f "${p}" up -d`,18e4)}catch(r){let e=r instanceof Error?r.message:"docker compose failed";if(!(e.includes("address already in use")||e.includes("Ports are not available")))return y({...i,apiKey:o,port:s,running:!1,lastError:e});try{s=await m(s+1),await t.promises.writeFile(p,v(o,s,l),"utf8"),await c(`${a} -p ${w} -f "${p}" up -d`,18e4)}catch(e){return y({...i,apiKey:o,port:s,running:!1,lastError:e instanceof Error?e.message:"docker compose retry failed"})}}let u=(0,t.existsSync)("/.dockerenv"),d=`http://${u?"host.docker.internal":"localhost"}:${s}`,f=await k(d,6e4);return y({running:f,endpoint:d,apiKey:o,port:s,project:w,startedAt:new Date().toISOString(),lastError:f?void 0:"Containers started but the API did not become healthy in time. It may still be warming up — try refreshing in a moment."})}async function A(){let{compose:e}=await R(),t=await g();if(e)try{await c(`${e} -p ${w} -f "${p}" down`,6e4)}catch{}return y({...t,running:!1,startedAt:void 0})}async function C(){let e=await g();if(!e.startedAt)return e;let t=await b(e.endpoint);return t!==e.running?y({...e,running:t}):e}async function b(e){try{return(await fetch(e,{method:"GET",signal:AbortSignal.timeout(4e3)})).status>0}catch{return!1}}async function k(e,t){let r=Date.now()+t;for(;Date.now()<r;){if(await b(e))return!0;await new Promise(e=>setTimeout(e,3e3))}return!1}let T="http://firecrawl-api:3002";async function _(){return"true"===process.env.DOCKER_ENV||"1"===process.env.DOCKER_BUILD||(0,t.existsSync)("/.dockerenv")?{available:await b(T),endpoint:T}:{available:!1,endpoint:""}}async function O(){let{available:e}=await _();return e?y({running:!0,endpoint:T,apiKey:`fc-docker-${(0,n.randomUUID)()}`,port:3002,project:"docker-sibling",startedAt:new Date().toISOString()}):y({...f,running:!1,lastError:"Firecrawl sibling service is not running. Restart with: docker compose --profile crawler up"})}e.s(["checkDocker",0,E,"checkDockerSibling",0,_,"connectDockerSibling",0,O,"readLocalState",0,g,"refreshLocalStatus",0,C,"startLocal",0,S,"stopLocal",0,A])},304368,e=>{"use strict";var t=e.i(367165),r=e.i(700259);class a extends Error{status;constructor(e,t){super(e),this.status=t,this.name="FirecrawlError"}}async function n(){let e=await (0,t.readConfig)();if("local"===(e.webCrawlerProvider||"local")){let e=await (0,r.readLocalState)();if(e.running&&e.apiKey)return{base:`${e.endpoint}/v1`,key:e.apiKey,mode:"local"};throw new a("Local Firecrawl is selected but not running. Launch a local instance from the UI.",401)}let n=e.firecrawlApiKey;if(n)return{base:"https://api.firecrawl.dev/v1",key:n,mode:"cloud"};throw new a("Cloud Firecrawl is selected but no API key is configured. Set FIRECRAWL_API_KEY in Settings.",401)}async function i(){let e=await (0,t.readConfig)();if("local"===(e.webCrawlerProvider||"local")){let e=await (0,r.readLocalState)();return!!(e.running&&e.apiKey)}return!!e.firecrawlApiKey}async function o(e,t){let{base:r,key:i}=await n(),o=await fetch(`${r}${e}`,{...t,headers:{Authorization:`Bearer ${i}`,"Content-Type":"application/json",...t?.headers??{}},cache:"no-store"}),s=await o.text(),c=s?l(s):{};if(!o.ok)throw new a(c?.error||`Firecrawl request failed (${o.status})`,o.status);return c}async function s(e){let{key:t}=await n(),r=await fetch(e,{headers:{Authorization:`Bearer ${t}`},cache:"no-store"}),i=await r.text(),o=i?l(i):{};if(!r.ok)throw new a(o?.error||`Firecrawl request failed (${r.status})`,r.status);return o}function l(e){try{return JSON.parse(e)}catch{return{}}}async function c(e,t=10){return((await o("/search",{method:"POST",body:JSON.stringify({query:e,limit:t})})).data??[]).map(e=>({url:e.url,title:e.title||e.url,description:e.description}))}let u={waitFor:1e4,onlyMainContent:!1,headers:{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36","Accept-Language":"en-US,en;q=0.9","Sec-Ch-Ua":'"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',"Sec-Ch-Ua-Mobile":"?0","Sec-Ch-Ua-Platform":'"Windows"'}};async function d(e){let t=(await o("/scrape",{method:"POST",body:JSON.stringify({url:e,formats:["markdown"],...u})})).data??{};return{url:t.metadata?.sourceURL||e,title:t.metadata?.title||t.metadata?.ogTitle||e,markdown:t.markdown??""}}async function p(e,t){let r=await o("/crawl",{method:"POST",body:JSON.stringify({url:e,limit:t,allowExternalLinks:!1,scrapeOptions:{...u,formats:["markdown"],onlyMainContent:!0}})});if(!r.id)throw new a("Firecrawl did not return a crawl id");return r.id}async function w(e,t=!1){let r=t?await s(e):await o(`/crawl/${e}`,{method:"GET"});return{state:r.status??"scraping",total:r.total??0,completed:r.completed??0,next:r.next,pages:(r.data??[]).map(e=>({url:e.metadata?.sourceURL||e.metadata?.url||"",title:e.metadata?.title||e.metadata?.sourceURL||"Untitled",markdown:e.markdown??""}))}}async function m(e){try{await o(`/crawl/${e}`,{method:"DELETE"})}catch{}}e.s(["FirecrawlError",0,a,"cancelCrawl",0,m,"getCrawlStatus",0,w,"isFirecrawlConfigured",0,i,"scrapePage",0,d,"searchWeb",0,c,"startCrawl",0,p])},426237,e=>{"use strict";var t=e.i(766576),r=e.i(304368);async function a(){return t.NextResponse.json({configured:await (0,r.isFirecrawlConfigured)()})}async function n(e){try{let{query:a,limit:n}=await e.json();if(!a||!a.trim())return t.NextResponse.json({error:"A search query is required."},{status:400});let i=await (0,r.searchWeb)(a.trim(),Math.min(n??10,25));return t.NextResponse.json({results:i})}catch(n){let e=n instanceof r.FirecrawlError?n.status??500:500,a=n instanceof Error?n.message:"Search failed.";return t.NextResponse.json({error:a},{status:e})}}e.s(["GET",0,a,"POST",0,n,"dynamic",0,"force-dynamic","runtime",0,"nodejs"])},695936,e=>{"use strict";var t=e.i(239441),r=e.i(449055),a=e.i(391328),n=e.i(6352),i=e.i(746789),o=e.i(423437),s=e.i(178820),l=e.i(569191),c=e.i(576251),u=e.i(199962),d=e.i(547545),p=e.i(664046),w=e.i(235691),m=e.i(298907),h=e.i(110763),f=e.i(193695);e.i(673243);var g=e.i(236167),y=e.i(426237);let R=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/search/route",pathname:"/api/search",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/search/route.ts",nextConfigOutput:"standalone",userland:y,...{}}),{workAsyncStorage:E,workUnitAsyncStorage:v,serverHooks:S}=R;async function A(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),R.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/search/route";y=y.replace(/\/index$/,"")||"/";let E=await R.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!E)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:v,deploymentId:S,params:A,nextConfig:C,parsedUrl:b,isDraftMode:k,prerenderManifest:T,routerServerContext:_,isOnDemandRevalidate:O,revalidateOnlyGenerated:P,resolvedPathname:D,clientReferenceManifest:x,serverActionsManifest:U}=E,I=(0,s.normalizeAppPath)(y),N=!!(T.dynamicRoutes[I]||T.routes[D]),$=async()=>((null==_?void 0:_.render404)?await _.render404(e,t,b,!1):t.end("This page could not be found"),null);if(N&&!k){let e=!!T.routes[D],t=T.dynamicRoutes[I];if(t&&!1===t.fallback&&!e){if(C.adapterPath)return await $();throw new f.NoFallbackError}}let F=null;!N||R.isDev||k||(F="/index"===(F=D)?"/":F);let L=!0===R.isDev||!N,q=N&&!L;U&&x&&(0,o.setManifestsSingleton)({page:y,clientReferenceManifest:x,serverActionsManifest:U});let M=e.method||"GET",j=(0,i.getTracer)(),K=j.getActiveScopeSpan(),H=!!(null==_?void 0:_.isWrappedByNextServer),B=!!(0,n.getRequestMeta)(e,"minimalMode"),G=(0,n.getRequestMeta)(e,"incrementalCache")||await R.getIncrementalCache(e,C,T,B);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let W={params:A,previewProps:T.preview,renderOpts:{experimental:{authInterrupts:!!C.experimental.authInterrupts},cacheComponents:!!C.cacheComponents,supportsDynamicResponse:L,incrementalCache:G,cacheLifeProfiles:C.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>R.onRequestError(e,t,a,n,_)},sharedContext:{buildId:v,deploymentId:S}},J=new l.NodeNextRequest(e),Y=new l.NodeNextResponse(t),V=c.NextRequestAdapter.fromNodeNextRequest(J,(0,c.signalFromNodeResponse)(t));try{let n,o=async e=>R.handle(V,W).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=j.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${M} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",a),n.updateName(t))}else e.updateName(`${M} ${y}`)}),s=async n=>{var i,s;let l=async({previousCacheEntry:r})=>{try{if(!B&&O&&P&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await o(n);e.fetchMetrics=W.renderOpts.fetchMetrics;let s=W.renderOpts.pendingWaitUntil;s&&a.waitUntil&&(a.waitUntil(s),s=void 0);let l=W.renderOpts.collectedTags;if(!N)return await (0,p.sendResponse)(J,Y,i,W.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,w.toNodeOutgoingHttpHeaders)(i.headers);l&&(t[h.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==W.renderOpts.collectedRevalidate&&!(W.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&W.renderOpts.collectedRevalidate,a=void 0===W.renderOpts.collectedExpire||W.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:W.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await R.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:q,isOnDemandRevalidate:O})},!1,_),t}},c=await R.handleResponse({req:e,nextConfig:C,cacheKey:F,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:T,isRoutePPREnabled:!1,isOnDemandRevalidate:O,revalidateOnlyGenerated:P,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:B});if(!N)return null;if((null==c||null==(i=c.value)?void 0:i.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(s=c.value)?void 0:s.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});B||t.setHeader("x-nextjs-cache",O?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),k&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,w.fromNodeOutgoingHttpHeaders)(c.value.headers);return B&&N||u.delete(h.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,m.getCacheControlHeader)(c.cacheControl)),await (0,p.sendResponse)(J,Y,new Response(c.value.body,{headers:u,status:c.value.status||200})),null};H&&K?await s(K):(n=j.getActiveScopeSpan(),await j.withPropagatedContext(e.headers,()=>j.trace(u.BaseServerSpan.handleRequest,{spanName:`${M} ${y}`,kind:i.SpanKind.SERVER,attributes:{"http.method":M,"http.target":e.url}},s),void 0,!H))}catch(t){if(t instanceof f.NoFallbackError||await R.onRequestError(e,t,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:q,isOnDemandRevalidate:O})},!1,_),N)throw t;return await (0,p.sendResponse)(J,Y,new Response(null,{status:500})),null}}e.s(["handler",0,A,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:E,workUnitAsyncStorage:v})},"routeModule",0,R,"serverHooks",0,S,"workAsyncStorage",0,E,"workUnitAsyncStorage",0,v])}];
|
|
59
|
+
`}async function S(){let e=await R();if(!e.compose)return y({...await g(),running:!1,lastError:e.message});let{compose:a}=await E(),i=await g(),o=i.apiKey||`fc-local-${(0,n.randomUUID)()}`,s=i.port||3002,l=await m();await t.promises.mkdir(r.default.dirname(p),{recursive:!0}),await t.promises.writeFile(p,v(o,s,l),"utf8");try{await c(`${a} -p ${h} -f "${p}" up -d`,18e4)}catch(r){let e=r instanceof Error?r.message:"docker compose failed";if(!(e.includes("address already in use")||e.includes("Ports are not available")))return y({...i,apiKey:o,port:s,running:!1,lastError:e});try{s=await w(s+1),await t.promises.writeFile(p,v(o,s,l),"utf8"),await c(`${a} -p ${h} -f "${p}" up -d`,18e4)}catch(e){return y({...i,apiKey:o,port:s,running:!1,lastError:e instanceof Error?e.message:"docker compose retry failed"})}}let d=(0,t.existsSync)("/.dockerenv"),u=`http://${d?"host.docker.internal":"localhost"}:${s}`,f=await k(u,9e4);return y({running:f,endpoint:u,apiKey:o,port:s,project:h,startedAt:new Date().toISOString(),lastError:f?void 0:"Containers started but the API did not become healthy in time. It may still be warming up — try refreshing in a moment."})}async function A(){let{compose:e}=await E(),t=await g();if(e)try{await c(`${e} -p ${h} -f "${p}" down`,6e4)}catch{}return y({...t,running:!1,startedAt:void 0})}async function C(){let e=await g();if(!e.startedAt)return e;let t=await b(e.endpoint);return t!==e.running?y({...e,running:t}):e}async function b(e){try{return(await fetch(e,{method:"GET",signal:AbortSignal.timeout(4e3)})).status>0}catch{return!1}}async function k(e,t){let r=Date.now()+t;for(;Date.now()<r;){if(await b(e))return!0;await new Promise(e=>setTimeout(e,3e3))}return!1}let T="http://firecrawl-api:3002";async function _(){return"true"===process.env.DOCKER_ENV||"1"===process.env.DOCKER_BUILD||(0,t.existsSync)("/.dockerenv")?{available:await b(T),endpoint:T}:{available:!1,endpoint:""}}async function D(){let{available:e}=await _();return e?y({running:!0,endpoint:T,apiKey:`fc-docker-${(0,n.randomUUID)()}`,port:3002,project:"docker-sibling",startedAt:new Date().toISOString()}):y({...f,running:!1,lastError:"The web crawler service is not available in this Docker deployment."})}e.s(["checkDocker",0,R,"checkDockerSibling",0,_,"connectDockerSibling",0,D,"readLocalState",0,g,"refreshLocalStatus",0,C,"startLocal",0,S,"stopLocal",0,A])},304368,e=>{"use strict";var t=e.i(367165),r=e.i(700259);class a extends Error{status;constructor(e,t){super(e),this.status=t,this.name="FirecrawlError"}}async function n(){let e=await (0,t.readConfig)();if("local"===(e.webCrawlerProvider||"local")){let e=await (0,r.readLocalState)();if(e.running&&e.apiKey)return{base:`${e.endpoint}/v1`,key:e.apiKey,mode:"local"};throw new a("The selected web crawler is not running. Choose a crawler provider in Settings.",401)}let n=e.firecrawlApiKey;if(n)return{base:"https://api.firecrawl.dev/v1",key:n,mode:"cloud"};throw new a("The cloud web crawler needs an API key. Add it in Settings.",401)}async function i(){let e=await (0,t.readConfig)();if("local"===(e.webCrawlerProvider||"local")){let e=await (0,r.readLocalState)();return!!(e.running&&e.apiKey)}return!!e.firecrawlApiKey}async function o(e,t){let{base:r,key:i}=await n(),o=await fetch(`${r}${e}`,{...t,headers:{Authorization:`Bearer ${i}`,"Content-Type":"application/json",...t?.headers??{}},cache:"no-store"}),s=await o.text(),c=s?l(s):{};if(!o.ok)throw new a(c?.error||`Firecrawl request failed (${o.status})`,o.status);return c}async function s(e){let{key:t}=await n(),r=await fetch(e,{headers:{Authorization:`Bearer ${t}`},cache:"no-store"}),i=await r.text(),o=i?l(i):{};if(!r.ok)throw new a(o?.error||`Firecrawl request failed (${r.status})`,r.status);return o}function l(e){try{return JSON.parse(e)}catch{return{}}}async function c(e,t=10){return((await o("/search",{method:"POST",body:JSON.stringify({query:e,limit:t})})).data??[]).map(e=>({url:e.url,title:e.title||e.url,description:e.description}))}let d={waitFor:1e4,onlyMainContent:!1,headers:{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36","Accept-Language":"en-US,en;q=0.9","Sec-Ch-Ua":'"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',"Sec-Ch-Ua-Mobile":"?0","Sec-Ch-Ua-Platform":'"Windows"'}};async function u(e){let t=(await o("/scrape",{method:"POST",body:JSON.stringify({url:e,formats:["markdown"],...d})})).data??{};return{url:t.metadata?.sourceURL||e,title:t.metadata?.title||t.metadata?.ogTitle||e,markdown:t.markdown??""}}async function p(e,t){let r=await o("/crawl",{method:"POST",body:JSON.stringify({url:e,limit:t,allowExternalLinks:!1,scrapeOptions:{...d,formats:["markdown"],onlyMainContent:!0}})});if(!r.id)throw new a("Firecrawl did not return a crawl id");return r.id}async function h(e,t=!1){let r=t?await s(e):await o(`/crawl/${e}`,{method:"GET"});return{state:r.status??"scraping",total:r.total??0,completed:r.completed??0,next:r.next,pages:(r.data??[]).map(e=>({url:e.metadata?.sourceURL||e.metadata?.url||"",title:e.metadata?.title||e.metadata?.sourceURL||"Untitled",markdown:e.markdown??""}))}}async function w(e){try{await o(`/crawl/${e}`,{method:"DELETE"})}catch{}}e.s(["FirecrawlError",0,a,"cancelCrawl",0,w,"getCrawlStatus",0,h,"isFirecrawlConfigured",0,i,"scrapePage",0,u,"searchWeb",0,c,"startCrawl",0,p])},426237,e=>{"use strict";var t=e.i(766576),r=e.i(304368);async function a(){return t.NextResponse.json({configured:await (0,r.isFirecrawlConfigured)()})}async function n(e){try{let{query:a,limit:n}=await e.json();if(!a||!a.trim())return t.NextResponse.json({error:"A search query is required."},{status:400});let i=await (0,r.searchWeb)(a.trim(),Math.min(n??10,25));return t.NextResponse.json({results:i})}catch(n){let e=n instanceof r.FirecrawlError?n.status??500:500,a=n instanceof Error?n.message:"Search failed.";return t.NextResponse.json({error:a},{status:e})}}e.s(["GET",0,a,"POST",0,n,"dynamic",0,"force-dynamic","runtime",0,"nodejs"])},695936,e=>{"use strict";var t=e.i(239441),r=e.i(449055),a=e.i(391328),n=e.i(6352),i=e.i(746789),o=e.i(423437),s=e.i(178820),l=e.i(569191),c=e.i(576251),d=e.i(199962),u=e.i(547545),p=e.i(664046),h=e.i(235691),w=e.i(298907),m=e.i(110763),f=e.i(193695);e.i(673243);var g=e.i(236167),y=e.i(426237);let E=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/search/route",pathname:"/api/search",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/search/route.ts",nextConfigOutput:"standalone",userland:y,...{}}),{workAsyncStorage:R,workUnitAsyncStorage:v,serverHooks:S}=E;async function A(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),E.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/search/route";y=y.replace(/\/index$/,"")||"/";let R=await E.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!R)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:v,deploymentId:S,params:A,nextConfig:C,parsedUrl:b,isDraftMode:k,prerenderManifest:T,routerServerContext:_,isOnDemandRevalidate:D,revalidateOnlyGenerated:O,resolvedPathname:P,clientReferenceManifest:x,serverActionsManifest:U}=R,N=(0,s.normalizeAppPath)(y),I=!!(T.dynamicRoutes[N]||T.routes[P]),$=async()=>((null==_?void 0:_.render404)?await _.render404(e,t,b,!1):t.end("This page could not be found"),null);if(I&&!k){let e=!!T.routes[P],t=T.dynamicRoutes[N];if(t&&!1===t.fallback&&!e){if(C.adapterPath)return await $();throw new f.NoFallbackError}}let F=null;!I||E.isDev||k||(F="/index"===(F=P)?"/":F);let L=!0===E.isDev||!I,q=I&&!L;U&&x&&(0,o.setManifestsSingleton)({page:y,clientReferenceManifest:x,serverActionsManifest:U});let M=e.method||"GET",j=(0,i.getTracer)(),H=j.getActiveScopeSpan(),K=!!(null==_?void 0:_.isWrappedByNextServer),B=!!(0,n.getRequestMeta)(e,"minimalMode"),G=(0,n.getRequestMeta)(e,"incrementalCache")||await E.getIncrementalCache(e,C,T,B);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let W={params:A,previewProps:T.preview,renderOpts:{experimental:{authInterrupts:!!C.experimental.authInterrupts},cacheComponents:!!C.cacheComponents,supportsDynamicResponse:L,incrementalCache:G,cacheLifeProfiles:C.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>E.onRequestError(e,t,a,n,_)},sharedContext:{buildId:v,deploymentId:S}},J=new l.NodeNextRequest(e),V=new l.NodeNextResponse(t),X=c.NextRequestAdapter.fromNodeNextRequest(J,(0,c.signalFromNodeResponse)(t));try{let n,o=async e=>E.handle(X,W).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=j.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${M} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",a),n.updateName(t))}else e.updateName(`${M} ${y}`)}),s=async n=>{var i,s;let l=async({previousCacheEntry:r})=>{try{if(!B&&D&&O&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await o(n);e.fetchMetrics=W.renderOpts.fetchMetrics;let s=W.renderOpts.pendingWaitUntil;s&&a.waitUntil&&(a.waitUntil(s),s=void 0);let l=W.renderOpts.collectedTags;if(!I)return await (0,p.sendResponse)(J,V,i,W.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(i.headers);l&&(t[m.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==W.renderOpts.collectedRevalidate&&!(W.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&W.renderOpts.collectedRevalidate,a=void 0===W.renderOpts.collectedExpire||W.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:W.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await E.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:q,isOnDemandRevalidate:D})},!1,_),t}},c=await E.handleResponse({req:e,nextConfig:C,cacheKey:F,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:T,isRoutePPREnabled:!1,isOnDemandRevalidate:D,revalidateOnlyGenerated:O,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:B});if(!I)return null;if((null==c||null==(i=c.value)?void 0:i.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(s=c.value)?void 0:s.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});B||t.setHeader("x-nextjs-cache",D?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),k&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let d=(0,h.fromNodeOutgoingHttpHeaders)(c.value.headers);return B&&I||d.delete(m.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||d.get("Cache-Control")||d.set("Cache-Control",(0,w.getCacheControlHeader)(c.cacheControl)),await (0,p.sendResponse)(J,V,new Response(c.value.body,{headers:d,status:c.value.status||200})),null};K&&H?await s(H):(n=j.getActiveScopeSpan(),await j.withPropagatedContext(e.headers,()=>j.trace(d.BaseServerSpan.handleRequest,{spanName:`${M} ${y}`,kind:i.SpanKind.SERVER,attributes:{"http.method":M,"http.target":e.url}},s),void 0,!K))}catch(t){if(t instanceof f.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:N,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:q,isOnDemandRevalidate:D})},!1,_),I)throw t;return await (0,p.sendResponse)(J,V,new Response(null,{status:500})),null}}e.s(["handler",0,A,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:R,workUnitAsyncStorage:v})},"routeModule",0,E,"serverHooks",0,S,"workAsyncStorage",0,R,"workUnitAsyncStorage",0,v])}];
|
|
48
60
|
|
|
49
61
|
//# sourceMappingURL=%5Broot-of-the-server%5D__067hiof._.js.map
|