larkup 0.4.12 → 0.4.14
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/standalone/apps/web/.next/BUILD_ID +1 -0
- package/.next/standalone/apps/web/.next/app-path-routes-manifest.json +94 -0
- package/.next/standalone/apps/web/.next/build-manifest.json +20 -0
- package/.next/standalone/apps/web/.next/diagnostics/build-diagnostics.json +6 -0
- package/.next/standalone/apps/web/.next/diagnostics/framework.json +1 -0
- package/.next/standalone/apps/web/.next/lock +0 -0
- package/.next/standalone/apps/web/.next/package.json +1 -0
- package/.next/standalone/apps/web/.next/prerender-manifest.json +241 -0
- package/.next/standalone/apps/web/.next/react-loadable-manifest.json +31 -0
- package/.next/standalone/apps/web/.next/required-server-files.json +399 -0
- package/.next/standalone/apps/web/.next/routes-manifest.json +644 -0
- package/.next/standalone/apps/web/.next/server/app/_global-error/page.js +31 -0
- package/.next/standalone/apps/web/.next/server/app/_global-error/page.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/_global-error.html +1 -0
- package/.next/standalone/apps/web/.next/server/app/_global-error.meta +35 -0
- package/.next/standalone/apps/web/.next/server/app/_global-error.rsc +15 -0
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +15 -0
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +21 -0
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
- package/.next/standalone/apps/web/.next/server/app/_not-found/page.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/_not-found.html +1 -0
- package/.next/standalone/apps/web/.next/server/app/_not-found.meta +35 -0
- package/.next/standalone/apps/web/.next/server/app/_not-found.rsc +26 -0
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_full.segment.rsc +26 -0
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +32 -0
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
- package/.next/standalone/apps/web/.next/server/app/add/page.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/add/page.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/add/page_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/add.html +1 -0
- package/.next/standalone/apps/web/.next/server/app/add.meta +34 -0
- package/.next/standalone/apps/web/.next/server/app/add.rsc +27 -0
- package/.next/standalone/apps/web/.next/server/app/add.segments/_full.segment.rsc +27 -0
- package/.next/standalone/apps/web/.next/server/app/add.segments/_tree.segment.rsc +2 -0
- package/.next/standalone/apps/web/.next/server/app/add.segments/add/__PAGE__.segment.rsc +33 -0
- package/.next/standalone/apps/web/.next/server/app/api/analytics/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/analytics/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/analytics/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/chat/feedback/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/chat/feedback/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/chat/feedback/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/chat/route.js +111 -0
- package/.next/standalone/apps/web/.next/server/app/api/chat/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/chat/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/chat/status/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/chat/status/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/chat/status/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/test/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/test/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/test/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/test-embedding/route.js +10 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/test-embedding/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/test-embedding/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/test-llm/route.js +10 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/test-llm/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/test-llm/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/test-provider/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/test-provider/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/test-provider/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/verify/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/verify/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/config/verify/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/oauth/callback/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/oauth/callback/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/oauth/callback/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/oauth/start/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/oauth/start/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/oauth/start/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/connections/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/connections/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/connections/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/connections/tunnel/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/connections/tunnel/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/connections/tunnel/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/demo/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/demo/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/demo/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/deploy/ssh/route.js +5 -0
- package/.next/standalone/apps/web/.next/server/app/api/deploy/ssh/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/deploy/ssh/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/deploy/verify/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/deploy/verify/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/deploy/verify/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/describe-image/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/describe-image/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/describe-image/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/doc-editor/edit/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/doc-editor/edit/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/doc-editor/edit/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/doc-editor/export/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/doc-editor/export/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/doc-editor/export/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/doc-editor/extract-text/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/doc-editor/extract-text/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/doc-editor/extract-text/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/doc-editor/parse/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/doc-editor/parse/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/doc-editor/parse/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/doc-editor/restore/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/doc-editor/restore/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/doc-editor/restore/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/document/sign/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/document/sign/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/document/sign/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/documents/move/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/documents/move/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/documents/move/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/documents/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/documents/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/documents/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/files/remote/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/files/remote/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/files/remote/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/firecrawl/local/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/firecrawl/local/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/firecrawl/local/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/gpu-activity/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/gpu-activity/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/gpu-activity/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/groups/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/groups/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/groups/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/index/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/index/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/index/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/integrations/[integration]/callback/route.js +4 -0
- package/.next/standalone/apps/web/.next/server/app/api/integrations/[integration]/callback/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/integrations/[integration]/callback/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/integrations/[integration]/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/integrations/[integration]/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/integrations/[integration]/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/integrations/notion/callback/route.js +19 -0
- package/.next/standalone/apps/web/.next/server/app/api/integrations/notion/callback/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/integrations/notion/callback/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/integrations/notion/route.js +11 -0
- package/.next/standalone/apps/web/.next/server/app/api/integrations/notion/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/integrations/notion/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/integrations/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/integrations/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/integrations/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/jobs/[id]/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/jobs/[id]/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/jobs/[id]/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/jobs/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/jobs/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/jobs/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/marketplace/[toolId]/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/marketplace/[toolId]/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/marketplace/[toolId]/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/marketplace/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/marketplace/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/marketplace/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/mcp/[connectionId]/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/mcp/[connectionId]/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/mcp/[connectionId]/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/mcp/[connectionId]/test/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/mcp/[connectionId]/test/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/mcp/[connectionId]/test/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/mcp/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/mcp/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/[id]/frame/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/[id]/frame/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/[id]/frame/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/[id]/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/[id]/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/[id]/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/inspect/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/inspect/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/inspect/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/jobs/[id]/approval/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/jobs/[id]/approval/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/jobs/[id]/approval/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/jobs/[id]/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/jobs/[id]/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/jobs/[id]/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/process/route.js +2 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/process/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/process/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/stream/route.js +5 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/stream/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/media/stream/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/models/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/models/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/models/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/parse-file/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/parse-file/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/parse-file/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/pdf-page/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/pdf-page/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/pdf-page/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/projects/deployments/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/projects/deployments/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/projects/deployments/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/projects/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/projects/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/projects/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/projects/runtime/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/projects/runtime/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/projects/runtime/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/proxy/verify/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/proxy/verify/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/proxy/verify/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/sandbox/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/sandbox/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/sandbox/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/sandbox/verify/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/sandbox/verify/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/sandbox/verify/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/bing/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/bing/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/bing/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/brave/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/brave/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/brave/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/exa/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/exa/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/exa/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/google/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/google/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/google/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/tavily/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/tavily/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/tavily/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/verify/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/verify/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/search/verify/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/system/cache/route.js +2 -0
- package/.next/standalone/apps/web/.next/server/app/api/system/cache/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/system/cache/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tabular/query/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tabular/query/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tabular/query/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tabular/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tabular/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tabular/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/host/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/host/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/host/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/runtime/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/runtime/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/runtime/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/usage/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/usage/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/usage/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/usage-request/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/usage-request/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/usage-request/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/verify/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/verify/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/verify/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/connection/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/connection/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/connection/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/usage/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/usage/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/usage/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/usage-request/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/usage-request/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/usage-request/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/upload-file/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/upload-file/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/upload-file/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/uploads/[...slug]/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/uploads/[...slug]/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/uploads/[...slug]/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/vector-stores/install/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/vector-stores/install/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/vector-stores/install/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/vector-stores/status/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/vector-stores/status/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/api/vector-stores/status/route_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/chat/[id]/page.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/chat/[id]/page.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/chat/[id]/page_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/chat/page.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/chat/page.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/chat/page_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/chat.html +1 -0
- package/.next/standalone/apps/web/.next/server/app/chat.meta +34 -0
- package/.next/standalone/apps/web/.next/server/app/chat.rsc +28 -0
- package/.next/standalone/apps/web/.next/server/app/chat.segments/_full.segment.rsc +28 -0
- package/.next/standalone/apps/web/.next/server/app/chat.segments/_tree.segment.rsc +3 -0
- package/.next/standalone/apps/web/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +34 -0
- package/.next/standalone/apps/web/.next/server/app/data/page.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/data/page.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/data/page_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/data.html +1 -0
- package/.next/standalone/apps/web/.next/server/app/data.meta +34 -0
- package/.next/standalone/apps/web/.next/server/app/data.rsc +27 -0
- package/.next/standalone/apps/web/.next/server/app/data.segments/_full.segment.rsc +27 -0
- package/.next/standalone/apps/web/.next/server/app/data.segments/_tree.segment.rsc +2 -0
- package/.next/standalone/apps/web/.next/server/app/data.segments/data/__PAGE__.segment.rsc +33 -0
- package/.next/standalone/apps/web/.next/server/app/favicon.ico/route.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/favicon.ico/route.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/favicon.ico.body +0 -0
- package/.next/standalone/apps/web/.next/server/app/favicon.ico.meta +1 -0
- package/.next/standalone/apps/web/.next/server/app/index.html +1 -0
- package/.next/standalone/apps/web/.next/server/app/index.meta +29 -0
- package/.next/standalone/apps/web/.next/server/app/index.rsc +25 -0
- package/.next/standalone/apps/web/.next/server/app/index.segments/__PAGE__.segment.rsc +30 -0
- package/.next/standalone/apps/web/.next/server/app/index.segments/_full.segment.rsc +25 -0
- package/.next/standalone/apps/web/.next/server/app/index.segments/_tree.segment.rsc +2 -0
- package/.next/standalone/apps/web/.next/server/app/page.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/page.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/settings/page.js +216 -0
- package/.next/standalone/apps/web/.next/server/app/settings/page.js.nft.json +1 -0
- package/.next/standalone/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/app/settings.html +1 -0
- package/.next/standalone/apps/web/.next/server/app/settings.meta +34 -0
- package/.next/standalone/apps/web/.next/server/app/settings.rsc +30 -0
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_full.segment.rsc +30 -0
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_tree.segment.rsc +2 -0
- package/.next/standalone/apps/web/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +36 -0
- package/.next/standalone/apps/web/.next/server/app-paths-manifest.json +94 -0
- package/.next/standalone/apps/web/.next/server/chunks/101.js +24 -0
- package/.next/standalone/apps/web/.next/server/chunks/1149.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/1309.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/1389.js +5 -0
- package/.next/standalone/apps/web/.next/server/chunks/1479.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/1602.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/1778.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/1810.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/1953.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/1999.js +6 -0
- package/.next/standalone/apps/web/.next/server/chunks/2097.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/2129.js +47 -0
- package/.next/standalone/apps/web/.next/server/chunks/2411.js +193 -0
- package/.next/standalone/apps/web/.next/server/chunks/2500.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/2552.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/2595.js +45 -0
- package/.next/standalone/apps/web/.next/server/chunks/2883.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/2918.js +212 -0
- package/.next/standalone/apps/web/.next/server/chunks/309.js +2 -0
- package/.next/standalone/apps/web/.next/server/chunks/3122.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/3257.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/3287.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/3304.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/340.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/3545.js +6 -0
- package/.next/standalone/apps/web/.next/server/chunks/3577.js +27 -0
- package/.next/standalone/apps/web/.next/server/chunks/3609.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/364.js +36 -0
- package/.next/standalone/apps/web/.next/server/chunks/3642.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/365.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/4292.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/4327.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/4375.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/4441.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/4915.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/5072.js +47 -0
- package/.next/standalone/apps/web/.next/server/chunks/5078.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/5523.js +10 -0
- package/.next/standalone/apps/web/.next/server/chunks/5701.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/5760.js +11 -0
- package/.next/standalone/apps/web/.next/server/chunks/5770.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/588.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/5884.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/5937.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/5995.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/600.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/6014.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/6066.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/6149.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/6199.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/620.js +78 -0
- package/.next/standalone/apps/web/.next/server/chunks/6207.js +14 -0
- package/.next/standalone/apps/web/.next/server/chunks/63.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/6457.js +2 -0
- package/.next/standalone/apps/web/.next/server/chunks/6479.js +35 -0
- package/.next/standalone/apps/web/.next/server/chunks/657.js +84 -0
- package/.next/standalone/apps/web/.next/server/chunks/6573.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/6814.js +18 -0
- package/.next/standalone/apps/web/.next/server/chunks/6909.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/7010.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/7289.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/7324.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/741.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/7448.js +165 -0
- package/.next/standalone/apps/web/.next/server/chunks/7459.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/7613.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/7945.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/7974.js +20 -0
- package/.next/standalone/apps/web/.next/server/chunks/8005.js +41 -0
- package/.next/standalone/apps/web/.next/server/chunks/8052.js +55 -0
- package/.next/standalone/apps/web/.next/server/chunks/8169.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/8299.js +2 -0
- package/.next/standalone/apps/web/.next/server/chunks/8358.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/843.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/8437.js +12 -0
- package/.next/standalone/apps/web/.next/server/chunks/8840.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/8952.js +1859 -0
- package/.next/standalone/apps/web/.next/server/chunks/9016.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/9028.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/9077.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/915.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/9248.js +256 -0
- package/.next/standalone/apps/web/.next/server/chunks/9301.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/9319.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/9439.js +24 -0
- package/.next/standalone/apps/web/.next/server/chunks/9480.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/9579.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/9768.js +4 -0
- package/.next/standalone/apps/web/.next/server/chunks/9837.js +121 -0
- package/.next/standalone/apps/web/.next/server/chunks/9851.js +1 -0
- package/.next/standalone/apps/web/.next/server/chunks/static/media/pdf.worker.min.63b810cd.mjs +6 -0
- package/.next/standalone/apps/web/.next/server/functions-config-manifest.json +82 -0
- package/.next/standalone/apps/web/.next/server/middleware-build-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/middleware-manifest.json +6 -0
- package/.next/standalone/apps/web/.next/server/middleware-react-loadable-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/next-font-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/next-font-manifest.json +1 -0
- package/.next/standalone/apps/web/.next/server/pages/404.html +1 -0
- package/.next/standalone/apps/web/.next/server/pages/500.html +1 -0
- package/.next/standalone/apps/web/.next/server/pages-manifest.json +4 -0
- package/.next/standalone/apps/web/.next/server/prefetch-hints.json +95 -0
- package/.next/standalone/apps/web/.next/server/server-reference-manifest.js +1 -0
- package/.next/standalone/apps/web/.next/server/server-reference-manifest.json +1 -0
- package/.next/standalone/apps/web/.next/server/webpack-runtime.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/0ed6b8a9-7f39ffa51cd4d7d3.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/1788-3ec11e3d6d6986e9.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/1986-2eb6c09f2f556e84.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/2038-1dc8a3028545edab.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/217c94bb-b2b832568a17950f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/227-7f3dac471f0eb3b0.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/2634.803b324122bd1d49.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/2928-8a2d9ed34f45623a.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/3182.74de4aadefc6e951.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/3259.41d1a9e21c751dca.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/3853-f4d7f7a9e7afd752.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/4112ad79.b782044759df4bc8.js +45 -0
- package/.next/standalone/apps/web/.next/static/chunks/4765-48a3b66331719b80.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/4975-4de53a9574e52468.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/5833-f7b1cb2153cd52ab.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/6462-9d67b69d990b1234.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/6837-67b91a5109edf8a8.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/6880.4300fd5c0fd7f17a.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/6904-f77e06e821ecae13.js +52 -0
- package/.next/standalone/apps/web/.next/static/chunks/7534-8b910687515b8403.js +6 -0
- package/.next/standalone/apps/web/.next/static/chunks/7857.ce5356f660fb54a1.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/8226-c6f5131375b6df6a.js +3 -0
- package/.next/standalone/apps/web/.next/static/chunks/9734-c7b94c9bf40c9b2e.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/9779-5dc3db110e05c070.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/9987-45c7dfa599210f7e.js +78 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/_global-error/page-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/_not-found/page-7007da1b6a809c3d.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/add/page-d423813ec2556ef0.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/analytics/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/chat/feedback/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/chat/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/chat/status/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/config/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/config/test/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/config/test-embedding/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/config/test-llm/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/config/test-provider/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/config/verify/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/connections/[channelId]/oauth/callback/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/connections/[channelId]/oauth/start/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/connections/[channelId]/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/connections/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/connections/tunnel/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/demo/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/deploy/ssh/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/deploy/verify/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/describe-image/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/doc-editor/edit/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/doc-editor/export/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/doc-editor/extract-text/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/doc-editor/parse/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/doc-editor/restore/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/document/sign/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/documents/move/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/documents/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/files/remote/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/firecrawl/local/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/gpu-activity/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/groups/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/index/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/[integration]/callback/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/[integration]/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/notion/callback/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/notion/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/jobs/[id]/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/jobs/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/marketplace/[toolId]/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/marketplace/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/mcp/[connectionId]/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/mcp/[connectionId]/test/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/mcp/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/media/[id]/frame/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/media/[id]/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/media/inspect/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/media/jobs/[id]/approval/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/media/jobs/[id]/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/media/process/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/media/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/media/stream/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/models/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/parse-file/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/pdf-page/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/projects/deployments/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/projects/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/projects/runtime/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/proxy/verify/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/sandbox/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/sandbox/verify/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/search/bing/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/search/brave/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/search/exa/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/search/google/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/search/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/search/tavily/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/search/verify/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/system/cache/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/tabular/query/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/tabular/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/tools/[toolId]/host/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/tools/[toolId]/runtime/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/tools/[toolId]/usage/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/tools/[toolId]/usage-request/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/tools/[toolId]/verify/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/tools/video-intelligence/connection/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/tools/video-intelligence/usage/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/tools/video-intelligence/usage-request/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/upload-file/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/uploads/[...slug]/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/vector-stores/install/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/api/vector-stores/status/route-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/chat/[id]/page-579d3515fee9f89a.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/chat/page-bec03ef7408245b1.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/data/page-02e56e093071379d.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/layout-4b8ce98cb78f7113.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/page-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/settings/page-485ea820c1111580.js +214 -0
- package/.next/standalone/apps/web/.next/static/chunks/app/template-6c3f1e7c9216df6c.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/ca017448-ac5fddb4e8d1ca39.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/db534642-baa98c214832026c.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/framework-ae648e3ae9d64766.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/main-25c6b3b10ba0a4a3.js +5 -0
- package/.next/standalone/apps/web/.next/static/chunks/main-app-ecde5d6ff9b76409.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/next/dist/client/components/builtin/app-error-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/next/dist/client/components/builtin/forbidden-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/next/dist/client/components/builtin/global-error-ab826e81c411f616.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/next/dist/client/components/builtin/not-found-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/next/dist/client/components/builtin/unauthorized-0d4f12c4c9cbf85f.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/webpack-8c15908ca85a5a46.js +1 -0
- package/.next/standalone/apps/web/.next/static/css/063aaab22a52e4b4.css +1 -0
- package/.next/standalone/apps/web/.next/static/css/a2d2ae3b76e6a5b6.css +1 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_AMS-Regular.1608a09b.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_AMS-Regular.4aafdb68.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_AMS-Regular.a79f1c31.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Caligraphic-Bold.b6770918.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Caligraphic-Bold.cce5b8ec.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Caligraphic-Bold.ec17d132.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Caligraphic-Regular.07ef19e7.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Caligraphic-Regular.55fac258.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Caligraphic-Regular.dad44a7f.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Fraktur-Bold.9f256b85.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Fraktur-Bold.b18f59e1.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Fraktur-Bold.d42a5579.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Fraktur-Regular.7c187121.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Fraktur-Regular.d3c882a6.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Fraktur-Regular.ed38e79f.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Bold.b74a1a8b.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Bold.c3fb5ac2.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Bold.d181c465.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-BoldItalic.6f2bb1df.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-BoldItalic.70d8b0a5.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-BoldItalic.e3f82f9d.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Italic.47373d1e.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Italic.8916142b.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Italic.9024d815.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Regular.0462f03b.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Regular.7f51fe03.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Regular.b7f8fe9b.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Math-BoldItalic.572d331f.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Math-BoldItalic.a879cf83.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Math-BoldItalic.f1035d8d.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Math-Italic.5295ba48.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Math-Italic.939bc644.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Math-Italic.f28c23ac.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Bold.8c5b5494.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Bold.94e1e8dc.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Bold.bf59d231.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Italic.3b1e59b3.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Italic.7c9bc82b.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Italic.b4c20c84.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Regular.74048478.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Regular.ba21ed5f.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Regular.d4d7ba48.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Script-Regular.03e9641d.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Script-Regular.07505710.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Script-Regular.fe9cbbe1.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Size1-Regular.e1e279cb.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Size1-Regular.eae34984.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Size1-Regular.fabc004a.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Size2-Regular.57727022.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Size2-Regular.5916a24f.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Size2-Regular.d6b476ec.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Size3-Regular.9acaf01c.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Size3-Regular.a144ef58.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Size3-Regular.b4230e7e.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Size4-Regular.10d95fd3.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Size4-Regular.7a996c9d.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Size4-Regular.fbccdabe.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Typewriter-Regular.6258592b.woff +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Typewriter-Regular.a8709e36.woff2 +0 -0
- package/.next/standalone/apps/web/.next/static/media/KaTeX_Typewriter-Regular.d97aaf4a.ttf +0 -0
- package/.next/standalone/apps/web/.next/static/media/pdf.worker.min.b6d469c6.mjs +6 -0
- package/.next/standalone/apps/web/.next/static/omDbbCzcQ9kxlZ8Gz0yln/_buildManifest.js +1 -0
- package/.next/standalone/apps/web/.next/static/omDbbCzcQ9kxlZ8Gz0yln/_ssgManifest.js +1 -0
- package/.next/standalone/apps/web/.next/types/cache-life.d.ts +146 -0
- package/.next/standalone/apps/web/.next/types/root-params.d.ts +3 -0
- package/.next/standalone/apps/web/.next/types/routes.d.ts +161 -0
- package/.next/standalone/apps/web/.next/types/validator.ts +862 -0
- package/.next/standalone/apps/web/AGENTS.md +9 -0
- package/.next/standalone/apps/web/CLAUDE.md +1 -0
- package/.next/standalone/apps/web/app/api/groups/route.test.ts +86 -0
- package/.next/standalone/apps/web/app/api/index/route.test.ts +55 -0
- package/.next/standalone/apps/web/app/api/marketplace/[toolId]/route.test.ts +83 -0
- package/.next/standalone/apps/web/app/api/marketplace/route.test.ts +117 -0
- package/.next/standalone/apps/web/app/api/tools/[toolId]/verify/route.test.ts +66 -0
- package/.next/standalone/apps/web/app/favicon.ico +0 -0
- package/.next/standalone/apps/web/app/globals.css +406 -0
- package/.next/standalone/apps/web/app/themes.css +234 -0
- package/.next/standalone/apps/web/bin/larkup.js +528 -0
- package/.next/standalone/apps/web/components/alerts/generic-alert.tsx +76 -0
- package/.next/standalone/apps/web/components/analytics/analytics-dashboard.tsx +517 -0
- package/.next/standalone/apps/web/components/chat/canvas/doc-editor-provider.tsx +331 -0
- package/.next/standalone/apps/web/components/chat/canvas/document-canvas.tsx +98 -0
- package/.next/standalone/apps/web/components/chat/canvas/document-field.tsx +167 -0
- package/.next/standalone/apps/web/components/chat/canvas/document-viewer.tsx +446 -0
- package/.next/standalone/apps/web/components/chat/canvas/file-attachment-button.tsx +88 -0
- package/.next/standalone/apps/web/components/chat/canvas/file-chip.tsx +147 -0
- package/.next/standalone/apps/web/components/chat/message-actions.tsx +96 -0
- package/.next/standalone/apps/web/components/chat/message-item.tsx +1404 -0
- package/.next/standalone/apps/web/components/chat/message-queue.tsx +86 -0
- package/.next/standalone/apps/web/components/chat/reasoning.tsx +182 -0
- package/.next/standalone/apps/web/components/chat/tools/chat-card.tsx +97 -0
- package/.next/standalone/apps/web/components/chat/tools/chat-chart.tsx +554 -0
- package/.next/standalone/apps/web/components/chat/tools/chat-citations.tsx +152 -0
- package/.next/standalone/apps/web/components/chat/tools/chat-data-table.tsx +377 -0
- package/.next/standalone/apps/web/components/chat/tools/chat-file-export.tsx +49 -0
- package/.next/standalone/apps/web/components/chat/tools/chat-grid.tsx +99 -0
- package/.next/standalone/apps/web/components/chat/tools/chat-media-preview.tsx +465 -0
- package/.next/standalone/apps/web/components/chat/tools/chat-metrics.tsx +76 -0
- package/.next/standalone/apps/web/components/chat/tools/chat-sandbox-result.tsx +130 -0
- package/.next/standalone/apps/web/components/chat/tools/chat-signature-request.tsx +809 -0
- package/.next/standalone/apps/web/components/chat/tools/chat-tabs.tsx +59 -0
- package/.next/standalone/apps/web/components/chat/tools/corpus-data-result.tsx +194 -0
- package/.next/standalone/apps/web/components/chat/tools/knowledge-base-result.tsx +345 -0
- package/.next/standalone/apps/web/components/chat/tools/visual-placement-modal.tsx +314 -0
- package/.next/standalone/apps/web/components/chat/tools/visualization-tabs.tsx +37 -0
- package/.next/standalone/apps/web/components/configure/custom-model-modal.tsx +214 -0
- package/.next/standalone/apps/web/components/configure/store-fields.tsx +129 -0
- package/.next/standalone/apps/web/components/data/corpus-panel.tsx +1124 -0
- package/.next/standalone/apps/web/components/data/data-entry-mode-switch.tsx +53 -0
- package/.next/standalone/apps/web/components/data/data-primary-action.ts +6 -0
- package/.next/standalone/apps/web/components/data/groups-panel.tsx +526 -0
- package/.next/standalone/apps/web/components/data/integration-resources-panel.tsx +281 -0
- package/.next/standalone/apps/web/components/data/integrations-panel.tsx +397 -0
- package/.next/standalone/apps/web/components/data/jobs-panel.tsx +487 -0
- package/.next/standalone/apps/web/components/data/jobs-tracking-button.tsx +221 -0
- package/.next/standalone/apps/web/components/data/live-media-progress.tsx +79 -0
- package/.next/standalone/apps/web/components/data/media-indexing-jobs-panel.tsx +190 -0
- package/.next/standalone/apps/web/components/data/media-panel.tsx +2883 -0
- package/.next/standalone/apps/web/components/data/notion-panel.tsx +405 -0
- package/.next/standalone/apps/web/components/data/paste-panel.tsx +100 -0
- package/.next/standalone/apps/web/components/data/scrape-panel.tsx +1275 -0
- package/.next/standalone/apps/web/components/data/tabular-preview.tsx +205 -0
- package/.next/standalone/apps/web/components/data/tool-indexing-dialog.tsx +210 -0
- package/.next/standalone/apps/web/components/data/upload-panel.tsx +1306 -0
- package/.next/standalone/apps/web/components/data/web-crawler-status.tsx +131 -0
- package/.next/standalone/apps/web/components/index/index-action-dialog.tsx +545 -0
- package/.next/standalone/apps/web/components/index/index-workspace.tsx +406 -0
- package/.next/standalone/apps/web/components/onboarding/welcome-screen.tsx +596 -0
- package/.next/standalone/apps/web/components/projects/delete-project-dialog.tsx +63 -0
- package/.next/standalone/apps/web/components/projects/project-form-dialog.tsx +97 -0
- package/.next/standalone/apps/web/components/projects/project-switcher.tsx +136 -0
- package/.next/standalone/apps/web/components/settings/general/agent-customization-section.tsx +619 -0
- package/.next/standalone/apps/web/components/settings/general/cache-management-card.tsx +176 -0
- package/.next/standalone/apps/web/components/settings/general/general-section.tsx +333 -0
- package/.next/standalone/apps/web/components/settings/general/mcp-connections-section.tsx +893 -0
- package/.next/standalone/apps/web/components/settings/general/model-combobox.tsx +235 -0
- package/.next/standalone/apps/web/components/settings/general/models-section.tsx +918 -0
- package/.next/standalone/apps/web/components/settings/general/sandbox-section.tsx +382 -0
- package/.next/standalone/apps/web/components/settings/general/search-scraping-section.tsx +749 -0
- package/.next/standalone/apps/web/components/settings/general/storage-indexing-section.tsx +389 -0
- package/.next/standalone/apps/web/components/settings/hub/marketplace-section.tsx +574 -0
- package/.next/standalone/apps/web/components/settings/hub/marketplace-tools-settings.tsx +1247 -0
- package/.next/standalone/apps/web/components/settings/runtime/connections-tab.tsx +1045 -0
- package/.next/standalone/apps/web/components/settings/runtime/deploy/index.ts +4 -0
- package/.next/standalone/apps/web/components/settings/runtime/deploy/project-deploy-button.tsx +245 -0
- package/.next/standalone/apps/web/components/settings/runtime/deploy/project-deploy-view.tsx +1592 -0
- package/.next/standalone/apps/web/components/settings/runtime/deploy/use-vps-deploy.ts +114 -0
- package/.next/standalone/apps/web/components/settings/runtime/deploy/vps-terminal-dialog.tsx +391 -0
- package/.next/standalone/apps/web/components/settings/runtime/playground-tab.tsx +359 -0
- package/.next/standalone/apps/web/components/settings/runtime/runtime-section.tsx +1001 -0
- package/.next/standalone/apps/web/components/settings/runtime/widget-snippets.ts +15 -0
- package/.next/standalone/apps/web/components/settings/runtime/widget-tab.tsx +426 -0
- package/.next/standalone/apps/web/components/settings/settings-layout.tsx +123 -0
- package/.next/standalone/apps/web/components/sidebar.tsx +208 -0
- package/.next/standalone/apps/web/components/topnav.tsx +92 -0
- package/.next/standalone/apps/web/components/ui/alert-dialog.tsx +187 -0
- package/.next/standalone/apps/web/components/ui/alert.tsx +76 -0
- package/.next/standalone/apps/web/components/ui/badge.tsx +52 -0
- package/.next/standalone/apps/web/components/ui/button.tsx +58 -0
- package/.next/standalone/apps/web/components/ui/card.tsx +92 -0
- package/.next/standalone/apps/web/components/ui/checkbox.tsx +28 -0
- package/.next/standalone/apps/web/components/ui/collapsible.tsx +21 -0
- package/.next/standalone/apps/web/components/ui/command.tsx +181 -0
- package/.next/standalone/apps/web/components/ui/dialog.tsx +138 -0
- package/.next/standalone/apps/web/components/ui/dropdown-menu.tsx +267 -0
- package/.next/standalone/apps/web/components/ui/input-group.tsx +146 -0
- package/.next/standalone/apps/web/components/ui/input.tsx +20 -0
- package/.next/standalone/apps/web/components/ui/label.tsx +20 -0
- package/.next/standalone/apps/web/components/ui/line-tabs.tsx +59 -0
- package/.next/standalone/apps/web/components/ui/popover.tsx +77 -0
- package/.next/standalone/apps/web/components/ui/progress.tsx +83 -0
- package/.next/standalone/apps/web/components/ui/provider-icon.tsx +165 -0
- package/.next/standalone/apps/web/components/ui/scroll-area.tsx +55 -0
- package/.next/standalone/apps/web/components/ui/select.tsx +231 -0
- package/.next/standalone/apps/web/components/ui/separator.tsx +25 -0
- package/.next/standalone/apps/web/components/ui/sheet.tsx +125 -0
- package/.next/standalone/apps/web/components/ui/skeleton.tsx +14 -0
- package/.next/standalone/apps/web/components/ui/slider.tsx +52 -0
- package/.next/standalone/apps/web/components/ui/switch.tsx +32 -0
- package/.next/standalone/apps/web/components/ui/table.tsx +116 -0
- package/.next/standalone/apps/web/components/ui/tabs.tsx +77 -0
- package/.next/standalone/apps/web/components/ui/textarea.tsx +18 -0
- package/.next/standalone/apps/web/components/ui/tooltip.tsx +54 -0
- package/.next/standalone/apps/web/components.json +21 -0
- package/.next/standalone/apps/web/hooks/use-channel-oauth.ts +42 -0
- package/.next/standalone/apps/web/hooks/use-copy-to-clipboard.ts +25 -0
- package/.next/standalone/apps/web/hooks/use-integration-auth.ts +37 -0
- package/.next/standalone/apps/web/hooks/use-live-media-progress.ts +71 -0
- package/.next/standalone/apps/web/hooks/use-notion-auth.ts +63 -0
- package/.next/standalone/apps/web/lib/browser-cache.test.ts +32 -0
- package/.next/standalone/apps/web/lib/browser-cache.ts +17 -0
- package/.next/standalone/apps/web/lib/cache-size.test.ts +15 -0
- package/.next/standalone/apps/web/lib/cache-size.ts +11 -0
- package/.next/standalone/apps/web/lib/chat/assistant-source-scope.test.ts +43 -0
- package/.next/standalone/apps/web/lib/chat/chart-config.test.ts +144 -0
- package/.next/standalone/apps/web/lib/chat/chat-media-preview.test.ts +31 -0
- package/.next/standalone/apps/web/lib/chat/conversation-memory.test.ts +390 -0
- package/.next/standalone/apps/web/lib/chat/data-export.test.ts +224 -0
- package/.next/standalone/apps/web/lib/chat/live-tool-progress.test.ts +76 -0
- package/.next/standalone/apps/web/lib/chat/live-tool-progress.ts +69 -0
- package/.next/standalone/apps/web/lib/chat/media-retrieval-routing.test.ts +42 -0
- package/.next/standalone/apps/web/lib/chat/media-source-routing.test.ts +118 -0
- package/.next/standalone/apps/web/lib/chat/message-feedback.test.ts +102 -0
- package/.next/standalone/apps/web/lib/chat/message-input.test.ts +30 -0
- package/.next/standalone/apps/web/lib/chat/retrieval-ranking.test.ts +62 -0
- package/.next/standalone/apps/web/lib/chat/retrieval-routing.test.ts +80 -0
- package/.next/standalone/apps/web/lib/chat/tabular-dataset-routing.test.ts +83 -0
- package/.next/standalone/apps/web/lib/chat/tabular-query-plan.test.ts +148 -0
- package/.next/standalone/apps/web/lib/chat/tabular-routing.test.ts +109 -0
- package/.next/standalone/apps/web/lib/chat/tabular-sandbox-files.test.ts +100 -0
- package/.next/standalone/apps/web/lib/chat/tabular-visualization.test.ts +89 -0
- package/.next/standalone/apps/web/lib/chat/tool-call-repair.test.ts +64 -0
- package/.next/standalone/apps/web/lib/chat/tool-context.test.ts +978 -0
- package/.next/standalone/apps/web/lib/chat/tool-output.test.ts +23 -0
- package/.next/standalone/apps/web/lib/chat/tool-output.ts +14 -0
- package/.next/standalone/apps/web/lib/chat/tool-registry.test.ts +19 -0
- package/.next/standalone/apps/web/lib/chat/video-rag-routing.test.ts +158 -0
- package/.next/standalone/apps/web/lib/chat/visual-routing.test.ts +140 -0
- package/.next/standalone/apps/web/lib/chat-supporting-clip.test.ts +16 -0
- package/.next/standalone/apps/web/lib/chat-supporting-clip.ts +16 -0
- package/.next/standalone/apps/web/lib/constants/stores.ts +12 -0
- package/.next/standalone/apps/web/lib/constants/tools.test.ts +26 -0
- package/.next/standalone/apps/web/lib/constants/tools.ts +178 -0
- package/.next/standalone/apps/web/lib/error-formatter.ts +30 -0
- package/.next/standalone/apps/web/lib/jobs-client.ts +25 -0
- package/.next/standalone/apps/web/lib/marketplace/tool-runtime-config.test.ts +217 -0
- package/.next/standalone/apps/web/lib/media/knowledge.test.ts +36 -0
- package/.next/standalone/apps/web/lib/media/pdf-inspection.test.ts +63 -0
- package/.next/standalone/apps/web/lib/media/pdf.ts +57 -0
- package/.next/standalone/apps/web/lib/media/progress.test.ts +208 -0
- package/.next/standalone/apps/web/lib/media/progress.ts +209 -0
- package/.next/standalone/apps/web/lib/media/source-identity.test.ts +33 -0
- package/.next/standalone/apps/web/lib/media/source-selection.test.ts +36 -0
- package/.next/standalone/apps/web/lib/media/source-selection.ts +47 -0
- package/.next/standalone/apps/web/lib/media/source-utils.test.ts +231 -0
- package/.next/standalone/apps/web/lib/media/tool-indexing-estimate.test.ts +28 -0
- package/.next/standalone/apps/web/lib/media/tool-indexing-estimate.ts +39 -0
- package/.next/standalone/apps/web/lib/media/video/quick-look.test.ts +81 -0
- package/.next/standalone/apps/web/lib/media/video-intelligence-adapter.test.ts +739 -0
- package/.next/standalone/apps/web/lib/media/video-intelligence-capacity.test.ts +104 -0
- package/.next/standalone/apps/web/lib/media/video-runtime-scope.test.ts +43 -0
- package/.next/standalone/apps/web/lib/release-metadata.test.ts +118 -0
- package/.next/standalone/apps/web/lib/remote-files.test.ts +53 -0
- package/.next/standalone/apps/web/lib/system-cache.test.ts +173 -0
- package/.next/standalone/apps/web/lib/utils.ts +6 -0
- package/.next/standalone/apps/web/next-env.d.ts +7 -0
- package/.next/standalone/apps/web/next.config.mjs +82 -0
- package/.next/standalone/apps/web/package.json +96 -0
- package/.next/standalone/apps/web/parse_log.mjs +67 -0
- package/.next/standalone/apps/web/postcss.config.mjs +8 -0
- package/.next/standalone/apps/web/public/docker.png +0 -0
- package/.next/standalone/apps/web/public/favicon.ico +0 -0
- package/.next/standalone/apps/web/public/github.svg +3 -0
- package/.next/standalone/apps/web/public/hetzner.svg +1 -0
- package/.next/standalone/apps/web/public/icons/Confluence.png +0 -0
- package/.next/standalone/apps/web/public/icons/Instagram.png +0 -0
- package/.next/standalone/apps/web/public/icons/Northflank.png +0 -0
- package/.next/standalone/apps/web/public/icons/Salesforce.png +0 -0
- package/.next/standalone/apps/web/public/icons/agentskills.png +0 -0
- package/.next/standalone/apps/web/public/icons/airtable.png +0 -0
- package/.next/standalone/apps/web/public/icons/asana.png +0 -0
- package/.next/standalone/apps/web/public/icons/ashby.png +0 -0
- package/.next/standalone/apps/web/public/icons/audio.png +0 -0
- package/.next/standalone/apps/web/public/icons/aws-kendra.png +0 -0
- package/.next/standalone/apps/web/public/icons/aws.svg +38 -0
- package/.next/standalone/apps/web/public/icons/azure-ai-search.png +0 -0
- package/.next/standalone/apps/web/public/icons/azure.svg +1 -0
- package/.next/standalone/apps/web/public/icons/bigquery.png +0 -0
- package/.next/standalone/apps/web/public/icons/bing.png +0 -0
- package/.next/standalone/apps/web/public/icons/bitbucket.png +0 -0
- package/.next/standalone/apps/web/public/icons/brave.png +0 -0
- package/.next/standalone/apps/web/public/icons/browserbase.png +0 -0
- package/.next/standalone/apps/web/public/icons/calendly.png +0 -0
- package/.next/standalone/apps/web/public/icons/chroma.png +0 -0
- package/.next/standalone/apps/web/public/icons/cloudflare.png +0 -0
- package/.next/standalone/apps/web/public/icons/cohere.svg +30 -0
- package/.next/standalone/apps/web/public/icons/databricks.png +0 -0
- package/.next/standalone/apps/web/public/icons/daytonaio.png +0 -0
- package/.next/standalone/apps/web/public/icons/daytonaio2.png +0 -0
- package/.next/standalone/apps/web/public/icons/deepgram.png +0 -0
- package/.next/standalone/apps/web/public/icons/deepl.png +0 -0
- package/.next/standalone/apps/web/public/icons/digital-ocean.webp +0 -0
- package/.next/standalone/apps/web/public/icons/discord.png +0 -0
- package/.next/standalone/apps/web/public/icons/e2b-2.png +0 -0
- package/.next/standalone/apps/web/public/icons/e2b.png +0 -0
- package/.next/standalone/apps/web/public/icons/elevenlabs.png +0 -0
- package/.next/standalone/apps/web/public/icons/email.png +0 -0
- package/.next/standalone/apps/web/public/icons/exa.png +0 -0
- package/.next/standalone/apps/web/public/icons/excel.png +0 -0
- package/.next/standalone/apps/web/public/icons/fal.png +0 -0
- package/.next/standalone/apps/web/public/icons/firecrawl.png +0 -0
- package/.next/standalone/apps/web/public/icons/firecrawl2.png +0 -0
- package/.next/standalone/apps/web/public/icons/flyio.jpeg +0 -0
- package/.next/standalone/apps/web/public/icons/gcp.svg +1 -0
- package/.next/standalone/apps/web/public/icons/gemini.svg +1 -0
- package/.next/standalone/apps/web/public/icons/gmail.png +0 -0
- package/.next/standalone/apps/web/public/icons/google-analytics.png +0 -0
- package/.next/standalone/apps/web/public/icons/google-calender.png +0 -0
- package/.next/standalone/apps/web/public/icons/google-docs.png +0 -0
- package/.next/standalone/apps/web/public/icons/google-drive.png +0 -0
- package/.next/standalone/apps/web/public/icons/google-maps.png +0 -0
- package/.next/standalone/apps/web/public/icons/google-meet.png +0 -0
- package/.next/standalone/apps/web/public/icons/google-sheets.png +0 -0
- package/.next/standalone/apps/web/public/icons/google-slides.png +0 -0
- package/.next/standalone/apps/web/public/icons/google-tasks.png +0 -0
- package/.next/standalone/apps/web/public/icons/google.png +0 -0
- package/.next/standalone/apps/web/public/icons/grok.png +0 -0
- package/.next/standalone/apps/web/public/icons/hubspot.png +0 -0
- package/.next/standalone/apps/web/public/icons/image.png +0 -0
- package/.next/standalone/apps/web/public/icons/jina.svg +1 -0
- package/.next/standalone/apps/web/public/icons/jira.png +0 -0
- package/.next/standalone/apps/web/public/icons/lancedb2.png +0 -0
- package/.next/standalone/apps/web/public/icons/linear.png +0 -0
- package/.next/standalone/apps/web/public/icons/linux.png +0 -0
- package/.next/standalone/apps/web/public/icons/looker.png +0 -0
- package/.next/standalone/apps/web/public/icons/luma.png +0 -0
- package/.next/standalone/apps/web/public/icons/mac.png +0 -0
- package/.next/standalone/apps/web/public/icons/markdown.png +0 -0
- package/.next/standalone/apps/web/public/icons/mcp.png +0 -0
- package/.next/standalone/apps/web/public/icons/mcp.svg +1 -0
- package/.next/standalone/apps/web/public/icons/messenger.svg +1 -0
- package/.next/standalone/apps/web/public/icons/microsoft-intra.png +0 -0
- package/.next/standalone/apps/web/public/icons/microsoft-onenote.png +0 -0
- package/.next/standalone/apps/web/public/icons/microsoft-planner.png +0 -0
- package/.next/standalone/apps/web/public/icons/microsoft-teams.png +0 -0
- package/.next/standalone/apps/web/public/icons/miro.png +0 -0
- package/.next/standalone/apps/web/public/icons/mistral.svg +469 -0
- package/.next/standalone/apps/web/public/icons/modal.png +0 -0
- package/.next/standalone/apps/web/public/icons/ngrok.png +0 -0
- package/.next/standalone/apps/web/public/icons/nomic.png +0 -0
- package/.next/standalone/apps/web/public/icons/onedrive.png +0 -0
- package/.next/standalone/apps/web/public/icons/openai.svg +1 -0
- package/.next/standalone/apps/web/public/icons/outlook-calendar.png +0 -0
- package/.next/standalone/apps/web/public/icons/outlook-email.png +0 -0
- package/.next/standalone/apps/web/public/icons/outlook.png +0 -0
- package/.next/standalone/apps/web/public/icons/pdf.png +0 -0
- package/.next/standalone/apps/web/public/icons/personio.png +0 -0
- package/.next/standalone/apps/web/public/icons/pgvector2.png +0 -0
- package/.next/standalone/apps/web/public/icons/phone.png +0 -0
- package/.next/standalone/apps/web/public/icons/pinecone.png +0 -0
- package/.next/standalone/apps/web/public/icons/pipedrive.png +0 -0
- package/.next/standalone/apps/web/public/icons/power-pi.png +0 -0
- package/.next/standalone/apps/web/public/icons/pylon.png +0 -0
- package/.next/standalone/apps/web/public/icons/python.png +0 -0
- package/.next/standalone/apps/web/public/icons/qdrant.svg +35 -0
- package/.next/standalone/apps/web/public/icons/revai.png +0 -0
- package/.next/standalone/apps/web/public/icons/revai.svg +1 -0
- package/.next/standalone/apps/web/public/icons/sap.png +0 -0
- package/.next/standalone/apps/web/public/icons/serpapi.svg +34 -0
- package/.next/standalone/apps/web/public/icons/serper.png +0 -0
- package/.next/standalone/apps/web/public/icons/servicenow.png +0 -0
- package/.next/standalone/apps/web/public/icons/sharepoint.png +0 -0
- package/.next/standalone/apps/web/public/icons/slack.png +0 -0
- package/.next/standalone/apps/web/public/icons/snowflake.png +0 -0
- package/.next/standalone/apps/web/public/icons/statistia.png +0 -0
- package/.next/standalone/apps/web/public/icons/stripe.png +0 -0
- package/.next/standalone/apps/web/public/icons/supabase.png +0 -0
- package/.next/standalone/apps/web/public/icons/tableau.png +0 -0
- package/.next/standalone/apps/web/public/icons/tavily.png +0 -0
- package/.next/standalone/apps/web/public/icons/telegram.png +0 -0
- package/.next/standalone/apps/web/public/icons/typescript.png +0 -0
- package/.next/standalone/apps/web/public/icons/vercel copy.svg +1 -0
- package/.next/standalone/apps/web/public/icons/vercel.svg +1 -0
- package/.next/standalone/apps/web/public/icons/vertex-ai.png +0 -0
- package/.next/standalone/apps/web/public/icons/video.png +0 -0
- package/.next/standalone/apps/web/public/icons/voyage-light.png +0 -0
- package/.next/standalone/apps/web/public/icons/weaviate.webp +0 -0
- package/.next/standalone/apps/web/public/icons/webcontainers.svg +11 -0
- package/.next/standalone/apps/web/public/icons/webhook.png +0 -0
- package/.next/standalone/apps/web/public/icons/whatsapp copy.png +0 -0
- package/.next/standalone/apps/web/public/icons/whatsapp.png +0 -0
- package/.next/standalone/apps/web/public/icons/windows.png +0 -0
- package/.next/standalone/apps/web/public/icons/word.png +0 -0
- package/.next/standalone/apps/web/public/icons/zendesk.png +0 -0
- package/.next/standalone/apps/web/public/icons/zoom.png +0 -0
- package/.next/standalone/apps/web/public/logo-light.png +0 -0
- package/.next/standalone/apps/web/public/logo-light2.png +0 -0
- package/.next/standalone/apps/web/public/logo.png +0 -0
- package/.next/standalone/apps/web/public/logo9.png +0 -0
- package/.next/standalone/apps/web/public/notion-white.png +0 -0
- package/.next/standalone/apps/web/public/notion.png +0 -0
- package/.next/standalone/apps/web/public/vercel.svg +1 -0
- package/.next/standalone/apps/web/scripts/prepare-standalone.mjs +153 -0
- package/.next/standalone/apps/web/server.js +44 -0
- package/.next/standalone/apps/web/store/chat-store.ts +19 -0
- package/.next/standalone/apps/web/store/connections-store.ts +276 -0
- package/.next/standalone/apps/web/store/deploy-store.ts +90 -0
- package/.next/standalone/apps/web/store/scrape-store.ts +76 -0
- package/.next/standalone/apps/web/tsconfig.json +41 -0
- package/.next/standalone/apps/web/verify-models.mjs +133 -0
- package/.next/standalone/apps/web/vitest.config.ts +15 -0
- package/package.json +1 -1
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
export interface MediaProgressStep {
|
|
2
|
+
stage: string;
|
|
3
|
+
status: 'waiting' | 'running' | 'completed' | 'skipped' | 'failed';
|
|
4
|
+
percent?: number;
|
|
5
|
+
current?: number;
|
|
6
|
+
total?: number;
|
|
7
|
+
unit?: string;
|
|
8
|
+
estimatedRemainingSeconds?: number;
|
|
9
|
+
elapsedSeconds?: number;
|
|
10
|
+
sequence?: number;
|
|
11
|
+
message?: string;
|
|
12
|
+
startedAt?: string;
|
|
13
|
+
updatedAt?: string;
|
|
14
|
+
finishedAt?: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Use the current attempt rather than the original upload time after a retry. */
|
|
18
|
+
export function mediaProcessingStartedAt(asset: {
|
|
19
|
+
createdAt: string;
|
|
20
|
+
processingStartedAt?: string;
|
|
21
|
+
}): string {
|
|
22
|
+
return asset.processingStartedAt ?? asset.createdAt;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Returns the completed attempt duration when both persisted timestamps exist. */
|
|
26
|
+
export function completedMediaProcessingSeconds(asset: {
|
|
27
|
+
processingStatus: string;
|
|
28
|
+
processingStartedAt?: string;
|
|
29
|
+
processingSteps?: MediaProgressStep[];
|
|
30
|
+
}): number | null {
|
|
31
|
+
if (asset.processingStatus !== 'completed' || !asset.processingStartedAt) return null;
|
|
32
|
+
|
|
33
|
+
const startedAt = Date.parse(asset.processingStartedAt);
|
|
34
|
+
if (!Number.isFinite(startedAt)) return null;
|
|
35
|
+
|
|
36
|
+
const completedSteps =
|
|
37
|
+
asset.processingSteps
|
|
38
|
+
?.map((step) => Date.parse(step.finishedAt ?? ''))
|
|
39
|
+
.filter(Number.isFinite) ?? [];
|
|
40
|
+
if (completedSteps.length === 0) return null;
|
|
41
|
+
const finishedAt = Math.max(...completedSteps);
|
|
42
|
+
if (!Number.isFinite(finishedAt) || finishedAt < startedAt) return null;
|
|
43
|
+
return Math.round((finishedAt - startedAt) / 1_000);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const STAGE_LABELS: Record<string, string> = {
|
|
47
|
+
download: 'Download',
|
|
48
|
+
prepare: 'Cloud video preparation',
|
|
49
|
+
extract: 'Media extraction',
|
|
50
|
+
transcribe: 'Speech timeline',
|
|
51
|
+
vision: 'Visual analysis',
|
|
52
|
+
synthesize: 'Knowledge notes',
|
|
53
|
+
index: 'Search indexing',
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/** The most recently updated running stage is the primary visible work. */
|
|
57
|
+
export function primaryRunningMediaStep<T extends MediaProgressStep>(
|
|
58
|
+
steps: T[] | undefined,
|
|
59
|
+
): T | undefined {
|
|
60
|
+
return steps
|
|
61
|
+
?.filter((step) => step.status === 'running')
|
|
62
|
+
.reduce<T | undefined>((latest, step) => {
|
|
63
|
+
if (!latest) return step;
|
|
64
|
+
const latestAt = Date.parse(latest.updatedAt ?? latest.startedAt ?? '');
|
|
65
|
+
const stepAt = Date.parse(step.updatedAt ?? step.startedAt ?? '');
|
|
66
|
+
if (!Number.isFinite(latestAt)) return step;
|
|
67
|
+
return Number.isFinite(stepAt) && stepAt >= latestAt ? step : latest;
|
|
68
|
+
}, undefined);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function mediaStepProgress(step: MediaProgressStep | undefined): number | null {
|
|
72
|
+
if (!step) return null;
|
|
73
|
+
if (typeof step.percent === 'number' && Number.isFinite(step.percent)) {
|
|
74
|
+
return Math.max(0, Math.min(100, step.percent));
|
|
75
|
+
}
|
|
76
|
+
if (typeof step.current === 'number' && typeof step.total === 'number' && step.total > 0) {
|
|
77
|
+
return Math.max(0, Math.min(100, (step.current / step.total) * 100));
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Keep sub-percent worker movement visible without noisy trailing zeroes. */
|
|
83
|
+
export function formatMediaProgressPercent(value: number): string {
|
|
84
|
+
const bounded = Math.max(0, Math.min(100, Number.isFinite(value) ? value : 0));
|
|
85
|
+
const rounded = Math.round(bounded * 10) / 10;
|
|
86
|
+
return Number.isInteger(rounded) ? String(rounded) : rounded.toFixed(1);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Return the latest bounded worker measurement for this indexing attempt. */
|
|
90
|
+
export function smoothMediaProcessingProgress(
|
|
91
|
+
asset: {
|
|
92
|
+
processingProgress?: number;
|
|
93
|
+
processingStatus: string;
|
|
94
|
+
processingPaused?: boolean;
|
|
95
|
+
durationSecs?: number;
|
|
96
|
+
processingSteps?: MediaProgressStep[];
|
|
97
|
+
},
|
|
98
|
+
_now = Date.now(),
|
|
99
|
+
): number {
|
|
100
|
+
const reported = Math.max(0, Math.min(100, asset.processingProgress ?? 0));
|
|
101
|
+
if (asset.processingStatus === 'completed') return 100;
|
|
102
|
+
return reported;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Ease confirmed jumps and keep a slow asymptotic trickle while fresh worker
|
|
107
|
+
* heartbeats prove the job is active. It can approach, but never claim, 99%.
|
|
108
|
+
*/
|
|
109
|
+
export function advanceMediaProcessingProgress(
|
|
110
|
+
displayed: number,
|
|
111
|
+
confirmed: number,
|
|
112
|
+
elapsedMs: number,
|
|
113
|
+
workerActive = false,
|
|
114
|
+
): number {
|
|
115
|
+
const current = Math.max(0, Math.min(100, displayed));
|
|
116
|
+
const target = Math.max(0, Math.min(100, confirmed));
|
|
117
|
+
const boundedElapsed = Math.max(0, elapsedMs);
|
|
118
|
+
if (target > current) {
|
|
119
|
+
const maximumAdvance = boundedElapsed * 0.002;
|
|
120
|
+
return Math.round(Math.min(target, current + maximumAdvance) * 1_000) / 1_000;
|
|
121
|
+
}
|
|
122
|
+
if (!workerActive || current >= 99) return current;
|
|
123
|
+
const trickle = (99 - current) * (1 - Math.exp(-boundedElapsed / 1_000_000));
|
|
124
|
+
return Math.round(Math.min(99, current + trickle) * 1_000) / 1_000;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** A running step without fresh worker telemetry is waiting, not progressing. */
|
|
128
|
+
export function isMediaStepTelemetryStale(
|
|
129
|
+
step: MediaProgressStep | undefined,
|
|
130
|
+
now = Date.now(),
|
|
131
|
+
maxAgeMs = 20_000,
|
|
132
|
+
): boolean {
|
|
133
|
+
if (!step || step.status !== 'running') return false;
|
|
134
|
+
const timestamp = Date.parse(step.updatedAt ?? step.startedAt ?? '');
|
|
135
|
+
return Number.isFinite(timestamp) && now - timestamp > maxAgeMs;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Reserve “Finalizing” for the last local publishing step. Visual analysis can
|
|
140
|
+
* legitimately spend time at 99% while building its search vectors, so calling
|
|
141
|
+
* that finalization would promise an imminent completion that is not true.
|
|
142
|
+
*/
|
|
143
|
+
export function isFinalizingMediaStep(step: MediaProgressStep | undefined): boolean {
|
|
144
|
+
const progress = mediaStepProgress(step);
|
|
145
|
+
return (
|
|
146
|
+
step?.status === 'running' && step.stage === 'index' && progress !== null && progress >= 98
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/** A factual label for the active unit of work, separate from weighted overall progress. */
|
|
151
|
+
export function describeActiveMediaStep(step: MediaProgressStep | undefined): string | null {
|
|
152
|
+
if (!step) return null;
|
|
153
|
+
const label = STAGE_LABELS[step.stage] ?? step.stage;
|
|
154
|
+
const progress = mediaStepProgress(step);
|
|
155
|
+
const count =
|
|
156
|
+
typeof step.current === 'number' && typeof step.total === 'number' && step.total > 0
|
|
157
|
+
? `${step.current} / ${step.total}${step.unit ? ` ${step.unit}` : ''}`
|
|
158
|
+
: null;
|
|
159
|
+
if (progress === null) return `${label} · active request in progress`;
|
|
160
|
+
if (isFinalizingMediaStep(step)) {
|
|
161
|
+
return `${label} · finalizing verified results`;
|
|
162
|
+
}
|
|
163
|
+
return [label, count, `${Math.round(progress)}% this step`].filter(Boolean).join(' · ');
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Estimate only countable work. A percentage-only ETA becomes misleading when
|
|
168
|
+
* a remote worker has reported an optimistic progress band but is still
|
|
169
|
+
* waiting on a model request.
|
|
170
|
+
*/
|
|
171
|
+
export function estimateMediaStepRemainingSeconds(
|
|
172
|
+
step: MediaProgressStep | undefined,
|
|
173
|
+
now = Date.now(),
|
|
174
|
+
): number | null {
|
|
175
|
+
if (
|
|
176
|
+
Number.isFinite(step?.estimatedRemainingSeconds) &&
|
|
177
|
+
(step?.estimatedRemainingSeconds ?? 0) > 5
|
|
178
|
+
) {
|
|
179
|
+
const updatedAt = Date.parse(step?.updatedAt ?? '');
|
|
180
|
+
if (!Number.isFinite(updatedAt) || isMediaStepTelemetryStale(step, now)) return null;
|
|
181
|
+
const sinceUpdate = Math.max(0, (now - updatedAt) / 1_000);
|
|
182
|
+
const remaining = Math.round((step?.estimatedRemainingSeconds ?? 0) - sinceUpdate);
|
|
183
|
+
// Never park at one second after a forecast has expired. Wait for the next
|
|
184
|
+
// measured worker update and display no ETA in the meantime.
|
|
185
|
+
return remaining > 0 ? remaining : null;
|
|
186
|
+
}
|
|
187
|
+
if (
|
|
188
|
+
!step?.startedAt ||
|
|
189
|
+
!Number.isFinite(step.current) ||
|
|
190
|
+
!Number.isFinite(step.total) ||
|
|
191
|
+
step.current === undefined ||
|
|
192
|
+
step.total === undefined ||
|
|
193
|
+
step.current < 2 ||
|
|
194
|
+
step.total <= step.current
|
|
195
|
+
) {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const startedAt = new Date(step.startedAt).getTime();
|
|
200
|
+
if (!Number.isFinite(startedAt)) return null;
|
|
201
|
+
const elapsedSeconds = Math.max(0, (now - startedAt) / 1_000);
|
|
202
|
+
if (elapsedSeconds < 5) return null;
|
|
203
|
+
|
|
204
|
+
const remainingSeconds = Math.round(
|
|
205
|
+
(elapsedSeconds / step.current) * (step.total - step.current),
|
|
206
|
+
);
|
|
207
|
+
// A clearly unreasonable estimate is less useful than no estimate.
|
|
208
|
+
return remainingSeconds > 0 && remainingSeconds <= 12 * 60 * 60 ? remainingSeconds : null;
|
|
209
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { canonicalMediaSourceUrl, newestEquivalentMediaAsset } from './source-identity';
|
|
3
|
+
|
|
4
|
+
describe('canonicalMediaSourceUrl', () => {
|
|
5
|
+
it('treats seek and tracking variants as the same media source', () => {
|
|
6
|
+
expect(canonicalMediaSourceUrl('https://media.example/watch?v=abc&t=6s&utm_source=chat')).toBe(
|
|
7
|
+
canonicalMediaSourceUrl('https://media.example/watch?v=abc'),
|
|
8
|
+
);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('keeps parameters that identify different source media', () => {
|
|
12
|
+
expect(canonicalMediaSourceUrl('https://media.example/watch?v=abc')).not.toBe(
|
|
13
|
+
canonicalMediaSourceUrl('https://media.example/watch?v=def'),
|
|
14
|
+
);
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
describe('newestEquivalentMediaAsset', () => {
|
|
19
|
+
it('prefers the newest completed import across seek URL variants', () => {
|
|
20
|
+
const old = {
|
|
21
|
+
id: 'old',
|
|
22
|
+
originalUrl: 'https://www.youtube.com/watch?v=abc',
|
|
23
|
+
updatedAt: '2026-09-02T00:00:00Z',
|
|
24
|
+
};
|
|
25
|
+
const current = {
|
|
26
|
+
id: 'current',
|
|
27
|
+
originalUrl: 'https://www.youtube.com/watch?v=abc&t=6s',
|
|
28
|
+
updatedAt: '2026-09-03T00:00:00Z',
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
expect(newestEquivalentMediaAsset(old, [old, current])).toBe(current);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { selectedRemoteDuration, selectedRemoteUrls } from './source-selection';
|
|
3
|
+
|
|
4
|
+
describe('remote media source selection', () => {
|
|
5
|
+
const playlistUrl = 'https://www.youtube.com/watch?v=chosen-video&list=long-playlist&index=16';
|
|
6
|
+
const estimates = [
|
|
7
|
+
{
|
|
8
|
+
originalUrl: playlistUrl,
|
|
9
|
+
durationSecs: 87_540,
|
|
10
|
+
singleItemDurationSecs: 3_600,
|
|
11
|
+
singleItemUrl: 'https://www.youtube.com/watch?v=chosen-video',
|
|
12
|
+
entryCount: 24,
|
|
13
|
+
},
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
it('uses only the chosen video duration for a single-video import', () => {
|
|
17
|
+
expect(selectedRemoteDuration(estimates, true)).toBe(3_600);
|
|
18
|
+
expect(selectedRemoteDuration(estimates, false)).toBe(87_540);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('never substitutes a playlist total when one item has no duration yet', () => {
|
|
22
|
+
expect(
|
|
23
|
+
selectedRemoteDuration(
|
|
24
|
+
[{ originalUrl: playlistUrl, durationSecs: 87_540, entryCount: 24 }],
|
|
25
|
+
true,
|
|
26
|
+
),
|
|
27
|
+
).toBe(0);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('imports the inspected video rather than its playlist', () => {
|
|
31
|
+
expect(selectedRemoteUrls([playlistUrl], estimates, true)).toEqual([
|
|
32
|
+
'https://www.youtube.com/watch?v=chosen-video',
|
|
33
|
+
]);
|
|
34
|
+
expect(selectedRemoteUrls([playlistUrl], estimates, false)).toEqual([playlistUrl]);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export interface RemoteMediaEstimate {
|
|
2
|
+
originalUrl: string;
|
|
3
|
+
durationSecs?: number;
|
|
4
|
+
singleItemDurationSecs?: number;
|
|
5
|
+
singleItemUrl?: string;
|
|
6
|
+
entryCount?: number;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function selectedRemoteDuration(
|
|
10
|
+
estimates: RemoteMediaEstimate[] | null,
|
|
11
|
+
singleItem: boolean,
|
|
12
|
+
): number {
|
|
13
|
+
return (
|
|
14
|
+
estimates?.reduce(
|
|
15
|
+
(total, estimate) =>
|
|
16
|
+
total +
|
|
17
|
+
(singleItem
|
|
18
|
+
? (estimate.singleItemDurationSecs ??
|
|
19
|
+
((estimate.entryCount ?? 1) <= 1 ? estimate.durationSecs : 0) ??
|
|
20
|
+
0)
|
|
21
|
+
: (estimate.durationSecs ?? 0)),
|
|
22
|
+
0,
|
|
23
|
+
) ?? 0
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function selectedRemoteUrls(
|
|
28
|
+
urls: string[],
|
|
29
|
+
estimates: RemoteMediaEstimate[] | null,
|
|
30
|
+
singleItem: boolean,
|
|
31
|
+
): string[] {
|
|
32
|
+
if (!singleItem) return urls;
|
|
33
|
+
const estimateByUrl = new Map(estimates?.map((estimate) => [estimate.originalUrl, estimate]));
|
|
34
|
+
return urls.map((url) => {
|
|
35
|
+
const inspectedUrl = estimateByUrl.get(url)?.singleItemUrl;
|
|
36
|
+
if (inspectedUrl) return inspectedUrl;
|
|
37
|
+
try {
|
|
38
|
+
const parsed = new URL(url);
|
|
39
|
+
if (parsed.hostname.includes('youtube.com')) {
|
|
40
|
+
parsed.searchParams.delete('list');
|
|
41
|
+
parsed.searchParams.delete('index');
|
|
42
|
+
return parsed.toString();
|
|
43
|
+
}
|
|
44
|
+
} catch {}
|
|
45
|
+
return url;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
5
|
+
import {
|
|
6
|
+
ffprobeExecutable,
|
|
7
|
+
hasInflatedPlaybackTimeline,
|
|
8
|
+
inspectYouTubeMetadata,
|
|
9
|
+
parseYoutubeJson3Transcript,
|
|
10
|
+
parseYtDlpProgress,
|
|
11
|
+
resolveYtDlpMediaPath,
|
|
12
|
+
selectYoutubeCaptionLanguage,
|
|
13
|
+
ytDlpImportPrintTemplate,
|
|
14
|
+
youtubeDownloadFormat,
|
|
15
|
+
} from './source-utils';
|
|
16
|
+
|
|
17
|
+
const temporaryDirectories: string[] = [];
|
|
18
|
+
|
|
19
|
+
afterEach(async () => {
|
|
20
|
+
await Promise.all(
|
|
21
|
+
temporaryDirectories
|
|
22
|
+
.splice(0)
|
|
23
|
+
.map((directory) => fs.rm(directory, { recursive: true, force: true })),
|
|
24
|
+
);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
describe('inspectYouTubeMetadata', () => {
|
|
28
|
+
it('keeps the playlist total separate from the video selected by the watch URL', () => {
|
|
29
|
+
const inspection = inspectYouTubeMetadata(
|
|
30
|
+
'https://www.youtube.com/watch?v=selected-id&list=playlist-id&index=2',
|
|
31
|
+
{
|
|
32
|
+
title: 'A long playlist',
|
|
33
|
+
entries: [
|
|
34
|
+
{ id: 'first-id', duration: 1_800 },
|
|
35
|
+
{ id: 'selected-id', duration: 3_600 },
|
|
36
|
+
{ id: 'third-id', duration: 2_400 },
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
expect(inspection).toMatchObject({
|
|
42
|
+
durationSecs: 7_800,
|
|
43
|
+
singleItemDurationSecs: 3_600,
|
|
44
|
+
singleItemUrl: 'https://www.youtube.com/watch?v=selected-id',
|
|
45
|
+
entryCount: 3,
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('selects the first entry when a playlist URL has no video id', () => {
|
|
50
|
+
const inspection = inspectYouTubeMetadata('https://www.youtube.com/playlist?list=playlist-id', {
|
|
51
|
+
entries: [
|
|
52
|
+
{ id: 'first-id', duration: 1_800 },
|
|
53
|
+
{ id: 'second-id', duration: 3_600 },
|
|
54
|
+
],
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
expect(inspection.singleItemDurationSecs).toBe(1_800);
|
|
58
|
+
expect(inspection.singleItemUrl).toBe('https://www.youtube.com/watch?v=first-id');
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
describe('parseYtDlpProgress', () => {
|
|
63
|
+
it('keeps the downloader byte count, speed, ETA, and decimal percent', () => {
|
|
64
|
+
const progress = parseYtDlpProgress(
|
|
65
|
+
'[download] 12.5% of ~ 80.00MiB at 4.00MiB/s ETA 00:18',
|
|
66
|
+
3,
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
expect(progress).toMatchObject({
|
|
70
|
+
percent: 12.5,
|
|
71
|
+
current: 10 * 1_024 ** 2,
|
|
72
|
+
total: 80 * 1_024 ** 2,
|
|
73
|
+
unit: 'bytes',
|
|
74
|
+
elapsedSeconds: 3,
|
|
75
|
+
estimatedRemainingSeconds: 18,
|
|
76
|
+
message: 'Downloading video · 12.5% · 4.00MiB/s · 00:18 left',
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
it('ignores downloader log lines that contain no measured progress', () => {
|
|
81
|
+
expect(parseYtDlpProgress('[youtube] Extracting URL')).toBeNull();
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
describe('youtubeDownloadFormat', () => {
|
|
86
|
+
it('prefers a muxable MP4 video and M4A audio pair before combined fallbacks', () => {
|
|
87
|
+
const [preferred, combinedFallback] = youtubeDownloadFormat().split('/');
|
|
88
|
+
expect(preferred).toContain('bestvideo*');
|
|
89
|
+
expect(preferred).toContain('[vcodec^=avc]');
|
|
90
|
+
expect(preferred).toContain('+bestaudio[ext=m4a]');
|
|
91
|
+
expect(combinedFallback).toContain('acodec!=none');
|
|
92
|
+
expect(youtubeDownloadFormat().split('/').at(-1)).toContain('acodec!=none');
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
describe('ytDlpImportPrintTemplate', () => {
|
|
97
|
+
it('serializes one object so missing metadata never becomes a bare NA token', () => {
|
|
98
|
+
const template = ytDlpImportPrintTemplate();
|
|
99
|
+
|
|
100
|
+
expect(template).toBe('%(.{filepath,title,webpage_url,ext,language,requested_subtitles})j');
|
|
101
|
+
expect(template).not.toContain('"language":%(language)j');
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
describe('hasInflatedPlaybackTimeline', () => {
|
|
106
|
+
it('detects a padded audio/container clock without flagging normal stream drift', () => {
|
|
107
|
+
expect(
|
|
108
|
+
hasInflatedPlaybackTimeline({
|
|
109
|
+
durationSecs: 3_600,
|
|
110
|
+
videoDurationSecs: 3_600,
|
|
111
|
+
audioDurationSecs: 7_200,
|
|
112
|
+
containerDurationSecs: 7_200,
|
|
113
|
+
hasVideo: true,
|
|
114
|
+
hasAudio: true,
|
|
115
|
+
hasCorruptionSignals: false,
|
|
116
|
+
}),
|
|
117
|
+
).toBe(true);
|
|
118
|
+
expect(
|
|
119
|
+
hasInflatedPlaybackTimeline({
|
|
120
|
+
durationSecs: 3_600,
|
|
121
|
+
videoDurationSecs: 3_600,
|
|
122
|
+
audioDurationSecs: 3_602,
|
|
123
|
+
containerDurationSecs: 3_602,
|
|
124
|
+
hasVideo: true,
|
|
125
|
+
hasAudio: true,
|
|
126
|
+
hasCorruptionSignals: false,
|
|
127
|
+
}),
|
|
128
|
+
).toBe(false);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
describe('parseYoutubeJson3Transcript', () => {
|
|
133
|
+
it('turns native YouTube captions into timestamped evidence and ignores formatting events', () => {
|
|
134
|
+
expect(
|
|
135
|
+
parseYoutubeJson3Transcript({
|
|
136
|
+
events: [
|
|
137
|
+
{ tStartMs: 14_000, dDurationMs: 2_500, segs: [{ utf8: 'The ' }, { utf8: 'answer' }] },
|
|
138
|
+
{ tStartMs: 16_500, dDurationMs: 500 },
|
|
139
|
+
],
|
|
140
|
+
}),
|
|
141
|
+
).toEqual([{ text: 'The answer', startSecs: 14, endSecs: 16.5 }]);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
describe('selectYoutubeCaptionLanguage', () => {
|
|
146
|
+
it('prefers a native manual caption over translated automatic tracks', () => {
|
|
147
|
+
expect(
|
|
148
|
+
selectYoutubeCaptionLanguage({
|
|
149
|
+
language: 'de',
|
|
150
|
+
subtitles: { de: [{}] },
|
|
151
|
+
automatic_captions: { en: [{}], 'de-orig': [{}] },
|
|
152
|
+
}),
|
|
153
|
+
).toBe('de');
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
it('falls back to the original-language automatic caption', () => {
|
|
157
|
+
expect(
|
|
158
|
+
selectYoutubeCaptionLanguage({
|
|
159
|
+
language: 'ar',
|
|
160
|
+
automatic_captions: { en: [{}], 'ar-orig': [{}] },
|
|
161
|
+
}),
|
|
162
|
+
).toBe('ar-orig');
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
describe('resolveYtDlpMediaPath', () => {
|
|
167
|
+
it('uses the actual media output when yt-dlp reports a stale after-move filename', async () => {
|
|
168
|
+
const outputDir = await fs.mkdtemp(path.join(os.tmpdir(), 'larkup-source-utils-'));
|
|
169
|
+
temporaryDirectories.push(outputDir);
|
|
170
|
+
const reportedPath = path.join(outputDir, 'How Large Language Models Work [5sLYAQS9sWQ].mp4');
|
|
171
|
+
const actualPath = path.join(
|
|
172
|
+
outputDir,
|
|
173
|
+
'How Large Language Models Work [5sLYAQS9sWQ].f251.webm',
|
|
174
|
+
);
|
|
175
|
+
await fs.writeFile(actualPath, 'video bytes');
|
|
176
|
+
|
|
177
|
+
await expect(resolveYtDlpMediaPath(reportedPath, outputDir)).resolves.toBe(actualPath);
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
it('rejects a downloader path outside its isolated import directory', async () => {
|
|
181
|
+
const outputDir = await fs.mkdtemp(path.join(os.tmpdir(), 'larkup-source-utils-'));
|
|
182
|
+
temporaryDirectories.push(outputDir);
|
|
183
|
+
|
|
184
|
+
await expect(
|
|
185
|
+
resolveYtDlpMediaPath(path.join(os.tmpdir(), 'unrelated.mp4'), outputDir),
|
|
186
|
+
).rejects.toThrow('outside its import directory');
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
it('prefers the final mux over a silent adaptive video intermediate', async () => {
|
|
190
|
+
const outputDir = await fs.mkdtemp(path.join(os.tmpdir(), 'larkup-source-utils-'));
|
|
191
|
+
temporaryDirectories.push(outputDir);
|
|
192
|
+
const reportedPath = path.join(outputDir, 'Interview [video123].missing.mp4');
|
|
193
|
+
const silentIntermediate = path.join(outputDir, 'Interview [video123].f137.mp4');
|
|
194
|
+
const finalMux = path.join(outputDir, 'Interview [video123].webm');
|
|
195
|
+
await fs.writeFile(silentIntermediate, 'video only');
|
|
196
|
+
await fs.writeFile(finalMux, 'video and audio');
|
|
197
|
+
|
|
198
|
+
await expect(resolveYtDlpMediaPath(reportedPath, outputDir)).resolves.toBe(finalMux);
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
it('never recovers a stale video path as an audio-only adaptive stream', async () => {
|
|
202
|
+
const outputDir = await fs.mkdtemp(path.join(os.tmpdir(), 'larkup-source-utils-'));
|
|
203
|
+
temporaryDirectories.push(outputDir);
|
|
204
|
+
const reportedPath = path.join(outputDir, 'Final [video123].missing.mp4');
|
|
205
|
+
const videoIntermediate = path.join(outputDir, 'Final [video123].f137.mp4');
|
|
206
|
+
const audioIntermediate = path.join(outputDir, 'Final [video123].f140.m4a');
|
|
207
|
+
await fs.writeFile(videoIntermediate, 'video bytes');
|
|
208
|
+
await fs.writeFile(audioIntermediate, 'audio bytes');
|
|
209
|
+
|
|
210
|
+
await expect(resolveYtDlpMediaPath(reportedPath, outputDir)).resolves.toBe(videoIntermediate);
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
describe('ffprobeExecutable', () => {
|
|
215
|
+
const originalPath = process.env.LARKUP_FFPROBE_PATH;
|
|
216
|
+
|
|
217
|
+
afterEach(() => {
|
|
218
|
+
if (originalPath === undefined) delete process.env.LARKUP_FFPROBE_PATH;
|
|
219
|
+
else process.env.LARKUP_FFPROBE_PATH = originalPath;
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
it('uses an explicit deployment override before the bundled binary', () => {
|
|
223
|
+
process.env.LARKUP_FFPROBE_PATH = '/custom/bin/ffprobe';
|
|
224
|
+
expect(ffprobeExecutable()).toBe('/custom/bin/ffprobe');
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
it('uses a packaged ffprobe binary when PATH is unavailable', () => {
|
|
228
|
+
delete process.env.LARKUP_FFPROBE_PATH;
|
|
229
|
+
expect(ffprobeExecutable()).toContain('ffprobe');
|
|
230
|
+
});
|
|
231
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { calculateToolIndexingEstimate } from './tool-indexing-estimate';
|
|
3
|
+
|
|
4
|
+
describe('calculateToolIndexingEstimate', () => {
|
|
5
|
+
const fast = {
|
|
6
|
+
processingSecondsPerSourceMinute: 4,
|
|
7
|
+
maxProcessingSecondsPerSourceMinute: 5,
|
|
8
|
+
fixedOverheadSeconds: 60,
|
|
9
|
+
maxFixedOverheadSeconds: 60,
|
|
10
|
+
creditsPerSourceMinute: 1,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
it('estimates a one-hour Fast video at five to six minutes', () => {
|
|
14
|
+
expect(calculateToolIndexingEstimate(fast, 60 * 60)).toEqual({
|
|
15
|
+
minimumMinutes: 5,
|
|
16
|
+
maximumMinutes: 6,
|
|
17
|
+
credits: 60,
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('keeps time and credits proportional to the actual selected duration', () => {
|
|
22
|
+
expect(calculateToolIndexingEstimate(fast, 1_459 * 60)).toEqual({
|
|
23
|
+
minimumMinutes: 99,
|
|
24
|
+
maximumMinutes: 123,
|
|
25
|
+
credits: 1_459,
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface ToolIndexingEstimateVariant {
|
|
2
|
+
processingSecondsPerSourceMinute: number;
|
|
3
|
+
maxProcessingSecondsPerSourceMinute?: number;
|
|
4
|
+
fixedOverheadSeconds?: number;
|
|
5
|
+
maxFixedOverheadSeconds?: number;
|
|
6
|
+
creditsPerSourceMinute: number;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function calculateToolIndexingEstimate(
|
|
10
|
+
estimate: ToolIndexingEstimateVariant | undefined,
|
|
11
|
+
sourceDurationSecs?: number,
|
|
12
|
+
) {
|
|
13
|
+
if (!estimate) return null;
|
|
14
|
+
const sourceMinutes = Math.max(0, (sourceDurationSecs ?? 0) / 60);
|
|
15
|
+
const displayDuration = sourceMinutes > 0 ? Math.max(sourceMinutes, 0.1) : 1;
|
|
16
|
+
const minimumMinutes = Math.max(
|
|
17
|
+
1,
|
|
18
|
+
Math.ceil(
|
|
19
|
+
((estimate.fixedOverheadSeconds ?? 0) +
|
|
20
|
+
estimate.processingSecondsPerSourceMinute * displayDuration) /
|
|
21
|
+
60,
|
|
22
|
+
),
|
|
23
|
+
);
|
|
24
|
+
const maximumMinutes = Math.max(
|
|
25
|
+
minimumMinutes,
|
|
26
|
+
Math.ceil(
|
|
27
|
+
((estimate.maxFixedOverheadSeconds ?? estimate.fixedOverheadSeconds ?? 0) +
|
|
28
|
+
(estimate.maxProcessingSecondsPerSourceMinute ??
|
|
29
|
+
estimate.processingSecondsPerSourceMinute) *
|
|
30
|
+
displayDuration) /
|
|
31
|
+
60,
|
|
32
|
+
),
|
|
33
|
+
);
|
|
34
|
+
return {
|
|
35
|
+
minimumMinutes,
|
|
36
|
+
maximumMinutes,
|
|
37
|
+
credits: Math.max(1, Math.ceil(estimate.creditsPerSourceMinute * displayDuration)),
|
|
38
|
+
};
|
|
39
|
+
}
|