sparkecoder 0.1.98 → 0.1.100

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 (305) hide show
  1. package/README.md +41 -41
  2. package/dist/agent/index.d.ts +3 -3
  3. package/dist/agent/index.js +1274 -59
  4. package/dist/agent/index.js.map +1 -1
  5. package/dist/cli.js +10671 -8973
  6. package/dist/cli.js.map +1 -1
  7. package/dist/db/index.d.ts +2 -2
  8. package/dist/{index-BvIissiB.d.ts → index-D5l-DMGC.d.ts} +390 -6
  9. package/dist/index.d.ts +5 -5
  10. package/dist/index.js +10002 -8096
  11. package/dist/index.js.map +1 -1
  12. package/dist/{schema-CohdIL13.d.ts → schema-ecQSnCMz.d.ts} +41 -0
  13. package/dist/server/index.js +8867 -6969
  14. package/dist/server/index.js.map +1 -1
  15. package/dist/skills/default/manage-mcp.md +94 -0
  16. package/dist/skills/default/search-conversations.md +100 -0
  17. package/dist/tools/index.d.ts +2 -2
  18. package/dist/tools/index.js +111 -2
  19. package/dist/tools/index.js.map +1 -1
  20. package/package.json +5 -1
  21. package/src/skills/default/manage-mcp.md +94 -0
  22. package/src/skills/default/search-conversations.md +100 -0
  23. package/web/.next/BUILD_ID +1 -1
  24. package/web/.next/standalone/web/.next/BUILD_ID +1 -1
  25. package/web/.next/standalone/web/.next/app-path-routes-manifest.json +2 -1
  26. package/web/.next/standalone/web/.next/build-manifest.json +5 -5
  27. package/web/.next/standalone/web/.next/prerender-manifest.json +51 -3
  28. package/web/.next/standalone/web/.next/routes-manifest.json +13 -24
  29. package/web/.next/standalone/web/.next/server/app/(main)/agents/page/app-paths-manifest.json +3 -0
  30. package/web/.next/standalone/web/.next/server/app/{embed/[id] → (main)/agents}/page/build-manifest.json +3 -3
  31. package/web/.next/standalone/web/.next/server/app/{embed/[id] → (main)/agents}/page/next-font-manifest.json +1 -1
  32. package/web/.next/standalone/web/.next/server/app/{embed/[id] → (main)/agents}/page.js +7 -6
  33. package/web/.next/standalone/web/.next/server/app/(main)/agents/page.js.nft.json +1 -0
  34. package/web/.next/standalone/web/.next/server/app/(main)/agents/page_client-reference-manifest.js +2 -0
  35. package/web/.next/standalone/web/.next/server/app/(main)/page/build-manifest.json +3 -3
  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.js.nft.json +1 -1
  40. package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page_client-reference-manifest.js +1 -1
  41. package/web/.next/standalone/web/.next/server/app/(main)/settings/page/app-paths-manifest.json +3 -0
  42. package/web/.next/standalone/web/.next/server/app/(main)/settings/page/build-manifest.json +18 -0
  43. package/web/.next/standalone/web/.next/server/app/(main)/settings/page/next-font-manifest.json +11 -0
  44. package/web/.next/standalone/web/.next/server/app/(main)/settings/page/react-loadable-manifest.json +1 -0
  45. package/web/.next/standalone/web/.next/server/app/(main)/settings/page/server-reference-manifest.json +4 -0
  46. package/web/.next/standalone/web/.next/server/app/(main)/settings/page.js +21 -0
  47. package/web/.next/standalone/web/.next/server/app/(main)/settings/page.js.map +5 -0
  48. package/web/.next/standalone/web/.next/server/app/(main)/settings/page.js.nft.json +1 -0
  49. package/web/.next/standalone/web/.next/server/app/(main)/settings/page_client-reference-manifest.js +2 -0
  50. package/web/.next/standalone/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
  51. package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
  52. package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
  53. package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  54. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  55. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  56. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  57. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  58. package/web/.next/standalone/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
  59. package/web/.next/standalone/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  60. package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
  61. package/web/.next/standalone/web/.next/server/app/_not-found.rsc +3 -3
  62. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  63. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  64. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  65. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  66. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  67. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  68. package/web/.next/standalone/web/.next/server/app/agents.html +1 -0
  69. package/web/.next/standalone/web/.next/server/app/agents.meta +16 -0
  70. package/web/.next/standalone/web/.next/server/app/agents.rsc +25 -0
  71. package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents/__PAGE__.segment.rsc +9 -0
  72. package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents.segment.rsc +4 -0
  73. package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p.segment.rsc +7 -0
  74. package/web/.next/standalone/web/.next/server/app/agents.segments/_full.segment.rsc +25 -0
  75. package/web/.next/standalone/web/.next/server/app/agents.segments/_head.segment.rsc +6 -0
  76. package/web/.next/standalone/web/.next/server/app/agents.segments/_index.segment.rsc +7 -0
  77. package/web/.next/standalone/web/.next/server/app/agents.segments/_tree.segment.rsc +5 -0
  78. package/web/.next/standalone/web/.next/server/app/api/config/route.js.nft.json +1 -1
  79. package/web/.next/standalone/web/.next/server/app/api/health/route.js.nft.json +1 -1
  80. package/web/.next/standalone/web/.next/server/app/docs/installation/page/build-manifest.json +3 -3
  81. package/web/.next/standalone/web/.next/server/app/docs/installation/page_client-reference-manifest.js +1 -1
  82. package/web/.next/standalone/web/.next/server/app/docs/installation.html +2 -2
  83. package/web/.next/standalone/web/.next/server/app/docs/installation.rsc +4 -4
  84. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_full.segment.rsc +4 -4
  85. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_head.segment.rsc +1 -1
  86. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_index.segment.rsc +3 -3
  87. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_tree.segment.rsc +2 -2
  88. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation/__PAGE__.segment.rsc +2 -2
  89. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation.segment.rsc +1 -1
  90. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs.segment.rsc +2 -2
  91. package/web/.next/standalone/web/.next/server/app/docs/page/build-manifest.json +3 -3
  92. package/web/.next/standalone/web/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  93. package/web/.next/standalone/web/.next/server/app/docs/skills/page/build-manifest.json +3 -3
  94. package/web/.next/standalone/web/.next/server/app/docs/skills/page_client-reference-manifest.js +1 -1
  95. package/web/.next/standalone/web/.next/server/app/docs/skills.html +2 -2
  96. package/web/.next/standalone/web/.next/server/app/docs/skills.rsc +4 -4
  97. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_full.segment.rsc +4 -4
  98. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_head.segment.rsc +1 -1
  99. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_index.segment.rsc +3 -3
  100. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_tree.segment.rsc +2 -2
  101. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills/__PAGE__.segment.rsc +1 -1
  102. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills.segment.rsc +1 -1
  103. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs.segment.rsc +2 -2
  104. package/web/.next/standalone/web/.next/server/app/docs/tools/page/build-manifest.json +3 -3
  105. package/web/.next/standalone/web/.next/server/app/docs/tools/page_client-reference-manifest.js +1 -1
  106. package/web/.next/standalone/web/.next/server/app/docs/tools.html +2 -2
  107. package/web/.next/standalone/web/.next/server/app/docs/tools.rsc +4 -4
  108. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_full.segment.rsc +4 -4
  109. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_head.segment.rsc +1 -1
  110. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_index.segment.rsc +3 -3
  111. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_tree.segment.rsc +2 -2
  112. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools/__PAGE__.segment.rsc +2 -2
  113. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools.segment.rsc +1 -1
  114. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs.segment.rsc +2 -2
  115. package/web/.next/standalone/web/.next/server/app/docs.html +2 -2
  116. package/web/.next/standalone/web/.next/server/app/docs.rsc +4 -4
  117. package/web/.next/standalone/web/.next/server/app/docs.segments/_full.segment.rsc +4 -4
  118. package/web/.next/standalone/web/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  119. package/web/.next/standalone/web/.next/server/app/docs.segments/_index.segment.rsc +3 -3
  120. package/web/.next/standalone/web/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
  121. package/web/.next/standalone/web/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +2 -2
  122. package/web/.next/standalone/web/.next/server/app/docs.segments/docs.segment.rsc +2 -2
  123. package/web/.next/standalone/web/.next/server/app/index.html +1 -1
  124. package/web/.next/standalone/web/.next/server/app/index.rsc +5 -5
  125. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +2 -2
  126. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p.segment.rsc +2 -2
  127. package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +5 -5
  128. package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
  129. package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +3 -3
  130. package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  131. package/web/.next/standalone/web/.next/server/app/settings.html +1 -0
  132. package/web/.next/standalone/web/.next/server/app/settings.meta +16 -0
  133. package/web/.next/standalone/web/.next/server/app/settings.rsc +25 -0
  134. package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings/__PAGE__.segment.rsc +9 -0
  135. package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings.segment.rsc +4 -0
  136. package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p.segment.rsc +7 -0
  137. package/web/.next/standalone/web/.next/server/app/settings.segments/_full.segment.rsc +25 -0
  138. package/web/.next/standalone/web/.next/server/app/settings.segments/_head.segment.rsc +6 -0
  139. package/web/.next/standalone/web/.next/server/app/settings.segments/_index.segment.rsc +7 -0
  140. package/web/.next/standalone/web/.next/server/app/settings.segments/_tree.segment.rsc +5 -0
  141. package/web/.next/standalone/web/.next/server/app-paths-manifest.json +2 -1
  142. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_a383a4d9._.js → 2374f_1f3f2d00._.js} +1 -1
  143. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_60d8842c._.js → 2374f_38945fd9._.js} +1 -1
  144. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_f363c084._.js → 2374f_570c34dc._.js} +1 -1
  145. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_806bd012._.js → 2374f_9c560f3a._.js} +1 -1
  146. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_b7f45fdf._.js → 2374f_a0d5caeb._.js} +1 -1
  147. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_c13c8f4f._.js → 2374f_c87abaf4._.js} +1 -1
  148. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_2801b766._.js → 2374f_d8122230._.js} +1 -1
  149. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_lucide-react_dist_esm_icons_50c2f239._.js +3 -0
  150. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__2ea52390._.js +3 -0
  151. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__6097da17._.js +15 -0
  152. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__9f149e88._.js +3 -0
  153. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__b050bb8f._.js +1 -1
  154. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__be5e2967._.js +1 -1
  155. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__c94db61a._.js +3 -0
  156. package/web/.next/standalone/web/.next/server/chunks/ssr/web_3b9a2423._.js +3 -0
  157. package/web/.next/standalone/web/.next/server/chunks/ssr/web_4fe3c244._.js +3 -0
  158. package/web/.next/standalone/web/.next/server/chunks/ssr/{web_3c2b112b._.js → web_7ca56356._.js} +3 -3
  159. package/web/.next/standalone/web/.next/server/chunks/ssr/web_8e76ee8b._.js +8 -0
  160. package/web/.next/standalone/web/.next/server/chunks/ssr/web_90d4125e._.js +7 -0
  161. package/web/.next/standalone/web/.next/server/chunks/ssr/web__next-internal_server_app_(main)_agents_page_actions_30f6e448.js +3 -0
  162. package/web/.next/standalone/web/.next/server/chunks/ssr/web__next-internal_server_app_(main)_settings_page_actions_7285839d.js +3 -0
  163. package/web/.next/standalone/web/.next/server/chunks/ssr/web_b38a47ee._.js +4 -0
  164. package/web/.next/standalone/web/.next/server/chunks/ssr/web_f7cf6b63._.js +3 -0
  165. package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_app_(main)_layout_tsx_453f6492._.js +3 -0
  166. package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_app_(main)_page_tsx_5ac4794b._.js +1 -1
  167. package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_app_(main)_settings_page_tsx_eb320e07._.js +33 -0
  168. package/web/.next/standalone/web/.next/server/middleware-build-manifest.js +3 -3
  169. package/web/.next/standalone/web/.next/server/next-font-manifest.js +1 -1
  170. package/web/.next/standalone/web/.next/server/next-font-manifest.json +8 -4
  171. package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
  172. package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
  173. package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -1
  174. package/web/.next/standalone/web/.next/server/server-reference-manifest.json +1 -1
  175. package/web/.next/standalone/web/.next/static/chunks/03b5edce6d5b809e.js +1 -0
  176. package/web/.next/standalone/web/.next/static/chunks/29dcecc3c2ca92b0.js +1 -0
  177. package/web/.next/standalone/web/.next/static/chunks/344be859c2c8600b.css +1 -0
  178. package/web/.next/standalone/web/.next/static/chunks/4239395558fab3ef.js +1 -0
  179. package/web/.next/standalone/web/.next/static/chunks/60359bdd369c0c72.js +1 -0
  180. package/web/.next/standalone/web/.next/static/chunks/699803c4fb2dd3fc.js +5 -0
  181. package/web/.next/standalone/web/.next/static/chunks/735a2408c315b2f0.js +1 -0
  182. package/web/.next/standalone/web/.next/static/chunks/ae4bb24474ff1ed0.js +13 -0
  183. package/web/.next/standalone/web/.next/static/chunks/d54077a2bb8314ed.js +31 -0
  184. package/web/.next/standalone/web/.next/static/chunks/dc34aa94e57fa28e.js +3 -0
  185. package/web/.next/standalone/web/.next/static/chunks/ea89ca7892d8c557.js +1 -0
  186. package/web/.next/standalone/web/.next/static/chunks/f0f19357f3fb7cf8.js +1 -0
  187. package/web/.next/standalone/web/.next/static/chunks/f5fe518b79d1bf41.js +1 -0
  188. package/web/.next/standalone/web/.next/static/chunks/fbdcbd65f9a38f4b.js +7 -0
  189. package/web/.next/{static/chunks/turbopack-597558bb7b6982f6.js → standalone/web/.next/static/chunks/turbopack-2c0905c7bbebae3f.js} +1 -1
  190. package/web/.next/standalone/web/.next/static/static/chunks/03b5edce6d5b809e.js +1 -0
  191. package/web/.next/standalone/web/.next/static/static/chunks/29dcecc3c2ca92b0.js +1 -0
  192. package/web/.next/standalone/web/.next/static/static/chunks/344be859c2c8600b.css +1 -0
  193. package/web/.next/standalone/web/.next/static/static/chunks/4239395558fab3ef.js +1 -0
  194. package/web/.next/standalone/web/.next/static/static/chunks/60359bdd369c0c72.js +1 -0
  195. package/web/.next/standalone/web/.next/static/static/chunks/699803c4fb2dd3fc.js +5 -0
  196. package/web/.next/standalone/web/.next/static/static/chunks/735a2408c315b2f0.js +1 -0
  197. package/web/.next/standalone/web/.next/static/static/chunks/ae4bb24474ff1ed0.js +13 -0
  198. package/web/.next/standalone/web/.next/static/static/chunks/d54077a2bb8314ed.js +31 -0
  199. package/web/.next/standalone/web/.next/static/static/chunks/dc34aa94e57fa28e.js +3 -0
  200. package/web/.next/standalone/web/.next/static/static/chunks/ea89ca7892d8c557.js +1 -0
  201. package/web/.next/standalone/web/.next/static/static/chunks/f0f19357f3fb7cf8.js +1 -0
  202. package/web/.next/standalone/web/.next/static/static/chunks/f5fe518b79d1bf41.js +1 -0
  203. package/web/.next/standalone/web/.next/static/static/chunks/fbdcbd65f9a38f4b.js +7 -0
  204. package/web/.next/standalone/web/.next/static/{chunks/turbopack-597558bb7b6982f6.js → static/chunks/turbopack-2c0905c7bbebae3f.js} +1 -1
  205. package/web/.next/standalone/web/next.config.ts +1 -55
  206. package/web/.next/standalone/web/package-lock.json +7 -7
  207. package/web/.next/standalone/web/src/app/(main)/agents/page.tsx +222 -0
  208. package/web/.next/standalone/web/src/app/(main)/page.tsx +40 -1
  209. package/web/.next/standalone/web/src/app/(main)/session/[id]/page.tsx +9 -1
  210. package/web/.next/standalone/web/src/app/(main)/settings/page.tsx +1116 -0
  211. package/web/.next/standalone/web/src/components/ai-elements/mention-input.tsx +125 -17
  212. package/web/.next/standalone/web/src/components/chat-interface.tsx +205 -4
  213. package/web/.next/standalone/web/src/components/pending-question-banner.tsx +106 -0
  214. package/web/.next/standalone/web/src/components/sessions-sidebar.tsx +120 -50
  215. package/web/.next/standalone/web/src/lib/api.ts +43 -2
  216. package/web/.next/static/chunks/03b5edce6d5b809e.js +1 -0
  217. package/web/.next/static/chunks/29dcecc3c2ca92b0.js +1 -0
  218. package/web/.next/static/chunks/344be859c2c8600b.css +1 -0
  219. package/web/.next/static/chunks/4239395558fab3ef.js +1 -0
  220. package/web/.next/static/chunks/60359bdd369c0c72.js +1 -0
  221. package/web/.next/static/chunks/699803c4fb2dd3fc.js +5 -0
  222. package/web/.next/static/chunks/735a2408c315b2f0.js +1 -0
  223. package/web/.next/static/chunks/ae4bb24474ff1ed0.js +13 -0
  224. package/web/.next/static/chunks/d54077a2bb8314ed.js +31 -0
  225. package/web/.next/static/chunks/dc34aa94e57fa28e.js +3 -0
  226. package/web/.next/static/chunks/ea89ca7892d8c557.js +1 -0
  227. package/web/.next/static/chunks/f0f19357f3fb7cf8.js +1 -0
  228. package/web/.next/static/chunks/f5fe518b79d1bf41.js +1 -0
  229. package/web/.next/static/chunks/fbdcbd65f9a38f4b.js +7 -0
  230. package/web/.next/{standalone/web/.next/static/static/chunks/turbopack-597558bb7b6982f6.js → static/chunks/turbopack-2c0905c7bbebae3f.js} +1 -1
  231. package/web/.next/standalone/web/.next/server/app/embed/[id]/page/app-paths-manifest.json +0 -3
  232. package/web/.next/standalone/web/.next/server/app/embed/[id]/page.js.nft.json +0 -1
  233. package/web/.next/standalone/web/.next/server/app/embed/[id]/page_client-reference-manifest.js +0 -2
  234. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_317b1fef._.js +0 -3
  235. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_37dd9702._.js +0 -45
  236. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_4d44e4ed._.js +0 -26
  237. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_54ac917f._.js +0 -3
  238. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_86585101._.js +0 -3
  239. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_c59a35bb._.js +0 -3
  240. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_fdfc7f3d._.js +0 -31
  241. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__234f92d8._.js +0 -3
  242. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__9a826344._.js +0 -3
  243. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__9d3a7cbf._.js +0 -15
  244. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__de76483d._.js +0 -3
  245. package/web/.next/standalone/web/.next/server/chunks/ssr/web_08242997._.js +0 -3
  246. package/web/.next/standalone/web/.next/server/chunks/ssr/web_123ffe97._.js +0 -8
  247. package/web/.next/standalone/web/.next/server/chunks/ssr/web_5cca707f._.js +0 -7
  248. package/web/.next/standalone/web/.next/server/chunks/ssr/web_935e81f5._.js +0 -7
  249. package/web/.next/standalone/web/.next/server/chunks/ssr/web_99b01335._.js +0 -8
  250. package/web/.next/standalone/web/.next/server/chunks/ssr/web__next-internal_server_app_embed_[id]_page_actions_dd0b7fea.js +0 -3
  251. package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_components_sessions-sidebar_tsx_92510070._.js +0 -3
  252. package/web/.next/standalone/web/.next/static/chunks/1ebba7ac024244f9.js +0 -5
  253. package/web/.next/standalone/web/.next/static/chunks/275e8268daf318b2.js +0 -7
  254. package/web/.next/standalone/web/.next/static/chunks/2bf377e04592f3c8.js +0 -13
  255. package/web/.next/standalone/web/.next/static/chunks/376a123113ccf5eb.js +0 -3
  256. package/web/.next/standalone/web/.next/static/chunks/58fd0aaa2746b444.js +0 -1
  257. package/web/.next/standalone/web/.next/static/chunks/61c9922b38a9569d.js +0 -3
  258. package/web/.next/standalone/web/.next/static/chunks/74b64476a24dd71e.css +0 -1
  259. package/web/.next/standalone/web/.next/static/chunks/767bcdfbabf0703e.js +0 -7
  260. package/web/.next/standalone/web/.next/static/chunks/9fce2ce79c4c834e.js +0 -1
  261. package/web/.next/standalone/web/.next/static/chunks/a888d448ceab1abe.js +0 -1
  262. package/web/.next/standalone/web/.next/static/chunks/b9ad1584d4e11d12.js +0 -1
  263. package/web/.next/standalone/web/.next/static/chunks/c6f40df16a9396b9.js +0 -1
  264. package/web/.next/standalone/web/.next/static/chunks/ea29be392100ab0f.js +0 -5
  265. package/web/.next/standalone/web/.next/static/static/chunks/1ebba7ac024244f9.js +0 -5
  266. package/web/.next/standalone/web/.next/static/static/chunks/275e8268daf318b2.js +0 -7
  267. package/web/.next/standalone/web/.next/static/static/chunks/2bf377e04592f3c8.js +0 -13
  268. package/web/.next/standalone/web/.next/static/static/chunks/376a123113ccf5eb.js +0 -3
  269. package/web/.next/standalone/web/.next/static/static/chunks/58fd0aaa2746b444.js +0 -1
  270. package/web/.next/standalone/web/.next/static/static/chunks/61c9922b38a9569d.js +0 -3
  271. package/web/.next/standalone/web/.next/static/static/chunks/74b64476a24dd71e.css +0 -1
  272. package/web/.next/standalone/web/.next/static/static/chunks/767bcdfbabf0703e.js +0 -7
  273. package/web/.next/standalone/web/.next/static/static/chunks/9fce2ce79c4c834e.js +0 -1
  274. package/web/.next/standalone/web/.next/static/static/chunks/a888d448ceab1abe.js +0 -1
  275. package/web/.next/standalone/web/.next/static/static/chunks/b9ad1584d4e11d12.js +0 -1
  276. package/web/.next/standalone/web/.next/static/static/chunks/c6f40df16a9396b9.js +0 -1
  277. package/web/.next/standalone/web/.next/static/static/chunks/ea29be392100ab0f.js +0 -5
  278. package/web/.next/standalone/web/src/app/embed/[id]/page.tsx +0 -77
  279. package/web/.next/standalone/web/src/lib/embed-bootstrap.ts +0 -108
  280. package/web/.next/static/chunks/1ebba7ac024244f9.js +0 -5
  281. package/web/.next/static/chunks/275e8268daf318b2.js +0 -7
  282. package/web/.next/static/chunks/2bf377e04592f3c8.js +0 -13
  283. package/web/.next/static/chunks/376a123113ccf5eb.js +0 -3
  284. package/web/.next/static/chunks/58fd0aaa2746b444.js +0 -1
  285. package/web/.next/static/chunks/61c9922b38a9569d.js +0 -3
  286. package/web/.next/static/chunks/74b64476a24dd71e.css +0 -1
  287. package/web/.next/static/chunks/767bcdfbabf0703e.js +0 -7
  288. package/web/.next/static/chunks/9fce2ce79c4c834e.js +0 -1
  289. package/web/.next/static/chunks/a888d448ceab1abe.js +0 -1
  290. package/web/.next/static/chunks/b9ad1584d4e11d12.js +0 -1
  291. package/web/.next/static/chunks/c6f40df16a9396b9.js +0 -1
  292. package/web/.next/static/chunks/ea29be392100ab0f.js +0 -5
  293. package/dist/{search-CCffrVJE.d.ts → search-DOzC4ojH.d.ts} +1 -1
  294. /package/web/.next/standalone/web/.next/server/app/{embed/[id] → (main)/agents}/page/react-loadable-manifest.json +0 -0
  295. /package/web/.next/standalone/web/.next/server/app/{embed/[id] → (main)/agents}/page/server-reference-manifest.json +0 -0
  296. /package/web/.next/standalone/web/.next/server/app/{embed/[id] → (main)/agents}/page.js.map +0 -0
  297. /package/web/.next/standalone/web/.next/static/{WCqUmRTRCgZqwBVGKQESX → eyxBRyMA8Zq36Pfen3Ylj}/_buildManifest.js +0 -0
  298. /package/web/.next/standalone/web/.next/static/{WCqUmRTRCgZqwBVGKQESX → eyxBRyMA8Zq36Pfen3Ylj}/_clientMiddlewareManifest.json +0 -0
  299. /package/web/.next/standalone/web/.next/static/{WCqUmRTRCgZqwBVGKQESX → eyxBRyMA8Zq36Pfen3Ylj}/_ssgManifest.js +0 -0
  300. /package/web/.next/standalone/web/.next/static/static/{WCqUmRTRCgZqwBVGKQESX → eyxBRyMA8Zq36Pfen3Ylj}/_buildManifest.js +0 -0
  301. /package/web/.next/standalone/web/.next/static/static/{WCqUmRTRCgZqwBVGKQESX → eyxBRyMA8Zq36Pfen3Ylj}/_clientMiddlewareManifest.json +0 -0
  302. /package/web/.next/standalone/web/.next/static/static/{WCqUmRTRCgZqwBVGKQESX → eyxBRyMA8Zq36Pfen3Ylj}/_ssgManifest.js +0 -0
  303. /package/web/.next/static/{WCqUmRTRCgZqwBVGKQESX → eyxBRyMA8Zq36Pfen3Ylj}/_buildManifest.js +0 -0
  304. /package/web/.next/static/{WCqUmRTRCgZqwBVGKQESX → eyxBRyMA8Zq36Pfen3Ylj}/_clientMiddlewareManifest.json +0 -0
  305. /package/web/.next/static/{WCqUmRTRCgZqwBVGKQESX → eyxBRyMA8Zq36Pfen3Ylj}/_ssgManifest.js +0 -0
@@ -0,0 +1,94 @@
1
+ ---
2
+ name: Manage MCP servers
3
+ description: Add, remove, enable, or test Model Context Protocol (MCP) servers by editing sparkecoder.config.json directly. Load this when the user asks to wire up a new MCP, switch tokens, disable an integration, or troubleshoot one.
4
+ ---
5
+
6
+ # Manage MCP servers
7
+
8
+ MCP (Model Context Protocol) servers extend your toolset. Each registered server's tools get loaded into your toolset on the NEXT agent turn under the key pattern `mcp_<server-name>_<tool-name>`. There is intentionally NO dedicated MCP tool — you manage MCP by editing the config file directly with your normal `bash`, `read_file`, `write_file` toolset.
9
+
10
+ ## Where the config lives
11
+
12
+ Run this to find it (in order of precedence):
13
+
14
+ ```bash
15
+ # Local config (preferred if present — current working directory)
16
+ ls -la "$(pwd)/sparkecoder.config.json" 2>/dev/null
17
+
18
+ # Global config (fallback — OS app-data dir)
19
+ ls -la "$HOME/Library/Application Support/sparkecoder/sparkecoder.config.json" 2>/dev/null # macOS
20
+ ls -la "$HOME/.config/sparkecoder/sparkecoder.config.json" 2>/dev/null # Linux
21
+ ```
22
+
23
+ The local one (cwd) wins if it exists. If neither exists, you can create the local one with `sparkecoder init` from the CLI, or just write a fresh `sparkecoder.config.json` in the cwd.
24
+
25
+ ## Schema
26
+
27
+ ```json
28
+ {
29
+ "mcp": {
30
+ "servers": [
31
+ {
32
+ "id": "mcp_abc123", // unique; you can use a short random string or `mcp_` + nanoid
33
+ "name": "github", // human-friendly; becomes the tool prefix (mcp_github_*)
34
+ "transport": "http" | "sse" | "stdio",
35
+ "url": "https://your-server.com/mcp", // required for http/sse
36
+ "headers": { "Authorization": "Bearer ghp_xxx..." }, // optional, http/sse
37
+ "command": "node", // required for stdio
38
+ "args": ["src/stdio/dist/server.js"], // optional, stdio
39
+ "enabled": true, // toggle without deleting
40
+ "createdAt": "2026-05-18T00:00:00.000Z"
41
+ }
42
+ ]
43
+ }
44
+ }
45
+ ```
46
+
47
+ ## Recipes
48
+
49
+ ### Add an HTTP MCP server with a bearer token
50
+
51
+ ```bash
52
+ # Read current config
53
+ read_file({ path: "sparkecoder.config.json" })
54
+
55
+ # Merge in a new server. Use jq if you trust the env to have it; otherwise
56
+ # read it with read_file, mutate, write_file the whole thing.
57
+ NEW_ID="mcp_$(node -e "console.log(Math.random().toString(36).slice(2,12))")"
58
+ # Edit the file to add an entry to mcp.servers with the values above.
59
+ ```
60
+
61
+ After saving the file, the new server's tools appear in your toolset on your **next** turn under `mcp_<name>_*`. No restart needed — the MCP pool re-reads disk every turn and refreshes its clients automatically.
62
+
63
+ ### Test connectivity
64
+
65
+ You can either:
66
+
67
+ 1. **Just try it next turn** — if you call one of the new `mcp_<name>_*` tools and it fails, you'll see the error in the tool result.
68
+ 2. **Probe via the local REST API** without waiting:
69
+
70
+ ```bash
71
+ # After saving the new server, the id is in the config; ask the API to test it
72
+ SERVER_ID="<the id you wrote>"
73
+ curl -s -X POST "http://127.0.0.1:3141/api/mcp/$SERVER_ID/test" | jq
74
+ # Returns: { "ok": true, "toolCount": N, "toolNames": [...] } or { "ok": false, "error": "..." }
75
+ ```
76
+
77
+ ### Disable a server temporarily
78
+
79
+ Flip `enabled` to `false` in the config. Tools stop appearing on the next turn. Flip back to `true` to re-enable.
80
+
81
+ ### Remove a server
82
+
83
+ Delete the entry from the `servers` array.
84
+
85
+ ### OAuth-protected MCP servers
86
+
87
+ For now, the simplest path is to obtain the OAuth access token out-of-band (the Settings UI or the MCP server's docs will tell you how) and paste it into `headers.Authorization` as `"Bearer <token>"`. Token refresh isn't yet automatic; ask the user to re-paste when it expires.
88
+
89
+ ## Notes
90
+
91
+ - **Tool prefix:** the `name` becomes a sanitized prefix. `My GitHub` becomes `my_github` and its tools become `mcp_my_github_*`. Use short, snake_case names.
92
+ - **No collisions:** two servers can expose tools with the same internal name; the prefix ensures they don't collide.
93
+ - **Failure isolation:** if one MCP server is broken, the others still load. You'll see a warning in the server logs.
94
+ - **Settings UI exists:** humans can manage MCP from the dashboard's Settings → MCP tab. You're editing the same underlying file.
@@ -0,0 +1,100 @@
1
+ ---
2
+ name: Search conversations
3
+ description: Long-term memory across sessions. Grep through every past conversation on this machine — every web/Slack/system/webhook turn is mirrored to local JSONL files. Load when the user asks "what did we talk about", "remind me what I said", "find that thing from last week", or any cross-session recall query.
4
+ ---
5
+
6
+ # Search conversations (long-term memory)
7
+
8
+ Every user-message and assistant-reply in every session is mirrored to a local JSONL archive on this device. This is your filesystem-backed long-term memory — grep through it like any text corpus.
9
+
10
+ ## Where the archive lives
11
+
12
+ ```bash
13
+ # macOS / Linux
14
+ HISTORY_DIR="$HOME/Library/Application Support/sparkecoder/history" # macOS
15
+ # or
16
+ HISTORY_DIR="$HOME/.config/sparkecoder/history" # Linux
17
+
18
+ ls "$HISTORY_DIR"
19
+ # -> <session-id>.jsonl one file per session
20
+ ```
21
+
22
+ Each line is one turn:
23
+
24
+ ```json
25
+ {
26
+ "ts": "2026-05-18T01:23:45.678Z",
27
+ "sessionId": "abc123",
28
+ "sessionName": "Orchestrator",
29
+ "role": "user", // or "assistant"
30
+ "content": "...plain text...",
31
+ "channel": "slack" // optional: web | slack | system | schedule | webhook
32
+ }
33
+ ```
34
+
35
+ The orchestrator's own history is in the JSONL named after its session id. Worker agents have their own files.
36
+
37
+ ## Common queries
38
+
39
+ ### "What did we talk about regarding deployments?"
40
+
41
+ ```bash
42
+ HISTORY_DIR="${HOME}/Library/Application Support/sparkecoder/history"
43
+ grep -l -i "deploy" "$HISTORY_DIR"/*.jsonl
44
+ # Then for each match:
45
+ grep -i "deploy" "$HISTORY_DIR/<session-id>.jsonl" | python3 -c '
46
+ import json, sys
47
+ for line in sys.stdin:
48
+ j = json.loads(line)
49
+ print(j["ts"], j["role"], j["content"][:200])
50
+ '
51
+ ```
52
+
53
+ ### "Find that thing the user said about Python"
54
+
55
+ ```bash
56
+ grep -h '"role":"user"' "$HISTORY_DIR"/*.jsonl | grep -i 'python' | head -20
57
+ ```
58
+
59
+ ### "Show the last 5 things I said"
60
+
61
+ ```bash
62
+ grep -h '"role":"user"' "$HISTORY_DIR"/*.jsonl | tail -5 | python3 -c '
63
+ import json, sys
64
+ for line in sys.stdin:
65
+ j = json.loads(line)
66
+ print(j["ts"], "—", j["content"][:200])
67
+ '
68
+ ```
69
+
70
+ ### "What happened in Slack yesterday"
71
+
72
+ ```bash
73
+ grep -h '"channel":"slack"' "$HISTORY_DIR"/*.jsonl | python3 -c '
74
+ import json, sys
75
+ from datetime import datetime, timedelta
76
+ cutoff = (datetime.utcnow() - timedelta(days=1)).isoformat()
77
+ for line in sys.stdin:
78
+ j = json.loads(line)
79
+ if j["ts"] > cutoff: print(j["ts"], j["role"], j["content"][:200])
80
+ '
81
+ ```
82
+
83
+ ### "Pull every webhook event since Friday"
84
+
85
+ ```bash
86
+ grep -h '"channel":"webhook"' "$HISTORY_DIR"/*.jsonl | python3 -c '...'
87
+ ```
88
+
89
+ ## Tips
90
+
91
+ - **Channel-aware:** filter by `"channel":"slack"`, `"webhook"`, `"system"`, `"schedule"`, or `"web"` (no channel field = legacy/plain web).
92
+ - **Session-aware:** if the user references "the convo we had in <X>", look up `sessionName` first.
93
+ - **Plain text:** images / files are flattened to `[image filename]` placeholders. The text content is what's searchable.
94
+ - **Append-only:** never edit or delete these files — the orchestrator might lie to itself if it does. If you need to redact, do it at the DB level (out of scope here).
95
+ - **Workers too:** worker agents' chats are also archived. Useful for "what did agent X actually do?" queries that go beyond the agent's persisted task summary.
96
+
97
+ ## When NOT to use
98
+
99
+ - For the LIVE current session, use `agent({action:'get', id, recentMessages:20})` — that's faster and structured.
100
+ - For very recent stuff in the orchestrator's own thread, just look at your own message history (you already have it in context).
@@ -1,7 +1,7 @@
1
1
  import * as ai from 'ai';
2
2
  import { ToolSet } from 'ai';
3
- import { B as BashToolProgress, W as WriteFileProgress, S as SearchToolProgress } from '../search-CCffrVJE.js';
4
- export { b as BashToolOptions, d as SearchToolOptions, e as WriteFileToolOptions, c as createBashTool, f as createSearchTool, a as createWriteFileTool } from '../search-CCffrVJE.js';
3
+ import { B as BashToolProgress, W as WriteFileProgress, S as SearchToolProgress } from '../search-DOzC4ojH.js';
4
+ export { b as BashToolOptions, d as SearchToolOptions, e as WriteFileToolOptions, c as createBashTool, f as createSearchTool, a as createWriteFileTool } from '../search-DOzC4ojH.js';
5
5
 
6
6
  interface TaskCompletionSignal {
7
7
  status: 'completed' | 'failed';
@@ -56,7 +56,49 @@ var init_types = __esm({
56
56
  computerUseEnabled: z.boolean().optional(),
57
57
  // Display dimensions for the computer use tool (defaults: 1280x800).
58
58
  computerUseDisplayWidth: z.number().int().positive().optional(),
59
- computerUseDisplayHeight: z.number().int().positive().optional()
59
+ computerUseDisplayHeight: z.number().int().positive().optional(),
60
+ // 'orchestrator' = supervisor session; 'worker' = task spawned by an orchestrator.
61
+ role: z.enum(["orchestrator", "worker", "chat"]).optional(),
62
+ // Optional persona / extra system-prompt text appended to the orchestrator's
63
+ // system prompt (e.g. "speak in haiku", "answer in Korean", "be terse").
64
+ personality: z.string().optional(),
65
+ // For workers: the orchestrator session that spawned them. Used so
66
+ // terminal events (complete_task / task_failed / ask_question_to_user)
67
+ // can push system events back to the orchestrator's inbox.
68
+ orchestratorSessionId: z.string().optional(),
69
+ // Persisted Slack thread context the orchestrator can reply to.
70
+ slack: z.object({
71
+ channel: z.string().optional(),
72
+ threadTs: z.string().optional(),
73
+ teamId: z.string().optional()
74
+ }).optional(),
75
+ // Recurring prompts owned by this orchestrator. Stored inline on the
76
+ // session row so we don't need a separate DB collection.
77
+ schedules: z.array(z.object({
78
+ id: z.string(),
79
+ name: z.string(),
80
+ cron: z.string(),
81
+ prompt: z.string(),
82
+ replyChannel: z.string().optional(),
83
+ enabled: z.boolean().default(true),
84
+ lastFiredAt: z.string().optional(),
85
+ // ISO date
86
+ createdAt: z.string()
87
+ // ISO date
88
+ })).optional(),
89
+ // Custom token-protected inbound webhook URLs.
90
+ webhooks: z.array(z.object({
91
+ id: z.string(),
92
+ name: z.string(),
93
+ token: z.string(),
94
+ wake: z.enum(["now", "next"]).default("now"),
95
+ template: z.string().optional(),
96
+ hitCount: z.number().int().default(0),
97
+ lastHitAt: z.string().optional(),
98
+ // ISO date
99
+ createdAt: z.string()
100
+ // ISO date
101
+ })).optional()
60
102
  });
61
103
  VectorGatewayConfigSchema = z.object({
62
104
  // Redis cluster nodes URL for Vector Gateway (or use REDIS_CLUSTER_NODES env var)
@@ -144,7 +186,74 @@ var init_types = __esm({
144
186
  // If configured, uses remote MongoDB instead of local SQLite
145
187
  remoteServer: RemoteServerConfigSchema,
146
188
  // Vector Gateway configuration for semantic search
147
- vectorGateway: VectorGatewayConfigSchema
189
+ vectorGateway: VectorGatewayConfigSchema,
190
+ // Slack integration. When configured, the orchestrator can post to Slack
191
+ // and Slack `app_mention` events are routed into the orchestrator session.
192
+ slack: z.object({
193
+ botToken: z.string().optional(),
194
+ signingSecret: z.string().optional(),
195
+ defaultOrchestratorName: z.string().optional().default("orchestrator"),
196
+ // Allowlist controls — when set, only matching events reach the orchestrator.
197
+ // Empty arrays = "no allowlist" => allow all (subject to allowDmsFromAnyone below).
198
+ allowedUsers: z.array(z.string()).optional().default([]),
199
+ // Slack user IDs (U0123...)
200
+ allowedChannels: z.array(z.string()).optional().default([]),
201
+ // Slack channel IDs (C0123...)
202
+ // If true (default), the bot replies to DMs from anyone. If false, the user
203
+ // must also appear in `allowedUsers`.
204
+ allowDmsFromAnyone: z.boolean().optional().default(true),
205
+ // When true, denied @mentions / DMs get a friendly canned reply
206
+ // (no AI / no orchestrator). Use {user} and {channel} placeholders.
207
+ deniedReplyEnabled: z.boolean().optional().default(true),
208
+ deniedReplyTemplate: z.string().optional().default(
209
+ "Sorry, you don't have permission to use this bot. (Contact the bot owner if you think this is a mistake.)"
210
+ )
211
+ }).partial().optional(),
212
+ // MCP integrations. Each server is connected on demand and its tools are
213
+ // merged into the agent's toolset under `mcp_<server-name>_<tool>` keys.
214
+ mcp: z.object({
215
+ servers: z.array(z.object({
216
+ id: z.string(),
217
+ name: z.string(),
218
+ // human-friendly; also used as tool prefix
219
+ transport: z.enum(["http", "sse", "stdio"]),
220
+ url: z.string().optional(),
221
+ // http/sse
222
+ headers: z.record(z.string(), z.string()).optional(),
223
+ // http/sse (e.g. Authorization: Bearer ...)
224
+ command: z.string().optional(),
225
+ // stdio
226
+ args: z.array(z.string()).optional(),
227
+ // stdio
228
+ enabled: z.boolean().default(true),
229
+ createdAt: z.string(),
230
+ // ISO date
231
+ // OAuth scaffolding — present so tokens can be persisted by the
232
+ // settings UI once the auth flow completes. Bearer tokens can also
233
+ // be stored directly via `headers.Authorization` for now.
234
+ oauth: z.object({
235
+ authorizationUrl: z.string().optional(),
236
+ tokenUrl: z.string().optional(),
237
+ clientId: z.string().optional(),
238
+ clientSecret: z.string().optional(),
239
+ accessToken: z.string().optional(),
240
+ refreshToken: z.string().optional(),
241
+ expiresAt: z.string().optional()
242
+ }).partial().optional()
243
+ })).optional().default([])
244
+ }).partial().optional(),
245
+ // Authentication for the public (cloudflared) surface. When
246
+ // auth.cfAccess.enabled is true, every non-loopback request must carry a
247
+ // valid Cf-Access-Jwt-Assertion header whose `email` claim is in
248
+ // `auth.allowedEmails`. Slack events and /health bypass the check.
249
+ auth: z.object({
250
+ cfAccess: z.object({
251
+ enabled: z.boolean().optional().default(false),
252
+ teamDomain: z.string().optional(),
253
+ audTag: z.string().optional()
254
+ }).partial().optional(),
255
+ allowedEmails: z.array(z.string()).optional().default([])
256
+ }).partial().optional()
148
257
  });
149
258
  }
150
259
  });