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.
- package/README.md +41 -41
- package/dist/agent/index.d.ts +3 -3
- package/dist/agent/index.js +1274 -59
- package/dist/agent/index.js.map +1 -1
- package/dist/cli.js +10671 -8973
- package/dist/cli.js.map +1 -1
- package/dist/db/index.d.ts +2 -2
- package/dist/{index-BvIissiB.d.ts → index-D5l-DMGC.d.ts} +390 -6
- package/dist/index.d.ts +5 -5
- package/dist/index.js +10002 -8096
- package/dist/index.js.map +1 -1
- package/dist/{schema-CohdIL13.d.ts → schema-ecQSnCMz.d.ts} +41 -0
- package/dist/server/index.js +8867 -6969
- package/dist/server/index.js.map +1 -1
- package/dist/skills/default/manage-mcp.md +94 -0
- package/dist/skills/default/search-conversations.md +100 -0
- package/dist/tools/index.d.ts +2 -2
- package/dist/tools/index.js +111 -2
- package/dist/tools/index.js.map +1 -1
- package/package.json +5 -1
- package/src/skills/default/manage-mcp.md +94 -0
- package/src/skills/default/search-conversations.md +100 -0
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/web/.next/app-path-routes-manifest.json +2 -1
- package/web/.next/standalone/web/.next/build-manifest.json +5 -5
- package/web/.next/standalone/web/.next/prerender-manifest.json +51 -3
- package/web/.next/standalone/web/.next/routes-manifest.json +13 -24
- package/web/.next/standalone/web/.next/server/app/(main)/agents/page/app-paths-manifest.json +3 -0
- package/web/.next/standalone/web/.next/server/app/{embed/[id] → (main)/agents}/page/build-manifest.json +3 -3
- package/web/.next/standalone/web/.next/server/app/{embed/[id] → (main)/agents}/page/next-font-manifest.json +1 -1
- package/web/.next/standalone/web/.next/server/app/{embed/[id] → (main)/agents}/page.js +7 -6
- package/web/.next/standalone/web/.next/server/app/(main)/agents/page.js.nft.json +1 -0
- package/web/.next/standalone/web/.next/server/app/(main)/agents/page_client-reference-manifest.js +2 -0
- package/web/.next/standalone/web/.next/server/app/(main)/page/build-manifest.json +3 -3
- package/web/.next/standalone/web/.next/server/app/(main)/page.js.nft.json +1 -1
- package/web/.next/standalone/web/.next/server/app/(main)/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page/build-manifest.json +3 -3
- package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page.js.nft.json +1 -1
- package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(main)/settings/page/app-paths-manifest.json +3 -0
- package/web/.next/standalone/web/.next/server/app/(main)/settings/page/build-manifest.json +18 -0
- package/web/.next/standalone/web/.next/server/app/(main)/settings/page/next-font-manifest.json +11 -0
- package/web/.next/standalone/web/.next/server/app/(main)/settings/page/react-loadable-manifest.json +1 -0
- package/web/.next/standalone/web/.next/server/app/(main)/settings/page/server-reference-manifest.json +4 -0
- package/web/.next/standalone/web/.next/server/app/(main)/settings/page.js +21 -0
- package/web/.next/standalone/web/.next/server/app/(main)/settings/page.js.map +5 -0
- package/web/.next/standalone/web/.next/server/app/(main)/settings/page.js.nft.json +1 -0
- package/web/.next/standalone/web/.next/server/app/(main)/settings/page_client-reference-manifest.js +2 -0
- package/web/.next/standalone/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
- package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
- package/web/.next/standalone/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.rsc +3 -3
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/agents.html +1 -0
- package/web/.next/standalone/web/.next/server/app/agents.meta +16 -0
- package/web/.next/standalone/web/.next/server/app/agents.rsc +25 -0
- package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents/__PAGE__.segment.rsc +9 -0
- package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents.segment.rsc +4 -0
- package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p.segment.rsc +7 -0
- package/web/.next/standalone/web/.next/server/app/agents.segments/_full.segment.rsc +25 -0
- package/web/.next/standalone/web/.next/server/app/agents.segments/_head.segment.rsc +6 -0
- package/web/.next/standalone/web/.next/server/app/agents.segments/_index.segment.rsc +7 -0
- package/web/.next/standalone/web/.next/server/app/agents.segments/_tree.segment.rsc +5 -0
- package/web/.next/standalone/web/.next/server/app/api/config/route.js.nft.json +1 -1
- package/web/.next/standalone/web/.next/server/app/api/health/route.js.nft.json +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation/page/build-manifest.json +3 -3
- package/web/.next/standalone/web/.next/server/app/docs/installation/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/installation.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_full.segment.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_index.segment.rsc +3 -3
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_tree.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/page/build-manifest.json +3 -3
- package/web/.next/standalone/web/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills/page/build-manifest.json +3 -3
- package/web/.next/standalone/web/.next/server/app/docs/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/skills.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_full.segment.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_index.segment.rsc +3 -3
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_tree.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools/page/build-manifest.json +3 -3
- package/web/.next/standalone/web/.next/server/app/docs/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_full.segment.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_index.segment.rsc +3 -3
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_tree.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/docs.segments/_full.segment.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/docs.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_index.segment.rsc +3 -3
- package/web/.next/standalone/web/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.segments/docs.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/index.html +1 -1
- package/web/.next/standalone/web/.next/server/app/index.rsc +5 -5
- package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +5 -5
- package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +3 -3
- package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/settings.html +1 -0
- package/web/.next/standalone/web/.next/server/app/settings.meta +16 -0
- package/web/.next/standalone/web/.next/server/app/settings.rsc +25 -0
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings/__PAGE__.segment.rsc +9 -0
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings.segment.rsc +4 -0
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p.segment.rsc +7 -0
- package/web/.next/standalone/web/.next/server/app/settings.segments/_full.segment.rsc +25 -0
- package/web/.next/standalone/web/.next/server/app/settings.segments/_head.segment.rsc +6 -0
- package/web/.next/standalone/web/.next/server/app/settings.segments/_index.segment.rsc +7 -0
- package/web/.next/standalone/web/.next/server/app/settings.segments/_tree.segment.rsc +5 -0
- package/web/.next/standalone/web/.next/server/app-paths-manifest.json +2 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_a383a4d9._.js → 2374f_1f3f2d00._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_60d8842c._.js → 2374f_38945fd9._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_f363c084._.js → 2374f_570c34dc._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_806bd012._.js → 2374f_9c560f3a._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_b7f45fdf._.js → 2374f_a0d5caeb._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_c13c8f4f._.js → 2374f_c87abaf4._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_2801b766._.js → 2374f_d8122230._.js} +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_lucide-react_dist_esm_icons_50c2f239._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__2ea52390._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__6097da17._.js +15 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__9f149e88._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__b050bb8f._.js +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__be5e2967._.js +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__c94db61a._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_3b9a2423._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_4fe3c244._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/{web_3c2b112b._.js → web_7ca56356._.js} +3 -3
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_8e76ee8b._.js +8 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_90d4125e._.js +7 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/web__next-internal_server_app_(main)_agents_page_actions_30f6e448.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/web__next-internal_server_app_(main)_settings_page_actions_7285839d.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_b38a47ee._.js +4 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_f7cf6b63._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_app_(main)_layout_tsx_453f6492._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_app_(main)_page_tsx_5ac4794b._.js +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_app_(main)_settings_page_tsx_eb320e07._.js +33 -0
- package/web/.next/standalone/web/.next/server/middleware-build-manifest.js +3 -3
- package/web/.next/standalone/web/.next/server/next-font-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/next-font-manifest.json +8 -4
- package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
- package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/server-reference-manifest.json +1 -1
- package/web/.next/standalone/web/.next/static/chunks/03b5edce6d5b809e.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/29dcecc3c2ca92b0.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/344be859c2c8600b.css +1 -0
- package/web/.next/standalone/web/.next/static/chunks/4239395558fab3ef.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/60359bdd369c0c72.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/699803c4fb2dd3fc.js +5 -0
- package/web/.next/standalone/web/.next/static/chunks/735a2408c315b2f0.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/ae4bb24474ff1ed0.js +13 -0
- package/web/.next/standalone/web/.next/static/chunks/d54077a2bb8314ed.js +31 -0
- package/web/.next/standalone/web/.next/static/chunks/dc34aa94e57fa28e.js +3 -0
- package/web/.next/standalone/web/.next/static/chunks/ea89ca7892d8c557.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/f0f19357f3fb7cf8.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/f5fe518b79d1bf41.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/fbdcbd65f9a38f4b.js +7 -0
- package/web/.next/{static/chunks/turbopack-597558bb7b6982f6.js → standalone/web/.next/static/chunks/turbopack-2c0905c7bbebae3f.js} +1 -1
- package/web/.next/standalone/web/.next/static/static/chunks/03b5edce6d5b809e.js +1 -0
- package/web/.next/standalone/web/.next/static/static/chunks/29dcecc3c2ca92b0.js +1 -0
- package/web/.next/standalone/web/.next/static/static/chunks/344be859c2c8600b.css +1 -0
- package/web/.next/standalone/web/.next/static/static/chunks/4239395558fab3ef.js +1 -0
- package/web/.next/standalone/web/.next/static/static/chunks/60359bdd369c0c72.js +1 -0
- package/web/.next/standalone/web/.next/static/static/chunks/699803c4fb2dd3fc.js +5 -0
- package/web/.next/standalone/web/.next/static/static/chunks/735a2408c315b2f0.js +1 -0
- package/web/.next/standalone/web/.next/static/static/chunks/ae4bb24474ff1ed0.js +13 -0
- package/web/.next/standalone/web/.next/static/static/chunks/d54077a2bb8314ed.js +31 -0
- package/web/.next/standalone/web/.next/static/static/chunks/dc34aa94e57fa28e.js +3 -0
- package/web/.next/standalone/web/.next/static/static/chunks/ea89ca7892d8c557.js +1 -0
- package/web/.next/standalone/web/.next/static/static/chunks/f0f19357f3fb7cf8.js +1 -0
- package/web/.next/standalone/web/.next/static/static/chunks/f5fe518b79d1bf41.js +1 -0
- package/web/.next/standalone/web/.next/static/static/chunks/fbdcbd65f9a38f4b.js +7 -0
- package/web/.next/standalone/web/.next/static/{chunks/turbopack-597558bb7b6982f6.js → static/chunks/turbopack-2c0905c7bbebae3f.js} +1 -1
- package/web/.next/standalone/web/next.config.ts +1 -55
- package/web/.next/standalone/web/package-lock.json +7 -7
- package/web/.next/standalone/web/src/app/(main)/agents/page.tsx +222 -0
- package/web/.next/standalone/web/src/app/(main)/page.tsx +40 -1
- package/web/.next/standalone/web/src/app/(main)/session/[id]/page.tsx +9 -1
- package/web/.next/standalone/web/src/app/(main)/settings/page.tsx +1116 -0
- package/web/.next/standalone/web/src/components/ai-elements/mention-input.tsx +125 -17
- package/web/.next/standalone/web/src/components/chat-interface.tsx +205 -4
- package/web/.next/standalone/web/src/components/pending-question-banner.tsx +106 -0
- package/web/.next/standalone/web/src/components/sessions-sidebar.tsx +120 -50
- package/web/.next/standalone/web/src/lib/api.ts +43 -2
- package/web/.next/static/chunks/03b5edce6d5b809e.js +1 -0
- package/web/.next/static/chunks/29dcecc3c2ca92b0.js +1 -0
- package/web/.next/static/chunks/344be859c2c8600b.css +1 -0
- package/web/.next/static/chunks/4239395558fab3ef.js +1 -0
- package/web/.next/static/chunks/60359bdd369c0c72.js +1 -0
- package/web/.next/static/chunks/699803c4fb2dd3fc.js +5 -0
- package/web/.next/static/chunks/735a2408c315b2f0.js +1 -0
- package/web/.next/static/chunks/ae4bb24474ff1ed0.js +13 -0
- package/web/.next/static/chunks/d54077a2bb8314ed.js +31 -0
- package/web/.next/static/chunks/dc34aa94e57fa28e.js +3 -0
- package/web/.next/static/chunks/ea89ca7892d8c557.js +1 -0
- package/web/.next/static/chunks/f0f19357f3fb7cf8.js +1 -0
- package/web/.next/static/chunks/f5fe518b79d1bf41.js +1 -0
- package/web/.next/static/chunks/fbdcbd65f9a38f4b.js +7 -0
- package/web/.next/{standalone/web/.next/static/static/chunks/turbopack-597558bb7b6982f6.js → static/chunks/turbopack-2c0905c7bbebae3f.js} +1 -1
- package/web/.next/standalone/web/.next/server/app/embed/[id]/page/app-paths-manifest.json +0 -3
- package/web/.next/standalone/web/.next/server/app/embed/[id]/page.js.nft.json +0 -1
- package/web/.next/standalone/web/.next/server/app/embed/[id]/page_client-reference-manifest.js +0 -2
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_317b1fef._.js +0 -3
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_37dd9702._.js +0 -45
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_4d44e4ed._.js +0 -26
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_54ac917f._.js +0 -3
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_86585101._.js +0 -3
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_c59a35bb._.js +0 -3
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_fdfc7f3d._.js +0 -31
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__234f92d8._.js +0 -3
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__9a826344._.js +0 -3
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__9d3a7cbf._.js +0 -15
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__de76483d._.js +0 -3
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_08242997._.js +0 -3
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_123ffe97._.js +0 -8
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_5cca707f._.js +0 -7
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_935e81f5._.js +0 -7
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_99b01335._.js +0 -8
- package/web/.next/standalone/web/.next/server/chunks/ssr/web__next-internal_server_app_embed_[id]_page_actions_dd0b7fea.js +0 -3
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_components_sessions-sidebar_tsx_92510070._.js +0 -3
- package/web/.next/standalone/web/.next/static/chunks/1ebba7ac024244f9.js +0 -5
- package/web/.next/standalone/web/.next/static/chunks/275e8268daf318b2.js +0 -7
- package/web/.next/standalone/web/.next/static/chunks/2bf377e04592f3c8.js +0 -13
- package/web/.next/standalone/web/.next/static/chunks/376a123113ccf5eb.js +0 -3
- package/web/.next/standalone/web/.next/static/chunks/58fd0aaa2746b444.js +0 -1
- package/web/.next/standalone/web/.next/static/chunks/61c9922b38a9569d.js +0 -3
- package/web/.next/standalone/web/.next/static/chunks/74b64476a24dd71e.css +0 -1
- package/web/.next/standalone/web/.next/static/chunks/767bcdfbabf0703e.js +0 -7
- package/web/.next/standalone/web/.next/static/chunks/9fce2ce79c4c834e.js +0 -1
- package/web/.next/standalone/web/.next/static/chunks/a888d448ceab1abe.js +0 -1
- package/web/.next/standalone/web/.next/static/chunks/b9ad1584d4e11d12.js +0 -1
- package/web/.next/standalone/web/.next/static/chunks/c6f40df16a9396b9.js +0 -1
- package/web/.next/standalone/web/.next/static/chunks/ea29be392100ab0f.js +0 -5
- package/web/.next/standalone/web/.next/static/static/chunks/1ebba7ac024244f9.js +0 -5
- package/web/.next/standalone/web/.next/static/static/chunks/275e8268daf318b2.js +0 -7
- package/web/.next/standalone/web/.next/static/static/chunks/2bf377e04592f3c8.js +0 -13
- package/web/.next/standalone/web/.next/static/static/chunks/376a123113ccf5eb.js +0 -3
- package/web/.next/standalone/web/.next/static/static/chunks/58fd0aaa2746b444.js +0 -1
- package/web/.next/standalone/web/.next/static/static/chunks/61c9922b38a9569d.js +0 -3
- package/web/.next/standalone/web/.next/static/static/chunks/74b64476a24dd71e.css +0 -1
- package/web/.next/standalone/web/.next/static/static/chunks/767bcdfbabf0703e.js +0 -7
- package/web/.next/standalone/web/.next/static/static/chunks/9fce2ce79c4c834e.js +0 -1
- package/web/.next/standalone/web/.next/static/static/chunks/a888d448ceab1abe.js +0 -1
- package/web/.next/standalone/web/.next/static/static/chunks/b9ad1584d4e11d12.js +0 -1
- package/web/.next/standalone/web/.next/static/static/chunks/c6f40df16a9396b9.js +0 -1
- package/web/.next/standalone/web/.next/static/static/chunks/ea29be392100ab0f.js +0 -5
- package/web/.next/standalone/web/src/app/embed/[id]/page.tsx +0 -77
- package/web/.next/standalone/web/src/lib/embed-bootstrap.ts +0 -108
- package/web/.next/static/chunks/1ebba7ac024244f9.js +0 -5
- package/web/.next/static/chunks/275e8268daf318b2.js +0 -7
- package/web/.next/static/chunks/2bf377e04592f3c8.js +0 -13
- package/web/.next/static/chunks/376a123113ccf5eb.js +0 -3
- package/web/.next/static/chunks/58fd0aaa2746b444.js +0 -1
- package/web/.next/static/chunks/61c9922b38a9569d.js +0 -3
- package/web/.next/static/chunks/74b64476a24dd71e.css +0 -1
- package/web/.next/static/chunks/767bcdfbabf0703e.js +0 -7
- package/web/.next/static/chunks/9fce2ce79c4c834e.js +0 -1
- package/web/.next/static/chunks/a888d448ceab1abe.js +0 -1
- package/web/.next/static/chunks/b9ad1584d4e11d12.js +0 -1
- package/web/.next/static/chunks/c6f40df16a9396b9.js +0 -1
- package/web/.next/static/chunks/ea29be392100ab0f.js +0 -5
- package/dist/{search-CCffrVJE.d.ts → search-DOzC4ojH.d.ts} +1 -1
- /package/web/.next/standalone/web/.next/server/app/{embed/[id] → (main)/agents}/page/react-loadable-manifest.json +0 -0
- /package/web/.next/standalone/web/.next/server/app/{embed/[id] → (main)/agents}/page/server-reference-manifest.json +0 -0
- /package/web/.next/standalone/web/.next/server/app/{embed/[id] → (main)/agents}/page.js.map +0 -0
- /package/web/.next/standalone/web/.next/static/{WCqUmRTRCgZqwBVGKQESX → eyxBRyMA8Zq36Pfen3Ylj}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/{WCqUmRTRCgZqwBVGKQESX → eyxBRyMA8Zq36Pfen3Ylj}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/{WCqUmRTRCgZqwBVGKQESX → eyxBRyMA8Zq36Pfen3Ylj}/_ssgManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/static/{WCqUmRTRCgZqwBVGKQESX → eyxBRyMA8Zq36Pfen3Ylj}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/static/{WCqUmRTRCgZqwBVGKQESX → eyxBRyMA8Zq36Pfen3Ylj}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/static/{WCqUmRTRCgZqwBVGKQESX → eyxBRyMA8Zq36Pfen3Ylj}/_ssgManifest.js +0 -0
- /package/web/.next/static/{WCqUmRTRCgZqwBVGKQESX → eyxBRyMA8Zq36Pfen3Ylj}/_buildManifest.js +0 -0
- /package/web/.next/static/{WCqUmRTRCgZqwBVGKQESX → eyxBRyMA8Zq36Pfen3Ylj}/_clientMiddlewareManifest.json +0 -0
- /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).
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -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-
|
|
4
|
-
export { b as BashToolOptions, d as SearchToolOptions, e as WriteFileToolOptions, c as createBashTool, f as createSearchTool, a as createWriteFileTool } from '../search-
|
|
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';
|
package/dist/tools/index.js
CHANGED
|
@@ -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
|
});
|