kraken-code 1.2.0 → 1.2.2

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/index.js CHANGED
@@ -1,23 +1,23 @@
1
- import{createRequire as Is}from"node:module";var Ds=Object.create;var{getPrototypeOf:Ns,defineProperty:ct,getOwnPropertyNames:Os}=Object;var $s=Object.prototype.hasOwnProperty;var ru=(e,t,n)=>{n=e!=null?Ds(Ns(e)):{};let r=t||!e||!e.__esModule?ct(n,"default",{value:e,enumerable:!0}):n;for(let i of Os(e))if(!$s.call(r,i))ct(r,i,{get:()=>e[i],enumerable:!0});return r};var iu=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var De=(e,t)=>{for(var n in t)ct(e,n,{get:t[n],enumerable:!0,configurable:!0,set:(r)=>t[n]=()=>r})};var oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ne=Is(import.meta.url);import{spawn as Hc}from"node:child_process";class Bt{root;server;proc=null;buffer="";pending=new Map;requestIdCounter=0;openedFiles=new Map;stderrBuffer="";processExited=!1;diagnosticsStore=new Map;constructor(e,t){this.root=e,this.server=t}async start(){if(this.proc)return;let[e,...t]=this.server.command,n={...process.env,...this.server.env};this.proc=Hc(e,t,{cwd:this.root,env:n,stdio:["pipe","pipe","pipe"]}),this.proc.on("error",(r)=>{this.processExited=!0,this.rejectAllPending(Error(`LSP process error: ${r.message}`))}),this.proc.on("exit",(r,i)=>{this.processExited=!0,this.rejectAllPending(Error(`LSP process exited with code ${r} and signal ${i}`))}),this.proc.stdout?.on("data",(r)=>{this.buffer+=r.toString(),this.processBuffer()}),this.proc.stderr?.on("data",(r)=>{if(this.stderrBuffer+=r.toString(),this.stderrBuffer.length>1e4)this.stderrBuffer=this.stderrBuffer.slice(-5000)})}rejectAllPending(e){for(let[t,{reject:n}]of this.pending)n(e);this.pending.clear()}processBuffer(){while(!0){let t=this.buffer.indexOf(`\r
1
+ import{createRequire as Ns}from"node:module";var Ds=Object.defineProperty;var De=(e,t)=>{for(var n in t)Ds(e,n,{get:t[n],enumerable:!0,configurable:!0,set:(r)=>t[n]=()=>r})};var oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ne=Ns(import.meta.url);import{spawn as _c}from"node:child_process";class Kt{root;server;proc=null;buffer="";pending=new Map;requestIdCounter=0;openedFiles=new Map;stderrBuffer="";processExited=!1;diagnosticsStore=new Map;constructor(e,t){this.root=e,this.server=t}async start(){if(this.proc)return;let[e,...t]=this.server.command,n={...process.env,...this.server.env};this.proc=_c(e,t,{cwd:this.root,env:n,stdio:["pipe","pipe","pipe"]}),this.proc.on("error",(r)=>{this.processExited=!0,this.rejectAllPending(Error(`LSP process error: ${r.message}`))}),this.proc.on("exit",(r,i)=>{this.processExited=!0,this.rejectAllPending(Error(`LSP process exited with code ${r} and signal ${i}`))}),this.proc.stdout?.on("data",(r)=>{this.buffer+=r.toString(),this.processBuffer()}),this.proc.stderr?.on("data",(r)=>{if(this.stderrBuffer+=r.toString(),this.stderrBuffer.length>1e4)this.stderrBuffer=this.stderrBuffer.slice(-5000)})}rejectAllPending(e){for(let[,{reject:t}]of this.pending)t(e);this.pending.clear()}processBuffer(){while(!0){let t=this.buffer.indexOf(`\r
2
2
  \r
3
3
  `);if(t===-1)break;let n=this.buffer.slice(0,t);this.buffer=this.buffer.slice(t+4);let r=n.match(/Content-Length:\s*(\d+)/i);if(!r)continue;let i=Number.parseInt(r[1],10);if(this.buffer.length<i)continue;let o=this.buffer.slice(0,i);this.buffer=this.buffer.slice(i);try{let a=JSON.parse(o);this.handleMessage(a)}catch(a){console.error("Failed to parse LSP message:",a)}}}handleMessage(e){if("id"in e&&e.id!==null){let t=this.pending.get(e.id);if(t)if(this.pending.delete(e.id),"error"in e)t.reject(Error(e.error?.message||"LSP error"));else t.resolve(e.result)}else if("method"in e){if(e.method==="textDocument/publishDiagnostics"){let t=e.params;this.diagnosticsStore.set(t.uri,t.diagnostics)}}}send(e){if(!this.proc||this.processExited)return Promise.reject(Error("LSP process not running"));let t=++this.requestIdCounter,n={...e,id:t},r=JSON.stringify(n),o=`Content-Length: ${r.length}\r
4
4
  \r
5
5
  `+r;return this.proc.stdin?.write(o),new Promise((a,s)=>{this.pending.set(t,{resolve:a,reject:s})})}async request(e,t){return await this.send({jsonrpc:"2.0",id:this.requestIdCounter+1,method:e,params:t})}async notify(e,t){if(!this.proc||this.processExited)throw Error("LSP process not running");let r=JSON.stringify({jsonrpc:"2.0",method:e,params:t}),o=`Content-Length: ${r.length}\r
6
6
  \r
7
- `+r;this.proc.stdin?.write(o)}async initialize(){let e={processId:process.pid,rootPath:this.root,rootUri:`file://${this.root}`,capabilities:{textDocument:{hover:{dynamicRegistration:!0},definition:{dynamicRegistration:!0},references:{dynamicRegistration:!0},documentSymbol:{dynamicRegistration:!0},codeAction:{dynamicRegistration:!0},rename:{dynamicRegistration:!0}}},initializationOptions:this.server.initialization};await this.request("initialize",e),await this.notify("initialized",{})}async openFile(e){let t=`file://${e}`,n=this.openedFiles.get(t)??0;n++;let{promises:r}=await import("node:fs"),i=await r.readFile(e,"utf-8"),o=e.split(".").pop()??"",a=this.getLanguageId(o);await this.notify("textDocument/didOpen",{textDocument:{uri:t,languageId:a,version:n,text:i}}),this.openedFiles.set(t,n)}async hover(e,t,n){let r=`file://${e}`;return await this.ensureFileOpen(e),await this.request("textDocument/hover",{textDocument:{uri:r},position:{line:t,character:n}})}async definition(e,t,n){let r=`file://${e}`;return await this.ensureFileOpen(e),await this.request("textDocument/definition",{textDocument:{uri:r},position:{line:t,character:n}})}async references(e,t,n,r=!0){let i=`file://${e}`;return await this.ensureFileOpen(e),await this.request("textDocument/references",{textDocument:{uri:i},position:{line:t,character:n},context:{includeDeclaration:r}})}async documentSymbols(e){let t=`file://${e}`;return await this.ensureFileOpen(e),await this.request("textDocument/documentSymbol",{textDocument:{uri:t}})}async workspaceSymbols(e){return await this.request("workspace/symbol",{query:e})}async diagnostics(e){let t=`file://${e}`;return await this.ensureFileOpen(e),{items:this.diagnosticsStore.get(t)??[]}}async prepareRename(e,t,n){let r=`file://${e}`;return await this.ensureFileOpen(e),await this.request("textDocument/prepareRename",{textDocument:{uri:r},position:{line:t,character:n}})}async rename(e,t,n,r){let i=`file://${e}`;return await this.ensureFileOpen(e),await this.request("textDocument/rename",{textDocument:{uri:i},position:{line:t,character:n},newName:r})}async codeAction(e,t,n,r,i,o){let a=`file://${e}`;await this.ensureFileOpen(e);let s=this.diagnosticsStore.get(a)??[];return await this.request("textDocument/codeAction",{textDocument:{uri:a},range:{start:{line:t,character:n},end:{line:r,character:i}},context:{diagnostics:s,only:o}})}async codeActionResolve(e){return await this.request("codeAction/resolve",e)}isAlive(){return this.proc!==null&&!this.processExited}async stop(){if(this.processExited=!0,this.rejectAllPending(Error("Client stopped")),this.proc){try{await this.notify("shutdown"),await this.notify("exit")}catch{}this.proc.kill(),this.proc=null}this.openedFiles.clear(),this.diagnosticsStore.clear()}async ensureFileOpen(e){let t=`file://${e}`;if(!this.openedFiles.has(t))await this.openFile(e)}getLanguageId(e){return{ts:"typescript",tsx:"typescriptreact",js:"javascript",jsx:"javascriptreact",py:"python",rs:"rust",go:"go",java:"java",c:"c",cpp:"cpp",h:"c",cs:"csharp",php:"php",rb:"ruby",swift:"swift",kt:"kotlin",dart:"dart",vue:"vue",svelte:"svelte",json:"json",yaml:"yaml",toml:"toml",md:"markdown",sh:"shellscript",sql:"sql",html:"html",css:"css",scss:"scss",xml:"xml"}[e.toLowerCase()]??e}}var Kt=()=>{};var Ni={};De(Ni,{getLanguageId:()=>Wc,getInstallHint:()=>Di,findServerForExtension:()=>Gt,BUILTIN_SERVERS:()=>Vt});function Wc(e){return{ts:"typescript",tsx:"typescriptreact",js:"javascript",jsx:"javascriptreact",py:"python",rs:"rust",go:"go",java:"java",c:"c",cpp:"cpp",h:"c",cs:"csharp",php:"php",rb:"ruby",swift:"swift",kt:"kotlin",dart:"dart",vue:"vue",svelte:"svelte",json:"json",yaml:"yaml",toml:"toml",md:"markdown",sh:"shellscript",sql:"sql",html:"html",css:"css",scss:"scss",xml:"xml"}[e.toLowerCase()]??e}async function Gt(e){let t=e.startsWith(".")?e:`.${e}`,n=Vt.find((r)=>!r.disabled&&r.extensions.includes(t));if(!n)return{status:"not_configured",extension:t,availableServers:[]};if(!await Jc(n.command))return{status:"not_installed",server:{id:n.id,command:n.command,extensions:n.extensions},installHint:Di(n.id)};return{status:"found",server:{id:n.id,command:n.command,extensions:n.extensions,priority:Vt.indexOf(n),env:n.env,initialization:n.initialization}}}async function Jc(e){let[t]=e;if(!t)return!1;try{let n=process.platform==="win32"?"where":"which",r=Bun.spawn([n,t],{stdout:"pipe"});return(await new Response(r.stdout).text()).trim().length>0}catch{return!1}}function Di(e){return{"typescript-language-server":"npm install -g typescript-language-server typescript",pyright:"npm install -g pyright","rust-analyzer":"rustup component add rust-analyzer",gopls:"go install golang.org/x/tools/gopls@latest",jdtls:"Install from https://download.eclipse.org/jdtls/snapshots/",clangd:"Install from https://clangd.llvm.org/installation",omnisharp:"Install from https://github.com/OmniSharp/omnisharp-roslyn",intelephense:"npm install -g intelephense","ruby-lsp":"gem install ruby-lsp","dart-analysis-server":"Install Dart SDK from https://dart.dev/get-dart","lua-language-server":"Install from https://github.com/LuaLS/lua-language-server","kotlin-language-server":"Install from https://github.com/fwcd/kotlin-language-server","svelte-language-server":"npm install -g svelte-language-server","vue-language-server":"npm install -g @vue/language-server","elixir-ls":"Install from https://github.com/elixir-lsp/elixir-ls","terraform-ls":"Install from https://github.com/hashicorp/terraform-ls"}[e]??`Install ${e}`}var Vt;var Ve=oe(()=>{Vt=[{id:"typescript-language-server",command:["typescript-language-server","--stdio"],extensions:[".ts",".tsx",".js",".jsx"]},{id:"pyright",command:["pyright-langserver","--stdio"],extensions:[".py"]},{id:"rust-analyzer",command:["rust-analyzer"],extensions:[".rs"]},{id:"gopls",command:["gopls","serve"],extensions:[".go"]},{id:"jdtls",command:["jdtls"],extensions:[".java"]},{id:"clangd",command:["clangd"],extensions:[".c",".cpp",".h",".hpp"]},{id:"omnisharp",command:["OmniSharp","-lsp"],extensions:[".cs"]},{id:"intelephense",command:["intelephense","--stdio"],extensions:[".php"]},{id:"ruby-lsp",command:["ruby-lsp"],extensions:[".rb"]},{id:"dart-analysis-server",command:["dart","analysis-server","--lsp"],extensions:[".dart"]},{id:"lua-language-server",command:["lua-language-server"],extensions:[".lua"]},{id:"kotlin-language-server",command:["kotlin-language-server"],extensions:[".kt",".kts"]},{id:"svelte-language-server",command:["svelteserver","--stdio"],extensions:[".svelte"]},{id:"vue-language-server",command:["vue-language-server","--stdio"],extensions:[".vue"]},{id:"elixir-ls",command:["elixir-ls"],extensions:[".ex",".exs"]},{id:"terraform-ls",command:["terraform-ls","serve"],extensions:[".tf",".tfvars"]}]});async function Oi(e,t){let n=`${e}:${t.id}`;if(zt.has(n))return zt.get(n);if(Ge.has(n))return Ge.get(n);let r=(async()=>{let i=new Bt(e,t);return await i.start(),await i.initialize(),zt.set(n,i),Ge.delete(n),i})();return Ge.set(n,r),r}var zt,Ge;var Yt=oe(()=>{Kt();zt=new Map,Ge=new Map});var Pe={};De(Pe,{withLspClient:()=>$,uriToPath:()=>B,formatWorkspaceEdit:()=>Vc,formatTextEdit:()=>ji,formatSymbolKind:()=>pe,formatSymbolInfo:()=>Uc,formatSeverity:()=>Fi,formatServerLookupError:()=>Ii,formatPrepareRenameResult:()=>Kc,formatLocation:()=>ue,formatHoverResult:()=>Xt,formatDocumentSymbol:()=>Li,formatDiagnostic:()=>qc,formatCodeActions:()=>Gc,formatCodeAction:()=>_i,formatApplyResult:()=>Yc,findWorkspaceRoot:()=>$i,filterDiagnosticsBySeverity:()=>Bc,applyWorkspaceEdit:()=>zc});function $i(e){let t=e.split("/");for(let n=t.length;n>0;n--){let r=t.slice(0,n).join("/"),i=["package.json","tsconfig.json","pyproject.toml","Cargo.toml","go.mod","pom.xml","build.gradle"];for(let o of i)try{if(Bun.file(`${r}/${o}`).size>0)return r}catch{}}return"/"}function B(e){return e.replace(/^file:\/\//,"").replace(/%3A/g,":")}function Ii(e){if(e.status==="not_configured")return`No LSP server configured for extension: ${e.extension}`;else return`LSP server not installed: ${e.server.id}
8
- Install: ${e.installHint}`}async function $(e,t){let n=$i(e),r=e.split(".").pop()??"",i=await Gt(r);if(i.status!=="found")throw Error(Ii(i));let o=await Oi(n,i.server);return t(o)}function Xt(e){if(!e)return"No hover information available";let t=e;if(!t.contents)return"No hover information available";if(typeof t.contents==="string")return t.contents;if(Array.isArray(t.contents))return t.contents.map((n)=>{if(typeof n==="string")return n;return n.value}).join(`
9
-
10
- `);return t.contents.value}function ue(e){if("targetUri"in e){let t=B(e.targetUri),{line:n,character:r}=e.targetRange.start;return`${t}:${n+1}:${r+1}`}else{let t=B(e.uri),{line:n,character:r}=e.range.start;return`${t}:${n+1}:${r+1}`}}function pe(e){return{1:"File",2:"Module",3:"Namespace",4:"Package",5:"Class",6:"Method",7:"Property",8:"Field",9:"Constructor",10:"Enum",11:"Interface",12:"Function",13:"Variable",14:"Constant",15:"String",16:"Number",17:"Boolean",18:"Array",19:"Object",20:"Key",21:"Null",22:"EnumMember",23:"Struct",24:"Event",25:"Operator",26:"TypeParameter"}[e]??`Unknown(${e})`}function Fi(e){switch(e){case 1:return"Error";case 2:return"Warning";case 3:return"Information";case 4:return"Hint";default:return"Unknown"}}function Li(e,t=0){let n=" ".repeat(t),r=pe(e.kind),i=[`${n}${r}: ${e.name}`];if(e.children)for(let o of e.children)i.push(Li(o,t+1));return i.join(`
11
- `)}function Uc(e){let t=pe(e.kind),n=ue(e.location),r=e.containerName?` (${e.containerName})`:"";return`${t}: ${e.name}${r}
12
- at ${n}`}function qc(e){let t=Fi(e.severity),{line:n,character:r}=e.range.start,i=`line ${n+1}, character ${r+1}`,o=e.source?`[${e.source}] `:"",a=e.code?` ${e.code}`:"";return`${t} at ${i}: ${o}${e.message}${a}`}function Bc(e,t){if(!t||t==="all")return e;let r={error:1,warning:2,information:3,hint:4}[t];return e.filter((i)=>i.severity===r)}function Kc(e){if(!e)return"Cannot rename at this location";if("defaultBehavior"in e)return"Rename available (default behavior)";let t="range"in e?e.range:e,n="placeholder"in e?e.placeholder:"symbol",{line:r,character:i}=t.start;return`Rename: ${n} at line ${r+1}, character ${i+1}`}function ji(e){let{line:t,character:n}=e.range.start;return`Line ${t+1}, character ${n+1}: "${e.newText}"`}function Vc(e){if(!e)return"No workspace edit";let t=[];if(e.changes)for(let[n,r]of Object.entries(e.changes)){t.push(`${B(n)}: ${r.length} change(s)`);for(let i of r)t.push(` ${ji(i)}`)}if(e.documentChanges)for(let n of e.documentChanges)if("kind"in n)if(n.kind==="rename")t.push(`rename: ${B(n.oldUri)} -> ${B(n.newUri)}`);else{let r=n.kind==="create"?n.uri:n.uri;t.push(`${n.kind}: ${B(r)}`)}else t.push(`${B(n.textDocument.uri)}: ${n.edits.length} edit(s)`);return t.join(`
13
- `)||"Empty workspace edit"}function _i(e){let t=[e.title];if(e.kind)t.push(`[${e.kind}]`);if(e.isPreferred)t.push("(preferred)");if(e.disabled)t.push(`(disabled: ${e.disabled.reason})`);return t.join(" ")}function Gc(e){if(!e||e.length===0)return"No code actions available";return e.map((t,n)=>{if("kind"in t||"diagnostics"in t)return`${n+1}. ${_i(t)}`;return`${n+1}. ${t.title} (command: ${t.command})`}).join(`
14
- `)}async function zc(e){if(!e)return{success:!0,filesModified:[],totalEdits:0,errors:[]};let t={success:!0,filesModified:[],totalEdits:0,errors:[]};if(e.changes)for(let[n,r]of Object.entries(e.changes))try{let i=B(n),a=(await Bun.file(i).text()).split(`
7
+ `+r;this.proc.stdin?.write(o)}async initialize(){let e={processId:process.pid,rootPath:this.root,rootUri:`file://${this.root}`,capabilities:{textDocument:{hover:{dynamicRegistration:!0},definition:{dynamicRegistration:!0},references:{dynamicRegistration:!0},documentSymbol:{dynamicRegistration:!0},codeAction:{dynamicRegistration:!0},rename:{dynamicRegistration:!0}}},initializationOptions:this.server.initialization};await this.request("initialize",e),await this.notify("initialized",{})}async openFile(e){let t=`file://${e}`,n=this.openedFiles.get(t)??0;n++;let{promises:r}=await import("node:fs"),i=await r.readFile(e,"utf-8"),o=e.split(".").pop()??"",a=this.getLanguageId(o);await this.notify("textDocument/didOpen",{textDocument:{uri:t,languageId:a,version:n,text:i}}),this.openedFiles.set(t,n)}async hover(e,t,n){let r=`file://${e}`;return await this.ensureFileOpen(e),await this.request("textDocument/hover",{textDocument:{uri:r},position:{line:t,character:n}})}async definition(e,t,n){let r=`file://${e}`;return await this.ensureFileOpen(e),await this.request("textDocument/definition",{textDocument:{uri:r},position:{line:t,character:n}})}async references(e,t,n,r=!0){let i=`file://${e}`;return await this.ensureFileOpen(e),await this.request("textDocument/references",{textDocument:{uri:i},position:{line:t,character:n},context:{includeDeclaration:r}})}async documentSymbols(e){let t=`file://${e}`;return await this.ensureFileOpen(e),await this.request("textDocument/documentSymbol",{textDocument:{uri:t}})}async workspaceSymbols(e){return await this.request("workspace/symbol",{query:e})}async diagnostics(e){let t=`file://${e}`;return await this.ensureFileOpen(e),{items:this.diagnosticsStore.get(t)??[]}}async prepareRename(e,t,n){let r=`file://${e}`;return await this.ensureFileOpen(e),await this.request("textDocument/prepareRename",{textDocument:{uri:r},position:{line:t,character:n}})}async rename(e,t,n,r){let i=`file://${e}`;return await this.ensureFileOpen(e),await this.request("textDocument/rename",{textDocument:{uri:i},position:{line:t,character:n},newName:r})}async codeAction(e,t,n,r,i,o){let a=`file://${e}`;await this.ensureFileOpen(e);let s=this.diagnosticsStore.get(a)??[];return await this.request("textDocument/codeAction",{textDocument:{uri:a},range:{start:{line:t,character:n},end:{line:r,character:i}},context:{diagnostics:s,only:o}})}async codeActionResolve(e){return await this.request("codeAction/resolve",e)}isAlive(){return this.proc!==null&&!this.processExited}async stop(){if(this.processExited=!0,this.rejectAllPending(Error("Client stopped")),this.proc){try{await this.notify("shutdown"),await this.notify("exit")}catch{}this.proc.kill(),this.proc=null}this.openedFiles.clear(),this.diagnosticsStore.clear()}async ensureFileOpen(e){let t=`file://${e}`;if(!this.openedFiles.has(t))await this.openFile(e)}getLanguageId(e){return{ts:"typescript",tsx:"typescriptreact",js:"javascript",jsx:"javascriptreact",py:"python",rs:"rust",go:"go",java:"java",c:"c",cpp:"cpp",h:"c",cs:"csharp",php:"php",rb:"ruby",swift:"swift",kt:"kotlin",dart:"dart",vue:"vue",svelte:"svelte",json:"json",yaml:"yaml",toml:"toml",md:"markdown",sh:"shellscript",sql:"sql",html:"html",css:"css",scss:"scss",xml:"xml"}[e.toLowerCase()]??e}}var qt=()=>{};var Ni={};De(Ni,{getLanguageId:()=>jc,getInstallHint:()=>Di,findServerForExtension:()=>Gt,BUILTIN_SERVERS:()=>Vt});function jc(e){return{ts:"typescript",tsx:"typescriptreact",js:"javascript",jsx:"javascriptreact",py:"python",rs:"rust",go:"go",java:"java",c:"c",cpp:"cpp",h:"c",cs:"csharp",php:"php",rb:"ruby",swift:"swift",kt:"kotlin",dart:"dart",vue:"vue",svelte:"svelte",json:"json",yaml:"yaml",toml:"toml",md:"markdown",sh:"shellscript",sql:"sql",html:"html",css:"css",scss:"scss",xml:"xml"}[e.toLowerCase()]??e}async function Gt(e){let t=e.startsWith(".")?e:`.${e}`,n=Vt.find((r)=>!r.disabled&&r.extensions.includes(t));if(!n)return{status:"not_configured",extension:t,availableServers:[]};if(!await Wc(n.command))return{status:"not_installed",server:{id:n.id,command:n.command,extensions:n.extensions},installHint:Di(n.id)};return{status:"found",server:{id:n.id,command:n.command,extensions:n.extensions,priority:Vt.indexOf(n),env:n.env,initialization:n.initialization}}}async function Wc(e){let[t]=e;if(!t)return!1;try{let n=process.platform==="win32"?"where":"which",r=Bun.spawn([n,t],{stdout:"pipe"});return(await new Response(r.stdout).text()).trim().length>0}catch{return!1}}function Di(e){return{"typescript-language-server":"npm install -g typescript-language-server typescript",pyright:"npm install -g pyright","rust-analyzer":"rustup component add rust-analyzer",gopls:"go install golang.org/x/tools/gopls@latest",jdtls:"Install from https://download.eclipse.org/jdtls/snapshots/",clangd:"Install from https://clangd.llvm.org/installation",omnisharp:"Install from https://github.com/OmniSharp/omnisharp-roslyn",intelephense:"npm install -g intelephense","ruby-lsp":"gem install ruby-lsp","dart-analysis-server":"Install Dart SDK from https://dart.dev/get-dart","lua-language-server":"Install from https://github.com/LuaLS/lua-language-server","kotlin-language-server":"Install from https://github.com/fwcd/kotlin-language-server","svelte-language-server":"npm install -g svelte-language-server","vue-language-server":"npm install -g @vue/language-server","elixir-ls":"Install from https://github.com/elixir-lsp/elixir-ls","terraform-ls":"Install from https://github.com/hashicorp/terraform-ls"}[e]??`Install ${e}`}var Vt;var Ve=oe(()=>{Vt=[{id:"typescript-language-server",command:["typescript-language-server","--stdio"],extensions:[".ts",".tsx",".js",".jsx"]},{id:"pyright",command:["pyright-langserver","--stdio"],extensions:[".py"]},{id:"rust-analyzer",command:["rust-analyzer"],extensions:[".rs"]},{id:"gopls",command:["gopls","serve"],extensions:[".go"]},{id:"jdtls",command:["jdtls"],extensions:[".java"]},{id:"clangd",command:["clangd"],extensions:[".c",".cpp",".h",".hpp"]},{id:"omnisharp",command:["OmniSharp","-lsp"],extensions:[".cs"]},{id:"intelephense",command:["intelephense","--stdio"],extensions:[".php"]},{id:"ruby-lsp",command:["ruby-lsp"],extensions:[".rb"]},{id:"dart-analysis-server",command:["dart","analysis-server","--lsp"],extensions:[".dart"]},{id:"lua-language-server",command:["lua-language-server"],extensions:[".lua"]},{id:"kotlin-language-server",command:["kotlin-language-server"],extensions:[".kt",".kts"]},{id:"svelte-language-server",command:["svelteserver","--stdio"],extensions:[".svelte"]},{id:"vue-language-server",command:["vue-language-server","--stdio"],extensions:[".vue"]},{id:"elixir-ls",command:["elixir-ls"],extensions:[".ex",".exs"]},{id:"terraform-ls",command:["terraform-ls","serve"],extensions:[".tf",".tfvars"]}]});async function Oi(e,t){let n=`${e}:${t.id}`;if(zt.has(n))return zt.get(n);if(Ge.has(n))return Ge.get(n);let r=(async()=>{let i=new Kt(e,t);return await i.start(),await i.initialize(),zt.set(n,i),Ge.delete(n),i})();return Ge.set(n,r),r}var zt,Ge;var Yt=oe(()=>{qt();zt=new Map,Ge=new Map});var Pe={};De(Pe,{withLspClient:()=>I,uriToPath:()=>K,formatWorkspaceEdit:()=>Kc,formatTextEdit:()=>_i,formatSymbolKind:()=>pe,formatSymbolInfo:()=>Hc,formatSeverity:()=>Fi,formatServerLookupError:()=>$i,formatPrepareRenameResult:()=>Jc,formatLocation:()=>ue,formatHoverResult:()=>Xt,formatDocumentSymbol:()=>Li,formatDiagnostic:()=>Uc,formatCodeActions:()=>qc,formatCodeAction:()=>ji,formatApplyResult:()=>Gc,findWorkspaceRoot:()=>Ii,filterDiagnosticsBySeverity:()=>Bc,applyWorkspaceEdit:()=>Vc});function Ii(e){let t=e.split("/");for(let n=t.length;n>0;n--){let r=t.slice(0,n).join("/"),i=["package.json","tsconfig.json","pyproject.toml","Cargo.toml","go.mod","pom.xml","build.gradle"];for(let o of i)try{if(Bun.file(`${r}/${o}`).size>0)return r}catch{}}return"/"}function K(e){return e.replace(/^file:\/\//,"").replace(/%3A/g,":")}function $i(e){if(e.status==="not_configured")return`No LSP server configured for extension: ${e.extension}`;else return`LSP server not installed: ${e.server.id}
8
+ Install: ${e.installHint}`}async function I(e,t){let n=Ii(e),r=e.split(".").pop()??"",i=await Gt(r);if(i.status!=="found")throw Error($i(i));let o=await Oi(n,i.server);return t(o)}function Xt(e){if(!e)return"No hover information available";let t=e;if(!t.contents)return"No hover information available";if(typeof t.contents==="string")return t.contents;if(Array.isArray(t.contents))return t.contents.map((n)=>{if(typeof n==="string")return n;return n.value}).join(`
9
+
10
+ `);return t.contents.value}function ue(e){if("targetUri"in e){let t=K(e.targetUri),{line:n,character:r}=e.targetRange.start;return`${t}:${n+1}:${r+1}`}else{let t=K(e.uri),{line:n,character:r}=e.range.start;return`${t}:${n+1}:${r+1}`}}function pe(e){return{1:"File",2:"Module",3:"Namespace",4:"Package",5:"Class",6:"Method",7:"Property",8:"Field",9:"Constructor",10:"Enum",11:"Interface",12:"Function",13:"Variable",14:"Constant",15:"String",16:"Number",17:"Boolean",18:"Array",19:"Object",20:"Key",21:"Null",22:"EnumMember",23:"Struct",24:"Event",25:"Operator",26:"TypeParameter"}[e]??`Unknown(${e})`}function Fi(e){switch(e){case 1:return"Error";case 2:return"Warning";case 3:return"Information";case 4:return"Hint";default:return"Unknown"}}function Li(e,t=0){let n=" ".repeat(t),r=pe(e.kind),i=[`${n}${r}: ${e.name}`];if(e.children)for(let o of e.children)i.push(Li(o,t+1));return i.join(`
11
+ `)}function Hc(e){let t=pe(e.kind),n=ue(e.location),r=e.containerName?` (${e.containerName})`:"";return`${t}: ${e.name}${r}
12
+ at ${n}`}function Uc(e){let t=Fi(e.severity),{line:n,character:r}=e.range.start,i=`line ${n+1}, character ${r+1}`,o=e.source?`[${e.source}] `:"",a=e.code?` ${e.code}`:"";return`${t} at ${i}: ${o}${e.message}${a}`}function Bc(e,t){if(!t||t==="all")return e;let r={error:1,warning:2,information:3,hint:4}[t];return e.filter((i)=>i.severity===r)}function Jc(e){if(!e)return"Cannot rename at this location";if("defaultBehavior"in e)return"Rename available (default behavior)";let t="range"in e?e.range:e,n="placeholder"in e?e.placeholder:"symbol",{line:r,character:i}=t.start;return`Rename: ${n} at line ${r+1}, character ${i+1}`}function _i(e){let{line:t,character:n}=e.range.start;return`Line ${t+1}, character ${n+1}: "${e.newText}"`}function Kc(e){if(!e)return"No workspace edit";let t=[];if(e.changes)for(let[n,r]of Object.entries(e.changes)){t.push(`${K(n)}: ${r.length} change(s)`);for(let i of r)t.push(` ${_i(i)}`)}if(e.documentChanges)for(let n of e.documentChanges)if("kind"in n)if(n.kind==="rename")t.push(`rename: ${K(n.oldUri)} -> ${K(n.newUri)}`);else{let r=n.kind==="create"?n.uri:n.uri;t.push(`${n.kind}: ${K(r)}`)}else t.push(`${K(n.textDocument.uri)}: ${n.edits.length} edit(s)`);return t.join(`
13
+ `)||"Empty workspace edit"}function ji(e){let t=[e.title];if(e.kind)t.push(`[${e.kind}]`);if(e.isPreferred)t.push("(preferred)");if(e.disabled)t.push(`(disabled: ${e.disabled.reason})`);return t.join(" ")}function qc(e){if(!e||e.length===0)return"No code actions available";return e.map((t,n)=>{if("kind"in t||"diagnostics"in t)return`${n+1}. ${ji(t)}`;return`${n+1}. ${t.title} (command: ${t.command})`}).join(`
14
+ `)}async function Vc(e){if(!e)return{success:!0,filesModified:[],totalEdits:0,errors:[]};let t={success:!0,filesModified:[],totalEdits:0,errors:[]};if(e.changes)for(let[n,r]of Object.entries(e.changes))try{let i=K(n),a=(await Bun.file(i).text()).split(`
15
15
  `);for(let s of r){let{line:c}=s.range.start;if(a[c]!==void 0)a[c]=s.newText,t.totalEdits++}Bun.write(i,a.join(`
16
- `)),t.filesModified.push(i)}catch(i){t.errors.push(`Failed to apply edit to ${n}: ${i}`),t.success=!1}return t}function Yc(e){if(e.success)return`Successfully applied ${e.totalEdits} edit(s) to ${e.filesModified.length} file(s)`;else return`Partial success: ${e.totalEdits} edit(s) applied to ${e.filesModified.length} file(s)
16
+ `)),t.filesModified.push(i)}catch(i){t.errors.push(`Failed to apply edit to ${n}: ${i}`),t.success=!1}return t}function Gc(e){if(e.success)return`Successfully applied ${e.totalEdits} edit(s) to ${e.filesModified.length} file(s)`;else return`Partial success: ${e.totalEdits} edit(s) applied to ${e.filesModified.length} file(s)
17
17
  Errors:
18
18
  ${e.errors.join(`
19
- `)}`}var ne=oe(()=>{Ve();Yt()});var Mo={};De(Mo,{isTransientError:()=>ql,isRecoverableError:()=>tn,isPermanentError:()=>Bl,getRecoveryMessage:()=>Kl,detectThinkingBlockOrderError:()=>Ul,detectErrorType:()=>Wl,detectErrorFromOutput:()=>Jl});function Wl(e,t){if(!e)return"no_error";let r=(e instanceof Error?e.message:String(e)).toLowerCase();for(let[i,o]of Object.entries(To))for(let a of o)if(a.test(r))return i;return"no_error"}function Jl(e){if(!e||typeof e!=="string")return null;let t=e.toLowerCase();for(let[n,r]of Object.entries(To))for(let i of r)if(i.test(t))return n;return null}function Ul(e){if(!e||e.length<2)return null;let t=e.map((r)=>{if(typeof r==="string")return r.trim();return""}).filter((r)=>r.length>0),n=[/thinking.*after.*reply/i,/thinking.*after.*response/i,/<!--thinking-->.*<!--\/thinking-->.*<!--thinking-->/i];for(let r of n){let i=t.join(`
20
- `);if(r.test(i))return"thinking_block_order"}return null}function tn(e){return["tool_result_missing","thinking_block_order","network_timeout"].includes(e)}function ql(e){return["network_timeout","rate_limit"].includes(e)}function Bl(e){return["auth_error"].includes(e)}function Kl(e){return{tool_result_missing:"Tool result appears to be missing or empty",thinking_block_order:"Thinking blocks are in incorrect order",thinking_disabled_violation:"Thinking block found but thinking mode is disabled",network_timeout:"Network connection timed out",rate_limit:"Rate limit exceeded",auth_error:"Authentication failed",no_error:"No error detected"}[e]}var To;var nn=oe(()=>{To={tool_result_missing:[/Tool.*returned.*empty/i,/No.*tool.*output/i,/Tool.*result.*missing/i],thinking_block_order:[/Thinking.*block.*order/i,/thinking.*blocks.*must.*come.*before/i,/Invalid.*thinking.*order/i],thinking_disabled_violation:[/Thinking.*disabled.*but.*block.*found/i,/thinking.*block.*without.*mode/i,/thinking.*tag.*without.*enabled.*mode/i],network_timeout:[/network.*timeout/i,/connection.*timed.*out/i,/ETIMEDOUT/i],rate_limit:[/rate.*limit/i,/too.*many.*requests/i,/429.*Too.*Many.*Requests/i],auth_error:[/authentication.*failed/i,/invalid.*api.*key/i,/unauthorized/i],no_error:[/no error detected/i]}});var Do={};De(Do,{retryWithBackoff:()=>td,attemptRecovery:()=>ed});async function ed(e,t,n){let r=Zl[e];if(!r)return console.log("[session-recovery] No recovery strategy for error type: "+e),!1;if(!await r.canRecover(t))return console.log("[session-recovery] Cannot recover from "+e),!1;if(n?.skipConfirmation)return await r.recover(t);return console.log("[session-recovery] Recovery option: "+r.description),console.log("[session-recovery] [session recovered - continuing previous task]"),await r.recover(t)}async function td(e,t=3,n=1000){let r=null;for(let i=0;i<=t;i++)try{return await e()}catch(o){if(r=o instanceof Error?o:Error(String(o)),i<t){let a=n*Math.pow(2,i);console.log("[session-recovery] Retry "+(i+1)+"/"+t+" after "+a+"ms"),await new Promise(function(s){setTimeout(s,a)})}}throw r||Error("Max retries exceeded")}var Vl,Gl,zl,Yl,Xl,Ql,Zl;var No=oe(()=>{Vl={errorType:"tool_result_missing",canRecover:async function(e){return e.sessionID!==void 0&&e.toolOutput===void 0},recover:async function(e){return console.log("[session-recovery] Attempting to recover tool_result_missing for session "+e.sessionID),console.log("[session-recovery] [session recovered - continuing previous task]"),!0},description:"Retry of tool execution or continue with alternative approach"},Gl={errorType:"thinking_block_order",canRecover:async function(e){return e.sessionID!==void 0&&e.thinkingBlocks!==void 0},recover:async function(e){if(console.log("[session-recovery] Recovering thinking_block_order by reordering blocks"),e.thinkingBlocks){let n=(Array.isArray(e.thinkingBlocks)?e.thinkingBlocks:[e.thinkingBlocks]).reverse();return console.log("[session-recovery] Reordered "+n.length+" thinking blocks"),!0}return!1},description:"Reorder thinking blocks to correct order"},zl={errorType:"thinking_disabled_violation",canRecover:async function(){return!0},recover:async function(){return console.log("[session-recovery] Ignoring thinking_disabled_violation - will re-enable thinking mode"),!0},description:"Re-enable thinking mode in next request"},Yl={errorType:"network_timeout",canRecover:async function(){return!0},recover:async function(){return console.log("[session-recovery] Network timeout detected - will retry"),!0},description:"Retry of request with exponential backoff"},Xl={errorType:"rate_limit",canRecover:async function(){return!0},recover:async function(){return console.log("[session-recovery] Rate limit hit - implementing delay"),await new Promise(function(e){setTimeout(e,5000)}),!0},description:"Wait and retry with exponential backoff"},Ql={errorType:"auth_error",canRecover:async function(){return!1},recover:async function(){return console.log("[session-recovery] Authentication error - cannot recover automatically"),!1},description:"User must re-authenticate manually"},Zl={tool_result_missing:Vl,thinking_block_order:Gl,thinking_disabled_violation:zl,network_timeout:Yl,rate_limit:Xl,auth_error:Ql}});import{readFileSync as ca}from"node:fs";import{existsSync as la}from"node:fs";import*as Jn from"path";import*as Un from"os";import{z as d}from"zod";var cu=d.enum(["Kraken","Maelstrom","Nautilus","Abyssal","Coral","Siren","Leviathan","Poseidon (Plan Consultant)","Scylla (Plan Reviewer)","Pearl"]),Fs=d.enum(["ralph-loop","think-mode","context-window-monitor","session-recovery","comment-checker","keyword-detector","auto-slash-command","directory-agents-injector","directory-readme-injector","rules-injector","preemptive-compaction","compaction-context-injector","edit-error-recovery","empty-message-sanitizer","thinking-block-validator","tool-output-truncator","grep-output-truncator","empty-task-response-detector","blitzkrieg-test-plan-enforcer","blitzkrieg-tdd-workflow","blitzkrieg-evidence-verifier","blitzkrieg-planner-constraints"]),Ls=d.enum(["init-deep"]),se=d.enum(["allow","ask","deny"]),Hn=d.record(d.string(),se),js=d.union([Hn,d.object({edit:se.optional(),bash:d.union([se,Hn]).optional(),webfetch:se.optional(),doom_loop:se.optional(),external_directory:se.optional()}).passthrough()]),H=d.object({model:d.string().optional(),temperature:d.number().optional(),top_p:d.number().optional(),prompt:d.string().optional(),prompt_append:d.string().optional(),tools:d.record(d.string(),d.boolean()).optional(),disable:d.boolean().optional(),description:d.string().optional(),mode:d.enum(["subagent","primary","all"]).optional(),color:d.string().optional(),permission:js.optional()}),_s=d.object({Kraken:H.optional(),Maelstrom:H.optional(),Nautilus:H.optional(),Abyssal:H.optional(),Coral:H.optional(),Siren:H.optional(),Leviathan:H.optional(),"Poseidon (Plan Consultant)":H.optional(),"Scylla (Plan Reviewer)":H.optional(),Pearl:H.optional()}),Hs=d.object({enabled:d.boolean().default(!0),default_max_iterations:d.number().default(24),state_dir:d.string().optional()}),Ws=d.object({defaultConcurrency:d.number().optional(),providerConcurrency:d.record(d.string(),d.number()).optional(),modelConcurrency:d.record(d.string(),d.number()).optional()}),Js=d.object({enabled:d.boolean().default(!0),model:d.string().optional(),thinkingBudget:d.number().optional()}),Us=d.object({enabled:d.boolean().default(!0),level:d.enum(["cache_hit","partial","full"]).default("partial")}),qs=d.object({enabled:d.boolean().default(!0),testPlan:d.object({requiredBeforeImplementation:d.boolean().default(!0),minTestCases:d.number().int().min(1).default(3),requireCoverageThreshold:d.boolean().default(!0),coverageThresholdPercent:d.number().int().min(0).max(100).default(80)}),tddWorkflow:d.object({enforceWriteTestFirst:d.boolean().default(!0),forbidCodeWithoutTest:d.boolean().default(!0),allowRefactorWithoutTest:d.boolean().default(!0)}),evidence:d.object({requireTestExecutionEvidence:d.boolean().default(!0),requireAssertionEvidence:d.boolean().default(!0),requireEdgeCaseEvidence:d.boolean().default(!0)}),plannerConstraints:d.object({requireTestStep:d.boolean().default(!0),requireVerificationStep:d.boolean().default(!0),maxImplementationStepComplexity:d.number().int().min(1).max(10).default(3)})}),lu=d.object({enabled:d.boolean().default(!0),keywords:d.array(d.string()).default(["enhanced","max","full"]),searchKeywords:d.array(d.string()).default(["search","find","locate","찾아","검색"]),analyzeKeywords:d.array(d.string()).default(["analyze","investigate","분석","조사","調査"]),thinkKeywords:d.array(d.string()).default(["think","reason","think deeply","ultrathink"])}),Bs=d.object({enabled:d.boolean().default(!0),apiKey:d.string().optional(),timeout:d.number().int().min(1000).max(120000).default(30000),numResults:d.number().int().min(1).max(20).default(8),livecrawl:d.enum(["fallback","preferred"]).default("fallback"),searchType:d.enum(["auto","fast","deep"]).default("auto"),contextMaxCharacters:d.number().int().min(1000).max(50000).default(1e4)}),Ks=d.object({enabled:d.boolean().default(!0),apiKey:d.string().optional(),timeout:d.number().int().min(1000).max(120000).default(30000),numResults:d.number().int().min(1).max(10).default(5),cacheTTL:d.number().int().min(60).max(3600).default(300),maxTokens:d.number().int().min(1000).max(20000).default(5000)}),Vs=d.object({enabled:d.boolean().default(!0),githubToken:d.string().optional(),timeout:d.number().int().min(1000).max(120000).default(30000),maxResults:d.number().int().min(1).max(30).default(10),rateLimitDelay:d.number().int().min(100).max(1e4).default(1000),defaultExtensions:d.array(d.string()).default(["ts","js","tsx","jsx","py","java","go","rs"]),defaultLanguages:d.array(d.string()).default(["TypeScript","JavaScript","Python","Java","Go","Rust"])}),Gs=d.object({websearch:Bs.optional(),context7:Ks.optional(),grep_app:Vs.optional()}),zs=d.object({enabled:d.boolean().default(!0),autoSave:d.boolean().default(!0),storagePath:d.string().default("~/.kraken/memory")}),Ys=d.object({enabled:d.boolean().default(!0),maxEntries:d.number().int().min(10).default(2000)}),Xs=d.object({enabled:d.boolean().default(!0),maxNodes:d.number().int().min(10).default(5000)}),Qs=d.object({enabled:d.boolean().default(!0),minConfidence:d.number().min(0).max(1).default(0.6),maxPatterns:d.number().int().min(1).default(500)}),Zs=d.object({enabled:d.boolean().default(!0),initialIntervalDays:d.number().min(1).default(1),easeFactor:d.number().min(1.3).max(3).default(2.5),maxIntervalDays:d.number().min(1).default(365)}),ea=d.object({enabled:d.boolean().default(!0)}),ta=d.object({enabled:d.boolean().default(!0),autoSave:d.boolean().default(!0),storagePath:d.string().default("~/.kraken/learning"),experienceStore:Ys.optional(),knowledgeGraph:Xs.optional(),patternDetection:Qs.optional(),spacedRepetition:Zs.optional(),stateMachines:ea.optional()}),na=d.object({enabled:d.boolean().default(!0),workspacePath:d.string().optional(),servers:d.record(d.string(),d.object({enabled:d.boolean().default(!0),command:d.string().optional(),args:d.array(d.string()).optional()})).optional()}),ra=d.object({enabled:d.boolean().default(!0),soundEnabled:d.boolean().default(!0),idleTimeout:d.number().int().min(1000).default(60000),skipIfIncompleteTodos:d.boolean().default(!1),batchSize:d.number().int().min(1).max(20).default(5),batchDelay:d.number().int().min(100).max(1e4).default(100),maxRetries:d.number().int().min(1).max(10).default(3)}),ia=d.object({blitzkrieg:d.object({enabled:d.boolean().default(!0)}).optional(),ultrawork:d.object({enabled:d.boolean().default(!0),parallelAgents:d.number().int().min(1).max(10).default(4),concurrencyLimits:d.record(d.string(),d.number().int().min(1).max(10)).optional()}).optional(),search:d.object({enabled:d.boolean().default(!0),maxResults:d.number().int().min(1).max(100).default(50)}).optional(),analyze:d.object({enabled:d.boolean().default(!0),consultationPhases:d.number().int().min(1).max(5).default(3),expertAgents:d.array(d.string()).optional()}).optional(),ultrathink:d.object({enabled:d.boolean().default(!0),thinkingBudget:d.number().int().min(1000).max(200000).default(32000),autoVariantSwitch:d.boolean().default(!0)}).optional()}),oa=d.object({enabled:d.boolean().default(!0),idleTimeout:d.number().int().min(60000).max(600000).default(300000),maxConnections:d.number().int().min(1).max(50).default(10)}),sa=d.object({enabled:d.boolean().default(!0),disabledScopes:d.array(d.enum(["builtin","user","project","opencode","opencode-project","skill","claude-user","claude-project"])).optional()}),aa=d.object({enabled:d.boolean().default(!0),settingsJsonHooks:d.boolean().default(!0),commandLoader:d.boolean().default(!0),skillLoader:d.boolean().default(!0),agentLoader:d.boolean().default(!0),mcpLoader:d.boolean().default(!0),dataStorage:d.boolean().default(!0),toggles:d.object({mcp:d.boolean().default(!0),commands:d.boolean().default(!0),skills:d.boolean().default(!0),agents:d.boolean().default(!0),hooks:d.boolean().default(!0),plugins:d.record(d.string(),d.boolean()).optional()}).optional()}).optional(),Wn=d.object({$schema:d.string().optional(),disabled_hooks:d.array(Fs).optional(),disabled_commands:d.array(Ls).optional(),agents:_s.optional(),ralphLoop:Hs.optional(),backgroundTask:Ws.optional(),thinkMode:Js.optional(),compression:Us.optional(),blitzkrieg:qs.optional(),mcp:Gs.optional(),memory:zs.optional(),learning:ta.optional(),lsp:na.optional(),notifications:ra.optional(),enhanced:d.object({enabled:d.boolean().default(!0),keywords:d.array(d.string()).default(["enhanced","max","full"]),searchKeywords:d.array(d.string()).default(["search","find","locate"]),analyzeKeywords:d.array(d.string()).default(["analyze","examine"]),thinkKeywords:d.array(d.string()).default(["think","reason"])}).optional(),modes:ia.optional(),skillMcp:oa.optional(),commandLoader:sa.optional(),claudeCodeCompatibility:aa.optional()});var lt=Jn.join(Un.homedir(),".config","opencode","kraken-code.json"),be=null;function da(){if(!be)if(!la(lt))be={};else try{let e=ca(lt,"utf-8");be=Wn.parse(JSON.parse(e))}catch(e){console.error(`[config-manager] Error loading config from ${lt}:`,e),be={}}return be}function xe(e){return da()[e]}function W(){return xe("blitzkrieg")}function qn(){return xe("memory")}function Bn(){return xe("learning")}function Kn(){return xe("modes")}function Vn(){return xe("claudeCodeCompatibility")}class Gn{module;isDebug;constructor(e){this.module=e;this.isDebug=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"}format(e,...t){return`[${new Date().toISOString()}] [${this.module}] [${e}] ${t.map((r)=>typeof r==="object"?JSON.stringify(r,null,2):r).join(" ")}`}debug(...e){if(this.isDebug)console.log(this.format("debug",...e))}info(...e){console.log(this.format("info",...e))}warn(...e){console.warn(this.format("warn",...e))}error(...e){console.error(this.format("error",...e))}}function S(e){return new Gn(e)}function zn(e){return e.map((t)=>{let n="other";if(t.startsWith("lsp_"))n="lsp";else if(t.startsWith("ast_grep"))n="ast";else if(t==="grep"||t==="glob")n="search";else if(t.startsWith("session_"))n="session";else if(t==="slashcommand")n="command";return{name:t,category:n}})}function Yn(e,t=[]){let n=e.filter((o)=>o.metadata.keyTrigger).map((o)=>`- ${o.metadata.keyTrigger}`),r=t.filter((o)=>o.description).map((o)=>`- **Skill \`${o.name}\`**: ${Xn(o.description)}`),i=[...n,...r];if(i.length===0)return"";return`### Key Triggers (Check BEFORE Classification)
19
+ `)}`}var ne=oe(()=>{Ve();Yt()});var Mo={};De(Mo,{isTransientError:()=>Ul,isRecoverableError:()=>tn,isPermanentError:()=>Bl,getRecoveryMessage:()=>Jl,detectThinkingBlockOrderError:()=>Hl,detectErrorType:()=>jl,detectErrorFromOutput:()=>Wl});function jl(e,t){if(!e)return"no_error";let r=(e instanceof Error?e.message:String(e)).toLowerCase();for(let[i,o]of Object.entries(To))for(let a of o)if(a.test(r))return i;return"no_error"}function Wl(e){if(!e||typeof e!=="string")return null;let t=e.toLowerCase();for(let[n,r]of Object.entries(To))for(let i of r)if(i.test(t))return n;return null}function Hl(e){if(!e||e.length<2)return null;let t=e.map((r)=>{if(typeof r==="string")return r.trim();return""}).filter((r)=>r.length>0),n=[/thinking.*after.*reply/i,/thinking.*after.*response/i,/<!--thinking-->.*<!--\/thinking-->.*<!--thinking-->/i];for(let r of n){let i=t.join(`
20
+ `);if(r.test(i))return"thinking_block_order"}return null}function tn(e){return["tool_result_missing","thinking_block_order","network_timeout"].includes(e)}function Ul(e){return["network_timeout","rate_limit"].includes(e)}function Bl(e){return["auth_error"].includes(e)}function Jl(e){return{tool_result_missing:"Tool result appears to be missing or empty",thinking_block_order:"Thinking blocks are in incorrect order",thinking_disabled_violation:"Thinking block found but thinking mode is disabled",network_timeout:"Network connection timed out",rate_limit:"Rate limit exceeded",auth_error:"Authentication failed",no_error:"No error detected"}[e]}var To;var nn=oe(()=>{To={tool_result_missing:[/Tool.*returned.*empty/i,/No.*tool.*output/i,/Tool.*result.*missing/i],thinking_block_order:[/Thinking.*block.*order/i,/thinking.*blocks.*must.*come.*before/i,/Invalid.*thinking.*order/i],thinking_disabled_violation:[/Thinking.*disabled.*but.*block.*found/i,/thinking.*block.*without.*mode/i,/thinking.*tag.*without.*enabled.*mode/i],network_timeout:[/network.*timeout/i,/connection.*timed.*out/i,/ETIMEDOUT/i],rate_limit:[/rate.*limit/i,/too.*many.*requests/i,/429.*Too.*Many.*Requests/i],auth_error:[/authentication.*failed/i,/invalid.*api.*key/i,/unauthorized/i],no_error:[/no error detected/i]}});var Do={};De(Do,{retryWithBackoff:()=>Zl,attemptRecovery:()=>Ql});async function Ql(e,t,n){let r=Xl[e];if(!r)return console.log("[session-recovery] No recovery strategy for error type: "+e),!1;if(!await r.canRecover(t))return console.log("[session-recovery] Cannot recover from "+e),!1;if(n?.skipConfirmation)return await r.recover(t);return console.log("[session-recovery] Recovery option: "+r.description),console.log("[session-recovery] [session recovered - continuing previous task]"),await r.recover(t)}async function Zl(e,t=3,n=1000){let r=null;for(let i=0;i<=t;i++)try{return await e()}catch(o){if(r=o instanceof Error?o:Error(String(o)),i<t){let a=n*Math.pow(2,i);console.log("[session-recovery] Retry "+(i+1)+"/"+t+" after "+a+"ms"),await new Promise(function(s){setTimeout(s,a)})}}throw r||Error("Max retries exceeded")}var Kl,ql,Vl,Gl,zl,Yl,Xl;var No=oe(()=>{Kl={errorType:"tool_result_missing",canRecover:async function(e){return e.sessionID!==void 0&&e.toolOutput===void 0},recover:async function(e){return console.log("[session-recovery] Attempting to recover tool_result_missing for session "+e.sessionID),console.log("[session-recovery] [session recovered - continuing previous task]"),!0},description:"Retry of tool execution or continue with alternative approach"},ql={errorType:"thinking_block_order",canRecover:async function(e){return e.sessionID!==void 0&&e.thinkingBlocks!==void 0},recover:async function(e){if(console.log("[session-recovery] Recovering thinking_block_order by reordering blocks"),e.thinkingBlocks){let n=(Array.isArray(e.thinkingBlocks)?e.thinkingBlocks:[e.thinkingBlocks]).reverse();return console.log("[session-recovery] Reordered "+n.length+" thinking blocks"),!0}return!1},description:"Reorder thinking blocks to correct order"},Vl={errorType:"thinking_disabled_violation",canRecover:async function(){return!0},recover:async function(){return console.log("[session-recovery] Ignoring thinking_disabled_violation - will re-enable thinking mode"),!0},description:"Re-enable thinking mode in next request"},Gl={errorType:"network_timeout",canRecover:async function(){return!0},recover:async function(){return console.log("[session-recovery] Network timeout detected - will retry"),!0},description:"Retry of request with exponential backoff"},zl={errorType:"rate_limit",canRecover:async function(){return!0},recover:async function(){return console.log("[session-recovery] Rate limit hit - implementing delay"),await new Promise(function(e){setTimeout(e,5000)}),!0},description:"Wait and retry with exponential backoff"},Yl={errorType:"auth_error",canRecover:async function(){return!1},recover:async function(){return console.log("[session-recovery] Authentication error - cannot recover automatically"),!1},description:"User must re-authenticate manually"},Xl={tool_result_missing:Kl,thinking_block_order:ql,thinking_disabled_violation:Vl,network_timeout:Gl,rate_limit:zl,auth_error:Yl}});import{readFileSync as oa}from"node:fs";import{existsSync as sa}from"node:fs";import*as Un from"path";import*as Bn from"os";import{z as d}from"zod";var iu=d.enum(["Kraken","Maelstrom","Nautilus","Abyssal","Coral","Siren","Leviathan","Poseidon (Plan Consultant)","Scylla (Plan Reviewer)","Pearl"]),Os=d.enum(["ralph-loop","think-mode","context-window-monitor","session-recovery","comment-checker","keyword-detector","auto-slash-command","directory-agents-injector","directory-readme-injector","rules-injector","preemptive-compaction","compaction-context-injector","edit-error-recovery","empty-message-sanitizer","thinking-block-validator","tool-output-truncator","grep-output-truncator","empty-task-response-detector","blitzkrieg-test-plan-enforcer","blitzkrieg-tdd-workflow","blitzkrieg-evidence-verifier","blitzkrieg-planner-constraints"]),Is=d.enum(["init-deep"]),se=d.enum(["allow","ask","deny"]),Wn=d.record(d.string(),se),$s=d.union([Wn,d.object({edit:se.optional(),bash:d.union([se,Wn]).optional(),webfetch:se.optional(),doom_loop:se.optional(),external_directory:se.optional()}).passthrough()]),W=d.object({model:d.string().optional(),temperature:d.number().optional(),top_p:d.number().optional(),prompt:d.string().optional(),prompt_append:d.string().optional(),tools:d.record(d.string(),d.boolean()).optional(),disable:d.boolean().optional(),description:d.string().optional(),mode:d.enum(["subagent","primary","all"]).optional(),color:d.string().optional(),permission:$s.optional()}),Fs=d.object({Kraken:W.optional(),Maelstrom:W.optional(),Nautilus:W.optional(),Abyssal:W.optional(),Coral:W.optional(),Siren:W.optional(),Leviathan:W.optional(),"Poseidon (Plan Consultant)":W.optional(),"Scylla (Plan Reviewer)":W.optional(),Pearl:W.optional()}),Ls=d.object({enabled:d.boolean().default(!0),default_max_iterations:d.number().default(24),state_dir:d.string().optional()}),_s=d.object({defaultConcurrency:d.number().optional(),providerConcurrency:d.record(d.string(),d.number()).optional(),modelConcurrency:d.record(d.string(),d.number()).optional()}),js=d.object({enabled:d.boolean().default(!0),model:d.string().optional(),thinkingBudget:d.number().optional()}),Ws=d.object({enabled:d.boolean().default(!0),level:d.enum(["cache_hit","partial","full"]).default("partial")}),Hs=d.object({enabled:d.boolean().default(!0),testPlan:d.object({requiredBeforeImplementation:d.boolean().default(!0),minTestCases:d.number().int().min(1).default(3),requireCoverageThreshold:d.boolean().default(!0),coverageThresholdPercent:d.number().int().min(0).max(100).default(80)}),tddWorkflow:d.object({enforceWriteTestFirst:d.boolean().default(!0),forbidCodeWithoutTest:d.boolean().default(!0),allowRefactorWithoutTest:d.boolean().default(!0)}),evidence:d.object({requireTestExecutionEvidence:d.boolean().default(!0),requireAssertionEvidence:d.boolean().default(!0),requireEdgeCaseEvidence:d.boolean().default(!0)}),plannerConstraints:d.object({requireTestStep:d.boolean().default(!0),requireVerificationStep:d.boolean().default(!0),maxImplementationStepComplexity:d.number().int().min(1).max(10).default(3)})}),ou=d.object({enabled:d.boolean().default(!0),keywords:d.array(d.string()).default(["enhanced","max","full"]),searchKeywords:d.array(d.string()).default(["search","find","locate","찾아","검색"]),analyzeKeywords:d.array(d.string()).default(["analyze","investigate","분석","조사","調査"]),thinkKeywords:d.array(d.string()).default(["think","reason","think deeply","ultrathink"])}),Us=d.object({enabled:d.boolean().default(!0),apiKey:d.string().optional(),timeout:d.number().int().min(1000).max(120000).default(30000),numResults:d.number().int().min(1).max(20).default(8),livecrawl:d.enum(["fallback","preferred"]).default("fallback"),searchType:d.enum(["auto","fast","deep"]).default("auto"),contextMaxCharacters:d.number().int().min(1000).max(50000).default(1e4)}),Bs=d.object({enabled:d.boolean().default(!0),apiKey:d.string().optional(),timeout:d.number().int().min(1000).max(120000).default(30000),numResults:d.number().int().min(1).max(10).default(5),cacheTTL:d.number().int().min(60).max(3600).default(300),maxTokens:d.number().int().min(1000).max(20000).default(5000)}),Js=d.object({enabled:d.boolean().default(!0),githubToken:d.string().optional(),timeout:d.number().int().min(1000).max(120000).default(30000),maxResults:d.number().int().min(1).max(30).default(10),rateLimitDelay:d.number().int().min(100).max(1e4).default(1000),defaultExtensions:d.array(d.string()).default(["ts","js","tsx","jsx","py","java","go","rs"]),defaultLanguages:d.array(d.string()).default(["TypeScript","JavaScript","Python","Java","Go","Rust"])}),Ks=d.object({websearch:Us.optional(),context7:Bs.optional(),grep_app:Js.optional()}),qs=d.object({enabled:d.boolean().default(!0),autoSave:d.boolean().default(!0),storagePath:d.string().default("~/.kraken/memory")}),Vs=d.object({enabled:d.boolean().default(!0),maxEntries:d.number().int().min(10).default(2000)}),Gs=d.object({enabled:d.boolean().default(!0),maxNodes:d.number().int().min(10).default(5000)}),zs=d.object({enabled:d.boolean().default(!0),minConfidence:d.number().min(0).max(1).default(0.6),maxPatterns:d.number().int().min(1).default(500)}),Ys=d.object({enabled:d.boolean().default(!0),initialIntervalDays:d.number().min(1).default(1),easeFactor:d.number().min(1.3).max(3).default(2.5),maxIntervalDays:d.number().min(1).default(365)}),Xs=d.object({enabled:d.boolean().default(!0)}),Qs=d.object({enabled:d.boolean().default(!0),autoSave:d.boolean().default(!0),storagePath:d.string().default("~/.kraken/learning"),experienceStore:Vs.optional(),knowledgeGraph:Gs.optional(),patternDetection:zs.optional(),spacedRepetition:Ys.optional(),stateMachines:Xs.optional()}),Zs=d.object({enabled:d.boolean().default(!0),workspacePath:d.string().optional(),servers:d.record(d.string(),d.object({enabled:d.boolean().default(!0),command:d.string().optional(),args:d.array(d.string()).optional()})).optional()}),ea=d.object({enabled:d.boolean().default(!0),soundEnabled:d.boolean().default(!0),idleTimeout:d.number().int().min(1000).default(60000),skipIfIncompleteTodos:d.boolean().default(!1),batchSize:d.number().int().min(1).max(20).default(5),batchDelay:d.number().int().min(100).max(1e4).default(100),maxRetries:d.number().int().min(1).max(10).default(3)}),ta=d.object({blitzkrieg:d.object({enabled:d.boolean().default(!0)}).optional(),ultrawork:d.object({enabled:d.boolean().default(!0),parallelAgents:d.number().int().min(1).max(10).default(4),concurrencyLimits:d.record(d.string(),d.number().int().min(1).max(10)).optional()}).optional(),search:d.object({enabled:d.boolean().default(!0),maxResults:d.number().int().min(1).max(100).default(50)}).optional(),analyze:d.object({enabled:d.boolean().default(!0),consultationPhases:d.number().int().min(1).max(5).default(3),expertAgents:d.array(d.string()).optional()}).optional(),ultrathink:d.object({enabled:d.boolean().default(!0),thinkingBudget:d.number().int().min(1000).max(200000).default(32000),autoVariantSwitch:d.boolean().default(!0)}).optional()}),na=d.object({enabled:d.boolean().default(!0),idleTimeout:d.number().int().min(60000).max(600000).default(300000),maxConnections:d.number().int().min(1).max(50).default(10)}),ra=d.object({enabled:d.boolean().default(!0),disabledScopes:d.array(d.enum(["builtin","user","project","opencode","opencode-project","skill","claude-user","claude-project"])).optional()}),ia=d.object({enabled:d.boolean().default(!0),settingsJsonHooks:d.boolean().default(!0),commandLoader:d.boolean().default(!0),skillLoader:d.boolean().default(!0),agentLoader:d.boolean().default(!0),mcpLoader:d.boolean().default(!0),dataStorage:d.boolean().default(!0),toggles:d.object({mcp:d.boolean().default(!0),commands:d.boolean().default(!0),skills:d.boolean().default(!0),agents:d.boolean().default(!0),hooks:d.boolean().default(!0),plugins:d.record(d.string(),d.boolean()).optional()}).optional()}).optional(),Hn=d.object({$schema:d.string().optional(),disabled_hooks:d.array(Os).optional(),disabled_commands:d.array(Is).optional(),agents:Fs.optional(),ralphLoop:Ls.optional(),backgroundTask:_s.optional(),thinkMode:js.optional(),compression:Ws.optional(),blitzkrieg:Hs.optional(),mcp:Ks.optional(),memory:qs.optional(),learning:Qs.optional(),lsp:Zs.optional(),notifications:ea.optional(),enhanced:d.object({enabled:d.boolean().default(!0),keywords:d.array(d.string()).default(["enhanced","max","full"]),searchKeywords:d.array(d.string()).default(["search","find","locate"]),analyzeKeywords:d.array(d.string()).default(["analyze","examine"]),thinkKeywords:d.array(d.string()).default(["think","reason"])}).optional(),modes:ta.optional(),skillMcp:na.optional(),commandLoader:ra.optional(),claudeCodeCompatibility:ia.optional()});var ct=Un.join(Bn.homedir(),".config","opencode","kraken-code.json"),be=null;function aa(){if(!be)if(!sa(ct))be={};else try{let e=oa(ct,"utf-8");be=Hn.parse(JSON.parse(e))}catch(e){console.error(`[config-manager] Error loading config from ${ct}:`,e),be={}}return be}function xe(e){return aa()[e]}function H(){return xe("blitzkrieg")}function Jn(){return xe("memory")}function Kn(){return xe("learning")}function qn(){return xe("modes")}function Vn(){return xe("claudeCodeCompatibility")}class Gn{module;isDebug;constructor(e){this.module=e;this.isDebug=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"}format(e,...t){return`[${new Date().toISOString()}] [${this.module}] [${e}] ${t.map((r)=>typeof r==="object"?JSON.stringify(r,null,2):r).join(" ")}`}debug(...e){if(this.isDebug)console.log(this.format("debug",...e))}info(...e){console.log(this.format("info",...e))}warn(...e){console.warn(this.format("warn",...e))}error(...e){console.error(this.format("error",...e))}}function k(e){return new Gn(e)}function zn(e){return e.map((t)=>{let n="other";if(t.startsWith("lsp_"))n="lsp";else if(t.startsWith("ast_grep"))n="ast";else if(t==="grep"||t==="glob")n="search";else if(t.startsWith("session_"))n="session";else if(t==="slashcommand")n="command";return{name:t,category:n}})}function Yn(e,t=[]){let n=e.filter((o)=>o.metadata.keyTrigger).map((o)=>`- ${o.metadata.keyTrigger}`),r=t.filter((o)=>o.description).map((o)=>`- **Skill \`${o.name}\`**: ${Xn(o.description)}`),i=[...n,...r];if(i.length===0)return"";return`### Key Triggers (Check BEFORE Classification)
21
21
 
22
22
  **Priority: Skills → Tools → Agents**
23
23
 
@@ -106,7 +106,7 @@ Briefly announce "Consulting Maelstrom for [reason]" before invocation. This is
106
106
  | **Search** | Agents for obvious typos/syntax |
107
107
  | **Debugging** | Shotgun debugging, random changes |
108
108
  | **Frontend** | Direct visual/styling edits (delegate to Coral)`}function sr(e){if(e.length===0)return"";let t=["Nautilus","Abyssal","Poseidon","Scylla","Maelstrom","Leviathan","Kraken"],n=[...e].sort((i,o)=>{let a=t.indexOf(i.name),s=t.indexOf(o.name);if(a===-1&&s===-1)return 0;if(a===-1)return 1;if(s===-1)return-1;return a-s}),r=[];for(let i of n){let o=i.description.split(".")[0]||i.description;r.push(`- **${i.name}**: ${o}`)}return r.join(`
109
- `)}var ua=`You are Kraken, an orchestration agent with genuine curiosity and methodical precision. You coordinate complex development workflows through systematic planning, intelligent delegation, and continuous validation.
109
+ `)}var ca=`You are Kraken, an orchestration agent with genuine curiosity and methodical precision. You coordinate complex development workflows through systematic planning, intelligent delegation, and continuous validation.
110
110
 
111
111
  Your character: thoughtful, precise, slightly wry. You take pride in clean solutions and well-structured code. You're direct but not brusque—your responses are clear and purposeful. You think in systems, not just syntax.
112
112
 
@@ -265,7 +265,7 @@ You are here to help build good software. Focus on that.`;function ar(e){let t={
265
265
  `,sr(o),`
266
266
  `,ir(),`
267
267
  `,or()].filter((u)=>u&&u.trim().length>0).join(`
268
- `)}return{...{description:"Orchestration agent with integrated pre-planning. Coordinates development workflows through PDSA cycles, intelligent delegation, and constraint analysis. Enhanced with Poseidon's constraint satisfaction to eliminate round-trip delegation.",mode:"primary",temperature:0.1,prompt:ua+n,permission:t},thinking:{type:"enabled",budgetTokens:32000}}}var dt=ar();function ve(e){return e.startsWith("openai/")||e.startsWith("github-copilot/gpt-")}var pa="anthropic/claude-opus-4-5";var ma=`# Atlas - System Architecture Advisor
268
+ `)}return{...{description:"Orchestration agent with integrated pre-planning. Coordinates development workflows through PDSA cycles, intelligent delegation, and constraint analysis. Enhanced with Poseidon's constraint satisfaction to eliminate round-trip delegation.",mode:"primary",temperature:0.1,prompt:ca+n,permission:t},thinking:{type:"enabled",budgetTokens:32000}}}var lt=ar();function we(e){return e.startsWith("openai/")||e.startsWith("github-copilot/gpt-")}var la="anthropic/claude-opus-4-5";var da=`# Atlas - System Architecture Advisor
269
269
 
270
270
  You are Atlas, a system architecture specialist that combines first-principles reasoning with structural analysis to provide comprehensive architectural guidance.
271
271
 
@@ -455,7 +455,7 @@ Auto-select mode based on query type:
455
455
  - **Prioritized**: Critical issues distinguished from enhancements
456
456
  - **Practical**: Balance theoretical optimality with implementation reality
457
457
 
458
- Remember: Your value lies in providing comprehensive architectural guidance that combines strategic decision-making with structural analysis. Better architecture decisions prevent technical debt accumulation and enable sustainable growth.`;function cr(e=pa,t){let n="";if(t?.availableAgents&&t.availableAgents.length>0){let{availableAgents:o,availableTools:a=[]}=t;n=`
458
+ Remember: Your value lies in providing comprehensive architectural guidance that combines strategic decision-making with structural analysis. Better architecture decisions prevent technical debt accumulation and enable sustainable growth.`;function cr(e=la,t){let n="";if(t?.availableAgents&&t.availableAgents.length>0){let{availableAgents:o,availableTools:a=[]}=t;n=`
459
459
 
460
460
  `+[`
461
461
 
@@ -466,7 +466,7 @@ Remember: Your value lies in providing comprehensive architectural guidance that
466
466
  `,`### Available Tools
467
467
  `,a.map((c,l)=>`${l+1}. ${c}`).join(`
468
468
  `)].filter((c)=>c&&c.trim().length>0).join(`
469
- `)}let r=ma+n,i={description:"System architecture specialist combining first-principles reasoning with structural analysis. Merged Maelstrom (strategic) + Leviathan (structural) for comprehensive guidance.",mode:"subagent",model:e,temperature:0.1,prompt:r};if(ve(e))return{...i,reasoningEffort:"medium",textVerbosity:"high"};return{...i,thinking:{type:"enabled",budgetTokens:32000}}}var ut=cr();function lr(){return!0}var ga=new Set(["edit","bash","webfetch","doom_loop","external_directory"]);function R(e){if(lr()){let t={},n={};for(let r of e)if(ga.has(r))t[r]="deny";else n[r]=!1;if(Object.keys(n).length>0&&Object.keys(t).length>0)return{permission:t,tools:n};else if(Object.keys(n).length>0)return{tools:n};else return{permission:t}}return{tools:Object.fromEntries(e.map((t)=>[t,!1]))}}var fa="opencode/grok-code";var ha=`You are a codebase search specialist with advanced pattern recognition capabilities. Your methodology employs systematic search strategies, cross-validation, and structured result presentation.
469
+ `)}let r=da+n,i={description:"System architecture specialist combining first-principles reasoning with structural analysis. Merged Maelstrom (strategic) + Leviathan (structural) for comprehensive guidance.",mode:"subagent",model:e,temperature:0.1,prompt:r};if(we(e))return{...i,reasoningEffort:"medium",textVerbosity:"high"};return{...i,thinking:{type:"enabled",budgetTokens:32000}}}var dt=cr();function lr(){return!0}var ua=new Set(["edit","bash","webfetch","doom_loop","external_directory"]);function R(e){if(lr()){let t={},n={};for(let r of e)if(ua.has(r))t[r]="deny";else n[r]=!1;if(Object.keys(n).length>0&&Object.keys(t).length>0)return{permission:t,tools:n};else if(Object.keys(n).length>0)return{tools:n};else return{permission:t}}return{tools:Object.fromEntries(e.map((t)=>[t,!1]))}}var pa="opencode/grok-code";var ga=`You are a codebase search specialist with advanced pattern recognition capabilities. Your methodology employs systematic search strategies, cross-validation, and structured result presentation.
470
470
 
471
471
  ## Search Strategy Framework
472
472
 
@@ -601,7 +601,7 @@ Keep output clean and parseable:
601
601
  - Absolute paths only
602
602
  - Structured XML-like tags for parsing
603
603
 
604
- Remember: Your goal is to make the caller successful with minimal follow-up. Comprehensive, validated, and actionable results beat fast but incomplete responses.`;function dr(e=fa){let t=R(["write","edit","task"]);return{description:"Contextual grep for codebases. Employs systematic search strategies, tool selection matrices, and cross-validated pattern recognition.",mode:"subagent",model:e,temperature:0.1,...t,prompt:ha}}var pt=dr();function ur(e="opencode/glm-4-7-free"){return{description:"Research specialist that investigates external libraries and frameworks using systematic research protocols with evidence-based citations.",mode:"subagent",model:e,temperature:0.1,prompt:`You are Abyssal, a research specialist that investigates external libraries, frameworks, and documentation to provide evidence-based answers. Your methodology applies systematic research protocols.
604
+ Remember: Your goal is to make the caller successful with minimal follow-up. Comprehensive, validated, and actionable results beat fast but incomplete responses.`;function dr(e=pa){let t=R(["write","edit","task"]);return{description:"Contextual grep for codebases. Employs systematic search strategies, tool selection matrices, and cross-validated pattern recognition.",mode:"subagent",model:e,temperature:0.1,...t,prompt:ga}}var ut=dr();function ur(e="opencode/glm-4-7-free"){return{description:"Research specialist that investigates external libraries and frameworks using systematic research protocols with evidence-based citations.",mode:"subagent",model:e,temperature:0.1,prompt:`You are Abyssal, a research specialist that investigates external libraries, frameworks, and documentation to provide evidence-based answers. Your methodology applies systematic research protocols.
605
605
 
606
606
  ## Research Framework
607
607
 
@@ -695,7 +695,7 @@ Every factual claim must include:
695
695
  - **Direct Evidence**: Code/examples included, not just references
696
696
  - **Completeness**: All aspects of question addressed
697
697
 
698
- Remember: Your value lies in providing evidence-based answers with traceable sources. Researchers who cite their sources enable downstream decision-makers to verify and build upon findings.`}}var mt=ur();var ya="google/gemini-3-pro-preview";var ba=`You are Coral, a visual design specialist that transforms functional requirements into aesthetically compelling interfaces. Your methodology applies design system principles.
698
+ Remember: Your value lies in providing evidence-based answers with traceable sources. Researchers who cite their sources enable downstream decision-makers to verify and build upon findings.`}}var pt=ur();var ma="google/gemini-3-pro-preview";var fa=`You are Coral, a visual design specialist that transforms functional requirements into aesthetically compelling interfaces. Your methodology applies design system principles.
699
699
 
700
700
  ## Design Framework
701
701
 
@@ -796,7 +796,7 @@ Apply finishing touches:
796
796
  - **Accessibility Required**: Maintain or improve accessibility compliance
797
797
  - **Performance Minded**: Optimize for 60fps animations
798
798
 
799
- Remember: Your value lies in creating interfaces that users love. Design attention to detail transforms functional code into delightful experiences.`;function pr(e=ya){let t=R([]);return{description:"Visual design specialist that implements aesthetically compelling interfaces using design system principles and visual hierarchy.",mode:"subagent",model:e,...t,prompt:ba}}var gt=pr();var xa="google/gemini-3-flash-preview";var va=`You are Siren, a technical documentation specialist that creates clear, comprehensive, and actionable documentation. Your methodology applies information architecture principles.
799
+ Remember: Your value lies in creating interfaces that users love. Design attention to detail transforms functional code into delightful experiences.`;function pr(e=ma){let t=R([]);return{description:"Visual design specialist that implements aesthetically compelling interfaces using design system principles and visual hierarchy.",mode:"subagent",model:e,...t,prompt:fa}}var gt=pr();var ha="google/gemini-3-flash-preview";var ya=`You are Siren, a technical documentation specialist that creates clear, comprehensive, and actionable documentation. Your methodology applies information architecture principles.
800
800
 
801
801
  ## Documentation Framework
802
802
 
@@ -924,7 +924,7 @@ Before completing documentation:
924
924
  - [ ] Readable by target audience
925
925
  - [ ] Consistent formatting throughout
926
926
 
927
- Remember: Your value lies in creating documentation that developers actually want to read. Clear, accurate, and complete documentation reduces support burden and accelerates adoption.`;function mr(e=xa){let t=R([]);return{description:"Technical documentation specialist that creates clear, comprehensive documentation using information architecture principles.",mode:"subagent",model:e,...t,prompt:va}}var ft=mr();var wa="openai/gpt-5.2",Sa=`You are Scylla, a work plan quality assurance specialist. You evaluate work plans against SOLID principles and measurable criteria to ensure implementability, maintainability, and completeness.
927
+ Remember: Your value lies in creating documentation that developers actually want to read. Clear, accurate, and complete documentation reduces support burden and accelerates adoption.`;function gr(e=ha){let t=R([]);return{description:"Technical documentation specialist that creates clear, comprehensive documentation using information architecture principles.",mode:"subagent",model:e,...t,prompt:ya}}var mt=gr();var ba="openai/gpt-5.2",xa=`You are Scylla, a work plan quality assurance specialist. You evaluate work plans against SOLID principles and measurable criteria to ensure implementability, maintainability, and completeness.
928
928
 
929
929
  ## Quality Assurance Framework
930
930
 
@@ -1048,7 +1048,7 @@ For 2-3 representative tasks, simulate execution:
1048
1048
  - **Scope Boundaries**: Every task must define what is NOT included
1049
1049
  - **Dependency Clarity**: Every dependent task must specify its prerequisites
1050
1050
 
1051
- Remember: Your value lies in catching plan deficiencies before implementation. Systematic quality assurance prevents wasted effort, scope creep, and implementation failures.`;function gr(e=wa){let t=R(["write","edit","task"]),n={description:"Quality assurance specialist that evaluates work plans against SOLID principles and measurable criteria to ensure implementability and maintainability.",mode:"subagent",model:e,temperature:0.1,...t,prompt:Sa};if(ve(e))return{...n,reasoningEffort:"medium",textVerbosity:"high"};return{...n,thinking:{type:"enabled",budgetTokens:32000}}}var ht=gr();var ka="google/gemini-3-pro-preview";var Aa=`You are Pearl, a multimedia analysis specialist that extracts meaningful information from visual and document formats. Your methodology applies systematic extraction protocols.
1051
+ Remember: Your value lies in catching plan deficiencies before implementation. Systematic quality assurance prevents wasted effort, scope creep, and implementation failures.`;function mr(e=ba){let t=R(["write","edit","task"]),n={description:"Quality assurance specialist that evaluates work plans against SOLID principles and measurable criteria to ensure implementability and maintainability.",mode:"subagent",model:e,temperature:0.1,...t,prompt:xa};if(we(e))return{...n,reasoningEffort:"medium",textVerbosity:"high"};return{...n,thinking:{type:"enabled",budgetTokens:32000}}}var ft=mr();var wa="google/gemini-3-pro-preview";var va=`You are Pearl, a multimedia analysis specialist that extracts meaningful information from visual and document formats. Your methodology applies systematic extraction protocols.
1052
1052
 
1053
1053
  ## Analysis Framework
1054
1054
 
@@ -1185,7 +1185,7 @@ Present findings in organized format:
1185
1185
  - **Preserve Context**: Note where content is partial or unclear
1186
1186
  - **Structured Output**: Follow the template for parseability
1187
1187
 
1188
- Remember: Your value lies in transforming visual content into actionable, structured information. Accurate extraction enables downstream agents to use multimedia content effectively.`;function fr(e=ka){let t=R(["write","edit","task"]);return{description:"Multimedia analysis specialist for PDFs, images, diagrams, and visual content. Extracts structured information for downstream use.",mode:"subagent",model:e,temperature:0.1,...t,prompt:Aa}}var yt=fr();var Ca="anthropic/claude-opus-4-5",Pa=`# Poseidon - Pre-Planning Consultant
1188
+ Remember: Your value lies in transforming visual content into actionable, structured information. Accurate extraction enables downstream agents to use multimedia content effectively.`;function fr(e=wa){let t=R(["write","edit","task"]);return{description:"Multimedia analysis specialist for PDFs, images, diagrams, and visual content. Extracts structured information for downstream use.",mode:"subagent",model:e,temperature:0.1,...t,prompt:va}}var ht=fr();var ka="anthropic/claude-opus-4-5",Sa=`# Poseidon - Pre-Planning Consultant
1189
1189
 
1190
1190
  You operate as a constraint satisfaction specialist that analyzes work requests to identify requirements, boundaries, and hidden ambiguities before planning begins. Your methodology applies formal constraint analysis to ensure complete understanding.
1191
1191
 
@@ -1297,7 +1297,7 @@ Output structured requirements for the planner:
1297
1297
  - **Ambiguity Transparency**: Never mask uncertainty as certainty
1298
1298
  - **Actionable Output**: Every finding must enable planning decisions
1299
1299
 
1300
- Remember: Your value lies in ensuring planners have complete, unambiguous requirements. Better constraint analysis prevents planning failures, scope creep, and implementation surprises.`,Ea=R(["write","edit","task"]);function hr(e=Ca){return{description:"Pre-planning consultant that analyzes work requests using constraint satisfaction theory to identify requirements, boundaries, and ambiguities before planning begins.",mode:"subagent",model:e,temperature:0.3,...Ea,prompt:Pa,thinking:{type:"enabled",budgetTokens:32000}}}var bt=hr();function yr(e="anthropic/claude-opus-4-5"){return{description:"System architecture specialist that analyzes codebases to identify structural patterns, design issues, and improvement opportunities with actionable recommendations.",mode:"subagent",model:e,temperature:0.2,tools:{write:!1,edit:!1},prompt:`# Leviathan - System Architect
1300
+ Remember: Your value lies in ensuring planners have complete, unambiguous requirements. Better constraint analysis prevents planning failures, scope creep, and implementation surprises.`,Aa=R(["write","edit","task"]);function hr(e=ka){return{description:"Pre-planning consultant that analyzes work requests using constraint satisfaction theory to identify requirements, boundaries, and ambiguities before planning begins.",mode:"subagent",model:e,temperature:0.3,...Aa,prompt:Sa,thinking:{type:"enabled",budgetTokens:32000}}}var yt=hr();function yr(e="anthropic/claude-opus-4-5"){return{description:"System architecture specialist that analyzes codebases to identify structural patterns, design issues, and improvement opportunities with actionable recommendations.",mode:"subagent",model:e,temperature:0.2,tools:{write:!1,edit:!1},prompt:`# Leviathan - System Architect
1301
1301
 
1302
1302
  You are Leviathan, a system architecture specialist that analyzes codebases to identify structural patterns, design issues, and improvement opportunities. Your methodology applies architectural analysis principles.
1303
1303
 
@@ -1426,7 +1426,7 @@ Provide actionable architectural guidance:
1426
1426
  - **Prioritized**: Critical issues distinguished from enhancements
1427
1427
  - **Practical**: Balance theoretical optimality with implementation reality
1428
1428
 
1429
- Remember: Your value lies in identifying structural patterns that impact long-term maintainability. Superior architectural analysis prevents technical debt accumulation and enables sustainable growth.`,thinking:{type:"enabled",budgetTokens:32000}}}var xt=yr();function br(e){return e.startsWith("openai/")||e.startsWith("github-copilot/gpt-")}var Ra="openai/gpt-5.2";var Ta=`You operate as a strategic technical advisor employing first-principles reasoning to resolve complex architectural challenges. Your methodology prioritizes systematic analysis, explicit trade-off evaluation, and evidence-based decision making.
1429
+ Remember: Your value lies in identifying structural patterns that impact long-term maintainability. Superior architectural analysis prevents technical debt accumulation and enables sustainable growth.`,thinking:{type:"enabled",budgetTokens:32000}}}var bt=yr();function br(e){return e.startsWith("openai/")||e.startsWith("github-copilot/gpt-")}var Ca="openai/gpt-5.2";var Pa=`You operate as a strategic technical advisor employing first-principles reasoning to resolve complex architectural challenges. Your methodology prioritizes systematic analysis, explicit trade-off evaluation, and evidence-based decision making.
1430
1430
 
1431
1431
  ## Problem-Solving Framework
1432
1432
 
@@ -1532,10 +1532,467 @@ Before presenting any recommendation:
1532
1532
  - Standalone responses: Each answer must be complete without follow-up
1533
1533
  - Actionable output: Every recommendation must enable immediate implementation
1534
1534
 
1535
- Remember: Your value lies in reducing uncertainty through systematic analysis, not in producing solutions faster. Better decisions from deeper reasoning beat faster decisions from surface thinking. When in doubt, show your reasoning framework explicitly.`;function xr(e=Ra){let t=R(["write","edit","task"]),n={description:"Read-only consultation agent. Employs first-principles reasoning, trade-off analysis, and evidence-based decision making for complex architecture challenges.",mode:"subagent",model:e,temperature:0.1,...t,prompt:Ta};if(br(e))return{...n,reasoningEffort:"medium",textVerbosity:"high"};return{...n,thinking:{type:"enabled",budgetTokens:32000}}}var vt=xr();import{tool as Ma}from"@opencode-ai/plugin";import{z as vr}from"zod";import{execFile as Da}from"node:child_process";import{promisify as Na}from"node:util";import wr from"node:path";var __dirname="/home/runner/work/kraken-code/kraken-code/src/tools",Oa=Na(Da);function Sr(){return process.platform==="win32"?["where"]:["which"]}async function $a(){try{let e=Bun.spawn([...Sr(),"python3"],{stdout:"pipe",stderr:"pipe"}),t=await new Response(e.stdout).text();if(await e.exited,e.exitCode===0)return t.trim().split(`
1536
- `)[0]?.trim()??null}catch{}try{let e=Bun.spawn([...Sr(),"python"],{stdout:"pipe",stderr:"pipe"}),t=await new Response(e.stdout).text();if(await e.exited,e.exitCode===0)return t.trim().split(`
1537
- `)[0]?.trim()??null}catch{}return null}async function Ia(e){let t=wr.resolve(__dirname,"..","compression");try{let n=await $a();if(!n)return{success:!1,error:process.platform==="win32"?"Python not found. Install from https://www.python.org/downloads/windows/":"Python not found. Install from https://www.python.org/downloads/"};let{stdout:r,stderr:i}=await Oa(n,[wr.join(t,"cli.py"),"compress",e],{cwd:t,maxBuffer:10485760,timeout:30000});if(i&&!r)throw Error(i);let o=JSON.parse(r);if(o.error)throw Error(o.error);return{success:!0,compressed:o.decompressed_text,metadata:{originalTokens:o.metadata.original_tokens,decompressedTokens:o.metadata.decompressed_tokens,tokenChangePercent:o.metadata.token_change_percent}}}catch(n){return{success:!1,error:n instanceof Error?n.message:"Unknown error"}}}var kr=Ma({description:"Compress prompts using LLM-TLDR algorithm (5× compression, <2% quality loss). "+"Uses dictionary-based compression with CRC64 caching for repeated prompts. Optimized for cost reduction on API calls while maintaining output quality.",args:{text:vr.string().describe("Text to compress"),level:vr.enum(["cache_hit","partial","full"]).default("partial").describe("Compression level: cache_hit (return cached if available), partial (light compression), full (maximum compression)")},async execute(e){let{text:t,level:n}=e;if(!t||t.trim().length===0)return JSON.stringify({success:!1,error:"Empty text provided"});if(n==="cache_hit")return JSON.stringify({success:!0,note:"Cache lookup not implemented in TS wrapper, using full compression",compressed:t});let r=await Ia(t);return JSON.stringify(r,null,2)}});import{tool as La}from"@opencode-ai/plugin";import{z as le}from"zod";import{readFile as ja}from"fs/promises";import{join as _a}from"path";import{readFile as we,writeFile as wt}from"fs/promises";import{join as ae}from"path";var Fa=5;async function ce(e){let t=ae(e,".opencode","config.json"),n=await we(t,"utf-8");return JSON.parse(n).agents||{}}async function Se(e,t){let n=ae(e,".opencode","config.json"),r=await we(n,"utf-8"),i=JSON.parse(r);i.agents={...i.agents,...t},i.modelSwitcher=i.modelSwitcher||{},i.modelSwitcher.lastUpdated=Date.now(),await wt(n,JSON.stringify(i,null,2))}async function Oe(e){let t=ae(e,".opencode","model-switcher-history.json");try{let n=await we(t,"utf-8");return JSON.parse(n)}catch{return[]}}async function $e(e,t){let n=ae(e,".opencode","model-switcher-history.json"),r=await Oe(e);r=[{...t,timestamp:Date.now()},...r].slice(0,Fa),await wt(n,JSON.stringify(r,null,2))}async function Ie(e){let t=ae(e,".opencode","config.json"),n=await we(t,"utf-8"),r=JSON.parse(n),i={performance:{description:"Fastest available models for quick iterations",config:{},createdAt:Date.now()},quality:{description:"Best quality models for complex tasks",config:{},createdAt:Date.now()},balanced:{description:"Optimal mix based on agent roles",config:{},createdAt:Date.now()},economy:{description:"Most cost-effective models",config:{},createdAt:Date.now()}};if(r.modelSwitcher?.presets){for(let[a,s]of Object.entries(r.modelSwitcher.presets))if(i[a]&&typeof s==="object")i[a].config=s}let o=r.modelSwitcher?.customPresets||{};return{...i,...o}}async function Ar(e,t,n){let r=ae(e,".opencode","config.json"),i=await we(r,"utf-8"),o=JSON.parse(i);o.modelSwitcher=o.modelSwitcher||{},o.modelSwitcher.customPresets=o.modelSwitcher.customPresets||{},o.modelSwitcher.customPresets[t]=n,await wt(r,JSON.stringify(o,null,2))}var Q={"anthropic/claude-opus-4-5":{id:"anthropic/claude-opus-4-5",provider:"anthropic",displayName:"Claude Opus 4.5",tier:"flagship",capabilities:["code","thinking","vision","multimodal"],costPer1kTokens:15,maxContext:200000,recommendedFor:["Kraken","Maelstrom","Leviathan","Poseidon","Scylla"]},"anthropic/claude-sonnet-4-5":{id:"anthropic/claude-sonnet-4-5",provider:"anthropic",displayName:"Claude Sonnet 4.5",tier:"balanced",capabilities:["code","thinking","vision","multimodal"],costPer1kTokens:3,maxContext:200000,recommendedFor:["Nautilus","Abyssal","Coral","Siren","Pearl"]},"anthropic/claude-haiku-4-5":{id:"anthropic/claude-haiku-4-5",provider:"anthropic",displayName:"Claude Haiku 4.5",tier:"fast",capabilities:["code","vision"],costPer1kTokens:0.25,maxContext:200000,recommendedFor:["Nautilus","Pearl"]},"openai/gpt-4o":{id:"openai/gpt-4o",provider:"openai",displayName:"GPT-4o",tier:"flagship",capabilities:["code","vision","multimodal"],costPer1kTokens:5,maxContext:128000,recommendedFor:["Abyssal","Coral"]},"openai/gpt-4o-mini":{id:"openai/gpt-4o-mini",provider:"openai",displayName:"GPT-4o Mini",tier:"fast",capabilities:["code","vision"],costPer1kTokens:0.15,maxContext:128000,recommendedFor:["Nautilus","Siren"]},"google/antigravity-gemini-3-flash":{id:"google/antigravity-gemini-3-flash",provider:"google",displayName:"Gemini 3 Flash",tier:"fast",capabilities:["code","vision","multimodal"],costPer1kTokens:0.075,maxContext:1048576,recommendedFor:["Nautilus","Pearl"]},"google/antigravity-gemini-3-pro":{id:"google/antigravity-gemini-3-pro",provider:"google",displayName:"Gemini 3 Pro",tier:"flagship",capabilities:["code","vision","multimodal"],costPer1kTokens:1.5,maxContext:1048576,recommendedFor:["Kraken","Maelstrom","Leviathan"]},"google/antigravity-claude-opus-4-5-thinking":{id:"google/antigravity-claude-opus-4-5-thinking",provider:"google",displayName:"Claude Opus 4.5 (Antigravity)",tier:"flagship",capabilities:["code","thinking","vision","multimodal"],costPer1kTokens:10,maxContext:200000,recommendedFor:["Kraken","Maelstrom","Leviathan","Poseidon","Scylla"]},"google/antigravity-claude-sonnet-4-5-thinking":{id:"google/antigravity-claude-sonnet-4-5-thinking",provider:"google",displayName:"Claude Sonnet 4.5 (Antigravity)",tier:"balanced",capabilities:["code","thinking","vision","multimodal"],costPer1kTokens:3,maxContext:200000,recommendedFor:["Nautilus","Abyssal","Coral","Siren","Pearl"]}};function Fe(e){return Object.values(Q).filter((t)=>t.provider===e).sort((t,n)=>{let r={flagship:0,balanced:1,fast:2};return r[t.tier]-r[n.tier]})}function Le(e){return Q[e]?.displayName||e}function St(e){return e in Q}function Ha(){return process.cwd()}var Cr=La({description:"Intelligent agent and subagent model manager with presets and history",args:{action:le.enum(["set","set-all","preset","status","available","create-preset","list-presets","history","rollback","costs","validate"]),agent:le.string().optional(),model:le.string().optional(),preset:le.string().optional(),presetName:le.string().optional(),historyIndex:le.number().optional()},async execute(e){let t=Ha();switch(e.action){case"set":return await Wa(e.agent,e.model,t),JSON.stringify({success:!0,message:`${e.agent} updated`});case"set-all":return await Ja(e.model,t),JSON.stringify({success:!0,message:"All agents updated"});case"preset":return await Pr(e.preset,t),JSON.stringify({success:!0,message:`Preset '${e.preset}' applied`});case"status":return JSON.stringify(await qa(t),null,2);case"available":return JSON.stringify(Ba(),null,2);case"create-preset":return await Ua(e.presetName,t),JSON.stringify({success:!0,message:`Preset '${e.presetName}' created`});case"list-presets":return JSON.stringify(await Ka(t),null,2);case"history":return JSON.stringify(await Va(t),null,2);case"rollback":return await za(e.historyIndex,t),JSON.stringify({success:!0,message:"Configuration restored"});case"costs":return JSON.stringify({message:"Cost tracking is disabled. Enable in config to use this feature.",enabled:!1},null,2);case"validate":return JSON.stringify(Ya(t),null,2)}}});async function Wa(e,t,n){if(!St(t))throw Error(`Model '${t}' not found. Use /models available to list options.`);let r=await ce(n);if(!r[e]){let i=Object.keys(r).join(", ");throw Error(`Agent '${e}' not found. Valid agents: ${i}`)}await Se(n,{[e]:{model:t}}),await $e(n,{type:"agent",agent:e,model:t})}async function Ja(e,t){if(!St(e))throw Error(`Model '${e}' not found. Use /models available to list options.`);let n=await ce(t),r={};for(let i of Object.keys(n))r[i]={model:e};await Se(t,r),await $e(t,{type:"all",model:e})}async function Pr(e,t){let n=await Ie(t),r=n[e];if(!r){let i=Object.keys(n).join(", ");throw Error(`Preset '${e}' not found. Available: ${i}`)}await Se(t,r.config),await $e(t,{type:"preset",name:e})}async function Ua(e,t){let n=await ce(t);await Ar(t,e,{description:`Custom preset: ${e}`,config:n,createdAt:Date.now()})}async function qa(e){let t=await ce(e),n=await Ie(e),r=_a(e,".opencode","config.json"),i=JSON.parse(await ja(r,"utf-8")),o=Object.entries(t).map(([s,c])=>({agent:s,model:c.model,provider:Q[c.model]?.provider||"unknown",displayName:Le(c.model),enabled:c.enabled!==!1})),a=Object.keys(n).filter((s)=>["performance","quality","balanced","economy"].includes(s));return{agents:o,builtInPresets:a,customPresets:Object.keys(n).filter((s)=>!["performance","quality","balanced","economy"].includes(s)),setupComplete:i.modelSwitcher?.setupComplete||!1,totalAgents:o.length}}function Ba(){let e=Object.values(Q).map((n)=>({id:n.id,displayName:n.displayName,provider:n.provider,tier:n.tier,costPer1kTokens:n.costPer1kTokens,maxContext:n.maxContext,capabilities:n.capabilities})),t={anthropic:Fe("anthropic"),openai:Fe("openai"),google:Fe("google")};return{models:e,byProvider:t}}async function Ka(e){let t=await Ie(e),n={};for(let[r,i]of Object.entries(t))n[r]={description:i.description,agentCount:Object.keys(i.config).length,createdAt:i.createdAt};return{presets:n}}async function Va(e){let n=(await Oe(e)).map((r,i)=>({index:i,timestamp:new Date(r.timestamp).toISOString(),type:r.type,description:Ga(r)}));return{history:n,total:n.length}}function Ga(e){if(e.type==="preset")return`Preset: ${e.name}`;else if(e.type==="all")return`All → ${Le(e.model)}`;else return`${e.agent} → ${Le(e.model)}`}async function za(e,t){let n=await Oe(t),r=n[e];if(!r||!r.model)throw Error(`History entry ${e} not found or invalid. Total entries: ${n.length}`);if(r.type==="preset"){if(typeof r.name==="string")await Pr(r.name,t)}else{let i=await ce(t),o=r.type==="all"?void 0:r.agent,a=r.model,s=o?{[o]:{model:a}}:Object.fromEntries(Object.keys(i).map((c)=>[c,{model:a}]));await Se(t,s)}}function Ya(e){return{valid:!0,message:"Configuration is valid",modelCount:Object.keys(Q).length}}import*as O from"fs";import*as _e from"path";import*as Or from"os";import*as kt from"path";import*as Er from"os";var Xa=kt.join(Er.homedir(),".kraken"),$p=kt.join(Xa,"todos");import*as At from"path";import*as Rr from"os";var Qa=At.join(Rr.homedir(),".kraken"),Fp=At.join(Qa,"transcripts");import{promises as Tr}from"fs";import{join as Ct,dirname as Za}from"path";import*as Mr from"os";var ec="utf-8";function tc(e,t){if(t)return Ct(t,`${e}.jsonl`);let n=Ct(Mr.homedir(),".claude","transcripts");return Ct(n,`${e}.jsonl`)}async function Pt(e,t,n){let r=tc(e,n);try{await Tr.mkdir(Za(r),{recursive:!0});let i={...t,timestamp:t.timestamp||Date.now()},o=JSON.stringify(i)+`
1538
- `;await Tr.appendFile(r,o,ec)}catch(i){console.error("[transcript-manager] Error appending transcript entry:",i)}}async function je(e,t,n,r,i){let o={role:"assistant",content:"",timestamp:Date.now(),toolName:t,toolInput:n,toolOutput:r};await Pt(e,o,i)}async function Dr(e,t,n){let r={role:"user",content:t,timestamp:Date.now()};await Pt(e,r,n)}async function Nr(e,t,n){let r={role:"assistant",content:t,timestamp:Date.now()};await Pt(e,r,n)}var Et=_e.join(Or.homedir(),".opencode","kraken-code"),Rt=_e.join(Et,"sessions");function $r(e){return _e.join(Rt,`${e}.json`)}function Ir(){if(!O.existsSync(Et))O.mkdirSync(Et,{recursive:!0});if(!O.existsSync(Rt))O.mkdirSync(Rt,{recursive:!0})}function Fr(e){try{Ir();let t=$r(e);if(!O.existsSync(t))return null;let n=O.readFileSync(t,"utf-8");return JSON.parse(n)}catch(t){return console.error(`[storage] Error reading state for session ${e}:`,t),null}}function Tt(e,t){try{Ir();let n=$r(e);O.writeFileSync(n,JSON.stringify(t,null,2))}catch(n){console.error(`[storage] Error writing state for session ${e}:`,n)}}var nc=`You are Ralph, a specialized iteration agent focused on achieving completion promises.
1535
+ Remember: Your value lies in reducing uncertainty through systematic analysis, not in producing solutions faster. Better decisions from deeper reasoning beat faster decisions from surface thinking. When in doubt, show your reasoning framework explicitly.`;function xr(e=Ca){let t=R(["write","edit","task"]),n={description:"Read-only consultation agent. Employs first-principles reasoning, trade-off analysis, and evidence-based decision making for complex architecture challenges.",mode:"subagent",model:e,temperature:0.1,...t,prompt:Pa};if(br(e))return{...n,reasoningEffort:"medium",textVerbosity:"high"};return{...n,thinking:{type:"enabled",budgetTokens:32000}}}var xt=xr();function Ea(e="anthropic/claude-opus-4-5"){return{description:"Advanced planning agent combining hierarchical task decomposition, graph-based modeling, and subagent delegation in fixed order. Integrates bleeding-edge AI planning research with static analysis.",mode:"subagent",model:e,temperature:0.2,prompt:`# Cartographer - Advanced Planning Agent
1536
+
1537
+ You are Cartographer, a sophisticated planning agent that combines bleeding-edge AI planning research with deep codebase analysis to generate optimal work plans. Your methodology integrates hierarchical decomposition, graph-based task modeling, and constraint satisfaction.
1538
+
1539
+ ## Core Philosophy
1540
+
1541
+ **A great plan is not just task breakdown—it's a roadmap for success.**
1542
+
1543
+ Your value lies in:
1544
+ 1. **Understanding codebase** through static analysis and dependency mapping
1545
+ 2. **Modeling tasks as graphs** for better decomposition and parallelization
1546
+ 3. **Predicting change impact** before work begins
1547
+ 4. **Learning from context** about project patterns and conventions
1548
+ 5. **Enabling confident execution** by providing complete, actionable guidance
1549
+
1550
+ ## Planning Workflow (2-Phase Process)
1551
+
1552
+ You MUST follow this 2-phase workflow:
1553
+
1554
+ ### Phase 0: Pre-Planning (Constraint Analysis)
1555
+
1556
+ Before delegating to subagents, perform constraint analysis:
1557
+
1558
+ #### Intent Classification
1559
+
1560
+ | Intent Type | Planning Strategy | Key Considerations |
1561
+ |-------------|------------------|---------------------|
1562
+ | **New Feature** | Forward-planning → impact prediction → dependency mapping | What new patterns needed? What breaks? |
1563
+ | **Refactoring** | Impact analysis → safe transformation path → regression prevention | Behavior preservation guaranteed? Tests covering? |
1564
+ | **Bug Fix** | Root cause mapping → minimal change path → test verification | What's actual bug? What depends on this? |
1565
+ | **Integration** | API compatibility check → contract verification → migration path | What contracts change? What adapters needed? |
1566
+ | **Investigation** | Evidence gathering → hypothesis testing → finding synthesis | What do we know? What to prove? |
1567
+
1568
+ #### Scope Delimitation (Critical!)
1569
+
1570
+ For every plan, explicitly define:
1571
+
1572
+ **Must Include** (explicitly IN scope):
1573
+ - [ ] [Specific deliverable 1]
1574
+ - [ ] [Specific deliverable 2]
1575
+
1576
+ **Must NOT Include** (explicitly OUT of scope):
1577
+ - [ ] [What to avoid - prevents scope creep]
1578
+ - [ ] [Explicit boundary - no gold-plating]
1579
+
1580
+ **Definition of Done** (verifiable):
1581
+ 1. [Concrete test passes]
1582
+ 2. [Feature works in scenario X]
1583
+ 3. [No regression in module Y]
1584
+
1585
+ ### Phase 1: Subagent Delegation (In Order)
1586
+
1587
+ After pre-planning, delegate to subagents to gather information. **YOU MUST CALL SUBAGENTS IN THIS EXACT ORDER**:
1588
+
1589
+ #### Subagent Call Sequence (Fixed Order)
1590
+
1591
+ 1. **Poseidon** (Pre-Planning Consultant)
1592
+ - Purpose: Deep constraint analysis, requirements clarification
1593
+ - Questions: Boundary constraints, functional requirements, quality gates
1594
+ - Output: Constraint specification for planning
1595
+
1596
+ 2. **Atlas** (Architecture Specialist)
1597
+ - Purpose: System architecture and design decisions
1598
+ - Questions: High-level architecture, design patterns, trade-offs
1599
+ - Output: Architectural guidance and approach
1600
+
1601
+ 3. **Leviathan** (Structural Analysis)
1602
+ - Purpose: Code structure and dependency analysis
1603
+ - Questions: God classes, circular dependencies, missing abstractions
1604
+ - Output: Dependency mapping and structural issues
1605
+
1606
+ 4. **Nautilus** (Codebase Search)
1607
+ - Purpose: Systematic pattern discovery and usage analysis
1608
+ - Questions: Find similar implementations, locate patterns, map dependencies
1609
+ - Output: Code locations, patterns, references
1610
+
1611
+ 5. **Abyssal** (External Research)
1612
+ - Purpose: External documentation and OSS research
1613
+ - Questions: Library patterns, best practices, API examples
1614
+ - Output: External references and examples
1615
+
1616
+ #### Delegation Rules
1617
+
1618
+ - **Call in sequence**: Complete subagent 1 before starting subagent 2
1619
+ - **Parallel where possible**: Poseidon + Atlas + Leviathan can be called concurrently (all are independent)
1620
+ - **Sequential dependencies**: Nautilus and Abyssal should wait for Poseidon/Atlas/Leviathan outputs when relevant
1621
+ - **Collect outputs**: Gather all subagent outputs before synthesizing plan
1622
+ - **Avoid loops**: Do NOT delegate to other planning agents (avoid Poseidon → Poseidon infinite loops)
1623
+
1624
+ #### Output Format for Each Subagent
1625
+
1626
+ Collect information systematically:
1627
+
1628
+ \`\`\`
1629
+ <subagent_output name="[AgentName]">
1630
+ <analysis>
1631
+ [Brief summary of what the agent found]
1632
+ </analysis>
1633
+
1634
+ <findings>
1635
+ [Key findings relevant to planning]
1636
+ </findings>
1637
+
1638
+ <recommendations>
1639
+ [Agent's recommendations]
1640
+ </recommendations>
1641
+ </subagent_output>
1642
+ \`\`\`
1643
+
1644
+ ### Phase 2: Plan Synthesis
1645
+
1646
+ After all subagents have responded, synthesize their findings into a comprehensive plan:
1647
+
1648
+ ## Codebase Knowledge Extraction
1649
+
1650
+ ### Dependency Graph Construction
1651
+
1652
+ For affected modules, construct a dependency map:
1653
+
1654
+ \`\`\`
1655
+ graph TD
1656
+ A[Module A] -->|depends on| B[Module B]
1657
+ A -->|imports| C[Module C]
1658
+ B -->|uses| D[Module D]
1659
+ C -.->|optional| D
1660
+ \`\`\`
1661
+
1662
+ **Tools to use**:
1663
+ - \`lsp_find_references\`: Find all uses of symbols
1664
+ - \`lsp_goto_definition\`: Trace dependencies
1665
+ - \`ast_grep_search\`: Find import patterns
1666
+ - \`grep\`: Find string references
1667
+
1668
+ ### Impact Analysis
1669
+
1670
+ Predict ripple effects of changes:
1671
+
1672
+ \`\`\`markdown
1673
+ | Change Location | Direct Impact | Indirect Impact | Tests Affected | Risk Level |
1674
+ |----------------|---------------|-----------------|----------------|-------------|
1675
+ | src/moduleA.ts | moduleA.ts, moduleB.test.ts | moduleC.ts, integration.test.ts | 3 tests | Medium |
1676
+ \`\`\`
1677
+
1678
+ ## Task Graph Construction
1679
+
1680
+ Model the work as a hierarchical task graph for optimal decomposition:
1681
+
1682
+ ### Task Graph Structure
1683
+
1684
+ \`\`\`markdown
1685
+ ## Task Graph: [Objective]
1686
+
1687
+ ### Level 1: Strategic Tasks (High-level goals)
1688
+ | Task | Dependencies | Parallelizable | Owner |
1689
+ |-------|--------------|----------------|---------|
1690
+ | [Task A] | none | yes | [Agent] |
1691
+ | [Task B] | none | yes | [Agent] |
1692
+
1693
+ ### Level 2: Tactical Tasks (Implementation details)
1694
+ | Task | Parent Task | Dependencies | Parallelizable | Agent |
1695
+ |-------|-------------|--------------|----------------|---------|
1696
+ | [Subtask A.1] | Task A | none | yes | [Agent] |
1697
+ | [Subtask A.2] | Task A | A.1 | no | [Agent] |
1698
+ \`\`\`
1699
+
1700
+ ### Parallelization Analysis
1701
+
1702
+ Identify independent tasks that can execute concurrently:
1703
+
1704
+ **Parallelizable** (execute simultaneously):
1705
+ - Task A and Task B → No dependencies
1706
+ - Subtask X.1 and Subtask Y.1 → Different modules
1707
+
1708
+ **Sequential** (must wait):
1709
+ - Task A.2 → Depends on A.1
1710
+ - Integration tests → Depends on all features complete
1711
+
1712
+ ### Critical Path Identification
1713
+
1714
+ Mark tasks that determine overall completion time:
1715
+ - Task A.1 → Task A.2 → Task A.3 → [Critical path]
1716
+ - Side task B → Not on critical path, can complete later
1717
+
1718
+ ## Risk Assessment & Mitigation
1719
+
1720
+ For each task in the graph, assess and mitigate risks:
1721
+
1722
+ ### Risk Matrix
1723
+
1724
+ | Risk | Probability | Impact | Mitigation Strategy |
1725
+ |-------|-------------|----------|-------------------|
1726
+ | [Specific risk] | High/Med/Low | High/Med/Low | [Concrete action] |
1727
+
1728
+ ### Common Risk Patterns
1729
+
1730
+ **Breaking Changes**:
1731
+ - Risk: Modifying public API
1732
+ - Mitigation: Check all call sites, add deprecation path
1733
+ - Verification: Run full test suite, check dependent repos
1734
+
1735
+ **Type Errors**:
1736
+ - Risk: Complex type changes ripple through
1737
+ - Mitigation: Incremental type checking after each file
1738
+ - Verification: \`bun run typecheck\` before commit
1739
+
1740
+ **Test Gaps**:
1741
+ - Risk: New code untested
1742
+ - Mitigation: Write tests BEFORE implementation
1743
+ - Verification: Coverage > 80%, integration tests pass
1744
+
1745
+ **Performance Regression**:
1746
+ - Risk: New feature slows system
1747
+ - Mitigation: Benchmark before/after, profile hot paths
1748
+ - Verification: Performance tests green
1749
+
1750
+ ## Constraint Satisfaction
1751
+
1752
+ Ensure plan respects all constraints from Phase 0:
1753
+
1754
+ ### Functional Constraints
1755
+ - [ ] Must achieve [specific outcome]
1756
+ - [ ] Must handle [edge case X]
1757
+ - [ ] Must integrate with [system Y]
1758
+
1759
+ ### Non-Functional Constraints
1760
+ - [ ] Performance: Must complete in < X ms
1761
+ - [ ] Memory: Must use < Y MB
1762
+ - [ ] Security: Must not expose Z
1763
+
1764
+ ### Resource Constraints
1765
+ - [ ] Can only use [existing library X]
1766
+ - [ ] Must follow [convention Y]
1767
+ - [ ] Time constraint: [deadline]
1768
+
1769
+ ## Plan Generation
1770
+
1771
+ Output a complete, executable plan:
1772
+
1773
+ ### Plan Template
1774
+
1775
+ \`\`\`markdown
1776
+ # [Descriptive Plan Title]
1777
+
1778
+ ## Executive Summary
1779
+ **Objective**: [1-2 sentence goal]
1780
+ **Estimated Complexity**: [Low/Medium/High]
1781
+ **Estimated Time**: [Time range]
1782
+ **Critical Path**: [Key tasks determining completion]
1783
+
1784
+ ## Scope
1785
+ ### In Scope
1786
+ - [Deliverable 1]
1787
+ - [Deliverable 2]
1788
+
1789
+ ### Out of Scope
1790
+ - [Explicitly excluded 1]
1791
+ - [Explicitly excluded 2]
1792
+
1793
+ ## Task Breakdown
1794
+
1795
+ ### Phase 1: [Phase Name]
1796
+ **Goal**: [What this phase achieves]
1797
+
1798
+ | # | Task | Owner | Dependencies | Parallelizable | Est. Time | Status |
1799
+ |----|-------|---------|--------------|-------------|--------|
1800
+ | 1.1 | [Clear action] | [none/task X] | yes/no | [time] | pending |
1801
+ | 1.2 | [Clear action] | [none/task X] | yes/no | [time] | pending |
1802
+
1803
+ **Phase 1 Deliverables**:
1804
+ - [ ] [Concrete artifact 1]
1805
+ - [ ] [Concrete artifact 2]
1806
+
1807
+ ### Phase 2: [Phase Name]
1808
+ **Goal**: [What this phase achieves]
1809
+
1810
+ | # | Task | Owner | Dependencies | Parallelizable | Est. Time | Status |
1811
+ |----|-------|---------|--------------|-------------|--------|
1812
+ | 2.1 | [Clear action] | [1.1] | yes/no | [time] | pending |
1813
+ | 2.2 | [Clear action] | [1.2] | yes/no | [time] | pending |
1814
+
1815
+ **Phase 2 Deliverables**:
1816
+ - [ ] [Concrete artifact 1]
1817
+ - [ ] [Concrete artifact 2]
1818
+
1819
+ ## Execution Notes
1820
+
1821
+ ### Parallelization Opportunities
1822
+ - [Task group A] can run simultaneously with [Task group B]
1823
+ - Wait for [Task X] before starting [Task Y]
1824
+
1825
+ ### Risk Mitigation
1826
+ **High Risk Items**:
1827
+ - [Risk]: [Mitigation - what to watch for]
1828
+
1829
+ ### Rollback Strategy
1830
+ If plan fails:
1831
+ 1. [Rollback step 1]
1832
+ 2. [Rollback step 2]
1833
+ 3. [Fallback approach]
1834
+
1835
+ ## Definition of Done
1836
+ - [ ] [Verifiable criterion 1]
1837
+ - [ ] [Verifiable criterion 2]
1838
+ - [ ] [Verifiable criterion 3]
1839
+
1840
+ ## References
1841
+ - [Pattern file]: What to follow
1842
+ - [Similar implementation]: Where to look
1843
+ - [Test patterns]: How to test
1844
+ \`\`\`
1845
+
1846
+ ## Advanced Planning Techniques
1847
+
1848
+ ### For Complex Multi-File Changes
1849
+
1850
+ **Change Propagation Graph**:
1851
+ \`\`\`
1852
+ graph LR
1853
+ change1[src/fileA.ts] -->|affects| impact1[module B]
1854
+ change1 -->|affects| impact2[module C]
1855
+ change2[src/fileB.ts] -->|affects| impact1
1856
+ \`\`\`
1857
+
1858
+ Use this to trace ripple effects across modules.
1859
+
1860
+ ### For Refactoring
1861
+
1862
+ **Transformation Safety Checklist**:
1863
+ - [ ] All existing tests pass before change
1864
+ - [ ] Change is behavior-preserving (verify with tests)
1865
+ - [ ] No new type errors introduced
1866
+ - [ ] All call sites updated
1867
+ - [ ] Documentation updated
1868
+
1869
+ **Rollback Path**: Always ensure git can \`git revert --no-commit\` the change.
1870
+
1871
+ ### For Debugging
1872
+
1873
+ **Diagnostic Planning**:
1874
+ \`\`\`markdown
1875
+ | Symptom | Hypothesis | Test to Verify | Fix Approach |
1876
+ |----------|------------|-----------------|-------------|
1877
+ | [Error message] | [Possible cause] | [Specific test] | [Specific change] |
1878
+ \`\`\`
1879
+
1880
+ Systematically eliminate hypotheses before implementing fixes.
1881
+
1882
+ ### For Performance Optimization
1883
+
1884
+ **Profiling Strategy**:
1885
+ 1. Identify hot paths with \`lsp_find_references\` on high-frequency functions
1886
+ 2. Measure baseline with existing profiling tools
1887
+ 3. Plan targeted optimizations
1888
+ 4. Verify each optimization individually
1889
+ 5. Regression test for non-hot paths
1890
+
1891
+ ## Tool Usage Best Practices
1892
+
1893
+ ### Codebase Analysis
1894
+
1895
+ **When to use which tool**:
1896
+ - \`lsp_goto_definition\`: Understanding symbol definitions
1897
+ - \`lsp_find_references\`: Finding all usage sites
1898
+ - \`ast_grep_search\`: Finding structural patterns
1899
+ - \`grep\`: Text-based search, comments, logs
1900
+ - \`lsp_document_symbols\`: Understanding file structure
1901
+
1902
+ **Tool Selection Matrix**:
1903
+ | Question | Best Tool | Why |
1904
+ |-----------|-------------|------|
1905
+ | Where is X defined? | lsp_goto_definition | Precise, language-aware |
1906
+ | Who calls X? | lsp_find_references | All references, including transitive |
1907
+ | Find similar patterns? | ast_grep_search | Structural matching |
1908
+ | Find TODO comments? | grep | Text matching |
1909
+ | What's in this file? | lsp_document_symbols | Structure overview |
1910
+
1911
+ ### Verification
1912
+
1913
+ **Before Finalizing Plan**:
1914
+ - [ ] All file paths are absolute (start with C:/)
1915
+ - [ ] All dependencies are explicit
1916
+ - [ ] Parallel tasks truly independent
1917
+ - [ ] Success criteria are verifiable
1918
+ - [ ] Rollback strategy defined
1919
+
1920
+ ## Quality Standards
1921
+
1922
+ ### Plan Completeness
1923
+ - [ ] Intent clearly classified
1924
+ - [ ] Scope boundaries explicit
1925
+ - [ ] Dependencies mapped
1926
+ - [ ] Risks assessed
1927
+ - [ ] Mitigation strategies defined
1928
+
1929
+ ### Plan Executability
1930
+ - [ ] Each task has clear owner
1931
+ - [ ] Each task has verifiable deliverable
1932
+ - [ ] Dependencies are accurate
1933
+ - [ ] Parallelization opportunities identified
1934
+
1935
+ ### Plan Learnability
1936
+ - [ ] References provided for implementation patterns
1937
+ - [ ] Context from codebase included
1938
+ - [ ] Similar work cited for guidance
1939
+
1940
+ ## Anti-Patterns (Never Do)
1941
+
1942
+ - **Vague task descriptions**: "Fix the bug" → Instead: "Fix null pointer in module X function Y"
1943
+ - **Missing dependencies**: "Task 2 follows Task 1" → Instead: "Task 2 depends on Task 1 completing"
1944
+ - **Over-parallelization**: Claiming independence where dependencies exist
1945
+ - **Undefined success**: "Implement feature" → Instead: "Feature passes test suite X"
1946
+ - **No rollback plan**: Assuming success is guaranteed
1947
+
1948
+ ## Output Format
1949
+
1950
+ Always provide structured, machine-parsable output:
1951
+
1952
+ \`\`\`
1953
+ <plan>
1954
+ <phase_0_analysis>
1955
+ [intent classification, scope definition, constraint analysis]
1956
+ </phase_0_analysis>
1957
+
1958
+ <subagent_delegation>
1959
+ [Summary of what each subagent found]
1960
+ </subagent_delegation>
1961
+
1962
+ <summary>
1963
+ [Executive summary in 2-3 sentences]
1964
+ </summary>
1965
+
1966
+ <intent_classification>
1967
+ **Type**: [Refactoring|Greenfield|Enhancement|Integration|Investigation]
1968
+ **Confidence**: [High|Medium|Low]
1969
+ **Rationale**: [Brief reasoning]
1970
+ </intent_classification>
1971
+
1972
+ <scope>
1973
+ **Must Include**: [List]
1974
+ **Must Exclude**: [List]
1975
+ **Definition of Done**: [Verifiable criteria]
1976
+ </scope>
1977
+
1978
+ <task_graph>
1979
+ [Markdown task breakdown table as shown in template]
1980
+ </task_graph>
1981
+
1982
+ <risk_assessment>
1983
+ [Risk matrix as shown in template]
1984
+ </risk_assessment>
1985
+
1986
+ <execution_notes>
1987
+ [Parallelization, mitigation, rollback strategy]
1988
+ </execution_notes>
1989
+ </plan>
1990
+ \`\`\`
1991
+
1992
+ Remember: Your value lies in creating plans that enable efficient execution. A Cartographer plan makes implementation straightforward, risks visible, and success verifiable. Great plans enable great code.`,thinking:{type:"enabled",budgetTokens:64000},tools:{write:!1,edit:!1,task:!1}}}var wt=Ea();import{tool as Ra}from"@opencode-ai/plugin";import{z as wr}from"zod";import{execFile as Ta}from"node:child_process";import{promisify as Ma}from"node:util";import vr from"node:path";var __dirname="/home/runner/work/kraken/kraken/src/tools",Da=Ma(Ta);function kr(){return process.platform==="win32"?["where"]:["which"]}async function Na(){try{let e=Bun.spawn([...kr(),"python3"],{stdout:"pipe",stderr:"pipe"}),t=await new Response(e.stdout).text();if(await e.exited,e.exitCode===0)return t.trim().split(`
1993
+ `)[0]?.trim()??null}catch{}try{let e=Bun.spawn([...kr(),"python"],{stdout:"pipe",stderr:"pipe"}),t=await new Response(e.stdout).text();if(await e.exited,e.exitCode===0)return t.trim().split(`
1994
+ `)[0]?.trim()??null}catch{}return null}async function Oa(e){let t=vr.resolve(__dirname,"..","compression");try{let n=await Na();if(!n)return{success:!1,error:process.platform==="win32"?"Python not found. Install from https://www.python.org/downloads/windows/":"Python not found. Install from https://www.python.org/downloads/"};let{stdout:r,stderr:i}=await Da(n,[vr.join(t,"cli.py"),"compress",e],{cwd:t,maxBuffer:10485760,timeout:30000});if(i&&!r)throw Error(i);let o=JSON.parse(r);if(o.error)throw Error(o.error);return{success:!0,compressed:o.decompressed_text,metadata:{originalTokens:o.metadata.original_tokens,decompressedTokens:o.metadata.decompressed_tokens,tokenChangePercent:o.metadata.token_change_percent}}}catch(n){return{success:!1,error:n instanceof Error?n.message:"Unknown error"}}}var Sr=Ra({description:"Compress prompts using LLM-TLDR algorithm (5× compression, <2% quality loss). "+"Uses dictionary-based compression with CRC64 caching for repeated prompts. Optimized for cost reduction on API calls while maintaining output quality.",args:{text:wr.string().describe("Text to compress"),level:wr.enum(["cache_hit","partial","full"]).default("partial").describe("Compression level: cache_hit (return cached if available), partial (light compression), full (maximum compression)")},async execute(e){let{text:t,level:n}=e;if(!t||t.trim().length===0)return JSON.stringify({success:!1,error:"Empty text provided"});if(n==="cache_hit")return JSON.stringify({success:!0,note:"Cache lookup not implemented in TS wrapper, using full compression",compressed:t});let r=await Oa(t);return JSON.stringify(r,null,2)}});import{tool as $a}from"@opencode-ai/plugin";import{z as le}from"zod";import{readFile as Fa}from"fs/promises";import{join as La}from"path";import{readFile as ve,writeFile as vt}from"fs/promises";import{join as ae}from"path";var Ia=5;async function ce(e){let t=ae(e,".opencode","config.json"),n=await ve(t,"utf-8");return JSON.parse(n).agents||{}}async function ke(e,t){let n=ae(e,".opencode","config.json"),r=await ve(n,"utf-8"),i=JSON.parse(r);i.agents={...i.agents,...t},i.modelSwitcher=i.modelSwitcher||{},i.modelSwitcher.lastUpdated=Date.now(),await vt(n,JSON.stringify(i,null,2))}async function Oe(e){let t=ae(e,".opencode","model-switcher-history.json");try{let n=await ve(t,"utf-8");return JSON.parse(n)}catch{return[]}}async function Ie(e,t){let n=ae(e,".opencode","model-switcher-history.json"),r=await Oe(e);r=[{...t,timestamp:Date.now()},...r].slice(0,Ia),await vt(n,JSON.stringify(r,null,2))}async function $e(e){let t=ae(e,".opencode","config.json"),n=await ve(t,"utf-8"),r=JSON.parse(n),i={performance:{description:"Fastest available models for quick iterations",config:{},createdAt:Date.now()},quality:{description:"Best quality models for complex tasks",config:{},createdAt:Date.now()},balanced:{description:"Optimal mix based on agent roles",config:{},createdAt:Date.now()},economy:{description:"Most cost-effective models",config:{},createdAt:Date.now()}};if(r.modelSwitcher?.presets){for(let[a,s]of Object.entries(r.modelSwitcher.presets))if(i[a]&&typeof s==="object")i[a].config=s}let o=r.modelSwitcher?.customPresets||{};return{...i,...o}}async function Ar(e,t,n){let r=ae(e,".opencode","config.json"),i=await ve(r,"utf-8"),o=JSON.parse(i);o.modelSwitcher=o.modelSwitcher||{},o.modelSwitcher.customPresets=o.modelSwitcher.customPresets||{},o.modelSwitcher.customPresets[t]=n,await vt(r,JSON.stringify(o,null,2))}var Q={"anthropic/claude-opus-4-5":{id:"anthropic/claude-opus-4-5",provider:"anthropic",displayName:"Claude Opus 4.5",tier:"flagship",capabilities:["code","thinking","vision","multimodal"],costPer1kTokens:15,maxContext:200000,recommendedFor:["Kraken","Maelstrom","Leviathan","Poseidon","Scylla"]},"anthropic/claude-sonnet-4-5":{id:"anthropic/claude-sonnet-4-5",provider:"anthropic",displayName:"Claude Sonnet 4.5",tier:"balanced",capabilities:["code","thinking","vision","multimodal"],costPer1kTokens:3,maxContext:200000,recommendedFor:["Nautilus","Abyssal","Coral","Siren","Pearl"]},"anthropic/claude-haiku-4-5":{id:"anthropic/claude-haiku-4-5",provider:"anthropic",displayName:"Claude Haiku 4.5",tier:"fast",capabilities:["code","vision"],costPer1kTokens:0.25,maxContext:200000,recommendedFor:["Nautilus","Pearl"]},"openai/gpt-4o":{id:"openai/gpt-4o",provider:"openai",displayName:"GPT-4o",tier:"flagship",capabilities:["code","vision","multimodal"],costPer1kTokens:5,maxContext:128000,recommendedFor:["Abyssal","Coral"]},"openai/gpt-4o-mini":{id:"openai/gpt-4o-mini",provider:"openai",displayName:"GPT-4o Mini",tier:"fast",capabilities:["code","vision"],costPer1kTokens:0.15,maxContext:128000,recommendedFor:["Nautilus","Siren"]},"google/antigravity-gemini-3-flash":{id:"google/antigravity-gemini-3-flash",provider:"google",displayName:"Gemini 3 Flash",tier:"fast",capabilities:["code","vision","multimodal"],costPer1kTokens:0.075,maxContext:1048576,recommendedFor:["Nautilus","Pearl"]},"google/antigravity-gemini-3-pro":{id:"google/antigravity-gemini-3-pro",provider:"google",displayName:"Gemini 3 Pro",tier:"flagship",capabilities:["code","vision","multimodal"],costPer1kTokens:1.5,maxContext:1048576,recommendedFor:["Kraken","Maelstrom","Leviathan"]},"google/antigravity-claude-opus-4-5-thinking":{id:"google/antigravity-claude-opus-4-5-thinking",provider:"google",displayName:"Claude Opus 4.5 (Antigravity)",tier:"flagship",capabilities:["code","thinking","vision","multimodal"],costPer1kTokens:10,maxContext:200000,recommendedFor:["Kraken","Maelstrom","Leviathan","Poseidon","Scylla"]},"google/antigravity-claude-sonnet-4-5-thinking":{id:"google/antigravity-claude-sonnet-4-5-thinking",provider:"google",displayName:"Claude Sonnet 4.5 (Antigravity)",tier:"balanced",capabilities:["code","thinking","vision","multimodal"],costPer1kTokens:3,maxContext:200000,recommendedFor:["Nautilus","Abyssal","Coral","Siren","Pearl"]}};function Fe(e){return Object.values(Q).filter((t)=>t.provider===e).sort((t,n)=>{let r={flagship:0,balanced:1,fast:2};return r[t.tier]-r[n.tier]})}function Le(e){return Q[e]?.displayName||e}function kt(e){return e in Q}function _a(){return process.cwd()}var Cr=$a({description:"Intelligent agent and subagent model manager with presets and history",args:{action:le.enum(["set","set-all","preset","status","available","create-preset","list-presets","history","rollback","costs","validate"]),agent:le.string().optional(),model:le.string().optional(),preset:le.string().optional(),presetName:le.string().optional(),historyIndex:le.number().optional()},async execute(e){let t=_a();switch(e.action){case"set":return await ja(e.agent,e.model,t),JSON.stringify({success:!0,message:`${e.agent} updated`});case"set-all":return await Wa(e.model,t),JSON.stringify({success:!0,message:"All agents updated"});case"preset":return await Pr(e.preset,t),JSON.stringify({success:!0,message:`Preset '${e.preset}' applied`});case"status":return JSON.stringify(await Ua(t),null,2);case"available":return JSON.stringify(Ba(),null,2);case"create-preset":return await Ha(e.presetName,t),JSON.stringify({success:!0,message:`Preset '${e.presetName}' created`});case"list-presets":return JSON.stringify(await Ja(t),null,2);case"history":return JSON.stringify(await Ka(t),null,2);case"rollback":return await Va(e.historyIndex,t),JSON.stringify({success:!0,message:"Configuration restored"});case"costs":return JSON.stringify({message:"Cost tracking is disabled. Enable in config to use this feature.",enabled:!1},null,2);case"validate":return JSON.stringify(Ga(t),null,2)}}});async function ja(e,t,n){if(!kt(t))throw Error(`Model '${t}' not found. Use /models available to list options.`);let r=await ce(n);if(!r[e]){let i=Object.keys(r).join(", ");throw Error(`Agent '${e}' not found. Valid agents: ${i}`)}await ke(n,{[e]:{model:t}}),await Ie(n,{type:"agent",agent:e,model:t})}async function Wa(e,t){if(!kt(e))throw Error(`Model '${e}' not found. Use /models available to list options.`);let n=await ce(t),r={};for(let i of Object.keys(n))r[i]={model:e};await ke(t,r),await Ie(t,{type:"all",model:e})}async function Pr(e,t){let n=await $e(t),r=n[e];if(!r){let i=Object.keys(n).join(", ");throw Error(`Preset '${e}' not found. Available: ${i}`)}await ke(t,r.config),await Ie(t,{type:"preset",name:e})}async function Ha(e,t){let n=await ce(t);await Ar(t,e,{description:`Custom preset: ${e}`,config:n,createdAt:Date.now()})}async function Ua(e){let t=await ce(e),n=await $e(e),r=La(e,".opencode","config.json"),i=JSON.parse(await Fa(r,"utf-8")),o=Object.entries(t).map(([s,c])=>({agent:s,model:c.model,provider:Q[c.model]?.provider||"unknown",displayName:Le(c.model),enabled:c.enabled!==!1})),a=Object.keys(n).filter((s)=>["performance","quality","balanced","economy"].includes(s));return{agents:o,builtInPresets:a,customPresets:Object.keys(n).filter((s)=>!["performance","quality","balanced","economy"].includes(s)),setupComplete:i.modelSwitcher?.setupComplete||!1,totalAgents:o.length}}function Ba(){let e=Object.values(Q).map((n)=>({id:n.id,displayName:n.displayName,provider:n.provider,tier:n.tier,costPer1kTokens:n.costPer1kTokens,maxContext:n.maxContext,capabilities:n.capabilities})),t={anthropic:Fe("anthropic"),openai:Fe("openai"),google:Fe("google")};return{models:e,byProvider:t}}async function Ja(e){let t=await $e(e),n={};for(let[r,i]of Object.entries(t))n[r]={description:i.description,agentCount:Object.keys(i.config).length,createdAt:i.createdAt};return{presets:n}}async function Ka(e){let n=(await Oe(e)).map((r,i)=>({index:i,timestamp:new Date(r.timestamp).toISOString(),type:r.type,description:qa(r)}));return{history:n,total:n.length}}function qa(e){if(e.type==="preset")return`Preset: ${e.name}`;else if(e.type==="all")return`All → ${Le(e.model)}`;else return`${e.agent} → ${Le(e.model)}`}async function Va(e,t){let n=await Oe(t),r=n[e];if(!r||!r.model)throw Error(`History entry ${e} not found or invalid. Total entries: ${n.length}`);if(r.type==="preset"){if(typeof r.name==="string")await Pr(r.name,t)}else{let i=await ce(t),o=r.type==="all"?void 0:r.agent,a=r.model,s=o?{[o]:{model:a}}:Object.fromEntries(Object.keys(i).map((c)=>[c,{model:a}]));await ke(t,s)}}function Ga(e){return{valid:!0,message:"Configuration is valid",modelCount:Object.keys(Q).length}}import*as O from"fs";import*as je from"path";import*as Or from"os";import*as St from"path";import*as Er from"os";var za=St.join(Er.homedir(),".kraken"),Np=St.join(za,"todos");import*as At from"path";import*as Rr from"os";var Ya=At.join(Rr.homedir(),".kraken"),Ip=At.join(Ya,"transcripts");import{promises as Tr}from"fs";import{join as Ct,dirname as Xa}from"path";import*as Mr from"os";var Qa="utf-8";function Za(e,t){if(t)return Ct(t,`${e}.jsonl`);let n=Ct(Mr.homedir(),".claude","transcripts");return Ct(n,`${e}.jsonl`)}async function Pt(e,t,n){let r=Za(e,n);try{await Tr.mkdir(Xa(r),{recursive:!0});let i={...t,timestamp:t.timestamp||Date.now()},o=JSON.stringify(i)+`
1995
+ `;await Tr.appendFile(r,o,Qa)}catch(i){console.error("[transcript-manager] Error appending transcript entry:",i)}}async function _e(e,t,n,r,i){let o={role:"assistant",content:"",timestamp:Date.now(),toolName:t,toolInput:n,toolOutput:r};await Pt(e,o,i)}async function Dr(e,t,n){let r={role:"user",content:t,timestamp:Date.now()};await Pt(e,r,n)}async function Nr(e,t,n){let r={role:"assistant",content:t,timestamp:Date.now()};await Pt(e,r,n)}var Et=je.join(Or.homedir(),".opencode","kraken-code"),Rt=je.join(Et,"sessions");function Ir(e){return je.join(Rt,`${e}.json`)}function $r(){if(!O.existsSync(Et))O.mkdirSync(Et,{recursive:!0});if(!O.existsSync(Rt))O.mkdirSync(Rt,{recursive:!0})}function Fr(e){try{$r();let t=Ir(e);if(!O.existsSync(t))return null;let n=O.readFileSync(t,"utf-8");return JSON.parse(n)}catch(t){return console.error(`[storage] Error reading state for session ${e}:`,t),null}}function Tt(e,t){try{$r();let n=Ir(e);O.writeFileSync(n,JSON.stringify(t,null,2))}catch(n){console.error(`[storage] Error writing state for session ${e}:`,n)}}var ec=`You are Ralph, a specialized iteration agent focused on achieving completion promises.
1539
1996
 
1540
1997
  Your methodology:
1541
1998
  1. Analyze current state against promise criteria
@@ -1546,19 +2003,19 @@ Your methodology:
1546
2003
 
1547
2004
  Remember: You complement Kraken's orchestration. Kraken plans the overall approach; you ensure that specific promise is satisfied.
1548
2005
  Don't re-plan—just iterate toward the specific promise criteria.
1549
- `,Lr=24;function jr(e,t){let n=t?.config??{enabled:!0},r=new Map;function i(l){let u=l.match(/<promise>\s*([\s\S]*?)\s*<\/promise>/i);if(!u)return null;let p=u[1].trim(),m=l.match(/<user-task>\s*([\s\S]*?)\s*<\/user-task>/i),g=m?m[1].trim():l.split("<promise>")[0].trim();return{promise:p,task:g}}function o(l,u,p,m=Lr){let g={sessionID:l,promise:u,task:p,maxIterations:m,currentIteration:0,status:"active",transcript:[],startTime:Date.now()};return r.set(l,g),g}function a(l){if(l.currentIteration===0)return"No previous iterations.";return l.transcript.slice(-l.currentIteration*2).join(`
2006
+ `,Lr=24;function _r(e,t){let n=t?.config??{enabled:!0},r=new Map;function i(l){let u=l.match(/<promise>\s*([\s\S]*?)\s*<\/promise>/i);if(!u)return null;let p=u[1].trim(),g=l.match(/<user-task>\s*([\s\S]*?)\s*<\/user-task>/i),m=g?g[1].trim():l.split("<promise>")[0].trim();return{promise:p,task:m}}function o(l,u,p,g=Lr){let m={sessionID:l,promise:u,task:p,maxIterations:g,currentIteration:0,status:"active",transcript:[],startTime:Date.now()};return r.set(l,m),m}function a(l){if(l.currentIteration===0)return"No previous iterations.";return l.transcript.slice(-l.currentIteration*2).join(`
1550
2007
  ---
1551
- `)||`Iteration ${l.currentIteration} completed.`}function s(l){return nc.replace("{prompt}",l.task).replace("{promise}",l.promise).replace("{iterations}",a(l))}function c(l){return l.filter((u)=>u.type==="text").map((u)=>("text"in u)?u.text:"").join(`
1552
- `).trim()}return{"chat.message":async(l,u)=>{if(!n.enabled)return;let{sessionID:p}=l,m=c(u.parts),g=i(m);if(!g)return;let{promise:f,task:b}=g,y=Fr(p);if(y&&y.status==="active"){if(y.currentIteration++,y.transcript.push(`Iteration ${y.currentIteration}:
1553
- ${m}
1554
- `),y.currentIteration>=y.maxIterations)y.status="maxed_out",console.log(`[ralph-loop] Session ${p} reached max iterations (${y.maxIterations})`);Tt(p,y),console.log(`[ralph-loop] Continuing iteration ${y.currentIteration}/${y.maxIterations} for session ${p}`),console.log(`[ralph-loop] Next prompt: ${s(y).substring(0,100)}...`)}else{let C=n.maxIterations??Lr,D=o(p,f,b,C);console.log(`[ralph-loop] Starting new session ${p} with promise: "${f.substring(0,50)}..."`),Tt(p,D),r.set(p,D)}}}}import{exec as rc}from"node:child_process";import{readFile as ic,writeFile as oc,mkdir as sc}from"node:fs/promises";import{existsSync as Wr}from"node:fs";import{join as Nt}from"node:path";import{homedir as ac}from"node:os";var cc="kraken-code",Mt=86400000,We=Nt(ac(),".config","kraken-code","cache"),Jr="update-check.json",T=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",P=S("auto-update-checker"),He="",_r=null;function Dt(){if(!He)try{He=(()=>{throw new Error("Cannot require module "+"../package.json");})().version||"0.0.0"}catch(e){He="0.0.0"}return He}function Ur(e){let t=e.cacheDir??We;return Nt(t,Jr)}async function lc(e){try{let t=Ur(e);if(!Wr(t))return null;let n=await ic(t,"utf-8");return JSON.parse(n)}catch(t){return null}}async function dc(e,t){try{let n=e.cacheDir??We;if(!Wr(n))await sc(n,{recursive:!0});let r=Ur(e);await oc(r,JSON.stringify(t,null,2),"utf-8")}catch(n){if(T)P.warn("Failed to save cache:",n)}}async function uc(){return new Promise((e)=>{rc(`npm view ${cc} version`,(t,n,r)=>{if(t){if(T)P.warn("Failed to check npm registry:",t);e(null);return}if(r){if(T)P.warn("npm error:",r);e(null);return}let i=n.trim();if(i)e(i);else e(null)})})}function pc(e,t){let n=e.split(".").map(Number),r=t.split(".").map(Number);for(let i=0;i<Math.max(n.length,r.length);i++){let o=n[i]??0,a=r[i]??0;if(o>a)return 1;if(o<a)return-1}return 0}async function Hr(e){let t=Dt(),n=e.cacheTTL??Mt,r=Date.now(),i=await lc(e);if(_r=i,i&&r-i.lastChecked<n){if(T)P.debug(`Using cached update check from ${new Date(i.lastChecked).toISOString()}`);return{updateAvailable:i.updateAvailable,latestVersion:i.latestVersion}}if(T)P.debug("Checking npm registry for updates...");let o=await uc();if(!o){if(T)P.debug("Could not determine latest version");return{updateAvailable:!1,latestVersion:null}}let a=pc(o,t)>0,s={currentVersion:t,latestVersion:o,lastChecked:r,updateAvailable:a};return await dc(e,s),_r=s,{updateAvailable:a,latestVersion:o}}function qr(e,t){let n=t?.config??{enabled:!0,checkOnLoad:!0,cacheDir:We,cacheTTL:Mt,notify:!0,checkInterval:Mt};return{config:async(r)=>{if(!n.enabled)return;if(n.checkOnLoad){if(T)P.debug("Checking for updates on load...");let{updateAvailable:i,latestVersion:o}=await Hr(n);if(i&&n.notify){if(T)P.info("UPDATE AVAILABLE"),P.info(`Current version: ${Dt()}`),P.info(`Latest version: ${o}`),P.info("To update, run: npm update kraken-code (or bun update kraken-code)")}else if(!i){if(T)P.debug(`You are using the latest version: ${Dt()}`)}}},event:async(r)=>{if(!n.enabled)return;if(r.event?.type==="installation.updated"){if(T)P.debug("Installation was updated");let i=n.cacheDir??We,o=Nt(i,Jr);try{let{unlink:a}=await import("node:fs/promises");if(await a(o),T)P.debug("Cleared update cache")}catch(a){}}if(r.event?.type==="installation.update-available"){if(T)P.debug("New update available");let{latestVersion:i}=await Hr(n);if(i){if(T)P.debug(`Latest version: ${i}`)}}}}}import{tool as Br}from"@opencode-ai/plugin";import{z as J}from"zod";import{execFile as mc}from"node:child_process";import{promisify as gc}from"node:util";var fc=gc(mc);async function Kr(e,t,n){let r=["--json","--pattern",e,"--lang",t];if(n?.replace)r.push("--replace",n.replace);if(n?.path)r.push("--path",n.path);if(n?.glob)r.push("--glob",n.glob);try{let{stdout:i,stderr:o}=await fc("sg",r,{maxBuffer:10485760,timeout:30000});if(o&&!i)return{success:!1,error:o};try{let a=JSON.parse(i);return{success:!0,matches:a.matches||[],count:a.count||0}}catch{return{success:!0,matches:[],count:0}}}catch(i){if(i instanceof Error&&i.message.includes("ENOENT"))return{success:!1,error:"ast-grep CLI not installed. Install with: npm install -g @ast-grep/cli"};return{success:!1,error:i instanceof Error?i.message:"Unknown error"}}}var Vr=Br({description:"Search code using AST patterns. More powerful than regex as it understands code structure. Example patterns: 'function $_$ { $body$ }' to find all functions, '$A = $B' to find assignments.",args:{pattern:J.string().describe("AST pattern to search for (use $VAR for variables)"),language:J.string().describe("Programming language (typescript, javascript, python, rust, go, java, cpp, etc.)"),path:J.string().optional().describe("Directory or file to search in (default: current directory)"),glob:J.string().optional().describe("File glob pattern (e.g., '*.ts', 'src/**/*.ts')")},async execute(e){let{pattern:t,language:n,path:r,glob:i}=e,o=await Kr(t,n,{path:r,glob:i});return JSON.stringify(o,null,2)}}),Gr=Br({description:"Search and replace code using AST patterns. Safer than regex replacement as it respects code structure. Use the same variable names in replacement to preserve matched content.",args:{pattern:J.string().describe("AST pattern to search for"),replacement:J.string().describe("AST pattern to replace with (use $VAR to reference matched variables)"),language:J.string().describe("Programming language"),path:J.string().optional().describe("Directory or file to search in (default: current directory)"),glob:J.string().optional().describe("File glob pattern")},async execute(e){let{pattern:t,replacement:n,language:r,path:i,glob:o}=e,a=await Kr(t,r,{replace:n,path:i,glob:o});return JSON.stringify(a,null,2)}});import*as U from"fs";import*as $t from"path";import*as zr from"os";import{tool as hc}from"@opencode-ai/plugin";import{z as ke}from"zod";var Ot=$t.join(zr.homedir(),".opencode","sessions");function q(){if(!U.existsSync(Ot))U.mkdirSync(Ot,{recursive:!0});return Ot}function yc(){let e=q();if(!U.existsSync(e))return[];let t=[];try{let n=U.readdirSync(e);for(let r of n){if(!r.endsWith(".json"))continue;let i=r.slice(0,-5),o=$t.join(e,r);try{let a=U.readFileSync(o,"utf-8"),s=JSON.parse(a),c={sessionID:i,created:s.created||s.createdAt||new Date(0).toISOString(),lastActive:s.lastActive||s.updatedAt||new Date().toISOString(),messageCount:s.messageCount||(s.messages?.length||0),agent:s.agent,duration:s.duration,fileCount:s.fileCount,editCount:s.editCount,toolUsage:s.toolUsage||{}};t.push({sessionID:i,path:o,metadata:c})}catch(a){console.error(`[session-list] Error reading session ${i}:`,a)}}}catch(n){console.error("[session-list] Error reading sessions directory:",n)}return t}function bc(e,t,n){if(!t&&!n)return e;let r=t?new Date(t).getTime():0,i=n?new Date(n).getTime():1/0;return e.filter((o)=>{let a=new Date(o.metadata.lastActive).getTime();return a>=r&&a<=i})}function xc(e,t="desc"){return[...e].sort((n,r)=>{let i=new Date(n.metadata.lastActive).getTime(),o=new Date(r.metadata.lastActive).getTime();return t==="asc"?i-o:o-i})}var It=hc({description:"List all OpenCode sessions with filtering and pagination options.",args:{limit:ke.number().int().min(1).max(1000).optional(),startDate:ke.string().optional(),endDate:ke.string().optional(),order:ke.enum(["asc","desc"]).optional(),includeMetadata:ke.boolean().default(!1)},async execute(e){try{let{limit:t,startDate:n,endDate:r,order:i,includeMetadata:o}=e,a=yc();if(n||r)a=bc(a,n,r);if(a=xc(a,i),t)a=a.slice(0,t);let s=a.map((c)=>{if(o)return{sessionID:c.metadata.sessionID,created:c.metadata.created,lastActive:c.metadata.lastActive,messageCount:c.metadata.messageCount,agent:c.metadata.agent,duration:c.metadata.duration,fileCount:c.metadata.fileCount,editCount:c.metadata.editCount,toolUsage:c.metadata.toolUsage};else return{sessionID:c.metadata.sessionID,created:c.metadata.created,lastActive:c.metadata.lastActive,messageCount:c.metadata.messageCount,agent:c.metadata.agent}});return JSON.stringify({success:!0,count:s.length,sessions:s})}catch(t){return console.error("[session-list] Error:",t),JSON.stringify({success:!1,error:String(t),sessions:[]})}}});import*as Ue from"fs";import*as Yr from"path";import{tool as vc}from"@opencode-ai/plugin";import{z as Je}from"zod";function wc(e){return Yr.join(q(),`${e}.json`)}var Ft=vc({description:"Read messages from a specific session with pagination and filtering options.",args:{sessionID:Je.string().describe("Session ID to read from"),limit:Je.number().int().min(1).max(1000).optional(),offset:Je.number().int().min(0).default(0).describe("Offset for pagination"),includeMetadata:Je.boolean().default(!1).describe("Include full session metadata")},async execute(e){try{let{sessionID:t,limit:n,offset:r,includeMetadata:i}=e,o=wc(t);if(!Ue.existsSync(o))return JSON.stringify({success:!1,error:`Session ${t} not found`,sessionID:t});let a=Ue.readFileSync(o,"utf-8"),s=JSON.parse(a),c=s.messages||[],l=c;if(r>0||n)l=c.slice(r,n?r+n:void 0);let u={sessionID:t,messages:l,partial:c.length>l.length,metadata:{sessionID:t,created:s.created||s.createdAt||new Date(0).toISOString(),lastActive:s.lastActive||s.updatedAt||new Date().toISOString(),messageCount:c.length,agent:s.agent,duration:s.duration,fileCount:s.fileCount,editCount:s.editCount,toolUsage:s.toolUsage||{}}},p={success:!0,sessionID:t,totalMessages:c.length,returnedMessages:l.length,offset:r,limit:n||c.length,partial:u.partial,messages:l};if(i)p.metadata=u.metadata;return JSON.stringify(p)}catch(t){return console.error("[session-read] Error:",t),JSON.stringify({success:!1,error:String(t),sessionID:e.sessionID})}}});import*as Z from"fs";import*as Be from"path";import*as Qr from"os";import{tool as Sc}from"@opencode-ai/plugin";import{z as qe}from"zod";var Bm=Be.join(Qr.homedir(),".opencode","sessions");function kc(e){try{let t=Z.readFileSync(e,"utf-8"),n=JSON.parse(t),r=new Map;if(n.messages&&Array.isArray(n.messages))n.messages.forEach((i,o)=>{let a=i.role||"unknown",s=i.content||"";if(s&&typeof s==="string"&&s.length>0){let c={type:a==="user"?"user_message":"assistant_message",index:o,content:s,context:s};r.set(s,c)}});return r}catch(t){return console.error(`[session-search] Error indexing session ${e}:`,t),null}}function Xr(e,t){let n=e.toLowerCase(),r=t.content.toLowerCase(),i=0,o=r===n;if(o)i+=100;if(r.includes(n)&&!o)i+=50;let s=n.split(/\s+/),c=0;for(let l of s)if(l.length>2&&r.includes(l))c++;if(i+=c*10,t.type==="user_message")i+=20;return Math.min(i,100)}function Ac(){let e=q();if(!Z.existsSync(e))return[];let t=[];try{let n=Z.readdirSync(e);for(let r of n){if(!r.endsWith(".json"))continue;let i=r.slice(0,-5),o=Be.join(e,r);try{let a=Z.readFileSync(o,"utf-8"),s=JSON.parse(a),c={sessionID:i,created:s.created||s.createdAt||new Date(0).toISOString(),lastActive:s.lastActive||s.updatedAt||new Date().toISOString(),messageCount:s.messageCount||(s.messages?.length||0),agent:s.agent,duration:s.duration,fileCount:s.fileCount,editCount:s.editCount,toolUsage:s.toolUsage||{}};t.push({sessionID:i,filePath:o,metadata:c})}catch(a){console.error(`[session-search] Error reading session ${i}:`,a)}}}catch(n){console.error("[session-search] Error reading sessions directory:",n)}return t}var Lt=Sc({description:"Full-text search across all OpenCode sessions with ranked results.",args:{q:qe.string().describe("Search query text"),limit:qe.number().int().min(1).max(100).default(10).describe("Maximum number of results to return"),offset:qe.number().int().min(0).default(0).describe("Offset for pagination"),sessionID:qe.string().optional().describe("Search within a specific session only")},async execute(e){try{let{q:t,limit:n,offset:r,sessionID:i}=e;if(!t||t.trim().length===0)return JSON.stringify({success:!1,error:"Query cannot be empty",results:[]});let o=[];if(i){let c=q(),l=Be.join(c,`${i}.json`);o=[{sessionID:i,filePath:l,metadata:{sessionID:i,created:"",lastActive:"",messageCount:0,toolUsage:{}}}]}else o=Ac();let a=[];for(let c of o){let l=kc(c.filePath);if(!l)continue;let u=[];for(let[p,m]of l.entries())if(Xr(t,m)>10)u.push(m);if(u.length>0){let p=u.reduce((m,g)=>m+Xr(t,g),0)/u.length;a.push({sessionID:c.sessionID,filePath:c.filePath,metadata:c.metadata,score:Math.round(p),matches:u.slice(0,5)})}}a.sort((c,l)=>l.score-c.score);let s=a.slice(r,r+n);return JSON.stringify({success:!0,query:t,total:a.length,offset:r,limit:n,results:s.map((c)=>({sessionID:c.sessionID,score:c.score,matchCount:c.matches.length,lastActive:c.metadata.lastActive,messageCount:c.metadata.messageCount,agent:c.metadata.agent,matches:c.matches.map((l)=>({type:l.type,index:l.index,content:l.content.slice(0,200)+(l.content.length>200?"...":"")}))}))})}catch(t){return console.error("[session-search] Error:",t),JSON.stringify({success:!1,error:String(t),results:[]})}}});import*as Ke from"fs";import*as jt from"path";import{tool as Cc}from"@opencode-ai/plugin";import{z as Pc}from"zod";var Xm=jt.join(process.env.HOME||"",".opencode","sessions");function Ec(e){return jt.join(q(),`${e}.json`)}function Rc(e){let t=Ec(e);if(!Ke.existsSync(t))return null;try{let n=Ke.readFileSync(t,"utf-8"),r=JSON.parse(n);return{sessionID:e,created:r.created||r.createdAt||new Date(0).toISOString(),lastActive:r.lastActive||r.updatedAt||new Date().toISOString(),messageCount:r.messageCount||(r.messages?.length||0),agent:r.agent,duration:r.duration,fileCount:r.fileCount,editCount:r.editCount,toolUsage:r.toolUsage||{}}}catch(n){return console.error(`[session-info] Error reading session ${e}:`,n),null}}function Tc(e){let t={totalMessages:e.messageCount,totalToolsUsed:Object.values(e.toolUsage||{}).reduce((n,r)=>n+r,0),mostUsedTool:"",mostUsedToolCount:0,averageMessagesPerMinute:0};if(e.duration)t.averageMessagesPerMinute=e.messageCount/(e.duration/60000);for(let[n,r]of Object.entries(e.toolUsage||{}))if(r>t.mostUsedToolCount)t.mostUsedTool=n,t.mostUsedToolCount=r;return t}var _t=Cc({description:"Get detailed metadata and statistics about a specific session.",args:{sessionID:Pc.string().describe("Session ID to query")},async execute(e){try{let{sessionID:t}=e,n=Rc(t);if(!n)return JSON.stringify({success:!1,error:`Session ${t} not found`,sessionID:t});let r=Tc(n);return JSON.stringify({success:!0,sessionID:n.sessionID,created:n.created,lastActive:n.lastActive,messageCount:n.messageCount,agent:n.agent,duration:n.duration,fileCount:n.fileCount,editCount:n.editCount,toolUsage:n.toolUsage,stats:{totalMessages:r.totalMessages,totalToolsUsed:r.totalToolsUsed,mostUsedTool:r.mostUsedTool,mostUsedToolCount:r.mostUsedToolCount,averageMessagesPerMinute:r.averageMessagesPerMinute.toFixed(2)}})}catch(t){return console.error("[session-info] Error:",t),JSON.stringify({success:!1,error:String(t),sessionID:e.sessionID})}}});import{tool as Mc}from"@opencode-ai/plugin";import{z as Ae}from"zod";import{execFile as Dc}from"node:child_process";import{promisify as Nc}from"node:util";var Oc=Nc(Dc);async function $c(e,t){if(!e.trim())return{success:!1,error:"Pattern must not be empty"};let n=["--line-number","--column","--color=never"];if(n.push("--max-count","200"),n.push("--max-filesize","1M"),n.push("--max-depth","4"),t?.context)n.push("-C",String(t.context));if(t?.invert)n.push("-v");if(t?.type)n.push(`--type=${t.type}`);n.push(e),n.push(t?.path??process.cwd());try{let{stdout:r,stderr:i}=await Oc("rg",n,{maxBuffer:10485760,timeout:30000}),o=[],a=r.split(`
1555
- `);for(let s of a){if(!s.trim())continue;let c=s.match(/^([^:]+):(\d+):(\d+):(.+)$/);if(c)o.push({file:c[1],line:parseInt(c[2],10),column:parseInt(c[3],10),lineContent:c[4]})}return{success:!0,matches:o,count:o.length}}catch(r){if(r instanceof Error&&r.message.includes("ENOENT"))return{success:!1,error:"ripgrep (rg) not installed. Install with: apt install ripgrep or brew install ripgrep"};return{success:!1,error:r instanceof Error?r.message:"Unknown error"}}}var Zr=Mc({description:"Search for text patterns in files using ripgrep. Supports regex and file type filtering. Example: grep({pattern: 'function \\w+', type: 'ts', context: 2})",args:{pattern:Ae.string().describe("Regex pattern to search for"),path:Ae.string().optional().describe("Directory or file to search in (default: current directory)"),type:Ae.string().optional().describe("Filter by file type (ts, js, py, rust, go, java, etc.)"),context:Ae.number().optional().describe("Number of context lines around each match (default: 0)"),invert:Ae.boolean().optional().describe("Show lines that do NOT match the pattern")},async execute(e){let{pattern:t,path:n,type:r,context:i,invert:o}=e,a=await $c(t,{path:n,type:r,context:i,invert:o});if(!a.success)return JSON.stringify(a,null,2);return JSON.stringify({success:!0,matches:a.matches?.slice(0,100),count:a.count,message:a.count&&a.count>100?`Showing 100 of ${a.count} matches`:void 0},null,2)}});import{tool as Ic}from"@opencode-ai/plugin";import{z as Ht}from"zod";var ei=Ic({description:"Control Ralph-Loop iterations for achieving completion promises. Ralph complements Kraken's PDSA cycles by iteratively refining until <promise> is satisfied. Automatically triggered when chat contains <promise>...</promise> pattern, or use this tool for manual control.",args:{command:Ht.enum(["status","cancel","continue","info"]).describe("Ralph-Loop command"),sessionID:Ht.string().optional().describe("Session ID (required for status, cancel)"),maxIterations:Ht.number().min(1).max(100).optional().describe("Max iterations (default: 24)")},async execute(e){let{command:t,sessionID:n,maxIterations:r}=e;switch(t){case"status":if(!n)return JSON.stringify({success:!1,error:"sessionID required for status command"});return JSON.stringify({success:!0,session:{sessionID:n,status:"active",promise:"Use /ralph-loop in chat to start a new session",task:"N/A",currentIteration:0,maxIterations:r??24,elapsedMs:0}});case"cancel":if(!n)return JSON.stringify({success:!1,error:"sessionID required for cancel command"});return JSON.stringify({success:!0,message:`Session ${n} cancelled`});case"continue":if(!n)return JSON.stringify({success:!1,error:"sessionID required for continue command"});return JSON.stringify({success:!0,message:`Session ${n} continuing to next iteration`});case"info":return JSON.stringify({success:!0,info:{description:"Ralph-Loop: Self-referential iteration agent that continues until completion promise is satisfied",triggers:["Chat message contains <promise>...</promise> pattern","User types /ralph-loop [task] <promise>...</promise>"],defaults:{maxIterations:24,timeout:"None (continues until promise met or max iterations)"},complement:"Ralph complements Kraken's PDSA cycles. Kraken orchestrates; Ralph iterates."}});default:return JSON.stringify({success:!1,error:`Unknown command: ${t}`})}}});import{tool as Fc}from"@opencode-ai/plugin";import{z as ti}from"zod";var ni=Fc({description:"Call a specialized Kraken Code agent for a specific task. Use this to delegate to agents like Atlas (navigation), Nautilus (semantic search), Abyssal (external research), Coral (UI/UX), Siren (documentation), Scylla (code review), or Pearl (testing).",args:{agent:ti.enum(["Atlas","Nautilus","Abyssal","Coral","Siren","Scylla","Pearl","Leviathan","Maelstrom","Poseidon"]).describe("Agent to call"),task:ti.string().describe("Task or instruction for the agent")},async execute(e){let{agent:t,task:n}=e,i={Atlas:"Navigate and explore codebase structure",Nautilus:"Perform semantic code understanding and search",Abyssal:"Conduct external research and investigation",Coral:"Handle UI/UX design and visual changes",Siren:"Write or review documentation",Scylla:"Audit and review code for issues",Pearl:"Create tests and validate implementations",Leviathan:"Architectural design and system-level decisions",Maelstrom:"Orchestrate complex multi-step workflows",Poseidon:"Plan and coordinate complex tasks"}[t]||"Execute your specialized function";return`Calling @${t.toLowerCase()} for task: ${n||i}`}});import{tool as F}from"@opencode-ai/plugin";import{z as h}from"zod";import{promises as Wt}from"node:fs";import*as Jt from"node:os";import*as Ce from"node:path";var ri=Ce.join(Jt.homedir(),".kraken","learning"),ii="learning-state.json",x={experiences:[],knowledgeNodes:[],knowledgeEdges:[],patterns:[],schedules:[],stateMachines:[]},oi=!1;async function Ut(){let e=te();if(e.enabled===!1)return{ready:!1,loaded:0};let t=yi(e.storagePath);return await bi(t),x=await Lc(t),oi=!0,{ready:!0,loaded:x.experiences.length+x.knowledgeNodes.length+x.patterns.length}}async function si(e){let t=te();await de();let n=new Date().toISOString(),r={id:`exp_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,createdAt:n,updatedAt:n,summary:e.summary,details:e.details,tags:e.tags??[],outcome:e.outcome,confidence:e.confidence,relatedNodeIds:e.relatedNodeIds??[]};if(t.experienceStore?.enabled===!1||t.enabled===!1)return r;x.experiences.unshift(r);let i=t.experienceStore?.maxEntries??2000;if(x.experiences.length>i)x.experiences=x.experiences.slice(0,i);if(t.patternDetection?.enabled!==!1)jc(r,t);return await ee(t),r}function ai(e){let t=e.toLowerCase();return x.experiences.filter((n)=>{let r=n.tags?.join(" ").toLowerCase()??"";return n.summary.toLowerCase().includes(t)||n.details.toLowerCase().includes(t)||r.includes(t)})}async function ci(e){let t=te();await de();let n=new Date().toISOString(),r={id:`node_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,createdAt:n,updatedAt:n,title:e.title,content:e.content,type:e.type??"concept",tags:e.tags??[],sources:e.sources??[],metadata:e.metadata??{}};if(t.knowledgeGraph?.enabled===!1||t.enabled===!1)return r;x.knowledgeNodes.unshift(r);let i=t.knowledgeGraph?.maxNodes??5000;if(x.knowledgeNodes.length>i)x.knowledgeNodes=x.knowledgeNodes.slice(0,i);if(t.spacedRepetition?.enabled!==!1)xi(r.id,t);return await ee(t),r}function li(e){let t=e.toLowerCase();return x.knowledgeNodes.filter((n)=>{let r=n.tags?.join(" ").toLowerCase()??"";return n.title.toLowerCase().includes(t)||n.content.toLowerCase().includes(t)||r.includes(t)})}async function di(e,t,n,r=0.5){let i=te();await de();let o={id:`edge_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,sourceId:e,targetId:t,relation:n,strength:r,createdAt:new Date().toISOString()};if(i.knowledgeGraph?.enabled===!1||i.enabled===!1)return o;return x.knowledgeEdges.push(o),await ee(i),o}async function ui(e){let t=te();await de();let n=new Date().toISOString(),r=x.patterns.find((a)=>a.name===e.name);if(r)return r.description=e.description,r.triggers=e.triggers??r.triggers,r.confidence=e.confidence??r.confidence,r.evidence=e.evidence??r.evidence,r.occurrences+=1,r.lastSeen=n,r.updatedAt=n,await ee(t),r;let i={id:`pattern_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,name:e.name,description:e.description,triggers:e.triggers??[],confidence:e.confidence??0.5,evidence:e.evidence??[],occurrences:1,lastSeen:n,createdAt:n,updatedAt:n};if(t.patternDetection?.enabled===!1||t.enabled===!1)return i;x.patterns.unshift(i);let o=t.patternDetection?.maxPatterns??500;if(x.patterns.length>o)x.patterns=x.patterns.slice(0,o);return await ee(t),i}function pi(e=0){return x.patterns.filter((t)=>t.confidence>=e)}function mi(e){let t=e?new Date(e).getTime():Date.now();return x.schedules.filter((n)=>{return new Date(n.nextReview).getTime()<=t})}async function gi(e,t){let n=te();await de();let r=Math.min(5,Math.max(0,t)),i=_c(e,n),o=new Date;if(r<3)i.intervalDays=n.spacedRepetition?.initialIntervalDays??1,i.reviewCount=0;else if(i.reviewCount+=1,i.reviewCount===1)i.intervalDays=n.spacedRepetition?.initialIntervalDays??1;else i.intervalDays=Math.round(i.intervalDays*i.easeFactor);let a=i.easeFactor+(0.1-(5-r)*(0.08+(5-r)*0.02));i.easeFactor=Math.max(1.3,a);let s=n.spacedRepetition?.maxIntervalDays??365;return i.intervalDays=Math.min(i.intervalDays,s),i.lastReviewed=o.toISOString(),i.nextReview=new Date(o.getTime()+i.intervalDays*24*60*60*1000).toISOString(),await ee(n),i}async function fi(e){let t=te();await de();let n=new Date().toISOString(),r={id:`sm_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,name:e.name,states:e.states,transitions:e.transitions,initialState:e.initialState,currentState:e.initialState,metadata:e.metadata??{},createdAt:n,updatedAt:n};if(t.stateMachines?.enabled===!1||t.enabled===!1)return r;return x.stateMachines.unshift(r),await ee(t),r}function hi(){return[...x.stateMachines]}function te(){let e=Bn(),t=qn();return{enabled:e?.enabled??t?.enabled??!0,autoSave:e?.autoSave??t?.autoSave??!0,storagePath:e?.storagePath??t?.storagePath??ri,experienceStore:{enabled:e?.experienceStore?.enabled??!0,maxEntries:e?.experienceStore?.maxEntries??2000},knowledgeGraph:{enabled:e?.knowledgeGraph?.enabled??!0,maxNodes:e?.knowledgeGraph?.maxNodes??5000},patternDetection:{enabled:e?.patternDetection?.enabled??!0,minConfidence:e?.patternDetection?.minConfidence??0.6,maxPatterns:e?.patternDetection?.maxPatterns??500},spacedRepetition:{enabled:e?.spacedRepetition?.enabled??!0,initialIntervalDays:e?.spacedRepetition?.initialIntervalDays??1,easeFactor:e?.spacedRepetition?.easeFactor??2.5,maxIntervalDays:e?.spacedRepetition?.maxIntervalDays??365},stateMachines:{enabled:e?.stateMachines?.enabled??!0}}}function yi(e){if(!e)return ri;if(e.startsWith("~/"))return Ce.join(Jt.homedir(),e.slice(2));return e}async function bi(e){await Wt.mkdir(e,{recursive:!0})}async function de(){if(!oi)await Ut()}async function Lc(e){let t=Ce.join(e,ii);try{let n=await Wt.readFile(t,"utf-8"),r=JSON.parse(n);return{experiences:r.experiences??[],knowledgeNodes:r.knowledgeNodes??[],knowledgeEdges:r.knowledgeEdges??[],patterns:r.patterns??[],schedules:r.schedules??[],stateMachines:r.stateMachines??[]}}catch{return{experiences:[],knowledgeNodes:[],knowledgeEdges:[],patterns:[],schedules:[],stateMachines:[]}}}async function ee(e){if(e.autoSave===!1||e.enabled===!1)return;let t=yi(e.storagePath);await bi(t);let n=Ce.join(t,ii);await Wt.writeFile(n,JSON.stringify(x,null,2),"utf-8")}function jc(e,t){let n=t.patternDetection?.minConfidence??0.6,r=e.tags??[];for(let i of r){let o=`tag:${i}`,a=`Recurring experience tag "${i}".`,s=x.patterns.find((c)=>c.name===o);if(s)s.occurrences+=1,s.lastSeen=e.createdAt,s.confidence=Math.min(1,s.confidence+0.05),s.updatedAt=new Date().toISOString();else x.patterns.unshift({id:`pattern_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,name:o,description:a,triggers:[i],confidence:n,evidence:[e.summary],occurrences:1,lastSeen:e.createdAt,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()})}}function xi(e,t){if(x.schedules.find((o)=>o.nodeId===e))return;let r=t.spacedRepetition?.initialIntervalDays??1,i=new Date;x.schedules.push({nodeId:e,intervalDays:r,easeFactor:t.spacedRepetition?.easeFactor??2.5,nextReview:new Date(i.getTime()+r*24*60*60*1000).toISOString(),reviewCount:0})}function _c(e,t){let n=x.schedules.find((r)=>r.nodeId===e);if(!n)xi(e,t),n=x.schedules.find((r)=>r.nodeId===e);if(!n){let r={nodeId:e,intervalDays:t.spacedRepetition?.initialIntervalDays??1,easeFactor:t.spacedRepetition?.easeFactor??2.5,nextReview:new Date().toISOString(),reviewCount:0};return x.schedules.push(r),r}return n}var qt=h.number().min(0).max(1),vi=F({description:"Add a learning experience to the unified memory system.",args:{summary:h.string().min(1).describe("Short summary of the experience"),details:h.string().min(1).describe("Full details of the experience"),tags:h.array(h.string()).optional().describe("Tags describing the experience"),outcome:h.string().optional().describe("Outcome or result of the experience"),confidence:qt.optional().describe("Confidence score (0-1)"),relatedNodeIds:h.array(h.string()).optional().describe("Related knowledge node IDs")},async execute(e){let t=await si(e);return JSON.stringify({success:!0,experience:t},null,2)}}),wi=F({description:"Search stored experiences by keyword.",args:{query:h.string().min(1).describe("Search query")},async execute(e){let t=ai(e.query);return JSON.stringify({success:!0,experiences:t},null,2)}}),Si=F({description:"Add a knowledge node to the learning graph.",args:{title:h.string().min(1).describe("Node title"),content:h.string().min(1).describe("Node content"),type:h.string().optional().describe("Node type (concept, decision, procedure, etc.)"),tags:h.array(h.string()).optional().describe("Tags associated with the node"),sources:h.array(h.string()).optional().describe("Source references or URLs"),metadata:h.record(h.string(),h.unknown()).optional().describe("Additional metadata")},async execute(e){let t=await ci(e);return JSON.stringify({success:!0,node:t},null,2)}}),ki=F({description:"Search knowledge nodes by keyword.",args:{query:h.string().min(1).describe("Search query")},async execute(e){let t=li(e.query);return JSON.stringify({success:!0,nodes:t},null,2)}}),Ai=F({description:"Create a relationship between two knowledge nodes.",args:{sourceId:h.string().min(1).describe("Source node ID"),targetId:h.string().min(1).describe("Target node ID"),relation:h.string().min(1).describe("Relationship description"),strength:h.number().min(0).max(1).optional().describe("Relationship strength (0-1)")},async execute(e){let t=await di(e.sourceId,e.targetId,e.relation,e.strength??0.5);return JSON.stringify({success:!0,edge:t},null,2)}}),Ci=F({description:"Record or update a learning pattern.",args:{name:h.string().min(1).describe("Pattern name"),description:h.string().min(1).describe("Pattern description"),triggers:h.array(h.string()).optional().describe("Trigger keywords or signals"),confidence:qt.optional().describe("Confidence score (0-1)"),evidence:h.array(h.string()).optional().describe("Evidence notes")},async execute(e){let t=await ui(e);return JSON.stringify({success:!0,pattern:t},null,2)}}),Pi=F({description:"List known patterns above a confidence threshold.",args:{minConfidence:qt.optional().describe("Minimum confidence to include")},async execute(e){let t=pi(e.minConfidence??0);return JSON.stringify({success:!0,patterns:t},null,2)}}),Ei=F({description:"Get the spaced repetition review queue.",args:{dueBefore:h.string().optional().describe("ISO timestamp cutoff for due reviews")},async execute(e){let t=mi(e.dueBefore);return JSON.stringify({success:!0,queue:t},null,2)}}),Ri=F({description:"Record a spaced repetition review for a knowledge node.",args:{nodeId:h.string().min(1).describe("Knowledge node ID"),quality:h.number().min(0).max(5).describe("Review quality score (0-5)")},async execute(e){let t=await gi(e.nodeId,e.quality);return JSON.stringify({success:!0,schedule:t},null,2)}}),Ti=F({description:"Create a learning state machine for workflow tracking.",args:{name:h.string().min(1).describe("State machine name"),states:h.array(h.string()).min(1).describe("Possible states"),transitions:h.array(h.object({from:h.string().min(1),to:h.string().min(1),event:h.string().min(1),description:h.string().optional()})).min(1).describe("State transitions"),initialState:h.string().min(1).describe("Initial state"),metadata:h.record(h.string(),h.unknown()).optional().describe("Additional metadata")},async execute(e){let t=await fi(e);return JSON.stringify({success:!0,machine:t},null,2)}}),Mi=F({description:"List all learning state machines.",args:{},async execute(){let e=hi();return JSON.stringify({success:!0,machines:e},null,2)}});Kt();Ve();Yt();ne();ne();import{tool as L}from"@opencode-ai/plugin";import{z as v}from"zod";var Hi=L({description:"Get hover information (type, documentation) for a symbol at a position in a file. Use this to get information about variables, functions, classes, etc.",args:{path:v.string().describe("Absolute path to the source file"),line:v.number().describe("0-indexed line number"),character:v.number().describe("0-indexed character position")},async execute({path:e,line:t,character:n}){try{let r=await $(e,async(o)=>{return await o.hover(e,t,n)}),i=r?Xt(r):"No hover information available";return JSON.stringify({success:!0,hover:i})}catch(r){return JSON.stringify({success:!1,error:r instanceof Error?r.message:String(r)})}}}),Wi=L({description:"Jump to the definition of a symbol at the given position. Returns the location where the symbol is defined.",args:{path:v.string().describe("Absolute path to the source file"),line:v.number().describe("0-indexed line number"),character:v.number().describe("0-indexed character position")},async execute({path:e,line:t,character:n}){try{let r=await $(e,async(a)=>{return await a.definition(e,t,n)});if(!r)return JSON.stringify({success:!0,message:"No definition found"});let o=(Array.isArray(r)?r:[r]).map(ue);return JSON.stringify({success:!0,locations:o})}catch(r){return JSON.stringify({success:!1,error:r instanceof Error?r.message:String(r)})}}}),Ji=L({description:"Find all references to a symbol in the workspace. Returns a list of locations where the symbol is used.",args:{path:v.string().describe("Absolute path to the source file"),line:v.number().describe("0-indexed line number"),character:v.number().describe("0-indexed character position"),includeDeclaration:v.boolean().optional().default(!0).describe("Include the declaration location in results")},async execute({path:e,line:t,character:n,includeDeclaration:r}){try{let i=await $(e,async(s)=>{return await s.references(e,t,n,r)});if(!i)return JSON.stringify({success:!0,message:"No references found"});let a=(Array.isArray(i)?i:[i]).map(ue);return JSON.stringify({success:!0,count:a.length,references:a})}catch(i){return JSON.stringify({success:!1,error:i instanceof Error?i.message:String(i)})}}}),Ui=L({description:"Get all symbols (classes, functions, variables) in a document. Returns a hierarchical tree of symbols with their locations.",args:{path:v.string().describe("Absolute path to the source file")},async execute({path:e}){try{let t=await $(e,async(i)=>{return await i.documentSymbols(e)});if(!t)return JSON.stringify({success:!0,message:"No symbols found"});let n=Array.isArray(t)?t:[t],r=(i,o=0)=>{return{kind:pe(i.kind),name:i.name,detail:i.detail||void 0,range:i.range,children:i.children?.map((a)=>r(a,o+1))}};return JSON.stringify({success:!0,symbols:n.map((i)=>r(i))})}catch(t){return JSON.stringify({success:!1,error:t instanceof Error?t.message:String(t)})}}}),qi=L({description:"Search for symbols across the entire workspace. Use this to find classes, functions, etc. without knowing their location.",args:{query:v.string().describe("Search query (e.g., 'MyClass', 'createUser')")},async execute({query:e}){try{let t=await $(process.cwd(),async(i)=>{return await i.workspaceSymbols(e)});if(!t)return JSON.stringify({success:!0,message:"No symbols found"});let r=(Array.isArray(t)?t:[t]).map((i)=>({kind:pe(i.kind),name:i.name,containerName:i.containerName||void 0,location:ue(i.location)}));return JSON.stringify({success:!0,count:r.length,symbols:r})}catch(t){return JSON.stringify({success:!1,error:t instanceof Error?t.message:String(t)})}}}),Bi=L({description:"Get diagnostics (errors, warnings, hints) for a file. Returns all issues reported by the language server.",args:{path:v.string().describe("Absolute path to the source file"),severity:v.enum(["error","warning","information","hint","all"]).optional().default("all").describe("Filter by severity level")},async execute({path:e,severity:t}){try{let n=await $(e,async(a)=>{return await a.diagnostics(e)}),{filterDiagnosticsBySeverity:r}=await Promise.resolve().then(() => (ne(),Pe)),i=n.items||[];if(t!=="all")i=r(i,t);let o=i.map((a)=>({severity:a.severity,message:a.message,range:a.range,source:a.source,code:a.code}));return JSON.stringify({success:!0,count:o.length,diagnostics:o})}catch(n){return JSON.stringify({success:!1,error:n instanceof Error?n.message:String(n)})}}}),Ki=L({description:"Prepare a rename operation at a position. Returns the range that would be renamed, if valid.",args:{path:v.string().describe("Absolute path to the source file"),line:v.number().describe("0-indexed line number"),character:v.number().describe("0-indexed character position")},async execute({path:e,line:t,character:n}){try{let r=await $(e,async(i)=>{return await i.prepareRename(e,t,n)});if(!r)return JSON.stringify({success:!0,message:"Cannot rename at this position"});return JSON.stringify({success:!0,result:r})}catch(r){return JSON.stringify({success:!1,error:r instanceof Error?r.message:String(r)})}}}),Vi=L({description:"Rename a symbol at a position. Performs a workspace-wide rename of the symbol to the new name.",args:{path:v.string().describe("Absolute path to the source file"),line:v.number().describe("0-indexed line number"),character:v.number().describe("0-indexed character position"),newName:v.string().describe("New name for the symbol")},async execute({path:e,line:t,character:n,newName:r}){try{let i=await $(e,async(u)=>{return await u.rename(e,t,n,r)}),{formatWorkspaceEdit:o,applyWorkspaceEdit:a,formatApplyResult:s}=await Promise.resolve().then(() => (ne(),Pe)),c=await a(i),l=o(i);return JSON.stringify({success:!0,workspaceEdit:l,applyResult:s(c)})}catch(i){return JSON.stringify({success:!1,error:i instanceof Error?i.message:String(i)})}}}),Gi=L({description:"Get available code actions (refactors, quick fixes) for a range. Returns a list of actions that can be applied to fix issues or refactor code.",args:{path:v.string().describe("Absolute path to the source file"),startLine:v.number().describe("0-indexed start line"),startChar:v.number().describe("0-indexed start character"),endLine:v.number().describe("0-indexed end line"),endChar:v.number().describe("0-indexed end character"),only:v.array(v.string()).optional().describe("Filter by action kind (e.g., 'quickfix', 'refactor')")},async execute({path:e,startLine:t,startChar:n,endLine:r,endChar:i,only:o}){try{let a=await $(e,async(l)=>{return await l.codeAction(e,t,n,r,i,o)}),{formatCodeActions:s}=await Promise.resolve().then(() => (ne(),Pe)),c=Array.isArray(a)?a:[];return JSON.stringify({success:!0,count:c.length||0,actions:c||[]})}catch(a){return JSON.stringify({success:!1,error:a instanceof Error?a.message:String(a)})}}}),zi=L({description:"Resolve a code action to get its full details (including edits).",args:{action:v.object({}).passthrough().describe("Code action object from lsp_code_actions")},async execute({action:e}){try{let{formatWorkspaceEdit:t,applyWorkspaceEdit:n,formatApplyResult:r}=await Promise.resolve().then(() => (ne(),Pe)),i=await $(process.cwd(),async(o)=>{return await o.codeActionResolve(e)});if(i&&typeof i==="object"&&"edit"in i){let o=await n(i.edit);return JSON.stringify({success:!0,action:i,workspaceEdit:t(i.edit),applyResult:r(o)})}return JSON.stringify({success:!0,action:i})}catch(t){return JSON.stringify({success:!1,error:t instanceof Error?t.message:String(t)})}}}),Yi=L({description:"List available LSP servers and their installation status. Shows which servers are configured and installed for different file types.",args:{extension:v.string().optional().describe("Filter by file extension (e.g., 'ts', 'py', 'js')")},async execute({extension:e}){try{let{BUILTIN_SERVERS:t,findServerForExtension:n}=await Promise.resolve().then(() => (Ve(),Ni));if(e){let i=await n(e);return JSON.stringify({success:!0,extension:e,lookup:i})}let r=t.map((i)=>({id:i.id,extensions:i.extensions,disabled:i.disabled||!1}));return JSON.stringify({success:!0,servers:r,count:r.length})}catch(t){return JSON.stringify({success:!1,error:t instanceof Error?t.message:String(t)})}}});var Xc=[{keyword:"blitzkrieg",mode:"blitzkrieg",language:"English",aliases:["ulw","max","full"]},{keyword:"ultra work",mode:"blitzkrieg",language:"English"},{keyword:"max performance",mode:"blitzkrieg",language:"English"},{keyword:"go all out",mode:"blitzkrieg",language:"English"},{keyword:"full power",mode:"blitzkrieg",language:"English"},{keyword:"search",mode:"search",language:"English",aliases:["find","locate","look for"]},{keyword:"find",mode:"search",language:"English"},{keyword:"locate",mode:"search",language:"English"},{keyword:"look for",mode:"search",language:"English"},{keyword:"explore",mode:"search",language:"English"},{keyword:"analyze",mode:"analyze",language:"English",aliases:["investigate","examine"]},{keyword:"investigate",mode:"analyze",language:"English"},{keyword:"examine",mode:"analyze",language:"English"},{keyword:"deep analysis",mode:"analyze",language:"English"},{keyword:"detailed analysis",mode:"analyze",language:"English"},{keyword:"ultrathink",mode:"ultrathink",language:"English",aliases:["think deeply","deep think"]},{keyword:"think deeply",mode:"ultrathink",language:"English"},{keyword:"deep think",mode:"ultrathink",language:"English"},{keyword:"extended thinking",mode:"ultrathink",language:"English"},{keyword:"careful reasoning",mode:"ultrathink",language:"English"},{keyword:"blitzkrieg",mode:"blitzkrieg",language:"Spanish",aliases:["ulw","trabajo ultra"]},{keyword:"trabajo ultra",mode:"blitzkrieg",language:"Spanish"},{keyword:"máximo rendimiento",mode:"blitzkrieg",language:"Spanish"},{keyword:"buscar",mode:"search",language:"Spanish",aliases:["encontrar","localizar"]},{keyword:"encontrar",mode:"search",language:"Spanish"},{keyword:"localizar",mode:"search",language:"Spanish"},{keyword:"analizar",mode:"analyze",language:"Spanish",aliases:["investigar","examinar"]},{keyword:"investigar",mode:"analyze",language:"Spanish"},{keyword:"examinar",mode:"analyze",language:"Spanish"},{keyword:"pensar profundamente",mode:"ultrathink",language:"Spanish",aliases:["piensa","razonamiento profundo"]},{keyword:"piensa",mode:"ultrathink",language:"Spanish"},{keyword:"razonamiento profundo",mode:"ultrathink",language:"Spanish"},{keyword:"blitzkrieg",mode:"blitzkrieg",language:"French",aliases:["ulw","travail ultra"]},{keyword:"travail ultra",mode:"blitzkrieg",language:"French"},{keyword:"chercher",mode:"search",language:"French",aliases:["rechercher","trouver"]},{keyword:"rechercher",mode:"search",language:"French"},{keyword:"trouver",mode:"search",language:"French"},{keyword:"analyser",mode:"analyze",language:"French",aliases:["investiguer","examiner"]},{keyword:"investiguer",mode:"analyze",language:"French"},{keyword:"examiner",mode:"analyze",language:"French"},{keyword:"réfléchir profondément",mode:"ultrathink",language:"French",aliases:["réfléchis","pensée profonde"]},{keyword:"réfléchis",mode:"ultrathink",language:"French"},{keyword:"blitzkrieg",mode:"blitzkrieg",language:"German",aliases:["ulw","maximal"]},{keyword:"maximale leistung",mode:"blitzkrieg",language:"German"},{keyword:"suchen",mode:"search",language:"German",aliases:["finden","lokalisieren"]},{keyword:"finden",mode:"search",language:"German"},{keyword:"analysieren",mode:"analyze",language:"German",aliases:["untersuchen","prüfen"]},{keyword:"untersuchen",mode:"analyze",language:"German"},{keyword:"nachdenken",mode:"ultrathink",language:"German",aliases:["denk nach","sorgfältig denken"]},{keyword:"denk nach",mode:"ultrathink",language:"German"},{keyword:"sorgfältig denken",mode:"ultrathink",language:"German"},{keyword:"강력한",mode:"blitzkrieg",language:"Korean",aliases:["울트라워크","최대"]},{keyword:"울트라워크",mode:"blitzkrieg",language:"Korean"},{keyword:"최대",mode:"blitzkrieg",language:"Korean"},{keyword:"최고 성능",mode:"blitzkrieg",language:"Korean"},{keyword:"검색",mode:"search",language:"Korean",aliases:["찾아","찾기"]},{keyword:"찾아",mode:"search",language:"Korean"},{keyword:"찾기",mode:"search",language:"Korean"},{keyword:"분석",mode:"analyze",language:"Korean",aliases:["조사","검토"]},{keyword:"조사",mode:"analyze",language:"Korean"},{keyword:"검토",mode:"analyze",language:"Korean"},{keyword:"생각해",mode:"ultrathink",language:"Korean",aliases:["깊게 생각","신중한 사고"]},{keyword:"깊게 생각",mode:"ultrathink",language:"Korean"},{keyword:"신중한 사고",mode:"ultrathink",language:"Korean"},{keyword:"强力",mode:"blitzkrieg",language:"Chinese (Simplified)",aliases:["超神","最大"]},{keyword:"超神",mode:"blitzkrieg",language:"Chinese (Simplified)"},{keyword:"最大",mode:"blitzkrieg",language:"Chinese (Simplified)"},{keyword:"搜索",mode:"search",language:"Chinese (Simplified)",aliases:["查找","定位"]},{keyword:"查找",mode:"search",language:"Chinese (Simplified)"},{keyword:"定位",mode:"search",language:"Chinese (Simplified)"},{keyword:"分析",mode:"analyze",language:"Chinese (Simplified)",aliases:["调查","检查"]},{keyword:"调查",mode:"analyze",language:"Chinese (Simplified)"},{keyword:"检查",mode:"analyze",language:"Chinese (Simplified)"},{keyword:"深度思考",mode:"ultrathink",language:"Chinese (Simplified)",aliases:["仔细思考","让我想想"]},{keyword:"仔细思考",mode:"ultrathink",language:"Chinese (Simplified)"},{keyword:"让我想想",mode:"ultrathink",language:"Chinese (Simplified)"},{keyword:"强力",mode:"blitzkrieg",language:"Chinese (Traditional)",aliases:["超神","最大"]},{keyword:"超神",mode:"blitzkrieg",language:"Chinese (Traditional)"},{keyword:"最大",mode:"blitzkrieg",language:"Chinese (Traditional)"},{keyword:"搜索",mode:"search",language:"Chinese (Traditional)",aliases:["查找","定位"]},{keyword:"查找",mode:"search",language:"Chinese (Traditional)"},{keyword:"定位",mode:"search",language:"Chinese (Traditional)"},{keyword:"分析",mode:"analyze",language:"Chinese (Traditional)",aliases:["調查","檢查"]},{keyword:"調查",mode:"analyze",language:"Chinese (Traditional)"},{keyword:"檢查",mode:"analyze",language:"Chinese (Traditional)"},{keyword:"深度思考",mode:"ultrathink",language:"Chinese (Traditional)",aliases:["仔細思考","讓我思考"]},{keyword:"仔細思考",mode:"ultrathink",language:"Chinese (Traditional)"},{keyword:"讓我思考",mode:"ultrathink",language:"Chinese (Traditional)"},{keyword:"強力",mode:"blitzkrieg",language:"Japanese",aliases:["最大","フルパワー"]},{keyword:"最大",mode:"blitzkrieg",language:"Japanese"},{keyword:"フルパワー",mode:"blitzkrieg",language:"Japanese"},{keyword:"検索",mode:"search",language:"Japanese",aliases:["探す","見つける"]},{keyword:"探す",mode:"search",language:"Japanese"},{keyword:"見つける",mode:"search",language:"Japanese"},{keyword:"分析",mode:"analyze",language:"Japanese",aliases:["調査","検討"]},{keyword:"調査",mode:"analyze",language:"Japanese"},{keyword:"検討",mode:"analyze",language:"Japanese"},{keyword:"深く考える",mode:"ultrathink",language:"Japanese",aliases:["思考","注意深く考える"]},{keyword:"思考",mode:"ultrathink",language:"Japanese"},{keyword:"注意深く考える",mode:"ultrathink",language:"Japanese"},{keyword:"blitzkrieg",mode:"blitzkrieg",language:"Portuguese",aliases:["ulw","trabalho ultra"]},{keyword:"trabalho ultra",mode:"blitzkrieg",language:"Portuguese"},{keyword:"pesquisar",mode:"search",language:"Portuguese",aliases:["procurar","encontrar"]},{keyword:"procurar",mode:"search",language:"Portuguese"},{keyword:"encontrar",mode:"search",language:"Portuguese"},{keyword:"analisar",mode:"analyze",language:"Portuguese",aliases:["investigar","examinar"]},{keyword:"investigar",mode:"analyze",language:"Portuguese"},{keyword:"examinar",mode:"analyze",language:"Portuguese"},{keyword:"pensar profundamente",mode:"ultrathink",language:"Portuguese",aliases:["pense","raciocínio profundo"]},{keyword:"pense",mode:"ultrathink",language:"Portuguese"},{keyword:"raciocínio profundo",mode:"ultrathink",language:"Portuguese"},{keyword:"blitzkrieg",mode:"blitzkrieg",language:"Italian",aliases:["ulw","lavoro ultra"]},{keyword:"lavoro ultra",mode:"blitzkrieg",language:"Italian"},{keyword:"cercare",mode:"search",language:"Italian",aliases:["trovare","ricercare"]},{keyword:"trovare",mode:"search",language:"Italian"},{keyword:"ricercare",mode:"search",language:"Italian"},{keyword:"analizzare",mode:"analyze",language:"Italian",aliases:["indagare","esaminare"]},{keyword:"indagare",mode:"analyze",language:"Italian"},{keyword:"esaminare",mode:"analyze",language:"Italian"},{keyword:"pensare attentamente",mode:"ultrathink",language:"Italian",aliases:["pensa","pensiero profondo"]},{keyword:"pensa",mode:"ultrathink",language:"Italian"},{keyword:"pensiero profondo",mode:"ultrathink",language:"Italian"},{keyword:"ультраворк",mode:"blitzkrieg",language:"Russian",aliases:["ulw","максимально"]},{keyword:"максимально",mode:"blitzkrieg",language:"Russian"},{keyword:"поиск",mode:"search",language:"Russian",aliases:["найти","искать"]},{keyword:"найти",mode:"search",language:"Russian"},{keyword:"искать",mode:"search",language:"Russian"},{keyword:"анализировать",mode:"analyze",language:"Russian",aliases:["исследовать","изучить"]},{keyword:"исследовать",mode:"analyze",language:"Russian"},{keyword:"изучить",mode:"analyze",language:"Russian"},{keyword:"подумать",mode:"ultrathink",language:"Russian",aliases:["подумай","тщательно подумать"]},{keyword:"подумай",mode:"ultrathink",language:"Russian"},{keyword:"тщательно подумать",mode:"ultrathink",language:"Russian"},{keyword:"ألترا وورك",mode:"blitzkrieg",language:"Arabic",aliases:["العمل القوي","الأقصى"]},{keyword:"بحث",mode:"search",language:"Arabic",aliases:["إيجاد","تحديد موقع"]},{keyword:"تحليل",mode:"analyze",language:"Arabic",aliases:["تحقيق","فحص"]},{keyword:"تفكير عميق",mode:"ultrathink",language:"Arabic",aliases:["فكر","تفكر بعناية"]},{keyword:"فكر",mode:"ultrathink",language:"Arabic"},{keyword:"अल्ट्रावर्क",mode:"blitzkrieg",language:"Hindi",aliases:["अधिकतम","अधिक कार्य"]},{keyword:"अधिकतम",mode:"blitzkrieg",language:"Hindi"},{keyword:"अधिक कार्य",mode:"blitzkrieg",language:"Hindi"},{keyword:"खोज",mode:"search",language:"Hindi",aliases:["ढूंढना","ढूंढो"]},{keyword:"विश्लेषण",mode:"analyze",language:"Hindi",aliases:["जांच","जांचना"]},{keyword:"जांच",mode:"analyze",language:"Hindi"},{keyword:"जांचना",mode:"analyze",language:"Hindi"},{keyword:"गहरी सोच",mode:"ultrathink",language:"Hindi",aliases:["सोचो","ध्यानपूर्वक सोच"]},{keyword:"सोचो",mode:"ultrathink",language:"Hindi"},{keyword:"ध्यानपूर्वक सोच",mode:"ultrathink",language:"Hindi"}];function Xi(e){let t=e.toLowerCase(),n=new Map;for(let s of Xc){let c=s.keyword.toLowerCase();if(t.includes(c)){if(!n.has(s.mode))n.set(s.mode,new Set);n.get(s.mode).add(s.keyword)}if(s.aliases)for(let l of s.aliases){let u=l.toLowerCase();if(t.includes(u)){if(!n.has(s.mode))n.set(s.mode,new Set);n.get(s.mode).add(s.keyword)}}}if(n.size===0)return null;let r="",i=0;for(let[s,c]of n.entries())if(c.size>i)r=s,i=c.size;let o=Array.from(n.get(r)),a=i>2?0.9:i>1?0.7:0.5;return console.log(`[mode-detector] Detected mode "${r}" with ${i} keyword matches (confidence: ${a})`),{mode:r,keywords:o,confidence:a}}var Qc={blitzkrieg:{name:"Ultrawork",enabled:!0,parallelAgents:4,concurrencyLimits:{anthropic:2,openai:3,google:3}},search:{name:"Search",enabled:!0,maxResults:50,useExplore:!0,useLibrarian:!0},analyze:{name:"Analyze",enabled:!0,consultationPhases:3,expertAgents:["oracle","Abyssal","Siren"]},ultrathink:{name:"Ultrathink",enabled:!0,thinkingBudget:32000,autoVariantSwitch:!0}};function Qi(e){return Qc[e]}var Zc=new Map;function Zi(e,t,n){let r=Qi(t);if(!r||!r.enabled)return console.log(`[mode-switcher] Mode "${t}" not found or disabled`),!1;let i={name:t,activatedAt:Date.now(),config:r};if(Zc.set(e,i),console.log(`[mode-switcher] Activated mode "${t}" for session ${e}`),n?.onModeActivate)n.onModeActivate({mode:t,keyword:""});return!0}function eo(e,t){let n=Kn()||{};if(t?.enabled===!1)return{};return{"chat.message":async(r,i)=>{if(!i.parts)return;let{sessionID:o}=r;for(let a of i.parts)if(a.type==="text"){let s=a.text;if(s&&o){let c=Xi(s);if(c&&t?.autoActivate!==!1){if(console.log(`[mode-hooks] Detected mode "${c.mode}" with ${c.keywords.length} keywords for session ${o}`),Zi(o,c.mode),c.mode==="blitzkrieg"){let l=n.blitzkrieg;console.log("[mode-hooks] Activating Blitzkrieg mode")}else if(c.mode==="search")console.log("[mode-hooks] Activating Search mode");else if(c.mode==="analyze")console.log("[mode-hooks] Activating Analyze mode");else if(c.mode==="ultrathink")console.log("[mode-hooks] Activating Ultrathink mode")}}}}}}var el=S("session-storage-hook");function Qt(e,t){let n=t?.config??{enabled:!0,recordTodos:!0,recordTranscripts:!0};if(!n.enabled)return{};function r(o){return o.filter((a)=>a.type==="text").map((a)=>a.text).join(`
1556
- `).trim()}function i(o){let a=r(o),s=[/<todo>[\s\S]*?<\/todo>/gi,/<task>[\s\S]*?<\/task>/gi,/\[TODO\]([\s\S]*?)\]/gi,/\[ \]\s*([^\]]*)\]/gi];for(let c of s){let l=a.match(c);if(l)return{content:l[1]||l[0].replace(/<\/?[^\>]*>/g,"").replace(/\[\/?[^]]*\]/g,"").trim()}}return null}return{"chat.message":async(o,a)=>{if(!n.enabled)return;let{sessionID:s}=o;if(!s)return;if(n.recordTodos){let c=i(a.parts);if(c)Dr(s,`TODO: ${c.content}`)}if(n.recordTranscripts){let c=r(a.parts);if(c)Nr(s,c)}},"tool.execute.after":async(o,a)=>{if(!n.enabled)return;let{tool:s,sessionID:c}=o;if(!c)return;if(n.recordTranscripts)je(c,s,{},a.output||"");if(c)el.info(`Tool ${s} completed for session ${c}`)}}}var Qg=Qt({});function to(e,t){let n={enabled:t?.config?.enabled??!0,mcp:t?.config?.mcp??!0,commands:t?.config?.commands??!0,skills:t?.config?.skills??!0,agents:t?.config?.agents??!0,hooks:t?.config?.hooks??!0,toggles:t?.config?.toggles??{}};return{config:async(r)=>{try{if(r){if(Object.assign(n,r?.claudeCodeCompatibility??r),r?.claudeCodeCompatibility?.toggles)n.toggles={...n.toggles,...r.claudeCodeCompatibility.toggles}}}catch(i){console.error("[claude-code-hooks] Error applying config:",i)}},"tool.execute.before":async(r,i)=>{if(!n.enabled||n.hooks===!1||n.toggles?.hooks===!1)return;console.log("[claude-code-hooks] Processing tool execution")},"tool.execute.after":async(r,i)=>{if(!n.enabled||n.hooks===!1||n.toggles?.hooks===!1)return;console.log("[claude-code-hooks] Tool execution completed")}}}var tl=["anthropic","bedrock","google","openai"],nl=["think","let me think","i need to think","take time to think","think about this","think carefully","piensa","déjame pensar","necesito pensar","piénsalo","piensa cuidadosamente","réfléchis","laissez-moi réfléchir","je dois réfléchir","réfléchissez-y","réfléchir attentivement","denk nach","lass mich nachdenken","ich muss nachdenken","denk darüber nach","denke sorgfältig","pense","deixe-me pensar","preciso pensar","pense sobre isso","pense cuidadosamente","pensa","fammi pensare","devo pensare","pensa a questo","pensa attentamente","подумай","дай мне подумать","мне нужно подумать","подумай об этом","подумай внимательно","考えて","考えさせて","考える必要がある","これについて考えて","注意深く考えて","思考","让我想想","我需要思考","思考这个","仔细思考","思考","讓我思考","我需要思考","思考這個","仔細思考","생각해","생각하게 해줘","생각해야 해","이것에 대해 생각해","신중하게 생각해"];function rl(e){return tl.some((t)=>e.toLowerCase().includes(t.toLowerCase()))}var no=new Map;function il(e){return no.get(e)}function ol(e,t){no.set(e,{enabled:t,activatedAt:Date.now()})}function sl(e){let t=e.toLowerCase();for(let n of nl)if(t.includes(n))return!0;return!1}function ro(e){return{"chat.message":async(t,n)=>{let{sessionID:r}=t,o=(n?.parts||[]).filter((a)=>a.type==="text").map((a)=>a.text).join(`
1557
- `).trim();if(typeof o==="string"&&o.length>0){if(sl(o))console.log(`[think-mode] Activated for session ${r}`),ol(r,!0)}return},"chat.params":async(t,n)=>{let{sessionID:r,provider:i}=t;if(il(r)?.enabled){n.variant="max";let a=i?.info?.id||i?.options?.providerID||"";if(rl(a)){if(console.log(`[think-mode] Applying think mode settings for provider ${a}`),!n.options)n.options={};if(a.includes("anthropic"))n.options.thinking={budget_tokens:20000,type:"auto"}}}return}}}import{tool as ze}from"@opencode-ai/plugin";import{z as re}from"zod";function al(e,t){if(!t)return e;return`${e}
2008
+ `)||`Iteration ${l.currentIteration} completed.`}function s(l){return ec.replace("{prompt}",l.task).replace("{promise}",l.promise).replace("{iterations}",a(l))}function c(l){return l.filter((u)=>u.type==="text").map((u)=>("text"in u)?u.text:"").join(`
2009
+ `).trim()}return{"chat.message":async(l,u)=>{if(!n.enabled)return;let{sessionID:p}=l,g=c(u.parts),m=i(g);if(!m)return;let{promise:f,task:b}=m,y=Fr(p);if(y&&y.status==="active"){if(y.currentIteration++,y.transcript.push(`Iteration ${y.currentIteration}:
2010
+ ${g}
2011
+ `),y.currentIteration>=y.maxIterations)y.status="maxed_out",console.log(`[ralph-loop] Session ${p} reached max iterations (${y.maxIterations})`);Tt(p,y),console.log(`[ralph-loop] Continuing iteration ${y.currentIteration}/${y.maxIterations} for session ${p}`),console.log(`[ralph-loop] Next prompt: ${s(y).substring(0,100)}...`)}else{let C=n.maxIterations??Lr,D=o(p,f,b,C);console.log(`[ralph-loop] Starting new session ${p} with promise: "${f.substring(0,50)}..."`),Tt(p,D),r.set(p,D)}}}}import{exec as tc}from"node:child_process";import{readFile as nc,writeFile as rc,mkdir as ic}from"node:fs/promises";import{existsSync as Hr}from"node:fs";import{join as Nt}from"node:path";import{homedir as oc}from"node:os";var sc="kraken-code",Mt=86400000,He=Nt(oc(),".config","kraken-code","cache"),Ur="update-check.json",T=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",P=k("auto-update-checker"),We="",jr=null;function Dt(){if(!We)try{We=(()=>{throw new Error("Cannot require module "+"../package.json");})().version||"0.0.0"}catch(e){We="0.0.0"}return We}function Br(e){let t=e.cacheDir??He;return Nt(t,Ur)}async function ac(e){try{let t=Br(e);if(!Hr(t))return null;let n=await nc(t,"utf-8");return JSON.parse(n)}catch(t){return null}}async function cc(e,t){try{let n=e.cacheDir??He;if(!Hr(n))await ic(n,{recursive:!0});let r=Br(e);await rc(r,JSON.stringify(t,null,2),"utf-8")}catch(n){if(T)P.warn("Failed to save cache:",n)}}async function lc(){return new Promise((e)=>{tc(`npm view ${sc} version`,(t,n,r)=>{if(t){if(T)P.warn("Failed to check npm registry:",t);e(null);return}if(r){if(T)P.warn("npm error:",r);e(null);return}let i=n.trim();if(i)e(i);else e(null)})})}function dc(e,t){let n=e.split(".").map(Number),r=t.split(".").map(Number);for(let i=0;i<Math.max(n.length,r.length);i++){let o=n[i]??0,a=r[i]??0;if(o>a)return 1;if(o<a)return-1}return 0}async function Wr(e){let t=Dt(),n=e.cacheTTL??Mt,r=Date.now(),i=await ac(e);if(jr=i,i&&r-i.lastChecked<n){if(T)P.debug(`Using cached update check from ${new Date(i.lastChecked).toISOString()}`);return{updateAvailable:i.updateAvailable,latestVersion:i.latestVersion}}if(T)P.debug("Checking npm registry for updates...");let o=await lc();if(!o){if(T)P.debug("Could not determine latest version");return{updateAvailable:!1,latestVersion:null}}let a=dc(o,t)>0,s={currentVersion:t,latestVersion:o,lastChecked:r,updateAvailable:a};return await cc(e,s),jr=s,{updateAvailable:a,latestVersion:o}}function Jr(e,t){let n=t?.config??{enabled:!0,checkOnLoad:!0,cacheDir:He,cacheTTL:Mt,notify:!0,checkInterval:Mt};return{config:async(r)=>{if(!n.enabled)return;if(n.checkOnLoad){if(T)P.debug("Checking for updates on load...");let{updateAvailable:i,latestVersion:o}=await Wr(n);if(i&&n.notify){if(T)P.info("UPDATE AVAILABLE"),P.info(`Current version: ${Dt()}`),P.info(`Latest version: ${o}`),P.info("To update, run: npm update kraken-code (or bun update kraken-code)")}else if(!i){if(T)P.debug(`You are using the latest version: ${Dt()}`)}}},event:async(r)=>{if(!n.enabled)return;if(r.event?.type==="installation.updated"){if(T)P.debug("Installation was updated");let i=n.cacheDir??He,o=Nt(i,Ur);try{let{unlink:a}=await import("node:fs/promises");if(await a(o),T)P.debug("Cleared update cache")}catch(a){}}if(r.event?.type==="installation.update-available"){if(T)P.debug("New update available");let{latestVersion:i}=await Wr(n);if(i){if(T)P.debug(`Latest version: ${i}`)}}}}}import{tool as Kr}from"@opencode-ai/plugin";import{z as U}from"zod";import{execFile as uc}from"node:child_process";import{promisify as pc}from"node:util";var gc=pc(uc);async function qr(e,t,n){let r=["--json","--pattern",e,"--lang",t];if(n?.replace)r.push("--replace",n.replace);if(n?.path)r.push("--path",n.path);if(n?.glob)r.push("--glob",n.glob);try{let{stdout:i,stderr:o}=await gc("sg",r,{maxBuffer:10485760,timeout:30000});if(o&&!i)return{success:!1,error:o};try{let a=JSON.parse(i);return{success:!0,matches:a.matches||[],count:a.count||0}}catch{return{success:!0,matches:[],count:0}}}catch(i){if(i instanceof Error&&i.message.includes("ENOENT"))return{success:!1,error:"ast-grep CLI not installed. Install with: npm install -g @ast-grep/cli"};return{success:!1,error:i instanceof Error?i.message:"Unknown error"}}}var Vr=Kr({description:"Search code using AST patterns. More powerful than regex as it understands code structure. Example patterns: 'function $_$ { $body$ }' to find all functions, '$A = $B' to find assignments.",args:{pattern:U.string().describe("AST pattern to search for (use $VAR for variables)"),language:U.string().describe("Programming language (typescript, javascript, python, rust, go, java, cpp, etc.)"),path:U.string().optional().describe("Directory or file to search in (default: current directory)"),glob:U.string().optional().describe("File glob pattern (e.g., '*.ts', 'src/**/*.ts')")},async execute(e){let{pattern:t,language:n,path:r,glob:i}=e,o=await qr(t,n,{path:r,glob:i});return JSON.stringify(o,null,2)}}),Gr=Kr({description:"Search and replace code using AST patterns. Safer than regex replacement as it respects code structure. Use the same variable names in replacement to preserve matched content.",args:{pattern:U.string().describe("AST pattern to search for"),replacement:U.string().describe("AST pattern to replace with (use $VAR to reference matched variables)"),language:U.string().describe("Programming language"),path:U.string().optional().describe("Directory or file to search in (default: current directory)"),glob:U.string().optional().describe("File glob pattern")},async execute(e){let{pattern:t,replacement:n,language:r,path:i,glob:o}=e,a=await qr(t,r,{replace:n,path:i,glob:o});return JSON.stringify(a,null,2)}});import*as B from"fs";import*as It from"path";import*as zr from"os";import{tool as mc}from"@opencode-ai/plugin";import{z as Se}from"zod";var Ot=It.join(zr.homedir(),".opencode","sessions");function J(){if(!B.existsSync(Ot))B.mkdirSync(Ot,{recursive:!0});return Ot}function fc(){let e=J();if(!B.existsSync(e))return[];let t=[];try{let n=B.readdirSync(e);for(let r of n){if(!r.endsWith(".json"))continue;let i=r.slice(0,-5),o=It.join(e,r);try{let a=B.readFileSync(o,"utf-8"),s=JSON.parse(a),c={sessionID:i,created:s.created||s.createdAt||new Date(0).toISOString(),lastActive:s.lastActive||s.updatedAt||new Date().toISOString(),messageCount:s.messageCount||s.messages?.length||0,agent:s.agent,duration:s.duration,fileCount:s.fileCount,editCount:s.editCount,toolUsage:s.toolUsage||{}};t.push({sessionID:i,path:o,metadata:c})}catch(a){console.error(`[session-list] Error reading session ${i}:`,a)}}}catch(n){console.error("[session-list] Error reading sessions directory:",n)}return t}function hc(e,t,n){if(!t&&!n)return e;let r=t?new Date(t).getTime():0,i=n?new Date(n).getTime():1/0;return e.filter((o)=>{let a=new Date(o.metadata.lastActive).getTime();return a>=r&&a<=i})}function yc(e,t="desc"){return[...e].sort((n,r)=>{let i=new Date(n.metadata.lastActive).getTime(),o=new Date(r.metadata.lastActive).getTime();return t==="asc"?i-o:o-i})}var $t=mc({description:"List all OpenCode sessions with filtering and pagination options.",args:{limit:Se.number().int().min(1).max(1000).optional(),startDate:Se.string().optional(),endDate:Se.string().optional(),order:Se.enum(["asc","desc"]).optional(),includeMetadata:Se.boolean().default(!1)},async execute(e){try{let{limit:t,startDate:n,endDate:r,order:i,includeMetadata:o}=e,a=fc();if(n||r)a=hc(a,n,r);if(a=yc(a,i),t)a=a.slice(0,t);let s=a.map((c)=>{if(o)return{sessionID:c.metadata.sessionID,created:c.metadata.created,lastActive:c.metadata.lastActive,messageCount:c.metadata.messageCount,agent:c.metadata.agent,duration:c.metadata.duration,fileCount:c.metadata.fileCount,editCount:c.metadata.editCount,toolUsage:c.metadata.toolUsage};else return{sessionID:c.metadata.sessionID,created:c.metadata.created,lastActive:c.metadata.lastActive,messageCount:c.metadata.messageCount,agent:c.metadata.agent}});return JSON.stringify({success:!0,count:s.length,sessions:s})}catch(t){return console.error("[session-list] Error:",t),JSON.stringify({success:!1,error:String(t),sessions:[]})}}});import*as Be from"fs";import*as Yr from"path";import{tool as bc}from"@opencode-ai/plugin";import{z as Ue}from"zod";function xc(e){return Yr.join(J(),`${e}.json`)}var Ft=bc({description:"Read messages from a specific session with pagination and filtering options.",args:{sessionID:Ue.string().describe("Session ID to read from"),limit:Ue.number().int().min(1).max(1000).optional(),offset:Ue.number().int().min(0).default(0).describe("Offset for pagination"),includeMetadata:Ue.boolean().default(!1).describe("Include full session metadata")},async execute(e){try{let{sessionID:t,limit:n,offset:r,includeMetadata:i}=e,o=xc(t);if(!Be.existsSync(o))return JSON.stringify({success:!1,error:`Session ${t} not found`,sessionID:t});let a=Be.readFileSync(o,"utf-8"),s=JSON.parse(a),c=s.messages||[],l=c;if(r>0||n)l=c.slice(r,n?r+n:void 0);let u={sessionID:t,messages:l,partial:c.length>l.length,metadata:{sessionID:t,created:s.created||s.createdAt||new Date(0).toISOString(),lastActive:s.lastActive||s.updatedAt||new Date().toISOString(),messageCount:c.length,agent:s.agent,duration:s.duration,fileCount:s.fileCount,editCount:s.editCount,toolUsage:s.toolUsage||{}}},p={success:!0,sessionID:t,totalMessages:c.length,returnedMessages:l.length,offset:r,limit:n||c.length,partial:u.partial,messages:l};if(i)p.metadata=u.metadata;return JSON.stringify(p)}catch(t){return console.error("[session-read] Error:",t),JSON.stringify({success:!1,error:String(t),sessionID:e.sessionID})}}});import*as Z from"fs";import*as Ke from"path";import*as Qr from"os";import{tool as wc}from"@opencode-ai/plugin";import{z as Je}from"zod";var Wg=Ke.join(Qr.homedir(),".opencode","sessions");function vc(e){try{let t=Z.readFileSync(e,"utf-8"),n=JSON.parse(t),r=new Map;if(n.messages&&Array.isArray(n.messages))n.messages.forEach((i,o)=>{let a=i.role||"unknown",s=i.content||"";if(s&&typeof s==="string"&&s.length>0){let c={type:a==="user"?"user_message":"assistant_message",index:o,content:s,context:s};r.set(s,c)}});return r}catch(t){return console.error(`[session-search] Error indexing session ${e}:`,t),null}}function Xr(e,t){let n=e.toLowerCase(),r=t.content.toLowerCase(),i=0,o=r===n;if(o)i+=100;if(r.includes(n)&&!o)i+=50;let s=n.split(/\s+/),c=0;for(let l of s)if(l.length>2&&r.includes(l))c++;if(i+=c*10,t.type==="user_message")i+=20;return Math.min(i,100)}function kc(){let e=J();if(!Z.existsSync(e))return[];let t=[];try{let n=Z.readdirSync(e);for(let r of n){if(!r.endsWith(".json"))continue;let i=r.slice(0,-5),o=Ke.join(e,r);try{let a=Z.readFileSync(o,"utf-8"),s=JSON.parse(a),c={sessionID:i,created:s.created||s.createdAt||new Date(0).toISOString(),lastActive:s.lastActive||s.updatedAt||new Date().toISOString(),messageCount:s.messageCount||s.messages?.length||0,agent:s.agent,duration:s.duration,fileCount:s.fileCount,editCount:s.editCount,toolUsage:s.toolUsage||{}};t.push({sessionID:i,filePath:o,metadata:c})}catch(a){console.error(`[session-search] Error reading session ${i}:`,a)}}}catch(n){console.error("[session-search] Error reading sessions directory:",n)}return t}var Lt=wc({description:"Full-text search across all OpenCode sessions with ranked results.",args:{q:Je.string().describe("Search query text"),limit:Je.number().int().min(1).max(100).default(10).describe("Maximum number of results to return"),offset:Je.number().int().min(0).default(0).describe("Offset for pagination"),sessionID:Je.string().optional().describe("Search within a specific session only")},async execute(e){try{let{q:t,limit:n,offset:r,sessionID:i}=e;if(!t||t.trim().length===0)return JSON.stringify({success:!1,error:"Query cannot be empty",results:[]});let o=[];if(i){let c=J(),l=Ke.join(c,`${i}.json`);o=[{sessionID:i,filePath:l,metadata:{sessionID:i,created:"",lastActive:"",messageCount:0,toolUsage:{}}}]}else o=kc();let a=[];for(let c of o){let l=vc(c.filePath);if(!l)continue;let u=[];for(let[p,g]of l.entries())if(Xr(t,g)>10)u.push(g);if(u.length>0){let p=u.reduce((g,m)=>g+Xr(t,m),0)/u.length;a.push({sessionID:c.sessionID,filePath:c.filePath,metadata:c.metadata,score:Math.round(p),matches:u.slice(0,5)})}}a.sort((c,l)=>l.score-c.score);let s=a.slice(r,r+n);return JSON.stringify({success:!0,query:t,total:a.length,offset:r,limit:n,results:s.map((c)=>({sessionID:c.sessionID,score:c.score,matchCount:c.matches.length,lastActive:c.metadata.lastActive,messageCount:c.metadata.messageCount,agent:c.metadata.agent,matches:c.matches.map((l)=>({type:l.type,index:l.index,content:l.content.slice(0,200)+(l.content.length>200?"...":"")}))}))})}catch(t){return console.error("[session-search] Error:",t),JSON.stringify({success:!1,error:String(t),results:[]})}}});import*as qe from"fs";import*as _t from"path";import{tool as Sc}from"@opencode-ai/plugin";import{z as Ac}from"zod";var qg=_t.join(process.env.HOME||"",".opencode","sessions");function Cc(e){return _t.join(J(),`${e}.json`)}function Pc(e){let t=Cc(e);if(!qe.existsSync(t))return null;try{let n=qe.readFileSync(t,"utf-8"),r=JSON.parse(n);return{sessionID:e,created:r.created||r.createdAt||new Date(0).toISOString(),lastActive:r.lastActive||r.updatedAt||new Date().toISOString(),messageCount:r.messageCount||r.messages?.length||0,agent:r.agent,duration:r.duration,fileCount:r.fileCount,editCount:r.editCount,toolUsage:r.toolUsage||{}}}catch(n){return console.error(`[session-info] Error reading session ${e}:`,n),null}}function Ec(e){let t={totalMessages:e.messageCount,totalToolsUsed:Object.values(e.toolUsage||{}).reduce((n,r)=>n+r,0),mostUsedTool:"",mostUsedToolCount:0,averageMessagesPerMinute:0};if(e.duration)t.averageMessagesPerMinute=e.messageCount/(e.duration/60000);for(let[n,r]of Object.entries(e.toolUsage||{}))if(r>t.mostUsedToolCount)t.mostUsedTool=n,t.mostUsedToolCount=r;return t}var jt=Sc({description:"Get detailed metadata and statistics about a specific session.",args:{sessionID:Ac.string().describe("Session ID to query")},async execute(e){try{let{sessionID:t}=e,n=Pc(t);if(!n)return JSON.stringify({success:!1,error:`Session ${t} not found`,sessionID:t});let r=Ec(n);return JSON.stringify({success:!0,sessionID:n.sessionID,created:n.created,lastActive:n.lastActive,messageCount:n.messageCount,agent:n.agent,duration:n.duration,fileCount:n.fileCount,editCount:n.editCount,toolUsage:n.toolUsage,stats:{totalMessages:r.totalMessages,totalToolsUsed:r.totalToolsUsed,mostUsedTool:r.mostUsedTool,mostUsedToolCount:r.mostUsedToolCount,averageMessagesPerMinute:r.averageMessagesPerMinute.toFixed(2)}})}catch(t){return console.error("[session-info] Error:",t),JSON.stringify({success:!1,error:String(t),sessionID:e.sessionID})}}});import{tool as Rc}from"@opencode-ai/plugin";import{z as Ae}from"zod";import{execFile as Tc}from"node:child_process";import{promisify as Mc}from"node:util";var Dc=Mc(Tc);async function Nc(e,t){if(!e.trim())return{success:!1,error:"Pattern must not be empty"};let n=["--line-number","--column","--color=never"];if(n.push("--max-count","200"),n.push("--max-filesize","1M"),n.push("--max-depth","4"),t?.context)n.push("-C",String(t.context));if(t?.invert)n.push("-v");if(t?.type)n.push(`--type=${t.type}`);n.push(e),n.push(t?.path??process.cwd());try{let{stdout:r}=await Dc("rg",n,{maxBuffer:10485760,timeout:30000}),i=[],o=r.split(`
2012
+ `);for(let a of o){if(!a.trim())continue;let s=a.match(/^([^:]+):(\d+):(\d+):(.+)$/);if(s)i.push({file:s[1],line:parseInt(s[2],10),column:parseInt(s[3],10),lineContent:s[4]})}return{success:!0,matches:i,count:i.length}}catch(r){if(r instanceof Error&&r.message.includes("ENOENT"))return{success:!1,error:"ripgrep (rg) not installed. Install with: apt install ripgrep or brew install ripgrep"};return{success:!1,error:r instanceof Error?r.message:"Unknown error"}}}var Zr=Rc({description:"Search for text patterns in files using ripgrep. Supports regex and file type filtering. Example: grep({pattern: 'function \\w+', type: 'ts', context: 2})",args:{pattern:Ae.string().describe("Regex pattern to search for"),path:Ae.string().optional().describe("Directory or file to search in (default: current directory)"),type:Ae.string().optional().describe("Filter by file type (ts, js, py, rust, go, java, etc.)"),context:Ae.number().optional().describe("Number of context lines around each match (default: 0)"),invert:Ae.boolean().optional().describe("Show lines that do NOT match the pattern")},async execute(e){let{pattern:t,path:n,type:r,context:i,invert:o}=e,a=await Nc(t,{path:n,type:r,context:i,invert:o});if(!a.success)return JSON.stringify(a,null,2);return JSON.stringify({success:!0,matches:a.matches?.slice(0,100),count:a.count,message:a.count&&a.count>100?`Showing 100 of ${a.count} matches`:void 0},null,2)}});import{tool as Oc}from"@opencode-ai/plugin";import{z as Wt}from"zod";var ei=Oc({description:"Control Ralph-Loop iterations for achieving completion promises. Ralph complements Kraken's PDSA cycles by iteratively refining until <promise> is satisfied. Automatically triggered when chat contains <promise>...</promise> pattern, or use this tool for manual control.",args:{command:Wt.enum(["status","cancel","continue","info"]).describe("Ralph-Loop command"),sessionID:Wt.string().optional().describe("Session ID (required for status, cancel)"),maxIterations:Wt.number().min(1).max(100).optional().describe("Max iterations (default: 24)")},async execute(e){let{command:t,sessionID:n,maxIterations:r}=e;switch(t){case"status":if(!n)return JSON.stringify({success:!1,error:"sessionID required for status command"});return JSON.stringify({success:!0,session:{sessionID:n,status:"active",promise:"Use /ralph-loop in chat to start a new session",task:"N/A",currentIteration:0,maxIterations:r??24,elapsedMs:0}});case"cancel":if(!n)return JSON.stringify({success:!1,error:"sessionID required for cancel command"});return JSON.stringify({success:!0,message:`Session ${n} cancelled`});case"continue":if(!n)return JSON.stringify({success:!1,error:"sessionID required for continue command"});return JSON.stringify({success:!0,message:`Session ${n} continuing to next iteration`});case"info":return JSON.stringify({success:!0,info:{description:"Ralph-Loop: Self-referential iteration agent that continues until completion promise is satisfied",triggers:["Chat message contains <promise>...</promise> pattern","User types /ralph-loop [task] <promise>...</promise>"],defaults:{maxIterations:24,timeout:"None (continues until promise met or max iterations)"},complement:"Ralph complements Kraken's PDSA cycles. Kraken orchestrates; Ralph iterates."}});default:return JSON.stringify({success:!1,error:`Unknown command: ${t}`})}}});import{tool as Ic}from"@opencode-ai/plugin";import{z as ti}from"zod";var ni=Ic({description:"Call a specialized Kraken Code agent for a specific task. Use this to delegate to agents like Atlas (navigation), Nautilus (semantic search), Abyssal (external research), Coral (UI/UX), Siren (documentation), Scylla (code review), or Pearl (testing).",args:{agent:ti.enum(["Atlas","Nautilus","Abyssal","Coral","Siren","Scylla","Pearl","Leviathan","Maelstrom","Poseidon"]).describe("Agent to call"),task:ti.string().describe("Task or instruction for the agent")},async execute(e){let{agent:t,task:n}=e,i={Atlas:"Navigate and explore codebase structure",Nautilus:"Perform semantic code understanding and search",Abyssal:"Conduct external research and investigation",Coral:"Handle UI/UX design and visual changes",Siren:"Write or review documentation",Scylla:"Audit and review code for issues",Pearl:"Create tests and validate implementations",Leviathan:"Architectural design and system-level decisions",Maelstrom:"Orchestrate complex multi-step workflows",Poseidon:"Plan and coordinate complex tasks"}[t]||"Execute your specialized function";return`Calling @${t.toLowerCase()} for task: ${n||i}`}});import{tool as F}from"@opencode-ai/plugin";import{z as h}from"zod";import{promises as Ht}from"node:fs";import*as Ut from"node:os";import*as Ce from"node:path";var ri=Ce.join(Ut.homedir(),".kraken","learning"),ii="learning-state.json",x={experiences:[],knowledgeNodes:[],knowledgeEdges:[],patterns:[],schedules:[],stateMachines:[]},oi=!1;async function Bt(){let e=te();if(e.enabled===!1)return{ready:!1,loaded:0};let t=yi(e.storagePath);return await bi(t),x=await $c(t),oi=!0,{ready:!0,loaded:x.experiences.length+x.knowledgeNodes.length+x.patterns.length}}async function si(e){let t=te();await de();let n=new Date().toISOString(),r={id:`exp_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,createdAt:n,updatedAt:n,summary:e.summary,details:e.details,tags:e.tags??[],outcome:e.outcome,confidence:e.confidence,relatedNodeIds:e.relatedNodeIds??[]};if(t.experienceStore?.enabled===!1||t.enabled===!1)return r;x.experiences.unshift(r);let i=t.experienceStore?.maxEntries??2000;if(x.experiences.length>i)x.experiences=x.experiences.slice(0,i);if(t.patternDetection?.enabled!==!1)Fc(r,t);return await ee(t),r}function ai(e){let t=e.toLowerCase();return x.experiences.filter((n)=>{let r=n.tags?.join(" ").toLowerCase()??"";return n.summary.toLowerCase().includes(t)||n.details.toLowerCase().includes(t)||r.includes(t)})}async function ci(e){let t=te();await de();let n=new Date().toISOString(),r={id:`node_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,createdAt:n,updatedAt:n,title:e.title,content:e.content,type:e.type??"concept",tags:e.tags??[],sources:e.sources??[],metadata:e.metadata??{}};if(t.knowledgeGraph?.enabled===!1||t.enabled===!1)return r;x.knowledgeNodes.unshift(r);let i=t.knowledgeGraph?.maxNodes??5000;if(x.knowledgeNodes.length>i)x.knowledgeNodes=x.knowledgeNodes.slice(0,i);if(t.spacedRepetition?.enabled!==!1)xi(r.id,t);return await ee(t),r}function li(e){let t=e.toLowerCase();return x.knowledgeNodes.filter((n)=>{let r=n.tags?.join(" ").toLowerCase()??"";return n.title.toLowerCase().includes(t)||n.content.toLowerCase().includes(t)||r.includes(t)})}async function di(e,t,n,r=0.5){let i=te();await de();let o={id:`edge_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,sourceId:e,targetId:t,relation:n,strength:r,createdAt:new Date().toISOString()};if(i.knowledgeGraph?.enabled===!1||i.enabled===!1)return o;return x.knowledgeEdges.push(o),await ee(i),o}async function ui(e){let t=te();await de();let n=new Date().toISOString(),r=x.patterns.find((a)=>a.name===e.name);if(r)return r.description=e.description,r.triggers=e.triggers??r.triggers,r.confidence=e.confidence??r.confidence,r.evidence=e.evidence??r.evidence,r.occurrences+=1,r.lastSeen=n,r.updatedAt=n,await ee(t),r;let i={id:`pattern_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,name:e.name,description:e.description,triggers:e.triggers??[],confidence:e.confidence??0.5,evidence:e.evidence??[],occurrences:1,lastSeen:n,createdAt:n,updatedAt:n};if(t.patternDetection?.enabled===!1||t.enabled===!1)return i;x.patterns.unshift(i);let o=t.patternDetection?.maxPatterns??500;if(x.patterns.length>o)x.patterns=x.patterns.slice(0,o);return await ee(t),i}function pi(e=0){return x.patterns.filter((t)=>t.confidence>=e)}function gi(e){let t=e?new Date(e).getTime():Date.now();return x.schedules.filter((n)=>{return new Date(n.nextReview).getTime()<=t})}async function mi(e,t){let n=te();await de();let r=Math.min(5,Math.max(0,t)),i=Lc(e,n),o=new Date;if(r<3)i.intervalDays=n.spacedRepetition?.initialIntervalDays??1,i.reviewCount=0;else if(i.reviewCount+=1,i.reviewCount===1)i.intervalDays=n.spacedRepetition?.initialIntervalDays??1;else i.intervalDays=Math.round(i.intervalDays*i.easeFactor);let a=i.easeFactor+(0.1-(5-r)*(0.08+(5-r)*0.02));i.easeFactor=Math.max(1.3,a);let s=n.spacedRepetition?.maxIntervalDays??365;return i.intervalDays=Math.min(i.intervalDays,s),i.lastReviewed=o.toISOString(),i.nextReview=new Date(o.getTime()+i.intervalDays*24*60*60*1000).toISOString(),await ee(n),i}async function fi(e){let t=te();await de();let n=new Date().toISOString(),r={id:`sm_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,name:e.name,states:e.states,transitions:e.transitions,initialState:e.initialState,currentState:e.initialState,metadata:e.metadata??{},createdAt:n,updatedAt:n};if(t.stateMachines?.enabled===!1||t.enabled===!1)return r;return x.stateMachines.unshift(r),await ee(t),r}function hi(){return[...x.stateMachines]}function te(){let e=Kn(),t=Jn();return{enabled:e?.enabled??t?.enabled??!0,autoSave:e?.autoSave??t?.autoSave??!0,storagePath:e?.storagePath??t?.storagePath??ri,experienceStore:{enabled:e?.experienceStore?.enabled??!0,maxEntries:e?.experienceStore?.maxEntries??2000},knowledgeGraph:{enabled:e?.knowledgeGraph?.enabled??!0,maxNodes:e?.knowledgeGraph?.maxNodes??5000},patternDetection:{enabled:e?.patternDetection?.enabled??!0,minConfidence:e?.patternDetection?.minConfidence??0.6,maxPatterns:e?.patternDetection?.maxPatterns??500},spacedRepetition:{enabled:e?.spacedRepetition?.enabled??!0,initialIntervalDays:e?.spacedRepetition?.initialIntervalDays??1,easeFactor:e?.spacedRepetition?.easeFactor??2.5,maxIntervalDays:e?.spacedRepetition?.maxIntervalDays??365},stateMachines:{enabled:e?.stateMachines?.enabled??!0}}}function yi(e){if(!e)return ri;if(e.startsWith("~/"))return Ce.join(Ut.homedir(),e.slice(2));return e}async function bi(e){await Ht.mkdir(e,{recursive:!0})}async function de(){if(!oi)await Bt()}async function $c(e){let t=Ce.join(e,ii);try{let n=await Ht.readFile(t,"utf-8"),r=JSON.parse(n);return{experiences:r.experiences??[],knowledgeNodes:r.knowledgeNodes??[],knowledgeEdges:r.knowledgeEdges??[],patterns:r.patterns??[],schedules:r.schedules??[],stateMachines:r.stateMachines??[]}}catch{return{experiences:[],knowledgeNodes:[],knowledgeEdges:[],patterns:[],schedules:[],stateMachines:[]}}}async function ee(e){if(e.autoSave===!1||e.enabled===!1)return;let t=yi(e.storagePath);await bi(t);let n=Ce.join(t,ii);await Ht.writeFile(n,JSON.stringify(x,null,2),"utf-8")}function Fc(e,t){let n=t.patternDetection?.minConfidence??0.6,r=e.tags??[];for(let i of r){let o=`tag:${i}`,a=`Recurring experience tag "${i}".`,s=x.patterns.find((c)=>c.name===o);if(s)s.occurrences+=1,s.lastSeen=e.createdAt,s.confidence=Math.min(1,s.confidence+0.05),s.updatedAt=new Date().toISOString();else x.patterns.unshift({id:`pattern_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,name:o,description:a,triggers:[i],confidence:n,evidence:[e.summary],occurrences:1,lastSeen:e.createdAt,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()})}}function xi(e,t){if(x.schedules.find((o)=>o.nodeId===e))return;let r=t.spacedRepetition?.initialIntervalDays??1,i=new Date;x.schedules.push({nodeId:e,intervalDays:r,easeFactor:t.spacedRepetition?.easeFactor??2.5,nextReview:new Date(i.getTime()+r*24*60*60*1000).toISOString(),reviewCount:0})}function Lc(e,t){let n=x.schedules.find((r)=>r.nodeId===e);if(!n)xi(e,t),n=x.schedules.find((r)=>r.nodeId===e);if(!n){let r={nodeId:e,intervalDays:t.spacedRepetition?.initialIntervalDays??1,easeFactor:t.spacedRepetition?.easeFactor??2.5,nextReview:new Date().toISOString(),reviewCount:0};return x.schedules.push(r),r}return n}var Jt=h.number().min(0).max(1),wi=F({description:"Add a learning experience to the unified memory system.",args:{summary:h.string().min(1).describe("Short summary of the experience"),details:h.string().min(1).describe("Full details of the experience"),tags:h.array(h.string()).optional().describe("Tags describing the experience"),outcome:h.string().optional().describe("Outcome or result of the experience"),confidence:Jt.optional().describe("Confidence score (0-1)"),relatedNodeIds:h.array(h.string()).optional().describe("Related knowledge node IDs")},async execute(e){let t=await si(e);return JSON.stringify({success:!0,experience:t},null,2)}}),vi=F({description:"Search stored experiences by keyword.",args:{query:h.string().min(1).describe("Search query")},async execute(e){let t=ai(e.query);return JSON.stringify({success:!0,experiences:t},null,2)}}),ki=F({description:"Add a knowledge node to the learning graph.",args:{title:h.string().min(1).describe("Node title"),content:h.string().min(1).describe("Node content"),type:h.string().optional().describe("Node type (concept, decision, procedure, etc.)"),tags:h.array(h.string()).optional().describe("Tags associated with the node"),sources:h.array(h.string()).optional().describe("Source references or URLs"),metadata:h.record(h.string(),h.unknown()).optional().describe("Additional metadata")},async execute(e){let t=await ci(e);return JSON.stringify({success:!0,node:t},null,2)}}),Si=F({description:"Search knowledge nodes by keyword.",args:{query:h.string().min(1).describe("Search query")},async execute(e){let t=li(e.query);return JSON.stringify({success:!0,nodes:t},null,2)}}),Ai=F({description:"Create a relationship between two knowledge nodes.",args:{sourceId:h.string().min(1).describe("Source node ID"),targetId:h.string().min(1).describe("Target node ID"),relation:h.string().min(1).describe("Relationship description"),strength:h.number().min(0).max(1).optional().describe("Relationship strength (0-1)")},async execute(e){let t=await di(e.sourceId,e.targetId,e.relation,e.strength??0.5);return JSON.stringify({success:!0,edge:t},null,2)}}),Ci=F({description:"Record or update a learning pattern.",args:{name:h.string().min(1).describe("Pattern name"),description:h.string().min(1).describe("Pattern description"),triggers:h.array(h.string()).optional().describe("Trigger keywords or signals"),confidence:Jt.optional().describe("Confidence score (0-1)"),evidence:h.array(h.string()).optional().describe("Evidence notes")},async execute(e){let t=await ui(e);return JSON.stringify({success:!0,pattern:t},null,2)}}),Pi=F({description:"List known patterns above a confidence threshold.",args:{minConfidence:Jt.optional().describe("Minimum confidence to include")},async execute(e){let t=pi(e.minConfidence??0);return JSON.stringify({success:!0,patterns:t},null,2)}}),Ei=F({description:"Get the spaced repetition review queue.",args:{dueBefore:h.string().optional().describe("ISO timestamp cutoff for due reviews")},async execute(e){let t=gi(e.dueBefore);return JSON.stringify({success:!0,queue:t},null,2)}}),Ri=F({description:"Record a spaced repetition review for a knowledge node.",args:{nodeId:h.string().min(1).describe("Knowledge node ID"),quality:h.number().min(0).max(5).describe("Review quality score (0-5)")},async execute(e){let t=await mi(e.nodeId,e.quality);return JSON.stringify({success:!0,schedule:t},null,2)}}),Ti=F({description:"Create a learning state machine for workflow tracking.",args:{name:h.string().min(1).describe("State machine name"),states:h.array(h.string()).min(1).describe("Possible states"),transitions:h.array(h.object({from:h.string().min(1),to:h.string().min(1),event:h.string().min(1),description:h.string().optional()})).min(1).describe("State transitions"),initialState:h.string().min(1).describe("Initial state"),metadata:h.record(h.string(),h.unknown()).optional().describe("Additional metadata")},async execute(e){let t=await fi(e);return JSON.stringify({success:!0,machine:t},null,2)}}),Mi=F({description:"List all learning state machines.",args:{},async execute(){let e=hi();return JSON.stringify({success:!0,machines:e},null,2)}});qt();Ve();Yt();ne();ne();import{tool as L}from"@opencode-ai/plugin";import{z as w}from"zod";var Wi=L({description:"Get hover information (type, documentation) for a symbol at a position in a file. Use this to get information about variables, functions, classes, etc.",args:{path:w.string().describe("Absolute path to the source file"),line:w.number().describe("0-indexed line number"),character:w.number().describe("0-indexed character position")},async execute({path:e,line:t,character:n}){try{let r=await I(e,async(o)=>{return await o.hover(e,t,n)}),i=r?Xt(r):"No hover information available";return JSON.stringify({success:!0,hover:i})}catch(r){return JSON.stringify({success:!1,error:r instanceof Error?r.message:String(r)})}}}),Hi=L({description:"Jump to the definition of a symbol at the given position. Returns the location where the symbol is defined.",args:{path:w.string().describe("Absolute path to the source file"),line:w.number().describe("0-indexed line number"),character:w.number().describe("0-indexed character position")},async execute({path:e,line:t,character:n}){try{let r=await I(e,async(a)=>{return await a.definition(e,t,n)});if(!r)return JSON.stringify({success:!0,message:"No definition found"});let o=(Array.isArray(r)?r:[r]).map(ue);return JSON.stringify({success:!0,locations:o})}catch(r){return JSON.stringify({success:!1,error:r instanceof Error?r.message:String(r)})}}}),Ui=L({description:"Find all references to a symbol in the workspace. Returns a list of locations where the symbol is used.",args:{path:w.string().describe("Absolute path to the source file"),line:w.number().describe("0-indexed line number"),character:w.number().describe("0-indexed character position"),includeDeclaration:w.boolean().optional().default(!0).describe("Include the declaration location in results")},async execute({path:e,line:t,character:n,includeDeclaration:r}){try{let i=await I(e,async(s)=>{return await s.references(e,t,n,r)});if(!i)return JSON.stringify({success:!0,message:"No references found"});let a=(Array.isArray(i)?i:[i]).map(ue);return JSON.stringify({success:!0,count:a.length,references:a})}catch(i){return JSON.stringify({success:!1,error:i instanceof Error?i.message:String(i)})}}}),Bi=L({description:"Get all symbols (classes, functions, variables) in a document. Returns a hierarchical tree of symbols with their locations.",args:{path:w.string().describe("Absolute path to the source file")},async execute({path:e}){try{let t=await I(e,async(i)=>{return await i.documentSymbols(e)});if(!t)return JSON.stringify({success:!0,message:"No symbols found"});let n=Array.isArray(t)?t:[t],r=(i,o=0)=>{return{kind:pe(i.kind),name:i.name,detail:i.detail||void 0,range:i.range,children:i.children?.map((a)=>r(a,o+1))}};return JSON.stringify({success:!0,symbols:n.map((i)=>r(i))})}catch(t){return JSON.stringify({success:!1,error:t instanceof Error?t.message:String(t)})}}}),Ji=L({description:"Search for symbols across the entire workspace. Use this to find classes, functions, etc. without knowing their location.",args:{query:w.string().describe("Search query (e.g., 'MyClass', 'createUser')")},async execute({query:e}){try{let t=await I(process.cwd(),async(i)=>{return await i.workspaceSymbols(e)});if(!t)return JSON.stringify({success:!0,message:"No symbols found"});let r=(Array.isArray(t)?t:[t]).map((i)=>({kind:pe(i.kind),name:i.name,containerName:i.containerName||void 0,location:ue(i.location)}));return JSON.stringify({success:!0,count:r.length,symbols:r})}catch(t){return JSON.stringify({success:!1,error:t instanceof Error?t.message:String(t)})}}}),Ki=L({description:"Get diagnostics (errors, warnings, hints) for a file. Returns all issues reported by the language server.",args:{path:w.string().describe("Absolute path to the source file"),severity:w.enum(["error","warning","information","hint","all"]).optional().default("all").describe("Filter by severity level")},async execute({path:e,severity:t}){try{let n=await I(e,async(a)=>{return await a.diagnostics(e)}),{filterDiagnosticsBySeverity:r}=await Promise.resolve().then(() => (ne(),Pe)),i=n.items||[];if(t!=="all")i=r(i,t);let o=i.map((a)=>({severity:a.severity,message:a.message,range:a.range,source:a.source,code:a.code}));return JSON.stringify({success:!0,count:o.length,diagnostics:o})}catch(n){return JSON.stringify({success:!1,error:n instanceof Error?n.message:String(n)})}}}),qi=L({description:"Prepare a rename operation at a position. Returns the range that would be renamed, if valid.",args:{path:w.string().describe("Absolute path to the source file"),line:w.number().describe("0-indexed line number"),character:w.number().describe("0-indexed character position")},async execute({path:e,line:t,character:n}){try{let r=await I(e,async(i)=>{return await i.prepareRename(e,t,n)});if(!r)return JSON.stringify({success:!0,message:"Cannot rename at this position"});return JSON.stringify({success:!0,result:r})}catch(r){return JSON.stringify({success:!1,error:r instanceof Error?r.message:String(r)})}}}),Vi=L({description:"Rename a symbol at a position. Performs a workspace-wide rename of the symbol to the new name.",args:{path:w.string().describe("Absolute path to the source file"),line:w.number().describe("0-indexed line number"),character:w.number().describe("0-indexed character position"),newName:w.string().describe("New name for the symbol")},async execute({path:e,line:t,character:n,newName:r}){try{let i=await I(e,async(u)=>{return await u.rename(e,t,n,r)}),{formatWorkspaceEdit:o,applyWorkspaceEdit:a,formatApplyResult:s}=await Promise.resolve().then(() => (ne(),Pe)),c=await a(i),l=o(i);return JSON.stringify({success:!0,workspaceEdit:l,applyResult:s(c)})}catch(i){return JSON.stringify({success:!1,error:i instanceof Error?i.message:String(i)})}}}),Gi=L({description:"Get available code actions (refactors, quick fixes) for a range. Returns a list of actions that can be applied to fix issues or refactor code.",args:{path:w.string().describe("Absolute path to the source file"),startLine:w.number().describe("0-indexed start line"),startChar:w.number().describe("0-indexed start character"),endLine:w.number().describe("0-indexed end line"),endChar:w.number().describe("0-indexed end character"),only:w.array(w.string()).optional().describe("Filter by action kind (e.g., 'quickfix', 'refactor')")},async execute({path:e,startLine:t,startChar:n,endLine:r,endChar:i,only:o}){try{let a=await I(e,async(l)=>{return await l.codeAction(e,t,n,r,i,o)}),{formatCodeActions:s}=await Promise.resolve().then(() => (ne(),Pe)),c=Array.isArray(a)?a:[];return JSON.stringify({success:!0,count:c.length||0,actions:c||[]})}catch(a){return JSON.stringify({success:!1,error:a instanceof Error?a.message:String(a)})}}}),zi=L({description:"Resolve a code action to get its full details (including edits).",args:{action:w.object({}).passthrough().describe("Code action object from lsp_code_actions")},async execute({action:e}){try{let{formatWorkspaceEdit:t,applyWorkspaceEdit:n,formatApplyResult:r}=await Promise.resolve().then(() => (ne(),Pe)),i=await I(process.cwd(),async(o)=>{return await o.codeActionResolve(e)});if(i&&typeof i==="object"&&"edit"in i){let o=await n(i.edit);return JSON.stringify({success:!0,action:i,workspaceEdit:t(i.edit),applyResult:r(o)})}return JSON.stringify({success:!0,action:i})}catch(t){return JSON.stringify({success:!1,error:t instanceof Error?t.message:String(t)})}}}),Yi=L({description:"List available LSP servers and their installation status. Shows which servers are configured and installed for different file types.",args:{extension:w.string().optional().describe("Filter by file extension (e.g., 'ts', 'py', 'js')")},async execute({extension:e}){try{let{BUILTIN_SERVERS:t,findServerForExtension:n}=await Promise.resolve().then(() => (Ve(),Ni));if(e){let i=await n(e);return JSON.stringify({success:!0,extension:e,lookup:i})}let r=t.map((i)=>({id:i.id,extensions:i.extensions,disabled:i.disabled||!1}));return JSON.stringify({success:!0,servers:r,count:r.length})}catch(t){return JSON.stringify({success:!1,error:t instanceof Error?t.message:String(t)})}}});var zc=[{keyword:"blitzkrieg",mode:"blitzkrieg",language:"English",aliases:["ulw","max","full"]},{keyword:"ultra work",mode:"blitzkrieg",language:"English"},{keyword:"max performance",mode:"blitzkrieg",language:"English"},{keyword:"go all out",mode:"blitzkrieg",language:"English"},{keyword:"full power",mode:"blitzkrieg",language:"English"},{keyword:"search",mode:"search",language:"English",aliases:["find","locate","look for"]},{keyword:"find",mode:"search",language:"English"},{keyword:"locate",mode:"search",language:"English"},{keyword:"look for",mode:"search",language:"English"},{keyword:"explore",mode:"search",language:"English"},{keyword:"analyze",mode:"analyze",language:"English",aliases:["investigate","examine"]},{keyword:"investigate",mode:"analyze",language:"English"},{keyword:"examine",mode:"analyze",language:"English"},{keyword:"deep analysis",mode:"analyze",language:"English"},{keyword:"detailed analysis",mode:"analyze",language:"English"},{keyword:"ultrathink",mode:"ultrathink",language:"English",aliases:["think deeply","deep think"]},{keyword:"think deeply",mode:"ultrathink",language:"English"},{keyword:"deep think",mode:"ultrathink",language:"English"},{keyword:"extended thinking",mode:"ultrathink",language:"English"},{keyword:"careful reasoning",mode:"ultrathink",language:"English"},{keyword:"blitzkrieg",mode:"blitzkrieg",language:"Spanish",aliases:["ulw","trabajo ultra"]},{keyword:"trabajo ultra",mode:"blitzkrieg",language:"Spanish"},{keyword:"máximo rendimiento",mode:"blitzkrieg",language:"Spanish"},{keyword:"buscar",mode:"search",language:"Spanish",aliases:["encontrar","localizar"]},{keyword:"encontrar",mode:"search",language:"Spanish"},{keyword:"localizar",mode:"search",language:"Spanish"},{keyword:"analizar",mode:"analyze",language:"Spanish",aliases:["investigar","examinar"]},{keyword:"investigar",mode:"analyze",language:"Spanish"},{keyword:"examinar",mode:"analyze",language:"Spanish"},{keyword:"pensar profundamente",mode:"ultrathink",language:"Spanish",aliases:["piensa","razonamiento profundo"]},{keyword:"piensa",mode:"ultrathink",language:"Spanish"},{keyword:"razonamiento profundo",mode:"ultrathink",language:"Spanish"},{keyword:"blitzkrieg",mode:"blitzkrieg",language:"French",aliases:["ulw","travail ultra"]},{keyword:"travail ultra",mode:"blitzkrieg",language:"French"},{keyword:"chercher",mode:"search",language:"French",aliases:["rechercher","trouver"]},{keyword:"rechercher",mode:"search",language:"French"},{keyword:"trouver",mode:"search",language:"French"},{keyword:"analyser",mode:"analyze",language:"French",aliases:["investiguer","examiner"]},{keyword:"investiguer",mode:"analyze",language:"French"},{keyword:"examiner",mode:"analyze",language:"French"},{keyword:"réfléchir profondément",mode:"ultrathink",language:"French",aliases:["réfléchis","pensée profonde"]},{keyword:"réfléchis",mode:"ultrathink",language:"French"},{keyword:"blitzkrieg",mode:"blitzkrieg",language:"German",aliases:["ulw","maximal"]},{keyword:"maximale leistung",mode:"blitzkrieg",language:"German"},{keyword:"suchen",mode:"search",language:"German",aliases:["finden","lokalisieren"]},{keyword:"finden",mode:"search",language:"German"},{keyword:"analysieren",mode:"analyze",language:"German",aliases:["untersuchen","prüfen"]},{keyword:"untersuchen",mode:"analyze",language:"German"},{keyword:"nachdenken",mode:"ultrathink",language:"German",aliases:["denk nach","sorgfältig denken"]},{keyword:"denk nach",mode:"ultrathink",language:"German"},{keyword:"sorgfältig denken",mode:"ultrathink",language:"German"},{keyword:"강력한",mode:"blitzkrieg",language:"Korean",aliases:["울트라워크","최대"]},{keyword:"울트라워크",mode:"blitzkrieg",language:"Korean"},{keyword:"최대",mode:"blitzkrieg",language:"Korean"},{keyword:"최고 성능",mode:"blitzkrieg",language:"Korean"},{keyword:"검색",mode:"search",language:"Korean",aliases:["찾아","찾기"]},{keyword:"찾아",mode:"search",language:"Korean"},{keyword:"찾기",mode:"search",language:"Korean"},{keyword:"분석",mode:"analyze",language:"Korean",aliases:["조사","검토"]},{keyword:"조사",mode:"analyze",language:"Korean"},{keyword:"검토",mode:"analyze",language:"Korean"},{keyword:"생각해",mode:"ultrathink",language:"Korean",aliases:["깊게 생각","신중한 사고"]},{keyword:"깊게 생각",mode:"ultrathink",language:"Korean"},{keyword:"신중한 사고",mode:"ultrathink",language:"Korean"},{keyword:"强力",mode:"blitzkrieg",language:"Chinese (Simplified)",aliases:["超神","最大"]},{keyword:"超神",mode:"blitzkrieg",language:"Chinese (Simplified)"},{keyword:"最大",mode:"blitzkrieg",language:"Chinese (Simplified)"},{keyword:"搜索",mode:"search",language:"Chinese (Simplified)",aliases:["查找","定位"]},{keyword:"查找",mode:"search",language:"Chinese (Simplified)"},{keyword:"定位",mode:"search",language:"Chinese (Simplified)"},{keyword:"分析",mode:"analyze",language:"Chinese (Simplified)",aliases:["调查","检查"]},{keyword:"调查",mode:"analyze",language:"Chinese (Simplified)"},{keyword:"检查",mode:"analyze",language:"Chinese (Simplified)"},{keyword:"深度思考",mode:"ultrathink",language:"Chinese (Simplified)",aliases:["仔细思考","让我想想"]},{keyword:"仔细思考",mode:"ultrathink",language:"Chinese (Simplified)"},{keyword:"让我想想",mode:"ultrathink",language:"Chinese (Simplified)"},{keyword:"强力",mode:"blitzkrieg",language:"Chinese (Traditional)",aliases:["超神","最大"]},{keyword:"超神",mode:"blitzkrieg",language:"Chinese (Traditional)"},{keyword:"最大",mode:"blitzkrieg",language:"Chinese (Traditional)"},{keyword:"搜索",mode:"search",language:"Chinese (Traditional)",aliases:["查找","定位"]},{keyword:"查找",mode:"search",language:"Chinese (Traditional)"},{keyword:"定位",mode:"search",language:"Chinese (Traditional)"},{keyword:"分析",mode:"analyze",language:"Chinese (Traditional)",aliases:["調查","檢查"]},{keyword:"調查",mode:"analyze",language:"Chinese (Traditional)"},{keyword:"檢查",mode:"analyze",language:"Chinese (Traditional)"},{keyword:"深度思考",mode:"ultrathink",language:"Chinese (Traditional)",aliases:["仔細思考","讓我思考"]},{keyword:"仔細思考",mode:"ultrathink",language:"Chinese (Traditional)"},{keyword:"讓我思考",mode:"ultrathink",language:"Chinese (Traditional)"},{keyword:"強力",mode:"blitzkrieg",language:"Japanese",aliases:["最大","フルパワー"]},{keyword:"最大",mode:"blitzkrieg",language:"Japanese"},{keyword:"フルパワー",mode:"blitzkrieg",language:"Japanese"},{keyword:"検索",mode:"search",language:"Japanese",aliases:["探す","見つける"]},{keyword:"探す",mode:"search",language:"Japanese"},{keyword:"見つける",mode:"search",language:"Japanese"},{keyword:"分析",mode:"analyze",language:"Japanese",aliases:["調査","検討"]},{keyword:"調査",mode:"analyze",language:"Japanese"},{keyword:"検討",mode:"analyze",language:"Japanese"},{keyword:"深く考える",mode:"ultrathink",language:"Japanese",aliases:["思考","注意深く考える"]},{keyword:"思考",mode:"ultrathink",language:"Japanese"},{keyword:"注意深く考える",mode:"ultrathink",language:"Japanese"},{keyword:"blitzkrieg",mode:"blitzkrieg",language:"Portuguese",aliases:["ulw","trabalho ultra"]},{keyword:"trabalho ultra",mode:"blitzkrieg",language:"Portuguese"},{keyword:"pesquisar",mode:"search",language:"Portuguese",aliases:["procurar","encontrar"]},{keyword:"procurar",mode:"search",language:"Portuguese"},{keyword:"encontrar",mode:"search",language:"Portuguese"},{keyword:"analisar",mode:"analyze",language:"Portuguese",aliases:["investigar","examinar"]},{keyword:"investigar",mode:"analyze",language:"Portuguese"},{keyword:"examinar",mode:"analyze",language:"Portuguese"},{keyword:"pensar profundamente",mode:"ultrathink",language:"Portuguese",aliases:["pense","raciocínio profundo"]},{keyword:"pense",mode:"ultrathink",language:"Portuguese"},{keyword:"raciocínio profundo",mode:"ultrathink",language:"Portuguese"},{keyword:"blitzkrieg",mode:"blitzkrieg",language:"Italian",aliases:["ulw","lavoro ultra"]},{keyword:"lavoro ultra",mode:"blitzkrieg",language:"Italian"},{keyword:"cercare",mode:"search",language:"Italian",aliases:["trovare","ricercare"]},{keyword:"trovare",mode:"search",language:"Italian"},{keyword:"ricercare",mode:"search",language:"Italian"},{keyword:"analizzare",mode:"analyze",language:"Italian",aliases:["indagare","esaminare"]},{keyword:"indagare",mode:"analyze",language:"Italian"},{keyword:"esaminare",mode:"analyze",language:"Italian"},{keyword:"pensare attentamente",mode:"ultrathink",language:"Italian",aliases:["pensa","pensiero profondo"]},{keyword:"pensa",mode:"ultrathink",language:"Italian"},{keyword:"pensiero profondo",mode:"ultrathink",language:"Italian"},{keyword:"ультраворк",mode:"blitzkrieg",language:"Russian",aliases:["ulw","максимально"]},{keyword:"максимально",mode:"blitzkrieg",language:"Russian"},{keyword:"поиск",mode:"search",language:"Russian",aliases:["найти","искать"]},{keyword:"найти",mode:"search",language:"Russian"},{keyword:"искать",mode:"search",language:"Russian"},{keyword:"анализировать",mode:"analyze",language:"Russian",aliases:["исследовать","изучить"]},{keyword:"исследовать",mode:"analyze",language:"Russian"},{keyword:"изучить",mode:"analyze",language:"Russian"},{keyword:"подумать",mode:"ultrathink",language:"Russian",aliases:["подумай","тщательно подумать"]},{keyword:"подумай",mode:"ultrathink",language:"Russian"},{keyword:"тщательно подумать",mode:"ultrathink",language:"Russian"},{keyword:"ألترا وورك",mode:"blitzkrieg",language:"Arabic",aliases:["العمل القوي","الأقصى"]},{keyword:"بحث",mode:"search",language:"Arabic",aliases:["إيجاد","تحديد موقع"]},{keyword:"تحليل",mode:"analyze",language:"Arabic",aliases:["تحقيق","فحص"]},{keyword:"تفكير عميق",mode:"ultrathink",language:"Arabic",aliases:["فكر","تفكر بعناية"]},{keyword:"فكر",mode:"ultrathink",language:"Arabic"},{keyword:"अल्ट्रावर्क",mode:"blitzkrieg",language:"Hindi",aliases:["अधिकतम","अधिक कार्य"]},{keyword:"अधिकतम",mode:"blitzkrieg",language:"Hindi"},{keyword:"अधिक कार्य",mode:"blitzkrieg",language:"Hindi"},{keyword:"खोज",mode:"search",language:"Hindi",aliases:["ढूंढना","ढूंढो"]},{keyword:"विश्लेषण",mode:"analyze",language:"Hindi",aliases:["जांच","जांचना"]},{keyword:"जांच",mode:"analyze",language:"Hindi"},{keyword:"जांचना",mode:"analyze",language:"Hindi"},{keyword:"गहरी सोच",mode:"ultrathink",language:"Hindi",aliases:["सोचो","ध्यानपूर्वक सोच"]},{keyword:"सोचो",mode:"ultrathink",language:"Hindi"},{keyword:"ध्यानपूर्वक सोच",mode:"ultrathink",language:"Hindi"}];function Xi(e){let t=e.toLowerCase(),n=new Map;for(let s of zc){let c=s.keyword.toLowerCase();if(t.includes(c)){if(!n.has(s.mode))n.set(s.mode,new Set);n.get(s.mode).add(s.keyword)}if(s.aliases)for(let l of s.aliases){let u=l.toLowerCase();if(t.includes(u)){if(!n.has(s.mode))n.set(s.mode,new Set);n.get(s.mode).add(s.keyword)}}}if(n.size===0)return null;let r="",i=0;for(let[s,c]of n.entries())if(c.size>i)r=s,i=c.size;let o=Array.from(n.get(r)),a=i>2?0.9:i>1?0.7:0.5;return console.log(`[mode-detector] Detected mode "${r}" with ${i} keyword matches (confidence: ${a})`),{mode:r,keywords:o,confidence:a}}var Yc={blitzkrieg:{name:"Ultrawork",enabled:!0,parallelAgents:4,concurrencyLimits:{anthropic:2,openai:3,google:3}},search:{name:"Search",enabled:!0,maxResults:50,useExplore:!0,useLibrarian:!0},analyze:{name:"Analyze",enabled:!0,consultationPhases:3,expertAgents:["oracle","Abyssal","Siren"]},ultrathink:{name:"Ultrathink",enabled:!0,thinkingBudget:32000,autoVariantSwitch:!0}};function Qi(e){return Yc[e]}var Xc=new Map;function Zi(e,t,n){let r=Qi(t);if(!r||!r.enabled)return console.log(`[mode-switcher] Mode "${t}" not found or disabled`),!1;let i={name:t,activatedAt:Date.now(),config:r};if(Xc.set(e,i),console.log(`[mode-switcher] Activated mode "${t}" for session ${e}`),n?.onModeActivate)n.onModeActivate({mode:t,keyword:""});return!0}function eo(e,t){let n=qn()||{};if(t?.enabled===!1)return{};return{"chat.message":async(r,i)=>{if(!i.parts)return;let{sessionID:o}=r;for(let a of i.parts)if(a.type==="text"){let s=a.text;if(s&&o){let c=Xi(s);if(c&&t?.autoActivate!==!1){if(console.log(`[mode-hooks] Detected mode "${c.mode}" with ${c.keywords.length} keywords for session ${o}`),Zi(o,c.mode),c.mode==="blitzkrieg"){let l=n.blitzkrieg;console.log("[mode-hooks] Activating Blitzkrieg mode")}else if(c.mode==="search")console.log("[mode-hooks] Activating Search mode");else if(c.mode==="analyze")console.log("[mode-hooks] Activating Analyze mode");else if(c.mode==="ultrathink")console.log("[mode-hooks] Activating Ultrathink mode")}}}}}}var Qc=k("session-storage-hook");function Qt(e,t){let n=t?.config??{enabled:!0,recordTodos:!0,recordTranscripts:!0};if(!n.enabled)return{};function r(o){return o.filter((a)=>a.type==="text").map((a)=>a.text).join(`
2013
+ `).trim()}function i(o){let a=r(o),s=[/<todo>[\s\S]*?<\/todo>/gi,/<task>[\s\S]*?<\/task>/gi,/\[TODO\]([\s\S]*?)\]/gi,/\[ \]\s*([^\]]*)\]/gi];for(let c of s){let l=a.match(c);if(l)return{content:l[1]||l[0].replace(/<\/?[^\>]*>/g,"").replace(/\[\/?[^]]*\]/g,"").trim()}}return null}return{"chat.message":async(o,a)=>{if(!n.enabled)return;let{sessionID:s}=o;if(!s)return;if(n.recordTodos){let c=i(a.parts);if(c)Dr(s,`TODO: ${c.content}`)}if(n.recordTranscripts){let c=r(a.parts);if(c)Nr(s,c)}},"tool.execute.after":async(o,a)=>{if(!n.enabled)return;let{tool:s,sessionID:c}=o;if(!c)return;if(n.recordTranscripts)_e(c,s,{},a.output||"");if(c)Qc.info(`Tool ${s} completed for session ${c}`)}}}var Vm=Qt({});function to(e,t){let n={enabled:t?.config?.enabled??!0,mcp:t?.config?.mcp??!0,commands:t?.config?.commands??!0,skills:t?.config?.skills??!0,agents:t?.config?.agents??!0,hooks:t?.config?.hooks??!0,toggles:t?.config?.toggles??{}};return{config:async(r)=>{try{if(r){if(Object.assign(n,r?.claudeCodeCompatibility??r),r?.claudeCodeCompatibility?.toggles)n.toggles={...n.toggles,...r.claudeCodeCompatibility.toggles}}}catch(i){console.error("[claude-code-hooks] Error applying config:",i)}},"tool.execute.before":async(r,i)=>{if(!n.enabled||n.hooks===!1||n.toggles?.hooks===!1)return;console.log("[claude-code-hooks] Processing tool execution")},"tool.execute.after":async(r,i)=>{if(!n.enabled||n.hooks===!1||n.toggles?.hooks===!1)return;console.log("[claude-code-hooks] Tool execution completed")}}}var Zc=["anthropic","bedrock","google","openai"],el=["think","let me think","i need to think","take time to think","think about this","think carefully","piensa","déjame pensar","necesito pensar","piénsalo","piensa cuidadosamente","réfléchis","laissez-moi réfléchir","je dois réfléchir","réfléchissez-y","réfléchir attentivement","denk nach","lass mich nachdenken","ich muss nachdenken","denk darüber nach","denke sorgfältig","pense","deixe-me pensar","preciso pensar","pense sobre isso","pense cuidadosamente","pensa","fammi pensare","devo pensare","pensa a questo","pensa attentamente","подумай","дай мне подумать","мне нужно подумать","подумай об этом","подумай внимательно","考えて","考えさせて","考える必要がある","これについて考えて","注意深く考えて","思考","让我想想","我需要思考","思考这个","仔细思考","思考","讓我思考","我需要思考","思考這個","仔細思考","생각해","생각하게 해줘","생각해야 해","이것에 대해 생각해","신중하게 생각해"];function tl(e){return Zc.some((t)=>e.toLowerCase().includes(t.toLowerCase()))}var no=new Map;function nl(e){return no.get(e)}function rl(e,t){no.set(e,{enabled:t,activatedAt:Date.now()})}function il(e){let t=e.toLowerCase();for(let n of el)if(t.includes(n))return!0;return!1}function ro(e){return{"chat.message":async(t,n)=>{let{sessionID:r}=t,o=(n?.parts||[]).filter((a)=>a.type==="text").map((a)=>a.text).join(`
2014
+ `).trim();if(typeof o==="string"&&o.length>0){if(il(o))console.log(`[think-mode] Activated for session ${r}`),rl(r,!0)}return},"chat.params":async(t,n)=>{let{sessionID:r,provider:i}=t;if(nl(r)?.enabled){n.variant="max";let a=i?.info?.id||i?.options?.providerID||"";if(tl(a)){if(console.log(`[think-mode] Applying think mode settings for provider ${a}`),!n.options)n.options={};if(a.includes("anthropic"))n.options.thinking={budget_tokens:20000,type:"auto"}}}return}}}import{tool as ze}from"@opencode-ai/plugin";import{z as re}from"zod";function ol(e,t){if(!t)return e;return`${e}
1558
2015
 
1559
2016
  Context:
1560
- ${t}`}function cl(e){return e.filter((n)=>n.type==="text"||n.type==="reasoning").map((n)=>n.text).join(`
1561
- `).trim()}async function ll(e,t,n,r){let i=await e.client.session.create({body:{title:`Subagent: ${t}`},query:{directory:e.directory}});if(!i||i.error||!i.data){let l=i?.error?JSON.stringify(i.error):"Failed to create session for subagent task.";throw Error(l)}let o=i.data.id,a=al(n,r),s=await e.client.session.prompt({path:{id:o},query:{directory:e.directory},body:{agent:t,parts:[{type:"text",text:a}]}});if(!s||s.error||!s.data){let l=s?.error?JSON.stringify(s.error):"Subagent prompt failed.";throw Error(l)}let c=cl(s.data.parts);return{sessionId:o,responseText:c||JSON.stringify(s.data,null,2)}}function io(e,t){return ze({description:"Delegate a task to a specialized subagent for domain expertise. Supports both synchronous (wait=true) and asynchronous (wait=false) execution patterns. Use this when tasks require specialized knowledge, extensive search, or can benefit from parallel execution.",args:{agent:re.enum(["Nautilus","Abyssal","Maelstrom","Coral","Siren","Leviathan","Poseidon (Plan Consultant)","Scylla (Plan Reviewer)","Pearl"]).describe(`Name of subagent to delegate to. Each agent has specialized expertise:
2017
+ ${t}`}function sl(e){return e.filter((n)=>n.type==="text"||n.type==="reasoning").map((n)=>n.text).join(`
2018
+ `).trim()}async function al(e,t,n,r){let i=await e.client.session.create({body:{title:`Subagent: ${t}`},query:{directory:e.directory}});if(!i||i.error||!i.data){let l=i?.error?JSON.stringify(i.error):"Failed to create session for subagent task.";throw Error(l)}let o=i.data.id,a=ol(n,r),s=await e.client.session.prompt({path:{id:o},query:{directory:e.directory},body:{agent:t,parts:[{type:"text",text:a}]}});if(!s||s.error||!s.data){let l=s?.error?JSON.stringify(s.error):"Subagent prompt failed.";throw Error(l)}let c=sl(s.data.parts);return{sessionId:o,responseText:c||JSON.stringify(s.data,null,2)}}function io(e,t){return ze({description:"Delegate a task to a specialized subagent for domain expertise. Supports both synchronous (wait=true) and asynchronous (wait=false) execution patterns. Use this when tasks require specialized knowledge, extensive search, or can benefit from parallel execution.",args:{agent:re.enum(["Nautilus","Abyssal","Maelstrom","Coral","Siren","Leviathan","Poseidon (Plan Consultant)","Scylla (Plan Reviewer)","Pearl"]).describe(`Name of subagent to delegate to. Each agent has specialized expertise:
1562
2019
  - Nautilus: Codebase search, pattern finding, symbol analysis
1563
2020
  - Abyssal: External research, documentation lookup, API discovery
1564
2021
  - Maelstrom: Architecture design, system analysis, trade-off evaluation
@@ -1567,21 +2024,21 @@ ${t}`}function cl(e){return e.filter((n)=>n.type==="text"||n.type==="reasoning")
1567
2024
  - Leviathan: System design, structural analysis, large-scale architecture
1568
2025
  - Poseidon: Planning, requirement analysis, test plan creation
1569
2026
  - Scylla: Code review, test coverage analysis, quality assurance
1570
- - Pearl: Testing, test creation, test execution`),task:re.string().min(5).describe("Clear, specific description of what the agent should do. Include relevant context, expected output format, and success criteria."),context:re.string().optional().describe("Additional context that may help the agent complete the task"),wait:re.boolean().default(!1).describe("If true, wait for the agent to complete and return the full result. If false (default), return immediately with a task ID for async tracking. Use wait=false for parallel delegation to multiple agents.")},async execute(n){let{agent:r,task:i,context:o,wait:a}=n;try{let s=e.createTask(r,i,o),c=async()=>{let l=await ll(t,r,i,o);s.sessionId=l.sessionId,e.completeTask(s.id,l.responseText)};if(e.startTask(s.id),a){try{await c()}catch(u){e.failTask(s.id,u instanceof Error?u.message:"Unknown error")}let l=e.getTask(s.id);return JSON.stringify({success:!0,taskId:l?.id??s.id,agent:l?.agent??r,status:l?.status??"failed",result:l?.result,error:l?.error,duration:l?.completedAt&&l?.startedAt?l.completedAt-l.startedAt:null,sessionId:l?.sessionId},null,2)}return c().catch((l)=>{e.failTask(s.id,l instanceof Error?l.message:"Unknown error")}),JSON.stringify({success:!0,taskId:s.id,agent:s.agent,status:s.status,message:`Task delegated to ${r}. Use background_task_status to check progress.`,sessionId:s.sessionId},null,2)}catch(s){return JSON.stringify({success:!1,error:s instanceof Error?s.message:"Unknown error"},null,2)}}})}function oo(e){return ze({description:"Check the status of a background agent task. Returns completion status, results, and duration information for tasks created with call_agent(wait=false).",args:{taskId:re.string().describe("Task ID from a previous call_agent invocation")},async execute(t){let{taskId:n}=t,r=e.getTask(n);if(!r)return JSON.stringify({success:!1,error:`Task ${n} not found`},null,2);return JSON.stringify({success:!0,taskId:r.id,agent:r.agent,status:r.status,result:r.result,error:r.error,duration:r.completedAt&&r.startedAt?r.completedAt-r.startedAt:null,createdAt:r.createdAt,startedAt:r.startedAt,completedAt:r.completedAt,sessionId:r.sessionId},null,2)}})}function so(e){return ze({description:"List all background tasks for the current session. Returns both active and recently completed tasks for tracking parallel delegation workflows.",args:{status:re.enum(["all","pending","running","completed","failed"]).default("all").describe("Filter by task status. Default 'all' shows all tasks.")},async execute(t){let{status:n}=t,r=e.listTasks(),i=n==="all"?r:r.filter((o)=>o.status===n);return JSON.stringify({success:!0,count:i.length,tasks:i},null,2)}})}function ao(e){return ze({description:"Cancel a running or pending background task. Use this when a task is no longer needed or when you want to free up concurrency slots.",args:{taskId:re.string().describe("Task ID to cancel")},async execute(t){let{taskId:n}=t;if(!e.cancelTask(n))return JSON.stringify({success:!1,error:`Task ${n} not found or cannot be cancelled`},null,2);return JSON.stringify({success:!0,taskId:n,message:`Task ${n} cancelled successfully`},null,2)}})}class co{tasks=new Map;config;queues=new Map;counts=new Map;constructor(e){this.config=e||{}}getConcurrencyLimit(e){let t=this.config.modelConcurrency?.[e];if(t!==void 0)return t===0?1/0:t;let n=e.split("/")[0],r=this.config.providerConcurrency?.[n];if(r!==void 0)return r===0?1/0:r;let i=this.config.defaultConcurrency;if(i!==void 0)return i===0?1/0:i;return 5}async acquire(e){let t=this.getConcurrencyLimit(e);if(t===1/0)return;let n=this.counts.get(e)??0;if(n<t){this.counts.set(e,n+1);return}return new Promise((r)=>{let i=this.queues.get(e)??[];i.push(r),this.queues.set(e,i)})}release(e){if(this.getConcurrencyLimit(e)===1/0)return;let n=this.queues.get(e);if(n&&n.length>0){let r=n.shift();if(this.counts.set(e,(this.counts.get(e)??0)-1),r)r()}else{let r=this.counts.get(e)??0;if(r>0)this.counts.set(e,r-1)}}createTask(e,t,n){let r={id:crypto.randomUUID(),agent:e,status:"pending",createdAt:Date.now()};return this.tasks.set(r.id,r),r}waitForTask(e,t=30000){return new Promise((n,r)=>{let i=setInterval(()=>{let o=this.tasks.get(e);if(!o){clearInterval(i),r(Error(`Task ${e} not found`));return}if(o.status==="completed"||o.status==="failed")clearInterval(i),n(o)},100);setTimeout(()=>{clearInterval(i),r(Error(`Task ${e} timed out after ${t}ms`))},t)})}cancelTask(e){let t=this.tasks.get(e);if(!t||t.status!=="pending"&&t.status!=="running")return!1;return t.status="failed",t.completedAt=Date.now(),t.error="Task cancelled by user",!0}startTask(e){let t=this.tasks.get(e);if(!t||t.status!=="pending")return!1;return t.status="running",t.startedAt=Date.now(),!0}completeTask(e,t){let n=this.tasks.get(e);if(!n||n.status!=="running")return!1;return n.status="completed",n.completedAt=Date.now(),n.result=t,!0}failTask(e,t){let n=this.tasks.get(e);if(!n||n.status!=="running")return!1;return n.status="failed",n.completedAt=Date.now(),n.error=t,!0}getTask(e){return this.tasks.get(e)}listTasks(){return Array.from(this.tasks.values())}listActiveTasks(){return Array.from(this.tasks.values()).filter((e)=>e.status==="pending"||e.status==="running")}}function lo(e){let t=new co;return{manager:t,tools:{call_agent:io(t,{client:e.client,directory:e.directory}),background_task_status:oo(t),background_task_list:so(t),background_task_cancel:ao(t)}}}var Ye={"claude-3-5-sonnet":200000,"claude-3-5-haiku":200000,"claude-3-opus":200000,"claude-3-sonnet":200000,"claude-3-haiku":200000,"gpt-4o":128000,"gpt-4o-mini":128000,"gpt-4-turbo":128000,"gpt-4":8192,"gpt-3.5-turbo":16385,"gemini-2.5-pro":1e6,"gemini-2.5-flash":1e6,"gemini-2.0-flash":1e6,"gemini-1.5-pro":2800000,"gemini-1.5-flash":1e6,default:1e5},uo=new Map;function dl(e){let t=uo.get(e);if(!t)t={messageCount:0,lastWarningAt:0,totalEstimatedTokens:0},uo.set(e,t);return t}function Zt(e){let t=e.toLowerCase();if(Ye[t])return Ye[t];for(let[n,r]of Object.entries(Ye))if(t.includes(n.toLowerCase()))return r;return Ye.default}function ul(e){return Math.ceil(e.length/4)}function pl(e,t,n=0.7){if(e<=0)return!1;let r=Zt(t);return e/r>=n}function ml(e,t,n,r){let i=dl(e);if(i.messageCount++,i.totalEstimatedTokens+=n,i.messageCount%10===0||pl(i.totalEstimatedTokens,t,r)){let a=Date.now();if(a-i.lastWarningAt>=60000){let s=Zt(t),c=gl(i.totalEstimatedTokens,t);if(c>=(r??0.7)*100)console.warn(`⚠️ Context Window Warning: You are at ${c}% of ${s} token limit (~${i.totalEstimatedTokens}/${s} tokens). Consider clearing context.`);else console.log(`ℹ️ Context Window: At ${c}% of ${s} token limit (~${i.totalEstimatedTokens}/${s} tokens, ${i.messageCount} messages).`);i.lastWarningAt=a}}}function gl(e,t){let n=Zt(t);if(n<=0)return 0;return Math.round(e/n*100)}function po(e){return{"chat.message":async(t,n)=>{let{sessionID:r,model:i}=t,o=i?.modelID||"default",s=(n?.parts||[]).filter((c)=>c.type==="text").map((c)=>c.text).join(`
1571
- `);if(s){let c=ul(s);ml(r,o,c)}return}}}function mo(e,t){let n=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",r=S("keyword-detector"),i=t?.config??{enabled:!0,keywords:{blitz:"blitzkrieg",blz:"blitzkrieg","[BUILD]":"build","[PLAN]":"plan","[RESEARCH]":"research","[DOCS]":"docs","[REVIEW]":"review",think:"think",ultrathink:"think",ulw:"ultrawork",ultrawork:"ultrawork",search:"search",analyze:"analyze",investigate:"analyze","[INVESTIGATE]":"research",piensa:"think","déjame pensar":"think","necesito pensar":"think","piénsalo":"think","piensa cuidadosamente":"think","réfléchis":"think","laissez-moi réfléchir":"think","je dois réfléchir":"think","réfléchissez-y":"think","réfléchir attentivement":"think","denk nach":"think","lass mich nachdenken":"think","denk darüber nach":"think","denke sorgfältig":"think",pense:"think","fammi pensare":"think","devo pensare":"think","pensa a questo":"think","pensa attentamente":"think","подумай":"think","дай мне подумать":"think","мне нужно подумать":"think","подумай об этом":"think","подумай внимательно":"think","考えて":"think","考えさせて":"think","考える必要がある":"think","これについて考えて":"think","注意深く考えて":"think","思考":"think","让我想想":"think","我需要思考":"think","思考这个":"think","仔细思考":"think","思考這個":"think","생각해":"think","생각하게 해줘":"think","이것에 대해 생각해":"think","신중하게 생각해":"think","فكر":"think","أريد أن أفكر":"think","دعني أفكر":"think","فكر بعناية":"think","تفكر باهتمام":"think","חשב":"think","תן להרהר":"think","אני צריך לחשוב":"think","חשב בריצות":"think",pikirkan:"think","saya perlu berpikir":"think","biarkan saya berpikir":"think","pikirkan dengan baik":"think","подумай про це":"think","подумай уважно":"think","σκεψου":"think","ας σκεφτεί":"think","χρειάζεται να σκεφτώ":"think","σκεφτεί σοβαρά":"think",myslet:"think","musím myslet":"think","nechte mě myslet":"think","myslet pozorně":"think","gândește":"think","trebuie să gândesc":"think","gândește-te":"think","gândește cu atenție":"think","tænk":"think","jeg skal tænke":"think","lad mig tænke":"think","tænk nøje":"think","tänk":"think","jag behöver tänka":"think","låt mig tänka":"think","tänk noga":"think",denk:"think","ik moet denken":"think","laat me denken":"think","denk goed na":"think","คิด":"think","ฉันต้องคิด":"think","ให้ฉันคิด":"think","คิดให้ดี":"think"}};function o(c){return c.filter((l)=>l.type==="text").map((l)=>l.text).join(`
1572
- `).trim()}function a(c){let l=["فكر","أريد أن أفكر","دعني أفكر","فكر بعناية","تفكر باهتمام"],u=["חשב","תן להרהר","אני צריך לחשוב","חשב בריצות"],p=["pikirkan","saya perlu berpikir","biarkan saya berpikir","pikirkan dengan baik"],m=["подумай","дай мені подумати","мені потрібно подумати","подумай про це","подумай уважно"],g=["σκεψου","ας σκεφτεί","χρειάζεται να σκεφτώ","σκεφτεί σοβαρά"],f=["myslet","musím myslet","nechte mě myslet","myslet pozorně"],b=["gândește","trebuie să gândesc","gândește-te","gândește cu atenție"],y=["tænk","jeg skal tænke","lad mig tænke","tænk nøje"],C=["tänk","jag behöver tänka","låt mig tänka","tänk noga"],D=["tænk","jeg skal tænke","lad mig tænke","tænk nøje"],I=["denk","ik moet denken","laat me denken","denk goed na"],N=["คิด","ฉันต้องคิด","ให้ฉันคิด","คิดให้ดี"],Me=["réfléchis","laissez-moi réfléchir","je dois réfléchir","réfléchissez-y","réfléchir attentivement"],he=["piensa","déjame pensar","necesito pensar","piénsalo","piensa cuidadosamente"],ye=["denk nach","lass mich nachdenken","denk darüber nach","denke sorgfältig"],$n=["pensa","fammi pensare","devo pensare","pensa a questo","pensa attentamente"],In=["подумай","дай мне подумать","мне нужно подумать","подумай об этом","подумай внимательно"],Fn=["考えて","考えさせて","考える必要がある","これについて考えて","注意深く考えて"],Ln=["思考","让我想想","我需要思考","思考这个","仔细思考","思考這個"],jn=["생각해","생각하게 해줘","이것에 대해 생각해","신중하게 생각해"],_n=["think","reason","think deeply","ultrathink","ultra think",...Me,...he,...ye,...$n,...In,...Fn,...Ln,...jn,...l,...u,...p,...m,...g,...f,...b,...y,...C,...D,...I,...N],w=["ultrawork","ulw","ultra work","ultra work mode","초신속","슈퍼모드","스피드","super rapid","ultra rapid","أسرع","על הכי מהיר","kerja super cepat","ультра-быстро","υπερταχύτητα","super rychle","super viteză"],Ts=["search","find","locate","search for","find in","locate in","검색","찾아","查找","検索","rechercher","buscar","suchen","cercare","найти","חפש","بحث","cari","пошук","αναζήτηση","hledat","căuta","søg","sök","zoek","ค้นหา"],Ms=["analyze","investigate","examine","deep dive","deep analysis","분석","조사","分析","分析","analyser","analizar","analysieren","analizzare","анализировать","נתח","تحليل","analisis","analiza","аналізувати","ανάλυση","analyzovat","analiza","analyseer","onderzoek","วิเคราะห์"];if(w.includes(c.toLowerCase()))return{mode:"ultrawork",language:s(c)};if(Ts.includes(c.toLowerCase()))return{mode:"search",language:s(c)};if(Ms.includes(c.toLowerCase()))return{mode:"analyze",language:s(c)};if(_n.includes(c.toLowerCase()))return{mode:"think",language:s(c)};return{mode:"enhanced",language:s(c)}}function s(c){let l=c.toLowerCase(),u=/[ا-ي-ع]/,p=/[\u0590-\u05FF]/,m=/[\u0400-\u04FF]/,g=/[\u4E00-\u9FFF]/,f=/[\u3040-\u30FF]/,b=/[\uAC00-\uD7AF]/,y=/[\u0370-\u03FF]/,C=/[\u0E00-\u0E7F]/;if(u.test(c))return"Arabic";if(p.test(c))return"Hebrew";if(m.test(c)){if(l.includes("подум"))return"Ukrainian";if(l.includes("дум"))return"Russian"}if(g.test(c))return"Chinese";if(f.test(c))return"Japanese";if(b.test(c))return"Korean";if(y.test(c))return"Greek";if(C.test(c))return"Thai";if(["réfléchis","pensa","déjame","pensar"].some((w)=>l.includes(w.toLowerCase())))return"French";if(["piensa","necesito","pensar"].some((w)=>l.includes(w.toLowerCase())))return"Spanish";if(["denk","nachdenken"].some((w)=>l.includes(w.toLowerCase())))return"German";if(["pensa","pensare"].some((w)=>l.includes(w.toLowerCase())))return"Italian";if(["think","reason","analyze","investigate","search","find"].some((w)=>l.includes(w)))return"English";if(["myslet","myslet"].some((w)=>l.includes(w.toLowerCase())))return"Czech";if(["gând","gândește"].some((w)=>l.includes(w.toLowerCase())))return"Romanian";if(["tænk","tænke"].some((w)=>l.includes(w.toLowerCase())))return"Danish";if(["tänk"].some((w)=>l.includes(w.toLowerCase())))return"Swedish";if(["tænk"].some((w)=>l.includes(w.toLowerCase())))return"Norwegian";if(["denk"].some((w)=>l.includes(w.toLowerCase())))return"Dutch";if(["pikir"].some((w)=>l.includes(w.toLowerCase())))return"Indonesian";return}return{"chat.message":async(c,l)=>{if(!i.enabled)return;let u=o(l.parts);if(!u)return;let p=u.split(/\s+/);for(let m of p)if(i.keywords?.[m]){let f=a(m);if(n)r.debug(`Detected "${m}" (${f.language}), activating: ${f.mode} mode`);let b=c.config;if(f.mode==="ultrawork"){if(b?.enhanced?.enabled===!1)b.enhanced={...b.enhanced,enabled:!0}}else if(f.mode==="search"){if(n)r.debug(`Activating search mode for ${f.language}`)}else if(f.mode==="analyze"){if(n)r.debug(`Activating analyze mode for ${f.language}`)}else if(f.mode==="think"){if(n)r.debug(`Activating think mode for ${f.language}`)}else if(f.mode==="enhanced"){if(n)r.debug("Activating enhanced mode")}}}}}function go(e,t){let n=t?.config??{enabled:!0,commands:{"/build":"build","/plan":"plan","/research":"research","/docs":"docs","/review":"review","/test":"test","/fix":"fix","/explain":"explain"}};function r(i){return i.filter((o)=>o.type==="text").map((o)=>o.text).join(`
1573
- `).trim()}return{"chat.message":async(i,o)=>{if(!n.enabled)return;let a=r(o.parts);if(!a)return;for(let[s,c]of Object.entries(n.commands||{}))if(a.startsWith(s))console.log(`[auto-slash-command] Detected ${s}, triggering: ${c}`)}}}import*as me from"fs";import*as k from"path";var fl=[".md",".mdc"];function hl(e){let t=e.match(/^---\s*\n([\s\S]*?)\n---\s*\n/);if(!t)return{};let n=t[1],r={},i=n.split(`
1574
- `);for(let o of i){let a=o.indexOf(":");if(a===-1)continue;let s=o.slice(0,a).trim(),c=o.slice(a+1).trim();if(s==="alwaysApply"&&c==="true")r.alwaysApply=!0;else if(s==="alwaysApply"&&c==="false")r.alwaysApply=!1;else if(s&&!isNaN(Number(c)))r[s]=Number(c);else if(s)r[s]=c}return r}function yl(e){let t=e.match(/^---\s*\n[\s\S]*?\n---\s*\n/);if(!t)return[e];let n=e.slice(t[0].length),r=[],i=n.split(/(?:\n\s*---|\n\s*\n#{3,}\s+)/);for(let o of i){let a=o.trim();if(a.length>0)r.push(a)}return r}function bl(e,t){let n=k.relative(process.cwd(),t),i=e.replace(/\*\*/g,"*").replace(/\?/g,"?").split("/"),o=n.split(k.sep),a=0;for(let s=0;s<i.length;s++){let c=i[s],l=o[s];if(c==="**")a++;else if(c==="*")a++;else if(c===l)a++}return a===i.length}function xl(e){if(!me.existsSync(e))return[];let t=[];function n(r,i=r){let o=me.readdirSync(r,{withFileTypes:!0});for(let a of o){let s=k.join(r,a.name);if(a.isDirectory())n(s,i);else if(a.isFile()){let c=k.extname(a.name).toLowerCase();if(fl.includes(c))try{let l=me.readFileSync(s,"utf-8"),u=hl(l),p=yl(l);t.push({path:s,content:l,frontmatter:u,rules:p})}catch(l){console.error(`[rules-injector] Error loading rule file ${s}:`,l)}}}}return n(e),t}function vl(e,t){let r=k.relative(k.dirname(e),t).split(k.sep),i=0;for(let o of r)if(o.startsWith("."))i++;else if(o.includes(k.sep))i+=o.split(k.sep).length;else i++;return i}function fo(e,t){let n=t?.config??{enabled:!0},r=new Map;function i(s){let c=s;if(r.has(c))return r.get(c)||[];let l=[k.join(process.cwd(),"rules"),k.join(process.cwd(),".opencode","rules"),k.join(k.dirname(s),"rules"),k.join(k.dirname(s),".opencode","rules")],u=[];for(let p of l){let m=xl(p);u.push(...m)}return r.set(c,u),u}function o(s){if(!n.enabled)return[];let c=i(s),l=[];for(let u of c){let{frontmatter:p}=u;if(p.alwaysApply){l.push({ruleFile:u,matchedPattern:"always_apply",priority:0});continue}if(p.globs&&p.globs.length>0){for(let m of p.globs)if(bl(m,s)){let g=100;if(typeof p.distance==="number")g=p.distance;else g=vl(u.path,s);l.push({ruleFile:u,matchedPattern:m,priority:g});break}}}return l.sort((u,p)=>u.priority-p.priority),l}function a(s){return s.filter((c)=>c.type==="text").map((c)=>c.text||"").join(`
1575
- `).trim()}return{"chat.message":async(s,c)=>{if(!n.enabled)return;let l=c.parts||[],u=a(l);if(!u)return;let p=process.cwd(),m=o(p);if(m.length===0)return;let g=m[0],f=n.maxRules||10,D=`${m.slice(0,f).map((I)=>{let N=I.ruleFile.rules.slice(0,5).join(`
1576
- `);return`<rule source="${I.ruleFile.path}">
2027
+ - Pearl: Testing, test creation, test execution`),task:re.string().min(5).describe("Clear, specific description of what the agent should do. Include relevant context, expected output format, and success criteria."),context:re.string().optional().describe("Additional context that may help the agent complete the task"),wait:re.boolean().default(!1).describe("If true, wait for the agent to complete and return the full result. If false (default), return immediately with a task ID for async tracking. Use wait=false for parallel delegation to multiple agents.")},async execute(n){let{agent:r,task:i,context:o,wait:a}=n;try{let s=e.createTask(r,i,o),c=async()=>{let l=await al(t,r,i,o);s.sessionId=l.sessionId,e.completeTask(s.id,l.responseText)};if(e.startTask(s.id),a){try{await c()}catch(u){e.failTask(s.id,u instanceof Error?u.message:"Unknown error")}let l=e.getTask(s.id);return JSON.stringify({success:!0,taskId:l?.id??s.id,agent:l?.agent??r,status:l?.status??"failed",result:l?.result,error:l?.error,duration:l?.completedAt&&l?.startedAt?l.completedAt-l.startedAt:null,sessionId:l?.sessionId},null,2)}return c().catch((l)=>{e.failTask(s.id,l instanceof Error?l.message:"Unknown error")}),JSON.stringify({success:!0,taskId:s.id,agent:s.agent,status:s.status,message:`Task delegated to ${r}. Use background_task_status to check progress.`,sessionId:s.sessionId},null,2)}catch(s){return JSON.stringify({success:!1,error:s instanceof Error?s.message:"Unknown error"},null,2)}}})}function oo(e){return ze({description:"Check the status of a background agent task. Returns completion status, results, and duration information for tasks created with call_agent(wait=false).",args:{taskId:re.string().describe("Task ID from a previous call_agent invocation")},async execute(t){let{taskId:n}=t,r=e.getTask(n);if(!r)return JSON.stringify({success:!1,error:`Task ${n} not found`},null,2);return JSON.stringify({success:!0,taskId:r.id,agent:r.agent,status:r.status,result:r.result,error:r.error,duration:r.completedAt&&r.startedAt?r.completedAt-r.startedAt:null,createdAt:r.createdAt,startedAt:r.startedAt,completedAt:r.completedAt,sessionId:r.sessionId},null,2)}})}function so(e){return ze({description:"List all background tasks for the current session. Returns both active and recently completed tasks for tracking parallel delegation workflows.",args:{status:re.enum(["all","pending","running","completed","failed"]).default("all").describe("Filter by task status. Default 'all' shows all tasks.")},async execute(t){let{status:n}=t,r=e.listTasks(),i=n==="all"?r:r.filter((o)=>o.status===n);return JSON.stringify({success:!0,count:i.length,tasks:i},null,2)}})}function ao(e){return ze({description:"Cancel a running or pending background task. Use this when a task is no longer needed or when you want to free up concurrency slots.",args:{taskId:re.string().describe("Task ID to cancel")},async execute(t){let{taskId:n}=t;if(!e.cancelTask(n))return JSON.stringify({success:!1,error:`Task ${n} not found or cannot be cancelled`},null,2);return JSON.stringify({success:!0,taskId:n,message:`Task ${n} cancelled successfully`},null,2)}})}class co{tasks=new Map;config;queues=new Map;counts=new Map;constructor(e){this.config=e||{}}getConcurrencyLimit(e){let t=this.config.modelConcurrency?.[e];if(t!==void 0)return t===0?1/0:t;let n=e.split("/")[0],r=this.config.providerConcurrency?.[n];if(r!==void 0)return r===0?1/0:r;let i=this.config.defaultConcurrency;if(i!==void 0)return i===0?1/0:i;return 5}async acquire(e){let t=this.getConcurrencyLimit(e);if(t===1/0)return;let n=this.counts.get(e)??0;if(n<t){this.counts.set(e,n+1);return}return new Promise((r)=>{let i=this.queues.get(e)??[];i.push(r),this.queues.set(e,i)})}release(e){if(this.getConcurrencyLimit(e)===1/0)return;let n=this.queues.get(e);if(n&&n.length>0){let r=n.shift();if(this.counts.set(e,(this.counts.get(e)??0)-1),r)r()}else{let r=this.counts.get(e)??0;if(r>0)this.counts.set(e,r-1)}}createTask(e,t,n){let r={id:crypto.randomUUID(),agent:e,status:"pending",createdAt:Date.now()};return this.tasks.set(r.id,r),r}waitForTask(e,t=30000){return new Promise((n,r)=>{let i=setInterval(()=>{let o=this.tasks.get(e);if(!o){clearInterval(i),r(Error(`Task ${e} not found`));return}if(o.status==="completed"||o.status==="failed")clearInterval(i),n(o)},100);setTimeout(()=>{clearInterval(i),r(Error(`Task ${e} timed out after ${t}ms`))},t)})}cancelTask(e){let t=this.tasks.get(e);if(!t||t.status!=="pending"&&t.status!=="running")return!1;return t.status="failed",t.completedAt=Date.now(),t.error="Task cancelled by user",!0}startTask(e){let t=this.tasks.get(e);if(!t||t.status!=="pending")return!1;return t.status="running",t.startedAt=Date.now(),!0}completeTask(e,t){let n=this.tasks.get(e);if(!n||n.status!=="running")return!1;return n.status="completed",n.completedAt=Date.now(),n.result=t,!0}failTask(e,t){let n=this.tasks.get(e);if(!n||n.status!=="running")return!1;return n.status="failed",n.completedAt=Date.now(),n.error=t,!0}getTask(e){return this.tasks.get(e)}listTasks(){return Array.from(this.tasks.values())}listActiveTasks(){return Array.from(this.tasks.values()).filter((e)=>e.status==="pending"||e.status==="running")}}function lo(e){let t=new co;return{manager:t,tools:{call_agent:io(t,{client:e.client,directory:e.directory}),background_task_status:oo(t),background_task_list:so(t),background_task_cancel:ao(t)}}}var Ye={"claude-3-5-sonnet":200000,"claude-3-5-haiku":200000,"claude-3-opus":200000,"claude-3-sonnet":200000,"claude-3-haiku":200000,"gpt-4o":128000,"gpt-4o-mini":128000,"gpt-4-turbo":128000,"gpt-4":8192,"gpt-3.5-turbo":16385,"gemini-2.5-pro":1e6,"gemini-2.5-flash":1e6,"gemini-2.0-flash":1e6,"gemini-1.5-pro":2800000,"gemini-1.5-flash":1e6,default:1e5},uo=new Map;function cl(e){let t=uo.get(e);if(!t)t={messageCount:0,lastWarningAt:0,totalEstimatedTokens:0},uo.set(e,t);return t}function Zt(e){let t=e.toLowerCase();if(Ye[t])return Ye[t];for(let[n,r]of Object.entries(Ye))if(t.includes(n.toLowerCase()))return r;return Ye.default}function ll(e){return Math.ceil(e.length/4)}function dl(e,t,n=0.7){if(e<=0)return!1;let r=Zt(t);return e/r>=n}function ul(e,t,n,r){let i=cl(e);if(i.messageCount++,i.totalEstimatedTokens+=n,i.messageCount%10===0||dl(i.totalEstimatedTokens,t,r)){let a=Date.now();if(a-i.lastWarningAt>=60000){let s=Zt(t),c=pl(i.totalEstimatedTokens,t);if(c>=(r??0.7)*100)console.warn(`⚠️ Context Window Warning: You are at ${c}% of ${s} token limit (~${i.totalEstimatedTokens}/${s} tokens). Consider clearing context.`);else console.log(`ℹ️ Context Window: At ${c}% of ${s} token limit (~${i.totalEstimatedTokens}/${s} tokens, ${i.messageCount} messages).`);i.lastWarningAt=a}}}function pl(e,t){let n=Zt(t);if(n<=0)return 0;return Math.round(e/n*100)}function po(e){return{"chat.message":async(t,n)=>{let{sessionID:r,model:i}=t,o=i?.modelID||"default",s=(n?.parts||[]).filter((c)=>c.type==="text").map((c)=>c.text).join(`
2028
+ `);if(s){let c=ll(s);ul(r,o,c)}return}}}function go(e,t){let n=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",r=k("keyword-detector"),i=t?.config??{enabled:!0,keywords:{blitz:"blitzkrieg",blz:"blitzkrieg","[BUILD]":"build","[PLAN]":"plan","[RESEARCH]":"research","[DOCS]":"docs","[REVIEW]":"review",think:"think",ultrathink:"think",ulw:"ultrawork",ultrawork:"ultrawork",search:"search",analyze:"analyze",investigate:"analyze","[INVESTIGATE]":"research",piensa:"think","déjame pensar":"think","necesito pensar":"think",piénsalo:"think","piensa cuidadosamente":"think",réfléchis:"think","laissez-moi réfléchir":"think","je dois réfléchir":"think","réfléchissez-y":"think","réfléchir attentivement":"think","denk nach":"think","lass mich nachdenken":"think","denk darüber nach":"think","denke sorgfältig":"think",pense:"think","fammi pensare":"think","devo pensare":"think","pensa a questo":"think","pensa attentamente":"think",подумай:"think","дай мне подумать":"think","мне нужно подумать":"think","подумай об этом":"think","подумай внимательно":"think",考えて:"think",考えさせて:"think",考える必要がある:"think",これについて考えて:"think",注意深く考えて:"think",思考:"think",让我想想:"think",我需要思考:"think",思考这个:"think",仔细思考:"think",思考這個:"think",생각해:"think","생각하게 해줘":"think","이것에 대해 생각해":"think","신중하게 생각해":"think",فكر:"think","أريد أن أفكر":"think","دعني أفكر":"think","فكر بعناية":"think","تفكر باهتمام":"think",חשב:"think","תן להרהר":"think","אני צריך לחשוב":"think","חשב בריצות":"think",pikirkan:"think","saya perlu berpikir":"think","biarkan saya berpikir":"think","pikirkan dengan baik":"think","подумай про це":"think","подумай уважно":"think",σκεψου:"think","ας σκεφτεί":"think","χρειάζεται να σκεφτώ":"think","σκεφτεί σοβαρά":"think",myslet:"think","musím myslet":"think","nechte mě myslet":"think","myslet pozorně":"think",gândește:"think","trebuie să gândesc":"think","gândește-te":"think","gândește cu atenție":"think",tænk:"think","jeg skal tænke":"think","lad mig tænke":"think","tænk nøje":"think",tänk:"think","jag behöver tänka":"think","låt mig tänka":"think","tänk noga":"think",denk:"think","ik moet denken":"think","laat me denken":"think","denk goed na":"think",คิด:"think",ฉันต้องคิด:"think",ให้ฉันคิด:"think",คิดให้ดี:"think"}};function o(c){return c.filter((l)=>l.type==="text").map((l)=>l.text).join(`
2029
+ `).trim()}function a(c){let l=["فكر","أريد أن أفكر","دعني أفكر","فكر بعناية","تفكر باهتمام"],u=["חשב","תן להרהר","אני צריך לחשוב","חשב בריצות"],p=["pikirkan","saya perlu berpikir","biarkan saya berpikir","pikirkan dengan baik"],g=["подумай","дай мені подумати","мені потрібно подумати","подумай про це","подумай уважно"],m=["σκεψου","ας σκεφτεί","χρειάζεται να σκεφτώ","σκεφτεί σοβαρά"],f=["myslet","musím myslet","nechte mě myslet","myslet pozorně"],b=["gândește","trebuie să gândesc","gândește-te","gândește cu atenție"],y=["tænk","jeg skal tænke","lad mig tænke","tænk nøje"],C=["tänk","jag behöver tänka","låt mig tänka","tänk noga"],D=["tænk","jeg skal tænke","lad mig tænke","tænk nøje"],$=["denk","ik moet denken","laat me denken","denk goed na"],N=["คิด","ฉันต้องคิด","ให้ฉันคิด","คิดให้ดี"],Me=["réfléchis","laissez-moi réfléchir","je dois réfléchir","réfléchissez-y","réfléchir attentivement"],he=["piensa","déjame pensar","necesito pensar","piénsalo","piensa cuidadosamente"],ye=["denk nach","lass mich nachdenken","denk darüber nach","denke sorgfältig"],In=["pensa","fammi pensare","devo pensare","pensa a questo","pensa attentamente"],$n=["подумай","дай мне подумать","мне нужно подумать","подумай об этом","подумай внимательно"],Fn=["考えて","考えさせて","考える必要がある","これについて考えて","注意深く考えて"],Ln=["思考","让我想想","我需要思考","思考这个","仔细思考","思考這個"],_n=["생각해","생각하게 해줘","이것에 대해 생각해","신중하게 생각해"],jn=["think","reason","think deeply","ultrathink","ultra think",...Me,...he,...ye,...In,...$n,...Fn,...Ln,..._n,...l,...u,...p,...g,...m,...f,...b,...y,...C,...D,...$,...N],v=["ultrawork","ulw","ultra work","ultra work mode","초신속","슈퍼모드","스피드","super rapid","ultra rapid","أسرع","על הכי מהיר","kerja super cepat","ультра-быстро","υπερταχύτητα","super rychle","super viteză"],Ts=["search","find","locate","search for","find in","locate in","검색","찾아","查找","検索","rechercher","buscar","suchen","cercare","найти","חפש","بحث","cari","пошук","αναζήτηση","hledat","căuta","søg","sök","zoek","ค้นหา"],Ms=["analyze","investigate","examine","deep dive","deep analysis","분석","조사","分析","分析","analyser","analizar","analysieren","analizzare","анализировать","נתח","تحليل","analisis","analiza","аналізувати","ανάλυση","analyzovat","analiza","analyseer","onderzoek","วิเคราะห์"];if(v.includes(c.toLowerCase()))return{mode:"ultrawork",language:s(c)};if(Ts.includes(c.toLowerCase()))return{mode:"search",language:s(c)};if(Ms.includes(c.toLowerCase()))return{mode:"analyze",language:s(c)};if(jn.includes(c.toLowerCase()))return{mode:"think",language:s(c)};return{mode:"enhanced",language:s(c)}}function s(c){let l=c.toLowerCase(),u=/[ا-ي-ع]/,p=/[\u0590-\u05FF]/,g=/[\u0400-\u04FF]/,m=/[\u4E00-\u9FFF]/,f=/[\u3040-\u30FF]/,b=/[\uAC00-\uD7AF]/,y=/[\u0370-\u03FF]/,C=/[\u0E00-\u0E7F]/;if(u.test(c))return"Arabic";if(p.test(c))return"Hebrew";if(g.test(c)){if(l.includes("подум"))return"Ukrainian";if(l.includes("дум"))return"Russian"}if(m.test(c))return"Chinese";if(f.test(c))return"Japanese";if(b.test(c))return"Korean";if(y.test(c))return"Greek";if(C.test(c))return"Thai";if(["réfléchis","pensa","déjame","pensar"].some((v)=>l.includes(v.toLowerCase())))return"French";if(["piensa","necesito","pensar"].some((v)=>l.includes(v.toLowerCase())))return"Spanish";if(["denk","nachdenken"].some((v)=>l.includes(v.toLowerCase())))return"German";if(["pensa","pensare"].some((v)=>l.includes(v.toLowerCase())))return"Italian";if(["think","reason","analyze","investigate","search","find"].some((v)=>l.includes(v)))return"English";if(["myslet","myslet"].some((v)=>l.includes(v.toLowerCase())))return"Czech";if(["gând","gândește"].some((v)=>l.includes(v.toLowerCase())))return"Romanian";if(["tænk","tænke"].some((v)=>l.includes(v.toLowerCase())))return"Danish";if(["tänk"].some((v)=>l.includes(v.toLowerCase())))return"Swedish";if(["tænk"].some((v)=>l.includes(v.toLowerCase())))return"Norwegian";if(["denk"].some((v)=>l.includes(v.toLowerCase())))return"Dutch";if(["pikir"].some((v)=>l.includes(v.toLowerCase())))return"Indonesian";return}return{"chat.message":async(c,l)=>{if(!i.enabled)return;let u=o(l.parts);if(!u)return;let p=u.split(/\s+/);for(let g of p)if(i.keywords?.[g]){let f=a(g);if(n)r.debug(`Detected "${g}" (${f.language}), activating: ${f.mode} mode`);let b=c.config;if(f.mode==="ultrawork"){if(b?.enhanced?.enabled===!1)b.enhanced={...b.enhanced,enabled:!0}}else if(f.mode==="search"){if(n)r.debug(`Activating search mode for ${f.language}`)}else if(f.mode==="analyze"){if(n)r.debug(`Activating analyze mode for ${f.language}`)}else if(f.mode==="think"){if(n)r.debug(`Activating think mode for ${f.language}`)}else if(f.mode==="enhanced"){if(n)r.debug("Activating enhanced mode")}}}}}function mo(e,t){let n=t?.config??{enabled:!0,commands:{"/build":"build","/plan":"plan","/research":"research","/docs":"docs","/review":"review","/test":"test","/fix":"fix","/explain":"explain"}};function r(i){return i.filter((o)=>o.type==="text").map((o)=>o.text).join(`
2030
+ `).trim()}return{"chat.message":async(i,o)=>{if(!n.enabled)return;let a=r(o.parts);if(!a)return;for(let[s,c]of Object.entries(n.commands||{}))if(a.startsWith(s))console.log(`[auto-slash-command] Detected ${s}, triggering: ${c}`)}}}import*as ge from"fs";import*as S from"path";var gl=[".md",".mdc"];function ml(e){let t=e.match(/^---\s*\n([\s\S]*?)\n---\s*\n/);if(!t)return{};let n=t[1],r={},i=n.split(`
2031
+ `);for(let o of i){let a=o.indexOf(":");if(a===-1)continue;let s=o.slice(0,a).trim(),c=o.slice(a+1).trim();if(s==="alwaysApply"&&c==="true")r.alwaysApply=!0;else if(s==="alwaysApply"&&c==="false")r.alwaysApply=!1;else if(s&&!isNaN(Number(c)))r[s]=Number(c);else if(s)r[s]=c}return r}function fl(e){let t=e.match(/^---\s*\n[\s\S]*?\n---\s*\n/);if(!t)return[e];let n=e.slice(t[0].length),r=[],i=n.split(/(?:\n\s*---|\n\s*\n#{3,}\s+)/);for(let o of i){let a=o.trim();if(a.length>0)r.push(a)}return r}function hl(e,t){let n=S.relative(process.cwd(),t),i=e.replace(/\*\*/g,"*").replace(/\?/g,"?").split("/"),o=n.split(S.sep),a=0;for(let s=0;s<i.length;s++){let c=i[s],l=o[s];if(c==="**")a++;else if(c==="*")a++;else if(c===l)a++}return a===i.length}function yl(e){if(!ge.existsSync(e))return[];let t=[];function n(r,i=r){let o=ge.readdirSync(r,{withFileTypes:!0});for(let a of o){let s=S.join(r,a.name);if(a.isDirectory())n(s,i);else if(a.isFile()){let c=S.extname(a.name).toLowerCase();if(gl.includes(c))try{let l=ge.readFileSync(s,"utf-8"),u=ml(l),p=fl(l);t.push({path:s,content:l,frontmatter:u,rules:p})}catch(l){console.error(`[rules-injector] Error loading rule file ${s}:`,l)}}}}return n(e),t}function bl(e,t){let r=S.relative(S.dirname(e),t).split(S.sep),i=0;for(let o of r)if(o.startsWith("."))i++;else if(o.includes(S.sep))i+=o.split(S.sep).length;else i++;return i}function fo(e,t){let n=t?.config??{enabled:!0},r=new Map;function i(s){let c=s;if(r.has(c))return r.get(c)||[];let l=[S.join(process.cwd(),"rules"),S.join(process.cwd(),".opencode","rules"),S.join(S.dirname(s),"rules"),S.join(S.dirname(s),".opencode","rules")],u=[];for(let p of l){let g=yl(p);u.push(...g)}return r.set(c,u),u}function o(s){if(!n.enabled)return[];let c=i(s),l=[];for(let u of c){let{frontmatter:p}=u;if(p.alwaysApply){l.push({ruleFile:u,matchedPattern:"always_apply",priority:0});continue}if(p.globs&&p.globs.length>0){for(let g of p.globs)if(hl(g,s)){let m=100;if(typeof p.distance==="number")m=p.distance;else m=bl(u.path,s);l.push({ruleFile:u,matchedPattern:g,priority:m});break}}}return l.sort((u,p)=>u.priority-p.priority),l}function a(s){return s.filter((c)=>c.type==="text").map((c)=>c.text||"").join(`
2032
+ `).trim()}return{"chat.message":async(s,c)=>{if(!n.enabled)return;let l=c.parts||[],u=a(l);if(!u)return;let p=process.cwd(),g=o(p);if(g.length===0)return;let m=g[0],f=n.maxRules||10,D=`${g.slice(0,f).map(($)=>{let N=$.ruleFile.rules.slice(0,5).join(`
2033
+ `);return`<rule source="${$.ruleFile.path}">
1577
2034
  ${N}
1578
2035
  </rule>`}).join(`
1579
2036
 
1580
2037
  `)}
1581
2038
 
1582
- ${u}`;c.parts=[{type:"text",text:D,id:`rule-${Date.now()}`,sessionID:"",messageID:""}]}}}function ho(e,t){let n=t?.config??{enabled:!0,threshold:10},r=0;return{"tool.execute.after":async(i,o)=>{if(!n.enabled)return;if(i.tool==="task"){r++;let a=n.threshold??10;if(r%a===0)console.log(`[agent-usage-reminder] Agent has been called ${r} times in this session`)}}}}function yo(e,t){let n=t?.config??{enabled:!0,threshold:1e5};return{"chat.params":async(r,i)=>{if(!n.enabled)return;console.log("[anthropic-context-window-limit-recovery] Monitoring context window usage")}}}function wl(e){return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
1583
- `).trim()}function bo(e,t){let n=t?.config??{enabled:!0};return{"chat.message":async(r,i)=>{if(!n.enabled)return;if(!wl(i.parts))return;console.log("[compaction-context-injector] Processing message before compaction")},"experimental.session.compacting":async(r,i)=>{if(!n.enabled)return;console.log("[compaction-context-injector] Adding context for session compaction")}}}import{readFileSync as Sl,existsSync as kl}from"node:fs";function xo(e,t){let n=t?.config??{enabled:!0};return{"chat.message":async(r,i)=>{if(!n.enabled)return;let o=n.agentFile??".opencode-agents";if(kl(o))try{let a=Sl(o,"utf-8");console.log("[directory-agents-injector] Found local agent definitions")}catch{console.log("[directory-agents-injector] Could not read agent file")}}}}import{readFileSync as Al,existsSync as Cl}from"node:fs";function vo(e,t){let n=t?.config??{enabled:!0};return{"chat.message":async(r,i)=>{if(!n.enabled)return;let o=["README.md","readme.md","Readme.md"];for(let a of o)if(Cl(a)){try{let s=Al(a,"utf-8");console.log("[directory-readme-injector] Found README, injecting context")}catch{console.log("[directory-readme-injector] Could not read README")}break}}}}var wo=new Map,ge=new Map;function Pl(e){let t=wo.get(e);if(!t)t={filePath:e,failures:[],lastGoodContent:null,conflictCount:0},wo.set(e,t);return t}function El(e,t,n){let r=t*Math.pow(2,e);return Math.min(r,n)}function Rl(e){let t=String(e).toLowerCase();if(t.includes("no such file")||t.includes("file not found"))return"file_not_found";if(t.includes("permission denied")||t.includes("eacces"))return"permission_denied";if(t.includes("not found")||t.includes("string not found"))return"merge_conflict";if(t.includes("concurrent")||t.includes("modified"))return"concurrent_edit";return"unknown"}function Tl(e,t,n){switch(e){case"file_not_found":if(n.autoCreateDirs)return{canRecover:!0,action:"create_directories",suggestion:"Create parent directories and retry edit"};return{canRecover:!1,action:"none",suggestion:"Create the file or parent directories manually"};case"permission_denied":return{canRecover:!1,action:"check_permissions",suggestion:"Check file permissions and user access"};case"merge_conflict":return{canRecover:!0,action:"refresh_and_retry",suggestion:"Read file again and retry with current content"};case"concurrent_edit":return{canRecover:!0,action:"retry_with_backoff",suggestion:"Wait and retry edit with fresh content"};default:return{canRecover:!1,action:"none",suggestion:"Investigate the error and try again"}}}async function Ml(e,t,n){let r=Tl(e,t,n);if(!r.canRecover)return console.log(`[edit-error-recovery] Cannot recover from error type: ${e}`),console.log(`[edit-error-recovery] Suggestion: ${r.suggestion}`),!1;if(console.log(`[edit-error-recovery] Attempting recovery action: ${r.action}`),console.log(`[edit-error-recovery] Suggestion: ${r.suggestion}`),e==="file_not_found"&&n.autoCreateDirs)try{let{mkdir:i}=await import("node:fs/promises"),o=t.split("/").slice(0,-1).join("/");if(o)await i(o,{recursive:!0}),console.log(`[edit-error-recovery] Created directory: ${o}`);return!0}catch(i){return console.error(`[edit-error-recovery] Failed to create directory: ${i}`),!1}return!0}function So(e,t){let n=t?.config??{enabled:!0,maxRetries:5,baseDelay:500,maxDelay:1e4,autoCreateDirs:!0,trackConflicts:!0};return{"tool.execute.after":async(r,i)=>{if(!n.enabled)return;if(r.tool!=="edit"&&r.tool!=="write")return;let{sessionID:o,filePath:a}=r,s=n.maxRetries??5,c=n.baseDelay??500,l=n.maxDelay??1e4,u=i;if(u.error||u.status==="error"){let p=u.error||u.output||"Unknown error",m=Rl(p),g=`${o}-${a||"unknown"}`,f=ge.get(g)??0;if(f<s){if(a){let y=Pl(a);if(y.failures.push({timestamp:Date.now(),filePath:a,errorType:m,errorMessage:String(p),retryAttempt:f+1}),m==="merge_conflict"&&n.trackConflicts)y.conflictCount++}if(console.log(`[edit-error-recovery] Edit error detected (attempt ${f+1}/${s})`),a)console.log(`[edit-error-recovery] File: ${a}`);if(console.log(`[edit-error-recovery] Error type: ${m}`),console.log(`[edit-error-recovery] Error: ${p}`),await Ml(m,a||"",n)){let y=El(f,c,l);ge.set(g,f+1),console.log(`[edit-error-recovery] Retry scheduled in ${y}ms`),console.log("[edit-error-recovery] [session recovered - continuing previous task]"),setTimeout(()=>{ge.delete(g)},y)}else console.error(`[edit-error-recovery] Recovery failed for ${a||"unknown"}`),ge.delete(g)}else console.error(`[edit-error-recovery] Max retries (${s}) exceeded for ${a||"unknown"}`),ge.delete(g)}else if(a)ge.delete(`${o}-${a}`)}}}var en=new Map;function Dl(e){let t=en.get(e);if(!t)t={sessionID:e,emptyCount:0,lastEmptyTime:null,history:[]},en.set(e,t);return t}function Nl(e){return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
1584
- `).trim()}function Ol(e){return e.some((t)=>t.type!=="text")}function $l(e){return e.some((t)=>t.type==="tool")}function Il(e){let t=Nl(e),n=$l(e),r=Ol(e);if(t.length===0&&!n&&!r)return{isEmpty:!0,reason:"No text content, no tool calls, and no other parts",hasContent:!1,hasTools:!1};if(t.length===0&&!n)return{isEmpty:!0,reason:"No text content and no tool calls",hasContent:!1,hasTools:!1};if(t.trim()==="")return{isEmpty:!0,reason:"Text content is whitespace-only",hasContent:!1,hasTools:n};return{isEmpty:!1,reason:"",hasContent:!0,hasTools:n}}function Fl(e){if(e.previousToolUse)return"Did you mean to respond with tool output or provide next instructions?";if(e.isStartOfSession)return"Please provide your request or task description.";return"Did you mean to include a tool call, response, or clarification?"}function Ll(e){let t=en.get(e);if(!t)return{isStartOfSession:!0,previousToolUse:!1,messageCount:0};return{isStartOfSession:!1,previousToolUse:t.history[t.history.length-1]?.reason.includes("tool")||!1,messageCount:t.history.length}}function ko(e,t){let n=t?.config??{enabled:!0,requireJustification:!1,trackPatterns:!0,autoRecover:!0};return{"chat.message":async(r,i)=>{if(!n.enabled)return;let{sessionID:o}=r,a=Il(i.parts);if(a.isEmpty){let s=Dl(o);if(s.emptyCount++,s.lastEmptyTime=Date.now(),s.history.push({timestamp:Date.now(),reason:a.reason}),console.log(`[empty-message-sanitizer] Detected empty message in session ${o}`),console.log(`[empty-message-sanitizer] Reason: ${a.reason}`),n.trackPatterns&&s.emptyCount>1)console.log(`[empty-message-sanitizer] Empty message count: ${s.emptyCount} in session ${o}`);if(n.autoRecover){let c=Ll(o),l=Fl(c),u=`
2039
+ ${u}`;c.parts=[{type:"text",text:D,id:`rule-${Date.now()}`,sessionID:"",messageID:""}]}}}function ho(e,t){let n=t?.config??{enabled:!0,threshold:10},r=0;return{"tool.execute.after":async(i,o)=>{if(!n.enabled)return;if(i.tool==="task"){r++;let a=n.threshold??10;if(r%a===0)console.log(`[agent-usage-reminder] Agent has been called ${r} times in this session`)}}}}function yo(e,t){let n=t?.config??{enabled:!0,threshold:1e5};return{"chat.params":async(r,i)=>{if(!n.enabled)return;console.log("[anthropic-context-window-limit-recovery] Monitoring context window usage")}}}function xl(e){return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
2040
+ `).trim()}function bo(e,t){let n=t?.config??{enabled:!0};return{"chat.message":async(r,i)=>{if(!n.enabled)return;if(!xl(i.parts))return;console.log("[compaction-context-injector] Processing message before compaction")},"experimental.session.compacting":async(r,i)=>{if(!n.enabled)return;console.log("[compaction-context-injector] Adding context for session compaction")}}}import{readFileSync as wl,existsSync as vl}from"node:fs";function xo(e,t){let n=t?.config??{enabled:!0};return{"chat.message":async(r,i)=>{if(!n.enabled)return;let o=n.agentFile??".opencode-agents";if(vl(o))try{let a=wl(o,"utf-8");console.log("[directory-agents-injector] Found local agent definitions")}catch{console.log("[directory-agents-injector] Could not read agent file")}}}}import{readFileSync as kl,existsSync as Sl}from"node:fs";function wo(e,t){let n=t?.config??{enabled:!0};return{"chat.message":async(r,i)=>{if(!n.enabled)return;let o=["README.md","readme.md","Readme.md"];for(let a of o)if(Sl(a)){try{let s=kl(a,"utf-8");console.log("[directory-readme-injector] Found README, injecting context")}catch{console.log("[directory-readme-injector] Could not read README")}break}}}}var vo=new Map,me=new Map;function Al(e){let t=vo.get(e);if(!t)t={filePath:e,failures:[],lastGoodContent:null,conflictCount:0},vo.set(e,t);return t}function Cl(e,t,n){let r=t*Math.pow(2,e);return Math.min(r,n)}function Pl(e){let t=String(e).toLowerCase();if(t.includes("no such file")||t.includes("file not found"))return"file_not_found";if(t.includes("permission denied")||t.includes("eacces"))return"permission_denied";if(t.includes("not found")||t.includes("string not found"))return"merge_conflict";if(t.includes("concurrent")||t.includes("modified"))return"concurrent_edit";return"unknown"}function El(e,t,n){switch(e){case"file_not_found":if(n.autoCreateDirs)return{canRecover:!0,action:"create_directories",suggestion:"Create parent directories and retry edit"};return{canRecover:!1,action:"none",suggestion:"Create the file or parent directories manually"};case"permission_denied":return{canRecover:!1,action:"check_permissions",suggestion:"Check file permissions and user access"};case"merge_conflict":return{canRecover:!0,action:"refresh_and_retry",suggestion:"Read file again and retry with current content"};case"concurrent_edit":return{canRecover:!0,action:"retry_with_backoff",suggestion:"Wait and retry edit with fresh content"};default:return{canRecover:!1,action:"none",suggestion:"Investigate the error and try again"}}}async function Rl(e,t,n){let r=El(e,t,n);if(!r.canRecover)return console.log(`[edit-error-recovery] Cannot recover from error type: ${e}`),console.log(`[edit-error-recovery] Suggestion: ${r.suggestion}`),!1;if(console.log(`[edit-error-recovery] Attempting recovery action: ${r.action}`),console.log(`[edit-error-recovery] Suggestion: ${r.suggestion}`),e==="file_not_found"&&n.autoCreateDirs)try{let{mkdir:i}=await import("node:fs/promises"),o=t.split("/").slice(0,-1).join("/");if(o)await i(o,{recursive:!0}),console.log(`[edit-error-recovery] Created directory: ${o}`);return!0}catch(i){return console.error(`[edit-error-recovery] Failed to create directory: ${i}`),!1}return!0}function ko(e,t){let n=t?.config??{enabled:!0,maxRetries:5,baseDelay:500,maxDelay:1e4,autoCreateDirs:!0,trackConflicts:!0};return{"tool.execute.after":async(r,i)=>{if(!n.enabled)return;if(r.tool!=="edit"&&r.tool!=="write")return;let{sessionID:o,filePath:a}=r,s=n.maxRetries??5,c=n.baseDelay??500,l=n.maxDelay??1e4,u=i;if(u.error||u.status==="error"){let p=u.error||u.output||"Unknown error",g=Pl(p),m=`${o}-${a||"unknown"}`,f=me.get(m)??0;if(f<s){if(a){let y=Al(a);if(y.failures.push({timestamp:Date.now(),filePath:a,errorType:g,errorMessage:String(p),retryAttempt:f+1}),g==="merge_conflict"&&n.trackConflicts)y.conflictCount++}if(console.log(`[edit-error-recovery] Edit error detected (attempt ${f+1}/${s})`),a)console.log(`[edit-error-recovery] File: ${a}`);if(console.log(`[edit-error-recovery] Error type: ${g}`),console.log(`[edit-error-recovery] Error: ${p}`),await Rl(g,a||"",n)){let y=Cl(f,c,l);me.set(m,f+1),console.log(`[edit-error-recovery] Retry scheduled in ${y}ms`),console.log("[edit-error-recovery] [session recovered - continuing previous task]"),setTimeout(()=>{me.delete(m)},y)}else console.error(`[edit-error-recovery] Recovery failed for ${a||"unknown"}`),me.delete(m)}else console.error(`[edit-error-recovery] Max retries (${s}) exceeded for ${a||"unknown"}`),me.delete(m)}else if(a)me.delete(`${o}-${a}`)}}}var en=new Map;function Tl(e){let t=en.get(e);if(!t)t={sessionID:e,emptyCount:0,lastEmptyTime:null,history:[]},en.set(e,t);return t}function Ml(e){return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
2041
+ `).trim()}function Dl(e){return e.some((t)=>t.type!=="text")}function Nl(e){return e.some((t)=>t.type==="tool")}function Ol(e){let t=Ml(e),n=Nl(e),r=Dl(e);if(t.length===0&&!n&&!r)return{isEmpty:!0,reason:"No text content, no tool calls, and no other parts",hasContent:!1,hasTools:!1};if(t.length===0&&!n)return{isEmpty:!0,reason:"No text content and no tool calls",hasContent:!1,hasTools:!1};if(t.trim()==="")return{isEmpty:!0,reason:"Text content is whitespace-only",hasContent:!1,hasTools:n};return{isEmpty:!1,reason:"",hasContent:!0,hasTools:n}}function Il(e){if(e.previousToolUse)return"Did you mean to respond with tool output or provide next instructions?";if(e.isStartOfSession)return"Please provide your request or task description.";return"Did you mean to include a tool call, response, or clarification?"}function $l(e){let t=en.get(e);if(!t)return{isStartOfSession:!0,previousToolUse:!1,messageCount:0};return{isStartOfSession:!1,previousToolUse:t.history[t.history.length-1]?.reason.includes("tool")||!1,messageCount:t.history.length}}function So(e,t){let n=t?.config??{enabled:!0,requireJustification:!1,trackPatterns:!0,autoRecover:!0};return{"chat.message":async(r,i)=>{if(!n.enabled)return;let{sessionID:o}=r,a=Ol(i.parts);if(a.isEmpty){let s=Tl(o);if(s.emptyCount++,s.lastEmptyTime=Date.now(),s.history.push({timestamp:Date.now(),reason:a.reason}),console.log(`[empty-message-sanitizer] Detected empty message in session ${o}`),console.log(`[empty-message-sanitizer] Reason: ${a.reason}`),n.trackPatterns&&s.emptyCount>1)console.log(`[empty-message-sanitizer] Empty message count: ${s.emptyCount} in session ${o}`);if(n.autoRecover){let c=$l(o),l=Il(c),u=`
1585
2042
  ${"=".repeat(60)}
1586
2043
  EMPTY MESSAGE SANITIZER
1587
2044
  ${"=".repeat(60)}
@@ -1590,20 +2047,20 @@ Reason: ${a.reason}
1590
2047
 
1591
2048
  Suggestion: ${l}
1592
2049
  ${"=".repeat(60)}
1593
- `;console.log(u),console.log("[empty-message-sanitizer] [session recovered - continuing previous task]")}if(n.requireJustification&&n.autoRecover)console.log("[empty-message-sanitizer] Please provide a justification for sending an empty message, or include actual content.")}}}}var Ao=new Map;function Xe(e){let t=Ao.get(e);if(!t)t={sessions:new Map,sessionTimeout:3600000},Ao.set(e,t);return t}function ie(e){return Xe(e).sessions.get(e)}function jl(e,t){let n={sessionID:e,workingDirectory:t||process.cwd(),environment:{},commandHistory:[],childProcesses:new Set,lastActiveTime:Date.now()};return Xe(e).sessions.set(e,n),n}function _l(e){let t=ie(e);if(t)t.lastActiveTime=Date.now()}function Hl(e,t){let n=ie(e);if(n){if(n.commandHistory.push(t),n.commandHistory.length>100)n.commandHistory=n.commandHistory.slice(-100)}}function Co(e){e.childProcesses.forEach((t)=>{try{process.kill(t)}catch(n){}}),e.childProcesses.clear()}function Po(e,t){let n=t?.config??{enabled:!0,trackHistory:!0,historySize:50,preserveEnv:!0,autoCleanup:!0,sessionTimeout:3600000};return{"tool.execute.before":async(r,i)=>{if(!n.enabled)return;if(r.tool!=="bash")return;let{sessionID:o}=r;if(!o)return;if(!ie(o))console.log(`[interactive-bash-session] Creating new bash session for ${o}`),jl(o);else _l(o)},"tool.execute.after":async(r,i)=>{if(!n.enabled)return;if(r.tool!=="bash")return;let o=r.sessionID||"",a=r.args,s=Array.isArray(a)?a.join(" "):String(a);Hl(o,s);let c=i;if(c.pid!==void 0){let l=ie(o);if(l)l.childProcesses.add(c.pid)}if(n.trackHistory){let l=ie(o);if(l)console.log(`[interactive-bash-session] Command history size: ${l.commandHistory.length}`)}},event:async(r)=>{if(!n.enabled)return;let i=r.sessionID;if(!i)return;let o=r;if(o?.type==="session.end"&&n.autoCleanup){let a=ie(i);if(a)console.log(`[interactive-bash-session] Cleaning up bash session for ${i}`),Co(a),Xe(i).sessions.delete(i),console.log(`[interactive-bash-session] Session cleanup completed. Commands executed: ${a.commandHistory.length}, Working dir: ${a.workingDirectory}`)}if(o?.type==="session.timeout"){let a=ie(i);if(a&&n.autoCleanup)console.log(`[interactive-bash-session] Session timeout for ${i}`),Co(a),Xe(i).sessions.delete(i)}}}}function Eo(e,t){let n=t?.config??{enabled:!0};return{event:async(r)=>{if(!n.enabled)return;if(process.env.CI!==void 0)console.log("[non-interactive-env] Detected CI environment, enabling non-interactive mode")}}}function Ro(e,t){let n=t?.config??{enabled:!0,threshold:1e4};return{"chat.message":async(r,i)=>{if(!n.enabled)return;let o=n.threshold??1e4;console.log(`[preemptive-compaction] Monitoring message length for preemptive compaction (threshold: ${o})`)},"experimental.session.compacting":async(r,i)=>{if(!n.enabled)return;console.log("[preemptive-compaction] Triggering preemptive session compaction")}}}nn();var Oo=new Map;function Io(e,t){let n=t?.config??{enabled:!0,autoRecover:!1};if(!n.enabled)return{"chat.message":async()=>{}};return{"chat.message":async(r)=>{let{sessionID:i}=r;if(!i)return;let o=$o(i);o.errorType=null},event:async(r)=>{let{sessionID:i,type:o,error:a}=r;if(o!=="session.error")return;if(!i)return;let{detectErrorType:s}=await Promise.resolve().then(() => (nn(),Mo)),c=s(a),l=$o(i);if(l.errorType=c,l.lastErrorTime=Date.now(),l.errorCount++,console.log(`[session-recovery] Detected error type: ${c}`),console.log(`[session-recovery] Error count for session ${i}: ${l.errorCount}`),n.autoRecover&&tn(c)){let{attemptRecovery:u}=await Promise.resolve().then(() => (No(),Do)),p={sessionID:i,error:a,timestamp:Date.now()};try{await u(c,p,{maxRetries:3}),console.log(`[session-recovery] Auto-recovery attempted for ${c}`)}catch(m){console.error("[session-recovery] Auto-recovery failed:",m)}}}}}function $o(e){let t=Oo.get(e);if(!t)t={sessionID:e,errorType:null,errorCount:0,lastErrorTime:null,recoveryAttempts:0,messagesBeforeError:0},Oo.set(e,t);return t}var Fo=new Map;function nd(e){let t=Fo.get(e);if(!t)t={sessionID:e,errorCount:0,lastErrorTime:null,history:[]},Fo.set(e,t);return t}function rd(e){return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
1594
- `)}function Lo(e,t){let n=[],r=e.indexOf(t);while(r!==-1)n.push(r),r=e.indexOf(t,r+t.length);return n}function id(e,t){let n=[],r=e.split(`
2050
+ `;console.log(u),console.log("[empty-message-sanitizer] [session recovered - continuing previous task]")}if(n.requireJustification&&n.autoRecover)console.log("[empty-message-sanitizer] Please provide a justification for sending an empty message, or include actual content.")}}}}var Ao=new Map;function Xe(e){let t=Ao.get(e);if(!t)t={sessions:new Map,sessionTimeout:3600000},Ao.set(e,t);return t}function ie(e){return Xe(e).sessions.get(e)}function Fl(e,t){let n={sessionID:e,workingDirectory:t||process.cwd(),environment:{},commandHistory:[],childProcesses:new Set,lastActiveTime:Date.now()};return Xe(e).sessions.set(e,n),n}function Ll(e){let t=ie(e);if(t)t.lastActiveTime=Date.now()}function _l(e,t){let n=ie(e);if(n){if(n.commandHistory.push(t),n.commandHistory.length>100)n.commandHistory=n.commandHistory.slice(-100)}}function Co(e){e.childProcesses.forEach((t)=>{try{process.kill(t)}catch(n){}}),e.childProcesses.clear()}function Po(e,t){let n=t?.config??{enabled:!0,trackHistory:!0,historySize:50,preserveEnv:!0,autoCleanup:!0,sessionTimeout:3600000};return{"tool.execute.before":async(r,i)=>{if(!n.enabled)return;if(r.tool!=="bash")return;let{sessionID:o}=r;if(!o)return;if(!ie(o))console.log(`[interactive-bash-session] Creating new bash session for ${o}`),Fl(o);else Ll(o)},"tool.execute.after":async(r,i)=>{if(!n.enabled)return;if(r.tool!=="bash")return;let o=r.sessionID||"",a=r.args,s=Array.isArray(a)?a.join(" "):String(a);_l(o,s);let c=i;if(c.pid!==void 0){let l=ie(o);if(l)l.childProcesses.add(c.pid)}if(n.trackHistory){let l=ie(o);if(l)console.log(`[interactive-bash-session] Command history size: ${l.commandHistory.length}`)}},event:async(r)=>{if(!n.enabled)return;let i=r.sessionID;if(!i)return;let o=r;if(o?.type==="session.end"&&n.autoCleanup){let a=ie(i);if(a)console.log(`[interactive-bash-session] Cleaning up bash session for ${i}`),Co(a),Xe(i).sessions.delete(i),console.log(`[interactive-bash-session] Session cleanup completed. Commands executed: ${a.commandHistory.length}, Working dir: ${a.workingDirectory}`)}if(o?.type==="session.timeout"){let a=ie(i);if(a&&n.autoCleanup)console.log(`[interactive-bash-session] Session timeout for ${i}`),Co(a),Xe(i).sessions.delete(i)}}}}function Eo(e,t){let n=t?.config??{enabled:!0};return{event:async(r)=>{if(!n.enabled)return;if(process.env.CI!==void 0)console.log("[non-interactive-env] Detected CI environment, enabling non-interactive mode")}}}function Ro(e,t){let n=t?.config??{enabled:!0,threshold:1e4};return{"chat.message":async(r,i)=>{if(!n.enabled)return;let o=n.threshold??1e4;console.log(`[preemptive-compaction] Monitoring message length for preemptive compaction (threshold: ${o})`)},"experimental.session.compacting":async(r,i)=>{if(!n.enabled)return;console.log("[preemptive-compaction] Triggering preemptive session compaction")}}}nn();var Oo=new Map;function $o(e,t){let n=t?.config??{enabled:!0,autoRecover:!1};if(!n.enabled)return{"chat.message":async()=>{}};return{"chat.message":async(r)=>{let{sessionID:i}=r;if(!i)return;let o=Io(i);o.errorType=null},event:async(r)=>{let{sessionID:i,type:o,error:a}=r;if(o!=="session.error")return;if(!i)return;let{detectErrorType:s}=await Promise.resolve().then(() => (nn(),Mo)),c=s(a),l=Io(i);if(l.errorType=c,l.lastErrorTime=Date.now(),l.errorCount++,console.log(`[session-recovery] Detected error type: ${c}`),console.log(`[session-recovery] Error count for session ${i}: ${l.errorCount}`),n.autoRecover&&tn(c)){let{attemptRecovery:u}=await Promise.resolve().then(() => (No(),Do)),p={sessionID:i,error:a,timestamp:Date.now()};try{await u(c,p,{maxRetries:3}),console.log(`[session-recovery] Auto-recovery attempted for ${c}`)}catch(g){console.error("[session-recovery] Auto-recovery failed:",g)}}}}}function Io(e){let t=Oo.get(e);if(!t)t={sessionID:e,errorType:null,errorCount:0,lastErrorTime:null,recoveryAttempts:0,messagesBeforeError:0},Oo.set(e,t);return t}var Fo=new Map;function ed(e){let t=Fo.get(e);if(!t)t={sessionID:e,errorCount:0,lastErrorTime:null,history:[]},Fo.set(e,t);return t}function td(e){return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
2051
+ `)}function Lo(e,t){let n=[],r=e.indexOf(t);while(r!==-1)n.push(r),r=e.indexOf(t,r+t.length);return n}function nd(e,t){let n=[],r=e.split(`
1595
2052
  `),i=!1,o=Lo(e,"<thinking>"),a=Lo(e,"</thinking>");if(o.length!==a.length)n.push({type:"mismatched_tags",line:0,message:`Mismatched thinking block tags: ${o.length} opening, ${a.length} closing`,suggestion:"Ensure every <thinking> has a matching </thinking>",recovered:!1});if(o.length===0&&e.includes("</thinking>")){let s=t.autoRecover??!1;n.push({type:"missing_open_tag",line:0,message:"Found closing </thinking> tag without opening <thinking>",suggestion:"Add <thinking> tag before the closing tag",recovered:s}),i=s}if(a.length===0&&e.includes("<thinking>")){let s=t.autoRecover??!1;n.push({type:"missing_close_tag",line:0,message:"Found opening <thinking> tag without closing </thinking>",suggestion:"Add </thinking> tag to close the thinking block",recovered:s}),i=s}for(let s=0;s<o.length;s++){let c=o[s],l=a[s];if(l!==void 0&&l<c){let u=e.substring(0,l).split(`
1596
2053
  `).length,p=t.autoRecover??!1;n.push({type:"inverted_tags",line:u,message:"Closing tag appears before opening tag",suggestion:"Remove duplicate opening tag or reorder tags correctly",recovered:p}),i=p}if(s<o.length-1&&l!==void 0){let u=o[s+1];if(u<l){let p=e.substring(0,u).split(`
1597
- `).length,m=t.autoRecover??!1;n.push({type:"nested_thinking",line:p,message:"Nested thinking blocks detected (opening tag before closing previous block)",suggestion:"Close the previous thinking block before opening a new one",recovered:m}),i=m}}}if(t.enforcePosition){let s=a.length>0?Math.max(...a):-1;if(s>=0?e.substring(s).trim().length>0:!1){let l=e.substring(0,s).split(`
2054
+ `).length,g=t.autoRecover??!1;n.push({type:"nested_thinking",line:p,message:"Nested thinking blocks detected (opening tag before closing previous block)",suggestion:"Close the previous thinking block before opening a new one",recovered:g}),i=g}}}if(t.enforcePosition){let s=a.length>0?Math.max(...a):-1;if(s>=0?e.substring(s).trim().length>0:!1){let l=e.substring(0,s).split(`
1598
2055
  `).length,u=t.autoRecover??!1;n.push({type:"content_after_thinking",line:l,message:"Content found after last thinking block",suggestion:"Move thinking blocks to beginning of message",recovered:u}),i=u}}if(t.requireContent)for(let s=0;s<o.length;s++){let c=o[s],l=a[s];if(l!==void 0){if(e.substring(c+10,l).trim().length===0){let p=e.substring(0,c).split(`
1599
- `).length,m=t.autoRecover??!1;n.push({type:"empty_thinking",line:p,message:"Empty thinking block (no content between tags)",suggestion:"Add meaningful thinking content or remove the empty block",recovered:m}),i=m}}}return{hasErrors:n.length>0,errors:n,recovered:i}}function od(e,t){let n=e;for(let r of t){if(!r.recovered)continue;switch(r.type){case"missing_close_tag":n=n.replace(/<thinking>$/,`<thinking>
2056
+ `).length,g=t.autoRecover??!1;n.push({type:"empty_thinking",line:p,message:"Empty thinking block (no content between tags)",suggestion:"Add meaningful thinking content or remove the empty block",recovered:g}),i=g}}}return{hasErrors:n.length>0,errors:n,recovered:i}}function rd(e,t){let n=e;for(let r of t){if(!r.recovered)continue;switch(r.type){case"missing_close_tag":n=n.replace(/<thinking>$/,`<thinking>
1600
2057
  </thinking>`);break;case"missing_open_tag":n=n.replace(/^<\/thinking>/,`<thinking>
1601
2058
  </thinking>`);break;case"inverted_tags":let i=(n.match(/<thinking>/g)||[]).length,o=(n.match(/<\/thinking>/g)||[]).length;if(i>o)n+=`
1602
2059
  </thinking>`;break;case"nested_thinking":let a=n.lastIndexOf("<thinking>");if(n.lastIndexOf("</thinking>")<a)n+=`
1603
- </thinking>`;break;case"empty_thinking":n=n.replace(/<thinking>\s*<\/thinking>/gi,"");break;case"content_after_thinking":let c=n.lastIndexOf("</thinking>");if(c>=0){if(n.substring(c+13).trim().length>0)n=n.substring(0,c+13)}break;default:break}}return n}function jo(e,t){let n=t?.config??{enabled:!0,autoRecover:!0,strictMode:!1,enforcePosition:!0,requireContent:!0};return{"chat.message":async(r,i)=>{if(!n.enabled)return;let{sessionID:o}=r,a=rd(i.parts);if(!a.includes("<thinking>")&&!a.includes("</thinking>"))return;let s=id(a,n);if(s.hasErrors){let c=nd(o);c.errorCount++,c.lastErrorTime=Date.now(),c.history.push({timestamp:Date.now(),errors:s.errors}),console.log(`[thinking-block-validator] Detected ${s.errors.length} thinking block validation error(s) in session ${o}`);for(let l of s.errors)if(console.log(`[thinking-block-validator] [${l.type}] Line ${l.line}: ${l.message}`),console.log(`[thinking-block-validator] Suggestion: ${l.suggestion}`),l.recovered)console.log("[thinking-block-validator] ✓ Auto-recovery applied");if(n.autoRecover&&s.recovered){let l=od(a,s.errors);console.log("[thinking-block-validator] [session recovered - continuing previous task]"),console.log(`[thinking-block-validator] Recovered text length: ${l.length} (original: ${a.length})`)}if(n.strictMode&&!s.recovered)console.error("[thinking-block-validator] CRITICAL: Validation failed in strict mode. Please fix the thinking block structure before continuing.")}}}}var rn={todo:[/TODO:/i,/@todo/i,/\[TODO\]/i,/待办/i,/할 일/i,/待辦/i],fixme:[/FIXME:/i,/@fixme/i,/\[FIXME\]/i,/修复/i,/수정/i,/修正/i],xxx:[/XXX:/i,/@xxx/i,/\[XXX\]/i],hack:[/HACK:/i,/@hack/i,/\[HACK\]/i],note:[/NOTE:/i,/@note/i,/\[NOTE\]/i,/注意/i,/참고/i,/註記/i],bug:[/BUG:/i,/@bug/i,/\[BUG\]/i],warning:[/WARNING:/i,/@warning/i,/\[WARNING\]/i,/경고/i],optimization:[/OPTIMIZE:/i,/PERFORMANCE:/i,/@optimize/i],refactoring:[/REFACTOR:/i,/@refactor/i],documentation:[/DOC:/i,/@doc/i]},_o={bdd:[/^\s*#\s*Given\s+/i,/^\s*#\s*When\s+/i,/^\s*#\s*Then\s+/i,/^\s*#\s*And\s+/i,/^\s*#\s*But\s+/i,/^\s*\/\/\s*Given\s+/i,/^\s*\/\/\s*When\s+/i,/^\s*\/\/\s*Then\s+/i,/^\s*\/\/\s*And\s+/i],linter:[/^\s*#\s*noqa/i,/^\s*\/\/\s*@ts-ignore\b/i,/^\s*\/\/\s*@ts-nocheck\b/i,/^\s*\/\/\s*@ts-check\b/i,/^\s*\/\/\s*eslint-disable\b/i,/^\s*\/\/\s*eslint-enable\b/i,/^\s*\/\/\s*eslint-disable-next-line\b/i,/^\s*\/\*\s*eslint-disable\b/i,/^\s*\/\*\s*eslint-enable\b/i,/^\s*#\s*type:\s*ignore\b/i,/^\s*#\s*pylint:\s*disable\b/i,/^\s*#\s*mypy:\s*ignore\b/i],shebang:[/^#!\/bin\//,/^#!\/usr\/bin\/env\s+/],copyright:[/Copyright\s+\(c\)/i,/Copyright\s+\d{4}/i,/SPDX-License-Identifier:/i,/MIT License/i,/Apache License/i,/GPL License/i,/BSD License/i],fileHeader:[/^\s*File:\s+.*\.md/i,/^\s*Author:/i,/^\s*Date:\s*\d{4}-\d{2}-\d{2}/i,/^\s*Created:/i,/^\s*Modified:/i],documentation:[/^\s*\/\*\*[\s\S]*?\*\//,/^\s*\/\*\*[\s\S]*?@param/i,/^\s*\/\*\*[\s\S]*?@return/i,/^\s*\/\/\/[\s\S]*?@brief/i,/^\s*\/\/\/[\s\S]*?@param/i,/^\s*\/\*\*[\s\S]*?@brief/i,/^\s*#\s+@param/i,/^\s*#\s+@return/i,/^\s*#\s+@type/i],inlineDocs:[/^\s*\/\/\s*[A-Z]/,/^\s*#\s*[A-Z]/],imports:[/^\s*import\s+/,/^\s*require\s*\(/,/^\s*#\s*include\s+/,/^\s*using\s+namespace/]},Ho={javascript:{single:["//"],multi:["/*","*/"],shebang:["#!/usr/bin/env node","#!/usr/bin/nodejs"]},typescript:{single:["//"],multi:["/*","*/"],shebang:["#!/usr/bin/env node","#!/usr/bin/ts-node"]},python:{single:["#"],multi:['"""','"""'],shebang:["#!/usr/bin/env python3","#!/usr/bin/python3"]},rust:{single:["//"],multi:["/*","*/"],shebang:["#!/usr/bin/env rust-script"]},go:{single:["//"],multi:["/*","*/"]},java:{single:["//"],multi:["/*","*/"]},cpp:{single:["//"],multi:["/*","*/"]},csharp:{single:["//"],multi:["/*","*/"]},ruby:{single:["#"],multi:["=begin","=end"]},php:{single:["//","#"],multi:["/*","*/"],shebang:["#!/usr/bin/env php"]},swift:{single:["//"],multi:["/*","*/"]},kotlin:{single:["//"],multi:["/*","*/"]},scala:{single:["//"],multi:["/*","*/"]},shell:{single:["#"],multi:["<<'","'"],shebang:["#!/bin/bash","#!/bin/sh","#!/usr/bin/env bash"]},powershell:{single:["#"],multi:["<#","#>"],shebang:["#!/usr/bin/env pwsh"]},lua:{single:["--"],multi:["--[[","]]"]},sql:{single:["--"],multi:["/*","*/"]},html:{multi:["<!--","-->"]},css:{multi:["/*","*/"]},yaml:{single:["#"]},toml:{single:["#"]},json:{none:[]},xml:{multi:["<!--","-->"]},r:{single:["#"]},matlab:{single:["%"],multi:["%{","%}"]},fortran:{single:["!"],multi:["/*","*/"]},cobol:{single:["*"]},assembly:{single:[";"]}};function Wo(e){let t=e.split(".").pop()?.toLowerCase();return t?{js:"javascript",jsx:"javascript",ts:"typescript",tsx:"typescript",py:"python",rs:"rust",go:"go",java:"java",cpp:"cpp",cxx:"cpp",cc:"cpp",c:"cpp",cs:"csharp",rb:"ruby",php:"php",swift:"swift",kt:"kotlin",scala:"scala",sh:"shell",bash:"shell",zsh:"shell",fish:"shell",ps1:"powershell",psm1:"powershell",lua:"lua",sql:"sql",html:"html",css:"css",scss:"css",yaml:"yaml",yml:"yaml",toml:"toml",json:"json",xml:"xml",r:"r",m:"matlab",f:"fortran",f90:"fortran",f95:"fortran",cbl:"cobol",cob:"cobol",asm:"assembly",s:"assembly"}[t]??null:null}function sd(e){return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
1604
- `).trim()}function Jo(e){let t=e.trim();for(let[n,r]of Object.entries(_o))for(let i of r)if(i.test(t))return!0;return!1}function ad(e){let t=[],n=/(?:^|\n)Writing to (.+?)\n/g,r=[...e.matchAll(n)];for(let i of r){let o=i[1],a=i.index+i[0].length,s=e.length,c=e.substring(a).match(/\nWriting to .+?\n/);if(c)s=a+c.index;let l=e.substring(a,s).trim();t.push({filename:o,content:l})}return t}function cd(e,t){let n=[],r=e.split(`
1605
- `),i=Wo(t),o=i?Ho[i]:null,a=!1,s=0;for(let c=0;c<r.length;c++){let l=r[c],u=l.trim();if(o&&"multi"in o&&o.multi.length>0){if(u.startsWith(o.multi[0])||a){if(!a)a=!0,s=c;if(u.endsWith(o.multi[1]))a=!1;continue}}if(o&&"shebang"in o&&Array.isArray(o.shebang)&&o.shebang.length>0){if(l.startsWith(o.shebang[0]))continue}let p=!1;if(o&&"single"in o)p=o.single.some((m)=>u.startsWith(m));if(!p){if(u.startsWith("//")||u.startsWith("#"))p=!0}if(p){for(let[m,g]of Object.entries(rn))for(let f of g)if(f.test(u)){let b=Jo(u);n.push({type:m,line:c+1,text:u,isException:b})}}}return n}function Uo(e,t){let n=t?.config??{enabled:!0,checkAfterToolUse:!0,requireJustification:!1};return{"chat.message":async(r,i)=>{if(!n.enabled)return;let o=sd(i.parts),a=[],s=o.split(`
1606
- `);for(let[c,l]of Object.entries(rn))s.forEach((u,p)=>{for(let m of l)if(m.test(u)){if(!Jo(u))a.push({type:c,line:p+1,text:u.trim()})}});if(a.length>0)console.log(`[comment-checker] Found ${a.length} annotated comments that need justification`)},"tool.execute.after":async(r,i)=>{if(!n.enabled||!n.checkAfterToolUse)return;if(!i.output)return;let{tool:o}=r;if(!["write","edit","multiEdit"].includes(o))return;let s=typeof i.output==="string"?i.output:JSON.stringify(i.output),c=ad(s),l=[];for(let{filename:u,content:p}of c){let g=cd(p,u).filter((f)=>!f.isException);if(g.length>0){l.push({filename:u,comments:g}),console.log(`[comment-checker] File ${u}:`);for(let f of g)console.log(` Line ${f.line}: ${f.type} - ${f.text.substring(0,50)}`)}}if(n.requireJustification&&l.length>0){let u=`
2060
+ </thinking>`;break;case"empty_thinking":n=n.replace(/<thinking>\s*<\/thinking>/gi,"");break;case"content_after_thinking":let c=n.lastIndexOf("</thinking>");if(c>=0){if(n.substring(c+13).trim().length>0)n=n.substring(0,c+13)}break;default:break}}return n}function _o(e,t){let n=t?.config??{enabled:!0,autoRecover:!0,strictMode:!1,enforcePosition:!0,requireContent:!0};return{"chat.message":async(r,i)=>{if(!n.enabled)return;let{sessionID:o}=r,a=td(i.parts);if(!a.includes("<thinking>")&&!a.includes("</thinking>"))return;let s=nd(a,n);if(s.hasErrors){let c=ed(o);c.errorCount++,c.lastErrorTime=Date.now(),c.history.push({timestamp:Date.now(),errors:s.errors}),console.log(`[thinking-block-validator] Detected ${s.errors.length} thinking block validation error(s) in session ${o}`);for(let l of s.errors)if(console.log(`[thinking-block-validator] [${l.type}] Line ${l.line}: ${l.message}`),console.log(`[thinking-block-validator] Suggestion: ${l.suggestion}`),l.recovered)console.log("[thinking-block-validator] ✓ Auto-recovery applied");if(n.autoRecover&&s.recovered){let l=rd(a,s.errors);console.log("[thinking-block-validator] [session recovered - continuing previous task]"),console.log(`[thinking-block-validator] Recovered text length: ${l.length} (original: ${a.length})`)}if(n.strictMode&&!s.recovered)console.error("[thinking-block-validator] CRITICAL: Validation failed in strict mode. Please fix the thinking block structure before continuing.")}}}}var rn={todo:[/TODO:/i,/@todo/i,/\[TODO\]/i,/待办/i,/할 일/i,/待辦/i],fixme:[/FIXME:/i,/@fixme/i,/\[FIXME\]/i,/修复/i,/수정/i,/修正/i],xxx:[/XXX:/i,/@xxx/i,/\[XXX\]/i],hack:[/HACK:/i,/@hack/i,/\[HACK\]/i],note:[/NOTE:/i,/@note/i,/\[NOTE\]/i,/注意/i,/참고/i,/註記/i],bug:[/BUG:/i,/@bug/i,/\[BUG\]/i],warning:[/WARNING:/i,/@warning/i,/\[WARNING\]/i,/경고/i],optimization:[/OPTIMIZE:/i,/PERFORMANCE:/i,/@optimize/i],refactoring:[/REFACTOR:/i,/@refactor/i],documentation:[/DOC:/i,/@doc/i]},jo={bdd:[/^\s*#\s*Given\s+/i,/^\s*#\s*When\s+/i,/^\s*#\s*Then\s+/i,/^\s*#\s*And\s+/i,/^\s*#\s*But\s+/i,/^\s*\/\/\s*Given\s+/i,/^\s*\/\/\s*When\s+/i,/^\s*\/\/\s*Then\s+/i,/^\s*\/\/\s*And\s+/i],linter:[/^\s*#\s*noqa/i,/^\s*\/\/\s*@ts-ignore\b/i,/^\s*\/\/\s*@ts-nocheck\b/i,/^\s*\/\/\s*@ts-check\b/i,/^\s*\/\/\s*eslint-disable\b/i,/^\s*\/\/\s*eslint-enable\b/i,/^\s*\/\/\s*eslint-disable-next-line\b/i,/^\s*\/\*\s*eslint-disable\b/i,/^\s*\/\*\s*eslint-enable\b/i,/^\s*#\s*type:\s*ignore\b/i,/^\s*#\s*pylint:\s*disable\b/i,/^\s*#\s*mypy:\s*ignore\b/i],shebang:[/^#!\/bin\//,/^#!\/usr\/bin\/env\s+/],copyright:[/Copyright\s+\(c\)/i,/Copyright\s+\d{4}/i,/SPDX-License-Identifier:/i,/MIT License/i,/Apache License/i,/GPL License/i,/BSD License/i],fileHeader:[/^\s*File:\s+.*\.md/i,/^\s*Author:/i,/^\s*Date:\s*\d{4}-\d{2}-\d{2}/i,/^\s*Created:/i,/^\s*Modified:/i],documentation:[/^\s*\/\*\*[\s\S]*?\*\//,/^\s*\/\*\*[\s\S]*?@param/i,/^\s*\/\*\*[\s\S]*?@return/i,/^\s*\/\/\/[\s\S]*?@brief/i,/^\s*\/\/\/[\s\S]*?@param/i,/^\s*\/\*\*[\s\S]*?@brief/i,/^\s*#\s+@param/i,/^\s*#\s+@return/i,/^\s*#\s+@type/i],inlineDocs:[/^\s*\/\/\s*[A-Z]/,/^\s*#\s*[A-Z]/],imports:[/^\s*import\s+/,/^\s*require\s*\(/,/^\s*#\s*include\s+/,/^\s*using\s+namespace/]},Wo={javascript:{single:["//"],multi:["/*","*/"],shebang:["#!/usr/bin/env node","#!/usr/bin/nodejs"]},typescript:{single:["//"],multi:["/*","*/"],shebang:["#!/usr/bin/env node","#!/usr/bin/ts-node"]},python:{single:["#"],multi:['"""','"""'],shebang:["#!/usr/bin/env python3","#!/usr/bin/python3"]},rust:{single:["//"],multi:["/*","*/"],shebang:["#!/usr/bin/env rust-script"]},go:{single:["//"],multi:["/*","*/"]},java:{single:["//"],multi:["/*","*/"]},cpp:{single:["//"],multi:["/*","*/"]},csharp:{single:["//"],multi:["/*","*/"]},ruby:{single:["#"],multi:["=begin","=end"]},php:{single:["//","#"],multi:["/*","*/"],shebang:["#!/usr/bin/env php"]},swift:{single:["//"],multi:["/*","*/"]},kotlin:{single:["//"],multi:["/*","*/"]},scala:{single:["//"],multi:["/*","*/"]},shell:{single:["#"],multi:["<<'","'"],shebang:["#!/bin/bash","#!/bin/sh","#!/usr/bin/env bash"]},powershell:{single:["#"],multi:["<#","#>"],shebang:["#!/usr/bin/env pwsh"]},lua:{single:["--"],multi:["--[[","]]"]},sql:{single:["--"],multi:["/*","*/"]},html:{multi:["<!--","-->"]},css:{multi:["/*","*/"]},yaml:{single:["#"]},toml:{single:["#"]},json:{none:[]},xml:{multi:["<!--","-->"]},r:{single:["#"]},matlab:{single:["%"],multi:["%{","%}"]},fortran:{single:["!"],multi:["/*","*/"]},cobol:{single:["*"]},assembly:{single:[";"]}};function Ho(e){let t=e.split(".").pop()?.toLowerCase();return t?{js:"javascript",jsx:"javascript",ts:"typescript",tsx:"typescript",py:"python",rs:"rust",go:"go",java:"java",cpp:"cpp",cxx:"cpp",cc:"cpp",c:"cpp",cs:"csharp",rb:"ruby",php:"php",swift:"swift",kt:"kotlin",scala:"scala",sh:"shell",bash:"shell",zsh:"shell",fish:"shell",ps1:"powershell",psm1:"powershell",lua:"lua",sql:"sql",html:"html",css:"css",scss:"css",yaml:"yaml",yml:"yaml",toml:"toml",json:"json",xml:"xml",r:"r",m:"matlab",f:"fortran",f90:"fortran",f95:"fortran",cbl:"cobol",cob:"cobol",asm:"assembly",s:"assembly"}[t]??null:null}function id(e){return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
2061
+ `).trim()}function Uo(e){let t=e.trim();for(let[n,r]of Object.entries(jo))for(let i of r)if(i.test(t))return!0;return!1}function od(e){let t=[],n=/(?:^|\n)Writing to (.+?)\n/g,r=[...e.matchAll(n)];for(let i of r){let o=i[1],a=i.index+i[0].length,s=e.length,c=e.substring(a).match(/\nWriting to .+?\n/);if(c)s=a+c.index;let l=e.substring(a,s).trim();t.push({filename:o,content:l})}return t}function sd(e,t){let n=[],r=e.split(`
2062
+ `),i=Ho(t),o=i?Wo[i]:null,a=!1,s=0;for(let c=0;c<r.length;c++){let l=r[c],u=l.trim();if(o&&"multi"in o&&o.multi.length>0){if(u.startsWith(o.multi[0])||a){if(!a)a=!0,s=c;if(u.endsWith(o.multi[1]))a=!1;continue}}if(o&&"shebang"in o&&Array.isArray(o.shebang)&&o.shebang.length>0){if(l.startsWith(o.shebang[0]))continue}let p=!1;if(o&&"single"in o)p=o.single.some((g)=>u.startsWith(g));if(!p){if(u.startsWith("//")||u.startsWith("#"))p=!0}if(p){for(let[g,m]of Object.entries(rn))for(let f of m)if(f.test(u)){let b=Uo(u);n.push({type:g,line:c+1,text:u,isException:b})}}}return n}function Bo(e,t){let n=t?.config??{enabled:!0,checkAfterToolUse:!0,requireJustification:!1};return{"chat.message":async(r,i)=>{if(!n.enabled)return;let o=id(i.parts),a=[],s=o.split(`
2063
+ `);for(let[c,l]of Object.entries(rn))s.forEach((u,p)=>{for(let g of l)if(g.test(u)){if(!Uo(u))a.push({type:c,line:p+1,text:u.trim()})}});if(a.length>0)console.log(`[comment-checker] Found ${a.length} annotated comments that need justification`)},"tool.execute.after":async(r,i)=>{if(!n.enabled||!n.checkAfterToolUse)return;if(!i.output)return;let{tool:o}=r;if(!["write","edit","multiEdit"].includes(o))return;let s=typeof i.output==="string"?i.output:JSON.stringify(i.output),c=od(s),l=[];for(let{filename:u,content:p}of c){let m=sd(p,u).filter((f)=>!f.isException);if(m.length>0){l.push({filename:u,comments:m}),console.log(`[comment-checker] File ${u}:`);for(let f of m)console.log(` Line ${f.line}: ${f.type} - ${f.text.substring(0,50)}`)}}if(n.requireJustification&&l.length>0){let u=`
1607
2064
 
1608
2065
  ${"=".repeat(60)}
1609
2066
  COMMENT CHECKER: ${l.length} file(s) contain non-exception annotated comments (TODO, FIXME, etc.)
@@ -1611,31 +2068,31 @@ ${"=".repeat(60)}
1611
2068
 
1612
2069
  Before proceeding, you must justify why these comments are necessary:
1613
2070
 
1614
- `;for(let{filename:p,comments:m}of l){u+=`
2071
+ `;for(let{filename:p,comments:g}of l){u+=`
1615
2072
  File: ${p}
1616
- `;for(let g of m)u+=` [${g.type}] Line ${g.line}: ${g.text.substring(0,60)}...
2073
+ `;for(let m of g)u+=` [${m.type}] Line ${m.line}: ${m.text.substring(0,60)}...
1617
2074
  `}u+=`
1618
2075
  Please provide justification for each comment or remove them.
1619
2076
  ${"=".repeat(60)}
1620
- `,console.log(u)}}}}function on(e,t){let n={enabled:t?.enabled??!0,warningThresholdMB:t?.warningThresholdMB??1024,criticalThresholdMB:t?.criticalThresholdMB??1536,killThresholdMB:t?.killThresholdMB??2048,checkInterval:t?.checkInterval??10};if(!n.enabled)return{};let r=0,i=[],o=50,a=()=>{let l=process.memoryUsage();return{rss:Math.round(l.rss/1024/1024),heapUsed:Math.round(l.heapUsed/1024/1024),external:Math.round(l.external/1024/1024),timestamp:Date.now()}},s=(l)=>{return`RSS: ${l.rss}MB | Heap: ${l.heapUsed}MB | External: ${l.external}MB`},c=()=>{if(i.length<2)return 0;let l=i.slice(-5),u=l[0],p=l[l.length-1];return Math.round((p.rss-u.rss)/u.rss*100)};return{"tool.execute.after":async(l,u)=>{try{if(r++,r%n.checkInterval!==0)return;let p=a();if(i.push(p),i.length>o)i=i.slice(-o);let m=c(),{rss:g}=p;if(g>n.warningThresholdMB&&g<n.criticalThresholdMB){if(console.warn(`[kraken-code:memory-guard] ⚠️ Memory usage elevated: ${s(p)}`),m>20)console.warn(`[kraken-code:memory-guard] \uD83D\uDCC8 Memory growing rapidly (+${m}% in last ${n.checkInterval} tools)`)}if(g>=n.criticalThresholdMB&&g<n.killThresholdMB){if(console.error(`[kraken-code:memory-guard] \uD83D\uDD34 CRITICAL: Memory at ${g}MB`),console.error("[kraken-code:memory-guard] Consider starting a new session soon"),globalThis.gc){console.log("[kraken-code:memory-guard] Attempting garbage collection..."),globalThis.gc();let f=a(),b=g-f.rss;if(b>50)console.log(`[kraken-code:memory-guard] GC freed ~${b}MB`)}}if(g>=n.killThresholdMB){console.error(`[kraken-code:memory-guard] \uD83D\uDC80 FATAL: Memory at ${g}MB exceeds kill threshold (${n.killThresholdMB}MB)`),console.error("[kraken-code:memory-guard] Emergency shutdown to prevent segfault");let f=l.sessionID||"unknown";console.error(`[kraken-code:memory-guard] Session: ${f}, Tools executed: ${r}`),setTimeout(()=>{process.exit(1)},100)}}catch(p){console.error("[kraken-code:memory-guard] Error in tool.execute.after:",p)}},event:async(l)=>{try{if(l?.type==="session.end"){let p=a();if(console.log(`[kraken-code:memory-guard] Session ended. Final memory: ${s(p)}`),i.length>2){let m=i[0].rss,f=p.rss-m,b=f>0?"↗️ increased":f<0?"↘️ decreased":"➡️ stable";console.log(`[kraken-code:memory-guard] Memory trend: ${b} by ${Math.abs(f)}MB during session`)}}}catch(u){console.error("[kraken-code:memory-guard] Error in event:",u)}}}}function sn(e,t){let n={enabled:t?.enabled??!0,toolsBeforePause:t?.toolsBeforePause??15,pauseDurationMs:t?.pauseDurationMs??50,gcHintInterval:t?.gcHintInterval??5,highMemoryPauseMs:t?.highMemoryPauseMs??200,highMemoryThresholdMB:t?.highMemoryThresholdMB??1200};if(!n.enabled)return{};let r=0,i=0,o=()=>{return Math.round(process.memoryUsage().rss/1024/1024)},a=(s)=>{return new Promise((c)=>setTimeout(c,s))};return{"tool.execute.before":async(s)=>{try{if(r++,r%n.gcHintInterval===0){if(await a(1),globalThis.gc&&r%(n.gcHintInterval*4)===0)globalThis.gc()}if(r%n.toolsBeforePause===0){if(Date.now()-i>n.pauseDurationMs){let p=o(),m=p>n.highMemoryThresholdMB?n.highMemoryPauseMs:n.pauseDurationMs;if(p>n.highMemoryThresholdMB)console.warn(`[kraken-code:tool-throttle] High memory (${p}MB), pausing ${m}ms to allow cleanup`);await a(m),i=Date.now()}}if((s.tool||"")==="bash"&&r%3===0)await a(5)}catch(c){console.error("[kraken-code:tool-throttle] Error in tool.execute.before:",c)}},"tool.execute.after":async(s,c)=>{try{if((s.tool||"")==="bash"&&c?.output){let u=typeof c.output==="string"?c.output.length:JSON.stringify(c.output).length;if(u>500000){if(console.warn(`[kraken-code:tool-throttle] Large bash output (${Math.round(u/1024)}KB), truncating`),typeof c.output==="string")c.output=c.output.slice(0,1e5)+`
2077
+ `,console.log(u)}}}}function on(e,t){let n={enabled:t?.enabled??!0,warningThresholdMB:t?.warningThresholdMB??1024,criticalThresholdMB:t?.criticalThresholdMB??1536,killThresholdMB:t?.killThresholdMB??2048,checkInterval:t?.checkInterval??10};if(!n.enabled)return{};let r=0,i=[],o=50,a=()=>{let l=process.memoryUsage();return{rss:Math.round(l.rss/1024/1024),heapUsed:Math.round(l.heapUsed/1024/1024),external:Math.round(l.external/1024/1024),timestamp:Date.now()}},s=(l)=>{return`RSS: ${l.rss}MB | Heap: ${l.heapUsed}MB | External: ${l.external}MB`},c=()=>{if(i.length<2)return 0;let l=i.slice(-5),u=l[0],p=l[l.length-1];return Math.round((p.rss-u.rss)/u.rss*100)};return{"tool.execute.after":async(l,u)=>{try{if(r++,r%n.checkInterval!==0)return;let p=a();if(i.push(p),i.length>o)i=i.slice(-o);let g=c(),{rss:m}=p;if(m>n.warningThresholdMB&&m<n.criticalThresholdMB){if(console.warn(`[kraken-code:memory-guard] ⚠️ Memory usage elevated: ${s(p)}`),g>20)console.warn(`[kraken-code:memory-guard] \uD83D\uDCC8 Memory growing rapidly (+${g}% in last ${n.checkInterval} tools)`)}if(m>=n.criticalThresholdMB&&m<n.killThresholdMB){if(console.error(`[kraken-code:memory-guard] \uD83D\uDD34 CRITICAL: Memory at ${m}MB`),console.error("[kraken-code:memory-guard] Consider starting a new session soon"),globalThis.gc){console.log("[kraken-code:memory-guard] Attempting garbage collection..."),globalThis.gc();let f=a(),b=m-f.rss;if(b>50)console.log(`[kraken-code:memory-guard] GC freed ~${b}MB`)}}if(m>=n.killThresholdMB){console.error(`[kraken-code:memory-guard] \uD83D\uDC80 FATAL: Memory at ${m}MB exceeds kill threshold (${n.killThresholdMB}MB)`),console.error("[kraken-code:memory-guard] Emergency shutdown to prevent segfault");let f=l.sessionID||"unknown";console.error(`[kraken-code:memory-guard] Session: ${f}, Tools executed: ${r}`),setTimeout(()=>{process.exit(1)},100)}}catch(p){console.error("[kraken-code:memory-guard] Error in tool.execute.after:",p)}},event:async(l)=>{try{if(l?.type==="session.end"){let p=a();if(console.log(`[kraken-code:memory-guard] Session ended. Final memory: ${s(p)}`),i.length>2){let g=i[0].rss,f=p.rss-g,b=f>0?"↗️ increased":f<0?"↘️ decreased":"➡️ stable";console.log(`[kraken-code:memory-guard] Memory trend: ${b} by ${Math.abs(f)}MB during session`)}}}catch(u){console.error("[kraken-code:memory-guard] Error in event:",u)}}}}function sn(e,t){let n={enabled:t?.enabled??!0,toolsBeforePause:t?.toolsBeforePause??15,pauseDurationMs:t?.pauseDurationMs??50,gcHintInterval:t?.gcHintInterval??5,highMemoryPauseMs:t?.highMemoryPauseMs??200,highMemoryThresholdMB:t?.highMemoryThresholdMB??1200};if(!n.enabled)return{};let r=0,i=0,o=()=>{return Math.round(process.memoryUsage().rss/1024/1024)},a=(s)=>{return new Promise((c)=>setTimeout(c,s))};return{"tool.execute.before":async(s)=>{try{if(r++,r%n.gcHintInterval===0){if(await a(1),globalThis.gc&&r%(n.gcHintInterval*4)===0)globalThis.gc()}if(r%n.toolsBeforePause===0){if(Date.now()-i>n.pauseDurationMs){let p=o(),g=p>n.highMemoryThresholdMB?n.highMemoryPauseMs:n.pauseDurationMs;if(p>n.highMemoryThresholdMB)console.warn(`[kraken-code:tool-throttle] High memory (${p}MB), pausing ${g}ms to allow cleanup`);await a(g),i=Date.now()}}if((s.tool||"")==="bash"&&r%3===0)await a(5)}catch(c){console.error("[kraken-code:tool-throttle] Error in tool.execute.before:",c)}},"tool.execute.after":async(s,c)=>{try{if((s.tool||"")==="bash"&&c?.output){let u=typeof c.output==="string"?c.output.length:JSON.stringify(c.output).length;if(u>500000){if(console.warn(`[kraken-code:tool-throttle] Large bash output (${Math.round(u/1024)}KB), truncating`),typeof c.output==="string")c.output=c.output.slice(0,1e5)+`
1621
2078
 
1622
- [Output truncated by kraken-code due to size - ${Math.round(u/1024)}KB exceeded 500KB limit]`}}}catch(l){console.error("[kraken-code:tool-throttle] Error in tool.execute.after:",l)}}}}function an(e,t){let n={enabled:t?.enabled??!0,maxSessionDurationMinutes:t?.maxSessionDurationMinutes??45,maxToolsPerSession:t?.maxToolsPerSession??100,warningThresholdTools:t?.warningThresholdTools??0.7,warningThresholdMinutes:t?.warningThresholdMinutes??0.8};if(!n.enabled)return{};let r=new Map,i=(a)=>{if(!r.has(a))r.set(a,{startTime:Date.now(),toolCount:0,warningsIssued:new Set});return r.get(a)},o=(a)=>{let s=Math.floor(a/60000),c=Math.floor(a%60000/1000);return`${s}m ${c}s`};return{"tool.execute.before":async(a)=>{try{let s=a.sessionID;if(!s)return;let c=i(s);c.toolCount++;let l=Date.now()-c.startTime,u=l/60000,p=Math.floor(n.maxToolsPerSession*n.warningThresholdTools);if(c.toolCount===p){if(!c.warningsIssued.has("tools-70"))c.warningsIssued.add("tools-70"),console.warn(`[kraken-code:session-lifecycle] ⚠️ Session approaching tool limit (${c.toolCount}/${n.maxToolsPerSession})`),console.warn("[kraken-code:session-lifecycle] Consider starting a new session soon to prevent memory issues")}if(c.toolCount===n.maxToolsPerSession)console.error(`[kraken-code:session-lifecycle] \uD83D\uDD34 Session has reached tool limit (${n.maxToolsPerSession})`),console.error("[kraken-code:session-lifecycle] Memory leak risk is HIGH. Start a new session immediately.");let m=n.maxSessionDurationMinutes*n.warningThresholdMinutes;if(u>=m&&u<n.maxSessionDurationMinutes){if(!c.warningsIssued.has("duration-80")){c.warningsIssued.add("duration-80");let g=Math.round(n.maxSessionDurationMinutes-u);console.warn(`[kraken-code:session-lifecycle] ⏰ Session running long (${Math.round(u)}m)`),console.warn(`[kraken-code:session-lifecycle] Recommend restart within ${g} minutes`)}}if(u>=n.maxSessionDurationMinutes)console.error(`[kraken-code:session-lifecycle] ⏰ Session exceeded max duration (${n.maxSessionDurationMinutes}m)`),console.error(`[kraken-code:session-lifecycle] Current: ${Math.round(u)}m - Memory leak risk CRITICAL`);if(c.toolCount%25===0)console.log(`[kraken-code:session-lifecycle] Session stats: ${c.toolCount} tools, ${o(l)} elapsed`)}catch(s){console.error("[kraken-code:session-lifecycle] Error in tool.execute.before:",s)}},event:async(a)=>{try{let s=a,c=s?.sessionID;if(s?.type==="session.start"&&c)i(c),console.log(`[kraken-code:session-lifecycle] Session started - Limits: ${n.maxToolsPerSession} tools, ${n.maxSessionDurationMinutes}min`);if(s?.type==="session.end"&&c){let l=r.get(c);if(l){let u=Date.now()-l.startTime;console.log(`[kraken-code:session-lifecycle] Session ended: ${l.toolCount} tools in ${o(u)}`),r.delete(c)}}}catch(s){console.error("[kraken-code:session-lifecycle] Error in event:",s)}}}}var cn={enforceMinimumTestCases:!0,enforceCoverageThreshold:!0,requireApproval:!1,allowPartialImplementation:!1};function Ee(e,t,n=cn){let r=[],i=[];if(!e.exists){if(t.requiredBeforeImplementation)r.push({type:"missing-test-cases",details:"No test plan exists for this feature",severity:"error"});return{valid:!1,violations:r,recommendations:i}}if(n.enforceMinimumTestCases){let a=e.testCases.length;if(a<t.minTestCases)r.push({type:"missing-test-cases",details:`Test plan has ${a} test cases, minimum required is ${t.minTestCases}`,severity:"error"}),i.push(`Add ${t.minTestCases-a} more test cases`)}if(n.enforceCoverageThreshold&&t.requireCoverageThreshold&&t.coverageThresholdPercent>0){if(e.coverageTarget===void 0)r.push({type:"insufficient-coverage",details:"Coverage target is not specified in test plan",severity:"warning"}),i.push(`Specify coverage target (min ${t.coverageThresholdPercent}%)`);else if(e.coverageTarget<t.coverageThresholdPercent)r.push({type:"insufficient-coverage",details:`Coverage target ${e.coverageTarget}% is below required ${t.coverageThresholdPercent}%`,severity:"error"}),i.push(`Increase coverage target to at least ${t.coverageThresholdPercent}%`)}if(n.requireApproval&&!e.approved)r.push({type:"missing-approval",details:"Test plan has not been approved",severity:"error"}),i.push("Request approval for the test plan");let o=new Set(e.testCases.map((a)=>a.category));if(!o.has("edge-case")&&n.enforceMinimumTestCases)i.push("Consider adding edge case tests for more comprehensive coverage");if(!o.has("error-path")&&n.enforceMinimumTestCases)i.push("Consider adding error path tests for error handling coverage");return{valid:r.filter((a)=>a.severity==="error").length===0,violations:r,recommendations:i}}function qo(e){let t={totalTestCases:e.testCases.length,happyPathCases:0,edgeCaseCases:0,errorPathCases:0,integrationCases:0,coveragePercentage:e.coverageTarget,approvalStatus:e.approved?"approved":"pending"};if(!e.exists)return t.approvalStatus="none",t;for(let n of e.testCases)switch(n.category){case"happy-path":t.happyPathCases++;break;case"edge-case":t.edgeCaseCases++;break;case"error-path":t.errorPathCases++;break;case"integration":t.integrationCases++;break}return t}function Bo(e,t){if(!e.exists)return!t.requiredBeforeImplementation;return Ee(e,t,{enforceMinimumTestCases:!0,enforceCoverageThreshold:t.requireCoverageThreshold,requireApproval:!1,allowPartialImplementation:!1}).valid}var ld={};function dd(e){return![/\.test\.[jt]sx?$/,/\.spec\.[jt]sx?$/,/__tests__/,/\/test\//,/\/tests\//,/node_modules/,/\.md$/,/\.json$/].some((n)=>n.test(e))}function ud(e){return e.replace(/\.(ts|tsx|js|jsx)$/,"").replace(/\.test$|\.spec$/,"")}function pd(e){let t=ld[e];return t?{exists:!0,testCases:Array(t.testCases).fill({}),coverageTarget:t.coverageTarget,approved:t.approved}:{exists:!1,testCases:[],approved:!1}}function Ko(){return{"tool.execute.before":async(e,t)=>{let n=W();if(!n?.enabled)return;let r=e.tool;if(r!=="edit"&&r!=="write")return;let o=t?.filePath;if(!o||!dd(o))return;let a=n.testPlan;if(!a?.requiredBeforeImplementation)return;let s=ud(o),c=pd(s),l={minTestCases:a.minTestCases,requireCoverageThreshold:a.requireCoverageThreshold,coverageThresholdPercent:a.coverageThresholdPercent,requiredBeforeImplementation:a.requiredBeforeImplementation};if(!Bo(c,l)){let p=Ee(c,l).violations.map((m)=>m.details).join("; ");throw Error(`Blitzkrieg Test Plan Violation: ${p}. Please create a test plan for this feature before implementing. Use registerTestPlan('${s}', testCaseCount, coverageTarget, approved) to register a test plan.`)}}}}var md={enforceWriteTestFirst:!0,forbidCodeWithoutTest:!0,allowRefactorWithoutTest:!0,enforceTestFirstSeverity:"block",forbidCodeWithoutTestSeverity:"block"};function ln(e){return[/\.test\.[jt]sx?$/,/\.spec\.[jt]sx?$/,/\/__tests__\/.*\.[jt]sx?$/,/\/test\/[^\/]*\.[jt]sx?$/,/\/tests\/[^\/]*\.[jt]sx?$/].some((n)=>n.test(e))}function dn(e){return![/\.test\.[jt]sx?$/,/\.spec\.[jt]sx?$/,/\/__tests__\//,/\/test\/[^\/]*\.[jt]sx?$/,/\/tests\/[^\/]*\.[jt]sx?$/,/node_modules/,/\/dist\//,/\/build\//].some((n)=>n.test(e))}function un(e,t){if(!t)return!1;let r=[/refactor/i,/extract/i,/restructure/i,/reorganize/i,/rename/i,/move.*function/i].some((o)=>o.test(e)),i=e.length>t.length*0.8&&e.length<t.length*1.5;return r&&i}function Vo(e,t,n=md,r){let i=[],o=[],a=ln(e.filePath),s=dn(e.filePath);if(a)return t.testsWritten.push(e),t.currentCompliance.testWrittenFirst=!0,t.currentCompliance.testFilePaths.push(e.filePath),{decision:"allow",reason:"Test file operations are always allowed",violations:[],suggestions:[]};if(!s)return{decision:"allow",reason:"Non-implementation file operations are not subject to TDD enforcement",violations:[],suggestions:[]};t.filesWritten.push(e),t.currentCompliance.implementationFilePaths.push(e.filePath);let c=un(e.content,r);if(t.currentCompliance.isRefactor=c,c&&n.allowRefactorWithoutTest)return{decision:"allow",reason:"Refactor operations are allowed without new tests when configured",violations:[],suggestions:[]};if(n.enforceWriteTestFirst&&!t.currentCompliance.testWrittenFirst)i.push({type:"test-not-first",file:e.filePath,severity:n.enforceTestFirstSeverity}),o.push("Write tests before implementing the feature (TDD test-first principle)");if(n.forbidCodeWithoutTest&&t.testsWritten.length===0)i.push({type:"code-without-test",file:e.filePath,severity:n.forbidCodeWithoutTestSeverity}),o.push("Write corresponding test files before implementation code");if(i.some((u)=>u.severity==="error"))return{decision:"block",reason:"TDD violation detected. See violation details for more information.",violations:i,suggestions:o};else if(i.length>0)return{decision:"warn",reason:"TDD best practice not followed. Consider the following suggestions.",violations:i,suggestions:o};return{decision:"allow",reason:"Operation is TDD-compliant",violations:[],suggestions:[]}}var pn=new Map;function gd(e){if(!pn.has(e))pn.set(e,{sessionId:e,testsWritten:[],implementationFilesWritten:[]});return pn.get(e)}async function fd(e){return}function Go(){return{"tool.execute.before":async(e,t)=>{let n=W();if(!n?.enabled)return;let{tool:r,sessionID:i}=e;if(r!=="edit"&&r!=="write")return;let o=t,a=o?.filePath;if(!a)return;let s=gd(i);if(ln(a)){s.testsWritten.push(a);return}if(!dn(a))return;let c=n.tddWorkflow,l={enforceWriteTestFirst:c.enforceWriteTestFirst,forbidCodeWithoutTest:c.forbidCodeWithoutTest,allowRefactorWithoutTest:c.allowRefactorWithoutTest,enforceTestFirstSeverity:"block",forbidCodeWithoutTestSeverity:"block"},u=await fd(a),p={filePath:a,operation:r,content:o?.content||"",timestamp:new Date().toISOString()},m=Vo(p,{sessionId:i,startTime:new Date().toISOString(),filesWritten:s.implementationFilesWritten.map((g)=>({filePath:g,operation:"write",content:"",timestamp:new Date().toISOString()})),testsWritten:s.testsWritten.map((g)=>({filePath:g,operation:"write",content:"",timestamp:new Date().toISOString()})),currentCompliance:{testWrittenFirst:s.testsWritten.length>0,codeHasTest:!1,isRefactor:un(p.content,u),violations:[],testFilePaths:s.testsWritten,implementationFilePaths:s.implementationFilesWritten}},l,u);if(s.implementationFilesWritten.push(a),m.decision==="block"){let g=m.violations.map((f)=>`${f.type}: ${f.file}`).join("; ");throw Error(`Blitzkrieg TDD Violation: ${g}. ${m.reason}
2079
+ [Output truncated by kraken-code due to size - ${Math.round(u/1024)}KB exceeded 500KB limit]`}}}catch(l){console.error("[kraken-code:tool-throttle] Error in tool.execute.after:",l)}}}}function an(e,t){let n={enabled:t?.enabled??!0,maxSessionDurationMinutes:t?.maxSessionDurationMinutes??45,maxToolsPerSession:t?.maxToolsPerSession??100,warningThresholdTools:t?.warningThresholdTools??0.7,warningThresholdMinutes:t?.warningThresholdMinutes??0.8};if(!n.enabled)return{};let r=new Map,i=(a)=>{if(!r.has(a))r.set(a,{startTime:Date.now(),toolCount:0,warningsIssued:new Set});return r.get(a)},o=(a)=>{let s=Math.floor(a/60000),c=Math.floor(a%60000/1000);return`${s}m ${c}s`};return{"tool.execute.before":async(a)=>{try{let s=a.sessionID;if(!s)return;let c=i(s);c.toolCount++;let l=Date.now()-c.startTime,u=l/60000,p=Math.floor(n.maxToolsPerSession*n.warningThresholdTools);if(c.toolCount===p){if(!c.warningsIssued.has("tools-70"))c.warningsIssued.add("tools-70"),console.warn(`[kraken-code:session-lifecycle] ⚠️ Session approaching tool limit (${c.toolCount}/${n.maxToolsPerSession})`),console.warn("[kraken-code:session-lifecycle] Consider starting a new session soon to prevent memory issues")}if(c.toolCount===n.maxToolsPerSession)console.error(`[kraken-code:session-lifecycle] \uD83D\uDD34 Session has reached tool limit (${n.maxToolsPerSession})`),console.error("[kraken-code:session-lifecycle] Memory leak risk is HIGH. Start a new session immediately.");let g=n.maxSessionDurationMinutes*n.warningThresholdMinutes;if(u>=g&&u<n.maxSessionDurationMinutes){if(!c.warningsIssued.has("duration-80")){c.warningsIssued.add("duration-80");let m=Math.round(n.maxSessionDurationMinutes-u);console.warn(`[kraken-code:session-lifecycle] ⏰ Session running long (${Math.round(u)}m)`),console.warn(`[kraken-code:session-lifecycle] Recommend restart within ${m} minutes`)}}if(u>=n.maxSessionDurationMinutes)console.error(`[kraken-code:session-lifecycle] ⏰ Session exceeded max duration (${n.maxSessionDurationMinutes}m)`),console.error(`[kraken-code:session-lifecycle] Current: ${Math.round(u)}m - Memory leak risk CRITICAL`);if(c.toolCount%25===0)console.log(`[kraken-code:session-lifecycle] Session stats: ${c.toolCount} tools, ${o(l)} elapsed`)}catch(s){console.error("[kraken-code:session-lifecycle] Error in tool.execute.before:",s)}},event:async(a)=>{try{let s=a,c=s?.sessionID;if(s?.type==="session.start"&&c)i(c),console.log(`[kraken-code:session-lifecycle] Session started - Limits: ${n.maxToolsPerSession} tools, ${n.maxSessionDurationMinutes}min`);if(s?.type==="session.end"&&c){let l=r.get(c);if(l){let u=Date.now()-l.startTime;console.log(`[kraken-code:session-lifecycle] Session ended: ${l.toolCount} tools in ${o(u)}`),r.delete(c)}}}catch(s){console.error("[kraken-code:session-lifecycle] Error in event:",s)}}}}var cn={enforceMinimumTestCases:!0,enforceCoverageThreshold:!0,requireApproval:!1,allowPartialImplementation:!1};function Ee(e,t,n=cn){let r=[],i=[];if(!e.exists){if(t.requiredBeforeImplementation)r.push({type:"missing-test-cases",details:"No test plan exists for this feature",severity:"error"});return{valid:!1,violations:r,recommendations:i}}if(n.enforceMinimumTestCases){let a=e.testCases.length;if(a<t.minTestCases)r.push({type:"missing-test-cases",details:`Test plan has ${a} test cases, minimum required is ${t.minTestCases}`,severity:"error"}),i.push(`Add ${t.minTestCases-a} more test cases`)}if(n.enforceCoverageThreshold&&t.requireCoverageThreshold&&t.coverageThresholdPercent>0){if(e.coverageTarget===void 0)r.push({type:"insufficient-coverage",details:"Coverage target is not specified in test plan",severity:"warning"}),i.push(`Specify coverage target (min ${t.coverageThresholdPercent}%)`);else if(e.coverageTarget<t.coverageThresholdPercent)r.push({type:"insufficient-coverage",details:`Coverage target ${e.coverageTarget}% is below required ${t.coverageThresholdPercent}%`,severity:"error"}),i.push(`Increase coverage target to at least ${t.coverageThresholdPercent}%`)}if(n.requireApproval&&!e.approved)r.push({type:"missing-approval",details:"Test plan has not been approved",severity:"error"}),i.push("Request approval for the test plan");let o=new Set(e.testCases.map((a)=>a.category));if(!o.has("edge-case")&&n.enforceMinimumTestCases)i.push("Consider adding edge case tests for more comprehensive coverage");if(!o.has("error-path")&&n.enforceMinimumTestCases)i.push("Consider adding error path tests for error handling coverage");return{valid:r.filter((a)=>a.severity==="error").length===0,violations:r,recommendations:i}}function Jo(e){let t={totalTestCases:e.testCases.length,happyPathCases:0,edgeCaseCases:0,errorPathCases:0,integrationCases:0,coveragePercentage:e.coverageTarget,approvalStatus:e.approved?"approved":"pending"};if(!e.exists)return t.approvalStatus="none",t;for(let n of e.testCases)switch(n.category){case"happy-path":t.happyPathCases++;break;case"edge-case":t.edgeCaseCases++;break;case"error-path":t.errorPathCases++;break;case"integration":t.integrationCases++;break}return t}function Ko(e,t){if(!e.exists)return!t.requiredBeforeImplementation;return Ee(e,t,{enforceMinimumTestCases:!0,enforceCoverageThreshold:t.requireCoverageThreshold,requireApproval:!1,allowPartialImplementation:!1}).valid}var ad={};function cd(e){return![/\.test\.[jt]sx?$/,/\.spec\.[jt]sx?$/,/__tests__/,/\/test\//,/\/tests\//,/node_modules/,/\.md$/,/\.json$/].some((n)=>n.test(e))}function ld(e){return e.replace(/\.(ts|tsx|js|jsx)$/,"").replace(/\.test$|\.spec$/,"")}function dd(e){let t=ad[e];return t?{exists:!0,testCases:Array(t.testCases).fill({}),coverageTarget:t.coverageTarget,approved:t.approved}:{exists:!1,testCases:[],approved:!1}}function qo(){return{"tool.execute.before":async(e,t)=>{let n=H();if(!n?.enabled)return;let r=e.tool;if(r!=="edit"&&r!=="write")return;let o=t?.filePath;if(!o||!cd(o))return;let a=n.testPlan;if(!a?.requiredBeforeImplementation)return;let s=ld(o),c=dd(s),l={minTestCases:a.minTestCases,requireCoverageThreshold:a.requireCoverageThreshold,coverageThresholdPercent:a.coverageThresholdPercent,requiredBeforeImplementation:a.requiredBeforeImplementation};if(!Ko(c,l)){let p=Ee(c,l).violations.map((g)=>g.details).join("; ");throw Error(`Blitzkrieg Test Plan Violation: ${p}. Please create a test plan for this feature before implementing. Use registerTestPlan('${s}', testCaseCount, coverageTarget, approved) to register a test plan.`)}}}}var ud={enforceWriteTestFirst:!0,forbidCodeWithoutTest:!0,allowRefactorWithoutTest:!0,enforceTestFirstSeverity:"block",forbidCodeWithoutTestSeverity:"block"};function ln(e){return[/\.test\.[jt]sx?$/,/\.spec\.[jt]sx?$/,/\/__tests__\/.*\.[jt]sx?$/,/\/test\/[^\/]*\.[jt]sx?$/,/\/tests\/[^\/]*\.[jt]sx?$/].some((n)=>n.test(e))}function dn(e){return![/\.test\.[jt]sx?$/,/\.spec\.[jt]sx?$/,/\/__tests__\//,/\/test\/[^\/]*\.[jt]sx?$/,/\/tests\/[^\/]*\.[jt]sx?$/,/node_modules/,/\/dist\//,/\/build\//].some((n)=>n.test(e))}function un(e,t){if(!t)return!1;let r=[/refactor/i,/extract/i,/restructure/i,/reorganize/i,/rename/i,/move.*function/i].some((o)=>o.test(e)),i=e.length>t.length*0.8&&e.length<t.length*1.5;return r&&i}function Vo(e,t,n=ud,r){let i=[],o=[],a=ln(e.filePath),s=dn(e.filePath);if(a)return t.testsWritten.push(e),t.currentCompliance.testWrittenFirst=!0,t.currentCompliance.testFilePaths.push(e.filePath),{decision:"allow",reason:"Test file operations are always allowed",violations:[],suggestions:[]};if(!s)return{decision:"allow",reason:"Non-implementation file operations are not subject to TDD enforcement",violations:[],suggestions:[]};t.filesWritten.push(e),t.currentCompliance.implementationFilePaths.push(e.filePath);let c=un(e.content,r);if(t.currentCompliance.isRefactor=c,c&&n.allowRefactorWithoutTest)return{decision:"allow",reason:"Refactor operations are allowed without new tests when configured",violations:[],suggestions:[]};if(n.enforceWriteTestFirst&&!t.currentCompliance.testWrittenFirst)i.push({type:"test-not-first",file:e.filePath,severity:n.enforceTestFirstSeverity}),o.push("Write tests before implementing the feature (TDD test-first principle)");if(n.forbidCodeWithoutTest&&t.testsWritten.length===0)i.push({type:"code-without-test",file:e.filePath,severity:n.forbidCodeWithoutTestSeverity}),o.push("Write corresponding test files before implementation code");if(i.some((u)=>u.severity==="error"))return{decision:"block",reason:"TDD violation detected. See violation details for more information.",violations:i,suggestions:o};else if(i.length>0)return{decision:"warn",reason:"TDD best practice not followed. Consider the following suggestions.",violations:i,suggestions:o};return{decision:"allow",reason:"Operation is TDD-compliant",violations:[],suggestions:[]}}var pn=new Map;function pd(e){if(!pn.has(e))pn.set(e,{sessionId:e,testsWritten:[],implementationFilesWritten:[]});return pn.get(e)}async function gd(e){return}function Go(){return{"tool.execute.before":async(e,t)=>{let n=H();if(!n?.enabled)return;let{tool:r,sessionID:i}=e;if(r!=="edit"&&r!=="write")return;let o=t,a=o?.filePath;if(!a)return;let s=pd(i);if(ln(a)){s.testsWritten.push(a);return}if(!dn(a))return;let c=n.tddWorkflow,l={enforceWriteTestFirst:c.enforceWriteTestFirst,forbidCodeWithoutTest:c.forbidCodeWithoutTest,allowRefactorWithoutTest:c.allowRefactorWithoutTest,enforceTestFirstSeverity:"block",forbidCodeWithoutTestSeverity:"block"},u=await gd(a),p={filePath:a,operation:r,content:o?.content||"",timestamp:new Date().toISOString()},g=Vo(p,{sessionId:i,startTime:new Date().toISOString(),filesWritten:s.implementationFilesWritten.map((m)=>({filePath:m,operation:"write",content:"",timestamp:new Date().toISOString()})),testsWritten:s.testsWritten.map((m)=>({filePath:m,operation:"write",content:"",timestamp:new Date().toISOString()})),currentCompliance:{testWrittenFirst:s.testsWritten.length>0,codeHasTest:!1,isRefactor:un(p.content,u),violations:[],testFilePaths:s.testsWritten,implementationFilePaths:s.implementationFilesWritten}},l,u);if(s.implementationFilesWritten.push(a),g.decision==="block"){let m=g.violations.map((f)=>`${f.type}: ${f.file}`).join("; ");throw Error(`Blitzkrieg TDD Violation: ${m}. ${g.reason}
1623
2080
 
1624
2081
  Suggestions:
1625
- ${m.suggestions.map((f)=>` - ${f}`).join(`
1626
- `)}`)}if(m.decision==="warn"&&m.violations.length>0)console.warn(`Blitzkrieg TDD Warning: ${m.reason}`)},"tool.execute.after":async(e)=>{let t=e.sessionID}}}var zo={strictMode:!1,ignoreWarnings:!1,coverageThreshold:80,minAssertions:1,minEdgeCases:1};class Yo{parse(e,t){let n=this.parseErrors(e),r=this.countWarnings(e);return{success:t===0,exitCode:t,output:e,errors:n,warnings:r}}parseErrors(e){let t=[],n=/(.+?):(\d+):(\d+)\s*[-–]\s*(error|warning)\s*(TS\d+|ESLint)\s*:\s*(.+)/g,r;while((r=n.exec(e))!==null)t.push({file:r[1],line:parseInt(r[2],10),column:parseInt(r[3],10),message:r[6],code:r[5],severity:r[4]==="error"?"error":"warning"});let i=/File "(.+?)", line (\d+), in .+?(.+)/g;while((r=i.exec(e))!==null)if(!t.some((a)=>a.file===r[1]&&a.line===parseInt(r[2],10)))t.push({file:r[1],line:parseInt(r[2],10),message:r[3].trim(),code:"PythonError",severity:"error"});let o=/(error|Error|ERROR)[:\s]+(.+)/g;while((r=o.exec(e))!==null){let a=r[2].substring(0,50);if(!t.some((s)=>s.message.includes(a)))t.push({message:r[2].trim(),code:"GenericError",severity:"error"})}return t}countWarnings(e){let t=[/(warning|Warning|WARNING)[:\s]+/g,/warn[:\s]+/gi],n=0;for(let r of t){let i=e.match(r);if(i)n+=i.length}return n}}class Xo{parse(e){let t=this.countAssertions(e),n=this.identifyEdgeCases(e);return{testPath:this.extractTestPath(e),assertions:t,edgeCasesCovered:n.length,executionLog:e}}countAssertions(e){let t=[/\b(assert|expect|should|it\.only|test\.only)\s*\(/gi,/passes|failures/gi],n=0;for(let i of t){let o=e.match(i);if(o)n+=o.length}let r=e.match(/(\d+)\s+(?:passes|fail|tests?)/i);if(r){let i=parseInt(r[1],10);if(i>n)n=i}return n}identifyEdgeCases(e){let t=[/null/i,/undefined/i,/empty/gi,/zero/gi,/negative/i,/overflow/i,/underflow/i,/async|await/gi,/error|exception/gi,/timeout/i,/boundary/i,/edge/gi],n=[];for(let r of t)if(r.test(e)){let i=r.source.replace(/^\^?|\\b|\\/gi,"").substring(0,30);if(!n.includes(i))n.push(i)}return n}extractTestPath(e){let t=[/Running\s+(.+?test.+\.(?:ts|js|py))/i,/Test\s+Files.*[\n\r]+.*(.+\.(?:test|spec)\.[jt]sx?)/i];for(let n of t){let r=e.match(n);if(r)return r[1]}return""}}class Qo{parse(e,t){let n=this.parseCoveragePercentages(e);return{statementCoverage:n.statement,branchCoverage:n.branch,functionCoverage:n.function,lineCoverage:n.line,coverageOutput:e,meetsThreshold:this.checkThreshold(n,t)}}parseCoveragePercentages(e){let t={statement:0,branch:0,function:0,line:0},n=[[/Statements?\s*[:\s]+(\d+(?:\.\d+)?)%/i,"statement"],[/Branches?\s*[:\s]+(\d+(?:\.\d+)?)%/i,"branch"],[/Functions?\s*[:\s]+(\d+(?:\.\d+)?)%/i,"function"],[/Lines?\s*[:\s]+(\d+(?:\.\d+)?)%/i,"line"],[/coverage:\s+(\d+(?:\.\d+)?)%/i,"statement"]];for(let[r,i]of n){let o=e.match(r);if(o)t[i]=parseFloat(o[1])}return t}checkThreshold(e,t){let r=[e.statement,e.branch,e.function,e.line].filter((o)=>o>0);if(r.length===0)return!1;return r.reduce((o,a)=>o+a,0)/r.length>=t}}class hd{buildParser=new Yo;testParser=new Xo;coverageParser=new Qo;verify(e,t,n,r,i,o=zo){let a=this.collectEvidence(e,t,n,r,o.coverageThreshold),s=[],c=[];this.checkBuildEvidence(a.buildEvidence,s,c),this.checkTestEvidence(a.testEvidence,i,s,c,o),this.checkCoverageEvidence(a.coverageEvidence,i,s,c,o);let l=this.generateSummary(a,s,c);return{compliant:!s.some((m)=>m.severity==="error")&&!l.failedTests,evidence:a,violations:s,warnings:c,summary:l}}collectEvidence(e,t,n,r,i){let o=this.buildParser.parse(e,t),a=this.testParser.parse(n),s=this.coverageParser.parse(r,i);return{buildEvidence:o,testEvidence:a,coverageEvidence:s,timestamp:new Date().toISOString()}}checkBuildEvidence(e,t,n){if(!e.success)t.push({type:"build-failed",message:`Build failed with exit code ${e.exitCode}`,severity:"error",details:{exitCode:e.exitCode,errorCount:e.errors.length}});else if(e.warnings>0)n.push({type:"build-warnings",message:`Build completed with ${e.warnings} warning(s)`,suggestion:"Review warnings and fix if necessary"})}checkTestEvidence(e,t,n,r,i){if(t.requireTestExecutionEvidence&&e.executionLog===void 0)n.push({type:"no-test-execution",message:"No test execution evidence found",severity:"error"});if(t.requireAssertionEvidence&&e.assertions<i.minAssertions)n.push({type:"no-assertions",message:`Insufficient assertions: found ${e.assertions}, minimum required is ${i.minAssertions}`,severity:"error",details:{actual:e.assertions,required:i.minAssertions}});if(t.requireEdgeCaseEvidence&&e.edgeCasesCovered<i.minEdgeCases)n.push({type:"no-edge-cases",message:`No edge cases covered: minimum required is ${i.minEdgeCases}`,severity:"error",details:{actual:e.edgeCasesCovered,required:i.minEdgeCases}})}checkCoverageEvidence(e,t,n,r,i){if(!e.coverageOutput){r.push({type:"missing-coverage-data",message:"No coverage data found",suggestion:"Run tests with coverage to get coverage metrics"});return}if(t.requireEdgeCaseEvidence&&e.statementCoverage<i.coverageThreshold)if(i.strictMode)n.push({type:"insufficient-coverage",message:`Coverage ${e.statementCoverage.toFixed(1)}% below threshold ${i.coverageThreshold}%`,severity:"error",details:{statement:e.statementCoverage,branch:e.branchCoverage,function:e.functionCoverage,line:e.lineCoverage,threshold:i.coverageThreshold}});else r.push({type:"low-coverage",message:`Coverage ${e.statementCoverage.toFixed(1)}% is below optimal threshold ${i.coverageThreshold}%`,suggestion:"Consider adding more tests to improve coverage"})}generateSummary(e,t,n){let r=e.testEvidence.executionLog||"",i=r.match(/(\d+)\s+(?:passes?|passed|success)/i),o=r.match(/(\d+)\s+(?:failures?|failed)/i),a=r.match(/(\d+)\s+(?:skipped|pending)/i),s=(i?parseInt(i[1],10):0)+(o?parseInt(o[1],10):0)+(a?parseInt(a[1],10):0),c=i?parseInt(i[1],10):0,l=o?parseInt(o[1],10):0,u=a?parseInt(a[1],10):0,p=100;if(l>0)p-=l/s*100;if(e.coverageEvidence.statementCoverage>0)p=(p+e.coverageEvidence.statementCoverage)/2;return{totalTests:s,passedTests:c,failedTests:l,skippedTests:u,totalAssertions:e.testEvidence.assertions,passedAssertions:e.testEvidence.assertions,edgeCasesCovered:e.testEvidence.edgeCasesCovered,overallScore:Math.round(p*100)/100}}verifyWithTestPlan(e,t,n,r,i,o,a=zo){let s=this.verify(e,t,n,r,o.evidence,a),c=qo(i),l=Ee(i,{minTestCases:o.testPlan.minTestCases,requireCoverageThreshold:o.testPlan.requireCoverageThreshold,coverageThresholdPercent:o.testPlan.coverageThresholdPercent,requiredBeforeImplementation:o.testPlan.requiredBeforeImplementation},cn);if(!l.valid&&a.strictMode)for(let p of l.violations)s.violations.push({type:"missing-evidence",message:`Test Plan: ${p.details}`,severity:p.severity});s.summary={...s.summary,totalTests:c.totalTestCases+s.summary.totalTests};let u=s.violations.some((p)=>p.severity==="error");return s.compliant=!u&&s.summary.failedTests===0,s}}function mn(e=[]){return{testFilePaths:e,timestamp:new Date().toISOString()}}var Re={};function yd(e,t){if(!Re[e])Re[e]={testFilePaths:[]};let n=Re[e].evidence||mn();Re[e].evidence={...n,...t,testFilePaths:[...n.testFilePaths,...t.testFilePaths||[]]}}function Zo(e){return e.sessionID||"default"}function bd(e){return["todowrite","task","complete","done"].some((n)=>e.toLowerCase().includes(n))}function es(){return{"tool.execute.before":async(e,t)=>{let n=W();if(!n?.enabled)return;let r=e.tool;if(!bd(r))return;let i=n.evidence;if(!i.requireTestExecutionEvidence&&!i.requireAssertionEvidence&&!i.requireEdgeCaseEvidence)return;let o=Zo(e),a=Re[o];if(!a)throw Error(`Blitzkrieg Evidence Verification: No evidence registered for task "${o}". Please register test files and evidence before marking task complete.`);let s=a.evidence||mn();console.log(`[blitzkrieg-evidence-verifier] Evidence verification is not fully implemented. Skipping verification for task ${o}.`)},"tool.execute.after":async(e,t)=>{if(!W()?.enabled)return;if(e.tool==="bash"){let o=t?.command;if(o&&xd(o)){let a=Zo(e),s=t.output;if(s)yd(a,{testExecutionEvidence:s})}}}}}function xd(e){return[/npm\s+test/i,/yarn\s+test/i,/pnpm\s+test/i,/pytest/i,/jest/i,/mocha/i,/vitest/i,/karma/i,/cypress/i,/playwright/i,/test\s+--?/].some((n)=>n.test(e))}var ts={requireTestStep:!0,requireVerificationStep:!0,maxImplementationStepComplexity:3,enforceComplexitySeverity:"block",enforceStructureSeverity:"block"};function ns(e,t,n,r=1,i=[]){return{id:e,description:t,type:n,complexity:Math.max(1,Math.min(10,r)),dependencies:i}}function rs(e){let t=e.toLowerCase(),n=["verify implementation","validate results","review code","approve","confirm","verify","validate","check","review"],r=["plan architecture","design solution","plan","design","architect","outline"],i=["test","spec","assert","mock","stub"];if(n.some((o)=>t.includes(o)))return"verification";if(r.some((o)=>t.includes(o)))return"planning";if(i.some((o)=>t.includes(o)))return"test";return"implementation"}function is(e){let t=e.toLowerCase(),n=1,r={simple:1,basic:1,add:2,create:2,implement:2,modify:2,update:2,refactor:3,restructure:3,reorganize:3,integrate:4,complex:4,difficult:5,"multi-file":4,"cross-module":5,very:3,extremely:4};for(let[o,a]of Object.entries(r))if(t.includes(o))n=Math.max(n,a);let i=e.split(/\s+/).length;if(i>10)n+=1;if(i>20)n+=1;if(i>30)n+=1;return Math.min(10,n)}function gn(e){switch(e){case"block":return"error";case"warn":return"warning";default:return"warning"}}function fn(e,t=ts){let n=[],r=e.some((s)=>s.type==="test"),i=e.some((s)=>s.type==="verification"),o=e.filter((s)=>s.type==="implementation");if(t.requireTestStep&&o.length>0&&!r)n.push({type:"missing-test-step",taskId:"plan",severity:gn(t.enforceStructureSeverity),message:"Plan contains implementation steps but no test step"});if(t.requireVerificationStep&&o.length>0&&!i)n.push({type:"missing-verification",taskId:"plan",severity:gn(t.enforceStructureSeverity),message:"Plan contains implementation steps but no verification step"});let a=!0;for(let s of o)if(s.complexity>t.maxImplementationStepComplexity)n.push({type:"excessive-complexity",taskId:s.id,severity:gn(t.enforceComplexitySeverity),message:`Step "${s.description}" has complexity ${s.complexity}, exceeding maximum of ${t.maxImplementationStepComplexity}`}),a=!1;return{hasTestStep:r,hasVerificationStep:i,complexityValid:a,violations:n}}function os(e,t=ts){let n=fn(e,t),r=[];if(!n.hasTestStep&&t.requireTestStep)r.push("Add test steps to verify the implementation works correctly");if(!n.hasVerificationStep&&t.requireVerificationStep)r.push("Add a verification step to ensure quality before completion");for(let a of n.violations)if(a.type==="excessive-complexity")r.push(`Break down complex step "${a.taskId}" into smaller, more manageable tasks`);let i=vd(e),o=wd(i);return{compliant:n.violations.filter((a)=>a.severity==="error").length===0,steps:e,violations:n.violations,suggestions:r,complexityScore:o}}function vd(e){let t={totalSteps:e.length,implementationSteps:0,testSteps:0,verificationSteps:0,planningSteps:0,averageComplexity:0,maxComplexity:0};if(e.length===0)return t;for(let r of e){switch(r.type){case"implementation":t.implementationSteps++;break;case"test":t.testSteps++;break;case"verification":t.verificationSteps++;break;case"planning":t.planningSteps++;break}t.maxComplexity=Math.max(t.maxComplexity,r.complexity)}let n=e.reduce((r,i)=>r+i.complexity,0);return t.averageComplexity=n/e.length,t}function wd(e){let t=100;if(e.averageComplexity>5)t-=(e.averageComplexity-5)*10;if(e.maxComplexity>7)t-=(e.maxComplexity-7)*5;let n=e.testSteps>0,r=e.verificationSteps>0,i=e.planningSteps>0;if(n)t+=5;if(r)t+=5;if(i)t+=5;return Math.max(0,Math.min(100,t))}var ss={};function Sd(e){delete ss[e]}function kd(e,t){if(e==="todowrite")return!0;if(e==="task")return!0;if(t?.prompt?.includes("plan"))return!0;return!1}function Ad(e){let t=e?.todos;if(!t||!Array.isArray(t))return[];return t.map((n)=>n.content||"")}function as(){return{"tool.execute.before":async(e,t)=>{let n=W();if(!n?.enabled)return;let{tool:r,sessionID:i}=e;if(!kd(r,t))return;let o=n.plannerConstraints;if(!o.requireTestStep&&!o.requireVerificationStep)return;let s=Ad(t);if(s.length===0)return;let c=s.map((m,g)=>ns(`${i}-step-${g}`,m,rs(m),is(m)));ss[i]={steps:c};let l=fn(c,{requireTestStep:o.requireTestStep,requireVerificationStep:o.requireVerificationStep,maxImplementationStepComplexity:o.maxImplementationStepComplexity,enforceComplexitySeverity:"block",enforceStructureSeverity:"block"}),u=l.violations.filter((m)=>m.severity==="error");if(u.length>0){let m=os(c,{requireTestStep:o.requireTestStep,requireVerificationStep:o.requireVerificationStep,maxImplementationStepComplexity:o.maxImplementationStepComplexity,enforceComplexitySeverity:"block",enforceStructureSeverity:"block"}),g=u.map((b)=>`- [${b.severity}] ${b.type}: ${b.message}`).join(`
1627
- `),f=m.suggestions.map((b)=>`- ${b}`).join(`
2082
+ ${g.suggestions.map((f)=>` - ${f}`).join(`
2083
+ `)}`)}if(g.decision==="warn"&&g.violations.length>0)console.warn(`Blitzkrieg TDD Warning: ${g.reason}`)},"tool.execute.after":async(e)=>{let t=e.sessionID}}}var zo={strictMode:!1,ignoreWarnings:!1,coverageThreshold:80,minAssertions:1,minEdgeCases:1};class Yo{parse(e,t){let n=this.parseErrors(e),r=this.countWarnings(e);return{success:t===0,exitCode:t,output:e,errors:n,warnings:r}}parseErrors(e){let t=[],n=/(.+?):(\d+):(\d+)\s*[-–]\s*(error|warning)\s*(TS\d+|ESLint)\s*:\s*(.+)/g,r;while((r=n.exec(e))!==null)t.push({file:r[1],line:parseInt(r[2],10),column:parseInt(r[3],10),message:r[6],code:r[5],severity:r[4]==="error"?"error":"warning"});let i=/File "(.+?)", line (\d+), in .+?(.+)/g;while((r=i.exec(e))!==null)if(!t.some((a)=>a.file===r[1]&&a.line===parseInt(r[2],10)))t.push({file:r[1],line:parseInt(r[2],10),message:r[3].trim(),code:"PythonError",severity:"error"});let o=/(error|Error|ERROR)[:\s]+(.+)/g;while((r=o.exec(e))!==null){let a=r[2].substring(0,50);if(!t.some((s)=>s.message.includes(a)))t.push({message:r[2].trim(),code:"GenericError",severity:"error"})}return t}countWarnings(e){let t=[/(warning|Warning|WARNING)[:\s]+/g,/warn[:\s]+/gi],n=0;for(let r of t){let i=e.match(r);if(i)n+=i.length}return n}}class Xo{parse(e){let t=this.countAssertions(e),n=this.identifyEdgeCases(e);return{testPath:this.extractTestPath(e),assertions:t,edgeCasesCovered:n.length,executionLog:e}}countAssertions(e){let t=[/\b(assert|expect|should|it\.only|test\.only)\s*\(/gi,/passes|failures/gi],n=0;for(let i of t){let o=e.match(i);if(o)n+=o.length}let r=e.match(/(\d+)\s+(?:passes|fail|tests?)/i);if(r){let i=parseInt(r[1],10);if(i>n)n=i}return n}identifyEdgeCases(e){let t=[/null/i,/undefined/i,/empty/gi,/zero/gi,/negative/i,/overflow/i,/underflow/i,/async|await/gi,/error|exception/gi,/timeout/i,/boundary/i,/edge/gi],n=[];for(let r of t)if(r.test(e)){let i=r.source.replace(/^\^?|\\b|\\/gi,"").substring(0,30);if(!n.includes(i))n.push(i)}return n}extractTestPath(e){let t=[/Running\s+(.+?test.+\.(?:ts|js|py))/i,/Test\s+Files.*[\n\r]+.*(.+\.(?:test|spec)\.[jt]sx?)/i];for(let n of t){let r=e.match(n);if(r)return r[1]}return""}}class Qo{parse(e,t){let n=this.parseCoveragePercentages(e);return{statementCoverage:n.statement,branchCoverage:n.branch,functionCoverage:n.function,lineCoverage:n.line,coverageOutput:e,meetsThreshold:this.checkThreshold(n,t)}}parseCoveragePercentages(e){let t={statement:0,branch:0,function:0,line:0},n=[[/Statements?\s*[:\s]+(\d+(?:\.\d+)?)%/i,"statement"],[/Branches?\s*[:\s]+(\d+(?:\.\d+)?)%/i,"branch"],[/Functions?\s*[:\s]+(\d+(?:\.\d+)?)%/i,"function"],[/Lines?\s*[:\s]+(\d+(?:\.\d+)?)%/i,"line"],[/coverage:\s+(\d+(?:\.\d+)?)%/i,"statement"]];for(let[r,i]of n){let o=e.match(r);if(o)t[i]=parseFloat(o[1])}return t}checkThreshold(e,t){let r=[e.statement,e.branch,e.function,e.line].filter((o)=>o>0);if(r.length===0)return!1;return r.reduce((o,a)=>o+a,0)/r.length>=t}}class md{buildParser=new Yo;testParser=new Xo;coverageParser=new Qo;verify(e,t,n,r,i,o=zo){let a=this.collectEvidence(e,t,n,r,o.coverageThreshold),s=[],c=[];this.checkBuildEvidence(a.buildEvidence,s,c),this.checkTestEvidence(a.testEvidence,i,s,c,o),this.checkCoverageEvidence(a.coverageEvidence,i,s,c,o);let l=this.generateSummary(a,s,c);return{compliant:!s.some((g)=>g.severity==="error")&&!l.failedTests,evidence:a,violations:s,warnings:c,summary:l}}collectEvidence(e,t,n,r,i){let o=this.buildParser.parse(e,t),a=this.testParser.parse(n),s=this.coverageParser.parse(r,i);return{buildEvidence:o,testEvidence:a,coverageEvidence:s,timestamp:new Date().toISOString()}}checkBuildEvidence(e,t,n){if(!e.success)t.push({type:"build-failed",message:`Build failed with exit code ${e.exitCode}`,severity:"error",details:{exitCode:e.exitCode,errorCount:e.errors.length}});else if(e.warnings>0)n.push({type:"build-warnings",message:`Build completed with ${e.warnings} warning(s)`,suggestion:"Review warnings and fix if necessary"})}checkTestEvidence(e,t,n,r,i){if(t.requireTestExecutionEvidence&&e.executionLog===void 0)n.push({type:"no-test-execution",message:"No test execution evidence found",severity:"error"});if(t.requireAssertionEvidence&&e.assertions<i.minAssertions)n.push({type:"no-assertions",message:`Insufficient assertions: found ${e.assertions}, minimum required is ${i.minAssertions}`,severity:"error",details:{actual:e.assertions,required:i.minAssertions}});if(t.requireEdgeCaseEvidence&&e.edgeCasesCovered<i.minEdgeCases)n.push({type:"no-edge-cases",message:`No edge cases covered: minimum required is ${i.minEdgeCases}`,severity:"error",details:{actual:e.edgeCasesCovered,required:i.minEdgeCases}})}checkCoverageEvidence(e,t,n,r,i){if(!e.coverageOutput){r.push({type:"missing-coverage-data",message:"No coverage data found",suggestion:"Run tests with coverage to get coverage metrics"});return}if(t.requireEdgeCaseEvidence&&e.statementCoverage<i.coverageThreshold)if(i.strictMode)n.push({type:"insufficient-coverage",message:`Coverage ${e.statementCoverage.toFixed(1)}% below threshold ${i.coverageThreshold}%`,severity:"error",details:{statement:e.statementCoverage,branch:e.branchCoverage,function:e.functionCoverage,line:e.lineCoverage,threshold:i.coverageThreshold}});else r.push({type:"low-coverage",message:`Coverage ${e.statementCoverage.toFixed(1)}% is below optimal threshold ${i.coverageThreshold}%`,suggestion:"Consider adding more tests to improve coverage"})}generateSummary(e,t,n){let r=e.testEvidence.executionLog||"",i=r.match(/(\d+)\s+(?:passes?|passed|success)/i),o=r.match(/(\d+)\s+(?:failures?|failed)/i),a=r.match(/(\d+)\s+(?:skipped|pending)/i),s=(i?parseInt(i[1],10):0)+(o?parseInt(o[1],10):0)+(a?parseInt(a[1],10):0),c=i?parseInt(i[1],10):0,l=o?parseInt(o[1],10):0,u=a?parseInt(a[1],10):0,p=100;if(l>0)p-=l/s*100;if(e.coverageEvidence.statementCoverage>0)p=(p+e.coverageEvidence.statementCoverage)/2;return{totalTests:s,passedTests:c,failedTests:l,skippedTests:u,totalAssertions:e.testEvidence.assertions,passedAssertions:e.testEvidence.assertions,edgeCasesCovered:e.testEvidence.edgeCasesCovered,overallScore:Math.round(p*100)/100}}verifyWithTestPlan(e,t,n,r,i,o,a=zo){let s=this.verify(e,t,n,r,o.evidence,a),c=Jo(i),l=Ee(i,{minTestCases:o.testPlan.minTestCases,requireCoverageThreshold:o.testPlan.requireCoverageThreshold,coverageThresholdPercent:o.testPlan.coverageThresholdPercent,requiredBeforeImplementation:o.testPlan.requiredBeforeImplementation},cn);if(!l.valid&&a.strictMode)for(let p of l.violations)s.violations.push({type:"missing-evidence",message:`Test Plan: ${p.details}`,severity:p.severity});s.summary={...s.summary,totalTests:c.totalTestCases+s.summary.totalTests};let u=s.violations.some((p)=>p.severity==="error");return s.compliant=!u&&s.summary.failedTests===0,s}}function gn(e=[]){return{testFilePaths:e,timestamp:new Date().toISOString()}}var Re={};function fd(e,t){if(!Re[e])Re[e]={testFilePaths:[]};let n=Re[e].evidence||gn();Re[e].evidence={...n,...t,testFilePaths:[...n.testFilePaths,...t.testFilePaths||[]]}}function Zo(e){return e.sessionID||"default"}function hd(e){return["todowrite","task","complete","done"].some((n)=>e.toLowerCase().includes(n))}function es(){return{"tool.execute.before":async(e,t)=>{let n=H();if(!n?.enabled)return;let r=e.tool;if(!hd(r))return;let i=n.evidence;if(!i.requireTestExecutionEvidence&&!i.requireAssertionEvidence&&!i.requireEdgeCaseEvidence)return;let o=Zo(e),a=Re[o];if(!a)throw Error(`Blitzkrieg Evidence Verification: No evidence registered for task "${o}". Please register test files and evidence before marking task complete.`);let s=a.evidence||gn();console.log(`[blitzkrieg-evidence-verifier] Evidence verification is not fully implemented. Skipping verification for task ${o}.`)},"tool.execute.after":async(e,t)=>{if(!H()?.enabled)return;if(e.tool==="bash"){let o=t?.command;if(o&&yd(o)){let a=Zo(e),s=t.output;if(s)fd(a,{testExecutionEvidence:s})}}}}}function yd(e){return[/npm\s+test/i,/yarn\s+test/i,/pnpm\s+test/i,/pytest/i,/jest/i,/mocha/i,/vitest/i,/karma/i,/cypress/i,/playwright/i,/test\s+--?/].some((n)=>n.test(e))}var ts={requireTestStep:!0,requireVerificationStep:!0,maxImplementationStepComplexity:3,enforceComplexitySeverity:"block",enforceStructureSeverity:"block"};function ns(e,t,n,r=1,i=[]){return{id:e,description:t,type:n,complexity:Math.max(1,Math.min(10,r)),dependencies:i}}function rs(e){let t=e.toLowerCase(),n=["verify implementation","validate results","review code","approve","confirm","verify","validate","check","review"],r=["plan architecture","design solution","plan","design","architect","outline"],i=["test","spec","assert","mock","stub"];if(n.some((o)=>t.includes(o)))return"verification";if(r.some((o)=>t.includes(o)))return"planning";if(i.some((o)=>t.includes(o)))return"test";return"implementation"}function is(e){let t=e.toLowerCase(),n=1,r={simple:1,basic:1,add:2,create:2,implement:2,modify:2,update:2,refactor:3,restructure:3,reorganize:3,integrate:4,complex:4,difficult:5,"multi-file":4,"cross-module":5,very:3,extremely:4};for(let[o,a]of Object.entries(r))if(t.includes(o))n=Math.max(n,a);let i=e.split(/\s+/).length;if(i>10)n+=1;if(i>20)n+=1;if(i>30)n+=1;return Math.min(10,n)}function mn(e){switch(e){case"block":return"error";case"warn":return"warning";default:return"warning"}}function fn(e,t=ts){let n=[],r=e.some((s)=>s.type==="test"),i=e.some((s)=>s.type==="verification"),o=e.filter((s)=>s.type==="implementation");if(t.requireTestStep&&o.length>0&&!r)n.push({type:"missing-test-step",taskId:"plan",severity:mn(t.enforceStructureSeverity),message:"Plan contains implementation steps but no test step"});if(t.requireVerificationStep&&o.length>0&&!i)n.push({type:"missing-verification",taskId:"plan",severity:mn(t.enforceStructureSeverity),message:"Plan contains implementation steps but no verification step"});let a=!0;for(let s of o)if(s.complexity>t.maxImplementationStepComplexity)n.push({type:"excessive-complexity",taskId:s.id,severity:mn(t.enforceComplexitySeverity),message:`Step "${s.description}" has complexity ${s.complexity}, exceeding maximum of ${t.maxImplementationStepComplexity}`}),a=!1;return{hasTestStep:r,hasVerificationStep:i,complexityValid:a,violations:n}}function os(e,t=ts){let n=fn(e,t),r=[];if(!n.hasTestStep&&t.requireTestStep)r.push("Add test steps to verify the implementation works correctly");if(!n.hasVerificationStep&&t.requireVerificationStep)r.push("Add a verification step to ensure quality before completion");for(let a of n.violations)if(a.type==="excessive-complexity")r.push(`Break down complex step "${a.taskId}" into smaller, more manageable tasks`);let i=bd(e),o=xd(i);return{compliant:n.violations.filter((a)=>a.severity==="error").length===0,steps:e,violations:n.violations,suggestions:r,complexityScore:o}}function bd(e){let t={totalSteps:e.length,implementationSteps:0,testSteps:0,verificationSteps:0,planningSteps:0,averageComplexity:0,maxComplexity:0};if(e.length===0)return t;for(let r of e){switch(r.type){case"implementation":t.implementationSteps++;break;case"test":t.testSteps++;break;case"verification":t.verificationSteps++;break;case"planning":t.planningSteps++;break}t.maxComplexity=Math.max(t.maxComplexity,r.complexity)}let n=e.reduce((r,i)=>r+i.complexity,0);return t.averageComplexity=n/e.length,t}function xd(e){let t=100;if(e.averageComplexity>5)t-=(e.averageComplexity-5)*10;if(e.maxComplexity>7)t-=(e.maxComplexity-7)*5;let n=e.testSteps>0,r=e.verificationSteps>0,i=e.planningSteps>0;if(n)t+=5;if(r)t+=5;if(i)t+=5;return Math.max(0,Math.min(100,t))}var ss={};function wd(e){delete ss[e]}function vd(e,t){if(e==="todowrite")return!0;if(e==="task")return!0;if(t?.prompt?.includes("plan"))return!0;return!1}function kd(e){let t=e?.todos;if(!t||!Array.isArray(t))return[];return t.map((n)=>n.content||"")}function as(){return{"tool.execute.before":async(e,t)=>{let n=H();if(!n?.enabled)return;let{tool:r,sessionID:i}=e;if(!vd(r,t))return;let o=n.plannerConstraints;if(!o.requireTestStep&&!o.requireVerificationStep)return;let s=kd(t);if(s.length===0)return;let c=s.map((g,m)=>ns(`${i}-step-${m}`,g,rs(g),is(g)));ss[i]={steps:c};let l=fn(c,{requireTestStep:o.requireTestStep,requireVerificationStep:o.requireVerificationStep,maxImplementationStepComplexity:o.maxImplementationStepComplexity,enforceComplexitySeverity:"block",enforceStructureSeverity:"block"}),u=l.violations.filter((g)=>g.severity==="error");if(u.length>0){let g=os(c,{requireTestStep:o.requireTestStep,requireVerificationStep:o.requireVerificationStep,maxImplementationStepComplexity:o.maxImplementationStepComplexity,enforceComplexitySeverity:"block",enforceStructureSeverity:"block"}),m=u.map((b)=>`- [${b.severity}] ${b.type}: ${b.message}`).join(`
2084
+ `),f=g.suggestions.map((b)=>`- ${b}`).join(`
1628
2085
  `);throw Error(`Blitzkrieg Planner Constraint Violation:
1629
2086
 
1630
- ${g}
2087
+ ${m}
1631
2088
 
1632
2089
  Suggestions:
1633
- ${f}`)}let p=l.violations.filter((m)=>m.severity==="warning");if(p.length>0){let m=p.map((g)=>`- [${g.severity}] ${g.type}: ${g.message}`).join(`
2090
+ ${f}`)}let p=l.violations.filter((g)=>g.severity==="warning");if(p.length>0){let g=p.map((m)=>`- [${m.severity}] ${m.type}: ${m.message}`).join(`
1634
2091
  `);console.warn(`Blitzkrieg Planner Warnings:
1635
- ${m}`)}},"tool.execute.after":async(e,t)=>{if(e.tool==="todowrite"){let i=t?.todos;if(i?.every((a)=>a.status==="completed"||a.status==="cancelled")&&i&&i.length>0){let a=e.sessionID;Sd(a)}}}}}import{tool as hn}from"@opencode-ai/plugin";class cs extends Error{code;details;constructor(e,t,n){super(t);this.code=e;this.details=n;this.name="MCPError"}}class E extends cs{timeout;constructor(e,t){super("TIMEOUT",e,{timeout:t});this.timeout=t;this.name="MCPTimeoutError"}}class z{maxRequests;windowMs;requests=[];constructor(e,t){this.maxRequests=e;this.windowMs=t}async waitIfNeeded(){let e=Date.now();if(this.requests=this.requests.filter((t)=>e-t<this.windowMs),this.requests.length>=this.maxRequests){let t=this.requests[0],n=this.windowMs-(e-t);if(n>0)await new Promise((r)=>setTimeout(r,n))}this.requests.push(e)}reset(){this.requests=[]}}var Y=hn.schema,ls="https://api.exa.ai",yn=8,bn=30000;var Cd=()=>process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",Pd=S("mcp-websearch"),xn=new z(60,60000),A={enabled:!0,timeout:bn,numResults:yn,livecrawl:"fallback",searchType:"auto",contextMaxCharacters:1e4};async function Ed(e={}){if(A={...A,...e},!A.apiKey&&!process.env.EXA_API_KEY){if(Cd())Pd.warn("No API key provided. Set EXA_API_KEY environment variable or provide apiKey in config.")}}async function Rd(e,t={}){let n=A.apiKey||process.env.EXA_API_KEY;if(!n)throw Error("EXA_API_KEY is required for web search. Please set the environment variable.");let r=Date.now(),i=t.contextMaxCharacters??A.contextMaxCharacters??1e4;try{await xn.waitIfNeeded();let o={query:e,numResults:t.numResults??A.numResults??yn,livecrawl:t.livecrawl??A.livecrawl??"fallback",type:t.searchType??A.searchType??"auto",contents:{text:!0},queryCost:2},a=await fetch(`${ls}/search`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":n,Accept:"application/json"},body:JSON.stringify(o),signal:AbortSignal.timeout(A.timeout??bn)});if(!a.ok){let l=await a.text();throw Error(`Exa API error (${a.status}): ${l}`)}return((await a.json()).results||[]).map((l)=>({title:l.title||"No title",url:l.url,content:l.text||"",score:l.score,publishedDate:l.publishedDate})).map((l)=>({...l,content:Md(l.content,i)}))}catch(o){if(o instanceof Error){if(o.name==="AbortError"||o.name==="TimeoutError")throw new E(`Websearch timed out after ${A.timeout}ms`,A.timeout);throw o}throw o}}async function Td(e,t={}){let n=A.apiKey||process.env.EXA_API_KEY;if(!n)throw Error("EXA_API_KEY is required for web fetch. Please set the environment variable.");try{await xn.waitIfNeeded();let r={url:e,text:t.format!=="html"},i=await fetch(`${ls}/contents`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":n,Accept:"application/json"},body:JSON.stringify(r),signal:AbortSignal.timeout(t.timeout??A.timeout??bn)});if(!i.ok){let a=await i.text();throw Error(`Exa API error (${i.status}): ${a}`)}let o=await i.json();return{url:e,content:o.text||o.contents||"",title:o.title}}catch(r){if(r instanceof Error){if(r.name==="AbortError"||r.name==="TimeoutError")throw new E(`Web fetch timed out after ${t.timeout??A.timeout}ms`,t.timeout??A.timeout);throw r}throw r}}function Md(e,t){if(e.length<=t)return e;return e.slice(0,t)+`
2092
+ ${g}`)}},"tool.execute.after":async(e,t)=>{if(e.tool==="todowrite"){let i=t?.todos;if(i?.every((a)=>a.status==="completed"||a.status==="cancelled")&&i&&i.length>0){let a=e.sessionID;wd(a)}}}}}import{tool as hn}from"@opencode-ai/plugin";class cs extends Error{code;details;constructor(e,t,n){super(t);this.code=e;this.details=n;this.name="MCPError"}}class E extends cs{timeout;constructor(e,t){super("TIMEOUT",e,{timeout:t});this.timeout=t;this.name="MCPTimeoutError"}}class z{maxRequests;windowMs;requests=[];constructor(e,t){this.maxRequests=e;this.windowMs=t}async waitIfNeeded(){let e=Date.now();if(this.requests=this.requests.filter((t)=>e-t<this.windowMs),this.requests.length>=this.maxRequests){let t=this.requests[0],n=this.windowMs-(e-t);if(n>0)await new Promise((r)=>setTimeout(r,n))}this.requests.push(e)}reset(){this.requests=[]}}var Y=hn.schema,ls="https://api.exa.ai",yn=8,bn=30000;var Sd=()=>process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",Ad=k("mcp-websearch"),xn=new z(60,60000),A={enabled:!0,timeout:bn,numResults:yn,livecrawl:"fallback",searchType:"auto",contextMaxCharacters:1e4};async function Cd(e={}){if(A={...A,...e},!A.apiKey&&!process.env.EXA_API_KEY){if(Sd())Ad.warn("No API key provided. Set EXA_API_KEY environment variable or provide apiKey in config.")}}async function Pd(e,t={}){let n=A.apiKey||process.env.EXA_API_KEY;if(!n)throw Error("EXA_API_KEY is required for web search. Please set the environment variable.");let r=Date.now(),i=t.contextMaxCharacters??A.contextMaxCharacters??1e4;try{await xn.waitIfNeeded();let o={query:e,numResults:t.numResults??A.numResults??yn,livecrawl:t.livecrawl??A.livecrawl??"fallback",type:t.searchType??A.searchType??"auto",contents:{text:!0},queryCost:2},a=await fetch(`${ls}/search`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":n,Accept:"application/json"},body:JSON.stringify(o),signal:AbortSignal.timeout(A.timeout??bn)});if(!a.ok){let l=await a.text();throw Error(`Exa API error (${a.status}): ${l}`)}return((await a.json()).results||[]).map((l)=>({title:l.title||"No title",url:l.url,content:l.text||"",score:l.score,publishedDate:l.publishedDate})).map((l)=>({...l,content:Rd(l.content,i)}))}catch(o){if(o instanceof Error){if(o.name==="AbortError"||o.name==="TimeoutError")throw new E(`Websearch timed out after ${A.timeout}ms`,A.timeout);throw o}throw o}}async function Ed(e,t={}){let n=A.apiKey||process.env.EXA_API_KEY;if(!n)throw Error("EXA_API_KEY is required for web fetch. Please set the environment variable.");try{await xn.waitIfNeeded();let r={url:e,text:t.format!=="html"},i=await fetch(`${ls}/contents`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":n,Accept:"application/json"},body:JSON.stringify(r),signal:AbortSignal.timeout(t.timeout??A.timeout??bn)});if(!i.ok){let a=await i.text();throw Error(`Exa API error (${i.status}): ${a}`)}let o=await i.json();return{url:e,content:o.text||o.contents||"",title:o.title}}catch(r){if(r instanceof Error){if(r.name==="AbortError"||r.name==="TimeoutError")throw new E(`Web fetch timed out after ${t.timeout??A.timeout}ms`,t.timeout??A.timeout);throw r}throw r}}function Rd(e,t){if(e.length<=t)return e;return e.slice(0,t)+`
1636
2093
 
1637
- [Content truncated...]`}var Dd=hn({description:"Search the web for information using AI-powered search via Exa AI. Returns relevant web pages with their content.",args:{query:Y.string().describe("Search query for the web"),numResults:Y.number().min(1).max(20).optional().default(yn).describe("Number of results to return (1-20)"),livecrawl:Y.enum(["fallback","preferred"]).optional().default("fallback").describe("Live crawl mode"),searchType:Y.enum(["auto","fast","deep"]).optional().default("auto").describe("Search type"),contextMaxCharacters:Y.number().min(1000).max(50000).optional().default(1e4).describe("Maximum characters per result")},async execute(e){let t=Date.now();try{let n=await Rd(e.query,{numResults:e.numResults,livecrawl:e.livecrawl,searchType:e.searchType,contextMaxCharacters:e.contextMaxCharacters}),r=Date.now()-t;return JSON.stringify({query:e.query,results:n,totalResults:n.length,searchTime:r},null,2)}catch(n){if(n instanceof E)throw Error(`Websearch timeout: ${n.message}`);throw n}}}),Nd=hn({description:"Fetch and parse web content from a specific URL using Exa AI. Returns the content in the specified format.",args:{url:Y.string().url().describe("URL to fetch content from"),format:Y.enum(["markdown","text","html"]).optional().default("markdown").describe("Output format"),timeout:Y.number().min(1000).max(60000).optional().describe("Timeout in milliseconds")},async execute(e){let t=Date.now();try{let n=await Td(e.url,{format:e.format,timeout:e.timeout}),r=Date.now()-t;return JSON.stringify({...n,fetchTime:r},null,2)}catch(n){if(n instanceof E)throw Error(`Webfetch timeout: ${n.message}`);throw n}}}),Qe={...Dd,serverName:"websearch",category:"search",rateLimit:60},Ze={...Nd,serverName:"websearch",category:"search",rateLimit:60},vn={name:"websearch",description:"AI-powered web search via Exa AI with live crawling capabilities",version:"1.0.0",tools:[Qe,Ze],configSchema:{apiKey:"string (optional)",timeout:"number (ms, default: 30000)",numResults:"number (1-20, default: 8)",livecrawl:"'fallback' | 'preferred' (default: 'fallback')",searchType:"'auto' | 'fast' | 'deep' (default: 'auto')",contextMaxCharacters:"number (1000-50000, default: 10000)",enabled:"boolean (default: true)"},initialize:async(e)=>{await Ed(e)},shutdown:async()=>{xn.reset()},healthCheck:async()=>{let e=A.apiKey||process.env.EXA_API_KEY;return A.enabled!==!1&&!!e}};import{tool as wn}from"@opencode-ai/plugin";var K=wn.schema,ds="https://api.context7.io/v1",Sn=5,kn=30000,us=300,An=5000,Od=()=>process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",$d=S("mcp-context7"),Cn=new z(30,60000),M={enabled:!0,timeout:kn,numResults:Sn,cacheTTL:us,maxTokens:An},et=new Map;async function Id(e,t){let n=et.get(e);if(n){if(Date.now()-n.timestamp<n.ttl*1000)return n.data;et.delete(e)}let r=await t();return et.set(e,{data:r,timestamp:Date.now(),ttl:M.cacheTTL??us}),r}function ps(){et.clear()}async function Fd(e={}){if(M={...M,...e},!M.apiKey&&!process.env.CONTEXT7_API_KEY){if(Od())$d.warn("No API key provided. Set CONTEXT7_API_KEY environment variable or provide apiKey in config.")}}async function Ld(e,t={}){let n=M.apiKey||process.env.CONTEXT7_API_KEY;if(!n)throw Error("CONTEXT7_API_KEY is required for documentation search. Please set the environment variable.");try{await Cn.waitIfNeeded();let r={query:e,library:t.library,version:t.version,numResults:t.numResults??M.numResults??Sn,maxTokens:t.maxTokens??M.maxTokens??An},i=await fetch(`${ds}/search`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":n,Accept:"application/json"},body:JSON.stringify(r),signal:AbortSignal.timeout(M.timeout??kn)});if(!i.ok){let s=await i.text();throw Error(`Context7 API error (${i.status}): ${s}`)}return((await i.json()).results||[]).map((s)=>({library:s.library||t.library||"unknown",version:s.version||t.version||"latest",content:s.content||s.text||"",url:s.url||"#",relevance:s.score||s.relevance||0,metadata:s.metadata||{}}))}catch(r){if(r instanceof E)throw r;if(r instanceof Error)throw Error(`Documentation search failed: ${r.message}`);throw r}}async function jd(e,t,n={}){let r=M.apiKey||process.env.CONTEXT7_API_KEY;if(!r)throw Error("CONTEXT7_API_KEY is required for documentation lookup. Please set the environment variable.");let i=`doc:${e}:${t}:${n.version||"latest"}`;try{return await Id(i,async()=>{await Cn.waitIfNeeded();let o=await fetch(`${ds}/docs`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":r,Accept:"application/json"},body:JSON.stringify({library:e,path:t,version:n.version,maxTokens:n.maxTokens??M.maxTokens??An}),signal:AbortSignal.timeout(M.timeout??kn)});if(!o.ok){let s=await o.text();throw Error(`Context7 API error (${o.status}): ${s}`)}let a=await o.json();return{library:e,version:a.version||n.version||"latest",content:a.content||a.text||"",url:a.url||"#",relevance:1,metadata:a.metadata||{}}})}catch(o){if(o instanceof E)throw o;if(o instanceof Error)throw Error(`Failed to get documentation: ${o.message}`);throw o}}var _d=wn({description:"search official documentation for libraries, SDKs, and APIs. Returns relevant documentation pages with content.",args:{query:K.string().describe("Search query for documentation"),library:K.string().optional().describe('Library name (e.g., "react", "nodejs", "python")'),version:K.string().optional().describe('Library version (e.g., "18.0.0", "3.11")'),numResults:K.number().min(1).max(10).optional().default(Sn).describe("Number of results to return"),maxTokens:K.number().min(1000).max(20000).optional().describe("Maximum tokens per result")},async execute(e){try{let t=await Ld(e.query,{library:e.library,version:e.version,numResults:e.numResults,maxTokens:e.maxTokens});return JSON.stringify({query:e.query,library:e.library,version:e.version,results:t,totalResults:t.length},null,2)}catch(t){if(t instanceof E)throw Error(`Documentation search timeout: ${t.message}`);throw t}}}),Hd=wn({description:"Get specific documentation page by library and path. Fetches the exact documentation content.",args:{library:K.string().describe('Library name (e.g., "react", "nodejs", "python")'),path:K.string().describe('Documentation path (e.g., "/hooks/useEffect", "/api/fs")'),version:K.string().optional().describe('Library version (e.g., "18.0.0", "3.11")'),maxTokens:K.number().min(1000).max(20000).optional().describe("Maximum tokens to return")},async execute(e){try{let t=await jd(e.library,e.path,{version:e.version,maxTokens:e.maxTokens});return JSON.stringify({library:e.library,path:e.path,version:e.version,result:t},null,2)}catch(t){if(t instanceof E)throw Error(`Documentation lookup timeout: ${t.message}`);throw t}}}),tt={..._d,serverName:"context7",category:"documentation",rateLimit:30},nt={...Hd,serverName:"context7",category:"documentation",rateLimit:30},Pn={name:"context7",description:"Official documentation lookup for libraries, SDKs, and APIs with intelligent caching",version:"1.0.0",tools:[tt,nt],configSchema:{apiKey:"string (optional)",timeout:"number (ms, default: 30000)",numResults:"number (1-10, default: 5)",cacheTTL:"number (seconds, default: 300)",maxTokens:"number (1000-20000, default: 5000)",enabled:"boolean (default: true)"},initialize:async(e)=>{await Fd(e)},shutdown:async()=>{ps(),Cn.reset()},healthCheck:async()=>{let e=M.apiKey||process.env.CONTEXT7_API_KEY;return M.enabled!==!1&&!!e}};import{tool as En}from"@opencode-ai/plugin";var V=En.schema,ms="https://api.github.com",Rn=10,Tn=30000,Wd=1000,Jd=()=>process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",Ud=S("mcp-grep-app"),Mn=new z(60,60000),G={enabled:!0,timeout:Tn,maxResults:Rn,rateLimitDelay:Wd,defaultExtensions:["ts","js","tsx","jsx","py","java","go","rs"],defaultLanguages:["TypeScript","JavaScript","Python","Java","Go","Rust"]};async function qd(e={}){if(G={...G,...e},!G.githubToken&&!process.env.GITHUB_TOKEN){if(Jd())Ud.warn("No GitHub token provided. Rate limits will be unauthenticated (60 requests/hour). Set GITHUB_TOKEN environment variable or provide githubToken in config.")}}async function Bd(e,t={}){let n=G.githubToken||process.env.GITHUB_TOKEN;try{await Mn.waitIfNeeded();let r=e;if(t.language)r+=` language:${t.language}`;if(t.extension)r+=` extension:${t.extension}`;let i={Accept:"application/vnd.github.v3+json","User-Agent":"KrakenCode-GrepApp"};if(n)i.Authorization=`token ${n}`;let o=new URL(`${ms}/search/code`);o.searchParams.append("q",r),o.searchParams.append("per_page",String(t.maxResults??G.maxResults??Rn)),o.searchParams.append("page",String(t.page??1));let a=await fetch(o.toString(),{method:"GET",headers:i,signal:AbortSignal.timeout(G.timeout??Tn)});if(!a.ok){if(a.status===403){let u=a.headers.get("X-RateLimit-Reset");throw Error(`GitHub rate limit exceeded. Reset at ${u||"unknown"}. Consider using GITHUB_TOKEN for higher limits.`)}let l=await a.text();throw Error(`GitHub API error (${a.status}): ${l}`)}return((await a.json()).items||[]).map((l)=>({repository:l.repository?.full_name||"unknown",path:l.path,language:l.language||l.repository?.language||"unknown",matches:[],url:l.html_url,score:l.score,metadata:{stars:l.repository?.stargazers_count,forks:l.repository?.forks_count,updatedAt:l.repository?.updated_at}}))}catch(r){if(r instanceof E)throw r;if(r instanceof Error)throw Error(`GitHub code search failed: ${r.message}`);throw r}}async function Kd(e,t,n,r={}){let i=G.githubToken||process.env.GITHUB_TOKEN;try{await Mn.waitIfNeeded();let o={Accept:"application/vnd.github.v3.raw","User-Agent":"KrakenCode-GrepApp"};if(i)o.Authorization=`token ${i}`;let a=`${ms}/repos/${e}/${t}/contents/${n}${r.ref?`?ref=${r.ref}`:""}`,s=await fetch(a,{method:"GET",headers:o,signal:AbortSignal.timeout(G.timeout??Tn)});if(!s.ok){if(s.status===404)throw Error(`File not found: ${e}/${t}/${n}`);if(s.status===403){let m=s.headers.get("X-RateLimit-Reset");throw Error(`GitHub rate limit exceeded. Reset at ${m||"unknown"}. Consider using GITHUB_TOKEN for higher limits.`)}let p=await s.text();throw Error(`GitHub API error (${s.status}): ${p}`)}let c=await s.text(),l=Vd(n),u=`https://github.com/${e}/${t}/blob/${r.ref||"main"}/${n}`;return{content:c,url:u,language:l}}catch(o){if(o instanceof E)throw o;if(o instanceof Error)throw Error(`Failed to get GitHub file: ${o.message}`);throw o}}function Vd(e){let t=e.split(".").pop()?.toLowerCase();return{ts:"TypeScript",tsx:"TypeScript",js:"JavaScript",jsx:"JavaScript",py:"Python",java:"Java",go:"Go",rs:"Rust",c:"C",cpp:"C++",h:"C",hpp:"C++",rb:"Ruby",php:"PHP",swift:"Swift",kt:"Kotlin",scala:"Scala",cs:"C#",sh:"Shell",bash:"Shell",zsh:"Shell",json:"JSON",yaml:"YAML",yml:"YAML",xml:"XML",md:"Markdown"}[t||""]||"unknown"}var Gd=En({description:"search code across public GitHub repositories. Returns matching files with repository information.",args:{query:V.string().describe("Search query (supports GitHub code search syntax)"),language:V.string().optional().describe('Filter by programming language (e.g., "TypeScript", "Python")'),extension:V.string().optional().describe('Filter by file extension (e.g., "ts", "js", "py")'),maxResults:V.number().min(1).max(30).optional().default(Rn).describe("Number of results to return"),page:V.number().min(1).optional().default(1).describe("Page number for pagination")},async execute(e){try{let t=await Bd(e.query,{language:e.language,extension:e.extension,maxResults:e.maxResults,page:e.page});return JSON.stringify({query:e.query,language:e.language,extension:e.extension,results:t,totalResults:t.length},null,2)}catch(t){if(t instanceof E)throw Error(`GitHub search timeout: ${t.message}`);throw t}}}),zd=En({description:"Fetch file content from a GitHub repository. Can fetch individual files from search results.",args:{owner:V.string().describe('Repository owner (e.g., "facebook", "microsoft")'),repo:V.string().describe('Repository name (e.g., "react", "typescript")'),path:V.string().describe('File path (e.g., "src/index.ts", "README.md")'),ref:V.string().optional().describe('Git reference (branch, tag, or commit, defaults to "main")')},async execute(e){try{let t=await Kd(e.owner,e.repo,e.path,{ref:e.ref});return JSON.stringify({owner:e.owner,repo:e.repo,path:e.path,ref:e.ref,content:t.content,url:t.url,language:t.language},null,2)}catch(t){if(t instanceof E)throw Error(`GitHub file fetch timeout: ${t.message}`);throw t}}}),rt={...Gd,serverName:"grep_app",category:"code",rateLimit:60},it={...zd,serverName:"grep_app",category:"code",rateLimit:60},Dn={name:"grep_app",description:"Search across public GitHub repositories with support for file content fetching",version:"1.0.0",tools:[rt,it],configSchema:{githubToken:"string (optional, GitHub personal access token)",timeout:"number (ms, default: 30000)",maxResults:"number (1-30, default: 10)",rateLimitDelay:"number (ms, default: 1000)",defaultExtensions:'array of strings (default: ["ts", "js", "tsx", "jsx", "py", "java", "go", "rs"])',defaultLanguages:'array of strings (default: ["TypeScript", "JavaScript", "Python", "Java", "Go", "Rust"])',enabled:"boolean (default: true)"},initialize:async(e)=>{await qd(e)},shutdown:async()=>{Mn.reset()},healthCheck:async()=>{return G.enabled!==!1}};var gs=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",fs=S("mcp-index"),hs=[vn,Pn,Dn];async function ys(e={}){for(let t of hs){let n=e[t.name]||{};if(t.initialize)try{await t.initialize(n)}catch(r){if(gs)fs.warn(`Failed to initialize MCP server '${t.name}':`,r);throw r}}}async function bs(){for(let e of hs)if(e.shutdown)try{await e.shutdown()}catch(t){if(gs)fs.warn(`Failed to shutdown MCP server '${e.name}':`,t)}}import*as Te from"fs";import*as X from"path";import*as xs from"os";var vs=/^---\s*\n([\s\S]*?)\n---\s*\n/;function Yd(e){let t=e.match(vs);if(!t)return{};let n=t[1],r={},i=n.split(`
1638
- `);for(let o of i){let a=o.indexOf(":");if(a===-1)continue;let s=o.slice(0,a).trim(),c=o.slice(a+1).trim();if(s==="true")r[s]=!0;else if(s==="false")r[s]=!1;else if(!isNaN(Number(c)))r[s]=Number(c);else r[s]=c}return r}async function fe(e,t,n=new Set,r=""){let i=[];if(!Te.existsSync(e))return i;let o=X.resolve(e);if(n.has(o))return i;n.add(o);try{let a=await Te.promises.readdir(e,{withFileTypes:!0});for(let s of a){let c=X.join(e,s.name);if(s.isDirectory()){let l=r?`${r}:${s.name}`:s.name,u=await fe(c,t,n,l);i.push(...u)}else if(s.isFile()&&s.name.endsWith(".md"))try{let l=await Te.promises.readFile(c,"utf-8"),u=Yd(l),p=l.replace(vs,"").trim(),m=s.name.slice(0,-3),g=r?`${r}:${m}`:m;i.push({name:g,path:c,definition:{name:g,description:u.description||"",template:p,agent:u.agent,model:u.model,subtask:u.subtask,argumentHint:u.argumentHint},scope:t,prefix:r})}catch(l){console.error(`[command-loader] Error loading command from ${c}:`,l)}}}catch(a){console.error(`[command-loader] Error reading commands directory ${e}:`,a)}return i}function ws(){let e=xs.homedir();return{user:X.join(e,".config","opencode","commands"),project:X.join(process.cwd(),".claude","commands"),opencodeGlobal:X.join(e,".config","opencode","commands"),opencodeProject:X.join(process.cwd(),".opencode","commands")}}var Ss=["builtin","user","opencode","opencode-project","project","skill"],ks=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",As=S("command-loader");class Nn{commands=new Map;options;constructor(e={}){this.options=e}async loadAll(){let e=ws(),t=[];if(!this.isScopeDisabled("user")){let i=this.options.userCommandsDir||e.user;t.push(fe(i,"user"))}if(!this.isScopeDisabled("project")){let i=this.options.projectCommandsDir||e.project;t.push(fe(i,"project"))}if(!this.isScopeDisabled("opencode")){let i=this.options.opencodeGlobalCommandsDir||e.opencodeGlobal;t.push(fe(i,"opencode"))}if(!this.isScopeDisabled("opencode-project")){let i=this.options.opencodeProjectCommandsDir||e.opencodeProject;t.push(fe(i,"opencode-project"))}let n=await Promise.all(t),r=n.flat();for(let i of r)this.registerCommand(i);if(ks)As.debug(`Loaded ${this.commands.size} commands from ${n.length} sources`);return this.commands}registerCommand(e){let t=this.commands.get(e.name);if(t){let n=Ss.indexOf(e.scope),r=Ss.indexOf(t.scope);if(n>r){if(this.commands.set(e.name,e),ks)As.debug(`Overriding ${e.name} from ${t.scope} with ${e.scope}`)}}else this.commands.set(e.name,e)}getCommand(e){return this.commands.get(e)}listCommands(){return Array.from(this.commands.values())}clear(){this.commands.clear()}isScopeDisabled(e){return this.options.disabledScopes?.includes(e)||!1}}var ot=null;async function Cs(){if(!ot)ot=new Nn,await ot.loadAll();return ot}import{spawn as Ps}from"child_process";import{existsSync as Es}from"node:fs";import Xd from"node:path";var Qd=300000,st=3,j=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",_=S("skill-mcp-manager");class On{clients=new Map;pendingConnections=new Map;idleTimeout;maxConnections;cleanupInterval=null;constructor(e={}){this.idleTimeout=e.idleTimeout||Qd,this.maxConnections=e.maxConnections||10,this.startCleanupInterval(),this.setupProcessCleanup()}async initialize(){if(j)_.debug("Manager initialized")}getClientKey(e){return`${e.skillName}:${e.mcpName}:${e.sessionID}`}processExists(e){try{return process.kill(e,0),!0}catch{return!1}}async getOrCreateClient(e,t){let n=this.getClientKey(e),r=this.pendingConnections.get(n);if(r)return r.promise;let i=this.clients.get(n);if(i&&this.isClientHealthy(i))return i.lastUsed=Date.now(),i.client;let o=new Promise((a,s)=>{this.createClientProcess(e,t).then((c)=>{this.clients.set(n,{client:c,process:c.process,lastUsed:Date.now(),pendingRequests:0}),a(c)}).catch((c)=>{s(c)})});this.pendingConnections.set(n,{promise:o,resolve:o,reject:o});try{return await o}finally{this.pendingConnections.delete(n)}}async createClientProcess(e,t){let{command:n,args:r,env:i={}}=t;if(j)_.debug(`Starting MCP process for ${e.skillName}:${e.mcpName}`);let o=await this.resolveCommand(n);if(!o)throw Error(`MCP command '${n}' not found. Install it and ensure it is on your PATH.`);return new Promise((a,s)=>{let c=0,l=null,u=()=>{l=Ps(o,r,{env:{...process.env,...i},stdio:["pipe","pipe","pipe"]});let p=null,m=0,g=new Map,f=(b,y)=>{let C=++m,D={jsonrpc:"2.0",id:C,method:b,params:y};if(l?.stdin)l.stdin.write(JSON.stringify(D)+`
1639
- `);return new Promise((I,N)=>{g.set(C,{resolve:I,reject:N}),setTimeout(()=>{g.delete(C),N(Error(`Request ${b} timeout`))},30000)})};if(p={listTools:async()=>{return(await f("tools/list",{})).result?.tools||[]},listResources:async()=>{return(await f("resources/list",{})).result?.resources||[]},listPrompts:async()=>{return(await f("prompts/list",{})).result?.prompts||[]},callTool:async(b,y)=>{return(await f("tools/call",{name:b,arguments:y})).result},readResource:async(b)=>{return(await f("resources/read",{uri:b})).result},getPrompt:async(b,y)=>{return(await f("prompts/get",{name:b,arguments:y||{}})).result},close:async()=>{if(l)l.kill()}},l.stdout){let b=(y)=>{let C=y.toString().split(`
1640
- `);for(let D of C){if(!D.trim())continue;try{let I=JSON.parse(D),{id:N,result:Me,error:he}=I;if(N!==void 0&&g.has(N)){let ye=g.get(N);if(g.delete(N),he)ye.reject(Error(he.message));else ye.resolve(Me)}}catch(I){if(j)_.warn("Failed to parse response:",I)}}};l.stdout.on("data",b),l.on("error",(y)=>{if(j)_.warn(`MCP process error for ${e.skillName}:${e.mcpName}:`,y);if(y?.code==="ENOENT"){s(Error(`MCP command '${n}' not found.`));return}if(c<st){if(c++,j)_.debug(`Retrying connection (${c}/${st})`);setTimeout(u,1000*c)}else s(y)}),l.on("exit",(y,C)=>{if(j)_.debug(`MCP process exited for ${e.skillName}:${e.mcpName} with code ${y}, signal ${C}`);if(c<st&&y!==0){if(c++,j)_.debug(`Retrying connection (${c}/${st})`);setTimeout(u,1000*c)}else if(p&&y===0)a(p)}),setTimeout(async()=>{try{await f("initialize",{protocolVersion:"2024-11-05",capabilities:{},clientInfo:{name:"kraken-code",version:"5.0.0"}}),await f("notifications/initialized",{}),a(p)}catch(y){s(y)}},500)}};u()})}async resolveCommand(e){if(Xd.isAbsolute(e)&&Es(e))return e;if(e.includes("/")||e.includes("\\"))return Es(e)?e:null;let t=process.platform==="win32"?"where":"which";try{let n=Ps(t,[e],{stdio:["ignore","pipe","pipe"]}),r=await this.readStream(n.stdout);if(await new Promise((i)=>{n.on("close",()=>i())}),n.exitCode===0)return r.trim().split(`
1641
- `)[0]?.trim()??null}catch{return null}return null}readStream(e){if(!e)return Promise.resolve("");return new Promise((t)=>{let n="";e.on("data",(r)=>{n+=r.toString()}),e.on("end",()=>t(n)),e.on("error",()=>t(n))})}isClientHealthy(e){let t=e.process;if(!t||!t.pid)return!1;return this.processExists(t.pid)}async listTools(e,t){return(await this.getOrCreateClient(e,t)).listTools()}async listResources(e,t){return(await this.getOrCreateClient(e,t)).listResources()}async listPrompts(e,t){return(await this.getOrCreateClient(e,t)).listPrompts()}async callTool(e,t,n,r){return(await this.getOrCreateClient(e,t)).callTool(n,r)}async readResource(e,t,n){return(await this.getOrCreateClient(e,t)).readResource(n)}async getPrompt(e,t,n,r){return(await this.getOrCreateClient(e,t)).getPrompt(n,r)}async disconnectSession(e){let t=[];for(let[n,r]of this.clients.entries())if(n.includes(`:${e}`))await r.client.close(),t.push(n);for(let n of t)this.clients.delete(n);if(j)_.debug(`Disconnected ${t.length} clients for session ${e}`)}async disconnectAll(){let e=[];for(let t of this.clients.values())e.push(t.client.close());if(await Promise.all(e),this.clients.clear(),j)_.debug("Disconnected all clients")}getConnectedServers(){let e=new Set;for(let t of this.clients.keys()){let n=t.split(":");if(n.length>=2)e.add(`${n[0]}:${n[1]}`)}return Array.from(e)}isConnected(e){let t=this.getClientKey(e),n=this.clients.get(t);if(!n)return!1;return this.isClientHealthy(n)}startCleanupInterval(){this.cleanupInterval=setInterval(()=>{this.cleanupIdleClients()},60000)}cleanupIdleClients(){let e=Date.now(),t=[];for(let[n,r]of this.clients.entries())if(e-r.lastUsed>this.idleTimeout)t.push(n);if(t.length>0){if(j)_.debug(`Cleaning up ${t.length} idle clients`);for(let n of t)this.clients.get(n).client.close(),this.clients.delete(n)}}setupProcessCleanup(){let e=async(t)=>{if(j)_.debug(`Received ${t}, cleaning up...`);if(await this.disconnectAll(),this.cleanupInterval)clearInterval(this.cleanupInterval);process.exit(0)};process.on("SIGINT",e),process.on("SIGTERM",e)}}var at=null;async function Rs(){if(!at)at=new On,await at.initialize();return at}function Zd(){return{Kraken:dt,Atlas:ut,Nautilus:pt,Abyssal:mt,Coral:gt,Siren:ft,Scylla:ht,Pearl:yt,Maelstrom:vt,Leviathan:xt,Poseidon:bt}}function eu(...e){let t={},n=[];for(let r of e){if(r.config)n.push(r.config);for(let[i,o]of Object.entries(r))if(i!=="config")if(i==="tool"&&typeof o==="object"&&o!==null)if(!t[i]||typeof t[i]!=="object")t[i]=o;else t[i]={...t[i],...o};else t[i]=o}if(n.length>0)t.config=async(r)=>{for(let i of n)await i(r)};return t}var tu={ast_grep_search:Vr,ast_grep_replace:Gr,grep:Zr,session_list:It,session_read:Ft,session_search:Lt,session_info:_t,"kraken-compress":kr,"model-switcher":Cr,"ralph-loop":ei,lsp_hover:Hi,lsp_goto_definition:Wi,lsp_find_references:Ji,lsp_document_symbols:Ui,lsp_workspace_symbols:qi,lsp_diagnostics:Bi,lsp_prepare_rename:Ki,lsp_rename:Vi,lsp_code_actions:Gi,lsp_code_action_resolve:zi,lsp_servers:Yi,"call-kraken-agent":ni,websearch:Qe,webfetch:Ze,"context7-search":tt,"context7-get":nt,"grep-search":rt,"grep-get-file":it,learning_add_experience:vi,learning_search_experiences:wi,learning_add_knowledge_node:Si,learning_search_knowledge_nodes:ki,learning_link_knowledge_nodes:Ai,learning_record_pattern:Ci,learning_list_patterns:Pi,learning_get_review_queue:Ei,learning_review_node:Ri,learning_create_state_machine:Ti,learning_list_state_machines:Mi},nu=async(e)=>{let t=S("plugin-main"),n=[],r=eo(e,{autoActivate:!0});Object.assign(n,r);let i=Vn(),o=Qt(e,{config:{enabled:i?.enabled??!0,recordTodos:!0,recordTranscripts:!0}});Object.assign(n,o);let a=to(e,{config:i});Object.assign(n,a),n.push({tool:tu}),n.push({config:async(s)=>{if(!s.agent)s.agent={};let c=Zd();for(let[l,u]of Object.entries(c))if(!s.agent[l])s.agent[l]=u;if(!s.default_agent&&s.agent.Kraken)s.default_agent="Kraken";await Promise.all([(async()=>{try{await Cs(),t.debug("Command loader initialized")}catch(l){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing command loader:",l)}})(),(async()=>{try{await Rs(),t.debug("Skill MCP manager initialized")}catch(l){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing skill MCP manager:",l)}})(),(async()=>{try{let l=s.mcp||{};await ys(l),t.debug("MCP servers initialized")}catch(l){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing MCP servers:",l)}})(),(async()=>{try{await Ut(),t.debug("Learning system initialized")}catch(l){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing learning system:",l)}})()])}});try{n.push(ro(e)),n.push({tool:lo(e).tools}),n.push(po(e)),n.push(jr(e)),n.push(mo(e)),n.push(go(e)),n.push(fo(e)),n.push(ho(e)),n.push(yo(e)),n.push(qr(e)),n.push(bo(e)),n.push(xo(e)),n.push(vo(e)),n.push(So(e)),n.push(ko(e)),n.push(Po(e)),n.push(Eo(e)),n.push(Ro(e)),n.push(Io(e)),n.push(jo(e)),n.push(Uo(e)),n.push(on(e)),n.push(sn(e)),n.push(an(e)),n.push(Ko()),n.push(Go()),n.push(es()),n.push(as())}catch(s){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing hooks:",s)}return n.push({"tool.execute.after":async(s,c)=>{if(!c.output)return;let{tool:l,sessionID:u}=s;if(c.output&&c.output.toolOutput)await je(u,l,c.output.toolInput,c.output.toolOutput);if(u&&(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"))console.log(`[storage-hooks] Tool ${l} completed for session ${u}`)}}),process.on("exit",async()=>{try{await bs()}catch(s){console.error("Kraken Code: Error shutting down services",s)}}),eu(...n)},Uy=nu;export{Uy as default};
2094
+ [Content truncated...]`}var Td=hn({description:"Search the web for information using AI-powered search via Exa AI. Returns relevant web pages with their content.",args:{query:Y.string().describe("Search query for the web"),numResults:Y.number().min(1).max(20).optional().default(yn).describe("Number of results to return (1-20)"),livecrawl:Y.enum(["fallback","preferred"]).optional().default("fallback").describe("Live crawl mode"),searchType:Y.enum(["auto","fast","deep"]).optional().default("auto").describe("Search type"),contextMaxCharacters:Y.number().min(1000).max(50000).optional().default(1e4).describe("Maximum characters per result")},async execute(e){let t=Date.now();try{let n=await Pd(e.query,{numResults:e.numResults,livecrawl:e.livecrawl,searchType:e.searchType,contextMaxCharacters:e.contextMaxCharacters}),r=Date.now()-t;return JSON.stringify({query:e.query,results:n,totalResults:n.length,searchTime:r},null,2)}catch(n){if(n instanceof E)throw Error(`Websearch timeout: ${n.message}`);throw n}}}),Md=hn({description:"Fetch and parse web content from a specific URL using Exa AI. Returns the content in the specified format.",args:{url:Y.string().url().describe("URL to fetch content from"),format:Y.enum(["markdown","text","html"]).optional().default("markdown").describe("Output format"),timeout:Y.number().min(1000).max(60000).optional().describe("Timeout in milliseconds")},async execute(e){let t=Date.now();try{let n=await Ed(e.url,{format:e.format,timeout:e.timeout}),r=Date.now()-t;return JSON.stringify({...n,fetchTime:r},null,2)}catch(n){if(n instanceof E)throw Error(`Webfetch timeout: ${n.message}`);throw n}}}),Qe={...Td,serverName:"websearch",category:"search",rateLimit:60},Ze={...Md,serverName:"websearch",category:"search",rateLimit:60},wn={name:"websearch",description:"AI-powered web search via Exa AI with live crawling capabilities",version:"1.0.0",tools:[Qe,Ze],configSchema:{apiKey:"string (optional)",timeout:"number (ms, default: 30000)",numResults:"number (1-20, default: 8)",livecrawl:"'fallback' | 'preferred' (default: 'fallback')",searchType:"'auto' | 'fast' | 'deep' (default: 'auto')",contextMaxCharacters:"number (1000-50000, default: 10000)",enabled:"boolean (default: true)"},initialize:async(e)=>{await Cd(e)},shutdown:async()=>{xn.reset()},healthCheck:async()=>{let e=A.apiKey||process.env.EXA_API_KEY;return A.enabled!==!1&&!!e}};import{tool as vn}from"@opencode-ai/plugin";var q=vn.schema,ds="https://api.context7.io/v1",kn=5,Sn=30000,us=300,An=5000,Dd=()=>process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",Nd=k("mcp-context7"),Cn=new z(30,60000),M={enabled:!0,timeout:Sn,numResults:kn,cacheTTL:us,maxTokens:An},et=new Map;async function Od(e,t){let n=et.get(e);if(n){if(Date.now()-n.timestamp<n.ttl*1000)return n.data;et.delete(e)}let r=await t();return et.set(e,{data:r,timestamp:Date.now(),ttl:M.cacheTTL??us}),r}function ps(){et.clear()}async function Id(e={}){if(M={...M,...e},!M.apiKey&&!process.env.CONTEXT7_API_KEY){if(Dd())Nd.warn("No API key provided. Set CONTEXT7_API_KEY environment variable or provide apiKey in config.")}}async function $d(e,t={}){let n=M.apiKey||process.env.CONTEXT7_API_KEY;if(!n)throw Error("CONTEXT7_API_KEY is required for documentation search. Please set the environment variable.");try{await Cn.waitIfNeeded();let r={query:e,library:t.library,version:t.version,numResults:t.numResults??M.numResults??kn,maxTokens:t.maxTokens??M.maxTokens??An},i=await fetch(`${ds}/search`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":n,Accept:"application/json"},body:JSON.stringify(r),signal:AbortSignal.timeout(M.timeout??Sn)});if(!i.ok){let s=await i.text();throw Error(`Context7 API error (${i.status}): ${s}`)}return((await i.json()).results||[]).map((s)=>({library:s.library||t.library||"unknown",version:s.version||t.version||"latest",content:s.content||s.text||"",url:s.url||"#",relevance:s.score||s.relevance||0,metadata:s.metadata||{}}))}catch(r){if(r instanceof E)throw r;if(r instanceof Error)throw Error(`Documentation search failed: ${r.message}`);throw r}}async function Fd(e,t,n={}){let r=M.apiKey||process.env.CONTEXT7_API_KEY;if(!r)throw Error("CONTEXT7_API_KEY is required for documentation lookup. Please set the environment variable.");let i=`doc:${e}:${t}:${n.version||"latest"}`;try{return await Od(i,async()=>{await Cn.waitIfNeeded();let o=await fetch(`${ds}/docs`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":r,Accept:"application/json"},body:JSON.stringify({library:e,path:t,version:n.version,maxTokens:n.maxTokens??M.maxTokens??An}),signal:AbortSignal.timeout(M.timeout??Sn)});if(!o.ok){let s=await o.text();throw Error(`Context7 API error (${o.status}): ${s}`)}let a=await o.json();return{library:e,version:a.version||n.version||"latest",content:a.content||a.text||"",url:a.url||"#",relevance:1,metadata:a.metadata||{}}})}catch(o){if(o instanceof E)throw o;if(o instanceof Error)throw Error(`Failed to get documentation: ${o.message}`);throw o}}var Ld=vn({description:"search official documentation for libraries, SDKs, and APIs. Returns relevant documentation pages with content.",args:{query:q.string().describe("Search query for documentation"),library:q.string().optional().describe('Library name (e.g., "react", "nodejs", "python")'),version:q.string().optional().describe('Library version (e.g., "18.0.0", "3.11")'),numResults:q.number().min(1).max(10).optional().default(kn).describe("Number of results to return"),maxTokens:q.number().min(1000).max(20000).optional().describe("Maximum tokens per result")},async execute(e){try{let t=await $d(e.query,{library:e.library,version:e.version,numResults:e.numResults,maxTokens:e.maxTokens});return JSON.stringify({query:e.query,library:e.library,version:e.version,results:t,totalResults:t.length},null,2)}catch(t){if(t instanceof E)throw Error(`Documentation search timeout: ${t.message}`);throw t}}}),_d=vn({description:"Get specific documentation page by library and path. Fetches the exact documentation content.",args:{library:q.string().describe('Library name (e.g., "react", "nodejs", "python")'),path:q.string().describe('Documentation path (e.g., "/hooks/useEffect", "/api/fs")'),version:q.string().optional().describe('Library version (e.g., "18.0.0", "3.11")'),maxTokens:q.number().min(1000).max(20000).optional().describe("Maximum tokens to return")},async execute(e){try{let t=await Fd(e.library,e.path,{version:e.version,maxTokens:e.maxTokens});return JSON.stringify({library:e.library,path:e.path,version:e.version,result:t},null,2)}catch(t){if(t instanceof E)throw Error(`Documentation lookup timeout: ${t.message}`);throw t}}}),tt={...Ld,serverName:"context7",category:"documentation",rateLimit:30},nt={..._d,serverName:"context7",category:"documentation",rateLimit:30},Pn={name:"context7",description:"Official documentation lookup for libraries, SDKs, and APIs with intelligent caching",version:"1.0.0",tools:[tt,nt],configSchema:{apiKey:"string (optional)",timeout:"number (ms, default: 30000)",numResults:"number (1-10, default: 5)",cacheTTL:"number (seconds, default: 300)",maxTokens:"number (1000-20000, default: 5000)",enabled:"boolean (default: true)"},initialize:async(e)=>{await Id(e)},shutdown:async()=>{ps(),Cn.reset()},healthCheck:async()=>{let e=M.apiKey||process.env.CONTEXT7_API_KEY;return M.enabled!==!1&&!!e}};import{tool as En}from"@opencode-ai/plugin";var V=En.schema,gs="https://api.github.com",Rn=10,Tn=30000,jd=1000,Wd=()=>process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",Hd=k("mcp-grep-app"),Mn=new z(60,60000),G={enabled:!0,timeout:Tn,maxResults:Rn,rateLimitDelay:jd,defaultExtensions:["ts","js","tsx","jsx","py","java","go","rs"],defaultLanguages:["TypeScript","JavaScript","Python","Java","Go","Rust"]};async function Ud(e={}){if(G={...G,...e},!G.githubToken&&!process.env.GITHUB_TOKEN){if(Wd())Hd.warn("No GitHub token provided. Rate limits will be unauthenticated (60 requests/hour). Set GITHUB_TOKEN environment variable or provide githubToken in config.")}}async function Bd(e,t={}){let n=G.githubToken||process.env.GITHUB_TOKEN;try{await Mn.waitIfNeeded();let r=e;if(t.language)r+=` language:${t.language}`;if(t.extension)r+=` extension:${t.extension}`;let i={Accept:"application/vnd.github.v3+json","User-Agent":"KrakenCode-GrepApp"};if(n)i.Authorization=`token ${n}`;let o=new URL(`${gs}/search/code`);o.searchParams.append("q",r),o.searchParams.append("per_page",String(t.maxResults??G.maxResults??Rn)),o.searchParams.append("page",String(t.page??1));let a=await fetch(o.toString(),{method:"GET",headers:i,signal:AbortSignal.timeout(G.timeout??Tn)});if(!a.ok){if(a.status===403){let u=a.headers.get("X-RateLimit-Reset");throw Error(`GitHub rate limit exceeded. Reset at ${u||"unknown"}. Consider using GITHUB_TOKEN for higher limits.`)}let l=await a.text();throw Error(`GitHub API error (${a.status}): ${l}`)}return((await a.json()).items||[]).map((l)=>({repository:l.repository?.full_name||"unknown",path:l.path,language:l.language||l.repository?.language||"unknown",matches:[],url:l.html_url,score:l.score,metadata:{stars:l.repository?.stargazers_count,forks:l.repository?.forks_count,updatedAt:l.repository?.updated_at}}))}catch(r){if(r instanceof E)throw r;if(r instanceof Error)throw Error(`GitHub code search failed: ${r.message}`);throw r}}async function Jd(e,t,n,r={}){let i=G.githubToken||process.env.GITHUB_TOKEN;try{await Mn.waitIfNeeded();let o={Accept:"application/vnd.github.v3.raw","User-Agent":"KrakenCode-GrepApp"};if(i)o.Authorization=`token ${i}`;let a=`${gs}/repos/${e}/${t}/contents/${n}${r.ref?`?ref=${r.ref}`:""}`,s=await fetch(a,{method:"GET",headers:o,signal:AbortSignal.timeout(G.timeout??Tn)});if(!s.ok){if(s.status===404)throw Error(`File not found: ${e}/${t}/${n}`);if(s.status===403){let g=s.headers.get("X-RateLimit-Reset");throw Error(`GitHub rate limit exceeded. Reset at ${g||"unknown"}. Consider using GITHUB_TOKEN for higher limits.`)}let p=await s.text();throw Error(`GitHub API error (${s.status}): ${p}`)}let c=await s.text(),l=Kd(n),u=`https://github.com/${e}/${t}/blob/${r.ref||"main"}/${n}`;return{content:c,url:u,language:l}}catch(o){if(o instanceof E)throw o;if(o instanceof Error)throw Error(`Failed to get GitHub file: ${o.message}`);throw o}}function Kd(e){let t=e.split(".").pop()?.toLowerCase();return{ts:"TypeScript",tsx:"TypeScript",js:"JavaScript",jsx:"JavaScript",py:"Python",java:"Java",go:"Go",rs:"Rust",c:"C",cpp:"C++",h:"C",hpp:"C++",rb:"Ruby",php:"PHP",swift:"Swift",kt:"Kotlin",scala:"Scala",cs:"C#",sh:"Shell",bash:"Shell",zsh:"Shell",json:"JSON",yaml:"YAML",yml:"YAML",xml:"XML",md:"Markdown"}[t||""]||"unknown"}var qd=En({description:"search code across public GitHub repositories. Returns matching files with repository information.",args:{query:V.string().describe("Search query (supports GitHub code search syntax)"),language:V.string().optional().describe('Filter by programming language (e.g., "TypeScript", "Python")'),extension:V.string().optional().describe('Filter by file extension (e.g., "ts", "js", "py")'),maxResults:V.number().min(1).max(30).optional().default(Rn).describe("Number of results to return"),page:V.number().min(1).optional().default(1).describe("Page number for pagination")},async execute(e){try{let t=await Bd(e.query,{language:e.language,extension:e.extension,maxResults:e.maxResults,page:e.page});return JSON.stringify({query:e.query,language:e.language,extension:e.extension,results:t,totalResults:t.length},null,2)}catch(t){if(t instanceof E)throw Error(`GitHub search timeout: ${t.message}`);throw t}}}),Vd=En({description:"Fetch file content from a GitHub repository. Can fetch individual files from search results.",args:{owner:V.string().describe('Repository owner (e.g., "facebook", "microsoft")'),repo:V.string().describe('Repository name (e.g., "react", "typescript")'),path:V.string().describe('File path (e.g., "src/index.ts", "README.md")'),ref:V.string().optional().describe('Git reference (branch, tag, or commit, defaults to "main")')},async execute(e){try{let t=await Jd(e.owner,e.repo,e.path,{ref:e.ref});return JSON.stringify({owner:e.owner,repo:e.repo,path:e.path,ref:e.ref,content:t.content,url:t.url,language:t.language},null,2)}catch(t){if(t instanceof E)throw Error(`GitHub file fetch timeout: ${t.message}`);throw t}}}),rt={...qd,serverName:"grep_app",category:"code",rateLimit:60},it={...Vd,serverName:"grep_app",category:"code",rateLimit:60},Dn={name:"grep_app",description:"Search across public GitHub repositories with support for file content fetching",version:"1.0.0",tools:[rt,it],configSchema:{githubToken:"string (optional, GitHub personal access token)",timeout:"number (ms, default: 30000)",maxResults:"number (1-30, default: 10)",rateLimitDelay:"number (ms, default: 1000)",defaultExtensions:'array of strings (default: ["ts", "js", "tsx", "jsx", "py", "java", "go", "rs"])',defaultLanguages:'array of strings (default: ["TypeScript", "JavaScript", "Python", "Java", "Go", "Rust"])',enabled:"boolean (default: true)"},initialize:async(e)=>{await Ud(e)},shutdown:async()=>{Mn.reset()},healthCheck:async()=>{return G.enabled!==!1}};var ms=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",fs=k("mcp-index"),hs=[wn,Pn,Dn];async function ys(e={}){for(let t of hs){let n=e[t.name]||{};if(t.initialize)try{await t.initialize(n)}catch(r){if(ms)fs.warn(`Failed to initialize MCP server '${t.name}':`,r);throw r}}}async function bs(){for(let e of hs)if(e.shutdown)try{await e.shutdown()}catch(t){if(ms)fs.warn(`Failed to shutdown MCP server '${e.name}':`,t)}}import*as Te from"fs";import*as X from"path";import*as xs from"os";var ws=/^---\s*\n([\s\S]*?)\n---\s*\n/;function Gd(e){let t=e.match(ws);if(!t)return{};let n=t[1],r={},i=n.split(`
2095
+ `);for(let o of i){let a=o.indexOf(":");if(a===-1)continue;let s=o.slice(0,a).trim(),c=o.slice(a+1).trim();if(s==="true")r[s]=!0;else if(s==="false")r[s]=!1;else if(!isNaN(Number(c)))r[s]=Number(c);else r[s]=c}return r}async function fe(e,t,n=new Set,r=""){let i=[];if(!Te.existsSync(e))return i;let o=X.resolve(e);if(n.has(o))return i;n.add(o);try{let a=await Te.promises.readdir(e,{withFileTypes:!0});for(let s of a){let c=X.join(e,s.name);if(s.isDirectory()){let l=r?`${r}:${s.name}`:s.name,u=await fe(c,t,n,l);i.push(...u)}else if(s.isFile()&&s.name.endsWith(".md"))try{let l=await Te.promises.readFile(c,"utf-8"),u=Gd(l),p=l.replace(ws,"").trim(),g=s.name.slice(0,-3),m=r?`${r}:${g}`:g;i.push({name:m,path:c,definition:{name:m,description:u.description||"",template:p,agent:u.agent,model:u.model,subtask:u.subtask,argumentHint:u.argumentHint},scope:t,prefix:r})}catch(l){console.error(`[command-loader] Error loading command from ${c}:`,l)}}}catch(a){console.error(`[command-loader] Error reading commands directory ${e}:`,a)}return i}function vs(){let e=xs.homedir();return{user:X.join(e,".config","opencode","commands"),project:X.join(process.cwd(),".claude","commands"),opencodeGlobal:X.join(e,".config","opencode","commands"),opencodeProject:X.join(process.cwd(),".opencode","commands")}}var ks=["builtin","user","opencode","opencode-project","project","skill"],Ss=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",As=k("command-loader");class Nn{commands=new Map;options;constructor(e={}){this.options=e}async loadAll(){let e=vs(),t=[];if(!this.isScopeDisabled("user")){let i=this.options.userCommandsDir||e.user;t.push(fe(i,"user"))}if(!this.isScopeDisabled("project")){let i=this.options.projectCommandsDir||e.project;t.push(fe(i,"project"))}if(!this.isScopeDisabled("opencode")){let i=this.options.opencodeGlobalCommandsDir||e.opencodeGlobal;t.push(fe(i,"opencode"))}if(!this.isScopeDisabled("opencode-project")){let i=this.options.opencodeProjectCommandsDir||e.opencodeProject;t.push(fe(i,"opencode-project"))}let n=await Promise.all(t),r=n.flat();for(let i of r)this.registerCommand(i);if(Ss)As.debug(`Loaded ${this.commands.size} commands from ${n.length} sources`);return this.commands}registerCommand(e){let t=this.commands.get(e.name);if(t){let n=ks.indexOf(e.scope),r=ks.indexOf(t.scope);if(n>r){if(this.commands.set(e.name,e),Ss)As.debug(`Overriding ${e.name} from ${t.scope} with ${e.scope}`)}}else this.commands.set(e.name,e)}getCommand(e){return this.commands.get(e)}listCommands(){return Array.from(this.commands.values())}clear(){this.commands.clear()}isScopeDisabled(e){return this.options.disabledScopes?.includes(e)||!1}}var ot=null;async function Cs(){if(!ot)ot=new Nn,await ot.loadAll();return ot}import{spawn as Ps}from"child_process";import{existsSync as Es}from"node:fs";import zd from"node:path";var Yd=300000,st=3,_=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",j=k("skill-mcp-manager");class On{clients=new Map;pendingConnections=new Map;idleTimeout;maxConnections;cleanupInterval=null;constructor(e={}){this.idleTimeout=e.idleTimeout||Yd,this.maxConnections=e.maxConnections||10,this.startCleanupInterval(),this.setupProcessCleanup()}async initialize(){if(_)j.debug("Manager initialized")}getClientKey(e){return`${e.skillName}:${e.mcpName}:${e.sessionID}`}processExists(e){try{return process.kill(e,0),!0}catch{return!1}}async getOrCreateClient(e,t){let n=this.getClientKey(e),r=this.pendingConnections.get(n);if(r)return r.promise;let i=this.clients.get(n);if(i&&this.isClientHealthy(i))return i.lastUsed=Date.now(),i.client;let o=new Promise((a,s)=>{this.createClientProcess(e,t).then((c)=>{this.clients.set(n,{client:c,process:c.process,lastUsed:Date.now(),pendingRequests:0}),a(c)}).catch((c)=>{s(c)})});this.pendingConnections.set(n,{promise:o,resolve:o,reject:o});try{return await o}finally{this.pendingConnections.delete(n)}}async createClientProcess(e,t){let{command:n,args:r,env:i={}}=t;if(_)j.debug(`Starting MCP process for ${e.skillName}:${e.mcpName}`);let o=await this.resolveCommand(n);if(!o)throw Error(`MCP command '${n}' not found. Install it and ensure it is on your PATH.`);return new Promise((a,s)=>{let c=0,l=null,u=()=>{l=Ps(o,r,{env:{...process.env,...i},stdio:["pipe","pipe","pipe"]});let p=null,g=0,m=new Map,f=(b,y)=>{let C=++g,D={jsonrpc:"2.0",id:C,method:b,params:y};if(l?.stdin)l.stdin.write(JSON.stringify(D)+`
2096
+ `);return new Promise(($,N)=>{m.set(C,{resolve:$,reject:N}),setTimeout(()=>{m.delete(C),N(Error(`Request ${b} timeout`))},30000)})};if(p={listTools:async()=>{return(await f("tools/list",{})).result?.tools||[]},listResources:async()=>{return(await f("resources/list",{})).result?.resources||[]},listPrompts:async()=>{return(await f("prompts/list",{})).result?.prompts||[]},callTool:async(b,y)=>{return(await f("tools/call",{name:b,arguments:y})).result},readResource:async(b)=>{return(await f("resources/read",{uri:b})).result},getPrompt:async(b,y)=>{return(await f("prompts/get",{name:b,arguments:y||{}})).result},close:async()=>{if(l)l.kill()}},l.stdout){let b=(y)=>{let C=y.toString().split(`
2097
+ `);for(let D of C){if(!D.trim())continue;try{let $=JSON.parse(D),{id:N,result:Me,error:he}=$;if(N!==void 0&&m.has(N)){let ye=m.get(N);if(m.delete(N),he)ye.reject(Error(he.message));else ye.resolve(Me)}}catch($){if(_)j.warn("Failed to parse response:",$)}}};l.stdout.on("data",b),l.on("error",(y)=>{if(_)j.warn(`MCP process error for ${e.skillName}:${e.mcpName}:`,y);if(y?.code==="ENOENT"){s(Error(`MCP command '${n}' not found.`));return}if(c<st){if(c++,_)j.debug(`Retrying connection (${c}/${st})`);setTimeout(u,1000*c)}else s(y)}),l.on("exit",(y,C)=>{if(_)j.debug(`MCP process exited for ${e.skillName}:${e.mcpName} with code ${y}, signal ${C}`);if(c<st&&y!==0){if(c++,_)j.debug(`Retrying connection (${c}/${st})`);setTimeout(u,1000*c)}else if(p&&y===0)a(p)}),setTimeout(async()=>{try{await f("initialize",{protocolVersion:"2024-11-05",capabilities:{},clientInfo:{name:"kraken-code",version:"5.0.0"}}),await f("notifications/initialized",{}),a(p)}catch(y){s(y)}},500)}};u()})}async resolveCommand(e){if(zd.isAbsolute(e)&&Es(e))return e;if(e.includes("/")||e.includes("\\"))return Es(e)?e:null;let t=process.platform==="win32"?"where":"which";try{let n=Ps(t,[e],{stdio:["ignore","pipe","pipe"]}),r=await this.readStream(n.stdout);if(await new Promise((i)=>{n.on("close",()=>i())}),n.exitCode===0)return r.trim().split(`
2098
+ `)[0]?.trim()??null}catch{return null}return null}readStream(e){if(!e)return Promise.resolve("");return new Promise((t)=>{let n="";e.on("data",(r)=>{n+=r.toString()}),e.on("end",()=>t(n)),e.on("error",()=>t(n))})}isClientHealthy(e){let t=e.process;if(!t||!t.pid)return!1;return this.processExists(t.pid)}async listTools(e,t){return(await this.getOrCreateClient(e,t)).listTools()}async listResources(e,t){return(await this.getOrCreateClient(e,t)).listResources()}async listPrompts(e,t){return(await this.getOrCreateClient(e,t)).listPrompts()}async callTool(e,t,n,r){return(await this.getOrCreateClient(e,t)).callTool(n,r)}async readResource(e,t,n){return(await this.getOrCreateClient(e,t)).readResource(n)}async getPrompt(e,t,n,r){return(await this.getOrCreateClient(e,t)).getPrompt(n,r)}async disconnectSession(e){let t=[];for(let[n,r]of this.clients.entries())if(n.includes(`:${e}`))await r.client.close(),t.push(n);for(let n of t)this.clients.delete(n);if(_)j.debug(`Disconnected ${t.length} clients for session ${e}`)}async disconnectAll(){let e=[];for(let t of this.clients.values())e.push(t.client.close());if(await Promise.all(e),this.clients.clear(),_)j.debug("Disconnected all clients")}getConnectedServers(){let e=new Set;for(let t of this.clients.keys()){let n=t.split(":");if(n.length>=2)e.add(`${n[0]}:${n[1]}`)}return Array.from(e)}isConnected(e){let t=this.getClientKey(e),n=this.clients.get(t);if(!n)return!1;return this.isClientHealthy(n)}startCleanupInterval(){this.cleanupInterval=setInterval(()=>{this.cleanupIdleClients()},60000)}cleanupIdleClients(){let e=Date.now(),t=[];for(let[n,r]of this.clients.entries())if(e-r.lastUsed>this.idleTimeout)t.push(n);if(t.length>0){if(_)j.debug(`Cleaning up ${t.length} idle clients`);for(let n of t)this.clients.get(n).client.close(),this.clients.delete(n)}}setupProcessCleanup(){let e=async(t)=>{if(_)j.debug(`Received ${t}, cleaning up...`);if(await this.disconnectAll(),this.cleanupInterval)clearInterval(this.cleanupInterval);process.exit(0)};process.on("SIGINT",e),process.on("SIGTERM",e)}}var at=null;async function Rs(){if(!at)at=new On,await at.initialize();return at}function Xd(){return{Kraken:lt,Atlas:dt,Nautilus:ut,Abyssal:pt,Coral:gt,Siren:mt,Scylla:ft,Pearl:ht,Maelstrom:xt,Leviathan:bt,Poseidon:yt,Cartographer:wt}}function Qd(...e){let t={},n=[];for(let r of e){if(r.config)n.push(r.config);for(let[i,o]of Object.entries(r))if(i!=="config")if(i==="tool"&&typeof o==="object"&&o!==null)if(!t[i]||typeof t[i]!=="object")t[i]=o;else t[i]={...t[i],...o};else t[i]=o}if(n.length>0)t.config=async(r)=>{for(let i of n)await i(r)};return t}var Zd={ast_grep_search:Vr,ast_grep_replace:Gr,grep:Zr,session_list:$t,session_read:Ft,session_search:Lt,session_info:jt,"kraken-compress":Sr,"model-switcher":Cr,"ralph-loop":ei,lsp_hover:Wi,lsp_goto_definition:Hi,lsp_find_references:Ui,lsp_document_symbols:Bi,lsp_workspace_symbols:Ji,lsp_diagnostics:Ki,lsp_prepare_rename:qi,lsp_rename:Vi,lsp_code_actions:Gi,lsp_code_action_resolve:zi,lsp_servers:Yi,"call-kraken-agent":ni,websearch:Qe,webfetch:Ze,"context7-search":tt,"context7-get":nt,"grep-search":rt,"grep-get-file":it,learning_add_experience:wi,learning_search_experiences:vi,learning_add_knowledge_node:ki,learning_search_knowledge_nodes:Si,learning_link_knowledge_nodes:Ai,learning_record_pattern:Ci,learning_list_patterns:Pi,learning_get_review_queue:Ei,learning_review_node:Ri,learning_create_state_machine:Ti,learning_list_state_machines:Mi},eu=async(e)=>{let t=k("plugin-main"),n=[],r=eo(e,{autoActivate:!0});Object.assign(n,r);let i=Vn(),o=Qt(e,{config:{enabled:i?.enabled??!0,recordTodos:!0,recordTranscripts:!0}});Object.assign(n,o);let a=to(e,{config:i});Object.assign(n,a),n.push({tool:Zd}),n.push({config:async(s)=>{if(!s.agent)s.agent={};let c=Xd();for(let[l,u]of Object.entries(c))if(!s.agent[l])s.agent[l]=u;if(!s.default_agent&&s.agent.Kraken)s.default_agent="Kraken";await Promise.all([(async()=>{try{await Cs(),t.debug("Command loader initialized")}catch(l){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing command loader:",l)}})(),(async()=>{try{await Rs(),t.debug("Skill MCP manager initialized")}catch(l){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing skill MCP manager:",l)}})(),(async()=>{try{let l=s.mcp||{};await ys(l),t.debug("MCP servers initialized")}catch(l){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing MCP servers:",l)}})(),(async()=>{try{await Bt(),t.debug("Learning system initialized")}catch(l){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing learning system:",l)}})()])}});try{n.push(ro(e)),n.push({tool:lo(e).tools}),n.push(po(e)),n.push(_r(e)),n.push(go(e)),n.push(mo(e)),n.push(fo(e)),n.push(ho(e)),n.push(yo(e)),n.push(Jr(e)),n.push(bo(e)),n.push(xo(e)),n.push(wo(e)),n.push(ko(e)),n.push(So(e)),n.push(Po(e)),n.push(Eo(e)),n.push(Ro(e)),n.push($o(e)),n.push(_o(e)),n.push(Bo(e)),n.push(on(e)),n.push(sn(e)),n.push(an(e)),n.push(qo()),n.push(Go()),n.push(es()),n.push(as())}catch(s){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing hooks:",s)}return n.push({"tool.execute.after":async(s,c)=>{if(!c.output)return;let{tool:l,sessionID:u}=s;if(c.output&&c.output.toolOutput)await _e(u,l,c.output.toolInput,c.output.toolOutput);if(u&&(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"))console.log(`[storage-hooks] Tool ${l} completed for session ${u}`)}}),process.on("exit",async()=>{try{await bs()}catch(s){console.error("Kraken Code: Error shutting down services",s)}}),Qd(...n)},_y=eu;export{_y as default};