olympus-ai 4.0.1 → 4.0.3

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "olympus-ai",
3
- "version": "4.0.1",
3
+ "version": "4.0.3",
4
4
  "description": "Olympus: Multi-agent orchestration for Claude Code. Summon the gods of code.",
5
5
  "author": {
6
6
  "name": "mikev10",
@@ -1 +1 @@
1
- {"version":3,"file":"claude-md-merger.d.ts","sourceRoot":"","sources":["../../../src/features/workflow-engine/claude-md-merger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,eAAO,MAAM,cAAc,+BAA+B,CAAC;AAC3D,eAAO,MAAM,YAAY,6BAA6B,CAAC;AAEvD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAmBnF;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAmBhE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CA4IzF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,GAAG,IAAI,CAM1D"}
1
+ {"version":3,"file":"claude-md-merger.d.ts","sourceRoot":"","sources":["../../../src/features/workflow-engine/claude-md-merger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,eAAO,MAAM,cAAc,+BAA+B,CAAC;AAC3D,eAAO,MAAM,YAAY,6BAA6B,CAAC;AAEvD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAmBnF;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAmBhE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CAgBzF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,GAAG,IAAI,CAM1D"}
@@ -101,133 +101,9 @@ export function getAidlcRulesContent(workflowId, pathwayType) {
101
101
  - **Human-readable state**: \`aidlc-docs/${workflowId}/aidlc-state.md\`
102
102
  - **Audit log**: \`aidlc-docs/${workflowId}/audit.md\`
103
103
 
104
- ## Olympus Agent Delegation
105
-
106
- Use Olympus agents for every workflow activity — do NOT implement directly unless the
107
- task is trivial (single file, <10 lines). The delegation table below maps AI-DLC
108
- workflow activities to the correct Olympus agent:
109
-
110
- | Activity | Olympus Agent | When |
111
- |----------|--------------|------|
112
- | Strategic planning, intent interview | \`prometheus\` | Inception kickoff |
113
- | Plan review / critical evaluation | \`momus\` | After each inception stage |
114
- | Code implementation (multi-file) | \`olympian\` | Construction phase |
115
- | Complex debugging / root-cause | \`oracle\` | Failures, unexpected behaviour |
116
- | Codebase exploration / search | \`explore\` | Before coding, brownfield analysis |
117
- | Documentation, requirements writing | \`document-writer\` | Artifact generation |
118
- | Research, dependency lookup | \`librarian\` | Tech stack decisions |
119
- | UI / frontend components | \`frontend-engineer\` | User-facing features |
120
-
121
- **How to delegate:**
122
- \`\`\`
123
- Task(subagent_type="olympian", description="Implement {unit-name}", prompt="...")
124
- Task(subagent_type="oracle", description="Debug failing test", prompt="...")
125
- Task(subagent_type="explore", description="Map codebase structure", prompt="...")
126
- \`\`\`
127
-
128
- ## Rule Detail Files (On-Demand Loading)
129
-
130
- **CRITICAL**: When executing any stage, you MUST read the corresponding rule detail file BEFORE starting that stage's work. Rule files are located at:
131
- \`~/.claude/olympus/rules/\` (installed by olympus-ai)
132
-
133
- **Common rules** — MUST load at workflow start (MANDATORY):
134
- - \`~/.claude/olympus/rules/common/process-overview.md\`
135
- - \`~/.claude/olympus/rules/common/session-continuity.md\`
136
- - \`~/.claude/olympus/rules/common/content-validation.md\`
137
- - \`~/.claude/olympus/rules/common/question-format-guide.md\`
138
-
139
- **Per-stage rules** — MUST load before executing each stage (MANDATORY):
140
- - \`~/.claude/olympus/rules/inception/workspace-detection.md\`
141
- ${isGreenfield ? '' : '- `~/.claude/olympus/rules/inception/reverse-engineering.md` — brownfield only\n'}- \`~/.claude/olympus/rules/inception/requirements-analysis.md\`
142
- - \`~/.claude/olympus/rules/inception/user-stories.md\`
143
- - \`~/.claude/olympus/rules/inception/workflow-planning.md\`
144
- - \`~/.claude/olympus/rules/inception/application-design.md\`
145
- - \`~/.claude/olympus/rules/inception/units-generation.md\`
146
- - \`~/.claude/olympus/rules/construction/functional-design.md\`
147
- - \`~/.claude/olympus/rules/construction/nfr-requirements.md\`
148
- - \`~/.claude/olympus/rules/construction/nfr-design.md\`
149
- - \`~/.claude/olympus/rules/construction/infrastructure-design.md\`
150
- - \`~/.claude/olympus/rules/construction/code-generation.md\`
151
-
152
- ## Directory Layout
153
-
154
- \`\`\`
155
- aidlc-docs/{workflow-id}/ # ALL documentation here
156
- checkpoint.json # Machine-readable state (V3)
157
- aidlc-state.md # Human-readable state
158
- audit.md # Append-only interaction log
159
- manifest.json # Artifact registry
160
- inception/
161
- intent.md
162
- nfr.md
163
- requirements-questions.md # Q&A with [Answer]: tags
164
- requirements.md
165
- personas.md
166
- stories.md
167
- unit-of-work.md
168
- application-design/
169
- plans/
170
- workflow-routing.md
171
- execution-plan.md
172
- construction/
173
- {unit-name}/
174
- spec.md
175
- functional-design.md
176
- code-generation.md
177
- operations/
178
- deploy-guide.md
179
- runbook.md
180
-
181
- [project source files] # Application code — NEVER inside aidlc-docs/
182
- \`\`\`
183
-
184
- ## State Tracking Rules
185
-
186
- 1. **Dual tracking**: Every stage transition updates BOTH \`checkpoint.json\` (machine)
187
- AND \`aidlc-state.md\` (human). Never update one without the other.
188
- 2. **Audit log**: Append every user input and AI response to \`audit.md\` with ISO-8601
189
- timestamps. NEVER overwrite — always append/edit.
190
- 3. **Checkpoint persistence**: Save checkpoint after each stage completion (CCR-1).
191
- 4. **Plan-level checkboxes**: Mark plan steps \`[x]\` in the SAME interaction where work
192
- completes. No deferred updates.
193
-
194
- ## Inception Stages (in order)
195
-
196
- ${isGreenfield
197
- ? `1. Workspace Detection (always)
198
- 2. Requirements Analysis (always)
199
- 3. User Stories (conditional)
200
- 4. Workflow Planning (always)
201
- 5. Application Design (conditional)
202
- 6. Units Generation (conditional)`
203
- : `1. Workspace Detection (always)
204
- 2. Reverse Engineering (brownfield — delegate to \`explore\` + \`oracle\`)
205
- 3. Requirements Analysis (always)
206
- 4. User Stories (conditional)
207
- 5. Workflow Planning (always)
208
- 6. Application Design (conditional)
209
- 7. Units Generation (conditional)`}
210
-
211
- Each stage:
212
- - Requires explicit human approval before proceeding (**do not auto-advance**)
213
- - Produces a "REVIEW REQUIRED / WHAT'S NEXT" message after completion
214
- - Logs all interactions in \`audit.md\`
215
-
216
- ## Construction Rules
217
-
218
- - Complete each unit fully (design → code) before moving to the next unit
219
- - Delegate code generation to \`olympian\` (or \`olympian-high\` for complex units)
220
- - Use \`oracle\` for debugging failures, not re-running the same olympian prompt
221
- - Mark code generation units fulfilled in \`manifest.json\` after human approval
222
- - Run \`npm run build:all && npm test\` after each unit completes
223
-
224
- ## Must NOT Do
225
-
226
- - Claim to override or supersede other built-in workflows
227
- - Overwrite existing CLAUDE.md content outside these sentinel markers
228
- - Implement multi-file changes without delegating to an Olympus agent
229
- - Auto-advance past review gates without explicit human confirmation
230
- - Write application code inside \`aidlc-docs/\``;
104
+ All workflow stages, agent delegation, directory layout, and rules are defined in the
105
+ AI-DLC Core Workflow reference (loaded from core-workflow.md). This block only tracks
106
+ the active workflow identity above.`;
231
107
  }
232
108
  /**
233
109
  * Read and return the core-workflow.md content installed by olympus-ai.
@@ -1 +1 @@
1
- {"version":3,"file":"claude-md-merger.js","sourceRoot":"","sources":["../../../src/features/workflow-engine/claude-md-merger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-md-merger.js","sourceRoot":"","sources":["../../../src/features/workflow-engine/claude-md-merger.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  // Olympus Hooks Bundle - Generated by esbuild
3
- "use strict";var Zg=Object.create;var _o=Object.defineProperty;var eh=Object.getOwnPropertyDescriptor;var th=Object.getOwnPropertyNames;var nh=Object.getPrototypeOf,oh=Object.prototype.hasOwnProperty;var B=(e,t)=>()=>(e&&(t=e(e=0)),t);var U=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ot=(e,t)=>{for(var n in t)_o(e,n,{get:t[n],enumerable:!0})},Oa=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of th(t))!oh.call(e,r)&&r!==n&&_o(e,r,{get:()=>t[r],enumerable:!(o=eh(t,r))||o.enumerable});return e};var E=(e,t,n)=>(n=e!=null?Zg(nh(e)):{},Oa(t||!e||!e.__esModule?_o(n,"default",{value:e,enumerable:!0}):n,e)),rh=e=>Oa(_o({},"__esModule",{value:!0}),e);var li,lc=B(()=>{"use strict";li={maxAgeInDays:30,maxArchiveCount:5}});function ui(e){if(!e.token_usage)return null;let{token_usage:t}=e;return typeof t.input_tokens!="number"||typeof t.output_tokens!="number"||typeof t.total_tokens!="number"||typeof t.estimated!="boolean"?null:t}function en(e){return ui(e)?.total_tokens||0}var uc=B(()=>{"use strict"});function fe(){return process.env.OLYMPUS_TEST_LEARNING_DIR?process.env.OLYMPUS_TEST_LEARNING_DIR:(0,be.join)((0,dc.homedir)(),".claude","olympus","learning")}function Je(e){return(0,be.join)(e,".olympus","learning")}function fc(e){let t=(0,be.resolve)(e);return(0,pc.createHash)("sha256").update(t).digest("hex").substring(0,16)}function tn(e){let t=fe();if((0,q.existsSync)(t)||(0,q.mkdirSync)(t,{recursive:!0}),e){let n=Je(e);(0,q.existsSync)(n)||(0,q.mkdirSync)(n,{recursive:!0})}}function bh(e,t=li){try{let n=(0,be.dirname)(e),o=(0,be.basename)(e,".jsonl"),r=(0,q.readdirSync)(n),i=new RegExp(`^${o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\..*\\.old\\.jsonl$`),s=r.filter(d=>i.test(d)).map(d=>{let p=d.match(/\.(\d{4}-\d{2}-\d{2})T/),m=p?new Date(p[1]):null;return{filename:d,filepath:(0,be.join)(n,d),timestamp:m}}).filter(d=>d.timestamp!==null&&!isNaN(d.timestamp.getTime())).sort((d,p)=>p.timestamp.getTime()-d.timestamp.getTime()),a=t.maxAgeInDays??30,c=t.maxArchiveCount??5,l=new Date(Date.now()-a*24*60*60*1e3),u=0;for(let d=0;d<s.length;d++){let p=s[d],m=p.timestamp<l,f=d>=c;if(m||f)try{(0,q.unlinkSync)(p.filepath),u++}catch{}}u>0&&console.log(`[Olympus Learning] Pruned ${u} old archives`)}catch(n){console.error("[Olympus Learning] Failed to prune archives:",n)}}function Co(e,t=Eh,n=li){if((0,q.existsSync)(e))try{let r=(0,q.readFileSync)(e,"utf-8").split(`
4
- `).filter(i=>i.trim()).length;if(r>=t){let i=new Date().toISOString().replace(/[:.]/g,"-"),s=e.replace(".jsonl",`.${i}.old.jsonl`);(0,q.renameSync)(e,s),console.log(`[Olympus Learning] Archived ${r} entries to ${s}`),bh(e,n)}}catch(o){console.error(`[Olympus Learning] Failed to rotate ${e}:`,o)}}function wt(e){tn();let t=(0,be.join)(fe(),"feedback-log.jsonl");Co(t),(0,q.appendFileSync)(t,JSON.stringify(e)+`
3
+ "use strict";var Zg=Object.create;var _o=Object.defineProperty;var eh=Object.getOwnPropertyDescriptor;var th=Object.getOwnPropertyNames;var nh=Object.getPrototypeOf,oh=Object.prototype.hasOwnProperty;var B=(e,t)=>()=>(e&&(t=e(e=0)),t);var U=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ot=(e,t)=>{for(var n in t)_o(e,n,{get:t[n],enumerable:!0})},Oa=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of th(t))!oh.call(e,r)&&r!==n&&_o(e,r,{get:()=>t[r],enumerable:!(o=eh(t,r))||o.enumerable});return e};var E=(e,t,n)=>(n=e!=null?Zg(nh(e)):{},Oa(t||!e||!e.__esModule?_o(n,"default",{value:e,enumerable:!0}):n,e)),rh=e=>Oa(_o({},"__esModule",{value:!0}),e);var li,lc=B(()=>{"use strict";li={maxAgeInDays:30,maxArchiveCount:5}});function ui(e){if(!e.token_usage)return null;let{token_usage:t}=e;return typeof t.input_tokens!="number"||typeof t.output_tokens!="number"||typeof t.total_tokens!="number"||typeof t.estimated!="boolean"?null:t}function en(e){return ui(e)?.total_tokens||0}var uc=B(()=>{"use strict"});function fe(){return process.env.OLYMPUS_TEST_LEARNING_DIR?process.env.OLYMPUS_TEST_LEARNING_DIR:(0,be.join)((0,dc.homedir)(),".claude","olympus","learning")}function Je(e){return(0,be.join)(e,".olympus","learning")}function fc(e){let t=(0,be.resolve)(e);return(0,pc.createHash)("sha256").update(t).digest("hex").substring(0,16)}function tn(e){let t=fe();if((0,q.existsSync)(t)||(0,q.mkdirSync)(t,{recursive:!0}),e){let n=Je(e);(0,q.existsSync)(n)||(0,q.mkdirSync)(n,{recursive:!0})}}function Ch(e,t=li){try{let n=(0,be.dirname)(e),o=(0,be.basename)(e,".jsonl"),r=(0,q.readdirSync)(n),i=new RegExp(`^${o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\..*\\.old\\.jsonl$`),s=r.filter(d=>i.test(d)).map(d=>{let p=d.match(/\.(\d{4}-\d{2}-\d{2})T/),m=p?new Date(p[1]):null;return{filename:d,filepath:(0,be.join)(n,d),timestamp:m}}).filter(d=>d.timestamp!==null&&!isNaN(d.timestamp.getTime())).sort((d,p)=>p.timestamp.getTime()-d.timestamp.getTime()),a=t.maxAgeInDays??30,c=t.maxArchiveCount??5,l=new Date(Date.now()-a*24*60*60*1e3),u=0;for(let d=0;d<s.length;d++){let p=s[d],m=p.timestamp<l,f=d>=c;if(m||f)try{(0,q.unlinkSync)(p.filepath),u++}catch{}}u>0&&console.log(`[Olympus Learning] Pruned ${u} old archives`)}catch(n){console.error("[Olympus Learning] Failed to prune archives:",n)}}function Co(e,t=Eh,n=li){if((0,q.existsSync)(e))try{let r=(0,q.readFileSync)(e,"utf-8").split(`
4
+ `).filter(i=>i.trim()).length;if(r>=t){let i=new Date().toISOString().replace(/[:.]/g,"-"),s=e.replace(".jsonl",`.${i}.old.jsonl`);(0,q.renameSync)(e,s),console.log(`[Olympus Learning] Archived ${r} entries to ${s}`),Ch(e,n)}}catch(o){console.error(`[Olympus Learning] Failed to rotate ${e}:`,o)}}function wt(e){tn();let t=(0,be.join)(fe(),"feedback-log.jsonl");Co(t),(0,q.appendFileSync)(t,JSON.stringify(e)+`
5
5
  `,"utf-8")}function Io(){let e=(0,be.join)(fe(),"feedback-log.jsonl");return(0,q.existsSync)(e)?(0,q.readFileSync)(e,"utf-8").split(`
6
- `).filter(n=>n.trim()).map(n=>JSON.parse(n)):[]}function Ch(e){let t=e.filter(r=>r.event_type==="revision"||r.event_type==="cancellation"),n=new Map;for(let r of t){let i=r.extracted_lesson||r.feedback_category||"unknown",s=n.get(i);s?(s.count++,s.examples.length<3&&s.examples.push(r.user_message.substring(0,100))):n.set(i,{count:1,examples:[r.user_message.substring(0,100)]})}let o=[];for(let[r,i]of n)i.count>=2&&o.push({pattern:r,count:i.count,examples:i.examples});return o}function Ih(e){let t=[];return e>=.85&&t.push("high success rate"),t}function Rh(e,t){let n=[];return e<.6&&n.push("low success rate"),t>2&&n.push("frequently cancelled"),n}function Ro(e,t){let n=t.filter(u=>u.agent_used===e);if(n.length===0)return null;let o=n.length,r=n.filter(u=>u.event_type==="success").length,i=n.filter(u=>u.event_type==="revision").length,s=n.filter(u=>u.event_type==="cancellation").length,a=o>0?r/o:0,c,l=n.filter(u=>ui(u)!==null);if(l.length>0){let u=l.filter(y=>y.event_type==="success"),d=l.filter(y=>y.event_type==="revision"||y.event_type==="cancellation"),p=l.reduce((y,w)=>y+en(w),0),m=u.reduce((y,w)=>y+en(w),0),f=d.reduce((y,w)=>y+en(w),0),g=u.length>0?m/u.length:0,h=d.length>0?f/d.length:0;if(c={avg_tokens_per_success:g,avg_tokens_per_failure:h,total_tokens:p,invocation_count:l.length,efficiency_score:g,trend:"insufficient_data"},l.length>=10){let y=Math.floor(l.length/2),w=l.slice(0,y),k=l.slice(y),C=w.reduce((z,S)=>z+en(S),0)/w.length,A=k.reduce((z,S)=>z+en(S),0)/k.length-C,b=C*.1;Math.abs(A)<b?c.trend="stable":A<0?c.trend="improving":c.trend="declining"}}return{agent_name:e,total_invocations:o,success_count:r,revision_count:i,cancellation_count:s,success_rate:a,failure_patterns:Ch(n),strong_areas:Ih(a),weak_areas:Rh(a,s),last_updated:new Date().toISOString(),token_efficiency:c}}function me(e,t){if(!(0,q.existsSync)(e))return t;try{return JSON.parse((0,q.readFileSync)(e,"utf-8"))}catch(n){return console.error(`[Olympus Learning] Failed to read ${e}:`,n),t}}function it(e,t){try{let n=(0,be.dirname)(e);n&&!(0,q.existsSync)(n)&&(0,q.mkdirSync)(n,{recursive:!0}),(0,q.writeFileSync)(e,JSON.stringify(t,null,2),"utf-8")}catch(n){console.error(`[Olympus Learning] Failed to write ${e}:`,n)}}function mc(e){tn();let t=(0,be.join)(fe(),"session-summaries.jsonl");Co(t),(0,q.appendFileSync)(t,JSON.stringify(e)+`
7
- `,"utf-8")}var dc,be,q,pc,Eh,ye=B(()=>{"use strict";dc=require("os"),be=require("path"),q=require("fs"),pc=require("crypto");lc();uc();Eh=1e4});var ie=U(pi=>{"use strict";pi.fromCallback=function(e){return Object.defineProperty(function(...t){if(typeof t[t.length-1]=="function")e.apply(this,t);else return new Promise((n,o)=>{t.push((r,i)=>r!=null?o(r):n(i)),e.apply(this,t)})},"name",{value:e.name})};pi.fromPromise=function(e){return Object.defineProperty(function(...t){let n=t[t.length-1];if(typeof n!="function")return e.apply(this,t);t.pop(),e.apply(this,t).then(o=>n(null,o),n)},"name",{value:e.name})}});var $c=U((sb,Pc)=>{var St=require("constants"),$h=process.cwd,Ao=null,Nh=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return Ao||(Ao=$h.call(process)),Ao};try{process.cwd()}catch{}typeof process.chdir=="function"&&(fi=process.chdir,process.chdir=function(e){Ao=null,fi.call(process,e)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,fi));var fi;Pc.exports=Dh;function Dh(e){St.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)&&t(e),e.lutimes||n(e),e.chown=i(e.chown),e.fchown=i(e.fchown),e.lchown=i(e.lchown),e.chmod=o(e.chmod),e.fchmod=o(e.fchmod),e.lchmod=o(e.lchmod),e.chownSync=s(e.chownSync),e.fchownSync=s(e.fchownSync),e.lchownSync=s(e.lchownSync),e.chmodSync=r(e.chmodSync),e.fchmodSync=r(e.fchmodSync),e.lchmodSync=r(e.lchmodSync),e.stat=a(e.stat),e.fstat=a(e.fstat),e.lstat=a(e.lstat),e.statSync=c(e.statSync),e.fstatSync=c(e.fstatSync),e.lstatSync=c(e.lstatSync),e.chmod&&!e.lchmod&&(e.lchmod=function(u,d,p){p&&process.nextTick(p)},e.lchmodSync=function(){}),e.chown&&!e.lchown&&(e.lchown=function(u,d,p,m){m&&process.nextTick(m)},e.lchownSync=function(){}),Nh==="win32"&&(e.rename=typeof e.rename!="function"?e.rename:(function(u){function d(p,m,f){var g=Date.now(),h=0;u(p,m,function y(w){if(w&&(w.code==="EACCES"||w.code==="EPERM"||w.code==="EBUSY")&&Date.now()-g<6e4){setTimeout(function(){e.stat(m,function(k,C){k&&k.code==="ENOENT"?u(p,m,y):f(w)})},h),h<100&&(h+=10);return}f&&f(w)})}return Object.setPrototypeOf&&Object.setPrototypeOf(d,u),d})(e.rename)),e.read=typeof e.read!="function"?e.read:(function(u){function d(p,m,f,g,h,y){var w;if(y&&typeof y=="function"){var k=0;w=function(C,I,A){if(C&&C.code==="EAGAIN"&&k<10)return k++,u.call(e,p,m,f,g,h,w);y.apply(this,arguments)}}return u.call(e,p,m,f,g,h,w)}return Object.setPrototypeOf&&Object.setPrototypeOf(d,u),d})(e.read),e.readSync=typeof e.readSync!="function"?e.readSync:(function(u){return function(d,p,m,f,g){for(var h=0;;)try{return u.call(e,d,p,m,f,g)}catch(y){if(y.code==="EAGAIN"&&h<10){h++;continue}throw y}}})(e.readSync);function t(u){u.lchmod=function(d,p,m){u.open(d,St.O_WRONLY|St.O_SYMLINK,p,function(f,g){if(f){m&&m(f);return}u.fchmod(g,p,function(h){u.close(g,function(y){m&&m(h||y)})})})},u.lchmodSync=function(d,p){var m=u.openSync(d,St.O_WRONLY|St.O_SYMLINK,p),f=!0,g;try{g=u.fchmodSync(m,p),f=!1}finally{if(f)try{u.closeSync(m)}catch{}else u.closeSync(m)}return g}}function n(u){St.hasOwnProperty("O_SYMLINK")&&u.futimes?(u.lutimes=function(d,p,m,f){u.open(d,St.O_SYMLINK,function(g,h){if(g){f&&f(g);return}u.futimes(h,p,m,function(y){u.close(h,function(w){f&&f(y||w)})})})},u.lutimesSync=function(d,p,m){var f=u.openSync(d,St.O_SYMLINK),g,h=!0;try{g=u.futimesSync(f,p,m),h=!1}finally{if(h)try{u.closeSync(f)}catch{}else u.closeSync(f)}return g}):u.futimes&&(u.lutimes=function(d,p,m,f){f&&process.nextTick(f)},u.lutimesSync=function(){})}function o(u){return u&&function(d,p,m){return u.call(e,d,p,function(f){l(f)&&(f=null),m&&m.apply(this,arguments)})}}function r(u){return u&&function(d,p){try{return u.call(e,d,p)}catch(m){if(!l(m))throw m}}}function i(u){return u&&function(d,p,m,f){return u.call(e,d,p,m,function(g){l(g)&&(g=null),f&&f.apply(this,arguments)})}}function s(u){return u&&function(d,p,m){try{return u.call(e,d,p,m)}catch(f){if(!l(f))throw f}}}function a(u){return u&&function(d,p,m){typeof p=="function"&&(m=p,p=null);function f(g,h){h&&(h.uid<0&&(h.uid+=4294967296),h.gid<0&&(h.gid+=4294967296)),m&&m.apply(this,arguments)}return p?u.call(e,d,p,f):u.call(e,d,f)}}function c(u){return u&&function(d,p){var m=p?u.call(e,d,p):u.call(e,d);return m&&(m.uid<0&&(m.uid+=4294967296),m.gid<0&&(m.gid+=4294967296)),m}}function l(u){if(!u||u.code==="ENOSYS")return!0;var d=!process.getuid||process.getuid()!==0;return!!(d&&(u.code==="EINVAL"||u.code==="EPERM"))}}});var Mc=U((ab,Dc)=>{var Nc=require("stream").Stream;Dc.exports=Mh;function Mh(e){return{ReadStream:t,WriteStream:n};function t(o,r){if(!(this instanceof t))return new t(o,r);Nc.call(this);var i=this;this.path=o,this.fd=null,this.readable=!0,this.paused=!1,this.flags="r",this.mode=438,this.bufferSize=64*1024,r=r||{};for(var s=Object.keys(r),a=0,c=s.length;a<c;a++){var l=s[a];this[l]=r[l]}if(this.encoding&&this.setEncoding(this.encoding),this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.end===void 0)this.end=1/0;else if(typeof this.end!="number")throw TypeError("end must be a Number");if(this.start>this.end)throw new Error("start must be <= end");this.pos=this.start}if(this.fd!==null){process.nextTick(function(){i._read()});return}e.open(this.path,this.flags,this.mode,function(u,d){if(u){i.emit("error",u),i.readable=!1;return}i.fd=d,i.emit("open",d),i._read()})}function n(o,r){if(!(this instanceof n))return new n(o,r);Nc.call(this),this.path=o,this.fd=null,this.writable=!0,this.flags="w",this.encoding="binary",this.mode=438,this.bytesWritten=0,r=r||{};for(var i=Object.keys(r),s=0,a=i.length;s<a;s++){var c=i[s];this[c]=r[c]}if(this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.start<0)throw new Error("start must be >= zero");this.pos=this.start}this.busy=!1,this._queue=[],this.fd===null&&(this._open=e.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush())}}});var Lc=U((cb,jc)=>{"use strict";jc.exports=Lh;var jh=Object.getPrototypeOf||function(e){return e.__proto__};function Lh(e){if(e===null||typeof e!="object")return e;if(e instanceof Object)var t={__proto__:jh(e)};else var t=Object.create(null);return Object.getOwnPropertyNames(e).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}),t}});var on=U((lb,hi)=>{var X=require("fs"),Fh=$c(),Uh=Mc(),Wh=Lc(),xo=require("util"),ue,$o;typeof Symbol=="function"&&typeof Symbol.for=="function"?(ue=Symbol.for("graceful-fs.queue"),$o=Symbol.for("graceful-fs.previous")):(ue="___graceful-fs.queue",$o="___graceful-fs.previous");function Hh(){}function Wc(e,t){Object.defineProperty(e,ue,{get:function(){return t}})}var Lt=Hh;xo.debuglog?Lt=xo.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(Lt=function(){var e=xo.format.apply(xo,arguments);e="GFS4: "+e.split(/\n/).join(`
6
+ `).filter(n=>n.trim()).map(n=>JSON.parse(n)):[]}function Ih(e){let t=e.filter(r=>r.event_type==="revision"||r.event_type==="cancellation"),n=new Map;for(let r of t){let i=r.extracted_lesson||r.feedback_category||"unknown",s=n.get(i);s?(s.count++,s.examples.length<3&&s.examples.push(r.user_message.substring(0,100))):n.set(i,{count:1,examples:[r.user_message.substring(0,100)]})}let o=[];for(let[r,i]of n)i.count>=2&&o.push({pattern:r,count:i.count,examples:i.examples});return o}function Rh(e){let t=[];return e>=.85&&t.push("high success rate"),t}function Oh(e,t){let n=[];return e<.6&&n.push("low success rate"),t>2&&n.push("frequently cancelled"),n}function Ro(e,t){let n=t.filter(u=>u.agent_used===e);if(n.length===0)return null;let o=n.length,r=n.filter(u=>u.event_type==="success").length,i=n.filter(u=>u.event_type==="revision").length,s=n.filter(u=>u.event_type==="cancellation").length,a=o>0?r/o:0,c,l=n.filter(u=>ui(u)!==null);if(l.length>0){let u=l.filter(y=>y.event_type==="success"),d=l.filter(y=>y.event_type==="revision"||y.event_type==="cancellation"),p=l.reduce((y,w)=>y+en(w),0),m=u.reduce((y,w)=>y+en(w),0),f=d.reduce((y,w)=>y+en(w),0),g=u.length>0?m/u.length:0,h=d.length>0?f/d.length:0;if(c={avg_tokens_per_success:g,avg_tokens_per_failure:h,total_tokens:p,invocation_count:l.length,efficiency_score:g,trend:"insufficient_data"},l.length>=10){let y=Math.floor(l.length/2),w=l.slice(0,y),k=l.slice(y),C=w.reduce((z,S)=>z+en(S),0)/w.length,A=k.reduce((z,S)=>z+en(S),0)/k.length-C,b=C*.1;Math.abs(A)<b?c.trend="stable":A<0?c.trend="improving":c.trend="declining"}}return{agent_name:e,total_invocations:o,success_count:r,revision_count:i,cancellation_count:s,success_rate:a,failure_patterns:Ih(n),strong_areas:Rh(a),weak_areas:Oh(a,s),last_updated:new Date().toISOString(),token_efficiency:c}}function me(e,t){if(!(0,q.existsSync)(e))return t;try{return JSON.parse((0,q.readFileSync)(e,"utf-8"))}catch(n){return console.error(`[Olympus Learning] Failed to read ${e}:`,n),t}}function it(e,t){try{let n=(0,be.dirname)(e);n&&!(0,q.existsSync)(n)&&(0,q.mkdirSync)(n,{recursive:!0}),(0,q.writeFileSync)(e,JSON.stringify(t,null,2),"utf-8")}catch(n){console.error(`[Olympus Learning] Failed to write ${e}:`,n)}}function mc(e){tn();let t=(0,be.join)(fe(),"session-summaries.jsonl");Co(t,bh),(0,q.appendFileSync)(t,JSON.stringify(e)+`
7
+ `,"utf-8")}var dc,be,q,pc,Eh,bh,ye=B(()=>{"use strict";dc=require("os"),be=require("path"),q=require("fs"),pc=require("crypto");lc();uc();Eh=1e4,bh=500});var ie=U(pi=>{"use strict";pi.fromCallback=function(e){return Object.defineProperty(function(...t){if(typeof t[t.length-1]=="function")e.apply(this,t);else return new Promise((n,o)=>{t.push((r,i)=>r!=null?o(r):n(i)),e.apply(this,t)})},"name",{value:e.name})};pi.fromPromise=function(e){return Object.defineProperty(function(...t){let n=t[t.length-1];if(typeof n!="function")return e.apply(this,t);t.pop(),e.apply(this,t).then(o=>n(null,o),n)},"name",{value:e.name})}});var $c=U((sb,Pc)=>{var St=require("constants"),$h=process.cwd,Ao=null,Nh=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return Ao||(Ao=$h.call(process)),Ao};try{process.cwd()}catch{}typeof process.chdir=="function"&&(fi=process.chdir,process.chdir=function(e){Ao=null,fi.call(process,e)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,fi));var fi;Pc.exports=Dh;function Dh(e){St.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)&&t(e),e.lutimes||n(e),e.chown=i(e.chown),e.fchown=i(e.fchown),e.lchown=i(e.lchown),e.chmod=o(e.chmod),e.fchmod=o(e.fchmod),e.lchmod=o(e.lchmod),e.chownSync=s(e.chownSync),e.fchownSync=s(e.fchownSync),e.lchownSync=s(e.lchownSync),e.chmodSync=r(e.chmodSync),e.fchmodSync=r(e.fchmodSync),e.lchmodSync=r(e.lchmodSync),e.stat=a(e.stat),e.fstat=a(e.fstat),e.lstat=a(e.lstat),e.statSync=c(e.statSync),e.fstatSync=c(e.fstatSync),e.lstatSync=c(e.lstatSync),e.chmod&&!e.lchmod&&(e.lchmod=function(u,d,p){p&&process.nextTick(p)},e.lchmodSync=function(){}),e.chown&&!e.lchown&&(e.lchown=function(u,d,p,m){m&&process.nextTick(m)},e.lchownSync=function(){}),Nh==="win32"&&(e.rename=typeof e.rename!="function"?e.rename:(function(u){function d(p,m,f){var g=Date.now(),h=0;u(p,m,function y(w){if(w&&(w.code==="EACCES"||w.code==="EPERM"||w.code==="EBUSY")&&Date.now()-g<6e4){setTimeout(function(){e.stat(m,function(k,C){k&&k.code==="ENOENT"?u(p,m,y):f(w)})},h),h<100&&(h+=10);return}f&&f(w)})}return Object.setPrototypeOf&&Object.setPrototypeOf(d,u),d})(e.rename)),e.read=typeof e.read!="function"?e.read:(function(u){function d(p,m,f,g,h,y){var w;if(y&&typeof y=="function"){var k=0;w=function(C,I,A){if(C&&C.code==="EAGAIN"&&k<10)return k++,u.call(e,p,m,f,g,h,w);y.apply(this,arguments)}}return u.call(e,p,m,f,g,h,w)}return Object.setPrototypeOf&&Object.setPrototypeOf(d,u),d})(e.read),e.readSync=typeof e.readSync!="function"?e.readSync:(function(u){return function(d,p,m,f,g){for(var h=0;;)try{return u.call(e,d,p,m,f,g)}catch(y){if(y.code==="EAGAIN"&&h<10){h++;continue}throw y}}})(e.readSync);function t(u){u.lchmod=function(d,p,m){u.open(d,St.O_WRONLY|St.O_SYMLINK,p,function(f,g){if(f){m&&m(f);return}u.fchmod(g,p,function(h){u.close(g,function(y){m&&m(h||y)})})})},u.lchmodSync=function(d,p){var m=u.openSync(d,St.O_WRONLY|St.O_SYMLINK,p),f=!0,g;try{g=u.fchmodSync(m,p),f=!1}finally{if(f)try{u.closeSync(m)}catch{}else u.closeSync(m)}return g}}function n(u){St.hasOwnProperty("O_SYMLINK")&&u.futimes?(u.lutimes=function(d,p,m,f){u.open(d,St.O_SYMLINK,function(g,h){if(g){f&&f(g);return}u.futimes(h,p,m,function(y){u.close(h,function(w){f&&f(y||w)})})})},u.lutimesSync=function(d,p,m){var f=u.openSync(d,St.O_SYMLINK),g,h=!0;try{g=u.futimesSync(f,p,m),h=!1}finally{if(h)try{u.closeSync(f)}catch{}else u.closeSync(f)}return g}):u.futimes&&(u.lutimes=function(d,p,m,f){f&&process.nextTick(f)},u.lutimesSync=function(){})}function o(u){return u&&function(d,p,m){return u.call(e,d,p,function(f){l(f)&&(f=null),m&&m.apply(this,arguments)})}}function r(u){return u&&function(d,p){try{return u.call(e,d,p)}catch(m){if(!l(m))throw m}}}function i(u){return u&&function(d,p,m,f){return u.call(e,d,p,m,function(g){l(g)&&(g=null),f&&f.apply(this,arguments)})}}function s(u){return u&&function(d,p,m){try{return u.call(e,d,p,m)}catch(f){if(!l(f))throw f}}}function a(u){return u&&function(d,p,m){typeof p=="function"&&(m=p,p=null);function f(g,h){h&&(h.uid<0&&(h.uid+=4294967296),h.gid<0&&(h.gid+=4294967296)),m&&m.apply(this,arguments)}return p?u.call(e,d,p,f):u.call(e,d,f)}}function c(u){return u&&function(d,p){var m=p?u.call(e,d,p):u.call(e,d);return m&&(m.uid<0&&(m.uid+=4294967296),m.gid<0&&(m.gid+=4294967296)),m}}function l(u){if(!u||u.code==="ENOSYS")return!0;var d=!process.getuid||process.getuid()!==0;return!!(d&&(u.code==="EINVAL"||u.code==="EPERM"))}}});var Mc=U((ab,Dc)=>{var Nc=require("stream").Stream;Dc.exports=Mh;function Mh(e){return{ReadStream:t,WriteStream:n};function t(o,r){if(!(this instanceof t))return new t(o,r);Nc.call(this);var i=this;this.path=o,this.fd=null,this.readable=!0,this.paused=!1,this.flags="r",this.mode=438,this.bufferSize=64*1024,r=r||{};for(var s=Object.keys(r),a=0,c=s.length;a<c;a++){var l=s[a];this[l]=r[l]}if(this.encoding&&this.setEncoding(this.encoding),this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.end===void 0)this.end=1/0;else if(typeof this.end!="number")throw TypeError("end must be a Number");if(this.start>this.end)throw new Error("start must be <= end");this.pos=this.start}if(this.fd!==null){process.nextTick(function(){i._read()});return}e.open(this.path,this.flags,this.mode,function(u,d){if(u){i.emit("error",u),i.readable=!1;return}i.fd=d,i.emit("open",d),i._read()})}function n(o,r){if(!(this instanceof n))return new n(o,r);Nc.call(this),this.path=o,this.fd=null,this.writable=!0,this.flags="w",this.encoding="binary",this.mode=438,this.bytesWritten=0,r=r||{};for(var i=Object.keys(r),s=0,a=i.length;s<a;s++){var c=i[s];this[c]=r[c]}if(this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.start<0)throw new Error("start must be >= zero");this.pos=this.start}this.busy=!1,this._queue=[],this.fd===null&&(this._open=e.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush())}}});var Lc=U((cb,jc)=>{"use strict";jc.exports=Lh;var jh=Object.getPrototypeOf||function(e){return e.__proto__};function Lh(e){if(e===null||typeof e!="object")return e;if(e instanceof Object)var t={__proto__:jh(e)};else var t=Object.create(null);return Object.getOwnPropertyNames(e).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}),t}});var on=U((lb,hi)=>{var X=require("fs"),Fh=$c(),Uh=Mc(),Wh=Lc(),xo=require("util"),ue,$o;typeof Symbol=="function"&&typeof Symbol.for=="function"?(ue=Symbol.for("graceful-fs.queue"),$o=Symbol.for("graceful-fs.previous")):(ue="___graceful-fs.queue",$o="___graceful-fs.previous");function Hh(){}function Wc(e,t){Object.defineProperty(e,ue,{get:function(){return t}})}var Lt=Hh;xo.debuglog?Lt=xo.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(Lt=function(){var e=xo.format.apply(xo,arguments);e="GFS4: "+e.split(/\n/).join(`
8
8
  GFS4: `),console.error(e)});X[ue]||(Fc=global[ue]||[],Wc(X,Fc),X.close=(function(e){function t(n,o){return e.call(X,n,function(r){r||Uc(),typeof o=="function"&&o.apply(this,arguments)})}return Object.defineProperty(t,$o,{value:e}),t})(X.close),X.closeSync=(function(e){function t(n){e.apply(X,arguments),Uc()}return Object.defineProperty(t,$o,{value:e}),t})(X.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){Lt(X[ue]),require("assert").equal(X[ue].length,0)}));var Fc;global[ue]||Wc(global,X[ue]);hi.exports=mi(Wh(X));process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!X.__patched&&(hi.exports=mi(X),X.__patched=!0);function mi(e){Fh(e),e.gracefulify=mi,e.createReadStream=I,e.createWriteStream=A;var t=e.readFile;e.readFile=n;function n(S,O,x){return typeof O=="function"&&(x=O,O=null),D(S,O,x);function D(F,T,P,Y){return t(F,T,function(H){H&&(H.code==="EMFILE"||H.code==="ENFILE")?nn([D,[F,T,P],H,Y||Date.now(),Date.now()]):typeof P=="function"&&P.apply(this,arguments)})}}var o=e.writeFile;e.writeFile=r;function r(S,O,x,D){return typeof x=="function"&&(D=x,x=null),F(S,O,x,D);function F(T,P,Y,H,ce){return o(T,P,Y,function(J){J&&(J.code==="EMFILE"||J.code==="ENFILE")?nn([F,[T,P,Y,H],J,ce||Date.now(),Date.now()]):typeof H=="function"&&H.apply(this,arguments)})}}var i=e.appendFile;i&&(e.appendFile=s);function s(S,O,x,D){return typeof x=="function"&&(D=x,x=null),F(S,O,x,D);function F(T,P,Y,H,ce){return i(T,P,Y,function(J){J&&(J.code==="EMFILE"||J.code==="ENFILE")?nn([F,[T,P,Y,H],J,ce||Date.now(),Date.now()]):typeof H=="function"&&H.apply(this,arguments)})}}var a=e.copyFile;a&&(e.copyFile=c);function c(S,O,x,D){return typeof x=="function"&&(D=x,x=0),F(S,O,x,D);function F(T,P,Y,H,ce){return a(T,P,Y,function(J){J&&(J.code==="EMFILE"||J.code==="ENFILE")?nn([F,[T,P,Y,H],J,ce||Date.now(),Date.now()]):typeof H=="function"&&H.apply(this,arguments)})}}var l=e.readdir;e.readdir=d;var u=/^v[0-5]\./;function d(S,O,x){typeof O=="function"&&(x=O,O=null);var D=u.test(process.version)?function(P,Y,H,ce){return l(P,F(P,Y,H,ce))}:function(P,Y,H,ce){return l(P,Y,F(P,Y,H,ce))};return D(S,O,x);function F(T,P,Y,H){return function(ce,J){ce&&(ce.code==="EMFILE"||ce.code==="ENFILE")?nn([D,[T,P,Y],ce,H||Date.now(),Date.now()]):(J&&J.sort&&J.sort(),typeof Y=="function"&&Y.call(this,ce,J))}}}if(process.version.substr(0,4)==="v0.8"){var p=Uh(e);y=p.ReadStream,k=p.WriteStream}var m=e.ReadStream;m&&(y.prototype=Object.create(m.prototype),y.prototype.open=w);var f=e.WriteStream;f&&(k.prototype=Object.create(f.prototype),k.prototype.open=C),Object.defineProperty(e,"ReadStream",{get:function(){return y},set:function(S){y=S},enumerable:!0,configurable:!0}),Object.defineProperty(e,"WriteStream",{get:function(){return k},set:function(S){k=S},enumerable:!0,configurable:!0});var g=y;Object.defineProperty(e,"FileReadStream",{get:function(){return g},set:function(S){g=S},enumerable:!0,configurable:!0});var h=k;Object.defineProperty(e,"FileWriteStream",{get:function(){return h},set:function(S){h=S},enumerable:!0,configurable:!0});function y(S,O){return this instanceof y?(m.apply(this,arguments),this):y.apply(Object.create(y.prototype),arguments)}function w(){var S=this;z(S.path,S.flags,S.mode,function(O,x){O?(S.autoClose&&S.destroy(),S.emit("error",O)):(S.fd=x,S.emit("open",x),S.read())})}function k(S,O){return this instanceof k?(f.apply(this,arguments),this):k.apply(Object.create(k.prototype),arguments)}function C(){var S=this;z(S.path,S.flags,S.mode,function(O,x){O?(S.destroy(),S.emit("error",O)):(S.fd=x,S.emit("open",x))})}function I(S,O){return new e.ReadStream(S,O)}function A(S,O){return new e.WriteStream(S,O)}var b=e.open;e.open=z;function z(S,O,x,D){return typeof x=="function"&&(D=x,x=null),F(S,O,x,D);function F(T,P,Y,H,ce){return b(T,P,Y,function(J,dE){J&&(J.code==="EMFILE"||J.code==="ENFILE")?nn([F,[T,P,Y,H],J,ce||Date.now(),Date.now()]):typeof H=="function"&&H.apply(this,arguments)})}}return e}function nn(e){Lt("ENQUEUE",e[0].name,e[1]),X[ue].push(e),gi()}var Po;function Uc(){for(var e=Date.now(),t=0;t<X[ue].length;++t)X[ue][t].length>2&&(X[ue][t][3]=e,X[ue][t][4]=e);gi()}function gi(){if(clearTimeout(Po),Po=void 0,X[ue].length!==0){var e=X[ue].shift(),t=e[0],n=e[1],o=e[2],r=e[3],i=e[4];if(r===void 0)Lt("RETRY",t.name,n),t.apply(null,n);else if(Date.now()-r>=6e4){Lt("TIMEOUT",t.name,n);var s=n.pop();typeof s=="function"&&s.call(null,o)}else{var a=Date.now()-i,c=Math.max(i-r,1),l=Math.min(c*1.2,100);a>=l?(Lt("RETRY",t.name,n),t.apply(null,n.concat([r]))):X[ue].push(e)}Po===void 0&&(Po=setTimeout(gi,0))}}});var we=U(st=>{"use strict";var Hc=ie().fromCallback,ke=on(),Gh=["access","appendFile","chmod","chown","close","copyFile","cp","fchmod","fchown","fdatasync","fstat","fsync","ftruncate","futimes","glob","lchmod","lchown","lutimes","link","lstat","mkdir","mkdtemp","open","opendir","readdir","readFile","readlink","realpath","rename","rm","rmdir","stat","statfs","symlink","truncate","unlink","utimes","writeFile"].filter(e=>typeof ke[e]=="function");Object.assign(st,ke);Gh.forEach(e=>{st[e]=Hc(ke[e])});st.exists=function(e,t){return typeof t=="function"?ke.exists(e,t):new Promise(n=>ke.exists(e,n))};st.read=function(e,t,n,o,r,i){return typeof i=="function"?ke.read(e,t,n,o,r,i):new Promise((s,a)=>{ke.read(e,t,n,o,r,(c,l,u)=>{if(c)return a(c);s({bytesRead:l,buffer:u})})})};st.write=function(e,t,...n){return typeof n[n.length-1]=="function"?ke.write(e,t,...n):new Promise((o,r)=>{ke.write(e,t,...n,(i,s,a)=>{if(i)return r(i);o({bytesWritten:s,buffer:a})})})};st.readv=function(e,t,...n){return typeof n[n.length-1]=="function"?ke.readv(e,t,...n):new Promise((o,r)=>{ke.readv(e,t,...n,(i,s,a)=>{if(i)return r(i);o({bytesRead:s,buffers:a})})})};st.writev=function(e,t,...n){return typeof n[n.length-1]=="function"?ke.writev(e,t,...n):new Promise((o,r)=>{ke.writev(e,t,...n,(i,s,a)=>{if(i)return r(i);o({bytesWritten:s,buffers:a})})})};typeof ke.realpath.native=="function"?st.realpath.native=Hc(ke.realpath.native):process.emitWarning("fs.realpath.native is not a function. Is fs being monkey-patched?","Warning","fs-extra-WARN0003")});var Bc=U((db,Gc)=>{"use strict";var Bh=require("path");Gc.exports.checkPath=function(t){if(process.platform==="win32"&&/[<>:"|?*]/.test(t.replace(Bh.parse(t).root,""))){let o=new Error(`Path contains invalid characters: ${t}`);throw o.code="EINVAL",o}}});var Kc=U((pb,yi)=>{"use strict";var qc=we(),{checkPath:Vc}=Bc(),Yc=e=>{let t={mode:511};return typeof e=="number"?e:{...t,...e}.mode};yi.exports.makeDir=async(e,t)=>(Vc(e),qc.mkdir(e,{mode:Yc(t),recursive:!0}));yi.exports.makeDirSync=(e,t)=>(Vc(e),qc.mkdirSync(e,{mode:Yc(t),recursive:!0}))});var He=U((fb,Jc)=>{"use strict";var qh=ie().fromPromise,{makeDir:Vh,makeDirSync:ki}=Kc(),wi=qh(Vh);Jc.exports={mkdirs:wi,mkdirsSync:ki,mkdirp:wi,mkdirpSync:ki,ensureDir:wi,ensureDirSync:ki}});var _t=U((mb,Qc)=>{"use strict";var Yh=ie().fromPromise,zc=we();function Kh(e){return zc.access(e).then(()=>!0).catch(()=>!1)}Qc.exports={pathExists:Yh(Kh),pathExistsSync:zc.existsSync}});var Si=U((gb,Xc)=>{"use strict";var rn=we(),Jh=ie().fromPromise;async function zh(e,t,n){let o=await rn.open(e,"r+"),r=null;try{await rn.futimes(o,t,n)}finally{try{await rn.close(o)}catch(i){r=i}}if(r)throw r}function Qh(e,t,n){let o=rn.openSync(e,"r+");return rn.futimesSync(o,t,n),rn.closeSync(o)}Xc.exports={utimesMillis:Jh(zh),utimesMillisSync:Qh}});var Ft=U((hb,nl)=>{"use strict";var sn=we(),se=require("path"),Zc=ie().fromPromise;function Xh(e,t,n){let o=n.dereference?r=>sn.stat(r,{bigint:!0}):r=>sn.lstat(r,{bigint:!0});return Promise.all([o(e),o(t).catch(r=>{if(r.code==="ENOENT")return null;throw r})]).then(([r,i])=>({srcStat:r,destStat:i}))}function Zh(e,t,n){let o,r=n.dereference?s=>sn.statSync(s,{bigint:!0}):s=>sn.lstatSync(s,{bigint:!0}),i=r(e);try{o=r(t)}catch(s){if(s.code==="ENOENT")return{srcStat:i,destStat:null};throw s}return{srcStat:i,destStat:o}}async function ey(e,t,n,o){let{srcStat:r,destStat:i}=await Xh(e,t,o);if(i){if(Bn(r,i)){let s=se.basename(e),a=se.basename(t);if(n==="move"&&s!==a&&s.toLowerCase()===a.toLowerCase())return{srcStat:r,destStat:i,isChangingCase:!0};throw new Error("Source and destination must not be the same.")}if(r.isDirectory()&&!i.isDirectory())throw new Error(`Cannot overwrite non-directory '${t}' with directory '${e}'.`);if(!r.isDirectory()&&i.isDirectory())throw new Error(`Cannot overwrite directory '${t}' with non-directory '${e}'.`)}if(r.isDirectory()&&_i(e,t))throw new Error(No(e,t,n));return{srcStat:r,destStat:i}}function ty(e,t,n,o){let{srcStat:r,destStat:i}=Zh(e,t,o);if(i){if(Bn(r,i)){let s=se.basename(e),a=se.basename(t);if(n==="move"&&s!==a&&s.toLowerCase()===a.toLowerCase())return{srcStat:r,destStat:i,isChangingCase:!0};throw new Error("Source and destination must not be the same.")}if(r.isDirectory()&&!i.isDirectory())throw new Error(`Cannot overwrite non-directory '${t}' with directory '${e}'.`);if(!r.isDirectory()&&i.isDirectory())throw new Error(`Cannot overwrite directory '${t}' with non-directory '${e}'.`)}if(r.isDirectory()&&_i(e,t))throw new Error(No(e,t,n));return{srcStat:r,destStat:i}}async function el(e,t,n,o){let r=se.resolve(se.dirname(e)),i=se.resolve(se.dirname(n));if(i===r||i===se.parse(i).root)return;let s;try{s=await sn.stat(i,{bigint:!0})}catch(a){if(a.code==="ENOENT")return;throw a}if(Bn(t,s))throw new Error(No(e,n,o));return el(e,t,i,o)}function tl(e,t,n,o){let r=se.resolve(se.dirname(e)),i=se.resolve(se.dirname(n));if(i===r||i===se.parse(i).root)return;let s;try{s=sn.statSync(i,{bigint:!0})}catch(a){if(a.code==="ENOENT")return;throw a}if(Bn(t,s))throw new Error(No(e,n,o));return tl(e,t,i,o)}function Bn(e,t){return t.ino!==void 0&&t.dev!==void 0&&t.ino===e.ino&&t.dev===e.dev}function _i(e,t){let n=se.resolve(e).split(se.sep).filter(r=>r),o=se.resolve(t).split(se.sep).filter(r=>r);return n.every((r,i)=>o[i]===r)}function No(e,t,n){return`Cannot ${n} '${e}' to a subdirectory of itself, '${t}'.`}nl.exports={checkPaths:Zc(ey),checkPathsSync:ty,checkParentPaths:Zc(el),checkParentPathsSync:tl,isSrcSubdir:_i,areIdentical:Bn}});var rl=U((yb,ol)=>{"use strict";async function ny(e,t){let n=[];for await(let o of e)n.push(t(o).then(()=>null,r=>r??new Error("unknown error")));await Promise.all(n.map(o=>o.then(r=>{if(r!==null)throw r})))}ol.exports={asyncIteratorConcurrentProcess:ny}});var ll=U((kb,cl)=>{"use strict";var ge=we(),qn=require("path"),{mkdirs:oy}=He(),{pathExists:ry}=_t(),{utimesMillis:iy}=Si(),Vn=Ft(),{asyncIteratorConcurrentProcess:sy}=rl();async function ay(e,t,n={}){typeof n=="function"&&(n={filter:n}),n.clobber="clobber"in n?!!n.clobber:!0,n.overwrite="overwrite"in n?!!n.overwrite:n.clobber,n.preserveTimestamps&&process.arch==="ia32"&&process.emitWarning(`Using the preserveTimestamps option in 32-bit node is not recommended;
9
9
 
10
10
  see https://github.com/jprichardson/node-fs-extra/issues/269`,"Warning","fs-extra-WARN0001");let{srcStat:o,destStat:r}=await Vn.checkPaths(e,t,"copy",n);if(await Vn.checkParentPaths(e,o,t,"copy"),!await sl(e,t,n))return;let s=qn.dirname(t);await ry(s)||await oy(s),await al(r,e,t,n)}async function sl(e,t,n){return n.filter?n.filter(e,t):!0}async function al(e,t,n,o){let i=await(o.dereference?ge.stat:ge.lstat)(t);if(i.isDirectory())return dy(i,e,t,n,o);if(i.isFile()||i.isCharacterDevice()||i.isBlockDevice())return cy(i,e,t,n,o);if(i.isSymbolicLink())return py(e,t,n,o);throw i.isSocket()?new Error(`Cannot copy a socket file: ${t}`):i.isFIFO()?new Error(`Cannot copy a FIFO pipe: ${t}`):new Error(`Unknown file: ${t}`)}async function cy(e,t,n,o,r){if(!t)return il(e,n,o,r);if(r.overwrite)return await ge.unlink(o),il(e,n,o,r);if(r.errorOnExist)throw new Error(`'${o}' already exists`)}async function il(e,t,n,o){if(await ge.copyFile(t,n),o.preserveTimestamps){ly(e.mode)&&await uy(n,e.mode);let r=await ge.stat(t);await iy(n,r.atime,r.mtime)}return ge.chmod(n,e.mode)}function ly(e){return(e&128)===0}function uy(e,t){return ge.chmod(e,t|128)}async function dy(e,t,n,o,r){t||await ge.mkdir(o),await sy(await ge.opendir(n),async i=>{let s=qn.join(n,i.name),a=qn.join(o,i.name);if(await sl(s,a,r)){let{destStat:l}=await Vn.checkPaths(s,a,"copy",r);await al(l,s,a,r)}}),t||await ge.chmod(o,e.mode)}async function py(e,t,n,o){let r=await ge.readlink(t);if(o.dereference&&(r=qn.resolve(process.cwd(),r)),!e)return ge.symlink(r,n);let i=null;try{i=await ge.readlink(n)}catch(s){if(s.code==="EINVAL"||s.code==="UNKNOWN")return ge.symlink(r,n);throw s}if(o.dereference&&(i=qn.resolve(process.cwd(),i)),r!==i){if(Vn.isSrcSubdir(r,i))throw new Error(`Cannot copy '${r}' to a subdirectory of itself, '${i}'.`);if(Vn.isSrcSubdir(i,r))throw new Error(`Cannot overwrite '${i}' with '${r}'.`)}return await ge.unlink(n),ge.symlink(r,n)}cl.exports=ay});var ml=U((wb,fl)=>{"use strict";var Se=on(),Yn=require("path"),fy=He().mkdirsSync,my=Si().utimesMillisSync,Kn=Ft();function gy(e,t,n){typeof n=="function"&&(n={filter:n}),n=n||{},n.clobber="clobber"in n?!!n.clobber:!0,n.overwrite="overwrite"in n?!!n.overwrite:n.clobber,n.preserveTimestamps&&process.arch==="ia32"&&process.emitWarning(`Using the preserveTimestamps option in 32-bit node is not recommended;
@@ -811,7 +811,7 @@ Incomplete tasks remain in your todo list. Continue working on the next pending
811
811
 
812
812
  - Proceed without asking for permission
813
813
  - Mark each task complete when finished
814
- - Do not stop until all tasks are done`;var LE={hooks:{UserPromptSubmit:[{hooks:[{type:"command",command:Ke()?'node "%USERPROFILE%\\.claude\\hooks\\keyword-detector.mjs"':'node "$HOME/.claude/hooks/keyword-detector.mjs"'}]}],SessionStart:[{hooks:[{type:"command",command:Ke()?'node "%USERPROFILE%\\.claude\\hooks\\session-start.mjs"':'node "$HOME/.claude/hooks/session-start.mjs"'}]}],Stop:[{hooks:[{type:"command",command:Ke()?'node "%USERPROFILE%\\.claude\\hooks\\persistent-mode.mjs"':'node "$HOME/.claude/hooks/persistent-mode.mjs"'}]}]}},FE={hooks:{UserPromptSubmit:[{hooks:[{type:"command",command:Ke()?`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=UserPromptSubmit`:`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=UserPromptSubmit`}]}],SessionStart:[{hooks:[{type:"command",command:Ke()?`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=SessionStart`:`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=SessionStart`}]}],Stop:[{hooks:[{type:"command",command:Ke()?`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=Stop`:`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=Stop`}]}],PreToolUse:[{hooks:[{type:"command",command:Ke()?`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=PreToolUse`:`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=PreToolUse`}]}],PostToolUse:[{hooks:[{type:"command",command:Ke()?`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=PostToolUse`:`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=PostToolUse`}]}],PostToolUseFailure:[{hooks:[{type:"command",command:Ke()?`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=PostToolUseFailure`:`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=PostToolUseFailure`}]}],Notification:[{hooks:[{type:"command",command:Ke()?`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=Notification`:`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=Notification`}]}]}};var hc=require("path");ye();var yc=require("crypto");function jt(e,t,n){return!n||n.sample_count<5?1e4:e&&n.by_project[e]!==void 0?n.by_project[e]:t&&n.by_task_type[t]!==void 0?n.by_task_type[t]:n.overall_avg}var Oh=10,Ah=1800*1e3;function kc(e){return(0,hc.join)(e,".olympus","session-state.json")}function gc(e,t){let n=jt(t);return{session_id:e||(0,yc.randomUUID)(),started_at:new Date().toISOString(),last_updated:new Date().toISOString(),recent_prompts:[],pending_completion:null,todo_snapshot:null,token_budget:{session_baseline:n,current_usage:0,input_tokens:0,output_tokens:0,warning_threshold:1.5,warning_issued:!1,started_at:new Date().toISOString()},discovery_volume:{session_count:0,daily_count:0,daily_reset_at:new Date().toISOString()}}}function V(e,t){let n=kc(e),o=me(n,null);if(!o)return gc(t,e);let r=new Date(o.last_updated).getTime();if(Date.now()-r>Ah)return gc(t,e);if(t&&o.session_id!==t&&(o.session_id=t),o.token_budget)o.token_budget.input_tokens===void 0&&(o.token_budget.input_tokens=0),o.token_budget.output_tokens===void 0&&(o.token_budget.output_tokens=0);else{let s=jt(e);o.token_budget={session_baseline:s,current_usage:0,input_tokens:0,output_tokens:0,warning_threshold:1.5,warning_issued:!1,started_at:o.started_at}}return o.discovery_volume||(o.discovery_volume={session_count:0,daily_count:0,daily_reset_at:new Date().toISOString()}),o}function Q(e,t){let n=kc(e);t.last_updated=new Date().toISOString(),it(n,t)}function wc(e,t,n){let o={prompt:t,timestamp:new Date().toISOString(),detected_feedback:n};return e.recent_prompts=[o,...e.recent_prompts].slice(0,Oh),e.last_updated=new Date().toISOString(),e}function Sc(e,t,n){return e.pending_completion={claimed_at:new Date().toISOString(),task_description:t,agent_used:n},e.last_updated=new Date().toISOString(),e}function _c(e){return e.pending_completion=null,e.last_updated=new Date().toISOString(),e}function Oo(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}function vc(e,t){let n=jt(t);return e.token_budget={session_baseline:n,current_usage:0,input_tokens:0,output_tokens:0,warning_threshold:1.5,warning_issued:!1,started_at:new Date().toISOString()},e.last_updated=new Date().toISOString(),e}function Tc(e,t){return e.token_budget||(e.token_budget={session_baseline:jt(),current_usage:0,input_tokens:0,output_tokens:0,warning_threshold:1.5,warning_issued:!1,started_at:new Date().toISOString()}),e.token_budget.current_usage+=t,e.last_updated=new Date().toISOString(),e}function Ec(e){return e.token_budget&&(e.token_budget.warning_issued=!0,e.last_updated=new Date().toISOString()),e}function bc(e){if(!e.token_budget||e.token_budget.warning_issued)return!1;let t=e.token_budget.session_baseline*e.token_budget.warning_threshold;return e.token_budget.current_usage>=t}function Cc(e){e.discovery_volume||(e.discovery_volume={session_count:0,daily_count:0,daily_reset_at:new Date().toISOString()});let t=new Date(e.discovery_volume.daily_reset_at),n=new Date;return n.toDateString()!==t.toDateString()&&(e.discovery_volume.daily_count=0,e.discovery_volume.daily_reset_at=n.toISOString()),e.discovery_volume.session_count++,e.discovery_volume.daily_count++,e.last_updated=n.toISOString(),e}function Ic(e,t){if(!e.discovery_volume)return!1;let n=new Date(e.discovery_volume.daily_reset_at);return new Date().toDateString()!==n.toDateString()?!1:e.discovery_volume.session_count>=t.maxPerSession||e.discovery_volume.daily_count>=t.maxPerDay}ye();var Rc=require("crypto"),xh={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 di(e){let t=e.replace(/```[\s\S]*?```/g,"").replace(/`[^`]+`/g,""),n=null;for(let[o,r]of Object.entries(xh))for(let{regex:i,confidence:s}of r)i.test(t)&&(!n||s>n.confidence)&&(n={category:o,confidence:s});return n}async function Oc(e){let{prompt:t,directory:n,sessionId:o}=e;if(!t||!n)return;let r=V(n,o),i=di(t),s=wc(r,t,i?.category);if(i){let a={id:(0,Rc.randomUUID)(),timestamp:new Date().toISOString(),session_id:r.session_id,project_path:n,event_type:i.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:i.category,confidence:i.confidence};wt(a)}Q(n,s)}ye();var Ac=require("crypto");async function xc(e){let{prompt:t,directory:n,sessionId:o}=e;if(!t||!n)return;let r=V(n,o),i=di(t),s=i?.category==="praise"&&i.confidence>.7,a=Ph(t,r.pending_completion?.task_description||"");if(s||a){let c={id:(0,Ac.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:s?"praise":"enhancement",confidence:s?i.confidence:.6};if(wt(c),Oo(r)){let l=_c(r);Q(n,l)}}}function Ph(e,t){let n=c=>new Set(c.toLowerCase().replace(/[^\w\s]/g,"").split(/\s+/).filter(l=>l.length>3)),o=n(e),r=n(t),i=new Set([...o].filter(c=>r.has(c))),s=new Set([...o,...r]);return(s.size>0?i.size/s.size:0)<.2}var $e=E(require("fs"),1),ar=E(require("path"),1);Te();ji();var ju=require("fs"),Mu=new Map,Zk=1e4;function ew(e){let t=Mu.get(e);if(t&&Date.now()-t.timestamp<Zk)return t.content;let n=(0,ju.readFileSync)(e,"utf-8");return Mu.set(e,{content:n,timestamp:Date.now()}),n}function tw(e){let t=e.match(/^---\n([\s\S]*?)\n---/);if(!t)return null;let n=t[1];try{let o={},r=n.split(`
814
+ - Do not stop until all tasks are done`;var LE={hooks:{UserPromptSubmit:[{hooks:[{type:"command",command:Ke()?'node "%USERPROFILE%\\.claude\\hooks\\keyword-detector.mjs"':'node "$HOME/.claude/hooks/keyword-detector.mjs"'}]}],SessionStart:[{hooks:[{type:"command",command:Ke()?'node "%USERPROFILE%\\.claude\\hooks\\session-start.mjs"':'node "$HOME/.claude/hooks/session-start.mjs"'}]}],Stop:[{hooks:[{type:"command",command:Ke()?'node "%USERPROFILE%\\.claude\\hooks\\persistent-mode.mjs"':'node "$HOME/.claude/hooks/persistent-mode.mjs"'}]}]}},FE={hooks:{UserPromptSubmit:[{hooks:[{type:"command",command:Ke()?`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=UserPromptSubmit`:`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=UserPromptSubmit`}]}],SessionStart:[{hooks:[{type:"command",command:Ke()?`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=SessionStart`:`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=SessionStart`}]}],Stop:[{hooks:[{type:"command",command:Ke()?`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=Stop`:`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=Stop`}]}],PreToolUse:[{hooks:[{type:"command",command:Ke()?`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=PreToolUse`:`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=PreToolUse`}]}],PostToolUse:[{hooks:[{type:"command",command:Ke()?`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=PostToolUse`:`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=PostToolUse`}]}],PostToolUseFailure:[{hooks:[{type:"command",command:Ke()?`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=PostToolUseFailure`:`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=PostToolUseFailure`}]}],Notification:[{hooks:[{type:"command",command:Ke()?`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=Notification`:`node "${(0,le.join)(Ee(),"olympus-hooks.cjs")}" --event=Notification`}]}]}};var hc=require("path");ye();var yc=require("crypto");function jt(e,t,n){return!n||n.sample_count<5?1e4:e&&n.by_project[e]!==void 0?n.by_project[e]:t&&n.by_task_type[t]!==void 0?n.by_task_type[t]:n.overall_avg}var Ah=10,xh=1800*1e3;function kc(e){return(0,hc.join)(e,".olympus","session-state.json")}function gc(e,t){let n=jt(t);return{session_id:e||(0,yc.randomUUID)(),started_at:new Date().toISOString(),last_updated:new Date().toISOString(),recent_prompts:[],pending_completion:null,todo_snapshot:null,token_budget:{session_baseline:n,current_usage:0,input_tokens:0,output_tokens:0,warning_threshold:1.5,warning_issued:!1,started_at:new Date().toISOString()},discovery_volume:{session_count:0,daily_count:0,daily_reset_at:new Date().toISOString()}}}function V(e,t){let n=kc(e),o=me(n,null);if(!o)return gc(t,e);let r=new Date(o.last_updated).getTime();if(Date.now()-r>xh)return gc(t,e);if(t&&o.session_id!==t&&(o.session_id=t),o.token_budget)o.token_budget.input_tokens===void 0&&(o.token_budget.input_tokens=0),o.token_budget.output_tokens===void 0&&(o.token_budget.output_tokens=0);else{let s=jt(e);o.token_budget={session_baseline:s,current_usage:0,input_tokens:0,output_tokens:0,warning_threshold:1.5,warning_issued:!1,started_at:o.started_at}}return o.discovery_volume||(o.discovery_volume={session_count:0,daily_count:0,daily_reset_at:new Date().toISOString()}),o}function Q(e,t){let n=kc(e);t.last_updated=new Date().toISOString(),it(n,t)}function wc(e,t,n){let o={prompt:t,timestamp:new Date().toISOString(),detected_feedback:n};return e.recent_prompts=[o,...e.recent_prompts].slice(0,Ah),e.last_updated=new Date().toISOString(),e}function Sc(e,t,n){return e.pending_completion={claimed_at:new Date().toISOString(),task_description:t,agent_used:n},e.last_updated=new Date().toISOString(),e}function _c(e){return e.pending_completion=null,e.last_updated=new Date().toISOString(),e}function Oo(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}function vc(e,t){let n=jt(t);return e.token_budget={session_baseline:n,current_usage:0,input_tokens:0,output_tokens:0,warning_threshold:1.5,warning_issued:!1,started_at:new Date().toISOString()},e.last_updated=new Date().toISOString(),e}function Tc(e,t){return e.token_budget||(e.token_budget={session_baseline:jt(),current_usage:0,input_tokens:0,output_tokens:0,warning_threshold:1.5,warning_issued:!1,started_at:new Date().toISOString()}),e.token_budget.current_usage+=t,e.last_updated=new Date().toISOString(),e}function Ec(e){return e.token_budget&&(e.token_budget.warning_issued=!0,e.last_updated=new Date().toISOString()),e}function bc(e){if(!e.token_budget||e.token_budget.warning_issued)return!1;let t=e.token_budget.session_baseline*e.token_budget.warning_threshold;return e.token_budget.current_usage>=t}function Cc(e){e.discovery_volume||(e.discovery_volume={session_count:0,daily_count:0,daily_reset_at:new Date().toISOString()});let t=new Date(e.discovery_volume.daily_reset_at),n=new Date;return n.toDateString()!==t.toDateString()&&(e.discovery_volume.daily_count=0,e.discovery_volume.daily_reset_at=n.toISOString()),e.discovery_volume.session_count++,e.discovery_volume.daily_count++,e.last_updated=n.toISOString(),e}function Ic(e,t){if(!e.discovery_volume)return!1;let n=new Date(e.discovery_volume.daily_reset_at);return new Date().toDateString()!==n.toDateString()?!1:e.discovery_volume.session_count>=t.maxPerSession||e.discovery_volume.daily_count>=t.maxPerDay}ye();var Rc=require("crypto"),Ph={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 di(e){let t=e.replace(/```[\s\S]*?```/g,"").replace(/`[^`]+`/g,""),n=null;for(let[o,r]of Object.entries(Ph))for(let{regex:i,confidence:s}of r)i.test(t)&&(!n||s>n.confidence)&&(n={category:o,confidence:s});return n}async function Oc(e){let{prompt:t,directory:n,sessionId:o}=e;if(!t||!n)return;let r=V(n,o),i=di(t),s=wc(r,t,i?.category);if(i){let a={id:(0,Rc.randomUUID)(),timestamp:new Date().toISOString(),session_id:r.session_id,project_path:n,event_type:i.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:i.category,confidence:i.confidence};wt(a)}Q(n,s)}ye();var Ac=require("crypto");async function xc(e){let{prompt:t,directory:n,sessionId:o}=e;if(!t||!n)return;let r=V(n,o),i=di(t);if(i?.category==="praise"&&i.confidence>.7){let a={id:(0,Ac.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:"praise",confidence:i.confidence};if(wt(a),Oo(r)){let c=_c(r);Q(n,c)}}}var $e=E(require("fs"),1),ar=E(require("path"),1);Te();ji();var ju=require("fs"),Mu=new Map,Zk=1e4;function ew(e){let t=Mu.get(e);if(t&&Date.now()-t.timestamp<Zk)return t.content;let n=(0,ju.readFileSync)(e,"utf-8");return Mu.set(e,{content:n,timestamp:Date.now()}),n}function tw(e){let t=e.match(/^---\n([\s\S]*?)\n---/);if(!t)return null;let n=t[1];try{let o={},r=n.split(`
815
815
  `);for(let i of r){let s=i.match(/^(\w+):\s*(.+)$/);if(s){let[,a,c]=s;o[a]=c.trim()}}return o}catch{return null}}function nw(e){return e.replace(/^---\n[\s\S]*?\n---\n/,"")}function ow(e){let t=new Map,n=e.split(`
816
816
  `),o=null,r=[];for(let i of n){let s=i.match(/^##\s+(.+)$/);s?(o&&t.set(o,r.join(`
817
817
  `)),o=s[1].trim(),r=[]):o&&r.push(i)}return o&&t.set(o,r.join(`
@@ -907,140 +907,18 @@ ${a}`:n}let o=e.replace(/^\s+/,"");return o?`${n}
907
907
 
908
908
  ${o}`:n}function xd(e){if(!Od(e))return e;let t=e.indexOf(rr),n=e.indexOf(wn)+wn.length,o=e.slice(0,t).replace(/\s+$/,""),r=e.slice(n).replace(/^\s+/,"");return o&&r?`${o}
909
909
 
910
- ${r}`:o||r||""}function Pd(e,t){let n=t==="greenfield";return`# AI-DLC Workflow Rules (Olympus-Native)
910
+ ${r}`:o||r||""}function Pd(e,t){return`# AI-DLC Workflow Rules (Olympus-Native)
911
911
 
912
912
  ## Active Workflow
913
913
  - **Workflow ID**: \`${e}\`
914
- - **Pathway**: ${n?"Greenfield":"Brownfield"} (${t})
914
+ - **Pathway**: ${t==="greenfield"?"Greenfield":"Brownfield"} (${t})
915
915
  - **State file**: \`aidlc-docs/${e}/checkpoint.json\`
916
916
  - **Human-readable state**: \`aidlc-docs/${e}/aidlc-state.md\`
917
917
  - **Audit log**: \`aidlc-docs/${e}/audit.md\`
918
918
 
919
- ## Olympus Agent Delegation
920
-
921
- Use Olympus agents for every workflow activity \u2014 do NOT implement directly unless the
922
- task is trivial (single file, <10 lines). The delegation table below maps AI-DLC
923
- workflow activities to the correct Olympus agent:
924
-
925
- | Activity | Olympus Agent | When |
926
- |----------|--------------|------|
927
- | Strategic planning, intent interview | \`prometheus\` | Inception kickoff |
928
- | Plan review / critical evaluation | \`momus\` | After each inception stage |
929
- | Code implementation (multi-file) | \`olympian\` | Construction phase |
930
- | Complex debugging / root-cause | \`oracle\` | Failures, unexpected behaviour |
931
- | Codebase exploration / search | \`explore\` | Before coding, brownfield analysis |
932
- | Documentation, requirements writing | \`document-writer\` | Artifact generation |
933
- | Research, dependency lookup | \`librarian\` | Tech stack decisions |
934
- | UI / frontend components | \`frontend-engineer\` | User-facing features |
935
-
936
- **How to delegate:**
937
- \`\`\`
938
- Task(subagent_type="olympian", description="Implement {unit-name}", prompt="...")
939
- Task(subagent_type="oracle", description="Debug failing test", prompt="...")
940
- Task(subagent_type="explore", description="Map codebase structure", prompt="...")
941
- \`\`\`
942
-
943
- ## Rule Detail Files (On-Demand Loading)
944
-
945
- **CRITICAL**: When executing any stage, you MUST read the corresponding rule detail file BEFORE starting that stage's work. Rule files are located at:
946
- \`~/.claude/olympus/rules/\` (installed by olympus-ai)
947
-
948
- **Common rules** \u2014 MUST load at workflow start (MANDATORY):
949
- - \`~/.claude/olympus/rules/common/process-overview.md\`
950
- - \`~/.claude/olympus/rules/common/session-continuity.md\`
951
- - \`~/.claude/olympus/rules/common/content-validation.md\`
952
- - \`~/.claude/olympus/rules/common/question-format-guide.md\`
953
-
954
- **Per-stage rules** \u2014 MUST load before executing each stage (MANDATORY):
955
- - \`~/.claude/olympus/rules/inception/workspace-detection.md\`
956
- ${n?"":"- `~/.claude/olympus/rules/inception/reverse-engineering.md` \u2014 brownfield only\n"}- \`~/.claude/olympus/rules/inception/requirements-analysis.md\`
957
- - \`~/.claude/olympus/rules/inception/user-stories.md\`
958
- - \`~/.claude/olympus/rules/inception/workflow-planning.md\`
959
- - \`~/.claude/olympus/rules/inception/application-design.md\`
960
- - \`~/.claude/olympus/rules/inception/units-generation.md\`
961
- - \`~/.claude/olympus/rules/construction/functional-design.md\`
962
- - \`~/.claude/olympus/rules/construction/nfr-requirements.md\`
963
- - \`~/.claude/olympus/rules/construction/nfr-design.md\`
964
- - \`~/.claude/olympus/rules/construction/infrastructure-design.md\`
965
- - \`~/.claude/olympus/rules/construction/code-generation.md\`
966
-
967
- ## Directory Layout
968
-
969
- \`\`\`
970
- aidlc-docs/{workflow-id}/ # ALL documentation here
971
- checkpoint.json # Machine-readable state (V3)
972
- aidlc-state.md # Human-readable state
973
- audit.md # Append-only interaction log
974
- manifest.json # Artifact registry
975
- inception/
976
- intent.md
977
- nfr.md
978
- requirements-questions.md # Q&A with [Answer]: tags
979
- requirements.md
980
- personas.md
981
- stories.md
982
- unit-of-work.md
983
- application-design/
984
- plans/
985
- workflow-routing.md
986
- execution-plan.md
987
- construction/
988
- {unit-name}/
989
- spec.md
990
- functional-design.md
991
- code-generation.md
992
- operations/
993
- deploy-guide.md
994
- runbook.md
995
-
996
- [project source files] # Application code \u2014 NEVER inside aidlc-docs/
997
- \`\`\`
998
-
999
- ## State Tracking Rules
1000
-
1001
- 1. **Dual tracking**: Every stage transition updates BOTH \`checkpoint.json\` (machine)
1002
- AND \`aidlc-state.md\` (human). Never update one without the other.
1003
- 2. **Audit log**: Append every user input and AI response to \`audit.md\` with ISO-8601
1004
- timestamps. NEVER overwrite \u2014 always append/edit.
1005
- 3. **Checkpoint persistence**: Save checkpoint after each stage completion (CCR-1).
1006
- 4. **Plan-level checkboxes**: Mark plan steps \`[x]\` in the SAME interaction where work
1007
- completes. No deferred updates.
1008
-
1009
- ## Inception Stages (in order)
1010
-
1011
- ${n?`1. Workspace Detection (always)
1012
- 2. Requirements Analysis (always)
1013
- 3. User Stories (conditional)
1014
- 4. Workflow Planning (always)
1015
- 5. Application Design (conditional)
1016
- 6. Units Generation (conditional)`:`1. Workspace Detection (always)
1017
- 2. Reverse Engineering (brownfield \u2014 delegate to \`explore\` + \`oracle\`)
1018
- 3. Requirements Analysis (always)
1019
- 4. User Stories (conditional)
1020
- 5. Workflow Planning (always)
1021
- 6. Application Design (conditional)
1022
- 7. Units Generation (conditional)`}
1023
-
1024
- Each stage:
1025
- - Requires explicit human approval before proceeding (**do not auto-advance**)
1026
- - Produces a "REVIEW REQUIRED / WHAT'S NEXT" message after completion
1027
- - Logs all interactions in \`audit.md\`
1028
-
1029
- ## Construction Rules
1030
-
1031
- - Complete each unit fully (design \u2192 code) before moving to the next unit
1032
- - Delegate code generation to \`olympian\` (or \`olympian-high\` for complex units)
1033
- - Use \`oracle\` for debugging failures, not re-running the same olympian prompt
1034
- - Mark code generation units fulfilled in \`manifest.json\` after human approval
1035
- - Run \`npm run build:all && npm test\` after each unit completes
1036
-
1037
- ## Must NOT Do
1038
-
1039
- - Claim to override or supersede other built-in workflows
1040
- - Overwrite existing CLAUDE.md content outside these sentinel markers
1041
- - Implement multi-file changes without delegating to an Olympus agent
1042
- - Auto-advance past review gates without explicit human confirmation
1043
- - Write application code inside \`aidlc-docs/\``}var ss=["intent","unit","code-generation","complete"];function OS(e){let t=ss.indexOf(e);return t===-1||t>=ss.length-1?"complete":ss[t+1]}var cr=class{projectPath;featureName;workflowId;interruptHandler=null;constructor(t,n){this.projectPath=t,this.featureName=n;let o=n.toLowerCase().replace(/\.[a-z]{1,4}$/,"").replace(/[_\s]+/g,"-").replace(/[^a-z0-9-]/g,"").replace(/-+/g,"-").replace(/^-|-$/g,"");if(o.length>80&&(o=o.substring(0,80).replace(/-$/,"")),!o)throw new Error("Feature name produced an empty workflow ID after sanitization");this.workflowId=o}async start(t){let n={schema_version:"3.0.0",workflow_id:this.workflowId,feature_name:this.featureName,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),current_phase:"inception",current_stage:"intent",status:"in_progress",origin:"hook-init",phases:{discovery:{status:"not_started",started_at:null,completed_at:null,gate_result:null,gate_bypassed:!1,bypass_reason:null},inception:{status:"in_progress",started_at:new Date().toISOString(),completed_at:null,gate_result:null,gate_bypassed:!1,bypass_reason:null},construction:{status:"not_started",started_at:null,completed_at:null,gate_result:null,gate_bypassed:!1,bypass_reason:null},operations:{status:"not_started",started_at:null,completed_at:null,gate_result:null,gate_bypassed:!1,bypass_reason:null}},manifest_path:`aidlc-docs/${this.workflowId}/manifest.json`,trust_state_path:".olympus/trust-state.json",resume_context:{initial_prompt:t}};try{await Du(this.projectPath,this.workflowId)}catch(o){let r=o;throw console.error(`[WorkflowEngine] Failed to initialize workflow directory: ${r.message}`),new Error(`Failed to start workflow: Could not create directory structure - ${r.message}`)}try{await M(this.projectPath,n)}catch(o){let r=o;throw console.error(`[WorkflowEngine] Failed to save initial checkpoint: ${r.message}`),new Error(`Failed to start workflow: Could not save checkpoint - ${r.message}`)}try{let r=(await yn(this.projectPath)).sourceFileCount??0,i=await Ed(this.projectPath,t),s=or(t),a=await bd({projectPath:this.projectPath,workflowId:this.workflowId,intentText:t,depthAssessment:s,pathwayType:i,sourceFileCount:r}),c=await Ji(this.projectPath,this.workflowId,a),l=await R(this.projectPath,this.workflowId);if(l){l.workflow_routing_path=c,l.pathway_type=i;let u=["discovery","inception","construction","operations"];l.skipped_phases=u.filter(d=>!zi(a,d)),await M(this.projectPath,l)}if(console.log(`[WorkflowEngine] Generated Workflow Routing: pathway=${i}, depth=${a.estimated_depth}, code-generations=${a.estimated_code_generations}`),a.stages.some(u=>!u.included)){let u=a.stages.filter(d=>!d.included).map(d=>`${d.phase}/${d.stage}`);console.log(`[WorkflowEngine] Stages excluded by plan: ${u.join(", ")}`)}}catch(o){console.warn(`[WorkflowEngine] Failed to generate Workflow Routing: ${o.message}`),console.warn("[WorkflowEngine] Workflow will proceed without adaptive phase selection")}try{let r=(await R(this.projectPath,this.workflowId))?.pathway_type;if(!r){let{isBrownfield:l}=await yn(this.projectPath);r=l?"brownfield-enhancement":"greenfield"}let i=ar.join(this.projectPath,".claude","CLAUDE.md"),s=$e.existsSync(i)?$e.readFileSync(i,"utf-8"):"",a=Pd(this.workflowId,r),c=Ad(s,a);$e.mkdirSync(ar.join(this.projectPath,".claude"),{recursive:!0}),$e.writeFileSync(i,c,"utf-8"),console.log("[WorkflowEngine] Injected AI-DLC rules into .claude/CLAUDE.md")}catch(o){console.error("[WorkflowEngine] Failed to inject AI-DLC rules into CLAUDE.md:",o)}}async resume(){let t;try{t=await R(this.projectPath,this.workflowId)}catch(o){let r=o;throw console.error(`[WorkflowEngine] Failed to load checkpoint for resume: ${r.message}`),new Error(`Failed to resume workflow: Could not load checkpoint - ${r.message}`)}if(!t)throw console.error(`[WorkflowEngine] No checkpoint found for workflow: ${this.workflowId}`),console.error("[WorkflowEngine] Available workflows: Run 'olympus workflow list' to see workflows"),new Error(`No checkpoint found for workflow: ${this.workflowId}`);if(t.status==="complete")return"Workflow already complete";if(t.status==="paused"){t.status="in_progress";try{await M(this.projectPath,t)}catch(o){let r=o;throw console.error(`[WorkflowEngine] Failed to update checkpoint status: ${r.message}`),new Error(`Failed to resume workflow: Could not save checkpoint - ${r.message}`)}}this.setupInterruptHandler();let n=t.current_stage;try{await this.executeStage(n)}catch(o){let r=o;console.error(`[WorkflowEngine] Failed to execute ${n} stage: ${r.message}`);try{let i=await R(this.projectPath,this.workflowId);i&&(i.status="paused",i.resume_context={...i.resume_context,error_message:r.message,failed_stage:n},await M(this.projectPath,i),console.log("[WorkflowEngine] Workflow saved as paused. Fix the issue and resume with `/continue`"))}catch(i){console.warn("[WorkflowEngine] Failed to save error checkpoint:",i.message)}throw new Error(`Failed to execute ${n} stage: ${r.message}`)}finally{this.cleanupInterruptHandler()}return`Resumed workflow from stage: ${n}`}async pause(){let t;try{t=await R(this.projectPath,this.workflowId)}catch(n){let o=n;throw console.error(`[WorkflowEngine] Failed to load checkpoint for pause: ${o.message}`),new Error(`Failed to pause workflow: Could not load checkpoint - ${o.message}`)}if(!t)throw console.error(`[WorkflowEngine] No checkpoint found for workflow: ${this.workflowId}`),new Error(`No checkpoint found for workflow: ${this.workflowId}`);t.status="paused";try{await M(this.projectPath,t)}catch(n){let o=n;throw console.error(`[WorkflowEngine] Failed to save paused checkpoint: ${o.message}`),new Error(`Failed to pause workflow: Could not save checkpoint - ${o.message}`)}return`aidlc-docs/${this.workflowId}/checkpoint.json`}async executeStage(t){if(t==="complete")throw new Error("No execution for complete stage");let n=await R(this.projectPath,this.workflowId);if(!n)throw new Error(`No checkpoint found for workflow: ${this.workflowId}`);switch(t){case"intent":await this.executeIntentStage(n);break;case"unit":await this.executeUnitStage(n);break;case"code-generation":await this.executeCodeGenerationStage(n);break}let o=OS(t);if(n.current_stage=o,o==="complete"){n.status="complete";try{let r=ar.join(this.projectPath,".claude","CLAUDE.md");if($e.existsSync(r)){let i=$e.readFileSync(r,"utf-8"),s=xd(i);$e.writeFileSync(r,s,"utf-8"),console.log("[WorkflowEngine] Removed AI-DLC rules from .claude/CLAUDE.md (workflow complete)")}}catch(r){console.error("[WorkflowEngine] Failed to remove AI-DLC rules from CLAUDE.md:",r)}}await M(this.projectPath,n)}async getStatus(){let t;try{t=await R(this.projectPath,this.workflowId)}catch(o){let r=o;throw console.error(`[WorkflowEngine] Failed to load checkpoint for status: ${r.message}`),new Error(`Failed to get workflow status: Could not load checkpoint - ${r.message}`)}if(!t)throw console.error(`[WorkflowEngine] No checkpoint found for workflow: ${this.workflowId}`),new Error(`No checkpoint found for workflow: ${this.workflowId}`);let n=[];return{workflow_id:t.workflow_id,feature_name:t.feature_name,current_stage:t.current_stage,status:t.status,artifacts:n,updated_at:t.updated_at}}async executePhase(t){let n=nr(this.projectPath,this.workflowId);if(n&&!zi(n,t)){console.log(`[WorkflowEngine] Skipping ${t} phase (excluded by Workflow Routing: ${n.phases[t]?.rationale||"no rationale"})`);let o=await R(this.projectPath,this.workflowId);if(o){let i=o;i.phases&&i.phases[t]&&(i.phases[t].status="complete",i.phases[t].completed_at=new Date().toISOString(),i.phases[t].gate_bypassed=!0,i.phases[t].bypass_reason="Excluded by Workflow Routing"),await M(this.projectPath,o)}let r=`${this.projectPath}/aidlc-docs/${this.workflowId}/manifest.json`;try{Ce(r,{phase:t,action:"bypassed",actor:"config",reason:`Excluded by Workflow Routing (pathway: ${n.pathway})`})}catch{}return}switch(t){case"discovery":{let o=`${this.projectPath}/aidlc-docs/${this.workflowId}/manifest.json`,r=await wd({projectPath:this.projectPath,workflowId:this.workflowId,featureName:this.featureName,manifestPath:o});r.gateRequired&&(console.log(`[WorkflowEngine] Discovery phase: ${r.artifactsGenerated.length} artifacts generated (${r.sourceFileCount} source files detected)`),console.log(`[WorkflowEngine] Discovery Gate: Review findings in aidlc-docs/${this.workflowId}/discovery/ before proceeding to Inception`));try{let i={type:"phase_complete",phase:"discovery",details:`${r.artifactsGenerated.length} artifacts generated, ${r.sourceFileCount} source files`},s={workflowId:this.workflowId,featureName:this.featureName,projectPath:this.projectPath,sessionId:"engine",phase:"discovery"},a=xe(i,s);oe(a)}catch(i){console.error("[WorkflowEngine] Failed to capture discovery phase discovery:",i)}break}case"inception":{let{InceptionOrchestrator:o}=await Promise.resolve().then(()=>(Qd(),zd)),r=new o,i=await R(this.projectPath,this.workflowId);if(!i)throw new Error(`No checkpoint found for workflow: ${this.workflowId}`);if(i.current_stage!=="intent"){console.log(`[WorkflowEngine] Skipping inception orchestrator \u2014 checkpoint already at stage '${i.current_stage}'`);break}if(!i.inception_stages){let s=nr(this.projectPath,this.workflowId),a=i;await r.initialize(this.projectPath,this.workflowId,a.pathway_type||"greenfield",s)}for(;!await r.isComplete(this.projectPath,this.workflowId);){let s=await r.executeNextStage(this.projectPath,this.workflowId);if(s.status==="awaiting_answers"||s.status==="review_required")break}try{let s={type:"phase_complete",phase:"inception",details:"Inception stages completed"},a={workflowId:this.workflowId,featureName:this.featureName,projectPath:this.projectPath,sessionId:"engine",phase:"inception"},c=xe(s,a);oe(c)}catch(s){console.error("[WorkflowEngine] Failed to capture inception phase discovery:",s)}break}case"construction":{let o=await R(this.projectPath,this.workflowId);if(o&&o.status==="awaiting_dev_review"){console.log("[WorkflowEngine] Waiting for developer review of technical specification (Risk Tier 3).");return}let r=bt(this.projectPath,this.workflowId,"intent"),i;try{i=$e.readFileSync(r,"utf-8")}catch{}let a=await new Ko(this.projectPath,this.workflowId).execute(i);if(!a.passed)throw console.error("[WorkflowEngine] Construction phase validation failed:",a.blocking_issues),new Error(`Construction phase validation failed: ${a.blocking_issues.join(", ")}`);try{let c={type:"phase_complete",phase:"construction",details:"Construction phase completed"},l={workflowId:this.workflowId,featureName:this.featureName,projectPath:this.projectPath,sessionId:"engine",phase:"construction"},u=xe(c,l);oe(u)}catch(c){console.error("[WorkflowEngine] Failed to capture construction phase discovery:",c)}break}case"operations":{let{generateOperationsArtifacts:o}=await Promise.resolve().then(()=>(rp(),op)),{loadManifest:r,registerArtifact:i,updatePhaseStatus:s}=await Promise.resolve().then(()=>(K(),Ht)),a=`${this.projectPath}/aidlc-docs/${this.workflowId}/manifest.json`,c=r(a),l=null;try{l=$e.readFileSync(bt(this.projectPath,this.workflowId,"intent"),"utf-8")}catch{}let u=await R(this.projectPath,this.workflowId),d="MEDIUM";if(c?.depth_assessment){let f=c.depth_assessment.total_score;f<=10?d="SHALLOW":f>=21&&(d="DEEP")}let p={workflowId:this.workflowId,featureName:this.featureName,manifest:c,specContent:l,buildLogContent:null,depthLevel:d},m=await o(p,this.projectPath);if(c){s(a,"operations","complete");for(let f of m.artifactsGenerated){let g=`aidlc-docs/${this.workflowId}/operations/${f}`,h=f.replace(/\.(md|json)$/,"").toUpperCase().replace(/-/g,"_");i(a,{id:`OPS-${h}`,type:h,phase:"operations",stage:"code-generation",path:g,validation_passed:!0,write_complete:!0,checksum:null})}}u&&(u.current_phase="operations",u.updated_at=new Date().toISOString(),await M(this.projectPath,u)),console.log(`[WorkflowEngine] Operations phase: Generated ${m.artifactsGenerated.length} artifacts (depth: ${d})`),console.log(`[WorkflowEngine] Operations artifacts: ${m.artifactsGenerated.join(", ")}`);try{let f={type:"phase_complete",phase:"operations",details:`${m.artifactsGenerated.length} artifacts generated (depth: ${d})`},g={workflowId:this.workflowId,featureName:this.featureName,projectPath:this.projectPath,sessionId:"engine",phase:"operations"},h=xe(f,g);oe(h)}catch(f){console.error("[WorkflowEngine] Failed to capture operations phase discovery:",f)}break}}}async approveWorkflowRouting(t){let n=nr(this.projectPath,this.workflowId);if(!n)throw new Error(`No Workflow Routing found for workflow: ${this.workflowId}`);n.approved_at=new Date().toISOString(),n.approved_by="human",await Ji(this.projectPath,this.workflowId,n);let o=await R(this.projectPath,this.workflowId);if(o){let i=o;if(i.inception_stages?.["workflow-planning"]){let s=i.inception_stages["workflow-planning"];s.status!=="completed"&&s.status!=="skipped"&&(s.status="completed",s.completed_at=new Date().toISOString(),await M(this.projectPath,o))}}let r=`${this.projectPath}/aidlc-docs/${this.workflowId}/manifest.json`;try{Ce(r,{phase:"inception",action:"approved",actor:"human",reason:t||"Workflow Routing approved"})}catch{}console.log("[WorkflowEngine] Workflow Routing approved")}setupInterruptHandler(){this.interruptHandler=async()=>{console.log(`
919
+ All workflow stages, agent delegation, directory layout, and rules are defined in the
920
+ AI-DLC Core Workflow reference (loaded from core-workflow.md). This block only tracks
921
+ the active workflow identity above.`}var ss=["intent","unit","code-generation","complete"];function OS(e){let t=ss.indexOf(e);return t===-1||t>=ss.length-1?"complete":ss[t+1]}var cr=class{projectPath;featureName;workflowId;interruptHandler=null;constructor(t,n){this.projectPath=t,this.featureName=n;let o=n.toLowerCase().replace(/\.[a-z]{1,4}$/,"").replace(/[_\s]+/g,"-").replace(/[^a-z0-9-]/g,"").replace(/-+/g,"-").replace(/^-|-$/g,"");if(o.length>80&&(o=o.substring(0,80).replace(/-$/,"")),!o)throw new Error("Feature name produced an empty workflow ID after sanitization");this.workflowId=o}async start(t){let n={schema_version:"3.0.0",workflow_id:this.workflowId,feature_name:this.featureName,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),current_phase:"inception",current_stage:"intent",status:"in_progress",origin:"hook-init",phases:{discovery:{status:"not_started",started_at:null,completed_at:null,gate_result:null,gate_bypassed:!1,bypass_reason:null},inception:{status:"in_progress",started_at:new Date().toISOString(),completed_at:null,gate_result:null,gate_bypassed:!1,bypass_reason:null},construction:{status:"not_started",started_at:null,completed_at:null,gate_result:null,gate_bypassed:!1,bypass_reason:null},operations:{status:"not_started",started_at:null,completed_at:null,gate_result:null,gate_bypassed:!1,bypass_reason:null}},manifest_path:`aidlc-docs/${this.workflowId}/manifest.json`,trust_state_path:".olympus/trust-state.json",resume_context:{initial_prompt:t}};try{await Du(this.projectPath,this.workflowId)}catch(o){let r=o;throw console.error(`[WorkflowEngine] Failed to initialize workflow directory: ${r.message}`),new Error(`Failed to start workflow: Could not create directory structure - ${r.message}`)}try{await M(this.projectPath,n)}catch(o){let r=o;throw console.error(`[WorkflowEngine] Failed to save initial checkpoint: ${r.message}`),new Error(`Failed to start workflow: Could not save checkpoint - ${r.message}`)}try{let r=(await yn(this.projectPath)).sourceFileCount??0,i=await Ed(this.projectPath,t),s=or(t),a=await bd({projectPath:this.projectPath,workflowId:this.workflowId,intentText:t,depthAssessment:s,pathwayType:i,sourceFileCount:r}),c=await Ji(this.projectPath,this.workflowId,a),l=await R(this.projectPath,this.workflowId);if(l){l.workflow_routing_path=c,l.pathway_type=i;let u=["discovery","inception","construction","operations"];l.skipped_phases=u.filter(d=>!zi(a,d)),await M(this.projectPath,l)}if(console.log(`[WorkflowEngine] Generated Workflow Routing: pathway=${i}, depth=${a.estimated_depth}, code-generations=${a.estimated_code_generations}`),a.stages.some(u=>!u.included)){let u=a.stages.filter(d=>!d.included).map(d=>`${d.phase}/${d.stage}`);console.log(`[WorkflowEngine] Stages excluded by plan: ${u.join(", ")}`)}}catch(o){console.warn(`[WorkflowEngine] Failed to generate Workflow Routing: ${o.message}`),console.warn("[WorkflowEngine] Workflow will proceed without adaptive phase selection")}try{let r=(await R(this.projectPath,this.workflowId))?.pathway_type;if(!r){let{isBrownfield:l}=await yn(this.projectPath);r=l?"brownfield-enhancement":"greenfield"}let i=ar.join(this.projectPath,".claude","CLAUDE.md"),s=$e.existsSync(i)?$e.readFileSync(i,"utf-8"):"",a=Pd(this.workflowId,r),c=Ad(s,a);$e.mkdirSync(ar.join(this.projectPath,".claude"),{recursive:!0}),$e.writeFileSync(i,c,"utf-8"),console.log("[WorkflowEngine] Injected AI-DLC rules into .claude/CLAUDE.md")}catch(o){console.error("[WorkflowEngine] Failed to inject AI-DLC rules into CLAUDE.md:",o)}}async resume(){let t;try{t=await R(this.projectPath,this.workflowId)}catch(o){let r=o;throw console.error(`[WorkflowEngine] Failed to load checkpoint for resume: ${r.message}`),new Error(`Failed to resume workflow: Could not load checkpoint - ${r.message}`)}if(!t)throw console.error(`[WorkflowEngine] No checkpoint found for workflow: ${this.workflowId}`),console.error("[WorkflowEngine] Available workflows: Run 'olympus workflow list' to see workflows"),new Error(`No checkpoint found for workflow: ${this.workflowId}`);if(t.status==="complete")return"Workflow already complete";if(t.status==="paused"){t.status="in_progress";try{await M(this.projectPath,t)}catch(o){let r=o;throw console.error(`[WorkflowEngine] Failed to update checkpoint status: ${r.message}`),new Error(`Failed to resume workflow: Could not save checkpoint - ${r.message}`)}}this.setupInterruptHandler();let n=t.current_stage;try{await this.executeStage(n)}catch(o){let r=o;console.error(`[WorkflowEngine] Failed to execute ${n} stage: ${r.message}`);try{let i=await R(this.projectPath,this.workflowId);i&&(i.status="paused",i.resume_context={...i.resume_context,error_message:r.message,failed_stage:n},await M(this.projectPath,i),console.log("[WorkflowEngine] Workflow saved as paused. Fix the issue and resume with `/continue`"))}catch(i){console.warn("[WorkflowEngine] Failed to save error checkpoint:",i.message)}throw new Error(`Failed to execute ${n} stage: ${r.message}`)}finally{this.cleanupInterruptHandler()}return`Resumed workflow from stage: ${n}`}async pause(){let t;try{t=await R(this.projectPath,this.workflowId)}catch(n){let o=n;throw console.error(`[WorkflowEngine] Failed to load checkpoint for pause: ${o.message}`),new Error(`Failed to pause workflow: Could not load checkpoint - ${o.message}`)}if(!t)throw console.error(`[WorkflowEngine] No checkpoint found for workflow: ${this.workflowId}`),new Error(`No checkpoint found for workflow: ${this.workflowId}`);t.status="paused";try{await M(this.projectPath,t)}catch(n){let o=n;throw console.error(`[WorkflowEngine] Failed to save paused checkpoint: ${o.message}`),new Error(`Failed to pause workflow: Could not save checkpoint - ${o.message}`)}return`aidlc-docs/${this.workflowId}/checkpoint.json`}async executeStage(t){if(t==="complete")throw new Error("No execution for complete stage");let n=await R(this.projectPath,this.workflowId);if(!n)throw new Error(`No checkpoint found for workflow: ${this.workflowId}`);switch(t){case"intent":await this.executeIntentStage(n);break;case"unit":await this.executeUnitStage(n);break;case"code-generation":await this.executeCodeGenerationStage(n);break}let o=OS(t);if(n.current_stage=o,o==="complete"){n.status="complete";try{let r=ar.join(this.projectPath,".claude","CLAUDE.md");if($e.existsSync(r)){let i=$e.readFileSync(r,"utf-8"),s=xd(i);$e.writeFileSync(r,s,"utf-8"),console.log("[WorkflowEngine] Removed AI-DLC rules from .claude/CLAUDE.md (workflow complete)")}}catch(r){console.error("[WorkflowEngine] Failed to remove AI-DLC rules from CLAUDE.md:",r)}}await M(this.projectPath,n)}async getStatus(){let t;try{t=await R(this.projectPath,this.workflowId)}catch(o){let r=o;throw console.error(`[WorkflowEngine] Failed to load checkpoint for status: ${r.message}`),new Error(`Failed to get workflow status: Could not load checkpoint - ${r.message}`)}if(!t)throw console.error(`[WorkflowEngine] No checkpoint found for workflow: ${this.workflowId}`),new Error(`No checkpoint found for workflow: ${this.workflowId}`);let n=[];return{workflow_id:t.workflow_id,feature_name:t.feature_name,current_stage:t.current_stage,status:t.status,artifacts:n,updated_at:t.updated_at}}async executePhase(t){let n=nr(this.projectPath,this.workflowId);if(n&&!zi(n,t)){console.log(`[WorkflowEngine] Skipping ${t} phase (excluded by Workflow Routing: ${n.phases[t]?.rationale||"no rationale"})`);let o=await R(this.projectPath,this.workflowId);if(o){let i=o;i.phases&&i.phases[t]&&(i.phases[t].status="complete",i.phases[t].completed_at=new Date().toISOString(),i.phases[t].gate_bypassed=!0,i.phases[t].bypass_reason="Excluded by Workflow Routing"),await M(this.projectPath,o)}let r=`${this.projectPath}/aidlc-docs/${this.workflowId}/manifest.json`;try{Ce(r,{phase:t,action:"bypassed",actor:"config",reason:`Excluded by Workflow Routing (pathway: ${n.pathway})`})}catch{}return}switch(t){case"discovery":{let o=`${this.projectPath}/aidlc-docs/${this.workflowId}/manifest.json`,r=await wd({projectPath:this.projectPath,workflowId:this.workflowId,featureName:this.featureName,manifestPath:o});r.gateRequired&&(console.log(`[WorkflowEngine] Discovery phase: ${r.artifactsGenerated.length} artifacts generated (${r.sourceFileCount} source files detected)`),console.log(`[WorkflowEngine] Discovery Gate: Review findings in aidlc-docs/${this.workflowId}/discovery/ before proceeding to Inception`));try{let i={type:"phase_complete",phase:"discovery",details:`${r.artifactsGenerated.length} artifacts generated, ${r.sourceFileCount} source files`},s={workflowId:this.workflowId,featureName:this.featureName,projectPath:this.projectPath,sessionId:"engine",phase:"discovery"},a=xe(i,s);oe(a)}catch(i){console.error("[WorkflowEngine] Failed to capture discovery phase discovery:",i)}break}case"inception":{let{InceptionOrchestrator:o}=await Promise.resolve().then(()=>(Qd(),zd)),r=new o,i=await R(this.projectPath,this.workflowId);if(!i)throw new Error(`No checkpoint found for workflow: ${this.workflowId}`);if(i.current_stage!=="intent"){console.log(`[WorkflowEngine] Skipping inception orchestrator \u2014 checkpoint already at stage '${i.current_stage}'`);break}if(!i.inception_stages){let s=nr(this.projectPath,this.workflowId),a=i;await r.initialize(this.projectPath,this.workflowId,a.pathway_type||"greenfield",s)}for(;!await r.isComplete(this.projectPath,this.workflowId);){let s=await r.executeNextStage(this.projectPath,this.workflowId);if(s.status==="awaiting_answers"||s.status==="review_required")break}try{let s={type:"phase_complete",phase:"inception",details:"Inception stages completed"},a={workflowId:this.workflowId,featureName:this.featureName,projectPath:this.projectPath,sessionId:"engine",phase:"inception"},c=xe(s,a);oe(c)}catch(s){console.error("[WorkflowEngine] Failed to capture inception phase discovery:",s)}break}case"construction":{let o=await R(this.projectPath,this.workflowId);if(o&&o.status==="awaiting_dev_review"){console.log("[WorkflowEngine] Waiting for developer review of technical specification (Risk Tier 3).");return}let r=bt(this.projectPath,this.workflowId,"intent"),i;try{i=$e.readFileSync(r,"utf-8")}catch{}let a=await new Ko(this.projectPath,this.workflowId).execute(i);if(!a.passed)throw console.error("[WorkflowEngine] Construction phase validation failed:",a.blocking_issues),new Error(`Construction phase validation failed: ${a.blocking_issues.join(", ")}`);try{let c={type:"phase_complete",phase:"construction",details:"Construction phase completed"},l={workflowId:this.workflowId,featureName:this.featureName,projectPath:this.projectPath,sessionId:"engine",phase:"construction"},u=xe(c,l);oe(u)}catch(c){console.error("[WorkflowEngine] Failed to capture construction phase discovery:",c)}break}case"operations":{let{generateOperationsArtifacts:o}=await Promise.resolve().then(()=>(rp(),op)),{loadManifest:r,registerArtifact:i,updatePhaseStatus:s}=await Promise.resolve().then(()=>(K(),Ht)),a=`${this.projectPath}/aidlc-docs/${this.workflowId}/manifest.json`,c=r(a),l=null;try{l=$e.readFileSync(bt(this.projectPath,this.workflowId,"intent"),"utf-8")}catch{}let u=await R(this.projectPath,this.workflowId),d="MEDIUM";if(c?.depth_assessment){let f=c.depth_assessment.total_score;f<=10?d="SHALLOW":f>=21&&(d="DEEP")}let p={workflowId:this.workflowId,featureName:this.featureName,manifest:c,specContent:l,buildLogContent:null,depthLevel:d},m=await o(p,this.projectPath);if(c){s(a,"operations","complete");for(let f of m.artifactsGenerated){let g=`aidlc-docs/${this.workflowId}/operations/${f}`,h=f.replace(/\.(md|json)$/,"").toUpperCase().replace(/-/g,"_");i(a,{id:`OPS-${h}`,type:h,phase:"operations",stage:"code-generation",path:g,validation_passed:!0,write_complete:!0,checksum:null})}}u&&(u.current_phase="operations",u.updated_at=new Date().toISOString(),await M(this.projectPath,u)),console.log(`[WorkflowEngine] Operations phase: Generated ${m.artifactsGenerated.length} artifacts (depth: ${d})`),console.log(`[WorkflowEngine] Operations artifacts: ${m.artifactsGenerated.join(", ")}`);try{let f={type:"phase_complete",phase:"operations",details:`${m.artifactsGenerated.length} artifacts generated (depth: ${d})`},g={workflowId:this.workflowId,featureName:this.featureName,projectPath:this.projectPath,sessionId:"engine",phase:"operations"},h=xe(f,g);oe(h)}catch(f){console.error("[WorkflowEngine] Failed to capture operations phase discovery:",f)}break}}}async approveWorkflowRouting(t){let n=nr(this.projectPath,this.workflowId);if(!n)throw new Error(`No Workflow Routing found for workflow: ${this.workflowId}`);n.approved_at=new Date().toISOString(),n.approved_by="human",await Ji(this.projectPath,this.workflowId,n);let o=await R(this.projectPath,this.workflowId);if(o){let i=o;if(i.inception_stages?.["workflow-planning"]){let s=i.inception_stages["workflow-planning"];s.status!=="completed"&&s.status!=="skipped"&&(s.status="completed",s.completed_at=new Date().toISOString(),await M(this.projectPath,o))}}let r=`${this.projectPath}/aidlc-docs/${this.workflowId}/manifest.json`;try{Ce(r,{phase:"inception",action:"approved",actor:"human",reason:t||"Workflow Routing approved"})}catch{}console.log("[WorkflowEngine] Workflow Routing approved")}setupInterruptHandler(){this.interruptHandler=async()=>{console.log(`
1044
922
  [WorkflowEngine] Workflow interrupted - saving checkpoint...`);try{let t=await R(this.projectPath,this.workflowId);t&&(t.status="paused",t.updated_at=new Date().toISOString(),t.resume_context={...t.resume_context,interrupted_at:new Date().toISOString(),current_stage:t.current_stage,message:`Workflow interrupted during ${t.current_stage} stage`},await M(this.projectPath,t),console.log("[WorkflowEngine] Checkpoint saved. Resume with `/continue`"))}catch(t){console.error("[WorkflowEngine] Failed to save checkpoint on interrupt:",t)}process.exit(0)},process.on("SIGINT",this.interruptHandler)}cleanupInterruptHandler(){this.interruptHandler&&(process.off("SIGINT",this.interruptHandler),this.interruptHandler=null)}async executeIntentStage(t){let n=t.resume_context?.initial_prompt||"No initial prompt provided";console.log(`[WorkflowEngine] Executing INTENT stage for feature: ${this.featureName}`),console.log(`[WorkflowEngine] Initial prompt: ${n}`),console.log("[WorkflowEngine] Generating merged INTENT artifact with full inception content");let o=`intent-${this.workflowId}`,r=new Date().toISOString(),i=`---
1045
923
  id: ${o}
1046
924
  title: ${this.featureName}
@@ -2079,7 +1957,7 @@ ${u.map(m=>` - ${m}`).join(`
2079
1957
 
2080
1958
  ${d}${p}
2081
1959
 
2082
- Fix the failing checks and re-run the BOLT execution.`}}}catch(t){return console.error("[Olympus CI Review] Error in ciReviewPipeline:",t),{continue:!0}}}function Rg(){_({name:"ciReviewPipeline",event:"PostToolUse",priority:79,matcher:"task",handler:kT})}ye();function Og(e,t=2){let o=e.toLowerCase().replace(/[^\w\s]/g,"").split(/\s+/).filter(i=>i.length>0);if(o.length<t)return new Set(o);let r=new Set;for(let i=0;i<=o.length-t;i++)r.add(o.slice(i,i+t).join(" "));return r}function ba(e,t){let n=Og(e),o=Og(t),r=new Set([...n].filter(s=>o.has(s))),i=new Set([...n,...o]);return i.size>0?r.size/i.size:0}function wT(e,t=.1){let n=[],o=new Set;for(let r of e){if(o.has(r.id))continue;let i=[r];o.add(r.id);for(let s of e){if(o.has(s.id))continue;ba(r.user_message,s.user_message)>=t&&(i.push(s),o.add(s.id))}n.push(i)}return n}function Ag(e,t=3,n=1e3){let r=e.slice(-n).filter(s=>s.feedback_category==="correction"||s.feedback_category==="clarification"||s.feedback_category==="explicit_preference");return wT(r).filter(s=>s.length>=t).map(s=>{let a=s.sort((p,m)=>new Date(m.timestamp).getTime()-new Date(p.timestamp).getTime())[0],c=s.reduce((p,m)=>p+m.confidence,0)/s.length,u=new Set(s.map(p=>p.project_path)).size===1?"project":"global",d=_T(s);return{pattern:ST(s),confidence:c,evidence_count:s.length,evidence_examples:s.slice(0,3).map(p=>p.user_message),scope:u,category:d}})}function ST(e){let t=new Map;for(let r of e){let i=r.user_message.toLowerCase().replace(/[^\w\s]/g,"").split(/\s+/).filter(s=>s.length>3);for(let s of i)t.set(s,(t.get(s)||0)+1)}let n=[...t.entries()].sort((r,i)=>i[1]-r[1]).slice(0,3).map(([r])=>r);return e[0].user_message.substring(0,100)+(n.length>0?` [themes: ${n.join(", ")}]`:"")}function _T(e){let t=e.map(n=>n.user_message).join(" ").toLowerCase();return/typescript|eslint|prettier|format|indent|naming/i.test(t)?"style":/test|build|npm|yarn|run|command|install/i.test(t)?"tooling":/verbose|brief|explain|detail|ask|confirm/i.test(t)?"communication":"behavior"}var vT={verbosity:"unknown",autonomy:"unknown",explanation_depth:"unknown",explicit_rules:[],inferred_preferences:[],recurring_corrections:[],last_updated:new Date().toISOString()},TT=30;function ET(e){let t=e.filter(o=>o.feedback_category==="explicit_preference"),n=[];for(let o of t){let r=o.user_message.match(/always\s+(.+?)(?:\.|$)/i),i=o.user_message.match(/never\s+(.+?)(?:\.|$)/i);r&&n.push(`Always: ${r[1].trim()}`),i&&n.push(`Never: ${i[1].trim()}`)}return[...new Set(n)]}function bT(e){let t=e.filter(o=>/too (long|verbose|much|wordy)/i.test(o.user_message)).length,n=e.filter(o=>/more (detail|info|explanation)|too (brief|short)/i.test(o.user_message)).length;return t>=3&&t>n?"concise":n>=3&&n>t?"detailed":"unknown"}function CT(e){let t=e.filter(o=>/ask (me )?(first|before)|don't assume|confirm/i.test(o.user_message)).length,n=e.filter(o=>/just (do|make|fix)|don't ask|stop asking/i.test(o.user_message)).length;return t>=3&&t>n?"ask_first":n>=3&&n>t?"just_do_it":t>=2&&n>=2?"balanced":"unknown"}function xg(e,t,n){let o={...e},r=ET(t);o.explicit_rules=[...new Set([...o.explicit_rules,...r])];let i=bT(t);i!=="unknown"&&(o.verbosity=i);let s=CT(t);s!=="unknown"&&(o.autonomy=s);let a=n.filter(l=>l.confidence>.7&&l.scope==="global").map(l=>l.pattern);o.inferred_preferences=[...new Set([...o.inferred_preferences,...a])];for(let l of n){let u=o.recurring_corrections.find(d=>ba(d.pattern,l.pattern)>.5);u?(u.count=l.evidence_count,u.last_seen=new Date().toISOString(),u.examples=l.evidence_examples):o.recurring_corrections.push({pattern:l.pattern,count:l.evidence_count,last_seen:new Date().toISOString(),examples:l.evidence_examples})}let c=Date.now();if(o.recurring_corrections=o.recurring_corrections.filter(l=>{if(!l.last_seen)return!0;let u=Date.parse(l.last_seen);return isNaN(u)?!0:c-u<=TT*864e5}),n.length>0){let l=new Set(n.map(u=>u.pattern));o.inferred_preferences=o.inferred_preferences.filter(u=>l.has(u))}return o.last_updated=new Date().toISOString(),o}function Pg(){return{...vT,last_updated:new Date().toISOString()}}var wo=require("path"),Wn=require("fs"),IT=3,RT=10;function OT(e){let t=(0,wo.join)(e,"feedback-log.jsonl"),n=(0,wo.join)(e,"agent-performance.json");if(!(0,Wn.existsSync)(t))return!1;if(!(0,Wn.existsSync)(n))return!0;try{let o=(0,Wn.statSync)(t),r=(0,Wn.statSync)(n);return o.mtime>r.mtime}catch(o){return console.error("[Olympus Learning Aggregation] Failed to check file times:",o),!0}}function $g(){_({name:"learningAggregation",event:"Stop",priority:95,handler:async e=>{try{if(!e.directory)return{continue:!0};let t=fe();if(!OT(t))return{continue:!0};let n=Io();if(n.length<IT)return{continue:!0};let o=new Set;for(let d of n)d.agent_used&&o.add(d.agent_used);let r=Array.from(o);if(r.length===0)return{continue:!0};let i={};for(let d of r){let p=Ro(d,n);p&&(i[d]=p)}let s=(0,wo.join)(t,"agent-performance.json");it(s,i);let a=(0,wo.join)(t,"user-preferences.json"),c=me(a,Pg()),l=[];if(n.length>=RT)try{l=Ag(n)}catch(d){console.error("[Olympus Learning Aggregation] Pattern extraction failed:",d)}let u=xg(c,n,l);it(a,u)}catch(t){console.error("[Olympus Learning Aggregation] Error in aggregation handler:",t)}return{continue:!0}}})}var Ia=["discovery","inception","construction","operations"],AT={draft:"o",active:"+",fulfilled:"++",violated:"X",stale:"!"},xT={0:"Baseline",1:"Earned",2:"Extended",3:"Trusted"};function Ng(e,t=null,n=null){let o=PT(e),r=NT(e),i=DT(e.risks),s=MT(e.gate_audit),a=jT(t),c=LT(e.alignment_checks),l=FT(e.depth_assessment),u=UT(e.risk_tier),d=HT(e,o),p=WT(e),m=n?.inception_stages?BT(n.inception_stages,n.current_inception_stage):null,f=[`# Workflow Status: ${e.feature_name}`,`ID: ${e.workflow_id}`,"",d,"","## Phase Progress",...o.map(g=>$T(g)),"",...m?[m,""]:[],p,l,u,a,"","## Artifacts",r,"","## Alignment",c,"","## Risk Summary",i,"","## Gate Audit",s].filter(g=>g!==null).join(`
1960
+ Fix the failing checks and re-run the BOLT execution.`}}}catch(t){return console.error("[Olympus CI Review] Error in ciReviewPipeline:",t),{continue:!0}}}function Rg(){_({name:"ciReviewPipeline",event:"PostToolUse",priority:79,matcher:"task",handler:kT})}ye();function Og(e,t=2){let o=e.toLowerCase().replace(/[^\w\s]/g,"").split(/\s+/).filter(i=>i.length>0);if(o.length<t)return new Set(o);let r=new Set;for(let i=0;i<=o.length-t;i++)r.add(o.slice(i,i+t).join(" "));return r}function ba(e,t){let n=Og(e),o=Og(t),r=new Set([...n].filter(s=>o.has(s))),i=new Set([...n,...o]);return i.size>0?r.size/i.size:0}function wT(e,t=.1){let n=[],o=new Set;for(let r of e){if(o.has(r.id))continue;let i=[r];o.add(r.id);for(let s of e){if(o.has(s.id))continue;ba(r.user_message,s.user_message)>=t&&(i.push(s),o.add(s.id))}n.push(i)}return n}function Ag(e,t=3,n=1e3){let r=e.slice(-n).filter(s=>s.feedback_category==="correction"||s.feedback_category==="clarification"||s.feedback_category==="explicit_preference");return wT(r).filter(s=>s.length>=t).map(s=>{let a=s.sort((p,m)=>new Date(m.timestamp).getTime()-new Date(p.timestamp).getTime())[0],c=s.reduce((p,m)=>p+m.confidence,0)/s.length,u=new Set(s.map(p=>p.project_path)).size===1?"project":"global",d=_T(s);return{pattern:ST(s),confidence:c,evidence_count:s.length,evidence_examples:s.slice(0,3).map(p=>p.user_message.substring(0,150)),scope:u,category:d}})}function ST(e){let t=new Map;for(let r of e){let i=r.user_message.toLowerCase().replace(/[^\w\s]/g,"").split(/\s+/).filter(s=>s.length>3);for(let s of i)t.set(s,(t.get(s)||0)+1)}let n=[...t.entries()].sort((r,i)=>i[1]-r[1]).slice(0,3).map(([r])=>r);return e[0].user_message.substring(0,100)+(n.length>0?` [themes: ${n.join(", ")}]`:"")}function _T(e){let t=e.map(n=>n.user_message).join(" ").toLowerCase();return/typescript|eslint|prettier|format|indent|naming/i.test(t)?"style":/test|build|npm|yarn|run|command|install/i.test(t)?"tooling":/verbose|brief|explain|detail|ask|confirm/i.test(t)?"communication":"behavior"}var vT={verbosity:"unknown",autonomy:"unknown",explanation_depth:"unknown",explicit_rules:[],inferred_preferences:[],recurring_corrections:[],last_updated:new Date().toISOString()},TT=30;function ET(e){let t=e.filter(o=>o.feedback_category==="explicit_preference"),n=[];for(let o of t){let r=o.user_message.match(/always\s+(.+?)(?:\.|$)/i),i=o.user_message.match(/never\s+(.+?)(?:\.|$)/i);r&&n.push(`Always: ${r[1].trim()}`),i&&n.push(`Never: ${i[1].trim()}`)}return[...new Set(n)]}function bT(e){let t=e.filter(o=>/too (long|verbose|much|wordy)/i.test(o.user_message)).length,n=e.filter(o=>/more (detail|info|explanation)|too (brief|short)/i.test(o.user_message)).length;return t>=3&&t>n?"concise":n>=3&&n>t?"detailed":"unknown"}function CT(e){let t=e.filter(o=>/ask (me )?(first|before)|don't assume|confirm/i.test(o.user_message)).length,n=e.filter(o=>/just (do|make|fix)|don't ask|stop asking/i.test(o.user_message)).length;return t>=3&&t>n?"ask_first":n>=3&&n>t?"just_do_it":t>=2&&n>=2?"balanced":"unknown"}function xg(e,t,n){let o={...e},r=ET(t);o.explicit_rules=[...new Set([...o.explicit_rules,...r])];let i=bT(t);i!=="unknown"&&(o.verbosity=i);let s=CT(t);s!=="unknown"&&(o.autonomy=s);let a=n.filter(l=>l.confidence>.7&&l.scope==="global").map(l=>l.pattern);o.inferred_preferences=[...new Set([...o.inferred_preferences,...a])];for(let l of n){let u=o.recurring_corrections.find(d=>ba(d.pattern,l.pattern)>.5);u?(u.count=l.evidence_count,u.last_seen=new Date().toISOString(),u.examples=l.evidence_examples):o.recurring_corrections.push({pattern:l.pattern,count:l.evidence_count,last_seen:new Date().toISOString(),examples:l.evidence_examples})}let c=Date.now();if(o.recurring_corrections=o.recurring_corrections.filter(l=>{if(!l.last_seen)return!0;let u=Date.parse(l.last_seen);return isNaN(u)?!0:c-u<=TT*864e5}),n.length>0){let l=new Set(n.map(u=>u.pattern));o.inferred_preferences=o.inferred_preferences.filter(u=>l.has(u))}return o.last_updated=new Date().toISOString(),o}function Pg(){return{...vT,last_updated:new Date().toISOString()}}var wo=require("path"),Wn=require("fs"),IT=3,RT=10;function OT(e){let t=(0,wo.join)(e,"feedback-log.jsonl"),n=(0,wo.join)(e,"agent-performance.json");if(!(0,Wn.existsSync)(t))return!1;if(!(0,Wn.existsSync)(n))return!0;try{let o=(0,Wn.statSync)(t),r=(0,Wn.statSync)(n);return o.mtime>r.mtime}catch(o){return console.error("[Olympus Learning Aggregation] Failed to check file times:",o),!0}}function $g(){_({name:"learningAggregation",event:"Stop",priority:95,handler:async e=>{try{if(!e.directory)return{continue:!0};let t=fe();if(!OT(t))return{continue:!0};let n=Io();if(n.length<IT)return{continue:!0};let o=new Set;for(let d of n)d.agent_used&&o.add(d.agent_used);let r=Array.from(o);if(r.length===0)return{continue:!0};let i={};for(let d of r){let p=Ro(d,n);p&&(i[d]=p)}let s=(0,wo.join)(t,"agent-performance.json");it(s,i);let a=(0,wo.join)(t,"user-preferences.json"),c=me(a,Pg()),l=[];if(n.length>=RT)try{l=Ag(n)}catch(d){console.error("[Olympus Learning Aggregation] Pattern extraction failed:",d)}let u=xg(c,n,l);it(a,u)}catch(t){console.error("[Olympus Learning Aggregation] Error in aggregation handler:",t)}return{continue:!0}}})}var Ia=["discovery","inception","construction","operations"],AT={draft:"o",active:"+",fulfilled:"++",violated:"X",stale:"!"},xT={0:"Baseline",1:"Earned",2:"Extended",3:"Trusted"};function Ng(e,t=null,n=null){let o=PT(e),r=NT(e),i=DT(e.risks),s=MT(e.gate_audit),a=jT(t),c=LT(e.alignment_checks),l=FT(e.depth_assessment),u=UT(e.risk_tier),d=HT(e,o),p=WT(e),m=n?.inception_stages?BT(n.inception_stages,n.current_inception_stage):null,f=[`# Workflow Status: ${e.feature_name}`,`ID: ${e.workflow_id}`,"",d,"","## Phase Progress",...o.map(g=>$T(g)),"",...m?[m,""]:[],p,l,u,a,"","## Artifacts",r,"","## Alignment",c,"","## Risk Summary",i,"","## Gate Audit",s].filter(g=>g!==null).join(`
2083
1961
  `);return{summary:d,phaseProgress:o,artifactTree:r,riskSummary:i,gateSummary:s,trustDisplay:a,alignmentSummary:c,fullReport:f}}function PT(e){return Ia.map(t=>{let n=e.phases[t],o=e.artifacts.filter(a=>a.phase===t),r=o.length;if(r===0)return{phase:t,percentage:n.status==="complete"?100:0,status:n.status,artifactCount:0};let i=o.filter(a=>a.contract_status==="active"||a.contract_status==="fulfilled").length,s=Math.round(i/r*100);return{phase:t,percentage:s,status:n.status,artifactCount:r}})}function $T(e){let n=Math.round(e.percentage/100*20),o=20-n,r="=".repeat(n)+"-".repeat(o);return`${(e.phase.charAt(0).toUpperCase()+e.phase.slice(1)).padEnd(8)} [${r}] ${String(e.percentage).padStart(3)}% (${e.status}) ${e.artifactCount} artifacts`}function NT(e){let t=[];for(let n of Ia){let o=e.artifacts.filter(s=>s.phase===n);if(o.length===0)continue;let r=n.charAt(0).toUpperCase()+n.slice(1);t.push(`[${r}]`);let i=new Map;for(let s of o){let a=s.stage;i.has(a)||i.set(a,[]),i.get(a).push(s)}for(let[s,a]of i){t.push(` ${s}/`);for(let c of a){let l=AT[c.contract_status]??"?",u=c.validation_passed===!0?"v":c.validation_passed===!1?"x":"-";t.push(` [${l}] ${c.id} (${c.type}) [${u}]`)}}}return t.join(`
2084
1962
  `)}function DT(e){if(e.length===0)return"No risks registered";let t=e.filter(a=>a.status==="open").length,n=e.filter(a=>a.status==="mitigated").length,o=e.filter(a=>a.status==="accepted").length,r=e.filter(a=>a.status==="closed").length,i=[`Total: ${e.length} | Open: ${t} | Mitigated: ${n} | Accepted: ${o} | Closed: ${r}`],s=e.filter(a=>a.status==="open");for(let a of s)i.push(` [OPEN] ${a.id}: ${a.description} (${a.likelihood}/${a.impact})`);return i.join(`
2085
1963
  `)}function MT(e){if(e.length===0)return"No gate transitions recorded";let t=e.filter(i=>i.action==="approved").length,n=e.filter(i=>i.action==="rejected").length,o=e.filter(i=>i.action==="bypassed").length,r=[`Total: ${e.length} | Approved: ${t} | Rejected: ${n} | Bypassed: ${o}`];for(let i of e){let s=i.phase.charAt(0).toUpperCase()+i.phase.slice(1);r.push(` [${i.action.toUpperCase()}] ${s} by ${i.actor}${i.reason?": "+i.reason:""}`)}return r.join(`
@@ -24,7 +24,7 @@ export declare const HOOKS_DIR: string;
24
24
  export declare const SETTINGS_FILE: string;
25
25
  export declare const VERSION_FILE: string;
26
26
  /** Current version - MUST match package.json */
27
- export declare const VERSION = "4.0.1";
27
+ export declare const VERSION = "4.0.3";
28
28
  /** Installation result */
29
29
  export interface InstallResult {
30
30
  success: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA+BH,0CAA0C;AAC1C,eAAO,MAAM,iBAAiB,QAA6B,CAAC;AAC5D,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,SAAS,QAAmC,CAAC;AAC1D,eAAO,MAAM,aAAa,QAA2C,CAAC;AACtE,eAAO,MAAM,YAAY,QAAmD,CAAC;AAE7E,gDAAgD;AAChD,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,0BAA0B;AAC1B,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAYD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAOxF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAQ3C;AA2UD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAyB7C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,CA2anE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAehG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA+BH,0CAA0C;AAC1C,eAAO,MAAM,iBAAiB,QAA6B,CAAC;AAC5D,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,SAAS,QAAmC,CAAC;AAC1D,eAAO,MAAM,aAAa,QAA2C,CAAC;AACtE,eAAO,MAAM,YAAY,QAAmD,CAAC;AAE7E,gDAAgD;AAChD,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,0BAA0B;AAC1B,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAYD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAOxF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAQ3C;AA2UD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAyB7C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,CAkbnE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAehG"}