sparkecoder 0.1.131 → 0.1.132
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/dist/cli.js +348 -92
- package/dist/cli.js.map +1 -1
- package/dist/index.js +292 -36
- package/dist/index.js.map +1 -1
- package/dist/server/index.js +292 -36
- package/dist/server/index.js.map +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/web/.next/build-manifest.json +2 -2
- package/web/.next/standalone/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/web/.next/server/app/(main)/agents/page_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(main)/settings/page_client-reference-manifest.js +1 -1
- 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_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 +2 -2
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- 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 +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.html +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/agents.segments/_full.segment.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/agents.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/_index.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/agents.segments/_tree.segment.rsc +1 -1
- 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_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 +3 -3
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_full.segment.rsc +3 -3
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_tree.segment.rsc +1 -1
- 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_client-reference-manifest.js +1 -1
- 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 +3 -3
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_full.segment.rsc +3 -3
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_tree.segment.rsc +1 -1
- 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_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 +3 -3
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_full.segment.rsc +3 -3
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_tree.segment.rsc +1 -1
- 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 +3 -3
- package/web/.next/standalone/web/.next/server/app/docs.segments/_full.segment.rsc +3 -3
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
- 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 +4 -4
- 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 +4 -4
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.html +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/settings.segments/_full.segment.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- 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/185f69f6478ba713.js +1 -0
- package/web/.next/standalone/web/.next/static/static/chunks/185f69f6478ba713.js +1 -0
- package/web/.next/standalone/web/runtime-config.json +2 -1
- package/web/.next/standalone/web/src/app/__sfapi/[...path]/route.ts +96 -0
- package/web/.next/standalone/web/src/lib/config.ts +22 -7
- package/web/.next/static/chunks/185f69f6478ba713.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/5aece72c38f86fbd.js +0 -1
- package/web/.next/standalone/web/.next/static/static/chunks/5aece72c38f86fbd.js +0 -1
- package/web/.next/static/chunks/5aece72c38f86fbd.js +0 -1
- /package/web/.next/standalone/web/.next/static/{KQbunVSU5tNoYBl7TnhLn → WaAcu3X3K00MDvfn1ik7H}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/{KQbunVSU5tNoYBl7TnhLn → WaAcu3X3K00MDvfn1ik7H}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/{KQbunVSU5tNoYBl7TnhLn → WaAcu3X3K00MDvfn1ik7H}/_ssgManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/static/{KQbunVSU5tNoYBl7TnhLn → WaAcu3X3K00MDvfn1ik7H}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/static/{KQbunVSU5tNoYBl7TnhLn → WaAcu3X3K00MDvfn1ik7H}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/static/{KQbunVSU5tNoYBl7TnhLn → WaAcu3X3K00MDvfn1ik7H}/_ssgManifest.js +0 -0
- /package/web/.next/static/{KQbunVSU5tNoYBl7TnhLn → WaAcu3X3K00MDvfn1ik7H}/_buildManifest.js +0 -0
- /package/web/.next/static/{KQbunVSU5tNoYBl7TnhLn → WaAcu3X3K00MDvfn1ik7H}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{KQbunVSU5tNoYBl7TnhLn → WaAcu3X3K00MDvfn1ik7H}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--KQbunVSU5tNoYBl7TnhLn--><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5"/><link rel="stylesheet" href="/_next/static/chunks/34d933785a17edf3.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/acb0fc66f5414af6.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/651e187cc15d66de.js"/><script src="/_next/static/chunks/735a2408c315b2f0.js" async=""></script><script src="/_next/static/chunks/186e0c1b3ff43c9c.js" async=""></script><script src="/_next/static/chunks/a14243261b055626.js" async=""></script><script src="/_next/static/chunks/862ced58ce21a270.js" async=""></script><script src="/_next/static/chunks/turbopack-2c0905c7bbebae3f.js" async=""></script><script src="/_next/static/chunks/5aece72c38f86fbd.js" async=""></script><script src="/_next/static/chunks/9b5512fb633ef95d.js" async=""></script><script src="/_next/static/chunks/0f1cf11540868e42.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff"/><meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0a0a0a"/><title>SparkeCoder - AI-Powered Coding Agent</title><meta name="description" content="SparkeCoder is your AI-powered coding assistant. Build, debug, and ship code faster with intelligent automation and natural language programming."/><meta name="author" content="SparkeCoder Team"/><link rel="manifest" href="/manifest.json"/><meta name="keywords" content="AI coding assistant,code automation,AI programming,developer tools,coding agent,SparkeCoder,AI pair programming"/><meta name="creator" content="SparkeCoder"/><meta name="publisher" content="SparkeCoder"/><meta name="robots" content="index, follow"/><meta name="googlebot" content="index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"/><meta name="category" content="technology"/><meta name="format-detection" content="telephone=no"/><meta name="mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-title" content="SparkeCoder"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><meta property="og:title" content="SparkeCoder - AI-Powered Coding Agent"/><meta property="og:description" content="Build, debug, and ship code faster with intelligent AI automation and natural language programming."/><meta property="og:site_name" content="SparkeCoder"/><meta property="og:locale" content="en_US"/><meta property="og:image" content="http://localhost:3001/opengraph-image.png?opengraph-image.ce342317.png"/><meta property="og:image:width" content="512"/><meta property="og:image:height" content="512"/><meta property="og:image:type" content="image/png"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="SparkeCoder - AI-Powered Coding Agent"/><meta name="twitter:description" content="Build, debug, and ship code faster with intelligent AI automation and natural language programming."/><meta name="twitter:image" content="http://localhost:3001/twitter-image.png?twitter-image.ce342317.png"/><meta name="twitter:image:width" content="512"/><meta name="twitter:image:height" content="512"/><meta name="twitter:image:type" content="image/png"/><link rel="icon" href="/favicon.ico?favicon.e3cbed1b.ico" sizes="256x256" type="image/x-icon"/><link rel="icon" href="/icon.png?icon.fdefec0f.png" sizes="32x32" type="image/png"/><link rel="apple-touch-icon" href="/apple-icon.png?apple-icon.d6d14cbd.png" sizes="180x180" type="image/png"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/651e187cc15d66de.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[760800,[\"/_next/static/chunks/5aece72c38f86fbd.js\"],\"ApiInit\"]\n3:I[488287,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n4:I[174895,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n5:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"OutletBoundary\"]\n6:\"$Sreact.suspense\"\n8:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"ViewportBoundary\"]\na:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"MetadataBoundary\"]\nc:I[552576,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n:HL[\"/_next/static/chunks/34d933785a17edf3.css\",\"style\"]\n:HL[\"/_next/static/chunks/acb0fc66f5414af6.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"KQbunVSU5tNoYBl7TnhLn\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/34d933785a17edf3.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/acb0fc66f5414af6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/5aece72c38f86fbd.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"children\":[\"$\",\"body\",null,{\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased\",\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@7\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=5\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"media\":\"(prefers-color-scheme: light)\",\"content\":\"#ffffff\"}],[\"$\",\"meta\",\"3\",{\"name\":\"theme-color\",\"media\":\"(prefers-color-scheme: dark)\",\"content\":\"#0a0a0a\"}]]\n"])</script><script>self.__next_f.push([1,"d:I[349310,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"IconMark\"]\n7:null\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"title\",\"0\",{\"children\":\"SparkeCoder - AI-Powered Coding Agent\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"SparkeCoder is your AI-powered coding assistant. Build, debug, and ship code faster with intelligent automation and natural language programming.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"author\",\"content\":\"SparkeCoder Team\"}],[\"$\",\"link\",\"3\",{\"rel\":\"manifest\",\"href\":\"/manifest.json\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"meta\",\"4\",{\"name\":\"keywords\",\"content\":\"AI coding assistant,code automation,AI programming,developer tools,coding agent,SparkeCoder,AI pair programming\"}],[\"$\",\"meta\",\"5\",{\"name\":\"creator\",\"content\":\"SparkeCoder\"}],[\"$\",\"meta\",\"6\",{\"name\":\"publisher\",\"content\":\"SparkeCoder\"}],[\"$\",\"meta\",\"7\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"8\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"meta\",\"9\",{\"name\":\"category\",\"content\":\"technology\"}],[\"$\",\"meta\",\"10\",{\"name\":\"format-detection\",\"content\":\"telephone=no\"}],[\"$\",\"meta\",\"11\",{\"name\":\"mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"12\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"SparkeCoder\"}],[\"$\",\"meta\",\"13\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"black-translucent\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:title\",\"content\":\"SparkeCoder - AI-Powered Coding Agent\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:description\",\"content\":\"Build, debug, and ship code faster with intelligent AI automation and natural language programming.\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:site_name\",\"content\":\"SparkeCoder\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"18\",{\"property\":\"og:image\",\"content\":\"http://localhost:3001/opengraph-image.png?opengraph-image.ce342317.png\"}],[\"$\",\"meta\",\"19\",{\"property\":\"og:image:width\",\"content\":\"512\"}],[\"$\",\"meta\",\"20\",{\"property\":\"og:image:height\",\"content\":\"512\"}],[\"$\",\"meta\",\"21\",{\"property\":\"og:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"22\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"24\",{\"name\":\"twitter:title\",\"content\":\"SparkeCoder - AI-Powered Coding Agent\"}],[\"$\",\"meta\",\"25\",{\"name\":\"twitter:description\",\"content\":\"Build, debug, and ship code faster with intelligent AI automation and natural language programming.\"}],[\"$\",\"meta\",\"26\",{\"name\":\"twitter:image\",\"content\":\"http://localhost:3001/twitter-image.png?twitter-image.ce342317.png\"}],[\"$\",\"meta\",\"27\",{\"name\":\"twitter:image:width\",\"content\":\"512\"}],[\"$\",\"meta\",\"28\",{\"name\":\"twitter:image:height\",\"content\":\"512\"}],[\"$\",\"meta\",\"29\",{\"name\":\"twitter:image:type\",\"content\":\"image/png\"}],[\"$\",\"link\",\"30\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.e3cbed1b.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"31\",{\"rel\":\"icon\",\"href\":\"/icon.png?icon.fdefec0f.png\",\"sizes\":\"32x32\",\"type\":\"image/png\"}],[\"$\",\"link\",\"32\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-icon.png?apple-icon.d6d14cbd.png\",\"sizes\":\"180x180\",\"type\":\"image/png\"}],[\"$\",\"$Ld\",\"33\",{}]]\n"])</script></body></html>
|
|
1
|
+
<!DOCTYPE html><!--WaAcu3X3K00MDvfn1ik7H--><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5"/><link rel="stylesheet" href="/_next/static/chunks/34d933785a17edf3.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/acb0fc66f5414af6.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/651e187cc15d66de.js"/><script src="/_next/static/chunks/735a2408c315b2f0.js" async=""></script><script src="/_next/static/chunks/186e0c1b3ff43c9c.js" async=""></script><script src="/_next/static/chunks/a14243261b055626.js" async=""></script><script src="/_next/static/chunks/862ced58ce21a270.js" async=""></script><script src="/_next/static/chunks/turbopack-2c0905c7bbebae3f.js" async=""></script><script src="/_next/static/chunks/185f69f6478ba713.js" async=""></script><script src="/_next/static/chunks/9b5512fb633ef95d.js" async=""></script><script src="/_next/static/chunks/0f1cf11540868e42.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff"/><meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0a0a0a"/><title>SparkeCoder - AI-Powered Coding Agent</title><meta name="description" content="SparkeCoder is your AI-powered coding assistant. Build, debug, and ship code faster with intelligent automation and natural language programming."/><meta name="author" content="SparkeCoder Team"/><link rel="manifest" href="/manifest.json"/><meta name="keywords" content="AI coding assistant,code automation,AI programming,developer tools,coding agent,SparkeCoder,AI pair programming"/><meta name="creator" content="SparkeCoder"/><meta name="publisher" content="SparkeCoder"/><meta name="robots" content="index, follow"/><meta name="googlebot" content="index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"/><meta name="category" content="technology"/><meta name="format-detection" content="telephone=no"/><meta name="mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-title" content="SparkeCoder"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><meta property="og:title" content="SparkeCoder - AI-Powered Coding Agent"/><meta property="og:description" content="Build, debug, and ship code faster with intelligent AI automation and natural language programming."/><meta property="og:site_name" content="SparkeCoder"/><meta property="og:locale" content="en_US"/><meta property="og:image" content="http://localhost:3001/opengraph-image.png?opengraph-image.ce342317.png"/><meta property="og:image:width" content="512"/><meta property="og:image:height" content="512"/><meta property="og:image:type" content="image/png"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="SparkeCoder - AI-Powered Coding Agent"/><meta name="twitter:description" content="Build, debug, and ship code faster with intelligent AI automation and natural language programming."/><meta name="twitter:image" content="http://localhost:3001/twitter-image.png?twitter-image.ce342317.png"/><meta name="twitter:image:width" content="512"/><meta name="twitter:image:height" content="512"/><meta name="twitter:image:type" content="image/png"/><link rel="icon" href="/favicon.ico?favicon.e3cbed1b.ico" sizes="256x256" type="image/x-icon"/><link rel="icon" href="/icon.png?icon.fdefec0f.png" sizes="32x32" type="image/png"/><link rel="apple-touch-icon" href="/apple-icon.png?apple-icon.d6d14cbd.png" sizes="180x180" type="image/png"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/651e187cc15d66de.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[760800,[\"/_next/static/chunks/185f69f6478ba713.js\"],\"ApiInit\"]\n3:I[488287,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n4:I[174895,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n5:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"OutletBoundary\"]\n6:\"$Sreact.suspense\"\n8:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"ViewportBoundary\"]\na:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"MetadataBoundary\"]\nc:I[552576,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n:HL[\"/_next/static/chunks/34d933785a17edf3.css\",\"style\"]\n:HL[\"/_next/static/chunks/acb0fc66f5414af6.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"WaAcu3X3K00MDvfn1ik7H\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/34d933785a17edf3.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/acb0fc66f5414af6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/185f69f6478ba713.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"children\":[\"$\",\"body\",null,{\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased\",\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@7\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=5\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"media\":\"(prefers-color-scheme: light)\",\"content\":\"#ffffff\"}],[\"$\",\"meta\",\"3\",{\"name\":\"theme-color\",\"media\":\"(prefers-color-scheme: dark)\",\"content\":\"#0a0a0a\"}]]\n"])</script><script>self.__next_f.push([1,"d:I[349310,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"IconMark\"]\n7:null\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"title\",\"0\",{\"children\":\"SparkeCoder - AI-Powered Coding Agent\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"SparkeCoder is your AI-powered coding assistant. Build, debug, and ship code faster with intelligent automation and natural language programming.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"author\",\"content\":\"SparkeCoder Team\"}],[\"$\",\"link\",\"3\",{\"rel\":\"manifest\",\"href\":\"/manifest.json\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"meta\",\"4\",{\"name\":\"keywords\",\"content\":\"AI coding assistant,code automation,AI programming,developer tools,coding agent,SparkeCoder,AI pair programming\"}],[\"$\",\"meta\",\"5\",{\"name\":\"creator\",\"content\":\"SparkeCoder\"}],[\"$\",\"meta\",\"6\",{\"name\":\"publisher\",\"content\":\"SparkeCoder\"}],[\"$\",\"meta\",\"7\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"8\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"meta\",\"9\",{\"name\":\"category\",\"content\":\"technology\"}],[\"$\",\"meta\",\"10\",{\"name\":\"format-detection\",\"content\":\"telephone=no\"}],[\"$\",\"meta\",\"11\",{\"name\":\"mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"12\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"SparkeCoder\"}],[\"$\",\"meta\",\"13\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"black-translucent\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:title\",\"content\":\"SparkeCoder - AI-Powered Coding Agent\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:description\",\"content\":\"Build, debug, and ship code faster with intelligent AI automation and natural language programming.\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:site_name\",\"content\":\"SparkeCoder\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"18\",{\"property\":\"og:image\",\"content\":\"http://localhost:3001/opengraph-image.png?opengraph-image.ce342317.png\"}],[\"$\",\"meta\",\"19\",{\"property\":\"og:image:width\",\"content\":\"512\"}],[\"$\",\"meta\",\"20\",{\"property\":\"og:image:height\",\"content\":\"512\"}],[\"$\",\"meta\",\"21\",{\"property\":\"og:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"22\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"24\",{\"name\":\"twitter:title\",\"content\":\"SparkeCoder - AI-Powered Coding Agent\"}],[\"$\",\"meta\",\"25\",{\"name\":\"twitter:description\",\"content\":\"Build, debug, and ship code faster with intelligent AI automation and natural language programming.\"}],[\"$\",\"meta\",\"26\",{\"name\":\"twitter:image\",\"content\":\"http://localhost:3001/twitter-image.png?twitter-image.ce342317.png\"}],[\"$\",\"meta\",\"27\",{\"name\":\"twitter:image:width\",\"content\":\"512\"}],[\"$\",\"meta\",\"28\",{\"name\":\"twitter:image:height\",\"content\":\"512\"}],[\"$\",\"meta\",\"29\",{\"name\":\"twitter:image:type\",\"content\":\"image/png\"}],[\"$\",\"link\",\"30\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.e3cbed1b.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"31\",{\"rel\":\"icon\",\"href\":\"/icon.png?icon.fdefec0f.png\",\"sizes\":\"32x32\",\"type\":\"image/png\"}],[\"$\",\"link\",\"32\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-icon.png?apple-icon.d6d14cbd.png\",\"sizes\":\"180x180\",\"type\":\"image/png\"}],[\"$\",\"$Ld\",\"33\",{}]]\n"])</script></body></html>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
2
|
-
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/651e187cc15d66de.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[488287,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n3:I[174895,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n4:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"ViewportBoundary\"]\n9:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"MetadataBoundary\"]\nb:I[552576,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"
|
|
1
|
+
<!DOCTYPE html><!--WaAcu3X3K00MDvfn1ik7H--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/651e187cc15d66de.js"/><script src="/_next/static/chunks/735a2408c315b2f0.js" async=""></script><script src="/_next/static/chunks/186e0c1b3ff43c9c.js" async=""></script><script src="/_next/static/chunks/a14243261b055626.js" async=""></script><script src="/_next/static/chunks/862ced58ce21a270.js" async=""></script><script src="/_next/static/chunks/turbopack-2c0905c7bbebae3f.js" async=""></script><script src="/_next/static/chunks/9b5512fb633ef95d.js" async=""></script><script src="/_next/static/chunks/0f1cf11540868e42.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><link rel="icon" href="/favicon.ico?favicon.e3cbed1b.ico" sizes="256x256" type="image/x-icon"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
|
|
2
|
+
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/651e187cc15d66de.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[488287,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n3:I[174895,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n4:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"ViewportBoundary\"]\n9:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"MetadataBoundary\"]\nb:I[552576,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"WaAcu3X3K00MDvfn1ik7H\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"c:I[349310,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"IconMark\"]\n6:null\na:[[\"$\",\"link\",\"0\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.e3cbed1b.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Lc\",\"1\",{}]]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"
|
|
1
|
+
self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"zrH1TR5UZvwVGPd7+yiGvO37EA+28f2EcGpjBlZsyZA=\"\n}"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,739963,e=>{"use strict";let t="sparkecoder_api_url",i="http://localhost:3141",o=!1;function a(){if(o)return;o=!0;let e=new URLSearchParams(window.location.search),i=e.get("apiUrl");if(i){localStorage.setItem(t,i),e.delete("apiUrl");let o=e.toString()?`${window.location.pathname}?${e.toString()}`:window.location.pathname;window.history.replaceState({},"",o),console.log(`[SparkECoder] API URL set to: ${i}`)}}function l(){o||a();let e=localStorage.getItem(t),l=function(){let{protocol:e,hostname:t,port:i}=window.location;return"localhost"===t||"127.0.0.1"===t||"0.0.0.0"===t?null:/^\d{1,3}(\.\d{1,3}){3}$/.test(t)?`${e}//${t}:${"6969"===i?"3141":i||"3141"}`:`${window.location.origin}/__sfapi`}();if(e){try{if(new URL(e).hostname.startsWith("api-")&&l&&l.endsWith("/__sfapi"))return l}catch{}return e}return l||i}function r(e){localStorage.setItem(t,e)}function n(){localStorage.removeItem(t)}let s={availableModels:[{id:"claude-opus-4-8",name:"Claude Opus 4.8",provider:"Anthropic"},{id:"gpt-5.5",name:"GPT-5.5",provider:"OpenAI"},{id:"claude-fable-5",name:"Claude Fable 5",provider:"Anthropic"}],availableTools:[{id:"bash",name:"Bash",description:"Execute shell commands",dangerous:!0},{id:"write_file",name:"Write File",description:"Create or edit files",dangerous:!0},{id:"read_file",name:"Read File",description:"Read file contents",dangerous:!1}],defaultModel:"gpt-5.5",defaultToolApprovals:{},serverConnected:!1,apiKeyConfigured:!1,apiBaseUrl:i};async function c(){let e=l();try{let t=new AbortController,i=setTimeout(()=>t.abort(),3e3),o=await fetch(`${e}/health`,{signal:t.signal});if(clearTimeout(i),!o.ok)return{...s,apiBaseUrl:e};let a=await o.json();return{...s,defaultModel:a.config?.defaultModel||s.defaultModel,defaultToolApprovals:a.config?.defaultToolApprovals||{},serverConnected:!0,apiKeyConfigured:a.apiKeyConfigured??!1,apiBaseUrl:e}}catch{return{...s,apiBaseUrl:e}}}async function d(){return l()}function u(){}e.s(["clearApiUrl",()=>n,"getApiBaseUrl",()=>d,"getApiUrl",()=>l,"getConfig",()=>c,"initApiUrl",()=>a,"resetConfigCache",()=>u,"setApiUrl",()=>r])},760800,e=>{"use strict";var t=e.i(430878),i=e.i(739963);function o(){return(0,t.useEffect)(()=>{(0,i.initApiUrl)()},[]),null}e.s(["ApiInit",()=>o])}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,739963,e=>{"use strict";let t="sparkecoder_api_url",i="http://localhost:3141",o=!1;function a(){if(o)return;o=!0;let e=new URLSearchParams(window.location.search),i=e.get("apiUrl");if(i){localStorage.setItem(t,i),e.delete("apiUrl");let o=e.toString()?`${window.location.pathname}?${e.toString()}`:window.location.pathname;window.history.replaceState({},"",o),console.log(`[SparkECoder] API URL set to: ${i}`)}}function l(){o||a();let e=localStorage.getItem(t),l=function(){let{protocol:e,hostname:t,port:i}=window.location;return"localhost"===t||"127.0.0.1"===t||"0.0.0.0"===t?null:/^\d{1,3}(\.\d{1,3}){3}$/.test(t)?`${e}//${t}:${"6969"===i?"3141":i||"3141"}`:`${window.location.origin}/__sfapi`}();if(e){try{if(new URL(e).hostname.startsWith("api-")&&l&&l.endsWith("/__sfapi"))return l}catch{}return e}return l||i}function r(e){localStorage.setItem(t,e)}function n(){localStorage.removeItem(t)}let s={availableModels:[{id:"claude-opus-4-8",name:"Claude Opus 4.8",provider:"Anthropic"},{id:"gpt-5.5",name:"GPT-5.5",provider:"OpenAI"},{id:"claude-fable-5",name:"Claude Fable 5",provider:"Anthropic"}],availableTools:[{id:"bash",name:"Bash",description:"Execute shell commands",dangerous:!0},{id:"write_file",name:"Write File",description:"Create or edit files",dangerous:!0},{id:"read_file",name:"Read File",description:"Read file contents",dangerous:!1}],defaultModel:"gpt-5.5",defaultToolApprovals:{},serverConnected:!1,apiKeyConfigured:!1,apiBaseUrl:i};async function c(){let e=l();try{let t=new AbortController,i=setTimeout(()=>t.abort(),3e3),o=await fetch(`${e}/health`,{signal:t.signal});if(clearTimeout(i),!o.ok)return{...s,apiBaseUrl:e};let a=await o.json();return{...s,defaultModel:a.config?.defaultModel||s.defaultModel,defaultToolApprovals:a.config?.defaultToolApprovals||{},serverConnected:!0,apiKeyConfigured:a.apiKeyConfigured??!1,apiBaseUrl:e}}catch{return{...s,apiBaseUrl:e}}}async function d(){return l()}function u(){}e.s(["clearApiUrl",()=>n,"getApiBaseUrl",()=>d,"getApiUrl",()=>l,"getConfig",()=>c,"initApiUrl",()=>a,"resetConfigCache",()=>u,"setApiUrl",()=>r])},760800,e=>{"use strict";var t=e.i(430878),i=e.i(739963);function o(){return(0,t.useEffect)(()=>{(0,i.initApiUrl)()},[]),null}e.s(["ApiInit",()=>o])}]);
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { NextRequest } from 'next/server';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Same-origin reverse proxy to the local sparkecoder API.
|
|
7
|
+
*
|
|
8
|
+
* The browser calls `/__sfapi/<path>` on the WEB origin (e.g.
|
|
9
|
+
* `https://sf-abc.sparkecode.com/__sfapi/sessions`). This route forwards the
|
|
10
|
+
* request to the local API over loopback (`http://127.0.0.1:3141/sessions`).
|
|
11
|
+
*
|
|
12
|
+
* Why: when Cloudflare Access is enabled, the web app and the `api-<host>`
|
|
13
|
+
* subdomain are SEPARATE Access applications. A browser `fetch()` to the API
|
|
14
|
+
* subdomain gets an interactive Access login redirect it can't follow (CORS /
|
|
15
|
+
* "access control checks" errors). Proxying through the web origin keeps the
|
|
16
|
+
* browser on ONE Access-gated origin (the web app, already logged in), and the
|
|
17
|
+
* loopback hop is exempt from Access on the device.
|
|
18
|
+
*
|
|
19
|
+
* Streams responses (SSE) and forwards request bodies, methods, and query.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
export const dynamic = 'force-dynamic';
|
|
23
|
+
|
|
24
|
+
const DEFAULT_LOCAL_API = 'http://127.0.0.1:3141';
|
|
25
|
+
|
|
26
|
+
function getLocalApiBase(): string {
|
|
27
|
+
const cwd = process.cwd();
|
|
28
|
+
const candidates = [
|
|
29
|
+
path.join(cwd, 'runtime-config.json'),
|
|
30
|
+
path.join(cwd, '..', 'runtime-config.json'),
|
|
31
|
+
path.join(cwd, '..', '..', 'runtime-config.json'),
|
|
32
|
+
path.join(cwd, '..', '..', '..', 'runtime-config.json'),
|
|
33
|
+
];
|
|
34
|
+
for (const p of candidates) {
|
|
35
|
+
try {
|
|
36
|
+
if (fs.existsSync(p)) {
|
|
37
|
+
const cfg = JSON.parse(fs.readFileSync(p, 'utf-8'));
|
|
38
|
+
// Prefer the explicit loopback URL; fall back to apiBaseUrl only if it
|
|
39
|
+
// is itself a localhost URL (never proxy to a public api-<host>, that
|
|
40
|
+
// would re-trigger the Access redirect server-side).
|
|
41
|
+
if (cfg.localApiBaseUrl) return cfg.localApiBaseUrl;
|
|
42
|
+
if (typeof cfg.apiBaseUrl === 'string' && /^https?:\/\/(localhost|127\.0\.0\.1)/.test(cfg.apiBaseUrl)) {
|
|
43
|
+
return cfg.apiBaseUrl;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
} catch {
|
|
47
|
+
// try next candidate
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return DEFAULT_LOCAL_API;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async function proxy(req: NextRequest, ctx: { params: Promise<{ path?: string[] }> }) {
|
|
54
|
+
const { path: parts = [] } = await ctx.params;
|
|
55
|
+
const base = getLocalApiBase().replace(/\/$/, '');
|
|
56
|
+
const search = req.nextUrl.search || '';
|
|
57
|
+
const target = `${base}/${parts.join('/')}${search}`;
|
|
58
|
+
|
|
59
|
+
const headers = new Headers();
|
|
60
|
+
const ct = req.headers.get('content-type');
|
|
61
|
+
if (ct) headers.set('content-type', ct);
|
|
62
|
+
const accept = req.headers.get('accept');
|
|
63
|
+
if (accept) headers.set('accept', accept);
|
|
64
|
+
|
|
65
|
+
const init: RequestInit = { method: req.method, headers, redirect: 'manual' };
|
|
66
|
+
if (req.method !== 'GET' && req.method !== 'HEAD') {
|
|
67
|
+
init.body = await req.arrayBuffer();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
let upstream: Response;
|
|
71
|
+
try {
|
|
72
|
+
upstream = await fetch(target, init);
|
|
73
|
+
} catch (err) {
|
|
74
|
+
return new Response(
|
|
75
|
+
JSON.stringify({ error: 'local API unreachable', detail: err instanceof Error ? err.message : String(err) }),
|
|
76
|
+
{ status: 502, headers: { 'content-type': 'application/json' } },
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Stream the response body through (SSE, downloads, JSON all work). Pass
|
|
81
|
+
// only safe headers; let the runtime handle transfer-encoding/length.
|
|
82
|
+
const respHeaders = new Headers();
|
|
83
|
+
for (const h of ['content-type', 'cache-control', 'content-disposition']) {
|
|
84
|
+
const v = upstream.headers.get(h);
|
|
85
|
+
if (v) respHeaders.set(h, v);
|
|
86
|
+
}
|
|
87
|
+
return new Response(upstream.body, { status: upstream.status, headers: respHeaders });
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export const GET = proxy;
|
|
91
|
+
export const POST = proxy;
|
|
92
|
+
export const PUT = proxy;
|
|
93
|
+
export const PATCH = proxy;
|
|
94
|
+
export const DELETE = proxy;
|
|
95
|
+
export const HEAD = proxy;
|
|
96
|
+
export const OPTIONS = proxy;
|
|
@@ -46,11 +46,12 @@ function deriveApiUrlFromLocation(): string | null {
|
|
|
46
46
|
return `${protocol}//${hostname}:${apiPort}`;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
// Tunneled / DNS hostname.
|
|
50
|
-
//
|
|
51
|
-
//
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
// Tunneled / DNS hostname. Route API calls back through THIS origin via the
|
|
50
|
+
// `/__sfapi` reverse proxy instead of the separate `api-<host>` subdomain.
|
|
51
|
+
// With Cloudflare Access enabled, api-<host> is its own Access app and a
|
|
52
|
+
// browser fetch to it gets an interactive login redirect it can't follow.
|
|
53
|
+
// Staying same-origin uses the web app's existing Access session, no CORS.
|
|
54
|
+
return `${window.location.origin}/__sfapi`;
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
// Flag to track if we've initialized
|
|
@@ -97,9 +98,23 @@ export function getApiUrl(): string {
|
|
|
97
98
|
}
|
|
98
99
|
|
|
99
100
|
const stored = localStorage.getItem(STORAGE_KEY);
|
|
100
|
-
if (stored) return stored;
|
|
101
|
-
|
|
102
101
|
const derived = deriveApiUrlFromLocation();
|
|
102
|
+
|
|
103
|
+
if (stored) {
|
|
104
|
+
// Self-heal stale values: if a previous session cached the separate
|
|
105
|
+
// `api-<host>` origin (now broken behind Cloudflare Access) but we can
|
|
106
|
+
// derive a same-origin proxy URL, prefer the proxy.
|
|
107
|
+
try {
|
|
108
|
+
const u = new URL(stored);
|
|
109
|
+
if (u.hostname.startsWith('api-') && derived && derived.endsWith('/__sfapi')) {
|
|
110
|
+
return derived;
|
|
111
|
+
}
|
|
112
|
+
} catch {
|
|
113
|
+
// stored isn't an absolute URL — fall through and use it as-is
|
|
114
|
+
}
|
|
115
|
+
return stored;
|
|
116
|
+
}
|
|
117
|
+
|
|
103
118
|
if (derived) return derived;
|
|
104
119
|
|
|
105
120
|
return DEFAULT_API_URL;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,739963,e=>{"use strict";let t="sparkecoder_api_url",i="http://localhost:3141",o=!1;function a(){if(o)return;o=!0;let e=new URLSearchParams(window.location.search),i=e.get("apiUrl");if(i){localStorage.setItem(t,i),e.delete("apiUrl");let o=e.toString()?`${window.location.pathname}?${e.toString()}`:window.location.pathname;window.history.replaceState({},"",o),console.log(`[SparkECoder] API URL set to: ${i}`)}}function l(){o||a();let e=localStorage.getItem(t),l=function(){let{protocol:e,hostname:t,port:i}=window.location;return"localhost"===t||"127.0.0.1"===t||"0.0.0.0"===t?null:/^\d{1,3}(\.\d{1,3}){3}$/.test(t)?`${e}//${t}:${"6969"===i?"3141":i||"3141"}`:`${window.location.origin}/__sfapi`}();if(e){try{if(new URL(e).hostname.startsWith("api-")&&l&&l.endsWith("/__sfapi"))return l}catch{}return e}return l||i}function r(e){localStorage.setItem(t,e)}function n(){localStorage.removeItem(t)}let s={availableModels:[{id:"claude-opus-4-8",name:"Claude Opus 4.8",provider:"Anthropic"},{id:"gpt-5.5",name:"GPT-5.5",provider:"OpenAI"},{id:"claude-fable-5",name:"Claude Fable 5",provider:"Anthropic"}],availableTools:[{id:"bash",name:"Bash",description:"Execute shell commands",dangerous:!0},{id:"write_file",name:"Write File",description:"Create or edit files",dangerous:!0},{id:"read_file",name:"Read File",description:"Read file contents",dangerous:!1}],defaultModel:"gpt-5.5",defaultToolApprovals:{},serverConnected:!1,apiKeyConfigured:!1,apiBaseUrl:i};async function c(){let e=l();try{let t=new AbortController,i=setTimeout(()=>t.abort(),3e3),o=await fetch(`${e}/health`,{signal:t.signal});if(clearTimeout(i),!o.ok)return{...s,apiBaseUrl:e};let a=await o.json();return{...s,defaultModel:a.config?.defaultModel||s.defaultModel,defaultToolApprovals:a.config?.defaultToolApprovals||{},serverConnected:!0,apiKeyConfigured:a.apiKeyConfigured??!1,apiBaseUrl:e}}catch{return{...s,apiBaseUrl:e}}}async function d(){return l()}function u(){}e.s(["clearApiUrl",()=>n,"getApiBaseUrl",()=>d,"getApiUrl",()=>l,"getConfig",()=>c,"initApiUrl",()=>a,"resetConfigCache",()=>u,"setApiUrl",()=>r])},760800,e=>{"use strict";var t=e.i(430878),i=e.i(739963);function o(){return(0,t.useEffect)(()=>{(0,i.initApiUrl)()},[]),null}e.s(["ApiInit",()=>o])}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,739963,e=>{"use strict";let t="sparkecoder_api_url",i="http://localhost:3141",a=!1;function o(){if(a)return;a=!0;let e=new URLSearchParams(window.location.search),i=e.get("apiUrl");if(i){localStorage.setItem(t,i),e.delete("apiUrl");let a=e.toString()?`${window.location.pathname}?${e.toString()}`:window.location.pathname;window.history.replaceState({},"",a),console.log(`[SparkECoder] API URL set to: ${i}`)}}function l(){a||o();let e=localStorage.getItem(t);if(e)return e;let l=function(){let{protocol:e,hostname:t,port:i}=window.location;if("localhost"===t||"127.0.0.1"===t||"0.0.0.0"===t)return null;if(/^\d{1,3}(\.\d{1,3}){3}$/.test(t))return`${e}//${t}:${"6969"===i?"3141":i||"3141"}`;let a=t.startsWith("api-")?t:`api-${t}`;return`${e}//${a}`}();return l||i}function r(e){localStorage.setItem(t,e)}function n(){localStorage.removeItem(t)}let s={availableModels:[{id:"claude-opus-4-8",name:"Claude Opus 4.8",provider:"Anthropic"},{id:"gpt-5.5",name:"GPT-5.5",provider:"OpenAI"},{id:"claude-fable-5",name:"Claude Fable 5",provider:"Anthropic"}],availableTools:[{id:"bash",name:"Bash",description:"Execute shell commands",dangerous:!0},{id:"write_file",name:"Write File",description:"Create or edit files",dangerous:!0},{id:"read_file",name:"Read File",description:"Read file contents",dangerous:!1}],defaultModel:"gpt-5.5",defaultToolApprovals:{},serverConnected:!1,apiKeyConfigured:!1,apiBaseUrl:i};async function c(){let e=l();try{let t=new AbortController,i=setTimeout(()=>t.abort(),3e3),a=await fetch(`${e}/health`,{signal:t.signal});if(clearTimeout(i),!a.ok)return{...s,apiBaseUrl:e};let o=await a.json();return{...s,defaultModel:o.config?.defaultModel||s.defaultModel,defaultToolApprovals:o.config?.defaultToolApprovals||{},serverConnected:!0,apiKeyConfigured:o.apiKeyConfigured??!1,apiBaseUrl:e}}catch{return{...s,apiBaseUrl:e}}}async function d(){return l()}function u(){}e.s(["clearApiUrl",()=>n,"getApiBaseUrl",()=>d,"getApiUrl",()=>l,"getConfig",()=>c,"initApiUrl",()=>o,"resetConfigCache",()=>u,"setApiUrl",()=>r])},760800,e=>{"use strict";var t=e.i(430878),i=e.i(739963);function a(){return(0,t.useEffect)(()=>{(0,i.initApiUrl)()},[]),null}e.s(["ApiInit",()=>a])}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,739963,e=>{"use strict";let t="sparkecoder_api_url",i="http://localhost:3141",a=!1;function o(){if(a)return;a=!0;let e=new URLSearchParams(window.location.search),i=e.get("apiUrl");if(i){localStorage.setItem(t,i),e.delete("apiUrl");let a=e.toString()?`${window.location.pathname}?${e.toString()}`:window.location.pathname;window.history.replaceState({},"",a),console.log(`[SparkECoder] API URL set to: ${i}`)}}function l(){a||o();let e=localStorage.getItem(t);if(e)return e;let l=function(){let{protocol:e,hostname:t,port:i}=window.location;if("localhost"===t||"127.0.0.1"===t||"0.0.0.0"===t)return null;if(/^\d{1,3}(\.\d{1,3}){3}$/.test(t))return`${e}//${t}:${"6969"===i?"3141":i||"3141"}`;let a=t.startsWith("api-")?t:`api-${t}`;return`${e}//${a}`}();return l||i}function r(e){localStorage.setItem(t,e)}function n(){localStorage.removeItem(t)}let s={availableModels:[{id:"claude-opus-4-8",name:"Claude Opus 4.8",provider:"Anthropic"},{id:"gpt-5.5",name:"GPT-5.5",provider:"OpenAI"},{id:"claude-fable-5",name:"Claude Fable 5",provider:"Anthropic"}],availableTools:[{id:"bash",name:"Bash",description:"Execute shell commands",dangerous:!0},{id:"write_file",name:"Write File",description:"Create or edit files",dangerous:!0},{id:"read_file",name:"Read File",description:"Read file contents",dangerous:!1}],defaultModel:"gpt-5.5",defaultToolApprovals:{},serverConnected:!1,apiKeyConfigured:!1,apiBaseUrl:i};async function c(){let e=l();try{let t=new AbortController,i=setTimeout(()=>t.abort(),3e3),a=await fetch(`${e}/health`,{signal:t.signal});if(clearTimeout(i),!a.ok)return{...s,apiBaseUrl:e};let o=await a.json();return{...s,defaultModel:o.config?.defaultModel||s.defaultModel,defaultToolApprovals:o.config?.defaultToolApprovals||{},serverConnected:!0,apiKeyConfigured:o.apiKeyConfigured??!1,apiBaseUrl:e}}catch{return{...s,apiBaseUrl:e}}}async function d(){return l()}function u(){}e.s(["clearApiUrl",()=>n,"getApiBaseUrl",()=>d,"getApiUrl",()=>l,"getConfig",()=>c,"initApiUrl",()=>o,"resetConfigCache",()=>u,"setApiUrl",()=>r])},760800,e=>{"use strict";var t=e.i(430878),i=e.i(739963);function a(){return(0,t.useEffect)(()=>{(0,i.initApiUrl)()},[]),null}e.s(["ApiInit",()=>a])}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,739963,e=>{"use strict";let t="sparkecoder_api_url",i="http://localhost:3141",a=!1;function o(){if(a)return;a=!0;let e=new URLSearchParams(window.location.search),i=e.get("apiUrl");if(i){localStorage.setItem(t,i),e.delete("apiUrl");let a=e.toString()?`${window.location.pathname}?${e.toString()}`:window.location.pathname;window.history.replaceState({},"",a),console.log(`[SparkECoder] API URL set to: ${i}`)}}function l(){a||o();let e=localStorage.getItem(t);if(e)return e;let l=function(){let{protocol:e,hostname:t,port:i}=window.location;if("localhost"===t||"127.0.0.1"===t||"0.0.0.0"===t)return null;if(/^\d{1,3}(\.\d{1,3}){3}$/.test(t))return`${e}//${t}:${"6969"===i?"3141":i||"3141"}`;let a=t.startsWith("api-")?t:`api-${t}`;return`${e}//${a}`}();return l||i}function r(e){localStorage.setItem(t,e)}function n(){localStorage.removeItem(t)}let s={availableModels:[{id:"claude-opus-4-8",name:"Claude Opus 4.8",provider:"Anthropic"},{id:"gpt-5.5",name:"GPT-5.5",provider:"OpenAI"},{id:"claude-fable-5",name:"Claude Fable 5",provider:"Anthropic"}],availableTools:[{id:"bash",name:"Bash",description:"Execute shell commands",dangerous:!0},{id:"write_file",name:"Write File",description:"Create or edit files",dangerous:!0},{id:"read_file",name:"Read File",description:"Read file contents",dangerous:!1}],defaultModel:"gpt-5.5",defaultToolApprovals:{},serverConnected:!1,apiKeyConfigured:!1,apiBaseUrl:i};async function c(){let e=l();try{let t=new AbortController,i=setTimeout(()=>t.abort(),3e3),a=await fetch(`${e}/health`,{signal:t.signal});if(clearTimeout(i),!a.ok)return{...s,apiBaseUrl:e};let o=await a.json();return{...s,defaultModel:o.config?.defaultModel||s.defaultModel,defaultToolApprovals:o.config?.defaultToolApprovals||{},serverConnected:!0,apiKeyConfigured:o.apiKeyConfigured??!1,apiBaseUrl:e}}catch{return{...s,apiBaseUrl:e}}}async function d(){return l()}function u(){}e.s(["clearApiUrl",()=>n,"getApiBaseUrl",()=>d,"getApiUrl",()=>l,"getConfig",()=>c,"initApiUrl",()=>o,"resetConfigCache",()=>u,"setApiUrl",()=>r])},760800,e=>{"use strict";var t=e.i(430878),i=e.i(739963);function a(){return(0,t.useEffect)(()=>{(0,i.initApiUrl)()},[]),null}e.s(["ApiInit",()=>a])}]);
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|