larkup 0.1.39 → 0.1.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +22 -21
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/required-server-files.js +1 -1
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_global-error.html +1 -1
  8. package/.next/server/app/_global-error.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  15. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  16. package/.next/server/app/_not-found.html +1 -1
  17. package/.next/server/app/_not-found.rsc +18 -18
  18. package/.next/server/app/_not-found.segments/_full.segment.rsc +18 -18
  19. package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  20. package/.next/server/app/_not-found.segments/_index.segment.rsc +12 -12
  21. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  22. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  23. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  24. package/.next/server/app/analytics/page.js.nft.json +1 -1
  25. package/.next/server/app/analytics/page_client-reference-manifest.js +1 -1
  26. package/.next/server/app/analytics.html +1 -1
  27. package/.next/server/app/analytics.rsc +19 -19
  28. package/.next/server/app/analytics.segments/_full.segment.rsc +19 -19
  29. package/.next/server/app/analytics.segments/_head.segment.rsc +4 -4
  30. package/.next/server/app/analytics.segments/_index.segment.rsc +12 -12
  31. package/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
  32. package/.next/server/app/analytics.segments/analytics/__PAGE__.segment.rsc +3 -3
  33. package/.next/server/app/analytics.segments/analytics.segment.rsc +3 -3
  34. package/.next/server/app/chat/page.js.nft.json +1 -1
  35. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/chat.html +1 -1
  37. package/.next/server/app/chat.rsc +19 -19
  38. package/.next/server/app/chat.segments/_full.segment.rsc +19 -19
  39. package/.next/server/app/chat.segments/_head.segment.rsc +4 -4
  40. package/.next/server/app/chat.segments/_index.segment.rsc +12 -12
  41. package/.next/server/app/chat.segments/_tree.segment.rsc +2 -2
  42. package/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +3 -3
  43. package/.next/server/app/chat.segments/chat.segment.rsc +3 -3
  44. package/.next/server/app/data/page.js.nft.json +1 -1
  45. package/.next/server/app/data/page_client-reference-manifest.js +1 -1
  46. package/.next/server/app/data.html +1 -1
  47. package/.next/server/app/data.rsc +25 -26
  48. package/.next/server/app/data.segments/_full.segment.rsc +25 -26
  49. package/.next/server/app/data.segments/_head.segment.rsc +4 -4
  50. package/.next/server/app/data.segments/_index.segment.rsc +12 -12
  51. package/.next/server/app/data.segments/_tree.segment.rsc +2 -2
  52. package/.next/server/app/data.segments/data/__PAGE__.segment.rsc +3 -3
  53. package/.next/server/app/data.segments/data.segment.rsc +3 -3
  54. package/.next/server/app/index.html +1 -1
  55. package/.next/server/app/index.rsc +17 -17
  56. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  57. package/.next/server/app/index.segments/_full.segment.rsc +17 -17
  58. package/.next/server/app/index.segments/_head.segment.rsc +4 -4
  59. package/.next/server/app/index.segments/_index.segment.rsc +12 -12
  60. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  61. package/.next/server/app/page.js.nft.json +1 -1
  62. package/.next/server/app/page_client-reference-manifest.js +1 -1
  63. package/.next/server/app/settings/page.js.nft.json +1 -1
  64. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  65. package/.next/server/app/settings.html +1 -1
  66. package/.next/server/app/settings.rsc +19 -19
  67. package/.next/server/app/settings.segments/_full.segment.rsc +19 -19
  68. package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  69. package/.next/server/app/settings.segments/_index.segment.rsc +12 -12
  70. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  71. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  72. package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  73. package/.next/server/chunks/0598_next_dist_esm_build_templates_app-route_0kbcuk-.js +8 -7
  74. package/.next/server/chunks/0598_next_dist_esm_build_templates_app-route_0sbf4ny.js +2 -2
  75. package/.next/server/chunks/[root-of-the-server]__0j2l54r._.js +1 -1
  76. package/.next/server/chunks/packages_scraper_src_0kkcv_v._.js +1 -1
  77. package/.next/server/chunks/ssr/{[root-of-the-server]__0m21fli._.js → [root-of-the-server]__0pgotbk._.js} +2 -2
  78. package/.next/server/chunks/ssr/[root-of-the-server]__1k1mxo2._.js +3 -0
  79. package/.next/server/chunks/ssr/_169pdlf._.js +5 -5
  80. package/.next/server/chunks/ssr/_18jagqc._.js +2 -2
  81. package/.next/server/chunks/ssr/_1hetwwu._.js +2 -2
  82. package/.next/{standalone/apps/web/.next/server/chunks/ssr/_0s8403d._.js → server/chunks/ssr/_1p6lb7s._.js} +2 -2
  83. package/.next/server/chunks/ssr/_1yqlx1m._.js +1 -1
  84. package/.next/server/chunks/ssr/apps_web_components_analytics_analytics-dashboard_tsx_1056-z3._.js +1 -1
  85. package/.next/server/middleware-build-manifest.js +3 -3
  86. package/.next/server/pages/404.html +1 -1
  87. package/.next/server/pages/500.html +1 -1
  88. package/.next/standalone/apps/web/.next/BUILD_ID +1 -1
  89. package/.next/standalone/apps/web/.next/build-manifest.json +3 -3
  90. package/.next/standalone/apps/web/.next/required-server-files.json +1 -1
  91. package/.next/standalone/apps/web/.next/server/app/_global-error.html +1 -1
  92. package/.next/standalone/apps/web/.next/server/app/_global-error.rsc +1 -1
  93. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  94. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  95. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  96. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  97. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  98. package/.next/standalone/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  99. package/.next/standalone/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  100. package/.next/standalone/apps/web/.next/server/app/_not-found.html +1 -1
  101. package/.next/standalone/apps/web/.next/server/app/_not-found.rsc +18 -18
  102. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_full.segment.rsc +18 -18
  103. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  104. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_index.segment.rsc +12 -12
  105. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  106. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  107. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  108. package/.next/standalone/apps/web/.next/server/app/analytics/page.js.nft.json +1 -1
  109. package/.next/standalone/apps/web/.next/server/app/analytics/page_client-reference-manifest.js +1 -1
  110. package/.next/standalone/apps/web/.next/server/app/analytics.html +1 -1
  111. package/.next/standalone/apps/web/.next/server/app/analytics.rsc +19 -19
  112. package/.next/standalone/apps/web/.next/server/app/analytics.segments/_full.segment.rsc +19 -19
  113. package/.next/standalone/apps/web/.next/server/app/analytics.segments/_head.segment.rsc +4 -4
  114. package/.next/standalone/apps/web/.next/server/app/analytics.segments/_index.segment.rsc +12 -12
  115. package/.next/standalone/apps/web/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
  116. package/.next/standalone/apps/web/.next/server/app/analytics.segments/analytics/__PAGE__.segment.rsc +3 -3
  117. package/.next/standalone/apps/web/.next/server/app/analytics.segments/analytics.segment.rsc +3 -3
  118. package/.next/standalone/apps/web/.next/server/app/chat/page.js.nft.json +1 -1
  119. package/.next/standalone/apps/web/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  120. package/.next/standalone/apps/web/.next/server/app/chat.html +1 -1
  121. package/.next/standalone/apps/web/.next/server/app/chat.rsc +19 -19
  122. package/.next/standalone/apps/web/.next/server/app/chat.segments/_full.segment.rsc +19 -19
  123. package/.next/standalone/apps/web/.next/server/app/chat.segments/_head.segment.rsc +4 -4
  124. package/.next/standalone/apps/web/.next/server/app/chat.segments/_index.segment.rsc +12 -12
  125. package/.next/standalone/apps/web/.next/server/app/chat.segments/_tree.segment.rsc +2 -2
  126. package/.next/standalone/apps/web/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +3 -3
  127. package/.next/standalone/apps/web/.next/server/app/chat.segments/chat.segment.rsc +3 -3
  128. package/.next/standalone/apps/web/.next/server/app/data/page.js.nft.json +1 -1
  129. package/.next/standalone/apps/web/.next/server/app/data/page_client-reference-manifest.js +1 -1
  130. package/.next/standalone/apps/web/.next/server/app/data.html +1 -1
  131. package/.next/standalone/apps/web/.next/server/app/data.rsc +25 -26
  132. package/.next/standalone/apps/web/.next/server/app/data.segments/_full.segment.rsc +25 -26
  133. package/.next/standalone/apps/web/.next/server/app/data.segments/_head.segment.rsc +4 -4
  134. package/.next/standalone/apps/web/.next/server/app/data.segments/_index.segment.rsc +12 -12
  135. package/.next/standalone/apps/web/.next/server/app/data.segments/_tree.segment.rsc +2 -2
  136. package/.next/standalone/apps/web/.next/server/app/data.segments/data/__PAGE__.segment.rsc +3 -3
  137. package/.next/standalone/apps/web/.next/server/app/data.segments/data.segment.rsc +3 -3
  138. package/.next/standalone/apps/web/.next/server/app/index.html +1 -1
  139. package/.next/standalone/apps/web/.next/server/app/index.rsc +17 -17
  140. package/.next/standalone/apps/web/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  141. package/.next/standalone/apps/web/.next/server/app/index.segments/_full.segment.rsc +17 -17
  142. package/.next/standalone/apps/web/.next/server/app/index.segments/_head.segment.rsc +4 -4
  143. package/.next/standalone/apps/web/.next/server/app/index.segments/_index.segment.rsc +12 -12
  144. package/.next/standalone/apps/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  145. package/.next/standalone/apps/web/.next/server/app/page.js.nft.json +1 -1
  146. package/.next/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  147. package/.next/standalone/apps/web/.next/server/app/settings/page.js.nft.json +1 -1
  148. package/.next/standalone/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  149. package/.next/standalone/apps/web/.next/server/app/settings.html +1 -1
  150. package/.next/standalone/apps/web/.next/server/app/settings.rsc +19 -19
  151. package/.next/standalone/apps/web/.next/server/app/settings.segments/_full.segment.rsc +19 -19
  152. package/.next/standalone/apps/web/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  153. package/.next/standalone/apps/web/.next/server/app/settings.segments/_index.segment.rsc +12 -12
  154. package/.next/standalone/apps/web/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  155. package/.next/standalone/apps/web/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  156. package/.next/standalone/apps/web/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  157. package/.next/standalone/apps/web/.next/server/chunks/0598_next_dist_esm_build_templates_app-route_0kbcuk-.js +8 -7
  158. package/.next/standalone/apps/web/.next/server/chunks/0598_next_dist_esm_build_templates_app-route_0sbf4ny.js +2 -2
  159. package/.next/standalone/apps/web/.next/server/chunks/[root-of-the-server]__0j2l54r._.js +1 -1
  160. package/.next/standalone/apps/web/.next/server/chunks/packages_scraper_src_0kkcv_v._.js +1 -1
  161. package/.next/standalone/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0m21fli._.js → [root-of-the-server]__0pgotbk._.js} +2 -2
  162. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__1k1mxo2._.js +3 -0
  163. package/.next/standalone/apps/web/.next/server/chunks/ssr/_169pdlf._.js +5 -5
  164. package/.next/standalone/apps/web/.next/server/chunks/ssr/_18jagqc._.js +2 -2
  165. package/.next/standalone/apps/web/.next/server/chunks/ssr/_1hetwwu._.js +2 -2
  166. package/.next/{server/chunks/ssr/_0s8403d._.js → standalone/apps/web/.next/server/chunks/ssr/_1p6lb7s._.js} +2 -2
  167. package/.next/standalone/apps/web/.next/server/chunks/ssr/_1yqlx1m._.js +1 -1
  168. package/.next/standalone/apps/web/.next/server/chunks/ssr/apps_web_components_analytics_analytics-dashboard_tsx_1056-z3._.js +1 -1
  169. package/.next/standalone/apps/web/.next/server/middleware-build-manifest.js +3 -3
  170. package/.next/standalone/apps/web/.next/server/pages/404.html +1 -1
  171. package/.next/standalone/apps/web/.next/server/pages/500.html +1 -1
  172. package/.next/standalone/apps/web/.next/static/chunks/0f_k7h1yraes3.js +1 -0
  173. package/.next/standalone/apps/web/.next/static/chunks/1j_-mc43_9-b3.js +121 -0
  174. package/.next/standalone/apps/web/.next/static/chunks/23efo4rpc31kr.js +1 -0
  175. package/.next/standalone/apps/web/.next/static/chunks/2dvtyg2k2op4x.js +11 -0
  176. package/.next/standalone/apps/web/.next/static/chunks/{2ljwki2xxnblc.js → 2h-80z3n8mi3d.js} +7 -7
  177. package/.next/{static/chunks/1ov69q-i9ybqi.js → standalone/apps/web/.next/static/chunks/2x1t8sqst0ipu.js} +1 -1
  178. package/.next/standalone/apps/web/.next/static/chunks/37j20in7beze4.js +1 -0
  179. package/.next/standalone/apps/web/.next/static/chunks/{1cxabi5yzqz57.js → 38f3p67a1uufx.js} +1 -1
  180. package/.next/standalone/apps/web/.next/static/chunks/3fe06cefiv690.css +1 -0
  181. package/.next/standalone/apps/web/CHANGELOG.md +21 -0
  182. package/.next/standalone/apps/web/app/api/chat/route.ts +34 -13
  183. package/.next/standalone/apps/web/app/api/chat/tools.ts +10 -1
  184. package/.next/standalone/apps/web/app/api/media/process/route.ts +34 -1
  185. package/.next/standalone/apps/web/app/settings/page.tsx +16 -5
  186. package/.next/standalone/apps/web/bin/larkup.js +12 -1
  187. package/.next/standalone/apps/web/components/chat/message-item.tsx +68 -3
  188. package/.next/standalone/apps/web/components/data/data-workspace.tsx +53 -120
  189. package/.next/standalone/apps/web/components/data/firecrawl-notice.tsx +3 -13
  190. package/.next/standalone/apps/web/components/data/media-panel.tsx +182 -25
  191. package/.next/standalone/apps/web/components/data/scrape-panel.tsx +4 -12
  192. package/.next/standalone/apps/web/components/data/upload-panel.tsx +0 -1
  193. package/.next/standalone/apps/web/components/index/index-workspace.tsx +48 -25
  194. package/.next/standalone/apps/web/components/settings/marketplace-section.tsx +1 -1
  195. package/.next/standalone/apps/web/components/settings/settings-layout.tsx +1 -2
  196. package/.next/standalone/apps/web/package.json +1 -1
  197. package/.next/standalone/apps/web/server.js +1 -1
  198. package/.next/standalone/packages/tools/doc-editor/CHANGELOG.md +7 -0
  199. package/.next/standalone/packages/tools/doc-editor/dist/editor.js +1 -15
  200. package/.next/standalone/packages/tools/doc-editor/package.json +1 -1
  201. package/.next/standalone/packages/tools/doc-editor/src/editor.ts +1 -15
  202. package/.next/standalone/packages/tools/video-audio/CHANGELOG.md +6 -0
  203. package/.next/standalone/packages/tools/video-audio/dist/url-importer.js +37 -5
  204. package/.next/standalone/packages/tools/video-audio/package.json +1 -1
  205. package/.next/standalone/packages/tools/video-audio/src/url-importer.ts +61 -25
  206. package/.next/static/chunks/0f_k7h1yraes3.js +1 -0
  207. package/.next/static/chunks/1j_-mc43_9-b3.js +121 -0
  208. package/.next/static/chunks/23efo4rpc31kr.js +1 -0
  209. package/.next/static/chunks/2dvtyg2k2op4x.js +11 -0
  210. package/.next/static/chunks/{2ljwki2xxnblc.js → 2h-80z3n8mi3d.js} +7 -7
  211. package/.next/{standalone/apps/web/.next/static/chunks/1ov69q-i9ybqi.js → static/chunks/2x1t8sqst0ipu.js} +1 -1
  212. package/.next/static/chunks/37j20in7beze4.js +1 -0
  213. package/.next/static/chunks/{1cxabi5yzqz57.js → 38f3p67a1uufx.js} +1 -1
  214. package/.next/static/chunks/3fe06cefiv690.css +1 -0
  215. package/CHANGELOG.md +21 -0
  216. package/app/api/chat/route.ts +34 -13
  217. package/app/api/chat/tools.ts +10 -1
  218. package/app/api/media/process/route.ts +34 -1
  219. package/app/settings/page.tsx +16 -5
  220. package/bin/larkup.js +12 -1
  221. package/components/chat/message-item.tsx +68 -3
  222. package/components/data/data-workspace.tsx +53 -120
  223. package/components/data/firecrawl-notice.tsx +3 -13
  224. package/components/data/media-panel.tsx +182 -25
  225. package/components/data/scrape-panel.tsx +4 -12
  226. package/components/data/upload-panel.tsx +0 -1
  227. package/components/index/index-workspace.tsx +48 -25
  228. package/components/settings/marketplace-section.tsx +1 -1
  229. package/components/settings/settings-layout.tsx +1 -2
  230. package/package.json +6 -6
  231. package/.next/server/chunks/ssr/[root-of-the-server]__0t8ud_u._.js +0 -3
  232. package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0t8ud_u._.js +0 -3
  233. package/.next/standalone/apps/web/.next/static/chunks/03ju_837pa9ul.js +0 -11
  234. package/.next/standalone/apps/web/.next/static/chunks/0ge3nirnmx_np.js +0 -1
  235. package/.next/standalone/apps/web/.next/static/chunks/19krxv-ou9c8c.js +0 -121
  236. package/.next/standalone/apps/web/.next/static/chunks/1_nk3imchwn8a.css +0 -1
  237. package/.next/standalone/apps/web/.next/static/chunks/25rt2v27sz0io.js +0 -1
  238. package/.next/static/chunks/03ju_837pa9ul.js +0 -11
  239. package/.next/static/chunks/0ge3nirnmx_np.js +0 -1
  240. package/.next/static/chunks/19krxv-ou9c8c.js +0 -121
  241. package/.next/static/chunks/1_nk3imchwn8a.css +0 -1
  242. package/.next/static/chunks/25rt2v27sz0io.js +0 -1
  243. /package/.next/standalone/apps/web/.next/static/{iCALZzxFfElF4z3wYZwsC → whR5PvI0kapiCtaze5Lb0}/_buildManifest.js +0 -0
  244. /package/.next/standalone/apps/web/.next/static/{iCALZzxFfElF4z3wYZwsC → whR5PvI0kapiCtaze5Lb0}/_clientMiddlewareManifest.js +0 -0
  245. /package/.next/standalone/apps/web/.next/static/{iCALZzxFfElF4z3wYZwsC → whR5PvI0kapiCtaze5Lb0}/_ssgManifest.js +0 -0
  246. /package/.next/static/{iCALZzxFfElF4z3wYZwsC → whR5PvI0kapiCtaze5Lb0}/_buildManifest.js +0 -0
  247. /package/.next/static/{iCALZzxFfElF4z3wYZwsC → whR5PvI0kapiCtaze5Lb0}/_clientMiddlewareManifest.js +0 -0
  248. /package/.next/static/{iCALZzxFfElF4z3wYZwsC → whR5PvI0kapiCtaze5Lb0}/_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/3zw6tgf7mxo39.js","/_next/static/chunks/1ov69q-i9ybqi.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/1ov69q-i9ybqi.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"MetadataBoundary"]
2
+ 2:I[711184,["/_next/static/chunks/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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/3zw6tgf7mxo39.js","/_next/static/chunks/1ov69q-i9ybqi.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":"iCALZzxFfElF4z3wYZwsC"}
5
+ 5:I[499693,["/_next/static/chunks/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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":"whR5PvI0kapiCtaze5Lb0"}
@@ -1,14 +1,14 @@
1
1
  1:"$Sreact.fragment"
2
- 2:I[232295,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/1ov69q-i9ybqi.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/1ov69q-i9ybqi.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/1ov69q-i9ybqi.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/1ov69q-i9ybqi.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/1ov69q-i9ybqi.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/1ov69q-i9ybqi.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/1ov69q-i9ybqi.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/1ov69q-i9ybqi.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/1ov69q-i9ybqi.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/1ov69q-i9ybqi.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"Analytics"]
2
+ 2:I[232295,["/_next/static/chunks/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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
- :HL["/_next/static/chunks/1_nk3imchwn8a.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/1_nk3imchwn8a.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/1ov69q-i9ybqi.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":"iCALZzxFfElF4z3wYZwsC"}
13
+ :HL["/_next/static/chunks/3fe06cefiv690.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/3fe06cefiv690.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/38f3p67a1uufx.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/3zw6tgf7mxo39.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/2x1t8sqst0ipu.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":"whR5PvI0kapiCtaze5Lb0"}
@@ -1,5 +1,5 @@
1
1
  :HL["/_next/static/chunks/233p45nuh4m5b.css","style"]
2
- :HL["/_next/static/chunks/1_nk3imchwn8a.css","style"]
2
+ :HL["/_next/static/chunks/3fe06cefiv690.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":"iCALZzxFfElF4z3wYZwsC"}
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":"whR5PvI0kapiCtaze5Lb0"}
@@ -1,9 +1,9 @@
1
1
  1:"$Sreact.fragment"
2
- 2:I[638757,["/_next/static/chunks/1cxabi5yzqz57.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/1ov69q-i9ybqi.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/1ov69q-i9ybqi.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/19krxv-ou9c8c.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/1ov69q-i9ybqi.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"OutletBoundary"]
2
+ 2:I[638757,["/_next/static/chunks/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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/1j_-mc43_9-b3.js","/_next/static/chunks/3lpl_4iou48lk.js"],"default"]
4
+ 6:I[711184,["/_next/static/chunks/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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/19krxv-ou9c8c.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":"iCALZzxFfElF4z3wYZwsC"}
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/1j_-mc43_9-b3.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":"whR5PvI0kapiCtaze5Lb0"}
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/3zw6tgf7mxo39.js","/_next/static/chunks/1ov69q-i9ybqi.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/1ov69q-i9ybqi.js","/_next/static/chunks/0_jwrts3vuzsv.js","/_next/static/chunks/3w4-sqe513cwc.js","/_next/static/chunks/1xlxyu0yrbcp_.js"],"default"]
2
+ 2:I[200943,["/_next/static/chunks/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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/38f3p67a1uufx.js","/_next/static/chunks/3zw6tgf7mxo39.js","/_next/static/chunks/2x1t8sqst0ipu.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":"iCALZzxFfElF4z3wYZwsC"}
5
+ 0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"whR5PvI0kapiCtaze5Lb0"}
@@ -1,4 +1,4 @@
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),d=e.i(576251),c=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),I=e.i(235072),k=e.i(528909),R=e.i(89087),z=e.i(344963),N=e.i(256485),E=e.i(638725),O=e.i(313893),M=e.i(868776),P=e.i(489694),D=e.i(432970),q=e.i(585071),j=e.i(523554),$=e.i(192441),U=e.i(705252);function F(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 _(e,t=200,a=0,r=!1){let s=F(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=F(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 F(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),Y=e.i(463857),V=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,D.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:d}=await e.A(313282);if(d({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,P.readRun)();if(!o||"completed"!==o.status||(o.totalChunks??0)===0)return{query:t,hits:[]};let l=await (0,j.embedQuery)(s,t),d=await (0,q.createAdapter)(s),c=await d.query(l,i,t);return X(t,c,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,V.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}}}),d=[],c=new Map;for(let e of l){if(e.metadata?.mediaAssetId&&(!n.has(e.documentId)||!o.has(e.documentId)))continue;let t=c.get(e.documentId)??0;if(!(t>=(e.metadata?.isMediaSummary===!0||e.metadata?.contentKind==="multimodal-segment"||e.metadata?.contentKind==="audio-transcript-segment"?1:3))&&(d.push(e),c.set(e.documentId,t+1),d.length>=a))break}let u=d.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:d.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),images:t.metadata?.images,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,O.tool)({description:"HIGHEST PRIORITY TOOL — Search the user's private RAG knowledge base. ALWAYS use this FIRST before webSearch or any other tool when the question may relate to the user's indexed data. This includes questions about documents, files, images, diagrams, videos, or anything the user may have uploaded. Do not use for general knowledge, casual conversation, or writing tasks. Search once with a focused query. For media, inspect the returned timeline and endingContext, and reuse exact mediaAssetId/startSecs/endSecs values with presentMedia when a preview is useful. Never guess timestamps.",inputSchema:M.z.object({query:M.z.string().describe("The search query for the knowledge base.")}),execute:async({query:e})=>Q(e,5,a??null)}),presentMedia:(0,O.tool)({description:"Embed one indexed image, video segment, or audio segment as a compact citation in the chat. Use the exact mediaAssetId for Media-library assets, or the exact images[].imageUrl returned by searchKnowledgeBase for an image extracted from a PDF. Call this when the user asks to see, watch, play, or hear the media. Prefer one best citation and do not call this for every search hit.",inputSchema:M.z.object({assetId:M.z.string().optional().describe("Exact mediaAssetId returned by searchKnowledgeBase."),imageUrl:M.z.string().optional().describe("Exact images[].imageUrl returned by searchKnowledgeBase for an extracted PDF image."),startSecs:M.z.number().nonnegative().optional().describe("Exact segment start time returned by searchKnowledgeBase."),endSecs:M.z.number().nonnegative().optional().describe("Exact segment end time returned by searchKnowledgeBase.")}),execute:async({assetId:e,imageUrl:t,startSecs:r,endSecs:s})=>{let i=async()=>{if(t){let e=(await (0,U.readDocuments)()).find(e=>Array.isArray(e.metadata?.images)&&e.metadata.images.some(e=>e?.imageUrl===t)),a=e?.metadata?.images?.find(e=>e?.imageUrl===t);return a?{success:!0,assetId:`document-image-${a.index??0}`,mediaType:"image",fileName:`${e?.title??"Document"} — Image ${(a.index??0)+1}`,mediaUrl:t,sourceUrl:e?.url||t}:{success:!1,error:"That extracted document image is no longer available."}}if(!e)return{success:!1,error:"Choose a media asset or extracted document image."};let i=(await (0,V.readMediaAssets)()).find(t=>t.id===e);if(!i||"completed"!==i.processingStatus)return{success:!1,error:"That indexed media asset is no longer available."};let n=(0,G.normalizeMediaCitationRange)(i.type,i.durationSecs,r,s),o=a?`?serverId=${encodeURIComponent(a)}`:"",l=`/api/media/${i.id}${o}`,d=void 0!==n.startSecs?(0,G.timestampMediaUrl)(i.originalUrl||l,n.startSecs):i.originalUrl||l;return{success:!0,assetId:i.id,mediaType:i.type,fileName:i.fileName,mediaUrl:l,sourceUrl:d,startSecs:n.startSecs,endSecs:n.endSecs}};return a?(0,$.runWithServer)(a,i):i()}}),queryTabularData:(0,O.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:M.z.object({datasetId:M.z.string().describe("The ID of the dataset to query. Get this from the available datasets list in the system prompt."),filters:M.z.array(M.z.object({column:M.z.string(),op:M.z.enum(["eq","neq","gt","gte","lt","lte","contains","in"]),value:M.z.any()})).optional().describe("Filters to apply to the data."),groupBy:M.z.array(M.z.string()).optional().describe("Columns to group by for aggregations."),aggregations:M.z.array(M.z.object({column:M.z.string(),op:M.z.enum(["sum","avg","count","min","max","median"])})).optional().describe("Aggregation operations to perform."),sortBy:M.z.string().optional().describe("Column to sort results by."),sortOrder:M.z.enum(["asc","desc"]).optional().describe("Sort direction."),limit:M.z.number().optional().describe("Max number of rows to return."),columns:M.z.array(M.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,O.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:M.z.object({chartType:M.z.enum(["bar","area","line","pie","scatter","radar"]).describe("The type of chart to create."),title:M.z.string().describe("Chart title."),subtitle:M.z.string().optional().describe("Chart subtitle for additional context."),data:M.z.array(M.z.record(M.z.string(),M.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:M.z.string().describe("The key in data objects to use for the X axis (usually 'name')."),series:M.z.array(M.z.object({dataKey:M.z.string().describe("The key in data objects for this series values."),label:M.z.string().optional().describe("Display label for this series in the legend."),color:M.z.string().optional().describe("Color for this series (hex). If omitted, theme colors are used.")})).describe("Data series to plot."),stacked:M.z.boolean().optional().describe("Whether to stack bar/area charts."),showLegend:M.z.boolean().optional().default(!0).describe("Whether to show the legend."),xAxisLabel:M.z.string().optional().describe("Label for the X axis."),yAxisLabel:M.z.string().optional().describe("Label for the Y axis.")}),execute:async e=>e}),executeAnalysis:(0,O.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:M.z.object({code:M.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:M.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,O.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:M.z.object({imageUrl:M.z.string().describe("The URL of the image to analyze (from metadata.images.imageUrl)"),prompt:M.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,O.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:M.z.object({filter:M.z.object({source:M.z.enum(["paste","upload","scrape","tabular","media"]).optional().describe("Filter by document source type."),status:M.z.enum(["indexed","unindexed"]).optional().describe("Filter by indexing status."),metadataKey:M.z.string().optional().describe("Filter by metadata key existence."),metadataValue:M.z.string().optional().describe("Filter by metadata key=value (requires metadataKey)."),titleContains:M.z.string().optional().describe("Case-insensitive text search in title."),createdAfter:M.z.string().optional().describe("Only docs created on or after this ISO date."),createdBefore:M.z.string().optional().describe("Only docs created on or before this ISO date.")}).optional().describe("Optional filters to narrow down documents."),limit:M.z.number().optional().default(200).describe("Max number of document summaries to return (default 200)."),offset:M.z.number().optional().default(0).describe("Pagination offset."),includeContent:M.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 _(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,O.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:M.z.object({code:M.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:M.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,O.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:M.z.object({edits:M.z.array(M.z.object({fieldId:M.z.string().describe("The ID of the field to fill (from the active document context)"),value:M.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,O.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:M.z.object({edits:M.z.array(M.z.object({pageIndex:M.z.number().default(0).describe("Page or slide index (0-based)"),type:M.z.enum(["replace_text","insert_text"]).describe("Type of edit"),search:M.z.string().optional().describe("Text to search for (if replacing)"),text:M.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,O.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:M.z.object({detectedLocations:M.z.array(M.z.object({pageIndex:M.z.number(),context:M.z.string()})).optional().describe("Optional. The detected signature locations in the document.")})}),webSearch:(0,O.tool)({description:"Search the public internet for current information, news, or facts. IMPORTANT: Only use this AFTER searchKnowledgeBase has been tried first and returned no relevant results. Never use webSearch as a first resort — the user's indexed knowledge base always takes priority. Use webSearch for questions about current events, public facts, or topics clearly outside the user's indexed data.",inputSchema:M.z.object({query:M.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:d}=await e.A(465615);a=await d(i)}if(a.status>=400)return{error:(await a.json()).error||"Search failed",results:[]};let c=await a.json();return{results:(c.items||c.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,Y.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),o=e.i(423437),n=e.i(178820),l=e.i(569191),d=e.i(576251),c=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),I=e.i(235072),k=e.i(528909),R=e.i(89087),z=e.i(344963),N=e.i(256485),E=e.i(638725),O=e.i(313893),M=e.i(868776),P=e.i(489694),q=e.i(432970),D=e.i(585071),j=e.i(523554),$=e.i(192441),U=e.i(705252);function F(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 _(e,t=200,a=0,r=!1){let s=F(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="",o="";for(let n of e){t[n.source]=(t[n.source]??0)+1;let e=n.status??"unindexed";if(a[e]=(a[e]??0)+1,s+=n.charCount,(!i||n.createdAt<i)&&(i=n.createdAt),(!o||n.createdAt>o)&&(o=n.createdAt),n.metadata)for(let e of Object.keys(n.metadata))e.startsWith("_")||(r[e]=(r[e]??0)+1)}let n=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:n,totalCharacters:s,dateRange:i?{earliest:i,latest:o}:null}}(s)}}async function L(e,t=1e3){let a=F(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}`)],o=e=>e.includes(",")||e.includes('"')||e.includes("\n")?`"${e.replace(/"/g,'""')}"`:e,n=[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)});n.push([...a,...r].map(o).join(","))}return n.join("\n")}async function K(e,t=1e3){return F(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),Y=e.i(463857),V=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),o=await (0,q.refreshServerStatus)();if(o.running)try{let s=Date.now(),n=await fetch(`${o.endpoint}/query`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:t,topK:i}),signal:AbortSignal.timeout(15e3)}),l=await n.json(),{trackUsageEvent:d}=await e.A(313282);if(d({type:"server_request",endpoint:"/query",method:"POST",statusCode:n.status,latencyMs:Date.now()-s,serverId:r??void 0,timestamp:new Date().toISOString()}),n.ok&&Array.isArray(l.hits)&&l.hits.length>0)return X(t,l.hits,a)}catch{}let n=await (0,P.readRun)();if(!n||"completed"!==n.status||(n.totalChunks??0)===0)return{query:t,hits:[]};let l=await (0,j.embedQuery)(s,t),d=await (0,D.createAdapter)(s),c=await d.query(l,i,t);return X(t,c,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,V.readMediaAssets)()]),o=new Map(s.map(e=>[e.id,e])),n=new Set(i.flatMap(e=>e.documentIds)),l=t.map(e=>{let t=o.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}}}),d=[],c=new Map;for(let e of l){if(e.metadata?.mediaAssetId&&(!o.has(e.documentId)||!n.has(e.documentId)))continue;let t=c.get(e.documentId)??0;if(!(t>=(e.metadata?.isMediaSummary===!0||e.metadata?.contentKind==="multimodal-segment"||e.metadata?.contentKind==="audio-transcript-segment"?1:3))&&(d.push(e),c.set(e.documentId,t+1),d.length>=a))break}let u=d.find(e=>e.metadata?.mediaAssetId)?.metadata.mediaAssetId,m=u?s.filter(e=>"indexed"===e.status&&e.metadata?.mediaAssetId===u&&n.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:d.map((t,a)=>{let r=Number(t.metadata?.sequence),i=Number(t.metadata?.startSecs),o=t.metadata?.mediaAssetId?s.filter(e=>{let a=Number(e.metadata?.sequence),s=Number(e.metadata?.startSecs);return"indexed"===e.status&&n.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),images:t.metadata?.images,metadata:t.metadata,timelineContext:o,endingContext:0===a?x:void 0}})}}async function Z(t){let{serverId:a,docSessionId:r,config:s}=t,i={searchKnowledgeBase:(0,O.tool)({description:"HIGHEST PRIORITY TOOL — Search the user's private RAG knowledge base. ALWAYS use this FIRST before webSearch or any other tool when the question may relate to the user's indexed data. This includes questions about documents, files, images, diagrams, videos, or anything the user may have uploaded. Do not use for general knowledge, casual conversation, or writing tasks. Search once with a focused query. For media, inspect the returned timeline and endingContext, and reuse exact mediaAssetId/startSecs/endSecs values with presentMedia when a preview is useful. Never guess timestamps.",inputSchema:M.z.object({query:M.z.string().describe("The search query for the knowledge base.")}),execute:async({query:e})=>Q(e,5,a??null)}),presentMedia:(0,O.tool)({description:"Embed one indexed image, video segment, or audio segment as a compact citation in the chat. Use the exact mediaAssetId for Media-library assets, or the exact images[].imageUrl returned by searchKnowledgeBase for an image extracted from a PDF. Call this when the user asks to see, watch, play, or hear the media. Prefer one best citation and do not call this for every search hit.",inputSchema:M.z.object({assetId:M.z.string().optional().describe("Exact mediaAssetId returned by searchKnowledgeBase."),imageUrl:M.z.string().optional().describe("Exact images[].imageUrl returned by searchKnowledgeBase for an extracted PDF image."),startSecs:M.z.number().nonnegative().optional().describe("Exact segment start time returned by searchKnowledgeBase."),endSecs:M.z.number().nonnegative().optional().describe("Exact segment end time returned by searchKnowledgeBase.")}),execute:async({assetId:e,imageUrl:t,startSecs:r,endSecs:s})=>{let i=async()=>{if(t){let e=(await (0,U.readDocuments)()).find(e=>Array.isArray(e.metadata?.images)&&e.metadata.images.some(e=>e?.imageUrl===t)),a=e?.metadata?.images?.find(e=>e?.imageUrl===t);return a?{success:!0,assetId:`document-image-${a.index??0}`,mediaType:"image",fileName:`${e?.title??"Document"} — Image ${(a.index??0)+1}`,mediaUrl:t,sourceUrl:e?.url||t}:{success:!1,error:"That extracted document image is no longer available."}}if(!e)return{success:!1,error:"Choose a media asset or extracted document image."};let i=(await (0,V.readMediaAssets)()).find(t=>t.id===e);if(!i||"completed"!==i.processingStatus)return{success:!1,error:"That indexed media asset is no longer available."};let o=(0,G.normalizeMediaCitationRange)(i.type,i.durationSecs,r,s),n=a?`?serverId=${encodeURIComponent(a)}`:"",l=`/api/media/${i.id}${n}`,d=void 0!==o.startSecs?(0,G.timestampMediaUrl)(i.originalUrl||l,o.startSecs):i.originalUrl||l;return{success:!0,assetId:i.id,mediaType:i.type,fileName:i.fileName,mediaUrl:l,sourceUrl:d,startSecs:o.startSecs,endSecs:o.endSecs}};return a?(0,$.runWithServer)(a,i):i()}}),queryTabularData:(0,O.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:M.z.object({datasetId:M.z.string().describe("The ID of the dataset to query. Get this from the available datasets list in the system prompt."),filters:M.z.array(M.z.object({column:M.z.string(),op:M.z.enum(["eq","neq","gt","gte","lt","lte","contains","in"]),value:M.z.any()})).optional().describe("Filters to apply to the data."),groupBy:M.z.array(M.z.string()).optional().describe("Columns to group by for aggregations."),aggregations:M.z.array(M.z.object({column:M.z.string(),op:M.z.enum(["sum","avg","count","min","max","median"])})).optional().describe("Aggregation operations to perform."),sortBy:M.z.string().optional().describe("Column to sort results by."),sortOrder:M.z.enum(["asc","desc"]).optional().describe("Sort direction."),limit:M.z.number().optional().describe("Max number of rows to return."),columns:M.z.array(M.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,O.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:M.z.object({chartType:M.z.enum(["bar","area","line","pie","scatter","radar"]).describe("The type of chart to create."),title:M.z.string().describe("Chart title."),subtitle:M.z.string().optional().describe("Chart subtitle for additional context."),data:M.z.array(M.z.record(M.z.string(),M.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:M.z.string().describe("The key in data objects to use for the X axis (usually 'name')."),series:M.z.array(M.z.object({dataKey:M.z.string().describe("The key in data objects for this series values."),label:M.z.string().optional().describe("Display label for this series in the legend."),color:M.z.string().optional().describe("Color for this series (hex). If omitted, theme colors are used.")})).describe("Data series to plot."),stacked:M.z.boolean().optional().describe("Whether to stack bar/area charts."),showLegend:M.z.boolean().optional().default(!0).describe("Whether to show the legend."),xAxisLabel:M.z.string().optional().describe("Label for the X axis."),yAxisLabel:M.z.string().optional().describe("Label for the Y axis.")}),execute:async e=>e}),executeAnalysis:(0,O.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:M.z.object({code:M.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:M.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,O.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:M.z.object({imageUrl:M.z.string().describe("The URL of the image to analyze (from metadata.images.imageUrl)"),prompt:M.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 o=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(!o.ok)throw Error(`Vision API error: ${o.statusText}`);return{analysis:(await o.json()).description}}catch(e){return{error:`Failed to analyze image: ${e.message}`}}}}),getIndexedData:(0,O.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:M.z.object({filter:M.z.object({source:M.z.enum(["paste","upload","scrape","tabular","media"]).optional().describe("Filter by document source type."),status:M.z.enum(["indexed","unindexed"]).optional().describe("Filter by indexing status."),metadataKey:M.z.string().optional().describe("Filter by metadata key existence."),metadataValue:M.z.string().optional().describe("Filter by metadata key=value (requires metadataKey)."),titleContains:M.z.string().optional().describe("Case-insensitive text search in title."),createdAfter:M.z.string().optional().describe("Only docs created on or after this ISO date."),createdBefore:M.z.string().optional().describe("Only docs created on or before this ISO date.")}).optional().describe("Optional filters to narrow down documents."),limit:M.z.number().optional().default(200).describe("Max number of document summaries to return (default 200)."),offset:M.z.number().optional().default(0).describe("Pagination offset."),includeContent:M.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 _(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,O.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:M.z.object({code:M.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:M.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,o=await a.execute({code:i,language:"python",files:s,timeout:3e4});return 0!==o.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"),o=await a.execute({code:i,language:"python",files:s,timeout:3e4})),{stdout:o.stdout.slice(0,5e3),stderr:o.stderr.slice(0,2e3),exitCode:o.exitCode,artifacts:o.artifacts.map(e=>({name:e.name,mimeType:e.mimeType,data:e.data.slice(0,5e5)})),executionTimeMs:o.executionTimeMs}}catch(e){return{stdout:"",stderr:e.message??"Corpus analysis failed",exitCode:1,artifacts:[],executionTimeMs:0}}}}),fillDocumentForm:(0,O.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:M.z.object({edits:M.z.array(M.z.object({fieldId:M.z.string().describe("The ID of the field to fill (from the active document context)"),value:M.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,O.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:M.z.object({edits:M.z.array(M.z.object({pageIndex:M.z.number().default(0).describe("Page or slide index (0-based)"),type:M.z.enum(["replace_text","insert_text"]).describe("Type of edit"),search:M.z.string().optional().describe("Text to search for (if replacing)"),text:M.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,O.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:M.z.object({detectedLocations:M.z.array(M.z.object({pageIndex:M.z.number(),context:M.z.string()})).optional().describe("Optional. The detected signature locations in the document.")})}),webSearch:(0,O.tool)({description:"Search the public internet for current information, news, or facts. IMPORTANT: Only use this AFTER searchKnowledgeBase has been tried first and returned no relevant results. Never use webSearch as a first resort — the user's indexed knowledge base always takes priority. Use webSearch for questions about current events, public facts, or topics clearly outside the user's indexed data.",inputSchema:M.z.object({query:M.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:o}=await e.A(3366);a=await o(i);break;case"bing":let{POST:n}=await e.A(654210);a=await n(i);break;case"exa":let{POST:l}=await e.A(187616);a=await l(i);break;default:let{POST:d}=await e.A(465615);a=await d(i)}if(a.status>=400)return{error:(await a.json()).error||"Search failed",results:[]};let c=await a.json();return{results:(c.items||c.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:[]}}}})},o=s?.enabledTools||[],n={},l=e=>0===o.length||o.includes(e);for(let[e,t]of Object.entries(i))"webSearch"!==e&&(l(e)||["searchKnowledgeBase","presentMedia","fillDocumentForm","editDocument","requestDocumentSignature"].includes(e))&&(n[e]=t);s?.webSearchEnabled===!0&&(n.webSearch=i.webSearch);try{for(let e of(await (0,Y.getInstalledTools)()))if(l(e.id)){let a=await (0,H.loadTool)(e.id);a&&a.default?n[e.id]=a.default(t):a&&a.tool&&(n[e.id]=a.tool(t))}}catch(e){console.error("[marketplace] Failed to load marketplace tools for chat:",e)}return n}let ee=`
2
2
 
3
3
  TOOL RULES:
4
4
  1. searchKnowledgeBase → Use FIRST when the question is about the user's indexed data (documents, files, images, videos, diagrams, anything they uploaded).
@@ -10,6 +10,7 @@ TOOL RULES:
10
10
  DO:
11
11
  - Keep answers short and direct. 1–3 sentences unless the task is complex.
12
12
  - Search at most ONCE per tool per turn. Never repeat the same search.
13
+ - For questions about the user's own facts or preferences (for example, "what is my favourite fruit?"), searchKnowledgeBase is required before answering.
13
14
  - Use presentMedia to show images/videos/audio from indexed content.
14
15
  - For follow-ups like "show me that", reuse the mediaAssetId from earlier results — do not search again.
15
16
 
@@ -18,20 +19,20 @@ DO NOT:
18
19
  - Output markdown images like ![alt](url) — the UI blocks them. Always use presentMedia instead.
19
20
  - Present every search result. Pick the single best one.
20
21
  - Guess or fabricate when results are insufficient.
21
- `;function et(e){let t=[...e].reverse().find(e=>"user"===e.role);return t?"string"==typeof t.content?t.content:Array.isArray(t.parts)?t.parts.filter(e=>"text"===e.type&&"string"==typeof e.text).map(e=>e.text).join(" "):"":""}async function ea(t){var a,r;let{messages:s,serverId:i,chatModelId:n,docSessionId:o,docFields:l}=await t.json(),d=await (0,w.readConfig)(),c=d.chatProvider||d.embeddingProvider,u=(await (0,x.getModelsByType)("language")).map(v.toChatDescriptor),m=n||d.chatModelId||(0,v.getDefaultChatModel)(u,c)?.id||"openai/gpt-4o-mini",p=m.split("/")[0],h="vercel_ai_gateway"===c?"vercel_ai_gateway":p||c,f=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,N.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,I.createMistral)({apiKey:a})(s);case"deepseek":return(0,k.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,z.createGateway)({apiKey:a})(t)}}(h,m,d.chatApiKey||d.embeddingApiKey||void 0,d.customChatModels),g=s.length>20?s.slice(s.length-20):s,y=g.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;if("searchKnowledgeBase"===t&&Array.isArray(a.hits)){let e={...a,hits:a.hits.map(e=>({documentId:e.documentId,title:e.title,url:e.url,score:e.score,text:"string"==typeof e.text?e.text.slice(0,1e3):e.text,images:e.images,metadata:e.metadata,timelineContext:e.timelineContext,endingContext:e.endingContext}))};return r?JSON.stringify(e):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}),O="";try{let e=await (0,S.listTabularDatasets)();e.length>0&&(O=`
22
+ `;async function et(t){let{messages:a,serverId:r,chatModelId:s,docSessionId:i,docFields:o}=await t.json(),n=await (0,w.readConfig)(),l=n.chatProvider||n.embeddingProvider,d=(await (0,x.getModelsByType)("language")).map(v.toChatDescriptor),c=s||n.chatModelId||(0,v.getDefaultChatModel)(d,l)?.id||"openai/gpt-4o-mini",u=c.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,N.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,I.createMistral)({apiKey:a})(s);case"deepseek":return(0,k.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,z.createGateway)({apiKey:a})(t)}}(m,c,n.chatApiKey||n.embeddingApiKey||void 0,n.customChatModels),h=a.length>20?a.slice(a.length-20):a,f=h.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;if("searchKnowledgeBase"===t&&Array.isArray(a.hits)){let e={...a,hits:a.hits.map(e=>({documentId:e.documentId,title:e.title,url:e.url,score:e.score,text:"string"==typeof e.text?e.text.slice(0,1e3):e.text,images:e.images,metadata:e.metadata,timelineContext:e.timelineContext,endingContext:e.endingContext}))};return r?JSON.stringify(e):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}),g="";try{let e=await (0,S.listTabularDatasets)();e.length>0&&(g=`
22
23
 
23
24
  Available tabular datasets:
24
25
  ${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}
25
- Columns: ${t}`}).join("\n")}`)}catch{}let M="";if(o){let e=l&&l.length>0?l.map(e=>{let t=`- ID: "${e.id}" | Label: "${e.name}" | Type: ${e.type}`;return e.value&&(t+=` | Current value: "${e.value}"`),e.context&&(t+=` | Surrounding text: "${String(e.context).slice(0,120)}"`),e.placeholder&&(t+=` | Placeholder: "${e.placeholder}"`),t}).join("\n"):"None detected.";M=`
26
+ Columns: ${t}`}).join("\n")}`)}catch{}let y="";if(i){let e=o&&o.length>0?o.map(e=>{let t=`- ID: "${e.id}" | Label: "${e.name}" | Type: ${e.type}`;return e.value&&(t+=` | Current value: "${e.value}"`),e.context&&(t+=` | Surrounding text: "${String(e.context).slice(0,120)}"`),e.placeholder&&(t+=` | Placeholder: "${e.placeholder}"`),t}).join("\n"):"None detected.";y=`
26
27
 
27
- [Active Document Session: ${o}]
28
+ [Active Document Session: ${i}]
28
29
  You are currently editing a document in the Canvas.
29
30
  The user may ask you to fill out form fields or edit content.
30
31
  IMPORTANT: Use the exact field IDs listed below when calling "fillDocumentForm". Do NOT invent field IDs.
31
- Available Form Fields (${l?.length??0} total):
32
- ${e}`}let P=E.DEFAULT_SYSTEM_PROMPT+(d.systemPrompt&&d.systemPrompt!==E.DEFAULT_SYSTEM_PROMPT?`
32
+ Available Form Fields (${o?.length??0} total):
33
+ ${e}`}let O=E.DEFAULT_SYSTEM_PROMPT+(n.systemPrompt&&n.systemPrompt!==E.DEFAULT_SYSTEM_PROMPT?`
33
34
 
34
35
  USER INSTRUCTIONS:
35
- ${d.systemPrompt}`:"")+ee+(d.webSearchEnabled?"\nWeb search is available. Use it for current events or public facts not in the knowledge base.\n":"")+O+M,D=await Z({serverId:i,docSessionId:o,config:d}),q=(a=et(g),!/^(hi|hello|hey|thanks|thank you|ok|sure|yes|no|please|help)\b/i.test(a.trim())&&(/\b(my|our)\s+(document|file|data|image|picture|diagram|video|audio|upload|corpus|knowledge|database|db|pdf|report|spreadsheet|presentation)/i.test(a)||/\b(the|this|that)\s+(document|file|diagram|image|picture|upload|pdf|report)/i.test(a)||/\b(uploaded?|indexed|scraped|knowledge base|corpus)\b/i.test(a)||/\bshow\s+me\b/i.test(a))&&!!D.searchKnowledgeBase),j=!0===d.webSearchEnabled&&(r=et(g),/\b(who won|winner|final score|match result|latest|current|today|yesterday|breaking news|weather|stock price|exchange rate|election result|schedule)\b/i.test(r))&&!!D.webSearch;return(0,b.streamText)({model:f,system:P,messages:await (0,b.convertToModelMessages)(y,{tools:D}),maxOutputTokens:4096,stopWhen:(0,b.stepCountIs)(3),toolChoice:"auto",prepareStep:({stepNumber:e})=>{if(q&&0===e)return{toolChoice:{type:"tool",toolName:"searchKnowledgeBase"}};if(j&&(!q||1===e))return{toolChoice:{type:"tool",toolName:"webSearch"}};let t=[];if(q&&t.push("searchKnowledgeBase"),j&&t.push("webSearch"),t.length>0)return{activeTools:Object.keys(D).filter(e=>!t.includes(e))}},onFinish:async({usage:t,response:a})=>{let{trackUsageEvent:r,estimateCost:s}=await e.A(313282);r({type:"chat",modelId:m,provider:h,promptTokens:t?.promptTokens??0,completionTokens:t?.completionTokens??0,totalTokens:t?.totalTokens??0,estimatedCost:s(m,t?.promptTokens??0,t?.completionTokens??0),timestamp:new Date().toISOString()})},tools:D}).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,ea,"maxDuration",0,60],246037);var er=e.i(246037);let es=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:er,...{}}),{workAsyncStorage:ei,workUnitAsyncStorage:en,serverHooks:eo}=es;async function el(e,t,r){r.requestMeta&&(0,s.setRequestMeta)(e,r.requestMeta),es.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let b="/api/chat/route";b=b.replace(/\/index$/,"")||"/";let w=await es.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:I,routerServerContext:k,isOnDemandRevalidate:R,revalidateOnlyGenerated:z,resolvedPathname:N,clientReferenceManifest:E,serverActionsManifest:O}=w,M=(0,o.normalizeAppPath)(b),P=!!(I.dynamicRoutes[M]||I.routes[N]),D=async()=>((null==k?void 0:k.render404)?await k.render404(e,t,A,!1):t.end("This page could not be found"),null);if(P&&!C){let e=!!I.routes[N],t=I.dynamicRoutes[M];if(t&&!1===t.fallback&&!e){if(T.adapterPath)return await D();throw new g.NoFallbackError}}let q=null;!P||es.isDev||C||(q="/index"===(q=N)?"/":q);let j=!0===es.isDev||!P,$=P&&!j;O&&E&&(0,n.setManifestsSingleton)({page:b,clientReferenceManifest:E,serverActionsManifest:O});let U=e.method||"GET",F=(0,i.getTracer)(),_=F.getActiveScopeSpan(),L=!!(null==k?void 0:k.isWrappedByNextServer),K=!!(0,s.getRequestMeta)(e,"minimalMode"),B=(0,s.getRequestMeta)(e,"incrementalCache")||await es.getIncrementalCache(e,T,I,K);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let W={params:S,previewProps:I.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)=>es.onRequestError(e,t,r,s,k)},sharedContext:{buildId:x,deploymentId:v}},H=new l.NodeNextRequest(e),Y=new l.NodeNextResponse(t),V=d.NextRequestAdapter.fromNodeNextRequest(H,(0,d.signalFromNodeResponse)(t));try{let s,n=async e=>es.handle(V,W).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=F.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==c.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&&z&&!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(!P)return await (0,m.sendResponse)(H,Y,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 es.onRequestError(e,t,{routerKind:"App Router",routePath:b,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:R})},!1,k),t}},d=await es.handleResponse({req:e,nextConfig:T,cacheKey:q,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:I,isRoutePPREnabled:!1,isOnDemandRevalidate:R,revalidateOnlyGenerated:z,responseGenerator:l,waitUntil:r.waitUntil,isMinimalMode:K});if(!P)return null;if((null==d||null==(i=d.value)?void 0:i.kind)!==y.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(o=d.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});K||t.setHeader("x-nextjs-cache",R?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),C&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let c=(0,p.fromNodeOutgoingHttpHeaders)(d.value.headers);return K&&P||c.delete(f.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||c.get("Cache-Control")||c.set("Cache-Control",(0,h.getCacheControlHeader)(d.cacheControl)),await (0,m.sendResponse)(H,Y,new Response(d.value.body,{headers:c,status:d.value.status||200})),null};L&&_?await o(_):(s=F.getActiveScopeSpan(),await F.withPropagatedContext(e.headers,()=>F.trace(c.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 es.onRequestError(e,t,{routerKind:"App Router",routePath:M,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:R})},!1,k),P)throw t;return await (0,m.sendResponse)(H,Y,new Response(null,{status:500})),null}}e.s(["handler",0,el,"patchFetch",0,function(){return(0,r.patchFetch)({workAsyncStorage:ei,workUnitAsyncStorage:en})},"routeModule",0,es,"serverHooks",0,eo,"workAsyncStorage",0,ei,"workUnitAsyncStorage",0,en],400660)}];
36
+ ${n.systemPrompt}`:"")+ee+(n.webSearchEnabled?"\nWeb search is available. Use it for current events or public facts not in the knowledge base.\n":"")+g+y,M=await Z({serverId:r,docSessionId:i,config:n}),P=function(e){let t=[...e].reverse().find(e=>"user"===e.role);if(!t)return"";if("string"==typeof t.content)return t.content;let a=Array.isArray(t.parts)?t.parts:Array.isArray(t.content)?t.content:[];return a.length?a.filter(e=>"text"===e.type&&"string"==typeof e.text).map(e=>e.text).join(" "):""}(h),q=!/^(hi|hello|hey|thanks|thank you|ok|sure|yes|no|please|help)\b/i.test(P.trim())&&(/\b(my|our)\s+(favo(?:u)?rite|preference|choice|answer|name|result|score|winner)\b/i.test(P)||/\b(?:what|which|who|where|when|how)\b[\s\S]{0,80}\b(my|our)\b/i.test(P)||/\b(my|our)\s+(document|file|data|image|picture|diagram|video|audio|upload|corpus|knowledge|database|db|pdf|report|spreadsheet|presentation)/i.test(P)||/\b(the|this|that)\s+(document|file|diagram|image|picture|upload|pdf|report)/i.test(P)||/\b(uploaded?|indexed|scraped|knowledge base|corpus)\b/i.test(P)||/\bshow\s+me\b/i.test(P))&&!!M.searchKnowledgeBase,D=!0===n.webSearchEnabled&&/\b(who won|winner|final score|match result|latest|current|today|yesterday|breaking news|weather|stock price|exchange rate|election result|schedule)\b/i.test(P)&&!!M.webSearch;return(0,b.streamText)({model:p,system:O,messages:await (0,b.convertToModelMessages)(f,{tools:M}),maxOutputTokens:4096,stopWhen:(0,b.stepCountIs)(3),toolChoice:"auto",prepareStep:({stepNumber:e})=>q&&0===e?{toolChoice:{type:"tool",toolName:"searchKnowledgeBase"}}:D&&!q&&0===e?{toolChoice:{type:"tool",toolName:"webSearch"}}:e>=2?{activeTools:Object.keys(M).filter(e=>"webSearch"!==e&&"searchKnowledgeBase"!==e)}:q&&e>=1?{activeTools:Object.keys(M).filter(e=>"searchKnowledgeBase"!==e)}:D&&e>=1?{activeTools:Object.keys(M).filter(e=>"webSearch"!==e)}:void 0,onFinish:async({usage:t,response:a})=>{let{trackUsageEvent:r,estimateCost:s}=await e.A(313282);r({type:"chat",modelId:c,provider:m,promptTokens:t?.promptTokens??0,completionTokens:t?.completionTokens??0,totalTokens:t?.totalTokens??0,estimatedCost:s(c,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:eo}=er;async function en(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:I,routerServerContext:k,isOnDemandRevalidate:R,revalidateOnlyGenerated:z,resolvedPathname:N,clientReferenceManifest:E,serverActionsManifest:O}=w,M=(0,n.normalizeAppPath)(b),P=!!(I.dynamicRoutes[M]||I.routes[N]),q=async()=>((null==k?void 0:k.render404)?await k.render404(e,t,A,!1):t.end("This page could not be found"),null);if(P&&!C){let e=!!I.routes[N],t=I.dynamicRoutes[M];if(t&&!1===t.fallback&&!e){if(T.adapterPath)return await q();throw new g.NoFallbackError}}let D=null;!P||er.isDev||C||(D="/index"===(D=N)?"/":D);let j=!0===er.isDev||!P,$=P&&!j;O&&E&&(0,o.setManifestsSingleton)({page:b,clientReferenceManifest:E,serverActionsManifest:O});let U=e.method||"GET",F=(0,i.getTracer)(),_=F.getActiveScopeSpan(),L=!!(null==k?void 0:k.isWrappedByNextServer),K=!!(0,s.getRequestMeta)(e,"minimalMode"),B=(0,s.getRequestMeta)(e,"incrementalCache")||await er.getIncrementalCache(e,T,I,K);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let W={params:S,previewProps:I.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,k)},sharedContext:{buildId:x,deploymentId:v}},H=new l.NodeNextRequest(e),Y=new l.NodeNextResponse(t),V=d.NextRequestAdapter.fromNodeNextRequest(H,(0,d.signalFromNodeResponse)(t));try{let s,o=async e=>er.handle(V,W).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=F.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==c.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}`)}),n=async s=>{var i,n;let l=async({previousCacheEntry:a})=>{try{if(!K&&R&&z&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await o(s);e.fetchMetrics=W.renderOpts.fetchMetrics;let n=W.renderOpts.pendingWaitUntil;n&&r.waitUntil&&(r.waitUntil(n),n=void 0);let l=W.renderOpts.collectedTags;if(!P)return await (0,m.sendResponse)(H,Y,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,k),t}},d=await er.handleResponse({req:e,nextConfig:T,cacheKey:D,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:I,isRoutePPREnabled:!1,isOnDemandRevalidate:R,revalidateOnlyGenerated:z,responseGenerator:l,waitUntil:r.waitUntil,isMinimalMode:K});if(!P)return null;if((null==d||null==(i=d.value)?void 0:i.kind)!==y.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(n=d.value)?void 0:n.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});K||t.setHeader("x-nextjs-cache",R?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),C&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let c=(0,p.fromNodeOutgoingHttpHeaders)(d.value.headers);return K&&P||c.delete(f.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||c.get("Cache-Control")||c.set("Cache-Control",(0,h.getCacheControlHeader)(d.cacheControl)),await (0,m.sendResponse)(H,Y,new Response(d.value.body,{headers:c,status:d.value.status||200})),null};L&&_?await n(_):(s=F.getActiveScopeSpan(),await F.withPropagatedContext(e.headers,()=>F.trace(c.BaseServerSpan.handleRequest,{spanName:`${U} ${b}`,kind:i.SpanKind.SERVER,attributes:{"http.method":U,"http.target":e.url}},n),void 0,!L))}catch(t){if(t instanceof g.NoFallbackError||await er.onRequestError(e,t,{routerKind:"App Router",routePath:M,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:R})},!1,k),P)throw t;return await (0,m.sendResponse)(H,Y,new Response(null,{status:500})),null}}e.s(["handler",0,en,"patchFetch",0,function(){return(0,r.patchFetch)({workAsyncStorage:es,workUnitAsyncStorage:ei})},"routeModule",0,er,"serverHooks",0,eo,"workAsyncStorage",0,es,"workUnitAsyncStorage",0,ei],400660)}];
36
37
 
37
38
  //# sourceMappingURL=0598_next_dist_esm_build_templates_app-route_0kbcuk-.js.map
@@ -1,10 +1,10 @@
1
- module.exports=[156683,e=>{"use strict";var t=e.i(239441),a=e.i(449055),i=e.i(391328),s=e.i(6352),r=e.i(746789),n=e.i(423437),o=e.i(178820),d=e.i(569191),l=e.i(576251),c=e.i(199962),u=e.i(547545),p=e.i(664046),m=e.i(235691),g=e.i(298907),h=e.i(110763),w=e.i(193695);e.i(673243);var f=e.i(236167),v=e.i(766576),y=e.i(666680),b=e.i(839554),M=e.i(705252),S=e.i(463857),x=e.i(504740),A=e.i(941486),P=e.i(367165),E=e.i(192441),I=e.i(660526),k=e.i(534404);let T=Promise.resolve();async function R(e){try{let{assetIds:t,serverId:a}=await e.json();if(!t?.length)return v.NextResponse.json({error:"assetIds required"},{status:400});let i=()=>N(e.url,t,a);return a?await (0,E.runWithServer)(a,i):await i()}catch(t){let e=t instanceof Error?t.message:"Failed to trigger processing";return v.NextResponse.json({error:e},{status:500})}}async function N(t,a,i){try{let s=(await (0,b.readMediaAssets)()).filter(e=>a.includes(e.id)),r=(await Promise.all(s.map(e=>(0,b.claimMediaAsset)(e.id)))).filter(e=>!!e),n=new Map,o=new Set(r.map(e=>e.id));if(0===r.length)return v.NextResponse.json({error:s.length?"Media is already processing.":"No matching assets found"},{status:s.length?409:404});let d=async()=>{let e=new Date().toISOString();await Promise.all([...o].map(t=>(0,b.updateMediaAsset)(t,{processingHeartbeatAt:e}).catch(()=>void 0)))},l=setInterval(()=>{let e=()=>d();(i?(0,E.runWithServer)(i,e):e()).catch(()=>{})},6e4),c=async()=>{for(let a of r){let s;o.delete(a.id);let d=a,l=new Set,c=new Map,u=async(e,t)=>{let a=Date.now(),i="completed"===t.status||"skipped"===t.status||"failed"===t.status;if(!(!i&&"running"===t.status&&a-(c.get(e)??0)<600)&&(c.set(e,a),"running"===t.status&&l.add(e),i&&l.delete(e),!await (0,b.updateMediaStage)(d.id,e,t)))throw Error("Media asset was deleted during processing")};try{let a=await (0,b.updateMediaAsset)(d.id,{processingStatus:"processing",processingError:void 0,processingMessage:"Starting process...",processingProgress:2});if(!a)throw Error("Media asset was removed before processing started.");if(d=a,s=setInterval(()=>{(0,b.updateMediaAsset)(d.id,{processingHeartbeatAt:new Date().toISOString()}).catch(()=>{})},6e4),d.storageUri.startsWith("pending://")&&d.originalUrl){await u("download",{status:"running",percent:0,message:"Downloading media from URL..."});let{addMediaAssets:t}=await e.A(742957),a=await (0,x.loadTool)("video-audio");if(!a||!a.importMediaUrl)throw Error("Video & Audio tool not properly installed.");let{promises:i}=await e.A(606714),s=await e.A(311105),l=await e.A(974237),c=await i.mkdtemp(s.join(l.tmpdir(),"larkup-url-media-"));try{let e=await a.importMediaUrl(d.originalUrl,{outputDir:c,playlistMax:10,onProgress:({percent:e,message:t})=>u("download",{status:"running",percent:e,message:t})});if(!e||0===e.length)throw Error("No supported media found at the provided URL.");let l=(0,A.createStorageProvider)(),p=async(e,t,a)=>{let s=await i.stat(e);return{storageUri:l.storeFile?await l.storeFile(t,e,a):await l.store(t,await i.readFile(e),a),fileSize:s.size}},m=e[0],g=m.mimeType||"application/octet-stream",h=s.extname(m.path).slice(1)||"mp4",w=`videos/${Date.now()}_${Math.random().toString(36).slice(2)}.${h}`,f=await p(m.path,w,g);if(d=await (0,b.updateMediaAsset)(d.id,{fileName:m.title||s.basename(m.path),mimeType:g,...f})||d,await u("download",{status:"completed",message:"Download complete."}),m.sourceTranscript?.chunks?.length&&n.set(d.id,m.sourceTranscript),e.length>1){let a=[];for(let t=1;t<e.length;t++){let i=e[t],r=i.mimeType||"application/octet-stream",n=s.extname(i.path).slice(1)||"mp4",o=`videos/${Date.now()}_${Math.random().toString(36).slice(2)}.${n}`,l=await p(i.path,o,r);a.push({type:d.type,fileName:i.title||s.basename(i.path),mimeType:r,...l,originalUrl:i.originalUrl||d.originalUrl})}let i=await t(a),l=(await Promise.all(i.map(e=>(0,b.claimMediaAsset)(e.id)))).filter(e=>!!e);l.forEach(t=>{let a=i.findIndex(e=>e.id===t.id),s=e[a+1]?.sourceTranscript;s?.chunks?.length&&n.set(t.id,s),o.add(t.id)}),r.push(...l)}}finally{await i.rm(c,{recursive:!0,force:!0}).catch(()=>{})}}else await u("download",{status:"skipped",message:"Using uploaded media."});if("image"===d.type)await C(d,t,u,i);else if("video"===d.type||"audio"===d.type){if(!await (0,S.isToolInstalled)("video-audio"))throw Error("Video & Audio tool is not installed. Install it from the Marketplace.");await D(d,t,u,n.get(d.id),i)}else throw Error("Unsupported media type")}catch(t){let e=t instanceof Error?t.message:"Processing failed";await Promise.all([...l].map(t=>(0,b.updateMediaStage)(d.id,t,{status:"failed",message:e}))),await (0,b.updateMediaAsset)(d.id,{processingStatus:"failed",processingError:e,processingMessage:void 0,processingProgress:void 0})}finally{s&&clearInterval(s)}}};return T=T.then(()=>i?(0,E.runWithServer)(i,c):c()).finally(()=>clearInterval(l)).catch(e=>console.error("Media worker failed:",e)),v.NextResponse.json({success:!0,message:"Processing started in background"},{status:202})}catch(t){let e=t instanceof Error?t.message:"Failed to trigger processing";return v.NextResponse.json({error:e},{status:500})}}async function C(e,t,a,i){await z(e);let s=`Image: ${e.fileName}`;await Promise.all([a("extract",{status:"skipped",message:"No extraction needed."}),a("transcribe",{status:"skipped",message:"No audio track."}),a("synthesize",{status:"skipped",message:"Caption is the media note."})]),await a("vision",{status:"running",percent:0,message:`Understanding image: ${e.fileName}`});try{let a=(0,A.createStorageProvider)(),r=(await a.retrieve(e.storageUri)).toString("base64"),n=await fetch(U("/api/describe-image",t,i),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({base64:r})});if(n.ok){let e=await n.json();e.description&&(s=e.description)}}catch(e){console.error("Failed to describe image asset:",e)}await a("vision",{status:"completed",message:"Image understanding complete."});let r=(0,y.randomUUID)(),n=!1;try{if(!await (0,b.updateMediaAsset)(e.id,{pendingDocumentIds:[r]}))throw Error("Media asset was removed before its evidence could be published.");let t=await (0,M.addDocument)({id:r,title:e.fileName,content:s,source:"media",url:`/api/media/${e.id}`,metadata:{mediaAssetId:e.id,mediaType:"image",fileName:e.fileName,mimeType:e.mimeType,fileSize:e.fileSize,dimensions:e.dimensions,images:[{imageUrl:`/api/media/${e.id}`,pageNumber:1,index:0}]}});if(await a("index",{status:"running",percent:0,message:"Building the searchable index..."}),n=!0,await F((e,t,i)=>a("index",{status:"running",current:e,total:t,unit:"chunks",message:i})),await a("index",{status:"completed",message:"Image is searchable."}),!await (0,b.updateMediaAsset)(e.id,{processingStatus:"completed",processingProgress:100,processingMessage:void 0,caption:s,documentIds:[t.id],pendingDocumentIds:[],supersededDocumentIds:e.documentIds}))throw Error("Media asset was removed before indexing completed.");await H(e.documentIds)&&await (0,b.updateMediaAsset)(e.id,{supersededDocumentIds:[]}).catch(e=>console.error("Failed to clear superseded image document IDs:",e))}catch(t){throw await V(e.id,[r],n),t}}async function D(t,a,i,s,r){let n=await (0,x.loadTool)("video-audio");if(!n)throw Error("Failed to load Video & Audio tool");await z(t);let o=(0,A.createStorageProvider)(),{promises:d}=await e.A(606714),l=await e.A(311105),c=await e.A(974237),u=await d.mkdtemp(l.join(c.tmpdir(),"larkup-media-")),p=t.fileName.split(".").pop()||"tmp",m=await o.resolvePath?.(t.storageUri),g=m||l.join(u,`input.${p}`);m||await d.writeFile(g,await o.retrieve(t.storageUri));let h=[],w=!1,f=!1;try{let e,o,l,c,p,m=await (0,S.getInstalledTool)("video-audio"),v=await (0,P.readConfig)(),x=v.toolConfigs?.["video-audio"]||{},A="string"==typeof x.audioProvider?x.audioProvider:"",E="string"==typeof x.audioApiKey?x.audioApiKey:"";if(!A)throw Error("Choose an Audio Provider in Settings → Marketplace Tools → Video & Audio before indexing media.");if("local"!==A&&!E)throw Error("Add the API key for the selected Audio Provider in Settings → Marketplace Tools → Video & Audio.");let T=Math.max(5,Number(m?.config?.frameInterval??30)||30),R="string"==typeof x.audioLanguage?x.audioLanguage:"auto",N="auto"===R.trim().toLowerCase()&&s?.language?s.language:R,C=`/api/media/${t.id}`,D=(e=I.default.cpus().length,o=I.default.freemem()/0x40000000,l=Math.max(1,Math.floor(.5*e)),c=Math.max(3,Math.min(10,Math.floor(1.5*e))),p=Math.max(10,Math.min(50,Math.floor(10*o))),{cpus:e,freeMemGB:o,ffmpegThreads:l,canParallelizeFfmpeg:e>=4,apiConcurrency:c,dbBatchSize:p});if("video"===t.type&&n.processVideo){let e,o=s?.origin?.kind,l=!!s?.chunks?.length&&"youtube-auto"!==o;await i("extract",{status:"running",percent:0,message:`Extracting adaptive frames and audio (${D.ffmpegThreads} FFmpeg threads)...`});let c=await n.processVideo(g,{outputDir:u,frameIntervalSecs:T,maxFrames:600,threads:D.ffmpegThreads,parallelExtraction:D.canParallelizeFfmpeg,skipAudioExtraction:l,onProgress:e=>{i("extract",{status:"running",percent:Math.round(100*Math.max(0,Math.min(1,e))),message:`Extracting adaptive frames and audio (${Math.round(100*e)}%)...`}).catch(()=>{})}});await i("extract",{status:"completed",current:c.frames.length,total:c.frames.length,unit:"frames",message:`Extracted ${c.frames.length} adaptive frames and the audio track.`});let p=Promise.resolve(l?s:null);l?await i("transcribe",{status:"completed",current:s?.chunks.length,total:s?.chunks.length,unit:"caption sections",message:"Using timestamped manual source captions."}):c.audioPath&&n.processAudio?p=(async()=>{await i("transcribe",{status:"running",percent:0,message:`Transcribing with ${_(A)}...`});try{let e=await n.processAudio(c.audioPath,{provider:A,apiKey:E,language:N,context:t.fileName,onProgress:(e,t,a,s)=>{i("transcribe",{status:"running",current:e,total:t,unit:s||"audio parts",message:a||`Transcribing part ${Math.min(e,t)} of ${t} with ${_(A)}...`}).catch(()=>{})}});return await i("transcribe",{status:"completed",message:`Transcription complete with ${_(A)} (${e.chunks?.length??0} timestamped sections).`}),e}catch(e){if("youtube-auto"===o&&s?.chunks?.length)return console.warn(`Configured ${_(A)} transcription failed; using YouTube automatic captions as fallback.`,e),await i("transcribe",{status:"completed",message:`Provider transcription failed; using ${s.chunks.length} YouTube automatic-caption sections as fallback.`}),s;throw e}})():s?.chunks?.length?(await i("transcribe",{status:"completed",current:s.chunks.length,total:s.chunks.length,unit:"caption sections",message:"Using source captions because the video has no extractable audio track."}),p=Promise.resolve(s)):await i("transcribe",{status:"skipped",message:"No audio track or source captions were available."});let m=(async()=>{let e=c.frames,s=$(c.meta.durationSecs),n=function(e,t){let a=[];for(let i of e){let e=a.at(-1);!e||e.length>=6||i.timestampSecs-e[0].timestampSecs>=t?a.push([i]):e.push(i)}return a}(e,s);if(0===n.length)return await i("vision",{status:"skipped",message:"No readable video frames were extracted."}),[];await i("vision",{status:"running",current:0,total:n.length,unit:"sequences",message:`Understanding 0 of ${n.length} visual sequences...`});let o=0,l=await O(n,D.apiConcurrency,async e=>{let s=await Promise.all(e.map(async e=>(await d.readFile(e.path)).toString("base64"))),l=e[0].timestampSecs,u=Math.min(c.meta.durationSecs,Math.max(l+1,e.at(-1).timestampSecs+T)),p=e.map(e=>(0,k.formatTime)(e.timestampSecs)).join(", "),m=await K(U("/api/describe-image",a,r),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({base64Images:s,prompt:`These are chronological frames from "${t.fileName}" at ${p}.
1
+ module.exports=[156683,e=>{"use strict";var t=e.i(239441),a=e.i(449055),i=e.i(391328),s=e.i(6352),r=e.i(746789),n=e.i(423437),o=e.i(178820),d=e.i(569191),l=e.i(576251),c=e.i(199962),u=e.i(547545),p=e.i(664046),m=e.i(235691),g=e.i(298907),h=e.i(110763),w=e.i(193695);e.i(673243);var f=e.i(236167),v=e.i(766576),y=e.i(666680),b=e.i(839554),M=e.i(705252),S=e.i(463857),x=e.i(504740),A=e.i(941486),P=e.i(367165),E=e.i(192441),I=e.i(660526),T=e.i(534404);let k=Promise.resolve();async function R(e){try{let{assetIds:t,serverId:a,action:i,assetId:s}=await e.json();if(i&&s){let e=async()=>{let e=await (0,b.updateMediaAsset)(s,{processingPaused:"pause"===i,processingMessage:"pause"===i?"Paused — resume when you are ready.":"Resuming media indexing..."});return e?v.NextResponse.json({asset:e}):v.NextResponse.json({error:"Media asset not found."},{status:404})};return a?await (0,E.runWithServer)(a,e):await e()}if(!t?.length)return v.NextResponse.json({error:"assetIds required"},{status:400});let r=()=>N(e.url,t,a);return a?await (0,E.runWithServer)(a,r):await r()}catch(t){let e=t instanceof Error?t.message:"Failed to trigger processing";return v.NextResponse.json({error:e},{status:500})}}async function N(t,a,i){try{let s=(await (0,b.readMediaAssets)()).filter(e=>a.includes(e.id)),r=(await Promise.all(s.map(e=>(0,b.claimMediaAsset)(e.id)))).filter(e=>!!e),n=new Map,o=new Set(r.map(e=>e.id));if(0===r.length)return v.NextResponse.json({error:s.length?"Media is already processing.":"No matching assets found"},{status:s.length?409:404});let d=async()=>{let e=new Date().toISOString();await Promise.all([...o].map(t=>(0,b.updateMediaAsset)(t,{processingHeartbeatAt:e}).catch(()=>void 0)))},l=setInterval(()=>{let e=()=>d();(i?(0,E.runWithServer)(i,e):e()).catch(()=>{})},6e4),c=async()=>{for(let a of r){let s;o.delete(a.id);let d=a,l=new Set,c=new Map,u=async()=>{for(;;){let e=(await (0,b.readMediaAssets)()).find(e=>e.id===d.id);if(!e)throw Error("Media asset was deleted during processing");if(!e.processingPaused){d=e;return}await (0,b.updateMediaAsset)(d.id,{processingHeartbeatAt:new Date().toISOString(),processingMessage:"Paused — resume when you are ready."}),await new Promise(e=>setTimeout(e,750))}},p=async(e,t)=>{await u();let a=Date.now(),i="completed"===t.status||"skipped"===t.status||"failed"===t.status;if(!(!i&&"running"===t.status&&a-(c.get(e)??0)<600)&&(c.set(e,a),"running"===t.status&&l.add(e),i&&l.delete(e),!await (0,b.updateMediaStage)(d.id,e,t)))throw Error("Media asset was deleted during processing")};try{await u();let a=await (0,b.updateMediaAsset)(d.id,{processingStatus:"processing",processingError:void 0,processingMessage:"Starting process...",processingProgress:2});if(!a)throw Error("Media asset was removed before processing started.");if(d=a,s=setInterval(()=>{(0,b.updateMediaAsset)(d.id,{processingHeartbeatAt:new Date().toISOString()}).catch(()=>{})},6e4),d.storageUri.startsWith("pending://")&&d.originalUrl){await p("download",{status:"running",percent:0,message:"Downloading media from URL..."});let{addMediaAssets:t}=await e.A(742957),a=await (0,x.loadTool)("video-audio");if(!a||!a.importMediaUrl)throw Error("Video & Audio tool not properly installed.");let{promises:i}=await e.A(606714),s=await e.A(311105),l=await e.A(974237),c=await i.mkdtemp(s.join(l.tmpdir(),"larkup-url-media-"));try{let e=await a.importMediaUrl(d.originalUrl,{outputDir:c,playlistMax:10,onProgress:({percent:e,message:t})=>p("download",{status:"running",percent:e,message:t})});if(!e||0===e.length)throw Error("No supported media found at the provided URL.");let l=(0,A.createStorageProvider)(),u=async(e,t,a)=>{let s=await i.stat(e);return{storageUri:l.storeFile?await l.storeFile(t,e,a):await l.store(t,await i.readFile(e),a),fileSize:s.size}},m=e[0],g=m.mimeType||"application/octet-stream",h=s.extname(m.path).slice(1)||"mp4",w=`videos/${Date.now()}_${Math.random().toString(36).slice(2)}.${h}`,f=await u(m.path,w,g);if(d=await (0,b.updateMediaAsset)(d.id,{fileName:m.title||s.basename(m.path),mimeType:g,...f})||d,await p("download",{status:"completed",message:"Download complete."}),m.sourceTranscript?.chunks?.length&&n.set(d.id,m.sourceTranscript),e.length>1){let a=[];for(let t=1;t<e.length;t++){let i=e[t],r=i.mimeType||"application/octet-stream",n=s.extname(i.path).slice(1)||"mp4",o=`videos/${Date.now()}_${Math.random().toString(36).slice(2)}.${n}`,l=await u(i.path,o,r);a.push({type:d.type,fileName:i.title||s.basename(i.path),mimeType:r,...l,originalUrl:i.originalUrl||d.originalUrl})}let i=await t(a),l=(await Promise.all(i.map(e=>(0,b.claimMediaAsset)(e.id)))).filter(e=>!!e);l.forEach(t=>{let a=i.findIndex(e=>e.id===t.id),s=e[a+1]?.sourceTranscript;s?.chunks?.length&&n.set(t.id,s),o.add(t.id)}),r.push(...l)}}finally{await i.rm(c,{recursive:!0,force:!0}).catch(()=>{})}}else await p("download",{status:"skipped",message:"Using uploaded media."});if("image"===d.type)await C(d,t,p,i);else if("video"===d.type||"audio"===d.type){if(!await (0,S.isToolInstalled)("video-audio"))throw Error("Video & Audio tool is not installed. Install it from the Marketplace.");await D(d,t,p,n.get(d.id),i)}else throw Error("Unsupported media type")}catch(t){let e=t instanceof Error?t.message:"Processing failed";await Promise.all([...l].map(t=>(0,b.updateMediaStage)(d.id,t,{status:"failed",message:e}))),await (0,b.updateMediaAsset)(d.id,{processingStatus:"failed",processingError:e,processingMessage:void 0,processingProgress:void 0})}finally{s&&clearInterval(s)}}};return k=k.then(()=>i?(0,E.runWithServer)(i,c):c()).finally(()=>clearInterval(l)).catch(e=>console.error("Media worker failed:",e)),v.NextResponse.json({success:!0,message:"Processing started in background"},{status:202})}catch(t){let e=t instanceof Error?t.message:"Failed to trigger processing";return v.NextResponse.json({error:e},{status:500})}}async function C(e,t,a,i){await z(e);let s=`Image: ${e.fileName}`;await Promise.all([a("extract",{status:"skipped",message:"No extraction needed."}),a("transcribe",{status:"skipped",message:"No audio track."}),a("synthesize",{status:"skipped",message:"Caption is the media note."})]),await a("vision",{status:"running",percent:0,message:`Understanding image: ${e.fileName}`});try{let a=(0,A.createStorageProvider)(),r=(await a.retrieve(e.storageUri)).toString("base64"),n=await fetch(U("/api/describe-image",t,i),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({base64:r})});if(n.ok){let e=await n.json();e.description&&(s=e.description)}}catch(e){console.error("Failed to describe image asset:",e)}await a("vision",{status:"completed",message:"Image understanding complete."});let r=(0,y.randomUUID)(),n=!1;try{if(!await (0,b.updateMediaAsset)(e.id,{pendingDocumentIds:[r]}))throw Error("Media asset was removed before its evidence could be published.");let t=await (0,M.addDocument)({id:r,title:e.fileName,content:s,source:"media",url:`/api/media/${e.id}`,metadata:{mediaAssetId:e.id,mediaType:"image",fileName:e.fileName,mimeType:e.mimeType,fileSize:e.fileSize,dimensions:e.dimensions,images:[{imageUrl:`/api/media/${e.id}`,pageNumber:1,index:0}]}});if(await a("index",{status:"running",percent:0,message:"Building the searchable index..."}),n=!0,await F((e,t,i)=>a("index",{status:"running",current:e,total:t,unit:"chunks",message:i})),await a("index",{status:"completed",message:"Image is searchable."}),!await (0,b.updateMediaAsset)(e.id,{processingStatus:"completed",processingProgress:100,processingMessage:void 0,caption:s,documentIds:[t.id],pendingDocumentIds:[],supersededDocumentIds:e.documentIds}))throw Error("Media asset was removed before indexing completed.");await H(e.documentIds)&&await (0,b.updateMediaAsset)(e.id,{supersededDocumentIds:[]}).catch(e=>console.error("Failed to clear superseded image document IDs:",e))}catch(t){throw await V(e.id,[r],n),t}}async function D(t,a,i,s,r){let n=await (0,x.loadTool)("video-audio");if(!n)throw Error("Failed to load Video & Audio tool");await z(t);let o=(0,A.createStorageProvider)(),{promises:d}=await e.A(606714),l=await e.A(311105),c=await e.A(974237),u=await d.mkdtemp(l.join(c.tmpdir(),"larkup-media-")),p=t.fileName.split(".").pop()||"tmp",m=await o.resolvePath?.(t.storageUri),g=m||l.join(u,`input.${p}`);m||await d.writeFile(g,await o.retrieve(t.storageUri));let h=[],w=!1,f=!1;try{let e,o,l,c,p,m=await (0,S.getInstalledTool)("video-audio"),v=await (0,P.readConfig)(),x=v.toolConfigs?.["video-audio"]||{},A="string"==typeof x.audioProvider?x.audioProvider:"",E="string"==typeof x.audioApiKey?x.audioApiKey:"";if(!A)throw Error("Choose an Audio Provider in Settings → Marketplace Tools → Video & Audio before indexing media.");if("local"!==A&&!E)throw Error("Add the API key for the selected Audio Provider in Settings → Marketplace Tools → Video & Audio.");let k=Math.max(5,Number(m?.config?.frameInterval??30)||30),R="string"==typeof x.audioLanguage?x.audioLanguage:"auto",N="auto"===R.trim().toLowerCase()&&s?.language?s.language:R,C=`/api/media/${t.id}`,D=(e=I.default.cpus().length,o=I.default.freemem()/0x40000000,l=Math.max(1,Math.floor(.5*e)),c=Math.max(3,Math.min(10,Math.floor(1.5*e))),p=Math.max(10,Math.min(50,Math.floor(10*o))),{cpus:e,freeMemGB:o,ffmpegThreads:l,canParallelizeFfmpeg:e>=4,apiConcurrency:c,dbBatchSize:p});if("video"===t.type&&n.processVideo){let e,o=s?.origin?.kind,l=!!s?.chunks?.length&&"youtube-auto"!==o;await i("extract",{status:"running",percent:0,message:`Extracting adaptive frames and audio (${D.ffmpegThreads} FFmpeg threads)...`});let c=await n.processVideo(g,{outputDir:u,frameIntervalSecs:k,maxFrames:600,threads:D.ffmpegThreads,parallelExtraction:D.canParallelizeFfmpeg,skipAudioExtraction:l,onProgress:e=>{i("extract",{status:"running",percent:Math.round(100*Math.max(0,Math.min(1,e))),message:`Extracting adaptive frames and audio (${Math.round(100*e)}%)...`}).catch(()=>{})}});await i("extract",{status:"completed",current:c.frames.length,total:c.frames.length,unit:"frames",message:`Extracted ${c.frames.length} adaptive frames and the audio track.`});let p=Promise.resolve(l?s:null);l?await i("transcribe",{status:"completed",current:s?.chunks.length,total:s?.chunks.length,unit:"caption sections",message:"Using timestamped manual source captions."}):c.audioPath&&n.processAudio?p=(async()=>{await i("transcribe",{status:"running",percent:0,message:`Transcribing with ${j(A)}...`});try{let e=await n.processAudio(c.audioPath,{provider:A,apiKey:E,language:N,context:t.fileName,onProgress:(e,t,a,s)=>{i("transcribe",{status:"running",current:e,total:t,unit:s||"audio parts",message:a||`Transcribing part ${Math.min(e,t)} of ${t} with ${j(A)}...`}).catch(()=>{})}});return await i("transcribe",{status:"completed",message:`Transcription complete with ${j(A)} (${e.chunks?.length??0} timestamped sections).`}),e}catch(e){if("youtube-auto"===o&&s?.chunks?.length)return console.warn(`Configured ${j(A)} transcription failed; using YouTube automatic captions as fallback.`,e),await i("transcribe",{status:"completed",message:`Provider transcription failed; using ${s.chunks.length} YouTube automatic-caption sections as fallback.`}),s;throw e}})():s?.chunks?.length?(await i("transcribe",{status:"completed",current:s.chunks.length,total:s.chunks.length,unit:"caption sections",message:"Using source captions because the video has no extractable audio track."}),p=Promise.resolve(s)):await i("transcribe",{status:"skipped",message:"No audio track or source captions were available."});let m=(async()=>{let e=c.frames,s=$(c.meta.durationSecs),n=function(e,t){let a=[];for(let i of e){let e=a.at(-1);!e||e.length>=6||i.timestampSecs-e[0].timestampSecs>=t?a.push([i]):e.push(i)}return a}(e,s);if(0===n.length)return await i("vision",{status:"skipped",message:"No readable video frames were extracted."}),[];await i("vision",{status:"running",current:0,total:n.length,unit:"sequences",message:`Understanding 0 of ${n.length} visual sequences...`});let o=0,l=await O(n,D.apiConcurrency,async e=>{let s=await Promise.all(e.map(async e=>(await d.readFile(e.path)).toString("base64"))),l=e[0].timestampSecs,u=Math.min(c.meta.durationSecs,Math.max(l+1,e.at(-1).timestampSecs+k)),p=e.map(e=>(0,T.formatTime)(e.timestampSecs)).join(", "),m=await K(U("/api/describe-image",a,r),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({base64Images:s,prompt:`These are chronological frames from "${t.fileName}" at ${p}.
2
2
  Write one evidence note for this time range. Track people, actions, interactions, state changes,
3
3
  important objects, and exact meaningful on-screen text. Perform careful OCR, including Arabic and
4
4
  other right-to-left text without reversing labels. For scoreboards or result animations, compare
5
5
  frames in timestamp order and report the latest visible score as the current/final state; associate
6
6
  each number with the correct nearby team/person label. Record a winner or result only when visually
7
7
  supported. Omit boilerplate about facts that are not shown. Be factual, information-dense, and
8
- concise.`})});o++;let g=Math.max(1,Math.ceil(n.length/100));if((o%g==0||o===n.length)&&i("vision",{status:"running",current:o,total:n.length,unit:"sequences",message:`Understanding visual sequence ${o} of ${n.length}...`}).catch(()=>{}),!m.ok){let e="";try{let t=await m.json();e=t.error?.trim()||""}catch{}throw Error(`Visual sequence analysis failed (${m.status})${e?`: ${e}`:"."}`)}let{description:h}=await m.json();return h?{text:h,startSecs:l,endSecs:Math.max(l+1,u)}:null});return await i("vision",{status:"completed",current:n.length,total:n.length,unit:"sequences",message:`Understood ${n.length} visual sequences with OCR.`}),l})(),[S,x]=await Promise.all([p,m]),P=x.filter(e=>null!==e),I=n.buildMultimodalSegments(S?.chunks??[],P,c.meta.durationSecs,$(c.meta.durationSecs));if(0===I.length)throw Error("No searchable speech or visual evidence was produced from this video.");await i("synthesize",{status:"running",percent:0,message:"Creating human-style notes across the complete video..."});try{e=await (0,k.createMediaKnowledgeSummary)({title:t.fileName,mediaType:"video",durationSecs:c.meta.durationSecs,segments:I,config:v,onProgress:(e,t,a)=>i("synthesize",{status:"running",current:e,total:t,unit:"note passes",message:a})}),await i("synthesize",{status:"completed",message:"Connected the complete timeline into searchable notes."})}catch(a){console.error("Video evidence synthesis failed; preserving timestamped evidence:",a),e=(0,k.createFallbackMediaSummary)(t.fileName,"video",I),await i("synthesize",{status:"completed",message:"Saved timeline notes; the optional consolidation pass was unavailable."})}let R=S?.origin?.kind||"provider-stt",q=(0,k.buildMediaDocumentInputs)({assetId:t.id,title:t.fileName,mediaType:"video",localUrl:C,originalUrl:t.originalUrl,durationSecs:c.meta.durationSecs,summary:e,segments:I,fileName:t.fileName,mimeType:t.mimeType,transcriptSource:R,transcriptProvider:S?.origin?.provider||A,transcriptLanguage:S?.language}).map(e=>({...e,id:(0,y.randomUUID)()}));if(h.push(...q.map(e=>e.id)),!await (0,b.updateMediaAsset)(t.id,{pendingDocumentIds:h}))throw Error("Media asset was removed before its evidence could be published.");let j=await (0,M.addDocuments)(q);if(await i("index",{status:"running",percent:0,message:`Indexing ${j.length} media documents...`}),f=!0,await F((e,t,a)=>i("index",{status:"running",current:e,total:t,unit:"chunks",message:a}),A),await i("index",{status:"completed",message:"Video timeline and notes are searchable."}),!await (0,b.updateMediaAsset)(t.id,{processingStatus:"completed",caption:e.slice(0,600),durationSecs:c.meta.durationSecs,dimensions:{width:c.meta.width,height:c.meta.height},documentIds:h,pendingDocumentIds:[],supersededDocumentIds:t.documentIds,processingProgress:100,processingMessage:void 0}))throw Error("Media asset was removed before indexing completed.");w=!0,await H(t.documentIds)&&await (0,b.updateMediaAsset)(t.id,{supersededDocumentIds:[]}).catch(e=>console.error("Failed to clear superseded video document IDs:",e)),await B("video",c.meta.durationSecs,c.frames.length,A)}else if("audio"===t.type&&n.processAudio){let e;await Promise.all([i("extract",{status:"skipped",message:"No video frames to extract."}),i("vision",{status:"skipped",message:"Audio-only media."})]),await i("transcribe",{status:"running",percent:0,message:`Transcribing with ${_(A)}...`});let a=await n.processAudio(g,{provider:A,apiKey:E,language:N,context:t.fileName,onProgress:(e,t,a,s)=>i("transcribe",{status:"running",current:e,total:t,unit:s||"audio parts",message:a||`Transcribing audio part ${Math.min(e,t)} of ${t}...`})});await i("transcribe",{status:"completed",message:`Transcription complete with ${_(A)} (${a.chunks.length} timestamped sections).`});let s=n.buildMultimodalSegments(a.chunks,[],a.durationSecs,60);if(0===s.length)throw Error("The transcription completed without searchable speech.");await i("synthesize",{status:"running",percent:0,message:"Creating human-style notes across the complete recording..."});try{e=await (0,k.createMediaKnowledgeSummary)({title:t.fileName,mediaType:"audio",durationSecs:a.durationSecs,segments:s,config:v,onProgress:(e,t,a)=>i("synthesize",{status:"running",current:e,total:t,unit:"note passes",message:a})}),await i("synthesize",{status:"completed",message:"Connected the complete transcript into searchable notes."})}catch(a){console.error("Audio evidence synthesis failed; preserving timestamped evidence:",a),e=(0,k.createFallbackMediaSummary)(t.fileName,"audio",s),await i("synthesize",{status:"completed",message:"Saved timeline notes; the optional consolidation pass was unavailable."})}let r=(0,k.buildMediaDocumentInputs)({assetId:t.id,title:t.fileName,mediaType:"audio",localUrl:C,originalUrl:t.originalUrl,durationSecs:a.durationSecs,summary:e,segments:s,fileName:t.fileName,mimeType:t.mimeType,transcriptSource:a?.origin?.kind||"provider-stt",transcriptProvider:a?.origin?.provider||A,transcriptLanguage:a.language}).map(e=>({...e,id:(0,y.randomUUID)()}));if(h.push(...r.map(e=>e.id)),!await (0,b.updateMediaAsset)(t.id,{pendingDocumentIds:h}))throw Error("Media asset was removed before its evidence could be published.");let o=await (0,M.addDocuments)(r);if(await i("index",{status:"running",percent:0,message:`Indexing ${o.length} media documents...`}),f=!0,await F((e,t,a)=>i("index",{status:"running",current:e,total:t,unit:"chunks",message:a}),A),await i("index",{status:"completed",message:"Audio transcript and notes are searchable."}),!await (0,b.updateMediaAsset)(t.id,{processingStatus:"completed",caption:e.slice(0,600),durationSecs:a.durationSecs,documentIds:h,pendingDocumentIds:[],supersededDocumentIds:t.documentIds,processingProgress:100,processingMessage:void 0}))throw Error("Media asset was removed before indexing completed.");w=!0,await H(t.documentIds)&&await (0,b.updateMediaAsset)(t.id,{supersededDocumentIds:[]}).catch(e=>console.error("Failed to clear superseded audio document IDs:",e)),await B("audio",a.durationSecs,0,A)}}catch(e){throw w||await V(t.id,h,f),e}finally{await d.rm(u,{recursive:!0,force:!0}).catch(()=>{})}}function $(e){return e>=14400?900:e>3600?300:60}function U(e,t,a){let i=new URL(e,t);return a&&i.searchParams.set("serverId",a),i.toString()}async function O(e,t,a){let i=Array(e.length),s=0;return await Promise.all(Array.from({length:Math.min(t,e.length)},async()=>{for(;s<e.length;){let t=s++;i[t]=await a(e[t],t)}})),i}let q=Promise.resolve();function F(t,a){let i=q.then(async()=>{let i,{readDocuments:s}=await e.A(358617),{createRun:r,runIndexer:n}=await e.A(147730),{isRunning:o,readRun:d}=await e.A(297078);for(;await o();)await t?.(0,0,"Waiting for the active search-index job..."),await new Promise(e=>setTimeout(e,1e3));if(!(await s()).some(e=>"indexed"!==e.status))return void await t?.(1,1,"Media is already searchable.");let l=await (0,P.readConfig)(),c=await d();for(;!i;)try{i=await r(l)}catch(e){if(!(e instanceof Error)||!e.message.includes("already in progress"))throw e;await t?.(0,0,"Waiting for the active search-index job..."),await new Promise(e=>setTimeout(e,1e3))}await t?.(0,0,`Building the searchable index with ${l.embeddingModelId||l.embeddingProvider}...`);let u=!1,p=n(i.id,l,c?.status==="completed"?c:null).finally(()=>{u=!0});for(;!u;){let e=await d();if(e?.id===i.id){let a=e.totalChunks??0,i=e.processedChunks??0,s="chunking"===e.status?"Preparing searchable chunks":"upserting"===e.status?"Saving vectors":"Embedding media evidence";await t?.(i,a,a>0?`${s}: ${i} of ${a} chunks...`:`${s}...`)}await Promise.race([p,new Promise(e=>setTimeout(e,750))])}await p;let m=await d();if(m?.id!==i.id||"completed"!==m.status){var g,h,w;let e;throw g=m?.error||"Search indexing did not complete.",h=l,w=a,e=h.embeddingModelId||h.embeddingProvider||"your embedding model",/quota|billing|insufficient_quota/i.test(g)?Error(`Transcription used ${_(w||"the selected audio provider")}. Semantic search then tried ${e}, which has no available quota. Update the Embedding Model and API key in Settings → Models, then retry.`):Error(g)}await t?.(m.processedChunks,m.totalChunks,`Media is searchable (${m.processedChunks} chunks).`)});return q=i.catch(()=>{}),i}function _(e){return"deepgram"===e?"Deepgram":e.replace(/_/g," ")}async function j(e){if(0===e.length)return;let t=await (0,P.readConfig)(),a=await L(t);await a.deleteByDocumentIds(e)}async function H(e){if(0===e.length)return!0;try{return await j(e),await (0,M.deleteDocuments)(e),!0}catch(e){return console.error("Failed to remove tracked media documents:",e),!1}}async function z(e){let t=[...new Set([...e.pendingDocumentIds??[],...e.supersededDocumentIds??[]])];if(0!==t.length){if(!await H(t))throw Error("A previous media-index generation still needs cleanup. Restore the vector-store connection and retry.");await (0,b.updateMediaAsset)(e.id,{pendingDocumentIds:[],supersededDocumentIds:[]})}}async function V(e,t,a){if(0!==t.length){if(!a){await (0,M.deleteDocuments)(t).catch(e=>console.error("Failed to remove unpublished media documents:",e)),await (0,b.updateMediaAsset)(e,{pendingDocumentIds:[]}).catch(()=>{});return}await H(t)?await (0,b.updateMediaAsset)(e,{pendingDocumentIds:[]}).catch(()=>{}):await (0,b.updateMediaAsset)(e,{pendingDocumentIds:t}).catch(()=>{})}}async function L(t){let{createAdapter:a}=await e.A(473286);return a(t)}async function K(e,t,a=9e4){let i,s;for(let r=0;r<4;r++){let n=new AbortController,o=setTimeout(()=>n.abort(),a);try{if(i=await fetch(e,{...t,signal:n.signal}),clearTimeout(o),i.ok||429!==i.status&&i.status<500)return i;let a=i.headers.get("retry-after"),s=a?Number(a):NaN;await i.body?.cancel().catch(()=>{}),await new Promise(e=>setTimeout(e,Number.isFinite(s)?1e3*s:(r+1)*1500))}catch(e){clearTimeout(o),s=e,await new Promise(e=>setTimeout(e,(r+1)*1500))}}if(i)return i;throw s instanceof Error?s:Error("Visual sequence request failed.")}async function B(t,a,i,s){let{trackUsageEvent:r}=await e.A(313282);r({type:"media_processing",mediaType:t,modelId:"local"===s?"local-whisper":s,durationSecs:a,frameCount:i,estimatedCost:"local"!==s?a/60*.006:0,timestamp:new Date().toISOString()})}e.s(["POST",0,R,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],333917);var W=e.i(333917);let G=new t.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/media/process/route",pathname:"/api/media/process",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/media/process/route.ts",nextConfigOutput:"standalone",userland:W,...{}}),{workAsyncStorage:X,workUnitAsyncStorage:J,serverHooks:Y}=G;async function Z(e,t,i){i.requestMeta&&(0,s.setRequestMeta)(e,i.requestMeta),G.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/media/process/route";v=v.replace(/\/index$/,"")||"/";let y=await G.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!y)return t.statusCode=400,t.end("Bad Request"),null==i.waitUntil||i.waitUntil.call(i,Promise.resolve()),null;let{buildId:b,deploymentId:M,params:S,nextConfig:x,parsedUrl:A,isDraftMode:P,prerenderManifest:E,routerServerContext:I,isOnDemandRevalidate:k,revalidateOnlyGenerated:T,resolvedPathname:R,clientReferenceManifest:N,serverActionsManifest:C}=y,D=(0,o.normalizeAppPath)(v),$=!!(E.dynamicRoutes[D]||E.routes[R]),U=async()=>((null==I?void 0:I.render404)?await I.render404(e,t,A,!1):t.end("This page could not be found"),null);if($&&!P){let e=!!E.routes[R],t=E.dynamicRoutes[D];if(t&&!1===t.fallback&&!e){if(x.adapterPath)return await U();throw new w.NoFallbackError}}let O=null;!$||G.isDev||P||(O="/index"===(O=R)?"/":O);let q=!0===G.isDev||!$,F=$&&!q;C&&N&&(0,n.setManifestsSingleton)({page:v,clientReferenceManifest:N,serverActionsManifest:C});let _=e.method||"GET",j=(0,r.getTracer)(),H=j.getActiveScopeSpan(),z=!!(null==I?void 0:I.isWrappedByNextServer),V=!!(0,s.getRequestMeta)(e,"minimalMode"),L=(0,s.getRequestMeta)(e,"incrementalCache")||await G.getIncrementalCache(e,x,E,V);null==L||L.resetRequestCache(),globalThis.__incrementalCache=L;let K={params:S,previewProps:E.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts},cacheComponents:!!x.cacheComponents,supportsDynamicResponse:q,incrementalCache:L,cacheLifeProfiles:x.cacheLife,waitUntil:i.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,i,s)=>G.onRequestError(e,t,i,s,I)},sharedContext:{buildId:b,deploymentId:M}},B=new d.NodeNextRequest(e),W=new d.NodeNextResponse(t),X=l.NextRequestAdapter.fromNodeNextRequest(B,(0,l.signalFromNodeResponse)(t));try{let s,n=async e=>G.handle(X,K).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=j.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==c.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 i=a.get("next.route");if(i){let t=`${_} ${i}`;e.setAttributes({"next.route":i,"http.route":i,"next.span_name":t}),e.updateName(t),s&&s!==e&&(s.setAttribute("http.route",i),s.updateName(t))}else e.updateName(`${_} ${v}`)}),o=async s=>{var r,o;let d=async({previousCacheEntry:a})=>{try{if(!V&&k&&T&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let r=await n(s);e.fetchMetrics=K.renderOpts.fetchMetrics;let o=K.renderOpts.pendingWaitUntil;o&&i.waitUntil&&(i.waitUntil(o),o=void 0);let d=K.renderOpts.collectedTags;if(!$)return await (0,p.sendResponse)(B,W,r,K.renderOpts.pendingWaitUntil),null;{let e=await r.blob(),t=(0,m.toNodeOutgoingHttpHeaders)(r.headers);d&&(t[h.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,i=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:f.CachedRouteKind.APP_ROUTE,status:r.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:i}}}}catch(t){throw(null==a?void 0:a.isStale)&&await G.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:k})},!1,I),t}},l=await G.handleResponse({req:e,nextConfig:x,cacheKey:O,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:E,isRoutePPREnabled:!1,isOnDemandRevalidate:k,revalidateOnlyGenerated:T,responseGenerator:d,waitUntil:i.waitUntil,isMinimalMode:V});if(!$)return null;if((null==l||null==(r=l.value)?void 0:r.kind)!==f.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(o=l.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});V||t.setHeader("x-nextjs-cache",k?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),P&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let c=(0,m.fromNodeOutgoingHttpHeaders)(l.value.headers);return V&&$||c.delete(h.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||t.getHeader("Cache-Control")||c.get("Cache-Control")||c.set("Cache-Control",(0,g.getCacheControlHeader)(l.cacheControl)),await (0,p.sendResponse)(B,W,new Response(l.value.body,{headers:c,status:l.value.status||200})),null};z&&H?await o(H):(s=j.getActiveScopeSpan(),await j.withPropagatedContext(e.headers,()=>j.trace(c.BaseServerSpan.handleRequest,{spanName:`${_} ${v}`,kind:r.SpanKind.SERVER,attributes:{"http.method":_,"http.target":e.url}},o),void 0,!z))}catch(t){if(t instanceof w.NoFallbackError||await G.onRequestError(e,t,{routerKind:"App Router",routePath:D,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:k})},!1,I),$)throw t;return await (0,p.sendResponse)(B,W,new Response(null,{status:500})),null}}e.s(["handler",0,Z,"patchFetch",0,function(){return(0,i.patchFetch)({workAsyncStorage:X,workUnitAsyncStorage:J})},"routeModule",0,G,"serverHooks",0,Y,"workAsyncStorage",0,X,"workUnitAsyncStorage",0,J],156683)}];
8
+ concise.`})});o++;let g=Math.max(1,Math.ceil(n.length/100));if((o%g==0||o===n.length)&&i("vision",{status:"running",current:o,total:n.length,unit:"sequences",message:`Understanding visual sequence ${o} of ${n.length}...`}).catch(()=>{}),!m.ok){let e="";try{let t=await m.json();e=t.error?.trim()||""}catch{}throw Error(`Visual sequence analysis failed (${m.status})${e?`: ${e}`:"."}`)}let{description:h}=await m.json();return h?{text:h,startSecs:l,endSecs:Math.max(l+1,u)}:null});return await i("vision",{status:"completed",current:n.length,total:n.length,unit:"sequences",message:`Understood ${n.length} visual sequences with OCR.`}),l})(),[S,x]=await Promise.all([p,m]),P=x.filter(e=>null!==e),I=n.buildMultimodalSegments(S?.chunks??[],P,c.meta.durationSecs,$(c.meta.durationSecs));if(0===I.length)throw Error("No searchable speech or visual evidence was produced from this video.");await i("synthesize",{status:"running",percent:0,message:"Creating human-style notes across the complete video..."});try{e=await (0,T.createMediaKnowledgeSummary)({title:t.fileName,mediaType:"video",durationSecs:c.meta.durationSecs,segments:I,config:v,onProgress:(e,t,a)=>i("synthesize",{status:"running",current:e,total:t,unit:"note passes",message:a})}),await i("synthesize",{status:"completed",message:"Connected the complete timeline into searchable notes."})}catch(a){console.error("Video evidence synthesis failed; preserving timestamped evidence:",a),e=(0,T.createFallbackMediaSummary)(t.fileName,"video",I),await i("synthesize",{status:"completed",message:"Saved timeline notes; the optional consolidation pass was unavailable."})}let R=S?.origin?.kind||"provider-stt",q=(0,T.buildMediaDocumentInputs)({assetId:t.id,title:t.fileName,mediaType:"video",localUrl:C,originalUrl:t.originalUrl,durationSecs:c.meta.durationSecs,summary:e,segments:I,fileName:t.fileName,mimeType:t.mimeType,transcriptSource:R,transcriptProvider:S?.origin?.provider||A,transcriptLanguage:S?.language}).map(e=>({...e,id:(0,y.randomUUID)()}));if(h.push(...q.map(e=>e.id)),!await (0,b.updateMediaAsset)(t.id,{pendingDocumentIds:h}))throw Error("Media asset was removed before its evidence could be published.");let _=await (0,M.addDocuments)(q);if(await i("index",{status:"running",percent:0,message:`Indexing ${_.length} media documents...`}),f=!0,await F((e,t,a)=>i("index",{status:"running",current:e,total:t,unit:"chunks",message:a}),A),await i("index",{status:"completed",message:"Video timeline and notes are searchable."}),!await (0,b.updateMediaAsset)(t.id,{processingStatus:"completed",caption:e.slice(0,600),durationSecs:c.meta.durationSecs,dimensions:{width:c.meta.width,height:c.meta.height},documentIds:h,pendingDocumentIds:[],supersededDocumentIds:t.documentIds,processingProgress:100,processingMessage:void 0}))throw Error("Media asset was removed before indexing completed.");w=!0,await H(t.documentIds)&&await (0,b.updateMediaAsset)(t.id,{supersededDocumentIds:[]}).catch(e=>console.error("Failed to clear superseded video document IDs:",e)),await W("video",c.meta.durationSecs,c.frames.length,A)}else if("audio"===t.type&&n.processAudio){let e;await Promise.all([i("extract",{status:"skipped",message:"No video frames to extract."}),i("vision",{status:"skipped",message:"Audio-only media."})]),await i("transcribe",{status:"running",percent:0,message:`Transcribing with ${j(A)}...`});let a=await n.processAudio(g,{provider:A,apiKey:E,language:N,context:t.fileName,onProgress:(e,t,a,s)=>i("transcribe",{status:"running",current:e,total:t,unit:s||"audio parts",message:a||`Transcribing audio part ${Math.min(e,t)} of ${t}...`})});await i("transcribe",{status:"completed",message:`Transcription complete with ${j(A)} (${a.chunks.length} timestamped sections).`});let s=n.buildMultimodalSegments(a.chunks,[],a.durationSecs,60);if(0===s.length)throw Error("The transcription completed without searchable speech.");await i("synthesize",{status:"running",percent:0,message:"Creating human-style notes across the complete recording..."});try{e=await (0,T.createMediaKnowledgeSummary)({title:t.fileName,mediaType:"audio",durationSecs:a.durationSecs,segments:s,config:v,onProgress:(e,t,a)=>i("synthesize",{status:"running",current:e,total:t,unit:"note passes",message:a})}),await i("synthesize",{status:"completed",message:"Connected the complete transcript into searchable notes."})}catch(a){console.error("Audio evidence synthesis failed; preserving timestamped evidence:",a),e=(0,T.createFallbackMediaSummary)(t.fileName,"audio",s),await i("synthesize",{status:"completed",message:"Saved timeline notes; the optional consolidation pass was unavailable."})}let r=(0,T.buildMediaDocumentInputs)({assetId:t.id,title:t.fileName,mediaType:"audio",localUrl:C,originalUrl:t.originalUrl,durationSecs:a.durationSecs,summary:e,segments:s,fileName:t.fileName,mimeType:t.mimeType,transcriptSource:a?.origin?.kind||"provider-stt",transcriptProvider:a?.origin?.provider||A,transcriptLanguage:a.language}).map(e=>({...e,id:(0,y.randomUUID)()}));if(h.push(...r.map(e=>e.id)),!await (0,b.updateMediaAsset)(t.id,{pendingDocumentIds:h}))throw Error("Media asset was removed before its evidence could be published.");let o=await (0,M.addDocuments)(r);if(await i("index",{status:"running",percent:0,message:`Indexing ${o.length} media documents...`}),f=!0,await F((e,t,a)=>i("index",{status:"running",current:e,total:t,unit:"chunks",message:a}),A),await i("index",{status:"completed",message:"Audio transcript and notes are searchable."}),!await (0,b.updateMediaAsset)(t.id,{processingStatus:"completed",caption:e.slice(0,600),durationSecs:a.durationSecs,documentIds:h,pendingDocumentIds:[],supersededDocumentIds:t.documentIds,processingProgress:100,processingMessage:void 0}))throw Error("Media asset was removed before indexing completed.");w=!0,await H(t.documentIds)&&await (0,b.updateMediaAsset)(t.id,{supersededDocumentIds:[]}).catch(e=>console.error("Failed to clear superseded audio document IDs:",e)),await W("audio",a.durationSecs,0,A)}}catch(e){throw w||await V(t.id,h,f),e}finally{await d.rm(u,{recursive:!0,force:!0}).catch(()=>{})}}function $(e){return e>=14400?900:e>3600?300:60}function U(e,t,a){let i=new URL(e,t);return a&&i.searchParams.set("serverId",a),i.toString()}async function O(e,t,a){let i=Array(e.length),s=0;return await Promise.all(Array.from({length:Math.min(t,e.length)},async()=>{for(;s<e.length;){let t=s++;i[t]=await a(e[t],t)}})),i}let q=Promise.resolve();function F(t,a){let i=q.then(async()=>{let i,{readDocuments:s}=await e.A(358617),{createRun:r,runIndexer:n}=await e.A(147730),{isRunning:o,readRun:d}=await e.A(297078);for(;await o();)await t?.(0,0,"Waiting for the active search-index job..."),await new Promise(e=>setTimeout(e,1e3));if(!(await s()).some(e=>"indexed"!==e.status))return void await t?.(1,1,"Media is already searchable.");let l=await (0,P.readConfig)(),c=await d();for(;!i;)try{i=await r(l)}catch(e){if(!(e instanceof Error)||!e.message.includes("already in progress"))throw e;await t?.(0,0,"Waiting for the active search-index job..."),await new Promise(e=>setTimeout(e,1e3))}await t?.(0,0,`Building the searchable index with ${l.embeddingModelId||l.embeddingProvider}...`);let u=!1,p=n(i.id,l,c?.status==="completed"?c:null).finally(()=>{u=!0});for(;!u;){let e=await d();if(e?.id===i.id){let a=e.totalChunks??0,i=e.processedChunks??0,s="chunking"===e.status?"Preparing searchable chunks":"upserting"===e.status?"Saving vectors":"Embedding media evidence";await t?.(i,a,a>0?`${s}: ${i} of ${a} chunks...`:`${s}...`)}await Promise.race([p,new Promise(e=>setTimeout(e,750))])}await p;let m=await d();if(m?.id!==i.id||"completed"!==m.status){var g,h,w;let e;throw g=m?.error||"Search indexing did not complete.",h=l,w=a,e=h.embeddingModelId||h.embeddingProvider||"your embedding model",/quota|billing|insufficient_quota/i.test(g)?Error(`Transcription used ${j(w||"the selected audio provider")}. Semantic search then tried ${e}, which has no available quota. Update the Embedding Model and API key in Settings → Models, then retry.`):Error(g)}await t?.(m.processedChunks,m.totalChunks,`Media is searchable (${m.processedChunks} chunks).`)});return q=i.catch(()=>{}),i}function j(e){return"deepgram"===e?"Deepgram":e.replace(/_/g," ")}async function _(e){if(0===e.length)return;let t=await (0,P.readConfig)(),a=await L(t);await a.deleteByDocumentIds(e)}async function H(e){if(0===e.length)return!0;try{return await _(e),await (0,M.deleteDocuments)(e),!0}catch(e){return console.error("Failed to remove tracked media documents:",e),!1}}async function z(e){let t=[...new Set([...e.pendingDocumentIds??[],...e.supersededDocumentIds??[]])];if(0!==t.length){if(!await H(t))throw Error("A previous media-index generation still needs cleanup. Restore the vector-store connection and retry.");await (0,b.updateMediaAsset)(e.id,{pendingDocumentIds:[],supersededDocumentIds:[]})}}async function V(e,t,a){if(0!==t.length){if(!a){await (0,M.deleteDocuments)(t).catch(e=>console.error("Failed to remove unpublished media documents:",e)),await (0,b.updateMediaAsset)(e,{pendingDocumentIds:[]}).catch(()=>{});return}await H(t)?await (0,b.updateMediaAsset)(e,{pendingDocumentIds:[]}).catch(()=>{}):await (0,b.updateMediaAsset)(e,{pendingDocumentIds:t}).catch(()=>{})}}async function L(t){let{createAdapter:a}=await e.A(473286);return a(t)}async function K(e,t,a=9e4){let i,s;for(let r=0;r<4;r++){let n=new AbortController,o=setTimeout(()=>n.abort(),a);try{if(i=await fetch(e,{...t,signal:n.signal}),clearTimeout(o),i.ok||429!==i.status&&i.status<500)return i;let a=i.headers.get("retry-after"),s=a?Number(a):NaN;await i.body?.cancel().catch(()=>{}),await new Promise(e=>setTimeout(e,Number.isFinite(s)?1e3*s:(r+1)*1500))}catch(e){clearTimeout(o),s=e,await new Promise(e=>setTimeout(e,(r+1)*1500))}}if(i)return i;throw s instanceof Error?s:Error("Visual sequence request failed.")}async function W(t,a,i,s){let{trackUsageEvent:r}=await e.A(313282);r({type:"media_processing",mediaType:t,modelId:"local"===s?"local-whisper":s,durationSecs:a,frameCount:i,estimatedCost:"local"!==s?a/60*.006:0,timestamp:new Date().toISOString()})}e.s(["POST",0,R,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],333917);var B=e.i(333917);let G=new t.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/media/process/route",pathname:"/api/media/process",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/web/app/api/media/process/route.ts",nextConfigOutput:"standalone",userland:B,...{}}),{workAsyncStorage:X,workUnitAsyncStorage:J,serverHooks:Y}=G;async function Z(e,t,i){i.requestMeta&&(0,s.setRequestMeta)(e,i.requestMeta),G.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/media/process/route";v=v.replace(/\/index$/,"")||"/";let y=await G.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!y)return t.statusCode=400,t.end("Bad Request"),null==i.waitUntil||i.waitUntil.call(i,Promise.resolve()),null;let{buildId:b,deploymentId:M,params:S,nextConfig:x,parsedUrl:A,isDraftMode:P,prerenderManifest:E,routerServerContext:I,isOnDemandRevalidate:T,revalidateOnlyGenerated:k,resolvedPathname:R,clientReferenceManifest:N,serverActionsManifest:C}=y,D=(0,o.normalizeAppPath)(v),$=!!(E.dynamicRoutes[D]||E.routes[R]),U=async()=>((null==I?void 0:I.render404)?await I.render404(e,t,A,!1):t.end("This page could not be found"),null);if($&&!P){let e=!!E.routes[R],t=E.dynamicRoutes[D];if(t&&!1===t.fallback&&!e){if(x.adapterPath)return await U();throw new w.NoFallbackError}}let O=null;!$||G.isDev||P||(O="/index"===(O=R)?"/":O);let q=!0===G.isDev||!$,F=$&&!q;C&&N&&(0,n.setManifestsSingleton)({page:v,clientReferenceManifest:N,serverActionsManifest:C});let j=e.method||"GET",_=(0,r.getTracer)(),H=_.getActiveScopeSpan(),z=!!(null==I?void 0:I.isWrappedByNextServer),V=!!(0,s.getRequestMeta)(e,"minimalMode"),L=(0,s.getRequestMeta)(e,"incrementalCache")||await G.getIncrementalCache(e,x,E,V);null==L||L.resetRequestCache(),globalThis.__incrementalCache=L;let K={params:S,previewProps:E.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts},cacheComponents:!!x.cacheComponents,supportsDynamicResponse:q,incrementalCache:L,cacheLifeProfiles:x.cacheLife,waitUntil:i.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,i,s)=>G.onRequestError(e,t,i,s,I)},sharedContext:{buildId:b,deploymentId:M}},W=new d.NodeNextRequest(e),B=new d.NodeNextResponse(t),X=l.NextRequestAdapter.fromNodeNextRequest(W,(0,l.signalFromNodeResponse)(t));try{let s,n=async e=>G.handle(X,K).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")!==c.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 i=a.get("next.route");if(i){let t=`${j} ${i}`;e.setAttributes({"next.route":i,"http.route":i,"next.span_name":t}),e.updateName(t),s&&s!==e&&(s.setAttribute("http.route",i),s.updateName(t))}else e.updateName(`${j} ${v}`)}),o=async s=>{var r,o;let d=async({previousCacheEntry:a})=>{try{if(!V&&T&&k&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let r=await n(s);e.fetchMetrics=K.renderOpts.fetchMetrics;let o=K.renderOpts.pendingWaitUntil;o&&i.waitUntil&&(i.waitUntil(o),o=void 0);let d=K.renderOpts.collectedTags;if(!$)return await (0,p.sendResponse)(W,B,r,K.renderOpts.pendingWaitUntil),null;{let e=await r.blob(),t=(0,m.toNodeOutgoingHttpHeaders)(r.headers);d&&(t[h.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,i=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:f.CachedRouteKind.APP_ROUTE,status:r.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:i}}}}catch(t){throw(null==a?void 0:a.isStale)&&await G.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:T})},!1,I),t}},l=await G.handleResponse({req:e,nextConfig:x,cacheKey:O,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:E,isRoutePPREnabled:!1,isOnDemandRevalidate:T,revalidateOnlyGenerated:k,responseGenerator:d,waitUntil:i.waitUntil,isMinimalMode:V});if(!$)return null;if((null==l||null==(r=l.value)?void 0:r.kind)!==f.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(o=l.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});V||t.setHeader("x-nextjs-cache",T?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),P&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let c=(0,m.fromNodeOutgoingHttpHeaders)(l.value.headers);return V&&$||c.delete(h.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||t.getHeader("Cache-Control")||c.get("Cache-Control")||c.set("Cache-Control",(0,g.getCacheControlHeader)(l.cacheControl)),await (0,p.sendResponse)(W,B,new Response(l.value.body,{headers:c,status:l.value.status||200})),null};z&&H?await o(H):(s=_.getActiveScopeSpan(),await _.withPropagatedContext(e.headers,()=>_.trace(c.BaseServerSpan.handleRequest,{spanName:`${j} ${v}`,kind:r.SpanKind.SERVER,attributes:{"http.method":j,"http.target":e.url}},o),void 0,!z))}catch(t){if(t instanceof w.NoFallbackError||await G.onRequestError(e,t,{routerKind:"App Router",routePath:D,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:T})},!1,I),$)throw t;return await (0,p.sendResponse)(W,B,new Response(null,{status:500})),null}}e.s(["handler",0,Z,"patchFetch",0,function(){return(0,i.patchFetch)({workAsyncStorage:X,workUnitAsyncStorage:J})},"routeModule",0,G,"serverHooks",0,Y,"workAsyncStorage",0,X,"workUnitAsyncStorage",0,J],156683)}];
9
9
 
10
10
  //# sourceMappingURL=0598_next_dist_esm_build_templates_app-route_0sbf4ny.js.map