larkup 0.1.40 → 0.1.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/diagnostics/route-bundle-stats.json +21 -21
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/required-server-files.js +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +18 -18
- package/.next/server/app/_not-found.segments/_full.segment.rsc +18 -18
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +12 -12
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/analytics/page_client-reference-manifest.js +1 -1
- package/.next/server/app/analytics.html +1 -1
- package/.next/server/app/analytics.rsc +19 -19
- package/.next/server/app/analytics.segments/_full.segment.rsc +19 -19
- package/.next/server/app/analytics.segments/_head.segment.rsc +4 -4
- package/.next/server/app/analytics.segments/_index.segment.rsc +12 -12
- package/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/analytics.segments/analytics/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/analytics.segments/analytics.segment.rsc +3 -3
- package/.next/server/app/api/analytics/route.js.nft.json +1 -1
- package/.next/server/app/api/chat/route.js +1 -1
- package/.next/server/app/api/chat/route.js.nft.json +1 -1
- package/.next/server/app/api/chat/status/route.js.nft.json +1 -1
- package/.next/server/app/api/chat/suggestions/route.js.nft.json +1 -1
- package/.next/server/app/api/config/route.js.nft.json +1 -1
- package/.next/server/app/api/config/test/route.js.nft.json +1 -1
- package/.next/server/app/api/connections/route.js.nft.json +1 -1
- package/.next/server/app/api/connections/webhook/route.js.nft.json +1 -1
- package/.next/server/app/api/demo/route.js.nft.json +1 -1
- package/.next/server/app/api/deploy/cloud-project/route.js.nft.json +1 -1
- package/.next/server/app/api/deploy/ssh/route.js.nft.json +1 -1
- package/.next/server/app/api/deployment/blob-setup/route.js.nft.json +1 -1
- package/.next/server/app/api/deployment/config/route.js.nft.json +1 -1
- package/.next/server/app/api/describe-image/route.js.nft.json +1 -1
- package/.next/server/app/api/documents/route.js.nft.json +1 -1
- package/.next/server/app/api/firecrawl/local/route.js.nft.json +1 -1
- package/.next/server/app/api/index/route.js.nft.json +1 -1
- package/.next/server/app/api/jobs/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/jobs/route.js.nft.json +1 -1
- package/.next/server/app/api/media/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/media/process/route.js.nft.json +1 -1
- package/.next/server/app/api/media/route.js.nft.json +1 -1
- package/.next/server/app/api/media/stream/route.js.nft.json +1 -1
- package/.next/server/app/api/search/bing/route.js.nft.json +1 -1
- package/.next/server/app/api/search/brave/route.js.nft.json +1 -1
- package/.next/server/app/api/search/exa/route.js.nft.json +1 -1
- package/.next/server/app/api/search/google/route.js.nft.json +1 -1
- package/.next/server/app/api/search/route.js.nft.json +1 -1
- package/.next/server/app/api/search/tavily/route.js.nft.json +1 -1
- package/.next/server/app/api/server/agent/route.js.nft.json +1 -1
- package/.next/server/app/api/server/download/route.js.nft.json +1 -1
- package/.next/server/app/api/server/generate/route.js.nft.json +1 -1
- package/.next/server/app/api/server/local/route.js.nft.json +1 -1
- package/.next/server/app/api/servers/route.js.nft.json +1 -1
- package/.next/server/app/api/tabular/query/route.js.nft.json +1 -1
- package/.next/server/app/api/tabular/route.js.nft.json +1 -1
- package/.next/server/app/api/upload-file/route.js.nft.json +1 -1
- package/.next/server/app/api/uploads/[...slug]/route.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/chat.html +1 -1
- package/.next/server/app/chat.rsc +19 -19
- package/.next/server/app/chat.segments/_full.segment.rsc +19 -19
- package/.next/server/app/chat.segments/_head.segment.rsc +4 -4
- package/.next/server/app/chat.segments/_index.segment.rsc +12 -12
- package/.next/server/app/chat.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/chat.segments/chat.segment.rsc +3 -3
- package/.next/server/app/data/page.js.nft.json +1 -1
- package/.next/server/app/data/page_client-reference-manifest.js +1 -1
- package/.next/server/app/data.html +1 -1
- package/.next/server/app/data.rsc +19 -19
- package/.next/server/app/data.segments/_full.segment.rsc +19 -19
- package/.next/server/app/data.segments/_head.segment.rsc +4 -4
- package/.next/server/app/data.segments/_index.segment.rsc +12 -12
- package/.next/server/app/data.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/data.segments/data/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/data.segments/data.segment.rsc +3 -3
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +17 -17
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +17 -17
- package/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/server/app/index.segments/_index.segment.rsc +12 -12
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +19 -19
- package/.next/server/app/settings.segments/_full.segment.rsc +19 -19
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +12 -12
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
- package/.next/server/chunks/0598_next_dist_esm_build_templates_app-route_0kbcuk-.js +10 -7
- package/.next/server/chunks/0598_next_dist_esm_build_templates_app-route_0sbf4ny.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__06gca-c._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0j2l54r._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__1idgvjh._.js → [root-of-the-server]__0pmypq8._.js} +3 -3
- package/.next/server/chunks/[root-of-the-server]__0tlfusr._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0x_a1jw._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1-f7u-_._.js +1 -1
- package/.next/{standalone/apps/web/.next/server/chunks/[root-of-the-server]__1lhls88._.js → server/chunks/[root-of-the-server]__13xnq6l._.js} +1 -1
- package/.next/server/chunks/[root-of-the-server]__16jk_se._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1s_l1di._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1u4frv-._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1w00ho9._.js +1 -1
- package/.next/server/chunks/_1ncm_ks._.js +1 -1
- package/.next/server/chunks/_1sx94ue._.js +1 -1
- package/.next/server/chunks/_20il040._.js +1 -1
- package/.next/server/chunks/packages_0cc5bxf._.js +1 -1
- package/.next/server/chunks/packages_1ggqion._.js +1 -1
- package/.next/server/chunks/packages_core_src_embeddings_registry_ts_05dafmb._.js +1 -1
- package/.next/server/chunks/packages_scraper_src_0kkcv_v._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1k1mxo2._.js +1 -1
- package/.next/server/chunks/ssr/_0ffb2sn._.js +1 -1
- package/.next/server/chunks/ssr/_169pdlf._.js +5 -5
- package/.next/server/chunks/ssr/_18jagqc._.js +1 -1
- package/.next/server/chunks/ssr/_1b5ufkw._.js +3 -0
- package/.next/server/chunks/ssr/_1yqlx1m._.js +1 -1
- package/.next/server/chunks/ssr/packages_core_src_generator_generate-server_ts_15zzrn2._.js +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/standalone/apps/web/.next/BUILD_ID +1 -1
- package/.next/standalone/apps/web/.next/build-manifest.json +3 -3
- package/.next/standalone/apps/web/.next/required-server-files.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.rsc +18 -18
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_full.segment.rsc +18 -18
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_index.segment.rsc +12 -12
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/analytics/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/analytics.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/analytics.rsc +19 -19
- package/.next/standalone/apps/web/.next/server/app/analytics.segments/_full.segment.rsc +19 -19
- package/.next/standalone/apps/web/.next/server/app/analytics.segments/_head.segment.rsc +4 -4
- package/.next/standalone/apps/web/.next/server/app/analytics.segments/_index.segment.rsc +12 -12
- package/.next/standalone/apps/web/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/analytics.segments/analytics/__PAGE__.segment.rsc +3 -3
- package/.next/standalone/apps/web/.next/server/app/analytics.segments/analytics.segment.rsc +3 -3
- package/.next/standalone/apps/web/.next/server/app/api/analytics/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/chat/route.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/chat/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/chat/status/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/chat/suggestions/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/config/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/config/test/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/connections/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/connections/webhook/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/demo/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/deploy/cloud-project/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/deploy/ssh/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/deployment/blob-setup/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/deployment/config/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/describe-image/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/documents/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/firecrawl/local/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/index/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/jobs/[id]/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/jobs/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/media/[id]/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/media/process/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/media/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/media/stream/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/search/bing/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/search/brave/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/search/exa/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/search/google/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/search/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/search/tavily/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/server/agent/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/server/download/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/server/generate/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/server/local/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/servers/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/tabular/query/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/tabular/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/upload-file/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/api/uploads/[...slug]/route.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/chat.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/chat.rsc +19 -19
- package/.next/standalone/apps/web/.next/server/app/chat.segments/_full.segment.rsc +19 -19
- package/.next/standalone/apps/web/.next/server/app/chat.segments/_head.segment.rsc +4 -4
- package/.next/standalone/apps/web/.next/server/app/chat.segments/_index.segment.rsc +12 -12
- package/.next/standalone/apps/web/.next/server/app/chat.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +3 -3
- package/.next/standalone/apps/web/.next/server/app/chat.segments/chat.segment.rsc +3 -3
- package/.next/standalone/apps/web/.next/server/app/data/page.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/data/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/data.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/data.rsc +19 -19
- package/.next/standalone/apps/web/.next/server/app/data.segments/_full.segment.rsc +19 -19
- package/.next/standalone/apps/web/.next/server/app/data.segments/_head.segment.rsc +4 -4
- package/.next/standalone/apps/web/.next/server/app/data.segments/_index.segment.rsc +12 -12
- package/.next/standalone/apps/web/.next/server/app/data.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/data.segments/data/__PAGE__.segment.rsc +3 -3
- package/.next/standalone/apps/web/.next/server/app/data.segments/data.segment.rsc +3 -3
- package/.next/standalone/apps/web/.next/server/app/index.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/index.rsc +17 -17
- package/.next/standalone/apps/web/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/index.segments/_full.segment.rsc +17 -17
- package/.next/standalone/apps/web/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/standalone/apps/web/.next/server/app/index.segments/_index.segment.rsc +12 -12
- package/.next/standalone/apps/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings.rsc +19 -19
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_full.segment.rsc +19 -19
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_index.segment.rsc +12 -12
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
- package/.next/standalone/apps/web/.next/server/app/settings.segments/settings.segment.rsc +3 -3
- package/.next/standalone/apps/web/.next/server/chunks/0598_next_dist_esm_build_templates_app-route_0kbcuk-.js +10 -7
- package/.next/standalone/apps/web/.next/server/chunks/0598_next_dist_esm_build_templates_app-route_0sbf4ny.js +2 -2
- package/.next/standalone/apps/web/.next/server/chunks/[root-of-the-server]__06gca-c._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/[root-of-the-server]__0j2l54r._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/{[root-of-the-server]__1idgvjh._.js → [root-of-the-server]__0pmypq8._.js} +3 -3
- package/.next/standalone/apps/web/.next/server/chunks/[root-of-the-server]__0tlfusr._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/[root-of-the-server]__0x_a1jw._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/[root-of-the-server]__1-f7u-_._.js +1 -1
- package/.next/{server/chunks/[root-of-the-server]__1lhls88._.js → standalone/apps/web/.next/server/chunks/[root-of-the-server]__13xnq6l._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/[root-of-the-server]__16jk_se._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/[root-of-the-server]__1s_l1di._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/[root-of-the-server]__1u4frv-._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/[root-of-the-server]__1w00ho9._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/_1ncm_ks._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/_1sx94ue._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/_20il040._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/packages_0cc5bxf._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/packages_1ggqion._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/packages_core_src_embeddings_registry_ts_05dafmb._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/packages_scraper_src_0kkcv_v._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__1k1mxo2._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_0ffb2sn._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_169pdlf._.js +5 -5
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_18jagqc._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_1b5ufkw._.js +3 -0
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_1yqlx1m._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/packages_core_src_generator_generate-server_ts_15zzrn2._.js +1 -1
- package/.next/standalone/apps/web/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/apps/web/.next/server/pages/404.html +1 -1
- package/.next/standalone/apps/web/.next/server/pages/500.html +1 -1
- package/.next/standalone/apps/web/.next/static/chunks/1_knu6c2q82r_.js +1 -0
- package/.next/{static/chunks/37j20in7beze4.js → standalone/apps/web/.next/static/chunks/1gl22nlyonq0i.js} +1 -1
- package/.next/standalone/apps/web/.next/static/chunks/1xr94e4n5c_m_.css +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/{2h-80z3n8mi3d.js → 2diknd81m_z55.js} +1 -1
- package/.next/standalone/apps/web/.next/static/chunks/2iog7bwy_5c7e.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/{2_qbhu4zxkm7j.js → 2q_4eq7-dkww2.js} +5 -5
- package/.next/standalone/apps/web/.next/static/chunks/{1b9srvyupwcjz.js → 2t0il37i0nvoo.js} +1 -1
- package/.next/standalone/apps/web/.next/static/media/pdf.worker.min.43wid0v0nfx-f.mjs +29 -0
- package/.next/standalone/apps/web/CHANGELOG.md +21 -0
- package/.next/standalone/apps/web/app/api/chat/route.ts +30 -64
- package/.next/standalone/apps/web/app/api/chat/tools.ts +76 -12
- package/.next/standalone/apps/web/app/api/media/process/route.ts +88 -40
- package/.next/standalone/apps/web/components/chat/chat-workspace.tsx +10 -10
- package/.next/standalone/apps/web/components/chat/message-item.tsx +1 -8
- package/.next/standalone/apps/web/components/data/firecrawl-notice.tsx +3 -3
- package/.next/standalone/apps/web/components/data/media-panel.tsx +2 -8
- package/.next/standalone/apps/web/components/data/scrape-panel.tsx +3 -11
- package/.next/standalone/apps/web/components/data/upload-panel.tsx +7 -4
- package/.next/standalone/apps/web/components/index/index-workspace.tsx +1 -1
- package/.next/standalone/apps/web/lib/pdf-images.ts +30 -1
- package/.next/standalone/apps/web/lib/retrieval-routing.ts +72 -0
- package/.next/standalone/apps/web/package.json +1 -1
- package/.next/standalone/apps/web/server.js +1 -1
- package/.next/standalone/packages/tools/doc-editor/CHANGELOG.md +7 -0
- package/.next/standalone/packages/tools/doc-editor/package.json +1 -1
- package/.next/standalone/packages/tools/video-audio/CHANGELOG.md +6 -0
- package/.next/standalone/packages/tools/video-audio/dist/url-importer.js +37 -5
- package/.next/standalone/packages/tools/video-audio/package.json +1 -1
- package/.next/standalone/packages/tools/video-audio/src/url-importer.ts +61 -25
- package/.next/static/chunks/1_knu6c2q82r_.js +1 -0
- package/.next/{standalone/apps/web/.next/static/chunks/37j20in7beze4.js → static/chunks/1gl22nlyonq0i.js} +1 -1
- package/.next/static/chunks/1xr94e4n5c_m_.css +1 -0
- package/.next/static/chunks/{2h-80z3n8mi3d.js → 2diknd81m_z55.js} +1 -1
- package/.next/static/chunks/2iog7bwy_5c7e.js +1 -0
- package/.next/static/chunks/{2_qbhu4zxkm7j.js → 2q_4eq7-dkww2.js} +5 -5
- package/.next/static/chunks/{1b9srvyupwcjz.js → 2t0il37i0nvoo.js} +1 -1
- package/.next/static/media/pdf.worker.min.43wid0v0nfx-f.mjs +29 -0
- package/CHANGELOG.md +21 -0
- package/app/api/chat/route.ts +30 -64
- package/app/api/chat/tools.ts +76 -12
- package/app/api/media/process/route.ts +88 -40
- package/components/chat/chat-workspace.tsx +10 -10
- package/components/chat/message-item.tsx +1 -8
- package/components/data/firecrawl-notice.tsx +3 -3
- package/components/data/media-panel.tsx +2 -8
- package/components/data/scrape-panel.tsx +3 -11
- package/components/data/upload-panel.tsx +7 -4
- package/components/index/index-workspace.tsx +1 -1
- package/lib/pdf-images.ts +30 -1
- package/lib/retrieval-routing.ts +72 -0
- package/package.json +6 -6
- package/.next/server/chunks/ssr/apps_web_lib_pdf-images_ts_13-l5wa._.js +0 -3
- package/.next/standalone/apps/web/.next/server/chunks/ssr/apps_web_lib_pdf-images_ts_13-l5wa._.js +0 -3
- package/.next/standalone/apps/web/.next/static/chunks/2ib3e0xrrdait.js +0 -1
- package/.next/standalone/apps/web/.next/static/chunks/38f3p67a1uufx.js +0 -1
- package/.next/standalone/apps/web/.next/static/chunks/3fe06cefiv690.css +0 -1
- package/.next/static/chunks/2ib3e0xrrdait.js +0 -1
- package/.next/static/chunks/38f3p67a1uufx.js +0 -1
- package/.next/static/chunks/3fe06cefiv690.css +0 -1
- /package/.next/standalone/apps/web/.next/static/{7yuxi3XYqMr4kxUl6T-qk → YT7FJOJe86DX-Sa61-JJz}/_buildManifest.js +0 -0
- /package/.next/standalone/apps/web/.next/static/{7yuxi3XYqMr4kxUl6T-qk → YT7FJOJe86DX-Sa61-JJz}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/apps/web/.next/static/{7yuxi3XYqMr4kxUl6T-qk → YT7FJOJe86DX-Sa61-JJz}/_ssgManifest.js +0 -0
- /package/.next/static/{7yuxi3XYqMr4kxUl6T-qk → YT7FJOJe86DX-Sa61-JJz}/_buildManifest.js +0 -0
- /package/.next/static/{7yuxi3XYqMr4kxUl6T-qk → YT7FJOJe86DX-Sa61-JJz}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{7yuxi3XYqMr4kxUl6T-qk → YT7FJOJe86DX-Sa61-JJz}/_ssgManifest.js +0 -0
|
@@ -731,13 +731,7 @@ function MediaContent({
|
|
|
731
731
|
if (!res.ok) throw new Error(data.error ?? 'Media import failed');
|
|
732
732
|
const ids = (data.assets as MediaAsset[]).map((asset) => asset.id);
|
|
733
733
|
toast.success(`${mediaType === 'video' ? 'Video' : 'Audio'} import started`, {
|
|
734
|
-
description:
|
|
735
|
-
remoteDuration
|
|
736
|
-
? `about ${remoteEstimate.processingMinutes} minute${
|
|
737
|
-
remoteEstimate.processingMinutes === 1 ? '' : 's'
|
|
738
|
-
}`
|
|
739
|
-
: 'a few minutes'
|
|
740
|
-
}. You can safely leave — we will keep indexing it in the background.`,
|
|
734
|
+
description: 'Queued for download and indexing. You can safely leave in the meantime.',
|
|
741
735
|
duration: 8_000,
|
|
742
736
|
});
|
|
743
737
|
await processAssets(ids);
|
|
@@ -1385,7 +1379,7 @@ function MediaContent({
|
|
|
1385
1379
|
<AlertDialogFooter>
|
|
1386
1380
|
<AlertDialogCancel>Keep file</AlertDialogCancel>
|
|
1387
1381
|
<AlertDialogAction
|
|
1388
|
-
className="bg-destructive text-
|
|
1382
|
+
className="bg-destructive text-white hover:bg-destructive/90"
|
|
1389
1383
|
onClick={() => {
|
|
1390
1384
|
if (assetToRemove) void handleDelete(assetToRemove.id);
|
|
1391
1385
|
setAssetToRemove(null);
|
|
@@ -576,20 +576,12 @@ export function ScrapePanel({
|
|
|
576
576
|
const data = await res.json();
|
|
577
577
|
if (!res.ok) throw new Error(data.error ?? 'Could not start job');
|
|
578
578
|
|
|
579
|
-
|
|
580
|
-
selectedUrls.length,
|
|
581
|
-
effectiveScope,
|
|
582
|
-
specificUrls ? 1 : pageLimit,
|
|
583
|
-
);
|
|
584
|
-
|
|
585
|
-
toast.success('Scraping started, running in background', {
|
|
579
|
+
toast.success('Scrape queued', {
|
|
586
580
|
description: specificUrls
|
|
587
|
-
? `
|
|
581
|
+
? `We will connect to ${selectedUrls.length} specific URL(s) and show real page progress as each response arrives. You can navigate away.`
|
|
588
582
|
: `${selectedUrls.length} ${
|
|
589
583
|
effectiveScope === 'domain' ? 'domain(s)' : 'page(s)'
|
|
590
|
-
}
|
|
591
|
-
estimatedSeconds,
|
|
592
|
-
)}. You can navigate away. Progress is tracked automatically.`,
|
|
584
|
+
} selected. We will show real page progress as each response arrives; no artificial completion estimate. You can navigate away.`,
|
|
593
585
|
duration: 8000,
|
|
594
586
|
});
|
|
595
587
|
|
|
@@ -219,7 +219,10 @@ export function UploadPanel({ onAdded }: { onAdded: () => void }) {
|
|
|
219
219
|
format: 'plain',
|
|
220
220
|
rawContent: text,
|
|
221
221
|
fileObject: file,
|
|
222
|
-
|
|
222
|
+
// PDF diagrams are often embedded alongside ordinary text. Keep
|
|
223
|
+
// visual indexing on by default, with the existing per-file toggle
|
|
224
|
+
// available for users who only want text extraction.
|
|
225
|
+
indexImages: true,
|
|
223
226
|
});
|
|
224
227
|
} else {
|
|
225
228
|
const content = await file.text();
|
|
@@ -572,7 +575,7 @@ export function UploadPanel({ onAdded }: { onAdded: () => void }) {
|
|
|
572
575
|
</button>
|
|
573
576
|
</div>
|
|
574
577
|
</div>
|
|
575
|
-
<ul className="space-y-1.5 max-h-
|
|
578
|
+
<ul className="space-y-1.5 max-h-87.5 overflow-y-auto pr-1">
|
|
576
579
|
{staged.map((f) => (
|
|
577
580
|
<li
|
|
578
581
|
key={f.id}
|
|
@@ -782,7 +785,7 @@ export function UploadPanel({ onAdded }: { onAdded: () => void }) {
|
|
|
782
785
|
<p className="text-[11px] text-muted-foreground mb-2 -mt-1">
|
|
783
786
|
Selected columns will be combined to form the searchable content.
|
|
784
787
|
</p>
|
|
785
|
-
<div className="max-h-
|
|
788
|
+
<div className="max-h-30 overflow-y-auto space-y-2 pr-2">
|
|
786
789
|
{editingFile.keys?.map((k) => {
|
|
787
790
|
const isSelected = editingFile.contentKeys?.includes(k);
|
|
788
791
|
return (
|
|
@@ -871,7 +874,7 @@ export function UploadPanel({ onAdded }: { onAdded: () => void }) {
|
|
|
871
874
|
<p className="text-[11px] text-muted-foreground mb-2 -mt-1">
|
|
872
875
|
These columns will be stored as searchable metadata.
|
|
873
876
|
</p>
|
|
874
|
-
<div className="max-h-
|
|
877
|
+
<div className="max-h-30 overflow-y-auto space-y-2 pr-2">
|
|
875
878
|
{editingFile.keys?.map((k) => {
|
|
876
879
|
const isSelected = editingFile.metadataKeys?.includes(k);
|
|
877
880
|
const disabled = k === editingFile.titleKey;
|
|
@@ -95,7 +95,7 @@ export function IndexWorkspace({
|
|
|
95
95
|
setIsIndexing(true);
|
|
96
96
|
} else if (isIndexing && status === 'completed') {
|
|
97
97
|
setIsIndexing(false);
|
|
98
|
-
toast.success('Indexing complete
|
|
98
|
+
toast.success('Indexing complete. Your data is ready to use.');
|
|
99
99
|
try {
|
|
100
100
|
const context = new (window.AudioContext || (window as any).webkitAudioContext)();
|
|
101
101
|
const oscillator = context.createOscillator();
|
|
@@ -3,7 +3,12 @@ import * as pdfjsLib from 'pdfjs-dist';
|
|
|
3
3
|
export async function extractImagesFromPDF(
|
|
4
4
|
file: File,
|
|
5
5
|
): Promise<{ base64: string; pageNumber: number; index: number }[]> {
|
|
6
|
-
|
|
6
|
+
// Keep extraction self-contained. The previous CDN worker could fail behind
|
|
7
|
+
// a firewall or offline, silently leaving PDFs with no indexed visuals.
|
|
8
|
+
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
|
|
9
|
+
'pdfjs-dist/build/pdf.worker.min.mjs',
|
|
10
|
+
import.meta.url,
|
|
11
|
+
).toString();
|
|
7
12
|
|
|
8
13
|
const arrayBuffer = await file.arrayBuffer();
|
|
9
14
|
const pdf = await pdfjsLib.getDocument({ data: new Uint8Array(arrayBuffer) }).promise;
|
|
@@ -30,6 +35,7 @@ export async function extractImagesFromPDF(
|
|
|
30
35
|
try {
|
|
31
36
|
const page = await pdf.getPage(i);
|
|
32
37
|
const opList = await page.getOperatorList();
|
|
38
|
+
const pageStartCount = images.length;
|
|
33
39
|
|
|
34
40
|
const imageOps = [];
|
|
35
41
|
for (let j = 0; j < opList.fnArray.length; j++) {
|
|
@@ -86,6 +92,29 @@ export async function extractImagesFromPDF(
|
|
|
86
92
|
console.error(`Error extracting image ${objId} on page ${i}`, err);
|
|
87
93
|
}
|
|
88
94
|
}
|
|
95
|
+
|
|
96
|
+
// Diagrams and slides in PDFs are commonly vector artwork, not embedded
|
|
97
|
+
// bitmap objects. When image indexing is explicitly enabled, render such
|
|
98
|
+
// a page as one bounded visual so its labels and structure remain
|
|
99
|
+
// available to the vision model and to chat previews.
|
|
100
|
+
if (images.length === pageStartCount) {
|
|
101
|
+
try {
|
|
102
|
+
const viewport = page.getViewport({ scale: 1 });
|
|
103
|
+
const maxDimension = 1_600;
|
|
104
|
+
const scale = Math.min(1, maxDimension / Math.max(viewport.width, viewport.height));
|
|
105
|
+
const renderedViewport = page.getViewport({ scale: Math.max(scale, 0.1) });
|
|
106
|
+
const canvas = document.createElement('canvas');
|
|
107
|
+
canvas.width = Math.max(1, Math.round(renderedViewport.width));
|
|
108
|
+
canvas.height = Math.max(1, Math.round(renderedViewport.height));
|
|
109
|
+
const ctx = canvas.getContext('2d');
|
|
110
|
+
if (ctx) {
|
|
111
|
+
await page.render({ canvas, viewport: renderedViewport }).promise;
|
|
112
|
+
images.push({ base64: toDataUrl(canvas), pageNumber: i, index: imageIndex++ });
|
|
113
|
+
}
|
|
114
|
+
} catch (err) {
|
|
115
|
+
console.error(`Error rendering PDF page ${i} for visual indexing`, err);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
89
118
|
} catch (err) {
|
|
90
119
|
console.error(`Error processing page ${i}`, err);
|
|
91
120
|
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keeps retrieval routing deterministic before the chat model is asked to
|
|
3
|
+
* decide whether a returned source is actually useful.
|
|
4
|
+
*/
|
|
5
|
+
export function requiresKnowledgeBaseSearch(text: string): boolean {
|
|
6
|
+
const normalized = text.trim();
|
|
7
|
+
if (/^(hi|hello|hey|thanks|thank you|ok|sure|yes|no|please|help)\b/i.test(normalized)) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
/\b(my|our)\s+(favo(?:u)?rite|preference|choice|answer|name|result|score|winner)\b/i.test(
|
|
13
|
+
normalized,
|
|
14
|
+
) ||
|
|
15
|
+
/\b(?:what|which|who|where|when|how)\b[\s\S]{0,80}\b(my|our)\b/i.test(normalized) ||
|
|
16
|
+
/\b(?:this|that|the)\s+(?:match|video|episode|recording|diagram|chart|image|page|section)\b/i.test(
|
|
17
|
+
normalized,
|
|
18
|
+
) ||
|
|
19
|
+
/\b(?:shown|listed|named|counted|under)\b[\s\S]{0,80}\b(?:image|diagram|chart|pdf|document|page|section|resources)\b/i.test(
|
|
20
|
+
normalized,
|
|
21
|
+
) ||
|
|
22
|
+
/\b(my|our)\s+(document|file|data|image|picture|diagram|video|audio|upload|corpus|knowledge|database|db|pdf|report|spreadsheet|presentation)\b/i.test(
|
|
23
|
+
normalized,
|
|
24
|
+
) ||
|
|
25
|
+
/\b(?:search|check|query)\s+(?:the\s+)?(?:knowledge base|corpus|database|db)\b/i.test(
|
|
26
|
+
normalized,
|
|
27
|
+
) ||
|
|
28
|
+
/\b(the|this|that)\s+(document|file|diagram|image|picture|upload|pdf|report)\b/i.test(
|
|
29
|
+
normalized,
|
|
30
|
+
) ||
|
|
31
|
+
/\b(uploaded?|indexed|scraped|knowledge base|corpus)\b/i.test(normalized) ||
|
|
32
|
+
/\bshow\s+me\b/i.test(normalized)
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** Current/public questions should begin on the web unless they explicitly
|
|
37
|
+
* refer to the user's indexed data, which the caller gives precedence to. */
|
|
38
|
+
export function requiresCurrentWebSearch(text: string): boolean {
|
|
39
|
+
return /\b(?:search (?:the )?web|search online|look (?:it )?up|internet|latest|current|today|yesterday|breaking news|weather|stock price|exchange rate|election result|schedule|who won|winner|match result|final score)\b/i.test(
|
|
40
|
+
text,
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Only the first retrieval is forced. The other source remains available for
|
|
45
|
+
* exactly one recovery attempt; subsequent steps are reserved for analysis and
|
|
46
|
+
* the final answer. */
|
|
47
|
+
export function retrievalToolsForStep(options: {
|
|
48
|
+
stepNumber: number;
|
|
49
|
+
forceKnowledgeBaseSearch: boolean;
|
|
50
|
+
forceWebSearch: boolean;
|
|
51
|
+
toolNames: string[];
|
|
52
|
+
}): { toolChoice?: { type: 'tool'; toolName: string }; activeTools?: string[] } | undefined {
|
|
53
|
+
const { stepNumber, forceKnowledgeBaseSearch, forceWebSearch, toolNames } = options;
|
|
54
|
+
const without = (...blocked: string[]) => toolNames.filter((name) => !blocked.includes(name));
|
|
55
|
+
|
|
56
|
+
if (stepNumber === 0 && forceKnowledgeBaseSearch) {
|
|
57
|
+
return { toolChoice: { type: 'tool', toolName: 'searchKnowledgeBase' } };
|
|
58
|
+
}
|
|
59
|
+
if (stepNumber === 0 && forceWebSearch) {
|
|
60
|
+
return { toolChoice: { type: 'tool', toolName: 'webSearch' } };
|
|
61
|
+
}
|
|
62
|
+
if (stepNumber === 0) {
|
|
63
|
+
return { activeTools: without('webSearch', 'searchKnowledgeBase') };
|
|
64
|
+
}
|
|
65
|
+
if (stepNumber === 1 && forceKnowledgeBaseSearch) {
|
|
66
|
+
return { activeTools: without('searchKnowledgeBase') };
|
|
67
|
+
}
|
|
68
|
+
if (stepNumber === 1 && forceWebSearch) {
|
|
69
|
+
return { activeTools: without('webSearch') };
|
|
70
|
+
}
|
|
71
|
+
return { activeTools: without('webSearch', 'searchKnowledgeBase') };
|
|
72
|
+
}
|
|
@@ -15,7 +15,7 @@ const currentPort = parseInt(process.env.PORT, 10) || 3000
|
|
|
15
15
|
const hostname = process.env.HOSTNAME || '0.0.0.0'
|
|
16
16
|
|
|
17
17
|
let keepAliveTimeout = parseInt(process.env.KEEP_ALIVE_TIMEOUT, 10)
|
|
18
|
-
const nextConfig = {"env":{"NEXT_PUBLIC_APP_VERSION":"0.1.
|
|
18
|
+
const nextConfig = {"env":{"NEXT_PUBLIC_APP_VERSION":"0.1.42"},"webpack":null,"typescript":{"ignoreBuildErrors":true},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.mjs","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":true,"customCacheHandler":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{"serverFunctions":true,"browserToTerminal":"warn"},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/Users/abdelrahmanabounida/Desktop/my-ai-startup/larkup/larkup","cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"appNewScrollHandler":false,"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"cachedNavigations":false,"partialFallbacks":false,"dynamicOnHover":false,"varyParams":false,"prefetchInlining":false,"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":9,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"strictRouteTypes":false,"useTypeScriptCli":false,"viewTransition":false,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":false,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":true,"serverComponentsHmrCache":true,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"gestureTransition":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":"warn","lockDistDir":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":false,"turbopackInferModuleSideEffects":true,"turbopackPluginRuntimeStrategy":"childProcesses","optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.mjs","transpilePackages":["@larkup/core","@larkup/vector-stores","@larkup/scraper","@larkup/marketplace"],"serverExternalPackages":["@lancedb/lancedb","chromadb","dockerode","@larkup/sandbox"],"turbopack":{"root":"/Users/abdelrahmanabounida/Desktop/my-ai-startup/larkup/larkup"},"distDirRoot":".next","_originalRewrites":{"beforeFiles":[],"afterFiles":[{"source":"/uploads/:path*","destination":"/api/uploads/:path*"}],"fallback":[]}}
|
|
19
19
|
|
|
20
20
|
process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig)
|
|
21
21
|
|
|
@@ -57,7 +57,7 @@ export async function importMediaUrl(url, options) {
|
|
|
57
57
|
if (isYouTube(parsed)) {
|
|
58
58
|
const template = path.join(options.outputDir, '%(title).120B [%(id)s].%(ext)s');
|
|
59
59
|
const print = '{"path":%(filepath)j,"title":%(title)j,"originalUrl":%(webpage_url)j,"ext":%(ext)j}';
|
|
60
|
-
const
|
|
60
|
+
const commonArgs = [
|
|
61
61
|
'--no-playlist',
|
|
62
62
|
'--playlist-end',
|
|
63
63
|
String(options.playlistMax ?? 10),
|
|
@@ -67,8 +67,6 @@ export async function importMediaUrl(url, options) {
|
|
|
67
67
|
'2',
|
|
68
68
|
'--fragment-retries',
|
|
69
69
|
'2',
|
|
70
|
-
'--concurrent-fragments',
|
|
71
|
-
'4',
|
|
72
70
|
'--format',
|
|
73
71
|
'best[height<=360]/bestvideo[height<=360]+bestaudio/best',
|
|
74
72
|
'--merge-output-format',
|
|
@@ -77,8 +75,32 @@ export async function importMediaUrl(url, options) {
|
|
|
77
75
|
template,
|
|
78
76
|
'--print',
|
|
79
77
|
`after_move:${print}`,
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
];
|
|
79
|
+
let output;
|
|
80
|
+
try {
|
|
81
|
+
output = await runYtDlp([...commonArgs, '--concurrent-fragments', '4', url], options.onProgress);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
if (!isVideoHostForbidden(error))
|
|
85
|
+
throw error;
|
|
86
|
+
// Video hosts occasionally reject a freshly-issued media URL. Re-extract
|
|
87
|
+
// it with a conservative one-fragment retry before failing the asset.
|
|
88
|
+
options.onProgress?.({ message: 'Source rejected the download; refreshing the video link…' });
|
|
89
|
+
try {
|
|
90
|
+
output = await runYtDlp([
|
|
91
|
+
...commonArgs,
|
|
92
|
+
'--force-ipv4',
|
|
93
|
+
'--extractor-retries',
|
|
94
|
+
'3',
|
|
95
|
+
'--concurrent-fragments',
|
|
96
|
+
'1',
|
|
97
|
+
url,
|
|
98
|
+
], options.onProgress);
|
|
99
|
+
}
|
|
100
|
+
catch (retryError) {
|
|
101
|
+
throw friendlyVideoDownloadError(retryError);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
82
104
|
const imported = output
|
|
83
105
|
.split('\n')
|
|
84
106
|
.filter(Boolean)
|
|
@@ -135,6 +157,16 @@ export async function importMediaUrl(url, options) {
|
|
|
135
157
|
},
|
|
136
158
|
];
|
|
137
159
|
}
|
|
160
|
+
function isVideoHostForbidden(error) {
|
|
161
|
+
return error instanceof Error && /\b(?:403|forbidden)\b/i.test(error.message);
|
|
162
|
+
}
|
|
163
|
+
/** Keep upstream yt-dlp output out of the end-user status while retaining a useful cause. */
|
|
164
|
+
function friendlyVideoDownloadError(error) {
|
|
165
|
+
if (isVideoHostForbidden(error)) {
|
|
166
|
+
return new Error('The video host refused this download (HTTP 403) after a safe retry. This is a temporary source restriction, not a problem with your existing index. Try again later, or upload the original video file directly.');
|
|
167
|
+
}
|
|
168
|
+
return error instanceof Error ? error : new Error('Video download failed. Please try again.');
|
|
169
|
+
}
|
|
138
170
|
/**
|
|
139
171
|
* Read the video's own manual or automatic captions through yt-dlp. This is
|
|
140
172
|
* both faster and usually more accurate than transcribing compressed audio,
|
|
@@ -99,31 +99,53 @@ export async function importMediaUrl(
|
|
|
99
99
|
const template = path.join(options.outputDir, '%(title).120B [%(id)s].%(ext)s');
|
|
100
100
|
const print =
|
|
101
101
|
'{"path":%(filepath)j,"title":%(title)j,"originalUrl":%(webpage_url)j,"ext":%(ext)j}';
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
102
|
+
const commonArgs = [
|
|
103
|
+
'--no-playlist',
|
|
104
|
+
'--playlist-end',
|
|
105
|
+
String(options.playlistMax ?? 10),
|
|
106
|
+
'--socket-timeout',
|
|
107
|
+
'20',
|
|
108
|
+
'--retries',
|
|
109
|
+
'2',
|
|
110
|
+
'--fragment-retries',
|
|
111
|
+
'2',
|
|
112
|
+
'--format',
|
|
113
|
+
'best[height<=360]/bestvideo[height<=360]+bestaudio/best',
|
|
114
|
+
'--merge-output-format',
|
|
115
|
+
'mp4',
|
|
116
|
+
'-o',
|
|
117
|
+
template,
|
|
118
|
+
'--print',
|
|
119
|
+
`after_move:${print}`,
|
|
120
|
+
];
|
|
121
|
+
let output: string;
|
|
122
|
+
try {
|
|
123
|
+
output = await runYtDlp(
|
|
124
|
+
[...commonArgs, '--concurrent-fragments', '4', url],
|
|
125
|
+
options.onProgress,
|
|
126
|
+
);
|
|
127
|
+
} catch (error) {
|
|
128
|
+
if (!isVideoHostForbidden(error)) throw error;
|
|
129
|
+
// Video hosts occasionally reject a freshly-issued media URL. Re-extract
|
|
130
|
+
// it with a conservative one-fragment retry before failing the asset.
|
|
131
|
+
options.onProgress?.({ message: 'Source rejected the download; refreshing the video link…' });
|
|
132
|
+
try {
|
|
133
|
+
output = await runYtDlp(
|
|
134
|
+
[
|
|
135
|
+
...commonArgs,
|
|
136
|
+
'--force-ipv4',
|
|
137
|
+
'--extractor-retries',
|
|
138
|
+
'3',
|
|
139
|
+
'--concurrent-fragments',
|
|
140
|
+
'1',
|
|
141
|
+
url,
|
|
142
|
+
],
|
|
143
|
+
options.onProgress,
|
|
144
|
+
);
|
|
145
|
+
} catch (retryError) {
|
|
146
|
+
throw friendlyVideoDownloadError(retryError);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
127
149
|
const imported = output
|
|
128
150
|
.split('\n')
|
|
129
151
|
.filter(Boolean)
|
|
@@ -186,6 +208,20 @@ export async function importMediaUrl(
|
|
|
186
208
|
];
|
|
187
209
|
}
|
|
188
210
|
|
|
211
|
+
function isVideoHostForbidden(error: unknown): boolean {
|
|
212
|
+
return error instanceof Error && /\b(?:403|forbidden)\b/i.test(error.message);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/** Keep upstream yt-dlp output out of the end-user status while retaining a useful cause. */
|
|
216
|
+
function friendlyVideoDownloadError(error: unknown): Error {
|
|
217
|
+
if (isVideoHostForbidden(error)) {
|
|
218
|
+
return new Error(
|
|
219
|
+
'The video host refused this download (HTTP 403) after a safe retry. This is a temporary source restriction, not a problem with your existing index. Try again later, or upload the original video file directly.',
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
return error instanceof Error ? error : new Error('Video download failed. Please try again.');
|
|
223
|
+
}
|
|
224
|
+
|
|
189
225
|
/**
|
|
190
226
|
* Read the video's own manual or automatic captions through yt-dlp. This is
|
|
191
227
|
* both faster and usually more accurate than transcribing compressed audio,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,349871,t=>{t.q("/_next/static/media/pdf.worker.min.43wid0v0nfx-f.mjs")},385290,t=>{"use strict";var e=t.i(410386);async function a(a){e.GlobalWorkerOptions.workerSrc=new t.U(t.r(349871)).toString();let r=await a.arrayBuffer(),i=await e.getDocument({data:new Uint8Array(r)}).promise,n=i.numPages,h=[],o=0,g=t=>{let e=Math.min(1,1600/Math.max(t.width,t.height));if(1===e)return t.toDataURL("image/jpeg",.86);let a=document.createElement("canvas");return a.width=Math.max(1,Math.round(t.width*e)),a.height=Math.max(1,Math.round(t.height*e)),a.getContext("2d")?.drawImage(t,0,0,a.width,a.height),a.toDataURL("image/jpeg",.86)};for(let t=1;t<=n;t++)try{let a=await i.getPage(t),r=await a.getOperatorList(),n=h.length,m=[];for(let t=0;t<r.fnArray.length;t++)(r.fnArray[t]===e.OPS.paintImageXObject||r.fnArray[t]===e.OPS.paintInlineImageXObject)&&m.push(r.argsArray[t][0]);for(let e of m)try{let r=await new Promise(t=>{try{a.objs.get(e,e=>t(e))}catch(e){t(null)}});if(r&&r.bitmap){let e=document.createElement("canvas");e.width=r.bitmap.width||r.width,e.height=r.bitmap.height||r.height;let a=e.getContext("2d");a&&(a.drawImage(r.bitmap,0,0),h.push({base64:g(e),pageNumber:t,index:o++}))}else if(r&&r.data&&r.width&&r.height){let e=document.createElement("canvas");e.width=r.width,e.height=r.height;let a=e.getContext("2d");if(a){let i=new ImageData(new Uint8ClampedArray(r.data),r.width,r.height);a.putImageData(i,0,0),h.push({base64:g(e),pageNumber:t,index:o++})}}}catch(a){console.error(`Error extracting image ${e} on page ${t}`,a)}if(h.length===n)try{let e=a.getViewport({scale:1}),r=Math.min(1,1600/Math.max(e.width,e.height)),i=a.getViewport({scale:Math.max(r,.1)}),n=document.createElement("canvas");n.width=Math.max(1,Math.round(i.width)),n.height=Math.max(1,Math.round(i.height)),n.getContext("2d")&&(await a.render({canvas:n,viewport:i}).promise,h.push({base64:g(n),pageNumber:t,index:o++}))}catch(e){console.error(`Error rendering PDF page ${t} for visual indexing`,e)}}catch(e){console.error(`Error processing page ${t}`,e)}return h}t.s(["extractImagesFromPDF",0,a])}]);
|