diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index d0601412c0..abda1520d9 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -1,6 +1,6 @@ { "$schema": "https://anthropic.com/claude-code/marketplace.schema.json", - "name": "claude-code-plugins", + "name": "cruzlauroiii-plugins", "version": "1.0.0", "description": "Bundled plugins for Claude Code including Agent SDK development tools, PR review toolkit, and commit workflows", "owner": { @@ -145,6 +145,46 @@ }, "source": "./plugins/security-guidance", "category": "security" + }, + { + "name": "scroll-fix", + "description": "Fixes terminal scroll-to-top regression caused by Ink renderer cursor-up sequences exceeding viewport height. Includes Ctrl+6 freeze toggle. All platforms.", + "version": "1.0.0", + "author": { + "name": "cruzlauroiii" + }, + "source": "./plugins/scroll-fix", + "category": "fixes" + }, + { + "name": "bridge-fix", + "description": "Fixes Chrome extension bridge connection failure by disabling remote bridge URL resolver, forcing local named pipe usage.", + "version": "1.0.0", + "author": { + "name": "cruzlauroiii" + }, + "source": "./plugins/bridge-fix", + "category": "fixes" + }, + { + "name": "powershell-default", + "description": "Adds a native Pwsh tool using PowerShell 7+ Preview. Shows as Pwsh(...) in the UI. Commands use PowerShell syntax directly. Works on any OS.", + "version": "1.0.0", + "author": { + "name": "cruzlauroiii" + }, + "source": "./plugins/powershell-default", + "category": "tools" + }, + { + "name": "scroll-fix", + "description": "Fixes terminal scroll-to-top regression caused by Ink renderer cursor-up sequences exceeding viewport height. Includes Ctrl+6 freeze toggle. All platforms.", + "version": "1.0.0", + "author": { + "name": "cruzlauroiii" + }, + "source": "./plugins/scroll-fix", + "category": "fixes" } ] } diff --git a/plugins/scroll-fix/.claude-plugin/plugin.json b/plugins/scroll-fix/.claude-plugin/plugin.json new file mode 100644 index 0000000000..7a51e3c27e --- /dev/null +++ b/plugins/scroll-fix/.claude-plugin/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "scroll-fix", + "version": "1.0.0", + "description": "Fixes terminal scroll-to-top regression caused by Ink renderer's cursor-up sequences exceeding viewport height. Includes Ctrl+6 freeze toggle for manual scroll control.", + "author": { + "name": "cruzlauroiii" + } +} diff --git a/plugins/scroll-fix/README.md b/plugins/scroll-fix/README.md new file mode 100644 index 0000000000..60c32e6fc6 --- /dev/null +++ b/plugins/scroll-fix/README.md @@ -0,0 +1,75 @@ +# scroll-fix + +Fixes the terminal scroll-to-top regression in Claude Code. Works on **all platforms** (Windows, macOS, Linux) and **all terminals**. + +## Problem + +Claude Code's Ink renderer uses cursor-up (`\x1b[{n}A`) sequences to clear previous output before redrawing. When the output exceeds the viewport height, the cursor moves above the visible area and the terminal viewport follows it — snapping to the top of scrollback on every re-render. + +**Root cause:** `eraseLines()` generates N cursor-up sequences where N = number of previously rendered lines. Terminals follow cursor position changes, including during synchronized output blocks. + +**Upstream issues:** +- [microsoft/terminal#14774](https://github.com/microsoft/terminal/issues/14774) — `SetConsoleCursorPosition` always scrolls viewport to cursor +- [anthropics/claude-code#33814](https://github.com/anthropics/claude-code/issues/33814) — Forces scroll to top when outputting code +- [anthropics/claude-code#826](https://github.com/anthropics/claude-code/issues/826) — Console scrolling top of history +- [anthropics/claude-code#11801](https://github.com/anthropics/claude-code/issues/11801) — Terminal scrolls to the top after each response +- [anthropics/claude-code#3648](https://github.com/anthropics/claude-code/issues/3648) — Terminal scrolling uncontrollably +- [anthropics/claude-code#34794](https://github.com/anthropics/claude-code/issues/34794) — Terminal scrolls to top during agent execution + +## Fix + +Intercepts `process.stdout.write` and tracks cumulative cursor-up within each synchronized output block (`\x1b[?2026h` … `\x1b[?2026l`). Clamps total cursor-up to `process.stdout.rows` so the cursor stays within the visible viewport. + +### Additional feature: Ctrl+6 freeze toggle + +Press **Ctrl+6** to freeze all Ink re-render output. Press again to unfreeze and replay buffered frames. This allows scrolling through terminal history without the viewport being yanked back. + +## Installation + +### Option 1: Node.js preload (recommended) + +```bash +# Set in your shell profile (.bashrc, .zshrc, etc.) +export NODE_OPTIONS="--require /path/to/plugins/scroll-fix/scroll-fix.cjs" + +# Then run claude normally +claude +``` + +### Option 2: Patch cli.js directly + +```bash +node plugins/scroll-fix/scripts/install.js /path/to/cli.js +``` + +To remove: +```bash +node plugins/scroll-fix/scripts/install.js --uninstall /path/to/cli.js +``` + +### Option 3: Install as Claude Code plugin + +```bash +claude /plugin install /path/to/plugins/scroll-fix +``` + +## How it works + +1. **Sync block tracking**: Detects `\x1b[?2026h` (synchronized output start) and resets the cursor-up counter +2. **Cursor-up clamping**: Each `\x1b[{n}A` sequence consumes from a budget equal to `process.stdout.rows`. When budget hits 0, further cursor-up sequences are suppressed +3. **Budget restoration**: Newlines (`\n`) and cursor-down (`\x1b[{n}B`) restore the budget, allowing the next render cycle to clear properly +4. **Sync block end**: `\x1b[?2026l` resets the counter + +This ensures the cursor never leaves the visible viewport during re-renders, preventing the terminal from snapping to the top. + +## Compatibility + +| Platform | Status | +|----------|--------| +| Windows Terminal | ✅ Fixed | +| macOS Terminal.app | ✅ Fixed | +| macOS iTerm2 | ✅ Fixed | +| Linux (all terminals) | ✅ Fixed | +| VS Code integrated terminal | ✅ Fixed | +| tmux | ✅ Fixed | +| Ghostty | ✅ (already minimal, now zero) | diff --git a/plugins/scroll-fix/hooks/hooks.json b/plugins/scroll-fix/hooks/hooks.json new file mode 100644 index 0000000000..8b23322b4c --- /dev/null +++ b/plugins/scroll-fix/hooks/hooks.json @@ -0,0 +1,16 @@ +{ + "description": "Scroll fix plugin — notifies when the scroll-to-top fix is active", + "hooks": { + "SessionStart": [ + { + "hooks": [ + { + "type": "command", + "command": "node ${CLAUDE_PLUGIN_ROOT}/scripts/check-scroll-fix.js", + "timeout": 5 + } + ] + } + ] + } +} diff --git a/plugins/scroll-fix/patches/scroll-fix.patch b/plugins/scroll-fix/patches/scroll-fix.patch new file mode 100644 index 0000000000..671f469ae3 --- /dev/null +++ b/plugins/scroll-fix/patches/scroll-fix.patch @@ -0,0 +1,12 @@ +diff --git a/cli.js b/cli.js +index 79dbab3..9f5fcda 100644 +--- a/cli.js ++++ b/cli.js +@@ -5,6 +5,7 @@ + + // Want to see the unminified source? We're hiring! + // https://job-boards.greenhouse.io/anthropic/jobs/4816199008 ++/* SCROLL_FIX */;(function(){var _ow=process.stdout.write.bind(process.stdout);var _frozen=false,_buf=[];setTimeout(function(){try{process.stdin.on("data",function(d){if(d.toString().indexOf("\x1e")!==-1){_frozen=!_frozen;if(_frozen){_ow("\x1b]0;Claude Code [FROZEN - Ctrl+6 to resume]\x07")}else{if(_buf.length>0){var a="";for(var i=0;i<_buf.length;i++)a+=_buf[i];_buf=[];_ow(a)}_ow("\x1b]0;Claude Code\x07")}}})}catch(e){}},2000);process.stdout.write=function(d,e,c){if(typeof e==="function"){c=e;e=void 0}var s=typeof d==="string"?d:Buffer.isBuffer(d)?d.toString("utf-8"):String(d);var maxUp=process.stdout.rows||24;var upBudget=maxUp;s=s.replace(/\x1b\[(\d*)A/g,function(m,p){var n=parseInt(p)||1;if(upBudget<=0)return"";var allowed=n>upBudget?upBudget:n;upBudget-=allowed;return"\x1b["+allowed+"A"});if(_frozen){_buf.push(s);if(c)c();return true}if(typeof d==="string")return _ow(s,e,c);return _ow(Buffer.from(s,"utf-8"),e,c)};})(); + import{createRequire as epq}from"node:module";var ipq=Object.create;var{getPrototypeOf:npq,defineProperty:uk6,getOwnPropertyNames:X6A,getOwnPropertyDescriptor:rpq}=Object,P6A=Object.prototype.hasOwnProperty;function W6A(A){return this[A]}var apq,opq,q6=(A,q,K)=>{var Y=A!=null&&typeof A==="object";if(Y){var z=q?apq??=new WeakMap:opq??=new WeakMap,_=z.get(A);if(_)return _}K=A!=null?ipq(npq(A)):{};let w=q||!A||!A.__esModule?uk6(K,"default",{value:A,enumerable:!0}):K;for(let O of X6A(A))if(!P6A.call(w,O))uk6(w,O,{get:W6A.bind(A,O),enumerable:!0});if(Y)z.set(A,w);return w},k4=(A)=>{var q=(M6A??=new WeakMap).get(A),K;if(q)return q;if(q=uk6({},"__esModule",{value:!0}),A&&typeof A==="object"||typeof A==="function"){for(var Y of X6A(A))if(!P6A.call(q,Y))uk6(q,Y,{get:W6A.bind(A,Y),enumerable:!(K=rpq(A,Y))||K.enumerable})}return M6A.set(A,q),q},M6A,x=(A,q)=>()=>(q||A((q={exports:{}}).exports,q),q.exports);var spq=(A)=>A;function tpq(A,q){this[A]=spq.bind(null,q)}var k1=(A,q)=>{for(var K in q)uk6(A,K,{get:q[K],enumerable:!0,configurable:!0,set:tpq.bind(q,K)})};var y=(A,q)=>()=>(A&&(q=A(A=0)),q);var m6=epq(import.meta.url),AQq=Symbol.dispose||Symbol.for("Symbol.dispose"),qQq=Symbol.asyncDispose||Symbol.for("Symbol.asyncDispose"),DY=(A,q,K)=>{if(q!=null){if(typeof q!=="object"&&typeof q!=="function")throw TypeError('Object expected to be assigned to "using" declaration');var Y;if(K)Y=q[qQq];if(Y===void 0)Y=q[AQq];if(typeof Y!=="function")throw TypeError("Object not disposable");A.push([K,Y,q])}else if(K)A.push([K]);return q},MY=(A,q,K)=>{var Y=typeof SuppressedError==="function"?SuppressedError:function(w,O,$,H){return H=Error($),H.name="SuppressedError",H.error=w,H.suppressed=O,H},z=(w)=>q=K?new Y(w,q,"An error was suppressed during disposal"):(K=!0,w),_=(w)=>{while(w=A.pop())try{var O=w[1]&&w[1].call(w[2]);if(w[0])return Promise.resolve(O).then(_,($)=>(z($),_()))}catch($){z($)}if(K)throw q};return _()};var KQq,zt6;var dx1=y(()=>{KQq=typeof global=="object"&&global&&global.Object===Object&&global,zt6=KQq});var YQq,zQq,SH;var Wy=y(()=>{dx1();YQq=typeof self=="object"&&self&&self.Object===Object&&self,zQq=zt6||YQq||Function("return this")(),SH=zQq});var _Qq,LM;var qA6=y(()=>{Wy();_Qq=SH.Symbol,LM=_Qq});function $Qq(A){var q=wQq.call(A,mk6),K=A[mk6];try{A[mk6]=void 0;var Y=!0}catch(_){}var z=OQq.call(A);if(Y)if(q)A[mk6]=K;else delete A[mk6];return z}var Z6A,wQq,OQq,mk6,G6A;var f6A=y(()=>{qA6();Z6A=Object.prototype,wQq=Z6A.hasOwnProperty,OQq=Z6A.toString,mk6=LM?LM.toStringTag:void 0;G6A=$Qq});function JQq(A){return jQq.call(A)}var HQq,jQq,T6A;var v6A=y(()=>{HQq=Object.prototype,jQq=HQq.toString;T6A=JQq});function XQq(A){if(A==null)return A===void 0?MQq:DQq;return N6A&&N6A in Object(A)?G6A(A):T6A(A)}var DQq="[object Null]",MQq="[object Undefined]",N6A,MV;var KA6=y(()=>{qA6();f6A();v6A();N6A=LM?LM.toStringTag:void 0;MV=XQq});function PQq(A){var q=typeof A;return A!=null&&(q=="object"||q=="function")}var tz;var HG=y(()=>{tz=PQq});function TQq(A){if(!tz(A))return!1;var q=MV(A);return q==ZQq||q==GQq||q==WQq||q==fQq}var WQq="[object AsyncFunction]",ZQq="[object Function]",GQq="[object GeneratorFunction]",fQq="[object Proxy]",Fw6;var _t6=y(()=>{KA6();HG();Fw6=TQq});var vQq,wt6;var V6A=y(()=>{Wy();vQq=SH["__core-js_shared__"],wt6=vQq});function NQq(A){return!!k6A&&k6A in A}var k6A,E6A;var y6A=y(()=>{V6A();k6A=function(){var A=/[^.]+$/.exec(wt6&&wt6.keys&&wt6.keys.IE_PROTO||"");return A?"Symbol(src)_1."+A:""}();E6A=NQq});function EQq(A){if(A!=null){try{return kQq.call(A)}catch(q){}try{return A+""}catch(q){}}return""}var VQq,kQq,Ip;var cx1=y(()=>{VQq=Function.prototype,kQq=VQq.toString;Ip=EQq});function bQq(A){if(!tz(A)||E6A(A))return!1;var q=Fw6(A)?IQq:LQq;return q.test(Ip(A))}var yQq,LQq,RQq,hQq,SQq,CQq,IQq,L6A;var R6A=y(()=>{_t6();y6A();HG();cx1();yQq=/[\\^$.*+?()[\]{}|]/g,LQq=/^\[object .+?Constructor\]$/,RQq=Function.prototype,hQq=Object.prototype,SQq=RQq.toString,CQq=hQq.hasOwnProperty,IQq=RegExp("^"+SQq.call(CQq).replace(yQq,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");L6A=bQq});function xQq(A,q){return A==null?void 0:A[q]}var h6A;var S6A=y(()=>{h6A=xQq});function uQq(A,q){var K=h6A(A,q);return L6A(K)?K:void 0}var LT;var Fn=y(()=>{R6A();S6A();LT=uQq});var mQq,bp;var Bk6=y(()=>{Fn();mQq=LT(Object,"create"),bp=mQq});function BQq(){this.__data__=bp?bp(null):{},this.size=0}var C6A;var I6A=y(()=>{Bk6();C6A=BQq});function gQq(A){var q=this.has(A)&&delete this.__data__[A];return this.size-=q?1:0,q}var b6A;var x6A=y(()=>{b6A=gQq});function UQq(A){var q=this.__data__;if(bp){var K=q[A];return K===FQq?void 0:K}return QQq.call(q,A)?q[A]:void 0}var FQq="__lodash_hash_undefined__",pQq,QQq,u6A;var m6A=y(()=>{Bk6();pQq=Object.prototype,QQq=pQq.hasOwnProperty;u6A=UQq});function lQq(A){var q=this.__data__;return bp?q[A]!==void 0:cQq.call(q,A)}var dQq,cQq,B6A;var g6A=y(()=>{Bk6();dQq=Object.prototype,cQq=dQq.hasOwnProperty;B6A=lQq});function nQq(A,q){var K=this.__data__;return this.size+=this.has(A)?0:1,K[A]=bp&&q===void 0?iQq:q,this}var iQq="__lodash_hash_undefined__",F6A;var p6A=y(()=>{Bk6();F6A=nQq});function pw6(A){var q=-1,K=A==null?0:A.length;this.clear();while(++q{I6A();x6A();m6A();g6A();p6A();pw6.prototype.clear=C6A;pw6.prototype.delete=b6A;pw6.prototype.get=u6A;pw6.prototype.has=B6A;pw6.prototype.set=F6A;lx1=pw6});function rQq(){this.__data__=[],this.size=0}var U6A;var d6A=y(()=>{U6A=rQq});function aQq(A,q){return A===q||A!==A&&q!==q}var mx;var Qw6=y(()=>{mx=aQq});function oQq(A,q){var K=A.length;while(K--)if(mx(A[K][0],q))return K;return-1}var pn;var gk6=y(()=>{Qw6();pn=oQq});function eQq(A){var q=this.__data__,K=pn(q,A);if(K<0)return!1;var Y=q.length-1;if(K==Y)q.pop();else tQq.call(q,K,1);return--this.size,!0}var sQq,tQq,c6A;var l6A=y(()=>{gk6();sQq=Array.prototype,tQq=sQq.splice;c6A=eQq});function AUq(A){var q=this.__data__,K=pn(q,A);return K<0?void 0:q[K][1]}var i6A;var n6A=y(()=>{gk6();i6A=AUq});function qUq(A){return pn(this.__data__,A)>-1}var r6A;var a6A=y(()=>{gk6();r6A=qUq});function KUq(A,q){var K=this.__data__,Y=pn(K,A);if(Y<0)++this.size,K.push([A,q]);else K[Y][1]=q;return this}var o6A;var s6A=y(()=>{gk6();o6A=KUq});function Uw6(A){var q=-1,K=A==null?0:A.length;this.clear();while(++q{d6A();l6A();n6A();a6A();s6A();Uw6.prototype.clear=U6A;Uw6.prototype.delete=c6A;Uw6.prototype.get=i6A;Uw6.prototype.has=r6A;Uw6.prototype.set=o6A;Qn=Uw6});var YUq,Un;var Ot6=y(()=>{Fn();Wy();YUq=LT(SH,"Map"),Un=YUq});function zUq(){this.size=0,this.__data__={hash:new lx1,map:new(Un||Qn),string:new lx1}}var t6A;var e6A=y(()=>{Q6A();Fk6();Ot6();t6A=zUq});function _Uq(A){var q=typeof A;return q=="string"||q=="number"||q=="symbol"||q=="boolean"?A!=="__proto__":A===null}var A1A;var q1A=y(()=>{A1A=_Uq});function wUq(A,q){var K=A.__data__;return A1A(q)?K[typeof q=="string"?"string":"hash"]:K.map}var dn;var pk6=y(()=>{q1A();dn=wUq});function OUq(A){var q=dn(this,A).delete(A);return this.size-=q?1:0,q}var K1A;var Y1A=y(()=>{pk6();K1A=OUq});function $Uq(A){return dn(this,A).get(A)}var z1A;var _1A=y(()=>{pk6();z1A=$Uq});function HUq(A){return dn(this,A).has(A)}var w1A;var O1A=y(()=>{pk6();w1A=HUq});function jUq(A,q){var K=dn(this,A),Y=K.size;return K.set(A,q),this.size+=K.size==Y?0:1,this}var $1A;var H1A=y(()=>{pk6();$1A=jUq});function dw6(A){var q=-1,K=A==null?0:A.length;this.clear();while(++q{e6A();Y1A();_1A();O1A();H1A();dw6.prototype.clear=t6A;dw6.prototype.delete=K1A;dw6.prototype.get=z1A;dw6.prototype.has=w1A;dw6.prototype.set=$1A;YA6=dw6});function ix1(A,q){if(typeof A!="function"||q!=null&&typeof q!="function")throw TypeError(JUq);var K=function(){var Y=arguments,z=q?q.apply(this,Y):Y[0],_=K.cache;if(_.has(z))return _.get(z);var w=A.apply(this,Y);return K.cache=_.set(z,w)||_,w};return K.cache=new(ix1.Cache||YA6),K}var JUq="Expected a function",A8;var n4=y(()=>{$t6();ix1.Cache=YA6;A8=ix1});import{randomUUID as nx1}from"crypto";var j1A=()=>{};function DUq(){this.__data__=new Qn,this.size=0}var J1A;var D1A=y(()=>{Fk6();J1A=DUq});function MUq(A){var q=this.__data__,K=q.delete(A);return this.size=q.size,K}var M1A;var X1A=y(()=>{M1A=MUq});function XUq(A){return this.__data__.get(A)}var P1A;var W1A=y(()=>{P1A=XUq});function PUq(A){return this.__data__.has(A)}var Z1A;var G1A=y(()=>{Z1A=PUq});function ZUq(A,q){var K=this.__data__;if(K instanceof Qn){var Y=K.__data__;if(!Un||Y.length{Fk6();Ot6();$t6();f1A=ZUq});function cw6(A){var q=this.__data__=new Qn(A);this.size=q.size}var Bx;var Qk6=y(()=>{Fk6();D1A();X1A();W1A();G1A();T1A();cw6.prototype.clear=J1A;cw6.prototype.delete=M1A;cw6.prototype.get=P1A;cw6.prototype.has=Z1A;cw6.prototype.set=f1A;Bx=cw6});function fUq(A){return this.__data__.set(A,GUq),this}var GUq="__lodash_hash_undefined__",v1A;var N1A=y(()=>{v1A=fUq});function TUq(A){return this.__data__.has(A)}var V1A;var k1A=y(()=>{V1A=TUq});function Ht6(A){var q=-1,K=A==null?0:A.length;this.__data__=new YA6;while(++q{$t6();N1A();k1A();Ht6.prototype.add=Ht6.prototype.push=v1A;Ht6.prototype.has=V1A;jt6=Ht6});function vUq(A,q){var K=-1,Y=A==null?0:A.length;while(++K{E1A=vUq});function NUq(A,q){return A.has(q)}var Jt6;var ax1=y(()=>{Jt6=NUq});function EUq(A,q,K,Y,z,_){var w=K&VUq,O=A.length,$=q.length;if(O!=$&&!(w&&$>O))return!1;var H=_.get(A),j=_.get(q);if(H&&j)return H==q&&j==A;var J=-1,D=!0,M=K&kUq?new jt6:void 0;_.set(A,q),_.set(q,A);while(++J{rx1();y1A();ax1();Dt6=EUq});var yUq,lw6;var sx1=y(()=>{Wy();yUq=SH.Uint8Array,lw6=yUq});function LUq(A){var q=-1,K=Array(A.size);return A.forEach(function(Y,z){K[++q]=[z,Y]}),K}var L1A;var R1A=y(()=>{L1A=LUq});function RUq(A){var q=-1,K=Array(A.size);return A.forEach(function(Y){K[++q]=Y}),K}var iw6;var Mt6=y(()=>{iw6=RUq});function UUq(A,q,K,Y,z,_,w){switch(K){case QUq:if(A.byteLength!=q.byteLength||A.byteOffset!=q.byteOffset)return!1;A=A.buffer,q=q.buffer;case pUq:if(A.byteLength!=q.byteLength||!_(new lw6(A),new lw6(q)))return!1;return!0;case CUq:case IUq:case uUq:return mx(+A,+q);case bUq:return A.name==q.name&&A.message==q.message;case mUq:case gUq:return A==q+"";case xUq:var O=L1A;case BUq:var $=Y&hUq;if(O||(O=iw6),A.size!=q.size&&!$)return!1;var H=w.get(A);if(H)return H==q;Y|=SUq,w.set(A,q);var j=Dt6(O(A),O(q),Y,z,_,w);return w.delete(A),j;case FUq:if(tx1)return tx1.call(A)==tx1.call(q)}return!1}var hUq=1,SUq=2,CUq="[object Boolean]",IUq="[object Date]",bUq="[object Error]",xUq="[object Map]",uUq="[object Number]",mUq="[object RegExp]",BUq="[object Set]",gUq="[object String]",FUq="[object Symbol]",pUq="[object ArrayBuffer]",QUq="[object DataView]",h1A,tx1,S1A;var C1A=y(()=>{qA6();sx1();Qw6();ox1();R1A();Mt6();h1A=LM?LM.prototype:void 0,tx1=h1A?h1A.valueOf:void 0;S1A=UUq});function dUq(A,q){var K=-1,Y=q.length,z=A.length;while(++K{nw6=dUq});var cUq,ez;var jG=y(()=>{cUq=Array.isArray,ez=cUq});function lUq(A,q,K){var Y=q(A);return ez(A)?Y:nw6(Y,K(A))}var Pt6;var ex1=y(()=>{Xt6();jG();Pt6=lUq});function iUq(A,q){var K=-1,Y=A==null?0:A.length,z=0,_=[];while(++K{Wt6=iUq});function nUq(){return[]}var Zt6;var qu1=y(()=>{Zt6=nUq});var rUq,aUq,I1A,oUq,rw6;var Gt6=y(()=>{Au1();qu1();rUq=Object.prototype,aUq=rUq.propertyIsEnumerable,I1A=Object.getOwnPropertySymbols,oUq=!I1A?Zt6:function(A){if(A==null)return[];return A=Object(A),Wt6(I1A(A),function(q){return aUq.call(A,q)})},rw6=oUq});function sUq(A,q){var K=-1,Y=Array(A);while(++K{b1A=sUq});function tUq(A){return A!=null&&typeof A=="object"}var TD;var gx=y(()=>{TD=tUq});function Adq(A){return TD(A)&&MV(A)==eUq}var eUq="[object Arguments]",Ku1;var u1A=y(()=>{KA6();gx();Ku1=Adq});var m1A,qdq,Kdq,Ydq,xp;var Uk6=y(()=>{u1A();gx();m1A=Object.prototype,qdq=m1A.hasOwnProperty,Kdq=m1A.propertyIsEnumerable,Ydq=Ku1(function(){return arguments}())?Ku1:function(A){return TD(A)&&qdq.call(A,"callee")&&!Kdq.call(A,"callee")},xp=Ydq});function zdq(){return!1}var B1A;var g1A=y(()=>{B1A=zdq});var Tt6={};k1(Tt6,{default:()=>Fx});var Q1A,F1A,_dq,p1A,wdq,Odq,Fx;var dk6=y(()=>{Wy();g1A();Q1A=typeof Tt6=="object"&&Tt6&&!Tt6.nodeType&&Tt6,F1A=Q1A&&typeof ft6=="object"&&ft6&&!ft6.nodeType&&ft6,_dq=F1A&&F1A.exports===Q1A,p1A=_dq?SH.Buffer:void 0,wdq=p1A?p1A.isBuffer:void 0,Odq=wdq||B1A,Fx=Odq});function jdq(A,q){var K=typeof A;return q=q==null?$dq:q,!!q&&(K=="number"||K!="symbol"&&Hdq.test(A))&&(A>-1&&A%1==0&&A{Hdq=/^(?:0|[1-9]\d*)$/;cn=jdq});function Ddq(A){return typeof A=="number"&&A>-1&&A%1==0&&A<=Jdq}var Jdq=9007199254740991,aw6;var vt6=y(()=>{aw6=Ddq});function Bdq(A){return TD(A)&&aw6(A.length)&&!!AO[MV(A)]}var Mdq="[object Arguments]",Xdq="[object Array]",Pdq="[object Boolean]",Wdq="[object Date]",Zdq="[object Error]",Gdq="[object Function]",fdq="[object Map]",Tdq="[object Number]",vdq="[object Object]",Ndq="[object RegExp]",Vdq="[object Set]",kdq="[object String]",Edq="[object WeakMap]",ydq="[object ArrayBuffer]",Ldq="[object DataView]",Rdq="[object Float32Array]",hdq="[object Float64Array]",Sdq="[object Int8Array]",Cdq="[object Int16Array]",Idq="[object Int32Array]",bdq="[object Uint8Array]",xdq="[object Uint8ClampedArray]",udq="[object Uint16Array]",mdq="[object Uint32Array]",AO,U1A;var d1A=y(()=>{KA6();vt6();gx();AO={};AO[Rdq]=AO[hdq]=AO[Sdq]=AO[Cdq]=AO[Idq]=AO[bdq]=AO[xdq]=AO[udq]=AO[mdq]=!0;AO[Mdq]=AO[Xdq]=AO[ydq]=AO[Pdq]=AO[Ldq]=AO[Wdq]=AO[Zdq]=AO[Gdq]=AO[fdq]=AO[Tdq]=AO[vdq]=AO[Ndq]=AO[Vdq]=AO[kdq]=AO[Edq]=!1;U1A=Bdq});function gdq(A){return function(q){return A(q)}}var ow6;var Nt6=y(()=>{ow6=gdq});var kt6={};k1(kt6,{default:()=>px});var c1A,lk6,Fdq,Yu1,pdq,px;var Et6=y(()=>{dx1();c1A=typeof kt6=="object"&&kt6&&!kt6.nodeType&&kt6,lk6=c1A&&typeof Vt6=="object"&&Vt6&&!Vt6.nodeType&&Vt6,Fdq=lk6&&lk6.exports===c1A,Yu1=Fdq&&zt6.process,pdq=function(){try{var A=lk6&&lk6.require&&lk6.require("util").types;if(A)return A;return Yu1&&Yu1.binding&&Yu1.binding("util")}catch(q){}}(),px=pdq});var l1A,Qdq,sw6;var yt6=y(()=>{d1A();Nt6();Et6();l1A=px&&px.isTypedArray,Qdq=l1A?ow6(l1A):U1A,sw6=Qdq});function cdq(A,q){var K=ez(A),Y=!K&&xp(A),z=!K&&!Y&&Fx(A),_=!K&&!Y&&!z&&sw6(A),w=K||Y||z||_,O=w?b1A(A.length,String):[],$=O.length;for(var H in A)if((q||ddq.call(A,H))&&!(w&&(H=="length"||z&&(H=="offset"||H=="parent")||_&&(H=="buffer"||H=="byteLength"||H=="byteOffset")||cn(H,$))))O.push(H);return O}var Udq,ddq,Lt6;var zu1=y(()=>{x1A();Uk6();jG();dk6();ck6();yt6();Udq=Object.prototype,ddq=Udq.hasOwnProperty;Lt6=cdq});function idq(A){var q=A&&A.constructor,K=typeof q=="function"&&q.prototype||ldq;return A===K}var ldq,tw6;var Rt6=y(()=>{ldq=Object.prototype;tw6=idq});function ndq(A,q){return function(K){return A(q(K))}}var ht6;var _u1=y(()=>{ht6=ndq});var rdq,i1A;var n1A=y(()=>{_u1();rdq=ht6(Object.keys,Object),i1A=rdq});function sdq(A){if(!tw6(A))return i1A(A);var q=[];for(var K in Object(A))if(odq.call(A,K)&&K!="constructor")q.push(K);return q}var adq,odq,r1A;var a1A=y(()=>{Rt6();n1A();adq=Object.prototype,odq=adq.hasOwnProperty;r1A=sdq});function tdq(A){return A!=null&&aw6(A.length)&&!Fw6(A)}var Qx;var ew6=y(()=>{_t6();vt6();Qx=tdq});function edq(A){return Qx(A)?Lt6(A):r1A(A)}var Zy;var zA6=y(()=>{zu1();a1A();ew6();Zy=edq});function Acq(A){return Pt6(A,Zy,rw6)}var ik6;var wu1=y(()=>{ex1();Gt6();zA6();ik6=Acq});function zcq(A,q,K,Y,z,_){var w=K&qcq,O=ik6(A),$=O.length,H=ik6(q),j=H.length;if($!=j&&!w)return!1;var J=$;while(J--){var D=O[J];if(!(w?D in q:Ycq.call(q,D)))return!1}var M=_.get(A),X=_.get(q);if(M&&X)return M==q&&X==A;var P=!0;_.set(A,q),_.set(q,A);var W=w;while(++J<$){D=O[J];var Z=A[D],G=q[D];if(Y)var f=w?Y(G,Z,D,q,A,_):Y(Z,G,D,A,q,_);if(!(f===void 0?Z===G||z(Z,G,K,Y,_):f)){P=!1;break}W||(W=D=="constructor")}if(P&&!W){var T=A.constructor,N=q.constructor;if(T!=N&&(("constructor"in A)&&("constructor"in q))&&!(typeof T=="function"&&T instanceof T&&typeof N=="function"&&N instanceof N))P=!1}return _.delete(A),_.delete(q),P}var qcq=1,Kcq,Ycq,o1A;var s1A=y(()=>{wu1();Kcq=Object.prototype,Ycq=Kcq.hasOwnProperty;o1A=zcq});var _cq,St6;var t1A=y(()=>{Fn();Wy();_cq=LT(SH,"DataView"),St6=_cq});var wcq,Ct6;var e1A=y(()=>{Fn();Wy();wcq=LT(SH,"Promise"),Ct6=wcq});var Ocq,ln;var Ou1=y(()=>{Fn();Wy();Ocq=LT(SH,"Set"),ln=Ocq});var $cq,It6;var A8A=y(()=>{Fn();Wy();$cq=LT(SH,"WeakMap"),It6=$cq});var q8A="[object Map]",Hcq="[object Object]",K8A="[object Promise]",Y8A="[object Set]",z8A="[object WeakMap]",_8A="[object DataView]",jcq,Jcq,Dcq,Mcq,Xcq,_A6,up;var nk6=y(()=>{t1A();Ot6();e1A();Ou1();A8A();KA6();cx1();jcq=Ip(St6),Jcq=Ip(Un),Dcq=Ip(Ct6),Mcq=Ip(ln),Xcq=Ip(It6),_A6=MV;if(St6&&_A6(new St6(new ArrayBuffer(1)))!=_8A||Un&&_A6(new Un)!=q8A||Ct6&&_A6(Ct6.resolve())!=K8A||ln&&_A6(new ln)!=Y8A||It6&&_A6(new It6)!=z8A)_A6=function(A){var q=MV(A),K=q==Hcq?A.constructor:void 0,Y=K?Ip(K):"";if(Y)switch(Y){case jcq:return _8A;case Jcq:return q8A;case Dcq:return K8A;case Mcq:return Y8A;case Xcq:return z8A}return q};up=_A6});function Zcq(A,q,K,Y,z,_){var w=ez(A),O=ez(q),$=w?O8A:up(A),H=O?O8A:up(q);$=$==w8A?bt6:$,H=H==w8A?bt6:H;var j=$==bt6,J=H==bt6,D=$==H;if(D&&Fx(A)){if(!Fx(q))return!1;w=!0,j=!1}if(D&&!j)return _||(_=new Bx),w||sw6(A)?Dt6(A,q,K,Y,z,_):S1A(A,q,$,K,Y,z,_);if(!(K&Pcq)){var M=j&&$8A.call(A,"__wrapped__"),X=J&&$8A.call(q,"__wrapped__");if(M||X){var P=M?A.value():A,W=X?q.value():q;return _||(_=new Bx),z(P,W,K,Y,_)}}if(!D)return!1;return _||(_=new Bx),o1A(A,q,K,Y,z,_)}var Pcq=1,w8A="[object Arguments]",O8A="[object Array]",bt6="[object Object]",Wcq,$8A,H8A;var j8A=y(()=>{Qk6();ox1();C1A();s1A();nk6();jG();dk6();yt6();Wcq=Object.prototype,$8A=Wcq.hasOwnProperty;H8A=Zcq});function J8A(A,q,K,Y,z){if(A===q)return!0;if(A==null||q==null||!TD(A)&&!TD(q))return A!==A&&q!==q;return H8A(A,q,K,Y,J8A,z)}var AO6;var xt6=y(()=>{j8A();gx();AO6=J8A});function Tcq(A,q,K,Y){var z=K.length,_=z,w=!Y;if(A==null)return!_;A=Object(A);while(z--){var O=K[z];if(w&&O[2]?O[1]!==A[O[0]]:!(O[0]in A))return!1}while(++z<_){O=K[z];var $=O[0],H=A[$],j=O[1];if(w&&O[2]){if(H===void 0&&!($ in A))return!1}else{var J=new Bx;if(Y)var D=Y(H,j,$,A,q,J);if(!(D===void 0?AO6(j,H,Gcq|fcq,Y,J):D))return!1}}return!0}var Gcq=1,fcq=2,D8A;var M8A=y(()=>{Qk6();xt6();D8A=Tcq});function vcq(A){return A===A&&!tz(A)}var ut6;var $u1=y(()=>{HG();ut6=vcq});function Ncq(A){var q=Zy(A),K=q.length;while(K--){var Y=q[K],z=A[Y];q[K]=[Y,z,ut6(z)]}return q}var X8A;var P8A=y(()=>{$u1();zA6();X8A=Ncq});function Vcq(A,q){return function(K){if(K==null)return!1;return K[A]===q&&(q!==void 0||(A in Object(K)))}}var mt6;var Hu1=y(()=>{mt6=Vcq});function kcq(A){var q=X8A(A);if(q.length==1&&q[0][2])return mt6(q[0][0],q[0][1]);return function(K){return K===A||D8A(K,A,q)}}var W8A;var Z8A=y(()=>{M8A();P8A();Hu1();W8A=kcq});function ycq(A){return typeof A=="symbol"||TD(A)&&MV(A)==Ecq}var Ecq="[object Symbol]",nn;var rk6=y(()=>{KA6();gx();nn=ycq});function hcq(A,q){if(ez(A))return!1;var K=typeof A;if(K=="number"||K=="symbol"||K=="boolean"||A==null||nn(A))return!0;return Rcq.test(A)||!Lcq.test(A)||q!=null&&A in Object(q)}var Lcq,Rcq,qO6;var Bt6=y(()=>{jG();rk6();Lcq=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Rcq=/^\w*$/;qO6=hcq});function Ccq(A){var q=A8(A,function(Y){if(K.size===Scq)K.clear();return Y}),K=q.cache;return q}var Scq=500,G8A;var f8A=y(()=>{n4();G8A=Ccq});var Icq,bcq,xcq,T8A;var v8A=y(()=>{f8A();Icq=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,bcq=/\\(\\)?/g,xcq=G8A(function(A){var q=[];if(A.charCodeAt(0)===46)q.push("");return A.replace(Icq,function(K,Y,z,_){q.push(z?_.replace(bcq,"$1"):Y||K)}),q}),T8A=xcq});function ucq(A,q){var K=-1,Y=A==null?0:A.length,z=Array(Y);while(++K{KO6=ucq});function k8A(A){if(typeof A=="string")return A;if(ez(A))return KO6(A,k8A)+"";if(nn(A))return V8A?V8A.call(A):"";var q=A+"";return q=="0"&&1/A==-mcq?"-0":q}var mcq=1/0,N8A,V8A,E8A;var y8A=y(()=>{qA6();gt6();jG();rk6();N8A=LM?LM.prototype:void 0,V8A=N8A?N8A.toString:void 0;E8A=k8A});function Bcq(A){return A==null?"":E8A(A)}var YO6;var Ft6=y(()=>{y8A();YO6=Bcq});function gcq(A,q){if(ez(A))return A;return qO6(A,q)?[A]:T8A(YO6(A))}var Ux;var zO6=y(()=>{jG();Bt6();v8A();Ft6();Ux=gcq});function pcq(A){if(typeof A=="string"||nn(A))return A;var q=A+"";return q=="0"&&1/A==-Fcq?"-0":q}var Fcq=1/0,Gy;var wA6=y(()=>{rk6();Gy=pcq});function Qcq(A,q){q=Ux(q,A);var K=0,Y=q.length;while(A!=null&&K{zO6();wA6();_O6=Qcq});function Ucq(A,q,K){var Y=A==null?void 0:_O6(A,q);return Y===void 0?K:Y}var L8A;var R8A=y(()=>{pt6();L8A=Ucq});function dcq(A,q){return A!=null&&q in Object(A)}var h8A;var S8A=y(()=>{h8A=dcq});function ccq(A,q,K){q=Ux(q,A);var Y=-1,z=q.length,_=!1;while(++Y{zO6();Uk6();jG();ck6();vt6();wA6();C8A=ccq});function lcq(A,q){return A!=null&&C8A(A,q,h8A)}var b8A;var x8A=y(()=>{S8A();I8A();b8A=lcq});function rcq(A,q){if(qO6(A)&&ut6(q))return mt6(Gy(A),q);return function(K){var Y=L8A(K,A);return Y===void 0&&Y===q?b8A(K,A):AO6(q,Y,icq|ncq)}}var icq=1,ncq=2,u8A;var m8A=y(()=>{xt6();R8A();x8A();Bt6();$u1();Hu1();wA6();u8A=rcq});function acq(A){return A}var wO6;var Qt6=y(()=>{wO6=acq});function ocq(A){return function(q){return q==null?void 0:q[A]}}var B8A;var g8A=y(()=>{B8A=ocq});function scq(A){return function(q){return _O6(q,A)}}var F8A;var p8A=y(()=>{pt6();F8A=scq});function tcq(A){return qO6(A)?B8A(Gy(A)):F8A(A)}var Q8A;var U8A=y(()=>{g8A();p8A();Bt6();wA6();Q8A=tcq});function ecq(A){if(typeof A=="function")return A;if(A==null)return wO6;if(typeof A=="object")return ez(A)?u8A(A[0],A[1]):W8A(A);return Q8A(A)}var dx;var OO6=y(()=>{Z8A();m8A();Qt6();jG();U8A();dx=ecq});function Alq(A,q){var K,Y=-1,z=A.length;while(++Y{d8A=Alq});function qlq(A,q){return A&&A.length?d8A(A,dx(q,2)):0}var $O6;var l8A=y(()=>{OO6();c8A();$O6=qlq});function i8A(){return ju1}function n8A(A){ju1=A}function DP(){ju1=null}function Ut6(){return Ju1}function r8A(A){Ju1=A}function a8A(){Ju1=void 0}var ju1=null,Ju1;var Vm1={};k1(Vm1,{updateLastInteractionTime:()=>OA6,switchSession:()=>MP,snapshotOutputTokensForTurn:()=>Wlq,setUserMsgOptIn:()=>ix,setUseCoworkPlugins:()=>PV,setTracerProvider:()=>tt6,setTeleportedSessionInfo:()=>PE6,setSystemPromptSectionCacheEntry:()=>Gm1,setStatsStore:()=>Eu1,setSessionTrustAccepted:()=>DE6,setSessionSource:()=>iu1,setSessionPersistenceDisabled:()=>wm1,setSessionIngressToken:()=>DA6,setSessionBypassPermissionsMode:()=>zm1,setSdkBetas:()=>uu1,setSdkAgentProgressSummariesEnabled:()=>lu1,setScheduledTasksEnabled:()=>HE6,setQuestionPreviewFormat:()=>Ae6,setPromptId:()=>GE6,setPromptCache1hAllowlist:()=>Nm1,setProjectRoot:()=>ok6,setOriginalCwd:()=>mp,setOauthTokenFromFd:()=>MA6,setNeedsPlanModeExitAttachment:()=>LS,setNeedsAutoModeExitAttachment:()=>RS,setModelStrings:()=>qE6,setMeterProvider:()=>st6,setMeter:()=>mu1,setMainThreadAgentType:()=>Qp,setMainLoopModelOverride:()=>TW,setLspRecommendationShownThisSession:()=>Jm1,setLoggerProvider:()=>at6,setLastMainRequestId:()=>Iu1,setLastEmittedDate:()=>TO6,setLastClassifierRequests:()=>_E6,setLastAPIRequest:()=>tu1,setKairosActive:()=>vlq,setIsRemoteMode:()=>Pm1,setIsInteractive:()=>du1,setIsInWorktree:()=>fA6,setInlinePlugins:()=>Km1,setInitialMainLoopModel:()=>xu1,setInitJsonSchema:()=>Dm1,setHasUnknownModelCost:()=>nt6,setHasExitedPlanMode:()=>ZV,setHasDevChannels:()=>hlq,setFlagSettingsPath:()=>nu1,setFlagSettingsInline:()=>ru1,setEventLogger:()=>ot6,setDirectConnectServerUrl:()=>Ylq,setCwdState:()=>dt6,setCostStateForRestore:()=>AE6,setClientType:()=>cu1,setChromeFlagOverride:()=>Ym1,setApiKeyFromFd:()=>XA6,setAllowedSettingSources:()=>qm1,setAllowedChannels:()=>Llq,setAdditionalDirectoriesForClaudeMd:()=>WE6,resetTurnToolDuration:()=>Nu1,resetTurnHookDuration:()=>vu1,resetTurnClassifierDuration:()=>ku1,resetTotalDurationStateAndCost_FOR_TESTS_ONLY:()=>zlq,resetStateForTests:()=>qAA,resetSdkInitState:()=>YAA,resetModelStringsForTestingOnly:()=>flq,resetCostState:()=>DO6,removeSessionCronTasks:()=>JE6,registerHookCallbacks:()=>ZA6,regenerateSessionId:()=>Mu1,preferThirdPartyAuthentication:()=>wE6,needsPlanModeExitAttachment:()=>Om1,needsAutoModeExitAttachment:()=>$m1,markFirstTeleportMessageLogged:()=>ze6,isSessionPersistenceDisabled:()=>WV,incrementBudgetContinuationCount:()=>Glq,hasUnknownModelCost:()=>Cu1,hasShownLspRecommendationThisSession:()=>jm1,hasExitedPlanModeInSession:()=>ME6,handlePlanModeTransition:()=>gp,handleAutoModeTransition:()=>Hm1,getUserMsgOptIn:()=>JG,getUseCoworkPlugins:()=>$E6,getUsageForModel:()=>bu1,getTurnToolDurationMs:()=>jlq,getTurnToolCount:()=>Jlq,getTurnOutputTokens:()=>Xlq,getTurnHookDurationMs:()=>$lq,getTurnHookCount:()=>Hlq,getTurnClassifierDurationMs:()=>Dlq,getTurnClassifierCount:()=>Mlq,getTracerProvider:()=>JA6,getTotalWebSearchRequests:()=>Ru1,getTotalToolDuration:()=>fu1,getTotalOutputTokens:()=>Bp,getTotalLinesRemoved:()=>HA6,getTotalLinesAdded:()=>$A6,getTotalInputTokens:()=>jA6,getTotalDuration:()=>HO6,getTotalCostUSD:()=>RM,getTotalCacheReadInputTokens:()=>sk6,getTotalCacheCreationInputTokens:()=>tk6,getTotalAPIDurationWithoutRetries:()=>Gu1,getTotalAPIDuration:()=>XV,getTokenSaverHits:()=>Olq,getTokenSaverBytesSaved:()=>wlq,getTokenCounter:()=>XO6,getTeleportedSessionInfo:()=>Ye6,getSystemPromptSectionCache:()=>Zm1,getStatsStore:()=>jO6,getSlowOperations:()=>_AA,getSessionTrustAccepted:()=>GO6,getSessionSource:()=>Nlq,getSessionProjectDir:()=>ak6,getSessionIngressToken:()=>au1,getSessionId:()=>y1,getSessionCronTasks:()=>jE6,getSessionCreatedTeams:()=>XE6,getSessionCounter:()=>Bu1,getSessionBypassPermissionsMode:()=>WA6,getSdkBetas:()=>fj,getSdkAgentProgressSummariesEnabled:()=>lx,getScheduledTasksEnabled:()=>ZO6,getRegisteredHooks:()=>Fp,getQuestionPreviewFormat:()=>et6,getPromptId:()=>ZE6,getPromptCache1hAllowlist:()=>vm1,getProjectRoot:()=>J9,getPrCounter:()=>KE6,getPlanSlugCache:()=>GA6,getParentSessionId:()=>Xu1,getOriginalCwd:()=>i8,getOauthTokenFromFd:()=>ou1,getModelUsage:()=>ES,getModelStrings:()=>MO6,getMeterProvider:()=>Uu1,getMeter:()=>Tlq,getMainThreadAgentType:()=>pp,getMainLoopModelOverride:()=>yS,getLoggerProvider:()=>zE6,getLocCounter:()=>rt6,getLastMainRequestId:()=>ek6,getLastInteractionTime:()=>cx,getLastEmittedDate:()=>Tm1,getLastClassifierRequests:()=>KAA,getLastAPIRequest:()=>eu1,getKairosActive:()=>fy,getIsRemoteMode:()=>E4,getIsNonInteractiveSession:()=>Y7,getIsInteractive:()=>vW,getIsInWorktree:()=>Wm1,getInvokedSkillsForAgent:()=>_e6,getInvokedSkills:()=>Elq,getInlinePlugins:()=>PA6,getInitialMainLoopModel:()=>JO6,getInitJsonSchema:()=>Ke6,getHasDevChannels:()=>Rlq,getFlagSettingsPath:()=>rn,getFlagSettingsInline:()=>WO6,getEventLogger:()=>Qu1,getDirectConnectServerUrl:()=>Pu1,getCwdState:()=>kS,getCurrentTurnTokenBudget:()=>Plq,getCostCounter:()=>Fu1,getCommitCounter:()=>gu1,getCodeEditToolDecisionCounter:()=>YE6,getClientType:()=>PO6,getChromeFlagOverride:()=>OE6,getBudgetContinuationCount:()=>Zlq,getApiKeyFromFd:()=>su1,getAllowedSettingSources:()=>Am1,getAllowedChannels:()=>ylq,getAgentColorMap:()=>qe6,getAdditionalDirectoriesForClaudeMd:()=>RT,getActiveTimeCounter:()=>pu1,flushInteractionTime:()=>Lu1,clearSystemPromptSectionState:()=>fm1,clearRegisteredPluginHooks:()=>Mm1,clearRegisteredHooks:()=>klq,clearInvokedSkillsForAgent:()=>an,clearInvokedSkills:()=>Xm1,addToTurnHookDuration:()=>Tu1,addToTurnClassifierDuration:()=>Vu1,addToTotalLinesChanged:()=>lt6,addToTotalDurationState:()=>Wu1,addToTotalCostState:()=>Zu1,addToToolDuration:()=>ct6,addToTokenSaverBytes:()=>_lq,addToInMemoryErrorLog:()=>Vlq,addSlowOperation:()=>zAA,addSessionCronTask:()=>_m1,addInvokedSkill:()=>fO6});import{cwd as Klq}from"process";import{realpathSync as o8A}from"fs";function e8A(){let A="";if(typeof process<"u"&&typeof process.cwd==="function"&&typeof o8A==="function")A=o8A(Klq()).normalize("NFC");return{originalCwd:A,projectRoot:A,totalCostUSD:0,totalAPIDuration:0,totalAPIDurationWithoutRetries:0,totalToolDuration:0,tokenSaverBytesSaved:0,tokenSaverHits:0,turnHookDurationMs:0,turnToolDurationMs:0,turnClassifierDurationMs:0,turnToolCount:0,turnHookCount:0,turnClassifierCount:0,startTime:Date.now(),lastInteractionTime:Date.now(),totalLinesAdded:0,totalLinesRemoved:0,hasUnknownModelCost:!1,cwd:A,modelUsage:{},mainLoopModelOverride:void 0,initialMainLoopModel:null,modelStrings:null,isInteractive:!1,kairosActive:!1,sdkAgentProgressSummariesEnabled:!1,userMsgOptIn:!1,clientType:"cli",sessionSource:void 0,questionPreviewFormat:void 0,sessionIngressToken:void 0,oauthTokenFromFd:void 0,apiKeyFromFd:void 0,flagSettingsPath:void 0,flagSettingsInline:null,allowedSettingSources:["userSettings","projectSettings","localSettings","flagSettings","policySettings"],meter:null,sessionCounter:null,locCounter:null,prCounter:null,commitCounter:null,costCounter:null,tokenCounter:null,codeEditToolDecisionCounter:null,activeTimeCounter:null,statsStore:null,sessionId:nx1(),parentSessionId:void 0,loggerProvider:null,eventLogger:null,meterProvider:null,tracerProvider:null,agentColorMap:new Map,agentColorIndex:0,lastAPIRequest:null,lastClassifierRequests:null,inMemoryErrorLog:[],inlinePlugins:[],chromeFlagOverride:void 0,useCoworkPlugins:!1,sessionBypassPermissionsMode:!1,scheduledTasksEnabled:!1,sessionCronTasks:[],sessionCreatedTeams:new Set,sessionTrustAccepted:!1,sessionPersistenceDisabled:!1,hasExitedPlanMode:!1,needsPlanModeExitAttachment:!1,needsAutoModeExitAttachment:!1,lspRecommendationShownThisSession:!1,initJsonSchema:null,registeredHooks:null,planSlugCache:new Map,teleportedSessionInfo:null,invokedSkills:new Map,slowOperations:[],sdkBetas:void 0,mainThreadAgentType:void 0,isRemoteMode:!1,isInWorktree:!1,...{},directConnectServerUrl:void 0,systemPromptSectionCache:new Map,lastEmittedDate:null,additionalDirectoriesForClaudeMd:[],allowedChannels:[],hasDevChannels:!1,sessionProjectDir:null,promptCache1hAllowlist:null,promptId:null,lastMainRequestId:void 0}}function y1(){return N1.sessionId}function Mu1(A={}){if(A.setCurrentAsParent)N1.parentSessionId=N1.sessionId;return N1.sessionId=nx1(),N1.sessionProjectDir=null,N1.sessionId}function Xu1(){return N1.parentSessionId}function MP(A,q=null){N1.sessionId=A,N1.sessionProjectDir=q}function ak6(){return N1.sessionProjectDir}function i8(){return N1.originalCwd}function J9(){return N1.projectRoot}function mp(A){N1.originalCwd=A.normalize("NFC")}function ok6(A){N1.projectRoot=A.normalize("NFC")}function kS(){return N1.cwd}function dt6(A){N1.cwd=A.normalize("NFC")}function Pu1(){return N1.directConnectServerUrl}function Ylq(A){N1.directConnectServerUrl=A}function Wu1(A,q){N1.totalAPIDuration+=A,N1.totalAPIDurationWithoutRetries+=q}function zlq(){N1.totalAPIDuration=0,N1.totalAPIDurationWithoutRetries=0,N1.totalCostUSD=0}function Zu1(A,q,K){N1.modelUsage[K]=q,N1.totalCostUSD+=A}function RM(){return N1.totalCostUSD}function XV(){return N1.totalAPIDuration}function HO6(){return Date.now()-N1.startTime}function Gu1(){return N1.totalAPIDurationWithoutRetries}function fu1(){return N1.totalToolDuration}function ct6(A){N1.totalToolDuration+=A,N1.turnToolDurationMs+=A,N1.turnToolCount++}function _lq(A){N1.tokenSaverBytesSaved+=A,N1.tokenSaverHits++}function wlq(){return N1.tokenSaverBytesSaved}function Olq(){return N1.tokenSaverHits}function $lq(){return N1.turnHookDurationMs}function Tu1(A){N1.turnHookDurationMs+=A,N1.turnHookCount++}function vu1(){N1.turnHookDurationMs=0,N1.turnHookCount=0}function Hlq(){return N1.turnHookCount}function jlq(){return N1.turnToolDurationMs}function Nu1(){N1.turnToolDurationMs=0,N1.turnToolCount=0}function Jlq(){return N1.turnToolCount}function Dlq(){return N1.turnClassifierDurationMs}function Vu1(A){N1.turnClassifierDurationMs+=A,N1.turnClassifierCount++}function ku1(){N1.turnClassifierDurationMs=0,N1.turnClassifierCount=0}function Mlq(){return N1.turnClassifierCount}function jO6(){return N1.statsStore}function Eu1(A){N1.statsStore=A}function OA6(A){if(A)AAA();else yu1=!0}function Lu1(){if(yu1)AAA()}function AAA(){N1.lastInteractionTime=Date.now(),yu1=!1}function lt6(A,q){N1.totalLinesAdded+=A,N1.totalLinesRemoved+=q}function $A6(){return N1.totalLinesAdded}function HA6(){return N1.totalLinesRemoved}function jA6(){return $O6(Object.values(N1.modelUsage),"inputTokens")}function Bp(){return $O6(Object.values(N1.modelUsage),"outputTokens")}function sk6(){return $O6(Object.values(N1.modelUsage),"cacheReadInputTokens")}function tk6(){return $O6(Object.values(N1.modelUsage),"cacheCreationInputTokens")}function Ru1(){return $O6(Object.values(N1.modelUsage),"webSearchRequests")}function Xlq(){return Bp()-hu1}function Plq(){return Su1}function Wlq(A){hu1=Bp(),Su1=A,it6=0}function Zlq(){return it6}function Glq(){it6++}function nt6(){N1.hasUnknownModelCost=!0}function Cu1(){return N1.hasUnknownModelCost}function ek6(){return N1.lastMainRequestId}function Iu1(A){N1.lastMainRequestId=A}function cx(){return N1.lastInteractionTime}function ES(){return N1.modelUsage}function bu1(A){return N1.modelUsage[A]}function yS(){return N1.mainLoopModelOverride}function JO6(){return N1.initialMainLoopModel}function TW(A){N1.mainLoopModelOverride=A}function xu1(A){N1.initialMainLoopModel=A}function fj(){return N1.sdkBetas}function uu1(A){N1.sdkBetas=A}function DO6(){N1.totalCostUSD=0,N1.totalAPIDuration=0,N1.totalAPIDurationWithoutRetries=0,N1.totalToolDuration=0,N1.startTime=Date.now(),N1.totalLinesAdded=0,N1.totalLinesRemoved=0,N1.hasUnknownModelCost=!1,N1.modelUsage={},N1.promptId=null}function AE6({totalCostUSD:A,totalAPIDuration:q,totalAPIDurationWithoutRetries:K,totalToolDuration:Y,totalLinesAdded:z,totalLinesRemoved:_,lastDuration:w,modelUsage:O}){if(N1.totalCostUSD=A,N1.totalAPIDuration=q,N1.totalAPIDurationWithoutRetries=K,N1.totalToolDuration=Y,N1.totalLinesAdded=z,N1.totalLinesRemoved=_,O)N1.modelUsage=O;if(w)N1.startTime=Date.now()-w}function qAA(){throw Error("resetStateForTests can only be called in tests")}function MO6(){return N1.modelStrings}function qE6(A){N1.modelStrings=A}function flq(){N1.modelStrings=null}function mu1(A,q){N1.meter=A,N1.sessionCounter=q("claude_code.session.count",{description:"Count of CLI sessions started"}),N1.locCounter=q("claude_code.lines_of_code.count",{description:"Count of lines of code modified, with the 'type' attribute indicating whether lines were added or removed"}),N1.prCounter=q("claude_code.pull_request.count",{description:"Number of pull requests created"}),N1.commitCounter=q("claude_code.commit.count",{description:"Number of git commits created"}),N1.costCounter=q("claude_code.cost.usage",{description:"Cost of the Claude Code session",unit:"USD"}),N1.tokenCounter=q("claude_code.token.usage",{description:"Number of tokens used",unit:"tokens"}),N1.codeEditToolDecisionCounter=q("claude_code.code_edit_tool.decision",{description:"Count of code editing tool permission decisions (accept/reject) for Edit, Write, and NotebookEdit tools"}),N1.activeTimeCounter=q("claude_code.active_time.total",{description:"Total active time in seconds",unit:"s"})}function Tlq(){return N1.meter}function Bu1(){return N1.sessionCounter}function rt6(){return N1.locCounter}function KE6(){return N1.prCounter}function gu1(){return N1.commitCounter}function Fu1(){return N1.costCounter}function XO6(){return N1.tokenCounter}function YE6(){return N1.codeEditToolDecisionCounter}function pu1(){return N1.activeTimeCounter}function zE6(){return N1.loggerProvider}function at6(A){N1.loggerProvider=A}function Qu1(){return N1.eventLogger}function ot6(A){N1.eventLogger=A}function Uu1(){return N1.meterProvider}function st6(A){N1.meterProvider=A}function JA6(){return N1.tracerProvider}function tt6(A){N1.tracerProvider=A}function Y7(){return!N1.isInteractive}function vW(){return N1.isInteractive}function du1(A){N1.isInteractive=A}function PO6(){return N1.clientType}function cu1(A){N1.clientType=A}function lx(){return N1.sdkAgentProgressSummariesEnabled}function lu1(A){N1.sdkAgentProgressSummariesEnabled=A}function fy(){return N1.kairosActive}function vlq(A){N1.kairosActive=A}function JG(){return N1.userMsgOptIn}function ix(A){N1.userMsgOptIn=A}function Nlq(){return N1.sessionSource}function iu1(A){N1.sessionSource=A}function et6(){return N1.questionPreviewFormat}function Ae6(A){N1.questionPreviewFormat=A}function qe6(){return N1.agentColorMap}function rn(){return N1.flagSettingsPath}function nu1(A){N1.flagSettingsPath=A}function WO6(){return N1.flagSettingsInline}function ru1(A){N1.flagSettingsInline=A}function au1(){return N1.sessionIngressToken}function DA6(A){N1.sessionIngressToken=A}function ou1(){return N1.oauthTokenFromFd}function MA6(A){N1.oauthTokenFromFd=A}function su1(){return N1.apiKeyFromFd}function XA6(A){N1.apiKeyFromFd=A}function tu1(A){N1.lastAPIRequest=A}function eu1(){return N1.lastAPIRequest}function _E6(A){N1.lastClassifierRequests=A}function KAA(){return N1.lastClassifierRequests}function Vlq(A){if(N1.inMemoryErrorLog.length>=100)N1.inMemoryErrorLog.shift();N1.inMemoryErrorLog.push(A)}function Am1(){return N1.allowedSettingSources}function qm1(A){N1.allowedSettingSources=A}function wE6(){return Y7()&&N1.clientType!=="claude-vscode"}function Km1(A){N1.inlinePlugins=A}function PA6(){return N1.inlinePlugins}function Ym1(A){N1.chromeFlagOverride=A}function OE6(){return N1.chromeFlagOverride}function PV(A){N1.useCoworkPlugins=A,DP()}function $E6(){return N1.useCoworkPlugins}function zm1(A){N1.sessionBypassPermissionsMode=A}function WA6(){return N1.sessionBypassPermissionsMode}function HE6(A){N1.scheduledTasksEnabled=A}function ZO6(){return N1.scheduledTasksEnabled}function jE6(){return N1.sessionCronTasks}function _m1(A){N1.sessionCronTasks.push(A)}function JE6(A){if(A.length===0)return 0;let q=new Set(A),K=N1.sessionCronTasks.filter((z)=>!q.has(z.id)),Y=N1.sessionCronTasks.length-K.length;if(Y===0)return 0;return N1.sessionCronTasks=K,Y}function DE6(A){N1.sessionTrustAccepted=A}function GO6(){return N1.sessionTrustAccepted}function wm1(A){N1.sessionPersistenceDisabled=A}function WV(){return N1.sessionPersistenceDisabled}function ME6(){return N1.hasExitedPlanMode}function ZV(A){N1.hasExitedPlanMode=A}function Om1(){return N1.needsPlanModeExitAttachment}function LS(A){N1.needsPlanModeExitAttachment=A}function gp(A,q){if(q==="plan"&&A!=="plan")N1.needsPlanModeExitAttachment=!1;if(A==="plan"&&q!=="plan")N1.needsPlanModeExitAttachment=!0}function $m1(){return N1.needsAutoModeExitAttachment}function RS(A){N1.needsAutoModeExitAttachment=A}function Hm1(A,q,K){let Y=A==="auto"||A==="plan"&&K==="auto",z=q==="auto"||q==="plan"&&A==="auto";if(z&&!Y)N1.needsAutoModeExitAttachment=!1;if(Y&&!z)N1.needsAutoModeExitAttachment=!0}function jm1(){return N1.lspRecommendationShownThisSession}function Jm1(A){N1.lspRecommendationShownThisSession=A}function Dm1(A){N1.initJsonSchema=A}function Ke6(){return N1.initJsonSchema}function ZA6(A){if(!N1.registeredHooks)N1.registeredHooks={};for(let[q,K]of Object.entries(A)){let Y=q;if(!N1.registeredHooks[Y])N1.registeredHooks[Y]=[];N1.registeredHooks[Y].push(...K)}}function Fp(){return N1.registeredHooks}function klq(){N1.registeredHooks=null}function Mm1(){if(!N1.registeredHooks)return;let A={};for(let[q,K]of Object.entries(N1.registeredHooks)){let Y=K.filter((z)=>!("pluginRoot"in z));if(Y.length>0)A[q]=Y}N1.registeredHooks=Object.keys(A).length>0?A:null}function YAA(){N1.initJsonSchema=null,N1.registeredHooks=null}function GA6(){return N1.planSlugCache}function XE6(){return N1.sessionCreatedTeams}function PE6(A){N1.teleportedSessionInfo={isTeleported:!0,hasLoggedFirstMessage:!1,sessionId:A.sessionId}}function Ye6(){return N1.teleportedSessionInfo}function ze6(){if(N1.teleportedSessionInfo)N1.teleportedSessionInfo.hasLoggedFirstMessage=!0}function fO6(A,q,K,Y=null){let z=`${Y??""}:${A}`;N1.invokedSkills.set(z,{skillName:A,skillPath:q,content:K,invokedAt:Date.now(),agentId:Y})}function Elq(){return N1.invokedSkills}function _e6(A){let q=A??null,K=new Map;for(let[Y,z]of N1.invokedSkills)if(z.agentId===q)K.set(Y,z);return K}function Xm1(A){if(!A||A.size===0){N1.invokedSkills.clear();return}for(let[q,K]of N1.invokedSkills)if(K.agentId===null||!A.has(K.agentId))N1.invokedSkills.delete(q)}function an(A){for(let[q,K]of N1.invokedSkills)if(K.agentId===A)N1.invokedSkills.delete(q)}function zAA(A,q){return}function _AA(){if(N1.slowOperations.length===0)return t8A;let A=Date.now();if(N1.slowOperations.some((q)=>A-q.timestamp>=Du1)){if(N1.slowOperations=N1.slowOperations.filter((q)=>A-q.timestamp{j1A();l8A();N1=e8A();t8A=[]});function vO6({writeFn:A,flushIntervalMs:q=1000,maxBufferSize:K=100,maxBufferBytes:Y=1/0,immediateMode:z=!1}){let _=[],w=0,O=null,$=null;function H(){if(O)clearTimeout(O),O=null}function j(){if($)A($.join("")),$=null;if(_.length===0)return;A(_.join("")),_=[],w=0,H()}function J(){if(!O)O=setTimeout(j,q)}function D(){if($){$.push(..._),_=[],w=0,H();return}let M=_;_=[],w=0,H(),$=M,setImmediate(()=>{let X=$;if($=null,X)A(X.join(""))})}return{write(M){if(z){A(M);return}if(_.push(M),w+=M.length,J(),_.length>=K||w>=Y)D()},flush:j,dispose(){j()}}}function y4(A){return km1.add(A),()=>km1.delete(A)}async function wAA(){await Promise.all(Array.from(km1).map((A)=>A()))}var km1;var m9=y(()=>{km1=new Set});function Slq(A){let q=[],K=A.match(/^MCP server ["']([^"']+)["']/);if(K&&K[1])q.push("mcp"),q.push(K[1].toLowerCase());else{let _=A.match(/^([^:[]+):/);if(_&&_[1])q.push(_[1].trim().toLowerCase())}let Y=A.match(/^\[([^\]]+)]/);if(Y&&Y[1])q.push(Y[1].trim().toLowerCase());if(A.toLowerCase().includes("1p event:"))q.push("1p");let z=A.match(/:\s*([^:]+?)(?:\s+(?:type|mode|status|event))?:/);if(z&&z[1]){let _=z[1].trim().toLowerCase();if(_.length<30&&!_.includes(" "))q.push(_)}return Array.from(new Set(q))}function Clq(A,q){if(!q)return!0;if(A.length===0)return!1;if(q.isExclusive)return!A.some((K)=>q.exclude.includes(K));else return A.some((K)=>q.include.includes(K))}function $AA(A,q){if(!q)return!0;let K=Slq(A);return Clq(K,q)}var OAA;var HAA=y(()=>{n4();OAA=A8((A)=>{if(!A||A.trim()==="")return null;let q=A.split(",").map((_)=>_.trim()).filter(Boolean);if(q.length===0)return null;let K=q.some((_)=>_.startsWith("!")),Y=q.some((_)=>!_.startsWith("!"));if(K&&Y)return null;let z=q.map((_)=>_.replace(/^!/,"").toLowerCase());return{include:K?[]:z,exclude:K?z:[],isExclusive:K}})});import{join as jAA}from"path";import{homedir as Ilq}from"os";function DG(){return jAA(d8(),"teams")}function NO6(A){let q=process.env.NODE_OPTIONS;if(!q)return!1;return q.split(/\s+/).includes(A)}function o6(A){if(!A)return!1;if(typeof A==="boolean")return A;let q=A.toLowerCase().trim();return["1","true","yes","on"].includes(q)}function Sz(A){if(A===void 0)return!1;if(typeof A==="boolean")return!A;if(!A)return!1;let q=A.toLowerCase().trim();return["0","false","no","off"].includes(q)}function JAA(A){let q={};if(A)for(let K of A){let[Y,...z]=K.split("=");if(!Y||z.length===0)throw Error(`Invalid environment variable format: ${K}, environment variables should be added as: -e KEY1=value1 -e KEY2=value2`);q[Y]=z.join("=")}return q}function TA6(){return process.env.AWS_REGION||process.env.AWS_DEFAULT_REGION||"us-east-1"}function we6(){return process.env.CLOUD_ML_REGION||"us-east5"}function DAA(){return o6(process.env.CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR)}function MG(){return!1}function Oe6(A){if(A){let q=blq.find(([K])=>A.startsWith(K));if(q)return process.env[q[1]]||we6()}return we6()}var d8,blq;var s1=y(()=>{n4();d8=A8(()=>{return(process.env.CLAUDE_CONFIG_DIR??jAA(Ilq(),".claude")).normalize("NFC")},()=>process.env.CLAUDE_CONFIG_DIR);blq=[["claude-haiku-4-5","VERTEX_REGION_CLAUDE_HAIKU_4_5"],["claude-3-5-haiku","VERTEX_REGION_CLAUDE_3_5_HAIKU"],["claude-3-5-sonnet","VERTEX_REGION_CLAUDE_3_5_SONNET"],["claude-3-7-sonnet","VERTEX_REGION_CLAUDE_3_7_SONNET"],["claude-opus-4-1","VERTEX_REGION_CLAUDE_4_1_OPUS"],["claude-opus-4","VERTEX_REGION_CLAUDE_4_0_OPUS"],["claude-sonnet-4-6","VERTEX_REGION_CLAUDE_4_6_SONNET"],["claude-sonnet-4-5","VERTEX_REGION_CLAUDE_4_5_SONNET"],["claude-sonnet-4","VERTEX_REGION_CLAUDE_4_0_SONNET"]]});function xlq(A,q){var K=-1,Y=A==null?0:A.length;while(++K{MAA=xlq});var ulq,VO6;var Em1=y(()=>{Fn();ulq=function(){try{var A=LT(Object,"defineProperty");return A({},"",{}),A}catch(q){}}(),VO6=ulq});function mlq(A,q,K){if(q=="__proto__"&&VO6)VO6(A,q,{configurable:!0,enumerable:!0,value:K,writable:!0});else A[q]=K}var on;var fE6=y(()=>{Em1();on=mlq});function Flq(A,q,K){var Y=A[q];if(!(glq.call(A,q)&&mx(Y,K))||K===void 0&&!(q in A))on(A,q,K)}var Blq,glq,sn;var TE6=y(()=>{fE6();Qw6();Blq=Object.prototype,glq=Blq.hasOwnProperty;sn=Flq});function plq(A,q,K,Y){var z=!K;K||(K={});var _=-1,w=q.length;while(++_{TE6();fE6();Ty=plq});function Qlq(A,q){return A&&Ty(q,Zy(q),A)}var PAA;var WAA=y(()=>{vA6();zA6();PAA=Qlq});function Ulq(A){var q=[];if(A!=null)for(var K in Object(A))q.push(K);return q}var ZAA;var GAA=y(()=>{ZAA=Ulq});function llq(A){if(!tz(A))return ZAA(A);var q=tw6(A),K=[];for(var Y in A)if(!(Y=="constructor"&&(q||!clq.call(A,Y))))K.push(Y);return K}var dlq,clq,fAA;var TAA=y(()=>{HG();Rt6();GAA();dlq=Object.prototype,clq=dlq.hasOwnProperty;fAA=llq});function ilq(A){return Qx(A)?Lt6(A,!0):fAA(A)}var nx;var kO6=y(()=>{zu1();TAA();ew6();nx=ilq});function nlq(A,q){return A&&Ty(q,nx(q),A)}var vAA;var NAA=y(()=>{vA6();kO6();vAA=nlq});var He6={};k1(He6,{default:()=>vE6});function alq(A,q){if(q)return A.slice();var K=A.length,Y=EAA?EAA(K):new A.constructor(K);return A.copy(Y),Y}var yAA,VAA,rlq,kAA,EAA,vE6;var ym1=y(()=>{Wy();yAA=typeof He6=="object"&&He6&&!He6.nodeType&&He6,VAA=yAA&&typeof $e6=="object"&&$e6&&!$e6.nodeType&&$e6,rlq=VAA&&VAA.exports===yAA,kAA=rlq?SH.Buffer:void 0,EAA=kAA?kAA.allocUnsafe:void 0;vE6=alq});function olq(A,q){var K=-1,Y=A.length;q||(q=Array(Y));while(++K{je6=olq});function slq(A,q){return Ty(A,rw6(A),q)}var LAA;var RAA=y(()=>{vA6();Gt6();LAA=slq});var tlq,EO6;var Je6=y(()=>{_u1();tlq=ht6(Object.getPrototypeOf,Object),EO6=tlq});var elq,Aiq,De6;var Rm1=y(()=>{Xt6();Je6();Gt6();qu1();elq=Object.getOwnPropertySymbols,Aiq=!elq?Zt6:function(A){var q=[];while(A)nw6(q,rw6(A)),A=EO6(A);return q},De6=Aiq});function qiq(A,q){return Ty(A,De6(A),q)}var hAA;var SAA=y(()=>{vA6();Rm1();hAA=qiq});function Kiq(A){return Pt6(A,nx,De6)}var Me6;var hm1=y(()=>{ex1();Rm1();kO6();Me6=Kiq});function _iq(A){var q=A.length,K=new A.constructor(q);if(q&&typeof A[0]=="string"&&ziq.call(A,"index"))K.index=A.index,K.input=A.input;return K}var Yiq,ziq,CAA;var IAA=y(()=>{Yiq=Object.prototype,ziq=Yiq.hasOwnProperty;CAA=_iq});function wiq(A){var q=new A.constructor(A.byteLength);return new lw6(q).set(new lw6(A)),q}var yO6;var Xe6=y(()=>{sx1();yO6=wiq});function Oiq(A,q){var K=q?yO6(A.buffer):A.buffer;return new A.constructor(K,A.byteOffset,A.byteLength)}var bAA;var xAA=y(()=>{Xe6();bAA=Oiq});function Hiq(A){var q=new A.constructor(A.source,$iq.exec(A));return q.lastIndex=A.lastIndex,q}var $iq,uAA;var mAA=y(()=>{$iq=/\w*$/;uAA=Hiq});function jiq(A){return gAA?Object(gAA.call(A)):{}}var BAA,gAA,FAA;var pAA=y(()=>{qA6();BAA=LM?LM.prototype:void 0,gAA=BAA?BAA.valueOf:void 0;FAA=jiq});function Jiq(A,q){var K=q?yO6(A.buffer):A.buffer;return new A.constructor(K,A.byteOffset,A.length)}var Pe6;var Sm1=y(()=>{Xe6();Pe6=Jiq});function Ciq(A,q,K){var Y=A.constructor;switch(q){case Tiq:return yO6(A);case Diq:case Miq:return new Y(+A);case viq:return bAA(A,K);case Niq:case Viq:case kiq:case Eiq:case yiq:case Liq:case Riq:case hiq:case Siq:return Pe6(A,K);case Xiq:return new Y;case Piq:case Giq:return new Y(A);case Wiq:return uAA(A);case Ziq:return new Y;case fiq:return FAA(A)}}var Diq="[object Boolean]",Miq="[object Date]",Xiq="[object Map]",Piq="[object Number]",Wiq="[object RegExp]",Ziq="[object Set]",Giq="[object String]",fiq="[object Symbol]",Tiq="[object ArrayBuffer]",viq="[object DataView]",Niq="[object Float32Array]",Viq="[object Float64Array]",kiq="[object Int8Array]",Eiq="[object Int16Array]",yiq="[object Int32Array]",Liq="[object Uint8Array]",Riq="[object Uint8ClampedArray]",hiq="[object Uint16Array]",Siq="[object Uint32Array]",QAA;var UAA=y(()=>{Xe6();xAA();mAA();pAA();Sm1();QAA=Ciq});var dAA,Iiq,cAA;var lAA=y(()=>{HG();dAA=Object.create,Iiq=function(){function A(){}return function(q){if(!tz(q))return{};if(dAA)return dAA(q);A.prototype=q;var K=new A;return A.prototype=void 0,K}}(),cAA=Iiq});function biq(A){return typeof A.constructor=="function"&&!tw6(A)?cAA(EO6(A)):{}}var We6;var Cm1=y(()=>{lAA();Je6();Rt6();We6=biq});function uiq(A){return TD(A)&&up(A)==xiq}var xiq="[object Map]",iAA;var nAA=y(()=>{nk6();gx();iAA=uiq});var rAA,miq,aAA;var oAA=y(()=>{nAA();Nt6();Et6();rAA=px&&px.isMap,miq=rAA?ow6(rAA):iAA,aAA=miq});function giq(A){return TD(A)&&up(A)==Biq}var Biq="[object Set]",sAA;var tAA=y(()=>{nk6();gx();sAA=giq});var eAA,Fiq,A7A;var q7A=y(()=>{tAA();Nt6();Et6();eAA=px&&px.isSet,Fiq=eAA?ow6(eAA):sAA,A7A=Fiq});function Ze6(A,q,K,Y,z,_){var w,O=q&piq,$=q&Qiq,H=q&Uiq;if(K)w=z?K(A,Y,z,_):K(A);if(w!==void 0)return w;if(!tz(A))return A;var j=ez(A);if(j){if(w=CAA(A),!O)return je6(A,w)}else{var J=up(A),D=J==Y7A||J==niq;if(Fx(A))return vE6(A,O);if(J==z7A||J==K7A||D&&!z){if(w=$||D?{}:We6(A),!O)return $?hAA(A,vAA(w,A)):LAA(A,PAA(w,A))}else{if(!fw[J])return z?A:{};w=QAA(A,J,O)}}_||(_=new Bx);var M=_.get(A);if(M)return M;if(_.set(A,w),A7A(A))A.forEach(function(W){w.add(Ze6(W,q,K,W,A,_))});else if(aAA(A))A.forEach(function(W,Z){w.set(Z,Ze6(W,q,K,Z,A,_))});var X=H?$?Me6:ik6:$?nx:Zy,P=j?void 0:X(A);return MAA(P||A,function(W,Z){if(P)Z=W,W=A[Z];sn(w,Z,Ze6(W,q,K,Z,A,_))}),w}var piq=1,Qiq=2,Uiq=4,K7A="[object Arguments]",diq="[object Array]",ciq="[object Boolean]",liq="[object Date]",iiq="[object Error]",Y7A="[object Function]",niq="[object GeneratorFunction]",riq="[object Map]",aiq="[object Number]",z7A="[object Object]",oiq="[object RegExp]",siq="[object Set]",tiq="[object String]",eiq="[object Symbol]",Anq="[object WeakMap]",qnq="[object ArrayBuffer]",Knq="[object DataView]",Ynq="[object Float32Array]",znq="[object Float64Array]",_nq="[object Int8Array]",wnq="[object Int16Array]",Onq="[object Int32Array]",$nq="[object Uint8Array]",Hnq="[object Uint8ClampedArray]",jnq="[object Uint16Array]",Jnq="[object Uint32Array]",fw,Ge6;var Im1=y(()=>{Qk6();XAA();TE6();WAA();NAA();ym1();Lm1();RAA();SAA();wu1();hm1();nk6();IAA();UAA();Cm1();jG();dk6();oAA();HG();q7A();zA6();kO6();fw={};fw[K7A]=fw[diq]=fw[qnq]=fw[Knq]=fw[ciq]=fw[liq]=fw[Ynq]=fw[znq]=fw[_nq]=fw[wnq]=fw[Onq]=fw[riq]=fw[aiq]=fw[z7A]=fw[oiq]=fw[siq]=fw[tiq]=fw[eiq]=fw[$nq]=fw[Hnq]=fw[jnq]=fw[Jnq]=!0;fw[iiq]=fw[Y7A]=fw[Anq]=!1;Ge6=Ze6});function Xnq(A){return Ge6(A,Dnq|Mnq)}var Dnq=1,Mnq=4,NE6;var bm1=y(()=>{Im1();NE6=Xnq});import{writeFileSync as _7A,openSync as Pnq,fsyncSync as Wnq,closeSync as Znq}from"fs";function fnq(){return Gnq}function p6(A,q,K){let z=[];try{const Y=DY(z,y_`JSON.stringify(${A})`,0);return JSON.stringify(A,q,K)}catch(_){var w=_,O=1}finally{MY(z,w,O)}}function LO6(A){let K=[];try{const q=DY(K,y_`cloneDeep(${A})`,0);return NE6(A)}catch(Y){var z=Y,_=1}finally{MY(K,z,_)}}function Mz(A,q,K){let _=[];try{const Y=DY(_,y_`fs.writeFileSync(${A}, ${q})`,0);let z=K!==null&&typeof K==="object"&&"flush"in K&&K.flush===!0;if(z){let H=typeof K==="object"&&"encoding"in K?K.encoding:void 0,j=typeof K==="object"&&"mode"in K?K.mode:void 0,J;try{J=Pnq(A,"w",j),_7A(J,q,{encoding:H??void 0}),Wnq(J)}finally{if(J!==void 0)Znq(J)}}else _7A(A,q,K)}catch(w){var O=w,$=1}finally{MY(_,O,$)}}var MRz,Gnq,y_,c1=(A,q)=>{let Y=[];try{const K=DY(Y,y_`JSON.parse(${A})`,0);return typeof q>"u"?JSON.parse(A):JSON.parse(A,q)}catch(z){var _=z,w=1}finally{MY(Y,_,w)}};var g1=y(()=>{$1();T1();bm1();MRz=(()=>{let A=process.env.CLAUDE_CODE_SLOW_OPERATION_THRESHOLD_MS;if(A!==void 0){let q=Number(A);if(!Number.isNaN(q)&&q>=0)return q}return 1/0})(),Gnq={[Symbol.dispose](){}};y_=fnq});import*as X5 from"fs";import{homedir as w7A}from"os";import*as hM from"path";import{stat as Tnq,readdir as vnq,readFile as O7A,unlink as Nnq,rmdir as Vnq,rm as knq,mkdir as Enq,rename as ynq,open as fe6}from"fs/promises";function qO(A,q){if(q.startsWith("//")||q.startsWith("\\\\"))return{resolvedPath:q,isSymlink:!1,isCanonical:!1};if(!A.existsSync(q))return{resolvedPath:q,isSymlink:!1,isCanonical:!1};try{let K=A.lstatSync(q);if(K.isFIFO()||K.isSocket()||K.isCharacterDevice()||K.isBlockDevice())return{resolvedPath:q,isSymlink:!1,isCanonical:!1};let Y=A.realpathSync(q);return{resolvedPath:Y,isSymlink:Y!==q,isCanonical:!0}}catch(K){return{resolvedPath:q,isSymlink:!1,isCanonical:!1}}}function rx(A,q,K){let{resolvedPath:Y}=qO(A,q);if(K.has(Y))return!0;return K.add(Y),!1}function Lnq(A,q){let K=q,Y=[];while(K!==hM.dirname(K)){let z;try{z=A.lstatSync(K)}catch{Y.unshift(hM.basename(K)),K=hM.dirname(K);continue}if(z.isSymbolicLink())try{let _=A.realpathSync(K);return Y.length===0?_:hM.join(_,...Y)}catch{let _=A.readlinkSync(K),w=hM.isAbsolute(_)?_:hM.resolve(hM.dirname(K),_);return Y.length===0?w:hM.join(w,...Y)}try{let _=A.realpathSync(K);if(_!==K)return Y.length===0?_:hM.join(_,...Y)}catch{}return}return}function hS(A){let q=A;if(q==="~")q=w7A().normalize("NFC");else if(q.startsWith("~/"))q=hM.join(w7A().normalize("NFC"),q.slice(2));let K=new Set,Y=O1();if(K.add(q),q.startsWith("//")||q.startsWith("\\\\"))return Array.from(K);try{let w=q,O=new Set,$=40;for(let H=0;H<$;H++){if(O.has(w))break;if(O.add(w),!Y.existsSync(w)){if(w===q){let M=Lnq(Y,q);if(M!==void 0)K.add(M)}break}let j=Y.lstatSync(w);if(j.isFIFO()||j.isSocket()||j.isCharacterDevice()||j.isBlockDevice())break;if(!j.isSymbolicLink())break;let J=Y.readlinkSync(w),D=hM.isAbsolute(J)?J:hM.resolve(hM.dirname(w),J);K.add(D),w=D}}catch{}let{resolvedPath:z,isSymlink:_}=qO(Y,q);if(_&&z!==q)K.add(z);return Array.from(K)}function O1(){return hnq}async function Te6(A,q,K){let $=[];try{const Y=DY($,await fe6(A,"r"),1);let z=(await Y.stat()).size;if(z<=q)return null;let _=Math.min(z-q,K);let w=Buffer.allocUnsafe(_);let O=0;while(O<_){let{bytesRead:M}=await Y.read(w,O,_-O,q+O);if(M===0)break;O+=M}return{content:w.toString("utf8",0,O),bytesRead:O,bytesTotal:z}}catch(H){var j=H,J=1}finally{var D=MY($,j,J);D&&await D}}async function RO6(A,q){let $=[];try{const K=DY($,await fe6(A,"r"),1);let Y=(await K.stat()).size;if(Y===0)return{content:"",bytesRead:0,bytesTotal:0};let z=Math.max(0,Y-q);let _=Y-z;let w=Buffer.allocUnsafe(_);let O=0;while(O<_){let{bytesRead:M}=await K.read(w,O,_-O,z+O);if(M===0)break;O+=M}return{content:w.toString("utf8",0,O),bytesRead:O,bytesTotal:Y}}catch(H){var j=H,J=1}finally{var D=MY($,j,J);D&&await D}}async function*$7A(A){let K=await fe6(A,"r");try{let z=(await K.stat()).size,_="",w=Buffer.alloc(4096);while(z>0){let O=Math.min(4096,z);z-=O,await K.read(w,0,O,z);let H=(w.toString("utf8",0,O)+_).split(` + `);_=H[0]||"";for(let j=H.length-1;j>=1;j--){let J=H[j];if(J)yield J}}if(_)yield _}finally{await K.close()}}var Rnq,hnq;var xA=y(()=>{g1();Rnq={cwd(){return process.cwd()},existsSync(A){let K=[];try{const q=DY(K,y_`fs.existsSync(${A})`,0);return X5.existsSync(A)}catch(Y){var z=Y,_=1}finally{MY(K,z,_)}},async stat(A){return Tnq(A)},async readdir(A){return vnq(A,{withFileTypes:!0})},async unlink(A){return Nnq(A)},async rmdir(A){return Vnq(A)},async rm(A,q){return knq(A,q)},async mkdir(A,q){try{await Enq(A,{recursive:!0,...q})}catch(K){if(K.code!=="EEXIST")throw K}},async readFile(A,q){return O7A(A,{encoding:q.encoding})},async rename(A,q){return ynq(A,q)},statSync(A){let K=[];try{const q=DY(K,y_`fs.statSync(${A})`,0);return X5.statSync(A)}catch(Y){var z=Y,_=1}finally{MY(K,z,_)}},lstatSync(A){let K=[];try{const q=DY(K,y_`fs.lstatSync(${A})`,0);return X5.lstatSync(A)}catch(Y){var z=Y,_=1}finally{MY(K,z,_)}},readFileSync(A,q){let Y=[];try{const K=DY(Y,y_`fs.readFileSync(${A})`,0);return X5.readFileSync(A,{encoding:q.encoding})}catch(z){var _=z,w=1}finally{MY(Y,_,w)}},readFileBytesSync(A){let K=[];try{const q=DY(K,y_`fs.readFileBytesSync(${A})`,0);return X5.readFileSync(A)}catch(Y){var z=Y,_=1}finally{MY(K,z,_)}},readSync(A,q){let z=[];try{const K=DY(z,y_`fs.readSync(${A}, ${q.length} bytes)`,0);let Y=void 0;try{Y=X5.openSync(A,"r");let $=Buffer.alloc(q.length),H=X5.readSync(Y,$,0,q.length,0);return{buffer:$,bytesRead:H}}finally{if(Y)X5.closeSync(Y)}}catch(_){var w=_,O=1}finally{MY(z,w,O)}},appendFileSync(A,q,K){let z=[];try{const Y=DY(z,y_`fs.appendFileSync(${A}, ${q.length} chars)`,0);if(K?.mode!==void 0)try{let $=X5.openSync(A,"ax",K.mode);try{X5.appendFileSync($,q)}finally{X5.closeSync($)}return}catch($){if($.code!=="EEXIST")throw $}X5.appendFileSync(A,q)}catch(_){var w=_,O=1}finally{MY(z,w,O)}},copyFileSync(A,q){let Y=[];try{const K=DY(Y,y_`fs.copyFileSync(${A} ΓåÆ ${q})`,0);X5.copyFileSync(A,q)}catch(z){var _=z,w=1}finally{MY(Y,_,w)}},unlinkSync(A){let K=[];try{const q=DY(K,y_`fs.unlinkSync(${A})`,0);X5.unlinkSync(A)}catch(Y){var z=Y,_=1}finally{MY(K,z,_)}},renameSync(A,q){let Y=[];try{const K=DY(Y,y_`fs.renameSync(${A} ΓåÆ ${q})`,0);X5.renameSync(A,q)}catch(z){var _=z,w=1}finally{MY(Y,_,w)}},linkSync(A,q){let Y=[];try{const K=DY(Y,y_`fs.linkSync(${A} ΓåÆ ${q})`,0);X5.linkSync(A,q)}catch(z){var _=z,w=1}finally{MY(Y,_,w)}},symlinkSync(A,q,K){let z=[];try{const Y=DY(z,y_`fs.symlinkSync(${A} ΓåÆ ${q})`,0);X5.symlinkSync(A,q,K)}catch(_){var w=_,O=1}finally{MY(z,w,O)}},readlinkSync(A){let K=[];try{const q=DY(K,y_`fs.readlinkSync(${A})`,0);return X5.readlinkSync(A)}catch(Y){var z=Y,_=1}finally{MY(K,z,_)}},realpathSync(A){let K=[];try{const q=DY(K,y_`fs.realpathSync(${A})`,0);return X5.realpathSync(A).normalize("NFC")}catch(Y){var z=Y,_=1}finally{MY(K,z,_)}},mkdirSync(A,q){let z=[];try{const K=DY(z,y_`fs.mkdirSync(${A})`,0);let Y={recursive:!0};if(q?.mode!==void 0)Y.mode=q.mode;try{X5.mkdirSync(A,Y)}catch($){if($.code!=="EEXIST")throw $}}catch(_){var w=_,O=1}finally{MY(z,w,O)}},readdirSync(A){let K=[];try{const q=DY(K,y_`fs.readdirSync(${A})`,0);return X5.readdirSync(A,{withFileTypes:!0})}catch(Y){var z=Y,_=1}finally{MY(K,z,_)}},readdirStringSync(A){let K=[];try{const q=DY(K,y_`fs.readdirStringSync(${A})`,0);return X5.readdirSync(A)}catch(Y){var z=Y,_=1}finally{MY(K,z,_)}},isDirEmptySync(A){let Y=[];try{const q=DY(Y,y_`fs.isDirEmptySync(${A})`,0);let K=this.readdirSync(A);return K.length===0}catch(z){var _=z,w=1}finally{MY(Y,_,w)}},rmdirSync(A){let K=[];try{const q=DY(K,y_`fs.rmdirSync(${A})`,0);X5.rmdirSync(A)}catch(Y){var z=Y,_=1}finally{MY(K,z,_)}},rmSync(A,q){let Y=[];try{const K=DY(Y,y_`fs.rmSync(${A})`,0);X5.rmSync(A,q)}catch(z){var _=z,w=1}finally{MY(Y,_,w)}},createWriteStream(A){return X5.createWriteStream(A)},async readFileBytes(A,q){if(q===void 0)return O7A(A);let K=await fe6(A,"r");try{let{size:Y}=await K.stat(),z=Math.min(Y,q),_=Buffer.allocUnsafe(z),w=0;while(w{if(q.code==="EPIPE")A.destroy()}}function j7A(){process.stdout.on("error",H7A(process.stdout)),process.stderr.on("error",H7A(process.stderr))}function J7A(A,q){if(A.destroyed)return;A.write(q)}function T4(A){J7A(process.stdout,A)}function tn(A){J7A(process.stderr,A)}import{appendFile as Snq,mkdir as Cnq,unlink as Inq,symlink as bnq}from"fs/promises";import{dirname as D7A,join as M7A}from"path";function P7A(){let A=XG()||!1;return X7A=!0,XG.cache.clear?.(),A}function mnq(A){if(!XG())return!1;if(typeof process>"u"||typeof process.versions>"u"||typeof process.versions.node>"u")return!1;let q=unq();return $AA(A,q)}function Z7A(A){mm1=A}function G7A(){return mm1}async function Bnq(A,q,K,Y){if(A)await Cnq(q,{recursive:!0}).catch(()=>{});await Snq(K,Y),f7A()}function gnq(){}function Fnq(){if(!ve6){let A=null;ve6=vO6({writeFn:(q)=>{let K=NA6(),Y=D7A(K),z=A!==Y;if(A=Y,XG()){if(z)try{O1().mkdirSync(Y)}catch{}O1().appendFileSync(K,q),f7A();return}xm1=xm1.then(Bnq.bind(null,z,Y,K,q)).catch(gnq)},flushIntervalMs:1000,maxBufferSize:100,immediateMode:XG()}),y4(async()=>{ve6?.dispose(),await xm1})}return ve6}function k(A,{level:q}={level:"debug"}){if(um1[q]/scroll-fix.cjs\"\nor run: node /scripts/install.js" + } +}; + +process.stdout.write(JSON.stringify(output)); +process.exit(0); diff --git a/plugins/scroll-fix/scripts/install.js b/plugins/scroll-fix/scripts/install.js new file mode 100644 index 0000000000..da92b72bb4 --- /dev/null +++ b/plugins/scroll-fix/scripts/install.js @@ -0,0 +1,136 @@ +#!/usr/bin/env node +/** + * install.js — Applies the scroll-to-top fix to Claude Code's cli.js + * + * Uses git diff compatible patches when possible, falls back to string replacement. + * + * Usage: + * node install.js [path-to-cli.js] + * node install.js --uninstall [path-to-cli.js] + */ + +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const crypto = require("crypto"); +const { execFileSync } = require("child_process"); + +const PATCH_MARKER = "/* SCROLL_FIX */"; + +const PATCH_CODE = + ';(function(){var _ow=process.stdout.write.bind(process.stdout);var _frozen=false,_buf=[];' + + 'setTimeout(function(){try{process.stdin.on("data",function(d){if(d.toString().indexOf("\\x1e")!==-1){' + + '_frozen=!_frozen;if(_frozen){_ow("\\x1b]0;Claude Code [FROZEN - Ctrl+6 to resume]\\x07")}' + + 'else{if(_buf.length>0){var a="";for(var i=0;i<_buf.length;i++)a+=_buf[i];_buf=[];_ow(a)}' + + '_ow("\\x1b]0;Claude Code\\x07")}}})}catch(e){}},2000);' + + 'process.stdout.write=function(d,e,c){if(typeof e==="function"){c=e;e=void 0}' + + 'var s=typeof d==="string"?d:Buffer.isBuffer(d)?d.toString("utf-8"):String(d);' + + 'var maxUp=process.stdout.rows||24;var upBudget=maxUp;' + + 's=s.replace(/\\x1b\\[(\\d*)A/g,function(m,p){var n=parseInt(p)||1;' + + 'if(upBudget<=0)return"";var allowed=n>upBudget?upBudget:n;upBudget-=allowed;' + + 'return"\\x1b["+allowed+"A"});' + + 'if(_frozen){_buf.push(s);if(c)c();return true}' + + 'if(typeof d==="string")return _ow(s,e,c);return _ow(Buffer.from(s,"utf-8"),e,c)};})();'; + +function findCliJs(userPath) { + if (userPath && fs.existsSync(userPath)) return userPath; + const candidates = [ + "./cli.js", + path.join(process.env.APPDATA || "", "npm/node_modules/@anthropic-ai/claude-code/cli.js"), + path.join(process.env.HOME || "", ".local/lib/node_modules/@anthropic-ai/claude-code/cli.js"), + "/usr/local/lib/node_modules/@anthropic-ai/claude-code/cli.js", + "/usr/lib/node_modules/@anthropic-ai/claude-code/cli.js", + ]; + for (const p of candidates) { + if (fs.existsSync(p)) return p; + } + return null; +} + +function sha256(content) { + return crypto.createHash("sha256").update(content).digest("hex"); +} + +function tryGitApply(cliPath) { + const patchFile = path.join(__dirname, "..", "patches", "scroll-fix.patch"); + if (!fs.existsSync(patchFile)) return false; + + const cliDir = path.dirname(cliPath); + try { + execFileSync("git", ["apply", "-C0", "--check", patchFile], { + cwd: cliDir, + timeout: 5000, + stdio: "pipe" + }); + execFileSync("git", ["apply", "-C0", patchFile], { + cwd: cliDir, + timeout: 5000, + stdio: "pipe" + }); + return true; + } catch { + return false; + } +} + +function main() { + const args = process.argv.slice(2); + const uninstall = args.includes("--uninstall"); + const userPath = args.find(a => !a.startsWith("-")); + + const cliPath = findCliJs(userPath); + if (!cliPath) { + console.error("Could not find cli.js. Pass the path as an argument:"); + console.error(" node install.js /path/to/cli.js"); + process.exit(1); + } + + let content = fs.readFileSync(cliPath, "utf-8"); + const origHash = sha256(content); + + if (uninstall) { + if (!content.includes(PATCH_MARKER)) { + console.log("Patch not found — nothing to remove."); + return; + } + const patched = content.replace( + new RegExp("^.*" + PATCH_MARKER.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + ".*\\n", "m"), "" + ); + fs.writeFileSync(cliPath, patched); + console.log("Patch removed from " + cliPath); + console.log("SHA-256: " + sha256(patched)); + return; + } + + if (content.includes(PATCH_MARKER)) { + console.log("Patch already applied to " + cliPath); + return; + } + + // Try git apply first (git diff compatible) + if (tryGitApply(cliPath)) { + console.log("Patch applied via git apply to " + cliPath); + console.log("Original SHA-256: " + origHash); + console.log("Patched SHA-256: " + sha256(fs.readFileSync(cliPath, "utf-8"))); + return; + } + + // Fallback: string injection before first import{ or var + let idx = content.indexOf("import{"); + if (idx === -1) idx = content.indexOf("\nvar "); + if (idx === -1) { + console.error("Could not find injection point in cli.js"); + process.exit(1); + } + + const PATCH = PATCH_MARKER + PATCH_CODE + "\n"; + const patched = content.slice(0, idx) + PATCH + content.slice(idx); + fs.writeFileSync(cliPath, patched); + + console.log("Patch applied to " + cliPath); + console.log("Original SHA-256: " + origHash); + console.log("Patched SHA-256: " + sha256(patched)); +} + +main(); diff --git a/plugins/scroll-fix/scroll-fix.cjs b/plugins/scroll-fix/scroll-fix.cjs new file mode 100644 index 0000000000..e7464e0fa0 --- /dev/null +++ b/plugins/scroll-fix/scroll-fix.cjs @@ -0,0 +1,87 @@ +/** + * scroll-fix.cjs — Fixes terminal scroll-to-top regression in Claude Code + * + * ROOT CAUSE (v2): + * TWO sources of excessive cursor-up sequences: + * 1. Ink renderer's eraseLines() within synchronized output blocks + * 2. Readline/prompt system's eraseLines(this.height) OUTSIDE sync blocks + * Both generate cursor-up sequences exceeding viewport height, causing + * ALL terminals to snap the viewport to the top. + * + * FIX: + * Intercepts ALL process.stdout.write calls. Every cursor-up sequence + * (\x1b[{n}A) is clamped so the TOTAL cursor-up per write call never + * exceeds process.stdout.rows. No sync-block tracking needed. + * + * ADDITIONAL — Ctrl+6 freeze toggle: + * Press Ctrl+6 to freeze all re-render output. Press again to unfreeze. + * + * Upstream: microsoft/terminal#14774, anthropics/claude-code#33814 + */ + +"use strict"; + +(function () { + var _ow = process.stdout.write.bind(process.stdout); + var _frozen = false; + var _buf = []; + + /* ── Ctrl+6 freeze toggle (\x1e) ──────────────────────────────────── */ + setTimeout(function () { + try { + process.stdin.on("data", function (d) { + if (d.toString().indexOf("\x1e") !== -1) { + _frozen = !_frozen; + if (_frozen) { + _ow("\x1b]0;Claude Code [FROZEN - Ctrl+6 to resume]\x07"); + } else { + if (_buf.length > 0) { + var a = ""; + for (var i = 0; i < _buf.length; i++) a += _buf[i]; + _buf = []; + _ow(a); + } + _ow("\x1b]0;Claude Code\x07"); + } + } + }); + } catch (e) {} + }, 2000); + + /* ── stdout.write interceptor ─────────────────────────────────────── */ + process.stdout.write = function (d, e, c) { + if (typeof e === "function") { + c = e; + e = void 0; + } + var s = + typeof d === "string" + ? d + : Buffer.isBuffer(d) + ? d.toString("utf-8") + : String(d); + var maxUp = process.stdout.rows || 24; + + /* Clamp cursor-up per write call. + * Never let total upward movement in a single write exceed viewport. */ + var upBudget = maxUp; + + s = s.replace(/\x1b\[(\d*)A/g, function (m, p) { + var n = parseInt(p) || 1; + if (upBudget <= 0) return ""; + var allowed = n > upBudget ? upBudget : n; + upBudget -= allowed; + return "\x1b[" + allowed + "A"; + }); + + /* Freeze: buffer ALL output when frozen */ + if (_frozen) { + _buf.push(s); + if (c) c(); + return true; + } + + if (typeof d === "string") return _ow(s, e, c); + return _ow(Buffer.from(s, "utf-8"), e, c); + }; +})();