@systemfsoftware/omp-claude-compat 1.2.3 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ import{$ as e,$t as t,A as n,B as r,Bn as i,C as a,D as o,Dt as s,E as c,Fn as l,G as u,H as d,In as f,J as p,K as m,L as h,Lt as ee,Mn as te,Mt as ne,Nn as g,O as _,Ot as v,P as y,Pn as re,Qt as ie,R as b,Rn as ae,S as x,T as S,U as C,Ut as oe,W as w,b as T,bt as se,et as ce,it as le,j as E,jn as ue,k as de,kn as D,kt as fe,r as pe,s as me,tt as he,w as ge,xt as _e,y as O,z as k,zn as A,zt as j}from"./esm-CeQhljd9.js";import{f as ve,l as ye,o as be,p as xe,s as Se,t as Ce,u as we}from"./CommandExecutor-WpnYtse1.js";import{a as Te,c as M,i as N,l as P,m as Ee,o as De,r as Oe,s as ke,u as F}from"./dist-DbemdM50.js";import{homedir as Ae}from"node:os";const I=[];function je(e){let t=e.trim();t.length!==0&&(I.length>=64&&I.shift(),I.push(t))}function Me(){return I.splice(0,I.length)}const Ne=`PreToolUse.PostToolUse.PostToolUseFailure.PostToolBatch.UserPromptSubmit.UserPromptExpansion.SessionStart.SessionEnd.Stop.StopFailure.PreCompact.PostCompact.PermissionRequest.PermissionDenied.SubagentStart.SubagentStop.MessageDisplay.Notification.Setup.TaskCreated.TaskCompleted.TeammateIdle.InstructionsLoaded.ConfigChange.CwdChanged.FileChanged.WorktreeCreate.WorktreeRemove.Elicitation.ElicitationResult`.split(`.`),Pe=[`PreToolUse`,`PostToolUse`,`PostToolUseFailure`,`UserPromptSubmit`,`SessionStart`,`SessionEnd`,`Stop`,`PreCompact`,`PostCompact`],Fe={PermissionRequest:"OMP emits `tool_approval_requested`, but the event exists to allow or deny and OMP ignores the handler return. Express approval policy through OMP native approval configuration instead.",PermissionDenied:"OMP emits `tool_approval_resolved` with `approved: false`, which reports a manual decline by the user — the case Claude Code explicitly excludes, since this event fires only for auto-classifier denials.",SubagentStart:"OMP emits `agent_start`, but its payload carries no agent identity and it fires for the main agent turn loop too, so a bridge would fabricate subagent events that never happened.",SubagentStop:'OMP emits `agent_end` with the same identity gap, so a "subagent stopped" hook would fire on every main-agent turn end.',MessageDisplay:"The event exists to rewrite what Claude Code renders via `displayContent`; OMP `message_update` / `message_end` expose no equivalent control over rendering.",PostToolBatch:`OMP dispatches tool calls individually and exposes no end-of-batch signal.`,UserPromptExpansion:"OMP has no signal for a typed command expanding before it reaches the model; its `input` event fires after expansion would already have happened.",StopFailure:`OMP exposes no signal distinguishing a failed stop from an ordinary one.`,Notification:`Notifications are OMP-side UI; no extension event is emitted when one is raised.`,Setup:`OMP has no first-run setup lifecycle event.`,TaskCreated:`The OMP todo surface emits no per-task creation event to extensions.`,TaskCompleted:`The OMP todo surface emits no per-task completion event to extensions.`,TeammateIdle:`OMP has no teammate concept and emits no idle signal for one.`,InstructionsLoaded:`OMP loads instruction files without emitting an extension event.`,ConfigChange:`OMP does not notify extensions when its configuration changes.`,CwdChanged:`OMP exposes no working-directory change event.`,FileChanged:`OMP has no file-watch surface exposed to extensions.`,WorktreeCreate:`OMP emits no worktree lifecycle events.`,WorktreeRemove:`OMP emits no worktree lifecycle events.`,Elicitation:`MCP elicitation is not surfaced to OMP extensions.`,ElicitationResult:`MCP elicitation is not surfaced to OMP extensions.`},Ie=[`PreToolUse`,`PostToolUse`,`PostToolUseFailure`,`PermissionRequest`,`PermissionDenied`],Le={PreCompact:"OMP `session_before_compact` does not say whether the compaction was manual or automatic, so a `trigger` matcher cannot be evaluated.",PostCompact:"OMP `session_compact` reports only whether an extension requested the compaction, not whether it was manual or automatic, so a `trigger` matcher cannot be evaluated.",SessionEnd:"OMP `session_shutdown` fires on process exit and carries no reason, so a `reason` matcher cannot be evaluated."},Re={SessionStart:{startup:{_tag:`Reachable`},compact:{_tag:`Reachable`},fork:{_tag:`Reachable`},resume:{_tag:`Partial`,reason:'covers a mid-session resume, which arrives as `session_switch` with `reason: "resume"`. A cold start under `--resume` never emits that signal — it reaches extensions through a bare `session_start` — so it presents as `startup` and a resume-scoped hook does not run there.'},clear:{_tag:`Unreachable`,reason:`OMP emits no signal when a session is cleared.`}}},ze=o({code:ge,stdout:c,stderr:c});var L=class extends _()(`Block`,{reason:c}){},R=class extends _()(`Allow`,{updatedInput:h(S({key:c,value:E}))}){},z=class extends _()(`Warning`,{message:c}){};n(L,R,z);var Be=class extends _()(`Blocked`,{reason:c}){},B=class extends _()(`Continue`,{warning:h(c),updatedInput:h(S({key:c,value:E}))}){};n(Be,B);const Ve=n(o({type:x(`command`),command:c,args:h(O(c)),async:h(T),asyncRewake:h(T),shell:h(x(`bash`,`powershell`)),timeout:h(ge),if:h(c),statusMessage:h(c),once:h(T)}),o({type:x(`http`,`mcp_tool`,`prompt`,`agent`)})),V=o({matcher:h(c),hooks:O(Ve)}),H=o({PreToolUse:b(O(V),{exact:!0,default:()=>[]}),PostToolUse:b(O(V),{exact:!0,default:()=>[]}),PostToolUseFailure:b(O(V),{exact:!0,default:()=>[]}),UserPromptSubmit:b(O(V),{exact:!0,default:()=>[]}),Stop:b(O(V),{exact:!0,default:()=>[]}),SessionStart:b(O(V),{exact:!0,default:()=>[]}),SessionEnd:b(O(V),{exact:!0,default:()=>[]}),PreCompact:b(O(V),{exact:!0,default:()=>[]}),PostCompact:b(O(V),{exact:!0,default:()=>[]})}),He=o({hooks:H,disableAllHooks:h(T)}),Ue=y(n(He,r(o({...H.fields,disableAllHooks:h(T),hooks:h(a)}),He,{strict:!0,decode:({disableAllHooks:e,...t})=>le(e===void 0?{hooks:t}:{hooks:t,disableAllHooks:e}),encode:(e,t,n)=>he(new p(n,e,`Decode-only`))}))),U=Pe,We=e(S({key:c,value:E})),Ge=[],Ke=e(O(o({matcher:h(c),hooks:b(O(o({type:h(c)})),{exact:!0,default:()=>[]})})));function qe(e){return te(We(e),e=>g(We(e.hooks),{onNone:()=>({namespace:e,outer:e,isWrapped:!1}),onSome:t=>({namespace:t,outer:e,isWrapped:!0})}))}const W=e=>e.replaceAll(/[\p{Cc}\p{Cf}]/gu,`�`),Je={unrecognized:[],notCarried:[],matcherNotEvaluable:[],matcherOutOfReach:[],shadowed:[],disabled:[]},Ye=Ne,Xe=Fe,Ze=Le,Qe=Re,$e=e=>D(Ke(e),()=>Ge).flatMap(e=>e.matcher===void 0?[]:[e.matcher]),et=e=>$e(e).length>0,tt=e=>u(e).pipe(w(`Reachable`,()=>re()),w(`Partial`,e=>l(e.reason)),w(`Unreachable`,e=>l(e.reason)),d);function nt(e){return g(qe(e),{onNone:()=>Je,onSome:({isWrapped:e,namespace:t,outer:n})=>{let r=[],i=[],a=[],o=[],s=[];for(let n of Object.keys(t)){if(!e&&n===`disableAllHooks`)continue;let s=Xe[n];if(s!==void 0){i.push({event:W(n),reason:s});continue}if(!Ye.includes(n)){r.push({event:W(n),reason:`not in this bridge's catalog (Claude Code hooks reference 2026-07-28)`});continue}let c=Ze[n];c!==void 0&&et(t[n])&&a.push({event:W(n),reason:c});let l=Qe[n];l!==void 0&&o.push(...$e(t[n]).flatMap(e=>{let t=l[e];return t===void 0?[]:g(tt(t),{onNone:()=>[],onSome:t=>[{event:`${W(n)} (matcher "${W(e)}")`,reason:t}]})}))}if(e)for(let e of Object.keys(n))Ye.includes(e)&&s.push({event:W(e),reason:"ignored: this file wraps its hooks under `hooks`, so a group repeated at the top level is never read"});return{unrecognized:r,notCarried:i,matcherNotEvaluable:a,matcherOutOfReach:o,shadowed:s,disabled:[]}}})}function rt(e){let t=e.find(e=>!e.managed&&e.settings.disableAllHooks===!0);if(t===void 0)return[];let n=`switched off by \`disableAllHooks\` in ${W(t.label)}`;return e.filter(e=>!e.managed).flatMap(e=>U.filter(t=>e.settings.hooks[t].length>0).map(e=>({event:e,reason:n})))}function it(e){return g(qe(e),{onNone:()=>[],onSome:({namespace:e})=>{let t=new Set;for(let n of U){let r=D(Ke(e[n]),()=>Ge);for(let e of r)for(let n of e.hooks)n.type!==void 0&&n.type!==`command`&&t.add(W(n.type))}return Array.from(t)}})}function at(e){let t={PreToolUse:[],PostToolUse:[],PostToolUseFailure:[],UserPromptSubmit:[],SessionStart:[],SessionEnd:[],Stop:[],PreCompact:[],PostCompact:[]};if(e.some(e=>e.managed&&e.settings.disableAllHooks===!0))return{hooks:t};let n=e.some(e=>!e.managed&&e.settings.disableAllHooks===!0);for(let r of e)if(!(n&&!r.managed))for(let e of U)t[e]=t[e].concat(Array.from(r.settings.hooks[e]));return{hooks:t}}const ot=y(k(o({decision:h(c),reason:h(c),hookSpecificOutput:h(o({permissionDecision:h(c),permissionDecisionReason:h(c),updatedInput:h(S({key:c,value:E}))}))}))),st=Symbol.for(`@systemfsoftware/omp-claude-compat/InterpretHookCommand`);var ct=class extends _()(`InterpretHookCommand`,{result:ze,event:c}){[st]=st};const lt=Symbol.for(`@systemfsoftware/omp-claude-compat/HookVerdictError`);var ut=class extends de()(`HookVerdictError`,{raw:c}){[lt]=lt};const G=Symbol.for(`@systemfsoftware/omp-claude-compat/ExitKind`);var dt=class extends _()(`ExitBlock`,{}){[G]=G},ft=class extends _()(`ExitDecisionJson`,{}){[G]=G},pt=class extends _()(`ExitNoDecision`,{}){[G]=G},mt=class extends _()(`ExitOther`,{}){[G]=G};n(dt,ft,pt,mt);const ht=e=>u(e.trim()).pipe(m(e=>e.startsWith(`{`),()=>new ft({})),C(()=>new pt({}))),gt=e=>u(e.code).pipe(m(2,()=>new dt({})),m(0,()=>ht(e.stdout)),C(()=>new mt({}))),_t=(e,t)=>u(e.trim()).pipe(m(``,()=>`Blocked by ${t} hook`),C(e=>e)),vt=(e,t)=>u(e.hookSpecificOutput?.permissionDecision??e.decision).pipe(m(`deny`,()=>new L({reason:e.hookSpecificOutput?.permissionDecisionReason??`Blocked by ${t} hook`})),m(`block`,()=>new L({reason:e.reason??`Blocked by ${t} hook`})),C(()=>new R({updatedInput:e.hookSpecificOutput?.updatedInput}))),yt=e=>u(e.trim()).pipe(m(``,()=>new R({})),C(e=>new z({message:e}))),bt=e=>u(gt(e.result)).pipe(w(`ExitBlock`,()=>i(new L({reason:_t(e.result.stderr,e.event)}))),w(`ExitNoDecision`,()=>i(new R({}))),w(`ExitDecisionJson`,()=>A(ot(e.result.stdout),{onLeft:()=>ae(new ut({raw:e.result.stdout})),onRight:t=>i(vt(t,e.event))})),w(`ExitOther`,()=>i(yt(e.result.stderr))),d),xt=Le,St=Ie,Ct=s(`loadSettingsFile`)(function*(e){let t=yield*(yield*Ee).readFileString(e).pipe(se(()=>j(``)));if(t===``)return null;let n=y(k(S({key:c,value:E})))(t);if(f(n))return null;let r=n.right,i=Ue(r);return f(i)?null:i.right}),K=`/etc/claude-code/managed-settings.json`,wt=e=>[`${Ae()}/.claude/settings.json`,`${e}/.claude/settings.json`,`${e}/.claude/settings.local.json`,K],Tt=s(`loadSettings`)(function*(e){return yield*Et(wt(e))}),Et=s(`loadSettingsWithPaths`)(function*(e,t=K){let n=[];for(let r of e){let e=yield*Ct(r);e!==null&&n.push({settings:e,managed:r===t})}return n.length===0?null:at(n)}),q=e=>e.filter((t,n)=>e.findIndex(e=>e.event===t.event)===n),Dt=e=>[...e.unrecognized.map(e=>` ${e.event}: ${e.reason}`),...e.notCarried.map(e=>` ${e.event}: not carried by this bridge — ${e.reason}`),...e.matcherNotEvaluable.map(e=>` ${e.event}: hook skipped, matcher not evaluable — ${e.reason}`),...e.matcherOutOfReach.map(e=>` ${e.event}: ${e.reason}`),...e.shadowed.map(e=>` ${e.event}: ${e.reason}`),...e.disabled.map(e=>` ${e.event}: ${e.reason}`)],Ot=s(`collectSettingsGapsWithPaths`)(function*(e){let t=yield*Ee,n=[],r=[],i=[],a=[],o=[],s=[],l=[],u=[];for(let d of e){let e=yield*t.readFileString(d).pipe(se(()=>j(``)));if(e===``)continue;let p=y(k(S({key:c,value:E})))(e);if(f(p)){u.push(d);continue}let m=nt(p.right);n.push(...m.unrecognized),r.push(...m.notCarried),i.push(...m.matcherNotEvaluable),a.push(...m.matcherOutOfReach),o.push(...m.shadowed),l.push(...it(p.right));let h=Ue(p.right);f(h)?u.push(d):s.push({settings:h.right,managed:d===K,label:d})}return{coverage:{unrecognized:q(n),notCarried:q(r),matcherNotEvaluable:q(i),matcherOutOfReach:q(a),shadowed:q(o),disabled:q(rt(s))},unsupportedHookTypes:Array.from(new Set(l)),malformedFiles:Array.from(new Set(u))}}),kt=s(`collectSettingsGaps`)(function*(e){return yield*Ot(wt(e))}),At={UserPromptSubmit:30},jt={sh:[`sh`,`-c`],bash:[`bash`,`-c`],powershell:[`powershell`,`-Command`]},J=s(`runHookScript`)(function*(e,t,n,r){let i=yield*Ce,a=(e.timeout??At[r]??600)*1e3,o=Nt(t),[s,c]=jt[e.shell??`sh`],l=(e.args===void 0?ye(s,c,e.command):ye(e.command,...e.args)).pipe(xe(n),be({OMP_PROJECT_DIR:n,CLAUDE_PROJECT_DIR:n}),Se(o),ve(`pipe`),we(`pipe`));return yield*ee(fe(function*(){let e=yield*i.start(l),t=yield*e.stdout.pipe(pe(),me),n=yield*e.stderr.pipe(pe(),me),r=yield*e.exitCode;return{code:typeof r==`number`?r:Number(r),stdout:t,stderr:n}})).pipe(oe(a),_e(`TimeoutException`,()=>j({code:-1,stdout:``,stderr:`timeout after ${a}ms`})))}),Y={},Mt=S({key:c,value:E}),X=e(Mt),Nt=ce(k(Mt)),Z=(e,n,r)=>e.pipe(ne({onSuccess:e=>je(e.stdout),onFailure:e=>{ie(e)||n.ui.notify(`Background hook failed: ${r}: ${t(e).split(`
2
+ `)[0]}`,`error`)}})),Q=s(`runHooksForEvent`)(function*(e,t,n,r,i){let a=r.cwd,o=D(X(n.tool_input),()=>Y),s,c=n,f=xt[i]!==void 0;for(let n of e)if(!(f&&n.matcher!==void 0)&&De(t,n.matcher))for(let e of n.hooks){if(e.type!==`command`||e.if!==void 0&&(!St.includes(i)||!ke(e.if,t,o,a)))continue;if(e.async===!0||e.asyncRewake===!0){yield*v(Z(J(e,c,a,i),r,e.command));continue}let n=u(u(A(bt(new ct({result:yield*J(e,c,a,i),event:i})),{onLeft:e=>u(e).pipe(w(`HookVerdictError`,e=>new z({message:`Hook exited 0 but produced invalid JSON: ${e.raw.slice(0,200)}`})),d),onRight:e=>e})).pipe(w(`Block`,e=>new Be({reason:e.reason})),w(`Warning`,e=>new B({warning:e.message})),w(`Allow`,e=>new B({updatedInput:e.updatedInput})),d)).pipe(w(`Blocked`,e=>l({block:!0,reason:e.reason})),w(`Continue`,e=>(e.warning!==void 0&&s===void 0&&(s=e.warning),e.updatedInput!==void 0&&(c={...c,...e.updatedInput}),re())),d);if(ue(n))return n.value}return{...c===n?{}:{updatedInput:c},...s===void 0?{}:{warning:s}}}),Pt=s(`runPreToolUseHooks`)(function*(e,t,n){let r=P(t.toolName),i=F(()=>n.sessionManager.getSessionId()),a=D(X(t.input),()=>Y),o=M(r,a),s=Te(t.toolName,a);if(s!==void 0&&s.length>0){let r={...i,tool_name:`Bash`,tool_input:{command:s},tool_call_id:t.toolCallId},a=yield*Q(e.hooks.PreToolUse,`Bash`,r,n,`PreToolUse`);if(a.block===!0)return a.reason===void 0?{block:!0}:{block:!0,reason:a.reason}}let c=N(r,o),l=c.length===0?[o]:c.map(e=>({...o,file_path:e})),u={};for(let a of l){let o={...i,tool_name:r,tool_input:a,tool_call_id:t.toolCallId},s=yield*Q(e.hooks.PreToolUse,r,o,n,`PreToolUse`);if(s.block===!0)return s.reason===void 0?{block:!0}:{block:!0,reason:s.reason};u=s}let d=l.length===1?u.updatedInput?.tool_input:void 0;Object.assign(t.input,Oe(a,d))}),Ft=s(`runPostToolUseHooks`)(function*(e,t,n){let r=P(t.toolName),i=F(()=>n.sessionManager.getSessionId()),a=M(r,D(X(t.input),()=>Y)),o=N(r,a),s=o.length===0?[a]:o.map(e=>({...a,file_path:e})),c,l={};for(let a of s){let o={...i,tool_name:r,tool_input:a,tool_call_id:t.toolCallId,output:t.content,is_error:t.isError??!1},s=yield*Q(e.hooks.PostToolUse,r,o,n,`PostToolUse`);if(s.block===!0)return s;c===void 0&&(c=s.warning),l=s}return c===void 0?l:{...l,warning:c}}),It=e(O(o({text:h(c)}))),Lt=e(c),Rt=e=>g(It(e),{onSome:e=>e.flatMap(e=>e.text===void 0?[]:[e.text]).join(`
3
+ `),onNone:()=>D(Lt(e),()=>``)}),zt=s(`runPostToolUseFailureHooks`)(function*(e,t,n){let r=P(t.toolName),i=M(r,D(X(t.input),()=>Y)),a={...F(()=>n.sessionManager.getSessionId()),tool_name:r,tool_input:i,tool_use_id:t.toolCallId,error:Rt(t.content)},o=yield*Q(e.hooks.PostToolUseFailure,r,a,n,`PostToolUseFailure`);return o.block===!0?o.reason===void 0?{}:{warning:o.reason}:o}),Bt=s(`runToolResultHooks`)(function*(e,t,n){return t.isError===!0?yield*zt(e,t,n):yield*Ft(e,t,n)}),Vt=s(`runPreCompactHooks`)(function*(e,t){let n={...F(()=>t.sessionManager.getSessionId())};return yield*Q(e.hooks.PreCompact,``,n,t,`PreCompact`)}),Ht=s(`runUserPromptSubmitHooks`)(function*(e,t,n){let r=e.hooks.UserPromptSubmit,i=n.cwd,a=Me().join(`
4
+
5
+ `),o={...F(()=>n.sessionManager.getSessionId()),prompt:t.text,source:t.source};for(let e of r)for(let t of e.hooks){if(t.type!==`command`||t.if!==void 0)continue;let e=yield*J(t,o,i,`UserPromptSubmit`),r=A(bt(new ct({result:e,event:`UserPromptSubmit`})),{onLeft:()=>void 0,onRight:e=>u(e).pipe(w(`Block`,e=>e.reason),C(()=>void 0))});if(r!==void 0)return n.ui.notify(`Prompt blocked by UserPromptSubmit hook: ${r}`,`error`),{handled:!0};if(e.code!==0)continue;let s=e.stdout.trim();s.length>0&&(a+=(a.length>0?`
6
+
7
+ `:``)+s)}if(a.length===0)return;let s={text:`${a}\n\n${t.text}`};return t.images!==void 0&&(s.images=t.images),s}),$=s(`runSessionStartHooks`)(function*(e,t,n){let r=e.hooks.SessionStart;if(r.length===0)return;let i=n.cwd,a={...F(()=>n.sessionManager.getSessionId()),reason:t};for(let e of r)if(!(e.matcher!==void 0&&!De(t,e.matcher))){for(let t of e.hooks)if(t.type===`command`&&t.if===void 0){if(t.async===!0||t.asyncRewake===!0){yield*v(Z(J(t,a,i,`SessionStart`),n,t.command));continue}yield*J(t,a,i,`SessionStart`)}}}),Ut=s(`runSessionSwitchHooks`)(function*(e,t,n){(t===`resume`||t===`fork`)&&(yield*$(e,t,n))}),Wt=s(`runLifecycleHooks`)(function*(e,t,n){if(e.length===0)return;let r=t.cwd,i={...F(()=>t.sessionManager.getSessionId())},a=xt[n]!==void 0;for(let o of e)if(!(a&&o.matcher!==void 0))for(let e of o.hooks)e.type===`command`&&e.if===void 0&&(e.async===!0||e.asyncRewake===!0?yield*v(Z(J(e,i,r,n),t,e.command)):yield*J(e,i,r,n))});export{kt as collectSettingsGaps,Dt as coverageReportLines,Tt as loadSettings,Wt as runLifecycleHooks,Vt as runPreCompactHooks,Pt as runPreToolUseHooks,$ as runSessionStartHooks,Ut as runSessionSwitchHooks,Bt as runToolResultHooks,Ht as runUserPromptSubmitHooks};
package/dist/index.js CHANGED
@@ -1 +1,2 @@
1
- const e=(e,t)=>{e(e=>{e.setTimeout(()=>{t()},0)});let n=()=>{t().then(({default:e})=>e.dispose())};process.on(`SIGINT`,n),process.on(`SIGTERM`,n)},t=e=>{let t=async e=>{let[t,n]=await Promise.all([import(`./runtime-CC04dRZJ.js`).then(e=>e.default),import(`./esm-CeQhljd9.js`)]),{Cause:r,Effect:i,Exit:a}=n,o=e.pipe(i.exit),s=await t.runPromise(o);if(a.isFailure(s))throw r.squash(s.cause);return s.value};e.on(`tool_call`,async(e,n)=>{let{loadSettings:r,runPreToolUseHooks:i}=await import(`./hook-dispatcher.executor-Dz36w3eT.js`),{Effect:a}=await import(`./esm-CeQhljd9.js`);return t(a.gen(function*(){let t=yield*r(n.cwd);if(t)return yield*i(t,e,n)}))}),e.on(`tool_result`,async(e,n)=>{let{loadSettings:r,runPostToolUseHooks:i}=await import(`./hook-dispatcher.executor-Dz36w3eT.js`),{Effect:a}=await import(`./esm-CeQhljd9.js`);return t(a.gen(function*(){let t=yield*r(n.cwd);if(!t)return;let a=yield*i(t,e,n);if(a.block===!0)return{isError:!0,content:[{type:`text`,text:a.reason??`Blocked by PostToolUse hook`}]};if(a.warning!==void 0)return{content:[...e.content,{type:`text`,text:a.warning}],isError:e.isError}}))}),e.on(`input`,async(e,n)=>{let{loadSettings:r,runUserPromptSubmitHooks:i}=await import(`./hook-dispatcher.executor-Dz36w3eT.js`),{Effect:a}=await import(`./esm-CeQhljd9.js`);return t(a.gen(function*(){let t=yield*r(n.cwd);if(t)return yield*i(t,e,n)}))}),e.on(`session_start`,async(e,n)=>{let{collectSettingsGaps:r,loadSettings:i,runSessionStartHooks:a}=await import(`./hook-dispatcher.executor-Dz36w3eT.js`),{Effect:o}=await import(`./esm-CeQhljd9.js`);return t(o.gen(function*(){let e=yield*r(n.cwd);e.unknownEvents.length>0&&n.ui.notify(`Ignoring unsupported hook event(s) in settings.json: ${e.unknownEvents.join(`, `)}`,`warning`),e.unsupportedHookTypes.length>0&&n.ui.notify(`Skipping hook(s) this bridge cannot run yet: type ${e.unsupportedHookTypes.join(`, `)}`,`warning`),e.malformedFiles.length>0&&n.ui.notify(`Hooks are NOT running from malformed settings file(s): ${e.malformedFiles.join(`, `)}`,`error`);let t=yield*i(n.cwd);t&&(yield*a(t,`start`,n))}))}),e.on(`session_compact`,async(e,n)=>{let{loadSettings:r,runSessionStartHooks:i}=await import(`./hook-dispatcher.executor-Dz36w3eT.js`),{Effect:a}=await import(`./esm-CeQhljd9.js`);return t(a.gen(function*(){let e=yield*r(n.cwd);e&&(yield*i(e,`compact`,n))}))}),e.on(`agent_start`,async(e,n)=>{let{loadSettings:r,runSessionStartHooks:i}=await import(`./hook-dispatcher.executor-Dz36w3eT.js`),{Effect:a}=await import(`./esm-CeQhljd9.js`);return t(a.gen(function*(){let e=yield*r(n.cwd);e&&(yield*i(e,`resume`,n))}))}),e.on(`session_shutdown`,async(e,n)=>{let{loadSettings:r,runLifecycleHooks:i}=await import(`./hook-dispatcher.executor-Dz36w3eT.js`),{Effect:a}=await import(`./esm-CeQhljd9.js`);return t(a.gen(function*(){let e=yield*r(n.cwd);e&&(yield*i(e.hooks.SessionEnd,n,`SessionEnd`))}))}),e.on(`session_stop`,async(e,n)=>{let{loadSettings:r,runLifecycleHooks:i}=await import(`./hook-dispatcher.executor-Dz36w3eT.js`),{Effect:a}=await import(`./esm-CeQhljd9.js`);return t(a.gen(function*(){let e=yield*r(n.cwd);e&&(yield*i(e.hooks.Stop,n,`Stop`))}))})},n=e=>{e.on(`before_agent_start`,async(e,t)=>{let n=await import(`./runtime-CC04dRZJ.js`).then(e=>e.default),{loadReferencedContent:r}=await import(`./inject-instructions.executor-DD0xz4GH.js`),{Cause:i,Config:a,Effect:o,Exit:s}=await import(`./esm-CeQhljd9.js`),c=await n.runPromise(o.gen(function*(){let e=yield*a.string(`CLAUDE_PROJECT_DIR`).pipe(a.withDefault(process.cwd()));return yield*r(e)}).pipe(o.exit));if(s.isFailure(c))throw i.squash(c.cause);let l=c.value;if(l!==``)return{systemPrompt:[...e.systemPrompt,``,l]}})};function r(r){t(r),n(r),e(e=>r.on(`session_start`,(t,n)=>e(n)),()=>import(`./runtime-CC04dRZJ.js`))}export{r as default};
1
+ const e=(e,t)=>{e(e=>{e.setTimeout(()=>{t()},0)});let n=()=>{t().then(({default:e})=>e.dispose())};process.on(`SIGINT`,n),process.on(`SIGTERM`,n)},t=e=>{let t=async e=>{let[t,n]=await Promise.all([import(`./runtime-CC04dRZJ.js`).then(e=>e.default),import(`./esm-CeQhljd9.js`)]),{Cause:r,Effect:i,Exit:a}=n,o=e.pipe(i.exit),s=await t.runPromise(o);if(a.isFailure(s))throw r.squash(s.cause);return s.value};e.on(`tool_call`,async(e,n)=>{let{loadSettings:r,runPreToolUseHooks:i}=await import(`./hook-dispatcher.executor-D42T74H2.js`),{Effect:a}=await import(`./esm-CeQhljd9.js`);return t(a.gen(function*(){let t=yield*r(n.cwd);if(t)return yield*i(t,e,n)}))}),e.on(`tool_result`,async(e,n)=>{let{loadSettings:r,runToolResultHooks:i}=await import(`./hook-dispatcher.executor-D42T74H2.js`),{Effect:a}=await import(`./esm-CeQhljd9.js`);return t(a.gen(function*(){let t=yield*r(n.cwd);if(!t)return;let a=yield*i(t,e,n);if(a.block===!0)return{isError:!0,content:[{type:`text`,text:a.reason??`Blocked by PostToolUse hook`}]};if(a.warning!==void 0)return{content:[...e.content,{type:`text`,text:a.warning}],isError:e.isError}}))}),e.on(`input`,async(e,n)=>{let{loadSettings:r,runUserPromptSubmitHooks:i}=await import(`./hook-dispatcher.executor-D42T74H2.js`),{Effect:a}=await import(`./esm-CeQhljd9.js`);return t(a.gen(function*(){let t=yield*r(n.cwd);if(t)return yield*i(t,e,n)}))}),e.on(`session_start`,async(e,n)=>{let{collectSettingsGaps:r,coverageReportLines:i,loadSettings:a,runSessionStartHooks:o}=await import(`./hook-dispatcher.executor-D42T74H2.js`),{Effect:s}=await import(`./esm-CeQhljd9.js`);return t(s.gen(function*(){let e=yield*r(n.cwd),t=i(e.coverage);t.length>0&&n.ui.notify(`Hook coverage configured hooks this bridge will not run:\n${t.join(`
2
+ `)}`,`warning`),e.unsupportedHookTypes.length>0&&n.ui.notify(`Skipping hook(s) this bridge cannot run yet: type ${e.unsupportedHookTypes.join(`, `)}`,`warning`),e.malformedFiles.length>0&&n.ui.notify(`Hooks are NOT running from malformed settings file(s): ${e.malformedFiles.join(`, `)}`,`error`);let s=yield*a(n.cwd);s&&(yield*o(s,`startup`,n))}))}),e.on(`session_compact`,async(e,n)=>{let{loadSettings:r,runLifecycleHooks:i,runSessionStartHooks:a}=await import(`./hook-dispatcher.executor-D42T74H2.js`),{Effect:o}=await import(`./esm-CeQhljd9.js`);return t(o.gen(function*(){let e=yield*r(n.cwd);e&&(yield*a(e,`compact`,n),yield*i(e.hooks.PostCompact,n,`PostCompact`))}))}),e.on(`session_before_compact`,async(e,n)=>{let{loadSettings:r,runPreCompactHooks:i}=await import(`./hook-dispatcher.executor-D42T74H2.js`),{Effect:a}=await import(`./esm-CeQhljd9.js`);return t(a.gen(function*(){let e=yield*r(n.cwd);if(!e)return;let t=yield*i(e,n);if(t.block===!0)return n.ui.notify(`Compaction cancelled by a PreCompact hook: ${t.reason??`no reason given`}`,`warning`),{cancel:!0}}))}),e.on(`session_switch`,async(e,n)=>{let{loadSettings:r,runSessionSwitchHooks:i}=await import(`./hook-dispatcher.executor-D42T74H2.js`),{Effect:a}=await import(`./esm-CeQhljd9.js`);return t(a.gen(function*(){let t=yield*r(n.cwd);t&&(yield*i(t,e.reason,n))}))}),e.on(`session_shutdown`,async(e,n)=>{let{loadSettings:r,runLifecycleHooks:i}=await import(`./hook-dispatcher.executor-D42T74H2.js`),{Effect:a}=await import(`./esm-CeQhljd9.js`);return t(a.gen(function*(){let e=yield*r(n.cwd);e&&(yield*i(e.hooks.SessionEnd,n,`SessionEnd`))}))}),e.on(`session_stop`,async(e,n)=>{let{loadSettings:r,runLifecycleHooks:i}=await import(`./hook-dispatcher.executor-D42T74H2.js`),{Effect:a}=await import(`./esm-CeQhljd9.js`);return t(a.gen(function*(){let e=yield*r(n.cwd);e&&(yield*i(e.hooks.Stop,n,`Stop`))}))})},n=e=>{e.on(`before_agent_start`,async(e,t)=>{let n=await import(`./runtime-CC04dRZJ.js`).then(e=>e.default),{loadReferencedContent:r}=await import(`./inject-instructions.executor-CpsBw0g8.js`),{Cause:i,Config:a,Effect:o,Exit:s}=await import(`./esm-CeQhljd9.js`),c=await n.runPromise(o.gen(function*(){let e=yield*a.string(`CLAUDE_PROJECT_DIR`).pipe(a.withDefault(process.cwd()));return yield*r(e)}).pipe(o.exit));if(s.isFailure(c))throw i.squash(c.cause);let l=c.value;if(l!==``)return{systemPrompt:[...e.systemPrompt,``,l]}})};function r(r){t(r),n(r),e(e=>r.on(`session_start`,(t,n)=>e(n)),()=>import(`./runtime-CC04dRZJ.js`))}export{r as default};
@@ -0,0 +1,3 @@
1
+ import{A as e,Ct as t,Dt as n,E as r,Fn as i,G as a,H as o,In as s,Ln as c,O as l,On as u,Pn as d,W as f,bt as p,jn as m,y as h,zt as g}from"./esm-CeQhljd9.js";import{d as _,m as v,t as y}from"./dist-DbemdM50.js";const b=[`AGENTS.md`],x=Symbol.for(`@systemfsoftware/omp-claude-compat/RefVerdict`);var S=class extends l()(`Inject`,{}){[x]=x},C=class extends l()(`Skip`,{matched:r}){[x]=x};e(S,C);const w=Symbol.for(`@systemfsoftware/omp-claude-compat/CheckRefInjectionCommand`);var T=class extends l()(`CheckRefInjectionCommand`,{relativePath:r,skipList:h(r)}){[w]=w};const E=e=>u(e.skipList.find(t=>t===e.relativePath)),D=e=>a(E(e)).pipe(f(`None`,()=>new S),f(`Some`,e=>new C({matched:e.value})),o),O=n(`extractRefs`)(function*(e,n,r){let i=yield*v,a=yield*_,o=[];for(let s of e.split(`
2
+ `)){let e=s.trim().replace(/^[-*+]\s+/,``);if(!e.startsWith(`@`))continue;let l=e.slice(1).trim();if(!l||l.includes(` `)||a.isAbsolute(l))continue;let u=a.resolve(n,l);if(u.startsWith(r+`/`)||u===r){let e=yield*t(i.exists(u));if(c(e)&&e.right){o.push({sourcePath:n,resolvedPath:u});continue}}let d=a.resolve(r,l);(d.startsWith(r+`/`)||d===r)&&d!==u&&o.push({sourcePath:r,resolvedPath:d})}return o}),k=n(`loadReferencedContent`)(function*(e){let n=yield*v,r=yield*_,l=yield*y,u=[r.resolve(e,`CLAUDE.md`),r.resolve(e,`.claude`,`CLAUDE.md`)],h=[];for(let i of u){let a=yield*t(n.readFileString(i,`utf-8`));if(c(a)){let t=yield*O(a.right,r.dirname(i),e);h.push(...t)}}let x=new Set,S=[];for(let e of h)x.has(e.resolvedPath)||(x.add(e.resolvedPath),S.push(e));let C=(yield*l.load(e).pipe(p(()=>g(void 0))))?.no_inject_refs??b,w=[];for(let r of S){let c=r.resolvedPath.slice(e.length+1);if(m(a(D(new T({relativePath:c,skipList:C}))).pipe(f(`Skip`,e=>i(e.matched)),f(`Inject`,()=>d()),o)))continue;let l=yield*t(n.readFileString(r.resolvedPath,`utf-8`));s(l)||w.push(`## ${c}\n${l.right}\n`)}return w.length===0?``:[`# Injected @-references from CLAUDE.md`,`The following files were @-imported by CLAUDE.md and contain project rules.`,``,...w].join(`
3
+ `)});export{k as loadReferencedContent};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@systemfsoftware/omp-claude-compat",
3
3
  "license": "MIT",
4
- "version": "1.2.3",
4
+ "version": "1.3.0",
5
5
  "author": "Ryan Lee <drdgvhbh@gmail.com>",
6
6
  "description": "OMP Claude Code compatibility: dispatch .claude/settings.json hooks + inject CLAUDE.md @-references",
7
7
  "type": "module",
@@ -23,18 +23,23 @@
23
23
  "@effect/platform-node": "^0.97.0",
24
24
  "@effect/vitest": "0.30.0",
25
25
  "@oh-my-pi/pi-coding-agent": "^17.0.5",
26
+ "@stryker-mutator/vitest-runner": "^9.6.1",
26
27
  "@types/node": "^24",
28
+ "@vitest/coverage-v8": "^4",
27
29
  "effect": "^3.22.0",
28
30
  "fast-check": "^3",
29
31
  "rimraf": "^6.1.3",
30
32
  "tsdown": "^0.22.9",
31
33
  "typescript": "^7",
32
34
  "vitest": "^4",
35
+ "@systemfsoftware/omp-utils": "^0.0.0",
33
36
  "@systemfsoftware/effect-gherkin-spec": "^0.4.0",
37
+ "@systemfsoftware/stryker-js-core": "^1.1.6",
34
38
  "@systemfsoftware/effect-memfs": "^1.0.8",
35
- "@systemfsoftware/omp-utils": "^0.0.0",
36
- "@systemfsoftware/tsconfig": "^1.2.6",
37
- "@systemfsoftware/oxlint-config": "^0.1.0"
39
+ "@systemfsoftware/oxlint-config": "^0.1.0",
40
+ "@systemfsoftware/stryker-js-typescript-checker": "^1.1.6",
41
+ "@systemfsoftware/stryker-plugins": "^0.6.0",
42
+ "@systemfsoftware/tsconfig": "^1.2.6"
38
43
  },
39
44
  "omp": {
40
45
  "extensions": [
@@ -64,6 +69,8 @@
64
69
  "clean": "rimraf dist",
65
70
  "typecheck": "tsc --noEmit --incremental",
66
71
  "test": "vitest run",
72
+ "mutation": "stryker run --incremental",
73
+ "mutation:full": "stryker run",
67
74
  "lint": "oxlint . ${AGENT:+--format=unix --quiet}"
68
75
  }
69
76
  }
@@ -1,6 +0,0 @@
1
- import{$ as e,$t as t,A as n,B as r,Bn as i,C as a,D as o,Dt as s,E as c,Fn as l,G as u,H as d,In as f,J as ee,K as p,L as m,Lt as te,Mn as ne,Mt as re,Nn as h,O as g,Ot as _,P as v,Pn as ie,Qt as ae,R as y,Rn as oe,S as b,T as x,U as S,Ut as se,W as C,b as w,bt as T,et as ce,it as le,j as E,jn as ue,k as de,kn as D,kt as fe,r as pe,s as me,tt as he,w as O,xt as ge,y as k,z as A,zn as j,zt as M}from"./esm-CeQhljd9.js";import{f as _e,l as N,o as ve,p as ye,s as be,t as xe,u as Se}from"./CommandExecutor-WpnYtse1.js";import{a as Ce,c as P,i as F,l as I,m as L,o as R,r as we,s as Te,u as z}from"./dist-DbemdM50.js";import{homedir as Ee}from"node:os";const B=[];function De(e){let t=e.trim();t.length!==0&&(B.length>=64&&B.shift(),B.push(t))}function Oe(){return B.splice(0,B.length)}o({code:O,stdout:c,stderr:c});var V=class extends g()(`Block`,{reason:c}){},H=class extends g()(`Allow`,{updatedInput:m(x({key:c,value:E}))}){},U=class extends g()(`Warning`,{message:c}){};n(V,H,U);var W=class extends g()(`Blocked`,{reason:c}){},G=class extends g()(`Continue`,{warning:m(c),updatedInput:m(x({key:c,value:E}))}){};n(W,G);const ke=n(o({type:b(`command`),command:c,args:m(k(c)),async:m(w),asyncRewake:m(w),shell:m(b(`bash`,`powershell`)),timeout:m(O),if:m(c),statusMessage:m(c),once:m(w)}),o({type:b(`http`,`mcp_tool`,`prompt`,`agent`)})),K=o({matcher:m(c),hooks:k(ke)}),q=o({PreToolUse:y(k(K),{exact:!0,default:()=>[]}),PostToolUse:y(k(K),{exact:!0,default:()=>[]}),UserPromptSubmit:y(k(K),{exact:!0,default:()=>[]}),Stop:y(k(K),{exact:!0,default:()=>[]}),SessionStart:y(k(K),{exact:!0,default:()=>[]}),SessionEnd:y(k(K),{exact:!0,default:()=>[]})}),Ae=o({hooks:q,disableAllHooks:m(w)}),je=v(n(Ae,r(o({...q.fields,disableAllHooks:m(w),hooks:m(a)}),Ae,{strict:!0,decode:({disableAllHooks:e,...t})=>le(e===void 0?{hooks:t}:{hooks:t,disableAllHooks:e}),encode:(e,t,n)=>he(new ee(n,e,`Decode-only`))}))),J=[`PreToolUse`,`PostToolUse`,`UserPromptSubmit`,`SessionStart`,`SessionEnd`,`Stop`],Me=e(x({key:c,value:E})),Ne=e(k(o({hooks:y(k(o({type:m(c)})),{exact:!0,default:()=>[]})})));function Pe(e){return ne(Me(e),e=>h(Me(e.hooks),{onNone:()=>({namespace:e,isWrapped:!1}),onSome:e=>({namespace:e,isWrapped:!0})}))}function Fe(e){return h(Pe(e),{onNone:()=>[],onSome:({isWrapped:e,namespace:t})=>{let n=e?J:[...J,`disableAllHooks`];return Object.keys(t).filter(e=>!n.includes(e))}})}function Ie(e){return h(Pe(e),{onNone:()=>[],onSome:({namespace:e})=>{let t=new Set;for(let n of J){let r=D(Ne(e[n]),()=>[]);for(let e of r)for(let n of e.hooks)n.type!==void 0&&n.type!==`command`&&t.add(n.type)}return Array.from(t)}})}function Le(e){let t={PreToolUse:[],PostToolUse:[],UserPromptSubmit:[],SessionStart:[],SessionEnd:[],Stop:[]};if(e.some(e=>e.managed&&e.settings.disableAllHooks===!0))return{hooks:t};let n=e.some(e=>!e.managed&&e.settings.disableAllHooks===!0);for(let r of e)if(!(n&&!r.managed))for(let e of J)t[e]=t[e].concat(Array.from(r.settings.hooks[e]));return{hooks:t}}const Re=v(A(o({decision:m(c),reason:m(c),hookSpecificOutput:m(o({permissionDecision:m(c),permissionDecisionReason:m(c),updatedInput:m(x({key:c,value:E}))}))})));var ze=class extends de()(`HookVerdictError`,{raw:c}){},Be=class extends g()(`ExitBlock`,{}){},Ve=class extends g()(`ExitDecisionJson`,{}){},He=class extends g()(`ExitNoDecision`,{}){},Ue=class extends g()(`ExitOther`,{}){};n(Be,Ve,He,Ue);const We=e=>u(e.trim()).pipe(p(e=>e.startsWith(`{`),()=>new Ve({})),S(()=>new He({}))),Ge=e=>u(e.code).pipe(p(2,()=>new Be({})),p(0,()=>We(e.stdout)),S(()=>new Ue({}))),Ke=(e,t)=>u(e.trim()).pipe(p(``,()=>`Blocked by ${t} hook`),S(e=>e)),qe=(e,t)=>u(e.hookSpecificOutput?.permissionDecision??e.decision).pipe(p(`deny`,()=>new V({reason:e.hookSpecificOutput?.permissionDecisionReason??`Blocked by ${t} hook`})),p(`block`,()=>new V({reason:e.reason??`Blocked by ${t} hook`})),S(()=>new H({updatedInput:e.hookSpecificOutput?.updatedInput}))),Je=e=>u(e.trim()).pipe(p(``,()=>new H({})),S(e=>new U({message:e}))),Ye=(e,t)=>u(Ge(e)).pipe(C(`ExitBlock`,()=>i(new V({reason:Ke(e.stderr,t)}))),C(`ExitNoDecision`,()=>i(new H({}))),C(`ExitDecisionJson`,()=>j(Re(e.stdout),{onLeft:()=>oe(new ze({raw:e.stdout})),onRight:e=>i(qe(e,t))})),C(`ExitOther`,()=>i(Je(e.stderr))),d),Xe=s(`loadSettingsFile`)(function*(e){let t=yield*(yield*L).readFileString(e).pipe(T(()=>M(``)));if(t===``)return null;let n=v(A(x({key:c,value:E})))(t);if(f(n))return null;let r=n.right,i=je(r);return f(i)?null:i.right}),Ze=`/etc/claude-code/managed-settings.json`,Qe=e=>[`${Ee()}/.claude/settings.json`,`${e}/.claude/settings.json`,`${e}/.claude/settings.local.json`,Ze],$e=s(`loadSettings`)(function*(e){return yield*et(Qe(e))}),et=s(`loadSettingsWithPaths`)(function*(e,t=Ze){let n=[];for(let r of e){let e=yield*Xe(r);e!==null&&n.push({settings:e,managed:r===t})}return n.length===0?null:Le(n)}),tt=s(`collectSettingsGapsWithPaths`)(function*(e){let t=yield*L,n=[],r=[],i=[];for(let a of e){let e=yield*t.readFileString(a).pipe(T(()=>M(``)));if(e===``)continue;let o=v(A(x({key:c,value:E})))(e);if(f(o)){i.push(a);continue}n.push(...Fe(o.right)),r.push(...Ie(o.right)),f(je(o.right))&&i.push(a)}return{unknownEvents:Array.from(new Set(n)),unsupportedHookTypes:Array.from(new Set(r)),malformedFiles:Array.from(new Set(i))}}),nt=s(`collectSettingsGaps`)(function*(e){return yield*tt(Qe(e))}),rt={UserPromptSubmit:30},it={sh:[`sh`,`-c`],bash:[`bash`,`-c`],powershell:[`powershell`,`-Command`]},Y=s(`runHookScript`)(function*(e,t,n,r){let i=yield*xe,a=(e.timeout??rt[r]??600)*1e3,o=ot(t),[s,c]=it[e.shell??`sh`],l=(e.args===void 0?N(s,c,e.command):N(e.command,...e.args)).pipe(ye(n),ve({OMP_PROJECT_DIR:n,CLAUDE_PROJECT_DIR:n}),be(o),_e(`pipe`),Se(`pipe`));return yield*te(fe(function*(){let e=yield*i.start(l),t=yield*e.stdout.pipe(pe(),me),n=yield*e.stderr.pipe(pe(),me),r=yield*e.exitCode;return{code:typeof r==`number`?r:Number(r),stdout:t,stderr:n}})).pipe(se(a),ge(`TimeoutException`,()=>M({code:-1,stdout:``,stderr:`timeout after ${a}ms`})))}),X={},at=x({key:c,value:E}),Z=e(at),ot=ce(A(at)),Q=(e,n,r)=>e.pipe(re({onSuccess:e=>De(e.stdout),onFailure:e=>{ae(e)||n.ui.notify(`Background hook failed: ${r}: ${t(e).split(`
2
- `)[0]}`,`error`)}})),$=s(`runHooksForEvent`)(function*(e,t,n,r,i){let a=r.cwd,o=D(Z(n.tool_input),()=>X),s,c=n;for(let n of e)if(R(t,n.matcher))for(let e of n.hooks){if(e.type!==`command`||e.if!==void 0&&!Te(e.if,t,o,a))continue;if(e.async===!0||e.asyncRewake===!0){yield*_(Q(Y(e,c,a,i),r,e.command));continue}let n=u(u(j(Ye(yield*Y(e,c,a,i),i),{onLeft:e=>u(e).pipe(C(`HookVerdictError`,e=>new U({message:`Hook exited 0 but produced invalid JSON: ${e.raw.slice(0,200)}`})),d),onRight:e=>e})).pipe(C(`Block`,e=>new W({reason:e.reason})),C(`Warning`,e=>new G({warning:e.message})),C(`Allow`,e=>new G({updatedInput:e.updatedInput})),d)).pipe(C(`Blocked`,e=>l({block:!0,reason:e.reason})),C(`Continue`,e=>(e.warning!==void 0&&s===void 0&&(s=e.warning),e.updatedInput!==void 0&&(c={...c,...e.updatedInput}),ie())),d);if(ue(n))return n.value}return{...c===n?{}:{updatedInput:c},...s===void 0?{}:{warning:s}}}),st=s(`runPreToolUseHooks`)(function*(e,t,n){let r=I(t.toolName),i=z(()=>n.sessionManager.getSessionId()),a=D(Z(t.input),()=>X),o=P(r,a),s=Ce(t.toolName,a);if(s!==void 0&&s.length>0){let r={...i,tool_name:`Bash`,tool_input:{command:s},tool_call_id:t.toolCallId},a=yield*$(e.hooks.PreToolUse,`Bash`,r,n,`PreToolUse`);if(a.block===!0)return a.reason===void 0?{block:!0}:{block:!0,reason:a.reason}}let c=F(r,o),l=c.length===0?[o]:c.map(e=>({...o,file_path:e})),u={};for(let a of l){let o={...i,tool_name:r,tool_input:a,tool_call_id:t.toolCallId},s=yield*$(e.hooks.PreToolUse,r,o,n,`PreToolUse`);if(s.block===!0)return s.reason===void 0?{block:!0}:{block:!0,reason:s.reason};u=s}let d=l.length===1?u.updatedInput?.tool_input:void 0;Object.assign(t.input,we(a,d))}),ct=s(`runPostToolUseHooks`)(function*(e,t,n){let r=I(t.toolName),i=z(()=>n.sessionManager.getSessionId()),a=P(r,D(Z(t.input),()=>X)),o=F(r,a),s=o.length===0?[a]:o.map(e=>({...a,file_path:e})),c,l={};for(let a of s){let o={...i,tool_name:r,tool_input:a,tool_call_id:t.toolCallId,output:t.content,is_error:t.isError??!1},s=yield*$(e.hooks.PostToolUse,r,o,n,`PostToolUse`);if(s.block===!0)return s;c===void 0&&(c=s.warning),l=s}return c===void 0?l:{...l,warning:c}}),lt=s(`runUserPromptSubmitHooks`)(function*(e,t,n){let r=e.hooks.UserPromptSubmit,i=n.cwd,a=Oe().join(`
3
-
4
- `),o={...z(()=>n.sessionManager.getSessionId()),prompt:t.text,source:t.source};for(let e of r)for(let t of e.hooks){if(t.type!==`command`||t.if!==void 0)continue;let e=yield*Y(t,o,i,`UserPromptSubmit`),r=j(Ye(e,`UserPromptSubmit`),{onLeft:()=>void 0,onRight:e=>u(e).pipe(C(`Block`,e=>e.reason),S(()=>void 0))});if(r!==void 0)return n.ui.notify(`Prompt blocked by UserPromptSubmit hook: ${r}`,`error`),{handled:!0};if(e.code!==0)continue;let s=e.stdout.trim();s.length>0&&(a+=(a.length>0?`
5
-
6
- `:``)+s)}if(a.length===0)return;let s={text:`${a}\n\n${t.text}`};return t.images!==void 0&&(s.images=t.images),s}),ut=s(`runSessionStartHooks`)(function*(e,t,n){let r=e.hooks.SessionStart;if(r.length===0)return;let i=n.cwd,a={...z(()=>n.sessionManager.getSessionId()),reason:t};for(let e of r)if(!(e.matcher!==void 0&&!R(t,e.matcher))){for(let t of e.hooks)if(t.type===`command`&&t.if===void 0){if(t.async===!0||t.asyncRewake===!0){yield*_(Q(Y(t,a,i,`SessionStart`),n,t.command));continue}yield*Y(t,a,i,`SessionStart`)}}}),dt=s(`runLifecycleHooks`)(function*(e,t,n){if(e.length===0)return;let r=t.cwd,i={...z(()=>t.sessionManager.getSessionId())};for(let a of e)for(let e of a.hooks)e.type===`command`&&e.if===void 0&&(e.async===!0||e.asyncRewake===!0?yield*_(Q(Y(e,i,r,n),t,e.command)):yield*Y(e,i,r,n))});export{nt as collectSettingsGaps,$e as loadSettings,dt as runLifecycleHooks,ct as runPostToolUseHooks,st as runPreToolUseHooks,ut as runSessionStartHooks,lt as runUserPromptSubmitHooks};
@@ -1,3 +0,0 @@
1
- import{Ct as e,D as t,Dt as n,E as r,Fn as i,G as a,H as o,In as s,Ln as c,O as l,On as u,Pn as d,W as f,bt as p,jn as m,y as h,zt as g}from"./esm-CeQhljd9.js";import{d as _,m as v,t as y}from"./dist-DbemdM50.js";const b=[`AGENTS.md`];var x=class extends l()(`Inject`,{}){},S=class extends l()(`Skip`,{matched:r}){};t({relativePath:r,skipList:h(r)});const C=e=>u(e.skipList.find(t=>t===e.relativePath)),w=e=>a(C(e)).pipe(f(`None`,()=>new x),f(`Some`,e=>new S({matched:e.value})),o),T=n(`extractRefs`)(function*(t,n,r){let i=yield*v,a=yield*_,o=[];for(let s of t.split(`
2
- `)){let t=s.trim().replace(/^[-*+]\s+/,``);if(!t.startsWith(`@`))continue;let l=t.slice(1).trim();if(!l||l.includes(` `)||a.isAbsolute(l))continue;let u=a.resolve(n,l);if(u.startsWith(r+`/`)||u===r){let t=yield*e(i.exists(u));if(c(t)&&t.right){o.push({sourcePath:n,resolvedPath:u});continue}}let d=a.resolve(r,l);(d.startsWith(r+`/`)||d===r)&&d!==u&&o.push({sourcePath:r,resolvedPath:d})}return o}),E=n(`loadReferencedContent`)(function*(t){let n=yield*v,r=yield*_,l=yield*y,u=[r.resolve(t,`CLAUDE.md`),r.resolve(t,`.claude`,`CLAUDE.md`)],h=[];for(let i of u){let a=yield*e(n.readFileString(i,`utf-8`));if(c(a)){let e=yield*T(a.right,r.dirname(i),t);h.push(...e)}}let x=new Set,S=[];for(let e of h)x.has(e.resolvedPath)||(x.add(e.resolvedPath),S.push(e));let C=(yield*l.load(t).pipe(p(()=>g(void 0))))?.no_inject_refs??b,E=[];for(let r of S){let c=r.resolvedPath.slice(t.length+1);if(m(a(w({relativePath:c,skipList:C})).pipe(f(`Skip`,e=>i(e.matched)),f(`Inject`,()=>d()),o)))continue;let l=yield*e(n.readFileString(r.resolvedPath,`utf-8`));s(l)||E.push(`## ${c}\n${l.right}\n`)}return E.length===0?``:[`# Injected @-references from CLAUDE.md`,`The following files were @-imported by CLAUDE.md and contain project rules.`,``,...E].join(`
3
- `)});export{E as loadReferencedContent};