kraken-code 1.3.2 → 1.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -26,7 +26,7 @@ ${r}`);return{name:n.name,status:"fail",message:i,duration:Math.round(performanc
26
26
  }
27
27
  `}async function se(){let n=jn(),t=ne(),e,i;if(t)try{e=Yt(t.path,"utf-8"),i=t.format}catch(r){return{success:!1,message:`Failed to read config: ${r instanceof Error?r.message:String(r)}`}}else{let r=D.dirname(n.configJson);if(!M(r))try{let{mkdirSync:a}=await import("fs");a(r,{recursive:!0})}catch(a){return{success:!1,message:`Failed to create config directory: ${a instanceof Error?a.message:String(a)}`}}e=ee(),i="json"}try{let r=te(e,i);Bt(t?.path??n.configJson,r,"utf-8");let a=t?.path??n.configJson;if(r===e)return{success:!0,message:`Plugin "${R}" is already registered`,configPath:a};return{success:!0,message:`Plugin "${R}" registered successfully`,configPath:a}}catch(r){return{success:!1,message:`Failed to register plugin: ${r instanceof Error?r.message:String(r)}`}}}function ie(n){if(n.success){if(console.log(q.green(`
28
28
  ${String.fromCodePoint(10003)} ${n.message}`)),n.configPath)console.log(q.dim(` Config: ${n.configPath}`))}else console.log(q.red(`
29
- ${String.fromCodePoint(10007)} ${n.message}`))}async function yn(){let n=await se();ie(n),process.exit(n.success?0:1)}import{writeFileSync as Nn,existsSync as v,mkdirSync as W,readFileSync as X}from"fs";import*as I from"path";import*as T from"os";import u from"picocolors";var __dirname="/home/runner/work/kraken/kraken/src/cli";async function wn(n){if(n.verbose)console.log(u.dim("\uD83D\uDC19 Initializing Kraken Code with verbose output..."));else console.log(u.cyan("\uD83D\uDC19 Initializing Kraken Code..."));let t=I.join(T.homedir(),".config","opencode"),e=I.join(t,"opencode.json"),i=I.join(t,"kraken-code.json");if(!v(t))try{if(W(t,{recursive:!0}),n.verbose)console.log(u.dim(`\u2139\uFE0F Created config directory: ${t}`));console.log(u.green(`\u2713 Created config directory: ${t}`))}catch(p){console.error(u.red(`\u274C Failed to create config directory: ${p instanceof Error?p.message:String(p)}`)),console.error(u.dim("Try running with elevated permissions or check permissions for ~/.config/opencode")),process.exit(1)}else if(n.verbose)console.log(u.dim(`\u2139\uFE0F Config directory already exists: ${t}`));let{minimal:r,full:a}=n,l={default_agent:"Kraken",default_agents:["Kraken","Cartographer"],blitzkrieg:{enabled:!0,testPlan:{requiredBeforeImplementation:!0,minTestCases:3,requireCoverageThreshold:!0,coverageThresholdPercent:80},tddWorkflow:{enforceWriteTestFirst:!0,forbidCodeWithoutTest:!0,allowRefactorWithoutTest:!0},evidence:{requireTestExecutionEvidence:!0,requireAssertionEvidence:!0,requireEdgeCaseEvidence:!0},plannerConstraints:{requireTestStep:!0,requireVerificationStep:!0,maxImplementationStepComplexity:3}},kratos:{enabled:!0,autoSave:!0,storagePath:"~/.kratos"},modes:{blitzkrieg:{enabled:!0},ultrathink:{enabled:!0,thinkingBudget:32000,autoVariantSwitch:!0},ultrawork:{enabled:!0,parallelAgents:4},search:{enabled:!0,maxResults:50},analyze:{enabled:!0,consultationPhases:3}}},g={};if(v(i))try{if(g=JSON.parse(X(i,"utf-8")),n.verbose)console.log(u.dim(`\u2139\uFE0F Found existing Kraken configuration at ${i}, merging with new settings`))}catch(p){console.error(u.red(`\u274C Failed to read existing Kraken configuration: ${p instanceof Error?p.message:String(p)}`)),console.error(u.dim("This might be a corrupted config file. Try removing it manually and re-running init.")),g={}}else if(n.verbose)console.log(u.dim(`\u2139\uFE0F No existing Kraken configuration found at ${i}`));let f={...l,...g,default_agents:l.default_agents};try{if(Nn(i,JSON.stringify(f,null,2)),n.verbose)console.log(u.dim(`\u2139\uFE0F Wrote configuration with ${Object.keys(f).length} keys`));console.log(u.green(`\u2713 Kraken Code configuration written to ${i}`))}catch(p){console.error(u.red(`\u274C Failed to write Kraken configuration: ${p instanceof Error?p.message:String(p)}`)),console.error(u.dim("Check permissions for the config file and try again.")),process.exit(1)}let c={};if(v(e))try{if(c=JSON.parse(X(e,"utf-8")),n.verbose)console.log(u.dim(`\u2139\uFE0F Found existing OpenCode configuration at ${e}`))}catch(p){console.error(u.red(`\u274C Failed to read OpenCode configuration: ${p instanceof Error?p.message:String(p)}`)),console.error(u.dim("This might be a corrupted opencode.json file. Try removing it manually and re-running init.")),c={}}else if(n.verbose)console.log(u.dim(`\u2139\uFE0F No existing OpenCode configuration found at ${e}`));let P={...c,plugin:Array.from(new Set([...c.plugin||[],"kraken-code"]))};if(n.verbose)console.log(u.dim(`\u2139\uFE0F Adding kraken-code to plugin list (current plugins: ${c.plugin||[]})`));try{if(Nn(e,JSON.stringify(P,null,2)),n.verbose)console.log(u.dim(`\u2139\uFE0F Updated OpenCode configuration with ${P.plugin.length} plugins`));console.log(u.green(`\u2713 OpenCode configuration updated at ${e}`))}catch(p){console.error(u.red(`\u274C Failed to update OpenCode configuration: ${p instanceof Error?p.message:String(p)}`)),console.error(u.dim("Check permissions for the config file and try again.")),process.exit(1)}try{if(await re(),n.verbose)console.log(u.dim("\u2139\uFE0F Skill templates installation completed successfully"));console.log(u.green("\u2713 Skill templates installed successfully"))}catch(p){console.error(u.yellow(`\u26A0\uFE0F Failed to install skill templates: ${p instanceof Error?p.message:String(p)}`)),console.error(u.dim("You can install them manually later by copying templates/skills to ~/.config/opencode/skill"))}if(console.log(u.green(`
29
+ ${String.fromCodePoint(10007)} ${n.message}`))}async function yn(){let n=await se();ie(n),process.exit(n.success?0:1)}import{writeFileSync as Nn,existsSync as v,mkdirSync as W,readFileSync as X}from"fs";import*as I from"path";import*as T from"os";import u from"picocolors";var __dirname="/home/runner/work/kraken/kraken/src/cli";async function wn(n){if(n.verbose)console.log(u.dim("\uD83D\uDC19 Initializing Kraken Code with verbose output..."));else console.log(u.cyan("\uD83D\uDC19 Initializing Kraken Code..."));let t=I.join(T.homedir(),".config","opencode"),e=I.join(t,"opencode.json"),i=I.join(t,"kraken-code.json");if(!v(t))try{if(W(t,{recursive:!0}),n.verbose)console.log(u.dim(`\u2139\uFE0F Created config directory: ${t}`));console.log(u.green(`\u2713 Created config directory: ${t}`))}catch(p){console.error(u.red(`\u274C Failed to create config directory: ${p instanceof Error?p.message:String(p)}`)),console.error(u.dim("Try running with elevated permissions or check permissions for ~/.config/opencode")),process.exit(1)}else if(n.verbose)console.log(u.dim(`\u2139\uFE0F Config directory already exists: ${t}`));let{minimal:r,full:a}=n,l={default_agent:"Kraken",blitzkrieg:{enabled:!0,testPlan:{requiredBeforeImplementation:!0,minTestCases:3,requireCoverageThreshold:!0,coverageThresholdPercent:80},tddWorkflow:{enforceWriteTestFirst:!0,forbidCodeWithoutTest:!0,allowRefactorWithoutTest:!0},evidence:{requireTestExecutionEvidence:!0,requireAssertionEvidence:!0,requireEdgeCaseEvidence:!0},plannerConstraints:{requireTestStep:!0,requireVerificationStep:!0,maxImplementationStepComplexity:3}},kratos:{enabled:!0,autoSave:!0,storagePath:"~/.kratos"},modes:{blitzkrieg:{enabled:!0},ultrathink:{enabled:!0,thinkingBudget:32000,autoVariantSwitch:!0},ultrawork:{enabled:!0,parallelAgents:4},search:{enabled:!0,maxResults:50},analyze:{enabled:!0,consultationPhases:3}}},g={};if(v(i))try{if(g=JSON.parse(X(i,"utf-8")),n.verbose)console.log(u.dim(`\u2139\uFE0F Found existing Kraken configuration at ${i}, merging with new settings`))}catch(p){console.error(u.red(`\u274C Failed to read existing Kraken configuration: ${p instanceof Error?p.message:String(p)}`)),console.error(u.dim("This might be a corrupted config file. Try removing it manually and re-running init.")),g={}}else if(n.verbose)console.log(u.dim(`\u2139\uFE0F No existing Kraken configuration found at ${i}`));let f={...l,...g};try{if(Nn(i,JSON.stringify(f,null,2)),n.verbose)console.log(u.dim(`\u2139\uFE0F Wrote configuration with ${Object.keys(f).length} keys`));console.log(u.green(`\u2713 Kraken Code configuration written to ${i}`))}catch(p){console.error(u.red(`\u274C Failed to write Kraken configuration: ${p instanceof Error?p.message:String(p)}`)),console.error(u.dim("Check permissions for the config file and try again.")),process.exit(1)}let c={};if(v(e))try{if(c=JSON.parse(X(e,"utf-8")),n.verbose)console.log(u.dim(`\u2139\uFE0F Found existing OpenCode configuration at ${e}`))}catch(p){console.error(u.red(`\u274C Failed to read OpenCode configuration: ${p instanceof Error?p.message:String(p)}`)),console.error(u.dim("This might be a corrupted opencode.json file. Try removing it manually and re-running init.")),c={}}else if(n.verbose)console.log(u.dim(`\u2139\uFE0F No existing OpenCode configuration found at ${e}`));let P={...c,plugin:Array.from(new Set([...c.plugin||[],"kraken-code"]))};if(n.verbose)console.log(u.dim(`\u2139\uFE0F Adding kraken-code to plugin list (current plugins: ${c.plugin||[]})`));try{if(Nn(e,JSON.stringify(P,null,2)),n.verbose)console.log(u.dim(`\u2139\uFE0F Updated OpenCode configuration with ${P.plugin.length} plugins`));console.log(u.green(`\u2713 OpenCode configuration updated at ${e}`))}catch(p){console.error(u.red(`\u274C Failed to update OpenCode configuration: ${p instanceof Error?p.message:String(p)}`)),console.error(u.dim("Check permissions for the config file and try again.")),process.exit(1)}try{if(await re(),n.verbose)console.log(u.dim("\u2139\uFE0F Skill templates installation completed successfully"));console.log(u.green("\u2713 Skill templates installed successfully"))}catch(p){console.error(u.yellow(`\u26A0\uFE0F Failed to install skill templates: ${p instanceof Error?p.message:String(p)}`)),console.error(u.dim("You can install them manually later by copying templates/skills to ~/.config/opencode/skill"))}if(console.log(u.green(`
30
30
  \uD83C\uDF89 Kraken Code initialized successfully!`)),console.log(u.dim(`
31
31
  Next steps:`)),console.log(u.dim(" 1. Run: opencode")),console.log(u.dim(" 2. Use 'blitz' or 'blz' to activate Blitzkrieg Mode")),n.verbose)console.log(u.dim(`
32
32
  \uD83D\uDD0D Verifying installation with detailed output...`));else console.log(u.dim(`
@@ -43,4 +43,4 @@ Active Modes:`)),console.log(` ${l.join(", ")}`)}}import*as b from"path";import
43
43
  \uD83D\uDDD1\uFE0F Removing files...`));if(l.forEach((c)=>{try{if(ae(c),n.verbose)console.log(m.dim(`\u2139\uFE0F Removed ${c}`));else console.log(m.green(`\u2713 Removed ${c}`))}catch(P){console.log(m.yellow(`\u26A0\uFE0F Could not remove ${c}: ${P instanceof Error?P.message:String(P)}`))}}),n.verbose)console.log(m.dim("\uD83D\uDDD1\uFE0F Removing directories..."));else console.log(m.yellow("\uD83D\uDDD1\uFE0F Removing directories..."));if(f.forEach((c)=>{try{if(oe(c,{recursive:!0,force:!0}),n.verbose)console.log(m.dim(`\u2139\uFE0F Removed ${c}`));else console.log(m.green(`\u2713 Removed ${c}`))}catch(P){console.log(m.yellow(`\u26A0\uFE0F Could not remove ${c}: ${P instanceof Error?P.message:String(P)}`))}}),$(i))try{let c=A(Ln(i,"utf-8"));if(c.plugin){let P=c.plugin.filter((p)=>p!=="kraken-code");if(P.length!==c.plugin.length){let p={...c,plugin:P};if(ce(i,JSON.stringify(p,null,2)),n.verbose)console.log(m.dim("\u2139\uFE0F Updated opencode.json plugin list (removed kraken-code)"));console.log(m.green("\u2713 Removed kraken-code from opencode.json plugin list"))}else if(n.verbose)console.log(m.dim("\u2139\uFE0F kraken-code was not in opencode.json plugin list"))}}catch(c){console.log(m.yellow(`\u26A0\uFE0F Could not update opencode.json: ${c instanceof Error?c.message:String(c)}`))}else if(n.verbose)console.log(m.dim("\u2139\uFE0F opencode.json not found, skipping plugin list update"));if(console.log(m.green(`
44
44
  \uD83C\uDF89 Kraken Code uninstalled successfully!`)),n.verbose)console.log(m.dim(`
45
45
  \uD83D\uDCCB Summary of changes:`)),console.log(m.dim(" - Configuration files removed")),console.log(m.dim(" - Skill templates removed")),console.log(m.dim(" - Plugin registration removed from opencode.json"));console.log(m.dim(`
46
- To reinstall, run: kraken-code install`))}function Dn(n){n.command("uninstall").description("Uninstall and deregister Kraken Code plugin").option("--dry-run","Show what would be removed without actually removing").option("-v, --verbose","Show detailed output").action(async(t)=>{await ue(t)})}var $n="1.3.2";var E=new pe;E.name("kraken-code").description("Kraken Code CLI - Unified OpenCode Plugin Manager").version($n);E.command("install").description("Install and register Kraken Code plugin").action(async()=>{await yn()});E.command("init").description("Initialize Kraken Code with recommended configuration").option("--minimal","Minimal setup (agents only)").option("--full","Full setup (all features)").option("-v, --verbose","Show detailed output").action(async(n)=>{await wn(n)});E.command("status").description("Show Kraken Code installation status").action(async()=>{await bn()});Dn(E);E.command("doctor").description("Run system checks and diagnostics").option("-c, --category <category>","Run checks for a specific category").option("--json","Output results as JSON").option("-v, --verbose","Show detailed output").action(async(n)=>{await kn({category:n.category,json:n.json,verbose:n.verbose})});E.parse(process.argv);if(!process.argv.slice(2).length)E.outputHelp();
46
+ To reinstall, run: kraken-code install`))}function Dn(n){n.command("uninstall").description("Uninstall and deregister Kraken Code plugin").option("--dry-run","Show what would be removed without actually removing").option("-v, --verbose","Show detailed output").action(async(t)=>{await ue(t)})}var $n="1.3.5";var E=new pe;E.name("kraken-code").description("Kraken Code CLI - Unified OpenCode Plugin Manager").version($n);E.command("install").description("Install and register Kraken Code plugin").action(async()=>{await yn()});E.command("init").description("Initialize Kraken Code with recommended configuration").option("--minimal","Minimal setup (agents only)").option("--full","Full setup (all features)").option("-v, --verbose","Show detailed output").action(async(n)=>{await wn(n)});E.command("status").description("Show Kraken Code installation status").action(async()=>{await bn()});Dn(E);E.command("doctor").description("Run system checks and diagnostics").option("-c, --category <category>","Run checks for a specific category").option("--json","Output results as JSON").option("-v, --verbose","Show detailed output").action(async(n)=>{await kn({category:n.category,json:n.json,verbose:n.verbose})});E.parse(process.argv);if(!process.argv.slice(2).length)E.outputHelp();
package/dist/index.js CHANGED
@@ -1991,7 +1991,7 @@ Always provide structured, machine-parsable output:
1991
1991
 
1992
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
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","Cartographer","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","Cartographer","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","Cartographer","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)+`
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
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.
1996
1996
 
1997
1997
  Your methodology:
@@ -2009,13 +2009,13 @@ Don't re-plan—just iterate toward the specific promise criteria.
2009
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
2010
  ${g}
2011
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), Pearl (testing), or Cartographer (advanced planning).",args:{agent:ti.enum(["Atlas","Nautilus","Abyssal","Coral","Siren","Scylla","Pearl","Leviathan","Maelstrom","Poseidon","Cartographer"]).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",Cartographer:"Advanced planning with hierarchical task decomposition and subagent delegation"}[t]||"Execute your specialized function";return`Calling @${t.toLowerCase()} for task: ${n||i}`}});import{tool as L}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=L({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=L({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=L({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=L({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=L({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=L({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=L({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=L({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=L({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=L({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=L({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 _}from"@opencode-ai/plugin";import{z as w}from"zod";var Wi=_({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=_({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=_({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=_({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=_({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=_({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=_({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=_({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=_({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=_({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=_({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(`
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 L}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=L({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=L({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=L({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=L({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=L({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=L({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=L({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=L({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=L({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=L({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=L({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 _}from"@opencode-ai/plugin";import{z as w}from"zod";var Wi=_({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=_({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=_({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=_({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=_({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=_({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=_({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=_({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=_({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=_({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=_({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
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
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}
2015
2015
 
2016
2016
  Context:
2017
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","Cartographer"]).describe(`Name of subagent to delegate to. Each agent has specialized expertise:
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:
2019
2019
  - Nautilus: Codebase search, pattern finding, symbol analysis
2020
2020
  - Abyssal: External research, documentation lookup, API discovery
2021
2021
  - Maelstrom: Architecture design, system analysis, trade-off evaluation
@@ -2024,8 +2024,7 @@ ${t}`}function sl(e){return e.filter((n)=>n.type==="text"||n.type==="reasoning")
2024
2024
  - Leviathan: System design, structural analysis, large-scale architecture
2025
2025
  - Poseidon: Planning, requirement analysis, test plan creation
2026
2026
  - Scylla: Code review, test coverage analysis, quality assurance
2027
- - Pearl: Testing, test creation, test execution
2028
- - Cartographer: Advanced planning with hierarchical task decomposition and subagent delegation`),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(`
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(`
2029
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(`
2030
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(`
2031
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(`
@@ -2096,4 +2095,4 @@ ${g}`)}},"tool.execute.after":async(e,t)=>{if(e.tool==="todowrite"){let i=t?.tod
2096
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,j=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",W=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)W.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)W.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)+`
2097
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(`
2098
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)W.warn("Failed to parse response:",$)}}};l.stdout.on("data",b),l.on("error",(y)=>{if(j)W.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)W.debug(`Retrying connection (${c}/${st})`);setTimeout(u,1000*c)}else s(y)}),l.on("exit",(y,C)=>{if(j)W.debug(`MCP process exited for ${e.skillName}:${e.mcpName} with code ${y}, signal ${C}`);if(c<st&&y!==0){if(c++,j)W.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(`
2099
- `)[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)W.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)W.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)W.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)W.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[u,p]of Object.entries(c))if(!s.agent[u])s.agent[u]=p;if(!s.default_agent&&s.agent.Kraken)s.default_agent="Kraken";let l=["Kraken","Cartographer"];if(!s.default_agents)s.default_agents=l;else if(Array.isArray(s.default_agents)){for(let u of l)if(!s.default_agents.includes(u))s.default_agents.push(u)}await Promise.all([(async()=>{try{await Cs(),t.debug("Command loader initialized")}catch(u){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing command loader:",u)}})(),(async()=>{try{await Rs(),t.debug("Skill MCP manager initialized")}catch(u){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing skill MCP manager:",u)}})(),(async()=>{try{let u=s.mcp||{};await ys(u),t.debug("MCP servers initialized")}catch(u){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing MCP servers:",u)}})(),(async()=>{try{await Bt(),t.debug("Learning system initialized")}catch(u){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing learning system:",u)}})()])}});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};
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)W.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)W.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)W.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)W.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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kraken-code",
3
- "version": "1.3.2",
3
+ "version": "1.3.5",
4
4
  "description": "Kraken Code - Transforms OpenCode into an autonomous, high-density development environment",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -91,7 +91,6 @@
91
91
  "hono": "^4.10.4",
92
92
  "js-yaml": "^4.1.1",
93
93
  "jsonc-parser": "^3.3.1",
94
- "kraken-code": "^1.3.1",
95
94
  "open": "^11.0.0",
96
95
  "picocolors": "^1.1.1",
97
96
  "picomatch": "^4.0.2",