olympus-ai 2.6.3 → 2.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/__tests__/hooks/bundle.test.js +2 -2
  2. package/dist/__tests__/hooks/bundle.test.js.map +1 -1
  3. package/dist/__tests__/hooks/integration.test.js +6 -8
  4. package/dist/__tests__/hooks/integration.test.js.map +1 -1
  5. package/dist/__tests__/hooks/performance.test.js +9 -10
  6. package/dist/__tests__/hooks/performance.test.js.map +1 -1
  7. package/dist/__tests__/hooks/router.test.js +9 -38
  8. package/dist/__tests__/hooks/router.test.js.map +1 -1
  9. package/dist/agents/definitions.d.ts.map +1 -1
  10. package/dist/agents/definitions.js +9 -1
  11. package/dist/agents/definitions.js.map +1 -1
  12. package/dist/agents/momus.d.ts.map +1 -1
  13. package/dist/agents/momus.js +9 -1
  14. package/dist/agents/momus.js.map +1 -1
  15. package/dist/hooks/index.d.ts +1 -0
  16. package/dist/hooks/index.d.ts.map +1 -1
  17. package/dist/hooks/index.js +3 -0
  18. package/dist/hooks/index.js.map +1 -1
  19. package/dist/hooks/olympus-hooks.cjs +113 -77
  20. package/dist/hooks/read-tool-limit-recovery/index.d.ts +24 -0
  21. package/dist/hooks/read-tool-limit-recovery/index.d.ts.map +1 -0
  22. package/dist/hooks/read-tool-limit-recovery/index.js +96 -0
  23. package/dist/hooks/read-tool-limit-recovery/index.js.map +1 -0
  24. package/dist/hooks/read-tool-limit-recovery/types.d.ts +15 -0
  25. package/dist/hooks/read-tool-limit-recovery/types.d.ts.map +1 -0
  26. package/dist/hooks/read-tool-limit-recovery/types.js +5 -0
  27. package/dist/hooks/read-tool-limit-recovery/types.js.map +1 -0
  28. package/dist/hooks/registrations/index.d.ts +2 -2
  29. package/dist/hooks/registrations/index.d.ts.map +1 -1
  30. package/dist/hooks/registrations/index.js +3 -3
  31. package/dist/hooks/registrations/index.js.map +1 -1
  32. package/dist/hooks/registrations/post-tool-use-failure.d.ts +12 -0
  33. package/dist/hooks/registrations/post-tool-use-failure.d.ts.map +1 -0
  34. package/dist/hooks/registrations/post-tool-use-failure.js +52 -0
  35. package/dist/hooks/registrations/post-tool-use-failure.js.map +1 -0
  36. package/dist/hooks/registrations/post-tool-use.d.ts +1 -0
  37. package/dist/hooks/registrations/post-tool-use.d.ts.map +1 -1
  38. package/dist/hooks/registrations/post-tool-use.js +28 -0
  39. package/dist/hooks/registrations/post-tool-use.js.map +1 -1
  40. package/dist/hooks/router.js +1 -1
  41. package/dist/hooks/router.js.map +1 -1
  42. package/dist/hooks/types.d.ts +5 -3
  43. package/dist/hooks/types.d.ts.map +1 -1
  44. package/dist/index.d.ts +0 -1
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +3 -2
  47. package/dist/index.js.map +1 -1
  48. package/dist/installer/default-config.d.ts +1 -6
  49. package/dist/installer/default-config.d.ts.map +1 -1
  50. package/dist/installer/default-config.js +6 -12
  51. package/dist/installer/default-config.js.map +1 -1
  52. package/dist/installer/hooks.d.ts +48 -0
  53. package/dist/installer/hooks.d.ts.map +1 -1
  54. package/dist/installer/hooks.js +32 -0
  55. package/dist/installer/hooks.js.map +1 -1
  56. package/dist/installer/index.d.ts +1 -1
  57. package/dist/installer/index.d.ts.map +1 -1
  58. package/dist/installer/index.js +6 -2
  59. package/dist/installer/index.js.map +1 -1
  60. package/dist/shared/types.d.ts +3 -0
  61. package/dist/shared/types.d.ts.map +1 -1
  62. package/package.json +1 -1
  63. package/dist/hooks/registrations/messages-transform.d.ts +0 -8
  64. package/dist/hooks/registrations/messages-transform.d.ts.map +0 -1
  65. package/dist/hooks/registrations/messages-transform.js +0 -63
  66. package/dist/hooks/registrations/messages-transform.js.map +0 -1
@@ -1,26 +1,26 @@
1
1
  #!/usr/bin/env node
2
2
  // Olympus Hooks Bundle - Generated by esbuild
3
- "use strict";var ws=Object.create;var Se=Object.defineProperty;var vs=Object.getOwnPropertyDescriptor;var Ps=Object.getOwnPropertyNames;var bs=Object.getPrototypeOf,Ds=Object.prototype.hasOwnProperty;var Ls=(e,t)=>{for(var n in t)Se(e,n,{get:t[n],enumerable:!0})},gn=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Ps(t))!Ds.call(e,r)&&r!==n&&Se(e,r,{get:()=>t[r],enumerable:!(o=vs(t,r))||o.enumerable});return e};var b=(e,t,n)=>(n=e!=null?ws(bs(e)):{},gn(t||!e||!e.__esModule?Se(n,"default",{value:e,enumerable:!0}):n,e)),Ms=e=>gn(Se({},"__esModule",{value:!0}),e);var rc={};Ls(rc,{main:()=>Ns});module.exports=Ms(rc);var Qe=new Map;function m(e){let t=Qe.get(e.event)||[];t.push(e),t.sort((n,o)=>(n.priority??100)-(o.priority??100)),Qe.set(e.event,t)}function hn(e){return Qe.get(e)||[]}var Us={ultrawork:/\b(ultrawork|ulw)\b/i,ultrathink:/\b(ultrathink|think)\b/i,olympus:/\b(olympus|orchestrate|coordinate|multi-?agent|conductor)\b/i,search:/\b(search|find|locate|lookup|explore|discover|scan|grep|query|browse|detect|trace|seek|track|pinpoint|hunt)\b|where\s+is|show\s+me|list\s+all/i,analyze:/\b(analyze|analyse|investigate|examine|research|study|deep.?dive|inspect|audit|evaluate|assess|review|diagnose|scrutinize|dissect|debug|comprehend|interpret|breakdown|understand)\b|why\s+is|how\s+does|how\s+to/i},$s=["ultrawork","ultrathink","olympus","search","analyze"];function Tn(e){let t=e.replace(/```[\s\S]*?```/g,"");return t=t.replace(/~~~[\s\S]*?~~~/g,""),t=t.replace(/`[^`]+`/g,""),t}function En(e,t){let n=[];for(let o of $s){let r=Us[o],s=e.match(r);s&&s.index!==void 0&&n.push({type:o,keyword:s[0],position:s.index})}return n}var Sn="auto-slash-command",ke="<auto-slash-command>",ye="</auto-slash-command>",kn=/^\/([a-zA-Z][\w-]*)\s*(.*)/,yn=new Set(["ascent","cancel-ascent","help","clear","history","exit","quit"]);var js=/```[\s\S]*?```/g;function On(e){return e.replace(js,"")}function Rn(e){let t=e.trim();if(!t.startsWith("/"))return null;let n=t.match(kn);if(!n)return null;let[o,r,s]=n;return{command:r.toLowerCase(),args:s.trim(),raw:o}}function In(e){return yn.has(e.toLowerCase())}function Ze(e){let n=On(e).trim();if(!n.startsWith("/"))return null;let o=Rn(n);return!o||In(o.command)?null:o}function et(e){return e.filter(t=>t.type==="text").map(t=>t.text||"").join(" ")}var P=require("fs"),D=require("path"),An=require("os"),Cn=(0,D.join)((0,An.homedir)(),".claude");function Nn(e){let t=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,n=e.match(t);if(!n)return{data:{},body:e};let[,o,r]=n,s={};for(let i of o.split(`
4
- `)){let a=i.indexOf(":");if(a===-1)continue;let c=i.slice(0,a).trim(),u=i.slice(a+1).trim();(u.startsWith('"')&&u.endsWith('"')||u.startsWith("'")&&u.endsWith("'"))&&(u=u.slice(1,-1)),s[c]=u}return{data:s,body:r}}function _n(e,t){if(!(0,P.existsSync)(e))return[];let n;try{n=(0,P.readdirSync)(e,{withFileTypes:!0})}catch{return[]}let o=[];for(let r of n){if(!r.isFile()||!r.name.endsWith(".md"))continue;let s=(0,D.join)(e,r.name),i=(0,D.basename)(r.name,".md");try{let a=(0,P.readFileSync)(s,"utf-8"),{data:c,body:u}=Nn(a),l={name:i,description:c.description||"",argumentHint:c["argument-hint"],model:c.model,agent:c.agent};o.push({name:i,path:s,metadata:l,content:u,scope:t})}catch{continue}}return o}function tt(){let e=(0,D.join)(Cn,"commands"),t=(0,D.join)(process.cwd(),".claude","commands"),n=(0,D.join)(Cn,"skills"),o=_n(e,"user"),r=_n(t,"project"),s=[];if((0,P.existsSync)(n))try{let i=(0,P.readdirSync)(n,{withFileTypes:!0});for(let a of i){if(!a.isDirectory())continue;let c=(0,D.join)(n,a.name,"SKILL.md");if((0,P.existsSync)(c))try{let u=(0,P.readFileSync)(c,"utf-8"),{data:l,body:d}=Nn(u),p={name:l.name||a.name,description:l.description||"",argumentHint:l["argument-hint"],model:l.model,agent:l.agent};s.push({name:l.name||a.name,path:c,metadata:p,content:d,scope:"skill"})}catch{continue}}}catch{}return[...r,...o,...s]}function Oe(e){return tt().find(n=>n.name.toLowerCase()===e.toLowerCase())??null}function Fs(e,t){return e.replace(/\$ARGUMENTS/g,t||"(no arguments provided)")}function Hs(e,t){let n=[];n.push(`<command-name>/${e.name}</command-name>
3
+ "use strict";var ki=Object.create;var He=Object.defineProperty;var Si=Object.getOwnPropertyDescriptor;var yi=Object.getOwnPropertyNames;var Oi=Object.getPrototypeOf,Ri=Object.prototype.hasOwnProperty;var _i=(e,t)=>{for(var n in t)He(e,n,{get:t[n],enumerable:!0})},Bn=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of yi(t))!Ri.call(e,r)&&r!==n&&He(e,r,{get:()=>t[r],enumerable:!(o=Si(t,r))||o.enumerable});return e};var ce=(e,t,n)=>(n=e!=null?ki(Oi(e)):{},Bn(t||!e||!e.__esModule?He(n,"default",{value:e,enumerable:!0}):n,e)),Ii=e=>Bn(He({},"__esModule",{value:!0}),e);var ll={};_i(ll,{main:()=>mi});module.exports=Ii(ll);var _t=new Map;function T(e){let t=_t.get(e.event)||[];t.push(e),t.sort((n,o)=>(n.priority??100)-(o.priority??100)),_t.set(e.event,t)}function Yn(e){return _t.get(e)||[]}var Ai={ultrawork:/\b(ultrawork|ulw)\b/i,ultrathink:/\b(ultrathink|think)\b/i,olympus:/\b(olympus|orchestrate|coordinate|multi-?agent|conductor)\b/i,search:/\b(search|find|locate|lookup|explore|discover|scan|grep|query|browse|detect|trace|seek|track|pinpoint|hunt)\b|where\s+is|show\s+me|list\s+all/i,analyze:/\b(analyze|analyse|investigate|examine|research|study|deep.?dive|inspect|audit|evaluate|assess|review|diagnose|scrutinize|dissect|debug|comprehend|interpret|breakdown|understand)\b|why\s+is|how\s+does|how\s+to/i},Ni=["ultrawork","ultrathink","olympus","search","analyze"];function Wn(e){let t=e.replace(/```[\s\S]*?```/g,"");return t=t.replace(/~~~[\s\S]*?~~~/g,""),t=t.replace(/`[^`]+`/g,""),t}function Vn(e,t){let n=[];for(let o of Ni){let r=Ai[o],s=e.match(r);s&&s.index!==void 0&&n.push({type:o,keyword:s[0],position:s.index})}return n}var Kn="auto-slash-command",Ge="<auto-slash-command>",Be="</auto-slash-command>",qn=/^\/([a-zA-Z][\w-]*)\s*(.*)/,Jn=new Set(["ascent","cancel-ascent","help","clear","history","exit","quit"]);var wi=/```[\s\S]*?```/g;function Xn(e){return e.replace(wi,"")}function zn(e){let t=e.trim();if(!t.startsWith("/"))return null;let n=t.match(qn);if(!n)return null;let[o,r,s]=n;return{command:r.toLowerCase(),args:s.trim(),raw:o}}function Qn(e){return Jn.has(e.toLowerCase())}function It(e){let n=Xn(e).trim();if(!n.startsWith("/"))return null;let o=zn(n);return!o||Qn(o.command)?null:o}function At(e){return e.filter(t=>t.type==="text").map(t=>t.text||"").join(" ")}var W=require("fs"),q=require("path"),to=require("os"),Zn=(0,q.join)((0,to.homedir)(),".claude");function no(e){let t=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,n=e.match(t);if(!n)return{data:{},body:e};let[,o,r]=n,s={};for(let i of o.split(`
4
+ `)){let l=i.indexOf(":");if(l===-1)continue;let a=i.slice(0,l).trim(),c=i.slice(l+1).trim();(c.startsWith('"')&&c.endsWith('"')||c.startsWith("'")&&c.endsWith("'"))&&(c=c.slice(1,-1)),s[a]=c}return{data:s,body:r}}function eo(e,t){if(!(0,W.existsSync)(e))return[];let n;try{n=(0,W.readdirSync)(e,{withFileTypes:!0})}catch{return[]}let o=[];for(let r of n){if(!r.isFile()||!r.name.endsWith(".md"))continue;let s=(0,q.join)(e,r.name),i=(0,q.basename)(r.name,".md");try{let l=(0,W.readFileSync)(s,"utf-8"),{data:a,body:c}=no(l),u={name:i,description:a.description||"",argumentHint:a["argument-hint"],model:a.model,agent:a.agent};o.push({name:i,path:s,metadata:u,content:c,scope:t})}catch{continue}}return o}function Nt(){let e=(0,q.join)(Zn,"commands"),t=(0,q.join)(process.cwd(),".claude","commands"),n=(0,q.join)(Zn,"skills"),o=eo(e,"user"),r=eo(t,"project"),s=[];if((0,W.existsSync)(n))try{let i=(0,W.readdirSync)(n,{withFileTypes:!0});for(let l of i){if(!l.isDirectory())continue;let a=(0,q.join)(n,l.name,"SKILL.md");if((0,W.existsSync)(a))try{let c=(0,W.readFileSync)(a,"utf-8"),{data:u,body:d}=no(c),m={name:u.name||l.name,description:u.description||"",argumentHint:u["argument-hint"],model:u.model,agent:u.agent};s.push({name:u.name||l.name,path:a,metadata:m,content:d,scope:"skill"})}catch{continue}}}catch{}return[...r,...o,...s]}function Ye(e){return Nt().find(n=>n.name.toLowerCase()===e.toLowerCase())??null}function vi(e,t){return e.replace(/\$ARGUMENTS/g,t||"(no arguments provided)")}function bi(e,t){let n=[];n.push(`<command-name>/${e.name}</command-name>
5
5
  `),e.metadata.description&&n.push(`**Description**: ${e.metadata.description}
6
6
  `),t&&n.push(`**Arguments**: ${t}
7
7
  `),e.metadata.model&&n.push(`**Model**: ${e.metadata.model}
8
8
  `),e.metadata.agent&&n.push(`**Agent**: ${e.metadata.agent}
9
9
  `),n.push(`**Scope**: ${e.scope}
10
10
  `),n.push(`---
11
- `);let o=Fs(e.content||"",t);return n.push(o.trim()),t&&!e.content?.includes("$ARGUMENTS")&&(n.push(`
11
+ `);let o=vi(e.content||"",t);return n.push(o.trim()),t&&!e.content?.includes("$ARGUMENTS")&&(n.push(`
12
12
 
13
13
  ---
14
14
  `),n.push(`## User Request
15
15
  `),n.push(t)),n.join(`
16
- `)}function nt(e){let t=Oe(e.command);if(!t)return{success:!1,error:`Command "/${e.command}" not found. Available commands are in ~/.claude/commands/ or .claude/commands/`};try{return{success:!0,replacementText:Hs(t,e.args)}}catch(n){return{success:!1,error:`Failed to load command "/${e.command}": ${n instanceof Error?n.message:String(n)}`}}}function ot(){return tt().map(t=>({name:t.name,description:t.metadata.description,scope:t.scope}))}var Re=new Set;function xn(){return{name:Sn,processMessage:(e,t)=>{let n=et(t);if(n.includes(ke)||n.includes(ye))return{detected:!1};let o=Ze(n);if(!o)return{detected:!1};let r=`${e.sessionId}:${e.messageId}:${o.command}`;if(Re.has(r))return{detected:!1};Re.add(r);let s=nt(o);if(s.success&&s.replacementText){let a=`${ke}
16
+ `)}function wt(e){let t=Ye(e.command);if(!t)return{success:!1,error:`Command "/${e.command}" not found. Available commands are in ~/.claude/commands/ or .claude/commands/`};try{return{success:!0,replacementText:bi(t,e.args)}}catch(n){return{success:!1,error:`Failed to load command "/${e.command}": ${n instanceof Error?n.message:String(n)}`}}}function vt(){return Nt().map(t=>({name:t.name,description:t.metadata.description,scope:t.scope}))}var We=new Set;function oo(){return{name:Kn,processMessage:(e,t)=>{let n=At(t);if(n.includes(Ge)||n.includes(Be))return{detected:!1};let o=It(n);if(!o)return{detected:!1};let r=`${e.sessionId}:${e.messageId}:${o.command}`;if(We.has(r))return{detected:!1};We.add(r);let s=wt(o);if(s.success&&s.replacementText){let l=`${Ge}
17
17
  ${s.replacementText}
18
- ${ye}`;return{detected:!0,parsedCommand:o,injectedMessage:a}}let i=`${ke}
18
+ ${Be}`;return{detected:!0,parsedCommand:o,injectedMessage:l}}let i=`${Ge}
19
19
  [AUTO-SLASH-COMMAND ERROR]
20
20
  ${s.error}
21
21
 
22
22
  Original input: ${o.raw}
23
- ${ye}`;return{detected:!0,parsedCommand:o,injectedMessage:i}},listCommands:()=>ot(),findCommand:e=>Oe(e),clearSession:e=>{let t=[];for(let n of Re)n.startsWith(`${e}:`)&&t.push(n);for(let n of t)Re.delete(n)}}}var Gs=[/\bultrathink\b/i,/\bthink\b/i],Bs=["\uC0DD\uAC01","\uACE0\uBBFC","\uAC80\uD1A0","\uC81C\uB300\uB85C","\u601D\u8003","\u8003\u8651","\u8003\u616E","\u8003\u3048","\u719F\u8003","\u0938\u094B\u091A","\u0935\u093F\u091A\u093E\u0930","\u062A\u0641\u0643\u064A\u0631","\u062A\u0623\u0645\u0644","\u099A\u09BF\u09A8\u09CD\u09A4\u09BE","\u09AD\u09BE\u09AC\u09A8\u09BE","\u0434\u0443\u043C\u0430\u0442\u044C","\u0434\u0443\u043C\u0430\u0439","\u0440\u0430\u0437\u043C\u044B\u0448\u043B\u044F\u0442\u044C","\u0440\u0430\u0437\u043C\u044B\u0448\u043B\u044F\u0439","pensar","pense","refletir","reflita","piensa","reflexionar","reflexiona","penser","r\xE9fl\xE9chir","r\xE9fl\xE9chis","denken","denk","nachdenken","suy ngh\u0129","c\xE2n nh\u1EAFc","d\xFC\u015F\xFCn","d\xFC\u015F\xFCnmek","pensare","pensa","riflettere","rifletti","\u0E04\u0E34\u0E14","\u0E1E\u0E34\u0E08\u0E32\u0E23\u0E13\u0E32","my\u015Bl","my\u015Ble\u0107","zastan\xF3w","nadenken","berpikir","pikir","pertimbangkan","\u0434\u0443\u043C\u0430\u0442\u0438","\u0440\u043E\u0437\u0434\u0443\u043C\u0443\u0432\u0430\u0442\u0438","\u03C3\u03BA\u03AD\u03C8\u03BF\u03C5","\u03C3\u03BA\u03AD\u03C6\u03C4\u03BF\u03BC\u03B1\u03B9","myslet","mysli","p\u0159em\xFD\u0161let","g\xE2nde\u0219te","g\xE2ndi","reflect\u0103","t\xE4nka","t\xE4nk","fundera","gondolkodj","gondolkodni","ajattele","ajatella","pohdi","t\xE6nk","t\xE6nke","overvej","tenk","tenke","gruble","\u05D7\u05E9\u05D5\u05D1","\u05DC\u05D7\u05E9\u05D5\u05D1","\u05DC\u05D4\u05E8\u05D4\u05E8"],Ys=Bs.map(e=>new RegExp(e,"i")),Ws=[...Gs,...Ys],Ks=/```[\s\S]*?```/g,Vs=/`[^`]+`/g;function qs(e){return e.replace(Ks,"").replace(Vs,"")}function wn(e){let t=qs(e);return Ws.some(n=>n.test(t))}function vn(e){return e.filter(t=>t.type==="text").map(t=>t.text||"").join("")}function rt(e){let t=e.indexOf("/");return t===-1?{prefix:"",base:e}:{prefix:e.slice(0,t+1),base:e.slice(t+1)}}function st(e){return e.replace(/\.(\d+)/g,"-$1")}var Pn={"claude-sonnet-4-5":"claude-sonnet-4-5-high","claude-opus-4-5":"claude-opus-4-5-high","claude-3-5-sonnet":"claude-3-5-sonnet-high","claude-3-opus":"claude-3-opus-high","gpt-4":"gpt-4-high","gpt-4-turbo":"gpt-4-turbo-high","gpt-4o":"gpt-4o-high","gpt-5":"gpt-5-high","gpt-5-mini":"gpt-5-mini-high","gemini-2-pro":"gemini-2-pro-high","gemini-3-pro":"gemini-3-pro-high","gemini-3-flash":"gemini-3-flash-high"},bn=new Set(Object.values(Pn)),Dn={anthropic:{thinking:{type:"enabled",budgetTokens:64e3},maxTokens:128e3},"amazon-bedrock":{reasoningConfig:{type:"enabled",budgetTokens:32e3},maxTokens:64e3},google:{providerOptions:{google:{thinkingConfig:{thinkingLevel:"HIGH"}}}},openai:{reasoning_effort:"high"}},Js={anthropic:["claude-sonnet-4","claude-opus-4","claude-3"],"amazon-bedrock":["claude","anthropic"],google:["gemini-2","gemini-3"],openai:["gpt-4","gpt-5","o1","o3"]};function Ln(e){let t=st(e),{prefix:n,base:o}=rt(t);if(bn.has(o)||o.endsWith("-high"))return null;let r=Pn[o];return r?n+r:null}function it(e){let t=st(e),{base:n}=rt(t);return bn.has(n)||n.endsWith("-high")}function zs(e,t){if(e==="github-copilot"){let n=t.toLowerCase();if(n.includes("claude"))return"anthropic";if(n.includes("gemini"))return"google";if(n.includes("gpt")||n.includes("o1")||n.includes("o3"))return"openai"}return e}function Xs(e){return e in Dn}function Mn(e,t){let n=st(t),{base:o}=rt(n);if(it(n))return null;let r=zs(e,t);if(!Xs(r))return null;let s=Dn[r],i=Js[r];if(!i)return null;let a=o.toLowerCase();return i.some(u=>a.includes(u.toLowerCase()))?s:null}var j=new Map;function Qs(e){j.delete(e)}function Un(){return{processChatParams:(e,t)=>{let n=vn(t.parts),o={requested:!1,modelSwitched:!1,thinkingConfigInjected:!1};if(!wn(n))return j.set(e,o),o;o.requested=!0;let r=t.message.model;if(!r||(o.providerId=r.providerId,o.modelId=r.modelId,it(r.modelId)))return j.set(e,o),o;let s=Ln(r.modelId),i=Mn(r.providerId,r.modelId);return s&&(t.message.model={providerId:r.providerId,modelId:s},o.modelSwitched=!0),i&&(Object.assign(t.message,i),o.thinkingConfigInjected=!0),j.set(e,o),o},onSessionDeleted:e=>{j.delete(e)},isRequested:e=>j.get(e)?.requested??!1,getState:e=>j.get(e),clear:Qs}}var h=require("fs"),q=require("path"),at=require("os");function ct(e){let t=e||process.cwd(),n=(0,q.join)(t,".olympus");return(0,q.join)(n,"ultrawork-state.json")}function ut(){return(0,q.join)((0,at.homedir)(),".claude","ultrawork-state.json")}function Zs(e){let t=e||process.cwd(),n=(0,q.join)(t,".olympus");(0,h.existsSync)(n)||(0,h.mkdirSync)(n,{recursive:!0})}function ei(){let e=(0,q.join)((0,at.homedir)(),".claude");(0,h.existsSync)(e)||(0,h.mkdirSync)(e,{recursive:!0})}function G(e){let t=ct(e);if((0,h.existsSync)(t))try{let o=(0,h.readFileSync)(t,"utf-8");return JSON.parse(o)}catch{}let n=ut();if((0,h.existsSync)(n))try{let o=(0,h.readFileSync)(n,"utf-8");return JSON.parse(o)}catch{return null}return null}function $n(e,t){try{Zs(t);let n=ct(t);(0,h.writeFileSync)(n,JSON.stringify(e,null,2)),ei();let o=ut();return(0,h.writeFileSync)(o,JSON.stringify(e,null,2)),!0}catch{return!1}}function jn(e,t,n){let o={active:!0,started_at:new Date().toISOString(),original_prompt:e,session_id:t,reinforcement_count:0,last_checked_at:new Date().toISOString()};return $n(o,n)}function Fn(e){let t=ct(e);if((0,h.existsSync)(t))try{(0,h.unlinkSync)(t)}catch{}let n=ut();if((0,h.existsSync)(n))try{return(0,h.unlinkSync)(n),!0}catch{return!1}return!0}function Hn(e){let t=G(e);return!t||!t.active?null:(t.reinforcement_count+=1,t.last_checked_at=new Date().toISOString(),$n(t,e)?t:null)}function Gn(e){return`<ultrawork-persistence>
23
+ ${Be}`;return{detected:!0,parsedCommand:o,injectedMessage:i}},listCommands:()=>vt(),findCommand:e=>Ye(e),clearSession:e=>{let t=[];for(let n of We)n.startsWith(`${e}:`)&&t.push(n);for(let n of t)We.delete(n)}}}var xi=[/\bultrathink\b/i,/\bthink\b/i],Ci=["\uC0DD\uAC01","\uACE0\uBBFC","\uAC80\uD1A0","\uC81C\uB300\uB85C","\u601D\u8003","\u8003\u8651","\u8003\u616E","\u8003\u3048","\u719F\u8003","\u0938\u094B\u091A","\u0935\u093F\u091A\u093E\u0930","\u062A\u0641\u0643\u064A\u0631","\u062A\u0623\u0645\u0644","\u099A\u09BF\u09A8\u09CD\u09A4\u09BE","\u09AD\u09BE\u09AC\u09A8\u09BE","\u0434\u0443\u043C\u0430\u0442\u044C","\u0434\u0443\u043C\u0430\u0439","\u0440\u0430\u0437\u043C\u044B\u0448\u043B\u044F\u0442\u044C","\u0440\u0430\u0437\u043C\u044B\u0448\u043B\u044F\u0439","pensar","pense","refletir","reflita","piensa","reflexionar","reflexiona","penser","r\xE9fl\xE9chir","r\xE9fl\xE9chis","denken","denk","nachdenken","suy ngh\u0129","c\xE2n nh\u1EAFc","d\xFC\u015F\xFCn","d\xFC\u015F\xFCnmek","pensare","pensa","riflettere","rifletti","\u0E04\u0E34\u0E14","\u0E1E\u0E34\u0E08\u0E32\u0E23\u0E13\u0E32","my\u015Bl","my\u015Ble\u0107","zastan\xF3w","nadenken","berpikir","pikir","pertimbangkan","\u0434\u0443\u043C\u0430\u0442\u0438","\u0440\u043E\u0437\u0434\u0443\u043C\u0443\u0432\u0430\u0442\u0438","\u03C3\u03BA\u03AD\u03C8\u03BF\u03C5","\u03C3\u03BA\u03AD\u03C6\u03C4\u03BF\u03BC\u03B1\u03B9","myslet","mysli","p\u0159em\xFD\u0161let","g\xE2nde\u0219te","g\xE2ndi","reflect\u0103","t\xE4nka","t\xE4nk","fundera","gondolkodj","gondolkodni","ajattele","ajatella","pohdi","t\xE6nk","t\xE6nke","overvej","tenk","tenke","gruble","\u05D7\u05E9\u05D5\u05D1","\u05DC\u05D7\u05E9\u05D5\u05D1","\u05DC\u05D4\u05E8\u05D4\u05E8"],Pi=Ci.map(e=>new RegExp(e,"i")),Li=[...xi,...Pi],Di=/```[\s\S]*?```/g,Mi=/`[^`]+`/g;function Ui(e){return e.replace(Di,"").replace(Mi,"")}function ro(e){let t=Ui(e);return Li.some(n=>n.test(t))}function so(e){return e.filter(t=>t.type==="text").map(t=>t.text||"").join("")}function bt(e){let t=e.indexOf("/");return t===-1?{prefix:"",base:e}:{prefix:e.slice(0,t+1),base:e.slice(t+1)}}function xt(e){return e.replace(/\.(\d+)/g,"-$1")}var io={"claude-sonnet-4-5":"claude-sonnet-4-5-high","claude-opus-4-5":"claude-opus-4-5-high","claude-3-5-sonnet":"claude-3-5-sonnet-high","claude-3-opus":"claude-3-opus-high","gpt-4":"gpt-4-high","gpt-4-turbo":"gpt-4-turbo-high","gpt-4o":"gpt-4o-high","gpt-5":"gpt-5-high","gpt-5-mini":"gpt-5-mini-high","gemini-2-pro":"gemini-2-pro-high","gemini-3-pro":"gemini-3-pro-high","gemini-3-flash":"gemini-3-flash-high"},ao=new Set(Object.values(io)),co={anthropic:{thinking:{type:"enabled",budgetTokens:64e3},maxTokens:128e3},"amazon-bedrock":{reasoningConfig:{type:"enabled",budgetTokens:32e3},maxTokens:64e3},google:{providerOptions:{google:{thinkingConfig:{thinkingLevel:"HIGH"}}}},openai:{reasoning_effort:"high"}},ji={anthropic:["claude-sonnet-4","claude-opus-4","claude-3"],"amazon-bedrock":["claude","anthropic"],google:["gemini-2","gemini-3"],openai:["gpt-4","gpt-5","o1","o3"]};function lo(e){let t=xt(e),{prefix:n,base:o}=bt(t);if(ao.has(o)||o.endsWith("-high"))return null;let r=io[o];return r?n+r:null}function Ct(e){let t=xt(e),{base:n}=bt(t);return ao.has(n)||n.endsWith("-high")}function $i(e,t){if(e==="github-copilot"){let n=t.toLowerCase();if(n.includes("claude"))return"anthropic";if(n.includes("gemini"))return"google";if(n.includes("gpt")||n.includes("o1")||n.includes("o3"))return"openai"}return e}function Fi(e){return e in co}function uo(e,t){let n=xt(t),{base:o}=bt(n);if(Ct(n))return null;let r=$i(e,t);if(!Fi(r))return null;let s=co[r],i=ji[r];if(!i)return null;let l=o.toLowerCase();return i.some(c=>l.includes(c.toLowerCase()))?s:null}var Q=new Map;function Hi(e){Q.delete(e)}function po(){return{processChatParams:(e,t)=>{let n=so(t.parts),o={requested:!1,modelSwitched:!1,thinkingConfigInjected:!1};if(!ro(n))return Q.set(e,o),o;o.requested=!0;let r=t.message.model;if(!r||(o.providerId=r.providerId,o.modelId=r.modelId,Ct(r.modelId)))return Q.set(e,o),o;let s=lo(r.modelId),i=uo(r.providerId,r.modelId);return s&&(t.message.model={providerId:r.providerId,modelId:s},o.modelSwitched=!0),i&&(Object.assign(t.message,i),o.thinkingConfigInjected=!0),Q.set(e,o),o},onSessionDeleted:e=>{Q.delete(e)},isRequested:e=>Q.get(e)?.requested??!1,getState:e=>Q.get(e),clear:Hi}}var _=require("fs"),le=require("path"),Pt=require("os");function Lt(e){let t=e||process.cwd(),n=(0,le.join)(t,".olympus");return(0,le.join)(n,"ultrawork-state.json")}function Dt(){return(0,le.join)((0,Pt.homedir)(),".claude","ultrawork-state.json")}function Gi(e){let t=e||process.cwd(),n=(0,le.join)(t,".olympus");(0,_.existsSync)(n)||(0,_.mkdirSync)(n,{recursive:!0})}function Bi(){let e=(0,le.join)((0,Pt.homedir)(),".claude");(0,_.existsSync)(e)||(0,_.mkdirSync)(e,{recursive:!0})}function ne(e){let t=Lt(e);if((0,_.existsSync)(t))try{let o=(0,_.readFileSync)(t,"utf-8");return JSON.parse(o)}catch{}let n=Dt();if((0,_.existsSync)(n))try{let o=(0,_.readFileSync)(n,"utf-8");return JSON.parse(o)}catch{return null}return null}function fo(e,t){try{Gi(t);let n=Lt(t);(0,_.writeFileSync)(n,JSON.stringify(e,null,2)),Bi();let o=Dt();return(0,_.writeFileSync)(o,JSON.stringify(e,null,2)),!0}catch{return!1}}function mo(e,t,n){let o={active:!0,started_at:new Date().toISOString(),original_prompt:e,session_id:t,reinforcement_count:0,last_checked_at:new Date().toISOString()};return fo(o,n)}function go(e){let t=Lt(e);if((0,_.existsSync)(t))try{(0,_.unlinkSync)(t)}catch{}let n=Dt();if((0,_.existsSync)(n))try{return(0,_.unlinkSync)(n),!0}catch{return!1}return!0}function ho(e){let t=ne(e);return!t||!t.active?null:(t.reinforcement_count+=1,t.last_checked_at=new Date().toISOString(),fo(t,e)?t:null)}function To(e){return`<ultrawork-persistence>
24
24
 
25
25
  [ULTRAWORK MODE STILL ACTIVE - Reinforcement #${e.reinforcement_count+1}]
26
26
 
@@ -41,7 +41,7 @@ Original task: ${e.original_prompt}
41
41
 
42
42
  ---
43
43
 
44
- `}var Bn=require("os"),L=require("path");function z(){return process.platform==="win32"}function ti(){return(0,L.join)((0,Bn.homedir)(),".claude")}function J(){return(0,L.join)(ti(),"hooks")}var Yn=`<ultrawork-mode>
44
+ `}var Eo=require("os"),v=require("path");function V(){return process.platform==="win32"}function Yi(){return(0,v.join)((0,Eo.homedir)(),".claude")}function P(){return(0,v.join)(Yi(),"hooks")}var ko=`<ultrawork-mode>
45
45
 
46
46
  **MANDATORY**: You MUST say "ULTRAWORK MODE ENABLED!" to the user as your first response when this mode activates. This is non-negotiable.
47
47
 
@@ -132,7 +132,7 @@ THE USER ASKED FOR X. DELIVER EXACTLY X. NOT A SUBSET. NOT A DEMO. NOT A STARTIN
132
132
 
133
133
  ---
134
134
 
135
- `,Wn=`<think-mode>
135
+ `,So=`<think-mode>
136
136
 
137
137
  **ULTRATHINK MODE ENABLED** - Extended reasoning activated.
138
138
 
@@ -148,7 +148,7 @@ Use your extended thinking capabilities to provide the most thorough and well-re
148
148
 
149
149
  ---
150
150
 
151
- `;var Kn=`<search-mode>
151
+ `;var yo=`<search-mode>
152
152
  MAXIMIZE SEARCH EFFORT. Launch multiple background agents IN PARALLEL:
153
153
  - explore agents (codebase patterns, file structures)
154
154
  - librarian agents (remote repos, official docs, GitHub examples)
@@ -158,7 +158,7 @@ NEVER stop at first result - be exhaustive.
158
158
 
159
159
  ---
160
160
 
161
- `,Vn=`<analyze-mode>
161
+ `,Oo=`<analyze-mode>
162
162
  ANALYSIS MODE. Gather context before diving deep:
163
163
 
164
164
  CONTEXT GATHERING (parallel):
@@ -174,14 +174,14 @@ SYNTHESIZE findings before proceeding.
174
174
 
175
175
  ---
176
176
 
177
- `,qn=`[SYSTEM REMINDER - TODO CONTINUATION]
177
+ `,Ro=`[SYSTEM REMINDER - TODO CONTINUATION]
178
178
 
179
179
  Incomplete tasks remain in your todo list. Continue working on the next pending task.
180
180
 
181
181
  - Proceed without asking for permission
182
182
  - Mark each task complete when finished
183
- - Do not stop until all tasks are done`;var vc={hooks:{UserPromptSubmit:[{hooks:[{type:"command",command:z()?'node "%USERPROFILE%\\.claude\\hooks\\keyword-detector.mjs"':'node "$HOME/.claude/hooks/keyword-detector.mjs"'}]}],SessionStart:[{hooks:[{type:"command",command:z()?'node "%USERPROFILE%\\.claude\\hooks\\session-start.mjs"':'node "$HOME/.claude/hooks/session-start.mjs"'}]}],Stop:[{hooks:[{type:"command",command:z()?'node "%USERPROFILE%\\.claude\\hooks\\persistent-mode.mjs"':'node "$HOME/.claude/hooks/persistent-mode.mjs"'}]}]}},Pc={hooks:{UserPromptSubmit:[{hooks:[{type:"command",command:z()?`node "${(0,L.join)(J(),"olympus-hooks.cjs")}" --event=UserPromptSubmit`:`node "${(0,L.join)(J(),"olympus-hooks.cjs")}" --event=UserPromptSubmit`}]}],SessionStart:[{hooks:[{type:"command",command:z()?`node "${(0,L.join)(J(),"olympus-hooks.cjs")}" --event=SessionStart`:`node "${(0,L.join)(J(),"olympus-hooks.cjs")}" --event=SessionStart`}]}],Stop:[{hooks:[{type:"command",command:z()?`node "${(0,L.join)(J(),"olympus-hooks.cjs")}" --event=Stop`:`node "${(0,L.join)(J(),"olympus-hooks.cjs")}" --event=Stop`}]}]}};var Zn=require("path");var Jn=require("os"),B=require("path"),S=require("fs");function Y(){return(0,B.join)((0,Jn.homedir)(),".claude","olympus","learning")}function ce(e){return(0,B.join)(e,".olympus","learning")}function zn(e){let t=Y();if((0,S.existsSync)(t)||(0,S.mkdirSync)(t,{recursive:!0}),e){let n=ce(e);(0,S.existsSync)(n)||(0,S.mkdirSync)(n,{recursive:!0})}}function X(e){zn();let t=(0,B.join)(Y(),"feedback-log.jsonl");(0,S.appendFileSync)(t,JSON.stringify(e)+`
184
- `,"utf-8")}function Q(e,t){if(!(0,S.existsSync)(e))return t;try{return JSON.parse((0,S.readFileSync)(e,"utf-8"))}catch(n){return console.error(`[Olympus Learning] Failed to read ${e}:`,n),t}}function Xn(e,t){try{let n=(0,B.dirname)(e);n&&!(0,S.existsSync)(n)&&(0,S.mkdirSync)(n,{recursive:!0}),(0,S.writeFileSync)(e,JSON.stringify(t,null,2),"utf-8")}catch(n){console.error(`[Olympus Learning] Failed to write ${e}:`,n)}}var eo=require("crypto"),ni=10,oi=1800*1e3;function to(e){return(0,Zn.join)(e,".olympus","session-state.json")}function Qn(e){return{session_id:e||(0,eo.randomUUID)(),started_at:new Date().toISOString(),last_updated:new Date().toISOString(),recent_prompts:[],pending_completion:null,todo_snapshot:null}}function Z(e,t){let n=to(e),o=Q(n,null);if(!o)return Qn(t);let r=new Date(o.last_updated).getTime();return Date.now()-r>oi?Qn(t):o}function ee(e,t){let n=to(e);t.last_updated=new Date().toISOString(),Xn(n,t)}function no(e,t,n){let o={prompt:t,timestamp:new Date().toISOString(),detected_feedback:n};return e.recent_prompts=[o,...e.recent_prompts].slice(0,ni),e.last_updated=new Date().toISOString(),e}function oo(e){return e.pending_completion=null,e.last_updated=new Date().toISOString(),e}function Ie(e){if(!e.pending_completion?.claimed_at)return!1;let t=new Date(e.pending_completion.claimed_at).getTime();return Date.now()-t<300*1e3}var ro=require("crypto"),ri={correction:[{regex:/no[,.]?\s*(that's|thats)?\s*(not|wrong)/i,confidence:.9},{regex:/that's\s*(incorrect|not right|not what)/i,confidence:.9},{regex:/you\s*(misunderstood|got it wrong)/i,confidence:.85},{regex:/actually,?\s*(I|it|the)/i,confidence:.6}],rejection:[{regex:/\b(stop|cancel|abort|halt)\b/i,confidence:.95},{regex:/don't\s*(do|want|need)\s*(that|this)/i,confidence:.85},{regex:/never\s*mind/i,confidence:.9},{regex:/forget\s*(it|that|about)/i,confidence:.8}],clarification:[{regex:/I\s*(meant|wanted|asked for)/i,confidence:.85},{regex:/what I\s*(mean|want|need)/i,confidence:.8},{regex:/to clarify/i,confidence:.9},{regex:/let me\s*(rephrase|explain|be clearer)/i,confidence:.85}],explicit_preference:[{regex:/always\s+(use|do|include|add|prefer)/i,confidence:.95},{regex:/never\s+(use|do|include|add)/i,confidence:.95},{regex:/I\s*(prefer|like|want)\s*(you to)?/i,confidence:.7},{regex:/from now on/i,confidence:.9},{regex:/in the future,?\s*(please|always)/i,confidence:.85}],praise:[{regex:/\bperfect\b/i,confidence:.9},{regex:/exactly(\s+what I (wanted|needed))?/i,confidence:.85},{regex:/great(\s+job)?/i,confidence:.7},{regex:/\bthanks?\b/i,confidence:.5},{regex:/looks?\s+good/i,confidence:.75}],enhancement:[{regex:/also\s+(add|include|do)/i,confidence:.7},{regex:/can you (also|additionally)/i,confidence:.7},{regex:/one more thing/i,confidence:.75}]};function lt(e){let t=e.replace(/```[\s\S]*?```/g,"").replace(/`[^`]+`/g,""),n=null;for(let[o,r]of Object.entries(ri))for(let{regex:s,confidence:i}of r)s.test(t)&&(!n||i>n.confidence)&&(n={category:o,confidence:i});return n}async function so(e){let{prompt:t,directory:n,sessionId:o}=e;if(!t||!n)return;let r=Z(n,o),s=lt(t),i=no(r,t,s?.category);if(s&&Ie(r)){let a={id:(0,ro.randomUUID)(),timestamp:new Date().toISOString(),session_id:r.session_id,project_path:n,event_type:s.category==="explicit_preference"?"explicit_preference":"revision",original_task:r.pending_completion?.task_description,agent_used:r.pending_completion?.agent_used,user_message:t,feedback_category:s.category,confidence:s.confidence};X(a)}ee(n,i)}var io=require("crypto");async function ao(e){let{prompt:t,directory:n,sessionId:o}=e;if(!t||!n)return;let r=Z(n,o);if(!Ie(r))return;let s=lt(t),i=s?.category==="praise"&&s.confidence>.7,a=si(t,r.pending_completion?.task_description||"");if(i||a){let c={id:(0,io.randomUUID)(),timestamp:new Date().toISOString(),session_id:r.session_id,project_path:n,event_type:"success",original_task:r.pending_completion?.task_description,agent_used:r.pending_completion?.agent_used,user_message:t,feedback_category:i?"praise":"enhancement",confidence:i?s.confidence:.6};X(c);let u=oo(r);ee(n,u)}}function si(e,t){let n=c=>new Set(c.toLowerCase().replace(/[^\w\s]/g,"").split(/\s+/).filter(u=>u.length>3)),o=n(e),r=n(t),s=new Set([...o].filter(c=>r.has(c))),i=new Set([...o,...r]);return(i.size>0?s.size/i.size:0)<.2}function co(e){return e.prompt?e.prompt:e.message?.content?e.message.content:e.parts?e.parts.filter(t=>t.type==="text"&&t.text).map(t=>t.text).join(" "):""}function uo(){m({name:"keywordDetector",event:"UserPromptSubmit",priority:10,handler:e=>{let t=co(e);if(!t)return{continue:!0};let n=Tn(t),o=En(n);if(o.length===0)return{continue:!0};let r=o.some(c=>c.type==="ultrawork"),s=o.some(c=>c.type==="ultrathink"),i=o.some(c=>c.type==="search"),a=o.some(c=>c.type==="analyze");return r?(jn(t,e.sessionId,e.directory||process.cwd()),{continue:!0,message:Yn}):s?{continue:!0,message:Wn}:i?{continue:!0,message:Kn}:a?{continue:!0,message:Vn}:{continue:!0}}}),m({name:"autoSlashCommand",event:"UserPromptSubmit",priority:20,handler:e=>{if(!e.parts)return{continue:!0};let n=xn().processMessage({sessionId:e.sessionId||""},e.parts);return n.detected&&n.injectedMessage?{continue:!0,message:n.injectedMessage}:{continue:!0}}}),m({name:"thinkMode",event:"UserPromptSubmit",priority:30,handler:e=>{if(!e.message||!e.parts)return{continue:!0};let t=Un(),n=e.sessionId||"default",o={parts:e.parts,message:{model:e.message.model&&e.message.model.providerId&&e.message.model.modelId?{providerId:e.message.model.providerId,modelId:e.message.model.modelId}:void 0}},r=t.processChatParams(n,o);return r.requested&&r.modelSwitched?{continue:!0,message:"[Think Mode Activated] Switched to high-reasoning model variant."}:{continue:!0}}}),m({name:"learningFeedbackCapture",event:"UserPromptSubmit",priority:100,handler:async e=>{let t=co(e);return!t||!e.directory?{continue:!0}:(Promise.resolve().then(async()=>{try{await so({prompt:t,directory:e.directory,sessionId:e.sessionId}),await ao({prompt:t,directory:e.directory,sessionId:e.sessionId})}catch(n){console.error("[Olympus Learning]",n)}}),{continue:!0})}})}var W=require("fs"),F=require("path"),lo=require("os");function ii(e,t){let n=(0,F.join)((0,lo.homedir)(),".claude"),o=[];e&&(o.push((0,F.join)(n,"sessions",e,"todos.json")),o.push((0,F.join)(n,"todos",`${e}.json`))),t&&(o.push((0,F.join)(t,".olympus","todos.json")),o.push((0,F.join)(t,".claude","todos.json")));let r=(0,F.join)(n,"todos");if((0,W.existsSync)(r))try{let s=(0,W.readdirSync)(r);for(let i of s)i.endsWith(".json")&&o.push((0,F.join)(r,i))}catch{}return o}function ai(e){try{let t=(0,W.readFileSync)(e,"utf-8"),n=JSON.parse(t);return Array.isArray(n)?n.filter(o=>o&&typeof o.content=="string"&&typeof o.status=="string"):n.todos&&Array.isArray(n.todos)?n.todos.filter(o=>{let r=o;return r&&typeof r.content=="string"&&typeof r.status=="string"}):[]}catch{return[]}}function ci(e){return e.status!=="completed"&&e.status!=="cancelled"}async function ue(e,t){let n=ii(e,t),o=new Set,r=[],s=[];for(let i of n){if(!(0,W.existsSync)(i))continue;let a=ai(i);for(let c of a){let u=`${c.content}:${c.status}`;o.has(u)||(o.add(u),r.push(c),ci(c)&&s.push(c))}}return{count:s.length,todos:s,total:r.length}}function po(e){let t=e.todos.find(n=>n.status==="in_progress");return t||(e.todos.find(n=>n.status==="pending")??null)}var Ce=require("path");var mo=500;function fo(e){let t=Q((0,Ce.join)(Y(),"user-preferences.json"),null),n=Q((0,Ce.join)(ce(e),"patterns.json"),null),o=Q((0,Ce.join)(Y(),"agent-performance.json"),{}),r=[];t&&ui(t)&&r.push(li(t)),n&&n.conventions.length>0&&r.push(di(n)),t?.recurring_corrections&&t.recurring_corrections.length>0&&r.push(pi(t.recurring_corrections.slice(0,5)));let s=Object.values(o).filter(a=>a.weak_areas.length>0);if(s.length>0&&r.push(mi(s)),r.length===0)return"";let i=`<learned-context>
183
+ - Do not stop until all tasks are done`;var Ml={hooks:{UserPromptSubmit:[{hooks:[{type:"command",command:V()?'node "%USERPROFILE%\\.claude\\hooks\\keyword-detector.mjs"':'node "$HOME/.claude/hooks/keyword-detector.mjs"'}]}],SessionStart:[{hooks:[{type:"command",command:V()?'node "%USERPROFILE%\\.claude\\hooks\\session-start.mjs"':'node "$HOME/.claude/hooks/session-start.mjs"'}]}],Stop:[{hooks:[{type:"command",command:V()?'node "%USERPROFILE%\\.claude\\hooks\\persistent-mode.mjs"':'node "$HOME/.claude/hooks/persistent-mode.mjs"'}]}]}},Ul={hooks:{UserPromptSubmit:[{hooks:[{type:"command",command:V()?`node "${(0,v.join)(P(),"olympus-hooks.cjs")}" --event=UserPromptSubmit`:`node "${(0,v.join)(P(),"olympus-hooks.cjs")}" --event=UserPromptSubmit`}]}],SessionStart:[{hooks:[{type:"command",command:V()?`node "${(0,v.join)(P(),"olympus-hooks.cjs")}" --event=SessionStart`:`node "${(0,v.join)(P(),"olympus-hooks.cjs")}" --event=SessionStart`}]}],Stop:[{hooks:[{type:"command",command:V()?`node "${(0,v.join)(P(),"olympus-hooks.cjs")}" --event=Stop`:`node "${(0,v.join)(P(),"olympus-hooks.cjs")}" --event=Stop`}]}],PreToolUse:[{hooks:[{type:"command",command:V()?`node "${(0,v.join)(P(),"olympus-hooks.cjs")}" --event=PreToolUse`:`node "${(0,v.join)(P(),"olympus-hooks.cjs")}" --event=PreToolUse`}]}],PostToolUse:[{hooks:[{type:"command",command:V()?`node "${(0,v.join)(P(),"olympus-hooks.cjs")}" --event=PostToolUse`:`node "${(0,v.join)(P(),"olympus-hooks.cjs")}" --event=PostToolUse`}]}],PostToolUseFailure:[{hooks:[{type:"command",command:V()?`node "${(0,v.join)(P(),"olympus-hooks.cjs")}" --event=PostToolUseFailure`:`node "${(0,v.join)(P(),"olympus-hooks.cjs")}" --event=PostToolUseFailure`}]}],Notification:[{hooks:[{type:"command",command:V()?`node "${(0,v.join)(P(),"olympus-hooks.cjs")}" --event=Notification`:`node "${(0,v.join)(P(),"olympus-hooks.cjs")}" --event=Notification`}]}]}};var wo=require("path");var _o=require("os"),oe=require("path"),C=require("fs"),Wi=require("crypto");function re(){return(0,oe.join)((0,_o.homedir)(),".claude","olympus","learning")}function Ie(e){return(0,oe.join)(e,".olympus","learning")}function Io(e){let t=re();if((0,C.existsSync)(t)||(0,C.mkdirSync)(t,{recursive:!0}),e){let n=Ie(e);(0,C.existsSync)(n)||(0,C.mkdirSync)(n,{recursive:!0})}}function ue(e){Io();let t=(0,oe.join)(re(),"feedback-log.jsonl");(0,C.appendFileSync)(t,JSON.stringify(e)+`
184
+ `,"utf-8")}function de(e,t){if(!(0,C.existsSync)(e))return t;try{return JSON.parse((0,C.readFileSync)(e,"utf-8"))}catch(n){return console.error(`[Olympus Learning] Failed to read ${e}:`,n),t}}function Ao(e,t){try{let n=(0,oe.dirname)(e);n&&!(0,C.existsSync)(n)&&(0,C.mkdirSync)(n,{recursive:!0}),(0,C.writeFileSync)(e,JSON.stringify(t,null,2),"utf-8")}catch(n){console.error(`[Olympus Learning] Failed to write ${e}:`,n)}}var vo=require("crypto"),Vi=10,Ki=1800*1e3;function bo(e){return(0,wo.join)(e,".olympus","session-state.json")}function No(e){return{session_id:e||(0,vo.randomUUID)(),started_at:new Date().toISOString(),last_updated:new Date().toISOString(),recent_prompts:[],pending_completion:null,todo_snapshot:null}}function pe(e,t){let n=bo(e),o=de(n,null);if(!o)return No(t);let r=new Date(o.last_updated).getTime();return Date.now()-r>Ki?No(t):o}function fe(e,t){let n=bo(e);t.last_updated=new Date().toISOString(),Ao(n,t)}function xo(e,t,n){let o={prompt:t,timestamp:new Date().toISOString(),detected_feedback:n};return e.recent_prompts=[o,...e.recent_prompts].slice(0,Vi),e.last_updated=new Date().toISOString(),e}function Co(e){return e.pending_completion=null,e.last_updated=new Date().toISOString(),e}function Ve(e){if(!e.pending_completion?.claimed_at)return!1;let t=new Date(e.pending_completion.claimed_at).getTime();return Date.now()-t<300*1e3}var Po=require("crypto"),qi={correction:[{regex:/no[,.]?\s*(that's|thats)?\s*(not|wrong)/i,confidence:.9},{regex:/that's\s*(incorrect|not right|not what)/i,confidence:.9},{regex:/you\s*(misunderstood|got it wrong)/i,confidence:.85},{regex:/actually,?\s*(I|it|the)/i,confidence:.6}],rejection:[{regex:/\b(stop|cancel|abort|halt)\b/i,confidence:.95},{regex:/don't\s*(do|want|need)\s*(that|this)/i,confidence:.85},{regex:/never\s*mind/i,confidence:.9},{regex:/forget\s*(it|that|about)/i,confidence:.8}],clarification:[{regex:/I\s*(meant|wanted|asked for)/i,confidence:.85},{regex:/what I\s*(mean|want|need)/i,confidence:.8},{regex:/to clarify/i,confidence:.9},{regex:/let me\s*(rephrase|explain|be clearer)/i,confidence:.85}],explicit_preference:[{regex:/always\s+(use|do|include|add|prefer)/i,confidence:.95},{regex:/never\s+(use|do|include|add)/i,confidence:.95},{regex:/I\s*(prefer|like|want)\s*(you to)?/i,confidence:.7},{regex:/from now on/i,confidence:.9},{regex:/in the future,?\s*(please|always)/i,confidence:.85}],praise:[{regex:/\bperfect\b/i,confidence:.9},{regex:/exactly(\s+what I (wanted|needed))?/i,confidence:.85},{regex:/great(\s+job)?/i,confidence:.7},{regex:/\bthanks?\b/i,confidence:.5},{regex:/looks?\s+good/i,confidence:.75}],enhancement:[{regex:/also\s+(add|include|do)/i,confidence:.7},{regex:/can you (also|additionally)/i,confidence:.7},{regex:/one more thing/i,confidence:.75}]};function Mt(e){let t=e.replace(/```[\s\S]*?```/g,"").replace(/`[^`]+`/g,""),n=null;for(let[o,r]of Object.entries(qi))for(let{regex:s,confidence:i}of r)s.test(t)&&(!n||i>n.confidence)&&(n={category:o,confidence:i});return n}async function Lo(e){let{prompt:t,directory:n,sessionId:o}=e;if(!t||!n)return;let r=pe(n,o),s=Mt(t),i=xo(r,t,s?.category);if(s&&Ve(r)){let l={id:(0,Po.randomUUID)(),timestamp:new Date().toISOString(),session_id:r.session_id,project_path:n,event_type:s.category==="explicit_preference"?"explicit_preference":"revision",original_task:r.pending_completion?.task_description,agent_used:r.pending_completion?.agent_used,user_message:t,feedback_category:s.category,confidence:s.confidence};ue(l)}fe(n,i)}var Do=require("crypto");async function Mo(e){let{prompt:t,directory:n,sessionId:o}=e;if(!t||!n)return;let r=pe(n,o);if(!Ve(r))return;let s=Mt(t),i=s?.category==="praise"&&s.confidence>.7,l=Ji(t,r.pending_completion?.task_description||"");if(i||l){let a={id:(0,Do.randomUUID)(),timestamp:new Date().toISOString(),session_id:r.session_id,project_path:n,event_type:"success",original_task:r.pending_completion?.task_description,agent_used:r.pending_completion?.agent_used,user_message:t,feedback_category:i?"praise":"enhancement",confidence:i?s.confidence:.6};ue(a);let c=Co(r);fe(n,c)}}function Ji(e,t){let n=a=>new Set(a.toLowerCase().replace(/[^\w\s]/g,"").split(/\s+/).filter(c=>c.length>3)),o=n(e),r=n(t),s=new Set([...o].filter(a=>r.has(a))),i=new Set([...o,...r]);return(i.size>0?s.size/i.size:0)<.2}function Uo(e){return e.prompt?e.prompt:e.message?.content?e.message.content:e.parts?e.parts.filter(t=>t.type==="text"&&t.text).map(t=>t.text).join(" "):""}function jo(){T({name:"keywordDetector",event:"UserPromptSubmit",priority:10,handler:e=>{let t=Uo(e);if(!t)return{continue:!0};let n=Wn(t),o=Vn(n);if(o.length===0)return{continue:!0};let r=o.some(a=>a.type==="ultrawork"),s=o.some(a=>a.type==="ultrathink"),i=o.some(a=>a.type==="search"),l=o.some(a=>a.type==="analyze");return r?(mo(t,e.sessionId,e.directory||process.cwd()),{continue:!0,message:ko}):s?{continue:!0,message:So}:i?{continue:!0,message:yo}:l?{continue:!0,message:Oo}:{continue:!0}}}),T({name:"autoSlashCommand",event:"UserPromptSubmit",priority:20,handler:e=>{if(!e.parts)return{continue:!0};let n=oo().processMessage({sessionId:e.sessionId||""},e.parts);return n.detected&&n.injectedMessage?{continue:!0,message:n.injectedMessage}:{continue:!0}}}),T({name:"thinkMode",event:"UserPromptSubmit",priority:30,handler:e=>{if(!e.message||!e.parts)return{continue:!0};let t=po(),n=e.sessionId||"default",o={parts:e.parts,message:{model:e.message.model&&e.message.model.providerId&&e.message.model.modelId?{providerId:e.message.model.providerId,modelId:e.message.model.modelId}:void 0}},r=t.processChatParams(n,o);return r.requested&&r.modelSwitched?{continue:!0,message:"[Think Mode Activated] Switched to high-reasoning model variant."}:{continue:!0}}}),T({name:"learningFeedbackCapture",event:"UserPromptSubmit",priority:100,handler:async e=>{let t=Uo(e);return!t||!e.directory?{continue:!0}:(Promise.resolve().then(async()=>{try{await Lo({prompt:t,directory:e.directory,sessionId:e.sessionId}),await Mo({prompt:t,directory:e.directory,sessionId:e.sessionId})}catch(n){console.error("[Olympus Learning]",n)}}),{continue:!0})}})}var se=require("fs"),Z=require("path"),$o=require("os");function Xi(e,t){let n=(0,Z.join)((0,$o.homedir)(),".claude"),o=[];e&&(o.push((0,Z.join)(n,"sessions",e,"todos.json")),o.push((0,Z.join)(n,"todos",`${e}.json`))),t&&(o.push((0,Z.join)(t,".olympus","todos.json")),o.push((0,Z.join)(t,".claude","todos.json")));let r=(0,Z.join)(n,"todos");if((0,se.existsSync)(r))try{let s=(0,se.readdirSync)(r);for(let i of s)i.endsWith(".json")&&o.push((0,Z.join)(r,i))}catch{}return o}function zi(e){try{let t=(0,se.readFileSync)(e,"utf-8"),n=JSON.parse(t);return Array.isArray(n)?n.filter(o=>o&&typeof o.content=="string"&&typeof o.status=="string"):n.todos&&Array.isArray(n.todos)?n.todos.filter(o=>{let r=o;return r&&typeof r.content=="string"&&typeof r.status=="string"}):[]}catch{return[]}}function Qi(e){return e.status!=="completed"&&e.status!=="cancelled"}async function Ae(e,t){let n=Xi(e,t),o=new Set,r=[],s=[];for(let i of n){if(!(0,se.existsSync)(i))continue;let l=zi(i);for(let a of l){let c=`${a.content}:${a.status}`;o.has(c)||(o.add(c),r.push(a),Qi(a)&&s.push(a))}}return{count:s.length,todos:s,total:r.length}}function Fo(e){let t=e.todos.find(n=>n.status==="in_progress");return t||(e.todos.find(n=>n.status==="pending")??null)}var Ke=require("path");var Ho=500;function Go(e){let t=de((0,Ke.join)(re(),"user-preferences.json"),null),n=de((0,Ke.join)(Ie(e),"patterns.json"),null),o=de((0,Ke.join)(re(),"agent-performance.json"),{}),r=[];t&&Zi(t)&&r.push(ea(t)),n&&n.conventions.length>0&&r.push(ta(n)),t?.recurring_corrections&&t.recurring_corrections.length>0&&r.push(na(t.recurring_corrections.slice(0,5)));let s=Object.values(o).filter(l=>l.weak_areas.length>0);if(s.length>0&&r.push(oa(s)),r.length===0)return"";let i=`<learned-context>
185
185
 
186
186
  ${r.join(`
187
187
 
@@ -191,20 +191,20 @@ ${r.join(`
191
191
 
192
192
  ---
193
193
 
194
- `;return i.length>mo*4?i.substring(0,mo*4)+`
194
+ `;return i.length>Ho*4?i.substring(0,Ho*4)+`
195
195
  ...</learned-context>
196
196
 
197
197
  ---
198
198
 
199
- `:i}function ui(e){return e.verbosity!=="unknown"||e.autonomy!=="unknown"||e.explicit_rules.length>0||e.inferred_preferences.length>0}function li(e){let t=["## User Preferences"];e.verbosity!=="unknown"&&t.push(`- Verbosity: ${e.verbosity}`),e.autonomy!=="unknown"&&t.push(`- Autonomy: ${e.autonomy}`);for(let n of e.explicit_rules.slice(0,5))t.push(`- ${n}`);return t.join(`
200
- `)}function di(e){let t=["## Project Conventions"];for(let n of e.conventions.slice(0,5))t.push(`- ${n}`);return e.tech_stack.length>0&&t.push(`- Tech: ${e.tech_stack.join(", ")}`),t.join(`
201
- `)}function pi(e){let t=["## Avoid These Mistakes"];for(let n of e)t.push(`- ${n.pattern} (${n.count}x)`);return t.join(`
202
- `)}function mi(e){let t=["## Agent Notes"];for(let n of e.slice(0,3))t.push(`- ${n.agent_name}: struggles with ${n.weak_areas.join(", ")}`);return t.join(`
203
- `)}function go(e){if(e.length===0)return"";let t=["## Agent Discoveries"];t.push(""),t.push("These insights were discovered during previous work:"),t.push("");for(let n of e.slice(0,5))t.push(`- **${n.category}**: ${n.summary}`),t.push(` ${n.details.substring(0,200)}`);return t.join(`
204
- `)}var _e=require("path"),K=require("fs");function fi(e){let t=(0,_e.join)(Y(),"discoveries.jsonl"),n=ce(e),o=(0,_e.join)(n,"discoveries.jsonl"),r=ho(t),s=ho(o),i=[...r,...s],a={technical_insight:0,workaround:0,pattern:0,gotcha:0,performance:0,dependency:0,configuration:0};for(let u of i)a[u.category]++;let c=[...i].sort((u,l)=>l.verification_count-u.verification_count);return{project_discoveries:s,global_discoveries:r,total_discoveries:i.length,categories:a,most_useful:c.slice(0,5)}}function To(e,t=10){let n=fi(e),o=[...n.project_discoveries,...n.global_discoveries],r=new Date,i=o.filter(a=>a.expires_at?new Date(a.expires_at)>r:!0).map(a=>{let c=(r.getTime()-new Date(a.timestamp).getTime())/864e5,u=Math.max(.1,1-c/90),l=(a.verification_count+1)*u*a.confidence;return{discovery:a,score:l}});return i.sort((a,c)=>c.score-a.score),i.slice(0,t).map(a=>a.discovery)}function ho(e){if(!(0,K.existsSync)(e))return[];try{return(0,K.readFileSync)(e,"utf-8").split(`
205
- `).filter(n=>n.trim()).map(n=>JSON.parse(n))}catch(t){return console.error(`[Olympus Learning] Failed to read discoveries: ${t}`),[]}}function Eo(){m({name:"learnedContextInjection",event:"SessionStart",priority:5,handler:e=>{if(!e.directory)return{continue:!0};try{let t=fo(e.directory),n=To(e.directory,5),o=go(n),r=t+(o?`
199
+ `:i}function Zi(e){return e.verbosity!=="unknown"||e.autonomy!=="unknown"||e.explicit_rules.length>0||e.inferred_preferences.length>0}function ea(e){let t=["## User Preferences"];e.verbosity!=="unknown"&&t.push(`- Verbosity: ${e.verbosity}`),e.autonomy!=="unknown"&&t.push(`- Autonomy: ${e.autonomy}`);for(let n of e.explicit_rules.slice(0,5))t.push(`- ${n}`);return t.join(`
200
+ `)}function ta(e){let t=["## Project Conventions"];for(let n of e.conventions.slice(0,5))t.push(`- ${n}`);return e.tech_stack.length>0&&t.push(`- Tech: ${e.tech_stack.join(", ")}`),t.join(`
201
+ `)}function na(e){let t=["## Avoid These Mistakes"];for(let n of e)t.push(`- ${n.pattern} (${n.count}x)`);return t.join(`
202
+ `)}function oa(e){let t=["## Agent Notes"];for(let n of e.slice(0,3))t.push(`- ${n.agent_name}: struggles with ${n.weak_areas.join(", ")}`);return t.join(`
203
+ `)}function Bo(e){if(e.length===0)return"";let t=["## Agent Discoveries"];t.push(""),t.push("These insights were discovered during previous work:"),t.push("");for(let n of e.slice(0,5))t.push(`- **${n.category}**: ${n.summary}`),t.push(` ${n.details.substring(0,200)}`);return t.join(`
204
+ `)}var qe=require("path"),ie=require("fs"),ra=require("crypto");function sa(e){let t=(0,qe.join)(re(),"discoveries.jsonl"),n=Ie(e),o=(0,qe.join)(n,"discoveries.jsonl"),r=Yo(t),s=Yo(o),i=[...r,...s],l={technical_insight:0,workaround:0,pattern:0,gotcha:0,performance:0,dependency:0,configuration:0};for(let c of i)l[c.category]++;let a=[...i].sort((c,u)=>u.verification_count-c.verification_count);return{project_discoveries:s,global_discoveries:r,total_discoveries:i.length,categories:l,most_useful:a.slice(0,5)}}function Wo(e,t=10){let n=sa(e),o=[...n.project_discoveries,...n.global_discoveries],r=new Date,i=o.filter(l=>l.expires_at?new Date(l.expires_at)>r:!0).map(l=>{let a=(r.getTime()-new Date(l.timestamp).getTime())/864e5,c=Math.max(.1,1-a/90),u=(l.verification_count+1)*c*l.confidence;return{discovery:l,score:u}});return i.sort((l,a)=>a.score-l.score),i.slice(0,t).map(l=>l.discovery)}function Yo(e){if(!(0,ie.existsSync)(e))return[];try{return(0,ie.readFileSync)(e,"utf-8").split(`
205
+ `).filter(n=>n.trim()).map(n=>JSON.parse(n))}catch(t){return console.error(`[Olympus Learning] Failed to read discoveries: ${t}`),[]}}function Vo(){T({name:"learnedContextInjection",event:"SessionStart",priority:5,handler:e=>{if(!e.directory)return{continue:!0};try{let t=Go(e.directory),n=Wo(e.directory,5),o=Bo(n),r=t+(o?`
206
206
 
207
- `+o:"");if(r.trim())return{continue:!0,message:r}}catch(t){console.error("[Olympus Learning]",t)}return{continue:!0}}}),m({name:"sessionStart",event:"SessionStart",priority:10,handler:async e=>{let t=e.sessionId,n=e.directory||process.cwd(),o=[],r=G(n);r?.active&&o.push(`<session-restore>
207
+ `+o:"");if(r.trim())return{continue:!0,message:r}}catch(t){console.error("[Olympus Learning]",t)}return{continue:!0}}}),T({name:"sessionStart",event:"SessionStart",priority:10,handler:async e=>{let t=e.sessionId,n=e.directory||process.cwd(),o=[],r=ne(n);r?.active&&o.push(`<session-restore>
208
208
 
209
209
  [ULTRAWORK MODE RESTORED]
210
210
 
@@ -217,7 +217,7 @@ Continue working in ultrawork mode until all tasks are complete.
217
217
 
218
218
  ---
219
219
 
220
- `);let s=await ue(t,n);return s.count>0&&o.push(`<session-restore>
220
+ `);let s=await Ae(t,n);return s.count>0&&o.push(`<session-restore>
221
221
 
222
222
  [PENDING TASKS DETECTED]
223
223
 
@@ -229,7 +229,7 @@ Please continue working on these tasks.
229
229
  ---
230
230
 
231
231
  `),o.length>0?{continue:!0,message:o.join(`
232
- `)}:{continue:!0}}})}var oe=require("fs"),M=require("path"),St=require("os");var k=require("fs"),H=require("path"),So=require("os");function dt(e){let t=(0,H.join)(e,".olympus");return(0,H.join)(t,"ascent-state.json")}function gi(e){let t=(0,H.join)(e,".olympus");(0,k.existsSync)(t)||(0,k.mkdirSync)(t,{recursive:!0})}function le(e){let t=dt(e);if(!(0,k.existsSync)(t))return null;try{let n=(0,k.readFileSync)(t,"utf-8");return JSON.parse(n)}catch{return null}}function hi(e,t){try{gi(e);let n=dt(e);return(0,k.writeFileSync)(n,JSON.stringify(t,null,2)),!0}catch{return!1}}function Ae(e){let t=dt(e);if(!(0,k.existsSync)(t))return!0;try{return(0,k.unlinkSync)(t),!0}catch{return!1}}function ko(e){let t=le(e);return!t||!t.active?null:(t.iteration+=1,hi(e,t)?t:null)}function yo(e,t){let n=(0,H.join)((0,So.homedir)(),".claude"),o=[(0,H.join)(n,"sessions",e,"transcript.md"),(0,H.join)(n,"sessions",e,"messages.json"),(0,H.join)(n,"transcripts",`${e}.md`)];for(let r of o)if((0,k.existsSync)(r))try{let s=(0,k.readFileSync)(r,"utf-8");if(new RegExp(`<promise>\\s*${Ti(t)}\\s*</promise>`,"is").test(s))return!0}catch{continue}return!1}function Ti(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var O=require("fs"),pt=require("path"),Ei=3;function mt(e){return(0,pt.join)(e,".olympus","ascent-verification.json")}function pe(e){let t=mt(e);if(!(0,O.existsSync)(t))return null;try{return JSON.parse((0,O.readFileSync)(t,"utf-8"))}catch{return null}}function Oo(e,t){let n=mt(e),o=(0,pt.join)(e,".olympus");if(!(0,O.existsSync)(o))try{(0,O.mkdirSync)(o,{recursive:!0})}catch{return!1}try{return(0,O.writeFileSync)(n,JSON.stringify(t,null,2)),!0}catch{return!1}}function de(e){let t=mt(e);if((0,O.existsSync)(t))try{return(0,O.unlinkSync)(t),!0}catch{return!1}return!0}function Ro(e,t,n){let o={pending:!0,completion_claim:t,verification_attempts:0,max_verification_attempts:Ei,requested_at:new Date().toISOString(),original_task:n};return Oo(e,o),o}function Io(e,t,n){let o=pe(e);return o?(o.verification_attempts+=1,o.oracle_approved=t,o.oracle_feedback=n,t?(de(e),{...o,pending:!1}):o.verification_attempts>=o.max_verification_attempts?(de(e),{...o,pending:!1}):(Oo(e,o),o)):null}function ft(e){return`<ascent-verification>
232
+ `)}:{continue:!0}}})}var he=require("fs"),J=require("path"),Wt=require("os");var L=require("fs"),ee=require("path"),Ko=require("os");function Ut(e){let t=(0,ee.join)(e,".olympus");return(0,ee.join)(t,"ascent-state.json")}function ia(e){let t=(0,ee.join)(e,".olympus");(0,L.existsSync)(t)||(0,L.mkdirSync)(t,{recursive:!0})}function Ne(e){let t=Ut(e);if(!(0,L.existsSync)(t))return null;try{let n=(0,L.readFileSync)(t,"utf-8");return JSON.parse(n)}catch{return null}}function aa(e,t){try{ia(e);let n=Ut(e);return(0,L.writeFileSync)(n,JSON.stringify(t,null,2)),!0}catch{return!1}}function Je(e){let t=Ut(e);if(!(0,L.existsSync)(t))return!0;try{return(0,L.unlinkSync)(t),!0}catch{return!1}}function qo(e){let t=Ne(e);return!t||!t.active?null:(t.iteration+=1,aa(e,t)?t:null)}function Jo(e,t){let n=(0,ee.join)((0,Ko.homedir)(),".claude"),o=[(0,ee.join)(n,"sessions",e,"transcript.md"),(0,ee.join)(n,"sessions",e,"messages.json"),(0,ee.join)(n,"transcripts",`${e}.md`)];for(let r of o)if((0,L.existsSync)(r))try{let s=(0,L.readFileSync)(r,"utf-8");if(new RegExp(`<promise>\\s*${ca(t)}\\s*</promise>`,"is").test(s))return!0}catch{continue}return!1}function ca(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var U=require("fs"),jt=require("path"),la=3;function $t(e){return(0,jt.join)(e,".olympus","ascent-verification.json")}function ve(e){let t=$t(e);if(!(0,U.existsSync)(t))return null;try{return JSON.parse((0,U.readFileSync)(t,"utf-8"))}catch{return null}}function Xo(e,t){let n=$t(e),o=(0,jt.join)(e,".olympus");if(!(0,U.existsSync)(o))try{(0,U.mkdirSync)(o,{recursive:!0})}catch{return!1}try{return(0,U.writeFileSync)(n,JSON.stringify(t,null,2)),!0}catch{return!1}}function we(e){let t=$t(e);if((0,U.existsSync)(t))try{return(0,U.unlinkSync)(t),!0}catch{return!1}return!0}function zo(e,t,n){let o={pending:!0,completion_claim:t,verification_attempts:0,max_verification_attempts:la,requested_at:new Date().toISOString(),original_task:n};return Xo(e,o),o}function Qo(e,t,n){let o=ve(e);return o?(o.verification_attempts+=1,o.oracle_approved=t,o.oracle_feedback=n,t?(we(e),{...o,pending:!1}):o.verification_attempts>=o.max_verification_attempts?(we(e),{...o,pending:!1}):(Xo(e,o),o)):null}function Ft(e){return`<ascent-verification>
233
233
 
234
234
  [ORACLE VERIFICATION REQUIRED - Attempt ${e.verification_attempts+1}/${e.max_verification_attempts}]
235
235
 
@@ -269,7 +269,7 @@ DO NOT output the completion promise again until Oracle approves.
269
269
 
270
270
  ---
271
271
 
272
- `}function Co(e){return`<ascent-continuation-after-rejection>
272
+ `}function Zo(e){return`<ascent-continuation-after-rejection>
273
273
 
274
274
  [ORACLE REJECTED - Continue Working]
275
275
 
@@ -294,7 +294,7 @@ Continue working now.
294
294
 
295
295
  ---
296
296
 
297
- `}function _o(e){return/<oracle-approved>.*?VERIFIED_COMPLETE.*?<\/oracle-approved>/is.test(e)}function Ao(e){let t=[/oracle.*?(rejected|found issues|not complete|incomplete)/i,/issues? (found|identified|detected)/i,/not yet complete/i,/missing.*?(implementation|feature|test)/i,/bug.*?(found|detected|identified)/i,/error.*?(found|detected|identified)/i];for(let n of t)if(n.test(e)){let o=e.match(/(?:oracle|feedback|issue|problem|error|bug)[:\s]+([^.]+\.)/i);return{rejected:!0,feedback:o?o[1]:"Oracle found issues with the implementation."}}return{rejected:!1,feedback:""}}var T=require("fs"),te=require("path"),gt=require("os");function ht(e){let t=e||process.cwd(),n=(0,te.join)(t,".olympus");return(0,te.join)(n,"olympus-state.json")}function Tt(){return(0,te.join)((0,gt.homedir)(),".claude","olympus-state.json")}function Si(e){let t=e||process.cwd(),n=(0,te.join)(t,".olympus");(0,T.existsSync)(n)||(0,T.mkdirSync)(n,{recursive:!0})}function ki(){let e=(0,te.join)((0,gt.homedir)(),".claude");(0,T.existsSync)(e)||(0,T.mkdirSync)(e,{recursive:!0})}function ne(e){let t=ht(e);if((0,T.existsSync)(t))try{let o=(0,T.readFileSync)(t,"utf-8");return JSON.parse(o)}catch{}let n=Tt();if((0,T.existsSync)(n))try{let o=(0,T.readFileSync)(n,"utf-8");return JSON.parse(o)}catch{return null}return null}function No(e,t){try{Si(t);let n=ht(t);(0,T.writeFileSync)(n,JSON.stringify(e,null,2)),ki();let o=Tt();return(0,T.writeFileSync)(o,JSON.stringify(e,null,2)),!0}catch{return!1}}function Et(e){let t=ht(e);if((0,T.existsSync)(t))try{(0,T.unlinkSync)(t)}catch{}let n=Tt();if((0,T.existsSync)(n))try{return(0,T.unlinkSync)(n),!0}catch{return!1}return!0}function xo(e){let t=ne(e);return!t||!t.active?null:(t.reinforcement_count+=1,t.last_checked_at=new Date().toISOString(),No(t,e)?t:null)}function wo(e){let t=ne(e);return!t||!t.active?!1:(t.oracle_approved=!0,t.last_checked_at=new Date().toISOString(),No(t,e))}function vo(e){let t=e.requires_oracle_verification&&!e.oracle_approved?`
297
+ `}function er(e){return/<oracle-approved>.*?VERIFIED_COMPLETE.*?<\/oracle-approved>/is.test(e)}function tr(e){let t=[/oracle.*?(rejected|found issues|not complete|incomplete)/i,/issues? (found|identified|detected)/i,/not yet complete/i,/missing.*?(implementation|feature|test)/i,/bug.*?(found|detected|identified)/i,/error.*?(found|detected|identified)/i];for(let n of t)if(n.test(e)){let o=e.match(/(?:oracle|feedback|issue|problem|error|bug)[:\s]+([^.]+\.)/i);return{rejected:!0,feedback:o?o[1]:"Oracle found issues with the implementation."}}return{rejected:!1,feedback:""}}var I=require("fs"),me=require("path"),Ht=require("os");function Gt(e){let t=e||process.cwd(),n=(0,me.join)(t,".olympus");return(0,me.join)(n,"olympus-state.json")}function Bt(){return(0,me.join)((0,Ht.homedir)(),".claude","olympus-state.json")}function ua(e){let t=e||process.cwd(),n=(0,me.join)(t,".olympus");(0,I.existsSync)(n)||(0,I.mkdirSync)(n,{recursive:!0})}function da(){let e=(0,me.join)((0,Ht.homedir)(),".claude");(0,I.existsSync)(e)||(0,I.mkdirSync)(e,{recursive:!0})}function ge(e){let t=Gt(e);if((0,I.existsSync)(t))try{let o=(0,I.readFileSync)(t,"utf-8");return JSON.parse(o)}catch{}let n=Bt();if((0,I.existsSync)(n))try{let o=(0,I.readFileSync)(n,"utf-8");return JSON.parse(o)}catch{return null}return null}function nr(e,t){try{ua(t);let n=Gt(t);(0,I.writeFileSync)(n,JSON.stringify(e,null,2)),da();let o=Bt();return(0,I.writeFileSync)(o,JSON.stringify(e,null,2)),!0}catch{return!1}}function Yt(e){let t=Gt(e);if((0,I.existsSync)(t))try{(0,I.unlinkSync)(t)}catch{}let n=Bt();if((0,I.existsSync)(n))try{return(0,I.unlinkSync)(n),!0}catch{return!1}return!0}function or(e){let t=ge(e);return!t||!t.active?null:(t.reinforcement_count+=1,t.last_checked_at=new Date().toISOString(),nr(t,e)?t:null)}function rr(e){let t=ge(e);return!t||!t.active?!1:(t.oracle_approved=!0,t.last_checked_at=new Date().toISOString(),nr(t,e))}function sr(e){let t=e.requires_oracle_verification&&!e.oracle_approved?`
298
298
 
299
299
  **ORACLE VERIFICATION REQUIRED**: Before declaring complete, you MUST get Oracle approval.`:"";return`<olympus-persistence>
300
300
 
@@ -316,7 +316,7 @@ Original task: ${e.original_prompt}
316
316
 
317
317
  ---
318
318
 
319
- `}function Po(e){let t=(0,M.join)((0,St.homedir)(),".claude"),n=[(0,M.join)(t,"sessions",e,"transcript.md"),(0,M.join)(t,"sessions",e,"messages.json"),(0,M.join)(t,"transcripts",`${e}.md`)];for(let o of n)if((0,oe.existsSync)(o))try{let r=(0,oe.readFileSync)(o,"utf-8");if(_o(r))return!0}catch{continue}return!1}function yi(e){let t=(0,M.join)((0,St.homedir)(),".claude"),n=[(0,M.join)(t,"sessions",e,"transcript.md"),(0,M.join)(t,"sessions",e,"messages.json"),(0,M.join)(t,"transcripts",`${e}.md`)];for(let o of n)if((0,oe.existsSync)(o))try{let r=(0,oe.readFileSync)(o,"utf-8"),s=Ao(r);if(s.rejected)return s}catch{continue}return{rejected:!1,feedback:""}}async function Oi(e,t){let n=t||process.cwd(),o=le(n);if(!o||!o.active||o.session_id&&e&&o.session_id!==e)return null;let r=pe(n);if(r?.pending){if(e){if(Po(e))return de(n),Ae(n),{shouldBlock:!1,message:`[ASCENT LOOP VERIFIED COMPLETE] Oracle verified task completion after ${o.iteration} iteration(s). Excellent work!`,mode:"none"};let u=yi(e);if(u.rejected){Io(n,!1,u.feedback);let l=pe(n);if(l)return{shouldBlock:!0,message:Co(l),mode:"ascent",metadata:{iteration:o.iteration,maxIterations:o.max_iterations}}}}return{shouldBlock:!0,message:ft(r),mode:"ascent",metadata:{iteration:o.iteration,maxIterations:o.max_iterations}}}if(yo(e||"",o.completion_promise)){Ro(n,o.completion_promise,o.prompt);let c=pe(n);return c?{shouldBlock:!0,message:ft(c),mode:"ascent",metadata:{iteration:o.iteration,maxIterations:o.max_iterations}}:(Ae(n),{shouldBlock:!1,message:`[ASCENT LOOP COMPLETE] Task completed after ${o.iteration} iteration(s). Great work!`,mode:"none"})}if(o.iteration>=o.max_iterations)return Ae(n),de(n),{shouldBlock:!1,message:`[ASCENT LOOP STOPPED] Max iterations (${o.max_iterations}) reached without completion promise. Consider reviewing the task requirements.`,mode:"none"};let i=ko(n);return i?{shouldBlock:!0,message:`<ascent-continuation>
319
+ `}function ir(e){let t=(0,J.join)((0,Wt.homedir)(),".claude"),n=[(0,J.join)(t,"sessions",e,"transcript.md"),(0,J.join)(t,"sessions",e,"messages.json"),(0,J.join)(t,"transcripts",`${e}.md`)];for(let o of n)if((0,he.existsSync)(o))try{let r=(0,he.readFileSync)(o,"utf-8");if(er(r))return!0}catch{continue}return!1}function pa(e){let t=(0,J.join)((0,Wt.homedir)(),".claude"),n=[(0,J.join)(t,"sessions",e,"transcript.md"),(0,J.join)(t,"sessions",e,"messages.json"),(0,J.join)(t,"transcripts",`${e}.md`)];for(let o of n)if((0,he.existsSync)(o))try{let r=(0,he.readFileSync)(o,"utf-8"),s=tr(r);if(s.rejected)return s}catch{continue}return{rejected:!1,feedback:""}}async function fa(e,t){let n=t||process.cwd(),o=Ne(n);if(!o||!o.active||o.session_id&&e&&o.session_id!==e)return null;let r=ve(n);if(r?.pending){if(e){if(ir(e))return we(n),Je(n),{shouldBlock:!1,message:`[ASCENT LOOP VERIFIED COMPLETE] Oracle verified task completion after ${o.iteration} iteration(s). Excellent work!`,mode:"none"};let c=pa(e);if(c.rejected){Qo(n,!1,c.feedback);let u=ve(n);if(u)return{shouldBlock:!0,message:Zo(u),mode:"ascent",metadata:{iteration:o.iteration,maxIterations:o.max_iterations}}}}return{shouldBlock:!0,message:Ft(r),mode:"ascent",metadata:{iteration:o.iteration,maxIterations:o.max_iterations}}}if(Jo(e||"",o.completion_promise)){zo(n,o.completion_promise,o.prompt);let a=ve(n);return a?{shouldBlock:!0,message:Ft(a),mode:"ascent",metadata:{iteration:o.iteration,maxIterations:o.max_iterations}}:(Je(n),{shouldBlock:!1,message:`[ASCENT LOOP COMPLETE] Task completed after ${o.iteration} iteration(s). Great work!`,mode:"none"})}if(o.iteration>=o.max_iterations)return Je(n),we(n),{shouldBlock:!1,message:`[ASCENT LOOP STOPPED] Max iterations (${o.max_iterations}) reached without completion promise. Consider reviewing the task requirements.`,mode:"none"};let i=qo(n);return i?{shouldBlock:!0,message:`<ascent-continuation>
320
320
 
321
321
  [ASCENT LOOP - ITERATION ${i.iteration}/${i.max_iterations}]
322
322
 
@@ -335,7 +335,7 @@ ${i.prompt?`Original task: ${i.prompt}`:""}
335
335
 
336
336
  ---
337
337
 
338
- `,mode:"ascent",metadata:{iteration:i.iteration,maxIterations:i.max_iterations}}:null}async function Ri(e,t,n){let o=G(t);if(!o||!o.active||o.session_id&&e&&o.session_id!==e)return null;if(!n)return Fn(t),{shouldBlock:!1,message:"[ULTRAWORK COMPLETE] All tasks finished. Ultrawork mode deactivated. Well done!",mode:"none"};let r=Hn(t);return r?{shouldBlock:!0,message:Gn(r),mode:"ultrawork",metadata:{reinforcementCount:r.reinforcement_count}}:null}async function Ii(e,t,n){let o=ne(t);if(!o||!o.active||o.session_id&&e&&o.session_id!==e)return null;if(!n&&o.oracle_approved)return Et(t),{shouldBlock:!1,message:"[OLYMPUS COMPLETE] All tasks finished and Oracle verified. Orchestration mode deactivated. Excellent work!",mode:"none"};if(!n&&!o.oracle_approved&&o.requires_oracle_verification)return e&&Po(e)?(wo(t),Et(t),{shouldBlock:!1,message:"[OLYMPUS VERIFIED COMPLETE] Oracle approved. Orchestration mode deactivated. Excellent work!",mode:"none"}):{shouldBlock:!0,message:`<olympus-verification-required>
338
+ `,mode:"ascent",metadata:{iteration:i.iteration,maxIterations:i.max_iterations}}:null}async function ma(e,t,n){let o=ne(t);if(!o||!o.active||o.session_id&&e&&o.session_id!==e)return null;if(!n)return go(t),{shouldBlock:!1,message:"[ULTRAWORK COMPLETE] All tasks finished. Ultrawork mode deactivated. Well done!",mode:"none"};let r=ho(t);return r?{shouldBlock:!0,message:To(r),mode:"ultrawork",metadata:{reinforcementCount:r.reinforcement_count}}:null}async function ga(e,t,n){let o=ge(t);if(!o||!o.active||o.session_id&&e&&o.session_id!==e)return null;if(!n&&o.oracle_approved)return Yt(t),{shouldBlock:!1,message:"[OLYMPUS COMPLETE] All tasks finished and Oracle verified. Orchestration mode deactivated. Excellent work!",mode:"none"};if(!n&&!o.oracle_approved&&o.requires_oracle_verification)return e&&ir(e)?(rr(t),Yt(t),{shouldBlock:!1,message:"[OLYMPUS VERIFIED COMPLETE] Oracle approved. Orchestration mode deactivated. Excellent work!",mode:"none"}):{shouldBlock:!0,message:`<olympus-verification-required>
339
339
 
340
340
  [OLYMPUS MODE - ORACLE VERIFICATION REQUIRED]
341
341
 
@@ -358,11 +358,11 @@ DO NOT stop until Oracle has approved.
358
358
 
359
359
  ---
360
360
 
361
- `,mode:"olympus",metadata:{reinforcementCount:o.reinforcement_count}};let r=xo(t);return r?{shouldBlock:!0,message:vo(r),mode:"olympus",metadata:{reinforcementCount:r.reinforcement_count}}:null}async function Ci(e,t){let n=await ue(e,t);if(n.count===0)return null;let o=po(n),r=o?`
361
+ `,mode:"olympus",metadata:{reinforcementCount:o.reinforcement_count}};let r=or(t);return r?{shouldBlock:!0,message:sr(r),mode:"olympus",metadata:{reinforcementCount:r.reinforcement_count}}:null}async function ha(e,t){let n=await Ae(e,t);if(n.count===0)return null;let o=Fo(n),r=o?`
362
362
 
363
363
  Next task: "${o.content}" (${o.status})`:"";return{shouldBlock:!0,message:`<todo-continuation>
364
364
 
365
- ${qn}
365
+ ${Ro}
366
366
 
367
367
  [Status: ${n.count} of ${n.total} tasks remaining]${r}
368
368
 
@@ -370,20 +370,20 @@ ${qn}
370
370
 
371
371
  ---
372
372
 
373
- `,mode:"todo-continuation",metadata:{todoCount:n.count}}}async function bo(e,t){let n=t||process.cwd(),r=(await ue(e,n)).count>0,s=await Oi(e,n);if(s?.shouldBlock)return s;let i=await Ri(e,n,r);if(i?.shouldBlock)return i;let a=await Ii(e,n,r);if(a?.shouldBlock)return a;if(r){let c=await Ci(e,n);if(c?.shouldBlock)return c}return{shouldBlock:!1,message:"",mode:"none"}}function Do(e){return e.shouldBlock?{continue:!1,reason:e.message}:{continue:!0,message:e.message||void 0}}var re=require("fs"),kt=require("path"),Lo=require("os");var Mo=require("crypto");function _i(){let e=(0,kt.join)((0,Lo.homedir)(),".claude","todos");if(!(0,re.existsSync)(e))return 0;let t=0;try{let n=(0,re.readdirSync)(e).filter(o=>o.endsWith(".json"));for(let o of n)try{let r=(0,re.readFileSync)((0,kt.join)(e,o),"utf-8"),s=JSON.parse(r);Array.isArray(s)&&(t+=s.filter(i=>i.status!=="completed"&&i.status!=="cancelled").length)}catch{}}catch{}return t}async function Uo(e){let{directory:t,sessionId:n}=e;if(!t)return;let o=Z(t,n),r=_i();if(r>0&&o.pending_completion){let s={id:(0,Mo.randomUUID)(),timestamp:new Date().toISOString(),session_id:o.session_id,project_path:t,event_type:"cancellation",original_task:o.pending_completion.task_description,agent_used:o.pending_completion.agent_used,user_message:`[Stopped with ${r} incomplete todos]`,feedback_category:"rejection",confidence:.7};X(s)}o.pending_completion=null,o.todo_snapshot={total:0,completed:0,pending:r},ee(t,o)}function $o(){m({name:"persistentMode",event:"Stop",priority:10,handler:async e=>{let t=e.sessionId,n=e.directory||process.cwd(),o=await bo(t,n),r=Do(o);return{continue:r.continue,message:r.message,reason:r.reason}}}),m({name:"learningCancellationCapture",event:"Stop",priority:100,handler:async e=>e.directory?(Promise.resolve().then(async()=>{try{await Uo({directory:e.directory,sessionId:e.sessionId})}catch(t){console.error("[Olympus Learning]",t)}}),{continue:!0}):{continue:!0}})}var wt=require("fs"),vt=require("os"),fe=require("path");var x=require("fs"),y=require("path");var yt=require("path"),jo=require("os"),Ai=(0,yt.join)((0,jo.homedir)(),".olympus"),Ne=(0,yt.join)(Ai,"rules-injector"),Fo=[".git","pyproject.toml","package.json","Cargo.toml","go.mod",".venv"],Ho=[[".github","instructions"],[".cursor","rules"],[".claude","rules"]],Go=[".github/copilot-instructions.md"],Bo=/\.instructions\.md$/,Yo=".claude/rules",Wo=[".md",".mdc"],Ot=["read","write","edit","multiedit"];function Ni(e){return e.includes(".github/instructions")||e.endsWith(".github/instructions")}function xi(e,t){return Ni(t)?Bo.test(e):Wo.some(n=>e.endsWith(n))}function Ct(e){let t;try{t=(0,x.statSync)(e).isDirectory()?e:(0,y.dirname)(e)}catch{t=(0,y.dirname)(e)}for(;;){for(let o of Fo){let r=(0,y.join)(t,o);if((0,x.existsSync)(r))return t}let n=(0,y.dirname)(t);if(n===t)return null;t=n}}function It(e,t){if((0,x.existsSync)(e))try{let n=(0,x.readdirSync)(e,{withFileTypes:!0});for(let o of n){let r=(0,y.join)(e,o.name);o.isDirectory()?It(r,t):o.isFile()&&xi(o.name,e)&&t.push(r)}}catch{}}function Rt(e){try{return(0,x.realpathSync)(e)}catch{return e}}function _t(e,t,n){let o=[],r=new Set,s=(0,y.dirname)(n),i=0;for(;;){for(let[l,d]of Ho){let p=(0,y.join)(s,l,d),f=[];It(p,f);for(let g of f){let E=Rt(g);r.has(E)||(r.add(E),o.push({path:g,realPath:E,isGlobal:!1,distance:i}))}}if(e&&s===e)break;let u=(0,y.dirname)(s);if(u===s)break;s=u,i++}if(e)for(let u of Go){let l=(0,y.join)(e,u);if((0,x.existsSync)(l))try{if((0,x.statSync)(l).isFile()){let p=Rt(l);r.has(p)||(r.add(p),o.push({path:l,realPath:p,isGlobal:!1,distance:0,isSingleFile:!0}))}}catch{}}let a=(0,y.join)(t,Yo),c=[];It(a,c);for(let u of c){let l=Rt(u);r.has(l)||(r.add(l),o.push({path:u,realPath:l,isGlobal:!0,distance:9999}))}return o.sort((u,l)=>u.isGlobal!==l.isGlobal?u.isGlobal?1:-1:u.distance-l.distance),o}var Ko=require("crypto"),Vo=require("path");function wi(e,t){let n=e.replace(/\./g,"\\.").replace(/\*\*/g,"<<<GLOBSTAR>>>").replace(/\*/g,"[^/]*").replace(/<<<GLOBSTAR>>>/g,".*").replace(/\?/g,".");return new RegExp(`^${n}$`).test(t)}function At(e,t,n){if(e.alwaysApply===!0)return{applies:!0,reason:"alwaysApply"};let o=e.globs;if(!o)return{applies:!1};let r=Array.isArray(o)?o:[o];if(r.length===0)return{applies:!1};let i=(n?(0,Vo.relative)(n,t):t).replace(/\\/g,"/");for(let a of r)if(wi(a,i))return{applies:!0,reason:`glob: ${a}`};return{applies:!1}}function qo(e,t){return t.has(e)}function Jo(e){return(0,Ko.createHash)("sha256").update(e).digest("hex").slice(0,16)}function zo(e,t){return t.has(e)}function Nt(e){let t=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,n=e.match(t);if(!n)return{metadata:{},body:e};let o=n[1],r=n[2];try{return{metadata:vi(o),body:r}}catch{return{metadata:{},body:e}}}function vi(e){let t=e.split(`
374
- `),n={},o=0;for(;o<t.length;){let r=t[o],s=r.indexOf(":");if(s===-1){o++;continue}let i=r.slice(0,s).trim(),a=r.slice(s+1).trim();if(i==="description")n.description=me(a);else if(i==="alwaysApply")n.alwaysApply=a==="true";else if(i==="globs"||i==="paths"||i==="applyTo"){let{value:c,consumed:u}=Pi(a,t,o);n.globs=Di(n.globs,c),o+=u;continue}o++}return n}function me(e){return e?e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'")?e.slice(1,-1):e:""}function Pi(e,t,n){if(e.startsWith("["))return{value:bi(e),consumed:1};if(!e||e===""){let r=[],s=1;for(let i=n+1;i<t.length;i++){let a=t[i],c=a.match(/^\s+-\s*(.*)$/);if(c){let u=me(c[1].trim());u&&r.push(u),s++}else if(a.trim()==="")s++;else break}if(r.length>0)return{value:r,consumed:s}}let o=me(e);return o.includes(",")?{value:o.split(",").map(s=>s.trim()).filter(s=>s.length>0),consumed:1}:{value:o,consumed:1}}function bi(e){let t=e.slice(1,e.lastIndexOf("]")).trim();if(!t)return[];let n=[],o="",r=!1,s="";for(let a=0;a<t.length;a++){let c=t[a];if(!r&&(c==='"'||c==="'"))r=!0,s=c;else if(r&&c===s)r=!1,s="";else if(!r&&c===","){let u=o.trim();u&&n.push(me(u)),o=""}else o+=c}let i=o.trim();return i&&n.push(me(i)),n}function Di(e,t){if(!e)return t;let n=Array.isArray(e)?e:[e],o=Array.isArray(t)?t:[t];return[...n,...o]}var R=require("fs"),Xo=require("path");function xt(e){return(0,Xo.join)(Ne,`${e}.json`)}function Qo(e){let t=xt(e);if(!(0,R.existsSync)(t))return{contentHashes:new Set,realPaths:new Set};try{let n=(0,R.readFileSync)(t,"utf-8"),o=JSON.parse(n);return{contentHashes:new Set(o.injectedHashes),realPaths:new Set(o.injectedRealPaths??[])}}catch{return{contentHashes:new Set,realPaths:new Set}}}function Zo(e,t){(0,R.existsSync)(Ne)||(0,R.mkdirSync)(Ne,{recursive:!0});let n={sessionId:e,injectedHashes:[...t.contentHashes],injectedRealPaths:[...t.realPaths],updatedAt:Date.now()};(0,R.writeFileSync)(xt(e),JSON.stringify(n,null,2))}function er(e){let t=xt(e);(0,R.existsSync)(t)&&(0,R.unlinkSync)(t)}function tr(e){let t=new Map;function n(i){return t.has(i)||t.set(i,Qo(i)),t.get(i)}function o(i){return i?i.startsWith("/")?i:(0,fe.resolve)(e,i):null}function r(i,a){let c=o(i);if(!c)return[];let u=Ct(c),l=n(a),d=(0,vt.homedir)(),p=_t(u,d,c),f=[];for(let g of p)if(!qo(g.realPath,l.realPaths))try{let E=(0,wt.readFileSync)(g.path,"utf-8"),{metadata:v,body:A}=Nt(E),N;if(g.isSingleFile)N="copilot-instructions (always apply)";else{let fn=At(v,c,u);if(!fn.applies)continue;N=fn.reason??"matched"}let mn=Jo(A);if(zo(mn,l.contentHashes))continue;let xs=u?(0,fe.relative)(u,g.path):g.path;f.push({relativePath:xs,matchReason:N,content:A,distance:g.distance}),l.realPaths.add(g.realPath),l.contentHashes.add(mn)}catch{}return f.length>0&&(f.sort((g,E)=>g.distance-E.distance),Zo(a,l)),f}function s(i){if(i.length===0)return"";let a="";for(let c of i)a+=`
373
+ `,mode:"todo-continuation",metadata:{todoCount:n.count}}}async function ar(e,t){let n=t||process.cwd(),r=(await Ae(e,n)).count>0,s=await fa(e,n);if(s?.shouldBlock)return s;let i=await ma(e,n,r);if(i?.shouldBlock)return i;let l=await ga(e,n,r);if(l?.shouldBlock)return l;if(r){let a=await ha(e,n);if(a?.shouldBlock)return a}return{shouldBlock:!1,message:"",mode:"none"}}function cr(e){return e.shouldBlock?{continue:!1,reason:e.message}:{continue:!0,message:e.message||void 0}}var Te=require("fs"),Vt=require("path"),lr=require("os");var ur=require("crypto");function Ta(){let e=(0,Vt.join)((0,lr.homedir)(),".claude","todos");if(!(0,Te.existsSync)(e))return 0;let t=0;try{let n=(0,Te.readdirSync)(e).filter(o=>o.endsWith(".json"));for(let o of n)try{let r=(0,Te.readFileSync)((0,Vt.join)(e,o),"utf-8"),s=JSON.parse(r);Array.isArray(s)&&(t+=s.filter(i=>i.status!=="completed"&&i.status!=="cancelled").length)}catch{}}catch{}return t}async function dr(e){let{directory:t,sessionId:n}=e;if(!t)return;let o=pe(t,n),r=Ta();if(r>0&&o.pending_completion){let s={id:(0,ur.randomUUID)(),timestamp:new Date().toISOString(),session_id:o.session_id,project_path:t,event_type:"cancellation",original_task:o.pending_completion.task_description,agent_used:o.pending_completion.agent_used,user_message:`[Stopped with ${r} incomplete todos]`,feedback_category:"rejection",confidence:.7};ue(s)}o.pending_completion=null,o.todo_snapshot={total:0,completed:0,pending:r},fe(t,o)}function pr(){T({name:"persistentMode",event:"Stop",priority:10,handler:async e=>{let t=e.sessionId,n=e.directory||process.cwd(),o=await ar(t,n),r=cr(o);return{continue:r.continue,message:r.message,reason:r.reason}}}),T({name:"learningCancellationCapture",event:"Stop",priority:100,handler:async e=>e.directory?(Promise.resolve().then(async()=>{try{await dr({directory:e.directory,sessionId:e.sessionId})}catch(t){console.error("[Olympus Learning]",t)}}),{continue:!0}):{continue:!0}})}var nn=require("fs"),on=require("os"),xe=require("path");var B=require("fs"),M=require("path");var Kt=require("path"),fr=require("os"),Ea=(0,Kt.join)((0,fr.homedir)(),".olympus"),Xe=(0,Kt.join)(Ea,"rules-injector"),mr=[".git","pyproject.toml","package.json","Cargo.toml","go.mod",".venv"],gr=[[".github","instructions"],[".cursor","rules"],[".claude","rules"]],hr=[".github/copilot-instructions.md"],Tr=/\.instructions\.md$/,Er=".claude/rules",kr=[".md",".mdc"],qt=["read","write","edit","multiedit"];function ka(e){return e.includes(".github/instructions")||e.endsWith(".github/instructions")}function Sa(e,t){return ka(t)?Tr.test(e):kr.some(n=>e.endsWith(n))}function zt(e){let t;try{t=(0,B.statSync)(e).isDirectory()?e:(0,M.dirname)(e)}catch{t=(0,M.dirname)(e)}for(;;){for(let o of mr){let r=(0,M.join)(t,o);if((0,B.existsSync)(r))return t}let n=(0,M.dirname)(t);if(n===t)return null;t=n}}function Xt(e,t){if((0,B.existsSync)(e))try{let n=(0,B.readdirSync)(e,{withFileTypes:!0});for(let o of n){let r=(0,M.join)(e,o.name);o.isDirectory()?Xt(r,t):o.isFile()&&Sa(o.name,e)&&t.push(r)}}catch{}}function Jt(e){try{return(0,B.realpathSync)(e)}catch{return e}}function Qt(e,t,n){let o=[],r=new Set,s=(0,M.dirname)(n),i=0;for(;;){for(let[u,d]of gr){let m=(0,M.join)(s,u,d),E=[];Xt(m,E);for(let k of E){let y=Jt(k);r.has(y)||(r.add(y),o.push({path:k,realPath:y,isGlobal:!1,distance:i}))}}if(e&&s===e)break;let c=(0,M.dirname)(s);if(c===s)break;s=c,i++}if(e)for(let c of hr){let u=(0,M.join)(e,c);if((0,B.existsSync)(u))try{if((0,B.statSync)(u).isFile()){let m=Jt(u);r.has(m)||(r.add(m),o.push({path:u,realPath:m,isGlobal:!1,distance:0,isSingleFile:!0}))}}catch{}}let l=(0,M.join)(t,Er),a=[];Xt(l,a);for(let c of a){let u=Jt(c);r.has(u)||(r.add(u),o.push({path:c,realPath:u,isGlobal:!0,distance:9999}))}return o.sort((c,u)=>c.isGlobal!==u.isGlobal?c.isGlobal?1:-1:c.distance-u.distance),o}var Sr=require("crypto"),yr=require("path");function ya(e,t){let n=e.replace(/\./g,"\\.").replace(/\*\*/g,"<<<GLOBSTAR>>>").replace(/\*/g,"[^/]*").replace(/<<<GLOBSTAR>>>/g,".*").replace(/\?/g,".");return new RegExp(`^${n}$`).test(t)}function Zt(e,t,n){if(e.alwaysApply===!0)return{applies:!0,reason:"alwaysApply"};let o=e.globs;if(!o)return{applies:!1};let r=Array.isArray(o)?o:[o];if(r.length===0)return{applies:!1};let i=(n?(0,yr.relative)(n,t):t).replace(/\\/g,"/");for(let l of r)if(ya(l,i))return{applies:!0,reason:`glob: ${l}`};return{applies:!1}}function Or(e,t){return t.has(e)}function Rr(e){return(0,Sr.createHash)("sha256").update(e).digest("hex").slice(0,16)}function _r(e,t){return t.has(e)}function en(e){let t=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,n=e.match(t);if(!n)return{metadata:{},body:e};let o=n[1],r=n[2];try{return{metadata:Oa(o),body:r}}catch{return{metadata:{},body:e}}}function Oa(e){let t=e.split(`
374
+ `),n={},o=0;for(;o<t.length;){let r=t[o],s=r.indexOf(":");if(s===-1){o++;continue}let i=r.slice(0,s).trim(),l=r.slice(s+1).trim();if(i==="description")n.description=be(l);else if(i==="alwaysApply")n.alwaysApply=l==="true";else if(i==="globs"||i==="paths"||i==="applyTo"){let{value:a,consumed:c}=Ra(l,t,o);n.globs=Ia(n.globs,a),o+=c;continue}o++}return n}function be(e){return e?e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'")?e.slice(1,-1):e:""}function Ra(e,t,n){if(e.startsWith("["))return{value:_a(e),consumed:1};if(!e||e===""){let r=[],s=1;for(let i=n+1;i<t.length;i++){let l=t[i],a=l.match(/^\s+-\s*(.*)$/);if(a){let c=be(a[1].trim());c&&r.push(c),s++}else if(l.trim()==="")s++;else break}if(r.length>0)return{value:r,consumed:s}}let o=be(e);return o.includes(",")?{value:o.split(",").map(s=>s.trim()).filter(s=>s.length>0),consumed:1}:{value:o,consumed:1}}function _a(e){let t=e.slice(1,e.lastIndexOf("]")).trim();if(!t)return[];let n=[],o="",r=!1,s="";for(let l=0;l<t.length;l++){let a=t[l];if(!r&&(a==='"'||a==="'"))r=!0,s=a;else if(r&&a===s)r=!1,s="";else if(!r&&a===","){let c=o.trim();c&&n.push(be(c)),o=""}else o+=a}let i=o.trim();return i&&n.push(be(i)),n}function Ia(e,t){if(!e)return t;let n=Array.isArray(e)?e:[e],o=Array.isArray(t)?t:[t];return[...n,...o]}var j=require("fs"),Ir=require("path");function tn(e){return(0,Ir.join)(Xe,`${e}.json`)}function Ar(e){let t=tn(e);if(!(0,j.existsSync)(t))return{contentHashes:new Set,realPaths:new Set};try{let n=(0,j.readFileSync)(t,"utf-8"),o=JSON.parse(n);return{contentHashes:new Set(o.injectedHashes),realPaths:new Set(o.injectedRealPaths??[])}}catch{return{contentHashes:new Set,realPaths:new Set}}}function Nr(e,t){(0,j.existsSync)(Xe)||(0,j.mkdirSync)(Xe,{recursive:!0});let n={sessionId:e,injectedHashes:[...t.contentHashes],injectedRealPaths:[...t.realPaths],updatedAt:Date.now()};(0,j.writeFileSync)(tn(e),JSON.stringify(n,null,2))}function wr(e){let t=tn(e);(0,j.existsSync)(t)&&(0,j.unlinkSync)(t)}function vr(e){let t=new Map;function n(i){return t.has(i)||t.set(i,Ar(i)),t.get(i)}function o(i){return i?i.startsWith("/")?i:(0,xe.resolve)(e,i):null}function r(i,l){let a=o(i);if(!a)return[];let c=zt(a),u=n(l),d=(0,on.homedir)(),m=Qt(c,d,a),E=[];for(let k of m)if(!Or(k.realPath,u.realPaths))try{let y=(0,nn.readFileSync)(k.path,"utf-8"),{metadata:O,body:N}=en(y),x;if(k.isSingleFile)x="copilot-instructions (always apply)";else{let w=Zt(O,a,c);if(!w.applies)continue;x=w.reason??"matched"}let p=Rr(N);if(_r(p,u.contentHashes))continue;let A=c?(0,xe.relative)(c,k.path):k.path;E.push({relativePath:A,matchReason:x,content:N,distance:k.distance}),u.realPaths.add(k.realPath),u.contentHashes.add(p)}catch{}return E.length>0&&(E.sort((k,y)=>k.distance-y.distance),Nr(l,u)),E}function s(i){if(i.length===0)return"";let l="";for(let a of i)l+=`
375
375
 
376
- [Rule: ${c.relativePath}]
377
- [Match: ${c.matchReason}]
378
- ${c.content}`;return a}return{processToolExecution:(i,a,c)=>{if(!Ot.includes(i.toLowerCase()))return"";let u=r(a,c);return s(u)},getRulesForFile:i=>{let a=o(i);if(!a)return[];let c=Ct(a),u=(0,vt.homedir)(),l=_t(c,u,a),d=[];for(let p of l)try{let f=(0,wt.readFileSync)(p.path,"utf-8"),{metadata:g,body:E}=Nt(f),v;if(p.isSingleFile)v="copilot-instructions (always apply)";else{let N=At(g,a,c);if(!N.applies)continue;v=N.reason??"matched"}let A=c?(0,fe.relative)(c,p.path):p.path;d.push({relativePath:A,matchReason:v,content:E,distance:p.distance})}catch{}return d.sort((p,f)=>p.distance-f.distance)},clearSession:i=>{t.delete(i),er(i)},isTrackedTool:i=>Ot.includes(i.toLowerCase())}}var we=require("node:fs"),U=require("node:path");var I=require("node:fs"),rr=require("node:path");var Pt=require("node:path"),nr=require("node:os"),Li=(0,Pt.join)((0,nr.homedir)(),".olympus"),xe=(0,Pt.join)(Li,"directory-readme"),or="README.md",bt=["read","write","edit","multiedit"];function Dt(e){return(0,rr.join)(xe,`${e}.json`)}function sr(e){let t=Dt(e);if(!(0,I.existsSync)(t))return new Set;try{let n=(0,I.readFileSync)(t,"utf-8"),o=JSON.parse(n);return new Set(o.injectedPaths)}catch{return new Set}}function ir(e,t){(0,I.existsSync)(xe)||(0,I.mkdirSync)(xe,{recursive:!0});let n={sessionID:e,injectedPaths:Array.from(t),updatedAt:Date.now()};(0,I.writeFileSync)(Dt(e),JSON.stringify(n,null,2))}function ar(e){let t=Dt(e);(0,I.existsSync)(t)&&(0,I.unlinkSync)(t)}var cr=4,Mi=5e3;function Ui(e,t=Mi){if(Math.ceil(e.length/cr)<=t)return{result:e,truncated:!1};let o=t*cr;return{result:e.slice(0,o),truncated:!0}}function ur(e){let t=new Map;function n(i){return t.has(i)||t.set(i,sr(i)),t.get(i)}function o(i){return i?i.startsWith("/")?i:(0,U.resolve)(e,i):null}function r(i){let a=[],c=i;for(;;){let u=(0,U.join)(c,or);if((0,we.existsSync)(u)&&a.push(u),c===e)break;let l=(0,U.dirname)(c);if(l===c||!l.startsWith(e))break;c=l}return a.reverse()}function s(i,a){let c=o(i);if(!c)return"";let u=(0,U.dirname)(c),l=n(a),d=r(u),p="";for(let f of d){let g=(0,U.dirname)(f);if(!l.has(g))try{let E=(0,we.readFileSync)(f,"utf-8"),{result:v,truncated:A}=Ui(E),N=A?`
376
+ [Rule: ${a.relativePath}]
377
+ [Match: ${a.matchReason}]
378
+ ${a.content}`;return l}return{processToolExecution:(i,l,a)=>{if(!qt.includes(i.toLowerCase()))return"";let c=r(l,a);return s(c)},getRulesForFile:i=>{let l=o(i);if(!l)return[];let a=zt(l),c=(0,on.homedir)(),u=Qt(a,c,l),d=[];for(let m of u)try{let E=(0,nn.readFileSync)(m.path,"utf-8"),{metadata:k,body:y}=en(E),O;if(m.isSingleFile)O="copilot-instructions (always apply)";else{let x=Zt(k,l,a);if(!x.applies)continue;O=x.reason??"matched"}let N=a?(0,xe.relative)(a,m.path):m.path;d.push({relativePath:N,matchReason:O,content:y,distance:m.distance})}catch{}return d.sort((m,E)=>m.distance-E.distance)},clearSession:i=>{t.delete(i),wr(i)},isTrackedTool:i=>qt.includes(i.toLowerCase())}}var Qe=require("node:fs"),X=require("node:path");var $=require("node:fs"),Cr=require("node:path");var rn=require("node:path"),br=require("node:os"),Aa=(0,rn.join)((0,br.homedir)(),".olympus"),ze=(0,rn.join)(Aa,"directory-readme"),xr="README.md",sn=["read","write","edit","multiedit"];function an(e){return(0,Cr.join)(ze,`${e}.json`)}function Pr(e){let t=an(e);if(!(0,$.existsSync)(t))return new Set;try{let n=(0,$.readFileSync)(t,"utf-8"),o=JSON.parse(n);return new Set(o.injectedPaths)}catch{return new Set}}function Lr(e,t){(0,$.existsSync)(ze)||(0,$.mkdirSync)(ze,{recursive:!0});let n={sessionID:e,injectedPaths:Array.from(t),updatedAt:Date.now()};(0,$.writeFileSync)(an(e),JSON.stringify(n,null,2))}function Dr(e){let t=an(e);(0,$.existsSync)(t)&&(0,$.unlinkSync)(t)}var Mr=4,Na=5e3;function wa(e,t=Na){if(Math.ceil(e.length/Mr)<=t)return{result:e,truncated:!1};let o=t*Mr;return{result:e.slice(0,o),truncated:!0}}function Ur(e){let t=new Map;function n(i){return t.has(i)||t.set(i,Pr(i)),t.get(i)}function o(i){return i?i.startsWith("/")?i:(0,X.resolve)(e,i):null}function r(i){let l=[],a=i;for(;;){let c=(0,X.join)(a,xr);if((0,Qe.existsSync)(c)&&l.push(c),a===e)break;let u=(0,X.dirname)(a);if(u===a||!u.startsWith(e))break;a=u}return l.reverse()}function s(i,l){let a=o(i);if(!a)return"";let c=(0,X.dirname)(a),u=n(l),d=r(c),m="";for(let E of d){let k=(0,X.dirname)(E);if(!u.has(k))try{let y=(0,Qe.readFileSync)(E,"utf-8"),{result:O,truncated:N}=wa(y),x=N?`
379
379
 
380
- [Note: Content was truncated to save context window space. For full context, please read the file directly: ${f}]`:"";p+=`
380
+ [Note: Content was truncated to save context window space. For full context, please read the file directly: ${E}]`:"";m+=`
381
381
 
382
- [Project README: ${f}]
383
- ${v}${N}`,l.add(g)}catch{}}return p&&ir(a,l),p}return{processToolExecution:(i,a,c)=>bt.includes(i.toLowerCase())?s(a,c):"",getReadmesForFile:i=>{let a=o(i);if(!a)return[];let c=(0,U.dirname)(a);return r(c)},clearSession:i=>{t.delete(i),ar(i)},isTrackedTool:i=>bt.includes(i.toLowerCase())}}var lr="non-interactive-env",dr={CI:"true",DEBIAN_FRONTEND:"noninteractive",GIT_TERMINAL_PROMPT:"0",GCM_INTERACTIVE:"never",HOMEBREW_NO_AUTO_UPDATE:"1",GIT_EDITOR:":",EDITOR:":",VISUAL:"",GIT_SEQUENCE_EDITOR:":",GIT_MERGE_AUTOEDIT:"no",GIT_PAGER:"cat",PAGER:"cat",npm_config_yes:"true",PIP_NO_INPUT:"1",YARN_ENABLE_IMMUTABLE_INSTALLS:"false"},Lt={npm:{bad:["npm init","npm install (prompts)"],good:["npm init -y","npm install --yes"]},apt:{bad:["apt-get install pkg"],good:["apt-get install -y pkg","DEBIAN_FRONTEND=noninteractive apt-get install pkg"]},pip:{bad:["pip install pkg (with prompts)"],good:["pip install --no-input pkg","PIP_NO_INPUT=1 pip install pkg"]},git:{bad:["git commit","git merge branch","git add -p","git rebase -i"],good:["git commit -m 'msg'","git merge --no-edit branch","git add .","git rebase --no-edit"]},system:{bad:["rm file (prompts)","cp a b (prompts)","ssh host"],good:["rm -f file","cp -f a b","ssh -o BatchMode=yes host","unzip -o file.zip"]},banned:["vim","nano","vi","emacs","less","more","man","python (REPL)","node (REPL)","git add -p","git rebase -i"],workarounds:{yesPipe:"yes | ./script.sh",heredoc:`./script.sh <<EOF
382
+ [Project README: ${E}]
383
+ ${O}${x}`,u.add(k)}catch{}}return m&&Lr(l,u),m}return{processToolExecution:(i,l,a)=>sn.includes(i.toLowerCase())?s(l,a):"",getReadmesForFile:i=>{let l=o(i);if(!l)return[];let a=(0,X.dirname)(l);return r(a)},clearSession:i=>{t.delete(i),Dr(i)},isTrackedTool:i=>sn.includes(i.toLowerCase())}}var jr="non-interactive-env",$r={CI:"true",DEBIAN_FRONTEND:"noninteractive",GIT_TERMINAL_PROMPT:"0",GCM_INTERACTIVE:"never",HOMEBREW_NO_AUTO_UPDATE:"1",GIT_EDITOR:":",EDITOR:":",VISUAL:"",GIT_SEQUENCE_EDITOR:":",GIT_MERGE_AUTOEDIT:"no",GIT_PAGER:"cat",PAGER:"cat",npm_config_yes:"true",PIP_NO_INPUT:"1",YARN_ENABLE_IMMUTABLE_INSTALLS:"false"},cn={npm:{bad:["npm init","npm install (prompts)"],good:["npm init -y","npm install --yes"]},apt:{bad:["apt-get install pkg"],good:["apt-get install -y pkg","DEBIAN_FRONTEND=noninteractive apt-get install pkg"]},pip:{bad:["pip install pkg (with prompts)"],good:["pip install --no-input pkg","PIP_NO_INPUT=1 pip install pkg"]},git:{bad:["git commit","git merge branch","git add -p","git rebase -i"],good:["git commit -m 'msg'","git merge --no-edit branch","git add .","git rebase --no-edit"]},system:{bad:["rm file (prompts)","cp a b (prompts)","ssh host"],good:["rm -f file","cp -f a b","ssh -o BatchMode=yes host","unzip -o file.zip"]},banned:["vim","nano","vi","emacs","less","more","man","python (REPL)","node (REPL)","git add -p","git rebase -i"],workarounds:{yesPipe:"yes | ./script.sh",heredoc:`./script.sh <<EOF
384
384
  option1
385
385
  option2
386
- EOF`,expectAlternative:"Use environment variables or config files instead of expect"}};var pr=Lt.banned.filter(e=>!e.includes("(")).map(e=>new RegExp(`\\b${e}\\b`));function $i(e){for(let t=0;t<pr.length;t++)if(pr[t].test(e))return Lt.banned[t]}function ji(e){return e===""?"''":/[^a-zA-Z0-9_\-.:\/]/.test(e)?`'${e.replace(/'/g,"'\\''")}'`:e}function Fi(e){return`export ${Object.entries(e).map(([n,o])=>`${n}=${ji(o)}`).join(" ")};`}var Mt={name:lr,async beforeCommand(e){let t=$i(e),n=t?`Warning: '${t}' is an interactive command that may hang in non-interactive environments.`:void 0;return/\bgit\b/.test(e)?{command:`${Fi(dr)} ${e}`,warning:n}:{command:e,warning:n}}};var Ut=require("child_process");var mr="olympus-orchestrator",fr=".olympus/",gr=["Write","Edit","write","edit"],hr=`
386
+ EOF`,expectAlternative:"Use environment variables or config files instead of expect"}};var Fr=cn.banned.filter(e=>!e.includes("(")).map(e=>new RegExp(`\\b${e}\\b`));function va(e){for(let t=0;t<Fr.length;t++)if(Fr[t].test(e))return cn.banned[t]}function ba(e){return e===""?"''":/[^a-zA-Z0-9_\-.:\/]/.test(e)?`'${e.replace(/'/g,"'\\''")}'`:e}function xa(e){return`export ${Object.entries(e).map(([n,o])=>`${n}=${ba(o)}`).join(" ")};`}var ln={name:jr,async beforeCommand(e){let t=va(e),n=t?`Warning: '${t}' is an interactive command that may hang in non-interactive environments.`:void 0;return/\bgit\b/.test(e)?{command:`${xa($r)} ${e}`,warning:n}:{command:e,warning:n}}};var un=require("child_process");var Hr="olympus-orchestrator",Gr=".olympus/",Br=["Write","Edit","write","edit"],Yr=`
387
387
 
388
388
  ---
389
389
 
@@ -409,7 +409,7 @@ You should NOT:
409
409
  3. Verify the subagent's work after completion
410
410
 
411
411
  ---
412
- `,Tr=`
412
+ `,Wr=`
413
413
 
414
414
  ---
415
415
 
@@ -455,7 +455,7 @@ prompt="[specific single task with clear acceptance criteria]"
455
455
  DELEGATE. DON'T IMPLEMENT.
456
456
 
457
457
  ---
458
- `,Er=`[SYSTEM REMINDER - QUEST CONTINUATION]
458
+ `,Vr=`[SYSTEM REMINDER - QUEST CONTINUATION]
459
459
 
460
460
  You have an active work plan with incomplete tasks. Continue working.
461
461
 
@@ -464,7 +464,7 @@ RULES:
464
464
  - Mark each checkbox [x] in the plan file when done
465
465
  - Use the notepad at .olympus/notepads/{PLAN_NAME}/ to record learnings
466
466
  - Do not stop until all tasks are complete
467
- - If blocked, document the blocker and move to the next task`,Sr=`**MANDATORY VERIFICATION - SUBAGENTS LIE**
467
+ - If blocked, document the blocker and move to the next task`,Kr=`**MANDATORY VERIFICATION - SUBAGENTS LIE**
468
468
 
469
469
  Subagents FREQUENTLY claim completion when:
470
470
  - Tests are actually FAILING
@@ -479,7 +479,7 @@ Subagents FREQUENTLY claim completion when:
479
479
  3. Check build/typecheck - Must succeed
480
480
 
481
481
  DO NOT TRUST THE AGENT'S SELF-REPORT.
482
- VERIFY EACH CLAIM WITH YOUR OWN TOOL CALLS.`,kr=`
482
+ VERIFY EACH CLAIM WITH YOUR OWN TOOL CALLS.`,qr=`
483
483
 
484
484
  [SYSTEM DIRECTIVE - SINGLE TASK ONLY]
485
485
 
@@ -502,37 +502,37 @@ If you were NOT given **exactly ONE atomic task**, you MUST:
502
502
  - Batch delegation = sloppy work = rework = wasted tokens
503
503
 
504
504
  **REFUSE multi-task requests. DEMAND single-task clarity.**
505
- `;var ge=".olympus",ve="quest.json",Hi=`${ge}/${ve}`,yr="notepads",Gi=`${ge}/${yr}`;var w=require("fs"),Pe=require("path");function Or(e){return(0,Pe.join)(e,ge,ve)}function be(e){let t=Or(e);if(!(0,w.existsSync)(t))return null;try{let n=(0,w.readFileSync)(t,"utf-8");return JSON.parse(n)}catch{return null}}function De(e){if(!(0,w.existsSync)(e))return{total:0,completed:0,isComplete:!0};try{let t=(0,w.readFileSync)(e,"utf-8"),n=t.match(/^[-*]\s*\[\s*\]/gm)||[],o=t.match(/^[-*]\s*\[[xX]\]/gm)||[],r=n.length+o.length,s=o.length;return{total:r,completed:s,isComplete:r===0||s===r}}catch{return{total:0,completed:0,isComplete:!0}}}function Rr(e){return e?e.includes(fr):!0}function Ir(e){return gr.includes(e)}function Wi(e){try{let t=(0,Ut.execSync)("git diff --numstat HEAD",{cwd:e,encoding:"utf-8",timeout:5e3}).trim();if(!t)return[];let n=(0,Ut.execSync)("git status --porcelain",{cwd:e,encoding:"utf-8",timeout:5e3}).trim(),o=new Map;for(let s of n.split(`
506
- `)){if(!s)continue;let i=s.substring(0,2).trim(),a=s.substring(3);i==="A"||i==="??"?o.set(a,"added"):i==="D"?o.set(a,"deleted"):o.set(a,"modified")}let r=[];for(let s of t.split(`
507
- `)){let i=s.split(" ");if(i.length<3)continue;let[a,c,u]=i,l=a==="-"?0:parseInt(a,10),d=c==="-"?0:parseInt(c,10);r.push({path:u,added:l,removed:d,status:o.get(u)??"modified"})}return r}catch{return[]}}function Ki(e){if(e.length===0)return`[FILE CHANGES SUMMARY]
505
+ `;var Ce=".olympus",Ze="quest.json",Ca=`${Ce}/${Ze}`,Jr="notepads",Pa=`${Ce}/${Jr}`;var Y=require("fs"),et=require("path");function Xr(e){return(0,et.join)(e,Ce,Ze)}function tt(e){let t=Xr(e);if(!(0,Y.existsSync)(t))return null;try{let n=(0,Y.readFileSync)(t,"utf-8");return JSON.parse(n)}catch{return null}}function nt(e){if(!(0,Y.existsSync)(e))return{total:0,completed:0,isComplete:!0};try{let t=(0,Y.readFileSync)(e,"utf-8"),n=t.match(/^[-*]\s*\[\s*\]/gm)||[],o=t.match(/^[-*]\s*\[[xX]\]/gm)||[],r=n.length+o.length,s=o.length;return{total:r,completed:s,isComplete:r===0||s===r}}catch{return{total:0,completed:0,isComplete:!0}}}function zr(e){return e?e.includes(Gr):!0}function Qr(e){return Br.includes(e)}function Ma(e){try{let t=(0,un.execSync)("git diff --numstat HEAD",{cwd:e,encoding:"utf-8",timeout:5e3}).trim();if(!t)return[];let n=(0,un.execSync)("git status --porcelain",{cwd:e,encoding:"utf-8",timeout:5e3}).trim(),o=new Map;for(let s of n.split(`
506
+ `)){if(!s)continue;let i=s.substring(0,2).trim(),l=s.substring(3);i==="A"||i==="??"?o.set(l,"added"):i==="D"?o.set(l,"deleted"):o.set(l,"modified")}let r=[];for(let s of t.split(`
507
+ `)){let i=s.split(" ");if(i.length<3)continue;let[l,a,c]=i,u=l==="-"?0:parseInt(l,10),d=a==="-"?0:parseInt(a,10);r.push({path:c,added:u,removed:d,status:o.get(c)??"modified"})}return r}catch{return[]}}function Ua(e){if(e.length===0)return`[FILE CHANGES SUMMARY]
508
508
  No file changes detected.
509
509
  `;let t=e.filter(s=>s.status==="modified"),n=e.filter(s=>s.status==="added"),o=e.filter(s=>s.status==="deleted"),r=["[FILE CHANGES SUMMARY]"];if(t.length>0){r.push("Modified files:");for(let s of t)r.push(` ${s.path} (+${s.added}, -${s.removed})`);r.push("")}if(n.length>0){r.push("Created files:");for(let s of n)r.push(` ${s.path} (+${s.added})`);r.push("")}if(o.length>0){r.push("Deleted files:");for(let s of o)r.push(` ${s.path} (-${s.removed})`);r.push("")}return r.join(`
510
- `)}function Cr(e){let t=Sr;return e&&(t+=`
510
+ `)}function Zr(e){let t=Kr;return e&&(t+=`
511
511
 
512
512
  ---
513
513
 
514
514
  **If ANY verification fails, resume the subagent with the fix:**
515
- Task tool with resume="${e}", prompt="fix: [describe the specific failure]"`),t}function Vi(e,t,n){let o=t.total-t.completed;return`
515
+ Task tool with resume="${e}", prompt="fix: [describe the specific failure]"`),t}function ja(e,t,n){let o=t.total-t.completed;return`
516
516
  ---
517
517
 
518
518
  **State:** Plan: ${e} | ${t.completed}/${t.total} done, ${o} left
519
519
 
520
520
  ---
521
521
 
522
- ${Cr(n)}
522
+ ${Zr(n)}
523
523
 
524
- ALL pass? \u2192 commit atomic unit, mark \`[x]\`, next task.`}function qi(e,t,n){return Er.replace(/{PLAN_NAME}/g,e)+`
524
+ ALL pass? \u2192 commit atomic unit, mark \`[x]\`, next task.`}function $a(e,t,n){return Vr.replace(/{PLAN_NAME}/g,e)+`
525
525
 
526
- [Status: ${n-t}/${n} completed, ${t} remaining]`}function Ji(e){let{toolName:t,toolInput:n}=e;if(!Ir(t))return{continue:!0};let o=n?.filePath??n?.path??n?.file;return!o||Rr(o)?{continue:!0}:{continue:!0,message:Tr.replace("$FILE_PATH",o)}}function zi(e,t){let{toolName:n,toolInput:o,directory:r}=e,s=r||process.cwd();if(Ir(n)){let i=o?.filePath??o?.path??o?.file;if(i&&!Rr(i))return{continue:!0,modifiedOutput:t+hr}}if(n==="Task"||n==="task"){if(t.includes("Background task launched")||t.includes("Background task resumed"))return{continue:!0};let a=Wi(s),c=Ki(a),u=be(s);if(u){let l=De(u.active_plan);return{continue:!0,modifiedOutput:`
526
+ [Status: ${n-t}/${n} completed, ${t} remaining]`}function Fa(e){let{toolName:t,toolInput:n}=e;if(!Qr(t))return{continue:!0};let o=n?.filePath??n?.path??n?.file;return!o||zr(o)?{continue:!0}:{continue:!0,message:Wr.replace("$FILE_PATH",o)}}function Ha(e,t){let{toolName:n,toolInput:o,directory:r}=e,s=r||process.cwd();if(Qr(n)){let i=o?.filePath??o?.path??o?.file;if(i&&!zr(i))return{continue:!0,modifiedOutput:t+Yr}}if(n==="Task"||n==="task"){if(t.includes("Background task launched")||t.includes("Background task resumed"))return{continue:!0};let l=Ma(s),a=Ua(l),c=tt(s);if(c){let u=nt(c.active_plan);return{continue:!0,modifiedOutput:`
527
527
  ## SUBAGENT WORK COMPLETED
528
528
 
529
- ${c}
529
+ ${a}
530
530
  <system-reminder>
531
- ${Vi(u.plan_name,l)}
531
+ ${ja(c.plan_name,u)}
532
532
  </system-reminder>`}}return{continue:!0,modifiedOutput:t+`
533
533
  <system-reminder>
534
- ${Cr()}
535
- </system-reminder>`}}return{continue:!0}}function Xi(e){let t=be(e);if(!t)return{shouldContinue:!1};let n=De(t.active_plan);if(n.isComplete)return{shouldContinue:!1};let o=n.total-n.completed;return{shouldContinue:!0,message:qi(t.plan_name,o,n.total)}}function Le(e){return{name:mr,preTool:(t,n)=>Ji({toolName:t,toolInput:n,directory:e}),postTool:(t,n,o)=>zi({toolName:t,toolInput:n,directory:e},o),checkContinuation:()=>Xi(e),getSingleTaskDirective:()=>kr}}function _r(e){if(!e||typeof e!="object")return null;let t=e;return t.file_path||t.filePath||t.path||t.file}function Ar(){m({name:"rulesInjector",event:"PreToolUse",priority:10,matcher:/^(read|edit|write|glob|grep)$/i,handler:e=>{let t=tr(e.directory||process.cwd()),n=_r(e.toolInput);return n?{continue:!0,message:t.processToolExecution(e.toolName,n,e.sessionId||"default")||void 0}:{continue:!0}}}),m({name:"directoryReadmeInjector",event:"PreToolUse",priority:20,matcher:/^(read|edit|write|glob|grep|bash)$/i,handler:e=>{let t=ur(e.directory||process.cwd()),n=_r(e.toolInput);return n?{continue:!0,message:t.processToolExecution(e.toolName,n,e.sessionId||"default")||void 0}:{continue:!0}}}),m({name:"nonInteractiveEnv",event:"PreToolUse",priority:30,matcher:/^bash$/i,handler:async e=>{let t=e.toolInput;if(!t?.command)return{continue:!0};try{if(!Mt.beforeCommand)return{continue:!0};let n=await Mt.beforeCommand(t.command);return{continue:!0,message:n.warning,modifiedInput:n.command!==t.command?{...t,command:n.command}:void 0}}catch(n){return console.error("[nonInteractiveEnv] Error:",n),{continue:!0}}}}),m({name:"olympusOrchestratorPre",event:"PreToolUse",priority:40,matcher:/^(write|edit|bash|task)$/i,handler:e=>Le(e.directory||process.cwd()).preTool(e.toolName,e.toolInput)})}var Qi=["oldString and newString must be different","oldString not found","oldString found multiple times","old_string not found","old_string and new_string must be different"],Zi=`
534
+ ${Zr()}
535
+ </system-reminder>`}}return{continue:!0}}function Ga(e){let t=tt(e);if(!t)return{shouldContinue:!1};let n=nt(t.active_plan);if(n.isComplete)return{shouldContinue:!1};let o=n.total-n.completed;return{shouldContinue:!0,message:$a(t.plan_name,o,n.total)}}function ot(e){return{name:Hr,preTool:(t,n)=>Fa({toolName:t,toolInput:n,directory:e}),postTool:(t,n,o)=>Ha({toolName:t,toolInput:n,directory:e},o),checkContinuation:()=>Ga(e),getSingleTaskDirective:()=>qr}}function es(e){if(!e||typeof e!="object")return null;let t=e;return t.file_path||t.filePath||t.path||t.file}function ts(){T({name:"rulesInjector",event:"PreToolUse",priority:10,matcher:/^(read|edit|write|glob|grep)$/i,handler:e=>{let t=vr(e.directory||process.cwd()),n=es(e.toolInput);return n?{continue:!0,message:t.processToolExecution(e.toolName,n,e.sessionId||"default")||void 0}:{continue:!0}}}),T({name:"directoryReadmeInjector",event:"PreToolUse",priority:20,matcher:/^(read|edit|write|glob|grep|bash)$/i,handler:e=>{let t=Ur(e.directory||process.cwd()),n=es(e.toolInput);return n?{continue:!0,message:t.processToolExecution(e.toolName,n,e.sessionId||"default")||void 0}:{continue:!0}}}),T({name:"nonInteractiveEnv",event:"PreToolUse",priority:30,matcher:/^bash$/i,handler:async e=>{let t=e.toolInput;if(!t?.command)return{continue:!0};try{if(!ln.beforeCommand)return{continue:!0};let n=await ln.beforeCommand(t.command);return{continue:!0,message:n.warning,modifiedInput:n.command!==t.command?{...t,command:n.command}:void 0}}catch(n){return console.error("[nonInteractiveEnv] Error:",n),{continue:!0}}}}),T({name:"olympusOrchestratorPre",event:"PreToolUse",priority:40,matcher:/^(write|edit|bash|task)$/i,handler:e=>ot(e.directory||process.cwd()).preTool(e.toolName,e.toolInput)})}var Ba=["oldString and newString must be different","oldString not found","oldString found multiple times","old_string not found","old_string and new_string must be different"],Ya=`
536
536
  [EDIT ERROR - IMMEDIATE ACTION REQUIRED]
537
537
 
538
538
  You made an Edit mistake. STOP and do this NOW:
@@ -543,7 +543,7 @@ You made an Edit mistake. STOP and do this NOW:
543
543
  4. CONTINUE with corrected action based on the real file content
544
544
 
545
545
  DO NOT attempt another edit until you've read and verified the file state.
546
- `;function ea(e){let t=e.toLowerCase();return Qi.some(n=>t.includes(n.toLowerCase()))}function Nr(){return{afterToolExecute:(e,t)=>e.tool.toLowerCase()!=="edit"?t:ea(t.output)?{...t,output:t.output+Zi}:t}}var vr=b(require("fs"),1),Ue=b(require("path"),1),Pr=require("os");var Me=new Set(["given","when","then","arrange","act","assert","when & then","when&then"]),$t=["type:","noqa","pyright:","ruff:","mypy:","pylint:","flake8:","pyre:","pytype:","eslint-disable","eslint-enable","eslint-ignore","prettier-ignore","ts-ignore","ts-expect-error","ts-nocheck","@ts-ignore","@ts-expect-error","@ts-nocheck","clippy::","allow(","deny(","warn(","forbid(","nolint","go:generate","go:build","go:embed","coverage:","c8 ignore","istanbul ignore","biome-ignore","region","endregion","#region","#endregion"],jt=`COMMENT/DOCSTRING DETECTED - IMMEDIATE ACTION REQUIRED
546
+ `;function Wa(e){let t=e.toLowerCase();return Ba.some(n=>t.includes(n.toLowerCase()))}function ns(){return{afterToolExecute:(e,t)=>e.tool.toLowerCase()!=="edit"?t:Wa(t.output)?{...t,output:t.output+Ya}:t}}var ss=ce(require("fs"),1),st=ce(require("path"),1),is=require("os");var rt=new Set(["given","when","then","arrange","act","assert","when & then","when&then"]),dn=["type:","noqa","pyright:","ruff:","mypy:","pylint:","flake8:","pyre:","pytype:","eslint-disable","eslint-enable","eslint-ignore","prettier-ignore","ts-ignore","ts-expect-error","ts-nocheck","@ts-ignore","@ts-expect-error","@ts-nocheck","clippy::","allow(","deny(","warn(","forbid(","nolint","go:generate","go:build","go:embed","coverage:","c8 ignore","istanbul ignore","biome-ignore","region","endregion","#region","#endregion"],pn=`COMMENT/DOCSTRING DETECTED - IMMEDIATE ACTION REQUIRED
547
547
 
548
548
  Your recent changes contain comments or docstrings, which triggered this hook.
549
549
  You need to take immediate action. You must follow the conditions below.
@@ -581,13 +581,13 @@ MANDATORY REQUIREMENT: You must acknowledge this hook message and take one of th
581
581
  Review in the above priority order and take the corresponding action EVERY TIME this appears.
582
582
 
583
583
  Detected comments/docstrings:
584
- `,Ft={js:/\/\/.*$|\/\*[\s\S]*?\*\//gm,ts:/\/\/.*$|\/\*[\s\S]*?\*\//gm,jsx:/\/\/.*$|\/\*[\s\S]*?\*\//gm,tsx:/\/\/.*$|\/\*[\s\S]*?\*\//gm,java:/\/\/.*$|\/\*[\s\S]*?\*\//gm,c:/\/\/.*$|\/\*[\s\S]*?\*\//gm,cpp:/\/\/.*$|\/\*[\s\S]*?\*\//gm,cs:/\/\/.*$|\/\*[\s\S]*?\*\//gm,go:/\/\/.*$/gm,rust:/\/\/.*$|\/\*[\s\S]*?\*\//gm,swift:/\/\/.*$|\/\*[\s\S]*?\*\//gm,kotlin:/\/\/.*$|\/\*[\s\S]*?\*\//gm,py:/#.*$|'''[\s\S]*?'''|"""[\s\S]*?"""/gm,rb:/#.*$|=begin[\s\S]*?=end/gm,sh:/#.*$/gm,bash:/#.*$/gm,zsh:/#.*$/gm,yaml:/#.*$/gm,yml:/#.*$/gm,toml:/#.*$/gm,html:/<!--[\s\S]*?-->/gm,xml:/<!--[\s\S]*?-->/gm,vue:/<!--[\s\S]*?-->|\/\/.*$|\/\*[\s\S]*?\*\//gm,svelte:/<!--[\s\S]*?-->|\/\/.*$|\/\*[\s\S]*?\*\//gm,sql:/--.*$/gm,lua:/--.*$|--\[\[[\s\S]*?\]\]/gm},Ht={".js":"js",".mjs":"js",".cjs":"js",".ts":"ts",".mts":"ts",".cts":"ts",".jsx":"jsx",".tsx":"tsx",".java":"java",".c":"c",".h":"c",".cpp":"cpp",".cc":"cpp",".cxx":"cpp",".hpp":"cpp",".cs":"cs",".go":"go",".rs":"rust",".swift":"swift",".kt":"kotlin",".kts":"kotlin",".py":"py",".pyi":"py",".rb":"rb",".sh":"sh",".bash":"bash",".zsh":"zsh",".yaml":"yaml",".yml":"yml",".toml":"toml",".html":"html",".htm":"html",".xml":"xml",".vue":"vue",".svelte":"svelte",".sql":"sql",".lua":"lua"};function ta(e){return e.text.trim().startsWith("#!")&&e.lineNumber===1?{shouldSkip:!0,reason:"shebang"}:{shouldSkip:!1}}function na(e){if(e.isDocstring)return{shouldSkip:!1};let t=e.text.toLowerCase().trim();for(let n of Me){if(t.startsWith(`#${n}`)||t.startsWith(`// ${n}`))return{shouldSkip:!0,reason:`BDD keyword: ${n}`};if(t.includes(n)&&t.split(/\s+/).some(r=>Me.has(r.replace(/[^a-z&]/g,""))))return{shouldSkip:!0,reason:"BDD keyword detected"}}return{shouldSkip:!1}}function oa(e){let t=e.text.toLowerCase().trim();for(let n of $t)if(t.includes(n.toLowerCase()))return{shouldSkip:!0,reason:`directive: ${n}`};return{shouldSkip:!1}}function ra(e){return{shouldSkip:!1}}function sa(e){let t=e.text.toLowerCase(),n=["copyright","license","licensed under","spdx-license-identifier","all rights reserved","mit license","apache license","gnu general public","bsd license"];for(let o of n)if(t.includes(o))return{shouldSkip:!0,reason:"copyright/license"};return{shouldSkip:!1}}function ia(e){let t=e.text.toUpperCase(),n=["TODO","FIXME","HACK","XXX","NOTE","REVIEW"];for(let o of n)if(t.includes(o))return{shouldSkip:!0,reason:`todo marker: ${o}`};return{shouldSkip:!1}}var aa=[ta,na,oa,sa,ia,ra];function Gt(e){return e.filter(t=>{for(let n of aa)if(n(t).shouldSkip)return!1;return!0})}var ca=process.env.COMMENT_CHECKER_DEBUG==="1",ua=Ue.join((0,Pr.tmpdir)(),"comment-checker-debug.log");function V(...e){if(ca){let t=`[${new Date().toISOString()}] [comment-checker] ${e.map(n=>typeof n=="object"?JSON.stringify(n,null,2):String(n)).join(" ")}
585
- `;vr.appendFileSync(ua,t)}}function la(e){let t=Ue.extname(e).toLowerCase();return Ht[t]}function Bt(e,t){let n=la(t);if(!n)return V("unsupported language for:",t),[];let o=Ft[n];if(!o)return V("no pattern for language:",n),[];let r=[],s=e.split(`
586
- `);o.lastIndex=0;let i;for(;(i=o.exec(e))!==null;){let a=i.index,c=i[0],l=e.substring(0,a).split(`
587
- `).length,d="line",p=!1;c.startsWith("/*")||c.startsWith("<!--")?d="block":(c.startsWith("'''")||c.startsWith('"""')||c.startsWith("=begin"))&&(d="docstring",p=!0),r.push({text:c.trim(),lineNumber:l,filePath:t,commentType:d,isDocstring:p})}return r}function da(e,t){return Bt(e,t)}function xr(e,t,n){let o=Bt(e,t);if(n){let r=Bt(n,t),s=new Set(r.map(i=>i.text));return o.filter(i=>!s.has(i.text))}return o}function pa(e){if(e.length===0)return"";let t=new Map;for(let o of e){let r=t.get(o.filePath)||[];r.push(o),t.set(o.filePath,r)}let n=jt;for(let[o,r]of t){n+=`
584
+ `,fn={js:/\/\/.*$|\/\*[\s\S]*?\*\//gm,ts:/\/\/.*$|\/\*[\s\S]*?\*\//gm,jsx:/\/\/.*$|\/\*[\s\S]*?\*\//gm,tsx:/\/\/.*$|\/\*[\s\S]*?\*\//gm,java:/\/\/.*$|\/\*[\s\S]*?\*\//gm,c:/\/\/.*$|\/\*[\s\S]*?\*\//gm,cpp:/\/\/.*$|\/\*[\s\S]*?\*\//gm,cs:/\/\/.*$|\/\*[\s\S]*?\*\//gm,go:/\/\/.*$/gm,rust:/\/\/.*$|\/\*[\s\S]*?\*\//gm,swift:/\/\/.*$|\/\*[\s\S]*?\*\//gm,kotlin:/\/\/.*$|\/\*[\s\S]*?\*\//gm,py:/#.*$|'''[\s\S]*?'''|"""[\s\S]*?"""/gm,rb:/#.*$|=begin[\s\S]*?=end/gm,sh:/#.*$/gm,bash:/#.*$/gm,zsh:/#.*$/gm,yaml:/#.*$/gm,yml:/#.*$/gm,toml:/#.*$/gm,html:/<!--[\s\S]*?-->/gm,xml:/<!--[\s\S]*?-->/gm,vue:/<!--[\s\S]*?-->|\/\/.*$|\/\*[\s\S]*?\*\//gm,svelte:/<!--[\s\S]*?-->|\/\/.*$|\/\*[\s\S]*?\*\//gm,sql:/--.*$/gm,lua:/--.*$|--\[\[[\s\S]*?\]\]/gm},mn={".js":"js",".mjs":"js",".cjs":"js",".ts":"ts",".mts":"ts",".cts":"ts",".jsx":"jsx",".tsx":"tsx",".java":"java",".c":"c",".h":"c",".cpp":"cpp",".cc":"cpp",".cxx":"cpp",".hpp":"cpp",".cs":"cs",".go":"go",".rs":"rust",".swift":"swift",".kt":"kotlin",".kts":"kotlin",".py":"py",".pyi":"py",".rb":"rb",".sh":"sh",".bash":"bash",".zsh":"zsh",".yaml":"yaml",".yml":"yml",".toml":"toml",".html":"html",".htm":"html",".xml":"xml",".vue":"vue",".svelte":"svelte",".sql":"sql",".lua":"lua"};function Va(e){return e.text.trim().startsWith("#!")&&e.lineNumber===1?{shouldSkip:!0,reason:"shebang"}:{shouldSkip:!1}}function Ka(e){if(e.isDocstring)return{shouldSkip:!1};let t=e.text.toLowerCase().trim();for(let n of rt){if(t.startsWith(`#${n}`)||t.startsWith(`// ${n}`))return{shouldSkip:!0,reason:`BDD keyword: ${n}`};if(t.includes(n)&&t.split(/\s+/).some(r=>rt.has(r.replace(/[^a-z&]/g,""))))return{shouldSkip:!0,reason:"BDD keyword detected"}}return{shouldSkip:!1}}function qa(e){let t=e.text.toLowerCase().trim();for(let n of dn)if(t.includes(n.toLowerCase()))return{shouldSkip:!0,reason:`directive: ${n}`};return{shouldSkip:!1}}function Ja(e){return{shouldSkip:!1}}function Xa(e){let t=e.text.toLowerCase(),n=["copyright","license","licensed under","spdx-license-identifier","all rights reserved","mit license","apache license","gnu general public","bsd license"];for(let o of n)if(t.includes(o))return{shouldSkip:!0,reason:"copyright/license"};return{shouldSkip:!1}}function za(e){let t=e.text.toUpperCase(),n=["TODO","FIXME","HACK","XXX","NOTE","REVIEW"];for(let o of n)if(t.includes(o))return{shouldSkip:!0,reason:`todo marker: ${o}`};return{shouldSkip:!1}}var Qa=[Va,Ka,qa,Xa,za,Ja];function gn(e){return e.filter(t=>{for(let n of Qa)if(n(t).shouldSkip)return!1;return!0})}var Za=process.env.COMMENT_CHECKER_DEBUG==="1",ec=st.join((0,is.tmpdir)(),"comment-checker-debug.log");function ae(...e){if(Za){let t=`[${new Date().toISOString()}] [comment-checker] ${e.map(n=>typeof n=="object"?JSON.stringify(n,null,2):String(n)).join(" ")}
585
+ `;ss.appendFileSync(ec,t)}}function tc(e){let t=st.extname(e).toLowerCase();return mn[t]}function hn(e,t){let n=tc(t);if(!n)return ae("unsupported language for:",t),[];let o=fn[n];if(!o)return ae("no pattern for language:",n),[];let r=[],s=e.split(`
586
+ `);o.lastIndex=0;let i;for(;(i=o.exec(e))!==null;){let l=i.index,a=i[0],u=e.substring(0,l).split(`
587
+ `).length,d="line",m=!1;a.startsWith("/*")||a.startsWith("<!--")?d="block":(a.startsWith("'''")||a.startsWith('"""')||a.startsWith("=begin"))&&(d="docstring",m=!0),r.push({text:a.trim(),lineNumber:u,filePath:t,commentType:d,isDocstring:m})}return r}function nc(e,t){return hn(e,t)}function os(e,t,n){let o=hn(e,t);if(n){let r=hn(n,t),s=new Set(r.map(i=>i.text));return o.filter(i=>!s.has(i.text))}return o}function oc(e){if(e.length===0)return"";let t=new Map;for(let o of e){let r=t.get(o.filePath)||[];r.push(o),t.set(o.filePath,r)}let n=pn;for(let[o,r]of t){n+=`
588
588
  File: ${o}
589
589
  `;for(let s of r){let i=s.isDocstring?"docstring":s.commentType;n+=` Line ${s.lineNumber} (${i}): ${s.text.substring(0,100)}${s.text.length>100?"...":""}
590
- `}}return n}function ma(e,t,n,o,r){let s=[];if(t)s=da(t,e);else if(o)s=xr(o,e,n);else if(r&&r.length>0)for(let a of r){let c=xr(a.new_string,e,a.old_string);s.push(...c)}let i=Gt(s);return V(`found ${s.length} comments, ${i.length} flagged after filtering`),i.length===0?{hasComments:!1,count:0,comments:[]}:{hasComments:!0,count:i.length,message:pa(i),comments:i}}var he=new Map,fa=6e4;function ga(){let e=Date.now();for(let[t,n]of he)e-n.timestamp>fa&&he.delete(t)}var wr=!1;function br(e){return V("createCommentCheckerHook called",{config:e}),wr||(wr=!0,setInterval(ga,1e4)),{preToolUse:t=>{let n=t.tool_name.toLowerCase();if(n!=="write"&&n!=="edit"&&n!=="multiedit")return null;let o=t.tool_input.file_path??t.tool_input.filePath??t.tool_input.path,r=t.tool_input.content,s=t.tool_input.old_string??t.tool_input.oldString,i=t.tool_input.new_string??t.tool_input.newString,a=t.tool_input.edits;if(!o)return null;let c=`${t.session_id}-${Date.now()}-${Math.random().toString(36).slice(2)}`;return V("registering pendingCall:",{callId:c,filePath:o,tool:n}),he.set(c,{filePath:o,content:r,oldString:s,newString:i,edits:a,tool:n,sessionId:t.session_id,timestamp:Date.now()}),null},postToolUse:t=>{let n=t.tool_name.toLowerCase();if(n!=="write"&&n!=="edit"&&n!=="multiedit")return null;let o,r;for(let[i,a]of he)if(a.sessionId===t.session_id&&a.tool===n){o=a,r=i;break}if(!o){let i=t.tool_input.file_path??t.tool_input.filePath??t.tool_input.path;if(!i)return null;o={filePath:i,content:t.tool_input.content,oldString:t.tool_input.old_string??t.tool_input.oldString,newString:t.tool_input.new_string??t.tool_input.newString,edits:t.tool_input.edits,tool:n,sessionId:t.session_id,timestamp:Date.now()}}if(r&&he.delete(r),t.tool_response){let i=t.tool_response.toLowerCase();if(i.includes("error:")||i.includes("failed to")||i.includes("could not")||i.startsWith("error"))return V("skipping due to tool failure in response"),null}let s=ma(o.filePath,o.content,o.oldString,o.newString,o.edits);return s.hasComments&&s.message?(V("detected comments, returning message"),e?.customPrompt||s.message):null}}}var Fr=b(require("fs"),1),Hr=b(require("path"),1),Gr=require("os");var Lr=[/(\d+)\s*tokens?\s*>\s*(\d+)\s*maximum/i,/prompt.*?(\d+).*?tokens.*?exceeds.*?(\d+)/i,/(\d+).*?tokens.*?limit.*?(\d+)/i,/context.*?length.*?(\d+).*?maximum.*?(\d+)/i,/max.*?context.*?(\d+).*?but.*?(\d+)/i],Mr=["prompt is too long","is too long","context_length_exceeded","max_tokens","token limit","context length","too many tokens","non-empty content"],ha=[/thinking.*first block/i,/first block.*thinking/i,/must.*start.*thinking/i,/thinking.*redacted_thinking/i,/expected.*thinking.*found/i,/thinking.*disabled.*cannot.*contain/i],Ta=/messages\.(\d+)/;function Ea(e){return ha.some(t=>t.test(e))}function Yt(e){for(let t of Lr){let n=e.match(t);if(n){let o=parseInt(n[1],10),r=parseInt(n[2],10);return o>r?{current:o,max:r}:{current:r,max:o}}}return null}function Dr(e){let t=e.match(Ta);if(t)return parseInt(t[1],10)}function se(e){if(Ea(e))return!1;let t=e.toLowerCase();return Mr.some(n=>t.includes(n.toLowerCase()))}function $e(e){if(typeof e=="string"){if(e.toLowerCase().includes("non-empty content"))return{currentTokens:0,maxTokens:0,errorType:"non-empty content",messageIndex:Dr(e)};if(se(e)){let u=Yt(e);return{currentTokens:u?.current??0,maxTokens:u?.max??0,errorType:"token_limit_exceeded_string"}}return null}if(!e||typeof e!="object")return null;let t=e,n=[],o=t.data,r=o?.responseBody,s=t.message,i=t.error,a=i?.error;if(typeof r=="string"&&n.push(r),typeof s=="string"&&n.push(s),typeof i?.message=="string"&&n.push(i.message),typeof t.body=="string"&&n.push(t.body),typeof t.details=="string"&&n.push(t.details),typeof t.reason=="string"&&n.push(t.reason),typeof t.description=="string"&&n.push(t.description),typeof a?.message=="string"&&n.push(a.message),typeof o?.message=="string"&&n.push(o.message),typeof o?.error=="string"&&n.push(o.error),n.length===0)try{let u=JSON.stringify(t);se(u)&&n.push(u)}catch{}let c=n.join(" ");if(!se(c))return null;if(typeof r=="string")try{let u=[/data:\s*(\{[\s\S]*\})\s*$/m,/(\{"type"\s*:\s*"error"[\s\S]*\})/,/(\{[\s\S]*"error"[\s\S]*\})/];for(let d of u){let p=r.match(d);if(p)try{let f=JSON.parse(p[1]),g=f.error?.message||"",E=Yt(g);if(E)return{currentTokens:E.current,maxTokens:E.max,requestId:f.request_id,errorType:f.error?.type||"token_limit_exceeded"}}catch{}}let l=JSON.parse(r);if(typeof l.message=="string"&&se(l.message))return{currentTokens:0,maxTokens:0,errorType:"bedrock_input_too_long"}}catch{}for(let u of n){let l=Yt(u);if(l)return{currentTokens:l.current,maxTokens:l.max,errorType:"token_limit_exceeded"}}return c.toLowerCase().includes("non-empty content")?{currentTokens:0,maxTokens:0,errorType:"non-empty content",messageIndex:Dr(c)}:se(c)?{currentTokens:0,maxTokens:0,errorType:"token_limit_exceeded_unknown"}:null}function Wt(e){return se(e)}var Kt=`CONTEXT WINDOW LIMIT REACHED - IMMEDIATE ACTION REQUIRED
590
+ `}}return n}function rc(e,t,n,o,r){let s=[];if(t)s=nc(t,e);else if(o)s=os(o,e,n);else if(r&&r.length>0)for(let l of r){let a=os(l.new_string,e,l.old_string);s.push(...a)}let i=gn(s);return ae(`found ${s.length} comments, ${i.length} flagged after filtering`),i.length===0?{hasComments:!1,count:0,comments:[]}:{hasComments:!0,count:i.length,message:oc(i),comments:i}}var Pe=new Map,sc=6e4;function ic(){let e=Date.now();for(let[t,n]of Pe)e-n.timestamp>sc&&Pe.delete(t)}var rs=!1;function as(e){return ae("createCommentCheckerHook called",{config:e}),rs||(rs=!0,setInterval(ic,1e4)),{preToolUse:t=>{let n=t.tool_name.toLowerCase();if(n!=="write"&&n!=="edit"&&n!=="multiedit")return null;let o=t.tool_input.file_path??t.tool_input.filePath??t.tool_input.path,r=t.tool_input.content,s=t.tool_input.old_string??t.tool_input.oldString,i=t.tool_input.new_string??t.tool_input.newString,l=t.tool_input.edits;if(!o)return null;let a=`${t.session_id}-${Date.now()}-${Math.random().toString(36).slice(2)}`;return ae("registering pendingCall:",{callId:a,filePath:o,tool:n}),Pe.set(a,{filePath:o,content:r,oldString:s,newString:i,edits:l,tool:n,sessionId:t.session_id,timestamp:Date.now()}),null},postToolUse:t=>{let n=t.tool_name.toLowerCase();if(n!=="write"&&n!=="edit"&&n!=="multiedit")return null;let o,r;for(let[i,l]of Pe)if(l.sessionId===t.session_id&&l.tool===n){o=l,r=i;break}if(!o){let i=t.tool_input.file_path??t.tool_input.filePath??t.tool_input.path;if(!i)return null;o={filePath:i,content:t.tool_input.content,oldString:t.tool_input.old_string??t.tool_input.oldString,newString:t.tool_input.new_string??t.tool_input.newString,edits:t.tool_input.edits,tool:n,sessionId:t.session_id,timestamp:Date.now()}}if(r&&Pe.delete(r),t.tool_response){let i=t.tool_response.toLowerCase();if(i.includes("error:")||i.includes("failed to")||i.includes("could not")||i.startsWith("error"))return ae("skipping due to tool failure in response"),null}let s=rc(o.filePath,o.content,o.oldString,o.newString,o.edits);return s.hasComments&&s.message?(ae("detected comments, returning message"),e?.customPrompt||s.message):null}}}var ms=ce(require("fs"),1),gs=ce(require("path"),1),hs=require("os");var ls=[/(\d+)\s*tokens?\s*>\s*(\d+)\s*maximum/i,/prompt.*?(\d+).*?tokens.*?exceeds.*?(\d+)/i,/(\d+).*?tokens.*?limit.*?(\d+)/i,/context.*?length.*?(\d+).*?maximum.*?(\d+)/i,/max.*?context.*?(\d+).*?but.*?(\d+)/i],us=["prompt is too long","is too long","context_length_exceeded","max_tokens","token limit","context length","too many tokens","non-empty content"],ac=[/thinking.*first block/i,/first block.*thinking/i,/must.*start.*thinking/i,/thinking.*redacted_thinking/i,/expected.*thinking.*found/i,/thinking.*disabled.*cannot.*contain/i],cc=/messages\.(\d+)/;function lc(e){return ac.some(t=>t.test(e))}function Tn(e){for(let t of ls){let n=e.match(t);if(n){let o=parseInt(n[1],10),r=parseInt(n[2],10);return o>r?{current:o,max:r}:{current:r,max:o}}}return null}function cs(e){let t=e.match(cc);if(t)return parseInt(t[1],10)}function Ee(e){if(lc(e))return!1;let t=e.toLowerCase();return us.some(n=>t.includes(n.toLowerCase()))}function it(e){if(typeof e=="string"){if(e.toLowerCase().includes("non-empty content"))return{currentTokens:0,maxTokens:0,errorType:"non-empty content",messageIndex:cs(e)};if(Ee(e)){let c=Tn(e);return{currentTokens:c?.current??0,maxTokens:c?.max??0,errorType:"token_limit_exceeded_string"}}return null}if(!e||typeof e!="object")return null;let t=e,n=[],o=t.data,r=o?.responseBody,s=t.message,i=t.error,l=i?.error;if(typeof r=="string"&&n.push(r),typeof s=="string"&&n.push(s),typeof i?.message=="string"&&n.push(i.message),typeof t.body=="string"&&n.push(t.body),typeof t.details=="string"&&n.push(t.details),typeof t.reason=="string"&&n.push(t.reason),typeof t.description=="string"&&n.push(t.description),typeof l?.message=="string"&&n.push(l.message),typeof o?.message=="string"&&n.push(o.message),typeof o?.error=="string"&&n.push(o.error),n.length===0)try{let c=JSON.stringify(t);Ee(c)&&n.push(c)}catch{}let a=n.join(" ");if(!Ee(a))return null;if(typeof r=="string")try{let c=[/data:\s*(\{[\s\S]*\})\s*$/m,/(\{"type"\s*:\s*"error"[\s\S]*\})/,/(\{[\s\S]*"error"[\s\S]*\})/];for(let d of c){let m=r.match(d);if(m)try{let E=JSON.parse(m[1]),k=E.error?.message||"",y=Tn(k);if(y)return{currentTokens:y.current,maxTokens:y.max,requestId:E.request_id,errorType:E.error?.type||"token_limit_exceeded"}}catch{}}let u=JSON.parse(r);if(typeof u.message=="string"&&Ee(u.message))return{currentTokens:0,maxTokens:0,errorType:"bedrock_input_too_long"}}catch{}for(let c of n){let u=Tn(c);if(u)return{currentTokens:u.current,maxTokens:u.max,errorType:"token_limit_exceeded"}}return a.toLowerCase().includes("non-empty content")?{currentTokens:0,maxTokens:0,errorType:"non-empty content",messageIndex:cs(a)}:Ee(a)?{currentTokens:0,maxTokens:0,errorType:"token_limit_exceeded_unknown"}:null}function En(e){return Ee(e)}var kn=`CONTEXT WINDOW LIMIT REACHED - IMMEDIATE ACTION REQUIRED
591
591
 
592
592
  The conversation has exceeded the model's context window limit. To continue working effectively, you must take one of these actions:
593
593
 
@@ -612,7 +612,7 @@ Current Status:
612
612
  - Context limit exceeded
613
613
  - Further API calls will fail until context is reduced
614
614
  - Action required before continuing
615
- `,Vt="Context window limit reached. Please use /compact to summarize the conversation or start a new session.",qt=`API ERROR: Non-empty content validation failed.
615
+ `,Sn="Context window limit reached. Please use /compact to summarize the conversation or start a new session.",yn=`API ERROR: Non-empty content validation failed.
616
616
 
617
617
  This error typically occurs when:
618
618
  - A message has empty text content
@@ -623,7 +623,7 @@ Suggested actions:
623
623
  2. If the error persists, start a new session
624
624
 
625
625
  The system will attempt automatic recovery.
626
- `;var Jt=`CONTEXT RECOVERY FAILED
626
+ `;var On=`CONTEXT RECOVERY FAILED
627
627
 
628
628
  All automatic recovery attempts have been exhausted.
629
629
  Please start a new session to continue.
@@ -634,13 +634,43 @@ Before starting a new session:
634
634
  3. Document the current state of the task
635
635
 
636
636
  You can copy this conversation summary to continue in a new session.
637
- `;var zt={maxAttempts:2,initialDelayMs:2e3,backoffFactor:2,maxDelayMs:3e4};var Sa=process.env.CONTEXT_LIMIT_RECOVERY_DEBUG==="1",ka=Hr.join((0,Gr.tmpdir)(),"context-limit-recovery-debug.log");function je(...e){if(Sa){let t=`[${new Date().toISOString()}] [context-limit-recovery] ${e.map(n=>typeof n=="object"?JSON.stringify(n,null,2):String(n)).join(" ")}
638
- `;Fr.appendFileSync(ka,t)}}var Fe=new Map,Br=3e5;function Ur(e){let t=Fe.get(e),n=Date.now();return t&&n-t.lastErrorTime>Br&&(t=void 0),t||(t={retryState:{attempt:0,lastAttemptTime:0},truncateState:{truncateAttempt:0},lastErrorTime:n,errorCount:0},Fe.set(e,t)),t}function ya(){let e=Date.now();for(let[t,n]of Fe)e-n.lastErrorTime>Br&&Fe.delete(t)}var $r=!1;function Yr(e){return je("createContextLimitRecoveryHook called",{config:e}),$r||($r=!0,setInterval(ya,6e4)),{postToolUse:t=>{if(!t.tool_response)return null;let n=$e(t.tool_response);if(!n&&!Wt(t.tool_response))return null;je("detected token limit error",{tool:t.tool_name,sessionId:t.session_id,parsed:n});let o=Ur(t.session_id);o.lastErrorTime=Date.now(),o.errorCount++;let r=jr(n,o,e);return r.message?(je("injecting recovery message",{errorType:r.errorType,attempt:o.retryState.attempt}),r.message):null},onError:t=>{let n=$e(t.error);if(!n)return{attempted:!1,success:!1};je("error notification contains token limit error",{sessionId:t.session_id,parsed:n});let o=Ur(t.session_id);o.lastErrorTime=Date.now(),o.errorCount++;let r=jr(n,o,e);return{attempted:!0,success:!!r.message,message:r.message,errorType:r.errorType}}}}function jr(e,t,n){if(n?.customMessage)return{message:n.customMessage,errorType:e?.errorType};if(e?.errorType?.includes("non-empty content"))return{message:qt,errorType:"non-empty content"};if(t.retryState.attempt++,t.retryState.lastAttemptTime=Date.now(),t.retryState.attempt>zt.maxAttempts)return{message:Jt,errorType:"recovery_exhausted"};if(n?.detailed!==!1){let o=Kt;return e?.currentTokens&&e?.maxTokens&&(o+=`
637
+ `;var Rn={maxAttempts:2,initialDelayMs:2e3,backoffFactor:2,maxDelayMs:3e4};var uc=process.env.CONTEXT_LIMIT_RECOVERY_DEBUG==="1",dc=gs.join((0,hs.tmpdir)(),"context-limit-recovery-debug.log");function at(...e){if(uc){let t=`[${new Date().toISOString()}] [context-limit-recovery] ${e.map(n=>typeof n=="object"?JSON.stringify(n,null,2):String(n)).join(" ")}
638
+ `;ms.appendFileSync(dc,t)}}var ct=new Map,Ts=3e5;function ds(e){let t=ct.get(e),n=Date.now();return t&&n-t.lastErrorTime>Ts&&(t=void 0),t||(t={retryState:{attempt:0,lastAttemptTime:0},truncateState:{truncateAttempt:0},lastErrorTime:n,errorCount:0},ct.set(e,t)),t}function pc(){let e=Date.now();for(let[t,n]of ct)e-n.lastErrorTime>Ts&&ct.delete(t)}var ps=!1;function Es(e){return at("createContextLimitRecoveryHook called",{config:e}),ps||(ps=!0,setInterval(pc,6e4)),{postToolUse:t=>{if(!t.tool_response)return null;let n=it(t.tool_response);if(!n&&!En(t.tool_response))return null;at("detected token limit error",{tool:t.tool_name,sessionId:t.session_id,parsed:n});let o=ds(t.session_id);o.lastErrorTime=Date.now(),o.errorCount++;let r=fs(n,o,e);return r.message?(at("injecting recovery message",{errorType:r.errorType,attempt:o.retryState.attempt}),r.message):null},onError:t=>{let n=it(t.error);if(!n)return{attempted:!1,success:!1};at("error notification contains token limit error",{sessionId:t.session_id,parsed:n});let o=ds(t.session_id);o.lastErrorTime=Date.now(),o.errorCount++;let r=fs(n,o,e);return{attempted:!0,success:!!r.message,message:r.message,errorType:r.errorType}}}}function fs(e,t,n){if(n?.customMessage)return{message:n.customMessage,errorType:e?.errorType};if(e?.errorType?.includes("non-empty content"))return{message:yn,errorType:"non-empty content"};if(t.retryState.attempt++,t.retryState.lastAttemptTime=Date.now(),t.retryState.attempt>Rn.maxAttempts)return{message:On,errorType:"recovery_exhausted"};if(n?.detailed!==!1){let o=kn;return e?.currentTokens&&e?.maxTokens&&(o+=`
639
639
  Token Details:
640
640
  - Current: ${e.currentTokens.toLocaleString()} tokens
641
641
  - Maximum: ${e.maxTokens.toLocaleString()} tokens
642
642
  - Over limit by: ${(e.currentTokens-e.maxTokens).toLocaleString()} tokens
643
- `),{message:o,errorType:e?.errorType||"token_limit_exceeded"}}return{message:Vt,errorType:e?.errorType||"token_limit_exceeded"}}var zr=b(require("fs"),1),Xr=b(require("path"),1),Qr=require("os");var Xt=process.env.ANTHROPIC_1M_CONTEXT==="true"||process.env.VERTEX_ANTHROPIC_1M_CONTEXT==="true"?1e6:2e5,He=4,Qt=`CONTEXT WINDOW WARNING - APPROACHING LIMIT
643
+ `),{message:o,errorType:e?.errorType||"token_limit_exceeded"}}return{message:Sn,errorType:e?.errorType||"token_limit_exceeded"}}var ks=/File content \((\d+) tokens\) exceeds maximum allowed tokens \((\d+)\)/i,fc=/exceeds maximum allowed tokens/i;function mc(e){let t=e.match(ks);return t?{current:parseInt(t[1],10),max:parseInt(t[2],10)}:null}function gc(e,t){return e.toLowerCase()==="read"&&(ks.test(t)||fc.test(t))}function hc(e,t){return`[SYSTEM RECOVERY - READ TOOL FILE SIZE LIMIT]
644
+
645
+ ${t?`The file contains ${t.current} tokens, exceeding the ${t.max} token limit.`:"The file is too large to read in one operation."}
646
+
647
+ **File**: ${e}
648
+
649
+ **RECOVERY STRATEGIES**:
650
+
651
+ 1. **Use Grep for Targeted Search** (RECOMMENDED for finding specific content):
652
+ - Grep(pattern="keyword", path="${e}", output_mode="content")
653
+ - More efficient than reading entire file
654
+
655
+ 2. **Read in Chunks** (for sequential reading):
656
+ - Read(file_path="${e}", offset=0, limit=500) # First 500 lines
657
+ - Read(file_path="${e}", offset=500, limit=500) # Next 500 lines
658
+ - Continue with additional chunks as needed
659
+
660
+ 3. **Strategic Partial Read** (if you know which section you need):
661
+ - Read(file_path="${e}", offset=0, limit=100) # Read header/summary
662
+ - Use Grep to find specific sections, then read those ranges
663
+
664
+ 4. **Summarization via Multimodal Agent** (for getting overview):
665
+ - Task(subagent_type="multimodal-looker", prompt="Summarize the key points from ${e}")
666
+
667
+ **CHOOSE THE RIGHT STRATEGY**:
668
+ - Need specific content? \u2192 Use Grep
669
+ - Need to read sequentially? \u2192 Use offset/limit chunks
670
+ - Need overview/summary? \u2192 Use multimodal-looker agent
671
+ - Need specific section? \u2192 Grep to find it, then Read that portion
672
+
673
+ Proceed with one of these strategies.`.trim()}function Ss(){return{postToolUse:e=>{if(!e.tool_response||!gc(e.tool_name,e.tool_response))return null;let t=e.tool_input?.file_path||"<unknown file>",n=mc(e.tool_response);return hc(t,n||void 0)}}}var As=ce(require("fs"),1),Ns=ce(require("path"),1),ws=require("os");var _n=process.env.ANTHROPIC_1M_CONTEXT==="true"||process.env.VERTEX_ANTHROPIC_1M_CONTEXT==="true"?1e6:2e5,lt=4,In=`CONTEXT WINDOW WARNING - APPROACHING LIMIT
644
674
 
645
675
  Your context usage is getting high. Consider these actions to prevent hitting the limit:
646
676
 
@@ -660,7 +690,7 @@ Your context usage is getting high. Consider these actions to prevent hitting th
660
690
 
661
691
  Current Status: Context usage is high but recoverable.
662
692
  Action recommended: Use /compact when convenient.
663
- `,Zt=`CRITICAL: CONTEXT WINDOW ALMOST FULL
693
+ `,An=`CRITICAL: CONTEXT WINDOW ALMOST FULL
664
694
 
665
695
  Your context usage is critically high. Immediate action required:
666
696
 
@@ -679,8 +709,8 @@ Your context usage is critically high. Immediate action required:
679
709
 
680
710
  WARNING: Further messages may fail if context is not reduced.
681
711
  Action required: Run /compact now.
682
- `;var Oa=process.env.PREEMPTIVE_COMPACTION_DEBUG==="1",Ra=Xr.join((0,Qr.tmpdir)(),"preemptive-compaction-debug.log");function ie(...e){if(Oa){let t=`[${new Date().toISOString()}] [preemptive-compaction] ${e.map(n=>typeof n=="object"?JSON.stringify(n,null,2):String(n)).join(" ")}
683
- `;zr.appendFileSync(Ra,t)}}var Ge=new Map;function Ia(){let e=Date.now(),t=1800*1e3;for(let[n,o]of Ge)e-o.lastWarningTime>t&&Ge.delete(n)}var Wr=!1;function Zr(e){return Math.ceil(e.length/He)}function Ca(e,t){let n=t?.warningThreshold??.85,o=t?.criticalThreshold??.95,r=Xt,s=Zr(e),i=s/r,a=i>=n,c=i>=o,u="none";return c?u="compact":a&&(u="warn"),{totalTokens:s,usageRatio:i,isWarning:a,isCritical:c,action:u}}function Be(e){let t=Ge.get(e);return t||(t={lastWarningTime:0,warningCount:0,estimatedTokens:0},Ge.set(e,t)),t}function _a(e,t){let n=Be(e),o=t?.cooldownMs??6e4,r=t?.maxWarnings??3,s=Date.now();return s-n.lastWarningTime<o?(ie("skipping warning - cooldown active",{sessionId:e,elapsed:s-n.lastWarningTime,cooldown:o}),!1):n.warningCount>=r?(ie("skipping warning - max reached",{sessionId:e,warningCount:n.warningCount,maxWarnings:r}),!1):!0}function Aa(e){let t=Be(e);t.lastWarningTime=Date.now(),t.warningCount++}function es(e){return ie("createPreemptiveCompactionHook called",{config:e}),e?.enabled===!1?{postToolUse:()=>null,stop:()=>null}:(Wr||(Wr=!0,setInterval(Ia,300*1e3)),{postToolUse:t=>{if(!t.tool_response)return null;let n=t.tool_name.toLowerCase();if(!["read","grep","glob","bash","webfetch"].includes(n))return null;let r=Zr(t.tool_response),s=Be(t.session_id);s.estimatedTokens+=r,ie("tracking tool output",{tool:n,responseTokens:r,cumulativeTokens:s.estimatedTokens});let i=Ca("x".repeat(s.estimatedTokens*He),e);return!i.isWarning||!_a(t.session_id,e)?null:(Aa(t.session_id),ie("injecting context warning",{sessionId:t.session_id,usageRatio:i.usageRatio,isCritical:i.isCritical}),e?.customMessage?e.customMessage:i.isCritical?Zt:Qt)},stop:t=>{let n=Be(t.session_id);return n.warningCount>0&&(ie("resetting warning count on stop",{sessionId:t.session_id,previousCount:n.warningCount}),n.warningCount=0),null}})}var C=require("fs"),ns=require("path");var en=require("path"),ts=require("os"),Na=(0,en.join)((0,ts.homedir)(),".olympus"),Ye=(0,en.join)(Na,"agent-usage-reminder"),tn=new Set(["grep","safe_grep","glob","safe_glob","webfetch","context7_resolve-library-id","context7_query-docs","websearch_web_search_exa","context7_get-library-docs","grep_app_searchgithub"]),nn=new Set(["task","call_omo_agent","olympus_task"]),on=`
712
+ `;var Tc=process.env.PREEMPTIVE_COMPACTION_DEBUG==="1",Ec=Ns.join((0,ws.tmpdir)(),"preemptive-compaction-debug.log");function ke(...e){if(Tc){let t=`[${new Date().toISOString()}] [preemptive-compaction] ${e.map(n=>typeof n=="object"?JSON.stringify(n,null,2):String(n)).join(" ")}
713
+ `;As.appendFileSync(Ec,t)}}var ut=new Map;function kc(){let e=Date.now(),t=1800*1e3;for(let[n,o]of ut)e-o.lastWarningTime>t&&ut.delete(n)}var ys=!1;function vs(e){return Math.ceil(e.length/lt)}function Sc(e,t){let n=t?.warningThreshold??.85,o=t?.criticalThreshold??.95,r=_n,s=vs(e),i=s/r,l=i>=n,a=i>=o,c="none";return a?c="compact":l&&(c="warn"),{totalTokens:s,usageRatio:i,isWarning:l,isCritical:a,action:c}}function dt(e){let t=ut.get(e);return t||(t={lastWarningTime:0,warningCount:0,estimatedTokens:0},ut.set(e,t)),t}function yc(e,t){let n=dt(e),o=t?.cooldownMs??6e4,r=t?.maxWarnings??3,s=Date.now();return s-n.lastWarningTime<o?(ke("skipping warning - cooldown active",{sessionId:e,elapsed:s-n.lastWarningTime,cooldown:o}),!1):n.warningCount>=r?(ke("skipping warning - max reached",{sessionId:e,warningCount:n.warningCount,maxWarnings:r}),!1):!0}function Oc(e){let t=dt(e);t.lastWarningTime=Date.now(),t.warningCount++}function bs(e){return ke("createPreemptiveCompactionHook called",{config:e}),e?.enabled===!1?{postToolUse:()=>null,stop:()=>null}:(ys||(ys=!0,setInterval(kc,300*1e3)),{postToolUse:t=>{if(!t.tool_response)return null;let n=t.tool_name.toLowerCase();if(!["read","grep","glob","bash","webfetch"].includes(n))return null;let r=vs(t.tool_response),s=dt(t.session_id);s.estimatedTokens+=r,ke("tracking tool output",{tool:n,responseTokens:r,cumulativeTokens:s.estimatedTokens});let i=Sc("x".repeat(s.estimatedTokens*lt),e);return!i.isWarning||!yc(t.session_id,e)?null:(Oc(t.session_id),ke("injecting context warning",{sessionId:t.session_id,usageRatio:i.usageRatio,isCritical:i.isCritical}),e?.customMessage?e.customMessage:i.isCritical?An:In)},stop:t=>{let n=dt(t.session_id);return n.warningCount>0&&(ke("resetting warning count on stop",{sessionId:t.session_id,previousCount:n.warningCount}),n.warningCount=0),null}})}var F=require("fs"),Cs=require("path");var Nn=require("path"),xs=require("os"),Rc=(0,Nn.join)((0,xs.homedir)(),".olympus"),pt=(0,Nn.join)(Rc,"agent-usage-reminder"),wn=new Set(["grep","safe_grep","glob","safe_glob","webfetch","context7_resolve-library-id","context7_query-docs","websearch_web_search_exa","context7_get-library-docs","grep_app_searchgithub"]),vn=new Set(["task","call_omo_agent","olympus_task"]),bn=`
684
714
  [Agent Usage Reminder]
685
715
 
686
716
  You called a search/fetch tool directly without leveraging specialized agents.
@@ -704,7 +734,7 @@ WHY:
704
734
  - Reduces context window usage in main session
705
735
 
706
736
  ALWAYS prefer: Multiple parallel Task calls > Direct tool calls
707
- `;function rn(e){return(0,ns.join)(Ye,`${e}.json`)}function sn(e){let t=rn(e);if(!(0,C.existsSync)(t))return null;try{let n=(0,C.readFileSync)(t,"utf-8");return JSON.parse(n)}catch{return null}}function We(e){(0,C.existsSync)(Ye)||(0,C.mkdirSync)(Ye,{recursive:!0});let t=rn(e.sessionID);(0,C.writeFileSync)(t,JSON.stringify(e,null,2))}function an(e){let t=rn(e);(0,C.existsSync)(t)&&(0,C.unlinkSync)(t)}function xa(e){let t=e||process.cwd();return le(t)?.active?{active:!0,mode:"ascent"}:ne(t)?.active?{active:!0,mode:"olympus"}:G(t)?.active?{active:!0,mode:"ultrawork"}:{active:!1,mode:"none"}}function wa(e){if(!e||typeof e!="object")return null;let t=e;return t.file_path||t.filePath||t.path}function va(e,t){if(e<3)return null;let n=e>=5?"CRITICAL":"WARNING";return`<conductor-violation severity="${n}">
737
+ `;function xn(e){return(0,Cs.join)(pt,`${e}.json`)}function Cn(e){let t=xn(e);if(!(0,F.existsSync)(t))return null;try{let n=(0,F.readFileSync)(t,"utf-8");return JSON.parse(n)}catch{return null}}function ft(e){(0,F.existsSync)(pt)||(0,F.mkdirSync)(pt,{recursive:!0});let t=xn(e.sessionID);(0,F.writeFileSync)(t,JSON.stringify(e,null,2))}function Pn(e){let t=xn(e);(0,F.existsSync)(t)&&(0,F.unlinkSync)(t)}function _c(e){let t=e||process.cwd();return Ne(t)?.active?{active:!0,mode:"ascent"}:ge(t)?.active?{active:!0,mode:"olympus"}:ne(t)?.active?{active:!0,mode:"ultrawork"}:{active:!1,mode:"none"}}function Ic(e){if(!e||typeof e!="object")return null;let t=e;return t.file_path||t.filePath||t.path}function Ac(e,t){if(e<3)return null;let n=e>=5?"CRITICAL":"WARNING";return`<conductor-violation severity="${n}">
708
738
 
709
739
  [${n}: CONDUCTOR MODE VIOLATION - ${t.toUpperCase()} ACTIVE]
710
740
 
@@ -730,19 +760,25 @@ ${e>=5?"**CRITICAL**: Too many direct operations. Your next action MUST be deleg
730
760
 
731
761
  ---
732
762
 
733
- `}function os(){let e=new Map,t=new Map;function n(c){if(!e.has(c)){let l=sn(c)??{sessionID:c,agentUsed:!1,reminderCount:0,updatedAt:Date.now()};e.set(c,l)}return e.get(c)}function o(c){let u=n(c);u.agentUsed=!0,u.updatedAt=Date.now(),We(u)}function r(c){e.delete(c),an(c),t.delete(c)}function s(c,u,l){let d=t.get(c)||{consecutiveCount:0,lastToolName:"",lastFilePath:"",sessionId:c};return u.toLowerCase()==="task"?(d.consecutiveCount=0,t.set(c,d),0):(["edit","write","multiedit"].includes(u.toLowerCase())&&(d.consecutiveCount++,d.lastToolName=u,d.lastFilePath=l,t.set(c,d)),d.consecutiveCount)}return{"tool.execute.after":async(c,u)=>{let{tool:l,sessionID:d}=c,p=l.toLowerCase();if(nn.has(p)){o(d),s(d,p,"");return}let f=c.properties||{},g=wa(f),E=s(d,p,g||""),v=xa();if(v.active){let N=va(E,v.mode);if(N){u.output=N+u.output;return}}if(!tn.has(p))return;let A=n(d);A.agentUsed||(u.output+=on,A.reminderCount++,A.updatedAt=Date.now(),We(A))},event:async({event:c})=>{let u=c.properties;if(c.type==="session.deleted"){let l=u?.info;l?.id&&r(l.id)}if(c.type==="session.compacted"){let l=u?.sessionID??u?.info?.id;l&&r(l)}}}}function rs(){let e=process.cwd(),t=Nr();m({name:"editErrorRecovery",event:"PostToolUse",matcher:/^edit$/i,priority:10,handler:async a=>{if(!a.toolName||!a.toolOutput)return{continue:!0};let c=t.afterToolExecute({tool:a.toolName,sessionId:a.sessionId||"",callId:""},{title:"",output:String(a.toolOutput),metadata:void 0});return c.output!==String(a.toolOutput)?{continue:!0,message:c.output.substring(String(a.toolOutput).length)}:{continue:!0}}});let n=br();m({name:"commentChecker",event:"PostToolUse",matcher:/^(write|edit|multiedit)$/i,priority:20,handler:async a=>{if(!a.toolName)return{continue:!0};let c=n.postToolUse({tool_name:a.toolName,session_id:a.sessionId||"",tool_input:a.toolInput||{},tool_response:a.toolOutput?String(a.toolOutput):void 0});return c?{continue:!0,message:c}:{continue:!0}}});let o=Yr();m({name:"contextWindowLimitRecovery",event:"PostToolUse",priority:30,handler:async a=>{if(!a.toolName)return{continue:!0};let c=o.postToolUse({tool_name:a.toolName,session_id:a.sessionId||"",tool_input:a.toolInput||{},tool_response:a.toolOutput?String(a.toolOutput):void 0});return c?{continue:!0,message:c}:{continue:!0}}});let r=es();m({name:"preemptiveCompaction",event:"PostToolUse",matcher:/^(read|grep|glob|bash|webfetch)$/i,priority:40,handler:async a=>{if(!a.toolName)return{continue:!0};let c=r.postToolUse({tool_name:a.toolName,session_id:a.sessionId||"",tool_input:a.toolInput||{},tool_response:a.toolOutput?String(a.toolOutput):void 0});return c?{continue:!0,message:c}:{continue:!0}}});let s=os();m({name:"agentUsageReminder",event:"PostToolUse",matcher:/^(read|grep|glob|edit|write)$/i,priority:50,handler:async a=>{if(!a.toolName)return{continue:!0};let c={title:"",output:a.toolOutput?String(a.toolOutput):"",metadata:void 0};await s["tool.execute.after"]({tool:a.toolName,sessionID:a.sessionId||"",callID:""},c);let u=a.toolOutput?String(a.toolOutput):"";return c.output!==u?{continue:!0,message:c.output.substring(u.length)}:{continue:!0}}});let i=Le(e);m({name:"olympusOrchestratorPost",event:"PostToolUse",matcher:/^(write|edit|bash|task)$/i,priority:60,handler:async a=>{if(!a.toolName)return{continue:!0};let c=i.postTool(a.toolName,a.toolInput||{},a.toolOutput?String(a.toolOutput):"");return c.continue?c.modifiedOutput?{continue:!0,message:c.modifiedOutput}:c.message?{continue:!0,message:c.message}:{continue:!0}:{continue:!1,reason:c.message}}})}var _=require("fs"),Ke=require("path"),ss=require("os");var Te=class{config;counts=new Map;queues=new Map;constructor(t){this.config=t}getConcurrencyLimit(t){let n=this.config?.modelConcurrency?.[t];if(n!==void 0)return n===0?1/0:n;let o=t.split("/")[0],r=this.config?.providerConcurrency?.[o];if(r!==void 0)return r===0?1/0:r;let s=this.config?.defaultConcurrency;return s!==void 0?s===0?1/0:s:5}async acquire(t){let n=this.getConcurrencyLimit(t);if(n===1/0)return;let o=this.counts.get(t)??0;if(o<n){this.counts.set(t,o+1);return}return new Promise(r=>{let s=this.queues.get(t)??[];s.push(r),this.queues.set(t,s)})}release(t){if(this.getConcurrencyLimit(t)===1/0)return;let o=this.queues.get(t);if(o&&o.length>0)o.shift()();else{let r=this.counts.get(t)??0;r>0&&this.counts.set(t,r-1)}}getCount(t){return this.counts.get(t)??0}getQueueLength(t){return this.queues.get(t)?.length??0}isAtCapacity(t){let n=this.getConcurrencyLimit(t);return n===1/0?!1:(this.counts.get(t)??0)>=n}getActiveCounts(){return new Map(this.counts)}clear(){this.counts.clear(),this.queues.clear()}};var Pa=1800*1e3,ae=(0,Ke.join)((0,ss.homedir)(),".claude",".olympus","background-tasks"),Ve=class{tasks=new Map;notifications=new Map;concurrencyManager;config;pruneInterval;constructor(t){this.config=t??{},this.concurrencyManager=new Te(t),this.ensureStorageDir(),this.loadPersistedTasks(),this.startPruning()}ensureStorageDir(){(0,_.existsSync)(ae)||(0,_.mkdirSync)(ae,{recursive:!0})}generateTaskId(){let t=Date.now().toString(36),n=Math.random().toString(36).substring(2,8);return`bg_${t}${n}`}getTaskPath(t){return(0,Ke.join)(ae,`${t}.json`)}persistTask(t){let n=this.getTaskPath(t.id);(0,_.writeFileSync)(n,JSON.stringify(t,null,2))}unpersistTask(t){let n=this.getTaskPath(t);(0,_.existsSync)(n)&&(0,_.unlinkSync)(n)}loadPersistedTasks(){if((0,_.existsSync)(ae))try{let{readdirSync:t}=require("fs"),n=t(ae);for(let o of n)if(o.endsWith(".json"))try{let r=(0,Ke.join)(ae,o),s=(0,_.readFileSync)(r,"utf-8"),i=JSON.parse(s);i.startedAt=new Date(i.startedAt),i.completedAt&&(i.completedAt=new Date(i.completedAt)),i.progress?.lastUpdate&&(i.progress.lastUpdate=new Date(i.progress.lastUpdate)),i.progress?.lastMessageAt&&(i.progress.lastMessageAt=new Date(i.progress.lastMessageAt)),this.tasks.set(i.id,i)}catch{}}catch{}}startPruning(){this.pruneInterval||(this.pruneInterval=setInterval(()=>{this.pruneStaleTasksAndNotifications()},6e4),this.pruneInterval.unref&&this.pruneInterval.unref())}stopPruning(){this.pruneInterval&&(clearInterval(this.pruneInterval),this.pruneInterval=void 0)}pruneStaleTasksAndNotifications(){let t=Date.now(),n=this.config.taskTimeoutMs??Pa;for(let[o,r]of this.tasks.entries())t-r.startedAt.getTime()>n&&r.status==="running"&&(r.status="error",r.error=`Task timed out after ${Math.round(n/6e4)} minutes`,r.completedAt=new Date,r.concurrencyKey&&this.concurrencyManager.release(r.concurrencyKey),this.clearNotificationsForTask(o),this.unpersistTask(o),this.tasks.delete(o));for(let[o,r]of this.notifications.entries()){let s=r.filter(i=>t-i.startedAt.getTime()<=n);s.length===0?this.notifications.delete(o):s.length!==r.length&&this.notifications.set(o,s)}}async launch(t){let n=t.agent,o=this.config.maxTotalTasks??10;if(Array.from(this.tasks.values()).filter(c=>c.status==="running").length>=o)throw new Error(`Maximum concurrent background tasks (${o}) reached. Wait for some tasks to complete.`);await this.concurrencyManager.acquire(n);let s=this.generateTaskId(),i=`ses_${this.generateTaskId()}`,a={id:s,sessionId:i,parentSessionId:t.parentSessionId,description:t.description,prompt:t.prompt,agent:t.agent,status:"running",startedAt:new Date,progress:{toolCalls:0,lastUpdate:new Date},concurrencyKey:n};return this.tasks.set(s,a),this.persistTask(a),a}async resume(t){let n=this.findBySession(t.sessionId);if(!n)throw new Error(`Task not found for session: ${t.sessionId}`);return n.status="running",n.completedAt=void 0,n.error=void 0,n.parentSessionId=t.parentSessionId,n.progress||(n.progress={toolCalls:0,lastUpdate:new Date}),n.progress.lastUpdate=new Date,this.persistTask(n),n}getTask(t){return this.tasks.get(t)}findBySession(t){for(let n of this.tasks.values())if(n.sessionId===t)return n}getTasksByParentSession(t){let n=[];for(let o of this.tasks.values())o.parentSessionId===t&&n.push(o);return n}getAllTasks(){return Array.from(this.tasks.values())}getRunningTasks(){return Array.from(this.tasks.values()).filter(t=>t.status==="running")}updateTaskStatus(t,n,o,r){let s=this.tasks.get(t);s&&(s.status=n,o&&(s.result=o),r&&(s.error=r),(n==="completed"||n==="error"||n==="cancelled")&&(s.completedAt=new Date,s.concurrencyKey&&this.concurrencyManager.release(s.concurrencyKey),this.markForNotification(s)),this.persistTask(s))}updateTaskProgress(t,n){let o=this.tasks.get(t);o&&(o.progress||(o.progress={toolCalls:0,lastUpdate:new Date}),Object.assign(o.progress,n,{lastUpdate:new Date}),this.persistTask(o))}markForNotification(t){let n=this.notifications.get(t.parentSessionId)??[];n.push(t),this.notifications.set(t.parentSessionId,n)}getPendingNotifications(t){return this.notifications.get(t)??[]}clearNotifications(t){this.notifications.delete(t)}clearNotificationsForTask(t){for(let[n,o]of this.notifications.entries()){let r=o.filter(s=>s.id!==t);r.length===0?this.notifications.delete(n):this.notifications.set(n,r)}}removeTask(t){let n=this.tasks.get(t);n?.concurrencyKey&&this.concurrencyManager.release(n.concurrencyKey),this.clearNotificationsForTask(t),this.unpersistTask(t),this.tasks.delete(t)}formatDuration(t,n){let o=(n??new Date).getTime()-t.getTime(),r=Math.floor(o/1e3),s=Math.floor(r/60),i=Math.floor(s/60);return i>0?`${i}h ${s%60}m ${r%60}s`:s>0?`${s}m ${r%60}s`:`${r}s`}getStatusSummary(){let t=this.getRunningTasks(),n=this.getAllTasks();if(n.length===0)return"No background tasks.";let o=[`Background Tasks: ${t.length} running, ${n.length} total`,""];for(let r of n){let s=this.formatDuration(r.startedAt,r.completedAt),i=r.status.toUpperCase(),a=r.progress?` (${r.progress.toolCalls} tools)`:"";o.push(` [${i}] ${r.description} - ${s}${a}`),r.error&&o.push(` Error: ${r.error}`)}return o.join(`
734
- `)}cleanup(){this.stopPruning(),this.tasks.clear(),this.notifications.clear()}},cn;function un(e){return cn||(cn=new Ve(e)),cn}function ba(e){let t=e.status.toUpperCase(),n=Da(e.startedAt,e.completedAt),r=[`${e.status==="completed"?"\u2713":e.status==="error"?"\u2717":"\u25CB"} [${t}] ${e.description}`,` Agent: ${e.agent}`,` Duration: ${n}`];if(e.progress?.toolCalls&&r.push(` Tool calls: ${e.progress.toolCalls}`),e.result){let s=e.result.substring(0,200),i=e.result.length>200?"...":"";r.push(` Result: ${s}${i}`)}return e.error&&r.push(` Error: ${e.error}`),r.join(`
735
- `)}function Da(e,t){let n=(t??new Date).getTime()-e.getTime(),o=Math.floor(n/1e3),r=Math.floor(o/60),s=Math.floor(r/60);return s>0?`${s}h ${r%60}m ${o%60}s`:r>0?`${r}m ${o%60}s`:`${o}s`}function La(e){if(e.length===0)return"";let t=e.length===1?`
763
+ `}function Ps(){let e=new Map,t=new Map;function n(a){if(!e.has(a)){let u=Cn(a)??{sessionID:a,agentUsed:!1,reminderCount:0,updatedAt:Date.now()};e.set(a,u)}return e.get(a)}function o(a){let c=n(a);c.agentUsed=!0,c.updatedAt=Date.now(),ft(c)}function r(a){e.delete(a),Pn(a),t.delete(a)}function s(a,c,u){let d=t.get(a)||{consecutiveCount:0,lastToolName:"",lastFilePath:"",sessionId:a};return c.toLowerCase()==="task"?(d.consecutiveCount=0,t.set(a,d),0):(["edit","write","multiedit"].includes(c.toLowerCase())&&(d.consecutiveCount++,d.lastToolName=c,d.lastFilePath=u,t.set(a,d)),d.consecutiveCount)}return{"tool.execute.after":async(a,c)=>{let{tool:u,sessionID:d}=a,m=u.toLowerCase();if(vn.has(m)){o(d),s(d,m,"");return}let E=a.properties||{},k=Ic(E),y=s(d,m,k||""),O=_c();if(O.active){let x=Ac(y,O.mode);if(x){c.output=x+c.output;return}}if(!wn.has(m))return;let N=n(d);N.agentUsed||(c.output+=bn,N.reminderCount++,N.updatedAt=Date.now(),ft(N))},event:async({event:a})=>{let c=a.properties;if(a.type==="session.deleted"){let u=c?.info;u?.id&&r(u.id)}if(a.type==="session.compacted"){let u=c?.sessionID??c?.info?.id;u&&r(u)}}}}function Ls(){let e=process.cwd(),t=ns();T({name:"editErrorRecovery",event:"PostToolUse",matcher:/^edit$/i,priority:10,handler:async a=>{if(!a.toolName||!a.toolOutput)return{continue:!0};let c=t.afterToolExecute({tool:a.toolName,sessionId:a.sessionId||"",callId:""},{title:"",output:String(a.toolOutput),metadata:void 0});return c.output!==String(a.toolOutput)?{continue:!0,message:c.output.substring(String(a.toolOutput).length)}:{continue:!0}}});let n=as();T({name:"commentChecker",event:"PostToolUse",matcher:/^(write|edit|multiedit)$/i,priority:20,handler:async a=>{if(!a.toolName)return{continue:!0};let c=n.postToolUse({tool_name:a.toolName,session_id:a.sessionId||"",tool_input:a.toolInput||{},tool_response:a.toolOutput?String(a.toolOutput):void 0});return c?{continue:!0,message:c}:{continue:!0}}});let o=Es();T({name:"contextWindowLimitRecovery",event:"PostToolUse",priority:30,handler:async a=>{if(!a.toolName)return{continue:!0};let c=o.postToolUse({tool_name:a.toolName,session_id:a.sessionId||"",tool_input:a.toolInput||{},tool_response:a.toolOutput?String(a.toolOutput):void 0});return c?{continue:!0,message:c}:{continue:!0}}});let r=Ss();T({name:"readToolLimitRecovery",event:"PostToolUse",matcher:/^read$/i,priority:35,handler:async a=>{if(!a.toolName||a.toolName.toLowerCase()!=="read")return{continue:!0};let c=r.postToolUse({tool_name:a.toolName,session_id:a.sessionId||"",tool_input:a.toolInput||{},tool_response:a.toolOutput?String(a.toolOutput):void 0});return c?{continue:!0,message:c}:{continue:!0}}});let s=bs();T({name:"preemptiveCompaction",event:"PostToolUse",matcher:/^(read|grep|glob|bash|webfetch)$/i,priority:40,handler:async a=>{if(!a.toolName)return{continue:!0};let c=s.postToolUse({tool_name:a.toolName,session_id:a.sessionId||"",tool_input:a.toolInput||{},tool_response:a.toolOutput?String(a.toolOutput):void 0});return c?{continue:!0,message:c}:{continue:!0}}});let i=Ps();T({name:"agentUsageReminder",event:"PostToolUse",matcher:/^(read|grep|glob|edit|write)$/i,priority:50,handler:async a=>{if(!a.toolName)return{continue:!0};let c={title:"",output:a.toolOutput?String(a.toolOutput):"",metadata:void 0};await i["tool.execute.after"]({tool:a.toolName,sessionID:a.sessionId||"",callID:""},c);let u=a.toolOutput?String(a.toolOutput):"";return c.output!==u?{continue:!0,message:c.output.substring(u.length)}:{continue:!0}}});let l=ot(e);T({name:"olympusOrchestratorPost",event:"PostToolUse",matcher:/^(write|edit|bash|task)$/i,priority:60,handler:async a=>{if(!a.toolName)return{continue:!0};let c=l.postTool(a.toolName,a.toolInput||{},a.toolOutput?String(a.toolOutput):"");return c.continue?c.modifiedOutput?{continue:!0,message:c.modifiedOutput}:c.message?{continue:!0,message:c.message}:{continue:!0}:{continue:!1,reason:c.message}}})}var Vs=require("node:fs");var h=require("node:fs"),D=require("node:path");var Se=require("node:path"),mt=require("node:os");function Nc(){return process.env.XDG_DATA_HOME??(0,Se.join)((0,mt.homedir)(),".local","share")}function wc(){return(0,Se.join)(Nc(),"claude-code","storage")}var Ds=wc(),Le=(0,Se.join)(Ds,"message"),ye=(0,Se.join)(Ds,"part"),te=new Set(["thinking","redacted_thinking","reasoning"]),Ms=new Set(["step-start","step-finish"]);var H="[user interrupted]",gt={tool_result_missing:{title:"Tool Crash Recovery",message:"Injecting cancelled tool results..."},thinking_block_order:{title:"Thinking Block Recovery",message:"Fixing message structure..."},thinking_disabled_violation:{title:"Thinking Strip Recovery",message:"Stripping thinking blocks..."},empty_content:{title:"Empty Content Recovery",message:"Adding placeholder content..."}};var Us=process.env.SESSION_RECOVERY_DEBUG==="1",js=(0,Se.join)((0,mt.tmpdir)(),"session-recovery-debug.log");function vc(){let e=Date.now().toString(16),t=Math.random().toString(36).substring(2,10);return`prt_${e}${t}`}function bc(e){if(!(0,h.existsSync)(Le))return"";let t=(0,D.join)(Le,e);if((0,h.existsSync)(t))return t;for(let n of(0,h.readdirSync)(Le)){let o=(0,D.join)(Le,n,e);if((0,h.existsSync)(o))return o}return""}function z(e){let t=bc(e);if(!t||!(0,h.existsSync)(t))return[];let n=[];for(let o of(0,h.readdirSync)(t))if(o.endsWith(".json"))try{let r=(0,h.readFileSync)((0,D.join)(t,o),"utf-8");n.push(JSON.parse(r))}catch{continue}return n.sort((o,r)=>{let s=o.time?.created??0,i=r.time?.created??0;return s!==i?s-i:o.id.localeCompare(r.id)})}function K(e){let t=(0,D.join)(ye,e);if(!(0,h.existsSync)(t))return[];let n=[];for(let o of(0,h.readdirSync)(t))if(o.endsWith(".json"))try{let r=(0,h.readFileSync)((0,D.join)(t,o),"utf-8");n.push(JSON.parse(r))}catch{continue}return n}function $s(e){return te.has(e.type)||Ms.has(e.type)?!1:e.type==="text"?!!e.text?.trim():e.type==="tool"||e.type==="tool_use"||e.type==="tool_result"}function Fs(e){return K(e).some($s)}function De(e,t,n){let o=(0,D.join)(ye,t);(0,h.existsSync)(o)||(0,h.mkdirSync)(o,{recursive:!0});let r=vc(),s={id:r,sessionID:e,messageID:t,type:"text",text:n,synthetic:!0};try{return(0,h.writeFileSync)((0,D.join)(o,`${r}.json`),JSON.stringify(s,null,2)),!0}catch{return!1}}function Ln(e){let t=z(e),n=[];for(let o of t)Fs(o.id)||n.push(o.id);return n}function Hs(e,t){let n=z(e),o=[t,t-1,t+1,t-2,t+2,t-3,t-4,t-5];for(let r of o){if(r<0||r>=n.length)continue;let s=n[r];if(!Fs(s.id))return s.id}return null}function Dn(e){let t=z(e),n=[];for(let o of t){if(o.role!=="assistant")continue;K(o.id).some(i=>te.has(i.type))&&n.push(o.id)}return n}function Gs(e){let t=z(e),n=[];for(let o of t){if(o.role!=="assistant")continue;let r=K(o.id);if(r.length===0)continue;let s=r.some(l=>te.has(l.type)),i=r.some($s);s&&!i&&n.push(o.id)}return n}function Mn(e){let t=z(e),n=[];for(let o of t){if(o.role!=="assistant")continue;let r=K(o.id);if(r.length===0)continue;let i=[...r].sort((a,c)=>a.id.localeCompare(c.id))[0];te.has(i.type)||n.push(o.id)}return n}function xc(e,t){let n=z(e),o=n.findIndex(r=>r.id===t);if(o===-1)return"";for(let r=o-1;r>=0;r--){let s=n[r];if(s.role!=="assistant")continue;let i=K(s.id);for(let l of i)if(te.has(l.type)){let a=l.thinking,c=l.text,u=a||c;if(u&&u.trim().length>0)return u}}return""}function Un(e,t){let n=(0,D.join)(ye,t);(0,h.existsSync)(n)||(0,h.mkdirSync)(n,{recursive:!0});let o=xc(e,t),r="prt_0000000000_thinking",s={id:r,sessionID:e,messageID:t,type:"thinking",thinking:o||"[Continuing from previous reasoning]",synthetic:!0};try{return(0,h.writeFileSync)((0,D.join)(n,`${r}.json`),JSON.stringify(s,null,2)),!0}catch{return!1}}function Bs(e){let t=(0,D.join)(ye,e);if(!(0,h.existsSync)(t))return!1;let n=!1;for(let o of(0,h.readdirSync)(t))if(o.endsWith(".json"))try{let r=(0,D.join)(t,o),s=(0,h.readFileSync)(r,"utf-8"),i=JSON.parse(s);te.has(i.type)&&((0,h.unlinkSync)(r),n=!0)}catch{continue}return n}function Me(e,t=H){let n=(0,D.join)(ye,e);if(!(0,h.existsSync)(n))return!1;let o=!1;for(let r of(0,h.readdirSync)(n))if(r.endsWith(".json"))try{let s=(0,D.join)(n,r),i=(0,h.readFileSync)(s,"utf-8"),l=JSON.parse(i);if(l.type==="text"){let a=l;a.text?.trim()||(a.text=t,a.synthetic=!0,(0,h.writeFileSync)(s,JSON.stringify(a,null,2)),o=!0)}}catch{continue}return o}function Ys(e){let t=z(e),n=[];for(let o of t)K(o.id).some(i=>i.type!=="text"?!1:!i.text?.trim())&&n.push(o.id);return n}function Ws(e,t){let n=z(e);if(t<0||t>=n.length)return null;let o=n[t];if(o.role!=="assistant")return null;let r=K(o.id);if(r.length===0)return null;let i=[...r].sort((a,c)=>a.id.localeCompare(c.id))[0];return te.has(i.type)?null:o.id}function b(...e){if(Us){let t=`[${new Date().toISOString()}] [session-recovery] ${e.map(n=>typeof n=="object"?JSON.stringify(n,null,2):String(n)).join(" ")}
764
+ `;(0,Vs.appendFileSync)(js,t)}}function Ks(e){if(!e)return"";if(typeof e=="string")return e.toLowerCase();let t=e,n=[t.data,t.error,t,t.data?.error];for(let o of n)if(o&&typeof o=="object"){let r=o.message;if(typeof r=="string"&&r.length>0)return r.toLowerCase()}try{return JSON.stringify(e).toLowerCase()}catch{return""}}function qs(e){let n=Ks(e).match(/messages\.(\d+)/);return n?parseInt(n[1],10):null}function Js(e){let t=Ks(e);return t.includes("tool_use")&&t.includes("tool_result")?"tool_result_missing":t.includes("thinking")&&(t.includes("first block")||t.includes("must start with")||t.includes("preceeding")||t.includes("final block")||t.includes("cannot be thinking")||t.includes("expected")&&t.includes("found"))?"thinking_block_order":t.includes("thinking is disabled")&&t.includes("cannot contain")?"thinking_disabled_violation":t.includes("empty")&&(t.includes("content")||t.includes("message"))?"empty_content":null}function Cc(e){return Js(e)!==null}function Pc(e){return e.filter(t=>t.type==="tool_use"&&!!t.id).map(t=>t.id)}async function Lc(e,t){b("recoverToolResultMissing",{sessionID:e,msgId:t.info?.id});let n=t.parts||[];n.length===0&&t.info?.id&&(n=K(t.info.id).map(s=>({type:s.type==="tool"?"tool_use":s.type,id:"callID"in s?s.callID:s.id,name:"tool"in s?s.tool:void 0,input:"state"in s?s.state?.input:void 0})));let o=Pc(n);return o.length===0?(b("No tool_use IDs found"),!1):(b("Found tool_use IDs to inject results for",o),!0)}async function Dc(e,t,n){b("recoverThinkingBlockOrder",{sessionID:e});let o=qs(n);if(o!==null){let i=Ws(e,o);if(i)return b("Found target message by index",{targetIndex:o,targetMessageID:i}),Un(e,i)}let r=Mn(e);if(r.length===0)return b("No orphan thinking messages found"),!1;b("Found orphan thinking messages",r);let s=!1;for(let i of r)Un(e,i)&&(s=!0);return s}async function Mc(e,t){b("recoverThinkingDisabledViolation",{sessionID:e});let n=Dn(e);if(n.length===0)return b("No messages with thinking blocks found"),!1;b("Found messages with thinking blocks",n);let o=!1;for(let r of n)Bs(r)&&(o=!0);return o}async function Uc(e,t,n){b("recoverEmptyContentMessage",{sessionID:e});let o=qs(n),r=t.info?.id,s=!1,i=Ys(e);for(let c of i)Me(c,H)&&(s=!0);let l=Gs(e);for(let c of l)De(e,c,H)&&(s=!0);if(o!==null){let c=Hs(e,o);if(c&&(Me(c,H)||De(e,c,H)))return!0}if(r&&(Me(r,H)||De(e,r,H)))return!0;let a=Ln(e);for(let c of a)Me(c,H)&&(s=!0),De(e,c,H)&&(s=!0);return s}async function jc(e,t,n,o){b("handleSessionRecovery",{sessionID:e,error:t});let r=Js(t);if(!r)return b("Not a recoverable error"),{attempted:!1,success:!1};b("Detected recoverable error type",r);try{let s=!1,i=n||{info:{},parts:[]};switch(r){case"tool_result_missing":s=await Lc(e,i);break;case"thinking_block_order":s=await Dc(e,i,t);break;case"thinking_disabled_violation":s=await Mc(e,i);break;case"empty_content":s=await Uc(e,i,t);break}b("Recovery result",{errorType:r,success:s});let l=o?.customMessages?.[r]||gt[r]?.message||`Session recovery attempted for ${r}`;return{attempted:!0,success:s,message:s?l:void 0,errorType:r}}catch(s){return b("Recovery failed with error",s),{attempted:!0,success:!1,errorType:r}}}function Xs(e){return b("createSessionRecoveryHook",{config:e}),{onError:async t=>jc(t.session_id,t.error,t.message,e),isRecoverable:t=>Cc(t),getRecoveryMessage:t=>{if(t)return e?.customMessages?.[t]||gt[t]?.message}}}function zs(){let e=Xs();T({name:"sessionRecovery",event:"PostToolUseFailure",priority:10,handler:async t=>{let n=t.error||t.toolOutput;if(!n)return{continue:!0};if(!e.isRecoverable(n))return{continue:!0};let o=await e.onError({session_id:t.sessionId||"default",error:n,message:void 0});return o.attempted&&o.success?{continue:!0,message:o.message||`[session-recovery] Recovered from ${o.errorType} error. Please retry.`}:o.attempted&&!o.success?{continue:!0,message:`[session-recovery] Attempted recovery for ${o.errorType} but could not fix automatically. You may need to restart the session.`}:{continue:!0}}})}var G=require("fs"),ht=require("path"),Qs=require("os");var Ue=class{config;counts=new Map;queues=new Map;constructor(t){this.config=t}getConcurrencyLimit(t){let n=this.config?.modelConcurrency?.[t];if(n!==void 0)return n===0?1/0:n;let o=t.split("/")[0],r=this.config?.providerConcurrency?.[o];if(r!==void 0)return r===0?1/0:r;let s=this.config?.defaultConcurrency;return s!==void 0?s===0?1/0:s:5}async acquire(t){let n=this.getConcurrencyLimit(t);if(n===1/0)return;let o=this.counts.get(t)??0;if(o<n){this.counts.set(t,o+1);return}return new Promise(r=>{let s=this.queues.get(t)??[];s.push(r),this.queues.set(t,s)})}release(t){if(this.getConcurrencyLimit(t)===1/0)return;let o=this.queues.get(t);if(o&&o.length>0)o.shift()();else{let r=this.counts.get(t)??0;r>0&&this.counts.set(t,r-1)}}getCount(t){return this.counts.get(t)??0}getQueueLength(t){return this.queues.get(t)?.length??0}isAtCapacity(t){let n=this.getConcurrencyLimit(t);return n===1/0?!1:(this.counts.get(t)??0)>=n}getActiveCounts(){return new Map(this.counts)}clear(){this.counts.clear(),this.queues.clear()}};var $c=1800*1e3,Oe=(0,ht.join)((0,Qs.homedir)(),".claude",".olympus","background-tasks"),Tt=class{tasks=new Map;notifications=new Map;concurrencyManager;config;pruneInterval;constructor(t){this.config=t??{},this.concurrencyManager=new Ue(t),this.ensureStorageDir(),this.loadPersistedTasks(),this.startPruning()}ensureStorageDir(){(0,G.existsSync)(Oe)||(0,G.mkdirSync)(Oe,{recursive:!0})}generateTaskId(){let t=Date.now().toString(36),n=Math.random().toString(36).substring(2,8);return`bg_${t}${n}`}getTaskPath(t){return(0,ht.join)(Oe,`${t}.json`)}persistTask(t){let n=this.getTaskPath(t.id);(0,G.writeFileSync)(n,JSON.stringify(t,null,2))}unpersistTask(t){let n=this.getTaskPath(t);(0,G.existsSync)(n)&&(0,G.unlinkSync)(n)}loadPersistedTasks(){if((0,G.existsSync)(Oe))try{let{readdirSync:t}=require("fs"),n=t(Oe);for(let o of n)if(o.endsWith(".json"))try{let r=(0,ht.join)(Oe,o),s=(0,G.readFileSync)(r,"utf-8"),i=JSON.parse(s);i.startedAt=new Date(i.startedAt),i.completedAt&&(i.completedAt=new Date(i.completedAt)),i.progress?.lastUpdate&&(i.progress.lastUpdate=new Date(i.progress.lastUpdate)),i.progress?.lastMessageAt&&(i.progress.lastMessageAt=new Date(i.progress.lastMessageAt)),this.tasks.set(i.id,i)}catch{}}catch{}}startPruning(){this.pruneInterval||(this.pruneInterval=setInterval(()=>{this.pruneStaleTasksAndNotifications()},6e4),this.pruneInterval.unref&&this.pruneInterval.unref())}stopPruning(){this.pruneInterval&&(clearInterval(this.pruneInterval),this.pruneInterval=void 0)}pruneStaleTasksAndNotifications(){let t=Date.now(),n=this.config.taskTimeoutMs??$c;for(let[o,r]of this.tasks.entries())t-r.startedAt.getTime()>n&&r.status==="running"&&(r.status="error",r.error=`Task timed out after ${Math.round(n/6e4)} minutes`,r.completedAt=new Date,r.concurrencyKey&&this.concurrencyManager.release(r.concurrencyKey),this.clearNotificationsForTask(o),this.unpersistTask(o),this.tasks.delete(o));for(let[o,r]of this.notifications.entries()){let s=r.filter(i=>t-i.startedAt.getTime()<=n);s.length===0?this.notifications.delete(o):s.length!==r.length&&this.notifications.set(o,s)}}async launch(t){let n=t.agent,o=this.config.maxTotalTasks??10;if(Array.from(this.tasks.values()).filter(a=>a.status==="running").length>=o)throw new Error(`Maximum concurrent background tasks (${o}) reached. Wait for some tasks to complete.`);await this.concurrencyManager.acquire(n);let s=this.generateTaskId(),i=`ses_${this.generateTaskId()}`,l={id:s,sessionId:i,parentSessionId:t.parentSessionId,description:t.description,prompt:t.prompt,agent:t.agent,status:"running",startedAt:new Date,progress:{toolCalls:0,lastUpdate:new Date},concurrencyKey:n};return this.tasks.set(s,l),this.persistTask(l),l}async resume(t){let n=this.findBySession(t.sessionId);if(!n)throw new Error(`Task not found for session: ${t.sessionId}`);return n.status="running",n.completedAt=void 0,n.error=void 0,n.parentSessionId=t.parentSessionId,n.progress||(n.progress={toolCalls:0,lastUpdate:new Date}),n.progress.lastUpdate=new Date,this.persistTask(n),n}getTask(t){return this.tasks.get(t)}findBySession(t){for(let n of this.tasks.values())if(n.sessionId===t)return n}getTasksByParentSession(t){let n=[];for(let o of this.tasks.values())o.parentSessionId===t&&n.push(o);return n}getAllTasks(){return Array.from(this.tasks.values())}getRunningTasks(){return Array.from(this.tasks.values()).filter(t=>t.status==="running")}updateTaskStatus(t,n,o,r){let s=this.tasks.get(t);s&&(s.status=n,o&&(s.result=o),r&&(s.error=r),(n==="completed"||n==="error"||n==="cancelled")&&(s.completedAt=new Date,s.concurrencyKey&&this.concurrencyManager.release(s.concurrencyKey),this.markForNotification(s)),this.persistTask(s))}updateTaskProgress(t,n){let o=this.tasks.get(t);o&&(o.progress||(o.progress={toolCalls:0,lastUpdate:new Date}),Object.assign(o.progress,n,{lastUpdate:new Date}),this.persistTask(o))}markForNotification(t){let n=this.notifications.get(t.parentSessionId)??[];n.push(t),this.notifications.set(t.parentSessionId,n)}getPendingNotifications(t){return this.notifications.get(t)??[]}clearNotifications(t){this.notifications.delete(t)}clearNotificationsForTask(t){for(let[n,o]of this.notifications.entries()){let r=o.filter(s=>s.id!==t);r.length===0?this.notifications.delete(n):this.notifications.set(n,r)}}removeTask(t){let n=this.tasks.get(t);n?.concurrencyKey&&this.concurrencyManager.release(n.concurrencyKey),this.clearNotificationsForTask(t),this.unpersistTask(t),this.tasks.delete(t)}formatDuration(t,n){let o=(n??new Date).getTime()-t.getTime(),r=Math.floor(o/1e3),s=Math.floor(r/60),i=Math.floor(s/60);return i>0?`${i}h ${s%60}m ${r%60}s`:s>0?`${s}m ${r%60}s`:`${r}s`}getStatusSummary(){let t=this.getRunningTasks(),n=this.getAllTasks();if(n.length===0)return"No background tasks.";let o=[`Background Tasks: ${t.length} running, ${n.length} total`,""];for(let r of n){let s=this.formatDuration(r.startedAt,r.completedAt),i=r.status.toUpperCase(),l=r.progress?` (${r.progress.toolCalls} tools)`:"";o.push(` [${i}] ${r.description} - ${s}${l}`),r.error&&o.push(` Error: ${r.error}`)}return o.join(`
765
+ `)}cleanup(){this.stopPruning(),this.tasks.clear(),this.notifications.clear()}},jn;function $n(e){return jn||(jn=new Tt(e)),jn}function Fc(e){let t=e.status.toUpperCase(),n=Hc(e.startedAt,e.completedAt),r=[`${e.status==="completed"?"\u2713":e.status==="error"?"\u2717":"\u25CB"} [${t}] ${e.description}`,` Agent: ${e.agent}`,` Duration: ${n}`];if(e.progress?.toolCalls&&r.push(` Tool calls: ${e.progress.toolCalls}`),e.result){let s=e.result.substring(0,200),i=e.result.length>200?"...":"";r.push(` Result: ${s}${i}`)}return e.error&&r.push(` Error: ${e.error}`),r.join(`
766
+ `)}function Hc(e,t){let n=(t??new Date).getTime()-e.getTime(),o=Math.floor(n/1e3),r=Math.floor(o/60),s=Math.floor(r/60);return s>0?`${s}h ${r%60}m ${o%60}s`:r>0?`${r}m ${o%60}s`:`${o}s`}function Gc(e){if(e.length===0)return"";let t=e.length===1?`
736
767
  [BACKGROUND TASK COMPLETED]
737
768
  `:`
738
769
  [${e.length} BACKGROUND TASKS COMPLETED]
739
- `,n=e.map(o=>ba(o)).join(`
770
+ `,n=e.map(o=>Fc(o)).join(`
740
771
 
741
772
  `);return`${t}
742
773
  ${n}
743
- `}function Ma(e,t,n){let o=t.getPendingNotifications(e);if(o.length===0)return{hasNotifications:!1,tasks:[]};let s=(n?.formatNotification??La)(o);return{hasNotifications:!0,tasks:o,message:s}}function is(e,t){let n=e.sessionId;if(!n)return{continue:!0};let o=un(),r=Ma(n,o,t);return r.hasNotifications?((t?.autoClear??!0)&&o.clearNotifications(n),{continue:!0,message:r.message,notificationCount:r.tasks.length}):{continue:!0}}function as(){m({name:"backgroundNotification",event:"Notification",priority:10,handler:async e=>{let t={sessionId:e.sessionId,directory:e.directory,event:e.event?{type:e.event.type,properties:e.event.properties}:void 0},n=await is(t);return{continue:n.continue,message:n.message}}})}var cs=b(require("fs"),1),us=b(require("path"),1),ls=require("os");var qe="[user interrupted]",ln=new Set(["tool","tool_use","tool_result"]),dn="empty-message-sanitizer",pn="[empty-message-sanitizer]";var Ua=process.env.EMPTY_MESSAGE_SANITIZER_DEBUG==="1",$a=us.join((0,ls.tmpdir)(),"empty-message-sanitizer-debug.log");function $(...e){if(Ua){let t=`[${new Date().toISOString()}] ${pn} ${e.map(n=>typeof n=="object"?JSON.stringify(n,null,2):String(n)).join(" ")}
744
- `;cs.appendFileSync($a,t)}}function ja(e){if(e.type==="text"){let t=e.text;return!!(t&&t.trim().length>0)}return!1}function ds(e){return ln.has(e.type)}function Fa(e){return e.some(t=>ja(t)||ds(t))}function Ha(e,t,n=qe){let o=e.info.role==="assistant";if(t&&o)return $("skipping final assistant message"),!1;let r=e.parts;if(!Fa(r)){$(`sanitizing message ${e.info.id}: no valid content`);let i=!1;for(let a of r)if(a.type==="text"&&(!a.text||!a.text.trim())){a.text=n,a.synthetic=!0,i=!0,$("replaced empty text in existing part");break}if(!i){let a=r.findIndex(u=>ds(u)),c={id:`synthetic_${Date.now()}`,messageID:e.info.id,sessionID:e.info.sessionID??"",type:"text",text:n,synthetic:!0};a===-1?(r.push(c),$("appended synthetic text part")):(r.splice(a,0,c),$("inserted synthetic text part before tool part"))}return!0}let s=!1;for(let i of r)i.type==="text"&&i.text!==void 0&&i.text.trim()===""&&(i.text=n,i.synthetic=!0,s=!0,$(`sanitized empty text part in message ${e.info.id}`));return s}function Ga(e,t){let{messages:n}=e,o=t?.placeholderText??qe;$("sanitizing messages",{count:n.length});let r=0;for(let s=0;s<n.length;s++){let i=n[s],a=s===n.length-1;Ha(i,a,o)&&r++}return $(`sanitized ${r} messages`),{messages:n,sanitizedCount:r,modified:r>0}}function ps(e){return $("createEmptyMessageSanitizerHook called",{config:e}),{sanitize:t=>Ga(t,e),getName:()=>dn}}var ms="thinking-block-validator",fs=["tool","tool_use","text"],gs=["thinking","reasoning"];var hs="[Continuing from previous reasoning]",Ts="prt_0000000000_synthetic_thinking";function Ba(e){return fs.includes(e)}function Es(e){return gs.includes(e)}function Ya(e){if(!e)return!1;let t=e.toLowerCase();return t.includes("thinking")||t.endsWith("-high")?!0:t.includes("claude-sonnet-4")||t.includes("claude-opus-4")||t.includes("claude-3")}function Wa(e){return!e||e.length===0?!1:e.some(t=>Ba(t.type))}function Ka(e){if(!e||e.length===0)return!1;let t=e[0];return Es(t.type)}function Va(e,t){for(let n=t-1;n>=0;n--){let o=e[n];if(o.info.role==="assistant"&&o.parts){for(let r of o.parts)if(Es(r.type)){let s=r.thinking||r.text;if(s&&typeof s=="string"&&s.trim().length>0)return s}}}return""}function qa(e,t){e.parts||(e.parts=[]);let n={type:"thinking",id:Ts,sessionID:e.info.sessionID||"",messageID:e.info.id,thinking:t,synthetic:!0};e.parts.unshift(n)}function Ss(){return{"experimental.chat.messages.transform":async(e,t)=>{let{messages:n}=t;if(!n||n.length===0)return;let o;for(let i=n.length-1;i>=0;i--)if(n[i].info.role==="user"){o=n[i];break}let r=o?.info?.modelID||"";if(!Ya(r))return;let s=0;for(let i=0;i<n.length;i++){let a=n[i];if(a.info.role==="assistant"&&Wa(a.parts)&&!Ka(a.parts)){let u=Va(n,i)||hs;qa(a,u),s++}}s>0&&process.env.DEBUG_THINKING_VALIDATOR&&console.log(`[${ms}] Fixed ${s} message(s) by prepending thinking blocks`)}}}function ks(){m({name:"thinkingBlockValidator",event:"MessagesTransform",priority:10,handler:async e=>{if(!e.messages||e.messages.length===0)return{continue:!0};let t=Ss(),o={messages:[...e.messages]},r=t["experimental.chat.messages.transform"];r&&await r({},o);let s=o.messages.filter(i=>i.parts.some(a=>a.synthetic&&a.type==="thinking")).length;return s>0?{continue:!0,modifiedMessages:o.messages,message:`[Thinking Block Validator] Fixed ${s} message(s) by adding thinking blocks`}:{continue:!0}}}),m({name:"emptyMessageSanitizer",event:"MessagesTransform",priority:20,handler:e=>{if(!e.messages||e.messages.length===0)return{continue:!0};let n=ps().sanitize({messages:e.messages});return n.modified?{continue:!0,modifiedMessages:n.messages,message:`[Empty Message Sanitizer] Fixed ${n.sanitizedCount} message(s) with empty content`}:{continue:!0}}})}var ys=!1;function Os(){ys||(uo(),Eo(),$o(),Ar(),rs(),as(),ks(),ys=!0)}var ze=require("fs"),Is=require("os"),Ee=require("path"),Cs=b(require("jsonc-parser"),1),Ja={agents:{olympus:{model:"claude-opus-4-5-20251101"},oracle:{model:"claude-opus-4-5-20251101",enabled:!0},librarian:{model:"claude-sonnet-4-5-20250929"},explore:{model:"claude-haiku-4-5-20251001"},frontendEngineer:{model:"claude-sonnet-4-5-20250929",enabled:!0},documentWriter:{model:"claude-haiku-4-5-20251001",enabled:!0},multimodalLooker:{model:"claude-sonnet-4-5-20250929",enabled:!0},momus:{model:"claude-opus-4-5-20251101",enabled:!0},metis:{model:"claude-opus-4-5-20251101",enabled:!0},orchestratorOlympus:{model:"claude-sonnet-4-5-20250929",enabled:!0},olympusJunior:{model:"claude-sonnet-4-5-20250929",enabled:!0},prometheus:{model:"claude-opus-4-5-20251101",enabled:!0}},features:{parallelExecution:!0,lspTools:!0,astTools:!0,continuationEnforcement:!0,autoContextInjection:!0},mcpServers:{exa:{enabled:!0},context7:{enabled:!0},grepApp:{enabled:!0}},permissions:{allowBash:!0,allowEdit:!0,allowWrite:!0,maxBackgroundTasks:5},magicKeywords:{ultrawork:["ultrawork","ulw","uw"],search:["search","find","locate"],analyze:["analyze","investigate","examine"],ultrathink:["ultrathink","think","reason","ponder"]},routing:{enabled:!0,defaultTier:"MEDIUM",escalationEnabled:!0,maxEscalations:2,tierModels:{LOW:"claude-haiku-4-5-20251001",MEDIUM:"claude-sonnet-4-5-20250929",HIGH:"claude-opus-4-5-20251101"},agentOverrides:{oracle:{tier:"HIGH",reason:"Advisory agent requires deep reasoning"},prometheus:{tier:"HIGH",reason:"Strategic planning requires deep reasoning"},momus:{tier:"HIGH",reason:"Critical review requires deep reasoning"},metis:{tier:"HIGH",reason:"Pre-planning analysis requires deep reasoning"},explore:{tier:"LOW",reason:"Exploration is search-focused"},"document-writer":{tier:"LOW",reason:"Documentation is straightforward"}},escalationKeywords:["critical","production","urgent","security","breaking","architecture","refactor","redesign","root cause"],simplificationKeywords:["find","list","show","where","search","locate","grep"]}};function za(){let e=process.env.XDG_CONFIG_HOME??(0,Ee.join)((0,Is.homedir)(),".config");return{user:(0,Ee.join)(e,"claude-olympus","config.jsonc"),project:(0,Ee.join)(process.cwd(),".claude","olympus.jsonc")}}function Rs(e){if(!(0,ze.existsSync)(e))return null;try{let t=(0,ze.readFileSync)(e,"utf-8"),n=[],o=Cs.parse(t,n,{allowTrailingComma:!0,allowEmptyContent:!0});return n.length>0&&console.warn(`Warning: Parse errors in ${e}:`,n),o}catch(t){return console.error(`Error loading config from ${e}:`,t),null}}function Je(e,t){let n={...e};for(let o of Object.keys(t)){let r=t[o],s=n[o];r!==void 0&&typeof r=="object"&&r!==null&&!Array.isArray(r)&&typeof s=="object"&&s!==null&&!Array.isArray(s)?n[o]=Je(s,r):r!==void 0&&(n[o]=r)}return n}function Xa(){let e={};if(process.env.EXA_API_KEY&&(e.mcpServers={...e.mcpServers,exa:{enabled:!0,apiKey:process.env.EXA_API_KEY}}),process.env.OLYMPUS_PARALLEL_EXECUTION!==void 0&&(e.features={...e.features,parallelExecution:process.env.OLYMPUS_PARALLEL_EXECUTION==="true"}),process.env.OLYMPUS_LSP_TOOLS!==void 0&&(e.features={...e.features,lspTools:process.env.OLYMPUS_LSP_TOOLS==="true"}),process.env.OLYMPUS_MAX_BACKGROUND_TASKS){let t=parseInt(process.env.OLYMPUS_MAX_BACKGROUND_TASKS,10);isNaN(t)||(e.permissions={...e.permissions,maxBackgroundTasks:t})}if(process.env.OLYMPUS_ROUTING_ENABLED!==void 0&&(e.routing={...e.routing,enabled:process.env.OLYMPUS_ROUTING_ENABLED==="true"}),process.env.OLYMPUS_ROUTING_DEFAULT_TIER){let t=process.env.OLYMPUS_ROUTING_DEFAULT_TIER.toUpperCase();(t==="LOW"||t==="MEDIUM"||t==="HIGH")&&(e.routing={...e.routing,defaultTier:t})}return process.env.OLYMPUS_ESCALATION_ENABLED!==void 0&&(e.routing={...e.routing,escalationEnabled:process.env.OLYMPUS_ESCALATION_ENABLED==="true"}),e}function _s(){let e=za(),t={...Ja},n=Rs(e.user);n&&(t=Je(t,n));let o=Rs(e.project);o&&(t=Je(t,o));let r=Xa();return t=Je(t,r),t}function Qa(e){let t=e.hooks;return t&&typeof t.timeoutMs=="number"?t.timeoutMs:100}function Za(e,t){let n=e.hooks;if(n&&typeof n.enabled=="boolean"&&!n.enabled)return!1;if(n&&t in n){let o=n[t];if(typeof o=="object"&&o!==null){let r=o.enabled;if(typeof r=="boolean")return r}}return!0}async function ec(e,t){return Promise.race([Promise.resolve(e()),new Promise(n=>setTimeout(()=>n(null),t))])}function tc(e,t){return!e||!t?!0:(typeof e=="string"?new RegExp(e,"i"):e).test(t)}async function As(e,t){let n=_s(),o=hn(e),r=Qa(n),s=!0,i=[],a,c=t.toolInput,u=t.messages;for(let l of o)if(Za(n,l.name)&&tc(l.matcher,t.toolName))try{let d=await ec(()=>l.handler({...t,toolInput:c,messages:u}),r);if(d===null){console.error(`[hook-router] ${l.name} timed out after ${r}ms`);continue}d.continue||(s=!1,a=d.reason),d.message&&i.push(d.message),d.modifiedInput!==void 0&&(c=d.modifiedInput),d.modifiedMessages!==void 0&&(u=d.modifiedMessages)}catch(d){console.error(`[hook-router] ${l.name} error:`,d)}return{continue:s,message:i.length>0?i.join(`
774
+ `}function Bc(e,t,n){let o=t.getPendingNotifications(e);if(o.length===0)return{hasNotifications:!1,tasks:[]};let s=(n?.formatNotification??Gc)(o);return{hasNotifications:!0,tasks:o,message:s}}function Zs(e,t){let n=e.sessionId;if(!n)return{continue:!0};let o=$n(),r=Bc(n,o,t);return r.hasNotifications?((t?.autoClear??!0)&&o.clearNotifications(n),{continue:!0,message:r.message,notificationCount:r.tasks.length}):{continue:!0}}function ei(){T({name:"backgroundNotification",event:"Notification",priority:10,handler:async e=>{let t={sessionId:e.sessionId,directory:e.directory,event:e.event?{type:e.event.type,properties:e.event.properties}:void 0},n=await Zs(t);return{continue:n.continue,message:n.message}}})}var ti=!1;function ni(){ti||(jo(),Vo(),pr(),ts(),Ls(),zs(),ei(),ti=!0)}var yt=require("fs"),di=require("os"),$e=require("path");function Et(e,t=!1){let n=e.length,o=0,r="",s=0,i=16,l=0,a=0,c=0,u=0,d=0;function m(p,A){let w=0,S=0;for(;w<p||!A;){let f=e.charCodeAt(o);if(f>=48&&f<=57)S=S*16+f-48;else if(f>=65&&f<=70)S=S*16+f-65+10;else if(f>=97&&f<=102)S=S*16+f-97+10;else break;o++,w++}return w<p&&(S=-1),S}function E(p){o=p,r="",s=0,i=16,d=0}function k(){let p=o;if(e.charCodeAt(o)===48)o++;else for(o++;o<e.length&&Re(e.charCodeAt(o));)o++;if(o<e.length&&e.charCodeAt(o)===46)if(o++,o<e.length&&Re(e.charCodeAt(o)))for(o++;o<e.length&&Re(e.charCodeAt(o));)o++;else return d=3,e.substring(p,o);let A=o;if(o<e.length&&(e.charCodeAt(o)===69||e.charCodeAt(o)===101))if(o++,(o<e.length&&e.charCodeAt(o)===43||e.charCodeAt(o)===45)&&o++,o<e.length&&Re(e.charCodeAt(o))){for(o++;o<e.length&&Re(e.charCodeAt(o));)o++;A=o}else d=3;return e.substring(p,A)}function y(){let p="",A=o;for(;;){if(o>=n){p+=e.substring(A,o),d=2;break}let w=e.charCodeAt(o);if(w===34){p+=e.substring(A,o),o++;break}if(w===92){if(p+=e.substring(A,o),o++,o>=n){d=2;break}switch(e.charCodeAt(o++)){case 34:p+='"';break;case 92:p+="\\";break;case 47:p+="/";break;case 98:p+="\b";break;case 102:p+="\f";break;case 110:p+=`
775
+ `;break;case 114:p+="\r";break;case 116:p+=" ";break;case 117:let f=m(4,!0);f>=0?p+=String.fromCharCode(f):d=4;break;default:d=5}A=o;continue}if(w>=0&&w<=31)if(je(w)){p+=e.substring(A,o),d=2;break}else d=6;o++}return p}function O(){if(r="",d=0,s=o,a=l,u=c,o>=n)return s=n,i=17;let p=e.charCodeAt(o);if(Fn(p)){do o++,r+=String.fromCharCode(p),p=e.charCodeAt(o);while(Fn(p));return i=15}if(je(p))return o++,r+=String.fromCharCode(p),p===13&&e.charCodeAt(o)===10&&(o++,r+=`
776
+ `),l++,c=o,i=14;switch(p){case 123:return o++,i=1;case 125:return o++,i=2;case 91:return o++,i=3;case 93:return o++,i=4;case 58:return o++,i=6;case 44:return o++,i=5;case 34:return o++,r=y(),i=10;case 47:let A=o-1;if(e.charCodeAt(o+1)===47){for(o+=2;o<n&&!je(e.charCodeAt(o));)o++;return r=e.substring(A,o),i=12}if(e.charCodeAt(o+1)===42){o+=2;let w=n-1,S=!1;for(;o<w;){let f=e.charCodeAt(o);if(f===42&&e.charCodeAt(o+1)===47){o+=2,S=!0;break}o++,je(f)&&(f===13&&e.charCodeAt(o)===10&&o++,l++,c=o)}return S||(o++,d=1),r=e.substring(A,o),i=13}return r+=String.fromCharCode(p),o++,i=16;case 45:if(r+=String.fromCharCode(p),o++,o===n||!Re(e.charCodeAt(o)))return i=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return r+=k(),i=11;default:for(;o<n&&N(p);)o++,p=e.charCodeAt(o);if(s!==o){switch(r=e.substring(s,o),r){case"true":return i=8;case"false":return i=9;case"null":return i=7}return i=16}return r+=String.fromCharCode(p),o++,i=16}}function N(p){if(Fn(p)||je(p))return!1;switch(p){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function x(){let p;do p=O();while(p>=12&&p<=15);return p}return{setPosition:E,getPosition:()=>o,scan:t?x:O,getToken:()=>i,getTokenValue:()=>r,getTokenOffset:()=>s,getTokenLength:()=>o-s,getTokenStartLine:()=>a,getTokenStartCharacter:()=>s-u,getTokenError:()=>d}}function Fn(e){return e===32||e===9}function je(e){return e===10||e===13}function Re(e){return e>=48&&e<=57}var oi;(function(e){e[e.lineFeed=10]="lineFeed",e[e.carriageReturn=13]="carriageReturn",e[e.space=32]="space",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.asterisk=42]="asterisk",e[e.backslash=92]="backslash",e[e.closeBrace=125]="closeBrace",e[e.closeBracket=93]="closeBracket",e[e.colon=58]="colon",e[e.comma=44]="comma",e[e.dot=46]="dot",e[e.doubleQuote=34]="doubleQuote",e[e.minus=45]="minus",e[e.openBrace=123]="openBrace",e[e.openBracket=91]="openBracket",e[e.plus=43]="plus",e[e.slash=47]="slash",e[e.formFeed=12]="formFeed",e[e.tab=9]="tab"})(oi||(oi={}));var Wc=new Array(20).fill(0).map((e,t)=>" ".repeat(t)),_e=200,Vc={" ":{"\n":new Array(_e).fill(0).map((e,t)=>`
777
+ `+" ".repeat(t)),"\r":new Array(_e).fill(0).map((e,t)=>"\r"+" ".repeat(t)),"\r\n":new Array(_e).fill(0).map((e,t)=>`\r
778
+ `+" ".repeat(t))}," ":{"\n":new Array(_e).fill(0).map((e,t)=>`
779
+ `+" ".repeat(t)),"\r":new Array(_e).fill(0).map((e,t)=>"\r"+" ".repeat(t)),"\r\n":new Array(_e).fill(0).map((e,t)=>`\r
780
+ `+" ".repeat(t))}};var kt;(function(e){e.DEFAULT={allowTrailingComma:!1}})(kt||(kt={}));function ri(e,t=[],n=kt.DEFAULT){let o=null,r=[],s=[];function i(a){Array.isArray(r)?r.push(a):o!==null&&(r[o]=a)}return si(e,{onObjectBegin:()=>{let a={};i(a),s.push(r),r=a,o=null},onObjectProperty:a=>{o=a},onObjectEnd:()=>{r=s.pop()},onArrayBegin:()=>{let a=[];i(a),s.push(r),r=a,o=null},onArrayEnd:()=>{r=s.pop()},onLiteralValue:i,onError:(a,c,u)=>{t.push({error:a,offset:c,length:u})}},n),r[0]}function si(e,t,n=kt.DEFAULT){let o=Et(e,!1),r=[],s=0;function i(g){return g?()=>s===0&&g(o.getTokenOffset(),o.getTokenLength(),o.getTokenStartLine(),o.getTokenStartCharacter()):()=>!0}function l(g){return g?R=>s===0&&g(R,o.getTokenOffset(),o.getTokenLength(),o.getTokenStartLine(),o.getTokenStartCharacter()):()=>!0}function a(g){return g?R=>s===0&&g(R,o.getTokenOffset(),o.getTokenLength(),o.getTokenStartLine(),o.getTokenStartCharacter(),()=>r.slice()):()=>!0}function c(g){return g?()=>{s>0?s++:g(o.getTokenOffset(),o.getTokenLength(),o.getTokenStartLine(),o.getTokenStartCharacter(),()=>r.slice())===!1&&(s=1)}:()=>!0}function u(g){return g?()=>{s>0&&s--,s===0&&g(o.getTokenOffset(),o.getTokenLength(),o.getTokenStartLine(),o.getTokenStartCharacter())}:()=>!0}let d=c(t.onObjectBegin),m=a(t.onObjectProperty),E=u(t.onObjectEnd),k=c(t.onArrayBegin),y=u(t.onArrayEnd),O=a(t.onLiteralValue),N=l(t.onSeparator),x=i(t.onComment),p=l(t.onError),A=n&&n.disallowComments,w=n&&n.allowTrailingComma;function S(){for(;;){let g=o.scan();switch(o.getTokenError()){case 4:f(14);break;case 5:f(15);break;case 3:f(13);break;case 1:A||f(11);break;case 2:f(12);break;case 6:f(16);break}switch(g){case 12:case 13:A?f(10):x();break;case 16:f(1);break;case 15:case 14:break;default:return g}}}function f(g,R=[],Gn=[]){if(p(g),R.length+Gn.length>0){let Fe=o.getToken();for(;Fe!==17;){if(R.indexOf(Fe)!==-1){S();break}else if(Gn.indexOf(Fe)!==-1)break;Fe=S()}}}function Hn(g){let R=o.getTokenValue();return g?O(R):(m(R),r.push(R)),S(),!0}function gi(){switch(o.getToken()){case 11:let g=o.getTokenValue(),R=Number(g);isNaN(R)&&(f(2),R=0),O(R);break;case 7:O(null);break;case 8:O(!0);break;case 9:O(!1);break;default:return!1}return S(),!0}function hi(){return o.getToken()!==10?(f(3,[],[2,5]),!1):(Hn(!1),o.getToken()===6?(N(":"),S(),Rt()||f(4,[],[2,5])):f(5,[],[2,5]),r.pop(),!0)}function Ti(){d(),S();let g=!1;for(;o.getToken()!==2&&o.getToken()!==17;){if(o.getToken()===5){if(g||f(4,[],[]),N(","),S(),o.getToken()===2&&w)break}else g&&f(6,[],[]);hi()||f(4,[],[2,5]),g=!0}return E(),o.getToken()!==2?f(7,[2],[]):S(),!0}function Ei(){k(),S();let g=!0,R=!1;for(;o.getToken()!==4&&o.getToken()!==17;){if(o.getToken()===5){if(R||f(4,[],[]),N(","),S(),o.getToken()===4&&w)break}else R&&f(6,[],[]);g?(r.push(0),g=!1):r[r.length-1]++,Rt()||f(4,[],[4,5]),R=!0}return y(),g||r.pop(),o.getToken()!==4?f(8,[4],[]):S(),!0}function Rt(){switch(o.getToken()){case 3:return Ei();case 1:return Ti();case 10:return Hn(!0);default:return gi()}}return S(),o.getToken()===17?n.allowEmptyContent?!0:(f(4,[],[]),!1):Rt()?(o.getToken()!==17&&f(9,[],[]),!0):(f(4,[],[]),!1)}var ii;(function(e){e[e.None=0]="None",e[e.UnexpectedEndOfComment=1]="UnexpectedEndOfComment",e[e.UnexpectedEndOfString=2]="UnexpectedEndOfString",e[e.UnexpectedEndOfNumber=3]="UnexpectedEndOfNumber",e[e.InvalidUnicode=4]="InvalidUnicode",e[e.InvalidEscapeCharacter=5]="InvalidEscapeCharacter",e[e.InvalidCharacter=6]="InvalidCharacter"})(ii||(ii={}));var ai;(function(e){e[e.OpenBraceToken=1]="OpenBraceToken",e[e.CloseBraceToken=2]="CloseBraceToken",e[e.OpenBracketToken=3]="OpenBracketToken",e[e.CloseBracketToken=4]="CloseBracketToken",e[e.CommaToken=5]="CommaToken",e[e.ColonToken=6]="ColonToken",e[e.NullKeyword=7]="NullKeyword",e[e.TrueKeyword=8]="TrueKeyword",e[e.FalseKeyword=9]="FalseKeyword",e[e.StringLiteral=10]="StringLiteral",e[e.NumericLiteral=11]="NumericLiteral",e[e.LineCommentTrivia=12]="LineCommentTrivia",e[e.BlockCommentTrivia=13]="BlockCommentTrivia",e[e.LineBreakTrivia=14]="LineBreakTrivia",e[e.Trivia=15]="Trivia",e[e.Unknown=16]="Unknown",e[e.EOF=17]="EOF"})(ai||(ai={}));var li=ri;var ci;(function(e){e[e.InvalidSymbol=1]="InvalidSymbol",e[e.InvalidNumberFormat=2]="InvalidNumberFormat",e[e.PropertyNameExpected=3]="PropertyNameExpected",e[e.ValueExpected=4]="ValueExpected",e[e.ColonExpected=5]="ColonExpected",e[e.CommaExpected=6]="CommaExpected",e[e.CloseBraceExpected=7]="CloseBraceExpected",e[e.CloseBracketExpected=8]="CloseBracketExpected",e[e.EndOfFileExpected=9]="EndOfFileExpected",e[e.InvalidCommentToken=10]="InvalidCommentToken",e[e.UnexpectedEndOfComment=11]="UnexpectedEndOfComment",e[e.UnexpectedEndOfString=12]="UnexpectedEndOfString",e[e.UnexpectedEndOfNumber=13]="UnexpectedEndOfNumber",e[e.InvalidUnicode=14]="InvalidUnicode",e[e.InvalidEscapeCharacter=15]="InvalidEscapeCharacter",e[e.InvalidCharacter=16]="InvalidCharacter"})(ci||(ci={}));var el={agents:{olympus:{model:"claude-opus-4-5-20251101"},oracle:{model:"claude-opus-4-5-20251101",enabled:!0},librarian:{model:"claude-sonnet-4-5-20250929"},explore:{model:"claude-haiku-4-5-20251001"},frontendEngineer:{model:"claude-sonnet-4-5-20250929",enabled:!0},documentWriter:{model:"claude-haiku-4-5-20251001",enabled:!0},multimodalLooker:{model:"claude-sonnet-4-5-20250929",enabled:!0},momus:{model:"claude-opus-4-5-20251101",enabled:!0},metis:{model:"claude-opus-4-5-20251101",enabled:!0},orchestratorOlympus:{model:"claude-sonnet-4-5-20250929",enabled:!0},olympusJunior:{model:"claude-sonnet-4-5-20250929",enabled:!0},prometheus:{model:"claude-opus-4-5-20251101",enabled:!0}},features:{parallelExecution:!0,lspTools:!0,astTools:!0,continuationEnforcement:!0,autoContextInjection:!0},mcpServers:{exa:{enabled:!0},context7:{enabled:!0},grepApp:{enabled:!0}},permissions:{allowBash:!0,allowEdit:!0,allowWrite:!0,maxBackgroundTasks:5},magicKeywords:{ultrawork:["ultrawork","ulw","uw"],search:["search","find","locate"],analyze:["analyze","investigate","examine"],ultrathink:["ultrathink","think","reason","ponder"]},routing:{enabled:!0,defaultTier:"MEDIUM",escalationEnabled:!0,maxEscalations:2,tierModels:{LOW:"claude-haiku-4-5-20251001",MEDIUM:"claude-sonnet-4-5-20250929",HIGH:"claude-opus-4-5-20251101"},agentOverrides:{oracle:{tier:"HIGH",reason:"Advisory agent requires deep reasoning"},prometheus:{tier:"HIGH",reason:"Strategic planning requires deep reasoning"},momus:{tier:"HIGH",reason:"Critical review requires deep reasoning"},metis:{tier:"HIGH",reason:"Pre-planning analysis requires deep reasoning"},explore:{tier:"LOW",reason:"Exploration is search-focused"},"document-writer":{tier:"LOW",reason:"Documentation is straightforward"}},escalationKeywords:["critical","production","urgent","security","breaking","architecture","refactor","redesign","root cause"],simplificationKeywords:["find","list","show","where","search","locate","grep"]}};function tl(){let e=process.env.XDG_CONFIG_HOME??(0,$e.join)((0,di.homedir)(),".config");return{user:(0,$e.join)(e,"claude-olympus","config.jsonc"),project:(0,$e.join)(process.cwd(),".claude","olympus.jsonc")}}function ui(e){if(!(0,yt.existsSync)(e))return null;try{let t=(0,yt.readFileSync)(e,"utf-8"),n=[],o=li(t,n,{allowTrailingComma:!0,allowEmptyContent:!0});return n.length>0&&console.warn(`Warning: Parse errors in ${e}:`,n),o}catch(t){return console.error(`Error loading config from ${e}:`,t),null}}function St(e,t){let n={...e};for(let o of Object.keys(t)){let r=t[o],s=n[o];r!==void 0&&typeof r=="object"&&r!==null&&!Array.isArray(r)&&typeof s=="object"&&s!==null&&!Array.isArray(s)?n[o]=St(s,r):r!==void 0&&(n[o]=r)}return n}function nl(){let e={};if(process.env.EXA_API_KEY&&(e.mcpServers={...e.mcpServers,exa:{enabled:!0,apiKey:process.env.EXA_API_KEY}}),process.env.OLYMPUS_PARALLEL_EXECUTION!==void 0&&(e.features={...e.features,parallelExecution:process.env.OLYMPUS_PARALLEL_EXECUTION==="true"}),process.env.OLYMPUS_LSP_TOOLS!==void 0&&(e.features={...e.features,lspTools:process.env.OLYMPUS_LSP_TOOLS==="true"}),process.env.OLYMPUS_MAX_BACKGROUND_TASKS){let t=parseInt(process.env.OLYMPUS_MAX_BACKGROUND_TASKS,10);isNaN(t)||(e.permissions={...e.permissions,maxBackgroundTasks:t})}if(process.env.OLYMPUS_ROUTING_ENABLED!==void 0&&(e.routing={...e.routing,enabled:process.env.OLYMPUS_ROUTING_ENABLED==="true"}),process.env.OLYMPUS_ROUTING_DEFAULT_TIER){let t=process.env.OLYMPUS_ROUTING_DEFAULT_TIER.toUpperCase();(t==="LOW"||t==="MEDIUM"||t==="HIGH")&&(e.routing={...e.routing,defaultTier:t})}return process.env.OLYMPUS_ESCALATION_ENABLED!==void 0&&(e.routing={...e.routing,escalationEnabled:process.env.OLYMPUS_ESCALATION_ENABLED==="true"}),e}function pi(){let e=tl(),t={...el},n=ui(e.user);n&&(t=St(t,n));let o=ui(e.project);o&&(t=St(t,o));let r=nl();return t=St(t,r),t}function ol(e){let t=e.hooks;return t&&typeof t.timeoutMs=="number"?t.timeoutMs:100}function rl(e,t){let n=e.hooks;if(n&&typeof n.enabled=="boolean"&&!n.enabled)return!1;if(n&&t in n){let o=n[t];if(typeof o=="object"&&o!==null){let r=o.enabled;if(typeof r=="boolean")return r}}return!0}async function sl(e,t){return Promise.race([Promise.resolve(e()),new Promise(n=>setTimeout(()=>n(null),t))])}function il(e,t){return!e||!t?!0:(typeof e=="string"?new RegExp(e,"i"):e).test(t)}async function fi(e,t){let n=pi(),o=Yn(e),r=ol(n),s=!0,i=[],l,a=t.toolInput,c=t.messages;for(let u of o)if(rl(n,u.name)&&il(u.matcher,t.toolName))try{let d=await sl(()=>u.handler({...t,toolInput:a,messages:c}),r);if(d===null){console.error(`[hook-router] ${u.name} timed out after ${r}ms`);continue}d.continue||(s=!1,l=d.reason),d.message&&i.push(d.message),d.modifiedInput!==void 0&&(a=d.modifiedInput),d.modifiedMessages!==void 0&&(c=d.modifiedMessages)}catch(d){console.error(`[hook-router] ${u.name} error:`,d)}return{continue:s,message:i.length>0?i.join(`
745
781
 
746
782
  ---
747
783
 
748
- `):void 0,reason:a,modifiedInput:c!==t.toolInput?c:void 0,modifiedMessages:u!==t.messages?u:void 0}}Os();async function nc(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}async function Ns(){let t=process.argv.slice(2).find(i=>i.startsWith("--event="));t||(console.error("Usage: node olympus-hooks.mjs --event=<event-type>"),process.exit(1));let n=t.split("=")[1],o=await nc(),r;try{r=JSON.parse(o)}catch{r={}}let s=await As(n,r);console.log(JSON.stringify(s))}var Xe=process.argv[1]||"",oc=Xe.endsWith("entry.ts")||Xe.endsWith("entry.js")||Xe.endsWith("olympus-hooks.mjs")||Xe.includes("olympus-hooks");oc&&Ns().catch(e=>{console.error("[olympus-hooks] Fatal error:",e),process.exit(1)});0&&(module.exports={main});
784
+ `):void 0,reason:l,modifiedInput:a!==t.toolInput?a:void 0,modifiedMessages:c!==t.messages?c:void 0}}ni();async function al(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}async function mi(){let t=process.argv.slice(2).find(i=>i.startsWith("--event="));t||(console.error("Usage: node olympus-hooks.mjs --event=<event-type>"),process.exit(1));let n=t.split("=")[1],o=await al(),r;try{r=JSON.parse(o)}catch{r={}}let s=await fi(n,r);console.log(JSON.stringify(s))}var Ot=process.argv[1]||"",cl=Ot.endsWith("entry.ts")||Ot.endsWith("entry.js")||Ot.endsWith("olympus-hooks.mjs")||Ot.includes("olympus-hooks");cl&&mi().catch(e=>{console.error("[olympus-hooks] Fatal error:",e),process.exit(1)});0&&(module.exports={main});