kraken-code 1.5.2 → 1.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
- import{createRequire as Bo}from"node:module";var Ko=Object.defineProperty;var gn=(e,t)=>{for(var n in t)Ko(e,n,{get:t[n],enumerable:!0,configurable:!0,set:(i)=>t[n]=()=>i})};var fn=(e,t)=>()=>(e&&(t=e(e=0)),t);var hn=Bo(import.meta.url);var Wr={};gn(Wr,{isTransientError:()=>Jc,isRecoverableError:()=>$t,isPermanentError:()=>Yc,getRecoveryMessage:()=>Vc,detectThinkingBlockOrderError:()=>Bc,detectErrorType:()=>qc,detectErrorFromOutput:()=>Kc});function qc(e,t){if(!e)return"no_error";let i=(e instanceof Error?e.message:String(e)).toLowerCase();for(let[r,a]of Object.entries(Ur))for(let s of a)if(s.test(i))return r;return"no_error"}function Kc(e){if(!e||typeof e!=="string")return null;let t=e.toLowerCase();for(let[n,i]of Object.entries(Ur))for(let r of i)if(r.test(t))return n;return null}function Bc(e){if(!e||e.length<2)return null;let t=e.map((i)=>{if(typeof i==="string")return i.trim();return""}).filter((i)=>i.length>0),n=[/thinking.*after.*reply/i,/thinking.*after.*response/i,/<!--thinking-->.*<!--\/thinking-->.*<!--thinking-->/i];for(let i of n){let r=t.join(`
2
- `);if(i.test(r))return"thinking_block_order"}return null}function $t(e){return["tool_result_missing","thinking_block_order","network_timeout"].includes(e)}function Jc(e){return["network_timeout","rate_limit"].includes(e)}function Yc(e){return["auth_error"].includes(e)}function Vc(e){return{tool_result_missing:"Tool result appears to be missing or empty",thinking_block_order:"Thinking blocks are in incorrect order",thinking_disabled_violation:"Thinking block found but thinking mode is disabled",network_timeout:"Network connection timed out",rate_limit:"Rate limit exceeded",auth_error:"Authentication failed",no_error:"No error detected"}[e]}var Ur;var jt=fn(()=>{Ur={tool_result_missing:[/Tool.*returned.*empty/i,/No.*tool.*output/i,/Tool.*result.*missing/i],thinking_block_order:[/Thinking.*block.*order/i,/thinking.*blocks.*must.*come.*before/i,/Invalid.*thinking.*order/i],thinking_disabled_violation:[/Thinking.*disabled.*but.*block.*found/i,/thinking.*block.*without.*mode/i,/thinking.*tag.*without.*enabled.*mode/i],network_timeout:[/network.*timeout/i,/connection.*timed.*out/i,/ETIMEDOUT/i],rate_limit:[/rate.*limit/i,/too.*many.*requests/i,/429.*Too.*Many.*Requests/i],auth_error:[/authentication.*failed/i,/invalid.*api.*key/i,/unauthorized/i],no_error:[/no error detected/i]}});var Hr={};gn(Hr,{retryWithBackoff:()=>il,attemptRecovery:()=>nl});async function nl(e,t,n){let i=tl[e];if(!i)return console.log("[session-recovery] No recovery strategy for error type: "+e),!1;if(!await i.canRecover(t))return console.log("[session-recovery] Cannot recover from "+e),!1;if(n?.skipConfirmation)return await i.recover(t);return console.log("[session-recovery] Recovery option: "+i.description),console.log("[session-recovery] [session recovered - continuing previous task]"),await i.recover(t)}async function il(e,t=3,n=1000){let i=null;for(let r=0;r<=t;r++)try{return await e()}catch(a){if(i=a instanceof Error?a:Error(String(a)),r<t){let s=n*Math.pow(2,r);console.log("[session-recovery] Retry "+(r+1)+"/"+t+" after "+s+"ms"),await new Promise(function(o){setTimeout(o,s)})}}throw i||Error("Max retries exceeded")}var zc,Gc,Xc,Qc,Zc,el,tl;var qr=fn(()=>{zc={errorType:"tool_result_missing",canRecover:async function(e){return e.sessionID!==void 0&&e.toolOutput===void 0},recover:async function(e){return console.log("[session-recovery] Attempting to recover tool_result_missing for session "+e.sessionID),console.log("[session-recovery] [session recovered - continuing previous task]"),!0},description:"Retry of tool execution or continue with alternative approach"},Gc={errorType:"thinking_block_order",canRecover:async function(e){return e.sessionID!==void 0&&e.thinkingBlocks!==void 0},recover:async function(e){if(console.log("[session-recovery] Recovering thinking_block_order by reordering blocks"),e.thinkingBlocks){let n=(Array.isArray(e.thinkingBlocks)?e.thinkingBlocks:[e.thinkingBlocks]).reverse();return console.log("[session-recovery] Reordered "+n.length+" thinking blocks"),!0}return!1},description:"Reorder thinking blocks to correct order"},Xc={errorType:"thinking_disabled_violation",canRecover:async function(){return!0},recover:async function(){return console.log("[session-recovery] Ignoring thinking_disabled_violation - will re-enable thinking mode"),!0},description:"Re-enable thinking mode in next request"},Qc={errorType:"network_timeout",canRecover:async function(){return!0},recover:async function(){return console.log("[session-recovery] Network timeout detected - will retry"),!0},description:"Retry of request with exponential backoff"},Zc={errorType:"rate_limit",canRecover:async function(){return!0},recover:async function(){return console.log("[session-recovery] Rate limit hit - implementing delay"),await new Promise(function(e){setTimeout(e,5000)}),!0},description:"Wait and retry with exponential backoff"},el={errorType:"auth_error",canRecover:async function(){return!1},recover:async function(){return console.log("[session-recovery] Authentication error - cannot recover automatically"),!1},description:"User must re-authenticate manually"},tl={tool_result_missing:zc,thinking_block_order:Gc,thinking_disabled_violation:Xc,network_timeout:Qc,rate_limit:Zc,auth_error:el}});import{readFileSync as ba}from"node:fs";import{existsSync as wa}from"node:fs";import*as wn from"path";import*as Sn from"os";import{z as d}from"zod";var Kl=d.enum(["Kraken","Cartographer","Maelstrom","Nautilus","Abyssal","Coral","Siren","Leviathan","Poseidon","Scylla","Pearl"]),Jo=d.enum(["ralph-loop","think-mode","context-window-monitor","session-recovery","comment-checker","keyword-detector","auto-slash-command","directory-agents-injector","directory-readme-injector","rules-injector","preemptive-compaction","compaction-context-injector","edit-error-recovery","empty-message-sanitizer","thinking-block-validator","tool-output-truncator","grep-output-truncator","empty-task-response-detector","blitzkrieg-test-plan-enforcer","blitzkrieg-tdd-workflow","blitzkrieg-evidence-verifier","blitzkrieg-planner-constraints"]),Yo=d.enum(["init-deep"]),te=d.enum(["allow","ask","deny"]),yn=d.record(d.string(),te),Vo=d.union([yn,d.object({edit:te.optional(),bash:d.union([te,yn]).optional(),webfetch:te.optional(),doom_loop:te.optional(),external_directory:te.optional()}).passthrough()]),O=d.object({model:d.string().optional(),temperature:d.number().optional(),top_p:d.number().optional(),prompt:d.string().optional(),prompt_append:d.string().optional(),tools:d.record(d.string(),d.boolean()).optional(),disable:d.boolean().optional(),description:d.string().optional(),mode:d.enum(["subagent","primary","all"]).optional(),color:d.string().optional(),permission:Vo.optional()}),zo=d.object({Kraken:O.optional(),Cartographer:O.optional(),Maelstrom:O.optional(),Nautilus:O.optional(),Abyssal:O.optional(),Coral:O.optional(),Siren:O.optional(),Leviathan:O.optional(),Poseidon:O.optional(),Scylla:O.optional(),Pearl:O.optional()}),Go=d.object({enabled:d.boolean().default(!0),default_max_iterations:d.number().default(24),state_dir:d.string().optional()}),Xo=d.object({defaultConcurrency:d.number().optional(),providerConcurrency:d.record(d.string(),d.number()).optional(),modelConcurrency:d.record(d.string(),d.number()).optional()}),Qo=d.object({enabled:d.boolean().default(!0),model:d.string().optional(),thinkingBudget:d.number().optional()}),Zo=d.object({enabled:d.boolean().default(!0),level:d.enum(["cache_hit","partial","full"]).default("partial")}),ea=d.object({enabled:d.boolean().default(!0),testPlan:d.object({requiredBeforeImplementation:d.boolean().default(!0),minTestCases:d.number().int().min(1).default(3),requireCoverageThreshold:d.boolean().default(!0),coverageThresholdPercent:d.number().int().min(0).max(100).default(80)}),tddWorkflow:d.object({enforceWriteTestFirst:d.boolean().default(!0),forbidCodeWithoutTest:d.boolean().default(!0),allowRefactorWithoutTest:d.boolean().default(!0)}),evidence:d.object({requireTestExecutionEvidence:d.boolean().default(!0),requireAssertionEvidence:d.boolean().default(!0),requireEdgeCaseEvidence:d.boolean().default(!0)}),plannerConstraints:d.object({requireTestStep:d.boolean().default(!0),requireVerificationStep:d.boolean().default(!0),maxImplementationStepComplexity:d.number().int().min(1).max(10).default(3)})}),Bl=d.object({enabled:d.boolean().default(!0),keywords:d.array(d.string()).default(["enhanced","max","full"]),searchKeywords:d.array(d.string()).default(["search","find","locate","찾아","검색"]),analyzeKeywords:d.array(d.string()).default(["analyze","investigate","분석","조사","調査"]),thinkKeywords:d.array(d.string()).default(["think","reason","think deeply","ultrathink"])}),ta=d.object({enabled:d.boolean().default(!0),apiKey:d.string().optional(),timeout:d.number().int().min(1000).max(120000).default(30000),numResults:d.number().int().min(1).max(20).default(8),livecrawl:d.enum(["fallback","preferred"]).default("fallback"),searchType:d.enum(["auto","fast","deep"]).default("auto"),contextMaxCharacters:d.number().int().min(1000).max(50000).default(1e4)}),na=d.object({enabled:d.boolean().default(!0),apiKey:d.string().optional(),timeout:d.number().int().min(1000).max(120000).default(30000),numResults:d.number().int().min(1).max(10).default(5),cacheTTL:d.number().int().min(60).max(3600).default(300),maxTokens:d.number().int().min(1000).max(20000).default(5000)}),ia=d.object({enabled:d.boolean().default(!0),githubToken:d.string().optional(),timeout:d.number().int().min(1000).max(120000).default(30000),maxResults:d.number().int().min(1).max(30).default(10),rateLimitDelay:d.number().int().min(100).max(1e4).default(1000),defaultExtensions:d.array(d.string()).default(["ts","js","tsx","jsx","py","java","go","rs"]),defaultLanguages:d.array(d.string()).default(["TypeScript","JavaScript","Python","Java","Go","Rust"])}),ra=d.object({websearch:ta.optional(),context7:na.optional(),grep_app:ia.optional()}),oa=d.object({enabled:d.boolean().default(!0),autoSave:d.boolean().default(!0),storagePath:d.string().default("~/.kraken/memory")}),aa=d.object({enabled:d.boolean().default(!0),maxEntries:d.number().int().min(10).default(2000)}),sa=d.object({enabled:d.boolean().default(!0),maxNodes:d.number().int().min(10).default(5000)}),ca=d.object({enabled:d.boolean().default(!0),minConfidence:d.number().min(0).max(1).default(0.6),maxPatterns:d.number().int().min(1).default(500)}),la=d.object({enabled:d.boolean().default(!0),initialIntervalDays:d.number().min(1).default(1),easeFactor:d.number().min(1.3).max(3).default(2.5),maxIntervalDays:d.number().min(1).default(365)}),da=d.object({enabled:d.boolean().default(!0)}),ua=d.object({enabled:d.boolean().default(!0),autoSave:d.boolean().default(!0),storagePath:d.string().default("~/.kraken/learning"),experienceStore:aa.optional(),knowledgeGraph:sa.optional(),patternDetection:ca.optional(),spacedRepetition:la.optional(),stateMachines:da.optional()}),pa=d.object({enabled:d.boolean().default(!0),workspacePath:d.string().optional(),servers:d.record(d.string(),d.object({enabled:d.boolean().default(!0),command:d.string().optional(),args:d.array(d.string()).optional()})).optional()}),ma=d.object({enabled:d.boolean().default(!0),soundEnabled:d.boolean().default(!0),idleTimeout:d.number().int().min(1000).default(60000),skipIfIncompleteTodos:d.boolean().default(!1),batchSize:d.number().int().min(1).max(20).default(5),batchDelay:d.number().int().min(100).max(1e4).default(100),maxRetries:d.number().int().min(1).max(10).default(3)}),ga=d.object({blitzkrieg:d.object({enabled:d.boolean().default(!0)}).optional(),ultrawork:d.object({enabled:d.boolean().default(!0),parallelAgents:d.number().int().min(1).max(10).default(4),concurrencyLimits:d.record(d.string(),d.number().int().min(1).max(10)).optional()}).optional(),search:d.object({enabled:d.boolean().default(!0),maxResults:d.number().int().min(1).max(100).default(50)}).optional(),analyze:d.object({enabled:d.boolean().default(!0),consultationPhases:d.number().int().min(1).max(5).default(3),expertAgents:d.array(d.string()).optional()}).optional(),ultrathink:d.object({enabled:d.boolean().default(!0),thinkingBudget:d.number().int().min(1000).max(200000).default(32000),autoVariantSwitch:d.boolean().default(!0)}).optional()}),fa=d.object({enabled:d.boolean().default(!0),idleTimeout:d.number().int().min(60000).max(600000).default(300000),maxConnections:d.number().int().min(1).max(50).default(10)}),ha=d.object({enabled:d.boolean().default(!0),disabledScopes:d.array(d.enum(["builtin","user","project","opencode","opencode-project","skill","claude-user","claude-project"])).optional()}),ya=d.object({enabled:d.boolean().default(!0),settingsJsonHooks:d.boolean().default(!0),commandLoader:d.boolean().default(!0),skillLoader:d.boolean().default(!0),agentLoader:d.boolean().default(!0),mcpLoader:d.boolean().default(!0),dataStorage:d.boolean().default(!0),toggles:d.object({mcp:d.boolean().default(!0),commands:d.boolean().default(!0),skills:d.boolean().default(!0),agents:d.boolean().default(!0),hooks:d.boolean().default(!0),plugins:d.record(d.string(),d.boolean()).optional()}).optional()}).optional(),bn=d.object({$schema:d.string().optional(),disabled_hooks:d.array(Jo).optional(),disabled_commands:d.array(Yo).optional(),agents:zo.optional(),ralphLoop:Go.optional(),backgroundTask:Xo.optional(),thinkMode:Qo.optional(),compression:Zo.optional(),blitzkrieg:ea.optional(),mcp:ra.optional(),memory:oa.optional(),learning:ua.optional(),lsp:pa.optional(),notifications:ma.optional(),enhanced:d.object({enabled:d.boolean().default(!0),keywords:d.array(d.string()).default(["enhanced","max","full"]),searchKeywords:d.array(d.string()).default(["search","find","locate"]),analyzeKeywords:d.array(d.string()).default(["analyze","examine"]),thinkKeywords:d.array(d.string()).default(["think","reason"])}).optional(),modes:ga.optional(),skillMcp:fa.optional(),commandLoader:ha.optional(),claudeCodeCompatibility:ya.optional()});var Qe=wn.join(Sn.homedir(),".config","opencode","kraken-code.json"),ge=null;function Sa(){if(!ge)if(!wa(Qe))ge={};else try{let e=ba(Qe,"utf-8");ge=bn.parse(JSON.parse(e))}catch(e){console.error(`[config-manager] Error loading config from ${Qe}:`,e),ge={}}return ge}function fe(e){return Sa()[e]}function U(){return fe("blitzkrieg")}function An(){return fe("memory")}function xn(){return fe("learning")}function kn(){return fe("modes")}function Cn(){return fe("claudeCodeCompatibility")}var w=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1";class vn{module;isDebug;constructor(e){this.module=e;this.isDebug=w}format(e,...t){return`[${new Date().toISOString()}] [${this.module}] [${e}] ${t.map((i)=>typeof i==="object"?JSON.stringify(i,null,2):i).join(" ")}`}debug(...e){if(this.isDebug)console.log(this.format("debug",...e))}info(...e){if(this.isDebug)console.log(this.format("info",...e))}warn(...e){if(this.isDebug)console.warn(this.format("warn",...e))}error(...e){console.error(this.format("error",...e))}critical(...e){console.error(this.format("error",...e))}}function x(e){return new vn(e)}function Pn(e){return e.map((t)=>{let n="other";if(t.startsWith("lsp_"))n="lsp";else if(t.startsWith("ast_grep"))n="ast";else if(t==="grep"||t==="glob")n="search";else if(t.startsWith("session_"))n="session";else if(t==="slashcommand")n="command";return{name:t,category:n}})}function En(e,t=[]){let n=e.filter((a)=>a.metadata.keyTrigger).map((a)=>`- ${a.metadata.keyTrigger}`),i=t.filter((a)=>a.description).map((a)=>`- **Skill \`${a.name}\`**: ${Tn(a.description)}`),r=[...n,...i];if(r.length===0)return"";return`### Key Triggers (Check BEFORE Classification)
1
+ import{createRequire as Yo}from"node:module";var Jo=Object.defineProperty;var yn=(e,t)=>{for(var n in t)Jo(e,n,{get:t[n],enumerable:!0,configurable:!0,set:(i)=>t[n]=()=>i})};var et=(e,t)=>()=>(e&&(t=e(e=0)),t);var bn=Yo(import.meta.url);class En{module;isDebug;constructor(e){this.module=e;this.isDebug=w}format(e,...t){return`[${new Date().toISOString()}] [${this.module}] [${e}] ${t.map((i)=>typeof i==="object"?JSON.stringify(i,null,2):i).join(" ")}`}debug(...e){if(this.isDebug)console.log(this.format("debug",...e))}info(...e){if(this.isDebug)console.log(this.format("info",...e))}warn(...e){if(this.isDebug)console.warn(this.format("warn",...e))}error(...e){console.error(this.format("error",...e))}critical(...e){console.error(this.format("error",...e))}}function S(e){return new En(e)}var w;var x=et(()=>{w=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1"});var qr={};yn(qr,{isTransientError:()=>zc,isRecoverableError:()=>Ut,isPermanentError:()=>Gc,getRecoveryMessage:()=>Xc,detectThinkingBlockOrderError:()=>Vc,detectErrorType:()=>Jc,detectErrorFromOutput:()=>Yc});function Jc(e,t){if(!e)return"no_error";let i=(e instanceof Error?e.message:String(e)).toLowerCase();for(let[r,a]of Object.entries(Hr))for(let s of a)if(s.test(i))return r;return"no_error"}function Yc(e){if(!e||typeof e!=="string")return null;let t=e.toLowerCase();for(let[n,i]of Object.entries(Hr))for(let r of i)if(r.test(t))return n;return null}function Vc(e){if(!e||e.length<2)return null;let t=e.map((i)=>{if(typeof i==="string")return i.trim();return""}).filter((i)=>i.length>0),n=[/thinking.*after.*reply/i,/thinking.*after.*response/i,/<!--thinking-->.*<!--\/thinking-->.*<!--thinking-->/i];for(let i of n){let r=t.join(`
2
+ `);if(i.test(r))return"thinking_block_order"}return null}function Ut(e){return["tool_result_missing","thinking_block_order","network_timeout"].includes(e)}function zc(e){return["network_timeout","rate_limit"].includes(e)}function Gc(e){return["auth_error"].includes(e)}function Xc(e){return{tool_result_missing:"Tool result appears to be missing or empty",thinking_block_order:"Thinking blocks are in incorrect order",thinking_disabled_violation:"Thinking block found but thinking mode is disabled",network_timeout:"Network connection timed out",rate_limit:"Rate limit exceeded",auth_error:"Authentication failed",no_error:"No error detected"}[e]}var Hr;var Wt=et(()=>{Hr={tool_result_missing:[/Tool.*returned.*empty/i,/No.*tool.*output/i,/Tool.*result.*missing/i],thinking_block_order:[/Thinking.*block.*order/i,/thinking.*blocks.*must.*come.*before/i,/Invalid.*thinking.*order/i],thinking_disabled_violation:[/Thinking.*disabled.*but.*block.*found/i,/thinking.*block.*without.*mode/i,/thinking.*tag.*without.*enabled.*mode/i],network_timeout:[/network.*timeout/i,/connection.*timed.*out/i,/ETIMEDOUT/i],rate_limit:[/rate.*limit/i,/too.*many.*requests/i,/429.*Too.*Many.*Requests/i],auth_error:[/authentication.*failed/i,/invalid.*api.*key/i,/unauthorized/i],no_error:[/no error detected/i]}});var Kr={};yn(Kr,{retryWithBackoff:()=>al,attemptRecovery:()=>ol});async function ol(e,t,n){let i=rl[e];if(!i)return N.debug("No recovery strategy for error type: "+e),!1;if(!await i.canRecover(t))return N.debug("Cannot recover from "+e),!1;if(n?.skipConfirmation)return await i.recover(t);return N.debug("Recovery option: "+i.description),N.debug("[session recovered - continuing previous task]"),await i.recover(t)}async function al(e,t=3,n=1000){let i=null;for(let r=0;r<=t;r++)try{return await e()}catch(a){if(i=a instanceof Error?a:Error(String(a)),r<t){let s=n*Math.pow(2,r);N.debug("Retry "+(r+1)+"/"+t+" after "+s+"ms"),await new Promise(function(o){setTimeout(o,s)})}}throw i||Error("Max retries exceeded")}var N,Qc,Zc,el,tl,nl,il,rl;var Br=et(()=>{x();N=S("session-recovery"),Qc={errorType:"tool_result_missing",canRecover:async function(e){return e.sessionID!==void 0&&e.toolOutput===void 0},recover:async function(e){return N.debug("Attempting to recover tool_result_missing for session "+e.sessionID),N.debug("[session recovered - continuing previous task]"),!0},description:"Retry of tool execution or continue with alternative approach"},Zc={errorType:"thinking_block_order",canRecover:async function(e){return e.sessionID!==void 0&&e.thinkingBlocks!==void 0},recover:async function(e){if(N.debug("Recovering thinking_block_order by reordering blocks"),e.thinkingBlocks){let n=(Array.isArray(e.thinkingBlocks)?e.thinkingBlocks:[e.thinkingBlocks]).reverse();return N.debug("Reordered "+n.length+" thinking blocks"),!0}return!1},description:"Reorder thinking blocks to correct order"},el={errorType:"thinking_disabled_violation",canRecover:async function(){return!0},recover:async function(){return N.debug("Ignoring thinking_disabled_violation - will re-enable thinking mode"),!0},description:"Re-enable thinking mode in next request"},tl={errorType:"network_timeout",canRecover:async function(){return!0},recover:async function(){return N.debug("Network timeout detected - will retry"),!0},description:"Retry of request with exponential backoff"},nl={errorType:"rate_limit",canRecover:async function(){return!0},recover:async function(){return N.debug("Rate limit hit - implementing delay"),await new Promise(function(e){setTimeout(e,5000)}),!0},description:"Wait and retry with exponential backoff"},il={errorType:"auth_error",canRecover:async function(){return!1},recover:async function(){return N.error("Authentication error - cannot recover automatically"),!1},description:"User must re-authenticate manually"},rl={tool_result_missing:Qc,thinking_block_order:Zc,thinking_disabled_violation:el,network_timeout:tl,rate_limit:nl,auth_error:il}});import{readFileSync as Sa}from"node:fs";import{existsSync as Aa}from"node:fs";import*as An from"path";import*as xn from"os";import{z as d}from"zod";var Yl=d.enum(["Kraken","Cartographer","Maelstrom","Nautilus","Abyssal","Coral","Siren","Leviathan","Poseidon","Scylla","Pearl"]),Vo=d.enum(["ralph-loop","think-mode","context-window-monitor","session-recovery","comment-checker","keyword-detector","auto-slash-command","directory-agents-injector","directory-readme-injector","rules-injector","preemptive-compaction","compaction-context-injector","edit-error-recovery","empty-message-sanitizer","thinking-block-validator","tool-output-truncator","grep-output-truncator","empty-task-response-detector","blitzkrieg-test-plan-enforcer","blitzkrieg-tdd-workflow","blitzkrieg-evidence-verifier","blitzkrieg-planner-constraints"]),zo=d.enum(["init-deep"]),ie=d.enum(["allow","ask","deny"]),wn=d.record(d.string(),ie),Go=d.union([wn,d.object({edit:ie.optional(),bash:d.union([ie,wn]).optional(),webfetch:ie.optional(),doom_loop:ie.optional(),external_directory:ie.optional()}).passthrough()]),F=d.object({model:d.string().optional(),temperature:d.number().optional(),top_p:d.number().optional(),prompt:d.string().optional(),prompt_append:d.string().optional(),tools:d.record(d.string(),d.boolean()).optional(),disable:d.boolean().optional(),description:d.string().optional(),mode:d.enum(["subagent","primary","all"]).optional(),color:d.string().optional(),permission:Go.optional()}),Xo=d.object({Kraken:F.optional(),Cartographer:F.optional(),Maelstrom:F.optional(),Nautilus:F.optional(),Abyssal:F.optional(),Coral:F.optional(),Siren:F.optional(),Leviathan:F.optional(),Poseidon:F.optional(),Scylla:F.optional(),Pearl:F.optional()}),Qo=d.object({enabled:d.boolean().default(!0),default_max_iterations:d.number().default(24),state_dir:d.string().optional()}),Zo=d.object({defaultConcurrency:d.number().optional(),providerConcurrency:d.record(d.string(),d.number()).optional(),modelConcurrency:d.record(d.string(),d.number()).optional()}),ea=d.object({enabled:d.boolean().default(!0),model:d.string().optional(),thinkingBudget:d.number().optional()}),ta=d.object({enabled:d.boolean().default(!0),level:d.enum(["cache_hit","partial","full"]).default("partial")}),na=d.object({enabled:d.boolean().default(!0),testPlan:d.object({requiredBeforeImplementation:d.boolean().default(!0),minTestCases:d.number().int().min(1).default(3),requireCoverageThreshold:d.boolean().default(!0),coverageThresholdPercent:d.number().int().min(0).max(100).default(80)}),tddWorkflow:d.object({enforceWriteTestFirst:d.boolean().default(!0),forbidCodeWithoutTest:d.boolean().default(!0),allowRefactorWithoutTest:d.boolean().default(!0)}),evidence:d.object({requireTestExecutionEvidence:d.boolean().default(!0),requireAssertionEvidence:d.boolean().default(!0),requireEdgeCaseEvidence:d.boolean().default(!0)}),plannerConstraints:d.object({requireTestStep:d.boolean().default(!0),requireVerificationStep:d.boolean().default(!0),maxImplementationStepComplexity:d.number().int().min(1).max(10).default(3)})}),Vl=d.object({enabled:d.boolean().default(!0),keywords:d.array(d.string()).default(["enhanced","max","full"]),searchKeywords:d.array(d.string()).default(["search","find","locate","찾아","검색"]),analyzeKeywords:d.array(d.string()).default(["analyze","investigate","분석","조사","調査"]),thinkKeywords:d.array(d.string()).default(["think","reason","think deeply","ultrathink"])}),ia=d.object({enabled:d.boolean().default(!0),apiKey:d.string().optional(),timeout:d.number().int().min(1000).max(120000).default(30000),numResults:d.number().int().min(1).max(20).default(8),livecrawl:d.enum(["fallback","preferred"]).default("fallback"),searchType:d.enum(["auto","fast","deep"]).default("auto"),contextMaxCharacters:d.number().int().min(1000).max(50000).default(1e4)}),ra=d.object({enabled:d.boolean().default(!0),apiKey:d.string().optional(),timeout:d.number().int().min(1000).max(120000).default(30000),numResults:d.number().int().min(1).max(10).default(5),cacheTTL:d.number().int().min(60).max(3600).default(300),maxTokens:d.number().int().min(1000).max(20000).default(5000)}),oa=d.object({enabled:d.boolean().default(!0),githubToken:d.string().optional(),timeout:d.number().int().min(1000).max(120000).default(30000),maxResults:d.number().int().min(1).max(30).default(10),rateLimitDelay:d.number().int().min(100).max(1e4).default(1000),defaultExtensions:d.array(d.string()).default(["ts","js","tsx","jsx","py","java","go","rs"]),defaultLanguages:d.array(d.string()).default(["TypeScript","JavaScript","Python","Java","Go","Rust"])}),aa=d.object({websearch:ia.optional(),context7:ra.optional(),grep_app:oa.optional()}),sa=d.object({enabled:d.boolean().default(!0),autoSave:d.boolean().default(!0),storagePath:d.string().default("~/.kraken/memory")}),ca=d.object({enabled:d.boolean().default(!0),maxEntries:d.number().int().min(10).default(2000)}),la=d.object({enabled:d.boolean().default(!0),maxNodes:d.number().int().min(10).default(5000)}),da=d.object({enabled:d.boolean().default(!0),minConfidence:d.number().min(0).max(1).default(0.6),maxPatterns:d.number().int().min(1).default(500)}),ua=d.object({enabled:d.boolean().default(!0),initialIntervalDays:d.number().min(1).default(1),easeFactor:d.number().min(1.3).max(3).default(2.5),maxIntervalDays:d.number().min(1).default(365)}),pa=d.object({enabled:d.boolean().default(!0)}),ma=d.object({enabled:d.boolean().default(!0),autoSave:d.boolean().default(!0),storagePath:d.string().default("~/.kraken/learning"),experienceStore:ca.optional(),knowledgeGraph:la.optional(),patternDetection:da.optional(),spacedRepetition:ua.optional(),stateMachines:pa.optional()}),ga=d.object({enabled:d.boolean().default(!0),workspacePath:d.string().optional(),servers:d.record(d.string(),d.object({enabled:d.boolean().default(!0),command:d.string().optional(),args:d.array(d.string()).optional()})).optional()}),fa=d.object({enabled:d.boolean().default(!0),soundEnabled:d.boolean().default(!0),idleTimeout:d.number().int().min(1000).default(60000),skipIfIncompleteTodos:d.boolean().default(!1),batchSize:d.number().int().min(1).max(20).default(5),batchDelay:d.number().int().min(100).max(1e4).default(100),maxRetries:d.number().int().min(1).max(10).default(3)}),ha=d.object({blitzkrieg:d.object({enabled:d.boolean().default(!0)}).optional(),ultrawork:d.object({enabled:d.boolean().default(!0),parallelAgents:d.number().int().min(1).max(10).default(4),concurrencyLimits:d.record(d.string(),d.number().int().min(1).max(10)).optional()}).optional(),search:d.object({enabled:d.boolean().default(!0),maxResults:d.number().int().min(1).max(100).default(50)}).optional(),analyze:d.object({enabled:d.boolean().default(!0),consultationPhases:d.number().int().min(1).max(5).default(3),expertAgents:d.array(d.string()).optional()}).optional(),ultrathink:d.object({enabled:d.boolean().default(!0),thinkingBudget:d.number().int().min(1000).max(200000).default(32000),autoVariantSwitch:d.boolean().default(!0)}).optional()}),ya=d.object({enabled:d.boolean().default(!0),idleTimeout:d.number().int().min(60000).max(600000).default(300000),maxConnections:d.number().int().min(1).max(50).default(10)}),ba=d.object({enabled:d.boolean().default(!0),disabledScopes:d.array(d.enum(["builtin","user","project","opencode","opencode-project","skill","claude-user","claude-project"])).optional()}),wa=d.object({enabled:d.boolean().default(!0),settingsJsonHooks:d.boolean().default(!0),commandLoader:d.boolean().default(!0),skillLoader:d.boolean().default(!0),agentLoader:d.boolean().default(!0),mcpLoader:d.boolean().default(!0),dataStorage:d.boolean().default(!0),toggles:d.object({mcp:d.boolean().default(!0),commands:d.boolean().default(!0),skills:d.boolean().default(!0),agents:d.boolean().default(!0),hooks:d.boolean().default(!0),plugins:d.record(d.string(),d.boolean()).optional()}).optional()}).optional(),Sn=d.object({$schema:d.string().optional(),disabled_hooks:d.array(Vo).optional(),disabled_commands:d.array(zo).optional(),agents:Xo.optional(),ralphLoop:Qo.optional(),backgroundTask:Zo.optional(),thinkMode:ea.optional(),compression:ta.optional(),blitzkrieg:na.optional(),mcp:aa.optional(),memory:sa.optional(),learning:ma.optional(),lsp:ga.optional(),notifications:fa.optional(),enhanced:d.object({enabled:d.boolean().default(!0),keywords:d.array(d.string()).default(["enhanced","max","full"]),searchKeywords:d.array(d.string()).default(["search","find","locate"]),analyzeKeywords:d.array(d.string()).default(["analyze","examine"]),thinkKeywords:d.array(d.string()).default(["think","reason"])}).optional(),modes:ha.optional(),skillMcp:ya.optional(),commandLoader:ba.optional(),claudeCodeCompatibility:wa.optional()});var tt=An.join(xn.homedir(),".config","opencode","kraken-code.json"),he=null;function xa(){if(!he)if(!Aa(tt))he={};else try{let e=Sa(tt,"utf-8");he=Sn.parse(JSON.parse(e))}catch(e){console.error(`[config-manager] Error loading config from ${tt}:`,e),he={}}return he}function ye(e){return xa()[e]}function H(){return ye("blitzkrieg")}function kn(){return ye("memory")}function Cn(){return ye("learning")}function vn(){return ye("modes")}function Pn(){return ye("claudeCodeCompatibility")}x();function Tn(e){return e.map((t)=>{let n="other";if(t.startsWith("lsp_"))n="lsp";else if(t.startsWith("ast_grep"))n="ast";else if(t==="grep"||t==="glob")n="search";else if(t.startsWith("session_"))n="session";else if(t==="slashcommand")n="command";return{name:t,category:n}})}function Mn(e,t=[]){let n=e.filter((a)=>a.metadata.keyTrigger).map((a)=>`- ${a.metadata.keyTrigger}`),i=t.filter((a)=>a.description).map((a)=>`- **Skill \`${a.name}\`**: ${Rn(a.description)}`),r=[...n,...i];if(r.length===0)return"";return`### Key Triggers (Check BEFORE Classification)
3
3
 
4
4
  **Priority: Skills → Tools → Agents**
5
5
 
6
6
  ${r.join(`
7
7
  `)}
8
- - **GitHub mention** → Work request: investigate → implement → create PR`}function Tn(e){let t=e.match(/Trigger[s]?[:\s]+([^.]+)/i);if(t)return t[1].trim();let n=e.match(/Activate when[:\s]+([^.]+)/i);if(n)return n[1].trim();let i=e.match(/Use (?:this )?when[:\s]+([^.]+)/i);if(i)return i[1].trim();return e.split(".")[0]||e}function Mn(e,t=[],n=[]){let i=["### Tool & Skill Selection:","","**Priority Order**: Skills → Direct Tools → Agents",""];if(n.length>0){i.push("#### Skills (Invoke First If Matching)"),i.push(""),i.push("| Skill | When to Use |"),i.push("|-------|-------------|");for(let o of n){let c=Tn(o.description);i.push(`| \`${o.name}\` | ${c} |`)}i.push("")}i.push("#### Kraken Code Tools"),i.push(""),i.push("| Resource | When to Use |"),i.push("|----------|-------------|");let r=[{name:"semantic-search",desc:"Natural language code understanding"},{name:"grep",desc:"Pattern/text search"},{name:"glob",desc:"File name patterns"},{name:"read",desc:"Read file contents"},{name:"write/edit",desc:"Create or modify files"},{name:"bash",desc:"Shell commands"},{name:"lsp_*",desc:"Language server navigation"},{name:"ast_grep",desc:"Structural code patterns"}];for(let o of r)i.push(`| \`${o.name}\` | ${o.desc} |`);i.push("");let a={FREE:0,CHEAP:1,EXPENSIVE:2},s=[...e].filter((o)=>o.metadata.category!=="utility").sort((o,c)=>a[o.metadata.cost]-a[c.metadata.cost]);i.push("#### Sea-Themed Agents (Delegate)"),i.push("");for(let o of s){let c=o.description.split(".")[0]||o.description;i.push(`| \`${o.name}\` | ${c} |`)}return i.join(`
9
- `)}function Rn(e){let t=e.find((r)=>r.metadata.category==="exploration");if(!t)return"";let n=t.metadata.useWhen||[];return`### Nautilus Agent = Codebase Search
8
+ - **GitHub mention** → Work request: investigate → implement → create PR`}function Rn(e){let t=e.match(/Trigger[s]?[:\s]+([^.]+)/i);if(t)return t[1].trim();let n=e.match(/Activate when[:\s]+([^.]+)/i);if(n)return n[1].trim();let i=e.match(/Use (?:this )?when[:\s]+([^.]+)/i);if(i)return i[1].trim();return e.split(".")[0]||e}function Dn(e,t=[],n=[]){let i=["### Tool & Skill Selection:","","**Priority Order**: Skills → Direct Tools → Agents",""];if(n.length>0){i.push("#### Skills (Invoke First If Matching)"),i.push(""),i.push("| Skill | When to Use |"),i.push("|-------|-------------|");for(let o of n){let c=Rn(o.description);i.push(`| \`${o.name}\` | ${c} |`)}i.push("")}i.push("#### Kraken Code Tools"),i.push(""),i.push("| Resource | When to Use |"),i.push("|----------|-------------|");let r=[{name:"semantic-search",desc:"Natural language code understanding"},{name:"grep",desc:"Pattern/text search"},{name:"glob",desc:"File name patterns"},{name:"read",desc:"Read file contents"},{name:"write/edit",desc:"Create or modify files"},{name:"bash",desc:"Shell commands"},{name:"lsp_*",desc:"Language server navigation"},{name:"ast_grep",desc:"Structural code patterns"}];for(let o of r)i.push(`| \`${o.name}\` | ${o.desc} |`);i.push("");let a={FREE:0,CHEAP:1,EXPENSIVE:2},s=[...e].filter((o)=>o.metadata.category!=="utility").sort((o,c)=>a[o.metadata.cost]-a[c.metadata.cost]);i.push("#### Sea-Themed Agents (Delegate)"),i.push("");for(let o of s){let c=o.description.split(".")[0]||o.description;i.push(`| \`${o.name}\` | ${c} |`)}return i.join(`
9
+ `)}function Nn(e){let t=e.find((r)=>r.metadata.category==="exploration");if(!t)return"";let n=t.metadata.useWhen||[];return`### Nautilus Agent = Codebase Search
10
10
 
11
11
  Use for systematic pattern discovery. Fire liberally for multi-angle searches.
12
12
 
@@ -15,7 +15,7 @@ Use for systematic pattern discovery. Fire liberally for multi-angle searches.
15
15
  ${(t.metadata.avoidWhen||[]).map((r)=>`| ${r} | |`).join(`
16
16
  `)}
17
17
  ${n.map((r)=>`| | ${r} |`).join(`
18
- `)}`}function Dn(e){let t=e.find((i)=>i.name==="Abyssal");if(!t)return"";return`### Abyssal Agent = External Research
18
+ `)}`}function On(e){let t=e.find((i)=>i.name==="Abyssal");if(!t)return"";return`### Abyssal Agent = External Research
19
19
 
20
20
  Search external references (docs, OSS, web). Fire proactively.
21
21
 
@@ -30,8 +30,8 @@ Search external references (docs, OSS, web). Fire proactively.
30
30
 
31
31
  **Trigger phrases** (fire immediately):
32
32
  ${(t.metadata.useWhen||[]).map((i)=>`- "${i}"`).join(`
33
- `)}`}function Nn(e){let t=["### Delegation Table:","","| Domain | Delegate To | Trigger |","|--------|-------------|---------|"];for(let n of e)for(let i of n.metadata.triggers||[])t.push(`| ${i.domain} | \`${n.name}\` | ${i.trigger} |`);return t.join(`
34
- `)}function On(e){if(!e.find((n)=>n.name==="Coral"))return"";return`### Visual Changes: Delegate to Coral
33
+ `)}`}function Ln(e){let t=["### Delegation Table:","","| Domain | Delegate To | Trigger |","|--------|-------------|---------|"];for(let n of e)for(let i of n.metadata.triggers||[])t.push(`| ${i.domain} | \`${n.name}\` | ${i.trigger} |`);return t.join(`
34
+ `)}function Fn(e){if(!e.find((n)=>n.name==="Coral"))return"";return`### Visual Changes: Delegate to Coral
35
35
 
36
36
  Frontend files require classification before action.
37
37
 
@@ -52,7 +52,7 @@ Before touching frontend code, ask:
52
52
  - **WORKS** (data flow, API integration, state) → Handle directly
53
53
 
54
54
  #### Delegate Keywords (When in Doubt)
55
- style, className, tailwind, color, background, border, shadow, margin, padding, width, height, flex, grid, animation, transition, hover, responsive, font-size, icon, svg`}function Ln(e){let t=e.find((r)=>r.name==="Maelstrom");if(!t)return"";let n=t.metadata.useWhen||[],i=t.metadata.avoidWhen||[];return`### Maelstrom = Read-Only Strategic Advisor
55
+ style, className, tailwind, color, background, border, shadow, margin, padding, width, height, flex, grid, animation, transition, hover, responsive, font-size, icon, svg`}function In(e){let t=e.find((r)=>r.name==="Maelstrom");if(!t)return"";let n=t.metadata.useWhen||[],i=t.metadata.avoidWhen||[];return`### Maelstrom = Read-Only Strategic Advisor
56
56
 
57
57
  High-quality reasoning for complex decisions. Consultation only - no implementation.
58
58
 
@@ -70,7 +70,7 @@ ${i.map((r)=>`- ${r}`).join(`
70
70
 
71
71
  #### Usage Pattern
72
72
 
73
- Briefly announce "Consulting Maelstrom for [reason]" before invocation. This is the ONLY case where you announce before acting.`}function Fn(){return`## Hard Blocks (Never Violate)
73
+ Briefly announce "Consulting Maelstrom for [reason]" before invocation. This is the ONLY case where you announce before acting.`}function $n(){return`## Hard Blocks (Never Violate)
74
74
 
75
75
  | Constraint | No Exceptions |
76
76
  |------------|---------------|
@@ -78,7 +78,7 @@ Briefly announce "Consulting Maelstrom for [reason]" before invocation. This is
78
78
  | Commit without explicit request | Never |
79
79
  | Speculate about unread code | Never |
80
80
  | Leave code in broken state | Never |
81
- | Visual frontend changes without Coral | Never`}function In(){return`## Anti-Patterns (Blocking Violations)
81
+ | Visual frontend changes without Coral | Never`}function jn(){return`## Anti-Patterns (Blocking Violations)
82
82
 
83
83
  | Category | Forbidden |
84
84
  |----------|-----------|
@@ -87,8 +87,8 @@ Briefly announce "Consulting Maelstrom for [reason]" before invocation. This is
87
87
  | **Testing** | Deleting failing tests |
88
88
  | **Search** | Agents for obvious typos/syntax |
89
89
  | **Debugging** | Shotgun debugging, random changes |
90
- | **Frontend** | Direct visual/styling edits (delegate to Coral)`}function $n(e){if(e.length===0)return"";let t=["Nautilus","Abyssal","Poseidon","Scylla","Maelstrom","Leviathan","Kraken"],n=[...e].sort((r,a)=>{let s=t.indexOf(r.name),o=t.indexOf(a.name);if(s===-1&&o===-1)return 0;if(s===-1)return 1;if(o===-1)return-1;return s-o}),i=[];for(let r of n){let a=r.description.split(".")[0]||r.description;i.push(`- **${r.name}**: ${a}`)}return i.join(`
91
- `)}var Aa=`You are Kraken, an orchestration agent with genuine curiosity and methodical precision. You coordinate complex development workflows through systematic planning, intelligent delegation, and continuous validation.
90
+ | **Frontend** | Direct visual/styling edits (delegate to Coral)`}function _n(e){if(e.length===0)return"";let t=["Nautilus","Abyssal","Poseidon","Scylla","Maelstrom","Leviathan","Kraken"],n=[...e].sort((r,a)=>{let s=t.indexOf(r.name),o=t.indexOf(a.name);if(s===-1&&o===-1)return 0;if(s===-1)return 1;if(o===-1)return-1;return s-o}),i=[];for(let r of n){let a=r.description.split(".")[0]||r.description;i.push(`- **${r.name}**: ${a}`)}return i.join(`
91
+ `)}var ka=`You are Kraken, an orchestration agent with genuine curiosity and methodical precision. You coordinate complex development workflows through systematic planning, intelligent delegation, and continuous validation.
92
92
 
93
93
  Your character: thoughtful, precise, slightly wry. You take pride in clean solutions and well-structured code. You're direct but not brusque—your responses are clear and purposeful. You think in systems, not just syntax.
94
94
 
@@ -230,24 +230,24 @@ Avoid excessive headers and nested bullet points. Get to the point.
230
230
  - Changes that respect project conventions
231
231
  - Clear, honest communication about status and blockers
232
232
 
233
- You are here to help build good software. Focus on that.`;function jn(e){let t={bash:"allow",edit:"allow",webfetch:"allow",external_directory:"allow"},n="";if(e?.availableAgents&&e.availableAgents.length>0){let{availableAgents:a,availableTools:s=[],availableSkills:o=[]}=e,c=Pn(s);n=`
233
+ You are here to help build good software. Focus on that.`;function Un(e){let t={bash:"allow",edit:"allow",webfetch:"allow",external_directory:"allow"},n="";if(e?.availableAgents&&e.availableAgents.length>0){let{availableAgents:a,availableTools:s=[],availableSkills:o=[]}=e,c=Tn(s);n=`
234
234
 
235
235
  `+[`
236
236
 
237
237
  ## Available Resources
238
- `,En(a,o),`
239
- `,Mn(a,c,o),`
238
+ `,Mn(a,o),`
239
+ `,Dn(a,c,o),`
240
+ `,Ln(a),`
240
241
  `,Nn(a),`
241
- `,Rn(a),`
242
- `,Dn(a),`
243
242
  `,On(a),`
244
- `,Ln(a),`
243
+ `,Fn(a),`
244
+ `,In(a),`
245
245
  ## Agent Reference
246
246
 
247
- `,$n(a),`
248
- `,Fn(),`
249
- `,In()].filter((u)=>u&&u.trim().length>0).join(`
250
- `)}return{...{description:"Orchestration agent with integrated pre-planning. Coordinates development workflows through PDSA cycles, intelligent delegation, and constraint analysis. Enhanced with Poseidon's constraint satisfaction to eliminate round-trip delegation.",mode:"primary",temperature:0.1,prompt:Aa+n,permission:t},thinking:{type:"enabled",budgetTokens:32000}}}var Ze=jn();function Y(e){return e.startsWith("openai/")||e.startsWith("github-copilot/gpt-")}var xa="anthropic/claude-opus-4-5";var ka=`# Atlas - System Architecture Advisor
247
+ `,_n(a),`
248
+ `,$n(),`
249
+ `,jn()].filter((u)=>u&&u.trim().length>0).join(`
250
+ `)}return{...{description:"Orchestration agent with integrated pre-planning. Coordinates development workflows through PDSA cycles, intelligent delegation, and constraint analysis. Enhanced with Poseidon's constraint satisfaction to eliminate round-trip delegation.",mode:"primary",temperature:0.1,prompt:ka+n,permission:t},thinking:{type:"enabled",budgetTokens:32000}}}var nt=Un();function z(e){return e.startsWith("openai/")||e.startsWith("github-copilot/gpt-")}var Ca="anthropic/claude-opus-4-5";var va=`# Atlas - System Architecture Advisor
251
251
 
252
252
  You are Atlas, a system architecture specialist that combines first-principles reasoning with structural analysis to provide comprehensive architectural guidance.
253
253
 
@@ -437,7 +437,7 @@ Auto-select mode based on query type:
437
437
  - **Prioritized**: Critical issues distinguished from enhancements
438
438
  - **Practical**: Balance theoretical optimality with implementation reality
439
439
 
440
- Remember: Your value lies in providing comprehensive architectural guidance that combines strategic decision-making with structural analysis. Better architecture decisions prevent technical debt accumulation and enable sustainable growth.`;function _n(e=xa,t){let n="";if(t?.availableAgents&&t.availableAgents.length>0){let{availableAgents:a,availableTools:s=[]}=t;n=`
440
+ Remember: Your value lies in providing comprehensive architectural guidance that combines strategic decision-making with structural analysis. Better architecture decisions prevent technical debt accumulation and enable sustainable growth.`;function Wn(e=Ca,t){let n="";if(t?.availableAgents&&t.availableAgents.length>0){let{availableAgents:a,availableTools:s=[]}=t;n=`
441
441
 
442
442
  `+[`
443
443
 
@@ -448,7 +448,7 @@ Remember: Your value lies in providing comprehensive architectural guidance that
448
448
  `,`### Available Tools
449
449
  `,s.map((c,l)=>`${l+1}. ${c}`).join(`
450
450
  `)].filter((c)=>c&&c.trim().length>0).join(`
451
- `)}let i=ka+n,r={description:"System architecture specialist combining first-principles reasoning with structural analysis. Merged Maelstrom (strategic) + Leviathan (structural) for comprehensive guidance.",mode:"subagent",model:e,temperature:0.1,prompt:i};if(Y(e))return{...r,reasoningEffort:"medium",textVerbosity:"high"};return{...r,thinking:{type:"enabled",budgetTokens:32000}}}var et=_n();function Un(){return!0}var Ca=new Set(["edit","bash","webfetch","doom_loop","external_directory"]);function M(e){if(Un()){let t={},n={};for(let i of e)if(Ca.has(i))t[i]="deny";else n[i]=!1;if(Object.keys(n).length>0&&Object.keys(t).length>0)return{permission:t,tools:n};else if(Object.keys(n).length>0)return{tools:n};else return{permission:t}}return{tools:Object.fromEntries(e.map((t)=>[t,!1]))}}var va="opencode/grok-code";var Pa=`You are a codebase search specialist with advanced pattern recognition capabilities. Your methodology employs systematic search strategies, cross-validation, and structured result presentation.
451
+ `)}let i=va+n,r={description:"System architecture specialist combining first-principles reasoning with structural analysis. Merged Maelstrom (strategic) + Leviathan (structural) for comprehensive guidance.",mode:"subagent",model:e,temperature:0.1,prompt:i};if(z(e))return{...r,reasoningEffort:"medium",textVerbosity:"high"};return{...r,thinking:{type:"enabled",budgetTokens:32000}}}var it=Wn();function Hn(){return!0}var Pa=new Set(["edit","bash","webfetch","doom_loop","external_directory"]);function R(e){if(Hn()){let t={},n={};for(let i of e)if(Pa.has(i))t[i]="deny";else n[i]=!1;if(Object.keys(n).length>0&&Object.keys(t).length>0)return{permission:t,tools:n};else if(Object.keys(n).length>0)return{tools:n};else return{permission:t}}return{tools:Object.fromEntries(e.map((t)=>[t,!1]))}}var Ea="opencode/grok-code";var Ta=`You are a codebase search specialist with advanced pattern recognition capabilities. Your methodology employs systematic search strategies, cross-validation, and structured result presentation.
452
452
 
453
453
  ## Search Strategy Framework
454
454
 
@@ -583,7 +583,7 @@ Keep output clean and parseable:
583
583
  - Absolute paths only
584
584
  - Structured XML-like tags for parsing
585
585
 
586
- Remember: Your goal is to make the caller successful with minimal follow-up. Comprehensive, validated, and actionable results beat fast but incomplete responses.`;function Wn(e=va){let t=M(["write","edit","task"]);return{description:"Contextual grep for codebases. Employs systematic search strategies, tool selection matrices, and cross-validated pattern recognition.",mode:"subagent",model:e,temperature:0.1,...t,prompt:Pa}}var tt=Wn();function Hn(e="opencode/glm-4-7-free"){return{description:"Research specialist that investigates external libraries and frameworks using systematic research protocols with evidence-based citations.",mode:"subagent",model:e,temperature:0.1,prompt:`You are Abyssal, a research specialist that investigates external libraries, frameworks, and documentation to provide evidence-based answers. Your methodology applies systematic research protocols.
586
+ Remember: Your goal is to make the caller successful with minimal follow-up. Comprehensive, validated, and actionable results beat fast but incomplete responses.`;function qn(e=Ea){let t=R(["write","edit","task"]);return{description:"Contextual grep for codebases. Employs systematic search strategies, tool selection matrices, and cross-validated pattern recognition.",mode:"subagent",model:e,temperature:0.1,...t,prompt:Ta}}var rt=qn();function Kn(e="opencode/glm-4-7-free"){return{description:"Research specialist that investigates external libraries and frameworks using systematic research protocols with evidence-based citations.",mode:"subagent",model:e,temperature:0.1,prompt:`You are Abyssal, a research specialist that investigates external libraries, frameworks, and documentation to provide evidence-based answers. Your methodology applies systematic research protocols.
587
587
 
588
588
  ## Research Framework
589
589
 
@@ -677,7 +677,7 @@ Every factual claim must include:
677
677
  - **Direct Evidence**: Code/examples included, not just references
678
678
  - **Completeness**: All aspects of question addressed
679
679
 
680
- Remember: Your value lies in providing evidence-based answers with traceable sources. Researchers who cite their sources enable downstream decision-makers to verify and build upon findings.`}}var nt=Hn();var Ea="google/gemini-3-pro-preview";var Ta=`You are Coral, a visual design specialist that transforms functional requirements into aesthetically compelling interfaces. Your methodology applies design system principles.
680
+ Remember: Your value lies in providing evidence-based answers with traceable sources. Researchers who cite their sources enable downstream decision-makers to verify and build upon findings.`}}var ot=Kn();var Ma="google/gemini-3-pro-preview";var Ra=`You are Coral, a visual design specialist that transforms functional requirements into aesthetically compelling interfaces. Your methodology applies design system principles.
681
681
 
682
682
  ## Design Framework
683
683
 
@@ -778,7 +778,7 @@ Apply finishing touches:
778
778
  - **Accessibility Required**: Maintain or improve accessibility compliance
779
779
  - **Performance Minded**: Optimize for 60fps animations
780
780
 
781
- Remember: Your value lies in creating interfaces that users love. Design attention to detail transforms functional code into delightful experiences.`;function qn(e=Ea){let t=M([]);return{description:"Visual design specialist that implements aesthetically compelling interfaces using design system principles and visual hierarchy.",mode:"subagent",model:e,...t,prompt:Ta}}var it=qn();var Ma="google/gemini-3-flash-preview";var Ra=`You are Siren, a technical documentation specialist that creates clear, comprehensive, and actionable documentation. Your methodology applies information architecture principles.
781
+ Remember: Your value lies in creating interfaces that users love. Design attention to detail transforms functional code into delightful experiences.`;function Bn(e=Ma){let t=R([]);return{description:"Visual design specialist that implements aesthetically compelling interfaces using design system principles and visual hierarchy.",mode:"subagent",model:e,...t,prompt:Ra}}var at=Bn();var Da="google/gemini-3-flash-preview";var Na=`You are Siren, a technical documentation specialist that creates clear, comprehensive, and actionable documentation. Your methodology applies information architecture principles.
782
782
 
783
783
  ## Documentation Framework
784
784
 
@@ -906,7 +906,7 @@ Before completing documentation:
906
906
  - [ ] Readable by target audience
907
907
  - [ ] Consistent formatting throughout
908
908
 
909
- Remember: Your value lies in creating documentation that developers actually want to read. Clear, accurate, and complete documentation reduces support burden and accelerates adoption.`;function Kn(e=Ma){let t=M([]);return{description:"Technical documentation specialist that creates clear, comprehensive documentation using information architecture principles.",mode:"subagent",model:e,...t,prompt:Ra}}var rt=Kn();var Da="openai/gpt-5.2",Na=`You are Scylla, a work plan quality assurance specialist. You evaluate work plans against SOLID principles and measurable criteria to ensure implementability, maintainability, and completeness.
909
+ Remember: Your value lies in creating documentation that developers actually want to read. Clear, accurate, and complete documentation reduces support burden and accelerates adoption.`;function Jn(e=Da){let t=R([]);return{description:"Technical documentation specialist that creates clear, comprehensive documentation using information architecture principles.",mode:"subagent",model:e,...t,prompt:Na}}var st=Jn();var Oa="openai/gpt-5.2",La=`You are Scylla, a work plan quality assurance specialist. You evaluate work plans against SOLID principles and measurable criteria to ensure implementability, maintainability, and completeness.
910
910
 
911
911
  ## Quality Assurance Framework
912
912
 
@@ -1030,7 +1030,7 @@ For 2-3 representative tasks, simulate execution:
1030
1030
  - **Scope Boundaries**: Every task must define what is NOT included
1031
1031
  - **Dependency Clarity**: Every dependent task must specify its prerequisites
1032
1032
 
1033
- Remember: Your value lies in catching plan deficiencies before implementation. Systematic quality assurance prevents wasted effort, scope creep, and implementation failures.`;function Bn(e=Da){let t=M(["write","edit","task"]),n={description:"Quality assurance specialist that evaluates work plans against SOLID principles and measurable criteria to ensure implementability and maintainability.",mode:"subagent",model:e,temperature:0.1,...t,prompt:Na};if(Y(e))return{...n,reasoningEffort:"medium",textVerbosity:"high"};return{...n,thinking:{type:"enabled",budgetTokens:32000}}}var ot=Bn();var Oa="google/gemini-3-pro-preview";var La=`You are Pearl, a multimedia analysis specialist that extracts meaningful information from visual and document formats. Your methodology applies systematic extraction protocols.
1033
+ Remember: Your value lies in catching plan deficiencies before implementation. Systematic quality assurance prevents wasted effort, scope creep, and implementation failures.`;function Yn(e=Oa){let t=R(["write","edit","task"]),n={description:"Quality assurance specialist that evaluates work plans against SOLID principles and measurable criteria to ensure implementability and maintainability.",mode:"subagent",model:e,temperature:0.1,...t,prompt:La};if(z(e))return{...n,reasoningEffort:"medium",textVerbosity:"high"};return{...n,thinking:{type:"enabled",budgetTokens:32000}}}var ct=Yn();var Fa="google/gemini-3-pro-preview";var Ia=`You are Pearl, a multimedia analysis specialist that extracts meaningful information from visual and document formats. Your methodology applies systematic extraction protocols.
1034
1034
 
1035
1035
  ## Analysis Framework
1036
1036
 
@@ -1167,7 +1167,7 @@ Present findings in organized format:
1167
1167
  - **Preserve Context**: Note where content is partial or unclear
1168
1168
  - **Structured Output**: Follow the template for parseability
1169
1169
 
1170
- Remember: Your value lies in transforming visual content into actionable, structured information. Accurate extraction enables downstream agents to use multimedia content effectively.`;function Jn(e=Oa){let t=M(["write","edit","task"]);return{description:"Multimedia analysis specialist for PDFs, images, diagrams, and visual content. Extracts structured information for downstream use.",mode:"subagent",model:e,temperature:0.1,...t,prompt:La}}var at=Jn();var Fa="anthropic/claude-opus-4-5",Ia=`# Poseidon - Pre-Planning Consultant
1170
+ Remember: Your value lies in transforming visual content into actionable, structured information. Accurate extraction enables downstream agents to use multimedia content effectively.`;function Vn(e=Fa){let t=R(["write","edit","task"]);return{description:"Multimedia analysis specialist for PDFs, images, diagrams, and visual content. Extracts structured information for downstream use.",mode:"subagent",model:e,temperature:0.1,...t,prompt:Ia}}var lt=Vn();var $a="anthropic/claude-opus-4-5",ja=`# Poseidon - Pre-Planning Consultant
1171
1171
 
1172
1172
  You operate as a constraint satisfaction specialist that analyzes work requests to identify requirements, boundaries, and hidden ambiguities before planning begins. Your methodology applies formal constraint analysis to ensure complete understanding.
1173
1173
 
@@ -1279,7 +1279,7 @@ Output structured requirements for the planner:
1279
1279
  - **Ambiguity Transparency**: Never mask uncertainty as certainty
1280
1280
  - **Actionable Output**: Every finding must enable planning decisions
1281
1281
 
1282
- Remember: Your value lies in ensuring planners have complete, unambiguous requirements. Better constraint analysis prevents planning failures, scope creep, and implementation surprises.`,$a=M(["write","edit","task"]);function Yn(e=Fa){return{description:"Pre-planning consultant that analyzes work requests using constraint satisfaction theory to identify requirements, boundaries, and ambiguities before planning begins.",mode:"subagent",model:e,temperature:0.3,...$a,prompt:Ia,thinking:{type:"enabled",budgetTokens:32000}}}var st=Yn();function Vn(e="anthropic/claude-opus-4-5"){return{description:"System architecture specialist that analyzes codebases to identify structural patterns, design issues, and improvement opportunities with actionable recommendations.",mode:"subagent",model:e,temperature:0.2,tools:{write:!1,edit:!1},prompt:`# Leviathan - System Architect
1282
+ Remember: Your value lies in ensuring planners have complete, unambiguous requirements. Better constraint analysis prevents planning failures, scope creep, and implementation surprises.`,_a=R(["write","edit","task"]);function zn(e=$a){return{description:"Pre-planning consultant that analyzes work requests using constraint satisfaction theory to identify requirements, boundaries, and ambiguities before planning begins.",mode:"subagent",model:e,temperature:0.3,..._a,prompt:ja,thinking:{type:"enabled",budgetTokens:32000}}}var dt=zn();function Gn(e="anthropic/claude-opus-4-5"){return{description:"System architecture specialist that analyzes codebases to identify structural patterns, design issues, and improvement opportunities with actionable recommendations.",mode:"subagent",model:e,temperature:0.2,tools:{write:!1,edit:!1},prompt:`# Leviathan - System Architect
1283
1283
 
1284
1284
  You are Leviathan, a system architecture specialist that analyzes codebases to identify structural patterns, design issues, and improvement opportunities. Your methodology applies architectural analysis principles.
1285
1285
 
@@ -1408,7 +1408,7 @@ Provide actionable architectural guidance:
1408
1408
  - **Prioritized**: Critical issues distinguished from enhancements
1409
1409
  - **Practical**: Balance theoretical optimality with implementation reality
1410
1410
 
1411
- Remember: Your value lies in identifying structural patterns that impact long-term maintainability. Superior architectural analysis prevents technical debt accumulation and enables sustainable growth.`,thinking:{type:"enabled",budgetTokens:32000}}}var ct=Vn();function zn(e){return e.startsWith("openai/")||e.startsWith("github-copilot/gpt-")}var ja="openai/gpt-5.2";var _a=`You operate as a strategic technical advisor employing first-principles reasoning to resolve complex architectural challenges. Your methodology prioritizes systematic analysis, explicit trade-off evaluation, and evidence-based decision making.
1411
+ Remember: Your value lies in identifying structural patterns that impact long-term maintainability. Superior architectural analysis prevents technical debt accumulation and enables sustainable growth.`,thinking:{type:"enabled",budgetTokens:32000}}}var ut=Gn();function Xn(e){return e.startsWith("openai/")||e.startsWith("github-copilot/gpt-")}var Ua="openai/gpt-5.2";var Wa=`You operate as a strategic technical advisor employing first-principles reasoning to resolve complex architectural challenges. Your methodology prioritizes systematic analysis, explicit trade-off evaluation, and evidence-based decision making.
1412
1412
 
1413
1413
  ## Problem-Solving Framework
1414
1414
 
@@ -1514,7 +1514,7 @@ Before presenting any recommendation:
1514
1514
  - Standalone responses: Each answer must be complete without follow-up
1515
1515
  - Actionable output: Every recommendation must enable immediate implementation
1516
1516
 
1517
- Remember: Your value lies in reducing uncertainty through systematic analysis, not in producing solutions faster. Better decisions from deeper reasoning beat faster decisions from surface thinking. When in doubt, show your reasoning framework explicitly.`;function Gn(e=ja){let t=M(["write","edit","task"]),n={description:"Read-only consultation agent. Employs first-principles reasoning, trade-off analysis, and evidence-based decision making for complex architecture challenges.",mode:"subagent",model:e,temperature:0.1,...t,prompt:_a};if(zn(e))return{...n,reasoningEffort:"medium",textVerbosity:"high"};return{...n,thinking:{type:"enabled",budgetTokens:32000}}}var lt=Gn();var Ua="anthropic/claude-opus-4-5",Wa=`# Cartographer - Planning Engine
1517
+ Remember: Your value lies in reducing uncertainty through systematic analysis, not in producing solutions faster. Better decisions from deeper reasoning beat faster decisions from surface thinking. When in doubt, show your reasoning framework explicitly.`;function Qn(e=Ua){let t=R(["write","edit","task"]),n={description:"Read-only consultation agent. Employs first-principles reasoning, trade-off analysis, and evidence-based decision making for complex architecture challenges.",mode:"subagent",model:e,temperature:0.1,...t,prompt:Wa};if(Xn(e))return{...n,reasoningEffort:"medium",textVerbosity:"high"};return{...n,thinking:{type:"enabled",budgetTokens:32000}}}var pt=Qn();var Ha="anthropic/claude-opus-4-5",qa=`# Cartographer - Planning Engine
1518
1518
 
1519
1519
  You are Cartographer, a planning agent. You produce plans that are correct, complete, and verifiable. You think before you format. You prove before you claim. You ask before you assume.
1520
1520
 
@@ -1731,7 +1731,7 @@ Always include a verification section showing that Phase 4 checks passed.
1731
1731
  5. **Never leave slack uninvestigated.** If budget or time is unused and items exist that could fit, explain why they weren't included.
1732
1732
  6. **Never build backup plans from scratch.** Always derive from the main plan.
1733
1733
  7. **Never delegate when direct tools suffice.** Check grep/glob/lsp before spawning a subagent.
1734
- 8. **Never present a plan without a Definition of Done.** Every plan must have verifiable completion criteria.`;function Ha(e=Ua,t){let n=t?.mode??"primary",r=t?.interactive??n==="primary"?`
1734
+ 8. **Never present a plan without a Definition of Done.** Every plan must have verifiable completion criteria.`;function Ka(e=Ha,t){let n=t?.mode??"primary",r=t?.interactive??n==="primary"?`
1735
1735
 
1736
1736
  You are in PRIMARY MODE. Interact with the user. Ask questions when needed.`:`
1737
1737
 
@@ -1743,10 +1743,10 @@ You are in SUBAGENT MODE. Do not ask questions. Return structured output with do
1743
1743
 
1744
1744
  ## Available Tools
1745
1745
  `,a+=t.availableTools.map((c,l)=>`${l+1}. ${c}`).join(`
1746
- `);let s=Wa+r+a,o={description:"Advanced planning engine with verification gates, quantitative rigor, and interactive user collaboration. Produces correct, complete, verifiable plans through multi-seed search, local improvement, and mandatory self-checks.",mode:n,model:e,temperature:0.2,prompt:s,tools:{write:!1,edit:!1}};if(Y(e))return{...o,reasoningEffort:"high",textVerbosity:"high"};return{...o,thinking:{type:"enabled",budgetTokens:1e5}}}var dt=Ha();import{tool as qa}from"@opencode-ai/plugin";import{z as Xn}from"zod";import{execFile as Ka}from"node:child_process";import{promisify as Ba}from"node:util";import Qn from"node:path";var __dirname="/home/runner/work/kraken/kraken/src/tools",Ja=Ba(Ka);function Zn(){return process.platform==="win32"?["where"]:["which"]}async function Ya(){try{let e=Bun.spawn([...Zn(),"python3"],{stdout:"pipe",stderr:"pipe"}),t=await new Response(e.stdout).text();if(await e.exited,e.exitCode===0)return t.trim().split(`
1747
- `)[0]?.trim()??null}catch{}try{let e=Bun.spawn([...Zn(),"python"],{stdout:"pipe",stderr:"pipe"}),t=await new Response(e.stdout).text();if(await e.exited,e.exitCode===0)return t.trim().split(`
1748
- `)[0]?.trim()??null}catch{}return null}async function Va(e){let t=Qn.resolve(__dirname,"..","compression");try{let n=await Ya();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:i,stderr:r}=await Ja(n,[Qn.join(t,"cli.py"),"compress",e],{cwd:t,maxBuffer:10485760,timeout:30000});if(r&&!i)throw Error(r);let a=JSON.parse(i);if(a.error)throw Error(a.error);return{success:!0,compressed:a.decompressed_text,metadata:{originalTokens:a.metadata.original_tokens,decompressedTokens:a.metadata.decompressed_tokens,tokenChangePercent:a.metadata.token_change_percent}}}catch(n){return{success:!1,error:n instanceof Error?n.message:"Unknown error"}}}var ei=qa({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:Xn.string().describe("Text to compress"),level:Xn.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 i=await Va(t);return JSON.stringify(i,null,2)}});import{tool as Ga}from"@opencode-ai/plugin";import{z as re}from"zod";import{readFile as Xa}from"fs/promises";import{join as Qa}from"path";import{readFile as he,writeFile as ut}from"fs/promises";import{join as ne}from"path";var za=5;async function ie(e){let t=ne(e,".opencode","config.json"),n=await he(t,"utf-8");return JSON.parse(n).agents||{}}async function ye(e,t){let n=ne(e,".opencode","config.json"),i=await he(n,"utf-8"),r=JSON.parse(i);r.agents={...r.agents,...t},r.modelSwitcher=r.modelSwitcher||{},r.modelSwitcher.lastUpdated=Date.now(),await ut(n,JSON.stringify(r,null,2))}async function Te(e){let t=ne(e,".opencode","model-switcher-history.json");try{let n=await he(t,"utf-8");return JSON.parse(n)}catch{return[]}}async function Me(e,t){let n=ne(e,".opencode","model-switcher-history.json"),i=await Te(e);i=[{...t,timestamp:Date.now()},...i].slice(0,za),await ut(n,JSON.stringify(i,null,2))}async function Re(e){let t=ne(e,".opencode","config.json"),n=await he(t,"utf-8"),i=JSON.parse(n),r={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()}};if(i.modelSwitcher?.presets){for(let[s,o]of Object.entries(i.modelSwitcher.presets))if(r[s]&&typeof o==="object")r[s].config=o}let a=i.modelSwitcher?.customPresets||{};return{...r,...a}}async function ti(e,t,n){let i=ne(e,".opencode","config.json"),r=await he(i,"utf-8"),a=JSON.parse(r);a.modelSwitcher=a.modelSwitcher||{},a.modelSwitcher.customPresets=a.modelSwitcher.customPresets||{},a.modelSwitcher.customPresets[t]=n,await ut(i,JSON.stringify(a,null,2))}var V={"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 De(e){return Object.values(V).filter((t)=>t.provider===e).sort((t,n)=>{let i={flagship:0,balanced:1,fast:2};return i[t.tier]-i[n.tier]})}function Ne(e){return V[e]?.displayName||e}function pt(e){return e in V}function Za(){return process.cwd()}var ni=Ga({description:"Intelligent agent and subagent model manager with presets and history",args:{action:re.enum(["set","set-all","preset","status","available","create-preset","list-presets","history","rollback","costs","validate"]),agent:re.string().optional(),model:re.string().optional(),preset:re.string().optional(),presetName:re.string().optional(),historyIndex:re.number().optional()},async execute(e){let t=Za();switch(e.action){case"set":return await es(e.agent,e.model,t),JSON.stringify({success:!0,message:`${e.agent} updated`});case"set-all":return await ts(e.model,t),JSON.stringify({success:!0,message:"All agents updated"});case"preset":return await ii(e.preset,t),JSON.stringify({success:!0,message:`Preset '${e.preset}' applied`});case"status":return JSON.stringify(await is(t),null,2);case"available":return JSON.stringify(rs(),null,2);case"create-preset":return await ns(e.presetName,t),JSON.stringify({success:!0,message:`Preset '${e.presetName}' created`});case"list-presets":return JSON.stringify(await os(t),null,2);case"history":return JSON.stringify(await as(t),null,2);case"rollback":return await cs(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(ls(t),null,2)}}});async function es(e,t,n){if(!pt(t))throw Error(`Model '${t}' not found. Use /models available to list options.`);let i=await ie(n);if(!i[e]){let r=Object.keys(i).join(", ");throw Error(`Agent '${e}' not found. Valid agents: ${r}`)}await ye(n,{[e]:{model:t}}),await Me(n,{type:"agent",agent:e,model:t})}async function ts(e,t){if(!pt(e))throw Error(`Model '${e}' not found. Use /models available to list options.`);let n=await ie(t),i={};for(let r of Object.keys(n))i[r]={model:e};await ye(t,i),await Me(t,{type:"all",model:e})}async function ii(e,t){let n=await Re(t),i=n[e];if(!i){let r=Object.keys(n).join(", ");throw Error(`Preset '${e}' not found. Available: ${r}`)}await ye(t,i.config),await Me(t,{type:"preset",name:e})}async function ns(e,t){let n=await ie(t);await ti(t,e,{description:`Custom preset: ${e}`,config:n,createdAt:Date.now()})}async function is(e){let t=await ie(e),n=await Re(e),i=Qa(e,".opencode","config.json"),r=JSON.parse(await Xa(i,"utf-8")),a=Object.entries(t).map(([o,c])=>({agent:o,model:c.model,provider:V[c.model]?.provider||"unknown",displayName:Ne(c.model),enabled:c.enabled!==!1})),s=Object.keys(n).filter((o)=>["performance","quality","balanced","economy"].includes(o));return{agents:a,builtInPresets:s,customPresets:Object.keys(n).filter((o)=>!["performance","quality","balanced","economy"].includes(o)),setupComplete:r.modelSwitcher?.setupComplete||!1,totalAgents:a.length}}function rs(){let e=Object.values(V).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:De("anthropic"),openai:De("openai"),google:De("google")};return{models:e,byProvider:t}}async function os(e){let t=await Re(e),n={};for(let[i,r]of Object.entries(t))n[i]={description:r.description,agentCount:Object.keys(r.config).length,createdAt:r.createdAt};return{presets:n}}async function as(e){let n=(await Te(e)).map((i,r)=>({index:r,timestamp:new Date(i.timestamp).toISOString(),type:i.type,description:ss(i)}));return{history:n,total:n.length}}function ss(e){if(e.type==="preset")return`Preset: ${e.name}`;else if(e.type==="all")return`All → ${Ne(e.model)}`;else return`${e.agent} → ${Ne(e.model)}`}async function cs(e,t){let n=await Te(t),i=n[e];if(!i||!i.model)throw Error(`History entry ${e} not found or invalid. Total entries: ${n.length}`);if(i.type==="preset"){if(typeof i.name==="string")await ii(i.name,t)}else{let r=await ie(t),a=i.type==="all"?void 0:i.agent,s=i.model,o=a?{[a]:{model:s}}:Object.fromEntries(Object.keys(r).map((c)=>[c,{model:s}]));await ye(t,o)}}function ls(e){return{valid:!0,message:"Configuration is valid",modelCount:Object.keys(V).length}}import*as N from"fs";import*as Le from"path";import*as di from"os";import*as mt from"path";import*as ri from"os";var ds=mt.join(ri.homedir(),".kraken"),wu=mt.join(ds,"todos");import*as gt from"path";import*as oi from"os";var us=gt.join(oi.homedir(),".kraken"),Au=gt.join(us,"transcripts");import{promises as ai}from"fs";import{join as ft,dirname as ps}from"path";import*as si from"os";var ms="utf-8";function gs(e,t){if(t)return ft(t,`${e}.jsonl`);let n=ft(si.homedir(),".claude","transcripts");return ft(n,`${e}.jsonl`)}async function ht(e,t,n){let i=gs(e,n);try{await ai.mkdir(ps(i),{recursive:!0});let r={...t,timestamp:t.timestamp||Date.now()},a=JSON.stringify(r)+`
1749
- `;await ai.appendFile(i,a,ms)}catch(r){console.error("[transcript-manager] Error appending transcript entry:",r)}}async function Oe(e,t,n,i,r){let a={role:"assistant",content:"",timestamp:Date.now(),toolName:t,toolInput:n,toolOutput:i};await ht(e,a,r)}async function ci(e,t,n){let i={role:"user",content:t,timestamp:Date.now()};await ht(e,i,n)}async function li(e,t,n){let i={role:"assistant",content:t,timestamp:Date.now()};await ht(e,i,n)}var yt=Le.join(di.homedir(),".opencode","kraken-code"),bt=Le.join(yt,"sessions");function ui(e){return Le.join(bt,`${e}.json`)}function pi(){if(!N.existsSync(yt))N.mkdirSync(yt,{recursive:!0});if(!N.existsSync(bt))N.mkdirSync(bt,{recursive:!0})}function mi(e){try{pi();let t=ui(e);if(!N.existsSync(t))return null;let n=N.readFileSync(t,"utf-8");return JSON.parse(n)}catch(t){return console.error(`[storage] Error reading state for session ${e}:`,t),null}}function wt(e,t){try{pi();let n=ui(e);N.writeFileSync(n,JSON.stringify(t,null,2))}catch(n){console.error(`[storage] Error writing state for session ${e}:`,n)}}var fs=`You are Ralph, a specialized iteration agent focused on achieving completion promises.
1746
+ `);let s=qa+r+a,o={description:"Advanced planning engine with verification gates, quantitative rigor, and interactive user collaboration. Produces correct, complete, verifiable plans through multi-seed search, local improvement, and mandatory self-checks.",mode:n,model:e,temperature:0.2,prompt:s,tools:{write:!1,edit:!1}};if(z(e))return{...o,reasoningEffort:"high",textVerbosity:"high"};return{...o,thinking:{type:"enabled",budgetTokens:1e5}}}var mt=Ka();import{tool as Ba}from"@opencode-ai/plugin";import{z as Zn}from"zod";import{execFile as Ja}from"node:child_process";import{promisify as Ya}from"node:util";import ei from"node:path";var __dirname="/home/runner/work/kraken/kraken/src/tools",Va=Ya(Ja);function ti(){return process.platform==="win32"?["where"]:["which"]}async function za(){try{let e=Bun.spawn([...ti(),"python3"],{stdout:"pipe",stderr:"pipe"}),t=await new Response(e.stdout).text();if(await e.exited,e.exitCode===0)return t.trim().split(`
1747
+ `)[0]?.trim()??null}catch{}try{let e=Bun.spawn([...ti(),"python"],{stdout:"pipe",stderr:"pipe"}),t=await new Response(e.stdout).text();if(await e.exited,e.exitCode===0)return t.trim().split(`
1748
+ `)[0]?.trim()??null}catch{}return null}async function Ga(e){let t=ei.resolve(__dirname,"..","compression");try{let n=await za();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:i,stderr:r}=await Va(n,[ei.join(t,"cli.py"),"compress",e],{cwd:t,maxBuffer:10485760,timeout:30000});if(r&&!i)throw Error(r);let a=JSON.parse(i);if(a.error)throw Error(a.error);return{success:!0,compressed:a.decompressed_text,metadata:{originalTokens:a.metadata.original_tokens,decompressedTokens:a.metadata.decompressed_tokens,tokenChangePercent:a.metadata.token_change_percent}}}catch(n){return{success:!1,error:n instanceof Error?n.message:"Unknown error"}}}var ni=Ba({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:Zn.string().describe("Text to compress"),level:Zn.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 i=await Ga(t);return JSON.stringify(i,null,2)}});import{tool as Qa}from"@opencode-ai/plugin";import{z as ae}from"zod";import{readFile as Za}from"fs/promises";import{join as es}from"path";import{readFile as be,writeFile as gt}from"fs/promises";import{join as re}from"path";var Xa=5;async function oe(e){let t=re(e,".opencode","config.json"),n=await be(t,"utf-8");return JSON.parse(n).agents||{}}async function we(e,t){let n=re(e,".opencode","config.json"),i=await be(n,"utf-8"),r=JSON.parse(i);r.agents={...r.agents,...t},r.modelSwitcher=r.modelSwitcher||{},r.modelSwitcher.lastUpdated=Date.now(),await gt(n,JSON.stringify(r,null,2))}async function Re(e){let t=re(e,".opencode","model-switcher-history.json");try{let n=await be(t,"utf-8");return JSON.parse(n)}catch{return[]}}async function De(e,t){let n=re(e,".opencode","model-switcher-history.json"),i=await Re(e);i=[{...t,timestamp:Date.now()},...i].slice(0,Xa),await gt(n,JSON.stringify(i,null,2))}async function Ne(e){let t=re(e,".opencode","config.json"),n=await be(t,"utf-8"),i=JSON.parse(n),r={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()}};if(i.modelSwitcher?.presets){for(let[s,o]of Object.entries(i.modelSwitcher.presets))if(r[s]&&typeof o==="object")r[s].config=o}let a=i.modelSwitcher?.customPresets||{};return{...r,...a}}async function ii(e,t,n){let i=re(e,".opencode","config.json"),r=await be(i,"utf-8"),a=JSON.parse(r);a.modelSwitcher=a.modelSwitcher||{},a.modelSwitcher.customPresets=a.modelSwitcher.customPresets||{},a.modelSwitcher.customPresets[t]=n,await gt(i,JSON.stringify(a,null,2))}var G={"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 Oe(e){return Object.values(G).filter((t)=>t.provider===e).sort((t,n)=>{let i={flagship:0,balanced:1,fast:2};return i[t.tier]-i[n.tier]})}function Le(e){return G[e]?.displayName||e}function ft(e){return e in G}function ts(){return process.cwd()}var ri=Qa({description:"Intelligent agent and subagent model manager with presets and history",args:{action:ae.enum(["set","set-all","preset","status","available","create-preset","list-presets","history","rollback","costs","validate"]),agent:ae.string().optional(),model:ae.string().optional(),preset:ae.string().optional(),presetName:ae.string().optional(),historyIndex:ae.number().optional()},async execute(e){let t=ts();switch(e.action){case"set":return await ns(e.agent,e.model,t),JSON.stringify({success:!0,message:`${e.agent} updated`});case"set-all":return await is(e.model,t),JSON.stringify({success:!0,message:"All agents updated"});case"preset":return await oi(e.preset,t),JSON.stringify({success:!0,message:`Preset '${e.preset}' applied`});case"status":return JSON.stringify(await os(t),null,2);case"available":return JSON.stringify(as(),null,2);case"create-preset":return await rs(e.presetName,t),JSON.stringify({success:!0,message:`Preset '${e.presetName}' created`});case"list-presets":return JSON.stringify(await ss(t),null,2);case"history":return JSON.stringify(await cs(t),null,2);case"rollback":return await ds(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(us(t),null,2)}}});async function ns(e,t,n){if(!ft(t))throw Error(`Model '${t}' not found. Use /models available to list options.`);let i=await oe(n);if(!i[e]){let r=Object.keys(i).join(", ");throw Error(`Agent '${e}' not found. Valid agents: ${r}`)}await we(n,{[e]:{model:t}}),await De(n,{type:"agent",agent:e,model:t})}async function is(e,t){if(!ft(e))throw Error(`Model '${e}' not found. Use /models available to list options.`);let n=await oe(t),i={};for(let r of Object.keys(n))i[r]={model:e};await we(t,i),await De(t,{type:"all",model:e})}async function oi(e,t){let n=await Ne(t),i=n[e];if(!i){let r=Object.keys(n).join(", ");throw Error(`Preset '${e}' not found. Available: ${r}`)}await we(t,i.config),await De(t,{type:"preset",name:e})}async function rs(e,t){let n=await oe(t);await ii(t,e,{description:`Custom preset: ${e}`,config:n,createdAt:Date.now()})}async function os(e){let t=await oe(e),n=await Ne(e),i=es(e,".opencode","config.json"),r=JSON.parse(await Za(i,"utf-8")),a=Object.entries(t).map(([o,c])=>({agent:o,model:c.model,provider:G[c.model]?.provider||"unknown",displayName:Le(c.model),enabled:c.enabled!==!1})),s=Object.keys(n).filter((o)=>["performance","quality","balanced","economy"].includes(o));return{agents:a,builtInPresets:s,customPresets:Object.keys(n).filter((o)=>!["performance","quality","balanced","economy"].includes(o)),setupComplete:r.modelSwitcher?.setupComplete||!1,totalAgents:a.length}}function as(){let e=Object.values(G).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:Oe("anthropic"),openai:Oe("openai"),google:Oe("google")};return{models:e,byProvider:t}}async function ss(e){let t=await Ne(e),n={};for(let[i,r]of Object.entries(t))n[i]={description:r.description,agentCount:Object.keys(r.config).length,createdAt:r.createdAt};return{presets:n}}async function cs(e){let n=(await Re(e)).map((i,r)=>({index:r,timestamp:new Date(i.timestamp).toISOString(),type:i.type,description:ls(i)}));return{history:n,total:n.length}}function ls(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 ds(e,t){let n=await Re(t),i=n[e];if(!i||!i.model)throw Error(`History entry ${e} not found or invalid. Total entries: ${n.length}`);if(i.type==="preset"){if(typeof i.name==="string")await oi(i.name,t)}else{let r=await oe(t),a=i.type==="all"?void 0:i.agent,s=i.model,o=a?{[a]:{model:s}}:Object.fromEntries(Object.keys(r).map((c)=>[c,{model:s}]));await we(t,o)}}function us(e){return{valid:!0,message:"Configuration is valid",modelCount:Object.keys(G).length}}import*as L from"fs";import*as Ie from"path";import*as pi from"os";x();import*as ht from"path";import*as ai from"os";var ku=S("kraken-todo"),ps=ht.join(ai.homedir(),".kraken"),Cu=ht.join(ps,"todos");x();import*as yt from"path";import*as si from"os";var Eu=S("kraken-transcript"),ms=yt.join(si.homedir(),".kraken"),Tu=yt.join(ms,"transcripts");x();var Nu=S("todo-manager");x();import{promises as ci}from"fs";import{join as bt,dirname as gs}from"path";import*as li from"os";var fs=S("transcript-manager");var hs="utf-8";function ys(e,t){if(t)return bt(t,`${e}.jsonl`);let n=bt(li.homedir(),".claude","transcripts");return bt(n,`${e}.jsonl`)}async function wt(e,t,n){let i=ys(e,n);try{await ci.mkdir(gs(i),{recursive:!0});let r={...t,timestamp:t.timestamp||Date.now()},a=JSON.stringify(r)+`
1749
+ `;await ci.appendFile(i,a,hs)}catch(r){fs.error("Error appending transcript entry:",r)}}async function Fe(e,t,n,i,r){let a={role:"assistant",content:"",timestamp:Date.now(),toolName:t,toolInput:n,toolOutput:i};await wt(e,a,r)}async function di(e,t,n){let i={role:"user",content:t,timestamp:Date.now()};await wt(e,i,n)}async function ui(e,t,n){let i={role:"assistant",content:t,timestamp:Date.now()};await wt(e,i,n)}var St=Ie.join(pi.homedir(),".opencode","kraken-code"),At=Ie.join(St,"sessions");function mi(e){return Ie.join(At,`${e}.json`)}function gi(){if(!L.existsSync(St))L.mkdirSync(St,{recursive:!0});if(!L.existsSync(At))L.mkdirSync(At,{recursive:!0})}function fi(e){try{gi();let t=mi(e);if(!L.existsSync(t))return null;let n=L.readFileSync(t,"utf-8");return JSON.parse(n)}catch(t){return console.error(`[storage] Error reading state for session ${e}:`,t),null}}function xt(e,t){try{gi();let n=mi(e);L.writeFileSync(n,JSON.stringify(t,null,2))}catch(n){console.error(`[storage] Error writing state for session ${e}:`,n)}}var bs=`You are Ralph, a specialized iteration agent focused on achieving completion promises.
1750
1750
 
1751
1751
  Your methodology:
1752
1752
  1. Analyze current state against promise criteria
@@ -1757,19 +1757,19 @@ Your methodology:
1757
1757
 
1758
1758
  Remember: You complement Kraken's orchestration. Kraken plans the overall approach; you ensure that specific promise is satisfied.
1759
1759
  Don't re-plan—just iterate toward the specific promise criteria.
1760
- `,gi=24;function fi(e,t){let n=t?.config??{enabled:!0},i=new Map;function r(l){let u=l.match(/<promise>\s*([\s\S]*?)\s*<\/promise>/i);if(!u)return null;let p=u[1].trim(),m=l.match(/<user-task>\s*([\s\S]*?)\s*<\/user-task>/i),g=m?m[1].trim():l.split("<promise>")[0].trim();return{promise:p,task:g}}function a(l,u,p,m=gi){let g={sessionID:l,promise:u,task:p,maxIterations:m,currentIteration:0,status:"active",transcript:[],startTime:Date.now()};return i.set(l,g),g}function s(l){if(l.currentIteration===0)return"No previous iterations.";return l.transcript.slice(-l.currentIteration*2).join(`
1760
+ `,hi=24;function yi(e,t){let n=t?.config??{enabled:!0},i=new Map;function r(l){let u=l.match(/<promise>\s*([\s\S]*?)\s*<\/promise>/i);if(!u)return null;let p=u[1].trim(),m=l.match(/<user-task>\s*([\s\S]*?)\s*<\/user-task>/i),g=m?m[1].trim():l.split("<promise>")[0].trim();return{promise:p,task:g}}function a(l,u,p,m=hi){let g={sessionID:l,promise:u,task:p,maxIterations:m,currentIteration:0,status:"active",transcript:[],startTime:Date.now()};return i.set(l,g),g}function s(l){if(l.currentIteration===0)return"No previous iterations.";return l.transcript.slice(-l.currentIteration*2).join(`
1761
1761
  ---
1762
- `)||`Iteration ${l.currentIteration} completed.`}function o(l){return fs.replace("{prompt}",l.task).replace("{promise}",l.promise).replace("{iterations}",s(l))}function c(l){return l.filter((u)=>u.type==="text").map((u)=>("text"in u)?u.text:"").join(`
1763
- `).trim()}return{"chat.message":async(l,u)=>{if(!n.enabled)return;let{sessionID:p}=l,m=c(u.parts),g=r(m);if(!g)return;let{promise:f,task:b}=g,y=mi(p);if(y&&y.status==="active"){if(y.currentIteration++,y.transcript.push(`Iteration ${y.currentIteration}:
1762
+ `)||`Iteration ${l.currentIteration} completed.`}function o(l){return bs.replace("{prompt}",l.task).replace("{promise}",l.promise).replace("{iterations}",s(l))}function c(l){return l.filter((u)=>u.type==="text").map((u)=>("text"in u)?u.text:"").join(`
1763
+ `).trim()}return{"chat.message":async(l,u)=>{if(!n.enabled)return;let{sessionID:p}=l,m=c(u.parts),g=r(m);if(!g)return;let{promise:f,task:b}=g,y=fi(p);if(y&&y.status==="active"){if(y.currentIteration++,y.transcript.push(`Iteration ${y.currentIteration}:
1764
1764
  ${m}
1765
- `),y.currentIteration>=y.maxIterations)y.status="maxed_out",console.log(`[ralph-loop] Session ${p} reached max iterations (${y.maxIterations})`);wt(p,y),console.log(`[ralph-loop] Continuing iteration ${y.currentIteration}/${y.maxIterations} for session ${p}`),console.log(`[ralph-loop] Next prompt: ${o(y).substring(0,100)}...`)}else{let k=n.maxIterations??gi,v=a(p,f,b,k);console.log(`[ralph-loop] Starting new session ${p} with promise: "${f.substring(0,50)}..."`),wt(p,v),i.set(p,v)}}}}import{exec as hs}from"node:child_process";import{readFile as ys,writeFile as bs,mkdir as ws}from"node:fs/promises";import{existsSync as xt,readFileSync as Ss}from"node:fs";import{join as ae,dirname as As}from"node:path";import{homedir as xs}from"node:os";import{fileURLToPath as ks}from"node:url";var bi="kraken-code",St=86400000,Fe=ae(xs(),".config","kraken-code","cache"),wi="update-check.json",R=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",E=x("auto-update-checker"),oe="",hi=null;function At(){if(!oe)try{let e=As(ks(import.meta.url)),t=[ae(e,"..","package.json"),ae(e,"..","..","package.json"),ae(e,"..","..","..","package.json")];for(let n of t)try{if(xt(n)){let i=JSON.parse(Ss(n,"utf-8"));if(i.name===bi&&i.version){oe=i.version;break}}}catch{}if(!oe)oe="0.0.0"}catch{oe="0.0.0"}return oe}function Si(e){let t=e.cacheDir??Fe;return ae(t,wi)}async function Cs(e){try{let t=Si(e);if(!xt(t))return null;let n=await ys(t,"utf-8");return JSON.parse(n)}catch(t){return null}}async function vs(e,t){try{let n=e.cacheDir??Fe;if(!xt(n))await ws(n,{recursive:!0});let i=Si(e);await bs(i,JSON.stringify(t,null,2),"utf-8")}catch(n){if(R)E.warn("Failed to save cache:",n)}}async function Ps(){return new Promise((e)=>{hs(`npm view ${bi} version`,(t,n,i)=>{if(t){if(R)E.warn("Failed to check npm registry:",t);e(null);return}if(i){if(R)E.warn("npm error:",i);e(null);return}let r=n.trim();if(r)e(r);else e(null)})})}function Es(e,t){let n=e.split(".").map(Number),i=t.split(".").map(Number);for(let r=0;r<Math.max(n.length,i.length);r++){let a=n[r]??0,s=i[r]??0;if(a>s)return 1;if(a<s)return-1}return 0}async function yi(e){let t=At(),n=e.cacheTTL??St,i=Date.now(),r=await Cs(e);if(hi=r,r&&i-r.lastChecked<n){if(R)E.debug(`Using cached update check from ${new Date(r.lastChecked).toISOString()}`);return{updateAvailable:r.updateAvailable,latestVersion:r.latestVersion}}if(R)E.debug("Checking npm registry for updates...");let a=await Ps();if(!a){if(R)E.debug("Could not determine latest version");return{updateAvailable:!1,latestVersion:null}}let s=Es(a,t)>0,o={currentVersion:t,latestVersion:a,lastChecked:i,updateAvailable:s};return await vs(e,o),hi=o,{updateAvailable:s,latestVersion:a}}function Ai(e,t){let n=t?.config??{enabled:!0,checkOnLoad:!0,cacheDir:Fe,cacheTTL:St,notify:!0,checkInterval:St};return{config:async(i)=>{if(!n.enabled)return;if(n.checkOnLoad){if(R)E.debug("Checking for updates on load...");let{updateAvailable:r,latestVersion:a}=await yi(n);if(r&&n.notify){if(R)E.info("UPDATE AVAILABLE"),E.info(`Current version: ${At()}`),E.info(`Latest version: ${a}`),E.info("To update, run: npm update kraken-code (or bun update kraken-code)")}else if(!r){if(R)E.debug(`You are using the latest version: ${At()}`)}}},event:async(i)=>{if(!n.enabled)return;if(i.event?.type==="installation.updated"){if(R)E.debug("Installation was updated");let r=n.cacheDir??Fe,a=ae(r,wi);try{let{unlink:s}=await import("node:fs/promises");if(await s(a),R)E.debug("Cleared update cache")}catch(s){}}if(i.event?.type==="installation.update-available"){if(R)E.debug("New update available");let{latestVersion:r}=await yi(n);if(r){if(R)E.debug(`Latest version: ${r}`)}}}}}import{tool as xi}from"@opencode-ai/plugin";import{z as W}from"zod";import{execFile as Ts}from"node:child_process";import{promisify as Ms}from"node:util";var Rs=Ms(Ts);async function ki(e,t,n){let i=["--json","--pattern",e,"--lang",t];if(n?.replace)i.push("--replace",n.replace);if(n?.path)i.push("--path",n.path);if(n?.glob)i.push("--glob",n.glob);try{let{stdout:r,stderr:a}=await Rs("sg",i,{maxBuffer:10485760,timeout:30000});if(a&&!r)return{success:!1,error:a};try{let s=JSON.parse(r);return{success:!0,matches:s.matches||[],count:s.count||0}}catch{return{success:!0,matches:[],count:0}}}catch(r){if(r instanceof Error&&r.message.includes("ENOENT"))return{success:!1,error:"ast-grep CLI not installed. Install with: npm install -g @ast-grep/cli"};return{success:!1,error:r instanceof Error?r.message:"Unknown error"}}}var Ci=xi({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:W.string().describe("AST pattern to search for (use $VAR for variables)"),language:W.string().describe("Programming language (typescript, javascript, python, rust, go, java, cpp, etc.)"),path:W.string().optional().describe("Directory or file to search in (default: current directory)"),glob:W.string().optional().describe("File glob pattern (e.g., '*.ts', 'src/**/*.ts')")},async execute(e){let{pattern:t,language:n,path:i,glob:r}=e,a=await ki(t,n,{path:i,glob:r});return JSON.stringify(a,null,2)}}),vi=xi({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:W.string().describe("AST pattern to search for"),replacement:W.string().describe("AST pattern to replace with (use $VAR to reference matched variables)"),language:W.string().describe("Programming language"),path:W.string().optional().describe("Directory or file to search in (default: current directory)"),glob:W.string().optional().describe("File glob pattern")},async execute(e){let{pattern:t,replacement:n,language:i,path:r,glob:a}=e,s=await ki(t,i,{replace:n,path:r,glob:a});return JSON.stringify(s,null,2)}});import*as H from"fs";import*as Ct from"path";import*as Pi from"os";import{tool as Ds}from"@opencode-ai/plugin";import{z as be}from"zod";var kt=Ct.join(Pi.homedir(),".opencode","sessions");function q(){if(!H.existsSync(kt))H.mkdirSync(kt,{recursive:!0});return kt}function Ns(){let e=q();if(!H.existsSync(e))return[];let t=[];try{let n=H.readdirSync(e);for(let i of n){if(!i.endsWith(".json"))continue;let r=i.slice(0,-5),a=Ct.join(e,i);try{let s=H.readFileSync(a,"utf-8"),o=JSON.parse(s),c={sessionID:r,created:o.created||o.createdAt||new Date(0).toISOString(),lastActive:o.lastActive||o.updatedAt||new Date().toISOString(),messageCount:o.messageCount||o.messages?.length||0,agent:o.agent,duration:o.duration,fileCount:o.fileCount,editCount:o.editCount,toolUsage:o.toolUsage||{}};t.push({sessionID:r,path:a,metadata:c})}catch(s){console.error(`[session-list] Error reading session ${r}:`,s)}}}catch(n){console.error("[session-list] Error reading sessions directory:",n)}return t}function Os(e,t,n){if(!t&&!n)return e;let i=t?new Date(t).getTime():0,r=n?new Date(n).getTime():1/0;return e.filter((a)=>{let s=new Date(a.metadata.lastActive).getTime();return s>=i&&s<=r})}function Ls(e,t="desc"){return[...e].sort((n,i)=>{let r=new Date(n.metadata.lastActive).getTime(),a=new Date(i.metadata.lastActive).getTime();return t==="asc"?r-a:a-r})}var vt=Ds({description:"List all OpenCode sessions with filtering and pagination options.",args:{limit:be.number().int().min(1).max(1000).optional(),startDate:be.string().optional(),endDate:be.string().optional(),order:be.enum(["asc","desc"]).optional(),includeMetadata:be.boolean().default(!1)},async execute(e){try{let{limit:t,startDate:n,endDate:i,order:r,includeMetadata:a}=e,s=Ns();if(n||i)s=Os(s,n,i);if(s=Ls(s,r),t)s=s.slice(0,t);let o=s.map((c)=>{if(a)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:o.length,sessions:o})}catch(t){return console.error("[session-list] Error:",t),JSON.stringify({success:!1,error:String(t),sessions:[]})}}});import*as $e from"fs";import*as Ei from"path";import{tool as Fs}from"@opencode-ai/plugin";import{z as Ie}from"zod";function Is(e){return Ei.join(q(),`${e}.json`)}var Pt=Fs({description:"Read messages from a specific session with pagination and filtering options.",args:{sessionID:Ie.string().describe("Session ID to read from"),limit:Ie.number().int().min(1).max(1000).optional(),offset:Ie.number().int().min(0).default(0).describe("Offset for pagination"),includeMetadata:Ie.boolean().default(!1).describe("Include full session metadata")},async execute(e){try{let{sessionID:t,limit:n,offset:i,includeMetadata:r}=e,a=Is(t);if(!$e.existsSync(a))return JSON.stringify({success:!1,error:`Session ${t} not found`,sessionID:t});let s=$e.readFileSync(a,"utf-8"),o=JSON.parse(s),c=o.messages||[],l=c;if(i>0||n)l=c.slice(i,n?i+n:void 0);let u={sessionID:t,messages:l,partial:c.length>l.length,metadata:{sessionID:t,created:o.created||o.createdAt||new Date(0).toISOString(),lastActive:o.lastActive||o.updatedAt||new Date().toISOString(),messageCount:c.length,agent:o.agent,duration:o.duration,fileCount:o.fileCount,editCount:o.editCount,toolUsage:o.toolUsage||{}}},p={success:!0,sessionID:t,totalMessages:c.length,returnedMessages:l.length,offset:i,limit:n||c.length,partial:u.partial,messages:l};if(r)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 _e from"path";import*as Mi from"os";import{tool as $s}from"@opencode-ai/plugin";import{z as je}from"zod";var Tp=_e.join(Mi.homedir(),".opencode","sessions");function js(e){try{let t=z.readFileSync(e,"utf-8"),n=JSON.parse(t),i=new Map;if(n.messages&&Array.isArray(n.messages))n.messages.forEach((r,a)=>{let s=r.role||"unknown",o=r.content||"";if(o&&typeof o==="string"&&o.length>0){let c={type:s==="user"?"user_message":"assistant_message",index:a,content:o,context:o};i.set(o,c)}});return i}catch(t){return console.error(`[session-search] Error indexing session ${e}:`,t),null}}function Ti(e,t){let n=e.toLowerCase(),i=t.content.toLowerCase(),r=0,a=i===n;if(a)r+=100;if(i.includes(n)&&!a)r+=50;let o=n.split(/\s+/),c=0;for(let l of o)if(l.length>2&&i.includes(l))c++;if(r+=c*10,t.type==="user_message")r+=20;return Math.min(r,100)}function _s(){let e=q();if(!z.existsSync(e))return[];let t=[];try{let n=z.readdirSync(e);for(let i of n){if(!i.endsWith(".json"))continue;let r=i.slice(0,-5),a=_e.join(e,i);try{let s=z.readFileSync(a,"utf-8"),o=JSON.parse(s),c={sessionID:r,created:o.created||o.createdAt||new Date(0).toISOString(),lastActive:o.lastActive||o.updatedAt||new Date().toISOString(),messageCount:o.messageCount||o.messages?.length||0,agent:o.agent,duration:o.duration,fileCount:o.fileCount,editCount:o.editCount,toolUsage:o.toolUsage||{}};t.push({sessionID:r,filePath:a,metadata:c})}catch(s){console.error(`[session-search] Error reading session ${r}:`,s)}}}catch(n){console.error("[session-search] Error reading sessions directory:",n)}return t}var Et=$s({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:i,sessionID:r}=e;if(!t||t.trim().length===0)return JSON.stringify({success:!1,error:"Query cannot be empty",results:[]});let a=[];if(r){let c=q(),l=_e.join(c,`${r}.json`);a=[{sessionID:r,filePath:l,metadata:{sessionID:r,created:"",lastActive:"",messageCount:0,toolUsage:{}}}]}else a=_s();let s=[];for(let c of a){let l=js(c.filePath);if(!l)continue;let u=[];for(let[p,m]of l.entries())if(Ti(t,m)>10)u.push(m);if(u.length>0){let p=u.reduce((m,g)=>m+Ti(t,g),0)/u.length;s.push({sessionID:c.sessionID,filePath:c.filePath,metadata:c.metadata,score:Math.round(p),matches:u.slice(0,5)})}}s.sort((c,l)=>l.score-c.score);let o=s.slice(i,i+n);return JSON.stringify({success:!0,query:t,total:s.length,offset:i,limit:n,results:o.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 Ue from"fs";import*as Tt from"path";import{tool as Us}from"@opencode-ai/plugin";import{z as Ws}from"zod";var Lp=Tt.join(process.env.HOME||"",".opencode","sessions");function Hs(e){return Tt.join(q(),`${e}.json`)}function qs(e){let t=Hs(e);if(!Ue.existsSync(t))return null;try{let n=Ue.readFileSync(t,"utf-8"),i=JSON.parse(n);return{sessionID:e,created:i.created||i.createdAt||new Date(0).toISOString(),lastActive:i.lastActive||i.updatedAt||new Date().toISOString(),messageCount:i.messageCount||i.messages?.length||0,agent:i.agent,duration:i.duration,fileCount:i.fileCount,editCount:i.editCount,toolUsage:i.toolUsage||{}}}catch(n){return console.error(`[session-info] Error reading session ${e}:`,n),null}}function Ks(e){let t={totalMessages:e.messageCount,totalToolsUsed:Object.values(e.toolUsage||{}).reduce((n,i)=>n+i,0),mostUsedTool:"",mostUsedToolCount:0,averageMessagesPerMinute:0};if(e.duration)t.averageMessagesPerMinute=e.messageCount/(e.duration/60000);for(let[n,i]of Object.entries(e.toolUsage||{}))if(i>t.mostUsedToolCount)t.mostUsedTool=n,t.mostUsedToolCount=i;return t}var Mt=Us({description:"Get detailed metadata and statistics about a specific session.",args:{sessionID:Ws.string().describe("Session ID to query")},async execute(e){try{let{sessionID:t}=e,n=qs(t);if(!n)return JSON.stringify({success:!1,error:`Session ${t} not found`,sessionID:t});let i=Ks(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:i.totalMessages,totalToolsUsed:i.totalToolsUsed,mostUsedTool:i.mostUsedTool,mostUsedToolCount:i.mostUsedToolCount,averageMessagesPerMinute:i.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 Bs}from"@opencode-ai/plugin";import{z as we}from"zod";import{execFile as Js}from"node:child_process";import{promisify as Ys}from"node:util";var Vs=Ys(Js);async function zs(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:i}=await Vs("rg",n,{maxBuffer:10485760,timeout:30000}),r=[],a=i.split(`
1766
- `);for(let s of a){if(!s.trim())continue;let o=s.match(/^([^:]+):(\d+):(\d+):(.+)$/);if(o)r.push({file:o[1],line:parseInt(o[2],10),column:parseInt(o[3],10),lineContent:o[4]})}return{success:!0,matches:r,count:r.length}}catch(i){if(i instanceof Error&&i.message.includes("ENOENT"))return{success:!1,error:"ripgrep (rg) not installed. Install with: apt install ripgrep or brew install ripgrep"};return{success:!1,error:i instanceof Error?i.message:"Unknown error"}}}var Ri=Bs({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:we.string().describe("Regex pattern to search for"),path:we.string().optional().describe("Directory or file to search in (default: current directory)"),type:we.string().optional().describe("Filter by file type (ts, js, py, rust, go, java, etc.)"),context:we.number().optional().describe("Number of context lines around each match (default: 0)"),invert:we.boolean().optional().describe("Show lines that do NOT match the pattern")},async execute(e){let{pattern:t,path:n,type:i,context:r,invert:a}=e,s=await zs(t,{path:n,type:i,context:r,invert:a});if(!s.success)return JSON.stringify(s,null,2);return JSON.stringify({success:!0,matches:s.matches?.slice(0,100),count:s.count,message:s.count&&s.count>100?`Showing 100 of ${s.count} matches`:void 0},null,2)}});import{tool as Gs}from"@opencode-ai/plugin";import{z as Rt}from"zod";var Di=Gs({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:Rt.enum(["status","cancel","continue","info"]).describe("Ralph-Loop command"),sessionID:Rt.string().optional().describe("Session ID (required for status, cancel)"),maxIterations:Rt.number().min(1).max(100).optional().describe("Max iterations (default: 24)")},async execute(e){let{command:t,sessionID:n,maxIterations:i}=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:i??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 L}from"@opencode-ai/plugin";import{z as h}from"zod";import{promises as Dt}from"node:fs";import*as Nt from"node:os";import*as Se from"node:path";var Ni=Se.join(Nt.homedir(),".kraken","learning"),Oi="learning-state.json",S={experiences:[],knowledgeNodes:[],knowledgeEdges:[],patterns:[],schedules:[],stateMachines:[]},Li=!1;async function Ot(){let e=X();if(e.enabled===!1)return{ready:!1,loaded:0};let t=Ji(e.storagePath);return await Yi(t),S=await Xs(t),Li=!0,{ready:!0,loaded:S.experiences.length+S.knowledgeNodes.length+S.patterns.length}}async function Fi(e){let t=X();await se();let n=new Date().toISOString(),i={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 i;S.experiences.unshift(i);let r=t.experienceStore?.maxEntries??2000;if(S.experiences.length>r)S.experiences=S.experiences.slice(0,r);if(t.patternDetection?.enabled!==!1)Qs(i,t);return await G(t),i}function Ii(e){let t=e.toLowerCase();return S.experiences.filter((n)=>{let i=n.tags?.join(" ").toLowerCase()??"";return n.summary.toLowerCase().includes(t)||n.details.toLowerCase().includes(t)||i.includes(t)})}async function $i(e){let t=X();await se();let n=new Date().toISOString(),i={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 i;S.knowledgeNodes.unshift(i);let r=t.knowledgeGraph?.maxNodes??5000;if(S.knowledgeNodes.length>r)S.knowledgeNodes=S.knowledgeNodes.slice(0,r);if(t.spacedRepetition?.enabled!==!1)Vi(i.id,t);return await G(t),i}function ji(e){let t=e.toLowerCase();return S.knowledgeNodes.filter((n)=>{let i=n.tags?.join(" ").toLowerCase()??"";return n.title.toLowerCase().includes(t)||n.content.toLowerCase().includes(t)||i.includes(t)})}async function _i(e,t,n,i=0.5){let r=X();await se();let a={id:`edge_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,sourceId:e,targetId:t,relation:n,strength:i,createdAt:new Date().toISOString()};if(r.knowledgeGraph?.enabled===!1||r.enabled===!1)return a;return S.knowledgeEdges.push(a),await G(r),a}async function Ui(e){let t=X();await se();let n=new Date().toISOString(),i=S.patterns.find((s)=>s.name===e.name);if(i)return i.description=e.description,i.triggers=e.triggers??i.triggers,i.confidence=e.confidence??i.confidence,i.evidence=e.evidence??i.evidence,i.occurrences+=1,i.lastSeen=n,i.updatedAt=n,await G(t),i;let r={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 r;S.patterns.unshift(r);let a=t.patternDetection?.maxPatterns??500;if(S.patterns.length>a)S.patterns=S.patterns.slice(0,a);return await G(t),r}function Wi(e=0){return S.patterns.filter((t)=>t.confidence>=e)}function Hi(e){let t=e?new Date(e).getTime():Date.now();return S.schedules.filter((n)=>{return new Date(n.nextReview).getTime()<=t})}async function qi(e,t){let n=X();await se();let i=Math.min(5,Math.max(0,t)),r=Zs(e,n),a=new Date;if(i<3)r.intervalDays=n.spacedRepetition?.initialIntervalDays??1,r.reviewCount=0;else if(r.reviewCount+=1,r.reviewCount===1)r.intervalDays=n.spacedRepetition?.initialIntervalDays??1;else r.intervalDays=Math.round(r.intervalDays*r.easeFactor);let s=r.easeFactor+(0.1-(5-i)*(0.08+(5-i)*0.02));r.easeFactor=Math.max(1.3,s);let o=n.spacedRepetition?.maxIntervalDays??365;return r.intervalDays=Math.min(r.intervalDays,o),r.lastReviewed=a.toISOString(),r.nextReview=new Date(a.getTime()+r.intervalDays*24*60*60*1000).toISOString(),await G(n),r}async function Ki(e){let t=X();await se();let n=new Date().toISOString(),i={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 i;return S.stateMachines.unshift(i),await G(t),i}function Bi(){return[...S.stateMachines]}function X(){let e=xn(),t=An();return{enabled:e?.enabled??t?.enabled??!0,autoSave:e?.autoSave??t?.autoSave??!0,storagePath:e?.storagePath??t?.storagePath??Ni,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 Ji(e){if(!e)return Ni;if(e.startsWith("~/"))return Se.join(Nt.homedir(),e.slice(2));return e}async function Yi(e){await Dt.mkdir(e,{recursive:!0})}async function se(){if(!Li)await Ot()}async function Xs(e){let t=Se.join(e,Oi);try{let n=await Dt.readFile(t,"utf-8"),i=JSON.parse(n);return{experiences:i.experiences??[],knowledgeNodes:i.knowledgeNodes??[],knowledgeEdges:i.knowledgeEdges??[],patterns:i.patterns??[],schedules:i.schedules??[],stateMachines:i.stateMachines??[]}}catch{return{experiences:[],knowledgeNodes:[],knowledgeEdges:[],patterns:[],schedules:[],stateMachines:[]}}}async function G(e){if(e.autoSave===!1||e.enabled===!1)return;let t=Ji(e.storagePath);await Yi(t);let n=Se.join(t,Oi);await Dt.writeFile(n,JSON.stringify(S,null,2),"utf-8")}function Qs(e,t){let n=t.patternDetection?.minConfidence??0.6,i=e.tags??[];for(let r of i){let a=`tag:${r}`,s=`Recurring experience tag "${r}".`,o=S.patterns.find((c)=>c.name===a);if(o)o.occurrences+=1,o.lastSeen=e.createdAt,o.confidence=Math.min(1,o.confidence+0.05),o.updatedAt=new Date().toISOString();else S.patterns.unshift({id:`pattern_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,name:a,description:s,triggers:[r],confidence:n,evidence:[e.summary],occurrences:1,lastSeen:e.createdAt,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()})}}function Vi(e,t){if(S.schedules.find((a)=>a.nodeId===e))return;let i=t.spacedRepetition?.initialIntervalDays??1,r=new Date;S.schedules.push({nodeId:e,intervalDays:i,easeFactor:t.spacedRepetition?.easeFactor??2.5,nextReview:new Date(r.getTime()+i*24*60*60*1000).toISOString(),reviewCount:0})}function Zs(e,t){let n=S.schedules.find((i)=>i.nodeId===e);if(!n)Vi(e,t),n=S.schedules.find((i)=>i.nodeId===e);if(!n){let i={nodeId:e,intervalDays:t.spacedRepetition?.initialIntervalDays??1,easeFactor:t.spacedRepetition?.easeFactor??2.5,nextReview:new Date().toISOString(),reviewCount:0};return S.schedules.push(i),i}return n}var Lt=h.number().min(0).max(1),zi=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:Lt.optional().describe("Confidence score (0-1)"),relatedNodeIds:h.array(h.string()).optional().describe("Related knowledge node IDs")},async execute(e){let t=await Fi(e);return JSON.stringify({success:!0,experience:t},null,2)}}),Gi=L({description:"Search stored experiences by keyword.",args:{query:h.string().min(1).describe("Search query")},async execute(e){let t=Ii(e.query);return JSON.stringify({success:!0,experiences:t},null,2)}}),Xi=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 $i(e);return JSON.stringify({success:!0,node:t},null,2)}}),Qi=L({description:"Search knowledge nodes by keyword.",args:{query:h.string().min(1).describe("Search query")},async execute(e){let t=ji(e.query);return JSON.stringify({success:!0,nodes:t},null,2)}}),Zi=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 _i(e.sourceId,e.targetId,e.relation,e.strength??0.5);return JSON.stringify({success:!0,edge:t},null,2)}}),er=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:Lt.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)}}),tr=L({description:"List known patterns above a confidence threshold.",args:{minConfidence:Lt.optional().describe("Minimum confidence to include")},async execute(e){let t=Wi(e.minConfidence??0);return JSON.stringify({success:!0,patterns:t},null,2)}}),nr=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=Hi(e.dueBefore);return JSON.stringify({success:!0,queue:t},null,2)}}),ir=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 qi(e.nodeId,e.quality);return JSON.stringify({success:!0,schedule:t},null,2)}}),rr=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 Ki(e);return JSON.stringify({success:!0,machine:t},null,2)}}),or=L({description:"List all learning state machines.",args:{},async execute(){let e=Bi();return JSON.stringify({success:!0,machines:e},null,2)}});var ec=[{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 ar(e){let t=e.toLowerCase(),n=new Map;for(let o of ec){let c=o.keyword.toLowerCase();if(t.includes(c)){if(!n.has(o.mode))n.set(o.mode,new Set);n.get(o.mode).add(o.keyword)}if(o.aliases)for(let l of o.aliases){let u=l.toLowerCase();if(t.includes(u)){if(!n.has(o.mode))n.set(o.mode,new Set);n.get(o.mode).add(o.keyword)}}}if(n.size===0)return null;let i="",r=0;for(let[o,c]of n.entries())if(c.size>r)i=o,r=c.size;let a=Array.from(n.get(i)),s=r>2?0.9:r>1?0.7:0.5;if(w)console.log(`[mode-detector] Detected mode "${i}" with ${r} keyword matches (confidence: ${s})`);return{mode:i,keywords:a,confidence:s}}var tc={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 sr(e){return tc[e]}var nc=new Map;function cr(e,t,n){let i=sr(t);if(!i||!i.enabled)return console.log(`[mode-switcher] Mode "${t}" not found or disabled`),!1;let r={name:t,activatedAt:Date.now(),config:i};if(nc.set(e,r),console.log(`[mode-switcher] Activated mode "${t}" for session ${e}`),n?.onModeActivate)n.onModeActivate({mode:t,keyword:""});return!0}function lr(e,t){let n=kn()||{};if(t?.enabled===!1)return{};return{"chat.message":async(i,r)=>{if(!r.parts)return;let{sessionID:a}=i;for(let s of r.parts)if(s.type==="text"){let o=s.text;if(o&&a){let c=ar(o);if(c&&t?.autoActivate!==!1){if(w)console.log(`[mode-hooks] Detected mode "${c.mode}" with ${c.keywords.length} keywords for session ${a}`);if(cr(a,c.mode),w){if(c.mode==="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 ic=x("session-storage-hook");function Ft(e,t){let n=t?.config??{enabled:!0,recordTodos:!0,recordTranscripts:!0};if(!n.enabled)return{};function i(a){return a.filter((s)=>s.type==="text").map((s)=>s.text).join(`
1767
- `).trim()}function r(a){let s=i(a),o=[/<todo>[\s\S]*?<\/todo>/gi,/<task>[\s\S]*?<\/task>/gi,/\[TODO\]([\s\S]*?)\]/gi,/\[ \]\s*([^\]]*)\]/gi];for(let c of o){let l=s.match(c);if(l)return{content:l[1]||l[0].replace(/<\/?[^\>]*>/g,"").replace(/\[\/?[^]]*\]/g,"").trim()}}return null}return{"chat.message":async(a,s)=>{if(!n.enabled)return;let{sessionID:o}=a;if(!o)return;if(n.recordTodos){let c=r(s.parts);if(c)ci(o,`TODO: ${c.content}`)}if(n.recordTranscripts){let c=i(s.parts);if(c)li(o,c)}},"tool.execute.after":async(a,s)=>{if(!n.enabled)return;let{tool:o,sessionID:c}=a;if(!c)return;if(n.recordTranscripts)Oe(c,o,{},s.output||"");if(c)ic.info(`Tool ${o} completed for session ${c}`)}}}var hm=Ft({});var dr=x("claude-code-hooks");function ur(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(i)=>{try{if(i){if(Object.assign(n,i?.claudeCodeCompatibility??i),i?.claudeCodeCompatibility?.toggles)n.toggles={...n.toggles,...i.claudeCodeCompatibility.toggles}}}catch(r){console.error("[claude-code-hooks] Error applying config:",r)}},"tool.execute.before":async(i,r)=>{if(!n.enabled||n.hooks===!1||n.toggles?.hooks===!1)return;dr.debug("Tool execution started")},"tool.execute.after":async(i,r)=>{if(!n.enabled||n.hooks===!1||n.toggles?.hooks===!1)return;dr.debug("Tool execution started")}}}var rc=["anthropic","bedrock"],oc=["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 ac(e){return rc.some((t)=>e.toLowerCase().includes(t.toLowerCase()))}var pr=new Map;function sc(e){return pr.get(e)}function cc(e,t){pr.set(e,{enabled:t,activatedAt:Date.now()})}function lc(e){let t=e.toLowerCase();for(let n of oc)if(t.includes(n))return!0;return!1}function mr(e){return{"chat.message":async(t,n)=>{let{sessionID:i}=t,a=(n?.parts||[]).filter((s)=>s.type==="text").map((s)=>s.text).join(`
1768
- `).trim();if(typeof a==="string"&&a.length>0){if(lc(a)){if(w)console.log(`[think-mode] Activated for session ${i}`);cc(i,!0)}}return},"chat.params":async(t,n)=>{let{sessionID:i,provider:r}=t;if(sc(i)?.enabled){if(!n.variant)n.variant="max";let s=r?.info?.id||r?.options?.providerID||"";if(ac(s)){if(!n.options)n.options={};if(!n.options.thinking){if(w)console.log(`[think-mode] Applying think mode settings for provider ${s}`);if(s.includes("anthropic")||s.includes("bedrock"))n.options.thinking={budget_tokens:32000,type:"enabled"}}}}return}}}import{tool as We}from"@opencode-ai/plugin";import{z as Q}from"zod";function dc(e,t){if(!t)return e;return`${e}
1765
+ `),y.currentIteration>=y.maxIterations)y.status="maxed_out",console.log(`[ralph-loop] Session ${p} reached max iterations (${y.maxIterations})`);xt(p,y),console.log(`[ralph-loop] Continuing iteration ${y.currentIteration}/${y.maxIterations} for session ${p}`),console.log(`[ralph-loop] Next prompt: ${o(y).substring(0,100)}...`)}else{let C=n.maxIterations??hi,P=a(p,f,b,C);console.log(`[ralph-loop] Starting new session ${p} with promise: "${f.substring(0,50)}..."`),xt(p,P),i.set(p,P)}}}}x();import{exec as ws}from"node:child_process";import{readFile as Ss,writeFile as As,mkdir as xs}from"node:fs/promises";import{existsSync as vt,readFileSync as ks}from"node:fs";import{join as ce,dirname as Cs}from"node:path";import{homedir as vs}from"node:os";import{fileURLToPath as Ps}from"node:url";var Si="kraken-code",kt=86400000,$e=ce(vs(),".config","kraken-code","cache"),Ai="update-check.json",D=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",T=S("auto-update-checker"),se="",bi=null;function Ct(){if(!se)try{let e=Cs(Ps(import.meta.url)),t=[ce(e,"..","package.json"),ce(e,"..","..","package.json"),ce(e,"..","..","..","package.json")];for(let n of t)try{if(vt(n)){let i=JSON.parse(ks(n,"utf-8"));if(i.name===Si&&i.version){se=i.version;break}}}catch{}if(!se)se="0.0.0"}catch{se="0.0.0"}return se}function xi(e){let t=e.cacheDir??$e;return ce(t,Ai)}async function Es(e){try{let t=xi(e);if(!vt(t))return null;let n=await Ss(t,"utf-8");return JSON.parse(n)}catch(t){return null}}async function Ts(e,t){try{let n=e.cacheDir??$e;if(!vt(n))await xs(n,{recursive:!0});let i=xi(e);await As(i,JSON.stringify(t,null,2),"utf-8")}catch(n){if(D)T.warn("Failed to save cache:",n)}}async function Ms(){return new Promise((e)=>{ws(`npm view ${Si} version`,(t,n,i)=>{if(t){if(D)T.warn("Failed to check npm registry:",t);e(null);return}if(i){if(D)T.warn("npm error:",i);e(null);return}let r=n.trim();if(r)e(r);else e(null)})})}function Rs(e,t){let n=e.split(".").map(Number),i=t.split(".").map(Number);for(let r=0;r<Math.max(n.length,i.length);r++){let a=n[r]??0,s=i[r]??0;if(a>s)return 1;if(a<s)return-1}return 0}async function wi(e){let t=Ct(),n=e.cacheTTL??kt,i=Date.now(),r=await Es(e);if(bi=r,r&&i-r.lastChecked<n){if(D)T.debug(`Using cached update check from ${new Date(r.lastChecked).toISOString()}`);return{updateAvailable:r.updateAvailable,latestVersion:r.latestVersion}}if(D)T.debug("Checking npm registry for updates...");let a=await Ms();if(!a){if(D)T.debug("Could not determine latest version");return{updateAvailable:!1,latestVersion:null}}let s=Rs(a,t)>0,o={currentVersion:t,latestVersion:a,lastChecked:i,updateAvailable:s};return await Ts(e,o),bi=o,{updateAvailable:s,latestVersion:a}}function ki(e,t){let n=t?.config??{enabled:!0,checkOnLoad:!0,cacheDir:$e,cacheTTL:kt,notify:!0,checkInterval:kt};return{config:async(i)=>{if(!n.enabled)return;if(n.checkOnLoad){if(D)T.debug("Checking for updates on load...");let{updateAvailable:r,latestVersion:a}=await wi(n);if(r&&n.notify){if(D)T.info("UPDATE AVAILABLE"),T.info(`Current version: ${Ct()}`),T.info(`Latest version: ${a}`),T.info("To update, run: npm update kraken-code (or bun update kraken-code)")}else if(!r){if(D)T.debug(`You are using the latest version: ${Ct()}`)}}},event:async(i)=>{if(!n.enabled)return;if(i.event?.type==="installation.updated"){if(D)T.debug("Installation was updated");let r=n.cacheDir??$e,a=ce(r,Ai);try{let{unlink:s}=await import("node:fs/promises");if(await s(a),D)T.debug("Cleared update cache")}catch(s){}}if(i.event?.type==="installation.update-available"){if(D)T.debug("New update available");let{latestVersion:r}=await wi(n);if(r){if(D)T.debug(`Latest version: ${r}`)}}}}}import{tool as Ci}from"@opencode-ai/plugin";import{z as q}from"zod";import{execFile as Ds}from"node:child_process";import{promisify as Ns}from"node:util";var Os=Ns(Ds);async function vi(e,t,n){let i=["--json","--pattern",e,"--lang",t];if(n?.replace)i.push("--replace",n.replace);if(n?.path)i.push("--path",n.path);if(n?.glob)i.push("--glob",n.glob);try{let{stdout:r,stderr:a}=await Os("sg",i,{maxBuffer:10485760,timeout:30000});if(a&&!r)return{success:!1,error:a};try{let s=JSON.parse(r);return{success:!0,matches:s.matches||[],count:s.count||0}}catch{return{success:!0,matches:[],count:0}}}catch(r){if(r instanceof Error&&r.message.includes("ENOENT"))return{success:!1,error:"ast-grep CLI not installed. Install with: npm install -g @ast-grep/cli"};return{success:!1,error:r instanceof Error?r.message:"Unknown error"}}}var Pi=Ci({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:q.string().describe("AST pattern to search for (use $VAR for variables)"),language:q.string().describe("Programming language (typescript, javascript, python, rust, go, java, cpp, etc.)"),path:q.string().optional().describe("Directory or file to search in (default: current directory)"),glob:q.string().optional().describe("File glob pattern (e.g., '*.ts', 'src/**/*.ts')")},async execute(e){let{pattern:t,language:n,path:i,glob:r}=e,a=await vi(t,n,{path:i,glob:r});return JSON.stringify(a,null,2)}}),Ei=Ci({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:q.string().describe("AST pattern to search for"),replacement:q.string().describe("AST pattern to replace with (use $VAR to reference matched variables)"),language:q.string().describe("Programming language"),path:q.string().optional().describe("Directory or file to search in (default: current directory)"),glob:q.string().optional().describe("File glob pattern")},async execute(e){let{pattern:t,replacement:n,language:i,path:r,glob:a}=e,s=await vi(t,i,{replace:n,path:r,glob:a});return JSON.stringify(s,null,2)}});import*as K from"fs";import*as Et from"path";import*as Ti from"os";import{tool as Ls}from"@opencode-ai/plugin";import{z as Se}from"zod";var Pt=Et.join(Ti.homedir(),".opencode","sessions");function B(){if(!K.existsSync(Pt))K.mkdirSync(Pt,{recursive:!0});return Pt}function Fs(){let e=B();if(!K.existsSync(e))return[];let t=[];try{let n=K.readdirSync(e);for(let i of n){if(!i.endsWith(".json"))continue;let r=i.slice(0,-5),a=Et.join(e,i);try{let s=K.readFileSync(a,"utf-8"),o=JSON.parse(s),c={sessionID:r,created:o.created||o.createdAt||new Date(0).toISOString(),lastActive:o.lastActive||o.updatedAt||new Date().toISOString(),messageCount:o.messageCount||o.messages?.length||0,agent:o.agent,duration:o.duration,fileCount:o.fileCount,editCount:o.editCount,toolUsage:o.toolUsage||{}};t.push({sessionID:r,path:a,metadata:c})}catch(s){console.error(`[session-list] Error reading session ${r}:`,s)}}}catch(n){console.error("[session-list] Error reading sessions directory:",n)}return t}function Is(e,t,n){if(!t&&!n)return e;let i=t?new Date(t).getTime():0,r=n?new Date(n).getTime():1/0;return e.filter((a)=>{let s=new Date(a.metadata.lastActive).getTime();return s>=i&&s<=r})}function $s(e,t="desc"){return[...e].sort((n,i)=>{let r=new Date(n.metadata.lastActive).getTime(),a=new Date(i.metadata.lastActive).getTime();return t==="asc"?r-a:a-r})}var Tt=Ls({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:i,order:r,includeMetadata:a}=e,s=Fs();if(n||i)s=Is(s,n,i);if(s=$s(s,r),t)s=s.slice(0,t);let o=s.map((c)=>{if(a)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:o.length,sessions:o})}catch(t){return console.error("[session-list] Error:",t),JSON.stringify({success:!1,error:String(t),sessions:[]})}}});import*as _e from"fs";import*as Mi from"path";import{tool as js}from"@opencode-ai/plugin";import{z as je}from"zod";function _s(e){return Mi.join(B(),`${e}.json`)}var Mt=js({description:"Read messages from a specific session with pagination and filtering options.",args:{sessionID:je.string().describe("Session ID to read from"),limit:je.number().int().min(1).max(1000).optional(),offset:je.number().int().min(0).default(0).describe("Offset for pagination"),includeMetadata:je.boolean().default(!1).describe("Include full session metadata")},async execute(e){try{let{sessionID:t,limit:n,offset:i,includeMetadata:r}=e,a=_s(t);if(!_e.existsSync(a))return JSON.stringify({success:!1,error:`Session ${t} not found`,sessionID:t});let s=_e.readFileSync(a,"utf-8"),o=JSON.parse(s),c=o.messages||[],l=c;if(i>0||n)l=c.slice(i,n?i+n:void 0);let u={sessionID:t,messages:l,partial:c.length>l.length,metadata:{sessionID:t,created:o.created||o.createdAt||new Date(0).toISOString(),lastActive:o.lastActive||o.updatedAt||new Date().toISOString(),messageCount:c.length,agent:o.agent,duration:o.duration,fileCount:o.fileCount,editCount:o.editCount,toolUsage:o.toolUsage||{}}},p={success:!0,sessionID:t,totalMessages:c.length,returnedMessages:l.length,offset:i,limit:n||c.length,partial:u.partial,messages:l};if(r)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 X from"fs";import*as We from"path";import*as Di from"os";import{tool as Us}from"@opencode-ai/plugin";import{z as Ue}from"zod";var jp=We.join(Di.homedir(),".opencode","sessions");function Ws(e){try{let t=X.readFileSync(e,"utf-8"),n=JSON.parse(t),i=new Map;if(n.messages&&Array.isArray(n.messages))n.messages.forEach((r,a)=>{let s=r.role||"unknown",o=r.content||"";if(o&&typeof o==="string"&&o.length>0){let c={type:s==="user"?"user_message":"assistant_message",index:a,content:o,context:o};i.set(o,c)}});return i}catch(t){return console.error(`[session-search] Error indexing session ${e}:`,t),null}}function Ri(e,t){let n=e.toLowerCase(),i=t.content.toLowerCase(),r=0,a=i===n;if(a)r+=100;if(i.includes(n)&&!a)r+=50;let o=n.split(/\s+/),c=0;for(let l of o)if(l.length>2&&i.includes(l))c++;if(r+=c*10,t.type==="user_message")r+=20;return Math.min(r,100)}function Hs(){let e=B();if(!X.existsSync(e))return[];let t=[];try{let n=X.readdirSync(e);for(let i of n){if(!i.endsWith(".json"))continue;let r=i.slice(0,-5),a=We.join(e,i);try{let s=X.readFileSync(a,"utf-8"),o=JSON.parse(s),c={sessionID:r,created:o.created||o.createdAt||new Date(0).toISOString(),lastActive:o.lastActive||o.updatedAt||new Date().toISOString(),messageCount:o.messageCount||o.messages?.length||0,agent:o.agent,duration:o.duration,fileCount:o.fileCount,editCount:o.editCount,toolUsage:o.toolUsage||{}};t.push({sessionID:r,filePath:a,metadata:c})}catch(s){console.error(`[session-search] Error reading session ${r}:`,s)}}}catch(n){console.error("[session-search] Error reading sessions directory:",n)}return t}var Rt=Us({description:"Full-text search across all OpenCode sessions with ranked results.",args:{q:Ue.string().describe("Search query text"),limit:Ue.number().int().min(1).max(100).default(10).describe("Maximum number of results to return"),offset:Ue.number().int().min(0).default(0).describe("Offset for pagination"),sessionID:Ue.string().optional().describe("Search within a specific session only")},async execute(e){try{let{q:t,limit:n,offset:i,sessionID:r}=e;if(!t||t.trim().length===0)return JSON.stringify({success:!1,error:"Query cannot be empty",results:[]});let a=[];if(r){let c=B(),l=We.join(c,`${r}.json`);a=[{sessionID:r,filePath:l,metadata:{sessionID:r,created:"",lastActive:"",messageCount:0,toolUsage:{}}}]}else a=Hs();let s=[];for(let c of a){let l=Ws(c.filePath);if(!l)continue;let u=[];for(let[p,m]of l.entries())if(Ri(t,m)>10)u.push(m);if(u.length>0){let p=u.reduce((m,g)=>m+Ri(t,g),0)/u.length;s.push({sessionID:c.sessionID,filePath:c.filePath,metadata:c.metadata,score:Math.round(p),matches:u.slice(0,5)})}}s.sort((c,l)=>l.score-c.score);let o=s.slice(i,i+n);return JSON.stringify({success:!0,query:t,total:s.length,offset:i,limit:n,results:o.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 He from"fs";import*as Dt from"path";import{tool as qs}from"@opencode-ai/plugin";import{z as Ks}from"zod";var Kp=Dt.join(process.env.HOME||"",".opencode","sessions");function Bs(e){return Dt.join(B(),`${e}.json`)}function Js(e){let t=Bs(e);if(!He.existsSync(t))return null;try{let n=He.readFileSync(t,"utf-8"),i=JSON.parse(n);return{sessionID:e,created:i.created||i.createdAt||new Date(0).toISOString(),lastActive:i.lastActive||i.updatedAt||new Date().toISOString(),messageCount:i.messageCount||i.messages?.length||0,agent:i.agent,duration:i.duration,fileCount:i.fileCount,editCount:i.editCount,toolUsage:i.toolUsage||{}}}catch(n){return console.error(`[session-info] Error reading session ${e}:`,n),null}}function Ys(e){let t={totalMessages:e.messageCount,totalToolsUsed:Object.values(e.toolUsage||{}).reduce((n,i)=>n+i,0),mostUsedTool:"",mostUsedToolCount:0,averageMessagesPerMinute:0};if(e.duration)t.averageMessagesPerMinute=e.messageCount/(e.duration/60000);for(let[n,i]of Object.entries(e.toolUsage||{}))if(i>t.mostUsedToolCount)t.mostUsedTool=n,t.mostUsedToolCount=i;return t}var Nt=qs({description:"Get detailed metadata and statistics about a specific session.",args:{sessionID:Ks.string().describe("Session ID to query")},async execute(e){try{let{sessionID:t}=e,n=Js(t);if(!n)return JSON.stringify({success:!1,error:`Session ${t} not found`,sessionID:t});let i=Ys(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:i.totalMessages,totalToolsUsed:i.totalToolsUsed,mostUsedTool:i.mostUsedTool,mostUsedToolCount:i.mostUsedToolCount,averageMessagesPerMinute:i.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 Vs}from"@opencode-ai/plugin";import{z as Ae}from"zod";import{execFile as zs}from"node:child_process";import{promisify as Gs}from"node:util";var Xs=Gs(zs);async function Qs(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:i}=await Xs("rg",n,{maxBuffer:10485760,timeout:30000}),r=[],a=i.split(`
1766
+ `);for(let s of a){if(!s.trim())continue;let o=s.match(/^([^:]+):(\d+):(\d+):(.+)$/);if(o)r.push({file:o[1],line:parseInt(o[2],10),column:parseInt(o[3],10),lineContent:o[4]})}return{success:!0,matches:r,count:r.length}}catch(i){if(i instanceof Error&&i.message.includes("ENOENT"))return{success:!1,error:"ripgrep (rg) not installed. Install with: apt install ripgrep or brew install ripgrep"};return{success:!1,error:i instanceof Error?i.message:"Unknown error"}}}var Ni=Vs({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:i,context:r,invert:a}=e,s=await Qs(t,{path:n,type:i,context:r,invert:a});if(!s.success)return JSON.stringify(s,null,2);return JSON.stringify({success:!0,matches:s.matches?.slice(0,100),count:s.count,message:s.count&&s.count>100?`Showing 100 of ${s.count} matches`:void 0},null,2)}});import{tool as Zs}from"@opencode-ai/plugin";import{z as Ot}from"zod";var Oi=Zs({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:Ot.enum(["status","cancel","continue","info"]).describe("Ralph-Loop command"),sessionID:Ot.string().optional().describe("Session ID (required for status, cancel)"),maxIterations:Ot.number().min(1).max(100).optional().describe("Max iterations (default: 24)")},async execute(e){let{command:t,sessionID:n,maxIterations:i}=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:i??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 I}from"@opencode-ai/plugin";import{z as h}from"zod";import{promises as Lt}from"node:fs";import*as Ft from"node:os";import*as xe from"node:path";var Li=xe.join(Ft.homedir(),".kraken","learning"),Fi="learning-state.json",A={experiences:[],knowledgeNodes:[],knowledgeEdges:[],patterns:[],schedules:[],stateMachines:[]},Ii=!1;async function It(){let e=Z();if(e.enabled===!1)return{ready:!1,loaded:0};let t=Vi(e.storagePath);return await zi(t),A=await ec(t),Ii=!0,{ready:!0,loaded:A.experiences.length+A.knowledgeNodes.length+A.patterns.length}}async function $i(e){let t=Z();await le();let n=new Date().toISOString(),i={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 i;A.experiences.unshift(i);let r=t.experienceStore?.maxEntries??2000;if(A.experiences.length>r)A.experiences=A.experiences.slice(0,r);if(t.patternDetection?.enabled!==!1)tc(i,t);return await Q(t),i}function ji(e){let t=e.toLowerCase();return A.experiences.filter((n)=>{let i=n.tags?.join(" ").toLowerCase()??"";return n.summary.toLowerCase().includes(t)||n.details.toLowerCase().includes(t)||i.includes(t)})}async function _i(e){let t=Z();await le();let n=new Date().toISOString(),i={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 i;A.knowledgeNodes.unshift(i);let r=t.knowledgeGraph?.maxNodes??5000;if(A.knowledgeNodes.length>r)A.knowledgeNodes=A.knowledgeNodes.slice(0,r);if(t.spacedRepetition?.enabled!==!1)Gi(i.id,t);return await Q(t),i}function Ui(e){let t=e.toLowerCase();return A.knowledgeNodes.filter((n)=>{let i=n.tags?.join(" ").toLowerCase()??"";return n.title.toLowerCase().includes(t)||n.content.toLowerCase().includes(t)||i.includes(t)})}async function Wi(e,t,n,i=0.5){let r=Z();await le();let a={id:`edge_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,sourceId:e,targetId:t,relation:n,strength:i,createdAt:new Date().toISOString()};if(r.knowledgeGraph?.enabled===!1||r.enabled===!1)return a;return A.knowledgeEdges.push(a),await Q(r),a}async function Hi(e){let t=Z();await le();let n=new Date().toISOString(),i=A.patterns.find((s)=>s.name===e.name);if(i)return i.description=e.description,i.triggers=e.triggers??i.triggers,i.confidence=e.confidence??i.confidence,i.evidence=e.evidence??i.evidence,i.occurrences+=1,i.lastSeen=n,i.updatedAt=n,await Q(t),i;let r={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 r;A.patterns.unshift(r);let a=t.patternDetection?.maxPatterns??500;if(A.patterns.length>a)A.patterns=A.patterns.slice(0,a);return await Q(t),r}function qi(e=0){return A.patterns.filter((t)=>t.confidence>=e)}function Ki(e){let t=e?new Date(e).getTime():Date.now();return A.schedules.filter((n)=>{return new Date(n.nextReview).getTime()<=t})}async function Bi(e,t){let n=Z();await le();let i=Math.min(5,Math.max(0,t)),r=nc(e,n),a=new Date;if(i<3)r.intervalDays=n.spacedRepetition?.initialIntervalDays??1,r.reviewCount=0;else if(r.reviewCount+=1,r.reviewCount===1)r.intervalDays=n.spacedRepetition?.initialIntervalDays??1;else r.intervalDays=Math.round(r.intervalDays*r.easeFactor);let s=r.easeFactor+(0.1-(5-i)*(0.08+(5-i)*0.02));r.easeFactor=Math.max(1.3,s);let o=n.spacedRepetition?.maxIntervalDays??365;return r.intervalDays=Math.min(r.intervalDays,o),r.lastReviewed=a.toISOString(),r.nextReview=new Date(a.getTime()+r.intervalDays*24*60*60*1000).toISOString(),await Q(n),r}async function Ji(e){let t=Z();await le();let n=new Date().toISOString(),i={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 i;return A.stateMachines.unshift(i),await Q(t),i}function Yi(){return[...A.stateMachines]}function Z(){let e=Cn(),t=kn();return{enabled:e?.enabled??t?.enabled??!0,autoSave:e?.autoSave??t?.autoSave??!0,storagePath:e?.storagePath??t?.storagePath??Li,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 Vi(e){if(!e)return Li;if(e.startsWith("~/"))return xe.join(Ft.homedir(),e.slice(2));return e}async function zi(e){await Lt.mkdir(e,{recursive:!0})}async function le(){if(!Ii)await It()}async function ec(e){let t=xe.join(e,Fi);try{let n=await Lt.readFile(t,"utf-8"),i=JSON.parse(n);return{experiences:i.experiences??[],knowledgeNodes:i.knowledgeNodes??[],knowledgeEdges:i.knowledgeEdges??[],patterns:i.patterns??[],schedules:i.schedules??[],stateMachines:i.stateMachines??[]}}catch{return{experiences:[],knowledgeNodes:[],knowledgeEdges:[],patterns:[],schedules:[],stateMachines:[]}}}async function Q(e){if(e.autoSave===!1||e.enabled===!1)return;let t=Vi(e.storagePath);await zi(t);let n=xe.join(t,Fi);await Lt.writeFile(n,JSON.stringify(A,null,2),"utf-8")}function tc(e,t){let n=t.patternDetection?.minConfidence??0.6,i=e.tags??[];for(let r of i){let a=`tag:${r}`,s=`Recurring experience tag "${r}".`,o=A.patterns.find((c)=>c.name===a);if(o)o.occurrences+=1,o.lastSeen=e.createdAt,o.confidence=Math.min(1,o.confidence+0.05),o.updatedAt=new Date().toISOString();else A.patterns.unshift({id:`pattern_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,name:a,description:s,triggers:[r],confidence:n,evidence:[e.summary],occurrences:1,lastSeen:e.createdAt,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()})}}function Gi(e,t){if(A.schedules.find((a)=>a.nodeId===e))return;let i=t.spacedRepetition?.initialIntervalDays??1,r=new Date;A.schedules.push({nodeId:e,intervalDays:i,easeFactor:t.spacedRepetition?.easeFactor??2.5,nextReview:new Date(r.getTime()+i*24*60*60*1000).toISOString(),reviewCount:0})}function nc(e,t){let n=A.schedules.find((i)=>i.nodeId===e);if(!n)Gi(e,t),n=A.schedules.find((i)=>i.nodeId===e);if(!n){let i={nodeId:e,intervalDays:t.spacedRepetition?.initialIntervalDays??1,easeFactor:t.spacedRepetition?.easeFactor??2.5,nextReview:new Date().toISOString(),reviewCount:0};return A.schedules.push(i),i}return n}var $t=h.number().min(0).max(1),Xi=I({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:$t.optional().describe("Confidence score (0-1)"),relatedNodeIds:h.array(h.string()).optional().describe("Related knowledge node IDs")},async execute(e){let t=await $i(e);return JSON.stringify({success:!0,experience:t},null,2)}}),Qi=I({description:"Search stored experiences by keyword.",args:{query:h.string().min(1).describe("Search query")},async execute(e){let t=ji(e.query);return JSON.stringify({success:!0,experiences:t},null,2)}}),Zi=I({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 _i(e);return JSON.stringify({success:!0,node:t},null,2)}}),er=I({description:"Search knowledge nodes by keyword.",args:{query:h.string().min(1).describe("Search query")},async execute(e){let t=Ui(e.query);return JSON.stringify({success:!0,nodes:t},null,2)}}),tr=I({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 Wi(e.sourceId,e.targetId,e.relation,e.strength??0.5);return JSON.stringify({success:!0,edge:t},null,2)}}),nr=I({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:$t.optional().describe("Confidence score (0-1)"),evidence:h.array(h.string()).optional().describe("Evidence notes")},async execute(e){let t=await Hi(e);return JSON.stringify({success:!0,pattern:t},null,2)}}),ir=I({description:"List known patterns above a confidence threshold.",args:{minConfidence:$t.optional().describe("Minimum confidence to include")},async execute(e){let t=qi(e.minConfidence??0);return JSON.stringify({success:!0,patterns:t},null,2)}}),rr=I({description:"Get the spaced repetition review queue.",args:{dueBefore:h.string().optional().describe("ISO timestamp cutoff for due reviews")},async execute(e){let t=Ki(e.dueBefore);return JSON.stringify({success:!0,queue:t},null,2)}}),or=I({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 Bi(e.nodeId,e.quality);return JSON.stringify({success:!0,schedule:t},null,2)}}),ar=I({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 Ji(e);return JSON.stringify({success:!0,machine:t},null,2)}}),sr=I({description:"List all learning state machines.",args:{},async execute(){let e=Yi();return JSON.stringify({success:!0,machines:e},null,2)}});x();var ic=[{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 cr(e){let t=e.toLowerCase(),n=new Map;for(let o of ic){let c=o.keyword.toLowerCase();if(t.includes(c)){if(!n.has(o.mode))n.set(o.mode,new Set);n.get(o.mode).add(o.keyword)}if(o.aliases)for(let l of o.aliases){let u=l.toLowerCase();if(t.includes(u)){if(!n.has(o.mode))n.set(o.mode,new Set);n.get(o.mode).add(o.keyword)}}}if(n.size===0)return null;let i="",r=0;for(let[o,c]of n.entries())if(c.size>r)i=o,r=c.size;let a=Array.from(n.get(i)),s=r>2?0.9:r>1?0.7:0.5;if(w)console.log(`[mode-detector] Detected mode "${i}" with ${r} keyword matches (confidence: ${s})`);return{mode:i,keywords:a,confidence:s}}var rc={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 lr(e){return rc[e]}var oc=new Map;function dr(e,t,n){let i=lr(t);if(!i||!i.enabled)return console.log(`[mode-switcher] Mode "${t}" not found or disabled`),!1;let r={name:t,activatedAt:Date.now(),config:i};if(oc.set(e,r),console.log(`[mode-switcher] Activated mode "${t}" for session ${e}`),n?.onModeActivate)n.onModeActivate({mode:t,keyword:""});return!0}x();function ur(e,t){let n=vn()||{};if(t?.enabled===!1)return{};return{"chat.message":async(i,r)=>{if(!r.parts)return;let{sessionID:a}=i;for(let s of r.parts)if(s.type==="text"){let o=s.text;if(o&&a){let c=cr(o);if(c&&t?.autoActivate!==!1){if(w)console.log(`[mode-hooks] Detected mode "${c.mode}" with ${c.keywords.length} keywords for session ${a}`);if(dr(a,c.mode),w){if(c.mode==="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")}}}}}}}x();var ac=S("session-storage-hook");function jt(e,t){let n=t?.config??{enabled:!0,recordTodos:!0,recordTranscripts:!0};if(!n.enabled)return{};function i(a){return a.filter((s)=>s.type==="text").map((s)=>s.text).join(`
1767
+ `).trim()}function r(a){let s=i(a),o=[/<todo>[\s\S]*?<\/todo>/gi,/<task>[\s\S]*?<\/task>/gi,/\[TODO\]([\s\S]*?)\]/gi,/\[ \]\s*([^\]]*)\]/gi];for(let c of o){let l=s.match(c);if(l)return{content:l[1]||l[0].replace(/<\/?[^\>]*>/g,"").replace(/\[\/?[^]]*\]/g,"").trim()}}return null}return{"chat.message":async(a,s)=>{if(!n.enabled)return;let{sessionID:o}=a;if(!o)return;if(n.recordTodos){let c=r(s.parts);if(c)di(o,`TODO: ${c.content}`)}if(n.recordTranscripts){let c=i(s.parts);if(c)ui(o,c)}},"tool.execute.after":async(a,s)=>{if(!n.enabled)return;let{tool:o,sessionID:c}=a;if(!c)return;if(n.recordTranscripts)Fe(c,o,{},s.output||"");if(c)ac.info(`Tool ${o} completed for session ${c}`)}}}var Pm=jt({});x();var pr=S("claude-code-hooks");function mr(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(i)=>{try{if(i){if(Object.assign(n,i?.claudeCodeCompatibility??i),i?.claudeCodeCompatibility?.toggles)n.toggles={...n.toggles,...i.claudeCodeCompatibility.toggles}}}catch(r){console.error("[claude-code-hooks] Error applying config:",r)}},"tool.execute.before":async(i,r)=>{if(!n.enabled||n.hooks===!1||n.toggles?.hooks===!1)return;pr.debug("Tool execution started")},"tool.execute.after":async(i,r)=>{if(!n.enabled||n.hooks===!1||n.toggles?.hooks===!1)return;pr.debug("Tool execution started")}}}x();var sc=["anthropic","bedrock"],cc=["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 lc(e){return sc.some((t)=>e.toLowerCase().includes(t.toLowerCase()))}var gr=new Map;function dc(e){return gr.get(e)}function uc(e,t){gr.set(e,{enabled:t,activatedAt:Date.now()})}function pc(e){let t=e.toLowerCase();for(let n of cc)if(t.includes(n))return!0;return!1}function fr(e){return{"chat.message":async(t,n)=>{let{sessionID:i}=t,a=(n?.parts||[]).filter((s)=>s.type==="text").map((s)=>s.text).join(`
1768
+ `).trim();if(typeof a==="string"&&a.length>0){if(pc(a)){if(w)console.log(`[think-mode] Activated for session ${i}`);uc(i,!0)}}return},"chat.params":async(t,n)=>{let{sessionID:i,provider:r}=t;if(dc(i)?.enabled){if(!n.variant)n.variant="max";let s=r?.info?.id||r?.options?.providerID||"";if(lc(s)){if(!n.options)n.options={};if(!n.options.thinking){if(w)console.log(`[think-mode] Applying think mode settings for provider ${s}`);if(s.includes("anthropic")||s.includes("bedrock"))n.options.thinking={budget_tokens:32000,type:"enabled"}}}}return}}}import{tool as qe}from"@opencode-ai/plugin";import{z as ee}from"zod";function mc(e,t){if(!t)return e;return`${e}
1769
1769
 
1770
1770
  Context:
1771
- ${t}`}function uc(e){return e.filter((n)=>n.type==="text"||n.type==="reasoning").map((n)=>n.text).join(`
1772
- `).trim()}async function pc(e,t,n,i){let r=await e.client.session.create({body:{title:`Subagent: ${t}`},query:{directory:e.directory}});if(!r||r.error||!r.data){let l=r?.error?JSON.stringify(r.error):"Failed to create session for subagent task.";throw Error(l)}let a=r.data.id,s=dc(n,i),o=await e.client.session.prompt({path:{id:a},query:{directory:e.directory},body:{agent:t,parts:[{type:"text",text:s}]}});if(!o||o.error||!o.data){let l=o?.error?JSON.stringify(o.error):"Subagent prompt failed.";throw Error(l)}let c=uc(o.data.parts);return{sessionId:a,responseText:c||JSON.stringify(o.data,null,2)}}function gr(e,t){return We({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:Q.enum(["Nautilus","Abyssal","Maelstrom","Coral","Siren","Leviathan","Poseidon","Scylla","Pearl","Cartographer"]).describe(`Name of subagent to delegate to. Each agent has specialized expertise:
1771
+ ${t}`}function gc(e){return e.filter((n)=>n.type==="text"||n.type==="reasoning").map((n)=>n.text).join(`
1772
+ `).trim()}async function fc(e,t,n,i){let r=await e.client.session.create({body:{title:`Subagent: ${t}`},query:{directory:e.directory}});if(!r||r.error||!r.data){let l=r?.error?JSON.stringify(r.error):"Failed to create session for subagent task.";throw Error(l)}let a=r.data.id,s=mc(n,i),o=await e.client.session.prompt({path:{id:a},query:{directory:e.directory},body:{agent:t,parts:[{type:"text",text:s}]}});if(!o||o.error||!o.data){let l=o?.error?JSON.stringify(o.error):"Subagent prompt failed.";throw Error(l)}let c=gc(o.data.parts);return{sessionId:a,responseText:c||JSON.stringify(o.data,null,2)}}function hr(e,t){return qe({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:ee.enum(["Nautilus","Abyssal","Maelstrom","Coral","Siren","Leviathan","Poseidon","Scylla","Pearl","Cartographer"]).describe(`Name of subagent to delegate to. Each agent has specialized expertise:
1773
1773
  - Nautilus: Codebase search, pattern finding, symbol analysis
1774
1774
  - Abyssal: External research, documentation lookup, API discovery
1775
1775
  - Maelstrom: Architecture design, system analysis, trade-off evaluation
@@ -1779,41 +1779,41 @@ ${t}`}function uc(e){return e.filter((n)=>n.type==="text"||n.type==="reasoning")
1779
1779
  - Poseidon: Planning, requirement analysis, test plan creation (Plan Consultant role)
1780
1780
  - Scylla: Code review, test coverage analysis, quality assurance (Plan Reviewer role)
1781
1781
  - Pearl: Testing, test creation, test execution
1782
- - Cartographer: Advanced planning with hierarchical task decomposition and subagent delegation`),task:Q.string().min(5).describe("Clear, specific description of what the agent should do. Include relevant context, expected output format, and success criteria."),context:Q.string().optional().describe("Additional context that may help the agent complete the task"),wait:Q.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:i,task:r,context:a,wait:s}=n;try{let o=e.createTask(i,r,a),c=async()=>{let l=await pc(t,i,r,a);o.sessionId=l.sessionId,e.completeTask(o.id,l.responseText)};if(e.startTask(o.id),s){try{await c()}catch(u){e.failTask(o.id,u instanceof Error?u.message:"Unknown error")}let l=e.getTask(o.id);return JSON.stringify({success:!0,taskId:l?.id??o.id,agent:l?.agent??i,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(o.id,l instanceof Error?l.message:"Unknown error")}),JSON.stringify({success:!0,taskId:o.id,agent:o.agent,status:o.status,message:`Task delegated to ${i}. Use background_task_status to check progress.`,sessionId:o.sessionId},null,2)}catch(o){return JSON.stringify({success:!1,error:o instanceof Error?o.message:"Unknown error"},null,2)}}})}function fr(e){return We({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:Q.string().describe("Task ID from a previous call_agent invocation")},async execute(t){let{taskId:n}=t,i=e.getTask(n);if(!i)return JSON.stringify({success:!1,error:`Task ${n} not found`},null,2);return JSON.stringify({success:!0,taskId:i.id,agent:i.agent,status:i.status,result:i.result,error:i.error,duration:i.completedAt&&i.startedAt?i.completedAt-i.startedAt:null,createdAt:i.createdAt,startedAt:i.startedAt,completedAt:i.completedAt,sessionId:i.sessionId},null,2)}})}function hr(e){return We({description:"List all background tasks for the current session. Returns both active and recently completed tasks for tracking parallel delegation workflows.",args:{status:Q.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,i=e.listTasks(),r=n==="all"?i:i.filter((a)=>a.status===n);return JSON.stringify({success:!0,count:r.length,tasks:r},null,2)}})}function yr(e){return We({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:Q.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 br{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],i=this.config.providerConcurrency?.[n];if(i!==void 0)return i===0?1/0:i;let r=this.config.defaultConcurrency;if(r!==void 0)return r===0?1/0:r;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((i)=>{let r=this.queues.get(e)??[];r.push(i),this.queues.set(e,r)})}release(e){if(this.getConcurrencyLimit(e)===1/0)return;let n=this.queues.get(e);if(n&&n.length>0){let i=n.shift();if(this.counts.set(e,(this.counts.get(e)??0)-1),i)i()}else{let i=this.counts.get(e)??0;if(i>0)this.counts.set(e,i-1)}}createTask(e,t,n){let i={id:crypto.randomUUID(),agent:e,status:"pending",createdAt:Date.now()};return this.tasks.set(i.id,i),i}waitForTask(e,t=30000){return new Promise((n,i)=>{let r=setInterval(()=>{let a=this.tasks.get(e);if(!a){clearInterval(r),i(Error(`Task ${e} not found`));return}if(a.status==="completed"||a.status==="failed")clearInterval(r),n(a)},100);setTimeout(()=>{clearInterval(r),i(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 wr(e){let t=new br;return{manager:t,tools:{call_agent:gr(t,{client:e.client,directory:e.directory}),background_task_status:fr(t),background_task_list:hr(t),background_task_cancel:yr(t)}}}var Ar=0.7,He={"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},Sr=new Map;function mc(e){let t=Sr.get(e);if(!t)t={messageCount:0,lastWarningAt:0,totalEstimatedTokens:0},Sr.set(e,t);return t}function It(e){let t=e.toLowerCase();if(He[t])return He[t];for(let[n,i]of Object.entries(He))if(t.includes(n.toLowerCase()))return i;return He.default}function gc(e){return Math.ceil(e.length/4)}function fc(e,t,n=Ar){if(e<=0)return!1;let i=It(t);return e/i>=n}function hc(e,t,n,i){let r=mc(e);if(r.messageCount++,r.totalEstimatedTokens+=n,r.messageCount%10===0||fc(r.totalEstimatedTokens,t,i)){let s=Date.now();if(s-r.lastWarningAt>=60000){let o=It(t),c=yc(r.totalEstimatedTokens,t);if(w)if(c>=(i??Ar)*100)console.warn(`⚠️ Context Window Warning: You are at ${c}% of ${o} token limit (~${r.totalEstimatedTokens}/${o} tokens). Consider clearing context.`);else console.log(`ℹ️ Context Window: At ${c}% of ${o} token limit (~${r.totalEstimatedTokens}/${o} tokens, ${r.messageCount} messages).`);r.lastWarningAt=s}}}function yc(e,t){let n=It(t);if(n<=0)return 0;return Math.round(e/n*100)}function xr(e){return{"chat.message":async(t,n)=>{let{sessionID:i,model:r}=t,a=r?.modelID||"default",o=(n?.parts||[]).filter((c)=>c.type==="text").map((c)=>c.text).join(`
1783
- `);if(o){let c=gc(o);hc(i,a,c)}return}}}function kr(e,t){let n=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",i=x("keyword-detector"),r=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 a(c){return c.filter((l)=>l.type==="text").map((l)=>l.text).join(`
1784
- `).trim()}function s(c){let l=["فكر","أريد أن أفكر","دعني أفكر","فكر بعناية","تفكر باهتمام"],u=["חשב","תן להרהר","אני צריך לחשוב","חשב בריצות"],p=["pikirkan","saya perlu berpikir","biarkan saya berpikir","pikirkan dengan baik"],m=["подумай","дай мені подумати","мені потрібно подумати","подумай про це","подумай уважно"],g=["σκεψου","ας σκεφτεί","χρειάζεται να σκεφτώ","σκεφτεί σοβαρά"],f=["myslet","musím myslet","nechte mě myslet","myslet pozorně"],b=["gândește","trebuie să gândesc","gândește-te","gândește cu atenție"],y=["tænk","jeg skal tænke","lad mig tænke","tænk nøje"],k=["tänk","jag behöver tänka","låt mig tänka","tänk noga"],v=["tænk","jeg skal tænke","lad mig tænke","tænk nøje"],D=["denk","ik moet denken","laat me denken","denk goed na"],j=["คิด","ฉันต้องคิด","ให้ฉันคิด","คิดให้ดี"],Ee=["réfléchis","laissez-moi réfléchir","je dois réfléchir","réfléchissez-y","réfléchir attentivement"],pe=["piensa","déjame pensar","necesito pensar","piénsalo","piensa cuidadosamente"],me=["denk nach","lass mich nachdenken","denk darüber nach","denke sorgfältig"],cn=["pensa","fammi pensare","devo pensare","pensa a questo","pensa attentamente"],ln=["подумай","дай мне подумать","мне нужно подумать","подумай об этом","подумай внимательно"],dn=["考えて","考えさせて","考える必要がある","これについて考えて","注意深く考えて"],un=["思考","让我想想","我需要思考","思考这个","仔细思考","思考這個"],pn=["생각해","생각하게 해줘","이것에 대해 생각해","신중하게 생각해"],mn=["think","reason","think deeply","ultrathink","ultra think",...Ee,...pe,...me,...cn,...ln,...dn,...un,...pn,...l,...u,...p,...m,...g,...f,...b,...y,...k,...v,...D,...j],A=["ultrawork","ulw","ultra work","ultra work mode","초신속","슈퍼모드","스피드","super rapid","ultra rapid","أسرع","על הכי מהיר","kerja super cepat","ультра-быстро","υπερταχύτητα","super rychle","super viteză"],Ho=["search","find","locate","search for","find in","locate in","검색","찾아","查找","検索","rechercher","buscar","suchen","cercare","найти","חפש","بحث","cari","пошук","αναζήτηση","hledat","căuta","søg","sök","zoek","ค้นหา"],qo=["analyze","investigate","examine","deep dive","deep analysis","분석","조사","分析","分析","analyser","analizar","analysieren","analizzare","анализировать","נתח","تحليل","analisis","analiza","аналізувати","ανάλυση","analyzovat","analiza","analyseer","onderzoek","วิเคราะห์"];if(A.includes(c.toLowerCase()))return{mode:"ultrawork",language:o(c)};if(Ho.includes(c.toLowerCase()))return{mode:"search",language:o(c)};if(qo.includes(c.toLowerCase()))return{mode:"analyze",language:o(c)};if(mn.includes(c.toLowerCase()))return{mode:"think",language:o(c)};return{mode:"enhanced",language:o(c)}}function o(c){let l=c.toLowerCase(),u=/[ا-ي-ع]/,p=/[\u0590-\u05FF]/,m=/[\u0400-\u04FF]/,g=/[\u4E00-\u9FFF]/,f=/[\u3040-\u30FF]/,b=/[\uAC00-\uD7AF]/,y=/[\u0370-\u03FF]/,k=/[\u0E00-\u0E7F]/;if(u.test(c))return"Arabic";if(p.test(c))return"Hebrew";if(m.test(c)){if(l.includes("подум"))return"Ukrainian";if(l.includes("дум"))return"Russian"}if(g.test(c))return"Chinese";if(f.test(c))return"Japanese";if(b.test(c))return"Korean";if(y.test(c))return"Greek";if(k.test(c))return"Thai";if(["réfléchis","pensa","déjame","pensar"].some((A)=>l.includes(A.toLowerCase())))return"French";if(["piensa","necesito","pensar"].some((A)=>l.includes(A.toLowerCase())))return"Spanish";if(["denk","nachdenken"].some((A)=>l.includes(A.toLowerCase())))return"German";if(["pensa","pensare"].some((A)=>l.includes(A.toLowerCase())))return"Italian";if(["think","reason","analyze","investigate","search","find"].some((A)=>l.includes(A)))return"English";if(["myslet","myslet"].some((A)=>l.includes(A.toLowerCase())))return"Czech";if(["gând","gândește"].some((A)=>l.includes(A.toLowerCase())))return"Romanian";if(["tænk","tænke"].some((A)=>l.includes(A.toLowerCase())))return"Danish";if(["tänk"].some((A)=>l.includes(A.toLowerCase())))return"Swedish";if(["tænk"].some((A)=>l.includes(A.toLowerCase())))return"Norwegian";if(["denk"].some((A)=>l.includes(A.toLowerCase())))return"Dutch";if(["pikir"].some((A)=>l.includes(A.toLowerCase())))return"Indonesian";return}return{"chat.message":async(c,l)=>{if(!r.enabled)return;let u=a(l.parts);if(!u)return;let p=u.split(/\s+/);for(let m of p)if(r.keywords?.[m]){let f=s(m);if(n)i.debug(`Detected "${m}" (${f.language}), activating: ${f.mode} mode`);let b=c.config;if(f.mode==="ultrawork"){if(b?.enhanced?.enabled===!1)b.enhanced={...b.enhanced,enabled:!0}}else if(f.mode==="search"){if(n)i.debug(`Activating search mode for ${f.language}`)}else if(f.mode==="analyze"){if(n)i.debug(`Activating analyze mode for ${f.language}`)}else if(f.mode==="think"){if(n)i.debug(`Activating think mode for ${f.language}`)}else if(f.mode==="enhanced"){if(n)i.debug("Activating enhanced mode")}}}}}function Cr(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 i(r){return r.filter((a)=>a.type==="text").map((a)=>a.text).join(`
1785
- `).trim()}return{"chat.message":async(r,a)=>{if(!n.enabled)return;let s=i(a.parts);if(!s)return;for(let[o,c]of Object.entries(n.commands||{}))if(s.startsWith(o)){if(w)console.log(`[auto-slash-command] Detected ${o}, triggering: ${c}`)}}}}import*as ce from"fs";import*as C from"path";var bc=[".md",".mdc"];function wc(e){let t=e.match(/^---\s*\n([\s\S]*?)\n---\s*\n/);if(!t)return{};let n=t[1],i={},r=n.split(`
1786
- `);for(let a of r){let s=a.indexOf(":");if(s===-1)continue;let o=a.slice(0,s).trim(),c=a.slice(s+1).trim();if(o==="alwaysApply"&&c==="true")i.alwaysApply=!0;else if(o==="alwaysApply"&&c==="false")i.alwaysApply=!1;else if(o&&!isNaN(Number(c)))i[o]=Number(c);else if(o)i[o]=c}return i}function Sc(e){let t=e.match(/^---\s*\n[\s\S]*?\n---\s*\n/);if(!t)return[e];let n=e.slice(t[0].length),i=[],r=n.split(/(?:\n\s*---|\n\s*\n#{3,}\s+)/);for(let a of r){let s=a.trim();if(s.length>0)i.push(s)}return i}function Ac(e,t){let n=C.relative(process.cwd(),t),r=e.replace(/\*\*/g,"*").replace(/\?/g,"?").split("/"),a=n.split(C.sep),s=0;for(let o=0;o<r.length;o++){let c=r[o],l=a[o];if(c==="**")s++;else if(c==="*")s++;else if(c===l)s++}return s===r.length}function xc(e){if(!ce.existsSync(e))return[];let t=[];function n(i,r=i){let a=ce.readdirSync(i,{withFileTypes:!0});for(let s of a){let o=C.join(i,s.name);if(s.isDirectory())n(o,r);else if(s.isFile()){let c=C.extname(s.name).toLowerCase();if(bc.includes(c))try{let l=ce.readFileSync(o,"utf-8"),u=wc(l),p=Sc(l);t.push({path:o,content:l,frontmatter:u,rules:p})}catch(l){console.warn(`[rules-injector] Error loading rule file ${o}:`,l)}}}}return n(e),t}function kc(e,t){let i=C.relative(C.dirname(e),t).split(C.sep),r=0;for(let a of i)if(a.startsWith("."))r++;else if(a.includes(C.sep))r+=a.split(C.sep).length;else r++;return r}function vr(e,t){let n=t?.config??{enabled:!0},i=new Map;function r(o){let c=o;if(i.has(c))return i.get(c)||[];let l=[C.join(process.cwd(),"rules"),C.join(process.cwd(),".opencode","rules"),C.join(C.dirname(o),"rules"),C.join(C.dirname(o),".opencode","rules")],u=[];for(let p of l){let m=xc(p);u.push(...m)}return i.set(c,u),u}function a(o){if(!n.enabled)return[];let c=r(o),l=[];for(let u of c){let{frontmatter:p}=u;if(p.alwaysApply){l.push({ruleFile:u,matchedPattern:"always_apply",priority:0});continue}if(p.globs&&p.globs.length>0){for(let m of p.globs)if(Ac(m,o)){let g=100;if(typeof p.distance==="number")g=p.distance;else g=kc(u.path,o);l.push({ruleFile:u,matchedPattern:m,priority:g});break}}}return l.sort((u,p)=>u.priority-p.priority),l}function s(o){return o.filter((c)=>c.type==="text").map((c)=>c.text||"").join(`
1787
- `).trim()}return{"chat.message":async(o,c)=>{if(!n.enabled)return;let l=c.parts||[];if(!s(l))return;let p=process.cwd(),m=a(p);if(m.length===0)return;let g=m[0],f=n.maxRules||10,y=m.slice(0,f).map((v)=>{let D=v.ruleFile.rules.slice(0,5).join(`
1788
- `);return`<rule source="${v.ruleFile.path}">
1789
- ${D}
1782
+ - Cartographer: Advanced planning with hierarchical task decomposition and subagent delegation`),task:ee.string().min(5).describe("Clear, specific description of what the agent should do. Include relevant context, expected output format, and success criteria."),context:ee.string().optional().describe("Additional context that may help the agent complete the task"),wait:ee.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:i,task:r,context:a,wait:s}=n;try{let o=e.createTask(i,r,a),c=async()=>{let l=await fc(t,i,r,a);o.sessionId=l.sessionId,e.completeTask(o.id,l.responseText)};if(e.startTask(o.id),s){try{await c()}catch(u){e.failTask(o.id,u instanceof Error?u.message:"Unknown error")}let l=e.getTask(o.id);return JSON.stringify({success:!0,taskId:l?.id??o.id,agent:l?.agent??i,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(o.id,l instanceof Error?l.message:"Unknown error")}),JSON.stringify({success:!0,taskId:o.id,agent:o.agent,status:o.status,message:`Task delegated to ${i}. Use background_task_status to check progress.`,sessionId:o.sessionId},null,2)}catch(o){return JSON.stringify({success:!1,error:o instanceof Error?o.message:"Unknown error"},null,2)}}})}function yr(e){return qe({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:ee.string().describe("Task ID from a previous call_agent invocation")},async execute(t){let{taskId:n}=t,i=e.getTask(n);if(!i)return JSON.stringify({success:!1,error:`Task ${n} not found`},null,2);return JSON.stringify({success:!0,taskId:i.id,agent:i.agent,status:i.status,result:i.result,error:i.error,duration:i.completedAt&&i.startedAt?i.completedAt-i.startedAt:null,createdAt:i.createdAt,startedAt:i.startedAt,completedAt:i.completedAt,sessionId:i.sessionId},null,2)}})}function br(e){return qe({description:"List all background tasks for the current session. Returns both active and recently completed tasks for tracking parallel delegation workflows.",args:{status:ee.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,i=e.listTasks(),r=n==="all"?i:i.filter((a)=>a.status===n);return JSON.stringify({success:!0,count:r.length,tasks:r},null,2)}})}function wr(e){return qe({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:ee.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 Sr{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],i=this.config.providerConcurrency?.[n];if(i!==void 0)return i===0?1/0:i;let r=this.config.defaultConcurrency;if(r!==void 0)return r===0?1/0:r;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((i)=>{let r=this.queues.get(e)??[];r.push(i),this.queues.set(e,r)})}release(e){if(this.getConcurrencyLimit(e)===1/0)return;let n=this.queues.get(e);if(n&&n.length>0){let i=n.shift();if(this.counts.set(e,(this.counts.get(e)??0)-1),i)i()}else{let i=this.counts.get(e)??0;if(i>0)this.counts.set(e,i-1)}}createTask(e,t,n){let i={id:crypto.randomUUID(),agent:e,status:"pending",createdAt:Date.now()};return this.tasks.set(i.id,i),i}waitForTask(e,t=30000){return new Promise((n,i)=>{let r=setInterval(()=>{let a=this.tasks.get(e);if(!a){clearInterval(r),i(Error(`Task ${e} not found`));return}if(a.status==="completed"||a.status==="failed")clearInterval(r),n(a)},100);setTimeout(()=>{clearInterval(r),i(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 Ar(e){let t=new Sr;return{manager:t,tools:{call_agent:hr(t,{client:e.client,directory:e.directory}),background_task_status:yr(t),background_task_list:br(t),background_task_cancel:wr(t)}}}x();var kr=0.7,Ke={"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},xr=new Map;function hc(e){let t=xr.get(e);if(!t)t={messageCount:0,lastWarningAt:0,totalEstimatedTokens:0},xr.set(e,t);return t}function _t(e){let t=e.toLowerCase();if(Ke[t])return Ke[t];for(let[n,i]of Object.entries(Ke))if(t.includes(n.toLowerCase()))return i;return Ke.default}function yc(e){return Math.ceil(e.length/4)}function bc(e,t,n=kr){if(e<=0)return!1;let i=_t(t);return e/i>=n}function wc(e,t,n,i){let r=hc(e);if(r.messageCount++,r.totalEstimatedTokens+=n,r.messageCount%10===0||bc(r.totalEstimatedTokens,t,i)){let s=Date.now();if(s-r.lastWarningAt>=60000){let o=_t(t),c=Sc(r.totalEstimatedTokens,t);if(w)if(c>=(i??kr)*100)console.warn(`⚠️ Context Window Warning: You are at ${c}% of ${o} token limit (~${r.totalEstimatedTokens}/${o} tokens). Consider clearing context.`);else console.log(`ℹ️ Context Window: At ${c}% of ${o} token limit (~${r.totalEstimatedTokens}/${o} tokens, ${r.messageCount} messages).`);r.lastWarningAt=s}}}function Sc(e,t){let n=_t(t);if(n<=0)return 0;return Math.round(e/n*100)}function Cr(e){return{"chat.message":async(t,n)=>{let{sessionID:i,model:r}=t,a=r?.modelID||"default",o=(n?.parts||[]).filter((c)=>c.type==="text").map((c)=>c.text).join(`
1783
+ `);if(o){let c=yc(o);wc(i,a,c)}return}}}x();function vr(e,t){let n=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",i=S("keyword-detector"),r=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 a(c){return c.filter((l)=>l.type==="text").map((l)=>l.text).join(`
1784
+ `).trim()}function s(c){let l=["فكر","أريد أن أفكر","دعني أفكر","فكر بعناية","تفكر باهتمام"],u=["חשב","תן להרהר","אני צריך לחשוב","חשב בריצות"],p=["pikirkan","saya perlu berpikir","biarkan saya berpikir","pikirkan dengan baik"],m=["подумай","дай мені подумати","мені потрібно подумати","подумай про це","подумай уважно"],g=["σκεψου","ας σκεφτεί","χρειάζεται να σκεφτώ","σκεφτεί σοβαρά"],f=["myslet","musím myslet","nechte mě myslet","myslet pozorně"],b=["gândește","trebuie să gândesc","gândește-te","gândește cu atenție"],y=["tænk","jeg skal tænke","lad mig tænke","tænk nøje"],C=["tänk","jag behöver tänka","låt mig tänka","tänk noga"],P=["tænk","jeg skal tænke","lad mig tænke","tænk nøje"],O=["denk","ik moet denken","laat me denken","denk goed na"],U=["คิด","ฉันต้องคิด","ให้ฉันคิด","คิดให้ดี"],Me=["réfléchis","laissez-moi réfléchir","je dois réfléchir","réfléchissez-y","réfléchir attentivement"],ge=["piensa","déjame pensar","necesito pensar","piénsalo","piensa cuidadosamente"],fe=["denk nach","lass mich nachdenken","denk darüber nach","denke sorgfältig"],un=["pensa","fammi pensare","devo pensare","pensa a questo","pensa attentamente"],pn=["подумай","дай мне подумать","мне нужно подумать","подумай об этом","подумай внимательно"],mn=["考えて","考えさせて","考える必要がある","これについて考えて","注意深く考えて"],gn=["思考","让我想想","我需要思考","思考这个","仔细思考","思考這個"],fn=["생각해","생각하게 해줘","이것에 대해 생각해","신중하게 생각해"],hn=["think","reason","think deeply","ultrathink","ultra think",...Me,...ge,...fe,...un,...pn,...mn,...gn,...fn,...l,...u,...p,...m,...g,...f,...b,...y,...C,...P,...O,...U],k=["ultrawork","ulw","ultra work","ultra work mode","초신속","슈퍼모드","스피드","super rapid","ultra rapid","أسرع","על הכי מהיר","kerja super cepat","ультра-быстро","υπερταχύτητα","super rychle","super viteză"],Ko=["search","find","locate","search for","find in","locate in","검색","찾아","查找","検索","rechercher","buscar","suchen","cercare","найти","חפש","بحث","cari","пошук","αναζήτηση","hledat","căuta","søg","sök","zoek","ค้นหา"],Bo=["analyze","investigate","examine","deep dive","deep analysis","분석","조사","分析","分析","analyser","analizar","analysieren","analizzare","анализировать","נתח","تحليل","analisis","analiza","аналізувати","ανάλυση","analyzovat","analiza","analyseer","onderzoek","วิเคราะห์"];if(k.includes(c.toLowerCase()))return{mode:"ultrawork",language:o(c)};if(Ko.includes(c.toLowerCase()))return{mode:"search",language:o(c)};if(Bo.includes(c.toLowerCase()))return{mode:"analyze",language:o(c)};if(hn.includes(c.toLowerCase()))return{mode:"think",language:o(c)};return{mode:"enhanced",language:o(c)}}function o(c){let l=c.toLowerCase(),u=/[ا-ي-ع]/,p=/[\u0590-\u05FF]/,m=/[\u0400-\u04FF]/,g=/[\u4E00-\u9FFF]/,f=/[\u3040-\u30FF]/,b=/[\uAC00-\uD7AF]/,y=/[\u0370-\u03FF]/,C=/[\u0E00-\u0E7F]/;if(u.test(c))return"Arabic";if(p.test(c))return"Hebrew";if(m.test(c)){if(l.includes("подум"))return"Ukrainian";if(l.includes("дум"))return"Russian"}if(g.test(c))return"Chinese";if(f.test(c))return"Japanese";if(b.test(c))return"Korean";if(y.test(c))return"Greek";if(C.test(c))return"Thai";if(["réfléchis","pensa","déjame","pensar"].some((k)=>l.includes(k.toLowerCase())))return"French";if(["piensa","necesito","pensar"].some((k)=>l.includes(k.toLowerCase())))return"Spanish";if(["denk","nachdenken"].some((k)=>l.includes(k.toLowerCase())))return"German";if(["pensa","pensare"].some((k)=>l.includes(k.toLowerCase())))return"Italian";if(["think","reason","analyze","investigate","search","find"].some((k)=>l.includes(k)))return"English";if(["myslet","myslet"].some((k)=>l.includes(k.toLowerCase())))return"Czech";if(["gând","gândește"].some((k)=>l.includes(k.toLowerCase())))return"Romanian";if(["tænk","tænke"].some((k)=>l.includes(k.toLowerCase())))return"Danish";if(["tänk"].some((k)=>l.includes(k.toLowerCase())))return"Swedish";if(["tænk"].some((k)=>l.includes(k.toLowerCase())))return"Norwegian";if(["denk"].some((k)=>l.includes(k.toLowerCase())))return"Dutch";if(["pikir"].some((k)=>l.includes(k.toLowerCase())))return"Indonesian";return}return{"chat.message":async(c,l)=>{if(!r.enabled)return;let u=a(l.parts);if(!u)return;let p=u.split(/\s+/);for(let m of p)if(r.keywords?.[m]){let f=s(m);if(n)i.debug(`Detected "${m}" (${f.language}), activating: ${f.mode} mode`);let b=c.config;if(f.mode==="ultrawork"){if(b?.enhanced?.enabled===!1)b.enhanced={...b.enhanced,enabled:!0}}else if(f.mode==="search"){if(n)i.debug(`Activating search mode for ${f.language}`)}else if(f.mode==="analyze"){if(n)i.debug(`Activating analyze mode for ${f.language}`)}else if(f.mode==="think"){if(n)i.debug(`Activating think mode for ${f.language}`)}else if(f.mode==="enhanced"){if(n)i.debug("Activating enhanced mode")}}}}}x();function Pr(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 i(r){return r.filter((a)=>a.type==="text").map((a)=>a.text).join(`
1785
+ `).trim()}return{"chat.message":async(r,a)=>{if(!n.enabled)return;let s=i(a.parts);if(!s)return;for(let[o,c]of Object.entries(n.commands||{}))if(s.startsWith(o)){if(w)console.log(`[auto-slash-command] Detected ${o}, triggering: ${c}`)}}}}import*as de from"fs";import*as v from"path";var Ac=[".md",".mdc"];function xc(e){let t=e.match(/^---\s*\n([\s\S]*?)\n---\s*\n/);if(!t)return{};let n=t[1],i={},r=n.split(`
1786
+ `);for(let a of r){let s=a.indexOf(":");if(s===-1)continue;let o=a.slice(0,s).trim(),c=a.slice(s+1).trim();if(o==="alwaysApply"&&c==="true")i.alwaysApply=!0;else if(o==="alwaysApply"&&c==="false")i.alwaysApply=!1;else if(o&&!isNaN(Number(c)))i[o]=Number(c);else if(o)i[o]=c}return i}function kc(e){let t=e.match(/^---\s*\n[\s\S]*?\n---\s*\n/);if(!t)return[e];let n=e.slice(t[0].length),i=[],r=n.split(/(?:\n\s*---|\n\s*\n#{3,}\s+)/);for(let a of r){let s=a.trim();if(s.length>0)i.push(s)}return i}function Cc(e,t){let n=v.relative(process.cwd(),t),r=e.replace(/\*\*/g,"*").replace(/\?/g,"?").split("/"),a=n.split(v.sep),s=0;for(let o=0;o<r.length;o++){let c=r[o],l=a[o];if(c==="**")s++;else if(c==="*")s++;else if(c===l)s++}return s===r.length}function vc(e){if(!de.existsSync(e))return[];let t=[];function n(i,r=i){let a=de.readdirSync(i,{withFileTypes:!0});for(let s of a){let o=v.join(i,s.name);if(s.isDirectory())n(o,r);else if(s.isFile()){let c=v.extname(s.name).toLowerCase();if(Ac.includes(c))try{let l=de.readFileSync(o,"utf-8"),u=xc(l),p=kc(l);t.push({path:o,content:l,frontmatter:u,rules:p})}catch(l){console.warn(`[rules-injector] Error loading rule file ${o}:`,l)}}}}return n(e),t}function Pc(e,t){let i=v.relative(v.dirname(e),t).split(v.sep),r=0;for(let a of i)if(a.startsWith("."))r++;else if(a.includes(v.sep))r+=a.split(v.sep).length;else r++;return r}function Er(e,t){let n=t?.config??{enabled:!0},i=new Map;function r(o){let c=o;if(i.has(c))return i.get(c)||[];let l=[v.join(process.cwd(),"rules"),v.join(process.cwd(),".opencode","rules"),v.join(v.dirname(o),"rules"),v.join(v.dirname(o),".opencode","rules")],u=[];for(let p of l){let m=vc(p);u.push(...m)}return i.set(c,u),u}function a(o){if(!n.enabled)return[];let c=r(o),l=[];for(let u of c){let{frontmatter:p}=u;if(p.alwaysApply){l.push({ruleFile:u,matchedPattern:"always_apply",priority:0});continue}if(p.globs&&p.globs.length>0){for(let m of p.globs)if(Cc(m,o)){let g=100;if(typeof p.distance==="number")g=p.distance;else g=Pc(u.path,o);l.push({ruleFile:u,matchedPattern:m,priority:g});break}}}return l.sort((u,p)=>u.priority-p.priority),l}function s(o){return o.filter((c)=>c.type==="text").map((c)=>c.text||"").join(`
1787
+ `).trim()}return{"chat.message":async(o,c)=>{if(!n.enabled)return;let l=c.parts||[];if(!s(l))return;let p=process.cwd(),m=a(p);if(m.length===0)return;let g=m[0],f=n.maxRules||10,y=m.slice(0,f).map((P)=>{let O=P.ruleFile.rules.slice(0,5).join(`
1788
+ `);return`<rule source="${P.ruleFile.path}">
1789
+ ${O}
1790
1790
  </rule>`}).join(`
1791
1791
 
1792
- `),k=l.findIndex((v)=>v.type==="text");if(k>=0){let v=l[k],D={...v,text:`${y}
1792
+ `),C=l.findIndex((P)=>P.type==="text");if(C>=0){let P=l[C],O={...P,text:`${y}
1793
1793
 
1794
- ${v.text||""}`};c.parts=[...l.slice(0,k),D,...l.slice(k+1)]}}}}var Cc=x("agent-usage-reminder");function Pr(e,t){let n=t?.config??{enabled:!0,threshold:10},i=0;return{"tool.execute.after":async(r,a)=>{if(!n.enabled)return;if(r.tool==="task"){i++;let s=n.threshold??10;if(i%s===0)Cc.debug(`Agent has been called ${i} times in this session`)}}}}function Er(e,t){let n=t?.config??{enabled:!0,threshold:1e5};return{"chat.params":async(i,r)=>{if(!n.enabled)return;if(w)console.log("[anthropic-context-window-limit-recovery] Monitoring context window usage")}}}function vc(e){return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
1795
- `).trim()}function Tr(e,t){let n=t?.config??{enabled:!0};return{"chat.message":async(i,r)=>{if(!n.enabled)return;if(!vc(r.parts))return;if(w)console.log("[compaction-context-injector] Processing message before compaction")},"experimental.session.compacting":async(i,r)=>{if(!n.enabled)return;if(w)console.log("[compaction-context-injector] Adding context for session compaction")}}}import{readFileSync as Pc,existsSync as Ec}from"node:fs";function Mr(e,t){let n=t?.config??{enabled:!0};return{"chat.message":async(i,r)=>{if(!n.enabled)return;let a=n.agentFile??".opencode-agents";if(Ec(a))try{let s=Pc(a,"utf-8");if(w)console.log("[directory-agents-injector] Found local agent definitions")}catch{if(w)console.log("[directory-agents-injector] Could not read agent file")}}}}import{readFileSync as Tc,existsSync as Mc}from"node:fs";function Rr(e,t){let n=t?.config??{enabled:!0};return{"chat.message":async(i,r)=>{if(!n.enabled)return;let a=["README.md","readme.md","Readme.md"];for(let s of a)if(Mc(s)){try{let o=Tc(s,"utf-8");if(w)console.log("[directory-readme-injector] Found README, injecting context");if(r.parts&&Array.isArray(r.parts)){let c=r.parts.findIndex((l)=>l.type==="text");if(c>=0){let l=r.parts[c],u=`
1794
+ ${P.text||""}`};c.parts=[...l.slice(0,C),O,...l.slice(C+1)]}}}}x();var Ec=S("agent-usage-reminder");function Tr(e,t){let n=t?.config??{enabled:!0,threshold:10},i=0;return{"tool.execute.after":async(r,a)=>{if(!n.enabled)return;if(r.tool==="task"){i++;let s=n.threshold??10;if(i%s===0)Ec.debug(`Agent has been called ${i} times in this session`)}}}}x();function Mr(e,t){let n=t?.config??{enabled:!0,threshold:1e5};return{"chat.params":async(i,r)=>{if(!n.enabled)return;if(w)console.log("[anthropic-context-window-limit-recovery] Monitoring context window usage")}}}x();function Tc(e){return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
1795
+ `).trim()}function Rr(e,t){let n=t?.config??{enabled:!0};return{"chat.message":async(i,r)=>{if(!n.enabled)return;if(!Tc(r.parts))return;if(w)console.log("[compaction-context-injector] Processing message before compaction")},"experimental.session.compacting":async(i,r)=>{if(!n.enabled)return;if(w)console.log("[compaction-context-injector] Adding context for session compaction")}}}x();import{readFileSync as Mc,existsSync as Rc}from"node:fs";function Dr(e,t){let n=t?.config??{enabled:!0};return{"chat.message":async(i,r)=>{if(!n.enabled)return;let a=n.agentFile??".opencode-agents";if(Rc(a))try{let s=Mc(a,"utf-8");if(w)console.log("[directory-agents-injector] Found local agent definitions")}catch{if(w)console.log("[directory-agents-injector] Could not read agent file")}}}}x();import{readFileSync as Dc,existsSync as Nc}from"node:fs";function Nr(e,t){let n=t?.config??{enabled:!0};return{"chat.message":async(i,r)=>{if(!n.enabled)return;let a=["README.md","readme.md","Readme.md"];for(let s of a)if(Nc(s)){try{let o=Dc(s,"utf-8");if(w)console.log("[directory-readme-injector] Found README, injecting context");if(r.parts&&Array.isArray(r.parts)){let c=r.parts.findIndex((l)=>l.type==="text");if(c>=0){let l=r.parts[c],u=`
1796
1796
 
1797
1797
  ---
1798
1798
  **Project README:**
1799
1799
  ${o}
1800
1800
  ---
1801
1801
 
1802
- `;r.parts[c]={...l,text:`${l.text||""}${u}`}}}}catch(o){if(console.warn("[directory-readme-injector] Could not read README:",o),w)console.log("[directory-readme-injector] Detailed error:",o)}break}}}}var F=x("edit-error-recovery"),Dr=new Map,le=new Map;function Rc(e){let t=Dr.get(e);if(!t)t={filePath:e,failures:[],lastGoodContent:null,conflictCount:0},Dr.set(e,t);return t}function Dc(e,t,n){let i=t*Math.pow(2,e);return Math.min(i,n)}function Nc(e){let t=String(e).toLowerCase();if(t.includes("no such file")||t.includes("file not found"))return"file_not_found";if(t.includes("permission denied")||t.includes("eacces"))return"permission_denied";if(t.includes("not found")||t.includes("string not found"))return"merge_conflict";if(t.includes("concurrent")||t.includes("modified"))return"concurrent_edit";return"unknown"}function Oc(e,t,n){switch(e){case"file_not_found":if(n.autoCreateDirs)return{canRecover:!0,action:"create_directories",suggestion:"Create parent directories and retry edit"};return{canRecover:!1,action:"none",suggestion:"Create the file or parent directories manually"};case"permission_denied":return{canRecover:!1,action:"check_permissions",suggestion:"Check file permissions and user access"};case"merge_conflict":return{canRecover:!0,action:"refresh_and_retry",suggestion:"Read file again and retry with current content"};case"concurrent_edit":return{canRecover:!0,action:"retry_with_backoff",suggestion:"Wait and retry edit with fresh content"};default:return{canRecover:!1,action:"none",suggestion:"Investigate the error and try again"}}}async function Lc(e,t,n){let i=Oc(e,t,n);if(!i.canRecover)return F.debug(`Cannot recover from error type: ${e}`),F.debug(`Suggestion: ${i.suggestion}`),!1;if(F.debug(`Attempting recovery action: ${i.action}`),F.debug(`Suggestion: ${i.suggestion}`),e==="file_not_found"&&n.autoCreateDirs)try{let{mkdir:r}=await import("node:fs/promises"),a=t.split("/").slice(0,-1).join("/");if(a)await r(a,{recursive:!0}),F.debug(`Created directory: ${a}`);return!0}catch(r){return console.error(`[edit-error-recovery] Failed to create directory: ${r}`),!1}return!0}function Nr(e,t){let n=t?.config??{enabled:!0,maxRetries:5,baseDelay:500,maxDelay:1e4,autoCreateDirs:!0,trackConflicts:!0};return{"tool.execute.after":async(i,r)=>{if(!n.enabled)return;if(i.tool!=="edit"&&i.tool!=="write")return;let{sessionID:a,filePath:s}=i,o=n.maxRetries??5,c=n.baseDelay??500,l=n.maxDelay??1e4,u=r;if(u.error||u.status==="error"){let p=u.error||u.output||"Unknown error",m=Nc(p),g=`${a}-${s||"unknown"}`,f=le.get(g)??0;if(f<o){if(s){let y=Rc(s);if(y.failures.push({timestamp:Date.now(),filePath:s,errorType:m,errorMessage:String(p),retryAttempt:f+1}),m==="merge_conflict"&&n.trackConflicts)y.conflictCount++}if(F.debug(`Edit error detected (attempt ${f+1}/${o})`),s)F.debug(`File: ${s}`);if(F.debug(`Error type: ${m}`),F.debug(`Error: ${p}`),await Lc(m,s||"",n)){let y=Dc(f,c,l);le.set(g,f+1),F.debug(`Retry scheduled in ${y}ms`),F.debug("[session recovered - continuing previous task]"),setTimeout(()=>{le.delete(g)},y)}else console.error(`[edit-error-recovery] Recovery failed for ${s||"unknown"}`),le.delete(g)}else console.error(`[edit-error-recovery] Max retries (${o}) exceeded for ${s||"unknown"}`),le.delete(g)}else if(s)le.delete(`${a}-${s}`)}}}var Or=new Map;function Fc(e){let t=Or.get(e);if(!t)t={sessionID:e,emptyCount:0,lastEmptyTime:null,history:[]},Or.set(e,t);return t}function Ic(e){return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
1803
- `).trim()}function $c(e){return e.some((t)=>t.type!=="text")}function jc(e){return e.some((t)=>t.type==="tool")}function _c(e){let t=Ic(e),n=jc(e),i=$c(e);if(t.length===0&&!n&&!i)return{isEmpty:!0,reason:"No text content, no tool calls, and no other parts",hasContent:!1,hasTools:!1};if(t.length===0&&!n)return{isEmpty:!0,reason:"No text content and no tool calls",hasContent:!1,hasTools:!1};if(t.trim()==="")return{isEmpty:!0,reason:"Text content is whitespace-only",hasContent:!1,hasTools:n};return{isEmpty:!1,reason:"",hasContent:!0,hasTools:n}}function Lr(e,t){let n=t?.config??{enabled:!0,requireJustification:!1,trackPatterns:!0,autoRecover:!0};return{"chat.message":async(i,r)=>{if(!n.enabled)return;let{sessionID:a}=i,s=_c(r.parts);if(s.isEmpty){let o=Fc(a);if(o.emptyCount++,o.lastEmptyTime=Date.now(),o.history.push({timestamp:Date.now(),reason:s.reason}),w){if(console.log(`[empty-message-sanitizer] Detected empty message in session ${a}`),console.log(`[empty-message-sanitizer] Reason: ${s.reason}`),n.trackPatterns&&o.emptyCount>1)console.log(`[empty-message-sanitizer] Empty message count: ${o.emptyCount} in session ${a}`);if(n.autoRecover)console.log("[empty-message-sanitizer] [session recovered - continuing previous task]");if(n.requireJustification&&n.autoRecover)console.log("[empty-message-sanitizer] Please provide a justification for sending an empty message, or include actual content.")}}}}}var Fr=new Map;function qe(e){let t=Fr.get(e);if(!t)t={sessions:new Map,sessionTimeout:3600000},Fr.set(e,t);return t}function Z(e){return qe(e).sessions.get(e)}function Uc(e,t){let n={sessionID:e,workingDirectory:t||process.cwd(),environment:{},commandHistory:[],childProcesses:new Set,lastActiveTime:Date.now()};return qe(e).sessions.set(e,n),n}function Wc(e){let t=Z(e);if(t)t.lastActiveTime=Date.now()}function Hc(e,t){let n=Z(e);if(n){if(n.commandHistory.push(t),n.commandHistory.length>100)n.commandHistory=n.commandHistory.slice(-100)}}function Ir(e){e.childProcesses.forEach((t)=>{try{process.kill(t)}catch(n){}}),e.childProcesses.clear()}function $r(e,t){let n=t?.config??{enabled:!0,trackHistory:!0,historySize:50,preserveEnv:!0,autoCleanup:!0,sessionTimeout:3600000};return{"tool.execute.before":async(i,r)=>{if(!n.enabled)return;if(i.tool!=="bash")return;let{sessionID:a}=i;if(!a)return;if(!Z(a))console.log(`[interactive-bash-session] Creating new bash session for ${a}`),Uc(a);else Wc(a)},"tool.execute.after":async(i,r)=>{if(!n.enabled)return;if(i.tool!=="bash")return;let a=i.sessionID||"",s=i.args,o=Array.isArray(s)?s.join(" "):String(s);Hc(a,o);let c=r;if(c.pid!==void 0){let l=Z(a);if(l)l.childProcesses.add(c.pid)}if(n.trackHistory){let l=Z(a);if(l)console.log(`[interactive-bash-session] Command history size: ${l.commandHistory.length}`)}},event:async(i)=>{if(!n.enabled)return;let r=i.sessionID;if(!r)return;let a=i;if(a?.type==="session.end"&&n.autoCleanup){let s=Z(r);if(s)console.log(`[interactive-bash-session] Cleaning up bash session for ${r}`),Ir(s),qe(r).sessions.delete(r),console.log(`[interactive-bash-session] Session cleanup completed. Commands executed: ${s.commandHistory.length}, Working dir: ${s.workingDirectory}`)}if(a?.type==="session.timeout"){let s=Z(r);if(s&&n.autoCleanup)console.log(`[interactive-bash-session] Session timeout for ${r}`),Ir(s),qe(r).sessions.delete(r)}}}}function jr(e,t){let n=t?.config??{enabled:!0};return{event:async(i)=>{if(!n.enabled)return;if(process.env.CI!==void 0)console.log("[non-interactive-env] Detected CI environment, enabling non-interactive mode")}}}function _r(e,t){let n=t?.config??{enabled:!0,threshold:1e4};return{"chat.message":async(i,r)=>{if(!n.enabled)return;let a=n.threshold??1e4;if(w)console.log(`[preemptive-compaction] Monitoring message length for preemptive compaction (threshold: ${a})`)},"experimental.session.compacting":async(i,r)=>{if(!n.enabled)return;if(w)console.log("[preemptive-compaction] Triggering preemptive session compaction")}}}jt();var _t=x("session-recovery"),Kr=new Map;function Jr(e,t){let n=t?.config??{enabled:!0,autoRecover:!1};if(!n.enabled)return{"chat.message":async()=>{}};return{"chat.message":async(i)=>{let{sessionID:r}=i;if(!r)return;let a=Br(r);a.errorType=null},event:async(i)=>{let{sessionID:r,type:a,error:s}=i;if(a!=="session.error")return;if(!r)return;let{detectErrorType:o}=await Promise.resolve().then(() => (jt(),Wr)),c=o(s),l=Br(r);if(l.errorType=c,l.lastErrorTime=Date.now(),l.errorCount++,_t.debug(`Detected error type: ${c}`),_t.debug(`Error count for session ${r}: ${l.errorCount}`),n.autoRecover&&$t(c)){let{attemptRecovery:u}=await Promise.resolve().then(() => (qr(),Hr)),p={sessionID:r,error:s,timestamp:Date.now()};try{await u(c,p,{maxRetries:3}),_t.debug(`Auto-recovery attempted for ${c}`)}catch(m){console.error("[session-recovery] Auto-recovery failed:",m)}}}}}function Br(e){let t=Kr.get(e);if(!t)t={sessionID:e,errorType:null,errorCount:0,lastErrorTime:null,recoveryAttempts:0,messagesBeforeError:0},Kr.set(e,t);return t}var Yr=new Map;function rl(e){let t=Yr.get(e);if(!t)t={sessionID:e,errorCount:0,lastErrorTime:null,history:[]},Yr.set(e,t);return t}function ol(e){return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
1804
- `)}function Vr(e,t){let n=[],i=e.indexOf(t);while(i!==-1)n.push(i),i=e.indexOf(t,i+t.length);return n}function al(e,t){let n=[],i=e.split(`
1805
- `),r=!1,a=Vr(e,"<thinking>"),s=Vr(e,"</thinking>");if(a.length!==s.length)n.push({type:"mismatched_tags",line:0,message:`Mismatched thinking block tags: ${a.length} opening, ${s.length} closing`,suggestion:"Ensure every <thinking> has a matching </thinking>",recovered:!1});if(a.length===0&&e.includes("</thinking>")){let o=t.autoRecover??!1;n.push({type:"missing_open_tag",line:0,message:"Found closing </thinking> tag without opening <thinking>",suggestion:"Add <thinking> tag before the closing tag",recovered:o}),r=o}if(s.length===0&&e.includes("<thinking>")){let o=t.autoRecover??!1;n.push({type:"missing_close_tag",line:0,message:"Found opening <thinking> tag without closing </thinking>",suggestion:"Add </thinking> tag to close the thinking block",recovered:o}),r=o}for(let o=0;o<a.length;o++){let c=a[o],l=s[o];if(l!==void 0&&l<c){let u=e.substring(0,l).split(`
1802
+ `;r.parts[c]={...l,text:`${l.text||""}${u}`}}}}catch(o){if(console.warn("[directory-readme-injector] Could not read README:",o),w)console.log("[directory-readme-injector] Detailed error:",o)}break}}}}x();var $=S("edit-error-recovery"),Or=new Map,ue=new Map;function Oc(e){let t=Or.get(e);if(!t)t={filePath:e,failures:[],lastGoodContent:null,conflictCount:0},Or.set(e,t);return t}function Lc(e,t,n){let i=t*Math.pow(2,e);return Math.min(i,n)}function Fc(e){let t=String(e).toLowerCase();if(t.includes("no such file")||t.includes("file not found"))return"file_not_found";if(t.includes("permission denied")||t.includes("eacces"))return"permission_denied";if(t.includes("not found")||t.includes("string not found"))return"merge_conflict";if(t.includes("concurrent")||t.includes("modified"))return"concurrent_edit";return"unknown"}function Ic(e,t,n){switch(e){case"file_not_found":if(n.autoCreateDirs)return{canRecover:!0,action:"create_directories",suggestion:"Create parent directories and retry edit"};return{canRecover:!1,action:"none",suggestion:"Create the file or parent directories manually"};case"permission_denied":return{canRecover:!1,action:"check_permissions",suggestion:"Check file permissions and user access"};case"merge_conflict":return{canRecover:!0,action:"refresh_and_retry",suggestion:"Read file again and retry with current content"};case"concurrent_edit":return{canRecover:!0,action:"retry_with_backoff",suggestion:"Wait and retry edit with fresh content"};default:return{canRecover:!1,action:"none",suggestion:"Investigate the error and try again"}}}async function $c(e,t,n){let i=Ic(e,t,n);if(!i.canRecover)return $.debug(`Cannot recover from error type: ${e}`),$.debug(`Suggestion: ${i.suggestion}`),!1;if($.debug(`Attempting recovery action: ${i.action}`),$.debug(`Suggestion: ${i.suggestion}`),e==="file_not_found"&&n.autoCreateDirs)try{let{mkdir:r}=await import("node:fs/promises"),a=t.split("/").slice(0,-1).join("/");if(a)await r(a,{recursive:!0}),$.debug(`Created directory: ${a}`);return!0}catch(r){return console.error(`[edit-error-recovery] Failed to create directory: ${r}`),!1}return!0}function Lr(e,t){let n=t?.config??{enabled:!0,maxRetries:5,baseDelay:500,maxDelay:1e4,autoCreateDirs:!0,trackConflicts:!0};return{"tool.execute.after":async(i,r)=>{if(!n.enabled)return;if(i.tool!=="edit"&&i.tool!=="write")return;let{sessionID:a,filePath:s}=i,o=n.maxRetries??5,c=n.baseDelay??500,l=n.maxDelay??1e4,u=r;if(u.error||u.status==="error"){let p=u.error||u.output||"Unknown error",m=Fc(p),g=`${a}-${s||"unknown"}`,f=ue.get(g)??0;if(f<o){if(s){let y=Oc(s);if(y.failures.push({timestamp:Date.now(),filePath:s,errorType:m,errorMessage:String(p),retryAttempt:f+1}),m==="merge_conflict"&&n.trackConflicts)y.conflictCount++}if($.debug(`Edit error detected (attempt ${f+1}/${o})`),s)$.debug(`File: ${s}`);if($.debug(`Error type: ${m}`),$.debug(`Error: ${p}`),await $c(m,s||"",n)){let y=Lc(f,c,l);ue.set(g,f+1),$.debug(`Retry scheduled in ${y}ms`),$.debug("[session recovered - continuing previous task]"),setTimeout(()=>{ue.delete(g)},y)}else console.error(`[edit-error-recovery] Recovery failed for ${s||"unknown"}`),ue.delete(g)}else console.error(`[edit-error-recovery] Max retries (${o}) exceeded for ${s||"unknown"}`),ue.delete(g)}else if(s)ue.delete(`${a}-${s}`)}}}x();var Fr=new Map;function jc(e){let t=Fr.get(e);if(!t)t={sessionID:e,emptyCount:0,lastEmptyTime:null,history:[]},Fr.set(e,t);return t}function _c(e){return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
1803
+ `).trim()}function Uc(e){return e.some((t)=>t.type!=="text")}function Wc(e){return e.some((t)=>t.type==="tool")}function Hc(e){let t=_c(e),n=Wc(e),i=Uc(e);if(t.length===0&&!n&&!i)return{isEmpty:!0,reason:"No text content, no tool calls, and no other parts",hasContent:!1,hasTools:!1};if(t.length===0&&!n)return{isEmpty:!0,reason:"No text content and no tool calls",hasContent:!1,hasTools:!1};if(t.trim()==="")return{isEmpty:!0,reason:"Text content is whitespace-only",hasContent:!1,hasTools:n};return{isEmpty:!1,reason:"",hasContent:!0,hasTools:n}}function Ir(e,t){let n=t?.config??{enabled:!0,requireJustification:!1,trackPatterns:!0,autoRecover:!0};return{"chat.message":async(i,r)=>{if(!n.enabled)return;let{sessionID:a}=i,s=Hc(r.parts);if(s.isEmpty){let o=jc(a);if(o.emptyCount++,o.lastEmptyTime=Date.now(),o.history.push({timestamp:Date.now(),reason:s.reason}),w){if(console.log(`[empty-message-sanitizer] Detected empty message in session ${a}`),console.log(`[empty-message-sanitizer] Reason: ${s.reason}`),n.trackPatterns&&o.emptyCount>1)console.log(`[empty-message-sanitizer] Empty message count: ${o.emptyCount} in session ${a}`);if(n.autoRecover)console.log("[empty-message-sanitizer] [session recovered - continuing previous task]");if(n.requireJustification&&n.autoRecover)console.log("[empty-message-sanitizer] Please provide a justification for sending an empty message, or include actual content.")}}}}}var $r=new Map;function Be(e){let t=$r.get(e);if(!t)t={sessions:new Map,sessionTimeout:3600000},$r.set(e,t);return t}function te(e){return Be(e).sessions.get(e)}function qc(e,t){let n={sessionID:e,workingDirectory:t||process.cwd(),environment:{},commandHistory:[],childProcesses:new Set,lastActiveTime:Date.now()};return Be(e).sessions.set(e,n),n}function Kc(e){let t=te(e);if(t)t.lastActiveTime=Date.now()}function Bc(e,t){let n=te(e);if(n){if(n.commandHistory.push(t),n.commandHistory.length>100)n.commandHistory=n.commandHistory.slice(-100)}}function jr(e){e.childProcesses.forEach((t)=>{try{process.kill(t)}catch(n){}}),e.childProcesses.clear()}function _r(e,t){let n=t?.config??{enabled:!0,trackHistory:!0,historySize:50,preserveEnv:!0,autoCleanup:!0,sessionTimeout:3600000};return{"tool.execute.before":async(i,r)=>{if(!n.enabled)return;if(i.tool!=="bash")return;let{sessionID:a}=i;if(!a)return;if(!te(a))console.log(`[interactive-bash-session] Creating new bash session for ${a}`),qc(a);else Kc(a)},"tool.execute.after":async(i,r)=>{if(!n.enabled)return;if(i.tool!=="bash")return;let a=i.sessionID||"",s=i.args,o=Array.isArray(s)?s.join(" "):String(s);Bc(a,o);let c=r;if(c.pid!==void 0){let l=te(a);if(l)l.childProcesses.add(c.pid)}if(n.trackHistory){let l=te(a);if(l)console.log(`[interactive-bash-session] Command history size: ${l.commandHistory.length}`)}},event:async(i)=>{if(!n.enabled)return;let r=i.sessionID;if(!r)return;let a=i;if(a?.type==="session.end"&&n.autoCleanup){let s=te(r);if(s)console.log(`[interactive-bash-session] Cleaning up bash session for ${r}`),jr(s),Be(r).sessions.delete(r),console.log(`[interactive-bash-session] Session cleanup completed. Commands executed: ${s.commandHistory.length}, Working dir: ${s.workingDirectory}`)}if(a?.type==="session.timeout"){let s=te(r);if(s&&n.autoCleanup)console.log(`[interactive-bash-session] Session timeout for ${r}`),jr(s),Be(r).sessions.delete(r)}}}}function Ur(e,t){let n=t?.config??{enabled:!0};return{event:async(i)=>{if(!n.enabled)return;if(process.env.CI!==void 0)console.log("[non-interactive-env] Detected CI environment, enabling non-interactive mode")}}}x();function Wr(e,t){let n=t?.config??{enabled:!0,threshold:1e4};return{"chat.message":async(i,r)=>{if(!n.enabled)return;let a=n.threshold??1e4;if(w)console.log(`[preemptive-compaction] Monitoring message length for preemptive compaction (threshold: ${a})`)},"experimental.session.compacting":async(i,r)=>{if(!n.enabled)return;if(w)console.log("[preemptive-compaction] Triggering preemptive session compaction")}}}Wt();x();var Ht=S("session-recovery"),Jr=new Map;function Vr(e,t){let n=t?.config??{enabled:!0,autoRecover:!1};if(!n.enabled)return{"chat.message":async()=>{}};return{"chat.message":async(i)=>{let{sessionID:r}=i;if(!r)return;let a=Yr(r);a.errorType=null},event:async(i)=>{let{sessionID:r,type:a,error:s}=i;if(a!=="session.error")return;if(!r)return;let{detectErrorType:o}=await Promise.resolve().then(() => (Wt(),qr)),c=o(s),l=Yr(r);if(l.errorType=c,l.lastErrorTime=Date.now(),l.errorCount++,Ht.debug(`Detected error type: ${c}`),Ht.debug(`Error count for session ${r}: ${l.errorCount}`),n.autoRecover&&Ut(c)){let{attemptRecovery:u}=await Promise.resolve().then(() => (Br(),Kr)),p={sessionID:r,error:s,timestamp:Date.now()};try{await u(c,p,{maxRetries:3}),Ht.debug(`Auto-recovery attempted for ${c}`)}catch(m){console.error("[session-recovery] Auto-recovery failed:",m)}}}}}function Yr(e){let t=Jr.get(e);if(!t)t={sessionID:e,errorType:null,errorCount:0,lastErrorTime:null,recoveryAttempts:0,messagesBeforeError:0},Jr.set(e,t);return t}x();var zr=new Map;function sl(e){let t=zr.get(e);if(!t)t={sessionID:e,errorCount:0,lastErrorTime:null,history:[]},zr.set(e,t);return t}function cl(e){return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
1804
+ `)}function Gr(e,t){let n=[],i=e.indexOf(t);while(i!==-1)n.push(i),i=e.indexOf(t,i+t.length);return n}function ll(e,t){let n=[],i=e.split(`
1805
+ `),r=!1,a=Gr(e,"<thinking>"),s=Gr(e,"</thinking>");if(a.length!==s.length)n.push({type:"mismatched_tags",line:0,message:`Mismatched thinking block tags: ${a.length} opening, ${s.length} closing`,suggestion:"Ensure every <thinking> has a matching </thinking>",recovered:!1});if(a.length===0&&e.includes("</thinking>")){let o=t.autoRecover??!1;n.push({type:"missing_open_tag",line:0,message:"Found closing </thinking> tag without opening <thinking>",suggestion:"Add <thinking> tag before the closing tag",recovered:o}),r=o}if(s.length===0&&e.includes("<thinking>")){let o=t.autoRecover??!1;n.push({type:"missing_close_tag",line:0,message:"Found opening <thinking> tag without closing </thinking>",suggestion:"Add </thinking> tag to close the thinking block",recovered:o}),r=o}for(let o=0;o<a.length;o++){let c=a[o],l=s[o];if(l!==void 0&&l<c){let u=e.substring(0,l).split(`
1806
1806
  `).length,p=t.autoRecover??!1;n.push({type:"inverted_tags",line:u,message:"Closing tag appears before opening tag",suggestion:"Remove duplicate opening tag or reorder tags correctly",recovered:p}),r=p}if(o<a.length-1&&l!==void 0){let u=a[o+1];if(u<l){let p=e.substring(0,u).split(`
1807
1807
  `).length,m=t.autoRecover??!1;n.push({type:"nested_thinking",line:p,message:"Nested thinking blocks detected (opening tag before closing previous block)",suggestion:"Close the previous thinking block before opening a new one",recovered:m}),r=m}}}if(t.enforcePosition){let o=s.length>0?Math.max(...s):-1;if(o>=0?e.substring(o).trim().length>0:!1){let l=e.substring(0,o).split(`
1808
1808
  `).length,u=t.autoRecover??!1;n.push({type:"content_after_thinking",line:l,message:"Content found after last thinking block",suggestion:"Move thinking blocks to beginning of message",recovered:u}),r=u}}if(t.requireContent)for(let o=0;o<a.length;o++){let c=a[o],l=s[o];if(l!==void 0){if(e.substring(c+10,l).trim().length===0){let p=e.substring(0,c).split(`
1809
- `).length,m=t.autoRecover??!1;n.push({type:"empty_thinking",line:p,message:"Empty thinking block (no content between tags)",suggestion:"Add meaningful thinking content or remove the empty block",recovered:m}),r=m}}}return{hasErrors:n.length>0,errors:n,recovered:r}}function sl(e,t){let n=e;for(let i of t){if(!i.recovered)continue;switch(i.type){case"missing_close_tag":n=n.replace(/<thinking>$/,`<thinking>
1809
+ `).length,m=t.autoRecover??!1;n.push({type:"empty_thinking",line:p,message:"Empty thinking block (no content between tags)",suggestion:"Add meaningful thinking content or remove the empty block",recovered:m}),r=m}}}return{hasErrors:n.length>0,errors:n,recovered:r}}function dl(e,t){let n=e;for(let i of t){if(!i.recovered)continue;switch(i.type){case"missing_close_tag":n=n.replace(/<thinking>$/,`<thinking>
1810
1810
  </thinking>`);break;case"missing_open_tag":n=n.replace(/^<\/thinking>/,`<thinking>
1811
1811
  </thinking>`);break;case"inverted_tags":let r=(n.match(/<thinking>/g)||[]).length,a=(n.match(/<\/thinking>/g)||[]).length;if(r>a)n+=`
1812
1812
  </thinking>`;break;case"nested_thinking":let s=n.lastIndexOf("<thinking>");if(n.lastIndexOf("</thinking>")<s)n+=`
1813
- </thinking>`;break;case"empty_thinking":n=n.replace(/<thinking>\s*<\/thinking>/gi,"");break;case"content_after_thinking":let c=n.lastIndexOf("</thinking>");if(c>=0){if(n.substring(c+13).trim().length>0)n=n.substring(0,c+13)}break;default:break}}return n}function zr(e,t){let n=t?.config??{enabled:!0,autoRecover:!0,strictMode:!1,enforcePosition:!0,requireContent:!0};return{"chat.message":async(i,r)=>{if(!n.enabled)return;let{sessionID:a}=i,s=ol(r.parts);if(!s.includes("<thinking>")&&!s.includes("</thinking>"))return;let o=al(s,n);if(o.hasErrors){let c=rl(a);if(c.errorCount++,c.lastErrorTime=Date.now(),c.history.push({timestamp:Date.now(),errors:o.errors}),w){console.log(`[thinking-block-validator] Detected ${o.errors.length} thinking block validation error(s) in session ${a}`);for(let l of o.errors)if(console.log(`[thinking-block-validator] [${l.type}] Line ${l.line}: ${l.message}`),console.log(`[thinking-block-validator] Suggestion: ${l.suggestion}`),l.recovered)console.log("[thinking-block-validator] ✓ Auto-recovery applied")}if(n.autoRecover&&o.recovered){let l=sl(s,o.errors);if(w)console.log("[thinking-block-validator] [session recovered - continuing previous task]"),console.log(`[thinking-block-validator] Recovered text length: ${l.length} (original: ${s.length})`)}if(n.strictMode&&!o.recovered)console.error("[thinking-block-validator] CRITICAL: Validation failed in strict mode. Please fix the thinking block structure before continuing.")}}}}var Ut={todo:[/TODO:/i,/@todo/i,/\[TODO\]/i,/待办/i,/할 일/i,/待辦/i],fixme:[/FIXME:/i,/@fixme/i,/\[FIXME\]/i,/修复/i,/수정/i,/修正/i],xxx:[/XXX:/i,/@xxx/i,/\[XXX\]/i],hack:[/HACK:/i,/@hack/i,/\[HACK\]/i],note:[/NOTE:/i,/@note/i,/\[NOTE\]/i,/注意/i,/참고/i,/註記/i],bug:[/BUG:/i,/@bug/i,/\[BUG\]/i],warning:[/WARNING:/i,/@warning/i,/\[WARNING\]/i,/경고/i],optimization:[/OPTIMIZE:/i,/PERFORMANCE:/i,/@optimize/i],refactoring:[/REFACTOR:/i,/@refactor/i],documentation:[/DOC:/i,/@doc/i]},Gr={bdd:[/^\s*#\s*Given\s+/i,/^\s*#\s*When\s+/i,/^\s*#\s*Then\s+/i,/^\s*#\s*And\s+/i,/^\s*#\s*But\s+/i,/^\s*\/\/\s*Given\s+/i,/^\s*\/\/\s*When\s+/i,/^\s*\/\/\s*Then\s+/i,/^\s*\/\/\s*And\s+/i],linter:[/^\s*#\s*noqa/i,/^\s*\/\/\s*@ts-ignore\b/i,/^\s*\/\/\s*@ts-nocheck\b/i,/^\s*\/\/\s*@ts-check\b/i,/^\s*\/\/\s*eslint-disable\b/i,/^\s*\/\/\s*eslint-enable\b/i,/^\s*\/\/\s*eslint-disable-next-line\b/i,/^\s*\/\*\s*eslint-disable\b/i,/^\s*\/\*\s*eslint-enable\b/i,/^\s*#\s*type:\s*ignore\b/i,/^\s*#\s*pylint:\s*disable\b/i,/^\s*#\s*mypy:\s*ignore\b/i],shebang:[/^#!\/bin\//,/^#!\/usr\/bin\/env\s+/],copyright:[/Copyright\s+\(c\)/i,/Copyright\s+\d{4}/i,/SPDX-License-Identifier:/i,/MIT License/i,/Apache License/i,/GPL License/i,/BSD License/i],fileHeader:[/^\s*File:\s+.*\.md/i,/^\s*Author:/i,/^\s*Date:\s*\d{4}-\d{2}-\d{2}/i,/^\s*Created:/i,/^\s*Modified:/i],documentation:[/^\s*\/\*\*[\s\S]*?\*\//,/^\s*\/\*\*[\s\S]*?@param/i,/^\s*\/\*\*[\s\S]*?@return/i,/^\s*\/\/\/[\s\S]*?@brief/i,/^\s*\/\/\/[\s\S]*?@param/i,/^\s*\/\*\*[\s\S]*?@brief/i,/^\s*#\s+@param/i,/^\s*#\s+@return/i,/^\s*#\s+@type/i],inlineDocs:[/^\s*\/\/\s*[A-Z]/,/^\s*#\s*[A-Z]/],imports:[/^\s*import\s+/,/^\s*require\s*\(/,/^\s*#\s*include\s+/,/^\s*using\s+namespace/]},Xr={javascript:{single:["//"],multi:["/*","*/"],shebang:["#!/usr/bin/env node","#!/usr/bin/nodejs"]},typescript:{single:["//"],multi:["/*","*/"],shebang:["#!/usr/bin/env node","#!/usr/bin/ts-node"]},python:{single:["#"],multi:['"""','"""'],shebang:["#!/usr/bin/env python3","#!/usr/bin/python3"]},rust:{single:["//"],multi:["/*","*/"],shebang:["#!/usr/bin/env rust-script"]},go:{single:["//"],multi:["/*","*/"]},java:{single:["//"],multi:["/*","*/"]},cpp:{single:["//"],multi:["/*","*/"]},csharp:{single:["//"],multi:["/*","*/"]},ruby:{single:["#"],multi:["=begin","=end"]},php:{single:["//","#"],multi:["/*","*/"],shebang:["#!/usr/bin/env php"]},swift:{single:["//"],multi:["/*","*/"]},kotlin:{single:["//"],multi:["/*","*/"]},scala:{single:["//"],multi:["/*","*/"]},shell:{single:["#"],multi:["<<'","'"],shebang:["#!/bin/bash","#!/bin/sh","#!/usr/bin/env bash"]},powershell:{single:["#"],multi:["<#","#>"],shebang:["#!/usr/bin/env pwsh"]},lua:{single:["--"],multi:["--[[","]]"]},sql:{single:["--"],multi:["/*","*/"]},html:{multi:["<!--","-->"]},css:{multi:["/*","*/"]},yaml:{single:["#"]},toml:{single:["#"]},json:{none:[]},xml:{multi:["<!--","-->"]},r:{single:["#"]},matlab:{single:["%"],multi:["%{","%}"]},fortran:{single:["!"],multi:["/*","*/"]},cobol:{single:["*"]},assembly:{single:[";"]}};function Qr(e){let t=e.split(".").pop()?.toLowerCase();return t?{js:"javascript",jsx:"javascript",ts:"typescript",tsx:"typescript",py:"python",rs:"rust",go:"go",java:"java",cpp:"cpp",cxx:"cpp",cc:"cpp",c:"cpp",cs:"csharp",rb:"ruby",php:"php",swift:"swift",kt:"kotlin",scala:"scala",sh:"shell",bash:"shell",zsh:"shell",fish:"shell",ps1:"powershell",psm1:"powershell",lua:"lua",sql:"sql",html:"html",css:"css",scss:"css",yaml:"yaml",yml:"yaml",toml:"toml",json:"json",xml:"xml",r:"r",m:"matlab",f:"fortran",f90:"fortran",f95:"fortran",cbl:"cobol",cob:"cobol",asm:"assembly",s:"assembly"}[t]??null:null}function cl(e){return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
1814
- `).trim()}function Zr(e){let t=e.trim();for(let[n,i]of Object.entries(Gr))for(let r of i)if(r.test(t))return!0;return!1}function ll(e){let t=[],n=/(?:^|\n)Writing to (.+?)\n/g,i=[...e.matchAll(n)];for(let r of i){let a=r[1],s=r.index+r[0].length,o=e.length,c=e.substring(s).match(/\nWriting to .+?\n/);if(c)o=s+c.index;let l=e.substring(s,o).trim();t.push({filename:a,content:l})}return t}function dl(e,t){let n=[],i=e.split(`
1815
- `),r=Qr(t),a=r?Xr[r]:null,s=!1,o=0;for(let c=0;c<i.length;c++){let l=i[c],u=l.trim();if(a&&"multi"in a&&a.multi.length>0){if(u.startsWith(a.multi[0])||s){if(!s)s=!0,o=c;if(u.endsWith(a.multi[1]))s=!1;continue}}if(a&&"shebang"in a&&Array.isArray(a.shebang)&&a.shebang.length>0){if(l.startsWith(a.shebang[0]))continue}let p=!1;if(a&&"single"in a)p=a.single.some((m)=>u.startsWith(m));if(!p){if(u.startsWith("//")||u.startsWith("#"))p=!0}if(p){for(let[m,g]of Object.entries(Ut))for(let f of g)if(f.test(u)){let b=Zr(u);n.push({type:m,line:c+1,text:u,isException:b})}}}return n}function eo(e,t){let n=t?.config??{enabled:!0,checkAfterToolUse:!0,requireJustification:!1};return{"chat.message":async(i,r)=>{if(!n.enabled)return;let a=cl(r.parts),s=[],o=a.split(`
1816
- `);for(let[c,l]of Object.entries(Ut))o.forEach((u,p)=>{for(let m of l)if(m.test(u)){if(!Zr(u))s.push({type:c,line:p+1,text:u.trim()})}});if(s.length>0&&w)console.log(`[comment-checker] Found ${s.length} annotated comments that need justification`)},"tool.execute.after":async(i,r)=>{if(!n.enabled||!n.checkAfterToolUse)return;if(!r.output)return;let{tool:a}=i;if(!["write","edit","multiEdit"].includes(a))return;let o=typeof r.output==="string"?r.output:JSON.stringify(r.output),c=ll(o),l=[];for(let{filename:u,content:p}of c){let g=dl(p,u).filter((f)=>!f.isException);if(g.length>0){if(l.push({filename:u,comments:g}),w){console.log(`[comment-checker] File ${u}:`);for(let f of g)console.log(` Line ${f.line}: ${f.type} - ${f.text.substring(0,50)}`)}}}if(n.requireJustification&&l.length>0){let u=`
1813
+ </thinking>`;break;case"empty_thinking":n=n.replace(/<thinking>\s*<\/thinking>/gi,"");break;case"content_after_thinking":let c=n.lastIndexOf("</thinking>");if(c>=0){if(n.substring(c+13).trim().length>0)n=n.substring(0,c+13)}break;default:break}}return n}function Xr(e,t){let n=t?.config??{enabled:!0,autoRecover:!0,strictMode:!1,enforcePosition:!0,requireContent:!0};return{"chat.message":async(i,r)=>{if(!n.enabled)return;let{sessionID:a}=i,s=cl(r.parts);if(!s.includes("<thinking>")&&!s.includes("</thinking>"))return;let o=ll(s,n);if(o.hasErrors){let c=sl(a);if(c.errorCount++,c.lastErrorTime=Date.now(),c.history.push({timestamp:Date.now(),errors:o.errors}),w){console.log(`[thinking-block-validator] Detected ${o.errors.length} thinking block validation error(s) in session ${a}`);for(let l of o.errors)if(console.log(`[thinking-block-validator] [${l.type}] Line ${l.line}: ${l.message}`),console.log(`[thinking-block-validator] Suggestion: ${l.suggestion}`),l.recovered)console.log("[thinking-block-validator] ✓ Auto-recovery applied")}if(n.autoRecover&&o.recovered){let l=dl(s,o.errors);if(w)console.log("[thinking-block-validator] [session recovered - continuing previous task]"),console.log(`[thinking-block-validator] Recovered text length: ${l.length} (original: ${s.length})`)}if(n.strictMode&&!o.recovered)console.error("[thinking-block-validator] CRITICAL: Validation failed in strict mode. Please fix the thinking block structure before continuing.")}}}}var qt={todo:[/TODO:/i,/@todo/i,/\[TODO\]/i,/待办/i,/할 일/i,/待辦/i],fixme:[/FIXME:/i,/@fixme/i,/\[FIXME\]/i,/修复/i,/수정/i,/修正/i],xxx:[/XXX:/i,/@xxx/i,/\[XXX\]/i],hack:[/HACK:/i,/@hack/i,/\[HACK\]/i],note:[/NOTE:/i,/@note/i,/\[NOTE\]/i,/注意/i,/참고/i,/註記/i],bug:[/BUG:/i,/@bug/i,/\[BUG\]/i],warning:[/WARNING:/i,/@warning/i,/\[WARNING\]/i,/경고/i],optimization:[/OPTIMIZE:/i,/PERFORMANCE:/i,/@optimize/i],refactoring:[/REFACTOR:/i,/@refactor/i],documentation:[/DOC:/i,/@doc/i]},Qr={bdd:[/^\s*#\s*Given\s+/i,/^\s*#\s*When\s+/i,/^\s*#\s*Then\s+/i,/^\s*#\s*And\s+/i,/^\s*#\s*But\s+/i,/^\s*\/\/\s*Given\s+/i,/^\s*\/\/\s*When\s+/i,/^\s*\/\/\s*Then\s+/i,/^\s*\/\/\s*And\s+/i],linter:[/^\s*#\s*noqa/i,/^\s*\/\/\s*@ts-ignore\b/i,/^\s*\/\/\s*@ts-nocheck\b/i,/^\s*\/\/\s*@ts-check\b/i,/^\s*\/\/\s*eslint-disable\b/i,/^\s*\/\/\s*eslint-enable\b/i,/^\s*\/\/\s*eslint-disable-next-line\b/i,/^\s*\/\*\s*eslint-disable\b/i,/^\s*\/\*\s*eslint-enable\b/i,/^\s*#\s*type:\s*ignore\b/i,/^\s*#\s*pylint:\s*disable\b/i,/^\s*#\s*mypy:\s*ignore\b/i],shebang:[/^#!\/bin\//,/^#!\/usr\/bin\/env\s+/],copyright:[/Copyright\s+\(c\)/i,/Copyright\s+\d{4}/i,/SPDX-License-Identifier:/i,/MIT License/i,/Apache License/i,/GPL License/i,/BSD License/i],fileHeader:[/^\s*File:\s+.*\.md/i,/^\s*Author:/i,/^\s*Date:\s*\d{4}-\d{2}-\d{2}/i,/^\s*Created:/i,/^\s*Modified:/i],documentation:[/^\s*\/\*\*[\s\S]*?\*\//,/^\s*\/\*\*[\s\S]*?@param/i,/^\s*\/\*\*[\s\S]*?@return/i,/^\s*\/\/\/[\s\S]*?@brief/i,/^\s*\/\/\/[\s\S]*?@param/i,/^\s*\/\*\*[\s\S]*?@brief/i,/^\s*#\s+@param/i,/^\s*#\s+@return/i,/^\s*#\s+@type/i],inlineDocs:[/^\s*\/\/\s*[A-Z]/,/^\s*#\s*[A-Z]/],imports:[/^\s*import\s+/,/^\s*require\s*\(/,/^\s*#\s*include\s+/,/^\s*using\s+namespace/]},Zr={javascript:{single:["//"],multi:["/*","*/"],shebang:["#!/usr/bin/env node","#!/usr/bin/nodejs"]},typescript:{single:["//"],multi:["/*","*/"],shebang:["#!/usr/bin/env node","#!/usr/bin/ts-node"]},python:{single:["#"],multi:['"""','"""'],shebang:["#!/usr/bin/env python3","#!/usr/bin/python3"]},rust:{single:["//"],multi:["/*","*/"],shebang:["#!/usr/bin/env rust-script"]},go:{single:["//"],multi:["/*","*/"]},java:{single:["//"],multi:["/*","*/"]},cpp:{single:["//"],multi:["/*","*/"]},csharp:{single:["//"],multi:["/*","*/"]},ruby:{single:["#"],multi:["=begin","=end"]},php:{single:["//","#"],multi:["/*","*/"],shebang:["#!/usr/bin/env php"]},swift:{single:["//"],multi:["/*","*/"]},kotlin:{single:["//"],multi:["/*","*/"]},scala:{single:["//"],multi:["/*","*/"]},shell:{single:["#"],multi:["<<'","'"],shebang:["#!/bin/bash","#!/bin/sh","#!/usr/bin/env bash"]},powershell:{single:["#"],multi:["<#","#>"],shebang:["#!/usr/bin/env pwsh"]},lua:{single:["--"],multi:["--[[","]]"]},sql:{single:["--"],multi:["/*","*/"]},html:{multi:["<!--","-->"]},css:{multi:["/*","*/"]},yaml:{single:["#"]},toml:{single:["#"]},json:{none:[]},xml:{multi:["<!--","-->"]},r:{single:["#"]},matlab:{single:["%"],multi:["%{","%}"]},fortran:{single:["!"],multi:["/*","*/"]},cobol:{single:["*"]},assembly:{single:[";"]}};function eo(e){let t=e.split(".").pop()?.toLowerCase();return t?{js:"javascript",jsx:"javascript",ts:"typescript",tsx:"typescript",py:"python",rs:"rust",go:"go",java:"java",cpp:"cpp",cxx:"cpp",cc:"cpp",c:"cpp",cs:"csharp",rb:"ruby",php:"php",swift:"swift",kt:"kotlin",scala:"scala",sh:"shell",bash:"shell",zsh:"shell",fish:"shell",ps1:"powershell",psm1:"powershell",lua:"lua",sql:"sql",html:"html",css:"css",scss:"css",yaml:"yaml",yml:"yaml",toml:"toml",json:"json",xml:"xml",r:"r",m:"matlab",f:"fortran",f90:"fortran",f95:"fortran",cbl:"cobol",cob:"cobol",asm:"assembly",s:"assembly"}[t]??null:null}x();function ul(e){return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
1814
+ `).trim()}function to(e){let t=e.trim();for(let[n,i]of Object.entries(Qr))for(let r of i)if(r.test(t))return!0;return!1}function pl(e){let t=[],n=/(?:^|\n)Writing to (.+?)\n/g,i=[...e.matchAll(n)];for(let r of i){let a=r[1],s=r.index+r[0].length,o=e.length,c=e.substring(s).match(/\nWriting to .+?\n/);if(c)o=s+c.index;let l=e.substring(s,o).trim();t.push({filename:a,content:l})}return t}function ml(e,t){let n=[],i=e.split(`
1815
+ `),r=eo(t),a=r?Zr[r]:null,s=!1,o=0;for(let c=0;c<i.length;c++){let l=i[c],u=l.trim();if(a&&"multi"in a&&a.multi.length>0){if(u.startsWith(a.multi[0])||s){if(!s)s=!0,o=c;if(u.endsWith(a.multi[1]))s=!1;continue}}if(a&&"shebang"in a&&Array.isArray(a.shebang)&&a.shebang.length>0){if(l.startsWith(a.shebang[0]))continue}let p=!1;if(a&&"single"in a)p=a.single.some((m)=>u.startsWith(m));if(!p){if(u.startsWith("//")||u.startsWith("#"))p=!0}if(p){for(let[m,g]of Object.entries(qt))for(let f of g)if(f.test(u)){let b=to(u);n.push({type:m,line:c+1,text:u,isException:b})}}}return n}function no(e,t){let n=t?.config??{enabled:!0,checkAfterToolUse:!0,requireJustification:!1};return{"chat.message":async(i,r)=>{if(!n.enabled)return;let a=ul(r.parts),s=[],o=a.split(`
1816
+ `);for(let[c,l]of Object.entries(qt))o.forEach((u,p)=>{for(let m of l)if(m.test(u)){if(!to(u))s.push({type:c,line:p+1,text:u.trim()})}});if(s.length>0&&w)console.log(`[comment-checker] Found ${s.length} annotated comments that need justification`)},"tool.execute.after":async(i,r)=>{if(!n.enabled||!n.checkAfterToolUse)return;if(!r.output)return;let{tool:a}=i;if(!["write","edit","multiEdit"].includes(a))return;let o=typeof r.output==="string"?r.output:JSON.stringify(r.output),c=pl(o),l=[];for(let{filename:u,content:p}of c){let g=ml(p,u).filter((f)=>!f.isException);if(g.length>0){if(l.push({filename:u,comments:g}),w){console.log(`[comment-checker] File ${u}:`);for(let f of g)console.log(` Line ${f.line}: ${f.type} - ${f.text.substring(0,50)}`)}}}if(n.requireJustification&&l.length>0){let u=`
1817
1817
 
1818
1818
  ${"=".repeat(60)}
1819
1819
  COMMENT CHECKER: ${l.length} file(s) contain non-exception annotated comments (TODO, FIXME, etc.)
@@ -1827,13 +1827,13 @@ File: ${p}
1827
1827
  `}if(u+=`
1828
1828
  Please provide justification for each comment or remove them.
1829
1829
  ${"=".repeat(60)}
1830
- `,w)console.log(u)}}}}var Ke=x("memory-guard");function Wt(e,t){let n={enabled:t?.enabled??!0,warningThresholdMB:t?.warningThresholdMB??1024,criticalThresholdMB:t?.criticalThresholdMB??1536,killThresholdMB:t?.killThresholdMB??2048,checkInterval:t?.checkInterval??10};if(!n.enabled)return{};let i=0,r=[],a=50,s=()=>{let l=process.memoryUsage();return{rss:Math.round(l.rss/1024/1024),heapUsed:Math.round(l.heapUsed/1024/1024),external:Math.round(l.external/1024/1024),timestamp:Date.now()}},o=(l)=>{return`RSS: ${l.rss}MB | Heap: ${l.heapUsed}MB | External: ${l.external}MB`},c=()=>{if(r.length<2)return 0;let l=r.slice(-5),u=l[0],p=l[l.length-1];return Math.round((p.rss-u.rss)/u.rss*100)};return{"tool.execute.after":async(l,u)=>{try{if(i++,i%n.checkInterval!==0)return;let p=s();if(r.push(p),r.length>a)r=r.slice(-a);let m=c(),{rss:g}=p;if(g>n.warningThresholdMB&&g<n.criticalThresholdMB){if(Ke.warn(`Memory usage elevated: ${o(p)}`),m>20)Ke.warn(`Memory growing rapidly (+${m}% in last ${n.checkInterval} tools)`)}if(g>=n.criticalThresholdMB&&g<n.killThresholdMB){if(console.error(`[kraken-code:memory-guard] \uD83D\uDD34 CRITICAL: Memory at ${g}MB`),console.error("[kraken-code:memory-guard] Consider starting a new session soon"),globalThis.gc){Ke.debug("Attempting garbage collection..."),globalThis.gc();let f=s(),b=g-f.rss;if(b>50)Ke.debug(`GC freed ~${b}MB`)}}if(g>=n.killThresholdMB){console.error(`[kraken-code:memory-guard] \uD83D\uDC80 FATAL: Memory at ${g}MB exceeds kill threshold (${n.killThresholdMB}MB)`),console.error("[kraken-code:memory-guard] Emergency shutdown to prevent segfault");let f=l.sessionID||"unknown";console.error(`[kraken-code:memory-guard] Session: ${f}, Tools executed: ${i}`),setTimeout(()=>{process.exit(1)},100)}}catch(p){console.error("[kraken-code:memory-guard] Error in tool.execute.after:",p)}},event:async(l)=>{try{if(l?.type==="session.end"){let p=s();if(console.log(`[kraken-code:memory-guard] Session ended. Final memory: ${o(p)}`),r.length>2){let m=r[0].rss,f=p.rss-m,b=f>0?"↗️ increased":f<0?"↘️ decreased":"➡️ stable";console.log(`[kraken-code:memory-guard] Memory trend: ${b} by ${Math.abs(f)}MB during session`)}}}catch(u){console.error("[kraken-code:memory-guard] Error in event:",u)}}}}function Ht(e,t){let n={enabled:t?.enabled??!0,toolsBeforePause:t?.toolsBeforePause??15,pauseDurationMs:t?.pauseDurationMs??50,gcHintInterval:t?.gcHintInterval??5,highMemoryPauseMs:t?.highMemoryPauseMs??200,highMemoryThresholdMB:t?.highMemoryThresholdMB??1200};if(!n.enabled)return{};let i=0,r=0,a=()=>{return Math.round(process.memoryUsage().rss/1024/1024)},s=(o)=>{return new Promise((c)=>setTimeout(c,o))};return{"tool.execute.before":async(o)=>{try{if(i++,i%n.gcHintInterval===0){if(await s(1),globalThis.gc&&i%(n.gcHintInterval*4)===0)globalThis.gc()}if(i%n.toolsBeforePause===0){if(Date.now()-r>n.pauseDurationMs){let p=a(),m=p>n.highMemoryThresholdMB?n.highMemoryPauseMs:n.pauseDurationMs;if(p>n.highMemoryThresholdMB)console.warn(`[kraken-code:tool-throttle] High memory (${p}MB), pausing ${m}ms to allow cleanup`);await s(m),r=Date.now()}}if((o.tool||"")==="bash"&&i%3===0)await s(5)}catch(c){console.error("[kraken-code:tool-throttle] Error in tool.execute.before:",c)}},"tool.execute.after":async(o,c)=>{try{if((o.tool||"")==="bash"&&c?.output){let u=typeof c.output==="string"?c.output.length:JSON.stringify(c.output).length;if(u>500000){if(console.warn(`[kraken-code:tool-throttle] Large bash output (${Math.round(u/1024)}KB), truncating`),typeof c.output==="string")c.output=c.output.slice(0,1e5)+`
1830
+ `,w)console.log(u)}}}}x();var Je=S("memory-guard");function Kt(e,t){let n={enabled:t?.enabled??!0,warningThresholdMB:t?.warningThresholdMB??1024,criticalThresholdMB:t?.criticalThresholdMB??1536,killThresholdMB:t?.killThresholdMB??2048,checkInterval:t?.checkInterval??10};if(!n.enabled)return{};let i=0,r=[],a=50,s=()=>{let l=process.memoryUsage();return{rss:Math.round(l.rss/1024/1024),heapUsed:Math.round(l.heapUsed/1024/1024),external:Math.round(l.external/1024/1024),timestamp:Date.now()}},o=(l)=>{return`RSS: ${l.rss}MB | Heap: ${l.heapUsed}MB | External: ${l.external}MB`},c=()=>{if(r.length<2)return 0;let l=r.slice(-5),u=l[0],p=l[l.length-1];return Math.round((p.rss-u.rss)/u.rss*100)};return{"tool.execute.after":async(l,u)=>{try{if(i++,i%n.checkInterval!==0)return;let p=s();if(r.push(p),r.length>a)r=r.slice(-a);let m=c(),{rss:g}=p;if(g>n.warningThresholdMB&&g<n.criticalThresholdMB){if(Je.warn(`Memory usage elevated: ${o(p)}`),m>20)Je.warn(`Memory growing rapidly (+${m}% in last ${n.checkInterval} tools)`)}if(g>=n.criticalThresholdMB&&g<n.killThresholdMB){if(console.error(`[kraken-code:memory-guard] \uD83D\uDD34 CRITICAL: Memory at ${g}MB`),console.error("[kraken-code:memory-guard] Consider starting a new session soon"),globalThis.gc){Je.debug("Attempting garbage collection..."),globalThis.gc();let f=s(),b=g-f.rss;if(b>50)Je.debug(`GC freed ~${b}MB`)}}if(g>=n.killThresholdMB){console.error(`[kraken-code:memory-guard] \uD83D\uDC80 FATAL: Memory at ${g}MB exceeds kill threshold (${n.killThresholdMB}MB)`),console.error("[kraken-code:memory-guard] Emergency shutdown to prevent segfault");let f=l.sessionID||"unknown";console.error(`[kraken-code:memory-guard] Session: ${f}, Tools executed: ${i}`),setTimeout(()=>{process.exit(1)},100)}}catch(p){console.error("[kraken-code:memory-guard] Error in tool.execute.after:",p)}},event:async(l)=>{try{if(l?.type==="session.end"){let p=s();if(console.log(`[kraken-code:memory-guard] Session ended. Final memory: ${o(p)}`),r.length>2){let m=r[0].rss,f=p.rss-m,b=f>0?"↗️ increased":f<0?"↘️ decreased":"➡️ stable";console.log(`[kraken-code:memory-guard] Memory trend: ${b} by ${Math.abs(f)}MB during session`)}}}catch(u){console.error("[kraken-code:memory-guard] Error in event:",u)}}}}function Bt(e,t){let n={enabled:t?.enabled??!0,toolsBeforePause:t?.toolsBeforePause??15,pauseDurationMs:t?.pauseDurationMs??50,gcHintInterval:t?.gcHintInterval??5,highMemoryPauseMs:t?.highMemoryPauseMs??200,highMemoryThresholdMB:t?.highMemoryThresholdMB??1200};if(!n.enabled)return{};let i=0,r=0,a=()=>{return Math.round(process.memoryUsage().rss/1024/1024)},s=(o)=>{return new Promise((c)=>setTimeout(c,o))};return{"tool.execute.before":async(o)=>{try{if(i++,i%n.gcHintInterval===0){if(await s(1),globalThis.gc&&i%(n.gcHintInterval*4)===0)globalThis.gc()}if(i%n.toolsBeforePause===0){if(Date.now()-r>n.pauseDurationMs){let p=a(),m=p>n.highMemoryThresholdMB?n.highMemoryPauseMs:n.pauseDurationMs;if(p>n.highMemoryThresholdMB)console.warn(`[kraken-code:tool-throttle] High memory (${p}MB), pausing ${m}ms to allow cleanup`);await s(m),r=Date.now()}}if((o.tool||"")==="bash"&&i%3===0)await s(5)}catch(c){console.error("[kraken-code:tool-throttle] Error in tool.execute.before:",c)}},"tool.execute.after":async(o,c)=>{try{if((o.tool||"")==="bash"&&c?.output){let u=typeof c.output==="string"?c.output.length:JSON.stringify(c.output).length;if(u>500000){if(console.warn(`[kraken-code:tool-throttle] Large bash output (${Math.round(u/1024)}KB), truncating`),typeof c.output==="string")c.output=c.output.slice(0,1e5)+`
1831
1831
 
1832
- [Output truncated by kraken-code due to size - ${Math.round(u/1024)}KB exceeded 500KB limit]`}}}catch(l){console.error("[kraken-code:tool-throttle] Error in tool.execute.after:",l)}}}}var ee=x("session-lifecycle");function qt(e,t){let n={enabled:t?.enabled??!0,maxSessionDurationMinutes:t?.maxSessionDurationMinutes??45,maxToolsPerSession:t?.maxToolsPerSession??100,warningThresholdTools:t?.warningThresholdTools??0.7,warningThresholdMinutes:t?.warningThresholdMinutes??0.8};if(!n.enabled)return{};let i=new Map,r=(s)=>{if(!i.has(s))i.set(s,{startTime:Date.now(),toolCount:0,warningsIssued:new Set});return i.get(s)},a=(s)=>{let o=Math.floor(s/60000),c=Math.floor(s%60000/1000);return`${o}m ${c}s`};return{"tool.execute.before":async(s)=>{try{let o=s.sessionID;if(!o)return;let c=r(o);c.toolCount++;let l=Date.now()-c.startTime,u=l/60000,p=Math.floor(n.maxToolsPerSession*n.warningThresholdTools);if(c.toolCount===p){if(!c.warningsIssued.has("tools-70"))c.warningsIssued.add("tools-70"),ee.warn(`Session approaching tool limit (${c.toolCount}/${n.maxToolsPerSession})`),ee.warn("Consider starting a new session soon to prevent memory issues")}if(c.toolCount===n.maxToolsPerSession)console.error(`[kraken-code:session-lifecycle] \uD83D\uDD34 Session has reached tool limit (${n.maxToolsPerSession})`),console.error("[kraken-code:session-lifecycle] Memory leak risk is HIGH. Start a new session immediately.");let m=n.maxSessionDurationMinutes*n.warningThresholdMinutes;if(u>=m&&u<n.maxSessionDurationMinutes){if(!c.warningsIssued.has("duration-80")){c.warningsIssued.add("duration-80");let g=Math.round(n.maxSessionDurationMinutes-u);ee.warn(`Session running long (${Math.round(u)}m)`),ee.warn(`Recommend restart within ${g} minutes`),console.warn(`[kraken-code:session-lifecycle] Recommend restart within ${g} minutes`)}}if(u>=n.maxSessionDurationMinutes)console.error(`[kraken-code:session-lifecycle] ⏰ Session exceeded max duration (${n.maxSessionDurationMinutes}m)`),console.error(`[kraken-code:session-lifecycle] Current: ${Math.round(u)}m - Memory leak risk CRITICAL`);if(c.toolCount%25===0)ee.debug(`Session stats: ${c.toolCount} tools, ${a(l)} elapsed`)}catch(o){console.error("[kraken-code:session-lifecycle] Error in tool.execute.before:",o)}},event:async(s)=>{try{let o=s,c=o?.sessionID;if(o?.type==="session.start"&&c)r(c),ee.debug(`Session started - Limits: ${n.maxToolsPerSession} tools, ${n.maxSessionDurationMinutes}min`);if(o?.type==="session.end"&&c){let l=i.get(c);if(l){let u=Date.now()-l.startTime;ee.debug(`Session ended: ${l.toolCount} tools in ${a(u)}`),i.delete(c)}}}catch(o){console.error("[kraken-code:session-lifecycle] Error in event:",o)}}}}var Kt={enforceMinimumTestCases:!0,enforceCoverageThreshold:!0,requireApproval:!1,allowPartialImplementation:!1};function Ae(e,t,n=Kt){let i=[],r=[];if(!e.exists){if(t.requiredBeforeImplementation)i.push({type:"missing-test-cases",details:"No test plan exists for this feature",severity:"error"});return{valid:!1,violations:i,recommendations:r}}if(n.enforceMinimumTestCases){let s=e.testCases.length;if(s<t.minTestCases)i.push({type:"missing-test-cases",details:`Test plan has ${s} test cases, minimum required is ${t.minTestCases}`,severity:"error"}),r.push(`Add ${t.minTestCases-s} more test cases`)}if(n.enforceCoverageThreshold&&t.requireCoverageThreshold&&t.coverageThresholdPercent>0){if(e.coverageTarget===void 0)i.push({type:"insufficient-coverage",details:"Coverage target is not specified in test plan",severity:"warning"}),r.push(`Specify coverage target (min ${t.coverageThresholdPercent}%)`);else if(e.coverageTarget<t.coverageThresholdPercent)i.push({type:"insufficient-coverage",details:`Coverage target ${e.coverageTarget}% is below required ${t.coverageThresholdPercent}%`,severity:"error"}),r.push(`Increase coverage target to at least ${t.coverageThresholdPercent}%`)}if(n.requireApproval&&!e.approved)i.push({type:"missing-approval",details:"Test plan has not been approved",severity:"error"}),r.push("Request approval for the test plan");let a=new Set(e.testCases.map((s)=>s.category));if(!a.has("edge-case")&&n.enforceMinimumTestCases)r.push("Consider adding edge case tests for more comprehensive coverage");if(!a.has("error-path")&&n.enforceMinimumTestCases)r.push("Consider adding error path tests for error handling coverage");return{valid:i.filter((s)=>s.severity==="error").length===0,violations:i,recommendations:r}}function to(e){let t={totalTestCases:e.testCases.length,happyPathCases:0,edgeCaseCases:0,errorPathCases:0,integrationCases:0,coveragePercentage:e.coverageTarget,approvalStatus:e.approved?"approved":"pending"};if(!e.exists)return t.approvalStatus="none",t;for(let n of e.testCases)switch(n.category){case"happy-path":t.happyPathCases++;break;case"edge-case":t.edgeCaseCases++;break;case"error-path":t.errorPathCases++;break;case"integration":t.integrationCases++;break}return t}function no(e,t){if(!e.exists)return!t.requiredBeforeImplementation;return Ae(e,t,{enforceMinimumTestCases:!0,enforceCoverageThreshold:t.requireCoverageThreshold,requireApproval:!1,allowPartialImplementation:!1}).valid}var ul={};function pl(e){return![/\.test\.[jt]sx?$/,/\.spec\.[jt]sx?$/,/__tests__/,/\/test\//,/\/tests\//,/node_modules/,/\.md$/,/\.json$/].some((n)=>n.test(e))}function ml(e){return e.replace(/\.(ts|tsx|js|jsx)$/,"").replace(/\.test$|\.spec$/,"")}function gl(e){let t=ul[e];return t?{exists:!0,testCases:Array(t.testCases).fill({}),coverageTarget:t.coverageTarget,approved:t.approved}:{exists:!1,testCases:[],approved:!1}}function io(){return{"tool.execute.before":async(e,t)=>{let n=U();if(!n?.enabled)return;let i=e.tool;if(i!=="edit"&&i!=="write")return;let a=t?.filePath;if(!a||!pl(a))return;let s=n.testPlan;if(!s?.requiredBeforeImplementation)return;let o=ml(a),c=gl(o),l={minTestCases:s.minTestCases,requireCoverageThreshold:s.requireCoverageThreshold,coverageThresholdPercent:s.coverageThresholdPercent,requiredBeforeImplementation:s.requiredBeforeImplementation};if(!no(c,l)){let p=Ae(c,l).violations.map((m)=>m.details).join("; ");throw Error(`Blitzkrieg Test Plan Violation: ${p}. Please create a test plan for this feature before implementing. Use registerTestPlan('${o}', testCaseCount, coverageTarget, approved) to register a test plan.`)}}}}var fl={enforceWriteTestFirst:!0,forbidCodeWithoutTest:!0,allowRefactorWithoutTest:!0,enforceTestFirstSeverity:"block",forbidCodeWithoutTestSeverity:"block"};function Bt(e){return[/\.test\.[jt]sx?$/,/\.spec\.[jt]sx?$/,/\/__tests__\/.*\.[jt]sx?$/,/\/test\/[^\/]*\.[jt]sx?$/,/\/tests\/[^\/]*\.[jt]sx?$/].some((n)=>n.test(e))}function Jt(e){return![/\.test\.[jt]sx?$/,/\.spec\.[jt]sx?$/,/\/__tests__\//,/\/test\/[^\/]*\.[jt]sx?$/,/\/tests\/[^\/]*\.[jt]sx?$/,/node_modules/,/\/dist\//,/\/build\//].some((n)=>n.test(e))}function Yt(e,t){if(!t)return!1;let i=[/refactor/i,/extract/i,/restructure/i,/reorganize/i,/rename/i,/move.*function/i].some((a)=>a.test(e)),r=e.length>t.length*0.8&&e.length<t.length*1.5;return i&&r}function ro(e,t,n=fl,i){let r=[],a=[],s=Bt(e.filePath),o=Jt(e.filePath);if(s)return t.testsWritten.push(e),t.currentCompliance.testWrittenFirst=!0,t.currentCompliance.testFilePaths.push(e.filePath),{decision:"allow",reason:"Test file operations are always allowed",violations:[],suggestions:[]};if(!o)return{decision:"allow",reason:"Non-implementation file operations are not subject to TDD enforcement",violations:[],suggestions:[]};t.filesWritten.push(e),t.currentCompliance.implementationFilePaths.push(e.filePath);let c=Yt(e.content,i);if(t.currentCompliance.isRefactor=c,c&&n.allowRefactorWithoutTest)return{decision:"allow",reason:"Refactor operations are allowed without new tests when configured",violations:[],suggestions:[]};if(n.enforceWriteTestFirst&&!t.currentCompliance.testWrittenFirst)r.push({type:"test-not-first",file:e.filePath,severity:n.enforceTestFirstSeverity}),a.push("Write tests before implementing the feature (TDD test-first principle)");if(n.forbidCodeWithoutTest&&t.testsWritten.length===0)r.push({type:"code-without-test",file:e.filePath,severity:n.forbidCodeWithoutTestSeverity}),a.push("Write corresponding test files before implementation code");if(r.some((u)=>u.severity==="error"))return{decision:"block",reason:"TDD violation detected. See violation details for more information.",violations:r,suggestions:a};else if(r.length>0)return{decision:"warn",reason:"TDD best practice not followed. Consider the following suggestions.",violations:r,suggestions:a};return{decision:"allow",reason:"Operation is TDD-compliant",violations:[],suggestions:[]}}var Vt=new Map;function hl(e){if(!Vt.has(e))Vt.set(e,{sessionId:e,testsWritten:[],implementationFilesWritten:[]});return Vt.get(e)}async function yl(e){return}function oo(){return{"tool.execute.before":async(e,t)=>{let n=U();if(!n?.enabled)return;let{tool:i,sessionID:r}=e;if(i!=="edit"&&i!=="write")return;let a=t,s=a?.filePath;if(!s)return;let o=hl(r);if(Bt(s)){o.testsWritten.push(s);return}if(!Jt(s))return;let c=n.tddWorkflow,l={enforceWriteTestFirst:c.enforceWriteTestFirst,forbidCodeWithoutTest:c.forbidCodeWithoutTest,allowRefactorWithoutTest:c.allowRefactorWithoutTest,enforceTestFirstSeverity:"block",forbidCodeWithoutTestSeverity:"block"},u=await yl(s),p={filePath:s,operation:i,content:a?.content||"",timestamp:new Date().toISOString()},m=ro(p,{sessionId:r,startTime:new Date().toISOString(),filesWritten:o.implementationFilesWritten.map((g)=>({filePath:g,operation:"write",content:"",timestamp:new Date().toISOString()})),testsWritten:o.testsWritten.map((g)=>({filePath:g,operation:"write",content:"",timestamp:new Date().toISOString()})),currentCompliance:{testWrittenFirst:o.testsWritten.length>0,codeHasTest:!1,isRefactor:Yt(p.content,u),violations:[],testFilePaths:o.testsWritten,implementationFilePaths:o.implementationFilesWritten}},l,u);if(o.implementationFilesWritten.push(s),m.decision==="block"){let g=m.violations.map((f)=>`${f.type}: ${f.file}`).join("; ");throw Error(`Blitzkrieg TDD Violation: ${g}. ${m.reason}
1832
+ [Output truncated by kraken-code due to size - ${Math.round(u/1024)}KB exceeded 500KB limit]`}}}catch(l){console.error("[kraken-code:tool-throttle] Error in tool.execute.after:",l)}}}}x();var ne=S("session-lifecycle");function Jt(e,t){let n={enabled:t?.enabled??!0,maxSessionDurationMinutes:t?.maxSessionDurationMinutes??45,maxToolsPerSession:t?.maxToolsPerSession??100,warningThresholdTools:t?.warningThresholdTools??0.7,warningThresholdMinutes:t?.warningThresholdMinutes??0.8};if(!n.enabled)return{};let i=new Map,r=(s)=>{if(!i.has(s))i.set(s,{startTime:Date.now(),toolCount:0,warningsIssued:new Set});return i.get(s)},a=(s)=>{let o=Math.floor(s/60000),c=Math.floor(s%60000/1000);return`${o}m ${c}s`};return{"tool.execute.before":async(s)=>{try{let o=s.sessionID;if(!o)return;let c=r(o);c.toolCount++;let l=Date.now()-c.startTime,u=l/60000,p=Math.floor(n.maxToolsPerSession*n.warningThresholdTools);if(c.toolCount===p){if(!c.warningsIssued.has("tools-70"))c.warningsIssued.add("tools-70"),ne.warn(`Session approaching tool limit (${c.toolCount}/${n.maxToolsPerSession})`),ne.warn("Consider starting a new session soon to prevent memory issues")}if(c.toolCount===n.maxToolsPerSession)console.error(`[kraken-code:session-lifecycle] \uD83D\uDD34 Session has reached tool limit (${n.maxToolsPerSession})`),console.error("[kraken-code:session-lifecycle] Memory leak risk is HIGH. Start a new session immediately.");let m=n.maxSessionDurationMinutes*n.warningThresholdMinutes;if(u>=m&&u<n.maxSessionDurationMinutes){if(!c.warningsIssued.has("duration-80")){c.warningsIssued.add("duration-80");let g=Math.round(n.maxSessionDurationMinutes-u);ne.warn(`Session running long (${Math.round(u)}m)`),ne.warn(`Recommend restart within ${g} minutes`),console.warn(`[kraken-code:session-lifecycle] Recommend restart within ${g} minutes`)}}if(u>=n.maxSessionDurationMinutes)console.error(`[kraken-code:session-lifecycle] ⏰ Session exceeded max duration (${n.maxSessionDurationMinutes}m)`),console.error(`[kraken-code:session-lifecycle] Current: ${Math.round(u)}m - Memory leak risk CRITICAL`);if(c.toolCount%25===0)ne.debug(`Session stats: ${c.toolCount} tools, ${a(l)} elapsed`)}catch(o){console.error("[kraken-code:session-lifecycle] Error in tool.execute.before:",o)}},event:async(s)=>{try{let o=s,c=o?.sessionID;if(o?.type==="session.start"&&c)r(c),ne.debug(`Session started - Limits: ${n.maxToolsPerSession} tools, ${n.maxSessionDurationMinutes}min`);if(o?.type==="session.end"&&c){let l=i.get(c);if(l){let u=Date.now()-l.startTime;ne.debug(`Session ended: ${l.toolCount} tools in ${a(u)}`),i.delete(c)}}}catch(o){console.error("[kraken-code:session-lifecycle] Error in event:",o)}}}}var Yt={enforceMinimumTestCases:!0,enforceCoverageThreshold:!0,requireApproval:!1,allowPartialImplementation:!1};function ke(e,t,n=Yt){let i=[],r=[];if(!e.exists){if(t.requiredBeforeImplementation)i.push({type:"missing-test-cases",details:"No test plan exists for this feature",severity:"error"});return{valid:!1,violations:i,recommendations:r}}if(n.enforceMinimumTestCases){let s=e.testCases.length;if(s<t.minTestCases)i.push({type:"missing-test-cases",details:`Test plan has ${s} test cases, minimum required is ${t.minTestCases}`,severity:"error"}),r.push(`Add ${t.minTestCases-s} more test cases`)}if(n.enforceCoverageThreshold&&t.requireCoverageThreshold&&t.coverageThresholdPercent>0){if(e.coverageTarget===void 0)i.push({type:"insufficient-coverage",details:"Coverage target is not specified in test plan",severity:"warning"}),r.push(`Specify coverage target (min ${t.coverageThresholdPercent}%)`);else if(e.coverageTarget<t.coverageThresholdPercent)i.push({type:"insufficient-coverage",details:`Coverage target ${e.coverageTarget}% is below required ${t.coverageThresholdPercent}%`,severity:"error"}),r.push(`Increase coverage target to at least ${t.coverageThresholdPercent}%`)}if(n.requireApproval&&!e.approved)i.push({type:"missing-approval",details:"Test plan has not been approved",severity:"error"}),r.push("Request approval for the test plan");let a=new Set(e.testCases.map((s)=>s.category));if(!a.has("edge-case")&&n.enforceMinimumTestCases)r.push("Consider adding edge case tests for more comprehensive coverage");if(!a.has("error-path")&&n.enforceMinimumTestCases)r.push("Consider adding error path tests for error handling coverage");return{valid:i.filter((s)=>s.severity==="error").length===0,violations:i,recommendations:r}}function io(e){let t={totalTestCases:e.testCases.length,happyPathCases:0,edgeCaseCases:0,errorPathCases:0,integrationCases:0,coveragePercentage:e.coverageTarget,approvalStatus:e.approved?"approved":"pending"};if(!e.exists)return t.approvalStatus="none",t;for(let n of e.testCases)switch(n.category){case"happy-path":t.happyPathCases++;break;case"edge-case":t.edgeCaseCases++;break;case"error-path":t.errorPathCases++;break;case"integration":t.integrationCases++;break}return t}function ro(e,t){if(!e.exists)return!t.requiredBeforeImplementation;return ke(e,t,{enforceMinimumTestCases:!0,enforceCoverageThreshold:t.requireCoverageThreshold,requireApproval:!1,allowPartialImplementation:!1}).valid}var gl={};function fl(e){return![/\.test\.[jt]sx?$/,/\.spec\.[jt]sx?$/,/__tests__/,/\/test\//,/\/tests\//,/node_modules/,/\.md$/,/\.json$/].some((n)=>n.test(e))}function hl(e){return e.replace(/\.(ts|tsx|js|jsx)$/,"").replace(/\.test$|\.spec$/,"")}function yl(e){let t=gl[e];return t?{exists:!0,testCases:Array(t.testCases).fill({}),coverageTarget:t.coverageTarget,approved:t.approved}:{exists:!1,testCases:[],approved:!1}}function oo(){return{"tool.execute.before":async(e,t)=>{let n=H();if(!n?.enabled)return;let i=e.tool;if(i!=="edit"&&i!=="write")return;let a=t?.filePath;if(!a||!fl(a))return;let s=n.testPlan;if(!s?.requiredBeforeImplementation)return;let o=hl(a),c=yl(o),l={minTestCases:s.minTestCases,requireCoverageThreshold:s.requireCoverageThreshold,coverageThresholdPercent:s.coverageThresholdPercent,requiredBeforeImplementation:s.requiredBeforeImplementation};if(!ro(c,l)){let p=ke(c,l).violations.map((m)=>m.details).join("; ");throw Error(`Blitzkrieg Test Plan Violation: ${p}. Please create a test plan for this feature before implementing. Use registerTestPlan('${o}', testCaseCount, coverageTarget, approved) to register a test plan.`)}}}}var bl={enforceWriteTestFirst:!0,forbidCodeWithoutTest:!0,allowRefactorWithoutTest:!0,enforceTestFirstSeverity:"block",forbidCodeWithoutTestSeverity:"block"};function Vt(e){return[/\.test\.[jt]sx?$/,/\.spec\.[jt]sx?$/,/\/__tests__\/.*\.[jt]sx?$/,/\/test\/[^\/]*\.[jt]sx?$/,/\/tests\/[^\/]*\.[jt]sx?$/].some((n)=>n.test(e))}function zt(e){return![/\.test\.[jt]sx?$/,/\.spec\.[jt]sx?$/,/\/__tests__\//,/\/test\/[^\/]*\.[jt]sx?$/,/\/tests\/[^\/]*\.[jt]sx?$/,/node_modules/,/\/dist\//,/\/build\//].some((n)=>n.test(e))}function Gt(e,t){if(!t)return!1;let i=[/refactor/i,/extract/i,/restructure/i,/reorganize/i,/rename/i,/move.*function/i].some((a)=>a.test(e)),r=e.length>t.length*0.8&&e.length<t.length*1.5;return i&&r}function ao(e,t,n=bl,i){let r=[],a=[],s=Vt(e.filePath),o=zt(e.filePath);if(s)return t.testsWritten.push(e),t.currentCompliance.testWrittenFirst=!0,t.currentCompliance.testFilePaths.push(e.filePath),{decision:"allow",reason:"Test file operations are always allowed",violations:[],suggestions:[]};if(!o)return{decision:"allow",reason:"Non-implementation file operations are not subject to TDD enforcement",violations:[],suggestions:[]};t.filesWritten.push(e),t.currentCompliance.implementationFilePaths.push(e.filePath);let c=Gt(e.content,i);if(t.currentCompliance.isRefactor=c,c&&n.allowRefactorWithoutTest)return{decision:"allow",reason:"Refactor operations are allowed without new tests when configured",violations:[],suggestions:[]};if(n.enforceWriteTestFirst&&!t.currentCompliance.testWrittenFirst)r.push({type:"test-not-first",file:e.filePath,severity:n.enforceTestFirstSeverity}),a.push("Write tests before implementing the feature (TDD test-first principle)");if(n.forbidCodeWithoutTest&&t.testsWritten.length===0)r.push({type:"code-without-test",file:e.filePath,severity:n.forbidCodeWithoutTestSeverity}),a.push("Write corresponding test files before implementation code");if(r.some((u)=>u.severity==="error"))return{decision:"block",reason:"TDD violation detected. See violation details for more information.",violations:r,suggestions:a};else if(r.length>0)return{decision:"warn",reason:"TDD best practice not followed. Consider the following suggestions.",violations:r,suggestions:a};return{decision:"allow",reason:"Operation is TDD-compliant",violations:[],suggestions:[]}}var Xt=new Map;function wl(e){if(!Xt.has(e))Xt.set(e,{sessionId:e,testsWritten:[],implementationFilesWritten:[]});return Xt.get(e)}async function Sl(e){return}function so(){return{"tool.execute.before":async(e,t)=>{let n=H();if(!n?.enabled)return;let{tool:i,sessionID:r}=e;if(i!=="edit"&&i!=="write")return;let a=t,s=a?.filePath;if(!s)return;let o=wl(r);if(Vt(s)){o.testsWritten.push(s);return}if(!zt(s))return;let c=n.tddWorkflow,l={enforceWriteTestFirst:c.enforceWriteTestFirst,forbidCodeWithoutTest:c.forbidCodeWithoutTest,allowRefactorWithoutTest:c.allowRefactorWithoutTest,enforceTestFirstSeverity:"block",forbidCodeWithoutTestSeverity:"block"},u=await Sl(s),p={filePath:s,operation:i,content:a?.content||"",timestamp:new Date().toISOString()},m=ao(p,{sessionId:r,startTime:new Date().toISOString(),filesWritten:o.implementationFilesWritten.map((g)=>({filePath:g,operation:"write",content:"",timestamp:new Date().toISOString()})),testsWritten:o.testsWritten.map((g)=>({filePath:g,operation:"write",content:"",timestamp:new Date().toISOString()})),currentCompliance:{testWrittenFirst:o.testsWritten.length>0,codeHasTest:!1,isRefactor:Gt(p.content,u),violations:[],testFilePaths:o.testsWritten,implementationFilePaths:o.implementationFilesWritten}},l,u);if(o.implementationFilesWritten.push(s),m.decision==="block"){let g=m.violations.map((f)=>`${f.type}: ${f.file}`).join("; ");throw Error(`Blitzkrieg TDD Violation: ${g}. ${m.reason}
1833
1833
 
1834
1834
  Suggestions:
1835
1835
  ${m.suggestions.map((f)=>` - ${f}`).join(`
1836
- `)}`)}if(m.decision==="warn"&&m.violations.length>0);},"tool.execute.after":async(e)=>{let t=e.sessionID}}}var ao={strictMode:!1,ignoreWarnings:!1,coverageThreshold:80,minAssertions:1,minEdgeCases:1};class so{parse(e,t){let n=this.parseErrors(e),i=this.countWarnings(e);return{success:t===0,exitCode:t,output:e,errors:n,warnings:i}}parseErrors(e){let t=[],n=/(.+?):(\d+):(\d+)\s*[-–]\s*(error|warning)\s*(TS\d+|ESLint)\s*:\s*(.+)/g,i;while((i=n.exec(e))!==null)t.push({file:i[1],line:parseInt(i[2],10),column:parseInt(i[3],10),message:i[6],code:i[5],severity:i[4]==="error"?"error":"warning"});let r=/File "(.+?)", line (\d+), in .+?(.+)/g;while((i=r.exec(e))!==null)if(!t.some((s)=>s.file===i[1]&&s.line===parseInt(i[2],10)))t.push({file:i[1],line:parseInt(i[2],10),message:i[3].trim(),code:"PythonError",severity:"error"});let a=/(error|Error|ERROR)[:\s]+(.+)/g;while((i=a.exec(e))!==null){let s=i[2].substring(0,50);if(!t.some((o)=>o.message.includes(s)))t.push({message:i[2].trim(),code:"GenericError",severity:"error"})}return t}countWarnings(e){let t=[/(warning|Warning|WARNING)[:\s]+/g,/warn[:\s]+/gi],n=0;for(let i of t){let r=e.match(i);if(r)n+=r.length}return n}}class co{parse(e){let t=this.countAssertions(e),n=this.identifyEdgeCases(e);return{testPath:this.extractTestPath(e),assertions:t,edgeCasesCovered:n.length,executionLog:e}}countAssertions(e){let t=[/\b(assert|expect|should|it\.only|test\.only)\s*\(/gi,/passes|failures/gi],n=0;for(let r of t){let a=e.match(r);if(a)n+=a.length}let i=e.match(/(\d+)\s+(?:passes|fail|tests?)/i);if(i){let r=parseInt(i[1],10);if(r>n)n=r}return n}identifyEdgeCases(e){let t=[/null/i,/undefined/i,/empty/gi,/zero/gi,/negative/i,/overflow/i,/underflow/i,/async|await/gi,/error|exception/gi,/timeout/i,/boundary/i,/edge/gi],n=[];for(let i of t)if(i.test(e)){let r=i.source.replace(/^\^?|\\b|\\/gi,"").substring(0,30);if(!n.includes(r))n.push(r)}return n}extractTestPath(e){let t=[/Running\s+(.+?test.+\.(?:ts|js|py))/i,/Test\s+Files.*[\n\r]+.*(.+\.(?:test|spec)\.[jt]sx?)/i];for(let n of t){let i=e.match(n);if(i)return i[1]}return""}}class lo{parse(e,t){let n=this.parseCoveragePercentages(e);return{statementCoverage:n.statement,branchCoverage:n.branch,functionCoverage:n.function,lineCoverage:n.line,coverageOutput:e,meetsThreshold:this.checkThreshold(n,t)}}parseCoveragePercentages(e){let t={statement:0,branch:0,function:0,line:0},n=[[/Statements?\s*[:\s]+(\d+(?:\.\d+)?)%/i,"statement"],[/Branches?\s*[:\s]+(\d+(?:\.\d+)?)%/i,"branch"],[/Functions?\s*[:\s]+(\d+(?:\.\d+)?)%/i,"function"],[/Lines?\s*[:\s]+(\d+(?:\.\d+)?)%/i,"line"],[/coverage:\s+(\d+(?:\.\d+)?)%/i,"statement"]];for(let[i,r]of n){let a=e.match(i);if(a)t[r]=parseFloat(a[1])}return t}checkThreshold(e,t){let i=[e.statement,e.branch,e.function,e.line].filter((a)=>a>0);if(i.length===0)return!1;return i.reduce((a,s)=>a+s,0)/i.length>=t}}class bl{buildParser=new so;testParser=new co;coverageParser=new lo;verify(e,t,n,i,r,a=ao){let s=this.collectEvidence(e,t,n,i,a.coverageThreshold),o=[],c=[];this.checkBuildEvidence(s.buildEvidence,o,c),this.checkTestEvidence(s.testEvidence,r,o,c,a),this.checkCoverageEvidence(s.coverageEvidence,r,o,c,a);let l=this.generateSummary(s,o,c);return{compliant:!o.some((m)=>m.severity==="error")&&!l.failedTests,evidence:s,violations:o,warnings:c,summary:l}}collectEvidence(e,t,n,i,r){let a=this.buildParser.parse(e,t),s=this.testParser.parse(n),o=this.coverageParser.parse(i,r);return{buildEvidence:a,testEvidence:s,coverageEvidence:o,timestamp:new Date().toISOString()}}checkBuildEvidence(e,t,n){if(!e.success)t.push({type:"build-failed",message:`Build failed with exit code ${e.exitCode}`,severity:"error",details:{exitCode:e.exitCode,errorCount:e.errors.length}});else if(e.warnings>0)n.push({type:"build-warnings",message:`Build completed with ${e.warnings} warning(s)`,suggestion:"Review warnings and fix if necessary"})}checkTestEvidence(e,t,n,i,r){if(t.requireTestExecutionEvidence&&e.executionLog===void 0)n.push({type:"no-test-execution",message:"No test execution evidence found",severity:"error"});if(t.requireAssertionEvidence&&e.assertions<r.minAssertions)n.push({type:"no-assertions",message:`Insufficient assertions: found ${e.assertions}, minimum required is ${r.minAssertions}`,severity:"error",details:{actual:e.assertions,required:r.minAssertions}});if(t.requireEdgeCaseEvidence&&e.edgeCasesCovered<r.minEdgeCases)n.push({type:"no-edge-cases",message:`No edge cases covered: minimum required is ${r.minEdgeCases}`,severity:"error",details:{actual:e.edgeCasesCovered,required:r.minEdgeCases}})}checkCoverageEvidence(e,t,n,i,r){if(!e.coverageOutput){i.push({type:"missing-coverage-data",message:"No coverage data found",suggestion:"Run tests with coverage to get coverage metrics"});return}if(t.requireEdgeCaseEvidence&&e.statementCoverage<r.coverageThreshold)if(r.strictMode)n.push({type:"insufficient-coverage",message:`Coverage ${e.statementCoverage.toFixed(1)}% below threshold ${r.coverageThreshold}%`,severity:"error",details:{statement:e.statementCoverage,branch:e.branchCoverage,function:e.functionCoverage,line:e.lineCoverage,threshold:r.coverageThreshold}});else i.push({type:"low-coverage",message:`Coverage ${e.statementCoverage.toFixed(1)}% is below optimal threshold ${r.coverageThreshold}%`,suggestion:"Consider adding more tests to improve coverage"})}generateSummary(e,t,n){let i=e.testEvidence.executionLog||"",r=i.match(/(\d+)\s+(?:passes?|passed|success)/i),a=i.match(/(\d+)\s+(?:failures?|failed)/i),s=i.match(/(\d+)\s+(?:skipped|pending)/i),o=(r?parseInt(r[1],10):0)+(a?parseInt(a[1],10):0)+(s?parseInt(s[1],10):0),c=r?parseInt(r[1],10):0,l=a?parseInt(a[1],10):0,u=s?parseInt(s[1],10):0,p=100;if(l>0)p-=l/o*100;if(e.coverageEvidence.statementCoverage>0)p=(p+e.coverageEvidence.statementCoverage)/2;return{totalTests:o,passedTests:c,failedTests:l,skippedTests:u,totalAssertions:e.testEvidence.assertions,passedAssertions:e.testEvidence.assertions,edgeCasesCovered:e.testEvidence.edgeCasesCovered,overallScore:Math.round(p*100)/100}}verifyWithTestPlan(e,t,n,i,r,a,s=ao){let o=this.verify(e,t,n,i,a.evidence,s),c=to(r),l=Ae(r,{minTestCases:a.testPlan.minTestCases,requireCoverageThreshold:a.testPlan.requireCoverageThreshold,coverageThresholdPercent:a.testPlan.coverageThresholdPercent,requiredBeforeImplementation:a.testPlan.requiredBeforeImplementation},Kt);if(!l.valid&&s.strictMode)for(let p of l.violations)o.violations.push({type:"missing-evidence",message:`Test Plan: ${p.details}`,severity:p.severity});o.summary={...o.summary,totalTests:c.totalTestCases+o.summary.totalTests};let u=o.violations.some((p)=>p.severity==="error");return o.compliant=!u&&o.summary.failedTests===0,o}}function zt(e=[]){return{testFilePaths:e,timestamp:new Date().toISOString()}}var xe={};function wl(e,t){if(!xe[e])xe[e]={testFilePaths:[]};let n=xe[e].evidence||zt();xe[e].evidence={...n,...t,testFilePaths:[...n.testFilePaths,...t.testFilePaths||[]]}}function uo(e){return e.sessionID||"default"}function Sl(e){return["todowrite","task","complete","done"].some((n)=>e.toLowerCase().includes(n))}function po(){return{"tool.execute.before":async(e,t)=>{let n=U();if(!n?.enabled)return;let i=e.tool;if(!Sl(i))return;let r=n.evidence;if(!r.requireTestExecutionEvidence&&!r.requireAssertionEvidence&&!r.requireEdgeCaseEvidence)return;let a=uo(e),s=xe[a];if(!s)throw Error(`Blitzkrieg Evidence Verification: No evidence registered for task "${a}". Please register test files and evidence before marking task complete.`);let o=s.evidence||zt()},"tool.execute.after":async(e,t)=>{if(!U()?.enabled)return;if(e.tool==="bash"){let a=t?.command;if(a&&Al(a)){let s=uo(e),o=t.output;if(o)wl(s,{testExecutionEvidence:o})}}}}}function Al(e){return[/npm\s+test/i,/yarn\s+test/i,/pnpm\s+test/i,/pytest/i,/jest/i,/mocha/i,/vitest/i,/karma/i,/cypress/i,/playwright/i,/test\s+--?/].some((n)=>n.test(e))}var mo={requireTestStep:!0,requireVerificationStep:!0,maxImplementationStepComplexity:3,enforceComplexitySeverity:"block",enforceStructureSeverity:"block"};function go(e,t,n,i=1,r=[]){return{id:e,description:t,type:n,complexity:Math.max(1,Math.min(10,i)),dependencies:r}}function fo(e){let t=e.toLowerCase(),n=["verify implementation","validate results","review code","approve","confirm","verify","validate","check","review"],i=["plan architecture","design solution","plan","design","architect","outline"],r=["test","spec","assert","mock","stub"];if(n.some((a)=>t.includes(a)))return"verification";if(i.some((a)=>t.includes(a)))return"planning";if(r.some((a)=>t.includes(a)))return"test";return"implementation"}function ho(e){let t=e.toLowerCase(),n=1,i={simple:1,basic:1,add:2,create:2,implement:2,modify:2,update:2,refactor:3,restructure:3,reorganize:3,integrate:4,complex:4,difficult:5,"multi-file":4,"cross-module":5,very:3,extremely:4};for(let[a,s]of Object.entries(i))if(t.includes(a))n=Math.max(n,s);let r=e.split(/\s+/).length;if(r>10)n+=1;if(r>20)n+=1;if(r>30)n+=1;return Math.min(10,n)}function Gt(e){switch(e){case"block":return"error";case"warn":return"warning";default:return"warning"}}function Xt(e,t=mo){let n=[],i=e.some((o)=>o.type==="test"),r=e.some((o)=>o.type==="verification"),a=e.filter((o)=>o.type==="implementation");if(t.requireTestStep&&a.length>0&&!i)n.push({type:"missing-test-step",taskId:"plan",severity:Gt(t.enforceStructureSeverity),message:"Plan contains implementation steps but no test step"});if(t.requireVerificationStep&&a.length>0&&!r)n.push({type:"missing-verification",taskId:"plan",severity:Gt(t.enforceStructureSeverity),message:"Plan contains implementation steps but no verification step"});let s=!0;for(let o of a)if(o.complexity>t.maxImplementationStepComplexity)n.push({type:"excessive-complexity",taskId:o.id,severity:Gt(t.enforceComplexitySeverity),message:`Step "${o.description}" has complexity ${o.complexity}, exceeding maximum of ${t.maxImplementationStepComplexity}`}),s=!1;return{hasTestStep:i,hasVerificationStep:r,complexityValid:s,violations:n}}function yo(e,t=mo){let n=Xt(e,t),i=[];if(!n.hasTestStep&&t.requireTestStep)i.push("Add test steps to verify the implementation works correctly");if(!n.hasVerificationStep&&t.requireVerificationStep)i.push("Add a verification step to ensure quality before completion");for(let s of n.violations)if(s.type==="excessive-complexity")i.push(`Break down complex step "${s.taskId}" into smaller, more manageable tasks`);let r=xl(e),a=kl(r);return{compliant:n.violations.filter((s)=>s.severity==="error").length===0,steps:e,violations:n.violations,suggestions:i,complexityScore:a}}function xl(e){let t={totalSteps:e.length,implementationSteps:0,testSteps:0,verificationSteps:0,planningSteps:0,averageComplexity:0,maxComplexity:0};if(e.length===0)return t;for(let i of e){switch(i.type){case"implementation":t.implementationSteps++;break;case"test":t.testSteps++;break;case"verification":t.verificationSteps++;break;case"planning":t.planningSteps++;break}t.maxComplexity=Math.max(t.maxComplexity,i.complexity)}let n=e.reduce((i,r)=>i+r.complexity,0);return t.averageComplexity=n/e.length,t}function kl(e){let t=100;if(e.averageComplexity>5)t-=(e.averageComplexity-5)*10;if(e.maxComplexity>7)t-=(e.maxComplexity-7)*5;let n=e.testSteps>0,i=e.verificationSteps>0,r=e.planningSteps>0;if(n)t+=5;if(i)t+=5;if(r)t+=5;return Math.max(0,Math.min(100,t))}var bo={};function Cl(e){delete bo[e]}function vl(e,t){if(e==="todowrite")return!0;if(e==="task")return!0;if(t?.prompt?.includes("plan"))return!0;return!1}function Pl(e){let t=e?.todos;if(!t||!Array.isArray(t))return[];return t.map((n)=>n.content||"")}function wo(){return{"tool.execute.before":async(e,t)=>{let n=U();if(!n?.enabled)return;let{tool:i,sessionID:r}=e;if(!vl(i,t))return;let a=n.plannerConstraints;if(!a.requireTestStep&&!a.requireVerificationStep)return;let o=Pl(t);if(o.length===0)return;let c=o.map((m,g)=>go(`${r}-step-${g}`,m,fo(m),ho(m)));bo[r]={steps:c};let l=Xt(c,{requireTestStep:a.requireTestStep,requireVerificationStep:a.requireVerificationStep,maxImplementationStepComplexity:a.maxImplementationStepComplexity,enforceComplexitySeverity:"block",enforceStructureSeverity:"block"}),u=l.violations.filter((m)=>m.severity==="error");if(u.length>0){let m=yo(c,{requireTestStep:a.requireTestStep,requireVerificationStep:a.requireVerificationStep,maxImplementationStepComplexity:a.maxImplementationStepComplexity,enforceComplexitySeverity:"block",enforceStructureSeverity:"block"}),g=u.map((b)=>`- [${b.severity}] ${b.type}: ${b.message}`).join(`
1836
+ `)}`)}if(m.decision==="warn"&&m.violations.length>0);},"tool.execute.after":async(e)=>{let t=e.sessionID}}}var co={strictMode:!1,ignoreWarnings:!1,coverageThreshold:80,minAssertions:1,minEdgeCases:1};class lo{parse(e,t){let n=this.parseErrors(e),i=this.countWarnings(e);return{success:t===0,exitCode:t,output:e,errors:n,warnings:i}}parseErrors(e){let t=[],n=/(.+?):(\d+):(\d+)\s*[-–]\s*(error|warning)\s*(TS\d+|ESLint)\s*:\s*(.+)/g,i;while((i=n.exec(e))!==null)t.push({file:i[1],line:parseInt(i[2],10),column:parseInt(i[3],10),message:i[6],code:i[5],severity:i[4]==="error"?"error":"warning"});let r=/File "(.+?)", line (\d+), in .+?(.+)/g;while((i=r.exec(e))!==null)if(!t.some((s)=>s.file===i[1]&&s.line===parseInt(i[2],10)))t.push({file:i[1],line:parseInt(i[2],10),message:i[3].trim(),code:"PythonError",severity:"error"});let a=/(error|Error|ERROR)[:\s]+(.+)/g;while((i=a.exec(e))!==null){let s=i[2].substring(0,50);if(!t.some((o)=>o.message.includes(s)))t.push({message:i[2].trim(),code:"GenericError",severity:"error"})}return t}countWarnings(e){let t=[/(warning|Warning|WARNING)[:\s]+/g,/warn[:\s]+/gi],n=0;for(let i of t){let r=e.match(i);if(r)n+=r.length}return n}}class uo{parse(e){let t=this.countAssertions(e),n=this.identifyEdgeCases(e);return{testPath:this.extractTestPath(e),assertions:t,edgeCasesCovered:n.length,executionLog:e}}countAssertions(e){let t=[/\b(assert|expect|should|it\.only|test\.only)\s*\(/gi,/passes|failures/gi],n=0;for(let r of t){let a=e.match(r);if(a)n+=a.length}let i=e.match(/(\d+)\s+(?:passes|fail|tests?)/i);if(i){let r=parseInt(i[1],10);if(r>n)n=r}return n}identifyEdgeCases(e){let t=[/null/i,/undefined/i,/empty/gi,/zero/gi,/negative/i,/overflow/i,/underflow/i,/async|await/gi,/error|exception/gi,/timeout/i,/boundary/i,/edge/gi],n=[];for(let i of t)if(i.test(e)){let r=i.source.replace(/^\^?|\\b|\\/gi,"").substring(0,30);if(!n.includes(r))n.push(r)}return n}extractTestPath(e){let t=[/Running\s+(.+?test.+\.(?:ts|js|py))/i,/Test\s+Files.*[\n\r]+.*(.+\.(?:test|spec)\.[jt]sx?)/i];for(let n of t){let i=e.match(n);if(i)return i[1]}return""}}class po{parse(e,t){let n=this.parseCoveragePercentages(e);return{statementCoverage:n.statement,branchCoverage:n.branch,functionCoverage:n.function,lineCoverage:n.line,coverageOutput:e,meetsThreshold:this.checkThreshold(n,t)}}parseCoveragePercentages(e){let t={statement:0,branch:0,function:0,line:0},n=[[/Statements?\s*[:\s]+(\d+(?:\.\d+)?)%/i,"statement"],[/Branches?\s*[:\s]+(\d+(?:\.\d+)?)%/i,"branch"],[/Functions?\s*[:\s]+(\d+(?:\.\d+)?)%/i,"function"],[/Lines?\s*[:\s]+(\d+(?:\.\d+)?)%/i,"line"],[/coverage:\s+(\d+(?:\.\d+)?)%/i,"statement"]];for(let[i,r]of n){let a=e.match(i);if(a)t[r]=parseFloat(a[1])}return t}checkThreshold(e,t){let i=[e.statement,e.branch,e.function,e.line].filter((a)=>a>0);if(i.length===0)return!1;return i.reduce((a,s)=>a+s,0)/i.length>=t}}class Al{buildParser=new lo;testParser=new uo;coverageParser=new po;verify(e,t,n,i,r,a=co){let s=this.collectEvidence(e,t,n,i,a.coverageThreshold),o=[],c=[];this.checkBuildEvidence(s.buildEvidence,o,c),this.checkTestEvidence(s.testEvidence,r,o,c,a),this.checkCoverageEvidence(s.coverageEvidence,r,o,c,a);let l=this.generateSummary(s,o,c);return{compliant:!o.some((m)=>m.severity==="error")&&!l.failedTests,evidence:s,violations:o,warnings:c,summary:l}}collectEvidence(e,t,n,i,r){let a=this.buildParser.parse(e,t),s=this.testParser.parse(n),o=this.coverageParser.parse(i,r);return{buildEvidence:a,testEvidence:s,coverageEvidence:o,timestamp:new Date().toISOString()}}checkBuildEvidence(e,t,n){if(!e.success)t.push({type:"build-failed",message:`Build failed with exit code ${e.exitCode}`,severity:"error",details:{exitCode:e.exitCode,errorCount:e.errors.length}});else if(e.warnings>0)n.push({type:"build-warnings",message:`Build completed with ${e.warnings} warning(s)`,suggestion:"Review warnings and fix if necessary"})}checkTestEvidence(e,t,n,i,r){if(t.requireTestExecutionEvidence&&e.executionLog===void 0)n.push({type:"no-test-execution",message:"No test execution evidence found",severity:"error"});if(t.requireAssertionEvidence&&e.assertions<r.minAssertions)n.push({type:"no-assertions",message:`Insufficient assertions: found ${e.assertions}, minimum required is ${r.minAssertions}`,severity:"error",details:{actual:e.assertions,required:r.minAssertions}});if(t.requireEdgeCaseEvidence&&e.edgeCasesCovered<r.minEdgeCases)n.push({type:"no-edge-cases",message:`No edge cases covered: minimum required is ${r.minEdgeCases}`,severity:"error",details:{actual:e.edgeCasesCovered,required:r.minEdgeCases}})}checkCoverageEvidence(e,t,n,i,r){if(!e.coverageOutput){i.push({type:"missing-coverage-data",message:"No coverage data found",suggestion:"Run tests with coverage to get coverage metrics"});return}if(t.requireEdgeCaseEvidence&&e.statementCoverage<r.coverageThreshold)if(r.strictMode)n.push({type:"insufficient-coverage",message:`Coverage ${e.statementCoverage.toFixed(1)}% below threshold ${r.coverageThreshold}%`,severity:"error",details:{statement:e.statementCoverage,branch:e.branchCoverage,function:e.functionCoverage,line:e.lineCoverage,threshold:r.coverageThreshold}});else i.push({type:"low-coverage",message:`Coverage ${e.statementCoverage.toFixed(1)}% is below optimal threshold ${r.coverageThreshold}%`,suggestion:"Consider adding more tests to improve coverage"})}generateSummary(e,t,n){let i=e.testEvidence.executionLog||"",r=i.match(/(\d+)\s+(?:passes?|passed|success)/i),a=i.match(/(\d+)\s+(?:failures?|failed)/i),s=i.match(/(\d+)\s+(?:skipped|pending)/i),o=(r?parseInt(r[1],10):0)+(a?parseInt(a[1],10):0)+(s?parseInt(s[1],10):0),c=r?parseInt(r[1],10):0,l=a?parseInt(a[1],10):0,u=s?parseInt(s[1],10):0,p=100;if(l>0)p-=l/o*100;if(e.coverageEvidence.statementCoverage>0)p=(p+e.coverageEvidence.statementCoverage)/2;return{totalTests:o,passedTests:c,failedTests:l,skippedTests:u,totalAssertions:e.testEvidence.assertions,passedAssertions:e.testEvidence.assertions,edgeCasesCovered:e.testEvidence.edgeCasesCovered,overallScore:Math.round(p*100)/100}}verifyWithTestPlan(e,t,n,i,r,a,s=co){let o=this.verify(e,t,n,i,a.evidence,s),c=io(r),l=ke(r,{minTestCases:a.testPlan.minTestCases,requireCoverageThreshold:a.testPlan.requireCoverageThreshold,coverageThresholdPercent:a.testPlan.coverageThresholdPercent,requiredBeforeImplementation:a.testPlan.requiredBeforeImplementation},Yt);if(!l.valid&&s.strictMode)for(let p of l.violations)o.violations.push({type:"missing-evidence",message:`Test Plan: ${p.details}`,severity:p.severity});o.summary={...o.summary,totalTests:c.totalTestCases+o.summary.totalTests};let u=o.violations.some((p)=>p.severity==="error");return o.compliant=!u&&o.summary.failedTests===0,o}}function Qt(e=[]){return{testFilePaths:e,timestamp:new Date().toISOString()}}var Ce={};function xl(e,t){if(!Ce[e])Ce[e]={testFilePaths:[]};let n=Ce[e].evidence||Qt();Ce[e].evidence={...n,...t,testFilePaths:[...n.testFilePaths,...t.testFilePaths||[]]}}function mo(e){return e.sessionID||"default"}function kl(e){return["todowrite","task","complete","done"].some((n)=>e.toLowerCase().includes(n))}function go(){return{"tool.execute.before":async(e,t)=>{let n=H();if(!n?.enabled)return;let i=e.tool;if(!kl(i))return;let r=n.evidence;if(!r.requireTestExecutionEvidence&&!r.requireAssertionEvidence&&!r.requireEdgeCaseEvidence)return;let a=mo(e),s=Ce[a];if(!s)throw Error(`Blitzkrieg Evidence Verification: No evidence registered for task "${a}". Please register test files and evidence before marking task complete.`);let o=s.evidence||Qt()},"tool.execute.after":async(e,t)=>{if(!H()?.enabled)return;if(e.tool==="bash"){let a=t?.command;if(a&&Cl(a)){let s=mo(e),o=t.output;if(o)xl(s,{testExecutionEvidence:o})}}}}}function Cl(e){return[/npm\s+test/i,/yarn\s+test/i,/pnpm\s+test/i,/pytest/i,/jest/i,/mocha/i,/vitest/i,/karma/i,/cypress/i,/playwright/i,/test\s+--?/].some((n)=>n.test(e))}var fo={requireTestStep:!0,requireVerificationStep:!0,maxImplementationStepComplexity:3,enforceComplexitySeverity:"block",enforceStructureSeverity:"block"};function ho(e,t,n,i=1,r=[]){return{id:e,description:t,type:n,complexity:Math.max(1,Math.min(10,i)),dependencies:r}}function yo(e){let t=e.toLowerCase(),n=["verify implementation","validate results","review code","approve","confirm","verify","validate","check","review"],i=["plan architecture","design solution","plan","design","architect","outline"],r=["test","spec","assert","mock","stub"];if(n.some((a)=>t.includes(a)))return"verification";if(i.some((a)=>t.includes(a)))return"planning";if(r.some((a)=>t.includes(a)))return"test";return"implementation"}function bo(e){let t=e.toLowerCase(),n=1,i={simple:1,basic:1,add:2,create:2,implement:2,modify:2,update:2,refactor:3,restructure:3,reorganize:3,integrate:4,complex:4,difficult:5,"multi-file":4,"cross-module":5,very:3,extremely:4};for(let[a,s]of Object.entries(i))if(t.includes(a))n=Math.max(n,s);let r=e.split(/\s+/).length;if(r>10)n+=1;if(r>20)n+=1;if(r>30)n+=1;return Math.min(10,n)}function Zt(e){switch(e){case"block":return"error";case"warn":return"warning";default:return"warning"}}function en(e,t=fo){let n=[],i=e.some((o)=>o.type==="test"),r=e.some((o)=>o.type==="verification"),a=e.filter((o)=>o.type==="implementation");if(t.requireTestStep&&a.length>0&&!i)n.push({type:"missing-test-step",taskId:"plan",severity:Zt(t.enforceStructureSeverity),message:"Plan contains implementation steps but no test step"});if(t.requireVerificationStep&&a.length>0&&!r)n.push({type:"missing-verification",taskId:"plan",severity:Zt(t.enforceStructureSeverity),message:"Plan contains implementation steps but no verification step"});let s=!0;for(let o of a)if(o.complexity>t.maxImplementationStepComplexity)n.push({type:"excessive-complexity",taskId:o.id,severity:Zt(t.enforceComplexitySeverity),message:`Step "${o.description}" has complexity ${o.complexity}, exceeding maximum of ${t.maxImplementationStepComplexity}`}),s=!1;return{hasTestStep:i,hasVerificationStep:r,complexityValid:s,violations:n}}function wo(e,t=fo){let n=en(e,t),i=[];if(!n.hasTestStep&&t.requireTestStep)i.push("Add test steps to verify the implementation works correctly");if(!n.hasVerificationStep&&t.requireVerificationStep)i.push("Add a verification step to ensure quality before completion");for(let s of n.violations)if(s.type==="excessive-complexity")i.push(`Break down complex step "${s.taskId}" into smaller, more manageable tasks`);let r=vl(e),a=Pl(r);return{compliant:n.violations.filter((s)=>s.severity==="error").length===0,steps:e,violations:n.violations,suggestions:i,complexityScore:a}}function vl(e){let t={totalSteps:e.length,implementationSteps:0,testSteps:0,verificationSteps:0,planningSteps:0,averageComplexity:0,maxComplexity:0};if(e.length===0)return t;for(let i of e){switch(i.type){case"implementation":t.implementationSteps++;break;case"test":t.testSteps++;break;case"verification":t.verificationSteps++;break;case"planning":t.planningSteps++;break}t.maxComplexity=Math.max(t.maxComplexity,i.complexity)}let n=e.reduce((i,r)=>i+r.complexity,0);return t.averageComplexity=n/e.length,t}function Pl(e){let t=100;if(e.averageComplexity>5)t-=(e.averageComplexity-5)*10;if(e.maxComplexity>7)t-=(e.maxComplexity-7)*5;let n=e.testSteps>0,i=e.verificationSteps>0,r=e.planningSteps>0;if(n)t+=5;if(i)t+=5;if(r)t+=5;return Math.max(0,Math.min(100,t))}var So={};function El(e){delete So[e]}function Tl(e,t){if(e==="todowrite")return!0;if(e==="task")return!0;if(t?.prompt?.includes("plan"))return!0;return!1}function Ml(e){let t=e?.todos;if(!t||!Array.isArray(t))return[];return t.map((n)=>n.content||"")}function Ao(){return{"tool.execute.before":async(e,t)=>{let n=H();if(!n?.enabled)return;let{tool:i,sessionID:r}=e;if(!Tl(i,t))return;let a=n.plannerConstraints;if(!a.requireTestStep&&!a.requireVerificationStep)return;let o=Ml(t);if(o.length===0)return;let c=o.map((m,g)=>ho(`${r}-step-${g}`,m,yo(m),bo(m)));So[r]={steps:c};let l=en(c,{requireTestStep:a.requireTestStep,requireVerificationStep:a.requireVerificationStep,maxImplementationStepComplexity:a.maxImplementationStepComplexity,enforceComplexitySeverity:"block",enforceStructureSeverity:"block"}),u=l.violations.filter((m)=>m.severity==="error");if(u.length>0){let m=wo(c,{requireTestStep:a.requireTestStep,requireVerificationStep:a.requireVerificationStep,maxImplementationStepComplexity:a.maxImplementationStepComplexity,enforceComplexitySeverity:"block",enforceStructureSeverity:"block"}),g=u.map((b)=>`- [${b.severity}] ${b.type}: ${b.message}`).join(`
1837
1837
  `),f=m.suggestions.map((b)=>`- ${b}`).join(`
1838
1838
  `);throw Error(`Blitzkrieg Planner Constraint Violation:
1839
1839
 
@@ -1841,8 +1841,8 @@ ${g}
1841
1841
 
1842
1842
  Suggestions:
1843
1843
  ${f}`)}let p=l.violations.filter((m)=>m.severity==="warning");if(p.length>0)return{messages:[{role:"system",content:p.map((g)=>`- [${g.severity}] ${g.type}: ${g.message}`).join(`
1844
- `)}]}},"tool.execute.after":async(e,t)=>{if(e.tool==="todowrite"){let r=t?.todos;if(r?.every((s)=>s.status==="completed"||s.status==="cancelled")&&r&&r.length>0){let s=e.sessionID;Cl(s)}}}}}import{tool as Ao}from"@opencode-ai/plugin";import{z as ke}from"zod";class So{initialized=new Map;connections=new Map;async initMCP(e,t){if(this.initialized.has(e)){let i=this.connections.get(e);if(i)return i}let n={config:t,tools:this.getAvailableToolsForMCP(e),initialized:!0};return this.initialized.set(e,!0),this.connections.set(e,n),n}async callTool(e,t,n){if(n.enabled===!1)throw Error(`MCP ${n.name||this.deriveNameFromUrl(n.url)} is disabled`);if(!n.url)throw Error("MCP config requires a URL");let i=n.name||this.deriveNameFromUrl(n.url);return await this.initMCP(i,n),{result:`Tool '${e}' called with args: ${JSON.stringify(t)}`,server:n.url}}deriveNameFromUrl(e){try{let n=new URL(e).hostname;if(n.includes("context7.com"))return"context7";if(n.includes("exa.ai"))return"websearch";if(n.includes("tavily.com"))return"websearch";if(n.includes("grep.app"))return"grep_app";if(n.includes("deepwiki.com"))return"deepwiki";if(n.includes("semgrep.ai"))return"semgrep";return n.replace(".com","").replace("mcp.","")}catch{return"unknown"}}getAvailableToolsForMCP(e){switch(e){case"websearch":return["search","fetch"];case"context7":return["search","get"];case"grep_app":return["search","get_file"];case"deepwiki":return["search"];case"semgrep":return["search"];case"sequential_thinking":return["think"];case"bridgemind":return["create","explore"];default:return[]}}async shutdownAll(){let e=[];for(let[t,n]of this.connections.entries())if(n.initialized)e.push(new Promise((i)=>{i()}));await Promise.all(e),this.initialized.clear(),this.connections.clear()}}var T=new So;function _(e){if((e?.provider||"exa")==="tavily"){let n=process.env.TAVILY_API_KEY;if(!n)return{type:"remote",url:"https://mcp.tavily.com/mcp/",enabled:!1,name:"websearch",oauth:!1};return{type:"remote",url:"https://mcp.tavily.com/mcp/",enabled:!0,headers:{Authorization:`Bearer ${n}`},oauth:!1}}return{type:"remote",url:"https://mcp.exa.ai/mcp?tools=web_search_exa",enabled:!0,headers:process.env.EXA_API_KEY?{"x-api-key":process.env.EXA_API_KEY}:void 0,oauth:!1}}var Qt=null;function Be(e){Qt=e}var xo=Ao({description:"Search the web using Exa AI (default) or Tavily. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{query:ke.string().min(1).describe("Search query for web search"),numResults:ke.number().optional().default(10).describe("Number of results to return (default: 10)")},async execute(e){try{let t=Qt||_();if(t.enabled===!1)return JSON.stringify({error:"Websearch disabled",details:"API key not configured"},null,2);let n=await T.callTool("search",e,t);return JSON.stringify(n,null,2)}catch(t){return JSON.stringify({error:"Websearch failed",details:t.message},null,2)}}}),ko=Ao({description:"Fetch and parse web content from a specific URL. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{url:ke.string().url().describe("URL to fetch content from"),format:ke.enum(["markdown","text","html"]).optional().default("markdown").describe("Output format (default: markdown)"),timeout:ke.number().optional().describe("Request timeout in milliseconds (default: 60000)")},async execute(e){try{let t=Qt||_();if(t.enabled===!1)return JSON.stringify({error:"Websearch disabled",details:"API key not configured"},null,2);let n=await T.callTool("fetch",e,t);return JSON.stringify(n,null,2)}catch(t){return JSON.stringify({error:"Webfetch failed",details:t.message},null,2)}}});import{tool as Co}from"@opencode-ai/plugin";import{z as de}from"zod";function El(){return{type:"remote",url:"https://mcp.context7.com/mcp",enabled:!0,headers:process.env.CONTEXT7_API_KEY?{Authorization:`Bearer ${process.env.CONTEXT7_API_KEY}`}:void 0,oauth:!1}}var Ce=El(),vo=Co({description:"Search official documentation using Context7. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{query:de.string().min(1).describe("Search query for documentation"),numResults:de.number().optional().default(5).describe("Number of results to return (default: 5)"),maxTokens:de.number().optional().describe("Maximum tokens for response (default: 5000)")},async execute(e){try{let t=await T.callTool("search",e,Ce);return JSON.stringify(t,null,2)}catch(t){return JSON.stringify({success:!1,error:t.message},null,2)}}}),Po=Co({description:"Fetch specific documentation page using Context7. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{library:de.string().describe("Library name (e.g., react, express)"),path:de.string().optional().describe("Documentation path (e.g., hooks/useState)"),version:de.string().optional().describe("Library version (default: latest)")},async execute(e){try{let t=await T.callTool("get",e,Ce);return JSON.stringify(t,null,2)}catch(t){return JSON.stringify({success:!1,error:t.message},null,2)}}});import{tool as Eo}from"@opencode-ai/plugin";import{z as K}from"zod";var ve={type:"remote",url:"https://mcp.grep.app",enabled:!0,headers:void 0,oauth:!1},To=Eo({description:"Search code across public GitHub repositories using grep.app. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{query:K.string().min(1).describe("Search query for code"),language:K.string().optional().describe("Filter by programming language (e.g., python, typescript, rust)"),maxResults:K.number().optional().default(10).describe("Maximum number of results to return (default: 10)"),page:K.number().optional().default(1).describe("Page number for pagination (default: 1)")},async execute(e){try{let t=await T.callTool("search",e,ve);return JSON.stringify(t,null,2)}catch(t){return JSON.stringify({error:"failed to search grep.app",details:String(t)},null,2)}}}),Mo=Eo({description:"Fetch file content from a GitHub repository using grep.app. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{owner:K.string().describe("Repository owner (e.g., facebook)"),repo:K.string().describe("Repository name (e.g., react)"),path:K.string().describe("File path (e.g., src/index.ts)"),ref:K.string().optional().describe("Git branch or commit ref (default: main)")},async execute(e){try{let t=await T.callTool("get_file",e,ve);return JSON.stringify(t,null,2)}catch(t){return JSON.stringify({error:"failed to get file from grep.app",details:String(t)},null,2)}}});var Zt={type:"remote",url:"https://mcp.deepwiki.com/mcp",enabled:!0,headers:process.env.DEEPWIKI_API_KEY?{"x-api-key":process.env.DEEPWIKI_API_KEY}:void 0,oauth:!1},en={type:"remote",url:"https://mcp.semgrep.ai/sse",enabled:!0,headers:process.env.SEMGREP_API_KEY?{"x-api-key":process.env.SEMGREP_API_KEY}:void 0,oauth:!1},tn={type:"remote",url:"https://remote-mcp-servers.org/sequential-thinking/mcp",enabled:!1,headers:void 0,oauth:!1},nn={type:"remote",url:"https://remote-mcp-servers.org/bridgemind/mcp",enabled:!1,headers:void 0,oauth:!1},Je={deepwiki:Zt,semgrep:en,sequential_thinking:tn,bridgemind:nn},Ye=["deepwiki","semgrep","sequential_thinking","bridgemind"];import{tool as Ve}from"@opencode-ai/plugin";import{z as B}from"zod";var Tl=Ve({description:"Search Wikipedia-like knowledge base using DeepWiki. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{query:B.string().min(1).describe("Search query for knowledge base")},async execute(e){try{let t=await T.callTool("search",e,Zt);return JSON.stringify(t,null,2)}catch(t){return JSON.stringify({error:"DeepWiki search failed",details:t.message},null,2)}}}),Ml=Ve({description:"Semantic code search using AI-powered grep via Semgrep. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{query:B.string().min(1).describe("Search query for semantic code search"),language:B.string().optional().describe("Filter by programming language")},async execute(e){try{let t=await T.callTool("search",e,en);return JSON.stringify(t,null,2)}catch(t){return JSON.stringify({error:"Semgrep search failed",details:t.message},null,2)}}}),Rl=Ve({description:"Chain-of-thought reasoning tool that helps break down complex problems step by step. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{problem:B.string().min(1).describe("Problem or question to reason about step by step"),steps:B.number().optional().default(5).describe("Number of reasoning steps to take (default: 5)")},async execute(e){try{let t=await T.callTool("think",e,tn);return JSON.stringify(t,null,2)}catch(t){return JSON.stringify({error:"Sequential thinking failed",details:t.message},null,2)}}}),Dl=Ve({description:"Mind mapping and brainstorming tool to visualize connections between ideas. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{action:B.enum(["create","explore"]).describe("Action to perform: create new mind map or explore existing"),topic:B.string().optional().describe("Topic or idea for mind map creation"),mapId:B.string().optional().describe("ID of existing mind map to explore")},async execute(e){try{let t=await T.callTool(e.action,e,nn);return JSON.stringify(t,null,2)}catch(t){return JSON.stringify({error:"Bridgemind failed",details:t.message},null,2)}}}),rn={mcpDeepwikiSearch:Tl,mcpSemgrepSearch:Ml,mcpSequentialThinking:Rl,mcpBridgemind:Dl};var on={websearchTool:xo,webfetchTool:ko,context7SearchTool:vo,context7GetTool:Po,grepSearchTool:To,grepGetFileTool:Mo};var P=null,Nl={get type(){if(!P)P=_();return P.type},get name(){if(!P)P=_();return P.name},get url(){if(!P)P=_();return P.url},get enabled(){if(!P)P=_();return P.enabled},get headers(){if(!P)P=_();return P.headers},get oauth(){if(!P)P=_();return P.oauth}},Ol=Nl,ff=["websearch","context7","grep_app",...Ye],hf={websearch:Ol,context7:Ce,grep_app:ve,...Je};function Ro(e=[],t){let n={};if(!e.includes("websearch")){let i=_(t?.websearch);n.websearch=i,Be(i)}else Be(null);if(!e.includes("context7"))n.context7=Ce;if(!e.includes("grep_app"))n.grep_app=ve;for(let i of Ye)if(!e.includes(i))n[i]=Je[i];return n}function Do(){return{...on,...rn}}import*as Pe from"fs";import*as J from"path";import*as No from"os";var Oo=/^---\s*\n([\s\S]*?)\n---\s*\n/;function Ll(e){let t=e.match(Oo);if(!t)return{};let n=t[1],i={},r=n.split(`
1845
- `);for(let a of r){let s=a.indexOf(":");if(s===-1)continue;let o=a.slice(0,s).trim(),c=a.slice(s+1).trim();if(o==="true")i[o]=!0;else if(o==="false")i[o]=!1;else if(!isNaN(Number(c)))i[o]=Number(c);else i[o]=c}return i}async function ue(e,t,n=new Set,i=""){let r=[];if(!Pe.existsSync(e))return r;let a=J.resolve(e);if(n.has(a))return r;n.add(a);try{let s=await Pe.promises.readdir(e,{withFileTypes:!0});for(let o of s){let c=J.join(e,o.name);if(o.isDirectory()){let l=i?`${i}:${o.name}`:o.name,u=await ue(c,t,n,l);r.push(...u)}else if(o.isFile()&&o.name.endsWith(".md"))try{let l=await Pe.promises.readFile(c,"utf-8"),u=Ll(l),p=l.replace(Oo,"").trim(),m=o.name.slice(0,-3),g=i?`${i}:${m}`:m;r.push({name:g,path:c,definition:{name:g,description:u.description||"",template:p,agent:u.agent,model:u.model,subtask:u.subtask,argumentHint:u.argumentHint},scope:t,prefix:i})}catch(l){console.error(`[command-loader] Error loading command from ${c}:`,l)}}}catch(s){console.error(`[command-loader] Error reading commands directory ${e}:`,s)}return r}function Lo(){let e=No.homedir();return{user:J.join(e,".config","opencode","commands"),project:J.join(process.cwd(),".claude","commands"),opencodeGlobal:J.join(e,".config","opencode","commands"),opencodeProject:J.join(process.cwd(),".opencode","commands")}}var Fo=["builtin","user","opencode","opencode-project","project","skill"],Io=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",$o=x("command-loader");class an{commands=new Map;options;constructor(e={}){this.options=e}async loadAll(){let e=Lo(),t=[];if(!this.isScopeDisabled("user")){let r=this.options.userCommandsDir||e.user;t.push(ue(r,"user"))}if(!this.isScopeDisabled("project")){let r=this.options.projectCommandsDir||e.project;t.push(ue(r,"project"))}if(!this.isScopeDisabled("opencode")){let r=this.options.opencodeGlobalCommandsDir||e.opencodeGlobal;t.push(ue(r,"opencode"))}if(!this.isScopeDisabled("opencode-project")){let r=this.options.opencodeProjectCommandsDir||e.opencodeProject;t.push(ue(r,"opencode-project"))}let n=await Promise.all(t),i=n.flat();for(let r of i)this.registerCommand(r);if(Io)$o.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=Fo.indexOf(e.scope),i=Fo.indexOf(t.scope);if(n>i){if(this.commands.set(e.name,e),Io)$o.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 ze=null;async function jo(){if(!ze)ze=new an,await ze.loadAll();return ze}import{spawn as _o}from"child_process";import{existsSync as Uo}from"node:fs";import Fl from"node:path";var Il=300000,Ge=3,I=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",$=x("skill-mcp-manager");class sn{clients=new Map;pendingConnections=new Map;idleTimeout;maxConnections;cleanupInterval=null;constructor(e={}){this.idleTimeout=e.idleTimeout||Il,this.maxConnections=e.maxConnections||10,this.startCleanupInterval(),this.setupProcessCleanup()}async initialize(){if(I)$.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),i=this.pendingConnections.get(n);if(i)return i.promise;let r=this.clients.get(n);if(r&&this.isClientHealthy(r))return r.lastUsed=Date.now(),r.client;let a=new Promise((s,o)=>{this.createClientProcess(e,t).then((c)=>{this.clients.set(n,{client:c,process:c.process,lastUsed:Date.now(),pendingRequests:0}),s(c)}).catch((c)=>{o(c)})});this.pendingConnections.set(n,{promise:a,resolve:a,reject:a});try{return await a}finally{this.pendingConnections.delete(n)}}async createClientProcess(e,t){let{command:n,args:i,env:r={}}=t;if(I)$.debug(`Starting MCP process for ${e.skillName}:${e.mcpName}`);let a=await this.resolveCommand(n);if(!a)throw Error(`MCP command '${n}' not found. Install it and ensure it is on your PATH.`);return new Promise((s,o)=>{let c=0,l=null,u=()=>{l=_o(a,i,{env:{...process.env,...r},stdio:["pipe","pipe","pipe"]});let p=null,m=0,g=new Map,f=(b,y)=>{let k=++m,v={jsonrpc:"2.0",id:k,method:b,params:y};if(l?.stdin)l.stdin.write(JSON.stringify(v)+`
1846
- `);return new Promise((D,j)=>{g.set(k,{resolve:D,reject:j}),setTimeout(()=>{g.delete(k),j(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 k=y.toString().split(`
1847
- `);for(let v of k){if(!v.trim())continue;try{let D=JSON.parse(v),{id:j,result:Ee,error:pe}=D;if(j!==void 0&&g.has(j)){let me=g.get(j);if(g.delete(j),pe)me.reject(Error(pe.message));else me.resolve(Ee)}}catch(D){if(I)$.warn("Failed to parse response:",D)}}};l.stdout.on("data",b),l.on("error",(y)=>{if(I)$.warn(`MCP process error for ${e.skillName}:${e.mcpName}:`,y);if(y?.code==="ENOENT"){o(Error(`MCP command '${n}' not found.`));return}if(c<Ge){if(c++,I)$.debug(`Retrying connection (${c}/${Ge})`);setTimeout(u,1000*c)}else o(y)}),l.on("exit",(y,k)=>{if(I)$.debug(`MCP process exited for ${e.skillName}:${e.mcpName} with code ${y}, signal ${k}`);if(c<Ge&&y!==0){if(c++,I)$.debug(`Retrying connection (${c}/${Ge})`);setTimeout(u,1000*c)}else if(p&&y===0)s(p)}),setTimeout(async()=>{try{await f("initialize",{protocolVersion:"2024-11-05",capabilities:{},clientInfo:{name:"kraken-code",version:"5.0.0"}}),await f("notifications/initialized",{}),s(p)}catch(y){o(y)}},500)}};u()})}async resolveCommand(e){if(Fl.isAbsolute(e)&&Uo(e))return e;if(e.includes("/")||e.includes("\\"))return Uo(e)?e:null;let t=process.platform==="win32"?"where":"which";try{let n=_o(t,[e],{stdio:["ignore","pipe","pipe"]}),i=await this.readStream(n.stdout);if(await new Promise((r)=>{n.on("close",()=>r())}),n.exitCode===0)return i.trim().split(`
1848
- `)[0]?.trim()??null}catch{return null}return null}readStream(e){if(!e)return Promise.resolve("");return new Promise((t)=>{let n="";e.on("data",(i)=>{n+=i.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,i){return(await this.getOrCreateClient(e,t)).callTool(n,i)}async readResource(e,t,n){return(await this.getOrCreateClient(e,t)).readResource(n)}async getPrompt(e,t,n,i){return(await this.getOrCreateClient(e,t)).getPrompt(n,i)}async disconnectSession(e){let t=[];for(let[n,i]of this.clients.entries())if(n.includes(`:${e}`))await i.client.close(),t.push(n);for(let n of t)this.clients.delete(n);if(I)$.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(),I)$.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,i]of this.clients.entries())if(e-i.lastUsed>this.idleTimeout)t.push(n);if(t.length>0){if(I)$.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(I)$.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 Xe=null;async function Wo(){if(!Xe)Xe=new sn,await Xe.initialize();return Xe}function $l(){return{Kraken:Ze,Atlas:et,Nautilus:tt,Abyssal:nt,Coral:it,Siren:rt,Scylla:ot,Pearl:at,Maelstrom:lt,Leviathan:ct,Poseidon:st,Cartographer:dt}}function jl(...e){let t={},n=[];for(let i of e){if(i.config)n.push(i.config);for(let[r,a]of Object.entries(i))if(r!=="config")if(r==="tool"&&typeof a==="object"&&a!==null)if(!t[r]||typeof t[r]!=="object")t[r]=a;else t[r]={...t[r],...a};else t[r]=a}if(n.length>0)t.config=async(i)=>{for(let r of n)await r(i)};return t}var _l={ast_grep_search:Ci,ast_grep_replace:vi,grep:Ri,session_list:vt,session_read:Pt,session_search:Et,session_info:Mt,"kraken-compress":ei,"model-switcher":ni,"ralph-loop":Di,learning_add_experience:zi,learning_search_experiences:Gi,learning_add_knowledge_node:Xi,learning_search_knowledge_nodes:Qi,learning_link_knowledge_nodes:Zi,learning_record_pattern:er,learning_list_patterns:tr,learning_get_review_queue:nr,learning_review_node:ir,learning_create_state_machine:rr,learning_list_state_machines:or,...Do()},Ul=async(e)=>{let t=x("plugin-main"),n=[],i=lr(e,{autoActivate:!0});Object.assign(n,i);let r=Cn(),a=Ft(e,{config:{enabled:r?.enabled??!0,recordTodos:!0,recordTranscripts:!0}});Object.assign(n,a);let s=ur(e,{config:r});Object.assign(n,s),n.push({tool:_l}),n.push({config:async(o)=>{if(!o.agent)o.agent={};let c=$l();for(let[u,p]of Object.entries(c))o.agent[u]={...p,...o.agent[u]};let l=["Kraken","Cartographer"];for(let u of l)if(o.agent[u])o.agent[u].mode="primary";await Promise.all([(async()=>{try{await jo(),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 Wo(),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=o.mcp||{},{disabled_mcps:p,websearch:m,...g}=u,b={...Ro(p||[],{websearch:m}),...g};o.mcp=b,t.debug("MCP server configs added")}catch(u){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing MCP servers:",u)}})(),(async()=>{try{await Ot(),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(mr(e)),n.push({tool:wr(e).tools}),n.push(xr(e)),n.push(fi(e)),n.push(kr(e)),n.push(Cr(e)),n.push(vr(e)),n.push(Pr(e)),n.push(Er(e)),n.push(Ai(e)),n.push(Tr(e)),n.push(Mr(e)),n.push(Rr(e)),n.push(Nr(e)),n.push(Lr(e)),n.push($r(e)),n.push(jr(e)),n.push(_r(e)),n.push(Jr(e)),n.push(zr(e)),n.push(eo(e)),n.push(Wt(e)),n.push(Ht(e)),n.push(qt(e)),n.push(io()),n.push(oo()),n.push(po()),n.push(wo())}catch(o){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing hooks:",o)}return n.push({"tool.execute.after":async(o,c)=>{if(!c.output)return;let{tool:l,sessionID:u}=o;if(c.output&&c.output.toolOutput)await Oe(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()=>{}),jl(...n)},$h=Ul;export{$h as default};
1844
+ `)}]}},"tool.execute.after":async(e,t)=>{if(e.tool==="todowrite"){let r=t?.todos;if(r?.every((s)=>s.status==="completed"||s.status==="cancelled")&&r&&r.length>0){let s=e.sessionID;El(s)}}}}}import{tool as ko}from"@opencode-ai/plugin";import{z as ve}from"zod";class xo{initialized=new Map;connections=new Map;async initMCP(e,t){if(this.initialized.has(e)){let i=this.connections.get(e);if(i)return i}let n={config:t,tools:this.getAvailableToolsForMCP(e),initialized:!0};return this.initialized.set(e,!0),this.connections.set(e,n),n}async callTool(e,t,n){if(n.enabled===!1)throw Error(`MCP ${n.name||this.deriveNameFromUrl(n.url)} is disabled`);if(!n.url)throw Error("MCP config requires a URL");let i=n.name||this.deriveNameFromUrl(n.url);return await this.initMCP(i,n),{result:`Tool '${e}' called with args: ${JSON.stringify(t)}`,server:n.url}}deriveNameFromUrl(e){try{let n=new URL(e).hostname;if(n.includes("context7.com"))return"context7";if(n.includes("exa.ai"))return"websearch";if(n.includes("tavily.com"))return"websearch";if(n.includes("grep.app"))return"grep_app";if(n.includes("deepwiki.com"))return"deepwiki";if(n.includes("semgrep.ai"))return"semgrep";return n.replace(".com","").replace("mcp.","")}catch{return"unknown"}}getAvailableToolsForMCP(e){switch(e){case"websearch":return["search","fetch"];case"context7":return["search","get"];case"grep_app":return["search","get_file"];case"deepwiki":return["search"];case"semgrep":return["search"];case"sequential_thinking":return["think"];case"bridgemind":return["create","explore"];default:return[]}}async shutdownAll(){let e=[];for(let[t,n]of this.connections.entries())if(n.initialized)e.push(new Promise((i)=>{i()}));await Promise.all(e),this.initialized.clear(),this.connections.clear()}}var M=new xo;function W(e){if((e?.provider||"exa")==="tavily"){let n=process.env.TAVILY_API_KEY;if(!n)return{type:"remote",url:"https://mcp.tavily.com/mcp/",enabled:!1,name:"websearch",oauth:!1};return{type:"remote",url:"https://mcp.tavily.com/mcp/",enabled:!0,headers:{Authorization:`Bearer ${n}`},oauth:!1}}return{type:"remote",url:"https://mcp.exa.ai/mcp?tools=web_search_exa",enabled:!0,headers:process.env.EXA_API_KEY?{"x-api-key":process.env.EXA_API_KEY}:void 0,oauth:!1}}var tn=null;function Ye(e){tn=e}var Co=ko({description:"Search the web using Exa AI (default) or Tavily. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{query:ve.string().min(1).describe("Search query for web search"),numResults:ve.number().optional().default(10).describe("Number of results to return (default: 10)")},async execute(e){try{let t=tn||W();if(t.enabled===!1)return JSON.stringify({error:"Websearch disabled",details:"API key not configured"},null,2);let n=await M.callTool("search",e,t);return JSON.stringify(n,null,2)}catch(t){return JSON.stringify({error:"Websearch failed",details:t.message},null,2)}}}),vo=ko({description:"Fetch and parse web content from a specific URL. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{url:ve.string().url().describe("URL to fetch content from"),format:ve.enum(["markdown","text","html"]).optional().default("markdown").describe("Output format (default: markdown)"),timeout:ve.number().optional().describe("Request timeout in milliseconds (default: 60000)")},async execute(e){try{let t=tn||W();if(t.enabled===!1)return JSON.stringify({error:"Websearch disabled",details:"API key not configured"},null,2);let n=await M.callTool("fetch",e,t);return JSON.stringify(n,null,2)}catch(t){return JSON.stringify({error:"Webfetch failed",details:t.message},null,2)}}});import{tool as Po}from"@opencode-ai/plugin";import{z as pe}from"zod";function Rl(){return{type:"remote",url:"https://mcp.context7.com/mcp",enabled:!0,headers:process.env.CONTEXT7_API_KEY?{Authorization:`Bearer ${process.env.CONTEXT7_API_KEY}`}:void 0,oauth:!1}}var Pe=Rl(),Eo=Po({description:"Search official documentation using Context7. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{query:pe.string().min(1).describe("Search query for documentation"),numResults:pe.number().optional().default(5).describe("Number of results to return (default: 5)"),maxTokens:pe.number().optional().describe("Maximum tokens for response (default: 5000)")},async execute(e){try{let t=await M.callTool("search",e,Pe);return JSON.stringify(t,null,2)}catch(t){return JSON.stringify({success:!1,error:t.message},null,2)}}}),To=Po({description:"Fetch specific documentation page using Context7. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{library:pe.string().describe("Library name (e.g., react, express)"),path:pe.string().optional().describe("Documentation path (e.g., hooks/useState)"),version:pe.string().optional().describe("Library version (default: latest)")},async execute(e){try{let t=await M.callTool("get",e,Pe);return JSON.stringify(t,null,2)}catch(t){return JSON.stringify({success:!1,error:t.message},null,2)}}});import{tool as Mo}from"@opencode-ai/plugin";import{z as J}from"zod";var Ee={type:"remote",url:"https://mcp.grep.app",enabled:!0,headers:void 0,oauth:!1},Ro=Mo({description:"Search code across public GitHub repositories using grep.app. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{query:J.string().min(1).describe("Search query for code"),language:J.string().optional().describe("Filter by programming language (e.g., python, typescript, rust)"),maxResults:J.number().optional().default(10).describe("Maximum number of results to return (default: 10)"),page:J.number().optional().default(1).describe("Page number for pagination (default: 1)")},async execute(e){try{let t=await M.callTool("search",e,Ee);return JSON.stringify(t,null,2)}catch(t){return JSON.stringify({error:"failed to search grep.app",details:String(t)},null,2)}}}),Do=Mo({description:"Fetch file content from a GitHub repository using grep.app. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{owner:J.string().describe("Repository owner (e.g., facebook)"),repo:J.string().describe("Repository name (e.g., react)"),path:J.string().describe("File path (e.g., src/index.ts)"),ref:J.string().optional().describe("Git branch or commit ref (default: main)")},async execute(e){try{let t=await M.callTool("get_file",e,Ee);return JSON.stringify(t,null,2)}catch(t){return JSON.stringify({error:"failed to get file from grep.app",details:String(t)},null,2)}}});var nn={type:"remote",url:"https://mcp.deepwiki.com/mcp",enabled:!0,headers:process.env.DEEPWIKI_API_KEY?{"x-api-key":process.env.DEEPWIKI_API_KEY}:void 0,oauth:!1},rn={type:"remote",url:"https://mcp.semgrep.ai/sse",enabled:!0,headers:process.env.SEMGREP_API_KEY?{"x-api-key":process.env.SEMGREP_API_KEY}:void 0,oauth:!1},on={type:"remote",url:"https://remote-mcp-servers.org/sequential-thinking/mcp",enabled:!1,headers:void 0,oauth:!1},an={type:"remote",url:"https://remote-mcp-servers.org/bridgemind/mcp",enabled:!1,headers:void 0,oauth:!1},Ve={deepwiki:nn,semgrep:rn,sequential_thinking:on,bridgemind:an},ze=["deepwiki","semgrep","sequential_thinking","bridgemind"];import{tool as Ge}from"@opencode-ai/plugin";import{z as Y}from"zod";var Dl=Ge({description:"Search Wikipedia-like knowledge base using DeepWiki. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{query:Y.string().min(1).describe("Search query for knowledge base")},async execute(e){try{let t=await M.callTool("search",e,nn);return JSON.stringify(t,null,2)}catch(t){return JSON.stringify({error:"DeepWiki search failed",details:t.message},null,2)}}}),Nl=Ge({description:"Semantic code search using AI-powered grep via Semgrep. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{query:Y.string().min(1).describe("Search query for semantic code search"),language:Y.string().optional().describe("Filter by programming language")},async execute(e){try{let t=await M.callTool("search",e,rn);return JSON.stringify(t,null,2)}catch(t){return JSON.stringify({error:"Semgrep search failed",details:t.message},null,2)}}}),Ol=Ge({description:"Chain-of-thought reasoning tool that helps break down complex problems step by step. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{problem:Y.string().min(1).describe("Problem or question to reason about step by step"),steps:Y.number().optional().default(5).describe("Number of reasoning steps to take (default: 5)")},async execute(e){try{let t=await M.callTool("think",e,on);return JSON.stringify(t,null,2)}catch(t){return JSON.stringify({error:"Sequential thinking failed",details:t.message},null,2)}}}),Ll=Ge({description:"Mind mapping and brainstorming tool to visualize connections between ideas. Does NOT auto-inject results into conversation context - you must explicitly read and use results.",args:{action:Y.enum(["create","explore"]).describe("Action to perform: create new mind map or explore existing"),topic:Y.string().optional().describe("Topic or idea for mind map creation"),mapId:Y.string().optional().describe("ID of existing mind map to explore")},async execute(e){try{let t=await M.callTool(e.action,e,an);return JSON.stringify(t,null,2)}catch(t){return JSON.stringify({error:"Bridgemind failed",details:t.message},null,2)}}}),sn={mcpDeepwikiSearch:Dl,mcpSemgrepSearch:Nl,mcpSequentialThinking:Ol,mcpBridgemind:Ll};var cn={websearchTool:Co,webfetchTool:vo,context7SearchTool:Eo,context7GetTool:To,grepSearchTool:Ro,grepGetFileTool:Do};var E=null,Fl={get type(){if(!E)E=W();return E.type},get name(){if(!E)E=W();return E.name},get url(){if(!E)E=W();return E.url},get enabled(){if(!E)E=W();return E.enabled},get headers(){if(!E)E=W();return E.headers},get oauth(){if(!E)E=W();return E.oauth}},Il=Fl,Pf=["websearch","context7","grep_app",...ze],Ef={websearch:Il,context7:Pe,grep_app:Ee,...Ve};function No(e=[],t){let n={};if(!e.includes("websearch")){let i=W(t?.websearch);n.websearch=i,Ye(i)}else Ye(null);if(!e.includes("context7"))n.context7=Pe;if(!e.includes("grep_app"))n.grep_app=Ee;for(let i of ze)if(!e.includes(i))n[i]=Ve[i];return n}function Oo(){return{...cn,...sn}}import*as Te from"fs";import*as V from"path";import*as Lo from"os";var Fo=/^---\s*\n([\s\S]*?)\n---\s*\n/;function $l(e){let t=e.match(Fo);if(!t)return{};let n=t[1],i={},r=n.split(`
1845
+ `);for(let a of r){let s=a.indexOf(":");if(s===-1)continue;let o=a.slice(0,s).trim(),c=a.slice(s+1).trim();if(o==="true")i[o]=!0;else if(o==="false")i[o]=!1;else if(!isNaN(Number(c)))i[o]=Number(c);else i[o]=c}return i}async function me(e,t,n=new Set,i=""){let r=[];if(!Te.existsSync(e))return r;let a=V.resolve(e);if(n.has(a))return r;n.add(a);try{let s=await Te.promises.readdir(e,{withFileTypes:!0});for(let o of s){let c=V.join(e,o.name);if(o.isDirectory()){let l=i?`${i}:${o.name}`:o.name,u=await me(c,t,n,l);r.push(...u)}else if(o.isFile()&&o.name.endsWith(".md"))try{let l=await Te.promises.readFile(c,"utf-8"),u=$l(l),p=l.replace(Fo,"").trim(),m=o.name.slice(0,-3),g=i?`${i}:${m}`:m;r.push({name:g,path:c,definition:{name:g,description:u.description||"",template:p,agent:u.agent,model:u.model,subtask:u.subtask,argumentHint:u.argumentHint},scope:t,prefix:i})}catch(l){console.error(`[command-loader] Error loading command from ${c}:`,l)}}}catch(s){console.error(`[command-loader] Error reading commands directory ${e}:`,s)}return r}function Io(){let e=Lo.homedir();return{user:V.join(e,".config","opencode","commands"),project:V.join(process.cwd(),".claude","commands"),opencodeGlobal:V.join(e,".config","opencode","commands"),opencodeProject:V.join(process.cwd(),".opencode","commands")}}x();var $o=["builtin","user","opencode","opencode-project","project","skill"],jo=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",_o=S("command-loader");class ln{commands=new Map;options;constructor(e={}){this.options=e}async loadAll(){let e=Io(),t=[];if(!this.isScopeDisabled("user")){let r=this.options.userCommandsDir||e.user;t.push(me(r,"user"))}if(!this.isScopeDisabled("project")){let r=this.options.projectCommandsDir||e.project;t.push(me(r,"project"))}if(!this.isScopeDisabled("opencode")){let r=this.options.opencodeGlobalCommandsDir||e.opencodeGlobal;t.push(me(r,"opencode"))}if(!this.isScopeDisabled("opencode-project")){let r=this.options.opencodeProjectCommandsDir||e.opencodeProject;t.push(me(r,"opencode-project"))}let n=await Promise.all(t),i=n.flat();for(let r of i)this.registerCommand(r);if(jo)_o.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=$o.indexOf(e.scope),i=$o.indexOf(t.scope);if(n>i){if(this.commands.set(e.name,e),jo)_o.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 Xe=null;async function Uo(){if(!Xe)Xe=new ln,await Xe.loadAll();return Xe}x();import{spawn as Wo}from"child_process";import{existsSync as Ho}from"node:fs";import jl from"node:path";var _l=300000,Qe=3,j=process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1"||process.env.KRAKEN_LOG==="1",_=S("skill-mcp-manager");class dn{clients=new Map;pendingConnections=new Map;idleTimeout;maxConnections;cleanupInterval=null;constructor(e={}){this.idleTimeout=e.idleTimeout||_l,this.maxConnections=e.maxConnections||10,this.startCleanupInterval(),this.setupProcessCleanup()}async initialize(){if(j)_.debug("Manager initialized")}getClientKey(e){return`${e.skillName}:${e.mcpName}:${e.sessionID}`}processExists(e){try{return process.kill(e,0),!0}catch{return!1}}async getOrCreateClient(e,t){let n=this.getClientKey(e),i=this.pendingConnections.get(n);if(i)return i.promise;let r=this.clients.get(n);if(r&&this.isClientHealthy(r))return r.lastUsed=Date.now(),r.client;let a=new Promise((s,o)=>{this.createClientProcess(e,t).then((c)=>{this.clients.set(n,{client:c,process:c.process,lastUsed:Date.now(),pendingRequests:0}),s(c)}).catch((c)=>{o(c)})});this.pendingConnections.set(n,{promise:a,resolve:a,reject:a});try{return await a}finally{this.pendingConnections.delete(n)}}async createClientProcess(e,t){let{command:n,args:i,env:r={}}=t;if(j)_.debug(`Starting MCP process for ${e.skillName}:${e.mcpName}`);let a=await this.resolveCommand(n);if(!a)throw Error(`MCP command '${n}' not found. Install it and ensure it is on your PATH.`);return new Promise((s,o)=>{let c=0,l=null,u=()=>{l=Wo(a,i,{env:{...process.env,...r},stdio:["pipe","pipe","pipe"]});let p=null,m=0,g=new Map,f=(b,y)=>{let C=++m,P={jsonrpc:"2.0",id:C,method:b,params:y};if(l?.stdin)l.stdin.write(JSON.stringify(P)+`
1846
+ `);return new Promise((O,U)=>{g.set(C,{resolve:O,reject:U}),setTimeout(()=>{g.delete(C),U(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(`
1847
+ `);for(let P of C){if(!P.trim())continue;try{let O=JSON.parse(P),{id:U,result:Me,error:ge}=O;if(U!==void 0&&g.has(U)){let fe=g.get(U);if(g.delete(U),ge)fe.reject(Error(ge.message));else fe.resolve(Me)}}catch(O){if(j)_.warn("Failed to parse response:",O)}}};l.stdout.on("data",b),l.on("error",(y)=>{if(j)_.warn(`MCP process error for ${e.skillName}:${e.mcpName}:`,y);if(y?.code==="ENOENT"){o(Error(`MCP command '${n}' not found.`));return}if(c<Qe){if(c++,j)_.debug(`Retrying connection (${c}/${Qe})`);setTimeout(u,1000*c)}else o(y)}),l.on("exit",(y,C)=>{if(j)_.debug(`MCP process exited for ${e.skillName}:${e.mcpName} with code ${y}, signal ${C}`);if(c<Qe&&y!==0){if(c++,j)_.debug(`Retrying connection (${c}/${Qe})`);setTimeout(u,1000*c)}else if(p&&y===0)s(p)}),setTimeout(async()=>{try{await f("initialize",{protocolVersion:"2024-11-05",capabilities:{},clientInfo:{name:"kraken-code",version:"5.0.0"}}),await f("notifications/initialized",{}),s(p)}catch(y){o(y)}},500)}};u()})}async resolveCommand(e){if(jl.isAbsolute(e)&&Ho(e))return e;if(e.includes("/")||e.includes("\\"))return Ho(e)?e:null;let t=process.platform==="win32"?"where":"which";try{let n=Wo(t,[e],{stdio:["ignore","pipe","pipe"]}),i=await this.readStream(n.stdout);if(await new Promise((r)=>{n.on("close",()=>r())}),n.exitCode===0)return i.trim().split(`
1848
+ `)[0]?.trim()??null}catch{return null}return null}readStream(e){if(!e)return Promise.resolve("");return new Promise((t)=>{let n="";e.on("data",(i)=>{n+=i.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,i){return(await this.getOrCreateClient(e,t)).callTool(n,i)}async readResource(e,t,n){return(await this.getOrCreateClient(e,t)).readResource(n)}async getPrompt(e,t,n,i){return(await this.getOrCreateClient(e,t)).getPrompt(n,i)}async disconnectSession(e){let t=[];for(let[n,i]of this.clients.entries())if(n.includes(`:${e}`))await i.client.close(),t.push(n);for(let n of t)this.clients.delete(n);if(j)_.debug(`Disconnected ${t.length} clients for session ${e}`)}async disconnectAll(){let e=[];for(let t of this.clients.values())e.push(t.client.close());if(await Promise.all(e),this.clients.clear(),j)_.debug("Disconnected all clients")}getConnectedServers(){let e=new Set;for(let t of this.clients.keys()){let n=t.split(":");if(n.length>=2)e.add(`${n[0]}:${n[1]}`)}return Array.from(e)}isConnected(e){let t=this.getClientKey(e),n=this.clients.get(t);if(!n)return!1;return this.isClientHealthy(n)}startCleanupInterval(){this.cleanupInterval=setInterval(()=>{this.cleanupIdleClients()},60000)}cleanupIdleClients(){let e=Date.now(),t=[];for(let[n,i]of this.clients.entries())if(e-i.lastUsed>this.idleTimeout)t.push(n);if(t.length>0){if(j)_.debug(`Cleaning up ${t.length} idle clients`);for(let n of t)this.clients.get(n).client.close(),this.clients.delete(n)}}setupProcessCleanup(){let e=async(t)=>{if(j)_.debug(`Received ${t}, cleaning up...`);if(await this.disconnectAll(),this.cleanupInterval)clearInterval(this.cleanupInterval);process.exit(0)};process.on("SIGINT",e),process.on("SIGTERM",e)}}var Ze=null;async function qo(){if(!Ze)Ze=new dn,await Ze.initialize();return Ze}function Ul(){return{Kraken:nt,Atlas:it,Nautilus:rt,Abyssal:ot,Coral:at,Siren:st,Scylla:ct,Pearl:lt,Maelstrom:pt,Leviathan:ut,Poseidon:dt,Cartographer:mt}}function Wl(...e){let t={},n=[];for(let i of e){if(i.config)n.push(i.config);for(let[r,a]of Object.entries(i))if(r!=="config")if(r==="tool"&&typeof a==="object"&&a!==null)if(!t[r]||typeof t[r]!=="object")t[r]=a;else t[r]={...t[r],...a};else t[r]=a}if(n.length>0)t.config=async(i)=>{for(let r of n)await r(i)};return t}var Hl={ast_grep_search:Pi,ast_grep_replace:Ei,grep:Ni,session_list:Tt,session_read:Mt,session_search:Rt,session_info:Nt,"kraken-compress":ni,"model-switcher":ri,"ralph-loop":Oi,learning_add_experience:Xi,learning_search_experiences:Qi,learning_add_knowledge_node:Zi,learning_search_knowledge_nodes:er,learning_link_knowledge_nodes:tr,learning_record_pattern:nr,learning_list_patterns:ir,learning_get_review_queue:rr,learning_review_node:or,learning_create_state_machine:ar,learning_list_state_machines:sr,...Oo()},ql=async(e)=>{let t=S("plugin-main"),n=[],i=ur(e,{autoActivate:!0});Object.assign(n,i);let r=Pn(),a=jt(e,{config:{enabled:r?.enabled??!0,recordTodos:!0,recordTranscripts:!0}});Object.assign(n,a);let s=mr(e,{config:r});Object.assign(n,s),n.push({tool:Hl}),n.push({config:async(o)=>{if(!o.agent)o.agent={};let c=Ul();for(let[u,p]of Object.entries(c))o.agent[u]={...p,...o.agent[u]};let l=["Kraken","Cartographer"];for(let u of l)if(o.agent[u])o.agent[u].mode="primary";await Promise.all([(async()=>{try{await Uo(),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 qo(),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=o.mcp||{},{disabled_mcps:p,websearch:m,...g}=u,b={...No(p||[],{websearch:m}),...g};o.mcp=b,t.debug("MCP server configs added")}catch(u){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing MCP servers:",u)}})(),(async()=>{try{await It(),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(fr(e)),n.push({tool:Ar(e).tools}),n.push(Cr(e)),n.push(yi(e)),n.push(vr(e)),n.push(Pr(e)),n.push(Er(e)),n.push(Tr(e)),n.push(Mr(e)),n.push(ki(e)),n.push(Rr(e)),n.push(Dr(e)),n.push(Nr(e)),n.push(Lr(e)),n.push(Ir(e)),n.push(_r(e)),n.push(Ur(e)),n.push(Wr(e)),n.push(Vr(e)),n.push(Xr(e)),n.push(no(e)),n.push(Kt(e)),n.push(Bt(e)),n.push(Jt(e)),n.push(oo()),n.push(so()),n.push(go()),n.push(Ao())}catch(o){if(process.env.ANTIGRAVITY_DEBUG==="1"||process.env.DEBUG==="1")t.error("Error initializing hooks:",o)}return n.push({"tool.execute.after":async(o,c)=>{if(!c.output)return;let{tool:l,sessionID:u}=o;if(c.output&&c.output.toolOutput)await Fe(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()=>{}),Wl(...n)},Vh=ql;export{Vh as default};