qlogicagent 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/agent.js +7 -7
  2. package/dist/cli.js +223 -206
  3. package/dist/contracts.js +1 -1
  4. package/dist/index.js +222 -205
  5. package/dist/orchestration.js +6 -6
  6. package/dist/types/agent/types.d.ts +3 -1
  7. package/dist/types/cli/stdio-server.d.ts +19 -1
  8. package/dist/types/cli/tool-bootstrap.d.ts +8 -0
  9. package/dist/types/contracts/index.d.ts +0 -1
  10. package/dist/types/contracts/todo.d.ts +8 -21
  11. package/dist/types/llm/adapters/aliyun-oss-file-upload-adapter.d.ts +44 -0
  12. package/dist/types/llm/adapters/gemini-file-upload-adapter.d.ts +26 -0
  13. package/dist/types/llm/adapters/hub-oss-file-upload-adapter.d.ts +29 -0
  14. package/dist/types/llm/adapters/index.d.ts +10 -0
  15. package/dist/types/llm/adapters/openai-file-upload-adapter.d.ts +38 -0
  16. package/dist/types/llm/adapters/volcengine-file-upload-adapter.d.ts +24 -0
  17. package/dist/types/llm/file-upload-service.d.ts +68 -0
  18. package/dist/types/llm/transports/anthropic-messages.d.ts +4 -0
  19. package/dist/types/llm/transports/gemini-generatecontent.d.ts +4 -0
  20. package/dist/types/llm/transports/media-resolve.d.ts +37 -12
  21. package/dist/types/llm/transports/openai-chat.d.ts +4 -0
  22. package/dist/types/llm/transports/openai-responses.d.ts +3 -0
  23. package/dist/types/llm/transports/volcengine-responses.d.ts +4 -0
  24. package/dist/types/orchestration/tool-loop/tool-schema.d.ts +1 -0
  25. package/dist/types/protocol/methods.d.ts +70 -0
  26. package/dist/types/protocol/notifications.d.ts +42 -0
  27. package/dist/types/runtime/execution/dream-category-context.d.ts +1 -1
  28. package/dist/types/runtime/infra/agent-paths.d.ts +6 -0
  29. package/dist/types/runtime/infra/index.d.ts +3 -1
  30. package/dist/types/runtime/infra/media-persistence.d.ts +71 -0
  31. package/dist/types/runtime/infra/project-instructions-store.d.ts +30 -0
  32. package/dist/types/runtime/infra/project-plan-store.d.ts +27 -0
  33. package/dist/types/runtime/infra/project-store.d.ts +30 -0
  34. package/dist/types/skills/index.d.ts +2 -4
  35. package/dist/types/skills/memory/categories.d.ts +5 -0
  36. package/dist/types/skills/memory/memdir.d.ts +6 -1
  37. package/dist/types/skills/memory/recall-category-filter.d.ts +1 -1
  38. package/dist/types/skills/permissions/group-security-policy.d.ts +15 -0
  39. package/dist/types/skills/permissions/index.d.ts +1 -0
  40. package/dist/types/skills/plugins/plugin-loader.d.ts +5 -0
  41. package/dist/types/skills/portable-tool.d.ts +13 -2
  42. package/dist/types/skills/tools/plan-mode-tool.d.ts +1 -1
  43. package/dist/types/skills/tools/read-tool.d.ts +2 -2
  44. package/dist/types/skills/tools/task-tool.d.ts +64 -75
  45. package/package.json +1 -1
  46. package/dist/types/contracts/planner.d.ts +0 -35
  47. package/dist/types/orchestration/error-handling/failover-error.d.ts +0 -33
  48. package/dist/types/skills/memory/memory-write-gate.d.ts +0 -46
  49. package/dist/types/skills/memory/memory-write-hook.d.ts +0 -44
  50. package/dist/types/skills/todo-tool.d.ts +0 -72
package/dist/agent.js CHANGED
@@ -1,20 +1,20 @@
1
- var tn=Object.defineProperty;var nn=(e,t)=>()=>(e&&(t=e(e=0)),t);var on=(e,t)=>{for(var o in t)tn(e,o,{get:t[o],enumerable:!0})};var Ht={};on(Ht,{resolveToolEligibility:()=>wo});function Ao(e,t){if(So.some(o=>o.test(e)))return!0;if(t)for(let o of t)try{if(new RegExp(o,"i").test(e))return!0}catch{}return!1}function Eo(e,t){let o=e.function.name,n=e.meta,r=[];return t.blockedToolNames?.includes(o)?(r.push("policy_blocked"),{level:5,reasons:r}):n?.isReadOnly?(r.push("always_allowed"),{level:1,reasons:r}):n?.requiresApproval?(r.push("approval_required"),{level:4,reasons:r}):n?.isDangerous||Ao(o,t.dangerousPatterns)?(r.push("dangerous_tool"),{level:3,reasons:r}):{level:2,reasons:r}}function Mo(e){switch(e){case 1:return"eligible";case 2:return"eligible";case 3:return"dangerous-notify";case 4:return"approval-required";case 5:return"blocked-by-policy"}}function wo(e,t={}){let o=new Map,n=[],r=[],a=[];for(let l of e){let s=l.function.name,{level:d,reasons:y}=Eo(l,t),u=Mo(d),g={toolName:s,status:u,permissionLevel:d,approvalRequired:d===4,reasonCodes:y};o.set(s,g),d===5?r.push(g):(n.push(l),d===4&&a.push(g))}return{eligibleTools:n,blockedTools:r,approvalRequiredTools:a,eligibilityByName:o}}var So,qt=nn(()=>{"use strict";So=[/^(?:bash|shell|exec|terminal|run_command)$/i,/^(?:write_file|delete_file|move_file|create_directory)$/i,/^(?:git_push|git_reset|git_force)$/i]});function Ce(e,t,o,n){return{role:"assistant",content:t||null,tool_calls:e,...o&&o.length>0?{thinkingBlocks:o}:{},...n?{reasoning_content:n}:{}}}function J(e,t){let o=t.ok?typeof t.payload=="string"?t.payload:JSON.stringify(t.payload??""):`Error: ${t.error??"Tool execution failed"}`;return{role:"tool",tool_call_id:e,content:o,...t.toolReferences?.length?{toolReferences:t.toolReferences}:{}}}var rn=/\b(?:daily|weekly|monthly)(?:\/(?:daily|weekly|monthly))* (?:usage )?limit(?:s)?(?: (?:exhausted|reached|exceeded))?\b/i,j={rateLimit:[/rate[_ ]limit|too many requests|429/,"model_cooldown","exceeded your current quota","resource has been exhausted","quota exceeded","resource_exhausted","usage limit",/\btpm\b/i,"tokens per minute","tokens per day"],overloaded:[/overloaded_error|"type"\s*:\s*"overloaded_error"/i,"overloaded",/service[_ ]unavailable.*(?:overload|capacity|high[_ ]demand)|(?:overload|capacity|high[_ ]demand).*service[_ ]unavailable/i,"high demand"],timeout:["timeout","timed out","service unavailable","deadline exceeded","context deadline exceeded","connection error","network error","network request failed","fetch failed","socket hang up",/\beconn(?:refused|reset|aborted)\b/i,/\benotfound\b/i,/\beai_again\b/i,/without sending (?:any )?chunks?/i,/\bstop reason:\s*(?:abort|error|network_error)\b/i,/\breason:\s*(?:abort|error|network_error)\b/i,/\bunhandled stop reason:\s*(?:abort|error|network_error)\b/i],billing:[/["']?(?:status|code)["']?\s*[:=]\s*402\b|\bhttp\s*402\b|\berror(?:\s+code)?\s*[:=]?\s*402\b|\b(?:got|returned|received)\s+(?:a\s+)?402\b|^\s*402\s+payment/i,"payment required","insufficient credits",/insufficient[_ ]quota/i,"credit balance","plans & billing","insufficient balance"],authPermanent:[/api[_ ]?key[_ ]?(?:revoked|invalid|deactivated|deleted)/i,"invalid_api_key","key has been disabled","key has been revoked","account has been deactivated",/could not (?:authenticate|validate).*(?:api[_ ]?key|credentials)/i,"permission_error","not allowed for this organization"],auth:[/invalid[_ ]?api[_ ]?key/,"incorrect api key","invalid token","authentication","re-authenticate","oauth token refresh failed","unauthorized","forbidden","access denied","insufficient permissions","insufficient permission",/missing scopes?:/i,"expired","token has expired",/\b401\b/,/\b403\b/,"no credentials found","no api key found"],format:["string should match pattern","tool_use.id","tool_use_id","messages.1.content.1.tool_use.id","invalid request format",/tool call id was.*must be/i]},sn=/^(?:error[:\s-]+)?billing(?:\s+error)?(?:[:\s-]+|$)|^(?:error[:\s-]+)?(?:credit balance|insufficient credits?|payment required|http\s*402\b)/i,an=/["']?(?:status|code)["']?\s*[:=]\s*402\b|\bhttp\s*402\b|\berror(?:\s+code)?\s*[:=]?\s*402\b|^\s*402\s+payment/i,ln=512,cn=/^(?:http\s*)?(\d{3})(?:\s+([\s\S]+))?$/i;var un=new Set([500,502,503,504,521,522,523,524,529]),dn=["insufficient credits","insufficient quota","credit balance","insufficient balance","plans & billing","add more credits","top up"],pn=["upgrade your plan","upgrade plan","current plan","subscription"],mn=["daily","weekly","monthly"],gn=["try again","retry","temporary","cooldown"],fn=["usage limit","rate limit","organization usage"],yn=["organization","workspace"],hn=["billing period","exceeded","reached","exhausted"],Tn=/["']?(?:status|code)["']?\s*[:=]\s*402\b|\bhttp\s*402\b|\berror(?:\s+code)?\s*[:=]?\s*402\b|\b(?:got|returned|received)\s+(?:a\s+)?402\b|^\s*402\s+payment required\b/i,Cn=/^(?:error[:\s-]+)?(?:(?:http\s*)?402(?:\s+payment required)?|payment required)(?:[:\s-]+|$)/i;function z(e,t){if(!e)return!1;let o=e.toLowerCase();return t.some(n=>n instanceof RegExp?n.test(o):o.includes(n))}function bn(e){return z(e,j.format)}function st(e){return z(e,j.rateLimit)}function kn(e){return z(e,j.timeout)}function _n(e){return rn.test(e)}function be(e){let t=e.toLowerCase();return t?e.length>ln?an.test(t):z(t,j.billing)?!0:sn.test(e)?t.includes("upgrade")||t.includes("credits")||t.includes("payment")||t.includes("plan"):!1:!1}function it(e){return z(e,j.authPermanent)}function Rn(e){return z(e,j.auth)}function at(e){return z(e,j.overloaded)}function $(e,t){return t.some(o=>e.includes(o))}function xn(e){return $(e,dn)||$(e,pn)&&e.includes("limit")||e.includes("billing hard limit")||e.includes("hard limit reached")||e.includes("maximum allowed")&&e.includes("limit")}function vn(e){let t=$(e,mn),o=e.includes("spend limit")||e.includes("spending limit"),n=$(e,yn);return $(e,gn)&&$(e,fn)||t&&(e.includes("usage limit")||o)||t&&e.includes("limit")&&e.includes("reset")||n&&e.includes("limit")&&(o||$(e,hn))}function Sn(e){return e.trim().toLowerCase().replace(Cn,"").trim()}function lt(e){let t=Sn(e);return!t||xn(t)?"billing":st(t)||vn(t)?"rate_limit":"billing"}function An(e){return Tn.test(e)?lt(e):null}function ct(e){let t=e.match(cn);if(!t)return null;let o=Number(t[1]);return Number.isFinite(o)?{code:o,rest:(t[2]??"").trim()}:null}function En(e){if(!e)return!1;let t=e.toLowerCase();return t.includes('"type":"api_error"')&&t.includes("internal server error")}function Mn(e){let t=e.trim();if(!t)return!1;let o=ct(t);return o?un.has(o.code):!1}function ut(e,t){return typeof e!="number"||!Number.isFinite(e)?null:e===402?t?lt(t):"billing":e===429?"rate_limit":e===401||e===403?t&&it(t)?"auth_permanent":"auth":e===408?"timeout":e===503?t&&at(t)?"overloaded":"timeout":e===502||e===504?"timeout":e===529?"overloaded":e===400?t&&be(t)?"billing":"format":null}function wn(e){if(!e)return!1;let t=e.toLowerCase();return!!(t.includes("unknown model")||t.includes("model not found")||t.includes("model_not_found")||t.includes("not_found_error")||t.includes("does not exist")&&t.includes("model")||t.includes("invalid model")&&!t.includes("invalid model reference")||/models\/[^\s]+ is not found/i.test(e)||/\b404\b/.test(e)&&/not[-_ ]?found/i.test(e))}function In(e){if(!e)return!1;let t=e.toLowerCase();return t.includes("session not found")||t.includes("session does not exist")||t.includes("session expired")||t.includes("session invalid")||t.includes("conversation not found")||t.includes("conversation does not exist")||t.includes("conversation expired")||t.includes("conversation invalid")||t.includes("no such session")||t.includes("invalid session")||t.includes("session id not found")||t.includes("conversation id not found")}function dt(e){if(In(e))return"session_expired";if(wn(e))return"model_not_found";let t=An(e);return t||(_n(e)?be(e)?"billing":"rate_limit":st(e)?"rate_limit":at(e)?"overloaded":Mn(e)?ct(e.trim())?.code===529?"overloaded":"timeout":En(e)?"timeout":bn(e)?"format":be(e)?"billing":kn(e)?"timeout":it(e)?"auth_permanent":Rn(e)?"auth":null)}var Ln={timeout:"RETRYABLE_TRANSIENT",overloaded:"RETRYABLE_TRANSIENT",rate_limit:"RETRYABLE_DEGRADED",auth:"NON_RETRYABLE_AUTH",auth_permanent:"NON_RETRYABLE_AUTH",billing:"NON_RETRYABLE_QUOTA",format:"NON_RETRYABLE_CONTENT",model_not_found:"NON_RETRYABLE_CONTENT",session_expired:"NON_RETRYABLE_CONTENT",unknown:"RETRYABLE_TRANSIENT"},On=new Set(["RETRYABLE_TRANSIENT","RETRYABLE_DEGRADED","TOOL_EXECUTION_FAILED"]);function H(e,t){let o=ut(e,t)??(t?dt(t):null);return o?Ln[o]:typeof e=="number"&&e>=400&&e<500?"NON_RETRYABLE_CONTENT":"RETRYABLE_TRANSIENT"}function ke(e){return On.has(e)}var pt=4,Z=class{constructor(t){this.estimateTokens=t}estimateTokens;compress(t,o){let n=[],r=[];for(let u of t)u.role==="system"?n.push(u):r.push(u);let a=o;for(let u of n)a-=this.estimateTokens(u);let l;for(let u of r)if(u.role==="user"){l=u;break}if(l&&(a-=this.estimateTokens(l)),a<=0)return{messages:l?[...n,l]:n,droppedCount:r.length-(l?1:0),strategy:"sliding-window"};let s=[],d=0;for(let u=r.length-1;u>=0;u--){let g=r[u];if(g===l)continue;let v=this.estimateTokens(g);if(a-v<0&&d>=pt)break;if(a-v<0&&d<pt){s.unshift(g),d++;continue}a-=v,s.unshift(g),d++}let y=[...n];return l&&!s.includes(l)&&y.push(l),y.push(...s),{messages:y,droppedCount:r.length-(s.length+(l&&!s.includes(l)?1:0)),strategy:"sliding-window"}}};var ee=class{constructor(t=8e3){this.maxToolResultChars=t}maxToolResultChars;compress(t,o){let n=0;return{messages:t.map(a=>a.role!=="tool"||typeof a.content!="string"||a.content.length<=this.maxToolResultChars?a:(n++,{...a,content:Pn(a.content,this.maxToolResultChars)})),droppedCount:n,strategy:"tool-result-trim"}}};function Pn(e,t){if(e.length<=t)return e;let o=e.slice(0,t);if(e.trimStart().startsWith("{")||e.trimStart().startsWith("[")){let a=Math.max(o.lastIndexOf("},"),o.lastIndexOf("],"),o.lastIndexOf(`}
1
+ var tn=Object.defineProperty;var nn=(e,t)=>()=>(e&&(t=e(e=0)),t);var on=(e,t)=>{for(var o in t)tn(e,o,{get:t[o],enumerable:!0})};var Ht={};on(Ht,{resolveToolEligibility:()=>wo});function Ao(e,t){if(So.some(o=>o.test(e)))return!0;if(t)for(let o of t)try{if(new RegExp(o,"i").test(e))return!0}catch{}return!1}function Eo(e,t){let o=e.function.name,n=e.meta,r=[];return t.blockedToolNames?.includes(o)?(r.push("policy_blocked"),{level:5,reasons:r}):n?.isReadOnly?(r.push("always_allowed"),{level:1,reasons:r}):n?.requiresApproval?(r.push("approval_required"),{level:4,reasons:r}):n?.isDangerous||Ao(o,t.dangerousPatterns)?(r.push("dangerous_tool"),{level:3,reasons:r}):{level:2,reasons:r}}function Mo(e){switch(e){case 1:return"eligible";case 2:return"eligible";case 3:return"dangerous-notify";case 4:return"approval-required";case 5:return"blocked-by-policy"}}function wo(e,t={}){let o=new Map,n=[],r=[],a=[];for(let l of e){let s=l.function.name,{level:d,reasons:y}=Eo(l,t),u=Mo(d),g={toolName:s,status:u,permissionLevel:d,approvalRequired:d===4,reasonCodes:y};o.set(s,g),d===5?r.push(g):(n.push(l),d===4&&a.push(g))}return{eligibleTools:n,blockedTools:r,approvalRequiredTools:a,eligibilityByName:o}}var So,qt=nn(()=>{"use strict";So=[/^(?:bash|shell|exec|terminal|run_command)$/i,/^(?:write_file|delete_file|move_file|create_directory)$/i,/^(?:git_push|git_reset|git_force)$/i]});function Ce(e,t,o,n){return{role:"assistant",content:t||null,tool_calls:e,...o&&o.length>0?{thinkingBlocks:o}:{},...n?{reasoning_content:n}:{}}}function J(e,t){let o=t.ok?typeof t.payload=="string"?t.payload:JSON.stringify(t.payload??""):`Error: ${t.error??"Tool execution failed"}`;return{role:"tool",tool_call_id:e,content:o,...t.toolReferences?.length?{toolReferences:t.toolReferences}:{},...t.imageUrls?.length?{imageUrls:t.imageUrls}:{}}}var rn=/\b(?:daily|weekly|monthly)(?:\/(?:daily|weekly|monthly))* (?:usage )?limit(?:s)?(?: (?:exhausted|reached|exceeded))?\b/i,j={rateLimit:[/rate[_ ]limit|too many requests|429/,"model_cooldown","exceeded your current quota","resource has been exhausted","quota exceeded","resource_exhausted","usage limit",/\btpm\b/i,"tokens per minute","tokens per day"],overloaded:[/overloaded_error|"type"\s*:\s*"overloaded_error"/i,"overloaded",/service[_ ]unavailable.*(?:overload|capacity|high[_ ]demand)|(?:overload|capacity|high[_ ]demand).*service[_ ]unavailable/i,"high demand"],timeout:["timeout","timed out","service unavailable","deadline exceeded","context deadline exceeded","connection error","network error","network request failed","fetch failed","socket hang up",/\beconn(?:refused|reset|aborted)\b/i,/\benotfound\b/i,/\beai_again\b/i,/without sending (?:any )?chunks?/i,/\bstop reason:\s*(?:abort|error|network_error)\b/i,/\breason:\s*(?:abort|error|network_error)\b/i,/\bunhandled stop reason:\s*(?:abort|error|network_error)\b/i],billing:[/["']?(?:status|code)["']?\s*[:=]\s*402\b|\bhttp\s*402\b|\berror(?:\s+code)?\s*[:=]?\s*402\b|\b(?:got|returned|received)\s+(?:a\s+)?402\b|^\s*402\s+payment/i,"payment required","insufficient credits",/insufficient[_ ]quota/i,"credit balance","plans & billing","insufficient balance"],authPermanent:[/api[_ ]?key[_ ]?(?:revoked|invalid|deactivated|deleted)/i,"invalid_api_key","key has been disabled","key has been revoked","account has been deactivated",/could not (?:authenticate|validate).*(?:api[_ ]?key|credentials)/i,"permission_error","not allowed for this organization"],auth:[/invalid[_ ]?api[_ ]?key/,"incorrect api key","invalid token","authentication","re-authenticate","oauth token refresh failed","unauthorized","forbidden","access denied","insufficient permissions","insufficient permission",/missing scopes?:/i,"expired","token has expired",/\b401\b/,/\b403\b/,"no credentials found","no api key found"],format:["string should match pattern","tool_use.id","tool_use_id","messages.1.content.1.tool_use.id","invalid request format",/tool call id was.*must be/i]},sn=/^(?:error[:\s-]+)?billing(?:\s+error)?(?:[:\s-]+|$)|^(?:error[:\s-]+)?(?:credit balance|insufficient credits?|payment required|http\s*402\b)/i,an=/["']?(?:status|code)["']?\s*[:=]\s*402\b|\bhttp\s*402\b|\berror(?:\s+code)?\s*[:=]?\s*402\b|^\s*402\s+payment/i,ln=512,cn=/^(?:http\s*)?(\d{3})(?:\s+([\s\S]+))?$/i;var un=new Set([500,502,503,504,521,522,523,524,529]),dn=["insufficient credits","insufficient quota","credit balance","insufficient balance","plans & billing","add more credits","top up"],pn=["upgrade your plan","upgrade plan","current plan","subscription"],mn=["daily","weekly","monthly"],gn=["try again","retry","temporary","cooldown"],fn=["usage limit","rate limit","organization usage"],yn=["organization","workspace"],hn=["billing period","exceeded","reached","exhausted"],Tn=/["']?(?:status|code)["']?\s*[:=]\s*402\b|\bhttp\s*402\b|\berror(?:\s+code)?\s*[:=]?\s*402\b|\b(?:got|returned|received)\s+(?:a\s+)?402\b|^\s*402\s+payment required\b/i,Cn=/^(?:error[:\s-]+)?(?:(?:http\s*)?402(?:\s+payment required)?|payment required)(?:[:\s-]+|$)/i;function z(e,t){if(!e)return!1;let o=e.toLowerCase();return t.some(n=>n instanceof RegExp?n.test(o):o.includes(n))}function bn(e){return z(e,j.format)}function st(e){return z(e,j.rateLimit)}function kn(e){return z(e,j.timeout)}function _n(e){return rn.test(e)}function be(e){let t=e.toLowerCase();return t?e.length>ln?an.test(t):z(t,j.billing)?!0:sn.test(e)?t.includes("upgrade")||t.includes("credits")||t.includes("payment")||t.includes("plan"):!1:!1}function it(e){return z(e,j.authPermanent)}function Rn(e){return z(e,j.auth)}function at(e){return z(e,j.overloaded)}function $(e,t){return t.some(o=>e.includes(o))}function xn(e){return $(e,dn)||$(e,pn)&&e.includes("limit")||e.includes("billing hard limit")||e.includes("hard limit reached")||e.includes("maximum allowed")&&e.includes("limit")}function vn(e){let t=$(e,mn),o=e.includes("spend limit")||e.includes("spending limit"),n=$(e,yn);return $(e,gn)&&$(e,fn)||t&&(e.includes("usage limit")||o)||t&&e.includes("limit")&&e.includes("reset")||n&&e.includes("limit")&&(o||$(e,hn))}function Sn(e){return e.trim().toLowerCase().replace(Cn,"").trim()}function lt(e){let t=Sn(e);return!t||xn(t)?"billing":st(t)||vn(t)?"rate_limit":"billing"}function An(e){return Tn.test(e)?lt(e):null}function ct(e){let t=e.match(cn);if(!t)return null;let o=Number(t[1]);return Number.isFinite(o)?{code:o,rest:(t[2]??"").trim()}:null}function En(e){if(!e)return!1;let t=e.toLowerCase();return t.includes('"type":"api_error"')&&t.includes("internal server error")}function Mn(e){let t=e.trim();if(!t)return!1;let o=ct(t);return o?un.has(o.code):!1}function ut(e,t){return typeof e!="number"||!Number.isFinite(e)?null:e===402?t?lt(t):"billing":e===429?"rate_limit":e===401||e===403?t&&it(t)?"auth_permanent":"auth":e===408?"timeout":e===503?t&&at(t)?"overloaded":"timeout":e===502||e===504?"timeout":e===529?"overloaded":e===400?t&&be(t)?"billing":"format":null}function wn(e){if(!e)return!1;let t=e.toLowerCase();return!!(t.includes("unknown model")||t.includes("model not found")||t.includes("model_not_found")||t.includes("not_found_error")||t.includes("does not exist")&&t.includes("model")||t.includes("invalid model")&&!t.includes("invalid model reference")||/models\/[^\s]+ is not found/i.test(e)||/\b404\b/.test(e)&&/not[-_ ]?found/i.test(e))}function In(e){if(!e)return!1;let t=e.toLowerCase();return t.includes("session not found")||t.includes("session does not exist")||t.includes("session expired")||t.includes("session invalid")||t.includes("conversation not found")||t.includes("conversation does not exist")||t.includes("conversation expired")||t.includes("conversation invalid")||t.includes("no such session")||t.includes("invalid session")||t.includes("session id not found")||t.includes("conversation id not found")}function dt(e){if(In(e))return"session_expired";if(wn(e))return"model_not_found";let t=An(e);return t||(_n(e)?be(e)?"billing":"rate_limit":st(e)?"rate_limit":at(e)?"overloaded":Mn(e)?ct(e.trim())?.code===529?"overloaded":"timeout":En(e)?"timeout":bn(e)?"format":be(e)?"billing":kn(e)?"timeout":it(e)?"auth_permanent":Rn(e)?"auth":null)}var Ln={timeout:"RETRYABLE_TRANSIENT",overloaded:"RETRYABLE_TRANSIENT",rate_limit:"RETRYABLE_DEGRADED",auth:"NON_RETRYABLE_AUTH",auth_permanent:"NON_RETRYABLE_AUTH",billing:"NON_RETRYABLE_QUOTA",format:"NON_RETRYABLE_CONTENT",model_not_found:"NON_RETRYABLE_CONTENT",session_expired:"NON_RETRYABLE_CONTENT",unknown:"RETRYABLE_TRANSIENT"},On=new Set(["RETRYABLE_TRANSIENT","RETRYABLE_DEGRADED","TOOL_EXECUTION_FAILED"]);function H(e,t){let o=ut(e,t)??(t?dt(t):null);return o?Ln[o]:typeof e=="number"&&e>=400&&e<500?"NON_RETRYABLE_CONTENT":"RETRYABLE_TRANSIENT"}function ke(e){return On.has(e)}var pt=4,Z=class{constructor(t){this.estimateTokens=t}estimateTokens;compress(t,o){let n=[],r=[];for(let u of t)u.role==="system"?n.push(u):r.push(u);let a=o;for(let u of n)a-=this.estimateTokens(u);let l;for(let u of r)if(u.role==="user"){l=u;break}if(l&&(a-=this.estimateTokens(l)),a<=0)return{messages:l?[...n,l]:n,droppedCount:r.length-(l?1:0),strategy:"sliding-window"};let s=[],d=0;for(let u=r.length-1;u>=0;u--){let g=r[u];if(g===l)continue;let v=this.estimateTokens(g);if(a-v<0&&d>=pt)break;if(a-v<0&&d<pt){s.unshift(g),d++;continue}a-=v,s.unshift(g),d++}let y=[...n];return l&&!s.includes(l)&&y.push(l),y.push(...s),{messages:y,droppedCount:r.length-(s.length+(l&&!s.includes(l)?1:0)),strategy:"sliding-window"}}};var ee=class{constructor(t=8e3){this.maxToolResultChars=t}maxToolResultChars;compress(t,o){let n=0;return{messages:t.map(a=>a.role!=="tool"||typeof a.content!="string"||a.content.length<=this.maxToolResultChars?a:(n++,{...a,content:Pn(a.content,this.maxToolResultChars)})),droppedCount:n,strategy:"tool-result-trim"}}};function Pn(e,t){if(e.length<=t)return e;let o=e.slice(0,t);if(e.trimStart().startsWith("{")||e.trimStart().startsWith("[")){let a=Math.max(o.lastIndexOf("},"),o.lastIndexOf("],"),o.lastIndexOf(`}
2
2
  `),o.lastIndexOf(`]
3
3
  `));if(a>t*.5)return o.slice(0,a+1)+`
4
4
  [...truncated: ${e.length-a-1} chars omitted]`}let r=o.lastIndexOf(`
5
5
  `);return r>t*.7?o.slice(0,r)+`
6
6
  [...truncated: ${e.length-r} chars omitted]`:o+`
7
- [...truncated: ${e.length-t} chars omitted]`}function _e(...e){return{compress(t,o){let n=t,r=0,a=[];for(let l of e){let s=l.compress(n,o);n=s.messages,r+=s.droppedCount,s.droppedCount>0&&a.push(s.strategy)}return{messages:n,droppedCount:r,strategy:a.length>0?a.join("+"):"none"}}}}var mt={modelContextWindow:128e3,targetUsageRatio:.75,minBudget:16e3,maxBudget:12e4};function Re(e={}){let t={...mt,...e},o=Math.floor(t.modelContextWindow*t.targetUsageRatio);return Math.max(t.minBudget,Math.min(o,t.maxBudget))}function xe(e,t){let o=e/t;return o<=.8?"none":o<=1?"trim-only":o<=1.5?"sliding-window":"llm-summarize"}var te=class{events=[];maxEvents;constructor(t=100){this.maxEvents=t}record(t){this.events.push(t),this.events.length>this.maxEvents&&this.events.shift()}snapshot(){let t=this.events.length;if(t===0)return{totalCompressions:0,totalLlmCalls:0,totalCacheInvalidations:0,averageCompressionRatio:1,averageLatencyMs:0,totalTokensSaved:0,recentEvents:[]};let o=0,n=0,r=0,a=0,l=0;for(let s of this.events)o+=s.tokensBefore>0?s.tokensAfter/s.tokensBefore:1,n+=s.latencyMs,r+=Math.max(0,s.tokensBefore-s.tokensAfter),s.usedLlm&&a++,s.cacheInvalidated&&l++;return{totalCompressions:t,totalLlmCalls:a,totalCacheInvalidations:l,averageCompressionRatio:o/t,averageLatencyMs:n/t,totalTokensSaved:r,recentEvents:this.events.slice(-10)}}reset(){this.events.length=0}},ne=class{engines=new Map;activeId;register(t){this.engines.set(t.id,t)}activate(t){return this.engines.has(t)?(this.activeId=t,!0):!1}getActive(){return this.activeId?this.engines.get(this.activeId):void 0}listEngines(){return Array.from(this.engines.values()).map(t=>({id:t.id,label:t.label,active:t.id===this.activeId}))}};function gt(e){let t=typeof e.content=="string"?e.content:e.content!=null?JSON.stringify(e.content):"";return Math.ceil(t.length/4)}var Nn=new Set(["file_read","read","Read","bash","shell","Bash","grep","search","Grep","grep_search","glob","Glob","file_search","web_search","WebSearch","web_fetch","WebFetch","file_edit","edit","Edit","file_write","write","Write"]),G=class{constructor(t=20,o=gt){this.preserveRecentCount=t;this.estimateTokens=o}preserveRecentCount;estimateTokens;compress(t,o){if(t.length<=this.preserveRecentCount)return{messages:t,droppedCount:0,strategy:"micro-compact"};let n=t.length-this.preserveRecentCount,r=0,a=0;return{messages:t.map((s,d)=>{if(d>=n||s.role!=="tool"||typeof s.content!="string"||!s.name||!Nn.has(s.name)||s.content.length<=200)return s;let y=this.estimateTokens(s);return a+=y,r++,{...s,content:`[result cleared \u2014 ${s.content.length} chars]`}}),droppedCount:r,strategy:"micro-compact",metrics:r>0?{tokensBefore:0,tokensAfter:0,compressionRatio:0,latencyMs:0,usedLlm:!1,cacheInvalidated:!1}:void 0}}};function ve(e,t,o=gt){if(t.size===0)return{messages:e,tokensFreed:0,removedCount:0};let n=0,r=0,a=[];for(let s of e){let d=s.tool_call_id??"";if(d&&t.has(d)){n+=o(s),r++,t.delete(d);continue}a.push(s)}let l=r>0?{role:"system",content:`[${r} messages removed by snip]`}:void 0;return{messages:a,tokensFreed:n,removedCount:r,boundaryMessage:l}}function Se(){return{stages:[]}}function Ae(e,t,o){let n=o?.thresholdMessages??40;if(e.filter(s=>s.role!=="system").length<=n)return{messages:e,stagedCount:0};let a=ft(e,t),l=Fn(a,t,n);if(l.length===0)return{messages:a,stagedCount:0};for(let s of l)t.stages.push(s);return a=ft(e,t),{messages:a,stagedCount:l.length}}function Ee(e,t){let o=0;for(let n of t.stages)n.committed||(n.committed=!0,o++);return o===0?{messages:e,committed:0}:{messages:yt(e,t),committed:o}}function ft(e,t){return t.stages.filter(n=>n.committed).length===0?e:yt(e,t)}function yt(e,t){let o=t.stages.filter(r=>r.committed).sort((r,a)=>a.range[0]-r.range[0]),n=[...e];for(let r of o){let[a,l]=r.range;if(a>=n.length)continue;let s=Math.min(l,n.length),d={role:"system",content:r.summary};n.splice(a,s-a,d)}return n}function Fn(e,t,o){let n=Math.max(0,e.length-Math.floor(o/2)),r=[],a=new Set(t.stages.map(d=>`${d.range[0]}-${d.range[1]}`)),l=-1,s=0;for(let d=0;d<n;d++){let y=e[d];if(y.role==="tool"||y.role==="assistant"&&typeof y.content=="string"&&y.content==="")l<0&&(l=d),s++;else{if(s>=3){let g=`${l}-${l+s}`;a.has(g)||r.push({id:`collapse_${l}_${l+s}`,range:[l,l+s],summary:`[${s} tool results collapsed]`,committed:!1})}l=-1,s=0}}if(s>=3){let d=`${l}-${l+s}`;a.has(d)||r.push({id:`collapse_${l}_${l+s}`,range:[l,l+s],summary:`[${s} tool results collapsed]`,committed:!1})}return r}function Bn(e){return!(!e.ok||e.existingSkillName||!e.multiStep||e.toolCallCount<3||e.distinctToolCount<2)}function Dn(e){return e.existingSkillName?e.feedback==="negative":!1}function de(e,t){return Dn(e)?{type:"skill.improve",skillName:e.existingSkillName,reason:"negative user feedback on existing skill execution"}:Bn(e)?{type:"skill.create",suggestedName:t.suggestedName??`auto-skill-${t.tools.slice(0,3).join("-")}`,description:`Multi-step orchestration using ${t.tools.join(", ")}`,tools:t.tools,stepCount:e.toolCallCount}:null}function ht(e){return e.function&&typeof e.function=="object"&&typeof e.function.name=="string"?e.function.name.trim():typeof e.name=="string"?e.name.trim():""}function Un(e){return e==="enabled-eligible"||e==="installed-awaiting-approval"}function $n(e){return new Map((e??[]).map(t=>[t.toolName,t]))}function jn(e){if(!e.eligibility?.length)return[...e.tools];let t=$n(e.eligibility);return e.tools.filter(o=>{let n=ht(o);if(!n)return!1;let r=t.get(n);return!r||Un(r.status)})}function zn(e){let t=[],o=e.compatibility??{},n=e.toolChoice;if(e.thinkingEnabled&&o.requireAutoWhenThinking){let r=typeof n=="object"&&n&&!Array.isArray(n)?String(n.type??""):n;r&&r!=="auto"&&r!=="none"&&(t.push("tool_choice downgraded to auto because thinking mode requires auto/none compatibility."),n="auto")}if(n==="required"&&o.allowRequiredToolChoice===!1){let r=o.requiredFallback??"auto";t.push(`tool_choice=required is not supported by this provider; downgraded to ${r}.`),n=r}if(n&&typeof n=="object"&&!Array.isArray(n)&&n.type==="function"&&o.allowNamedToolChoice===!1){let r=o.namedFallback??"required";t.push(`named tool_choice is not supported by this provider; downgraded to ${r}.`),n=r}return{normalizedToolChoice:n,warnings:t}}function Me(e){let t=zn({toolChoice:e.toolChoice,thinkingEnabled:e.thinkingEnabled,compatibility:e.compatibility}),o=t.normalizedToolChoice,n=[...t.warnings],r=jn({tools:e.tools,eligibility:e.eligibility});if(!o||o==="auto")return{tools:r,normalizedToolChoice:o,warnings:n};if(o==="none")return{tools:[],normalizedToolChoice:"none",warnings:n};if(o==="required"){if(r.length===0)throw new Error("tool_choice=required but no tools were provided");return{tools:r,normalizedToolChoice:"required",extraSystemPrompt:"You must call one of the available tools before responding.",warnings:n}}if(typeof o=="object"&&!Array.isArray(o)&&o.type==="function"){let a=o.function??void 0,l=typeof a?.name=="string"?a.name.trim():"";if(!l)throw new Error("tool_choice.function.name is required");let s=r.filter(d=>ht(d)===l);if(s.length===0)throw new Error(`tool_choice requested unknown tool: ${l}`);return{tools:s,normalizedToolChoice:{type:"function",function:{name:l}},extraSystemPrompt:`You must call the ${l} tool before responding.`,warnings:n}}return{tools:r,normalizedToolChoice:o,warnings:n}}var Gn=["stop","aborted","timeout","cancelled","interrupted","error"],Hn=["tool_calls","toolCalls","function_call","functionCall","raw_tool_calls","rawToolCalls"];function Tt(e){return e==null?[]:typeof e=="string"?e.length>0?[{type:"text",text:e}]:[]:Array.isArray(e)?e:[{type:"text",text:String(e)}]}function qn(e,t){return{...e,content:[...Tt(e.content),...Tt(t.content)]}}function Wn(e){if(!e||typeof e!="object")return!1;if(e.function&&typeof e.function=="object"){let t=e.function.name;if(typeof t=="string"&&t.length>0)return!0}return typeof e.name=="string"&&e.name.length>0}function Kn(e){return new Set((e??Gn).map(t=>t.trim().toLowerCase()))}function Xn(e,t){return e?Kn(t).has(e.trim().toLowerCase()):!1}function we(e){if(!Array.isArray(e)||e.length===0)return[...e];let t=e.map(s=>{if(s.role==="assistant"&&Array.isArray(s.tool_calls)){let d=s.tool_calls.filter(y=>Wn(y));return{...s,...d.length>0?{tool_calls:d}:{tool_calls:void 0}}}return{...s}}),o=new Set;for(let s of t)if(!(s.role!=="assistant"||!Array.isArray(s.tool_calls)))for(let d of s.tool_calls)typeof d.id=="string"&&d.id&&o.add(d.id);let n=t.filter(s=>s.role!=="tool"?!0:!!(s.tool_call_id&&o.has(s.tool_call_id))),r=new Set;for(let s of n)s.role==="tool"&&typeof s.tool_call_id=="string"&&s.tool_call_id&&r.add(s.tool_call_id);let a=[];for(let s of n){if(s.role==="assistant"&&Array.isArray(s.tool_calls)&&s.tool_calls.length>0){let d=s.tool_calls.filter(y=>typeof y.id=="string"&&r.has(y.id));if(d.length===0){let{tool_calls:y,...u}=s;u.content!=null&&u.content!==""&&a.push(u);continue}if(d.length<s.tool_calls.length){a.push({...s,tool_calls:d});continue}}a.push(s)}let l=[];for(let s of a){let d=l.length>0?l[l.length-1]:void 0;if(s.role==="user"&&d?.role==="user"){l[l.length-1]=qn(d,s);continue}l.push(s)}return l}function Ie(e,t){return Xn(t?.stopReason,t?.forcedStopReasons)?e.map(o=>{if(o.role!=="assistant")return{...o};let n={...o};for(let r of Hn)delete n[r];return n}):[...e]}function Le(e,t){let o=t?.placeholderToolResult??"Error: Tool loop interrupted before the tool result was replayed.",n=new Set;for(let a of e)a.role==="tool"&&typeof a.tool_call_id=="string"&&a.tool_call_id&&n.add(a.tool_call_id);let r=[];for(let a of e)if(r.push({...a}),!(a.role!=="assistant"||!Array.isArray(a.tool_calls)||a.tool_calls.length===0))for(let l of a.tool_calls)typeof l.id!="string"||!l.id||n.has(l.id)||(n.add(l.id),r.push({role:"tool",tool_call_id:l.id,content:o}));return r}function Oe(e,t){let o=we(e),n=Ie(o,t);return Le(n,t)}function Yn(e){let t=new Set,o=new Set;for(let n of e){if(n.role==="assistant"&&Array.isArray(n.tool_calls))for(let r of n.tool_calls)typeof r.id=="string"&&r.id&&t.add(r.id);n.role==="tool"&&typeof n.tool_call_id=="string"&&n.tool_call_id&&o.add(n.tool_call_id)}return[...t].filter(n=>!o.has(n))}function Vn(e){let t=new Set;for(let o of e)o.role==="tool"&&typeof o.tool_call_id=="string"&&o.tool_call_id&&t.add(o.tool_call_id);return[...t]}function Qn(e){return{round:e.round??0,maxRounds:e.maxRounds,pendingToolCallIds:[...e.pendingToolCallIds??[]],completedToolCallIds:[...e.completedToolCallIds??[]],lastStopReason:e.lastStopReason,replayMessages:[...e.replayMessages??[]]}}function Pe(e,t){return{round:e.round+1,maxRounds:e.maxRounds,pendingToolCallIds:[...t.pendingToolCallIds??e.pendingToolCallIds],completedToolCallIds:[...t.completedToolCallIds??e.completedToolCallIds],lastStopReason:t.lastStopReason??e.lastStopReason,replayMessages:[...t.replayMessages??e.replayMessages]}}function pe(e,t){return{round:e.round,maxRounds:e.maxRounds,pendingToolCallIds:[],completedToolCallIds:[...t.completedToolCallIds??e.completedToolCallIds],lastStopReason:t.lastStopReason??e.lastStopReason,replayMessages:[...t.replayMessages??e.replayMessages]}}function me(e){let t=[],o=we(e.replayMessages);o.length!==e.replayMessages.length&&t.push({kind:"drop-orphan-tool-result",detail:"Removed orphan tool results or invalid assistant tool calls."});let n=Ie(o,e.options);n.some((a,l)=>a!==o[l])&&t.push({kind:"strip-forced-stop-tool-metadata",detail:"Removed assistant tool-call metadata after forced stop."});let r=Le(n,e.options);return r.length>n.length&&t.push({kind:"inject-placeholder-tool-result",detail:"Injected placeholder tool result for pending tool calls."}),{state:Qn({maxRounds:e.maxRounds,round:e.round,lastStopReason:e.lastStopReason,replayMessages:r,pendingToolCallIds:Yn(r),completedToolCallIds:Vn(r)}),recoveryActions:t}}var Jn=new Set(["main","sdk","agent","compact","hook","verification","side_question"]);function Ne(e){return e?Jn.has(e):!0}function Fe(e){return e===429||e===529}function ge(e,t=500,o=32e3){let n=Math.min(t*Math.pow(2,e-1),o);return n+Math.floor(Math.random()*n*.25)}var lr={maxBackoffMs:300*1e3,resetCapMs:360*60*1e3,heartbeatIntervalMs:3e4};function Be(){let e=process.env.QLOGICAGENT_PERSISTENT_RETRY;return e==="1"||e==="true"}var oe=class extends Error{constructor(o,n){super(`Model fallback triggered: ${o} -> ${n}`);this.originalModel=o;this.fallbackModel=n;this.name="FallbackTriggeredError"}originalModel;fallbackModel};function De(e){return{promptTokens:0,hasAttemptedReactiveCompact:!1,currentMaxOutputTokens:e.maxOutputTokens,consecutiveTruncations:0,aborted:e.abortSignal?.aborted??!1}}function Ue(e,t){if(e.aborted)return{level:"blocking",usagePercent:100,reason:"budget_exhausted"};let o=t.contextWindowTokens-t.responseBufferTokens-e.currentMaxOutputTokens,n=o>0?e.promptTokens/o*100:100;return e.promptTokens>=o?e.hasAttemptedReactiveCompact||!t.reactiveCompactEnabled?{level:"blocking",usagePercent:n,reason:"prompt_too_long"}:{level:"blocking",usagePercent:n,reason:"prompt_too_long"}:n>=85?{level:"warning",usagePercent:n,remainingTokens:o-e.promptTokens}:{level:"ok"}}function $e(e,t,o){let n=e.message?.toLowerCase()??"",r=e.status??0;return r===413||n.includes("prompt_too_long")||n.includes("context_length_exceeded")?!t.hasAttemptedReactiveCompact&&o.reactiveCompactEnabled?{action:"reactive_compact"}:{action:"abort",reason:"prompt_too_long_unrecoverable"}:r>=500&&r<600?{action:"retry",reason:`server_error_${r}`}:r===429?{action:"retry",reason:"rate_limited"}:r===401||r===403?{action:"abort",reason:"auth_error"}:r===404?{action:"abort",reason:"model_not_found"}:{action:"abort",reason:n||"unknown_error"}}function je(e,t,o){if(!t.outputEscalationEnabled)return{shouldEscalate:!1,newMax:e.currentMaxOutputTokens};if(e.consecutiveTruncations>=3)return{shouldEscalate:!1,newMax:e.currentMaxOutputTokens};let n=Math.min(e.currentMaxOutputTokens*2,o);return n<=e.currentMaxOutputTokens?{shouldEscalate:!1,newMax:e.currentMaxOutputTokens}:{shouldEscalate:!0,newMax:n}}function ze(e,t){return e.aborted?!0:t.abortSignal?.aborted?(e.aborted=!0,!0):!1}var Zn={maxConsecutiveFailures:3,minMessagesAfterCompact:4,targetUsagePercent:50};function Ge(){return{consecutiveFailures:0,attemptedThisTurn:!1,lastCompactAt:null,toolsAtLastCompact:[]}}function q(e,t=Zn){return!(e.attemptedThisTurn||e.consecutiveFailures>=t.maxConsecutiveFailures)}function Ct(e,t){let o=e.get(t.index);o||(o={id:"",name:"",arguments:""},e.set(t.index,o)),t.id&&(o.id=t.id),t.name&&(o.name+=t.name),o.arguments+=t.arguments}import{mkdir as io,writeFile as ao}from"fs/promises";import{join as Ot}from"path";import{tmpdir as lo}from"os";var bt=Math.min(Math.max(1,Number(process.env.TOOL_LOOP_DEFAULT_BUDGET)||25),100),kt=3,_t=128e3,Rt=13e3,xt=16384,vt=65536,St=3,At=65536,Et=3e4,Mt=3,re=10,He=500,wt=3,It=5e4,Lt=2e5,qe=2e3;var co="tool-results",Pt="<persisted-output>",uo="</persisted-output>";function Nt(){return{seenIds:new Set,replacements:new Map}}function Ft(e){return Ot(lo(),"qlogicagent-sessions",e,co)}async function po(e){try{await io(Ft(e),{recursive:!0})}catch{}}function mo(e,t){let o=t.replace(/[^a-zA-Z0-9_-]/g,"_");return Ot(Ft(e),`${o}.txt`)}function go(e,t){if(e.length<=t)return{preview:e,hasMore:!1};let n=e.slice(0,t).lastIndexOf(`
8
- `),r=n>t*.5?n:t;return{preview:e.slice(0,r),hasMore:!0}}function Bt(e){return e.includes(Pt)}async function Dt(e,t,o){await po(o);let n=mo(o,t);try{await ao(n,e,{encoding:"utf-8",flag:"wx"})}catch(l){if(l.code!=="EEXIST")return null}let{preview:r,hasMore:a}=go(e,qe);return{filepath:n,originalSize:e.length,preview:r,hasMore:a}}function Ut(e){let t=`${Pt}
7
+ [...truncated: ${e.length-t} chars omitted]`}function _e(...e){return{compress(t,o){let n=t,r=0,a=[];for(let l of e){let s=l.compress(n,o);n=s.messages,r+=s.droppedCount,s.droppedCount>0&&a.push(s.strategy)}return{messages:n,droppedCount:r,strategy:a.length>0?a.join("+"):"none"}}}}var mt={modelContextWindow:128e3,targetUsageRatio:.75,minBudget:16e3,maxBudget:12e4};function Re(e={}){let t={...mt,...e},o=Math.floor(t.modelContextWindow*t.targetUsageRatio);return Math.max(t.minBudget,Math.min(o,t.maxBudget))}function xe(e,t){let o=e/t;return o<=.8?"none":o<=1?"trim-only":o<=1.5?"sliding-window":"llm-summarize"}var te=class{events=[];maxEvents;constructor(t=100){this.maxEvents=t}record(t){this.events.push(t),this.events.length>this.maxEvents&&this.events.shift()}snapshot(){let t=this.events.length;if(t===0)return{totalCompressions:0,totalLlmCalls:0,totalCacheInvalidations:0,averageCompressionRatio:1,averageLatencyMs:0,totalTokensSaved:0,recentEvents:[]};let o=0,n=0,r=0,a=0,l=0;for(let s of this.events)o+=s.tokensBefore>0?s.tokensAfter/s.tokensBefore:1,n+=s.latencyMs,r+=Math.max(0,s.tokensBefore-s.tokensAfter),s.usedLlm&&a++,s.cacheInvalidated&&l++;return{totalCompressions:t,totalLlmCalls:a,totalCacheInvalidations:l,averageCompressionRatio:o/t,averageLatencyMs:n/t,totalTokensSaved:r,recentEvents:this.events.slice(-10)}}reset(){this.events.length=0}},ne=class{engines=new Map;activeId;register(t){this.engines.set(t.id,t)}activate(t){return this.engines.has(t)?(this.activeId=t,!0):!1}getActive(){return this.activeId?this.engines.get(this.activeId):void 0}listEngines(){return Array.from(this.engines.values()).map(t=>({id:t.id,label:t.label,active:t.id===this.activeId}))}};function gt(e){let t=typeof e.content=="string"?e.content:e.content!=null?JSON.stringify(e.content):"";return Math.ceil(t.length/4)}var Nn=new Set(["file_read","read","Read","bash","shell","Bash","grep","search","Grep","grep_search","glob","Glob","file_search","web_search","WebSearch","web_fetch","WebFetch","file_edit","edit","Edit","file_write","write","Write"]),G=class{constructor(t=20,o=gt){this.preserveRecentCount=t;this.estimateTokens=o}preserveRecentCount;estimateTokens;compress(t,o){if(t.length<=this.preserveRecentCount)return{messages:t,droppedCount:0,strategy:"micro-compact"};let n=t.length-this.preserveRecentCount,r=0,a=0;return{messages:t.map((s,d)=>{if(d>=n||s.role!=="tool"||typeof s.content!="string"||!s.name||!Nn.has(s.name)||s.content.length<=200)return s;let y=this.estimateTokens(s);return a+=y,r++,{...s,content:`[result cleared \u2014 ${s.content.length} chars]`}}),droppedCount:r,strategy:"micro-compact",metrics:r>0?{tokensBefore:0,tokensAfter:0,compressionRatio:0,latencyMs:0,usedLlm:!1,cacheInvalidated:!1}:void 0}}};function ve(e,t,o=gt){if(t.size===0)return{messages:e,tokensFreed:0,removedCount:0};let n=0,r=0,a=[];for(let s of e){let d=s.tool_call_id??"";if(d&&t.has(d)){n+=o(s),r++,t.delete(d);continue}a.push(s)}let l=r>0?{role:"system",content:`[${r} messages removed by snip]`}:void 0;return{messages:a,tokensFreed:n,removedCount:r,boundaryMessage:l}}function Se(){return{stages:[]}}function Ae(e,t,o){let n=o?.thresholdMessages??40;if(e.filter(s=>s.role!=="system").length<=n)return{messages:e,stagedCount:0};let a=ft(e,t),l=Fn(a,t,n);if(l.length===0)return{messages:a,stagedCount:0};for(let s of l)t.stages.push(s);return a=ft(e,t),{messages:a,stagedCount:l.length}}function Ee(e,t){let o=0;for(let n of t.stages)n.committed||(n.committed=!0,o++);return o===0?{messages:e,committed:0}:{messages:yt(e,t),committed:o}}function ft(e,t){return t.stages.filter(n=>n.committed).length===0?e:yt(e,t)}function yt(e,t){let o=t.stages.filter(r=>r.committed).sort((r,a)=>a.range[0]-r.range[0]),n=[...e];for(let r of o){let[a,l]=r.range;if(a>=n.length)continue;let s=Math.min(l,n.length),d={role:"system",content:r.summary};n.splice(a,s-a,d)}return n}function Fn(e,t,o){let n=Math.max(0,e.length-Math.floor(o/2)),r=[],a=new Set(t.stages.map(d=>`${d.range[0]}-${d.range[1]}`)),l=-1,s=0;for(let d=0;d<n;d++){let y=e[d];if(y.role==="tool"||y.role==="assistant"&&typeof y.content=="string"&&y.content==="")l<0&&(l=d),s++;else{if(s>=3){let g=`${l}-${l+s}`;a.has(g)||r.push({id:`collapse_${l}_${l+s}`,range:[l,l+s],summary:`[${s} tool results collapsed]`,committed:!1})}l=-1,s=0}}if(s>=3){let d=`${l}-${l+s}`;a.has(d)||r.push({id:`collapse_${l}_${l+s}`,range:[l,l+s],summary:`[${s} tool results collapsed]`,committed:!1})}return r}function Bn(e){return!(!e.ok||e.existingSkillName||!e.multiStep||e.toolCallCount<3||e.distinctToolCount<2)}function Un(e){return e.existingSkillName?e.feedback==="negative":!1}function de(e,t){return Un(e)?{type:"skill.improve",skillName:e.existingSkillName,reason:"negative user feedback on existing skill execution"}:Bn(e)?{type:"skill.create",suggestedName:t.suggestedName??`auto-skill-${t.tools.slice(0,3).join("-")}`,description:`Multi-step orchestration using ${t.tools.join(", ")}`,tools:t.tools,stepCount:e.toolCallCount}:null}function ht(e){return e.function&&typeof e.function=="object"&&typeof e.function.name=="string"?e.function.name.trim():typeof e.name=="string"?e.name.trim():""}function Dn(e){return e==="enabled-eligible"||e==="installed-awaiting-approval"}function $n(e){return new Map((e??[]).map(t=>[t.toolName,t]))}function jn(e){if(!e.eligibility?.length)return[...e.tools];let t=$n(e.eligibility);return e.tools.filter(o=>{let n=ht(o);if(!n)return!1;let r=t.get(n);return!r||Dn(r.status)})}function zn(e){let t=[],o=e.compatibility??{},n=e.toolChoice;if(e.thinkingEnabled&&o.requireAutoWhenThinking){let r=typeof n=="object"&&n&&!Array.isArray(n)?String(n.type??""):n;r&&r!=="auto"&&r!=="none"&&(t.push("tool_choice downgraded to auto because thinking mode requires auto/none compatibility."),n="auto")}if(n==="required"&&o.allowRequiredToolChoice===!1){let r=o.requiredFallback??"auto";t.push(`tool_choice=required is not supported by this provider; downgraded to ${r}.`),n=r}if(n&&typeof n=="object"&&!Array.isArray(n)&&n.type==="function"&&o.allowNamedToolChoice===!1){let r=o.namedFallback??"required";t.push(`named tool_choice is not supported by this provider; downgraded to ${r}.`),n=r}return{normalizedToolChoice:n,warnings:t}}function Me(e){let t=zn({toolChoice:e.toolChoice,thinkingEnabled:e.thinkingEnabled,compatibility:e.compatibility}),o=t.normalizedToolChoice,n=[...t.warnings],r=jn({tools:e.tools,eligibility:e.eligibility});if(!o||o==="auto")return{tools:r,normalizedToolChoice:o,warnings:n};if(o==="none")return{tools:[],normalizedToolChoice:"none",warnings:n};if(o==="required"){if(r.length===0)throw new Error("tool_choice=required but no tools were provided");return{tools:r,normalizedToolChoice:"required",extraSystemPrompt:"You must call one of the available tools before responding.",warnings:n}}if(typeof o=="object"&&!Array.isArray(o)&&o.type==="function"){let a=o.function??void 0,l=typeof a?.name=="string"?a.name.trim():"";if(!l)throw new Error("tool_choice.function.name is required");let s=r.filter(d=>ht(d)===l);if(s.length===0)throw new Error(`tool_choice requested unknown tool: ${l}`);return{tools:s,normalizedToolChoice:{type:"function",function:{name:l}},extraSystemPrompt:`You must call the ${l} tool before responding.`,warnings:n}}return{tools:r,normalizedToolChoice:o,warnings:n}}var Gn=["stop","aborted","timeout","cancelled","interrupted","error"],Hn=["tool_calls","toolCalls","function_call","functionCall","raw_tool_calls","rawToolCalls"];function Tt(e){return e==null?[]:typeof e=="string"?e.length>0?[{type:"text",text:e}]:[]:Array.isArray(e)?e:[{type:"text",text:String(e)}]}function qn(e,t){return{...e,content:[...Tt(e.content),...Tt(t.content)]}}function Wn(e){if(!e||typeof e!="object")return!1;if(e.function&&typeof e.function=="object"){let t=e.function.name;if(typeof t=="string"&&t.length>0)return!0}return typeof e.name=="string"&&e.name.length>0}function Kn(e){return new Set((e??Gn).map(t=>t.trim().toLowerCase()))}function Xn(e,t){return e?Kn(t).has(e.trim().toLowerCase()):!1}function we(e){if(!Array.isArray(e)||e.length===0)return[...e];let t=e.map(s=>{if(s.role==="assistant"&&Array.isArray(s.tool_calls)){let d=s.tool_calls.filter(y=>Wn(y));return{...s,...d.length>0?{tool_calls:d}:{tool_calls:void 0}}}return{...s}}),o=new Set;for(let s of t)if(!(s.role!=="assistant"||!Array.isArray(s.tool_calls)))for(let d of s.tool_calls)typeof d.id=="string"&&d.id&&o.add(d.id);let n=t.filter(s=>s.role!=="tool"?!0:!!(s.tool_call_id&&o.has(s.tool_call_id))),r=new Set;for(let s of n)s.role==="tool"&&typeof s.tool_call_id=="string"&&s.tool_call_id&&r.add(s.tool_call_id);let a=[];for(let s of n){if(s.role==="assistant"&&Array.isArray(s.tool_calls)&&s.tool_calls.length>0){let d=s.tool_calls.filter(y=>typeof y.id=="string"&&r.has(y.id));if(d.length===0){let{tool_calls:y,...u}=s;u.content!=null&&u.content!==""&&a.push(u);continue}if(d.length<s.tool_calls.length){a.push({...s,tool_calls:d});continue}}a.push(s)}let l=[];for(let s of a){let d=l.length>0?l[l.length-1]:void 0;if(s.role==="user"&&d?.role==="user"){l[l.length-1]=qn(d,s);continue}l.push(s)}return l}function Ie(e,t){return Xn(t?.stopReason,t?.forcedStopReasons)?e.map(o=>{if(o.role!=="assistant")return{...o};let n={...o};for(let r of Hn)delete n[r];return n}):[...e]}function Le(e,t){let o=t?.placeholderToolResult??"Error: Tool loop interrupted before the tool result was replayed.",n=new Set;for(let a of e)a.role==="tool"&&typeof a.tool_call_id=="string"&&a.tool_call_id&&n.add(a.tool_call_id);let r=[];for(let a of e)if(r.push({...a}),!(a.role!=="assistant"||!Array.isArray(a.tool_calls)||a.tool_calls.length===0))for(let l of a.tool_calls)typeof l.id!="string"||!l.id||n.has(l.id)||(n.add(l.id),r.push({role:"tool",tool_call_id:l.id,content:o}));return r}function Oe(e,t){let o=we(e),n=Ie(o,t);return Le(n,t)}function Yn(e){let t=new Set,o=new Set;for(let n of e){if(n.role==="assistant"&&Array.isArray(n.tool_calls))for(let r of n.tool_calls)typeof r.id=="string"&&r.id&&t.add(r.id);n.role==="tool"&&typeof n.tool_call_id=="string"&&n.tool_call_id&&o.add(n.tool_call_id)}return[...t].filter(n=>!o.has(n))}function Vn(e){let t=new Set;for(let o of e)o.role==="tool"&&typeof o.tool_call_id=="string"&&o.tool_call_id&&t.add(o.tool_call_id);return[...t]}function Qn(e){return{round:e.round??0,maxRounds:e.maxRounds,pendingToolCallIds:[...e.pendingToolCallIds??[]],completedToolCallIds:[...e.completedToolCallIds??[]],lastStopReason:e.lastStopReason,replayMessages:[...e.replayMessages??[]]}}function Pe(e,t){return{round:e.round+1,maxRounds:e.maxRounds,pendingToolCallIds:[...t.pendingToolCallIds??e.pendingToolCallIds],completedToolCallIds:[...t.completedToolCallIds??e.completedToolCallIds],lastStopReason:t.lastStopReason??e.lastStopReason,replayMessages:[...t.replayMessages??e.replayMessages]}}function pe(e,t){return{round:e.round,maxRounds:e.maxRounds,pendingToolCallIds:[],completedToolCallIds:[...t.completedToolCallIds??e.completedToolCallIds],lastStopReason:t.lastStopReason??e.lastStopReason,replayMessages:[...t.replayMessages??e.replayMessages]}}function me(e){let t=[],o=we(e.replayMessages);o.length!==e.replayMessages.length&&t.push({kind:"drop-orphan-tool-result",detail:"Removed orphan tool results or invalid assistant tool calls."});let n=Ie(o,e.options);n.some((a,l)=>a!==o[l])&&t.push({kind:"strip-forced-stop-tool-metadata",detail:"Removed assistant tool-call metadata after forced stop."});let r=Le(n,e.options);return r.length>n.length&&t.push({kind:"inject-placeholder-tool-result",detail:"Injected placeholder tool result for pending tool calls."}),{state:Qn({maxRounds:e.maxRounds,round:e.round,lastStopReason:e.lastStopReason,replayMessages:r,pendingToolCallIds:Yn(r),completedToolCallIds:Vn(r)}),recoveryActions:t}}var Jn=new Set(["main","sdk","agent","compact","hook","verification","side_question"]);function Ne(e){return e?Jn.has(e):!0}function Fe(e){return e===429||e===529}function ge(e,t=500,o=32e3){let n=Math.min(t*Math.pow(2,e-1),o);return n+Math.floor(Math.random()*n*.25)}var lr={maxBackoffMs:300*1e3,resetCapMs:360*60*1e3,heartbeatIntervalMs:3e4};function Be(){let e=process.env.QLOGICAGENT_PERSISTENT_RETRY;return e==="1"||e==="true"}var oe=class extends Error{constructor(o,n){super(`Model fallback triggered: ${o} -> ${n}`);this.originalModel=o;this.fallbackModel=n;this.name="FallbackTriggeredError"}originalModel;fallbackModel};function Ue(e){return{promptTokens:0,hasAttemptedReactiveCompact:!1,currentMaxOutputTokens:e.maxOutputTokens,consecutiveTruncations:0,aborted:e.abortSignal?.aborted??!1}}function De(e,t){if(e.aborted)return{level:"blocking",usagePercent:100,reason:"budget_exhausted"};let o=t.contextWindowTokens-t.responseBufferTokens-e.currentMaxOutputTokens,n=o>0?e.promptTokens/o*100:100;return e.promptTokens>=o?e.hasAttemptedReactiveCompact||!t.reactiveCompactEnabled?{level:"blocking",usagePercent:n,reason:"prompt_too_long"}:{level:"blocking",usagePercent:n,reason:"prompt_too_long"}:n>=85?{level:"warning",usagePercent:n,remainingTokens:o-e.promptTokens}:{level:"ok"}}function $e(e,t,o){let n=e.message?.toLowerCase()??"",r=e.status??0;return r===413||n.includes("prompt_too_long")||n.includes("context_length_exceeded")?!t.hasAttemptedReactiveCompact&&o.reactiveCompactEnabled?{action:"reactive_compact"}:{action:"abort",reason:"prompt_too_long_unrecoverable"}:r>=500&&r<600?{action:"retry",reason:`server_error_${r}`}:r===429?{action:"retry",reason:"rate_limited"}:r===401||r===403?{action:"abort",reason:"auth_error"}:r===404?{action:"abort",reason:"model_not_found"}:{action:"abort",reason:n||"unknown_error"}}function je(e,t,o){if(!t.outputEscalationEnabled)return{shouldEscalate:!1,newMax:e.currentMaxOutputTokens};if(e.consecutiveTruncations>=3)return{shouldEscalate:!1,newMax:e.currentMaxOutputTokens};let n=Math.min(e.currentMaxOutputTokens*2,o);return n<=e.currentMaxOutputTokens?{shouldEscalate:!1,newMax:e.currentMaxOutputTokens}:{shouldEscalate:!0,newMax:n}}function ze(e,t){return e.aborted?!0:t.abortSignal?.aborted?(e.aborted=!0,!0):!1}var Zn={maxConsecutiveFailures:3,minMessagesAfterCompact:4,targetUsagePercent:50};function Ge(){return{consecutiveFailures:0,attemptedThisTurn:!1,lastCompactAt:null,toolsAtLastCompact:[]}}function q(e,t=Zn){return!(e.attemptedThisTurn||e.consecutiveFailures>=t.maxConsecutiveFailures)}function Ct(e,t){let o=e.get(t.index);o||(o={id:"",name:"",arguments:""},e.set(t.index,o)),t.id&&(o.id=t.id),t.name&&(o.name+=t.name),o.arguments+=t.arguments}import{mkdir as io,writeFile as ao}from"fs/promises";import{join as Ot}from"path";import{tmpdir as lo}from"os";var bt=Math.min(Math.max(1,Number(process.env.TOOL_LOOP_DEFAULT_BUDGET)||25),100),kt=3,_t=128e3,Rt=13e3,xt=16384,vt=65536,St=3,At=65536,Et=3e4,Mt=3,re=10,He=500,wt=3,It=5e4,Lt=2e5,qe=2e3;var co="tool-results",Pt="<persisted-output>",uo="</persisted-output>";function Nt(){return{seenIds:new Set,replacements:new Map}}function Ft(e){return Ot(lo(),"qlogicagent-sessions",e,co)}async function po(e){try{await io(Ft(e),{recursive:!0})}catch{}}function mo(e,t){let o=t.replace(/[^a-zA-Z0-9_-]/g,"_");return Ot(Ft(e),`${o}.txt`)}function go(e,t){if(e.length<=t)return{preview:e,hasMore:!1};let n=e.slice(0,t).lastIndexOf(`
8
+ `),r=n>t*.5?n:t;return{preview:e.slice(0,r),hasMore:!0}}function Bt(e){return e.includes(Pt)}async function Ut(e,t,o){await po(o);let n=mo(o,t);try{await ao(n,e,{encoding:"utf-8",flag:"wx"})}catch(l){if(l.code!=="EEXIST")return null}let{preview:r,hasMore:a}=go(e,qe);return{filepath:n,originalSize:e.length,preview:r,hasMore:a}}function Dt(e){let t=`${Pt}
9
9
  `;return t+=`Output too large (${e.originalSize} chars). Full output saved to: ${e.filepath}
10
10
 
11
11
  `,t+=`Preview (first ${qe} bytes):
12
12
  `,t+=e.preview,t+=e.hasMore?`
13
13
  ...
14
14
  `:`
15
- `,t+=uo,t}async function $t(e,t,o,n=It){if(e.length<=n||Bt(e))return e;let r=await Dt(e,t,o);return r?Ut(r):e.slice(0,n)+`
16
- ...[truncated ${e.length-n} chars]`}function fo(e){let t=[],o=[];for(let n of e)n.role==="tool"&&typeof n.content=="string"&&n.tool_call_id?Bt(n.content)||o.push({toolCallId:n.tool_call_id,content:n.content,size:n.content.length}):n.role==="assistant"&&o.length>0&&(t.push(o),o=[]);return o.length>0&&t.push(o),t}function yo(e,t){let o=[],n=[],r=[];for(let a of e){let l=t.replacements.get(a.toolCallId);l!==void 0?o.push({...a,replacement:l}):t.seenIds.has(a.toolCallId)?n.push(a):r.push(a)}return{mustReapply:o,frozen:n,fresh:r}}function ho(e,t,o){let n=[...e].sort((l,s)=>s.size-l.size),r=[],a=t+e.reduce((l,s)=>l+s.size,0);for(let l of n){if(a<=o)break;r.push(l),a-=l.size}return r}async function jt(e,t,o,n=Lt){let r=fo(e);if(r.length===0)return{messages:e,newlyReplacedCount:0};let a=new Map,l=[];for(let u of r){let{mustReapply:g,frozen:v,fresh:T}=yo(u,t);for(let k of g)a.set(k.toolCallId,k.replacement);if(T.length===0){for(let k of u)t.seenIds.add(k.toolCallId);continue}let x=v.reduce((k,S)=>k+S.size,0),b=T.reduce((k,S)=>k+S.size,0),_=x+b>n?ho(T,x,n):[],I=new Set(_.map(k=>k.toolCallId));for(let k of u)I.has(k.toolCallId)||t.seenIds.add(k.toolCallId);_.length>0&&l.push(..._)}if(a.size===0&&l.length===0)return{messages:e,newlyReplacedCount:0};let s=await Promise.all(l.map(async u=>{let g=await Dt(u.content,u.toolCallId,o);return{candidate:u,result:g}})),d=0;for(let{candidate:u,result:g}of s){if(t.seenIds.add(u.toolCallId),!g)continue;let v=Ut(g);a.set(u.toolCallId,v),t.replacements.set(u.toolCallId,v),d++}return a.size===0?{messages:e,newlyReplacedCount:0}:{messages:e.map(u=>{if(u.role!=="tool"||!u.tool_call_id)return u;let g=a.get(u.tool_call_id);return g===void 0?u:{...u,content:g}}),newlyReplacedCount:d}}var To=new Set(["read_file","file_read","FileRead","grep","Grep","glob","Glob","search","list_dir","find_files","web_fetch","web_search","WebFetch","WebSearch"]),Co=new Set(["bash","execute_command","Bash","shell"]),fe=class{tools=[];hasErrored=!1;erroredToolDescription="";discarded=!1;siblingAbortController;progressResolve;config;concurrencySafe;constructor(t){this.config=t,this.concurrencySafe=t.concurrencySafeTools??To,this.siblingAbortController=new AbortController,t.signal&&t.signal.addEventListener("abort",()=>{this.siblingAbortController.abort("parent_abort")},{once:!0})}discard(){this.discarded=!0}addTool(t){let o=this.concurrencySafe.has(t.function.name);this.tools.push({id:t.id,toolCall:t,status:"queued",isConcurrencySafe:o,results:[],pendingProgress:[]}),this.processQueue()}canExecuteTool(t){let o=this.tools.filter(r=>r.status==="executing"),n=this.config.maxConcurrentTools;return n&&n>0&&o.length>=n?!1:o.length===0||t&&o.every(r=>r.isConcurrencySafe)}async processQueue(){for(let t of this.tools)if(t.status==="queued"){if(this.canExecuteTool(t.isConcurrencySafe))await this.executeTool(t);else if(!t.isConcurrencySafe)break}}getAbortReason(){return this.discarded?"discarded":this.hasErrored?"sibling_error":this.config.signal?.aborted?"user_interrupted":null}getToolDescription(t){let o;try{o=JSON.parse(t.toolCall.function.arguments)}catch{}let n=o?.command??o?.file_path??o?.pattern??"";if(typeof n=="string"&&n.length>0){let r=n.length>40?n.slice(0,40)+"\u2026":n;return`${t.toolCall.function.name}(${r})`}return t.toolCall.function.name}createSyntheticError(t,o){let n=this.erroredToolDescription,r=o==="user_interrupted"?"User rejected tool use":o==="discarded"?"Streaming fallback - tool execution discarded":n?`Cancelled: parallel tool call ${n} errored`:"Cancelled: parallel tool call errored";return{callId:t.id,toolName:t.toolCall.function.name,ok:!1,error:r,message:J(t.id,{ok:!1,error:r})}}async executeTool(t){t.status="executing";let n=(async()=>{let r=this.getAbortReason();if(r){t.results.push(this.createSyntheticError(t,r)),t.status="completed";return}let{toolInvoker:a,hooks:l,sessionId:s,turnId:d,log:y}=this.config,u=t.toolCall.function.name,g=!1,v=t.toolCall.function.arguments;if(l)try{let k=await l.invoke("tool.before_invoke",{sessionId:s,turnId:d,callId:t.id,toolName:u,arguments:bo(v)});if(k.action==="abort"){let S=k.reason??"blocked by policy";y.info(`tool ${u} blocked: ${S}`),t.results.push({callId:t.id,toolName:u,ok:!1,error:S,blocked:!0,blockReason:S,message:J(t.id,{ok:!1,error:S})}),t.status="completed";return}k.action==="continue"&&k.context?.arguments&&(v=JSON.stringify(k.context.arguments))}catch{}let T=await a.invoke(d,u,v,this.siblingAbortController.signal),x=this.getAbortReason();if(x&&!g){t.results.push(this.createSyntheticError(t,x)),t.status="completed";return}let b=!T.error,_=T.result;b&&_&&_.length>5e4&&(_=await $t(_,t.id,s));let I=J(t.id,{ok:b,payload:_,error:T.error,toolReferences:T.toolReferences});b||(g=!0,Co.has(u)&&(this.hasErrored=!0,this.erroredToolDescription=this.getToolDescription(t),this.siblingAbortController.abort("sibling_error"))),l?.invoke(b?"tool.after_invoke":"tool.invoke_failed",{sessionId:s,turnId:d,callId:t.id,toolName:u,ok:b,...T.error?{error:T.error}:{}}).catch(()=>{}),t.results.push({callId:t.id,toolName:u,ok:b,error:T.error,message:I}),t.status="completed"})();t.promise=n,n.finally(()=>{this.processQueue()})}*getCompletedResults(){if(!this.discarded){for(let t of this.tools)if(t.status!=="yielded"){if(t.status==="completed"&&t.results.length>0){t.status="yielded";for(let o of t.results)yield o}else if(t.status==="executing"&&!t.isConcurrencySafe)break}}}async*getRemainingResults(){if(!this.discarded){for(;this.hasUnfinishedTools();){await this.processQueue();for(let t of this.getCompletedResults())yield t;if(this.hasExecutingTools()&&!this.hasCompletedResults()){let t=this.tools.filter(n=>n.status==="executing"&&n.promise).map(n=>n.promise),o=new Promise(n=>{this.progressResolve=n});t.length>0&&await Promise.race([...t,o])}}for(let t of this.getCompletedResults())yield t}}hasCompletedResults(){return this.tools.some(t=>t.status==="completed")}hasExecutingTools(){return this.tools.some(t=>t.status==="executing")}hasUnfinishedTools(){return this.tools.some(t=>t.status!=="yielded")}};function bo(e){try{return JSON.parse(e)}catch{return}}import{readFile as ls}from"node:fs/promises";function Xe(e){let t=typeof e.content=="string"?e.content:e.content!=null?JSON.stringify(e.content):"";return Math.ceil(t.length/4)}function We(e){let t=0;for(let o of e)t+=Xe(o);return t}var Ke={"deepseek-v4-flash":1e6,"deepseek-v4-pro":1e6,"deepseek-chat":1e6,"deepseek-reasoner":1e6,"gpt-4o":128e3,"gpt-4o-mini":128e3,"claude-sonnet-4-20250514":2e5,"claude-3-5-haiku-20241022":2e5,"gemini-3.1-pro-preview":1e6,"gemini-3-flash-preview":1e6,"gemini-3.1-flash-lite":1e6};function ko(e){if(!e)return 128e3;if(e in Ke)return Ke[e];let t=e.toLowerCase();for(let[o,n]of Object.entries(Ke))if(t.startsWith(o.toLowerCase()))return n;return 128e3}var _o=8e3;var Ro=new te(200);var cs=new ne;function xo(){return _e(new ee(_o),new G(20,Xe),new Z(Xe))}var vo=null;function zt(e,t){let o=t?.budget??Re({modelContextWindow:ko(t?.model)}),r=(t?.pipeline??xo()).compress(e,o);if(r.droppedCount>0){let a=We(e),l=We(r.messages);Ro.record({timestamp:Date.now(),strategy:r.strategy,tokensBefore:a,tokensAfter:l,droppedCount:r.droppedCount,latencyMs:r.metrics?.latencyMs??0,usedLlm:!1,cacheInvalidated:r.metrics?.cacheInvalidated??!1,tier:xe(a,o)})}return r.droppedCount>0&&vo?.(r.droppedCount,We(r.messages)),r}function Gt(e,t,o){let n=o-t;return`[Budget] ${Math.round(e)}% used (${t.toLocaleString()} / ${o.toLocaleString()} tokens). ${n.toLocaleString()} tokens remaining. `+(e>=90?"Wrap up your current task \u2014 you are near the token limit.":"Continue working \u2014 do not summarize prematurely.")}var Oo=new Set(["write","edit","patch","apply_patch"]);function Po(e){let t=e.split(".").pop()?.toLowerCase()??"";return["png","jpg","jpeg","gif","webp","svg","bmp","ico"].includes(t)?"image":["md","txt","pdf","doc","docx","rtf","html"].includes(t)?"document":["mermaid","mmd","dot","puml","plantuml"].includes(t)?"diagram":["csv","tsv","xlsx","xls"].includes(t)?"table":["ts","tsx","js","jsx","py","rs","go","java","c","cpp","h","cs","rb","sh","sql","json","yaml","yml","toml","xml","css","scss","vue","svelte"].includes(t)?"code":"file"}function No(e){let t=e.split(".").pop()?.toLowerCase()??"";return{ts:"typescript",tsx:"typescriptreact",js:"javascript",jsx:"javascriptreact",py:"python",rs:"rust",go:"go",java:"java",c:"c",cpp:"cpp",h:"c",cs:"csharp",rb:"ruby",sh:"shellscript",sql:"sql",json:"json",yaml:"yaml",yml:"yaml",toml:"toml",xml:"xml",html:"html",css:"css",scss:"scss",vue:"vue",svelte:"svelte",md:"markdown"}[t]}function Fo(e){return typeof e=="number"&&Number.isFinite(e)&&e>=1?Math.min(Math.round(e),100):bt}function Wt(e){let t=e.message.toLowerCase();return e.status===413||t.includes("prompt_too_long")||t.includes("context_length_exceeded")||t.includes("maximum context length")}function Bo(e){return e==="length"||e==="max_tokens"}function Kt(e){let t=e.message.toLowerCase();return(t.includes("image")||t.includes("media")||t.includes("file too large")||t.includes("payload too large"))&&(e.status===413||t.includes("too large")||t.includes("size"))}function Do(e){let t=e.headers;if(!t)return null;let o=t["retry-after"]??t["Retry-After"];if(!o)return null;let n=parseInt(o,10);return!isNaN(n)&&n>0?n*1e3:null}function Uo(e){if(e.status!==400)return null;let t=e.message.match(/input length and `max_tokens` exceed context limit: (\d+) \+ (\d+) > (\d+)/);if(!t?.[1]||!t?.[3])return null;let o=parseInt(t[1],10),n=parseInt(t[3],10);if(isNaN(o)||isNaN(n))return null;let r=n-o-1e3;return r>=3e3?r:null}function $o(e){return e.filter(t=>t.role!=="assistant"?!0:!(typeof t.content=="string"&&t.content.trim()===""))}async function*Xt(e,t,o,n){let{turnId:r,sessionId:a,messages:l,tools:s,model:d,apiKey:y,temperature:u=0,hooks:g,signal:v}=e,T={sessionId:a,turnId:r},x=e.maxTurns??0,b=e.querySource,{resolveToolEligibility:_}=await Promise.resolve().then(()=>(qt(),Ht)),I=_(s,e.toolEligibilityContext),k=I.eligibleTools;for(let A of I.blockedTools)yield{type:"tool_blocked",turnId:r,callId:"",name:A.toolName,reason:"blocked-by-policy"};if(!k.length){yield*jo(r,d,l,y,u,v,t,n);return}let S=Fo(e.maxRounds),L={contextWindowTokens:e.contextWindowTokens??_t,responseBufferTokens:Rt,maxOutputTokens:e.maxOutputTokens??xt,abortSignal:v,reactiveCompactEnabled:!0,outputEscalationEnabled:!0},W=new Set,D=0,ie=k,ae,i={messages:[...l],maxOutputTokensRecoveryCount:0,hasAttemptedReactiveCompact:!1,maxOutputTokensOverride:void 0,turnCount:1,transition:void 0,guardState:De(L),reactiveCompactState:Ge(),toolLoopState:me({maxRounds:S,replayMessages:[...l]}).state,consecutiveFailedRounds:0,finalText:"",totalUsage:{prompt:0,completion:0},collapseStore:Se(),currentModel:d,consecutive529Errors:0,consecutiveApiRetries:0,stopHookActive:void 0,lastResponseId:void 0,snipRemovedIds:new Set,contentReplacementState:Nt(),budgetContinuationCount:0,lastBudgetDeltaTokens:0,lastBudgetGlobalTokens:0},Ye=Math.max(x*5,200),Ve=0;for(;;){if(Ve++,Ve>Ye){n.info(`hard iteration cap reached (${Ye}), forcing completion`);let c=i.finalText||se(i.messages,n);yield{type:"end",turnId:r,content:c,usage:i.totalUsage,model:i.currentModel};return}let{messages:A,maxOutputTokensRecoveryCount:K,hasAttemptedReactiveCompact:qo,maxOutputTokensOverride:Qe,turnCount:X,guardState:M,reactiveCompactState:F,collapseStore:ye}=i,{toolLoopState:O}=i;if(ae){try{let c=await ae;c&&(yield{type:"tool_use_summary",turnId:r,summary:c})}catch{}ae=void 0}if(e.refreshTools&&X>1){let c=e.refreshTools();c!==ie&&(ie=c,n.debug(`tools refreshed: ${c.length} tools`))}if(ze(M,L)){n.info(`turn aborted by guard at turn ${X}`),yield{type:"error",turnId:r,error:"Turn aborted",code:"ABORTED",usage:i.totalUsage};return}let U=Ue(M,L);if(U.level==="blocking"){U.reason==="prompt_too_long"&&q(F)&&(F.attemptedThisTurn=!0,M.hasAttemptedReactiveCompact=!0,n.info(`token budget blocking (${U.reason}), reactive compact needed`),yield{type:"recovery",turnId:r,action:"reactive_compact",detail:"token budget pre-check"}),n.info(`token budget blocking (${U.reason}), ending tool loop`);break}U.level==="warning"&&n.info(`token budget warning: ${U.usagePercent}% used, ${U.remainingTokens} remaining`);let w;{let c=await jt(A,i.contentReplacementState,a);w=c.messages,c.newlyReplacedCount>0&&(n.info(`tool-result-budget: persisted ${c.newlyReplacedCount} oversized tool results`),yield{type:"recovery",turnId:r,action:"tool_result_budget",detail:`${c.newlyReplacedCount} persisted`})}{let c=ve(w,i.snipRemovedIds);w=c.messages,c.removedCount>0&&(n.info(`snip: removed ${c.removedCount} messages, freed ~${c.tokensFreed} tokens`),yield{type:"recovery",turnId:r,action:"snip",detail:`${c.removedCount} messages`})}{let p=new G().compress(w,0);p.droppedCount>0&&(w=p.messages,n.info(`microcompact: cleared ${p.droppedCount} old tool results`))}if(w=Ae(w,ye).messages,M.promptTokens>0){let c=zt(w,{budget:L.contextWindowTokens*.75,model:i.currentModel});c.droppedCount>0&&(w=c.messages,n.info(`autocompact: ${c.strategy}, dropped ${c.droppedCount}`),yield{type:"recovery",turnId:r,action:"autocompact",detail:`${c.strategy}: ${c.droppedCount} dropped`},i.hasAttemptedReactiveCompact=!1,g?.invoke("context.after_compact",{...T,removedCount:c.droppedCount}).catch(()=>{}))}w=$o(w);let le=Me({tools:ie,toolChoice:e.toolChoice??"auto"}),Y=me({maxRounds:S,replayMessages:w,lastStopReason:O.lastStopReason,options:{stopReason:O.lastStopReason}}),Je=le.extraSystemPrompt?[{role:"system",content:le.extraSystemPrompt},...Y.state.replayMessages]:Y.state.replayMessages;O=Y.state,Y.recoveryActions.length>0&&n.debug(`tool loop recovery: ${Y.recoveryActions.map(c=>c.detail??c.kind).join("; ")}`),n.debug(`turn ${X}, messages: ${Je.length}`),g?.invoke("turn.before_inference",{...T,model:i.currentModel}).catch(()=>{});let ce=!1,Ze=[],et=new Map,tt="stop",P,C=null,ue=!1,V=[],N=[];try{for await(let c of t.stream({model:i.currentModel,messages:Je,tools:le.tools,toolChoice:le.normalizedToolChoice??"auto",temperature:u,maxTokens:(Qe??M.currentMaxOutputTokens)||void 0,streamRequired:e.streamRequired,previousResponseId:i.lastResponseId,reasoning:e.reasoning,promptCacheKey:e.promptCacheKey,promptCacheRetention:e.promptCacheRetention,serviceTier:e.serviceTier,openaiBuiltinTools:e.openaiBuiltinTools,maxToolCalls:e.maxToolCalls,parallelToolCalls:e.parallelToolCalls,textVerbosity:e.textVerbosity},y,v))switch(c.type){case"delta":Ze.push(c.text),ce||(yield{type:"delta",turnId:r,text:c.text});break;case"tool_call_delta":ce=!0,Ct(et,c);break;case"reasoning_delta":V.push(c.text);break;case"reasoning_block_complete":c.signature&&N.push({thinking:V.join(""),signature:c.signature}),V.length=0;break;case"usage":P={prompt:c.promptTokens,completion:c.completionTokens,reasoning:c.reasoningTokens,cacheRead:c.cacheReadTokens,cacheCreation:c.cacheCreationTokens};break;case"response_id":i.lastResponseId=c.id;break;case"annotations":yield{type:"annotations",turnId:r,annotations:c.annotations};break;case"builtin_tool_status":yield{type:"heartbeat",turnId:r,message:`${c.toolType}: ${c.event}`};break;case"done":tt=c.finishReason;break}if(ce||g?.invoke("turn.after_inference",{...T,model:i.currentModel}).catch(()=>{}),e.postSamplingHooks&&e.postSamplingHooks.length>0){let c=i.currentModel;for(let p of e.postSamplingHooks)try{p({messages:[...w],model:c,sessionId:a})}catch{}}}catch(c){if(c instanceof oe&&e.fallbackModel){n.info(`model fallback triggered: ${c.originalModel} \u2192 ${c.fallbackModel}`),yield{type:"recovery",turnId:r,action:"model_fallback",detail:`${c.originalModel} \u2192 ${c.fallbackModel}`},i={...i,currentModel:c.fallbackModel,consecutive529Errors:0,consecutiveApiRetries:0,transition:void 0};continue}let p=c instanceof Error?c.message:String(c),m=typeof c?.status=="number"?c.status:void 0;if(!m&&p&&(p.includes("ECONNRESET")||p.includes("EPIPE"))){let R=(i.consecutiveApiRetries??0)+1;if(R>re){n.info(`stale connection retry limit reached (${re}), aborting`),yield{type:"error",turnId:r,error:p,code:"RETRIES_EXHAUSTED",usage:i.totalUsage};return}n.info(`stale connection (${p.includes("ECONNRESET")?"ECONNRESET":"EPIPE"}): retrying`),yield{type:"recovery",turnId:r,action:"stale_connection_retry",detail:p.slice(0,80)},i={...i,consecutiveApiRetries:R,transition:void 0};continue}let f=Uo({status:m,message:p});if(f!==null){n.info(`max_tokens overflow: adjusting to ${f}`),M.currentMaxOutputTokens=f,i={...i,maxOutputTokensOverride:f,transition:void 0};continue}if(Fe(m)){if(i.consecutive529Errors++,i.consecutive529Errors>=Mt&&e.fallbackModel&&i.currentModel!==e.fallbackModel){n.info(`529 \xD7 ${i.consecutive529Errors}: triggering fallback to ${e.fallbackModel}`),yield{type:"recovery",turnId:r,action:"model_fallback",detail:`529 \xD7 ${i.consecutive529Errors}`},i={...i,currentModel:e.fallbackModel,consecutive529Errors:0,transition:void 0};continue}if(Be()){let R=ge(i.consecutive529Errors);n.info(`persistent retry: waiting ${R}ms (attempt ${i.consecutive529Errors})`);let h=R;for(;h>0;){if(v?.aborted){yield{type:"error",turnId:r,error:"Aborted during retry wait",code:"ABORTED",usage:i.totalUsage};return}yield{type:"heartbeat",turnId:r,message:`Retrying in ${Math.ceil(h/1e3)}s (${m})`};let E=Math.min(h,Et);await new Promise(Te=>setTimeout(Te,E)),h-=E}i={...i,transition:void 0};continue}if(Ne(b)){let h=Do({status:m,message:p})??ge(i.consecutive529Errors);n.info(`transient ${m}: retry in ${h}ms`),yield{type:"recovery",turnId:r,action:"retry",detail:`${m} retry in ${h}ms`},await new Promise(E=>setTimeout(E,h)),i={...i,transition:void 0};continue}n.info(`background source ${b}: not retrying ${m}`)}C={status:m,message:p}}if(C&&g?.invoke("turn.after_inference",{...T,model:i.currentModel,response:{error:C.message}}).catch(()=>{}),C)if(Wt(C))ue=!0,n.info(`withheld prompt_too_long error (status=${C.status})`);else if(Kt(C))ue=!0,n.info(`withheld media_size error (status=${C.status})`);else{let c=$e({status:C.status??500,message:C.message},M,L);if(c.action==="reactive_compact"&&q(F)&&(F.attemptedThisTurn=!0,M.hasAttemptedReactiveCompact=!0,yield{type:"recovery",turnId:r,action:"reactive_compact",detail:`API ${C.status??500}: ${C.message}`}),c.action==="retry"){let m=(i.consecutiveApiRetries??0)+1;if(m>re){n.info(`API retry limit reached (${re}), aborting`);let f=H(C.status,C.message);yield{type:"error",turnId:r,error:C.message,code:f,usage:i.totalUsage};return}yield{type:"recovery",turnId:r,action:"retry",detail:c.reason},i={...i,consecutiveApiRetries:m,transition:void 0};continue}let p=H(C.status,C.message);g?.invoke("stop.failure",{sessionId:a,reason:p,error:C.message}).catch(()=>{}),yield{type:"error",turnId:r,error:C.message,code:p,usage:i.totalUsage};return}P&&(i.totalUsage.prompt+=P.prompt,i.totalUsage.completion+=P.completion,P.reasoning&&(i.totalUsage.reasoning=(i.totalUsage.reasoning??0)+P.reasoning),P.cacheRead&&(i.totalUsage.cacheRead=(i.totalUsage.cacheRead??0)+P.cacheRead),P.cacheCreation&&(i.totalUsage.cacheCreation=(i.totalUsage.cacheCreation??0)+P.cacheCreation)),P?.prompt&&(M.promptTokens=P.prompt);let nt=Ze.join("");nt&&(i.finalText=nt);let B=[...et.values()].map(c=>({id:c.id||`tc_${r}_${X}_${Math.random().toString(36).slice(2,8)}`,type:"function",function:{name:c.name,arguments:c.arguments}}));if(B.length===0&&!ce){if(ue&&C&&Wt(C)){if(i.transition?.reason!=="collapse_drain_retry"){let m=Ee(w,ye);if(m.committed>0){n.info(`collapse drain: committed ${m.committed} stages`),yield{type:"recovery",turnId:r,action:"collapse_drain",detail:`${m.committed} stages committed`},i={...i,messages:m.messages,transition:{reason:"collapse_drain_retry",committed:m.committed}};continue}}if(q(F)){F.attemptedThisTurn=!0,M.hasAttemptedReactiveCompact=!0,n.info("withheld 413: reactive compact attempt"),yield{type:"recovery",turnId:r,action:"reactive_compact",detail:"withheld prompt_too_long"},i={...i,hasAttemptedReactiveCompact:!0,transition:{reason:"reactive_compact_retry"}};continue}n.info("withheld 413: recovery exhausted, surfacing error"),g?.invoke("stop.failure",{sessionId:a,reason:"prompt_too_long",error:C.message}).catch(()=>{}),yield{type:"error",turnId:r,error:C.message,code:"PROMPT_TOO_LONG",usage:i.totalUsage};return}if(ue&&C&&Kt(C)){if(q(F)){F.attemptedThisTurn=!0,M.hasAttemptedReactiveCompact=!0,n.info("withheld media error: reactive compact strip-retry"),yield{type:"recovery",turnId:r,action:"reactive_compact",detail:"media error strip-retry"},i={...i,hasAttemptedReactiveCompact:!0,transition:{reason:"reactive_compact_retry"}};continue}n.info("withheld media error: recovery exhausted"),g?.invoke("stop.failure",{sessionId:a,reason:"media_error",error:C.message}).catch(()=>{}),yield{type:"error",turnId:r,error:C.message,code:"IMAGE_ERROR",usage:i.totalUsage};return}if(Bo(tt)){M.consecutiveTruncations+=1;let m=e.modelMaxOutputTokens??vt,f=je(M,L,m);if(f.shouldEscalate&&Qe===void 0){M.currentMaxOutputTokens=f.newMax,n.info(`max_output_tokens escalate: ${f.newMax} tokens`),yield{type:"recovery",turnId:r,action:"output_escalation",detail:`${f.newMax} tokens`},i={...i,maxOutputTokensOverride:At,transition:{reason:"max_output_tokens_escalate"}};continue}if(K<St){let R={role:"user",content:"Output token limit hit. Resume directly \u2014 no apology, no recap of what you were doing. Pick up mid-thought if that is where the cut happened. Break remaining work into smaller pieces."};n.info(`max_output_tokens recovery #${K+1}`),yield{type:"recovery",turnId:r,action:"max_output_tokens_recovery",detail:`attempt ${K+1}`},i={...i,messages:[...w,R],maxOutputTokensRecoveryCount:K+1,maxOutputTokensOverride:void 0,transition:{reason:"max_output_tokens_recovery",attempt:K+1}};continue}n.info("max_output_tokens recovery exhausted, completing with partial content")}else M.consecutiveTruncations=0;if(O=pe(O,{replayMessages:A,lastStopReason:"completed"}),g){let m=await g.invoke("stop",{sessionId:a,reason:"completed"});if(m.action==="prevent"){n.info(`stop hook prevented continuation: ${m.reason??"no reason"}`),yield{type:"end",turnId:r,content:i.finalText,usage:i.totalUsage,model:i.currentModel};return}if(m.action==="abort"){let f=m.reason??"Stop hook requested continuation";n.info(`stop hook blocking: ${f}`);let R={role:"user",content:f},h={role:"assistant",content:i.finalText,...N.length>0&&{thinkingBlocks:[...N]}};i={...i,messages:[...A,h,R],stopHookActive:!0,transition:{reason:"stop_hook_blocking"}};continue}}if(e.tokenBudget&&e.tokenBudget>0&&i.budgetContinuationCount<5){let m=i.totalUsage.prompt+i.totalUsage.completion+(i.totalUsage.reasoning??0),f=m/e.tokenBudget*100,R=m-i.lastBudgetGlobalTokens,h=i.budgetContinuationCount>=wt&&R<He&&i.lastBudgetDeltaTokens<He;if(h&&n.info(`token budget early stop: diminishing returns at ${Math.round(f)}% (delta=${R})`),!h&&f<90){let E=i.budgetContinuationCount+1,Te={role:"user",content:Gt(f,m,e.tokenBudget)};n.info(`token budget continuation #${E}: ${Math.round(f)}% used`),yield{type:"recovery",turnId:r,action:"budget_continuation",detail:`${Math.round(f)}% used (#${E})`};let en={role:"assistant",content:i.finalText,...N.length>0&&{thinkingBlocks:[...N]}};i={...i,messages:[...A,en,Te],budgetContinuationCount:E,lastBudgetDeltaTokens:R,lastBudgetGlobalTokens:m,transition:{reason:"token_budget_continuation"}};continue}}if(D>0){let m={ok:!0,toolCallCount:D,distinctToolCount:W.size,multiStep:D>=2,hasSubAgent:!1,feedback:null,existingSkillName:null},f=de(m,{tools:[...W]});f&&(yield{type:"skill_instruction",turnId:r,instruction:f})}let p=i.finalText||se(A,n);yield{type:"end",turnId:r,content:p,usage:i.totalUsage,model:i.currentModel};return}for(let c of B){let p=c.function.arguments,m=ie.find(f=>f.function.name===c.function.name);if(m?.backfillObservableInput)try{let f=JSON.parse(c.function.arguments),R={...f};m.backfillObservableInput(R),Object.keys(R).some(E=>!(E in f))&&(p=JSON.stringify(R))}catch{}yield{type:"tool_call",turnId:r,callId:c.id,name:c.function.name,arguments:p}}let Jt=N.length===0&&V.length>0?V.join(""):void 0;A.push(Ce(B,i.finalText||void 0,N.length>0?N:void 0,Jt)),O=Pe(O,{replayMessages:A,pendingToolCallIds:B.map(c=>c.id),completedToolCallIds:O.completedToolCallIds,lastStopReason:"tool_calls"});let ot=[];try{let c=new fe({toolInvoker:o,hooks:g,sessionId:a,turnId:r,log:n,signal:v,maxConcurrentTools:e?.maxConcurrentTools});for(let p of B)c.addTool(p);for await(let p of c.getRemainingResults()){p.blocked&&(yield{type:"tool_blocked",turnId:r,callId:p.callId,name:p.toolName,reason:p.blockReason??"blocked"}),A.push(p.message),ot.push(p.callId),W.add(p.toolName),D++;let m=typeof p.message?.content=="string"?p.message.content:"",f=p.ok&&m?m.slice(0,2e3):void 0;if(yield{type:"tool_result",turnId:r,callId:p.callId,name:p.toolName,ok:p.ok,error:p.error,outputPreview:f},p.ok){let R=B.find(h=>h.id===p.callId);if(R){if(p.toolName==="plan_mode")try{let h=JSON.parse(R.function.arguments);h.action==="exit"&&typeof h.plan=="string"&&h.plan.length>0&&(yield{type:"plan_update",turnId:r,slug:"approved-plan",content:h.plan})}catch{}if(Oo.has(p.toolName))try{let h=JSON.parse(R.function.arguments),E=typeof h.file_path=="string"?h.file_path:typeof h.filePath=="string"?h.filePath:typeof h.path=="string"?h.path:void 0;E&&(yield{type:"artifact",turnId:r,artifactId:`artifact-${p.callId}`,artifactType:Po(E),title:E.split(/[\\/]/).pop()||E,filePath:E,language:No(E)})}catch{}}}}}catch(c){let p=c instanceof Error?c.message:String(c);yield{type:"error",turnId:r,error:p,code:"TOOL_EXECUTION_ERROR",usage:i.totalUsage};return}if(O=pe(O,{replayMessages:A,completedToolCallIds:[...O.completedToolCallIds,...ot],lastStopReason:"tool_calls"}),e.generateToolUseSummary&&B.length>0){let c=B.map(p=>({name:p.function.name,arguments:p.function.arguments}));ae=e.generateToolUseSummary(c).catch(()=>null)}let rt=A.slice(-B.length),Zt=rt.length>0&&rt.every(c=>{let p=c?.content;return typeof p!="string"?!1:p.startsWith("Error: ")}),Q=i.consecutiveFailedRounds;if(Zt){if(Q+=1,Q>=kt){let c=i.finalText||se(A,n);n.info(`early exit: ${Q} consecutive failed rounds, returning ${i.finalText?"partial":"fallback"} response`),yield{type:"end",turnId:r,content:c,usage:i.totalUsage,model:i.currentModel};return}}else Q=0;let he=X+1;if(x>0&&he>x){if(n.info(`max turns reached (${x}), completing`),g){let p=await g.invoke("stop",{sessionId:a,reason:"max_turns"});if(p.action==="abort"){let m=p.reason??"Stop hook requested continuation after max_turns",f={role:"assistant",content:i.finalText,...N.length>0&&{thinkingBlocks:[...N]}};i={...i,messages:[...A,f,{role:"user",content:m}],stopHookActive:!0,transition:{reason:"stop_hook_blocking"}};continue}}let c=i.finalText||se(A,n);yield{type:"end",turnId:r,content:c,usage:i.totalUsage,model:i.currentModel};return}if(he>S){if(n.info(`tool loop budget exhausted (${S} rounds), returning`),D>0){let p={ok:!0,toolCallCount:D,distinctToolCount:W.size,multiStep:D>=2,hasSubAgent:!1,feedback:null,existingSkillName:null},m=de(p,{tools:[...W]});m&&(yield{type:"skill_instruction",turnId:r,instruction:m})}let c=i.finalText||se(A,n);yield{type:"end",turnId:r,content:c,usage:i.totalUsage,model:i.currentModel};return}i={messages:A,maxOutputTokensRecoveryCount:0,hasAttemptedReactiveCompact:!1,maxOutputTokensOverride:void 0,turnCount:he,transition:{reason:"next_turn"},guardState:M,reactiveCompactState:F,toolLoopState:O,consecutiveFailedRounds:Q,finalText:i.finalText,totalUsage:i.totalUsage,collapseStore:ye,currentModel:i.currentModel,consecutive529Errors:0,consecutiveApiRetries:0,stopHookActive:i.stopHookActive,lastResponseId:i.lastResponseId,snipRemovedIds:i.snipRemovedIds,contentReplacementState:i.contentReplacementState,budgetContinuationCount:0,lastBudgetDeltaTokens:0,lastBudgetGlobalTokens:0}}}function se(e,t){let o=[];for(let n=e.length-1;n>=0;n--){let r=e[n];if(r.role==="tool"&&typeof r.content=="string")o.unshift(r.content.slice(0,500));else if(r.role==="assistant"){if(typeof r.content=="string"&&r.content.trim())return t.info("synthesizeFallbackContent: found assistant text, using it"),r.content;break}else break}return o.length>0?(t.info(`synthesizeFallbackContent: synthesized from ${o.length} tool result(s)`),o.join(`
15
+ `,t+=uo,t}async function $t(e,t,o,n=It){if(e.length<=n||Bt(e))return e;let r=await Ut(e,t,o);return r?Dt(r):e.slice(0,n)+`
16
+ ...[truncated ${e.length-n} chars]`}function fo(e){let t=[],o=[];for(let n of e)n.role==="tool"&&typeof n.content=="string"&&n.tool_call_id?Bt(n.content)||o.push({toolCallId:n.tool_call_id,content:n.content,size:n.content.length}):n.role==="assistant"&&o.length>0&&(t.push(o),o=[]);return o.length>0&&t.push(o),t}function yo(e,t){let o=[],n=[],r=[];for(let a of e){let l=t.replacements.get(a.toolCallId);l!==void 0?o.push({...a,replacement:l}):t.seenIds.has(a.toolCallId)?n.push(a):r.push(a)}return{mustReapply:o,frozen:n,fresh:r}}function ho(e,t,o){let n=[...e].sort((l,s)=>s.size-l.size),r=[],a=t+e.reduce((l,s)=>l+s.size,0);for(let l of n){if(a<=o)break;r.push(l),a-=l.size}return r}async function jt(e,t,o,n=Lt){let r=fo(e);if(r.length===0)return{messages:e,newlyReplacedCount:0};let a=new Map,l=[];for(let u of r){let{mustReapply:g,frozen:v,fresh:h}=yo(u,t);for(let k of g)a.set(k.toolCallId,k.replacement);if(h.length===0){for(let k of u)t.seenIds.add(k.toolCallId);continue}let x=v.reduce((k,S)=>k+S.size,0),b=h.reduce((k,S)=>k+S.size,0),_=x+b>n?ho(h,x,n):[],I=new Set(_.map(k=>k.toolCallId));for(let k of u)I.has(k.toolCallId)||t.seenIds.add(k.toolCallId);_.length>0&&l.push(..._)}if(a.size===0&&l.length===0)return{messages:e,newlyReplacedCount:0};let s=await Promise.all(l.map(async u=>{let g=await Ut(u.content,u.toolCallId,o);return{candidate:u,result:g}})),d=0;for(let{candidate:u,result:g}of s){if(t.seenIds.add(u.toolCallId),!g)continue;let v=Dt(g);a.set(u.toolCallId,v),t.replacements.set(u.toolCallId,v),d++}return a.size===0?{messages:e,newlyReplacedCount:0}:{messages:e.map(u=>{if(u.role!=="tool"||!u.tool_call_id)return u;let g=a.get(u.tool_call_id);return g===void 0?u:{...u,content:g}}),newlyReplacedCount:d}}var To=new Set(["read_file","file_read","FileRead","grep","Grep","glob","Glob","search","list_dir","find_files","web_fetch","web_search","WebFetch","WebSearch"]),Co=new Set(["bash","execute_command","Bash","shell"]),fe=class{tools=[];hasErrored=!1;erroredToolDescription="";discarded=!1;siblingAbortController;progressResolve;config;concurrencySafe;constructor(t){this.config=t,this.concurrencySafe=t.concurrencySafeTools??To,this.siblingAbortController=new AbortController,t.signal&&t.signal.addEventListener("abort",()=>{this.siblingAbortController.abort("parent_abort")},{once:!0})}discard(){this.discarded=!0}addTool(t){let o=this.concurrencySafe.has(t.function.name);this.tools.push({id:t.id,toolCall:t,status:"queued",isConcurrencySafe:o,results:[],pendingProgress:[]}),this.processQueue()}canExecuteTool(t){let o=this.tools.filter(r=>r.status==="executing"),n=this.config.maxConcurrentTools;return n&&n>0&&o.length>=n?!1:o.length===0||t&&o.every(r=>r.isConcurrencySafe)}async processQueue(){for(let t of this.tools)if(t.status==="queued"){if(this.canExecuteTool(t.isConcurrencySafe))await this.executeTool(t);else if(!t.isConcurrencySafe)break}}getAbortReason(){return this.discarded?"discarded":this.hasErrored?"sibling_error":this.config.signal?.aborted?"user_interrupted":null}getToolDescription(t){let o;try{o=JSON.parse(t.toolCall.function.arguments)}catch{}let n=o?.command??o?.file_path??o?.pattern??"";if(typeof n=="string"&&n.length>0){let r=n.length>40?n.slice(0,40)+"\u2026":n;return`${t.toolCall.function.name}(${r})`}return t.toolCall.function.name}createSyntheticError(t,o){let n=this.erroredToolDescription,r=o==="user_interrupted"?"User rejected tool use":o==="discarded"?"Streaming fallback - tool execution discarded":n?`Cancelled: parallel tool call ${n} errored`:"Cancelled: parallel tool call errored";return{callId:t.id,toolName:t.toolCall.function.name,ok:!1,error:r,message:J(t.id,{ok:!1,error:r})}}async executeTool(t){t.status="executing";let n=(async()=>{let r=this.getAbortReason();if(r){t.results.push(this.createSyntheticError(t,r)),t.status="completed";return}let{toolInvoker:a,hooks:l,sessionId:s,turnId:d,log:y}=this.config,u=t.toolCall.function.name,g=!1,v=t.toolCall.function.arguments;if(l)try{let k=await l.invoke("tool.before_invoke",{sessionId:s,turnId:d,callId:t.id,toolName:u,arguments:bo(v)});if(k.action==="abort"){let S=k.reason??"blocked by policy";y.info(`tool ${u} blocked: ${S}`),t.results.push({callId:t.id,toolName:u,ok:!1,error:S,blocked:!0,blockReason:S,message:J(t.id,{ok:!1,error:S})}),t.status="completed";return}k.action==="continue"&&k.context?.arguments&&(v=JSON.stringify(k.context.arguments))}catch{}let h=await a.invoke(d,u,v,this.siblingAbortController.signal),x=this.getAbortReason();if(x&&!g){t.results.push(this.createSyntheticError(t,x)),t.status="completed";return}let b=!h.error,_=h.result;b&&_&&_.length>5e4&&(_=await $t(_,t.id,s));let I=J(t.id,{ok:b,payload:_,error:h.error,toolReferences:h.toolReferences,imageUrls:h.imageUrls});b||(g=!0,Co.has(u)&&(this.hasErrored=!0,this.erroredToolDescription=this.getToolDescription(t),this.siblingAbortController.abort("sibling_error"))),l?.invoke(b?"tool.after_invoke":"tool.invoke_failed",{sessionId:s,turnId:d,callId:t.id,toolName:u,ok:b,...h.error?{error:h.error}:{}}).catch(()=>{}),t.results.push({callId:t.id,toolName:u,ok:b,error:h.error,message:I}),t.status="completed"})();t.promise=n,n.finally(()=>{this.processQueue()})}*getCompletedResults(){if(!this.discarded){for(let t of this.tools)if(t.status!=="yielded"){if(t.status==="completed"&&t.results.length>0){t.status="yielded";for(let o of t.results)yield o}else if(t.status==="executing"&&!t.isConcurrencySafe)break}}}async*getRemainingResults(){if(!this.discarded){for(;this.hasUnfinishedTools();){await this.processQueue();for(let t of this.getCompletedResults())yield t;if(this.hasExecutingTools()&&!this.hasCompletedResults()){let t=this.tools.filter(n=>n.status==="executing"&&n.promise).map(n=>n.promise),o=new Promise(n=>{this.progressResolve=n});t.length>0&&await Promise.race([...t,o])}}for(let t of this.getCompletedResults())yield t}}hasCompletedResults(){return this.tools.some(t=>t.status==="completed")}hasExecutingTools(){return this.tools.some(t=>t.status==="executing")}hasUnfinishedTools(){return this.tools.some(t=>t.status!=="yielded")}};function bo(e){try{return JSON.parse(e)}catch{return}}import{readFile as ls}from"node:fs/promises";function Xe(e){let t=typeof e.content=="string"?e.content:e.content!=null?JSON.stringify(e.content):"";return Math.ceil(t.length/4)}function We(e){let t=0;for(let o of e)t+=Xe(o);return t}var Ke={"deepseek-v4-flash":1e6,"deepseek-v4-pro":1e6,"deepseek-chat":1e6,"deepseek-reasoner":1e6,"gpt-4o":128e3,"gpt-4o-mini":128e3,"claude-sonnet-4-20250514":2e5,"claude-3-5-haiku-20241022":2e5,"gemini-3.1-pro-preview":1e6,"gemini-3-flash-preview":1e6,"gemini-3.1-flash-lite":1e6};function ko(e){if(!e)return 128e3;if(e in Ke)return Ke[e];let t=e.toLowerCase();for(let[o,n]of Object.entries(Ke))if(t.startsWith(o.toLowerCase()))return n;return 128e3}var _o=8e3;var Ro=new te(200);var cs=new ne;function xo(){return _e(new ee(_o),new G(20,Xe),new Z(Xe))}var vo=null;function zt(e,t){let o=t?.budget??Re({modelContextWindow:ko(t?.model)}),r=(t?.pipeline??xo()).compress(e,o);if(r.droppedCount>0){let a=We(e),l=We(r.messages);Ro.record({timestamp:Date.now(),strategy:r.strategy,tokensBefore:a,tokensAfter:l,droppedCount:r.droppedCount,latencyMs:r.metrics?.latencyMs??0,usedLlm:!1,cacheInvalidated:r.metrics?.cacheInvalidated??!1,tier:xe(a,o)})}return r.droppedCount>0&&vo?.(r.droppedCount,We(r.messages)),r}function Gt(e,t,o){let n=o-t;return`[Budget] ${Math.round(e)}% used (${t.toLocaleString()} / ${o.toLocaleString()} tokens). ${n.toLocaleString()} tokens remaining. `+(e>=90?"Wrap up your current task \u2014 you are near the token limit.":"Continue working \u2014 do not summarize prematurely.")}var Oo=new Set(["write","edit","patch","apply_patch"]);function Po(e){let t=e.split(".").pop()?.toLowerCase()??"";return["png","jpg","jpeg","gif","webp","svg","bmp","ico"].includes(t)?"image":["md","txt","pdf","doc","docx","rtf","html"].includes(t)?"document":["mermaid","mmd","dot","puml","plantuml"].includes(t)?"diagram":["csv","tsv","xlsx","xls"].includes(t)?"table":["ts","tsx","js","jsx","py","rs","go","java","c","cpp","h","cs","rb","sh","sql","json","yaml","yml","toml","xml","css","scss","vue","svelte"].includes(t)?"code":"file"}function No(e){let t=e.split(".").pop()?.toLowerCase()??"";return{ts:"typescript",tsx:"typescriptreact",js:"javascript",jsx:"javascriptreact",py:"python",rs:"rust",go:"go",java:"java",c:"c",cpp:"cpp",h:"c",cs:"csharp",rb:"ruby",sh:"shellscript",sql:"sql",json:"json",yaml:"yaml",yml:"yaml",toml:"toml",xml:"xml",html:"html",css:"css",scss:"scss",vue:"vue",svelte:"svelte",md:"markdown"}[t]}function Fo(e){return typeof e=="number"&&Number.isFinite(e)&&e>=1?Math.min(Math.round(e),100):bt}function Wt(e){let t=e.message.toLowerCase();return e.status===413||t.includes("prompt_too_long")||t.includes("context_length_exceeded")||t.includes("maximum context length")}function Bo(e){return e==="length"||e==="max_tokens"}function Kt(e){let t=e.message.toLowerCase();return(t.includes("image")||t.includes("media")||t.includes("file too large")||t.includes("payload too large"))&&(e.status===413||t.includes("too large")||t.includes("size"))}function Uo(e){let t=e.headers;if(!t)return null;let o=t["retry-after"]??t["Retry-After"];if(!o)return null;let n=parseInt(o,10);return!isNaN(n)&&n>0?n*1e3:null}function Do(e){if(e.status!==400)return null;let t=e.message.match(/input length and `max_tokens` exceed context limit: (\d+) \+ (\d+) > (\d+)/);if(!t?.[1]||!t?.[3])return null;let o=parseInt(t[1],10),n=parseInt(t[3],10);if(isNaN(o)||isNaN(n))return null;let r=n-o-1e3;return r>=3e3?r:null}function $o(e){return e.filter(t=>t.role!=="assistant"?!0:!(typeof t.content=="string"&&t.content.trim()===""))}async function*Xt(e,t,o,n){let{turnId:r,sessionId:a,messages:l,tools:s,model:d,apiKey:y,temperature:u=0,hooks:g,signal:v}=e,h={sessionId:a,turnId:r},x=e.maxTurns??0,b=e.querySource,{resolveToolEligibility:_}=await Promise.resolve().then(()=>(qt(),Ht)),I=_(s,e.toolEligibilityContext),k=I.eligibleTools;for(let A of I.blockedTools)yield{type:"tool_blocked",turnId:r,callId:"",name:A.toolName,reason:"blocked-by-policy"};if(!k.length){yield*jo(r,d,l,y,u,v,t,n);return}let S=Fo(e.maxRounds),L={contextWindowTokens:e.contextWindowTokens??_t,responseBufferTokens:Rt,maxOutputTokens:e.maxOutputTokens??xt,abortSignal:v,reactiveCompactEnabled:!0,outputEscalationEnabled:!0},W=new Set,U=0,ie=k,ae,i={messages:[...l],maxOutputTokensRecoveryCount:0,hasAttemptedReactiveCompact:!1,maxOutputTokensOverride:void 0,turnCount:1,transition:void 0,guardState:Ue(L),reactiveCompactState:Ge(),toolLoopState:me({maxRounds:S,replayMessages:[...l]}).state,consecutiveFailedRounds:0,finalText:"",totalUsage:{prompt:0,completion:0},collapseStore:Se(),currentModel:d,consecutive529Errors:0,consecutiveApiRetries:0,stopHookActive:void 0,lastResponseId:void 0,snipRemovedIds:new Set,contentReplacementState:Nt(),budgetContinuationCount:0,lastBudgetDeltaTokens:0,lastBudgetGlobalTokens:0},Ye=Math.max(x*5,200),Ve=0;for(;;){if(Ve++,Ve>Ye){n.info(`hard iteration cap reached (${Ye}), forcing completion`);let c=i.finalText||se(i.messages,n);yield{type:"end",turnId:r,content:c,usage:i.totalUsage,model:i.currentModel};return}let{messages:A,maxOutputTokensRecoveryCount:K,hasAttemptedReactiveCompact:qo,maxOutputTokensOverride:Qe,turnCount:X,guardState:M,reactiveCompactState:F,collapseStore:ye}=i,{toolLoopState:O}=i;if(ae){try{let c=await ae;c&&(yield{type:"tool_use_summary",turnId:r,summary:c})}catch{}ae=void 0}if(e.refreshTools&&X>1){let c=e.refreshTools();c!==ie&&(ie=c,n.debug(`tools refreshed: ${c.length} tools`))}if(ze(M,L)){n.info(`turn aborted by guard at turn ${X}`),yield{type:"error",turnId:r,error:"Turn aborted",code:"ABORTED",usage:i.totalUsage};return}let D=De(M,L);if(D.level==="blocking"){D.reason==="prompt_too_long"&&q(F)&&(F.attemptedThisTurn=!0,M.hasAttemptedReactiveCompact=!0,n.info(`token budget blocking (${D.reason}), reactive compact needed`),yield{type:"recovery",turnId:r,action:"reactive_compact",detail:"token budget pre-check"}),n.info(`token budget blocking (${D.reason}), ending tool loop`);break}D.level==="warning"&&n.info(`token budget warning: ${D.usagePercent}% used, ${D.remainingTokens} remaining`);let w;{let c=await jt(A,i.contentReplacementState,a);w=c.messages,c.newlyReplacedCount>0&&(n.info(`tool-result-budget: persisted ${c.newlyReplacedCount} oversized tool results`),yield{type:"recovery",turnId:r,action:"tool_result_budget",detail:`${c.newlyReplacedCount} persisted`})}{let c=ve(w,i.snipRemovedIds);w=c.messages,c.removedCount>0&&(n.info(`snip: removed ${c.removedCount} messages, freed ~${c.tokensFreed} tokens`),yield{type:"recovery",turnId:r,action:"snip",detail:`${c.removedCount} messages`})}{let p=new G().compress(w,0);p.droppedCount>0&&(w=p.messages,n.info(`microcompact: cleared ${p.droppedCount} old tool results`))}if(w=Ae(w,ye).messages,M.promptTokens>0){let c=zt(w,{budget:L.contextWindowTokens*.75,model:i.currentModel});c.droppedCount>0&&(w=c.messages,n.info(`autocompact: ${c.strategy}, dropped ${c.droppedCount}`),yield{type:"recovery",turnId:r,action:"autocompact",detail:`${c.strategy}: ${c.droppedCount} dropped`},i.hasAttemptedReactiveCompact=!1,g?.invoke("context.after_compact",{...h,removedCount:c.droppedCount}).catch(()=>{}))}w=$o(w);let le=Me({tools:ie,toolChoice:e.toolChoice??"auto"}),Y=me({maxRounds:S,replayMessages:w,lastStopReason:O.lastStopReason,options:{stopReason:O.lastStopReason}}),Je=le.extraSystemPrompt?[{role:"system",content:le.extraSystemPrompt},...Y.state.replayMessages]:Y.state.replayMessages;O=Y.state,Y.recoveryActions.length>0&&n.debug(`tool loop recovery: ${Y.recoveryActions.map(c=>c.detail??c.kind).join("; ")}`),n.debug(`turn ${X}, messages: ${Je.length}`),g?.invoke("turn.before_inference",{...h,model:i.currentModel}).catch(()=>{});let ce=!1,Ze=[],et=new Map,tt="stop",P,C=null,ue=!1,V=[],N=[];try{for await(let c of t.stream({model:i.currentModel,messages:Je,tools:le.tools,toolChoice:le.normalizedToolChoice??"auto",temperature:u,maxTokens:(Qe??M.currentMaxOutputTokens)||void 0,streamRequired:e.streamRequired,previousResponseId:i.lastResponseId,reasoning:e.reasoning,promptCacheKey:e.promptCacheKey,promptCacheRetention:e.promptCacheRetention,serviceTier:e.serviceTier,openaiBuiltinTools:e.openaiBuiltinTools,maxToolCalls:e.maxToolCalls,parallelToolCalls:e.parallelToolCalls,textVerbosity:e.textVerbosity},y,v))switch(c.type){case"delta":Ze.push(c.text),ce||(yield{type:"delta",turnId:r,text:c.text});break;case"tool_call_delta":ce=!0,Ct(et,c);break;case"reasoning_delta":V.push(c.text);break;case"reasoning_block_complete":c.signature&&N.push({thinking:V.join(""),signature:c.signature}),V.length=0;break;case"usage":P={prompt:c.promptTokens,completion:c.completionTokens,reasoning:c.reasoningTokens,cacheRead:c.cacheReadTokens,cacheCreation:c.cacheCreationTokens};break;case"response_id":i.lastResponseId=c.id;break;case"annotations":yield{type:"annotations",turnId:r,annotations:c.annotations};break;case"builtin_tool_status":yield{type:"heartbeat",turnId:r,message:`${c.toolType}: ${c.event}`};break;case"done":tt=c.finishReason;break}if(ce||g?.invoke("turn.after_inference",{...h,model:i.currentModel}).catch(()=>{}),e.postSamplingHooks&&e.postSamplingHooks.length>0){let c=i.currentModel;for(let p of e.postSamplingHooks)try{p({messages:[...w],model:c,sessionId:a})}catch{}}}catch(c){if(c instanceof oe&&e.fallbackModel){n.info(`model fallback triggered: ${c.originalModel} \u2192 ${c.fallbackModel}`),yield{type:"recovery",turnId:r,action:"model_fallback",detail:`${c.originalModel} \u2192 ${c.fallbackModel}`},i={...i,currentModel:c.fallbackModel,consecutive529Errors:0,consecutiveApiRetries:0,transition:void 0};continue}let p=c instanceof Error?c.message:String(c),m=typeof c?.status=="number"?c.status:void 0;if(!m&&p&&(p.includes("ECONNRESET")||p.includes("EPIPE"))){let R=(i.consecutiveApiRetries??0)+1;if(R>re){n.info(`stale connection retry limit reached (${re}), aborting`),yield{type:"error",turnId:r,error:p,code:"RETRIES_EXHAUSTED",usage:i.totalUsage};return}n.info(`stale connection (${p.includes("ECONNRESET")?"ECONNRESET":"EPIPE"}): retrying`),yield{type:"recovery",turnId:r,action:"stale_connection_retry",detail:p.slice(0,80)},i={...i,consecutiveApiRetries:R,transition:void 0};continue}let f=Do({status:m,message:p});if(f!==null){n.info(`max_tokens overflow: adjusting to ${f}`),M.currentMaxOutputTokens=f,i={...i,maxOutputTokensOverride:f,transition:void 0};continue}if(Fe(m)){if(i.consecutive529Errors++,i.consecutive529Errors>=Mt&&e.fallbackModel&&i.currentModel!==e.fallbackModel){n.info(`529 \xD7 ${i.consecutive529Errors}: triggering fallback to ${e.fallbackModel}`),yield{type:"recovery",turnId:r,action:"model_fallback",detail:`529 \xD7 ${i.consecutive529Errors}`},i={...i,currentModel:e.fallbackModel,consecutive529Errors:0,transition:void 0};continue}if(Be()){let R=ge(i.consecutive529Errors);n.info(`persistent retry: waiting ${R}ms (attempt ${i.consecutive529Errors})`);let T=R;for(;T>0;){if(v?.aborted){yield{type:"error",turnId:r,error:"Aborted during retry wait",code:"ABORTED",usage:i.totalUsage};return}yield{type:"heartbeat",turnId:r,message:`Retrying in ${Math.ceil(T/1e3)}s (${m})`};let E=Math.min(T,Et);await new Promise(Te=>setTimeout(Te,E)),T-=E}i={...i,transition:void 0};continue}if(Ne(b)){let T=Uo({status:m,message:p})??ge(i.consecutive529Errors);n.info(`transient ${m}: retry in ${T}ms`),yield{type:"recovery",turnId:r,action:"retry",detail:`${m} retry in ${T}ms`},await new Promise(E=>setTimeout(E,T)),i={...i,transition:void 0};continue}n.info(`background source ${b}: not retrying ${m}`)}C={status:m,message:p}}if(C&&g?.invoke("turn.after_inference",{...h,model:i.currentModel,response:{error:C.message}}).catch(()=>{}),C)if(Wt(C))ue=!0,n.info(`withheld prompt_too_long error (status=${C.status})`);else if(Kt(C))ue=!0,n.info(`withheld media_size error (status=${C.status})`);else{let c=$e({status:C.status??500,message:C.message},M,L);if(c.action==="reactive_compact"&&q(F)&&(F.attemptedThisTurn=!0,M.hasAttemptedReactiveCompact=!0,yield{type:"recovery",turnId:r,action:"reactive_compact",detail:`API ${C.status??500}: ${C.message}`}),c.action==="retry"){let m=(i.consecutiveApiRetries??0)+1;if(m>re){n.info(`API retry limit reached (${re}), aborting`);let f=H(C.status,C.message);yield{type:"error",turnId:r,error:C.message,code:f,usage:i.totalUsage};return}yield{type:"recovery",turnId:r,action:"retry",detail:c.reason},i={...i,consecutiveApiRetries:m,transition:void 0};continue}let p=H(C.status,C.message);g?.invoke("stop.failure",{sessionId:a,reason:p,error:C.message}).catch(()=>{}),yield{type:"error",turnId:r,error:C.message,code:p,usage:i.totalUsage};return}P&&(i.totalUsage.prompt+=P.prompt,i.totalUsage.completion+=P.completion,P.reasoning&&(i.totalUsage.reasoning=(i.totalUsage.reasoning??0)+P.reasoning),P.cacheRead&&(i.totalUsage.cacheRead=(i.totalUsage.cacheRead??0)+P.cacheRead),P.cacheCreation&&(i.totalUsage.cacheCreation=(i.totalUsage.cacheCreation??0)+P.cacheCreation)),P?.prompt&&(M.promptTokens=P.prompt);let nt=Ze.join("");nt&&(i.finalText=nt);let B=[...et.values()].map(c=>({id:c.id||`tc_${r}_${X}_${Math.random().toString(36).slice(2,8)}`,type:"function",function:{name:c.name,arguments:c.arguments}}));if(B.length===0&&!ce){if(ue&&C&&Wt(C)){if(i.transition?.reason!=="collapse_drain_retry"){let m=Ee(w,ye);if(m.committed>0){n.info(`collapse drain: committed ${m.committed} stages`),yield{type:"recovery",turnId:r,action:"collapse_drain",detail:`${m.committed} stages committed`},i={...i,messages:m.messages,transition:{reason:"collapse_drain_retry",committed:m.committed}};continue}}if(q(F)){F.attemptedThisTurn=!0,M.hasAttemptedReactiveCompact=!0,n.info("withheld 413: reactive compact attempt"),yield{type:"recovery",turnId:r,action:"reactive_compact",detail:"withheld prompt_too_long"},i={...i,hasAttemptedReactiveCompact:!0,transition:{reason:"reactive_compact_retry"}};continue}n.info("withheld 413: recovery exhausted, surfacing error"),g?.invoke("stop.failure",{sessionId:a,reason:"prompt_too_long",error:C.message}).catch(()=>{}),yield{type:"error",turnId:r,error:C.message,code:"PROMPT_TOO_LONG",usage:i.totalUsage};return}if(ue&&C&&Kt(C)){if(q(F)){F.attemptedThisTurn=!0,M.hasAttemptedReactiveCompact=!0,n.info("withheld media error: reactive compact strip-retry"),yield{type:"recovery",turnId:r,action:"reactive_compact",detail:"media error strip-retry"},i={...i,hasAttemptedReactiveCompact:!0,transition:{reason:"reactive_compact_retry"}};continue}n.info("withheld media error: recovery exhausted"),g?.invoke("stop.failure",{sessionId:a,reason:"media_error",error:C.message}).catch(()=>{}),yield{type:"error",turnId:r,error:C.message,code:"IMAGE_ERROR",usage:i.totalUsage};return}if(Bo(tt)){M.consecutiveTruncations+=1;let m=e.modelMaxOutputTokens??vt,f=je(M,L,m);if(f.shouldEscalate&&Qe===void 0){M.currentMaxOutputTokens=f.newMax,n.info(`max_output_tokens escalate: ${f.newMax} tokens`),yield{type:"recovery",turnId:r,action:"output_escalation",detail:`${f.newMax} tokens`},i={...i,maxOutputTokensOverride:At,transition:{reason:"max_output_tokens_escalate"}};continue}if(K<St){let R={role:"user",content:"Output token limit hit. Resume directly \u2014 no apology, no recap of what you were doing. Pick up mid-thought if that is where the cut happened. Break remaining work into smaller pieces."};n.info(`max_output_tokens recovery #${K+1}`),yield{type:"recovery",turnId:r,action:"max_output_tokens_recovery",detail:`attempt ${K+1}`},i={...i,messages:[...w,R],maxOutputTokensRecoveryCount:K+1,maxOutputTokensOverride:void 0,transition:{reason:"max_output_tokens_recovery",attempt:K+1}};continue}n.info("max_output_tokens recovery exhausted, completing with partial content")}else M.consecutiveTruncations=0;if(O=pe(O,{replayMessages:A,lastStopReason:"completed"}),g){let m=await g.invoke("stop",{sessionId:a,reason:"completed"});if(m.action==="prevent"){n.info(`stop hook prevented continuation: ${m.reason??"no reason"}`),yield{type:"end",turnId:r,content:i.finalText,usage:i.totalUsage,model:i.currentModel};return}if(m.action==="abort"){let f=m.reason??"Stop hook requested continuation";n.info(`stop hook blocking: ${f}`);let R={role:"user",content:f},T={role:"assistant",content:i.finalText,...N.length>0&&{thinkingBlocks:[...N]}};i={...i,messages:[...A,T,R],stopHookActive:!0,transition:{reason:"stop_hook_blocking"}};continue}}if(e.tokenBudget&&e.tokenBudget>0&&i.budgetContinuationCount<5){let m=i.totalUsage.prompt+i.totalUsage.completion+(i.totalUsage.reasoning??0),f=m/e.tokenBudget*100,R=m-i.lastBudgetGlobalTokens,T=i.budgetContinuationCount>=wt&&R<He&&i.lastBudgetDeltaTokens<He;if(T&&n.info(`token budget early stop: diminishing returns at ${Math.round(f)}% (delta=${R})`),!T&&f<90){let E=i.budgetContinuationCount+1,Te={role:"user",content:Gt(f,m,e.tokenBudget)};n.info(`token budget continuation #${E}: ${Math.round(f)}% used`),yield{type:"recovery",turnId:r,action:"budget_continuation",detail:`${Math.round(f)}% used (#${E})`};let en={role:"assistant",content:i.finalText,...N.length>0&&{thinkingBlocks:[...N]}};i={...i,messages:[...A,en,Te],budgetContinuationCount:E,lastBudgetDeltaTokens:R,lastBudgetGlobalTokens:m,transition:{reason:"token_budget_continuation"}};continue}}if(U>0){let m={ok:!0,toolCallCount:U,distinctToolCount:W.size,multiStep:U>=2,hasSubAgent:!1,feedback:null,existingSkillName:null},f=de(m,{tools:[...W]});f&&(yield{type:"skill_instruction",turnId:r,instruction:f})}let p=i.finalText||se(A,n);yield{type:"end",turnId:r,content:p,usage:i.totalUsage,model:i.currentModel};return}for(let c of B){let p=c.function.arguments,m=ie.find(f=>f.function.name===c.function.name);if(m?.backfillObservableInput)try{let f=JSON.parse(c.function.arguments),R={...f};m.backfillObservableInput(R),Object.keys(R).some(E=>!(E in f))&&(p=JSON.stringify(R))}catch{}yield{type:"tool_call",turnId:r,callId:c.id,name:c.function.name,arguments:p}}let Jt=N.length===0&&V.length>0?V.join(""):void 0;A.push(Ce(B,i.finalText||void 0,N.length>0?N:void 0,Jt)),O=Pe(O,{replayMessages:A,pendingToolCallIds:B.map(c=>c.id),completedToolCallIds:O.completedToolCallIds,lastStopReason:"tool_calls"});let ot=[];try{let c=new fe({toolInvoker:o,hooks:g,sessionId:a,turnId:r,log:n,signal:v,maxConcurrentTools:e?.maxConcurrentTools});for(let p of B)c.addTool(p);for await(let p of c.getRemainingResults()){p.blocked&&(yield{type:"tool_blocked",turnId:r,callId:p.callId,name:p.toolName,reason:p.blockReason??"blocked"}),A.push(p.message),ot.push(p.callId),W.add(p.toolName),U++;let m=typeof p.message?.content=="string"?p.message.content:"",f=p.ok&&m?m.slice(0,2e3):void 0;if(yield{type:"tool_result",turnId:r,callId:p.callId,name:p.toolName,ok:p.ok,error:p.error,outputPreview:f},p.ok){let R=B.find(T=>T.id===p.callId);if(R){if(p.toolName==="plan_mode")try{let T=JSON.parse(R.function.arguments);T.action==="exit"&&typeof T.plan=="string"&&T.plan.length>0&&(yield{type:"plan_update",turnId:r,slug:"approved-plan",content:T.plan})}catch{}if(Oo.has(p.toolName))try{let T=JSON.parse(R.function.arguments),E=typeof T.file_path=="string"?T.file_path:typeof T.filePath=="string"?T.filePath:typeof T.path=="string"?T.path:void 0;E&&(yield{type:"artifact",turnId:r,artifactId:`artifact-${p.callId}`,artifactType:Po(E),title:E.split(/[\\/]/).pop()||E,filePath:E,language:No(E)})}catch{}}}}}catch(c){let p=c instanceof Error?c.message:String(c);yield{type:"error",turnId:r,error:p,code:"TOOL_EXECUTION_ERROR",usage:i.totalUsage};return}if(O=pe(O,{replayMessages:A,completedToolCallIds:[...O.completedToolCallIds,...ot],lastStopReason:"tool_calls"}),e.generateToolUseSummary&&B.length>0){let c=B.map(p=>({name:p.function.name,arguments:p.function.arguments}));ae=e.generateToolUseSummary(c).catch(()=>null)}let rt=A.slice(-B.length),Zt=rt.length>0&&rt.every(c=>{let p=c?.content;return typeof p!="string"?!1:p.startsWith("Error: ")}),Q=i.consecutiveFailedRounds;if(Zt){if(Q+=1,Q>=kt){let c=i.finalText||se(A,n);n.info(`early exit: ${Q} consecutive failed rounds, returning ${i.finalText?"partial":"fallback"} response`),yield{type:"end",turnId:r,content:c,usage:i.totalUsage,model:i.currentModel};return}}else Q=0;let he=X+1;if(x>0&&he>x){if(n.info(`max turns reached (${x}), completing`),g){let p=await g.invoke("stop",{sessionId:a,reason:"max_turns"});if(p.action==="abort"){let m=p.reason??"Stop hook requested continuation after max_turns",f={role:"assistant",content:i.finalText,...N.length>0&&{thinkingBlocks:[...N]}};i={...i,messages:[...A,f,{role:"user",content:m}],stopHookActive:!0,transition:{reason:"stop_hook_blocking"}};continue}}let c=i.finalText||se(A,n);yield{type:"end",turnId:r,content:c,usage:i.totalUsage,model:i.currentModel};return}if(he>S){if(n.info(`tool loop budget exhausted (${S} rounds), returning`),U>0){let p={ok:!0,toolCallCount:U,distinctToolCount:W.size,multiStep:U>=2,hasSubAgent:!1,feedback:null,existingSkillName:null},m=de(p,{tools:[...W]});m&&(yield{type:"skill_instruction",turnId:r,instruction:m})}let c=i.finalText||se(A,n);yield{type:"end",turnId:r,content:c,usage:i.totalUsage,model:i.currentModel};return}i={messages:A,maxOutputTokensRecoveryCount:0,hasAttemptedReactiveCompact:!1,maxOutputTokensOverride:void 0,turnCount:he,transition:{reason:"next_turn"},guardState:M,reactiveCompactState:F,toolLoopState:O,consecutiveFailedRounds:Q,finalText:i.finalText,totalUsage:i.totalUsage,collapseStore:ye,currentModel:i.currentModel,consecutive529Errors:0,consecutiveApiRetries:0,stopHookActive:i.stopHookActive,lastResponseId:i.lastResponseId,snipRemovedIds:i.snipRemovedIds,contentReplacementState:i.contentReplacementState,budgetContinuationCount:0,lastBudgetDeltaTokens:0,lastBudgetGlobalTokens:0}}}function se(e,t){let o=[];for(let n=e.length-1;n>=0;n--){let r=e[n];if(r.role==="tool"&&typeof r.content=="string")o.unshift(r.content.slice(0,500));else if(r.role==="assistant"){if(typeof r.content=="string"&&r.content.trim())return t.info("synthesizeFallbackContent: found assistant text, using it"),r.content;break}else break}return o.length>0?(t.info(`synthesizeFallbackContent: synthesized from ${o.length} tool result(s)`),o.join(`
17
17
 
18
- `)):""}async function*jo(e,t,o,n,r,a,l,s){let d=[],y;s.debug(`single LLM round, messages: ${o.length}`);for await(let u of l.stream({model:t,messages:o,temperature:r},n,a))switch(u.type){case"delta":d.push(u.text),yield{type:"delta",turnId:e,text:u.text};break;case"usage":y={prompt:u.promptTokens,completion:u.completionTokens,reasoning:u.reasoningTokens,cacheRead:u.cacheReadTokens,cacheCreation:u.cacheCreationTokens};break;case"done":break}yield{type:"end",turnId:e,content:d.join(""),usage:y??{prompt:0,completion:0},model:t}}var zo={coding:[/(?:bug|error|fix|debug|报错|修复|编译|compile|build|lint)/i,/(?:implement|refactor|重构|实现|代码|code|function|method|class)/i,/(?:test|测试|vitest|jest|断言|assert)/i,/(?:type(?:script)?|接口|interface|generic|泛型)/i,/(?:import|export|module|依赖|package|npm|pnpm)/i,/(?:git|commit|branch|merge|rebase|PR|MR)/i],config:[/(?:deploy|部署|运维|docker|container|kubernetes|k8s)/i,/(?:port|端口|config|配置|env|环境变量|.env)/i,/(?:server|service|daemon|进程|systemd|nginx|redis)/i,/(?:版本|version|upgrade|migrate|迁移)/i,/(?:domain|域名|ssl|cert|证书|DNS)/i],conversation:[/(?:你好|hi|hello|hey|请问|问一下)/i,/(?:我(?:喜欢|偏好|习惯|想)|prefer|I (?:like|want|need))/i,/(?:帮我|help me|能不能|可以吗|would you)/i,/(?:style|风格|format|格式|命名|naming)/i],learning:[/(?:best practice|最佳实践|pattern|模式|惯例|convention)/i,/(?:怎么做|how to|how do|what's the|推荐|recommend)/i,/(?:为什么|why|原因|reason|explain|解释)/i,/(?:lesson|经验|教训|gotcha|pitfall|坑)/i],decision:[/(?:should|应该|选择|choose|decision|决定|trade-?off|权衡)/i,/(?:vs|versus|对比|compare|区别|difference)/i,/(?:architecture|架构|方案|approach|strategy)/i,/(?:pros|cons|优缺点|利弊|好处|坏处)/i],general:[]},Go={coding:{preferred:["lesson","pattern","fact"],deprioritized:["preference"]},config:{preferred:["fact","decision","lesson"],deprioritized:["preference","skill-learning"]},conversation:{preferred:["preference","fact"],deprioritized:["pattern","skill-learning"]},learning:{preferred:["lesson","pattern","skill-learning"],deprioritized:["preference"]},decision:{preferred:["decision","fact","lesson"],deprioritized:["skill-learning","preference"]},general:{preferred:[],deprioritized:[]}};function Yt(e){if(!e||e.length<5)return{scenario:"general",preferred:[],deprioritized:[],confidence:0};let t=[];for(let[r,a]of Object.entries(zo)){if(r==="general")continue;let l=a.filter(s=>s.test(e)).length;if(l>0){let s=Math.min(1,l/2);t.push({scenario:r,score:s})}}if(t.length===0)return{scenario:"general",preferred:[],deprioritized:[],confidence:0};t.sort((r,a)=>a.score-r.score);let o=t[0];if(o.score<.5)return{scenario:"general",preferred:[],deprioritized:[],confidence:o.score};let n=Go[o.scenario];return{scenario:o.scenario,preferred:n.preferred,deprioritized:n.deprioritized,confidence:o.score}}var Qt=class{transport;apiKey;toolInvoker;log;hooks;maxRounds;constructor(t){this.transport=t.llmTransport,this.apiKey=t.apiKey,this.toolInvoker=t.toolInvoker,this.log=t.log,this.hooks=t.hooks,this.maxRounds=Math.min(t.maxRounds??25,100)}async*run(t,o){let{turnId:n,messages:r,tools:a,systemPrompt:l,config:s}=t,d={sessionId:t.sessionId,turnId:n};yield{type:"start",turnId:n},this.hooks?.invoke("turn.submitted",{...d,prompt:r[r.length-1]?.content??void 0}).catch(()=>{});let y=Oe(r),u=[];if(l&&u.push({role:"system",content:l}),u.push(...y),this.hooks){let T=y.filter(b=>b.role==="user").pop(),x=typeof T?.content=="string"?T.content.slice(0,500):void 0;if(x)try{let b=Yt(x),_=await this.hooks.invoke("memory.before_recall",{sessionId:t.sessionId,turnId:n,query:x,preferredCategories:b.preferred.length>0?b.preferred:void 0,deprioritizedCategories:b.deprioritized.length>0?b.deprioritized:void 0}),I=_?.context?.recalledMemories;if(I&&I.length>0){let k=I.map(S=>`- ${S.text}`).join(`
18
+ `)):""}async function*jo(e,t,o,n,r,a,l,s){let d=[],y;s.debug(`single LLM round, messages: ${o.length}`);for await(let u of l.stream({model:t,messages:o,temperature:r},n,a))switch(u.type){case"delta":d.push(u.text),yield{type:"delta",turnId:e,text:u.text};break;case"usage":y={prompt:u.promptTokens,completion:u.completionTokens,reasoning:u.reasoningTokens,cacheRead:u.cacheReadTokens,cacheCreation:u.cacheCreationTokens};break;case"done":break}yield{type:"end",turnId:e,content:d.join(""),usage:y??{prompt:0,completion:0},model:t}}var zo={coding:[/(?:bug|error|fix|debug|报错|修复|编译|compile|build|lint)/i,/(?:implement|refactor|重构|实现|代码|code|function|method|class)/i,/(?:test|测试|vitest|jest|断言|assert)/i,/(?:type(?:script)?|接口|interface|generic|泛型)/i,/(?:import|export|module|依赖|package|npm|pnpm)/i,/(?:git|commit|branch|merge|rebase|PR|MR)/i],config:[/(?:deploy|部署|运维|docker|container|kubernetes|k8s)/i,/(?:port|端口|config|配置|env|环境变量|.env)/i,/(?:server|service|daemon|进程|systemd|nginx|redis)/i,/(?:版本|version|upgrade|migrate|迁移)/i,/(?:domain|域名|ssl|cert|证书|DNS)/i],conversation:[/(?:你好|hi|hello|hey|请问|问一下)/i,/(?:我(?:喜欢|偏好|习惯|想)|prefer|I (?:like|want|need))/i,/(?:帮我|help me|能不能|可以吗|would you)/i,/(?:style|风格|format|格式|命名|naming)/i],learning:[/(?:best practice|最佳实践|pattern|模式|惯例|convention)/i,/(?:怎么做|how to|how do|what's the|推荐|recommend)/i,/(?:为什么|why|原因|reason|explain|解释)/i,/(?:lesson|经验|教训|gotcha|pitfall|坑)/i],decision:[/(?:should|应该|选择|choose|decision|决定|trade-?off|权衡)/i,/(?:vs|versus|对比|compare|区别|difference)/i,/(?:architecture|架构|方案|approach|strategy)/i,/(?:pros|cons|优缺点|利弊|好处|坏处)/i],general:[]},Go={coding:{preferred:["lesson","pattern","fact"],deprioritized:["preference"]},config:{preferred:["fact","decision","lesson"],deprioritized:["preference","skill-learning"]},conversation:{preferred:["preference","fact"],deprioritized:["pattern","skill-learning"]},learning:{preferred:["lesson","pattern","skill-learning"],deprioritized:["preference"]},decision:{preferred:["decision","fact","lesson"],deprioritized:["skill-learning","preference"]},general:{preferred:[],deprioritized:[]}};function Yt(e){if(!e||e.length<5)return{scenario:"general",preferred:[],deprioritized:[],confidence:0};let t=[];for(let[r,a]of Object.entries(zo)){if(r==="general")continue;let l=a.filter(s=>s.test(e)).length;if(l>0){let s=Math.min(1,l/2);t.push({scenario:r,score:s})}}if(t.length===0)return{scenario:"general",preferred:[],deprioritized:[],confidence:0};t.sort((r,a)=>a.score-r.score);let o=t[0];if(o.score<.5)return{scenario:"general",preferred:[],deprioritized:[],confidence:o.score};let n=Go[o.scenario];return{scenario:o.scenario,preferred:n.preferred,deprioritized:n.deprioritized,confidence:o.score}}var Qt=class{transport;apiKey;toolInvoker;log;hooks;maxRounds;constructor(t){this.transport=t.llmTransport,this.apiKey=t.apiKey,this.toolInvoker=t.toolInvoker,this.log=t.log,this.hooks=t.hooks,this.maxRounds=Math.min(t.maxRounds??25,100)}async*run(t,o){let{turnId:n,messages:r,tools:a,systemPrompt:l,config:s}=t,d={sessionId:t.sessionId,turnId:n};yield{type:"start",turnId:n},this.hooks?.invoke("turn.submitted",{...d,prompt:r[r.length-1]?.content??void 0}).catch(()=>{});let y=Oe(r),u=[];if(l&&u.push({role:"system",content:l}),u.push(...y),this.hooks){let h=y.filter(b=>b.role==="user").pop(),x=typeof h?.content=="string"?h.content.slice(0,500):void 0;if(x)try{let b=Yt(x),_=await this.hooks.invoke("memory.before_recall",{sessionId:t.sessionId,turnId:n,query:x,preferredCategories:b.preferred.length>0?b.preferred:void 0,deprioritizedCategories:b.deprioritized.length>0?b.deprioritized:void 0}),I=_?.context?.recalledMemories;if(I&&I.length>0){let k=I.map(S=>`- ${S.text}`).join(`
19
19
  `);u.splice(l?1:0,0,{role:"system",content:`[Recalled from long-term memory]
20
- ${k}`})}this.hooks.invoke("memory.after_recall",{sessionId:t.sessionId,turnId:n,blockCount:_?.context?.recalledMemories?.length??0}).catch(()=>{})}catch{}}let g=s?.model??"",v=Math.min(s?.maxRounds??this.maxRounds,100);try{let T=s?.summaryModel?async _=>{try{let I=_.map(L=>`${L.name}(${L.arguments.slice(0,200)})`).join(", "),k=this.transport.stream({model:s.summaryModel,messages:[{role:"system",content:"Summarize the tool usage in ~30 chars, git-commit-subject style. Reply with ONLY the summary, nothing else."},{role:"user",content:I}],tools:[],maxTokens:60},s.apiKey??this.apiKey),S="";for await(let L of k)L.type==="delta"&&(S+=L.text);return S.trim()||null}catch{return null}}:void 0,x={turnId:n,sessionId:t.sessionId,messages:u,tools:a,model:g,apiKey:s?.apiKey??this.apiKey,temperature:s?.temperature,maxRounds:v,contextWindowTokens:s?.contextWindowTokens,maxOutputTokens:s?.maxOutputTokens,modelMaxOutputTokens:s?.modelMaxOutputTokens,toolChoice:s?.toolChoice,parentDepth:s?.parentDepth,hooks:this.hooks,fallbackModel:s?.fallbackModel,maxTurns:s?.maxTurns,tokenBudget:s?.tokenBudget,maxConcurrentTools:s?.maxConcurrentTools,streamRequired:s?.streamRequired,reasoning:s?.reasoning,promptCacheKey:s?.promptCacheKey,promptCacheRetention:s?.promptCacheRetention,serviceTier:s?.serviceTier,openaiBuiltinTools:s?.openaiBuiltinTools,maxToolCalls:s?.maxToolCalls,parallelToolCalls:s?.parallelToolCalls,textVerbosity:s?.textVerbosity,generateToolUseSummary:T,signal:o},b;for await(let _ of Xt(x,this.transport,this.toolInvoker,this.log))b=_,yield _;b?.type==="end"?this.hooks?.invoke("turn.completed",{...d}).catch(()=>{}):b?.type==="error"&&this.hooks?.invoke("turn.failed",{...d,code:b.code,error:b.error}).catch(()=>{})}catch(T){if(o?.aborted)this.hooks?.invoke("turn.failed",{...d,code:"ABORTED",error:"Turn aborted"}).catch(()=>{}),yield{type:"error",turnId:n,error:"Turn aborted",code:"ABORTED"};else{let x=T instanceof Error?T.message:String(T),b=typeof T?.status=="number"?T.status:void 0,_=H(b,x);this.log.error(`turn ${n} error [${_}, retryable=${ke(_)}]: ${x}`),this.hooks?.invoke("turn.failed",{...d,code:_,error:x}).catch(()=>{}),yield{type:"error",turnId:n,error:x,code:_}}}}};export{Qt as Agent};
20
+ ${k}`})}this.hooks.invoke("memory.after_recall",{sessionId:t.sessionId,turnId:n,blockCount:_?.context?.recalledMemories?.length??0}).catch(()=>{})}catch{}}let g=s?.model??"",v=Math.min(s?.maxRounds??this.maxRounds,100);try{let h=s?.summaryModel?async _=>{try{let I=_.map(L=>`${L.name}(${L.arguments.slice(0,200)})`).join(", "),k=this.transport.stream({model:s.summaryModel,messages:[{role:"system",content:"Summarize the tool usage in ~30 chars, git-commit-subject style. Reply with ONLY the summary, nothing else."},{role:"user",content:I}],tools:[],maxTokens:60},s.apiKey??this.apiKey),S="";for await(let L of k)L.type==="delta"&&(S+=L.text);return S.trim()||null}catch{return null}}:void 0,x={turnId:n,sessionId:t.sessionId,messages:u,tools:a,model:g,apiKey:s?.apiKey??this.apiKey,temperature:s?.temperature,maxRounds:v,contextWindowTokens:s?.contextWindowTokens,maxOutputTokens:s?.maxOutputTokens,modelMaxOutputTokens:s?.modelMaxOutputTokens,toolChoice:s?.toolChoice,parentDepth:s?.parentDepth,hooks:this.hooks,fallbackModel:s?.fallbackModel,maxTurns:s?.maxTurns,tokenBudget:s?.tokenBudget,maxConcurrentTools:s?.maxConcurrentTools,streamRequired:s?.streamRequired,reasoning:s?.reasoning,promptCacheKey:s?.promptCacheKey,promptCacheRetention:s?.promptCacheRetention,serviceTier:s?.serviceTier,openaiBuiltinTools:s?.openaiBuiltinTools,maxToolCalls:s?.maxToolCalls,parallelToolCalls:s?.parallelToolCalls,textVerbosity:s?.textVerbosity,generateToolUseSummary:h,signal:o},b;for await(let _ of Xt(x,this.transport,this.toolInvoker,this.log))b=_,yield _;b?.type==="end"?this.hooks?.invoke("turn.completed",{...d}).catch(()=>{}):b?.type==="error"&&this.hooks?.invoke("turn.failed",{...d,code:b.code,error:b.error}).catch(()=>{})}catch(h){if(o?.aborted)this.hooks?.invoke("turn.failed",{...d,code:"ABORTED",error:"Turn aborted"}).catch(()=>{}),yield{type:"error",turnId:n,error:"Turn aborted",code:"ABORTED"};else{let x=h instanceof Error?h.message:String(h),b=typeof h?.status=="number"?h.status:void 0,_=H(b,x);this.log.error(`turn ${n} error [${_}, retryable=${ke(_)}]: ${x}`),this.hooks?.invoke("turn.failed",{...d,code:_,error:x}).catch(()=>{}),yield{type:"error",turnId:n,error:x,code:_}}}}};export{Qt as Agent};