agentnetes 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/package.json +1 -1
  2. package/web/.next/BUILD_ID +1 -1
  3. package/web/.next/build-manifest.json +3 -3
  4. package/web/.next/prerender-manifest.json +28 -0
  5. package/web/.next/required-server-files.json +1 -3
  6. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  7. package/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/web/.next/server/app/_global-error.html +1 -1
  9. package/web/.next/server/app/_global-error.rsc +1 -1
  10. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  11. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  13. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/web/.next/server/app/_not-found/page/next-font-manifest.json +7 -2
  16. package/web/.next/server/app/_not-found/page.js +1 -1
  17. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  18. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/web/.next/server/app/_not-found.html +1 -1
  20. package/web/.next/server/app/_not-found.rsc +9 -10
  21. package/web/.next/server/app/_not-found.segments/_full.segment.rsc +9 -10
  22. package/web/.next/server/app/_not-found.segments/_head.segment.rsc +3 -3
  23. package/web/.next/server/app/_not-found.segments/_index.segment.rsc +5 -6
  24. package/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  25. package/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  26. package/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -3
  27. package/web/.next/server/app/api/config.body +1 -0
  28. package/web/.next/server/app/api/config.meta +1 -0
  29. package/web/.next/server/app/demo/page/next-font-manifest.json +7 -2
  30. package/web/.next/server/app/demo/page.js +1 -1
  31. package/web/.next/server/app/demo/page.js.nft.json +1 -1
  32. package/web/.next/server/app/demo/page_client-reference-manifest.js +1 -1
  33. package/web/.next/server/app/demo.html +1 -1
  34. package/web/.next/server/app/demo.rsc +13 -12
  35. package/web/.next/server/app/demo.segments/_full.segment.rsc +13 -12
  36. package/web/.next/server/app/demo.segments/_head.segment.rsc +3 -3
  37. package/web/.next/server/app/demo.segments/_index.segment.rsc +5 -6
  38. package/web/.next/server/app/demo.segments/_tree.segment.rsc +4 -3
  39. package/web/.next/server/app/demo.segments/demo/__PAGE__.segment.rsc +4 -4
  40. package/web/.next/server/app/demo.segments/demo.segment.rsc +3 -3
  41. package/web/.next/server/app/docs/page/next-font-manifest.json +7 -2
  42. package/web/.next/server/app/docs/page.js +1 -1
  43. package/web/.next/server/app/docs/page.js.nft.json +1 -1
  44. package/web/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  45. package/web/.next/server/app/docs.html +3 -3
  46. package/web/.next/server/app/docs.rsc +13 -12
  47. package/web/.next/server/app/docs.segments/_full.segment.rsc +13 -12
  48. package/web/.next/server/app/docs.segments/_head.segment.rsc +3 -3
  49. package/web/.next/server/app/docs.segments/_index.segment.rsc +5 -6
  50. package/web/.next/server/app/docs.segments/_tree.segment.rsc +4 -3
  51. package/web/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +4 -4
  52. package/web/.next/server/app/docs.segments/docs.segment.rsc +3 -3
  53. package/web/.next/server/app/index.html +1 -1
  54. package/web/.next/server/app/index.rsc +13 -12
  55. package/web/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  56. package/web/.next/server/app/index.segments/_full.segment.rsc +13 -12
  57. package/web/.next/server/app/index.segments/_head.segment.rsc +3 -3
  58. package/web/.next/server/app/index.segments/_index.segment.rsc +5 -6
  59. package/web/.next/server/app/index.segments/_tree.segment.rsc +4 -3
  60. package/web/.next/server/app/page/next-font-manifest.json +7 -2
  61. package/web/.next/server/app/page.js +1 -1
  62. package/web/.next/server/app/page.js.nft.json +1 -1
  63. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/chunks/[root-of-the-server]__0h9pqwt._.js +1 -1
  65. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0amff4c._.js → [root-of-the-server]__0fzgx80._.js} +2 -2
  66. package/web/.next/server/chunks/ssr/{[root-of-the-server]__08ixfva._.js → [root-of-the-server]__0r3ayxw._.js} +2 -2
  67. package/web/.next/server/chunks/ssr/[root-of-the-server]__0tlv0_c._.js +3 -0
  68. package/web/.next/server/chunks/ssr/app_demo_page_tsx_0.31s93._.js +2 -2
  69. package/web/.next/server/chunks/ssr/app_docs_page_tsx_0a3qz3_._.js +3 -3
  70. package/web/.next/server/chunks/ssr/app_page_tsx_0es_sk2._.js +1 -1
  71. package/web/.next/server/chunks/ssr/node_modules_08x2~-f._.js +3 -0
  72. package/web/.next/server/chunks/ssr/{node_modules_0fx6-.x._.js → node_modules_0blbtbs._.js} +4 -2
  73. package/web/.next/server/chunks/ssr/node_modules_0mwlsb-._.js +3 -0
  74. package/web/.next/server/chunks/ssr/{node_modules_0lynej0._.js → node_modules_10h38q2._.js} +2 -2
  75. package/web/.next/server/middleware-build-manifest.js +3 -3
  76. package/web/.next/server/next-font-manifest.js +1 -1
  77. package/web/.next/server/next-font-manifest.json +19 -2
  78. package/web/.next/server/pages/404.html +1 -1
  79. package/web/.next/server/pages/500.html +1 -1
  80. package/web/.next/static/chunks/00gs7ywo3p_-j.css +3 -0
  81. package/web/.next/static/chunks/00pksrk9b32qm.js +1 -0
  82. package/web/.next/static/chunks/07h.efnrmr0xe.js +185 -0
  83. package/web/.next/static/chunks/{0wsoljjoc5b47.js → 08845o78x1i1w.js} +5 -5
  84. package/web/.next/static/chunks/0cn.wl1796p2h.js +3 -0
  85. package/web/.next/static/chunks/0z1bg424bhco1.js +3 -0
  86. package/web/.next/static/chunks/{0u46szahhg8-l.js → 13l7oudco0wo6.js} +1 -1
  87. package/web/.next/static/media/13bf9871fe164e7f-s.0s19wthhh_6~m.woff2 +0 -0
  88. package/web/.next/static/media/1bffadaabf893a1e-s.16ipb6fqu393i.woff2 +0 -0
  89. package/web/.next/static/media/2bbe8d2671613f1f-s.067x_6k0k23tk.woff2 +0 -0
  90. package/web/.next/static/media/2c55a0e60120577a-s.0bjc5tiuqdqro.woff2 +0 -0
  91. package/web/.next/static/media/3fe682a82f50d426-s.09q3q1i5159bl.woff2 +0 -0
  92. package/web/.next/static/media/5476f68d60460930-s.0wxq9webf.ew4.woff2 +0 -0
  93. package/web/.next/static/media/70bc3e132a0a741e-s.p.1409xf.ylxg8g.woff2 +0 -0
  94. package/web/.next/static/media/71b036adf157cdcf-s.03nf~dfjdkf~..woff2 +0 -0
  95. package/web/.next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2 +0 -0
  96. package/web/.next/static/media/89b21bb081cb7469-s.0gfhww.tctz1o.woff2 +0 -0
  97. package/web/.next/static/media/9c72aa0f40e4eef8-s.0m6w47a4e5dy9.woff2 +0 -0
  98. package/web/.next/static/media/ad66f9afd8947f86-s.11u06r12fd6v_.woff2 +0 -0
  99. package/web/.next/static/media/cc545e633e20c56d-s.0dza.stei.9v7.woff2 +0 -0
  100. package/web/package.json +12 -1
  101. package/web/server.js +1 -1
  102. package/web/.next/server/chunks/ssr/_062mb1e._.js +0 -3
  103. package/web/.next/server/chunks/ssr/node_modules_05cohki._.js +0 -3
  104. package/web/.next/server/chunks/ssr/node_modules_0n.ghpl._.js +0 -5
  105. package/web/.next/server/chunks/ssr/node_modules_120b470._.js +0 -5
  106. package/web/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_038euao._.js +0 -3
  107. package/web/.next/static/chunks/05bvvz79zswfr.js +0 -1
  108. package/web/.next/static/chunks/0a4bykb92jbu2.js +0 -3
  109. package/web/.next/static/chunks/0zarrl-ygjy7b.js +0 -1
  110. package/web/.next/static/chunks/164_6pqattb9q.css +0 -1
  111. package/web/.next/static/chunks/16xltw7vj2r00.js +0 -185
  112. /package/web/.next/static/{x6OtPfrxJ7vA5hRM_7Q7K → SMcLeSYWNCOVrWD-oXgfW}/_buildManifest.js +0 -0
  113. /package/web/.next/static/{x6OtPfrxJ7vA5hRM_7Q7K → SMcLeSYWNCOVrWD-oXgfW}/_clientMiddlewareManifest.js +0 -0
  114. /package/web/.next/static/{x6OtPfrxJ7vA5hRM_7Q7K → SMcLeSYWNCOVrWD-oXgfW}/_ssgManifest.js +0 -0
@@ -1,185 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,38999,e=>{"use strict";var t=e.i(43476),s=e.i(71645),a=e.i(22016),n=e.i(75254);let r=(0,n.default)("send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]),i=["Audit all dependencies for known CVEs and outdated versions","Add rate limiting middleware with configurable limits per route","Find all TODO and FIXME comments and summarise what needs to be done","Add input validation and sanitisation to every request handler"],o=["Add a new provider package with streaming and tool-use support","Find security vulnerabilities in the authentication flow","Refactor the router module to improve test coverage","Generate TypeScript types for all public API endpoints"];function l({content:e}){let s=e.split("\n");return(0,t.jsx)("div",{className:"prose text-sm space-y-1",children:s.map((e,s)=>{if(e.startsWith("## "))return(0,t.jsx)("h2",{className:"text-base font-semibold text-white mt-3 mb-1",children:e.slice(3)},s);if(e.startsWith("### "))return(0,t.jsx)("h3",{className:"text-sm font-semibold text-white mt-2",children:e.slice(4)},s);if(e.startsWith("- ")){let a=e.slice(2).replace(/\*\*(.*?)\*\*/g,"<strong>$1</strong>").replace(/`(.*?)`/g,"<code>$1</code>");return(0,t.jsx)("li",{className:"ml-4 text-white/80",dangerouslySetInnerHTML:{__html:a}},s)}if(e.startsWith("**Goal:**"))return(0,t.jsxs)("p",{className:"text-white/65",children:[(0,t.jsx)("strong",{className:"text-white",children:"Goal:"}),e.slice(9)]},s);if(""===e.trim())return(0,t.jsx)("div",{className:"h-1"},s);let a=e.replace(/\*\*(.*?)\*\*/g,"<strong>$1</strong>").replace(/`(.*?)`/g,"<code>$1</code>");return(0,t.jsx)("p",{className:"text-white/80",dangerouslySetInnerHTML:{__html:a}},s)})})}function d({onSubmit:e,messages:a,isRunning:n,mode:c="real"}){let[p,m]=(0,s.useState)(""),x=(0,s.useRef)(null);return(0,s.useEffect)(()=>{x.current?.scrollIntoView({behavior:"smooth"})},[a]),(0,t.jsxs)("div",{className:"h-full flex flex-col",children:[(0,t.jsxs)("div",{className:"flex-1 overflow-y-auto p-4 space-y-4",children:[0===a.length&&(0,t.jsxs)("div",{className:"h-full flex flex-col items-center justify-center text-center px-4",children:[(0,t.jsx)("div",{className:"text-5xl mb-4",children:"⚡"}),(0,t.jsx)("h2",{className:"text-white text-xl font-semibold mb-2",children:"Agentnetes"}),(0,t.jsx)("p",{className:"text-white/70 text-sm mb-1 max-w-sm",children:"simulation"===c?"Watch the swarm in action · no setup needed.":"Self-organizing agents · real Docker sandboxes."}),(0,t.jsx)("p",{className:"text-white/40 text-xs mb-8 max-w-sm",children:"simulation"===c?"Pre-scripted scenarios showing real event sequences.":"Agents clone your repo, run shell commands, and deliver results."}),(0,t.jsx)("div",{className:"space-y-2 w-full max-w-sm",children:("simulation"===c?o:i).map((e,s)=>(0,t.jsx)("button",{onClick:()=>m(e),className:"w-full text-left text-xs text-white/60 border border-white/10 rounded-lg px-3 py-2.5 hover:border-white/25 hover:text-white/80 transition-colors bg-white/[0.03]",children:e},s))})]}),a.map((e,s)=>(0,t.jsx)("div",{className:`flex ${"user"===e.role?"justify-end":"justify-start"}`,children:"user"===e.role?(0,t.jsx)("div",{className:"max-w-[80%] border border-white/15 rounded-2xl rounded-br-sm px-4 py-2.5 text-sm",style:{background:"var(--bg-hover)"},children:e.content}):(0,t.jsx)("div",{className:"max-w-[90%] border border-white/[0.06] rounded-2xl rounded-bl-sm px-4 py-3",style:{background:"var(--bg-panel)"},children:(0,t.jsx)(l,{content:e.content})})},s)),n&&(0,t.jsx)("div",{className:"flex justify-start",children:(0,t.jsx)("div",{className:"border border-white/[0.06] rounded-2xl rounded-bl-sm px-4 py-3",style:{background:"var(--bg-panel)"},children:(0,t.jsxs)("div",{className:"flex items-center gap-2 text-white/55 text-xs font-mono",children:[(0,t.jsx)("span",{className:"w-1.5 h-1.5 bg-yellow-400 rounded-full animate-pulse"}),"Agents working..."]})})}),(0,t.jsx)("div",{ref:x})]}),(0,t.jsx)("div",{className:"p-4 border-t border-white/[0.07]",children:(0,t.jsxs)("form",{onSubmit:function(t){t.preventDefault(),p.trim()&&!n&&(e(p.trim()),m(""))},className:"flex gap-2",children:[(0,t.jsx)("input",{value:p,onChange:e=>m(e.target.value),disabled:n,placeholder:"simulation"===c?"Describe a task for the simulated swarm...":"Give the agents a goal for your repo...",className:"flex-1 bg-white/[0.04] border border-white/15 rounded-xl px-4 py-2.5 text-sm text-white placeholder-white/30 outline-none focus:border-white/30 disabled:opacity-50 transition-colors"}),(0,t.jsx)("button",{type:"submit",disabled:!p.trim()||n,className:"bg-white text-black rounded-xl px-3 py-2.5 hover:bg-[#e0e0e0] disabled:opacity-30 disabled:cursor-not-allowed transition-colors",children:(0,t.jsx)(r,{size:16})})]})})]})}let c=(0,n.default)("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);var p=e.i(63059),m=e.i(68054);let x=(0,n.default)("file-code",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}]]),u=(0,n.default)("share-2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]);function h({status:e}){return(0,t.jsx)("span",{className:`inline-block w-2 h-2 rounded-full shrink-0 ${{pending:"bg-white/20",running:"bg-yellow-400 animate-pulse shadow-[0_0_6px_rgba(250,204,21,0.6)]",completed:"bg-green-400 shadow-[0_0_6px_rgba(74,222,128,0.5)]",failed:"bg-red-400"}[e]}`})}function g({artifact:e,onClick:s}){return(0,t.jsxs)("button",{onClick:s,className:"flex items-center gap-1.5 text-[10px] font-mono bg-[#0d1117] border border-[#30363d] text-[#7dd3fc] px-2 py-1 rounded hover:border-[#58a6ff] hover:bg-[#161b22] transition-colors",children:[(0,t.jsx)(x,{size:10}),e.filename.split("/").pop()]})}function f({artifact:e,onClose:s}){let a=e.content.split("\n");return(0,t.jsx)("div",{className:"fixed inset-0 bg-black/80 z-50 flex items-center justify-center p-6 backdrop-blur-sm",onClick:s,children:(0,t.jsxs)("div",{className:"w-full max-w-3xl max-h-[80vh] flex flex-col bg-[#0d1117] border border-[#30363d] rounded-xl overflow-hidden shadow-2xl",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-[#21262d] shrink-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(x,{size:14,className:"text-[#7dd3fc]"}),(0,t.jsx)("span",{className:"text-sm font-mono text-[#e6edf3]",children:e.filename}),(0,t.jsx)("span",{className:"text-[10px] text-[#555] bg-[#161b22] border border-[#21262d] px-1.5 py-0.5 rounded",children:e.language})]}),(0,t.jsx)("button",{onClick:s,className:"text-[#555] hover:text-white text-lg leading-none",children:"×"})]}),(0,t.jsx)("div",{className:"overflow-auto flex-1 p-4",children:(0,t.jsx)("div",{className:"font-mono text-xs leading-5",children:a.map((e,s)=>(0,t.jsxs)("div",{className:"flex gap-4 hover:bg-[#161b22] px-2 rounded",children:[(0,t.jsx)("span",{className:"text-[#555] w-6 shrink-0 select-none text-right",children:s+1}),(0,t.jsx)("span",{className:"text-[#e6edf3] whitespace-pre",children:e})]},s))})})]})})}function k({task:e,onClose:s}){var a;let n,r,i=(r=(a=e).role.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,""),{name:a.role,description:a.goal,url:`https://agentnetes.vercel.app/agents/${r}`,version:"1.0.0",provider:{organization:"Agentnetes"},capabilities:{streaming:!0,pushNotifications:!1,stateTransitionHistory:!0},authentication:{schemes:["bearer"]},defaultInputModes:["text/plain","application/json"],defaultOutputModes:["text/plain","application/json"],skills:(n=a.role.toLowerCase()).includes("scout")||n.includes("explorer")||n.includes("architect")?[{id:"explore-codebase",name:"Explore Codebase",description:"Scans a repository and documents architecture patterns, interface contracts, and file conventions",tags:["codebase","architecture","typescript","monorepo"],examples:["Explore the provider package structure in vercel/ai","Document interface contracts for LanguageModelV1","Find all test patterns across packages"]},{id:"map-dependencies",name:"Map Dependencies",description:"Traces dependency graphs across a monorepo and identifies shared utilities",tags:["dependencies","monorepo","pnpm"],examples:["Map all workspace dependencies in vercel/ai","Find all packages that depend on @ai-sdk/provider"]}]:n.includes("provider")||n.includes("implement")||n.includes("engineer")?[{id:"implement-provider",name:"Implement Provider",description:"Creates a new AI SDK provider package following existing patterns — provider class, chat model, streaming",tags:["typescript","ai-sdk","provider","streaming"],examples:["Add @ai-sdk/deepseek with streaming and reasoning tokens","Implement a new OpenAI-compatible provider","Add tool-calling support to an existing provider"]},{id:"implement-feature",name:"Implement Feature",description:"Builds a software feature in an existing codebase following discovered conventions",tags:["typescript","implementation","feature"],examples:["Add a /research command to a CLI tool","Implement a new API endpoint following existing patterns"]}]:n.includes("test")||n.includes("verif")||n.includes("qa")?[{id:"write-tests",name:"Write Tests",description:"Writes comprehensive tests following the codebase test conventions — unit, integration, streaming",tags:["vitest","testing","typescript","coverage"],examples:["Write tests for a new provider package","Add streaming tests for a chat model","Write integration tests for a new API endpoint"]},{id:"run-verification",name:"Run Verification",description:"Runs tests, type checks, and linting to verify correctness. Reports failures with context.",tags:["typescript","vitest","tsc","verification"],examples:["Verify TypeScript compilation passes","Run all tests and report failures"]}]:n.includes("package")||n.includes("config")||n.includes("integrat")?[{id:"setup-package",name:"Setup Package",description:"Configures package.json, tsconfig.json, exports, and monorepo wiring for a new package",tags:["monorepo","pnpm","typescript","package"],examples:["Set up a new @ai-sdk/* package from scratch","Configure ESM + CJS dual exports","Wire a new package into pnpm workspace"]}]:n.includes("security")||n.includes("scanner")||n.includes("auth")||n.includes("risk")?[{id:"security-audit",name:"Security Audit",description:"Analyzes code for security vulnerabilities — auth flows, input validation, dependency CVEs",tags:["security","audit","vulnerabilities","owasp"],examples:["Audit authentication flows for session fixation","Scan dependencies for known CVEs","Find XSS vulnerabilities in user input handling"]}]:[{id:"general-task",name:"General Engineering Task",description:"Performs software engineering tasks — exploration, implementation, verification",tags:["typescript","engineering"],examples:["Implement a requested feature following existing patterns"]}]}),o=JSON.stringify(i,null,2).split("\n");return(0,t.jsx)("div",{className:"fixed inset-0 bg-black/80 z-50 flex items-center justify-center p-6 backdrop-blur-sm",onClick:s,children:(0,t.jsxs)("div",{className:"w-full max-w-2xl max-h-[85vh] flex flex-col bg-[#0d1117] border border-[#30363d] rounded-xl overflow-hidden shadow-2xl",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-[#21262d] shrink-0 bg-[#161b22]",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,t.jsx)("span",{className:"text-base",children:e.icon}),(0,t.jsx)("span",{className:"text-sm font-semibold text-white",children:e.role})]}),(0,t.jsx)("span",{className:"text-[10px] font-mono bg-purple-500/15 border border-purple-500/30 text-purple-300 px-2 py-0.5 rounded-full",children:"A2A Agent Card"})]}),(0,t.jsx)("button",{onClick:s,className:"text-[#555] hover:text-white text-lg leading-none",children:"×"})]}),(0,t.jsxs)("div",{className:"px-4 py-2.5 border-b border-[#21262d] bg-purple-500/5 flex items-start gap-2.5 shrink-0",children:[(0,t.jsx)(u,{size:13,className:"text-purple-400 mt-0.5 shrink-0"}),(0,t.jsxs)("p",{className:"text-[11px] text-purple-300/80 leading-relaxed",children:["This agent can be published as an independent A2A service. Other swarms can discover and delegate tasks to it via the A2A protocol.",(0,t.jsxs)("span",{className:"text-purple-400 ml-1 font-mono",children:["POST ",i.url]})]})]}),(0,t.jsxs)("div",{className:"px-4 py-3 border-b border-[#21262d] shrink-0",children:[(0,t.jsx)("p",{className:"text-[10px] text-[#555] uppercase tracking-widest font-mono mb-2",children:"Skills"}),(0,t.jsx)("div",{className:"flex flex-wrap gap-2",children:i.skills.map(e=>(0,t.jsxs)("div",{className:"bg-[#161b22] border border-[#21262d] rounded-lg px-3 py-2",children:[(0,t.jsx)("p",{className:"text-[11px] text-white font-medium",children:e.name}),(0,t.jsx)("p",{className:"text-[10px] text-[#666] mt-0.5",children:e.description}),(0,t.jsx)("div",{className:"flex flex-wrap gap-1 mt-1.5",children:e.tags.map(e=>(0,t.jsx)("span",{className:"text-[9px] font-mono bg-[#0d1117] border border-[#30363d] text-[#7dd3fc] px-1.5 py-0.5 rounded",children:e},e))})]},e.id))})]}),(0,t.jsxs)("div",{className:"flex-1 overflow-auto",children:[(0,t.jsxs)("div",{className:"flex items-center gap-1.5 px-4 py-2 border-b border-[#21262d] sticky top-0 bg-[#0d1117]",children:[(0,t.jsx)(x,{size:11,className:"text-[#555]"}),(0,t.jsx)("span",{className:"text-[10px] text-[#555] font-mono",children:"agent-card.json"}),(0,t.jsx)("span",{className:"ml-auto text-[10px] text-[#555] font-mono",children:"A2A v1.0"})]}),(0,t.jsx)("div",{className:"p-4 font-mono text-xs leading-5",children:o.map((e,s)=>(0,t.jsxs)("div",{className:"flex gap-4 hover:bg-[#161b22] px-2 rounded",children:[(0,t.jsx)("span",{className:"text-[#555] w-5 shrink-0 select-none text-right",children:s+1}),(0,t.jsx)("span",{dangerouslySetInnerHTML:{__html:e.replace(/"([^"]+)":/g,'<span class="text-[#79c0ff]">"$1"</span>:').replace(/: "([^"]*)"(,?)/g,': <span class="text-[#a5d6ff]">"$1"</span>$2').replace(/: (true|false)(,?)/g,': <span class="text-[#ff7b72]">$1</span>$2')},className:"whitespace-pre text-[#e6edf3]"})]},s))})]}),(0,t.jsxs)("div",{className:"px-4 py-3 border-t border-[#21262d] flex items-center justify-between bg-[#161b22] shrink-0",children:[(0,t.jsxs)("span",{className:"text-[10px] text-[#555] font-mono",children:[i.skills.length," skill",i.skills.length>1?"s":""," · streaming: ",String(i.capabilities.streaming)," · auth: ",i.authentication.schemes[0]]}),(0,t.jsx)("button",{onClick:s,className:"text-[10px] font-mono text-[#555] border border-[#333] rounded px-3 py-1 hover:text-white hover:border-[#555] transition-colors",children:"Close"})]})]})})}function b({lines:e}){let a=(0,s.useRef)(null);return((0,s.useEffect)(()=>{a.current?.scrollTo({top:a.current.scrollHeight,behavior:"smooth"})},[e]),0===e.length)?null:(0,t.jsxs)("div",{className:"mt-2 border border-white/[0.06] rounded-lg overflow-hidden",style:{background:"var(--bg-panel)"},children:[(0,t.jsxs)("div",{className:"flex items-center gap-1.5 px-3 py-1.5 border-b border-white/[0.06]",children:[(0,t.jsx)(m.Terminal,{size:10,className:"text-white/30"}),(0,t.jsx)("span",{className:"text-[9px] text-white/30 font-mono uppercase tracking-wider",children:"sandbox"})]}),(0,t.jsx)("div",{ref:a,className:"max-h-28 overflow-y-auto p-3 space-y-0.5",children:e.map((e,s)=>(0,t.jsx)("div",{className:`text-[10px] font-mono leading-4 whitespace-pre-wrap ${e.startsWith("$")?"text-[#7dd3fc]":e.includes("error")||e.includes("FAIL")?"text-red-400":e.includes("✓")||e.includes("passed")?"text-green-400":"text-white/50"}`,children:e},s))})]})}function v({task:e,terminalLines:a,isCollabTarget:n,isCollabSource:r}){let[i,o]=(0,s.useState)(!1),[l,d]=(0,s.useState)(null),[m,x]=(0,s.useState)(!1),u=function(e,t=18){let[a,n]=(0,s.useState)(e),r=(0,s.useRef)(e);return(0,s.useEffect)(()=>{if(e===r.current)return;r.current=e,n("");let s=0,a=setInterval(()=>{s++,n(e.slice(0,s)),s>=e.length&&clearInterval(a)},t);return()=>clearInterval(a)},[e,t]),a}(e.statusText,20),y=n?"border-purple-500/60 shadow-[0_0_12px_rgba(168,85,247,0.25)]":r?"border-purple-400/40":"running"===e.status?"border-yellow-500/40 shadow-[0_0_8px_rgba(234,179,8,0.1)]":"completed"===e.status?"border-green-500/25":"failed"===e.status?"border-red-500/25":"border-white/[0.06]",w="running"===e.status?"bg-yellow-500/[0.04]":"completed"===e.status?"bg-green-500/[0.04]":"failed"===e.status?"bg-red-500/[0.04]":"";return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:`rounded-xl border transition-all duration-500 ${y} ${w} overflow-hidden`,style:{background:w?void 0:"var(--bg-card)"},children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 px-4 py-3 cursor-pointer select-none",onClick:()=>o(e=>!e),children:[(0,t.jsx)("span",{className:"text-base shrink-0",children:e.icon}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-white font-medium text-sm",children:e.role}),(0,t.jsx)(h,{status:e.status}),"completed"===e.status&&(0,t.jsx)("span",{className:"text-[10px] text-green-400 font-mono",children:"✓ done"})]}),(0,t.jsx)("p",{className:"text-[11px] text-white/40 font-mono mt-0.5 truncate",children:u})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2 shrink-0",children:[e.artifacts.length>0&&(0,t.jsxs)("span",{className:"text-[10px] text-white/30 font-mono",children:[e.artifacts.length," file",e.artifacts.length>1?"s":""]}),(0,t.jsx)("button",{onClick:e=>{e.stopPropagation(),x(!0)},title:"View A2A Agent Card",className:"text-[9px] font-mono text-purple-500/60 border border-purple-500/20 rounded px-1.5 py-0.5 hover:text-purple-300 hover:border-purple-400/50 transition-colors",children:"A2A"}),i?(0,t.jsx)(c,{size:12,className:"text-white/30"}):(0,t.jsx)(p.ChevronRight,{size:12,className:"text-white/30"})]})]}),i&&(0,t.jsxs)("div",{className:"px-4 pb-3 border-t border-white/[0.07] pt-3 space-y-3",children:[(0,t.jsx)("p",{className:"text-[11px] text-white/40 italic",children:e.goal}),(0,t.jsx)(b,{lines:a}),e.findings.length>0&&(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsx)("p",{className:"text-[10px] text-white/30 uppercase tracking-wider font-mono",children:"Findings"}),e.findings.map((e,s)=>(0,t.jsxs)("div",{className:"flex gap-2 text-[11px] text-white/65",children:[(0,t.jsx)("span",{className:"text-green-400 shrink-0",children:"✓"}),(0,t.jsx)("span",{children:e})]},s))]}),e.artifacts.length>0&&(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-[10px] text-white/30 uppercase tracking-wider font-mono mb-2",children:"Files"}),(0,t.jsx)("div",{className:"flex flex-wrap gap-1.5",children:e.artifacts.map((e,s)=>(0,t.jsx)(g,{artifact:e,onClick:()=>d(e)},s))})]})]})]}),l&&(0,t.jsx)(f,{artifact:l,onClose:()=>d(null)}),m&&(0,t.jsx)(k,{task:e,onClose:()=>x(!1)})]})}function y({event:e,tasks:s}){let a=e.fromTaskId?s[e.fromTaskId]?.role:"?",n=e.toTaskId?s[e.toTaskId]?.role:"?";return(0,t.jsxs)("div",{className:"flex items-start gap-2 px-3 py-2.5 rounded-xl bg-purple-500/8 border border-purple-500/20 animate-pulse-once",children:[(0,t.jsx)("span",{className:"text-base shrink-0",children:"🔗"}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"text-[11px] text-purple-300 font-medium",children:[a," → ",n]}),(0,t.jsx)("div",{className:"text-[10px] text-purple-400/80 font-mono mt-0.5",children:String(e.data.message??"")})]})]})}function w({tasks:e,rootId:s}){let a=Object.values(e).filter(e=>e.id!==s);if(0===a.length)return null;let n=a.filter(e=>"completed"===e.status).length,r=Math.round(n/a.length*100);return(0,t.jsxs)("div",{className:"px-4 py-2 border-b border-white/[0.07]",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between text-[10px] text-white/30 font-mono mb-1.5",children:[(0,t.jsxs)("span",{children:[n,"/",a.length," agents complete"]}),(0,t.jsxs)("span",{children:[r,"%"]})]}),(0,t.jsx)("div",{className:"h-1 bg-white/[0.06] rounded-full overflow-hidden",children:(0,t.jsx)("div",{className:"h-full bg-gradient-to-r from-yellow-500 to-green-400 rounded-full transition-all duration-700 ease-out",style:{width:`${r}%`}})})]})}function j({tasks:e,rootId:a,events:n}){let r=Object.values(e),i=a?e[a]:null,o=r.filter(e=>e.id!==a),l=n.filter(e=>"collaboration"===e.type),[d,c]=(0,s.useState)(new Set);(0,s.useEffect)(()=>{r.forEach((e,t)=>{setTimeout(()=>c(t=>new Set([...t,e.id])),120*t)})},[r.length]);let p={};for(let e of n)if("terminal"===e.type&&e.taskId){p[e.taskId]||(p[e.taskId]=[]);let t=String(e.data.output??"");p[e.taskId].push(...t.split("\n").filter(Boolean))}let m=new Set(l.map(e=>e.toTaskId).filter(Boolean)),x=new Set(l.map(e=>e.fromTaskId).filter(Boolean));return 0===r.length?(0,t.jsx)("div",{className:"h-full flex items-center justify-center text-center p-8",children:(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-5xl mb-3 opacity-20",children:"⬡"}),(0,t.jsx)("p",{className:"text-white/25 text-sm",children:"Agent activity appears here"})]})}):(0,t.jsxs)("div",{className:"h-full flex flex-col overflow-hidden",children:[(0,t.jsx)(w,{tasks:e,rootId:a}),(0,t.jsxs)("div",{className:"flex-1 overflow-y-auto p-4 space-y-3",children:[i&&d.has(i.id)&&(0,t.jsxs)("div",{className:"transition-all duration-300 animate-slide-in",children:[(0,t.jsx)("div",{className:"text-[10px] text-white/25 uppercase tracking-widest font-mono mb-2",children:"Orchestrator"}),(0,t.jsx)(v,{task:i,terminalLines:p[i.id]??[],isCollabTarget:!1,isCollabSource:!1})]}),o.length>0&&(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"text-[10px] text-white/25 uppercase tracking-widest font-mono mb-2",children:["Agent Team · ",o.length," specialists"]}),(0,t.jsx)("div",{className:"space-y-2",children:o.map(e=>d.has(e.id)?(0,t.jsx)("div",{className:"transition-all duration-300 animate-slide-in",children:(0,t.jsx)(v,{task:e,terminalLines:p[e.id]??[],isCollabTarget:m.has(e.id),isCollabSource:x.has(e.id)})},e.id):null)})]}),l.length>0&&(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-[10px] text-white/25 uppercase tracking-widest font-mono mb-2",children:"Collaborations"}),(0,t.jsx)("div",{className:"space-y-2",children:l.map((s,a)=>(0,t.jsx)(y,{event:s,tasks:e},a))})]})]})]})}let N=[{id:"google/gemini-3.1-pro",label:"Gemini 3.1 Pro",badge:"latest"},{id:"google/gemini-3.1-flash-lite",label:"Gemini 3.1 Flash-Lite",badge:"fast"},{id:"google/gemini-3-pro",label:"Gemini 3 Pro",badge:""},{id:"google/gemini-3-flash",label:"Gemini 3 Flash",badge:""},{id:"google/gemini-2.5-pro",label:"Gemini 2.5 Pro",badge:""},{id:"google/gemini-2.5-flash",label:"Gemini 2.5 Flash",badge:"recommended"},{id:"google/gemini-2.5-flash-lite",label:"Gemini 2.5 Flash-Lite",badge:""},{id:"google/gemini-2.0-flash",label:"Gemini 2.0 Flash",badge:""},{id:"google/gemini-2.0-flash-lite",label:"Gemini 2.0 Flash-Lite",badge:"budget"}];function S({value:e,onChange:s}){return(0,t.jsx)("select",{value:e,onChange:e=>s(e.target.value),className:"border border-white/15 text-sm rounded-lg px-3 py-1.5 outline-none focus:border-white/30 cursor-pointer",style:{background:"var(--bg-hover)",color:"rgb(var(--fg))"},children:N.map(e=>(0,t.jsxs)("option",{value:e.id,children:[e.label,e.badge?` (${e.badge})`:""]},e.id))})}let I=(0,n.default)("panel-right-open",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M15 3v18",key:"14nvp0"}],["path",{d:"m10 15-3-3 3-3",key:"1pgupc"}]]),C=(0,n.default)("panel-right-close",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M15 3v18",key:"14nvp0"}],["path",{d:"m8 9 3 3-3 3",key:"12hl5m"}]]),A=(0,n.default)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);var T=e.i(39616);let M=(0,n.default)("circle-check-big",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]),$=(0,n.default)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);var P=e.i(78917);class R{handlers=[];queue=[];closed=!1;on(e){for(let t of(this.handlers.push(e),this.queue))e(t)}emit(e){for(let t of(this.queue.push(e),this.handlers))t(e)}close(){this.closed=!0}isClosed(){return this.closed}}let E={maxDepth:3,maxWorkers:6,maxTotalTasks:15,maxStepsPerAgent:20,plannerModel:"google/gemini-2.5-pro",workerModel:"google/gemini-2.5-flash",repoUrl:""},_=e=>new Promise(t=>setTimeout(t,e));function L(e){return{parentId:null,status:"pending",statusText:"Waiting to start...",findings:[],artifacts:[],children:[],sandboxId:null,model:"google/gemini-2.5-flash",createdAt:Date.now(),completedAt:null,depth:1,icon:"⚙️",...e}}class D{emitter;config;constructor(e={}){this.emitter=new R,this.config={...E,...e}}onEvent(e){this.emitter.on(e)}async run(e){let t=L({id:"root",parentId:null,role:"Tech Lead",goal:e,depth:0,model:this.config.plannerModel,icon:"🧠",status:"running",statusText:"Spinning up sandbox..."});for(let[e,s,a]of(this.emitter.emit({type:"task-created",taskId:"root",data:{task:t}}),[[400,"Spinning up sandbox..."],[500,"Analyzing goal..."],[300,"Exploring monorepo structure...","$ ls packages/ | wc -l\n47"],[600,"Scanning provider packages...",'$ find packages -name "*-provider.ts" | head -8\npackages/openai/src/openai-provider.ts\npackages/anthropic/src/anthropic-provider.ts\npackages/google/src/google-provider.ts\npackages/mistral/src/mistral-provider.ts'],[700,"Reading interface contracts...",'$ grep -r "implements LanguageModelV1" packages/ --include="*.ts" -l\npackages/openai/src/openai-chat-model.ts\npackages/anthropic/src/anthropic-messages-language-model.ts'],[500,"Understanding test patterns...","$ ls packages/openai/src/__tests__/\nopenai-chat-model.test.ts\nopenai-completion-model.test.ts\nopenai-provider.test.ts"],[400,"Assembling the team..."]]))await _(e),this.emitter.emit({type:"task-updated",taskId:"root",data:{statusText:s}}),a&&(this.emitter.emit({type:"terminal",taskId:"root",data:{output:a}}),await _(200));let s=this.buildWorkerPlan(e);for(let e of s)e.icon=function(e){let t=e.toLowerCase();return t.includes("scout")||t.includes("architect")||t.includes("analysis")||t.includes("explorer")?"🔍":t.includes("lead")||t.includes("planner")||t.includes("tech")?"🧠":t.includes("test")||t.includes("qa")||t.includes("verif")?"🧪":t.includes("package")||t.includes("config")||t.includes("infra")?"📦":t.includes("doc")?"📝":t.includes("front")||t.includes("ui")||t.includes("design")?"🎨":t.includes("security")||t.includes("auth")||t.includes("risk")?"🔐":t.includes("scanner")||t.includes("scan")?"🔎":"⚙️"}(e.role);for(let e of s)this.emitter.emit({type:"task-created",taskId:e.id,data:{task:e}}),await _(280);this.emit("task-completed","root","Team assembled — workers running in parallel"),await Promise.all(s.map((e,t)=>this.runWorker(e,150*t))),await _(500);let a=s.flatMap(e=>e.artifacts);this.emitter.emit({type:"task-updated",taskId:"root",data:{statusText:"Synthesizing results..."}}),await _(600);let n=this.buildSummary(e,s,a);this.emitter.emit({type:"synthesis",taskId:"root",data:{content:n,artifacts:a}}),await _(300),this.emitter.emit({type:"done",data:{content:n,artifacts:a}}),this.emitter.close()}emit(e,t,s){this.emitter.emit({type:e,taskId:t,data:{statusText:s}})}buildWorkerPlan(e){let t=e.toLowerCase();return t.includes("provider")||t.includes("sdk")||t.includes("package")||t.includes("deepseek")?[L({id:"scout",role:"Architecture Scout",goal:"Explore existing provider packages and document interface contracts, file patterns, and test conventions",icon:"🔍"}),L({id:"engineer",role:"Provider Engineer",goal:"Implement the new provider package — provider class, chat model, streaming, reasoning tokens",icon:"⚙️"}),L({id:"tester",role:"Test Engineer",goal:"Write comprehensive tests matching existing monorepo test patterns",icon:"🧪"}),L({id:"packager",role:"Package Engineer",goal:"Set up package.json, tsconfig.json, exports, and wire into the monorepo build system",icon:"📦"})]:t.includes("security")||t.includes("vulnerabilit")||t.includes("audit")?[L({id:"dep-scanner",role:"Dependency Scanner",goal:"Audit all dependencies for known vulnerabilities",icon:"🔎"}),L({id:"auth-analyzer",role:"Auth Flow Analyzer",goal:"Trace authentication flows and identify weaknesses",icon:"🔐"}),L({id:"input-checker",role:"Input Validator",goal:"Check all user input handling for injection attack surfaces",icon:"⚙️"}),L({id:"risk-report",role:"Risk Prioritizer",goal:"Combine all findings into a prioritized security report",icon:"📝"})]:t.includes("research")||t.includes("command")||t.includes("cli")||t.includes("feature")?[L({id:"explorer",role:"Codebase Explorer",goal:"Map the existing command structure and extension patterns",icon:"🔍"}),L({id:"implementer",role:"Feature Engineer",goal:"Implement the new feature following existing patterns",icon:"⚙️"}),L({id:"integrator",role:"Integration Engineer",goal:"Wire the feature into the CLI entry point and config",icon:"📦"}),L({id:"tester",role:"Test Engineer",goal:"Write integration tests covering the new command end-to-end",icon:"🧪"})]:[L({id:"explorer",role:"Codebase Explorer",goal:"Map the repository structure and identify relevant files",icon:"🔍"}),L({id:"implementer",role:"Implementation Engineer",goal:"Implement the requested changes following existing patterns",icon:"⚙️"}),L({id:"verifier",role:"Verification Engineer",goal:"Verify the implementation is correct and consistent",icon:"🧪"})]}async runWorker(e,t){for(let s of(await _(t),this.emitter.emit({type:"task-updated",taskId:e.id,data:{status:"running",statusText:"Starting sandbox..."}}),await _(300),this.stepsForRole(e.role)))await _(s.delay),this.emitter.emit({type:"task-updated",taskId:e.id,data:{statusText:s.text}}),s.cmd&&(this.emitter.emit({type:"terminal",taskId:e.id,data:{output:s.cmd}}),await _(180));"engineer"===e.id&&(await _(600),this.emitter.emit({type:"collaboration",fromTaskId:"tester",toTaskId:"engineer",data:{message:"Type error: doStream() must return AsyncIterable<LanguageModelV1StreamPart>"}}),await _(300),this.emitter.emit({type:"task-updated",taskId:e.id,data:{statusText:"Fixing streaming return type..."}}),this.emitter.emit({type:"terminal",taskId:e.id,data:{output:"$ npx tsc --noEmit\nsrc/deepseek-chat-model.ts:47:5 - error TS2322: Type mismatch on doStream return\n\nFixing..."}}),await _(700),this.emitter.emit({type:"task-updated",taskId:e.id,data:{statusText:"Type check passing ✓"}}),this.emitter.emit({type:"terminal",taskId:e.id,data:{output:"$ npx tsc --noEmit\n✓ No errors found"}}),await _(300));let s=this.artifactsForRole(e.role),a=this.findingsForRole(e.role);for(let t of s)await _(150),this.emitter.emit({type:"artifact",taskId:e.id,data:{artifact:t}});for(let t of a)this.emitter.emit({type:"finding",taskId:e.id,data:{content:t}});await _(200),this.emitter.emit({type:"task-completed",taskId:e.id,data:{statusText:"Done",artifacts:s,findings:a}}),e.status="completed",e.artifacts=s,e.findings=a}stepsForRole(e){let t=e.toLowerCase();return t.includes("scout")||t.includes("explorer")||t.includes("codebase")?[{text:"Scanning packages directory...",delay:400,cmd:"$ ls packages/ | head -12\nai anthropic azure cohere deepseek\ngoogle groq mistral openai perplexity"},{text:"Reading openai provider structure...",delay:700,cmd:'$ find packages/openai/src -name "*.ts" | head -6\npackages/openai/src/index.ts\npackages/openai/src/openai-provider.ts\npackages/openai/src/openai-chat-model.ts\npackages/openai/src/convert-to-openai-messages.ts'},{text:"Extracting interface contracts...",delay:800,cmd:'$ head -30 packages/openai/src/openai-chat-model.ts\nexport class OpenAIChatModel implements LanguageModelV1 {\n readonly specificationVersion = "v1";\n readonly provider: string;\n readonly modelId: string;\n ...'},{text:"Checking test patterns...",delay:600,cmd:'$ head -20 packages/openai/src/__tests__/openai-chat-model.test.ts\nimport { describe, it, expect, vi } from "vitest";\nimport { createOpenAI } from "../openai-provider";\n\nconst server = createTestServer({...})'},{text:"Documenting findings...",delay:500}]:t.includes("provider")||t.includes("feature")||t.includes("implement")?[{text:"Reading Architecture Scout findings...",delay:400},{text:"Creating package directory...",delay:300,cmd:"$ mkdir -p packages/deepseek/src/__tests__"},{text:"Writing deepseek-provider.ts...",delay:900,cmd:'$ cat > packages/deepseek/src/deepseek-provider.ts\nexport function createDeepSeek(options) {\n const baseURL = options.baseURL ?? "https://api.deepseek.com/v1";\n return { chat: (modelId) => new DeepSeekChatModel(modelId, ...) }\n}'},{text:"Implementing chat model...",delay:1100,cmd:"$ cat > packages/deepseek/src/deepseek-chat-model.ts\nexport class DeepSeekChatModel implements LanguageModelV1 {\n async doGenerate(options) { ... }\n async doStream(options) { ... }\n}"},{text:"Adding streaming support...",delay:800,cmd:"$ wc -l packages/deepseek/src/deepseek-chat-model.ts\n 187 packages/deepseek/src/deepseek-chat-model.ts"},{text:"Running type check...",delay:600,cmd:"$ npx tsc --noEmit\n...(checking)"}]:t.includes("test")||t.includes("verif")?[{text:"Studying existing test patterns...",delay:500,cmd:'$ grep -r "createTestServer\\|mockFetch" packages/openai --include="*.ts" -l\npackages/openai/src/__tests__/openai-chat-model.test.ts'},{text:"Writing provider tests...",delay:700,cmd:'$ cat > packages/deepseek/src/__tests__/deepseek-provider.test.ts\ndescribe("createDeepSeek", () => {\n it("creates provider with default URL", () => {...})\n it("passes apiKey to model", () => {...})\n})'},{text:"Writing streaming tests...",delay:800,cmd:'$ cat >> packages/deepseek/src/__tests__/deepseek-chat-model.test.ts\nit("streams text chunks correctly", async () => {\n const chunks = [];\n for await (const chunk of stream) { chunks.push(chunk); }\n expect(chunks[0].type).toBe("text-delta");\n})'},{text:"Running vitest...",delay:900,cmd:"$ npx vitest run packages/deepseek --reporter=verbose\n✓ deepseek-provider.test.ts (3)\n✓ deepseek-chat-model.test.ts (4)\n✗ deepseek-chat-model.test.ts > streaming type (1)\n\nFAIL: expected AsyncIterable<StreamPart>, got ReadableStream"},{text:"Reporting type error to Provider Engineer...",delay:400},{text:"Waiting for fix...",delay:1200},{text:"Re-running vitest...",delay:400,cmd:"$ npx vitest run packages/deepseek --reporter=verbose\n✓ deepseek-provider.test.ts (3)\n✓ deepseek-chat-model.test.ts (5)\n\nTest Files 1 passed\nTests 8 passed\nDuration 1.24s"}]:t.includes("package")||t.includes("config")||t.includes("integrat")?[{text:"Checking workspace config...",delay:400,cmd:'$ cat pnpm-workspace.yaml\npackages:\n - "packages/*"\n - "packages/provider-utils"'},{text:"Writing package.json...",delay:500,cmd:'$ cat > packages/deepseek/package.json\n{\n "name": "@ai-sdk/deepseek",\n "version": "1.0.0",\n "dependencies": {\n "@ai-sdk/provider": "workspace:*"\n }\n}'},{text:"Writing tsconfig.json...",delay:400,cmd:'$ cat > packages/deepseek/tsconfig.json\n{\n "extends": "../../tsconfig.json",\n "compilerOptions": { "outDir": "dist" },\n "include": ["src"]\n}'},{text:"Wiring into monorepo...",delay:500,cmd:'$ cat >> tsconfig.json\n{ "path": "packages/deepseek/tsconfig.json" }'},{text:"Verifying workspace links...",delay:400,cmd:"$ pnpm list @ai-sdk/deepseek\n@ai-sdk/deepseek 1.0.0 packages/deepseek"}]:t.includes("auth")||t.includes("input")||t.includes("risk")||t.includes("dep")?[{text:"Scanning codebase...",delay:500,cmd:'$ find . -name "*.ts" | xargs grep -l "password\\|token\\|secret" | head -8'},{text:"Analyzing patterns...",delay:800},{text:"Running checks...",delay:700,cmd:"$ npx audit-ci --moderate"},{text:"Compiling findings...",delay:500}]:[{text:"Analyzing task...",delay:500},{text:"Working...",delay:1e3},{text:"Finalizing...",delay:600}]}artifactsForRole(e){let t=e.toLowerCase();return t.includes("scout")||t.includes("codebase")?[{filename:"architecture-findings.md",language:"markdown",content:`# Architecture Findings
2
-
3
- ## Provider Pattern
4
- All providers implement \`LanguageModelV1\` from \`@ai-sdk/provider\`.
5
-
6
- ## Standard File Structure
7
- \`\`\`
8
- packages/<provider>/
9
- src/
10
- index.ts — public exports
11
- <name>-provider.ts — factory function
12
- <name>-chat-model.ts — core model class
13
- package.json
14
- tsconfig.json
15
- \`\`\`
16
-
17
- ## Key Interfaces
18
- - \`LanguageModelV1\` — must implement \`doGenerate()\` and \`doStream()\`
19
- - \`LanguageModelV1StreamPart\` — union type for stream chunks
20
- - \`createJsonErrorResponseHandler\` — shared error utility
21
-
22
- ## Test Conventions
23
- - Vitest with \`createTestServer\` mock helper
24
- - One test file per source file
25
- - Snapshot tests for API request shapes`}]:t.includes("provider")||t.includes("feature")||t.includes("implement")?[{filename:"src/deepseek-provider.ts",language:"typescript",content:`import { withoutTrailingSlash } from '@ai-sdk/provider-utils';
26
- import { DeepSeekChatModel } from './deepseek-chat-model';
27
-
28
- export interface DeepSeekProvider {
29
- (modelId: DeepSeekChatModelId): DeepSeekChatModel;
30
- chat(modelId: DeepSeekChatModelId): DeepSeekChatModel;
31
- }
32
-
33
- export interface DeepSeekProviderSettings {
34
- baseURL?: string;
35
- apiKey?: string;
36
- }
37
-
38
- export function createDeepSeek(
39
- options: DeepSeekProviderSettings = {},
40
- ): DeepSeekProvider {
41
- const baseURL = withoutTrailingSlash(
42
- options.baseURL ?? 'https://api.deepseek.com/v1',
43
- );
44
- const apiKey = options.apiKey ?? process.env.DEEPSEEK_API_KEY ?? '';
45
-
46
- const createModel = (modelId: DeepSeekChatModelId) =>
47
- new DeepSeekChatModel(modelId, { baseURL, apiKey });
48
-
49
- const provider = (modelId: DeepSeekChatModelId) => createModel(modelId);
50
- provider.chat = createModel;
51
- return provider as DeepSeekProvider;
52
- }
53
-
54
- export const deepseek = createDeepSeek();
55
-
56
- export type DeepSeekChatModelId =
57
- | 'deepseek-chat'
58
- | 'deepseek-reasoner'
59
- | (string & {});`},{filename:"src/deepseek-chat-model.ts",language:"typescript",content:`import {
60
- LanguageModelV1,
61
- LanguageModelV1StreamPart,
62
- } from '@ai-sdk/provider';
63
- import {
64
- createJsonResponseHandler,
65
- createEventSourceResponseHandler,
66
- postJsonToApi,
67
- } from '@ai-sdk/provider-utils';
68
-
69
- export class DeepSeekChatModel implements LanguageModelV1 {
70
- readonly specificationVersion = 'v1';
71
- readonly provider = 'deepseek';
72
- readonly defaultObjectGenerationMode = 'json' as const;
73
-
74
- constructor(
75
- readonly modelId: string,
76
- private readonly config: { baseURL: string; apiKey: string },
77
- ) {}
78
-
79
- async doGenerate(
80
- options: Parameters<LanguageModelV1['doGenerate']>[0],
81
- ) {
82
- const response = await postJsonToApi({
83
- url: \`\${this.config.baseURL}/chat/completions\`,
84
- headers: { Authorization: \`Bearer \${this.config.apiKey}\` },
85
- body: { model: this.modelId, messages: options.prompt },
86
- successfulResponseHandler: createJsonResponseHandler(),
87
- failedResponseHandler: createJsonErrorResponseHandler(),
88
- abortSignal: options.abortSignal,
89
- });
90
- // ... map response
91
- return { text: response.choices[0].message.content, finishReason: 'stop', usage: { promptTokens: 0, completionTokens: 0 } };
92
- }
93
-
94
- async doStream(
95
- options: Parameters<LanguageModelV1['doStream']>[0],
96
- ): Promise<{ stream: AsyncIterable<LanguageModelV1StreamPart>; rawCall: unknown }> {
97
- const response = await postJsonToApi({
98
- url: \`\${this.config.baseURL}/chat/completions\`,
99
- headers: { Authorization: \`Bearer \${this.config.apiKey}\` },
100
- body: { model: this.modelId, messages: options.prompt, stream: true },
101
- successfulResponseHandler: createEventSourceResponseHandler(),
102
- failedResponseHandler: createJsonErrorResponseHandler(),
103
- abortSignal: options.abortSignal,
104
- });
105
- return { stream: response, rawCall: { rawPrompt: options.prompt, rawSettings: {} } };
106
- }
107
- }`}]:t.includes("test")||t.includes("verif")?[{filename:"src/__tests__/deepseek-chat-model.test.ts",language:"typescript",content:`import { describe, it, expect, vi, beforeEach } from 'vitest';
108
- import { createDeepSeek } from '../deepseek-provider';
109
- import { createTestServer } from '@ai-sdk/provider-utils/test';
110
-
111
- const server = createTestServer({
112
- 'https://api.deepseek.com/v1/chat/completions': {},
113
- });
114
-
115
- describe('DeepSeekChatModel', () => {
116
- it('has correct provider name', () => {
117
- const model = createDeepSeek({ apiKey: 'test' }).chat('deepseek-chat');
118
- expect(model.provider).toBe('deepseek');
119
- });
120
-
121
- it('has correct model id', () => {
122
- const model = createDeepSeek({ apiKey: 'test' }).chat('deepseek-chat');
123
- expect(model.modelId).toBe('deepseek-chat');
124
- });
125
-
126
- it('sends correct Authorization header', async () => {
127
- server.urls['https://api.deepseek.com/v1/chat/completions']
128
- .response = { body: { choices: [{ message: { content: 'hi' } }] } };
129
- const model = createDeepSeek({ apiKey: 'sk-test' }).chat('deepseek-chat');
130
- await model.doGenerate({ prompt: [], mode: { type: 'regular' }, ... });
131
- expect(server.calls[0].requestHeaders['authorization']).toBe('Bearer sk-test');
132
- });
133
-
134
- it('streams text-delta chunks', async () => {
135
- // ... streaming test
136
- const chunks: unknown[] = [];
137
- for await (const chunk of stream) chunks.push(chunk);
138
- expect(chunks[0]).toMatchObject({ type: 'text-delta' });
139
- });
140
-
141
- // 4 more tests...
142
- });
143
-
144
- // 8 tests total — all passing ✓`}]:t.includes("package")||t.includes("integrat")?[{filename:"package.json",language:"json",content:JSON.stringify({name:"@ai-sdk/deepseek",version:"1.0.0",license:"Apache-2.0",sideEffects:!1,main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",exports:{".":{import:"./dist/index.mjs",require:"./dist/index.js",types:"./dist/index.d.ts"}},dependencies:{"@ai-sdk/provider":"workspace:*","@ai-sdk/provider-utils":"workspace:*"},devDependencies:{vitest:"workspace:*",typescript:"workspace:*"}},null,2)}]:[]}findingsForRole(e){let t=e.toLowerCase();return t.includes("scout")||t.includes("codebase")?["47 packages in the monorepo, 12 are provider implementations","All providers implement LanguageModelV1 with doGenerate() + doStream()","OpenAI-compatible APIs share postJsonToApi() + createEventSourceResponseHandler()","Tests use createTestServer() mock with snapshot assertions"]:t.includes("provider")||t.includes("implement")?["DeepSeekProvider factory function implemented","DeepSeekChatModel with doGenerate() and doStream() — 187 lines","Supports deepseek-chat and deepseek-reasoner model IDs","TypeScript compilation: 0 errors"]:t.includes("test")?["8 tests written: provider creation, model config, auth headers, streaming","All 8 passing after streaming type fix","Test duration: 1.24s"]:t.includes("package")||t.includes("integrat")?["package.json with ESM + CJS dual exports configured","tsconfig.json referencing workspace dependencies","Wired into root tsconfig.json references array","pnpm workspace linking verified"]:t.includes("auth")?["3 auth flows analyzed","1 missing token expiry check found","Session fixation risk in OAuth callback"]:t.includes("dep")?["47 dependencies scanned","2 moderate vulnerabilities found","Recommended: upgrade axios to 1.6.8+"]:t.includes("input")?["12 input handlers analyzed","No SQL injection vectors found","2 XSS risks in markdown renderer"]:t.includes("risk")?["4 findings prioritized","High: missing token expiry","Medium: XSS in markdown renderer"]:["Task completed"]}buildSummary(e,t,s){let a=s.map(e=>`- \`${e.filename}\``).join("\n"),n=e.toLowerCase(),r=n.includes("provider")||n.includes("sdk")||n.includes("deepseek"),i=n.includes("security")||n.includes("vulnerabilit");return r?`## ✅ Task Complete
145
-
146
- **Goal:** ${e}
147
-
148
- ### Files Created
149
- ${a}
150
-
151
- ### Results
152
- - ✅ TypeScript: 0 errors
153
- - ✅ Tests: 8/8 passing (1.24s)
154
- - ✅ Package wired into monorepo
155
- - ✅ ESM + CJS dual exports configured
156
-
157
- ### Agent Team (${t.length} agents)
158
- ${t.map(e=>`- **${e.role}**: ${e.findings[0]??"Completed"}`).join("\n")}
159
-
160
- ### Key Decisions
161
- - Followed OpenAI-compatible provider pattern (same base utilities)
162
- - Streaming uses \`createEventSourceResponseHandler\` from provider-utils
163
- - Supports \`deepseek-chat\` and \`deepseek-reasoner\` model IDs`:i?`## ✅ Security Audit Complete
164
-
165
- **Goal:** ${e}
166
-
167
- ### Findings
168
- ${a}
169
-
170
- ### Summary
171
- - 🔴 **High:** Missing token expiry check in session handler
172
- - 🟡 **Medium:** XSS risk in markdown renderer (2 locations)
173
- - 🟡 **Medium:** Outdated axios dependency (CVE-2024-28849)
174
- - 🟢 **Low:** No SQL injection vectors found
175
-
176
- ### Agent Team (${t.length} agents)
177
- ${t.map(e=>`- **${e.role}**: ${e.findings[0]??"Completed"}`).join("\n")}`:`## ✅ Task Complete
178
-
179
- **Goal:** ${e}
180
-
181
- ### Files Created
182
- ${a}
183
-
184
- ### Agent Team (${t.length} agents)
185
- ${t.map(e=>`- **${e.role}**: ${e.findings[0]??"Completed"}`).join("\n")}`}}let z="agentnetes-settings",O={sandboxProvider:"docker",repoUrl:"https://github.com/expressjs/express",plannerModel:"google/gemini-2.5-flash",workerModel:"google/gemini-2.5-flash"};function F({current:e,apiKeySet:a,onClose:n}){let[r,i]=(0,s.useState)(e),o=e=>i(t=>({...t,...e}));return(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 backdrop-blur-sm",style:{background:"rgba(0,0,0,0.7)"},onClick:t=>t.target===t.currentTarget&&n(e),children:(0,t.jsxs)("div",{className:"w-full max-w-md rounded-2xl border border-white/[0.12] overflow-hidden shadow-2xl",style:{background:"var(--bg-card)"},children:[(0,t.jsxs)("div",{className:"px-6 pt-5 pb-4 border-b border-white/[0.07] flex items-center justify-between",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h2",{className:"text-white font-bold text-base",children:"Runtime Settings"}),(0,t.jsx)("p",{className:"text-[11px] text-white/35 font-mono mt-0.5",children:"Saved in your browser"})]}),(0,t.jsx)("button",{onClick:()=>n(e),className:"text-white/30 hover:text-white/60 transition-colors text-xl leading-none",children:"✕"})]}),(0,t.jsxs)("div",{className:"px-6 py-5 space-y-5",children:[(0,t.jsxs)("div",{className:`flex items-start gap-3 rounded-xl px-4 py-3 border ${a?"border-green-500/20 bg-green-500/5":"border-yellow-500/20 bg-yellow-500/5"}`,children:[a?(0,t.jsx)(M,{size:15,className:"text-green-400 mt-0.5 shrink-0"}):(0,t.jsx)($,{size:15,className:"text-yellow-400 mt-0.5 shrink-0"}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("p",{className:"text-[12px] font-mono font-medium",style:{color:a?"rgb(134 239 172)":"rgb(253 224 71)"},children:["GOOGLE_API_KEY ",a?"is set":"not set"]}),!a&&(0,t.jsxs)("div",{className:"mt-1.5 space-y-1.5",children:[(0,t.jsx)("p",{className:"text-[11px] text-white/40",children:"Option 1 — export in your shell, then restart:"}),(0,t.jsx)("div",{className:"rounded-lg px-3 py-2 font-mono text-[11px] text-green-300/80 border border-white/10",style:{background:"var(--bg-subtle)"},children:"export GOOGLE_API_KEY=your_key_here"}),(0,t.jsxs)("p",{className:"text-[11px] text-white/40",children:["Option 2 — add to ",(0,t.jsx)("span",{className:"font-mono text-white/60",children:".env.local"})," and restart:"]}),(0,t.jsx)("div",{className:"rounded-lg px-3 py-2 font-mono text-[11px] text-green-300/80 border border-white/10",style:{background:"var(--bg-subtle)"},children:"GOOGLE_API_KEY=your_key_here"}),(0,t.jsxs)("a",{href:"https://aistudio.google.com/apikey",target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-0.5 text-purple-400/70 hover:text-purple-400 transition-colors text-[11px]",children:["Get a free key at aistudio.google.com ",(0,t.jsx)(P.ExternalLink,{size:10})]})]})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("label",{className:"text-[10px] font-mono text-white/35 uppercase tracking-widest block mb-1.5",children:["Target Repo URL ",(0,t.jsx)("span",{className:"text-red-400/80",children:"*"})]}),(0,t.jsx)("input",{type:"text",value:r.repoUrl,onChange:e=>o({repoUrl:e.target.value}),placeholder:"https://github.com/owner/repo",autoFocus:!0,className:"w-full rounded-lg border border-white/15 px-3 py-2 text-sm font-mono outline-none focus:border-purple-500/50 transition-colors",style:{background:"var(--bg-subtle)",color:"rgb(var(--fg))"}}),(0,t.jsx)("p",{className:"text-[11px] text-white/30 mt-1",children:"Agents clone this into each sandbox. Use a small repo for faster runs."})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-[10px] font-mono text-white/35 uppercase tracking-widest block mb-1.5",children:"Sandbox Provider"}),(0,t.jsxs)("div",{className:"grid grid-cols-2 gap-2",children:[(0,t.jsxs)("button",{onClick:()=>o({sandboxProvider:"docker"}),className:`rounded-lg border px-4 py-3 text-left transition-all ${"docker"===r.sandboxProvider?"border-purple-500/50 bg-purple-500/10":"border-white/10 hover:border-white/20"}`,children:[(0,t.jsx)("div",{className:"text-white text-sm font-mono font-medium",children:"docker"}),(0,t.jsx)("div",{className:"text-white/40 text-xs mt-0.5",children:"Isolated containers · recommended"})]}),(0,t.jsxs)("button",{onClick:()=>o({sandboxProvider:"local"}),className:`rounded-lg border px-4 py-3 text-left transition-all ${"local"===r.sandboxProvider?"border-yellow-500/40 bg-yellow-500/5":"border-white/10 hover:border-white/20"}`,children:[(0,t.jsxs)("div",{className:"flex items-center gap-1.5 text-sm font-mono font-medium text-white/70",children:[(0,t.jsx)($,{size:11,className:"text-yellow-500/70"})," local"]}),(0,t.jsx)("div",{className:"text-white/35 text-xs mt-0.5",children:"No isolation · not recommended"})]})]}),"docker"===r.sandboxProvider&&(0,t.jsxs)("p",{className:"text-[11px] text-white/30 mt-1.5 font-mono",children:["Make sure Docker is running: ",(0,t.jsx)("span",{className:"text-white/50",children:"docker pull node:20-alpine"})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-[10px] font-mono text-white/35 uppercase tracking-widest block mb-2",children:"Models"}),(0,t.jsxs)("div",{className:"space-y-2.5",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("span",{className:"text-xs text-white/35 w-14 shrink-0",children:"Planner"}),(0,t.jsx)(S,{value:r.plannerModel,onChange:e=>o({plannerModel:e})})]}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("span",{className:"text-xs text-white/35 w-14 shrink-0",children:"Worker"}),(0,t.jsx)(S,{value:r.workerModel,onChange:e=>o({workerModel:e})})]})]})]})]}),(0,t.jsxs)("div",{className:"px-6 pb-5 flex justify-end gap-3 border-t border-white/[0.05] pt-4",children:[(0,t.jsx)("button",{onClick:()=>n(e),className:"px-4 py-2 rounded-lg text-sm text-white/40 hover:text-white/65 transition-colors",children:"Cancel"}),(0,t.jsx)("button",{onClick:function(){try{localStorage.setItem(z,JSON.stringify(r))}catch{}n(r)},disabled:!r.repoUrl.trim().startsWith("http"),className:"px-5 py-2 rounded-lg text-sm font-semibold transition-all disabled:opacity-30 disabled:cursor-not-allowed",style:{background:"linear-gradient(135deg, #a855f7, #ec4899)",color:"#fff"},children:"Save"})]})]})})}e.s(["default",0,function(){let[e,n]=(0,s.useState)([]),[r,i]=(0,s.useState)({}),[o,l]=(0,s.useState)(null),[c,p]=(0,s.useState)([]),[m,x]=(0,s.useState)(!1),[u,h]=(0,s.useState)(!0),[g,f]=(0,s.useState)(!1),[k,b]=(0,s.useState)("real"),[v,y]=(0,s.useState)(O),[w,N]=(0,s.useState)(!1),S=(0,s.useRef)(!1);(0,s.useEffect)(()=>{S.current||(S.current=!0,y(function(){try{let e=localStorage.getItem(z);return e?{...O,...JSON.parse(e)}:{...O}}catch{return{...O}}}()),fetch("/api/config").then(e=>e.json()).then(e=>N(!!e.googleApiKeySet)).catch(()=>{}))},[]);let M=(0,s.useCallback)((e,t)=>{if(p(t=>[...t,e]),"task-created"===e.type){let t=e.data.task;i(e=>({...e,[t.id]:t})),0===t.depth&&l(t.id)}"task-updated"===e.type&&e.taskId&&i(t=>{let s=t[e.taskId];return s?{...t,[e.taskId]:{...s,status:e.data.status??s.status,statusText:e.data.statusText??s.statusText}}:t}),"task-completed"===e.type&&e.taskId&&i(t=>{let s=t[e.taskId];return s?{...t,[e.taskId]:{...s,status:"completed",statusText:"Done",completedAt:Date.now(),artifacts:e.data.artifacts??s.artifacts,findings:e.data.findings??s.findings}}:t}),"artifact"===e.type&&e.taskId&&i(t=>{let s=t[e.taskId];if(!s)return t;let a=e.data.artifact;return s.artifacts.some(e=>e.filename===a.filename)?t:{...t,[e.taskId]:{...s,artifacts:[...s.artifacts,a]}}}),"done"===e.type&&(t.content=String(e.data.content??"")),"error"===e.type&&(t.content=`Error: ${String(e.data.message??e.data)}`)},[]),$=(0,s.useCallback)(async e=>{n(t=>[...t,{role:"user",content:e}]),i({}),l(null),p([]),x(!0);let t={content:""};try{if("simulation"===k){let s=new D({});s.onEvent(e=>M(e,t)),await s.run(e)}else{let s=await fetch("/api/chat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:e,sandboxProvider:v.sandboxProvider,repoUrl:v.repoUrl,plannerModel:v.plannerModel,workerModel:v.workerModel})});if(!s.body)throw Error("No response body");let a=s.body.getReader(),n=new TextDecoder;for(;;){let{done:e,value:s}=await a.read();if(e)break;for(let e of n.decode(s,{stream:!0}).split("\n"))if(e.startsWith("data: "))try{M(JSON.parse(e.slice(6)),t)}catch{}}}t.content&&n(e=>[...e,{role:"assistant",content:t.content}])}catch(e){n(t=>[...t,{role:"assistant",content:`Error: ${String(e)}`}])}finally{x(!1)}},[k,v,M]);return(0,t.jsxs)("div",{className:"h-screen overflow-hidden flex flex-col",style:{background:"var(--bg-base)",color:"rgb(var(--fg))"},children:[g&&(0,t.jsx)(F,{current:v,apiKeySet:w,onClose:e=>{y(e),f(!1)}}),(0,t.jsxs)("header",{className:"flex items-center justify-between px-5 py-2.5 border-b border-white/[0.07] shrink-0",style:{background:"var(--bg-base)"},children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsxs)(a.default,{href:"/",className:"flex items-center gap-1.5 text-white/40 hover:text-white/70 transition-colors text-sm",children:[(0,t.jsx)(A,{size:13})," Home"]}),(0,t.jsx)("span",{className:"text-white/20",children:"|"}),(0,t.jsx)("span",{className:"text-base font-bold tracking-tight",children:"Agentnetes"})]}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-0.5 rounded-lg p-0.5 border border-white/[0.08]",style:{background:"var(--bg-subtle)"},children:[(0,t.jsx)("button",{onClick:()=>b("real"),className:`px-3 py-1 rounded-md text-xs font-mono transition-all ${"real"===k?"text-white font-semibold":"text-white/35 hover:text-white/55"}`,style:"real"===k?{background:"linear-gradient(135deg, #a855f7, #ec4899)",color:"#fff"}:{},children:"Real"}),(0,t.jsx)("button",{onClick:()=>b("simulation"),className:`px-3 py-1 rounded-md text-xs font-mono transition-all ${"simulation"===k?"bg-white/10 text-white":"text-white/35 hover:text-white/55"}`,children:"Simulation"})]}),"real"===k&&(0,t.jsxs)("button",{onClick:()=>f(!0),className:"flex items-center gap-1.5 text-[11px] font-mono border rounded-lg px-2.5 py-1 transition-all",style:{background:"var(--bg-subtle)"},title:"Runtime settings",children:[(0,t.jsx)(T.Settings,{size:11,className:"text-white/50"}),(0,t.jsxs)("span",{className:"text-white/45",children:[v.sandboxProvider," · ",v.repoUrl.replace("https://github.com/","")]}),!w&&(0,t.jsx)("span",{className:"text-yellow-400/70 text-[10px] font-mono",children:"· no key"})]}),(0,t.jsx)("button",{onClick:()=>h(e=>!e),className:"text-white/50 hover:text-white/75 transition-colors p-1",title:u?"Hide agent panel":"Show agent panel",children:u?(0,t.jsx)(C,{size:17}):(0,t.jsx)(I,{size:17})})]})]}),"simulation"===k&&(0,t.jsxs)("div",{className:"px-4 py-1.5 border-b border-white/[0.07] flex items-center gap-2 shrink-0",style:{background:"var(--bg-subtle)"},children:[(0,t.jsx)("span",{className:"text-[10px] font-mono text-green-400/80 border border-green-500/20 bg-green-500/5 rounded px-2 py-0.5",children:"simulation"}),(0,t.jsx)("span",{className:"text-xs text-white/35",children:"Pre-scripted scenarios · no API key or Docker required · switch to Real for live execution"})]}),(0,t.jsxs)("div",{className:"flex-1 flex overflow-hidden",children:[(0,t.jsx)("div",{className:`flex flex-col border-r border-white/[0.07] overflow-hidden transition-all duration-300 ${u?"w-1/2":"w-full"}`,children:(0,t.jsx)(d,{messages:e,onSubmit:$,isRunning:m,mode:k})}),u&&(0,t.jsxs)("div",{className:"w-1/2 flex flex-col overflow-hidden",children:[(0,t.jsxs)("div",{className:"px-4 py-2.5 border-b border-white/[0.07] flex items-center justify-between shrink-0",children:[(0,t.jsx)("span",{className:"text-xs text-white/65 font-mono uppercase tracking-wider",children:"Agent Activity"}),Object.keys(r).length>0&&(0,t.jsxs)("span",{className:"text-xs text-white/55 font-mono",children:[Object.values(r).filter(e=>"completed"===e.status).length,"/",Object.keys(r).length," done"]})]}),(0,t.jsx)("div",{className:"flex-1 overflow-hidden",children:(0,t.jsx)(j,{tasks:r,rootId:o,events:c})})]})]})]})}],38999)}]);