@cursor/sdk 1.0.18 → 1.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/cjs/18.js +1 -0
  2. package/dist/cjs/19.js +1 -0
  3. package/dist/cjs/343.js +1 -0
  4. package/dist/cjs/400.js +1 -0
  5. package/dist/cjs/403.js +8 -0
  6. package/dist/cjs/{index.js.LICENSE.txt → 403.js.LICENSE.txt} +31 -0
  7. package/dist/cjs/618.js +1 -0
  8. package/dist/cjs/656.js +1 -0
  9. package/dist/cjs/730.js +1 -0
  10. package/dist/cjs/796.js +1 -0
  11. package/dist/cjs/856.js +1 -0
  12. package/dist/cjs/914.js +1 -0
  13. package/dist/cjs/986.js +1 -0
  14. package/dist/cjs/996.js +1 -0
  15. package/dist/cjs/agent/options.d.ts +242 -0
  16. package/dist/cjs/agent/options.d.ts.map +1 -0
  17. package/dist/cjs/agent/run-event-notifier-api.d.ts +120 -0
  18. package/dist/cjs/agent/run-event-notifier-api.d.ts.map +1 -0
  19. package/dist/cjs/agent/run-store-public-types.d.ts +178 -0
  20. package/dist/cjs/agent/run-store-public-types.d.ts.map +1 -0
  21. package/dist/cjs/agent/store/local-agent-record-conversion.d.ts +7 -0
  22. package/dist/cjs/agent/store/local-agent-record-conversion.d.ts.map +1 -0
  23. package/dist/cjs/agent/store/local-agent-store.d.ts +289 -0
  24. package/dist/cjs/agent/store/local-agent-store.d.ts.map +1 -0
  25. package/dist/cjs/agent/store/sdk-state-root.d.ts +6 -0
  26. package/dist/cjs/agent/store/sdk-state-root.d.ts.map +1 -0
  27. package/dist/cjs/agent/store/sqlite-local-agent-store.d.ts +30 -0
  28. package/dist/cjs/agent/store/sqlite-local-agent-store.d.ts.map +1 -0
  29. package/dist/cjs/index.d.ts +1 -1
  30. package/dist/cjs/index.d.ts.map +1 -1
  31. package/dist/cjs/index.js +1 -2
  32. package/dist/cjs/local-executor.d.ts +1 -0
  33. package/dist/cjs/local-executor.d.ts.map +1 -1
  34. package/dist/cjs/options.d.ts +9 -3
  35. package/dist/cjs/options.d.ts.map +1 -1
  36. package/dist/cjs/platform.d.ts +1 -0
  37. package/dist/cjs/platform.d.ts.map +1 -1
  38. package/dist/cjs/public-api.d.ts +2 -2
  39. package/dist/cjs/public-api.d.ts.map +1 -1
  40. package/dist/cjs/safe-connect-transport.d.ts +9 -0
  41. package/dist/cjs/safe-connect-transport.d.ts.map +1 -0
  42. package/dist/cjs/safe-node-http-client.d.ts +11 -0
  43. package/dist/cjs/safe-node-http-client.d.ts.map +1 -0
  44. package/dist/cjs/sdk-config.d.ts +2 -1
  45. package/dist/cjs/sdk-config.d.ts.map +1 -1
  46. package/dist/cjs/sqlite.d.ts +8 -0
  47. package/dist/cjs/sqlite.d.ts.map +1 -0
  48. package/dist/cjs/sqlite.js +1 -0
  49. package/dist/cjs/store/index.d.ts +1 -2
  50. package/dist/cjs/store/index.d.ts.map +1 -1
  51. package/dist/cjs/store/open-default-local-agent-store.d.ts +4 -0
  52. package/dist/cjs/store/open-default-local-agent-store.d.ts.map +1 -0
  53. package/dist/cjs/store/sqlite-local-agent-store.d.ts.map +1 -1
  54. package/dist/cjs/store/sqlite-storage-unavailable.d.ts +6 -0
  55. package/dist/cjs/store/sqlite-storage-unavailable.d.ts.map +1 -0
  56. package/dist/cjs/transport.d.ts +47 -0
  57. package/dist/cjs/transport.d.ts.map +1 -0
  58. package/dist/esm/18.js +1 -0
  59. package/dist/esm/19.js +1 -0
  60. package/dist/esm/343.js +1 -0
  61. package/dist/esm/357.js +1 -0
  62. package/dist/esm/400.js +1 -0
  63. package/dist/esm/403.js +8 -0
  64. package/dist/esm/{index.js.LICENSE.txt → 403.js.LICENSE.txt} +31 -0
  65. package/dist/esm/656.js +1 -0
  66. package/dist/esm/730.js +1 -0
  67. package/dist/esm/856.js +1 -0
  68. package/dist/esm/914.js +1 -0
  69. package/dist/esm/986.js +1 -0
  70. package/dist/esm/988.js +1 -0
  71. package/dist/esm/996.js +1 -0
  72. package/dist/esm/agent/options.d.ts +242 -0
  73. package/dist/esm/agent/options.d.ts.map +1 -0
  74. package/dist/esm/agent/run-event-notifier-api.d.ts +120 -0
  75. package/dist/esm/agent/run-event-notifier-api.d.ts.map +1 -0
  76. package/dist/esm/agent/run-store-public-types.d.ts +178 -0
  77. package/dist/esm/agent/run-store-public-types.d.ts.map +1 -0
  78. package/dist/esm/agent/store/local-agent-record-conversion.d.ts +7 -0
  79. package/dist/esm/agent/store/local-agent-record-conversion.d.ts.map +1 -0
  80. package/dist/esm/agent/store/local-agent-store.d.ts +289 -0
  81. package/dist/esm/agent/store/local-agent-store.d.ts.map +1 -0
  82. package/dist/esm/agent/store/sdk-state-root.d.ts +6 -0
  83. package/dist/esm/agent/store/sdk-state-root.d.ts.map +1 -0
  84. package/dist/esm/agent/store/sqlite-local-agent-store.d.ts +30 -0
  85. package/dist/esm/agent/store/sqlite-local-agent-store.d.ts.map +1 -0
  86. package/dist/esm/index.d.ts +1 -1
  87. package/dist/esm/index.d.ts.map +1 -1
  88. package/dist/esm/index.js +1 -2
  89. package/dist/esm/local-executor.d.ts +1 -0
  90. package/dist/esm/local-executor.d.ts.map +1 -1
  91. package/dist/esm/options.d.ts +9 -3
  92. package/dist/esm/options.d.ts.map +1 -1
  93. package/dist/esm/platform.d.ts +1 -0
  94. package/dist/esm/platform.d.ts.map +1 -1
  95. package/dist/esm/public-api.d.ts +2 -2
  96. package/dist/esm/public-api.d.ts.map +1 -1
  97. package/dist/esm/safe-connect-transport.d.ts +9 -0
  98. package/dist/esm/safe-connect-transport.d.ts.map +1 -0
  99. package/dist/esm/safe-node-http-client.d.ts +11 -0
  100. package/dist/esm/safe-node-http-client.d.ts.map +1 -0
  101. package/dist/esm/sdk-config.d.ts +2 -1
  102. package/dist/esm/sdk-config.d.ts.map +1 -1
  103. package/dist/esm/sqlite.d.ts +8 -0
  104. package/dist/esm/sqlite.d.ts.map +1 -0
  105. package/dist/esm/sqlite.js +1 -0
  106. package/dist/esm/store/index.d.ts +1 -2
  107. package/dist/esm/store/index.d.ts.map +1 -1
  108. package/dist/esm/store/open-default-local-agent-store.d.ts +4 -0
  109. package/dist/esm/store/open-default-local-agent-store.d.ts.map +1 -0
  110. package/dist/esm/store/sqlite-local-agent-store.d.ts.map +1 -1
  111. package/dist/esm/store/sqlite-storage-unavailable.d.ts +6 -0
  112. package/dist/esm/store/sqlite-storage-unavailable.d.ts.map +1 -0
  113. package/dist/esm/transport.d.ts +47 -0
  114. package/dist/esm/transport.d.ts.map +1 -0
  115. package/package.json +20 -13
  116. package/dist/cjs/429.index.js +0 -1
  117. package/dist/cjs/745.index.js +0 -8
  118. package/dist/cjs/745.index.js.LICENSE.txt +0 -30
  119. package/dist/esm/429.index.js +0 -1
  120. package/dist/esm/745.index.js +0 -8
  121. package/dist/esm/745.index.js.LICENSE.txt +0 -30
  122. /package/dist/cjs/{642.index.js → 642.js} +0 -0
  123. /package/dist/esm/{642.index.js → 642.js} +0 -0
@@ -0,0 +1 @@
1
+ "use strict";exports.id=618,exports.ids=[618],exports.modules={"./src/agent/local-executor.ts"(e,t,r){r.d(t,{createLocalExecutor:()=>$y});var n=r("node:buffer"),o=r("node:crypto"),s=r("node:fs"),i=r("node:os"),a=r("node:path"),l=r.t(a,2),c=r("../context/dist/index.js"),u=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});class d{checkpointStream;checkpointHandler;ctx;constructor(e,t,r){this.checkpointStream=e,this.checkpointHandler=t,this.ctx=r}async run(){const e={stack:[],error:void 0,hasError:!1};try{const t=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t}(e,(0,c.VI)(this.ctx.withName("CheckpointController.run")),!1).ctx,r=[];for await(const e of this.checkpointStream)r.push(this.checkpointHandler.handleCheckpoint(t,e));await Promise.all(r)}catch(t){e.error=t,e.hasError=!0}finally{u(e)}}}var p=r("../metrics/dist/index.js"),h=r("../proto/dist/generated/agent/v1/exec_pb.js"),m=r("../utils/dist/index.js");const f=/ \[git: ([^\]]*)\]/;function g(e,t,r){if("object"!=typeof t||null===t)return e;if(f.test(e))return e;const n=t,o=[];if("string"==typeof n.gitErrorCode&&n.gitErrorCode.length>0&&o.push(`gitErrorCode=${n.gitErrorCode}`),"number"==typeof n.exitCode&&Number.isFinite(n.exitCode)&&o.push(`exitCode=${n.exitCode}`),0===o.length)return e;let s=`${e} [git: ${o.join(" ")}]`;var i;return!0===(null==r?void 0:r.includeStderr)&&"string"==typeof n.stderr&&n.stderr.length>0&&(s+=`\n--- git stderr ---\n${i=n.stderr,i.length<=2048?i:`${i.slice(0,2048)}… [truncated to 2048 chars]`}`),s}const v=(0,c.h)("SimpleControlledExecManager"),y=(0,p.v5)("agent_exec.controlled.exec.duration_ms",{description:"Duration of controlled exec operations in milliseconds",labelNames:["exec_case"]}),w=(0,p.Pu)("agent_exec.controlled.exec.success",{description:"Count of successful controlled exec operations",labelNames:["exec_case"]}),b=(0,p.Pu)("agent_exec.controlled.exec.error",{description:"Count of failed controlled exec operations",labelNames:["exec_case"]});class S extends Error{constructor(e){super(e),this.name="ControlledExecDisposedError"}}function k(e){return e instanceof S?"EXEC_BACKEND_UNAVAILABLE":e instanceof Error&&"AgentExecStreamStartTimeoutError"===e.name?"AGENT_EXEC_STREAM_START_TIMEOUT":void 0}class E{exec;deserializeArgs;serializeResult;constructor(e,t,r){this.exec=e,this.deserializeArgs=t,this.serializeResult=r}handle(e,t){const r=this.deserializeArgs(t);if(void 0===r)return;const{id:n,args:o}=r;return async function*(r){const s=performance.now(),i=[],a=await r.exec.execute(e,o,{execId:t.execId,hookContextCollector:i}),l=r.serializeResult(n,a);l.localExecutionTimeMs=Math.round(Math.max(0,performance.now()-s)),i.length>0&&(l.hookAdditionalContexts=i),yield l}(this)}}class x{exec;deserializeArgs;serializeStream;constructor(e,t,r){this.exec=e,this.deserializeArgs=t,this.serializeStream=r}handle(e,t){const r=this.deserializeArgs(t);if(void 0===r)return;const{id:n,args:o}=r;return async function*(r){const s=performance.now(),i=r.exec.execute(e,o,{execId:t.execId});for await(const e of i){const t=r.serializeStream(n,e);t.localExecutionTimeMs=Math.round(Math.max(0,performance.now()-s)),yield t}}(this)}}class C{handlers=[];runningExecs=new Map;includeGitStderrInThrows;constructor(e){var t;const r=null!==(t=null==e?void 0:e.includeGitStderrInThrows)&&void 0!==t&&t;this.includeGitStderrInThrows="function"==typeof r?r:()=>r}register(e){this.handlers.push(e)}handleControlMessage(e){if("abort"===e.message.case){const t=e.message.value.id,r=this.runningExecs.get(t);r&&r()}}handle(e,t){var r;const[n,o]=e.withCancel();this.runningExecs.set(t.id,o);const s=null!==(r=t.message.case)&&void 0!==r?r:"unknown";for(const e of this.handlers){const r=e.handle(n,t);if(void 0===r)continue;const o=r,i=(0,m.Jt)();let a;const l=()=>{a=setTimeout((()=>{i.write(new h.$Y({message:{case:"heartbeat",value:new h.VA({id:t.id})}})).then(l).catch((()=>{}))}),3e3)};l();const c=performance.now();return(async()=>{try{for await(const e of o)await i.write(e);await i.write(new h.$Y({message:{case:"streamClose",value:new h.D9({id:t.id})}})),w.increment(n,1,{exec_case:s})}catch(e){if(e instanceof m.W2)return;b.increment(n,1,{exec_case:s}),await i.write(new h.$Y({message:{case:"throw",value:new h.Fu({id:t.id,error:e instanceof Error?g(e.message,e,{includeStderr:this.includeGitStderrInThrows()}):"Unknown error",stackTrace:e instanceof Error?e.stack:void 0,errorCode:k(e)})}}))}finally{const e=performance.now()-c;y.histogram(n,e,{exec_case:s}),clearTimeout(a),i.close(),this.runningExecs.delete(t.id)}})(),i}this.runningExecs.delete(t.id);const i=`No handler found for server message of type ${t.message.case}`;return v.error(e,i,{messageCase:t.message.case}),b.increment(e,1,{exec_case:s}),async function*(){yield new h.$Y({message:{case:"throw",value:new h.Fu({id:t.id,error:i})}}),yield new h.$Y({message:{case:"streamClose",value:new h.D9({id:t.id})}})}()}static fromResources(e,t){const r=new C(t);for(const[t,n]of e.entries())t.registerControlledImplementation(n,r);return r}}var _=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t},P=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const R=(0,c.h)("ExecutorResource");class T{execManager;serializeArgs;deserializeResult;constructor(e,t,r){this.execManager=e,this.serializeArgs=t,this.deserializeResult=r}async execute(e,t,r){const n={stack:[],error:void 0,hasError:!1};try{const o=_(n,(0,c.VI)(e.withName("ExecutorResource.execute")),!1),s=o.ctx;void 0!==(null==r?void 0:r.execId)&&o.span.setAttribute("exec.id",r.execId);const i=(0,c.mJ)(s),a=i?new h.Kg(i):void 0,l=this.execManager.createExecInstance(s,(e=>{const n=this.serializeArgs(e,t);return new h.Ye({id:n.id,message:n.message,execId:null==r?void 0:r.execId,spanContext:a})})),u=await(0,c.uj)(s.withName("ExecutorResource.sendAndAwaitFirstResult"),(()=>(0,m.ue)(l)));if(void 0===u)throw new Error("No exec result");const{firstItem:d,rest:p}=u;(0,c.uj)(s.withName("ExecutorResource.drainResultStream"),(async()=>{try{for await(const e of p);}catch(e){R.info(s,"Ignoring exec stream shutdown during detached drain",{error:e})}})).catch((()=>{}));const f=this.deserializeResult(d);if(void 0===f)throw new Error("No result value");return void 0!==(null==r?void 0:r.hookContextCollector)&&d.hookAdditionalContexts.length>0&&r.hookContextCollector.push(...d.hookAdditionalContexts),f}catch(e){n.error=e,n.hasError=!0}finally{P(n)}}}class I{execManager;serializeArgs;deserializeStream;constructor(e,t,r){this.execManager=e,this.serializeArgs=t,this.deserializeStream=r}async*execute(e,t,r){const n={stack:[],error:void 0,hasError:!1};try{const o=_(n,(0,c.VI)(e.withName("StreamExecutorResource.execute")),!1).ctx,s=(0,c.mJ)(o),i=s?new h.Kg(s):void 0,a=this.execManager.createExecInstance(o,(e=>{const n=this.serializeArgs(e,t);return new h.Ye({id:n.id,message:n.message,execId:null==r?void 0:r.execId,spanContext:i})}));for await(const e of a){const t=this.deserializeStream(e);void 0!==t&&(yield t)}}catch(e){n.error=e,n.hasError=!0}finally{P(n)}}}function A(e,t){return{symbol:Symbol(),remoteImplementation:e,registerControlledImplementation:t}}class O{resource;value;constructor(e,t){this.resource=e,this.value=t}}class D{resources=new Map;register(e,t){this.resources.set(e.symbol,new O(e,t))}get(e){var t;return null===(t=this.resources.get(e.symbol))||void 0===t?void 0:t.value}entries(){return Array.from(this.resources.values()).map((e=>[e.resource,e.value]))}}class M{remoteAccessor;localResources=new Map;constructor(e,t){this.remoteAccessor=e;for(const[e,r]of t)this.localResources.set(e.symbol,{resource:e,implementation:r})}get(e){const t=this.localResources.get(e.symbol);return t?t.implementation:this.remoteAccessor.get(e)}*entries(){for(const{resource:e,implementation:t}of this.localResources.values())yield[e,t];for(const e of this.remoteAccessor.entries())this.localResources.has(e[0].symbol)||(yield e)}}function j(e){return function(t,r){return new h.Ye({id:t,message:{case:e,value:r}})}}function N(e){return t=>{if(t.message.case===e)return t.message.value}}function $(e){return function(t,r){const n={case:e,value:r};return new h.yT({id:t,message:n})}}function F(e){return function(t){if(t.message.case===e)return{id:t.id,args:t.message.value}}}const L=A((e=>new T(e,j("backgroundShellSpawnArgs"),N("backgroundShellSpawnResult"))),((e,t)=>{t.register(new E(e,F("backgroundShellSpawnArgs"),$("backgroundShellSpawnResult")))})),U=A((e=>new T(e,j("writeShellStdinArgs"),N("writeShellStdinResult"))),((e,t)=>{t.register(new E(e,F("writeShellStdinArgs"),$("writeShellStdinResult")))}));function B(e){const t={};return"string"==typeof e.title&&e.title.trim().length>0&&(t.title=e.title),"string"==typeof e.cwd&&e.cwd.trim().length>0&&(t.cwd=e.cwd),"number"==typeof e.startTimeMs&&Number.isFinite(e.startTimeMs)&&e.startTimeMs>0&&(t.startTimeMs=String(Math.floor(e.startTimeMs))),Object.keys(t).length>0?t:void 0}var H=r("../proto/dist/generated/agent/v1/agent_pb.js");const W=A((e=>new T(e,j("canvasDiagnosticsArgs"),N("canvasDiagnosticsResult"))),((e,t)=>{t.register(new E(e,F("canvasDiagnosticsArgs"),$("canvasDiagnosticsResult")))}));Error;const z=A((e=>new T(e,j("computerUseArgs"),N("computerUseResult"))),((e,t)=>{t.register(new E(e,F("computerUseArgs"),$("computerUseResult")))})),q=A((e=>new T(e,j("deleteArgs"),N("deleteResult"))),((e,t)=>{t.register(new E(e,F("deleteArgs"),$("deleteResult")))})),G=A((e=>new T(e,j("diagnosticsArgs"),N("diagnosticsResult"))),((e,t)=>{t.register(new E(e,F("diagnosticsArgs"),$("diagnosticsResult")))})),V=A((e=>new T(e,j("fetchArgs"),N("fetchResult"))),((e,t)=>{t.register(new E(e,F("fetchArgs"),$("fetchResult")))})),J=A((e=>new T(e,j("gitDiffRequest"),N("gitDiffResponse"))),((e,t)=>{t.register(new E(e,F("gitDiffRequest"),$("gitDiffResponse")))})),K=A((e=>new T(e,j("grepArgs"),N("grepResult"))),((e,t)=>{t.register(new E(e,F("grepArgs"),$("grepResult")))})),Y={beforeShellExecution:"beforeShellExecution",beforeMCPExecution:"beforeMCPExecution",afterShellExecution:"afterShellExecution",afterMCPExecution:"afterMCPExecution",beforeReadFile:"beforeReadFile",afterFileEdit:"afterFileEdit",beforeTabFileRead:"beforeTabFileRead",afterTabFileEdit:"afterTabFileEdit",stop:"stop",beforeSubmitPrompt:"beforeSubmitPrompt",afterAgentResponse:"afterAgentResponse",afterAgentThought:"afterAgentThought",sessionStart:"sessionStart",sessionEnd:"sessionEnd",preCompact:"preCompact",subagentStart:"subagentStart",subagentStop:"subagentStop",preToolUse:"preToolUse",postToolUse:"postToolUse",postToolUseFailure:"postToolUseFailure",workspaceOpen:"workspaceOpen"},Z={PreToolUse:Y.preToolUse,PermissionRequest:null,PostToolUse:Y.postToolUse,UserPromptSubmit:Y.beforeSubmitPrompt,Stop:Y.stop,SubagentStop:Y.subagentStop,SessionStart:Y.sessionStart,SessionEnd:Y.sessionEnd,PreCompact:Y.preCompact,Notification:null},X=Object.fromEntries(Object.entries(Z).filter((e=>null!==e[1])).map((([e,t])=>[t,e]))),Q={Bash:"Shell",Read:"Read",Write:"Write",Edit:"Write",Glob:null,Grep:"Grep",WebFetch:"WebFetch",WebSearch:"WebSearch",Task:"Task"},ee=["Glob"],te=["Notification","PermissionRequest"],re={warn:()=>{},info:()=>{}};function ne(e,t){const r={loop_limit:null,failClosed:!1};return t&&"*"!==t&&(r.matcher=t),void 0!==e.timeout&&(r.timeout=e.timeout),"prompt"===e.type?e.prompt?Object.assign({type:"prompt",prompt:e.prompt},r):null:e.command?Object.assign({type:"command",command:e.command},r):null}function oe(e,t,r=re){const n=[];let o;if("PreToolUse"===t||"PostToolUse"===t){const t=function(e,t=re){if(""===e||"*"===e)return"*";const r=e.split("|"),n=[],o=[];for(const e of r){const t=e.trim();if(t.startsWith("mcp__")){const e=t.split("__");if(e.length>=3){const t=e.slice(2).join("__");n.push(`MCP:${t}`);continue}}const r=Q[t];null!==r?void 0!==r?n.includes(r)||n.push(r):n.push(t):ee.includes(t)&&o.push(`Tool "${t}" is not supported in Cursor and will be ignored`)}for(const e of o)t.warn(e);return 0===n.length?null:n.join("|")}(e.matcher,r);if(null===t)return r.warn(`All tools in matcher "${e.matcher}" are unsupported, skipping hooks`),[];o="*"===t?void 0:t}else"SessionStart"===t||"PreCompact"===t?(e.matcher&&"*"!==e.matcher&&""!==e.matcher&&("SessionStart"===t?["startup","resume","clear","compact"].includes(e.matcher):["manual","auto"].includes(e.matcher))&&r.warn(`${t} trigger matcher "${e.matcher}" is not supported in Cursor, hooks will fire for all triggers`),o=void 0):o=void 0;for(const t of e.hooks){const e=ne(t,o);e&&n.push(e)}return n}function se(e,t=re){const r={};for(const[n,o]of Object.entries(e)){const e=n;if(te.includes(e)){t.warn(`Claude Code event "${e}" is not supported in Cursor and will be ignored`);continue}const s=Z[e];if(!s){t.warn(`Unknown Claude Code event "${e}", skipping`);continue}const i=[];if(Array.isArray(o))for(const r of o){const n=oe(r,e,t);i.push(...n)}else void 0!==o&&t.warn(`Claude Code event "${e}" has invalid value (expected array), skipping`);if(i.length>0){const e=r[s]||[];r[s]=[...e,...i]}}return{version:1,hooks:r}}function ie(e,t){return e.filter((e=>function(e,t){if(!e.matcher||""===e.matcher||"*"===e.matcher)return!0;if(void 0===t)return!0;try{return new RegExp(e.matcher).test(t)}catch(e){return!0}}(e,t)))}const ae=e=>"string"==typeof e,le=e=>null!==e&&"object"==typeof e&&!Array.isArray(e),ce=(e,t=[])=>({isValid:e,errors:t});function ue(e,t,r){void 0===e||ae(e)||r.push(`${t} must be a string if provided`)}const de=e=>{const t=[];return le(e)?ce(!0):(t.push("Expected an object"),ce(!1,t))},pe=e=>{const t=[],r=de(e);if(!r.isValid)return r;if(void 0!==e.permission){const r=["allow","deny","ask"];r.includes(e.permission)||t.push(`Invalid permission value. Expected one of: ${r.join(", ")}, or undefined`)}return void 0!==e.user_message&&"string"!=typeof e.user_message&&t.push("Invalid user_message value. Expected a string if provided"),void 0!==e.agent_message&&"string"!=typeof e.agent_message&&t.push("Invalid agent_message value. Expected a string if provided"),ce(0===t.length,t)};function he(e){const t=e.modelId,r=e.modelParams;return Object.assign(Object.assign({},void 0!==t&&{model_id:t}),void 0!==r&&r.length>0?{model_params:r.map((e=>({id:e.id,value:e.value})))}:{})}const me=new Set([Y.sessionStart,Y.beforeSubmitPrompt,Y.preToolUse,Y.postToolUse,Y.postToolUseFailure]);function fe(e){return"prompt"===e.type}const ge={[Y.beforeShellExecution]:pe,[Y.beforeMCPExecution]:pe,[Y.afterShellExecution]:e=>{const t=de(e);return t.isValid,t},[Y.afterMCPExecution]:e=>{const t=de(e);return t.isValid,t},[Y.beforeReadFile]:e=>{const t=[],r=de(e);if(!r.isValid)return r;if(void 0!==e.permission){const r=["allow","deny"];r.includes(e.permission)||t.push(`Invalid permission value. Expected one of: ${r.join(", ")}, or undefined`)}return void 0!==e.user_message&&"string"!=typeof e.user_message&&t.push("user_message must be a string if provided"),ce(0===t.length,t)},[Y.afterFileEdit]:e=>{const t=de(e);return t.isValid,t},[Y.beforeTabFileRead]:e=>{const t=[],r=de(e);if(!r.isValid)return r;if(void 0!==e.permission){const r=["allow","deny"];r.includes(e.permission)||t.push(`Invalid permission value. Expected one of: ${r.join(", ")}, or undefined`)}return void 0!==e.user_message&&"string"!=typeof e.user_message&&t.push("user_message must be a string if provided"),ce(0===t.length,t)},[Y.afterTabFileEdit]:e=>de(e),[Y.beforeSubmitPrompt]:e=>{const t=de(e);if(!t.isValid)return t;const r=[];return void 0!==e.continue&&"boolean"!=typeof e.continue&&r.push("continue must be a boolean if provided"),void 0!==e.user_message&&"string"!=typeof e.user_message&&r.push("user_message must be a string if provided"),void 0===e.additional_context||ae(e.additional_context)||r.push("additional_context must be a string if provided"),ce(0===r.length,r)},[Y.stop]:e=>{const t=de(e);if(!t.isValid)return t;const r=[];return void 0!==e.followup_message&&"string"!=typeof e.followup_message&&r.push("followup_message must be a string if provided"),ce(0===r.length,r)},[Y.afterAgentResponse]:e=>{const t=de(e);return t.isValid,t},[Y.afterAgentThought]:e=>{const t=de(e);return t.isValid,t},[Y.sessionStart]:e=>{const t=de(e);if(!t.isValid)return t;const r=[];if(void 0!==e.env)if(le(e.env))for(const[t,n]of Object.entries(e.env))ae(t)||r.push(`env key "${t}" must be a string`),ae(n)||r.push(`env value for "${t}" must be a string`);else r.push("env must be an object if provided");return void 0===e.additional_context||ae(e.additional_context)||r.push("additional_context must be a string if provided"),void 0!==e.continue&&"boolean"!=typeof e.continue&&r.push("continue must be a boolean if provided"),void 0===e.user_message||ae(e.user_message)||r.push("user_message must be a string if provided"),ce(0===r.length,r)},[Y.sessionEnd]:e=>{const t=de(e);return t.isValid?ce(!0,[]):t},[Y.preCompact]:e=>{const t=de(e);if(!t.isValid)return t;if(null==e||0===Object.keys(e).length)return ce(!0,[]);const r=[];if(!le(e))return r.push("PreCompact response must be an object"),ce(!1,r);const n=e;return void 0===n.user_message||(e=>"string"==typeof e)(n.user_message)||r.push("user_message must be a string"),ce(0===r.length,r)},[Y.subagentStart]:e=>{const t=de(e);if(!t.isValid)return t;const r=[],n=e;if(void 0!==n.permission){const e=["allow","deny","ask"];e.includes(n.permission)||r.push(`Invalid permission value. Expected one of: ${e.join(", ")}, or undefined`)}return void 0===n.user_message||ae(n.user_message)||r.push("user_message must be a string if provided"),ce(0===r.length,r)},[Y.subagentStop]:e=>{const t=de(e);if(!t.isValid)return t;const r=[];return void 0!==e&&"object"==typeof e&&null!==e&&void 0!==e.followup_message&&"string"!=typeof e.followup_message&&r.push("followup_message must be a string if provided"),ce(0===r.length,r)},[Y.preToolUse]:e=>{const t=[],r=de(e);if(!r.isValid)return r;if(void 0!==e.permission){const r=["allow","deny","ask"];r.includes(e.permission)||t.push(`Invalid permission value. Expected one of: ${r.join(", ")}, or undefined`)}return void 0!==e.user_message&&"string"!=typeof e.user_message&&t.push("Invalid user_message value. Expected a string if provided"),void 0!==e.agent_message&&"string"!=typeof e.agent_message&&t.push("Invalid agent_message value. Expected a string if provided"),void 0!==e.updated_input&&("object"!=typeof e.updated_input||null===e.updated_input||Array.isArray(e.updated_input))&&t.push("Invalid updated_input value. Expected a plain object if provided"),ue(e.additional_context,"additional_context",t),ce(0===t.length,t)},[Y.postToolUse]:e=>{const t=[],r=de(e);return r.isValid?(ue(e.additional_context,"additional_context",t),ce(0===t.length,t)):r},[Y.postToolUseFailure]:e=>{const t=de(e);if(!t.isValid)return t;const r=[];return ue(e.additional_context,"additional_context",r),ce(0===r.length,r)},[Y.workspaceOpen]:e=>{const t=de(e);if(!t.isValid)return t;const r=[];return void 0!==e.pluginPaths&&(Array.isArray(e.pluginPaths)?e.pluginPaths.forEach(((e,t)=>{ae(e)?0===e.trim().length&&r.push(`pluginPaths[${t}] must be a non-empty string`):r.push(`pluginPaths[${t}] must be a string`)})):r.push("pluginPaths must be an array of strings if provided")),ce(0===r.length,r)}},ve=(e,t,r)=>{const n=function(e,t,r){let n;return n=e===Y.preToolUse?function(e,t){if(!Pe(e))return e;const r=e;if(void 0!==r.permission||void 0!==r.user_message||void 0!==r.agent_message||void 0!==r.updated_input)return r;if(!_e(t))return r;const n=Re(e);if(!Te(n,"PreToolUse"))return r;const o=Object.assign({},r);let s=!1;return void 0!==n.permissionDecision&&(o.permission=n.permissionDecision,s=!0),"string"==typeof n.permissionDecisionReason&&(o.user_message=n.permissionDecisionReason,s=!0),Pe(n.updatedInput)&&(o.updated_input=n.updatedInput,s=!0),s?o:r}(t,r):e===Y.stop?Ie(t,r,"Stop"):e===Y.subagentStop?Ie(t,r,"SubagentStop"):t,function(e,t,r,n){var o;if(!me.has(e)||!Pe(r)||void 0!==r.additional_context)return r;const s=Pe(t)?null!==(o=function(e){return"string"==typeof e.additionalContext?e.additionalContext:void 0}(t))&&void 0!==o?o:function(e,t,r){if(!_e(r))return;const n=X[e];if(void 0===n)return;const o=Re(t);return Te(o,n)&&"string"==typeof o.additionalContext?o.additionalContext:void 0}(e,t,n):void 0;return void 0===s?r:Object.assign(Object.assign({},r),{additional_context:s})}(e,t,n,r)}(e,t,r),o=(0,ge[e])(n);return o.isValid?{success:!0,data:n}:{success:!1,errors:o.errors}},ye=[Y.beforeShellExecution,Y.beforeMCPExecution,Y.beforeReadFile,Y.beforeTabFileRead,Y.subagentStart,Y.preToolUse],we=[Y.workspaceOpen];function be(e,t){const r=[];return(null==e?void 0:e.trim())&&r.push(e.trim()),(null==t?void 0:t.trim())&&r.push(t.trim()),r.length>0?r.join("\n\n---\n\n"):void 0}function Se(e,t){if(e||t)return Object.assign(Object.assign({},e||{}),t||{})}function ke(e){return ye.includes(e)}function Ee({step:e,command:t,failClosed:r,kind:n}){const o=ke(e);if(!r&&!o)return{shouldNotifyUser:!1};const s=r?"Tool blocked because this hook is configured to fail closed (block when it fails). "+("invalid_json"===n?`Hook "${t}" returned invalid JSON.`:`Hook "${t}" returned invalid response.`):"invalid_json"===n?`Hook "${t}" returned invalid JSON. The command was blocked for safety.`:`Hook "${t}" returned an invalid response for this hook step. The command was blocked for safety.`;return{blockResponse:xe(e,s),cause:r?"script_fail_closed":"permission_hook_invalid_output",reason:s,shouldNotifyUser:o&&!r}}function xe(e,t){return ke(e)?{permission:"deny",user_message:t}:e===Y.beforeSubmitPrompt||e===Y.sessionStart?{continue:!1,user_message:t}:e===Y.stop?{}:void 0}function Ce(e){try{return{value:JSON.parse(e)}}catch(e){return}}function _e(e){var t;return null!==(t=null==e?void 0:e.enableClaudeNestedHookSpecificOutputCompatibility)&&void 0!==t&&t}function Pe(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function Re(e){if(!Pe(e))return;const t=e.hookSpecificOutput;return Pe(t)?t:void 0}function Te(e,t){if(!e)return!1;const r=e.hookEventName;return void 0===r||""===r||r===t}function Ie(e,t,r){if(!Pe(e))return e;const n=e;if(void 0!==n.followup_message)return n;if("block"===n.decision&&"string"==typeof n.reason&&n.reason.trim().length>0)return Object.assign(Object.assign({},n),{followup_message:n.reason.trim()});if(!_e(t))return n;const o=Re(e),s=Te(o,r)?o:void 0,i=void 0!==s?Object.assign(Object.assign({},n),s):n;return"block"===i.decision&&"string"==typeof i.reason&&i.reason.trim().length>0?Object.assign(Object.assign({},i),{followup_message:i.reason.trim()}):n}const Ae=["-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass"],Oe=e=>{const t=[];if(!le(e))return t.push("Hook script must be an object with either a 'command' property (command hook) or 'type: \"prompt\"' with a 'prompt' property (prompt hook)"),ce(!1,t);const r=e.type;return"prompt"===r?((e,t)=>{ae(e.prompt)?""===e.prompt.trim()&&t.push("Prompt hook 'prompt' property cannot be empty"):t.push("Prompt hook must have a 'prompt' property (string)"),void 0!==e.model&&(ae(e.model)?""===e.model.trim()&&t.push("Prompt hook 'model' cannot be an empty string"):t.push("Prompt hook 'model' must be a string if provided"))})(e,t):"command"===r||void 0===r?((e,t)=>{ae(e.command)||t.push("Hook script command must be a string")})(e,t):t.push(`Invalid hook type: "${r}". Must be "command", "prompt", or omitted (defaults to "command")`),((e,t)=>{var r;if(void 0!==e.matcher)if(ae(e.matcher)){if(""!==e.matcher&&"*"!==e.matcher)try{new RegExp(e.matcher)}catch(n){t.push(`Hook script matcher "${e.matcher}" is not a valid regex: ${null!==(r=null==n?void 0:n.message)&&void 0!==r?r:String(n)}`)}}else t.push("Hook script matcher must be a string if provided");if(void 0!==e.timeout&&("number"!=typeof e.timeout?t.push("Hook script timeout must be a number (seconds)"):e.timeout<=0?t.push("Hook script timeout must be a positive number"):e.timeout>3600&&console.warn(`[hooks] Hook timeout of ${e.timeout}s is very long (>1 hour)`)),void 0!==e.loop_limit){const r=e.loop_limit;null!==r&&("number"!=typeof r?t.push("Hook script loop_limit must be a positive integer or null"):Number.isInteger(r)?r<=0&&t.push("Hook script loop_limit must be a positive integer (use null for no limit)"):t.push("Hook script loop_limit must be an integer"))}void 0!==e.failClosed&&"boolean"!=typeof e.failClosed&&t.push("Hook script failClosed must be a boolean")})(e,t),ce(0===t.length,t)},De=(e,t)=>{const r=[];if(!Array.isArray(e))return r.push(`${t} must be an array of hook scripts`),ce(!1,r);for(let n=0;n<e.length;n++){const o=Oe(e[n]);o.isValid||r.push(`${t}[${n}]: ${o.errors.join(", ")}`)}return ce(0===r.length,r)},Me=e=>{const t=[];if(!le(e))return t.push("Hooks config must be an object"),ce(!1,t);if("number"!=typeof e.version?t.push("Config version must be a number"):(!Number.isInteger(e.version)||e.version<1)&&t.push("Config version must be a positive integer"),!le(e.hooks))return t.push("Config hooks must be an object"),ce(!1,t);void 0!==e.stop_hook_loop_limit&&console.warn("[hooks] DEPRECATION WARNING: 'stop_hook_loop_limit' is deprecated. Use 'loop_limit' on individual hook scripts instead. The configured value is being ignored.");const r=Object.values(Y),n=e.hooks;for(const[e,o]of Object.entries(n))if(r.includes(e)){if(void 0!==o){const r=De(o,e);r.isValid||t.push(...r.errors)}}else t.push(`Unknown hook type: ${e}. Valid types are: ${r.join(", ")}`);return ce(0===t.length,t)},je=A((e=>new T(e,j("executeHookArgs"),N("executeHookResult"))),((e,t)=>{t.register(new E(e,F("executeHookArgs"),$("executeHookResult")))}));class Ne{hookExecutor;constructor(e){this.hookExecutor=e}hasFailClosedHooksForStep(e,t){var r,n,o;return null!==(o=null===(n=(r=this.hookExecutor).hasFailClosedHooksForStep)||void 0===n?void 0:n.call(r,e,t))&&void 0!==o&&o}async execute(e,t){var r,n,o,s,i,a,l,c,u,d,p,m,f,g,v,y,w,b,S;const k=t.request;if(!k)return new h.S1({response:void 0});switch(k.request.case){case"preCompact":{const e=k.request.value,t=Object.assign(Object.assign({conversation_id:null!==(r=e.conversationId)&&void 0!==r?r:"",generation_id:null!==(n=e.generationId)&&void 0!==n?n:"",model:null!==(o=e.model)&&void 0!==o?o:""},he(e)),{trigger:"manual"===e.trigger?"manual":"auto",context_usage_percent:e.contextUsagePercent,context_tokens:Number(e.contextTokens),context_window_size:Number(e.contextWindowSize),message_count:e.messageCount,messages_to_compact:e.messagesToCompact,is_first_compaction:e.isFirstCompaction}),s=await this.hookExecutor.executeHookForStep(Y.preCompact,t);return new h.S1({response:new h.w5({response:{case:"preCompact",value:new H.$_({userMessage:null==s?void 0:s.user_message})}})})}case"subagentStart":{const e=k.request.value,t=Object.assign(Object.assign({conversation_id:null!==(s=e.conversationId)&&void 0!==s?s:"",generation_id:null!==(i=e.generationId)&&void 0!==i?i:"",model:null!==(a=e.model)&&void 0!==a?a:""},he(e)),{subagent_id:e.subagentId,subagent_type:e.subagentType,task:e.task,parent_conversation_id:e.parentConversationId,tool_call_id:e.toolCallId,subagent_model:e.subagentModel,is_parallel_worker:e.isParallelWorker,git_branch:e.gitBranch}),r=await this.hookExecutor.executeHookForStep(Y.subagentStart,t);return new h.S1({response:new h.w5({response:{case:"subagentStart",value:new H.W0({permission:null==r?void 0:r.permission,userMessage:null==r?void 0:r.user_message,additionalContext:null==r?void 0:r.additional_context})}})})}case"subagentStop":{const e=k.request.value,t=Object.assign(Object.assign({conversation_id:null!==(l=e.conversationId)&&void 0!==l?l:"",generation_id:null!==(c=e.generationId)&&void 0!==c?c:"",model:null!==(u=e.model)&&void 0!==u?u:""},he(e)),{subagent_id:e.subagentId,subagent_type:e.subagentType,status:e.status,duration_ms:Number(e.durationMs),summary:e.summary,parent_conversation_id:e.parentConversationId,message_count:e.messageCount,tool_call_count:e.toolCallCount,error_message:e.errorMessage,modified_files:e.modifiedFiles,git_branch:e.gitBranch,loop_count:null!==(d=e.loopCount)&&void 0!==d?d:0,task:e.task,description:e.description}),r=await this.hookExecutor.executeHookForStep(Y.subagentStop,t);return new h.S1({response:new h.w5({response:{case:"subagentStop",value:new H.AH({followupMessage:null==r?void 0:r.followup_message,additionalContext:null==r?void 0:r.additional_context})}})})}case"preToolUse":{const e=k.request.value,t=e.toolInput?e.toolInput.toJson():{},r=Object.assign(Object.assign({conversation_id:null!==(p=e.conversationId)&&void 0!==p?p:"",generation_id:null!==(m=e.generationId)&&void 0!==m?m:"",model:null!==(f=e.model)&&void 0!==f?f:""},he(e)),{tool_name:e.toolName,tool_input:t,tool_use_id:e.toolUseId,cwd:e.cwd}),n=await this.hookExecutor.executeHookForStep(Y.preToolUse,r);return new h.S1({response:new h.w5({response:{case:"preToolUse",value:new H.D2({permission:null==n?void 0:n.permission,userMessage:null==n?void 0:n.user_message,agentMessage:null==n?void 0:n.agent_message,updatedInput:(null==n?void 0:n.updated_input)?JSON.stringify(n.updated_input):void 0,additionalContext:null==n?void 0:n.additional_context})}})})}case"postToolUse":{const e=k.request.value,t=e.toolInput?e.toolInput.toJson():{},r=Object.assign(Object.assign({conversation_id:null!==(g=e.conversationId)&&void 0!==g?g:"",generation_id:null!==(v=e.generationId)&&void 0!==v?v:"",model:null!==(y=e.model)&&void 0!==y?y:""},he(e)),{tool_name:e.toolName,tool_input:t,tool_output:e.toolOutput,duration:Number(e.durationMs),tool_use_id:e.toolUseId,cwd:e.cwd}),n=await this.hookExecutor.executeHookForStep(Y.postToolUse,r);return new h.S1({response:new h.w5({response:{case:"postToolUse",value:new H.uB({additionalContext:null==n?void 0:n.additional_context})}})})}case"postToolUseFailure":{const e=k.request.value,t=e.toolInput?e.toolInput.toJson():{},r=Object.assign(Object.assign({conversation_id:null!==(w=e.conversationId)&&void 0!==w?w:"",generation_id:null!==(b=e.generationId)&&void 0!==b?b:"",model:null!==(S=e.model)&&void 0!==S?S:""},he(e)),{tool_name:e.toolName,tool_input:t,error_message:e.errorMessage,failure_type:e.failureType,duration:Number(e.durationMs),tool_use_id:e.toolUseId,is_interrupt:e.isInterrupt}),n=await this.hookExecutor.executeHookForStep(Y.postToolUseFailure,r);return new h.S1({response:new h.w5({response:{case:"postToolUseFailure",value:new H.U1({additionalContext:null==n?void 0:n.additional_context})}})})}default:return new h.S1({response:void 0})}}}(0,c.cF)(Symbol("execHookConversationId"),void 0),(0,c.cF)(Symbol("execHookGenerationId"),void 0),(0,c.cF)(Symbol("execHookModel"),void 0);const $e=(0,c.cF)(Symbol("execHookWorkspaceRoots"),void 0),Fe=A((e=>new T(e,j("lsArgs"),N("lsResult"))),((e,t)=>{t.register(new E(e,F("lsArgs"),$("lsResult")))})),Le="custom-user-tools";var Ue;new Set(["cursor-dev-control","cursor-ide-browser"]),function(e){e.Snapshots="cursor_mcp_lease_snapshot_store",e.Status="cursor_mcp_lease_server_status",e.Settings="cursor_mcp_lease_settings",e.Providers="cursor_mcp_lease_providers",e.Unknown="cursor_mcp_lease_unknown"}(Ue||(Ue={}));const Be=A((e=>new T(e,j("mcpArgs"),N("mcpResult"))),((e,t)=>{t.register(new E(e,F("mcpArgs"),$("mcpResult")))})),He=A((e=>new T(e,j("listMcpResourcesExecArgs"),N("listMcpResourcesExecResult"))),((e,t)=>{t.register(new E(e,F("listMcpResourcesExecArgs"),$("listMcpResourcesExecResult")))})),We=A((e=>new T(e,j("readMcpResourceExecArgs"),N("readMcpResourceExecResult"))),((e,t)=>{t.register(new E(e,F("readMcpResourceExecArgs"),$("readMcpResourceExecResult")))})),ze=A((e=>new T(e,j("mcpStateExecArgs"),N("mcpStateExecResult"))),((e,t)=>{t.register(new E(e,F("mcpStateExecArgs"),$("mcpStateExecResult")))}));var qe=r("../proto/dist/generated/agent/v1/mcp_allowlist_precheck_exec_pb.js");const Ge=A((e=>new T(e,j("mcpAllowlistPrecheckArgs"),N("mcpAllowlistPrecheckResult"))),((e,t)=>{t.register(new E(e,F("mcpAllowlistPrecheckArgs"),$("mcpAllowlistPrecheckResult")))})),Ve=A((e=>new T(e,j("readArgs"),N("readResult"))),((e,t)=>{t.register(new E(e,F("readArgs"),$("readResult")))})),Je=A((e=>new T(e,j("redactedReadArgs"),N("redactedReadResult"))),((e,t)=>{t.register(new E(e,F("redactedReadArgs"),$("redactedReadResult")))}));var Ke=r("../proto/dist/generated/agent/v1/background_shell_exec_pb.js"),Ye=r("../proto/dist/generated/agent/v1/delete_exec_pb.js"),Ze=r("../proto/dist/generated/agent/v1/mcp_exec_pb.js"),Xe=r("../proto/dist/generated/agent/v1/shell_exec_pb.js"),Qe=r("../proto/dist/generated/agent/v1/write_exec_pb.js");const et=A((e=>new T(e,j("shellArgs"),N("shellResult"))),((e,t)=>{t.register(new E(e,F("shellArgs"),$("shellResult")))})),tt=A((e=>new I(e,j("shellStreamArgs"),N("shellStream"))),((e,t)=>{t.register(new x(e,F("shellStreamArgs"),$("shellStream")))})),rt=A((e=>new T(e,j("writeArgs"),N("writeResult"))),((e,t)=>{t.register(new E(e,F("writeArgs"),$("writeResult")))}));function nt(e,t){var r,n;return new Xe.jn({command:null!==(r=t.command)&&void 0!==r?r:"",workingDirectory:null!==(n=t.workingDirectory)&&void 0!==n?n:"",error:e,isReadonly:!0})}function ot(e){return{execute:async(t,r)=>new Xe.W4({result:{case:"permissionDenied",value:nt(e,r)}})}}function st(e){return{async*execute(t,r){yield new Xe.FI({event:{case:"permissionDenied",value:nt(e,r)}})}}}function it(e){return{execute:async(t,r)=>new Ke.Lt({result:{case:"permissionDenied",value:nt(e,r)}})}}function at(e){return{execute:async(t,r)=>new Ye.Pi({result:{case:"permissionDenied",value:new Ye.QG({path:r.path,clientVisibleError:e,isReadonly:!0})}})}}function lt(e){return{execute:async(t,r)=>new Ze.iz({result:{case:"permissionDenied",value:new Ze.HQ({error:`${e} Tool: ${r.name}`,isReadonly:!0})}})}}function ct(e){return{execute:async(t,r)=>new Ke.nt({result:{case:"error",value:new Ke.Gv({error:e})}})}}const ut=A((e=>new T(e,j("recordScreenArgs"),N("recordScreenResult"))),((e,t)=>{t.register(new E(e,F("recordScreenArgs"),$("recordScreenResult")))})),dt=A((e=>new T(e,j("requestContextArgs"),N("requestContextResult"))),((e,t)=>{t.register(new E(e,F("requestContextArgs"),$("requestContextResult")))}));var pt=r("../proto/dist/generated/agent/v1/shell_allowlist_precheck_exec_pb.js");const ht=A((e=>new T(e,j("shellAllowlistPrecheckArgs"),N("shellAllowlistPrecheckResult"))),((e,t)=>{t.register(new E(e,F("shellAllowlistPrecheckArgs"),$("shellAllowlistPrecheckResult")))})),mt=A((e=>new T(e,j("forceBackgroundShellArgs"),N("forceBackgroundShellResult"))),((e,t)=>{t.register(new E(e,F("forceBackgroundShellArgs"),$("forceBackgroundShellResult")))}));function ft(e,t){e.hookApprovalRequirement=void 0!==t?new Xe.In(t):void 0}function gt(e){return e.hookApprovalRequirement}function vt(e){return(null==e?void 0:e.kind)===Xe.b.FORCE_PROMPT}r("../proto/dist/generated/agent/v1/smart_mode_classifier_exec_pb.js"),A((e=>new T(e,j("smartModeClassifierArgs"),N("smartModeClassifierResult"))),((e,t)=>{t.register(new E(e,F("smartModeClassifierArgs"),$("smartModeClassifierResult")))}));var yt=r("../proto/dist/generated/agent/v1/subagent_exec_pb.js");class wt extends Error{name="SubagentHostError";agentId;cause;constructor(e,t){super(e),this.agentId=null==t?void 0:t.agentId,this.cause=null==t?void 0:t.cause}}const bt=A((e=>new T(e,j("subagentArgs"),N("subagentResult"))),((e,t)=>{t.register(new E(e,F("subagentArgs"),$("subagentResult")))}));A((e=>new T(e,j("subagentAwaitArgs"),N("subagentAwaitResult"))),((e,t)=>{t.register(new E(e,F("subagentAwaitArgs"),$("subagentAwaitResult")))})),A((e=>new T(e,j("forceBackgroundSubagentArgs"),N("forceBackgroundSubagentResult"))),((e,t)=>{t.register(new E(e,F("forceBackgroundSubagentArgs"),$("forceBackgroundSubagentResult")))}));class St{options;states=new Map;runCounterBySession=new Map;dispatchQueueBySession=new Map;dispatchInProgress=new Set;releaseRequestedBySession=new Set;constructor(e={}){this.options=e}getState(e){var t;return null!==(t=this.states.get(e))&&void 0!==t?t:{status:"idle"}}isBusy(e){return"idle"!==this.getState(e).status}startRun(e,t){const r=this.nextRunId(e);return this.enqueueEvent(e,{type:"startRun",runId:r,abort:null==t?void 0:t.abort}),r}queueResume(e,t){this.enqueueEvent(e,{type:"queueResume",queuedResume:t.queuedResume,targetRunId:t.targetRunId,mergeQueuedResume:t.mergeQueuedResume})}finishRun(e,t){this.enqueueEvent(e,{type:"runFinished",runId:t})}clearQueuedResume(e){this.enqueueEvent(e,{type:"clearQueuedResume"})}abort(e){this.enqueueEvent(e,{type:"abort"})}release(e){this.enqueueEvent(e,{type:"release"})}nextRunId(e){var t;const r=(null!==(t=this.runCounterBySession.get(e))&&void 0!==t?t:0)+1;return this.runCounterBySession.set(e,r),r}enqueueEvent(e,t){var r;const n=null!==(r=this.dispatchQueueBySession.get(e))&&void 0!==r?r:[];n.push(t),this.dispatchQueueBySession.set(e,n),this.drainEventQueue(e)}drainEventQueue(e){if(this.dispatchInProgress.has(e))return;let t;this.dispatchInProgress.add(e);try{const r=this.dispatchQueueBySession.get(e);if(!r)return;for(;r.length>0;){const n=r.shift();if(n)try{this.processEvent(e,n)}catch(e){null!=t||(t=e)}}}finally{this.dispatchQueueBySession.delete(e),this.dispatchInProgress.delete(e)}if(t)throw t}processEvent(e,t){var r,n,o,s,i;const a=this.getState(e),{nextState:l,effects:c}=function(e,t){switch(e.status){case"idle":return function(e,t){switch(t.type){case"startRun":return{nextState:{status:"running",runId:t.runId,abort:t.abort},effects:[]};case"queueResume":return void 0===t.targetRunId?{nextState:e,effects:[]}:{nextState:{status:"runningWithQueuedResume",runId:t.targetRunId,queuedResume:t.queuedResume},effects:[]};case"runFinished":case"clearQueuedResume":case"abort":case"release":return{nextState:e,effects:[]};default:throw new Error(`Unhandled idle-state event: ${String(t)}`)}}(e,t);case"running":return function(e,t){switch(t.type){case"startRun":return{nextState:{status:"running",runId:t.runId,abort:t.abort},effects:[{type:"abortActiveRun",abort:e.abort}]};case"queueResume":return{nextState:{status:"runningWithQueuedResume",runId:e.runId,abort:e.abort,queuedResume:t.queuedResume},effects:[]};case"runFinished":return t.runId!==e.runId?{nextState:e,effects:[]}:{nextState:{status:"idle"},effects:[]};case"clearQueuedResume":case"release":return{nextState:e,effects:[]};case"abort":return{nextState:{status:"idle"},effects:[{type:"abortActiveRun",abort:e.abort}]};default:throw new Error(`Unhandled running-state event: ${String(t)}`)}}(e,t);case"runningWithQueuedResume":return function(e,t){switch(t.type){case"startRun":return{nextState:{status:"runningWithQueuedResume",runId:t.runId,abort:t.abort,queuedResume:e.queuedResume},effects:[{type:"abortActiveRun",abort:e.abort}]};case"queueResume":return{nextState:Object.assign(Object.assign({},e),{queuedResume:t.mergeQueuedResume(e.queuedResume,t.queuedResume)}),effects:[]};case"runFinished":return t.runId!==e.runId?{nextState:e,effects:[]}:{nextState:{status:"running",runId:e.runId,abort:e.abort},effects:[{type:"startQueuedRun",sourceRunId:e.runId,queuedResume:e.queuedResume}]};case"clearQueuedResume":return{nextState:{status:"running",runId:e.runId,abort:e.abort},effects:[]};case"abort":return{nextState:{status:"idle"},effects:[{type:"abortActiveRun",abort:e.abort}]};case"release":return{nextState:e,effects:[]};default:throw new Error(`Unhandled runningWithQueuedResume-state event: ${String(t)}`)}}(e,t);default:return{nextState:e,effects:[]}}}(a,t);this.states.set(e,l),null===(n=(r=this.options).onStateChange)||void 0===n||n.call(r,{sessionId:e,previousState:a,nextState:l});for(const t of c)switch(t.type){case"abortActiveRun":null===(o=t.abort)||void 0===o||o.call(t);break;case"startQueuedRun":null===(i=(s=this.options).onQueuedRunReady)||void 0===i||i.call(s,{sessionId:e,sourceRunId:t.sourceRunId,queuedResume:t.queuedResume});break;default:throw new Error(`Unhandled lifecycle manager effect: ${String(t)}`)}const u=this.getState(e);"release"===t.type&&"idle"!==u.status&&this.releaseRequestedBySession.add(e),"idle"!==u.status||"release"!==t.type&&!this.releaseRequestedBySession.has(e)||(this.states.delete(e),this.runCounterBySession.delete(e),this.releaseRequestedBySession.delete(e))}}function kt(e){return"string"==typeof e&&e.trim().length>0}var Et=r("../proto/dist/generated/agent/v1/web_fetch_allowlist_precheck_exec_pb.js");const xt=A((e=>new T(e,j("webFetchAllowlistPrecheckArgs"),N("webFetchAllowlistPrecheckResult"))),((e,t)=>{t.register(new E(e,F("webFetchAllowlistPrecheckArgs"),$("webFetchAllowlistPrecheckResult")))}));var Ct=r("../proto/dist/generated/agent/v1/request_context_exec_pb.js"),_t=r("../proto/dist/generated/aiserver/v1/utils_pb.js");const Pt=e=>String(e).replace(/[\r\n]/g,""),Rt=(0,c.h)("ControlledConversationActionManager");class Tt{abortCallbacks=[];abortController=new AbortController;clientStream;abortStarted=!1;runActive=!1;unprocessedUserMessages=[];get signal(){return this.abortController.signal}constructor(){this.clientStream=(0,m.Jt)()}addAbortCallback(e){this.abortCallbacks.push(e)}abort(e,t){if(this.abortController.signal.aborted||this.abortStarted)return;const r=null==t?void 0:t.interruptedPendingToolCallResolutions;if(this.abortStarted=!0,!this.runActive){this.abortController.abort(e);for(const e of this.abortCallbacks)e();return void(this.abortCallbacks.length=0)}const n=this.abortController,o=[...this.abortCallbacks];this.abortCallbacks.length=0,this.submitConversationAction(new H.QF({action:{case:"cancelAction",value:new H.TT({reason:e,interruptedPendingToolCallResolutions:r})}})).catch((()=>{})).finally((()=>{n.abort(e);for(const e of o)e();if(this.abortController===n){const e=[...this.abortCallbacks];this.abortCallbacks.length=0;for(const t of e)t()}}))}async submitConversationAction(e){if("userMessageAction"===e.action.case){const t=e.action.value.userMessage;t&&this.unprocessedUserMessages.push(t)}await this.clientStream.write(e)}markMessageAsProcessed(e){this.unprocessedUserMessages=this.unprocessedUserMessages.filter((t=>t.messageId!==e.messageId))}requeueMessage(e){this.unprocessedUserMessages.some((t=>t.messageId===e.messageId))||this.unprocessedUserMessages.unshift(e)}getUnprocessedUserMessages(){return[...this.unprocessedUserMessages]}hasUnprocessedMessages(){return this.unprocessedUserMessages.length>0}close(){var e;null===(e=this.clientStream)||void 0===e||e.close()}resetStream(){var e;null===(e=this.clientStream)||void 0===e||e.close(),this.clientStream=(0,m.Jt)(),this.abortController=new AbortController,this.abortStarted=!1;for(const e of this.unprocessedUserMessages)this.clientStream.write(new H.QF({action:{case:"userMessageAction",value:new H.Vt({userMessage:e})}}))}async run(e,t){this.runActive=!0;try{for await(const r of this.clientStream)try{await t.write(r)}catch(t){Rt.error(e,"Error writing conversation action",t)}}finally{this.runActive=!1}}dispose(){}}(0,c.h)("RemoteConversationActionManager");const It=BigInt(0),At=BigInt(8),Ot=BigInt(16),Dt=BigInt(65535);function Mt(e){const t=e.trim().toLowerCase();return t.startsWith("[")&&t.endsWith("]")?t.slice(1,-1):t}function jt(e){const t=e.split(".");if(4!==t.length)return;let r=It;for(const e of t){if(!/^\d{1,3}$/.test(e))return;const t=Number(e);if(!Number.isInteger(t)||t<0||t>255)return;r=r<<At|BigInt(t)}return{version:4,value:r}}function Nt(e){if(0===e.length)return[];const t=[],r=e.split(":");for(let e=0;e<r.length;e++){const n=r[e];if(0===n.length)return;if(n.includes(".")){if(e!==r.length-1)return;const o=jt(n);if(!o)return;t.push(Number(o.value>>Ot&Dt)),t.push(Number(o.value&Dt))}else{if(!/^[0-9a-f]{1,4}$/i.test(n))return;t.push(Number.parseInt(n,16))}}return t}function $t(e){var t;return null!==(t=jt(e))&&void 0!==t?t:function(e){const t=Mt(e);if(0===t.length||t.includes(":::"))return;const r=t.indexOf("::");if(-1===r){const e=Nt(t);if(!e||8!==e.length)return;return{version:6,value:e.reduce(((e,t)=>e<<Ot|BigInt(t)),It)}}if(-1!==t.indexOf("::",r+1))return;const n=t.slice(0,r),o=t.slice(r+2),s=Nt(n),i=Nt(o);if(!s||!i)return;const a=s.length+i.length;return a>7?void 0:{version:6,value:[...s,...new Array(8-a).fill(0),...i].reduce(((e,t)=>e<<Ot|BigInt(t)),It)}}(e)}function Ft(e,t){const r=Mt(e),n=Mt(t);if("*"===n)return!0;if(n.includes("/"))return function(e,t){const r=t.lastIndexOf("/");if(r<=0||r===t.length-1)return!1;const n=$t(t.slice(0,r)),o=$t(e);if(!n||!o||n.version!==o.version)return!1;const s=Number(t.slice(r+1)),i=4===n.version?32:128;if(!Number.isInteger(s)||s<0||s>i)return!1;const a=BigInt(i-s);return o.value>>a==n.value>>a}(r,n);if(n.startsWith("*.")){const e=n.slice(2);return r===e||r.endsWith(`.${e}`)}return r===n}function Lt(e,t){const r=function(e){const t=e.trim();if(0===t.length)return;const r=t.includes("://")?t:`https://${t}`;try{return new URL(r)}catch(e){return}}(e);return!!r&&function(e,t){return t.some((t=>Ft(e,t)))}(r.hostname,t)}var Ut=r("../proto/dist/generated/agent/v1/ask_question_tool_pb.js"),Bt=r("../proto/dist/generated/agent/v1/create_plan_tool_pb.js"),Ht=r("../proto/dist/generated/agent/v1/pr_management_tool_pb.js"),Wt=r("../proto/dist/generated/agent/v1/replace_env_tool_pb.js"),zt=r("../proto/dist/generated/agent/v1/setup_vm_environment_tool_pb.js"),qt=r("../proto/dist/generated/agent/v1/generate_image_tool_pb.js"),Gt=r("../proto/dist/generated/agent/v1/mcp_auth_tool_pb.js"),Vt=r("../proto/dist/generated/agent/v1/switch_mode_tool_pb.js"),Jt=r("../proto/dist/generated/agent/v1/web_fetch_tool_pb.js"),Kt=r("../proto/dist/generated/agent/v1/web_search_tool_pb.js");Error;const Yt=e=>new H.Y5({id:e,result:{case:"webSearchRequestResponse",value:new Kt.lI({result:{case:"approved",value:new Kt.XJ}})}}),Zt=(e,t)=>new H.Y5({id:e,result:{case:"webSearchRequestResponse",value:new Kt.lI({result:{case:"rejected",value:new Kt.yc({reason:null!=t?t:""})}})}}),Xt=e=>new H.Y5({id:e,result:{case:"webFetchRequestResponse",value:new Jt.fS({result:{case:"approved",value:new Jt.Hs}})}}),Qt=(e,t)=>new H.Y5({id:e,result:{case:"webFetchRequestResponse",value:new Jt.fS({result:{case:"rejected",value:new Jt.m$({reason:null!=t?t:""})}})}}),er=(e,t)=>new H.Y5({id:e,result:{case:"askQuestionInteractionResponse",value:new H.zT({result:t})}}),tr=e=>new H.Y5({id:e,result:{case:"switchModeRequestResponse",value:new Vt.w$({result:{case:"approved",value:new Vt.q5}})}}),rr=(e,t)=>new H.Y5({id:e,result:{case:"switchModeRequestResponse",value:new Vt.w$({result:{case:"rejected",value:new Vt.rA({reason:null!=t?t:""})}})}}),nr=(e,t)=>new H.Y5({id:e,result:{case:"createPlanRequestResponse",value:new Bt.gz({result:t})}}),or=(e,t)=>new H.Y5({id:e,result:{case:"setupVmEnvironmentResult",value:t}}),sr=(e,t)=>new H.Y5({id:e,result:{case:"replaceEnvResult",value:t}}),ir=(e,t)=>new H.Y5({id:e,result:{case:"prManagementResult",value:t}}),ar=(e,t)=>new H.Y5({id:e,result:{case:"mcpAuthRequestResponse",value:new Gt.h({result:{case:"rejected",value:new Gt.OI({reason:null!=t?t:"Authentication was rejected"})}})}}),lr=(e,t)=>new H.Y5({id:e,result:{case:"generateImageRequestResponse",value:new qt.vW({result:{case:"approved",value:new qt.l3({description:null!=t?t:""})}})}});Error;const cr=e=>new H.Uq({message:{case:"shellOutputDelta",value:new H.Nn({event:e})}});var ur=r("../agent-kv/dist/index.js"),dr=r("../proto/dist/generated/agent/v1/agent_service_pb.js"),pr=r("../proto/dist/generated/agent/v1/mcp_pb.js"),hr=r("@bufbuild/protobuf"),mr=r("@connectrpc/connect"),fr=r("../../node_modules/.pnpm/@connectrpc+connect@1.6.1_patch_hash=a4b9a5e69295313832387f25b708426bcf53041a2f50bc7b95_d0a2f6c9e28298af3d10922a7e4db69f/node_modules/@connectrpc/connect/dist/esm/protocol/async-iterable.js");class gr extends Error{cause;requestId;displayInfo;constructor(e,t={}){super(e),Object.setPrototypeOf(this,new.target.prototype),this.cause=t.cause,this.requestId=t.requestId,this.displayInfo=t.displayInfo}get name(){return this.kind}}class vr extends gr{get kind(){return"RetriableError"}}class yr extends gr{action;constructor(e,t,r={}){super(e,r),this.action=t}get kind(){return"ActionRequiredError"}}class wr extends gr{get kind(){return"NonRetriableError"}}class br extends gr{get kind(){return"CancelledError"}}const Sr=new Set([_t.yM.NOT_LOGGED_IN,_t.yM.AGENT_REQUIRES_LOGIN,_t.yM.AUTH_TOKEN_NOT_FOUND,_t.yM.AUTH_TOKEN_EXPIRED,_t.yM.INVALID_AUTH_ID,_t.yM.UNAUTHORIZED,_t.yM.GITHUB_NO_USER_CREDENTIALS,_t.yM.GITHUB_USER_NO_ACCESS]),kr=new Set([_t.yM.FREE_USER_USAGE_LIMIT,_t.yM.FREE_USER_RATE_LIMIT_EXCEEDED,_t.yM.PRO_USER_ONLY,_t.yM.PRO_USER_USAGE_LIMIT,_t.yM.PRO_USER_RATE_LIMIT_EXCEEDED,_t.yM.RATE_LIMITED,_t.yM.RATE_LIMITED_CHANGEABLE,_t.yM.GENERIC_RATE_LIMIT_EXCEEDED]),Er=new Set([_t.yM.USAGE_PRICING_REQUIRED,_t.yM.USAGE_PRICING_REQUIRED_CHANGEABLE]),xr=new Set([_t.yM.BAD_API_KEY,_t.yM.BAD_USER_API_KEY,_t.yM.OUTDATED_CLIENT]),Cr=new Set([_t.yM.USER_ABORTED_REQUEST,_t.yM.DEBOUNCED]),_r=new Set([_t.yM.CUSTOM_MESSAGE]),Pr=["NGHTTP2","ECONNRESET","ECONNREFUSED","ETIMEDOUT","EPIPE","socket hang up","Premature close","ERR_STREAM","protocol error","http/2 stream","ERR_HTTP2_SESSION_ERROR","Session closed with error code","connection aborted"];function Rr(e,t={}){const{requestId:r}=t;if(e instanceof gr)return e;if(function(e){return null!==e&&"object"==typeof e&&"code"in e&&"name"in e&&"ConnectError"===e.name}(e))return function(e,t){var r,n,o,s,i,a,l;const c=function(e){var t,r;const n=e.findDetails(_t.vj);if(n.length>0)return n[0];try{const n=null===(r=null===(t=e.cause)||void 0===t?void 0:t.findDetails)||void 0===r?void 0:r.call(t,_t.vj);return null==n?void 0:n[0]}catch(e){return}}(e),u={cause:e,requestId:t,displayInfo:{title:null===(r=null==c?void 0:c.details)||void 0===r?void 0:r.title,detail:null===(n=null==c?void 0:c.details)||void 0===n?void 0:n.detail,isRetryable:null===(o=null==c?void 0:c.details)||void 0===o?void 0:o.isRetryable,connectCode:e.code,errorCode:null==c?void 0:c.error,errorDetails:c}};if(e.code===mr.Code.Canceled||e.code===mr.Code.Aborted)return Ir(e)?new vr(e.message,u):new br(e.message,u);if(void 0!==(null==c?void 0:c.error)){const t=c.error;if(Cr.has(t))return new br(Tr(e,c),u);const r=null===(i=null===(s=c.details)||void 0===s?void 0:s.analyticsMetadata)||void 0===i?void 0:i.actionRequired;if(void 0!==r&&""!==r)return new yr(Tr(e,c),r,u);if(Sr.has(t))return new yr(Tr(e,c),"login",u);if(kr.has(t))return new yr(Tr(e,c),"upgrade",u);if(Er.has(t))return new yr(Tr(e,c),"payment",u);if(xr.has(t))return new yr(Tr(e,c),"config",u);if(_r.has(t)&&!0!==(null===(a=c.details)||void 0===a?void 0:a.isRetryable))return new wr(Tr(e,c),u);if(!1===(null===(l=c.details)||void 0===l?void 0:l.isRetryable))return new wr(Tr(e,c),u)}return e.code===mr.Code.Unauthenticated?new yr(e.message,"login",u):new vr(e.message,u)}(e,r);if(e instanceof Error){if("AbortError"===e.name)return new br(e.message,{cause:e,requestId:r});if(Ir(e))return new vr(e.message,{cause:e,requestId:r})}const n=e instanceof Error?e.message:String(e);return new vr(n,{cause:e instanceof Error?e:void 0,requestId:r})}function Tr(e,t){if(null==t?void 0:t.details){const{title:r,detail:n}=t.details;return r&&n?`${r} ${n}`:r||n||e.message}return e.message}function Ir(e){let t=e;for(;t instanceof Error;){const e=`${t.name}: ${t.message}`;if(Pr.some((t=>e.includes(t))))return!0;const r=t.code;if("string"==typeof r&&Pr.some((e=>r.includes(e))))return!0;t=t.cause}return!1}function Ar(e){return e.cause instanceof Error?Ir(e.cause):Pr.some((t=>e.message.includes(t)))}var Or=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t},Dr=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});class Mr extends Error{constructor(e){super(e),this.name="LostConnection"}}class jr{serverStream;clientStream;controlledExecManager;constructor(e,t,r){this.serverStream=e,this.clientStream=t,this.controlledExecManager=r}async run(e){const t={stack:[],error:void 0,hasError:!1};try{Or(t,(0,c.VI)(e.withName("ClientExecController.run")),!1);const r=[];try{for await(const t of this.serverStream){if(t instanceof dr.Nv){this.controlledExecManager.handleControlMessage(t);continue}const n=(async()=>{var r;const n={stack:[],error:void 0,hasError:!1};try{let o,s;if(t.spanContext){const n=t.spanContext;o=(0,c.V5)({traceId:n.traceId,spanId:n.spanId,traceFlags:null!==(r=n.traceFlags)&&void 0!==r?r:1},"exec.handle",e),s=(0,c.fU)(o)}else o=e;Or(n,s?new c.r2(o,s):void 0,!1);const i=this.controlledExecManager.handle(o,t);for await(const e of i)await this.clientStream.write(e)}catch(e){n.error=e,n.hasError=!0}finally{Dr(n)}})();r.push(n)}await Promise.all(r)}catch(e){if(e instanceof mr.ConnectError&&"protocol error: missing EndStreamResponse"===e.rawMessage)throw new Mr(e.message);if(e instanceof mr.ConnectError&&e.code===mr.Code.Aborted){const t=e.cause;if(t instanceof Error&&"code"in t&&"string"==typeof t.code&&t.code.includes("ERR_STREAM_WRITE_AFTER_END"))throw new Mr(e.message)}else{if(e instanceof m.W2)throw new Mr(e.message);if(e instanceof mr.ConnectError&&e.code===mr.Code.Internal){const t=e.cause;if(t instanceof Error&&t.message.includes("NGHTTP2_PROTOCOL_ERROR"))throw new Mr(e.message)}}}}catch(e){t.error=e,t.hasError=!0}finally{Dr(t)}}}var Nr=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const $r=(0,c.h)("ClientInteractionController");class Fr{interactionStream;interactionListener;queryResponseStream;constructor(e,t,r){this.interactionStream=e,this.interactionListener=t,this.queryResponseStream=r}async run(e){const t={stack:[],error:void 0,hasError:!1};try{const r=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t}(t,(0,c.VI)(e.withName("ClientInteractionController.run")),!1);e=r.ctx;let n,o=Promise.resolve();for await(const t of this.interactionStream)"interactionQuery"===t.case?this.handleInteractionQuery(e,t.value):"interactionUpdate"===t.case&&(o=o.then((()=>this.handleInteractionUpdate(e,t.value))).catch((t=>{$r.error(e,"Error handling interaction update",t),null!=n||(n=t)})));if(await o,void 0!==n)throw n}catch(e){t.error=e,t.hasError=!0}finally{Nr(t)}}async handleInteractionUpdate(e,t){await this.interactionListener.sendUpdate(e,t)}handleInteractionQuery(e,t){this.interactionListener.query(e,t).then((e=>this.queryResponseStream.write(e))).catch((t=>{$r.error(e,"Error handling interaction query",t)}))}}const Lr=(0,c.h)("@anysphere/agent-client:stall-detector"),Ur=(0,p.Pu)("agent_client.stream.stall.count",{description:"Number of bidirectional stream stalls detected",labelNames:["activity_type","message_type"]}),Br=(0,p.v5)("agent_client.stream.stall.duration_ms",{description:"Duration of stream stalls in milliseconds",labelNames:["activity_type"]}),Hr=(0,p.Pu)("agent_client.stream.did_stall",{description:"Number of streams that experienced at least one stall"}),Wr=(0,p.Pu)("agent_client.stream.total",{description:"Total number of streams monitored"});class zr{handlers=new Map;track(e,t){return this.handlers.set(e,{name:e,state:"started",startedAt:Date.now()}),t.then((t=>{const r=this.handlers.get(e);return r&&(r.state="completed",r.endedAt=Date.now()),t})).catch((t=>{const r=this.handlers.get(e);throw r&&(r.state="errored",r.endedAt=Date.now(),r.error=t instanceof Error?t.message:String(t)),t}))}getHandlerStates(){var e;const t=Date.now(),r={};for(const[n,o]of this.handlers)r[n]={state:o.state,durationMs:(null!==(e=o.endedAt)&&void 0!==e?e:t)-o.startedAt,error:o.error};return r}}class qr{timer;advisoryTimer;heartbeatOnlyTimer;lastActivityTime=Date.now();lastMeaningfulActivityTime=Date.now();hasLogged=!1;hasLoggedAdvisory=!1;hasLoggedHeartbeatOnly=!1;hasEverStalled=!1;lastClientSentHeartbeatAt;lastServerSentHeartbeatAt;streamEndedAt;abortedAt;disposedAt;lastActivity;lastInboundMessage;lastOutboundMessage;activityHistory=[];thresholdMs;advisoryThresholdMs;heartbeatOnlyThresholdMs;onStall;onStallCallback;handlerTracker;constructor(e,t,r){var n;this.ctx=e,"number"==typeof t?(this.thresholdMs=t,this.advisoryThresholdMs=void 0,this.heartbeatOnlyThresholdMs=3*t,this.onStall=r,this.onStallCallback=void 0,this.handlerTracker=void 0):(this.thresholdMs=t.thresholdMs,this.advisoryThresholdMs=t.advisoryThresholdMs,this.heartbeatOnlyThresholdMs=null!==(n=t.heartbeatOnlyThresholdMs)&&void 0!==n?n:3*t.thresholdMs,this.onStall=t.onStall,this.onStallCallback=t.onStallCallback,this.handlerTracker=t.handlerTracker),this.startTimer(),this.startAdvisoryTimer(),this.startHeartbeatOnlyTimer(),Wr.increment(this.ctx,1),e.signal.addEventListener("abort",(()=>{this.trackActivity("ctx.signal","abort"),this.abortedAt=Date.now(),this.emitLifecycleLog("[NAL client stall detector] Stream aborted while stall detector active","aborted")}))}ctx;trackActivity(e,t){var r;const n={type:e,messageType:t};this.lastActivity=n,"inbound_message"===e?this.lastInboundMessage=n:"outbound_write"===e&&(this.lastOutboundMessage=n);const o=this.activityHistory.at(-1);(null==o?void 0:o.type)===e&&o.messageType===t?o.repeat=(null!==(r=o.repeat)&&void 0!==r?r:1)+1:(this.activityHistory.push(n),this.activityHistory.length>10&&this.activityHistory.shift())}reset(e="inbound_message",t,r=!0){if(this.trackActivity(e,t),"inbound_message"===e){const e=this.hasLogged,t=this.hasLoggedAdvisory,n=this.hasLoggedHeartbeatOnly;e&&(this.hasLogged=!1,this.emitLogAndMetric()),n&&r&&(this.hasLoggedHeartbeatOnly=!1),t&&(this.hasLoggedAdvisory=!1),this.lastActivityTime=Date.now(),r&&(this.lastMeaningfulActivityTime=Date.now()),void 0===this.timer&&this.startTimer(),void 0===this.advisoryTimer&&this.startAdvisoryTimer(),r&&void 0===this.heartbeatOnlyTimer&&this.startHeartbeatOnlyTimer()}}onStreamEnded(){this.trackActivity("stream","ended"),this.streamEndedAt=Date.now()}onClientSentHeartbeat(){this.lastClientSentHeartbeatAt=Date.now()}onServerSentHeartbeat(){this.lastServerSentHeartbeatAt=Date.now()}startTimer(){if(this.thresholdMs<=0||void 0!==this.timer)return;const e=()=>{const t=this.thresholdMs-(Date.now()-this.lastActivityTime);if(t<=0)return this.timer=void 0,void this.onStallDetected("no_activity");this.timer=setTimeout(e,t)};this.timer=setTimeout(e,this.thresholdMs)}startAdvisoryTimer(){if(void 0===this.advisoryThresholdMs||this.advisoryThresholdMs<=0||void 0!==this.advisoryTimer)return;const e=this.advisoryThresholdMs,t=()=>{const r=e-(Date.now()-this.lastActivityTime);if(r<=0)return this.advisoryTimer=void 0,void this.onAdvisoryDetected();this.advisoryTimer=setTimeout(t,r)};this.advisoryTimer=setTimeout(t,e)}startHeartbeatOnlyTimer(){if(this.thresholdMs<=0||this.heartbeatOnlyThresholdMs<=0||void 0!==this.heartbeatOnlyTimer)return;const e=()=>{const t=this.heartbeatOnlyThresholdMs-(Date.now()-this.lastMeaningfulActivityTime);if(t<=0)return this.heartbeatOnlyTimer=void 0,void this.onStallDetected("heartbeat_only");this.heartbeatOnlyTimer=setTimeout(e,t)};this.heartbeatOnlyTimer=setTimeout(e,this.heartbeatOnlyThresholdMs)}buildLogMetadata(e){var t;const r=this.ctx.get(Yr),n=Object.assign({},e);(null===(t=null==r?void 0:r.modelDetails)||void 0===t?void 0:t.displayName)&&(n.model_name=r.modelDetails.displayName),this.abortedAt&&(n.aborted_ago_ms=Date.now()-this.abortedAt),this.disposedAt&&(n.disposed_ago_ms=Date.now()-this.disposedAt),this.lastClientSentHeartbeatAt&&(n.last_client_sent_heartbeat_ago_ms=Date.now()-this.lastClientSentHeartbeatAt),this.lastServerSentHeartbeatAt&&(n.last_server_sent_heartbeat_ago_ms=Date.now()-this.lastServerSentHeartbeatAt),this.streamEndedAt&&(n.stream_ended_ago_ms=Date.now()-this.streamEndedAt),this.lastInboundMessage&&(n.last_inbound_message_type=this.lastInboundMessage.messageType),this.lastOutboundMessage&&(n.last_outbound_message_type=this.lastOutboundMessage.messageType);const o=[];let s;for(let e=this.activityHistory.length-1;e>=0;e--){const{type:t,messageType:r,repeat:n}=this.activityHistory[e];s!==t&&(s?o.push(`[${t}]`):o.push(`[${t}] (MOST RECENT)`),s=t),o.push(`${r}${n?` (x${n})`:""}`)}return n.activities=o.join("\n"),{reqId:null==r?void 0:r.requestId,stall:n}}onAdvisoryDetected(){if(this.hasLogged||this.hasLoggedAdvisory)return;if(void 0===this.advisoryThresholdMs||this.advisoryThresholdMs<=0)return;const e=Date.now()-this.lastActivityTime;e<this.advisoryThresholdMs||(this.hasLoggedAdvisory=!0,this.reportAdvisory(e,this.advisoryThresholdMs))}reportAdvisory(e,t){try{const r=this.buildLogMetadata({duration_ms:e,threshold_ms:t,stall_type:"advisory_no_activity"});Lr.warn(this.ctx,"[NAL client stall detector] Advisory stall detected - no activity for advisory threshold period",r)}catch(e){console.error("Error logging advisory stall:",e)}}onStallDetected(e){if("heartbeat_only"===e){const t=Date.now(),r=t-this.lastActivityTime,n=t-this.lastMeaningfulActivityTime;if(r<this.thresholdMs&&n>=this.heartbeatOnlyThresholdMs){if(this.hasLoggedHeartbeatOnly)return;this.hasLoggedHeartbeatOnly=!0,this.reportStall(e,n)}return}if(this.hasLogged)return;this.hasLogged=!0,this.hasLoggedAdvisory=!0;const t=Date.now()-this.lastActivityTime;this.reportStall(e,t)}reportStall(e,t){var r,n,o,s,i;const a=this.lastActivity,l=this.lastInboundMessage,c=this.lastOutboundMessage,u=this.ctx.get(Yr);try{const o=this.buildLogMetadata({duration_ms:t,threshold_ms:"heartbeat_only"===e?this.heartbeatOnlyThresholdMs:this.thresholdMs,stall_type:e}),d="heartbeat_only"===e?"[NAL client stall detector] Stream receiving heartbeats only - no meaningful data for threshold period":"[NAL client stall detector] Bidirectional stream stall detected - no activity for threshold period";if(Lr.warn(this.ctx,d,o),Ur.increment(this.ctx,1,{activity_type:null!==(s=null==a?void 0:a.type)&&void 0!==s?s:"unknown",message_type:null!==(i=null==a?void 0:a.messageType)&&void 0!==i?i:"unknown"}),this.hasEverStalled||(this.hasEverStalled=!0,Hr.increment(this.ctx,1)),this.onStallCallback){const t=Date.now(),o={type:e,lastActivityAgoMs:t-this.lastActivityTime,lastMeaningfulActivityAgoMs:t-this.lastMeaningfulActivityTime,lastActivityType:null==a?void 0:a.messageType,lastInboundMessageType:null==l?void 0:l.messageType,lastOutboundMessageType:null==c?void 0:c.messageType,requestId:null==u?void 0:u.requestId,modelName:null===(r=null==u?void 0:u.modelDetails)||void 0===r?void 0:r.displayName,streamEnded:void 0!==this.streamEndedAt,aborted:void 0!==this.abortedAt,lastServerHeartbeatAgoMs:this.lastServerSentHeartbeatAt?t-this.lastServerSentHeartbeatAt:void 0,lastClientHeartbeatAgoMs:this.lastClientSentHeartbeatAt?t-this.lastClientSentHeartbeatAt:void 0,thresholdMs:"heartbeat_only"===e?this.heartbeatOnlyThresholdMs:this.thresholdMs,handlers:null===(n=this.handlerTracker)||void 0===n?void 0:n.getHandlerStates()};try{this.onStallCallback(o)}catch(e){console.error("Error in stall callback:",e)}}}catch(e){console.error("Error in stall detection:",e)}try{null===(o=this.onStall)||void 0===o||o.call(this)}catch(e){console.error("Error in onStall callback:",e)}}emitLifecycleLog(e,t){const r=Date.now()-this.lastActivityTime;try{const n=this.buildLogMetadata({duration_ms:r,event_type:t});Lr.info(this.ctx,e,n)}catch(e){console.error("Error logging stream lifecycle:",e)}}emitLogAndMetric(){var e,t;const r=Date.now()-this.lastActivityTime;this.emitLifecycleLog("[NAL client stall detector] Stream activity resumed after stall","recovered"),Br.histogram(this.ctx,r,{activity_type:null!==(t=null===(e=this.lastActivity)||void 0===e?void 0:e.type)&&void 0!==t?t:"unknown"})}[Symbol.dispose](){void 0!==this.timer&&(clearTimeout(this.timer),this.timer=void 0),void 0!==this.advisoryTimer&&(clearTimeout(this.advisoryTimer),this.advisoryTimer=void 0),void 0!==this.heartbeatOnlyTimer&&(clearTimeout(this.heartbeatOnlyTimer),this.heartbeatOnlyTimer=void 0),this.trackActivity("disposed","disposed"),this.disposedAt=Date.now(),this.emitLifecycleLog("[NAL client stall detector] Stream stall detector disposed","disposed")}}const Gr=(0,c.h)("@anysphere/agent-client:turn-runner");async function Vr(e,t,r,n){const o=r?100:1e3,s=null!=n?n:Math.min(o*Math.pow(2,e),6e4),i=void 0!==n?0:.2*s*Math.random();await new Promise(((e,r)=>{if(null==t?void 0:t.aborted)return void r(new br("Cancelled during backoff"));const n=setTimeout((()=>{null==t||t.removeEventListener("abort",o),e()}),s+i);function o(){clearTimeout(n),r(new br("Cancelled during backoff"))}null==t||t.addEventListener("abort",o,{once:!0})}))}var Jr=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t},Kr=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const Yr=(0,c.cF)(Symbol("agentStreamMetadata"),void 0),Zr=(0,c.h)("@anysphere/agent-client:abort"),Xr=(0,c.h)("@anysphere/agent-client:retry"),Qr=e=>{var t,r;const n=[];switch(n.push(e.message.case),e.message.case){case"conversationAction":n.push(e.message.value.action.case);break;case"execClientMessage":case"execClientControlMessage":case"kvClientMessage":case"execServerMessage":case"execServerControlMessage":n.push(e.message.value.message.case);break;case"interactionResponse":n.push(e.message.value.result.case);break;case"interactionUpdate":switch(n.push(e.message.value.message.case),e.message.value.message.case){case"partialToolCall":case"toolCallCompleted":case"toolCallStarted":n.push(null===(t=e.message.value.message.value.toolCall)||void 0===t?void 0:t.tool.case);break;case"toolCallDelta":n.push(null===(r=e.message.value.message.value.toolCallDelta)||void 0===r?void 0:r.delta.case)}break;case"interactionQuery":n.push(e.message.value.query.case)}return n.filter((e=>void 0!==e)).join(":")};async function en(e,t,r){for await(const n of t)switch(n.event.case){case"stdout":await r.sendUpdate(e,cr({case:"stdout",value:new Xe.o0({data:n.event.value.data})}));break;case"stderr":await r.sendUpdate(e,cr({case:"stderr",value:new Xe.Db({data:n.event.value.data})}));break;case"exit":await r.sendUpdate(e,cr({case:"exit",value:new Xe.vb({code:n.event.value.code,aborted:n.event.value.aborted})}))}}function tn(e,t,r){return{sendUpdate:async(n,o)=>{var s;if(t===r())return e.sendUpdate(n,o);"toolCallCompleted"===(null===(s=o.message)||void 0===s?void 0:s.case)&&Xr.warn(n,"nal.await_stall.stale_completion_dropped",{attemptGen:t,currentGen:r()})},query:async(n,o)=>{if(t!==r())throw new br("Stale query from previous attempt");return e.query(n,o)},enqueuePostTurnEndedWork:e.enqueuePostTurnEndedWork?t=>e.enqueuePostTurnEndedWork(t):void 0,flushPostTurnEndedWork:e.flushPostTurnEndedWork?t=>e.flushPostTurnEndedWork(t):void 0}}const rn=e=>"number"==typeof e&&Number.isFinite(e)?e:void 0;function nn(e){return null!==e&&"object"==typeof e&&"code"in e&&"name"in e&&"ConnectError"===e.name}function on(e){if(null!==e&&"object"==typeof e&&"cause"in e)return e.cause}function sn(e){if(null===e||"object"!=typeof e||!("code"in e))return;const t=e.code;return"string"==typeof t||"number"==typeof t?t:void 0}function an(e){return e instanceof Error?e.name:void 0}function ln(e){const t={errorName:an(e)};let r=e;for(let e=0;e<10&&void 0!==r;e++){if(nn(r)){const e=on(r),n=sn(e),o=an(e);return Object.assign(Object.assign({},t),{underlyingConnectError:{code:r.code,codeName:mr.Code[r.code],cause:void 0!==n||void 0!==o?{code:n,name:o}:void 0}})}r=on(r)}return t}function cn(e,t,r,n,o,s,i,a,l){const c=s||i,u=l?2:10,d=e instanceof gr?e:Rr(e,{requestId:o});return t?c?!i&&n>=u?{action:"throw",error:new vr("Connection stalled repeatedly",{cause:d.cause,requestId:o,displayInfo:{title:"Connection stalled",detail:`The connection stalled ${n} times. Please check your network connection and try again.`,isRetryable:!0}})}:{action:"retry",countAsServerError:!1,countAsTransportError:!0}:{action:"throw",error:new vr("Connection stalled",{cause:d.cause,requestId:o,displayInfo:{title:"Connection stalled",detail:"The connection stalled. Please try again.",isRetryable:!0}})}:d instanceof br&&!a&&function(e){let t=e.cause;for(let e=0;e<10&&void 0!==t;e++){if(t instanceof Error&&"AbortError"===t.name)return!0;if(nn(t)&&(t.code===mr.Code.Canceled||t.code===mr.Code.Aborted))return!0;t=on(t)}return!1}(d)?c?!i&&n>=u?{action:"throw",error:new vr("Connection failed repeatedly",{cause:d.cause,requestId:o,displayInfo:{title:"Connection failed",detail:`The connection failed ${n} times. Please check your network connection and try again.`,isRetryable:!0}})}:{action:"retry",countAsServerError:!1,countAsTransportError:!0}:{action:"throw",error:d}:d instanceof br||d instanceof yr||d instanceof wr?{action:"throw",error:d}:d instanceof vr&&Ar(d)?c?!i&&n>=u?{action:"throw",error:new vr("Connection failed repeatedly",{cause:d.cause,requestId:o,displayInfo:{title:"Connection failed",detail:`The connection failed ${n} times. Please check your network connection and try again.`,isRetryable:!0}})}:{action:"retry",countAsServerError:!1,countAsTransportError:!0}:{action:"throw",error:d}:c?!i&&r>=3?{action:"throw",error:d}:{action:"retry",countAsServerError:!0,countAsTransportError:!1}:{action:"throw",error:d}}class un{client;endpointUrl;constructor(e,t){this.client=e,this.endpointUrl=t}async run(e,t,r,n,o,s,i,a,l,c,u){return!0===u.useSharedTurnRunner?this.runWithSharedTurnRunner(e,t,r,n,o,s,i,a,l,c,u):this.runWithLegacyRetryLoop(e,t,r,n,o,s,i,a,l,c,u)}async runWithSharedTurnRunner(e,t,r,n,o,s,i,a,l,u,d){var p,h;const m={stack:[],error:void 0,hasError:!1};try{const f=null!==(h=d.generationUUID)&&void 0!==h?h:crypto.randomUUID(),g={value:!1},v={sources:[],abortReasonName:void 0,abortReasonMessage:void 0};let y=0,w=0;try{null===(p=d.onNetworkPhaseStart)||void 0===p||p.call(d)}catch(t){Xr.warn(e,"onNetworkPhaseStart callback failed",{error:String(t)})}const b=Jr(m,(0,c.VI)(e.withName("networkPhase")),!1);e=b.ctx,await async function(e){var t,r,n,o,s,i,a,l,c,u,d,p,h,m,f,g,v,y;const{ctx:w,checkpointHandler:b,runOptions:S,requestId:k,hooks:E,cancellation:x}=e,C=k,_=null!==(m=e.backoff)&&void 0!==m?m:(e,t)=>Vr(e,t,S.isRunningInTest,S.fixedRetryDelayMs);let P,R=e.state,T=e.action,I=0,A=k,O=0,D=0,M=!1;const j=()=>{var e;M&&(null===(e=S.onConnectionStateChange)||void 0===e||e.call(S,{state:"connected"}),M=!1)},N={handleCheckpoint:async(e,t)=>{await b.handleCheckpoint(e,t),P=t,j()},getLatestCheckpoint:()=>b.getLatestCheckpoint()};for(;;){if(w.canceled)throw x.toCancelledError(void 0,A);if(P=void 0,null===(t=E.beginAttempt)||void 0===t||t.call(E,{attempt:I,originalRequestId:C}),I>0?(A=crypto.randomUUID(),await(null===(r=S.onRetryStarting)||void 0===r?void 0:r.call(S,I,{actionCase:T.action.case,conversationState:R,isResume:"resumeAction"===T.action.case,attemptRequestId:A})),e.logging&&Gr.info(w,`[${e.logging.tag}] Retrying attempt ${I}`,{attempt:I,actionCase:T.action.case,requestId:A,originalRequestId:C}),"resumeAction"===T.action.case&&(await(null===(n=S.onRetryResuming)||void 0===n?void 0:n.call(S,{checkpointState:R,nextAttempt:I,reason:"resume_action"})),e.logging&&Gr.info(w,`[${e.logging.tag}] Resuming from checkpoint`,{nextAttempt:I,reason:"resume_action"}))):(e.logging&&Gr.info(w,`[${e.logging.tag}] Initial request`,{attempt:I,actionCase:T.action.case,requestId:A}),!0===e.notifyInitialResume&&"resumeAction"===T.action.case&&(await(null===(o=S.onRetryResuming)||void 0===o?void 0:o.call(S,{checkpointState:R,nextAttempt:I,reason:"resume_action"})),e.logging&&Gr.info(w,`[${e.logging.tag}] Resuming from checkpoint`,{nextAttempt:I,reason:"resume_action"}))),w.canceled)throw x.toCancelledError(void 0,A);try{return await E.runAttempt({state:R,action:T,checkpointHandler:N,attempt:I,attemptRequestId:A,notifyConnected:j}),j(),void(e.logging&&Gr.info(w,`[${e.logging.tag}] Request successful`,{attempt:I,actionCase:T.action.case,requestId:A,originalRequestId:C}))}catch(t){if(!0===(null===(s=x.shortCircuit)||void 0===s?void 0:s.call(x,t)))throw x.toCancelledError(t,A);const r=!0===(null===(i=S.endlessRetries)||void 0===i?void 0:i.call(S)),n=E.classify(t,{attempt:I,attemptRequestId:A,originalRequestId:C,serverErrorRetries:O,transportErrorRetries:D,endlessRetries:r});if(e.logging){const o="retry"===n.action?`RETRY (countAsServerError=${n.countAsServerError}, countAsTransportError=${n.countAsTransportError})`:`THROW ${n.error.kind}`;Gr.warn(w,`[AGENT_ERROR_DIAGNOSTICS] requestId=${A} originalRequestId=${C} decision=${o}`,Object.assign({decision:o,willRetry:"retry"===n.action,enableAgentRetries:null!==(f=S.enableAgentRetries)&&void 0!==f&&f,endlessRetries:r,isRunningInTest:null!==(g=S.isRunningInTest)&&void 0!==g&&g,serverErrorRetries:O,transportErrorRetries:D,attempt:I,requestId:A,originalRequestId:C},null===(l=(a=e.logging).diagnostics)||void 0===l?void 0:l.call(a,t)))}if("throw"===n.action){if(0===I){const t={attempt:0,actionCase:T.action.case,error:n.error,requestId:A,originalRequestId:C,enableAgentRetries:!0===S.enableAgentRetries,endlessRetries:r,stallAborted:!1,abortSources:[]};try{await(null===(c=S.onErrorNotRetried)||void 0===c?void 0:c.call(S,null!==(v=null===(u=E.buildNonRetriedErrorInfo)||void 0===u?void 0:u.call(E,t))&&void 0!==v?v:t))}catch(t){e.logging&&Gr.warn(w,`[${e.logging.tag}] onErrorNotRetried callback failed`,{error:String(t),requestId:A,originalRequestId:C})}}throw e.logging&&Gr.warn(w,`[${e.logging.tag}] Error not retryable`,Object.assign(Object.assign({attempt:I,actionCase:T.action.case},!0===e.logging.includeErrorObjects?{error:n.error}:{errorName:n.error.name}),{serverErrorRetries:O,transportErrorRetries:D})),n.error}const o=I+1;null===(d=S.onConnectionStateChange)||void 0===d||d.call(S,{state:"reconnecting",attempt:o,trigger:null!==(y=null===(p=E.reconnectTrigger)||void 0===p?void 0:p.call(E,t,n,{originalRequestId:C,failedAttemptRequestId:A,nextAttempt:o}))&&void 0!==y?y:{originatingRequestId:C,attemptRequestId:A}}),M=!0,n.countAsServerError&&O++,n.countAsTransportError&&D++,I=o,void 0!==P&&(R=P,T=new H.QF({action:{case:"resumeAction",value:new H.qK}}),null===(h=E.onResumeFromCheckpoint)||void 0===h||h.call(E)),await _(I,w.signal)}}}({ctx:e,state:t,action:r,checkpointHandler:l,runOptions:d,requestId:f,notifyInitialResume:!0,logging:{tag:"nal_agent_retries",includeErrorObjects:!0,diagnostics:e=>Object.assign({stallAborted:g.value,abortSources:[...v.sources],abortReasonName:v.abortReasonName},ln(e))},cancellation:{toCancelledError:()=>new br("Request cancelled")},hooks:{beginAttempt:()=>{g.value=!1,v.sources=[],v.abortReasonName=void 0,v.abortReasonMessage=void 0,w=++y},runAttempt:async({state:t,action:r,checkpointHandler:l,attempt:c,attemptRequestId:p,notifyConnected:h})=>{const m=tn(o,w,(()=>y));await this.runInternal(e,t,r,n,m,s,i,a,l,u,d,p,f,g,v,h,c)},classify:(e,t)=>{var r;return cn(e,g.value,t.serverErrorRetries,t.transportErrorRetries,t.attemptRequestId,null!==(r=d.enableAgentRetries)&&void 0!==r&&r,t.endlessRetries,v.sources.length>0,d.isRunningInTest)},buildNonRetriedErrorInfo:e=>{var t;return Object.assign(Object.assign({},e),{enableAgentRetries:null!==(t=d.enableAgentRetries)&&void 0!==t&&t,stallAborted:g.value,abortSources:[...v.sources],abortReasonName:v.abortReasonName,abortReasonMessage:v.abortReasonMessage})},reconnectTrigger:(e,t,r)=>{var n,o,s;const i=ln(e),a=e instanceof gr?e:Rr(e,{requestId:r.failedAttemptRequestId});return{errorClass:a.name,connectCode:null===(n=i.underlyingConnectError)||void 0===n?void 0:n.code,connectCodeName:null===(o=i.underlyingConnectError)||void 0===o?void 0:o.codeName,errorCode:null===(s=a.displayInfo)||void 0===s?void 0:s.errorCode,countAsServerError:t.countAsServerError,countAsTransportError:t.countAsTransportError,stallAborted:g.value,originatingRequestId:r.originalRequestId,attemptRequestId:r.failedAttemptRequestId,endpointUrl:this.endpointUrl}},onResumeFromCheckpoint:()=>a.resetStream()}})}catch(e){m.error=e,m.hasError=!0}finally{Kr(m)}}async runWithLegacyRetryLoop(e,t,r,n,o,s,i,a,l,u,d){var p,h,m,f,g,v,y,w,b,S,k,E,x;const C={stack:[],error:void 0,hasError:!1};try{const _=null!==(w=d.generationUUID)&&void 0!==w?w:crypto.randomUUID();let P=_;const{onConnectionStateChange:R}=d;let T=t,I=r,A=0,O=0,D=0;const M={value:!1},j={value:!1},N={value:!1},$={sources:[],abortReasonName:void 0,abortReasonMessage:void 0},F=(e,t)=>{null==R||R({state:"reconnecting",attempt:e,trigger:t}),M.value=!0},L=()=>{M.value&&(null==R||R({state:"connected"}),M.value=!1)},U=()=>{if(!N.value)return;const e=l.getLatestCheckpoint();e&&(T=e,I=new H.QF({action:{case:"resumeAction",value:new H.qK}}),a.resetStream())},B={handleCheckpoint:async(e,t)=>(N.value=!0,l.handleCheckpoint(e,t)),getLatestCheckpoint:()=>l.getLatestCheckpoint()};let W=0;try{null===(p=d.onNetworkPhaseStart)||void 0===p||p.call(d)}catch(t){Xr.warn(e,"onNetworkPhaseStart callback failed",{error:String(t)})}const z=Jr(C,(0,c.VI)(e.withName("networkPhase")),!1);for(e=z.ctx;!e.canceled;){j.value=!1,N.value=!1,$.sources=[],$.abortReasonName=void 0,$.abortReasonMessage=void 0;const t=++W;A>0?(P=crypto.randomUUID(),await(null===(h=d.onRetryStarting)||void 0===h?void 0:h.call(d,A,{actionCase:I.action.case,conversationState:T,isResume:"resumeAction"===I.action.case,attemptRequestId:P})),Xr.info(e,`[nal_agent_retries] Retrying attempt ${A}`,{attempt:A,actionCase:I.action.case,requestId:P,originalRequestId:_})):Xr.info(e,"[nal_agent_retries] Initial request",{attempt:A,actionCase:I.action.case,requestId:P}),"resumeAction"===I.action.case&&d.onRetryResuming&&(await d.onRetryResuming({checkpointState:T,nextAttempt:A,reason:"resume_action"}),Xr.info(e,"[nal_agent_retries] Resuming from checkpoint",{nextAttempt:A,reason:"resume_action"}));const r=tn(o,t,(()=>W));try{return await this.runInternal(e,T,I,n,r,s,i,a,B,u,d,P,_,j,$,L,A),void Xr.info(e,"[nal_agent_retries] Request successful",{attempt:A,actionCase:I.action.case,requestId:P,originalRequestId:_})}catch(t){const r=null!==(b=null===(m=d.endlessRetries)||void 0===m?void 0:m.call(d))&&void 0!==b&&b,n=ln(t),o=cn(t,j.value,O,D,P,null!==(S=d.enableAgentRetries)&&void 0!==S&&S,r,$.sources.length>0,d.isRunningInTest),s="retry"===o.action?`RETRY (countAsServerError=${o.countAsServerError}, countAsTransportError=${o.countAsTransportError})`:`THROW ${o.error.kind}`;if(Xr.warn(e,`[AGENT_ERROR_DIAGNOSTICS] requestId=${P} originalRequestId=${_} decision=${s}`,Object.assign({decision:s,willRetry:"retry"===o.action,enableAgentRetries:null!==(k=d.enableAgentRetries)&&void 0!==k&&k,endlessRetries:r,isRunningInTest:null!==(E=d.isRunningInTest)&&void 0!==E&&E,stallAborted:j.value,serverErrorRetries:O,transportErrorRetries:D,attempt:A,requestId:P,originalRequestId:_,abortSources:[...$.sources],abortReasonName:$.abortReasonName},n)),"throw"===o.action){if(0===A){const t={attempt:A,actionCase:I.action.case,error:o.error,requestId:P,originalRequestId:_,enableAgentRetries:null!==(x=d.enableAgentRetries)&&void 0!==x&&x,endlessRetries:r,stallAborted:j.value,abortSources:[...$.sources],abortReasonName:$.abortReasonName,abortReasonMessage:$.abortReasonMessage};try{await(null===(f=d.onErrorNotRetried)||void 0===f?void 0:f.call(d,t))}catch(t){Xr.warn(e,"[nal_agent_retries] onErrorNotRetried callback failed",{error:String(t),requestId:P,originalRequestId:_})}}throw Xr.warn(e,"[nal_agent_retries] Error not retryable",{attempt:A,actionCase:I.action.case,error:o.error,serverErrorRetries:O,transportErrorRetries:D}),o.error}const i=A+1,a=t instanceof gr?t:Rr(t,{requestId:P});F(i,{errorClass:a.name,connectCode:null===(g=n.underlyingConnectError)||void 0===g?void 0:g.code,connectCodeName:null===(v=n.underlyingConnectError)||void 0===v?void 0:v.codeName,errorCode:null===(y=a.displayInfo)||void 0===y?void 0:y.errorCode,countAsServerError:o.countAsServerError,countAsTransportError:o.countAsTransportError,stallAborted:j.value,originatingRequestId:_,attemptRequestId:P,endpointUrl:this.endpointUrl}),U(),o.countAsServerError&&O++,o.countAsTransportError&&D++,A=i,await Vr(A,e.signal,d.isRunningInTest,d.fixedRetryDelayMs)}}throw new br("Request cancelled")}catch(e){C.error=e,C.hasError=!0}finally{Kr(C)}}async runInternal(e,t,r,n,o,s,i,a,l,u,p,f,g,v,y,w,b,S="agent.request.attempt"){var k,E,x,_,P,R,T,I,A;const O={stack:[],error:void 0,hasError:!1};try{const D=e,M=Jr(O,(0,c.VI)(e.withName(S)),!1);M.span.setAttribute("agent.attempt",b),M.span.setAttribute("agent.request_id",f),M.span.setAttribute("agent.original_request_id",g),e=M.ctx,e=(0,c.Mf)(e,"agent.request_id",f),e=(e=(0,c.Mf)(e,"agent.original_request_id",g)).with(Yr,{requestId:f,rootParentRequestId:p.rootParentRequestId,modelDetails:n});const j=new Set(y.sources);let N=void 0!==y.abortReasonName||void 0!==y.abortReasonMessage;const $=(t,r)=>{if(j.has(t))return;j.add(t),y.sources=[...j];const n=(e=>{const t="string"==typeof(null==e?void 0:e.abortReasonName)?e.abortReasonName:void 0,r="string"==typeof(null==e?void 0:e.abortReasonMessage)?e.abortReasonMessage:void 0;if(void 0!==t||void 0!==r)return{abortReasonName:t,abortReasonMessage:r}})(r);N||void 0===n||(N=!0,y.abortReasonName=n.abortReasonName,y.abortReasonMessage=n.abortReasonMessage),Zr.error(e,"Agent client stream abort",new Error(t),Object.assign({abortSource:t,requestId:f,conversationId:p.conversationId},null!=r?r:{}))};if(e.signal.aborted){const t=e.signal.reason;$("ctx_signal_abort",(0,c.R5)(t))}else e.signal.addEventListener("abort",(()=>{const t=e.signal.reason;$("ctx_signal_abort",(0,c.R5)(t))}),{once:!0});const[F,L]=e.withCancel();if(null===(k=a.signal)||void 0===k?void 0:k.aborted){const e=null===(x=a.signal)||void 0===x?void 0:x.reason;$("conversation_action_abort",(0,c.R5)(e)),L()}else null===(E=a.signal)||void 0===E||E.addEventListener("abort",(()=>{var e;const t=null===(e=a.signal)||void 0===e?void 0:e.reason;$("conversation_action_abort",(0,c.R5)(t)),L()}),{once:!0});if(e.canceled||F.canceled){const t={ctxCanceled:e.canceled,softCancel:F.canceled};throw $("pre_run_cancel",t),new br("User aborted request")}const U=(0,c.VI)(e.withName("createControlledExecManager")),B=C.fromResources(s);U[Symbol.dispose]();const[W,z]=e.withCancel(),q=new zr,{failThresholdMs:G,advisoryThresholdMs:V}=(e=>{var t;const r=null!==(t=rn(null==e?void 0:e.failTimeoutMs))&&void 0!==t?t:3e4,n=rn(null==e?void 0:e.advisoryTimeoutMs);return{failThresholdMs:r,advisoryThresholdMs:void 0!==n&&n>0&&(r<=0||n<r)?n:void 0}})(p.stallDetectorConfig),J=Jr(O,new qr(W,{thresholdMs:G,advisoryThresholdMs:V,onStall:()=>{v.value=!0,$("stall_detector",{thresholdMs:G,advisoryThresholdMs:V}),z()},onStallCallback:p.onStall,handlerTracker:q}),!1),K=void 0!==p.prewarmedStream;let Y,Z,X,Q;if(K){Y=p.prewarmedStream.requestStream,Z=p.prewarmedStream.responseIterator;const e=p.prewarmedStream.abortController;if(W.signal.aborted){const t=null!==(R=W.signal.reason)&&void 0!==R?R:"stall_cancel_already_aborted";e.abort(t)}else W.signal.addEventListener("abort",(()=>{var t;const r=null!==(t=W.signal.reason)&&void 0!==t?t:"stall_cancel_aborted";e.abort(r)}),{once:!0});p.prewarmedStream=void 0}else Y=(0,fr.Jt)();const ee=new m.F8(Y,(e=>(J.reset("outbound_write",Qr(e)),e))),te=(0,c.VI)(e.withName("writeInitialRequest"));let re;if(K)re=ee.write(new dr.KS({message:{case:"conversationAction",value:r}}));else{const o=u.map((e=>({name:e.name,providerIdentifier:e.providerIdentifier,toolName:e.toolName,description:e.description,inputSchema:e.inputSchema?hr.Value.fromJson(e.inputSchema):void 0}))),s=new H.Mp({conversationState:t,action:r,modelDetails:n,requestedModel:p.requestedModel,mcpTools:new pr.Or({mcpTools:o}),conversationGroupId:p.conversationGroupId,conversationId:p.conversationId,mcpFileSystemOptions:p.mcpFileSystemOptions,customSystemPrompt:p.customSystemPrompt,harness:p.harness,suggestNextPrompt:p.suggestNextPrompt,subagentTypeName:p.subagentTypeName,excludeWorkspaceContext:p.excludeWorkspaceContext,devRawModelSlug:p.devRawModelSlug,selectedSubagentModels:p.selectedSubagentModels,subagentModelOverrides:null!==(T=p.subagentModelOverrides)&&void 0!==T?T:[],selectedSubagentModelDetails:p.selectedSubagentModelsLegacy,preFetchedBlobs:null!==(I=p.preFetchedBlobs)&&void 0!==I?I:[],clientSupportsInlineImages:p.clientSupportsInlineImages,clientSupportsSendToUser:p.clientSupportsSendToUser,canCreateCloudSubagents:p.canCreateCloudSubagents,suppressSubagentProgressUpdateTool:p.suppressSubagentProgressUpdateTool});if(re=ee.write(new dr.KS({message:{case:"runRequest",value:s}})),F.canceled){const t={ctxCanceled:e.canceled,softCancel:F.canceled};throw $("post_write_cancel",t),te[Symbol.dispose](),new br("User aborted request")}const i=Object.assign(Object.assign({"x-request-id":f,"x-original-request-id":g},function(e){return Object.assign(Object.assign(Object.assign(Object.assign({},void 0!==e.parentRequestId?{"x-parent-request-id":Pt(e.parentRequestId)}:{}),void 0!==e.rootParentRequestId?{"x-root-parent-request-id":Pt(e.rootParentRequestId)}:{}),void 0!==e.parentAgentToolCallId?{"x-parent-agent-tool-call-id":Pt(e.parentAgentToolCallId)}:{}),!0===e.directMetaParentChildSubagent?{"x-direct-meta-parent-child-subagent":"true"}:{})}(p)),null!==(A=p.headers)&&void 0!==A?A:{});X=(0,c.VI)(e.withName("handshakeEstablishment")),Z=this.client.run(e,Y,{signal:W.signal,headers:i,onHeader:p.onHeader,onNetworkStarted:()=>{void 0===Q&&(Q=performance.now())}})}const ne=performance.now(),oe=()=>{var e,t;X&&(X[Symbol.dispose](),X=void 0),w();const r=performance.now();null===(e=p.onFirstMessage)||void 0===e||e.call(p,r-ne),void 0!==Q&&(null===(t=p.onFirstMessageNetwork)||void 0===t||t.call(p,r-Q))},se=p.onFirstNonHeartbeatResponse?()=>{p.onFirstNonHeartbeatResponse(performance.now()-ne,b)}:void 0,{interactionStream:ie,execStream:ae,checkpointStream:le,kvStream:ce,done:ue}=function(e,t,r,n,o,s,i){const a=(0,fr.Jt)(),l=(0,fr.Jt)(),c=(0,fr.Jt)(),u=(0,fr.Jt)();let d=!1,p=!1;return{interactionStream:a,execStream:l,checkpointStream:c,kvStream:u,done:async function(){let h,m,f=!1,g=!1;try{for await(const o of t){if(d||(d=!0,n()),"interactionUpdate"===o.message.case&&"heartbeat"===o.message.value.message.case)r.onServerSentHeartbeat(),r.reset("inbound_message","heartbeat");else{if(!p){p=!0;try{null==i||i()}catch(t){Xr.warn(e,"onFirstNonHeartbeatMessage callback failed",{error:String(t)})}}r.reset("inbound_message",Qr(o))}"interactionUpdate"===o.message.case&&"turnEnded"===o.message.value.message.case&&(f=!0),"interactionUpdate"!==o.message.case&&"interactionQuery"!==o.message.case||await a.write(o.message).catch((()=>{})),"execServerMessage"!==o.message.case&&"execServerControlMessage"!==o.message.case||await l.write(o.message.value),"conversationCheckpointUpdate"===o.message.case&&(f&&(g=!0),await c.write(o.message.value)),"kvServerMessage"===o.message.case&&await u.write(o.message.value)}r.onStreamEnded()}catch(e){h=e}finally{if(m=h,f&&g&&void 0!==h&&!(null==o?void 0:o.aborted)&&!(null==s?void 0:s.aborted)&&function(e){const t=e instanceof gr?e:Rr(e);return t instanceof vr&&Ar(t)}(h)&&(Xr.warn(e,"Ignoring transport close after terminal agent stream",{caughtError:h instanceof Error?`${h.name}: ${h.message}`:String(h)}),r.onStreamEnded(),m=void 0),f||(null==o?void 0:o.aborted)||(null==s?void 0:s.aborted)){if(!f&&!(null==o?void 0:o.aborted)){const t=`Stream ended without turnEnded, abort signals: signal.aborted=${null==o?void 0:o.aborted}, parentSignal.aborted=${null==s?void 0:s.aborted}; firstMessageFired=${d}`;Xr.warn(e,t)}}else{const t="Stream ended without turnEnded — connection likely dropped mid-stream";void 0===h?(Xr.warn(e,t),m=new vr(t)):h instanceof Error&&"[aborted] aborted"===h.message?(Xr.warn(e,`${t}; retrying caught [aborted] aborted error`),m=new vr(t,{cause:h})):Xr.warn(e,`${t}; caught non-retriable stream error, rethrowing as-is`,{caughtError:h instanceof Error?`${h.name}: ${h.message}`:String(h)})}a.close(),l.close(),c.close(),u.close()}if(void 0!==m)throw m}()}}(e,Z,J,oe,F.signal,e.signal,se);te[Symbol.dispose]();const de=5e3;let pe;const he=()=>{pe=setTimeout((()=>{ee.write(new dr.KS({message:{case:"clientHeartbeat",value:new dr.kA}})).then((()=>J.onClientSentHeartbeat()),(()=>{})),he()}),de)},me=()=>{void 0!==pe&&(clearTimeout(pe),pe=void 0)};he();try{let t;if("shellCommandAction"===r.action.case&&r.action.value.execId){const n=r.action.value,i=new Xe.a({command:(null===(_=n.shellCommand)||void 0===_?void 0:_.command)||"",parsingResult:new Xe.HO,skipApproval:!0}),a=s.get(tt).execute(e,i,{execId:n.execId}),l=new Fr(ie,o,new m.F8(ee,(e=>new dr.KS({message:{case:"interactionResponse",value:e}}))));t={run:async e=>{await Promise.all([q.track("handleShellStream",en(e,a,o)),q.track("interactionController",l.run(e))])}}}else{const e=new Fr(ie,o,new m.F8(ee,(e=>new dr.KS({message:{case:"interactionResponse",value:e}}))));t={run:async t=>{await q.track("interactionController",e.run(t))}}}void 0!==re&&await re;const c=new m.F8(ee,(e=>{if(e instanceof h.yT)return new dr.KS({message:{case:"execClientMessage",value:e}});if(e instanceof h.$Y)return new dr.KS({message:{case:"execClientControlMessage",value:e}});throw new Error("Unknown exec message")})),b=new jr(ae,c,B),S=new ur.hC(ce,new m.F8(ee,(e=>new dr.KS({message:{case:"kvClientMessage",value:e}}))),i),k=new d(le,l,e);let E,x;const C={promise:new Promise(((e,t)=>{E=e,x=t})),resolve:E,reject:x};F.canceled?(C.resolve(),ie.close()):F.signal.addEventListener("abort",(()=>{C.resolve(),ie.close()}),{once:!0}),b.run(F).then(C.resolve).catch(C.reject);const R=Promise.allSettled([q.track("streamSplitter",ue.finally((()=>{me(),a.close(),c.close()}))),q.track("execHandler",C.promise),t.run(e),q.track("checkpointController",k.run()),q.track("kvHandler",S.run(e)),q.track("conversationActionManager",a.run(e,new m.F8(ee,(e=>new dr.KS({message:{case:"conversationAction",value:e}})))))]);let T,I;const A={promise:new Promise(((e,t)=>{T=e,I=t})),resolve:T,reject:I};R.then(A.resolve).catch(A.reject),e.canceled?A.reject(new br("User aborted request")):e.signal.addEventListener("abort",(()=>A.reject(new br("User aborted request"))),{once:!0}),F.canceled?(z(),A.reject(new br("User aborted request"))):F.signal.addEventListener("abort",(()=>{z(),A.reject(new br("User aborted request"))}),{once:!0});const O=await A.promise,M=O[0],j=O[1];if(!0===(null===(P=p.shouldUseAgentExecStreamStartTimeoutRecovery)||void 0===P?void 0:P.call(p))){if("rejected"===M.status)throw M.reason;if("rejected"===j.status)throw j.reason}if("rejected"===j.status)throw j.reason;if("rejected"===M.status)throw M.reason;F.canceled||await this.processUnprocessedMessages(D,a,l,n,o,s,i,u,p,f,g,v,y,J,w)}finally{me(),X&&(X[Symbol.dispose](),X=void 0)}}catch(e){O.error=e,O.hasError=!0}finally{Kr(O)}}async processUnprocessedMessages(e,t,r,n,o,s,i,a,l,c,u,d,p,h,m){if(!t.hasUnprocessedMessages())return;const f=t.getUnprocessedUserMessages(),g=r.getLatestCheckpoint();if(!g||0===f.length)return;const v=f[0];t.markMessageAsProcessed(v),t.resetStream(),h[Symbol.dispose]();const y=r.getLatestCheckpoint();try{await this.runInternal(e,g,new H.QF({action:{case:"userMessageAction",value:new H.Vt({userMessage:v})}}),n,o,s,i,t,r,a,l,c,u,d,p,m,0,"agent.request.queuedMessage")}catch(e){throw y===r.getLatestCheckpoint()&&t.requeueMessage(v),e}}}r("../proto/dist/generated/agent/v1/delete_tool_pb.js");var dn=r("../proto/dist/generated/agent/v1/grep_exec_pb.js"),pn=(r("../proto/dist/generated/agent/v1/grep_tool_pb.js"),r("../proto/dist/generated/agent/v1/ls_exec_pb.js"));r("../proto/dist/generated/agent/v1/ls_tool_pb.js"),r("../proto/dist/generated/agent/v1/read_tool_pb.js"),r("../proto/dist/generated/agent/v1/shell_tool_pb.js");var hn=r("../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/esm/trace/status.js"),mn=r("../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/esm/trace/span_kind.js");function fn(e){return null!==e&&"object"==typeof e&&Symbol.asyncIterator in e}function gn(e,t,r){return{[Symbol.asyncIterator](){const n=e[Symbol.asyncIterator]();let o=!1;const s=e=>{o||(o=!0,e?(null==t||t.recordException(e instanceof Error?e:new Error(String(e))),null==t||t.setStatus({code:hn.s.ERROR,message:e instanceof Error?e.message:"Stream failed"})):null==t||t.setStatus({code:hn.s.OK}),null==t||t.end(),null==r||r())};return{async next(){try{const e=await n.next();return e.done&&s(),e}catch(e){throw s(e),e}},return:async e=>(s(),n.return?n.return(e):{done:!0,value:void 0}),async throw(e){if(s(e),n.throw)return n.throw(e);throw e}}}}}function vn(...e){const t=new Headers;for(const r of e)r&&(r instanceof Headers?r.forEach(((e,r)=>{t.set(r,e)})):Object.entries(r).forEach((([e,r])=>{t.set(e,r)})));return t}function yn(e,t){const{injectTraceHeaders:r=!0,extractHeaders:n}=t;return new Proxy(e,{get(e,o){const s=e[o];return"function"!=typeof s?s:(i,a,l={})=>{const u=(0,c.fR)(i.withName(`rpc.${String(o)}`),{kind:mn.v.CLIENT,attributes:{"rpc.method":String(o),"rpc.system":"connect"}}),d=(0,c.fU)(u);let p;try{let o;if(r&&(o=function(e){var t,r;const n=new Headers;try{const o=(0,c.fU)(e),s=null===(t=null==o?void 0:o.spanContext)||void 0===t?void 0:t.call(o);if((null==s?void 0:s.traceId)&&s.spanId){const e=null!==(r=s.traceFlags)&&void 0!==r?r:0,t=`00-${s.traceId}-${s.spanId}-${e.toString(16).padStart(2,"0")}`;if(n.set("traceparent",t),n.set("backend-traceparent",t),s.traceState){const e="function"==typeof s.traceState.serialize?s.traceState.serialize():String(s.traceState);n.set("tracestate",e)}}}catch(e){}return n}(u)),n){const e=n(u);e&&(o=vn(o,e))}const i=vn(l.headers,o),{signal:m,cleanup:f}=!0===t.enableAbortSignal?function(e,t){if(void 0===t||t===e)return{signal:e};const r=new AbortController,n=()=>{r.abort(e.reason)},o=()=>{r.abort(t.reason)};e.addEventListener("abort",n,{once:!0}),t.addEventListener("abort",o,{once:!0}),e.aborted?n():t.aborted&&o();return{signal:r.signal,cleanup:()=>{e.removeEventListener("abort",n),t.removeEventListener("abort",o)}}}(u.signal,l.signal):{signal:l.signal,cleanup:void 0};p=f;const g=Object.assign(Object.assign({},l),{headers:i,signal:m}),v=s.call(e,a,g);return fn(v)?gn(v,d,p):null!==(h=v)&&"object"==typeof h&&"then"in h&&"function"==typeof h.then?v.then((e=>fn(e)?gn(e,d,p):(null==d||d.setStatus({code:hn.s.OK}),null==d||d.end(),null==p||p(),e))).catch((e=>{throw null==d||d.recordException(e instanceof Error?e:new Error(String(e))),null==d||d.setStatus({code:hn.s.ERROR,message:e instanceof Error?e.message:"RPC call failed"}),null==d||d.end(),null==p||p(),e})):(null==d||d.setStatus({code:hn.s.OK}),null==d||d.end(),null==p||p(),v)}catch(e){throw null==d||d.recordException(e instanceof Error?e:new Error(String(e))),null==d||d.setStatus({code:hn.s.ERROR,message:e instanceof Error?e.message:"RPC call failed"}),null==d||d.end(),null==p||p(),e}var h}}})}var wn=r("../../node_modules/.pnpm/undici@6.23.0/node_modules/undici/index.js");const bn=process.env.HTTPS_PROXY||process.env.https_proxy||void 0;let Sn;try{Sn=void 0!==bn&&bn.length>0?new wn.kT(bn):void 0}catch(e){Sn=void 0}process.env.CURSOR_WEBSITE_URL,process.env.CURSOR_API_BASE_URL,Error;var kn=r("../proto/dist/generated/aiserver/v1/dashboard_connect.js");r("@connectrpc/connect-node"),new H.Gm({modelId:"gpt-5",displayModelId:"gpt-5",displayName:"GPT-5",displayNameShort:"GPT-5",aliases:["gpt-5"]});var En=r("node:fs/promises"),xn=r("../../node_modules/.pnpm/re2js@1.2.2/node_modules/re2js/build/index.esm.js");const Cn="CURSOR_FORCED_SHELL_EGRESS_NETWORK_DEFAULT",_n="CURSOR_FORCED_SHELL_EGRESS_DEPENDENCY_DENY_DOMAINS",Pn=/\$\(|`|<\(|>\(/,Rn=/[;&|]/;let Tn,In,An,On;function Dn(){if(void 0===Tn){const e=(process.env.CURSOR_FORCED_SHELL_EGRESS??"").trim().toLowerCase();Tn=""!==e&&"0"!==e&&"false"!==e&&"off"!==e}return Tn}function Mn(e){const t=(process.env[e]??"").trim();if(t)try{return new RegExp(t,"i"),t}catch(t){throw new Error(`[forced-egress] invalid regex in ${e}: ${String(t)}`)}}function jn(e){return(process.env[e]??"").split(",").map((e=>e.trim())).filter((e=>e.length>0))}function Nn(e){const t=(process.env[e]??"").split(":").map((e=>e.trim())).filter((e=>e.length>0)),r=t.filter((e=>e.startsWith("/"))),n=t.length-r.length;return n>0&&console.error(`[forced-egress] ignoring ${n} non-absolute path(s) in ${e}.`),r}function $n(){if(void 0===On){const e=(process.env[Cn]??"").trim().toLowerCase();let t="deny";"allow"===e||"deny"===e?t=e:""!==e&&console.error(`[forced-egress] ignoring invalid value in ${Cn} (expected "allow" or "deny"); using "deny".`);const r=jn("CURSOR_FORCED_SHELL_EGRESS_DENY_DOMAINS"),n=(process.env[_n]??"").trim();let o=r;"none"===n.toLowerCase()?o=[]:""!==n&&(o=jn(_n)),On={networkDefault:t,denyDomains:r,dependencyDenyDomains:o,allowDomains:jn("CURSOR_FORCED_SHELL_EGRESS_ALLOW_DOMAINS"),writablePaths:Nn("CURSOR_FORCED_SHELL_EGRESS_WRITABLE_PATHS")}}return On}function Fn(e,t,r={}){const n=[Mn(e),Mn(t)].filter((e=>void 0!==e)).map((e=>`(?:${e})`));if(0===n.length)return null;const o=n.join("|"),s=r.anchorToExecutable?`^\\s*(?:[A-Za-z_][A-Za-z0-9_]*=[^\\s]*\\s+)*(?:${o})`:o;return new RegExp(s,"i")}function Ln(e,t){const r=function(){const e=$n();return{type:"workspace_readwrite",...e.writablePaths.length>0?{additionalReadwritePaths:e.writablePaths}:{},networkPolicy:{version:1,default:e.networkDefault,allow:["127.0.0.0/8","::1/128","localhost",...e.allowDomains],...e.denyDomains.length>0?{deny:e.denyDomains}:{}},networkPolicyStrict:!0,skipStatsigDefaults:!0,enableSharedBuildCache:!0}}(),n=(void 0===In&&(In=Fn("CURSOR_FORCED_SHELL_EGRESS_DEPENDENCY_REGEX","CURSOR_FORCED_SHELL_EGRESS_EXTRA_DEPENDENCY_REGEX",{anchorToExecutable:!0})),In);if(null===n)return r;const o=t?.executableCommands??[];if(t?.parsingFailed||0===o.length)return r;if(Pn.test(e))return r;const s=(void 0===An&&(An=Fn("CURSOR_FORCED_SHELL_EGRESS_SOURCE_REGEX","CURSOR_FORCED_SHELL_EGRESS_EXTRA_SOURCE_REGEX")),An);for(const e of o){const t=e.fullText?.trim()||e.name?.trim()||"";if(!t||s?.test(t)||Rn.test(t))return r}return o.every((e=>n.test(e.fullText?.trim()||e.name?.trim()||"")))?function(){const e=$n();return{type:"workspace_readwrite",...e.writablePaths.length>0?{additionalReadwritePaths:e.writablePaths}:{},networkPolicy:{version:1,default:"allow",...e.dependencyDenyDomains.length>0?{deny:e.dependencyDenyDomains}:{}},skipStatsigDefaults:!0,enableSharedBuildCache:!0}}():r}var Un=r("../proto/dist/generated/agent/v1/sandbox_pb.js"),Bn=r("../shell-exec/dist/index.js");function Hn(e){if(!e)return;let t;return"allow"===e.default?t=Un.h1.ALLOW:"deny"===e.default&&(t=Un.h1.DENY),new Un.RB({version:e.version,defaultAction:t,deny:e.deny??[],allow:e.allow??[],logging:e.logging?(r=e.logging,new Un.Qq({decisionLogPath:r.decisionLogPath,logFormat:r.logFormat})):void 0});var r}function Wn(e){const t=function(e){if(!e)return;const t={};if(void 0!==e.version&&(t.version=e.version),void 0!==e.defaultAction)switch(e.defaultAction){case Un.h1.ALLOW:t.default="allow";break;case Un.h1.DENY:t.default="deny"}return e.deny&&e.deny.length>0&&(t.deny=e.deny),e.allow&&e.allow.length>0&&(t.allow=e.allow),e.logging&&(t.logging=function(e){const t={};return e.decisionLogPath&&(t.decisionLogPath=e.decisionLogPath),"jsonl"===e.logFormat&&(t.logFormat="jsonl"),t}(e.logging)),t}(e.networkPolicy);return t||(e.networkAccess?(0,Bn.T6)():(0,Bn.Po)())}function zn(e){if(!e)return{type:"insecure_none"};switch(e.type){case Un.vc.INSECURE_NONE:case Un.vc.UNSPECIFIED:return{type:"insecure_none",allowlistEscalated:e.allowlistEscalated,enableSharedBuildCache:e.enableSharedBuildCache,debugOutputDir:e.debugOutputDir,captureDenies:e.captureDenies};case Un.vc.WORKSPACE_READWRITE:return{type:"workspace_readwrite",networkPolicy:Wn(e),skipStatsigDefaults:e.skipStatsigDefaults,additionalReadwritePaths:e.additionalReadwritePaths,additionalReadonlyPaths:e.additionalReadonlyPaths,disableTmpWrite:e.disableTmpWrite,enableSharedBuildCache:e.enableSharedBuildCache,debugOutputDir:e.debugOutputDir,captureDenies:e.captureDenies,networkPolicyStrict:e.networkPolicyStrict};case Un.vc.WORKSPACE_READONLY:return{type:"workspace_readonly",networkPolicy:Wn(e),skipStatsigDefaults:e.skipStatsigDefaults,additionalReadonlyPaths:e.additionalReadonlyPaths,disableTmpWrite:e.disableTmpWrite,enableSharedBuildCache:e.enableSharedBuildCache,debugOutputDir:e.debugOutputDir,captureDenies:e.captureDenies,networkPolicyStrict:e.networkPolicyStrict};default:return{type:"insecure_none"}}}function qn(e){if(e)return"insecure_none"===e.type?new Un.Mw({type:Un.vc.INSECURE_NONE,allowlistEscalated:e.allowlistEscalated,enableSharedBuildCache:e.enableSharedBuildCache,debugOutputDir:e.debugOutputDir,captureDenies:e.captureDenies}):"workspace_readwrite"===e.type?new Un.Mw({type:Un.vc.WORKSPACE_READWRITE,networkAccess:(0,Bn.$b)(e.networkPolicy),skipStatsigDefaults:e.skipStatsigDefaults,additionalReadwritePaths:e.additionalReadwritePaths??[],additionalReadonlyPaths:e.additionalReadonlyPaths??[],disableTmpWrite:e.disableTmpWrite,enableSharedBuildCache:e.enableSharedBuildCache,debugOutputDir:e.debugOutputDir,captureDenies:e.captureDenies,networkPolicy:Hn(e.networkPolicy),networkPolicyStrict:e.networkPolicyStrict}):"workspace_readonly"===e.type?new Un.Mw({type:Un.vc.WORKSPACE_READONLY,networkAccess:(0,Bn.$b)(e.networkPolicy),skipStatsigDefaults:e.skipStatsigDefaults,additionalReadonlyPaths:e.additionalReadonlyPaths??[],disableTmpWrite:e.disableTmpWrite,enableSharedBuildCache:e.enableSharedBuildCache,debugOutputDir:e.debugOutputDir,captureDenies:e.captureDenies,networkPolicy:Hn(e.networkPolicy),networkPolicyStrict:e.networkPolicyStrict}):new Un.Mw({type:Un.vc.INSECURE_NONE})}async function Gn(e,t){switch(e.type){case"needsApproval":return t.onNeedsApproval(e.approvalReason,e.approvalDetails);case"userRejected":return t.onUserRejected(e.reason);case"cursorIgnore":return t.onPermissionDenied("Blocked by cursor ignore");case"permissionsConfig":return t.onPermissionDenied("Blocked by permissions configuration",{isReadonly:e.isReadonly});case"cursorFiles":return t.onPermissionDenied("Blocked by cursor files protection");case"adminBlock":return t.onPermissionDenied("Blocked by admin repository block");case"unsafeResolution":return t.onPermissionDenied(e.message);default:{const t=e;throw new Error(`Unhandled block reason type: ${JSON.stringify(t)}`)}}}function Vn(e){switch(e.type){case"userRejected":return e.reason;case"unsafeResolution":return e.message;case"needsApproval":case"cursorIgnore":case"adminBlock":case"permissionsConfig":case"cursorFiles":return"Command is not allowed";default:{const t=e;return`Command is not allowed (${JSON.stringify(t)})`}}}var Jn=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const Kn=(0,c.h)("local-exec:background-shell");function Yn(e,t,r){return"permissionsConfig"===r.type&&r.isReadonly?new Ke.Lt({result:{case:"permissionDenied",value:new Xe.jn({command:e,workingDirectory:t,error:"Command blocked by permissions configuration",isReadonly:!0})}}):new Ke.Lt({result:{case:"rejected",value:new Xe.pZ({command:e,workingDirectory:t,reason:Vn(r)})}})}class Zn{id;abortController;disposed=!1;completed=!1;completionListeners=[];completion;stdin;pid;constructor(e,t){this.id=e,this.abortController=t}abort(){this.abortController.abort()}dispose(){this.disposed||(this.disposed=!0,this.abortController.signal.aborted||this.abortController.abort())}get signal(){return this.abortController.signal}isDisposed(){return this.disposed}onComplete(e){this.completed&&this.completion?e(this.completion):this.completionListeners.push(e)}markCompleted(e){if(this.completed)return;this.completed=!0,this.completion=e;const t=[...this.completionListeners];this.completionListeners=[];for(const r of t)r(e)}}async function Xn(e,t){let r;try{for(let n=await t.next();!n.done;n=await t.next())"stdin_ready"===n.value.type?(e.stdin=n.value.stdin,e.pid=n.value.pid):"exit"===n.value.type&&(r={code:n.value.code,aborted:n.value.aborted,outputPath:n.value.outputLocation?.filePath})}catch(e){}finally{e.markCompleted(r??{code:null,aborted:e.signal.aborted})}}function Qn(e){e().catch((()=>{}))}const eo=65536;class to{args;regex;limit;carryover="";matchedOccurrences=0;emittedNotifications=0;pendingBatch;flushTimer;finished=!1;constructor(e){if(this.args=e,this.limit=e.config.notificationLimit??100,e.config.pattern.length>500)throw new Error("Output notification pattern exceeds 500 characters");this.regex=xn.L3.compile(e.config.pattern,xn.L3.MULTILINE)}observe(e){if(this.finished||this.matchedOccurrences>=this.limit||0===e.length)return;if(e.length>eo){for(let t=0;t<e.length&&this.matchedOccurrences<this.limit;t+=eo)this.observe(e.slice(t,t+eo));return}const t=this.carryover.length,r=`${this.carryover}${e}`,n=this.regex.matcher(r);for(;this.matchedOccurrences<this.limit&&n.find();){const e=n.group()??"";n.end()>t&&this.queueMatch(e)}this.carryover=r.slice(-1024)}finish(){this.finished||(this.finished=!0,this.flushPendingBatch("finish"),this.clearFlushTimer())}queueMatch(e){if(this.matchedOccurrences>=this.limit)return;this.matchedOccurrences+=1;const t=this.matchedOccurrences,r=function(e,t){return e.length<=5e3?`${t}: ${e}`:`${t} is ${e.length} characters; omitted from notification detail.`}(e,1===t?"Matched text":"Latest match");return 1===t?(this.emitNotification({startOccurrence:t,endOccurrence:t,count:1,matchedTextDetail:r}),void(t===this.limit&&this.emitLimitReachedNotification())):(this.pendingBatch?(this.pendingBatch.endOccurrence=t,this.pendingBatch.count+=1,this.pendingBatch.matchedTextDetail=r):this.pendingBatch={startOccurrence:t,endOccurrence:t,count:1,matchedTextDetail:r},t===this.limit?(this.flushPendingBatch("limit"),void this.emitLimitReachedNotification()):void this.scheduleFlush())}scheduleFlush(){if(void 0!==this.flushTimer)return;const e=this.getDebounceMs();this.flushTimer=setTimeout((()=>{this.flushPendingBatch("debounce")}),e)}getDebounceMs(){const e=this.args.debounceMs??function(e){const t=e.debounce;if(void 0!==t&&Number.isFinite(t))return Math.ceil(1e3*t)}(this.args.config)??5e3;return Math.max(e,5e3)}clearFlushTimer(){void 0!==this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=void 0)}flushPendingBatch(e){const t=this.pendingBatch;t&&(this.pendingBatch=void 0,this.clearFlushTimer(),this.emitNotification(t))}emitNotification(e){this.emittedNotifications+=1;const t=this.args.config.reason.trim()||`Shell output contains /${this.args.config.pattern}/`,r=this.args.config.pattern,n=void 0!==e.matchedTextDetail?` ${e.matchedTextDetail}.`:"",o=1===e.count?`Shell output has pattern /${r}/. This is occurrence number ${e.startOccurrence}.${n} The title message is being displayed to the user.`:`Shell output matched /${r}/ ${e.count} more times since the previous notification. The title message is being displayed to the user.${n}`,s=`${this.args.shellId}:task_progress:${this.emittedNotifications}`;var i;this.args.registry.enqueueCompletion({taskId:s,kind:"shell",status:"success",title:(i=t,i.length<=500?i:`${i.slice(0,500)}...`),detail:o,outputPath:this.args.outputPath,reason:"task_progress"})}emitLimitReachedNotification(){this.emittedNotifications+=1;const e=this.args.config.pattern,t=`${this.args.shellId}:task_progress:${this.emittedNotifications}`;this.args.registry.enqueueCompletion({taskId:t,kind:"shell",status:"success",title:`Notification limit reached (${this.limit})`,detail:`Shell output matched /${e}/ ${this.limit} times and has reached the notification limit. No further notifications will be sent for this pattern. To continue monitoring, read the output file directly at the output path.`,outputPath:this.args.outputPath,reason:"task_progress"})}}class ro{innerFactory;projectDir;backgroundWorkRegistry;constructor(e,t,r){this.innerFactory=e,this.projectDir=t,this.backgroundWorkRegistry=r}async spawn(e,t){const r=this.createObserver(e.ctx,e.shellId,e.outputNotification);if(!r)return this.innerFactory.spawn(e,t);try{return await this.innerFactory.spawn(e,this.createObservingExecutor(t,r))}catch(e){throw r.finish(),e}}async adopt(e){const t=this.createObserver(e.ctx,e.shellId,e.outputNotification);if(!t)return this.innerFactory.adopt(e);e.initialOutput.length>0&&t.observe(e.initialOutput);try{return await this.innerFactory.adopt({...e,eventIterator:this.createObservingIterator(e.eventIterator,t)})}catch(e){throw t.finish(),e}}createObserver(e,t,r){if(!this.backgroundWorkRegistry||!r)return;if(0===r.pattern.trim().length)return;const n=a.join(this.projectDir,"terminals",`${t}.txt`);try{return new to({shellId:t,outputPath:n,config:r,registry:this.backgroundWorkRegistry})}catch(r){return void(void 0!==e&&Kn.warn(e,"Invalid shell output notification pattern",{shellId:t,error:r instanceof Error?r.message:String(r)}))}}createObservingExecutor(e,t){const r=e.execute.bind(e);return{...e,execute:async function*(e,n){try{for await(const o of r(e,n))"stdout"===o.type||"stderr"===o.type?t.observe(o.data):"exit"===o.type&&t.finish(),yield o}finally{t.finish()}}}}createObservingIterator(e,t){const r=e.return?.bind(e);return{next:async()=>{try{const r=await e.next();if(r.done)t.finish();else{const e=r.value;"stdout"===e.type||"stderr"===e.type?t.observe(e.data):"exit"===e.type&&t.finish()}return r}catch(e){throw t.finish(),e}},return:async e=>(t.finish(),r?r(e):{done:!0,value:void 0})}}}class no{async spawn(e,t){const r=new AbortController,n=new Zn(e.shellId,r),o=t.execute(e.ctx,{command:e.command,workingDirectory:e.workingDirectory,signal:r.signal,toolCallId:e.toolCallId,conversationId:e.conversationId,sandboxPolicy:e.sandboxPolicy,pipeStdin:e.enableWriteShellStdinTool,showElapsedTime:!0})[Symbol.asyncIterator]();try{for(let e=await o.next();!e.done;e=await o.next())if("stdin_ready"===e.value.type){n.stdin=e.value.stdin,n.pid=e.value.pid;break}}catch(e){}return Qn((()=>Xn(n,o))),n}async adopt(e){const t=new Zn(e.shellId,e.abortController);return t.stdin=e.stdin,t.pid=e.pid,Qn((()=>Xn(t,e.eventIterator))),t}}function oo(e){return`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}"`}function so(e){const t=String(e.runningForMs).padEnd(9," ");let r="---\n";return void 0!==e.pid&&0!==e.pid&&(r+=`pid: ${e.pid}\n`),r+=`cwd: ${oo(e.cwd)}\n`,r+=`command: ${oo(e.command)}\n`,r+=`started_at: ${e.startedAt}\n`,r+=`running_for_ms: ${t}\n`,r+="---\n",r}class io{innerFactory;projectDir;constructor(e,t){this.innerFactory=e,this.projectDir=t}async spawn(e,t){const r=a.join(this.projectDir,"terminals");await(0,En.mkdir)(r,{recursive:!0});const n=this.createLoggingExecutor(t,e,r);return this.innerFactory.spawn(e,n)}createLoggingExecutor(e,t,r){const o=e.execute.bind(e);return{...e,execute:async function*(e,i){let l,c,u,d=!1,p=!1;const h=Date.now(),m=new Date(h).toISOString();let f;const g=async e=>{if(c)try{await c.write(e)}catch(e){}},v=t.shellId,y=a.join(r,`${v}.txt`),w=()=>{void 0!==u&&(clearInterval(u),u=void 0)},b=async e=>{if(p)return;p=!0,f=e;const r=Date.now()-h,n=so({pid:e,cwd:t.workingDirectory,command:t.command,startedAt:m,runningForMs:r});await(0,En.writeFile)(y,n,"utf8"),u=setInterval((()=>{(async()=>{if(!l)return;const e=Date.now()-h,r=so({pid:f,cwd:t.workingDirectory,command:t.command,startedAt:m,runningForMs:e});try{await l.write(r,0,"utf8")}catch(e){}})()}),5e3)},S=async()=>{l||(l=await s.promises.open(y,"r+")),c||(c=await s.promises.open(y,"a"))};try{for await(const t of o(e,i)){if("stdout"===t.type)p||(await b(),await S()),await g(t.data);else if("stderr"===t.type)p||(await b(),await S()),await g(t.data);else if("stdin_ready"!==t.type||d){if("exit"===t.type){w(),p||(await b(),await S());const e=Date.now()-h,r=i.showElapsedTime?`\n---\nexit_code: ${t.code??"unknown"}\nelapsed_ms: ${e}\nended_at: ${(new Date).toISOString()}\n---\n`:`\n---\nexit_code: ${t.code??"unknown"}\nended_at: ${(new Date).toISOString()}\n---\n`;await g(r)}}else{d=!0,p||(await b(t.pid),await S());const e=t.stdin;if(e){const t=e=>{if(null==e)return;const t="string"==typeof e?e:n.Buffer.isBuffer(e)?e.toString():String(e);if(!t)return;const r=t.endsWith("\n")?t:`${t}\n`;g(`[stdin] ${r}`)},r=e.write.bind(e);if(e.write=(e,n,o)=>(t(e),r(e,n,o)),"function"==typeof e.end){const r=e.end.bind(e);e.end=(e,n,o)=>(void 0!==e&&t(e),r(e,n,o))}}}yield t}}catch(e){w();const t=i.signal?.aborted??!1;if(!t&&(p||(await b(),await S()),c)){const t=Date.now()-h,r=oo(e instanceof Error?e.message:"Unknown error"),n=i.showElapsedTime?`\n---\nerror: ${r}\nelapsed_ms: ${t}\nended_at: ${(new Date).toISOString()}\n---\n`:`\n---\nerror: ${r}\nended_at: ${(new Date).toISOString()}\n---\n`;await g(n)}if(!t)throw e}finally{if(w(),l)try{await l.close()}catch{}if(c)try{await c.close()}catch{}}}}}async adopt(e){const t=a.join(this.projectDir,"terminals");await(0,En.mkdir)(t,{recursive:!0});const r=a.join(t,`${e.shellId}.txt`),n=e.startTime,o=new Date(n).toISOString(),i=Date.now()-n,l=so({pid:e.pid,cwd:e.workingDirectory,command:e.command,startedAt:o,runningForMs:i})+(e.initialOutput??"");await(0,En.writeFile)(r,l,"utf8");const c=await s.promises.open(r,"r+");let u;try{u=await s.promises.open(r,"a")}catch(e){throw await c.close(),e}let d=!1,p=setInterval((()=>{const t=Date.now()-n,r=so({pid:e.pid,cwd:e.workingDirectory,command:e.command,startedAt:o,runningForMs:t});c.write(r,0,"utf8").catch((()=>{}))}),5e3);const h=async()=>{if(!d){d=!0,void 0!==p&&(clearInterval(p),p=void 0);try{await c.close()}catch{}try{await u.close()}catch{}}},m=async e=>{try{await u.write(e)}catch(e){}},f={next:async()=>{try{const t=await e.eventIterator.next();if(!t.done){const r=t.value;if("stdout"===r.type)await m(r.data);else if("stderr"===r.type)await m(r.data);else if("exit"===r.type){const t=Date.now()-n,o=e.showElapsedTime?`\n---\nexit_code: ${r.code??"unknown"}\nelapsed_ms: ${t}\nended_at: ${(new Date).toISOString()}\n---\n`:`\n---\nexit_code: ${r.code??"unknown"}\nended_at: ${(new Date).toISOString()}\n---\n`;await m(o),await h()}}return t}catch(e){throw await h(),e}},return:async()=>(await h(),e.eventIterator.return?e.eventIterator.return():{done:!0,value:void 0})};return this.innerFactory.adopt({...e,eventIterator:f})}}class ao{factory;backgroundWorkRegistry;runningShells=new Map;constructor(e,t){this.factory=e,this.backgroundWorkRegistry=t}registerShellWork(e,t){const r=String(e.id);this.backgroundWorkRegistry?.upsertWork({id:r,kind:"shell",state:"running",metadata:B(t),abort:()=>{this.abort(e.id)}})}clearShellWork(e){this.backgroundWorkRegistry?.clearWork(String(e))}cleanupShell(e){this.runningShells.has(e)&&(this.runningShells.delete(e),this.clearShellWork(e))}enqueueShellCompletion(e,t,r){if(!this.backgroundWorkRegistry)return;const n=r.aborted?"aborted":0===r.code?"success":"error",o=r.aborted||null===r.code||0===r.code?void 0:`exit_code=${r.code}`;this.backgroundWorkRegistry.enqueueCompletion({taskId:String(e),kind:"shell",status:n,title:t,...o?{detail:o}:{},...r.outputPath?{outputPath:r.outputPath}:{},reason:"task_finished"})}async spawn(e,t){const r=await this.factory.spawn(e,t);return this.runningShells.set(r.id,r),this.registerShellWork(r,{title:e.description||e.command,cwd:e.workingDirectory,startTimeMs:Date.now()}),r.signal.addEventListener("abort",(()=>{this.cleanupShell(r.id)})),r.onComplete?.((t=>{this.enqueueShellCompletion(r.id,e.description||e.command,t),this.cleanupShell(r.id)})),{shellId:r.id,pid:r.pid}}async adopt(e){const t=await this.factory.adopt(e);return this.runningShells.set(t.id,t),this.registerShellWork(t,{title:e.description||e.command,cwd:e.workingDirectory,startTimeMs:e.startTime}),t.signal.addEventListener("abort",(()=>{this.cleanupShell(t.id)})),t.onComplete?.((r=>{this.enqueueShellCompletion(t.id,e.description||e.command,r),this.cleanupShell(t.id)})),{shellId:t.id,pid:e.pid}}generateShellId(){return Math.floor(999e3*Math.random())+1e3}abort(e){const t=this.runningShells.get(e);return!!t&&(t.abort(),this.runningShells.delete(e),this.clearShellWork(e),!0)}isRunning(e){return this.runningShells.has(e)}dispose(){for(const[e,t]of this.runningShells)t.dispose(),this.clearShellWork(e);this.runningShells.clear()}async writeStdin(e,t){const r=this.runningShells.get(e);if(!r)throw new Error("Shell not found");if(!r.stdin)throw new Error("Shell stdin not available");const n=t.indexOf(""),o=-1!==n?n:t.indexOf("\\u0004");if(-1!==o){const e=t.substring(0,o);e.length>0&&await new Promise(((t,n)=>{r.stdin.write(e,(e=>{e?n(e):t(void 0)}))})),r.stdin.end()}else await new Promise(((e,n)=>{r.stdin.write(t,(t=>{t?n(t):e(void 0)}))}))}}class lo{permissionsService;coreExecutor;ignoreService;backgroundShellManager;constructor(e,t,r,n,o,s){this.permissionsService=e,this.coreExecutor=t,this.ignoreService=r;const i=o??function(e){const t=new no;return new io(t,e)}(n),a=new ro(i,n,s);this.backgroundShellManager=new ao(a,s)}getManager(){return this.backgroundShellManager}dispose(){this.backgroundShellManager.dispose()}async execute(e,t){const r={stack:[],error:void 0,hasError:!1};try{!function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0})}(r,(0,c.VI)(e.withName("LocalBackgroundShellExecutor.execute")),!1);const n=t.command,o=t.sandboxPolicy?zn(t.sandboxPolicy):void 0,s=t.workingDirectory||await this.coreExecutor.getCwd(),i=(0,m.o1)(s);if(!t.parsingResult)return new Ke.Lt({result:{case:"error",value:new Ke.Of({command:n,workingDirectory:i,error:"Parsing result is required"})}});let a=o;if(Kn.info(e,"Background shell: approval gate reached",{toolCallId:t.toolCallId,skipApproval:t.skipApproval,hasSmartModeApproval:void 0!==t.smartModeApproval,hasSmartModeApprovalReason:void 0!==t.smartModeApproval?.reason,hasSmartModeApprovalRequestId:void 0!==t.smartModeApproval?.requestId,requestedPolicyType:o?.type??"undefined",parserCommandCount:t.parsingResult.executableCommands.length,classifierCommandCount:t.classifierResult?.commands.length??0,commandLength:n.length}),t.skipApproval){const r=await this.permissionsService.shouldEnforceShellInvariantBlocks(e,{workingDirectory:i},o);if("block"===r.kind)return Kn.info(e,"Background shell: invariant blocked command",{toolCallId:t.toolCallId,blockReasonType:r.reason.type,skipApproval:t.skipApproval}),Yn(n,i,r.reason);Kn.info(e,"Background shell: skipped local approval",{toolCallId:t.toolCallId,requestedPolicyType:o?.type??"undefined"})}else{const r=await this.permissionsService.shouldBlockShellCommand(e,n,{workingDirectory:i,timeout:0,parsingResult:t.parsingResult,toolCallId:t.toolCallId,classifierResult:t.classifierResult,smartModeApprovalReason:t.smartModeApproval?.reason,smartModeApprovalRequestId:t.smartModeApproval?.requestId,hookApprovalRequirement:gt(t)},o);if("block"===r.kind)return Kn.info(e,"Background shell: approval gate blocked command",{toolCallId:t.toolCallId,blockReasonType:r.reason.type,hasSmartModeApproval:void 0!==t.smartModeApproval,skipApproval:t.skipApproval}),Yn(n,i,r.reason);a=r.policy,Kn.info(e,"Background shell: approval gate allowed command",{toolCallId:t.toolCallId,skipApproval:t.skipApproval,effectivePolicyType:a.type})}if(Dn()&&(a=Ln(n,t.parsingResult),"insecure_none"!==a.type)){const e=await this.ignoreService.getCursorIgnoreMapping();a={...a,ignoreMapping:e}}try{const r=this.backgroundShellManager.generateShellId(),o=a?{perRepo:a}:void 0,s={ctx:e,command:n,workingDirectory:i,toolCallId:t.toolCallId,conversationId:t.conversationId,sandboxPolicy:o,shellId:r,enableWriteShellStdinTool:t.enableWriteShellStdinTool,description:t.description,outputNotification:t.outputNotification},l=await this.backgroundShellManager.spawn(s,this.coreExecutor);return new Ke.Lt({result:{case:"success",value:new Ke.Po({shellId:r,command:n,workingDirectory:i,pid:l.pid})}})}catch(e){return new Ke.Lt({result:{case:"error",value:new Ke.Of({command:n,workingDirectory:i,error:e instanceof Error?e.message:"Unknown error"})}})}}catch(e){r.error=e,r.hasError=!0}finally{Jn(r)}}writeStdin(e,t){return this.backgroundShellManager.writeStdin(e,t)}}var co=r("node:async_hooks"),uo=r("../proto/dist/generated/agent/v1/agent_skills_pb.js"),po=r("../proto/dist/generated/agent/v1/cursor_rules_pb.js"),ho=r("../proto/dist/generated/agent/v1/subagents_pb.js"),mo=r("../../node_modules/.pnpm/gray-matter@4.0.3/node_modules/gray-matter/index.js"),fo=r("../../node_modules/.pnpm/ignore@7.0.5/node_modules/ignore/index.js"),go=(r("../../node_modules/.pnpm/minimatch@10.2.5/node_modules/minimatch/dist/esm/index.js"),r("node:util")),vo=r("zod");const yo={log:()=>{},increment:()=>{},distribution:()=>{},captureException:()=>{}},wo=vo.z.object({command:vo.z.string().optional(),args:vo.z.array(vo.z.string()).optional(),env:vo.z.record(vo.z.string(),vo.z.string()).optional(),url:vo.z.string().optional(),headers:vo.z.record(vo.z.string(),vo.z.string()).optional(),cwd:vo.z.string().optional(),envFile:vo.z.string().optional(),auth:vo.z.object({CLIENT_ID:vo.z.string(),CLIENT_SECRET:vo.z.string().optional(),scopes:vo.z.array(vo.z.string()).optional()}).optional(),enabledTools:vo.z.array(vo.z.string()).optional()}),bo=vo.z.object({mcpServers:vo.z.record(vo.z.string(),wo).optional()});function So(e){return`user-settings:${t=e,(0,o.createHash)("sha256").update(t).digest("hex").slice(0,16)}`;var t}class ko extends Error{constructor(e,t){super(`Invalid Claude Code plugin identifier "${t}": ${e}`),this.raw=t,this.name="CCPluginIdentifierError"}}function Eo(e){const t=e.trim();if(!t)throw new ko("Empty identifier",e);const r=/^[a-zA-Z0-9_-]+$/,n=t.indexOf("@");if(n!==t.lastIndexOf("@"))throw new ko("Plugin identifier cannot contain multiple @ symbols",e);if(-1===n){if(!r.test(t))throw new ko("Plugin name must contain only alphanumeric characters, dashes, and underscores",e);if(t.length>100)throw new ko("Plugin name must be 100 characters or less",e);return{name:t,sourceType:"marketplace",marketplace:"claude-plugins-official",raw:e}}const o=t.slice(0,n).trim(),s=t.slice(n+1).trim();if(!o)throw new ko("Missing plugin name before @",e);if(!s)throw new ko("Missing source after @",e);if(!r.test(o))throw new ko("Plugin name must contain only alphanumeric characters, dashes, and underscores",e);if(o.length>100)throw new ko("Plugin name must be 100 characters or less",e);if(s.startsWith("github:")){const t=s.slice(7).trim();if(!t||!/^[a-zA-Z0-9_.-]+\/[a-zA-Z0-9_.-]+$/.test(t))throw new ko("Invalid GitHub repo format, expected 'org/repo' (e.g., 'anthropics/claude-plugins')",e);return{name:o,sourceType:"github",githubRepo:t,raw:e}}if(s.startsWith("local:")){const t=s.slice(6).trim();if(!t)throw new ko("Missing path after 'local:'",e);return{name:o,sourceType:"local",localPath:t,raw:e}}if(s.startsWith("url:")){const t=s.slice(4).trim();if(!t)throw new ko("Missing Git URL after 'url:'",e);try{new URL(t)}catch(t){throw new ko("Invalid Git URL format",e)}return{name:o,sourceType:"url",gitUrl:t,raw:e}}const i=s.indexOf("#");let a,l;if(-1!==i?(a=s.slice(0,i).trim(),l=s.slice(i+1).trim()):a=s,!a)throw new ko("Missing marketplace name",e);if(!r.test(a))throw new ko("Marketplace name must contain only alphanumeric characters, dashes, and underscores",e);return{name:o,sourceType:"marketplace",marketplace:a,version:l,raw:e}}function xo(e){if("claude-plugin"===e.source)return e.sourceInfo.raw;if("user-local"===e.source)return`user-local:${e.sourceInfo.name}`;if("user-settings"===e.source)return So(e.sourceInfo.localPath);if("extension"===e.source){const t=e.sourceInfo;return`extension:${t.extensionId}:${t.localPath}`}const t=e.sourceInfo;return`${t.name}-${t.version}`}function Co(e){return e.sourceInfo.name}function _o(e){switch(e.source){case"claude-plugin":case"cursor-first-party":case"cursor-third-party":return e.sourceInfo.marketplace;default:return}}function Po(e){switch(e.source){case"cursor-first-party":case"cursor-third-party":return e.sourceInfo.pluginDbId;default:return}}function Ro(e){switch(e.source){case"cursor-first-party":case"cursor-third-party":return e.sourceInfo.marketplaceDbId;default:return}}var To=r("../../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/ajv.js");const Io=10485760,Ao=/^[a-z0-9]([a-z0-9.-]*[a-z0-9])?$/,Oo=[".cursor-plugin/plugin.json",".claude-plugin/plugin.json"],Do=[".cursor-plugin",".claude-plugin"],Mo=[".cursor-plugin/marketplace.json",".claude-plugin/marketplace.json"],jo=vo.z.object({source:vo.z.literal("github"),repo:vo.z.string().regex(/^[^/]+\/[^/]+$/,"Must be in owner/repo format"),ref:vo.z.string().optional(),sha:vo.z.string().length(40,"SHA must be 40 characters").regex(/^[a-f0-9]+$/,"SHA must be hexadecimal").optional()}),No=vo.z.object({source:vo.z.literal("url"),url:vo.z.string().url().endsWith(".git","URL must end with .git"),ref:vo.z.string().optional(),sha:vo.z.string().length(40,"SHA must be 40 characters").regex(/^[a-f0-9]+$/,"SHA must be hexadecimal").optional()}),$o=vo.z.object({source:vo.z.literal("git-subdir"),url:vo.z.string().url().endsWith(".git","URL must end with .git"),path:vo.z.string().min(1),ref:vo.z.string().optional(),sha:vo.z.string().length(40,"SHA must be 40 characters").regex(/^[a-f0-9]+$/,"SHA must be hexadecimal").optional()}),Fo=vo.z.union([vo.z.string(),jo,No,$o]),Lo=vo.z.object({name:vo.z.string().min(1,"Author name is required"),email:vo.z.string().email().optional()}),Uo=(vo.z.object({name:vo.z.string().min(1,"Owner name is required"),email:vo.z.string().email().optional()}),vo.z.enum(["string","number","integer","boolean","object","array","null"])),Bo=vo.z.union([Uo,vo.z.array(Uo).nonempty().superRefine(((e,t)=>{new Set(e).size!==e.length&&t.addIssue({code:vo.z.ZodIssueCode.custom,message:"Schema type arrays must not contain duplicates"})}))]);function Ho(e,t){if(void 0!==e.required)if(void 0===e.properties)for(const r of e.required)t.addIssue({code:vo.z.ZodIssueCode.custom,message:`Required property "${r}" must be declared in properties`,path:["required"]});else for(const r of e.required)r in e.properties||t.addIssue({code:vo.z.ZodIssueCode.custom,message:`Required property "${r}" must be declared in properties`,path:["required"]});void 0!==e.minLength&&void 0!==e.maxLength&&e.minLength>e.maxLength&&t.addIssue({code:vo.z.ZodIssueCode.custom,message:"minLength must be less than or equal to maxLength",path:["minLength"]}),void 0!==e.minimum&&void 0!==e.maximum&&e.minimum>e.maximum&&t.addIssue({code:vo.z.ZodIssueCode.custom,message:"minimum must be less than or equal to maximum",path:["minimum"]}),void 0!==e.exclusiveMinimum&&void 0!==e.exclusiveMaximum&&e.exclusiveMinimum>=e.exclusiveMaximum&&t.addIssue({code:vo.z.ZodIssueCode.custom,message:"exclusiveMinimum must be less than exclusiveMaximum",path:["exclusiveMinimum"]}),void 0!==e.minItems&&void 0!==e.maxItems&&e.minItems>e.maxItems&&t.addIssue({code:vo.z.ZodIssueCode.custom,message:"minItems must be less than or equal to maxItems",path:["minItems"]}),void 0!==e.minProperties&&void 0!==e.maxProperties&&e.minProperties>e.maxProperties&&t.addIssue({code:vo.z.ZodIssueCode.custom,message:"minProperties must be less than or equal to maxProperties",path:["minProperties"]})}const Wo=vo.z.lazy((()=>vo.z.object({type:Bo.optional(),title:vo.z.string().optional(),description:vo.z.string().optional(),default:vo.z.unknown().optional(),enum:vo.z.array(vo.z.any()).nonempty().optional(),const:vo.z.unknown().optional(),properties:vo.z.record(vo.z.string(),Wo).optional(),required:vo.z.array(vo.z.string()).optional(),additionalProperties:vo.z.union([vo.z.boolean(),Wo]).optional(),items:vo.z.union([Wo,vo.z.array(Wo)]).optional(),minLength:vo.z.number().int().nonnegative().optional(),maxLength:vo.z.number().int().nonnegative().optional(),minimum:vo.z.number().optional(),maximum:vo.z.number().optional(),exclusiveMinimum:vo.z.number().optional(),exclusiveMaximum:vo.z.number().optional(),multipleOf:vo.z.number().positive().optional(),minItems:vo.z.number().int().nonnegative().optional(),maxItems:vo.z.number().int().nonnegative().optional(),uniqueItems:vo.z.boolean().optional(),minProperties:vo.z.number().int().nonnegative().optional(),maxProperties:vo.z.number().int().nonnegative().optional()}).strict().superRefine(Ho)));function zo(e){const t=Wo.superRefine(((e,t)=>{"object"!==e.type&&t.addIssue({code:vo.z.ZodIssueCode.custom,message:'Plugin variable schemas must declare type "object"',path:["type"]})})).safeParse(e);return t.success?{success:!0,data:t.data}:t}const qo=vo.z.unknown().superRefine(((e,t)=>{const r=zo(e);if(!r.success)for(const e of r.error.issues)t.addIssue(e)})).transform((e=>e)),Go=(vo.z.object({name:vo.z.string().min(1).transform((e=>e.toLowerCase())).refine((e=>Ao.test(e)),"Name must be kebab-case (lowercase alphanumeric with hyphens and periods)"),displayName:vo.z.string().optional(),source:Fo,description:vo.z.string().optional(),version:vo.z.string().optional(),author:Lo.optional(),publisher:vo.z.string().min(1).optional(),homepage:vo.z.string().url().optional(),repository:vo.z.string().url().optional(),license:vo.z.string().optional(),keywords:vo.z.array(vo.z.string()).optional(),logo:vo.z.string().optional(),category:vo.z.string().optional(),tags:vo.z.array(vo.z.string()).optional(),strict:vo.z.boolean().default(!0),commands:vo.z.union([vo.z.string(),vo.z.array(vo.z.string())]).optional(),agents:vo.z.union([vo.z.string(),vo.z.array(vo.z.string())]).optional(),skills:vo.z.union([vo.z.string(),vo.z.array(vo.z.string())]).optional(),rules:vo.z.union([vo.z.string(),vo.z.array(vo.z.string())]).optional(),hooks:vo.z.union([vo.z.string(),vo.z.record(vo.z.unknown())]).optional(),variables:qo.optional(),mcpServers:vo.z.union([vo.z.string(),vo.z.record(vo.z.unknown()),vo.z.array(vo.z.union([vo.z.string(),vo.z.record(vo.z.unknown())]))]).optional()}),vo.z.object({description:vo.z.string().optional(),version:vo.z.string().optional(),pluginRoot:vo.z.string().optional()}),vo.z.object({name:vo.z.string().min(1).regex(Ao,"Name must be kebab-case (lowercase alphanumeric with hyphens and periods)"),displayName:vo.z.string().optional(),description:vo.z.string().optional(),version:vo.z.string().optional(),author:Lo.optional(),publisher:vo.z.string().min(1).optional(),homepage:vo.z.string().url().optional(),repository:vo.z.string().url().optional(),license:vo.z.string().optional(),logo:vo.z.string().optional(),keywords:vo.z.array(vo.z.string()).optional(),commands:vo.z.union([vo.z.string(),vo.z.array(vo.z.string())]).optional(),agents:vo.z.union([vo.z.string(),vo.z.array(vo.z.string())]).optional(),skills:vo.z.union([vo.z.string(),vo.z.array(vo.z.string())]).optional(),rules:vo.z.union([vo.z.string(),vo.z.array(vo.z.string())]).optional(),hooks:vo.z.union([vo.z.string(),vo.z.record(vo.z.unknown())]).optional(),variables:qo.optional(),mcpServers:vo.z.union([vo.z.string(),vo.z.record(vo.z.unknown()),vo.z.array(vo.z.union([vo.z.string(),vo.z.record(vo.z.unknown())]))]).optional()}));function Vo(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function Jo(e){return e.trim().toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function Ko(e,t){if(Vo(e)&&"string"==typeof e.name){const t=Jo(e.name);if(t.length>0)return t}return function(e){var t;const r=void 0!==e.repoName?Jo(e.repoName):"";return r.length>0?r:`cursor-marketplace-${null!==(t=e.fallbackId)&&void 0!==t?t:(0,o.randomUUID)()}`}(t)}function Yo(e){if(Vo(e)&&Vo(e.owner)){const t="string"==typeof e.owner.name&&e.owner.name.trim().length>0?e.owner.name:"Unknown",r="string"==typeof e.owner.email&&e.owner.email.trim().length>0?e.owner.email:void 0;return Object.assign({name:t},void 0!==r?{email:r}:{})}return{name:"Unknown"}}function Zo(e){return"string"==typeof e?e:void 0}function Xo(e){if(!Array.isArray(e))return;const t=e.filter((e=>"string"==typeof e));return t.length>0?t:void 0}function Qo(e){return"string"==typeof e?e:Xo(e)}function es(e){if(!Vo(e)||!Vo(e.metadata))return;const t={description:Zo(e.metadata.description),version:Zo(e.metadata.version),pluginRoot:Zo(e.metadata.pluginRoot)};return void 0!==t.description||void 0!==t.version||void 0!==t.pluginRoot?t:void 0}function ts(e){if(!Vo(e))return;const t=Zo(e.name);if(void 0===t||0===t.length)return;const r=Zo(e.email);return Object.assign({name:t},void 0!==r?{email:r}:{})}function rs(e){if("string"==typeof e||Vo(e))return e;if(Array.isArray(e)){const t=e.filter((e=>"string"==typeof e||Vo(e)));return t.length>0?t:void 0}}function ns(e){if("string"==typeof e||Vo(e))return e}function os(e){if(void 0===e)return;const t=zo(e);return t.success?t.data:void 0}function ss(e,t={}){if(e.length>Io)return{success:!1,error:"Manifest exceeds maximum size of 10485760 bytes"};let r;try{r=JSON.parse(e)}catch(e){return{success:!1,error:`Invalid JSON: ${e instanceof Error?e.message:"Unknown error"}`}}if(!Vo(r))return{success:!1,error:"Invalid marketplace manifest: expected a JSON object"};const n=[],o=[],s=new Set;return(Array.isArray(r.plugins)?r.plugins:[]).forEach(((e,t)=>{const r=function(e,t){if(!Vo(e))return{skippedEntry:{index:t,error:`Plugin entry at index ${t} is not an object`}};const r="string"==typeof(n=e.source)?n:Vo(n)?"github"===n.source&&"string"==typeof n.repo&&n.repo.length>0?{source:"github",repo:n.repo,ref:Zo(n.ref),sha:Zo(n.sha)}:("url"===n.source||void 0===n.source)&&"string"==typeof n.url&&n.url.length>0?{source:"url",url:n.url,ref:Zo(n.ref),sha:Zo(n.sha)}:"git-subdir"===n.source&&"string"==typeof n.url&&n.url.length>0&&"string"==typeof n.path&&n.path.length>0?{source:"git-subdir",url:n.url,path:n.path,ref:Zo(n.ref),sha:Zo(n.sha)}:"string"==typeof n.repo&&n.repo.length>0?{source:"github",repo:n.repo,ref:Zo(n.ref),sha:Zo(n.sha)}:void 0:void 0;var n;if(void 0===r){const r=Zo(e.name);return{skippedEntry:Object.assign(Object.assign({index:t},void 0!==r&&r.length>0?{name:r}:{}),{error:`Plugin entry at index ${t} has no usable source`})}}const o=("string"==typeof e.name?Jo(e.name):"")||function(e){var t;if("string"==typeof e){const t=Jo((0,a.basename)(e));return t.length>0?t:void 0}if("github"===e.source){const r=Jo(null!==(t=e.repo.split("/").at(-1))&&void 0!==t?t:"");return r.length>0?r:void 0}if("git-subdir"===e.source){const t=Jo((0,a.basename)(e.path));return t.length>0?t:void 0}let r=e.url;try{r=new URL(e.url).pathname}catch(e){}for(;r.endsWith("/");)r=r.slice(0,-1);r.toLowerCase().endsWith(".git")&&(r=r.slice(0,-4));const n=Jo((0,a.basename)(r));return n.length>0?n:void 0}(r);return void 0===o?{skippedEntry:{index:t,error:`Plugin entry at index ${t} has no usable name`}}:{entry:{name:o,displayName:Zo(e.displayName),source:r,description:Zo(e.description),version:Zo(e.version),author:ts(e.author),publisher:Zo(e.publisher),homepage:Zo(e.homepage),repository:Zo(e.repository),license:Zo(e.license),keywords:Xo(e.keywords),logo:Zo(e.logo),category:Zo(e.category),tags:Xo(e.tags),strict:"boolean"!=typeof e.strict||e.strict,commands:Qo(e.commands),agents:Qo(e.agents),skills:Qo(e.skills),rules:Qo(e.rules),hooks:ns(e.hooks),variables:os(e.variables),mcpServers:rs(e.mcpServers)}}}(e,t);"skippedEntry"in r?o.push(r.skippedEntry):s.has(r.entry.name)?o.push({index:t,name:r.entry.name,error:`Duplicate plugin name "${r.entry.name}" at index ${t}`}):(s.add(r.entry.name),n.push(r.entry))})),{success:!0,data:{name:Ko(r,t),owner:Yo(r),description:Zo(r.description),plugins:n,metadata:es(r),skippedPluginEntries:o}}}function is(e){if(e.length>Io)return{success:!1,error:"Manifest exceeds maximum size of 10485760 bytes"};let t;try{t=JSON.parse(e)}catch(e){return{success:!1,error:`Invalid JSON: ${e instanceof Error?e.message:"Unknown error"}`}}const r=Go.safeParse(t);return r.success?{success:!0,data:r.data}:{success:!1,error:`Invalid plugin manifest: ${r.error.errors.map((e=>`${e.path.join(".")}: ${e.message}`)).join(", ")}`,details:r.error}}function as(e,t){if("string"!=typeof e)return null;let r=e;if(r.startsWith("./")&&(r=r.slice(2)),void 0!==t){let e=t;e.startsWith("./")&&(e=e.slice(2)),e.endsWith("/")&&(e=e.slice(0,-1)),r=`${e}/${r}`}return r||"."}function ls(e){return!e.includes("..")&&!(0,a.isAbsolute)(e)&&!e.includes("://")}new To.Ajv({allErrors:!0,strict:!1,validateSchema:!0});var cs=r("../../node_modules/.pnpm/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/main.js");const us=/\$\{([^:}]+)(?::-([^}]*))?\}/g;function ds(e,t){const r="function"==typeof t?t:function(e){const t=new Map(Object.entries(e).map((([e,t])=>[e.toLowerCase(),t])));return r=>{var n;return null!==(n=e[r])&&void 0!==n?n:t.get(r.toLowerCase())}}(t);return ps(e,r)}function ps(e,t){if("string"==typeof e)return e.replace(us,((e,r,n)=>{const o=t(r);return void 0!==o?o:void 0!==n?n:e}));if(Array.isArray(e))return e.map((e=>ps(e,t)));if(null!==e&&"object"==typeof e){const r={};for(const[n,o]of Object.entries(e))r[n]=ps(o,t);return r}return e}function hs(e,t){return e.replace(/\$\{CLAUDE_PLUGIN_ROOT\}/g,(()=>t)).replace(/\$\{CURSOR_PLUGIN_ROOT\}/g,(()=>t))}const ms=[".mcp.json","mcp.json"],fs=new Set(["author","owner","source","metadata"].map((e=>e.toLowerCase())));function gs(e,t){if(!function(e){return fs.has(e.toLowerCase())}(e))return!1;if("object"!=typeof t||null===t)return!1;const r=t;switch(e.toLowerCase()){case"author":case"owner":return"string"==typeof r.name;case"source":return"string"==typeof r.source||"string"==typeof r.repo||"string"==typeof r.path||"string"==typeof r.ref||"string"==typeof r.sha;case"metadata":return"string"==typeof r.description||"string"==typeof r.version||"string"==typeof r.pluginRoot;default:return!1}}function vs(e){return"object"==typeof e&&null!==e&&("command"in e||"url"in e)}function ys(e,t,r){if(!e.mcpServers)return e;const n={};for(const[r,o]of Object.entries(e.mcpServers)){const e=Object.assign({},o);if("string"==typeof o.command&&(e.command=hs(o.command,t)),Array.isArray(o.args)&&(e.args=o.args.map((e=>"string"==typeof e?hs(e,t):e))),o.env&&"object"==typeof o.env){const r={};for(const[e,n]of Object.entries(o.env))r[e]="string"==typeof n?hs(n,t):n;e.env=r}"string"==typeof o.cwd&&(e.cwd=hs(o.cwd,t)),n[r]=e}return function(e,t){const r=null==t?void 0:t.cloudAgentEnvLookup,n=null==t?void 0:t.configuredVariables;return ds(e,void 0!==r?r:e=>{const t=process.env[e];if(void 0!==t)return t;const r=null==n?void 0:n[e];return null!=r?"string"==typeof r?r:String(r):void 0})}(Object.assign(Object.assign({},e),{mcpServers:n}),r)}function ws(e,t,r){try{const n=(0,cs.qg)(e),o=bo.safeParse(n);if(o.success&&o.data.mcpServers&&Object.keys(o.data.mcpServers).length>0)return ys(o.data,t,r);const s={};for(const[e,t]of Object.entries(n))"mcpServers"!==e&&!gs(e,t)&&vs(t)&&(s[e]=t);if(Object.keys(s).length>0){const e=bo.safeParse({mcpServers:s});if(e.success)return ys(e.data,t,r)}return null}catch(e){return null}}function bs(e,t,r,n,o,s){var i,a;const l=[],c=e.mcpServers;if(!c)return l;for(const[e,u]of Object.entries(c)){const c=u,d=`plugin-${n}-${e}`,p=e;c.url?l.push({identifier:d,name:p,marketplace:t,marketplaceId:r,pluginName:n,pluginId:o,pluginSource:s,type:"streamableHttp",url:c.url,headers:c.headers,auth:c.auth,enabledTools:c.enabledTools,projectManaged:!1,pluginManaged:!0}):c.command&&l.push({identifier:d,name:p,marketplace:t,marketplaceId:r,pluginName:n,pluginId:o,pluginSource:s,type:"stdio",command:c.command,args:null!==(i=c.args)&&void 0!==i?i:[],env:null!==(a=c.env)&&void 0!==a?a:{},cwd:c.cwd,envFile:c.envFile,enabledTools:c.enabledTools,projectManaged:!1,pluginManaged:!0})}return l}var Ss=r("node:stream"),ks=r("node:stream/promises"),Es=r("node:zlib"),xs=r("../../node_modules/.pnpm/tar@7.5.7/node_modules/tar/dist/esm/index.js"),Cs=function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}l((n=n.apply(e,t||[])).next())}))};const _s=".cache-complete";function Ps(e){return e.replace(/[^a-zA-Z0-9_-]/g,"_")}function Rs(e){return e.replace(/[^a-zA-Z0-9_-]/g,"_")}function Ts(e){return(0,m.Nz)(e)}class Is{constructor(e,t){var r,n;const o=null!==(r=null!=e?e:process.env.HOME)&&void 0!==r?r:"";this.cacheRoot=null!==(n=null==t?void 0:t.cacheRoot)&&void 0!==n?n:(0,a.join)(o,".cursor","plugins/cache")}getCacheDir(e){return function(e,t){return function(e,t,r,n){const o=[e,t,r];return void 0!==n&&o.push(n),(0,a.join)(...o)}(e,Ps(t.marketplaceSlug),Rs(t.pluginId),void 0!==t.version?Ts(t.version):void 0)}(this.cacheRoot,e)}isCached(e){return Cs(this,void 0,void 0,(function*(){const t=this.getCacheDir(e);try{const e=(0,a.join)(t,_s);return(yield(0,En.stat)(e)).isFile()}catch(e){return!1}}))}extractToCache(e){return Cs(this,void 0,void 0,(function*(){const t=this.getCacheDir(e);yield(0,En.mkdir)(t,{recursive:!0});const r=Ss.Readable.from(e.tarball);return yield(0,ks.pipeline)(r,(0,Es.createGunzip)(),(0,xs.o6)({cwd:t,strip:1})),yield this.markCacheComplete(e),t}))}listCachedVersions(e){return Cs(this,void 0,void 0,(function*(){const t=Ps(e.marketplaceSlug),r=Rs(e.pluginId),n=(0,a.join)(this.cacheRoot,t,r);try{return(yield(0,En.readdir)(n,{withFileTypes:!0})).filter((e=>e.isDirectory())).map((e=>e.name))}catch(e){return[]}}))}removeVersion(e){return Cs(this,void 0,void 0,(function*(){const t=this.getCacheDir(e);try{yield(0,En.rm)(t,{recursive:!0,force:!0})}catch(e){}}))}pruneOldVersions(e){return Cs(this,void 0,void 0,(function*(){const t=yield this.listCachedVersions({marketplaceSlug:e.marketplaceSlug,pluginId:e.pluginId}),r=new Set(e.keepVersions.map((e=>Ts(e))));for(const n of t)r.has(n)||(yield this.removeVersion({marketplaceSlug:e.marketplaceSlug,pluginId:e.pluginId,version:n}))}))}markCacheComplete(e){return Cs(this,void 0,void 0,(function*(){const t=this.getCacheDir(e);yield(0,En.writeFile)((0,a.join)(t,_s),"")}))}}function As(e,t){var r;const n=null!==(r=e.releaseTag)&&void 0!==r?r:t;if(e.releaseRepo&&e.releaseAsset&&n)return{kind:"release",releaseRepo:e.releaseRepo,releaseAsset:e.releaseAsset,releaseTag:n}}var Os=r("node:child_process");const Ds=(0,go.promisify)(Os.execFile);function Ms(e,t){return r=this,n=void 0,s=function*(){const r=function(e){var t;const r=Object.assign(Object.assign({},process.env),{GIT_TERMINAL_PROMPT:"0",GIT_ASKPASS:void 0,VSCODE_GIT_ASKPASS_NODE:void 0,VSCODE_GIT_ASKPASS_MAIN:void 0,VSCODE_GIT_ASKPASS_EXTRA_ARGS:void 0,GCM_INTERACTIVE:"Never"});if(delete r.GIT_CONFIG_NOSYSTEM,!0===(null==e?void 0:e.sshBatchMode)){const e=(null===(t=process.env.GIT_SSH_COMMAND)||void 0===t?void 0:t.trim())||"ssh";r.GIT_SSH_COMMAND=`${e} -oBatchMode=yes`}if(void 0!==(null==e?void 0:e.extraGitConfig)){const t=Object.entries(e.extraGitConfig);r.GIT_CONFIG_COUNT=String(t.length);for(const[e,[n,o]]of t.entries())r[`GIT_CONFIG_KEY_${e}`]=n,r[`GIT_CONFIG_VALUE_${e}`]=o}return{cwd:null==e?void 0:e.cwd,env:r}}({cwd:null==t?void 0:t.cwd,sshBatchMode:null==t?void 0:t.sshBatchMode,extraGitConfig:null==t?void 0:t.extraGitConfig});return Ds("git",["-c","credential.interactive=false",...e],r)},new((o=void 0)||(o=Promise))((function(e,t){function i(e){try{l(s.next(e))}catch(e){t(e)}}function a(e){try{l(s.throw(e))}catch(e){t(e)}}function l(t){var r;t.done?e(t.value):(r=t.value,r instanceof o?r:new o((function(e){e(r)}))).then(i,a)}l((s=s.apply(r,n||[])).next())}));var r,n,o,s}var js=function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}l((n=n.apply(e,t||[])).next())}))};const Ns=/^[0-9a-f]{7,40}$/i,$s=/^[0-9a-f]{40}$/i;function Fs(e){var t,r;if(void 0===e||""===e)return;const n=e.split(/\r?\n/).map((e=>{const[t,r]=e.split("\t");if(t&&r&&/^[0-9a-f]{40}$/i.test(t))return{sha:t,refName:r}})).filter((e=>void 0!==e));return 0!==n.length?null!==(r=null===(t=n.find((e=>e.refName.endsWith("^{}"))))||void 0===t?void 0:t.sha)&&void 0!==r?r:n[0].sha:void 0}function Ls(e,t,r){return js(this,void 0,void 0,(function*(){const n=t.trim();if($s.test(n))return{fullSha:n.toLowerCase()};if(Ns.test(n)){try{const t=yield function(e,t,r){return js(this,void 0,void 0,(function*(){var n;const{stdout:o}=yield Ms(["ls-remote",e,`refs/heads/${t}`,`refs/tags/${t}`,`refs/tags/${t}^{}`],{sshBatchMode:null==r?void 0:r.sshBatchMode,extraGitConfig:null==r?void 0:r.extraGitConfig});return null===(n=Fs(o))||void 0===n?void 0:n.toLowerCase()}))}(e,n,r);if(t)return{fullSha:t}}catch(e){}return{fullSha:n.toLowerCase()}}let o;try{if("HEAD"===n.toUpperCase()){const t=yield Ms(["ls-remote","--symref",e,"HEAD"],{sshBatchMode:null==r?void 0:r.sshBatchMode,extraGitConfig:null==r?void 0:r.extraGitConfig}),n=Fs(t.stdout);if(!n)throw new Error(`git ls-remote did not return a resolvable commit for HEAD (${e})`);return{fullSha:n.toLowerCase(),headSymrefStdout:t.stdout}}o=(yield Ms(["ls-remote",e,n],{sshBatchMode:null==r?void 0:r.sshBatchMode,extraGitConfig:null==r?void 0:r.extraGitConfig})).stdout}catch(t){const r=t instanceof Error?t.message:String(t),o=new Error(`Failed to resolve git ref "${n}" for ${e}: ${r}`);throw o.cause=t,o}const s=Fs(o);if(!s)throw new Error(`git ls-remote did not return a resolvable commit for ref "${n}" (${e})`);return{fullSha:s.toLowerCase()}}))}function Us(e){const t=e.toLowerCase();return"github.com"===t||t.endsWith(".github.com")?"github":"gitlab.com"===t||t.endsWith(".gitlab.com")?"gitlab":"bitbucket.org"===t||t.endsWith(".bitbucket.org")?"bitbucket":"generic"}function Bs(e){let t;try{const r=e.startsWith("git@")?`ssh://${e.replace(":","/")}`:e;t=new URL(r.includes("://")?r:`https://${r}`)}catch(e){return null}const r=t.pathname.replace(/\.git$/,"").split("/").filter(Boolean);if(r.length<2)return null;const[n,o]=r,s=t.hostname;return{provider:Us(s),owner:n,repo:o,host:s}}function Hs(e){const t=e.toLowerCase();return"github.com"===t||t.endsWith(".github.com")?"github.com":e}function Ws(e){return!e.operatingSystems||0===e.operatingSystems.length||e.operatingSystems.includes(function(){const e=(0,i.platform)();return"win32"===e?"Windows":"darwin"===e?"Macintosh":"Linux"}())}function zs(e){return/[\n\r:#[\]{}&*!|>'"%@`]/.test(e)||e.startsWith(" ")||e.endsWith(" ")?`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:e}function qs(e,t){const r=(0,a.resolve)(e),n=(0,a.resolve)(e,t),o=(0,a.relative)(r,n);if(o.startsWith("..")||(0,a.isAbsolute)(o))throw new Error(`Invalid subPath: path traversal not allowed (${JSON.stringify(t)})`);return n}var Gs=function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}l((n=n.apply(e,t||[])).next())}))};const Vs=new Set(["con","prn","aux","nul","com1","com2","com3","com4","com5","com6","com7","com8","com9","lpt1","lpt2","lpt3","lpt4","lpt5","lpt6","lpt7","lpt8","lpt9"]);function Js(e){const t=(0,m.Nz)(e).replace(/[. ]+$/g,"");return""===t||"."===t||".."===t?"_":Vs.has(t.toLowerCase())?`_${t}`:t}const Ks=["terminal prompts disabled","could not read username","host key verification failed","could not read from remote repository","permission denied","repository not found","user cancelled dialog","spawn git enoent","authentication failed","unable to get password from user"],Ys=["enotempty: directory not empty, rename","/_staging/"],Zs=["upload-pack: not our ref","server does not allow request for unadvertised object"];function Xs(e){const t=String(e).toLowerCase().replaceAll("\\","/");return Ks.some((e=>t.includes(e)))?"user_git_access":Ys.every((e=>t.includes(e)))?"local_cache_race":Zs.some((e=>t.includes(e)))?"stale_pinned_ref":"infrastructure"}function Qs(e){const t=Bs(e);if(null===t)throw new Error(`Invalid git URL: ${e}`);return{host:Hs(t.host.replace(/^www\./i,"")),owner:t.owner.toLowerCase(),repo:t.repo.toLowerCase()}}const ei=new Map;class ti{constructor(e,t){this.cacheRoot=e,this.options=t,this.manifestCache=new Map}cloneResolvedRef(e,t,r,n){return Gs(this,void 0,void 0,(function*(){var o;const s={cwd:e,sshBatchMode:null==n?void 0:n.sshBatchMode,extraGitConfig:null===(o=this.options)||void 0===o?void 0:o.extraGitConfig};yield Ms(["init"],s),yield Ms(["fetch","--depth","1",t,r],s),yield Ms(["checkout","FETCH_HEAD"],s)}))}createStagingDir(){return Gs(this,void 0,void 0,(function*(){const e=(0,a.join)(this.cacheRoot,"_staging",(0,o.randomUUID)());return yield(0,En.mkdir)(e,{recursive:!0}),e}))}moveToCanonicalDir(e,t){return Gs(this,void 0,void 0,(function*(){return yield(0,En.mkdir)((0,a.dirname)(t),{recursive:!0}),yield(0,En.rm)(t,{recursive:!0,force:!0}),yield(0,En.rename)(e,t),t}))}cleanStaleStagingDirs(){return Gs(this,void 0,void 0,(function*(){const e=(0,a.join)(this.cacheRoot,"_staging");try{const t=yield(0,En.readdir)(e,{withFileTypes:!0}),r=Date.now();yield Promise.all(t.filter((e=>e.isDirectory())).map((t=>Gs(this,void 0,void 0,(function*(){try{const n=(0,a.join)(e,t.name),o=yield(0,En.stat)(n);r-o.mtimeMs>ti.STALE_STAGING_THRESHOLD_MS&&(yield(0,En.rm)(n,{recursive:!0,force:!0}))}catch(e){}})))))}catch(e){}}))}getLegacyCloneDir(e,t){return(0,a.join)(this.cacheRoot,Js(e),Js(t))}getCanonicalCloneDir(e,t){const{host:r,owner:n,repo:o}=Qs(e);return(0,a.join)(this.cacheRoot,Js(r),Js(n),Js(o),Js(t))}getCanonicalRepoRootDir(e){const{host:t,owner:r,repo:n}=Qs(e);return(0,a.join)(this.cacheRoot,Js(t),Js(r),Js(n))}pruneSiblingCloneDirs(e,t,r){return Gs(this,void 0,void 0,(function*(){const n=this.getCanonicalRepoRootDir(e),o=Js(t);try{const e=yield(0,En.readdir)(n,{withFileTypes:!0});yield Promise.all(e.filter((e=>e.isDirectory()&&e.name!==o)).map((e=>(0,En.rm)((0,a.join)(n,e.name),{recursive:!0,force:!0}))))}catch(e){}if(void 0!==r)try{yield(0,En.rm)(r,{recursive:!0,force:!0})}catch(e){}}))}ensureCloned(e,t,r){return Gs(this,arguments,void 0,(function*(e,t,r,n=yo){const o=this.ensureClonedSerialized(e,t,r,n);return(0,m.dY)(o,3e4,`ensureCloned timed out after 30000ms for ${t} @ ${r}`)}))}ensureClonedSerialized(e,t,r,n){return Gs(this,void 0,void 0,(function*(){const o=this.getCanonicalRepoRootDir(t),s=`${this.cacheRoot}:${o}`,i=ei.get(s),a=(null!=i?i:Promise.resolve("")).catch((()=>{})).then((()=>this.ensureClonedImpl(e,t,r,n)));ei.set(s,a);try{return yield a}finally{ei.get(s)===a&&ei.delete(s)}}))}ensureClonedImpl(e,t,r,n){return Gs(this,void 0,void 0,(function*(){var o,s,i;n.log("info",`MarketplaceCacheManager: Ensuring cloned ${e} at ${t}@${r}`,{marketplaceId:e,gitUrl:t,ref:r});const a=r.trim();let l,c=t.startsWith("git@")||t.startsWith("ssh://")?null:function(e){const t=Bs(e);return null!==t&&function(e){switch(e.provider){case"github":return!0;case"generic":return null===function(e){const t=e.toLowerCase();return t.includes("gitlab")?"GitLab":t.includes("bitbucket")?"Bitbucket":t.includes("gitea")||t.includes("codeberg")?"Gitea/Codeberg":t.includes("azure")&&t.includes("dev")?"Azure DevOps":null}(e.host);case"gitlab":case"bitbucket":return!1;default:return e.provider,!1}}(t)?`git@${t.host}:${t.owner}/${t.repo}.git`:null}(t);if(null!==c)try{l=(yield Ls(c,a,{sshBatchMode:!0,extraGitConfig:null===(o=this.options)||void 0===o?void 0:o.extraGitConfig})).fullSha}catch(e){n.log("error","Failed to resolve remote ref using SSH URL, falling back to HTTPS",{gitUrl:t,ref:r,error:String(e),errorCategory:Xs(e)}),c=null,l=(yield Ls(t,a,{extraGitConfig:null===(s=this.options)||void 0===s?void 0:s.extraGitConfig})).fullSha}else l=(yield Ls(t,a,{extraGitConfig:null===(i=this.options)||void 0===i?void 0:i.extraGitConfig})).fullSha;const u=this.getCanonicalCloneDir(t,l),d=this.getLegacyCloneDir(e,a);n.log("info",`MarketplaceCacheManager: Resolved clone directory for ${e} at ${t}@${r} to ${u}`,{marketplaceId:e,resolvedRef:l,originalRef:a});const p=performance.now(),h=(e,t)=>{n.increment(`marketplace_cache_manager.ensure_cloned.${e}`,1,t),n.distribution(`marketplace_cache_manager.ensure_cloned.${e}.duration`,performance.now()-p,t)};return(yield this.isCloneComplete(u))?(yield this.pruneSiblingCloneDirs(t,l,d),h("cache_hit"),u):(n.increment("marketplace_cache_manager.ensure_cloned.cache_miss",1),this.cloneViaStaging(u,t,c,l,d,r,n,h))}))}cloneViaStaging(e,t,r,n,o,s,i,a){return Gs(this,void 0,void 0,(function*(){yield this.cleanStaleStagingDirs();const l=yield this.createStagingDir();i.log("info",`MarketplaceCacheManager: Cloning ${t}@${s} into staging directory: ${l}`,{gitUrl:t,ref:s,cloneDir:e});try{if(null!==r)try{yield this.cloneResolvedRef(l,r,n,{sshBatchMode:!0})}catch(e){i.log("error","Falling back to HTTPS clone due to SSH clone failure",{gitUrl:t,ref:s,error:String(e),errorCategory:Xs(e)}),yield(0,En.rm)(l,{recursive:!0,force:!0}),yield(0,En.mkdir)(l,{recursive:!0}),yield this.cloneResolvedRef(l,t,n)}else yield this.cloneResolvedRef(l,t,n);const c=yield this.moveToCanonicalDir(l,e);return yield this.pruneSiblingCloneDirs(t,n,o),a("cache_write_success"),c}catch(e){const r=Xs(e);throw a("error",{error_category:r}),i.log("error","Failed to clone marketplace repository via staging clone",{gitUrl:t,ref:s,error:String(e),errorCategory:r}),i.captureException(e,{error_type:"clone_marketplace_repository",error_category:r}),e}finally{try{yield(0,En.rm)(l,{recursive:!0,force:!0})}catch(e){}}}))}isCloneComplete(e){return Gs(this,void 0,void 0,(function*(){try{if(!(yield(0,En.stat)(e)).isDirectory())return!1;const t=yield(0,En.readdir)(e);return t.includes(".git")&&t.length>1}catch(e){return!1}}))}getPluginDir(e,t){return qs(e,t)}copyPluginToDir(e,t){return Gs(this,void 0,void 0,(function*(){yield(0,En.mkdir)(t,{recursive:!0}),yield(0,En.cp)(e,t,{recursive:!0,verbatimSymlinks:!0})}))}readManifest(e){return Gs(this,arguments,void 0,(function*(e,t={}){var r;const n=function(e,t){var r,n;return JSON.stringify({clonePath:e,repoName:null!==(r=t.repoName)&&void 0!==r?r:null,fallbackId:null!==(n=t.fallbackId)&&void 0!==n?n:null})}(e,t);if(this.manifestCache.has(n))return null!==(r=this.manifestCache.get(n))&&void 0!==r?r:null;const o=yield function(e){return Gs(this,arguments,void 0,(function*(e,t={}){for(const r of Mo){const n=(0,a.join)(e,r);let o;try{o=yield(0,En.readFile)(n,"utf-8")}catch(e){continue}const s=ss(o,t);if(s.success)return s.data}return null}))}(e,t);return this.manifestCache.set(n,o),o}))}resolvePluginPath(e,t){return Gs(this,void 0,void 0,(function*(){var r;const n=yield this.readManifest(e);if(!n)return null;const o=n.plugins.find((e=>e.name===t.toLowerCase()));if(!o)return null;const s=as(o.source,null===(r=n.metadata)||void 0===r?void 0:r.pluginRoot);return s&&ls(s)?s:null}))}discoverPlugins(e){return Gs(this,void 0,void 0,(function*(){const t=yield this.readManifest(e);return t?function(e){var t;const r=[],n=function(e,t){var r,n,o;const s=[];for(const i of e){const e=i.source;if("string"!=typeof e)switch(e.source){case"github":s.push({entry:i,kind:"external-github",externalUrl:`https://github.com/${e.repo}.git`,externalRef:e.ref,externalSha:e.sha,effectiveRef:null!==(r=e.sha)&&void 0!==r?r:e.ref});break;case"url":s.push({entry:i,kind:"external-url",externalUrl:e.url,externalRef:e.ref,externalSha:e.sha,effectiveRef:null!==(n=e.sha)&&void 0!==n?n:e.ref});break;case"git-subdir":s.push({entry:i,kind:"external-git-subdir",externalUrl:e.url,externalRef:e.ref,externalSha:e.sha,effectiveRef:null!==(o=e.sha)&&void 0!==o?o:e.ref,subdirPath:e.path})}else{const r=as(e,t);null!==r?s.push({entry:i,kind:"local",localPath:r}):s.push({entry:i,kind:"unresolvable",rawSource:e})}}return s}(e.plugins,null===(t=e.metadata)||void 0===t?void 0:t.pluginRoot);for(const e of n){const{name:t,displayName:n,description:o,version:s}=e.entry,i={name:t,displayName:n,description:o,version:s};switch(e.kind){case"local":ls(e.localPath)&&r.push(Object.assign(Object.assign({},i),{sourceType:"local",gitPath:e.localPath}));break;case"external-github":r.push(Object.assign(Object.assign({},i),{sourceType:"github",gitUrl:e.externalUrl,gitRef:e.externalRef,sha:e.externalSha}));break;case"external-url":r.push(Object.assign(Object.assign({},i),{sourceType:"url",gitUrl:e.externalUrl,gitRef:e.externalRef,sha:e.externalSha}));break;case"external-git-subdir":r.push(Object.assign(Object.assign({},i),{sourceType:"git-subdir",gitUrl:e.externalUrl,gitRef:e.externalRef,sha:e.externalSha,subdirPath:e.subdirPath}))}}return r}(t):[]}))}}ti.STALE_STAGING_THRESHOLD_MS=3e5;var ri=function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}l((n=n.apply(e,t||[])).next())}))};const ni=(0,go.debuglog)("cursor-plugins");function oi(e){var t;const r=null===(t=e.name)||void 0===t?void 0:t.trim();return void 0!==r&&r.length>0?r:e.pluginId}function si(e,t){return void 0!==(null==e?void 0:e.marketplace)?e.marketplace:void 0!==(null==e?void 0:e.marketplaceId)?(null!=t?t:[]).find((t=>void 0!==t.id&&String(t.id)===String(e.marketplaceId))):void 0}function ii(e,t){var r,n;if(e.pinnedGitRef)return e.pinnedGitRef;if(null===(r=e.plugin)||void 0===r?void 0:r.gitRef)return e.plugin.gitRef;const o=si(e.plugin,t),s=null===(n=e.plugin)||void 0===n?void 0:n.gitUrl,i=null==o?void 0:o.gitUrl;return s&&i&&s!==i||!(null==o?void 0:o.gitRef)?"main":o.gitRef}const ai="backend-git://";function li(e,t,r){const n=r?`#${encodeURIComponent(r)}`:"";return`${ai}${encodeURIComponent(e)}@${encodeURIComponent(t)}${n}`}const ci="backend-release://";function ui(e){const t=e.tag?`@${encodeURIComponent(e.tag)}`:"";return`${ci}${encodeURIComponent(e.repo)}#${encodeURIComponent(e.asset)}${t}`}function di(e){if(!e.startsWith(ci))return null;const t=e.slice(18),r=t.indexOf("#");if(r<0)return null;const n=decodeURIComponent(t.slice(0,r)),o=t.slice(r+1),s=o.lastIndexOf("@");return{repo:n,asset:s>=0?decodeURIComponent(o.slice(0,s)):decodeURIComponent(o),tag:s>=0?decodeURIComponent(o.slice(s+1)):void 0}}const pi=/^[0-9a-f]{7,40}$/i;function hi(e){const t=Bs(e);return t?`${Hs(t.host.replace(/^www\./i,"")).toLowerCase()}\0${t.owner.toLowerCase()}\0${t.repo.toLowerCase()}`:null}function mi(e,t){if(e.trim()===t.trim())return!0;const r=hi(e),n=hi(t);return null!==r&&r===n}const fi=104857600;function gi(e,t,r,n,s,l){return ri(this,void 0,void 0,(function*(){const c=yield function(e){return ri(this,void 0,void 0,(function*(){const{repo:t,asset:r,tag:n}=e,{apiBase:s,ownerRepo:i,host:a}=function(e){const t=e.split("/");if(3===t.length)return{apiBase:`https://${t[0]}/api/v3`,ownerRepo:`${t[1]}/${t[2]}`,host:t[0]};if(2===t.length)return{apiBase:"https://api.github.com",ownerRepo:e,host:"github.com"};throw new Error(`Invalid release repo format: ${e}`)}(t),l="github.com"===a&&void 0!==e.githubToken&&e.githubToken.length>0?{Authorization:`token ${e.githubToken}`}:{},c=n?`${s}/repos/${i}/releases/tags/${encodeURIComponent(n)}`:`${s}/repos/${i}/releases/latest`,u=yield fetch(c,{headers:Object.assign({Accept:"application/vnd.github.v3+json","User-Agent":"CursorPluginInstaller"},l)});if(!u.ok)throw new Error(`Failed to fetch release from ${c}: ${u.status} ${u.statusText}`);const d=yield u.json(),p=d.assets.find((e=>e.name===r));if(!p){const e=d.assets.map((e=>e.name)).join(", ");throw new Error(`Release asset "${r}" not found. Available assets: ${e}`)}if(p.size>fi)throw new Error(`Release asset "${r}" exceeds maximum size of 104857600 bytes (actual: ${p.size})`);const h=new URL(p.browser_download_url);if("https:"!==h.protocol||!vi(h.hostname,a))throw new Error(`Refusing to download release asset from untrusted host: ${h.hostname}`);const m=yield fetch(p.browser_download_url,{headers:Object.assign({"User-Agent":"CursorPluginInstaller",Accept:"application/octet-stream"},l)});if(!m.ok)throw new Error(`Failed to download release asset: ${m.status} ${m.statusText}`);if(m.url){const e=new URL(m.url);if("https:"!==e.protocol||!vi(e.hostname,a))throw new Error(`Refusing to download release asset: redirected to untrusted host: ${e.hostname}`)}const f=Buffer.from(yield m.arrayBuffer());if(f.byteLength>fi)throw new Error(`Release asset "${r}" actual download size exceeds maximum of 104857600 bytes (actual: ${f.byteLength})`);if(e.expectedSha256){const t=(0,o.createHash)("sha256").update(f).digest("hex");if(t!==e.expectedSha256)throw new Error(`Release asset "${r}" integrity check failed: expected SHA-256 ${e.expectedSha256}, got ${t}`)}return f}))}({repo:e,asset:t,tag:r,expectedSha256:s,githubToken:l}),u=c.byteLength;yield(0,En.mkdir)(n,{recursive:!0});const d=yield(0,En.mkdtemp)((0,a.join)((0,i.tmpdir)(),"release-asset-")),p=(0,a.join)(d,"asset.tar.gz"),h=(0,a.join)(d,"extracted");try{yield(0,En.writeFile)(p,c),yield(0,En.mkdir)(h,{recursive:!0});let e=0,t=0;yield xs.x({file:p,cwd:h,onReadEntry:r=>{if(t++,t>5e4)throw new Error("Release archive contains too many files (>50000).");if(e+=r.size,e>524288e3)throw new Error("Release archive uncompressed size exceeds maximum of 524288000 bytes.");if(u>0&&e/u>100)throw new Error("Release archive has suspicious compression ratio (>100x).")}});const r=yield(0,En.readdir)(h,{withFileTypes:!0}),o=r.filter((e=>e.isDirectory())),s=r.filter((e=>e.isFile()));let i=h;if(1===o.length&&0===s.length){const e=(0,a.join)(h,o[0].name);(yield(0,En.readdir)(e)).some((e=>Do.includes(e)))&&(i=e)}const l=yield(0,En.readdir)(i);yield Promise.all(l.map((e=>(0,En.cp)((0,a.join)(i,e),(0,a.join)(n,e),{recursive:!0,verbatimSymlinks:!0}))))}finally{yield(0,En.rm)(d,{recursive:!0,force:!0}).catch((()=>{}))}}))}function vi(e,t){return!(e!==t&&!e.endsWith(".githubusercontent.com"))||("github.com"===t?"github.com"===e:e.endsWith(`.${t}`))}class yi{constructor(e,t,r,n,o){var s,i,a,l,c,u;this.getEffectiveUserPlugins=e;const d="string"==typeof t||void 0===t?{marketplaceCacheRoot:t,pluginLogger:r,marketplaceCacheOptions:n,listOptions:o}:t,p=null!==(s=d.marketplaceCacheOptions)&&void 0!==s?s:n;this.pluginLogger=null!==(a=null!==(i=d.pluginLogger)&&void 0!==i?i:r)&&void 0!==a?a:yo,this.extraGitConfig=d.extraGitConfig,this.githubToken=d.githubToken,this.marketplaceCache=d.marketplaceCacheRoot?new ti(d.marketplaceCacheRoot,Object.assign(Object.assign({},p),{extraGitConfig:null!==(l=null==p?void 0:p.extraGitConfig)&&void 0!==l?l:d.extraGitConfig})):void 0;const h=null!==(c=d.listOptions)&&void 0!==c?c:o;this.allowedMarketplaceNames=(null==h?void 0:h.allowedMarketplaceNames)?new Set(h.allowedMarketplaceNames):void 0,this.enableInlinePlugins=null!==(u=null==h?void 0:h.enableInlinePlugins)&&void 0!==u&&u}isMarketplaceAllowed(e){return void 0===this.allowedMarketplaceNames||void 0!==(null==e?void 0:e.name)&&this.allowedMarketplaceNames.has(e.name)}listEnabledPlugins(e,t){return ri(this,void 0,void 0,(function*(){var e,t,r,n,s,i,a,l,c,u,d,p,h,m,f;const g=yield this.getEffectiveUserPlugins(),v=null!==(e=g.plugins)&&void 0!==e?e:[],y=null!==(t=g.marketplaces)&&void 0!==t?t:[],w=[],b=[],S=new Map,k=(e,t)=>ri(this,void 0,void 0,(function*(){const r=`${e}\0${t}`;let n=S.get(r);if(!n){const o=void 0!==this.extraGitConfig?{extraGitConfig:this.extraGitConfig}:void 0;n=(void 0!==o?yield Ls(e,t,o):yield Ls(e,t)).fullSha,S.set(r,n)}return n}));for(const e of v){if(!e.isEnabled||!(null===(r=e.plugin)||void 0===r?void 0:r.name))continue;const t=e.plugin,g=si(t,y);if(!this.isMarketplaceAllowed(g)){this.pluginLogger.log("info",`Skipping plugin ${t.name} because marketplace ${null!==(n=null==g?void 0:g.name)&&void 0!==n?n:"<none>"} is not allowed`,{pluginId:t.name,marketplaceName:null==g?void 0:g.name,allowedMarketplaceNames:void 0!==this.allowedMarketplaceNames?Array.from(this.allowedMarketplaceNames):void 0});continue}const v=oi({name:t.name,pluginId:void 0!==t.id?String(t.id):null!==(s=t.name)&&void 0!==s?s:""}),S=v;if(!t.gitUrl){if(!this.enableInlinePlugins){this.pluginLogger.log("info",`Skipping plugin ${v} without gitUrl (enableInlinePlugins=false)`,{pluginId:S});continue}const r=e.inlineContentJson;if(!r){this.pluginLogger.log("info",`Skipping DB-inline plugin ${v}: no inline content provided`,{pluginId:S});continue}const n=(0,o.createHash)("sha256").update(`${null!==(i=t.id)&&void 0!==i?i:"0"}:${null!==(a=t.updatedAt)&&void 0!==a?a:"0"}`).digest("hex").slice(0,40),s=(null==g?void 0:g.name)?{id:void 0!==g.id?`${g.name}-${g.id}`:`${g.name}-inline`,name:g.name}:void 0;this.pluginLogger.log("info",`BackendMarketplaceClient: Adding DB-inline plugin: ${S}`,{pluginId:S,marketplaceId:null!==(l=null==s?void 0:s.id)&&void 0!==l?l:"unknown",version:n}),w.push({pluginId:S,pluginDbId:void 0!==t.id?String(t.id):void 0,configuredVariables:e.configuredVariables,isTeamRequired:e.isTeamRequired,name:v,version:n,downloadUrl:`inline://${null!==(c=t.id)&&void 0!==c?c:S}`,marketplaceDbId:void 0!==(null==g?void 0:g.id)?String(g.id):void 0,marketplace:s,inlineContentJson:r});continue}const E=t.gitUrl,x=ii(e,y),C=As(t,x);let _;_=void 0!==C?ui({repo:C.releaseRepo,asset:C.releaseAsset,tag:C.releaseTag}):li(E,x,null!==(u=t.gitPath)&&void 0!==u?u:void 0);const P=null!==(d=null==g?void 0:g.gitRef)&&void 0!==d?d:x;let R;try{R=void 0!==C?`release/${C.releaseTag}`:yield k(E,x)}catch(e){this.pluginLogger.captureException(e,{error_type:"resolve_version_sha"}),this.pluginLogger.log("error",`Failed to resolve version for plugin ${v}@${x}, skipping plugin`,{pluginId:S,ref:x,error:String(e)});const t=e instanceof Error?e.message:String(e);b.push({pluginName:v,pluginId:S,marketplaceName:null==g?void 0:g.name,errorMessage:t,errorType:/timed?\s*out/i.test(t)?"timeout":"clone"});continue}let T=P;if(null==g?void 0:g.gitUrl){const e=mi(E,g.gitUrl),t=e?E:g.gitUrl,r=e?x:P;try{T=yield k(t,r)}catch(e){this.pluginLogger.captureException(e,{error_type:"resolve_marketplace_cache_ref"}),this.pluginLogger.log("warn",`Failed to resolve marketplace cache ref for plugin ${v} from ${t}@${r}, falling back to raw ref`,{pluginId:S,cacheRepoUrl:t,cacheRef:r,error:String(e)})}}const I=(null==g?void 0:g.name)?Object.assign({id:void 0!==g.id?`${g.name}-${g.id}`:`${g.name}-${encodeURIComponent(null!==(p=g.gitUrl)&&void 0!==p?p:"project")}`,name:g.name},g.gitUrl&&{gitUrl:g.gitUrl,gitRef:T}):void 0;this.pluginLogger.log("info",`BackendMarketplaceClient: Adding enabled plugin: ${S} from ${T} at ${t.gitPath}`,{pluginId:S,marketplaceId:null!==(h=null==I?void 0:I.id)&&void 0!==h?h:"unknown",gitPath:null!==(m=t.gitPath)&&void 0!==m?m:void 0,gitRef:T}),w.push({pluginId:S,pluginDbId:void 0!==t.id?String(t.id):void 0,configuredVariables:e.configuredVariables,isTeamRequired:e.isTeamRequired,name:v,version:R,downloadUrl:_,marketplaceDbId:void 0!==(null==g?void 0:g.id)?String(g.id):void 0,marketplace:I,gitPath:null!==(f=t.gitPath)&&void 0!==f?f:void 0})}return{plugins:w,listFailures:b}}))}installPlugin(e,t){return ri(this,void 0,void 0,(function*(){if(e.inlineContentJson)yield function(e){return t=this,r=void 0,o=function*(){var t,r;const{targetDir:n,inlineContentJson:o,pluginName:s}=e,i=JSON.parse(o);yield(0,En.mkdir)(n,{recursive:!0});const l={};if(i.rules&&i.rules.length>0){const e=(0,a.join)(n,"rules");yield(0,En.mkdir)(e,{recursive:!0});const t=[];for(const r of i.rules){if(!r.content)continue;if(!1===r.isActive)continue;const n=`${(0,m.Nz)(r.name)}.md`,o=[];o.push(`description: ${zs(r.name)}`),r.globs&&r.globs.length>0&&o.push(`globs: ${zs(r.globs.join(", "))}`),o.push(`alwaysApply: ${!0===r.isRequired}`);const s=`---\n${o.join("\n")}\n---\n\n`;yield(0,En.writeFile)((0,a.join)(e,n),s+r.content,"utf-8"),t.push(`rules/${n}`)}t.length>0&&(l.rules=t)}if(i.commands&&i.commands.length>0){const e=(0,a.join)(n,"commands");yield(0,En.mkdir)(e,{recursive:!0});const t=[];for(const r of i.commands){if(!r.content)continue;if(!1===r.isActive)continue;const n=`${(0,m.Nz)(r.name)}.md`,o=r.description?`---\ndescription: ${zs(r.description)}\n---\n\n`:"";yield(0,En.writeFile)((0,a.join)(e,n),o+r.content,"utf-8"),t.push(`commands/${n}`)}t.length>0&&(l.commands=t)}if(i.hooks&&i.hooks.length>0){const e=(0,a.join)(n,"hooks");yield(0,En.mkdir)(e,{recursive:!0});const o={};for(const e of i.hooks){const n=e.hookStep;n&&!1!==e.isActive&&Ws(e)&&(o[n]||(o[n]=[]),"prompt"===e.hookType?o[n].push(Object.assign({type:"prompt",prompt:null!==(t=e.promptContent)&&void 0!==t?t:""},e.promptModel?{model:e.promptModel}:{})):o[n].push({type:"command",command:null!==(r=e.scriptContent)&&void 0!==r?r:""}))}yield(0,En.writeFile)((0,a.join)(e,"hooks.json"),JSON.stringify({version:1,hooks:o},null,2),"utf-8")}if(i.mcpServers&&i.mcpServers.length>0){const e={};for(const t of i.mcpServers)t.config&&(e[t.name]=t.config);Object.keys(e).length>0&&(yield(0,En.writeFile)((0,a.join)(n,".mcp.json"),JSON.stringify({mcpServers:e},null,2),"utf-8"))}const c=Object.assign({name:s},l),u=(0,a.join)(n,".cursor-plugin");yield(0,En.mkdir)(u,{recursive:!0}),yield(0,En.writeFile)((0,a.join)(u,"plugin.json"),JSON.stringify(c,null,2),"utf-8")},new((n=void 0)||(n=Promise))((function(e,s){function i(e){try{l(o.next(e))}catch(e){s(e)}}function a(e){try{l(o.throw(e))}catch(e){s(e)}}function l(t){var r;t.done?e(t.value):(r=t.value,r instanceof n?r:new n((function(e){e(r)}))).then(i,a)}l((o=o.apply(t,r||[])).next())}));var t,r,n,o}({targetDir:t,inlineContentJson:e.inlineContentJson,pluginName:e.name});else{if(null===di(e.downloadUrl))try{if(yield this.tryInstallFromMarketplaceCache(e,t))return}catch(t){this.pluginLogger.captureException(t,{error_type:"install_plugin_from_marketplace_cache"}),this.pluginLogger.log("warn",`Failed to install plugin ${e.name} from marketplace cache, falling back to direct install`,{pluginId:e.pluginId,version:e.version,error:String(t)})}yield function(e,t){return ri(this,arguments,void 0,(function*(e,t,r=yo,n,o){const s=di(e.downloadUrl);if(s){if(e.gitPath){const r=yield(0,En.mkdtemp)((0,a.join)((0,i.tmpdir)(),"release-plugin-"));try{yield gi(s.repo,s.asset,s.tag,r,null==o?void 0:o.expectedReleaseAssetSha256,null==o?void 0:o.githubToken);const n=qs(r,e.gitPath);yield(0,En.mkdir)(t,{recursive:!0}),yield(0,En.cp)(n,t,{recursive:!0,verbatimSymlinks:!0})}finally{yield(0,En.rm)(r,{recursive:!0,force:!0}).catch((()=>{}))}}else yield gi(s.repo,s.asset,s.tag,t,null==o?void 0:o.expectedReleaseAssetSha256,null==o?void 0:o.githubToken);return}const l=function(e){if(!e.startsWith(ai))return null;const t=e.slice(14),r=t.indexOf("#"),n=r>=0?t.slice(0,r):t,o=r>=0?t.slice(r+1):void 0,s=n.lastIndexOf("@");return s<0?null:{gitUrl:decodeURIComponent(n.slice(0,s)),ref:decodeURIComponent(n.slice(s+1)),gitPath:o?decodeURIComponent(o):void 0}}(e.downloadUrl);if(!l)throw new Error(`Invalid download URL format for plugin ${e.pluginId}: ${e.downloadUrl}`);const c=yield(0,En.mkdtemp)((0,a.join)((0,i.tmpdir)(),"backend-plugin-"));try{let o;if(yield function(e,t,r){return ri(this,arguments,void 0,(function*(e,t,r,n=yo,o){const s=performance.now(),i=pi.test(t);"HEAD"===t.toUpperCase()?yield Ms(["clone","--depth","1",e,r],{extraGitConfig:o}):i?(yield Ms(["init"],{cwd:r,extraGitConfig:o}),yield Ms(["remote","add","origin",e],{cwd:r,extraGitConfig:o}),yield Ms(["fetch","--depth","1","origin",t],{cwd:r,extraGitConfig:o}),yield Ms(["checkout","FETCH_HEAD"],{cwd:r,extraGitConfig:o})):yield Ms(["clone","--depth","1","--branch",t,e,r],{extraGitConfig:o});const a=(performance.now()-s).toFixed(1);ni("shallowClone %s@%s completed in %sms",e,t,a),n.log("info",`shallowClone ${e}@${t} completed in ${a}ms`)}))}(l.gitUrl,l.ref,c,r,n),l.gitPath)o=qs(c,l.gitPath);else{const t=yield function(e,t){return ri(this,void 0,void 0,(function*(){var r;for(const n of Mo){const o=(0,a.join)(e,n);let s;try{s=yield(0,En.readFile)(o,"utf-8")}catch(e){continue}const i=ss(s);if(!i.success)return{type:"manifest-unresolved",reason:`Invalid marketplace manifest at ${n}: ${i.error}`};const l=i.data,c=l.plugins.find((e=>e.name===t.toLowerCase()));if(!c)return{type:"manifest-unresolved",reason:`Plugin ${JSON.stringify(t)} not found in ${n}`};if("string"!=typeof c.source&&"git-subdir"===c.source.source)return{type:"manifest-unresolved",reason:`Plugin ${JSON.stringify(t)} uses unsupported git-subdir source`};const u=as(c.source,null===(r=l.metadata)||void 0===r?void 0:r.pluginRoot);return u&&ls(u)?{type:"resolved",gitPath:u}:{type:"manifest-unresolved",reason:`Plugin ${JSON.stringify(t)} has unresolved or unsafe source path`}}return{type:"no-manifest"}}))}(c,e.name);if("resolved"===t.type)o=qs(c,t.gitPath);else{if("manifest-unresolved"===t.type)throw new Error(`Unable to install plugin ${JSON.stringify(e.name)} without gitPath: ${t.reason}`);o=c}}yield(0,En.mkdir)(t,{recursive:!0}),yield(0,En.cp)(o,t,{recursive:!0,verbatimSymlinks:!0})}finally{yield(0,En.rm)(c,{recursive:!0,force:!0}).catch((()=>{}))}}))}(e,t,this.pluginLogger,this.extraGitConfig,{githubToken:this.githubToken})}}))}tryInstallFromMarketplaceCache(e,t){return ri(this,void 0,void 0,(function*(){var r,n,o,s;const i=this.marketplaceCache,a=e.marketplace;if(!i||!a||!a.gitUrl)return this.pluginLogger.log("info","No marketplace cache or marketplace metadata, skipping cache check",{pluginId:e.pluginId,name:e.name,version:e.version,marketplaceId:null===(r=e.marketplace)||void 0===r?void 0:r.id}),!1;const l=yield i.ensureCloned(a.id,a.gitUrl,null!==(n=a.gitRef)&&void 0!==n?n:"main",this.pluginLogger),c=null!==(o=e.gitPath)&&void 0!==o?o:yield i.resolvePluginPath(l,e.name);if(!c)return this.pluginLogger.log("info","No git path found for plugin, skipping cache check",{pluginId:e.pluginId,name:e.name,version:e.version,marketplaceId:null===(s=e.marketplace)||void 0===s?void 0:s.id}),!1;const u=i.getPluginDir(l,c);return yield i.copyPluginToDir(u,t),!0}))}discoverMarketplacePlugins(e,t,r){return ri(this,void 0,void 0,(function*(){const n=this.marketplaceCache;if(!n)throw new Error("discoverMarketplacePlugins requires a MarketplaceCacheManager (marketplaceCacheRoot)");const o=yield n.ensureCloned(e,t,r);return n.discoverPlugins(o)}))}}function wi(e,t,r,n,o){return new yi(e,t,r,n,o)}function bi(e){return e.replace(/\\/g,"/").replace(/\/+$/,"")||"/"}var Si=r("../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/dist/js-yaml.mjs"),ki=function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}l((n=n.apply(e,t||[])).next())}))};const Ei=[".md",".mdc",".markdown"],xi=[...Ei,".txt"],Ci=/^---\s*\n([\s\S]*?)\n---/,_i="";function Pi(e){return e.trim().toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9.-]/g,"")}function Ri(e){var t,r;const n=e.match(Ci);if(!n)return{};try{const e=Si.Ay.load(n[1],{schema:Si.Ay.JSON_SCHEMA});if(!e||"object"!=typeof e)return{};const o=null!==e.metadata&&"object"==typeof e.metadata?e.metadata:void 0,s=Ti(null!==(t=e.environments)&&void 0!==t?t:null==o?void 0:o.environments);return{disabledEnvironments:Ti(null!==(r=e["disabled-environments"])&&void 0!==r?r:null==o?void 0:o.disabledEnvironments),environments:s,name:"string"==typeof e.name?e.name:void 0,description:"string"==typeof e.description?e.description:void 0}}catch(e){const t=n[1],r=t.match(/^name:\s*(.+)$/m),o=t.match(/^description:\s*(.+)$/m);return r||o?{name:r?r[1].trim():void 0,description:o?o[1].trim():void 0}:{}}}function Ti(e){if(Array.isArray(e)){const t=e.filter((e=>"string"==typeof e&&e.length>0));return 0===t.length?void 0:t}if("string"==typeof e){const t=e.split(",").map((e=>e.trim())).filter((e=>e.length>0));return 0===t.length?void 0:t}}function Ii(e){return Pi((0,a.basename)(e).replace(/\.(md|mdc|markdown|txt)$/i,""))}function Ai(e){const t=new Set,r=[];for(const n of e)t.has(n.name)||(t.add(n.name),r.push(n));return r}class Oi{constructor(e){this.fetcher=e}discoverComponents(){return ki(this,arguments,void 0,(function*(e={}){var t,r;const n=null!==(t=e.basePath)&&void 0!==t?t:"",o=n?`${n}/`:"",s=null!==(r=e.metadataOnly)&&void 0!==r&&r,i=e.manifest;let a;try{a=yield this.fetcher.listDirectory(n)}catch(e){a=[]}const l=new Set(a.filter((e=>"dir"===e.type)).map((e=>e.name.toLowerCase()))),c=new Set(a.filter((e=>"file"===e.type)).map((e=>e.name))),u=ms.filter((e=>c.has(e))),d=a.some((e=>"file"===e.type&&"SKILL.md"===e.name)),[p,h,m,f,g,v,...y]=yield Promise.all([d&&void 0===(null==i?void 0:i.skills)?this.discoverRootSkill(o,s):Promise.resolve(null),void 0!==(null==i?void 0:i.skills)?this.discoverFromManifestPaths(o,i.skills,!0,Ei,s):l.has("skills")?this.discoverSkills(`${o}skills`,s):Promise.resolve([]),void 0!==(null==i?void 0:i.agents)?this.discoverFromManifestPaths(o,i.agents,!1,Ei,s):l.has("agents")?this.discoverMarkdownComponents(`${o}agents`,Ei,s):Promise.resolve([]),void 0!==(null==i?void 0:i.hooks)?this.discoverHooksFromManifest(o,i.hooks,s):l.has("hooks")?this.discoverHooksFromJson(`${o}hooks/hooks.json`,s):Promise.resolve([]),void 0!==(null==i?void 0:i.commands)?this.discoverFromManifestPaths(o,i.commands,!1,xi,s):l.has("commands")?this.discoverMarkdownComponents(`${o}commands`,xi,s):Promise.resolve([]),void 0!==(null==i?void 0:i.rules)?this.discoverFromManifestPaths(o,i.rules,!1,Ei,s):l.has("rules")?this.discoverMarkdownComponents(`${o}rules`,Ei,s):Promise.resolve([]),...u.map((e=>this.discoverMcpServers(`${o}${e}`)))]);let w=[];void 0!==(null==i?void 0:i.mcpServers)&&(w=yield this.extractMcpServersFromManifest(o,i.mcpServers));const b=this.mergeMcpServers(...y,w);return{skills:Ai(p?[p,...h]:h),agents:Ai(m),hooks:f,commands:Ai(g),rules:Ai(v),mcpServers:b}}))}discoverHooksFromJson(e){return ki(this,arguments,void 0,(function*(e,t=!1){try{if(!(yield this.fetcher.fileExists(e)))return[];const{content:r}=yield this.fetcher.fetchFile(e),n=JSON.parse(r);return!n.hooks||"object"!=typeof n.hooks||Array.isArray(n.hooks)?[]:Object.keys(n.hooks).map((r=>({name:Pi(r),path:e,description:t?_i:`Hook: ${r}`})))}catch(e){return[]}}))}discoverHooksFromManifest(e,t){return ki(this,arguments,void 0,(function*(e,t,r=!1){var n;if("string"==typeof t){if(!ls(t))return[];const n=`${e}${t.replace(/^\.\//,"")}`;return n.endsWith(".json")?this.discoverHooksFromJson(n,r):this.discoverHooksFromJson(`${n}/hooks.json`,r)}const o=null!==(n=t.hooks)&&void 0!==n?n:t;return!o||"object"!=typeof o||Array.isArray(o)?[]:Object.keys(o).map((e=>({name:Pi(e),path:"manifest",description:r?_i:`Hook: ${e}`})))}))}discoverFromManifestPaths(e,t){return ki(this,arguments,void 0,(function*(e,t,r=!1,n=Ei,o=!1){var s,i;if("string"==typeof t){if(!ls(t))return[];const s=`${e}${t.replace(/^\.\//,"")}`.replace(/\/$/,"");return r?this.discoverSkills(s,o):this.discoverMarkdownComponents(s,n,o)}const a=[];for(const n of t)try{if(!ls(n))continue;const t=`${e}${n.replace(/^\.\//,"")}`;if(r){const e=t.endsWith("SKILL.md")?t:`${t.replace(/\/$/,"")}/SKILL.md`;if(!(yield this.fetcher.fileExists(e))){const e=t.replace(/\/$/,""),r=yield this.discoverSkills(e,o);a.push(...r);continue}let r=Ii(t.endsWith("SKILL.md")?t.slice(0,-8).replace(/\/$/,""):t),n=o?_i:void 0;if(!o){const{content:t}=yield this.fetcher.fetchFile(e),o=Ri(t);if(r=null!==(s=o.name)&&void 0!==s?s:r,n=o.description,r){const t={disabledEnvironments:o.disabledEnvironments,environments:o.environments,name:Pi(r),path:e};void 0!==n&&(t.description=n),a.push(t)}continue}if(r){const t={name:Pi(r),path:e};void 0!==n&&(t.description=n),a.push(t)}}else{if(!(yield this.fetcher.fileExists(t)))continue;let e=Ii(t),r=o?_i:void 0;if(!o){const{content:n}=yield this.fetcher.fetchFile(t),o=Ri(n);e=null!==(i=o.name)&&void 0!==i?i:e,r=o.description}if(e){const n={name:Pi(e),path:t};void 0!==r&&(n.description=r),a.push(n)}}}catch(e){}return a}))}extractMcpServersFromManifest(e,t){return ki(this,void 0,void 0,(function*(){const r=[];if("string"==typeof t){const n=yield this.loadMcpServersFromPath(e,t);r.push(...n)}else if(Array.isArray(t)){for(const n of t)if("string"==typeof n){const t=yield this.loadMcpServersFromPath(e,n);r.push(...t)}else if("object"==typeof n&&null!==n){const e=this.extractServersFromInlineConfig(n,"manifest");r.push(...e)}}else if("object"==typeof t&&null!==t){const e=this.extractServersFromInlineConfig(t,"manifest");r.push(...e)}return r}))}loadMcpServersFromPath(e,t){return ki(this,void 0,void 0,(function*(){var r;if(!ls(t))return[];const n=`${e}${t}`;try{const{content:e}=yield this.fetcher.fetchFile(n),t=JSON.parse(e),o=null!==(r=t.mcpServers)&&void 0!==r?r:t;return"object"!=typeof o||null===o?[]:this.extractServersFromInlineConfig(o,n)}catch(e){return[]}}))}extractServersFromInlineConfig(e,t){const r=[];for(const[n,o]of Object.entries(e))"mcpServers"!==n&&!gs(n,o)&&vs(o)&&r.push({name:Pi(n),path:t});return r}mergeMcpServers(...e){const t=new Set,r=[];for(const n of e)for(const e of n)t.has(e.name)||(t.add(e.name),r.push(e));return r}discoverMarkdownComponents(e){return ki(this,arguments,void 0,(function*(e,t=Ei,r=!1,n=new Set){let o;try{o=yield this.fetcher.listDirectory(e,n)}catch(e){return[]}const s=o.filter((e=>"file"===e.type&&t.some((t=>e.name.endsWith(t))))),i=o.filter((e=>"dir"===e.type)),[a,l]=yield Promise.all([Promise.all(s.map((e=>ki(this,void 0,void 0,(function*(){try{let t=Ii(e.name),n=r?_i:void 0;if(!r){const{content:r}=yield this.fetcher.fetchFile(e.path),o=Ri(r);t=o.name?Pi(o.name):t,n=o.description}if(!t)return null;const o={name:t,path:e.path};return void 0!==n&&(o.description=n),o}catch(e){return null}}))))),Promise.all(i.map((e=>this.discoverMarkdownComponents(e.path,t,r,n))))]);return[...a.filter((e=>null!==e)),...l.flat()]}))}discoverRootSkill(e){return ki(this,arguments,void 0,(function*(e,t=!1){try{const r=`${e}SKILL.md`,n=(0,a.basename)(e.replace(/[\\/]+$/,""));let o=Pi(t?n||Ii(r):n),s=t?_i:void 0;if(!t){const{content:e}=yield this.fetcher.fetchFile(r),t=Ri(e);if(o=t.name?Pi(t.name):o,s=t.description,!o)return null;const n={disabledEnvironments:t.disabledEnvironments,environments:t.environments,name:o,path:r};return void 0!==s&&(n.description=s),n}return o?Object.assign({name:o,path:r},void 0!==s?{description:s}:{}):null}catch(e){return null}}))}discoverSkills(e){return ki(this,arguments,void 0,(function*(e,t=!1){let r;try{r=yield this.fetcher.listDirectory(e)}catch(e){return[]}const n=r.filter((e=>"dir"===e.type));return(yield Promise.all(n.map((e=>ki(this,void 0,void 0,(function*(){try{const r=`${e.path}/SKILL.md`;if(!(yield this.fetcher.fileExists(r)))return null;if(t){const t=Pi(e.name);return t?{name:t,path:r,description:_i}:null}const{content:n}=yield this.fetcher.fetchFile(r),o=Ri(n),s=o.name?Pi(o.name):Pi(e.name);if(!s)return null;const i={disabledEnvironments:o.disabledEnvironments,environments:o.environments,name:s,path:r};return void 0!==o.description&&(i.description=o.description),i}catch(e){return null}})))))).filter((e=>null!==e))}))}discoverMcpServers(e){return ki(this,void 0,void 0,(function*(){try{const{content:t}=yield this.fetcher.fetchFile(e),r=JSON.parse(t);if(r.mcpServers&&"object"==typeof r.mcpServers&&null!==r.mcpServers)return Object.keys(r.mcpServers).map((t=>({name:Pi(t),path:e})));const n=[];for(const[e,t]of Object.entries(r))"mcpServers"!==e&&!gs(e,t)&&vs(t)&&n.push(e);return n.map((t=>({name:Pi(t),path:e})))}catch(e){return[]}}))}}var Di=function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}l((n=n.apply(e,t||[])).next())}))};function Mi(e){var t;const r=null!==(t=null!=e?e:process.env.HOME)&&void 0!==t?t:"";return(0,a.join)(r,".claude")}var ji=function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}l((n=n.apply(e,t||[])).next())}))};const Ni=[".cursor-plugin",".claude-plugin"];class $i extends Error{constructor(e){super(e),this.name="UserSettingsParseError"}}function Fi(e){return ji(this,void 0,void 0,(function*(){const t=yield function(e){return ji(this,void 0,void 0,(function*(){try{return yield(0,En.readFile)(function(e){return(0,a.join)(e,".cursor","settings.json")}(e),"utf-8")}catch(e){if(function(e){return e instanceof Error&&"code"in e}(e)&&("ENOENT"===e.code||"ENOTDIR"===e.code))return;throw e}}))}(e);return void 0===t?{}:function(e){const t=[],r=(0,cs.qg)(e,t,{allowTrailingComma:!0});if(t.length>0){const e=t.slice(0,3).map((e=>`${(0,cs._n)(e.error)} at offset ${e.offset}`)).join("; ");throw new $i(`~/.cursor/settings.json contains syntax errors: ${e}`)}if("object"!=typeof r||null===r||Array.isArray(r))return{};const n=r;return void 0!==n.enabled_plugins?Array.isArray(n.enabled_plugins)?{enabled_plugins:n.enabled_plugins.filter((e=>"string"==typeof e&&""!==e.trim()))}:{}:n}(t)}))}function Li(e){return ji(this,void 0,void 0,(function*(){for(const t of Ni){const r=(0,a.join)(e,t);try{if((yield(0,En.stat)(r)).isDirectory())return!0}catch(e){}}return!1}))}function Ui(e,t){const r=(0,a.resolve)(t);return qs(r,(0,a.resolve)((0,a.join)(r,e)))}function Bi(e,t){const r=e.trim();if((0,a.isAbsolute)(r))return(0,a.resolve)(r);if(r.startsWith("~/"))try{return Ui(r.slice(2),t)}catch(e){return}try{return Ui(r,t)}catch(e){return}}var Hi=function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}l((n=n.apply(e,t||[])).next())}))};function Wi(e){return Hi(this,void 0,void 0,(function*(){try{return(yield(0,En.lstat)(e)).isSymbolicLink()}catch(e){return!1}}))}function zi(e){return Hi(this,void 0,void 0,(function*(){if(yield Wi(e))throw new Error(`Refusing to read symlink: ${e}`);return(0,En.readFile)(e,"utf-8")}))}function qi(e){return Hi(this,void 0,void 0,(function*(){if((yield(0,En.stat)(e)).size>10485760)throw new Error(`File ${e} exceeds maximum size of 10485760 bytes`)}))}function Gi(e){const t=e instanceof Error?e.message:String(e);return/timed?\s*out/i.test(t)?"timeout":/clone|fetch|git/i.test(t)?"clone":/manifest|marketplace\.json/i.test(t)?"manifest":/parse|invalid|malformed/i.test(t)?"parse":/install|download|copy/i.test(t)?"install":"unknown"}function Vi(e){return Hi(this,void 0,void 0,(function*(){var t;for(const r of Oo){const n=(0,a.join)(e,r);try{if(yield Wi(n))continue;if(!(yield(0,En.stat)(n)).isFile())continue;yield qi(n);const e=is(yield zi(n));if(!e.success)continue;const r=e.data,o=r.commands,s=r.agents,i=r.skills,a=r.rules,l=r.hooks,c=r.mcpServers,u=void 0!==o||void 0!==s||void 0!==i||void 0!==a||void 0!==l||void 0!==c,d="string"==typeof r.displayName?r.displayName:void 0,p="string"==typeof r.description?r.description:void 0,h=null===(t=r.author)||void 0===t?void 0:t.name,m=r.variables,f=void 0!==d||void 0!==p||void 0!==h||void 0!==m;if(!u&&!f)continue;return Object.assign(Object.assign({manifestFilePath:n},u&&{manifestOptions:{commands:o,agents:s,skills:i,rules:a,hooks:l,mcpServers:c}}),f&&{metadata:{displayName:d,description:p,authorName:h,variables:m}})}catch(e){}}}))}function Ji(e,t){return Hi(this,void 0,void 0,(function*(){const r=function(e,t){var r;const n=new Map,o=(0,a.resolve)(e),s=(0,a.resolve)(null!==(r=null==t?void 0:t.symlinkTargetRoot)&&void 0!==r?r:o),i=(0,En.realpath)(s).catch((()=>s));function l(e){const t=(0,a.resolve)(e);try{return qs(o,t)}catch(t){throw new Error(`Path escapes plugin directory: ${e}`)}}function c(e){return Hi(this,void 0,void 0,(function*(){const t=l(e),r=yield i,n=yield(0,En.realpath)(t);try{return qs(r,n)}catch(t){throw new Error(`Path escapes plugin directory via symlink: ${e}`)}}))}return{listDirectory(t,r){return Hi(this,void 0,void 0,(function*(){const n=l(t?(0,a.join)(e,t):e);try{const e=yield c(n);if(null==r?void 0:r.has(e))return[];null==r||r.add(e);const o=yield(0,En.readdir)(e,{withFileTypes:!0}),s=[];for(const e of o){const r=(0,a.join)(n,e.name);let o=e.isDirectory()?"dir":"file";if(e.isSymbolicLink())try{const e=yield c(r);o=(yield(0,En.stat)(e)).isDirectory()?"dir":"file"}catch(e){continue}s.push({name:e.name,type:o,path:t?`${t}/${e.name}`:e.name})}return s}catch(e){return[]}}))},fetchFile(t){return Hi(this,void 0,void 0,(function*(){const r=n.get(t);if(void 0!==r)return{content:r};const o=l((0,a.join)(e,t)),s=yield c(o);yield qi(s);const i=yield(0,En.readFile)(s,"utf-8");return n.set(t,i),{content:i}}))},fileExists(t){return Hi(this,void 0,void 0,(function*(){try{const r=l((0,a.join)(e,t)),n=yield c(r);return(yield(0,En.stat)(n)).isFile()}catch(e){return!1}}))}}}(e),n=new Oi(r),o=yield n.discoverComponents({manifest:t}),[s,i,l,c]=yield Promise.all([Ki(r,o.skills,e),Zi(r,o.agents,e),Xi(r,o.commands,e),Yi(r,o.rules,e)]);return{skills:s,agents:i,commands:l,rules:c}}))}function Ki(e,t,r){return Hi(this,void 0,void 0,(function*(){const n=[];for(const o of t)try{const{content:t}=yield e.fetchFile(o.path),s=ea({content:hs(t,r),relativePath:o.path});s&&n.push(s)}catch(e){}return n}))}function Yi(e,t,r){return Hi(this,void 0,void 0,(function*(){const n=[];for(const o of t)try{const{content:t}=yield e.fetchFile(o.path),s=ea({content:hs(t,r),relativePath:o.path});s&&n.push(Object.assign(Object.assign({},s),{name:o.name}))}catch(e){}return n}))}function Zi(e,t,r){return Hi(this,void 0,void 0,(function*(){const n=[];for(const o of t)try{const{content:t}=yield e.fetchFile(o.path),s=ta({content:hs(t,r),relativePath:o.path});s&&n.push(s)}catch(e){}return n}))}function Xi(e,t,r){return Hi(this,void 0,void 0,(function*(){const n=[];for(const o of t)try{const{content:t}=yield e.fetchFile(o.path),s=ra({content:hs(t,r),relativePath:o.path});s&&n.push(s)}catch(e){}return n}))}function Qi(e){if("string"==typeof e){const t=e.split(",").map((e=>e.trim())).filter(Boolean);return t.length>0?t:void 0}if(Array.isArray(e)){const t=e.filter((e=>"string"==typeof e)).map((e=>e.trim())).filter(Boolean);return t.length>0?t:void 0}}function ea({content:e,relativePath:t}){var r,n,o,s,i;try{const a=mo(e),l=t.replace(/\\/g,"/"),c=l.split("/").filter((e=>e.length>0)),u=c.length>=2?c[c.length-2]:void 0,d=null!==(r=c[c.length-1])&&void 0!==r?r:l,p=null!=u?u:d.replace(/\.md$/i,""),h="string"==typeof a.data.name?a.data.name.trim():void 0,m=Ti(null!==(n=a.data.environments)&&void 0!==n?n:null===(o=a.data.metadata)||void 0===o?void 0:o.environments),f=Ti(null!==(s=a.data["disabled-environments"])&&void 0!==s?s:null===(i=a.data.metadata)||void 0===i?void 0:i.disabledEnvironments);return{path:t,name:h&&h.length>0?h:p,description:"string"==typeof a.data.description?a.data.description:void 0,globs:Qi(a.data.globs),alwaysApply:!0===a.data.alwaysApply,content:e,environments:m,disabledEnvironments:f}}catch(e){return null}}function ta({content:e,relativePath:t}){var r,n;try{const o=mo(e),s=o.content.trim();if(!s)return null;let i;"string"==typeof o.data.tools?i=o.data.tools.split(",").map((e=>e.trim())).filter(Boolean):Array.isArray(o.data.tools)&&(i=o.data.tools.map((e=>"string"==typeof e?e.trim():String(e))).filter(Boolean));const l=null!==(r=o.data.permissionMode)&&void 0!==r?r:o.data.permissionmode,c=(0,a.basename)(t);return{path:t,name:"string"==typeof o.data.name?o.data.name:(0,a.basename)(c,(0,a.extname)(c)).replace(/[\s_]+/g,"-"),description:"string"==typeof o.data.description?o.data.description:void 0,tools:i,model:"string"==typeof o.data.model?o.data.model:"inherit",prompt:s,permissionMode:(n=l,"readonly"===(null!=n?n:"").trim().toLowerCase()?"readonly":"default")}}catch(e){return null}}function ra({content:e,relativePath:t}){try{const r=mo(e);let n;const o=r.data["argument-hint"];"string"==typeof o?n=o:Array.isArray(o)&&(n=`[${o.join(" ")}]`);const s=(0,a.basename)(t);return{path:t,name:"string"==typeof r.data.name?r.data.name:(0,a.basename)(s,(0,a.extname)(s)),description:"string"==typeof r.data.description?r.data.description:void 0,argumentHint:n,content:r.content.trim()}}catch(e){return null}}function na(e){if(void 0!==e)return{configuredVariables:e.configuredVariables}}function oa(e,t,r){return Hi(this,void 0,void 0,(function*(){const n=e.replace(/^\.\//,"");if(!ls(n))return null;const o=(0,a.join)(t,n);try{if(yield Wi(o))return null;if(!(yield(0,En.stat)(o)).isFile())return null;yield qi(o);const e=ws(yield zi(o),t,r);return(null==e?void 0:e.mcpServers)&&0!==Object.keys(e.mcpServers).length?{config:e,sourcePath:o}:null}catch(e){return null}}))}function sa(e,t,r){if(t.mcpServers)for(const[n,o]of Object.entries(t.mcpServers))e.mcpServers[n]=o,e.mcpServerSourcePaths[n]=r}function ia(e,t,r,n){return Hi(this,void 0,void 0,(function*(){const o={mcpServers:{},mcpServerSourcePaths:{}};if("string"==typeof e){const r=yield oa(e,t,n);r&&sa(o,r.config,r.sourcePath)}else if(Array.isArray(e))for(const s of e)if("string"!=typeof s){if("object"==typeof s&&null!==s){const e=ws(JSON.stringify(s),t,n);(null==e?void 0:e.mcpServers)&&sa(o,e,r)}}else{const e=yield oa(s,t,n);e&&sa(o,e.config,e.sourcePath)}else if("object"==typeof e&&null!==e){const s=ws(JSON.stringify(e),t,n);(null==s?void 0:s.mcpServers)&&sa(o,s,r)}return 0===Object.keys(o.mcpServers).length?null:o}))}function aa(e,t,r){return Hi(this,void 0,void 0,(function*(){let n={},o={};const s=null!=r?r:na(t);for(const t of ms.map((e=>e))){const r=(0,a.join)(e,t);try{if((yield(0,En.stat)(r)).isFile()){const t=ws(yield zi(r),e,s);if(null==t?void 0:t.mcpServers)for(const[e,s]of Object.entries(t.mcpServers))void 0===n[e]&&(n[e]=s,o[e]=r)}}catch(e){}}for(const t of[".cursor-plugin",".claude-plugin"]){const r=(0,a.join)(e,t,"plugin.json");try{if(!(yield(0,En.stat)(r)).isFile())continue;const t=is(yield zi(r));if(t.success){if(void 0!==t.data.mcpServers){const i=yield ia(t.data.mcpServers,e,r,s);(null==i?void 0:i.mcpServers)&&(n=Object.assign(Object.assign({},n),i.mcpServers),o=Object.assign(Object.assign({},o),i.mcpServerSourcePaths))}break}}catch(e){}}return 0===Object.keys(n).length?null:Object.assign({mcpServers:n},Object.keys(o).length>0&&{mcpServerSourcePaths:o})}))}function la(e,t){return Hi(this,void 0,void 0,(function*(){var r;const n=yield aa(e);if(n)return n;for(const n of Mo){const o=(0,a.join)(e,n);try{if(!(yield(0,En.stat)(o)).isFile())continue;const n=yield(0,En.readFile)(o,"utf-8"),s=JSON.parse(n).plugins;if(!Array.isArray(s))continue;const i=t.name,l=s.find((e=>e.name===i));if(!(null===(r=null==l?void 0:l.mcpServers)||void 0===r?void 0:r.length))continue;for(const t of l.mcpServers){const r=t.replace(/^\.\//,"");if(!ls(r))continue;const n=(0,a.join)(e,r);try{yield qi(n);const t=ws(yield zi(n),e);if((null==t?void 0:t.mcpServers)&&Object.keys(t.mcpServers).length>0){const e=Object.fromEntries(Object.keys(t.mcpServers).map((e=>[e,n])));return Object.assign(Object.assign({},t),{mcpServerSourcePaths:e})}}catch(e){}}return null}catch(e){}}return null}))}function ca(e,t){const r={};for(const[n,o]of Object.entries(e.hooks))Array.isArray(o)&&(r[n]=o.map((e=>"command"in e&&"string"==typeof e.command?Object.assign(Object.assign({},e),{command:hs(e.command,t)}):"prompt"in e&&"string"==typeof e.prompt?Object.assign(Object.assign({},e),{prompt:hs(e.prompt,t)}):e)));return Object.assign(Object.assign({},e),{hooks:r})}function ua(e,t,r,n){return Hi(this,void 0,void 0,(function*(){if("object"==typeof r){const o=da(r,t);return o&&"config"in o?Object.assign({config:ca(o.config,e)},void 0!==n&&{sourcePath:n}):o}let o,s,i;if("string"==typeof r){const t=r.replace(/^\.\//,"");if(!ls(t))return;o=t.endsWith(".json")?(0,a.join)(e,t):(0,a.join)(e,t,"hooks.json")}else o=(0,a.join)(e,"hooks","hooks.json");try{if(yield Wi(o))return;if(!(yield(0,En.stat)(o)).isFile())return}catch(e){return}try{yield qi(o),s=yield(0,En.readFile)(o,"utf-8")}catch(e){return}try{i=JSON.parse(s)}catch(e){return{error:{source:"claude-plugin",message:`Plugin ${t} ${o}: invalid JSON`}}}const l=da(i,t);return l&&"config"in l?{config:ca(l.config,e),sourcePath:o}:l}))}function da(e,t){const r=function(e){if("object"!=typeof e||null===e)return"unknown";const t=e,r="object"==typeof t.hooks&&null!==t.hooks?t.hooks:null;if(!r)return"unknown";for(const e of Object.values(r)){if(!Array.isArray(e)||0===e.length)continue;const t=e[0];if("object"!=typeof t||null===t)continue;const r=t;if("hooks"in r&&Array.isArray(r.hooks))return"claude-code";if("command"in r||"prompt"in r||"type"in r)return"cursor"}return"unknown"}(e);if("cursor"===r){const r=e,n=Me(r);return n.isValid?{config:r}:{error:{source:"claude-plugin",message:`Plugin ${t} hooks: ${n.errors.join("; ")}`}}}if("claude-code"===r){const r=null==e?void 0:e.hooks;if(!r||0===Object.keys(r).length)return;const n=se(r),o=Me(n);return o.isValid?{config:n}:{error:{source:"claude-plugin",message:`Plugin ${t} hooks: ${o.errors.join("; ")}`}}}}function pa(e,t,r,n){return Hi(this,void 0,void 0,(function*(){var o,s,i,a,l,c;const u=yield Vi(e),d=null!==(o=na(r))&&void 0!==o?o:(null==n?void 0:n.configuredVariables)?{configuredVariables:n.configuredVariables}:void 0,[p,h,m]=yield Promise.all([Ji(e,null==u?void 0:u.manifestOptions),aa(e,r,d),ua(e,t,null===(s=null==u?void 0:u.manifestOptions)||void 0===s?void 0:s.hooks,null==u?void 0:u.manifestFilePath)]);return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},p),void 0!==(null===(i=null==u?void 0:u.metadata)||void 0===i?void 0:i.displayName)&&{displayName:u.metadata.displayName}),void 0!==(null===(a=null==u?void 0:u.metadata)||void 0===a?void 0:a.description)&&{description:u.metadata.description}),void 0!==(null===(l=null==u?void 0:u.metadata)||void 0===l?void 0:l.authorName)&&{authorName:u.metadata.authorName}),{variablesSchema:null===(c=null==u?void 0:u.metadata)||void 0===c?void 0:c.variables,mcpConfig:h,hooks:m})}))}function ha(e,t){return Hi(this,void 0,void 0,(function*(){var r,n,o,s;const i=yield Vi(e),[a,l,c]=yield Promise.all([Ji(e,null==i?void 0:i.manifestOptions),la(e,t),ua(e,t.raw,null===(r=null==i?void 0:i.manifestOptions)||void 0===r?void 0:r.hooks,null==i?void 0:i.manifestFilePath)]),u={source:"claude-plugin",sourceInfo:t};return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({identifier:u,installPath:e},void 0!==(null===(n=null==i?void 0:i.metadata)||void 0===n?void 0:n.displayName)&&{displayName:i.metadata.displayName}),void 0!==(null===(o=null==i?void 0:i.metadata)||void 0===o?void 0:o.description)&&{description:i.metadata.description}),void 0!==(null===(s=null==i?void 0:i.metadata)||void 0===s?void 0:s.authorName)&&{authorName:i.metadata.authorName}),a),{mcpConfig:null!=l?l:void 0,hooks:c})}))}function ma(e,t,r){return Hi(this,void 0,void 0,(function*(){const n=`${r.name}@${r.version}`,{displayName:o,description:s,authorName:i,variablesSchema:a,skills:l,rules:c,agents:u,commands:d,mcpConfig:p,hooks:h}=yield pa(e,n,r),m={source:t,sourceInfo:r};return Object.assign(Object.assign(Object.assign(Object.assign({identifier:m,installPath:e},void 0!==o&&{displayName:o}),void 0!==s&&{description:s}),void 0!==i&&{authorName:i}),{variablesSchema:a,skills:l,rules:c,agents:u,commands:d,mcpConfig:null!=p?p:void 0,hooks:h})}))}function fa(e,t){return Hi(this,arguments,void 0,(function*(e,t,r={}){var n,o;const s=null!==(n=r.log)&&void 0!==n?n:yo,i=performance.now(),l=yield function(e){return Di(this,void 0,void 0,(function*(){const t=Mi(e),r=(0,a.join)(t,"plugins","installed_plugins.json");try{const e=yield(0,En.readFile)(r,"utf-8");return JSON.parse(e)}catch(e){return e.code,null}}))}(r.userHomeDir);if(!(null==l?void 0:l.plugins))return s.log("info",`loadAllEnabledPlugins: no installed plugins metadata found (${(performance.now()-i).toFixed(1)}ms)`),[];const c=yield function(e){return Di(this,void 0,void 0,(function*(){const t=Mi(e),r=(0,a.join)(t,"settings.json");try{const e=yield(0,En.readFile)(r,"utf-8");return JSON.parse(e)}catch(e){return e.code,null}}))}(r.userHomeDir),u=e?(0,a.resolve)(e):void 0,d=function(e,t,r,n){var o;const s=null==e?void 0:e.plugins;if(!s||"object"!=typeof s)return[];const i=null!==(o=null==t?void 0:t.enabledPlugins)&&void 0!==o?o:{},a={};(null==r?void 0:r.enabledPlugins)&&Object.assign(a,r.enabledPlugins);const l=void 0!==n?bi(n):void 0,c=new Set,u=[];for(const[e,t]of Object.entries(s)){if(!Array.isArray(t)||0===t.length)continue;if(void 0!==l&&!1===a[e])continue;let r;void 0!==l&&(r=t.find((t=>!("project"!==t.scope&&"local"!==t.scope||!t.projectPath)&&bi(t.projectPath)===l&&!0===a[e]))),r||!0!==i[e]||(r=t.find((e=>"user"===e.scope))),(null==r?void 0:r.installPath)&&!c.has(e)&&(u.push({pluginId:e,installPath:r.installPath}),c.add(e))}return u}(l,c,u?yield function(e){return Di(this,void 0,void 0,(function*(){const t={enabledPlugins:{}};let r=!1;const n=(0,a.join)(e,".claude","settings.json");try{const e=yield(0,En.readFile)(n,"utf-8"),o=JSON.parse(e);o.enabledPlugins&&(Object.assign(t.enabledPlugins,o.enabledPlugins),r=!0)}catch(e){}const o=(0,a.join)(e,".claude","settings.local.json");try{const e=yield(0,En.readFile)(o,"utf-8"),n=JSON.parse(e);n.enabledPlugins&&(Object.assign(t.enabledPlugins,n.enabledPlugins),r=!0)}catch(e){}return r?t:null}))}(u):null,u),p=[],h=r.onError;for(const{pluginId:e,installPath:t}of d)try{const r=performance.now(),n=Eo(e),o=yield ha(t,n);p.push(o),s.log("info",`loadClaudePlugin ${e} loaded in ${(performance.now()-r).toFixed(1)}ms`)}catch(t){const r=t instanceof Error?t:new Error(String(t));if(h)try{h(Eo(e),r)}catch(t){h({name:null!==(o=e.split("@")[0])&&void 0!==o?o:e,sourceType:"marketplace",marketplace:"unknown",raw:e},r)}}return s.log("info",`loadAllEnabledPlugins completed in ${(performance.now()-i).toFixed(1)}ms (${d.length} resolved, ${p.length} loaded)`),p}))}Error;function ga(e){return Hi(this,arguments,void 0,(function*(e,t={}){var r,n,o,s,i,l;const c=null!==(r=t.log)&&void 0!==r?r:yo,u=performance.now(),d=null===(n=t.loadClaude)||void 0===n||n,p=null===(o=t.loadUserLocal)||void 0===o||o,h=null!==(s=t.loadUserSettings)&&void 0!==s&&s,m=null!==(i=t.marketplaceSources)&&void 0!==i?i:[],f=null!==(l=t.loadCursorFirstParty)&&void 0!==l?l:m.length>0,g=[],v=[];let y;d&&g.push(fa(e,void 0,{userHomeDir:t.userHomeDir,onError:t.onError,log:c})),f&&m.length>0&&(y=Promise.all(m.map((e=>{var r,n;return function(e){return Hi(this,void 0,void 0,(function*(){var t,r,n,o,s,i,a,l;const c=null!==(t=e.log)&&void 0!==t?t:yo,u=performance.now(),{client:d,userId:p,teamId:h,onCursorError:m,pruneOldVersions:f}=e,g=[],v=null!==(r=e.cacheManager)&&void 0!==r?r:new Is(e.userHomeDir),y=performance.now(),w=yield d.listEnabledPlugins(p,h);c.log("info",`marketplace listEnabledPlugins completed in ${(performance.now()-y).toFixed(1)}ms (${w.plugins.length} plugins)`);const b=[];if(w.listFailures){g.push(...w.listFailures);for(const e of w.listFailures)b.push({identifier:{source:e.marketplaceName&&"cursor-public"!==e.marketplaceName?"cursor-third-party":"cursor-first-party",sourceInfo:{name:e.pluginName,version:"",marketplace:e.marketplaceName}},installPath:"",loadError:e.errorMessage,skills:[],rules:[],agents:[],commands:[]})}const S=new Map;for(const e of w.plugins)try{const t=null===(n=e.marketplace)||void 0===n?void 0:n.name;if(!t){const t=new Error(`Plugin ${e.name} has no marketplace metadata — cannot determine cache path`);g.push({pluginName:e.name,pluginId:e.pluginId,marketplaceName:void 0,errorMessage:t.message,errorType:"manifest"}),m&&m(e,t);continue}const r=`${t}/${e.pluginId}`;let a,l=S.get(r);if(l||(l={slug:t,pluginId:e.pluginId,versions:[]},S.set(r,l)),l.versions.push(e.version),yield v.isCached({marketplaceSlug:t,pluginId:e.pluginId,version:e.version}))a=v.getCacheDir({marketplaceSlug:t,pluginId:e.pluginId,version:e.version}),c.log("info",`loadFromMarketplaceSource: Found cached plugin: ${e.pluginId} at ${a}`,{marketplaceSlug:t,pluginId:e.pluginId,gitRef:e.version,marketplaceId:null===(o=e.marketplace)||void 0===o?void 0:o.id});else{const r=v.getCacheDir({marketplaceSlug:t,pluginId:e.pluginId,version:e.version});c.log("info",`loadFromMarketplaceSource: Plugin missing from cache, installing: ${e.pluginId} at ${r}`,{marketplaceSlug:t,pluginId:e.pluginId,gitRef:e.version,marketplaceId:null===(s=e.marketplace)||void 0===s?void 0:s.id}),yield(0,En.mkdir)(r,{recursive:!0});try{yield d.installPlugin(e,r),yield v.markCacheComplete({marketplaceSlug:t,pluginId:e.pluginId,version:e.version})}catch(e){try{yield(0,En.rm)(r,{recursive:!0,force:!0})}catch(e){}throw e}a=r}const u=null===(i=e.marketplace)||void 0===i?void 0:i.name,p=void 0!==u&&"cursor-public"!==u&&u.length>0?"cursor-third-party":"cursor-first-party",h={name:e.name,version:e.version,pluginDbId:e.pluginDbId,configuredVariables:e.configuredVariables,marketplace:u,marketplaceDbId:e.marketplaceDbId,isTeamRequired:e.isTeamRequired},f=yield ma(a,p,h);b.push(f);try{yield v.pruneOldVersions({marketplaceSlug:t,pluginId:e.pluginId,keepVersions:[e.version]})}catch(e){}}catch(t){c.captureException(t,{error_type:"load_plugin_from_marketplace"});const r=t instanceof Error?t:new Error(String(t));g.push({pluginName:e.name,pluginId:e.pluginId,marketplaceName:null===(a=e.marketplace)||void 0===a?void 0:a.name,errorMessage:r.message,errorType:Gi(r)});const n=null===(l=e.marketplace)||void 0===l?void 0:l.name,o=void 0!==n&&"cursor-public"!==n&&n.length>0;b.push({identifier:{source:o?"cursor-third-party":"cursor-first-party",sourceInfo:{name:e.name,version:e.version,pluginDbId:e.pluginDbId,marketplace:n,marketplaceDbId:e.marketplaceDbId,isTeamRequired:e.isTeamRequired}},installPath:"",loadError:r.message||"Plugin load failed",skills:[],rules:[],agents:[],commands:[]}),m&&m(e,r)}if(f)for(const{slug:e,pluginId:t,versions:r}of S.values())try{yield v.pruneOldVersions({marketplaceSlug:e,pluginId:t,keepVersions:r})}catch(e){}return c.log("info",`loadFromMarketplaceSource completed in ${(performance.now()-u).toFixed(1)}ms (${b.length} plugins loaded, ${g.length} failures)`),{plugins:b,failures:g}}))}(Object.assign(Object.assign({},e),{userHomeDir:null!==(r=e.userHomeDir)&&void 0!==r?r:t.userHomeDir,log:null!==(n=e.log)&&void 0!==n?n:c}))})))),p&&g.push(function(){return Hi(this,arguments,void 0,(function*(e={}){var t,r,n;const o=null!==(t=e.log)&&void 0!==t?t:yo,s=performance.now(),i=null!==(r=e.userHomeDir)&&void 0!==r?r:process.env.HOME;if(!i)return o.log("info","loadUserLocalPlugins: no home directory available, skipping"),[];const l=(0,a.join)(i,".cursor","plugins","local");let c;try{c=yield(0,En.readdir)(l,{withFileTypes:!0})}catch(e){return o.log("info",`loadUserLocalPlugins: ${l} not found or not readable (${(performance.now()-s).toFixed(1)}ms)`),[]}const u=yield(0,En.realpath)(l).catch((()=>(0,a.resolve)(l))),d=[];for(const t of c){if(!t.isDirectory()&&!t.isSymbolicLink())continue;if(t.name.startsWith("."))continue;const r=(0,a.join)(l,t.name);try{if(t.isSymbolicLink()){let e;try{e=yield(0,En.realpath)(r)}catch(e){o.log("warn",`loadUserLocalPlugin ${t.name} rejected: failed to resolve symlink (${e instanceof Error?e.message:String(e)})`);continue}try{qs(u,e)}catch(r){o.log("warn",`loadUserLocalPlugin ${t.name} rejected: symlink target ${e} is outside ${l}`);continue}}if(!(yield(0,En.stat)(r)).isDirectory()){t.isSymbolicLink()&&o.log("warn",`loadUserLocalPlugin ${t.name} rejected: symlink target is not a directory`);continue}const s=performance.now(),i=yield null===(n=e.localPluginVariablesLookup)||void 0===n?void 0:n.call(e,t.name),{displayName:a,description:c,authorName:p,variablesSchema:h,skills:m,rules:f,agents:g,commands:v,mcpConfig:y,hooks:w}=yield pa(r,t.name,void 0,{configuredVariables:i}),b={source:"user-local",sourceInfo:{name:t.name,localPath:r}};d.push(Object.assign(Object.assign(Object.assign(Object.assign({identifier:b,installPath:r},void 0!==a&&{displayName:a}),void 0!==c&&{description:c}),void 0!==p&&{authorName:p}),{variablesSchema:h,skills:m,rules:f,agents:g,commands:v,mcpConfig:null!=y?y:void 0,hooks:w})),o.log("info",`loadUserLocalPlugin ${t.name} loaded in ${(performance.now()-s).toFixed(1)}ms`)}catch(e){o.log("error",`loadUserLocalPlugin ${t.name} failed: ${e instanceof Error?e.message:String(e)}`)}}return o.log("info",`loadUserLocalPlugins completed in ${(performance.now()-s).toFixed(1)}ms (${d.length} plugins loaded)`),d}))}({userHomeDir:t.userHomeDir,log:c,localPluginVariablesLookup:t.localPluginVariablesLookup})),h&&g.push(function(){return Hi(this,arguments,void 0,(function*(e={}){var t,r,n;const o=null!==(t=e.log)&&void 0!==t?t:yo,s=performance.now(),i=null!==(r=e.userHomeDir)&&void 0!==r?r:process.env.HOME;if(!i)return o.log("info","loadUserSettingsPlugins: no home directory available, skipping"),[];let l;try{l=yield function(e){return ji(this,void 0,void 0,(function*(){var t;const r=null!==(t=(yield Fi(e)).enabled_plugins)&&void 0!==t?t:[];if(0===r.length)return[];const n=[],o=new Set;for(const t of r){const r=Bi(t,e);if(void 0!==r)try{if(!(yield(0,En.stat)(r)).isDirectory())continue;if(yield Li(r)){const e=yield(0,En.realpath)(r).catch((()=>r));o.has(e)||(o.add(e),n.push({originalPath:t,resolvedPath:e,isDiscovered:!1}));continue}const e=yield(0,En.readdir)(r,{withFileTypes:!0}),s=yield(0,En.realpath)(r).catch((()=>r));for(const i of e){if(!i.isDirectory()&&!i.isSymbolicLink())continue;if(i.name.startsWith("."))continue;const e=(0,a.join)(r,i.name);try{if(i.isSymbolicLink()&&qs(s,yield(0,En.realpath)(e)),!(yield(0,En.stat)(e)).isDirectory())continue;if(yield Li(e)){const r=yield(0,En.realpath)(e).catch((()=>e));o.has(r)||(o.add(r),n.push({originalPath:t,resolvedPath:r,isDiscovered:!0}))}}catch(e){}}}catch(e){}}return n}))}(i)}catch(e){return o.log("error",`loadUserSettingsPlugins: failed to resolve paths from settings: ${e instanceof Error?e.message:String(e)}`),[]}if(0===l.length)return o.log("info",`loadUserSettingsPlugins: no plugin paths found in ~/.cursor/settings.json (${(performance.now()-s).toFixed(1)}ms)`),[];const c=[];for(const{originalPath:t,resolvedPath:r,isDiscovered:s}of l)try{const i=performance.now(),l=(0,a.basename)(r),u=So(r),d=yield null===(n=e.localPluginVariablesLookup)||void 0===n?void 0:n.call(e,u),{displayName:p,description:h,authorName:m,variablesSchema:f,skills:g,rules:v,agents:y,commands:w,mcpConfig:b,hooks:S}=yield pa(r,l,void 0,{configuredVariables:d}),k={source:"user-settings",sourceInfo:{name:null!=p?p:l,localPath:r,originalSettingsPath:t,isDiscovered:s}};c.push(Object.assign(Object.assign(Object.assign(Object.assign({identifier:k,installPath:r},void 0!==p&&{displayName:p}),void 0!==h&&{description:h}),void 0!==m&&{authorName:m}),{variablesSchema:f,skills:g,rules:v,agents:y,commands:w,mcpConfig:null!=b?b:void 0,hooks:S})),o.log("info",`loadUserSettingsPlugin ${l} loaded in ${(performance.now()-i).toFixed(1)}ms`)}catch(e){const t=e instanceof Error?e.name:"Error";o.log("error",`loadUserSettingsPlugin failed for ${(0,a.basename)(r)}: ${t}`)}return o.log("info",`loadUserSettingsPlugins completed in ${(performance.now()-s).toFixed(1)}ms (${c.length} plugins loaded from ${l.length} paths)`),c}))}({userHomeDir:t.userHomeDir,log:c,localPluginVariablesLookup:t.localPluginVariablesLookup}));const[w,b]=yield Promise.all([Promise.all(g),null!=y?y:Promise.resolve([])]),S=[];for(const e of b)S.push(...e.plugins),v.push(...e.failures);S.push(...w.flat());const k=new Set,E=[];for(const e of S){const t=yield(0,En.realpath)(e.installPath).catch((()=>e.installPath));k.has(t)||(k.add(t),E.push(e))}const x=new Map,C=[];for(const e of E){const t=va(e);if(void 0!==t){const r=x.get(t),n=!e.loadError;if(!0===r)continue;if(!1===r&&n){const r=C.findIndex((e=>va(e)===t&&e.loadError));-1!==r&&C.splice(r,1),x.set(t,!0),C.push(e);continue}x.set(t,n)}C.push(e)}const _=performance.now()-u;return c.log("info",`loadAllPlugins completed in ${_.toFixed(1)}ms (claude=${d}, userLocal=${p}, userSettings=${h}, marketplace=${m.length} sources, total=${C.length} plugins, failures=${v.length})`),{plugins:C,failures:v}}))}function va(e){const{identifier:t}=e;switch(t.source){case"claude-plugin":return"marketplace"===t.sourceInfo.sourceType&&t.sourceInfo.marketplace?`${t.sourceInfo.marketplace}/${t.sourceInfo.name}`:void 0;case"cursor-first-party":case"cursor-third-party":return t.sourceInfo.marketplace?`${t.sourceInfo.marketplace}/${t.sourceInfo.name}`:void 0;default:return}}function ya(e,t={}){return Object.assign(Object.assign({},e),{model:t.stripModel?void 0:e.model,tools:t.stripTools?void 0:e.tools})}function wa(e,t){const r=[];for(const o of e){const e=xo(o.identifier),s=`plugin:${e}`,i=Co(o.identifier),l=_o(o.identifier),c=Po(o.identifier),u=Ro(o.identifier);for(const d of t(o)){const t=(0,a.join)(o.installPath,d.path),{type:p,globs:h,description:m}=(n=d).alwaysApply?{type:"global"}:n.globs&&n.globs.length>0?{type:"fileGlobbed",globs:n.globs}:n.description?{type:"agentFetched",description:n.description}:{type:"manuallyAttached"};r.push({fullPath:t,content:d.content,type:p,globs:h,description:m,pluginIdentifier:e,gitRemoteOrigin:s,plugin:i,marketplace:l,pluginId:c,marketplaceId:u,environments:d.environments,disabledEnvironments:d.disabledEnvironments})}}var n;return r}(0,a.join)((0,i.homedir)(),".claude","plugins","marketplaces"),r("node:url"),Error;var ba=function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}l((n=n.apply(e,t||[])).next())}))};function Sa(e){const t=e.trim();if(!t)return!1;if(t.startsWith("git@"))return/^git@[a-zA-Z0-9.-]+:[a-zA-Z0-9._~\-/]+(?:\.git)?$/.test(t);try{const e=new URL(t);return"https:"===e.protocol&&""===e.username&&""===e.password&&""===e.search&&""===e.hash}catch(e){return!1}}class ka extends Error{constructor(e){super(e),this.name="SettingsParseError"}}function Ea(e){return ba(this,void 0,void 0,(function*(){try{return yield(0,En.readFile)(function(e){return(0,a.join)(e,".cursor","settings.json")}(e),"utf-8")}catch(e){if(function(e){return e instanceof Error&&"code"in e}(e)&&("ENOENT"===e.code||"ENOTDIR"===e.code))return;throw e}}))}function xa(e){return ba(this,void 0,void 0,(function*(){const t=yield Ea(e);return void 0===t?{}:function(e){const t=[],r=(0,cs.qg)(e,t,{allowTrailingComma:!0});if(t.length>0){const e=t.slice(0,3).map((e=>`${(0,cs._n)(e.error)} at offset ${e.offset}`)).join("; ");throw new ka(`.cursor/settings.json contains syntax errors: ${e}`)}if("object"!=typeof r||null===r||Array.isArray(r))return{};const n=r;return void 0===n.plugins||"object"==typeof n.plugins&&null!==n.plugins&&!Array.isArray(n.plugins)?n:{}}(t)}))}function Ca(e){return ba(this,void 0,void 0,(function*(){const t=yield xa(e);return t.plugins?Object.entries(t.plugins).filter((([,e])=>!0===e.enabled)).filter((([,e])=>!e.gitUrl||Sa(e.gitUrl))).map((([e,t])=>({key:e,entry:t}))):[]}))}function _a(e){const t=e.indexOf("/");return-1===t?{name:e}:{name:e.slice(t+1),marketplaceName:e.slice(0,t)}}var Pa=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});function Ra(e,{root:t,includeGlobs:r=[],excludeGlobs:n=[],caseSensitive:o=!1,cursorIgnoreFiles:s=[],sandboxPolicy:i={type:"insecure_none"},noIgnoreVcs:a=!1,followSymlinks:l=!1,source:c="ripwalk"}){const u=["--files","--hidden","--no-require-git","--no-config","--color=never"];l&&u.push("--follow"),a&&u.push("--no-ignore-vcs"),o&&u.push("--case-sensitive");for(const e of s)u.push("--cursor-ignore",e);for(const e of r)u.push("--iglob",e);for(const e of n)u.push("--iglob",`!${e}`);let d,p=!1;const h=new Promise((e=>{d=e}));return{lines:async function*(){const r={stack:[],error:void 0,hasError:!1};try{const n=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t}(r,function(e,t,r,n){const o=(0,Bn.spawnInSandbox)((0,Bn.Ko)(),t,{cwd:r},n),s=[];o.stderr?.on("data",(e=>{s.push(e)}));const i=new Promise(((e,t)=>{o.on("error",t),o.on("close",(t=>e(t??0)))}));if(!o.stdout)throw new Error("No stdout from ripgrep process");const a=new Promise((t=>{e.signal.aborted?t("aborted"):e.signal.addEventListener("abort",(()=>t("aborted")),{once:!0})}));return{stdout:o.stdout,processExit:i,stderr:()=>Buffer.concat(s).toString(),aborted:a,[Symbol.dispose](){o.kill()}}}(e,u,t,i),!1);let o=0;const s=async function*(e){let t="";for await(const r of e){t+=r.toString();const e=t.split("\n");t=e.pop()??"",yield*e}t&&(yield t)}(n.stdout)[Symbol.asyncIterator]();for(;;){const e=await Promise.race([s.next(),n.aborted]);if("aborted"===e){p=!0,d(!0);break}if(e.done)break;o++,yield e.value}if(o>0);else if(!p){const e=await n.processExit;if(0!==e&&1!==e){const t=n.stderr();throw new Error(`Ripgrep failed (exit ${e}) with no results${t?`: ${t}`:""}`)}}p||d(!1)}catch(e){r.error=e,r.hasError=!0}finally{Pa(r)}}(),didTimeout:h}}function Ta({root:e,includeGlobs:t=[],excludeGlobs:r=[],caseSensitive:n=!1,cursorIgnoreFiles:o=[],sandboxPolicy:s={type:"insecure_none"},noIgnoreVcs:i=!1,followSymlinks:a=!1}){return JSON.stringify({root:e,includeGlobs:t,excludeGlobs:r,caseSensitive:n,cursorIgnoreFiles:o,sandboxPolicy:s,noIgnoreVcs:i,followSymlinks:a})}class Ia{cache;constructor(e=2e4){this.cache=new m.Hc({ttlMs:e})}clear(){this.cache.clear()}delete(e){this.cache.delete(Ta(e))}walk(e,t){const r=Ta(t);let n,o=!1,s=!1;const i=new Promise((e=>{n=e})),a=e=>{s||(s=!0,n(e))},l=(c=e.signal,new Promise((e=>{c.aborted?e("aborted"):c.addEventListener("abort",(()=>e("aborted")),{once:!0})})));var c;return{lines:async function*(){const n=this.cache.get(r);if(void 0!==n){const e=await Promise.race([n.linesPromise.then((e=>({type:"lines",lines:e})),(e=>({type:"error",error:e}))),l.then((()=>({type:"aborted"})))]);if("aborted"===e.type)return o=!0,void a(!0);if("lines"===e.type)return a(!1),void(yield*e.lines);this.cache.get(r)===n&&this.cache.delete(r)}let s,i;const c={linesPromise:new Promise(((e,t)=>{s=e,i=t}))};c.linesPromise.catch((()=>{})),this.cache.set(r,c);const u=[];let d,p=!1;try{const r=Ra(e,t);for await(const e of r.lines)u.push(e),yield e;if(await r.didTimeout)return o=!0,d=new Error("Ripwalk aborted before cacheable result was available"),void a(!0);p=!0}catch(e){throw d=e,e}finally{p?s?.(u):(this.cache.get(r)===c&&this.cache.delete(r),i?.(d??new Error("Ripwalk terminated before cacheable result was available"))),o||a(!1)}}.bind(this)(),didTimeout:i}}}async function Aa(e,t,r){try{return(await t.exec(e,r,["rev-parse","--show-toplevel"],{caller:"findGitRoot"})).stdout.trim()}catch{return null}}async function Oa(e,t,r){try{return(await t.exec(e,r,["config","--get","remote.origin.url"],{caller:"getGitRemoteUrl"})).stdout.trim()}catch{return}}function Da(e){const t=e.trim();if(""===t)return t;try{const e=new URL(t);return e.username="",e.password="",e.toString()}catch{return t}}function Ma(e){let t=e.trim();t.startsWith("git@")&&(t=`https://${t.slice(4).replace(":","/")}`),/^[a-z][a-z0-9+.-]*:\/\//i.test(t)&&!/^https?:\/\//i.test(t)&&(t=t.replace(/^[a-z][a-z0-9+.-]*:\/\//i,"https://")),/^https?:\/\//i.test(t)||(t=`https://${t}`);try{const e=new URL(t),r=e.pathname.replace(/\/+$/,"").replace(/\.git$/i,"").replace(/\/+$/,"");return e.hostname+r}catch{return t=t.replace(/^https?:\/\//i,""),t=t.replace(/[?#].*$/,""),t=t.replace(/\/+$/,""),t=t.replace(/\.git$/i,""),t=t.replace(/\/+$/,""),t}}const ja=["**/node_modules/**","**/.git/**","**/.turbo/**","**/.next/**","**/.cache/**","**/.pnpm/**","**/.yarn/**","**/dist/**","**/build/**","**/out/**","**/target/**","**/.vscode/**","**/.idea/**","**/venv/**","**/__pycache__/**","**/logs/**","**/tmp/**","**/temp/**"];var Na=r("../../node_modules/.pnpm/picomatch@4.0.3/node_modules/picomatch/index.js");async function $a(e){if(!(0,a.isAbsolute)(e))return null;const t=await(0,m.DN)(e);return null===t?null:t}class Fa{ignoreServicePromise;constructor(e,t,r){this.ignoreServicePromise=Ua.init((0,c.q6)(),e,r??[process.cwd()],t)}isIgnoredByAny(e){return this.ignoreServicePromise.then((t=>t.isIgnoredByAny(e)))}isGitIgnored(e){return this.ignoreServicePromise.then((t=>t.isGitIgnored(e)))}isCursorIgnored(e){return this.ignoreServicePromise.then((t=>t.isCursorIgnored(e)))}isRepoBlocked(e){return this.ignoreServicePromise.then((t=>t.isRepoBlocked(e)))}listCursorIgnoreFilesByRoot(e){return this.ignoreServicePromise.then((t=>t.listCursorIgnoreFilesByRoot(e)))}getCursorIgnoreMapping(){return this.ignoreServicePromise.then((e=>e.getCursorIgnoreMapping()))}getGitIgnoreMapping(){return this.ignoreServicePromise.then((e=>e.getGitIgnoreMapping()))}getRepoBlockExcludeGlobs(e){return this.ignoreServicePromise.then((t=>t.getRepoBlockExcludeGlobs(e)))}handleCursorIgnoreCreated(e){return this.ignoreServicePromise.then((t=>t.handleCursorIgnoreCreated(e)))}handleCursorIgnoreChanged(e){return this.ignoreServicePromise.then((t=>t.handleCursorIgnoreChanged(e)))}handleCursorIgnoreDeleted(e){return this.ignoreServicePromise.then((t=>t.handleCursorIgnoreDeleted(e)))}}const La=Math.min(8,Math.max(1,Math.floor(i.availableParallelism()/2)));class Ua{gitExecutor;gitIgnoreMapping;cursorIgnoreMapping;teamSettingsService;rootDirectories;static ripwalkCache;gitIgnoreCache=new m.qK({max:2e3});cursorIgnoreCache=new m.qK({max:2e3});gitRootCache=new m.qK({max:1e3});gitRemoteUrlCache=new m.qK({max:200});hasGitDirCache=new m.qK({max:1e3});static promiseQueue=new m.TJ({max:La});gitParsedIgnoreCache=new Map;cursorParsedIgnoreCache=new Map;gitRepoMappingPromise;constructor(e,t,r,n,o){this.gitExecutor=e,this.gitIgnoreMapping=t,this.cursorIgnoreMapping=r,this.teamSettingsService=n,this.rootDirectories=o}static getRipwalkCache(){return Ua.ripwalkCache??=new Ia,Ua.ripwalkCache}getIgnoreInstance(e,t,r){let n=r.get(e);return n||(n=fo().add(t),r.set(e,n)),n}hasNoWorkspaceFolders(){return 0===Object.keys(this.gitIgnoreMapping).length&&0===Object.keys(this.cursorIgnoreMapping).length}async resolveLookupRoot(e){return await(0,m.DN)(e)??(0,m.o1)(e)}static async init(e,t,r,n){const o=await(0,m.PH)(r,(async e=>{const t=await(0,m.DN)(e);return null===t?(console.warn(`[IgnoreService] Cannot resolve workspace root, using as-is: ${e}`),e):t})),s={},i={},a=(await(0,m.PH)(o,(r=>Aa(e,t,r)))).filter((e=>null!==e));return a.length>0&&await Promise.all([n?n.getTeamRepos():Promise.resolve(void 0),Ua.initializeIgnoreMapping(a,".gitignore",s),Ua.initializeIgnoreMapping(o,".cursorignore",i)]),new Ua(t,s,i,n,o)}static async preloadHierarchy(e,t,r,n){let o=(0,m.o1)(e);const s=(0,a.parse)(o).root;for(;o!==s;){if(n?.has(o)){const e=(0,a.dirname)(o);if(e===o)break;o=e;continue}void 0===r[o]&&await Ua.handleHierarchyIgnore(o,t,r),n?.add(o);const e=(0,a.dirname)(o);if(e===o)break;o=e}}static async handleHierarchyIgnore(e,t,r){const n=(0,a.join)(e,t);try{await(0,En.access)(n,En.constants.F_OK);const t=await(0,m.yR)(n),o=Ua.parseIgnoreRules(t);r[e]=o}catch(o){"ENOENT"===o.code||console.error(`Error reading ${t} file at ${n}:`,o),r[e]=[]}}static async initializeIgnoreMapping(e,t,r){try{const n=Ua.deduplicateRootDirectories(e),o=await Ua.promiseQueue.enqueueList(n,(e=>Ua.findFilesWithRipgrep(e,t))),s=Array.from(o.values()).flat();await Promise.all(s.map((async e=>{try{const t=await(0,m.yR)(e),n=Ua.parseIgnoreRules(t),o=(0,a.dirname)(e);r[o]=n}catch(r){console.error(`Error processing ${t} file at ${e}:`,r)}})));const i=new Set;for(const e of n)await Ua.preloadHierarchy(e,t,r,i)}catch(e){console.error(`Error initializing ignore mapping for ${t}:`,e)}}static async findFilesWithRipgrep(e,t){const r=(0,c.q6)(),n=[],o={root:e,includeGlobs:[`**/${t}`],excludeGlobs:ja,source:"ignore_scan"},s=Ua.getRipwalkCache().walk(r,o);for await(const t of s.lines)n.push((0,a.join)(e,t));return n}async handleManualLookupWhenNoWorkspaceDirs(e,t){const r={};let n=(0,a.dirname)(e);const o=(0,a.parse)(n).root;for(;;){const e=(0,a.join)(n,t);try{const t=await(0,m.yR)(e),o=Ua.parseIgnoreRules(t);o.length>0&&(r[n]=o)}catch{}if(n===o)break;n=(0,a.dirname)(n)}return this.testIgnored(e,r,((e,t)=>fo().add(t)))}async isIgnoredByAny(e){const[t,r,n]=await Promise.all([this.checkGitIgnored(e),this.checkCursorIgnored(e),this.checkRepoBlocked(e)]);return t||r||n}async isGitIgnored(e){return this.checkGitIgnored(e)}async isCursorIgnored(e){return this.checkCursorIgnored(e)}async checkGitIgnored(e){if(this.hasNoWorkspaceFolders())return this.handleManualLookupWhenNoWorkspaceDirs(e,".gitignore");const t=this.gitIgnoreCache.get(e);if(void 0!==t)return t;await this.populateHierarchyIfNeeded(e,".gitignore",this.gitIgnoreMapping);const r=this.checkIgnored(e,this.gitIgnoreMapping,this.gitParsedIgnoreCache);return this.gitIgnoreCache.set(e,r),r}async checkCursorIgnored(e){if(this.hasNoWorkspaceFolders())return this.handleManualLookupWhenNoWorkspaceDirs(e,".cursorignore");const t=this.cursorIgnoreCache.get(e);if(void 0!==t)return t;await this.populateHierarchyIfNeeded(e,".cursorignore",this.cursorIgnoreMapping);const r=this.checkIgnored(e,this.cursorIgnoreMapping,this.cursorParsedIgnoreCache);return this.cursorIgnoreCache.set(e,r),r}async populateHierarchyIfNeeded(e,t,r){let n=(0,a.dirname)((0,m.o1)(e));const o=[],s=(0,a.parse)(n).root;for(;n!==s;){if(this.rootDirectories.some((e=>(0,m.ZU)({basePath:e,targetPath:n})))){n=(0,a.dirname)(n);continue}if(void 0!==r[n])break;o.push(n);const e=(0,a.dirname)(n);if(e===n)break;n=e}o.length>0&&(await Ua.promiseQueue.enqueueList(o,(e=>Ua.handleHierarchyIgnore(e,t,r))),".gitignore"===t?this.gitIgnoreCache.clear():this.cursorIgnoreCache.clear())}testIgnored(e,t,r){for(const[n,o]of Object.entries(t)){if(0===o.length)continue;if(!(0,m.ZU)({basePath:n,targetPath:e}))continue;const t=(0,a.relative)(n,e);if(""===t)continue;const s=r(n,o),i=(0,m.oL)(t),l=s.test(i);if(l.ignored&&!l.unignored)return!0;const c=s.test(`${i}/`);if(c.ignored&&!c.unignored)return!0}return!1}checkIgnored(e,t,r){return this.testIgnored(e,t,((e,t)=>this.getIgnoreInstance(e,t,r)))}async listCursorIgnoreFilesByRoot(e){const t=await this.resolveLookupRoot(e),r=[];for(const[e,n]of Object.entries(this.cursorIgnoreMapping)){if(0===n.length)continue;if(!(0,m.ZU)({basePath:t,targetPath:e}))continue;const o=(0,a.join)(e,".cursorignore");try{await(0,En.access)(o),r.push(o)}catch{}}return r}async getCursorIgnoreMapping(){return{...this.cursorIgnoreMapping}}async getGitIgnoreMapping(){return{...this.gitIgnoreMapping}}static deduplicateRootDirectories(e){const t=[...e.map((e=>(0,m.o1)(e)))].sort(((e,t)=>e.length-t.length)),r=[];for(const e of t)r.some((t=>e.startsWith(`${t}/`)||e.startsWith(`${t}\\`)))||r.push(e);return r}static parseIgnoreRules(e){return e.split("\n").map((e=>e.replace(/\r$/,"").trimStart())).filter((e=>""!==e&&!e.startsWith("#")))}clearCaches(){this.gitIgnoreCache.clear(),this.cursorIgnoreCache.clear(),this.gitRootCache.clear(),this.gitRemoteUrlCache.clear(),this.hasGitDirCache.clear(),this.gitParsedIgnoreCache.clear(),this.cursorParsedIgnoreCache.clear()}async handleCursorIgnoreCreated(e){const t=(0,a.dirname)(e),r=await(0,m.yR)(e),n=Ua.parseIgnoreRules(r);this.cursorIgnoreMapping[t]=n,this.cursorParsedIgnoreCache.delete(t),this.cursorIgnoreCache.clear()}async handleCursorIgnoreChanged(e){const t=(0,a.dirname)(e),r=await(0,m.yR)(e),n=Ua.parseIgnoreRules(r);this.cursorIgnoreMapping[t]=n,this.cursorParsedIgnoreCache.delete(t),this.cursorIgnoreCache.clear()}handleCursorIgnoreDeleted(e){const t=(0,a.dirname)(e);this.cursorIgnoreMapping[t]=[],this.cursorParsedIgnoreCache.delete(t),this.cursorIgnoreCache.clear()}async findGitRootsForFile(e){const t=(0,m.o1)(e),r=this.gitRootCache.get(t);if(void 0!==r)return r;const n=[],o=[],s=[];let i=t;const l=(0,a.parse)(i).root;for(;i!==l;){o.push(i),void 0===this.hasGitDirCache.get(i)&&s.push(i);const e=(0,a.dirname)(i);if(e===i)break;i=e}if(s.length>0){const e=s.map((e=>(0,En.access)((0,a.join)(e,".git"),En.constants.F_OK).then((()=>[e,!0])).catch((()=>[e,!1])))),t=await Promise.all(e);for(const[e,r]of t)this.hasGitDirCache.set(e,r)}for(const e of o)!0===this.hasGitDirCache.get(e)&&n.push(e);return this.gitRootCache.set(t,n),n}async isRepoBlocked(e){return this.checkRepoBlocked(e)}async checkRepoBlocked(e){const t=await this.findGitRootsForFile(e);if(0===t.length)return!1;const r=await(this.teamSettingsService?.getTeamRepos());if(!r||!r.repos)return!1;for(const n of t){let t;this.gitRemoteUrlCache.has(n)?t=this.gitRemoteUrlCache.get(n):(t=await Oa((0,c.q6)(),this.gitExecutor,n),void 0!==t&&this.gitRemoteUrlCache.set(n,t));const o=r.repos.filter((e=>void 0!==t&&this.doesRepoUrlMatch(e.url,t)));if(0===o.length)continue;const s=(0,a.relative)(n,e)||".";for(const e of o)for(const t of e.patterns||[])if(this.matchGlob(t.pattern,s))return!0}return!1}doesRepoUrlMatch(e,t){if(e.trim().toLowerCase().replace(/\.git$/i,""),e.includes("*")){if("*"===e.trim())return!0;const r=Ma(e).toLowerCase(),n=Ma(t).toLowerCase();return this.matchRepoUrlGlob(r,n)}return Ma(e).toLowerCase()===Ma(t).toLowerCase()}matchGlob(e,t){const r=e.trim();if(!("."!==t&&""!==t||"**"!==r&&"**/*"!==r))return!0;try{return Na(r)(t)}catch{return r===t}}matchRepoUrlGlob(e,t){const r=e.trim();return!!this.matchGlob(r,t)||!!r.startsWith("*/")&&this.matchGlob(`**/${r.slice(2)}`,t)}async getRepoBlockExcludeGlobs(e){const t=await(this.teamSettingsService?.getTeamRepos());if(!t?.repos?.length)return[];const r=await this.resolveLookupRoot(e),n=await this.getGitRepoMapping();if(0===n.size)return[];const o=[];for(const[e,s]of n){if(void 0===s)continue;const n=this.normalizePathForComparison(e),i=this.normalizePathForComparison(r);let l=!1,c="";if(i.startsWith(n)?(l=!0,c=""):n.startsWith(i)&&(l=!0,c=(0,a.relative)(r,e)),!l)continue;const u=t.repos.filter((e=>this.doesRepoUrlMatch(e.url,s)));if(0!==u.length)for(const e of u)for(const t of e.patterns||[]){const e=t.pattern.trim();if(!e)continue;let r;r=c?(0,a.join)(c,e).replace(/\\/g,"/"):e,o.push(r),r.endsWith("/**")||o.push(`${r}/**`)}}return o}normalizePathForComparison(e){let t=e.replace(/\\/g,"/");return t.startsWith("/")&&t.length>2&&":"===t[2]&&(t=t.substring(1)),"win32"===process.platform&&(t=t.toLowerCase()),t}getGitRepoMapping(){return this.gitRepoMappingPromise||(this.gitRepoMappingPromise=this.initializeGitRepoMapping()),this.gitRepoMappingPromise}async initializeGitRepoMapping(){const e=new Map,t=[],r=["**/node_modules/**","**/.turbo/**","**/.next/**","**/.cache/**","**/.pnpm/**","**/.yarn/**","**/dist/**","**/build/**","**/out/**","**/target/**","**/.vscode/**","**/.idea/**","**/venv/**","**/__pycache__/**","**/logs/**","**/tmp/**","**/temp/**"],n=(0,c.q6)();for(const e of this.rootDirectories){const o=(0,m.o1)(e);try{await(0,En.access)((0,a.join)(o,".git"),En.constants.F_OK),t.includes(o)||t.push(o)}catch{}let s=(0,a.dirname)(o);const i=(0,a.parse)(s).root;for(;s!==i&&""!==s;){try{await(0,En.access)((0,a.join)(s,".git"),En.constants.F_OK),t.includes(s)||t.push(s)}catch{}const e=(0,a.dirname)(s);if(e===s)break;s=e}try{const e={root:o,includeGlobs:["**/.git/config"],excludeGlobs:r,noIgnoreVcs:!0,source:"ignore_scan"},s=Ua.getRipwalkCache().walk(n,e);for await(const e of s.lines){const r=(0,a.join)(o,e),n=(0,a.dirname)(r),s=(0,a.dirname)(n);t.includes(s)||t.push(s)}}catch{}}return await Promise.all(t.map((async t=>{try{const r=await Oa(n,this.gitExecutor,t);e.set(t,r)}catch{e.set(t,void 0)}}))),e}}var Ba=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const Ha=[{pattern:/[/\\]\.cursor[/\\]skills[/\\]/i,requiresThirdParty:!1},{pattern:/[/\\]\.agents[/\\]skills[/\\]/i,requiresThirdParty:!1},{pattern:/[/\\]\.claude[/\\]skills[/\\]/i,requiresThirdParty:!0},{pattern:/[/\\]\.codex[/\\]skills[/\\]/i,requiresThirdParty:!0},{pattern:/[/\\]\.cursor[/\\]skills-cursor[/\\]/i,requiresThirdParty:!1}],Wa=/[/\\]\.cursor[/\\]rules[/\\]/i,za=[{pattern:/[/\\]\.cursor[/\\]agents[/\\]/i,requiresThirdParty:!1},{pattern:/[/\\]\.claude[/\\]agents[/\\]/i,requiresThirdParty:!0}],qa=new Set(["AGENTS.md","CLAUDE.md","CLAUDE.local.md"]);function Ga(e,t){const r=e.replace(/\\/g,"/"),n=(0,a.basename)(r);if(qa.has(n))return"AGENTS.md"===n||t&&("CLAUDE.md"===n||"CLAUDE.local.md"===n)?"markdown":void 0;if(Wa.test(r)&&n.endsWith(".mdc"))return"rules";if("SKILL.md"===n)for(const{pattern:e,requiresThirdParty:n}of Ha)if(e.test(r)){if(n&&!t)continue;return"skills"}if(n.endsWith(".md"))for(const{pattern:e,requiresThirdParty:n}of za)if(e.test(r)){if(n&&!t)continue;return"agents"}}class Va{root;gitExecutor;userHomeDirectory;getThirdPartyExtensibilityEnabled;static ripwalkCache;constructor(e,t,r,n){this.root=e,this.gitExecutor=t,this.userHomeDirectory=r,this.getThirdPartyExtensibilityEnabled=n}static getRipwalkCache(){return Va.ripwalkCache??=new Ia,Va.ripwalkCache}async discover(e){const t={stack:[],error:void 0,hasError:!1};try{const r=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t}(t,(0,c.VI)(e.withName("NestedExtensibilityService.discover")),!1),n={rules:[],skills:[],markdown:[],agents:[]};if((0,a.resolve)(this.root)===(0,a.resolve)(this.userHomeDirectory))return r.span.setAttribute("nested_extensibility.rules",0),r.span.setAttribute("nested_extensibility.skills",0),r.span.setAttribute("nested_extensibility.markdown",0),r.span.setAttribute("nested_extensibility.agents",0),n;if(!await Aa(e,this.gitExecutor,(0,a.resolve)(this.root)))return r.span.setAttribute("nested_extensibility.rules",0),r.span.setAttribute("nested_extensibility.skills",0),r.span.setAttribute("nested_extensibility.markdown",0),r.span.setAttribute("nested_extensibility.agents",0),n;const o=this.getThirdPartyExtensibilityEnabled(),s=this.buildIncludeGlobs(o),i={root:this.root,includeGlobs:s,excludeGlobs:ja,followSymlinks:!0,source:"nested_extensibility"},l={rules:[],skills:[],markdown:[],agents:[]},u=Va.getRipwalkCache();try{const e=u.walk(r.ctx,i);try{for await(const t of e.lines){const e=Ga(t,o);e&&l[e].push((0,a.resolve)(this.root,t))}}finally{u.delete(i)}}catch{}return r.span.setAttribute("nested_extensibility.rules",l.rules.length),r.span.setAttribute("nested_extensibility.skills",l.skills.length),r.span.setAttribute("nested_extensibility.markdown",l.markdown.length),r.span.setAttribute("nested_extensibility.agents",l.agents.length),l}catch(e){t.error=e,t.hasError=!0}finally{Ba(t)}}buildIncludeGlobs(e){const t=["*/**/.cursor/**","*/**/.agents/**","*/**/AGENTS.md"];return e&&t.push("*/**/.claude/**","*/**/.codex/**","*/**/CLAUDE.md","*/**/CLAUDE.local.md"),t}}const Ja=new Set(["node_modules",".git",".svn",".hg","__pycache__",".cache","dist","build",".next",".nuxt"]);async function Ka({rootDir:e,includeFile:t,maxDepth:r=10,skipDirectories:n=Ja,containmentRootDir:o}){const s=[],i=[{dir:e,depth:0}],l=new Set,c=void 0!==o?await(0,En.realpath)(o):null,u=e=>{if(null===c)return!0;const t=(0,a.relative)(c,e);return""===t||!t.startsWith("..")&&!(0,a.isAbsolute)(t)};for(;i.length>0;){const e=i.pop();if(void 0===e)continue;const{dir:o,depth:c}=e;if(c>r)continue;try{const e=await(0,En.realpath)(o);if(!u(e))continue;if(l.has(e))continue;l.add(e)}catch{continue}const d=await(0,En.readdir)(o,{withFileTypes:!0,encoding:"utf8"}).catch((()=>null));if(null!==d)for(const e of d){const r=(0,a.join)(o,e.name);let l=e.isDirectory(),u=e.isFile();if(e.isSymbolicLink())try{const e=await(0,En.stat)(r);l=e.isDirectory(),u=e.isFile()}catch{continue}if(l){if(n.has(e.name))continue;i.push({dir:r,depth:c+1})}else u&&t(e.name)&&s.push(r)}}return s.sort(((e,t)=>e.localeCompare(t))),s}const Ya=new Set(["imagegen","openai-docs","opneai-docs","plugin-creator","skill-creator","skill-installer"]);function Za(e){const t=e.replace(/\\/g,"/").split("/").filter(Boolean),r=t.lastIndexOf(".codex");if(-1===r||"skills"!==t[r+1])return!1;const n=t.at(-1),o="SKILL.md"===n?t.at(-2):n;return void 0!==o&&Ya.has(o)}function Xa(e){return{dirPath:(0,a.join)(e,".cursor","skills-cursor"),scope:"builtin",source:"builtin"}}function Qa(e,t){const r=[];return t&&r.push({dirPath:(0,a.join)(e,".claude","skills"),scope:"project",source:"workspace"},{dirPath:(0,a.join)(e,".codex","skills"),scope:"project",source:"workspace"}),r.push({dirPath:(0,a.join)(e,".agents","skills"),scope:"project",source:"workspace"},{dirPath:(0,a.join)(e,".cursor","skills"),scope:"project",source:"workspace"}),r}function el(e,t){const r=[];return t&&r.push({dirPath:(0,a.join)(e,".claude","skills"),scope:"user",source:"user"},{dirPath:(0,a.join)(e,".codex","skills"),scope:"user",source:"user"}),r.push({dirPath:(0,a.join)(e,".agents","skills"),scope:"user",source:"user"},{dirPath:(0,a.join)(e,".cursor","skills"),scope:"user",source:"user"}),r}var tl=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t},rl=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const nl=(0,c.h)("local-exec:cursor-rules");async function ol(e){return await Ka({rootDir:e,includeFile:e=>"SKILL.md"===e})}function sl(e){return ll(e.data?.environments??e.data?.metadata?.environments)??[]}function il(e){return ll(e.data?.["disabled-environments"]??e.data?.metadata?.disabledEnvironments)??[]}function al(e){return ll(e.data?.metadata?.scopedTo??e.data?.["metadata.scopedTo"])??[]}function ll(e){if(Array.isArray(e)){const t=e.filter((e=>"string"==typeof e&&e.length>0));return 0===t.length?void 0:t}if("string"==typeof e){const t=e.split(",").map((e=>e.trim())).filter((e=>e.length>0));return 0===t.length?void 0:t}}function cl(e,t){const r=function(e){const t=e.data?.metadata?.surfaces;return Array.isArray(t)?t:"string"==typeof t?t.split(",").map((e=>e.trim())).filter(Boolean):[]}(e);return r.length>0&&!r.includes(t)}function ul(e){return e.slice(0,1536)}async function dl(e){const t=await(0,m.yR)(e);return{skillFilePath:e,content:t,parsed:mo(t)}}function pl(e){return!0===e.data?.alwaysApply}function hl({skillFilePath:e,content:t,parsed:r}){if(pl(r))return new po.DX({fullPath:e,content:t,type:new po.f5({type:{case:"global",value:new po.i9}}),environments:sl(r),disabledEnvironments:il(r),scopedTo:al(r)});const n="string"==typeof r.data?.description?ul(r.data.description):void 0;return n?new po.DX({fullPath:e,content:t,type:new po.f5({type:{case:"agentFetched",value:new po.Xo({description:n})}}),environments:sl(r),disabledEnvironments:il(r),scopedTo:al(r)}):new po.DX({fullPath:e,parseError:"Description is required",scopedTo:al(r),type:new po.f5({type:{case:"agentFetched",value:new po.Xo}})})}function ml({skillFilePath:e,content:t,parsed:r}){const n="string"==typeof r.data?.description?ul(r.data.description):"",o=Qi(r.data?.paths??r.data?.globs);return new uo.N({fullPath:e,content:t,description:n,globs:o??[],parseError:n?void 0:"Description is required",environments:sl(r),disabledEnvironments:il(r),scopedTo:al(r),disableModelInvocation:!0===r.data?.["disable-model-invocation"]})}function fl({rules:e,agentSkills:t,skillFilePath:r,errorMessage:n}){e.push(function({skillFilePath:e,errorMessage:t}){return new po.DX({fullPath:e,parseError:t,type:new po.f5({type:{case:"agentFetched",value:new po.Xo}})})}({skillFilePath:r,errorMessage:`Failed to read skill file: ${n}`})),t.push(function({skillFilePath:e,errorMessage:t}){return new uo.N({fullPath:e,parseError:t})}({skillFilePath:r,errorMessage:`Failed to read skill file: ${n}`}))}function gl(e){const t=e.replace(/\\/g,"/"),r=t.toLowerCase(),n=r.indexOf("/.cursor/"),o=r.indexOf("/.claude/"),s=r.indexOf("/.codex/"),i=r.indexOf("/.agents/");return-1!==n?`${t.slice(0,n)}::${t.slice(n+9)}`:-1!==o?`${t.slice(0,o)}::${t.slice(o+9)}`:-1!==s?`${t.slice(0,s)}::${t.slice(s+8)}`:-1!==i?`${t.slice(0,i)}::${t.slice(i+9)}`:e}function vl(e){const t=e.trim();return"true"===t||"false"!==t&&(t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t)}function yl(e){const t=e.trimStart();if(!t.startsWith("---"))return null;const r=t.split("---").filter(Boolean);if(r.length<2)return null;const n=r[0].trim(),o=r.slice(1).join("---").trim(),s={};let i=null,a=null;for(const e of n.split("\n")){const t=e.replace(/\r$/,""),r=t.match(/^\s+-\s+(.*)$/);if(r&&a){let e=r[1].trim();(e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'"))&&(e=e.slice(1,-1));const t=s[a];Array.isArray(t)&&t.push(e);continue}const n=t.startsWith(" ")||t.startsWith("\t");if(i&&n){const e=t.trim(),r=e.indexOf(":");if(-1===r)continue;const n=e.slice(0,r).trim(),o=e.slice(r+1).trim(),l=vl(o),c=`${i}.${n}`;""===o?(s[c]=[],a=c):"metadata.environments"===c||"metadata.disabledEnvironments"===c||"metadata.scopedTo"===c?(s[c]=String(l).split(",").map((e=>e.trim())).filter(Boolean),a=null):(s[c]=l,a=null);continue}i=null,a=null;const o=t.indexOf(":");if(-1===o)continue;const l=t.slice(0,o).trim(),c=t.slice(o+1).trim();if(""===c&&"metadata"===l){i=l;continue}if("globs"===l&&""===c){s.globs=[],a="globs";continue}const u=vl(c);s[l]="metadata.environments"!==l&&"metadata.disabledEnvironments"!==l&&"metadata.scopedTo"!==l?u:String(u).split(",").map((e=>e.trim())).filter(Boolean)}return{frontmatter:s,rawFrontmatter:`---\n${n}\n---`,body:o}}class wl{cursorRulesServices;static CHANGE_COALESCE_MS=1e3;onChangeCallbacks=new Set;disposeChangeListeners;changeTimer;constructor(e){this.cursorRulesServices=e}async getAllCursorRules(e){const t={stack:[],error:void 0,hasError:!1};try{const r=tl(t,(0,c.VI)(e.withName("MergedCursorRulesService.getAllCursorRules")),!1),n=this.cursorRulesServices.map((e=>e.getAllCursorRules(r.ctx).catch((e=>((0,go.debuglog)("Failed to load cursor rules from service:",e),[]))))),o=(await Promise.all(n)).flat(),s=new Set,i=[];for(const e of o){const t=gl(e.fullPath);s.has(t)||(s.add(t),i.push(e))}return i}catch(e){t.error=e,t.hasError=!0}finally{rl(t)}}reload(e){for(const t of this.cursorRulesServices)t.reload(e)}scheduleDidChangeRules(){void 0===this.changeTimer&&(this.changeTimer=setTimeout((()=>{this.changeTimer=void 0;for(const e of Array.from(this.onChangeCallbacks))e()}),wl.CHANGE_COALESCE_MS))}ensureChangeListenersRegistered(){void 0===this.disposeChangeListeners&&(this.disposeChangeListeners=this.cursorRulesServices.map((e=>e.onDidChangeRules((()=>this.scheduleDidChangeRules())))))}disposeChangeListenersIfUnused(){if(!(this.onChangeCallbacks.size>0||void 0===this.disposeChangeListeners)){for(const e of this.disposeChangeListeners)e();this.disposeChangeListeners=void 0,void 0!==this.changeTimer&&(clearTimeout(this.changeTimer),this.changeTimer=void 0)}}onDidChangeRules(e){return this.onChangeCallbacks.add(e),this.ensureChangeListenersRegistered(),()=>{this.onChangeCallbacks.delete(e),this.disposeChangeListenersIfUnused()}}dispose(){if(void 0!==this.changeTimer&&(clearTimeout(this.changeTimer),this.changeTimer=void 0),this.onChangeCallbacks.clear(),void 0!==this.disposeChangeListeners){for(const e of this.disposeChangeListeners)e();this.disposeChangeListeners=void 0}for(const e of this.cursorRulesServices)e.dispose&&e.dispose()}}class bl{gitExecutor;rootDirectory;loadNestedRules;getThirdPartyExtensibilityEnabled;static ripwalkCache;_rules;loadTraceId=void 0;unsubscribeWatcher;onChangeCallbacks=new Set;ignoreService;nestedExtensibilityService;constructor(e,t,r,n,o,s,a,l){this.gitExecutor=t,this.rootDirectory=r,this.loadNestedRules=n,this.getThirdPartyExtensibilityEnabled=o,this.nestedExtensibilityService=new Va(r,t,(0,i.homedir)(),o),this.ignoreService=a??new Fa(t,void 0,[this.rootDirectory]);const u=performance.now();if(this._rules=this.load(e,l).then((t=>{try{nl.info(e,"LocalCursorRulesService load completed",{durationMs:Math.round(performance.now()-u),ruleCount:t.length})}catch{}return t})).catch((e=>((0,go.debuglog)("Failed to load cursor rules:",e),[]))),s){const e=[".cursor/rules/**/*.mdc","AGENTS.md","CLAUDE.md","CLAUDE.local.md",".cursorrules"];this.unsubscribeWatcher=s.subscribe(this.rootDirectory,e,(e=>{const t={stack:[],error:void 0,hasError:!1};try{const r=(0,c.q6)(),n=tl(t,(0,c.VI)(r.withName("LocalCursorRulesService.fileWatcher.subscribe")),!1);this.reloadAtPath(n.ctx,e)}catch(e){t.error=e,t.hasError=!0}finally{rl(t)}}))}}reload(e){this._rules=this.load(e).catch((e=>((0,go.debuglog)("Failed to load cursor rules:",e),[])));for(const e of this.onChangeCallbacks)e()}static getRipwalkCache(){return bl.ripwalkCache??=new Ia,bl.ripwalkCache}reloadAtPath(e,t){const r={stack:[],error:void 0,hasError:!1};try{const n=tl(r,(0,c.VI)(e.withName("LocalCursorRulesService.reloadAtPath")),!1),o=this._rules;this._rules=(async()=>[...(await o).filter((e=>e.fullPath!==t)),...(await this.readRulesAtPath(n.ctx,t)).map((e=>this.toCursorRule(e)))])().catch((e=>((0,go.debuglog)("Failed to load cursor rules at path:",e),[])));for(const e of this.onChangeCallbacks)e()}catch(e){r.error=e,r.hasError=!0}finally{rl(r)}}isRuleMarkdownFile(e){return"CLAUDE.md"===e||"CLAUDE.local.md"===e||"AGENTS.md"===e}async readRulesAtPath(e,t){const r={stack:[],error:void 0,hasError:!1};try{const n=tl(r,(0,c.VI)(e.withName("LocalCursorRulesService.readRulesAtPath")),!1),o=(0,a.basename)(t);if(".cursorrules"===o){const e=(0,a.resolve)(this.rootDirectory),t=await Aa(n.ctx,this.gitExecutor,e)||e,r=await this.loadCursorRulesRule(n.ctx,t);return r?[r]:[]}if(o.endsWith(".mdc"))try{const e=yl(await(0,m.yR)(t));if(e)return[{filename:(0,a.basename)(t,".mdc"),path:t,frontmatter:e.frontmatter,rawFrontmatter:e.rawFrontmatter,body:e.body}]}catch{}else if(this.isRuleMarkdownFile(o))try{return await this.loadRulesFromMarkdownFile(n.ctx,(0,a.dirname)(t),o)}catch{}return[]}catch(e){r.error=e,r.hasError=!0}finally{rl(r)}}onDidChangeRules(e){return this.onChangeCallbacks.add(e),()=>{this.onChangeCallbacks.delete(e)}}dispose(){this.unsubscribeWatcher&&(this.unsubscribeWatcher(),this.unsubscribeWatcher=void 0)}async load(e,t){const r={stack:[],error:void 0,hasError:!1};try{const n=tl(r,(0,c.VI)(e.withName("LocalCursorRulesService.load")),!1);this.loadTraceId=n.span.spanContext().traceId;const o=(0,a.resolve)(this.rootDirectory),s=await Aa(n.ctx,this.gitExecutor,o)||o,i=this.loadCursorRulesRule(n.ctx,s).then((e=>e?[e]:[])),l=this.loadRulesFromDirAndAncestors(n.ctx,o);let u,d;if(this.loadNestedRules){const e=t??this.nestedExtensibilityService.discover(n.ctx);u=e.then((e=>this.parseNestedRuleFiles(n.ctx,e.rules))),d=e.then((e=>this.parseNestedMarkdownFiles(n.ctx,e.markdown)))}else u=[],d=[];const p=(await Promise.all([i,l,u,d])).flat(),h=new Map;for(const e of p)h.set(e.path,e);return[...h.values()].map((e=>this.toCursorRule(e)))}catch(e){r.error=e,r.hasError=!0}finally{rl(r)}}async loadCursorRulesRule(e,t){const r={stack:[],error:void 0,hasError:!1};try{tl(r,(0,c.VI)(e.withName("LocalCursorRulesService.loadCursorrules")),!1);try{const e=(0,a.join)(t,".cursorrules");if((await(0,En.stat)(e)).isFile())return{filename:".cursorrules",path:e,frontmatter:{alwaysApply:!0},body:await(0,m.yR)(e)}}catch{}return null}catch(e){r.error=e,r.hasError=!0}finally{rl(r)}}async getAllCursorRules(e){const t={stack:[],error:void 0,hasError:!1};try{return tl(t,(0,c.VI)(e.withName("LocalCursorRulesService.getAllCursorRules")),!1).span.setAttribute("cacheTraceId",this.loadTraceId??"undefined"),await this._rules}catch(e){t.error=e,t.hasError=!0}finally{rl(t)}}toCursorRule(e){return function(e){let t;if(!0===e.frontmatter.alwaysApply)t={case:"global",value:new po.i9};else{const r=Qi(e.frontmatter.globs);t=r&&r.length>0?{case:"fileGlobbed",value:new po.uT({globs:r})}:"string"==typeof e.frontmatter.description&&e.frontmatter.description.trim().length>0?{case:"agentFetched",value:new po.Xo({description:ul(e.frontmatter.description)})}:{case:"manuallyAttached",value:new po._u}}const r=e.frontmatter["metadata.environments"],n=Array.isArray(r)?r:[],o=e.frontmatter["metadata.disabledEnvironments"],s=Array.isArray(o)?o:[],i=e.frontmatter["metadata.scopedTo"],a=Array.isArray(i)?i:[];return new po.DX({fullPath:e.path,content:e.body,type:new po.f5({type:t}),environments:n,disabledEnvironments:s,scopedTo:a,frontmatter:e.rawFrontmatter??""})}({path:e.path,body:e.body,frontmatter:e.frontmatter,rawFrontmatter:e.rawFrontmatter})}async loadRulesFromDirAndAncestors(e,t){const r={stack:[],error:void 0,hasError:!1};try{const n=tl(r,(0,c.VI)(e.withName("LocalCursorRulesService.loadRulesFromDirAndAncestors")),!1),o=[];let s=t;const i=this.getThirdPartyExtensibilityEnabled();for(;;){const e=(0,a.join)(s,".cursor","rules");o.push((async()=>await this.dirIsDirectory(n.ctx,e)?this.loadRulesFromDirectory(n.ctx,e):[])());const t=[];i&&t.push("CLAUDE.md","CLAUDE.local.md"),t.push("AGENTS.md");for(const e of t)o.push(this.loadRulesFromMarkdownFile(n.ctx,s,e));const r=(0,a.dirname)(s);if(r===s)break;s=r}const l=(await Promise.all(o)).flat();return n.span.setAttribute("rules",l.length),l}catch(e){r.error=e,r.hasError=!0}finally{rl(r)}}async loadRulesFromMarkdownFile(e,t,r){const n={stack:[],error:void 0,hasError:!1};try{tl(n,(0,c.VI)(e.withName("LocalCursorRulesService.loadRulesFromMarkdownFile")),!1).span.setAttribute("filename",r);try{const e=(0,a.join)(t,r);if(await this.isCursorIgnored(e))return[];if((await(0,En.stat)(e)).isFile()){const t=await(0,m.yR)(e);return[{filename:(0,a.basename)(e,".md"),path:e,frontmatter:{alwaysApply:!0},body:t}]}}catch{}return[]}catch(e){n.error=e,n.hasError=!0}finally{rl(n)}}async isCursorIgnored(e){try{const t=await $a((0,a.resolve)(this.rootDirectory,e));return null===t||await this.ignoreService.isCursorIgnored(t)}catch{return!1}}async parseNestedRuleFiles(e,t){const r={stack:[],error:void 0,hasError:!1};try{const n=tl(r,(0,c.VI)(e.withName("LocalCursorRulesService.parseNestedRuleFiles")),!1),o=(await Promise.all(t.map((async e=>{try{const t=yl(await(0,m.yR)(e));if(t)return{filename:(0,a.basename)(e,".mdc"),path:e,frontmatter:t.frontmatter,rawFrontmatter:t.rawFrontmatter,body:t.body}}catch{}})))).filter((e=>void 0!==e));return n.span.setAttribute("ruleFiles",o.length),o}catch(e){r.error=e,r.hasError=!0}finally{rl(r)}}async parseNestedMarkdownFiles(e,t){const r={stack:[],error:void 0,hasError:!1};try{const n=tl(r,(0,c.VI)(e.withName("LocalCursorRulesService.parseNestedMarkdownFiles")),!1),o=(await Promise.all(t.map((async e=>{try{const t=(0,a.basename)(e);if(!this.isRuleMarkdownFile(t))return[];const r=(0,a.dirname)(e);return await this.loadRulesFromMarkdownFile(n.ctx,r,t)}catch{}return[]})))).flat();return n.span.setAttribute("markdownFiles",o.length),o}catch(e){r.error=e,r.hasError=!0}finally{rl(r)}}async loadRulesFromDirectory(e,t){const r={stack:[],error:void 0,hasError:!1};try{const n=tl(r,(0,c.VI)(e.withName("LocalCursorRulesService.loadRulesFromDirectory")),!1),o=[];try{const e={root:t,includeGlobs:["**/*.mdc"],followSymlinks:!0,source:"cursor_rules"},r=bl.getRipwalkCache().walk(n.ctx,e);for await(const e of r.lines){const r=(0,a.join)(t,e);o.push(...await this.readRulesAtPath(n.ctx,r))}}catch{}return n.span.setAttribute("rules",o.length),o}catch(e){r.error=e,r.hasError=!0}finally{rl(r)}}async dirIsDirectory(e,t){const r={stack:[],error:void 0,hasError:!1};try{tl(r,(0,c.VI)(e.withName("LocalCursorRulesService.dirIsDirectory")),!1);try{return(await(0,En.stat)(t)).isDirectory()}catch{return!1}}catch(e){r.error=e,r.hasError=!0}finally{rl(r)}}}class Sl{workspacePaths;userHomeDirectory;gitExecutor;initialBuiltinSkillsSyncPromise;_rules;_agentSkills;watchersByFolder=new Map;onChangeCallbacks=new Set;foldersToWatch;fileWatcher;getThirdPartyExtensibilityEnabled;surface;nestedExtensibilityEntries;constructor(e,t,r,n,o,s,i=()=>!0,a=Promise.resolve(),l="ide",c){if(this.workspacePaths=t,this.userHomeDirectory=r,this.gitExecutor=n,this.initialBuiltinSkillsSyncPromise=a,this.surface=l,this.fileWatcher=s,this.getThirdPartyExtensibilityEnabled=i,void 0!==c&&c.length!==t.length)throw new Error(`initialNestedExtensibilityResults length (${c.length}) must match workspacePaths length (${t.length})`);this.nestedExtensibilityEntries=o?t.map((e=>new Va(e,n,r,i))):[],this.foldersToWatch=this.computeFoldersToWatch();const u=performance.now(),d=this.loadAll(e,c).then((t=>{try{nl.info(e,"AgentSkillsCursorRulesService load completed",{durationMs:Math.round(performance.now()-u),ruleCount:t.rules.length,skillCount:t.agentSkills.length})}catch{}return t})).catch((e=>((0,go.debuglog)("Failed to load Agent Skills:",e),{rules:[],agentSkills:[]})));this._rules=d.then((e=>e.rules)),this._agentSkills=d.then((e=>e.agentSkills)),this.setupWatchers(this.foldersToWatch)}computeFoldersToWatch(){const e=this.getThirdPartyExtensibilityEnabled(),t=new Set;for(const r of this.workspacePaths){t.add((0,a.join)(r,".cursor","rules"));for(const n of Qa(r,e))t.add(n.dirPath)}for(const r of el(this.userHomeDirectory,e))t.add(r.dirPath);return t.add(Xa(this.userHomeDirectory).dirPath),Array.from(t)}setupWatchers(e){if(!this.fileWatcher)return;const t=["**"];for(const r of e){if(this.watchersByFolder.has(r))continue;const e=this.fileWatcher.subscribe(r,t,(e=>{const t={stack:[],error:void 0,hasError:!1};try{const r=(0,c.q6)(),n=tl(t,(0,c.VI)(r.withName("AgentSkillsCursorRulesService.fileWatcher.subscribe")),!1);this.reloadAtPath(n.ctx,e)}catch(e){t.error=e,t.hasError=!0}finally{rl(t)}}));this.watchersByFolder.set(r,e)}}removeWatchers(e){for(const t of e){const e=this.watchersByFolder.get(t);e&&(e(),this.watchersByFolder.delete(t))}}async getAllCursorRules(e){return await this._rules}reload(e){const t=this.computeFoldersToWatch(),r=new Set(this.foldersToWatch),n=new Set(t),o=this.foldersToWatch.filter((e=>!n.has(e)));this.removeWatchers(o);const s=t.filter((e=>!r.has(e)));this.setupWatchers(s),this.foldersToWatch=t;const i=this.loadAll(e).catch((e=>((0,go.debuglog)("Failed to load Agent Skills:",e),{rules:[],agentSkills:[]})));this._rules=i.then((e=>e.rules)),this._agentSkills=i.then((e=>e.agentSkills));for(const e of this.onChangeCallbacks)e()}reloadAtPath(e,t){const r={stack:[],error:void 0,hasError:!1};try{tl(r,(0,c.VI)(e.withName("AgentSkillsCursorRulesService.reloadAtPath")),!1);const n=t.endsWith("SKILL.md")?t:(0,a.join)(t,"SKILL.md"),o=dl(n);o.catch((()=>{}));const s=async(e,t)=>{const r=(await e).filter((e=>e.fullPath!==n));if(Za(n))return r;try{await(0,En.stat)(n);const e=await o;if(cl(e.parsed,this.surface))return r;const s=t(e);return void 0===s?r:[...r,s]}catch{return r}};this._rules=s(this._rules,(e=>hl(e))).catch((e=>((0,go.debuglog)("Failed to load Agent Skills at path:",e),[]))),this._agentSkills=s(this._agentSkills,(e=>pl(e.parsed)?void 0:ml(e))).catch((e=>((0,go.debuglog)("Failed to load Agent Skills (proto) at path:",e),[])));for(const e of this.onChangeCallbacks)e()}catch(e){r.error=e,r.hasError=!0}finally{rl(r)}}async getAllAgentSkills(e){return await this._agentSkills}onDidChangeSkills(e){return this.onDidChangeRules(e)}onDidChangeRules(e){return this.onChangeCallbacks.add(e),()=>{this.onChangeCallbacks.delete(e)}}dispose(){for(const e of this.watchersByFolder.values())e();this.watchersByFolder.clear()}async loadAll(e,t){const r={stack:[],error:void 0,hasError:!1};try{const n=tl(r,(0,c.VI)(e.withName("AgentSkillsCursorRulesService.loadAll")),!1);await this.initialBuiltinSkillsSyncPromise;const o=[],s=[],i=new Set;for(const e of this.foldersToWatch){const t=(await ol(e)).filter((e=>!Za(e))),r=await Promise.all(t.map((async e=>{try{return await dl(e)}catch(t){return{skillFilePath:e,error:t instanceof Error?t.message:String(t)}}})));for(const e of r)if(i.add(e.skillFilePath),"error"in e)fl({rules:o,agentSkills:s,skillFilePath:e.skillFilePath,errorMessage:e.error});else{if(cl(e.parsed,this.surface))continue;o.push(hl(e)),pl(e.parsed)||s.push(ml(e))}}const a=(await Promise.all(this.nestedExtensibilityEntries.map(((e,r)=>(t?.[r]??e.discover(n.ctx)).catch((e=>{(0,go.debuglog)("cursor-rules-service")("Failed to discover nested agent skills: %O",e)})))))).flatMap((e=>e?.skills??[])).filter((e=>!Za(e))),l=[],u=new Set;for(const e of a)i.has(e)||u.has(e)||(u.add(e),l.push(e));const d=await Promise.all(l.map((async e=>{try{return await dl(e)}catch(t){return{skillFilePath:e,error:t instanceof Error?t.message:String(t)}}})));for(const e of d)if(i.add(e.skillFilePath),"error"in e)fl({rules:o,agentSkills:s,skillFilePath:e.skillFilePath,errorMessage:e.error});else{if(cl(e.parsed,this.surface))continue;o.push(hl(e)),pl(e.parsed)||s.push(ml(e))}return n.span.setAttribute("agent_skills.total",o.length),n.span.setAttribute("agent_skills_proto.total",s.length),{rules:o,agentSkills:s}}catch(e){r.error=e,r.hasError=!0}finally{rl(r)}}}function kl(e){let t;switch(e.type){case"global":t=new po.f5({type:{case:"global",value:new po.i9}});break;case"fileGlobbed":t=new po.f5({type:{case:"fileGlobbed",value:new po.uT({globs:e.globs??[]})}});break;case"agentFetched":t=new po.f5({type:{case:"agentFetched",value:new po.Xo({description:ul(e.description??"")})}});break;case"manuallyAttached":t=new po.f5({type:{case:"manuallyAttached",value:new po._u}});break;default:e.type,t=new po.f5({type:{case:"manuallyAttached",value:new po._u}})}return new po.DX({fullPath:e.fullPath,content:e.content,type:t,gitRemoteOrigin:e.gitRemoteOrigin,plugin:e.plugin,marketplace:e.marketplace,pluginId:e.pluginId,marketplaceId:e.marketplaceId,environments:e.environments??[],disabledEnvironments:e.disabledEnvironments??[],scopedTo:[]})}class El{getImportSettings;pluginsService;_rules;_agentSkills;onChangeCallbacks=new Set;currentImportSettings;constructor(e,t,r,n){this.getImportSettings=t,this.pluginsService=n,this.currentImportSettings=this.getImportSettings();const o=performance.now(),s=this.loadAll(e).then((t=>{try{nl.info(e,"CursorPluginsAgentSkillsService load completed",{durationMs:Math.round(performance.now()-o),ruleCount:t.rules.length,skillCount:t.agentSkills.length})}catch{}return t})).catch((e=>((0,go.debuglog)("cursor-plugins-agent-skills")("Failed to load Cursor Plugins Agent Skills: %s",e instanceof Error?e.message:String(e)),{rules:[],agentSkills:[]})));this._rules=s.then((e=>e.rules)),this._agentSkills=s.then((e=>e.agentSkills))}async getAllCursorRules(e){return await this._rules}async getAllAgentSkills(e){return await this._agentSkills}reload(e){const t=this.getImportSettings();this.currentImportSettings=t;const r=this.loadAll(e,!0).catch((e=>((0,go.debuglog)("cursor-plugins-agent-skills")("Failed to load Cursor Plugins Agent Skills: %s",e instanceof Error?e.message:String(e)),{rules:[],agentSkills:[]})));this._rules=r.then((e=>e.rules)),this._agentSkills=r.then((e=>e.agentSkills));for(const e of this.onChangeCallbacks)e()}onDidChangeRules(e){return this.onChangeCallbacks.add(e),()=>{this.onChangeCallbacks.delete(e)}}onDidChangeSkills(e){return this.onDidChangeRules(e)}dispose(){this.onChangeCallbacks.clear()}async loadAll(e,t=!1){const r={stack:[],error:void 0,hasError:!1};try{const n=tl(r,(0,c.VI)(e.withName("CursorPluginsAgentSkillsService.loadAll")),!1),o=[],s=[];try{let e=t?await this.pluginsService.reload():await this.pluginsService.getAllEnabledPlugins();this.currentImportSettings.importThirdPartyPlugins||(e=e.filter((e=>"claude-plugin"!==e.identifier.source))),n.span.setAttribute("cursor_plugins.loaded",e.length);const r=function(e){return wa(e,(e=>e.skills))}(e),i=function(e){return wa(e,(e=>e.rules))}(e);for(const e of[...r,...i])o.push(kl(e));for(const t of e){const e=`plugin:${xo(t.identifier)}`,r=Co(t.identifier),n=_o(t.identifier),o=Po(t.identifier),i=Ro(t.identifier);for(const l of t.skills){if(!0===l.alwaysApply)continue;let c=!1;if(l.content?.includes("disable-model-invocation"))try{c=!0===mo(l.content).data?.["disable-model-invocation"]}catch{}s.push(new uo.N({fullPath:(0,a.join)(t.installPath,l.path),content:l.content,description:ul(l.description??""),environments:l.environments??[],disabledEnvironments:l.disabledEnvironments??[],gitRemoteOrigin:e,plugin:r,marketplace:n,pluginId:o,marketplaceId:i,disableModelInvocation:c}))}}}catch(e){n.span.setAttribute("cursor_plugins.error",String(e))}return n.span.setAttribute("cursor_plugins.total",o.length),n.span.setAttribute("cursor_plugins_proto.total",s.length),{rules:o,agentSkills:s}}catch(e){r.error=e,r.hasError=!0}finally{rl(r)}}}const xl=(0,go.debuglog)("local-subagents");class Cl{async getAllSubagents(){return[]}async reload(){return[]}}function _l(e){return"true"===(e??"").trim().toLowerCase()}function Pl(e){const t=e.match(/^---\s*\n([\s\S]*?)\n---\s*\n?([\s\S]*)$/m);if(!t)return null;const r=t[1]??"",n=(t[2]??"").trim();if(0===n.length)return null;const o={};for(const e of r.split("\n")){const t=e.trim();if(0===t.length||t.startsWith("#"))continue;const r=t.indexOf(":");if(-1===r)continue;const n=t.slice(0,r).trim().toLowerCase(),s=t.slice(r+1).trim();0!==n.length&&(o[n]=s)}const s=o.name??"",i=o.description,a=o.model,l=_l(o["force-default-model"]),c="true"===(o.readonly??"").trim().toLowerCase()?ho.b$.READONLY:ho.b$.DEFAULT,u=_l(o.background??o.is_background),d=o.tools;return{name:s,description:i,tools:void 0!==d&&d.length>0?d.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[],model:a,forceDefaultModel:l,prompt:n,permissionMode:c,isBackground:u}}function Rl(e){const t=(0,a.extname)(e).toLowerCase();return".md"===t||".mdc"===t||".markdown"===t}function Tl(e){return(0,a.basename)(e,(0,a.extname)(e)).replace(/[\s_]+/g,"-")}async function Il(e,t){return await Ka({rootDir:e,includeFile:Rl,containmentRootDir:t})}class Al{workspacePath;cursorAgentsSource;subagents;getThirdPartyExtensibilityEnabled;constructor(e,t,r="workspace"){this.workspacePath=e,this.cursorAgentsSource=r,this.getThirdPartyExtensibilityEnabled=t??(()=>!0),this.subagents=this.load().catch((e=>(xl("Failed to load subagents: %o",e),[])))}async getAllSubagents(){return this.subagents}async reload(){return this.subagents=this.load().catch((e=>(xl("Failed to load subagents: %o",e),[]))),await this.subagents}computeAgentsDirs(){const e=(0,a.resolve)(this.workspacePath),t=[{dirPath:(0,a.join)(e,".cursor","agents"),source:this.cursorAgentsSource}];return this.getThirdPartyExtensibilityEnabled()&&t.push({dirPath:(0,a.join)(e,".claude","agents"),source:"claude"}),t}async load(){const e=this.computeAgentsDirs(),t=[];for(const{dirPath:r,source:n}of e){const e=await Il(r,this.workspacePath);for(const r of e){const e=(0,a.basename)(r);try{if(!(await(0,En.stat)(r)).isFile())continue}catch(e){xl("Skipping subagent file %s due to stat error: %o",r,e);continue}try{const o=Pl(await(0,m.yR)(r));if(!o)continue;t.push(new ho.zz({fullPath:r,name:o.name||Tl(e),description:o.description??"",tools:o.tools,model:o.model??"inherit",forceDefaultModel:o.forceDefaultModel,prompt:o.prompt,permissionMode:o.permissionMode,isBackground:o.isBackground,source:n}))}catch(e){xl("Failed to parse subagent file %s: %o",r,e)}}}return t}}const Ol=new Set(["claude-code-tutor"]);class Dl{subagentsServices;constructor(e){this.subagentsServices=e}async getAllSubagents(){const e=await Promise.all(this.subagentsServices.map((e=>e.getAllSubagents().catch((e=>(xl("Failed to load subagents from merged service: %o",e),[])))))),t=new Map;for(const r of e)for(const e of r)Ol.has(e.name)||t.has(e.name)||t.set(e.name,e);return Array.from(t.values())}async reload(){return await Promise.all(this.subagentsServices.map((e=>e.reload()))),this.getAllSubagents()}}class Ml{getSettings;pluginsService;_subagentsCache=[];_loadId=0;_loadPromise=null;_loadedOnce=!1;constructor(e,t){this.getSettings=e,this.pluginsService=t,this.runLoadInBackground()}async getAllSubagents(){return this._loadPromise&&await this._loadPromise,this._loadedOnce||await this.reload(),[...this._subagentsCache]}async reload(){return this.runLoadInBackground(!0),this._loadPromise&&await this._loadPromise,this._subagentsCache}runLoadInBackground(e=!1){const t=++this._loadId;this._loadPromise=this.load(e).then((e=>{t===this._loadId&&(this._subagentsCache=e,this._loadedOnce=!0)})).catch((e=>{t===this._loadId&&(xl("Failed to load Cursor plugin subagents: %o",e),this._subagentsCache=[],this._loadedOnce=!0)})).finally((()=>{t===this._loadId&&(this._loadPromise=null)}))}dispose(){}async load(e){const t=[];try{let r=e?await this.pluginsService.reload():await this.pluginsService.getAllEnabledPlugins();this.getSettings().importThirdPartyPlugins||(r=r.filter((e=>"claude-plugin"!==e.identifier.source)));const n=function(e,t={stripModel:!0,stripTools:!0}){var r;const n=[];for(const o of e){const e=Co(o.identifier),s=_o(o.identifier),i=Po(o.identifier),l=Ro(o.identifier);for(const c of o.agents){const u=ya(c,t),d=(0,a.join)(o.installPath,u.path);n.push({name:u.name,description:null!==(r=u.description)&&void 0!==r?r:"",prompt:u.prompt,fullPath:d,permissionMode:"readonly"===u.permissionMode?"readonly":"default",plugin:e,marketplace:s,pluginId:i,marketplaceId:l})}}return n}(r,{stripModel:!0,stripTools:!0});for(const e of n){const r="readonly"===e.permissionMode?ho.b$.READONLY:ho.b$.DEFAULT;t.push(new ho.zz({name:e.name,description:e.description,tools:[],model:"inherit",prompt:e.prompt,fullPath:e.fullPath,permissionMode:r,plugin:e.plugin,marketplace:e.marketplace,pluginId:e.pluginId,marketplaceId:e.marketplaceId,source:"plugin"}))}}catch{}return t}}var jl=r("../proto/dist/generated/agent/v1/canvas_diagnostics_exec_pb.js"),Nl=r("../proto/dist/generated/agent/v1/diagnostics_exec_pb.js"),$l=r("../proto/dist/generated/agent/v1/utils_pb.js");class Fl{getCanvasDiagnostics;constructor(e){this.getCanvasDiagnostics=e}async execute(e,t){try{const e=await this.getCanvasDiagnostics(t.path);return void 0===e?Ll(t.path,"diagnostics unavailable"):new jl.GL({result:{case:"success",value:new jl.uX({path:t.path,diagnostics:e.map(Ul)})}})}catch(e){return Ll(t.path,e instanceof Error?e.message:String(e))}}}function Ll(e,t){return new jl.GL({result:{case:"error",value:new jl.HW({path:e,error:t})}})}function Ul(e){return new Nl.oQ({severity:Bl(e.severity),range:new $l.Q6({start:new $l.yX({line:e.range.start.line+1,column:e.range.start.character+1}),end:new $l.yX({line:e.range.end.line+1,column:e.range.end.character+1})}),message:e.message,source:"ts",code:e.code??""})}function Bl(e){switch(e){case 1:return Nl.h_.ERROR;case 2:return Nl.h_.WARNING;case 3:return Nl.h_.INFORMATION;case 4:return Nl.h_.HINT;default:return Nl.h_.UNSPECIFIED}}var Hl=r("../proto/dist/generated/agent/v1/computer_use_tool_pb.js");function Wl(e,t,r){return new Promise(((n,o)=>{const s={timeout:r?.timeoutMs??3e4,env:r?.env?{...process.env,...r.env}:void 0};(0,Os.execFile)(e,t.map(String),{...s,encoding:"utf8"},((e,t)=>{e?o(e):n(t)}))}))}Hl.w3.UNSPECIFIED,Hl.w3.LEFT,Hl.w3.MIDDLE,Hl.w3.RIGHT,Hl.w3.BACK,Hl.w3.FORWARD,Hl.Dh.UNSPECIFIED,Hl.Dh.UP,Hl.Dh.DOWN,Hl.Dh.LEFT,Hl.Dh.RIGHT,(0,p.v5)("computer_use.session.duration_ms",{description:"Duration of computer-use session in milliseconds"}),(0,p.v5)("computer_use.session.action_count",{description:"Number of actions executed in a computer-use session"}),(0,p.Pu)("computer_use.session.result",{description:"Result status of computer-use session",labelNames:["outcome"]}),(0,c.h)("computer-use");const zl=(0,go.promisify)(Os.execFile);function ql(e,t){const r=e/t;return{display:{width:e,height:t},api:{width:1280,height:Math.round(1280/r)}}}async function Gl(e){const{stdout:t}=await zl("xrandr",["--display",e],{timeout:5e3}),r=function(e){let t,r,n;for(const o of e.split("\n"))if(o.includes("*")){const e=o.trim().match(/^(\d+)x(\d+)/);e&&(t=parseInt(e[1],10),r=parseInt(e[2],10));const s=o.match(/(\d+(?:\.\d+)?)\*(?:\+)?/);if(s){const e=parseFloat(s[1]);e>0&&e<=500&&(n=Math.round(e))}if(t&&r)break}if(!t||!r){const n=e.match(/current\s+(\d+)\s*x\s*(\d+)/i);n&&(t=parseInt(n[1],10),r=parseInt(n[2],10))}if(!t||!r)throw new Error(`Could not detect display resolution from xrandr output.\nExpected a line with '*' indicating active mode, or 'current WxH'.\nxrandr output:\n${e}`);return n||(n=60),{width:t,height:r,refreshRate:n}}(t);return{display:r,resolution:ql(r.width,r.height),resolutionString:`${r.width}x${r.height}`}}var Vl,Jl,Kl,Yl,Zl;!function(e){e[e.UNSPECIFIED=0]="UNSPECIFIED",e[e.ARROW=1]="ARROW",e[e.POINTER=2]="POINTER",e[e.TEXT=3]="TEXT",e[e.WAIT=4]="WAIT",e[e.CROSSHAIR=5]="CROSSHAIR",e[e.MOVE=6]="MOVE",e[e.RESIZE_NS=7]="RESIZE_NS",e[e.RESIZE_EW=8]="RESIZE_EW",e[e.RESIZE_NWSE=9]="RESIZE_NWSE",e[e.RESIZE_NESW=10]="RESIZE_NESW",e[e.NOT_ALLOWED=11]="NOT_ALLOWED",e[e.GRAB=12]="GRAB",e[e.GRABBING=13]="GRABBING"}(Vl||(Vl={})),hr.proto3.util.setEnumType(Vl,"agent.v1.CursorType",[{no:0,name:"CURSOR_TYPE_UNSPECIFIED"},{no:1,name:"CURSOR_TYPE_ARROW"},{no:2,name:"CURSOR_TYPE_POINTER"},{no:3,name:"CURSOR_TYPE_TEXT"},{no:4,name:"CURSOR_TYPE_WAIT"},{no:5,name:"CURSOR_TYPE_CROSSHAIR"},{no:6,name:"CURSOR_TYPE_MOVE"},{no:7,name:"CURSOR_TYPE_RESIZE_NS"},{no:8,name:"CURSOR_TYPE_RESIZE_EW"},{no:9,name:"CURSOR_TYPE_RESIZE_NWSE"},{no:10,name:"CURSOR_TYPE_RESIZE_NESW"},{no:11,name:"CURSOR_TYPE_NOT_ALLOWED"},{no:12,name:"CURSOR_TYPE_GRAB"},{no:13,name:"CURSOR_TYPE_GRABBING"}]),function(e){e[e.UNSPECIFIED=0]="UNSPECIFIED",e[e.SLOW=1]="SLOW",e[e.MELLOW=2]="MELLOW",e[e.QUICK=3]="QUICK",e[e.RAPID=4]="RAPID"}(Jl||(Jl={})),hr.proto3.util.setEnumType(Jl,"agent.v1.MotionStyle",[{no:0,name:"MOTION_STYLE_UNSPECIFIED"},{no:1,name:"MOTION_STYLE_SLOW"},{no:2,name:"MOTION_STYLE_MELLOW"},{no:3,name:"MOTION_STYLE_QUICK"},{no:4,name:"MOTION_STYLE_RAPID"}]),function(e){e[e.UNSPECIFIED=0]="UNSPECIFIED",e[e.LOADING_WAIT=1]="LOADING_WAIT",e[e.VIEWING_RESULT=2]="VIEWING_RESULT",e[e.THINKING_PAUSE=3]="THINKING_PAUSE",e[e.LONG_OPERATION=4]="LONG_OPERATION"}(Kl||(Kl={})),hr.proto3.util.setEnumType(Kl,"agent.v1.IdleClassification",[{no:0,name:"IDLE_CLASSIFICATION_UNSPECIFIED"},{no:1,name:"IDLE_CLASSIFICATION_LOADING_WAIT"},{no:2,name:"IDLE_CLASSIFICATION_VIEWING_RESULT"},{no:3,name:"IDLE_CLASSIFICATION_THINKING_PAUSE"},{no:4,name:"IDLE_CLASSIFICATION_LONG_OPERATION"}]),function(e){e[e.UNSPECIFIED=0]="UNSPECIFIED",e[e.SINGLE=1]="SINGLE",e[e.DOUBLE=2]="DOUBLE",e[e.TRIPLE=3]="TRIPLE",e[e.RIGHT=4]="RIGHT",e[e.MIDDLE=5]="MIDDLE"}(Yl||(Yl={})),hr.proto3.util.setEnumType(Yl,"agent.v1.ClickType",[{no:0,name:"CLICK_TYPE_UNSPECIFIED"},{no:1,name:"CLICK_TYPE_SINGLE"},{no:2,name:"CLICK_TYPE_DOUBLE"},{no:3,name:"CLICK_TYPE_TRIPLE"},{no:4,name:"CLICK_TYPE_RIGHT"},{no:5,name:"CLICK_TYPE_MIDDLE"}]),function(e){e[e.UNSPECIFIED=0]="UNSPECIFIED",e[e.KEY_COMBO=1]="KEY_COMBO",e[e.KEY_SINGLE=2]="KEY_SINGLE",e[e.TEXT_TYPED=3]="TEXT_TYPED"}(Zl||(Zl={})),hr.proto3.util.setEnumType(Zl,"agent.v1.KeystrokeEventType",[{no:0,name:"KEYSTROKE_EVENT_TYPE_UNSPECIFIED"},{no:1,name:"KEYSTROKE_EVENT_TYPE_KEY_COMBO"},{no:2,name:"KEYSTROKE_EVENT_TYPE_KEY_SINGLE"},{no:3,name:"KEYSTROKE_EVENT_TYPE_TEXT_TYPED"}]);class Xl extends hr.Message{executionTimestampMs=hr.protoInt64.zero;action;commandDurationMs=hr.protoInt64.zero;positionBefore;positionAfter;cursorTypeAfter=Vl.UNSPECIFIED;constructor(e){super(),hr.proto3.util.initPartial(e,this)}static runtime=hr.proto3;static typeName="agent.v1.InputEvent";static fields=hr.proto3.util.newFieldList((()=>[{no:1,name:"execution_timestamp_ms",kind:"scalar",T:3},{no:2,name:"action",kind:"message",T:Hl.ho},{no:3,name:"command_duration_ms",kind:"scalar",T:3},{no:4,name:"position_before",kind:"message",T:Hl.xp},{no:5,name:"position_after",kind:"message",T:Hl.xp},{no:6,name:"cursor_type_after",kind:"enum",T:hr.proto3.getEnumType(Vl)}]));static fromBinary(e,t){return(new Xl).fromBinary(e,t)}static fromJson(e,t){return(new Xl).fromJson(e,t)}static fromJsonString(e,t){return(new Xl).fromJsonString(e,t)}static equals(e,t){return hr.proto3.util.equals(Xl,e,t)}}class Ql extends hr.Message{videoTimestampMs=hr.protoInt64.zero;x=0;y=0;cursorType=Vl.UNSPECIFIED;velocity=0;constructor(e){super(),hr.proto3.util.initPartial(e,this)}static runtime=hr.proto3;static typeName="agent.v1.CursorPathKeyframe";static fields=hr.proto3.util.newFieldList((()=>[{no:1,name:"video_timestamp_ms",kind:"scalar",T:3},{no:2,name:"x",kind:"scalar",T:5},{no:3,name:"y",kind:"scalar",T:5},{no:4,name:"cursor_type",kind:"enum",T:hr.proto3.getEnumType(Vl)},{no:5,name:"velocity",kind:"scalar",T:2}]));static fromBinary(e,t){return(new Ql).fromBinary(e,t)}static fromJson(e,t){return(new Ql).fromJson(e,t)}static fromJsonString(e,t){return(new Ql).fromJsonString(e,t)}static equals(e,t){return hr.proto3.util.equals(Ql,e,t)}}class ec extends hr.Message{style=Jl.UNSPECIFIED;keyframes=[];constructor(e){super(),hr.proto3.util.initPartial(e,this)}static runtime=hr.proto3;static typeName="agent.v1.CursorPath";static fields=hr.proto3.util.newFieldList((()=>[{no:1,name:"style",kind:"enum",T:hr.proto3.getEnumType(Jl)},{no:2,name:"keyframes",kind:"message",T:Ql,repeated:!0}]));static fromBinary(e,t){return(new ec).fromBinary(e,t)}static fromJson(e,t){return(new ec).fromJson(e,t)}static fromJsonString(e,t){return(new ec).fromJsonString(e,t)}static equals(e,t){return hr.proto3.util.equals(ec,e,t)}}class tc extends hr.Message{startMs=hr.protoInt64.zero;endMs=hr.protoInt64.zero;centerX=0;centerY=0;suggestedZoom=0;actionType="";actionIndex=0;importanceScore=0;context="";constructor(e){super(),hr.proto3.util.initPartial(e,this)}static runtime=hr.proto3;static typeName="agent.v1.ZoomCandidate";static fields=hr.proto3.util.newFieldList((()=>[{no:1,name:"start_ms",kind:"scalar",T:3},{no:2,name:"end_ms",kind:"scalar",T:3},{no:3,name:"center_x",kind:"scalar",T:5},{no:4,name:"center_y",kind:"scalar",T:5},{no:5,name:"suggested_zoom",kind:"scalar",T:2},{no:6,name:"action_type",kind:"scalar",T:9},{no:7,name:"action_index",kind:"scalar",T:5},{no:8,name:"importance_score",kind:"scalar",T:5},{no:9,name:"context",kind:"scalar",T:9}]));static fromBinary(e,t){return(new tc).fromBinary(e,t)}static fromJson(e,t){return(new tc).fromJson(e,t)}static fromJsonString(e,t){return(new tc).fromJsonString(e,t)}static equals(e,t){return hr.proto3.util.equals(tc,e,t)}}class rc extends hr.Message{startMs=hr.protoInt64.zero;endMs=hr.protoInt64.zero;durationMs=hr.protoInt64.zero;classification=Kl.UNSPECIFIED;suggestedSpeed=0;precedingActionType="";followingActionType="";constructor(e){super(),hr.proto3.util.initPartial(e,this)}static runtime=hr.proto3;static typeName="agent.v1.IdlePeriod";static fields=hr.proto3.util.newFieldList((()=>[{no:1,name:"start_ms",kind:"scalar",T:3},{no:2,name:"end_ms",kind:"scalar",T:3},{no:3,name:"duration_ms",kind:"scalar",T:3},{no:4,name:"classification",kind:"enum",T:hr.proto3.getEnumType(Kl)},{no:5,name:"suggested_speed",kind:"scalar",T:2},{no:6,name:"preceding_action_type",kind:"scalar",T:9},{no:7,name:"following_action_type",kind:"scalar",T:9}]));static fromBinary(e,t){return(new rc).fromBinary(e,t)}static fromJson(e,t){return(new rc).fromJson(e,t)}static fromJsonString(e,t){return(new rc).fromJsonString(e,t)}static equals(e,t){return hr.proto3.util.equals(rc,e,t)}}class nc extends hr.Message{videoTimestampMs=hr.protoInt64.zero;x=0;y=0;clickType=Yl.UNSPECIFIED;actionIndex=0;hasModifiers=!1;constructor(e){super(),hr.proto3.util.initPartial(e,this)}static runtime=hr.proto3;static typeName="agent.v1.ClickEffectKeyframe";static fields=hr.proto3.util.newFieldList((()=>[{no:1,name:"video_timestamp_ms",kind:"scalar",T:3},{no:2,name:"x",kind:"scalar",T:5},{no:3,name:"y",kind:"scalar",T:5},{no:4,name:"click_type",kind:"enum",T:hr.proto3.getEnumType(Yl)},{no:5,name:"action_index",kind:"scalar",T:5},{no:6,name:"has_modifiers",kind:"scalar",T:8}]));static fromBinary(e,t){return(new nc).fromBinary(e,t)}static fromJson(e,t){return(new nc).fromJson(e,t)}static fromJsonString(e,t){return(new nc).fromJsonString(e,t)}static equals(e,t){return hr.proto3.util.equals(nc,e,t)}}class oc extends hr.Message{videoTimestampMs=hr.protoInt64.zero;displayText="";eventType=Zl.UNSPECIFIED;displayDurationMs=hr.protoInt64.zero;actionIndex=0;constructor(e){super(),hr.proto3.util.initPartial(e,this)}static runtime=hr.proto3;static typeName="agent.v1.KeystrokeEvent";static fields=hr.proto3.util.newFieldList((()=>[{no:1,name:"video_timestamp_ms",kind:"scalar",T:3},{no:2,name:"display_text",kind:"scalar",T:9},{no:3,name:"event_type",kind:"enum",T:hr.proto3.getEnumType(Zl)},{no:4,name:"display_duration_ms",kind:"scalar",T:3},{no:5,name:"action_index",kind:"scalar",T:5}]));static fromBinary(e,t){return(new oc).fromBinary(e,t)}static fromJson(e,t){return(new oc).fromJson(e,t)}static fromJsonString(e,t){return(new oc).fromJsonString(e,t)}static equals(e,t){return hr.proto3.util.equals(oc,e,t)}}class sc extends hr.Message{videoPath="";videoDurationMs=hr.protoInt64.zero;videoWidth=0;videoHeight=0;actionCount=0;zoomCandidates=[];idlePeriods=[];clickEffects=[];keystrokeEvents=[];cursorPaths=[];constructor(e){super(),hr.proto3.util.initPartial(e,this)}static runtime=hr.proto3;static typeName="agent.v1.DecisionInput";static fields=hr.proto3.util.newFieldList((()=>[{no:1,name:"video_path",kind:"scalar",T:9},{no:2,name:"video_duration_ms",kind:"scalar",T:3},{no:3,name:"video_width",kind:"scalar",T:5},{no:4,name:"video_height",kind:"scalar",T:5},{no:5,name:"action_count",kind:"scalar",T:5},{no:10,name:"zoom_candidates",kind:"message",T:tc,repeated:!0},{no:11,name:"idle_periods",kind:"message",T:rc,repeated:!0},{no:12,name:"click_effects",kind:"message",T:nc,repeated:!0},{no:13,name:"keystroke_events",kind:"message",T:oc,repeated:!0},{no:20,name:"cursor_paths",kind:"message",T:ec,repeated:!0}]));static fromBinary(e,t){return(new sc).fromBinary(e,t)}static fromJson(e,t){return(new sc).fromJson(e,t)}static fromJsonString(e,t){return(new sc).fromJsonString(e,t)}static equals(e,t){return hr.proto3.util.equals(sc,e,t)}}class ic extends hr.Message{candidateIndex=0;zoomOverride;startMsOverride;endMsOverride;constructor(e){super(),hr.proto3.util.initPartial(e,this)}static runtime=hr.proto3;static typeName="agent.v1.ZoomSelection";static fields=hr.proto3.util.newFieldList((()=>[{no:1,name:"candidate_index",kind:"scalar",T:5},{no:2,name:"zoom_override",kind:"scalar",T:2,opt:!0},{no:3,name:"start_ms_override",kind:"scalar",T:3,opt:!0},{no:4,name:"end_ms_override",kind:"scalar",T:3,opt:!0}]));static fromBinary(e,t){return(new ic).fromBinary(e,t)}static fromJson(e,t){return(new ic).fromJson(e,t)}static fromJsonString(e,t){return(new ic).fromJsonString(e,t)}static equals(e,t){return hr.proto3.util.equals(ic,e,t)}}class ac extends hr.Message{candidateIndex=0;speedOverride;constructor(e){super(),hr.proto3.util.initPartial(e,this)}static runtime=hr.proto3;static typeName="agent.v1.SpeedupSelection";static fields=hr.proto3.util.newFieldList((()=>[{no:1,name:"candidate_index",kind:"scalar",T:5},{no:2,name:"speed_override",kind:"scalar",T:2,opt:!0}]));static fromBinary(e,t){return(new ac).fromBinary(e,t)}static fromJson(e,t){return(new ac).fromJson(e,t)}static fromJsonString(e,t){return(new ac).fromJsonString(e,t)}static equals(e,t){return hr.proto3.util.equals(ac,e,t)}}class lc extends hr.Message{cursorStyle=Jl.UNSPECIFIED;selectedZooms=[];selectedSpeedups=[];showClickEffects=!1;selectedClickEffects=[];showKeystrokes=!1;cuts=[];constructor(e){super(),hr.proto3.util.initPartial(e,this)}static runtime=hr.proto3;static typeName="agent.v1.DecisionOutput";static fields=hr.proto3.util.newFieldList((()=>[{no:1,name:"cursor_style",kind:"enum",T:hr.proto3.getEnumType(Jl)},{no:2,name:"selected_zooms",kind:"message",T:ic,repeated:!0},{no:3,name:"selected_speedups",kind:"message",T:ac,repeated:!0},{no:4,name:"show_click_effects",kind:"scalar",T:8},{no:5,name:"selected_click_effects",kind:"scalar",T:5,repeated:!0},{no:6,name:"show_keystrokes",kind:"scalar",T:8},{no:7,name:"cuts",kind:"message",T:cc,repeated:!0}]));static fromBinary(e,t){return(new lc).fromBinary(e,t)}static fromJson(e,t){return(new lc).fromJson(e,t)}static fromJsonString(e,t){return(new lc).fromJsonString(e,t)}static equals(e,t){return hr.proto3.util.equals(lc,e,t)}}class cc extends hr.Message{startMs=hr.protoInt64.zero;endMs=hr.protoInt64.zero;reason="";constructor(e){super(),hr.proto3.util.initPartial(e,this)}static runtime=hr.proto3;static typeName="agent.v1.VideoCut";static fields=hr.proto3.util.newFieldList((()=>[{no:1,name:"start_ms",kind:"scalar",T:3},{no:2,name:"end_ms",kind:"scalar",T:3},{no:3,name:"reason",kind:"scalar",T:9}]));static fromBinary(e,t){return(new cc).fromBinary(e,t)}static fromJson(e,t){return(new cc).fromJson(e,t)}static fromJsonString(e,t){return(new cc).fromJsonString(e,t)}static equals(e,t){return hr.proto3.util.equals(cc,e,t)}}hr.Message,hr.proto3,hr.proto3.util.newFieldList((()=>[{no:1,name:"raw_video_path",kind:"scalar",T:9},{no:2,name:"duration_ms",kind:"scalar",T:3},{no:3,name:"display_width",kind:"scalar",T:5},{no:4,name:"display_height",kind:"scalar",T:5},{no:5,name:"api_width",kind:"scalar",T:5},{no:6,name:"api_height",kind:"scalar",T:5},{no:7,name:"recording_start_epoch_ms",kind:"scalar",T:3},{no:10,name:"input_events",kind:"message",T:Xl,repeated:!0},{no:20,name:"cursor_paths",kind:"message",T:ec,repeated:!0},{no:30,name:"zoom_candidates",kind:"message",T:tc,repeated:!0},{no:31,name:"idle_periods",kind:"message",T:rc,repeated:!0},{no:32,name:"click_effects",kind:"message",T:nc,repeated:!0},{no:33,name:"keystroke_events",kind:"message",T:oc,repeated:!0},{no:40,name:"decision_input",kind:"message",T:sc},{no:41,name:"decision_output",kind:"message",T:lc},{no:50,name:"polished_video_path",kind:"scalar",T:9}]));class uc{config;xScaleUp;yScaleUp;xScaleDown;yScaleDown;constructor(e){this.config=e;const t=e.display.width/e.display.height,r=e.api.width/e.api.height;if(Math.abs(t-r)>.02)throw new Error(`Aspect ratio mismatch: display=${t.toFixed(3)}, api=${r.toFixed(3)}`);this.xScaleUp=e.display.width/e.api.width,this.yScaleUp=e.display.height/e.api.height,this.xScaleDown=e.api.width/e.display.width,this.yScaleDown=e.api.height/e.display.height}apiToDisplay(e,t){return{x:Math.round(e*this.xScaleUp),y:Math.round(t*this.yScaleUp)}}displayToApi(e,t){return{x:Math.round(e*this.xScaleDown),y:Math.round(t*this.yScaleDown)}}get apiWidth(){return this.config.api.width}get apiHeight(){return this.config.api.height}get displayWidth(){return this.config.display.width}get displayHeight(){return this.config.display.height}}const dc={left_ptr:Vl.ARROW,arrow:Vl.ARROW,default:Vl.ARROW,top_left_arrow:Vl.ARROW,hand:Vl.POINTER,hand1:Vl.POINTER,hand2:Vl.POINTER,pointer:Vl.POINTER,pointing_hand:Vl.POINTER,xterm:Vl.TEXT,ibeam:Vl.TEXT,text:Vl.TEXT,watch:Vl.WAIT,wait:Vl.WAIT,progress:Vl.WAIT,left_ptr_watch:Vl.WAIT,crosshair:Vl.CROSSHAIR,cross:Vl.CROSSHAIR,tcross:Vl.CROSSHAIR,move:Vl.MOVE,fleur:Vl.MOVE,size_all:Vl.MOVE,sb_v_double_arrow:Vl.RESIZE_NS,v_double_arrow:Vl.RESIZE_NS,ns_resize:Vl.RESIZE_NS,row_resize:Vl.RESIZE_NS,top_side:Vl.RESIZE_NS,bottom_side:Vl.RESIZE_NS,sb_h_double_arrow:Vl.RESIZE_EW,h_double_arrow:Vl.RESIZE_EW,ew_resize:Vl.RESIZE_EW,col_resize:Vl.RESIZE_EW,left_side:Vl.RESIZE_EW,right_side:Vl.RESIZE_EW,top_left_corner:Vl.RESIZE_NWSE,bottom_right_corner:Vl.RESIZE_NWSE,nwse_resize:Vl.RESIZE_NWSE,size_fdiag:Vl.RESIZE_NWSE,top_right_corner:Vl.RESIZE_NESW,bottom_left_corner:Vl.RESIZE_NESW,nesw_resize:Vl.RESIZE_NESW,size_bdiag:Vl.RESIZE_NESW,not_allowed:Vl.NOT_ALLOWED,no_drop:Vl.NOT_ALLOWED,forbidden:Vl.NOT_ALLOWED,circle:Vl.NOT_ALLOWED,grab:Vl.GRAB,openhand:Vl.GRAB,grabbing:Vl.GRABBING,closedhand:Vl.GRABBING};class pc{events=[];recordingStartTime=0;lastKnownPosition={x:0,y:0};isRunning=!1;pending=Promise.resolve();env;scaler;constructor(e){const t=e.displayNum??1;this.env={DISPLAY:`:${t}`},this.scaler=new uc(e.resolution)}async start(){this.events=[],this.recordingStartTime=Date.now(),this.isRunning=!0,this.pending=Promise.resolve();try{this.lastKnownPosition=await this.captureCurrentPosition()}catch{this.lastKnownPosition={x:Math.floor(this.scaler.apiWidth/2),y:Math.floor(this.scaler.apiHeight/2)}}}logEvent(e,t,r){if(!this.isRunning)return;const n={...this.lastKnownPosition},o=this.getExpectedPositionAfterAction(e,n);this.lastKnownPosition=o;const s=async()=>{let s,i;try{[s,i]=await Promise.all([this.captureCurrentPosition(),this.detectCursorType()]),this.lastKnownPosition=s}catch{s=o,i=Vl.ARROW}const a={executionTimestampMs:r-this.recordingStartTime,action:e,commandDurationMs:r-t,positionBefore:n,positionAfter:s,cursorTypeAfter:i};this.events.push(a)};this.pending=this.pending.then((()=>s())).catch((()=>{}))}async stop(){return this.isRunning=!1,await this.pending,[...this.events]}getEvents(){return[...this.events]}getRecordingStartTime(){return this.recordingStartTime}getIsRunning(){return this.isRunning}async captureCurrentPosition(){const e=await Wl("xdotool",["getmouselocation","--shell"],{env:this.env}),t=e.match(/X=(\d+)/),r=e.match(/Y=(\d+)/);if(!t||!r)throw new Error(`Failed to parse cursor position: ${e}`);const n=parseInt(t[1],10),o=parseInt(r[1],10);return this.scaler.displayToApi(n,o)}async detectCursorType(){try{const e=(await Wl("xdotool",["getmouselocation","--shell"],{env:this.env})).match(/CURSOR=(\S+)/i);if(e){const t=e[1].toLowerCase();return dc[t]??Vl.ARROW}try{const e=await Wl("xprop",["-root","_XSERVER_CURSOR"],{env:this.env,timeoutMs:500});for(const[t,r]of Object.entries(dc))if(e.toLowerCase().includes(t))return r}catch{}return Vl.ARROW}catch{return Vl.ARROW}}getExpectedPositionAfterAction(e,t){const r=e.action;if(!r)return t;switch(r.case){case"mouseMove":{const e=r.value.coordinate;if(e)return{x:e.x,y:e.y};break}case"click":{const e=r.value.coordinate;if(e)return{x:e.x,y:e.y};break}case"drag":{const e=r.value.path;if(e.length>0){const t=e[e.length-1];return{x:t.x,y:t.y}}break}case"scroll":{const e=r.value.coordinate;if(e)return{x:e.x,y:e.y};break}}return t}}const hc=1048576,mc=52428800;var fc;!function(e){e.Write="write",e.Shell="shell",e.Delete="delete",e.Mcp="mcp"}(fc||(fc={}));var gc=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});class vc{pendingDecisionProvider;fileChangeTracker;permissionsService;workspacePath;onDeleteForAiTracking;constructor(e,t,r,n,o){this.pendingDecisionProvider=e,this.fileChangeTracker=t,this.permissionsService=r,this.workspacePath=n,this.onDeleteForAiTracking=o}async execute(e,t){const r={stack:[],error:void 0,hasError:!1};try{!function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0})}(r,(0,c.VI)(e.withName("LocalDeleteExecutor.execute")),!1);const n=t.path,o=(0,m.o1)(n,this.workspacePath),s=await this.permissionsService.shouldBlockWrite(e,o,"");if(s){const e=await Gn(s,{onNeedsApproval:async(e,t)=>null,onUserRejected:e=>new Ye.Pi({result:{case:"rejected",value:new Ye.iq({path:o,reason:e||""})}}),onPermissionDenied:(e,t)=>new Ye.Pi({result:{case:"permissionDenied",value:new Ye.QG({path:o,clientVisibleError:e,isReadonly:t?.isReadonly??!1})}})});if(null!==e)return e}const i=await this.pendingDecisionProvider.requestApproval({type:fc.Delete,details:{path:o},toolCallId:t.toolCallId});if(!i.approved)return new Ye.Pi({result:{case:"rejected",value:new Ye.iq({path:o,reason:i.reason||""})}});let a;try{a=await(0,En.stat)(o)}catch(e){return"ENOENT"===e.code?new Ye.Pi({result:{case:"fileNotFound",value:new Ye.n0({path:o})}}):new Ye.Pi({result:{case:"error",value:new Ye.GU({path:o,error:e.message})}})}if(!a.isFile()){const e=a.isDirectory()?"directory":"other";return new Ye.Pi({result:{case:"notFile",value:new Ye.LX({path:o,actualType:e})}})}const l=a.size;let u;if(l<=mc)try{u=await(0,m.yR)(o)}catch{}const d=u??"";try{await(0,En.unlink)(o)}catch(e){return"EACCES"===e.code?new Ye.Pi({result:{case:"permissionDenied",value:new Ye.QG({path:o,clientVisibleError:"Permission denied"})}}):"EBUSY"===e.code?new Ye.Pi({result:{case:"fileBusy",value:new Ye.vX({path:o})}}):new Ye.Pi({result:{case:"error",value:new Ye.GU({path:o,error:e.message})}})}if(this.fileChangeTracker&&void 0!==u){const e=t.toolCallId?{toolCallId:t.toolCallId}:void 0;await this.fileChangeTracker.trackChange(o,u,void 0,e)}return this.onDeleteForAiTracking&&this.onDeleteForAiTracking({path:o}).catch((()=>{})),new Ye.Pi({result:{case:"success",value:new Ye.fl({path:o,deletedFile:o,fileSize:BigInt(l),prevContent:d})}})}catch(e){r.error=e,r.hasError=!0}finally{gc(r)}}}class yc{inner;extraTools;constructor(e,t){this.inner=e,this.extraTools=t}async getTools(e){return[...await this.inner.getTools(e).catch((()=>[])),...this.extraTools]}async getToolsForServers(e,t){const r=await this.inner.getToolsForServers(e,t).catch((()=>[])),n=new Set(t);return[...r,...this.extraTools.filter((e=>n.has(e.clientKey)||n.has(e.providerIdentifier)))]}async getClients(e){return this.inner.getClients(e)}async getClient(e,t){return this.inner.getClient(e,t)}async getInstructions(e){const t=await this.inner.getInstructions(e).catch((()=>[])),r=this.extraTools.filter((e=>e.providerIdentifier===Le));if(0===r.length)return t;const n=r.map((e=>{const t="string"==typeof e.description&&e.description.length>0?e.description:"(no description provided)";return`- ${e.toolName}: ${t}`})).join("\n");return[...t,new pr.I0({serverIdentifier:Le,serverName:Le,instructions:`User-defined tools for this session (server "${Le}"). Discover schemas via MCP meta-tool discovery for that server, then invoke via the MCP invocation meta-tool.\n\nAvailable tools:\n${n}`})]}async getToolSet(e){return this.inner.getToolSet(e)}}class wc extends yc{observableInner;constructor(e,t){super(e,t),this.observableInner=e}onDidChange(e){return this.observableInner.onDidChange(e)}}var bc=r("../proto/dist/generated/agent/v1/fetch_exec_pb.js"),Sc=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});class kc{async execute(e,t){const r={stack:[],error:void 0,hasError:!1};try{!function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0})}(r,(0,c.VI)(e.withName("LocalFetchExecutor.execute")),!1);const n=t.url;try{const e=await fetch(n),t=await e.text(),r=e.headers.get("content-type")||"text/plain";return new bc.uN({result:{case:"success",value:new bc.Uk({url:n,content:t,statusCode:e.status,contentType:r})}})}catch(e){return new bc.uN({result:{case:"error",value:new bc.fk({url:n,error:e.message})}})}}catch(e){r.error=e,r.hasError=!0}finally{Sc(r)}}}class Ec{workspacePath;changes=new Map;listeners=new Set;constructor(e){this.workspacePath=e}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}notify(e){for(const t of this.listeners)t(e)}async trackChange(e,t,r,n){const o=this.changes.get(e);if(o){const t=o.before,s=n||o.metadata;if(t===r||void 0===t&&void 0===r)this.changes.delete(e),this.notify();else{const n={path:e,before:t,after:r,metadata:s};this.changes.set(e,n),this.notify(n)}}else{const o={path:e,before:t,after:r,metadata:n};this.changes.set(e,o),this.notify(o)}}getChanges(){return Array.from(this.changes.values())}getChange(e){return this.changes.get(e)}hasChange(e){return this.changes.has(e)}accept(e){const t=this.changes.get(e);this.changes.delete(e),this.notify(t)}acceptAll(){this.changes.clear(),this.notify()}async reject(e){const t=this.changes.get(e);if(t)try{void 0===t.before&&void 0!==t.after?await(0,En.unlink)(e):(void 0!==t.before&&void 0===t.after||void 0!==t.before&&void 0!==t.after)&&await(0,m.x3)(e,t.before,this.workspacePath)}catch{}finally{this.changes.delete(e),this.notify(t)}}async rejectAll(){const e=Array.from(this.changes.keys());await Promise.all(e.map((e=>this.reject(e))))}clear(){const e=this.changes.values().next().value;this.changes.clear(),this.notify(e)}get size(){return this.changes.size}}var xc=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const Cc=(0,go.promisify)(Os.execFile);class _c{async exec(e,t,r,n){const o={stack:[],error:void 0,hasError:!1};try{!function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0})}(o,(0,c.VI)(e.withName("LocalGitExecutor.exec"),{attributes:{"git.cwd":t,"git.args":r,"git.caller":n?.caller}}),!1);const{stdout:s,stderr:i}=await Cc("git",r,{cwd:t,timeout:n?.timeout});return{exitCode:0,stdout:s.toString(),stderr:i.toString()}}catch(e){o.error=e,o.hasError=!0}finally{xc(o)}}}const Pc=-(2**31),Rc=2**31-1;function Tc(e){return Number.isNaN(e)?0:e<Pc?Pc:e>Rc?Rc:e}function Ic(e){if("number"==typeof e&&Number.isFinite(e)&&!(e<0))return Tc(Math.trunc(e))}const Ac="agent-tools",Oc=52428800;var Dc=r("../mcp-core/dist/index.js"),Mc=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});class jc extends Error{constructor(e){super(`MCP server "${e}" is disabled`),this.name="McpServerDisabledError"}}class Nc extends Error{serverName;constructor(e){super(`MCP server "${e}" has not been approved`),this.serverName=e,this.name="McpServerNotApprovedError"}}class $c{disabledService;constructor(e){this.disabledService=e}async load(e,t,r,n,o){if(await this.disabledService.isServerDisabled(t))throw new jc(t);return await o(e,r)}}class Fc{approvalService;constructor(e){this.approvalService=e}async load(e,t,r,n,o){const s={stack:[],error:void 0,hasError:!1};try{if(function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0})}(s,(0,c.VI)(e.withName("ServerApprovalMiddleware.load")),!1),!await this.approvalService.isServerApproved(t,r,n))throw new Nc(t);return await o(e,r)}catch(e){s.error=e,s.hasError=!0}finally{Mc(s)}}}class Lc{approvalsPath;cwd;approvalsPromise;constructor(e,t){this.approvalsPath=e,this.cwd=t,this.approvalsPromise=this.loadApprovals()}async isServerApproved(e,t,r){const n=function(e,t,r){const n={path:r,server:t};return`${e}-${(0,o.createHash)("sha256").update(JSON.stringify(n)).digest("hex").substring(0,16)}`}(e,t,this.cwd);return(await this.getApprovals()).includes(n)}async loadApprovals(){try{const e=await(0,En.readFile)(this.approvalsPath,"utf8"),t=JSON.parse(e);return Array.isArray(t)?t:(await this.saveApprovalsToFile([]),[])}catch(e){if(e instanceof Error&&e.message.includes("ENOENT"))return[];throw e}}async getApprovals(){return this.approvalsPromise}async addApproval(e){const t=await this.approvalsPromise;t.includes(e)||(t.push(e),await this.saveApprovals(t))}async addApprovals(e){const t=await this.approvalsPromise,r=e.filter((e=>!t.includes(e)));r.length>0&&(t.push(...r),await this.saveApprovals(t))}async removeApproval(e){const t=await this.approvalsPromise,r=t.filter((t=>t!==e));r.length!==t.length&&await this.saveApprovals(r)}async clearApprovals(e){const t=await this.approvalsPromise,r=e?t.filter((t=>!e(t))):[];r.length!==t.length&&await this.saveApprovals(r)}async saveApprovalsToFile(e){await(0,En.mkdir)(a.dirname(this.approvalsPath),{recursive:!0}),await(0,En.writeFile)(this.approvalsPath,JSON.stringify(e,null,2))}async saveApprovals(e){await this.saveApprovalsToFile(e),this.approvalsPromise=Promise.resolve(e)}}var Uc=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t},Bc=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});class Hc{async load(e,t,r,n,o){const s=o(e,r);return new zc(e,t,s,r)}}function Wc(e){let t;return e.then((e=>{t=e})).catch((()=>{})),t}class zc{serverName;clientPromise;config;toolsPromise;resourcesPromise;promptsPromise;clientPromiseTraceId;constructor(e,t,r,n){var o,s;this.serverName=t,this.clientPromise=r,this.config=n,this.clientPromiseTraceId=null===(s=null===(o=(0,c.fU)(e))||void 0===o?void 0:o.spanContext())||void 0===s?void 0:s.traceId,this.toolsPromise=this.clientPromise.then((async t=>null===t?[]:await t.getTools(e))),this.resourcesPromise=this.clientPromise.then((async t=>null===t?[]:(await t.listResources(e)).resources)),this.promptsPromise=this.clientPromise.then((async t=>null===t?[]:await t.listPrompts(e))),this.toolsPromise.catch((()=>{})),this.resourcesPromise.catch((()=>{})),this.promptsPromise.catch((()=>{}))}async getTools(e){var t;const r={stack:[],error:void 0,hasError:!1};try{const n=Uc(r,(0,c.VI)(e.withName("CachedMcpClient.getTools")),!1);n.span.setAttribute("serverName",this.serverName),n.span.setAttribute("cacheTraceId",null!==(t=this.clientPromiseTraceId)&&void 0!==t?t:"undefined");const o=Wc(this.toolsPromise);return void 0!==o?o:await this.toolsPromise}catch(e){r.error=e,r.hasError=!0}finally{Bc(r)}}async callTool(e,t,r,n,o){const s={stack:[],error:void 0,hasError:!1};try{const i=Uc(s,(0,c.VI)(e.withName("CachedMcpClient.callTool")),!1),a=await this.getClient(i.ctx);if(null===a)throw new Error("Client is not ready");return a.callTool(i.ctx,t,r,n,o)}catch(e){s.error=e,s.hasError=!0}finally{Bc(s)}}async getInstructions(e){const t={stack:[],error:void 0,hasError:!1};try{const r=Uc(t,(0,c.VI)(e.withName("CachedMcpClient.getInstructions")),!1),n=await this.getClient(r.ctx);if(null===n)return;return await n.getInstructions(r.ctx)}catch(e){t.error=e,t.hasError=!0}finally{Bc(t)}}async getClient(e){var t;const r={stack:[],error:void 0,hasError:!1};try{const n=Uc(r,(0,c.VI)(e.withName("CachedMcpClient.getClient")),!1);return n.span.setAttribute("serverName",this.serverName),n.span.setAttribute("cacheTraceId",null!==(t=this.clientPromiseTraceId)&&void 0!==t?t:"undefined"),await this.clientPromise}catch(e){r.error=e,r.hasError=!0}finally{Bc(r)}}async listResources(e){var t;const r={stack:[],error:void 0,hasError:!1};try{const n=Uc(r,(0,c.VI)(e.withName("CachedMcpClient.listResources")),!1);n.span.setAttribute("serverName",this.serverName),n.span.setAttribute("cacheTraceId",null!==(t=this.clientPromiseTraceId)&&void 0!==t?t:"undefined");const o=Wc(this.resourcesPromise);return void 0!==o?{resources:o}:{resources:await this.resourcesPromise}}catch(e){r.error=e,r.hasError=!0}finally{Bc(r)}}async readResource(e,t){const r={stack:[],error:void 0,hasError:!1};try{const n=Uc(r,(0,c.VI)(e.withName("CachedMcpClient.readResource")),!1),o=await this.getClient(n.ctx);return null===o?{contents:[]}:o.readResource(n.ctx,t)}catch(e){r.error=e,r.hasError=!0}finally{Bc(r)}}async listPrompts(e){var t;const r={stack:[],error:void 0,hasError:!1};try{const n=Uc(r,(0,c.VI)(e.withName("CachedMcpClient.listPrompts")),!1);n.span.setAttribute("serverName",this.serverName),n.span.setAttribute("cacheTraceId",null!==(t=this.clientPromiseTraceId)&&void 0!==t?t:"undefined");const o=Wc(this.promptsPromise);return void 0!==o?o:await this.promptsPromise}catch(e){r.error=e,r.hasError=!0}finally{Bc(r)}}async getPrompt(e,t,r){const n={stack:[],error:void 0,hasError:!1};try{const o=Uc(n,(0,c.VI)(e.withName("CachedMcpClient.getPrompt")),!1),s=await this.getClient(o.ctx);return null===s?{messages:[]}:s.getPrompt(o.ctx,t,r)}catch(e){n.error=e,n.hasError=!0}finally{Bc(n)}}async getState(e){const t={stack:[],error:void 0,hasError:!1};try{const r=Uc(t,(0,c.VI)(e.withName("CachedMcpClient.getState")),!1);r.span.setAttribute("serverName",this.serverName);const n=await this.getClient(r.ctx);if(null===n)throw new Error("Client is not ready");return await n.getState(r.ctx)}catch(e){t.error=e,t.hasError=!0}finally{Bc(t)}}async close(){var e;try{const t=await this.clientPromise;await(null===(e=null==t?void 0:t.close)||void 0===e?void 0:e.call(t))}catch(e){}}}function qc(e){var t,r;const n=e;if(!n.resource||"object"!=typeof n.resource)return n.uri?`Resource: ${n.uri}${n.name?` (${n.name})`:""}`:`Unsupported content type "${e.type}": ${JSON.stringify(e)}`;{const e=n.resource;if("string"==typeof e.text)return e.text;if("string"!=typeof e.blob)return`Resource: ${null!==(r=e.uri)&&void 0!==r?r:"unknown"}${e.name?` (${e.name})`:""}`;try{return Buffer.from(e.blob,"base64").toString("utf8")}catch(r){return`[Binary resource: ${null!==(t=e.uri)&&void 0!==t?t:"unknown"}]`}}}const Gc=/\$\{(?:env:([A-Za-z_][A-Za-z0-9_]*)|([^:}]+)(?::-([^}]*))?)\}/g;function Vc(e,t){if("string"==typeof e)return function(e,t){return e.replace(Gc,((e,r,n,o)=>{if(void 0!==r){const n=t(r);return void 0!==n?n:e}const s=t(n);return void 0!==s?s:void 0!==o?o:e}))}(e,t);if(Array.isArray(e))return e.map((e=>Vc(e,t)));if(null!==e&&"object"==typeof e){const r={};for(const[n,o]of Object.entries(e))r[n]=Vc(o,t);return r}return e}const Jc=vo.z.object({type:vo.z.literal("stdio").optional(),command:vo.z.string(),args:vo.z.array(vo.z.string()).optional(),env:vo.z.record(vo.z.string(),vo.z.string()).optional(),cwd:vo.z.string().optional()}),Kc=vo.z.object({CLIENT_ID:vo.z.string(),CLIENT_SECRET:vo.z.string().optional(),scopes:vo.z.array(vo.z.string()).optional()}),Yc=vo.z.object({caBundle:vo.z.string().trim().min(1).max(131072)}).strict(),Zc=vo.z.object({type:vo.z.enum(["http","sse"]).optional(),url:vo.z.string(),headers:vo.z.record(vo.z.string(),vo.z.string()).optional(),auth:Kc.optional(),tls:Yc.optional()}),Xc=vo.z.union([Jc,Zc]),Qc=vo.z.object({mcpServers:vo.z.record(vo.z.string(),Xc)});async function eu(e,t=e=>process.env[e]){try{const r=await(0,En.readFile)(e,"utf8"),n=Vc((0,cs.qg)(r),t);return Qc.parse(n)}catch(e){return{mcpServers:{}}}}var tu=r("../../node_modules/.pnpm/string-argv@0.3.2/node_modules/string-argv/index.js"),ru=r("../constants/dist/index.js"),nu=r("../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.25.1_patch_hash=09ddafc9053ad92a2da409aa9fafaaf83fd21f6a2f2_d6dcb3bf6d4dcedd25e081dcae0620fe/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js"),ou=r("../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.25.1_patch_hash=09ddafc9053ad92a2da409aa9fafaaf83fd21f6a2f2_d6dcb3bf6d4dcedd25e081dcae0620fe/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js"),su=r("../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.25.1_patch_hash=09ddafc9053ad92a2da409aa9fafaaf83fd21f6a2f2_d6dcb3bf6d4dcedd25e081dcae0620fe/node_modules/@modelcontextprotocol/sdk/dist/esm/client/sse.js"),iu=r("../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.25.1_patch_hash=09ddafc9053ad92a2da409aa9fafaaf83fd21f6a2f2_d6dcb3bf6d4dcedd25e081dcae0620fe/node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.js"),au=r("../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.25.1_patch_hash=09ddafc9053ad92a2da409aa9fafaaf83fd21f6a2f2_d6dcb3bf6d4dcedd25e081dcae0620fe/node_modules/@modelcontextprotocol/sdk/dist/esm/client/streamableHttp.js"),lu=r("../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.25.1_patch_hash=09ddafc9053ad92a2da409aa9fafaaf83fd21f6a2f2_d6dcb3bf6d4dcedd25e081dcae0620fe/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js"),cu=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t},uu=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const du=["authorization_code","refresh_token"],pu=["code"];class hu{_codeVerifier;_lastRedirectUrl;_oauthState;_oauthAttemptId;_identifier;_redirectUrl;_clientMetadata;_scopes;_tokens;_clientInformation;_saveTokens;_prepareForRefresh;_releaseRefreshLeaseOnError;_invalidateCredentials;_saveClientInformation;constructor(e){this._identifier=e.identifier,this._redirectUrl=e.redirectUrl,this._clientMetadata=e.clientMetadata,this._scopes=e.scopes,this._tokens=e.tokens,this._clientInformation=e.clientInformation,this._saveTokens=e.saveTokens,this._prepareForRefresh=e.prepareForRefresh,this._releaseRefreshLeaseOnError=e.releaseRefreshLeaseOnError,this._invalidateCredentials=e.invalidateCredentials,this._saveClientInformation=e.saveClientInformation}get redirectUrl(){return this._redirectUrl}get clientMetadata(){return this._clientMetadata}state(){return this._oauthAttemptId=(0,o.randomUUID)(),this._oauthState=function(e,t,r){const n=Object.assign({id:e,owner:t},r?{attemptId:r}:{});return Buffer.from(JSON.stringify(n),"utf8").toString("base64url")}(this._identifier,{workspaceId:this._redirectUrl},this._oauthAttemptId),this._oauthState}clientInformation(){return this._clientInformation}hasClientInformation(){return void 0!==this._clientInformation}async saveClientInformation(e){this._clientInformation=e,await this._saveClientInformation(e)}tokens(){return this._tokens}async saveTokens(e){this._tokens=e,await this._saveTokens(e)}async prepareForRefresh(){var e;await(null===(e=this._prepareForRefresh)||void 0===e?void 0:e.call(this))}async releaseRefreshLeaseOnError(e){var t;await(null===(t=this._releaseRefreshLeaseOnError)||void 0===t?void 0:t.call(this,e))}async invalidateCredentials(e){var t;switch(e){case"tokens":this._tokens=void 0;break;case"client":this._clientInformation=void 0;break;case"verifier":this._codeVerifier=void 0,this._oauthState=void 0,this._oauthAttemptId=void 0;break;case"all":this._tokens=void 0,this._clientInformation=void 0,this._codeVerifier=void 0,this._oauthState=void 0,this._oauthAttemptId=void 0,this._lastRedirectUrl=void 0;break;default:return e}await(null===(t=this._invalidateCredentials)||void 0===t?void 0:t.call(this,e))}redirectToAuthorization(e){var t;(null===(t=this._scopes)||void 0===t?void 0:t.length)&&!e.searchParams.has("scope")&&e.searchParams.set("scope",this._scopes.join(" ")),this._lastRedirectUrl=e}get lastRedirectUrl(){return this._lastRedirectUrl}async saveCodeVerifier(e){this._codeVerifier=e}codeVerifier(){if(!this._codeVerifier)throw new Error("No code verifier saved");return this._codeVerifier}}async function mu(e){var t;const{serverName:r,config:n,tokenStorage:o,authRedirectUrl:s}=e,i=function(e,t){if(e)return Object.assign(Object.assign({client_id:e.CLIENT_ID},e.CLIENT_SECRET?{client_secret:e.CLIENT_SECRET}:{}),{redirect_uris:(0,ru.RJV)(t),grant_types:[...du],response_types:[...pu],token_endpoint_auth_method:"none"})}(n.auth,s),a=function({storedClientInformation:e,staticClientInformation:t}){var r,n,o,s;return t?e&&e.client_id===t.client_id?Object.assign(Object.assign(Object.assign({},t),e),{client_secret:null!==(r=t.client_secret)&&void 0!==r?r:e.client_secret,redirect_uris:t.redirect_uris,grant_types:null!==(n=e.grant_types)&&void 0!==n?n:t.grant_types,response_types:null!==(o=e.response_types)&&void 0!==o?o:t.response_types,token_endpoint_auth_method:null!==(s=e.token_endpoint_auth_method)&&void 0!==s?s:t.token_endpoint_auth_method}):t:e}({storedClientInformation:await o.loadClientInformation(),staticClientInformation:i});return new hu({identifier:r,redirectUrl:s,clientMetadata:{redirect_uris:(0,ru.RJV)(s),token_endpoint_auth_method:"none",grant_types:[...du],response_types:[...pu],client_name:"Cursor",logo_uri:ru.G$s},scopes:null===(t=n.auth)||void 0===t?void 0:t.scopes,tokens:await o.loadTokens(),clientInformation:a,saveTokens:e=>o.saveTokens(e),prepareForRefresh:()=>{var e,t;return null!==(t=null===(e=o.prepareForRefresh)||void 0===e?void 0:e.call(o))&&void 0!==t?t:Promise.resolve()},releaseRefreshLeaseOnError:e=>{var t,r;return null!==(r=null===(t=o.releaseRefreshLeaseOnError)||void 0===t?void 0:t.call(o,e))&&void 0!==r?r:Promise.resolve()},invalidateCredentials:o.invalidateCredentials?e=>o.invalidateCredentials(e):void 0,saveClientInformation:e=>o.saveClientInformation(e)})}class fu{serverName;config;client;tools;stateValue;_authProvider;_sessionId;_currentElicitationProvider;_currentToolCallId;_currentToolName;_callToolLock=Promise.resolve();_oauthLifecycleLogger;_stateEnteredAtMs=Date.now();constructor(e,t,r){this.serverName=e,this.client=t,this.tools=new Dc.B1,this.stateValue=r.initialState,this._authProvider=r.authProvider,this._sessionId=r.sessionId,this.config=r.config,this._oauthLifecycleLogger=r.oauthLifecycleLogger,this.setupElicitationHandler()}_stateKindLabel(e){return"requires_authentication"===e.kind?"needsAuth":e.kind}_logStateTransition(e,t,r,n){if(!this._oauthLifecycleLogger)return;const o=this._stateKindLabel(e),s=this._stateKindLabel(t);if(o===s)return;const i=Date.now()-this._stateEnteredAtMs,a=(()=>{try{const e=this.config&&"url"in this.config?this.config.url:void 0;return e?new URL(e).host:void 0}catch(e){return}})();(0,Dc.VD)({logger:this._oauthLifecycleLogger,event:"mcp_oauth_state_transition",metadata:Object.assign({identifier:this.serverName,from:o,to:s,cause:r,serverUrlHost:a,previousStateDurationMs:i},n)})}static createClient(){return new ou.K({name:"Cursor",version:"1.0.0"},{capabilities:{elicitation:{form:{}}}})}setupElicitationHandler(){this.client.setRequestHandler(lu.$9,(async e=>{if(!this._currentElicitationProvider)return{action:"decline"};if(!("requestedSchema"in e.params))return{action:"decline"};try{const t=await this._currentElicitationProvider.elicit({message:e.params.message,requestedSchema:e.params.requestedSchema});return{action:t.action,content:t.content}}catch(e){return{action:"decline"}}}))}static async fromStreamableHttp(e,t,r,n,o,s,i,a){const l=new URL(t.url);o=null!=o?o:ru.tl5;const c=await r.loadTokens(),u=await mu({serverName:e,config:t,tokenStorage:r,authRedirectUrl:o}),d=null!=s?s:globalThis.fetch?globalThis.fetch.bind(globalThis):void 0,p=e=>void 0===d||void 0===i?d:(0,Dc.jI)({fetch:d,logger:i.logger,metadata:Object.assign(Object.assign({},i.metadata),{transportType:e})}),h=fu.createClient(),m=r=>{var n,o,s;const i=null!==(s=null===(o=null===(n=u.lastRedirectUrl)||void 0===n?void 0:n.toString)||void 0===o?void 0:o.call(n))&&void 0!==s?s:"",c=new fu(e,h,{oauthLifecycleLogger:a,initialState:{kind:"requires_authentication",url:i,callback:async t=>{try{if(!u.hasClientInformation())throw new Error("OAuth client registration has not completed. The MCP server may not support dynamic client registration or the registration failed.");await(0,nu.j2)(u,Object.assign({serverUrl:l.toString(),authorizationCode:t},void 0!==d?{fetchFn:d}:{})),a&&(0,Dc.VD)({logger:a,event:"mcp_oauth_callback_completion",metadata:Object.assign(Object.assign({identifier:e},(0,Dc.q2)(l.toString())),(0,Dc.tB)(u.tokens(),{expiresInIsFresh:!0}))}),c.updateState({kind:"ready"})}catch(e){const t=e instanceof Error?e.message:"Authentication failed";throw new Error(`Authentication callback failed: ${t}`)}}},authProvider:u,sessionId:r,config:t});return c},f=async()=>{const r=new su.A(l,{authProvider:u,requestInit:{headers:Object.assign({"User-Agent":"Cursor/1.0.0"},null!=n?n:{})},fetch:p("sse")});try{return await h.connect(r),new fu(e,h,{initialState:{kind:"ready"},authProvider:u,config:t,oauthLifecycleLogger:a})}catch(t){if(t instanceof nu.D_)return a&&(0,Dc.VD)({logger:a,event:"mcp_oauth_state_transition",metadata:Object.assign(Object.assign({identifier:e,from:"connecting",to:"needsAuth",cause:"connect_auth_error",transport:"sse",refreshTokenPresent:Boolean(null==c?void 0:c.refresh_token)},(0,Dc.q2)(l.toString())),(0,Dc.X5)(t))}),m();throw t}};if("sse"===t.type)return f();const g=new au.j(l,{authProvider:u,requestInit:{headers:Object.assign({"User-Agent":"Cursor/1.0.0"},null!=n?n:{})},fetch:p("streamableHttp")});try{return await h.connect(g),new fu(e,h,{initialState:{kind:"ready"},authProvider:u,sessionId:g.sessionId,config:t,oauthLifecycleLogger:a})}catch(t){if(t instanceof nu.D_)return a&&(0,Dc.VD)({logger:a,event:"mcp_oauth_state_transition",metadata:Object.assign(Object.assign({identifier:e,from:"connecting",to:"needsAuth",cause:"connect_auth_error",transport:"streamableHttp",refreshTokenPresent:Boolean(null==c?void 0:c.refresh_token)},(0,Dc.q2)(l.toString())),(0,Dc.X5)(t))}),m(g.sessionId);if((0,Dc.PK)(t))return f();throw t}}static async fromCachedSession(e,t,r,n,o,s=ru.tl5,i,a,l){const c=new URL(t.url),u=await mu({serverName:e,config:t,tokenStorage:n,authRedirectUrl:s}),d=null!=i?i:globalThis.fetch?globalThis.fetch.bind(globalThis):void 0,p=new au.j(c,{authProvider:u,sessionId:r.sessionId,requestInit:{headers:Object.assign({"User-Agent":"Cursor/1.0.0"},null!=o?o:{})},fetch:void 0!==d&&void 0!==a?(0,Dc.jI)({fetch:d,logger:a.logger,metadata:Object.assign(Object.assign({},a.metadata),{transportType:"streamableHttp"})}):d}),h=fu.createClient();return await h.connect(p),new fu(e,h,{initialState:{kind:"ready"},authProvider:u,sessionId:p.sessionId,config:t,oauthLifecycleLogger:l})}get sessionId(){return this._sessionId}static async fromCommand(e,t,r,n,o){var s;const i={stack:[],error:void 0,hasError:!1};try{cu(i,(0,c.VI)(e.withName("McpSdkClient.fromCommand")),!1);const a=new iu.oQ(Object.assign({command:r.command,args:null!==(s=r.args)&&void 0!==s?s:[],env:n,cwd:r.cwd,stderr:"ignore"},(null==o?void 0:o.spawn)&&{spawn:o.spawn})),l=fu.createClient();return await l.connect(a),new fu(t,l,{initialState:{kind:"ready"},config:r})}catch(e){i.error=e,i.hasError=!0}finally{uu(i)}}async close(){await this.client.close()}async getTools(e){var t,r,n;const o={stack:[],error:void 0,hasError:!1};try{if(cu(o,(0,c.VI)(e.withName("McpSdkClient.getTools")),!1),"requires_authentication"===this.stateValue.kind)return[];try{return await this.tools.get((async()=>{let e;const t=[];for(;;){const r=await this.client.listTools({cursor:e});if(t.push(...r.tools.map((e=>Object.assign(Object.assign({},e),{inputSchema:e.inputSchema,outputSchema:e.outputSchema})))),e=r.nextCursor,void 0===e)break}return t}))}catch(e){if(e instanceof nu.D_&&"ready"===this.stateValue.kind){const o=this.stateValue,s=null!==(n=null===(r=null===(t=this._authProvider)||void 0===t?void 0:t.lastRedirectUrl)||void 0===r?void 0:r.toString())&&void 0!==n?n:"";this.stateValue={kind:"requires_authentication",url:s,callback:async e=>{}},this._logStateTransition(o,this.stateValue,"runtime_unauthorized",Object.assign({},(0,Dc.X5)(e))),this._stateEnteredAtMs=Date.now()}throw e}}catch(e){o.error=e,o.hasError=!0}finally{uu(o)}}async callTool(e,t,r,n,o){var s,i,a;const l={stack:[],error:void 0,hasError:!1};try{cu(l,(0,c.VI)(e.withName("McpSdkClient.callTool")),!1).span.setAttribute("toolName",t);const u=this._callToolLock;let d;this._callToolLock=new Promise((e=>{d=e}));try{await u,this._currentToolCallId=n,this._currentToolName=t,this._currentElicitationProvider=o;try{const e=await this.client.callTool({name:t,arguments:r});return{content:e.content,isError:void 0!==e.error}}catch(e){if(e instanceof nu.D_&&"ready"===this.stateValue.kind){const t=this.stateValue,r=null!==(a=null===(i=null===(s=this._authProvider)||void 0===s?void 0:s.lastRedirectUrl)||void 0===i?void 0:i.toString())&&void 0!==a?a:"";this.stateValue={kind:"requires_authentication",url:r,callback:async e=>{}},this._logStateTransition(t,this.stateValue,"runtime_unauthorized",Object.assign({},(0,Dc.X5)(e))),this._stateEnteredAtMs=Date.now()}throw e}finally{this._currentElicitationProvider=void 0,this._currentToolCallId=void 0,this._currentToolName=void 0}}finally{d()}}catch(e){l.error=e,l.hasError=!0}finally{uu(l)}}async getInstructions(e){const t={stack:[],error:void 0,hasError:!1};try{if(cu(t,(0,c.VI)(e.withName("McpSdkClient.getInstructions")),!1),"requires_authentication"===this.stateValue.kind)return;return await this.client.getInstructions()}catch(e){t.error=e,t.hasError=!0}finally{uu(t)}}async listResources(e){const t={stack:[],error:void 0,hasError:!1};try{if(cu(t,(0,c.VI)(e.withName("McpSdkClient.listResources")),!1),"requires_authentication"===this.stateValue.kind)return{resources:[]};const r=this.client.getServerCapabilities();if(!(null==r?void 0:r.resources))return{resources:[]};let n;const o=[];for(;;){const e=await this.client.listResources({cursor:n});if(o.push(...e.resources),n=e.nextCursor,void 0===n)break}return{resources:o}}catch(e){t.error=e,t.hasError=!0}finally{uu(t)}}async readResource(e,t){const r={stack:[],error:void 0,hasError:!1};try{return cu(r,(0,c.VI)(e.withName("McpSdkClient.readResource")),!1),"requires_authentication"===this.stateValue.kind?{contents:[]}:{contents:(await this.client.readResource({uri:t.uri})).contents}}catch(e){r.error=e,r.hasError=!0}finally{uu(r)}}async listPrompts(e){var t;const r={stack:[],error:void 0,hasError:!1};try{if(cu(r,(0,c.VI)(e.withName("McpSdkClient.listPrompts")),!1),"requires_authentication"===this.stateValue.kind)return[];if(!(null!==(t=this.client.getServerCapabilities())&&void 0!==t?t:{prompts:!1}).prompts)return[];const n=await this.client.listPrompts();return(null==n?void 0:n.prompts)?n.prompts.map((e=>{var t;return{name:e.name,description:e.description,arguments:null===(t=e.arguments)||void 0===t?void 0:t.map((e=>({name:e.name,description:e.description,required:e.required})))}})):[]}catch(e){r.error=e,r.hasError=!0}finally{uu(r)}}async getPrompt(e,t,r){const n={stack:[],error:void 0,hasError:!1};try{return cu(n,(0,c.VI)(e.withName("McpSdkClient.getPrompt")),!1),"requires_authentication"===this.stateValue.kind?{messages:[]}:{messages:(await this.client.getPrompt({name:t,arguments:r})).messages.map((e=>({role:e.role,content:Array.isArray(e.content)?e.content.map((e=>"text"===e.type?{type:"text",text:e.text}:"image"===e.type?{type:"image",data:e.data,mimeType:e.mimeType}:{type:"text",text:JSON.stringify(e)})):[{type:"text",text:"string"==typeof e.content?e.content:JSON.stringify(e.content)}]})))}}catch(e){n.error=e,n.hasError=!0}finally{uu(n)}}getCurrentToolCallContext(){if(this._currentToolName)return{toolName:this._currentToolName,toolCallId:this._currentToolCallId}}async getState(e){return this.stateValue}updateState(e,t){const r=this.stateValue;this.stateValue=e,this._logStateTransition(r,e,null!=t?t:"explicit_update"),this._stateEnteredAtMs=Date.now()}}class gu extends Error{toolName;availableTools;constructor(e,t){super(`Tool ${e} not found, available tools: ${t.join(", ")}`),this.toolName=e,this.availableTools=t,this.name="McpToolNotFoundError"}}class vu extends Error{serverName;availableServers;constructor(e,t){super(`MCP server ${e} not found, available servers: ${t.join(", ")}`),this.serverName=e,this.availableServers=t,this.name="McpServerNotFoundError"}}Error;class yu{tools;constructor(e){this.tools=e}async execute(e,t,r,n){const o=this.tools[e];if(!o)throw new gu(e,Object.keys(this.tools));return o.execute(t,r,n)}getTools(){return Object.entries(this.tools).map((([e,t])=>Object.assign(Object.assign({},t.definition),{name:e})))}}class wu{async getClients(e){return{}}async getClient(e,t){}async getInstructions(e){return[]}async getToolSet(e){return new yu({})}async getTools(e){return[]}async getToolsForServers(e,t){return[]}}class bu{manager;constructor(e){this.manager=e}async getClients(e){return this.manager.getClients()}async getClient(e,t){return this.manager.getClient(t)}async getInstructions(e){const t={stack:[],error:void 0,hasError:!1};try{const r=cu(t,(0,c.VI)(e.withName("ManagerMcpLease.getInstructions")),!1);return await this.manager.getInstructions(r.ctx)}catch(e){t.error=e,t.hasError=!0}finally{uu(t)}}async getToolSet(e){const t={stack:[],error:void 0,hasError:!1};try{const r=cu(t,(0,c.VI)(e.withName("ManagerMcpLease.getToolSet")),!1);return await this.manager.getToolSet(r.ctx)}catch(e){t.error=e,t.hasError=!0}finally{uu(t)}}async getTools(e){const t={stack:[],error:void 0,hasError:!1};try{const r=cu(t,(0,c.VI)(e.withName("ManagerMcpLease.getTools")),!1);return(await this.getToolSet(r.ctx)).getTools()}catch(e){t.error=e,t.hasError=!0}finally{uu(t)}}async getToolsForServers(e,t){const r=new Set(t);return(await this.getTools(e)).filter((e=>r.has(e.clientKey)))}onDidChange(e){return{dispose:this.manager.onDidChange((()=>e(void 0)))}}async reconcileSelection(e,t,r){var n;for(const e of t.removed){const t=this.manager.getClient(e);this.manager.deleteClient(e);try{await(null===(n=null==t?void 0:t.close)||void 0===n?void 0:n.call(t))}catch(e){}}for(const n of t.added){if(this.manager.getClient(n))continue;const t=await r(e,n);this.manager.setClient(n,t)}}}class Su{clients;elicitationFactory;changeListeners=new Set;constructor(e,t){this.clients=e,this.elicitationFactory=t}onDidChange(e){return this.changeListeners.add(e),()=>{this.changeListeners.delete(e)}}fireDidChange(){for(const e of this.changeListeners)try{e()}catch(e){console.error("Error in McpManager change listener:",e)}}getClients(){return this.clients}getClient(e){return this.clients[e]}setClient(e,t){this.clients[e]=t,this.fireDidChange()}deleteClient(e){delete this.clients[e],this.fireDidChange()}async closeAllClients(){const e=Object.values(this.clients);await Promise.all(e.map((async e=>{var t;try{await(null===(t=e.close)||void 0===t?void 0:t.call(e))}catch(e){}})))}async getToolSet(e){const t={stack:[],error:void 0,hasError:!1};try{const r=cu(t,(0,c.VI)(e.withName("McpManager.getToolSet")),!1),n=await(0,m.PH)(Object.entries(this.clients),(([e,t])=>t.getTools(r.ctx).then((r=>r.map((r=>Object.assign(Object.assign({},r),{clientKey:e,clientName:t.serverName,client:t}))))).catch((()=>[]))),{max:4}),o=Array.from(n.values()).flat(),s={};for(const e of o)s[`${e.clientName}-${e.name}`]={definition:Object.assign(Object.assign({},e),{clientKey:e.clientKey,providerIdentifier:e.clientName,toolName:e.name}),execute:async(t,n,o)=>{const s=null==o?void 0:o.createProvider(e.clientName,e.name,n);return await e.client.callTool(r.ctx,e.name,t,n,s)}};return new yu(s)}catch(e){t.error=e,t.hasError=!0}finally{uu(t)}}async getInstructions(e){const t={stack:[],error:void 0,hasError:!1};try{const r=cu(t,(0,c.VI)(e.withName("McpManager.getInstructions")),!1),n=await(0,m.PH)(Object.entries(this.clients),(([e,t])=>t.getInstructions(r.ctx).then((e=>e&&0!==e.trim().length?new pr.I0({serverName:t.serverName,instructions:e.trim()}):null)).catch((()=>null))),{max:4});return Array.from(n.values()).filter((e=>null!==e))}catch(e){t.error=e,t.hasError=!0}finally{uu(t)}}}function ku(e,t){return function(e){const{logger:t,ctx:r}=e;return{debug:(e,n)=>t.debug(r,e,n),info:(e,n)=>t.info(r,e,n),warn:(e,n)=>t.warn(r,e,n),error:(e,n,o)=>t.error(r,e,n,o)}}({ctx:e,logger:t})}class Eu{options;constructor(e){this.options=e,(0,Dc.VD)({logger:e.logger,event:"mcp_oauth_provider_initialized",metadata:this.baseMetadata})}get baseMetadata(){return Object.assign({identifier:this.options.identifier},this.options.serverUrl?{serverUrl:(0,Dc.q2)(this.options.serverUrl)}:{})}async loadTokens(){const e=await this.options.inner.loadTokens();return(0,Dc.VD)({logger:this.options.logger,event:"mcp_oauth_tokens_loaded",level:"debug",metadata:Object.assign(Object.assign({},this.baseMetadata),(0,Dc.tB)(e))}),e}async saveTokens(e){await this.options.inner.saveTokens(e),(0,Dc.VD)({logger:this.options.logger,event:"mcp_oauth_tokens_saved",metadata:Object.assign(Object.assign({},this.baseMetadata),(0,Dc.tB)(e,{expiresInIsFresh:!0}))})}async prepareForRefresh(){var e,t;(0,Dc.VD)({logger:this.options.logger,event:"mcp_oauth_refresh_prepare",metadata:this.baseMetadata}),await(null===(t=(e=this.options.inner).prepareForRefresh)||void 0===t?void 0:t.call(e))}async releaseRefreshLeaseOnError(e){var t,r;(0,Dc.VD)({logger:this.options.logger,event:"mcp_oauth_refresh_error_release",level:"warn",error:e,metadata:Object.assign(Object.assign({},this.baseMetadata),(0,Dc.X5)(e))}),await(null===(r=(t=this.options.inner).releaseRefreshLeaseOnError)||void 0===r?void 0:r.call(t,e))}async loadClientInformation(){const e=await this.options.inner.loadClientInformation();return(0,Dc.VD)({logger:this.options.logger,event:"mcp_oauth_client_info_loaded",level:"debug",metadata:Object.assign(Object.assign({},this.baseMetadata),(0,Dc.O3)(e))}),e}async saveClientInformation(e){await this.options.inner.saveClientInformation(e),(0,Dc.VD)({logger:this.options.logger,event:"mcp_oauth_client_info_saved",metadata:Object.assign(Object.assign({},this.baseMetadata),(0,Dc.O3)(e))})}async invalidateCredentials(e){void 0!==this.options.inner.invalidateCredentials&&((0,Dc.VD)({logger:this.options.logger,event:"mcp_oauth_credentials_invalidated",level:"warn",metadata:Object.assign(Object.assign({},this.baseMetadata),{scope:e})}),await this.options.inner.invalidateCredentials(e))}}class xu{storage;identifier;constructor(e,t){this.storage=e,this.identifier=t}async loadTokens(){return this.storage.loadTokens(this.identifier)}async saveTokens(e){return this.storage.saveTokens(this.identifier,e)}async loadClientInformation(){return this.storage.loadClientInformation(this.identifier)}async saveClientInformation(e){return this.storage.saveClientInformation(this.identifier,e)}}class Cu{inner;constructor(e){this.inner=e}async loadTokens(){}async loadClientInformation(){}async saveTokens(e){return this.inner.saveTokens(e)}async saveClientInformation(e){return this.inner.saveClientInformation(e)}async invalidateCredentials(e){var t,r;await(null===(r=(t=this.inner).invalidateCredentials)||void 0===r?void 0:r.call(t,e))}}var _u=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t},Pu=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const Ru=(0,c.h)("DefinitionMcpLoader");function Tu(e){const{filePath:t,baseDir:r}=e;return"~"===t||t.startsWith("~/")?a.join(i.homedir(),t.slice(1)):t.startsWith("./")||"."===t?a.resolve(null!=r?r:process.cwd(),t):t}function Iu(e){return"function"==typeof e.getMcpNetworkControlsConfig}async function Au(e,t,n,o,s={middlewares:[],configPath:""},i){const a={stack:[],error:void 0,hasError:!1};try{const{middlewares:l,configPath:u}=s,d=_u(a,(0,c.VI)(e.withName("mcp-agent-exec.loadServer")),!1);d.span.setAttribute("serverName",t);let p=async(e,n)=>{const s={stack:[],error:void 0,hasError:!1};try{const a=_u(s,(0,c.VI)(e.withName("loadServer.next")),!1);a.span.setAttribute("serverName",t);const u=a.ctx;if("command"in n){a.span.setAttribute("kind","command");const e=l.find(Iu);return await async function(e,t,n,o){var s,i,a;const l=n.cwd?Tu({filePath:n.cwd}):void 0;let c,u;if(n.args&&n.args.length>0)c=Tu({filePath:n.command,baseDir:l}),u=n.args.map((e=>Tu({filePath:e,baseDir:l})));else{const e=(0,tu.A)(n.command);c=Tu({filePath:e[0],baseDir:l}),u=e.slice(1).map((e=>Tu({filePath:e,baseDir:l})))}const d=null!==(i=n.env)&&void 0!==i?i:{},p=await(null===(s=null==o?void 0:o.getMcpNetworkControlsConfig)||void 0===s?void 0:s.call(o,{command:[n.command,...null!==(a=n.args)&&void 0!==a?a:[]].join(" ")}));if(!0===(null==p?void 0:p.enabled)){const{buildMcpSandboxPolicy:n}=await Promise.resolve().then(r.bind(r,"../mcp-agent-exec/dist/mcp-sandbox-policy.js")),{SandboxUnsupportedError:o,spawnInSandbox:s}=await Promise.resolve().then(r.bind(r,"../shell-exec/dist/index.js")),i=null!=l?l:process.cwd(),a=await n(p,i);Ru.info(e,`Sandboxing local MCP server "${t}" with network controls`);try{return await fu.fromCommand(e,t,{command:c,args:u,cwd:l},d,{spawn:(e,t,r)=>s(e,t,r,a)})}catch(e){if(e instanceof o)throw new Dc.c8(t,e);throw e}}return fu.fromCommand(e,t,{command:c,args:u,cwd:l},d)}(u,t,n,e)}if("url"in n){a.span.setAttribute("kind","url");const e=null==i?void 0:i(t);return await async function(e,t,r,n,o){const s=ku(e,Ru),i=function(e,t){return{logger:{debug:(t,r)=>Ru.debug(e,t,r),info:(t,r)=>Ru.info(e,t,r),warn:(t,r)=>Ru.warn(e,t,r),error:(t,r,n)=>Ru.error(e,t,r,n)},metadata:{identifier:t,source:"mcp-agent-exec"}}}(e,t);return fu.fromStreamableHttp(t,r,n,r.headers,o,void 0,i,s)}(u,t,n,o,e)}throw new Error(`Invalid server: ${JSON.stringify(n)}`)}catch(e){s.error=e,s.hasError=!0}finally{Pu(s)}};for(const e of l){const r=p;p=async(n,o)=>await e.load(n,t,o,u,r)}return await p(d.ctx,n)}catch(e){a.error=e,a.hasError=!0}finally{Pu(a)}}class Ou{configPath;configPromise;constructor(e){this.configPath=e,this.configPromise=eu(e)}clearCache(){this.configPromise=eu(this.configPath)}async getDefinitions(e,t=!0){const r=await this.configPromise;return Object.entries(r.mcpServers).map((([e,t])=>({identifier:e,serverConfig:t,configPath:this.configPath})))}}class Du{source;tokenStorage;middlewares;options;clientCache=new Map;sandboxPolicyFingerprint;constructor(e,t,r=[],n={}){this.source=e,this.tokenStorage=t,this.middlewares=r,this.options=n}async load(e,t=!0){var r,n,o;const s={stack:[],error:void 0,hasError:!1};try{_u(s,(0,c.VI)(e.withName("DefinitionMcpLoader.load")),!1),t||(await this.closeAllCachedClients(),null===(n=(r=this.source).clearCache)||void 0===n||n.call(r));const i=await this.source.getDefinitions(e,t);await this.evictClientsOnSandboxPolicyChange(e,i);const a={};return await(0,m.PH)([...i],(async r=>{try{const n=t?this.clientCache.get(r.identifier):void 0,o=null!=n?n:await this.loadDefinitionClient(e,r);n||this.clientCache.set(r.identifier,o),a[r.identifier]=o}catch(t){if(this.handleDefinitionLoadError(e,r,t))return;!function(e,t,r){Ru.warn(e,"Failed to load MCP server",{identifier:t.identifier,source:t.source,configPath:t.configPath,metadata:t.metadata,errorMessage:r instanceof Error?r.message:String(r)})}(e,r,t)}}),{max:null!==(o=this.options.maxConcurrency)&&void 0!==o?o:Math.max(i.length,1)}),new Su(a,this.options.elicitationFactory)}catch(e){s.error=e,s.hasError=!0}finally{Pu(s)}}clearClient(e){this.clientCache.delete(e)}clearAllMcpCaches(){this.clientCache.clear()}async evictClientsOnSandboxPolicyChange(e,t){const r=this.middlewares.find(Iu);if(!r)return;let n;try{n=JSON.stringify(await Promise.all([...t].sort(((e,t)=>e.identifier.localeCompare(t.identifier))).map((async e=>{var t,n;const o=null!==(n=await(null===(t=r.getMcpNetworkControlsConfig)||void 0===t?void 0:t.call(r,function(e){var t;return"url"in e?{url:e.url}:{command:[e.command,...null!==(t=e.args)&&void 0!==t?t:[]].join(" ")}}(e.serverConfig))))&&void 0!==n?n:{};return[e.identifier,(0,Dc.Fm)(o)]}))))}catch(e){return}const o=this.sandboxPolicyFingerprint;this.sandboxPolicyFingerprint=n,void 0!==o&&o!==n&&(Ru.info(e,"MCP network-controls policy changed; reloading MCP clients to apply the new egress policy"),await this.closeAllCachedClients())}async closeAllCachedClients(){const e=[...this.clientCache.values()];this.clientCache.clear(),await(0,m.PH)(e,(async e=>{var t;try{await(null===(t=e.close)||void 0===t?void 0:t.call(e))}catch(e){}}),{max:Math.max(e.length,1)})}async loadClient(e,t,r){const n={stack:[],error:void 0,hasError:!1};try{_u(n,(0,c.VI)(e.withName("DefinitionMcpLoader.loadClient")),!1);const o=await this.source.getDefinitions(e);if(await this.evictClientsOnSandboxPolicyChange(e,o),!r){const e=this.clientCache.get(t);if(e)return e}const s=o.find((e=>e.identifier===t));if(!s)throw new Error(`MCP server "${t}" not found in config`);let i;try{i=await this.loadDefinitionClient(e,s,r)}catch(t){throw this.handleDefinitionLoadError(e,s,t),t}return r||this.clientCache.set(t,i),i}catch(e){n.error=e,n.hasError=!0}finally{Pu(n)}}async loadDefinitionClient(e,t,r){var n,o;const s=null!==(n=t.authStorageKey)&&void 0!==n?n:t.identifier,i=new xu(this.tokenStorage,s),a=ku(e,Ru),l=new Eu({inner:i,logger:a,identifier:s,serverUrl:"url"in t.serverConfig?t.serverConfig.url:void 0}),c=r?new Cu(l):l;return Au(e,t.identifier,t.serverConfig,c,{middlewares:this.middlewares,configPath:null!==(o=t.configPath)&&void 0!==o?o:""},this.options.authRedirectUrlGenerator)}handleDefinitionLoadError(e,t,r){var n,o;let s=!1;try{s="handled"===(null===(o=(n=this.options).onDefinitionLoadError)||void 0===o?void 0:o.call(n,e,t,r))}catch(r){Ru.warn(e,"MCP definition load error hook failed",{identifier:t.identifier,source:t.source,configPath:t.configPath,metadata:t.metadata,errorMessage:r instanceof Error?r.message:String(r)})}return s||function(e){return e instanceof jc||e instanceof Nc||e instanceof Mu}(r)}}class Mu extends Error{serverName;reason;constructor(e,t,r){super(null!=r?r:"teamNetworkAllowlist"===t?`MCP server "${e}" is not on the team network allowlist`:`MCP server "${e}" is blocked by team policy`),this.serverName=e,this.reason=t,this.name="McpServerBlockedError"}}class ju{blockingService;constructor(e){this.blockingService=e}async getMcpNetworkControlsConfig(e){var t,r,n;return null!==(n=await(null===(r=(t=this.blockingService).getMcpNetworkControlsConfig)||void 0===r?void 0:r.call(t,e)))&&void 0!==n?n:{}}async load(e,t,r,n,o){var s,i,a,l,c;const u={command:"command"in r?[r.command,...null!==(a=r.args)&&void 0!==a?a:[]].join(" "):void 0,url:"url"in r?r.url:void 0},d=null!==(l=await(null===(i=(s=this.blockingService).getMcpServerBlockInfo)||void 0===i?void 0:i.call(s,u)))&&void 0!==l?l:{blocked:await this.blockingService.isServerBlocked(u)};if(d.blocked)throw new Mu(t,null!==(c=d.reason)&&void 0!==c?c:"teamPolicy",d.message);return o(e,r)}}class Nu extends Du{configPath;elicitationFactory;constructor(e,t,r=[],n,o){super(new Ou(e),t,r,{authRedirectUrlGenerator:n,elicitationFactory:o}),this.configPath=e,this.elicitationFactory=o}static init(e,t,r=[]){return new Nu(t,e,r)}}function $u(e){var t;return"stdio"===e.type&&e.command?{command:e.command,args:null!==(t=e.args)&&void 0!==t?t:[],env:e.env,cwd:e.cwd}:"streamableHttp"===e.type&&e.url?{url:e.url,headers:e.headers,auth:e.auth}:void 0}Error,r("../mcp-agent-exec/dist/mcp-sandbox-policy.js");class Fu{mcpAuthPath;static mcpAuthPromises=new Map;static saveLocks=new Map;mcpAuthPromise;constructor(e){this.mcpAuthPath=e;const t=Fu.mcpAuthPromises.get(e);if(t)this.mcpAuthPromise=t;else{const t=this.loadMcpAuth();this.mcpAuthPromise=t,Fu.mcpAuthPromises.set(e,t),t.catch((()=>{Fu.mcpAuthPromises.get(e)===t&&Fu.mcpAuthPromises.delete(e)}))}Fu.saveLocks.has(e)||Fu.saveLocks.set(e,Promise.resolve())}async loadMcpAuth(){try{const e=await(0,En.readFile)(this.mcpAuthPath,"utf8"),t=JSON.parse(e);if(t&&"object"==typeof t){if(Object.values(t).some((e=>e&&"object"==typeof e&&null!==e&&("access_token"in e||"refresh_token"in e)&&!("tokens"in e)&&!("clientInfo"in e)))){const e={};for(const[r,n]of Object.entries(t))e[r]={tokens:n};return e}const e={};for(const[r,n]of Object.entries(t))n&&"object"==typeof n&&null!==n&&(e[r]={tokens:"tokens"in n?n.tokens:void 0,clientInfo:"clientInfo"in n?n.clientInfo:void 0});return e}return{}}catch(e){if(e instanceof Error&&e.message.includes("ENOENT"))return{};throw e}}async loadTokens(e){var t;return null===(t=(await this.mcpAuthPromise)[e])||void 0===t?void 0:t.tokens}async saveTokens(e,t){await this.withSaveLock((async()=>{const r=await this.mcpAuthPromise;r[e]||(r[e]={}),r[e].tokens=t,await this.saveMcpAuth(r)}))}async loadClientInformation(e){var t;return null===(t=(await this.mcpAuthPromise)[e])||void 0===t?void 0:t.clientInfo}async withSaveLock(e){var t;const r=null!==(t=Fu.saveLocks.get(this.mcpAuthPath))&&void 0!==t?t:Promise.resolve();let n;Fu.saveLocks.set(this.mcpAuthPath,new Promise((e=>{n=e})));try{return await r,await e()}finally{n()}}async saveClientInformation(e,t){await this.withSaveLock((async()=>{const r=await this.mcpAuthPromise;r[e]||(r[e]={}),r[e].clientInfo=t,await this.saveMcpAuth(r)}))}async deleteCredentials(e){await this.withSaveLock((async()=>{const t=await this.mcpAuthPromise;e in t&&(delete t[e],await this.saveMcpAuth(t))}))}async saveMcpAuth(e){await(0,En.mkdir)(a.dirname(this.mcpAuthPath),{recursive:!0}),await(0,En.writeFile)(this.mcpAuthPath,JSON.stringify(e,null,2))}}var Lu=r("../../node_modules/.pnpm/@jimp+core@1.6.0/node_modules/@jimp/core/dist/esm/index.js"),Uu=r("../../node_modules/.pnpm/jimp@1.6.0/node_modules/jimp/dist/esm/index.js");const Bu=()=>{throw new Error("webp codec not registered: registerWebpCodec() must be called by a Node server before decoding/encoding webp")},Hu=e=>e.length>=12&&"RIFF"===e.toString("ascii",0,4)&&"WEBP"===e.toString("ascii",8,12),Wu=e=>Bu().encode(e),zu=(0,Lu.rJ)({formats:Uu.ko,plugins:Uu.mf}),qu=1048576,Gu=e=>new Uint8Array(e.buffer,e.byteOffset,e.byteLength),Vu=(e,t,r=1024)=>{let n=e,o=t;return e>t?e>r&&(n=r,o=Math.max(1,Math.round(t*r/e))):t>r&&(o=r,n=Math.max(1,Math.round(e*r/t))),{width:n,height:o,needsResize:n!==e||o!==t}},Ju=async e=>{if(Hu(e))return(async e=>{const t=(e=>{if(!Hu(e)||e.length<16)return;const t=e.toString("ascii",12,16);if("VP8 "===t){if(e.length<30||157!==e[23]||1!==e[24]||42!==e[25])return;return{width:16383&(e[26]|e[27]<<8),height:16383&(e[28]|e[29]<<8)}}if("VP8L"===t){if(e.length<25||47!==e[20])return;const t=(e[21]|e[22]<<8|e[23]<<16|e[24]<<24)>>>0;return{width:1+(16383&t),height:1+(t>>14&16383)}}if("VP8X"===t){if(e.length<30)return;return{width:1+(e[24]|e[25]<<8|e[26]<<16),height:1+(e[27]|e[28]<<8|e[29]<<16)}}})(e);if(void 0!==t&&!Vu(t.width,t.height,1280).needsResize&&e.length<=qu)return{data:Gu(e),mimeType:"image/webp"};const r=await(n=e,Bu().decode(n));var n;const o=zu.fromBitmap({data:Buffer.from(r.data),width:r.width,height:r.height});let{width:s,height:i,needsResize:a}=Vu(o.bitmap.width,o.bitmap.height,1280);a&&o.resize({w:s,h:i});let l=await Wu({data:o.bitmap.data,width:o.bitmap.width,height:o.bitmap.height});for(;l.length>qu&&s>1&&i>1;)s=Math.max(1,Math.round(.8*s)),i=Math.max(1,Math.round(.8*i)),o.resize({w:s,h:i}),l=await Wu({data:o.bitmap.data,width:o.bitmap.width,height:o.bitmap.height});return{data:Gu(l),mimeType:"image/webp"}})(e);const t=await zu.read(e),r=(e=>{switch(e.mime){case"image/png":default:return"image/png";case"image/bmp":return"image/bmp";case"image/tiff":return"image/tiff";case"image/x-ms-bmp":return"image/x-ms-bmp";case"image/gif":return"image/gif";case"image/jpeg":return"image/jpeg"}})(t),{width:n,height:o,needsResize:s}=Vu(t.width,t.height);if(!s&&e.length<=qu)return{data:Gu(e),mimeType:r};let i=n,a=o;s&&t.resize({w:i,h:a});let l=await t.getBuffer(r);for(;l.length>qu&&i>1&&a>1;)i=Math.max(1,Math.round(.8*i)),a=Math.max(1,Math.round(.8*a)),t.resize({w:i,h:a}),l=await t.getBuffer(r);return{data:Gu(l),mimeType:r}};"function"==typeof SuppressedError&&SuppressedError,(0,p.Pu)("mcp.filesystem.divergence",{description:"Divergence detected between MCP lease state and filesystem state",labelNames:["divergence_type","mcp_source","configured_servers","mcp_version"]}),(0,p.Pu)("mcp.filesystem.sync_check",{description:"MCP filesystem sync check executed",labelNames:["synced","mcp_source","configured_servers","mcp_version"]}),(0,p.wt)("mcp.filesystem.sync_check.expected_servers",{description:"Number of expected MCP servers at last sync check",labelNames:["mcp_source","mcp_version"]}),(0,p.wt)("mcp.filesystem.sync_check.actual_servers",{description:"Number of actual MCP servers on disk at last sync check",labelNames:["mcp_source","mcp_version"]}),(0,p.wt)("mcp.filesystem.sync_check.servers_missing",{description:"Number of expected MCP servers missing from disk at last sync check",labelNames:["mcp_source","mcp_version"]}),(0,p.wt)("mcp.filesystem.sync_check.tool_mismatches",{description:"Number of MCP servers with tool count mismatches at last sync check",labelNames:["mcp_source","mcp_version"]}),(0,c.h)("McpFileSystemWriter");const Ku="mcp_auth";["# Ignore everything in .cursor","*","# Un-ignore projects so we can descend to allowlisted subdirs","!projects/","projects/*","!projects/*/","projects/*/*","# MCP tool descriptors, resources, prompts","!projects/*/mcps/","!projects/*/mcps/**","# Agent transcripts for citation","!projects/*/agent-transcripts/","!projects/*/agent-transcripts/**","# Terminal output files","!projects/*/terminals/","!projects/*/terminals/**","# Conversation notes (shared scratchpad)","!projects/*/agent-notes/","!projects/*/agent-notes/**","# Large tool output files","!projects/*/agent-tools/","!projects/*/agent-tools/**","# Plugin cache (rules, skills, agents)","!plugins/","!plugins/**","# Built-in Cursor skills","!skills-cursor/","!skills-cursor/**","# User's personal skills","!skills/","!skills/**","# User's personal slash commands","!commands/","!commands/**","# User's plan files","!plans/","!plans/**","# Subagent state/transcripts","!subagents/","!subagents/**","# User-level cursor rules","!rules/","!rules/**"].join("\n");var Yu=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t},Zu=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const Xu=(0,c.h)("local-exec:mcp");async function Qu(e,t){const r=a.join(t,Ac),n=a.join(r,`${(0,o.randomUUID)()}.txt`);await(0,En.mkdir)(a.dirname(n),{recursive:!0});const s=e.slice(0,Oc),i=s.split("\n").length,l=Buffer.byteLength(s,"utf8");return await(0,En.writeFile)(n,s,"utf8"),new Ze._Z({content:{case:"text",value:new Ze.zN({text:"",outputLocation:new $l.pV({filePath:n,sizeBytes:BigInt(l),lineCount:BigInt(i)})})}})}function ed(e){const t=e.replace(/\s/g,"_").replace(/[^a-zA-Z0-9_.-]/g,"").replace(/\.+/g,".");return"."===t||".."===t?t.replace(/\./g,"_"):0===t.length?"_":t}async function td(e,t,r){const n=!t.skipApproval&&await r.permissionsService.shouldBlockMcp(e,t);if(n)return await Gn(n,{onNeedsApproval:async(e,n)=>{if("mcp"!==n.type)return new Ze.iz({result:{case:"error",value:new Ze.Nh({error:"Invalid approval details type for MCP execution"})}});const o=await r.pendingDecisionProvider.requestApproval({type:fc.Mcp,details:{name:n.name,toolName:n.toolName,providerIdentifier:n.providerIdentifier,source:r.toolDef?.source,args:n.args,reason:n.reason??e,canAllowlist:n.canAllowlist,smartModeApprovalReason:n.smartModeApprovalReason,smartModeApprovalRequestId:n.smartModeApprovalRequestId},toolCallId:t.toolCallId});return o.approved?t.smartModeApprovalOnly?new Ze.iz({result:{case:"approved",value:new Ze.Ke}}):null:new Ze.iz({result:{case:"rejected",value:new Ze.xo({reason:`User rejected MCP: ${t.name}${o.reason?` - ${o.reason}`:""}`})}})},onUserRejected:e=>new Ze.iz({result:{case:"error",value:new Ze.Nh({error:`User rejected MCP: ${t.name}${e?` - ${e}`:""}`})}}),onPermissionDenied:(e,r)=>{const n=`MCP tool execution blocked: ${t.name} - ${e}`;return new Ze.iz({result:{case:"permissionDenied",value:new Ze.HQ({error:n,isReadonly:r?.isReadonly??!1})}})}})??void 0}class rd{toolSet;permissionsService;pendingDecisionProvider;projectDir;fileOutputThresholdBytes;elicitationFactory;constructor(e,t,r,n,o=4e4,s){this.toolSet=e,this.permissionsService=t,this.pendingDecisionProvider=r,this.projectDir=n,this.fileOutputThresholdBytes=o,this.elicitationFactory=s}async execute(e,t){const r={stack:[],error:void 0,hasError:!1};try{const n=Yu(r,(0,c.VI)(e.withName("LocalMcpToolExecutor.execute")),!1).ctx,o=await this.toolSet.getTools(n),s=Array.from(new Set(o.map((e=>e.clientKey)))).sort(),i=o.find((e=>e.providerIdentifier===t.providerIdentifier&&e.toolName===t.toolName)),a=await td(n,t,{permissionsService:this.permissionsService,pendingDecisionProvider:this.pendingDecisionProvider,toolDef:i});if(void 0!==a)return a;const l=await this.toolSet.getToolSet(n);let u;try{u=await l.execute(t.name,Object.fromEntries(Object.entries(t.args).map((([e,t])=>[e,t.toJson()]))),t.toolCallId,this.elicitationFactory)}catch(e){let r=e;if(r instanceof gu&&t.providerIdentifier.length>0&&!o.some((e=>e.clientKey===t.providerIdentifier||e.providerIdentifier===t.providerIdentifier))&&(r=new vu(t.providerIdentifier,s)),r instanceof vu)return new Ze.iz({result:{case:"serverNotFound",value:new Ze.JL({name:r.serverName,availableServers:r.availableServers})}});if(r instanceof gu)return new Ze.iz({result:{case:"toolNotFound",value:new Ze.WV({name:r.toolName,availableTools:r.availableTools})}});throw r}const d=[];for(const e of u.content){const t=e.type;if("text"===t){const t=e;d.push({kind:"text",text:t.text})}else if("resource"===t){const t=e;t.resource?.text&&d.push({kind:"text",text:t.resource.text})}else if("image"===t){const t=e,r=Buffer.from(t.data,"base64"),n=await Ju(r);d.push({kind:"contentItem",item:new Ze._Z({content:{case:"image",value:new Ze.do({data:n.data,mimeType:n.mimeType})}})})}else if("image"!==t){const t=qc(e);d.push({kind:"text",text:t})}}const p=await async function({fileOutputThresholdBytes:e,pendingContentItems:t,projectDir:r}){const n=t.filter((e=>"text"===e.kind)).map((e=>e.text)).join("\n\n"),o=e>0&&Buffer.byteLength(n,"utf8")>e;let s=!1;const i=[];for(const e of t)"contentItem"!==e.kind?o?s||(i.push(await Qu(n,r)),s=!0):i.push((a=e.text,new Ze._Z({content:{case:"text",value:new Ze.zN({text:a})}}))):i.push(e.item);var a;return i}({fileOutputThresholdBytes:this.fileOutputThresholdBytes,pendingContentItems:d,projectDir:this.projectDir}),h=u.structuredContent&&"object"==typeof u.structuredContent&&!Array.isArray(u.structuredContent)?hr.Struct.fromJson(u.structuredContent):void 0,m=new Ze.QW({content:p,isError:u.isError,structuredContent:h});return new Ze.iz({result:{case:"success",value:m}})}catch(e){r.error=e,r.hasError=!0}finally{Zu(r)}}}class nd{mcpLease;constructor(e){this.mcpLease=e}async execute(e,t){const r={stack:[],error:void 0,hasError:!1};try{const n=Yu(r,(0,c.VI)(e.withName("LocalListMcpResourcesExecutor.execute")),!1).ctx;try{const e=new Set,r=await this.mcpLease.getTools(n);for(const t of r)e.add(t.providerIdentifier),e.add(`user-${t.providerIdentifier}`);const o=await this.mcpLease.getClients(n),s=[];if(t.server){const e=o[t.server];if(!e)return new Ze.kP({result:{case:"error",value:new Ze.w2({error:`Server "${t.server}" not found`})}});const r=await this.listResourcesFromClient(n,e,t.server);s.push(...r)}else for(const[t,r]of Object.entries(o)){if(e.size>0&&!e.has(t))continue;const o=await this.listResourcesFromClient(n,r,t);s.push(...o)}return new Ze.kP({result:{case:"success",value:new Ze.T2({resources:s})}})}catch(e){const t=e instanceof Error?e.message:String(e);return new Ze.kP({result:{case:"error",value:new Ze.w2({error:`Failed to list MCP resources: ${t}`})}})}}catch(e){r.error=e,r.hasError=!0}finally{Zu(r)}}async listResourcesFromClient(e,t,r){if("ready"!==(await t.getState(e)).kind)return[];const n=await t.listResources(e);return n&&n.resources?n.resources.map((e=>new Ze.X2({uri:e.uri,name:e.name,description:e.description,mimeType:e.mimeType,server:r,annotations:e.annotations}))):[]}}class od{mcpLease;projectDir;permissionsService;pendingDecisionProvider;workspacePaths;constructor(e,t=".",r,n=[],o){this.mcpLease=e,this.projectDir=t,this.permissionsService=r,this.pendingDecisionProvider=o,this.workspacePaths=n.filter((e=>e.length>0))}resolveProjectDir(e){const t=e.get($e),r=t?.find((e=>"string"==typeof e&&e.length>0));return r||(this.workspacePaths.length>0?this.workspacePaths[0]:this.projectDir)}async execute(e,t){const r={stack:[],error:void 0,hasError:!1};try{const n=Yu(r,(0,c.VI)(e.withName("LocalReadMcpResourceExecutor.execute")),!1).ctx,o=t.smartModeApproval?.reason;if(void 0!==o){if(void 0===this.pendingDecisionProvider)return new Ze.ZD({result:{case:"error",value:new Ze.Jx({uri:t.uri,error:"Auto-review approval provider is not configured"})}});const e=await this.pendingDecisionProvider.requestApproval({type:fc.Mcp,details:{name:"FetchMcpResource",toolName:"FetchMcpResource",providerIdentifier:t.server,args:{server:hr.Value.fromJson(t.server),uri:hr.Value.fromJson(t.uri),...void 0!==t.downloadPath?{downloadPath:hr.Value.fromJson(t.downloadPath)}:{}},reason:"smartMode",canAllowlist:!1,smartModeApprovalReason:o,smartModeApprovalRequestId:t.smartModeApproval?.requestId},toolCallId:t.toolCallId});if(!e.approved)return new Ze.ZD({result:{case:"rejected",value:new Ze.Dh({reason:"User rejected MCP resource fetch"+(e.reason?` - ${e.reason}`:"")})}})}const s=(await this.mcpLease.getClients(n))[t.server];if(!s)return new Ze.ZD({result:{case:"error",value:new Ze.Jx({uri:t.uri,error:`Server "${t.server}" not found`})}});try{if("ready"!==(await s.getState(n)).kind)return new Ze.ZD({result:{case:"error",value:new Ze.Jx({uri:t.uri,error:`Server "${t.server}" is not ready`})}});const e=await s.readResource(n,{uri:t.uri});if(!e||!e.contents||0===e.contents.length)return new Ze.ZD({result:{case:"notFound",value:new Ze.ov({uri:t.uri})}});const r=e.contents[0];if(t.downloadPath){const e=t.downloadPath.replace(/^\/+/,""),o=a.join(this.resolveProjectDir(n),e);if(await(0,En.mkdir)(a.dirname(o),{recursive:!0}),r.text)await(0,En.writeFile)(o,r.text,"utf8");else if(r.blob){const e=Buffer.from(r.blob,"base64");await(0,En.writeFile)(o,e)}return new Ze.ZD({result:{case:"success",value:new Ze.KZ({uri:t.uri,name:r.name,description:r.description,mimeType:r.mimeType})}})}if(r.text)return new Ze.ZD({result:{case:"success",value:new Ze.KZ({uri:t.uri,name:r.name,description:r.description,mimeType:r.mimeType,annotations:r.annotations,content:{case:"text",value:r.text}})}});if(r.blob){const e=Buffer.from(r.blob,"base64");return new Ze.ZD({result:{case:"success",value:new Ze.KZ({uri:t.uri,name:r.name,description:r.description,mimeType:r.mimeType,annotations:r.annotations,content:{case:"blob",value:e}})}})}return new Ze.ZD({result:{case:"error",value:new Ze.Jx({uri:t.uri,error:"Failed to read resource"})}})}catch(e){const r=e instanceof Error?e.message:String(e);return Xu.warn(n,"LocalReadMcpResourceExecutor.execute failed",{server:t.server,hasDownloadPath:Boolean(t.downloadPath),errorName:e instanceof Error?e.name:typeof e,errorMessage:r}),new Ze.ZD({result:{case:"error",value:new Ze.Jx({uri:t.uri,error:`Failed to read MCP resource: ${r}`})}})}}catch(e){r.error=e,r.hasError=!0}finally{Zu(r)}}}async function sd(e,t){const r=ed(t),n=(0,a.join)(e,"mcps",r,"tools");let o;try{o=await(0,En.readdir)(n)}catch(e){if("ENOENT"===e?.code)return{toolNames:[],toolsDirExists:!1};throw e}const s=await Promise.all(o.map((async e=>{if(e.endsWith(".json"))try{return function(e){try{const t=JSON.parse(e);return"string"==typeof t.name&&t.name.length>0?t.name:"string"==typeof t.toolName&&t.toolName.length>0?t.toolName:void 0}catch(e){return}}(await(0,En.readFile)((0,a.join)(n,e),"utf8"))}catch{return}}))),i=new Set;for(const e of s)e&&i.add(e);return{toolNames:Array.from(i).sort(((e,t)=>e.localeCompare(t))),toolsDirExists:!0}}const id=(0,c.h)("local-exec:mcp-disk-freshness-on-access"),ad="/mcps/",ld=(0,p.Pu)("mcp.discovery_freshness.check",{description:"MCP discovery surface freshness comparison outcome against canonical live tools",labelNames:["surface","outcome"]}),cd=(0,p.v5)("mcp.discovery_freshness.missing_tools",{description:"Number of tools present in canonical live state but missing from the observed discovery surface",labelNames:["surface"]}),ud=(0,p.v5)("mcp.discovery_freshness.extra_tools",{description:"Number of tools present on the observed discovery surface but absent from canonical live state",labelNames:["surface"]}),dd=(0,p.v5)("mcp.discovery_freshness.symmetric_difference",{description:"Total symmetric difference between canonical live tools and the observed discovery surface",labelNames:["surface"]}),pd=new Map;function hd(e){const t=e.replace(/\\/g,"/");return t.endsWith("/mcps")?`${t}/`:t}async function md({ctx:e,mcpStateAccessor:t,projectDir:r,sanitizedServerFolder:n,readDiskCatalog:o,state:s}){let i=s;if(void 0===i)try{i=await t.getState(e)}catch(t){return void id.warn(e,"mcp_disk_state_read_failed",{error_type:t instanceof Error?t.name:typeof t})}const a=i.servers.find((e=>ed(e.serverIdentifier)===n));if(void 0===a)return;let l;try{l=await o(r,a.serverIdentifier)}catch(t){return void id.warn(e,"mcp_disk_catalog_read_failed",{error_type:t instanceof Error?t.name:typeof t})}if(!l.toolsDirExists)return;const c=a.tools.map((e=>e.toolName)).filter((e=>e.length>0)).sort(((e,t)=>e.localeCompare(t)));!function({ctx:e,serverIdentifier:t,canonicalToolNames:r,observedToolNames:n}){const o=new Set(n),s=new Set(r),i=r.filter((e=>!o.has(e))),a=n.filter((e=>!s.has(e))),l=0===i.length&&0===a.length?"match":"mismatch",c={surface:"disk"};ld.increment(e,1,{...c,outcome:l}),cd.histogram(e,i.length,c),ud.histogram(e,a.length,c),dd.histogram(e,i.length+a.length,c),"mismatch"===l&&id.warn(e,"mcp_disk_discovery_freshness_mismatch",{server_identifier:t,missing_tool_count:i.length,extra_tool_count:a.length})}({ctx:e,serverIdentifier:a.serverIdentifier,canonicalToolNames:c,observedToolNames:l.toolNames})}function fd(e,t,r,n=sd){if(void 0===r||(void 0===(o=r)||!hd(o).includes(ad)))return;var o;const s=function(e){const t=hd(e),r=t.indexOf(ad);if(-1===r)return;const n=t.slice(0,r),o=t.slice(r+6).split("/").filter(Boolean);return 0!==n.length?0===o.length?{projectDir:n,kind:"mcps_root"}:{projectDir:n,kind:"server",sanitizedServerFolder:o[0]}:void 0}(r);if(void 0===s)return;let i,a;const l="mcps_root"===s.kind;"mcps_root"===s.kind?(i=`${s.projectDir}\0__mcps_root__`,a=void 0):(i=`${s.projectDir}\0${s.sanitizedServerFolder}`,a=s.sanitizedServerFolder);const c=pd.get(i);void 0!==c&&clearTimeout(c);const u=e,d=setTimeout((()=>{pd.delete(i),(async()=>{if(l){const e=await t.getState(u);for(const r of e.servers){const o=ed(r.serverIdentifier);await md({ctx:u,mcpStateAccessor:t,projectDir:s.projectDir,sanitizedServerFolder:o,readDiskCatalog:n,state:e})}}else void 0!==a&&await md({ctx:u,mcpStateAccessor:t,projectDir:s.projectDir,sanitizedServerFolder:a,readDiskCatalog:n})})().catch((e=>{id.warn(u,"mcp_disk_discovery_freshness_schedule_failed",{error_type:e instanceof Error?e.name:typeof e})}))}),2e3);pd.set(i,d)}var gd=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t},vd=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});function yd(e){return e.replace(/\r\n/g,"\n").replace(/\r/g,"\n").split("\n")}function wd(e,t,r){const n=function(e,t){let r;for(const n of t)(0,m.ZU)({basePath:n,targetPath:e})&&(void 0===r||n.length>r.length)&&(r=n);return r}((0,a.resolve)(e,t),r);return void 0===n||n===e}const bd=(0,c.h)("local-exec/grep");function Sd(e){return e instanceof Error&&e.message.includes("ENOENT")&&e.message.includes("spawn")}function kd(e){try{return(0,s.existsSync)(e)}catch{return"check_failed"}}function Ed(e,t,r,n){return{...Cd(e),...n,cwd:t,cwdExists:kd(t),errorMessage:r.message,errorCode:r.code,errno:r.errno,syscall:r.syscall,errorPath:r.path}}function xd(e){return new Error(`Path does not exist: ${e}`)}function Cd(e){const t={rgPath:e,platform:process.platform,arch:process.arch,pid:process.pid,uptimeSeconds:Math.round(process.uptime()),execPath:process.execPath};try{t.rgPathExists=(0,s.existsSync)(e)}catch(e){t.rgPathExists=!1,t.rgPathExistsError=e instanceof Error?e.message:String(e)}try{const r=(0,s.lstatSync)(e);t.rgIsSymlink=r.isSymbolicLink(),r.isSymbolicLink()&&!t.rgPathExists&&(t.rgBrokenSymlink=!0)}catch{t.rgLstatFailed=!0}const r=(0,a.dirname)(e);try{t.parentDirExists=(0,s.existsSync)(r),t.parentDirExists&&(t.parentDirContents=(0,s.readdirSync)(r).slice(0,50))}catch(e){t.parentDirError=e instanceof Error?e.message:String(e)}const n=(0,a.dirname)(r);try{t.grandparentDirExists=(0,s.existsSync)(n),t.grandparentDirExists&&(t.grandparentDirContents=(0,s.readdirSync)(n).slice(0,50))}catch(e){t.grandparentDirError=e instanceof Error?e.message:String(e)}if(t.rgPathExists)try{const r=(0,s.statSync)(e);t.rgFileSize=r.size,t.rgFileMode=r.mode.toString(8),t.rgIsFile=r.isFile(),t.rgModifiedMs=r.mtimeMs}catch(e){t.rgStatError=e instanceof Error?e.message:String(e)}const o="node_modules.asar.unpacked";if(e.includes(o)){const r=e.split(o)[0];if(r){const e=r.concat("node_modules.asar");try{t.asarExists=(0,s.existsSync)(e)}catch{t.asarExists="check_failed"}const n=r.concat(o);try{if(t.asarUnpackedDirExists=(0,s.existsSync)(n),t.asarUnpackedDirExists){const e=(0,a.join)(n,"@vscode","ripgrep");t.ripgrepPkgDirExists=(0,s.existsSync)(e)}}catch{t.asarUnpackedDirExists="check_failed"}}}return t}class _d{ignoreService;grepProvider;workspacePath;static MAIN_TIMEOUT_MS=25e3;static INDEXED_GREP_TIMEOUT_MS=25e3;static INDEXED_GREP_CONTEXT_TIMEOUT_MS=_d.INDEXED_GREP_TIMEOUT_MS+100;static HARD_MAX_OUTPUT_LINES=1e4;static CLIENT_LIMIT_LINES=2e3;singleWorkspacePath;mcpStateAccessor;constructor(e,t,r,n){this.ignoreService=e,this.grepProvider=t,this.workspacePath=r;const o=Array.isArray(this.workspacePath)?this.workspacePath[0]:this.workspacePath;this.singleWorkspacePath=Array.isArray(this.workspacePath)&&this.workspacePath.length>1?void 0:o,this.mcpStateAccessor=n?.mcpStateAccessor}computeRelativeTarget(e,t){const r=(0,m.o1)(e,this.singleWorkspacePath);return r===t?".":(0,a.relative)(t,r)}async buildArgs(e,t,r){const n=[],o=await this.ignoreService.listCursorIgnoreFilesByRoot(e);for(const e of o)n.push("--cursor-ignore",e);if("content"===r)n.push("--line-number","--with-filename","--no-heading","-0"),void 0!==t.contextBefore&&n.push("--before-context",String(t.contextBefore)),void 0!==t.contextAfter&&n.push("--after-context",String(t.contextAfter)),n.push("--max-columns",String(1e3),"--max-columns-preview"),void 0!==t.context&&void 0===t.contextBefore&&void 0===t.contextAfter&&n.push("--before-context",String(t.context),"--after-context",String(t.context));else if("files_with_matches"===r)n.push("-l");else{if("count"!==r)throw new Error(`Unknown output mode: ${r}`);n.push("-c","--with-filename")}!0===t.caseInsensitive?n.push("--ignore-case"):n.push("--case-sensitive"),t.type&&n.push("--type",t.type),t.glob&&n.push("--iglob",t.glob),t.multiline&&n.push("--multiline","--multiline-dotall");const s=t.sort??"modified";if("none"!==s){const e=!0===t.sortAscending?"--sort":"--sortr";n.push(e,s)}return n.push("--no-config","--color=never"),n.push("--hidden"),n.push("--follow"),n.push("--regexp",t.pattern),n.push("--"),n.push(t.path?this.computeRelativeTarget(t.path,e):"."),n}async filterBlockedFiles(e,t){const r=[];for(const n of e){const e=await $a((0,m.o1)(n.file,t));null===e||await this.isPostRipgrepBlocked(e)||r.push(n)}return r}async isPostRipgrepBlocked(e){const[t,r]=await Promise.all([this.ignoreService.isCursorIgnored(e),this.ignoreService.isRepoBlocked(e)]);return t||r}async runFilesMode(e,t,r,n,o){const s={stack:[],error:void 0,hasError:!1};try{const i=gd(s,(0,c.VI)(e.withName("LocalGrepExecutor.runFilesMode")),!1),a=await this.buildArgs(t,r,"files_with_matches"),l=await this.executeRg(i.ctx,t,a,void 0,n,o);if((""!==l.stderr||2===l.exitCode)&&""===l.stdout.trim())throw new Error(l.stderr||`ripgrep exited with code ${l.exitCode}`);const{files:u,totalFiles:d,clientTruncated:p,ripgrepTruncated:h}=function(e,t,r){const n=e.trim(),o=""!==n?yd(n):[],s=o.length,i=o.slice(0,t),a=o.length>t;return{files:i,totalFiles:Tc(s),clientTruncated:a,ripgrepTruncated:s>=r}}(l.stdout,_d.CLIENT_LIMIT_LINES,_d.HARD_MAX_OUTPUT_LINES),f=[];for(const e of u){const r=await $a((0,m.o1)(e,t));null===r||await this.isPostRipgrepBlocked(r)||f.push(e)}const g=u.length-f.length,v=new dn.T7({files:f,totalFiles:Tc(d-g),clientTruncated:p,ripgrepTruncated:h});return new dn.vD({result:{case:"files",value:v}})}catch(e){s.error=e,s.hasError=!0}finally{vd(s)}}async runCountMode(e,t,r,n,o){const s={stack:[],error:void 0,hasError:!1};try{const i=gd(s,(0,c.VI)(e.withName("LocalGrepExecutor.runCountMode")),!1),a=await this.buildArgs(t,r,"count"),l=await this.executeRg(i.ctx,t,a,void 0,n,o);if((""!==l.stderr||2===l.exitCode)&&""===l.stdout.trim())throw new Error(l.stderr||`ripgrep exited with code ${l.exitCode}`);const{counts:u,totalFiles:d,totalMatches:p,clientTruncated:h,ripgrepTruncated:m}=function(e,t,r){const n=e.trim(),o=""!==n?yd(n):[],s=[];for(const e of o){if(""===e||void 0===e)continue;const t=e.lastIndexOf(":");if(t<=0)continue;const r=e.substring(t+1).trim(),n=parseInt(r,10);if(!Number.isFinite(n))continue;const o=e.substring(0,t);s.push({file:o,count:n})}const i=s.length,a=s.reduce(((e,t)=>e+t.count),0),l=s.slice(0,t),c=s.length>t;return{counts:l,totalFiles:Tc(i),totalMatches:Tc(a),clientTruncated:c,ripgrepTruncated:i>=r}}(l.stdout,_d.CLIENT_LIMIT_LINES,_d.HARD_MAX_OUTPUT_LINES),f=await this.filterBlockedFiles(u,t),g=f.reduce(((e,t)=>e+t.count),0),v=u.length-f.length,y=u.reduce(((e,t)=>e+t.count),0)-g,w=new dn.xA({counts:f.map((e=>new dn.sS({file:e.file,count:Tc(e.count)}))),totalFiles:Tc(d-v),totalMatches:Tc(p-y),clientTruncated:h,ripgrepTruncated:m});return new dn.vD({result:{case:"count",value:w}})}catch(e){s.error=e,s.hasError=!0}finally{vd(s)}}async runContentMode(e,t,r,n,o){const s={stack:[],error:void 0,hasError:!1};try{const i=gd(s,(0,c.VI)(e.withName("LocalGrepExecutor.runContentMode")),!1),a=await this.buildArgs(t,r,"content"),l=await this.executeRg(i.ctx,t,a,void 0,n,o);if((""!==l.stderr||2===l.exitCode)&&""===l.stdout.trim())throw new Error(l.stderr||`ripgrep exited with code ${l.exitCode}`);const{byFile:u,totalLines:d,totalMatchedLines:p,clientTruncated:h,ripgrepTruncated:m}=function(e,t,r,n){const o={stack:[],error:void 0,hasError:!1};try{gd(o,(0,c.VI)(n.withName("parseContentOutput")),!1);const s=""===e.trim()?[]:yd(e);s.length>0&&""===s[s.length-1]&&s.pop();const i=new Map,a=new Set;let l=0,u=0;for(const e of s){if(void 0===e)continue;if("--"===e)continue;const[r,n]=e.split("\0",2);if(void 0===r||void 0===n)continue;const o=/^(\d+)([:-])(.*)$/.exec(n);if(!o)continue;const s=o[1],c=o[2],d=o[3]??"",p=parseInt(s,10);if(!Number.isFinite(p))continue;const h="-"===c;if(!1===h&&l++,a.has(r)||a.add(r),u>=t)continue;const m=i.get(r)??{file:r,matches:[]};m.matches.push({lineNumber:p,content:d,isContextLine:h}),i.set(r,m),u++}const d=a.size;return{byFile:i,totalLines:Tc(s.length),totalMatchedLines:Tc(l),totalFiles:Tc(d),clientTruncated:u>=t,ripgrepTruncated:s.length>=r}}catch(e){o.error=e,o.hasError=!0}finally{vd(o)}}(l.stdout,_d.CLIENT_LIMIT_LINES,_d.HARD_MAX_OUTPUT_LINES,i.ctx),f=Array.from(u.values()),g=await this.filterBlockedFiles(f,t),v=f.filter((e=>!g.includes(e))),y=v.reduce(((e,t)=>e+t.matches.length),0),w=v.reduce(((e,t)=>e+t.matches.filter((e=>!e.isContextLine)).length),0),b=new dn.Zp({matches:g.map((e=>new dn.uI({file:e.file,matches:e.matches.map((e=>new dn.dx({lineNumber:e.lineNumber,content:e.content,isContextLine:e.isContextLine})))}))),totalLines:Tc(d-y),totalMatchedLines:Tc(p-w),clientTruncated:h,ripgrepTruncated:m});return new dn.vD({result:{case:"content",value:b}})}catch(e){s.error=e,s.hasError=!0}finally{vd(s)}}async executeIndexedGrepWithTimeout(e,t,r,n){if(void 0===this.grepProvider.executeIndexedGrep)return;const[o,s]=e.withTimeoutAndCancel(_d.INDEXED_GREP_CONTEXT_TIMEOUT_MS);try{return await(0,m.dY)(this.grepProvider.executeIndexedGrep(o,t,r),_d.INDEXED_GREP_TIMEOUT_MS,`Indexed grep timed out after ${_d.INDEXED_GREP_TIMEOUT_MS/1e3}s`)}catch(t){if(t instanceof m.MU)return void bd.warn(e,"indexed_grep.timeout_fallback",n);throw t}finally{s()}}async executeRg(e,t,r,n,o,s){const i=(0,c.VI)(e.withName("LocalGrepExecutor.executeRg")),a="utf8",l=8388608;return n=n??_d.HARD_MAX_OUTPUT_LINES,new Promise(((c,u)=>{let d=!1,p=!1;const h=()=>{p||(p=!0,i.span.end())};let m,f;try{const e=o;m=(0,Bn.spawnInSandbox)((0,Bn.Ko)(),r,{cwd:t},e),0}catch(r){if(h(),Sd(r)){const n=r,o=(0,Bn.Ko)();if(bd.error(e,"rg_diagnostics.spawn_throw",void 0,Ed(o,t,n,s)),!1===kd(t))return u(xd(t))}return u(r)}const g=[],v=[];let y=0,w=0,b=0,S=!1;f=setTimeout((()=>{if(!d)try{h(),u(new Error(`Timed out after ${_d.MAIN_TIMEOUT_MS/1e3}s`)),m.kill()}catch{}}),_d.MAIN_TIMEOUT_MS),m.stdout?.on("data",(e=>{if(y+=e.length,void 0!==n&&!0!==S){let t=-1,r=0;for(let o=0;o<e.length;o++)if(10===e[o]&&(r++,b+r>=n)){t=o+1,S=!0;try{m.kill()}catch{}break}b+=r;const o=t>=0?e.subarray(0,t):e;y<=l&&g.push(o)}else!0!==S&&y<=l&&g.push(e)})),m.stderr?.on("data",(e=>{w+=e.length,w<=l&&v.push(e)})),m.on("error",(r=>{if(clearTimeout(f),h(),Sd(r)){const n=(0,Bn.Ko)(),o=r;if(bd.error(e,"rg_diagnostics.spawn_enoent",void 0,Ed(n,t,o,s)),!1===kd(t))return void u(xd(t))}u(r)})),m.on("close",(e=>{d=!0,clearTimeout(f);const t=Buffer.concat(g).toString(a),r=Buffer.concat(v).toString(a);h(),c({stdout:t,stderr:r,exitCode:e??0})}))}))}async execute(e,t,r){const n={stack:[],error:void 0,hasError:!1};try{const s=gd(n,(0,c.VI)(e.withName("LocalGrepExecutor.execute")),!1),i=Array.isArray(this.workspacePath)?this.workspacePath:[this.workspacePath??process.cwd()],l=t.outputMode??"content",u={toolCallId:t.toolCallId,execId:r?.execId,outputMode:l,targetPath:t.path,workspacePaths:i},d=zn(t.sandboxPolicy);try{const r=this.grepProvider.getWorktreeGuardInfo?.(i);if((0,m.fl)({targetPath:t.path,workspacePaths:i,mainWorktreePath:r?.mainWorktreePath}))return new dn.Ud({result:{case:"error",value:new dn.ts({error:m.PS})}});if(t.path){const r=await $a((0,m.o1)(t.path,this.singleWorkspacePath));if(null===r)return new dn.Ud({result:{case:"error",value:new dn.ts({error:(o=t.path,`Path '${o}' could not be verified while resolving symlinks. This can happen when access is denied or the path contains a symlink loop.`)})}});if(await this.ignoreService.isCursorIgnored(r))return new dn.Ud({result:{case:"error",value:new dn.ts({error:`Path '${t.path}' is filtered out by .cursorignore`})}});void 0!==this.mcpStateAccessor&&fd(e,this.mcpStateAccessor,r)}let n={};const c=await this.executeIndexedGrepWithTimeout(s.ctx,i,t,u);if(void 0!==c)n=c;else for(const e of i){if(!1===kd(e))return new dn.Ud({result:{case:"error",value:new dn.ts({error:`Path does not exist: ${e}`})}});let r;if("content"===l)r=await this.runContentMode(s.ctx,e,t,d,u);else if("files_with_matches"===l)r=await this.runFilesMode(s.ctx,e,t,d,u);else{if("count"!==l)throw new Error(`Unknown output mode: ${l}`);r=await this.runCountMode(s.ctx,e,t,d,u)}n[e]=r}const p=function(e,t){if(t.length<=1)return e;const r=[...new Set(t.map((e=>(0,a.resolve)(e))))],n={};for(const[t,o]of Object.entries(e)){const e=(0,a.resolve)(t),s=t=>wd(e,t,r),i=o.result;switch(i.case){case"content":{const e=i.value,r=[];let o=0,a=0;for(const t of e.matches)s(t.file)?r.push(t):(o+=t.matches.length,a+=t.matches.filter((e=>!e.isContextLine)).length);n[t]=new dn.vD({result:{case:"content",value:new dn.Zp({...e,matches:r,totalLines:Math.max(0,e.totalLines-o),totalMatchedLines:Math.max(0,e.totalMatchedLines-a)})}});break}case"files":{const e=i.value,r=e.files.filter((e=>s(e)));n[t]=new dn.vD({result:{case:"files",value:new dn.T7({...e,files:r,totalFiles:Math.max(0,e.totalFiles-(e.files.length-r.length))})}});break}case"count":{const e=i.value,r=[];let o=0;for(const t of e.counts)s(t.file)?r.push(t):o+=t.count;n[t]=new dn.vD({result:{case:"count",value:new dn.xA({...e,counts:r,totalFiles:Math.max(0,e.totalFiles-(e.counts.length-r.length)),totalMatches:Math.max(0,e.totalMatches-o)})}});break}default:n[t]=o}}return n}(n,i),h=new dn._0({pattern:t.pattern,path:t.path,outputMode:l,workspaceResults:p});return new dn.Ud({result:{case:"success",value:h}})}catch(e){if(t.path){const e=(0,m.o1)(t.path,this.singleWorkspacePath);try{await(0,En.stat)(e)}catch(t){return new dn.Ud({result:{case:"error",value:new dn.ts({error:`Path does not exist: ${e}`})}})}}return new dn.Ud({result:{case:"error",value:new dn.ts({error:e instanceof Error?e.message:String(e)})}})}}catch(e){n.error=e,n.hasError=!0}finally{vd(n)}var o}}var Pd=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t},Rd=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});class Td{permissionsService;ignoreService;workspacePath;constructor(e,t,r){this.permissionsService=e,this.ignoreService=t,this.workspacePath=r}async execute(e,t){const r={stack:[],error:void 0,hasError:!1};try{Pd(r,(0,c.VI)(e.withName("LocalLsExecutor.execute")),!1).ctx;const n=(0,m.o1)(t.path,this.workspacePath);try{let r;try{r=await(0,En.stat)(n)}catch(e){return"ENOENT"===e.code?(0,m.jq)(n)?new pn.fv({result:{case:"error",value:new pn.uj({path:n,error:"No active terminals."})}}):new pn.fv({result:{case:"error",value:new pn.uj({path:n,error:`Path does not exist: ${n}`})}}):new pn.fv({result:{case:"error",value:new pn.uj({path:n,error:e.message})}})}if(!r.isDirectory())return new pn.fv({result:{case:"error",value:new pn.uj({path:n,error:`Path is not a directory: ${n}`})}});const o=zn(t.sandboxPolicy),s=t.timeoutMs??5e3,i=e.withTimeout(s),{tree:a,didTimeout:l}=await this.getDirectoryTree(i,n,t.ignore,o);return l?new pn.fv({result:{case:"timeout",value:new pn.ze({directoryTreeRoot:a})}}):new pn.fv({result:{case:"success",value:new pn.PC({directoryTreeRoot:a})}})}catch(e){return new pn.fv({result:{case:"error",value:new pn.uj({path:n,error:e instanceof Error?e.message:"Unknown error occurred"})}})}}catch(e){r.error=e,r.hasError=!0}finally{Rd(r)}}async getDirectoryTree(e,t,r,n){const o={stack:[],error:void 0,hasError:!1};try{return Pd(o,(0,c.VI)(e.withName("LocalLsExecutor.getDirectoryTree")),!1),await this.buildTreeFromRipgrepStream(e,t,r,n,2500)}catch(e){o.error=e,o.hasError=!0}finally{Rd(o)}}async buildTreeFromRipgrepStream(e,t,r,n,o){const s={stack:[],error:void 0,hasError:!1};try{Pd(s,(0,c.VI)(e.withName("LocalLsExecutor.buildTreeFromRipgrepStream")),!1);const i=(0,a.resolve)(t),l=new pn.vq({absPath:i,childrenDirs:[],childrenFiles:[],childrenWereProcessed:!0,fullSubtreeExtensionCounts:{}}),u=new Map;u.set(i,l);const d={charactersUsed:i.length,budgetExceeded:!1},[p,h]=await Promise.all([this.ignoreService.listCursorIgnoreFilesByRoot(t),this.ignoreService.getRepoBlockExcludeGlobs(t)]),m=[...r,...h],{lines:f,didTimeout:g}=Ra(e,{root:t,excludeGlobs:m,caseSensitive:!0,cursorIgnoreFiles:p,sandboxPolicy:n,source:"ls"});for await(const e of f){if(!e)continue;const r=(0,a.resolve)(t,e),n=await $a(r);null===n||await this.ignoreService.isRepoBlocked(n)||this.addPathToTree(r,i,u,d,o)}return this.sortTreeChildren(l),{tree:l,didTimeout:await g}}catch(e){s.error=e,s.hasError=!0}finally{Rd(s)}}addPathToTree(e,t,r,n,o){const s=(0,a.basename)(e),i=(0,a.dirname)(e);this.ensureDirectoryPath(i,t,r,n.budgetExceeded);const l=r.get(i);if(!l)return;const c=s.length;if(!n.budgetExceeded&&n.charactersUsed+c<=o){const e=new pn.ur({name:s});l.childrenFiles.push(e),n.charactersUsed+=c}else{if(!n.budgetExceeded){n.budgetExceeded=!0;let e=i;for(;e.startsWith(t);){const t=r.get(e);t&&(t.childrenWereProcessed=!1);const n=(0,a.dirname)(e);if(n===e)break;e=n}}const o=(0,a.extname)(e);let s=i;for(;s.startsWith(t);){const e=r.get(s);e&&(e.fullSubtreeExtensionCounts[o]??=0,e.fullSubtreeExtensionCounts[o]=Tc(e.fullSubtreeExtensionCounts[o]+1),e.numFiles??=0,e.numFiles=Tc(e.numFiles+1));const t=(0,a.dirname)(s);if(t===s)break;s=t}}}ensureDirectoryPath(e,t,r,n){if(r.has(e)||e===t)return;const o=(0,a.dirname)(e);o!==e&&o.startsWith(t)&&this.ensureDirectoryPath(o,t,r,n);const s=new pn.vq({absPath:e,childrenDirs:[],childrenFiles:[],childrenWereProcessed:!n,fullSubtreeExtensionCounts:{}});r.set(e,s);const i=r.get(o);i&&i.childrenDirs.push(s)}sortTreeChildren(e){e.childrenDirs.sort(((e,t)=>(0,a.basename)(e.absPath).localeCompare((0,a.basename)(t.absPath)))),e.childrenFiles.sort(((e,t)=>e.name.localeCompare(t.name)));for(const t of e.childrenDirs)this.sortTreeChildren(t)}}class Id{shellStdinWriter;constructor(e){this.shellStdinWriter=e}async execute(e,t){const r=t.shellId;try{await this.shellStdinWriter(r,t.chars)}catch(e){return new Ke.nt({result:{case:"error",value:new Ke.Gv({error:`Failed to write to shell ${r} stdin: ${e instanceof Error?e.message:"Unknown error"}`})}})}return new Ke.nt({result:{case:"success",value:new Ke.tR({shellId:r,terminalFileLengthBeforeInputWritten:0})}})}}var Ad=r("../../node_modules/.pnpm/lru-cache@11.2.5/node_modules/lru-cache/dist/esm/index.js");function Od(e,t){const r=new Ad.q({max:t?.max??10,ttl:t?.ttl});return{async execute(t,n,o){if(!o?.execId)return e.execute(t,n,o);const s=o.execId,i=r.get(s);if(void 0!==i)return i;const a=await e.execute(t,n,o);return r.set(s,a),a}}}var Dd=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});class Md{workspacePath;diagnosticsProvider;constructor(e,t){this.workspacePath=e,this.diagnosticsProvider=t}async execute(e,t){const r={stack:[],error:void 0,hasError:!1};try{let n;!function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0})}(r,(0,c.VI)(e.withName("LocalDiagnosticsExecutor.execute")),!1),[e,n]=e.withTimeoutAndCancel(1e4);try{const r=(0,m.o1)(t.path,this.workspacePath);try{const e=await(0,En.stat)(r);if(!e.isFile()&&!e.isDirectory())return new Nl.Ek({result:{case:"fileNotFound",value:new Nl.Mu({path:t.path})}})}catch(e){if("ENOENT"===e.code)return new Nl.Ek({result:{case:"fileNotFound",value:new Nl.Mu({path:t.path})}});if("EACCES"===e.code)return new Nl.Ek({result:{case:"permissionDenied",value:new Nl.RP({path:t.path})}});throw e}const n=(0,m.o1)(r,this.workspacePath),o=new m.qA(n);await this.diagnosticsProvider.open(e,o);const s=(await this.diagnosticsProvider.getDiagnostics(e,o)).map((e=>this.convertDiagnostic(e)));return new Nl.Ek({result:{case:"success",value:new Nl.a1({path:t.path,diagnostics:s,totalDiagnostics:s.length})}})}catch(r){return e.canceled?new Nl.Ek({result:{case:"error",value:new Nl.Ho({path:t.path,error:"Request timed out after 10 seconds"})}}):new Nl.Ek({result:{case:"error",value:new Nl.Ho({path:t.path,error:r instanceof Error?r.message:String(r)})}})}finally{n()}}catch(e){r.error=e,r.hasError=!0}finally{Dd(r)}}convertDiagnostic(e){return new Nl.oQ({severity:this.convertSeverity(e.severity),range:e.range?new $l.Q6({start:new $l.yX({line:e.range.start.line,column:e.range.start.character}),end:new $l.yX({line:e.range.end.line,column:e.range.end.character})}):void 0,message:e.message,source:e.source,code:e.code?String(e.code):void 0})}convertSeverity(e){switch(e){case 1:return Nl.h_.ERROR;case 2:return Nl.h_.WARNING;case 3:return Nl.h_.INFORMATION;case 4:return Nl.h_.HINT;default:return Nl.h_.UNSPECIFIED}}}Error,r("../../node_modules/.pnpm/which@4.0.0/node_modules/which/lib/index.js");const jd="win32"===process.platform;function Nd(e,t){return jd&&(e=e.toLowerCase(),t=t.toLowerCase()),e===t||(e.charAt(e.length-1)!==a.sep&&(e+=a.sep),t.startsWith(e))}process.platform;var $d=function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}l((n=n.apply(e,t||[])).next())}))};function Fd(e){return $d(this,void 0,void 0,(function*(){const{repoRoot:t,filePaths:r,getContent:n}=e,o=new Map;if(0===r.length)return o;const s=yield function(e,t){return $d(this,void 0,void 0,(function*(){const r=new Map;if(0===t.length)return r;try{const n=yield new Promise(((r,n)=>{const o=(0,Os.spawn)("git",["check-attr","linguist-generated","--stdin"],{cwd:e});let s="";o.stdout.on("data",(e=>{s+=e.toString()})),o.stdin.write(`${t.join("\n")}\n`),o.stdin.end(),o.on("close",(e=>{r(s)})),o.on("error",(e=>{n(e)}))}));for(const e of n.trim().split("\n")){const t=e.match(/^(.+): linguist-generated: (.+)$/);if(t){const e=t[1],n=t[2];"true"===n||"set"===n?r.set(e,!0):"false"!==n&&"unset"!==n||r.set(e,!1)}}}catch(e){}return r}))}(t,r);return yield Promise.all(r.map((e=>$d(this,void 0,void 0,(function*(){const t=s.get(e);if(!0!==t)if(!1!==t)if(function(e){return new Ld(e).isGeneratedByPath()}(e))o.set(e,{isGenerated:!0,source:"path-heuristic"});else{if(n){const t=yield n(e);if(void 0!==t&&function(e,t){return new Ld(e,(()=>t)).isGeneratedByContent()}(e,t))return void o.set(e,{isGenerated:!0,source:"content-heuristic"})}o.set(e,{isGenerated:!1,source:"none"})}else o.set(e,{isGenerated:!1,source:"gitattributes"});else o.set(e,{isGenerated:!0,source:"gitattributes"})}))))),o}))}class Ld{constructor(e,t){this.name=e,this.extname=a.extname(e).toLowerCase(),this.getContent=t}get lines(){var e;if(void 0===this.cachedLines){const t=null===(e=this.getContent)||void 0===e?void 0:e.call(this);this.cachedLines=t?t.split("\n"):[]}return this.cachedLines}get data(){var e;return null===(e=this.getContent)||void 0===e?void 0:e.call(this)}isGeneratedByPath(){return this.xcodeFile()||this.intellijFile()||this.cocoapods()||this.carthageBuild()||this.generatedGraphqlRelay()||this.generatedNetDesignerFile()||this.generatedNetSpecflowFeatureFile()||this.composerLock()||this.cargoLock()||this.cargoOrig()||this.denoLock()||this.flakeLock()||this.bazelLock()||this.nodeModules()||this.goVendor()||this.goLock()||this.packageResolved()||this.poetryLock()||this.pdmLock()||this.uvLock()||this.pixiLock()||this.esyLock()||this.npmShrinkwrapOrPackageLock()||this.pnpmLock()||this.bunLock()||this.terraformLock()||this.generatedYarnPlugnplay()||this.godeps()||this.generatedByZephir()||this.htmlcov()||this.gradleWrapper()||this.mavenWrapper()||this.pipenvLock()||this.generatedPascalTlb()||this.generatedSqlxQuery()||this.sourceMapByName()}isGeneratedByContent(){return!!this.getContent&&(this.minifiedFiles()||this.hasSourceMap()||this.sourceMap()||this.compiledCoffeescript()||this.generatedParser()||this.generatedNetDocfile()||this.generatedPostscript()||this.compiledCythonFile()||this.generatedGo()||this.generatedProtocolBufferFromGo()||this.generatedProtocolBuffer()||this.generatedJavascriptProtocolBuffer()||this.generatedTypescriptProtocolBuffer()||this.generatedApacheThrift()||this.generatedJniHeader()||this.vcrCassette()||this.generatedAntlr()||this.generatedModule()||this.generatedUnity3dMeta()||this.generatedRacc()||this.generatedJflex()||this.generatedGrammarkit()||this.generatedRoxygen2()||this.generatedHtml()||this.generatedJison()||this.generatedGrpcCpp()||this.generatedDart()||this.generatedPerlPpportHeader()||this.generatedGamemakerstudio()||this.generatedGimp()||this.generatedVisualstudio6()||this.generatedHaxe()||this.generatedJooq()||this.generatedSorbetRbi()||this.generatedMysqlViewDefinitionFormat())}xcodeFile(){return[".nib",".xcworkspacedata",".xcuserstate"].includes(this.extname)}intellijFile(){return/(?:^|\/)\.idea\//.test(this.name)}cocoapods(){return/(^Pods|\/Pods)\//.test(this.name)}carthageBuild(){return/(^|\/)Carthage\/Build\//.test(this.name)}generatedGraphqlRelay(){return/__generated__\//.test(this.name)}generatedNetDesignerFile(){return/\.designer\.(cs|vb)$/i.test(this.name)}generatedNetSpecflowFeatureFile(){return/\.feature\.cs$/i.test(this.name)}composerLock(){return/composer\.lock/.test(this.name)}cargoLock(){return/Cargo\.lock/.test(this.name)}cargoOrig(){return/Cargo\.toml\.orig/.test(this.name)}denoLock(){return/deno\.lock/.test(this.name)}flakeLock(){return/(^|\/)flake\.lock$/.test(this.name)}bazelLock(){return/(^|\/)MODULE\.bazel\.lock$/.test(this.name)}nodeModules(){return/node_modules\//.test(this.name)}goVendor(){return/vendor\/((?!-)[-0-9A-Za-z]+(?<!-)\.)+(com|edu|gov|in|me|net|org|fm|io)/.test(this.name)}goLock(){return/(Gopkg|glide)\.lock/.test(this.name)}packageResolved(){return/Package\.resolved/.test(this.name)}poetryLock(){return/poetry\.lock/.test(this.name)}pdmLock(){return/pdm\.lock/.test(this.name)}uvLock(){return/uv\.lock/.test(this.name)}pixiLock(){return/pixi\.lock/.test(this.name)}esyLock(){return/(^|\/)(\w+\.)?esy\.lock$/.test(this.name)}npmShrinkwrapOrPackageLock(){return/npm-shrinkwrap\.json/.test(this.name)||/package-lock\.json/.test(this.name)}pnpmLock(){return/pnpm-lock\.yaml/.test(this.name)}bunLock(){return/(?:^|\/)bun\.lockb?$/.test(this.name)}terraformLock(){return/(?:^|\/)\.terraform\.lock\.hcl$/.test(this.name)}generatedYarnPlugnplay(){return/(^|\/)\.pnp\..*$/.test(this.name)}godeps(){return/Godeps\//.test(this.name)}generatedByZephir(){return/\.zep\.(c|h|php)$/.test(this.name)}htmlcov(){return/(?:^|\/)htmlcov\//.test(this.name)}gradleWrapper(){return/(?:^|\/)gradlew(?:\.bat)?$/i.test(this.name)}mavenWrapper(){return/(?:^|\/)mvnw(?:\.cmd)?$/i.test(this.name)}pipenvLock(){return/Pipfile\.lock/.test(this.name)}generatedPascalTlb(){return/_tlb\.pas$/i.test(this.name)}generatedSqlxQuery(){return/(?:^|\/)\.sqlx\/query-[a-f\d]{64}\.json$/.test(this.name)}sourceMapByName(){return/\.(css|js)\.map$/i.test(this.name)}maybeMinified(){return[".js",".css"].includes(this.extname)}minifiedFiles(){return!(!this.maybeMinified()||0===this.lines.length)&&this.lines.reduce(((e,t)=>e+t.length),0)/this.lines.length>110}hasSourceMap(){return!!this.maybeMinified()&&this.lines.slice(-2).some((e=>/^\/[*/][#@] source(?:Mapping)?URL|sourceURL=/.test(e)))}sourceMap(){if(".map"!==this.extname)return!1;if(/\.(css|js)\.map$/i.test(this.name))return!0;const e=this.lines[0]||"";return/^{"version":\d+,/.test(e)||/^\/\*\* Begin line maps\. \*\*\/{/.test(e)}compiledCoffeescript(){if(".js"!==this.extname)return!1;const e=this.lines[0]||"";if(/^\/\/ Generated by /.test(e))return!0;if("(function() {"===e&&"}).call(this);"===(this.lines[this.lines.length-2]||"")&&""===(this.lines[this.lines.length-1]||"")){let e=0;for(const t of this.lines)if(/var /.test(t)){const r=t.match(/_fn|_i|_len|_ref|_results/g);e+=1*((null==r?void 0:r.length)||0);const n=t.match(/__bind|__extends|__hasProp|__indexOf|__slice/g);e+=3*((null==n?void 0:n.length)||0)}return e>=3}return!1}generatedNetDocfile(){return".xml"===this.extname&&!(this.lines.length<=3)&&(this.lines[1]||"").includes("<doc>")&&(this.lines[2]||"").includes("<assembly>")&&(this.lines[this.lines.length-2]||"").includes("</doc>")}generatedParser(){if(".js"!==this.extname)return!1;const e=this.lines.slice(0,5).join("");return/^(?:[^/]|\/[^*])*\/\*(?:[^*]|\*[^/])*Generated by PEG\.js/.test(e)}generatedPostscript(){if(![".ps",".eps",".pfa"].includes(this.extname))return!1;const e=this.data;if(!e)return!1;if(/^\s*(?:currentfile eexec\s+|\/sfnts\s+\[\s<)/.test(e))return!0;const t=this.lines.slice(0,10).find((e=>/^%%Creator: /.test(e)));return!!t&&(!(!/[0-9]|draw|mpage|ImageMagick|inkscape|MATLAB/.test(t)&&!/PCBNEW|pnmtops|\(Unknown\)|Serif Affinity|Filterimage -tops/.test(t))||!!t.includes("EAGLE")&&this.lines.slice(0,5).some((e=>/^%%Title: EAGLE Drawing /.test(e))))}generatedGo(){return".go"===this.extname&&!(this.lines.length<=1)&&this.lines.slice(0,40).some((e=>/^\/\/ Code generated .*/.test(e)))}generatedProtocolBufferFromGo(){return".proto"===this.extname&&!(this.lines.length<=1)&&this.lines.slice(0,20).some((e=>e.includes("This file was autogenerated by go-to-protobuf")))}generatedProtocolBuffer(){return!![".py",".java",".h",".cc",".cpp",".m",".rb",".php"].includes(this.extname)&&!(this.lines.length<=1)&&this.lines.slice(0,3).some((e=>e.includes("Generated by the protocol buffer compiler. DO NOT EDIT!")))}generatedJavascriptProtocolBuffer(){return".js"===this.extname&&!(this.lines.length<=6)&&(this.lines[5]||"").includes("GENERATED CODE -- DO NOT EDIT!")}generatedTypescriptProtocolBuffer(){return".ts"===this.extname&&!(this.lines.length<=4)&&(this.lines[0]||"").includes("Code generated by protoc-gen-ts_proto. DO NOT EDIT.")}generatedApacheThrift(){return!![".rb",".py",".go",".js",".m",".java",".h",".cc",".cpp",".php"].includes(this.extname)&&this.lines.slice(0,6).some((e=>e.includes("Autogenerated by Thrift Compiler")))}generatedJniHeader(){return".h"===this.extname&&!(this.lines.length<=2)&&(this.lines[0]||"").includes("/* DO NOT EDIT THIS FILE - it is machine generated */")&&(this.lines[1]||"").includes("#include <jni.h>")}vcrCassette(){return".yml"===this.extname&&!(this.lines.length<=2)&&(this.lines[this.lines.length-2]||"").includes("recorded_with: VCR")}generatedAntlr(){return".g"===this.extname&&!(this.lines.length<=2)&&(this.lines[1]||"").includes("generated by Xtest")}compiledCythonFile(){return!![".c",".cpp"].includes(this.extname)&&!(this.lines.length<=1)&&(this.lines[0]||"").includes("Generated by Cython")}generatedModule(){if(".mod"!==this.extname)return!1;if(this.lines.length<=1)return!1;const e=this.lines[0]||"";return e.includes("PCBNEW-LibModule-V")||e.includes("GFORTRAN module version '")}generatedUnity3dMeta(){return".meta"===this.extname&&!(this.lines.length<=1)&&(this.lines[0]||"").includes("fileFormatVersion: ")}generatedRacc(){return".rb"===this.extname&&!(this.lines.length<=2)&&(this.lines[2]||"").startsWith("# This file is automatically generated by Racc")}generatedJflex(){return".java"===this.extname&&!(this.lines.length<=1)&&(this.lines[0]||"").startsWith("/* The following code was generated by JFlex ")}generatedGrammarkit(){return".java"===this.extname&&!(this.lines.length<=1)&&(this.lines[0]||"").startsWith("// This is a generated file. Not intended for manual editing.")}generatedRoxygen2(){return".rd"===this.extname&&!(this.lines.length<=1)&&(this.lines[0]||"").includes("% Generated by roxygen2: do not edit by hand")}generatedHtml(){var e;if(![".html",".htm",".xhtml"].includes(this.extname))return!1;if(this.lines.length<=1)return!1;if(this.lines.slice(0,2).some((e=>/<!-- Generated by pkgdown: do not edit by hand -->/.test(e))))return!0;if(this.lines.length>2&&(this.lines[2]||"").startsWith("\x3c!-- This is an automatically generated file."))return!0;if(this.lines.slice(0,31).some((e=>/<!--\s+Generated by Doxygen\s+[.0-9]+\s*-->/i.test(e))))return!0;const t=this.lines.slice(0,31).join(" ").match(/<meta(\s+[^>]+)>/gi);if(!t)return!1;for(const r of t){const t=this.extractHtmlMeta(r);if("generator"===(null===(e=t.name)||void 0===e?void 0:e.toLowerCase())&&(t.content||t.value)){const e=t.content||t.value||"";if(/^(org\s+mode|j?latex2html|groff|makeinfo|texi2html|ronn)\b/i.test(e))return!0}}return!1}extractHtmlMeta(e){const t={},r=e.matchAll(/(?<=^|\s)(name|content|value)\s*=\s*("[^"]+"|'[^']+'|[^\s"']+)/gi);for(const e of r){const r=e[1].toLowerCase();let n=e[2];(n.startsWith('"')&&n.endsWith('"')||n.startsWith("'")&&n.endsWith("'"))&&(n=n.slice(1,-1)),t[r]=n}return t}generatedJison(){if(".js"!==this.extname)return!1;if(this.lines.length<=1)return!1;const e=this.lines[0]||"";return e.startsWith("/* parser generated by jison ")||e.startsWith("/* generated by jison-lex ")}generatedGrpcCpp(){return!![".cpp",".hpp",".h",".cc"].includes(this.extname)&&!(this.lines.length<=1)&&(this.lines[0]||"").startsWith("// Generated by the gRPC")}generatedDart(){return".dart"===this.extname&&!(this.lines.length<=1)&&this.lines.slice(0,3).some((e=>/generated code\W{2,3}do not modify/i.test(e)))}generatedPerlPpportHeader(){return!!/ppport\.h$/.test(this.name)&&!(this.lines.length<=10)&&(this.lines[8]||"").includes("Automatically created by Devel::PPPort")}generatedGamemakerstudio(){if(![".yy",".yyp"].includes(this.extname))return!1;if(this.lines.length<=3)return!1;const e=this.lines.slice(0,3).join("");return/^\s*[{[]/.test(e)||/^\d\.\d\.\d.+\|\{/.test(this.lines[0]||"")}generatedGimp(){if(![".c",".h"].includes(this.extname))return!1;if(0===this.lines.length)return!1;const e=this.lines[0]||"";return/^\/\* GIMP [a-zA-Z0-9- ]+ C-Source image dump \(.+?\.c\) \*\//.test(e)||/^\/\* {2}GIMP header image file format \([a-zA-Z0-9- ]+\): .+?\.h {2}\*\//.test(e)}generatedVisualstudio6(){return".dsp"===this.extname&&this.lines.slice(0,3).some((e=>e.includes("# Microsoft Developer Studio Generated Build File")))}generatedHaxe(){return!![".js",".py",".lua",".cpp",".h",".java",".cs",".php"].includes(this.extname)&&this.lines.slice(0,3).some((e=>e.includes("Generated by Haxe")))}generatedJooq(){return".java"===this.extname&&this.lines.slice(0,2).some((e=>e.includes("This file is generated by jOOQ.")))}generatedSorbetRbi(){return".rbi"===this.extname&&!(this.lines.length<5)&&/^# typed:/.test(this.lines[0]||"")&&(this.lines[2]||"").includes("DO NOT EDIT MANUALLY")&&/^# Please (run|instead update this file by running) `bin\/tapioca/.test(this.lines[4]||"")}generatedMysqlViewDefinitionFormat(){return".frm"===this.extname&&(this.lines[0]||"").includes("TYPE=VIEW")}}r("node:events"),Error;const Ud=/(a|i|w|c|o|1|2)\/.*(?=["']? ["']?(b|i|w|c|o|1|2)\/)|(b|i|w|c|o|1|2)\/.*$/g,Bd=/^(a|b|i|w|c|o|1|2)\//,Hd=e=>{const t=e?.match(Ud);return t?.map((e=>e.replace(Bd,"").replace(/("|')$/,"")))},Wd=/^\\?['"]|\\?['"]$/g,zd=e=>{let t=qd(e,"-+").trim();return t=Vd(t),t.replace(Wd,"").replace(Bd,"")},qd=(e,t)=>{if(e=Kd(e),!t&&String.prototype.trimLeft)return e.trimLeft();const r=Jd(t);return e.replace(new RegExp(`^${r}+`),"")},Gd=/\t.*|\d{4}-\d\d-\d\d\s\d\d:\d\d:\d\d(.\d+)?\s(\+|-)\d\d\d\d/,Vd=e=>{const t=Gd.exec(e);return t&&(e=e.substring(0,t.index).trim()),e},Jd=e=>null==e?"\\s":e instanceof RegExp?e.source:`[${Kd(e).replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1")}]`,Kd=e=>`${e??""}`,Yd=(0,c.h)("local-git-diff");async function Zd(e,t,r={}){const n=await new Promise(((n,o)=>{const s=(0,Os.spawn)("git",t,{cwd:e});let i="",a="";s.stdout.on("data",(e=>{i+=e.toString()})),s.stderr.on("data",(e=>{a+=e.toString()})),s.on("close",(e=>{0===e||!0===r.ignoreErrors?n(i):o(new Error(`Git command failed with code ${e}: ${a}`))})),s.on("error",(e=>{!0===r.ignoreErrors?n(i):o(e)}))}));return!0===r.shouldNotTrimOutput?n:n.trim()}function Xd(e){const t=(e=>{if(!e)return[];if("string"!=typeof e||e.match(/^\s+$/))return[];const t=e.split("\n");if(0===t.length)return[];const r=[];let n=null,o=null,s=0,i=0,a=null;const l=e=>{const[t,o]=Hd(e)??[];n={chunks:[],deletions:0,additions:0,from:t,to:o},r.push(n)},c=()=>{n&&!n.chunks.length||l()},u=e=>+(e||1),d=e=>{if(!o)return;const[t]=o.changes.slice(-1);o.changes.push({type:t.type,[t.type]:!0,ln1:t.ln1,ln2:t.ln2,ln:t.ln,content:e})},p=[[/^diff\s/,l],[/^new file mode (\d+)$/,(e,t)=>{c(),n.new=!0,n.newMode=t[1],n.from="/dev/null"}],[/^deleted file mode (\d+)$/,(e,t)=>{c(),n.deleted=!0,n.oldMode=t[1],n.to="/dev/null"}],[/^old mode (\d+)$/,(e,t)=>{c(),n.oldMode=t[1]}],[/^new mode (\d+)$/,(e,t)=>{c(),n.newMode=t[1]}],[/^index\s[\da-zA-Z]+\.\.[\da-zA-Z]+(\s(\d+))?$/,(e,t)=>{c(),n.index=e.split(" ").slice(1),t[1]&&(n.oldMode=n.newMode=t[1].trim())}],[/^---\s/,e=>{c(),n.from=zd(e)}],[/^\+\+\+\s/,e=>{c(),n.to=zd(e)}],[/^@@\s+-(\d+),?(\d+)?\s+\+(\d+),?(\d+)?\s@@/,(e,t)=>{n||l(e);const[r,c,d,p]=t.slice(1);s=+r,i=+d,o={content:e,changes:[],oldStart:+r,oldLines:u(c),newStart:+d,newLines:u(p)},a={oldLines:u(c),newLines:u(p)},n.chunks.push(o)}],[/^\$/,d]],h=[[/^\$/,d],[/^-/,e=>{o&&(o.changes.push({type:"del",del:!0,ln:s++,content:e}),n.deletions++,a.oldLines--)}],[/^\+/,e=>{o&&(o.changes.push({type:"add",add:!0,ln:i++,content:e}),n.additions++,a.newLines--)}],[/^\s+/,e=>{o?.changes.push({type:"normal",normal:!0,ln1:s++,ln2:i++,content:e}),a.oldLines--,a.newLines--}]],m=e=>{a?(e=>{for(const[t,r]of h){const n=e.match(t);if(n){r(e,n);break}}0===a.oldLines&&0===a.newLines&&(a=null)})(e):(e=>{for(const[t,r]of p){const n=e.match(t);if(n){r(e,n);break}}})(e)};for(const e of t)m(e);return r})(e);return new _t.o$({diffs:t.map((e=>function(e){const t=new _t.QP({from:e.from,to:e.to,chunks:e.chunks.map((e=>new _t.Ei({content:e.content,lines:e.changes.map((e=>e.content)),oldStart:e.oldStart,oldLines:e.oldLines,newStart:e.newStart,newLines:e.newLines})))});return t.added=e.additions,t.removed=e.deletions,t}(e))),diffType:_t.Wf.UNSPECIFIED})}const Qd=["main","master","develop"];class ep{async execute(e,t){return async function(e,t,r){const n=function(e){switch(e){case _t.ek.NAME_STATUS:return _t.ek.NAME_STATUS;case _t.ek.NAME_STATUS_AND_NUMSTAT:return _t.ek.NAME_STATUS_AND_NUMSTAT;case _t.ek.FILE_DIFFS:return _t.ek.FILE_DIFFS;case _t.ek.DIFFS_WITH_BEFORE_AND_AFTER:return _t.ek.DIFFS_WITH_BEFORE_AND_AFTER;default:return _t.ek.FILE_DIFFS}}(r.outputFormat),o=await(async()=>{let e=r.baseRef.length>0?r.baseRef:await async function(e){try{const t=await Zd(e,["symbolic-ref","--short","refs/remotes/origin/HEAD"]);if(t)return t.trim()}catch{}for(const t of Qd){const r=`origin/${t}`;try{return await Zd(e,["rev-parse","--verify",r]),r}catch{}}try{const t=(await Zd(e,["branch","-r"])).split("\n").map((e=>e.trim())).find((e=>e.startsWith("origin/")));if(t)return t}catch{}try{const t=await Zd(e,["config","--get","init.defaultBranch"]);if(t)return t.trim()}catch{}throw new Error("Could not determine default branch")}(t);return r.mergeBase&&(e=(await Zd(t,["merge-base",e,r.ref.length>0?r.ref:"HEAD"])).trim()),e})(),s=["diff","--no-color"];r.includeSpaceChanges||s.push("--ignore-space-change"),void 0!==r.unifiedContextLines&&s.push(`-U${r.unifiedContextLines}`),s.push(o),r.ref.length>0&&s.push(r.ref),r.targetPaths.length>0&&(s.push("--"),s.push(...r.targetPaths));const i=await Zd(t,s,{shouldNotTrimOutput:!0}),l=Xd(i);let c=[];if(r.maxUntrackedFiles>0){c=await async function(e,t){let r=(await Zd(e,["ls-files","--others","--exclude-standard"])).split("\n").map((e=>e.trim())).filter((e=>e.length>0));return r.length>t&&(r=r.slice(0,t)),(await Promise.all(r.map((async t=>{try{return{contents:await En.readFile(a.join(e,t),"utf8"),path:t}}catch{return}})))).filter((e=>void 0!==e))}(t,r.maxUntrackedFiles);for(const e of c){const r=await Zd(t,["diff","--no-color","--no-index","/dev/null",e.path],{ignoreErrors:!0,shouldNotTrimOutput:!0});l.diffs.push(...Xd(r).diffs)}}if(n!==_t.ek.FILE_DIFFS)for(const e of l.diffs)e.chunks=[];if(n===_t.ek.DIFFS_WITH_BEFORE_AND_AFTER){const n=r.ref.length>0?r.ref:"HEAD";await Promise.all(l.diffs.map((async s=>{try{if("/dev/null"!==s.from)try{s.beforeFileContents=await Zd(t,["show",`${o}:${s.from}`],{shouldNotTrimOutput:!0})}catch{s.beforeFileContents=""}else s.beforeFileContents="";if("/dev/null"!==s.to)if(r.ref.length>0)try{s.afterFileContents=await Zd(t,["show",`${n}:${s.to}`],{shouldNotTrimOutput:!0})}catch{s.afterFileContents=""}else try{s.afterFileContents=await En.readFile(a.join(t,s.to),"utf8")}catch{try{s.afterFileContents=await Zd(t,["show",`${n}:${s.to}`],{shouldNotTrimOutput:!0})}catch{s.afterFileContents=""}}else s.afterFileContents=""}catch(t){Yd.error(e,"Error fetching file contents for diff",t)}})))}const u=new Map;for(const e of l.diffs){const t="/dev/null"!==e.to?e.to:e.from;t&&u.set(t,e)}const d=[...u.keys()],p=r.ref.length>0?r.ref:"HEAD";try{const e=await Fd({repoRoot:t,filePaths:d,getContent:async e=>{const r=u.get(e);if(r){if(void 0!==r.afterFileContents)return r.afterFileContents;try{if(r.to&&"/dev/null"!==r.to)return await Zd(t,["show",`${p}:${r.to}`],{shouldNotTrimOutput:!0})}catch{}}}});for(const[t,r]of e){const e=u.get(t);e&&(e.isGenerated=r.isGenerated)}}catch(t){Yd.warn(e,"Generated-file detection failed; continuing without it",{error:t instanceof Error?t.message:String(t)})}const h=!0===r.computePatchId?await async function(e,t){if(0!==t.length)return(await new Promise(((r,n)=>{const o=(0,Os.spawn)("git",["patch-id","--stable"],{cwd:e});let s="",i="";o.stdout.on("data",(e=>{s+=e.toString()})),o.stderr.on("data",(e=>{i+=e.toString()})),o.on("close",(e=>{0===e?r(s):n(new Error(`git patch-id failed with code ${e}: ${i}`))})),o.on("error",n),o.stdin.end(t)}))).trim().split(/\s+/)[0]||void 0}(t,function(...e){const t=e.filter((e=>e.length>0));return 0===t.length?"":`${t.join("\n")}\n`}(i,function(e){const t=[];for(const r of e){const e=r.contents.split("\n"),n=e.length;t.push(`diff --git a/${r.path} b/${r.path}`),t.push("--- /dev/null"),t.push(`+++ b/${r.path}`),t.push(`@@ -0,0 +1${1===n?"":","+n} @@`),t.push(...e.map((e=>`+${e}`)))}return t.join("\n")}(c))):void 0,m=!0===r.returnHeadSha?(await Zd(t,["rev-parse","HEAD"])).trim():void 0,f=!0===r.returnHeadSha?(await Zd(t,["status","--porcelain=v1","--untracked-files=all"])).trim().length>0:void 0;return new _t.df({diff:l,submoduleDiffs:[],patchId:h,headSha:m,hasUncommittedChanges:f})}(e,t.cwd,t)}}class tp{permissionsService;constructor(e){this.permissionsService=e}async execute(e,t){const r=await this.permissionsService.isMcpFullyAllowlisted(e,{providerIdentifier:t.providerIdentifier,toolName:t.toolName});return new qe.M({allowlisted:r})}}var rp=r("../proto/dist/generated/agent/v1/read_exec_pb.js"),np=r("../../node_modules/.pnpm/iconv-lite@0.7.0/node_modules/iconv-lite/lib/index.js"),op=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const sp=(0,c.h)("LocalReadExecutor"),ip=async(e,t,r,n)=>{const o=setTimeout((()=>{sp.warn(e,`[watchdog, LocalReadExecutor] ${t} still not completed after ${r}ms`)}),r);try{return await n()}finally{clearTimeout(o)}};function ap(e){return e>=32&&e<=126||9===e||10===e||13===e}const lp=Buffer.from("\n---\n");const cp=[Buffer.from("%PDF-","ascii"),Buffer.from([208,207,17,224,161,177,26,225]),Buffer.from([80,75,3,4]),Buffer.from([80,75,5,6]),Buffer.from([80,75,7,8]),Buffer.from([127,69,76,70]),Buffer.from([254,237,250,206]),Buffer.from([254,237,250,207]),Buffer.from([206,250,237,254]),Buffer.from([207,250,237,254]),Buffer.from([77,90,144]),Buffer.from([0,97,115,109]),Buffer.from([137,80,78,71,13,10,26,10]),Buffer.from([255,216,255]),Buffer.from("GIF87a","ascii"),Buffer.from("GIF89a","ascii"),Buffer.from("SQLite format 3\0","ascii"),Buffer.from([31,139]),Buffer.from("BZh","ascii"),Buffer.from([253,55,122,88,90,0]),Buffer.from([40,181,47,253]),Buffer.from([55,122,188,175,39,28]),Buffer.from([82,97,114,33,26,7,0]),Buffer.from([82,97,114,33,26,7,1,0])];function up(e){const t=(0,a.extname)(e).toLowerCase(),r=""===t?"Binary files without an extension are not supported by the read executor":`Binary files of type ${t} are not supported by the read executor`;return new rp.sV({result:{case:"invalidFile",value:new rp.cW({path:e,reason:r})}})}function dp(e,t,r){if(void 0===r.offset&&void 0===r.limit)return{content:e,rangeApplied:!1};if(""===e)return{content:e,rangeApplied:!1};const n=r.offset??1,o=r.limit??(n<0?Math.abs(n):t),s=n<0?Math.max(0,t+n):Math.max(0,n-1);if(s>=t)return{content:e,rangeApplied:!1};const i=Math.min(t,s+o);return{content:e.split("\n").slice(s,i).join("\n"),rangeApplied:!0}}function pp(e,t,r=ru.pZY){if(0===t.length)return e;const n=r-e.text.length;return n<=0?{text:e.text,truncated:!0}:t.length>n?{text:e.text+t.slice(0,n),truncated:!0}:{text:e.text+t,truncated:e.truncated}}function hp(e,t){const r=pp(e,t);return{text:r.text,truncated:r.truncated}}function mp(e,t,r){let n=e;return t.forEach(((e,t)=>{const o=function(e,t){const{line:r,hasNewline:n}=e;return t&&n&&r.text.endsWith("\r")?{...r,text:r.text.slice(0,-1)}:r}(e,r);t>0&&(n=pp(n,"\n")),n=pp(n,o.text),o.truncated&&(n={text:n.text,truncated:!0})})),n}function fp(e){const t=e.toLowerCase();return"utf-8"===t?"utf8":"utf-8-bom"===t||"utf-8 bom"===t?"utf8bom":"latin-1"===t?"latin1":t}class gp extends Error{constructor(){super("Invalid UTF-8 while streaming read"),this.name="InvalidUtf8Error"}}async function vp(e,t,r,n){const o=void 0!==r.offset||void 0!==r.limit,i=(r.offset??1)<0,a=r.offset??1,l=Math.max(0,a-1),c=void 0===r.limit?void 0:l+r.limit,u=i?Math.abs(a):0,d=[];let p=0,h=!1;const f=[];let g=0,v=!1;const y=[];let w=0,b=!1,S={text:"",truncated:!1},k=0,E=0,x=0,C=!1,_=!1;const P=e=>{let t=e;return!C&&t.length>0&&(C=!0,65279===t.charCodeAt(0)&&(_=!0,t=t.slice(1))),t},R=(e,t)=>{const r=k;if(t&&(e.text.endsWith("\r")?E++:x++),((e,t)=>{if(h&&p>=ru.pZY)return;const r=d.length>0?1:0;let n=ru.pZY-p;if(r>0){if(n<=0)return void(h=!0);n--}const o=e.text.length>n?{line:{text:e.text.slice(0,n),truncated:!0},hasNewline:t}:{line:e,hasNewline:t};d.push(o),p+=r+o.line.text.length,(e.truncated||o.line.truncated)&&(h=!0)})(e,t),i){if(u>0){for(y.push({line:e,hasNewline:t}),w+=e.text.length+1;y.length>u;){const e=y.shift();void 0!==e&&(w-=e.line.text.length+1)}for(;y.length>1&&w>ru.pZY;){const e=y.shift();void 0!==e&&(w-=e.line.text.length+1,b=!0)}}}else o&&r>=l&&(void 0===c||r<c)&&((e,t)=>{if(v&&g>=ru.pZY)return;const r=f.length>0?1:0;let n=ru.pZY-g;if(r>0){if(n<=0)return void(v=!0);n--}const o=e.text.length>n?{line:{text:e.text.slice(0,n),truncated:!0},hasNewline:t}:{line:e,hasNewline:t};f.push(o),g+=r+o.line.text.length,e.truncated&&(v=!0),o.line.truncated&&(v=!0)})(e,t);k++};for await(const r of async function*(e,t,r){if("strictUtf8"===r.kind){const r=new go.TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}),n=(0,s.createReadStream)(t,{highWaterMark:65536,signal:e.signal});try{for await(const e of n){const t=r.decode(e,{stream:!0});t.length>0&&(yield t)}const e=r.decode();e.length>0&&(yield e)}catch(e){if(e instanceof TypeError)throw new gp;throw e}return}const n=(0,s.createReadStream)(t,{highWaterMark:65536,signal:e.signal}).pipe(np.decodeStream(r.decoderEncoding));for await(const e of n)yield"string"==typeof e?e:String(e)}(e,t,n)){const e=P(r).split("\n");for(let t=0;t<e.length;t++)S=hp(S,e[t]),t<e.length-1&&(R(S,!0),S={text:"",truncated:!1})}R(S,!1);const T=E+x,I=T>0&&E/T*100>=5;!function(e,t){if(m.Yd.has(e)&&m.Yd.delete(e),m.Yd.set(e,t),m.Yd.size<=100)return;const r=m.Yd.keys().next().value;void 0!==r&&m.Yd.delete(r)}(t,"utf8"===n.cacheEncoding&&_?"utf8bom":n.cacheEncoding);let A={text:"",truncated:h};if(A=mp(A,d,I),!o)return{content:A.text,totalLines:k,truncated:A.truncated,rangeApplied:!1};if(""===A.text)return{content:"",totalLines:k,truncated:!1,rangeApplied:!1};if(i){const e=r.limit??u;let t={text:"",truncated:b};return t=mp(t,y.slice(0,e),I),{content:t.text,totalLines:k,truncated:t.truncated,rangeApplied:!0}}if(l>=k)return{content:A.text,totalLines:k,truncated:A.truncated,rangeApplied:!1};let O={text:"",truncated:v};return O=mp(O,f,I),{content:O.text,totalLines:k,truncated:O.truncated,rangeApplied:!0}}class yp{permissionsService;workspacePath;mcpStateAccessor;useStreamingRead;constructor(e,t,r){this.permissionsService=e,this.workspacePath=t,this.mcpStateAccessor=r?.mcpStateAccessor,this.useStreamingRead=r?.useStreamingRead}async execute(e,t){const r={stack:[],error:void 0,hasError:!1};try{!function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0})}(r,(0,c.VI)(e.withName("LocalReadExecutor.execute")),!1);const n=t.path,o=(0,m.o1)(n,this.workspacePath);if(await ip(e,"permissionsService.shouldBlockRead",3e3,(()=>this.permissionsService.shouldBlockRead(o))))return new rp.sV({result:{case:"permissionDenied",value:new rp.lW({path:o})}});void 0!==this.mcpStateAccessor&&fd(e,this.mcpStateAccessor,o);try{const r=await ip(e,"stat",3e3,(()=>(0,En.stat)(o)));if(r.isDirectory())return new rp.sV({result:{case:"invalidFile",value:new rp.cW({path:o,reason:"Path is a directory, not a file"})}});if(!r.isFile())return new rp.sV({result:{case:"invalidFile",value:new rp.cW({path:o,reason:"Path is neither a file nor a directory"})}});const n=(0,m.CM)(o),s=(0,m.JD)(o);if(n||s)return await this.readTerminalFile(e,o,r,t,s&&!n);const i=await ip(e,"getFormatForFile",3e3,(()=>(0,m.zV)(o))),l=i.isImageFile,c=function(e){return".pdf"===(0,a.extname)(e).toLowerCase()}(o),u=(0,m.d8)(o);if(l){const t=await ip(e,"resizeImageIfNeeded",3e3,(async()=>{const e=await(0,En.readFile)(o);return Ju(e)}));return new rp.sV({result:{case:"success",value:new rp.mE({path:o,output:{case:"data",value:t.data},totalLines:0,fileSize:BigInt(r.size),truncated:!1})}})}if(c){const t=await ip(e,"readPdfBinary",3e3,(()=>(0,En.readFile)(o)));return new rp.sV({result:{case:"success",value:new rp.mE({path:o,output:{case:"data",value:t},totalLines:0,fileSize:BigInt(r.size),truncated:!1})}})}if(i.isBinaryFile&&u){const t=await ip(e,"readBinaryFile",3e3,(()=>(0,En.readFile)(o)));return new rp.sV({result:{case:"success",value:new rp.mE({path:o,output:{case:"data",value:t},totalLines:0,fileSize:BigInt(r.size),truncated:!1})}})}if(i.isBinaryFile)return up(o);{const n=this.useStreamingRead;if(n&&await ip(e,"useStreamingRead",3e3,(()=>n()))){const n=await ip(e,"readTextStreaming",7e3,(()=>async function(e,t,r,n){const o=function(e,t,r){const n=function(e,t,r){return fp(r??m.Yd.get(e)??t.encoding)}(e,t,r),o=function(e){const t=fp(e);return"utf8bom"===t?"utf8":t}(n);return"utf8"===o?{kind:"strictUtf8",cacheEncoding:"utf8"}:np.encodingExists(o)?{kind:"iconv",decoderEncoding:o,cacheEncoding:n}:{kind:"strictUtf8",cacheEncoding:"utf8"}}(t,r,n.encodingHint);try{return await vp(e,t,n,o)}catch(r){if(r instanceof gp)return await vp(e,t,n,{kind:"iconv",decoderEncoding:"latin1",cacheEncoding:"latin1"});throw r}}(e,o,i,t)));return new rp.sV({result:{case:"success",value:new rp.mE({path:o,output:{case:"content",value:n.content},totalLines:n.totalLines,fileSize:BigInt(r.size),truncated:n.truncated,rangeApplied:n.rangeApplied})}})}const s=await ip(e,"readText",3e3,(()=>(0,m.yR)(o,t.encodingHint))),a=await ip(e,"countLines",3e3,(()=>(0,m.lt)(s))),l=dp(s,a,t);let c=l.content,u=!1;return c.length>ru.pZY&&(c=c.substring(0,ru.pZY),u=!0),new rp.sV({result:{case:"success",value:new rp.mE({path:o,output:{case:"content",value:c},totalLines:a,fileSize:BigInt(r.size),truncated:u,rangeApplied:l.rangeApplied})}})}}catch(e){const t=e;return"ENOENT"===t.code?new rp.sV({result:{case:"fileNotFound",value:new rp.Ko({path:o})}}):"EACCES"===t.code||"EPERM"===t.code?new rp.sV({result:{case:"permissionDenied",value:new rp.lW({path:o})}}):new rp.sV({result:{case:"error",value:new rp.F_({path:o,error:t instanceof Error?t.message:"Unknown error occurred"})}})}}catch(e){r.error=e,r.hasError=!0}finally{op(r)}}async readTerminalFile(e,t,r,n,o){const s=await ip(e,"readTerminalFile",3e3,(()=>(0,En.readFile)(t)));if(o&&(i=s,cp.some((e=>function(e,t){return e.length>=t.length&&e.subarray(0,t.length).equals(t)}(i,e)))))return up(t);var i;let a=function(e){const t=function(e){if(e.length<5||45!==e[0]||45!==e[1]||45!==e[2]||10!==e[3])return 0;const t=Buffer.from("\n---\n"),r=e.indexOf(t,4);return-1===r?0:r+t.length}(e),r=t>0?e.subarray(0,t).toString("utf-8"):"",n=function(e,t){const r=e.length;if(r<2*lp.length)return r;if(10!==e[r-1]||45!==e[r-2]||45!==e[r-3]||45!==e[r-4]||10!==e[r-5])return r;const n=Math.max(t,r-4096),o=e.lastIndexOf(lp,r-lp.length-1);return-1===o||o<n?r:function(e){for(let t=0;t<e.length;t++){const r=e.charCodeAt(t);if(10!==r&&(r<32||r>126))return!1}const t=e.split("\n").filter((e=>e.length>0));if(t.length<2||t.length>3)return!1;const r=t[0],n=t[t.length-1];return!(!/^(exit_code: (?:-?\d+|unknown)|error: .+)$/.test(r)||!n.startsWith("ended_at: ")||3===t.length&&!/^elapsed_ms: \d+$/.test(t[1]))}(e.subarray(o+lp.length,r-4).toString("utf-8"))?o:r}(e,t),o=n<e.length?e.subarray(n).toString("utf-8"):"",s=e.subarray(t,n),i=function(e){if(e.length>=2){if(255===e[0]&&254===e[1])return"utf-16le";if(254===e[0]&&255===e[1])return"utf-16be"}const t=Math.min(4096,e.length);if(t<16)return"utf-8";let r=0,n=0;for(let o=0;o+1<t;o+=2){const t=e[o],s=e[o+1];0===s&&ap(t)&&r++,0===t&&ap(s)&&n++}return r>=8&&r>=4*Math.max(1,n)?"utf-16le":n>=8&&n>=4*Math.max(1,r)?"utf-16be":"utf-8"}(s);let a;if("utf-16le"===i)a=s.toString("utf16le");else if("utf-16be"===i){const e=s.length-s.length%2,t=Buffer.from(s.subarray(0,e));t.swap16(),a=t.toString("utf16le")}else a=s.toString("utf-8");return 65279===a.charCodeAt(0)&&(a=a.slice(1)),r+a+o}(s).replaceAll("\r\n","\n");const l=(0,m.lt)(a),c=dp(a,l,n);a=c.content;let u=!1;return a.length>ru.pZY&&(a=a.substring(0,ru.pZY),u=!0),new rp.sV({result:{case:"success",value:new rp.mE({path:t,output:{case:"content",value:a},totalLines:l,fileSize:BigInt(r.size),truncated:u,rangeApplied:c.rangeApplied})}})}}var wp=r("../proto/dist/generated/agent/v1/record_screen_exec_pb.js"),bp=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const Sp=(0,go.promisify)(Os.execFile);class kp{activeRecording=null;artifactsDir;stagingDir;display;disablePolishedRendering;polishedRenderer;onRecordingStartedCallback=null;onRecordingStoppedCallback=null;recordingStoppedCallbackInvoked=!1;constructor(e){if(this.artifactsDir=e.artifactsDir,this.stagingDir=e.stagingDir??"/opt/cursor/recording-staging/",this.display=e.display,this.disablePolishedRendering=e.disablePolishedRendering??!1,this.polishedRenderer=e.polishedRenderer,!this.disablePolishedRendering){if(!this.polishedRenderer)throw new Error("record_screen requires a polished recording renderer when polished rendering is enabled. This tool should run via exec-daemon where that dependency is bundled.");this.polishedRenderer.assertAvailable()}}setOnRecordingStarted(e){this.onRecordingStartedCallback=e}setOnRecordingStopped(e){this.onRecordingStoppedCallback=e}invokeStoppedCallbackOnce(){!this.recordingStoppedCallbackInvoked&&this.onRecordingStoppedCallback&&(this.recordingStoppedCallbackInvoked=!0,this.onRecordingStoppedCallback())}async cleanupRecording(e){try{await e.inputEventLogger.stop()}catch{}if(!e.childProcess.killed&&e.childProcess.pid)try{await this.stopFfmpegRecording(e)}catch{try{process.kill(e.childProcess.pid,"SIGKILL")}catch{}}}getActiveInputEventLogger(){return this.activeRecording?.inputEventLogger??null}async dispose(){if(this.activeRecording){await this.cleanupRecording(this.activeRecording),this.invokeStoppedCallbackOnce();try{await En.rm(this.activeRecording.sessionDir,{force:!0,recursive:!0})}catch{}this.activeRecording=null}}sanitizeToolCallId(e){return e.replace(/[^a-zA-Z0-9_-]/g,"_")}async ensureRecordingDirectoryExists(){await En.mkdir(this.stagingDir,{recursive:!0}),await En.mkdir(this.artifactsDir,{recursive:!0})}buildSessionDir(e){const t=this.sanitizeToolCallId(e),r=`session-${(new Date).toISOString().replace(/[:.]/g,"-")}-${t}`;return a.join(this.stagingDir,r)}validateAndNormalizeSaveAsFilename(e){let t=e.trim();return t.startsWith(this.artifactsDir)&&(t=t.slice(this.artifactsDir.length),t.startsWith("/")&&(t=t.slice(1))),t=t.trim(),0===t.length?{success:!1,reason:wp.y.UNSPECIFIED}:t.includes("/")||t.includes("\\")?{success:!1,reason:wp.y.SLASHES_NOT_ALLOWED}:(t=t.replace(/[^a-zA-Z0-9 ._-]/g,"_"),t=t.trim(),0===t.length?{success:!1,reason:wp.y.UNSPECIFIED}:(t.length>128&&(t=t.slice(0,128).trim()),t.toLowerCase().endsWith(".mp4")||(t=`${t}.mp4`),{success:!0,filename:t}))}async pathExists(e){try{return await En.access(e),!0}catch{return!1}}async getUniqueArtifactVideoPath(e){const t=a.parse(e),r=t.name||"recording",n=t.ext||".mp4";let o=`${r}${n}`,s=2;for(;await this.pathExists(a.join(this.artifactsDir,o));)o=`${r}-${s}${n}`,s++;return a.join(this.artifactsDir,o)}async resolveArtifactVideoPath(e){const{saveAsFilename:t,stagingSessionDir:r}=e;let n,o;if(t){const e=this.validateAndNormalizeSaveAsFilename(t);e.success?o=e.filename:(n=e.reason,o=`${a.basename(r)}.mp4`)}else o=`${a.basename(r)}.mp4`;return{finalVideoPath:await this.getUniqueArtifactVideoPath(o),requestedFilePathRejectedReason:n}}static PROXY_TARGET_WIDTH=1920;static PROXY_TARGET_FPS=60;static PROXY_CRF=17;static PROXY_PRESET="veryfast";static PROXY_PROFILE_VERSION="render-proxy-h264-all-i-v1";async getVideoDurationMs(e){const{stdout:t}=await Sp("ffprobe",["-v","error","-show_entries","format=duration","-of","default=noprint_wrappers=1:nokey=1",e]),r=parseFloat(t.trim());if(!Number.isFinite(r)||r<0)throw new Error(`Invalid video duration from ffprobe: ${t.trim()}`);return Math.floor(1e3*r)}async getVideoDimensions(e){const{stdout:t}=await Sp("ffprobe",["-v","error","-select_streams","v:0","-show_entries","stream=width,height","-of","csv=p=0:s=x",e]),[r,n]=t.trim().split("x"),o=Number.parseInt(r,10),s=Number.parseInt(n,10);if(!Number.isFinite(o)||!Number.isFinite(s))throw new Error(`Invalid video dimensions from ffprobe: ${t.trim()}`);if(o<=0||s<=0)throw new Error(`Invalid non-positive video dimensions from ffprobe: ${t.trim()}`);return{width:o,height:s}}async renderPolished(e){const t=a.join(e,"recording"),r=a.join(t,"recording_full.mp4");return await this.polishedRenderer.renderRecordingSession({stagingSessionDir:e,outputVideoPath:r,fps:kp.PROXY_TARGET_FPS,includeBrandTag:!0}),await En.access(r,En.constants.R_OK),r}async getVideoFramerate(e){try{const{stdout:t}=await Sp("ffprobe",["-v","error","-select_streams","v:0","-show_entries","stream=r_frame_rate","-of","default=noprint_wrappers=1:nokey=1",e]),r=t.trim();if(r.includes("/")){const[e,t]=r.split("/"),n=Number.parseFloat(e),o=Number.parseFloat(t);if(Number.isFinite(n)&&Number.isFinite(o)&&0!==o){const e=n/o;if(e>0&&e<500)return Math.round(e)}}else{const e=Number.parseFloat(r);if(Number.isFinite(e)&&e>0&&e<500)return Math.round(e)}console.warn(`[record-screen] Unexpected ffprobe r_frame_rate output "${r}", defaulting to ${kp.PROXY_TARGET_FPS}fps`)}catch(e){console.warn(`[record-screen] Failed to read video framerate: ${e instanceof Error?e.message:String(e)}, defaulting to ${kp.PROXY_TARGET_FPS}fps`)}return kp.PROXY_TARGET_FPS}static DEFAULT_REFRESH_RATE=60;async startFfmpegRecording(e,t){const r=a.join(t,"recording");await En.mkdir(r,{recursive:!0});const n=a.join(r,"recording_render_proxy_1080p.mp4");let o;try{o=(await Gl(this.display)).display.refreshRate}catch(e){console.warn(`[record-screen] Failed to detect refresh rate: ${e instanceof Error?e.message:String(e)}, using default ${kp.DEFAULT_REFRESH_RATE}Hz`),o=kp.DEFAULT_REFRESH_RATE}const s=["-video_size",e,"-framerate",String(o),"-draw_mouse","0","-f","x11grab","-i",this.display,"-vf",`scale=${kp.PROXY_TARGET_WIDTH}:-2:flags=lanczos,fps=${kp.PROXY_TARGET_FPS}`,"-c:v","libx264","-preset",kp.PROXY_PRESET,"-crf",String(kp.PROXY_CRF),"-pix_fmt","yuv420p","-profile:v","high","-x264-params","keyint=1:min-keyint=1:scenecut=0:bframes=0","-movflags","+faststart","-tune","fastdecode","-y",n],i=(0,Os.spawn)("ffmpeg",s,{stdio:["ignore","pipe","pipe"],detached:!0}),l=new Promise(((e,t)=>{let r="",n=!1;i.stderr?.on("data",(t=>{r+=t.toString(),!n&&r.includes("frame=")&&(n=!0,e(Date.now()))}));const o=setTimeout((()=>{n||t(new Error("ffmpeg did not start encoding within 5 seconds"))}),5e3);i.once("exit",((e,r)=>{clearTimeout(o),n||t(new Error(`ffmpeg exited before starting: code=${e} signal=${r}`))})),i.once("error",(e=>{clearTimeout(o),n||t(new Error(`ffmpeg failed to start: ${e.message}`))}))}));return await new Promise(((e,t)=>{const r=setTimeout(e,300);i.once("error",(e=>{clearTimeout(r),t(new Error(`Failed to start ffmpeg: ${e.message}`))})),i.once("exit",((e,n)=>{clearTimeout(r),t(null!==e&&0!==e?new Error(`ffmpeg exited with code ${e}`):null!==n?new Error(`ffmpeg killed by signal ${n}`):new Error("ffmpeg exited unexpectedly during startup"))}))})),{process:i,videoStartedPromise:l}}async runFfmpegCommand(e,t){return await new Promise(((r,n)=>{const o=(0,Os.spawn)("ffmpeg",t,{stdio:["ignore","ignore","pipe"]});let s="";o.stderr?.on("data",(e=>{s.length<2e4&&(s+=e.toString())})),o.once("error",(t=>{n(new Error(`ffmpeg ${e} failed to start: ${t instanceof Error?t.message:String(t)}`))})),o.once("close",(t=>{0===t?r():n(new Error(`ffmpeg ${e} exited with code ${t}: ${s.trim()}`))}))}))}async saveRecordingDataPackage(e){const{sessionDir:t,durationMs:r,recordingStartEpochMs:n,ffmpegStartedEpochMs:o,inputEvents:s,resolution:i,renderProxies:l}=e,c=a.join(t,"recording"),u=a.join(c,"recording-data.json"),d=o-n,p=s.map((e=>({executionTimestampMs:e.executionTimestampMs,commandDurationMs:e.commandDurationMs,positionBefore:e.positionBefore,positionAfter:e.positionAfter,cursorTypeAfter:e.cursorTypeAfter,action:{action:this.serializeAction(e.action)}}))),h={version:3,durationMs:r,recordingStartEpochMs:n,ffmpegStartedEpochMs:o,eventToVideoOffsetMs:d,displayWidth:i.display.width,displayHeight:i.display.height,apiWidth:i.api.width,apiHeight:i.api.height,inputEvents:p,renderProxies:l??null};await En.writeFile(u,JSON.stringify(h,null,2))}serializeAction(e){const{action:t}=e,r={case:t.case};switch(t.case){case"click":r.value={coordinate:t.value.coordinate?{x:t.value.coordinate.x,y:t.value.coordinate.y}:null,button:t.value.button,count:t.value.count,modifierKeys:t.value.modifierKeys};break;case"mouseMove":r.value={coordinate:t.value.coordinate?{x:t.value.coordinate.x,y:t.value.coordinate.y}:null};break;case"type":r.value={text:t.value.text};break;case"key":r.value={key:t.value.key,holdDurationMs:t.value.holdDurationMs};break;case"scroll":r.value={coordinate:t.value.coordinate?{x:t.value.coordinate.x,y:t.value.coordinate.y}:null,direction:t.value.direction,amount:t.value.amount,modifierKeys:t.value.modifierKeys};break;case"drag":r.value={path:t.value.path.map((e=>({x:e.x,y:e.y}))),button:t.value.button};break;case"wait":r.value={durationMs:t.value.durationMs};break;case"screenshot":case"cursorPosition":case"mouseDown":case"mouseUp":r.value=t.value;break;default:r.value={}}return r}async stopFfmpegRecording(e){const{childProcess:t}=e;if(t.killed||!t.pid)return;const r=t.pid;return new Promise(((e,n)=>{const o=setTimeout((()=>{try{try{process.kill(-r,"SIGKILL")}catch{process.kill(r,"SIGKILL")}}catch{}n(new Error("Timeout waiting for ffmpeg to stop"))}),2e4);t.once("exit",(()=>{clearTimeout(o),e()})),t.once("error",(e=>{clearTimeout(o),n(new Error(`Error stopping ffmpeg: ${e.message}`))}));try{try{process.kill(-r,"SIGTERM")}catch{process.kill(r,"SIGTERM")}}catch(e){clearTimeout(o),n(new Error(`Failed to send SIGTERM: ${e instanceof Error?e.message:String(e)}`))}}))}async execute(e,t){const r={stack:[],error:void 0,hasError:!1};try{!function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0})}(r,(0,c.VI)(e.withName("LocalRecordScreenExecutor.execute")),!1);try{await this.ensureRecordingDirectoryExists()}catch(e){return new wp.Tj({result:{case:"failure",value:new wp.yH({error:`Failed to create recording directory: ${e instanceof Error?e.message:String(e)}. Ensure the parent directory exists and has write permissions, or run: sudo mkdir -p ${this.stagingDir} ${this.artifactsDir} && sudo chmod 777 ${this.stagingDir} ${this.artifactsDir}`})}})}if(t.mode===wp.$u.UNSPECIFIED)return new wp.Tj({result:{case:"failure",value:new wp.yH({error:"Mode must be one of START_RECORDING, SAVE_RECORDING, DISCARD_RECORDING"})}});switch(t.mode){case wp.$u.START_RECORDING:{this.recordingStoppedCallbackInvoked=!1;let e=!1;if(this.activeRecording){e=!0;try{await this.cleanupRecording(this.activeRecording),await En.rm(this.activeRecording.sessionDir,{force:!0,recursive:!0}).catch((()=>{}))}catch{}this.activeRecording=null}let r=null,n=null,o=null;try{o=this.buildSessionDir(t.toolCallId||"recording"),await En.mkdir(o,{recursive:!0});const{resolutionString:s,resolution:i}=await Gl(this.display),{process:a,videoStartedPromise:l}=await this.startFfmpegRecording(s,o);r=a;const c=function(e){const t=e.lastIndexOf(":");if(-1===t)throw new Error(`Invalid X11 display string: ${e} (missing ':')`);const r=e.slice(t+1).split(".")[0],n=parseInt(r,10);if(!Number.isFinite(n)||n<0)throw new Error(`Invalid X11 display number in: ${e} (parsed: ${r})`);return n}(this.display);n=new pc({displayNum:c,resolution:i}),await n.start();const u=n.getRecordingStartTime();let d;try{d=await l}catch(e){throw new Error(`ffmpeg failed to start encoding: ${e instanceof Error?e.message:String(e)}`)}this.activeRecording={childProcess:r,sessionDir:o,startTime:u,inputEventLogger:n,resolution:i,ffmpegStartedEpochMs:d,ffmpegDiedEarly:!1,ffmpegDiedTime:null,ffmpegExitCode:null,ffmpegExitSignal:null},this.onRecordingStartedCallback&&this.onRecordingStartedCallback(n),r.once("exit",((e,t)=>{this.activeRecording&&(this.activeRecording.ffmpegDiedEarly=!0,this.activeRecording.ffmpegDiedTime=Date.now(),this.activeRecording.ffmpegExitCode=e,this.activeRecording.ffmpegExitSignal=t)}));const p=!!t.saveAsFilename;return new wp.Tj({result:{case:"startSuccess",value:new wp.T4({wasPriorRecordingCancelled:e,wasSaveAsFilenameIgnored:p})}})}catch(e){if(n)try{await n.stop()}catch{}if(r&&!r.killed&&r.pid)try{process.kill(r.pid,"SIGKILL")}catch{}return o&&await En.rm(o,{force:!0,recursive:!0}).catch((()=>{})),this.activeRecording=null,new wp.Tj({result:{case:"failure",value:new wp.yH({error:e instanceof Error?e.message:String(e)})}})}}case wp.$u.SAVE_RECORDING:{if(!this.activeRecording)return new wp.Tj({result:{case:"failure",value:new wp.yH({error:"No active recording to save"})}});const e=this.activeRecording;try{const r=await e.inputEventLogger.stop(),n=e.inputEventLogger.getRecordingStartTime();this.invokeStoppedCallbackOnce(),!e.childProcess.killed&&e.childProcess.pid&&await this.stopFfmpegRecording(e);const o=e.ffmpegStartedEpochMs??n,s=e.sessionDir,{finalVideoPath:i,requestedFilePathRejectedReason:l}=await this.resolveArtifactVideoPath({saveAsFilename:t.saveAsFilename,stagingSessionDir:s}),c=a.join(s,"recording"),u=a.join(c,"recording_render_proxy_1080p.mp4");try{await En.access(u,En.constants.R_OK)}catch{return this.activeRecording=null,new wp.Tj({result:{case:"failure",value:new wp.yH({error:`Recording proxy not found at ${u}`})}})}const[d,p,h]=await Promise.all([this.getVideoDurationMs(u),this.getVideoDimensions(u),this.getVideoFramerate(u)]),m={profileVersion:kp.PROXY_PROFILE_VERSION,generatedAtEpochMs:Date.now(),source:{width:p.width,height:p.height,durationMs:d,fps:h},artifacts:[{name:"render_proxy_1080p",path:"recording_render_proxy_1080p.mp4",width:p.width,height:p.height,fps:kp.PROXY_TARGET_FPS,codec:"h264",profile:kp.PROXY_PROFILE_VERSION,keyint:1,status:"success",elapsedMs:0}]};if(await this.saveRecordingDataPackage({sessionDir:s,durationMs:d,recordingStartEpochMs:n,ffmpegStartedEpochMs:o,inputEvents:r,resolution:e.resolution,renderProxies:m}),this.disablePolishedRendering)await En.copyFile(u,i);else{const e=await this.renderPolished(s);await En.rename(e,i)}return this.activeRecording=null,new wp.Tj({result:{case:"saveSuccess",value:new wp.ol({path:i,recordingDurationMs:hr.protoInt64.parse(d.toString()),requestedFilePathRejectedReason:l})}})}catch(t){return await this.cleanupRecording(e),this.invokeStoppedCallbackOnce(),this.activeRecording=null,new wp.Tj({result:{case:"failure",value:new wp.yH({error:t instanceof Error?t.message:String(t)})}})}}case wp.$u.DISCARD_RECORDING:{if(!this.activeRecording)return new wp.Tj({result:{case:"failure",value:new wp.yH({error:"No active recording to discard"})}});const e=this.activeRecording;try{return await e.inputEventLogger.stop(),this.invokeStoppedCallbackOnce(),!e.childProcess.killed&&e.childProcess.pid&&await this.stopFfmpegRecording(e),await En.rm(e.sessionDir,{force:!0,recursive:!0}),this.activeRecording=null,new wp.Tj({result:{case:"discardSuccess",value:new wp.N8}})}catch(t){await this.cleanupRecording(e),this.invokeStoppedCallbackOnce();const r=e.sessionDir;return this.activeRecording=null,new wp.Tj({result:{case:"failure",value:new wp.yH({error:`Failed to discard recording: ${t instanceof Error?t.message:String(t)}. Session may remain at: ${r}`})}})}}default:{const e=t.mode;return new wp.Tj({result:{case:"failure",value:new wp.yH({error:`Unhandled recording mode: ${e}`})}})}}}catch(e){r.error=e,r.hasError=!0}finally{bp(r)}}}async function Ep(e){const t=await(0,En.readdir)(e,{withFileTypes:!0}).catch((()=>[])),r=[];for(const n of t){const t=a.join(e,n.name),o={name:n.name,path:t,isDirectory:n.isDirectory()};n.isDirectory()&&(o.children=await Ep(t)),r.push(o)}return r.sort(((e,t)=>e.isDirectory&&!t.isDirectory?-1:!e.isDirectory&&t.isDirectory?1:e.name.localeCompare(t.name)))}function xp(e,t="",r=!0){const n=[`${t}${r?"└── ":"├── "}${e.isDirectory?`${e.name}/`:e.name}`],o=e.children;if(o?.length){const e=t+(r?" ":"│ ");o.forEach(((t,r)=>{const s=r===o.length-1;n.push(...xp(t,e,s))}))}return n}async function Cp(e){if(!await(0,En.access)(e,En.constants.R_OK).then((()=>!0),(()=>!1)))return"(No notes directory yet - will be created when you write your first note)";const t=await Ep(e);return 0===t.length?"(Notes directory is empty)":t.flatMap(((e,r)=>xp(e,"",r===t.length-1))).join("\n")}async function _p(e,t){return Cp(a.join(e,"agent-notes",t))}async function Pp(e){return Cp(a.join(e,"agent-notes","shared"))}var Rp=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t},Tp=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const Ip=(0,c.h)("local-exec:request-context");async function Ap(e,t,r,n){const o={stack:[],error:void 0,hasError:!1};try{Rp(o,(0,c.VI)(e.withName("LocalRequestContextExecutor.getGitStatusForRepoPath")),!1);try{return(await t.exec(e,r,["--no-optional-locks","status","--short","--branch"],{timeout:n,caller:"getGitStatusForRepoPath"})).stdout}catch{return}}catch(e){o.error=e,o.hasError=!0}finally{Tp(o)}}async function Op(e,t,r,n){try{const o=(await t.exec(e,r,["rev-parse","--abbrev-ref","HEAD"],{timeout:n,caller:"getGitBranchForRepoPath"})).stdout.trim();if("HEAD"===o||0===o.length)return;return o}catch{return}}async function Dp(e,t,r={}){const{projectDir:n,notesSessionId:o,metaAgentNotesEnabled:s,smartModeClassifierAutoModeEnabled:a,devForceNextSmartModeClassifierBlockToken:l,isWorkingDirHomeDir:c,getSandboxEnabled:u,getSandboxSupported:d,getNetworkAllowlistInfo:p,userTerminalHint:h,artifactsFolder:m,secretRedactionEnabled:f,getComputerUseSupported:g}=r,v=`${i.platform()} ${i.release()}`,y=(0,Bn.G6)(h),w=(()=>{try{return(new Intl.DateTimeFormat).resolvedOptions().timeZone??void 0}catch{return}})(),b=n,S=n?`${n}/terminals`:void 0,k=n&&!0!==s?`${n}/agent-notes/shared`:void 0,E=n&&o?`${n}/agent-notes/${o}`:void 0,x=n?`${n}/agent-transcripts`:void 0,C=!!u&&u(),_=d?.();let P;if(p)try{P=await p()}catch{P=void 0}return new Ct.GE({osVersion:v,workspacePaths:t,shell:y,sandboxEnabled:C,projectFolder:b,terminalsFolder:S,agentSharedNotesFolder:k,agentConversationNotesFolder:E,agentTranscriptsFolder:x,timeZone:w,processWorkingDirectory:process.cwd(),artifactsFolder:m,...void 0!==a&&{smartModeClassifierAutoModeEnabled:a},...void 0!==l&&{devForceNextSmartModeClassifierBlockToken:l},...void 0!==f&&{secretRedactionEnabled:f},...void 0!==_&&{sandboxSupported:_},...void 0!==P?.hasDefaults&&{sandboxNetworkHasDefaults:P.hasDefaults},...P?.explicitEntries&&P.explicitEntries.length>0&&{sandboxNetworkExplicitAllowlist:P.explicitEntries},...void 0!==g&&{computerUseSupported:g()},...void 0!==c&&{isWorkingDirHomeDir:c}})}const Mp={type:"object",properties:{},additionalProperties:!1};function jp(e){const t=e?.trim();return t||void 0}function Np(e,t){const r=function(e){return jp(e.serverIdentifier)}(e);if(r)return r;const n=jp(e.serverName);return n?t.get(n)??n:void 0}function $p(e){switch(e.kind){case"ready":return"connected";case"requires_authentication":return"needsAuth";case"error":return"error";default:return"loading"}}class Fp{mcpLease;constructor(e){this.mcpLease=e}async getState(e){const[t,r]=await Promise.all([this.mcpLease.getTools(e).catch((t=>(Ip.warn(e,"Error fetching MCP tools",{error:t}),[]))),this.mcpLease.getInstructions(e).catch((t=>(Ip.warn(e,"Error fetching MCP instructions",{error:t}),[])))]);return function(e,t,r){const n=new Map;for(const t of e)n.has(t.providerIdentifier)||n.set(t.providerIdentifier,t.clientKey);const o=t.map((e=>Np(e,n))).filter((e=>Boolean(e)));return{servers:[...new Set([...e.map((e=>e.clientKey)),...o,...Array.from(r?.entries()??[]).filter((([,e])=>"connected"!==e)).map((([e])=>e))])].map((o=>{const s=e.filter((e=>e.clientKey===o));return{serverName:s[0]?.providerIdentifier??o,serverIdentifier:o,plugin:s[0]?.plugin,marketplace:s[0]?.marketplace,tools:s,instructions:t.filter((e=>Np(e,n)===o)),status:r?.get(o)}}))}}(t,r,await async function(e,t){const r=await t.getClients(e).catch((t=>(Ip.warn(e,"Error fetching MCP clients",{error:t}),{}))),n=await Promise.all(Object.entries(r).map((async([t,r])=>[t,$p(await r.getState(e).catch((()=>({kind:"error",message:"Failed to fetch MCP client state"}))))])));return new Map(n)}(e,this.mcpLease))}}class Lp{mcpStateAccessor;constructor(e){this.mcpStateAccessor=e}async execute(e,t){return r=await this.mcpStateAccessor.getState(e),new Ze._W({result:{case:"success",value:new Ze.pv({servers:r.servers.map((e=>new Ze.XE({serverName:e.serverName,serverIdentifier:e.serverIdentifier,plugin:e.plugin,marketplace:e.marketplace,tools:e.tools.map((e=>new pr.gd({name:e.name,providerIdentifier:e.providerIdentifier,toolName:e.toolName,description:e.description,inputSchema:e.inputSchema?hr.Value.fromJson(e.inputSchema):void 0}))),instructions:e.instructions,status:e.status})))})}});var r}}class Up{cursorRulesService;cloudRulesService;subagentsService;repositoryProvider;grepProvider;lsExecutor;mcpStateAccessor;gitExecutor;workspacePaths;getSandboxEnabled;getSandboxSupported;getNetworkAllowlistInfo;smartModeClassifierAutoModeEnabled;devForceNextSmartModeClassifierBlockToken;projectDir;isWorkingDirHomeDir;userTerminalHint;getMcpFileSystemOptions;mcpMetaToolEnabled;alwaysExposeVirtualMcpAuthTool;artifactsFolder;secretRedactionEnabled;attributionConfigProvider;isAttributionDisabledByAdmin;getAgentSkills;additionalRules;getComputerUseSupported;cachedWorkspaces=new Map;inFlightWorkspaceWarms=new Map;globalCache;globalCacheTraceId;cacheDebounceTimeout;fileWatcher;constructor(e,t,r,n,o,s,i,a,l,c={}){this.cursorRulesService=e,this.cloudRulesService=t,this.subagentsService=r,this.repositoryProvider=n,this.grepProvider=o,this.lsExecutor=s,this.mcpStateAccessor=i,this.gitExecutor=a,this.workspacePaths=l;const{projectDir:u,smartModeClassifierAutoModeEnabled:d,devForceNextSmartModeClassifierBlockToken:p,isWorkingDirHomeDir:h,createFileWatcher:m,warmRequestContext:f,getSandboxEnabled:g,getSandboxSupported:v,getNetworkAllowlistInfo:y,userTerminalHint:w,getMcpFileSystemOptions:b,mcpMetaToolEnabled:S,alwaysExposeVirtualMcpAuthTool:k,artifactsFolder:E,secretRedactionEnabled:x,attributionConfigProvider:C,isAttributionDisabledByAdmin:_,getAgentSkills:P,additionalRules:R,getComputerUseSupported:T}=c;this.projectDir=u,this.isWorkingDirHomeDir=h,this.getSandboxEnabled=g,this.getSandboxSupported=v,this.getNetworkAllowlistInfo=y,this.smartModeClassifierAutoModeEnabled=d,this.devForceNextSmartModeClassifierBlockToken=p,this.userTerminalHint=w,this.getMcpFileSystemOptions=b,this.mcpMetaToolEnabled=S??!1,this.alwaysExposeVirtualMcpAuthTool=k??!1,this.artifactsFolder=E,this.secretRedactionEnabled=x,this.attributionConfigProvider=C,this.isAttributionDisabledByAdmin=_,this.getAgentSkills=P,this.additionalRules=R??[],this.getComputerUseSupported=T,this.warmWorkspaceCaches(),!0===f&&this.rebuildGlobalCache(),void 0!==m&&(!0!==f&&this.rebuildAllCaches(),this.fileWatcher=m(),this.fileWatcher.onDidChange((e=>{this.onWorkspacePathChanged(e)})),this.fileWatcher.onDidCreate((e=>{this.onWorkspacePathChanged(e)})),this.fileWatcher.onDidDelete((e=>{this.onWorkspacePathChanged(e)})))}onWorkspacePathChanged(e){this.rebuildAllCaches()}getWorkspaceCache(e){return this.cachedWorkspaces.get(e)}warmWorkspaceCaches(){const e=(0,c.q6)();Promise.all(this.workspacePaths.map((t=>this.ensureWorkspaceCacheWarm(e,t))))}ensureWorkspaceCacheWarm(e,t){if(this.cachedWorkspaces.has(t))return Promise.resolve();const r=this.inFlightWorkspaceWarms.get(t);if(void 0!==r)return r;const n=this.warmWorkspaceCache(e,t).finally((()=>{this.inFlightWorkspaceWarms.delete(t)}));return this.inFlightWorkspaceWarms.set(t,n),n}async warmWorkspaceCache(e,t){const r={stack:[],error:void 0,hasError:!1};try{const n=Rp(r,(0,c.VI)(e.withName("LocalRequestContextExecutor.warmWorkspaceCache")),!1),o=await async function(e,t,r){try{return(await t.exec(e,r,["rev-parse","--show-toplevel"],{caller:"getGitRepoPathForWorkspacePath"})).stdout.trim()}catch{return null}}(n.ctx,this.gitExecutor,t),s=o?await Oa(n.ctx,this.gitExecutor,o):void 0,i={repoPath:o??void 0,remoteUrl:void 0!==s?Da(s):void 0};this.cachedWorkspaces.set(t,i)}catch(e){r.error=e,r.hasError=!0}finally{Tp(r)}}rebuildAllCaches(){this.cacheDebounceTimeout&&clearTimeout(this.cacheDebounceTimeout),this.cacheDebounceTimeout=setTimeout((()=>{this.cacheDebounceTimeout=void 0,this.rebuildGlobalCache()}),5e3)}rebuildGlobalCache(){const e={stack:[],error:void 0,hasError:!1};try{const t=(0,c.q6)(),r=Rp(e,(0,c.VI)(t.withName("LocalRequestContextExecutor.rebuildGlobalCache")),!1);this.globalCacheTraceId=r.span.spanContext().traceId,this.globalCache=this.computeGlobalCache(r.ctx)}catch(t){e.error=t,e.hasError=!0}finally{Tp(e)}}async computeGlobalCache(e){const t={stack:[],error:void 0,hasError:!1};try{const r=Rp(t,(0,c.VI)(e.withName("LocalRequestContextExecutor.computeGlobalCache")),!1),n=AbortSignal.timeout(1e3),o=performance.now(),s={},i=(e,t)=>{const r=performance.now();return t.finally((()=>{s[e]=Math.round(performance.now()-r)}))},[a,l,u,d]=await Promise.all([i("cursorRules",this.cursorRulesService.getAllCursorRules(r.ctx)),i("cloudRule",this.cloudRulesService?this.cloudRulesService.getCloudRule(r.ctx):Promise.resolve(null)),i("codebaseRef",this.repositoryProvider.getCodebaseReference(r.ctx,n).catch((()=>{}))),i("subagents",this.subagentsService?this.subagentsService.getAllSubagents().catch((()=>[])):Promise.resolve([]))]),p=Math.round(performance.now()-o);return p>1e3&&Ip.warn(r.ctx,"computeGlobalCache: slow",{totalMs:p,...s,ruleCount:a.length}),{rules:[...this.additionalRules,...a],cloudRule:l,codebaseReference:u,customSubagents:d}}catch(e){t.error=e,t.hasError=!0}finally{Tp(t)}}dispose(){this.cacheDebounceTimeout&&(clearTimeout(this.cacheDebounceTimeout),this.cacheDebounceTimeout=void 0),this.fileWatcher&&(this.fileWatcher.dispose(),this.fileWatcher=void 0),this.globalCache=void 0}async collectWorkspaceCaches(e){const t={stack:[],error:void 0,hasError:!1};try{const r=Rp(t,(0,c.VI)(e.withName("LocalRequestContextExecutor.collectWorkspaceCaches")),!1);let n;if(this.grepProvider.getTrackedState)try{n=await this.grepProvider.getTrackedState(this.workspacePaths)}catch{n=void 0}let o=!0;const s=(await Promise.all(this.workspacePaths.map((async e=>{const t=this.getWorkspaceCache(e);if(void 0===t)return o=!1,void this.ensureWorkspaceCacheWarm(r.ctx,e);const s=n?.[e];if(void 0!==s)return new Ct.DS({path:t.repoPath,status:s.gitStatus,branchName:s.gitBranchName,remoteUrl:t.remoteUrl});if(void 0===t.repoPath)return;const{status:i,branchName:a}=await async function(e,t,r,n){const o=e=>{let t;const r=new Promise((e=>{t=setTimeout((()=>{e(void 0)}),n)}));return Promise.race([e.catch((()=>{})),r]).finally((()=>{void 0!==t&&clearTimeout(t)}))},[s,i]=await Promise.all([o(Ap(e,t,r,n)),o(Op(e,t,r,n))]);return{status:s,branchName:i}}(r.ctx,this.gitExecutor,t.repoPath,3e3);return new Ct.DS({path:t.repoPath,status:i,branchName:a,remoteUrl:t.remoteUrl})})))).filter((e=>void 0!==e));return{gitRepos:s,gitRepoInfoComplete:o}}catch(e){t.error=e,t.hasError=!0}finally{Tp(t)}}async computeCachedRequestContext(e,t){const r={stack:[],error:void 0,hasError:!1};try{const n=Rp(r,(0,c.VI)(e.withName("LocalRequestContextExecutor.computeCachedRequestContext")),!1),o=this.projectDir,s=async()=>{const e={stack:[],error:void 0,hasError:!1};try{const t=Rp(e,(0,c.VI)(n.ctx.withName("LocalRequestContextExecutor.computeCachedRequestContext.getGlobalData")),!1);return this.globalCacheTraceId&&t.span.setAttribute("cacheTraceId",this.globalCacheTraceId),this.globalCache??this.computeGlobalCache(n.ctx)}catch(t){e.error=t,e.hasError=!0}finally{Tp(e)}},i=performance.now(),[a,l,u,{gitRepos:d,gitRepoInfoComplete:p},h,m]=await Promise.all([s(),this.mcpStateAccessor.getState(n.ctx),Dp(n.ctx,this.workspacePaths,{projectDir:o,notesSessionId:t.notesSessionId,metaAgentNotesEnabled:!1,smartModeClassifierAutoModeEnabled:this.smartModeClassifierAutoModeEnabled,devForceNextSmartModeClassifierBlockToken:this.devForceNextSmartModeClassifierBlockToken,isWorkingDirHomeDir:this.isWorkingDirHomeDir,getSandboxEnabled:this.getSandboxEnabled,getSandboxSupported:this.getSandboxSupported,getNetworkAllowlistInfo:this.getNetworkAllowlistInfo,userTerminalHint:this.userTerminalHint,artifactsFolder:this.artifactsFolder,secretRedactionEnabled:this.secretRedactionEnabled,getComputerUseSupported:this.getComputerUseSupported}),this.collectWorkspaceCaches(n.ctx),o&&t.notesSessionId?_p(o,t.notesSessionId):Promise.resolve(void 0),o?Pp(o):Promise.resolve(void 0)]),f=performance.now()-i;f>1e3&&Ip.warn(n.ctx,"computeCachedRequestContext: slow parallel data collection",{durationMs:Math.round(f)});const g=this.getMcpFileSystemOptions?await this.getMcpFileSystemOptions(n.ctx,{timeoutMs:3e3}):void 0,v=this.mcpMetaToolEnabled?function(e,t){const r=e.servers.map((e=>{const r=e.instructions.map((e=>e.instructions)).filter(Boolean).join("\n"),n=e.tools.map((e=>new pr.E$({toolName:e.toolName,description:e.description,inputSchema:void 0!==e.inputSchema?hr.Value.fromJson(e.inputSchema):void 0})));return!0!==t?.alwaysExposeVirtualMcpAuthTool&&"needsAuth"!==e.status||n.some((e=>e.toolName===Ku))||n.push(new pr.E$({toolName:Ku,description:"Authenticate this MCP server so its tools can be used. Call this tool through your MCP tool-calling interface when STATUS.md indicates this server needs authentication.",inputSchema:hr.Value.fromJson(Mp)})),new pr.UC({serverIdentifier:e.serverIdentifier,serverName:e.serverName,plugin:e.plugin,marketplace:e.marketplace,pluginDbId:e.pluginId,marketplaceId:e.marketplaceId,serverUseInstructions:r||void 0,tools:n})}));return new pr.U_({enabled:!0,mcpDescriptors:r})}(l,{alwaysExposeVirtualMcpAuthTool:this.alwaysExposeVirtualMcpAuthTool}):void 0;let y=!1;if(void 0!==this.isAttributionDisabledByAdmin)try{y=await this.isAttributionDisabledByAdmin()}catch{y=!0}const w=this.attributionConfigProvider?.get(),b=!y&&(w?.attribution?.attributeCommitsToAgent??!0),S=!y&&(w?.attribution?.attributePRsToAgent??!0),k=new Ct.bb({rules:a.rules,env:u,gitRepos:d,gitRepoInfoComplete:p,repositoryInfo:a.codebaseReference?[{relativeWorkspacePath:a.codebaseReference.relativeWorkspacePath,repoName:a.codebaseReference.repoName,repoOwner:a.codebaseReference.repoOwner,isTracked:a.codebaseReference.isTracked,isLocal:a.codebaseReference.isLocal,orthogonalTransformSeed:a.codebaseReference.orthogonalTransformSeed,pathEncryptionKey:a.codebaseReference.pathEncryptionKey}]:[],tools:l.servers.flatMap((e=>e.tools)).map((e=>new pr.gd({name:e.name,providerIdentifier:e.providerIdentifier,toolName:e.toolName,description:e.description,inputSchema:e.inputSchema?hr.Value.fromJson(e.inputSchema):void 0}))),conversationNotesListing:h,sharedNotesListing:m,mcpInstructions:l.servers.flatMap((e=>e.instructions)),customSubagents:a.customSubagents,mcpFileSystemOptions:g,mcpMetaToolOptions:v,supportsMcpAuth:!0,commitAttributionMessage:b?"enabled":void 0,prAttributionMessage:S?"enabled":void 0,agentSkills:this.getAgentSkills?await this.getAgentSkills(n.ctx):[]});return null!==a.cloudRule&&void 0!==a.cloudRule&&(k.cloudRule=a.cloudRule),k}catch(e){r.error=e,r.hasError=!0}finally{Tp(r)}}async execute(e,t){const r={stack:[],error:void 0,hasError:!1};try{const n=Rp(r,(0,c.VI)(e.withName("LocalRequestContextExecutor.execute")),!1);n.span.setAttribute("enableCaching",void 0!==this.fileWatcher),n.span.setAttribute("hasGlobalCache",!!this.globalCache);try{const e=await this.computeCachedRequestContext(n.ctx,t);return new Ct._G({result:{case:"success",value:new Ct.yW({requestContext:e})}})}catch(e){return n.span.recordException(e),new Ct._G({result:{case:"error",value:new Ct.nf({error:e instanceof Error?e.message:String(e)})}})}}catch(e){r.error=e,r.hasError=!0}finally{Tp(r)}}}function Bp(e){return 0!==e.timeout?e.timeout:e.isBackground||e.timeoutBehavior===Xe._d.BACKGROUND||void 0!==e.hardTimeout&&e.hardTimeout>0?0:3e4}var Hp=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});class Wp{permissionsService;coreExecutor;ignoreService;constructor(e,t,r,n){this.permissionsService=e,this.coreExecutor=t,this.ignoreService=r}buildResultFromExit(e){return 0===(e.exitCode??-1)?new Xe.W4({result:{case:"success",value:new Xe.QR({...e,stdout:e.outputLocation?"":e.stdout,stderr:e.outputLocation?"":e.stderr})},sandboxPolicy:qn(e.sandboxPolicy)}):new Xe.W4({result:{case:"failure",value:new Xe.xC({...e,stdout:e.outputLocation?"":e.stdout,stderr:e.outputLocation?"":e.stderr})},sandboxPolicy:qn(e.sandboxPolicy)})}async executeWithPolicy(e,t,r,n,o){const s=Date.now(),i=new AbortController,a=e.signal?AbortSignal.any([e.signal,i.signal]):i.signal,l=setTimeout((()=>{i.abort()}),n);try{let n,i,c="",u="",d=null,p=!1;const h=o?{perRepo:o}:void 0;for await(const o of this.coreExecutor.execute(e,{command:t.command,workingDirectory:r,signal:a,toolCallId:t.toolCallId,conversationId:t.conversationId,sandboxPolicy:h,fileOutputThresholdBytes:t.fileOutputThresholdBytes,pipeStdin:!1}))"stdout"===o.type?c+=o.data:"stderr"===o.type?u+=o.data:"exit"===o.type&&(d=null!=o.code?0|o.code:null,n=o.outputLocation,p=o.aborted,i=Ic(o.localExecutionTimeMs));clearTimeout(l);const m=Date.now()-s,f={command:t.command,workingDirectory:r,exitCode:p?-1:d??-1,signal:p?"SIGTERM":"",stdout:c,stderr:u,executionTime:m,localExecutionTimeMs:i,sandboxPolicy:o,outputLocation:n};return this.buildResultFromExit(f)}catch(s){return clearTimeout(l),i.signal.aborted&&!e.signal.aborted?new Xe.W4({result:{case:"timeout",value:new Xe.eG({command:t.command,workingDirectory:r,timeoutMs:n})},sandboxPolicy:qn(o)}):e.signal.aborted?new Xe.W4({result:{case:"rejected",value:new Xe.pZ({command:t.command,workingDirectory:r,reason:"Command aborted"})},sandboxPolicy:qn(o)}):new Xe.W4({result:{case:"spawnError",value:new Xe.mJ({command:t.command,workingDirectory:r,error:s instanceof Error?s.message:"Unknown error"})},sandboxPolicy:qn(o)})}}async execute(e,t){const r={stack:[],error:void 0,hasError:!1};try{const n=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t}(r,(0,c.VI)(e.withName("LocalShellExecutor.execute")),!1).ctx;(0,c.HF)(n,"LocalShellExecutor.execute");const o=t.command,s=t.requestedSandboxPolicy?zn(t.requestedSandboxPolicy):void 0,i=t.workingDirectory||await this.coreExecutor.getCwd(),a=Bp(t),l=(0,m.o1)(i);if(!t.parsingResult)return new Xe.W4({result:{case:"spawnError",value:new Xe.mJ({command:o,workingDirectory:l,error:"Parsing result is required"})}});let u;if(t.skipApproval)u=s;else{const e=await this.permissionsService.shouldBlockShellCommand(n,o,{workingDirectory:l,timeout:a,parsingResult:t.parsingResult,toolCallId:t.toolCallId,smartModeApprovalReason:t.smartModeApproval?.reason,smartModeApprovalRequestId:t.smartModeApproval?.requestId,hookApprovalRequirement:gt(t)},s);if("block"===e.kind)return"permissionsConfig"===e.reason.type&&e.reason.isReadonly?new Xe.W4({result:{case:"permissionDenied",value:new Xe.jn({command:o,workingDirectory:l,error:"Command blocked by permissions configuration",isReadonly:!0})}}):new Xe.W4({result:{case:"rejected",value:new Xe.pZ({command:o,workingDirectory:l,reason:Vn(e.reason)})}});u=e.policy}if(Dn()&&(u=Ln(o,t.parsingResult)),u&&"insecure_none"!==u.type){const e=await this.ignoreService.getCursorIgnoreMapping();u={...u,ignoreMapping:e}}return this.executeWithPolicy(n,t,i,a,u)}catch(e){r.error=e,r.hasError=!0}finally{Hp(r)}}}class zp{permissionsService;constructor(e){this.permissionsService=e}async execute(e,t){const r=t.parsingResult??new Xe.HO,n=await this.permissionsService.isShellCommandFullyAllowlisted(e,t.command,{workingDirectory:t.workingDirectory,parsingResult:r,classifierResult:t.classifierResult,toolCallId:t.toolCallId});return new pt.e({allowlisted:n})}}class qp{shellStreamExecutor;constructor(e){this.shellStreamExecutor=e}async execute(e,t,r){return""===t.toolCallId.trim()?new Xe.jK({status:Xe.iA.NOT_FOUND}):this.shellStreamExecutor.forceBackgroundByToolCallId(t.toolCallId)}}var Gp=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t},Vp=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const Jp=(0,c.h)("local-exec:shell-core"),Kp="win32"===process.platform;class Yp{executor;workspacePath;projectDir;shellOutputBackpressureOptions;constructor(e,t,r,n){this.executor=e,this.workspacePath=t,this.projectDir=r,this.shellOutputBackpressureOptions=n}async*execute(e,t){const r={stack:[],error:void 0,hasError:!1};try{Gp(r,(0,c.VI)(e.withName("ShellCoreExecutor.execute")),!1);const n=performance.now(),i=t.workingDirectory||await this.executor.getCwd(),l=(0,m.o1)(i,this.workspacePath);let u,d=0,p=0,h=!1,f=!1,g=!1;t.fileOutputThresholdBytes&&this.projectDir&&(u={buffer:"",lineCount:0,size:0,threshold:Number(t.fileOutputThresholdBytes)});const v=t.signal,y=(0,Bn.CG)(t.sandboxPolicy??Bn.BM);t.sandboxPolicy&&(yield{type:"start",sandboxed:"workspace_readonly"===y||"workspace_readwrite"===y});const w={CURSOR_AGENT:"1"};t.conversationId&&(w.CURSOR_CONVERSATION_ID=(0,m.sh)(t.conversationId)),this.projectDir&&(w.AGENT_TRANSCRIPTS=a.join(this.projectDir,m.O2)),t.askpassConfig&&!Kp&&(w.SUDO_ASKPASS=t.askpassConfig.helperPath,w.CURSOR_ASKPASS_SOCKET=t.askpassConfig.socketPath,w.CURSOR_ASKPASS_SECRET=t.askpassConfig.secret);let b=0,S="";for await(const r of this.executor.execute(e,t.command,{signal:v,workingDirectory:l,env:w,sandboxPolicy:t.sandboxPolicy,sandboxWorkspaceRoot:this.workspacePath,pipeStdin:t.pipeStdin??!1,bufferOutputEvents:this.shellOutputBackpressureOptions?.bufferOutputEvents,outputLimiterOptions:this.shellOutputBackpressureOptions?.outputLimiterOptions})){if(b=0,S="",("stdout"===r.type||"stderr"===r.type)&&(S=r.data.toString(),b=r.data.length,u))if(u.size+=b,u.lineCount+=S.split("\n").length-1,u.size>Oc);else if(u.file)u.file.write(S);else if(u.buffer+=S,u.size>u.threshold){const e=a.join(this.projectDir,Ac);u.path=a.join(e,`${(0,o.randomUUID)()}.txt`),await(0,En.mkdir)(a.dirname(u.path),{recursive:!0}),u.file=(0,s.createWriteStream)(u.path),u.file.write(u.buffer),u.buffer=""}switch(r.type){case"stdout":h||(d+b>hc?(h=!0,yield{type:"stdout_trimmed"}):(d+=b,yield{type:"stdout",data:S}));break;case"suppressed_output":g||(g=!0,yield{type:"stdout",data:Bn.Ls});break;case"stderr":f||(p+b>hc?(f=!0,yield{type:"stderr_trimmed"}):(p+=b,yield{type:"stderr",data:S}));break;case"exit":{const e=Math.max(0,Math.round(performance.now()-n));let t;u?.file&&(await new Promise((e=>u.file.end(e))),t=new $l.pV({filePath:u.path,sizeBytes:BigInt(u.size),lineCount:BigInt(u.lineCount)})),yield{type:"exit",code:r.code,aborted:r.aborted,outputLocation:t,localExecutionTimeMs:e};break}case"stdin_ready":yield{type:"stdin_ready",stdin:r.stdin,pid:r.pid};break;case"sandbox_denies":yield{type:"sandbox_denies",events:r.events}}}}catch(e){r.error=e,r.hasError=!0}finally{Vp(r)}}async getCwd(){return this.executor.getCwd()}getWorkspacePath(){if(!this.workspacePath)throw new Error("Workspace path is not configured");return this.workspacePath}}class Zp{innerExecutor;shellManager;constructor(e,t){this.innerExecutor=e,this.shellManager=t}async*execute(e,t){const r={stack:[],error:void 0,hasError:!1};try{Gp(r,(0,c.VI)(e.withName("ManagedShellCoreExecutor.execute")),!1),Jp.info(e,"Executing shell command",{command:t.command,workingDirectory:t.workingDirectory,toolCallId:t.toolCallId});let n=null;t.toolCallId&&(n=this.shellManager.getOrCreateShellEmitter(t.toolCallId));for await(const r of this.innerExecutor.execute(e,t)){if(n)switch(r.type){case"stdin_ready":n.emit({type:"stdin_ready",stdin:r.stdin,pid:r.pid});break;case"start":n.emit({type:"start",sandboxed:r.sandboxed});break;case"stdout":n.emit({type:"stdout",data:r.data});break;case"stderr":n.emit({type:"stderr",data:r.data});break;case"exit":n.emit({type:"exit",code:r.code??-1,aborted:r.aborted})}yield r}}catch(e){r.error=e,r.hasError=!0}finally{Vp(r)}}async getCwd(){return this.innerExecutor.getCwd()}getWorkspacePath(){return this.innerExecutor.getWorkspacePath()}}class Xp{innerExecutor;askpassConfig;constructor(e,t){this.innerExecutor=e,this.askpassConfig=t}async*execute(e,t){const r={...t,askpassConfig:t.askpassConfig??this.askpassConfig};yield*this.innerExecutor.execute(e,r)}async getCwd(){return this.innerExecutor.getCwd()}getWorkspacePath(){return this.innerExecutor.getWorkspacePath()}}var Qp=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const eh=(0,c.h)("local-exec:shell-stream");class th{iterator;timeoutMs;pendingPromise=null;stopReason;timer;stopResolve;stopPromise;constructor(e,t){this.iterator=e,this.timeoutMs=t,this.stopPromise=new Promise((e=>{this.stopResolve=e}))}stop(e){return void 0===this.stopReason&&(this.stopReason=e,this.stopResolve?.(),!0)}get timedOut(){return"background"===this.stopReason?.kind&&this.stopReason.reason===Xe.Jg.TIMEOUT}get backgroundRequested(){return"background"===this.stopReason?.kind}get backgroundReasonValue(){return"background"===this.stopReason?.kind?this.stopReason.reason:void 0}get stopReasonValue(){return this.stopReason}async*iterate(){this.timer=setTimeout((()=>{this.stop({kind:"background",reason:Xe.Jg.TIMEOUT})}),this.timeoutMs);try{for(;;){this.pendingPromise=this.iterator.next();const e=await Promise.race([this.pendingPromise.then((e=>({kind:"result",result:e}))),this.stopPromise.then((()=>({kind:"stopped"})))]);if("stopped"===e.kind)return;if(this.pendingPromise=null,e.result.done)return;yield e.result.value}}finally{clearTimeout(this.timer)}}requestBackground(){return this.stop({kind:"background",reason:Xe.Jg.USER_REQUEST})}abort(){this.stop({kind:"abort"})}getHandoffIterator(){if(this.pendingPromise){const e=this.pendingPromise;this.pendingPromise=null;let t=!1;return{next:async()=>t?this.iterator.next():(t=!0,e)}}return this.iterator}}class rh{permissionsService;coreExecutor;ignoreService;backgroundShellManager;activeForegroundExecutions=new Map;constructor(e,t,r,n){this.permissionsService=e,this.coreExecutor=t,this.ignoreService=r,this.backgroundShellManager=n}async forceBackgroundByToolCallId(e){const t=this.activeForegroundExecutions.get(e),r=t?.requestBackground();return r?new Xe.jK({status:Xe.iA.ACCEPTED,shellResult:r}):new Xe.jK({status:Xe.iA.NOT_FOUND})}async*execute(e,t){const r={stack:[],error:void 0,hasError:!1};try{e.signal?.throwIfAborted(),function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0})}(r,(0,c.VI)(e.withName("LocalShellStreamExecutor.execute")),!1);const n=t.command;let o=t.requestedSandboxPolicy?zn(t.requestedSandboxPolicy):void 0;if(o&&"insecure_none"!==o.type){const e=await this.ignoreService.getCursorIgnoreMapping();o={...o,ignoreMapping:e}}const s=t.workingDirectory||await this.coreExecutor.getCwd(),i=Bp(t),a=(0,m.o1)(s),l=Date.now();if(!t.parsingResult)throw new Error("Parsing result is required");const u=await this.permissionsService.shouldEnforceShellInvariantBlocks(e,{workingDirectory:a,skipUnsafeWorkingDirectoryBlock:!0},o);if("block"===u.kind)return"permissionsConfig"===u.reason.type?void(yield new Xe.FI({event:{case:"permissionDenied",value:new Xe.jn({command:n,workingDirectory:a,error:"Command blocked by permissions configuration",isReadonly:u.reason.isReadonly??!1})}})):void(yield new Xe.FI({event:{case:"rejected",value:new Xe.pZ({command:n,workingDirectory:a,reason:Vn(u.reason)})}}));if(eh.info(e,"Shell stream: approval gate reached",{toolCallId:t.toolCallId,skipApproval:t.skipApproval,hasSmartModeApproval:void 0!==t.smartModeApproval,hasSmartModeApprovalReason:void 0!==t.smartModeApproval?.reason,hasSmartModeApprovalRequestId:void 0!==t.smartModeApproval?.requestId,requestedPolicyType:o?.type??"undefined",parserCommandCount:t.parsingResult?.executableCommands.length??0,classifierCommandCount:t.classifierResult?.commands.length??0,commandLength:n.length}),t.skipApproval)eh.info(e,"Shell stream: skipped local approval",{toolCallId:t.toolCallId,requestedPolicyType:o?.type??"undefined"});else{const r=await this.permissionsService.shouldBlockShellCommand(e,n,{workingDirectory:a,timeout:i,parsingResult:t.parsingResult,toolCallId:t.toolCallId,classifierResult:t.classifierResult,smartModeApprovalReason:t.smartModeApproval?.reason,smartModeApprovalRequestId:t.smartModeApproval?.requestId,hookApprovalRequirement:gt(t)},o);if("block"===r.kind){if(eh.info(e,"Shell stream: approval gate blocked command",{toolCallId:t.toolCallId,blockReasonType:r.reason.type,hasSmartModeApproval:void 0!==t.smartModeApproval,skipApproval:t.skipApproval}),"permissionsConfig"===r.reason.type)return void(yield new Xe.FI({event:{case:"permissionDenied",value:new Xe.jn({command:n,workingDirectory:a,error:"Command blocked by permissions configuration",isReadonly:r.reason.isReadonly??!1})}}));const o=Vn(r.reason);return void(yield new Xe.FI({event:{case:"rejected",value:new Xe.pZ({command:n,workingDirectory:a,reason:o})}}))}o=r.policy,eh.info(e,"Shell stream: approval gate allowed command",{toolCallId:t.toolCallId,skipApproval:t.skipApproval,effectivePolicyType:o.type})}if(Dn()&&(o=Ln(n,t.parsingResult),"insecure_none"!==o.type)){const e=await this.ignoreService.getCursorIgnoreMapping();o={...o,ignoreMapping:e}}yield new Xe.FI({event:{case:"start",value:new Xe.tD({sandboxPolicy:qn(o)})}});const d=t.timeoutBehavior===Xe._d.BACKGROUND,p=d&&!t.closeStdin&&void 0===t.smartModeApproval,h=new AbortController,f=d?h.signal:e.signal?AbortSignal.any([e.signal,h.signal]):h.signal,g=!0,v=o?{perRepo:o}:void 0,y=this.coreExecutor.execute(e,{command:n,workingDirectory:s,signal:f,toolCallId:t.toolCallId,conversationId:t.conversationId,sandboxPolicy:v,fileOutputThresholdBytes:t.fileOutputThresholdBytes,pipeStdin:p,showElapsedTime:g});let w;d||(w=setTimeout((()=>h.abort()),i));const b=d?new th(y[Symbol.asyncIterator](),i):null;let S,k,E,x="",C=!1;const _=t.toolCallId&&b?{requestBackground:()=>{if(b.requestBackground())return E=E??this.backgroundShellManager.generateShellId(),new Xe.W4({result:{case:"success",value:new Xe.QR({shellId:E,pid:k,command:n,workingDirectory:a,msToWait:Ic(Date.now()-l),backgroundReason:Xe.Jg.USER_REQUEST,interleavedOutput:x})}})}}:void 0;t.toolCallId&&_&&this.activeForegroundExecutions.set(t.toolCallId,_);const P=()=>{t.toolCallId&&this.activeForegroundExecutions.get(t.toolCallId)===_&&this.activeForegroundExecutions.delete(t.toolCallId)};let R;b&&e.signal&&e.signal.addEventListener("abort",(()=>{b.backgroundRequested||(h.abort(),b.abort())}),{once:!0});const T=t.hardTimeout;void 0!==T&&T>0&&(R=setTimeout((()=>{void 0!==E?this.backgroundShellManager.abort(E)||h.abort():(C=!0,h.abort(),b?.abort())}),T));const I=b?.iterate()??y;try{for await(const t of I)if("stdout"===t.type)x+=t.data,yield new Xe.FI({event:{case:"stdout",value:new Xe.o0({data:t.data})}});else if("stderr"===t.type)x+=t.data,yield new Xe.FI({event:{case:"stderr",value:new Xe.Db({data:t.data})}});else if("stdin_ready"===t.type)S=t.stdin,k=t.pid;else if("exit"===t.type){let r;t.aborted&&(r=e.signal?.aborted?Xe.Lv.USER_ABORT:b?.timedOut||h.signal.aborted?Xe.Lv.TIMEOUT:Xe.Lv.USER_ABORT),yield new Xe.FI({event:{case:"exit",value:new Xe.vb({code:(t.code??0)>>>0,cwd:await this.coreExecutor.getCwd(),outputLocation:t.outputLocation,aborted:t.aborted,abortReason:r,localExecutionTimeMs:Ic(t.localExecutionTimeMs)})}})}}finally{clearTimeout(w),b?.backgroundRequested||clearTimeout(R),P()}if(b?.backgroundRequested&&!C){const r=E??this.backgroundShellManager.generateShellId();E=r;const o=b.backgroundReasonValue===Xe.Jg.USER_REQUEST?Xe.Jg.USER_REQUEST:Xe.Jg.TIMEOUT,s=o===Xe.Jg.USER_REQUEST?Date.now()-l:i;await this.backgroundShellManager.adopt({ctx:e,shellId:r,command:n,workingDirectory:a,toolCallId:t.toolCallId,sandboxPolicy:v,initialOutput:x,stdin:S,pid:k,abortController:h,eventIterator:b.getHandoffIterator(),startTime:l,showElapsedTime:g,description:t.description,outputNotification:t.outputNotification}),yield new Xe.FI({event:{case:"backgrounded",value:new Xe.Y9({shellId:r,command:n,workingDirectory:a,pid:k,msToWait:g?s:void 0,reason:o})}})}else e.signal?.aborted&&void 0!==b?.stopReasonValue?(clearTimeout(R),yield new Xe.FI({event:{case:"exit",value:new Xe.vb({code:4294967295,cwd:await this.coreExecutor.getCwd(),aborted:!0,abortReason:Xe.Lv.USER_ABORT})}})):clearTimeout(R)}catch(e){r.error=e,r.hasError=!0}finally{Qp(r)}}}class nh{permissionsService;constructor(e){this.permissionsService=e}async execute(e,t){const r=await this.permissionsService.isWebFetchFullyAllowlisted(e,{url:t.url});return new Et.M({allowlisted:r})}}var oh=r("node:constants");const sh=(0,a.join)((0,i.homedir)(),".cursor","projects"),ih=(0,a.join)((0,i.homedir)(),".cursor","worktrees");function ah(e){return Nd(sh,e)&&e!==sh}function lh(e){return Nd(ih,e)&&e!==ih}function ch(e,t){const r=function(e){if(!Nd(sh,e))return;if(e===sh)return;const t=(0,a.relative)(sh,e).split(a.sep).filter(Boolean);return t.length>=2?t[1]:void 0}(e);return void 0!==r&&t.includes(r)}var uh=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const dh=(0,c.h)("LocalWriteExecutor"),ph=async(e,t,r,n)=>{const o=setTimeout((()=>{dh.warn(e,`[watchdog, LocalWriteExecutor] ${t} still not completed after ${r}ms`)}),r);try{return await n()}finally{clearTimeout(o)}};class hh{fileChangeTracker;permissionsService;pendingDecisionProvider;workspacePaths;workspacePath;worktreeMainPath;onWriteForAiTracking;constructor(e,t,r,{workspacePaths:n,workspacePath:o,worktreeMainPath:s,onWriteForAiTracking:i}){this.fileChangeTracker=e,this.permissionsService=t,this.pendingDecisionProvider=r,this.workspacePaths=n,this.workspacePath=o,this.worktreeMainPath=s,this.onWriteForAiTracking=i}async execute(e,t){const r={stack:[],error:void 0,hasError:!1};try{const n=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t}(r,(0,c.VI)(e.withName("LocalWriteExecutor.execute")),!1).ctx,o=t.path,s=t.fileText,i=t.fileBytes.length>0?t.fileBytes:void 0,l=(0,m.o1)(o,this.workspacePath),u=ch(l,["assets","agent-tools","swarm-agents"]);if((0,m.fl)({targetPath:l,workspacePaths:this.workspacePaths,mainWorktreePath:this.worktreeMainPath}))return new Qe.v3({result:{case:"error",value:new Qe.QM({path:l,error:m.PS})}});let d,p=!1;try{(await(0,En.stat)(l)).size<=mc?d=await ph(n,"readText before write",3e3,(()=>(0,m.yR)(l,t.encodingHint))):p=!0}catch{}const h=await ph(n,"permissionsService.shouldBlockWrite",3e3,(()=>this.permissionsService.shouldBlockWrite(n,l,s)));if(h){const e=await ph(n,"handleBlockReason",3e3,(()=>Gn(h,{onNeedsApproval:async(e,r)=>{const n="fileEdit"!==r?.type||r.isNewFile,o="fileEdit"===r?.type?r.diffString:s,i="fileEdit"===r?.type?r.blockReason:void 0,a=await this.pendingDecisionProvider.requestApproval({type:fc.Write,details:{path:l,reason:e,isNewFile:n,diffString:o,before:d,after:s,blockReason:i},toolCallId:t.toolCallId});return a.approved?null:new Qe.v3({result:{case:"rejected",value:new Qe.en({path:l,reason:a.reason||""})}})},onUserRejected:e=>new Qe.v3({result:{case:"rejected",value:new Qe.en({path:l,reason:e||""})}}),onPermissionDenied:(e,t)=>new Qe.v3({result:{case:"permissionDenied",value:new Qe.U7({path:l,error:e,isReadonly:t?.isReadonly??!1})}})})));if(null!==e)return e}const f=(0,a.dirname)(l);try{await ph(n,"mkdir",3e3,(()=>(0,En.mkdir)(f,{recursive:!0})))}catch(e){const t=e.code;return"EACCES"===t||"EPERM"===t?new Qe.v3({result:{case:"permissionDenied",value:new Qe.U7({path:l,directory:f,operation:"create_directory",error:"Permission denied"})}}):new Qe.v3({result:{case:"error",value:new Qe.QM({path:l,error:e.message})}})}let g,v;if(void 0!==i)g=i,v=0;else{const e=await ph(n,"getBufferForWrite",3e3,(()=>(0,m.Bh)(l,s,this.workspacePath,t.encodingHint)));g=e.buffer,v=e.lines}try{await ph(n,"writeFile",3e3,(async()=>{let e;await(0,En.writeFile)(l,g,{flush:!0});try{e=await(0,En.open)((0,a.dirname)(l),oh.O_RDONLY),await e.sync()}catch{}finally{await(e?.close())}}))}catch(e){const t=e.code;return"EACCES"===t||"EPERM"===t?new Qe.v3({result:{case:"permissionDenied",value:new Qe.U7({path:l,directory:"",operation:"create_file",error:"Permission denied"})}}):"ENOSPC"===e.code?new Qe.v3({result:{case:"noSpace",value:new Qe.bM({path:l})}}):new Qe.v3({result:{case:"error",value:new Qe.QM({path:l,error:e.message})}})}if(this.fileChangeTracker&&void 0===i&&!u&&!p){const e=t.toolCallId?{toolCallId:t.toolCallId}:void 0;await this.fileChangeTracker.trackChange(l,d,s,e)}if(this.onWriteForAiTracking&&void 0===i&&!u){const e=t.toolCallId?{toolCallId:t.toolCallId}:{};try{await this.onWriteForAiTracking({path:l,beforeContent:d,afterContent:s,metadata:e})}catch(e){dh.warn(n,"onWriteForAiTracking failed (write succeeded)",{path:l,error:e instanceof Error?e.message:String(e)})}}const y=g.byteLength;let w;if(t.returnFileContentAfterWrite)try{w=await ph(n,"readText after write",3e3,(()=>(0,m.yR)(l,t.encodingHint)))}catch{}return new Qe.v3({result:{case:"success",value:new Qe.j6({path:l,linesCreated:v,fileSize:y,...void 0!==w&&{fileContentAfterWrite:w}})}})}catch(e){r.error=e,r.hasError=!0}finally{uh(r)}}}class mh extends D{getMcpExecutionPolicyDeps(){return{permissionsService:this.permissionsService,pendingDecisionProvider:this.pendingDecisionStore}}backgroundShellExecutor;computerUseExecutor;pendingDecisionStore;fileChangeTracker;gitExecutor;ignoreService;grepProvider;permissionsService;workspacePaths;worktreeMainPath;diagnosticsProvider;mcpLease;mcpStateAccessor;cursorRulesService;cloudRulesService;subagentsService;repositoryProvider;projectDir;shellManager;_sandboxPolicyResolver;_defaultSandboxPolicy;_defaultSandboxPolicySources;mcpFileOutputThresholdBytes;backgroundShellFactory;backgroundWorkRegistry;mcpElicitationFactory;createFileWatcher;sharedRequestContextExecutor;terminalExecutor;userTerminalHint;enableRecordScreen;recordScreenArtifactsDir;recordScreenDisplay;disableRecordScreenRendering;attributionConfigProvider;isAttributionDisabledByAdmin;getAgentSkills;smartModeClassifierAutoModeEnabled;devForceNextSmartModeClassifierBlockToken;mcpMetaToolEnabled;additionalRules;askpassConfig;recordScreenExecutor;constructor(e){super(),this.pendingDecisionStore=e.pendingDecisionStore,this.fileChangeTracker=e.fileChangeTracker,this.gitExecutor=e.gitExecutor,this.ignoreService=e.ignoreService,this.grepProvider=e.grepProvider,this.permissionsService=e.permissionsService,this.workspacePaths=e.workspacePaths,this.worktreeMainPath=e.worktreeMainPath,this.diagnosticsProvider=e.diagnosticsProvider,this.mcpLease=e.mcpLease,this.mcpStateAccessor=e.mcpStateAccessor,this.cursorRulesService=e.cursorRulesService,this.cloudRulesService=e.cloudRulesService,this.subagentsService=e.subagentsService,this.repositoryProvider=e.repositoryProvider,this.projectDir=e.projectDir,this.shellManager=e.shellManager,this._sandboxPolicyResolver=e._sandboxPolicyResolver,this._defaultSandboxPolicy=e._defaultSandboxPolicy??{type:"insecure_none"};const t=e.workspacePaths[0],r=t?function(e){const t=(0,a.join)(e,".cursor/sandbox.json");try{const r=(0,s.readFileSync)(t,"utf-8"),n=JSON.parse(r),o=(0,Bn.$6)(n);return(0,Bn.l7)(o,e)}catch{return}}(t):void 0,n=e._defaultSandboxPolicySources;this._defaultSandboxPolicySources=r||n?{perUser:n?.perUser,perRepo:r??n?.perRepo,teamAdmin:n?.teamAdmin}:void 0,this.mcpFileOutputThresholdBytes=e.mcpFileOutputThresholdBytes,this.backgroundShellFactory=e.backgroundShellFactory,this.backgroundWorkRegistry=e.backgroundWorkRegistry,this.mcpElicitationFactory=e.mcpElicitationFactory,this.createFileWatcher=e.createFileWatcher,this.sharedRequestContextExecutor=e.sharedRequestContextExecutor,this.terminalExecutor=e.terminalExecutor,this.mcpMetaToolEnabled=e.mcpMetaToolEnabled??!1,this.enableRecordScreen=e.enableRecordScreen??!1,this.recordScreenArtifactsDir=e.recordScreenArtifactsDir,this.recordScreenDisplay=e.recordScreenDisplay,this.disableRecordScreenRendering=e.disableRecordScreenRendering??!1,this.userTerminalHint=e.userTerminalHint,this.attributionConfigProvider=e.attributionConfigProvider,this.isAttributionDisabledByAdmin=e.isAttributionDisabledByAdmin,this.getAgentSkills=e.getAgentSkills,this.smartModeClassifierAutoModeEnabled=e.smartModeClassifierAutoModeEnabled,this.devForceNextSmartModeClassifierBlockToken=e.devForceNextSmartModeClassifierBlockToken,this.additionalRules=e.additionalRules??[],this.askpassConfig=e.askpassConfig;const o=this.terminalExecutor??(0,Bn.Fn)({env:{CURSOR_AGENT:"1"},userTerminalHint:this.userTerminalHint});let l;if(this.workspacePaths.length>1){const e=this.workspacePaths.map((e=>(0,a.dirname)(e)));l=e.every((t=>t===e[0]))?e[0]:void 0}else l=t;let c=new Yp(o,t??(0,i.homedir)(),this.projectDir,e.shellOutputBackpressureOptions);e.shellCoreWrapper&&(c=e.shellCoreWrapper(c)),this.askpassConfig&&(c=new Xp(c,this.askpassConfig)),this.shellManager&&(c=new Zp(c,this.shellManager));const u=e.overrideShellExecutor??new Wp(this.permissionsService,c,this.ignoreService,this.pendingDecisionStore);this.register(et,Od(u));const d=e.overrideWriteExecutor??new hh(this.fileChangeTracker,this.permissionsService,this.pendingDecisionStore,{workspacePaths:this.workspacePaths,workspacePath:l,worktreeMainPath:this.worktreeMainPath,onWriteForAiTracking:e.onWriteForAiTracking});this.register(rt,Od(d)),this.register(q,Od(new vc(this.pendingDecisionStore,this.fileChangeTracker,this.permissionsService,l,e.onDeleteForAiTracking))),this.register(V,Od(new kc)),this.register(J,new ep);const p=this.mcpStateAccessor??new Fp(this.mcpLease);this.register(K,Od(new _d(this.ignoreService,this.grepProvider,this.workspacePaths,{mcpStateAccessor:p})));const h=Od(e.overrideReadExecutor??new yp(this.permissionsService,l,{mcpStateAccessor:p,useStreamingRead:e.useStreamingRead}));this.register(Ve,h),e.registerRedactedReadExecutor&&this.register(Je,h);const f=new Td(this.permissionsService,this.ignoreService,l);this.register(Fe,Od(f)),this.register(G,Od(new Md(l,this.diagnosticsProvider))),e.getCanvasDiagnostics&&this.register(W,Od(new Fl(e.getCanvasDiagnostics))),this.register(Be,Od(new rd(this.mcpLease,this.permissionsService,this.pendingDecisionStore,this.projectDir,this.mcpFileOutputThresholdBytes,this.mcpElicitationFactory))),this.register(He,Od(new nd(this.mcpLease))),this.register(We,Od(new od(this.mcpLease,l||this.projectDir,this.permissionsService,this.workspacePaths,this.pendingDecisionStore))),this.register(ze,Od(new Lp(p))),this.register(dt,Od(this.sharedRequestContextExecutor??new Up(this.cursorRulesService,this.cloudRulesService,this.subagentsService,this.repositoryProvider,this.grepProvider,f,p,this.gitExecutor,this.workspacePaths,{projectDir:this.projectDir,isWorkingDirHomeDir:(0,m.yn)(t,(0,i.homedir)()),createFileWatcher:this.createFileWatcher,warmRequestContext:e.warmRequestContext,getSandboxEnabled:e.getSandboxEnabled,getSandboxSupported:e.getSandboxSupported,getNetworkAllowlistInfo:e.getNetworkAllowlistInfo,smartModeClassifierAutoModeEnabled:this.smartModeClassifierAutoModeEnabled,devForceNextSmartModeClassifierBlockToken:this.devForceNextSmartModeClassifierBlockToken,userTerminalHint:this.userTerminalHint,getMcpFileSystemOptions:e.getMcpFileSystemOptions,mcpMetaToolEnabled:this.mcpMetaToolEnabled,artifactsFolder:e.artifactsFolder,secretRedactionEnabled:e.secretRedactionEnabled,attributionConfigProvider:this.attributionConfigProvider,isAttributionDisabledByAdmin:this.isAttributionDisabledByAdmin,getAgentSkills:this.getAgentSkills,additionalRules:this.additionalRules,getComputerUseSupported:()=>void 0!==this.computerUseExecutor}))),this.backgroundShellExecutor=new lo(this.permissionsService,c,this.ignoreService,this.projectDir,this.backgroundShellFactory,this.backgroundWorkRegistry),this.register(L,Od(this.backgroundShellExecutor));const g=new rh(this.permissionsService,c,this.ignoreService,this.backgroundShellExecutor.getManager());this.register(tt,function(e,t){const r=new Ad.q({max:10,ttl:t?.ttl});return{async*execute(t,n,o){if(!o?.execId)return void(yield*e.execute(t,n,o));const s=o.execId,i=r.get(s);if(i)return void(yield*i.fork());const a=e.execute(t,n,o),l=new m.dV(a);r.set(s,l),yield*l.fork()}}}(g)),this.register(ht,new zp(this.permissionsService)),this.register(Ge,new tp(this.permissionsService)),this.register(xt,new nh(this.permissionsService));const v=new qp(g);this.register(mt,Od(v));const y=!1===e.enableWriteBackgroundShellStdin?new Id((async()=>{throw new Error(e.writeBackgroundShellStdinDisabledReason??"write_shell_stdin is disabled for this session")})):new Id(((e,t)=>this.backgroundShellExecutor.writeStdin(e,t)));if(this.register(U,Od(y)),e.computerUseExecutor&&(this.computerUseExecutor=e.computerUseExecutor,this.register(z,Od(this.computerUseExecutor))),this.enableRecordScreen){if(!this.recordScreenArtifactsDir||!this.recordScreenDisplay)throw new Error("recordScreenArtifactsDir and recordScreenDisplay are required when enableRecordScreen is true");this.recordScreenExecutor=new kp({artifactsDir:this.recordScreenArtifactsDir,display:this.recordScreenDisplay,disablePolishedRendering:this.disableRecordScreenRendering,polishedRenderer:e.polishedRecordingRenderer}),this.register(ut,Od(this.recordScreenExecutor))}}getRecordScreenExecutor(){return this.recordScreenExecutor}async dispose(){this.backgroundShellExecutor.dispose(),this.recordScreenExecutor&&await this.recordScreenExecutor.dispose()}}function fh(e){return e.replace(/\\/g,"/")}function gh(e,t){for(const r of t){const t=fh(r);if(e===t||e.startsWith(`${t}/`))return!0}return!1}var vh;function yh(e,t){if(function(e){return Boolean(e.plugin?.trim()||e.pluginId?.trim()||e.marketplaceId?.trim())}(e))return vh.Plugin;const r=fh(e.fullPath);return gh(r,t.builtinDirs)?vh.Builtin:gh(r,t.userDirs)?vh.UserHome:(gh(r,t.workspaceDirs),vh.Workspace)}"function"==typeof SuppressedError&&SuppressedError,function(e){e[e.Builtin=0]="Builtin",e[e.UserHome=1]="UserHome",e[e.Workspace=2]="Workspace",e[e.Plugin=3]="Plugin"}(vh||(vh={}));var wh=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const bh=(0,go.debuglog)("merged-agent-skills");class Sh{services;getDisabledManagedSkillPaths;getPromptSortContext;static CHANGE_COALESCE_MS=1500;onChangeCallbacks=new Set;disposeChangeListeners;changeTimer;constructor(e,t=()=>[],r){this.services=e,this.getDisabledManagedSkillPaths=t,this.getPromptSortContext=r}async getAllAgentSkills(e){const t={stack:[],error:void 0,hasError:!1};try{const r=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t}(t,(0,c.VI)(e.withName("MergedAgentSkillsService.getAllAgentSkills")),!1),n=this.services.map((e=>e.getAllAgentSkills(r.ctx).catch((e=>(bh("Failed to load agent skills from service: %s",e instanceof Error?e.message:String(e)),[]))))),[o,s]=await Promise.all([Promise.all(n),Promise.resolve(this.getDisabledManagedSkillPaths()).catch((e=>(bh("getDisabledManagedSkillPaths rejected; fail-open: %s",e instanceof Error?e.message:String(e)),[])))]),i=o.flat(),l=new Set,u=[];for(const e of i){const t=gl(e.fullPath);l.has(t)||(l.add(t),u.push(e))}let d=u;s.length>0&&(d=u.filter((e=>!function(e,t){if(!e)return!1;const r=e.replace(/\\/g,"/");return t.some((e=>r.endsWith(e)))}(e.fullPath,s))));const p=this.getPromptSortContext;return void 0!==p?function(e,t){if(e.length<=1)return e;const r=function(e){const t=[Xa(e.userHomeDirectory).dirPath],r=el(e.userHomeDirectory,!0).map((e=>e.dirPath)),n=[];for(const t of e.workspacePaths){n.push((0,a.join)(t,".cursor","rules"));for(const e of Qa(t,!0))n.push(e.dirPath)}return{builtinDirs:t,userDirs:r,workspaceDirs:n}}(t),n=e.map(((e,t)=>({skill:e,index:t,tier:yh(e,r)})));return n.sort(((e,t)=>e.tier-t.tier||e.index-t.index)),n.map((e=>e.skill))}(d,p()):d}catch(e){t.error=e,t.hasError=!0}finally{wh(t)}}reload(e){for(const t of this.services)t.reload(e)}scheduleDidChangeSkills(){void 0===this.changeTimer&&(this.changeTimer=setTimeout((()=>{this.changeTimer=void 0;for(const e of Array.from(this.onChangeCallbacks))e()}),Sh.CHANGE_COALESCE_MS))}ensureChangeListenersRegistered(){void 0===this.disposeChangeListeners&&(this.disposeChangeListeners=this.services.map((e=>e.onDidChangeSkills((()=>this.scheduleDidChangeSkills())))))}disposeChangeListenersIfUnused(){if(!(this.onChangeCallbacks.size>0||void 0===this.disposeChangeListeners)){for(const e of this.disposeChangeListeners)e();this.disposeChangeListeners=void 0,void 0!==this.changeTimer&&(clearTimeout(this.changeTimer),this.changeTimer=void 0)}}onDidChangeSkills(e){return this.onChangeCallbacks.add(e),this.ensureChangeListenersRegistered(),()=>{this.onChangeCallbacks.delete(e),this.disposeChangeListenersIfUnused()}}dispose(){if(void 0!==this.changeTimer&&(clearTimeout(this.changeTimer),this.changeTimer=void 0),this.onChangeCallbacks.clear(),void 0!==this.disposeChangeListeners){for(const e of this.disposeChangeListeners)e();this.disposeChangeListeners=void 0}for(const e of this.services)e.dispose()}}const kh=(0,c.h)("skill-sync-manifest"),Eh=".sync-manifest.json";async function xh(e,t){try{const r=await(0,En.readFile)((0,a.join)(e,Eh),"utf-8"),n=JSON.parse(r);return function(e){if("object"!=typeof e||null===e||Array.isArray(e))return!1;const t=e;return"number"==typeof t.version&&"object"==typeof t.skills&&null!==t.skills&&!Array.isArray(t.skills)&&(void 0===t.lastInventoryAt||"number"==typeof t.lastInventoryAt)}(n)?n:(kh.warn(t,"Manifest failed schema validation, resetting",{skillDir:e}),{version:1,skills:{}})}catch(r){return r instanceof Error&&"ENOENT"===r.code||kh.warn(t,"Failed to read sync manifest, resetting",{skillDir:e,error:String(r)}),{version:1,skills:{}}}}function Ch(e,t,r){e.skills[t]={lastSyncedAt:r}}function _h(e,t){delete e.skills[t]}var Ph=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const Rh=(0,c.h)("builtin-skills-sync");function Th(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function Ih(e){const t=mo(e.content),r=Th(t.data)?t.data:{};return mo.stringify(`${t.content.trim()}\n`,function(e,t){const r={...t??{},name:e.id,description:e.description};delete r.disabledEnvironments,e.disableModelInvocation?r["disable-model-invocation"]=!0:delete r["disable-model-invocation"],e.environments&&e.environments.length>0?r.environments=e.environments:delete r.environments,e.disabledEnvironments&&e.disabledEnvironments.length>0?r["disabled-environments"]=e.disabledEnvironments:delete r["disabled-environments"];const n={...Th(r.metadata)?r.metadata:{}};return delete n.environments,delete n.disabledEnvironments,delete n["disabled-environments"],Object.keys(n).length>0?r.metadata=n:delete r.metadata,r}(e,r))}async function Ah(e,t,r){const n=(0,a.join)(t,r.id),o=(0,a.join)(n,"SKILL.md"),s=r.fileContent;try{if(await(0,En.readFile)(o,"utf-8")===s)return!1}catch(t){t instanceof Error&&"ENOENT"===t.code||Rh.warn(e,"Unexpected error reading skill file",{skillId:r.id,error:String(t)})}return await(0,En.mkdir)(n,{recursive:!0}),await(0,En.writeFile)(o,s,"utf-8"),!0}async function Oh(e,t){try{return(await(0,En.readdir)(t,{withFileTypes:!0})).filter((e=>e.isDirectory())).map((e=>e.name))}catch(r){return r instanceof Error&&"ENOENT"===r.code||Rh.warn(e,"Failed to list skills directory, skipping cleanup",{skillDir:t,error:String(r)}),[]}}async function Dh(e,t={}){const r={stack:[],error:void 0,hasError:!1};try{const o=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t}(r,(0,c.VI)(e.withName("syncBuiltinSkills")),!1).ctx,s=Date.now(),l=(0,a.join)((0,i.homedir)(),".cursor","skills-cursor");await(0,En.mkdir)(l,{recursive:!0});const[u,d]=await Promise.all([xh(l,o),Oh(o,l)]),p=u.lastInventoryAt;(void 0===p||s-p>=864e5)&&(await async function(e,t,r,n){try{const o=await Promise.all(r.map((async e=>{const r=(0,a.join)(t,e),[o,s]=await Promise.all([Mh((0,a.join)(r,"SKILL.md")),"canvas"===e?Mh((0,a.join)(r,"sdk")):Promise.resolve(!1)]);return{skill_id:e,has_skill_md:o,has_sdk_dir:s,last_synced_at:n.skills[e]?.lastSyncedAt??null}})));Rh.info(e,"managed_skills.startup_inventory",{skills_on_disk:o,manifest_present:Object.keys(n.skills).length>0})}catch(t){Rh.warn(e,"Failed to emit managed skills startup inventory",{error:String(t)})}}(o,l,d,u),u.lastInventoryAt=s);const h=new Map;for(const e of t.managedSkills??[])(n=e.id)&&n===n.trim()&&!(n.includes("..")||n.includes("/")||n.includes("\\"))?h.set(e.id,e):Rh.warn(o,"Skipping managed skill with unsafe id",{skillId:e.id});const m=new Set([...h.keys(),...d]);let f=0,g=0;const v=[];for(const e of m)try{const t=h.get(e),r=u.skills[e],n=r?s-r.lastSyncedAt:0,i=void 0!==r&&n>2592e5;if(t&&!1!==t.enabled)await Ah(o,l,{id:e,fileContent:Ih(t)})?f++:g++,Ch(u,e,s);else if(!1===t?.enabled||i){const n=!1===t?.enabled?"enabled_false":"grace_expired";await(0,En.rm)((0,a.join)(l,e),{recursive:!0,force:!0}),_h(u,e),v.push(e),Rh.info(o,"managed_skills.removed",{skill_id:e,reason:n,server_enabled:t?.enabled??null,had_manifest_entry:void 0!==r,last_synced_ms_ago:r?s-r.lastSyncedAt:null})}else r||Ch(u,e,s)}catch(t){Rh.warn(o,"Failed to apply skill, will retry next sync",{skillId:e,error:String(t)})}try{await async function(e,t){const r=(0,a.join)(e,".sync-manifest.json.tmp"),n=(0,a.join)(e,Eh);await(0,En.writeFile)(r,JSON.stringify(t,null,2),"utf-8"),await(0,En.rename)(r,n)}(l,u)}catch(e){Rh.warn(o,"Failed to persist sync manifest",{skillDir:l,error:String(e)})}return{synced:f,upToDate:g,removed:v}}catch(e){r.error=e,r.hasError=!0}finally{Ph(r)}var n}async function Mh(e){try{return await(0,En.stat)(e),!0}catch(e){const t=e.code;if("ENOENT"===t||"ENOTDIR"===t)return!1;throw e}}const jh=(0,c.h)("managed-skills-sync");function Nh(e){try{const t=new URL(e),r=new URL(t.pathname,t.origin);return r.search=t.search,r.pathname.endsWith("/")&&r.pathname.length>1&&(r.pathname=r.pathname.slice(0,-1)),"/"===r.pathname?r.origin+r.search:r.toString()}catch{return e.toLowerCase().trim()}}class $h{pluginsService;constructor(e){this.pluginsService=e}async getPluginMcpServers(){const e=await this.pluginsService.reload(),t=[];for(const r of e){const e="marketplace"in r.identifier.sourceInfo?r.identifier.sourceInfo.marketplace:void 0,n="marketplaceDbId"in r.identifier.sourceInfo?r.identifier.sourceInfo.marketplaceDbId:void 0,o=r.identifier.sourceInfo.name,s="pluginDbId"in r.identifier.sourceInfo?r.identifier.sourceInfo.pluginDbId:void 0,i=r.mcpConfig;i&&t.push(...bs(i,e,n,o,s,r.identifier.source))}return function(e){const t=[],r=new Set;for(const n of e){if("streamableHttp"!==n.type||!n.url){t.push(n);continue}const e=Nh(n.url);r.has(e)||(r.add(e),t.push(n))}return t}(t)}}var Fh=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});class Lh{workspacePaths;userHomeDirectory;getSettings;marketplaceOptions;localPluginVariablesLookup;plugins=[];_loadFailures=[];loadPromise;loadedOnce=!1;pluginLogger;_extensionPlugins=new Map;_extensionPluginOriginalPaths=new Map;constructor(e,t,r,n,o,s){this.workspacePaths=e,this.userHomeDirectory=t,this.getSettings=r,this.marketplaceOptions=n,this.localPluginVariablesLookup=s,this.pluginLogger=o??yo,this.reload()}async getAllEnabledPlugins(){return await this.ensureLoaded(),[...this.plugins]}getLoadFailures(){return[...this._loadFailures]}async reload(){return this.loadPromise||(this.loadPromise=this.load().then((async e=>{let t=[];try{t=await this._reloadExtensionPlugins()}catch(e){this.pluginLogger.log("error",`Failed to reload extension plugins after base load success: ${e}`)}const r=new Set(e.plugins.map((e=>e.installPath))),n=t.filter((e=>!r.has(e.installPath)));return this.plugins=[...e.plugins,...n],this._loadFailures=e.failures,this.loadedOnce=!0,this.pluginLogger.log("info",`Plugins reload completed: ${this.plugins.length} plugins loaded (${n.length} extension), ${e.failures.length} failures`),this.plugins})).catch((async e=>{this.pluginLogger.log("error",`Failed to load plugins: ${e}`);try{const e=await this._reloadExtensionPlugins();this.plugins=[...e]}catch(e){this.pluginLogger.log("error",`Failed to reload extension plugins after base load failure: ${e}`),this.plugins=[]}return this._loadFailures=[],this.loadedOnce=!0,this.plugins})).finally((()=>{this.loadPromise=void 0}))),this.loadPromise}async registerExtensionPlugin({path:e,extensionId:t}){const r=(0,a.resolve)(e),n=await(0,En.realpath)(r);if(!(await(0,En.stat)(n)).isDirectory())throw new Error(`Extension plugin path is not a directory: ${n}`);const o=i.homedir();if(n.split(a.sep).filter(Boolean).length<3||n===o||"/"===n)throw new Error(`Extension plugin path is too broad (must be a specific subdirectory, not root or home): ${n}`);for(const[e,r]of this._extensionPlugins)if(e!==t&&r.has(n))throw new Error(`Plugin path ${n} is already registered by extension ${e}`);let s=this._extensionPlugins.get(t);if(s||(s=new Map,this._extensionPlugins.set(t,s)),s.has(n))return void this._rememberExtensionPluginOriginalPath({extensionId:t,originalPath:r,canonicalPath:n});const l=(0,a.basename)(n),c=await this._loadExtensionPluginContent(n,t);s.set(n,c),this._rememberExtensionPluginOriginalPath({extensionId:t,originalPath:r,canonicalPath:n}),this.pluginLogger.log("info",`Registered extension plugin: ${l} from ${n} (extension: ${t})`)}async unregisterExtensionPlugin({path:e,extensionId:t}){const r=this._extensionPlugins.get(t);if(!r)return!1;const n=(0,a.resolve)(e);let o;try{o=await(0,En.realpath)(n)}catch{const e=this._extensionPluginOriginalPaths.get(t);o=e?.get(n)??n}const s=r.delete(o);return 0===r.size?(this._extensionPlugins.delete(t),this._extensionPluginOriginalPaths.delete(t)):s&&this._forgetExtensionPluginOriginalPath(t,o),s&&this.pluginLogger.log("info",`Unregistered extension plugin: ${o} (extension: ${t})`),s}async _loadExtensionPluginContent(e,t){const r=(0,a.basename)(e),n={name:r,localPath:e,extensionId:t},o=await pa(e,r,{name:r,version:"0.0.0"});return o.displayName&&(n.name=o.displayName),{identifier:{source:"extension",sourceInfo:n},installPath:e,...void 0!==o.displayName&&{displayName:o.displayName},...void 0!==o.description&&{description:o.description},...void 0!==o.authorName&&{authorName:o.authorName},skills:o.skills,rules:o.rules,agents:o.agents,commands:o.commands,mcpConfig:o.mcpConfig??void 0,hooks:o.hooks}}_rememberExtensionPluginOriginalPath(e){let t=this._extensionPluginOriginalPaths.get(e.extensionId);t||(t=new Map,this._extensionPluginOriginalPaths.set(e.extensionId,t)),t.set(e.originalPath,e.canonicalPath)}_forgetExtensionPluginOriginalPath(e,t){const r=this._extensionPluginOriginalPaths.get(e);if(r){for(const[e,n]of r)n===t&&r.delete(e);0===r.size&&this._extensionPluginOriginalPaths.delete(e)}}_getExtensionPluginPaths(){const e=[];for(const[t,r]of this._extensionPlugins)for(const n of r.keys())e.push({canonicalPath:n,extensionId:t});return e}async _reloadExtensionPlugins(){const e=this._getExtensionPluginPaths(),t=[];for(const{canonicalPath:r,extensionId:n}of e)try{const e=await this._loadExtensionPluginContent(r,n),o=this._extensionPlugins.get(n);o&&o.set(r,e),t.push(e)}catch(e){this.pluginLogger.log("error",`Failed to reload extension plugin ${r}: ${e}`);const o=this._extensionPlugins.get(n),s=o?.get(r);s&&t.push(s)}return t}async ensureLoaded(){this.loadPromise?await this.loadPromise:this.loadedOnce||await this.reload()}async load(){const e={stack:[],error:void 0,hasError:!1};try{const n=(0,c.q6)().withName("LocalPluginsService.load"),o=(function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0})}(e,(0,c.VI)(n),!1),performance.now()),s=e=>{this.pluginLogger.increment(`local_plugins_service.load.${e}`,1),this.pluginLogger.distribution("local_plugins_service.load.duration",performance.now()-o,{outcome:e})},i=this.getSettings(),a=(t=this.marketplaceOptions,r=this.userHomeDirectory,void 0===t?[]:(Array.isArray(t)?t:[t]).map((e=>({...e,userHomeDir:r})))),l=i.importThirdPartyPlugins,u=i.loadUserLocalPlugins??!0,d=i.loadUserSettingsPlugins??!1,p=i.loadCursorFirstParty??a.length>0;if(!(l||p||u||d))return this.pluginLogger.log("info","Skipping plugin loading, cursor 1p, 3p, user-local, and user-settings plugins are disabled"),{plugins:[],failures:[]};this.pluginLogger.increment("local_plugins_service.load.start",1);const h=this.workspacePaths[0]??void 0,m=(e,t)=>{this.pluginLogger.increment("local_plugins_service.load_plugin.error",1),this.pluginLogger.log("error",`Cursor plugin load error ${e.name}@${e.version}: ${t?.message??String(t)}`)};try{const e=await ga(h,{userHomeDir:this.userHomeDirectory,loadClaude:l,loadUserLocal:u,loadUserSettings:d,loadCursorFirstParty:p&&a.length>0,marketplaceSources:a.length>0?a.map((e=>({...e,onCursorError:m}))):void 0,onError:(e,t)=>{this.pluginLogger.log("error",`Claude plugin load error ${e.raw}: ${t?.message??String(t)}`)},log:this.pluginLogger,localPluginVariablesLookup:this.localPluginVariablesLookup});return s("success"),this.pluginLogger.log("info",`Plugins loaded in ${(performance.now()-o).toFixed(1)}ms`),e}catch(e){return s("error"),this.pluginLogger.log("error",`Failed to load all plugins: ${e}`),{plugins:[],failures:[]}}}catch(t){e.error=t,e.hasError=!0}finally{Fh(e)}var t,r}}var Uh=r("../../node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/patch/create.js");function Bh(e,t,r){return{resolvedPath:e,originalPath:t,resolution:r}}function Hh(e){switch(e.code){case"ENOENT":return{status:"newFile"};case"EACCES":case"EPERM":return{status:"permissionDenied",errno:e.code};case"ELOOP":return{status:"symlinkLoop",errno:e.code};default:return{status:"unknownError",errno:e.code??"UNKNOWN",message:e.message}}}async function Wh(e,t){const r=(0,m.o1)(e,t);try{return Bh(await(0,En.realpath)(r),r,{status:"resolved"})}catch(e){const t=e;if("ENOENT"!==t.code)return Bh(r,r,Hh(t));try{if((await(0,En.lstat)(r)).isSymbolicLink()){let e=null;try{e=await(0,En.readlink)(r)}catch{}return Bh(r,r,{status:"danglingSymlink",symlinkTarget:e})}return Bh(r,r,{status:"unknownError",errno:"ENOENT",message:"realpath returned ENOENT but lstat found a non-symlink entry"})}catch(e){const t=e;return"ENOENT"===t.code?async function(e){let t=(0,a.dirname)(e);const r=[(0,a.basename)(e)];for(;(0,a.dirname)(t)!==t;){try{const n=await(0,En.realpath)(t);return Bh((0,a.join)(n,...r),e,{status:"newFile"})}catch(t){const r=t;if("ENOENT"!==r.code)return Bh(e,e,Hh(r))}r.unshift((0,a.basename)(t)),t=(0,a.dirname)(t)}return Bh(e,e,{status:"newFile"})}(r):Bh(r,r,Hh(t))}}}function zh(e){return"resolved"===e.status||"newFile"===e.status}function qh(e,t){switch(t.status){case"resolved":case"newFile":return"";case"danglingSymlink":return`Write blocked: \`${e}\` is a dangling symlink${t.symlinkTarget?` (target: ${t.symlinkTarget})`:""}. Cannot verify it does not point to a protected file.`;case"permissionDenied":return`Write blocked: cannot verify \`${e}\` -- permission denied resolving symlinks (${t.errno}).`;case"symlinkLoop":return`Write blocked: \`${e}\` has a symlink loop (${t.errno}). Cannot verify target.`;case"unknownError":return`Write blocked: cannot verify \`${e}\` -- ${t.errno}: ${t.message}.`;default:return`Write blocked: unknown resolution status for \`${e}\`.`}}var Gh=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t},Vh=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});const Jh=(0,c.h)("permissions-service"),Kh=(0,p.Pu)("local_exec.permissions.mcp_allowlist_check.result",{description:"Result of MCP allowlist checks at user and team levels per tool call.",labelNames:["allowlist_scope","outcome"]});function Yh(e,t,r){return`${e} blocked: cannot verify ${t} \`${r}\` while resolving symlinks. This can happen when access is denied or the path contains a symlink loop.`}function Zh(e){return[...new Set(e)]}function Xh(){return{fdTargets:new Map([[0,"original-stdin"],[1,"original-stdout"],[2,"original-stderr"]])}}function Qh({basePath:e,targetPath:t,pathModule:r}){const n=r.resolve(e),o=r.resolve(t),s=r.relative(n,o);return""===s||".."!==s&&!s.startsWith(`..${r.sep}`)&&!r.isAbsolute(s)}function em(e){return">"===e||">>"===e||">|"===e||"&>"===e||"&>>"===e}function tm(e){if(void 0===e||e.trim()!==e)return;const t=Number(e);return Number.isInteger(t)&&t>=0?t:void 0}function rm(e){return"<<"===e.operator&&"heredoc_redirect"===e.targetNodeType&&1===e.destinationFds.length&&0===Number(e.destinationFds[0])&&void 0!==e.targetText&&(0,Bn.Nl)(e.targetText)}async function nm({targetText:e,workingDirectory:t,rootDirectories:r,resolvePathForPermissions:n,pathModule:o,tempPathOptions:s}){if(""!==o.parse(e).root&&!o.isAbsolute(e))return;const i=await n(e,t);if(zh(i.resolution)){for(const e of r){const t=await n(e);if(zh(t.resolution)&&Qh({basePath:t.resolvedPath,targetPath:i.resolvedPath,pathModule:o}))return"workspace-file"}return um(i.resolvedPath,s)?"tmp-file":void 0}}function om(e){return Zh(e.map((e=>e.trim())).filter(Boolean))}function sm(e){const t=e.name.trim();if(!t)return[];const r=e.arguments.map((e=>e.trim())).filter(Boolean),n=r.length>0?`${t} ${r.join(" ")}`:t,o=e.subcommandTokens.map((e=>e.trim())).filter(Boolean);if(0===o.length)return[n];const s=`${t} ${o.join(" ")}`;return s===n?[n]:[n,s]}function im(e,t){const r=t.trim();return!!r&&e.some((e=>e===r||e.startsWith(`${r} `)))}function am(e){const t=e.name.trim(),r=e.arguments.map((e=>e.trim())).filter(Boolean).map((e=>new Xe.r6({type:"word",value:e})));return new Xe.Pv({name:t,args:r,fullText:[t,...r.map((e=>e.value))].join(" ").trim()})}function lm(e,t={}){return{type:e,...t}}function cm(e){const t=e.match(/^\s*(Shell|Bash)\s*\((.*)\)\s*$/);if(!t)return null;const r=t[1],n=t[2]?.trim()??"",o=n.indexOf(":");return-1!==o?{shellType:r,fullPattern:n,commandPattern:n.slice(0,o).trim(),argsPattern:n.slice(o+1).trim()}:{shellType:r,fullPattern:n,commandPattern:n,argsPattern:null}}function um(e,{platform:t,env:r,pathModule:n}){if("win32"===t){const t=r.TEMP??r.TMP;if(t){const r=n.normalize(t).toLowerCase(),o=n.normalize(e).toLowerCase(),s=r.endsWith(n.sep)?r:r+n.sep;return o===r||o.startsWith(s)}return!1}return"darwin"===t?["/tmp/","/private/tmp/","/var/folders/","/private/var/folders/"].some((t=>e.startsWith(t))):["/tmp/","/private/tmp/","/var/folders/","/private/var/folders/","/var/tmp/"].some((t=>e.startsWith(t)))}function dm(e,t){if("insecure_none"===t.type)return!0;if("insecure_none"===e.type)return!1;const r=(0,Bn.$b)(e.networkPolicy),n=(0,Bn.$b)(t.networkPolicy);if(r&&!n)return!1;const o=(0,Bn._B)(e.networkPolicy),s=(0,Bn._B)(t.networkPolicy);return!(o&&n&&!s)&&("workspace_readonly"===e.type&&"workspace_readwrite"===t.type||e.type===t.type)}class pm{command;requestedPolicy;state;matchForms;constructor(e,t,r,n){this.command=e,this.requestedPolicy=t;const o=void 0!==r&&dm(t,r);this.state=o?"preapproved":"approvable";const s=[e.fullText.trim()].filter(Boolean);this.matchForms=n&&n.length>0?[...n]:s}approveWithPolicy(e){"approvable"!==this.state&&"preapproved"!==this.state||!dm(this.requestedPolicy,e)||(this.state="allowlisted")}deny(){this.state="denied"}isRunnable(){return"preapproved"===this.state||"allowlisted"===this.state}}function hm(e){return e?.type??"undefined"}class mm{ignoreService;pendingDecisionStore;permissionsProvider;teamSettingsService;adminNetworkControlsEnabled;rootDirectories;perUserSandboxConfigPath;mcpAllowlistLog;constructor(e,t,r,n,o,s=!1,l){this.ignoreService=e,this.pendingDecisionStore=t,this.permissionsProvider=r,this.teamSettingsService=n,this.adminNetworkControlsEnabled=s,this.rootDirectories=Array.isArray(o)?o:[o??process.cwd()],this.perUserSandboxConfigPath=l?.perUserSandboxConfigPath??(0,a.join)((0,i.homedir)(),".cursor","sandbox.json"),this.mcpAllowlistLog=l?.mcpAllowlistLog}async shouldBlockRead(e,{cursorIgnoreChecked:t=!1}={}){const r=(0,m.o1)(e),n=await $a(r);return null===n?{type:"unsafeResolution",message:Yh("Read","path",r)}:await this.ignoreService.isRepoBlocked(n)?{type:"adminBlock",source:"Team repo blocklist"}:await this.isPathExplicitlyDenied("Read",r)?{type:"permissionsConfig"}:!ah(n)&&!lh(n)&&(!t&&await this.ignoreService.isCursorIgnored(n)?{type:"cursorIgnore"}:(await this.isPathExplicitlyAllowed("Read",r),!1))}async shouldBlockWrite(e,t,r){const n={stack:[],error:void 0,hasError:!1};try{Gh(n,(0,c.VI)(e.withName("InteractivePermissionsService.shouldBlockWrite")),!1).ctx;const o=await Wh(t);if(!zh(o.resolution))return{type:"unsafeResolution",message:qh(o.originalPath,o.resolution)};const s=o.resolvedPath,u=s;if(await this.ignoreService.isRepoBlocked(u))return{type:"adminBlock",source:"Team repo blocklist"};if(await this.isPathExplicitlyDenied("Write",s))return{type:"permissionsConfig"};const d=o.originalPath.split(a.sep).pop()?.toLowerCase()??"",p=s.split(a.sep).pop()?.toLowerCase()??"";if(".cursorignore"===d||".cursorignore"===p)return{type:"permissionsConfig"};const h=ah(u),f=lh(u),g=!h&&!f&&await this.ignoreService.isCursorIgnored(u);if(h||f);else if(g)return{type:"cursorIgnore"};if(await this.isPathExplicitlyAllowed("Write",s))return!1;if(function(e){const t=e.replace(/\\/g,"/");return/(^|\/)\.cursor\/debug(?:-[a-zA-Z0-9-]+)?\.log$/i.test(t)}(s))return!1;const v=await this.getPermissions();if("workspace_readonly"===v.userConfiguredPolicy.type)return{type:"permissionsConfig",isReadonly:!0};if("unrestricted"===v.approvalMode)return!1;const y="win32"===process.platform||"darwin"===process.platform;for(const e of this.rootDirectories){const t=await Wh(e);if(!zh(t.resolution))continue;const r=t.resolvedPath;if(y?s.toLowerCase()===r.toLowerCase()||s.toLowerCase().startsWith(r.toLowerCase()+a.sep):s===r||s.startsWith(r+a.sep)){const e=(0,a.relative)(r,s).split(a.sep).map((e=>"win32"===process.platform&&e.includes(":")?e.split(":")[0]:e)),t=await this.checkCursorFileProtection(e);if(t)return t;break}}const w=async()=>{let e=!1,t="";try{t=await(0,m.yR)(s),e=!1}catch{e=!0}let n="";if(e)n=r;else{const e=e=>e.endsWith("\n")?e:`${e}\n`,{hunks:o}=(0,Uh.YB)("a","b",e(t),e(r),"","",{context:2});n=o.map((e=>e.lines.map((e=>e.length>0?`${e[0]} ${e.slice(1)}`:e)).join("\n"))).join("\n...\n")}return{isNewFile:e,diffString:n}};let b,S=!1;for(const e of this.rootDirectories){const t=await Wh(e);if(!zh(t.resolution))continue;const r=t.resolvedPath;if(s.toLowerCase().startsWith(r.toLowerCase())){S=!0,b=r;break}}const k=S?void 0:function(e){if(!lh(e))return;const t=(0,a.relative)(ih,e).split(a.sep).filter(Boolean);return 0!==t.length?(0,a.join)(ih,t[0]):void 0}(s);if(!S&&void 0===k){if(function(e){return um(e,{platform:process.platform,env:process.env,pathModule:l})}(s))return!1;if(ch(s,["assets","agent-notes","agent-tools","swarm-agents"]))return!1;const e=`${(0,i.homedir)()}${a.sep}.cursor${a.sep}`;if(s.startsWith(e)){const e=s.split(a.sep).pop()?.toLowerCase()??"";if(e.endsWith(".md")||e.endsWith(".mdc")||".cursorrules"===e)return!1}const{isNewFile:t,diffString:r}=await w();return{type:"needsApproval",approvalReason:"Out of workspace",approvalDetails:{type:"fileEdit",isNewFile:t,diffString:r,blockReason:"outOfWorkspace"}}}const E=b??k,x=s;let C=(0,a.relative)(E,x).split(a.sep);if(C=C.map((e=>"win32"===process.platform&&e.includes(":")?e.split(":")[0]:e)),"win32"===process.platform&&C.some((e=>e.includes("~")))){const{isNewFile:e,diffString:t}=await w();return{type:"needsApproval",approvalReason:`Protected config file: ${C[C.length-1]??""}`,approvalDetails:{type:"fileEdit",isNewFile:e,diffString:t,blockReason:"protectedConfig"}}}if(await(0,Bn.OK)(s,E)){const e=C[C.length-1]?.toLowerCase()??"",{isNewFile:t,diffString:r}=await w();return{type:"needsApproval",approvalReason:`Protected config file: ${e}`,approvalDetails:{type:"fileEdit",isNewFile:t,diffString:r,blockReason:"protectedConfig"}}}return await this.checkCursorFileProtection(C)||!1}catch(e){n.error=e,n.hasError=!0}finally{Vh(n)}}async shouldEnforceShellInvariantBlocks(e,t,r){const n=await $a(t.workingDirectory);if(null===n){if(!0!==t.skipUnsafeWorkingDirectoryBlock)return{kind:"block",reason:{type:"unsafeResolution",message:Yh("Command","working directory",t.workingDirectory)}}}else if(await this.ignoreService.isRepoBlocked(n))return{kind:"block",reason:{type:"adminBlock",source:"Team repo blocklist"}};const o=(await this.getPermissions()).userConfiguredPolicy,s=r??o;return"workspace_readonly"===o.type&&"workspace_readonly"!==s.type?{kind:"block",reason:{type:"permissionsConfig",isReadonly:!0}}:{kind:"allow"}}async shouldBlockShellCommand(e,t,r,n){const o=await this.shouldEnforceShellInvariantBlocks(e,{workingDirectory:r.workingDirectory},n);if("block"===o.kind)return o;const s=await this.getPermissions(),i=s.approvalMode,a="unrestricted"===i,c=s.userConfiguredPolicy,u=!s.dashboardTerminalAllowlistOverriddenByPermissionsFile;if(Jh.info(e,"Shell permissions: evaluating shell command",{toolCallId:r.toolCallId,approvalMode:i,userConfiguredPolicyType:hm(c),requestedPolicyType:hm(n),effectiveRequestedPolicyType:hm(n??c),smartAllowlistEnabled:!0===s.smartAllowlistEnabled,hasSmartModeApprovalReason:void 0!==r.smartModeApprovalReason,hasSmartModeApprovalRequestId:void 0!==r.smartModeApprovalRequestId,hookForcesPrompt:vt(r.hookApprovalRequirement),classifierClassificationFailed:!0===r.classifierResult?.classificationFailed,classifierCommandCount:r.classifierResult?.commands.length??0,parserCommandCount:r.parsingResult.executableCommands.length,parsingFailed:r.parsingResult.parsingFailed,hasRedirects:r.parsingResult.hasRedirects,commandLength:t.length}),await this.shouldPromptForEmptyPlainShellAllowlist(t,s))return Jh.info(e,"Shell permissions: prompting for empty allowlist",{toolCallId:r.toolCallId,approvalMode:i,userConfiguredPolicyType:hm(c),requestedPolicyType:hm(n),hasSmartModeApprovalReason:void 0!==r.smartModeApprovalReason,hasSmartModeApprovalRequestId:void 0!==r.smartModeApprovalRequestId}),await this.requestApprovalForEmptyShellAllowlist(t,r,n??c);const d=r.parsingResult.executableCommands,p=r.parsingResult.hasRedirects,h=!0===r.parsingResult.allRedirectsAreDevNull,f=r.parsingResult.parsingFailed,g=r.classifierResult,v=r.smartModeApprovalReason,y=r.smartModeApprovalRequestId,w=void 0!==g&&!g.classificationFailed&&g.commands.length>0?g:void 0,b="allowlist"===i&&s.smartAllowlistEnabled?w?.commands:void 0,S=void 0!==b,k=b?b.map(am):d,E=void 0!==b?b.map(sm):k.map((e=>[e.fullText.trim()].filter(Boolean))),x=void 0!==w?w.commands.map(sm):E;if(n||(n=s.userConfiguredPolicy),"insecure_none"!==n.type&&void 0===n.skipStatsigDefaults&&"insecure_none"!==c.type&&(n={...n,skipStatsigDefaults:c.skipStatsigDefaults??!0}),"insecure_none"!==c.type&&(0,Bn.$b)(c.networkPolicy)&&"insecure_none"!==n.type&&!(0,Bn._B)(n.networkPolicy)){const e=c.networkPolicy,t=n.networkPolicy?.allow;if(void 0!==t&&t.length>0&&e){const r=[...new Set([...e.allow??[],...t])];n={...n,networkPolicy:{...e,allow:r}}}else n={...n,networkPolicy:e}}g&&Jh.info(e,"Smart allowlist: classifier result received",{classificationFailed:g.classificationFailed,suggestedSandboxMode:g.suggestedSandboxMode,commandCount:g.commands.length,suggestedAllowlistEntryCount:g.commands.filter((e=>e.suggestedAllowlistEntry)).length});let C=!1;const _=[],P=[];let R=[],T=[],I=[];const A=om(s.smartAllowlistDenylist??[]);if(A.length>0){T=[];const t=x.map((e=>e[0]??""));for(let e=0;e<x.length;e++){const r=x[e];if(r&&0!==r.length&&A.some((e=>im(r,e)))){const r=t[e];r&&T.push(r)}}T.length>0&&(Jh.info(e,"Command blocklist: commands require approval",{count:T.length}),_.push(`In blocklist: ${T.join(", ")}`))}if(S&&g){const t=E.map((e=>e[0]??"")),r=s.allow.filter((e=>this.isShellEntry(e)));Jh.info(e,"Smart allowlist: checking commands against lists",{commandCount:t.length,allowlistCount:r.length,commandBlocklistCount:A.length});const n=E.map((e=>r.some((t=>e.some((e=>this.matchesShell(t,e))))))),o=n.every(Boolean),i=[];for(let e=0;e<g.commands.length;e++){if(n[e])continue;const t=g.commands[e];t&&i.push(t)}if(R=om(i.flatMap((e=>function(e){const t=e.name.trim();if(!t)return[];const r=e.subcommandTokens.map((e=>e.trim())).filter(Boolean),n=e.arguments.map((e=>e.trim())).filter(Boolean),o=[t],s=[t];for(const e of r)s.push(e),o.push(s.join(" "));const i=[t,...n].join(" ");return o.includes(i)||o.push(i),om(o)}(e)))),I=i.map((e=>e.suggestedAllowlistEntry)).filter((e=>"string"==typeof e)).filter((e=>R.includes(e))),R.length>0){const e=(0,m.To)(R,I),t=e.length>0?e.join(", "):R.join(", ");P.push(`Not in allowlist: ${t}`)}C=o&&0===T.length,C&&Jh.info(e,"Smart allowlist: all commands in allowlist, will check security",{commandCount:t.length})}const O="ask-every-time"===i||"insecure_none"===n.type&&"allowlist"===i?void 0:c,D=k.map(((e,t)=>new pm(e,n,O,E[t])));if((0===k.length||f&&!S)&&!a){Jh.info(e,"Shell permissions: prompting after parser miss",{toolCallId:r.toolCallId,approvalMode:i,requestedPolicyType:hm(n),userConfiguredPolicyType:hm(c),isSmartAllowlistActive:S,parsingFailed:f,parserCommandCount:k.length,hasSmartModeApprovalReason:void 0!==v,hasSmartModeApprovalRequestId:void 0!==y});const o={type:fc.Shell,toolCallId:r.toolCallId,details:{command:t,workingDirectory:r.workingDirectory,timeout:r.timeout,reason:v??(f?"Parser failed to parse command (possible bypass)":"Parser found no commands (possible bypass)"),isSandboxAvailable:!1,isSandboxEnabled:!1,canAllowlist:!1,notAllowedCommands:[],smartModeApprovalReason:v,smartModeApprovalRequestId:y}},s=await this.pendingDecisionStore.requestApproval(o);return s.approved?{kind:"allow",policy:await this.applyServerAndAdminPolicies(n)}:{kind:"block",reason:{type:"userRejected",reason:s.reason}}}if(await this.hasHardDeny(e,D))return{kind:"block",reason:{type:"permissionsConfig"}};const M=await this.teamSettingsService.getAutoRunControls(),j={type:"insecure_none"};for(const e of D)await this.isInShellAllowlist(e)&&e.approveWithPolicy(j),u&&M&&this.isInTeamAllowlist(M,e)&&e.approveWithPolicy(j);for(const e of D)M&&this.isInTeamBlocklist(M,e)&&e.deny();const N=await this.teamSettingsService.getDeleteFileProtection();if(N)for(const e of D)"rm"===e.command.name&&e.deny();const $=this.buildShellApprovalDecisionFacts({commands:D,autoRunControls:M,shouldApplyTeamShellAllowlist:u,deleteProtectionEnabled:N,softDenylistedCommands:T});if("workspace_readonly"===c.type&&"workspace_readonly"!==n.type)return Jh.info(e,"Shell permissions: blocked by readonly mode"),{kind:"block",reason:{type:"permissionsConfig",isReadonly:!0}};const F=vt(r.hookApprovalRequirement),L=r.hookApprovalRequirement?.reason,U=F?void 0:this.getShellAutoApprovalPolicy({approvalMode:i,isUnrestricted:a,requestedPolicy:n,facts:$,preserveRequestedPolicyForAllowlistedCommands:S}),B=void 0!==U&&$.allCommandsAllowlisted&&"insecure_none"===U.type&&"allowlistEscalated"in U&&!0===U.allowlistEscalated;if(U&&(void 0===v||B)){S&&$.allCommandsPreapproved&&!$.allCommandsAllowlisted&&Jh.info(e,"Shell permissions: all commands allowed by sandbox policy");const t=await this.applyServerAndAdminPolicies(U);return Jh.info(e,"Shell permissions: auto-approved shell command",{toolCallId:r.toolCallId,approvalMode:i,requestedPolicyType:hm(n),userConfiguredPolicyType:hm(c),autoApprovalPolicyType:hm(U),mergedPolicyType:hm(t),isSmartAllowlistActive:S,smartModeApprovalBypassedByAllowlist:B,allCommandsRunnable:$.allCommandsRunnable,allCommandsAllowlisted:$.allCommandsAllowlisted,allCommandsPreapproved:$.allCommandsPreapproved,hasSmartModeApprovalReason:void 0!==v,commandCount:D.length}),{kind:"allow",policy:t}}const H=!(!p||h||f)&&await async function({parsingResult:e,workingDirectory:t,rootDirectories:r,resolvePathForPermissions:n=Wh,pathModule:o=l,tempPathOptions:s={platform:process.platform,env:process.env,pathModule:o}}){if(!e.hasRedirects)return!0;const i=e.redirects;if(0===i.length)return!1;const a=e.executableCommands.length>1,c=Xh();for(const e of i){if(rm(e))continue;const i=a?Xh():c,{operator:l,targetText:d}=e,p=e.destinationFds.map((e=>Number(e)));if(">&"===l){const e=tm(d),t=void 0===e?void 0:i.fdTargets.get(e);if("original-stdout"!==(u=t)&&"original-stderr"!==u&&"dev-null"!==u&&"workspace-file"!==u&&"tmp-file"!==u){for(const e of p)i.fdTargets.set(e,"unsafe");return!1}for(const e of p)i.fdTargets.set(e,t);continue}if("<&"===l){const e=tm(d),t=void 0===e?void 0:i.fdTargets.get(e);if("dev-null"!==t){for(const e of p)i.fdTargets.set(e,"unsafe");return!1}for(const e of p)i.fdTargets.set(e,t);continue}if("/dev/null"===d){for(const e of p)i.fdTargets.set(e,"dev-null");continue}if(!em(l)||void 0===d){for(const e of p)i.fdTargets.set(e,"unsafe");return!1}const h=await nm({targetText:d,workingDirectory:t,rootDirectories:r,resolvePathForPermissions:n,pathModule:o,tempPathOptions:s});if(!h){for(const e of p)i.fdTargets.set(e,"unsafe");return!1}for(const e of p)i.fdTargets.set(e,h)}var u;return!0}({parsingResult:r.parsingResult,workingDirectory:r.workingDirectory,rootDirectories:this.rootDirectories});let W=(S||(!p||h||H)&&!f)&&("allowlist"===i||"ask-every-time"===i)&&$.canAllowlistInPrompt;const z=[],q=void 0!==v,G=$.notInTeamAllowlist.length>0&&($.hasSecurityDenies||$.hasSoftDenies||!$.allCommandsRunnable);if(void 0!==v&&z.push(v),F&&(q||z.push(L?`Hook requested approval: ${L}`:"Hook requested approval"),W=!1),_.length>0&&(q||z.push(..._),W=!1),!q)if(S&&P.length>0)z.push(...P);else if($.unapprovedCommands.length>0){const e=this.generateAllowlistPatterns($.unapprovedCommands.map((e=>e.command))),t=(0,m.To)(e),r=t.length>0?t.join(", "):$.unapprovedCommands.map((e=>e.command.fullText)).join(", ");z.push(`Not in allowlist: ${r}`)}if($.hasSecurityDenies&&(q||($.rmDeniedByDeleteProtection.length>0&&z.push("Delete protection is enabled"),$.teamBlocklistedCommands.length>0&&z.push(`In team blocklist: ${$.teamBlocklistedCommands.map((e=>e.command.name)).join(", ")}`)),W=!1),G){const t=$.notInTeamAllowlist.map((e=>e.command.fullText)).join(", ");Jh.info(e,"Shell permissions: commands not in team allowlist",{commandCount:$.notInTeamAllowlist.length}),q||z.push(`Not in team allowlist: ${t}`),W=!1}const V=z.join(" • "),J=[];if(W){const e=void 0!==v?D.filter((e=>"allowlisted"!==e.state)):$.unapprovedCommands;J.push(...this.generateAllowlistPatterns(e.map((e=>e.command))))}const K=S&&P.length>0,Y=K?R:J,Z=K&&I.length>0?I:void 0,X="insecure_none"!==n.type&&"insecure_none"!==c.type,Q="insecure_none"!==n.type,ee=[void 0!==v?"smart_mode_approval":void 0,F?"hook_forces_prompt":void 0,_.length>0?"command_blocklist":void 0,S&&P.length>0?"smart_allowlist_miss":void 0,$.unapprovedCommands.length>0?"unapproved_commands":void 0,$.hasSecurityDenies?"security_denies":void 0,G?"team_allowlist_miss":void 0].filter((e=>void 0!==e));Jh.info(e,"Shell permissions: requesting shell approval",{toolCallId:r.toolCallId,approvalMode:i,requestedPolicyType:hm(n),userConfiguredPolicyType:hm(c),isSandboxAvailable:X,isSandboxEnabled:Q,canAllowlist:W,isSmartAllowlistActive:S,hasSmartModeApprovalReason:void 0!==v,hasSmartModeApprovalRequestId:void 0!==y,hookForcesPrompt:F,approvalReasonTypes:ee,commandCount:D.length,unapprovedCommandCount:$.unapprovedCommands.length,deniedCommandCount:$.deniedCommands.length,notInTeamAllowlistCount:$.notInTeamAllowlist.length,notAllowedCommandCount:Y.length,suggestedAllowlistEntryCount:Z?.length??0,allCommandsRunnable:$.allCommandsRunnable,allCommandsAllowlisted:$.allCommandsAllowlisted,allCommandsPreapproved:$.allCommandsPreapproved,hasSecurityDenies:$.hasSecurityDenies,hasSoftDenies:$.hasSoftDenies});const te={type:fc.Shell,toolCallId:r.toolCallId,details:{command:t,workingDirectory:r.workingDirectory,timeout:r.timeout,reason:V,isSandboxAvailable:"allowlist"===i&&X,isSandboxEnabled:"allowlist"===i&&Q,canAllowlist:W,notAllowedCommands:Y,suggestedAllowlistEntries:Z,smartModeApprovalReason:v,smartModeApprovalRequestId:y}},re=await this.pendingDecisionStore.requestApproval(te);if(re.approved){const e="unrestricted"===i?{type:"insecure_none"}:n;return{kind:"allow",policy:await this.applyServerAndAdminPolicies(e)}}return{kind:"block",reason:{type:"userRejected",reason:re.reason}}}async isShellCommandFullyAllowlisted(e,t,r){const n=e.withName("InteractivePermissionsService.isShellCommandFullyAllowlisted"),o=await this.getPermissions(),s=!o.dashboardTerminalAllowlistOverriddenByPermissionsFile;if("allowlist"!==o.approvalMode)return!1;if("workspace_readonly"===o.userConfiguredPolicy.type)return!1;const i=r.classifierResult,a=void 0!==i&&!i.classificationFailed&&i.commands.length>0?i:void 0,l=(o.smartAllowlistEnabled??!1)&&void 0!==a;if(r.parsingResult.parsingFailed&&!l)return!1;const c=r.parsingResult.executableCommands,u=l?a.commands.map(am):c;if(0===u.length)return!1;const d=l?a.commands.map(sm):u.map((e=>[e.fullText.trim()].filter(Boolean))),p=void 0!==a?a.commands.map(sm):d,h={type:"insecure_none"},m=u.map(((e,t)=>new pm(e,h,void 0,d[t])));if(await this.hasHardDeny(n,m))return!1;const f=om(o.smartAllowlistDenylist??[]);if(f.length>0)for(const e of p)if(e&&0!==e.length&&f.some((t=>im(e,t))))return!1;if(await this.teamSettingsService.getDeleteFileProtection()&&m.some((e=>"rm"===e.command.name)))return!1;const g=await this.teamSettingsService.getAutoRunControls();if(void 0!==g&&m.some((e=>this.isInTeamBlocklist(g,e))))return!1;for(const e of m){const t=await this.isInShellAllowlist(e),r=s&&void 0!==g&&this.isInTeamAllowlist(g,e);if(!t&&!r)return!1}return!0}async applyServerAndAdminPolicies(e){if("insecure_none"===e.type)return e;const t=await this.foldPerUserFilePolicy(e),r=t.skipStatsigDefaults?t:await this.applyStatsigDefaults(t),n=await this.loadPerRepoFilePolicy(r.type),o=await this.buildTeamAdminPolicy(r.type),s=(0,Bn._B)(e.networkPolicy),{policy:i}=await(0,Bn.resolveSandboxPolicyForWorkspace)(this.rootDirectories[0],{perUser:r,perRepo:n,teamAdmin:o});return s?{...i,networkPolicy:(0,Bn.T6)()}:i}async foldPerUserFilePolicy(e){const t=await(0,Bn.tv)(this.perUserSandboxConfigPath,(0,i.homedir)());if(!t||"insecure_none"===t.type)return e;let r=(0,Bn.fZ)(t.networkPolicy,e.networkPolicy);r&&void 0!==e.networkPolicy?.default&&(r={...r,default:e.networkPolicy.default});const n=(0,Bn.s9)(t.additionalReadonlyPaths,e.additionalReadonlyPaths),o={...e,networkPolicy:r,additionalReadonlyPaths:n.length>0?n:void 0};if("workspace_readwrite"===e.type&&"workspace_readwrite"===t.type){const r=(0,Bn.s9)(t.additionalReadwritePaths,e.additionalReadwritePaths);return{...o,additionalReadwritePaths:r.length>0?r:void 0}}return o}async applyStatsigDefaults(e){const t=await this.teamSettingsService.getDefaultNetworkAllowlist();if(!t.available||0===t.allowlist.length)return e;if((0,Bn._B)(e.networkPolicy))return e;const r={default:"deny",allow:Zh(t.allowlist)};return{...e,networkPolicy:(0,Bn.fZ)(e.networkPolicy,r)}}async loadPerRepoFilePolicy(e){const t=this.rootDirectories[0];if(!t)return;const r=await(0,Bn.tv)((0,a.join)(t,".cursor","sandbox.json"),t);return r&&"insecure_none"!==r.type?r.type!==e?lm(e,{networkPolicy:r.networkPolicy,additionalReadonlyPaths:r.additionalReadonlyPaths,..."additionalReadwritePaths"in r?{additionalReadwritePaths:r.additionalReadwritePaths}:{},disableTmpWrite:r.disableTmpWrite,networkPolicyStrict:r.networkPolicyStrict}):r:void 0}async buildTeamAdminPolicy(e){if(!this.adminNetworkControlsEnabled)return;const t=await this.teamSettingsService.getNetworkAccessControls();if(!t.available)return lm(e,{networkPolicy:(0,Bn.Po)()});if(0===t.allowlist.length&&0===t.denylist.length)return;const r={};return t.allowlist.length>0&&(r.default="deny",r.allow=Zh(t.allowlist)),t.denylist.length>0&&(r.deny=Zh(t.denylist)),lm(e,{networkPolicy:r})}async isInShellAllowlist(e){return(await this.getPermissions()).allow.some((t=>this.isShellEntry(t)&&e.matchForms.some((e=>this.matchesShell(t,e)))))}isInTeamBlocklist(e,t){return e.blocked.some((e=>this.matchesAutoRunCommand(t.command.fullText,e)))}isInTeamAllowlist(e,t){return e.allowed.some((e=>this.matchesAutoRunCommand(t.command.fullText,e)))}buildShellApprovalDecisionFacts({commands:e,softDenylistedCommands:t,autoRunControls:r,shouldApplyTeamShellAllowlist:n,deleteProtectionEnabled:o}){const s=e.filter((e=>"denied"===e.state)),i=e.filter((e=>"approvable"===e.state)),a=n&&r?.enabled?e.filter((e=>!this.isInTeamAllowlist(r,e))):[],l=s.filter((e=>void 0!==r&&this.isInTeamBlocklist(r,e))),c=o?s.filter((e=>"rm"===e.command.name)):[];return{hasSecurityDenies:s.length>0,hasSoftDenies:t.length>0,hasTeamAllowlistMisses:a.length>0,allCommandsRunnable:e.every((e=>e.isRunnable())),allCommandsAllowlisted:e.every((e=>"allowlisted"===e.state)),allCommandsPreapproved:e.every((e=>"preapproved"===e.state)),canAllowlistInPrompt:0===s.length&&0===a.length,unapprovedCommands:i,deniedCommands:s,notInTeamAllowlist:a,teamBlocklistedCommands:l,rmDeniedByDeleteProtection:c}}getShellAutoApprovalPolicy({approvalMode:e,isUnrestricted:t,requestedPolicy:r,facts:n,preserveRequestedPolicyForAllowlistedCommands:o}){if(!n.hasSecurityDenies&&!n.hasSoftDenies&&n.allCommandsRunnable){if(t)return"workspace_readonly"===r.type?r:{type:"insecure_none"};if("allowlist"===e)return n.allCommandsAllowlisted&&!o?{type:"insecure_none",allowlistEscalated:!0}:r}}async getPermissions(){return await this.permissionsProvider.getPermissions()}hasLocalShellControls(e){return e.allow.some((e=>this.isShellEntry(e)))||e.deny.some((e=>this.isShellEntry(e)))||(e.smartAllowlistDenylist?.length??0)>0}hasTeamShellControls(e,t=!0){return void 0!==e&&(t&&(e.enabled||e.allowed.length>0)||e.blocked.length>0)}async shouldPromptForEmptyPlainShellAllowlist(e,t){if("allowlist"!==t.approvalMode||"insecure_none"!==t.userConfiguredPolicy.type||0===e.trim().length||this.hasLocalShellControls(t))return!1;const[r,n]=await Promise.all([this.teamSettingsService.getAutoRunControls(),this.teamSettingsService.getDeleteFileProtection()]);return!this.hasTeamShellControls(r,!t.dashboardTerminalAllowlistOverriddenByPermissionsFile)&&!n}async requestApprovalForEmptyShellAllowlist(e,t,r){const n=this.getEmptyShellAllowlistCandidates(t),o=await this.pendingDecisionStore.requestApproval({type:fc.Shell,toolCallId:t.toolCallId,details:{command:e,workingDirectory:t.workingDirectory,timeout:t.timeout,reason:t.smartModeApprovalReason??"Shell allowlist is empty",isSandboxAvailable:!1,isSandboxEnabled:!1,canAllowlist:n.length>0,notAllowedCommands:n,smartModeApprovalReason:t.smartModeApprovalReason,smartModeApprovalRequestId:t.smartModeApprovalRequestId}});return o.approved?{kind:"allow",policy:await this.applyServerAndAdminPolicies(r)}:{kind:"block",reason:{type:"userRejected",reason:o.reason}}}getEmptyShellAllowlistCandidates(e){const t=e.parsingResult;return t.parsingFailed||0===t.executableCommands.length||t.hasRedirects&&!0!==t.allRedirectsAreDevNull?[]:this.generateAllowlistPatterns(t.executableCommands)}async hasHardDeny(e,t){const r=await this.getPermissions();return t.some((e=>r.deny.some((t=>this.isShellEntry(t)&&e.matchForms.some((e=>this.matchesShell(t,e)))))))}isShellEntry(e){return null!==cm(e)}isPathEntry(e,t){return new RegExp(`^\\s*${e}\\s*\\(`).test(t)}matchesShell(e,t){const r=cm(e);if(!r)return!1;const n=t.trim(),o=this.extractBaseCommand(n);if(null!==r.argsPattern){const e=n.includes(" ")?n.slice(n.indexOf(" ")+1).trim():"",t=this.matchGlob(r.commandPattern,o)||this.matchGlob(r.commandPattern,n),s=this.matchGlob(r.argsPattern,e);if(t&&s)return!0}return!!this.matchGlob(r.fullPattern,n)||!!n.startsWith(`${r.fullPattern} `)||!!this.matchGlob(r.fullPattern,o)||o===r.fullPattern}async checkCursorFileProtection(e){const t=await this.teamSettingsService.getDotCursorProtection();if(e.some((e=>".cursor"===e.toLowerCase()||".vscode"===e.toLowerCase()))&&t){const t=e[e.length-1]?.toLowerCase()??"";return t.endsWith(".md")||t.endsWith(".mdc")||".cursorrules"===t?null:{type:"permissionsConfig"}}return null}extractBaseCommand(e){const t=e.trim(),r=t.indexOf(" ");return-1===r?t:t.substring(0,r)}generateAllowlistPatterns(e){const t=[],r=["git","npm","yarn","pnpm","docker","pip","systemctl","uv","cargo","bun","bash","npx"];for(const n of e)r.includes(n.name)&&n.args.length>0&&"word"===n.args[0].type?t.push(`${n.name} ${n.args[0].value}`):t.push(n.name);return[...new Set(t)]}matchesPathEntry(e,t,r){const n=new RegExp(`^\\s*${e}\\s*\\((.*)\\)\\s*$`),o=t.match(n);if(!o)return!1;const s=(o[1]??"").trim(),i=this.expandTilde(s);return this.matchGlob(i,r)}async isPathExplicitlyDenied(e,t){return(await this.getPermissions()).deny.some((r=>this.isPathEntry(e,r)&&this.matchesPathEntry(e,r,t)))}async isPathExplicitlyAllowed(e,t){return(await this.getPermissions()).allow.some((r=>this.isPathEntry(e,r)&&this.matchesPathEntry(e,r,t)))}expandTilde(e){return"~"===e?(0,i.homedir)():e.startsWith("~/")?(0,i.homedir)()+e.slice(1):e}escapeRegExp(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}matchGlob(e,t){const r=`^${this.escapeRegExp(e.trim()).replace(/\\\*/g,".*")}$`;try{return new RegExp(r).test(t)}catch{return e.trim()===t}}async addToAllowList(e,t,r){const n=`${t}(${r})`;await this.permissionsProvider.updatePermissions((e=>{const t=e.allow.includes(n)?e.allow:[...e.allow,n];return{...e,allow:t}}))}async addToDenyList(e,t,r){const n=`${t}(${r})`;await this.permissionsProvider.updatePermissions((e=>{const t=e.deny.includes(n)?e.deny:[...e.deny,n];return{...e,deny:t}}))}async shouldBlockMcp(e,t){const r={stack:[],error:void 0,hasError:!1};try{Gh(r,(0,c.VI)(e.withName("InteractivePermissionsService.shouldBlockMcp")),!1);const{name:n,toolName:o,providerIdentifier:s,args:i}=t,a=e=>{this.mcpAllowlistLog?.(e)};a(`[permissions-service] shouldBlockMcp: toolName="${o}", providerIdentifier="${s}"`);const l=await this.getPermissions(),u=await this.teamSettingsService.getMcpToolControls(),d=!0===u?.enabled;if(await this.isMcpExplicitlyDenied(e,s,o))return a(`[permissions-service] shouldBlockMcp: BLOCKED (explicitly denied) toolName="${o}", providerIdentifier="${s}"`),{type:"permissionsConfig"};const p=t.smartModeApproval?.reason;if(void 0!==p)return"workspace_readonly"===l.userConfiguredPolicy.type&&"unrestricted"!==l.approvalMode?(a(`[permissions-service] shouldBlockMcp: BLOCKED (readonly mode, Smart Mode forced approval) toolName="${o}", providerIdentifier="${s}"`),{type:"permissionsConfig",isReadonly:!0}):(a(`[permissions-service] shouldBlockMcp: needsApproval (Smart Mode) toolName="${o}", providerIdentifier="${s}"`),!(d?this.isMcpInTeamAllowlist(u,{providerIdentifier:s,toolName:o}):await this.isMcpExplicitlyAllowed(e,s,o))&&{type:"needsApproval",approvalReason:p,approvalDetails:{type:"mcp",name:n,toolName:o,providerIdentifier:s,args:i,reason:"smartMode",canAllowlist:!1,smartModeApprovalReason:p,smartModeApprovalRequestId:t.smartModeApproval?.requestId}});if(d){const t=this.isMcpInTeamAllowlist(u,{providerIdentifier:s,toolName:o});if(this.recordMcpAllowlistCheckResult(e,{allowlistScope:"team",outcome:t?"pass":"fail"}),t)return a(`[permissions-service] shouldBlockMcp: ALLOWED (in admin MCP allowlist) toolName="${o}", providerIdentifier="${s}"`),!1}else{const t=await this.isMcpExplicitlyAllowed(e,s,o);if(this.recordMcpAllowlistCheckResult(e,{allowlistScope:"user",outcome:t?"pass":"fail"}),t)return a(`[permissions-service] shouldBlockMcp: ALLOWED (explicitly in allowlist) toolName="${o}", providerIdentifier="${s}"`),!1}if("workspace_readonly"===l.userConfiguredPolicy.type&&"unrestricted"!==l.approvalMode)return a(`[permissions-service] shouldBlockMcp: BLOCKED (readonly mode) toolName="${o}", providerIdentifier="${s}"`),{type:"permissionsConfig",isReadonly:!0};if("unrestricted"===l.approvalMode){if(!await this.teamSettingsService.getShouldBlockMcp())return a(`[permissions-service] shouldBlockMcp: ALLOWED (auto-run, no team block) toolName="${o}", providerIdentifier="${s}"`),!1;a(`[permissions-service] shouldBlockMcp: needsApproval (auto-run but team blocks MCP) toolName="${o}", providerIdentifier="${s}"`)}return a(`[permissions-service] shouldBlockMcp: needsApproval (not in allowlist) toolName="${o}", providerIdentifier="${s}", approvalMode="${l.approvalMode}"`),{type:"needsApproval",approvalReason:`MCP tool: ${o}`,approvalDetails:{type:"mcp",name:n,toolName:o,providerIdentifier:s,args:i,canAllowlist:!0}}}catch(e){r.error=e,r.hasError=!0}finally{Vh(r)}}async isMcpFullyAllowlisted(e,t){const r=e.withName("InteractivePermissionsService.isMcpFullyAllowlisted"),{providerIdentifier:n,toolName:o}=t;if(await this.isMcpExplicitlyDenied(r,n,o))return!1;const s=await this.teamSettingsService.getMcpToolControls();return!0===s?.enabled?!!this.isMcpInTeamAllowlist(s,{providerIdentifier:n,toolName:o}):await this.isMcpExplicitlyAllowed(r,n,o)}async isWebFetchFullyAllowlisted(e,t){const r=await this.getPermissions();if("allowlist"!==r.approvalMode)return!1;let n;try{n=new URL(t.url)}catch{return!1}const o=n.hostname;return!r.deny.some((e=>this.matchesWebFetchEntry(e,o)))&&r.allow.some((e=>this.matchesWebFetchEntry(e,o)))}matchesAutoRunCommand(e,t){const r=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`^${r}(\\s|$)`).test(e.trim())}matchesMcpPattern({pattern:e,providerIdentifier:t,toolName:r,logLabel:n}){const o=e.indexOf(":");if(-1===o)return!1;const s=e.slice(0,o).trim().toLowerCase(),i=e.slice(o+1).trim().toLowerCase(),a=t.toLowerCase().trim(),l=r.toLowerCase().trim(),c="*"===s||this.matchGlob(s,a),u="*"===i||this.matchGlob(i,l),d=c&&u,p=`[permissions-service] ${n}: serverPattern="${s}", toolPattern="${i}", normalizedProviderIdentifier="${a}", normalizedToolName="${l}", serverMatches=${c}, toolMatches=${u}, result=${d}`;return this.mcpAllowlistLog?.(p),d}recordMcpAllowlistCheckResult(e,{allowlistScope:t,outcome:r}){Kh.increment(e,1,{allowlist_scope:t,outcome:r})}matchesMcpEntry(e,t,r){const n=e.match(/^\s*Mcp\s*\((.*)\)\s*$/);if(!n)return!1;const o=n[1]?.trim()??"";return this.matchesMcpPattern({pattern:o,providerIdentifier:t,toolName:r,logLabel:"matchesMcpEntry"})}matchesWebFetchEntry(e,t){const r=e.match(/^\s*WebFetch\s*\((.*)\)\s*$/);return!!r&&Ft(t,r[1]?.trim()??"")}matchesMcpEntryBare({pattern:e,providerIdentifier:t,toolName:r}){return this.matchesMcpPattern({pattern:e,providerIdentifier:t,toolName:r,logLabel:"matchesMcpEntryBare"})}isMcpInTeamAllowlist(e,{providerIdentifier:t,toolName:r}){return e.mcpToolAllowlist.some((e=>this.matchesMcpEntryBare({pattern:e,providerIdentifier:t,toolName:r})))}async isMcpExplicitlyDenied(e,t,r){return(await this.getPermissions()).deny.some((e=>this.matchesMcpEntry(e,t,r)))}async isMcpExplicitlyAllowed(e,t,r){return(await this.getPermissions()).allow.some((e=>this.matchesMcpEntry(e,t,r)))}}var fm=r("../proto/dist/generated/aiserver/v1/dashboard_pb.js");const gm=3e5,vm=BigInt(0),ym=BigInt(8),wm=BigInt(16),bm=BigInt(65535);function Sm(e){const t=e.trim();if(0===t.length)return;const r=t.includes("://")?t:`https://${t}`;try{return new URL(r)}catch{return}}function km(e){let t=e.trim().replace(/\.+$/,"").toLowerCase();if(t.startsWith("[")){const e=t.indexOf("]");-1!==e&&(t=t.slice(1,e))}else if(t.split(":").length-1==1){const e=t.lastIndexOf(":");[...t.slice(e+1)].every((e=>/\d/.test(e)))&&(t=t.slice(0,e))}return t}function Em(e){const t=e.split(".");if(4!==t.length)return;let r=vm;for(const e of t){if(!/^\d{1,3}$/.test(e))return;const t=Number(e);if(!Number.isInteger(t)||t<0||t>255)return;r=r<<ym|BigInt(t)}return{version:4,value:r}}function xm(e){if(0===e.length)return[];const t=[],r=e.split(":");for(let e=0;e<r.length;e++){const n=r[e];if(0===n.length)return;if(n.includes(".")){if(e!==r.length-1)return;const o=Em(n);if(!o)return;t.push(Number(o.value>>wm&bm)),t.push(Number(o.value&bm))}else{if(!/^[0-9a-f]{1,4}$/i.test(n))return;t.push(Number.parseInt(n,16))}}return t}function Cm(e){return Em(e)??function(e){const t=km(e);if(0===t.length||t.includes(":::"))return;const r=t.indexOf("::");if(-1===r){const e=xm(t);if(!e||8!==e.length)return;return{version:6,value:e.reduce(((e,t)=>e<<wm|BigInt(t)),vm)}}if(-1!==t.indexOf("::",r+1))return;const n=xm(t.slice(0,r)),o=xm(t.slice(r+2));if(!n||!o)return;const s=n.length+o.length;return s>7?void 0:{version:6,value:[...n,...new Array(8-s).fill(0),...o].reduce(((e,t)=>e<<wm|BigInt(t)),vm)}}(e)}function _m(e,t){const r=km(e),n=km(t);if("*"===n)return!0;if(n.includes("/"))return function(e,t){const r=t.lastIndexOf("/");if(r<=0||r===t.length-1)return!1;const n=Cm(t.slice(0,r)),o=Cm(e);if(!n||!o||n.version!==o.version)return!1;const s=Number(t.slice(r+1)),i=4===n.version?32:128;if(!Number.isInteger(s)||s<0||s>i)return!1;const a=BigInt(i-s);return o.value>>a==n.value>>a}(r,n);if(n.startsWith("*.")){const e=n.slice(2);return r===e||r.endsWith(`.${e}`)}return r===n}function Pm(e,t){if(!e.includes("*"))return e===t;const r=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${r}$`).test(t)}function Rm(e){const t=e?.trim();return t&&t.length>0?t:void 0}function Tm(e,t){const r=Rm(e.command),n=Rm(e.serverUrl);if(void 0===r&&void 0===n)return!1;const o=void 0===r||void 0!==t.command&&function(e,t){if(!e.includes("*"))return e===t;const r=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${r}$`).test(t)}(r,t.command),s=void 0===n||void 0!==t.url&&function(e,t){if(Pm(e,t))return!0;if(e.includes("://")){let r,n;try{r=new URL(e),n=new URL(t)}catch{return!1}if(""!==r.username||""!==r.password||""!==n.username||""!==n.password||r.protocol!==n.protocol||r.port!==n.port)return!1;const o=km(r.hostname);return!!_m(km(n.hostname),o)&&Pm(`${r.pathname}${r.search}`,`${n.pathname}${n.search}`)}const r=function(e){const t=function(e){const t=e.trim(),r=t.indexOf("["),n=t.indexOf("]");if(-1!==r&&n>r){const e=t.slice(r+1,n);if(t.slice(n+1).startsWith("("))return`${t.slice(0,r)}${e}`}return t}(e).trim();if(0===t.length)return;const r=t.lastIndexOf("/");if(!t.includes("://")&&r>0&&/^\d+$/.test(t.slice(r+1).trim())){const e=km(t.slice(0,r));if(e.length>0)return`${e}/${t.slice(r+1).trim()}`}const n=Sm(t);if(n)return km(n.hostname);let o=t;const s=o.indexOf("://");-1!==s&&(o=o.slice(s+3));const i=o.indexOf("/");-1!==i&&(o=o.slice(0,i));const a=km(function(e){if(e.startsWith("[")){const t=e.indexOf("]");return-1!==t?e.slice(1,t):e}const t=e.split(":");return 2===t.length&&[...t[1]].every((e=>/\d/.test(e)))?t[0]:e}(o));if(0!==a.length){if(a.startsWith("*.")){const e=a.slice(2);if(0===e.length||e.includes("*")||e.includes("?"))return;return a}if(!a.includes("*")&&!a.includes("?"))return a}}(e),n=function(e){const t=Sm(e);if(t)return km(t.hostname);const r=km(e);return r.length>0?r:void 0}(t);return!(!r||!n)&&_m(n,r)}(n,t.url);return o&&s}function Im(e,t){if(void 0!==e)return[...e.networkAllowlist??[],...void 0!==Rm(e.serverUrl)&&void 0!==t.url?[t.url]:[]]}class Am{dashboardClient;constructor(e){this.dashboardClient=e}getTeamAdminSettings(){return this.dashboardClient.getTeamAdminSettingsOrEmptyIfNotInTeam(new fm.Byz({}))}getTeamRepos(){return this.dashboardClient.getTeamReposOrEmptyIfNotInTeam(new fm.aYW({}))}}class Om{teamAdminSettingsProvider;defaultAllowlistProvider;options;settingsPromise;teamReposPromise;defaultAllowlistPromise;lastFetchTime=0;lastReposFetchTime=0;lastDefaultAllowlistFetchTime=0;lastFetchSucceeded=!0;constructor(e,t,r={}){this.teamAdminSettingsProvider=e,this.defaultAllowlistProvider=t,this.options=r,this.settingsPromise=this.fetchSettings()}invalidateCache(){this.lastFetchTime=0,this.lastDefaultAllowlistFetchTime=0,this.defaultAllowlistPromise=void 0}async fetchSettings(){this.lastFetchTime=Date.now();try{const e=await this.teamAdminSettingsProvider.getTeamAdminSettings();return this.lastFetchSucceeded=!0,e}catch(e){return void(this.lastFetchSucceeded=!1)}}async getTeamAdminSettings(){return(Date.now()-this.lastFetchTime>gm||void 0===await this.settingsPromise)&&(this.settingsPromise=this.fetchSettings()),this.settingsPromise}async getDotCursorProtection(){const e=await this.getTeamAdminSettings();return e?.dotCursorProtection??!0}async getShouldBlockMcp(){const e=await this.getTeamAdminSettings();return!(!e?.autoRunControls?.enabled||!e?.autoRunControls?.disableMcpAutoRun)}async getDeleteFileProtection(){const e=await this.getTeamAdminSettings();return!(!e?.autoRunControls?.enabled||!e?.autoRunControls?.deleteFileProtection)}async getIsHeadlessDisabled(){return"disabled"===(await this.getHeadlessCliPolicy()).kind}async getHeadlessCliPolicy(){const e=await this.getTeamAdminSettings();return void 0!==e||this.lastFetchSucceeded?!0===e?.cliSettings?.disableHeadless?{kind:"disabled"}:{kind:"enabled"}:{kind:"unavailable"}}async getMcpServerBlockInfo(e){const t=await this.getTeamAdminSettings(),r=t?.allowedMcpConfiguration,n=await this.isMcpSettingsOverhaulEnabled({disableExposureLog:!0});if(!0===r?.disableAll)return{blocked:!0,reason:"teamPolicy",message:"Blocked by team policy"};const o=r?.allowedMcpServers;if(n){const t=!0===r?.allowUserOverrideMcpServers;if(o&&o.length>0&&!t&&!o.some((t=>Tm(t,e))))return{blocked:!0,reason:"teamPolicy",message:"Blocked by team policy"};const n=await this.getMcpNetworkControlsConfig(e),s=void 0===e.url?{allowed:!0}:(0,Dc.ME)(e.url,n);if(!s.allowed)return{blocked:!0,reason:"teamNetworkAllowlist",message:s.message}}if(!n){const r=function({isMcpAccessNetworkAllowlistEnabled:e,server:t,settings:r}){if(!e||!0!==r?.allowedMcpConfiguration?.requireMcpServersInTeamNetworkAllowlist)return{blocked:!1};const n=(r.networkAllowlist??[]).map((e=>e.trim())).filter((e=>e.length>0));return void 0===t.url||0===n.length||Lt(t.url,n)?{blocked:!1}:{blocked:!0,reason:"teamNetworkAllowlist",message:"Not on the team network allowlist"}}({isMcpAccessNetworkAllowlistEnabled:await this.isMcpAccessNetworkAllowlistEnabled(),server:e,settings:t});if(r.blocked)return r}return{blocked:!1}}async getMcpNetworkControlsConfig(e){const t=await this.getTeamAdminSettings(),r=t?.allowedMcpConfiguration;if(await this.isMcpSettingsOverhaulEnabled()){const n=void 0!==e?function(e,t){return e?.find((e=>Tm(e,t)))}(r?.allowedMcpServers,e):void 0,o=void 0!==n,s=void 0!==r?.allowedMcpServers&&r.allowedMcpServers.length>0;return{enabled:void 0===e?s:o,mcpNetworkAllowlist:Im(n,e??{}),localAgentNetworkAllowlist:t?.networkAllowlist,blockMessage:"Not on the team network allowlist"}}return{enabled:!1,localAgentNetworkAllowlist:t?.networkAllowlist,blockMessage:"Not on the team network allowlist"}}async isServerBlocked(e){return(await this.getMcpServerBlockInfo(e)).blocked}async getAutoRunControls(){const e=await this.getTeamAdminSettings();if(e?.autoRunControls?.enabled)return{enabled:e.autoRunControls.enabled,allowed:e.autoRunControls.allowed??[],blocked:e.autoRunControls.blocked??[],enableAllowlistMode:e.autoRunControls.enableAllowlistMode??!0,enableRunEverything:e.autoRunControls.enableRunEverything??!1,enableSmartAuto:e.autoRunControls.enableSmartAuto??!0,mcpToolAllowlist:e.autoRunControls.mcpToolAllowlist??[]}}async isMcpSettingsOverhaulEnabled(e){const t=this.options.isMcpSettingsOverhaulEnabled?.(e);return void 0!==t&&await t}async getMcpToolControls(){const e=await this.getTeamAdminSettings(),t=await this.isMcpSettingsOverhaulEnabled(),r=e?.allowedMcpConfiguration;if(t)return{enabled:!0,mcpToolAllowlist:(0,Dc.FC)({autoRunControls:e?.autoRunControls,allowedMcpServers:r?.allowedMcpServers,isMcpSettingsOverhaulEnabled:!0}),allowUserOverride:!1}}async getNetworkAccessControls(){const e=await this.getTeamAdminSettings();return void 0!==e||this.lastFetchSucceeded?{allowlist:e?.networkAllowlist??[],denylist:e?.networkDenylist??[],available:!0}:{allowlist:[],denylist:[],available:!1}}async getSandboxingControls(){const e=await this.getTeamAdminSettings(),t=e?.autoRunControls?.sandboxingControls;return{sandboxingDisabled:t?.sandboxing===fm.faf.DISABLED,networkingDisabled:t?.sandboxNetworking===fm._mX.ALWAYS_DISABLED,gitDisabled:t?.sandboxGit===fm.i24.ALWAYS_DISABLED}}async isAttributionDisabledByAdmin(){const e=await this.getTeamAdminSettings();return void 0===e&&!this.lastFetchSucceeded||(e?.attributionControls?.disableAttribution??!1)}async getDefaultNetworkAllowlist(){const e=Date.now();return(!this.defaultAllowlistPromise||e-this.lastDefaultAllowlistFetchTime>gm)&&(this.lastDefaultAllowlistFetchTime=e,this.defaultAllowlistPromise=this.fetchDefaultAllowlist()),this.defaultAllowlistPromise}async fetchDefaultAllowlist(){if(!this.defaultAllowlistProvider)return{allowlist:[],available:!0};try{return{allowlist:await this.defaultAllowlistProvider.getDefaultNetworkAllowlist(),available:!0}}catch{return{allowlist:[],available:!1}}}async getTeamRepos(){const e=Date.now();return(!this.teamReposPromise||e-this.lastReposFetchTime>gm)&&(this.teamReposPromise=this.fetchTeamRepos(),this.lastReposFetchTime=e),this.teamReposPromise}async fetchTeamRepos(){return this.teamAdminSettingsProvider.getTeamRepos()}async isMcpAccessNetworkAllowlistEnabled(){return await(this.options.isMcpAccessNetworkAllowlistEnabled?.())??!1}}function Dm(){return(0,a.join)(function(){const e=process.env.CURSOR_DATA_DIR;return(null==e?void 0:e.trim())?e:(0,a.join)((0,i.homedir)(),".cursor")}(),"projects")}function Mm(e){return(0,a.join)(Dm(),(0,m.r_)(e))}const jm=vo.z.any().transform(((e,t)=>{if(e instanceof H.Gm)return e;try{return H.Gm.fromJson(e,{ignoreUnknownFields:!1})}catch(r){return t.addIssue({code:vo.z.ZodIssueCode.custom,message:r instanceof Error?r.message:String(r)}),e}})),Nm=vo.z.object({type:vo.z.literal("command"),command:vo.z.string().min(1),padding:vo.z.number().int().min(0).optional(),updateIntervalMs:vo.z.number().int().positive().optional(),timeoutMs:vo.z.number().int().positive().optional()}),$m=vo.z.object({permissions:vo.z.object({allow:vo.z.array(vo.z.string()),deny:vo.z.array(vo.z.string())})}),Fm=$m.extend({version:vo.z.number(),editor:vo.z.object({vimMode:vo.z.boolean(),defaultBehavior:vo.z.enum(["ide","agent"]).optional()}),display:vo.z.object({showLineNumbers:vo.z.boolean().default(!1),showThinkingBlocks:vo.z.boolean().default(!1),showStatusIndicators:vo.z.boolean().default(!1),showStatusLineRunningTime:vo.z.boolean().default(!1)}).default({showLineNumbers:!1,showThinkingBlocks:!1,showStatusIndicators:!1,showStatusLineRunningTime:!1}),notifications:vo.z.boolean().default(!0),hints:vo.z.boolean().default(!0),rewind:vo.z.boolean().default(!1),suggestNextPrompt:vo.z.boolean().default(!1),statusLine:Nm.optional(),channel:vo.z.literal("static").or(vo.z.literal("prod")).or(vo.z.literal("lab")).or(vo.z.literal("staging")).or(vo.z.literal("prod-stable-internal")).optional(),model:jm.optional(),bedrock:vo.z.object({enabled:vo.z.boolean().default(!1),mode:vo.z.enum(["access-key","team-role"]).default("access-key"),region:vo.z.string().optional(),testModel:vo.z.string().optional(),teamRoleArn:vo.z.string().optional(),teamExternalId:vo.z.string().optional()}).optional(),awsAuthRefresh:vo.z.string().optional(),hasChangedDefaultModel:vo.z.boolean().default(!1).optional(),maxMode:vo.z.boolean().default(!1).optional(),modelParameters:vo.z.record(vo.z.string(),vo.z.array(vo.z.object({id:vo.z.string(),value:vo.z.string()}))).optional(),selectedModel:vo.z.object({modelId:vo.z.string(),parameters:vo.z.array(vo.z.object({id:vo.z.string(),value:vo.z.string()}))}).optional(),privacyCache:vo.z.object({ghostMode:vo.z.boolean(),privacyMode:vo.z.number().optional(),updatedAt:vo.z.number()}).optional(),serverConfigCache:vo.z.object({backendUrl:vo.z.string(),authCacheKey:vo.z.string().optional(),teamId:vo.z.number().optional(),agentUrlConfig:vo.z.object({agentUrl:vo.z.string(),agentnUrl:vo.z.string()}).optional(),cliSandboxDefaultEnabled:vo.z.boolean().optional(),serverHttp2Config:vo.z.number().optional(),updatedAt:vo.z.number()}).optional(),authInfo:vo.z.object({email:vo.z.string().optional(),displayName:vo.z.string().optional(),teamId:vo.z.number().optional(),teamName:vo.z.string().optional(),userId:vo.z.number().optional(),authId:vo.z.string().optional(),organizationId:vo.z.string().optional()}).optional(),network:vo.z.object({useHttp1ForAgent:vo.z.boolean().default(!1)}).default({useHttp1ForAgent:!1}),approvalMode:vo.z.enum(["allowlist","unrestricted"]).default("allowlist").optional(),sandbox:vo.z.object({mode:vo.z.enum(["disabled","enabled"]).default("disabled"),networkAccess:vo.z.preprocess((e=>"allowlist"===e?"user_config_with_defaults":"enabled"===e?"allow_all":e),vo.z.enum(["user_config_only","user_config_with_defaults","allow_all"])).optional(),networkAllowlist:vo.z.array(vo.z.string()).default([]).optional()}).optional(),showSandboxIntro:vo.z.boolean().default(!1).optional(),runEverythingSettingsPromptStreak:vo.z.number().int().nonnegative().optional(),runEverythingSettingsPromptCooldownUntilMs:vo.z.number().int().nonnegative().optional(),attribution:vo.z.object({attributeCommitsToAgent:vo.z.boolean().default(!0),attributePRsToAgent:vo.z.boolean().default(!0)}).optional(),webFetchDomainAllowlist:vo.z.array(vo.z.string()).default([]).optional(),conversationClassificationScoredConversations:vo.z.array(vo.z.object({conversationId:vo.z.string(),lastUpdatedAt:vo.z.number()})).optional()}),Lm=$m.strict().extend({});Fm.merge(Lm);class Um{storage;prefix;constructor(e,t){this.storage=e,this.prefix=t}async loadTokens(e){return this.storage.loadTokens(this.prefix+e)}async saveTokens(e,t){return this.storage.saveTokens(this.prefix+e,t)}async loadClientInformation(e){return this.storage.loadClientInformation(this.prefix+e)}async saveClientInformation(e,t){return this.storage.saveClientInformation(this.prefix+e,t)}}class Bm{storage;prefix;constructor(e,t){this.storage=e,this.prefix=t}async isServerApproved(e,t,r){return this.storage.isServerApproved(this.prefix+e,t,r)}}class Hm{loaders;constructor(e){this.loaders=e}async load(e,t=!0){const r=await Promise.allSettled(this.loaders.map((({loader:r})=>r.load(e,t)))),n=r.find((e=>"rejected"===e.status));if(n)throw await Promise.allSettled(r.flatMap((e=>"fulfilled"===e.status?[e.value.closeAllClients()]:[]))),n.reason;const o=r.filter((e=>"fulfilled"===e.status)).map((e=>e.value)),s={};for(let e=0;e<o.length;e++){const t=o[e],r=this.loaders[e].prefix,n=t.getClients();for(const[e,t]of Object.entries(n)){const n=r+e;n in s||(s[n]=t)}}return new Su(s)}async loadClient(e,t,r=!1){for(const{loader:n,prefix:o}of this.loaders)if(t.startsWith(o)){t=t.slice(o.length);try{return await n.loadClient(e,t,r)}catch(e){if(e instanceof Error&&e.message.includes("not found in config"))continue;throw e}}throw new Error(`MCP client "${t}" not found in config`)}clearClient(e){var t;for(const{loader:r,prefix:n}of this.loaders){if(!e.startsWith(n))continue;const o=e.slice(n.length);null===(t=r.clearClient)||void 0===t||t.call(r,o)}}clearAllMcpCaches(){var e;for(const{loader:t}of this.loaders)null===(e=t.clearAllMcpCaches)||void 0===e||e.call(t)}}class Wm{loader;constructor(e,t,r,n,o=!1,s,l,c=a.join((0,i.homedir)(),".cursor","mcp.json")){const u=Array.isArray(e)?e:[e],d=[];for(let e=0;e<u.length;e++){const t=u[e],r=a.join(t,".cursor","mcp.json"),n=`project-${e}-${a.basename(t)}-`;d.push({path:r,prefix:n})}d.push({path:c,prefix:"user-"});const p=new Map;for(const{path:e,prefix:t}of d)p.has(e)&&"user-"!==t||p.set(e,t);const h=[];for(const[e,i]of p){const a=o?"":i,u=new Um(t,a),d=new Bm(n,a),p=e===c,m=[new Hc,...p?[]:[new Fc(d)],new ju(r),...l?[new $c(l)]:[]];h.push({prefix:a,loader:new Nu(e,u,m,s)})}this.loader=new Hm(h)}static init(e,t,r,n=!1,o){const s=new Fu(a.join(r,"mcp-auth.json"));(async function(e){await(0,En.rm)(a.join(e,"mcp-cache.json"),{force:!0})})(r).catch((()=>{}));const i=n?{isServerApproved:()=>Promise.resolve(!0)}:new Lc(a.join(r,"mcp-approvals.json"),t);return new Wm(t,s,e,i,!0,void 0,o)}async load(e,t=!0){return this.loader.load(e,t)}async loadClient(e,t,r=!1){return this.loader.loadClient(e,t,r)}clearClient(e){this.loader.clearClient(e)}clearAllMcpCaches(){this.loader.clearAllMcpCaches()}}const zm=new _c,qm={async resolveWorkspaceState(e){var t,r,n,o,s,i,a;const l=null!==(n=null!==(r=e.workingDirectory)&&void 0!==r?r:e.projectRoot)&&void 0!==n?n:null===(t=e.workspaceRoots)||void 0===t?void 0:t[0],u=null!==(o=e.projectRoot)&&void 0!==o?o:void 0!==l?null!==(s=await Aa((0,c.q6)(),zm,l))&&void 0!==s?s:l:void 0,d=null!==(i=e.workspaceRoots)&&void 0!==i?i:void 0!==u?[u]:void 0!==l?[l]:[];return{workingDirectory:l,projectRoot:u,projectDirectory:null!==(a=e.projectDirectory)&&void 0!==a?a:void 0!==u?Mm(u):void 0,workspaceRoots:d,createdAt:new Date}}};let Gm={warn:console.warn.bind(console),error:console.error.bind(console)};const Vm=new co.AsyncLocalStorage;function Jm(){var e;return null!==(e=Vm.getStore())&&void 0!==e?e:Gm}const Km={warn(...e){Jm().warn(...e)},error(...e){Jm().error(...e)}};function Ym(e){var t;if("userMessageAction"===e.action.case)return null===(t=e.action.value.userMessage)||void 0===t?void 0:t.text}function Zm(e,t,r){var n,o;const s=null===(n=e.runOptions)||void 0===n?void 0:n.requestedModel;return{conversationId:e.conversationId,generationId:e.conversationId,model:null!==(o=null==s?void 0:s.modelId)&&void 0!==o?o:"unknown",modelId:null==s?void 0:s.modelId,modelParams:null==s?void 0:s.parameters.map((e=>({id:e.id,value:e.value}))),loopCount:t,promptText:r}}function Xm(e){return e instanceof DOMException&&"AbortError"===e.name||e instanceof Error&&("AbortError"===e.name||"The operation was aborted"===e.message)}const Qm="cursor-plugins/local";function ef(e){var t;if(e)for(const r of e)if("object"==typeof(t=r)&&null!==t&&t.kind===Qm)return r}class tf extends bu{runtimeManager;disposed=!1;constructor(e){super(e),this.runtimeManager=e}async dispose(){this.disposed||(this.disposed=!0,await this.runtimeManager.closeAllClients())}}class rf{storagePath;constructor(e){this.storagePath=e}async isServerDisabled(e){try{const t=await(0,En.readFile)(this.storagePath,"utf8"),r=JSON.parse(t);return Array.isArray(r)?r.includes(e):(await this.writeDisabledServers([]),!1)}catch(e){if("ENOENT"===e.code)return!1;throw e}}async writeDisabledServers(e){await(0,En.mkdir)((0,a.dirname)(this.storagePath),{recursive:!0}),await(0,En.writeFile)(this.storagePath,JSON.stringify(e,null,2))}}class nf{pluginMcpService;importThirdPartyPlugins;constructor(e,t){this.pluginMcpService=e,this.importThirdPartyPlugins=t}async getDefinitions(){let e;try{e=await this.pluginMcpService.getPluginMcpServers()}catch(e){return Km.warn("[cursor-config-mcp] Failed to enumerate plugin MCP servers:",e),[]}const t=[];for(const r of e){if(!this.importThirdPartyPlugins&&cf(r))continue;const e=$u(r);e?t.push({identifier:r.identifier,authStorageKey:r.identifier,serverConfig:e,configPath:"",source:"plugin",metadata:{identifier:r.identifier,pluginName:r.pluginName,pluginSource:r.pluginSource}}):Km.warn("[cursor-config-mcp] Failed to initialize plugin MCP client:",{identifier:r.identifier,pluginName:r.pluginName,pluginSource:r.pluginSource,result:"invalid-config",errorMessage:"pluginMcpDescriptorToServerConfig returned undefined"})}return t}}class of{servers;constructor(e){this.servers=e}async getDefinitions(){return Object.entries(this.servers).map((([e,t])=>({identifier:e,authStorageKey:`inline:${e}`,serverConfig:lf(e,t),source:"inline",metadata:{source:"cursor-sdk"}})))}}function sf(e={}){var t,r,n;const o=null!==(t=e.teamSettingsService)&&void 0!==t?t:{getDotCursorProtection:async()=>!1,getShouldBlockMcp:async()=>!1,getDeleteFileProtection:async()=>!1,getIsHeadlessDisabled:async()=>!1,isServerBlocked:async()=>!1,getTeamRepos:async()=>{},getAutoRunControls:async()=>({enabled:!1,allowed:[],blocked:[],enableAllowlistMode:!0,enableRunEverything:!1,enableSmartAuto:!0,mcpToolAllowlist:[]}),getMcpToolControls:async()=>{},getNetworkAccessControls:async()=>({allowlist:[],denylist:[],available:!0}),getMcpNetworkControlsConfig:async()=>({enabled:!1}),getDefaultNetworkAllowlist:async()=>({allowlist:[],available:!0}),getSandboxingControls:async()=>({sandboxingDisabled:!1,networkingDisabled:!1,gitDisabled:!1}),isAttributionDisabledByAdmin:async()=>!1,invalidateCache:()=>{}},s=null!==(r=e.ignoreApprovals)&&void 0!==r&&r,l=null!==(n=e.importThirdPartyPlugins)&&void 0!==n&&n;return{async createLease(t){var r,n,u,d,p,h;const m=t.workspaceState,f=null!==(r=m.projectRoot)&&void 0!==r?r:m.workingDirectory,g=m.projectDirectory;if(!f||!g)return new wu;const v=new rf((0,a.join)(g,"mcp-disabled.json")),y=function(e){const{teamSettingsService:t,projectRoot:r,projectDirectory:n,ignoreApprovals:o,disabledStore:s,includeProjectMcp:l,includeUserMcp:c}=e;if(l&&c)return Wm.init(t,r,n,o,s);if(!l&&!c)return;const u=new Fu((0,a.join)(n,"mcp-auth.json")),d=o?{isServerApproved:()=>Promise.resolve(!0)}:new Lc((0,a.join)(n,"mcp-approvals.json"),r),p=[new Hc,new Fc(d),new ju(t),new $c(s)],h=[];return l&&h.push({prefix:"",loader:new Nu((0,a.join)(r,".cursor","mcp.json"),u,p)}),c&&h.push({prefix:"",loader:new Nu((0,a.join)((0,i.homedir)(),".cursor","mcp.json"),u,p)}),af(h)}({teamSettingsService:o,projectRoot:f,projectDirectory:g,ignoreApprovals:s,disabledStore:v,includeProjectMcp:null===(n=e.includeProjectMcp)||void 0===n||n,includeUserMcp:null===(u=e.includeUserMcp)||void 0===u||u}),w=[],b=null!==(d=e.inlineMcpServers)&&void 0!==d?d:{};if(Object.keys(b).length>0){const e=new Fu((0,a.join)(g,"mcp-auth.json")),t=[new Hc,new ju(o)];w.push({prefix:"",loader:new Du(new of(b),e,t)})}const S=ef(t.services.pluginBootstrapOutputs);if(S&&(null===(p=e.includePluginMcp)||void 0===p||p)){const e=new Lc((0,a.join)(g,"mcp-approvals.json"),f),t=new Fu((0,a.join)(g,"mcp-auth.json")),r=[new Hc];s||r.push(new Fc(e)),r.push(new ju(o),new $c(v));const n=new $h(S.pluginsService),i=new Du(new nf(n,l),t,r);w.push({prefix:"",loader:i})}if(y&&w.push({prefix:"",loader:y}),0===w.length)return new wu;const k=af(w),E=await k.load(null!==(h=e.initializationCtx)&&void 0!==h?h:(0,c.q6)(),e.cache);return new tf(E)}}}function af(e){return 1===e.length?e[0].loader:new Hm(e)}function lf(e,t){if("command"in t){if(void 0!==t.type&&"stdio"!==t.type)throw new Error(`Unsupported MCP server type "${String(t.type)}" for "${e}"`);return{command:t.command,args:t.args?[...t.args]:void 0,env:t.env,cwd:t.cwd}}if("url"in t){if(void 0!==t.type&&"http"!==t.type&&"sse"!==t.type)throw new Error(`Unsupported MCP server type "${String(t.type)}" for "${e}"`);const r={url:t.url,headers:t.headers,auth:t.auth?{CLIENT_ID:t.auth.CLIENT_ID,CLIENT_SECRET:t.auth.CLIENT_SECRET,scopes:t.auth.scopes?[...t.auth.scopes]:void 0}:void 0};return"sse"===t.type?Object.assign(Object.assign({},r),{type:"sse"}):r}throw new Error(`Invalid inline MCP server config for "${e}"`)}function cf(e){return"claude-plugin"===e.pluginSource}const uf=["user_info","project_layout","rules","always_applied_workspace_rules","agent_requestable_workspace_rules","user_rules","agent_skills","available_skills","cloud_instructions","cloud_task_instructions","open_and_recently_viewed_files","system_reminder","system-reminder","mcp_instructions","mcp_file_system","mcp_file_system_servers","git_status","agent_transcripts","cursor_rules_context","attached_files","system_notification","task_notification","agent_notification"];function df(e){return function(e,t){let r=e;for(const e of t){const t=new RegExp(`<${e}(?:\\s[^>]*)?>[\\s\\S]*?</${e}>`,"gi");r=r.replace(t,"")}return r.replace(/\n{3,}/g,"\n\n").trim()}(e,uf)}function pf(e){const t=(0,m.sh)(e.conversationId);if("subagent"===e.kind&&e.parentConversationId){const r=(0,m.sh)(e.parentConversationId);return`${m.O2}/${r}/subagents/${t}.${e.ext}`}return`${m.O2}/${t}/${t}.${e.ext}`}function hf(e){const t=(0,m.sh)(e.conversationId);return`${m.O2}/${t}.${e.ext}`}function mf(e){var t,r;const n=null!==(t=e.exts)&&void 0!==t?t:["jsonl","txt"],o=null===(r=e.includeLegacy)||void 0===r||r,s=[],i=e=>{s.includes(e)||s.push(e)};for(const t of n)i(pf({conversationId:e.conversationId,ext:t,kind:e.kind,parentConversationId:e.parentConversationId})),"subagent"===e.kind&&e.parentConversationId&&i(pf({conversationId:e.conversationId,ext:t,kind:"primary"})),o&&i(hf({conversationId:e.conversationId,ext:t}));return s}var ff;(()=>{var e;const t=null===(e=globalThis.Intl)||void 0===e?void 0:e.Segmenter;t&&new t(void 0,{granularity:"grapheme"})})(),r("../proto/dist/generated/aiserver/v1/chat_pb.js"),function(e){e.INTERNAL="INTERNAL",e.EXTERNAL="EXTERNAL",e.NO_PREAMBLE="NO_PREAMBLE"}(ff||(ff={}));var gf=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t},vf=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});function yf(e){switch(e){case H.xy.AGENT:return"agent";case H.xy.ASK:return"ask";case H.xy.PLAN:return"plan";case H.xy.DEBUG:return"debug";case H.xy.TRIAGE:return"triage";case H.xy.PROJECT:return"project";case H.xy.MULTITASK:return"multitask";case H.xy.UNSPECIFIED:default:return"agent"}}function wf(e,t){return t instanceof Uint8Array?{__type:"Uint8Array",hex:(r=t,Array.from(r).map((e=>e.toString(16).padStart(2,"0"))).join(""))}:"bigint"==typeof t?t.toString():t;var r}function bf(e,t){return t&&"object"==typeof t&&"Uint8Array"===t.__type&&"string"==typeof t.hex?`[Binary data omitted from transcript: ${t.hex.length/2} bytes]`:t}const Sf=new TextEncoder,kf=new TextDecoder,Ef=new class{serialize(e){const t=JSON.stringify(e,wf);return Sf.encode(t)}deserialize(e){const t=kf.decode(e);return t.includes('"__type":"Uint8Array"')?JSON.parse(t,bf):JSON.parse(t)}};function xf(e){var t;const r=e.providerOptions;return!0===(null===(t=null==r?void 0:r.cursor)||void 0===t?void 0:t.isSummary)}async function Cf(e,t,r){const n=[];let o=0,s=0,i=0,a=0,l=0,c=0,u=0;for(const p of r){const r=await t.getBlob(e,p);if(r){if(r.length>5e6){n.push((void 0,{role:"assistant",content:`[Oversize transcript blob omitted: ${d=r.length,`${(d/1e6).toFixed(1)} MB`}]`})),l++,c+=r.length,u=Math.max(u,r.length);continue}try{const e=performance.now(),t=Ef.deserialize(r),l=performance.now()-e;n.push(t),o++,s+=r.length,i=Math.max(i,r.length),a+=l}catch(e){}}}var d;return{messages:n,hydratedBlobCount:o,hydratedBlobBytes:s,largestHydratedBlobBytes:i,totalDeserializeDurationMs:a,omittedOversizeBlobCount:l,omittedOversizeBlobBytes:c,largestOmittedOversizeBlobBytes:u}}function _f(e,t){switch(e.type){case"text":return t?Pf(e.text):e.text;case"image":return"[Image]";case"file":return e.filename?`[File: ${e.filename}]`:"[File]";case"reasoning":return`[Thinking] ${e.text}`;case"redacted-reasoning":return"[Thinking]";case"tool-call":return`[Tool call] ${e.toolName}${function(e){if(null==e)return"";if("object"!=typeof e)return String(e);const t=e,r=Object.entries(t);return 0===r.length?"":`\n${r.map((([e,t])=>{let r;return r="string"==typeof t?t:"object"==typeof t&&null!==t?JSON.stringify(t):String(t),` ${e}: ${r}`})).join("\n")}`}(e.args)}`;case"tool-result":return`[Tool result] ${e.toolName}`;default:return""}}function Pf(e){return df(e)}function Rf(e){return e.replace(/<think>[\s\S]*?<\/think>/gi,"").replace(/<thinking>[\s\S]*?<\/thinking>/gi,"").replace(/\n{3,}/g,"\n\n").trim()}function Tf(e,t,r){if(void 0===e)return"";if("string"==typeof e){const n=t?Pf(e):e;return r?Rf(n):n}return e.map((e=>{if(r&&"text"===e.type){const r=Rf(t?Pf(e.text):e.text);return _f(Object.assign(Object.assign({},e),{text:r}),!1)}return _f(e,t)})).filter(Boolean).join("\n")}function If(e,t){const r={role:e.role},n=e.content;if("string"==typeof n){const o=t?Pf(n):n,s="assistant"===e.role?Rf(o):o;s.trim()&&(r.text=s)}else if(Array.isArray(n)){const o=[],s=[],i=[];let a;for(const r of n)switch(r.type){case"text":{const n=t?Pf(r.text):r.text,s="assistant"===e.role?Rf(n):n;s.trim()&&o.push(s);break}case"reasoning":r.text.trim()&&s.push(r.text);break;case"redacted-reasoning":s.push("[REDACTED]");break;case"image":o.push("[Image]");break;case"file":o.push(r.filename?`[File: ${r.filename}]`:"[File]");break;case"tool-call":i.push({toolName:r.toolName,args:r.args});break;case"tool-result":a={toolName:r.toolName}}o.length>0&&(r.text=o.join("\n")),s.length>0&&(r.thinking=s.join("\n")),i.length>0&&(r.toolCalls=i),a&&(r.toolResult=a)}return r}function Af(e){return e.endsWith("\n")?e:`${e}\n`}function Of(e){const{turnEnded:t}=e,r=[],n={},o=[];return void 0!==t&&(r.push(function(e){switch(e.status){case"success":return"Turn ended: success.";case"error":return`Turn ended: error: ${e.error}`;case"aborted":return e.error?`Turn ended: aborted: ${e.error}`:"Turn ended: aborted.";default:return e}}(t)),n.turnEnded=t,o.push(JSON.stringify(Object.assign({type:"turn_ended"},t)))),{textSuffixes:r,jsonFields:n,jsonlLines:o}}function Df(e){if("system"===e.role||xf(e))return;const t=If(e,"user"===e.role),r=[],n=[];if(t.text&&n.push(t.text),t.thinking&&n.push(t.thinking),n.length>0&&r.push({type:"text",text:n.join("\n\n")}),t.toolCalls)for(const e of t.toolCalls)r.push({type:"tool_use",name:e.toolName,input:e.args});if(0===r.length)return;const o={role:e.role,message:{content:r}};return JSON.stringify(o)}class Mf{projectDir;blobStore;writeFile;options;constructor(e,t,r,n={}){var o,s,i;this.projectDir=e,this.blobStore=t,this.writeFile=r,this.options={writeText:null===(o=n.writeText)||void 0===o||o,writeJson:null!==(s=n.writeJson)&&void 0!==s&&s,writeJsonl:null!==(i=n.writeJsonl)&&void 0!==i&&i,pathResolver:n.pathResolver,appendFile:n.appendFile}}resolveFilePath(e,t){if(this.options.pathResolver)return this.options.pathResolver(e,t);const r=pf({conversationId:e,ext:t,kind:"primary"});return`${this.projectDir}/${r}`}async writeFromStateFull(e,t,r,n={}){const o={stack:[],error:void 0,hasError:!1};try{const s=gf(o,(0,c.VI)(e.withName("writeFromState")),!1);try{const e=await async function(e,t,r){const n={stack:[],error:void 0,hasError:!1};try{const o=gf(n,(0,c.VI)(e.withName("hydrateSummaryArchives")),!1);let s=0;const i=(0,c.OA)(o.ctx),a=[];let l=0,u=0,d=0,p=0,h=0,m=0,f=0;const g=await Promise.all(r.summaryArchives.map((async e=>{s++;const r=await t.getBlob(i,e);if(r)try{const e=H.An.fromBinary(r);return s+=e.summarizedMessages.length,await Cf(i,t,e.summarizedMessages)}catch(e){}return{messages:[],hydratedBlobCount:0,hydratedBlobBytes:0,largestHydratedBlobBytes:0,totalDeserializeDurationMs:0,omittedOversizeBlobCount:0,omittedOversizeBlobBytes:0,largestOmittedOversizeBlobBytes:0}})));for(const e of g)a.push(...e.messages),l+=e.hydratedBlobCount,u+=e.hydratedBlobBytes,d=Math.max(d,e.largestHydratedBlobBytes),p+=e.totalDeserializeDurationMs,h+=e.omittedOversizeBlobCount,m+=e.omittedOversizeBlobBytes,f=Math.max(f,e.largestOmittedOversizeBlobBytes);o.span.setAttribute("getBlobCount",s),o.span.setAttribute("hydratedBlobCount",l),o.span.setAttribute("hydratedBlobBytes",u),o.span.setAttribute("largestHydratedBlobBytes",d),o.span.setAttribute("totalDeserializeDurationMs",p),o.span.setAttribute("omittedOversizeBlobCount",h),o.span.setAttribute("omittedOversizeBlobBytes",m),o.span.setAttribute("largestOmittedOversizeBlobBytes",f);const v=gf(n,(0,c.VI)(e.withName("hydratePromptMessages")),!1),y=await Cf(i,t,r.rootPromptMessagesJson);v.span.setAttribute("getBlobCount",r.rootPromptMessagesJson.length),v.span.setAttribute("hydratedBlobCount",y.hydratedBlobCount),v.span.setAttribute("hydratedBlobBytes",y.hydratedBlobBytes),v.span.setAttribute("largestHydratedBlobBytes",y.largestHydratedBlobBytes),v.span.setAttribute("totalDeserializeDurationMs",y.totalDeserializeDurationMs),v.span.setAttribute("omittedOversizeBlobCount",y.omittedOversizeBlobCount),v.span.setAttribute("omittedOversizeBlobBytes",y.omittedOversizeBlobBytes),v.span.setAttribute("largestOmittedOversizeBlobBytes",y.largestOmittedOversizeBlobBytes);const w=y.messages.filter((e=>"system"!==e.role&&!xf(e)));return a.push(...w),a}catch(e){n.error=e,n.hasError=!0}finally{vf(n)}}(s.ctx,this.blobStore,t),{overviewFactory:o}=n,i=Of(n);if(0===e.length&&0===i.jsonlLines.length)return;let a;if((this.options.writeText||o)&&(a=function(e){let t=e.filter((e=>"system"!==e.role));t.length>=2&&"user"===t[0].role&&"user"===t[1].role&&(t=t.slice(1));const r=[];for(const e of t){const t="user"===e.role,n="assistant"===e.role,o=Tf(e.content,t,n);o.trim()&&("tool"===e.role?r.push(o):r.push(`${e.role}:\n${o}`))}return r.join("\n\n")}(e)),this.options.writeText){const e=null!=a?a:"",t=i.textSuffixes.length>0?e.trim().length>0?`${e}\n\n${i.textSuffixes.join("\n")}`:i.textSuffixes.join("\n"):e;t.trim()&&await this.writeFile(this.resolveFilePath(r,"txt"),t)}if(this.options.writeJson){const n=function(e){let t=e.filter((e=>"system"!==e.role));t.length>=2&&"user"===t[0].role&&"user"===t[1].role&&(t=t.slice(1));const r=[];for(const e of t){const t=If(e,"user"===e.role);(t.text||t.thinking||t.toolCalls||t.toolResult)&&r.push(t)}return 0===r.length?"":JSON.stringify(r,null,2)}(e);if(n||i.jsonlLines.length>0){const e=Object.assign({mode:yf(t.mode),messages:n?JSON.parse(n):[]},i.jsonFields);await this.writeFile(this.resolveFilePath(r,"json"),JSON.stringify(e,null,2))}}if(this.options.writeJsonl){const t=function(e){let t=e.filter((e=>"system"!==e.role));t.length>=2&&"user"===t[0].role&&"user"===t[1].role&&(t=t.slice(1));const r=[];for(const e of t){const t=Df(e);t&&r.push(t)}return r.join("\n")}(e);let n=[t,...i.jsonlLines].filter((e=>e.length>0)).join("\n");if(n&&o&&(null==a?void 0:a.trim()))try{const e=(await o(a)).trim();e&&(n=function(e,t){const r={type:"metadata",metadata:{overview:t}};return`${JSON.stringify(r)}\n${e}`}(n,e))}catch(e){console.error("[TranscriptStore] Failed to generate transcript overview:",e)}n&&await this.writeFile(this.resolveFilePath(r,"jsonl"),Af(n))}}catch(e){console.error("[TranscriptStore] Failed to write transcript:",e)}}catch(e){o.error=e,o.hasError=!0}finally{vf(o)}}async writeFromStateIncremental(e,t,r,n,o={}){const s={stack:[],error:void 0,hasError:!1};try{const i=t.rootPromptMessagesJson.length,a=Of(o),l=a.jsonlLines.length>0;if(i===n&&!l&&!o.overviewFactory)return i;const u=this.options.appendFile;if(!(u&&this.options.writeJsonl&&!this.options.writeText&&!this.options.writeJson&&n>0&&i>=n&&(i>n||l))||o.overviewFactory)return await this.writeFromStateFull(e,t,r,o),i;if(i===n&&l){try{await u(this.resolveFilePath(r,"jsonl"),Af(a.jsonlLines.join("\n")))}catch(n){console.error("[TranscriptStore] Failed to append transcript, falling back to full write:",n),await this.writeFromStateFull(e,t,r,o)}return i}const d=gf(s,(0,c.VI)(e.withName("writeFromStateIncremental")),!1);try{const e=t.rootPromptMessagesJson.slice(n),o=await Cf(d.ctx,this.blobStore,e);d.span.setAttribute("hydratedBlobCount",o.hydratedBlobCount),d.span.setAttribute("hydratedBlobBytes",o.hydratedBlobBytes),d.span.setAttribute("largestHydratedBlobBytes",o.largestHydratedBlobBytes),d.span.setAttribute("totalDeserializeDurationMs",o.totalDeserializeDurationMs),d.span.setAttribute("omittedOversizeBlobCount",o.omittedOversizeBlobCount),d.span.setAttribute("omittedOversizeBlobBytes",o.omittedOversizeBlobBytes),d.span.setAttribute("largestOmittedOversizeBlobBytes",o.largestOmittedOversizeBlobBytes);const s=[];for(const e of o.messages){const t=Df(e);t&&s.push(t)}if(s.push(...a.jsonlLines),s.length>0){const e=Af(s.join("\n"));await u(this.resolveFilePath(r,"jsonl"),e)}}catch(n){console.error("[TranscriptStore] Failed to append transcript, falling back to full write:",n),await this.writeFromStateFull(e,t,r,o)}return i}catch(e){s.error=e,s.hasError=!0}finally{vf(s)}}}class jf extends Error{reason;failureType="permission_denied";constructor(e){super(`Hook denied: ${e}`),this.name="HookDeniedError",this.reason=e}}class Nf extends Error{reason;failureType="error";cause;constructor(e,t){super(`Hook failed (fail-closed): ${e}`),this.name="FailClosedError",this.reason=e,this.cause=t}}const $f="To view or modify configured hooks, go to Cursor Settings > Hooks.",Ff="Agent note: Do not suggest workarounds to the blocked tool.";function Lf(e){return e.includes(Ff)?e:`${e}\n\n${Ff}`}function Uf(e){return`Tool blocked because this hook is configured to fail closed (block when it fails). ${e}`}function Bf(e,t){return Lf(`${t?`${e} was blocked by a hook: ${t}`:`${e} was blocked by a hook.`}\n\n${$f}`)}function Hf(e){return function(e){return e instanceof jf}(e)||function(e){return e instanceof Nf}(e)}class Wf{workspacePath;globalContext;shellExecutor;promptHookClient;teamHooksReadyPromise;onHookExecution;options;sessionEnv;config;constructor(e,t,r,n,o,s,i,a){this.workspacePath=t,this.globalContext=r,this.shellExecutor=n,this.promptHookClient=o,this.teamHooksReadyPromise=s,this.onHookExecution=i,this.options=a,this.config=e}emitHookExecution(e){var t,r;const n=Object.assign(Object.assign({},e),{transportMode:null!==(r=e.transportMode)&&void 0!==r?r:"prompt"===e.hookType?"prompt":this.getCommandHookPayloadTransportMode()});try{null===(t=this.onHookExecution)||void 0===t||t.call(this,n)}catch(e){}}getCommandHookPayloadTransportMode(){var e;return"stdin"===(null===(e=this.options)||void 0===e?void 0:e.commandHookPayloadTransport)?"win32"===process.platform?"windows_temp_file":"stdin":"argv_heredoc"}shouldUseCommandHookDirectStdinTransport(){return"stdin"===this.getCommandHookPayloadTransportMode()}async writeCommandHookStdinPayload(e,t){if(!e)throw new Error("Hook stdin transport was requested, but the executor did not provide stdin");try{e.end(Buffer.from(t,"utf8"))}catch(e){const t=e instanceof Error&&"code"in e?e.code:void 0;if("EPIPE"===t||"ERR_STREAM_DESTROYED"===t||"ERR_STREAM_PREMATURE_CLOSE"===t)return;throw e}try{await(0,ks.finished)(e)}catch(e){const t=e instanceof Error&&"code"in e?e.code:void 0;if("EPIPE"===t||"ERR_STREAM_DESTROYED"===t||"ERR_STREAM_PREMATURE_CLOSE"===t)return;throw e}}updateConfig(e){this.config=e}setSessionEnvironment(e){this.sessionEnv=Object.assign(Object.assign({},this.sessionEnv),e)}clearSessionEnvironment(){this.sessionEnv=void 0}async getTranscriptPathIfExists(e){try{const t=(0,m.Rv)((0,i.homedir)(),this.workspacePath),r=mf({conversationId:e,kind:"primary"}).map((e=>(0,a.join)(t,e)));for(const e of r)try{return await(0,En.access)(e),e}catch(e){}return null}catch(e){return null}}async getSubagentTranscriptPathIfExists(e){const{subagentId:t,parentConversationId:r}=e;try{const e=(0,m.Rv)((0,i.homedir)(),this.workspacePath),n=mf({conversationId:t,kind:"subagent",parentConversationId:r}).map((t=>(0,a.join)(e,t)));for(const e of n)try{return await(0,En.access)(e),e}catch(e){}return null}catch(e){return null}}hasHooksForStep(e){return[this.config.enterpriseHooks,this.config.teamHooks,this.config.userHooks,this.config.projectHooks,this.config.claudeUserHooks,this.config.claudeProjectHooks,this.config.claudeProjectLocalHooks].some((t=>{const r=null==t?void 0:t.hooks[e];return void 0!==r&&r.length>0}))}hasFailClosedHooksForStep(e,t){const r=[this.config.enterpriseHooks,this.config.teamHooks,this.config.projectHooks,this.config.userHooks];for(const n of r){const r=null==n?void 0:n.hooks[e];if(r&&(t?ie(r,t):r).some((e=>!0===e.failClosed)))return!0}return!1}getCwdForSource(e){var t,r,n,o;const s=this.config.configDirs;switch(e){case"enterprise":return null!==(t=null==s?void 0:s.enterprise)&&void 0!==t?t:this.workspacePath;case"team":return null!==(r=null==s?void 0:s.team)&&void 0!==r?r:this.workspacePath;case"project":case"claude-project":case"claude-project-local":case"claude-plugin":default:return this.workspacePath;case"user":return null!==(n=null==s?void 0:s.user)&&void 0!==n?n:this.workspacePath;case"claude-user":return null!==(o=null==s?void 0:s.claudeUser)&&void 0!==o?o:this.workspacePath}}buildHookEnvironment(e){return Object.assign(Object.assign(Object.assign(Object.assign({CURSOR_PROJECT_DIR:this.workspacePath,CURSOR_VERSION:this.globalContext.cursor_version},this.globalContext.user_email&&{CURSOR_USER_EMAIL:this.globalContext.user_email}),e&&{CURSOR_TRANSCRIPT_PATH:e}),{CLAUDE_PROJECT_DIR:this.workspacePath}),this.sessionEnv)}shouldSkipHookDueToLoopLimit(e,t,r){if("stop"!==e&&"subagentStop"!==e)return!1;const n=r.loop_count,o=t.loop_limit;return null!==o&&(void 0===o?n>=5:n>=o)}async executeHookForStep(e,t){var r,n,o,s,i,a,l,c;this.teamHooksReadyPromise&&await this.teamHooksReadyPromise;const u=function(e){return we.includes(e)}(e),d=t,p=u?null:d.conversation_id?await this.getTranscriptPathIfExists(d.conversation_id):null;let h;if(e===Y.subagentStop){const e=t;h=e.subagent_id?await this.getSubagentTranscriptPathIfExists({subagentId:e.subagent_id,parentConversationId:e.parent_conversation_id}):null}const m=u?void 0:null!==(c=d.session_id)&&void 0!==c?c:d.conversation_id,f=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},t),void 0!==m&&{session_id:m}),{hook_event_name:e,cursor_version:this.globalContext.cursor_version,workspace_roots:[this.workspacePath],user_email:this.globalContext.user_email}),!u&&{transcript_path:p}),e===Y.subagentStop&&{agent_transcript_path:null!=h?h:null}),g=function(e,t){switch(e){case"beforeShellExecution":case"afterShellExecution":return t.command||void 0;case"beforeMCPExecution":case"afterMCPExecution":{const e=t;return e.tool_name?`MCP:${e.tool_name}`:void 0}case"beforeReadFile":return"Read";case"afterFileEdit":return"Write";case"beforeTabFileRead":return"TabRead";case"afterTabFileEdit":return"TabWrite";case"beforeSubmitPrompt":return"UserPromptSubmit";case"stop":return"Stop";case"afterAgentResponse":return"AgentResponse";case"afterAgentThought":return"AgentThought";case"subagentStart":case"subagentStop":return t.subagent_type||void 0;case"preToolUse":case"postToolUse":case"postToolUseFailure":return t.tool_name||void 0;default:return}}(e,f),v=[],y=(e,t)=>{if(!e)return;const r=ie(e,g),n=this.getCwdForSource(t);for(const e of r)fe(e)?this.promptHookClient&&v.push({type:"prompt",script:e,source:t}):("command"===(o=e).type||void 0===o.type)&&v.push({type:"command",script:e,cwd:n,source:t});var o};if(y(null===(r=this.config.enterpriseHooks)||void 0===r?void 0:r.hooks[e],"enterprise"),y(null===(n=this.config.teamHooks)||void 0===n?void 0:n.hooks[e],"team"),y(null===(o=this.config.projectHooks)||void 0===o?void 0:o.hooks[e],"project"),y(null===(s=this.config.userHooks)||void 0===s?void 0:s.hooks[e],"user"),y(null===(i=this.config.claudeProjectLocalHooks)||void 0===i?void 0:i.hooks[e],"claude-project-local"),y(null===(a=this.config.claudeProjectHooks)||void 0===a?void 0:a.hooks[e],"claude-project"),y(null===(l=this.config.claudeUserHooks)||void 0===l?void 0:l.hooks[e],"claude-user"),0!==v.length)return this.executeAllAndMerge(e,v,f)}async executeAllAndMerge(e,t,r){const n=t.map((async(t,n)=>{const{source:o,attribution:s}=t;try{return"prompt"===t.type?this.executePromptHook(e,t.script,r,o,n,s):this.executeCommandHook(e,t.script,t.cwd,r,o,n,s)}catch(r){if(!0===t.script.failClosed){const t=Uf(`Hook execution failed: ${r instanceof Error?r.message:String(r)}`),s=xe(e,t);if(s)return{success:!0,data:s,source:o,index:n}}return{success:!1,source:o,index:n}}})),o=await Promise.all(n),s=[];for(const e of o)e.success&&void 0!==e.data&&s.push(e.data);return function(e,t){var r;if(0===t.length)return;if(1===t.length)return t[0];const n=ye.includes(e),o=e===Y.sessionStart,s=e===Y.workspaceOpen,i=me.has(e),a={};for(const e of t){const t=e;for(const[e,u]of Object.entries(t))if(void 0!==u)if(s&&"pluginPaths"===e&&Array.isArray(u)){const t=null!==(r=a[e])&&void 0!==r?r:[],n=new Set(t),o=[...t];for(const e of u)"string"!=typeof e||n.has(e)||(n.add(e),o.push(e));a[e]=o}else"permission"===e&&n?a[e]=(c=u,"deny"===(l=a[e])||"deny"===c?"deny":"ask"===l||"ask"===c?"ask":"allow"===l||"allow"===c?"allow":void 0):"user_message"!==e&&"agent_message"!==e?i&&"additional_context"===e&&"string"==typeof u?a[e]=be(a[e],u):"continue"!==e||"boolean"!=typeof u?a[e]=o&&"env"===e&&"object"==typeof u&&null!==u?Se(a[e],u):u:void 0===a[e]?a[e]=u:a[e]=a[e]&&u:a[e]=be(a[e],u)}var l,c;return a}(e,s)}async executeCommandHook(e,t,r,n,o,s,i){var a,l,c,u,d,p,h,m;if(this.shouldSkipHookDueToLoopLimit(e,t,n))return{success:!1,source:o,index:s};const f=Date.now(),g=Buffer.byteLength(JSON.stringify(n),"utf8");let v;try{v=await this.executeCommandScript({script:t,cwd:r,request:n})}catch(r){const n=r instanceof Error?r.message:String(r),a=n.toLowerCase().includes("timed out"),l=Date.now()-f,c=a?"timeout":"spawn_error";if(!0===t.failClosed){const r=xe(e,Uf(`Hook "${t.command}" execution failed: ${n}`));if(r)return this.emitHookExecution(Object.assign({hookStep:e,hookSource:o,hookType:"command",status:a?"timeout":"blocked",latencyMs:l,payloadSizeBytes:g,errorClass:c,failClosed:!0,timedOut:a},i)),{success:!0,data:r,source:o,index:s}}return this.emitHookExecution(Object.assign({hookStep:e,hookSource:o,hookType:"command",status:a?"timeout":"failed",latencyMs:l,payloadSizeBytes:g,errorClass:c,failClosed:!0===t.failClosed,timedOut:a},i)),{success:!1,source:o,index:s}}if(2===v.exitCode){const r=function(e,t,r){const n=e.trim(),o=t.trim();return n||(o?`Hook blocked with message: ${o}`:`Hook "${r}" blocked this action (exit code 2) but provided no reason.`)}(v.stdout,v.stderr,t.command),n=xe(e,r);return n?(this.emitHookExecution(Object.assign({hookStep:e,hookSource:o,hookType:"command",status:"blocked",latencyMs:v.duration,payloadSizeBytes:g,failClosed:!0===t.failClosed,exitCode:v.exitCode},i)),{success:!0,data:n,source:o,index:s}):(this.emitHookExecution(Object.assign({hookStep:e,hookSource:o,hookType:"command",status:"blocked",latencyMs:v.duration,payloadSizeBytes:g,failClosed:!0===t.failClosed,exitCode:v.exitCode},i)),{success:!1,source:o,index:s})}if(0!==v.exitCode&&null!==v.exitCode){if(!0===t.failClosed){const r=xe(e,Uf(`Hook "${t.command}" failed with exit code ${v.exitCode}${v.stderr?`: ${v.stderr.trim()}`:""}`));if(r)return this.emitHookExecution(Object.assign({hookStep:e,hookSource:o,hookType:"command",status:"blocked",latencyMs:v.duration,payloadSizeBytes:g,errorClass:"exit_nonzero",failClosed:!0,exitCode:v.exitCode},i)),{success:!0,data:r,source:o,index:s}}return this.emitHookExecution(Object.assign({hookStep:e,hookSource:o,hookType:"command",status:"failed",latencyMs:v.duration,payloadSizeBytes:g,errorClass:"exit_nonzero",failClosed:!0===t.failClosed,exitCode:v.exitCode},i)),{success:!1,source:o,index:s}}const y=v.stdout.trim();if(!y){if(!0===t.failClosed){const r=xe(e,Uf(`Hook "${t.command}" returned no output.`));if(r)return this.emitHookExecution(Object.assign({hookStep:e,hookSource:o,hookType:"command",status:"blocked",latencyMs:v.duration,payloadSizeBytes:g,errorClass:"empty_stdout",failClosed:!0,exitCode:null!==(l=v.exitCode)&&void 0!==l?l:void 0},i)),{success:!0,data:r,source:o,index:s}}return this.emitHookExecution(Object.assign({hookStep:e,hookSource:o,hookType:"command",status:"failed",latencyMs:v.duration,payloadSizeBytes:g,errorClass:"empty_stdout",failClosed:!0===t.failClosed,exitCode:null!==(c=v.exitCode)&&void 0!==c?c:void 0},i)),{success:!1,source:o,index:s}}const w=function(e){const t=e.trim();if(0===t.length)return;const r=Ce(t);if(void 0!==r)return r.value;if(t.endsWith("}"))for(let e=t.length-1;e>=0;e--){if("{"!==t[e])continue;const r=Ce(t.slice(e));if(void 0!==r)return r.value}}(y);if(void 0===w){const r=Ee({step:e,command:t.command,failClosed:!0===t.failClosed,kind:"invalid_json"});return r.blockResponse?(this.emitHookExecution(Object.assign({hookStep:e,hookSource:o,hookType:"command",status:"blocked",latencyMs:v.duration,payloadSizeBytes:g,errorClass:"invalid_json",failClosed:!0===t.failClosed,exitCode:null!==(u=v.exitCode)&&void 0!==u?u:void 0},i)),{success:!0,data:r.blockResponse,source:o,index:s}):(this.emitHookExecution(Object.assign({hookStep:e,hookSource:o,hookType:"command",status:"failed",latencyMs:v.duration,payloadSizeBytes:g,errorClass:"invalid_json",failClosed:!0===t.failClosed,exitCode:null!==(d=v.exitCode)&&void 0!==d?d:void 0},i)),{success:!1,source:o,index:s})}const b=ve(e,w,{enableClaudeNestedHookSpecificOutputCompatibility:null===(a=this.options)||void 0===a?void 0:a.enableClaudeNestedHookSpecificOutputCompatibility});if(b.success){const r=b.data,n="deny"===r.permission||"ask"===r.permission;return this.emitHookExecution(Object.assign({hookStep:e,hookSource:o,hookType:"command",status:n?"blocked":"success",latencyMs:v.duration,payloadSizeBytes:g,failClosed:!0===t.failClosed,exitCode:null!==(p=v.exitCode)&&void 0!==p?p:void 0},i)),{success:!0,data:b.data,source:o,index:s}}const S=Ee({step:e,command:t.command,failClosed:!0===t.failClosed,kind:"invalid_response"});return S.blockResponse?(this.emitHookExecution(Object.assign({hookStep:e,hookSource:o,hookType:"command",status:"blocked",latencyMs:v.duration,payloadSizeBytes:g,errorClass:"invalid_response",failClosed:!0===t.failClosed,exitCode:null!==(h=v.exitCode)&&void 0!==h?h:void 0},i)),{success:!0,data:S.blockResponse,source:o,index:s}):(this.emitHookExecution(Object.assign({hookStep:e,hookSource:o,hookType:"command",status:"failed",latencyMs:v.duration,payloadSizeBytes:g,errorClass:"invalid_response",failClosed:!0===t.failClosed,exitCode:null!==(m=v.exitCode)&&void 0!==m?m:void 0},i)),{success:!1,source:o,index:s})}async executePromptHook(e,t,r,n,o,s){var i,a;if(this.shouldSkipHookDueToLoopLimit(e,t,r))return{success:!1,source:n,index:o};if(!this.promptHookClient)return{success:!1,source:n,index:o};const l=1e3*(null!==(i=t.timeout)&&void 0!==i?i:60),u=Date.now(),d=Buffer.byteLength(JSON.stringify(r),"utf8"),p=(0,c.q6)(),[h,m]=p.withTimeoutAndCancel(l);try{const i=JSON.parse(JSON.stringify(r)),l=await this.promptHookClient.evaluatePromptHook(h,{prompt:t.prompt,hookInputJson:i,modelName:t.model});if(l.ok){const r=function(e){return ke(e)?{permission:"allow"}:e===Y.beforeSubmitPrompt||e===Y.sessionStart?{continue:!0}:e===Y.stop?{}:void 0}(e);return this.emitHookExecution(Object.assign({hookStep:e,hookSource:n,hookType:"prompt",status:"success",latencyMs:Date.now()-u,payloadSizeBytes:d,failClosed:!0===t.failClosed},s)),r?{success:!0,data:r,source:n,index:o}:{success:!1,source:n,index:o}}{const r=xe(e,null!==(a=l.reason)&&void 0!==a?a:"Prompt hook blocked this action");return this.emitHookExecution(Object.assign({hookStep:e,hookSource:n,hookType:"prompt",status:"blocked",latencyMs:Date.now()-u,payloadSizeBytes:d,failClosed:!0===t.failClosed},s)),r?{success:!0,data:r,source:n,index:o}:{success:!1,source:n,index:o}}}catch(r){const i=r instanceof Error?r.message:String(r),a=i.toLowerCase().includes("abort")||i.toLowerCase().includes("timed out"),l=a?"timeout":"prompt_error";if(!0===t.failClosed){const t=xe(e,Uf(`Prompt hook failed: ${i}`));if(t)return this.emitHookExecution(Object.assign({hookStep:e,hookSource:n,hookType:"prompt",status:a?"timeout":"blocked",latencyMs:Date.now()-u,payloadSizeBytes:d,errorClass:l,failClosed:!0,timedOut:a},s)),{success:!0,data:t,source:n,index:o}}return this.emitHookExecution(Object.assign({hookStep:e,hookSource:n,hookType:"prompt",status:a?"timeout":"failed",latencyMs:Date.now()-u,payloadSizeBytes:d,errorClass:l,failClosed:!0===t.failClosed,timedOut:a},s)),{success:!1,source:n,index:o}}finally{m()}}async executeCommandScript(e){var t;const{script:r,cwd:n,request:o}=e,s=1e3*(null!==(t=r.timeout)&&void 0!==t?t:60),l=Date.now(),u=JSON.stringify(o);let d;const p=new AbortController,h=setTimeout((()=>{p.abort()}),s);try{const e="win32"===process.platform,t=this.getCommandHookPayloadTransportMode(),m=this.shouldUseCommandHookDirectStdinTransport();let f;if(m)f=r.command;else if("windows_temp_file"===t){d=await(0,En.mkdtemp)((0,a.join)((0,i.tmpdir)(),"cursor-hooks-"));const e=(0,a.join)(d,"payload.json");await(0,En.writeFile)(e,u,{encoding:"utf8",flag:"wx"}),f=function(e,t){const r=e.replace(/'/g,"''"),n=function(e){const t=e.trimStart();if(0===t.length)return e;if(t.startsWith("&"))return e;const r=t.charAt(0);return"'"===r||'"'===r?`& ${e}`:e}(t);return`$OutputEncoding = [System.Text.Encoding]::UTF8; Get-Content -LiteralPath '${r}' -Raw | & { $input | ${n} }`}(e,r.command)}else f=e?`@'\n${u.replace(/'/g,"''")}\n'@ | & ${r.command}`:`${r.command} <<'CURSOR_HOOK_EOF'\n${u}\nCURSOR_HOOK_EOF`;const g=o,v=this.buildHookEnvironment(g.transcript_path),y={};for(const[e,t]of Object.entries(v))void 0!==t&&(y[e]=t);const w=(0,c.q6)();let b="",S="",k=null,E=!1;for await(const e of this.shellExecutor.execute(w,f,{workingDirectory:n,signal:p.signal,sandboxPolicy:{perUser:{type:"insecure_none"}},env:y,pipeStdin:m}))switch(e.type){case"stdin_ready":m&&(await this.writeCommandHookStdinPayload(e.stdin,u),E=!0);break;case"stdout":b+=e.data.toString("utf8");break;case"stderr":S+=e.data.toString("utf8");break;case"exit":k=e.code}if(m&&!E)throw new Error("Hook stdin transport was requested, but the executor did not signal stdin readiness");clearTimeout(h);const x=Date.now()-l;if(p.signal.aborted)throw new Error(`Hook script timed out after ${s}ms`);return{stdout:b,stderr:S,exitCode:k,duration:x}}catch(e){if(clearTimeout(h),Date.now(),p.signal.aborted)throw new Error(`Hook script timed out after ${s}ms`);throw e}finally{if(d)try{await(0,En.rm)(d,{recursive:!0,force:!0})}catch(e){}}}}function zf(e){switch(null!=e?e:(0,i.platform)()){case"darwin":return a.join("/Library","Application Support","Cursor","hooks.json");case"win32":return a.join("C:\\","ProgramData","Cursor","hooks.json");default:return a.join("/etc","cursor","hooks.json")}}class qf{fileReader;paths;logger;constructor(e,t,r){this.fileReader=e,this.paths=t,this.logger=r||{warn:e=>console.warn(`[hooks] ${e}`),info:e=>{}}}async load(e={}){const{loadProjectHooks:t=!0}=e,r={errors:[],configDirs:{}},n=async(e,t,n,o,s,i,l)=>{if(e)try{if(!await this.fileReader.exists(e))return;const i=await this.fileReader.readFile(e);if(!i)return;const{config:c,error:u}=l(i);c?(r[n]=c,((e,t)=>{r.configDirs[e]=a.dirname(t)})(o,e)):u&&r.errors.push({source:t,message:`${s} at ${e}: ${u}`})}catch(e){r.errors.push({source:t,message:`Error accessing ${i} config file: ${String(e)}`})}},o=[{path:this.paths.enterpriseConfigPath,source:"enterprise",resultKey:"enterpriseHooks",configDirKey:"enterprise",parsePrefix:"Enterprise hooks.json",accessLabel:"enterprise"},{path:this.paths.teamConfigPath,source:"team",resultKey:"teamHooks",configDirKey:"team",parsePrefix:"Team hooks.json",accessLabel:"team"},{path:this.paths.userConfigPath,source:"user",resultKey:"userHooks",configDirKey:"user",parsePrefix:"User hooks.json",accessLabel:"user"},{path:t?this.paths.projectConfigPath:void 0,source:"project",resultKey:"projectHooks",configDirKey:"project",parsePrefix:"Project hooks.json",accessLabel:"project"}];for(const e of o)await n(e.path,e.source,e.resultKey,e.configDirKey,e.parsePrefix,e.accessLabel,(t=>this.parseAndValidate(t,e.source)));const s=[{path:this.paths.claudeUserConfigPath,source:"claude-user",resultKey:"claudeUserHooks",configDirKey:"claudeUser",label:"user"},{path:t?this.paths.claudeProjectConfigPath:void 0,source:"claude-project",resultKey:"claudeProjectHooks",configDirKey:"claudeProject",label:"project"},{path:t?this.paths.claudeProjectLocalConfigPath:void 0,source:"claude-project-local",resultKey:"claudeProjectLocalHooks",configDirKey:"claudeProjectLocal",label:"project local"}];for(const e of s)await n(e.path,e.source,e.resultKey,e.configDirKey,`Claude ${e.label} settings.json`,`Claude ${e.label}`,(t=>this.parseClaudeConfig(t,e.source)));return this.dedupeClaudeHooksAgainstCursorHooks(r),r}getHookKey(e){return fe(e)?`prompt:${e.prompt}`:`command:${e.command}`}dedupeClaudeHooksAgainstCursorHooks(e){const t=[e.enterpriseHooks,e.teamHooks,e.userHooks,e.projectHooks],r=new Map;for(const e of t)if(null==e?void 0:e.hooks)for(const[t,n]of Object.entries(e.hooks)){if(!n)continue;let e=r.get(t);e||(e=new Set,r.set(t,e));for(const t of n)e.add(this.getHookKey(t))}const n=(e,t)=>{if(null==e?void 0:e.hooks)for(const[n,o]of Object.entries(e.hooks)){if(!o)continue;const s=r.get(n);if(!s||0===s.size)continue;const i=o.filter((e=>{const r=this.getHookKey(e);return!s.has(r)||(this.logger.info(`Removed duplicate ${t} hook for ${n}: ${r}`),!1)}));i.length!==o.length&&(e.hooks[n]=i)}};n(e.claudeUserHooks,"claude-user"),n(e.claudeProjectHooks,"claude-project"),n(e.claudeProjectLocalHooks,"claude-project-local")}parseClaudeConfig(e,t){try{const t=JSON.parse(e);if(!function(e,t={}){if("object"!=typeof e||null===e)return!1;if(!("hooks"in e))return!1;const r=e.hooks;if("object"!=typeof r||null===r)return!1;const n=r;for(const[e,r]of Object.entries(n))if(e in Z&&Array.isArray(r)){const n=!0===t.allowMatcherlessStop&&"Stop"===e;for(const e of r)if("object"==typeof e&&null!==e&&"hooks"in e&&Array.isArray(e.hooks)&&("matcher"in e||n))return!0}return!1}(t))return{};const r=t.hooks;if(!r||0===Object.keys(r).length)return{};const n=se(r,this.logger),o=Me(n);return o.isValid?{config:n}:{error:`Invalid transformed config: ${o.errors.join("; ")}`}}catch(e){return{error:`Failed to parse JSON: ${String(e)}`}}}parseAndValidate(e,t){try{const r=this.parseJSONC(e),n=Me(r);if(!n.isValid)return{error:`Invalid ${t} config: ${n.errors.join("; ")}`};const o=r;return o.hooks?{config:o}:{error:`Invalid ${t} config: missing 'hooks' property`}}catch(e){return{error:`Failed to parse ${t} config JSON: ${String(e)}`}}}parseJSONC(e){let t=e.replace(/\/\/.*$/gm,"");return t=t.replace(/\/\*[\s\S]*?\*\//g,""),JSON.parse(t)}static getConfiguredSteps(e){const t=new Set,r=[e.enterpriseHooks,e.teamHooks,e.userHooks,e.projectHooks,e.claudeUserHooks,e.claudeProjectHooks,e.claudeProjectLocalHooks];for(const e of r)if(null==e?void 0:e.hooks)for(const r of Object.keys(e.hooks))t.add(r);return t}}class Gf{config;configuredSteps;constructor(e){this.config=e,this.configuredSteps=qf.getConfiguredSteps(e)}getConfig(){return this.config}hasHookForStep(e){return this.configuredSteps.has(e)}getConfiguredSteps(){return new Set(this.configuredSteps)}}var Vf=r("node:perf_hooks");function Jf(e,t){void 0!==e&&t.length>0&&e.push(...t)}class Kf extends Error{hookEventName;actualLength;maxLength;constructor(e){super(`Hook additional_context for ${e.hookEventName} is ${e.actualLength} chars (max ${e.maxLength}).`),this.name="HookAdditionalContextTooLargeError",this.hookEventName=e.hookEventName,this.actualLength=e.actualLength,this.maxLength=e.maxLength}}var Yf=r("../proto/dist/generated/agent/v1/hook_additional_context_pb.js");function Zf({hookEventName:e,additionalContext:t}){const r=function(e){const t=null==e?void 0:e.trim();return void 0!==t&&t.length>0?t:void 0}(t);if(void 0===r)return[];if(r.length>1e4)throw new Kf({hookEventName:e,actualLength:r.length,maxLength:1e4});return[new Yf.C({hookEventName:e,content:r})]}Object.fromEntries(Array.from(me).map((e=>{if(!function(e){return e===Y.sessionStart||e===Y.beforeSubmitPrompt||e===Y.preToolUse||e===Y.postToolUse||e===Y.postToolUseFailure}(e))throw new Error(`HOOK_STEPS_SUPPORTING_ADDITIONAL_CONTEXT lists ${e} but HookAdditionalContextEventName does not include it. Extend the Extract<> union in spec.ts.`);return[e,{hookEventName:e}]})));const Xf=(0,c.h)("generic-hooks");function Qf(e,t,r,n){try{return Zf({hookEventName:r,additionalContext:n})}catch(n){if(n instanceof Kf)return Xf.warn(e,`${r} additional_context exceeded max size; dropping carrier`,{toolName:t,hookEventName:r,actualLength:n.actualLength,maxLength:n.maxLength}),[];throw n}}const eg=e=>Math.round(1e3*e)/1e3;function tg(e,t,r,n,s,i){var a,l,c,u,d,p,h;const m=n(e),f=null!==(u=null===(a=s.getToolCallId)||void 0===a?void 0:a.call(s,t))&&void 0!==u?u:(0,o.randomUUID)(),g=null!==(d=null===(l=s.getExtraHookFields)||void 0===l?void 0:l.call(s,t))&&void 0!==d?d:{},v={baseHookRequest:m,toolUseId:f,toolInput:s.createToolInput(t),extraHookFields:g,hookContextCollector:null!==(h=null!==(p=null==i?void 0:i.hookContextCollector)&&void 0!==p?p:null===(c=s.getHookContextCollector)||void 0===c?void 0:c.call(s,t))&&void 0!==h?h:[]},y=function(e,t,r,n){let{toolInput:o,extraHookFields:s,hookContextCollector:i}=n;const{baseHookRequest:a,toolUseId:l}=n;return{fireFailureAsync:async(n,c,u,d=!1)=>{try{const p=await t.executeHookForStep(Y.postToolUseFailure,Object.assign(Object.assign(Object.assign({},a),{tool_name:r,tool_input:o,error_message:c,failure_type:u,duration:n,tool_use_id:l,is_interrupt:d}),s));Jf(i,Qf(e,r,Y.postToolUseFailure,null==p?void 0:p.additional_context))}catch(t){Xf.warn(e,"postToolUseFailure hook error",{toolName:r,error:t instanceof Error?t.message:String(t)})}},fireSuccessAsync:async(n,c)=>{try{const u=await t.executeHookForStep(Y.postToolUse,Object.assign(Object.assign(Object.assign({},a),{tool_name:r,tool_input:o,tool_output:c,duration:n,tool_use_id:l}),s));Jf(i,Qf(e,r,Y.postToolUse,null==u?void 0:u.additional_context))}catch(t){Xf.warn(e,"postToolUse hook error",{toolName:r,error:t instanceof Error?t.message:String(t)})}},getToolInput:()=>o,setToolInput:e=>{o=e},setExtraHookFields:e=>{s=e,n.extraHookFields=e}}}(e,r,s.toolName,v);return{hookContext:v,helpers:y}}async function rg(e,t,r,n,o,s,i,a){var l,c;const{baseHookRequest:u,toolUseId:d,extraHookFields:p}=n;try{const a=await r.executeHookForStep(Y.preToolUse,Object.assign(Object.assign(Object.assign({},u),{tool_name:s.toolName,tool_input:o.getToolInput(),tool_use_id:d}),p));if("deny"===(null==a?void 0:a.permission)){const r=a.user_message||`${s.toolName} blocked by preToolUse hook`,l=Lf(r);try{Jf(n.hookContextCollector,Zf({hookEventName:Y.preToolUse,additionalContext:a.additional_context}))}catch(t){if(!(t instanceof Kf))throw t;Xf.warn(e,"preToolUse deny additional_context exceeded max size; dropping carrier",{toolName:s.toolName,actualLength:t.actualLength,maxLength:t.maxLength})}return await o.fireFailureAsync(0,r,"permission_denied"),{type:"rejected",result:i(t,l),reason:l}}(null==a?void 0:a.updated_input)&&s.applyUpdatedInput&&(s.applyUpdatedInput(t,a.updated_input),o.setToolInput(s.createToolInput(t)),s.getExtraHookFields&&o.setExtraHookFields(s.getExtraHookFields(t))),Jf(n.hookContextCollector,Zf({hookEventName:Y.preToolUse,additionalContext:null==a?void 0:a.additional_context}))}catch(n){const a=null!==(c=null===(l=r.hasFailClosedHooksForStep)||void 0===l?void 0:l.call(r,Y.preToolUse,s.toolName))&&void 0!==c&&c,u=n instanceof Kf;if(a){const e=Uf(`${u?"preToolUse additional_context exceeded max size":"preToolUse hook failed"}: ${n instanceof Error?n.message:"preToolUse hook error"}`);return await o.fireFailureAsync(0,e,"error"),{type:"rejected",result:i(t,e),reason:e}}Xf.warn(e,u?"preToolUse additional_context exceeded max size; dropping carrier":"preToolUse hook error",Object.assign({toolName:s.toolName,error:n instanceof Error?n.message:String(n)},u?{actualLength:n.actualLength,maxLength:n.maxLength}:{}))}if(a)try{const s=await a({ctx:e,args:t,baseHookRequest:u,hookExecutor:r,toolInput:o.getToolInput(),toolUseId:d,extraHookFields:n.extraHookFields});if(void 0!==s){const e="Pre-execution hook returned rejection";return await o.fireFailureAsync(0,e,"permission_denied"),{type:"rejected",result:s,reason:e}}}catch(e){if(Hf(e))return await o.fireFailureAsync(0,e.reason,e.failureType),{type:"rejected",result:i(t,e.reason),reason:e.reason};throw e}return{type:"continue"}}function ng(e){return e.toolCallId}function og(e,t,r,n){return{async execute(o,s,i){var a,l,c,u,d,p,h,m,f,g;const{hookContext:v,helpers:y}=tg(o,s,t,r,n,i);let w;try{w=await rg(o,s,t,v,y,n,n.createRejectedResult,n.runPreExecutionHooks)}catch(e){throw null===(a=n.runCleanup)||void 0===a||a.call(n,v.toolUseId),e}if("rejected"===w.type)return null===(l=n.runCleanup)||void 0===l||l.call(n,v.toolUseId),w.result;const b=Vf.performance.now();try{const r=await e.execute(o,s,i),a=eg(Vf.performance.now()-b);if(n.runPostExecutionHooks)try{const e=await n.runPostExecutionHooks({ctx:o,args:s,result:r,baseHookRequest:v.baseHookRequest,hookExecutor:t,toolInput:y.getToolInput(),toolUseId:v.toolUseId,executionDurationMs:a,extraHookFields:v.extraHookFields});if(void 0!==e)return await y.fireSuccessAsync(a,JSON.stringify(n.createSuccessOutput(s,e))),null===(c=n.runCleanup)||void 0===c||c.call(n,v.toolUseId),e}catch(e){if(Hf(e))return await y.fireFailureAsync(a,e.reason,e.failureType),null===(u=n.runCleanup)||void 0===u||u.call(n,v.toolUseId),n.createRejectedResult(s,e.reason);Xf.warn(o,"postExecutionHooks error",{toolName:n.toolName,error:e instanceof Error?e.message:String(e)})}return n.isSuccess(r)?await y.fireSuccessAsync(a,JSON.stringify(n.createSuccessOutput(s,r))):await y.fireFailureAsync(a,n.getErrorMessage(r),null!==(f=null===(d=n.getFailureType)||void 0===d?void 0:d.call(n,r))&&void 0!==f?f:"error",null!==(g=null===(p=n.isInterrupt)||void 0===p?void 0:p.call(n,r))&&void 0!==g&&g),null===(h=n.runCleanup)||void 0===h||h.call(n,v.toolUseId),r}catch(e){const t=eg(Vf.performance.now()-b);throw await y.fireFailureAsync(t,e instanceof Error?e.message:String(e),"error"),null===(m=n.runCleanup)||void 0===m||m.call(n,v.toolUseId),e}}}}function*sg(e,t){const r=t.hookContextCollector;e.createHookContextEvent&&void 0!==r&&0!==r.length&&(yield e.createHookContextEvent(r))}class ig{async readFile(e){try{return await En.readFile(e,"utf-8")}catch(e){if("ENOENT"===(null==e?void 0:e.code))return;throw e}}async exists(e){try{return await En.access(e),!0}catch(e){return!1}}}class ag{innerExecutor;hooksAdditionalContextPromise;teamHooksReadyPromise;hooksConfigLease;constructor(e,t,r,n){this.innerExecutor=e,this.hooksAdditionalContextPromise=t,this.teamHooksReadyPromise=r,this.hooksConfigLease=n}async execute(e,t,r){this.teamHooksReadyPromise&&await this.teamHooksReadyPromise;const n=await this.innerExecutor.execute(e,t,r),o=await this.hooksAdditionalContextPromise,s=this.hooksConfigLease?new Ct.Jy({configuredSteps:Array.from(this.hooksConfigLease.getConfiguredSteps())}):void 0;if("success"===n.result.case&&(o||s)){const e=n.result.value.requestContext,t=new Ct.bb(Object.assign(Object.assign(Object.assign({},e),o&&{hooksAdditionalContext:o}),s&&{hooksConfig:s}));return new Ct._G({result:{case:"success",value:new Ct.yW({requestContext:t})}})}return n}}function lg(e){return!!e&&e.type!==Un.vc.INSECURE_NONE&&e.type!==Un.vc.UNSPECIFIED}const cg="Shell";async function ug({hookExecutor:e,baseHookRequest:t,command:r,cwd:n,sandbox:o}){const s=await e.executeHookForStep(Y.beforeShellExecution,Object.assign(Object.assign({},t),{command:r,cwd:n,sandbox:o}));if("deny"===(null==s?void 0:s.permission)){const e=Bf("Command execution",s.user_message);throw new jf(e)}if("ask"===(null==s?void 0:s.permission))return i=s.user_message,new Xe.In({kind:Xe.b.FORCE_PROMPT,reason:i});var i}const dg={toolName:cg,getToolCallId:ng,createToolInput:e=>{const t=e.workingDirectory||"";return{command:e.command,cwd:t}},applyUpdatedInput:(e,t)=>{"string"==typeof t.command&&(e.command=t.command),"string"==typeof t.cwd&&(e.workingDirectory=t.cwd)},createRejectedResult:(e,t)=>new Ke.Lt({result:{case:"rejected",value:new Xe.pZ({command:e.command,workingDirectory:e.workingDirectory,reason:t})}}),isSuccess:e=>"success"===e.result.case,getErrorMessage:e=>{switch(e.result.case){case"error":return e.result.value.error||"BackgroundShell error";case"rejected":return e.result.value.reason||"BackgroundShell rejected";case"permissionDenied":return"Permission denied";default:return"Unknown error"}},createSuccessOutput:(e,t)=>"success"===t.result.case?{shell_id:t.result.value.shellId,pid:t.result.value.pid}:{success:!0},getExtraHookFields:e=>({cwd:e.workingDirectory||""}),runPreExecutionHooks:async e=>{const{args:t,baseHookRequest:r,hookExecutor:n}=e,o=t.workingDirectory||"",s=lg(t.sandboxPolicy);ft(t,await ug({hookExecutor:n,baseHookRequest:r,command:t.command,cwd:o,sandbox:s}))}};class pg{wrappedExecutor;constructor(e,t,r){this.wrappedExecutor=og(e,t,r,dg)}execute(e,t,r){return this.wrappedExecutor.execute(e,t,r)}}const hg={toolName:"WriteShellStdin",createToolInput:e=>({shell_id:e.shellId,chars_length:e.chars.length}),createRejectedResult:(e,t)=>new Ke.nt({result:{case:"error",value:new Ke.Gv({error:t})}}),isSuccess:e=>"success"===e.result.case,getErrorMessage:e=>"error"===e.result.case?e.result.value.error||"WriteShellStdin error":"Unknown error",createSuccessOutput:e=>({shell_id:e.shellId,success:!0})};class mg{wrappedExecutor;constructor(e,t,r){this.wrappedExecutor=og(e,t,r,hg)}execute(e,t,r){return this.wrappedExecutor.execute(e,t,r)}}const fg={toolName:"ComputerUse",getToolCallId:ng,createToolInput:e=>({actions_count:e.actions.length}),createRejectedResult:(e,t)=>new Hl.ks({result:{case:"error",value:new Hl.Jb({error:t})}}),isSuccess:e=>"success"===e.result.case,getErrorMessage:e=>"error"===e.result.case?e.result.value.error||"ComputerUse error":"Unknown error",createSuccessOutput:(e,t)=>"success"===t.result.case?{action_count:t.result.value.actionCount,duration_ms:t.result.value.durationMs}:{success:!0}};class gg{wrappedExecutor;constructor(e,t,r){this.wrappedExecutor=og(e,t,r,fg)}execute(e,t,r){return this.wrappedExecutor.execute(e,t,r)}}const vg={toolName:"Delete",getToolCallId:ng,createToolInput:e=>({file_path:e.path}),applyUpdatedInput:(e,t)=>{"string"==typeof t.file_path&&(e.path=t.file_path)},createRejectedResult:(e,t)=>new Ye.Pi({result:{case:"rejected",value:new Ye.iq({path:e.path,reason:t})}}),isSuccess:e=>"success"===e.result.case,getErrorMessage:e=>{switch(e.result.case){case"fileNotFound":return`File not found: ${e.result.value.path}`;case"notFile":return`Not a file: ${e.result.value.path}`;case"permissionDenied":return`Permission denied: ${e.result.value.path}`;case"fileBusy":return`File busy: ${e.result.value.path}`;case"rejected":return e.result.value.reason||"Delete rejected";case"error":return e.result.value.error||"Delete error";default:return"Unknown error"}},createSuccessOutput:e=>({file_path:e.path,deleted:!0})};class yg{wrappedExecutor;constructor(e,t,r){this.wrappedExecutor=og(e,t,r,vg)}execute(e,t,r){return this.wrappedExecutor.execute(e,t,r)}}const wg={toolName:"ReadLints",getToolCallId:ng,createToolInput:e=>({file_path:e.path}),applyUpdatedInput:(e,t)=>{"string"==typeof t.file_path&&(e.path=t.file_path)},createRejectedResult:(e,t)=>new Nl.Ek({result:{case:"rejected",value:new Nl.J6({path:e.path,reason:t})}}),isSuccess:e=>"success"===e.result.case,getErrorMessage:e=>{switch(e.result.case){case"error":return e.result.value.error||"Diagnostics error";case"rejected":return e.result.value.reason||"Diagnostics rejected";case"fileNotFound":return`File not found: ${e.result.value.path}`;case"permissionDenied":return`Permission denied: ${e.result.value.path}`;default:return"Unknown error"}},createSuccessOutput:(e,t)=>"success"===t.result.case?{file_path:e.path,diagnostics_count:t.result.value.totalDiagnostics}:{file_path:e.path,success:!0}};class bg{wrappedExecutor;constructor(e,t,r){this.wrappedExecutor=og(e,t,r,wg)}execute(e,t,r){return this.wrappedExecutor.execute(e,t,r)}}const Sg={toolName:"Fetch",getToolCallId:ng,createToolInput:e=>({url:e.url}),applyUpdatedInput:(e,t)=>{"string"==typeof t.url&&(e.url=t.url)},createRejectedResult:(e,t)=>new bc.uN({result:{case:"error",value:new bc.fk({url:e.url,error:t})}}),isSuccess:e=>"success"===e.result.case,getErrorMessage:e=>"error"===e.result.case?e.result.value.error||"Fetch error":"Unknown error",createSuccessOutput:(e,t)=>"success"===t.result.case?{url:e.url,status_code:t.result.value.statusCode,content_length:t.result.value.content.length}:{url:e.url,success:!0}};class kg{wrappedExecutor;constructor(e,t,r){this.wrappedExecutor=og(e,t,r,Sg)}execute(e,t,r){return this.wrappedExecutor.execute(e,t,r)}}const Eg={toolName:"Grep",getToolCallId:ng,createToolInput:e=>({pattern:e.pattern,file_path:e.path,glob:e.glob,output_mode:e.outputMode}),applyUpdatedInput:(e,t)=>{"string"==typeof t.pattern&&(e.pattern=t.pattern),"string"==typeof t.file_path&&(e.path=t.file_path)},createRejectedResult:(e,t)=>new dn.Ud({result:{case:"error",value:new dn.ts({error:t})}}),isSuccess:e=>"success"===e.result.case,getErrorMessage:e=>"error"===e.result.case?e.result.value.error||"Grep error":"Unknown error",createSuccessOutput:e=>({pattern:e.pattern,success:!0})};class xg{wrappedExecutor;constructor(e,t,r){this.wrappedExecutor=og(e,t,r,Eg)}execute(e,t,r){return this.wrappedExecutor.execute(e,t,r)}}const Cg={toolName:"List",getToolCallId:ng,createToolInput:e=>({file_path:e.path,ignore:e.ignore}),applyUpdatedInput:(e,t)=>{"string"==typeof t.file_path&&(e.path=t.file_path)},createRejectedResult:(e,t)=>new pn.fv({result:{case:"rejected",value:new pn.k2({path:e.path,reason:t})}}),isSuccess:e=>"success"===e.result.case,getErrorMessage:e=>{switch(e.result.case){case"error":return e.result.value.error||"Ls error";case"rejected":return e.result.value.reason||"Ls rejected";case"timeout":return"Ls operation timed out";default:return"Unknown error"}},getFailureType:e=>"timeout"===e.result.case?"timeout":"error",createSuccessOutput:e=>({file_path:e.path,success:!0})};class _g{wrappedExecutor;constructor(e,t,r){this.wrappedExecutor=og(e,t,r,Cg)}execute(e,t,r){return this.wrappedExecutor.execute(e,t,r)}}const Pg=(0,c.h)("hooks-exec:mcp");function Rg(e,t,r,n){try{return Zf({hookEventName:r,additionalContext:n})}catch(n){if(n instanceof Kf)return Pg.warn(e,`${r} additional_context exceeded max size; dropping carrier`,{toolName:t,hookEventName:r,actualLength:n.actualLength,maxLength:n.maxLength}),[];throw n}}class Tg{innerExecutor;hookExecutor;baseHookRequestExtractor;mcpLease;constructor(e,t,r,n){this.innerExecutor=e,this.hookExecutor=t,this.baseHookRequestExtractor=r,this.mcpLease=n}async execute(e,t,r){var n,s,i,a,l,c;if(t.smartModeApprovalOnly)return this.innerExecutor.execute(e,t,r);const u=this.baseHookRequestExtractor(e),d=(0,o.randomUUID)(),p=null!==(a=null==r?void 0:r.hookContextCollector)&&void 0!==a?a:[];let h=Object.fromEntries(Object.entries(t.args).map((([e,t])=>[e,null==t?void 0:t.toJson()])));const m=`MCP:${t.toolName}`;try{const r=await this.hookExecutor.executeHookForStep(Y.preToolUse,Object.assign(Object.assign({},u),{tool_name:m,tool_input:h,tool_use_id:d}));if("deny"===(null==r?void 0:r.permission)){const t=r.user_message||"MCP tool blocked by preToolUse hook";try{Jf(p,Zf({hookEventName:Y.preToolUse,additionalContext:r.additional_context}))}catch(t){if(!(t instanceof Kf))throw t;Pg.warn(e,"preToolUse deny additional_context exceeded max size; dropping carrier",{toolName:m,actualLength:t.actualLength,maxLength:t.maxLength})}return await this.firePostToolUseFailureAsync(e,u,m,h,t,"permission_denied",0,d,!1,p),new Ze.iz({result:{case:"permissionDenied",value:new Ze.HQ({error:Bf("MCP tool execution",t),isReadonly:!1})}})}if(null==r?void 0:r.updated_input)try{for(const[e,n]of Object.entries(r.updated_input))void 0!==n&&(t.args[e]=hr.Value.fromJson(n));h=Object.fromEntries(Object.entries(t.args).map((([e,t])=>[e,null==t?void 0:t.toJson()])))}catch(t){Pg.warn(e,"Failed to merge updated_input for MCP",{error:t instanceof Error?t.message:String(t)})}Jf(p,Zf({hookEventName:Y.preToolUse,additionalContext:null==r?void 0:r.additional_context}))}catch(t){const r=null!==(l=null===(s=(n=this.hookExecutor).hasFailClosedHooksForStep)||void 0===s?void 0:s.call(n,Y.preToolUse,m))&&void 0!==l&&l,o=t instanceof Kf;if(r){const r=Uf(`${o?"preToolUse additional_context exceeded max size":"preToolUse hook failed"}: ${t instanceof Error?t.message:"preToolUse hook error"}`);return await this.firePostToolUseFailureAsync(e,u,m,h,r,"error",0,d,!1,p),new Ze.iz({result:{case:"permissionDenied",value:new Ze.HQ({error:Bf("MCP tool execution",r),isReadonly:!1})}})}Pg.warn(e,o?"preToolUse additional_context exceeded max size; dropping carrier":"preToolUse hook error in MCP executor",Object.assign({toolName:m,error:t instanceof Error?t.message:String(t)},o?{actualLength:t.actualLength,maxLength:t.maxLength}:{}))}const f=await(null===(i=this.mcpLease)||void 0===i?void 0:i.getClient(e,t.providerIdentifier)),g=null==f?void 0:f.config;let v;const y=g&&"url"in g&&g.url?g.url:void 0;v=void 0!==y?{url:y}:g&&"command"in g?{command:[g.command,...null!==(c=g.args)&&void 0!==c?c:[]].filter(Boolean).join(" ")}:{command:t.providerIdentifier};const w=Object.assign({mcp_server_name:t.providerIdentifier},void 0!==y?{mcp_server_url:y}:{}),b=Object.assign(Object.assign(Object.assign(Object.assign({},u),{tool_name:t.toolName,tool_input:JSON.stringify(h)}),w),v),S=await this.hookExecutor.executeHookForStep(Y.beforeMCPExecution,b);if("deny"===(null==S?void 0:S.permission)){const t=Bf("MCP tool execution",S.user_message);return await this.firePostToolUseFailureAsync(e,u,m,h,t,"permission_denied",0,d,!1,p),new Ze.iz({result:{case:"permissionDenied",value:new Ze.HQ({error:t,isReadonly:!1})}})}const k=Vf.performance.now();try{const n=await this.innerExecutor.execute(e,t,r),o=eg(Vf.performance.now()-k);let s="{}";if("success"===n.result.case)try{const e=n.result.value.content.map((e=>"text"===e.content.case?{type:"text",text:e.content.value.text}:"image"===e.content.case?{type:"image",data:Buffer.from(e.content.value.data).toString("base64"),mimeType:e.content.value.mimeType}:{type:"unknown"}));s=JSON.stringify({content:e,isError:n.result.value.isError})}catch(t){Pg.warn(e,"Failed to serialize MCP result",{error:t instanceof Error?t.message:String(t)}),s=JSON.stringify({error:"Failed to serialize result"})}else"error"===n.result.case?s=JSON.stringify({error:n.result.value.error}):"rejected"===n.result.case?s=JSON.stringify({rejected:!0,reason:n.result.value.reason}):"permissionDenied"===n.result.case&&(s=JSON.stringify({permissionDenied:!0,error:n.result.value.error}));const i=Object.assign(Object.assign(Object.assign({},u),{tool_name:t.toolName,tool_input:JSON.stringify(h),result_json:s,duration:o}),w);await this.hookExecutor.executeHookForStep(Y.afterMCPExecution,i);const a=await this.firePostToolUse(e,u,m,h,s,o,d,p);if(void 0!==(null==a?void 0:a.updated_mcp_tool_output))try{const e=a.updated_mcp_tool_output,t=[];if("string"==typeof e)t.push(new Ze._Z({content:{case:"text",value:new Ze.zN({text:e})}}));else if("object"==typeof e&&null!==e&&"content"in e&&Array.isArray(e.content)){const r=e.content;for(const e of r)"object"==typeof e&&null!==e&&"type"in e&&"text"===e.type&&"text"in e?t.push(new Ze._Z({content:{case:"text",value:new Ze.zN({text:String(e.text)})}})):t.push(new Ze._Z({content:{case:"text",value:new Ze.zN({text:JSON.stringify(e)})}}))}else t.push(new Ze._Z({content:{case:"text",value:new Ze.zN({text:JSON.stringify(e)})}}));const r="object"==typeof e&&null!==e&&"isError"in e&&Boolean(e.isError);return new Ze.iz({result:{case:"success",value:new Ze.QW({content:t,isError:r})}})}catch(t){return Pg.warn(e,"Failed to process updated_mcp_tool_output",{error:t instanceof Error?t.message:String(t)}),n}return n}catch(t){const r=eg(Vf.performance.now()-k),n=t instanceof Error?t.message:String(t);throw await this.firePostToolUseFailureAsync(e,u,m,h,n,"error",r,d,!1,p),t}}async firePostToolUse(e,t,r,n,o,s,i,a){try{const l=await this.hookExecutor.executeHookForStep(Y.postToolUse,Object.assign(Object.assign({},t),{tool_name:r,tool_input:n,tool_output:o,duration:s,tool_use_id:i}));return Jf(a,Rg(e,r,Y.postToolUse,null==l?void 0:l.additional_context)),l}catch(t){return void Pg.warn(e,"postToolUse hook error in MCP executor",{error:t instanceof Error?t.message:String(t)})}}async firePostToolUseFailureAsync(e,t,r,n,o,s,i,a,l,c){try{const u=await this.hookExecutor.executeHookForStep(Y.postToolUseFailure,Object.assign(Object.assign({},t),{tool_name:r,tool_input:n,error_message:o,failure_type:s,duration:i,tool_use_id:a,is_interrupt:l}));Jf(c,Rg(e,r,Y.postToolUseFailure,null==u?void 0:u.additional_context))}catch(t){Pg.warn(e,"postToolUseFailure hook error in MCP executor",{error:t instanceof Error?t.message:String(t)})}}}const Ig={toolName:"ListMcpResources",createToolInput:e=>({server:e.server}),applyUpdatedInput:(e,t)=>{"string"==typeof t.server&&(e.server=t.server)},createRejectedResult:(e,t)=>new Ze.kP({result:{case:"error",value:new Ze.w2({error:t})}}),isSuccess:e=>"success"===e.result.case,getErrorMessage:e=>{switch(e.result.case){case"error":return e.result.value.error||"ListMcpResources error";case"rejected":return e.result.value.reason||"ListMcpResources rejected";default:return"Unknown error"}},createSuccessOutput:(e,t)=>"success"===t.result.case?{resources_count:t.result.value.resources.length}:{success:!0}};class Ag{wrappedExecutor;constructor(e,t,r){this.wrappedExecutor=og(e,t,r,Ig)}execute(e,t,r){return this.wrappedExecutor.execute(e,t,r)}}const Og={toolName:"FetchMcpResource",createToolInput:e=>({server:e.server,uri:e.uri,download_path:e.downloadPath}),applyUpdatedInput:(e,t)=>{"string"==typeof t.server&&(e.server=t.server),"string"==typeof t.uri&&(e.uri=t.uri),"string"==typeof t.download_path&&(e.downloadPath=t.download_path)},createRejectedResult:(e,t)=>new Ze.ZD({result:{case:"error",value:new Ze.Jx({error:t})}}),isSuccess:e=>"success"===e.result.case,getErrorMessage:e=>{switch(e.result.case){case"error":return e.result.value.error||"ReadMcpResource error";case"rejected":return e.result.value.reason||"ReadMcpResource rejected";case"notFound":return"Resource not found";default:return"Unknown error"}},createSuccessOutput:(e,t)=>{if("success"===t.result.case){const r=t.result.value;return{uri:e.uri,name:r.name,mime_type:r.mimeType,download_path:r.downloadPath,content_type:r.content.case,content_length:"text"===r.content.case||"blob"===r.content.case?r.content.value.length:void 0}}return{uri:e.uri,success:!0}}};class Dg{wrappedExecutor;constructor(e,t,r){this.wrappedExecutor=og(e,t,r,Og)}execute(e,t,r){return this.wrappedExecutor.execute(e,t,r)}}const Mg={toolName:"Read",getToolCallId:ng,createToolInput:e=>({file_path:e.path}),applyUpdatedInput:(e,t)=>{"string"==typeof t.file_path&&(e.path=t.file_path)},createRejectedResult:(e,t)=>new rp.sV({result:{case:"rejected",value:new rp.f4({path:e.path,reason:t})}}),isSuccess:e=>"success"===e.result.case,getErrorMessage:e=>{switch(e.result.case){case"error":return e.result.value.error||"Read error";case"rejected":return e.result.value.reason||"Read rejected";case"fileNotFound":return`File not found: ${e.result.value.path}`;case"permissionDenied":return`Permission denied: ${e.result.value.path}`;case"invalidFile":return`Invalid file: ${e.result.value.path}`;default:return"Unknown error"}},createSuccessOutput:(e,t)=>{if("success"===t.result.case){const r="content"===t.result.value.output.case?t.result.value.output.value:"";return{file_path:e.path,content_length:r.length}}return{file_path:e.path,success:!0}},runPostExecutionHooks:async e=>{const{args:t,result:r,baseHookRequest:n,hookExecutor:o}=e;if("success"!==r.result.case)return;const s="content"===r.result.value.output.case?r.result.value.output.value:"",i=await async function(e,t){try{return await e()}catch(e){const r=function(e,t){return`${null!=e?e:"Action"} was blocked because a configured hook failed to execute${t?`: ${t}`:"."}\n\nThis is a safety measure (fail-closed) - when hooks cannot be evaluated, the action is blocked to prevent potentially unsafe operations.\n\n${$f}`}(t,e instanceof Error?e.message:String(e));throw new Nf(r,e)}}((()=>o.executeHookForStep(Y.beforeReadFile,Object.assign(Object.assign({},n),{content:s,file_path:t.path,attachments:[]}))),"File read");if("deny"===(null==i?void 0:i.permission)){const e=Bf("File read",i.user_message);throw new jf(e)}}};class jg{wrappedExecutor;constructor(e,t,r){this.wrappedExecutor=og(e,t,r,Mg)}execute(e,t,r){return this.wrappedExecutor.execute(e,t,r)}}const Ng={toolName:"RecordScreen",getToolCallId:ng,createToolInput:e=>({mode:e.mode,save_as_filename:e.saveAsFilename}),createRejectedResult:(e,t)=>new wp.Tj({result:{case:"failure",value:new wp.yH({error:t})}}),isSuccess:e=>"failure"!==e.result.case,getErrorMessage:e=>"failure"===e.result.case?e.result.value.error||"RecordScreen failed":"Unknown error",createSuccessOutput:(e,t)=>({result_type:t.result.case})};class $g{wrappedExecutor;constructor(e,t,r){this.wrappedExecutor=og(e,t,r,Ng)}execute(e,t,r){return this.wrappedExecutor.execute(e,t,r)}}function Fg(e){return"success"===e.result.case||"failure"===e.result.case?e.result.value.stdout+e.result.value.stderr:""}const Lg={toolName:cg,createToolInput:e=>{const t=e.workingDirectory||"",r=e.timeout;return Object.assign({command:e.command,cwd:t},"number"==typeof r&&r>0&&{timeout:r})},applyUpdatedInput:(e,t)=>{"string"==typeof t.command&&(e.command=t.command),"string"==typeof t.cwd&&(e.workingDirectory=t.cwd),"number"==typeof t.timeout&&t.timeout>=0&&(e.timeout=t.timeout)},createRejectedResult:(e,t)=>new Xe.W4({result:{case:"rejected",value:new Xe.pZ({command:e.command,workingDirectory:e.workingDirectory,reason:t})}}),isSuccess:e=>"success"===e.result.case||"failure"===e.result.case&&!e.result.value.aborted,getErrorMessage:e=>{switch(e.result.case){case"timeout":return`Command timed out after ${e.result.value.timeoutMs}ms`;case"spawnError":return e.result.value.error||"Failed to spawn command";case"failure":return e.result.value.aborted?"Command was aborted":"Command failed";case"rejected":return e.result.value.reason||"Command rejected";default:return"Unknown error"}},getFailureType:e=>"timeout"===e.result.case?"timeout":"error",isInterrupt:e=>"failure"===e.result.case&&!0===e.result.value.aborted,createSuccessOutput:(e,t)=>({output:Fg(t),exitCode:"success"===t.result.case?0:1}),getExtraHookFields:e=>({cwd:e.workingDirectory||""}),runPreExecutionHooks:async e=>{const{args:t,baseHookRequest:r,hookExecutor:n}=e,o=t.workingDirectory||"";ft(t,await ug({hookExecutor:n,baseHookRequest:r,command:t.command,cwd:o,sandbox:lg(t.requestedSandboxPolicy)}))},runPostExecutionHooks:async e=>{const{args:t,result:r,baseHookRequest:n,hookExecutor:o,executionDurationMs:s}=e,i=Fg(r);await o.executeHookForStep(Y.afterShellExecution,Object.assign(Object.assign({},n),{command:t.command,output:i,duration:s,sandbox:lg(t.requestedSandboxPolicy)}))}};class Ug{wrappedExecutor;constructor(e,t,r){this.wrappedExecutor=og(e,t,r,Lg)}execute(e,t,r){return this.wrappedExecutor.execute(e,t,r)}}class Bg{output="";exitEvent;onEvent(e){"stdout"===e.event.case||"stderr"===e.event.case?this.output+=e.event.value.data:"exit"===e.event.case&&(this.exitEvent=e.event.value)}getOutput(){return this.output}isAborted(){var e,t;return null!==(t=null===(e=this.exitEvent)||void 0===e?void 0:e.aborted)&&void 0!==t&&t}getExitCode(){var e,t;return null!==(t=null===(e=this.exitEvent)||void 0===e?void 0:e.code)&&void 0!==t?t:0}}const Hg={toolName:cg,createToolInput:e=>{const t=e.workingDirectory||"",r=e.timeout;return Object.assign({command:e.command,cwd:t},"number"==typeof r&&r>0&&{timeout:r})},applyUpdatedInput:(e,t)=>{"string"==typeof t.command&&(e.command=t.command),"string"==typeof t.cwd&&(e.workingDirectory=t.cwd),"number"==typeof t.timeout&&t.timeout>=0&&(e.timeout=t.timeout)},createRejectedEvent:(e,t)=>new Xe.FI({event:{case:"rejected",value:new Xe.pZ({command:e.command,workingDirectory:e.workingDirectory,reason:t})}}),createHookContextEvent:e=>new Xe.FI({event:{case:"hookContext",value:new Xe.Ng({hookAdditionalContexts:[...e]})}}),getExtraHookFields:e=>({cwd:e.workingDirectory||""}),createResultCollector:()=>new Bg,createSuccessOutput:(e,t)=>({output:t.getOutput(),exitCode:t.getExitCode()}),isStreamSuccess:e=>0===e.getExitCode(),getStreamErrorMessage:(e,t)=>t.getOutput().trim()||`Command failed with exit code ${t.getExitCode()}`,runPreExecutionHooks:async e=>{const{args:t,baseHookRequest:r,hookExecutor:n}=e,o=t.workingDirectory||"",s=lg(t.requestedSandboxPolicy);ft(t,await ug({hookExecutor:n,baseHookRequest:r,command:t.command,cwd:o,sandbox:s}))},runPostExecutionHooks:async e=>{const{args:t,baseHookRequest:r,hookExecutor:n,collector:o,executionDurationMs:s}=e,i=lg(t.requestedSandboxPolicy);await n.executeHookForStep(Y.afterShellExecution,Object.assign(Object.assign({},r),{command:t.command,output:o.getOutput(),duration:s,sandbox:i}))}};class Wg{wrappedExecutor;constructor(e,t,r){this.wrappedExecutor=function(e,t,r,n){return{async*execute(o,s,i){var a,l,c,u;const{hookContext:d,helpers:p}=tg(o,s,t,r,n,i),h=n.runPreExecutionHooks?async e=>{await n.runPreExecutionHooks(e)}:void 0,m=await rg(o,s,t,d,p,n,((e,t)=>n.createRejectedEvent(e,t)),h);if("rejected"===m.type){yield m.result;for(const e of sg(n,d))yield e;return}const f=Vf.performance.now(),g=n.createResultCollector();let v=!1;try{for await(const t of e.execute(o,s,i))g.onEvent(t),yield t}catch(e){v=!0;const t=eg(Vf.performance.now()-f),r=e instanceof Error?e.message:String(e);await p.fireFailureAsync(t,r,"error");for(const e of sg(n,d))yield e;throw e}const y=eg(Vf.performance.now()-f);if(n.runPostExecutionHooks)try{await n.runPostExecutionHooks({ctx:o,args:s,baseHookRequest:d.baseHookRequest,hookExecutor:t,toolInput:p.getToolInput(),toolUseId:d.toolUseId,extraHookFields:d.extraHookFields,collector:g,executionDurationMs:y})}catch(e){Xf.warn(o,"postExecutionHooks error",{toolName:n.toolName,error:e instanceof Error?e.message:String(e)})}if(!v)if(g.isAborted())await p.fireFailureAsync(y,"Command was aborted","error",!0);else if(null===(c=null===(a=n.isStreamSuccess)||void 0===a?void 0:a.call(n,g))||void 0===c||c)await p.fireSuccessAsync(y,JSON.stringify(n.createSuccessOutput(s,g)));else{const e=null!==(u=null===(l=n.getStreamErrorMessage)||void 0===l?void 0:l.call(n,s,g))&&void 0!==u?u:`Command failed with exit code ${g.getExitCode()}`;await p.fireFailureAsync(y,e,"error")}for(const e of sg(n,d))yield e}}}(e,t,r,Hg)}execute(e,t,r){return this.wrappedExecutor.execute(e,t,r)}}class zg{wrappedExecutor;constructor(e,t,r){const n=new Map;this.wrappedExecutor=og(e,t,r,function(e,t){return{toolName:"Write",getToolCallId:ng,createToolInput:e=>({file_path:e.path,content:e.fileText}),applyUpdatedInput:(e,t)=>{"string"==typeof t.file_path&&(e.path=t.file_path)},createRejectedResult:(e,t)=>new Qe.v3({result:{case:"error",value:new Qe.QM({path:e.path,error:t})}}),isSuccess:e=>"success"===e.result.case,getErrorMessage:e=>"error"===e.result.case?e.result.value.error||"Write error":"Unknown error",createSuccessOutput:e=>({file_path:e.path,success:!0}),runPreExecutionHooks:async e=>{const{args:r,toolUseId:n}=e;let o,s=!1;try{(await(0,En.stat)(r.path)).size>262144?s=!0:o=await(0,m.yR)(r.path)}catch(e){}t.set(n,{contentBeforeWrite:o,fileTooLarge:s})},runCleanup:e=>{t.delete(e)},runPostExecutionHooks:async r=>{const{args:n,result:o,baseHookRequest:s,toolUseId:i}=r,a=t.get(i);if("success"!==o.result.case)return;const{contentBeforeWrite:l,fileTooLarge:c}=null!=a?a:{fileTooLarge:!1};let u;u=c||void 0===l?[{old_string:"",new_string:n.fileText}]:l===n.fileText?[]:function(e,t){const r=(0,Uh.YB)("","",e,t,"","",{context:0});return 0===r.hunks.length?[]:r.hunks.map((e=>{const t=[],r=[];for(const n of e.lines)n.startsWith("-")?t.push(n.slice(1)):n.startsWith("+")&&r.push(n.slice(1));return{old_string:t.join("\n"),new_string:r.join("\n")}}))}(l,n.fileText);const d=Object.assign(Object.assign({},s),{file_path:n.path,edits:u}),p=await e.executeHookForStep(Y.afterFileEdit,d);if(n.returnFileContentAfterWrite&&void 0!==p){const e=o.result.value.path;try{const t=await(0,m.yR)(e),r=(0,m.lt)(t),n=Buffer.byteLength(t,"utf8");return new Qe.v3({result:{case:"success",value:new Qe.j6(Object.assign(Object.assign({},o.result.value),{fileContentAfterWrite:t,linesCreated:r,fileSize:n}))}})}catch(e){return}}}}}(t,n))}execute(e,t,r){return this.wrappedExecutor.execute(e,t,r)}}var qg;class Gg{innerAccessor;hookExecutor;baseHookRequestExtractor;mcpLease;hooksAdditionalContextPromise;teamHooksReadyPromise;hooksConfigLease;constructor(e,t,r,n,o,s,i){this.innerAccessor=e,this.hookExecutor=t,this.baseHookRequestExtractor=r,this.mcpLease=n,this.hooksAdditionalContextPromise=o,this.teamHooksReadyPromise=s,this.hooksConfigLease=i}get(e){var t;if(e.symbol===je.symbol)return new Ne(this.hookExecutor);const r=this.innerAccessor.get(e);return e.symbol===et.symbol?new Ug(r,this.hookExecutor,this.baseHookRequestExtractor):e.symbol===tt.symbol?new Wg(r,this.hookExecutor,this.baseHookRequestExtractor):e.symbol===rt.symbol?new zg(r,this.hookExecutor,this.baseHookRequestExtractor):e.symbol===Be.symbol?new Tg(r,this.hookExecutor,this.baseHookRequestExtractor,this.mcpLease):e.symbol===Ve.symbol||e.symbol===Je.symbol?new jg(r,this.hookExecutor,this.baseHookRequestExtractor):e.symbol===Fe.symbol?new _g(r,this.hookExecutor,this.baseHookRequestExtractor):e.symbol===K.symbol?new xg(r,this.hookExecutor,this.baseHookRequestExtractor):e.symbol===V.symbol?new kg(r,this.hookExecutor,this.baseHookRequestExtractor):e.symbol===q.symbol?new yg(r,this.hookExecutor,this.baseHookRequestExtractor):e.symbol===G.symbol?new bg(r,this.hookExecutor,this.baseHookRequestExtractor):e.symbol===He.symbol?new Ag(r,this.hookExecutor,this.baseHookRequestExtractor):e.symbol===We.symbol?new Dg(r,this.hookExecutor,this.baseHookRequestExtractor):e.symbol===L.symbol?new pg(r,this.hookExecutor,this.baseHookRequestExtractor):e.symbol===U.symbol?new mg(r,this.hookExecutor,this.baseHookRequestExtractor):e.symbol===z.symbol?new gg(r,this.hookExecutor,this.baseHookRequestExtractor):e.symbol===ut.symbol?new $g(r,this.hookExecutor,this.baseHookRequestExtractor):e.symbol===dt.symbol&&(this.hooksAdditionalContextPromise||this.hooksConfigLease)?new ag(r,null!==(t=this.hooksAdditionalContextPromise)&&void 0!==t?t:Promise.resolve(void 0),this.teamHooksReadyPromise,this.hooksConfigLease):r}*entries(){var e;for(const[t,r]of this.innerAccessor.entries())t.symbol===et.symbol?yield[t,new Ug(r,this.hookExecutor,this.baseHookRequestExtractor)]:t.symbol===tt.symbol?yield[t,new Wg(r,this.hookExecutor,this.baseHookRequestExtractor)]:t.symbol===rt.symbol?yield[t,new zg(r,this.hookExecutor,this.baseHookRequestExtractor)]:t.symbol===Be.symbol?yield[t,new Tg(r,this.hookExecutor,this.baseHookRequestExtractor,this.mcpLease)]:t.symbol===Ve.symbol||t.symbol===Je.symbol?yield[t,new jg(r,this.hookExecutor,this.baseHookRequestExtractor)]:t.symbol===Fe.symbol?yield[t,new _g(r,this.hookExecutor,this.baseHookRequestExtractor)]:t.symbol===K.symbol?yield[t,new xg(r,this.hookExecutor,this.baseHookRequestExtractor)]:t.symbol===V.symbol?yield[t,new kg(r,this.hookExecutor,this.baseHookRequestExtractor)]:t.symbol===q.symbol?yield[t,new yg(r,this.hookExecutor,this.baseHookRequestExtractor)]:t.symbol===G.symbol?yield[t,new bg(r,this.hookExecutor,this.baseHookRequestExtractor)]:t.symbol===He.symbol?yield[t,new Ag(r,this.hookExecutor,this.baseHookRequestExtractor)]:t.symbol===We.symbol?yield[t,new Dg(r,this.hookExecutor,this.baseHookRequestExtractor)]:t.symbol===L.symbol?yield[t,new pg(r,this.hookExecutor,this.baseHookRequestExtractor)]:t.symbol===U.symbol?yield[t,new mg(r,this.hookExecutor,this.baseHookRequestExtractor)]:t.symbol===z.symbol?yield[t,new gg(r,this.hookExecutor,this.baseHookRequestExtractor)]:t.symbol===ut.symbol?yield[t,new $g(r,this.hookExecutor,this.baseHookRequestExtractor)]:t.symbol===dt.symbol&&(this.hooksAdditionalContextPromise||this.hooksConfigLease)?yield[t,new ag(r,null!==(e=this.hooksAdditionalContextPromise)&&void 0!==e?e:Promise.resolve(void 0),this.teamHooksReadyPromise,this.hooksConfigLease)]:yield[t,r];yield[je,new Ne(this.hookExecutor)]}}const Vg={cursor_version:null!==(qg=process.env.AGENT_CLI_STATIC_VERSION)&&void 0!==qg?qg:"1.0.0",user_email:null};function Jg(e=process.cwd()){let t=e;const r={getCwd:async()=>t,clone:e=>Jg(null!=e?e:t),async*execute(e,r,n={}){var o,s,i,a,l,c;const u=null!==(l=n.workingDirectory)&&void 0!==l?l:t;t=u;const d=function(e){return"win32"===process.platform?{executable:(0,Bn.oG)(),args:[...Ae,"-Command",e]}:{executable:process.env.SHELL||"/bin/sh",args:["-lc",e]}}(r),p=(0,Os.spawn)(d.executable,[...d.args],{cwd:u,env:Object.assign(Object.assign({},process.env),null!==(c=n.env)&&void 0!==c?c:{}),signal:n.signal,stdio:[!0===n.pipeStdin?"pipe":"ignore","pipe","pipe"]}),h=[];let m,f,g=!1;const v=()=>{null==m||m(),m=void 0},y=e=>{h.push(e),v()};for(p.on("spawn",(()=>{var e;!0===n.pipeStdin&&y({type:"stdin_ready",stdin:null!==(e=p.stdin)&&void 0!==e?e:void 0})})),null===(o=p.stdout)||void 0===o||o.setEncoding("utf8"),null===(s=p.stdout)||void 0===s||s.on("data",(e=>{y({type:"stdout",data:String(e)})})),null===(i=p.stderr)||void 0===i||i.setEncoding("utf8"),null===(a=p.stderr)||void 0===a||a.on("data",(e=>{y({type:"stderr",data:String(e)})})),p.on("error",(e=>{f=e,g=!0,v()})),p.on("close",(e=>{y({type:"exit",code:e}),g=!0}));!g||h.length>0;)0!==h.length?yield h.shift():await new Promise((e=>{m=e}));if(void 0!==f)throw f}};return r}function Kg(e,t,...r){for(const n of r){const r=t(e[n]);if(void 0!==r)return r}}function Yg(e){return"string"==typeof e&&e.length>0?e:void 0}function Zg(e){return"object"==typeof e&&null!==e&&"string"==typeof e.id&&"string"==typeof e.value}function Xg(e){if(Array.isArray(e)&&e.every(Zg))return e.map((e=>({id:e.id,value:e.value})))}class Qg{innerAccessor;sessionHooksRuntime;constructor(e,t){this.innerAccessor=e,this.sessionHooksRuntime=t}get(e){return this.innerAccessor.get(e)}entries(){return this.innerAccessor.entries()}async dispose(){await this.sessionHooksRuntime.dispose()}}async function ev(e,t={}){const r=await new qf(new ig,function(e,t){var r,n,o,s,l;const c=null!==(n=null!==(r=e.projectRoot)&&void 0!==r?r:e.workingDirectory)&&void 0!==n?n:e.workspaceRoots[0],u=null===(o=t.includeProjectHooks)||void 0===o||o,d=null===(s=t.includeUserHooks)||void 0===s||s;return{enterpriseConfigPath:null===(l=t.includeEnterpriseHooks)||void 0===l||l?zf():void 0,userConfigPath:d?(0,a.join)((0,i.homedir)(),".cursor","hooks.json"):void 0,claudeUserConfigPath:d?(0,a.join)((0,i.homedir)(),".claude","settings.json"):void 0,projectConfigPath:u&&void 0!==c?(0,a.join)(c,".cursor","hooks.json"):void 0,claudeProjectConfigPath:u&&void 0!==c?(0,a.join)(c,".claude","settings.json"):void 0,claudeProjectLocalConfigPath:u&&void 0!==c?(0,a.join)(c,".claude","settings.local.json"):void 0}}(e,t)).load(),n=new Gf(r),o=function(e){var t,r,n;return null!==(n=null!==(r=null!==(t=e.projectRoot)&&void 0!==t?t:e.workingDirectory)&&void 0!==r?r:e.workspaceRoots[0])&&void 0!==n?n:process.cwd()}(e),s=function(e){var t;return Object.freeze(Object.assign(Object.assign({},Vg),null!==(t=e.globalContext)&&void 0!==t?t:{}))}(t);return{projectDir:e.projectRoot,workspacePath:o,hooksConfig:r,hooksConfigLease:n,globalContext:s,createSessionRuntime(){var e;const i=new Wf(r,o,s,(null!==(e=t.createTerminalExecutor)&&void 0!==e?e:Jg)(),t.promptHookClient,void 0,void 0,{commandHookPayloadTransport:(a=t.useCommandHookStdinTransport,!0===a?"stdin":"legacy")});var a;return{hookExecutor:i,hooksConfigLease:n,async dispose(){i.clearSessionEnvironment()}}},async dispose(){}}}function tv(e={}){return{createHooksRuntime:t=>ev(t.workspaceState,e)}}async function rv(e){(function(e){return"object"==typeof e&&null!==e&&"dispose"in e&&"function"==typeof e.dispose})(e)&&await e.dispose()}function nv(e={}){var t,r,n,o,s,a;const l=null!==(t=e.getThirdPartyExtensibilityEnabled)&&void 0!==t?t:()=>!0,u=null!==(r=e.importThirdPartyPlugins)&&void 0!==r&&r,d=null===(n=e.includeProjectExtensibility)||void 0===n||n,p=null===(o=e.includeUserExtensibility)||void 0===o||o,h=null===(s=e.includeManagedSkills)||void 0===s||s,m=null===(a=e.includePluginExtensibility)||void 0===a||a,f=new _c,g=(0,i.homedir)(),v=Xa(g).dirPath;let y,w=!0;return{async prepareLocalExtensibility(){w=h&&await async function(e){if(!e)return!1;const t=(0,mr.createClient)(kn.I,e),r=await async function(e,t){try{const r=await t.getManagedSkills()??[],n=await Dh(e,{managedSkills:[...r]});return{status:"synced",managedSkillsCount:r.length,syncResult:n}}catch(t){return jh.warn(e,"Failed to sync managed skills from source",{error:t}),{status:"fetch_failed",error:t}}}((0,c.q6)(),{getManagedSkills:async()=>{var e;return null!==(e=(await t.getManagedSkills(new fm.X8g({}))).skills)&&void 0!==e?e:[]}});return"synced"===r.status}(e.dashboardTransport)},async loadLocalExtensibility(t){var r,n;const o=t.workspaceState,s=null!==(r=o.projectRoot)&&void 0!==r?r:o.workingDirectory;if(!s)return y=void 0,{cursorRulesService:uv(),getAgentSkills:async e=>[]};const i=(0,c.q6)(),a=null===(n=e.loadNestedRules)||void 0===n||n,h=function(e,t){const r=ov(t);return{getAllCursorRules:async t=>sv(await e.getAllCursorRules(t),r),reload(t){e.reload(t)},onDidChangeRules:t=>e.onDidChangeRules(t),dispose(){e.dispose()}}}(d?new bl(i,f,s,a,l,void 0):uv(),{allowedRoots:d?[s]:[],excludedRoots:[]}),b=function(e,t){const r=ov(t);return{getAllCursorRules:async t=>sv(await e.getAllCursorRules(t),r),getAllAgentSkills:async t=>sv(await e.getAllAgentSkills(t),r),reload(t){e.reload(t)},onDidChangeRules:t=>e.onDidChangeRules(t),onDidChangeSkills:t=>e.onDidChangeSkills(t),dispose(){e.dispose()}}}(new Sl(i,d?[s]:[],g,f,a,void 0,l,Promise.resolve(),"sdk"),{allowedRoots:[...d?[s]:[],...p?[g]:[],...w?[v]:[]],excludedRoots:w?[]:[v]}),S=d?new Al(s,l):new Cl,k=ef(t.services.pluginBootstrapOutputs),E=k&&m?new El(i,(()=>({importThirdPartyPlugins:u})),void 0,k.pluginsService):void 0,x=k&&m?new Ml((()=>({importThirdPartyPlugins:u})),k.pluginsService):void 0,C=new wl([h,b,...E?[E]:[]]),_=new Sh([b,...E?[E]:[]],(()=>[]),(()=>({workspacePaths:d?[s]:[],userHomeDirectory:g}))),P=new Dl([S,...x?[x]:[]]);return y={localRulesService:h,localSkillsService:b,localSubagentsService:S,pluginSkillsService:E,pluginSubagentsService:x,mergedCursorRulesService:C,mergedAgentSkillsService:_,mergedSubagentsService:P},{cursorRulesService:C,getAgentSkills:e=>_.getAllAgentSkills(e),subagentsService:P}},async disposeLocalExtensibility(){if(!y)return;const e=y;y=void 0,await async function(e){let t;const r=[e.mergedSubagentsService,e.mergedAgentSkillsService,e.mergedCursorRulesService,e.pluginSubagentsService,e.pluginSkillsService,e.localSubagentsService,e.localSkillsService,e.localRulesService];for(const e of r)try{await rv(e)}catch(e){null!=t||(t=e)}if(void 0!==t)throw t}(e)}}}function ov(e){const t=Promise.all(e.allowedRoots.map(lv)),r=Promise.all(e.excludedRoots.map(lv));return async e=>{const[n,o,s]=await Promise.all([cv(e.fullPath),t,r]);return void 0!==n&&!s.some((e=>iv(n,e)))&&o.some((e=>iv(n,e)))}}async function sv(e,t){const r=await Promise.all(e.map(t));return e.filter(((e,t)=>r[t]))}function iv(e,t){if(e===t)return!0;const r=`${t}/`;return e.startsWith(r)}function av(e){return e.replace(/\\/g,"/").replace(/\/+$/,"")}async function lv(e){try{return av(await(0,En.realpath)(e))}catch(t){return av(e)}}async function cv(e){try{return av(await(0,En.realpath)(e))}catch(e){return}}function uv(){return{getAllCursorRules:async()=>[],reload(){},onDidChangeRules:()=>()=>{},dispose(){}}}function dv(e={}){var t,r,n,o;const s=null!==(t=e.userHomeDirectory)&&void 0!==t?t:(0,i.homedir)(),l=null!==(r=e.importThirdPartyPlugins)&&void 0!==r&&r,c=null!==(n=e.pluginLogger)&&void 0!==n?n:{log(e,t,r){switch(e){case"warn":Km.warn("[local-plugins-bootstrap]",t,null!=r?r:{});break;case"error":Km.error("[local-plugins-bootstrap]",t,null!=r?r:{})}},increment(){},distribution(){},captureException(e,t){Km.error("[local-plugins-bootstrap] Unexpected plugin exception:",e,null!=t?t:{})}},u=pv(e.marketplaceOptions),d=void 0!==e.dashboardTransport,p=null!==(o=e.loadCursorFirstParty)&&void 0!==o?o:u||d;return{async loadPluginBootstrapOutputs(t){var r;const n=function(e){var t,r;return null!==(r=null!==(t=e.projectRoot)&&void 0!==t?t:e.workspaceRoots[0])&&void 0!==r?r:e.workingDirectory}(t.workspaceState),{discoveredEntries:o,failures:i}=await async function(e){if(void 0===e)return{discoveredEntries:[],failures:[]};try{return{discoveredEntries:(await Ca(e)).map((({key:t,entry:r})=>({source:"project-settings",workspacePath:e,key:t,entry:r}))),failures:[]}}catch(e){return{discoveredEntries:[],failures:[{stage:"discovery",source:"project-settings",message:e instanceof Error?`Failed to read project plugin settings: ${e.message}`:`Failed to read project plugin settings: ${String(e)}`,detail:e}]}}}(n),u=null!==(r=e.marketplaceOptions)&&void 0!==r?r:e.dashboardTransport?function(e){const t=(0,a.join)(e.userHomeDirectory,".cursor","plugins","marketplaces"),r=(0,mr.createClient)(kn.I,e.dashboardTransport),n=wi((async()=>{try{return await r.getEffectiveUserPlugins(new fm.EwF({}))}catch(e){return{plugins:[]}}}),t,void 0,void 0,{allowedMarketplaceNames:["cursor-public"]}),o=e.workspacePath,s=wi((async()=>{var e,t;if(void 0===o)return{plugins:[]};try{const n=await Ca(o);if(0===n.length)return{plugins:[]};const s=n.filter((e=>e.entry.gitUrl)),i=n.filter((e=>!e.entry.gitUrl)),a=s.filter((({entry:e})=>{const t=e.gitUrl;return!t||Sa(t)})).map((({key:e,entry:t})=>{const r=_a(e),n=t.gitUrl;return{plugin:{name:r.name,gitUrl:n,gitRef:t.gitRef,gitPath:t.gitPath,marketplace:{name:r.marketplaceName,gitUrl:n,gitRef:t.gitRef}},isEnabled:!0}}));let l=[];if(i.length>0)try{const n=i.map((e=>{const t=_a(e.key);return new fm.vwy({name:t.name,marketplaceName:t.marketplaceName})}));l=null!==(t=null===(e=(await r.resolvePluginsByRef(new fm.WvV({refs:n}))).plugins)||void 0===e?void 0:e.map((e=>({plugin:e,isEnabled:!0}))))&&void 0!==t?t:[]}catch(e){}return{plugins:[...a,...l]}}catch(e){return{plugins:[]}}}),t,void 0,void 0,{allowedMarketplaceNames:["cursor-public"]});return[{client:n,userId:"",cacheManager:new Is(e.userHomeDirectory),pruneOldVersions:!0},{client:s,userId:"",cacheManager:new Is(e.userHomeDirectory),pruneOldVersions:!0}]}({dashboardTransport:e.dashboardTransport,workspacePath:n,userHomeDirectory:s}):void 0,d=pv(u),h=new Lh(void 0!==n?[n]:[],s,(()=>({importThirdPartyPlugins:l,loadCursorFirstParty:p})),u,c);let m=[];const f=[...i];try{m=await h.getAllEnabledPlugins()}catch(e){f.push({stage:"resolution",source:"plugin-loader",message:e instanceof Error?`Failed to load plugins: ${e.message}`:`Failed to load plugins: ${String(e)}`,detail:e})}o.length>0&&!d&&f.push({stage:"resolution",source:"plugin-loader",message:"Project plugin entries were discovered, but no marketplace-backed project plugin source was configured. Those entries remain available through discoveredEntries only.",detail:{workspacePath:n,discoveredEntryCount:o.length}});const g={kind:Qm,discoveredEntries:o,loadedPlugins:m,loadFailures:h.getLoadFailures(),bootstrapFailures:f,pluginsService:h,async dispose(){}};for(const e of f)Km.warn("[local-plugins-bootstrap] Plugin bootstrap failure:",{workspacePath:n,stage:e.stage,source:e.source,message:e.message,detail:e.detail});for(const e of g.loadFailures)Km.warn("[local-plugins-bootstrap] Plugin load failure:",{workspacePath:n,pluginName:e.pluginName,pluginId:e.pluginId,marketplaceName:e.marketplaceName,errorType:e.errorType,errorMessage:e.errorMessage});return[g]}}}function pv(e){return void 0!==e&&(!Array.isArray(e)||e.length>0)}class hv{async getAllCursorRules(e){return[]}reload(e){}dispose(){}onDidChangeRules(e){return()=>{}}}class mv extends mh{sessionMcpLease;constructor(e,t){super(e),this.sessionMcpLease=t}async dispose(){try{await super.dispose()}finally{await rv(this.sessionMcpLease)}}}function fv(e){const t=new _c;return{async createResources(r){var n,o,s,i,a,l,c,u;const d=null!==(s=null===(n=e.createSessionDependencies)||void 0===n?void 0:n.call(e,r))&&void 0!==s?s:{pendingDecisionStore:e.pendingDecisionStore,fileChangeTracker:e.fileChangeTracker,permissionsService:e.permissionsService};if(!d.pendingDecisionStore||!d.fileChangeTracker||!d.permissionsService)throw new Error("Local resource provider factory requires either shared dependencies or a per-session dependency factory.");const p=null!==(i=r.workspaceServices.cursorRulesService)&&void 0!==i?i:new hv,h=null!==(a=r.workspaceServices.subagentsService)&&void 0!==a?a:new Cl,m=null!==(l=r.workspaceServices.mcpLease)&&void 0!==l?l:new wu,f=void 0!==r.options.mcpServersOverride&&void 0!==e.createSessionMcpLease?await e.createSessionMcpLease(r,r.options.mcpServersOverride):void 0,g=(v=null!=f?f:m,0===(y=null!==(c=r.options.extraMcpTools)&&void 0!==c?c:[]).length?v:"onDidChange"in(w=v)&&"function"==typeof w.onDidChange?new wc(v,y):new yc(v,y));var v,y,w;try{const n={pendingDecisionStore:d.pendingDecisionStore,fileChangeTracker:d.fileChangeTracker,gitExecutor:t,ignoreService:e.ignoreService,grepProvider:e.grepProvider,permissionsService:d.permissionsService,workspacePaths:e.workspacePaths,diagnosticsProvider:e.diagnosticsProvider,mcpLease:g,mcpStateAccessor:null===(o=e.createMcpStateAccessor)||void 0===o?void 0:o.call(e,g),cursorRulesService:p,subagentsService:h,repositoryProvider:e.repositoryProvider,projectDir:e.projectDir,shellManager:e.shellManager,_defaultSandboxPolicy:null!==(u=e.defaultSandboxPolicy)&&void 0!==u?u:{type:"insecure_none"},_defaultSandboxPolicySources:e.defaultSandboxPolicySources,getSandboxEnabled:e.getSandboxEnabled,getSandboxSupported:e.getSandboxSupported,getNetworkAllowlistInfo:e.getNetworkAllowlistInfo,smartModeClassifierAutoModeEnabled:e.smartModeClassifierAutoModeEnabled,devForceNextSmartModeClassifierBlockToken:e.devForceNextSmartModeClassifierBlockToken,mcpFileOutputThresholdBytes:e.mcpFileOutputThresholdBytes,mcpMetaToolEnabled:e.mcpMetaToolEnabled,getAgentSkills:r.workspaceServices.getAgentSkills};return void 0===f?new mh(n):new mv(n,f)}catch(e){throw await rv(f),e}}}}const gv=["cursorRulesService","getAgentSkills","subagentsService"],vv=new WeakSet;function yv(e){("object"==typeof e&&null!==e||"function"==typeof e)&&vv.add(e)}function wv(e){return("object"==typeof e&&null!==e||"function"==typeof e)&&vv.has(e)}function bv(e,t){const r=Object.keys(t).filter((e=>!gv.includes(e)));if(r.length>0)throw new Error(`Workspace service contributors may only provide ${gv.join(", ")}. Received unsupported service keys: ${r.join(", ")}.`);for(const r of gv)Object.hasOwn(t,r)&&(e[r]=t[r])}async function Sv(e,t,r){var n,o,s;const i={config:void 0,plugins:[],pluginBootstrapOutputs:[],cursorRulesService:void 0,getAgentSkills:void 0,subagentsService:void 0,mcpLease:void 0,hooksRuntime:void 0};try{i.config=e.config?await e.config.loadConfig(t):void 0,i.plugins=e.plugins?await e.plugins.loadPlugins(t):[];const o=()=>({workspaceState:t,policy:r,services:i});i.pluginBootstrapOutputs=e.pluginBootstrap?await e.pluginBootstrap.loadPluginBootstrapOutputs(o()):i.pluginBootstrapOutputs,i.mcpLease=e.mcp?await e.mcp.createLease(o()):void 0,i.hooksRuntime=e.hooks?await e.hooks.createHooksRuntime(o()):void 0,(null===(n=e.localExtensibility)||void 0===n?void 0:n.prepareLocalExtensibility)&&await e.localExtensibility.prepareLocalExtensibility(o());const a=e.localExtensibility?await e.localExtensibility.loadLocalExtensibility(o()):void 0;void 0!==a&&(yv(a.cursorRulesService),yv(a.subagentsService),Object.assign(i,a));for(const t of null!==(s=e.workspaceServicesContributors)&&void 0!==s?s:[]){const e=await t.contributeServices(o());void 0!==e&&bv(i,e)}return i}catch(t){try{await kv(i,{disposeLocalExtensibility:null===(o=e.localExtensibility)||void 0===o?void 0:o.disposeLocalExtensibility})}catch(e){throw function(e,t){return new AggregateError([t],"Workspace service loading failed and resource cleanup also failed.",{cause:e})}(t,e)}throw t}}async function kv(e,t){const r=null==t?void 0:t.preserveSharedContributorsFrom;let n;const o=async e=>{try{await rv(e)}catch(e){null!=n||(n=e)}};if(e.subagentsService===(null==r?void 0:r.subagentsService)||wv(e.subagentsService)||await o(e.subagentsService),e.cursorRulesService===(null==r?void 0:r.cursorRulesService)||wv(e.cursorRulesService)||await o(e.cursorRulesService),null==t?void 0:t.disposeLocalExtensibility)try{await t.disposeLocalExtensibility()}catch(e){null!=n||(n=e)}await o(e.hooksRuntime),await o(e.mcpLease);try{await async function(e){let t;for(let r=e.length-1;r>=0;r-=1)try{await rv(e[r])}catch(e){null!=t||(t=e)}if(void 0!==t)throw t}(e.pluginBootstrapOutputs)}catch(e){null!=n||(n=e)}if(void 0!==n)throw n}async function Ev(e){const t=new Set;let r;for(let n=e.length-1;n>=0;n-=1){const o=e[n];if(!t.has(o)){t.add(o);try{await rv(o)}catch(e){null!=r||(r=e)}}}if(void 0!==r)throw r}const xv=["project","user","team","mdm","plugins"],Cv=new Set([...xv,"all"]);function _v(e){if(void 0===e||0===e.length)return Rv([]);for(const t of e)if(!Cv.has(t))throw new Error(`Unsupported setting source "${String(t)}"`);if(e.includes("all")){if(e.length>1)throw new Error('settingSources cannot mix "all" with individual setting sources');return Object.assign(Object.assign({},Rv(xv)),{all:!0})}return Rv(e)}function Pv(e,t){return e[t]}function Rv(e){const t=new Set(e);return{project:t.has("project"),user:t.has("user"),team:t.has("team"),mdm:t.has("mdm"),plugins:t.has("plugins"),all:!1}}const Tv=Object.freeze({}),Iv=Object.freeze({allowMcpServers:!0,allowPlugins:!0,allowBackgroundSessions:!0,requireMcpApproval:!1,maxParallelSessions:void 0,sandboxMode:void 0,metadata:Tv});async function Av(e={}){var t,r;const n=function(e={}){var t;return{workspace:null!==(t=e.workspace)&&void 0!==t?t:qm,config:e.config,plugins:e.plugins,pluginBootstrap:e.pluginBootstrap,mcp:e.mcp,hooks:e.hooks,localExtensibility:e.localExtensibility,resourceFactory:e.resourceFactory,resourceWrappers:e.resourceWrappers,workspaceServicesContributors:e.workspaceServicesContributors,lifecycle:e.lifecycle}}(e.adapters),s=await n.workspace.resolveWorkspaceState({workingDirectory:e.workingDirectory,projectRoot:e.projectRoot,projectDirectory:e.projectDirectory,workspaceRoots:e.workspaceRoots}),i=await async function(e,t){return e.resolvePolicy(t)}(null!==(r=e.policyAdapter)&&void 0!==r?r:function(e={}){const t=Object.freeze(Object.assign(Object.assign({},Iv.metadata),e.metadata)),r=Object.assign(Object.assign(Object.assign({},Iv),e),{metadata:t});return{name:"permissive-sdk-local",resolvePolicy:()=>r}}(),{workspaceState:s});let a=await Sv(n,s,i),l=!1,c=Promise.resolve();const u=e=>{const t=c.then(e);return c=t.catch((()=>{})),t},d=null===(t=n.localExtensibility)||void 0===t?void 0:t.disposeLocalExtensibility;return{state:s,get services(){return a},policy:i,async createSessionRuntime(e={}){if(l)throw new Error("Cannot create a session runtime after the workspace runtime has been disposed.");return async function(e){var t,r,n,s,i,a,l,c;const u={sessionId:null!==(i=null===(t=e.options)||void 0===t?void 0:t.sessionId)&&void 0!==i?i:(0,o.randomUUID)(),createdAt:new Date},d=Object.freeze(Object.assign({},null!==(a=null===(r=e.options)||void 0===r?void 0:r.metadata)&&void 0!==a?a:{})),p={options:null!==(l=e.options)&&void 0!==l?l:{},workspaceState:e.workspaceState,workspaceServices:e.workspaceServices,policy:e.policy,sessionState:u,metadata:d,getAgentSkills:e.workspaceServices.getAgentSkills};let h,m;const f=[];try{h=e.adapters.resourceFactory?await e.adapters.resourceFactory.createResources(p):void 0,m=h,f.push(h);for(const t of null!==(c=e.adapters.resourceWrappers)&&void 0!==c?c:[])m=await t.wrapResources(Object.assign(Object.assign({},p),{baseResources:h,resources:m})),f.push(m);await(null===(s=null===(n=e.adapters.lifecycle)||void 0===n?void 0:n.onSessionCreated)||void 0===s?void 0:s.call(n,u))}catch(e){try{await Ev(f)}catch(t){throw function(e,t){return new AggregateError([t],"Session creation failed and resource cleanup also failed.",{cause:e})}(e,t)}throw e}let g=!1;return{state:u,resources:{base:h,wrapped:m},metadata:d,workspaceServices:e.workspaceServices,policy:e.policy,async dispose(){var t,r;if(!g){g=!0;try{await Ev(f)}finally{await(null===(r=null===(t=e.adapters.lifecycle)||void 0===t?void 0:t.onSessionDisposed)||void 0===r?void 0:r.call(t,u))}}}}}({options:e,workspaceState:s,workspaceServices:a,policy:i,adapters:n})},async reload(){l||await u((async()=>{var e,t;if(l)return;const r=a,o=await Sv(n,s,i);l?await kv(o,{disposeLocalExtensibility:d}):(a=o,await kv(r,{preserveSharedContributorsFrom:o,disposeLocalExtensibility:d}),await(null===(t=null===(e=n.lifecycle)||void 0===e?void 0:e.onWorkspaceReload)||void 0===t?void 0:t.call(e,s)))}))},async dispose(){l||(l=!0,await u((async()=>{var e;try{await kv(a,{disposeLocalExtensibility:d})}finally{await(null===(e=n.lifecycle)||void 0===e?void 0:e.dispose())}})))}}}class Ov{async requestApproval(e){return{approved:!0}}}class Dv{approvalMode;userConfiguredPolicy;teamSettingsService;respectAdminControls;constructor(e,t,r,n){this.approvalMode=e,this.userConfiguredPolicy=t,this.teamSettingsService=r,this.respectAdminControls=n}async getPermissions(){const e=!(!this.respectAdminControls||"insecure_none"===this.userConfiguredPolicy.type)&&(await this.teamSettingsService.getSandboxingControls()).sandboxingDisabled;return{allow:[],deny:[],approvalMode:this.approvalMode,userConfiguredPolicy:e?{type:"insecure_none"}:this.userConfiguredPolicy}}async updatePermissions(){}}class Mv{async open(e,t){}async getDiagnostics(e,t){return[]}}class jv{async getCodebaseReference(e,t){}}class Nv{inner;constructor(e){this.inner=e}async getState(e){const t=await this.inner.getState(e);return Object.assign(Object.assign({},t),{servers:t.servers.filter((e=>"needsAuth"!==e.status))})}}class $v{subagents;constructor(e){this.subagents=e.map((e=>new ho.zz({fullPath:`sdk-inline://${e.name}`,name:e.name,description:e.description,tools:[],model:e.model,prompt:e.prompt,permissionMode:ho.b$.DEFAULT,isBackground:!1,source:"sdk"})))}async getAllSubagents(){return this.subagents}async reload(){return this.subagents}}const Fv=Mm;async function Lv(e,t){const r=(0,a.dirname)(e);await(0,En.mkdir)(r,{recursive:!0}),await(0,En.writeFile)(e,t,"utf-8")}class Uv{transcriptStore;nestedSubagentTranscriptStore;projectDir;conversationId;workspacePath;parentConversationId;writeChain=Promise.resolve();constructor(e){this.workspacePath=e.workspacePath,this.conversationId=e.conversationId,this.parentConversationId=e.parentConversationId,this.projectDir=Fv(this.workspacePath);const t=this.parentConversationId?(e,t)=>{const r=pf({conversationId:e,ext:t,kind:"subagent",parentConversationId:this.parentConversationId});return(0,a.join)(this.projectDir,r)}:void 0;this.transcriptStore=new Mf(this.projectDir,e.blobStore,Lv,Object.assign({writeText:!1,writeJsonl:!0},t?{pathResolver:t}:{})),this.nestedSubagentTranscriptStore=new Mf(this.projectDir,e.blobStore,Lv,{writeText:!1,writeJsonl:!0,pathResolver:(e,t)=>{const r=pf({conversationId:e,ext:t,kind:"subagent",parentConversationId:this.conversationId});return(0,a.join)(this.projectDir,r)}})}enqueueWrite(e,t){const r=this.writeChain;return this.writeChain=r.then((async()=>{try{await e()}catch(e){Km.warn(`${t} ${e instanceof Error?e.message:String(e)}`)}})),this.writeChain}async writeFromState(e,t){return this.enqueueWrite((async()=>{var r;await this.transcriptStore.writeFromStateFull(e,t,this.conversationId);const n=null!==(r=t.subagentStates)&&void 0!==r?r:{};for(const[t,r]of Object.entries(n))(null==r?void 0:r.conversationState)&&await this.nestedSubagentTranscriptStore.writeFromStateFull(e,r.conversationState,t)}),"[LocalTranscriptWriter] Failed to write transcript:")}async writeTurnEndedFromState(e,t,r){return this.enqueueWrite((async()=>{await this.transcriptStore.writeFromStateFull(e,t,this.conversationId,{turnEnded:r})}),"[LocalTranscriptWriter] Failed to write turn-ended transcript:")}waitForPendingWrites(){return this.writeChain}getTranscriptPath(){if(this.parentConversationId){const e=pf({conversationId:this.conversationId,ext:"jsonl",kind:"subagent",parentConversationId:this.parentConversationId});return(0,a.join)(this.projectDir,e)}return function(e,t){const r=pf({conversationId:t,ext:"jsonl",kind:"primary"});return(0,a.join)(Fv(e),r)}(this.workspacePath,this.conversationId)}getProjectDir(){return this.projectDir}}const Bv=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Hv="User aborted/interrupted manually.";class Wv{sessions=new Map;backgroundRuns=new Map;backgroundPromises=new Set;pendingReleaseSessions=new Set;childParentIds=new Map;parentChildIds=new Map;queuedChildCompletions=new Map;childCompletionWaiters=new Map;lifecycleStore;agentClient;getResources;mcpTools;workspacePath;parentConversationId;headers;endlessRetries;onSessionCreated;onInteractionUpdate;onSessionCompleted;onSessionReleased;onSubagentTokenDelta;constructor(e){var t;this.agentClient=e.agentClient,this.getResources=e.getResources,this.mcpTools=null!==(t=e.mcpTools)&&void 0!==t?t:[],this.workspacePath=e.workspacePath,this.parentConversationId=e.parentConversationId,this.headers=e.headers,this.endlessRetries=e.endlessRetries,this.onSessionCreated=e.onSessionCreated,this.onInteractionUpdate=e.onInteractionUpdate,this.onSessionCompleted=e.onSessionCompleted,this.onSessionReleased=e.onSessionReleased,this.onSubagentTokenDelta=e.onSubagentTokenDelta,this.lifecycleStore=new St}async createOrResumeSession(e,t){var r;if(t.forkAgentId)throw new Error("forkAgentId is not supported in local subagents.");const n=t.resumeAgentId;if(n&&function(e){if(!Bv.test(e))throw new Error(`Invalid resumeAgentId format: ${e}`)}(n),n&&!t.prompt)return n;if(n&&kt(t.prompt)&&this.isBackgroundRunBusy(n))throw new Error("Sub-agent is currently running. You may send the follow-up message when it has completed.");if(n&&this.sessions.get(n))return n;const s=null!=n?n:(0,o.randomUUID)(),i=function(e){const t=new ur.We,r=(0,ur.sh)(e),n=new ur.pH(new ur.ve,t);return n.setMetadata("agentId",r.agentId),n.setMetadata("latestRootBlobId",r.latestRootBlobId),n.setMetadata("name",r.name),n.setMetadata("createdAt",r.createdAt),n.setMetadata("mode",r.mode),n.setMetadata("isRunEverything",r.isRunEverything),n.setMetadata("lastUsedModel",r.lastUsedModel),n.setMetadata("lastDebugServerPort",r.lastDebugServerPort),n.setMetadata("currentPlanUri",r.currentPlanUri),n}(s),a=new Uv({workspacePath:this.workspacePath,conversationId:s,parentConversationId:this.parentConversationId,blobStore:i.getBlobStore()});return this.sessions.set(s,{agentStore:i,transcriptWriter:a,toolCallId:t.toolCallId}),this.registerParentChildLink(s,t.parentConversationId),null===(r=this.onSessionCreated)||void 0===r||r.call(this,{agentId:s,toolCallId:t.toolCallId,subagentType:t.subagentType,parentAgentId:t.parentConversationId}),s}async runSession(e,t,r,n){var o;if(this.isAwaitBackgroundMode(r))return this.awaitBackgroundRun(r.resumeAgentId,e.signal);const s=this.sessions.get(t);if(!s)return{status:"error",error:`Subagent session not found: ${t}`};if(r.runInBackground){const[n,o]=e.withCancel();return this.registerBackgroundRun(t,this.executeSubagent(n,t,r,s),o),{status:"background",backgroundReason:H.qL.AGENT_REQUEST,toolCallCount:0}}const i=await this.executeSubagent(e,t,r,s);return null===(o=this.onSessionCompleted)||void 0===o||o.call(this,t,i),i}releaseSession(e){this.lifecycleStore.release(e),this.isBackgroundRunBusy(e)?this.pendingReleaseSessions.add(e):this.cleanupSession(e)}async awaitBackgroundWorkers(){for(;this.backgroundPromises.size>0;)await Promise.allSettled([...this.backgroundPromises])}isBackgroundRunBusy(e){return this.lifecycleStore.isBusy(e)||this.backgroundRuns.has(e)}registerBackgroundRun(e,t,r){const n=this.lifecycleStore.startRun(e,{abort:r}),o=t.catch((e=>({status:"error",error:e instanceof Error?e.message:String(e)}))),s={runId:n,promise:o};this.backgroundRuns.set(e,s),this.backgroundPromises.add(o),o.then((t=>{var r;this.lifecycleStore.finishRun(e,n);const o=this.backgroundRuns.get(e);if((null==o?void 0:o.runId)===n){this.backgroundRuns.delete(e),this.enqueueChildCompletion(e,t),this.maybeCleanupReleasedSession(e);try{null===(r=this.onSessionCompleted)||void 0===r||r.call(this,e,t)}catch(t){Km.error("[LocalSubagentHostAdapter] onSessionCompleted threw after background run",{agentId:e,error:t instanceof Error?t.message:String(t)})}}return t})).finally((()=>this.backgroundPromises.delete(o)))}maybeCleanupReleasedSession(e){this.pendingReleaseSessions.has(e)&&!this.isBackgroundRunBusy(e)&&this.cleanupSession(e)}cleanupSession(e){var t;this.pendingReleaseSessions.delete(e);const r=this.sessions.get(e);if(!r)return;const n=this.parentChildIds.get(e);if(n)for(const e of n)this.childParentIds.delete(e);this.removeParentChildLink(e),this.parentChildIds.delete(e),this.queuedChildCompletions.delete(e),this.childCompletionWaiters.delete(e),r.transcriptWriter.waitForPendingWrites().catch((()=>{})),this.sessions.delete(e),null===(t=this.onSessionReleased)||void 0===t||t.call(this,e)}async executeSubagent(e,t,r,n){return r.continuationConfig?this.executeSubagentWithContinuation(e,t,r,n,r.continuationConfig):this.executeSubagentOnce(e,t,r,n)}async executeSubagentWithContinuation(e,t,r,n,o){const s=o.maxLoops>0?o.maxLoops:Number.POSITIVE_INFINITY;let i=await this.runContinuationLoop(e,t,r,n,o,s);if(!o.collectBackgroundChildren||"completed"!==i.status)return i;for(let a=0;a<500;a++){if(e.signal.aborted)return{status:"error",error:"Subagent was aborted by the user"};let a;try{a=await this.collectAvailableChildCompletions(t,e.signal)}catch(e){return{status:"error",error:"Subagent was aborted by the user"}}if(0===a.length)return i;const l=this.buildChildrenCompletedMessage(a,o.childrenCompletedMessageTemplate);if(i=await this.runContinuationLoop(e,t,new yt.Pw(Object.assign(Object.assign({},r),{prompt:l,resumeAgentId:t,runInBackground:!1})),n,o,s),"completed"!==i.status)return i}return i}async runContinuationLoop(e,t,r,n,s,i){var a,l;let c,u,d=0;for(let p=0;p<i;p++){if(e.signal.aborted)return{status:"error",error:"Subagent was aborted by the user"};const i=0===p?r.prompt:this.computeContinuationNudge(s,d,c),h=0===p?new yt.Pw(Object.assign(Object.assign({},r),{runInBackground:!1})):new yt.Pw(Object.assign(Object.assign({},r),{prompt:i,resumeAgentId:t,runInBackground:!1}));if(u=await this.executeSubagentOnce(e,t,h,n),"completed"!==u.status)return u;const m=null!==(a=u.toolCallCount)&&void 0!==a?a:0,f=null!==(l=u.finalMessage)&&void 0!==l?l:"";if(void 0!==c&&f.includes(c))return u;m>0?(d=0,c=void 0):(d+=1,c=d>=s.idleThreshold?`DONE_${(0,o.randomUUID)().replace(/-/g,"").slice(0,8)}`:void 0)}return null!=u?u:{status:"error",error:"Subagent continuation exited unexpectedly"}}computeContinuationNudge(e,t,r){return t>=e.idleThreshold&&void 0!==r?e.escapeMessageTemplate.replace("{idle_count}",String(t)).replace("{escape_token}",r):e.nudgeMessage}async executeSubagentOnce(e,t,r,n){var o,s,i;let a,l=0;const c=new H.QF({action:{case:"userMessageAction",value:new H.Vt({userMessage:new H.RG({text:r.prompt})})}}),u=new H.Gm({modelId:r.modelId,displayModelId:r.modelId,displayName:r.modelId});void 0!==r.credentials.case&&(u.credentials=r.credentials);const d=new Tt,p={sendUpdate:async(e,r)=>{var n,o;"tokenDelta"===r.message.case&&(null===(n=this.onSubagentTokenDelta)||void 0===n||n.call(this,t,r.message.value.tokens)),"toolCallStarted"!==r.message.case&&"toolCallCompleted"!==r.message.case&&"partialToolCall"!==r.message.case||null===(o=this.onInteractionUpdate)||void 0===o||o.call(this,t,r),"toolCallCompleted"===r.message.case&&l++,"textDelta"===r.message.case&&(a=(null!=a?a:"")+r.message.value.text)},query:async(e,t)=>function(e){const t=e.query.case;switch(t){case"webSearchRequestQuery":return Zt(e.id,"Web search is not supported in local subagent");case"webFetchRequestQuery":return Qt(e.id,"Web fetch is not supported in local subagent");case"switchModeRequestQuery":return rr(e.id,"Subagent mode switches are not supported in local subagent");case"askQuestionInteractionQuery":{const t=new Ut.tz({result:{case:"rejected",value:new Ut.ox({reason:"Interactive questions are not supported in local subagent mode"})}});return er(e.id,t)}default:throw new Error(`Unhandled interaction query type in local subagent: ${String(t)}`)}}(t)},h={handleCheckpoint:async(e,t)=>{await n.agentStore.handleCheckpoint(e,t),n.transcriptWriter.writeFromState(e,t)},getLatestCheckpoint:()=>n.agentStore.getLatestCheckpoint()};try{const i=null===(o=r.rootParentConversationId)||void 0===o?void 0:o.trim(),m=null===(s=r.parentConversationId)||void 0===s?void 0:s.trim(),f=void 0!==i&&""!==i?i:void 0!==m&&""!==m?m:t,g=await this.getResources({agentId:t,parentAgentId:r.parentConversationId}),v=r.readonly?new M(g,function(e){const t=[[rt,(r=e.errorMessage,{execute:async(e,t)=>new Qe.v3({result:{case:"permissionDenied",value:new Qe.U7({path:t.path,error:r,isReadonly:!0})}})})],[q,at(e.errorMessage)],[Be,lt(e.errorMessage)]];var r;return e.wrapShell&&t.push([et,ot(e.errorMessage)],[tt,st(e.errorMessage)],[L,it(e.errorMessage)]),e.includeWriteBackgroundShellStdin&&t.push([U,ct(e.errorMessage)]),t}({errorMessage:"This operation is not allowed in readonly mode. The subagent was launched with readonly: true, which restricts shell, write, delete, and MCP operations.",wrapShell:!0,includeWriteBackgroundShellStdin:!0})):g;return await this.agentClient.run(e,n.agentStore.getConversationStateStructure(),c,u,p,v,n.agentStore.getBlobStore(),d,h,[...this.mcpTools],{conversationGroupId:f,conversationId:t,subagentTypeName:r.subagentType||void 0,headers:this.headers,endlessRetries:this.endlessRetries,subagentModelOverrides:[]}),await n.transcriptWriter.writeTurnEndedFromState(e,n.agentStore.getConversationStateStructure(),e.signal.aborted?{status:"aborted",error:Hv}:{status:"success"}),{status:"completed",finalMessage:a,toolCallCount:l}}catch(r){const o=r instanceof Error?r.message:String(r);return Km.error("[LocalSubagentHostAdapter] Subagent session failed",{agentId:t,error:o}),await n.transcriptWriter.writeTurnEndedFromState(e,null!==(i=n.agentStore.getLatestCheckpoint())&&void 0!==i?i:n.agentStore.getConversationStateStructure(),this.getTurnEndedFromError(e,o)),e.signal.aborted?{status:"aborted",error:Hv}:{status:"error",error:o}}}getTurnEndedFromError(e,t){return e.signal.aborted?{status:"aborted",error:Hv}:{status:"error",error:t}}isAwaitBackgroundMode(e){var t;if(!Boolean(e.resumeAgentId&&!kt(e.prompt)&&!0===e.readonly&&!0!==e.runInBackground))return!1;if(0===(null!==(t=e.parentConversationId)&&void 0!==t?t:"").trim().length)throw new Error(`Missing parentConversationId for subagent await/status check (subagentId: ${e.resumeAgentId})`);return!0}async awaitBackgroundRun(e,t){const r=this.backgroundRuns.get(e);return r?this.awaitBackgroundEntry(r,t):this.isBackgroundRunBusy(e)?this.awaitBusyLifecycleRun(e,t):{status:"error",error:`No background subagent found for id: ${e}`}}async awaitBusyLifecycleRun(e,t){for(;this.isBackgroundRunBusy(e);){if(t.aborted)return{status:"error",error:"Await timed out while task is still running"};const r=this.backgroundRuns.get(e);if(r)return this.awaitBackgroundEntry(r,t);await new Promise((e=>setTimeout(e,50)))}return{status:"completed",toolCallCount:0}}async awaitBackgroundEntry(e,t){if(t.aborted)return{status:"error",error:"Await timed out while task is still running"};const r={status:"error",error:"Await timed out while task is still running"};return new Promise((n=>{const o=()=>{n(r)};t.addEventListener("abort",o,{once:!0}),e.promise.then(n).finally((()=>t.removeEventListener("abort",o)))}))}registerParentChildLink(e,t){var r,n,o,s;const i=null==t?void 0:t.trim();if(!i||i===e||!this.sessions.has(i))return;const a=this.childParentIds.get(e);if(a===i)return;a&&(null===(r=this.parentChildIds.get(a))||void 0===r||r.delete(e),0===(null!==(o=null===(n=this.parentChildIds.get(a))||void 0===n?void 0:n.size)&&void 0!==o?o:0)&&this.parentChildIds.delete(a)),this.childParentIds.set(e,i);const l=null!==(s=this.parentChildIds.get(i))&&void 0!==s?s:new Set;l.add(e),this.parentChildIds.set(i,l)}removeParentChildLink(e){var t;const r=this.childParentIds.get(e);if(!r)return;this.childParentIds.delete(e);const n=this.parentChildIds.get(r);null==n||n.delete(e),0===(null!==(t=null==n?void 0:n.size)&&void 0!==t?t:0)&&this.parentChildIds.delete(r)}enqueueChildCompletion(e,t){var r,n;const o=this.childParentIds.get(e);if(!o)return;const s=null!==(r=this.queuedChildCompletions.get(o))&&void 0!==r?r:[];s.push({agentId:e,success:"completed"===t.status,finalMessage:"completed"===t.status?null!==(n=t.finalMessage)&&void 0!==n?n:"":"error"===t.status?t.error:"Subagent was aborted by the user"}),this.queuedChildCompletions.set(o,s),this.removeParentChildLink(e);const i=this.childCompletionWaiters.get(o);if(i){this.childCompletionWaiters.delete(o);for(const e of i)e()}}async collectAvailableChildCompletions(e,t){const r=this.drainChildCompletions(e);return r.length>0?r:this.hasPendingChildSubagents(e)?(await this.waitForChildCompletion(e,t),this.drainChildCompletions(e)):[]}hasPendingChildSubagents(e){var t,r;return(null!==(r=null===(t=this.parentChildIds.get(e))||void 0===t?void 0:t.size)&&void 0!==r?r:0)>0}drainChildCompletions(e){var t;const r=null!==(t=this.queuedChildCompletions.get(e))&&void 0!==t?t:[];return this.queuedChildCompletions.delete(e),r}async waitForChildCompletion(e,t){if(t.aborted)throw new Error("aborted");await new Promise(((r,n)=>{var o;const s=null!==(o=this.childCompletionWaiters.get(e))&&void 0!==o?o:new Set,i=()=>{l(),r()},a=()=>{l(),n(new Error("aborted"))},l=()=>{s.delete(i),0===s.size&&this.childCompletionWaiters.delete(e),t.removeEventListener("abort",a)};s.add(i),this.childCompletionWaiters.set(e,s),t.addEventListener("abort",a,{once:!0})}))}buildChildrenCompletedMessage(e,t){const r=e.map((e=>{const t=e.success?"SUCCESS":"FAILED";return`## Agent ${e.agentId} -- ${t}\n\n${e.finalMessage}`})).join("\n\n---\n\n");return t.replace("{summaries}",r)}}var zv=r("../proto/dist/generated/agent/v1/agent_service_connect.js"),qv=r("../proto/dist/generated/agent/v1/selected_context_pb.js");function Gv(e,t){const r=function(e){if(!(null==e?void 0:e.tool))return null;switch(e.tool.case){case"shellToolCall":{const{args:t,result:r}=e.tool.value;return t?Object.assign({type:"shell",args:Object.assign(Object.assign({command:t.command},t.workingDirectory?{workingDirectory:t.workingDirectory}:{}),t.timeout?{timeout:t.timeout}:{})},r?{result:Xv(r)}:{}):null}case"deleteToolCall":{const{args:t,result:r}=e.tool.value;return t?Object.assign({type:"delete",args:{path:t.path}},r?{result:Qv(r)}:{}):null}case"globToolCall":{const{args:t,result:r}=e.tool.value;return t?Object.assign({type:"glob",args:Object.assign({globPattern:t.globPattern},t.targetDirectory?{targetDirectory:t.targetDirectory}:{})},r?{result:ey(r)}:{}):null}case"grepToolCall":{const{args:t,result:r}=e.tool.value;return t?Object.assign({type:"grep",args:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({pattern:t.pattern},t.path?{path:t.path}:{}),t.glob?{glob:t.glob}:{}),t.outputMode?{outputMode:t.outputMode}:{}),t.contextBefore?{contextBefore:t.contextBefore}:{}),t.contextAfter?{contextAfter:t.contextAfter}:{}),t.context?{context:t.context}:{}),t.caseInsensitive?{caseInsensitive:t.caseInsensitive}:{}),t.type?{type:t.type}:{}),t.headLimit?{headLimit:t.headLimit}:{}),void 0!==t.offset?{offset:t.offset}:{}),t.multiline?{multiline:t.multiline}:{}),t.sort?{sort:t.sort}:{}),t.sortAscending?{sortAscending:t.sortAscending}:{})},r?{result:ty(r)}:{}):null}case"readToolCall":{const{args:t,result:r}=e.tool.value;return t?Object.assign({type:"read",args:{path:t.path}},r?{result:ny(r)}:{}):null}case"editToolCall":{const{args:t,result:r}=e.tool.value;if(!t)return null;const n={path:t.path};return Object.assign({type:"edit",args:n},r?{result:oy(r)}:{})}case"lsToolCall":{const{args:t,result:r}=e.tool.value;return t?Object.assign({type:"ls",args:Object.assign({path:t.path},t.ignore&&t.ignore.length>0?{ignore:t.ignore}:{})},r?{result:sy(r)}:{}):null}case"readLintsToolCall":{const{args:t,result:r}=e.tool.value;return t?Object.assign({type:"readLints",args:{paths:t.paths}},r?{result:ay(r)}:{}):null}case"mcpToolCall":{const{args:t,result:r}=e.tool.value;return t?Object.assign({type:"mcp",args:Object.assign(Object.assign(Object.assign({},t.providerIdentifier?{providerIdentifier:t.providerIdentifier}:{}),t.toolName?{toolName:t.toolName}:{}),t.args?{args:Object.fromEntries(Object.entries(t.args).map((([e,t])=>[e,t.toJson()])))}:{})},r?{result:ly(r)}:{}):null}case"generateImageToolCall":{const{args:t,result:r}=e.tool.value;return t?Object.assign({type:"generateImage",args:Object.assign({description:t.description},t.filePath?{filePath:t.filePath}:{})},r?{result:uy(r)}:{}):null}case"recordScreenToolCall":{const{args:t,result:r}=e.tool.value;return t?Object.assign({type:"recordScreen",args:{mode:dy(t.mode)}},r?{result:py(r)}:{}):null}case"semSearchToolCall":{const{args:t,result:r}=e.tool.value;return t?Object.assign({type:"semSearch",args:Object.assign(Object.assign({query:t.query},t.targetDirectories&&t.targetDirectories.length>0?{targetDirectories:t.targetDirectories}:{}),t.explanation?{explanation:t.explanation}:{})},r?{result:cy(r)}:{}):null}case"createPlanToolCall":{const{args:t,result:r}=e.tool.value;return t?Object.assign({type:"createPlan",args:{plan:t.plan}},r?{result:hy(r)}:{}):null}case"updateTodosToolCall":{const{args:t,result:r}=e.tool.value;return t?Object.assign({type:"updateTodos",args:{todos:t.todos.map((e=>({content:e.content,status:fy(e.status)})))}},r?{result:my(r)}:{}):null}case"fetchToolCall":case"switchModeToolCall":case"computerUseToolCall":case"readTodosToolCall":case"webSearchToolCall":case"listMcpResourcesToolCall":case"readMcpResourceToolCall":return null;case"taskToolCall":{const{args:t,result:r}=e.tool.value;return t?Object.assign({type:"task",args:Vv(t)},r?{result:Yv(r)}:{}):null}case"applyAgentDiffToolCall":case"askQuestionToolCall":case"writeShellStdinToolCall":case"reflectToolCall":case"setupVmEnvironmentToolCall":case"replaceEnvToolCall":case"startGrindExecutionToolCall":case"startGrindPlanningToolCall":case"truncatedToolCall":case"webFetchToolCall":case"reportBugfixResultsToolCall":case"aiAttributionToolCall":case"prManagementToolCall":case"editPrLabelsToolCall":case"fetchCloudAgentDataToolCall":case"mcpAuthToolCall":case"awaitToolCall":case"blameByFilePathToolCall":case"getMcpToolsToolCall":case"reportBugToolCall":case"setActiveBranchToolCall":case"communicateUpdateToolCall":case"sendFinalSummaryToolCall":case"updatePrCodeTourToolCall":case"recordCiInvestigationFindingsToolCall":case"sendMessageToolCall":case"sendToUserToolCall":case void 0:return null;default:return e.tool}}(t.toolCall);return r?{type:e,callId:t.callId,toolCall:r,modelCallId:t.modelCallId}:null}function Vv(e){var t,r;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({description:null!==(t=e.description)&&void 0!==t?t:"",prompt:null!==(r=e.prompt)&&void 0!==r?r:""},e.subagentType?{subagentType:Jv(e.subagentType)}:{}),e.model?{model:e.model}:{}),e.resume?{resume:e.resume}:{}),e.agentId?{agentId:e.agentId}:{}),e.attachments&&e.attachments.length>0?{attachments:e.attachments}:{}),void 0!==e.mode?{mode:Kv(e.mode)}:{}),e.respondingToMessageIds&&e.respondingToMessageIds.length>0?{respondingToMessageIds:e.respondingToMessageIds}:{})}function Jv(e){const t=e.type.case;return t?"custom"===t?{kind:t,name:e.type.value.name}:{kind:t}:{kind:"unspecified"}}function Kv(e){switch(e){case ho.FL.AGENT:return"agent";case ho.FL.PLAN:return"plan";default:return"unspecified"}}function Yv(e){var t,r,n;if(null===(t=e.result)||void 0===t?void 0:t.case)switch(e.result.case){case"success":{const t=e.result.value;return{status:"success",value:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},t.conversationSteps&&t.conversationSteps.length>0?{conversationSteps:t.conversationSteps.map((e=>{var t,r;return null!==(r=null===(t=e.toJson)||void 0===t?void 0:t.call(e))&&void 0!==r?r:e}))}:{}),t.agentId?{agentId:t.agentId}:{}),{isBackground:null!==(r=t.isBackground)&&void 0!==r&&r}),void 0!==t.durationMs?{durationMs:Number(t.durationMs)}:{}),t.resultSuffix?{resultSuffix:t.resultSuffix}:{}),{backgroundReason:Zv(t.backgroundReason)}),t.transcriptPath?{transcriptPath:t.transcriptPath}:{})}}case"error":return{status:"error",error:{message:null!==(n=e.result.value.error)&&void 0!==n?n:"Task failed"}};default:return}}function Zv(e){switch(e){case H.qL.AGENT_REQUEST:return"agentRequest";case H.qL.USER_REQUEST:return"userRequest";case H.qL.QUEUED_FOLLOW_UP:return"queuedFollowUp";default:return"unspecified"}}function Xv(e){var t,r,n,o,s,i,a,l;if(null===(t=e.result)||void 0===t?void 0:t.case)switch(e.result.case){case"success":case"failure":{const t=e.result.value;return{status:"success",value:{exitCode:null!==(r=t.exitCode)&&void 0!==r?r:0,signal:null!==(n=t.signal)&&void 0!==n?n:"",stdout:null!==(o=t.stdout)&&void 0!==o?o:"",stderr:null!==(s=t.stderr)&&void 0!==s?s:"",executionTime:null!==(i=t.executionTime)&&void 0!==i?i:0}}}case"timeout":return{status:"error",error:{message:`Command timed out after ${e.result.value.timeoutMs}ms`,command:e.result.value.command,workingDirectory:e.result.value.workingDirectory}};case"rejected":return{status:"error",error:{message:null!==(a=e.result.value.reason)&&void 0!==a?a:"Command rejected",command:e.result.value.command,workingDirectory:e.result.value.workingDirectory}};case"spawnError":return{status:"error",error:{message:null!==(l=e.result.value.error)&&void 0!==l?l:"Failed to spawn command",command:e.result.value.command,workingDirectory:e.result.value.workingDirectory}};default:return}}function Qv(e){var t,r,n,o,s;if(null===(t=e.result)||void 0===t?void 0:t.case)return"success"===e.result.case?{status:"success",value:{fileSize:Number(null!==(r=e.result.value.fileSize)&&void 0!==r?r:0)}}:{status:"error",error:{message:null!==(s=null!==(o=null!==(n=e.result.value.error)&&void 0!==n?n:e.result.value.reason)&&void 0!==o?o:e.result.value.clientVisibleError)&&void 0!==s?s:e.result.case,path:e.result.value.path}}}function ey(e){var t,r,n,o,s,i,a;if(null===(t=e.result)||void 0===t?void 0:t.case)return"success"===e.result.case?{status:"success",value:{files:null!==(r=e.result.value.files)&&void 0!==r?r:[],totalFiles:null!==(n=e.result.value.totalFiles)&&void 0!==n?n:0,clientTruncated:null!==(o=e.result.value.clientTruncated)&&void 0!==o&&o,ripgrepTruncated:null!==(s=e.result.value.ripgrepTruncated)&&void 0!==s&&s}}:{status:"error",error:{message:null!==(a=null!==(i=e.result.value.error)&&void 0!==i?i:e.result.value.reason)&&void 0!==a?a:e.result.case}}}function ty(e){var t,r;if(null===(t=e.result)||void 0===t?void 0:t.case){if("success"===e.result.case){const t=e.result.value,r={};if(t.workspaceResults)for(const[e,n]of Object.entries(t.workspaceResults))r[e]=ry(n);return{status:"success",value:Object.assign(Object.assign({},Object.keys(r).length>0?{workspaceResults:r}:{}),t.activeEditorResult?{activeEditorResult:ry(t.activeEditorResult)}:{})}}return{status:"error",error:{message:null!==(r=e.result.value.error)&&void 0!==r?r:e.result.case}}}}function ry(e){var t,r,n,o,s,i,a,l,c;if(null===(t=null==e?void 0:e.result)||void 0===t?void 0:t.case)switch(e.result.case){case"content":return{type:"content",output:{matches:null!==(o=null===(r=e.result.value.matches)||void 0===r?void 0:r.map((e=>Object.assign(Object.assign(Object.assign(Object.assign({file:e.file},void 0!==e.lineNumber?{lineNumber:e.lineNumber}:{}),{line:e.line}),e.beforeContext?{beforeContext:e.beforeContext}:{}),e.afterContext?{afterContext:e.afterContext}:{}))))&&void 0!==o?o:[],totalMatches:null!==(s=e.result.value.totalMatches)&&void 0!==s?s:0}};case"files":return{type:"files",output:{files:null!==(i=e.result.value.files)&&void 0!==i?i:[],count:null!==(a=e.result.value.count)&&void 0!==a?a:0}};case"count":return{type:"count",output:{counts:null!==(l=null===(n=e.result.value.counts)||void 0===n?void 0:n.map((e=>({file:e.file,count:e.count}))))&&void 0!==l?l:[],total:null!==(c=e.result.value.total)&&void 0!==c?c:0}};default:return}}function ny(e){var t,r,n,o,s;if(null===(t=e.result)||void 0===t?void 0:t.case)return"success"===e.result.case?{status:"success",value:{content:"content"===e.result.value.output.case?e.result.value.output.value:"",totalLines:null!==(r=e.result.value.totalLines)&&void 0!==r?r:0,fileSize:Number(null!==(n=e.result.value.fileSize)&&void 0!==n?n:0)}}:{status:"error",error:{message:null!==(s=null!==(o=e.result.value.error)&&void 0!==o?o:e.result.value.reason)&&void 0!==s?s:e.result.case,path:e.result.value.path}}}function oy(e){var t,r,n;if(null===(t=e.result)||void 0===t?void 0:t.case)return"success"===e.result.case?{status:"success",value:Object.assign(Object.assign(Object.assign({},void 0!==e.result.value.linesAdded?{linesAdded:e.result.value.linesAdded}:{}),void 0!==e.result.value.linesRemoved?{linesRemoved:e.result.value.linesRemoved}:{}),e.result.value.diffString?{diffString:e.result.value.diffString}:{})}:{status:"error",error:{message:null!==(n=null!==(r=e.result.value.error)&&void 0!==r?r:e.result.value.reason)&&void 0!==n?n:e.result.case,path:e.result.value.path}}}function sy(e){var t,r;if(null===(t=e.result)||void 0===t?void 0:t.case)return"success"===e.result.case?{status:"success",value:{directoryTreeRoot:iy(e.result.value.directoryTreeRoot)}}:{status:"error",error:{message:null!==(r=e.result.value.error)&&void 0!==r?r:e.result.case}}}function iy(e){var t,r,n,o,s,i,a,l;if(e)return{absPath:null!==(n=e.absPath)&&void 0!==n?n:"",childrenDirs:null!==(o=null===(t=e.childrenDirs)||void 0===t?void 0:t.map(iy))&&void 0!==o?o:[],childrenFiles:null!==(s=null===(r=e.childrenFiles)||void 0===r?void 0:r.map((e=>({name:e.name}))))&&void 0!==s?s:[],childrenWereProcessed:null!==(i=e.childrenWereProcessed)&&void 0!==i&&i,fullSubtreeExtensionCounts:null!==(a=e.fullSubtreeExtensionCounts)&&void 0!==a?a:{},numFiles:null!==(l=e.numFiles)&&void 0!==l?l:0}}function ay(e){var t,r,n,o,s,i;if(null===(t=e.result)||void 0===t?void 0:t.case)return"success"===e.result.case?{status:"success",value:{fileDiagnostics:null!==(n=null===(r=e.result.value.fileDiagnostics)||void 0===r?void 0:r.map((e=>{var t,r,n;return{path:e.path,diagnostics:null!==(r=null===(t=e.diagnostics)||void 0===t?void 0:t.map((e=>Object.assign(Object.assign({severity:gy(e.severity)},e.range?{range:Object.assign(Object.assign({},e.range.start?{start:{line:e.range.start.line,character:e.range.start.character}}:{}),e.range.end?{end:{line:e.range.end.line,character:e.range.end.character}}:{})}:{}),{message:e.message,source:e.source,code:e.code}))))&&void 0!==r?r:[],diagnosticsCount:null!==(n=e.diagnosticsCount)&&void 0!==n?n:0}})))&&void 0!==n?n:[],totalFiles:null!==(o=e.result.value.totalFiles)&&void 0!==o?o:0,totalDiagnostics:null!==(s=e.result.value.totalDiagnostics)&&void 0!==s?s:0}}:{status:"error",error:{message:null!==(i=e.result.value.error)&&void 0!==i?i:e.result.case}}}function ly(e){var t,r,n,o,s,i;if(null===(t=e.result)||void 0===t?void 0:t.case)return"success"===e.result.case?{status:"success",value:{content:null!==(n=null===(r=e.result.value.content)||void 0===r?void 0:r.map((e=>{var t,r;const n={};return"text"===(null===(t=e.content)||void 0===t?void 0:t.case)?n.text={text:e.content.value.text}:"image"===(null===(r=e.content)||void 0===r?void 0:r.case)&&(n.image=Object.assign({data:e.content.value.data},e.content.value.mimeType?{mimeType:e.content.value.mimeType}:{})),n})))&&void 0!==n?n:[],isError:null!==(o=e.result.value.isError)&&void 0!==o&&o}}:{status:"error",error:{message:null!==(i=null!==(s=e.result.value.error)&&void 0!==s?s:e.result.value.reason)&&void 0!==i?i:e.result.case}}}function cy(e){var t,r,n;if(null===(t=e.result)||void 0===t?void 0:t.case)return"success"===e.result.case?{status:"success",value:{results:null!==(r=e.result.value.results)&&void 0!==r?r:""}}:{status:"error",error:{message:null!==(n=e.result.value.error)&&void 0!==n?n:e.result.case}}}function uy(e){var t,r,n;if(null===(t=e.result)||void 0===t?void 0:t.case)return"success"===e.result.case?{status:"success",value:{filePath:null!==(r=e.result.value.filePath)&&void 0!==r?r:""}}:{status:"error",error:{message:null!==(n=e.result.value.error)&&void 0!==n?n:e.result.case}}}function dy(e){switch(e){case wp.$u.START_RECORDING:return"START_RECORDING";case wp.$u.SAVE_RECORDING:return"SAVE_RECORDING";case wp.$u.DISCARD_RECORDING:return"DISCARD_RECORDING";default:throw new Error(`Unknown RecordingMode: ${e}`)}}function py(e){var t,r,n,o,s;if(null===(t=e.result)||void 0===t?void 0:t.case)switch(e.result.case){case"startSuccess":return{status:"success",value:{wasPriorRecordingCancelled:null!==(r=e.result.value.wasPriorRecordingCancelled)&&void 0!==r&&r}};case"saveSuccess":return{status:"success",value:{path:null!==(n=e.result.value.path)&&void 0!==n?n:"",recordingDurationMs:Number(null!==(o=e.result.value.recordingDurationMs)&&void 0!==o?o:0)}};case"discardSuccess":return{status:"success",value:{}};case"failure":return{status:"error",error:{message:null!==(s=e.result.value.error)&&void 0!==s?s:"Unknown error"}};default:return}}function hy(e){var t,r;if(null===(t=e.result)||void 0===t?void 0:t.case)return"success"===e.result.case?{status:"success",value:{}}:{status:"error",error:{message:null!==(r=e.result.value.error)&&void 0!==r?r:e.result.case}}}function my(e){var t,r,n,o,s;if(null===(t=e.result)||void 0===t?void 0:t.case)return"success"===e.result.case?{status:"success",value:{todos:null!==(n=null===(r=e.result.value.todos)||void 0===r?void 0:r.map((e=>({content:e.content,status:fy(e.status)}))))&&void 0!==n?n:[],totalCount:null!==(o=e.result.value.totalCount)&&void 0!==o?o:0}}:{status:"error",error:{message:null!==(s=e.result.value.error)&&void 0!==s?s:e.result.case}}}function fy(e){switch(e){case 0:case 1:default:return"pending";case 2:return"inProgress";case 3:return"completed";case 4:return"cancelled"}}function gy(e){switch(e){case 0:case 1:default:return"error";case 2:return"warning";case 3:return"information";case 4:return"hint"}}const vy={type:"object",properties:{},additionalProperties:!0};function yy(e){return{execute(t,r,n){return o=this,s=void 0,a=function*(){const t=r.toolName||function(e){const t=`${Le}-`;return e.startsWith(t)?e.slice(t.length):e}(r.name),n=e[t];if(void 0===n)return new Ze.iz({result:{case:"error",value:new Ze.Nh({error:`Unknown custom tool: ${t}`})}});try{return function(e){var t;const r=function(e){return"object"==typeof(t=e)&&null!==t&&!Array.isArray(t)&&"content"in t&&Array.isArray(t.content)?{content:e.content,isError:e.isError,structuredContent:e.structuredContent}:"string"==typeof e?{content:[{type:"text",text:e}]}:{content:[{type:"text",text:JSON.stringify(e)}],structuredContent:by(e)?e:void 0};var t}(e),n=void 0!==r.structuredContent?hr.Struct.fromJson(r.structuredContent):void 0;return new Ze.iz({result:{case:"success",value:new Ze.QW({content:r.content.map(wy),isError:null!==(t=r.isError)&&void 0!==t&&t,structuredContent:n})}})}(yield n.execute(function(e){return Object.fromEntries(Object.entries(e.args).map((([e,t])=>[e,t.toJson()])))}(r),{toolCallId:r.toolCallId||void 0}))}catch(e){return new Ze.iz({result:{case:"error",value:new Ze.Nh({error:e instanceof Error?e.message:String(e)})}})}},new((i=void 0)||(i=Promise))((function(e,t){function r(e){try{l(a.next(e))}catch(e){t(e)}}function n(e){try{l(a.throw(e))}catch(e){t(e)}}function l(t){var o;t.done?e(t.value):(o=t.value,o instanceof i?o:new i((function(e){e(o)}))).then(r,n)}l((a=a.apply(o,s||[])).next())}));var o,s,i,a}}}function wy(e){var t;return"text"===e.type?new Ze._Z({content:{case:"text",value:new Ze.zN({text:e.text})}}):new Ze._Z({content:{case:"image",value:new Ze.do({data:n.Buffer.from(e.data,"base64"),mimeType:null!==(t=e.mimeType)&&void 0!==t?t:""})}})}function by(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}var Sy=r("./src/agent/errors.ts"),ky=r("./src/agent/executor-common.ts"),Ey=r("../../node_modules/.pnpm/@statsig+js-client@3.31.0/node_modules/@statsig/js-client/src/index.js"),xy=r("./src/agent/utils/logger.ts"),Cy=function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}l((n=n.apply(e,t||[])).next())}))};const _y={checkFeatureGate:()=>!1,getDynamicConfigValue:({defaultValue:e})=>e},Py=new Map;var Ry=function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}l((n=n.apply(e,t||[])).next())}))};function Ty(e,t){if(!function(e){return void 0!==e&&Object.keys(e).length>0}(t))return;const r=e.resources.base;if(!(r instanceof mh))throw new Sy.j1("SDK custom tools require the default local workspace resource provider.",{isRetryable:!1});const n=r.getMcpExecutionPolicyDeps(),o=r.get(Be),s=yy(t);e.resources.base.register(Be,{execute(e,t,r){return Ry(this,void 0,void 0,(function*(){if(function(e){return e.providerIdentifier===Le}(t)){const o=yield td(e,t,Object.assign(Object.assign({},n),{toolDef:{source:"internal"}}));return void 0!==o?o:s.execute(e,t,r)}return o.execute(e,t,r)}))}})}const Iy={warn(){},error(){}},Ay={log(){}};class Oy{requestApproval(e){return Ry(this,void 0,void 0,(function*(){return{approved:!1,reason:`Local SDK runs cannot request interactive approval for ${Dy(e)}. Keep the action within the configured sandbox policy or Smart Auto Review's auto-approval boundary, or re-run without sandboxing/autoReview enabled.`}}))}}function Dy(e){switch(e.type){case fc.Shell:return"this shell command";case fc.Mcp:return"this MCP tool call";case fc.Write:return"this file edit";case fc.Delete:return"this file deletion";default:return"this operation"}}function My(e){try{const t=(0,s.statSync)(e);return t.isFile()&&("win32"===process.platform||!!(73&t.mode))}catch(e){return!1}}function jy(e){const t=`${process.platform}-${process.arch}`,r=[`@cursor/sdk-${t}`,`@cursor/february-${t}`];if(!process.argv[1])return;let n=(0,a.dirname)((0,a.resolve)(process.argv[1]));const o=(0,a.parse)(n).root;for(;n!==o;){for(const t of r){const r=(0,a.join)(n,"node_modules",t,"bin",e);if(My(r))return r}n=(0,a.dirname)(n)}}function Ny(e){return void 0!==e&&"insecure_none"!==e.type}function $y(e,t){return Ry(this,void 0,void 0,(function*(){const r="string"==typeof e||void 0===e?{workingDirectory:e,apiKey:t}:e,s=(0,c.q6)().with(c._O,Ay);_v(r.settingSources),/:\/\/(localhost|127\.0\.0\.1)/.test(ky.EV)&&(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0"),r.apiKey&&(yield Promise.all([(0,ky.ly)(r.apiKey),(0,ky.mU)(r.apiKey)]));const l=r.workingDirectory||process.cwd(),u=(0,m.Rv)((0,i.homedir)(),l);let d;const p="win32"===process.platform?"rg.exe":"rg",h=process.env.CURSOR_RIPGREP_PATH;d=h&&(0,a.isAbsolute)(h)?h:jy(p),d||(d=(0,Bn.Qd)()),d&&(0,Bn.J)(d);let f,g={getDotCursorProtection:async()=>!1,getShouldBlockMcp:async()=>!1,getDeleteFileProtection:async()=>!1,getIsHeadlessDisabled:async()=>!1,isServerBlocked:async()=>!1,getTeamRepos:async()=>{},getAutoRunControls:async()=>({enabled:!1,allowed:[],blocked:[],enableAllowlistMode:!0,enableRunEverything:!1,enableSmartAuto:!0,mcpToolAllowlist:[]}),getMcpToolControls:async()=>{},getNetworkAccessControls:async()=>({allowlist:[],denylist:[],available:!0}),getMcpNetworkControlsConfig:async()=>({enabled:!1}),getDefaultNetworkAllowlist:async()=>({allowlist:[],available:!0}),getSandboxingControls:async()=>({sandboxingDisabled:!1,networkingDisabled:!1,gitDisabled:!1}),isAttributionDisabledByAdmin:async()=>!1,invalidateCache:()=>{}},v=!1;if(r.apiKey)try{f=(0,ky.KU)(r.apiKey);const e=(0,mr.createClient)(kn.I,f),t=yield function(e){let t=Py.get(e);return t||(t=function(e){return Cy(this,void 0,void 0,(function*(){try{const t=yield function(e){return Cy(this,void 0,void 0,(function*(){const t=yield(0,ky.dC)(e,ky.EV);if(!t)return;const r=ky.EV.endsWith("/")?ky.EV.slice(0,-1):ky.EV,n=yield fetch(`${r}/aiserver.v1.AnalyticsService/BootstrapStatsig`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json","x-cursor-client-type":"sdk","x-cursor-client-version":(0,ky.tF)(),"x-ghost-mode":(0,ky.U)(e)},body:JSON.stringify({})});if(!n.ok)return void xy.v.log(`Failed to bootstrap SDK Statsig: ${n.status} ${n.statusText}`);const o=yield n.json();return"string"==typeof o.config&&o.config.length>0?o.config:void 0}))}(e);if(!t)return _y;const r=new Ey.StatsigClient("client-Bm4HJ0aDjXHQVsoACMREyLNxm5p6zzuzhO50MgtoT5D",function(e){try{const t=JSON.parse(e);if(t.user)return Object.assign(Object.assign({},t.user),{custom:Object.assign(Object.assign({},t.user.custom),{clientType:"sdk",clientVersion:(0,ky.tF)()})})}catch(e){xy.v.log(`Failed to parse SDK Statsig bootstrap user: ${e instanceof Error?e.message:String(e)}`)}return{custom:{clientType:"sdk",clientVersion:(0,ky.tF)()}}}(t),{disableLogging:!0,disableStorage:!0,networkConfig:{preventAllNetworkTraffic:!0}});return r.dataAdapter.setData(t),r.initializeSync(),{checkFeatureGate:(e,t)=>{try{return r.checkGate(e,t)}catch(e){return!1}},getDynamicConfigValue({configName:e,paramName:t,defaultValue:n}){try{return r.getDynamicConfig(e).get(t,n)}catch(e){return n}}}}catch(e){return xy.v.log(`Failed to initialize SDK Statsig: ${e instanceof Error?e.message:String(e)}`),_y}}))}(e),Py.set(e,t),t.then((r=>{r===_y&&Py.get(e)===t&&Py.delete(e)}),(()=>{Py.get(e)===t&&Py.delete(e)}))),t}(r.apiKey);v=t.checkFeatureGate("hooks_stdin_transport");const n={getDefaultNetworkAllowlist:()=>Ry(this,void 0,void 0,(function*(){return t.getDynamicConfigValue({configName:"sandbox_default_network_allowlist",paramName:"allowlist",defaultValue:[]})}))};g=new Om(new Am(e),n,{isMcpAccessNetworkAllowlistEnabled:()=>t.checkFeatureGate("mcp_access_network_allowlist"),isMcpSettingsOverhaulEnabled:e=>t.checkFeatureGate("mcp_settings_overhaul",e)})}catch(e){xy.v.log(`Failed to initialize authenticated dashboard services: ${e instanceof Error?e.message:String(e)}`)}const y=r.apiKey?yield(0,Bn.tv)(`${(0,i.homedir)()}/.cursor/sandbox.json`,(0,i.homedir)()):void 0,w=void 0!==r.apiKey?yield function(e){return Ry(this,void 0,void 0,(function*(){const{cwd:t,perUserSandboxPolicy:r,sandboxOptions:n}=e;if(!1===(null==n?void 0:n.enabled))return{defaultSandboxPolicy:{type:"insecure_none"},defaultSandboxPolicySources:void 0};const o=Ny(r)?r:!0===(null==n?void 0:n.enabled)?function(e,t={}){return Object.assign({type:e},t)}("workspace_readwrite",{networkPolicy:(0,Bn.Po)()}):void 0;if(void 0===o)return{defaultSandboxPolicy:{type:"insecure_none"},defaultSandboxPolicySources:void 0};if(function(){const e=jy("win32"===process.platform?"cursorsandbox.exe":"cursorsandbox");e&&(0,Bn.St)({sandboxBinaryPath:e})}(),!(0,Bn.K3)(void 0,{ctx:e.initializationCtx}))throw new Sy.j1("Local SDK sandboxing was requested, but sandboxing is not supported in this environment. Disable local.sandboxOptions.enabled or remove ~/.cursor/sandbox.json to run without sandboxing.",{isRetryable:!1});const s={};s.perUser=o;const{policy:i}=yield(0,Bn.resolveSandboxPolicyForWorkspace)(t,s);return{defaultSandboxPolicy:i,defaultSandboxPolicySources:s}}))}({cwd:l,perUserSandboxPolicy:y,sandboxOptions:r.sandboxOptions,initializationCtx:s}):void 0,b=null==w?void 0:w.defaultSandboxPolicy,S=null==w?void 0:w.defaultSandboxPolicySources,k=Ny(b),E=yield async function(e){var t,r,n,o,s,i,a,l;const{workingDirectory:c,projectDir:u}=e,d=_v(e.settingSources),p=null!==(t=e.teamSettingsService)&&void 0!==t?t:{getDotCursorProtection:async()=>!1,getShouldBlockMcp:async()=>!1,getDeleteFileProtection:async()=>!1,getIsHeadlessDisabled:async()=>!1,isServerBlocked:async()=>!1,getTeamRepos:async()=>{},getAutoRunControls:async()=>({enabled:!1,allowed:[],blocked:[],enableAllowlistMode:!0,enableRunEverything:!1,enableSmartAuto:!0,mcpToolAllowlist:[]}),getMcpToolControls:async()=>{},getNetworkAccessControls:async()=>({allowlist:[],denylist:[],available:!0}),getMcpNetworkControlsConfig:async()=>({enabled:!1}),getDefaultNetworkAllowlist:async()=>({allowlist:[],available:!0}),getSandboxingControls:async()=>({sandboxingDisabled:!1,networkingDisabled:!1,gitDisabled:!1}),isAttributionDisabledByAdmin:async()=>!1,invalidateCache:()=>{}},h=null!==(r=e.defaultSandboxPolicy)&&void 0!==r?r:{type:"insecure_none"},m=null!==(n=e.getSandboxSupported)&&void 0!==n?n:()=>(0,Bn.K3)(h,{ctx:e.initializationCtx}),f=null!==(o=e.getSandboxEnabled)&&void 0!==o?o:()=>"insecure_none"!==h.type&&m(),g=new _c,v=new Fa(g,p,[c]),y=new Mv,w=new jv,b=new Dv(e.smartModeClassifierAutoModeEnabled?"allowlist":null!==(s=e.approvalMode)&&void 0!==s?s:"unrestricted",h,p,null!==(i=e.respectAdminControls)&&void 0!==i&&i),S=e.pendingDecisionProvider,k={executeIndexedGrep:void 0},E=()=>!0,x=Pv(d,"plugins"),C=null!==(a=e.importThirdPartyPlugins)&&void 0!==a&&a,_=null===(l=e.mcpMetaToolEnabled)||void 0===l||l,P=void 0!==e.mcpServers&&Object.keys(e.mcpServers).length>0,R=void 0!==e.customSubagents&&e.customSubagents.length>0,T=P||Pv(d,"project")||Pv(d,"user")||x,I=Pv(d,"project")||Pv(d,"user")||Pv(d,"mdm"),A=Pv(d,"team"),O=A&&void 0!==e.dashboardTransport,D=Pv(d,"project")||Pv(d,"user")||A||O||x,M=t=>Av({workingDirectory:c,adapters:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},t.includeMcp?{mcp:sf({teamSettingsService:p,initializationCtx:e.initializationCtx,importThirdPartyPlugins:C,ignoreApprovals:!0,includeProjectMcp:Pv(d,"project"),includeUserMcp:Pv(d,"user"),includePluginMcp:x,inlineMcpServers:e.mcpServers})}:{}),x?{pluginBootstrap:dv({importThirdPartyPlugins:C,dashboardTransport:e.dashboardTransport})}:{}),I?{hooks:tv({includeProjectHooks:Pv(d,"project"),includeUserHooks:Pv(d,"user"),includeEnterpriseHooks:Pv(d,"mdm"),useCommandHookStdinTransport:e.useCommandHookStdinTransport})}:{}),D?{localExtensibility:nv({includeProjectExtensibility:Pv(d,"project"),includeUserExtensibility:Pv(d,"user"),includeManagedSkills:O,includeTeamExtensibility:A,includePluginExtensibility:x,teamSettingsService:p,getThirdPartyExtensibilityEnabled:E,dashboardTransport:e.dashboardTransport,importThirdPartyPlugins:C})}:{}),{resourceFactory:fv({ignoreService:v,grepProvider:k,workspacePaths:[c],diagnosticsProvider:y,repositoryProvider:w,projectDir:null!=u?u:c,shellManager:void 0,defaultSandboxPolicy:h,defaultSandboxPolicySources:e.defaultSandboxPolicySources,getSandboxEnabled:f,getSandboxSupported:m,getNetworkAllowlistInfo:e.getNetworkAllowlistInfo,smartModeClassifierAutoModeEnabled:e.smartModeClassifierAutoModeEnabled,devForceNextSmartModeClassifierBlockToken:e.devForceNextSmartModeClassifierBlockToken,mcpFileOutputThresholdBytes:void 0,mcpMetaToolEnabled:_,createMcpStateAccessor:e=>new Nv(new Fp(e)),createSessionMcpLease:(t,r)=>sf({teamSettingsService:p,initializationCtx:e.initializationCtx,importThirdPartyPlugins:!1,ignoreApprovals:!0,includeProjectMcp:!1,includeUserMcp:!1,includePluginMcp:!1,inlineMcpServers:r}).createLease({workspaceState:t.workspaceState,services:t.workspaceServices,policy:t.policy}),createSessionDependencies:()=>{var t;const r=null!=S?S:new Ov;return{pendingDecisionStore:r,fileChangeTracker:new Ec(c),permissionsService:new mm(v,r,b,p,c,null!==(t=e.respectAdminControls)&&void 0!==t&&t)}}}),resourceWrappers:I?[{wrapResources(e){const t=e.workspaceServices.hooksRuntime;if(!("object"==typeof(r=t)&&null!==r&&"hooksConfigLease"in r&&"createSessionRuntime"in r&&"function"==typeof r.createSessionRuntime&&function(e){return"object"==typeof e&&null!==e&&"get"in e&&"function"==typeof e.get&&"entries"in e&&"function"==typeof e.entries}(e.resources)))return e.resources;var r;const n=t.createSessionRuntime({sessionState:e.sessionState,metadata:e.metadata});return new Qg(new Gg(e.resources,n.hookExecutor,(()=>function(e,t){var r,n,o,s;const i=null!==(n=null!==(r=Kg(t,Yg,"conversationId","conversation_id"))&&void 0!==r?r:e.sessionId)&&void 0!==n?n:"",a=null!==(o=Kg(t,Yg,"generationId","generation_id"))&&void 0!==o?o:i,l=null!==(s=Kg(t,Yg,"model"))&&void 0!==s?s:"unknown",c=Kg(t,Yg,"modelId","model_id"),u=Kg(t,Xg,"modelParams","model_params");return Object.assign({conversation_id:i,generation_id:a,model:l},he({modelId:c,modelParams:u}))}(e.sessionState,e.metadata)),e.workspaceServices.mcpLease,void 0,void 0,t.hooksConfigLease),n)}}]:[]}),R?{workspaceServicesContributors:[{contributeServices:t=>{var r;const n=new $v(null!==(r=e.customSubagents)&&void 0!==r?r:[]),o=t.services.subagentsService;return{subagentsService:void 0===o?n:new Dl([n,o])}}}]}:{})});if(!T)return M({includeMcp:!1});try{return await M({includeMcp:!0})}catch(e){return Km.warn("[default-local-workspace-runtime] Failed to initialize MCP-enabled runtime, retrying without MCP:",{error:e,workingDirectory:c,projectDir:u,enablePlugins:x,importThirdPartyPlugins:C}),M({includeMcp:!1})}}({workingDirectory:l,projectDir:u,teamSettingsService:g,initializationCtx:s,dashboardTransport:f,settingSources:r.settingSources,mcpServers:r.mcpServers,customSubagents:r.customSubagents,defaultSandboxPolicy:b,defaultSandboxPolicySources:S,approvalMode:k?"allowlist":void 0,pendingDecisionProvider:k||!0===r.autoReview?new Oy:void 0,getNetworkAllowlistInfo:k?()=>async function(e,t,r){const[n,o]=await Promise.all([e.getDefaultNetworkAllowlist(),e.getNetworkAccessControls()]),s=[...o.allowlist],i=`${t}/.cursor/sandbox.json`,a=await(0,Bn.tv)(i,t);if(a&&"insecure_none"!==a.type&&a.networkPolicy?.allow&&s.push(...a.networkPolicy.allow),r){const e=`${r}/.cursor/sandbox.json`,t=await(0,Bn.tv)(e,r);t&&"insecure_none"!==t.type&&t.networkPolicy?.allow&&s.push(...t.networkPolicy.allow)}const l=[...new Set(s)];return{hasDefaults:n.available&&n.allowlist.length>0,explicitEntries:l}}(g,(0,i.homedir)(),l):void 0,smartModeClassifierAutoModeEnabled:r.autoReview,devForceNextSmartModeClassifierBlockToken:r.devForceNextSmartModeClassifierBlockToken,respectAdminControls:void 0!==r.apiKey,useCommandHookStdinTransport:v});let x,C;return{run:(e,t,s)=>Ry(this,void 0,void 0,(function*(){return function(e,t){return Vm.run(e,t)}(Iy,(()=>Ry(this,void 0,void 0,(function*(){var i,a,u,d;const p=(0,c.VI)((0,c.q6)().withName("sdk.run").with(c._O,Ay)),[h,m]=p.ctx.withCancel(),f=null!==(i=t.sessionId)&&void 0!==i?i:(0,o.randomUUID)(),g=t.mcpServersOverride,v=void 0===(y=t.customTools)?[]:Object.entries(y).map((([e,t])=>{var r,n;return{clientKey:Le,providerIdentifier:Le,toolName:e,name:`${Le}-${e}`,description:null!==(r=t.description)&&void 0!==r?r:"",inputSchema:null!==(n=t.inputSchema)&&void 0!==n?n:vy,source:"internal"}}));var y;let w;w=yield E.createSessionRuntime({sessionId:f,mcpServersOverride:g,extraMcpTools:v});const b=new Map;try{const i=w.resources.wrapped;Ty(w,t.customTools);const c=null!==(a=t.blobStore)&&void 0!==a?a:new ur.ve;let p=null!==(u=t.initialState)&&void 0!==u?u:new H.Y9({});const y=void 0!==t.model?new H.G4({modelId:t.model.id,parameters:(null!==(d=t.model.params)&&void 0!==d?d:[]).map((e=>new H.SR({id:e.id,value:e.value})))}):void 0,S=Array.isArray(e.images)?e.images.map((e=>{const t=(0,o.randomUUID)(),r=new Uint8Array(n.Buffer.from(e.data,"base64")),s=(0,ky.v8)(r);return new qv.d(Object.assign(Object.assign({uuid:t},s?{mimeType:s}:{}),{dataOrBlobId:{case:"data",value:r}}))})):[],k=S.length>0?new qv.xv({selectedImages:S}):void 0,_=function(e){switch(e){case"agent":return H.xy.AGENT;case"plan":return H.xy.PLAN;default:return}}(t.mode),P=new H.QF({action:{case:"userMessageAction",value:new H.Vt({userMessage:new H.RG(Object.assign({text:e.text,selectedContext:k},void 0!==_?{mode:_}:{}))})}}),R={sendUpdate:(e,t)=>Ry(this,void 0,void 0,(function*(){const e=function(e,t){var r,n,o,s,i,a,l,c,u;switch(e.message.case){case"textDelta":return{type:"text-delta",text:e.message.value.text};case"thinkingDelta":return{type:"thinking-delta",text:e.message.value.text};case"thinkingCompleted":return{type:"thinking-completed",thinkingDurationMs:e.message.value.thinkingDurationMs};case"userMessageAppended":return{type:"user-message-appended",userMessage:{type:"user_message",session_id:t,text:null!==(s=null===(r=e.message.value.userMessage)||void 0===r?void 0:r.text)&&void 0!==s?s:""}};case"tokenDelta":return{type:"token-delta",tokens:e.message.value.tokens};case"summary":return{type:"summary",summary:e.message.value.summary};case"summaryStarted":return{type:"summary-started"};case"summaryCompleted":return{type:"summary-completed"};case"shellOutputDelta":return{type:"shell-output-delta",event:e.message.value.event.case?{case:e.message.value.event.case,value:null!==(i=null===(o=null===(n=e.message.value.event.value)||void 0===n?void 0:n.toJson)||void 0===o?void 0:o.call(n))&&void 0!==i?i:e.message.value.event.value}:{}};case"toolCallStarted":return Gv("tool-call-started",e.message.value);case"partialToolCall":return Gv("partial-tool-call",e.message.value);case"toolCallCompleted":return Gv("tool-call-completed",e.message.value);case"heartbeat":return null;case"turnEnded":{const t=e.message.value,r=void 0!==t.inputTokens||void 0!==t.outputTokens||void 0!==t.cacheReadTokens||void 0!==t.cacheWriteTokens;return Object.assign({type:"turn-ended"},r&&{usage:{inputTokens:Number(null!==(a=t.inputTokens)&&void 0!==a?a:BigInt(0)),outputTokens:Number(null!==(l=t.outputTokens)&&void 0!==l?l:BigInt(0)),cacheReadTokens:Number(null!==(c=t.cacheReadTokens)&&void 0!==c?c:BigInt(0)),cacheWriteTokens:Number(null!==(u=t.cacheWriteTokens)&&void 0!==u?u:BigInt(0))}})}case"toolCallDelta":return null;case"stepStarted":return{type:"step-started",stepId:Number(e.message.value.stepId)};case"stepCompleted":return{type:"step-completed",stepId:Number(e.message.value.stepId),stepDurationMs:Number(e.message.value.stepDurationMs)};case"promptSuggestion":case"postRequestPrompt":case"activeBranchChange":case"feedbackRequest":case void 0:return null;default:return e.message,null}}(t,f);null!==e&&(yield s.sendUpdate(e))})),query:(e,t)=>Ry(this,void 0,void 0,(function*(){return function(e){var t;switch(e.query.case){case"webSearchRequestQuery":return Yt(e.id);case"webFetchRequestQuery":return Xt(e.id);case"switchModeRequestQuery":return tr(e.id);case"askQuestionInteractionQuery":return er(e.id,new Ut.tz({result:{case:"rejected",value:new Ut.ox({reason:"Interactive questions are not supported in local SDK runs"})}}));case"createPlanRequestQuery":return nr(e.id,new Bt.bK({result:{case:"success",value:new Bt.Jo},planUri:""}));case"setupVmEnvironmentArgs":return or(e.id,new zt.r$({result:{case:"success",value:new zt.JH}}));case"replaceEnvArgs":return sr(e.id,new Wt.dV({result:{case:"failure",value:new Wt.uq({errorMessage:"Environment replacement is not supported in local SDK runs",setupLogs:""})}}));case"prManagementRequestQuery":return ir(e.id,new Ht.HL({result:{case:"error",value:new Ht.K$({error:"PR management is only available in cloud agents"})}}));case"mcpAuthRequestQuery":return ar(e.id,"MCP authentication is not supported in local SDK runs");case"generateImageRequestQuery":return lr(e.id,null===(t=e.query.value.args)||void 0===t?void 0:t.description);case void 0:throw new Sy.j1("Missing interaction query type",{isRetryable:!1});default:throw e.query,new Sy.j1("Unhandled interaction query type",{isRetryable:!1})}}(t)}))};if(x!==t.apiKey||!C){yield Promise.all([(0,ky.ly)(t.apiKey),(0,ky.mU)(t.apiKey)]);const e=(0,ky.KU)(t.apiKey),r=yn((0,mr.createClient)(zv.N,e),{injectTraceHeaders:!0});C=new un(r),x=t.apiKey}const T=(0,ky.Vh)(C,(()=>{const e=(0,ky.KU)(t.apiKey),r=yn((0,mr.createClient)(zv.N,e),{injectTraceHeaders:!0}),n=new un(r);return C=n,x=t.apiKey,n})),I=new Wv({agentClient:T,getResources:e=>Ry(this,[e],void 0,(function*({agentId:e}){let r=b.get(e);return r||(r=yield E.createSessionRuntime({sessionId:e,mcpServersOverride:g,extraMcpTools:v}),Ty(r,t.customTools),r.resources.base.register(bt,A),b.set(e,r)),r.resources.wrapped})),mcpTools:v,workspacePath:l,parentConversationId:f,onSessionReleased:e=>{const t=b.get(e);t&&(t.dispose(),b.delete(e))}}),A=function(e){const t=new Map;async function r(t,r,n){var o,s,i,a;let l;try{l=await e.createOrResumeSession(t,r);const a=await e.runSession(t,l,r,{execId:null==n?void 0:n.execId});return"error"===a.status?new yt.vS({result:{case:"error",value:new yt.od({agentId:l,error:a.error})}}):"aborted"===a.status?new yt.vS({result:{case:"error",value:new yt.od({agentId:l,error:null!==(o=a.error)&&void 0!==o?o:"Subagent was aborted by the user"})}}):"background"===a.status?new yt.vS({result:{case:"success",value:new yt.HJ({agentId:l,finalMessage:a.finalMessage,toolCallCount:null!==(s=a.toolCallCount)&&void 0!==s?s:0,backgroundReason:a.backgroundReason,transcriptPath:a.transcriptPath})}}):new yt.vS({result:{case:"success",value:new yt.HJ({agentId:l,finalMessage:a.finalMessage,toolCallCount:null!==(i=a.toolCallCount)&&void 0!==i?i:0})}})}catch(t){l&&e.releaseSession&&e.releaseSession(l);const n=t instanceof Error?t.message:String(t),o=null!==(a=null!=l?l:function(e){if(e instanceof wt&&e.agentId)return e.agentId;if(!e||"object"!=typeof e)return;const t=e;return"string"==typeof t.agentId?t.agentId:void 0}(t))&&void 0!==a?a:r.resumeAgentId;return new yt.vS({result:{case:"error",value:new yt.od(Object.assign(Object.assign({},o?{agentId:o}:{}),{error:n}))}})}}return{execute(e,n,o){const s=function(e){var t,r;if(e.toolCallId&&e.parentConversationId)return[e.parentConversationId,e.toolCallId,null!==(t=e.resumeAgentId)&&void 0!==t?t:"",null!==(r=e.forkAgentId)&&void 0!==r?r:""].join("\0")}(n);if(void 0===s)return r(e,n,o);const i=t.get(s);if(void 0!==i)return i;const a=r(e,n,o).finally((()=>{t.delete(s)}));return t.set(s,a),a}}}(I);w.resources.base.register(bt,A);const O=E.services.hooksRuntime,D=O?function(e){const{workspaceRuntime:t}=e;if(!(t.hooksConfigLease.hasHookForStep(Y.sessionStart)||t.hooksConfigLease.hasHookForStep(Y.sessionEnd)||t.hooksConfigLease.hasHookForStep(Y.stop)||t.hooksConfigLease.hasHookForStep(Y.beforeSubmitPrompt)))return{};const r=t.createSessionRuntime({sessionState:e.sessionState,metadata:e.metadata}),{hookExecutor:n}=r;let o;return{async onSessionStart(e){if(o=e,n.hasHooksForStep(Y.sessionStart))try{const t=Object.assign(Object.assign({conversation_id:e.conversationId,generation_id:e.generationId,model:e.model},he(e)),{is_background_agent:!1}),r=await n.executeHookForStep(Y.sessionStart,t);if(r)return r.env&&n.setSessionEnvironment(r.env),{env:r.env,additionalContext:r.additional_context,blocked:!1===r.continue,blockedReason:r.user_message}}catch(e){Km.warn("[hooks-adapter] sessionStart hook failed:",e)}},async onSessionEnd(e,t){var r,s,i;if(n.hasHooksForStep(Y.sessionEnd))try{const a=Object.assign(Object.assign({conversation_id:null!==(r=null==o?void 0:o.conversationId)&&void 0!==r?r:"",generation_id:null!==(s=null==o?void 0:o.generationId)&&void 0!==s?s:"",model:null!==(i=null==o?void 0:o.model)&&void 0!==i?i:"unknown"},o?he(o):{}),{reason:e,duration_ms:t,is_background_agent:!1,final_status:e});await n.executeHookForStep(Y.sessionEnd,a)}catch(e){Km.warn("[hooks-adapter] sessionEnd hook failed:",e)}finally{n.clearSessionEnvironment()}else n.clearSessionEnvironment()},async onBeforeSubmitPrompt(e){var t;if(n.hasHooksForStep(Y.beforeSubmitPrompt))try{const r=Object.assign(Object.assign({conversation_id:e.conversationId,generation_id:e.generationId,model:e.model},he(e)),{prompt:null!==(t=e.promptText)&&void 0!==t?t:"",attachments:[]});await n.executeHookForStep(Y.beforeSubmitPrompt,r)}catch(e){Km.warn("[hooks-adapter] beforeSubmitPrompt hook failed:",e)}},async onTurnCompleted(e){if(!n.hasHooksForStep(Y.stop))return;const t=Object.assign(Object.assign({conversation_id:e.conversationId,generation_id:e.generationId,model:e.model},he(e)),{status:"completed",loop_count:e.loopCount}),r=await n.executeHookForStep(Y.stop,t),o="string"==typeof(null==r?void 0:r.followup_message)?r.followup_message.trim():"";return o.length>0?o:void 0},async onTurnError(e){if(n.hasHooksForStep(Y.stop))try{const t=Object.assign(Object.assign({conversation_id:e.conversationId,generation_id:e.generationId,model:e.model},he(e)),{status:"error",loop_count:e.loopCount});await n.executeHookForStep(Y.stop,t)}catch(e){Km.warn("[hooks-adapter] onTurnError stop hook failed:",e)}},async onTurnAborted(e){if(n.hasHooksForStep(Y.stop))try{const t=Object.assign(Object.assign({conversation_id:e.conversationId,generation_id:e.generationId,model:e.model},he(e)),{status:"aborted",loop_count:e.loopCount});await n.executeHookForStep(Y.stop,t)}catch(e){Km.warn("[hooks-adapter] onTurnAborted stop hook failed:",e)}},async dispose(){await r.dispose()}}}({workspaceRuntime:O,sessionState:w.state,metadata:w.metadata}):void 0,M=new Uv({workspacePath:l,conversationId:f,blobStore:c}),j=function(e,t,r){const{hooks:n}=r,[o,s]=e.withCancel(),i=new Tt;let a=r.initialState;const l={async handleCheckpoint(e,t){var n;a=t,await(null===(n=r.onCheckpoint)||void 0===n?void 0:n.call(r,t))},getLatestCheckpoint:()=>a};let c="completed";const u=Date.now(),d=(async()=>{var e,s,u,d,p,h,m,f,g;const v=Zm(r,0,Ym(t));try{const t=await(null===(e=null==n?void 0:n.onSessionStart)||void 0===e?void 0:e.call(n,v));if(null==t?void 0:t.blocked)throw c="error",new Error(null!==(m=t.blockedReason)&&void 0!==m?m:"Session blocked by sessionStart hook")}catch(e){if("completed"!==c)throw e;Km.warn("[agent-session-runner] sessionStart hook failed:",e)}let y=t,w=0;for(;y;){const e=Zm(r,w,Ym(y));try{await(null===(s=null==n?void 0:n.onBeforeSubmitPrompt)||void 0===s?void 0:s.call(n,e))}catch(e){Km.warn("[agent-session-runner] beforeSubmitPrompt hook failed:",e)}const t=0===w?r.preFetchedBlobs:void 0;try{await r.agentClient.run(o,a,y,void 0,r.interactionListener,r.resources,r.blobStore,i,l,null!==(f=r.mcpTools)&&void 0!==f?f:[],Object.assign(Object.assign(Object.assign({conversationId:r.conversationId},r.runOptions),{subagentModelOverrides:null!==(g=null===(u=r.runOptions)||void 0===u?void 0:u.subagentModelOverrides)&&void 0!==g?g:[]}),void 0!==t?{preFetchedBlobs:t}:{}))}catch(t){throw c=Xm(t)?"aborted":"error",null==(b="aborted"===c?null===(d=null==n?void 0:n.onTurnAborted)||void 0===d?void 0:d.call(n,e):null===(p=null==n?void 0:n.onTurnError)||void 0===p?void 0:p.call(n,e))||b.catch((e=>{Km.warn("[agent-session-runner] fire-and-forget hook failed:",e)})),t}let m;try{m=await(null===(h=null==n?void 0:n.onTurnCompleted)||void 0===h?void 0:h.call(n,e))}catch(e){throw c="error",e}const v="string"==typeof m?m.trim():"";0!==v.length?(w+=1,i.resetStream(),S=v,y=new H.QF({action:{case:"userMessageAction",value:new H.Vt({userMessage:new H.RG({text:S})})}})):y=void 0}var b,S})().finally((async()=>{var e,t;const r=Date.now()-u;try{await(null===(e=null==n?void 0:n.onSessionEnd)||void 0===e?void 0:e.call(n,c,r))}catch(e){Km.warn("[agent-session-runner] sessionEnd hook failed:",e)}try{await(null===(t=null==n?void 0:n.dispose)||void 0===t?void 0:t.call(n))}catch(e){Km.warn("[agent-session-runner] hooks dispose failed:",e)}}));return{done:d,abort(){s()}}}(h,P,Object.assign(Object.assign({agentClient:T,interactionListener:R,resources:i,blobStore:c,initialState:p,conversationId:f,mcpTools:v,runOptions:{generationUUID:t.requestId,requestedModel:y,enableAgentRetries:!1!==r.enableAgentRetries}},t.preFetchedBlobs&&t.preFetchedBlobs.length>0?{preFetchedBlobs:t.preFetchedBlobs}:{}),{hooks:D,onCheckpoint(e){return Ry(this,void 0,void 0,(function*(){var r;p=e,M.writeFromState(h,e),yield null===(r=t.onCheckpoint)||void 0===r?void 0:r.call(t,e)}))}})),N=j.done.finally((()=>Ry(this,void 0,void 0,(function*(){try{yield I.awaitBackgroundWorkers()}finally{yield M.waitForPendingWrites().catch((()=>{}));for(const e of b.values())try{yield e.dispose()}catch(e){xy.v.log(`Failed to dispose subagent session runtime: ${e instanceof Error?e.message:String(e)}`)}b.clear(),yield w.dispose()}})))).catch((e=>{throw e}));return{abort(){j.abort(),m()},done:N}}catch(e){for(const e of b.values())try{yield e.dispose()}catch(e){}throw b.clear(),yield w.dispose(),e}}))))})),reload(){return Ry(this,void 0,void 0,(function*(){yield E.reload()}))},dispose(){return Ry(this,void 0,void 0,(function*(){yield E.dispose()}))}}}))}},"../constants/dist/index.js"(e,t,r){r.d(t,{pZY:()=>i,G$s:()=>a,tl5:()=>c,RJV:()=>d}),new Set(["agent-stores","shared-agent-stores"]);const n={clusters:{local:{managerUrl:"http://localhost:50051",httpProxyUrl:null,isLocal:!0,class:null,label:"Local",spaceliftStackId:null,portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:null,show:!0},docsSite:{publishPublicIps:!1}},dev:{managerUrl:"https://dev.cursorvm-manager.com",httpProxyUrl:"10.0.29.128:8080",isLocal:!1,class:"external",label:"Dev",spaceliftStackId:"agent-runner-vpcs-dev",portalWebsite:{vncWebsocketOrigin:"wss://*.dev.cursorvm.com"},anyrunDashboard:{group:null,show:!0},docsSite:{publishPublicIps:!1}},train1:{awsRegion:"us-east-1",managerUrl:"https://train1.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"train1",spaceliftStackId:"agent-runner-vpcs-train1",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:"training",show:!0},docsSite:{publishPublicIps:!1}},train2:{awsRegion:"us-east-1",managerUrl:"https://train2.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"train2",spaceliftStackId:"agent-runner-vpcs-train2",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:"training",show:!0},docsSite:{publishPublicIps:!1}},train3:{awsRegion:"us-east-1",managerUrl:"https://train3.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"train3",spaceliftStackId:"agent-runner-vpcs-train3",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:"training",show:!0},docsSite:{publishPublicIps:!1}},train4:{awsRegion:"us-east-2",managerUrl:"https://train4.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"train4",spaceliftStackId:"agent-runner-vpcs-train4",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:"training",show:!0},docsSite:{publishPublicIps:!1}},train5:{awsRegion:"us-west-2",managerUrl:"https://train5.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"train5",spaceliftStackId:"agent-runner-vpcs-train5",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:"training",show:!0},docsSite:{publishPublicIps:!1}},train6:{awsRegion:"eu-central-1",managerUrl:"https://train6.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"train6",spaceliftStackId:"agent-runner-vpcs-train6",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:"training",show:!0},docsSite:{publishPublicIps:!1}},train7:{awsRegion:"eu-west-1",managerUrl:"https://train7.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"train7",spaceliftStackId:"agent-runner-vpcs-train7",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:"training",show:!0},docsSite:{publishPublicIps:!1}},train8:{awsRegion:"us-east-1",managerUrl:"https://train8.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"train8",spaceliftStackId:"agent-runner-vpcs-train8",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:"training",show:!0},docsSite:{publishPublicIps:!1}},train9:{awsRegion:"us-west-2",managerUrl:"https://train9.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"train9",spaceliftStackId:"agent-runner-vpcs-train9",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:"training",show:!0},docsSite:{publishPublicIps:!1}},train10:{awsRegion:"us-west-2",managerUrl:"https://train10.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"train10",spaceliftStackId:"agent-runner-vpcs-train10",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:"training",show:!0},docsSite:{publishPublicIps:!1}},train11:{awsRegion:"us-west-2",managerUrl:"https://train11.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"train11",spaceliftStackId:"agent-runner-vpcs-train11",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:"training",show:!0},docsSite:{publishPublicIps:!1}},train12:{awsRegion:"eu-west-2",managerUrl:"https://train12.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"train12",spaceliftStackId:"agent-runner-vpcs-train12",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:"training",show:!0},docsSite:{publishPublicIps:!1}},eval1:{awsRegion:"us-east-1",managerUrl:"https://eval1.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"eval1",spaceliftStackId:"agent-runner-vpcs-eval1",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:"eval",show:!0},docsSite:{publishPublicIps:!1}},eval2:{awsRegion:"us-east-1",managerUrl:"https://eval2.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"eval2",spaceliftStackId:"agent-runner-vpcs-eval2",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:"eval",show:!0},docsSite:{publishPublicIps:!1}},eval3:{awsRegion:"us-west-2",managerUrl:"https://eval3.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"eval3",spaceliftStackId:"agent-runner-vpcs-eval3",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:"eval",show:!0},docsSite:{publishPublicIps:!1}},test1:{managerUrl:"https://test1.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"test1",spaceliftStackId:"agent-runner-vpcs-test1",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:null,show:!0},docsSite:{publishPublicIps:!1}},test3:{awsRegion:"us-east-1",managerUrl:"https://test3.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"test3",spaceliftStackId:"agent-runner-vpcs-test3",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:null,show:!0},docsSite:{publishPublicIps:!1}},"test2-gcp":{awsRegion:"us-east-1",managerUrl:"https://test2-gcp.cursorvm-manager.com",httpProxyUrl:null,isLocal:!1,class:"internal",label:"test2-gcp",spaceliftStackId:"agent-runner-vpcs-test2-gcp",portalWebsite:{vncWebsocketOrigin:null},anyrunDashboard:{group:null,show:!0},docsSite:{publishPublicIps:!1}},us1:{awsRegion:"us-west-2",managerUrl:"https://us1.cursorvm-manager.com",httpProxyUrl:"10.0.21.248:8080",isLocal:!1,class:"external",label:"us1",spaceliftStackId:"agent-runner-vpcs-us1",portalWebsite:{vncWebsocketOrigin:"wss://*.us1.cursorvm.com"},anyrunDashboard:{group:"us",show:!0},docsSite:{publishPublicIps:!0}},us1p:{awsRegion:"us-west-2",managerUrl:"https://us1p.cursorvm-manager.com",httpProxyUrl:"10.0.29.68:8080",isLocal:!1,class:"external",label:"us1 (Privacy)",spaceliftStackId:"agent-runner-vpcs-us1p",portalWebsite:{vncWebsocketOrigin:"wss://*.us1p.cursorvm.com"},anyrunDashboard:{group:"us",show:!0},docsSite:{publishPublicIps:!0}},us3:{awsRegion:"us-east-1",managerUrl:"https://us3.cursorvm-manager.com",httpProxyUrl:"10.0.25.8:8080",isLocal:!1,class:"external",label:"us3",spaceliftStackId:"agent-runner-vpcs-us3",portalWebsite:{vncWebsocketOrigin:"wss://*.us3.cursorvm.com"},anyrunDashboard:{group:"us",show:!0},docsSite:{publishPublicIps:!0}},us3p:{awsRegion:"us-east-1",managerUrl:"https://us3p.cursorvm-manager.com",httpProxyUrl:"10.0.26.30:8080",isLocal:!1,class:"external",label:"us3 (Privacy)",spaceliftStackId:"agent-runner-vpcs-us3p",portalWebsite:{vncWebsocketOrigin:"wss://*.us3p.cursorvm.com"},anyrunDashboard:{group:"us",show:!0},docsSite:{publishPublicIps:!0}},us4:{awsRegion:"us-west-2",managerUrl:"https://us4.cursorvm-manager.com",httpProxyUrl:"10.0.16.154:8080",isLocal:!1,class:"external",label:"us4",spaceliftStackId:"agent-runner-vpcs-us4",portalWebsite:{vncWebsocketOrigin:"wss://*.us4.cursorvm.com"},anyrunDashboard:{group:"us",show:!0},docsSite:{publishPublicIps:!0}},us4p:{awsRegion:"us-west-2",managerUrl:"https://us4p.cursorvm-manager.com",httpProxyUrl:"10.0.20.248:8080",isLocal:!1,class:"external",label:"us4 (Privacy)",spaceliftStackId:"agent-runner-vpcs-us4p",portalWebsite:{vncWebsocketOrigin:"wss://*.us4p.cursorvm.com"},anyrunDashboard:{group:"us",show:!0},docsSite:{publishPublicIps:!0}},us5:{awsRegion:"us-east-2",managerUrl:"https://us5.cursorvm-manager.com",httpProxyUrl:"10.0.28.203:8080",isLocal:!1,class:"external",label:"us5",spaceliftStackId:"agent-runner-vpcs-us5",portalWebsite:{vncWebsocketOrigin:"wss://*.us5.cursorvm.com"},anyrunDashboard:{group:"us",show:!0},docsSite:{publishPublicIps:!0}},us5p:{awsRegion:"us-east-2",managerUrl:"https://us5p.cursorvm-manager.com",httpProxyUrl:"10.0.25.35:8080",isLocal:!1,class:"external",label:"us5 (Privacy)",spaceliftStackId:"agent-runner-vpcs-us5p",portalWebsite:{vncWebsocketOrigin:"wss://*.us5p.cursorvm.com"},anyrunDashboard:{group:"us",show:!0},docsSite:{publishPublicIps:!0}},us6:{awsRegion:"us-east-2",managerUrl:"https://us6.cursorvm-manager.com",httpProxyUrl:"10.0.31.117:8080",isLocal:!1,class:"external",label:"us6",spaceliftStackId:"agent-runner-vpcs-us6",portalWebsite:{vncWebsocketOrigin:"wss://*.us6.cursorvm.com"},anyrunDashboard:{group:"us",show:!0},docsSite:{publishPublicIps:!0}},us6p:{awsRegion:"us-east-2",managerUrl:"https://us6p.cursorvm-manager.com",httpProxyUrl:"10.0.28.204:8080",isLocal:!1,class:"external",label:"us6 (Privacy)",spaceliftStackId:"agent-runner-vpcs-us6p",portalWebsite:{vncWebsocketOrigin:"wss://*.us6p.cursorvm.com"},anyrunDashboard:{group:"us",show:!0},docsSite:{publishPublicIps:!0}},us7:{awsRegion:"us-east-1",managerUrl:"https://us7.cursorvm-manager.com",httpProxyUrl:"10.0.56.33:8080",isLocal:!1,class:"external",label:"us7",spaceliftStackId:"agent-runner-vpcs-us7",portalWebsite:{vncWebsocketOrigin:"wss://*.us7.cursorvm.com"},anyrunDashboard:{group:"us",show:!0},docsSite:{publishPublicIps:!0}},us7p:{awsRegion:"us-east-1",managerUrl:"https://us7p.cursorvm-manager.com",httpProxyUrl:"10.0.26.89:8080",isLocal:!1,class:"external",label:"us7 (Privacy)",spaceliftStackId:"agent-runner-vpcs-us7p",portalWebsite:{vncWebsocketOrigin:"wss://*.us7p.cursorvm.com"},anyrunDashboard:{group:"us",show:!0},docsSite:{publishPublicIps:!0}}}},o=["dev","us1","us1p","us3","us3p","us4","us4p","us5","us5p","us6","us6p","us7","us7p","train1","train2","train3","train4","train5","train6","train7","train8","train9","train10","train11","train12","eval1","eval2","eval3","test1","test3","test2-gcp","local"];var s;!function(){const e=Object.keys(n.clusters),t=o,r=e.filter((e=>!t.includes(e))),s=t.filter((t=>!e.includes(t)));if(r.length>0||s.length>0)throw new Error(["[@anysphere/constants] anyrunClusterOrdering must exactly match anyrunClusterConfig.clusters keys.",r.length>0?`Missing from ordering: ${r.join(", ")}`:void 0,s.length>0?`Unknown in ordering: ${s.join(", ")}`:void 0].filter(Boolean).join(" "))}(),function(){const e=Object.keys(n.clusters).filter((e=>n.clusters[e].docsSite.publishPublicIps)).filter((e=>!("awsRegion"in n.clusters[e])));if(e.length>0)throw new Error(["[@anysphere/constants] docsSite.publishPublicIps=true clusters must define awsRegion.",e.length>0?`Missing AWS regions: ${e.join(", ")}`:void 0].filter(Boolean).join(" "))}(),new Set(["image/png","image/jpeg","image/gif","image/webp","video/mp4","video/webm"]),function(e){e.github="github",e.githubEnterprise="github-enterprise",e.cursorGithub="cursor-github"}(s||(s={}));new Set(["Your environment snapshot has expired after inactivity.","Your environment snapshot is invalid.","The environment snapshot you requested does not exist, or you do not have permission to access it.","Failed to start the development environment. The update script in your configuration failed during VM startup.","Failed to start the development environment. The build process failed. Please check your Dockerfile."]);const i=8388608,a="https://ptht05hbb1ssoooe.public.blob.vercel-storage.com/assets/uploads/cursorlogomcpv3.svg",l=["cursor"],c="http://localhost:8787/callback";function u(e){return`${e}://anysphere.cursor-mcp/oauth/callback`}function d(e){const t=new Set,r=void 0!==e&&function(e){try{const t=new URL(e);if("http:"!==t.protocol)return!1;const r=t.hostname;return"localhost"===r||"127.0.0.1"===r||"[::1]"===r}catch(e){return!1}}(e);e&&!r&&t.add(e);for(const e of Array.from(new Set([...l])).map(u))t.add(e);return t.add("https://www.cursor.com/agents/mcp/oauth/callback"),t.add(c),e&&r&&t.add(e),Array.from(t)}const p={standard:{referralDiscountId:"cursor-for-startups",creditLabel:"$5,000",durationMonths:6,coupons:{production:{seats:"QmOizAV7",bugbot:"Tmc1ZTk7"},test:{seats:"CNmegx7g",bugbot:"upIo5KlJ"}}},yc:{referralDiscountId:"cursor-for-startups-yc",creditLabel:"$60,000",durationMonths:12,coupons:{production:{seats:"pvrVSY2a",bugbot:"qJcxrNlY"},test:{seats:"CNmegx7g",bugbot:"upIo5KlJ"}}}};function h(e){return p[e]}h("yc").creditLabel,h("standard").creditLabel,new Set(["github.com","gitlab.com","bitbucket.org","bitbucket.com","codeberg.org","gitea.com","sr.ht"]),new Set(["pr_tab_init","pr_tab_refresh","pr_branch_poll","pr_metadata_refresh","pr_reviews_subtab","pr_diff_view","pr_status_pill","cloud_agent_pr_state","agent_tool_call","unknown"])},"../mcp-agent-exec/dist/mcp-sandbox-policy.js"(e,t,r){r.d(t,{buildMcpSandboxPolicy:()=>n.Ic});var n=r("../mcp-core/dist/index.js")},"../mcp-core/dist/index.js"(e,t,r){r.d(t,{B1:()=>M,c8:()=>ve,Ic:()=>fe,O3:()=>H,tB:()=>L,ME:()=>A,Fm:()=>ge,jI:()=>me,VD:()=>Q,X5:()=>Z,PK:()=>ye,FC:()=>D,q2:()=>$});const n=BigInt(0),o=BigInt(8),s=BigInt(16),i=BigInt(65535);function a(e){const t=e.split(".");if(4!==t.length)return;let r=n;for(const e of t){if(!/^\d{1,3}$/.test(e))return;const t=Number(e);if(!Number.isInteger(t)||t<0||t>255)return;r=r<<o|BigInt(t)}return{version:4,value:r}}function l(e){if(0===e.length)return[];const t=[],r=e.split(":");for(let e=0;e<r.length;e++){const n=r[e];if(0===n.length)return;if(n.includes(".")){if(e!==r.length-1)return;const o=a(n);if(!o)return;t.push(Number(o.value>>s&i)),t.push(Number(o.value&i))}else{if(!/^[0-9a-f]{1,4}$/i.test(n))return;t.push(Number.parseInt(n,16))}}return t}function c(e){var t;return null!==(t=a(e))&&void 0!==t?t:function(e){const t=T(e);if(0===t.length||t.includes(":::"))return;const r=t.indexOf("::");if(-1===r){const e=l(t);if(!e||8!==e.length)return;return{version:6,value:e.reduce(((e,t)=>e<<s|BigInt(t)),n)}}if(-1!==t.indexOf("::",r+1))return;const o=t.slice(0,r),i=t.slice(r+2),a=l(o),c=l(i);if(!a||!c)return;const u=a.length+c.length;return u>7?void 0:{version:6,value:[...a,...new Array(8-u).fill(0),...c].reduce(((e,t)=>e<<s|BigInt(t)),n)}}(e)}function u(e,t){const r=T(e),n=T(t);if("*"===n)return!0;if(n.includes("/"))return function(e,t){const r=t.lastIndexOf("/");if(r<=0||r===t.length-1)return!1;const n=c(t.slice(0,r)),o=c(e);if(!n||!o||n.version!==o.version)return!1;const s=Number(t.slice(r+1)),i=4===n.version?32:128;if(!Number.isInteger(s)||s<0||s>i)return!1;const a=BigInt(i-s);return o.value>>a==n.value>>a}(r,n);if(n.startsWith("*.")){const e=n.slice(2);return r===e||r.endsWith(`.${e}`)}return r===n}const d="Blocked by MCP Network Admin Server Controls";function p(e){return/\s/.test(e)}const h="[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?",m=new RegExp(`^(?:${h}\\.)*${h}$`),f=new RegExp(`^\\*\\.(?:${h}\\.)*${h}$`),g="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)",v=new RegExp(`^${g}(?:\\.${g}){3}$`),y=/^[0-9a-f:]+$/,w=new RegExp(`^(?:${g}(?:\\.${g}){3}|[0-9a-f:]+)\\/\\d{1,3}$`);function b(e){const t=T(e);return t.length>0&&t.length<=253&&m.test(t)}function S(e){const t=T(e);return v.test(t)||function(e){const t=T(e);if(!y.test(t))return!1;try{return new URL(`https://[${t}]`),!0}catch(e){return!1}}(t)}function k(e,t){return""===t||"http:"===e&&"80"===t||"https:"===e&&"443"===t}function E(e){const t=new URL(e.pathname||"/",e.origin);if(t.search=e.search,t.pathname.endsWith("/")&&t.pathname.length>1&&(t.pathname=t.pathname.slice(0,-1)),"/"===t.pathname&&""===t.search){const t=e.protocol.toLowerCase();let r=`${t}//${e.hostname.toLowerCase()}`;return k(t,e.port)||(r+=`:${e.port}`),r}const r=e.protocol.toLowerCase();let n=`${r}//${e.hostname.toLowerCase()}`;return k(r,e.port)||(n+=`:${e.port}`),`${n}${t.pathname}${t.search}`}function x(e){if(e.includes("://"))return function(e){try{const t=new URL(e);return("http:"===t.protocol||"https:"===t.protocol)&&!(0===t.hostname.length||t.username.length>0||t.password.length>0)&&""===t.hash&&function(e){const t=e.toLowerCase();return!t.includes("*")&&(b(t)||S(t))}(t.hostname)}catch(e){return!1}}(e);const t=T(e);return"*"===t||!!f.test(t)||(t.includes("/")?function(e){const t=T(e);if(!w.test(t))return!1;const[r]=t.split("/");return void 0!==r&&u(r,t)}(t):b(t)||S(t))}function C(e,t){if(!e.includes("*"))return e===t;const r=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${r}$`).test(t)}function _(e){return e.endsWith("/")&&e.length>1?e.slice(0,-1):e}function P(e,t){return function(e,t,r){const n=R(t);if(!n)return!1;let o;try{o=new URL(e)}catch(e){return!1}return""===o.username&&""===o.password&&""===n.username&&""===n.password&&o.protocol===n.protocol&&o.port===n.port&&(s=o.hostname,i=n.hostname,!s.includes("*")&&T(s)===T(i)&&(C(a=o.pathname,l=n.pathname)||C(_(a),_(l)))&&function(e,t,r){return""===e?r.allowRequestQueryWhenPatternOmitsQuery||""===t:C(e,t)}(o.search,n.search,r));var s,i,a,l}(e,t,{allowRequestQueryWhenPatternOmitsQuery:!0})}function R(e){const t=e.trim();if(0===t.length||p(t))return;if(function(e){const t=e.indexOf("[");return-1!==t&&-1===e.indexOf("]",t)}(t))return;const r=function(e){const t=e.trim();if(0===t.length)return;const r=t.includes("://")?t:`https://${t}`;try{return new URL(r)}catch(e){return}}(t);if(r&&("http:"===r.protocol||"https:"===r.protocol)&&""===r.username&&""===r.password&&0!==r.hostname.length&&(!T(r.hostname).includes(":")||t.includes("["))){if(t.includes("[")){const e=t.indexOf("["),n=t.indexOf("]",e);if(-1===n)return;const o=t.slice(e+1,n);if(T(r.hostname)!==T(o))return}return r}}function T(e){const t=e.trim().toLowerCase();return t.startsWith("[")&&t.endsWith("]")?t.slice(1,-1):t}function I(e){return(null!=(t=e.mcpNetworkAllowlist)?t:[]).flatMap((e=>{const t=function(e){const t=e.trim();if(0===t.length)return;const r=t.lastIndexOf("/");if(!t.includes("://")&&r>0&&/^\d+$/.test(t.slice(r+1).trim())){const e=`${T(t.slice(0,r))}/${t.slice(r+1).trim()}`;return x(e)?e:void 0}if(p(t)||t.includes("#")||t.includes("@"))return;const n=t.indexOf("://");if(-1!==n){const e=t.slice(0,n).toLowerCase();if("http"!==e&&"https"!==e)return;try{const e=new URL(t);if(0===e.hostname.length||e.username.length>0||e.password.length>0)return;const r="/"!==e.pathname&&""!==e.pathname,n=""!==e.search,o=!k(e.protocol,e.port);if(e.hostname.includes("*"))return;if(r||n){const t=E(e);if(!x(t))return;return t}{if(o)return;const t=E(e);if(!x(t))return;return t}}catch(e){return}}else if(t.includes("/"))return;const o=t.trim().toLowerCase(),s=function(e){const t=e.indexOf(":");if(-1===t)return e;const r=e.slice(t+1);return/^\d+$/.test(r)?e.slice(0,t):e}(o);return 0===s.length||!x(s)||s!==o&&"*"===s?void 0:s}(e);return void 0===t?[]:[t]}));var t}function A(e,t){var r,n;if(!0!==t.enabled)return{allowed:!0};if(!R(e))return{allowed:!1,message:null!==(r=t.blockMessage)&&void 0!==r?r:d};const o=I(t);return o.length>0&&o.some((t=>function(e,t){const r=R(t);if(!r)return!1;if(!e.includes("://"))return u(T(r.hostname),e);if(P(e,t))return!0;const n=function(e){try{const t=new URL(e);if(""!==t.username||""!==t.password||!k(t.protocol,t.port)||"/"!==t.pathname||""!==t.search||""!==t.hash)return;return`${t.protocol}//${t.host}/*`}catch(e){return}}(e);return void 0!==n&&P(n,t)}(t,e)))?{allowed:!0}:{allowed:!1,message:null!==(n=t.blockMessage)&&void 0!==n?n:d}}function O(e){return(null!=e?e:[]).flatMap((e=>{var t,r;const n=null===(t=e.name)||void 0===t?void 0:t.trim();if(void 0===n||0===n.length)return[];const o=(null!==(r=e.toolAllowlist)&&void 0!==r?r:[]).map((e=>e.trim())).filter((e=>e.length>0));return 0===o.length?[`${n}:*`]:o.map((e=>`${n}:${e}`))}))}function D({autoRunControls:e,allowedMcpServers:t,isMcpSettingsOverhaulEnabled:r}){var n;const o=!0===(null==e?void 0:e.enabled)&&null!==(n=e.mcpToolAllowlist)&&void 0!==n?n:[];return s=r?[...O(t),...o]:[...o],[...new Set(s)];var s}class M{ttl;state;staleDirty=!1;refreshInFlight;refreshGeneration=0;constructor(e=864e5){this.ttl=e}async get(e){const t=performance.now();if(this.state&&this.state.expiresAt>t&&!this.staleDirty)return this.state.value;if(this.staleDirty&&this.state){const t=this.state.value;if(!this.refreshInFlight){const t=this.refreshGeneration;let r;r=(async()=>{try{const r=await e();if(t!==this.refreshGeneration)return;this.state={expiresAt:performance.now()+this.ttl,value:r},this.staleDirty=!1}catch(e){}finally{r&&this.refreshInFlight===r&&(this.refreshInFlight=void 0)}})(),this.refreshInFlight=r}return t}const r=await e();return this.state={expiresAt:performance.now()+this.ttl,value:r},this.staleDirty=!1,r}invalidate(){this.refreshGeneration++,this.state=void 0,this.staleDirty=!1,this.refreshInFlight=void 0}invalidateKeepingStale(){this.state&&(this.staleDirty=!0)}}function j(e){return Object.fromEntries(Object.entries(e).filter((([,e])=>void 0!==e)))}function N(e,t){const r=function(e){try{const t=new URL(e);return{host:t.host,origin:t.origin,pathname:t.pathname}}catch(e){return{host:null,origin:null,pathname:null}}}(e),n=!1!==(null==t?void 0:t.includePath);return{host:r.host,origin:r.origin,path:n?r.pathname:null}}function $(e,t){return N(e,t)}var F=r("crypto");function L(e,t){const r=null==e?void 0:e.access_token,n="string"==typeof r?r.length:0,o=Boolean(null==e?void 0:e.refresh_token),s="number"==typeof(null==e?void 0:e.expires_in)&&Number.isFinite(e.expires_in)?e.expires_in:null;return{accessTokenLen:n,refreshTokenPresent:o,expiresAtTimestamp:(null==t?void 0:t.expiresInIsFresh)&&null!==s?Date.now()+Math.round(1e3*s):null}}function U(e){if(e)return(0,F.createHash)("sha256").update(e).digest("hex").slice(0,12)}function B(e){if(e&&0!==e.length)return U(JSON.stringify([...e].sort()))}function H(e){var t,r;return{clientIdHash:U(null==e?void 0:e.client_id),clientSecretHash:U(null==e?void 0:e.client_secret),redirectUrisHash:B(null==e?void 0:e.redirect_uris),redirectUriCount:null!==(r=null===(t=null==e?void 0:e.redirect_uris)||void 0===t?void 0:t.length)&&void 0!==r?r:0}}function W(e,t){let r=e;for(const e of t){if("object"!=typeof r||null===r||!(e in r))return;r=r[e]}return r}function z(e,t){for(const r of t)if("string"==typeof W(e,r.split(".")))return W(e,r.split("."))}const q="[REDACTED]",G=/(^|_|-)(token|secret|password|assertion|authorization|verifier|challenge|code)(_|-|$)/i;function V(e){return e.replace(/((?:access_token|refresh_token|id_token|client_secret|authorization|code|password|assertion|token|secret)[^:=\r\n]{0,32}[:=]\s*["']?)([^"',\s&}]+)/gi,`$1${q}`).replace(/(\bBearer\s+)([A-Za-z0-9\-._~+/]+=*)/gi,`$1${q}`)}function J(e,t=256){return e.length>t?`${e.slice(0,Math.max(0,t-3))}...`:e}function K(e,t){return J(V(e),null==t?void 0:t.maxLength)}function Y(e){if("string"==typeof e)return J(V(e));if(void 0!==e)try{const t=JSON.stringify(e,((e,t)=>e&&function(e){const t=e.toLowerCase();return"code"===t||"authorization"===t||t.includes("token")||t.includes("secret")||t.includes("password")||t.includes("assertion")||t.includes("verifier")||t.includes("challenge")||G.test(t)}(e)?q:"string"==typeof t?V(t):t));if(!t)return;return J(t)}catch(e){return}}function Z(e){var t,r,n,o,s;const i=e instanceof Error?e.name:null!=e?typeof e:void 0,a=e instanceof Error?e.message:null!=e?String(e):void 0,l=void 0!==a?K(a):void 0,c=z(e,["code","cause.code"]),u=null!==(t=function(e){if(!e||"object"!=typeof e)return;const t=e.errorCode;return"string"==typeof t?t:void 0}(e))&&void 0!==t?t:z(e,["errorCode","error","cause.errorCode","cause.error","body.error","response.body.error"]),d=null!==(r=function(e){for(const t of["status","statusCode","response.status","response.statusCode","cause.status","cause.statusCode","cause.response.status","cause.response.statusCode"]){const r=W(e,t.split("."));if("number"==typeof r&&Number.isFinite(r))return r}}(e))&&void 0!==r?r:function(e){var t;if(!e)return;const r=e.match(/\(HTTP (\d+)\)|Non-200 status code \((\d+)\)/),n=null!==(t=null==r?void 0:r[1])&&void 0!==t?t:null==r?void 0:r[2];if(!n)return;const o=Number.parseInt(n,10);return Number.isNaN(o)?void 0:o}(l),p=Y(null!==(s=null!==(o=null!==(n=W(e,["response","body"]))&&void 0!==n?n:W(e,["body"]))&&void 0!==o?o:W(e,["data"]))&&void 0!==s?s:W(e,["cause","body"])),h=function(e){var t,r;const n=null===(t=e.message)||void 0===t?void 0:t.toLowerCase(),o=null===(r=e.code)||void 0===r?void 0:r.toLowerCase();return(null==n?void 0:n.includes("timed out"))||(null==n?void 0:n.includes("timeout"))||(null==n?void 0:n.includes("etimedout"))||"etimedout"===o?"timeout":(null==n?void 0:n.includes("enotfound"))||(null==n?void 0:n.includes("eai_again"))||(null==n?void 0:n.includes("dns"))||"enotfound"===o||"eai_again"===o?"dns":(null==n?void 0:n.includes("certificate"))||(null==n?void 0:n.includes("tls"))||(null==n?void 0:n.includes("ssl"))?"tls":(null==n?void 0:n.includes("econnreset"))||(null==n?void 0:n.includes("connection reset"))||"econnreset"===o?"connection_reset":(null==n?void 0:n.includes("econnrefused"))||(null==n?void 0:n.includes("connection refused"))||"econnrefused"===o?"connection_refused":void 0}({message:l,code:c});return j({errorName:i,errorMessage:l,errorType:null!=e?typeof e:void 0,httpStatus:d,oauthErrorCode:u,errorResponseSummary:p,networkClassification:h,sdkErrorKind:u?"oauth_error":h?"auth_transport_error":l?"generic_error":void 0})}const X={mcp_oauth_provider_initialized:"MCP OAuth provider initialized",mcp_oauth_tokens_loaded:"MCP OAuth tokens loaded",mcp_oauth_tokens_saved:"MCP OAuth tokens saved",mcp_oauth_callback_completion:"MCP OAuth callback exchange completed",mcp_oauth_client_info_loaded:"MCP OAuth client information loaded",mcp_oauth_client_info_saved:"MCP OAuth client information saved",mcp_oauth_refresh_prepare:"MCP OAuth refresh prepared",mcp_oauth_refresh_error_release:"MCP OAuth refresh error released",mcp_oauth_state_transition:"MCP OAuth state transition",mcp_oauth_credentials_invalidated:"MCP OAuth credentials invalidated"};function Q(e){var t,r,n,o,s,i,a,l,c,u;const d=null!==(c=e.message)&&void 0!==c?c:X[e.event],p={event:e.event,cursorMcp:{oauth:j(Object.assign({},e.metadata))}},h=null!==(u=e.level)&&void 0!==u?u:"info";"error"!==h?"warn"!==h?"debug"!==h?null===(l=(a=e.logger).info)||void 0===l||l.call(a,d,p):null===(i=(s=e.logger).debug)||void 0===i||i.call(s,d,p):null===(o=(n=e.logger).warn)||void 0===o||o.call(n,d,p):null===(r=(t=e.logger).error)||void 0===r||r.call(t,d,e.error,p)}const ee=4096;function te(e){return"object"==typeof e&&null!==e&&"url"in e&&"string"==typeof e.url}function re(e){return"string"==typeof e?e:e instanceof URL?e.toString():e.url}function ne(e){const t=[];return e.forEach(((e,r)=>{t.push(r)})),t.sort()}function oe(e){if(null===e)return null;const t=Number.parseInt(e,10);return Number.isNaN(t)?null:t}function se(e,t){var r,n,o,s,i;if(null==e)return{kind:"none",bytes:0,contentLength:oe(t.get("content-length"))};if("string"==typeof e){const n=(new TextEncoder).encode(e).length;return{kind:"text",bytes:n,contentLength:null!==(r=oe(t.get("content-length")))&&void 0!==r?r:n}}if(e instanceof URLSearchParams){const r=e.toString(),o=(new TextEncoder).encode(r).length;return{kind:"text",bytes:o,contentLength:null!==(n=oe(t.get("content-length")))&&void 0!==n?n:o}}return e instanceof Blob?{kind:"blob",bytes:e.size,contentLength:null!==(o=oe(t.get("content-length")))&&void 0!==o?o:e.size}:e instanceof ArrayBuffer?{kind:"binary",bytes:e.byteLength,contentLength:null!==(s=oe(t.get("content-length")))&&void 0!==s?s:e.byteLength}:ArrayBuffer.isView(e)?{kind:"binary",bytes:e.byteLength,contentLength:null!==(i=oe(t.get("content-length")))&&void 0!==i?i:e.byteLength}:"object"==typeof e&&null!==e&&("getReader"in e||Symbol.asyncIterator in e)?{kind:"stream",bytes:null,contentLength:oe(t.get("content-length"))}:{kind:"unknown",bytes:null,contentLength:oe(t.get("content-length"))}}function ie(e,t){var r;if(null===e||!e.toLowerCase().startsWith("application/x-www-form-urlencoded"))return;const n="string"==typeof t?function(e){for(const t of e.split("&")){const e=t.indexOf("="),r=e>=0?t.slice(0,e):t;let n;try{n=decodeURIComponent(r.replaceAll("+"," "))}catch(e){return}if("grant_type"!==n)continue;const o=e>=0?t.slice(e+1):"";try{return decodeURIComponent(o.replaceAll("+"," "))}catch(e){return}}}(t):t instanceof URLSearchParams&&null!==(r=t.get("grant_type"))&&void 0!==r?r:void 0;return n?function(e){switch(e){case"authorization_code":case"refresh_token":case"client_credentials":case"urn:ietf:params:oauth:grant-type:jwt-bearer":case"urn:ietf:params:oauth:grant-type:token-exchange":return e;default:return"other"}}(n):void 0}function ae(e){var t,r,n,o;const{input:s,init:i}=e,a=N(re(s)),l=function(e,t){const r=new Headers(te(e)?e.headers:void 0);return new Headers(null==t?void 0:t.headers).forEach(((e,t)=>{r.set(t,e)})),r}(s,i),c=ne(l),u=l.get("content-type"),d=U(null!==(t=l.get("mcp-session-id"))&&void 0!==t?t:void 0),p=l.get("authorization"),h=p&&null!==(r=p.split(/\s+/,1)[0])&&void 0!==r?r:null;return{method:(null!==(o=null!==(n=null==i?void 0:i.method)&&void 0!==n?n:te(s)?s.method:void 0)&&void 0!==o?o:"GET").toUpperCase(),url:a,headers:{names:c,count:c.length},contentType:u,body:se(null==i?void 0:i.body,l),sessionIdHash:null!=d?d:null,authorizationScheme:h}}function le(e,t){var r,n,o,s,i;const a=ne(e.headers),l=oe(e.headers.get("content-length"));return{status:e.status,ok:e.ok,headers:{names:a,count:a.length},contentType:e.headers.get("content-type"),body:Object.assign({kind:null===e.body?"none":"stream",bytes:null===e.body?0:l,contentLength:l},void 0!==t?{errorSummary:t}:{}),sessionIdHash:null!==(n=U(null!==(r=e.headers.get("mcp-session-id"))&&void 0!==r?r:void 0))&&void 0!==n?n:null,wwwAuthenticateHash:null!==(s=U(null!==(o=e.headers.get("www-authenticate"))&&void 0!==o?o:void 0))&&void 0!==s?s:null,mcpProtocolVersion:null!==(i=e.headers.get("mcp-protocol-version"))&&void 0!==i?i:null}}function ce(e){const t={};return void 0!==e.errorName&&(t.name=e.errorName),void 0!==e.errorMessage&&(t.message=e.errorMessage),void 0!==e.errorType&&(t.type=e.errorType),void 0!==e.oauthErrorCode&&(t.oauthErrorCode=e.oauthErrorCode),void 0!==e.errorResponseSummary&&(t.responseSummary=e.errorResponseSummary),void 0!==e.networkClassification&&(t.networkClassification=e.networkClassification),void 0!==e.sdkErrorKind&&(t.sdkErrorKind=e.sdkErrorKind),t}async function ue(e,t){try{const r=await e.clone().text();return r.length>t?r.slice(0,t):r}catch(e){return}}async function de(e){if(!function(e,t){var r,n;const o=ae({input:e,init:t});if(void 0!==ie(o.contentType,null==t?void 0:t.body))return!0;const s=null!==(n=null===(r=o.url.path)||void 0===r?void 0:r.toLowerCase())&&void 0!==n?n:"";return s.endsWith("/token")||s.includes("/oauth/token")||s.includes("/connect/token")}(e.input,e.init))return;const t=await ue(e.response,ee);if(void 0!==t)try{return Y(JSON.parse(t))}catch(e){return K(t,{maxLength:ee})}}async function pe(e){const t=await async function(e,t){var r,n;try{if(t.ok)return;const o=null!==(n=null===(r=t.headers.get("content-type"))||void 0===r?void 0:r.toLowerCase())&&void 0!==n?n:"";if(!o.includes("json")&&!o.includes("text"))return;const s=await ue(t,ee);if(void 0===s)return;return function(e){if("/mcp"!==(t=N(re(e.input)).path)&&!0!==(null==t?void 0:t.endsWith("/mcp")))return K(e.rawText,{maxLength:ee});var t;try{const t=JSON.parse(e.rawText);return"object"==typeof t&&null!==t?function(e){const t=e.error;if("string"==typeof t)return JSON.stringify({error:t});if("object"!=typeof t||null===t)return;const r=t,n="number"==typeof r.code||"string"==typeof r.code?r.code:void 0,o="string"==typeof r.message?K(r.message,{maxLength:ee}):void 0;return void 0!==n||void 0!==o?JSON.stringify(Object.assign(Object.assign({},void 0!==n?{code:n}:{}),void 0!==o?{message:o}:{})):void 0}(t):void 0}catch(e){return}}({input:e,rawText:s})}catch(e){return}}(e.input,e.response);return{responseErrorSummary:t,oauthTokenErrorBodySummary:void 0===t?await de({input:e.input,response:e.response,init:e.init}):void 0}}function he(e,t,r){var n;try{e()}catch(e){null===(n=t.warn)||void 0===n||n.call(t,"MCP HTTP exchange logging failed",{event:"mcp_http_exchange_logging_failure",phase:r})}}function me(e){const{fetch:t,logger:r,metadata:n,logSuccessfulExchanges:o=!0}=e;return async(e,s)=>{const i=Date.now();try{const a=await t(e,s),{responseErrorSummary:l,oauthTokenErrorBodySummary:c}=a.ok?{}:await pe({input:e,init:s,response:a});return!o&&a.ok||he((()=>{!function(e){var t,r;const{logger:n,response:o}=e,s=function(e){const{input:t,init:r,response:n,durationMs:o,metadata:s,responseErrorSummary:i,oauthTokenErrorBodySummary:a}=e,l=ae({input:t,init:r}),c=ie(l.contentType,null==r?void 0:r.body);return{event:"mcp_http_exchange",outcome:n.ok?"success":"http_error",durationMs:o,cursorMcp:{transport:Object.assign(Object.assign(Object.assign(Object.assign({},s),{request:l,response:le(n,i)}),void 0!==c?{oauth:{grantType:c}}:{}),void 0!==a?{oauthTokenErrorBodySummary:a}:{})}}}(e);o.ok?null===(t=n.info)||void 0===t||t.call(n,"MCP HTTP exchange completed",s):null===(r=n.warn)||void 0===r||r.call(n,"MCP HTTP exchange completed",s)}({logger:r,input:e,init:s,response:a,durationMs:Date.now()-i,metadata:n,responseErrorSummary:l,oauthTokenErrorBodySummary:c})}),r,"success"),a}catch(t){const o=function(e){var t,r;if(!e||"object"!=typeof e)return;const n=[e.response,null===(t=e.cause)||void 0===t?void 0:t.response];for(const e of n)if(e&&"object"==typeof e&&"status"in e&&"number"==typeof e.status&&"headers"in e&&"function"==typeof(null===(r=e.headers)||void 0===r?void 0:r.get))return e}(t),{responseErrorSummary:a,oauthTokenErrorBodySummary:l}=o?await pe({input:e,init:s,response:o}):{};throw he((()=>{!function(e){var t;const{logger:r}=e;null===(t=r.warn)||void 0===t||t.call(r,"MCP HTTP exchange failed",function(e){var t;const{input:r,init:n,error:o,durationMs:s,metadata:i,responseFromError:a,responseErrorSummary:l,oauthTokenErrorBodySummary:c}=e,u=Z(o),d=ae({input:r,init:n}),p=ie(d.contentType,null==n?void 0:n.body),h=void 0!==a?le(a,l):{status:null!==(t=u.httpStatus)&&void 0!==t?t:null,ok:null,headers:{names:[],count:0},contentType:null,body:Object.assign({kind:"none",bytes:null,contentLength:null},void 0!==l?{errorSummary:l}:{}),sessionIdHash:null,wwwAuthenticateHash:null,mcpProtocolVersion:null};return{event:"mcp_http_exchange",outcome:"error",durationMs:s,cursorMcp:{transport:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},i),{request:d,response:h}),void 0!==p?{oauth:{grantType:p}}:{}),void 0!==c?{oauthTokenErrorBodySummary:c}:{}),{error:ce(u)})}}}(e))}({logger:r,input:e,init:s,error:t,durationMs:Date.now()-i,metadata:n,responseFromError:o,responseErrorSummary:a,oauthTokenErrorBodySummary:l})}),r,"failure"),t}}}async function fe(e,t){const{resolveSandboxPolicyForWorkspace:n}=await Promise.resolve().then(r.bind(r,"../shell-exec/dist/index.js")),o=I(e),s=function(e){var t;return(null!==(t=e.mcpNetworkAllowlist)&&void 0!==t?t:[]).some((e=>e.trim().length>0))}(e),i={type:"workspace_readwrite",sandboxWorkspaceRoot:t,networkPolicy:s?o.length>0?{version:1,default:"deny",allow:o}:{version:1,default:"deny"}:{version:1,default:"deny",allow:["*"]},networkPolicyStrict:!0},{policy:a}=await n(t,{perUser:i});return a}function ge(e){const t=!0===e.enabled,r=t&&!function(e){var t;return(null!==(t=e.mcpNetworkAllowlist)&&void 0!==t?t:[]).some((e=>e.trim().length>0))}(e)?["*"]:I(e);return JSON.stringify({enabled:t,allow:r})}new Set(["InvalidGrantError","InvalidRequestError"]),new Set(["SiblingAlreadyRefreshedError","OAuthRefreshTransientError","AbortError","TimeoutError","ServerError","TemporarilyUnavailableError"]);class ve extends Error{serverName;constructor(e,t){super(`MCP server "${e}" requires sandboxing because MCP Network Controls are enabled, but the sandbox is not supported on this platform or system. The server was not started.`),this.serverName=e,this.name="McpSandboxUnavailableError",void 0!==t&&(this.cause=t)}}function ye(e){const t=function(e){if(!e||"object"!=typeof e)return;const t=e.code;if("number"==typeof t&&t>=100&&t<=599)return t;if("string"==typeof t&&/^\d{3}$/.test(t)&&Number(t)>=100&&Number(t)<=599)return Number(t);const r=e instanceof Error||"string"==typeof e.message?e.message:void 0;if(!r)return;const n=r.match(/\bHTTP\s+(\d{3})\b/i);if(!(null==n?void 0:n[1]))return;const o=Number.parseInt(n[1],10);return Number.isNaN(o)?void 0:o}(e);return void 0!==t?400===t||404===t||405===t:!!(e instanceof Error&&e.message.toLowerCase().includes("sessionid must be provided"))||function(e){var t;if(!(e instanceof Error))return!1;const r=e,n=null===(t=e.cause)||void 0===t?void 0:t.code;return"ECONNREFUSED"===r.code||"ECONNREFUSED"===n||e.message.includes("ECONNREFUSED")}(e)}new Map,new Set,new Set(["connection_attempt"]),new Set(["health_probe"]),r("../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.25.1_patch_hash=09ddafc9053ad92a2da409aa9fafaaf83fd21f6a2f2_a311751907fe46e96a8ec737cd50c013/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js"),r("../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.25.1_patch_hash=09ddafc9053ad92a2da409aa9fafaaf83fd21f6a2f2_a311751907fe46e96a8ec737cd50c013/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/errors.js"),Error,r("../constants/dist/index.js"),new Set(["EAI_AGAIN","ECONNABORTED","ECONNREFUSED","ECONNRESET","EHOSTUNREACH","ENETDOWN","ENETUNREACH","ENOTFOUND","EPIPE","ETIMEDOUT","EADDRNOTAVAIL","UND_ERR_CONNECT_TIMEOUT"]),new Set(["ECONNRESET","EPIPE"]),new Set([429,502,503,504]),new Set(["ENOENT","EACCES","ENOTDIR","EPERM"]),new Set(["invalid_grant","invalid_token","invalid_client","unauthorized_client"]),Error},"../shell-exec/dist/index.js"(e,t,r){r.d(t,{BM:()=>wt,Ls:()=>lt,SandboxUnsupportedError:()=>se,J:()=>u,St:()=>ae,Fn:()=>yt,oG:()=>Ge,Ko:()=>m,CG:()=>Ee,G6:()=>vt,_B:()=>L,OK:()=>j,$b:()=>F,Nl:()=>ut,K3:()=>ue,tv:()=>ht,fZ:()=>Pe,s9:()=>Ce,T6:()=>B,Po:()=>U,$6:()=>pt,l7:()=>mt,Qd:()=>c,resolveSandboxPolicyForWorkspace:()=>Ie,spawnInSandbox:()=>le});var n=r("node:path"),o=r("../utils/dist/index.js"),s=r("node:fs/promises"),i=r("node:os"),a=r("../context/dist/index.js");let l;function c(){const e=(0,o.Ef)("rg",[]).cmd;return"rg"!==e?e:void 0}function u(e){if(!e)throw new Error("configureRipgrepPath: path must not be empty");l=e}function d(e){const t=Object.keys(e).filter((e=>"path"===e.toLowerCase()));if(0!==t.length)return"win32"===process.platform?t.find((e=>"Path"===e))??t[0]:t.find((e=>"PATH"===e))??t[0]}function p(e,t){const r=(0,n.dirname)(t);if(!r||"."===r)return e;const o=function(e){const t=d(e);return void 0!==t?e[t]??"":""}(e).split(n.delimiter).filter(Boolean);return function(e,t){const r=d(e)??("win32"===process.platform?"Path":"PATH"),n={...e};for(const e of Object.keys(n))e!==r&&"path"===e.toLowerCase()&&delete n[e];return n[r]=t,n}(e,[r,...o.filter((e=>e!==r))].join(n.delimiter))}function h(e){return l&&(0,n.isAbsolute)(l)?{...p(e,l),CURSOR_RIPGREP_PATH:l}:e}function m(){if(!l)throw new Error("Ripgrep path not configured. Call configureRipgrepPath() at startup.");return l}var f=r("node:child_process"),g=r("node:fs");function v(e){const t=e||process.env,{ELECTRON_RUN_AS_NODE:r,...n}=t;return n}const y=["SSH_AUTH_SOCK","DBUS_SESSION_BUS_ADDRESS","XDG_RUNTIME_DIR","WAYLAND_DISPLAY"];function w(e){const t={...e};for(const e of y)delete t[e];return t}var b=r("node:crypto");let S;function k(){const e=(0,n.join)((0,i.tmpdir)(),"cursor-sandbox-cache",(S||(S=(0,b.randomBytes)(16).toString("hex")),S));return{NPM_CONFIG_CACHE:(0,n.join)(e,"npm"),PNPM_STORE_PATH:(0,n.join)(e,"pnpm-store"),GOCACHE:(0,n.join)(e,"go-build"),GOMODCACHE:(0,n.join)(e,"go-mod"),CARGO_TARGET_DIR:(0,n.join)(e,"cargo-target"),PIP_CACHE_DIR:(0,n.join)(e,"pip"),UV_CACHE_DIR:(0,n.join)(e,"uv"),BUN_INSTALL_CACHE_DIR:(0,n.join)(e,"bun"),YARN_CACHE_FOLDER:(0,n.join)(e,"yarn"),npm_config_devdir:(0,n.join)(e,"node-gyp"),PLAYWRIGHT_BROWSERS_PATH:(0,n.join)(e,"playwright"),PUPPETEER_CACHE_DIR:(0,n.join)(e,"puppeteer"),TURBO_CACHE_DIR:(0,n.join)(e,"turbo"),GRADLE_USER_HOME:(0,n.join)(e,"gradle"),CONDA_PKGS_DIRS:(0,n.join)(e,"conda"),POETRY_CACHE_DIR:(0,n.join)(e,"poetry"),GEM_SPEC_CACHE:(0,n.join)(e,"gem-specs"),BUNDLE_PATH:(0,n.join)(e,"bundle"),COMPOSER_HOME:(0,n.join)(e,"composer"),HOMEBREW_CACHE:(0,n.join)(e,"homebrew"),CYPRESS_CACHE_FOLDER:(0,n.join)(e,"cypress"),NX_CACHE_DIRECTORY:(0,n.join)(e,"nx"),NUGET_PACKAGES:(0,n.join)(e,"nuget"),CCACHE_DIR:(0,n.join)(e,"ccache"),CP_HOME_DIR:(0,n.join)(e,"cocoapods")}}var E=r("../../node_modules/.pnpm/ignore@7.0.5/node_modules/ignore/index.js");const x=[{type:"workspace",pattern:"**/.cursor/*.json"},{type:"workspace",pattern:"**/.cursor/**/*.json"},{type:"workspace",pattern:"**/.cursor/.workspace-trusted"},{type:"workspace",pattern:"!**/.cursor/rules"},{type:"workspace",pattern:"!**/.cursor/rules/**"},{type:"workspace",pattern:"!**/.cursor/commands"},{type:"workspace",pattern:"!**/.cursor/commands/**"},{type:"workspace",pattern:"!**/.cursor/worktrees"},{type:"workspace",pattern:"!**/.cursor/worktrees/**"},{type:"workspace",pattern:"!**/.cursor/skills"},{type:"workspace",pattern:"!**/.cursor/skills/**"},{type:"workspace",pattern:"!**/.cursor/agents"},{type:"workspace",pattern:"!**/.cursor/agents/**"},{type:"workspace",pattern:"**/.claude/*.json"},{type:"workspace",pattern:"**/.claude/**/*.json"},{type:"workspace",pattern:"**/.vscode/**"},{type:"workspace",pattern:"**/*.code-workspace"},{type:"workspace",pattern:"**/.cursorignore"},{type:"workspace",pattern:"**/.workspace-trusted"},{type:"workspace",pattern:"**/.cursor/**/cli.json"},{type:"workspace",pattern:"**/.cursor/**/cli-config.json"},{type:"workspace",pattern:"**/.cursor/**/mcp.json"},{type:"workspace",pattern:"**/.cursor/**/mcp-approvals.json"},{type:"workspace",pattern:"**/.cursor/**/permissions.json"},{type:"git",pattern:"**/.git/hooks/**"},{type:"git",pattern:"**/.git/config"},{type:"git",pattern:"**/.git/config.worktree"},{type:"git",pattern:"**/.git/info/attributes"},{type:"worktree",pattern:".git"},{type:"absolute",pattern:"/etc/ssl/cert.pem"},{type:"absolute",pattern:"/etc/ssl/ca-bundle.pem"},{type:"absolute",pattern:"/private/etc/ssl/cert.pem"},{type:"absolute",pattern:"/etc/ssl/certs/ca-certificates.crt"},{type:"absolute",pattern:"/etc/pki/tls/certs/ca-bundle.crt"},{type:"absolute",pattern:"/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem"},{type:"home",pattern:".ssh"}];function C(e){const t=x.filter((e=>"workspace"===e.type)).map((e=>e.pattern));return{[e]:t}}function _(e){const t=x.filter((e=>"worktree"===e.type)).map((e=>e.pattern));return{[e]:t}}x.filter((e=>"git"===e.type)).map((e=>e.pattern)),x.filter((e=>"workspace"===e.type&&e.pattern.startsWith("!")&&!e.pattern.endsWith("/**"))).map((e=>e.pattern.replace(/^!(\*\*\/)?/,"")));const P=[];let R=null,T=null;let I=null;const A=new Map;const O="win32"===process.platform||"darwin"===process.platform;function D(e,t){const r=t.endsWith(n.sep)?t.slice(0,-1):t;if(O){const t=e.toLowerCase(),o=r.toLowerCase();return t===o||t.startsWith(o+n.sep)}return e===r||e.startsWith(r+n.sep)}function M(e,t){const r=e.endsWith(n.sep)?e.slice(0,-1):e;return O?(0,n.relative)(r.toLowerCase(),t.toLowerCase()).replace(/\\/g,"/"):(0,n.relative)(r,t).replace(/\\/g,"/")}async function j(e,t){if(D(e,t)){const r=M(t,e);if((null===R&&(R=E({ignoreCase:!0}),R.add(x.filter((e=>"workspace"===e.type)).map((e=>e.pattern)))),R).ignores(r))return!0}const{isWorktree:r,gitDirParent:a}=await async function(e){const t=A.get(e);if(t)return t;const r=await(0,s.stat)((0,n.join)(e,".git")).catch((()=>null));if(!r?.isFile()){const t={isWorktree:!1,gitDirParent:e};return A.set(e,t),t}const i=await async function(e){try{const t=await(0,o.DP)("git",["rev-parse","--git-common-dir"],{cwd:e});return(0,n.dirname)((0,n.resolve)(e,t.trim()))}catch{return null}}(e),a={isWorktree:!0,gitDirParent:i??e};return A.set(e,a),a}(t);if(D(e,a)){const t=M(a,e);if((null===T&&(T=E({ignoreCase:!0}),T.add(x.filter((e=>"git"===e.type)).map((e=>e.pattern)))),T).ignores(t))return!0}if(r&&D(e,t)&&".git"===M(t,e))return!0;for(const t of function(){if(null!==I)return I;const e=i.homedir(),t=[];for(const r of x)switch(r.type){case"absolute":t.push(r.pattern);break;case"home":e.length>0&&t.push((0,n.join)(e,r.pattern))}return I=t,t}())if(D(e,t))return!0;return!1}const N=new WeakMap;function $(e,t,r){return e===t?"related":r?.has(e)?"probably_unrelated":"maybe_related"}function F(e){return void 0!==e&&("allow"===e.default||void 0!==e.allow&&e.allow.length>0)}function L(e){return void 0!==e&&"allow"===e.default}function U(){return{version:1,default:"deny"}}function B(){return{version:1,default:"allow"}}const H="darwin"===process.platform,W="linux"===process.platform,z=(0,a.h)("shell-exec:sandbox");function q(e){const t=b.randomBytes(8).toString("hex"),r=n.join(i.tmpdir(),`sandbox-policy-${t}`);return g.writeFileSync(r,e,{encoding:"utf-8",mode:384}),r}let G;function V(){return G}function J(e){"linux"===process.platform&&Object.assign(e,h(e))}let K=null,Y=null,Z=null,X=null;function Q(e){if(null!==K)return!!K;try{const t=V();return z.info(e,`[checkBinaryAvailable] Resolved binary path: ${t}`),t?(K=g.existsSync(t),K?z.info(e,`[checkBinaryAvailable] Binary path exists: ${K}`):(Y=new Error(`Sandbox binary not found at ${t}`),z.info(e,`[checkBinaryAvailable] Binary not found at: ${t}`)),!!K):(Y=new Error("Sandbox binary path was not configured"),K=!1,z.info(e,"[checkBinaryAvailable] Binary path not set, returning false"),!1)}catch(t){return Y=t,K=!1,z.info(e,`[checkBinaryAvailable] Exception checking binary: ${t}`),!1}}function ee(e){if(null!==X)return X;const t=e??(0,a.q6)();if(z.info(t,"[isSandboxHelperSupported] Starting sandbox support check..."),!Q(t)){const e=Y?.message||"Binary check failed";return Z=e,z.info(t,`[isSandboxHelperSupported] Binary not available, returning false. Reason: ${e}`),X=!1,X}if("win32"===process.platform)return Z="Windows sandbox helper only provides network proxy, not filesystem isolation",z.info(t,"[isSandboxHelperSupported] win32: returning false (proxy-only, no filesystem sandbox)"),X=!1,X;if("darwin"===process.platform)return Z=null,z.info(t,`[isSandboxHelperSupported] ${process.platform} platform, binary available, sandbox supported!`),X=!0,X;try{const e=process.cwd(),r={sandbox:{type:"workspace_readwrite",cwd:e,additionalReadwritePaths:[],networkAccess:!1,disableTmpWrite:!1,ignoreMapping:void 0}},n=String(V());z.info(t,`[isSandboxHelperSupported] Running preflight with binary: ${n}`),z.info(t,`[isSandboxHelperSupported] CWD: ${e}`);const o={...process.env};J(o);const s=q(JSON.stringify(r));return(0,f.execFileSync)(n,["--policy",s,"--preflight-only","--","/bin/true"],{stdio:["ignore","ignore","pipe"],timeout:15e3,env:o,shell:!1}),Z=null,z.info(t,"[isSandboxHelperSupported] Preflight succeeded, sandbox supported!"),X=!0,X}catch(e){const r=e,n=r.stderr?.toString?.()||"";return z.error(t,`[isSandboxHelperSupported] Preflight failed: ${r.message}`),z.error(t,`[isSandboxHelperSupported] Exit status: ${r?.status}`),n&&z.error(t,`[isSandboxHelperSupported] Stderr: ${n}`),"number"==typeof r?.status&&2===r.status?(Z=`Linux preflight failed with exit code 2 (unsupported kernel features). stderr: ${n||"none"}`,X=!1,X):(Z=`Linux preflight failed: ${r.message||"unknown error"}. Exit status: ${r?.status}. stderr: ${n||"none"}`,X=!1,X)}}function te(e,t=[],r={},o){const s=(0,a.q6)();if(r.env=v(r.env),!Q(s))throw new Error(`Sandbox binary not available: ${Y?.message||"binary not configured"}. Please build the binary or use 'insecure_none' policy.`);if("insecure_none"===o.type)return(0,f.spawn)(e,t,r);if("workspace_readwrite"===o.type||"workspace_readonly"===o.type)return function(e,t,r,o){if("workspace_readwrite"!==o.type&&"workspace_readonly"!==o.type)throw new Error("Expected workspace_readwrite or workspace_readonly policy");const s=String(r.cwd??process.cwd()),i=o.sandboxWorkspaceRoot??s;let a,l=e,c=t;r.shell&&("win32"===process.platform?(l="string"==typeof r.shell?r.shell:"cmd.exe",c=["/c",`${e} ${t.join(" ")}`]):(l="string"==typeof r.shell?r.shell:"/bin/sh",c=["-c",`${e} ${t.join(" ")}`])),o.ignoreMapping&&(a=re(o.ignoreMapping));const u=function(e,t,r){const o=e&&e.length>0?function(...e){const t={};for(const r of e){let e=!1;try{e=(0,g.existsSync)(r)&&(0,g.statSync)(r).isDirectory()}catch{}if(e)t[r]||(t[r]=[]),t[r].push("**");else{const e=r.lastIndexOf("/"),n=e>0?r.slice(0,e):"/",o=e>=0?r.slice(e+1):r;t[n]||(t[n]=[]),o?t[n].push(o,`${o}/**`):t[n].push("**")}}return t}(...e):{},s=function(e){let t=n.resolve(e);for(;;){try{const e=n.join(t,".git");if(g.existsSync(e))return!0}catch{}const e=n.dirname(t);if(e===t)return!1;t=e}}(r),i=!W||s?t??{}:{},a={...o};for(const[e,t]of Object.entries(i))a[e]?a[e]=[...a[e],...t]:a[e]=t;if(0!==Object.keys(a).length)return re(a)}(o.additionalReadonlyPaths,o.writeProtectionMapping,i),d=F(o.networkPolicy),p="workspace_readonly"===o.type?{type:"workspace_readonly",cwd:i,additionalReadonlyPaths:u,networkAccess:d,ignoreMapping:a}:{type:"workspace_readwrite",cwd:i,additionalReadwritePaths:o.additionalReadwritePaths||[],additionalReadonlyPaths:u,networkAccess:d,disableTmpWrite:o.disableTmpWrite||!1,ignoreMapping:a},h=function(e){if("insecure_none"===e.type)return;const t=e.networkPolicy;if(void 0===t)return;if(!F(t))return;const r=void 0!==t.deny&&t.deny.length>0;return"allow"!==t.default||r?{version:1,...t}:void 0}(o),m={sandbox:p};void 0!==h&&(m.networkPolicy=h),!1===o.networkPolicyStrict&&(m.networkPolicyStrict=!1);const v=["--policy",q(JSON.stringify(m)),"--",l,...c],y={..."linux"===process.platform?w(process.env):process.env,..."linux"===process.platform&&r.env?w(r.env):r.env,CURSOR_SANDBOX:"native"};J(y);const b={cwd:r.cwd||s,env:y,stdio:r.stdio||["pipe","pipe","pipe"]};try{const e=new Date,t=(0,f.spawn)(String(V()),v,b);return H&&t.pid&&function(e,t){N.set(e,t)}(t,{startTime:e,pid:t.pid}),t}catch(e){throw new Error(`Failed to spawn sandboxed process: ${e}`)}}(e,t,r,o);throw new Error(`Unsupported sandbox policy: ${String(o)}`)}function re(e,t,r,n){const o={};for(const[t,r]of Object.entries(e)){const e=t.startsWith("file://")?ne(t):t;o[e]=r;const n=oe(e);n!==e&&(o[n]=r)}return o}function ne(e){let t=e.replace(/^file:\/\//,"");return t=decodeURIComponent(t),t.length>1&&t.endsWith("/")&&(t=t.slice(0,-1)),t}function oe(e){try{return(0,g.realpathSync)(e)}catch{return e}}class se extends Error{reason;constructor(e,t){super(e),this.reason=t,this.name="SandboxUnsupportedError"}}const ie="darwin"===process.platform;function ae(e){!function(e){m();const{sandboxBinaryPath:t}=e;G||(G=t)}(e)}function le(e,t=[],r={},n){if(r.env=v(r.env),n.enableSharedBuildCache&&(r={...r,env:{...v(process.env),...k(),...r.env}}),"insecure_none"!==n.type){if(ee())return te(e,t,r,n);const o=Z;throw new se(`Sandbox policy '${n.type}' is not supported on this system. Ensure the sandbox helper binary is available, or use 'insecure_none'. Reason: ${o||"unknown"}`,o??void 0)}return function(e,t,r){return(0,f.spawn)(e,t,r)}(e,t,r)}function ce(e){return ie?async function(e){const t=N.get(e);return t?(r=t.pid,n=t.startTime,o=t.unrelatedPids,new Promise((e=>{try{const t=new Date,s=["show","--style","ndjson","--predicate",'process=="kernel" AND eventMessage CONTAINS "Sandbox:" AND eventMessage contains "deny"',"--last",Math.ceil((t.getTime()-n.getTime())/1e3).toString()];(0,f.execFile)("/usr/bin/log",s,((t,n,s)=>{if(t)return void e([{raw:t.message}]);const i=n.split(/\r?\n/).filter((e=>e.trim().length>0)),a=[];for(const e of i)try{const t=JSON.parse(e),n=t?.eventMessage??"";if(!n||"string"!=typeof n)continue;const s=/^Sandbox:\s+([^(]+)\((\d+)\)\s+([a-zA-Z-]+)\((\d+)\)\s+([^\s]+)\s+(.+)$/.exec(n);if(s){const[,e,i,l,c,u,d]=s,p=Number(i);a.push({timestamp:t.timestamp,processName:e.trim(),pid:p,decision:l.toLowerCase(),decisionCode:Number(c),operation:u,target:d,duplicateCount:1,raw:n,relationship:$(p,r,o)});continue}const i=/^(\d+) duplicate report for Sandbox: (.+)$/.exec(n);if(i){const e=Number(i[1]),s=i[2],l=/^([^(]+)\((\d+)\)\s+([a-zA-Z-]+)\((\d+)\)\s+([^\s]+)\s+(.+)$/.exec(s);if(l){const[,s,i,c,u,d,p]=l,h=Number(i);a.push({timestamp:t.timestamp,processName:s.trim(),pid:h,decision:c.toLowerCase(),decisionCode:Number(u),operation:d,target:p,duplicateCount:e,raw:n,relationship:$(h,r,o)})}else a.push({timestamp:t.timestamp,duplicateCount:e,raw:n});continue}a.push({timestamp:t.timestamp,raw:n})}catch{}e(a)}))}catch(t){e([{raw:String(t)}])}}))):(console.log("No sandbox metadata found on child process"),[]);var r,n,o}(e):Promise.resolve([])}function ue(e,t){if(ie)try{(0,g.accessSync)("/usr/bin/sandbox-exec",g.constants.X_OK)}catch{return!1}return ee(t?.ctx)}var de;!function(e){e.Zsh="zsh",e.ZshLight="zsh-light",e.Bash="bash",e.PowerShell="powershell",e.Naive="naive"}(de||(de={}));const pe={TERM:"dumb",NO_COLOR:"1",FORCE_COLOR:"0",_ZO_DOCTOR:"0"};function he(e,t=[],r={},n,o){if(o?.aborted){const e=new Error("Operation was aborted");e.name="AbortError";const t=new(require("node:events").EventEmitter);return process.nextTick((()=>{t.emit("error",e)})),t}const s=le(e,t,{...r,env:h(r.env??process.env)},n);if(o){const e=()=>{if(s.pid)try{if(r.detached)try{process.kill(-s.pid,"SIGTERM")}catch{s.kill("SIGTERM")}else s.kill("SIGTERM");const e=setTimeout((()=>{if(!s.killed&&s.pid)try{if(r.detached)try{process.kill(-s.pid,"SIGKILL")}catch{s.kill("SIGKILL")}else s.kill("SIGKILL")}catch(e){}}),1e3);s.once("exit",(()=>{clearTimeout(e)}))}catch(e){}};o.addEventListener("abort",e,{once:!0}),s.once("exit",(()=>{o.removeEventListener("abort",e)}))}return s}function me(e){const t=e.indexOf("\n");return{cwd:e.substring(0,t),rest:e.substring(t)}}function fe(e,t){const r=`${t}\n`,n=e.indexOf(r);return n>=0?e.slice(n+r.length):e}const ge="__CURSOR_BASH_STATE_START__",ve="__CURSOR_BASH_STATE_END__",ye=50,we=262144;class be{writable;pending=[];pendingBytes=0;flushTimeout;flushPromise;flushIntervalMs;maxBufferedBytes;constructor(e,t){this.writable=e,this.flushIntervalMs=t?.flushIntervalMs??ye,this.maxBufferedBytes=t?.maxBufferedBytes??we}async push(e,t){0!==t.length&&(this.pending.push({type:e,data:t}),this.pendingBytes+=t.length,this.pendingBytes>=this.maxBufferedBytes?await this.flush():this.scheduleFlush())}async flush(){if(this.clearFlushTimeout(),this.flushPromise)return await this.flushPromise,void(this.pendingBytes>0&&await this.flush());if(0===this.pendingBytes)return;const e=this.pending;this.pending=[],this.pendingBytes=0,this.flushPromise=this.writeBufferedOutput(e);try{await this.flushPromise}finally{this.flushPromise=void 0}}async close(){await this.flush()}scheduleFlush(){void 0===this.flushTimeout&&(this.flushTimeout=setTimeout((()=>{this.flushTimeout=void 0,this.flush()}),this.flushIntervalMs))}clearFlushTimeout(){void 0!==this.flushTimeout&&(clearTimeout(this.flushTimeout),this.flushTimeout=void 0)}async writeBufferedOutput(e){for(const t of function(e){if(0===e.length)return[];const t=[];let r=e[0].type,n=[e[0].data];for(let o=1;o<e.length;o++){const s=e[o];s.type!==r?(t.push({type:r,data:Buffer.concat(n)}),r=s.type,n=[s.data]):n.push(s.data)}return t.push({type:r,data:Buffer.concat(n)}),t}(e))try{await this.writable.write(t)}catch{}}}function Se(e){if(!e.bufferOutputEvents){const t=(t,r)=>{e.writable.write({type:t,data:r}).catch((()=>{}))};return e.stdout?.on("data",(e=>{t("stdout",e)})),e.stderr?.on("data",(e=>{t("stderr",e)})),{async waitForOutput(){},async flush(){}}}const t=new be(e.writable,e.outputLimiterOptions);let r;const n=Promise.all([ke(e.stdout,"stdout",t),ke(e.stderr,"stderr",t)]).then((()=>{})).catch((e=>{r=e}));return{async waitForOutput(){if(await n,void 0!==r)throw(e=r)instanceof Error?e:new Error(String(e));var e},async flush(){await t.flush()}}}async function ke(e,t,r){if(e)for await(const n of e)await r.push(t,n)}function Ee(e){return e.teamAdmin?.type??e.perRepo?.type??e.perUser?.type??"insecure_none"}function xe(...e){return e.some((e=>!0===e))}function Ce(...e){const t=new Set;for(const r of e)if(r)for(const e of r)t.add(_e(e));return[...t]}function _e(e){const t=e.replace(/\\/g,"/").replace(/\/+$/,"");return""===t?"/":/^[a-zA-Z]:$/.test(t)?`${t}/`:t}function Pe(...e){const t=e.filter((e=>void 0!==e));if(0===t.length)return;let r;for(const e of t){if("deny"===e.default){r="deny";break}"allow"===e.default&&void 0===r&&(r="allow")}const n=new Set;for(const e of t)if(e.deny)for(const t of e.deny)n.add(t);const o=new Set;for(const e of t)if(e.allow)for(const t of e.allow)o.add(t);const s=o.size>0?[...o]:void 0;let i;for(let e=t.length-1;e>=0;e--)if(void 0!==t[e].logging){i=t[e].logging;break}const a={version:1};return void 0!==r&&(a.default=r),void 0!==s&&(a.allow=s),n.size>0&&(a.deny=[...n]),void 0!==i&&(a.logging=i),void 0!==a.default||void 0!==a.allow&&0!==a.allow.length||void 0!==a.deny&&0!==a.deny.length||void 0!==a.logging?a:void 0}function Re(...e){const t=e.filter((e=>void 0!==e));if(0===t.length)return;const r={};for(const e of t)for(const[t,n]of Object.entries(e)){const e=r[t];if(e){const o=new Set(e);for(const e of n)o.has(e)&&o.delete(e),o.add(e);r[t]=[...o]}else r[t]=[...n]}return 0!==Object.keys(r).length?r:void 0}function Te(...e){for(let t=e.length-1;t>=0;t--)if(void 0!==e[t])return e[t]}async function Ie(e,t){if(!t)return{policy:{type:"insecure_none"}};const r=await(0,s.stat)((0,n.join)(e,".git")).then((e=>e),(()=>null)),i=r?.isFile()??!1,a=null!==r;if("workspace_readwrite"===Ee(t)){let r=e;if(i){const s=await(0,o.DP)("git",["rev-parse","--git-common-dir"],{cwd:e}).then((t=>(0,n.resolve)(e,t.trim())),(()=>null));if(s){r=(0,n.dirname)(s);const o=t.perRepo,i=o?.ignoreMapping;t={...t,perRepo:{...o,type:"workspace_readwrite",additionalReadwritePaths:[...o?.additionalReadwritePaths??[],s],ignoreMapping:i,writeProtectionMapping:Re(o?.writeProtectionMapping,_(e))}}}}if(a)return Ae(t,{workspaceDir:e,gitDirParent:r})}return Ae(t,{workspaceDir:e})}function Ae(e,t){const r=function(e){const{perUser:t,perRepo:r,teamAdmin:n}=e,o=[t,r,n].filter((e=>void 0!==e));if(0===o.length)return;const s=o[0].type;for(const e of o)if(e.type!==s)throw new Error(`Cannot merge policies of different types: found "${s}" and "${e.type}". All policies must be of the same type (all workspace_readwrite, all workspace_readonly, or all insecure_none).`);return s}(e);if(void 0===r)return Me(e,t);switch(r){case"workspace_readwrite":return Me(e,t);case"workspace_readonly":return function(e,t){const r=t?.debug,n=Oe(e,t),o={policy:De({type:"workspace_readonly",disableTmpWrite:n.disableTmpWrite,networkPolicyStrict:n.networkPolicyStrict,additionalReadonlyPaths:n.additionalReadonlyPaths,networkPolicy:n.networkPolicy,debugOutputDir:n.debugOutputDir,captureDenies:n.captureDenies,enableSharedBuildCache:n.enableSharedBuildCache,ignoreMapping:n.ignoreMapping,writeProtectionMapping:n.writeProtectionMapping},"workspace_readonly")};return r&&(o.debug={fieldSources:n.fieldSources}),o}(e,t);case"insecure_none":return function(e,t){const{perUser:r,perRepo:n,teamAdmin:o}=e,s=t?.debug,i={type:"insecure_none",allowlistEscalated:xe(r?.allowlistEscalated,n?.allowlistEscalated,o?.allowlistEscalated)||void 0,debugOutputDir:Te(r?.debugOutputDir,n?.debugOutputDir,o?.debugOutputDir),captureDenies:xe(r?.captureDenies,n?.captureDenies,o?.captureDenies)||void 0,enableSharedBuildCache:Te(r?.enableSharedBuildCache,n?.enableSharedBuildCache,o?.enableSharedBuildCache)},a=Object.fromEntries(Object.entries(i).filter((([e,t])=>void 0!==t)));a.type="insecure_none";const l={policy:a};return s&&(l.debug={fieldSources:{}}),l}(e,t);default:throw new Error(`Unknown policy type: ${r}`)}}function Oe(e,t){const r=t?.debug,{perUser:o,perRepo:s,teamAdmin:a}=e,l=t?.workspaceDir??process.cwd(),c=function(e){const t=function(){if(0!==P.length)return{version:1,deny:[...P]}}(),r=i.homedir(),o=[];for(const e of x)switch(e.type){case"workspace":case"git":case"worktree":break;case"absolute":o.push(e.pattern);break;case"home":r.length>0&&o.push((0,n.join)(r,e.pattern));break;default:{const t=e.type;throw new Error(`Unknown entry type: ${t}`)}}return{type:"workspace_readwrite",additionalReadonlyPaths:o,writeProtectionMapping:C(e),...t&&{networkPolicy:t},networkPolicyStrict:!0}}(l),u={},d=[o,s,a],p=["perUser","perRepo","teamAdmin","hardcoded"],h=(e,t)=>{r&&(u[e]=p[t]??"unknown")},m=xe(o?.disableTmpWrite,s?.disableTmpWrite,a?.disableTmpWrite);for(let e=d.length-1;e>=0;e--)if(!0===d[e]?.disableTmpWrite){h("disableTmpWrite",e);break}const f=xe(o?.networkPolicyStrict,s?.networkPolicyStrict,a?.networkPolicyStrict,c.networkPolicyStrict);c.networkPolicyStrict&&h("networkPolicyStrict",3);const g=Ce(o?.additionalReadonlyPaths,s?.additionalReadonlyPaths,a?.additionalReadonlyPaths,c.additionalReadonlyPaths),v=g.length>0?g:void 0;let y=Pe(o?.networkPolicy,s?.networkPolicy,a?.networkPolicy,c.networkPolicy);const w=a?.networkPolicy?.allow;void 0!==w&&w.length>0&&void 0!==y&&(y={...y,allow:[...w]},r&&(u["networkPolicy.allow"]="teamAdmin (replace)"));const b=void 0!==(S=y)?S:{version:1,default:"deny"};var S;const k=Te(o?.debugOutputDir,s?.debugOutputDir,a?.debugOutputDir),E=xe(o?.captureDenies,s?.captureDenies,a?.captureDenies),_=Te(o?.enableSharedBuildCache,s?.enableSharedBuildCache,a?.enableSharedBuildCache),R=Re(o?.ignoreMapping,s?.ignoreMapping,a?.ignoreMapping,c.ignoreMapping),T=function(e){const t=x.filter((e=>"git"===e.type)).map((e=>e.pattern));return{[e]:t}}(t?.gitDirParent??l);return{disableTmpWrite:m||void 0,networkPolicyStrict:f,additionalReadonlyPaths:v,networkPolicy:b,debugOutputDir:k,captureDenies:E||void 0,enableSharedBuildCache:_,ignoreMapping:R,writeProtectionMapping:Re(o?.writeProtectionMapping,s?.writeProtectionMapping,a?.writeProtectionMapping,c.writeProtectionMapping,T),fieldSources:u}}function De(e,t){const r=Object.fromEntries(Object.entries(e).filter((([e,t])=>void 0!==t)));return r.type=t,r}function Me(e,t){const{perUser:r,perRepo:n,teamAdmin:o}=e,s=t?.debug,i=Oe(e,t),a=Ce(r?.additionalReadwritePaths,n?.additionalReadwritePaths,o?.additionalReadwritePaths),l={policy:De({type:"workspace_readwrite",disableTmpWrite:i.disableTmpWrite,networkPolicyStrict:i.networkPolicyStrict,additionalReadwritePaths:a.length>0?a:void 0,additionalReadonlyPaths:i.additionalReadonlyPaths,networkPolicy:i.networkPolicy,debugOutputDir:i.debugOutputDir,captureDenies:i.captureDenies,enableSharedBuildCache:i.enableSharedBuildCache,ignoreMapping:i.ignoreMapping,writeProtectionMapping:i.writeProtectionMapping},"workspace_readwrite")};return s&&(l.debug={fieldSources:i.fieldSources}),l}const je="win32"===process.platform;function Ne(e){return!je&&!!e?.SUDO_ASKPASS}function $e(e){return Ne(e)?"alias sudo='sudo -A'; ":""}function Fe(e){const t=[];let r=0;for(;r<e.length;){const n=0===r||"&&"===e.slice(Math.max(0,r-2),r)||"||"===e.slice(Math.max(0,r-2),r)||"|"===e[r-1]||";"===e[r-1],o=Math.max(0,r-10),s=e.slice(o,r),i=/(?:&&|\|\||[|;])\s*$/.test(s)||0===r&&/^\s*$/.test(s);if((n||i)&&"sudo"===e.slice(r,r+4)){const n=r+4;if(n>=e.length||/\s/.test(e[n])){let o=n;for(;o<e.length&&/\s/.test(e[o]);)o++;let s=!1;if(o<e.length&&"-"===e[o]){let t=o+1;for(;t<e.length&&/[^\s]/.test(e[t]);)t++;const r=e.slice(o,t);s=/^-[a-zA-Z]*A[a-zA-Z]*$/.test(r)}s?(t.push("sudo"),r=n):(t.push("sudo -A"),r=n);continue}}t.push(e[r]),r++}return t.join("")}var Le=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});function Ue(e){if("win32"===process.platform){const t=/git.*bash/i;if(e&&t.test(e))return e;const r=(0,o.Ef)("bash",[],t).cmd;return t.test(r)?r:null}const t=process.env.SHELL;return t?.includes("bash")?t:(0,o.Ef)("bash",[]).cmd}function Be(e){if("win32"!==process.platform)return e;const t=n.normalize(e),r=t[0]?.toLowerCase();return r&&":"===t[1]&&t[2]===n.sep?`/${r}${t.slice(2).replace(/\\/g,"/")}`:t.replace(/\\/g,"/")}class He{cwd;state;userTerminalHint;useFileStateTransport;constructor(e,t,r,n=!1){this.cwd=e,this.state=t,this.userTerminalHint=r,this.useFileStateTransport=n}async getCwd(){return this.cwd}clone(e){return new He(e??this.cwd,this.state,this.userTerminalHint,this.useFileStateTransport)}async*execute(e,t,r){const l={stack:[],error:void 0,hasError:!1};try{const c=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t}(l,(0,a.VI)(e.withName("BashState.execute")),!1),u=r?.pipeStdin??!1,d=(0,o.Jt)(),p=r?.workingDirectory??this.cwd,h={...process.env,...pe,...r?.env};let m='builtin eval "$1"';u||(m+=" < /dev/null");const f=$e(h),g=this.useFileStateTransport;let v,y,w;if(g){v=await(0,s.mkdtemp)(n.join(i.tmpdir(),"cursor-bash-state-")),n.basename(v),y=n.join(v,"state-in"),w=n.join(v,"state-out"),await(0,s.writeFile)(y,this.state,"utf8"),await(0,s.writeFile)(w,"","utf8").catch((()=>{}));const e=Be(y),t=Be(w);h.CURSOR_STATE_INPUT_FILE=e,h.CURSOR_STATE_OUTPUT_FILE=t}const b=["-O","extglob","-c",`${g?'snap=$(command cat "$CURSOR_STATE_INPUT_FILE")':"snap=$(command cat <&3)"} && builtin shopt -s extglob && builtin eval -- "$snap" && { builtin set +u 2>/dev/null || true; builtin eval "\${__CURSOR_SANDBOX_ENV_RESTORE:-}" 2>/dev/null; builtin export PWD="$(builtin pwd)"; builtin shopt -s expand_aliases 2>/dev/null; ${f}${m}; }; COMMAND_EXIT_CODE=$?; ${g?'mkdir -p "$(dirname "$CURSOR_STATE_OUTPUT_FILE")" 2>/dev/null; dump_bash_state > "$CURSOR_STATE_OUTPUT_FILE"':"dump_bash_state >&4"}; builtin exit $COMMAND_EXIT_CODE`,"--",t],S=Ue(this.userTerminalHint);if(!S)throw new Error("Can't find Bash");const k=r?.sandboxWorkspaceRoot??p,E=(await Ie(k,r?.sandboxPolicy)).policy,x="insecure_none"!==E.type?{...E,sandboxWorkspaceRoot:k}:E;let C="";const _=async()=>{if(g){if(!w)return void(C=this.state);try{C=await(0,s.readFile)(w,"utf8")}catch(e){console.warn("[shell-exec] Failed to read bash state file",e),C=this.state}}},P=async()=>{if(v)try{await(0,s.rm)(v,{recursive:!0,force:!0})}catch{}};let R;try{R=he(S,b,{env:h,stdio:[u?"pipe":"ignore","pipe","pipe","pipe","pipe"],cwd:p,detached:!0},x,r?.signal)}catch(e){throw await P(),e}R.on("spawn",(async()=>{try{await d.write({type:"stdin_ready",stdin:R.stdin??void 0,pid:R.pid})}catch(e){}}));const T=Se({stdout:R.stdout,stderr:R.stderr,writable:d,bufferOutputEvents:r?.bufferOutputEvents,outputLimiterOptions:r?.outputLimiterOptions});R.on("error",(async e=>{await P(),d.throw(e)}));let I=null,A=null,O=!1;const D=async e=>{if(!O){if(O=!0,A&&(clearTimeout(A),A=null),(0,a.HF)(c.ctx,"exit"),e)try{await T.waitForOutput()}catch(e){return await P(),void d.throw(e instanceof Error?e:new Error(String(e)))}if(await T.flush(),!r?.signal?.aborted){await _();const e=`${ge}\n`,t=`${ve}\n`;if(C.startsWith(e)&&C.endsWith(t)){let t=C.slice(e.length);t=t.slice(0,-26);const{cwd:r,rest:n}=me(t);this.state=n,"win32"!==process.platform&&r?.startsWith("/")&&(this.cwd=r)}}if(x.captureDenies)try{const e=await ce(R);e&&e.length>0&&await d.write({type:"sandbox_denies",events:e})}catch{}try{await d.write({type:"exit",code:I,data:"",aborted:r?.signal?.aborted??!1}),d.close()}catch{d.close()}await P()}};R.on("exit",((e,t)=>{I=e;const n=r?.closeTimeout??5e3;n>0&&(A=setTimeout((()=>{console.warn(`[shell-exec] Close event did not fire within ${n}ms after exit. This may indicate a background process is holding file descriptors open. Proceeding anyway to prevent hang.`),D(!1)}),n))})),R.on("close",(async()=>{await D(!0)}));const M=R.stdio[3],j=R.stdio[4];g||(M?.write(this.state),M?.end(),j?.on("data",(e=>{C+=e.toString()}))),yield*d}catch(e){l.error=e,l.hasError=!0}finally{Le(l)}}}var We=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});class ze{promise;constructor(e){this.promise=e}async getCwd(){return(await this.promise).getCwd()}clone(e){return new ze(this.promise.then((t=>t.clone(e))))}async*execute(e,t,r){const n={stack:[],error:void 0,hasError:!1};try{!function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0})}(n,(0,a.VI)(e.withName("LazyTerminalExecutor.execute")),!1);const o=await this.promise;for await(const n of o.execute(e,t,r))yield n}catch(e){n.error=e,n.hasError=!0}finally{We(n)}}}var qe=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});function Ge(){if("win32"!==process.platform){const e=process.env.SHELL;if(e?.includes("pwsh")||e?.includes("powershell"))return e}let e=(0,o.Ef)("pwsh",[]).cmd;if("pwsh"!==e)return e;if(e=(0,o.Ef)("powershell",[]).cmd,"powershell"!==e)return e;if("win32"===process.platform&&(e=n.join(process.env.SYSTEMROOT,"System32","WindowsPowerShell","v1.0","powershell.exe"),(0,g.existsSync)(e)))return e;throw new Error("Neither 'pwsh' (PowerShell Core) nor 'powershell' (Windows PowerShell) found in PATH")}class Ve{cwd;state;constructor(e,t){this.cwd=e,this.state=t}async getCwd(){return this.cwd}clone(e){return new Ve(e??this.cwd,this.state)}async*execute(e,t,r){const l={stack:[],error:void 0,hasError:!1};try{const c=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t}(l,(0,a.VI)(e.withName("PowerShellState.execute")),!1),u=r?.pipeStdin??!1,d=r?.workingDirectory??this.cwd,p=(0,o.Jt)(),h={...process.env,...pe,...r?.env},m=Ne(h)?Fe(t):t,f=i.tmpdir(),g=n.join(f,`ps-state-out-${(0,b.randomUUID)()}.txt`),v=((e,t,r,n)=>`\n${e}\n\nSet-Location '${t}'\n\n# Execute user command\n${r}\n$COMMAND_EXIT_CODE = $LASTEXITCODE\n\n\nfunction Dump-PowerShellState {\n param(\n [Parameter(Mandatory = $true)]\n [string]$OutputFile\n )\n\n function Emit {\n param([string]$Content)\n Add-Content -Path $OutputFile -Value $Content -Encoding UTF8\n }\n\n if (Test-Path $OutputFile) {\n Remove-Item $OutputFile -Force\n }\n New-Item -Path $OutputFile -ItemType File -Force | Out-Null\n #Log-Timing "file_init"\n\n Emit $PWD.Path\n #Log-Timing "working_dir"\n\n $envVars = Get-ChildItem Env: | Sort-Object Name\n foreach ($var in $envVars) {\n $encoded = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes([string]$var.Value))\n Emit ('Set-Item -LiteralPath ''Env:{0}'' -Value ([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(''{1}'')))' -f $var.Name, $encoded)\n }\n #Log-Timing "environment"\n\n $aliases = Get-Alias | Sort-Object Name\n foreach ($alias in $aliases) {\n $definition = $alias.Definition\n\n if ($alias.Options -band [System.Management.Automation.ScopedItemOptions]::ReadOnly) {\n }\n elseif ($alias.Options -band [System.Management.Automation.ScopedItemOptions]::Constant) {\n }\n elseif ($alias.Options -band [System.Management.Automation.ScopedItemOptions]::AllScope) {\n }\n else {\n Emit ('Set-Alias -Name "{0}" -Value "{1}"' -f $alias.Name, $definition)\n }\n }\n\n #Log-Timing "finalize"\n}\n\nDump-PowerShellState -OutputFile "${n}"\n\nexit $COMMAND_EXIT_CODE\n`)(this.state,d,m,g),y=n.join(f,`ps-script-${(0,b.randomUUID)()}.ps1`);await async function(e,t){await s.writeFile(e,"\ufeff"+t,{encoding:"utf8"})}(y,v);const w=["-ExecutionPolicy","Bypass"];u||w.push("-NonInteractive"),w.push("-File",y);const S=Ge(),k="win32"===process.platform,E=r?.sandboxWorkspaceRoot??d,x=(await Ie(E,r?.sandboxPolicy)).policy,C=he(S,w,{env:h,stdio:[u?"pipe":"ignore","pipe","pipe"],cwd:d,detached:!k},"insecure_none"!==x.type?{...x,sandboxWorkspaceRoot:E}:x,r?.signal);C.on("spawn",(async()=>{try{await p.write({type:"stdin_ready",stdin:C.stdin??void 0,pid:C.pid})}catch(e){}}));const _=Se({stdout:C.stdout,stderr:C.stderr,writable:p,bufferOutputEvents:r?.bufferOutputEvents,outputLimiterOptions:r?.outputLimiterOptions}),P=async()=>{try{const e=await s.readFile(g,"utf8"),{cwd:t,rest:r}=me(e);this.state=r,this.cwd=t.trim(),await(0,s.rm)(g).catch((()=>{}))}catch(e){}await(0,s.rm)(y).catch((()=>{}))};let R=null,T=null,I=!1;const A=async e=>{if(!I){if(I=!0,T&&(clearTimeout(T),T=null),(0,a.HF)(c.ctx,"exit"),e)try{await _.waitForOutput()}catch(e){return await P(),void p.throw(e instanceof Error?e:new Error(String(e)))}await _.flush();try{await p.write({type:"exit",code:R,data:"",aborted:r?.signal?.aborted??!1}),await P(),p.close()}catch(e){p.close()}}};C.on("exit",((e,t)=>{R=e;const n=r?.closeTimeout??5e3;n>0&&(T=setTimeout((()=>{console.warn(`[shell-exec] Close event did not fire within ${n}ms after exit. This may indicate a background process is holding file descriptors open. Proceeding anyway to prevent hang.`),A(!1)}),n))})),C.on("close",(async()=>{await A(!0)})),C.on("error",(e=>{P().catch((()=>{})),p.throw(e)})),yield*p}catch(e){l.error=e,l.hasError=!0}finally{qe(l)}}}var Je=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});class Ke{cwd;options;constructor(e,t){this.cwd=e,this.options=t}async getCwd(){return this.cwd}clone(e){return new Ke(e??this.cwd,this.options)}async*execute(e,t,r){const n={stack:[],error:void 0,hasError:!1};try{const s=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t}(n,(0,a.VI)(e.withName("NaiveTerminalExecutor.execute")),!1),i=(0,o.Jt)(),l=r?.pipeStdin??!1,c={...process.env,...pe,...r?.env},u=Ne(c)?Fe(t):t,d=r?.workingDirectory??this.cwd,p=r?.sandboxWorkspaceRoot??d,h=(await Ie(p,r?.sandboxPolicy)).policy,m="insecure_none"!==h.type?{...h,sandboxWorkspaceRoot:p}:h,f=he(this.options?.shell||process.env.SHELL||"/bin/sh",[...this.options?.shellArgs??[],"-c",u],{env:c,cwd:d,stdio:[l?"pipe":"ignore","pipe","pipe"]},m,r?.signal);f.on("spawn",(async()=>{try{await i.write({type:"stdin_ready",stdin:f.stdin??void 0,pid:f.pid})}catch(e){}}));const g=Se({stdout:f.stdout,stderr:f.stderr,writable:i,bufferOutputEvents:r?.bufferOutputEvents,outputLimiterOptions:r?.outputLimiterOptions});f.on("error",(e=>{i.throw(e)})),f.on("exit",(async e=>{if((0,a.HF)(s.ctx,"exit"),await g.flush(),m.captureDenies)try{const e=await ce(f);e&&e.length>0&&await i.write({type:"sandbox_denies",events:e})}catch{}try{await i.write({type:"exit",code:e,data:"",aborted:r?.signal?.aborted??!1}),i.close()}catch(e){i.close()}})),yield*i}catch(e){n.error=e,n.hasError=!0}finally{Je(n)}}}const Ye="__CURSOR_ZSH_STATE_START__",Ze="__CURSOR_ZSH_STATE_END__";var Xe=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});function Qe(){const e=process.env.SHELL;return e?.includes("zsh")?e:(0,o.Ef)("zsh",[]).cmd}class et{cwd;state;constructor(e,t){this.cwd=e,this.state=t}async getCwd(){return this.cwd}clone(e){return new et(e??this.cwd,this.state)}async*execute(e,t,r){const n={stack:[],error:void 0,hasError:!1};try{const s=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t}(n,(0,a.VI)(e.withName("ZshState.execute")),!1),i=r?.pipeStdin??!1,l=(0,o.Jt)(),c=r?.workingDirectory??this.cwd,u={...process.env,...pe,...r?.env};let d='builtin eval "$1"';i||(d+=" < /dev/null");const p=["-c",`snap=$(command cat <&3); builtin unsetopt aliases 2>/dev/null; builtin unalias -m '*' 2>/dev/null || true; builtin eval "$snap" && { builtin unsetopt nounset 2>/dev/null || true; builtin eval "\${__CURSOR_SANDBOX_ENV_RESTORE:-}" 2>/dev/null; builtin export PWD="$(builtin pwd)"; builtin setopt aliases 2>/dev/null; ${$e(u)}${d}; }; COMMAND_EXIT_CODE=$?; dump_zsh_state >&4; builtin exit $COMMAND_EXIT_CODE`,"--",t],h=r?.sandboxWorkspaceRoot??c,m=(await Ie(h,r?.sandboxPolicy)).policy,f="insecure_none"!==m.type?{...m,sandboxWorkspaceRoot:h}:m,g=he(Qe(),p,{env:u,stdio:[i?"pipe":"ignore","pipe","pipe","pipe","pipe"],cwd:c,detached:!0},f,r?.signal);let v="";g.on("spawn",(async()=>{try{await l.write({type:"stdin_ready",stdin:g.stdin??void 0,pid:g.pid})}catch(e){}}));const y=Se({stdout:g.stdout,stderr:g.stderr,writable:l,bufferOutputEvents:r?.bufferOutputEvents,outputLimiterOptions:r?.outputLimiterOptions});g.on("error",(e=>{l.throw(e)}));let w=null,b=null,S=!1;const k=async e=>{if(!S){if(S=!0,b&&(clearTimeout(b),b=null),(0,a.HF)(s.ctx,"exit"),e)try{await y.waitForOutput()}catch(e){return void l.throw(e instanceof Error?e:new Error(String(e)))}if(await y.flush(),!r?.signal?.aborted){const e=`${Ye}\n`,t=`${Ze}\n`;if(v.startsWith(e)&&v.endsWith(t)){let t=v.slice(e.length);t=t.slice(0,-25);const{cwd:r,rest:n}=me(t);r?.startsWith("/")&&(this.state=n,this.cwd=r)}}if(f.captureDenies)try{const e=await ce(g);e&&e.length>0&&await l.write({type:"sandbox_denies",events:e})}catch{}try{await l.write({type:"exit",code:w,data:"",aborted:r?.signal?.aborted??!1}),l.close()}catch(e){l.close()}}};g.on("exit",((e,t)=>{w=e;const n=r?.closeTimeout??5e3;n>0&&(b=setTimeout((()=>{S||(console.warn(`[shell-exec] Close event did not fire within ${n}ms after exit. This may indicate a background process is holding file descriptors open. Killing detached process group.`),function(e,t){if(e)try{process.kill(-e,t)}catch{return}}(g.pid,"SIGKILL"),k(!1))}),n))})),g.on("close",(async()=>{await k(!0)}));const E=g.stdio[3],x=g.stdio[4];E?.write(this.state),E?.end(),x?.on("data",(e=>{v+=e.toString()})),yield*l}catch(e){n.error=e,n.hasError=!0}finally{Xe(n)}}}const tt="__CURSOR_ZSH_STATE_LIGHT_VALID__",rt='#!/usr/bin/env zsh\n\n# Usage:\n# source dump_zsh_state_light.zsh\n# dump_zsh_state_light\n# Or execute directly (captures a subshell\'s state):\n# ./dump_zsh_state_light.zsh\n\n# Lightweight version that skips function tracking for better performance\n\n# Define a function so sourcing won\'t alter caller state; emulate locally inside\nfunction dump_zsh_state_light() {\n emulate -L zsh -o errreturn -o pipefail\n set -u\n\n\n # Helper to log timing, only if DUMP_ZSH_STATE_TIMING is set\n if [[ -n "${DUMP_ZSH_STATE_TIMING:-}" ]]; then\n # Timing setup\n typeset start_time=${EPOCHREALTIME}\n typeset step_start=${EPOCHREALTIME}\n _log_timing() {\n typeset step_name="$1"\n typeset now=${EPOCHREALTIME}\n typeset step_duration=$((now - step_start))\n typeset total_duration=$((now - start_time))\n builtin printf "[TIMING] %-20s: %6.3fs (total: %6.3fs)\n" "$step_name" "$step_duration" "$total_duration" >&2\n step_start=$now\n }\n else\n _log_timing() { :; }\n fi\n\n # Ensure parameter arrays are available\n builtin zmodload -F zsh/parameter p:parameters p:options p:aliases p:galiases p:saliases 2>/dev/null || true\n _log_timing "zmodload"\n\n # Helper to print a line to stdout\n _emit() {\n builtin print -r -- "$1"\n }\n\n # Helper to safely encode and emit unsafe values\n _emit_encoded() {\n local content="$1"\n local var_name="$2"\n if [[ -n "$content" ]]; then\n # Use here-document to avoid argument list length limits entirely\n builtin printf \'cursor_snap_%s=$(command base64 -d <<\'\'\'CURSOR_SNAP_EOF_%s\'\'\'\n\' "$var_name" "$var_name"\n command base64 <<<"$content" | command tr -d \'\n\'\n builtin printf \'\nCURSOR_SNAP_EOF_%s\n\' "$var_name"\n builtin printf \')\n\'\n builtin printf \'eval "$cursor_snap_%s"\n\' "$var_name"\n fi\n }\n\n _log_timing "init"\n\n # Emit validity marker so we can detect if dump_zsh_state_light completed\n _emit "__CURSOR_ZSH_STATE_LIGHT_VALID__"\n\n # Header\n _emit "$PWD"\n\n _emit "# zsh state dump (light) generated on $(command date +\'%Y-%m-%d %H:%M:%S %z\')"\n _log_timing "header"\n\n # Working directory\n _log_timing "working_dir"\n\n # Environment variables (exported)\n # Filter out: proxy settings, sandbox vars, and sudo askpass vars (session-specific)\n local env_vars\n env_vars=$(builtin typeset -xp 2>/dev/null | command grep -viE \'_proxy=|CURSOR_SANDBOX|SUDO_ASKPASS|CURSOR_ASKPASS\' || true)\n _emit_encoded "$env_vars" "ENV_VARS_B64"\n _log_timing "env_variables"\n\n # Options (replayable as setopt lines; exclude nounset which we enable locally)\n local zsh_opts\n zsh_opts=$(setopt 2>/dev/null | command grep -v \'^nounset$\' | command awk \'{printf "builtin setopt %s 2>/dev/null || true\\n", $0}\' || true)\n _emit_encoded "$zsh_opts" "ZSH_OPTS_B64"\n _log_timing "options"\n\n # SKIP FUNCTIONS - this is the key difference for performance\n\n # Aliases (regular, global, and suffix)\n {\n builtin alias -L 2>/dev/null || true\n builtin alias -gL 2>/dev/null || true\n builtin alias -sL 2>/dev/null || true\n }\n _log_timing "aliases"\n\n # Done\n _emit "# end of zsh state dump (light)"\n _log_timing "finalize"\n}\n';var nt,ot,st=function(e){return function(t){function r(r){t.error=t.hasError?new e(r,t.error,"An error was suppressed during disposal."):r,t.hasError=!0}var n,o=0;return function e(){for(;n=t.stack.pop();)try{if(!n.async&&1===o)return o=0,t.stack.push(n),Promise.resolve().then(e);if(n.dispose){var s=n.dispose.call(n.value);if(n.async)return o|=2,Promise.resolve(s).then(e,(function(t){return r(t),e()}))}else o|=1}catch(e){r(e)}if(1===o)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"==typeof SuppressedError?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n});function it(){const e=process.env.SHELL;return e?.includes("zsh")?e:(0,o.Ef)("zsh",[]).cmd}class at{cwd;state;constructor(e,t){this.cwd=e,this.state=t}async getCwd(){return this.cwd}clone(e){return new at(e??this.cwd,this.state)}async*execute(e,t,r){const n={stack:[],error:void 0,hasError:!1};try{const s=function(e,t,r){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t}(n,(0,a.VI)(e.withName("ZshLightState.execute")),!1),i=r?.pipeStdin??!1,l=(0,o.Jt)(),c=r?.workingDirectory??this.cwd,u={...process.env,...pe,...r?.env};let d='builtin eval "$1"';i||(d+=" < /dev/null");const p=$e(u),h=["-c",`snap=$(command cat <&3); builtin unsetopt aliases 2>/dev/null; builtin unalias -m '*' 2>/dev/null || true; ${rt} builtin eval "$snap" && { builtin unsetopt nounset 2>/dev/null || true; builtin eval "\${__CURSOR_SANDBOX_ENV_RESTORE:-}" 2>/dev/null; builtin export PWD="$(builtin pwd)"; builtin setopt aliases 2>/dev/null; ${p}${d}; }; COMMAND_EXIT_CODE=$?; dump_zsh_state_light >&4; builtin exit $COMMAND_EXIT_CODE`,"--",t],m=r?.sandboxWorkspaceRoot??c,f=(await Ie(m,r?.sandboxPolicy)).policy,g="insecure_none"!==f.type?{...f,sandboxWorkspaceRoot:m}:f,v=he(it(),h,{env:u,stdio:[i?"pipe":"ignore","pipe","pipe","pipe","pipe"],cwd:c,detached:!0},g,r?.signal);let y="";v.on("spawn",(async()=>{try{await l.write({type:"stdin_ready",stdin:v.stdin??void 0,pid:v.pid})}catch(e){}}));const w=Se({stdout:v.stdout,stderr:v.stderr,writable:l,bufferOutputEvents:r?.bufferOutputEvents,outputLimiterOptions:r?.outputLimiterOptions});v.on("error",(e=>{l.throw(e)}));let b=null,S=null,k=!1;const E=async e=>{if(!k){if(k=!0,S&&(clearTimeout(S),S=null),(0,a.HF)(s.ctx,"exit"),e)try{await w.waitForOutput()}catch(e){return void l.throw(e instanceof Error?e:new Error(String(e)))}if(await w.flush(),!r?.signal?.aborted){const e=`${tt}\n`;if(y.startsWith(e)){const t=y.slice(e.length),{cwd:r,rest:n}=me(t);r?.startsWith("/")&&(this.state=n,this.cwd=r)}}if(g.captureDenies)try{const e=await ce(v);e&&e.length>0&&await l.write({type:"sandbox_denies",events:e})}catch{}try{await l.write({type:"exit",code:b,data:"",aborted:r?.signal?.aborted??!1}),l.close()}catch(e){l.close()}}};v.on("exit",((e,t)=>{b=e;const n=r?.closeTimeout??5e3;n>0&&(S=setTimeout((()=>{console.warn(`[shell-exec] Close event did not fire within ${n}ms after exit. This may indicate a background process is holding file descriptors open. Proceeding anyway to prevent hang.`),E(!1)}),n))})),v.on("close",(async()=>{await E(!0)}));const x=v.stdio[3],C=v.stdio[4];x?.write(this.state),x?.end(),C?.on("data",(e=>{y+=e.toString()})),yield*l}catch(e){n.error=e,n.hasError=!0}finally{st(n)}}}r("node:perf_hooks"),function(e){e[e.EventLoopDelayP95Ms=50]="EventLoopDelayP95Ms",e[e.EventLoopUtilization=.7]="EventLoopUtilization"}(nt||(nt={})),function(e){e[e.SampleIntervalMs=250]="SampleIntervalMs",e[e.EventLoopResolutionMs=20]="EventLoopResolutionMs"}(ot||(ot={}));const lt="\n[This shell is producing too much output to stream. The command will still run.]\n",ct=new Set(["cat","grep"]);function ut(e){return ct.has(e)}function dt(e){if(!e)return;const t={version:1};if("allow"!==e.default&&"deny"!==e.default||(t.default=e.default),Array.isArray(e.allow)&&e.allow.length>0&&(t.allow=e.allow.filter((e=>"string"==typeof e))),Array.isArray(e.deny)&&e.deny.length>0&&(t.deny=e.deny.filter((e=>"string"==typeof e))),e.logging){const r={};"string"==typeof e.logging.decisionLogPath&&(r.decisionLogPath=e.logging.decisionLogPath),"jsonl"===e.logging.logFormat&&(r.logFormat="jsonl"),Object.keys(r).length>0&&(t.logging=r)}return t}function pt(e){const t=e.type??"workspace_readwrite",r={debugOutputDir:e.debugOutputDir,captureDenies:e.captureDenies,enableSharedBuildCache:e.enableSharedBuildCache};if("insecure_none"===t)return{type:"insecure_none",...r};let n;if(Array.isArray(e.additionalReadonlyPaths)){const t=e.additionalReadonlyPaths;n=t.length>0?t:void 0}const o={...r,networkAccess:e.networkAccess,networkPolicy:dt(e.networkPolicy),networkPolicyStrict:e.networkPolicyStrict,additionalReadonlyPaths:n,disableTmpWrite:e.disableTmpWrite};return"workspace_readonly"===t?{type:"workspace_readonly",...o}:{type:"workspace_readwrite",...o,additionalReadwritePaths:e.additionalReadwritePaths}}async function ht(e,t){const r=await async function(e,t){try{const r=await(0,s.readFile)(e,"utf-8"),n=JSON.parse(r),o=function(e){if("object"!=typeof e||null===e)return"Expected an object";const t=e;if(void 0!==t.type){const e=["insecure_none","workspace_readwrite","workspace_readonly"];if("string"!=typeof t.type||!e.includes(t.type))return`Invalid type: expected one of ${e.join(", ")}`}const r=["networkAccess","networkPolicyStrict","disableTmpWrite","enableSharedBuildCache","captureDenies"];for(const e of r)if(void 0!==t[e]&&"boolean"!=typeof t[e])return`Invalid ${e}: expected boolean`;const n=["debugOutputDir"];for(const e of n)if(void 0!==t[e]&&"string"!=typeof t[e])return`Invalid ${e}: expected string`;const o=["additionalReadwritePaths"];for(const e of o)if(void 0!==t[e]){if(!Array.isArray(t[e]))return`Invalid ${e}: expected array`;if(!t[e].every((e=>"string"==typeof e)))return`Invalid ${e}: expected array of strings`}if(void 0!==t.networkPolicy){if("object"!=typeof t.networkPolicy||null===t.networkPolicy)return"Invalid networkPolicy: expected object";const e=t.networkPolicy;if(void 0!==e.default&&"allow"!==e.default&&"deny"!==e.default)return'Invalid networkPolicy.default: expected "allow" or "deny"';if(void 0!==e.allow&&!Array.isArray(e.allow))return"Invalid networkPolicy.allow: expected array";if(void 0!==e.deny&&!Array.isArray(e.deny))return"Invalid networkPolicy.deny: expected array"}}(n);if(o)return{success:!1,error:`Invalid sandbox policy: ${o}`};let i=pt(n);return t&&(i=mt(i,t)),{success:!0,policy:i}}catch(e){return e instanceof Error?"code"in e&&"ENOENT"===e.code?{success:!1,error:"File not found"}:e instanceof SyntaxError?{success:!1,error:`Invalid JSON: ${e.message}`}:{success:!1,error:e.message}:{success:!1,error:"Unknown error"}}}(e,t);if(r.success)return r.policy}function mt(e,t){if("insecure_none"===e.type)return e;const r=e.additionalReadonlyPaths?.map((e=>(0,o.o1)(e,t)));if("workspace_readonly"===e.type)return{...e,additionalReadonlyPaths:r};const n=e.additionalReadwritePaths?.map((e=>(0,o.o1)(e,t)));return{...e,additionalReadonlyPaths:r,additionalReadwritePaths:n}}function ft(e){try{return(0,o.Ef)(e,[]).cmd!==e}catch(e){return!1}}function gt(){if("win32"!==process.platform)return;if(!process.env.MSYSTEM)return;const e=process.env.EXEPATH;if(e)return function(e){const t=e.replace(/[\\/]+$/,""),r=n.win32.basename(t).toLowerCase();return"bash.exe"===r?t:"bin"===r?n.win32.join(t,"bash.exe"):n.win32.join(t,"bin","bash.exe")}(e);const t=["C:\\Program Files\\Git\\bin\\bash.exe","C:\\Program Files (x86)\\Git\\bin\\bash.exe"];for(const e of t)try{if((0,o.Ef)(e,[]).cmd===e)return e}catch{}return"C:\\Program Files\\Git\\bin\\bash.exe"}function vt(e){if(e===de.ZshLight)return de.ZshLight;const t=e||process.env.SHELL||"",r="win32"===process.platform,n=r&&!e?gt():void 0,o=void 0!==n||/git.*bash\.exe$/i.test(t)||/program.*git.*bin.*bash\.exe$/i.test(t),s=!r||o;return t.includes("zsh")?de.Zsh:t.includes("bash")&&s?de.Bash:t.includes("pwsh")||t.includes("powershell")?de.PowerShell:n?de.Bash:r&&(ft("pwsh")||ft("powershell"))?de.PowerShell:ft("zsh")?de.Zsh:ft("bash")&&s?de.Bash:ft("pwsh")||ft("powershell")?de.PowerShell:de.Naive}function yt(e){let t=e;if(!e?.userTerminalHint){const r=gt();r&&(t={...e,userTerminalHint:r})}switch(vt(t?.userTerminalHint??"")){case de.Zsh:return new ze(async function(e){const t={...process.env,...pe,...e?.env},r="__CURSOR_STATE_MARKER__",n=["-o","extendedglob","-ilc",`#!/usr/bin/env zsh\n\n# Usage:\n# source dump_zsh_state.zsh\n# dump_zsh_state\n# Or execute directly (captures a subshell's state):\n# ./dump_zsh_state.zsh\n\n# Define a function so sourcing won't alter caller state; emulate locally inside\nfunction dump_zsh_state() {\n emulate -L zsh -o errreturn -o pipefail\n set -u\n\n\n # Helper to log timing, only if DUMP_ZSH_STATE_TIMING is set\n if [[ -n "\${DUMP_ZSH_STATE_TIMING:-}" ]]; then\n # Timing setup\n typeset start_time=\${EPOCHREALTIME}\n typeset step_start=\${EPOCHREALTIME}\n _log_timing() {\n typeset step_name="$1"\n typeset now=\${EPOCHREALTIME}\n typeset step_duration=$((now - step_start))\n typeset total_duration=$((now - start_time))\n builtin printf "[TIMING] %-20s: %6.3fs (total: %6.3fs)\n" "$step_name" "$step_duration" "$total_duration" >&2\n step_start=$now\n }\n else\n _log_timing() { :; }\n fi\n\n # Ensure parameter arrays are available\n builtin zmodload -F zsh/parameter p:parameters p:options p:functions p:aliases p:galiases p:saliases 2>/dev/null || true\n _log_timing "zmodload"\n\n # Helper to print a line to stdout\n _emit() {\n builtin print -r -- "$1"\n }\n\n # Helper to safely encode and emit unsafe values\n _emit_encoded() {\n local content="$1"\n local var_name="$2"\n if [[ -n "$content" ]]; then\n # Use here-document to avoid argument list length limits entirely\n builtin printf 'cursor_snap_%s=$(command base64 -d <<'''CURSOR_SNAP_EOF_%s'''\n' "$var_name" "$var_name"\n command base64 <<<"$content" | command tr -d '\n'\n builtin printf '\nCURSOR_SNAP_EOF_%s\n' "$var_name"\n builtin printf ')\n'\n builtin printf 'eval "$cursor_snap_%s"\n' "$var_name"\n fi\n }\n\n _log_timing "init"\n\n # Emit start marker at the very beginning of the output\n _emit "__CURSOR_ZSH_STATE_START__"\n\n # Header\n _emit "$PWD"\n\n _emit "# zsh state dump generated on $(command date +'%Y-%m-%d %H:%M:%S %z')"\n _log_timing "header"\n\n # Working directory\n _log_timing "working_dir"\n\n # Environment variables (exported)\n # Filter out: proxy settings, sandbox vars, and sudo askpass vars (session-specific)\n local env_vars\n env_vars=$(builtin typeset -xp 2>/dev/null | command grep -viE '_proxy=|CURSOR_SANDBOX|SUDO_ASKPASS|CURSOR_ASKPASS' || true)\n _emit_encoded "$env_vars" "ENV_VARS_B64"\n _log_timing "env_variables"\n\n # Options (replayable as setopt lines; exclude nounset which we enable locally)\n local zsh_opts\n zsh_opts=$(setopt 2>/dev/null | command grep -v '^nounset$' | command awk '{printf "builtin setopt %s 2>/dev/null || true\\n", $0}' || true)\n _emit_encoded "$zsh_opts" "ZSH_OPTS_B64"\n _log_timing "options"\n\n # Functions: dump all functions at once (much faster than individual processing)\n local all_functions\n all_functions=$(builtin typeset -f 2>/dev/null || true)\n _emit_encoded "$all_functions" "FUNCTIONS_B64"\n _log_timing "functions"\n\n # Aliases (regular, global, and suffix)\n {\n builtin alias -L 2>/dev/null || true\n builtin alias -gL 2>/dev/null || true\n builtin alias -sL 2>/dev/null || true\n }\n _log_timing "aliases"\n\n # Done\n _emit "# end of zsh state dump"\n _emit "__CURSOR_ZSH_STATE_END__"\n _log_timing "finalize"\n}\n builtin printf '${r}\\n'; dump_zsh_state`],o=he(Qe(),n,{env:t,stdio:["ignore","pipe","pipe"],detached:!0},{type:"insecure_none"},e?.signal);let s="";o.stdout?.on("data",(e=>{s+=e.toString()})),await new Promise((e=>{o.on("close",(()=>{e(void 0)}))}));const i=fe(s,r),a=`${Ye}\n`,l=`${Ze}\n`;let c;i.startsWith(a)&&i.endsWith(l)?(c=i.slice(a.length),c=c.slice(0,-25)):c=`${process.cwd()}\n`;const{cwd:u,rest:d}=me(c);return new et(u,d)}(t));case de.Bash:return new ze(async function(e){const t={...process.env,...pe,...e?.env},r="__CURSOR_STATE_MARKER__",n=["-O","extglob","-ilc",`#!/usr/bin/env bash\n\n# Usage:\n# source dump_bash_state.bash\n# dump_bash_state OUTPUT_FILE\n# Or execute directly (captures a subshell's state):\n# ./dump_bash_state.bash OUTPUT_FILE\n\ndump_bash_state() {\n set -euo pipefail\n\n # Require base64 for safe encoding of emitted sections\n if ! command -v base64 >/dev/null 2>&1; then\n echo "Error: base64 command is required" >&2\n return 1\n fi\n\n # Helper to log timing, only if DUMP_BASH_STATE_TIMING is set\n if [[ -n "\${DUMP_BASH_STATE_TIMING:-}" ]]; then\n # Timing setup\n if [[ "\${BASH_VERSION%%.*}" -ge 5 ]]; then\n # Use EPOCHREALTIME if available (bash 5+)\n local start_time=\${EPOCHREALTIME}\n local step_start=\${EPOCHREALTIME}\n _log_timing() {\n local step_name="$1"\n local now=\${EPOCHREALTIME}\n local step_duration=$(command awk "BEGIN {printf "%.3f", $now - $step_start}")\n local total_duration=$(command awk "BEGIN {printf "%.3f", $now - $start_time}")\n builtin printf "[TIMING] %-20s: %6.3fs (total: %6.3fs)\n" "$step_name" "$step_duration" "$total_duration" >&2\n step_start=$now\n }\n else\n # Fallback for older bash versions\n local start_time=$(command date +%s.%N)\n local step_start=$(command date +%s.%N)\n _log_timing() {\n local step_name="$1"\n local now=$(command date +%s.%N)\n local step_duration=$(command awk "BEGIN {printf "%.3f", $now - $step_start}")\n local total_duration=$(command awk "BEGIN {printf "%.3f", $now - $start_time}")\n builtin printf "[TIMING] %-20s: %6.3fs (total: %6.3fs)\n" "$step_name" "$step_duration" "$total_duration" >&2\n step_start=$now\n }\n fi\n else\n _log_timing() { :; }\n fi\n\n # Helper to append a line to output file\n _emit() {\n builtin printf '%s\n' "$1"\n }\n\n # Helper to safely encode and emit unsafe values\n _emit_encoded() {\n local content="$1"\n local var_name="$2"\n if [[ -n "$content" ]]; then\n builtin printf 'cursor_snap_%s=$(command base64 -d <<'''CURSOR_SNAP_EOF_%s'''\n' "$var_name" "$var_name"\n command base64 <<<"$content" | command tr -d '\n'\n builtin printf '\nCURSOR_SNAP_EOF_%s\n' "$var_name"\n builtin printf ')\n'\n builtin printf 'eval "$cursor_snap_%s"\n' "$var_name"\n fi\n }\n\n # Start fresh\n _log_timing "file_init"\n\n # Emit start marker at the very beginning of the output\n _emit "__CURSOR_BASH_STATE_START__"\n\n # Working directory\n _emit "$PWD"\n _log_timing "working_dir"\n\n # Environment variables (export statements)\n # Filter out: proxy settings, sandbox vars, and sudo askpass vars (session-specific)\n local env_vars\n env_vars=$(builtin export -p 2>/dev/null | command grep -viE '_proxy=|CURSOR_SANDBOX|SUDO_ASKPASS|CURSOR_ASKPASS' || true)\n _emit_encoded "$env_vars" "ENV_VARS_B64"\n _log_timing "environment"\n\n # POSIX shell options (replayable as set +/-o lines; exclude nounset which we enable locally)\n local posix_opts\n posix_opts=$(builtin shopt -po 2>/dev/null | command grep -v '^set -o nounset$' | command grep -v '^set +o nounset$' || true)\n _emit_encoded "$posix_opts" "POSIX_OPTS_B64"\n _log_timing "posix_options"\n\n # Bash shopt options (replayable as shopt -s/-u lines)\n local bash_opts\n bash_opts=$(builtin shopt -p 2>/dev/null || true)\n _emit_encoded "$bash_opts" "BASH_OPTS_B64"\n _log_timing "bash_options"\n\n # Functions: capture all functions\n local all_functions\n all_functions=$(builtin declare -f 2>/dev/null || true)\n _emit_encoded "$all_functions" "FUNCTIONS_B64"\n _log_timing "functions"\n\n # Aliases\n local aliases\n aliases=$(builtin alias -p 2>/dev/null || true)\n _emit_encoded "$aliases" "ALIASES_B64"\n _log_timing "aliases"\n\n # Done\n _emit "# end of bash state dump"\n _emit "__CURSOR_BASH_STATE_END__"\n _log_timing "finalize"\n}\n builtin printf '${r}\\n'; dump_bash_state`],o=Ue(e?.userTerminalHint);if(!o)throw new Error("Can't find Bash");const s=he(o,n,{env:t,detached:!0,stdio:["ignore","pipe","pipe"]},{type:"insecure_none"},e?.signal);let i="";s.stdout?.on("data",(e=>{i+=e.toString()})),await new Promise((e=>{s.on("close",(()=>{e(void 0)}))}));const a=fe(i,r),l=`${ge}\n`,c=`${ve}\n`;let u;a.startsWith(l)&&a.endsWith(c)?(u=a.slice(l.length),u=u.slice(0,-26)):u=`${process.cwd()}\n`;const{cwd:d,rest:p}=me(u),h="win32"===process.platform,m="win32"===process.platform?process.cwd():d;return new He(m,p,e?.userTerminalHint,h)}(t));case de.PowerShell:return new ze(async function(){return new Ve(process.cwd(),"")}());case de.ZshLight:return new ze(async function(e){const t={...process.env,...pe,...e?.env},r="__CURSOR_STATE_MARKER__",n=["-o","extendedglob","-ilc",`${rt} builtin printf '${r}\\n'; dump_zsh_state_light`],o=he(it(),n,{env:t,stdio:["ignore","pipe","pipe"],detached:!0},{type:"insecure_none"},e?.signal);let s="";o.stdout?.on("data",(e=>{s+=e.toString()})),await new Promise((e=>{o.on("close",(()=>{e(void 0)}))}));const i=fe(s,r),a=`${tt}\n`,l=i.startsWith(a)?i.slice(a.length):i,{cwd:c,rest:u}=me(l);return new at(c,u)}(t));default:return function(e){const t="win32"===process.platform,r=e?.shell??(t?Ge():void 0),n=process.cwd();return new Ke(n,{...e,shell:r})}(t)}}process.platform;const wt={perUser:{type:"insecure_none"}}}};