blade-code 0.11.11 → 0.11.12

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 (42) hide show
  1. package/dist/blade.js +2 -2
  2. package/dist/{chunk-95k32hmz.js → chunk-2jv3rnc6.js} +1 -1
  3. package/dist/{chunk-j9zvssrj.js → chunk-3gkp7g38.js} +1 -1
  4. package/dist/{chunk-wygp0nvt.js → chunk-47069895.js} +1 -1
  5. package/dist/{chunk-ye7ap23f.js → chunk-47ery2y8.js} +1 -1
  6. package/dist/{chunk-x52dt70w.js → chunk-4acgc3m0.js} +1 -1
  7. package/dist/{chunk-78qgrtk4.js → chunk-5bw11gqz.js} +1 -1
  8. package/dist/{chunk-0n1g2dh6.js → chunk-6b24qtzs.js} +1 -1
  9. package/dist/{chunk-jqn5eszc.js → chunk-7w1bkx5k.js} +1 -1
  10. package/dist/{chunk-3664nby3.js → chunk-ajmhptkw.js} +1 -1
  11. package/dist/{chunk-yst43yp8.js → chunk-akcv10na.js} +1 -1
  12. package/dist/{chunk-ny34sr3w.js → chunk-c1p9eh59.js} +1 -1
  13. package/dist/{chunk-g9yyfyrw.js → chunk-cw1g0bag.js} +1 -1
  14. package/dist/{chunk-ysdwp6wh.js → chunk-dgf2p4dh.js} +2 -2
  15. package/dist/{chunk-at4hrpmm.js → chunk-dxyxf0g0.js} +1 -1
  16. package/dist/{chunk-67c6n5ty.js → chunk-e707cydv.js} +1 -1
  17. package/dist/{chunk-73cryz5y.js → chunk-ec9b852q.js} +1 -1
  18. package/dist/{chunk-9rx6jfyh.js → chunk-et9k2wbj.js} +1 -1
  19. package/dist/{chunk-m136d1ba.js → chunk-f23r12hk.js} +1 -1
  20. package/dist/{chunk-8w8pvezn.js → chunk-g58kna1r.js} +1 -1
  21. package/dist/{chunk-xmbysst8.js → chunk-j1rtv3dn.js} +1 -1
  22. package/dist/{chunk-nxrm11ts.js → chunk-j4c34ef4.js} +1 -1
  23. package/dist/{chunk-qxd33dt5.js → chunk-jbfdab1x.js} +1 -1
  24. package/dist/{chunk-jkp77axa.js → chunk-k79wztgx.js} +1 -1
  25. package/dist/{chunk-ntw5zafw.js → chunk-kc5ncjv0.js} +1 -1
  26. package/dist/{chunk-x4pnjynf.js → chunk-m92ys3jt.js} +1 -1
  27. package/dist/{chunk-mq54wjcc.js → chunk-n27zabx2.js} +1 -1
  28. package/dist/{chunk-cc9ze9mt.js → chunk-nxpk3pth.js} +1 -1
  29. package/dist/{chunk-40k6zwvk.js → chunk-pjawa9e1.js} +3 -3
  30. package/dist/{chunk-q3krczzk.js → chunk-qr5h4p74.js} +1 -1
  31. package/dist/{chunk-1z4tmcba.js → chunk-rrk3a90p.js} +1 -1
  32. package/dist/chunk-s43ybz4g.js +1 -0
  33. package/dist/{chunk-y0fjkskd.js → chunk-swf9xpnd.js} +1 -1
  34. package/dist/{chunk-j60m601r.js → chunk-tkgjzz7t.js} +1 -1
  35. package/dist/{chunk-wseph7sb.js → chunk-v4ge4d5j.js} +1 -1
  36. package/dist/{chunk-n8adzxrc.js → chunk-wha6g4ar.js} +1 -1
  37. package/dist/{chunk-s6fhvw6p.js → chunk-wrbpcyzq.js} +1 -1
  38. package/dist/{chunk-grw0mhs0.js → chunk-xzpjnvmn.js} +1 -1
  39. package/dist/chunk-zbts11y0.js +1 -0
  40. package/package.json +1 -1
  41. package/dist/chunk-mds35hhd.js +0 -1
  42. package/dist/chunk-t16n41hp.js +0 -1
@@ -1,2 +1,2 @@
1
- import{M as N,ka as _,la as z}from"./chunk-40k6zwvk.js";import{$d as R,Xc as I,Zd as g,cd as x,dd as X,ed as B,fd as V,gd as b,wd as A}from"./chunk-ntw5zafw.js";import{Di as M,Ei as O}from"./chunk-qxd33dt5.js";import{Mutex as j}from"async-mutex";class C extends Error{limit;resource="resident_runtimes";retryable=!0;constructor(q){super("Session runtime capacity is full");this.limit=q;this.name="SessionRuntimeCapacityError"}}class W extends Error{constructor(){super("Session runtime residency is closed");this.name="SessionRuntimeResidencyClosedError"}}class Y extends Error{constructor(q){super(`Session runtime residency already owns key: ${q}`);this.name="SessionRuntimeResidencyConflictError"}}class k{maxResident;idleMs;now;residents=new Map;reservations=new Map;operations=new j;nextGeneration=1;closed=!1;constructor(q){if(!M(q.maxResident))throw Error("Invalid max resident Session Runtime limit");if(!O(q.idleMs))throw Error("Invalid Session Runtime idle timeout");this.maxResident=q.maxResident,this.idleMs=q.idleMs,this.now=q.now??Date.now}acquire(q){let $=this.residents.get(q);if(!$||$.poisoned)return;return $.pins++,$.lastUsedAt=this.now(),this.createLease($)}owns(q,$){let Q=this.residents.get(q);return Boolean(Q&&($===void 0||Q.value===$))}async reserve(q,$){if(!q.trim())throw Error("Session runtime residency key must not be blank");return this.operations.runExclusive(async()=>{if(this.closed)throw new W;if(this.residents.has(q)||this.reservations.has(q))throw new Y(q);while(this.retainedCount()>=this.maxResident){if(!$.allowEviction)throw new C(this.maxResident);let P=this.oldestEvictableWebResident();if(!P)throw new C(this.maxResident);await this.disposeResident(P,!0)}let Q={generation:this.allocateGeneration(),surface:$.surface};return this.reservations.set(q,Q),this.createReservation(q,Q)})}async remove(q,$){return this.operations.runExclusive(async()=>{let Q=this.residents.get(q);if(!Q||$!==void 0&&Q.value!==$)return!1;if(Q.pins>0)return!1;return await this.disposeResident(Q,!0),!0})}async forget(q,$){return this.operations.runExclusive(async()=>{let Q=this.residents.get(q);if(!Q||$!==void 0&&Q.value!==$||Q.pins>0)return!1;return this.residents.delete(q),!0})}async sweepIdle(){return this.operations.runExclusive(async()=>{if(this.closed)return 0;let q=0;while(!0){let $=this.oldestIdleWebResident();if(!$)return q;await this.disposeResident($,!0),q++}})}async disposeAll(){await this.operations.runExclusive(async()=>{this.closed=!0,this.reservations.clear();let q;for(let $ of[...this.residents.values()])try{await this.disposeResident($,!1)}catch(Q){q??=Q}if(this.residents.clear(),q!==void 0)throw q})}getStats(){let q=0;for(let $ of this.residents.values())if($.pins>0)q++;return{resident:this.residents.size,reserved:this.reservations.size,pinned:q,maxResident:this.maxResident}}retainedCount(){return this.residents.size+this.reservations.size}allocateGeneration(){let q=this.nextGeneration;return this.nextGeneration=this.nextGeneration===Number.MAX_SAFE_INTEGER?1:this.nextGeneration+1,q}createReservation(q,$){let Q=!1;return{commit:(P)=>{if(Q)throw new Y(q);if(P.key!==q||P.surface!==$.surface||this.reservations.get(q)!==$||this.closed)throw this.reservations.delete(q),Q=!0,this.closed?new W:new Y(q);this.reservations.delete(q);let L={...P,generation:$.generation,pins:1,lastUsedAt:this.now(),poisoned:!1};return this.residents.set(q,L),Q=!0,this.createLease(L)},cancel:()=>{if(Q)return;if(this.reservations.get(q)===$)this.reservations.delete(q);Q=!0}}}createLease(q){let $=!1;return{value:q.value,release:()=>{if($)return;$=!0;let Q=this.residents.get(q.key);if(Q!==q||Q.generation!==q.generation)return;Q.pins=Math.max(0,Q.pins-1),Q.lastUsedAt=this.now()}}}oldestEvictableWebResident(){return this.sortedWebResidents().find((q)=>this.canEvict(q))}oldestIdleWebResident(){let q=this.now();return this.sortedWebResidents().find(($)=>q-$.lastUsedAt>=this.idleMs&&this.canEvict($))}sortedWebResidents(){return[...this.residents.values()].filter((q)=>q.surface==="web").sort((q,$)=>q.lastUsedAt-$.lastUsedAt||q.generation-$.generation)}canEvict(q){if(q.pins>0||q.poisoned)return!1;try{return q.canEvict()}catch{return!1}}async disposeResident(q,$){if(this.residents.get(q.key)!==q)return;this.residents.delete(q.key);try{await q.dispose()}catch(Q){if($&&!this.closed&&!this.residents.has(q.key))q.lastUsedAt=this.now(),q.poisoned=!0,this.residents.set(q.key,q);throw Q}}}function f(q){if(!q||typeof q!=="object"||Array.isArray(q))return;let $=q,{code:Q,kind:P,limit:L,reason:D,scope:J}=$;if(Q!=="tool_busy"&&Q!=="tool_batch_full"||D!=="queue_full"&&D!=="wait_timeout"&&D!=="turn_limit"||J!=="global"&&J!=="session"||typeof $.retryable!=="boolean"||!Number.isSafeInteger(L)||L<=0||P!==void 0&&P!=="readonly"&&P!=="write"&&P!=="execute")return;return{code:Q,reason:D,scope:J,retryable:$.retryable,...P===void 0?{}:{kind:P},limit:L}}function T(q,$){if(!$||typeof $!=="object")return $;let Q={...$},P=f(Q.tool_admission);if(P)Q.tool_admission=P;else delete Q.tool_admission;if(N(q)){let J=Q.browser&&typeof Q.browser==="object"&&!Array.isArray(Q.browser)?Q.browser:{},h={},G=(Z,F,K)=>{let H=J[Z];if(typeof H==="string"&&Buffer.byteLength(H)<=F&&(!K||K.test(H)))h[Z]=H};if(G("action",64),G("status",16,/^(?:ok|warning|error)$/),G("pageId",V,/^browser_page_[a-f0-9-]+$/),G("snapshotId",V,/^browser_snapshot_[a-f0-9-]+$/),G("origin",X),G("candidateOrigin",X),G("url",x),G("title",B),G("errorCode",64,/^browser_[a-z_]+$/),typeof J.truncated==="boolean")h.truncated=J.truncated;if(typeof J.actionApplied==="boolean"||J.actionApplied==="unknown")h.actionApplied=J.actionApplied;if(typeof J.sideEffectsUncertain==="boolean")h.sideEffectsUncertain=J.sideEffectsUncertain;if(typeof J.diagnosticCount==="number"&&Number.isSafeInteger(J.diagnosticCount)&&J.diagnosticCount>=0&&J.diagnosticCount<=I)h.diagnosticCount=J.diagnosticCount;if(J.interaction&&typeof J.interaction==="object"&&!Array.isArray(J.interaction)){let Z=J.interaction,F=new Set(["click","hover","fill","type","press","select","check","uncheck","scroll"]);if(typeof Z.action==="string"&&F.has(Z.action)){let K={action:Z.action};if(typeof Z.ref==="string"&&Buffer.byteLength(Z.ref)<=b&&/^[a-z][a-z0-9]*$/.test(Z.ref))K.ref=Z.ref;let H=(U,E,S)=>typeof U==="number"&&Number.isFinite(U)&&U>=E&&U<=S;if(Z.viewport&&typeof Z.viewport==="object"&&!Array.isArray(Z.viewport)){let U=Z.viewport;if(H(U.width,1,16384)&&H(U.height,1,16384))K.viewport={width:U.width,height:U.height}}if(Z.targetBox&&typeof Z.targetBox==="object"&&!Array.isArray(Z.targetBox)){let U=Z.targetBox;if(H(U.x,-16384,32768)&&H(U.y,-16384,32768)&&H(U.width,0,16384)&&H(U.height,0,16384))K.targetBox={x:U.x,y:U.y,width:U.width,height:U.height}}h.interaction=K}}if(J.artifact&&typeof J.artifact==="object"&&!Array.isArray(J.artifact)){let Z=J.artifact;if(typeof Z.id==="string"&&/^[a-f0-9]{64}$/.test(Z.id)&&Z.sha256===Z.id&&Z.kind==="image"&&Z.mimeType==="image/png"&&typeof Z.size==="number"&&Number.isSafeInteger(Z.size)&&Z.size>=0&&Z.size<=A&&Z.persisted===!0)h.artifact={id:Z.id,sha256:Z.sha256,kind:Z.kind,mimeType:Z.mimeType,size:Z.size,persisted:!0,...typeof Z.path==="string"&&Buffer.byteLength(Z.path)<=8192?{path:Z.path}:{}}}return{...typeof Q.summary==="string"?{summary:Q.summary.slice(0,512)}:{},browser:h,...P?{tool_admission:P}:{}}}if(q==="Bash"){let J={},h=["message","signal","status","summary"],G=["aborted","acp_mode","admission_failed","auto_backgrounded","background","capture_truncated","finalization_failed","has_stderr","output_accounting_complete","output_truncated","projection_truncated","sandbox_required","sandboxed","stderr_projection_truncated","stdout_projection_truncated","terminal_output_merged","timeout"],Z=["execution_time","foreground_budget_ms","pid","raw_output_bytes","stderr_length","stderr_omitted_bytes","stderr_retained_bytes","stderr_total_bytes","stdout_length","stdout_omitted_bytes","stdout_retained_bytes","stdout_total_bytes"];for(let K of h){let H=Q[K];if(typeof H==="string")J[K]=H.slice(0,8192)}for(let K of G){let H=Q[K];if(typeof H==="boolean")J[K]=H}for(let K of Z){let H=Q[K];if(typeof H==="number"&&Number.isSafeInteger(H)&&H>=0)J[K]=H}if(Q.exit_code===null||typeof Q.exit_code==="number"&&Number.isSafeInteger(Q.exit_code))J.exit_code=Q.exit_code;if(Q.terminal_transport==="local"||Q.terminal_transport==="acp"||Q.terminal_transport==="local_fallback")J.terminal_transport=Q.terminal_transport;if(Q.background_reason==="explicit"||Q.background_reason==="foreground_budget")J.background_reason=Q.background_reason;for(let K of["bash_id","shell_id"]){let H=Q[K];if(typeof H==="string"&&H.length<=128&&/^bash_[A-Za-z0-9-]+$/.test(H))J[K]=H}if(P)J.tool_admission=P;let F=Q.background_shell_admission;if(F&&typeof F==="object"&&!Array.isArray(F)){let K=F;if(K.code==="background_shell_busy"&&(K.scope==="session"||K.scope==="global")&&K.retryable===!0&&Number.isSafeInteger(K.limit)&&K.limit>0)J.background_shell_admission={code:K.code,scope:K.scope,retryable:K.retryable,limit:K.limit}}return J}let L=200000,D=(J,h)=>typeof J==="number"&&Number.isSafeInteger(J)&&J>=0&&J<=h?J:0;if(typeof Q.oldContent==="string"&&Q.oldContent.length>L)delete Q.oldContent;if(typeof Q.newContent==="string"&&Q.newContent.length>L)delete Q.newContent;if(Q.mcpResult&&typeof Q.mcpResult==="object"&&!Array.isArray(Q.mcpResult)){let J=Q.mcpResult,h=Array.isArray(J.artifacts)?J.artifacts.slice(0,64).flatMap((G)=>{if(!G||typeof G!=="object"||Array.isArray(G))return[];let Z=G,F=new Set(["text","image","audio","resource"]);if(typeof Z.id!=="string"||!/^[a-f0-9]{64}$/.test(Z.id)||typeof Z.sha256!=="string"||Z.sha256!==Z.id||typeof Z.kind!=="string"||!F.has(Z.kind)||D(Z.size,67108864)!==Z.size||typeof Z.persisted!=="boolean")return[];return[{id:Z.id.slice(0,128),sha256:Z.sha256.slice(0,128),kind:Z.kind,size:Z.size,persisted:Z.persisted,...typeof Z.mimeType==="string"?{mimeType:Z.mimeType.slice(0,256)}:{},...typeof Z.sourceUri==="string"?{sourceUri:Z.sourceUri.slice(0,8192)}:{},...typeof Z.path==="string"?{path:Z.path.slice(0,8192)}:{}}]}):[];Q.mcpResult={isError:J.isError===!0,contentCount:D(J.contentCount,64),textBytes:D(J.textBytes,4194304),structuredBytes:D(J.structuredBytes,4194304),artifactCount:D(J.artifactCount,64),truncated:J.truncated===!0,binaryOmitted:J.binaryOmitted===!0,artifacts:h}}else delete Q.mcpResult;return Q}var y=(q,$)=>Object.fromEntries($.map((Q)=>[String(Q),q[Q]])),w=(q,$,Q,P=!1)=>({type:$,messageScoped:P,properties:y(q,Q)});function m(q){switch(q.kind){case"tool_start":if(!("function"in q.toolCall))return;return{type:"tool.start",messageScoped:!0,toolName:q.toolCall.function.name,properties:{toolName:q.toolCall.function.name,toolCallId:q.toolCall.id,arguments:q.toolCall.function.arguments,toolKind:q.toolKind}};case"tool_progress":if(!("function"in q.toolCall))return;return{type:"tool.progress",messageScoped:!0,toolName:q.toolCall.function.name,properties:{toolName:q.toolCall.function.name,toolCallId:q.toolCall.id,...q.update}};case"tool_result":{if(!("function"in q.toolCall))return;let $=q.toolCall.function.name;return{type:"tool.result",messageScoped:!0,toolName:$,properties:{toolName:$,toolCallId:q.toolCall.id,success:q.result.success,summary:q.result.metadata?.summary,output:z(R(_($,q.result),g)),metadata:T($,q.result.metadata)}}}case"provider_admission":return w(q,"provider.admission",["phase","requestClass","resource","scope","reason","queuePosition","queueDepth","inFlight","limit","waitMs","maxWaitMs","recoveryRemainingMs"]);case"provider_circuit":return w(q,"provider.circuit",["phase","reason","statusCode","retryAfterMs","nextProbeAt","openDurationMs","sampleCount","failureCount","recoveryRemainingMs"]);case"provider_retry":return w(q,"provider.retry",["phase","attempt","maxRetries","reason","statusCode","delayMs","nextRetryAt","mode","recoveryBudgetMs","recoveryElapsedMs","recoveryRemainingMs","exhaustedBy"]);case"provider_stall":return w(q,"provider.stall",["phase","stallCount","durationMs","warningAfterMs","timeoutMs","outputStarted"]);case"action_stationarity":return w(q,"action.stationarity",["phase","toolName","runLength","nudgeThreshold","haltThreshold","progressAware"]);case"mcp_catalog_changed":return w(q,"mcp.catalog.changed",["revision","serverName","added","removed","updated"],!0);case"mcp_content_changed":return w(q,"mcp.content.changed",["revision","serverName","contentKind","added","removed","updated"],!0);case"mcp_resource_updated":return w(q,"mcp.resource.updated",["revision","serverName","uri"],!0);case"mcp_connection_changed":return w(q,"mcp.connection.changed",["revision","serverName","phase","reason","attempt","maxAttempts","nextRetryAt","error"],!0);case"mcp_log":return w(q,"mcp.log",["revision","serverName","level","logger","message","projectedBytes","dataSha256","truncated","detailsOmitted","timestamp","synthetic"],!0);case"mcp_instructions_changed":return w(q,"mcp.instructions.changed",["revision","serverName","action","reason","text","sourceBytes","projectedBytes","sha256","truncated","detailsOmitted"],!0);case"mcp_task_changed":return w(q,"mcp.task.changed",["revision","taskId","serverName","toolName","status","statusMessage","createdAt","updatedAt","completedAt","hasResult","error"],!0);case"project_rules_loaded":return w(q,"project.rules.loaded",["files","triggerPaths","blockedWrite"],!0);default:return}}function a(q,$={}){let Q=m(q);if(!Q||!$.omitUndefined)return Q;return{...Q,properties:Object.fromEntries(Object.entries(Q.properties).filter(([,P])=>P!==void 0))}}
1
+ import{M as N,ka as _,la as z}from"./chunk-pjawa9e1.js";import{$d as R,Xc as I,Zd as g,cd as x,dd as X,ed as B,fd as V,gd as b,wd as A}from"./chunk-kc5ncjv0.js";import{Di as M,Ei as O}from"./chunk-jbfdab1x.js";import{Mutex as j}from"async-mutex";class C extends Error{limit;resource="resident_runtimes";retryable=!0;constructor(q){super("Session runtime capacity is full");this.limit=q;this.name="SessionRuntimeCapacityError"}}class W extends Error{constructor(){super("Session runtime residency is closed");this.name="SessionRuntimeResidencyClosedError"}}class Y extends Error{constructor(q){super(`Session runtime residency already owns key: ${q}`);this.name="SessionRuntimeResidencyConflictError"}}class k{maxResident;idleMs;now;residents=new Map;reservations=new Map;operations=new j;nextGeneration=1;closed=!1;constructor(q){if(!M(q.maxResident))throw Error("Invalid max resident Session Runtime limit");if(!O(q.idleMs))throw Error("Invalid Session Runtime idle timeout");this.maxResident=q.maxResident,this.idleMs=q.idleMs,this.now=q.now??Date.now}acquire(q){let $=this.residents.get(q);if(!$||$.poisoned)return;return $.pins++,$.lastUsedAt=this.now(),this.createLease($)}owns(q,$){let Q=this.residents.get(q);return Boolean(Q&&($===void 0||Q.value===$))}async reserve(q,$){if(!q.trim())throw Error("Session runtime residency key must not be blank");return this.operations.runExclusive(async()=>{if(this.closed)throw new W;if(this.residents.has(q)||this.reservations.has(q))throw new Y(q);while(this.retainedCount()>=this.maxResident){if(!$.allowEviction)throw new C(this.maxResident);let P=this.oldestEvictableWebResident();if(!P)throw new C(this.maxResident);await this.disposeResident(P,!0)}let Q={generation:this.allocateGeneration(),surface:$.surface};return this.reservations.set(q,Q),this.createReservation(q,Q)})}async remove(q,$){return this.operations.runExclusive(async()=>{let Q=this.residents.get(q);if(!Q||$!==void 0&&Q.value!==$)return!1;if(Q.pins>0)return!1;return await this.disposeResident(Q,!0),!0})}async forget(q,$){return this.operations.runExclusive(async()=>{let Q=this.residents.get(q);if(!Q||$!==void 0&&Q.value!==$||Q.pins>0)return!1;return this.residents.delete(q),!0})}async sweepIdle(){return this.operations.runExclusive(async()=>{if(this.closed)return 0;let q=0;while(!0){let $=this.oldestIdleWebResident();if(!$)return q;await this.disposeResident($,!0),q++}})}async disposeAll(){await this.operations.runExclusive(async()=>{this.closed=!0,this.reservations.clear();let q;for(let $ of[...this.residents.values()])try{await this.disposeResident($,!1)}catch(Q){q??=Q}if(this.residents.clear(),q!==void 0)throw q})}getStats(){let q=0;for(let $ of this.residents.values())if($.pins>0)q++;return{resident:this.residents.size,reserved:this.reservations.size,pinned:q,maxResident:this.maxResident}}retainedCount(){return this.residents.size+this.reservations.size}allocateGeneration(){let q=this.nextGeneration;return this.nextGeneration=this.nextGeneration===Number.MAX_SAFE_INTEGER?1:this.nextGeneration+1,q}createReservation(q,$){let Q=!1;return{commit:(P)=>{if(Q)throw new Y(q);if(P.key!==q||P.surface!==$.surface||this.reservations.get(q)!==$||this.closed)throw this.reservations.delete(q),Q=!0,this.closed?new W:new Y(q);this.reservations.delete(q);let L={...P,generation:$.generation,pins:1,lastUsedAt:this.now(),poisoned:!1};return this.residents.set(q,L),Q=!0,this.createLease(L)},cancel:()=>{if(Q)return;if(this.reservations.get(q)===$)this.reservations.delete(q);Q=!0}}}createLease(q){let $=!1;return{value:q.value,release:()=>{if($)return;$=!0;let Q=this.residents.get(q.key);if(Q!==q||Q.generation!==q.generation)return;Q.pins=Math.max(0,Q.pins-1),Q.lastUsedAt=this.now()}}}oldestEvictableWebResident(){return this.sortedWebResidents().find((q)=>this.canEvict(q))}oldestIdleWebResident(){let q=this.now();return this.sortedWebResidents().find(($)=>q-$.lastUsedAt>=this.idleMs&&this.canEvict($))}sortedWebResidents(){return[...this.residents.values()].filter((q)=>q.surface==="web").sort((q,$)=>q.lastUsedAt-$.lastUsedAt||q.generation-$.generation)}canEvict(q){if(q.pins>0||q.poisoned)return!1;try{return q.canEvict()}catch{return!1}}async disposeResident(q,$){if(this.residents.get(q.key)!==q)return;this.residents.delete(q.key);try{await q.dispose()}catch(Q){if($&&!this.closed&&!this.residents.has(q.key))q.lastUsedAt=this.now(),q.poisoned=!0,this.residents.set(q.key,q);throw Q}}}function f(q){if(!q||typeof q!=="object"||Array.isArray(q))return;let $=q,{code:Q,kind:P,limit:L,reason:D,scope:J}=$;if(Q!=="tool_busy"&&Q!=="tool_batch_full"||D!=="queue_full"&&D!=="wait_timeout"&&D!=="turn_limit"||J!=="global"&&J!=="session"||typeof $.retryable!=="boolean"||!Number.isSafeInteger(L)||L<=0||P!==void 0&&P!=="readonly"&&P!=="write"&&P!=="execute")return;return{code:Q,reason:D,scope:J,retryable:$.retryable,...P===void 0?{}:{kind:P},limit:L}}function T(q,$){if(!$||typeof $!=="object")return $;let Q={...$},P=f(Q.tool_admission);if(P)Q.tool_admission=P;else delete Q.tool_admission;if(N(q)){let J=Q.browser&&typeof Q.browser==="object"&&!Array.isArray(Q.browser)?Q.browser:{},h={},G=(Z,F,K)=>{let H=J[Z];if(typeof H==="string"&&Buffer.byteLength(H)<=F&&(!K||K.test(H)))h[Z]=H};if(G("action",64),G("status",16,/^(?:ok|warning|error)$/),G("pageId",V,/^browser_page_[a-f0-9-]+$/),G("snapshotId",V,/^browser_snapshot_[a-f0-9-]+$/),G("origin",X),G("candidateOrigin",X),G("url",x),G("title",B),G("errorCode",64,/^browser_[a-z_]+$/),typeof J.truncated==="boolean")h.truncated=J.truncated;if(typeof J.actionApplied==="boolean"||J.actionApplied==="unknown")h.actionApplied=J.actionApplied;if(typeof J.sideEffectsUncertain==="boolean")h.sideEffectsUncertain=J.sideEffectsUncertain;if(typeof J.diagnosticCount==="number"&&Number.isSafeInteger(J.diagnosticCount)&&J.diagnosticCount>=0&&J.diagnosticCount<=I)h.diagnosticCount=J.diagnosticCount;if(J.interaction&&typeof J.interaction==="object"&&!Array.isArray(J.interaction)){let Z=J.interaction,F=new Set(["click","hover","fill","type","press","select","check","uncheck","scroll"]);if(typeof Z.action==="string"&&F.has(Z.action)){let K={action:Z.action};if(typeof Z.ref==="string"&&Buffer.byteLength(Z.ref)<=b&&/^[a-z][a-z0-9]*$/.test(Z.ref))K.ref=Z.ref;let H=(U,E,S)=>typeof U==="number"&&Number.isFinite(U)&&U>=E&&U<=S;if(Z.viewport&&typeof Z.viewport==="object"&&!Array.isArray(Z.viewport)){let U=Z.viewport;if(H(U.width,1,16384)&&H(U.height,1,16384))K.viewport={width:U.width,height:U.height}}if(Z.targetBox&&typeof Z.targetBox==="object"&&!Array.isArray(Z.targetBox)){let U=Z.targetBox;if(H(U.x,-16384,32768)&&H(U.y,-16384,32768)&&H(U.width,0,16384)&&H(U.height,0,16384))K.targetBox={x:U.x,y:U.y,width:U.width,height:U.height}}h.interaction=K}}if(J.artifact&&typeof J.artifact==="object"&&!Array.isArray(J.artifact)){let Z=J.artifact;if(typeof Z.id==="string"&&/^[a-f0-9]{64}$/.test(Z.id)&&Z.sha256===Z.id&&Z.kind==="image"&&Z.mimeType==="image/png"&&typeof Z.size==="number"&&Number.isSafeInteger(Z.size)&&Z.size>=0&&Z.size<=A&&Z.persisted===!0)h.artifact={id:Z.id,sha256:Z.sha256,kind:Z.kind,mimeType:Z.mimeType,size:Z.size,persisted:!0,...typeof Z.path==="string"&&Buffer.byteLength(Z.path)<=8192?{path:Z.path}:{}}}return{...typeof Q.summary==="string"?{summary:Q.summary.slice(0,512)}:{},browser:h,...P?{tool_admission:P}:{}}}if(q==="Bash"){let J={},h=["message","signal","status","summary"],G=["aborted","acp_mode","admission_failed","auto_backgrounded","background","capture_truncated","finalization_failed","has_stderr","output_accounting_complete","output_truncated","projection_truncated","sandbox_required","sandboxed","stderr_projection_truncated","stdout_projection_truncated","terminal_output_merged","timeout"],Z=["execution_time","foreground_budget_ms","pid","raw_output_bytes","stderr_length","stderr_omitted_bytes","stderr_retained_bytes","stderr_total_bytes","stdout_length","stdout_omitted_bytes","stdout_retained_bytes","stdout_total_bytes"];for(let K of h){let H=Q[K];if(typeof H==="string")J[K]=H.slice(0,8192)}for(let K of G){let H=Q[K];if(typeof H==="boolean")J[K]=H}for(let K of Z){let H=Q[K];if(typeof H==="number"&&Number.isSafeInteger(H)&&H>=0)J[K]=H}if(Q.exit_code===null||typeof Q.exit_code==="number"&&Number.isSafeInteger(Q.exit_code))J.exit_code=Q.exit_code;if(Q.terminal_transport==="local"||Q.terminal_transport==="acp"||Q.terminal_transport==="local_fallback")J.terminal_transport=Q.terminal_transport;if(Q.background_reason==="explicit"||Q.background_reason==="foreground_budget")J.background_reason=Q.background_reason;for(let K of["bash_id","shell_id"]){let H=Q[K];if(typeof H==="string"&&H.length<=128&&/^bash_[A-Za-z0-9-]+$/.test(H))J[K]=H}if(P)J.tool_admission=P;let F=Q.background_shell_admission;if(F&&typeof F==="object"&&!Array.isArray(F)){let K=F;if(K.code==="background_shell_busy"&&(K.scope==="session"||K.scope==="global")&&K.retryable===!0&&Number.isSafeInteger(K.limit)&&K.limit>0)J.background_shell_admission={code:K.code,scope:K.scope,retryable:K.retryable,limit:K.limit}}return J}let L=200000,D=(J,h)=>typeof J==="number"&&Number.isSafeInteger(J)&&J>=0&&J<=h?J:0;if(typeof Q.oldContent==="string"&&Q.oldContent.length>L)delete Q.oldContent;if(typeof Q.newContent==="string"&&Q.newContent.length>L)delete Q.newContent;if(Q.mcpResult&&typeof Q.mcpResult==="object"&&!Array.isArray(Q.mcpResult)){let J=Q.mcpResult,h=Array.isArray(J.artifacts)?J.artifacts.slice(0,64).flatMap((G)=>{if(!G||typeof G!=="object"||Array.isArray(G))return[];let Z=G,F=new Set(["text","image","audio","resource"]);if(typeof Z.id!=="string"||!/^[a-f0-9]{64}$/.test(Z.id)||typeof Z.sha256!=="string"||Z.sha256!==Z.id||typeof Z.kind!=="string"||!F.has(Z.kind)||D(Z.size,67108864)!==Z.size||typeof Z.persisted!=="boolean")return[];return[{id:Z.id.slice(0,128),sha256:Z.sha256.slice(0,128),kind:Z.kind,size:Z.size,persisted:Z.persisted,...typeof Z.mimeType==="string"?{mimeType:Z.mimeType.slice(0,256)}:{},...typeof Z.sourceUri==="string"?{sourceUri:Z.sourceUri.slice(0,8192)}:{},...typeof Z.path==="string"?{path:Z.path.slice(0,8192)}:{}}]}):[];Q.mcpResult={isError:J.isError===!0,contentCount:D(J.contentCount,64),textBytes:D(J.textBytes,4194304),structuredBytes:D(J.structuredBytes,4194304),artifactCount:D(J.artifactCount,64),truncated:J.truncated===!0,binaryOmitted:J.binaryOmitted===!0,artifacts:h}}else delete Q.mcpResult;return Q}var y=(q,$)=>Object.fromEntries($.map((Q)=>[String(Q),q[Q]])),w=(q,$,Q,P=!1)=>({type:$,messageScoped:P,properties:y(q,Q)});function m(q){switch(q.kind){case"tool_start":if(!("function"in q.toolCall))return;return{type:"tool.start",messageScoped:!0,toolName:q.toolCall.function.name,properties:{toolName:q.toolCall.function.name,toolCallId:q.toolCall.id,arguments:q.toolCall.function.arguments,toolKind:q.toolKind}};case"tool_progress":if(!("function"in q.toolCall))return;return{type:"tool.progress",messageScoped:!0,toolName:q.toolCall.function.name,properties:{toolName:q.toolCall.function.name,toolCallId:q.toolCall.id,...q.update}};case"tool_result":{if(!("function"in q.toolCall))return;let $=q.toolCall.function.name;return{type:"tool.result",messageScoped:!0,toolName:$,properties:{toolName:$,toolCallId:q.toolCall.id,success:q.result.success,summary:q.result.metadata?.summary,output:z(R(_($,q.result),g)),metadata:T($,q.result.metadata)}}}case"provider_admission":return w(q,"provider.admission",["phase","requestClass","resource","scope","reason","queuePosition","queueDepth","inFlight","limit","waitMs","maxWaitMs","recoveryRemainingMs"]);case"provider_circuit":return w(q,"provider.circuit",["phase","reason","statusCode","retryAfterMs","nextProbeAt","openDurationMs","sampleCount","failureCount","recoveryRemainingMs"]);case"provider_retry":return w(q,"provider.retry",["phase","attempt","maxRetries","reason","statusCode","delayMs","nextRetryAt","mode","recoveryBudgetMs","recoveryElapsedMs","recoveryRemainingMs","exhaustedBy"]);case"provider_stall":return w(q,"provider.stall",["phase","stallCount","durationMs","warningAfterMs","timeoutMs","outputStarted"]);case"action_stationarity":return w(q,"action.stationarity",["phase","toolName","runLength","nudgeThreshold","haltThreshold","progressAware"]);case"mcp_catalog_changed":return w(q,"mcp.catalog.changed",["revision","serverName","added","removed","updated"],!0);case"mcp_content_changed":return w(q,"mcp.content.changed",["revision","serverName","contentKind","added","removed","updated"],!0);case"mcp_resource_updated":return w(q,"mcp.resource.updated",["revision","serverName","uri"],!0);case"mcp_connection_changed":return w(q,"mcp.connection.changed",["revision","serverName","phase","reason","attempt","maxAttempts","nextRetryAt","error"],!0);case"mcp_log":return w(q,"mcp.log",["revision","serverName","level","logger","message","projectedBytes","dataSha256","truncated","detailsOmitted","timestamp","synthetic"],!0);case"mcp_instructions_changed":return w(q,"mcp.instructions.changed",["revision","serverName","action","reason","text","sourceBytes","projectedBytes","sha256","truncated","detailsOmitted"],!0);case"mcp_task_changed":return w(q,"mcp.task.changed",["revision","taskId","serverName","toolName","status","statusMessage","createdAt","updatedAt","completedAt","hasResult","error"],!0);case"project_rules_loaded":return w(q,"project.rules.loaded",["files","triggerPaths","blockedWrite"],!0);default:return}}function a(q,$={}){let Q=m(q);if(!Q||!$.omitUndefined)return Q;return{...Q,properties:Object.fromEntries(Object.entries(Q.properties).filter(([,P])=>P!==void 0))}}
2
2
  export{C as w,k as x,T as y,a as z};
@@ -1 +1 @@
1
- import{Af as b,Bf as c,zf as a}from"./chunk-at4hrpmm.js";import"./chunk-yjdyzb5z.js";import"./chunk-67c6n5ty.js";import"./chunk-x6k5ye1z.js";import"./chunk-v508x7cg.js";import"./chunk-7ajvrtb3.js";import"./chunk-qxd33dt5.js";import"./chunk-b22ab7yw.js";import"./chunk-amabfzc8.js";import"./chunk-m2x6pb4f.js";import"./chunk-saz6mwpq.js";import"./chunk-xhwdac1j.js";import"./chunk-0eajnhrj.js";import"./chunk-ny34sr3w.js";import"./chunk-asgmmaec.js";import"./chunk-ed2hdrwe.js";import"./chunk-gmpsfkgg.js";export{a as validatePermissions,c as validateOutput,b as loadConfiguration};
1
+ import{Af as b,Bf as c,zf as a}from"./chunk-dxyxf0g0.js";import"./chunk-yjdyzb5z.js";import"./chunk-e707cydv.js";import"./chunk-x6k5ye1z.js";import"./chunk-v508x7cg.js";import"./chunk-7ajvrtb3.js";import"./chunk-jbfdab1x.js";import"./chunk-b22ab7yw.js";import"./chunk-amabfzc8.js";import"./chunk-m2x6pb4f.js";import"./chunk-saz6mwpq.js";import"./chunk-xhwdac1j.js";import"./chunk-0eajnhrj.js";import"./chunk-c1p9eh59.js";import"./chunk-asgmmaec.js";import"./chunk-ed2hdrwe.js";import"./chunk-gmpsfkgg.js";export{a as validatePermissions,c as validateOutput,b as loadConfiguration};
@@ -1,4 +1,4 @@
1
- import{Ka as zJ}from"./chunk-nad5spvc.js";import{Na as T,Oa as t0,Ta as CW,Ua as cY,Va as o0}from"./chunk-m136d1ba.js";import{Ab as DV,Wa as Y5,Za as i3,bb as $9,cb as AX,db as CX,fb as KV,hb as GV,ib as T9}from"./chunk-whxkwaz1.js";import{Bb as t5,Cb as m7,Db as J1,Eb as r7,Fb as K2,Gb as AY,Hb as f1,Ib as BY,Jb as TY,Kb as wY,Lb as RY,Mb as PY,Nb as jQ,Pb as LX,Rb as V0,Tb as w2,Wb as l6,Yb as O3,Zb as i6,_b as r6,ac as RZ,bc as R$,hc as GW,ic as K8,jc as DW,kc as qW,lc as OX,nc as x1,oc as aX,tc as VQ,wc as HQ}from"./chunk-wseph7sb.js";import{$c as h4,Cc as v$,Dc as pX,Ec as oJ,Fc as xJ,Gc as A1,Hc as XZ,Ic as L0,Jc as f2,Kc as O1,Lc as S4,Mc as v9,Nc as p6,Oc as c6,Pc as OY,Qc as LY,Rc as cX,Sc as UJ,Sd as V8,Tc as j1,Uc as VJ,Ud as P0,Vc as l8,Vd as _$,Wc as e$,Xc as $1,Yc as l2,Zc as c2,_c as i2,ad as g4,bd as d2,be as NW,cd as DJ,ce as MX,dd as m2,ed as i8,fd as E1,fe as WQ,gd as s1,hd as p2,id as o1,jd as t1,kd as u4,ke as rX,ld as e1,le as nX,md as d4,nd as m4,ne as o,od as k$,pd as p4,qd as EJ,rd as r2,sd as c4,td as l4,ud as i4,vd as r4,wd as MJ,xd as AJ,zd as CJ}from"./chunk-ntw5zafw.js";import{oe as l,pe as CQ,qe as TQ,re as K6,te as q2}from"./chunk-skktstg8.js";import{Me as y9,Ne as $$,Oe as G2,Pe as Z9,Qe as lX,Re as iX,_e as OV,lf as LV,ve as wV,ye as FV}from"./chunk-s14zayxp.js";import{Hf as EZ,If as bZ}from"./chunk-crv3sghv.js";import{$f as F2,Uf as n6,Vf as q0,Wf as x,Zf as E0,_f as f6,ag as U1,bg as T3,cg as M2,dg as QQ,eg as H2}from"./chunk-67c6n5ty.js";import{fg as h1}from"./chunk-x6k5ye1z.js";import{hg as KW,jg as j3,kg as XQ,pg as ZQ,qg as XW,rg as k6}from"./chunk-1g7c3f82.js";import{sg as s3}from"./chunk-3v9epq9s.js";import{vg as u0,wg as F1}from"./chunk-eexs73bz.js";import{xg as FW}from"./chunk-pm163dfm.js";import{Ag as xX,Bg as hX,Cg as gX,zg as IX}from"./chunk-g9yyfyrw.js";import{$g as v6,Dg as h6,Eg as g6,Fg as u6,Hg as d6,Ig as m6,Jg as q1,Kg as x$,Lg as b$,Mg as H$,Ng as e8,Og as Q2,Pg as z8,Qg as m1,Rg as p1,Sg as dX,Wg as Q9,Yg as d0,Zg as P$,ah as mX,bh as sX}from"./chunk-xmbysst8.js";import{dh as B1,fh as T$,gh as j6}from"./chunk-kehgewqh.js";import{hh as lJ,ih as Y2,jh as iJ,kh as s2,lh as rJ,mh as nJ,nh as $6,oh as e4,ph as aJ,qh as sJ,rh as t4}from"./chunk-kkzznz4w.js";import{sh as xW,uh as uX,vh as W8,wh as MZ}from"./chunk-1cy4ab77.js";import{Ah as y0,yh as N9}from"./chunk-yst43yp8.js";import{Bh as j4,Ch as k9,Dh as E4,Eh as c1}from"./chunk-ys8gysg8.js";import{Fi as iY,Gi as rY,Hh as UZ,Hi as nY,Ih as F$,Ii as aY,Ji as A3,Ki as sY,Li as H1,Mi as oY,Nh as zZ,Ni as tY,Oi as eY,Ph as w9,Qi as ZZ,Si as tX,Ti as yX,Uh as AW,Ui as B0,Yh as BZ,_h as fX,ai as EY,bi as MY,si as v1,vi as qY}from"./chunk-qxd33dt5.js";import{Xi as Q6,Zi as C}from"./chunk-b22ab7yw.js";import{xj as wX,zj as FX}from"./chunk-m2x6pb4f.js";import{Ej as $0,Gj as n4,Hj as Z2,Ij as G,Jj as kJ,Kj as f,Lj as g}from"./chunk-saz6mwpq.js";import{Pj as kX,Qj as vX}from"./chunk-xhwdac1j.js";import{Rj as gW,Uj as yW}from"./chunk-0eajnhrj.js";import{Xj as pW}from"./chunk-ny34sr3w.js";import{bk as oX,ck as r0}from"./chunk-asgmmaec.js";import{Ek as cJ,dk as e,ek as L$,fk as B$,gk as a1,hk as JJ,ik as u2,jk as Z$,kk as DY,nk as I4,wk as P4,zk as j$}from"./chunk-ed2hdrwe.js";import{Jk as z$}from"./chunk-gmpsfkgg.js";import{randomUUID as M8}from"crypto";import{randomUUID as xV}from"node:crypto";var fV=String.raw`
1
+ import{Ka as zJ}from"./chunk-nad5spvc.js";import{Na as T,Oa as t0,Ta as CW,Ua as cY,Va as o0}from"./chunk-f23r12hk.js";import{Ab as DV,Wa as Y5,Za as i3,bb as $9,cb as AX,db as CX,fb as KV,hb as GV,ib as T9}from"./chunk-whxkwaz1.js";import{Bb as t5,Cb as m7,Db as J1,Eb as r7,Fb as K2,Gb as AY,Hb as f1,Ib as BY,Jb as TY,Kb as wY,Lb as RY,Mb as PY,Nb as jQ,Pb as LX,Rb as V0,Tb as w2,Wb as l6,Yb as O3,Zb as i6,_b as r6,ac as RZ,bc as R$,hc as GW,ic as K8,jc as DW,kc as qW,lc as OX,nc as x1,oc as aX,tc as VQ,wc as HQ}from"./chunk-v4ge4d5j.js";import{$c as h4,Cc as v$,Dc as pX,Ec as oJ,Fc as xJ,Gc as A1,Hc as XZ,Ic as L0,Jc as f2,Kc as O1,Lc as S4,Mc as v9,Nc as p6,Oc as c6,Pc as OY,Qc as LY,Rc as cX,Sc as UJ,Sd as V8,Tc as j1,Uc as VJ,Ud as P0,Vc as l8,Vd as _$,Wc as e$,Xc as $1,Yc as l2,Zc as c2,_c as i2,ad as g4,bd as d2,be as NW,cd as DJ,ce as MX,dd as m2,ed as i8,fd as E1,fe as WQ,gd as s1,hd as p2,id as o1,jd as t1,kd as u4,ke as rX,ld as e1,le as nX,md as d4,nd as m4,ne as o,od as k$,pd as p4,qd as EJ,rd as r2,sd as c4,td as l4,ud as i4,vd as r4,wd as MJ,xd as AJ,zd as CJ}from"./chunk-kc5ncjv0.js";import{oe as l,pe as CQ,qe as TQ,re as K6,te as q2}from"./chunk-skktstg8.js";import{Me as y9,Ne as $$,Oe as G2,Pe as Z9,Qe as lX,Re as iX,_e as OV,lf as LV,ve as wV,ye as FV}from"./chunk-s14zayxp.js";import{Hf as EZ,If as bZ}from"./chunk-crv3sghv.js";import{$f as F2,Uf as n6,Vf as q0,Wf as x,Zf as E0,_f as f6,ag as U1,bg as T3,cg as M2,dg as QQ,eg as H2}from"./chunk-e707cydv.js";import{fg as h1}from"./chunk-x6k5ye1z.js";import{hg as KW,jg as j3,kg as XQ,pg as ZQ,qg as XW,rg as k6}from"./chunk-1g7c3f82.js";import{sg as s3}from"./chunk-3v9epq9s.js";import{vg as u0,wg as F1}from"./chunk-eexs73bz.js";import{xg as FW}from"./chunk-pm163dfm.js";import{Ag as xX,Bg as hX,Cg as gX,zg as IX}from"./chunk-cw1g0bag.js";import{$g as v6,Dg as h6,Eg as g6,Fg as u6,Hg as d6,Ig as m6,Jg as q1,Kg as x$,Lg as b$,Mg as H$,Ng as e8,Og as Q2,Pg as z8,Qg as m1,Rg as p1,Sg as dX,Wg as Q9,Yg as d0,Zg as P$,ah as mX,bh as sX}from"./chunk-j1rtv3dn.js";import{dh as B1,fh as T$,gh as j6}from"./chunk-kehgewqh.js";import{hh as lJ,ih as Y2,jh as iJ,kh as s2,lh as rJ,mh as nJ,nh as $6,oh as e4,ph as aJ,qh as sJ,rh as t4}from"./chunk-kkzznz4w.js";import{sh as xW,uh as uX,vh as W8,wh as MZ}from"./chunk-1cy4ab77.js";import{Ah as y0,yh as N9}from"./chunk-akcv10na.js";import{Bh as j4,Ch as k9,Dh as E4,Eh as c1}from"./chunk-ys8gysg8.js";import{Fi as iY,Gi as rY,Hh as UZ,Hi as nY,Ih as F$,Ii as aY,Ji as A3,Ki as sY,Li as H1,Mi as oY,Nh as zZ,Ni as tY,Oi as eY,Ph as w9,Qi as ZZ,Si as tX,Ti as yX,Uh as AW,Ui as B0,Yh as BZ,_h as fX,ai as EY,bi as MY,si as v1,vi as qY}from"./chunk-jbfdab1x.js";import{Xi as Q6,Zi as C}from"./chunk-b22ab7yw.js";import{xj as wX,zj as FX}from"./chunk-m2x6pb4f.js";import{Ej as $0,Gj as n4,Hj as Z2,Ij as G,Jj as kJ,Kj as f,Lj as g}from"./chunk-saz6mwpq.js";import{Pj as kX,Qj as vX}from"./chunk-xhwdac1j.js";import{Rj as gW,Uj as yW}from"./chunk-0eajnhrj.js";import{Xj as pW}from"./chunk-c1p9eh59.js";import{bk as oX,ck as r0}from"./chunk-asgmmaec.js";import{Ek as cJ,dk as e,ek as L$,fk as B$,gk as a1,hk as JJ,ik as u2,jk as Z$,kk as DY,nk as I4,wk as P4,zk as j$}from"./chunk-ed2hdrwe.js";import{Jk as z$}from"./chunk-gmpsfkgg.js";import{randomUUID as M8}from"crypto";import{randomUUID as xV}from"node:crypto";var fV=String.raw`
2
2
  const { spawn } = require('node:child_process');
3
3
  const [ownerPidValue, command, ...args] = process.argv.slice(1);
4
4
  const ownerPid = Number(ownerPidValue);
@@ -872,7 +872,7 @@ ${l$}
872
872
  </approved-plan>
873
873
 
874
874
  IMPORTANT: Execute according to the approved plan above. Follow the steps exactly as specified.`;if(typeof b==="string")S2=b+S9;else S2=[...b,{type:"text",text:S9}]}k=yield*this.runLoop(S2,_,{...I,inputMessageId:void 0})}}finally{this.clearSkillContext()}if(!this.sessionRuntime||!y)return k;let a=v??await this.sessionRuntime.getGoal(),u=await this.sessionRuntime.recordGoalProgress({tokens:k.metadata?.tokensUsed??0,elapsedMs:k.metadata?.duration??0,turnId:y.id,...a?{goalId:a.goalId,objective:a.objective}:{},executionHostFailureCategory:k.metadata?.executionHostFailureCategory,prematureStopPattern:k.success?jY(k.finalMessage):void 0});if(u)yield{kind:"goal_updated",goal:u};if(!k.success||_.signal?.aborted){if(u=await this.sessionRuntime.pauseActiveGoal(_.signal?.aborted?"goal paused after user cancellation":k.error?.message??"goal paused after turn failure"),u)yield{kind:"goal_updated",goal:u}}if(k.success&&!_.signal?.aborted&&m<20)await this.sessionRuntime.waitForBackgroundSubagentFollowUp(y,_.signal);let m0=k.success&&!_.signal?.aborted&&m<20,z0=iK(k)||!k.success&&k.error?.type==="max_turns_exceeded";if(R=await this.sessionRuntime.finishTurn(y,{continuePending:m0,...z0?{acknowledgeInput:!0}:{},outcome:k.success&&!_.signal?.aborted?{status:"completed",turnsCount:k.metadata?.turnsCount??0,toolCallsCount:k.metadata?.toolCallsCount??0,durationMs:k.metadata?.duration??0,...k.metadata?.usage?{usage:k.metadata.usage}:{}}:{status:"aborted",cause:_.signal?.aborted?"cancelled":"failed",turnsCount:k.metadata?.turnsCount??0,toolCallsCount:k.metadata?.toolCallsCount??0,durationMs:k.metadata?.duration??0,...k.metadata?.usage?{usage:k.metadata.usage}:{}}}),R){m++,N=!0,M=!1,j=null,b="",c=void 0,A="",S=void 0,E=J0(),yield{kind:"follow_up_started",queued:this.sessionRuntime.getPendingSteeringCount(),recovered:this.sessionRuntime.getRecoveredSteeringCount(),messages:t(),queue:await this.sessionRuntime.getFollowUpQueueSnapshot()};continue}if(yield{kind:"follow_up_queue_changed",queue:await this.sessionRuntime.getFollowUpQueueSnapshot()},!k.success||_.signal?.aborted)return k;if(u=await this.sessionRuntime.getGoal(),!u||u.status!=="active"&&u.status!=="verifying")return k;let O0=await this.sessionRuntime.prepareGoalContinuation(u);if(!O0.ok){if(O0.goal)yield{kind:"goal_updated",goal:O0.goal};return{success:!1,error:{type:"goal_frontier_unavailable",message:O0.error.message},metadata:{turnsCount:k.metadata?.turnsCount??0,toolCallsCount:k.metadata?.toolCallsCount??0,duration:k.metadata?.duration??0}}}let f$=await this.sessionRuntime.beginGoalTurn(O0.goal);if(!f$)return k;j=f$.goal,w={...O0,goal:f$.goal},R=f$.handle,N=!1,M=!0,b=f5(j),c=void 0,E=void 0,yield{kind:"goal_frontier_updated",goal:j,frontier:O0.frontier,tasks:O0.tasks},yield{kind:"goal_continuation_started",goal:j,continuation:j.continuationCount,...j.prematureStop?{prematureStopPattern:j.prematureStop.pattern,prematureStopCount:j.prematureStop.consecutiveCount}:{}},yield{kind:"goal_updated",goal:j}}}finally{if(this.sessionRuntime&&R)await this.sessionRuntime.finishTurn(R)}}let O=typeof z==="string"?z:z.filter((b)=>b.type==="text").map((b)=>b.text).join(`
875
- `),L={id:this.generateTaskId(),type:"simple",prompt:O};return{success:!0,finalMessage:(await this.executeTask(L)).content,metadata:{turnsCount:1,toolCallsCount:0,duration:0}}}async chat($,J,Z){let{drainLoop:Y}=await import("./chunk-78qgrtk4.js");return Y(this.chatStream($,J,Z))}async*runPlanLoop($,J,Z){s.debug("Processing Plan mode message...");let{prompt:Y}=await Z1({...J.workspaceKind==="acp-remote"?{workspaceAccess:"none"}:{projectPath:J.workspaceRoot||C()},mode:"plan",includeEnvironment:!0,environmentOptions:{...x1,workingDirectory:J.executionRoot??J.workspaceRoot??C()},language:this.config.language,availableSkills:this.agentResources?.skills.generateAvailableSkillsList(),communicationStyle:this.sessionRuntime?.getCommunicationStyleConfiguration().selection,communicationStyleCatalog:this.sessionRuntime?.getCommunicationStyleCatalog(),projectRuleCatalog:this.sessionRuntime?.getProjectRuleCatalog(),...J.workspaceKind==="acp-remote"?{}:{projectInstructionSourcePath:this.sessionRuntime?.projectRoot}}),Q;if(typeof $==="string")Q=t2($);else{let X=$.filter((W)=>W.type==="text");if(X.length>0){let W=X[0];Q=$.map((V)=>V===W?{type:"text",text:t2(W.text)}:V)}else Q=[{type:"text",text:t2("")},...$]}return yield*this.executeLoop(Q,J,Z,Y)}async*runLoop($,J,Z){s.debug("Processing enhanced chat message...");let Y=J.systemPrompt??await this.buildSystemPromptOnDemand(J);return yield*this.executeLoop($,J,Z,Y)}async buildSystemPromptOnDemand($){let J=this.runtimeOptions.systemPrompt,Z=this.runtimeOptions.appendSystemPrompt;return(await Z1({...$.workspaceKind==="acp-remote"?{workspaceAccess:"none"}:{projectPath:$.workspaceRoot||C()},replaceDefault:J,append:Z,includeEnvironment:!0,environmentOptions:{...x1,workingDirectory:$.executionRoot??$.workspaceRoot??C()},language:this.config.language,availableSkills:this.agentResources?.skills.generateAvailableSkillsList(),communicationStyle:this.sessionRuntime?.getCommunicationStyleConfiguration().selection,communicationStyleCatalog:this.sessionRuntime?.getCommunicationStyleCatalog(),projectRuleCatalog:this.sessionRuntime?.getProjectRuleCatalog(),...$.workspaceKind==="acp-remote"?{}:{projectInstructionSourcePath:this.sessionRuntime?.projectRoot}})).prompt}executeLoop($,J,Z,Y){if(!this.isInitialized)throw Error("Agent未初始化");let Q=this.buildLoopDependencies();return HQ(Q,$,J,Z,Y)}takeStartupAdoptedToolResultEvents(){return(this.sessionRuntime?.takeStartupAdoptedToolResults()??[]).flatMap(({call:J,result:Z})=>{let Y={id:J.toolCallId,type:"function",function:{name:J.toolName,arguments:JSON.stringify(J.input)}},Q=Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0,X=Z.error===void 0,W=Z.output,V={success:X,llmContent:typeof W==="string"||W!==null&&typeof W==="object"?W:W===null?Z.error?`Subagent execution failed: ${Z.error}.`:"":String(W),...Z.error?{error:{type:"execution_error",message:Z.error}}:{},...Q?{metadata:Q}:{}},H=[{kind:"tool_result",toolCall:Y,result:V}],U=VQ(Y,V);if(U)H.push(U);return H})}takeStartupRecoveryEvents(){let $=this.sessionRuntime?.getTurnRecoveryAssessment(),J=$?.state==="requires_attention"?$:this.sessionRuntime?.takeStartupTurnRecoveryAssessment(),Z=J&&J.state!=="none"?[{kind:"turn_recovery",assessment:J}]:[];return Z.push(...this.takeStartupAdoptedToolResultEvents()),Z}buildLoopDependencies(){return{chatService:this.chatService,toolExecutor:this.toolExecutor,executionEngine:this.executionEngine,config:this.config,runtimeOptions:this.runtimeOptions,currentModelMaxContextTokens:this.currentModelMaxContextTokens,activeSkillContext:this.activeSkillContext,onSkillActivated:($)=>{this.activeSkillContext=$,s.debug(`Skill "${$.skillName}" activated`+($.allowedTools?` with allowed tools: ${$.allowedTools.join(", ")}`:""))},onModelSwitch:($)=>this.switchModelIfNeeded($),applySkillToolRestrictions:($)=>this.applySkillToolRestrictions($),staticProjectRules:this.sessionRuntime?.getStaticProjectRules(),hydrateProjectRules:this.sessionRuntime?($)=>this.sessionRuntime.hydrateProjectRules($):void 0,resolveContextualProjectRules:this.sessionRuntime?($,J,Z,Y)=>this.sessionRuntime.resolveContextualProjectRules($,J,Z,Y):void 0}}async chatWithSystem($,J){if(!this.isInitialized)throw Error("Agent未初始化");let Z=[{role:"system",content:$},{role:"user",content:J}];return(await this.chatService.chat(Z)).content}getActiveTask(){return this.activeTask}getChatService(){return this.chatService}getContextManager(){return this.executionEngine?.getContextManager()}getStats(){return{initialized:this.isInitialized,activeTask:this.activeTask?.id,components:{chatService:this.chatService?"ready":"not_loaded",executionEngine:this.executionEngine?"ready":"not_loaded"}}}getAvailableTools(){return this.toolExecutor?this.toolExecutor.getRegistry().getAll():[]}getToolRegistry(){return this.toolExecutor.getRegistry()}applyToolWhitelist($){let J=this.toolExecutor.getRegistry(),Y=J.getAll().filter((Q)=>!$.includes(Q.name));for(let Q of Y)J.unregister(Q.name);s.debug(`Applied tool whitelist: ${$.join(", ")} (removed ${Y.length} tools)`)}applyToolBlacklist($){let J=this.toolExecutor.getRegistry(),Z=new Set($);for(let Y of J.getAll())if(Z.has(Y.name))J.unregister(Y.name);s.debug(`Applied tool blacklist: ${$.join(", ")}`)}getToolStats(){let $=this.getAvailableTools(),J=new Map;return $.forEach((Z)=>{let Y=J.get(Z.kind)||0;J.set(Z.kind,Y+1)}),{totalTools:$.length,toolsByKind:Object.fromEntries(J),toolNames:$.map((Z)=>Z.name)}}async destroy(){if(this.destroyPromise)return this.destroyPromise;return this.destroyPromise=(async()=>{this.log("销毁Agent..."),await this.activeOperations.shutdown("agent-destroy");try{await this.legacyMcpRegistry?.disconnectAll(),this.legacyMcpRegistry=void 0,this.log("Agent已销毁")}catch($){throw this.error("Agent销毁失败",$),$}finally{this.toolExecutor.dispose(),this.isInitialized=!1}})(),this.destroyPromise}syncRuntimeState(){if(!this.sessionRuntime)return;this.chatService=this.sessionRuntime.getChatService(),this.executionEngine=this.sessionRuntime.getExecutionEngine(),this.attachmentCollector=this.sessionRuntime.getAttachmentCollector(),this.currentModelId=this.sessionRuntime.getCurrentModelId(),this.currentModelMaxContextTokens=this.sessionRuntime.getCurrentModelMaxContextTokens()}generateTaskId(){return`task_${Date.now()}_${Math.random().toString(36).substring(2,9)}`}log($,J){s.debug(`[MainAgent] ${$}`,J||"")}error($,J){s.error(`[MainAgent] ${$}`,J||"")}async initializeSystemPrompt(){try{let $=this.runtimeOptions.systemPrompt,J=this.runtimeOptions.appendSystemPrompt,Z=await Z1({...this.sessionRuntime?.isRemoteWorkspace()?{workspaceAccess:"none"}:{projectPath:this.sessionRuntime?.workspaceRoot??C()},replaceDefault:$,append:J,includeEnvironment:!1,language:this.config.language,availableSkills:this.agentResources?.skills.generateAvailableSkillsList(),communicationStyle:this.sessionRuntime?.getCommunicationStyleConfiguration().selection,communicationStyleCatalog:this.sessionRuntime?.getCommunicationStyleCatalog(),projectRuleCatalog:this.sessionRuntime?.getProjectRuleCatalog(),...this.sessionRuntime?.isRemoteWorkspace()?{}:{projectInstructionSourcePath:this.sessionRuntime?.projectRoot},...this.sessionRuntime?{environmentOptions:{...x1,workingDirectory:this.sessionRuntime.executionRoot}}:{}});if(Z.prompt)this.log("系统提示配置验证成功"),s.debug(`[SystemPrompt] 可用来源: ${Z.sources.filter((Y)=>Y.loaded).map((Y)=>Y.name).join(", ")}`)}catch($){this.error("系统提示配置验证失败",$)}}async registerBuiltinTools(){try{let $=await y6({sessionId:"default",configDir:e(),workspaceRoot:C(),resourceRoot:C(),agentResources:this.agentResources});s.debug(`Registering ${$.length} builtin tools...`),this.toolExecutor.getRegistry().registerAll($);let J=this.toolExecutor.getRegistry().getAll().length;s.debug(`Builtin tools registered: ${J} tools`),s.debug(`[Tools] ${this.toolExecutor.getRegistry().getAll().map((Z)=>Z.name).join(", ")}`),await this.registerMcpTools()}catch($){throw s.error("Failed to register builtin tools:",$),$}}async registerMcpTools(){try{let $=await X6({workspaceRoot:C(),storeServers:this.config.mcpServers??{},cliConfigs:this.runtimeOptions.mcpConfig,strictCliConfig:this.runtimeOptions.strictMcpConfig});if(Object.keys($).length===0){s.debug("No MCP servers configured");return}let J=o0.createIsolated({artifactWriter:new o2(`legacy-${lK()}`)});this.legacyMcpRegistry=J;for(let[X,W]of Object.entries($))try{s.debug(`Connecting to MCP server: ${X}`),await J.registerServer(X,W),s.debug(`MCP server "${X}" connected`)}catch(V){s.warn(`Warning: MCP server "${X}" connection failed:`,V)}let Z=this.toolExecutor.getRegistry();Z.setMcpCatalogBarrier(()=>J.waitForCatalogIdle());let Y=J.getCatalogSnapshot();Z.replaceMcpTools(Y.tools),Z.registerAll(Z4(J));let Q=J.getInstructionsSnapshot();if(Z.queueMcpInstructionsChange({revision:Q.revision,reason:"snapshot",replace:!0,instructions:Q.instructions,removed:[]}),J.on("catalogChanged",(X)=>{Z.replaceMcpTools(X.tools,X)}),J.on("contentCatalogChanged",(X)=>{Z.queueMcpContentChange(X)}),J.on("resourceUpdated",(X)=>{Z.queueMcpResourceUpdated(X)}),J.on("connectionLifecycleChanged",(X)=>{Z.queueMcpConnectionChange(X)}),J.on("log",(X)=>{Z.queueMcpLog(X)}),J.on("instructionsChanged",(X)=>{Z.queueMcpInstructionsChange({revision:X.revision,reason:X.reason,replace:!1,instructions:X.action==="added"&&X.instruction?[{serverName:X.serverName,...X.instruction}]:[],removed:X.action==="removed"?[X.serverName]:[]})}),Y.tools.length>0)s.debug(`Registered ${Y.tools.length} MCP tools`),s.debug(`[MCP Tools] ${Y.tools.map((X)=>X.name).join(", ")}`)}catch($){s.warn("Failed to register MCP tools:",$)}}async loadSubagents(){let $=await d0(C());if(this.agentResources=v6($),this.subagentRegistry=this.agentResources.subagents,this.runtimeOptions.agents?.length)this.subagentRegistry.applyOverrides(this.runtimeOptions.agents);let J=this.subagentRegistry.getAllNames().length;if(J>0)s.debug(`Loaded ${J} subagents: ${this.subagentRegistry.getAllNames().join(", ")}`);else s.debug("No subagents configured")}applySkillToolRestrictions($){if(!this.activeSkillContext?.allowedTools)return $;let J=this.activeSkillContext.allowedTools;s.debug(`Applying Skill tool restrictions: ${J.join(", ")}`);let Z=$.filter((Y)=>{if(Y.name==="ReadPromptArtifact")return!0;return J.some((Q)=>{if(Q===Y.name)return!0;let X=Q.match(/^(\w+)\(.*\)$/);if(X&&X[1]===Y.name)return!0;return!1})});return s.debug(`Filtered tools: ${Z.map((Y)=>Y.name).join(", ")} (${Z.length}/${$.length})`),Z}clearSkillContext(){if(this.activeSkillContext)s.debug(`Skill "${this.activeSkillContext.skillName}" deactivated`),this.activeSkillContext=void 0}async processAtMentionsForContent($){if(!this.attachmentCollector)return $;if(typeof $==="string")return this.processAtMentions($);let J=[];for(let Y of $)if(Y.type==="text")J.push(Y.text);if(J.length===0)return $;let Z=J.join(`
875
+ `),L={id:this.generateTaskId(),type:"simple",prompt:O};return{success:!0,finalMessage:(await this.executeTask(L)).content,metadata:{turnsCount:1,toolCallsCount:0,duration:0}}}async chat($,J,Z){let{drainLoop:Y}=await import("./chunk-5bw11gqz.js");return Y(this.chatStream($,J,Z))}async*runPlanLoop($,J,Z){s.debug("Processing Plan mode message...");let{prompt:Y}=await Z1({...J.workspaceKind==="acp-remote"?{workspaceAccess:"none"}:{projectPath:J.workspaceRoot||C()},mode:"plan",includeEnvironment:!0,environmentOptions:{...x1,workingDirectory:J.executionRoot??J.workspaceRoot??C()},language:this.config.language,availableSkills:this.agentResources?.skills.generateAvailableSkillsList(),communicationStyle:this.sessionRuntime?.getCommunicationStyleConfiguration().selection,communicationStyleCatalog:this.sessionRuntime?.getCommunicationStyleCatalog(),projectRuleCatalog:this.sessionRuntime?.getProjectRuleCatalog(),...J.workspaceKind==="acp-remote"?{}:{projectInstructionSourcePath:this.sessionRuntime?.projectRoot}}),Q;if(typeof $==="string")Q=t2($);else{let X=$.filter((W)=>W.type==="text");if(X.length>0){let W=X[0];Q=$.map((V)=>V===W?{type:"text",text:t2(W.text)}:V)}else Q=[{type:"text",text:t2("")},...$]}return yield*this.executeLoop(Q,J,Z,Y)}async*runLoop($,J,Z){s.debug("Processing enhanced chat message...");let Y=J.systemPrompt??await this.buildSystemPromptOnDemand(J);return yield*this.executeLoop($,J,Z,Y)}async buildSystemPromptOnDemand($){let J=this.runtimeOptions.systemPrompt,Z=this.runtimeOptions.appendSystemPrompt;return(await Z1({...$.workspaceKind==="acp-remote"?{workspaceAccess:"none"}:{projectPath:$.workspaceRoot||C()},replaceDefault:J,append:Z,includeEnvironment:!0,environmentOptions:{...x1,workingDirectory:$.executionRoot??$.workspaceRoot??C()},language:this.config.language,availableSkills:this.agentResources?.skills.generateAvailableSkillsList(),communicationStyle:this.sessionRuntime?.getCommunicationStyleConfiguration().selection,communicationStyleCatalog:this.sessionRuntime?.getCommunicationStyleCatalog(),projectRuleCatalog:this.sessionRuntime?.getProjectRuleCatalog(),...$.workspaceKind==="acp-remote"?{}:{projectInstructionSourcePath:this.sessionRuntime?.projectRoot}})).prompt}executeLoop($,J,Z,Y){if(!this.isInitialized)throw Error("Agent未初始化");let Q=this.buildLoopDependencies();return HQ(Q,$,J,Z,Y)}takeStartupAdoptedToolResultEvents(){return(this.sessionRuntime?.takeStartupAdoptedToolResults()??[]).flatMap(({call:J,result:Z})=>{let Y={id:J.toolCallId,type:"function",function:{name:J.toolName,arguments:JSON.stringify(J.input)}},Q=Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0,X=Z.error===void 0,W=Z.output,V={success:X,llmContent:typeof W==="string"||W!==null&&typeof W==="object"?W:W===null?Z.error?`Subagent execution failed: ${Z.error}.`:"":String(W),...Z.error?{error:{type:"execution_error",message:Z.error}}:{},...Q?{metadata:Q}:{}},H=[{kind:"tool_result",toolCall:Y,result:V}],U=VQ(Y,V);if(U)H.push(U);return H})}takeStartupRecoveryEvents(){let $=this.sessionRuntime?.getTurnRecoveryAssessment(),J=$?.state==="requires_attention"?$:this.sessionRuntime?.takeStartupTurnRecoveryAssessment(),Z=J&&J.state!=="none"?[{kind:"turn_recovery",assessment:J}]:[];return Z.push(...this.takeStartupAdoptedToolResultEvents()),Z}buildLoopDependencies(){return{chatService:this.chatService,toolExecutor:this.toolExecutor,executionEngine:this.executionEngine,config:this.config,runtimeOptions:this.runtimeOptions,currentModelMaxContextTokens:this.currentModelMaxContextTokens,activeSkillContext:this.activeSkillContext,onSkillActivated:($)=>{this.activeSkillContext=$,s.debug(`Skill "${$.skillName}" activated`+($.allowedTools?` with allowed tools: ${$.allowedTools.join(", ")}`:""))},onModelSwitch:($)=>this.switchModelIfNeeded($),applySkillToolRestrictions:($)=>this.applySkillToolRestrictions($),staticProjectRules:this.sessionRuntime?.getStaticProjectRules(),hydrateProjectRules:this.sessionRuntime?($)=>this.sessionRuntime.hydrateProjectRules($):void 0,resolveContextualProjectRules:this.sessionRuntime?($,J,Z,Y)=>this.sessionRuntime.resolveContextualProjectRules($,J,Z,Y):void 0}}async chatWithSystem($,J){if(!this.isInitialized)throw Error("Agent未初始化");let Z=[{role:"system",content:$},{role:"user",content:J}];return(await this.chatService.chat(Z)).content}getActiveTask(){return this.activeTask}getChatService(){return this.chatService}getContextManager(){return this.executionEngine?.getContextManager()}getStats(){return{initialized:this.isInitialized,activeTask:this.activeTask?.id,components:{chatService:this.chatService?"ready":"not_loaded",executionEngine:this.executionEngine?"ready":"not_loaded"}}}getAvailableTools(){return this.toolExecutor?this.toolExecutor.getRegistry().getAll():[]}getToolRegistry(){return this.toolExecutor.getRegistry()}applyToolWhitelist($){let J=this.toolExecutor.getRegistry(),Y=J.getAll().filter((Q)=>!$.includes(Q.name));for(let Q of Y)J.unregister(Q.name);s.debug(`Applied tool whitelist: ${$.join(", ")} (removed ${Y.length} tools)`)}applyToolBlacklist($){let J=this.toolExecutor.getRegistry(),Z=new Set($);for(let Y of J.getAll())if(Z.has(Y.name))J.unregister(Y.name);s.debug(`Applied tool blacklist: ${$.join(", ")}`)}getToolStats(){let $=this.getAvailableTools(),J=new Map;return $.forEach((Z)=>{let Y=J.get(Z.kind)||0;J.set(Z.kind,Y+1)}),{totalTools:$.length,toolsByKind:Object.fromEntries(J),toolNames:$.map((Z)=>Z.name)}}async destroy(){if(this.destroyPromise)return this.destroyPromise;return this.destroyPromise=(async()=>{this.log("销毁Agent..."),await this.activeOperations.shutdown("agent-destroy");try{await this.legacyMcpRegistry?.disconnectAll(),this.legacyMcpRegistry=void 0,this.log("Agent已销毁")}catch($){throw this.error("Agent销毁失败",$),$}finally{this.toolExecutor.dispose(),this.isInitialized=!1}})(),this.destroyPromise}syncRuntimeState(){if(!this.sessionRuntime)return;this.chatService=this.sessionRuntime.getChatService(),this.executionEngine=this.sessionRuntime.getExecutionEngine(),this.attachmentCollector=this.sessionRuntime.getAttachmentCollector(),this.currentModelId=this.sessionRuntime.getCurrentModelId(),this.currentModelMaxContextTokens=this.sessionRuntime.getCurrentModelMaxContextTokens()}generateTaskId(){return`task_${Date.now()}_${Math.random().toString(36).substring(2,9)}`}log($,J){s.debug(`[MainAgent] ${$}`,J||"")}error($,J){s.error(`[MainAgent] ${$}`,J||"")}async initializeSystemPrompt(){try{let $=this.runtimeOptions.systemPrompt,J=this.runtimeOptions.appendSystemPrompt,Z=await Z1({...this.sessionRuntime?.isRemoteWorkspace()?{workspaceAccess:"none"}:{projectPath:this.sessionRuntime?.workspaceRoot??C()},replaceDefault:$,append:J,includeEnvironment:!1,language:this.config.language,availableSkills:this.agentResources?.skills.generateAvailableSkillsList(),communicationStyle:this.sessionRuntime?.getCommunicationStyleConfiguration().selection,communicationStyleCatalog:this.sessionRuntime?.getCommunicationStyleCatalog(),projectRuleCatalog:this.sessionRuntime?.getProjectRuleCatalog(),...this.sessionRuntime?.isRemoteWorkspace()?{}:{projectInstructionSourcePath:this.sessionRuntime?.projectRoot},...this.sessionRuntime?{environmentOptions:{...x1,workingDirectory:this.sessionRuntime.executionRoot}}:{}});if(Z.prompt)this.log("系统提示配置验证成功"),s.debug(`[SystemPrompt] 可用来源: ${Z.sources.filter((Y)=>Y.loaded).map((Y)=>Y.name).join(", ")}`)}catch($){this.error("系统提示配置验证失败",$)}}async registerBuiltinTools(){try{let $=await y6({sessionId:"default",configDir:e(),workspaceRoot:C(),resourceRoot:C(),agentResources:this.agentResources});s.debug(`Registering ${$.length} builtin tools...`),this.toolExecutor.getRegistry().registerAll($);let J=this.toolExecutor.getRegistry().getAll().length;s.debug(`Builtin tools registered: ${J} tools`),s.debug(`[Tools] ${this.toolExecutor.getRegistry().getAll().map((Z)=>Z.name).join(", ")}`),await this.registerMcpTools()}catch($){throw s.error("Failed to register builtin tools:",$),$}}async registerMcpTools(){try{let $=await X6({workspaceRoot:C(),storeServers:this.config.mcpServers??{},cliConfigs:this.runtimeOptions.mcpConfig,strictCliConfig:this.runtimeOptions.strictMcpConfig});if(Object.keys($).length===0){s.debug("No MCP servers configured");return}let J=o0.createIsolated({artifactWriter:new o2(`legacy-${lK()}`)});this.legacyMcpRegistry=J;for(let[X,W]of Object.entries($))try{s.debug(`Connecting to MCP server: ${X}`),await J.registerServer(X,W),s.debug(`MCP server "${X}" connected`)}catch(V){s.warn(`Warning: MCP server "${X}" connection failed:`,V)}let Z=this.toolExecutor.getRegistry();Z.setMcpCatalogBarrier(()=>J.waitForCatalogIdle());let Y=J.getCatalogSnapshot();Z.replaceMcpTools(Y.tools),Z.registerAll(Z4(J));let Q=J.getInstructionsSnapshot();if(Z.queueMcpInstructionsChange({revision:Q.revision,reason:"snapshot",replace:!0,instructions:Q.instructions,removed:[]}),J.on("catalogChanged",(X)=>{Z.replaceMcpTools(X.tools,X)}),J.on("contentCatalogChanged",(X)=>{Z.queueMcpContentChange(X)}),J.on("resourceUpdated",(X)=>{Z.queueMcpResourceUpdated(X)}),J.on("connectionLifecycleChanged",(X)=>{Z.queueMcpConnectionChange(X)}),J.on("log",(X)=>{Z.queueMcpLog(X)}),J.on("instructionsChanged",(X)=>{Z.queueMcpInstructionsChange({revision:X.revision,reason:X.reason,replace:!1,instructions:X.action==="added"&&X.instruction?[{serverName:X.serverName,...X.instruction}]:[],removed:X.action==="removed"?[X.serverName]:[]})}),Y.tools.length>0)s.debug(`Registered ${Y.tools.length} MCP tools`),s.debug(`[MCP Tools] ${Y.tools.map((X)=>X.name).join(", ")}`)}catch($){s.warn("Failed to register MCP tools:",$)}}async loadSubagents(){let $=await d0(C());if(this.agentResources=v6($),this.subagentRegistry=this.agentResources.subagents,this.runtimeOptions.agents?.length)this.subagentRegistry.applyOverrides(this.runtimeOptions.agents);let J=this.subagentRegistry.getAllNames().length;if(J>0)s.debug(`Loaded ${J} subagents: ${this.subagentRegistry.getAllNames().join(", ")}`);else s.debug("No subagents configured")}applySkillToolRestrictions($){if(!this.activeSkillContext?.allowedTools)return $;let J=this.activeSkillContext.allowedTools;s.debug(`Applying Skill tool restrictions: ${J.join(", ")}`);let Z=$.filter((Y)=>{if(Y.name==="ReadPromptArtifact")return!0;return J.some((Q)=>{if(Q===Y.name)return!0;let X=Q.match(/^(\w+)\(.*\)$/);if(X&&X[1]===Y.name)return!0;return!1})});return s.debug(`Filtered tools: ${Z.map((Y)=>Y.name).join(", ")} (${Z.length}/${$.length})`),Z}clearSkillContext(){if(this.activeSkillContext)s.debug(`Skill "${this.activeSkillContext.skillName}" deactivated`),this.activeSkillContext=void 0}async processAtMentionsForContent($){if(!this.attachmentCollector)return $;if(typeof $==="string")return this.processAtMentions($);let J=[];for(let Y of $)if(Y.type==="text")J.push(Y.text);if(J.length===0)return $;let Z=J.join(`
876
876
  `);try{let Y=await this.attachmentCollector.collect(Z);if(Y.length===0)return $;s.debug(`Processed ${Y.length} @ file mentions in multimodal message`);let Q=this.buildAttachmentText(Y);if(!Q)return $;return[...$,{type:"text",text:Q}]}catch(Y){return s.error("Failed to process @ mentions in multimodal message:",Y),$}}buildAttachmentText($){let J=[],Z=[];for(let Q of $)if(Q.type==="file"){let X=Q.metadata?.lineRange?` (lines ${Q.metadata.lineRange.start}${Q.metadata.lineRange.end?`-${Q.metadata.lineRange.end}`:""})`:"";J.push(`<file path="${Q.path}"${X?` range="${X}"`:""}>`,Q.content,"</file>")}else if(Q.type==="directory")J.push(`<directory path="${Q.path}">`,Q.content,"</directory>");else if(Q.type==="error")Z.push(`- @${Q.path}: ${Q.error}`);let Y="";if(J.length>0)Y+=`
877
877
 
878
878
  <system-reminder>
@@ -1689,7 +1689,7 @@ ${Z}
1689
1689
  `)),{success:!0,message:"Schedules listed",content:H.join(`
1690
1690
  `)}}case"create":{let V=IF(X);if("error"in V)return Y.sendMessage(`创建失败:${V.error}`),{success:!1,error:V.error};let H={prompt:V.prompt,projectPath:W,trigger:V.trigger,isolation:"worktree",permissionMode:"default",enabled:!0};try{let U=await $.create(H),z=U.nextRunAt?new Date(U.nextRunAt).toLocaleString():"(无)";return Y.sendMessage(`[OK] 已创建定时任务 \`${U.id}\`
1691
1691
  ${T9(U.trigger)} · 下次运行: ${z}`),{success:!0,message:`Schedule ${U.id} created`}}catch(U){let z=U instanceof Error?U.message:String(U);return Y.sendMessage(`创建失败:${z}`),{success:!1,error:z}}}case"remove":case"rm":{let V=X[0];if(!V)return Y.sendMessage("用法:/schedule remove <id>"),{success:!1,error:"Missing schedule id"};let H=await $.remove(V);return Y.sendMessage(H?`[OK] 已删除 \`${V}\``:`未找到 \`${V}\``),{success:H,message:H?"Removed":"Not found"}}case"enable":case"disable":{let V=X[0];if(!V)return Y.sendMessage(`用法:/schedule ${Q} <id>`),{success:!1,error:"Missing schedule id"};let H=await $.setEnabled(V,Q==="enable");return Y.sendMessage(H?`[OK] 已${Q==="enable"?"启用":"停用"} \`${V}\``:`未找到 \`${V}\``),{success:Boolean(H),message:H?"Updated":"Not found"}}case"run":{let V=X[0];if(!V)return Y.sendMessage("用法:/schedule run <id>"),{success:!1,error:"Missing schedule id"};try{return await xF(V),Y.sendMessage(`[OK] 已触发 \`${V}\``),{success:!0,message:"Schedule triggered"}}catch(H){let U=H instanceof Error?H.message:String(H);return Y.sendMessage(`运行失败:${U}`),{success:!1,error:U}}}default:return Y.sendMessage(`未知子命令: ${Q}
1692
- 使用 /schedule 查看帮助`),{success:!1,error:`Unknown subcommand: ${Q}`}}}}}var qV=hF();import*as R2 from"node:fs/promises";import*as P2 from"node:path";async function _V($,J={}){let{maxResults:Z=20,caseSensitive:Y=!1,projectPath:Q,storagePath:X}=J,W=X??P4(Q??C());if(!X){let B=await gF($,Q??C(),Z,Y);if(B)return B}let V;try{V=(await R2.readdir(W)).filter((D)=>D.endsWith(".jsonl")&&!D.startsWith("agent_")).map((D)=>P2.join(W,D))}catch{return[]}let U=(await Promise.all(V.map(async(B)=>{try{let D=await R2.stat(B);return{path:B,mtime:D.mtimeMs}}catch{return null}}))).filter((B)=>B!==null).sort((B,D)=>D.mtime-B.mtime).map((B)=>B.path),z=[],K=Y?$:$.toLowerCase();for(let B of U){if(z.length>=Z)break;let D=P2.basename(B,".jsonl"),q=await uF(B,K,Y,D);if(z.push(...q),z.length>=Z){z.length=Z;break}}return z}async function gF($,J,Z,Y){try{let{syncAll:Q}=await import("./chunk-hb680ebj.js"),X=await OV();if(!X)return null;let{SessionService:W}=await import("./chunk-ye7ap23f.js");await Q(X,W.projectionDeriverForSearch());let V=P2.resolve(J),H=LV(X,$,V,Z*4),U=Y?$:$.toLowerCase(),z=[];for(let K of H){if(K.role!=="user"&&K.role!=="assistant")continue;let B=R9(K.text,U,Y,K.session_id,K.role,K.timestamp??void 0,0);if(B)z.push(B);if(z.length>=Z)break}return z}catch{return null}}async function uF($,J,Z,Y){try{let Q=await R2.readFile($,"utf8"),W=Q.split(`
1692
+ 使用 /schedule 查看帮助`),{success:!1,error:`Unknown subcommand: ${Q}`}}}}}var qV=hF();import*as R2 from"node:fs/promises";import*as P2 from"node:path";async function _V($,J={}){let{maxResults:Z=20,caseSensitive:Y=!1,projectPath:Q,storagePath:X}=J,W=X??P4(Q??C());if(!X){let B=await gF($,Q??C(),Z,Y);if(B)return B}let V;try{V=(await R2.readdir(W)).filter((D)=>D.endsWith(".jsonl")&&!D.startsWith("agent_")).map((D)=>P2.join(W,D))}catch{return[]}let U=(await Promise.all(V.map(async(B)=>{try{let D=await R2.stat(B);return{path:B,mtime:D.mtimeMs}}catch{return null}}))).filter((B)=>B!==null).sort((B,D)=>D.mtime-B.mtime).map((B)=>B.path),z=[],K=Y?$:$.toLowerCase();for(let B of U){if(z.length>=Z)break;let D=P2.basename(B,".jsonl"),q=await uF(B,K,Y,D);if(z.push(...q),z.length>=Z){z.length=Z;break}}return z}async function gF($,J,Z,Y){try{let{syncAll:Q}=await import("./chunk-hb680ebj.js"),X=await OV();if(!X)return null;let{SessionService:W}=await import("./chunk-47ery2y8.js");await Q(X,W.projectionDeriverForSearch());let V=P2.resolve(J),H=LV(X,$,V,Z*4),U=Y?$:$.toLowerCase(),z=[];for(let K of H){if(K.role!=="user"&&K.role!=="assistant")continue;let B=R9(K.text,U,Y,K.session_id,K.role,K.timestamp??void 0,0);if(B)z.push(B);if(z.length>=Z)break}return z}catch{return null}}async function uF($,J,Z,Y){try{let Q=await R2.readFile($,"utf8"),W=Q.split(`
1693
1693
  `).flatMap((K,B)=>{if(!K.trim())return[];try{return[{event:JSON.parse(K),index:B}]}catch{return[]}});if(!W.some(({event:K})=>K.type==="session_created"))return dF(W,J,Z,Y);let H=new Map(W.flatMap(({event:K,index:B})=>typeof K.id==="string"?[[K.id,B+1]]:[])),U=wV(FV(Q,$)),z=new Map;for(let K of U){if(K.type==="message_created"&&(K.data.role==="user"||K.data.role==="assistant"))z.set(K.data.messageId,{role:K.data.role,content:[],timestamp:K.timestamp,lineNumber:H.get(K.id)??0});if(K.type==="part_created"&&K.data.partType==="text"){let B=z.get(K.data.messageId),D=K.data.payload.text;if(B&&typeof D==="string")B.content.push(D)}}return[...z.values()].flatMap((K)=>{let B=R9(K.content.join(" "),J,Z,Y,K.role,K.timestamp,K.lineNumber);return B?[B]:[]})}catch{return[]}}function dF($,J,Z,Y){return $.flatMap(({event:Q,index:X})=>{if(Q.type!=="message")return[];let W=Q.message;if(W?.role!=="user"&&W?.role!=="assistant"||!W.content)return[];let V=typeof W.content==="string"?W.content:Array.isArray(W.content)?W.content.filter((U)=>typeof U==="object"&&U!==null&&U.type==="text"&&typeof U.text==="string").map((U)=>U.text).join(" "):"",H=R9(V,J,Z,Y,W.role,typeof Q.timestamp==="string"?Q.timestamp:void 0,X+1);return H?[H]:[]})}function R9($,J,Z,Y,Q,X,W){if(!$)return;let V=Z?$:$.toLowerCase();if(!V.includes(J))return;let H=V.indexOf(J),U=Math.max(0,H-80),z=Math.min($.length,H+J.length+80);return{sessionId:Y,role:Q,content:(U>0?"...":"")+$.slice(U,z).replace(/\n/g," ")+(z<$.length?"...":""),timestamp:X,lineNumber:W}}function NV($){if($.length===0)return"没有找到匹配的历史记录";let J=[`**找到 ${$.length} 条匹配:**
1694
1694
  `];for(let Z of $){let Y=Z.timestamp?new Date(Z.timestamp).toLocaleString("zh-CN",{timeZone:"Asia/Shanghai"}):"?",Q=Z.role==="user"?"\uD83D\uDC64":"\uD83E\uDD16";J.push(`${Q} \`${Z.sessionId.slice(0,8)}\` (${Y})`),J.push(` ${Z.content}`),J.push("")}return J.join(`
1695
1695
  `)}var mF={name:"search",description:"Search past session transcripts",fullDescription:"搜索历史会话记录,查找过去的对话内容",usage:"/search <keyword>",aliases:["find","history"],category:"Session",examples:['/search 断路器 - 搜索包含"断路器"的历史对话',"/search edit tool - 搜索 edit tool 相关讨论"],async handler($,J){let Z=r(J);if($.length===0)return Z.sendMessage("**用法:** `/search <关键词>`\n\n在历史会话中搜索包含指定关键词的对话"),{success:!0,message:"显示帮助"};let Y=$.join(" ");Z.sendMessage(`正在搜索: "${Y}" ...`);try{let Q=await _V(Y,{maxResults:15,projectPath:J.cwd}),X=NV(Q);return Z.sendMessage(X),{success:!0,message:`found ${Q.length} results`,data:{matches:Q.length}}}catch(Q){let X=Q instanceof Error?Q.message:"未知错误";return Z.sendMessage(`搜索失败: ${X}`),{success:!1,error:X}}}},bV=mF;var pF={name:"skills",description:"查看所有可用的 Skills",fullDescription:"显示所有已发现的 Skills 及其详细信息,包括名称、描述、来源和允许的工具。",usage:"/skills",category:"system",examples:["/skills"],handler:async($,J)=>{try{let Z=J.workspaceRoot??J.cwd;return await P$(Z,async(Y)=>{await Y.skills.refresh(),p1(Z),await m1(Z)}),{success:!0,message:"show_skills_manager",data:{action:"show_skills_manager"}}}catch(Z){let Y=`获取 Skills 失败: ${Z instanceof Error?Z.message:"未知错误"}`;return x().addAssistantMessage(Y),{success:!1,error:Y}}}},jV=pF;import cF from"node:path";function L8($){if($<1000)return`${$}ms`;let J=Math.floor($/1000);if(J<60)return`${J}s`;let Z=Math.floor(J/60);if(Z<60)return`${Z}m ${J%60}s`;return`${Math.floor(Z/60)}h ${Z%60}m`}function EV($){switch($){case"running":return"[RUNNING]";case"completed":case"exited":return"[OK]";case"failed":case"error":return"[FAIL]";case"killed":case"cancelled":return"[STOPPED]";default:return"[?]"}}function MV($,J){if($.length<=J)return $;return $.slice(0,J-3)+"..."}async function lF($,J){let Z=r(J),Y=$[0],Q=Y0.getInstance(),X=D0.getInstance(),W=J.sessionId??"",V=J.sessionId?{sessionId:J.sessionId,projectPath:cF.resolve(J.workspaceRoot??J.cwd)}:void 0;if(Y==="resume"){let D=$[1],q=$.slice(2).join(" ").trim();if(!D||!q)return{success:!1,error:"Usage: /tasks resume <agentId> <prompt>"};if(!J.subagents)return{success:!1,error:"This surface does not own a subagent runtime"};let w=await J.subagents.resume(D,q),O=`Resumed \`${D}\` as \`${w.session.id}\` (depth ${w.session.resumeDepth}).`;return Z.sendMessage(O),{success:!0,message:O,data:{action:"subagent_resumed",sourceAgentId:D,subagent:w.session}}}if(Y==="clean"){let D=X.cleanupExpiredSessionsForParent(V??W,0);return Z.sendMessage(`已清理 ${D} 个已完成的 Agent 会话`),{success:!0,message:`Cleaned ${D} agent sessions`}}let H=[`**后台任务列表**
@@ -1,4 +1,4 @@
1
- import{a as T,b as W,c as X,d as Y}from"./chunk-1z4tmcba.js";import"./chunk-wygp0nvt.js";import"./chunk-870szc6v.js";import"./chunk-mq54wjcc.js";import"./chunk-x52dt70w.js";import"./chunk-x4pnjynf.js";import"./chunk-40k6zwvk.js";import"./chunk-nad5spvc.js";import"./chunk-m136d1ba.js";import"./chunk-whxkwaz1.js";import"./chunk-wseph7sb.js";import"./chunk-9qxch6sy.js";import"./chunk-ntw5zafw.js";import"./chunk-skktstg8.js";import"./chunk-s14zayxp.js";import"./chunk-b5cz00mt.js";import{Ef as R}from"./chunk-y0fjkskd.js";import"./chunk-crv3sghv.js";import{_f as Q}from"./chunk-67c6n5ty.js";import"./chunk-x6k5ye1z.js";import"./chunk-v508x7cg.js";import"./chunk-1g7c3f82.js";import"./chunk-3v9epq9s.js";import"./chunk-eexs73bz.js";import"./chunk-pm163dfm.js";import"./chunk-g9yyfyrw.js";import"./chunk-xmbysst8.js";import"./chunk-kehgewqh.js";import"./chunk-kkzznz4w.js";import"./chunk-1cy4ab77.js";import"./chunk-7ajvrtb3.js";import"./chunk-yst43yp8.js";import"./chunk-ys8gysg8.js";import"./chunk-qxd33dt5.js";import"./chunk-b22ab7yw.js";import"./chunk-amabfzc8.js";import"./chunk-m2x6pb4f.js";import"./chunk-saz6mwpq.js";import"./chunk-xhwdac1j.js";import"./chunk-0eajnhrj.js";import{Xj as M}from"./chunk-ny34sr3w.js";import"./chunk-asgmmaec.js";import"./chunk-ed2hdrwe.js";import"./chunk-gmpsfkgg.js";import m from"chalk";import K from"open";var A=`
1
+ import{a as T,b as W,c as X,d as Y}from"./chunk-rrk3a90p.js";import"./chunk-47069895.js";import"./chunk-870szc6v.js";import"./chunk-n27zabx2.js";import"./chunk-4acgc3m0.js";import"./chunk-m92ys3jt.js";import"./chunk-pjawa9e1.js";import"./chunk-nad5spvc.js";import"./chunk-f23r12hk.js";import"./chunk-whxkwaz1.js";import"./chunk-v4ge4d5j.js";import"./chunk-9qxch6sy.js";import"./chunk-kc5ncjv0.js";import"./chunk-skktstg8.js";import"./chunk-s14zayxp.js";import"./chunk-b5cz00mt.js";import{Ef as R}from"./chunk-swf9xpnd.js";import"./chunk-crv3sghv.js";import{_f as Q}from"./chunk-e707cydv.js";import"./chunk-x6k5ye1z.js";import"./chunk-v508x7cg.js";import"./chunk-1g7c3f82.js";import"./chunk-3v9epq9s.js";import"./chunk-eexs73bz.js";import"./chunk-pm163dfm.js";import"./chunk-cw1g0bag.js";import"./chunk-j1rtv3dn.js";import"./chunk-kehgewqh.js";import"./chunk-kkzznz4w.js";import"./chunk-1cy4ab77.js";import"./chunk-7ajvrtb3.js";import"./chunk-akcv10na.js";import"./chunk-ys8gysg8.js";import"./chunk-jbfdab1x.js";import"./chunk-b22ab7yw.js";import"./chunk-amabfzc8.js";import"./chunk-m2x6pb4f.js";import"./chunk-saz6mwpq.js";import"./chunk-xhwdac1j.js";import"./chunk-0eajnhrj.js";import{Xj as M}from"./chunk-c1p9eh59.js";import"./chunk-asgmmaec.js";import"./chunk-ed2hdrwe.js";import"./chunk-gmpsfkgg.js";import m from"chalk";import K from"open";var A=`
2
2
  ____ _ _
3
3
  | __ )| | __ _ __| | ___
4
4
  | _ \\| |/ _\` |/ _\` |/ _ \\
@@ -1,4 +1,4 @@
1
- import{e as B3,f as x3,g as f3,h as r0,i as S3}from"./chunk-wygp0nvt.js";import{j as o1}from"./chunk-870szc6v.js";import{w as t0,x as d2,y as T1,z as c1}from"./chunk-mq54wjcc.js";import{A as c2,B as l2,C as i2,D as m0}from"./chunk-x52dt70w.js";import{E as h2,F as _$,G as N$,H as B$,I as G0,J as x$}from"./chunk-x4pnjynf.js";import{$ as C2,Aa as N3,Da as U5,Ia as i3,N as m1,O as l3,R as T2,S as O1,T as i4,V as i1,W as p$,X as A4,Y as j4,Z as W0,_ as I2,aa as M$,ba as F1,da as S2,ea as P2,fa as b4,ga as N0,ha as B0,ka as C4,la as R4,ma as Q5,na as k2,oa as J2,pa as Z3,qa as J3,ra as Q3,sa as Y3,ta as X3,ua as V3,va as z3,wa as G3,xa as K3}from"./chunk-40k6zwvk.js";import{Pa as E$,Va as iO}from"./chunk-m136d1ba.js";import{$a as E2,Ab as $$,Ya as Z2,_a as R2,ab as f2,gb as V4,jb as a3,kb as n4,lb as y2,mb as m2,nb as o3,ob as t3,pb as a4,qb as s3,rb as v0,sb as M3,tb as L3,ub as A3,vb as g2,wb as v2,xb as p2,yb as u2,zb as H$}from"./chunk-whxkwaz1.js";import{Ob as nO,Pb as i,Rb as m,Sb as q2,bc as _4,mc as g0}from"./chunk-wseph7sb.js";import{xc as g1}from"./chunk-9qxch6sy.js";import{$d as I4,Hd as M2,Nc as D2,Rd as o0,Sd as q0,Zd as T4,_d as q4,ce as L1,fd as d$,fe as D4,jd as U4,ke as b2,le as M4,me as L4,ne as g}from"./chunk-ntw5zafw.js";import{Le as L2,Se as A2,Te as j2}from"./chunk-s14zayxp.js";import{mf as b3,qf as T3,rf as q3,sf as I3,tf as C3,uf as p4,vf as R3,wf as E3}from"./chunk-b5cz00mt.js";import{Vf as Z5,Zf as LO,bg as k$,eg as tO}from"./chunk-67c6n5ty.js";import{fg as l1}from"./chunk-x6k5ye1z.js";import{yg as N2}from"./chunk-pm163dfm.js";import{Ag as D1}from"./chunk-g9yyfyrw.js";import{$g as x2,Jg as J5,Mg as $3,Qg as N1,Rg as B1,Vg as L5,Yg as O0,Zg as x1,bh as O$}from"./chunk-xmbysst8.js";import{uh as h$,vh as B2}from"./chunk-1cy4ab77.js";import{Ah as n0,zh as q$}from"./chunk-yst43yp8.js";import{Ai as F2,Ci as _2,Ih as B4,Pi as I$,Uh as R$,Ui as _1,ii as K2,li as w2,ni as H2,oi as W2,pi as g$,qi as v$,ri as W$,xi as U2}from"./chunk-qxd33dt5.js";import{Zi as KO}from"./chunk-b22ab7yw.js";import{Aj as x4,xj as a1}from"./chunk-m2x6pb4f.js";import{Ej as OO,Gj as h,Ij as z,Jj as sO,Lj as GO}from"./chunk-saz6mwpq.js";import{Qj as P0}from"./chunk-xhwdac1j.js";import{Sj as S$,Tj as z2,Vj as P$,Wj as G2}from"./chunk-0eajnhrj.js";import{Xj as i0}from"./chunk-ny34sr3w.js";import{ck as e4}from"./chunk-asgmmaec.js";import{Hk as A$,dk as n1,xk as WO,zk as k1}from"./chunk-ed2hdrwe.js";import{Jk as t4}from"./chunk-gmpsfkgg.js";var F8={port:{type:"number",describe:"Port to listen on (0 for auto)",default:0},hostname:{type:"string",describe:"Hostname to listen on",default:"127.0.0.1"},cors:{type:"array",describe:"Additional domains to allow for CORS",default:[]}};function _8(O){return{port:O.port??0,hostname:O.hostname??"127.0.0.1",cors:O.cors??[]}}import{existsSync as Z$,readFileSync as C1}from"node:fs";import{createServer as c6}from"node:http";import{networkInterfaces as l6}from"node:os";import{dirname as i6,extname as n6,join as f0}from"node:path";import{fileURLToPath as a6}from"node:url";import{brotliCompressSync as o6,gzipSync as t6,constants as s6}from"node:zlib";import{Hono as r6}from"hono";import{cors as e6}from"hono/cors";import{WebSocketServer as O8}from"ws";var l0=OO("Service"),y5=30000,m5=new Set(["completed","failed","cancelled","interrupted"]);class z4{dispatch;store;tickMs;timer;unsubscribeBus;ticking=!1;inFlight=new Set;constructor(O){this.dispatch=O.dispatch,this.store=O.store??H$.getInstance(),this.tickMs=O.tickMs??y5}start(){if(this.timer)return;l0.info("[TaskScheduler] Starting scheduler tick loop"),this.timer=setInterval(()=>{this.tick()},this.tickMs),this.timer.unref?.(),this.unsubscribeBus=m.subscribe((O)=>{if(O.type!=="task.status")return;let $=O.properties.taskStatus;if(typeof $!=="string"||!m5.has($))return;this.recordTerminalStatus(O.sessionId,$,typeof O.properties.taskStatusReason==="string"?O.properties.taskStatusReason:void 0)}),this.tick()}stop(){if(this.timer)clearInterval(this.timer),this.timer=void 0,this.unsubscribeBus?.(),this.unsubscribeBus=void 0,l0.info("[TaskScheduler] Stopped scheduler tick loop")}async tick(O=new Date){if(this.ticking)return;this.ticking=!0;try{let $=await this.store.list();for(let Z of $)await this.evaluate(Z,O)}catch($){l0.warn("[TaskScheduler] Tick failed:",$)}finally{this.ticking=!1}}async evaluate(O,$){if(!O.enabled)return;if(this.inFlight.has(O.id))return;if(O.expiresAt&&new Date(O.expiresAt).getTime()<=$.getTime()){await this.store.update(O.id,{enabled:!1,nextRunAt:null}),l0.info(`[TaskScheduler] Schedule ${O.id} expired; disabled`);return}if(!O.nextRunAt)return;if(!(new Date(O.nextRunAt).getTime()<=$.getTime()))return;await this.fire(O,$)}async fire(O,$=new Date,Z={}){if(this.inFlight.has(O.id))throw Error(`Schedule ${O.id} is already dispatching`);this.inFlight.add(O.id);let J=$.toISOString();try{let Y=await this.dispatch({prompt:O.prompt,title:O.title??g5(O),sourceProjectPath:O.projectPath,isolation:O.dispatch.isolation??"worktree",permissionMode:O.dispatch.permissionMode??"default",modelId:O.dispatch.modelId,reasoningEffort:O.dispatch.reasoningEffort,serviceTier:O.dispatch.serviceTier,responseVerbosity:O.dispatch.responseVerbosity,communicationStyle:O.dispatch.communicationStyle}),X=O.trigger.kind==="once"?null:Z.manual?O.nextRunAt?new Date(O.nextRunAt):null:V4(O.trigger,$,$);await this.store.update(O.id,{lastRunAt:J,lastRunSessionId:Y.session.sessionId,lastStatus:Y.status,lastError:void 0,runCount:O.runCount+1,nextRunAt:X?X.toISOString():null,enabled:O.trigger.kind==="once"?!1:O.enabled}),m.publish({sessionId:Y.session.sessionId,projectPath:O.projectPath},"schedule.fired",{scheduleId:O.id,firedAt:J,sessionId:Y.session.sessionId,runId:Y.runId,status:Y.status}),l0.info(`[TaskScheduler] Fired schedule ${O.id} -> session ${Y.session.sessionId} (${Y.status})`)}catch(Y){let X=Y instanceof Error?Y.message:String(Y);l0.warn(`[TaskScheduler] Schedule ${O.id} dispatch failed:`,Y);let G=O.trigger.kind==="once"?null:Z.manual?O.nextRunAt?new Date(O.nextRunAt):null:V4(O.trigger,$,$);await this.store.update(O.id,{lastRunAt:J,lastStatus:"error",lastError:X,nextRunAt:G?G.toISOString():null,enabled:O.trigger.kind==="once"?!1:O.enabled})}finally{this.inFlight.delete(O.id)}}async recordTerminalStatus(O,$,Z){let Y=(await this.store.list()).find((X)=>X.lastRunSessionId===O);if(!Y)return;await this.store.update(Y.id,{lastStatus:$,...Z?{lastError:Z}:{lastError:void 0}})}}function g5(O){return`Scheduled: ${O.prompt.trim().replace(/\s+/g," ").slice(0,60)}`}class wO extends Error{code;statusCode;details;constructor(O,$,Z=500,J){super($);this.code=O;this.statusCode=Z;this.details=J;this.name="BladeServerError"}toObject(){return{error:{code:this.code,message:this.message,...this.details?{details:this.details}:{}}}}}class c extends wO{constructor(O,$){super("NOT_FOUND",$?`${O} not found: ${$}`:`${O} not found`,404)}}class F extends wO{constructor(O){super("BAD_REQUEST",O,400)}}class v extends wO{constructor(O){super("CONFLICT",O,409)}}class eO extends wO{constructor(O,$){super("TOO_MANY_REQUESTS",O,429,$)}}class MO extends wO{constructor(O="Server is shutting down"){super("SERVICE_UNAVAILABLE",O,503)}}class b0 extends wO{constructor(O){super("SESSION_WORKSPACE_UNAVAILABLE","This session workspace is no longer available",409,{reason:O})}}class lO extends wO{constructor(){super("AMBIGUOUS_SESSION","Multiple workspaces contain this session ID; projectPath is required",409)}}class zO extends wO{constructor(O="Internal server error"){super("INTERNAL_ERROR",O,500)}}var j8=z.Object({error:z.Object({code:z.String(),message:z.String(),details:z.Optional(z.Record(z.String(),z.Unknown()))})});import{Hono as v5}from"hono";var G4=OO("Service"),p5=z.Object({updates:z.Record(z.String(),z.Any()),options:z.Optional(z.Object({scope:z.Optional(GO(["local","project","global"])),immediate:z.Optional(z.Boolean())}))});function u5(O){return{currentModelId:O.currentModelId,permissionMode:O.permissionMode,language:O.language,codeTheme:O.codeTheme,uiTheme:O.uiTheme,autoSaveSessions:O.autoSaveSessions,notifyBuild:O.notifyBuild,notifyErrors:O.notifyErrors,notifySounds:O.notifySounds,privacyTelemetry:O.privacyTelemetry,privacyCrash:O.privacyCrash,agentTeamsEnabled:O.agentTeamsEnabled===!0,communicationStyle:O.communicationStyle,maxConcurrentTasks:O.maxConcurrentTasks,maxQueuedTasks:O.maxQueuedTasks,maxQueuedTaskBytes:O.maxQueuedTaskBytes,maxResidentSessionRuntimes:O.maxResidentSessionRuntimes,sessionRuntimeIdleMs:O.sessionRuntimeIdleMs,maxResidentSessionProjections:O.maxResidentSessionProjections,sessionProjectionIdleMs:O.sessionProjectionIdleMs}}var U$=()=>{let O=new v5;return O.get("/",async($)=>{try{let Z=LO();return $.json(Z?u5(Z):{})}catch(Z){return G4.error("[ConfigRoutes] Failed to get config:",Z),$.json({})}}),O.put("/",async($)=>{try{let Z=await $.req.json(),J=h(p5,Z);if(!J.success)throw new F("Invalid config update format");let{updates:Y,options:X}=J.data;return await tO().updateConfig(Y,X),$.json({success:!0,updates:Y})}catch(Z){if(Z instanceof W$)throw new F(Z.message);throw G4.error("[ConfigRoutes] Failed to update config:",Z),Z}}),O.get("/permissions",async($)=>{try{let Z=LO();return $.json(Z?.permissions||{})}catch(Z){return G4.error("[ConfigRoutes] Failed to get permissions:",Z),$.json({})}}),O};import{Hono as d5}from"hono";import{streamSSE as c5}from"hono/streaming";function F$(O){let $="";if(O.id!==void 0)$+=`id: ${O.id}
1
+ import{e as B3,f as x3,g as f3,h as r0,i as S3}from"./chunk-47069895.js";import{j as o1}from"./chunk-870szc6v.js";import{w as t0,x as d2,y as T1,z as c1}from"./chunk-n27zabx2.js";import{A as c2,B as l2,C as i2,D as m0}from"./chunk-4acgc3m0.js";import{E as h2,F as _$,G as N$,H as B$,I as G0,J as x$}from"./chunk-m92ys3jt.js";import{$ as C2,Aa as N3,Da as U5,Ia as i3,N as m1,O as l3,R as T2,S as O1,T as i4,V as i1,W as p$,X as A4,Y as j4,Z as W0,_ as I2,aa as M$,ba as F1,da as S2,ea as P2,fa as b4,ga as N0,ha as B0,ka as C4,la as R4,ma as Q5,na as k2,oa as J2,pa as Z3,qa as J3,ra as Q3,sa as Y3,ta as X3,ua as V3,va as z3,wa as G3,xa as K3}from"./chunk-pjawa9e1.js";import{Pa as E$,Va as iO}from"./chunk-f23r12hk.js";import{$a as E2,Ab as $$,Ya as Z2,_a as R2,ab as f2,gb as V4,jb as a3,kb as n4,lb as y2,mb as m2,nb as o3,ob as t3,pb as a4,qb as s3,rb as v0,sb as M3,tb as L3,ub as A3,vb as g2,wb as v2,xb as p2,yb as u2,zb as H$}from"./chunk-whxkwaz1.js";import{Ob as nO,Pb as i,Rb as m,Sb as q2,bc as _4,mc as g0}from"./chunk-v4ge4d5j.js";import{xc as g1}from"./chunk-9qxch6sy.js";import{$d as I4,Hd as M2,Nc as D2,Rd as o0,Sd as q0,Zd as T4,_d as q4,ce as L1,fd as d$,fe as D4,jd as U4,ke as b2,le as M4,me as L4,ne as g}from"./chunk-kc5ncjv0.js";import{Le as L2,Se as A2,Te as j2}from"./chunk-s14zayxp.js";import{mf as b3,qf as T3,rf as q3,sf as I3,tf as C3,uf as p4,vf as R3,wf as E3}from"./chunk-b5cz00mt.js";import{Vf as Z5,Zf as LO,bg as k$,eg as tO}from"./chunk-e707cydv.js";import{fg as l1}from"./chunk-x6k5ye1z.js";import{yg as N2}from"./chunk-pm163dfm.js";import{Ag as D1}from"./chunk-cw1g0bag.js";import{$g as x2,Jg as J5,Mg as $3,Qg as N1,Rg as B1,Vg as L5,Yg as O0,Zg as x1,bh as O$}from"./chunk-j1rtv3dn.js";import{uh as h$,vh as B2}from"./chunk-1cy4ab77.js";import{Ah as n0,zh as q$}from"./chunk-akcv10na.js";import{Ai as F2,Ci as _2,Ih as B4,Pi as I$,Uh as R$,Ui as _1,ii as K2,li as w2,ni as H2,oi as W2,pi as g$,qi as v$,ri as W$,xi as U2}from"./chunk-jbfdab1x.js";import{Zi as KO}from"./chunk-b22ab7yw.js";import{Aj as x4,xj as a1}from"./chunk-m2x6pb4f.js";import{Ej as OO,Gj as h,Ij as z,Jj as sO,Lj as GO}from"./chunk-saz6mwpq.js";import{Qj as P0}from"./chunk-xhwdac1j.js";import{Sj as S$,Tj as z2,Vj as P$,Wj as G2}from"./chunk-0eajnhrj.js";import{Xj as i0}from"./chunk-c1p9eh59.js";import{ck as e4}from"./chunk-asgmmaec.js";import{Hk as A$,dk as n1,xk as WO,zk as k1}from"./chunk-ed2hdrwe.js";import{Jk as t4}from"./chunk-gmpsfkgg.js";var F8={port:{type:"number",describe:"Port to listen on (0 for auto)",default:0},hostname:{type:"string",describe:"Hostname to listen on",default:"127.0.0.1"},cors:{type:"array",describe:"Additional domains to allow for CORS",default:[]}};function _8(O){return{port:O.port??0,hostname:O.hostname??"127.0.0.1",cors:O.cors??[]}}import{existsSync as Z$,readFileSync as C1}from"node:fs";import{createServer as c6}from"node:http";import{networkInterfaces as l6}from"node:os";import{dirname as i6,extname as n6,join as f0}from"node:path";import{fileURLToPath as a6}from"node:url";import{brotliCompressSync as o6,gzipSync as t6,constants as s6}from"node:zlib";import{Hono as r6}from"hono";import{cors as e6}from"hono/cors";import{WebSocketServer as O8}from"ws";var l0=OO("Service"),y5=30000,m5=new Set(["completed","failed","cancelled","interrupted"]);class z4{dispatch;store;tickMs;timer;unsubscribeBus;ticking=!1;inFlight=new Set;constructor(O){this.dispatch=O.dispatch,this.store=O.store??H$.getInstance(),this.tickMs=O.tickMs??y5}start(){if(this.timer)return;l0.info("[TaskScheduler] Starting scheduler tick loop"),this.timer=setInterval(()=>{this.tick()},this.tickMs),this.timer.unref?.(),this.unsubscribeBus=m.subscribe((O)=>{if(O.type!=="task.status")return;let $=O.properties.taskStatus;if(typeof $!=="string"||!m5.has($))return;this.recordTerminalStatus(O.sessionId,$,typeof O.properties.taskStatusReason==="string"?O.properties.taskStatusReason:void 0)}),this.tick()}stop(){if(this.timer)clearInterval(this.timer),this.timer=void 0,this.unsubscribeBus?.(),this.unsubscribeBus=void 0,l0.info("[TaskScheduler] Stopped scheduler tick loop")}async tick(O=new Date){if(this.ticking)return;this.ticking=!0;try{let $=await this.store.list();for(let Z of $)await this.evaluate(Z,O)}catch($){l0.warn("[TaskScheduler] Tick failed:",$)}finally{this.ticking=!1}}async evaluate(O,$){if(!O.enabled)return;if(this.inFlight.has(O.id))return;if(O.expiresAt&&new Date(O.expiresAt).getTime()<=$.getTime()){await this.store.update(O.id,{enabled:!1,nextRunAt:null}),l0.info(`[TaskScheduler] Schedule ${O.id} expired; disabled`);return}if(!O.nextRunAt)return;if(!(new Date(O.nextRunAt).getTime()<=$.getTime()))return;await this.fire(O,$)}async fire(O,$=new Date,Z={}){if(this.inFlight.has(O.id))throw Error(`Schedule ${O.id} is already dispatching`);this.inFlight.add(O.id);let J=$.toISOString();try{let Y=await this.dispatch({prompt:O.prompt,title:O.title??g5(O),sourceProjectPath:O.projectPath,isolation:O.dispatch.isolation??"worktree",permissionMode:O.dispatch.permissionMode??"default",modelId:O.dispatch.modelId,reasoningEffort:O.dispatch.reasoningEffort,serviceTier:O.dispatch.serviceTier,responseVerbosity:O.dispatch.responseVerbosity,communicationStyle:O.dispatch.communicationStyle}),X=O.trigger.kind==="once"?null:Z.manual?O.nextRunAt?new Date(O.nextRunAt):null:V4(O.trigger,$,$);await this.store.update(O.id,{lastRunAt:J,lastRunSessionId:Y.session.sessionId,lastStatus:Y.status,lastError:void 0,runCount:O.runCount+1,nextRunAt:X?X.toISOString():null,enabled:O.trigger.kind==="once"?!1:O.enabled}),m.publish({sessionId:Y.session.sessionId,projectPath:O.projectPath},"schedule.fired",{scheduleId:O.id,firedAt:J,sessionId:Y.session.sessionId,runId:Y.runId,status:Y.status}),l0.info(`[TaskScheduler] Fired schedule ${O.id} -> session ${Y.session.sessionId} (${Y.status})`)}catch(Y){let X=Y instanceof Error?Y.message:String(Y);l0.warn(`[TaskScheduler] Schedule ${O.id} dispatch failed:`,Y);let G=O.trigger.kind==="once"?null:Z.manual?O.nextRunAt?new Date(O.nextRunAt):null:V4(O.trigger,$,$);await this.store.update(O.id,{lastRunAt:J,lastStatus:"error",lastError:X,nextRunAt:G?G.toISOString():null,enabled:O.trigger.kind==="once"?!1:O.enabled})}finally{this.inFlight.delete(O.id)}}async recordTerminalStatus(O,$,Z){let Y=(await this.store.list()).find((X)=>X.lastRunSessionId===O);if(!Y)return;await this.store.update(Y.id,{lastStatus:$,...Z?{lastError:Z}:{lastError:void 0}})}}function g5(O){return`Scheduled: ${O.prompt.trim().replace(/\s+/g," ").slice(0,60)}`}class wO extends Error{code;statusCode;details;constructor(O,$,Z=500,J){super($);this.code=O;this.statusCode=Z;this.details=J;this.name="BladeServerError"}toObject(){return{error:{code:this.code,message:this.message,...this.details?{details:this.details}:{}}}}}class c extends wO{constructor(O,$){super("NOT_FOUND",$?`${O} not found: ${$}`:`${O} not found`,404)}}class F extends wO{constructor(O){super("BAD_REQUEST",O,400)}}class v extends wO{constructor(O){super("CONFLICT",O,409)}}class eO extends wO{constructor(O,$){super("TOO_MANY_REQUESTS",O,429,$)}}class MO extends wO{constructor(O="Server is shutting down"){super("SERVICE_UNAVAILABLE",O,503)}}class b0 extends wO{constructor(O){super("SESSION_WORKSPACE_UNAVAILABLE","This session workspace is no longer available",409,{reason:O})}}class lO extends wO{constructor(){super("AMBIGUOUS_SESSION","Multiple workspaces contain this session ID; projectPath is required",409)}}class zO extends wO{constructor(O="Internal server error"){super("INTERNAL_ERROR",O,500)}}var j8=z.Object({error:z.Object({code:z.String(),message:z.String(),details:z.Optional(z.Record(z.String(),z.Unknown()))})});import{Hono as v5}from"hono";var G4=OO("Service"),p5=z.Object({updates:z.Record(z.String(),z.Any()),options:z.Optional(z.Object({scope:z.Optional(GO(["local","project","global"])),immediate:z.Optional(z.Boolean())}))});function u5(O){return{currentModelId:O.currentModelId,permissionMode:O.permissionMode,language:O.language,codeTheme:O.codeTheme,uiTheme:O.uiTheme,autoSaveSessions:O.autoSaveSessions,notifyBuild:O.notifyBuild,notifyErrors:O.notifyErrors,notifySounds:O.notifySounds,privacyTelemetry:O.privacyTelemetry,privacyCrash:O.privacyCrash,agentTeamsEnabled:O.agentTeamsEnabled===!0,communicationStyle:O.communicationStyle,maxConcurrentTasks:O.maxConcurrentTasks,maxQueuedTasks:O.maxQueuedTasks,maxQueuedTaskBytes:O.maxQueuedTaskBytes,maxResidentSessionRuntimes:O.maxResidentSessionRuntimes,sessionRuntimeIdleMs:O.sessionRuntimeIdleMs,maxResidentSessionProjections:O.maxResidentSessionProjections,sessionProjectionIdleMs:O.sessionProjectionIdleMs}}var U$=()=>{let O=new v5;return O.get("/",async($)=>{try{let Z=LO();return $.json(Z?u5(Z):{})}catch(Z){return G4.error("[ConfigRoutes] Failed to get config:",Z),$.json({})}}),O.put("/",async($)=>{try{let Z=await $.req.json(),J=h(p5,Z);if(!J.success)throw new F("Invalid config update format");let{updates:Y,options:X}=J.data;return await tO().updateConfig(Y,X),$.json({success:!0,updates:Y})}catch(Z){if(Z instanceof W$)throw new F(Z.message);throw G4.error("[ConfigRoutes] Failed to update config:",Z),Z}}),O.get("/permissions",async($)=>{try{let Z=LO();return $.json(Z?.permissions||{})}catch(Z){return G4.error("[ConfigRoutes] Failed to get permissions:",Z),$.json({})}}),O};import{Hono as d5}from"hono";import{streamSSE as c5}from"hono/streaming";function F$(O){let $="";if(O.id!==void 0)$+=`id: ${O.id}
2
2
  `;if(O.event!==void 0)$+=`event: ${O.event}
3
3
  `;for(let Z of O.data.split(/\r\n|\r|\n/))$+=`data: ${Z}
4
4
  `;if(O.retry!==void 0)$+=`retry: ${O.retry}
@@ -0,0 +1 @@
1
+ import{xf as a,yf as b}from"./chunk-tkgjzz7t.js";import"./chunk-c1p9eh59.js";import"./chunk-gmpsfkgg.js";export{a as globalOptions,b as cliConfig};
@@ -1,4 +1,4 @@
1
- import{Vf as N}from"./chunk-67c6n5ty.js";import{Ah as $}from"./chunk-yst43yp8.js";import{Zi as _}from"./chunk-b22ab7yw.js";import{Cj as Y,Ej as Z}from"./chunk-saz6mwpq.js";function X(){if(process.stdin.isTTY&&typeof process.stdin.setRawMode==="function")try{process.stdin.setRawMode(!1)}catch{}if(!process.stdout.isTTY)return;process.stdout.write("\x1B[<u"),process.stdout.write("\x1B[>4;0m"),process.stdout.write("\x1B[?2004l"),process.stdout.write("\x1B[?1004l"),process.stdout.write("\x1B[?1l\x1B>"),process.stdout.write("\x1B[?25h"),process.stdout.write("\x1B[0m")}var z=Z("Service");function E(b){switch(b){case"SIGINT":return"ctrl_c";case"esc":return"esc";case"uncaughtException":case"unhandledRejection":return"error";case"SIGTERM":case"normal":default:return"user_exit"}}class B{static instance=null;cleanupHandlers=[];isShuttingDown=!1;initialized=!1;lastSigintTime=0;SIGINT_DOUBLE_CLICK_WINDOW=3000;constructor(){}static getInstance(){if(!B.instance)B.instance=new B;return B.instance}initialize(){if(this.initialized){z.debug("[GracefulShutdown] 已初始化,跳过重复初始化");return}process.on("uncaughtException",(b)=>{this.handleFatalError("uncaughtException",b)}),process.on("unhandledRejection",(b)=>{let q=b instanceof Error?b:Error(String(b));this.handleFatalError("unhandledRejection",q)}),process.on("SIGTERM",()=>{z.info("[GracefulShutdown] 收到 SIGTERM 信号"),this.shutdown("SIGTERM",0)}),process.on("SIGINT",()=>{if(!process.stdin.isTTY||!process.stdout.isTTY){this.shutdown("SIGINT",0);return}let b=Date.now();if(b-this.lastSigintTime<this.SIGINT_DOUBLE_CLICK_WINDOW)z.info("[GracefulShutdown] 收到第二次 SIGINT 信号,执行退出"),this.shutdown("SIGINT",0);else z.info("[GracefulShutdown] 收到第一次 SIGINT 信号,再按一次退出"),this.lastSigintTime=b,console.log(`
1
+ import{Vf as N}from"./chunk-e707cydv.js";import{Ah as $}from"./chunk-akcv10na.js";import{Zi as _}from"./chunk-b22ab7yw.js";import{Cj as Y,Ej as Z}from"./chunk-saz6mwpq.js";function X(){if(process.stdin.isTTY&&typeof process.stdin.setRawMode==="function")try{process.stdin.setRawMode(!1)}catch{}if(!process.stdout.isTTY)return;process.stdout.write("\x1B[<u"),process.stdout.write("\x1B[>4;0m"),process.stdout.write("\x1B[?2004l"),process.stdout.write("\x1B[?1004l"),process.stdout.write("\x1B[?1l\x1B>"),process.stdout.write("\x1B[?25h"),process.stdout.write("\x1B[0m")}var z=Z("Service");function E(b){switch(b){case"SIGINT":return"ctrl_c";case"esc":return"esc";case"uncaughtException":case"unhandledRejection":return"error";case"SIGTERM":case"normal":default:return"user_exit"}}class B{static instance=null;cleanupHandlers=[];isShuttingDown=!1;initialized=!1;lastSigintTime=0;SIGINT_DOUBLE_CLICK_WINDOW=3000;constructor(){}static getInstance(){if(!B.instance)B.instance=new B;return B.instance}initialize(){if(this.initialized){z.debug("[GracefulShutdown] 已初始化,跳过重复初始化");return}process.on("uncaughtException",(b)=>{this.handleFatalError("uncaughtException",b)}),process.on("unhandledRejection",(b)=>{let q=b instanceof Error?b:Error(String(b));this.handleFatalError("unhandledRejection",q)}),process.on("SIGTERM",()=>{z.info("[GracefulShutdown] 收到 SIGTERM 信号"),this.shutdown("SIGTERM",0)}),process.on("SIGINT",()=>{if(!process.stdin.isTTY||!process.stdout.isTTY){this.shutdown("SIGINT",0);return}let b=Date.now();if(b-this.lastSigintTime<this.SIGINT_DOUBLE_CLICK_WINDOW)z.info("[GracefulShutdown] 收到第二次 SIGINT 信号,执行退出"),this.shutdown("SIGINT",0);else z.info("[GracefulShutdown] 收到第一次 SIGINT 信号,再按一次退出"),this.lastSigintTime=b,console.log(`
2
2
  再按一次 Ctrl+C 退出
3
3
  `)}),this.initialized=!0,z.debug("[GracefulShutdown] 全局错误处理器已初始化")}registerCleanup(b){return this.cleanupHandlers.push(b),z.debug(`[GracefulShutdown] 注册清理函数,当前共 ${this.cleanupHandlers.length} 个`),()=>{let q=this.cleanupHandlers.indexOf(b);if(q!==-1)this.cleanupHandlers.splice(q,1),z.debug(`[GracefulShutdown] 取消注册清理函数,剩余 ${this.cleanupHandlers.length} 个`)}}handleFatalError(b,q){if(this.isShuttingDown){console.error(`[GracefulShutdown] 退出过程中发生额外错误 (${b}):`,q);return}if(console.error(""),console.error("═".repeat(60)),console.error(`Uncaught error (${b})`),console.error("═".repeat(60)),console.error(""),console.error("错误信息:",q.message),console.error(""),q.stack)console.error("堆栈跟踪:"),console.error(q.stack);console.error(""),console.error("═".repeat(60)),console.error(""),this.shutdown(b,1)}async shutdown(b,q=0){if(this.isShuttingDown){z.debug("[GracefulShutdown] 已在退出过程中,跳过重复退出");return}this.isShuttingDown=!0;try{N().command.actions.abort("process-shutdown")}catch(A){z.warn("[GracefulShutdown] Failed to abort the active command",A)}z.info(`[GracefulShutdown] 开始优雅退出 (原因: ${b})`);let Q=setTimeout(()=>{X(),process.exit(q)},5000);Q.unref?.();let U=4000,K;try{await Promise.race([this.runCleanupHandlers(),new Promise((A,J)=>{K=setTimeout(()=>{J(Error(`清理超时 (${U}ms)`))},U),K.unref?.()})])}catch(A){console.error("[GracefulShutdown] 清理过程中发生错误:",A)}finally{if(K)clearTimeout(K)}try{let A=$.getInstance(),J=N(),V=J.session?.sessionId||"unknown",W=J.session?.workspaceRoot||_();if(A.isEnabled(W,V)){let v=J.config?.config?.permissionMode||"default";await A.executeSessionEndHooks(E(b),{projectDir:W,sessionId:V,permissionMode:v})}}catch(A){console.error("[GracefulShutdown] SessionEnd hooks 执行失败:",A)}try{await Y()}catch{}clearTimeout(Q),X(),setTimeout(()=>{process.exit(q)},100)}async runCleanupHandlers(){let b=[...this.cleanupHandlers].reverse();for(let q of b)try{let F=q();if(F instanceof Promise)await F}catch(F){console.error("[GracefulShutdown] 清理函数执行失败:",F)}}isExiting(){return this.isShuttingDown}reset(){this.isShuttingDown=!1,this.cleanupHandlers=[],this.initialized=!1}}var O=()=>{return B.getInstance()},y=(b)=>{return O().registerCleanup(b)},j=()=>{O().initialize()},C=(b=0)=>{O().shutdown("normal",b)};
4
4
  export{O as Df,y as Ef,j as Ff,C as Gf};
@@ -1,2 +1,2 @@
1
- import{Xj as d,Zj as h}from"./chunk-ny34sr3w.js";var q={debug:{alias:"d",type:"string",describe:'Enable debug mode with optional category filtering (e.g., "agent,ui" or "!chat,!loop")',group:"Debug Options:"},model:{type:"string",describe:"Override the current run model using a model config ID (TUI / print / headless)",group:"AI Options:"},print:{alias:"p",type:"boolean",describe:"Print response and exit (useful for pipes)",group:"Output Options:"},headless:{type:"boolean",describe:"Run full agent loop without Ink UI and print all events to the terminal",group:"Output Options:"},"output-format":{alias:["outputFormat"],type:"string",choices:["text","json","stream-json","jsonl"],default:"text",describe:"Output format: --print supports text|json|stream-json; --headless supports text|jsonl",group:"Output Options:"},"json-schema":{alias:["jsonSchema"],type:"string",describe:"Inline JSON Schema for the turn-scoped structured final response",group:"Output Options:"},"output-schema":{alias:["outputSchema"],type:"string",describe:"Path to a JSON Schema file for the structured final response",group:"Output Options:"},"include-partial-messages":{alias:["includePartialMessages"],type:"boolean",describe:"Include partial message chunks as they arrive",group:"Output Options:"},"input-format":{alias:["inputFormat"],type:"string",choices:["text","stream-json"],default:"text",describe:"Input format",group:"Input Options:"},"replay-user-messages":{alias:["replayUserMessages"],type:"boolean",describe:"Re-emit user messages from stdin",group:"Input Options:"},"allowed-tools":{alias:["allowedTools"],type:"array",string:!0,describe:"Comma or space-separated list of tool names to allow",group:"Security Options:"},"disallowed-tools":{alias:["disallowedTools"],type:"array",string:!0,describe:"Comma or space-separated list of tool names to deny",group:"Security Options:"},"mcp-config":{alias:["mcpConfig"],type:"array",string:!0,describe:"Load MCP servers from JSON files or strings",group:"MCP Options:"},"system-prompt":{alias:["systemPrompt"],type:"string",describe:"System prompt to use for the session (replaces default)",group:"AI Options:"},"append-system-prompt":{alias:["appendSystemPrompt"],type:"string",describe:"Append a system prompt to the default system prompt",group:"AI Options:"},"max-turns":{alias:["maxTurns"],type:"number",describe:"Maximum conversation turns (-1: unlimited, 0: disable chat, N>0: limit to N turns)",group:"AI Options:",default:void 0},"max-concurrent-tasks":{alias:["maxConcurrentTasks"],type:"number",describe:"Maximum top-level tasks running concurrently in this process",group:"AI Options:",default:void 0},"max-queued-tasks":{alias:["maxQueuedTasks"],type:"number",describe:"Maximum top-level tasks waiting for an admission slot",group:"AI Options:",default:void 0},"max-queued-task-bytes":{alias:["maxQueuedTaskBytes"],type:"number",describe:"Maximum retained bytes across queued top-level tasks",group:"AI Options:",default:void 0},"max-resident-session-runtimes":{alias:["maxResidentSessionRuntimes"],type:"number",describe:"Maximum initialized Session runtimes resident in this process",group:"AI Options:",default:void 0},"session-runtime-idle-ms":{alias:["sessionRuntimeIdleMs"],type:"number",describe:"Idle time before an evictable Web Session runtime is evicted",group:"AI Options:",default:void 0},"max-resident-session-projections":{alias:["maxResidentSessionProjections"],type:"number",describe:"Maximum resident Session projections retained in this process",group:"AI Options:",default:void 0},"session-projection-idle-ms":{alias:["sessionProjectionIdleMs"],type:"number",describe:"Idle time before an evictable Session projection is evicted",group:"AI Options:",default:void 0},"permission-mode":{alias:["permissionMode"],type:"string",choices:["default","autoEdit","yolo","plan"],describe:"Permission mode (default: ask for non-read tools, autoEdit: auto-approve edits, yolo: auto-approve all, plan: reserved)",group:"Security Options:"},yolo:{type:"boolean",describe:"Auto-approve all tools (shortcut for --permission-mode=yolo)",group:"Security Options:"},"trust-workspace":{alias:["trustWorkspace"],type:"boolean",describe:"Trust the current workspace before loading project models, MCP, LSP, permissions, or plugins",group:"Security Options:"},continue:{alias:"c",type:"boolean",describe:"Continue the most recent conversation",group:"Session Options:"},resume:{alias:"r",describe:"Resume a conversation - provide a session ID or interactively select a conversation to resume",group:"Session Options:",coerce:(b)=>{if(b===void 0||b===!0||b==="")return"true";return String(b)}},"fork-session":{alias:["forkSession"],type:"boolean",describe:"Create a new session ID when resuming",group:"Session Options:"},settings:{type:"string",describe:"Path to a settings JSON file or JSON string",group:"Configuration:"},"add-dir":{alias:["addDir"],type:"array",string:!0,describe:"Additional directories to allow tool access to",group:"Security Options:"},ide:{type:"boolean",describe:"Automatically connect to IDE on startup",group:"Integration:"},acp:{type:"boolean",describe:"Run in ACP (Agent Client Protocol) mode for IDE integration",group:"Integration:"},"strict-mcp-config":{alias:["strictMcpConfig"],type:"boolean",describe:"Only use MCP servers from --mcp-config",group:"MCP Options:"},"session-id":{alias:["sessionId"],type:"string",describe:"Use a specific session ID for the conversation",group:"Session Options:"},agents:{type:"string",describe:"JSON object defining custom agents",group:"AI Options:"},"setting-sources":{alias:["settingSources"],type:"string",describe:"Comma-separated list of setting sources to load",group:"Configuration:"},"plugin-dir":{alias:["pluginDir"],type:"array",string:!0,describe:"Load plugins from specified directories",group:"Plugin Options:"}},w={scriptName:"blade",usage:"$0 [command] [options]",description:h(),version:d(),locale:"en",showHelpOnFail:!0,demandCommand:!1,recommendCommands:!0,strict:!1};
1
+ import{Xj as d,Zj as h}from"./chunk-c1p9eh59.js";var q={debug:{alias:"d",type:"string",describe:'Enable debug mode with optional category filtering (e.g., "agent,ui" or "!chat,!loop")',group:"Debug Options:"},model:{type:"string",describe:"Override the current run model using a model config ID (TUI / print / headless)",group:"AI Options:"},print:{alias:"p",type:"boolean",describe:"Print response and exit (useful for pipes)",group:"Output Options:"},headless:{type:"boolean",describe:"Run full agent loop without Ink UI and print all events to the terminal",group:"Output Options:"},"output-format":{alias:["outputFormat"],type:"string",choices:["text","json","stream-json","jsonl"],default:"text",describe:"Output format: --print supports text|json|stream-json; --headless supports text|jsonl",group:"Output Options:"},"json-schema":{alias:["jsonSchema"],type:"string",describe:"Inline JSON Schema for the turn-scoped structured final response",group:"Output Options:"},"output-schema":{alias:["outputSchema"],type:"string",describe:"Path to a JSON Schema file for the structured final response",group:"Output Options:"},"include-partial-messages":{alias:["includePartialMessages"],type:"boolean",describe:"Include partial message chunks as they arrive",group:"Output Options:"},"input-format":{alias:["inputFormat"],type:"string",choices:["text","stream-json"],default:"text",describe:"Input format",group:"Input Options:"},"replay-user-messages":{alias:["replayUserMessages"],type:"boolean",describe:"Re-emit user messages from stdin",group:"Input Options:"},"allowed-tools":{alias:["allowedTools"],type:"array",string:!0,describe:"Comma or space-separated list of tool names to allow",group:"Security Options:"},"disallowed-tools":{alias:["disallowedTools"],type:"array",string:!0,describe:"Comma or space-separated list of tool names to deny",group:"Security Options:"},"mcp-config":{alias:["mcpConfig"],type:"array",string:!0,describe:"Load MCP servers from JSON files or strings",group:"MCP Options:"},"system-prompt":{alias:["systemPrompt"],type:"string",describe:"System prompt to use for the session (replaces default)",group:"AI Options:"},"append-system-prompt":{alias:["appendSystemPrompt"],type:"string",describe:"Append a system prompt to the default system prompt",group:"AI Options:"},"max-turns":{alias:["maxTurns"],type:"number",describe:"Maximum conversation turns (-1: unlimited, 0: disable chat, N>0: limit to N turns)",group:"AI Options:",default:void 0},"max-concurrent-tasks":{alias:["maxConcurrentTasks"],type:"number",describe:"Maximum top-level tasks running concurrently in this process",group:"AI Options:",default:void 0},"max-queued-tasks":{alias:["maxQueuedTasks"],type:"number",describe:"Maximum top-level tasks waiting for an admission slot",group:"AI Options:",default:void 0},"max-queued-task-bytes":{alias:["maxQueuedTaskBytes"],type:"number",describe:"Maximum retained bytes across queued top-level tasks",group:"AI Options:",default:void 0},"max-resident-session-runtimes":{alias:["maxResidentSessionRuntimes"],type:"number",describe:"Maximum initialized Session runtimes resident in this process",group:"AI Options:",default:void 0},"session-runtime-idle-ms":{alias:["sessionRuntimeIdleMs"],type:"number",describe:"Idle time before an evictable Web Session runtime is evicted",group:"AI Options:",default:void 0},"max-resident-session-projections":{alias:["maxResidentSessionProjections"],type:"number",describe:"Maximum resident Session projections retained in this process",group:"AI Options:",default:void 0},"session-projection-idle-ms":{alias:["sessionProjectionIdleMs"],type:"number",describe:"Idle time before an evictable Session projection is evicted",group:"AI Options:",default:void 0},"permission-mode":{alias:["permissionMode"],type:"string",choices:["default","autoEdit","yolo","plan"],describe:"Permission mode (default: ask for non-read tools, autoEdit: auto-approve edits, yolo: auto-approve all, plan: reserved)",group:"Security Options:"},yolo:{type:"boolean",describe:"Auto-approve all tools (shortcut for --permission-mode=yolo)",group:"Security Options:"},"trust-workspace":{alias:["trustWorkspace"],type:"boolean",describe:"Trust the current workspace before loading project models, MCP, LSP, permissions, or plugins",group:"Security Options:"},continue:{alias:"c",type:"boolean",describe:"Continue the most recent conversation",group:"Session Options:"},resume:{alias:"r",describe:"Resume a conversation - provide a session ID or interactively select a conversation to resume",group:"Session Options:",coerce:(b)=>{if(b===void 0||b===!0||b==="")return"true";return String(b)}},"fork-session":{alias:["forkSession"],type:"boolean",describe:"Create a new session ID when resuming",group:"Session Options:"},settings:{type:"string",describe:"Path to a settings JSON file or JSON string",group:"Configuration:"},"add-dir":{alias:["addDir"],type:"array",string:!0,describe:"Additional directories to allow tool access to",group:"Security Options:"},ide:{type:"boolean",describe:"Automatically connect to IDE on startup",group:"Integration:"},acp:{type:"boolean",describe:"Run in ACP (Agent Client Protocol) mode for IDE integration",group:"Integration:"},"strict-mcp-config":{alias:["strictMcpConfig"],type:"boolean",describe:"Only use MCP servers from --mcp-config",group:"MCP Options:"},"session-id":{alias:["sessionId"],type:"string",describe:"Use a specific session ID for the conversation",group:"Session Options:"},agents:{type:"string",describe:"JSON object defining custom agents",group:"AI Options:"},"setting-sources":{alias:["settingSources"],type:"string",describe:"Comma-separated list of setting sources to load",group:"Configuration:"},"plugin-dir":{alias:["pluginDir"],type:"array",string:!0,describe:"Load plugins from specified directories",group:"Plugin Options:"}},w={scriptName:"blade",usage:"$0 [command] [options]",description:h(),version:d(),locale:"en",showHelpOnFail:!0,demandCommand:!1,recommendCommands:!0,strict:!1};
2
2
  export{q as xf,w as yf};
@@ -1,4 +1,4 @@
1
- import{Bc as f4}from"./chunk-9qxch6sy.js";import{Ad as x2,Bd as I2,Cc as D$,Cd as L6,Dd as q6,Ec as j$,Fc as M2,Gc as r1,Ic as H$,Jd as h2,Kd as k4,Ld as M4,Md as j6,Nd as e1,Od as R4,Pd as x4,Qd as d1,Ud as Z2,ae as o2,ce as A0,ee as x6,fe as o1,ge as I6,ne as W1,yd as R2}from"./chunk-ntw5zafw.js";import{se as T4}from"./chunk-skktstg8.js";import{Ke as F0,Le as n2,ve as P0,ye as F2,ze as s1}from"./chunk-s14zayxp.js";import{fg as t2}from"./chunk-x6k5ye1z.js";import{gg as A4,hg as h0,ig as O4,jg as sJ,lg as u1,mg as R6,ng as tJ,og as eJ,rg as $2}from"./chunk-1g7c3f82.js";import{ch as Z$,dh as c0,fh as E4,gh as S4}from"./chunk-kehgewqh.js";import{lh as H4,ph as j2}from"./chunk-kkzznz4w.js";import{Ah as T$}from"./chunk-yst43yp8.js";import{Ih as M$}from"./chunk-qxd33dt5.js";import{Zi as H0}from"./chunk-b22ab7yw.js";import{Ej as L0}from"./chunk-saz6mwpq.js";import{Xj as k2}from"./chunk-ny34sr3w.js";import{Ak as S2,Ck as T2,Hk as f2,dk as E2,sk as N2,tk as _2,wk as xJ,zk as AJ}from"./chunk-ed2hdrwe.js";import{Jk as lZ}from"./chunk-gmpsfkgg.js";function A$($){return $.role==="system"&&Array.isArray($.content)}function b$($){if($.role!=="system"||!$.metadata||Array.isArray($.metadata))return!1;return typeof $.metadata==="object"&&$.metadata.contextualProjectRules===!0}class x1{systemMessages;_contextualSystemMessages;_history;_pending=[];_contextRevision=0;context;constructor($,Z){this.context=$;let J=$.messages.find(A$);if(this._contextualSystemMessages=$.messages.filter(b$),J)this.systemMessages=[J,...this._contextualSystemMessages];else if(Z)this.systemMessages=[{role:"system",content:[{type:"text",text:Z,providerOptions:{anthropic:{cacheControl:{type:"ephemeral"}}}}]},...this._contextualSystemMessages];else this.systemMessages=[...this._contextualSystemMessages];this._history=$.messages.filter((W)=>!A$(W)&&!b$(W))}get historyLength(){return this._history.length}get pending(){return this._pending}get contextRevision(){return this._contextRevision}toLLMMessages(){return[...this.systemMessages,...this._history,...this._pending]}getHistory(){return this._history}appendUser($){this._pending.push($)}appendAssistant($){this._pending.push($)}appendToolResult($){this._pending.push($)}appendContextualProjectInstructions($){if(!b$($))throw Error("Contextual project instructions require safe metadata");this._contextualSystemMessages.push($),this.systemMessages.push($)}syncContextualSystemMessages(){let $=this.systemMessages.filter(A$);this.systemMessages.splice(0,this.systemMessages.length,...$,...this._contextualSystemMessages)}appendControl($,Z){if($==="system")throw Error("Cannot append system control message via appendControl. Use constructor for root system prompt.");this._pending.push({...Z,metadata:{...Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:{},...F0}})}appendDurableControl($){if(!$.id||$.role!=="user")throw Error("Durable control messages require a user role and identity");if(this._history.some((Z)=>Z.id===$.id))return;this._history.push($)}appendToHistory($){this._history.push($)}commitPending(){if(this._pending.length>0)this._history.push(...this._pending),this._pending=[]}replaceHistory($){this._history=$.filter((Z)=>!A$(Z)&&!b$(Z)),this._contextRevision++}restoreDurableHistory($){this._contextualSystemMessages=$.filter(b$),this._history=$.filter((Z)=>!A$(Z)&&!b$(Z)),this._pending=[],this.syncContextualSystemMessages(),this._contextRevision++}removeMessages($){let Z=[this._history.length,this._pending.length,this._contextualSystemMessages.length];if(this._history=this._history.filter((J)=>!$(J)),this._pending=this._pending.filter((J)=>!$(J)),this._contextualSystemMessages=this._contextualSystemMessages.filter((J)=>!$(J)),this.syncContextualSystemMessages(),this._history.length!==Z[0]||this._pending.length!==Z[1]||this._contextualSystemMessages.length!==Z[2])this._contextRevision++}writeback(){this.commitPending(),this.context.messages=[...this._contextualSystemMessages,...this._history]}}function QJ($){if($.isSubagent)return"continue";if(!$.budget||$.budget<=0)return"continue";if($.consecutiveContinuations>=3&&$.lastOutputDelta<500)return"stop";if($.usage/$.budget>=0.9)return"stop";return"continue"}function XJ($){return{budget:$.budget,usage:0,consecutiveContinuations:0,lastOutputDelta:0,isSubagent:$.isSubagent??!1}}function HJ($,Z,J){return{...$,usage:$.usage+Z,lastOutputDelta:Z,consecutiveContinuations:J?$.consecutiveContinuations+1:0}}import X$ from"node:path";var i4=new Set(["GOEXPERIMENT","GOOS","GOARCH","CGO_ENABLED","GO111MODULE","RUST_BACKTRACE","RUST_LOG","NODE_ENV","PYTHONUNBUFFERED","PYTHONDONTWRITEBYTECODE","GIT_TERMINAL_PROMPT","LANG","LANGUAGE","LC_ALL","LC_CTYPE","LC_TIME","CHARSET","TERM","COLORTERM","NO_COLOR","FORCE_COLOR","TZ","LS_COLORS","LSCOLORS","GREP_COLOR","GREP_COLORS"]),l4=/^(LD_.+|DYLD_.+|PATH)$/,VJ=/^([A-Za-z_][A-Za-z0-9_]*)=([\w./:@-]*)$/;function e$($){let Z=$;while(!0){let J=Z.match(/^(\S+)[ \t]+([\s\S]*)$/);if(!J)break;let W=J[1],Y=J[2],K=W.match(VJ);if(!K)break;let Q=K[1];if(!i4.has(Q))break;Z=Y}return Z}function qW($){let Z=$;while(!0){let J=Z.match(/^(\S+)[ \t]+([\s\S]*)$/);if(!J)break;let W=J[1],Y=J[2],K=W.match(VJ);if(!K)break;let Q=K[1];if(l4.test(Q))break;Z=Y}return Z}var r4=[/^timeout[ \t]+(?:--foreground[ \t]+|--preserve-status[ \t]+|-v[ \t]+|--verbose[ \t]+|-k[ \t]+\S+[ \t]+|--kill-after[= ]\S+[ \t]+|-s[ \t]+\S+[ \t]+|--signal[= ]\S+[ \t]+)*\S+[ \t]+/,/^time[ \t]+/,/^nice[ \t]+(?:-n[ \t]+\d+[ \t]+|-\d+[ \t]+)?/,/^nohup[ \t]+/];function IZ($){let Z=$,J=!0;while(J){J=!1;for(let W of r4){let Y=Z.match(W);if(Y){Z=Z.slice(Y[0].length),J=!0;break}}if(Z.startsWith("-- "))Z=Z.slice(3),J=!0}return Z}function $1($){let Z=[],J="",W=!1,Y=!1,K=!1;for(let Q=0;Q<$.length;Q++){let X=$[Q];if(K){J+=X,K=!1;continue}if(X==="\\"&&!W){J+=X,K=!0;continue}if(X==="'"&&!Y){W=!W,J+=X;continue}if(X==='"'&&!W){Y=!Y,J+=X;continue}if(W||Y){J+=X;continue}if(X==="|"){if(Q+1<$.length&&$[Q+1]==="|"){if(J.trim())Z.push(J.trim());J="",Q++;continue}return null}if(X===">"||X==="<")return null;if(X==="&"&&Q+1<$.length&&$[Q+1]==="&"){if(J.trim())Z.push(J.trim());J="",Q++;continue}if(X==="&")return null;if(X===";"){if(J.trim())Z.push(J.trim());J="";continue}J+=X}if(J.trim())Z.push(J.trim());return Z.length>0?Z:null}function zJ($){let Z=!1,J=!1,W=!1;for(let Y=0;Y<$.length;Y++){let K=$[Y];if(W){W=!1;continue}if(K==="\\"&&!Z){W=!0;continue}if(K==="'"&&!J){Z=!Z;continue}if(K==='"'&&!Z){J=!J;continue}if(Z)continue;if(K==="$"){let Q=$[Y+1];if(Q&&/[A-Za-z_@*#?!$0-9({]/.test(Q))return!0}if(K==="`")return!0;if(J)continue;if(K==="|")return!0;if(K===">"||K==="<")return!0;if(K==="{"){let Q=$.slice(Y);if(/^\{[^}]*,[^}]*\}/.test(Q)||/^\{[^}]*\.\.[^}]*\}/.test(Q))return!0}}return!1}function Q$($){let Z=[],J="",W=!1,Y=!1,K=!1;for(let Q=0;Q<$.length;Q++){let X=$[Q];if(K){J+=X,K=!1;continue}if(X==="\\"&&!W){if(K=!0,Y){let H=$[Q+1];if(H&&'$`"\\'.includes(H))continue;J+=X,K=!1}continue}if(X==="'"&&!Y){W=!W;continue}if(X==='"'&&!W){Y=!Y;continue}if(!W&&!Y&&/[ \t]/.test(X)){if(J)Z.push(J),J="";continue}J+=X}if(J)Z.push(J);return Z}var n4=new Set(["npm","pnpm","yarn","bun"]),BJ=new Set(["biome","eslint","jest","mypy","pyright","pytest","ruff","tsc","vitest"]),o4=new Set(["-u","--fix","--update","--update-snapshot","--updateSnapshot","--watch","--watchAll","--write"]),a4=/[ \t]*;[ \t]*echo[ \t]+"[A-Za-z0-9 _:=.-]*(?:\$\{PIPESTATUS\[0\]\}|\$\?)[A-Za-z0-9 _:=.-]*"[ \t]*$/;function s4($){return $!==void 0&&/^(?:test|lint|build|type-?check)(?::[\w.-]+)*$/i.test($)}function jJ($){return $.replace(/\s+2>&1\s*$/,"").trim()}function t4($,Z,J){if(!J||Z.length!==2)return;let W=/^(.+?)[ \t]+&&[ \t]+([\s\S]+)$/.exec($);if(!W)return;let Y=Q$(W[1]??"");if(Y.length!==2||Y[0]!=="cd")return;let K=Y[1];if(!K||K==="-")return;let Q=X$.isAbsolute(K)?X$.resolve(K):X$.resolve(J,K);if(!H$.isWithinWorkspace(Q,J))return;return W[2]?.trim()||void 0}function e4($){let Z=[],J=!1,W=!1,Y=!1;for(let K=0;K<$.length;K++){let Q=$[K];if(Y){Y=!1;continue}if(Q==="\\"&&!J){Y=!0;continue}if(Q==="'"&&!W){J=!J;continue}if(Q==='"'&&!J){W=!W;continue}if(Q!=="|"||J||W)continue;if($[K+1]==="|")return;Z.push(K)}return Z}function $5($){let Z=Q$($),[J,W,Y]=Z;if(J!=="head"&&J!=="tail")return!1;if(Z.length===1)return!0;let K=(Q)=>Q!==void 0&&/^[1-9]\d{0,4}$/.test(Q);if(Z.length===2)return W?.startsWith("--lines=")&&K(W.slice(8))||W?.startsWith("-")&&K(W.slice(1));return Z.length===3&&(W==="-n"||W==="--lines")&&K(Y)}function Z5($){let Z=jJ($.replace(a4,"").trim()),J=e4(Z);if(!J)return;if(J.length===0)return DJ(Z);if(J.length!==1)return;let W=J[0];if(W===void 0)return;let Y=jJ(Z.slice(0,W).trim()),K=Z.slice(W+1).trim();if(!Y||!$5(K))return;return DJ(Y)}function DJ($){let J=$1($)?.at(-1);if(!J)return $;let W=Q$(J),[Y,K]=W;if(!(Y==="vitest"||(Y==="npx"||Y==="bunx")&&K==="vitest")||W.some((X)=>X==="--configLoader"||X.startsWith("--configLoader=")))return $;return`${$} --configLoader runner`}function E$($,Z){let J=Z5($);if(!J)return!1;let W=e$(J),Y=$1(W);if(!Y||zJ(W)||/[\r\n]/.test(W))return!1;let K=Y.length===1?Y[0]:t4(W,Y,Z);if(!K)return!1;let Q=Q$(K);if(Q.length===0||Q.some((V)=>[...o4].some((j)=>V===j||V.startsWith(`${j}=`))))return!1;let[X,H,z]=Q;if(n4.has(X??""))return s4(H==="run"?z:H)||H==="--test";if((X==="npx"||X==="bunx")&&BJ.has(H??""))return!0;if(BJ.has(X??""))return!0;if(X==="node"&&H==="--test")return!0;if(X==="go"&&["build","test","vet"].includes(H??""))return!0;return X==="cargo"&&["build","check","clippy","test"].includes(H??"")}function _W($,Z){if($===void 0)return!0;if(typeof $!=="string"||$.split(/[\\/]/).includes(".."))return!1;if(!Z)return!X$.isAbsolute($);let J=X$.isAbsolute($)?X$.resolve($):X$.resolve(Z,$);return H$.isWithinWorkspace(J,Z)}var hZ=L0("Agent"),J5=3;function vZ($,Z,J){if($!=="length")return{action:"none"};if(Z>=J5)return{action:"truncated"};if(QJ(J)==="stop")return hZ.info("[Loop] Token budget: diminishing returns detected, skipping recovery"),{action:"budget_stop"};return{action:"recover"}}var W5=[/:\s*$/,/:\s*$/,/\.\.\.\s*$/,/让我(先|来|开始|查看|检查|修复)/,/Let me (first|start|check|look|fix)/i,/I('ll| will) (now |)(create|write|edit|update|modify|fix|add|implement)/i,/我(现在就|来|要)(创建|写入|编辑|修改|修复|添加|实现)/,/\d+\.\s+(First|Next|Then|Finally)/i],Y5=/```[\s\S]{50,}```/,wJ="请执行你提到的操作,不要只是描述。使用 Edit/Write/ApplyPatch/Bash 工具来实际修改文件。",K5=2;function CZ($,Z,J=!0){if(!$||Z>=K5)return{action:"none"};if(!J&&Y5.test($))return{action:"retry",prompt:wJ};let W=$.slice(-200),Y=W.match(/```/g);if(Y&&Y.length%2!==0)return{action:"none"};if(W5.some((Q)=>Q.test(W)))return{action:"retry",prompt:wJ};return{action:"none"}}var I1=2,Q5="The model returned tool-call JSON as text instead of completing the requested tool workflow.",X5="The previous response contained tool-call JSON as ordinary text. It did not execute a tool. If the requested operation is still needed, use the native tool-call interface with an available tool. If it already succeeded, use the recorded result to answer instead of repeating the operation. Do not return another tool-call JSON envelope as your final answer.";function pZ($,Z,J,W){if(!$||$.length>65536||J.length===0)return{action:"none"};let Y=Z.replace(/```[\s\S]*?(?:```|$)/g,"").replace(/^\s*>.*$/gm,"");if(/\b(?:example|schema|serialize|serialization|quote|print|illustrate|verbatim)\b|示例|样例|序列化|引用原文/i.test(Y)||/\b(?:explain|show|return|output)\b[^.!?\n]{0,80}\b(?:json|tool.calls?)\b|(?:解释|展示|输出|返回)[^。!?\n]{0,40}(?:JSON|工具调用格式)/i.test(Y)||/\b(?:do not|don't|never)\s+(?:use|call|invoke|execute)\s+(?:any\s+)?tools?\b|不要(?:使用|调用|执行)(?:任何)?工具/i.test(Y))return{action:"none"};let K;try{K=JSON.parse($)}catch{return{action:"none"}}if(!K||typeof K!=="object"||Array.isArray(K)||Object.keys(K).length!==1||!("tool_calls"in K)||!Array.isArray(K.tool_calls)||K.tool_calls.length===0||K.tool_calls.length>32)return{action:"none"};let Q=new Set;for(let X of K.tool_calls){if(!X||typeof X!=="object"||Array.isArray(X))return{action:"none"};let H="function"in X;if(Object.keys(X).some((G)=>!["id","type",...H?["function"]:["name","arguments"]].includes(G)))return{action:"none"};if("type"in X&&X.type!=="function")return{action:"none"};let z=H?X.function:X;if(!z||typeof z!=="object"||Array.isArray(z)||!("name"in z)||typeof z.name!=="string"||!("arguments"in z))return{action:"none"};if(H&&Object.keys(z).some((G)=>G!=="name"&&G!=="arguments"))return{action:"none"};if(!J.includes(z.name))return{action:"none"};let V=z.arguments;if(typeof V!=="string"&&(!V||typeof V!=="object"||Array.isArray(V)))return{action:"none"};let j=z.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),B=new RegExp(`(?:^|[.!?。!?;;\\n])\\s*(?:please\\s+)?(?:call|invoke|execute|run|use)\\s+(?:the\\s+)?(?:tool\\s+)?[\`"']?${j}(?![\\w:-])|(?:^|[。!?;\\n])\\s*(?:请)?(?:调用|使用|执行)\\s*(?:工具\\s*)?[\`"']?${j}(?![\\w:-])`,"i"),w=new RegExp(`(?:do not|don't|never)\\s+(?:call|invoke|execute|run|use)\\s+(?:the\\s+)?(?:tool\\s+)?[\`"']?${j}(?![\\w:-])|(?:不要|禁止)(?:调用|使用|执行)\\s*(?:工具\\s*)?[\`"']?${j}(?![\\w:-])`,"i");if(!B.test(Y)||w.test(Y))return{action:"none"};Q.add(z.name)}return W<I1?{action:"retry",prompt:X5,...Q.size===1?{toolName:[...Q][0]}:{}}:{action:"fail",message:Q5}}var H5=[/\b(?:run|execute|rerun|re-run)\b[\s\S]{0,60}\b(?:tests?|test suite|lint|type-?check|build)\b/i,/\b(?:npm|pnpm|yarn|bun)\s+(?:run\s+)?(?:test|lint|build|type-?check)\b/i,/(?:运行|执行|跑|重新运行).{0,30}(?:测试|单测|集成测试|检查|构建)/],UJ={test:/\b(?:tests?|test suite)\b|(?:测试|单测|集成测试)/i,lint:/\blint(?:ing)?\b/i,"type-check":/\btype[\s-]?check(?:ing)?\b|\btsc\b|类型检查/i,build:/\bbuild\b|构建/i},V5={test:/(?:^|\s)(?:npm|pnpm|yarn|bun)\s+(?:run\s+)?test\b|(?:^|\s)(?:node|bun)\s+--test\b|(?:^|\s)(?:vitest|jest|pytest|go\s+test|cargo\s+test)\b/i,lint:/(?:^|\s)(?:npm|pnpm|yarn|bun)\s+(?:run\s+)?lint\b/i,"type-check":/(?:^|\s)(?:npm|pnpm|yarn|bun)\s+(?:run\s+)?type-?check\b|(?:^|\s)tsc\b/i,build:/(?:^|\s)(?:npm|pnpm|yarn|bun)\s+(?:run\s+)?build\b/i},z5="The user explicitly required verification, but it has not run successfully. Do not finish or explain. Your next action must be a Bash tool call that runs the requested test, lint, type-check, or build command. Inspect the command result and fix any failure before finishing.",B5="Required verification did not run successfully before the retry limit.",j5=3;function LJ($,Z,J,W){if(!J.success)return;if(["Edit","Write","ApplyPatch","NotebookEdit"].includes(Z)){$.clear();return}if(Z==="Bash"&&typeof J.metadata?.command==="string"&&J.metadata.exit_code===0&&E$(J.metadata.command,W)){$.add(J.metadata.command);return}if(!["Task","TaskOutput"].includes(Z))return;let Y=J.metadata?.verificationCommands;if(!Array.isArray(Y))return;for(let K of Y)if(typeof K==="string"&&E$(K,W))$.add(K)}function gZ($,Z,J){if(!$||!H5.some((H)=>H.test($)))return{action:"none"};let W=Object.keys(UJ).filter((H)=>UJ[H].test($)),Y=[...Z],K=W.filter((H)=>!Y.some((z)=>V5[H].test(z)));if(W.length>0?K.length===0:Y.some((H)=>E$(H)))return{action:"none"};if(J>=j5)return{action:"fail",message:B5};let X=W.length>1&&K.length>0?` Missing successful verification categories: ${K.join(", ")}.`:"";return{action:"retry",prompt:`${z5}${X}`}}var D5=[/\bdelegate\b[\s\S]{0,120}\b(?:Task tool|subagent|agent)\b/i,/\b(?:call|use|invoke)\b[\s\S]{0,80}\bTask tool\b/i,/(?:委派|交给|调用|使用).{0,60}(?:Task|子代理|子智能体)/],qJ=[/\b(?:do not|don't|never)\s+(?:delegate|call|use|invoke)\b/i,/(?:不要|禁止|无需)(?:委派|调用|使用).{0,20}(?:Task|子代理|子智能体)?/];function FJ($){return typeof $==="string"&&qJ.some((Z)=>Z.test($))}var w5=[/\b(?:call|use|invoke)\b[\s\S]{0,30}\bTask(?: tool)?\b[\s\S]{0,30}\bexactly once\b/i,/\bexactly once\b[\s\S]{0,30}\b(?:call|use|invoke)\b[\s\S]{0,30}\bTask(?: tool)?\b/i,/\bexactly one\b[\s\S]{0,30}\bTask(?: tool)? calls?\b/i,/(?:Task|子代理).{0,20}(?:恰好|仅|只)(?:调用|使用)?一次/,/(?:恰好|仅|只)(?:调用|使用)?一次.{0,20}(?:Task|子代理)/],U5=[/\b(?:do not|don't|never)\s+(?:call|use|invoke)\s+(?:the\s+)?Task\b[\s\S]{0,30}\bexactly once\b/i,/\bTask\b[\s\S]{0,30}\b(?:does not|doesn't|need not)\b[\s\S]{0,30}\bexactly once\b/i,/\bmultiple\s+Task(?: tool)?\s+calls?\s+(?:are\s+)?allowed\b/i,/(?:不要|禁止).{0,12}(?:Task|子代理).{0,12}(?:恰好|仅|只)(?:调用|使用)?一次/];function G5($){if(typeof $!=="string")return;if(U5.some((Z)=>Z.test($)))return"multiple-allowed";return w5.some((Z)=>Z.test($))?"required":void 0}function Z1($){for(let Z of $){let J=G5(Z);if(J!==void 0)return J==="required"}return!1}var L5="The user explicitly required delegation, but no Task tool call completed successfully. Do not solve the task directly or explain. Your next action must be a Task tool call using the requested subagent.",q5="Required delegation did not complete before the retry limit.",F5=3;function OJ($,Z,J){let W=(typeof $==="string"?[$]:$??[]).map((Q)=>Q.trim()).filter(Boolean),Y=Z1(W),K=!1;if(!Y)for(let Q of W){if(qJ.some((X)=>X.test(Q)))break;if(D5.some((X)=>X.test(Q))){K=!0;break}}if(W.length===0||!Y&&!K||Z.has("Task"))return{action:"none"};if(J>=F5)return{action:"fail",message:q5};return{action:"retry",prompt:L5}}var O5=[/\b(?:use|create|enter|start|work\s+(?:in|inside))\b.{0,60}\bworktree\b/i,/(?:使用|创建|进入).{0,30}(?:worktree|工作树)/i],P5=[/\b(?:exit|leave)\b.{0,40}\bworktree\b/i,/\bworktree\b.{0,60}\b(?:action\s+)?(?:keep|remove)\b/i,/(?:退出|离开).{0,30}(?:worktree|工作树)/i],N5=[/\b(?:do not|don't|never|must not|should not)\b[^.!?;\n]{0,80}\b(?:git\s+)?worktree\b/gi,/\bwithout\b[^.!?;\n]{0,60}\b(?:git\s+)?worktree\b/gi,/(?:不要|禁止|不得|无需)[^。!?;\n]{0,50}(?:worktree|工作树)/gi];function PJ($){return N5.reduce((Z,J)=>Z.replace(J," "),$)}function h1($){if(typeof $!=="string")return!1;let Z=PJ($);return O5.some((J)=>J.test(Z))}var _5="The user explicitly required git worktree isolation, but EnterWorktree has not completed successfully. Do not continue in the original workspace. Your next action must be an EnterWorktree tool call. Wait for its result before using file or Bash tools.",y5="The user explicitly required leaving the managed worktree, but ExitWorktree has not completed successfully. Do not finish or explain. Your next action must be an ExitWorktree tool call using the action requested by the user.",b5="Required worktree lifecycle did not complete before the retry limit.",A5=3;function NJ($,Z,J){if(!$)return{action:"none"};let W=PJ($);if(!h1(W))return{action:"none"};let Y=P5.some((Q)=>Q.test(W));if(Z.has("TaskWorktree"))return{action:"none"};let K=!Z.has("EnterWorktree")?"EnterWorktree":Y&&!Z.has("ExitWorktree")?"ExitWorktree":void 0;if(!K)return{action:"none"};if(J>=A5)return{action:"fail",message:b5};return{action:"retry",tool:K,prompt:K==="EnterWorktree"?_5:y5}}var GJ=30000;async function mZ($){try{let J=T$.getInstance().executeStopHooks({projectDir:$.workspaceRoot??H0(),sessionId:$.sessionId,permissionMode:$.permissionMode,reason:$.reason,abortSignal:$.abortSignal}),W,Y=new Promise((K)=>{W=setTimeout(()=>K("timeout"),GJ)});try{let K=await Promise.race([J,Y]);if(K==="timeout")return hZ.warn(`[Loop] Stop hook 超时 (${GJ}ms),按 shouldStop: true 处理`),{action:"stop"};let Q=K;if(!Q.shouldStop)return{action:"continue",reason:Q.continueReason};return{action:"stop"}}finally{clearTimeout(W)}}catch(Z){return hZ.warn("[Loop] Stop hook execution failed:",Z),{action:"stop"}}}async function E5($,Z){let J;while(!(J=await $.next()).done)if(Z)await Z(J.value);return J.value}var S5=[/<system-reminder>[\s\S]*?<\/system-reminder>/gi,/<file[^>]*>[\s\S]*?<\/file>/gi,/<hooks_context>[\s\S]*?<\/hooks_context>/gi,/<[^>]+>/g];function T5($){if(typeof $==="string")return $;if(Array.isArray($))return $.map((Z)=>{if(typeof Z==="string")return Z;if(Z&&typeof Z==="object"&&"text"in Z){let J=Z.text;return typeof J==="string"?J:""}return""}).join(" ");return""}function f5($){let Z=$;for(let H of S5)Z=Z.replace(H," ");Z=Z.replace(/^\s*\/[a-zA-Z][\w-]*\s+/,"");let J=Z.replace(/\s+/g," ").trim();if(!J)return"";let W=J.match(/^(.+?)(?:[.!?]\s|[。!?](?=\S|$)|$)/),Y=W&&W[1].length>=6?W[1]:J;if(Y=Y.trim().replace(/[\s.。!!??,,;;::-]+$/,""),Y.length<=60)return Y;let K=Y.slice(0,60),Q=K.lastIndexOf(" ");return`${(Q>36?K.slice(0,Q):K).trimEnd()}…`}function _J($){return f5(T5($))}import{EventEmitter as k5}from"events";import yJ from"node:path";function uZ($){if(AJ($.sessionId),!yJ.isAbsolute($.projectPath))throw Error("projectPath must be absolute");return{sessionId:$.sessionId,projectPath:yJ.resolve($.projectPath)}}function bJ($){let Z=uZ($);return JSON.stringify([Z.projectPath,Z.sessionId])}function hW($,Z){return bJ($)===bJ(Z)}class f$ extends k5{static instance;constructor(){super();this.setMaxListeners(100)}static getInstance(){if(!f$.instance)f$.instance=new f$;return f$.instance}publish($,Z,J,W){let Y=uZ($);this.emit("event",{sessionId:Y.sessionId,projectPath:Y.projectPath,type:Z,...W!==void 0?{seq:W}:{},properties:J})}subscribe($){return this.on("event",$),()=>this.off("event",$)}}var J1=f$.getInstance();var a0=L0("Agent"),v1=new Set;async function M5($,Z){let J=$.sessionId;if(!J||$.subagentInfo)return;if(v1.has(J))return;if(v1.size>=5000)v1.clear();v1.add(J);try{let W=$.workspaceRoot,Y=await W1.findSessionMetadata(J,W);if(!Y)return;if(Y.title&&Y.title.trim())return;let K=_J(Z);if(!K)return;await W1.updateSessionMetadata(J,Y.projectPath,{title:K}),J1.publish({sessionId:J,projectPath:Y.projectPath},"session.updated",{title:K})}catch(W){a0.debug?.("[Loop] 自动生成会话标题失败:",W)}}var dZ=`<turn_aborted>
1
+ import{Bc as f4}from"./chunk-9qxch6sy.js";import{Ad as x2,Bd as I2,Cc as D$,Cd as L6,Dd as q6,Ec as j$,Fc as M2,Gc as r1,Ic as H$,Jd as h2,Kd as k4,Ld as M4,Md as j6,Nd as e1,Od as R4,Pd as x4,Qd as d1,Ud as Z2,ae as o2,ce as A0,ee as x6,fe as o1,ge as I6,ne as W1,yd as R2}from"./chunk-kc5ncjv0.js";import{se as T4}from"./chunk-skktstg8.js";import{Ke as F0,Le as n2,ve as P0,ye as F2,ze as s1}from"./chunk-s14zayxp.js";import{fg as t2}from"./chunk-x6k5ye1z.js";import{gg as A4,hg as h0,ig as O4,jg as sJ,lg as u1,mg as R6,ng as tJ,og as eJ,rg as $2}from"./chunk-1g7c3f82.js";import{ch as Z$,dh as c0,fh as E4,gh as S4}from"./chunk-kehgewqh.js";import{lh as H4,ph as j2}from"./chunk-kkzznz4w.js";import{Ah as T$}from"./chunk-akcv10na.js";import{Ih as M$}from"./chunk-jbfdab1x.js";import{Zi as H0}from"./chunk-b22ab7yw.js";import{Ej as L0}from"./chunk-saz6mwpq.js";import{Xj as k2}from"./chunk-c1p9eh59.js";import{Ak as S2,Ck as T2,Hk as f2,dk as E2,sk as N2,tk as _2,wk as xJ,zk as AJ}from"./chunk-ed2hdrwe.js";import{Jk as lZ}from"./chunk-gmpsfkgg.js";function A$($){return $.role==="system"&&Array.isArray($.content)}function b$($){if($.role!=="system"||!$.metadata||Array.isArray($.metadata))return!1;return typeof $.metadata==="object"&&$.metadata.contextualProjectRules===!0}class x1{systemMessages;_contextualSystemMessages;_history;_pending=[];_contextRevision=0;context;constructor($,Z){this.context=$;let J=$.messages.find(A$);if(this._contextualSystemMessages=$.messages.filter(b$),J)this.systemMessages=[J,...this._contextualSystemMessages];else if(Z)this.systemMessages=[{role:"system",content:[{type:"text",text:Z,providerOptions:{anthropic:{cacheControl:{type:"ephemeral"}}}}]},...this._contextualSystemMessages];else this.systemMessages=[...this._contextualSystemMessages];this._history=$.messages.filter((W)=>!A$(W)&&!b$(W))}get historyLength(){return this._history.length}get pending(){return this._pending}get contextRevision(){return this._contextRevision}toLLMMessages(){return[...this.systemMessages,...this._history,...this._pending]}getHistory(){return this._history}appendUser($){this._pending.push($)}appendAssistant($){this._pending.push($)}appendToolResult($){this._pending.push($)}appendContextualProjectInstructions($){if(!b$($))throw Error("Contextual project instructions require safe metadata");this._contextualSystemMessages.push($),this.systemMessages.push($)}syncContextualSystemMessages(){let $=this.systemMessages.filter(A$);this.systemMessages.splice(0,this.systemMessages.length,...$,...this._contextualSystemMessages)}appendControl($,Z){if($==="system")throw Error("Cannot append system control message via appendControl. Use constructor for root system prompt.");this._pending.push({...Z,metadata:{...Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:{},...F0}})}appendDurableControl($){if(!$.id||$.role!=="user")throw Error("Durable control messages require a user role and identity");if(this._history.some((Z)=>Z.id===$.id))return;this._history.push($)}appendToHistory($){this._history.push($)}commitPending(){if(this._pending.length>0)this._history.push(...this._pending),this._pending=[]}replaceHistory($){this._history=$.filter((Z)=>!A$(Z)&&!b$(Z)),this._contextRevision++}restoreDurableHistory($){this._contextualSystemMessages=$.filter(b$),this._history=$.filter((Z)=>!A$(Z)&&!b$(Z)),this._pending=[],this.syncContextualSystemMessages(),this._contextRevision++}removeMessages($){let Z=[this._history.length,this._pending.length,this._contextualSystemMessages.length];if(this._history=this._history.filter((J)=>!$(J)),this._pending=this._pending.filter((J)=>!$(J)),this._contextualSystemMessages=this._contextualSystemMessages.filter((J)=>!$(J)),this.syncContextualSystemMessages(),this._history.length!==Z[0]||this._pending.length!==Z[1]||this._contextualSystemMessages.length!==Z[2])this._contextRevision++}writeback(){this.commitPending(),this.context.messages=[...this._contextualSystemMessages,...this._history]}}function QJ($){if($.isSubagent)return"continue";if(!$.budget||$.budget<=0)return"continue";if($.consecutiveContinuations>=3&&$.lastOutputDelta<500)return"stop";if($.usage/$.budget>=0.9)return"stop";return"continue"}function XJ($){return{budget:$.budget,usage:0,consecutiveContinuations:0,lastOutputDelta:0,isSubagent:$.isSubagent??!1}}function HJ($,Z,J){return{...$,usage:$.usage+Z,lastOutputDelta:Z,consecutiveContinuations:J?$.consecutiveContinuations+1:0}}import X$ from"node:path";var i4=new Set(["GOEXPERIMENT","GOOS","GOARCH","CGO_ENABLED","GO111MODULE","RUST_BACKTRACE","RUST_LOG","NODE_ENV","PYTHONUNBUFFERED","PYTHONDONTWRITEBYTECODE","GIT_TERMINAL_PROMPT","LANG","LANGUAGE","LC_ALL","LC_CTYPE","LC_TIME","CHARSET","TERM","COLORTERM","NO_COLOR","FORCE_COLOR","TZ","LS_COLORS","LSCOLORS","GREP_COLOR","GREP_COLORS"]),l4=/^(LD_.+|DYLD_.+|PATH)$/,VJ=/^([A-Za-z_][A-Za-z0-9_]*)=([\w./:@-]*)$/;function e$($){let Z=$;while(!0){let J=Z.match(/^(\S+)[ \t]+([\s\S]*)$/);if(!J)break;let W=J[1],Y=J[2],K=W.match(VJ);if(!K)break;let Q=K[1];if(!i4.has(Q))break;Z=Y}return Z}function qW($){let Z=$;while(!0){let J=Z.match(/^(\S+)[ \t]+([\s\S]*)$/);if(!J)break;let W=J[1],Y=J[2],K=W.match(VJ);if(!K)break;let Q=K[1];if(l4.test(Q))break;Z=Y}return Z}var r4=[/^timeout[ \t]+(?:--foreground[ \t]+|--preserve-status[ \t]+|-v[ \t]+|--verbose[ \t]+|-k[ \t]+\S+[ \t]+|--kill-after[= ]\S+[ \t]+|-s[ \t]+\S+[ \t]+|--signal[= ]\S+[ \t]+)*\S+[ \t]+/,/^time[ \t]+/,/^nice[ \t]+(?:-n[ \t]+\d+[ \t]+|-\d+[ \t]+)?/,/^nohup[ \t]+/];function IZ($){let Z=$,J=!0;while(J){J=!1;for(let W of r4){let Y=Z.match(W);if(Y){Z=Z.slice(Y[0].length),J=!0;break}}if(Z.startsWith("-- "))Z=Z.slice(3),J=!0}return Z}function $1($){let Z=[],J="",W=!1,Y=!1,K=!1;for(let Q=0;Q<$.length;Q++){let X=$[Q];if(K){J+=X,K=!1;continue}if(X==="\\"&&!W){J+=X,K=!0;continue}if(X==="'"&&!Y){W=!W,J+=X;continue}if(X==='"'&&!W){Y=!Y,J+=X;continue}if(W||Y){J+=X;continue}if(X==="|"){if(Q+1<$.length&&$[Q+1]==="|"){if(J.trim())Z.push(J.trim());J="",Q++;continue}return null}if(X===">"||X==="<")return null;if(X==="&"&&Q+1<$.length&&$[Q+1]==="&"){if(J.trim())Z.push(J.trim());J="",Q++;continue}if(X==="&")return null;if(X===";"){if(J.trim())Z.push(J.trim());J="";continue}J+=X}if(J.trim())Z.push(J.trim());return Z.length>0?Z:null}function zJ($){let Z=!1,J=!1,W=!1;for(let Y=0;Y<$.length;Y++){let K=$[Y];if(W){W=!1;continue}if(K==="\\"&&!Z){W=!0;continue}if(K==="'"&&!J){Z=!Z;continue}if(K==='"'&&!Z){J=!J;continue}if(Z)continue;if(K==="$"){let Q=$[Y+1];if(Q&&/[A-Za-z_@*#?!$0-9({]/.test(Q))return!0}if(K==="`")return!0;if(J)continue;if(K==="|")return!0;if(K===">"||K==="<")return!0;if(K==="{"){let Q=$.slice(Y);if(/^\{[^}]*,[^}]*\}/.test(Q)||/^\{[^}]*\.\.[^}]*\}/.test(Q))return!0}}return!1}function Q$($){let Z=[],J="",W=!1,Y=!1,K=!1;for(let Q=0;Q<$.length;Q++){let X=$[Q];if(K){J+=X,K=!1;continue}if(X==="\\"&&!W){if(K=!0,Y){let H=$[Q+1];if(H&&'$`"\\'.includes(H))continue;J+=X,K=!1}continue}if(X==="'"&&!Y){W=!W;continue}if(X==='"'&&!W){Y=!Y;continue}if(!W&&!Y&&/[ \t]/.test(X)){if(J)Z.push(J),J="";continue}J+=X}if(J)Z.push(J);return Z}var n4=new Set(["npm","pnpm","yarn","bun"]),BJ=new Set(["biome","eslint","jest","mypy","pyright","pytest","ruff","tsc","vitest"]),o4=new Set(["-u","--fix","--update","--update-snapshot","--updateSnapshot","--watch","--watchAll","--write"]),a4=/[ \t]*;[ \t]*echo[ \t]+"[A-Za-z0-9 _:=.-]*(?:\$\{PIPESTATUS\[0\]\}|\$\?)[A-Za-z0-9 _:=.-]*"[ \t]*$/;function s4($){return $!==void 0&&/^(?:test|lint|build|type-?check)(?::[\w.-]+)*$/i.test($)}function jJ($){return $.replace(/\s+2>&1\s*$/,"").trim()}function t4($,Z,J){if(!J||Z.length!==2)return;let W=/^(.+?)[ \t]+&&[ \t]+([\s\S]+)$/.exec($);if(!W)return;let Y=Q$(W[1]??"");if(Y.length!==2||Y[0]!=="cd")return;let K=Y[1];if(!K||K==="-")return;let Q=X$.isAbsolute(K)?X$.resolve(K):X$.resolve(J,K);if(!H$.isWithinWorkspace(Q,J))return;return W[2]?.trim()||void 0}function e4($){let Z=[],J=!1,W=!1,Y=!1;for(let K=0;K<$.length;K++){let Q=$[K];if(Y){Y=!1;continue}if(Q==="\\"&&!J){Y=!0;continue}if(Q==="'"&&!W){J=!J;continue}if(Q==='"'&&!J){W=!W;continue}if(Q!=="|"||J||W)continue;if($[K+1]==="|")return;Z.push(K)}return Z}function $5($){let Z=Q$($),[J,W,Y]=Z;if(J!=="head"&&J!=="tail")return!1;if(Z.length===1)return!0;let K=(Q)=>Q!==void 0&&/^[1-9]\d{0,4}$/.test(Q);if(Z.length===2)return W?.startsWith("--lines=")&&K(W.slice(8))||W?.startsWith("-")&&K(W.slice(1));return Z.length===3&&(W==="-n"||W==="--lines")&&K(Y)}function Z5($){let Z=jJ($.replace(a4,"").trim()),J=e4(Z);if(!J)return;if(J.length===0)return DJ(Z);if(J.length!==1)return;let W=J[0];if(W===void 0)return;let Y=jJ(Z.slice(0,W).trim()),K=Z.slice(W+1).trim();if(!Y||!$5(K))return;return DJ(Y)}function DJ($){let J=$1($)?.at(-1);if(!J)return $;let W=Q$(J),[Y,K]=W;if(!(Y==="vitest"||(Y==="npx"||Y==="bunx")&&K==="vitest")||W.some((X)=>X==="--configLoader"||X.startsWith("--configLoader=")))return $;return`${$} --configLoader runner`}function E$($,Z){let J=Z5($);if(!J)return!1;let W=e$(J),Y=$1(W);if(!Y||zJ(W)||/[\r\n]/.test(W))return!1;let K=Y.length===1?Y[0]:t4(W,Y,Z);if(!K)return!1;let Q=Q$(K);if(Q.length===0||Q.some((V)=>[...o4].some((j)=>V===j||V.startsWith(`${j}=`))))return!1;let[X,H,z]=Q;if(n4.has(X??""))return s4(H==="run"?z:H)||H==="--test";if((X==="npx"||X==="bunx")&&BJ.has(H??""))return!0;if(BJ.has(X??""))return!0;if(X==="node"&&H==="--test")return!0;if(X==="go"&&["build","test","vet"].includes(H??""))return!0;return X==="cargo"&&["build","check","clippy","test"].includes(H??"")}function _W($,Z){if($===void 0)return!0;if(typeof $!=="string"||$.split(/[\\/]/).includes(".."))return!1;if(!Z)return!X$.isAbsolute($);let J=X$.isAbsolute($)?X$.resolve($):X$.resolve(Z,$);return H$.isWithinWorkspace(J,Z)}var hZ=L0("Agent"),J5=3;function vZ($,Z,J){if($!=="length")return{action:"none"};if(Z>=J5)return{action:"truncated"};if(QJ(J)==="stop")return hZ.info("[Loop] Token budget: diminishing returns detected, skipping recovery"),{action:"budget_stop"};return{action:"recover"}}var W5=[/:\s*$/,/:\s*$/,/\.\.\.\s*$/,/让我(先|来|开始|查看|检查|修复)/,/Let me (first|start|check|look|fix)/i,/I('ll| will) (now |)(create|write|edit|update|modify|fix|add|implement)/i,/我(现在就|来|要)(创建|写入|编辑|修改|修复|添加|实现)/,/\d+\.\s+(First|Next|Then|Finally)/i],Y5=/```[\s\S]{50,}```/,wJ="请执行你提到的操作,不要只是描述。使用 Edit/Write/ApplyPatch/Bash 工具来实际修改文件。",K5=2;function CZ($,Z,J=!0){if(!$||Z>=K5)return{action:"none"};if(!J&&Y5.test($))return{action:"retry",prompt:wJ};let W=$.slice(-200),Y=W.match(/```/g);if(Y&&Y.length%2!==0)return{action:"none"};if(W5.some((Q)=>Q.test(W)))return{action:"retry",prompt:wJ};return{action:"none"}}var I1=2,Q5="The model returned tool-call JSON as text instead of completing the requested tool workflow.",X5="The previous response contained tool-call JSON as ordinary text. It did not execute a tool. If the requested operation is still needed, use the native tool-call interface with an available tool. If it already succeeded, use the recorded result to answer instead of repeating the operation. Do not return another tool-call JSON envelope as your final answer.";function pZ($,Z,J,W){if(!$||$.length>65536||J.length===0)return{action:"none"};let Y=Z.replace(/```[\s\S]*?(?:```|$)/g,"").replace(/^\s*>.*$/gm,"");if(/\b(?:example|schema|serialize|serialization|quote|print|illustrate|verbatim)\b|示例|样例|序列化|引用原文/i.test(Y)||/\b(?:explain|show|return|output)\b[^.!?\n]{0,80}\b(?:json|tool.calls?)\b|(?:解释|展示|输出|返回)[^。!?\n]{0,40}(?:JSON|工具调用格式)/i.test(Y)||/\b(?:do not|don't|never)\s+(?:use|call|invoke|execute)\s+(?:any\s+)?tools?\b|不要(?:使用|调用|执行)(?:任何)?工具/i.test(Y))return{action:"none"};let K;try{K=JSON.parse($)}catch{return{action:"none"}}if(!K||typeof K!=="object"||Array.isArray(K)||Object.keys(K).length!==1||!("tool_calls"in K)||!Array.isArray(K.tool_calls)||K.tool_calls.length===0||K.tool_calls.length>32)return{action:"none"};let Q=new Set;for(let X of K.tool_calls){if(!X||typeof X!=="object"||Array.isArray(X))return{action:"none"};let H="function"in X;if(Object.keys(X).some((G)=>!["id","type",...H?["function"]:["name","arguments"]].includes(G)))return{action:"none"};if("type"in X&&X.type!=="function")return{action:"none"};let z=H?X.function:X;if(!z||typeof z!=="object"||Array.isArray(z)||!("name"in z)||typeof z.name!=="string"||!("arguments"in z))return{action:"none"};if(H&&Object.keys(z).some((G)=>G!=="name"&&G!=="arguments"))return{action:"none"};if(!J.includes(z.name))return{action:"none"};let V=z.arguments;if(typeof V!=="string"&&(!V||typeof V!=="object"||Array.isArray(V)))return{action:"none"};let j=z.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),B=new RegExp(`(?:^|[.!?。!?;;\\n])\\s*(?:please\\s+)?(?:call|invoke|execute|run|use)\\s+(?:the\\s+)?(?:tool\\s+)?[\`"']?${j}(?![\\w:-])|(?:^|[。!?;\\n])\\s*(?:请)?(?:调用|使用|执行)\\s*(?:工具\\s*)?[\`"']?${j}(?![\\w:-])`,"i"),w=new RegExp(`(?:do not|don't|never)\\s+(?:call|invoke|execute|run|use)\\s+(?:the\\s+)?(?:tool\\s+)?[\`"']?${j}(?![\\w:-])|(?:不要|禁止)(?:调用|使用|执行)\\s*(?:工具\\s*)?[\`"']?${j}(?![\\w:-])`,"i");if(!B.test(Y)||w.test(Y))return{action:"none"};Q.add(z.name)}return W<I1?{action:"retry",prompt:X5,...Q.size===1?{toolName:[...Q][0]}:{}}:{action:"fail",message:Q5}}var H5=[/\b(?:run|execute|rerun|re-run)\b[\s\S]{0,60}\b(?:tests?|test suite|lint|type-?check|build)\b/i,/\b(?:npm|pnpm|yarn|bun)\s+(?:run\s+)?(?:test|lint|build|type-?check)\b/i,/(?:运行|执行|跑|重新运行).{0,30}(?:测试|单测|集成测试|检查|构建)/],UJ={test:/\b(?:tests?|test suite)\b|(?:测试|单测|集成测试)/i,lint:/\blint(?:ing)?\b/i,"type-check":/\btype[\s-]?check(?:ing)?\b|\btsc\b|类型检查/i,build:/\bbuild\b|构建/i},V5={test:/(?:^|\s)(?:npm|pnpm|yarn|bun)\s+(?:run\s+)?test\b|(?:^|\s)(?:node|bun)\s+--test\b|(?:^|\s)(?:vitest|jest|pytest|go\s+test|cargo\s+test)\b/i,lint:/(?:^|\s)(?:npm|pnpm|yarn|bun)\s+(?:run\s+)?lint\b/i,"type-check":/(?:^|\s)(?:npm|pnpm|yarn|bun)\s+(?:run\s+)?type-?check\b|(?:^|\s)tsc\b/i,build:/(?:^|\s)(?:npm|pnpm|yarn|bun)\s+(?:run\s+)?build\b/i},z5="The user explicitly required verification, but it has not run successfully. Do not finish or explain. Your next action must be a Bash tool call that runs the requested test, lint, type-check, or build command. Inspect the command result and fix any failure before finishing.",B5="Required verification did not run successfully before the retry limit.",j5=3;function LJ($,Z,J,W){if(!J.success)return;if(["Edit","Write","ApplyPatch","NotebookEdit"].includes(Z)){$.clear();return}if(Z==="Bash"&&typeof J.metadata?.command==="string"&&J.metadata.exit_code===0&&E$(J.metadata.command,W)){$.add(J.metadata.command);return}if(!["Task","TaskOutput"].includes(Z))return;let Y=J.metadata?.verificationCommands;if(!Array.isArray(Y))return;for(let K of Y)if(typeof K==="string"&&E$(K,W))$.add(K)}function gZ($,Z,J){if(!$||!H5.some((H)=>H.test($)))return{action:"none"};let W=Object.keys(UJ).filter((H)=>UJ[H].test($)),Y=[...Z],K=W.filter((H)=>!Y.some((z)=>V5[H].test(z)));if(W.length>0?K.length===0:Y.some((H)=>E$(H)))return{action:"none"};if(J>=j5)return{action:"fail",message:B5};let X=W.length>1&&K.length>0?` Missing successful verification categories: ${K.join(", ")}.`:"";return{action:"retry",prompt:`${z5}${X}`}}var D5=[/\bdelegate\b[\s\S]{0,120}\b(?:Task tool|subagent|agent)\b/i,/\b(?:call|use|invoke)\b[\s\S]{0,80}\bTask tool\b/i,/(?:委派|交给|调用|使用).{0,60}(?:Task|子代理|子智能体)/],qJ=[/\b(?:do not|don't|never)\s+(?:delegate|call|use|invoke)\b/i,/(?:不要|禁止|无需)(?:委派|调用|使用).{0,20}(?:Task|子代理|子智能体)?/];function FJ($){return typeof $==="string"&&qJ.some((Z)=>Z.test($))}var w5=[/\b(?:call|use|invoke)\b[\s\S]{0,30}\bTask(?: tool)?\b[\s\S]{0,30}\bexactly once\b/i,/\bexactly once\b[\s\S]{0,30}\b(?:call|use|invoke)\b[\s\S]{0,30}\bTask(?: tool)?\b/i,/\bexactly one\b[\s\S]{0,30}\bTask(?: tool)? calls?\b/i,/(?:Task|子代理).{0,20}(?:恰好|仅|只)(?:调用|使用)?一次/,/(?:恰好|仅|只)(?:调用|使用)?一次.{0,20}(?:Task|子代理)/],U5=[/\b(?:do not|don't|never)\s+(?:call|use|invoke)\s+(?:the\s+)?Task\b[\s\S]{0,30}\bexactly once\b/i,/\bTask\b[\s\S]{0,30}\b(?:does not|doesn't|need not)\b[\s\S]{0,30}\bexactly once\b/i,/\bmultiple\s+Task(?: tool)?\s+calls?\s+(?:are\s+)?allowed\b/i,/(?:不要|禁止).{0,12}(?:Task|子代理).{0,12}(?:恰好|仅|只)(?:调用|使用)?一次/];function G5($){if(typeof $!=="string")return;if(U5.some((Z)=>Z.test($)))return"multiple-allowed";return w5.some((Z)=>Z.test($))?"required":void 0}function Z1($){for(let Z of $){let J=G5(Z);if(J!==void 0)return J==="required"}return!1}var L5="The user explicitly required delegation, but no Task tool call completed successfully. Do not solve the task directly or explain. Your next action must be a Task tool call using the requested subagent.",q5="Required delegation did not complete before the retry limit.",F5=3;function OJ($,Z,J){let W=(typeof $==="string"?[$]:$??[]).map((Q)=>Q.trim()).filter(Boolean),Y=Z1(W),K=!1;if(!Y)for(let Q of W){if(qJ.some((X)=>X.test(Q)))break;if(D5.some((X)=>X.test(Q))){K=!0;break}}if(W.length===0||!Y&&!K||Z.has("Task"))return{action:"none"};if(J>=F5)return{action:"fail",message:q5};return{action:"retry",prompt:L5}}var O5=[/\b(?:use|create|enter|start|work\s+(?:in|inside))\b.{0,60}\bworktree\b/i,/(?:使用|创建|进入).{0,30}(?:worktree|工作树)/i],P5=[/\b(?:exit|leave)\b.{0,40}\bworktree\b/i,/\bworktree\b.{0,60}\b(?:action\s+)?(?:keep|remove)\b/i,/(?:退出|离开).{0,30}(?:worktree|工作树)/i],N5=[/\b(?:do not|don't|never|must not|should not)\b[^.!?;\n]{0,80}\b(?:git\s+)?worktree\b/gi,/\bwithout\b[^.!?;\n]{0,60}\b(?:git\s+)?worktree\b/gi,/(?:不要|禁止|不得|无需)[^。!?;\n]{0,50}(?:worktree|工作树)/gi];function PJ($){return N5.reduce((Z,J)=>Z.replace(J," "),$)}function h1($){if(typeof $!=="string")return!1;let Z=PJ($);return O5.some((J)=>J.test(Z))}var _5="The user explicitly required git worktree isolation, but EnterWorktree has not completed successfully. Do not continue in the original workspace. Your next action must be an EnterWorktree tool call. Wait for its result before using file or Bash tools.",y5="The user explicitly required leaving the managed worktree, but ExitWorktree has not completed successfully. Do not finish or explain. Your next action must be an ExitWorktree tool call using the action requested by the user.",b5="Required worktree lifecycle did not complete before the retry limit.",A5=3;function NJ($,Z,J){if(!$)return{action:"none"};let W=PJ($);if(!h1(W))return{action:"none"};let Y=P5.some((Q)=>Q.test(W));if(Z.has("TaskWorktree"))return{action:"none"};let K=!Z.has("EnterWorktree")?"EnterWorktree":Y&&!Z.has("ExitWorktree")?"ExitWorktree":void 0;if(!K)return{action:"none"};if(J>=A5)return{action:"fail",message:b5};return{action:"retry",tool:K,prompt:K==="EnterWorktree"?_5:y5}}var GJ=30000;async function mZ($){try{let J=T$.getInstance().executeStopHooks({projectDir:$.workspaceRoot??H0(),sessionId:$.sessionId,permissionMode:$.permissionMode,reason:$.reason,abortSignal:$.abortSignal}),W,Y=new Promise((K)=>{W=setTimeout(()=>K("timeout"),GJ)});try{let K=await Promise.race([J,Y]);if(K==="timeout")return hZ.warn(`[Loop] Stop hook 超时 (${GJ}ms),按 shouldStop: true 处理`),{action:"stop"};let Q=K;if(!Q.shouldStop)return{action:"continue",reason:Q.continueReason};return{action:"stop"}}finally{clearTimeout(W)}}catch(Z){return hZ.warn("[Loop] Stop hook execution failed:",Z),{action:"stop"}}}async function E5($,Z){let J;while(!(J=await $.next()).done)if(Z)await Z(J.value);return J.value}var S5=[/<system-reminder>[\s\S]*?<\/system-reminder>/gi,/<file[^>]*>[\s\S]*?<\/file>/gi,/<hooks_context>[\s\S]*?<\/hooks_context>/gi,/<[^>]+>/g];function T5($){if(typeof $==="string")return $;if(Array.isArray($))return $.map((Z)=>{if(typeof Z==="string")return Z;if(Z&&typeof Z==="object"&&"text"in Z){let J=Z.text;return typeof J==="string"?J:""}return""}).join(" ");return""}function f5($){let Z=$;for(let H of S5)Z=Z.replace(H," ");Z=Z.replace(/^\s*\/[a-zA-Z][\w-]*\s+/,"");let J=Z.replace(/\s+/g," ").trim();if(!J)return"";let W=J.match(/^(.+?)(?:[.!?]\s|[。!?](?=\S|$)|$)/),Y=W&&W[1].length>=6?W[1]:J;if(Y=Y.trim().replace(/[\s.。!!??,,;;::-]+$/,""),Y.length<=60)return Y;let K=Y.slice(0,60),Q=K.lastIndexOf(" ");return`${(Q>36?K.slice(0,Q):K).trimEnd()}…`}function _J($){return f5(T5($))}import{EventEmitter as k5}from"events";import yJ from"node:path";function uZ($){if(AJ($.sessionId),!yJ.isAbsolute($.projectPath))throw Error("projectPath must be absolute");return{sessionId:$.sessionId,projectPath:yJ.resolve($.projectPath)}}function bJ($){let Z=uZ($);return JSON.stringify([Z.projectPath,Z.sessionId])}function hW($,Z){return bJ($)===bJ(Z)}class f$ extends k5{static instance;constructor(){super();this.setMaxListeners(100)}static getInstance(){if(!f$.instance)f$.instance=new f$;return f$.instance}publish($,Z,J,W){let Y=uZ($);this.emit("event",{sessionId:Y.sessionId,projectPath:Y.projectPath,type:Z,...W!==void 0?{seq:W}:{},properties:J})}subscribe($){return this.on("event",$),()=>this.off("event",$)}}var J1=f$.getInstance();var a0=L0("Agent"),v1=new Set;async function M5($,Z){let J=$.sessionId;if(!J||$.subagentInfo)return;if(v1.has(J))return;if(v1.size>=5000)v1.clear();v1.add(J);try{let W=$.workspaceRoot,Y=await W1.findSessionMetadata(J,W);if(!Y)return;if(Y.title&&Y.title.trim())return;let K=_J(Z);if(!K)return;await W1.updateSessionMetadata(J,Y.projectPath,{title:K}),J1.publish({sessionId:J,projectPath:Y.projectPath},"session.updated",{title:K})}catch(W){a0.debug?.("[Loop] 自动生成会话标题失败:",W)}}var dZ=`<turn_aborted>
2
2
  The previous turn was interrupted. Commands or tool calls may have partially completed; inspect the workspace and running processes before retrying.
3
3
  </turn_aborted>`,V$="Tool execution was blocked because its durable call record could not be committed. No tool side effect was started.",EJ="Tool execution completed, but its durable result record could not be committed. Further model and tool execution was stopped. The operation may have completed; inspect external state before retrying.";class k$ extends Error{phase;constructor($,Z){super($==="user_message"?"Conversation input could not be committed. No further model request was started.":"Model output could not be committed. The run was stopped before any further model request or successful completion.",Z);this.phase=$;this.name="DurableConversationPersistenceError"}}function z$($){return $.executionEngine?.getContextManager()}async function d0($,Z,J,W=null,Y,K={}){let Q=K.required??$.executionEngine!==void 0;try{let X=z$($),H=typeof J==="string"?J.trim()!=="":J.some((z)=>z.type==="text"?z.text.trim()!=="":!0);if(X&&Z.sessionId&&H){let z=await X.saveMessage(Z.sessionId,"user",J,W,Y,Z.subagentInfo);if(Q&&!z)throw Error("Durable user-message commit returned no identity");if(Y?.clientVisible!==!1)M5(Z,J);return z}if(Q&&Z.sessionId&&H)throw Error("Durable user-message storage is unavailable")}catch(X){if(a0.warn("[Loop] 保存用户消息失败:",X),Q)throw new k$("user_message",{cause:X})}return null}async function O0($,Z,J,W,Y,K,Q={}){let X=Q.required??$.executionEngine!==void 0;try{let H=z$($),z=Boolean(J.trim()||Y?.trim());if(H&&Z.sessionId&&z){let V=await H.saveMessage(Z.sessionId,"assistant",J,W,K,Z.subagentInfo,Y);if(X&&!V)throw Error("Durable assistant-message commit returned no identity");return V}if(X&&Z.sessionId&&z)throw Error("Durable assistant-message storage is unavailable")}catch(H){if(a0.warn("[Loop] 保存助手消息失败:",H),X)throw new k$("assistant_message",{cause:H})}return null}async function SJ($,Z,J){try{let W=z$($);if(W&&Z.sessionId)return await W.saveMessage(Z.sessionId,"system",dZ,J,void 0,Z.subagentInfo)}catch(W){a0.warn("[Loop] 保存中断边界失败:",W)}return null}async function TJ($,Z,J,W,Y){try{let K=z$($);if(!K||!Z.sessionId||J.length===0)return null;return await K.saveMessage(Z.sessionId,"system",`<contextual-project-instructions-ref count="${J.length}" />`,Y,{contextualProjectRules:!0,ruleReferences:JSON.parse(JSON.stringify(J.map((Q)=>({...Q})))),triggerPaths:[...W]},Z.subagentInfo)}catch(K){a0.warn("[Loop] 保存 contextual project rules provenance 失败:",K)}return null}async function cZ($,Z,J,W,Y,K={}){try{let Q=z$($);if(Q&&Z.sessionId){let X=await Q.saveToolUse(Z.sessionId,J,W,Y,Z.subagentInfo,K.providerToolCallId);if(K.required&&!X)throw Error("Durable tool-use commit returned no identity");return X}if(K.required&&Z.sessionId)throw Error("Durable tool-use storage is unavailable")}catch(Q){if(a0.warn("[Loop] 保存工具调用失败:",Q),K.required)throw Q}return null}async function C1($,Z,J,W,Y,K,Q,X,H,z={}){try{let V=z$($);if(V&&Z.sessionId){let j=await V.saveToolResult(Z.sessionId,J,W,Y,K,Q,Z.subagentInfo,X,H);if(z.required&&!j)throw Error("Durable tool-result commit returned no identity");return j}if(z.required&&Z.sessionId)throw Error("Durable tool-result storage is unavailable")}catch(V){if(a0.warn("[Loop] 保存工具结果失败:",V),z.required)throw V}return null}async function Y1($,Z,J,W,Y={}){try{let K=z$($);if(K&&Z.sessionId){let Q=await K.saveCompaction(Z.sessionId,J,W,null);if(Y.required&&!Q)throw Error("Compaction checkpoint commit returned no identity");return Q||null}if(Y.required&&Z.sessionId)throw Error("Compaction checkpoint storage is unavailable")}catch(K){if(a0.warn("[Loop] 保存压缩数据失败:",K),Y.required)throw K}return null}async function X0($){let{deps:Z,context:J,state:W,assistantContent:Y,assistantReasoningContent:K,lastMessageUuid:Q,controlPrompt:X}=$;W.appendAssistant({role:"assistant",content:Y,reasoningContent:K});let H=Q,z=await O0(Z,J,Y,H,K);if(z)H=z;if(X!==void 0){let V={role:"user",content:X,metadata:F0};W.appendControl("user",V);let j=await d0(Z,J,X,H,F0);if(j)H=j}return H}import{createHash as h6}from"node:crypto";import{promises as X8}from"node:fs";import H8 from"node:path";import{nanoid as t0}from"nanoid";import*as s from"node:fs/promises";import*as s0 from"node:path";import kJ from"write-file-atomic";var fJ={enabled:!0,maxIndexLines:200};var R5="memory",iZ="MEMORY.md",rZ="<!-- blade:auto-memory-topics:start -->",p1="<!-- blade:auto-memory-topics:end -->",x5={realpath:!1,retries:{retries:5,factor:1.2,minTimeout:20,maxTimeout:100,randomize:!0}},I5=new M$,MJ;function IJ($){return $.trim().replace(/\s+/g," ")}function h5($){return IJ($.replace(/^- \[\d{4}-\d{2}-\d{2}\] /,""))}function v5($){return[rZ,"## Auto-consolidated topics",...$.map((Z)=>`- [${Z}](${Z}.md)`),p1].join(`
4
4
  `)}function C5($,Z){let J=v5(Z),W=$.indexOf(rZ),Y=$.indexOf(p1,Math.max(0,W));if(W>=0&&Y>=W)return $.slice(0,W)+J+$.slice(Y+p1.length);if(!$)return`${J}
@@ -1 +1 @@
1
- import{Xj as a,Yj as b,Zj as c,_j as d}from"./chunk-ny34sr3w.js";import"./chunk-gmpsfkgg.js";export{a as getVersion,b as getPackageName,c as getDescription,d as getCopyright};
1
+ import{Xj as a,Yj as b,Zj as c,_j as d}from"./chunk-c1p9eh59.js";import"./chunk-gmpsfkgg.js";export{a as getVersion,b as getPackageName,c as getDescription,d as getCopyright};
@@ -1 +1 @@
1
- import{k as o}from"./chunk-jkp77axa.js";import"./chunk-ny34sr3w.js";import"./chunk-gmpsfkgg.js";import{execSync as r}from"child_process";var l={command:"update",describe:"Check for updates and install if available",handler:async()=>{console.log("Checking for updates...");try{let e=await o(!0);if(console.log(`Current version: ${e.currentVersion}`),e.error){console.log(`Warning: ${e.error}`);return}if(e.latestVersion)console.log(`Latest version: ${e.latestVersion}`);if(e.hasUpdate&&e.latestVersion){console.log(""),console.log(`\x1B[33mUpdate available: ${e.currentVersion} -> ${e.latestVersion}\x1B[0m`),console.log(""),console.log("Updating...");try{r("npm install -g blade-code@latest --registry https://registry.npmjs.org",{stdio:"inherit"}),console.log(""),console.log("Update complete!")}catch(t){console.error("Error: Update failed. Please run manually:"),console.error(" npm install -g blade-code@latest"),process.exit(1)}}else console.log("You are running the latest version of Blade")}catch(e){console.error(`Error: Failed to check for updates: ${e instanceof Error?e.message:"未知错误"}`),process.exit(1)}}};export{l as updateCommands};
1
+ import{k as o}from"./chunk-k79wztgx.js";import"./chunk-c1p9eh59.js";import"./chunk-gmpsfkgg.js";import{execSync as r}from"child_process";var l={command:"update",describe:"Check for updates and install if available",handler:async()=>{console.log("Checking for updates...");try{let e=await o(!0);if(console.log(`Current version: ${e.currentVersion}`),e.error){console.log(`Warning: ${e.error}`);return}if(e.latestVersion)console.log(`Latest version: ${e.latestVersion}`);if(e.hasUpdate&&e.latestVersion){console.log(""),console.log(`\x1B[33mUpdate available: ${e.currentVersion} -> ${e.latestVersion}\x1B[0m`),console.log(""),console.log("Updating...");try{r("npm install -g blade-code@latest --registry https://registry.npmjs.org",{stdio:"inherit"}),console.log(""),console.log("Update complete!")}catch(t){console.error("Error: Update failed. Please run manually:"),console.error(" npm install -g blade-code@latest"),process.exit(1)}}else console.log("You are running the latest version of Blade")}catch(e){console.error(`Error: Failed to check for updates: ${e instanceof Error?e.message:"未知错误"}`),process.exit(1)}}};export{l as updateCommands};
@@ -1 +1 @@
1
- import{$g as i,Tg as a,Ug as b,Vg as c,Wg as d,Xg as e,Yg as f,Zg as g,_g as h,ah as j,bh as k}from"./chunk-xmbysst8.js";import"./chunk-kehgewqh.js";import"./chunk-kkzznz4w.js";import"./chunk-1cy4ab77.js";import"./chunk-7ajvrtb3.js";import"./chunk-yst43yp8.js";import"./chunk-ys8gysg8.js";import"./chunk-qxd33dt5.js";import"./chunk-b22ab7yw.js";import"./chunk-amabfzc8.js";import"./chunk-m2x6pb4f.js";import"./chunk-saz6mwpq.js";import"./chunk-xhwdac1j.js";import"./chunk-0eajnhrj.js";import"./chunk-ny34sr3w.js";import"./chunk-asgmmaec.js";import"./chunk-ed2hdrwe.js";import"./chunk-gmpsfkgg.js";export{g as withWorkspaceAgentResources,i as snapshotWorkspaceAgentResources,f as resolveWorkspaceAgentResources,k as resetWorkspaceAgentResources,d as refreshWorkspaceCommunicationStyles,h as getWorkspaceAgentResourceCacheStats,j as createEmptySessionAgentResources,e as configureInvocationPluginDirs,c as WorkspaceAgentResourceCapacityError,a as MAX_RESIDENT_WORKSPACE_AGENT_RESOURCES,b as MAX_ACTIVE_WORKSPACE_AGENT_RESOURCES};
1
+ import{$g as i,Tg as a,Ug as b,Vg as c,Wg as d,Xg as e,Yg as f,Zg as g,_g as h,ah as j,bh as k}from"./chunk-j1rtv3dn.js";import"./chunk-kehgewqh.js";import"./chunk-kkzznz4w.js";import"./chunk-1cy4ab77.js";import"./chunk-7ajvrtb3.js";import"./chunk-akcv10na.js";import"./chunk-ys8gysg8.js";import"./chunk-jbfdab1x.js";import"./chunk-b22ab7yw.js";import"./chunk-amabfzc8.js";import"./chunk-m2x6pb4f.js";import"./chunk-saz6mwpq.js";import"./chunk-xhwdac1j.js";import"./chunk-0eajnhrj.js";import"./chunk-c1p9eh59.js";import"./chunk-asgmmaec.js";import"./chunk-ed2hdrwe.js";import"./chunk-gmpsfkgg.js";export{g as withWorkspaceAgentResources,i as snapshotWorkspaceAgentResources,f as resolveWorkspaceAgentResources,k as resetWorkspaceAgentResources,d as refreshWorkspaceCommunicationStyles,h as getWorkspaceAgentResourceCacheStats,j as createEmptySessionAgentResources,e as configureInvocationPluginDirs,c as WorkspaceAgentResourceCapacityError,a as MAX_RESIDENT_WORKSPACE_AGENT_RESOURCES,b as MAX_ACTIVE_WORKSPACE_AGENT_RESOURCES};
@@ -0,0 +1 @@
1
+ import{k as a,l as b,m as c,n as d,o as e}from"./chunk-k79wztgx.js";import"./chunk-c1p9eh59.js";import"./chunk-gmpsfkgg.js";export{b as setSkipUntilVersion,d as performUpgrade,c as getUpgradeCommand,e as checkVersionOnStartup,a as checkVersion};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blade-code",
3
- "version": "0.11.11",
3
+ "version": "0.11.12",
4
4
  "private": false,
5
5
  "description": "🗡️ Blade Code - 智能代码助手命令行工具",
6
6
  "type": "module",
@@ -1 +0,0 @@
1
- import{xf as a,yf as b}from"./chunk-j60m601r.js";import"./chunk-ny34sr3w.js";import"./chunk-gmpsfkgg.js";export{a as globalOptions,b as cliConfig};
@@ -1 +0,0 @@
1
- import{k as a,l as b,m as c,n as d,o as e}from"./chunk-jkp77axa.js";import"./chunk-ny34sr3w.js";import"./chunk-gmpsfkgg.js";export{b as setSkipUntilVersion,d as performUpgrade,c as getUpgradeCommand,e as checkVersionOnStartup,a as checkVersion};