olympus-ai 2.5.3 → 2.6.0

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 (126) hide show
  1. package/dist/__tests__/learning/agent-evaluator.test.d.ts +2 -0
  2. package/dist/__tests__/learning/agent-evaluator.test.d.ts.map +1 -0
  3. package/dist/__tests__/learning/agent-evaluator.test.js +29 -0
  4. package/dist/__tests__/learning/agent-evaluator.test.js.map +1 -0
  5. package/dist/__tests__/learning/discovery.test.d.ts +2 -0
  6. package/dist/__tests__/learning/discovery.test.d.ts.map +1 -0
  7. package/dist/__tests__/learning/discovery.test.js +70 -0
  8. package/dist/__tests__/learning/discovery.test.js.map +1 -0
  9. package/dist/__tests__/learning/fixtures/mock-feedback.d.ts +14 -0
  10. package/dist/__tests__/learning/fixtures/mock-feedback.d.ts.map +1 -0
  11. package/dist/__tests__/learning/fixtures/mock-feedback.js +146 -0
  12. package/dist/__tests__/learning/fixtures/mock-feedback.js.map +1 -0
  13. package/dist/__tests__/learning/pattern-extractor.test.d.ts +2 -0
  14. package/dist/__tests__/learning/pattern-extractor.test.d.ts.map +1 -0
  15. package/dist/__tests__/learning/pattern-extractor.test.js +30 -0
  16. package/dist/__tests__/learning/pattern-extractor.test.js.map +1 -0
  17. package/dist/__tests__/learning/revision-detector.test.d.ts +2 -0
  18. package/dist/__tests__/learning/revision-detector.test.d.ts.map +1 -0
  19. package/dist/__tests__/learning/revision-detector.test.js +54 -0
  20. package/dist/__tests__/learning/revision-detector.test.js.map +1 -0
  21. package/dist/cli/index.js +264 -0
  22. package/dist/cli/index.js.map +1 -1
  23. package/dist/hooks/agent-usage-reminder/index.d.ts +1 -0
  24. package/dist/hooks/agent-usage-reminder/index.d.ts.map +1 -1
  25. package/dist/hooks/agent-usage-reminder/index.js +107 -0
  26. package/dist/hooks/agent-usage-reminder/index.js.map +1 -1
  27. package/dist/hooks/agent-usage-reminder/index.test.d.ts +5 -0
  28. package/dist/hooks/agent-usage-reminder/index.test.d.ts.map +1 -0
  29. package/dist/hooks/agent-usage-reminder/index.test.js +141 -0
  30. package/dist/hooks/agent-usage-reminder/index.test.js.map +1 -0
  31. package/dist/hooks/bridge.d.ts.map +1 -1
  32. package/dist/hooks/bridge.js +14 -2
  33. package/dist/hooks/bridge.js.map +1 -1
  34. package/dist/hooks/keyword-detector/index.d.ts +1 -1
  35. package/dist/hooks/keyword-detector/index.d.ts.map +1 -1
  36. package/dist/hooks/keyword-detector/index.js +2 -1
  37. package/dist/hooks/keyword-detector/index.js.map +1 -1
  38. package/dist/hooks/olympus-hooks.cjs +162 -67
  39. package/dist/hooks/olympus-state/index.d.ts +69 -0
  40. package/dist/hooks/olympus-state/index.d.ts.map +1 -0
  41. package/dist/hooks/olympus-state/index.js +226 -0
  42. package/dist/hooks/olympus-state/index.js.map +1 -0
  43. package/dist/hooks/persistent-mode/index.d.ts +7 -6
  44. package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
  45. package/dist/hooks/persistent-mode/index.js +94 -5
  46. package/dist/hooks/persistent-mode/index.js.map +1 -1
  47. package/dist/hooks/registrations/session-start.d.ts.map +1 -1
  48. package/dist/hooks/registrations/session-start.js +26 -0
  49. package/dist/hooks/registrations/session-start.js.map +1 -1
  50. package/dist/hooks/registrations/stop.d.ts.map +1 -1
  51. package/dist/hooks/registrations/stop.js +25 -0
  52. package/dist/hooks/registrations/stop.js.map +1 -1
  53. package/dist/hooks/registrations/user-prompt-submit.d.ts.map +1 -1
  54. package/dist/hooks/registrations/user-prompt-submit.js +34 -0
  55. package/dist/hooks/registrations/user-prompt-submit.js.map +1 -1
  56. package/dist/installer/hooks.d.ts +7 -1
  57. package/dist/installer/hooks.d.ts.map +1 -1
  58. package/dist/installer/hooks.js +61 -2
  59. package/dist/installer/hooks.js.map +1 -1
  60. package/dist/installer/index.d.ts +1 -1
  61. package/dist/installer/index.d.ts.map +1 -1
  62. package/dist/installer/index.js +40 -14
  63. package/dist/installer/index.js.map +1 -1
  64. package/dist/learning/agent-evaluator.d.ts +6 -0
  65. package/dist/learning/agent-evaluator.d.ts.map +1 -0
  66. package/dist/learning/agent-evaluator.js +116 -0
  67. package/dist/learning/agent-evaluator.js.map +1 -0
  68. package/dist/learning/discovery-validator.d.ts +21 -0
  69. package/dist/learning/discovery-validator.d.ts.map +1 -0
  70. package/dist/learning/discovery-validator.js +75 -0
  71. package/dist/learning/discovery-validator.js.map +1 -0
  72. package/dist/learning/discovery.d.ts +20 -0
  73. package/dist/learning/discovery.d.ts.map +1 -0
  74. package/dist/learning/discovery.js +141 -0
  75. package/dist/learning/discovery.js.map +1 -0
  76. package/dist/learning/hooks/cancellation-detector.d.ts +8 -0
  77. package/dist/learning/hooks/cancellation-detector.d.ts.map +1 -0
  78. package/dist/learning/hooks/cancellation-detector.js +64 -0
  79. package/dist/learning/hooks/cancellation-detector.js.map +1 -0
  80. package/dist/learning/hooks/learned-context.d.ts +6 -0
  81. package/dist/learning/hooks/learned-context.d.ts.map +1 -0
  82. package/dist/learning/hooks/learned-context.js +104 -0
  83. package/dist/learning/hooks/learned-context.js.map +1 -0
  84. package/dist/learning/hooks/revision-detector.d.ts +9 -0
  85. package/dist/learning/hooks/revision-detector.d.ts.map +1 -0
  86. package/dist/learning/hooks/revision-detector.js +92 -0
  87. package/dist/learning/hooks/revision-detector.js.map +1 -0
  88. package/dist/learning/hooks/success-detector.d.ts +4 -0
  89. package/dist/learning/hooks/success-detector.d.ts.map +1 -0
  90. package/dist/learning/hooks/success-detector.js +58 -0
  91. package/dist/learning/hooks/success-detector.js.map +1 -0
  92. package/dist/learning/index.d.ts +10 -0
  93. package/dist/learning/index.d.ts.map +1 -0
  94. package/dist/learning/index.js +17 -0
  95. package/dist/learning/index.js.map +1 -0
  96. package/dist/learning/migrate-notepads.d.ts +6 -0
  97. package/dist/learning/migrate-notepads.d.ts.map +1 -0
  98. package/dist/learning/migrate-notepads.js +77 -0
  99. package/dist/learning/migrate-notepads.js.map +1 -0
  100. package/dist/learning/pattern-extractor.d.ts +6 -0
  101. package/dist/learning/pattern-extractor.d.ts.map +1 -0
  102. package/dist/learning/pattern-extractor.js +106 -0
  103. package/dist/learning/pattern-extractor.js.map +1 -0
  104. package/dist/learning/preference-learner.d.ts +6 -0
  105. package/dist/learning/preference-learner.d.ts.map +1 -0
  106. package/dist/learning/preference-learner.js +96 -0
  107. package/dist/learning/preference-learner.js.map +1 -0
  108. package/dist/learning/prompt-patcher.d.ts +24 -0
  109. package/dist/learning/prompt-patcher.d.ts.map +1 -0
  110. package/dist/learning/prompt-patcher.js +120 -0
  111. package/dist/learning/prompt-patcher.js.map +1 -0
  112. package/dist/learning/session-state.d.ts +18 -0
  113. package/dist/learning/session-state.d.ts.map +1 -0
  114. package/dist/learning/session-state.js +78 -0
  115. package/dist/learning/session-state.js.map +1 -0
  116. package/dist/learning/storage.d.ts +18 -0
  117. package/dist/learning/storage.d.ts.map +1 -0
  118. package/dist/learning/storage.js +74 -0
  119. package/dist/learning/storage.js.map +1 -0
  120. package/dist/learning/types.d.ts +138 -0
  121. package/dist/learning/types.d.ts.map +1 -0
  122. package/dist/learning/types.js +6 -0
  123. package/dist/learning/types.js.map +1 -0
  124. package/dist/shared/types.d.ts +12 -0
  125. package/dist/shared/types.d.ts.map +1 -1
  126. package/package.json +4 -3
@@ -1,26 +1,26 @@
1
1
  #!/usr/bin/env node
2
2
  // Olympus Hooks Bundle - Generated by esbuild
3
- "use strict";var Dr=Object.create;var se=Object.defineProperty;var Mr=Object.getOwnPropertyDescriptor;var Ur=Object.getOwnPropertyNames;var $r=Object.getPrototypeOf,Hr=Object.prototype.hasOwnProperty;var jr=(e,t)=>{for(var n in t)se(e,n,{get:t[n],enumerable:!0})},Wt=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Ur(t))!Hr.call(e,r)&&r!==n&&se(e,r,{get:()=>t[r],enumerable:!(o=Mr(t,r))||o.enumerable});return e};var w=(e,t,n)=>(n=e!=null?Dr($r(e)):{},Wt(t||!e||!e.__esModule?se(n,"default",{value:e,enumerable:!0}):n,e)),Fr=e=>Wt(se({},"__esModule",{value:!0}),e);var qi={};jr(qi,{main:()=>br});module.exports=Fr(qi);var De=new Map;function m(e){let t=De.get(e.event)||[];t.push(e),t.sort((n,o)=>(n.priority??100)-(o.priority??100)),De.set(e.event,t)}function Kt(e){return De.get(e)||[]}var Gr={ultrawork:/\b(ultrawork|ulw)\b/i,ultrathink:/\b(ultrathink|think)\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},Br=["ultrawork","ultrathink","search","analyze"];function Vt(e){let t=e.replace(/```[\s\S]*?```/g,"");return t=t.replace(/~~~[\s\S]*?~~~/g,""),t=t.replace(/`[^`]+`/g,""),t}function qt(e,t){let n=[];for(let o of Br){let r=Gr[o],i=e.match(r);i&&i.index!==void 0&&n.push({type:o,keyword:i[0],position:i.index})}return n}var zt="auto-slash-command",ie="<auto-slash-command>",ae="</auto-slash-command>",Jt=/^\/([a-zA-Z][\w-]*)\s*(.*)/,Xt=new Set(["ascent","cancel-ascent","help","clear","history","exit","quit"]);var Yr=/```[\s\S]*?```/g;function Qt(e){return e.replace(Yr,"")}function Zt(e){let t=e.trim();if(!t.startsWith("/"))return null;let n=t.match(Jt);if(!n)return null;let[o,r,i]=n;return{command:r.toLowerCase(),args:i.trim(),raw:o}}function en(e){return Xt.has(e.toLowerCase())}function Me(e){let n=Qt(e).trim();if(!n.startsWith("/"))return null;let o=Zt(n);return!o||en(o.command)?null:o}function Ue(e){return e.filter(t=>t.type==="text").map(t=>t.text||"").join(" ")}var x=require("fs"),P=require("path"),on=require("os"),tn=(0,P.join)((0,on.homedir)(),".claude");function rn(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,i={};for(let s of o.split(`
4
- `)){let a=s.indexOf(":");if(a===-1)continue;let c=s.slice(0,a).trim(),u=s.slice(a+1).trim();(u.startsWith('"')&&u.endsWith('"')||u.startsWith("'")&&u.endsWith("'"))&&(u=u.slice(1,-1)),i[c]=u}return{data:i,body:r}}function nn(e,t){if(!(0,x.existsSync)(e))return[];let n;try{n=(0,x.readdirSync)(e,{withFileTypes:!0})}catch{return[]}let o=[];for(let r of n){if(!r.isFile()||!r.name.endsWith(".md"))continue;let i=(0,P.join)(e,r.name),s=(0,P.basename)(r.name,".md");try{let a=(0,x.readFileSync)(i,"utf-8"),{data:c,body:u}=rn(a),l={name:s,description:c.description||"",argumentHint:c["argument-hint"],model:c.model,agent:c.agent};o.push({name:s,path:i,metadata:l,content:u,scope:t})}catch{continue}}return o}function $e(){let e=(0,P.join)(tn,"commands"),t=(0,P.join)(process.cwd(),".claude","commands"),n=(0,P.join)(tn,"skills"),o=nn(e,"user"),r=nn(t,"project"),i=[];if((0,x.existsSync)(n))try{let s=(0,x.readdirSync)(n,{withFileTypes:!0});for(let a of s){if(!a.isDirectory())continue;let c=(0,P.join)(n,a.name,"SKILL.md");if((0,x.existsSync)(c))try{let u=(0,x.readFileSync)(c,"utf-8"),{data:l,body:d}=rn(u),p={name:l.name||a.name,description:l.description||"",argumentHint:l["argument-hint"],model:l.model,agent:l.agent};i.push({name:l.name||a.name,path:c,metadata:p,content:d,scope:"skill"})}catch{continue}}}catch{}return[...r,...o,...i]}function ce(e){return $e().find(n=>n.name.toLowerCase()===e.toLowerCase())??null}function Wr(e,t){return e.replace(/\$ARGUMENTS/g,t||"(no arguments provided)")}function Kr(e,t){let n=[];n.push(`<command-name>/${e.name}</command-name>
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 M=(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 D=require("fs"),U=require("path"),An=require("os"),Cn=(0,U.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,D.existsSync)(e))return[];let n;try{n=(0,D.readdirSync)(e,{withFileTypes:!0})}catch{return[]}let o=[];for(let r of n){if(!r.isFile()||!r.name.endsWith(".md"))continue;let s=(0,U.join)(e,r.name),i=(0,U.basename)(r.name,".md");try{let a=(0,D.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,U.join)(Cn,"commands"),t=(0,U.join)(process.cwd(),".claude","commands"),n=(0,U.join)(Cn,"skills"),o=_n(e,"user"),r=_n(t,"project"),s=[];if((0,D.existsSync)(n))try{let i=(0,D.readdirSync)(n,{withFileTypes:!0});for(let a of i){if(!a.isDirectory())continue;let c=(0,U.join)(n,a.name,"SKILL.md");if((0,D.existsSync)(c))try{let u=(0,D.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>
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=Wr(e.content||"",t);return n.push(o.trim()),t&&!e.content?.includes("$ARGUMENTS")&&(n.push(`
11
+ `);let o=Fs(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 He(e){let t=ce(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:Kr(t,e.args)}}catch(n){return{success:!1,error:`Failed to load command "/${e.command}": ${n instanceof Error?n.message:String(n)}`}}}function je(){return $e().map(t=>({name:t.name,description:t.metadata.description,scope:t.scope}))}var ue=new Set;function sn(){return{name:zt,processMessage:(e,t)=>{let n=Ue(t);if(n.includes(ie)||n.includes(ae))return{detected:!1};let o=Me(n);if(!o)return{detected:!1};let r=`${e.sessionId}:${e.messageId}:${o.command}`;if(ue.has(r))return{detected:!1};ue.add(r);let i=He(o);if(i.success&&i.replacementText){let a=`${ie}
17
- ${i.replacementText}
18
- ${ae}`;return{detected:!0,parsedCommand:o,injectedMessage:a}}let s=`${ie}
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}
17
+ ${s.replacementText}
18
+ ${ye}`;return{detected:!0,parsedCommand:o,injectedMessage:a}}let i=`${ke}
19
19
  [AUTO-SLASH-COMMAND ERROR]
20
- ${i.error}
20
+ ${s.error}
21
21
 
22
22
  Original input: ${o.raw}
23
- ${ae}`;return{detected:!0,parsedCommand:o,injectedMessage:s}},listCommands:()=>je(),findCommand:e=>ce(e),clearSession:e=>{let t=[];for(let n of ue)n.startsWith(`${e}:`)&&t.push(n);for(let n of t)ue.delete(n)}}}var Vr=[/\bultrathink\b/i,/\bthink\b/i],qr=["\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"],zr=qr.map(e=>new RegExp(e,"i")),Jr=[...Vr,...zr],Xr=/```[\s\S]*?```/g,Qr=/`[^`]+`/g;function Zr(e){return e.replace(Xr,"").replace(Qr,"")}function an(e){let t=Zr(e);return Jr.some(n=>n.test(t))}function cn(e){return e.filter(t=>t.type==="text").map(t=>t.text||"").join("")}function Fe(e){let t=e.indexOf("/");return t===-1?{prefix:"",base:e}:{prefix:e.slice(0,t+1),base:e.slice(t+1)}}function Ge(e){return e.replace(/\.(\d+)/g,"-$1")}var un={"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"},ln=new Set(Object.values(un)),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"}},es={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 pn(e){let t=Ge(e),{prefix:n,base:o}=Fe(t);if(ln.has(o)||o.endsWith("-high"))return null;let r=un[o];return r?n+r:null}function Be(e){let t=Ge(e),{base:n}=Fe(t);return ln.has(n)||n.endsWith("-high")}function ts(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 ns(e){return e in dn}function mn(e,t){let n=Ge(t),{base:o}=Fe(n);if(Be(n))return null;let r=ts(e,t);if(!ns(r))return null;let i=dn[r],s=es[r];if(!s)return null;let a=o.toLowerCase();return s.some(u=>a.includes(u.toLowerCase()))?i:null}var U=new Map;function os(e){U.delete(e)}function fn(){return{processChatParams:(e,t)=>{let n=cn(t.parts),o={requested:!1,modelSwitched:!1,thinkingConfigInjected:!1};if(!an(n))return U.set(e,o),o;o.requested=!0;let r=t.message.model;if(!r||(o.providerId=r.providerId,o.modelId=r.modelId,Be(r.modelId)))return U.set(e,o),o;let i=pn(r.modelId),s=mn(r.providerId,r.modelId);return i&&(t.message.model={providerId:r.providerId,modelId:i},o.modelSwitched=!0),s&&(Object.assign(t.message,s),o.thinkingConfigInjected=!0),U.set(e,o),o},onSessionDeleted:e=>{U.delete(e)},isRequested:e=>U.get(e)?.requested??!1,getState:e=>U.get(e),clear:os}}var h=require("fs"),Y=require("path"),Ye=require("os");function We(e){let t=e||process.cwd(),n=(0,Y.join)(t,".olympus");return(0,Y.join)(n,"ultrawork-state.json")}function Ke(){return(0,Y.join)((0,Ye.homedir)(),".claude","ultrawork-state.json")}function rs(e){let t=e||process.cwd(),n=(0,Y.join)(t,".olympus");(0,h.existsSync)(n)||(0,h.mkdirSync)(n,{recursive:!0})}function ss(){let e=(0,Y.join)((0,Ye.homedir)(),".claude");(0,h.existsSync)(e)||(0,h.mkdirSync)(e,{recursive:!0})}function z(e){let t=We(e);if((0,h.existsSync)(t))try{let o=(0,h.readFileSync)(t,"utf-8");return JSON.parse(o)}catch{}let n=Ke();if((0,h.existsSync)(n))try{let o=(0,h.readFileSync)(n,"utf-8");return JSON.parse(o)}catch{return null}return null}function gn(e,t){try{rs(t);let n=We(t);(0,h.writeFileSync)(n,JSON.stringify(e,null,2)),ss();let o=Ke();return(0,h.writeFileSync)(o,JSON.stringify(e,null,2)),!0}catch{return!1}}function hn(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 gn(o,n)}function Tn(e){let t=We(e);if((0,h.existsSync)(t))try{(0,h.unlinkSync)(t)}catch{}let n=Ke();if((0,h.existsSync)(n))try{return(0,h.unlinkSync)(n),!0}catch{return!1}return!0}function En(e){let t=z(e);return!t||!t.active?null:(t.reinforcement_count+=1,t.last_checked_at=new Date().toISOString(),gn(t,e)?t:null)}function Sn(e){return`<ultrawork-persistence>
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 H=new Map;function Qs(e){H.delete(e)}function Un(){return{processChatParams:(e,t)=>{let n=vn(t.parts),o={requested:!1,modelSwitched:!1,thinkingConfigInjected:!1};if(!wn(n))return H.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 H.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),H.set(e,o),o},onSessionDeleted:e=>{H.delete(e)},isRequested:e=>H.get(e)?.requested??!1,getState:e=>H.get(e),clear:Qs}}var h=require("fs"),z=require("path"),at=require("os");function ct(e){let t=e||process.cwd(),n=(0,z.join)(t,".olympus");return(0,z.join)(n,"ultrawork-state.json")}function ut(){return(0,z.join)((0,at.homedir)(),".claude","ultrawork-state.json")}function Zs(e){let t=e||process.cwd(),n=(0,z.join)(t,".olympus");(0,h.existsSync)(n)||(0,h.mkdirSync)(n,{recursive:!0})}function ei(){let e=(0,z.join)((0,at.homedir)(),".claude");(0,h.existsSync)(e)||(0,h.mkdirSync)(e,{recursive:!0})}function Y(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=Y(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>
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 kn=require("os"),E=require("path");function v(){return process.platform==="win32"}function is(){return(0,E.join)((0,kn.homedir)(),".claude")}function O(){return(0,E.join)(is(),"hooks")}var On=`<ultrawork-mode>
44
+ `}var Bn=require("os"),S=require("path");function L(){return process.platform==="win32"}function ti(){return(0,S.join)((0,Bn.homedir)(),".claude")}function y(){return(0,S.join)(ti(),"hooks")}var Yn=`<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
- `,yn=`<think-mode>
135
+ `,Wn=`<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
- `,Rn=`<search-mode>
151
+ `;var Kn=`<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
- `,In=`<analyze-mode>
161
+ `,Vn=`<analyze-mode>
162
162
  ANALYSIS MODE. Gather context before diving deep:
163
163
 
164
164
  CONTEXT GATHERING (parallel):
@@ -174,13 +174,37 @@ SYNTHESIZE findings before proceeding.
174
174
 
175
175
  ---
176
176
 
177
- `,Cn=`[SYSTEM REMINDER - TODO CONTINUATION]
177
+ `,qn=`[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 Oa={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"'}]}]}},ya={hooks:{UserPromptSubmit:[{hooks:[{type:"command",command:v()?`node "${(0,E.join)(O(),"olympus-hooks.cjs")}" --event=UserPromptSubmit`:`node "${(0,E.join)(O(),"olympus-hooks.cjs")}" --event=UserPromptSubmit`}]}],SessionStart:[{hooks:[{type:"command",command:v()?`node "${(0,E.join)(O(),"olympus-hooks.cjs")}" --event=SessionStart`:`node "${(0,E.join)(O(),"olympus-hooks.cjs")}" --event=SessionStart`}]}],Stop:[{hooks:[{type:"command",command:v()?`node "${(0,E.join)(O(),"olympus-hooks.cjs")}" --event=Stop`:`node "${(0,E.join)(O(),"olympus-hooks.cjs")}" --event=Stop`}]}],PreToolUse:[{hooks:[{type:"command",command:v()?`node "${(0,E.join)(O(),"olympus-hooks.cjs")}" --event=PreToolUse`:`node "${(0,E.join)(O(),"olympus-hooks.cjs")}" --event=PreToolUse`}]}],PostToolUse:[{hooks:[{type:"command",command:v()?`node "${(0,E.join)(O(),"olympus-hooks.cjs")}" --event=PostToolUse`:`node "${(0,E.join)(O(),"olympus-hooks.cjs")}" --event=PostToolUse`}]}],Notification:[{hooks:[{type:"command",command:v()?`node "${(0,E.join)(O(),"olympus-hooks.cjs")}" --event=Notification`:`node "${(0,E.join)(O(),"olympus-hooks.cjs")}" --event=Notification`}]}]}};function as(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 An(){m({name:"keywordDetector",event:"UserPromptSubmit",priority:10,handler:e=>{let t=as(e);if(!t)return{continue:!0};let n=Vt(t),o=qt(n);if(o.length===0)return{continue:!0};let r=o.some(c=>c.type==="ultrawork"),i=o.some(c=>c.type==="ultrathink"),s=o.some(c=>c.type==="search"),a=o.some(c=>c.type==="analyze");return r?(hn(t,e.sessionId,e.directory||process.cwd()),{continue:!0,message:On}):i?{continue:!0,message:yn}:s?{continue:!0,message:Rn}:a?{continue:!0,message:In}:{continue:!0}}}),m({name:"autoSlashCommand",event:"UserPromptSubmit",priority:20,handler:e=>{if(!e.parts)return{continue:!0};let n=sn().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=fn(),n=e.sessionId||"default",o=t.processChatParams(n,{parts:e.parts,message:e.message});return o.requested&&o.modelSwitched?{continue:!0,message:"[Think Mode Activated] Switched to high-reasoning model variant."}:{continue:!0}}})}var F=require("fs"),$=require("path"),_n=require("os");function cs(e,t){let n=(0,$.join)((0,_n.homedir)(),".claude"),o=[];e&&(o.push((0,$.join)(n,"sessions",e,"todos.json")),o.push((0,$.join)(n,"todos",`${e}.json`))),t&&(o.push((0,$.join)(t,".olympus","todos.json")),o.push((0,$.join)(t,".claude","todos.json")));let r=(0,$.join)(n,"todos");if((0,F.existsSync)(r))try{let i=(0,F.readdirSync)(r);for(let s of i)s.endsWith(".json")&&o.push((0,$.join)(r,s))}catch{}return o}function us(e){try{let t=(0,F.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 ls(e){return e.status!=="completed"&&e.status!=="cancelled"}async function J(e,t){let n=cs(e,t),o=new Set,r=[],i=[];for(let s of n){if(!(0,F.existsSync)(s))continue;let a=us(s);for(let c of a){let u=`${c.content}:${c.status}`;o.has(u)||(o.add(u),r.push(c),ls(c)&&i.push(c))}}return{count:i.length,todos:i,total:r.length}}function Nn(e){let t=e.todos.find(n=>n.status==="in_progress");return t||(e.todos.find(n=>n.status==="pending")??null)}function xn(){m({name:"sessionStart",event:"SessionStart",priority:10,handler:async e=>{let t=e.sessionId,n=e.directory||process.cwd(),o=[],r=z(n);r?.active&&o.push(`<session-restore>
183
+ - Do not stop until all tasks are done`;var vc={hooks:{UserPromptSubmit:[{hooks:[{type:"command",command:L()?'node "%USERPROFILE%\\.claude\\hooks\\keyword-detector.mjs"':'node "$HOME/.claude/hooks/keyword-detector.mjs"'}]}],SessionStart:[{hooks:[{type:"command",command:L()?'node "%USERPROFILE%\\.claude\\hooks\\session-start.mjs"':'node "$HOME/.claude/hooks/session-start.mjs"'}]}],Stop:[{hooks:[{type:"command",command:L()?'node "%USERPROFILE%\\.claude\\hooks\\persistent-mode.mjs"':'node "$HOME/.claude/hooks/persistent-mode.mjs"'}]}]}},Pc={hooks:{UserPromptSubmit:[{hooks:[{type:"command",command:L()?`node "${(0,S.join)(y(),"olympus-hooks.cjs")}" --event=UserPromptSubmit`:`node "${(0,S.join)(y(),"olympus-hooks.cjs")}" --event=UserPromptSubmit`}]}],SessionStart:[{hooks:[{type:"command",command:L()?`node "${(0,S.join)(y(),"olympus-hooks.cjs")}" --event=SessionStart`:`node "${(0,S.join)(y(),"olympus-hooks.cjs")}" --event=SessionStart`}]}],Stop:[{hooks:[{type:"command",command:L()?`node "${(0,S.join)(y(),"olympus-hooks.cjs")}" --event=Stop`:`node "${(0,S.join)(y(),"olympus-hooks.cjs")}" --event=Stop`}]}],PreToolUse:[{hooks:[{type:"command",command:L()?`node "${(0,S.join)(y(),"olympus-hooks.cjs")}" --event=PreToolUse`:`node "${(0,S.join)(y(),"olympus-hooks.cjs")}" --event=PreToolUse`}]}],PostToolUse:[{hooks:[{type:"command",command:L()?`node "${(0,S.join)(y(),"olympus-hooks.cjs")}" --event=PostToolUse`:`node "${(0,S.join)(y(),"olympus-hooks.cjs")}" --event=PostToolUse`}]}],Notification:[{hooks:[{type:"command",command:L()?`node "${(0,S.join)(y(),"olympus-hooks.cjs")}" --event=Notification`:`node "${(0,S.join)(y(),"olympus-hooks.cjs")}" --event=Notification`}]}],MessagesTransform:[{hooks:[{type:"command",command:L()?`node "${(0,S.join)(y(),"olympus-hooks.cjs")}" --event=MessagesTransform`:`node "${(0,S.join)(y(),"olympus-hooks.cjs")}" --event=MessagesTransform`}]}]}};var Zn=require("path");var Jn=require("os"),W=require("path"),k=require("fs");function K(){return(0,W.join)((0,Jn.homedir)(),".claude","olympus","learning")}function ce(e){return(0,W.join)(e,".olympus","learning")}function zn(e){let t=K();if((0,k.existsSync)(t)||(0,k.mkdirSync)(t,{recursive:!0}),e){let n=ce(e);(0,k.existsSync)(n)||(0,k.mkdirSync)(n,{recursive:!0})}}function X(e){zn();let t=(0,W.join)(K(),"feedback-log.jsonl");(0,k.appendFileSync)(t,JSON.stringify(e)+`
184
+ `,"utf-8")}function Q(e,t){if(!(0,k.existsSync)(e))return t;try{return JSON.parse((0,k.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,W.dirname)(e);n&&!(0,k.existsSync)(n)&&(0,k.mkdirSync)(n,{recursive:!0}),(0,k.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 V=require("fs"),G=require("path"),lo=require("os");function ii(e,t){let n=(0,G.join)((0,lo.homedir)(),".claude"),o=[];e&&(o.push((0,G.join)(n,"sessions",e,"todos.json")),o.push((0,G.join)(n,"todos",`${e}.json`))),t&&(o.push((0,G.join)(t,".olympus","todos.json")),o.push((0,G.join)(t,".claude","todos.json")));let r=(0,G.join)(n,"todos");if((0,V.existsSync)(r))try{let s=(0,V.readdirSync)(r);for(let i of s)i.endsWith(".json")&&o.push((0,G.join)(r,i))}catch{}return o}function ai(e){try{let t=(0,V.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,V.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)(K(),"user-preferences.json"),null),n=Q((0,Ce.join)(ce(e),"patterns.json"),null),o=Q((0,Ce.join)(K(),"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>
185
+
186
+ ${r.join(`
187
+
188
+ `)}
189
+
190
+ </learned-context>
191
+
192
+ ---
193
+
194
+ `;return i.length>mo*4?i.substring(0,mo*4)+`
195
+ ...</learned-context>
196
+
197
+ ---
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"),q=require("fs");function fi(e){let t=(0,_e.join)(K(),"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,q.existsSync)(e))return[];try{return(0,q.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?`
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=Y(n);r?.active&&o.push(`<session-restore>
184
208
 
185
209
  [ULTRAWORK MODE RESTORED]
186
210
 
@@ -193,11 +217,11 @@ Continue working in ultrawork mode until all tasks are complete.
193
217
 
194
218
  ---
195
219
 
196
- `);let i=await J(t,n);return i.count>0&&o.push(`<session-restore>
220
+ `);let s=await ue(t,n);return s.count>0&&o.push(`<session-restore>
197
221
 
198
222
  [PENDING TASKS DETECTED]
199
223
 
200
- You have ${i.count} incomplete tasks from a previous session.
224
+ You have ${s.count} incomplete tasks from a previous session.
201
225
  Please continue working on these tasks.
202
226
 
203
227
  </session-restore>
@@ -205,7 +229,7 @@ Please continue working on these tasks.
205
229
  ---
206
230
 
207
231
  `),o.length>0?{continue:!0,message:o.join(`
208
- `)}:{continue:!0}}})}var W=require("fs"),b=require("path"),Qe=require("os");var S=require("fs"),H=require("path"),wn=require("os");function Ve(e){let t=(0,H.join)(e,".olympus");return(0,H.join)(t,"ascent-state.json")}function ds(e){let t=(0,H.join)(e,".olympus");(0,S.existsSync)(t)||(0,S.mkdirSync)(t,{recursive:!0})}function qe(e){let t=Ve(e);if(!(0,S.existsSync)(t))return null;try{let n=(0,S.readFileSync)(t,"utf-8");return JSON.parse(n)}catch{return null}}function ps(e,t){try{ds(e);let n=Ve(e);return(0,S.writeFileSync)(n,JSON.stringify(t,null,2)),!0}catch{return!1}}function le(e){let t=Ve(e);if(!(0,S.existsSync)(t))return!0;try{return(0,S.unlinkSync)(t),!0}catch{return!1}}function Pn(e){let t=qe(e);return!t||!t.active?null:(t.iteration+=1,ps(e,t)?t:null)}function vn(e,t){let n=(0,H.join)((0,wn.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,S.existsSync)(r))try{let i=(0,S.readFileSync)(r,"utf-8");if(new RegExp(`<promise>\\s*${ms(t)}\\s*</promise>`,"is").test(i))return!0}catch{continue}return!1}function ms(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var y=require("fs"),ze=require("path"),fs=3;function Je(e){return(0,ze.join)(e,".olympus","ascent-verification.json")}function Q(e){let t=Je(e);if(!(0,y.existsSync)(t))return null;try{return JSON.parse((0,y.readFileSync)(t,"utf-8"))}catch{return null}}function bn(e,t){let n=Je(e),o=(0,ze.join)(e,".olympus");if(!(0,y.existsSync)(o))try{(0,y.mkdirSync)(o,{recursive:!0})}catch{return!1}try{return(0,y.writeFileSync)(n,JSON.stringify(t,null,2)),!0}catch{return!1}}function X(e){let t=Je(e);if((0,y.existsSync)(t))try{return(0,y.unlinkSync)(t),!0}catch{return!1}return!0}function Ln(e,t,n){let o={pending:!0,completion_claim:t,verification_attempts:0,max_verification_attempts:fs,requested_at:new Date().toISOString(),original_task:n};return bn(e,o),o}function Dn(e,t,n){let o=Q(e);return o?(o.verification_attempts+=1,o.oracle_approved=t,o.oracle_feedback=n,t?(X(e),{...o,pending:!1}):o.verification_attempts>=o.max_verification_attempts?(X(e),{...o,pending:!1}):(bn(e,o),o)):null}function Xe(e){return`<ascent-verification>
232
+ `)}:{continue:!0}}})}var oe=require("fs"),$=require("path"),St=require("os");var O=require("fs"),B=require("path"),So=require("os");function dt(e){let t=(0,B.join)(e,".olympus");return(0,B.join)(t,"ascent-state.json")}function gi(e){let t=(0,B.join)(e,".olympus");(0,O.existsSync)(t)||(0,O.mkdirSync)(t,{recursive:!0})}function le(e){let t=dt(e);if(!(0,O.existsSync)(t))return null;try{let n=(0,O.readFileSync)(t,"utf-8");return JSON.parse(n)}catch{return null}}function hi(e,t){try{gi(e);let n=dt(e);return(0,O.writeFileSync)(n,JSON.stringify(t,null,2)),!0}catch{return!1}}function Ae(e){let t=dt(e);if(!(0,O.existsSync)(t))return!0;try{return(0,O.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,B.join)((0,So.homedir)(),".claude"),o=[(0,B.join)(n,"sessions",e,"transcript.md"),(0,B.join)(n,"sessions",e,"messages.json"),(0,B.join)(n,"transcripts",`${e}.md`)];for(let r of o)if((0,O.existsSync)(r))try{let s=(0,O.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 I=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,I.existsSync)(t))return null;try{return JSON.parse((0,I.readFileSync)(t,"utf-8"))}catch{return null}}function Oo(e,t){let n=mt(e),o=(0,pt.join)(e,".olympus");if(!(0,I.existsSync)(o))try{(0,I.mkdirSync)(o,{recursive:!0})}catch{return!1}try{return(0,I.writeFileSync)(n,JSON.stringify(t,null,2)),!0}catch{return!1}}function de(e){let t=mt(e);if((0,I.existsSync)(t))try{return(0,I.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>
209
233
 
210
234
  [ORACLE VERIFICATION REQUIRED - Attempt ${e.verification_attempts+1}/${e.max_verification_attempts}]
211
235
 
@@ -245,7 +269,7 @@ DO NOT output the completion promise again until Oracle approves.
245
269
 
246
270
  ---
247
271
 
248
- `}function Mn(e){return`<ascent-continuation-after-rejection>
272
+ `}function Co(e){return`<ascent-continuation-after-rejection>
249
273
 
250
274
  [ORACLE REJECTED - Continue Working]
251
275
 
@@ -270,9 +294,31 @@ Continue working now.
270
294
 
271
295
  ---
272
296
 
273
- `}function Un(e){return/<oracle-approved>.*?VERIFIED_COMPLETE.*?<\/oracle-approved>/is.test(e)}function $n(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:""}}function gs(e){let t=(0,b.join)((0,Qe.homedir)(),".claude"),n=[(0,b.join)(t,"sessions",e,"transcript.md"),(0,b.join)(t,"sessions",e,"messages.json"),(0,b.join)(t,"transcripts",`${e}.md`)];for(let o of n)if((0,W.existsSync)(o))try{let r=(0,W.readFileSync)(o,"utf-8");if(Un(r))return!0}catch{continue}return!1}function hs(e){let t=(0,b.join)((0,Qe.homedir)(),".claude"),n=[(0,b.join)(t,"sessions",e,"transcript.md"),(0,b.join)(t,"sessions",e,"messages.json"),(0,b.join)(t,"transcripts",`${e}.md`)];for(let o of n)if((0,W.existsSync)(o))try{let r=(0,W.readFileSync)(o,"utf-8"),i=$n(r);if(i.rejected)return i}catch{continue}return{rejected:!1,feedback:""}}async function Ts(e,t){let n=t||process.cwd(),o=qe(n);if(!o||!o.active||o.session_id&&e&&o.session_id!==e)return null;let r=Q(n);if(r?.pending){if(e){if(gs(e))return X(n),le(n),{shouldBlock:!1,message:`[ASCENT LOOP VERIFIED COMPLETE] Oracle verified task completion after ${o.iteration} iteration(s). Excellent work!`,mode:"none"};let u=hs(e);if(u.rejected){Dn(n,!1,u.feedback);let l=Q(n);if(l)return{shouldBlock:!0,message:Mn(l),mode:"ascent",metadata:{iteration:o.iteration,maxIterations:o.max_iterations}}}}return{shouldBlock:!0,message:Xe(r),mode:"ascent",metadata:{iteration:o.iteration,maxIterations:o.max_iterations}}}if(vn(e||"",o.completion_promise)){Ln(n,o.completion_promise,o.prompt);let c=Q(n);return c?{shouldBlock:!0,message:Xe(c),mode:"ascent",metadata:{iteration:o.iteration,maxIterations:o.max_iterations}}:(le(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 le(n),X(n),{shouldBlock:!1,message:`[ASCENT LOOP STOPPED] Max iterations (${o.max_iterations}) reached without completion promise. Consider reviewing the task requirements.`,mode:"none"};let s=Pn(n);return s?{shouldBlock:!0,message:`<ascent-continuation>
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?`
298
+
299
+ **ORACLE VERIFICATION REQUIRED**: Before declaring complete, you MUST get Oracle approval.`:"";return`<olympus-persistence>
300
+
301
+ [OLYMPUS MODE STILL ACTIVE - Reinforcement #${e.reinforcement_count+1}]
274
302
 
275
- [ASCENT LOOP - ITERATION ${s.iteration}/${s.max_iterations}]
303
+ Your orchestration session is NOT complete. Incomplete todos remain.${t}
304
+
305
+ REMEMBER THE CONDUCTOR RULES:
306
+ - **DELEGATE**: Route specialized work to the right agents
307
+ - **PARALLEL**: Fire independent calls simultaneously
308
+ - **TODO**: Track EVERY step. Mark complete IMMEDIATELY
309
+ - **VERIFY**: Oracle must approve before completion
310
+
311
+ Continue working on the next pending task. DO NOT STOP until all tasks are complete.
312
+
313
+ Original task: ${e.original_prompt}
314
+
315
+ </olympus-persistence>
316
+
317
+ ---
318
+
319
+ `}function Po(e){let t=(0,$.join)((0,St.homedir)(),".claude"),n=[(0,$.join)(t,"sessions",e,"transcript.md"),(0,$.join)(t,"sessions",e,"messages.json"),(0,$.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,$.join)((0,St.homedir)(),".claude"),n=[(0,$.join)(t,"sessions",e,"transcript.md"),(0,$.join)(t,"sessions",e,"messages.json"),(0,$.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>
320
+
321
+ [ASCENT LOOP - ITERATION ${i.iteration}/${i.max_iterations}]
276
322
 
277
323
  Your previous attempt did not output the completion promise. The work is NOT done yet.
278
324
 
@@ -280,20 +326,43 @@ CRITICAL INSTRUCTIONS:
280
326
  1. Review your progress and the original task
281
327
  2. Check your todo list - are ALL items marked complete?
282
328
  3. Continue from where you left off
283
- 4. When FULLY complete, output: <promise>${s.completion_promise}</promise>
329
+ 4. When FULLY complete, output: <promise>${i.completion_promise}</promise>
284
330
  5. Do NOT stop until the task is truly done
285
331
 
286
- ${s.prompt?`Original task: ${s.prompt}`:""}
332
+ ${i.prompt?`Original task: ${i.prompt}`:""}
287
333
 
288
334
  </ascent-continuation>
289
335
 
290
336
  ---
291
337
 
292
- `,mode:"ascent",metadata:{iteration:s.iteration,maxIterations:s.max_iterations}}:null}async function Es(e,t,n){let o=z(t);if(!o||!o.active||o.session_id&&e&&o.session_id!==e)return null;if(!n)return Tn(t),{shouldBlock:!1,message:"[ULTRAWORK COMPLETE] All tasks finished. Ultrawork mode deactivated. Well done!",mode:"none"};let r=En(t);return r?{shouldBlock:!0,message:Sn(r),mode:"ultrawork",metadata:{reinforcementCount:r.reinforcement_count}}:null}async function Ss(e,t){let n=await J(e,t);if(n.count===0)return null;let o=Nn(n),r=o?`
338
+ `,mode:"ascent",metadata:{iteration:i.iteration,maxIterations:i.max_iterations}}:null}async function Ri(e,t,n){let o=Y(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>
339
+
340
+ [OLYMPUS MODE - ORACLE VERIFICATION REQUIRED]
341
+
342
+ All todos appear complete, but Oracle verification is MANDATORY before completion.
343
+
344
+ You MUST spawn Oracle to verify your work:
345
+
346
+ \`\`\`
347
+ Task(subagent_type="oracle", prompt="VERIFY COMPLETION:
348
+ Original task: ${o.original_prompt}
349
+ What I implemented: [list all changes]
350
+ Tests run: [test results]
351
+ Please verify this is truly complete and production-ready.
352
+ Return: APPROVED or REJECTED with reasons.")
353
+ \`\`\`
354
+
355
+ DO NOT stop until Oracle has approved.
356
+
357
+ </olympus-verification-required>
358
+
359
+ ---
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?`
293
362
 
294
363
  Next task: "${o.content}" (${o.status})`:"";return{shouldBlock:!0,message:`<todo-continuation>
295
364
 
296
- ${Cn}
365
+ ${qn}
297
366
 
298
367
  [Status: ${n.count} of ${n.total} tasks remaining]${r}
299
368
 
@@ -301,20 +370,20 @@ ${Cn}
301
370
 
302
371
  ---
303
372
 
304
- `,mode:"todo-continuation",metadata:{todoCount:n.count}}}async function Hn(e,t){let n=t||process.cwd(),r=(await J(e,n)).count>0,i=await Ts(e,n);if(i?.shouldBlock)return i;let s=await Es(e,n,r);if(s?.shouldBlock)return s;if(r){let a=await Ss(e,n);if(a?.shouldBlock)return a}return{shouldBlock:!1,message:"",mode:"none"}}function jn(e){return e.shouldBlock?{continue:!1,reason:e.message}:{continue:!0,message:e.message||void 0}}function Fn(){m({name:"persistentMode",event:"Stop",priority:10,handler:async e=>{let t=e.sessionId,n=e.directory||process.cwd(),o=await Hn(t,n),r=jn(o);return{continue:r.continue,message:r.message,reason:r.reason}}})}var ct=require("fs"),ut=require("os"),ee=require("path");var _=require("fs"),k=require("path");var Ze=require("path"),Gn=require("os"),ks=(0,Ze.join)((0,Gn.homedir)(),".olympus"),de=(0,Ze.join)(ks,"rules-injector"),Bn=[".git","pyproject.toml","package.json","Cargo.toml","go.mod",".venv"],Yn=[[".github","instructions"],[".cursor","rules"],[".claude","rules"]],Wn=[".github/copilot-instructions.md"],Kn=/\.instructions\.md$/,Vn=".claude/rules",qn=[".md",".mdc"],et=["read","write","edit","multiedit"];function Os(e){return e.includes(".github/instructions")||e.endsWith(".github/instructions")}function ys(e,t){return Os(t)?Kn.test(e):qn.some(n=>e.endsWith(n))}function ot(e){let t;try{t=(0,_.statSync)(e).isDirectory()?e:(0,k.dirname)(e)}catch{t=(0,k.dirname)(e)}for(;;){for(let o of Bn){let r=(0,k.join)(t,o);if((0,_.existsSync)(r))return t}let n=(0,k.dirname)(t);if(n===t)return null;t=n}}function nt(e,t){if((0,_.existsSync)(e))try{let n=(0,_.readdirSync)(e,{withFileTypes:!0});for(let o of n){let r=(0,k.join)(e,o.name);o.isDirectory()?nt(r,t):o.isFile()&&ys(o.name,e)&&t.push(r)}}catch{}}function tt(e){try{return(0,_.realpathSync)(e)}catch{return e}}function rt(e,t,n){let o=[],r=new Set,i=(0,k.dirname)(n),s=0;for(;;){for(let[l,d]of Yn){let p=(0,k.join)(i,l,d),f=[];nt(p,f);for(let g of f){let T=tt(g);r.has(T)||(r.add(T),o.push({path:g,realPath:T,isGlobal:!1,distance:s}))}}if(e&&i===e)break;let u=(0,k.dirname)(i);if(u===i)break;i=u,s++}if(e)for(let u of Wn){let l=(0,k.join)(e,u);if((0,_.existsSync)(l))try{if((0,_.statSync)(l).isFile()){let p=tt(l);r.has(p)||(r.add(p),o.push({path:l,realPath:p,isGlobal:!1,distance:0,isSingleFile:!0}))}}catch{}}let a=(0,k.join)(t,Vn),c=[];nt(a,c);for(let u of c){let l=tt(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 zn=require("crypto"),Jn=require("path");function Rs(e,t){let n=e.replace(/\./g,"\\.").replace(/\*\*/g,"<<<GLOBSTAR>>>").replace(/\*/g,"[^/]*").replace(/<<<GLOBSTAR>>>/g,".*").replace(/\?/g,".");return new RegExp(`^${n}$`).test(t)}function st(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 s=(n?(0,Jn.relative)(n,t):t).replace(/\\/g,"/");for(let a of r)if(Rs(a,s))return{applies:!0,reason:`glob: ${a}`};return{applies:!1}}function Xn(e,t){return t.has(e)}function Qn(e){return(0,zn.createHash)("sha256").update(e).digest("hex").slice(0,16)}function Zn(e,t){return t.has(e)}function it(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:Is(o),body:r}}catch{return{metadata:{},body:e}}}function Is(e){let t=e.split(`
305
- `),n={},o=0;for(;o<t.length;){let r=t[o],i=r.indexOf(":");if(i===-1){o++;continue}let s=r.slice(0,i).trim(),a=r.slice(i+1).trim();if(s==="description")n.description=Z(a);else if(s==="alwaysApply")n.alwaysApply=a==="true";else if(s==="globs"||s==="paths"||s==="applyTo"){let{value:c,consumed:u}=Cs(a,t,o);n.globs=_s(n.globs,c),o+=u;continue}o++}return n}function Z(e){return e?e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'")?e.slice(1,-1):e:""}function Cs(e,t,n){if(e.startsWith("["))return{value:As(e),consumed:1};if(!e||e===""){let r=[],i=1;for(let s=n+1;s<t.length;s++){let a=t[s],c=a.match(/^\s+-\s*(.*)$/);if(c){let u=Z(c[1].trim());u&&r.push(u),i++}else if(a.trim()==="")i++;else break}if(r.length>0)return{value:r,consumed:i}}let o=Z(e);return o.includes(",")?{value:o.split(",").map(i=>i.trim()).filter(i=>i.length>0),consumed:1}:{value:o,consumed:1}}function As(e){let t=e.slice(1,e.lastIndexOf("]")).trim();if(!t)return[];let n=[],o="",r=!1,i="";for(let a=0;a<t.length;a++){let c=t[a];if(!r&&(c==='"'||c==="'"))r=!0,i=c;else if(r&&c===i)r=!1,i="";else if(!r&&c===","){let u=o.trim();u&&n.push(Z(u)),o=""}else o+=c}let s=o.trim();return s&&n.push(Z(s)),n}function _s(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"),eo=require("path");function at(e){return(0,eo.join)(de,`${e}.json`)}function to(e){let t=at(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 no(e,t){(0,R.existsSync)(de)||(0,R.mkdirSync)(de,{recursive:!0});let n={sessionId:e,injectedHashes:[...t.contentHashes],injectedRealPaths:[...t.realPaths],updatedAt:Date.now()};(0,R.writeFileSync)(at(e),JSON.stringify(n,null,2))}function oo(e){let t=at(e);(0,R.existsSync)(t)&&(0,R.unlinkSync)(t)}function ro(e){let t=new Map;function n(s){return t.has(s)||t.set(s,to(s)),t.get(s)}function o(s){return s?s.startsWith("/")?s:(0,ee.resolve)(e,s):null}function r(s,a){let c=o(s);if(!c)return[];let u=ot(c),l=n(a),d=(0,ut.homedir)(),p=rt(u,d,c),f=[];for(let g of p)if(!Xn(g.realPath,l.realPaths))try{let T=(0,ct.readFileSync)(g.path,"utf-8"),{metadata:j,body:B}=it(T),M;if(g.isSingleFile)M="copilot-instructions (always apply)";else{let Yt=st(j,c,u);if(!Yt.applies)continue;M=Yt.reason??"matched"}let Bt=Qn(B);if(Zn(Bt,l.contentHashes))continue;let Lr=u?(0,ee.relative)(u,g.path):g.path;f.push({relativePath:Lr,matchReason:M,content:B,distance:g.distance}),l.realPaths.add(g.realPath),l.contentHashes.add(Bt)}catch{}return f.length>0&&(f.sort((g,T)=>g.distance-T.distance),no(a,l)),f}function i(s){if(s.length===0)return"";let a="";for(let c of s)a+=`
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 v=require("fs"),R=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,v.statSync)(e).isDirectory()?e:(0,R.dirname)(e)}catch{t=(0,R.dirname)(e)}for(;;){for(let o of Fo){let r=(0,R.join)(t,o);if((0,v.existsSync)(r))return t}let n=(0,R.dirname)(t);if(n===t)return null;t=n}}function It(e,t){if((0,v.existsSync)(e))try{let n=(0,v.readdirSync)(e,{withFileTypes:!0});for(let o of n){let r=(0,R.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,v.realpathSync)(e)}catch{return e}}function _t(e,t,n){let o=[],r=new Set,s=(0,R.dirname)(n),i=0;for(;;){for(let[l,d]of Ho){let p=(0,R.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,R.dirname)(s);if(u===s)break;s=u,i++}if(e)for(let u of Go){let l=(0,R.join)(e,u);if((0,v.existsSync)(l))try{if((0,v.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,R.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 C=require("fs"),Xo=require("path");function xt(e){return(0,Xo.join)(Ne,`${e}.json`)}function Qo(e){let t=xt(e);if(!(0,C.existsSync)(t))return{contentHashes:new Set,realPaths:new Set};try{let n=(0,C.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,C.existsSync)(Ne)||(0,C.mkdirSync)(Ne,{recursive:!0});let n={sessionId:e,injectedHashes:[...t.contentHashes],injectedRealPaths:[...t.realPaths],updatedAt:Date.now()};(0,C.writeFileSync)(xt(e),JSON.stringify(n,null,2))}function er(e){let t=xt(e);(0,C.existsSync)(t)&&(0,C.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:b,body:x}=Nt(E),w;if(g.isSingleFile)w="copilot-instructions (always apply)";else{let fn=At(b,c,u);if(!fn.applies)continue;w=fn.reason??"matched"}let mn=Jo(x);if(zo(mn,l.contentHashes))continue;let xs=u?(0,fe.relative)(u,g.path):g.path;f.push({relativePath:xs,matchReason:w,content:x,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+=`
306
375
 
307
376
  [Rule: ${c.relativePath}]
308
377
  [Match: ${c.matchReason}]
309
- ${c.content}`;return a}return{processToolExecution:(s,a,c)=>{if(!et.includes(s.toLowerCase()))return"";let u=r(a,c);return i(u)},getRulesForFile:s=>{let a=o(s);if(!a)return[];let c=ot(a),u=(0,ut.homedir)(),l=rt(c,u,a),d=[];for(let p of l)try{let f=(0,ct.readFileSync)(p.path,"utf-8"),{metadata:g,body:T}=it(f),j;if(p.isSingleFile)j="copilot-instructions (always apply)";else{let M=st(g,a,c);if(!M.applies)continue;j=M.reason??"matched"}let B=c?(0,ee.relative)(c,p.path):p.path;d.push({relativePath:B,matchReason:j,content:T,distance:p.distance})}catch{}return d.sort((p,f)=>p.distance-f.distance)},clearSession:s=>{t.delete(s),oo(s)},isTrackedTool:s=>et.includes(s.toLowerCase())}}var me=require("node:fs"),L=require("node:path");var I=require("node:fs"),ao=require("node:path");var lt=require("node:path"),so=require("node:os"),Ns=(0,lt.join)((0,so.homedir)(),".olympus"),pe=(0,lt.join)(Ns,"directory-readme"),io="README.md",dt=["read","write","edit","multiedit"];function pt(e){return(0,ao.join)(pe,`${e}.json`)}function co(e){let t=pt(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 uo(e,t){(0,I.existsSync)(pe)||(0,I.mkdirSync)(pe,{recursive:!0});let n={sessionID:e,injectedPaths:Array.from(t),updatedAt:Date.now()};(0,I.writeFileSync)(pt(e),JSON.stringify(n,null,2))}function lo(e){let t=pt(e);(0,I.existsSync)(t)&&(0,I.unlinkSync)(t)}var po=4,xs=5e3;function ws(e,t=xs){if(Math.ceil(e.length/po)<=t)return{result:e,truncated:!1};let o=t*po;return{result:e.slice(0,o),truncated:!0}}function mo(e){let t=new Map;function n(s){return t.has(s)||t.set(s,co(s)),t.get(s)}function o(s){return s?s.startsWith("/")?s:(0,L.resolve)(e,s):null}function r(s){let a=[],c=s;for(;;){let u=(0,L.join)(c,io);if((0,me.existsSync)(u)&&a.push(u),c===e)break;let l=(0,L.dirname)(c);if(l===c||!l.startsWith(e))break;c=l}return a.reverse()}function i(s,a){let c=o(s);if(!c)return"";let u=(0,L.dirname)(c),l=n(a),d=r(u),p="";for(let f of d){let g=(0,L.dirname)(f);if(!l.has(g))try{let T=(0,me.readFileSync)(f,"utf-8"),{result:j,truncated:B}=ws(T),M=B?`
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),b;if(p.isSingleFile)b="copilot-instructions (always apply)";else{let w=At(g,a,c);if(!w.applies)continue;b=w.reason??"matched"}let x=c?(0,fe.relative)(c,p.path):p.path;d.push({relativePath:x,matchReason:b,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"),j=require("node:path");var _=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,_.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 ir(e,t){(0,_.existsSync)(xe)||(0,_.mkdirSync)(xe,{recursive:!0});let n={sessionID:e,injectedPaths:Array.from(t),updatedAt:Date.now()};(0,_.writeFileSync)(Dt(e),JSON.stringify(n,null,2))}function ar(e){let t=Dt(e);(0,_.existsSync)(t)&&(0,_.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,j.resolve)(e,i):null}function r(i){let a=[],c=i;for(;;){let u=(0,j.join)(c,or);if((0,we.existsSync)(u)&&a.push(u),c===e)break;let l=(0,j.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,j.dirname)(c),l=n(a),d=r(u),p="";for(let f of d){let g=(0,j.dirname)(f);if(!l.has(g))try{let E=(0,we.readFileSync)(f,"utf-8"),{result:b,truncated:x}=Ui(E),w=x?`
310
379
 
311
380
  [Note: Content was truncated to save context window space. For full context, please read the file directly: ${f}]`:"";p+=`
312
381
 
313
382
  [Project README: ${f}]
314
- ${j}${M}`,l.add(g)}catch{}}return p&&uo(a,l),p}return{processToolExecution:(s,a,c)=>dt.includes(s.toLowerCase())?i(a,c):"",getReadmesForFile:s=>{let a=o(s);if(!a)return[];let c=(0,L.dirname)(a);return r(c)},clearSession:s=>{t.delete(s),lo(s)},isTrackedTool:s=>dt.includes(s.toLowerCase())}}var fo="non-interactive-env",go={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"},mt={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
383
+ ${b}${w}`,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,j.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
315
384
  option1
316
385
  option2
317
- EOF`,expectAlternative:"Use environment variables or config files instead of expect"}};var ho=mt.banned.filter(e=>!e.includes("(")).map(e=>new RegExp(`\\b${e}\\b`));function Ps(e){for(let t=0;t<ho.length;t++)if(ho[t].test(e))return mt.banned[t]}function vs(e){return e===""?"''":/[^a-zA-Z0-9_\-.:\/]/.test(e)?`'${e.replace(/'/g,"'\\''")}'`:e}function bs(e){return`export ${Object.entries(e).map(([n,o])=>`${n}=${vs(o)}`).join(" ")};`}var To={name:fo,async beforeCommand(e){let t=Ps(e),n=t?`Warning: '${t}' is an interactive command that may hang in non-interactive environments.`:void 0;return/\bgit\b/.test(e)?{command:`${bs(go)} ${e}`,warning:n}:{command:e,warning:n}}};var ft=require("child_process");var Eo="olympus-orchestrator",So=".olympus/",ko=["Write","Edit","write","edit"],Oo=`
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=`
318
387
 
319
388
  ---
320
389
 
@@ -340,7 +409,7 @@ You should NOT:
340
409
  3. Verify the subagent's work after completion
341
410
 
342
411
  ---
343
- `,yo=`
412
+ `,Tr=`
344
413
 
345
414
  ---
346
415
 
@@ -386,7 +455,7 @@ prompt="[specific single task with clear acceptance criteria]"
386
455
  DELEGATE. DON'T IMPLEMENT.
387
456
 
388
457
  ---
389
- `,Ro=`[SYSTEM REMINDER - QUEST CONTINUATION]
458
+ `,Er=`[SYSTEM REMINDER - QUEST CONTINUATION]
390
459
 
391
460
  You have an active work plan with incomplete tasks. Continue working.
392
461
 
@@ -395,7 +464,7 @@ RULES:
395
464
  - Mark each checkbox [x] in the plan file when done
396
465
  - Use the notepad at .olympus/notepads/{PLAN_NAME}/ to record learnings
397
466
  - Do not stop until all tasks are complete
398
- - If blocked, document the blocker and move to the next task`,Io=`**MANDATORY VERIFICATION - SUBAGENTS LIE**
467
+ - If blocked, document the blocker and move to the next task`,Sr=`**MANDATORY VERIFICATION - SUBAGENTS LIE**
399
468
 
400
469
  Subagents FREQUENTLY claim completion when:
401
470
  - Tests are actually FAILING
@@ -410,7 +479,7 @@ Subagents FREQUENTLY claim completion when:
410
479
  3. Check build/typecheck - Must succeed
411
480
 
412
481
  DO NOT TRUST THE AGENT'S SELF-REPORT.
413
- VERIFY EACH CLAIM WITH YOUR OWN TOOL CALLS.`,Co=`
482
+ VERIFY EACH CLAIM WITH YOUR OWN TOOL CALLS.`,kr=`
414
483
 
415
484
  [SYSTEM DIRECTIVE - SINGLE TASK ONLY]
416
485
 
@@ -433,37 +502,37 @@ If you were NOT given **exactly ONE atomic task**, you MUST:
433
502
  - Batch delegation = sloppy work = rework = wasted tokens
434
503
 
435
504
  **REFUSE multi-task requests. DEMAND single-task clarity.**
436
- `;var te=".olympus",fe="quest.json",Ls=`${te}/${fe}`,Ao="notepads",Ds=`${te}/${Ao}`;var N=require("fs"),ge=require("path");function _o(e){return(0,ge.join)(e,te,fe)}function he(e){let t=_o(e);if(!(0,N.existsSync)(t))return null;try{let n=(0,N.readFileSync)(t,"utf-8");return JSON.parse(n)}catch{return null}}function Te(e){if(!(0,N.existsSync)(e))return{total:0,completed:0,isComplete:!0};try{let t=(0,N.readFileSync)(e,"utf-8"),n=t.match(/^[-*]\s*\[\s*\]/gm)||[],o=t.match(/^[-*]\s*\[[xX]\]/gm)||[],r=n.length+o.length,i=o.length;return{total:r,completed:i,isComplete:r===0||i===r}}catch{return{total:0,completed:0,isComplete:!0}}}function No(e){return e?e.includes(So):!0}function xo(e){return ko.includes(e)}function $s(e){try{let t=(0,ft.execSync)("git diff --numstat HEAD",{cwd:e,encoding:"utf-8",timeout:5e3}).trim();if(!t)return[];let n=(0,ft.execSync)("git status --porcelain",{cwd:e,encoding:"utf-8",timeout:5e3}).trim(),o=new Map;for(let i of n.split(`
437
- `)){if(!i)continue;let s=i.substring(0,2).trim(),a=i.substring(3);s==="A"||s==="??"?o.set(a,"added"):s==="D"?o.set(a,"deleted"):o.set(a,"modified")}let r=[];for(let i of t.split(`
438
- `)){let s=i.split(" ");if(s.length<3)continue;let[a,c,u]=s,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 Hs(e){if(e.length===0)return`[FILE CHANGES SUMMARY]
505
+ `;var ge=".olympus",ve="quest.json",Hi=`${ge}/${ve}`,yr="notepads",Gi=`${ge}/${yr}`;var P=require("fs"),Pe=require("path");function Or(e){return(0,Pe.join)(e,ge,ve)}function be(e){let t=Or(e);if(!(0,P.existsSync)(t))return null;try{let n=(0,P.readFileSync)(t,"utf-8");return JSON.parse(n)}catch{return null}}function De(e){if(!(0,P.existsSync)(e))return{total:0,completed:0,isComplete:!0};try{let t=(0,P.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]
439
508
  No file changes detected.
440
- `;let t=e.filter(i=>i.status==="modified"),n=e.filter(i=>i.status==="added"),o=e.filter(i=>i.status==="deleted"),r=["[FILE CHANGES SUMMARY]"];if(t.length>0){r.push("Modified files:");for(let i of t)r.push(` ${i.path} (+${i.added}, -${i.removed})`);r.push("")}if(n.length>0){r.push("Created files:");for(let i of n)r.push(` ${i.path} (+${i.added})`);r.push("")}if(o.length>0){r.push("Deleted files:");for(let i of o)r.push(` ${i.path} (-${i.removed})`);r.push("")}return r.join(`
441
- `)}function wo(e){let t=Io;return e&&(t+=`
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+=`
442
511
 
443
512
  ---
444
513
 
445
514
  **If ANY verification fails, resume the subagent with the fix:**
446
- Task tool with resume="${e}", prompt="fix: [describe the specific failure]"`),t}function js(e,t,n){let o=t.total-t.completed;return`
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`
447
516
  ---
448
517
 
449
518
  **State:** Plan: ${e} | ${t.completed}/${t.total} done, ${o} left
450
519
 
451
520
  ---
452
521
 
453
- ${wo(n)}
522
+ ${Cr(n)}
454
523
 
455
- ALL pass? \u2192 commit atomic unit, mark \`[x]\`, next task.`}function Fs(e,t,n){return Ro.replace(/{PLAN_NAME}/g,e)+`
524
+ ALL pass? \u2192 commit atomic unit, mark \`[x]\`, next task.`}function qi(e,t,n){return Er.replace(/{PLAN_NAME}/g,e)+`
456
525
 
457
- [Status: ${n-t}/${n} completed, ${t} remaining]`}function Gs(e){let{toolName:t,toolInput:n}=e;if(!xo(t))return{continue:!0};let o=n?.filePath??n?.path??n?.file;return!o||No(o)?{continue:!0}:{continue:!0,message:yo.replace("$FILE_PATH",o)}}function Bs(e,t){let{toolName:n,toolInput:o,directory:r}=e,i=r||process.cwd();if(xo(n)){let s=o?.filePath??o?.path??o?.file;if(s&&!No(s))return{continue:!0,modifiedOutput:t+Oo}}if(n==="Task"||n==="task"){if(t.includes("Background task launched")||t.includes("Background task resumed"))return{continue:!0};let a=$s(i),c=Hs(a),u=he(i);if(u){let l=Te(u.active_plan);return{continue:!0,modifiedOutput:`
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:`
458
527
  ## SUBAGENT WORK COMPLETED
459
528
 
460
529
  ${c}
461
530
  <system-reminder>
462
- ${js(u.plan_name,l)}
531
+ ${Vi(u.plan_name,l)}
463
532
  </system-reminder>`}}return{continue:!0,modifiedOutput:t+`
464
533
  <system-reminder>
465
- ${wo()}
466
- </system-reminder>`}}return{continue:!0}}function Ys(e){let t=he(e);if(!t)return{shouldContinue:!1};let n=Te(t.active_plan);if(n.isComplete)return{shouldContinue:!1};let o=n.total-n.completed;return{shouldContinue:!0,message:Fs(t.plan_name,o,n.total)}}function Ee(e){return{name:Eo,preTool:(t,n)=>Gs({toolName:t,toolInput:n,directory:e}),postTool:(t,n,o)=>Bs({toolName:t,toolInput:n,directory:e},o),checkContinuation:()=>Ys(e),getSingleTaskDirective:()=>Co}}function Po(e){if(!e||typeof e!="object")return null;let t=e;return t.file_path||t.filePath||t.path||t.file}function vo(){m({name:"rulesInjector",event:"PreToolUse",priority:10,matcher:/^(read|edit|write|glob|grep)$/i,handler:e=>{let t=ro(e.directory||process.cwd()),n=Po(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=mo(e.directory||process.cwd()),n=Po(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{let n=await To.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=>Ee(e.directory||process.cwd()).preTool(e.toolName,e.toolInput)})}var Ws=["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"],Ks=`
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=`
467
536
  [EDIT ERROR - IMMEDIATE ACTION REQUIRED]
468
537
 
469
538
  You made an Edit mistake. STOP and do this NOW:
@@ -474,7 +543,7 @@ You made an Edit mistake. STOP and do this NOW:
474
543
  4. CONTINUE with corrected action based on the real file content
475
544
 
476
545
  DO NOT attempt another edit until you've read and verified the file state.
477
- `;function Vs(e){let t=e.toLowerCase();return Ws.some(n=>t.includes(n.toLowerCase()))}function bo(){return{afterToolExecute:(e,t)=>e.tool.toLowerCase()!=="edit"?t:Vs(t.output)?{...t,output:t.output+Ks}:t}}var Mo=w(require("fs"),1),ke=w(require("path"),1),Uo=require("os");var Se=new Set(["given","when","then","arrange","act","assert","when & then","when&then"]),gt=["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"],ht=`COMMENT/DOCSTRING DETECTED - IMMEDIATE ACTION REQUIRED
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=M(require("fs"),1),Ue=M(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
478
547
 
479
548
  Your recent changes contain comments or docstrings, which triggered this hook.
480
549
  You need to take immediate action. You must follow the conditions below.
@@ -512,13 +581,13 @@ MANDATORY REQUIREMENT: You must acknowledge this hook message and take one of th
512
581
  Review in the above priority order and take the corresponding action EVERY TIME this appears.
513
582
 
514
583
  Detected comments/docstrings:
515
- `,Tt={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},Et={".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 qs(e){return e.text.trim().startsWith("#!")&&e.lineNumber===1?{shouldSkip:!0,reason:"shebang"}:{shouldSkip:!1}}function zs(e){if(e.isDocstring)return{shouldSkip:!1};let t=e.text.toLowerCase().trim();for(let n of Se){if(t.startsWith(`#${n}`)||t.startsWith(`// ${n}`))return{shouldSkip:!0,reason:`BDD keyword: ${n}`};if(t.includes(n)&&t.split(/\s+/).some(r=>Se.has(r.replace(/[^a-z&]/g,""))))return{shouldSkip:!0,reason:"BDD keyword detected"}}return{shouldSkip:!1}}function Js(e){let t=e.text.toLowerCase().trim();for(let n of gt)if(t.includes(n.toLowerCase()))return{shouldSkip:!0,reason:`directive: ${n}`};return{shouldSkip:!1}}function Xs(e){return{shouldSkip:!1}}function Qs(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 Zs(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 ei=[qs,zs,Js,Qs,Zs,Xs];function St(e){return e.filter(t=>{for(let n of ei)if(n(t).shouldSkip)return!1;return!0})}var ti=process.env.COMMENT_CHECKER_DEBUG==="1",ni=ke.join((0,Uo.tmpdir)(),"comment-checker-debug.log");function G(...e){if(ti){let t=`[${new Date().toISOString()}] [comment-checker] ${e.map(n=>typeof n=="object"?JSON.stringify(n,null,2):String(n)).join(" ")}
516
- `;Mo.appendFileSync(ni,t)}}function oi(e){let t=ke.extname(e).toLowerCase();return Et[t]}function kt(e,t){let n=oi(t);if(!n)return G("unsupported language for:",t),[];let o=Tt[n];if(!o)return G("no pattern for language:",n),[];let r=[],i=e.split(`
517
- `);o.lastIndex=0;let s;for(;(s=o.exec(e))!==null;){let a=s.index,c=s[0],l=e.substring(0,a).split(`
518
- `).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 ri(e,t){return kt(e,t)}function Lo(e,t,n){let o=kt(e,t);if(n){let r=kt(n,t),i=new Set(r.map(s=>s.text));return o.filter(s=>!i.has(s.text))}return o}function si(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=ht;for(let[o,r]of t){n+=`
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 J(...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 J("unsupported language for:",t),[];let o=Ft[n];if(!o)return J("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+=`
519
588
  File: ${o}
520
- `;for(let i of r){let s=i.isDocstring?"docstring":i.commentType;n+=` Line ${i.lineNumber} (${s}): ${i.text.substring(0,100)}${i.text.length>100?"...":""}
521
- `}}return n}function ii(e,t,n,o,r){let i=[];if(t)i=ri(t,e);else if(o)i=Lo(o,e,n);else if(r&&r.length>0)for(let a of r){let c=Lo(a.new_string,e,a.old_string);i.push(...c)}let s=St(i);return G(`found ${i.length} comments, ${s.length} flagged after filtering`),s.length===0?{hasComments:!1,count:0,comments:[]}:{hasComments:!0,count:s.length,message:si(s),comments:s}}var ne=new Map,ai=6e4;function ci(){let e=Date.now();for(let[t,n]of ne)e-n.timestamp>ai&&ne.delete(t)}var Do=!1;function $o(e){return G("createCommentCheckerHook called",{config:e}),Do||(Do=!0,setInterval(ci,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,i=t.tool_input.old_string??t.tool_input.oldString,s=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 G("registering pendingCall:",{callId:c,filePath:o,tool:n}),ne.set(c,{filePath:o,content:r,oldString:i,newString:s,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[s,a]of ne)if(a.sessionId===t.session_id&&a.tool===n){o=a,r=s;break}if(!o){let s=t.tool_input.file_path??t.tool_input.filePath??t.tool_input.path;if(!s)return null;o={filePath:s,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&&ne.delete(r),t.tool_response){let s=t.tool_response.toLowerCase();if(s.includes("error:")||s.includes("failed to")||s.includes("could not")||s.startsWith("error"))return G("skipping due to tool failure in response"),null}let i=ii(o.filePath,o.content,o.oldString,o.newString,o.edits);return i.hasComments&&i.message?(G("detected comments, returning message"),e?.customPrompt||i.message):null}}}var Wo=w(require("fs"),1),Ko=w(require("path"),1),Vo=require("os");var jo=[/(\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],Fo=["prompt is too long","is too long","context_length_exceeded","max_tokens","token limit","context length","too many tokens","non-empty content"],ui=[/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],li=/messages\.(\d+)/;function di(e){return ui.some(t=>t.test(e))}function Ot(e){for(let t of jo){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 Ho(e){let t=e.match(li);if(t)return parseInt(t[1],10)}function K(e){if(di(e))return!1;let t=e.toLowerCase();return Fo.some(n=>t.includes(n.toLowerCase()))}function Oe(e){if(typeof e=="string"){if(e.toLowerCase().includes("non-empty content"))return{currentTokens:0,maxTokens:0,errorType:"non-empty content",messageIndex:Ho(e)};if(K(e)){let u=Ot(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,i=t.message,s=t.error,a=s?.error;if(typeof r=="string"&&n.push(r),typeof i=="string"&&n.push(i),typeof s?.message=="string"&&n.push(s.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);K(u)&&n.push(u)}catch{}let c=n.join(" ");if(!K(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||"",T=Ot(g);if(T)return{currentTokens:T.current,maxTokens:T.max,requestId:f.request_id,errorType:f.error?.type||"token_limit_exceeded"}}catch{}}let l=JSON.parse(r);if(typeof l.message=="string"&&K(l.message))return{currentTokens:0,maxTokens:0,errorType:"bedrock_input_too_long"}}catch{}for(let u of n){let l=Ot(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:Ho(c)}:K(c)?{currentTokens:0,maxTokens:0,errorType:"token_limit_exceeded_unknown"}:null}function yt(e){return K(e)}var Rt=`CONTEXT WINDOW LIMIT REACHED - IMMEDIATE ACTION REQUIRED
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 J(`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 J("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 J("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 J("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?(J("detected comments, returning message"),e?.customPrompt||s.message):null}}}var Fr=M(require("fs"),1),Hr=M(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
522
591
 
523
592
  The conversation has exceeded the model's context window limit. To continue working effectively, you must take one of these actions:
524
593
 
@@ -543,7 +612,7 @@ Current Status:
543
612
  - Context limit exceeded
544
613
  - Further API calls will fail until context is reduced
545
614
  - Action required before continuing
546
- `,It="Context window limit reached. Please use /compact to summarize the conversation or start a new session.",Ct=`API ERROR: Non-empty content validation failed.
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.
547
616
 
548
617
  This error typically occurs when:
549
618
  - A message has empty text content
@@ -554,7 +623,7 @@ Suggested actions:
554
623
  2. If the error persists, start a new session
555
624
 
556
625
  The system will attempt automatic recovery.
557
- `;var At=`CONTEXT RECOVERY FAILED
626
+ `;var Jt=`CONTEXT RECOVERY FAILED
558
627
 
559
628
  All automatic recovery attempts have been exhausted.
560
629
  Please start a new session to continue.
@@ -565,13 +634,13 @@ Before starting a new session:
565
634
  3. Document the current state of the task
566
635
 
567
636
  You can copy this conversation summary to continue in a new session.
568
- `;var _t={maxAttempts:2,initialDelayMs:2e3,backoffFactor:2,maxDelayMs:3e4};var pi=process.env.CONTEXT_LIMIT_RECOVERY_DEBUG==="1",mi=Ko.join((0,Vo.tmpdir)(),"context-limit-recovery-debug.log");function ye(...e){if(pi){let t=`[${new Date().toISOString()}] [context-limit-recovery] ${e.map(n=>typeof n=="object"?JSON.stringify(n,null,2):String(n)).join(" ")}
569
- `;Wo.appendFileSync(mi,t)}}var Re=new Map,qo=3e5;function Go(e){let t=Re.get(e),n=Date.now();return t&&n-t.lastErrorTime>qo&&(t=void 0),t||(t={retryState:{attempt:0,lastAttemptTime:0},truncateState:{truncateAttempt:0},lastErrorTime:n,errorCount:0},Re.set(e,t)),t}function fi(){let e=Date.now();for(let[t,n]of Re)e-n.lastErrorTime>qo&&Re.delete(t)}var Bo=!1;function zo(e){return ye("createContextLimitRecoveryHook called",{config:e}),Bo||(Bo=!0,setInterval(fi,6e4)),{postToolUse:t=>{if(!t.tool_response)return null;let n=Oe(t.tool_response);if(!n&&!yt(t.tool_response))return null;ye("detected token limit error",{tool:t.tool_name,sessionId:t.session_id,parsed:n});let o=Go(t.session_id);o.lastErrorTime=Date.now(),o.errorCount++;let r=Yo(n,o,e);return r.message?(ye("injecting recovery message",{errorType:r.errorType,attempt:o.retryState.attempt}),r.message):null},onError:t=>{let n=Oe(t.error);if(!n)return{attempted:!1,success:!1};ye("error notification contains token limit error",{sessionId:t.session_id,parsed:n});let o=Go(t.session_id);o.lastErrorTime=Date.now(),o.errorCount++;let r=Yo(n,o,e);return{attempted:!0,success:!!r.message,message:r.message,errorType:r.errorType}}}}function Yo(e,t,n){if(n?.customMessage)return{message:n.customMessage,errorType:e?.errorType};if(e?.errorType?.includes("non-empty content"))return{message:Ct,errorType:"non-empty content"};if(t.retryState.attempt++,t.retryState.lastAttemptTime=Date.now(),t.retryState.attempt>_t.maxAttempts)return{message:At,errorType:"recovery_exhausted"};if(n?.detailed!==!1){let o=Rt;return e?.currentTokens&&e?.maxTokens&&(o+=`
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+=`
570
639
  Token Details:
571
640
  - Current: ${e.currentTokens.toLocaleString()} tokens
572
641
  - Maximum: ${e.maxTokens.toLocaleString()} tokens
573
642
  - Over limit by: ${(e.currentTokens-e.maxTokens).toLocaleString()} tokens
574
- `),{message:o,errorType:e?.errorType||"token_limit_exceeded"}}return{message:It,errorType:e?.errorType||"token_limit_exceeded"}}var tr=w(require("fs"),1),nr=w(require("path"),1),or=require("os");var Nt=process.env.ANTHROPIC_1M_CONTEXT==="true"||process.env.VERTEX_ANTHROPIC_1M_CONTEXT==="true"?1e6:2e5,Ie=4,xt=`CONTEXT WINDOW WARNING - APPROACHING LIMIT
643
+ `),{message:o,errorType:e?.errorType||"token_limit_exceeded"}}return{message:Vt,errorType:e?.errorType||"token_limit_exceeded"}}var zr=M(require("fs"),1),Xr=M(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
575
644
 
576
645
  Your context usage is getting high. Consider these actions to prevent hitting the limit:
577
646
 
@@ -591,7 +660,7 @@ Your context usage is getting high. Consider these actions to prevent hitting th
591
660
 
592
661
  Current Status: Context usage is high but recoverable.
593
662
  Action recommended: Use /compact when convenient.
594
- `,wt=`CRITICAL: CONTEXT WINDOW ALMOST FULL
663
+ `,Zt=`CRITICAL: CONTEXT WINDOW ALMOST FULL
595
664
 
596
665
  Your context usage is critically high. Immediate action required:
597
666
 
@@ -610,8 +679,8 @@ Your context usage is critically high. Immediate action required:
610
679
 
611
680
  WARNING: Further messages may fail if context is not reduced.
612
681
  Action required: Run /compact now.
613
- `;var gi=process.env.PREEMPTIVE_COMPACTION_DEBUG==="1",hi=nr.join((0,or.tmpdir)(),"preemptive-compaction-debug.log");function V(...e){if(gi){let t=`[${new Date().toISOString()}] [preemptive-compaction] ${e.map(n=>typeof n=="object"?JSON.stringify(n,null,2):String(n)).join(" ")}
614
- `;tr.appendFileSync(hi,t)}}var Ce=new Map;function Ti(){let e=Date.now(),t=1800*1e3;for(let[n,o]of Ce)e-o.lastWarningTime>t&&Ce.delete(n)}var Jo=!1;function rr(e){return Math.ceil(e.length/Ie)}function Ei(e,t){let n=t?.warningThreshold??.85,o=t?.criticalThreshold??.95,r=Nt,i=rr(e),s=i/r,a=s>=n,c=s>=o,u="none";return c?u="compact":a&&(u="warn"),{totalTokens:i,usageRatio:s,isWarning:a,isCritical:c,action:u}}function Ae(e){let t=Ce.get(e);return t||(t={lastWarningTime:0,warningCount:0,estimatedTokens:0},Ce.set(e,t)),t}function Si(e,t){let n=Ae(e),o=t?.cooldownMs??6e4,r=t?.maxWarnings??3,i=Date.now();return i-n.lastWarningTime<o?(V("skipping warning - cooldown active",{sessionId:e,elapsed:i-n.lastWarningTime,cooldown:o}),!1):n.warningCount>=r?(V("skipping warning - max reached",{sessionId:e,warningCount:n.warningCount,maxWarnings:r}),!1):!0}function ki(e){let t=Ae(e);t.lastWarningTime=Date.now(),t.warningCount++}function sr(e){return V("createPreemptiveCompactionHook called",{config:e}),e?.enabled===!1?{postToolUse:()=>null,stop:()=>null}:(Jo||(Jo=!0,setInterval(Ti,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=rr(t.tool_response),i=Ae(t.session_id);i.estimatedTokens+=r,V("tracking tool output",{tool:n,responseTokens:r,cumulativeTokens:i.estimatedTokens});let s=Ei("x".repeat(i.estimatedTokens*Ie),e);return!s.isWarning||!Si(t.session_id,e)?null:(ki(t.session_id),V("injecting context warning",{sessionId:t.session_id,usageRatio:s.usageRatio,isCritical:s.isCritical}),e?.customMessage?e.customMessage:s.isCritical?wt:xt)},stop:t=>{let n=Ae(t.session_id);return n.warningCount>0&&(V("resetting warning count on stop",{sessionId:t.session_id,previousCount:n.warningCount}),n.warningCount=0),null}})}var C=require("fs"),ar=require("path");var Pt=require("path"),ir=require("os"),Oi=(0,Pt.join)((0,ir.homedir)(),".olympus"),_e=(0,Pt.join)(Oi,"agent-usage-reminder"),vt=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"]),bt=new Set(["task","call_omo_agent","olympus_task"]),Lt=`
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 A=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=`
615
684
  [Agent Usage Reminder]
616
685
 
617
686
  You called a search/fetch tool directly without leveraging specialized agents.
@@ -635,19 +704,45 @@ WHY:
635
704
  - Reduces context window usage in main session
636
705
 
637
706
  ALWAYS prefer: Multiple parallel Task calls > Direct tool calls
638
- `;function Dt(e){return(0,ar.join)(_e,`${e}.json`)}function Mt(e){let t=Dt(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 Ne(e){(0,C.existsSync)(_e)||(0,C.mkdirSync)(_e,{recursive:!0});let t=Dt(e.sessionID);(0,C.writeFileSync)(t,JSON.stringify(e,null,2))}function Ut(e){let t=Dt(e);(0,C.existsSync)(t)&&(0,C.unlinkSync)(t)}function cr(){let e=new Map;function t(s){if(!e.has(s)){let c=Mt(s)??{sessionID:s,agentUsed:!1,reminderCount:0,updatedAt:Date.now()};e.set(s,c)}return e.get(s)}function n(s){let a=t(s);a.agentUsed=!0,a.updatedAt=Date.now(),Ne(a)}function o(s){e.delete(s),Ut(s)}return{"tool.execute.after":async(s,a)=>{let{tool:c,sessionID:u}=s,l=c.toLowerCase();if(bt.has(l)){n(u);return}if(!vt.has(l))return;let d=t(u);d.agentUsed||(a.output+=Lt,d.reminderCount++,d.updatedAt=Date.now(),Ne(d))},event:async({event:s})=>{let a=s.properties;if(s.type==="session.deleted"){let c=a?.info;c?.id&&o(c.id)}if(s.type==="session.compacted"){let c=a?.sessionID??a?.info?.id;c&&o(c)}}}}function ur(){let e=process.cwd(),t=bo();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=$o();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=zo();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=sr();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 i=cr();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 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 s=Ee(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=s.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 A=require("fs"),xe=require("path"),lr=require("os");var oe=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 i=this.config?.defaultConcurrency;return i!==void 0?i===0?1/0:i: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 i=this.queues.get(t)??[];i.push(r),this.queues.set(t,i)})}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 yi=1800*1e3,q=(0,xe.join)((0,lr.homedir)(),".claude",".olympus","background-tasks"),we=class{tasks=new Map;notifications=new Map;concurrencyManager;config;pruneInterval;constructor(t){this.config=t??{},this.concurrencyManager=new oe(t),this.ensureStorageDir(),this.loadPersistedTasks(),this.startPruning()}ensureStorageDir(){(0,A.existsSync)(q)||(0,A.mkdirSync)(q,{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,xe.join)(q,`${t}.json`)}persistTask(t){let n=this.getTaskPath(t.id);(0,A.writeFileSync)(n,JSON.stringify(t,null,2))}unpersistTask(t){let n=this.getTaskPath(t);(0,A.existsSync)(n)&&(0,A.unlinkSync)(n)}loadPersistedTasks(){if((0,A.existsSync)(q))try{let{readdirSync:t}=require("fs"),n=t(q);for(let o of n)if(o.endsWith(".json"))try{let r=(0,xe.join)(q,o),i=(0,A.readFileSync)(r,"utf-8"),s=JSON.parse(i);s.startedAt=new Date(s.startedAt),s.completedAt&&(s.completedAt=new Date(s.completedAt)),s.progress?.lastUpdate&&(s.progress.lastUpdate=new Date(s.progress.lastUpdate)),s.progress?.lastMessageAt&&(s.progress.lastMessageAt=new Date(s.progress.lastMessageAt)),this.tasks.set(s.id,s)}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??yi;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 i=r.filter(s=>t-s.startedAt.getTime()<=n);i.length===0?this.notifications.delete(o):i.length!==r.length&&this.notifications.set(o,i)}}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 i=this.generateTaskId(),s=`ses_${this.generateTaskId()}`,a={id:i,sessionId:s,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(i,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 i=this.tasks.get(t);i&&(i.status=n,o&&(i.result=o),r&&(i.error=r),(n==="completed"||n==="error"||n==="cancelled")&&(i.completedAt=new Date,i.concurrencyKey&&this.concurrencyManager.release(i.concurrencyKey),this.markForNotification(i)),this.persistTask(i))}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(i=>i.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),i=Math.floor(r/60),s=Math.floor(i/60);return s>0?`${s}h ${i%60}m ${r%60}s`:i>0?`${i}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 i=this.formatDuration(r.startedAt,r.completedAt),s=r.status.toUpperCase(),a=r.progress?` (${r.progress.toolCalls} tools)`:"";o.push(` [${s}] ${r.description} - ${i}${a}`),r.error&&o.push(` Error: ${r.error}`)}return o.join(`
639
- `)}cleanup(){this.stopPruning(),this.tasks.clear(),this.notifications.clear()}},$t;function Ht(e){return $t||($t=new we(e)),$t}function Ri(e){let t=e.status.toUpperCase(),n=Ii(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 i=e.result.substring(0,200),s=e.result.length>200?"...":"";r.push(` Result: ${i}${s}`)}return e.error&&r.push(` Error: ${e.error}`),r.join(`
640
- `)}function Ii(e,t){let n=(t??new Date).getTime()-e.getTime(),o=Math.floor(n/1e3),r=Math.floor(o/60),i=Math.floor(r/60);return i>0?`${i}h ${r%60}m ${o%60}s`:r>0?`${r}m ${o%60}s`:`${o}s`}function Ci(e){if(e.length===0)return"";let t=e.length===1?`
707
+ `;function rn(e){return(0,ns.join)(Ye,`${e}.json`)}function sn(e){let t=rn(e);if(!(0,A.existsSync)(t))return null;try{let n=(0,A.readFileSync)(t,"utf-8");return JSON.parse(n)}catch{return null}}function We(e){(0,A.existsSync)(Ye)||(0,A.mkdirSync)(Ye,{recursive:!0});let t=rn(e.sessionID);(0,A.writeFileSync)(t,JSON.stringify(e,null,2))}function an(e){let t=rn(e);(0,A.existsSync)(t)&&(0,A.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"}:Y(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}">
708
+
709
+ [${n}: CONDUCTOR MODE VIOLATION - ${t.toUpperCase()} ACTIVE]
710
+
711
+ You have made ${e} consecutive direct file operations without delegation.
712
+
713
+ **In ${t} mode, you are a CONDUCTOR, not a worker.**
714
+
715
+ | Action | Required Approach |
716
+ |--------|-------------------|
717
+ | Multi-file changes | **DELEGATE** to olympian |
718
+ | UI/component work | **DELEGATE** to frontend-engineer |
719
+ | Complex logic | **DELEGATE** to olympian |
720
+
721
+ **STOP making direct edits. Delegate the remaining work:**
722
+
723
+ \`\`\`
724
+ Task(subagent_type="olympian", prompt="Continue implementing: [describe remaining work]")
725
+ \`\`\`
726
+
727
+ ${e>=5?"**CRITICAL**: Too many direct operations. Your next action MUST be delegation.":""}
728
+
729
+ </conductor-violation>
730
+
731
+ ---
732
+
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||""),b=xa();if(b.active){let w=va(E,b.mode);if(w){u.output=w+u.output;return}}if(!tn.has(p))return;let x=n(d);x.agentUsed||(u.output+=on,x.reminderCount++,x.updatedAt=Date.now(),We(x))},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 N=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,N.existsSync)(ae)||(0,N.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,N.writeFileSync)(n,JSON.stringify(t,null,2))}unpersistTask(t){let n=this.getTaskPath(t);(0,N.existsSync)(n)&&(0,N.unlinkSync)(n)}loadPersistedTasks(){if((0,N.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,N.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?`
641
736
  [BACKGROUND TASK COMPLETED]
642
737
  `:`
643
738
  [${e.length} BACKGROUND TASKS COMPLETED]
644
- `,n=e.map(o=>Ri(o)).join(`
739
+ `,n=e.map(o=>ba(o)).join(`
645
740
 
646
741
  `);return`${t}
647
742
  ${n}
648
- `}function Ai(e,t,n){let o=t.getPendingNotifications(e);if(o.length===0)return{hasNotifications:!1,tasks:[]};let i=(n?.formatNotification??Ci)(o);return{hasNotifications:!0,tasks:o,message:i}}function dr(e,t){let n=e.sessionId;if(!n)return{continue:!0};let o=Ht(),r=Ai(n,o,t);return r.hasNotifications?((t?.autoClear??!0)&&o.clearNotifications(n),{continue:!0,message:r.message,notificationCount:r.tasks.length}):{continue:!0}}function pr(){m({name:"backgroundNotification",event:"Notification",priority:10,handler:async e=>{let t={sessionId:e.sessionId,directory:e.directory,event:e.event},n=await dr(t);return{continue:n.continue,message:n.message}}})}var mr=w(require("fs"),1),fr=w(require("path"),1),gr=require("os");var Pe="[user interrupted]",jt=new Set(["tool","tool_use","tool_result"]),Ft="empty-message-sanitizer",Gt="[empty-message-sanitizer]";var _i=process.env.EMPTY_MESSAGE_SANITIZER_DEBUG==="1",Ni=fr.join((0,gr.tmpdir)(),"empty-message-sanitizer-debug.log");function D(...e){if(_i){let t=`[${new Date().toISOString()}] ${Gt} ${e.map(n=>typeof n=="object"?JSON.stringify(n,null,2):String(n)).join(" ")}
649
- `;mr.appendFileSync(Ni,t)}}function xi(e){if(e.type==="text"){let t=e.text;return!!(t&&t.trim().length>0)}return!1}function hr(e){return jt.has(e.type)}function wi(e){return e.some(t=>xi(t)||hr(t))}function Pi(e,t,n=Pe){let o=e.info.role==="assistant";if(t&&o)return D("skipping final assistant message"),!1;let r=e.parts;if(!wi(r)){D(`sanitizing message ${e.info.id}: no valid content`);let s=!1;for(let a of r)if(a.type==="text"&&(!a.text||!a.text.trim())){a.text=n,a.synthetic=!0,s=!0,D("replaced empty text in existing part");break}if(!s){let a=r.findIndex(u=>hr(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),D("appended synthetic text part")):(r.splice(a,0,c),D("inserted synthetic text part before tool part"))}return!0}let i=!1;for(let s of r)s.type==="text"&&s.text!==void 0&&s.text.trim()===""&&(s.text=n,s.synthetic=!0,i=!0,D(`sanitized empty text part in message ${e.info.id}`));return i}function vi(e,t){let{messages:n}=e,o=t?.placeholderText??Pe;D("sanitizing messages",{count:n.length});let r=0;for(let i=0;i<n.length;i++){let s=n[i],a=i===n.length-1;Pi(s,a,o)&&r++}return D(`sanitized ${r} messages`),{messages:n,sanitizedCount:r,modified:r>0}}function Tr(e){return D("createEmptyMessageSanitizerHook called",{config:e}),{sanitize:t=>vi(t,e),getName:()=>Ft}}var Er="thinking-block-validator",Sr=["tool","tool_use","text"],kr=["thinking","reasoning"];var Or="[Continuing from previous reasoning]",yr="prt_0000000000_synthetic_thinking";function bi(e){return Sr.includes(e)}function Rr(e){return kr.includes(e)}function Li(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 Di(e){return!e||e.length===0?!1:e.some(t=>bi(t.type))}function Mi(e){if(!e||e.length===0)return!1;let t=e[0];return Rr(t.type)}function Ui(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(Rr(r.type)){let i=r.thinking||r.text;if(i&&typeof i=="string"&&i.trim().length>0)return i}}}return""}function $i(e,t){e.parts||(e.parts=[]);let n={type:"thinking",id:yr,sessionID:e.info.sessionID||"",messageID:e.info.id,thinking:t,synthetic:!0};e.parts.unshift(n)}function Ir(){return{"experimental.chat.messages.transform":async(e,t)=>{let{messages:n}=t;if(!n||n.length===0)return;let o;for(let s=n.length-1;s>=0;s--)if(n[s].info.role==="user"){o=n[s];break}let r=o?.info?.modelID||"";if(!Li(r))return;let i=0;for(let s=0;s<n.length;s++){let a=n[s];if(a.info.role==="assistant"&&Di(a.parts)&&!Mi(a.parts)){let u=Ui(n,s)||Or;$i(a,u),i++}}i>0&&process.env.DEBUG_THINKING_VALIDATOR&&console.log(`[${Er}] Fixed ${i} message(s) by prepending thinking blocks`)}}}function Cr(){m({name:"thinkingBlockValidator",event:"MessagesTransform",priority:10,handler:async e=>{if(!e.messages||e.messages.length===0)return{continue:!0};let t=Ir(),o={messages:[...e.messages]};await t["experimental.chat.messages.transform"]({},o);let r=o.messages.filter(i=>i.parts.some(s=>s.synthetic&&s.type==="thinking")).length;return r>0?{continue:!0,modifiedMessages:o.messages,message:`[Thinking Block Validator] Fixed ${r} 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=Tr().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 Ar=!1;function _r(){Ar||(An(),xn(),Fn(),vo(),ur(),pr(),Cr(),Ar=!0)}var be=require("fs"),xr=require("os"),re=require("path"),wr=w(require("jsonc-parser"),1),Hi={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 ji(){let e=process.env.XDG_CONFIG_HOME??(0,re.join)((0,xr.homedir)(),".config");return{user:(0,re.join)(e,"claude-olympus","config.jsonc"),project:(0,re.join)(process.cwd(),".claude","olympus.jsonc")}}function Nr(e){if(!(0,be.existsSync)(e))return null;try{let t=(0,be.readFileSync)(e,"utf-8"),n=[],o=wr.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 ve(e,t){let n={...e};for(let o of Object.keys(t)){let r=t[o],i=n[o];r!==void 0&&typeof r=="object"&&r!==null&&!Array.isArray(r)&&typeof i=="object"&&i!==null&&!Array.isArray(i)?n[o]=ve(i,r):r!==void 0&&(n[o]=r)}return n}function Fi(){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 Pr(){let e=ji(),t={...Hi},n=Nr(e.user);n&&(t=ve(t,n));let o=Nr(e.project);o&&(t=ve(t,o));let r=Fi();return t=ve(t,r),t}function Gi(e){let t=e.hooks;return t&&typeof t.timeoutMs=="number"?t.timeoutMs:100}function Bi(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 Yi(e,t){return Promise.race([Promise.resolve(e()),new Promise(n=>setTimeout(()=>n(null),t))])}function Wi(e,t){return!e||!t?!0:(typeof e=="string"?new RegExp(e,"i"):e).test(t)}async function vr(e,t){let n=Pr(),o=Kt(e),r=Gi(n),i=!0,s=[],a,c=t.toolInput,u=t.messages;for(let l of o)if(Bi(n,l.name)&&Wi(l.matcher,t.toolName))try{let d=await Yi(()=>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||(i=!1,a=d.reason),d.message&&s.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:i,message:s.length>0?s.join(`
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=M(require("fs"),1),us=M(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 F(...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 F("skipping final assistant message"),!1;let r=e.parts;if(!Fa(r)){F(`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,F("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),F("appended synthetic text part")):(r.splice(a,0,c),F("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,F(`sanitized empty text part in message ${e.info.id}`));return s}function Ga(e,t){let{messages:n}=e,o=t?.placeholderText??qe;F("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 F(`sanitized ${r} messages`),{messages:n,sanitizedCount:r,modified:r>0}}function ps(e){return F("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=M(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(`
650
745
 
651
746
  ---
652
747
 
653
- `):void 0,reason:a,modifiedInput:c!==t.toolInput?c:void 0,modifiedMessages:u!==t.messages?u:void 0}}_r();async function Ki(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}async function br(){let t=process.argv.slice(2).find(s=>s.startsWith("--event="));t||(console.error("Usage: node olympus-hooks.mjs --event=<event-type>"),process.exit(1));let n=t.split("=")[1],o=await Ki(),r;try{r=JSON.parse(o)}catch{r={}}let i=await vr(n,r);console.log(JSON.stringify(i))}var Le=process.argv[1]||"",Vi=Le.endsWith("entry.ts")||Le.endsWith("entry.js")||Le.endsWith("olympus-hooks.mjs")||Le.includes("olympus-hooks");Vi&&br().catch(e=>{console.error("[olympus-hooks] Fatal error:",e),process.exit(1)});0&&(module.exports={main});
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});