sparkecoder 0.1.97 → 0.1.99

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 (363) hide show
  1. package/dist/agent/index.d.ts +3 -3
  2. package/dist/agent/index.js +1258 -59
  3. package/dist/agent/index.js.map +1 -1
  4. package/dist/cli.js +10657 -8949
  5. package/dist/cli.js.map +1 -1
  6. package/dist/db/index.d.ts +2 -2
  7. package/dist/{index-BvIissiB.d.ts → index-D5l-DMGC.d.ts} +390 -6
  8. package/dist/index.d.ts +5 -5
  9. package/dist/index.js +9985 -8069
  10. package/dist/index.js.map +1 -1
  11. package/dist/{schema-CohdIL13.d.ts → schema-ecQSnCMz.d.ts} +41 -0
  12. package/dist/server/index.js +8615 -6707
  13. package/dist/server/index.js.map +1 -1
  14. package/dist/skills/default/manage-mcp.md +94 -0
  15. package/dist/skills/default/search-conversations.md +100 -0
  16. package/dist/tools/index.d.ts +2 -2
  17. package/dist/tools/index.js +111 -2
  18. package/dist/tools/index.js.map +1 -1
  19. package/package.json +5 -1
  20. package/src/skills/default/manage-mcp.md +94 -0
  21. package/src/skills/default/search-conversations.md +100 -0
  22. package/web/.next/BUILD_ID +1 -1
  23. package/web/.next/standalone/web/.next/BUILD_ID +1 -1
  24. package/web/.next/standalone/web/.next/app-path-routes-manifest.json +2 -1
  25. package/web/.next/standalone/web/.next/build-manifest.json +5 -5
  26. package/web/.next/standalone/web/.next/prerender-manifest.json +51 -3
  27. package/web/.next/standalone/web/.next/routes-manifest.json +13 -24
  28. package/web/.next/standalone/web/.next/server/app/(main)/agents/page/app-paths-manifest.json +3 -0
  29. package/web/.next/standalone/web/.next/server/app/{embed/[id] → (main)/agents}/page/build-manifest.json +3 -3
  30. package/web/.next/standalone/web/.next/server/app/(main)/agents/page/next-font-manifest.json +11 -0
  31. package/web/.next/standalone/web/.next/server/app/{embed/[id] → (main)/agents}/page.js +7 -6
  32. package/web/.next/standalone/web/.next/server/app/(main)/agents/page.js.nft.json +1 -0
  33. package/web/.next/standalone/web/.next/server/app/(main)/agents/page_client-reference-manifest.js +2 -0
  34. package/web/.next/standalone/web/.next/server/app/(main)/page/build-manifest.json +3 -3
  35. package/web/.next/standalone/web/.next/server/app/(main)/page/next-font-manifest.json +2 -2
  36. package/web/.next/standalone/web/.next/server/app/(main)/page.js.nft.json +1 -1
  37. package/web/.next/standalone/web/.next/server/app/(main)/page_client-reference-manifest.js +1 -1
  38. package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page/build-manifest.json +3 -3
  39. package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page/next-font-manifest.json +2 -2
  40. package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page.js.nft.json +1 -1
  41. package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page_client-reference-manifest.js +1 -1
  42. package/web/.next/standalone/web/.next/server/app/(main)/settings/page/app-paths-manifest.json +3 -0
  43. package/web/.next/standalone/web/.next/server/app/(main)/settings/page/build-manifest.json +18 -0
  44. package/web/.next/standalone/web/.next/server/app/(main)/settings/page/next-font-manifest.json +11 -0
  45. package/web/.next/standalone/web/.next/server/app/(main)/settings/page/react-loadable-manifest.json +1 -0
  46. package/web/.next/standalone/web/.next/server/app/(main)/settings/page/server-reference-manifest.json +4 -0
  47. package/web/.next/standalone/web/.next/server/app/(main)/settings/page.js +21 -0
  48. package/web/.next/standalone/web/.next/server/app/(main)/settings/page.js.map +5 -0
  49. package/web/.next/standalone/web/.next/server/app/(main)/settings/page.js.nft.json +1 -0
  50. package/web/.next/standalone/web/.next/server/app/(main)/settings/page_client-reference-manifest.js +2 -0
  51. package/web/.next/standalone/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
  52. package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
  53. package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
  54. package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  55. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  56. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  57. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  58. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  59. package/web/.next/standalone/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
  60. package/web/.next/standalone/web/.next/server/app/_not-found/page/next-font-manifest.json +2 -2
  61. package/web/.next/standalone/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  62. package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
  63. package/web/.next/standalone/web/.next/server/app/_not-found.rsc +3 -3
  64. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  65. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  66. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  67. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  68. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  69. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +3 -3
  70. package/web/.next/standalone/web/.next/server/app/agents.html +1 -0
  71. package/web/.next/standalone/web/.next/server/app/agents.meta +16 -0
  72. package/web/.next/standalone/web/.next/server/app/agents.rsc +25 -0
  73. package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents/__PAGE__.segment.rsc +9 -0
  74. package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents.segment.rsc +4 -0
  75. package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p.segment.rsc +7 -0
  76. package/web/.next/standalone/web/.next/server/app/agents.segments/_full.segment.rsc +25 -0
  77. package/web/.next/standalone/web/.next/server/app/agents.segments/_head.segment.rsc +6 -0
  78. package/web/.next/standalone/web/.next/server/app/agents.segments/_index.segment.rsc +7 -0
  79. package/web/.next/standalone/web/.next/server/app/agents.segments/_tree.segment.rsc +5 -0
  80. package/web/.next/standalone/web/.next/server/app/api/config/route.js.nft.json +1 -1
  81. package/web/.next/standalone/web/.next/server/app/api/health/route.js.nft.json +1 -1
  82. package/web/.next/standalone/web/.next/server/app/docs/installation/page/build-manifest.json +3 -3
  83. package/web/.next/standalone/web/.next/server/app/docs/installation/page/next-font-manifest.json +2 -2
  84. package/web/.next/standalone/web/.next/server/app/docs/installation/page_client-reference-manifest.js +1 -1
  85. package/web/.next/standalone/web/.next/server/app/docs/installation.html +2 -2
  86. package/web/.next/standalone/web/.next/server/app/docs/installation.rsc +3 -3
  87. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_full.segment.rsc +3 -3
  88. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_head.segment.rsc +1 -1
  89. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_index.segment.rsc +3 -3
  90. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_tree.segment.rsc +3 -3
  91. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation/__PAGE__.segment.rsc +1 -1
  92. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation.segment.rsc +1 -1
  93. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs.segment.rsc +1 -1
  94. package/web/.next/standalone/web/.next/server/app/docs/page/build-manifest.json +3 -3
  95. package/web/.next/standalone/web/.next/server/app/docs/page/next-font-manifest.json +2 -2
  96. package/web/.next/standalone/web/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  97. package/web/.next/standalone/web/.next/server/app/docs/skills/page/build-manifest.json +3 -3
  98. package/web/.next/standalone/web/.next/server/app/docs/skills/page/next-font-manifest.json +2 -2
  99. package/web/.next/standalone/web/.next/server/app/docs/skills/page_client-reference-manifest.js +1 -1
  100. package/web/.next/standalone/web/.next/server/app/docs/skills.html +2 -2
  101. package/web/.next/standalone/web/.next/server/app/docs/skills.rsc +3 -3
  102. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_full.segment.rsc +3 -3
  103. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_head.segment.rsc +1 -1
  104. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_index.segment.rsc +3 -3
  105. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_tree.segment.rsc +3 -3
  106. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills/__PAGE__.segment.rsc +1 -1
  107. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills.segment.rsc +1 -1
  108. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs.segment.rsc +1 -1
  109. package/web/.next/standalone/web/.next/server/app/docs/tools/page/build-manifest.json +3 -3
  110. package/web/.next/standalone/web/.next/server/app/docs/tools/page/next-font-manifest.json +2 -2
  111. package/web/.next/standalone/web/.next/server/app/docs/tools/page_client-reference-manifest.js +1 -1
  112. package/web/.next/standalone/web/.next/server/app/docs/tools.html +2 -2
  113. package/web/.next/standalone/web/.next/server/app/docs/tools.rsc +3 -3
  114. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_full.segment.rsc +3 -3
  115. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_head.segment.rsc +1 -1
  116. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_index.segment.rsc +3 -3
  117. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_tree.segment.rsc +3 -3
  118. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools/__PAGE__.segment.rsc +1 -1
  119. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools.segment.rsc +1 -1
  120. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs.segment.rsc +1 -1
  121. package/web/.next/standalone/web/.next/server/app/docs.html +2 -2
  122. package/web/.next/standalone/web/.next/server/app/docs.rsc +3 -3
  123. package/web/.next/standalone/web/.next/server/app/docs.segments/_full.segment.rsc +3 -3
  124. package/web/.next/standalone/web/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  125. package/web/.next/standalone/web/.next/server/app/docs.segments/_index.segment.rsc +3 -3
  126. package/web/.next/standalone/web/.next/server/app/docs.segments/_tree.segment.rsc +3 -3
  127. package/web/.next/standalone/web/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
  128. package/web/.next/standalone/web/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  129. package/web/.next/standalone/web/.next/server/app/index.html +1 -1
  130. package/web/.next/standalone/web/.next/server/app/index.rsc +7 -7
  131. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +2 -2
  132. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p.segment.rsc +2 -2
  133. package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +7 -7
  134. package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
  135. package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +3 -3
  136. package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +5 -5
  137. package/web/.next/standalone/web/.next/server/app/settings.html +1 -0
  138. package/web/.next/standalone/web/.next/server/app/settings.meta +16 -0
  139. package/web/.next/standalone/web/.next/server/app/settings.rsc +25 -0
  140. package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings/__PAGE__.segment.rsc +9 -0
  141. package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings.segment.rsc +4 -0
  142. package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p.segment.rsc +7 -0
  143. package/web/.next/standalone/web/.next/server/app/settings.segments/_full.segment.rsc +25 -0
  144. package/web/.next/standalone/web/.next/server/app/settings.segments/_head.segment.rsc +6 -0
  145. package/web/.next/standalone/web/.next/server/app/settings.segments/_index.segment.rsc +7 -0
  146. package/web/.next/standalone/web/.next/server/app/settings.segments/_tree.segment.rsc +5 -0
  147. package/web/.next/standalone/web/.next/server/app-paths-manifest.json +2 -1
  148. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_60d8842c._.js → 2374f_3b04c7b5._.js} +1 -1
  149. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_2801b766._.js → 2374f_5ee1ee50._.js} +1 -1
  150. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_c13c8f4f._.js → 2374f_7b7dd4c7._.js} +1 -1
  151. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_b7f45fdf._.js → 2374f_9e444fb0._.js} +1 -1
  152. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_a383a4d9._.js → 2374f_b57914d2._.js} +1 -1
  153. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_c2c47039._.js +3 -0
  154. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_806bd012._.js → 2374f_db1d6704._.js} +1 -1
  155. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_f363c084._.js → 2374f_e6dbbf5d._.js} +1 -1
  156. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_lucide-react_dist_esm_icons_50c2f239._.js +3 -0
  157. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__2ea52390._.js +3 -0
  158. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__6097da17._.js +15 -0
  159. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__9f149e88._.js +3 -0
  160. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__b050bb8f._.js +1 -1
  161. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__c94db61a._.js +3 -0
  162. package/web/.next/standalone/web/.next/server/chunks/ssr/web_4fe3c244._.js +3 -0
  163. package/web/.next/standalone/web/.next/server/chunks/ssr/{web_3c2b112b._.js → web_7ca56356._.js} +3 -3
  164. package/web/.next/standalone/web/.next/server/chunks/ssr/web_8e76ee8b._.js +8 -0
  165. package/web/.next/standalone/web/.next/server/chunks/ssr/web_90d4125e._.js +7 -0
  166. package/web/.next/standalone/web/.next/server/chunks/ssr/web__next-internal_server_app_(main)_agents_page_actions_30f6e448.js +3 -0
  167. package/web/.next/standalone/web/.next/server/chunks/ssr/web__next-internal_server_app_(main)_settings_page_actions_7285839d.js +3 -0
  168. package/web/.next/standalone/web/.next/server/chunks/ssr/web_b38a47ee._.js +4 -0
  169. package/web/.next/standalone/web/.next/server/chunks/ssr/web_f7cf6b63._.js +3 -0
  170. package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_app_(main)_layout_tsx_453f6492._.js +3 -0
  171. package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_app_(main)_page_tsx_5ac4794b._.js +1 -1
  172. package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_app_(main)_settings_page_tsx_eb320e07._.js +33 -0
  173. package/web/.next/standalone/web/.next/server/middleware-build-manifest.js +3 -3
  174. package/web/.next/standalone/web/.next/server/next-font-manifest.js +1 -1
  175. package/web/.next/standalone/web/.next/server/next-font-manifest.json +22 -18
  176. package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
  177. package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
  178. package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -1
  179. package/web/.next/standalone/web/.next/server/server-reference-manifest.json +1 -1
  180. package/web/.next/standalone/web/.next/static/chunks/03b5edce6d5b809e.js +1 -0
  181. package/web/.next/standalone/web/.next/static/chunks/29dcecc3c2ca92b0.js +1 -0
  182. package/web/.next/standalone/web/.next/static/chunks/344be859c2c8600b.css +1 -0
  183. package/web/.next/standalone/web/.next/static/chunks/545725e4c1237026.js +7 -0
  184. package/web/.next/standalone/web/.next/static/chunks/60359bdd369c0c72.js +1 -0
  185. package/web/.next/standalone/web/.next/static/chunks/699803c4fb2dd3fc.js +5 -0
  186. package/web/.next/standalone/web/.next/static/chunks/735a2408c315b2f0.js +1 -0
  187. package/web/.next/standalone/web/.next/static/chunks/a7d5d0791c8c6223.css +2 -0
  188. package/web/.next/standalone/web/.next/static/chunks/d54077a2bb8314ed.js +31 -0
  189. package/web/.next/standalone/web/.next/static/chunks/dc34aa94e57fa28e.js +3 -0
  190. package/web/.next/standalone/web/.next/static/chunks/ea89ca7892d8c557.js +1 -0
  191. package/web/.next/standalone/web/.next/static/chunks/f0f19357f3fb7cf8.js +1 -0
  192. package/web/.next/standalone/web/.next/static/chunks/f50a66c24c564585.js +13 -0
  193. package/web/.next/standalone/web/.next/static/chunks/f5fe518b79d1bf41.js +1 -0
  194. package/web/.next/standalone/web/.next/static/{static/chunks/turbopack-597558bb7b6982f6.js → chunks/turbopack-2c0905c7bbebae3f.js} +1 -1
  195. package/web/.next/standalone/web/.next/static/media/4fa387ec64143e14-s.c36e1862.woff2 +0 -0
  196. package/web/.next/standalone/web/.next/static/media/53b9e256198e5412-s.853d50a3.woff2 +0 -0
  197. package/web/.next/standalone/web/.next/static/media/5ce348bf30bf5439-s.ebceb24d.woff2 +0 -0
  198. package/web/.next/standalone/web/.next/static/media/6306c77e7c8268e4-s.ff4a2084.woff2 +0 -0
  199. package/web/.next/standalone/web/.next/static/media/7178b3e590c64307-s.55554cd0.woff2 +0 -0
  200. package/web/.next/standalone/web/.next/static/media/797e433ab948586e-s.p.479bea2b.woff2 +0 -0
  201. package/web/.next/standalone/web/.next/static/media/7d817b4c03b0c5f1-s.f377b9c4.woff2 +0 -0
  202. package/web/.next/standalone/web/.next/static/media/8a480f0b521d4e75-s.ea323500.woff2 +0 -0
  203. package/web/.next/standalone/web/.next/static/media/bbc41e54d2fcbd21-s.d1207556.woff2 +0 -0
  204. package/web/.next/standalone/web/.next/static/media/caa3a2e1cccd8315-s.p.3b6cae6d.woff2 +0 -0
  205. package/web/.next/standalone/web/.next/static/media/fef07dbb0973bf53-s.518e079e.woff2 +0 -0
  206. package/web/.next/standalone/web/.next/static/static/chunks/03b5edce6d5b809e.js +1 -0
  207. package/web/.next/standalone/web/.next/static/static/chunks/29dcecc3c2ca92b0.js +1 -0
  208. package/web/.next/standalone/web/.next/static/static/chunks/344be859c2c8600b.css +1 -0
  209. package/web/.next/standalone/web/.next/static/static/chunks/545725e4c1237026.js +7 -0
  210. package/web/.next/standalone/web/.next/static/static/chunks/60359bdd369c0c72.js +1 -0
  211. package/web/.next/standalone/web/.next/static/static/chunks/699803c4fb2dd3fc.js +5 -0
  212. package/web/.next/standalone/web/.next/static/static/chunks/735a2408c315b2f0.js +1 -0
  213. package/web/.next/standalone/web/.next/static/static/chunks/a7d5d0791c8c6223.css +2 -0
  214. package/web/.next/standalone/web/.next/static/static/chunks/d54077a2bb8314ed.js +31 -0
  215. package/web/.next/standalone/web/.next/static/static/chunks/dc34aa94e57fa28e.js +3 -0
  216. package/web/.next/standalone/web/.next/static/static/chunks/ea89ca7892d8c557.js +1 -0
  217. package/web/.next/standalone/web/.next/static/static/chunks/f0f19357f3fb7cf8.js +1 -0
  218. package/web/.next/standalone/web/.next/static/static/chunks/f50a66c24c564585.js +13 -0
  219. package/web/.next/standalone/web/.next/static/static/chunks/f5fe518b79d1bf41.js +1 -0
  220. package/web/.next/standalone/web/.next/static/{chunks/turbopack-597558bb7b6982f6.js → static/chunks/turbopack-2c0905c7bbebae3f.js} +1 -1
  221. package/web/.next/standalone/web/.next/static/static/media/4fa387ec64143e14-s.c36e1862.woff2 +0 -0
  222. package/web/.next/standalone/web/.next/static/static/media/53b9e256198e5412-s.853d50a3.woff2 +0 -0
  223. package/web/.next/standalone/web/.next/static/static/media/5ce348bf30bf5439-s.ebceb24d.woff2 +0 -0
  224. package/web/.next/standalone/web/.next/static/static/media/6306c77e7c8268e4-s.ff4a2084.woff2 +0 -0
  225. package/web/.next/standalone/web/.next/static/static/media/7178b3e590c64307-s.55554cd0.woff2 +0 -0
  226. package/web/.next/standalone/web/.next/static/static/media/797e433ab948586e-s.p.479bea2b.woff2 +0 -0
  227. package/web/.next/standalone/web/.next/static/static/media/7d817b4c03b0c5f1-s.f377b9c4.woff2 +0 -0
  228. package/web/.next/standalone/web/.next/static/static/media/8a480f0b521d4e75-s.ea323500.woff2 +0 -0
  229. package/web/.next/standalone/web/.next/static/static/media/bbc41e54d2fcbd21-s.d1207556.woff2 +0 -0
  230. package/web/.next/standalone/web/.next/static/static/media/caa3a2e1cccd8315-s.p.3b6cae6d.woff2 +0 -0
  231. package/web/.next/standalone/web/.next/static/static/media/fef07dbb0973bf53-s.518e079e.woff2 +0 -0
  232. package/web/.next/standalone/web/next.config.ts +0 -54
  233. package/web/.next/standalone/web/package-lock.json +7 -7
  234. package/web/.next/standalone/web/src/app/(main)/agents/page.tsx +222 -0
  235. package/web/.next/standalone/web/src/app/(main)/page.tsx +40 -1
  236. package/web/.next/standalone/web/src/app/(main)/session/[id]/page.tsx +9 -1
  237. package/web/.next/standalone/web/src/app/(main)/settings/page.tsx +1116 -0
  238. package/web/.next/standalone/web/src/components/chat-interface.tsx +222 -19
  239. package/web/.next/standalone/web/src/components/pending-question-banner.tsx +106 -0
  240. package/web/.next/standalone/web/src/components/sessions-sidebar.tsx +120 -50
  241. package/web/.next/standalone/web/src/lib/api.ts +61 -5
  242. package/web/.next/standalone/web/src/test/api.test.ts +17 -0
  243. package/web/.next/standalone/web/vitest.config.ts +13 -0
  244. package/web/.next/static/chunks/03b5edce6d5b809e.js +1 -0
  245. package/web/.next/static/chunks/29dcecc3c2ca92b0.js +1 -0
  246. package/web/.next/static/chunks/344be859c2c8600b.css +1 -0
  247. package/web/.next/static/chunks/545725e4c1237026.js +7 -0
  248. package/web/.next/static/chunks/60359bdd369c0c72.js +1 -0
  249. package/web/.next/static/chunks/699803c4fb2dd3fc.js +5 -0
  250. package/web/.next/static/chunks/735a2408c315b2f0.js +1 -0
  251. package/web/.next/static/chunks/a7d5d0791c8c6223.css +2 -0
  252. package/web/.next/static/chunks/d54077a2bb8314ed.js +31 -0
  253. package/web/.next/static/chunks/dc34aa94e57fa28e.js +3 -0
  254. package/web/.next/static/chunks/ea89ca7892d8c557.js +1 -0
  255. package/web/.next/static/chunks/f0f19357f3fb7cf8.js +1 -0
  256. package/web/.next/static/chunks/f50a66c24c564585.js +13 -0
  257. package/web/.next/static/chunks/f5fe518b79d1bf41.js +1 -0
  258. package/web/.next/static/chunks/{turbopack-597558bb7b6982f6.js → turbopack-2c0905c7bbebae3f.js} +1 -1
  259. package/web/.next/static/media/4fa387ec64143e14-s.c36e1862.woff2 +0 -0
  260. package/web/.next/static/media/53b9e256198e5412-s.853d50a3.woff2 +0 -0
  261. package/web/.next/static/media/5ce348bf30bf5439-s.ebceb24d.woff2 +0 -0
  262. package/web/.next/static/media/6306c77e7c8268e4-s.ff4a2084.woff2 +0 -0
  263. package/web/.next/static/media/7178b3e590c64307-s.55554cd0.woff2 +0 -0
  264. package/web/.next/static/media/797e433ab948586e-s.p.479bea2b.woff2 +0 -0
  265. package/web/.next/static/media/7d817b4c03b0c5f1-s.f377b9c4.woff2 +0 -0
  266. package/web/.next/static/media/8a480f0b521d4e75-s.ea323500.woff2 +0 -0
  267. package/web/.next/static/media/bbc41e54d2fcbd21-s.d1207556.woff2 +0 -0
  268. package/web/.next/static/media/caa3a2e1cccd8315-s.p.3b6cae6d.woff2 +0 -0
  269. package/web/.next/static/media/fef07dbb0973bf53-s.518e079e.woff2 +0 -0
  270. package/web/.next/standalone/web/.next/server/app/embed/[id]/page/app-paths-manifest.json +0 -3
  271. package/web/.next/standalone/web/.next/server/app/embed/[id]/page/next-font-manifest.json +0 -11
  272. package/web/.next/standalone/web/.next/server/app/embed/[id]/page.js.nft.json +0 -1
  273. package/web/.next/standalone/web/.next/server/app/embed/[id]/page_client-reference-manifest.js +0 -2
  274. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_317b1fef._.js +0 -3
  275. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_37dd9702._.js +0 -45
  276. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_4d44e4ed._.js +0 -26
  277. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_54ac917f._.js +0 -3
  278. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_86585101._.js +0 -3
  279. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_c59a35bb._.js +0 -3
  280. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_fdfc7f3d._.js +0 -31
  281. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__234f92d8._.js +0 -3
  282. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__9a826344._.js +0 -3
  283. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__9d3a7cbf._.js +0 -15
  284. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__de76483d._.js +0 -3
  285. package/web/.next/standalone/web/.next/server/chunks/ssr/web_08242997._.js +0 -3
  286. package/web/.next/standalone/web/.next/server/chunks/ssr/web_123ffe97._.js +0 -8
  287. package/web/.next/standalone/web/.next/server/chunks/ssr/web_5cca707f._.js +0 -7
  288. package/web/.next/standalone/web/.next/server/chunks/ssr/web_935e81f5._.js +0 -7
  289. package/web/.next/standalone/web/.next/server/chunks/ssr/web_99b01335._.js +0 -8
  290. package/web/.next/standalone/web/.next/server/chunks/ssr/web__next-internal_server_app_embed_[id]_page_actions_dd0b7fea.js +0 -3
  291. package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_components_sessions-sidebar_tsx_92510070._.js +0 -3
  292. package/web/.next/standalone/web/.next/static/chunks/1ebba7ac024244f9.js +0 -5
  293. package/web/.next/standalone/web/.next/static/chunks/2473c16c0c2f6b5f.css +0 -2
  294. package/web/.next/standalone/web/.next/static/chunks/2624c966c288fd41.js +0 -13
  295. package/web/.next/standalone/web/.next/static/chunks/275e8268daf318b2.js +0 -7
  296. package/web/.next/standalone/web/.next/static/chunks/58fd0aaa2746b444.js +0 -1
  297. package/web/.next/standalone/web/.next/static/chunks/74b64476a24dd71e.css +0 -1
  298. package/web/.next/standalone/web/.next/static/chunks/767bcdfbabf0703e.js +0 -7
  299. package/web/.next/standalone/web/.next/static/chunks/8af263bc97c0c9ee.js +0 -3
  300. package/web/.next/standalone/web/.next/static/chunks/a888d448ceab1abe.js +0 -1
  301. package/web/.next/standalone/web/.next/static/chunks/b9ad1584d4e11d12.js +0 -1
  302. package/web/.next/standalone/web/.next/static/chunks/c6f40df16a9396b9.js +0 -1
  303. package/web/.next/standalone/web/.next/static/chunks/cfadc93a98190e5a.js +0 -3
  304. package/web/.next/standalone/web/.next/static/chunks/ea29be392100ab0f.js +0 -5
  305. package/web/.next/standalone/web/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  306. package/web/.next/standalone/web/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  307. package/web/.next/standalone/web/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  308. package/web/.next/standalone/web/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  309. package/web/.next/standalone/web/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  310. package/web/.next/standalone/web/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  311. package/web/.next/standalone/web/.next/static/static/chunks/1ebba7ac024244f9.js +0 -5
  312. package/web/.next/standalone/web/.next/static/static/chunks/2473c16c0c2f6b5f.css +0 -2
  313. package/web/.next/standalone/web/.next/static/static/chunks/2624c966c288fd41.js +0 -13
  314. package/web/.next/standalone/web/.next/static/static/chunks/275e8268daf318b2.js +0 -7
  315. package/web/.next/standalone/web/.next/static/static/chunks/58fd0aaa2746b444.js +0 -1
  316. package/web/.next/standalone/web/.next/static/static/chunks/74b64476a24dd71e.css +0 -1
  317. package/web/.next/standalone/web/.next/static/static/chunks/767bcdfbabf0703e.js +0 -7
  318. package/web/.next/standalone/web/.next/static/static/chunks/8af263bc97c0c9ee.js +0 -3
  319. package/web/.next/standalone/web/.next/static/static/chunks/a888d448ceab1abe.js +0 -1
  320. package/web/.next/standalone/web/.next/static/static/chunks/b9ad1584d4e11d12.js +0 -1
  321. package/web/.next/standalone/web/.next/static/static/chunks/c6f40df16a9396b9.js +0 -1
  322. package/web/.next/standalone/web/.next/static/static/chunks/cfadc93a98190e5a.js +0 -3
  323. package/web/.next/standalone/web/.next/static/static/chunks/ea29be392100ab0f.js +0 -5
  324. package/web/.next/standalone/web/.next/static/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  325. package/web/.next/standalone/web/.next/static/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  326. package/web/.next/standalone/web/.next/static/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  327. package/web/.next/standalone/web/.next/static/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  328. package/web/.next/standalone/web/.next/static/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  329. package/web/.next/standalone/web/.next/static/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  330. package/web/.next/standalone/web/src/app/embed/[id]/page.tsx +0 -77
  331. package/web/.next/standalone/web/src/lib/embed-bootstrap.ts +0 -108
  332. package/web/.next/static/chunks/1ebba7ac024244f9.js +0 -5
  333. package/web/.next/static/chunks/2473c16c0c2f6b5f.css +0 -2
  334. package/web/.next/static/chunks/2624c966c288fd41.js +0 -13
  335. package/web/.next/static/chunks/275e8268daf318b2.js +0 -7
  336. package/web/.next/static/chunks/58fd0aaa2746b444.js +0 -1
  337. package/web/.next/static/chunks/74b64476a24dd71e.css +0 -1
  338. package/web/.next/static/chunks/767bcdfbabf0703e.js +0 -7
  339. package/web/.next/static/chunks/8af263bc97c0c9ee.js +0 -3
  340. package/web/.next/static/chunks/a888d448ceab1abe.js +0 -1
  341. package/web/.next/static/chunks/b9ad1584d4e11d12.js +0 -1
  342. package/web/.next/static/chunks/c6f40df16a9396b9.js +0 -1
  343. package/web/.next/static/chunks/cfadc93a98190e5a.js +0 -3
  344. package/web/.next/static/chunks/ea29be392100ab0f.js +0 -5
  345. package/web/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  346. package/web/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  347. package/web/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  348. package/web/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  349. package/web/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  350. package/web/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  351. package/dist/{search-CCffrVJE.d.ts → search-DOzC4ojH.d.ts} +1 -1
  352. /package/web/.next/standalone/web/.next/server/app/{embed/[id] → (main)/agents}/page/react-loadable-manifest.json +0 -0
  353. /package/web/.next/standalone/web/.next/server/app/{embed/[id] → (main)/agents}/page/server-reference-manifest.json +0 -0
  354. /package/web/.next/standalone/web/.next/server/app/{embed/[id] → (main)/agents}/page.js.map +0 -0
  355. /package/web/.next/standalone/web/.next/static/{-npGTmVDA-oK8ZjRdKQf5 → static/yyzMTo2RYusiXE0e1_kdc}/_buildManifest.js +0 -0
  356. /package/web/.next/standalone/web/.next/static/{-npGTmVDA-oK8ZjRdKQf5 → static/yyzMTo2RYusiXE0e1_kdc}/_clientMiddlewareManifest.json +0 -0
  357. /package/web/.next/standalone/web/.next/static/{-npGTmVDA-oK8ZjRdKQf5 → static/yyzMTo2RYusiXE0e1_kdc}/_ssgManifest.js +0 -0
  358. /package/web/.next/standalone/web/.next/static/{static/-npGTmVDA-oK8ZjRdKQf5 → yyzMTo2RYusiXE0e1_kdc}/_buildManifest.js +0 -0
  359. /package/web/.next/standalone/web/.next/static/{static/-npGTmVDA-oK8ZjRdKQf5 → yyzMTo2RYusiXE0e1_kdc}/_clientMiddlewareManifest.json +0 -0
  360. /package/web/.next/standalone/web/.next/static/{static/-npGTmVDA-oK8ZjRdKQf5 → yyzMTo2RYusiXE0e1_kdc}/_ssgManifest.js +0 -0
  361. /package/web/.next/static/{-npGTmVDA-oK8ZjRdKQf5 → yyzMTo2RYusiXE0e1_kdc}/_buildManifest.js +0 -0
  362. /package/web/.next/static/{-npGTmVDA-oK8ZjRdKQf5 → yyzMTo2RYusiXE0e1_kdc}/_clientMiddlewareManifest.json +0 -0
  363. /package/web/.next/static/{-npGTmVDA-oK8ZjRdKQf5 → yyzMTo2RYusiXE0e1_kdc}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,77589,e=>{"use strict";let t=(0,e.i(292511).default)("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);e.s(["default",()=>t])},416667,e=>{"use strict";let t=(0,e.i(292511).default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);e.s(["default",()=>t])},191729,772857,e=>{"use strict";let t=(0,e.i(292511).default)("clock",[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);e.s(["default",()=>t],191729);var r=e.i(414294),l=e.i(430878);e.i(773340);var n=e.i(309945),o=Symbol("radix.slottable");function s(e){return l.isValidElement(e)&&"function"==typeof e.type&&"__radixId"in e.type&&e.type.__radixId===o}var a=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"].reduce((e,t)=>{var o,a;let i,c,d,u=(a=o=`Primitive.${t}`,(i=l.forwardRef((e,t)=>{let{children:r,...o}=e;if(l.isValidElement(r)){var s;let e,a,i=(s=r,(a=(e=Object.getOwnPropertyDescriptor(s.props,"ref")?.get)&&"isReactWarning"in e&&e.isReactWarning)?s.ref:(a=(e=Object.getOwnPropertyDescriptor(s,"ref")?.get)&&"isReactWarning"in e&&e.isReactWarning)?s.props.ref:s.props.ref||s.ref),c=function(e,t){let r={...t};for(let l in t){let n=e[l],o=t[l];/^on[A-Z]/.test(l)?n&&o?r[l]=(...e)=>{let t=o(...e);return n(...e),t}:n&&(r[l]=n):"style"===l?r[l]={...n,...o}:"className"===l&&(r[l]=[n,o].filter(Boolean).join(" "))}return{...e,...r}}(o,r.props);return r.type!==l.Fragment&&(c.ref=t?(0,n.composeRefs)(t,i):i),l.cloneElement(r,c)}return l.Children.count(r)>1?l.Children.only(null):null})).displayName=`${a}.SlotClone`,c=i,(d=l.forwardRef((e,t)=>{let{children:n,...o}=e,a=l.Children.toArray(n),i=a.find(s);if(i){let e=i.props.children,n=a.map(t=>t!==i?t:l.Children.count(e)>1?l.Children.only(null):l.isValidElement(e)?e.props.children:null);return(0,r.jsx)(c,{...o,ref:t,children:l.isValidElement(e)?l.cloneElement(e,void 0,n):null})}return(0,r.jsx)(c,{...o,ref:t,children:n})})).displayName=`${o}.Slot`,d),p=l.forwardRef((e,l)=>{let{asChild:n,...o}=e;return"u">typeof window&&(window[Symbol.for("radix-ui")]=!0),(0,r.jsx)(n?u:t,{...o,ref:l})});return p.displayName=`Primitive.${t}`,{...e,[t]:p}},{}),i=e.i(395509),c=e.i(897462),d=e.i(542899),u=e.i(995945),p=e.i(992421),f=e.i(241416),m="ScrollArea",[h,x]=function(e,t=[]){let n=[],o=()=>{let t=n.map(e=>l.createContext(e));return function(r){let n=r?.[e]||t;return l.useMemo(()=>({[`__scope${e}`]:{...r,[e]:n}}),[r,n])}};return o.scopeName=e,[function(t,o){let s=l.createContext(o),a=n.length;n=[...n,o];let i=t=>{let{scope:n,children:o,...i}=t,c=n?.[e]?.[a]||s,d=l.useMemo(()=>i,Object.values(i));return(0,r.jsx)(c.Provider,{value:d,children:o})};return i.displayName=t+"Provider",[i,function(r,n){let i=n?.[e]?.[a]||s,c=l.useContext(i);if(c)return c;if(void 0!==o)return o;throw Error(`\`${r}\` must be used within \`${t}\``)}]},function(...e){let t=e[0];if(1===e.length)return t;let r=()=>{let r=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return function(e){let n=r.reduce((t,{useScope:r,scopeName:l})=>{let n=r(e)[`__scope${l}`];return{...t,...n}},{});return l.useMemo(()=>({[`__scope${t.scopeName}`]:n}),[n])}};return r.scopeName=t.scopeName,r}(o,...t)]}(m),[g,v]=h(m),b=l.forwardRef((e,t)=>{let{__scopeScrollArea:o,type:s="hover",dir:i,scrollHideDelay:c=600,...u}=e,[p,f]=l.useState(null),[m,h]=l.useState(null),[x,v]=l.useState(null),[b,w]=l.useState(null),[y,j]=l.useState(null),[S,N]=l.useState(0),[C,E]=l.useState(0),[R,T]=l.useState(!1),[k,P]=l.useState(!1),A=(0,n.useComposedRefs)(t,e=>f(e)),L=(0,d.useDirection)(i);return(0,r.jsx)(g,{scope:o,type:s,dir:L,scrollHideDelay:c,scrollArea:p,viewport:m,onViewportChange:h,content:x,onContentChange:v,scrollbarX:b,onScrollbarXChange:w,scrollbarXEnabled:R,onScrollbarXEnabledChange:T,scrollbarY:y,onScrollbarYChange:j,scrollbarYEnabled:k,onScrollbarYEnabledChange:P,onCornerWidthChange:N,onCornerHeightChange:E,children:(0,r.jsx)(a.div,{dir:L,...u,ref:A,style:{position:"relative","--radix-scroll-area-corner-width":S+"px","--radix-scroll-area-corner-height":C+"px",...e.style}})})});b.displayName=m;var w="ScrollAreaViewport",y=l.forwardRef((e,t)=>{let{__scopeScrollArea:o,children:s,nonce:i,...c}=e,d=v(w,o),u=l.useRef(null),p=(0,n.useComposedRefs)(t,u,d.onViewportChange);return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:i}),(0,r.jsx)(a.div,{"data-radix-scroll-area-viewport":"",...c,ref:p,style:{overflowX:d.scrollbarXEnabled?"scroll":"hidden",overflowY:d.scrollbarYEnabled?"scroll":"hidden",...e.style},children:(0,r.jsx)("div",{ref:d.onContentChange,style:{minWidth:"100%",display:"table"},children:s})})]})});y.displayName=w;var j="ScrollAreaScrollbar",S=l.forwardRef((e,t)=>{let{forceMount:n,...o}=e,s=v(j,e.__scopeScrollArea),{onScrollbarXEnabledChange:a,onScrollbarYEnabledChange:i}=s,c="horizontal"===e.orientation;return l.useEffect(()=>(c?a(!0):i(!0),()=>{c?a(!1):i(!1)}),[c,a,i]),"hover"===s.type?(0,r.jsx)(N,{...o,ref:t,forceMount:n}):"scroll"===s.type?(0,r.jsx)(C,{...o,ref:t,forceMount:n}):"auto"===s.type?(0,r.jsx)(E,{...o,ref:t,forceMount:n}):"always"===s.type?(0,r.jsx)(R,{...o,ref:t}):null});S.displayName=j;var N=l.forwardRef((e,t)=>{let{forceMount:n,...o}=e,s=v(j,e.__scopeScrollArea),[a,c]=l.useState(!1);return l.useEffect(()=>{let e=s.scrollArea,t=0;if(e){let r=()=>{window.clearTimeout(t),c(!0)},l=()=>{t=window.setTimeout(()=>c(!1),s.scrollHideDelay)};return e.addEventListener("pointerenter",r),e.addEventListener("pointerleave",l),()=>{window.clearTimeout(t),e.removeEventListener("pointerenter",r),e.removeEventListener("pointerleave",l)}}},[s.scrollArea,s.scrollHideDelay]),(0,r.jsx)(i.Presence,{present:n||a,children:(0,r.jsx)(E,{"data-state":a?"visible":"hidden",...o,ref:t})})}),C=l.forwardRef((e,t)=>{var n;let{forceMount:o,...s}=e,a=v(j,e.__scopeScrollArea),c="horizontal"===e.orientation,d=V(()=>p("SCROLL_END"),100),[u,p]=(n={hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}},l.useReducer((e,t)=>n[e][t]??e,"hidden"));return l.useEffect(()=>{if("idle"===u){let e=window.setTimeout(()=>p("HIDE"),a.scrollHideDelay);return()=>window.clearTimeout(e)}},[u,a.scrollHideDelay,p]),l.useEffect(()=>{let e=a.viewport,t=c?"scrollLeft":"scrollTop";if(e){let r=e[t],l=()=>{let l=e[t];r!==l&&(p("SCROLL"),d()),r=l};return e.addEventListener("scroll",l),()=>e.removeEventListener("scroll",l)}},[a.viewport,c,p,d]),(0,r.jsx)(i.Presence,{present:o||"hidden"!==u,children:(0,r.jsx)(R,{"data-state":"hidden"===u?"hidden":"visible",...s,ref:t,onPointerEnter:(0,f.composeEventHandlers)(e.onPointerEnter,()=>p("POINTER_ENTER")),onPointerLeave:(0,f.composeEventHandlers)(e.onPointerLeave,()=>p("POINTER_LEAVE"))})})}),E=l.forwardRef((e,t)=>{let n=v(j,e.__scopeScrollArea),{forceMount:o,...s}=e,[a,c]=l.useState(!1),d="horizontal"===e.orientation,u=V(()=>{if(n.viewport){let e=n.viewport.offsetWidth<n.viewport.scrollWidth,t=n.viewport.offsetHeight<n.viewport.scrollHeight;c(d?e:t)}},10);return Y(n.viewport,u),Y(n.content,u),(0,r.jsx)(i.Presence,{present:o||a,children:(0,r.jsx)(R,{"data-state":a?"visible":"hidden",...s,ref:t})})}),R=l.forwardRef((e,t)=>{let{orientation:n="vertical",...o}=e,s=v(j,e.__scopeScrollArea),a=l.useRef(null),i=l.useRef(0),[c,d]=l.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),u=$(c.viewport,c.content),p={...o,sizes:c,onSizesChange:d,hasThumb:!!(u>0&&u<1),onThumbChange:e=>a.current=e,onThumbPointerUp:()=>i.current=0,onThumbPointerDown:e=>i.current=e};function f(e,t){return function(e,t,r,l="ltr"){let n=O(r),o=t||n/2,s=r.scrollbar.paddingStart+o,a=r.scrollbar.size-r.scrollbar.paddingEnd-(n-o),i=r.content-r.viewport;return B([s,a],"ltr"===l?[0,i]:[-1*i,0])(e)}(e,i.current,c,t)}return"horizontal"===n?(0,r.jsx)(T,{...p,ref:t,onThumbPositionChange:()=>{if(s.viewport&&a.current){let e=F(s.viewport.scrollLeft,c,s.dir);a.current.style.transform=`translate3d(${e}px, 0, 0)`}},onWheelScroll:e=>{s.viewport&&(s.viewport.scrollLeft=e)},onDragScroll:e=>{s.viewport&&(s.viewport.scrollLeft=f(e,s.dir))}}):"vertical"===n?(0,r.jsx)(k,{...p,ref:t,onThumbPositionChange:()=>{if(s.viewport&&a.current){let e=F(s.viewport.scrollTop,c);a.current.style.transform=`translate3d(0, ${e}px, 0)`}},onWheelScroll:e=>{s.viewport&&(s.viewport.scrollTop=e)},onDragScroll:e=>{s.viewport&&(s.viewport.scrollTop=f(e))}}):null}),T=l.forwardRef((e,t)=>{let{sizes:o,onSizesChange:s,...a}=e,i=v(j,e.__scopeScrollArea),[c,d]=l.useState(),u=l.useRef(null),p=(0,n.useComposedRefs)(t,u,i.onScrollbarXChange);return l.useEffect(()=>{u.current&&d(getComputedStyle(u.current))},[u]),(0,r.jsx)(L,{"data-orientation":"horizontal",...a,ref:p,sizes:o,style:{bottom:0,left:"rtl"===i.dir?"var(--radix-scroll-area-corner-width)":0,right:"ltr"===i.dir?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":O(o)+"px",...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.x),onDragScroll:t=>e.onDragScroll(t.x),onWheelScroll:(t,r)=>{if(i.viewport){var l,n;let o=i.viewport.scrollLeft+t.deltaX;e.onWheelScroll(o),l=o,n=r,l>0&&l<n&&t.preventDefault()}},onResize:()=>{u.current&&i.viewport&&c&&s({content:i.viewport.scrollWidth,viewport:i.viewport.offsetWidth,scrollbar:{size:u.current.clientWidth,paddingStart:W(c.paddingLeft),paddingEnd:W(c.paddingRight)}})}})}),k=l.forwardRef((e,t)=>{let{sizes:o,onSizesChange:s,...a}=e,i=v(j,e.__scopeScrollArea),[c,d]=l.useState(),u=l.useRef(null),p=(0,n.useComposedRefs)(t,u,i.onScrollbarYChange);return l.useEffect(()=>{u.current&&d(getComputedStyle(u.current))},[u]),(0,r.jsx)(L,{"data-orientation":"vertical",...a,ref:p,sizes:o,style:{top:0,right:"ltr"===i.dir?0:void 0,left:"rtl"===i.dir?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":O(o)+"px",...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.y),onDragScroll:t=>e.onDragScroll(t.y),onWheelScroll:(t,r)=>{if(i.viewport){var l,n;let o=i.viewport.scrollTop+t.deltaY;e.onWheelScroll(o),l=o,n=r,l>0&&l<n&&t.preventDefault()}},onResize:()=>{u.current&&i.viewport&&c&&s({content:i.viewport.scrollHeight,viewport:i.viewport.offsetHeight,scrollbar:{size:u.current.clientHeight,paddingStart:W(c.paddingTop),paddingEnd:W(c.paddingBottom)}})}})}),[P,A]=h(j),L=l.forwardRef((e,t)=>{let{__scopeScrollArea:o,sizes:s,hasThumb:i,onThumbChange:d,onThumbPointerUp:u,onThumbPointerDown:p,onThumbPositionChange:m,onDragScroll:h,onWheelScroll:x,onResize:g,...b}=e,w=v(j,o),[y,S]=l.useState(null),N=(0,n.useComposedRefs)(t,e=>S(e)),C=l.useRef(null),E=l.useRef(""),R=w.viewport,T=s.content-s.viewport,k=(0,c.useCallbackRef)(x),A=(0,c.useCallbackRef)(m),L=V(g,10);function _(e){C.current&&h({x:e.clientX-C.current.left,y:e.clientY-C.current.top})}return l.useEffect(()=>{let e=e=>{let t=e.target;y?.contains(t)&&k(e,T)};return document.addEventListener("wheel",e,{passive:!1}),()=>document.removeEventListener("wheel",e,{passive:!1})},[R,y,T,k]),l.useEffect(A,[s,A]),Y(y,L),Y(w.content,L),(0,r.jsx)(P,{scope:o,scrollbar:y,hasThumb:i,onThumbChange:(0,c.useCallbackRef)(d),onThumbPointerUp:(0,c.useCallbackRef)(u),onThumbPositionChange:A,onThumbPointerDown:(0,c.useCallbackRef)(p),children:(0,r.jsx)(a.div,{...b,ref:N,style:{position:"absolute",...b.style},onPointerDown:(0,f.composeEventHandlers)(e.onPointerDown,e=>{0===e.button&&(e.target.setPointerCapture(e.pointerId),C.current=y.getBoundingClientRect(),E.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",w.viewport&&(w.viewport.style.scrollBehavior="auto"),_(e))}),onPointerMove:(0,f.composeEventHandlers)(e.onPointerMove,_),onPointerUp:(0,f.composeEventHandlers)(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=E.current,w.viewport&&(w.viewport.style.scrollBehavior=""),C.current=null})})})}),_="ScrollAreaThumb",D=l.forwardRef((e,t)=>{let{forceMount:l,...n}=e,o=A(_,e.__scopeScrollArea);return(0,r.jsx)(i.Presence,{present:l||o.hasThumb,children:(0,r.jsx)(z,{ref:t,...n})})}),z=l.forwardRef((e,t)=>{let{__scopeScrollArea:o,style:s,...i}=e,c=v(_,o),d=A(_,o),{onThumbPositionChange:u}=d,p=(0,n.useComposedRefs)(t,e=>d.onThumbChange(e)),m=l.useRef(void 0),h=V(()=>{m.current&&(m.current(),m.current=void 0)},100);return l.useEffect(()=>{let e=c.viewport;if(e){let t=()=>{h(),m.current||(m.current=U(e,u),u())};return u(),e.addEventListener("scroll",t),()=>e.removeEventListener("scroll",t)}},[c.viewport,h,u]),(0,r.jsx)(a.div,{"data-state":d.hasThumb?"visible":"hidden",...i,ref:p,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...s},onPointerDownCapture:(0,f.composeEventHandlers)(e.onPointerDownCapture,e=>{let t=e.target.getBoundingClientRect(),r=e.clientX-t.left,l=e.clientY-t.top;d.onThumbPointerDown({x:r,y:l})}),onPointerUp:(0,f.composeEventHandlers)(e.onPointerUp,d.onThumbPointerUp)})});D.displayName=_;var I="ScrollAreaCorner",H=l.forwardRef((e,t)=>{let l=v(I,e.__scopeScrollArea),n=!!(l.scrollbarX&&l.scrollbarY);return"scroll"!==l.type&&n?(0,r.jsx)(M,{...e,ref:t}):null});H.displayName=I;var M=l.forwardRef((e,t)=>{let{__scopeScrollArea:n,...o}=e,s=v(I,n),[i,c]=l.useState(0),[d,u]=l.useState(0),p=!!(i&&d);return Y(s.scrollbarX,()=>{let e=s.scrollbarX?.offsetHeight||0;s.onCornerHeightChange(e),u(e)}),Y(s.scrollbarY,()=>{let e=s.scrollbarY?.offsetWidth||0;s.onCornerWidthChange(e),c(e)}),p?(0,r.jsx)(a.div,{...o,ref:t,style:{width:i,height:d,position:"absolute",right:"ltr"===s.dir?0:void 0,left:"rtl"===s.dir?0:void 0,bottom:0,...e.style}}):null});function W(e){return e?parseInt(e,10):0}function $(e,t){let r=e/t;return isNaN(r)?0:r}function O(e){let t=$(e.viewport,e.content),r=e.scrollbar.paddingStart+e.scrollbar.paddingEnd;return Math.max((e.scrollbar.size-r)*t,18)}function F(e,t,r="ltr"){let l=O(t),n=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,o=t.scrollbar.size-n,s=t.content-t.viewport,a=(0,p.clamp)(e,"ltr"===r?[0,s]:[-1*s,0]);return B([0,s],[0,o-l])(a)}function B(e,t){return r=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let l=(t[1]-t[0])/(e[1]-e[0]);return t[0]+l*(r-e[0])}}var U=(e,t=()=>{})=>{let r={left:e.scrollLeft,top:e.scrollTop},l=0;return!function n(){let o={left:e.scrollLeft,top:e.scrollTop},s=r.left!==o.left,a=r.top!==o.top;(s||a)&&t(),r=o,l=window.requestAnimationFrame(n)}(),()=>window.cancelAnimationFrame(l)};function V(e,t){let r=(0,c.useCallbackRef)(e),n=l.useRef(0);return l.useEffect(()=>()=>window.clearTimeout(n.current),[]),l.useCallback(()=>{window.clearTimeout(n.current),n.current=window.setTimeout(r,t)},[r,t])}function Y(e,t){let r=(0,c.useCallbackRef)(t);(0,u.useLayoutEffect)(()=>{let t=0;if(e){let l=new ResizeObserver(()=>{cancelAnimationFrame(t),t=window.requestAnimationFrame(r)});return l.observe(e),()=>{window.cancelAnimationFrame(t),l.unobserve(e)}}},[e,r])}var X=e.i(555552);function K({className:e,children:t,...l}){return(0,r.jsxs)(b,{"data-slot":"scroll-area",className:(0,X.cn)("relative",e),...l,children:[(0,r.jsx)(y,{"data-slot":"scroll-area-viewport",className:"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",children:t}),(0,r.jsx)(q,{}),(0,r.jsx)(H,{})]})}function q({className:e,orientation:t="vertical",...l}){return(0,r.jsx)(S,{"data-slot":"scroll-area-scrollbar",orientation:t,className:(0,X.cn)("flex touch-none p-px transition-colors select-none","vertical"===t&&"h-full w-2.5 border-l border-l-transparent","horizontal"===t&&"h-2.5 flex-col border-t border-t-transparent",e),...l,children:(0,r.jsx)(D,{"data-slot":"scroll-area-thumb",className:"bg-border relative flex-1 rounded-full"})})}e.s(["ScrollArea",()=>K,"ScrollBar",()=>q],772857)},375635,e=>{"use strict";var t=e.i(414294),r=e.i(430878),l=e.i(353913),n=e.i(292623),o=e.i(504561),s=e.i(996720),a=e.i(461957),i=e.i(846193),c=e.i(77589),c=c,d=e.i(416667),d=d,u=e.i(667249),p=e.i(191729),p=p,f=e.i(904781),m=e.i(266514),h=e.i(87614),x=e.i(666904),g=e.i(77982),v=e.i(772857),b=e.i(524741),w=e.i(739963),y=e.i(300739),j=e.i(555552);function S({label:e,value:r,tone:l}){return(0,t.jsxs)("div",{className:"rounded-lg border border-border/60 bg-card/50 p-2 text-center",children:[(0,t.jsx)("p",{className:(0,j.cn)("text-lg font-semibold tabular-nums",l),children:r}),(0,t.jsx)("p",{className:"text-[10px] text-muted-foreground uppercase tracking-wide",children:e})]})}function N(){let e=(0,l.useRouter)(),N=(0,l.useSearchParams)(),{sessions:C,isLoading:E}=(0,y.useSessions)(),R=C.filter(e=>"worker"===e.role),T={running:R.filter(e=>"running"===e.agentStatus).length,needs_attention:R.filter(e=>"needs_attention"===e.agentStatus).length,completed:R.filter(e=>"completed"===e.agentStatus).length,failed:R.filter(e=>"failed"===e.agentStatus).length,idle:R.filter(e=>"idle"===e.agentStatus).length},[k,P]=(0,r.useState)(!1),[A,L]=(0,r.useState)(null),[_,D]=(0,r.useState)(""),[z,I]=(0,r.useState)(!1),[H,M]=(0,r.useState)(null),[W,$]=(0,r.useState)(null),O=(0,r.useRef)(!1),F=async(e,t)=>{e.preventDefault(),e.stopPropagation();try{await (0,b.deleteSession)(t),(0,y.mutateSessions)()}catch(e){console.error("Failed to delete session:",e)}};(0,r.useEffect)(()=>{(0,w.getConfig)().then(L)},[]),(0,r.useEffect)(()=>{N.has("new")&&A&&A.apiKeyConfigured&&!O.current&&!k&&(O.current=!0,(async()=>{P(!0);try{let t=await (0,b.createSession)({name:`Session ${C.length+1}`,model:A.defaultModel||"anthropic/claude-opus-4.7",toolApprovals:A.defaultToolApprovals||{}});(0,y.mutateSessions)(),e.replace(`/session/${t.id}`)}catch(e){console.error("Failed to auto-create session:",e),P(!1)}})())},[N,A,C.length,k,e]),(0,r.useEffect)(()=>{N.has("latest")&&!E&&C.length>0&&e.replace(`/session/${C[0].id}`)},[N,E,C,e]);let B=async()=>{if(_.trim()&&!z){I(!0),M(null);try{if((await (0,b.setApiKey)("ai-gateway",_.trim())).success){let e=await (0,w.getConfig)();L(e),D("")}else M("Failed to save API key. Please try again.")}catch(e){M("Failed to save API key. Please try again.")}finally{I(!1)}}},U=async()=>{if(!k){P(!0);try{let t=await (0,b.createSession)({name:`Session ${C.length+1}`,model:A?.defaultModel||"anthropic/claude-opus-4.7",toolApprovals:A?.defaultToolApprovals||{}});(0,y.mutateSessions)(),e.push(`/session/${t.id}`)}catch(e){console.error("Failed to create session:",e)}finally{P(!1)}}};return((0,r.useEffect)(()=>{let e=e=>{(e.metaKey||e.ctrlKey)&&"t"===e.key&&(e.preventDefault(),U())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[k,C.length,A]),A&&!A.apiKeyConfigured)?(0,t.jsx)("div",{className:"flex items-center justify-center h-full bg-gradient-to-b from-background to-muted/20",children:(0,t.jsxs)("div",{className:"text-center max-w-lg mx-auto p-8",children:[(0,t.jsx)("div",{className:"flex justify-center mb-8",children:(0,t.jsx)("div",{className:"relative size-28 rounded-2xl overflow-hidden shadow-xl ring-1 ring-white/10",children:(0,t.jsx)(n.default,{src:"/sparke-coder.png",alt:"Sparke - AI Coding Assistant",fill:!0,className:"object-cover",priority:!0})})}),(0,t.jsx)("h1",{className:"text-3xl font-bold mb-3 text-primary",children:"Welcome to SparkECoder"}),(0,t.jsxs)("div",{className:"bg-muted/50 rounded-lg p-6 mb-6 text-left",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,t.jsx)(i.Key,{className:"size-5 text-amber-500"}),(0,t.jsx)("h2",{className:"font-semibold",children:"API Key Required"})]}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground mb-4",children:"SparkECoder uses the Vercel AI Gateway. Enter your API key to get started."}),(0,t.jsxs)("div",{className:"flex gap-2 mb-3",children:[(0,t.jsx)(g.Input,{type:"password",placeholder:"Enter your AI Gateway API key",value:_,onChange:e=>D(e.target.value),onKeyDown:e=>"Enter"===e.key&&B(),className:"flex-1"}),(0,t.jsx)(x.Button,{onClick:B,disabled:!_.trim()||z,children:z?(0,t.jsx)(a.Loader2,{className:"size-4 animate-spin"}):"Save"})]}),H&&(0,t.jsxs)("div",{className:"flex items-center gap-2 text-sm text-destructive mb-3",children:[(0,t.jsx)(d.default,{className:"size-4"}),H]}),(0,t.jsxs)("a",{href:"https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-sm text-primary hover:underline",children:["Get an API key from Vercel",(0,t.jsx)(c.default,{className:"size-3"})]})]})]})}):(0,t.jsx)("div",{className:"flex items-center justify-center h-full bg-gradient-to-b from-background to-muted/20 overflow-auto",children:(0,t.jsxs)("div",{className:"text-center max-w-lg mx-auto p-8",children:[(0,t.jsx)("div",{className:"flex justify-center mb-8",children:(0,t.jsx)(h.TooltipProvider,{children:(0,t.jsxs)(h.Tooltip,{children:[(0,t.jsx)(h.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"relative group cursor-pointer",children:[(0,t.jsx)("div",{className:"absolute inset-0 rounded-3xl blur-2xl opacity-40 group-hover:opacity-60 transition-opacity bg-primary/30"}),(0,t.jsx)("div",{className:"relative size-28 rounded-2xl overflow-hidden shadow-xl ring-1 ring-white/10 hover-lift",children:(0,t.jsx)(n.default,{src:"/sparke-coder.png",alt:"Sparke - AI Coding Assistant",fill:!0,className:"object-cover sparke-idle",priority:!0})})]})}),(0,t.jsx)(h.TooltipContent,{children:"Meet Sparke, your coding companion!"})]})})}),(0,t.jsx)("h1",{className:"text-3xl font-bold mb-3 text-primary",children:"Welcome to SparkECoder"}),(0,t.jsx)("p",{className:"text-muted-foreground mb-8 leading-relaxed",children:"Your AI-powered coding assistant. Start a new session to begin building amazing things."}),(0,t.jsx)(x.Button,{size:"lg",onClick:U,disabled:k,className:"gap-2 px-8",children:k?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.Loader2,{className:"size-4 animate-spin"}),"Creating..."]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.Plus,{className:"size-4"}),"Start a Session"]})}),(0,t.jsxs)("p",{className:"mt-6 text-xs text-muted-foreground/70",children:["Press ",(0,t.jsx)("kbd",{className:"px-1.5 py-0.5 bg-muted rounded text-[10px] font-mono",children:"⌘"})," + ",(0,t.jsx)("kbd",{className:"px-1.5 py-0.5 bg-muted rounded text-[10px] font-mono",children:"T"})," to create a new session"]}),R.length>0&&(0,t.jsxs)("div",{className:"mt-6 text-left",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(m.Bot,{className:"size-4 text-muted-foreground"}),(0,t.jsx)("h2",{className:"text-sm font-medium text-muted-foreground",children:"Agents"})]}),(0,t.jsx)(o.default,{href:"/agents",className:"text-xs text-muted-foreground hover:text-foreground",children:"Open board →"})]}),(0,t.jsxs)("div",{className:"grid grid-cols-5 gap-2",children:[(0,t.jsx)(S,{label:"Running",value:T.running,tone:"text-emerald-500"}),(0,t.jsx)(S,{label:"Needs input",value:T.needs_attention,tone:"text-amber-500"}),(0,t.jsx)(S,{label:"Idle",value:T.idle,tone:"text-muted-foreground"}),(0,t.jsx)(S,{label:"Done",value:T.completed,tone:"text-blue-500"}),(0,t.jsx)(S,{label:"Failed",value:T.failed,tone:"text-rose-500"})]})]}),!E&&C.length>0&&(0,t.jsxs)("div",{className:"mt-10 text-left",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,t.jsx)(p.default,{className:"size-4 text-muted-foreground"}),(0,t.jsx)("h2",{className:"text-sm font-medium text-muted-foreground",children:"Recent Sessions"})]}),(0,t.jsx)("div",{className:"rounded-xl border border-border/60 bg-card/50 backdrop-blur-sm overflow-hidden",children:(0,t.jsx)(v.ScrollArea,{className:(0,j.cn)(C.length>5?"h-[280px]":""),children:(0,t.jsx)("div",{className:"divide-y divide-border/40",children:C.map(e=>{let r,l,n,s,a=W===e.id,i=!0===e.isStreaming;return(0,t.jsxs)(o.default,{href:`/session/${e.id}`,className:(0,j.cn)("flex items-center gap-3 p-3 transition-colors hover:bg-accent/50 group",i&&"bg-emerald-500/5"),onMouseEnter:()=>$(e.id),onMouseLeave:()=>$(null),children:[(0,t.jsx)("div",{className:(0,j.cn)("size-9 rounded-lg flex items-center justify-center shrink-0 transition-colors",i?"bg-emerald-500/10":"bg-muted/60 group-hover:bg-muted"),children:i?(0,t.jsx)("span",{className:"size-2.5 rounded-full bg-emerald-500 animate-pulse"}):(0,t.jsx)(u.MessageSquare,{className:"size-4 text-muted-foreground"})}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsx)("p",{className:(0,j.cn)("text-sm font-medium truncate",i&&"text-emerald-600 dark:text-emerald-400"),children:e.name||"Untitled Session"}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground truncate",children:i?(0,t.jsx)("span",{className:"text-emerald-600 dark:text-emerald-400",children:"Active now"}):"waiting"===e.status?(0,t.jsx)("span",{className:"text-amber-600 dark:text-amber-400",children:"Waiting for input"}):(r=new Date(e.updatedAt||e.createdAt),s=Math.floor((n=Math.floor((l=Math.floor(Math.floor((new Date().getTime()-r.getTime())/1e3)/60))/60))/24),l<1?"just now":1===l?"1 minute ago":l<60?`${l} minutes ago`:1===n?"1 hour ago":n<24?`${n} hours ago`:1===s?"yesterday":s<7?`${s} days ago`:`${Math.floor(s/7)} weeks ago`)})]}),a&&(0,t.jsx)(h.TooltipProvider,{children:(0,t.jsxs)(h.Tooltip,{children:[(0,t.jsx)(h.TooltipTrigger,{asChild:!0,children:(0,t.jsx)(x.Button,{size:"icon",variant:"ghost",className:"size-7 shrink-0 hover:bg-destructive/10 hover:text-destructive transition-colors",onClick:t=>F(t,e.id),children:(0,t.jsx)(f.Trash2,{className:"size-3.5"})})}),(0,t.jsx)(h.TooltipContent,{children:"Delete session"})]})})]},e.id)})})})})]})]})})}function C(){return(0,t.jsx)(r.Suspense,{fallback:(0,t.jsx)("div",{className:"flex items-center justify-center h-full",children:(0,t.jsx)(a.Loader2,{className:"size-6 animate-spin text-muted-foreground"})}),children:(0,t.jsx)(N,{})})}e.s(["default",()=>C],375635)}]);
@@ -1,4 +1,4 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,{otherChunks:["static/chunks/651e187cc15d66de.js","static/chunks/b9ad1584d4e11d12.js","static/chunks/a14243261b055626.js","static/chunks/186e0c1b3ff43c9c.js","static/chunks/862ced58ce21a270.js"],runtimeModuleIds:[195506]}]),(()=>{let e;if(!Array.isArray(globalThis.TURBOPACK))return;let t="/_next/",r=(self.TURBOPACK_CHUNK_SUFFIX??document?.currentScript?.getAttribute?.("src")?.replace(/^(.*(?=\?)|^.*$)/,""))||"",n=new WeakMap;function o(e,t){this.m=e,this.e=t}let l=o.prototype,i=Object.prototype.hasOwnProperty,s="u">typeof Symbol&&Symbol.toStringTag;function u(e,t,r){i.call(e,t)||Object.defineProperty(e,t,r)}function c(e,t){let r=e[t];return r||(r=a(t),e[t]=r),r}function a(e){return{exports:{},error:void 0,id:e,namespaceObject:void 0}}function f(e,t){u(e,"__esModule",{value:!0}),s&&u(e,s,{value:"Module"});let r=0;for(;r<t.length;){let n=t[r++],o=t[r++];if("number"==typeof o)if(0===o)u(e,n,{value:t[r++],enumerable:!0,writable:!1});else throw Error(`unexpected tag: ${o}`);else"function"==typeof t[r]?u(e,n,{get:o,set:t[r++],enumerable:!0}):u(e,n,{get:o,enumerable:!0})}Object.seal(e)}l.s=function(e,t){let r,n;null!=t?n=(r=c(this.c,t)).exports:(r=this.m,n=this.e),r.namespaceObject=n,f(n,e)},l.j=function(e,t){var r,o;let l,s,u;null!=t?s=(l=c(this.c,t)).exports:(l=this.m,s=this.e);let a=(r=l,o=s,(u=n.get(r))||(n.set(r,u=[]),r.exports=r.namespaceObject=new Proxy(o,{get(e,t){if(i.call(e,t)||"default"===t||"__esModule"===t)return Reflect.get(e,t);for(let e of u){let r=Reflect.get(e,t);if(void 0!==r)return r}},ownKeys(e){let t=Reflect.ownKeys(e);for(let e of u)for(let r of Reflect.ownKeys(e))"default"===r||t.includes(r)||t.push(r);return t}})),u);"object"==typeof e&&null!==e&&a.push(e)},l.v=function(e,t){(null!=t?c(this.c,t):this.m).exports=e},l.n=function(e,t){let r;(r=null!=t?c(this.c,t):this.m).exports=r.namespaceObject=e};let p=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,h=[null,p({}),p([]),p(p)];function d(e,t,r){let n=[],o=-1;for(let t=e;("object"==typeof t||"function"==typeof t)&&!h.includes(t);t=p(t))for(let r of Object.getOwnPropertyNames(t))n.push(r,function(e,t){return()=>e[t]}(e,r)),-1===o&&"default"===r&&(o=n.length-1);return r&&o>=0||(o>=0?n.splice(o,1,0,e):n.push("default",0,e)),f(t,n),t}function m(e){let t=B(e,this.m);if(t.namespaceObject)return t.namespaceObject;let r=t.exports;return t.namespaceObject=d(r,"function"==typeof r?function(...e){return r.apply(this,e)}:Object.create(null),r&&r.__esModule)}function b(e){let t=e.indexOf("#");-1!==t&&(e=e.substring(0,t));let r=e.indexOf("?");return -1!==r&&(e=e.substring(0,r)),e}function y(){let e,t;return{promise:new Promise((r,n)=>{t=n,e=r}),resolve:e,reject:t}}l.i=m,l.A=function(e){return this.r(e)(m.bind(this))},l.t="function"==typeof require?require:function(){throw Error("Unexpected use of runtime require")},l.r=function(e){return B(e,this.m).exports},l.f=function(e){function t(t){if(t=b(t),i.call(e,t))return e[t].module();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r}return t.keys=()=>Object.keys(e),t.resolve=t=>{if(t=b(t),i.call(e,t))return e[t].id();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r},t.import=async e=>await t(e),t};let O=Symbol("turbopack queues"),g=Symbol("turbopack exports"),w=Symbol("turbopack error");function C(e){e&&1!==e.status&&(e.status=1,e.forEach(e=>e.queueCount--),e.forEach(e=>e.queueCount--?e.queueCount++:e()))}l.a=function(e,t){let r=this.m,n=t?Object.assign([],{status:-1}):void 0,o=new Set,{resolve:l,reject:i,promise:s}=y(),u=Object.assign(s,{[g]:r.exports,[O]:e=>{n&&e(n),o.forEach(e),u.catch(()=>{})}}),c={get:()=>u,set(e){e!==u&&(u[g]=e)}};Object.defineProperty(r,"exports",c),Object.defineProperty(r,"namespaceObject",c),e(function(e){let t=e.map(e=>{if(null!==e&&"object"==typeof e){if(O in e)return e;if(null!=e&&"object"==typeof e&&"then"in e&&"function"==typeof e.then){let t=Object.assign([],{status:0}),r={[g]:{},[O]:e=>e(t)};return e.then(e=>{r[g]=e,C(t)},e=>{r[w]=e,C(t)}),r}}return{[g]:e,[O]:()=>{}}}),r=()=>t.map(e=>{if(e[w])throw e[w];return e[g]}),{promise:l,resolve:i}=y(),s=Object.assign(()=>i(r),{queueCount:0});function u(e){e!==n&&!o.has(e)&&(o.add(e),e&&0===e.status&&(s.queueCount++,e.push(s)))}return t.map(e=>e[O](u)),s.queueCount?l:r()},function(e){e?i(u[w]=e):l(u[g]),C(n)}),n&&-1===n.status&&(n.status=0)};let U=function(e){let t=new URL(e,"x:/"),r={};for(let e in t)r[e]=t[e];for(let t in r.href=e,r.pathname=e.replace(/[?#].*/,""),r.origin=r.protocol="",r.toString=r.toJSON=(...t)=>e,r)Object.defineProperty(this,t,{enumerable:!0,configurable:!0,value:r[t]})};function j(e,t){throw Error(`Invariant: ${t(e)}`)}U.prototype=URL.prototype,l.U=U,l.z=function(e){throw Error("dynamic usage of require is not supported")},l.g=globalThis;let R=o.prototype;var k,_=((k=_||{})[k.Runtime=0]="Runtime",k[k.Parent=1]="Parent",k[k.Update=2]="Update",k);let v=new Map;l.M=v;let $=new Map,P=new Map;async function S(e,t,r){let n;if("string"==typeof r)return E(e,t,K(r));let o=r.included||[],l=o.map(e=>!!v.has(e)||$.get(e));if(l.length>0&&l.every(e=>e))return void await Promise.all(l);let i=r.moduleChunks||[],s=i.map(e=>P.get(e)).filter(e=>e);if(s.length>0){if(s.length===i.length)return void await Promise.all(s);let r=new Set;for(let e of i)P.has(e)||r.add(e);for(let n of r){let r=E(e,t,K(n));P.set(n,r),s.push(r)}n=Promise.all(s)}else{for(let o of(n=E(e,t,K(r.path)),i))P.has(o)||P.set(o,n)}for(let e of o)$.has(e)||$.set(e,n);await n}R.l=function(e){return S(1,this.m.id,e)};let T=Promise.resolve(void 0),A=new WeakMap;function E(t,r,n){let o=e.loadChunkCached(t,n),l=A.get(o);if(void 0===l){let e=A.set.bind(A,o,T);l=o.then(e).catch(e=>{let o;switch(t){case 0:o=`as a runtime dependency of chunk ${r}`;break;case 1:o=`from module ${r}`;break;case 2:o="from an HMR update";break;default:j(t,e=>`Unknown source type: ${e}`)}let l=Error(`Failed to load chunk ${n} ${o}${e?`: ${e}`:""}`,e?{cause:e}:void 0);throw l.name="ChunkLoadError",l}),A.set(o,l)}return l}function K(e){return`${t}${e.split("/").map(e=>encodeURIComponent(e)).join("/")}${r}`}R.L=function(e){return E(1,this.m.id,e)},R.R=function(e){let t=this.r(e);return t?.default??t},R.P=function(e){return`/ROOT/${e??""}`},R.b=function(e){let t=new Blob([`self.TURBOPACK_WORKER_LOCATION = ${JSON.stringify(location.origin)};
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,{otherChunks:["static/chunks/651e187cc15d66de.js","static/chunks/735a2408c315b2f0.js","static/chunks/186e0c1b3ff43c9c.js","static/chunks/a14243261b055626.js","static/chunks/862ced58ce21a270.js"],runtimeModuleIds:[195506]}]),(()=>{let e;if(!Array.isArray(globalThis.TURBOPACK))return;let t="/_next/",r=(self.TURBOPACK_CHUNK_SUFFIX??document?.currentScript?.getAttribute?.("src")?.replace(/^(.*(?=\?)|^.*$)/,""))||"",n=new WeakMap;function o(e,t){this.m=e,this.e=t}let l=o.prototype,i=Object.prototype.hasOwnProperty,s="u">typeof Symbol&&Symbol.toStringTag;function u(e,t,r){i.call(e,t)||Object.defineProperty(e,t,r)}function c(e,t){let r=e[t];return r||(r=a(t),e[t]=r),r}function a(e){return{exports:{},error:void 0,id:e,namespaceObject:void 0}}function f(e,t){u(e,"__esModule",{value:!0}),s&&u(e,s,{value:"Module"});let r=0;for(;r<t.length;){let n=t[r++],o=t[r++];if("number"==typeof o)if(0===o)u(e,n,{value:t[r++],enumerable:!0,writable:!1});else throw Error(`unexpected tag: ${o}`);else"function"==typeof t[r]?u(e,n,{get:o,set:t[r++],enumerable:!0}):u(e,n,{get:o,enumerable:!0})}Object.seal(e)}l.s=function(e,t){let r,n;null!=t?n=(r=c(this.c,t)).exports:(r=this.m,n=this.e),r.namespaceObject=n,f(n,e)},l.j=function(e,t){var r,o;let l,s,u;null!=t?s=(l=c(this.c,t)).exports:(l=this.m,s=this.e);let a=(r=l,o=s,(u=n.get(r))||(n.set(r,u=[]),r.exports=r.namespaceObject=new Proxy(o,{get(e,t){if(i.call(e,t)||"default"===t||"__esModule"===t)return Reflect.get(e,t);for(let e of u){let r=Reflect.get(e,t);if(void 0!==r)return r}},ownKeys(e){let t=Reflect.ownKeys(e);for(let e of u)for(let r of Reflect.ownKeys(e))"default"===r||t.includes(r)||t.push(r);return t}})),u);"object"==typeof e&&null!==e&&a.push(e)},l.v=function(e,t){(null!=t?c(this.c,t):this.m).exports=e},l.n=function(e,t){let r;(r=null!=t?c(this.c,t):this.m).exports=r.namespaceObject=e};let p=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,h=[null,p({}),p([]),p(p)];function d(e,t,r){let n=[],o=-1;for(let t=e;("object"==typeof t||"function"==typeof t)&&!h.includes(t);t=p(t))for(let r of Object.getOwnPropertyNames(t))n.push(r,function(e,t){return()=>e[t]}(e,r)),-1===o&&"default"===r&&(o=n.length-1);return r&&o>=0||(o>=0?n.splice(o,1,0,e):n.push("default",0,e)),f(t,n),t}function m(e){let t=B(e,this.m);if(t.namespaceObject)return t.namespaceObject;let r=t.exports;return t.namespaceObject=d(r,"function"==typeof r?function(...e){return r.apply(this,e)}:Object.create(null),r&&r.__esModule)}function b(e){let t=e.indexOf("#");-1!==t&&(e=e.substring(0,t));let r=e.indexOf("?");return -1!==r&&(e=e.substring(0,r)),e}function y(){let e,t;return{promise:new Promise((r,n)=>{t=n,e=r}),resolve:e,reject:t}}l.i=m,l.A=function(e){return this.r(e)(m.bind(this))},l.t="function"==typeof require?require:function(){throw Error("Unexpected use of runtime require")},l.r=function(e){return B(e,this.m).exports},l.f=function(e){function t(t){if(t=b(t),i.call(e,t))return e[t].module();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r}return t.keys=()=>Object.keys(e),t.resolve=t=>{if(t=b(t),i.call(e,t))return e[t].id();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r},t.import=async e=>await t(e),t};let O=Symbol("turbopack queues"),g=Symbol("turbopack exports"),w=Symbol("turbopack error");function C(e){e&&1!==e.status&&(e.status=1,e.forEach(e=>e.queueCount--),e.forEach(e=>e.queueCount--?e.queueCount++:e()))}l.a=function(e,t){let r=this.m,n=t?Object.assign([],{status:-1}):void 0,o=new Set,{resolve:l,reject:i,promise:s}=y(),u=Object.assign(s,{[g]:r.exports,[O]:e=>{n&&e(n),o.forEach(e),u.catch(()=>{})}}),c={get:()=>u,set(e){e!==u&&(u[g]=e)}};Object.defineProperty(r,"exports",c),Object.defineProperty(r,"namespaceObject",c),e(function(e){let t=e.map(e=>{if(null!==e&&"object"==typeof e){if(O in e)return e;if(null!=e&&"object"==typeof e&&"then"in e&&"function"==typeof e.then){let t=Object.assign([],{status:0}),r={[g]:{},[O]:e=>e(t)};return e.then(e=>{r[g]=e,C(t)},e=>{r[w]=e,C(t)}),r}}return{[g]:e,[O]:()=>{}}}),r=()=>t.map(e=>{if(e[w])throw e[w];return e[g]}),{promise:l,resolve:i}=y(),s=Object.assign(()=>i(r),{queueCount:0});function u(e){e!==n&&!o.has(e)&&(o.add(e),e&&0===e.status&&(s.queueCount++,e.push(s)))}return t.map(e=>e[O](u)),s.queueCount?l:r()},function(e){e?i(u[w]=e):l(u[g]),C(n)}),n&&-1===n.status&&(n.status=0)};let U=function(e){let t=new URL(e,"x:/"),r={};for(let e in t)r[e]=t[e];for(let t in r.href=e,r.pathname=e.replace(/[?#].*/,""),r.origin=r.protocol="",r.toString=r.toJSON=(...t)=>e,r)Object.defineProperty(this,t,{enumerable:!0,configurable:!0,value:r[t]})};function j(e,t){throw Error(`Invariant: ${t(e)}`)}U.prototype=URL.prototype,l.U=U,l.z=function(e){throw Error("dynamic usage of require is not supported")},l.g=globalThis;let R=o.prototype;var k,_=((k=_||{})[k.Runtime=0]="Runtime",k[k.Parent=1]="Parent",k[k.Update=2]="Update",k);let v=new Map;l.M=v;let $=new Map,P=new Map;async function S(e,t,r){let n;if("string"==typeof r)return E(e,t,K(r));let o=r.included||[],l=o.map(e=>!!v.has(e)||$.get(e));if(l.length>0&&l.every(e=>e))return void await Promise.all(l);let i=r.moduleChunks||[],s=i.map(e=>P.get(e)).filter(e=>e);if(s.length>0){if(s.length===i.length)return void await Promise.all(s);let r=new Set;for(let e of i)P.has(e)||r.add(e);for(let n of r){let r=E(e,t,K(n));P.set(n,r),s.push(r)}n=Promise.all(s)}else{for(let o of(n=E(e,t,K(r.path)),i))P.has(o)||P.set(o,n)}for(let e of o)$.has(e)||$.set(e,n);await n}R.l=function(e){return S(1,this.m.id,e)};let T=Promise.resolve(void 0),A=new WeakMap;function E(t,r,n){let o=e.loadChunkCached(t,n),l=A.get(o);if(void 0===l){let e=A.set.bind(A,o,T);l=o.then(e).catch(e=>{let o;switch(t){case 0:o=`as a runtime dependency of chunk ${r}`;break;case 1:o=`from module ${r}`;break;case 2:o="from an HMR update";break;default:j(t,e=>`Unknown source type: ${e}`)}let l=Error(`Failed to load chunk ${n} ${o}${e?`: ${e}`:""}`,e?{cause:e}:void 0);throw l.name="ChunkLoadError",l}),A.set(o,l)}return l}function K(e){return`${t}${e.split("/").map(e=>encodeURIComponent(e)).join("/")}${r}`}R.L=function(e){return E(1,this.m.id,e)},R.R=function(e){let t=this.r(e);return t?.default??t},R.P=function(e){return`/ROOT/${e??""}`},R.b=function(e){let t=new Blob([`self.TURBOPACK_WORKER_LOCATION = ${JSON.stringify(location.origin)};
2
2
  self.TURBOPACK_CHUNK_SUFFIX = ${JSON.stringify(r)};
3
3
  self.TURBOPACK_NEXT_CHUNK_URLS = ${JSON.stringify(e.reverse().map(K),null,2)};
4
4
  importScripts(...self.TURBOPACK_NEXT_CHUNK_URLS.map(c => self.TURBOPACK_WORKER_LOCATION + c).reverse());`],{type:"text/javascript"});return URL.createObjectURL(t)};let x=/\.js(?:\?[^#]*)?(?:#.*)?$/,N=/\.css(?:\?[^#]*)?(?:#.*)?$/;function M(e){return N.test(e)}l.w=function(t,r,n){return e.loadWebAssembly(1,this.m.id,t,r,n)},l.u=function(t,r){return e.loadWebAssemblyModule(1,this.m.id,t,r)};let L={};l.c=L;let B=(e,t)=>{let r=L[e];if(r){if(r.error)throw r.error;return r}return q(e,_.Parent,t.id)};function q(e,t,r){let n=v.get(e);if("function"!=typeof n)throw Error(function(e,t,r){let n;switch(t){case 0:n=`as a runtime entry of chunk ${r}`;break;case 1:n=`because it was required from module ${r}`;break;case 2:n="because of an HMR update";break;default:j(t,e=>`Unknown source type: ${e}`)}return`Module ${e} was instantiated ${n}, but the module factory is not available.`}(e,t,r));let l=a(e),i=l.exports;L[e]=l;let s=new o(l,i);try{n(s,l,i)}catch(e){throw l.error=e,e}return l.namespaceObject&&l.exports!==l.namespaceObject&&d(l.exports,l.namespaceObject),l}function I(r){let n,o=function(e){if("string"==typeof e)return e;let r=decodeURIComponent(("u">typeof TURBOPACK_NEXT_CHUNK_URLS?TURBOPACK_NEXT_CHUNK_URLS.pop():e.getAttribute("src")).replace(/[?#].*$/,""));return r.startsWith(t)?r.slice(t.length):r}(r[0]);return 2===r.length?n=r[1]:(n=void 0,!function(e,t,r,n){let o=1;for(;o<e.length;){let t=e[o],n=o+1;for(;n<e.length&&"function"!=typeof e[n];)n++;if(n===e.length)throw Error("malformed chunk format, expected a factory function");if(!r.has(t)){let l=e[n];for(Object.defineProperty(l,"name",{value:"module evaluation"});o<n;o++)t=e[o],r.set(t,l)}o=n+1}}(r,0,v)),e.registerChunk(o,n)}let W=new Map;function H(e){let t=W.get(e);if(!t){let r,n;t={resolved:!1,loadingStarted:!1,promise:new Promise((e,t)=>{r=e,n=t}),resolve:()=>{t.resolved=!0,r()},reject:n},W.set(e,t)}return t}e={async registerChunk(e,t){if(H(K(e)).resolve(),null!=t){for(let e of t.otherChunks)H(K("string"==typeof e?e:e.path));if(await Promise.all(t.otherChunks.map(t=>S(0,e,t))),t.runtimeModuleIds.length>0)for(let r of t.runtimeModuleIds)!function(e,t){let r=L[t];if(r){if(r.error)throw r.error;return}q(t,_.Runtime,e)}(e,r)}},loadChunkCached:(e,t)=>(function(e,t){let r=H(t);if(r.loadingStarted)return r.promise;if(e===_.Runtime)return r.loadingStarted=!0,M(t)&&r.resolve(),r.promise;if("function"==typeof importScripts)if(M(t));else if(x.test(t))self.TURBOPACK_NEXT_CHUNK_URLS.push(t),importScripts(TURBOPACK_WORKER_LOCATION+t);else throw Error(`can't infer type of chunk from URL ${t} in worker`);else{let e=decodeURI(t);if(M(t))if(document.querySelectorAll(`link[rel=stylesheet][href="${t}"],link[rel=stylesheet][href^="${t}?"],link[rel=stylesheet][href="${e}"],link[rel=stylesheet][href^="${e}?"]`).length>0)r.resolve();else{let e=document.createElement("link");e.rel="stylesheet",e.href=t,e.onerror=()=>{r.reject()},e.onload=()=>{r.resolve()},document.head.appendChild(e)}else if(x.test(t)){let n=document.querySelectorAll(`script[src="${t}"],script[src^="${t}?"],script[src="${e}"],script[src^="${e}?"]`);if(n.length>0)for(let e of Array.from(n))e.addEventListener("error",()=>{r.reject()});else{let e=document.createElement("script");e.src=t,e.onerror=()=>{r.reject()},document.head.appendChild(e)}}else throw Error(`can't infer type of chunk from URL ${t}`)}return r.loadingStarted=!0,r.promise})(e,t),async loadWebAssembly(e,t,r,n,o){let l=fetch(K(r)),{instance:i}=await WebAssembly.instantiateStreaming(l,o);return i.exports},async loadWebAssemblyModule(e,t,r,n){let o=fetch(K(r));return await WebAssembly.compileStreaming(o)}};let F=globalThis.TURBOPACK;globalThis.TURBOPACK={push:I},F.forEach(I)})();
@@ -1,73 +1,19 @@
1
1
  import type { NextConfig } from "next";
2
2
  import createMDX from "@next/mdx";
3
3
 
4
- // Origins allowed to iframe `/embed/:id` pages. Comma-separated list.
5
- //
6
- // The personal-agents dashboard's TaskDrawer iframes `${webUrl}/embed/${sparkTaskId}`
7
- // to show the live SparkECoder session inside the dashboard. By default both
8
- // Next.js and Cloudflare Tunnel emit `X-Frame-Options: SAMEORIGIN`, which
9
- // blocks that. We explicitly allow the dashboard origins (and localhost
10
- // during dev) on `/embed/:path*` only — every other route stays
11
- // frame-locked.
12
- //
13
- // Override at runtime with EMBED_FRAME_ANCESTORS, e.g.:
14
- // EMBED_FRAME_ANCESTORS="https://personal-agents.studyfetchcms.com,http://localhost:3000"
15
- const DEFAULT_EMBED_FRAME_ANCESTORS = [
16
- "https://personal-agents.studyfetchcms.com",
17
- "http://localhost:3000",
18
- "http://localhost:3001",
19
- "https://sparkecoder.com",
20
- "https://sparkecode.com",
21
- ];
22
- const embedFrameAncestors = (
23
- process.env.EMBED_FRAME_ANCESTORS?.split(",")
24
- .map((s) => s.trim())
25
- .filter(Boolean) ?? DEFAULT_EMBED_FRAME_ANCESTORS
26
- ).join(" ");
27
-
28
4
  const nextConfig: NextConfig = {
29
5
  // Output standalone build for npm package distribution
30
6
  // This creates a self-contained build that doesn't need source files
31
7
  output: "standalone",
32
- // Configure `pageExtensions` to include markdown and MDX files
33
8
  pageExtensions: ["js", "jsx", "md", "mdx", "ts", "tsx"],
34
- async headers() {
35
- return [
36
- {
37
- // Only the embed route opts out of the default frame-deny posture.
38
- source: "/embed/:path*",
39
- headers: [
40
- {
41
- // CSP frame-ancestors is the modern way to allow specific
42
- // embedders. `'self'` keeps same-origin embedding working
43
- // (the live preview opens the same URL in a new tab).
44
- key: "Content-Security-Policy",
45
- value: `frame-ancestors 'self' ${embedFrameAncestors}`,
46
- },
47
- {
48
- // Modern browsers honour CSP over XFO when both are present,
49
- // but we override XFO too for older clients. There's no
50
- // standard "allow these origins" XFO value, so we just remove
51
- // it by setting a no-op string browsers ignore. (DENY would
52
- // re-block; SAMEORIGIN is what we're getting today.)
53
- key: "X-Frame-Options",
54
- value: "ALLOWALL",
55
- },
56
- ],
57
- },
58
- ];
59
- },
60
9
  };
61
10
 
62
11
  const withMDX = createMDX({
63
- // Support both .md and .mdx files
64
12
  extension: /\.(md|mdx)$/,
65
- // Add markdown plugins here, as desired
66
13
  options: {
67
14
  remarkPlugins: [],
68
15
  rehypePlugins: [],
69
16
  },
70
17
  });
71
18
 
72
- // Merge MDX config with Next.js config
73
19
  export default withMDX(nextConfig);
@@ -90,9 +90,9 @@
90
90
  "license": "MIT"
91
91
  },
92
92
  "node_modules/@ai-sdk/gateway": {
93
- "version": "3.0.114",
94
- "resolved": "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-3.0.114.tgz",
95
- "integrity": "sha512-MqkZ5sd+qiq6RgIxELkoFQXg2/JwK+WCMaot7U+rtrZpWJl3fSyYvc28SC03b256o4F7OXjQtdjTqs81B2w+dA==",
93
+ "version": "3.0.115",
94
+ "resolved": "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-3.0.115.tgz",
95
+ "integrity": "sha512-xonmGfN9pt54WdKqMzWe68BRYS3rsYvraBzioyA0gfNcecHs8Ir5qk/X8grJSyZ95hghjWiOphrK6bAc11E6SA==",
96
96
  "license": "Apache-2.0",
97
97
  "dependencies": {
98
98
  "@ai-sdk/provider": "3.0.10",
@@ -6478,12 +6478,12 @@
6478
6478
  }
6479
6479
  },
6480
6480
  "node_modules/ai": {
6481
- "version": "6.0.180",
6482
- "resolved": "https://registry.npmjs.org/ai/-/ai-6.0.180.tgz",
6483
- "integrity": "sha512-tOyRbwD0PEjMZKGvYQcTsv95K2zktwwNhQ49QOUAh0g8MNprO7ELIO1SgANMuPc0BFtkP6Ny6OAdjq3TtxLCbQ==",
6481
+ "version": "6.0.184",
6482
+ "resolved": "https://registry.npmjs.org/ai/-/ai-6.0.184.tgz",
6483
+ "integrity": "sha512-j//zHkKvj5ra27l8izHco8cj1g1Pr7vx1ZK+hrzrkHvndgIRmdfZKOb6+RAPpvbk42qGIsuYvlYbGlVAu3erNQ==",
6484
6484
  "license": "Apache-2.0",
6485
6485
  "dependencies": {
6486
- "@ai-sdk/gateway": "3.0.114",
6486
+ "@ai-sdk/gateway": "3.0.115",
6487
6487
  "@ai-sdk/provider": "3.0.10",
6488
6488
  "@ai-sdk/provider-utils": "4.0.27",
6489
6489
  "@opentelemetry/api": "^1.9.0"
@@ -0,0 +1,222 @@
1
+ 'use client';
2
+
3
+ import { useMemo, useState } from 'react';
4
+ import Link from 'next/link';
5
+ import {
6
+ Bot,
7
+ Loader2,
8
+ PauseCircle,
9
+ CheckCircle2,
10
+ XCircle,
11
+ MessageCircleQuestion,
12
+ PlayCircle,
13
+ } from 'lucide-react';
14
+ import { Button } from '@/components/ui/button';
15
+ import { useSessions } from '@/hooks/use-sessions';
16
+ import { cn } from '@/lib/utils';
17
+ import { answerAgentQuestion, type AgentStatus, type Session } from '@/lib/api';
18
+ import { mutateSessions } from '@/hooks/use-sessions';
19
+
20
+ const COLUMNS: { key: AgentStatus; label: string; icon: React.ComponentType<{ className?: string }>; tone: string }[] = [
21
+ { key: 'running', label: 'In progress', icon: Loader2, tone: 'text-emerald-500' },
22
+ { key: 'needs_attention', label: 'Needs your input', icon: MessageCircleQuestion, tone: 'text-amber-500' },
23
+ { key: 'idle', label: 'Idle', icon: PauseCircle, tone: 'text-muted-foreground' },
24
+ { key: 'completed', label: 'Completed', icon: CheckCircle2, tone: 'text-blue-500' },
25
+ { key: 'failed', label: 'Failed', icon: XCircle, tone: 'text-rose-500' },
26
+ ];
27
+
28
+ function formatRelative(iso?: string): string {
29
+ if (!iso) return '';
30
+ const diff = Date.now() - new Date(iso).getTime();
31
+ const m = Math.floor(diff / 60_000);
32
+ if (m < 1) return 'just now';
33
+ if (m < 60) return `${m}m ago`;
34
+ const h = Math.floor(m / 60);
35
+ if (h < 24) return `${h}h ago`;
36
+ const d = Math.floor(h / 24);
37
+ return `${d}d ago`;
38
+ }
39
+
40
+ export default function AgentsBoardPage() {
41
+ const { sessions, isLoading } = useSessions();
42
+ const workers = useMemo(
43
+ () => sessions.filter((s) => (s.role ?? 'chat') === 'worker'),
44
+ [sessions],
45
+ );
46
+
47
+ const grouped = useMemo(() => {
48
+ const g: Record<AgentStatus, Session[]> = {
49
+ running: [], needs_attention: [], idle: [], completed: [], failed: [],
50
+ };
51
+ for (const s of workers) {
52
+ const status = (s.agentStatus ?? (s.isStreaming ? 'running' : 'idle')) as AgentStatus;
53
+ if (g[status]) g[status].push(s);
54
+ }
55
+ return g;
56
+ }, [workers]);
57
+
58
+ return (
59
+ <div className="h-full flex flex-col overflow-hidden">
60
+ <div className="px-6 py-4 border-b border-border/60 flex items-center justify-between">
61
+ <div className="flex items-center gap-2">
62
+ <Bot className="size-5 text-primary" />
63
+ <h1 className="text-lg font-semibold">Agents</h1>
64
+ <span className="text-xs text-muted-foreground">
65
+ {workers.length} {workers.length === 1 ? 'agent' : 'agents'}
66
+ </span>
67
+ </div>
68
+ <Link href="/" className="text-xs text-muted-foreground hover:text-foreground">Back to home</Link>
69
+ </div>
70
+
71
+ <div className="flex-1 overflow-x-auto overflow-y-hidden">
72
+ <div className="flex h-full gap-4 p-4 min-w-max">
73
+ {COLUMNS.map((col) => (
74
+ <Column
75
+ key={col.key}
76
+ col={col}
77
+ sessions={grouped[col.key]}
78
+ loading={isLoading && workers.length === 0}
79
+ />
80
+ ))}
81
+ </div>
82
+ </div>
83
+ </div>
84
+ );
85
+ }
86
+
87
+ function Column({
88
+ col,
89
+ sessions,
90
+ loading,
91
+ }: {
92
+ col: { key: AgentStatus; label: string; icon: React.ComponentType<{ className?: string }>; tone: string };
93
+ sessions: Session[];
94
+ loading: boolean;
95
+ }) {
96
+ const Icon = col.icon;
97
+ return (
98
+ <div className="flex flex-col w-80 shrink-0 rounded-lg bg-card/40 border border-border/60">
99
+ <div className="px-3 py-2 flex items-center gap-2 border-b border-border/60">
100
+ <Icon className={cn('size-4', col.tone, col.key === 'running' && 'animate-spin')} />
101
+ <h2 className="text-sm font-medium">{col.label}</h2>
102
+ <span className="ml-auto text-xs text-muted-foreground tabular-nums">{sessions.length}</span>
103
+ </div>
104
+ <div className="flex-1 overflow-y-auto p-2 space-y-2">
105
+ {loading && sessions.length === 0 ? (
106
+ <p className="text-xs text-muted-foreground text-center py-6">Loading…</p>
107
+ ) : sessions.length === 0 ? (
108
+ <p className="text-xs text-muted-foreground/70 text-center py-6 italic">No agents</p>
109
+ ) : (
110
+ sessions.map((s) => <AgentCard key={s.id} session={s} />)
111
+ )}
112
+ </div>
113
+ </div>
114
+ );
115
+ }
116
+
117
+ function AgentCard({ session }: { session: Session }) {
118
+ const [answer, setAnswer] = useState('');
119
+ const [sending, setSending] = useState(false);
120
+ const status = (session.agentStatus ?? 'idle') as AgentStatus;
121
+ const task = session.config?.task;
122
+ const result = task?.result as any;
123
+
124
+ const onAnswer = async () => {
125
+ if (!session.pendingQuestion || !answer.trim() || sending) return;
126
+ setSending(true);
127
+ try {
128
+ await answerAgentQuestion(session.id, session.pendingQuestion.questionId, answer.trim());
129
+ setAnswer('');
130
+ mutateSessions();
131
+ } finally {
132
+ setSending(false);
133
+ }
134
+ };
135
+
136
+ return (
137
+ <Link
138
+ href={`/session/${session.id}`}
139
+ className="block rounded-md border border-border/60 bg-background hover:bg-accent/40 transition-colors p-3 group"
140
+ >
141
+ <div className="flex items-start gap-2">
142
+ <div className="flex-1 min-w-0">
143
+ <p className="text-sm font-medium truncate">{session.name || 'Untitled agent'}</p>
144
+ {session.lastMessagePreview && (
145
+ <p className="text-xs text-muted-foreground line-clamp-2 mt-0.5">
146
+ {session.lastMessagePreview}
147
+ </p>
148
+ )}
149
+ {status === 'completed' && result?.summary && (
150
+ <p className="text-xs text-blue-600 dark:text-blue-400 line-clamp-2 mt-1">
151
+ ✓ {String(result.summary)}
152
+ </p>
153
+ )}
154
+ {status === 'failed' && task?.error && (
155
+ <p className="text-xs text-rose-500 line-clamp-2 mt-1">{task.error}</p>
156
+ )}
157
+ </div>
158
+ {status === 'running' && <Loader2 className="size-3.5 animate-spin text-emerald-500 shrink-0 mt-1" />}
159
+ </div>
160
+
161
+ {session.pendingQuestion && (
162
+ <div
163
+ className="mt-3 rounded border border-amber-500/30 bg-amber-500/5 p-2"
164
+ onClick={(e) => e.preventDefault()}
165
+ >
166
+ <p className="text-xs font-medium text-amber-700 dark:text-amber-300">
167
+ Question: {session.pendingQuestion.question}
168
+ </p>
169
+ {session.pendingQuestion.context && (
170
+ <p className="text-[11px] text-muted-foreground mt-1">{session.pendingQuestion.context}</p>
171
+ )}
172
+ {session.pendingQuestion.choices && session.pendingQuestion.choices.length > 0 && (
173
+ <div className="flex flex-wrap gap-1 mt-2">
174
+ {session.pendingQuestion.choices.map((choice) => (
175
+ <button
176
+ key={choice}
177
+ type="button"
178
+ className="text-[11px] px-1.5 py-0.5 rounded bg-amber-500/10 hover:bg-amber-500/20 text-amber-700 dark:text-amber-200"
179
+ onClick={(e) => {
180
+ e.preventDefault();
181
+ setAnswer(choice);
182
+ }}
183
+ >
184
+ {choice}
185
+ </button>
186
+ ))}
187
+ </div>
188
+ )}
189
+ <div className="flex gap-1 mt-2">
190
+ <input
191
+ type="text"
192
+ value={answer}
193
+ onChange={(e) => setAnswer(e.target.value)}
194
+ onKeyDown={(e) => {
195
+ if (e.key === 'Enter') {
196
+ e.preventDefault();
197
+ onAnswer();
198
+ }
199
+ }}
200
+ placeholder="Type an answer…"
201
+ className="flex-1 px-2 py-1 text-xs rounded border border-border/60 bg-background focus:outline-none focus:ring-1 focus:ring-amber-500/60"
202
+ />
203
+ <Button
204
+ size="sm"
205
+ type="button"
206
+ disabled={!answer.trim() || sending}
207
+ onClick={(e) => { e.preventDefault(); onAnswer(); }}
208
+ className="h-7 px-2 text-xs"
209
+ >
210
+ {sending ? '…' : 'Send'}
211
+ </Button>
212
+ </div>
213
+ </div>
214
+ )}
215
+
216
+ <div className="mt-2 flex items-center gap-2 text-[10px] text-muted-foreground">
217
+ <PlayCircle className="size-3" />
218
+ <span>{formatRelative(session.updatedAt || session.createdAt)}</span>
219
+ </div>
220
+ </Link>
221
+ );
222
+ }
@@ -4,7 +4,7 @@ import { useState, useEffect, useRef, Suspense } from 'react';
4
4
  import { useRouter, useSearchParams } from 'next/navigation';
5
5
  import Image from 'next/image';
6
6
  import Link from 'next/link';
7
- import { Plus, Loader2, Key, ExternalLink, AlertCircle, MessageSquare, Clock, Trash2 } from 'lucide-react';
7
+ import { Plus, Loader2, Key, ExternalLink, AlertCircle, MessageSquare, Clock, Trash2, Bot } from 'lucide-react';
8
8
  import {
9
9
  Tooltip,
10
10
  TooltipContent,
@@ -39,10 +39,27 @@ function formatRelativeTime(dateString: string): string {
39
39
  return `${Math.floor(diffDays / 7)} weeks ago`;
40
40
  }
41
41
 
42
+ function SummaryStat({ label, value, tone }: { label: string; value: number; tone: string }) {
43
+ return (
44
+ <div className="rounded-lg border border-border/60 bg-card/50 p-2 text-center">
45
+ <p className={cn('text-lg font-semibold tabular-nums', tone)}>{value}</p>
46
+ <p className="text-[10px] text-muted-foreground uppercase tracking-wide">{label}</p>
47
+ </div>
48
+ );
49
+ }
50
+
42
51
  function HomeContent() {
43
52
  const router = useRouter();
44
53
  const searchParams = useSearchParams();
45
54
  const { sessions, isLoading: loadingSessions } = useSessions();
55
+ const workers = sessions.filter((s) => s.role === 'worker');
56
+ const workersByStatus = {
57
+ running: workers.filter((s) => s.agentStatus === 'running').length,
58
+ needs_attention: workers.filter((s) => s.agentStatus === 'needs_attention').length,
59
+ completed: workers.filter((s) => s.agentStatus === 'completed').length,
60
+ failed: workers.filter((s) => s.agentStatus === 'failed').length,
61
+ idle: workers.filter((s) => s.agentStatus === 'idle').length,
62
+ };
46
63
  const [creating, setCreating] = useState(false);
47
64
  const [config, setConfig] = useState<AppConfig | null>(null);
48
65
  const [apiKeyInput, setApiKeyInput] = useState('');
@@ -295,6 +312,28 @@ function HomeContent() {
295
312
  Press <kbd className="px-1.5 py-0.5 bg-muted rounded text-[10px] font-mono">⌘</kbd> + <kbd className="px-1.5 py-0.5 bg-muted rounded text-[10px] font-mono">T</kbd> to create a new session
296
313
  </p>
297
314
 
315
+ {/* Agents summary */}
316
+ {workers.length > 0 && (
317
+ <div className="mt-6 text-left">
318
+ <div className="flex items-center justify-between mb-3">
319
+ <div className="flex items-center gap-2">
320
+ <Bot className="size-4 text-muted-foreground" />
321
+ <h2 className="text-sm font-medium text-muted-foreground">Agents</h2>
322
+ </div>
323
+ <Link href="/agents" className="text-xs text-muted-foreground hover:text-foreground">
324
+ Open board →
325
+ </Link>
326
+ </div>
327
+ <div className="grid grid-cols-5 gap-2">
328
+ <SummaryStat label="Running" value={workersByStatus.running} tone="text-emerald-500" />
329
+ <SummaryStat label="Needs input" value={workersByStatus.needs_attention} tone="text-amber-500" />
330
+ <SummaryStat label="Idle" value={workersByStatus.idle} tone="text-muted-foreground" />
331
+ <SummaryStat label="Done" value={workersByStatus.completed} tone="text-blue-500" />
332
+ <SummaryStat label="Failed" value={workersByStatus.failed} tone="text-rose-500" />
333
+ </div>
334
+ </div>
335
+ )}
336
+
298
337
  {/* Recent Sessions */}
299
338
  {!loadingSessions && sessions.length > 0 && (
300
339
  <div className="mt-10 text-left">
@@ -3,6 +3,7 @@
3
3
  import { use, useEffect, useState } from 'react';
4
4
  import { useRouter } from 'next/navigation';
5
5
  import { ChatInterface } from '@/components/chat-interface';
6
+ import { PendingQuestionBanner } from '@/components/pending-question-banner';
6
7
  import { getSession, type Session } from '@/lib/api';
7
8
  import { Loader2 } from 'lucide-react';
8
9
 
@@ -60,5 +61,12 @@ export default function SessionPage({
60
61
  );
61
62
  }
62
63
 
63
- return <ChatInterface session={session} />;
64
+ return (
65
+ <div className="flex flex-col h-full">
66
+ <PendingQuestionBanner sessionId={session.id} />
67
+ <div className="flex-1 min-h-0">
68
+ <ChatInterface session={session} />
69
+ </div>
70
+ </div>
71
+ );
64
72
  }