larkup 0.1.40 → 0.1.42

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