qlogicagent 2.10.11 → 2.10.13

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 (66) hide show
  1. package/dist/agent.js +14 -14
  2. package/dist/cli.js +344 -363
  3. package/dist/index.js +343 -362
  4. package/dist/orchestration.js +6 -6
  5. package/dist/protocol.js +1 -1
  6. package/dist/types/agent/agent.d.ts +1 -1
  7. package/dist/types/agent/tool-loop.d.ts +1 -1
  8. package/dist/types/agent/types.d.ts +1 -1
  9. package/dist/types/cli/handlers/memory-handler.d.ts +1 -0
  10. package/dist/types/cli/handlers/turn-handler.d.ts +1 -1
  11. package/dist/types/cli/tool-bootstrap.d.ts +3 -3
  12. package/dist/types/index.d.ts +2 -2
  13. package/dist/types/llm/index.d.ts +1 -1
  14. package/dist/types/orchestration/tool-cascade.d.ts +2 -2
  15. package/dist/types/protocol/wire/gateway-rpc.d.ts +14 -0
  16. package/dist/types/runtime/execution/dream-agent.d.ts +1 -1
  17. package/dist/types/runtime/execution/forked-agent.d.ts +1 -1
  18. package/dist/types/runtime/hooks/context-compression.d.ts +1 -1
  19. package/dist/types/runtime/session/session-persistence.d.ts +1 -1
  20. package/package.json +3 -2
  21. package/dist/types/provider-core/adapters/aliyun-oss-file-upload-adapter.d.ts +0 -44
  22. package/dist/types/provider-core/adapters/gemini-file-upload-adapter.d.ts +0 -26
  23. package/dist/types/provider-core/adapters/hub-oss-file-upload-adapter.d.ts +0 -29
  24. package/dist/types/provider-core/adapters/index.d.ts +0 -10
  25. package/dist/types/provider-core/adapters/openai-file-upload-adapter.d.ts +0 -38
  26. package/dist/types/provider-core/adapters/volcengine-file-upload-adapter.d.ts +0 -24
  27. package/dist/types/provider-core/builtin-providers.d.ts +0 -8
  28. package/dist/types/provider-core/constants.d.ts +0 -1
  29. package/dist/types/provider-core/credentials.d.ts +0 -1
  30. package/dist/types/provider-core/debug-transport.d.ts +0 -12
  31. package/dist/types/provider-core/errors.d.ts +0 -11
  32. package/dist/types/provider-core/events.d.ts +0 -48
  33. package/dist/types/provider-core/file-upload-service.d.ts +0 -68
  34. package/dist/types/provider-core/gemini-schema-utils.d.ts +0 -17
  35. package/dist/types/provider-core/index.d.ts +0 -37
  36. package/dist/types/provider-core/llm-client.d.ts +0 -43
  37. package/dist/types/provider-core/media-client.d.ts +0 -42
  38. package/dist/types/provider-core/media-transport.d.ts +0 -176
  39. package/dist/types/provider-core/media.d.ts +0 -2
  40. package/dist/types/provider-core/model-detection.d.ts +0 -22
  41. package/dist/types/provider-core/paths.d.ts +0 -2
  42. package/dist/types/provider-core/provider-def.d.ts +0 -220
  43. package/dist/types/provider-core/provider-registry.d.ts +0 -50
  44. package/dist/types/provider-core/provider-tool-api.d.ts +0 -44
  45. package/dist/types/provider-core/provider-variant-resolver.d.ts +0 -35
  46. package/dist/types/provider-core/retry.d.ts +0 -37
  47. package/dist/types/provider-core/transport.d.ts +0 -281
  48. package/dist/types/provider-core/transports/anthropic-messages.d.ts +0 -65
  49. package/dist/types/provider-core/transports/gemini-cache-api.d.ts +0 -86
  50. package/dist/types/provider-core/transports/gemini-file-api.d.ts +0 -90
  51. package/dist/types/provider-core/transports/gemini-generatecontent.d.ts +0 -56
  52. package/dist/types/provider-core/transports/gemini-lyria-realtime.d.ts +0 -117
  53. package/dist/types/provider-core/transports/gemini-media.d.ts +0 -53
  54. package/dist/types/provider-core/transports/media-resolve.d.ts +0 -50
  55. package/dist/types/provider-core/transports/minimax-media.d.ts +0 -56
  56. package/dist/types/provider-core/transports/openai-chat.d.ts +0 -81
  57. package/dist/types/provider-core/transports/openai-media.d.ts +0 -24
  58. package/dist/types/provider-core/transports/openai-responses.d.ts +0 -63
  59. package/dist/types/provider-core/transports/qwen-media.d.ts +0 -59
  60. package/dist/types/provider-core/transports/realtime-transport.d.ts +0 -183
  61. package/dist/types/provider-core/transports/volcengine-grounding.d.ts +0 -58
  62. package/dist/types/provider-core/transports/volcengine-media.d.ts +0 -94
  63. package/dist/types/provider-core/transports/volcengine-responses.d.ts +0 -64
  64. package/dist/types/provider-core/transports/zhipu-media.d.ts +0 -82
  65. package/dist/types/provider-core/transports/zhipu-tool-api.d.ts +0 -35
  66. package/dist/types/provider-core/wire-types.d.ts +0 -51
@@ -1,4 +1,4 @@
1
- function Ae(e,t,n,o){return{role:"assistant",content:t||null,tool_calls:e,...n&&n.length>0?{thinkingBlocks:n}:{},...o?{reasoning_content:o}:{}}}function Me(e,t){let n=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:n,...!t.ok&&{is_error:!0},...t.toolReferences?.length?{toolReferences:t.toolReferences}:{},...t.imageUrls?.length?{imageUrls:t.imageUrls}:{}}}var Ee=/\b(?:daily|weekly|monthly)(?:\/(?:daily|weekly|monthly))* (?:usage )?limit(?:s)?(?: (?:exhausted|reached|exceeded))?\b/i,y={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]},Ie=/^(?:error[:\s-]+)?billing(?:\s+error)?(?:[:\s-]+|$)|^(?:error[:\s-]+)?(?:credit balance|insufficient credits?|payment required|http\s*402\b)/i,ve=/["']?(?:status|code)["']?\s*[:=]\s*402\b|\bhttp\s*402\b|\berror(?:\s+code)?\s*[:=]?\s*402\b|^\s*402\s+payment/i,Le=512,Oe=/^(?:http\s*)?(\d{3})(?:\s+([\s\S]+))?$/i;var we=new Set([500,502,503,504,521,522,523,524,529]),Pe=["insufficient credits","insufficient quota","credit balance","insufficient balance","plans & billing","add more credits","top up"],Ne=["upgrade your plan","upgrade plan","current plan","subscription"],Fe=["daily","weekly","monthly"],De=["try again","retry","temporary","cooldown"],Be=["usage limit","rate limit","organization usage"],Ue=["organization","workspace"],je=["billing period","exceeded","reached","exhausted"],Ge=/["']?(?: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,$e=/^(?:error[:\s-]+)?(?:(?:http\s*)?402(?:\s+payment required)?|payment required)(?:[:\s-]+|$)/i;function h(e,t){if(!e)return!1;let n=e.toLowerCase();return t.some(o=>o instanceof RegExp?o.test(n):n.includes(o))}function He(e){return h(e,y.format)}function W(e){return h(e,y.rateLimit)}function ze(e){return h(e,y.timeout)}function qe(e){return Ee.test(e)}function E(e){let t=e.toLowerCase();return t?e.length>Le?ve.test(t):h(t,y.billing)?!0:Ie.test(e)?t.includes("upgrade")||t.includes("credits")||t.includes("payment")||t.includes("plan"):!1:!1}function V(e){return h(e,y.authPermanent)}function Xe(e){return h(e,y.auth)}function J(e){return h(e,y.overloaded)}function T(e,t){return t.some(n=>e.includes(n))}function Ke(e){return T(e,Pe)||T(e,Ne)&&e.includes("limit")||e.includes("billing hard limit")||e.includes("hard limit reached")||e.includes("maximum allowed")&&e.includes("limit")}function Ye(e){let t=T(e,Fe),n=e.includes("spend limit")||e.includes("spending limit"),o=T(e,Ue);return T(e,De)&&T(e,Be)||t&&(e.includes("usage limit")||n)||t&&e.includes("limit")&&e.includes("reset")||o&&e.includes("limit")&&(n||T(e,je))}function We(e){return e.trim().toLowerCase().replace($e,"").trim()}function Z(e){let t=We(e);return!t||Ke(t)?"billing":W(t)||Ye(t)?"rate_limit":"billing"}function Ve(e){return Ge.test(e)?Z(e):null}function Q(e){let t=e.match(Oe);if(!t)return null;let n=Number(t[1]);return Number.isFinite(n)?{code:n,rest:(t[2]??"").trim()}:null}function Je(e){if(!e)return!1;let t=e.toLowerCase();return t.includes('"type":"api_error"')&&t.includes("internal server error")}function Ze(e){let t=e.trim();if(!t)return!1;let n=Q(t);return n?we.has(n.code):!1}function ee(e,t){return typeof e!="number"||!Number.isFinite(e)?null:e===402?t?Z(t):"billing":e===429?"rate_limit":e===401||e===403?t&&V(t)?"auth_permanent":"auth":e===408?"timeout":e===503?t&&J(t)?"overloaded":"timeout":e===502||e===504?"timeout":e===529?"overloaded":e===400?t&&E(t)?"billing":"format":null}function Qe(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 et(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 te(e){if(et(e))return"session_expired";if(Qe(e))return"model_not_found";let t=Ve(e);return t||(qe(e)?E(e)?"billing":"rate_limit":W(e)?"rate_limit":J(e)?"overloaded":Ze(e)?Q(e.trim())?.code===529?"overloaded":"timeout":Je(e)?"timeout":He(e)?"format":E(e)?"billing":ze(e)?"timeout":V(e)?"auth_permanent":Xe(e)?"auth":null)}var tt={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"},nt=new Set(["RETRYABLE_TRANSIENT","RETRYABLE_DEGRADED","TOOL_EXECUTION_FAILED"]);function ot(e,t){let n=ee(e,t)??(t?te(t):null);return n?tt[n]:typeof e=="number"&&e>=400&&e<500?"NON_RETRYABLE_CONTENT":"RETRYABLE_TRANSIENT"}function rt(e){return nt.has(e)}function B(e){return typeof e.compressAsync=="function"}var ne=4,I=class{constructor(t){this.estimateTokens=t}estimateTokens;compress(t,n){let o=[],r=[];for(let c of t)c.role==="system"?o.push(c):r.push(c);let i=n;for(let c of o)i-=this.estimateTokens(c);let a;for(let c of r)if(c.role==="user"){a=c;break}if(a&&(i-=this.estimateTokens(a)),i<=0)return{messages:a?[...o,a]:o,droppedCount:r.length-(a?1:0),strategy:"sliding-window"};let s=[],l=0;for(let c=r.length-1;c>=0;c--){let d=r[c];if(d===a)continue;let p=this.estimateTokens(d);if(i-p<0&&l>=ne)break;if(i-p<0&&l<ne){s.unshift(d),l++;continue}i-=p,s.unshift(d),l++}let u=[...o];return a&&!s.includes(a)&&u.push(a),u.push(...s),{messages:u,droppedCount:r.length-(s.length+(a&&!s.includes(a)?1:0)),strategy:"sliding-window"}}},v=class{constructor(t,n){this.recentCount=t;this.summarize=n}recentCount;summarize;compress(t,n){let o=t.filter(l=>l.role==="system"),r=t.filter(l=>l.role!=="system");if(r.length<=this.recentCount)return{messages:t,droppedCount:0,strategy:"summarize-old"};let i=r.slice(0,r.length-this.recentCount),a=r.slice(r.length-this.recentCount),s=this.summarize(i);return{messages:[...o,{role:"system",content:`[Conversation summary]
1
+ import{cleanSchemaForGemini as vn}from"@xiaozhiclaw/provider-core/gemini-schema-utils";function Ae(e,t,n,o){return{role:"assistant",content:t||null,tool_calls:e,...n&&n.length>0?{thinkingBlocks:n}:{},...o?{reasoning_content:o}:{}}}function Me(e,t){let n=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:n,...!t.ok&&{is_error:!0},...t.toolReferences?.length?{toolReferences:t.toolReferences}:{},...t.imageUrls?.length?{imageUrls:t.imageUrls}:{}}}var Ee=/\b(?:daily|weekly|monthly)(?:\/(?:daily|weekly|monthly))* (?:usage )?limit(?:s)?(?: (?:exhausted|reached|exceeded))?\b/i,y={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]},Ie=/^(?:error[:\s-]+)?billing(?:\s+error)?(?:[:\s-]+|$)|^(?:error[:\s-]+)?(?:credit balance|insufficient credits?|payment required|http\s*402\b)/i,ve=/["']?(?:status|code)["']?\s*[:=]\s*402\b|\bhttp\s*402\b|\berror(?:\s+code)?\s*[:=]?\s*402\b|^\s*402\s+payment/i,Le=512,we=/^(?:http\s*)?(\d{3})(?:\s+([\s\S]+))?$/i;var Oe=new Set([500,502,503,504,521,522,523,524,529]),Pe=["insufficient credits","insufficient quota","credit balance","insufficient balance","plans & billing","add more credits","top up"],Ne=["upgrade your plan","upgrade plan","current plan","subscription"],Fe=["daily","weekly","monthly"],De=["try again","retry","temporary","cooldown"],Be=["usage limit","rate limit","organization usage"],Ue=["organization","workspace"],Ge=["billing period","exceeded","reached","exhausted"],je=/["']?(?: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,He=/^(?:error[:\s-]+)?(?:(?:http\s*)?402(?:\s+payment required)?|payment required)(?:[:\s-]+|$)/i;function h(e,t){if(!e)return!1;let n=e.toLowerCase();return t.some(o=>o instanceof RegExp?o.test(n):n.includes(o))}function $e(e){return h(e,y.format)}function W(e){return h(e,y.rateLimit)}function ze(e){return h(e,y.timeout)}function qe(e){return Ee.test(e)}function E(e){let t=e.toLowerCase();return t?e.length>Le?ve.test(t):h(t,y.billing)?!0:Ie.test(e)?t.includes("upgrade")||t.includes("credits")||t.includes("payment")||t.includes("plan"):!1:!1}function V(e){return h(e,y.authPermanent)}function Xe(e){return h(e,y.auth)}function J(e){return h(e,y.overloaded)}function T(e,t){return t.some(n=>e.includes(n))}function Ke(e){return T(e,Pe)||T(e,Ne)&&e.includes("limit")||e.includes("billing hard limit")||e.includes("hard limit reached")||e.includes("maximum allowed")&&e.includes("limit")}function Ye(e){let t=T(e,Fe),n=e.includes("spend limit")||e.includes("spending limit"),o=T(e,Ue);return T(e,De)&&T(e,Be)||t&&(e.includes("usage limit")||n)||t&&e.includes("limit")&&e.includes("reset")||o&&e.includes("limit")&&(n||T(e,Ge))}function We(e){return e.trim().toLowerCase().replace(He,"").trim()}function Z(e){let t=We(e);return!t||Ke(t)?"billing":W(t)||Ye(t)?"rate_limit":"billing"}function Ve(e){return je.test(e)?Z(e):null}function Q(e){let t=e.match(we);if(!t)return null;let n=Number(t[1]);return Number.isFinite(n)?{code:n,rest:(t[2]??"").trim()}:null}function Je(e){if(!e)return!1;let t=e.toLowerCase();return t.includes('"type":"api_error"')&&t.includes("internal server error")}function Ze(e){let t=e.trim();if(!t)return!1;let n=Q(t);return n?Oe.has(n.code):!1}function ee(e,t){return typeof e!="number"||!Number.isFinite(e)?null:e===402?t?Z(t):"billing":e===429?"rate_limit":e===401||e===403?t&&V(t)?"auth_permanent":"auth":e===408?"timeout":e===503?t&&J(t)?"overloaded":"timeout":e===502||e===504?"timeout":e===529?"overloaded":e===400?t&&E(t)?"billing":"format":null}function Qe(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 et(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 te(e){if(et(e))return"session_expired";if(Qe(e))return"model_not_found";let t=Ve(e);return t||(qe(e)?E(e)?"billing":"rate_limit":W(e)?"rate_limit":J(e)?"overloaded":Ze(e)?Q(e.trim())?.code===529?"overloaded":"timeout":Je(e)?"timeout":$e(e)?"format":E(e)?"billing":ze(e)?"timeout":V(e)?"auth_permanent":Xe(e)?"auth":null)}var tt={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"},nt=new Set(["RETRYABLE_TRANSIENT","RETRYABLE_DEGRADED","TOOL_EXECUTION_FAILED"]);function ot(e,t){let n=ee(e,t)??(t?te(t):null);return n?tt[n]:typeof e=="number"&&e>=400&&e<500?"NON_RETRYABLE_CONTENT":"RETRYABLE_TRANSIENT"}function rt(e){return nt.has(e)}function B(e){return typeof e.compressAsync=="function"}var ne=4,I=class{constructor(t){this.estimateTokens=t}estimateTokens;compress(t,n){let o=[],r=[];for(let c of t)c.role==="system"?o.push(c):r.push(c);let i=n;for(let c of o)i-=this.estimateTokens(c);let a;for(let c of r)if(c.role==="user"){a=c;break}if(a&&(i-=this.estimateTokens(a)),i<=0)return{messages:a?[...o,a]:o,droppedCount:r.length-(a?1:0),strategy:"sliding-window"};let s=[],l=0;for(let c=r.length-1;c>=0;c--){let d=r[c];if(d===a)continue;let p=this.estimateTokens(d);if(i-p<0&&l>=ne)break;if(i-p<0&&l<ne){s.unshift(d),l++;continue}i-=p,s.unshift(d),l++}let u=[...o];return a&&!s.includes(a)&&u.push(a),u.push(...s),{messages:u,droppedCount:r.length-(s.length+(a&&!s.includes(a)?1:0)),strategy:"sliding-window"}}},v=class{constructor(t,n){this.recentCount=t;this.summarize=n}recentCount;summarize;compress(t,n){let o=t.filter(l=>l.role==="system"),r=t.filter(l=>l.role!=="system");if(r.length<=this.recentCount)return{messages:t,droppedCount:0,strategy:"summarize-old"};let i=r.slice(0,r.length-this.recentCount),a=r.slice(r.length-this.recentCount),s=this.summarize(i);return{messages:[...o,{role:"system",content:`[Conversation summary]
2
2
  ${s}`},...a],droppedCount:i.length,strategy:"summarize-old"}}},L=class{constructor(t=8e3){this.maxToolResultChars=t}maxToolResultChars;compress(t,n){let o=0;return{messages:t.map(i=>i.role!=="tool"||typeof i.content!="string"||i.content.length<=this.maxToolResultChars?i:(o++,{...i,content:st(i.content,this.maxToolResultChars)})),droppedCount:o,strategy:"tool-result-trim"}}};function st(e,t){if(e.length<=t)return e;let n=e.slice(0,t);if(e.trimStart().startsWith("{")||e.trimStart().startsWith("[")){let i=Math.max(n.lastIndexOf("},"),n.lastIndexOf("],"),n.lastIndexOf(`}
3
3
  `),n.lastIndexOf(`]
4
4
  `));if(i>t*.5)return n.slice(0,i+1)+`
@@ -6,9 +6,9 @@ ${s}`},...a],droppedCount:i.length,strategy:"summarize-old"}}},L=class{construct
6
6
  `);return r>t*.7?n.slice(0,r)+`
7
7
  [...truncated: ${e.length-r} chars omitted]`:n+`
8
8
  [...truncated: ${e.length-t} chars omitted]`}function it(...e){return{compress(t,n){let o=t,r=0,i=[];for(let a of e){let s=a.compress(o,n);o=s.messages,r+=s.droppedCount,s.droppedCount>0&&i.push(s.strategy)}return{messages:o,droppedCount:r,strategy:i.length>0?i.join("+"):"none"}}}}function at(...e){return{compress(t,n){let o=t,r=0,i=[];for(let a of e){let s=a.compress(o,n);o=s.messages,r+=s.droppedCount,s.droppedCount>0&&i.push(s.strategy)}return{messages:o,droppedCount:r,strategy:i.length>0?i.join("+"):"none"}},async compressAsync(t,n){let o=t,r=0,i=[],a=0,s=!1,l=!1;for(let u of e){let c=B(u)?await u.compressAsync(o,n):u.compress(o,n);o=c.messages,r+=c.droppedCount,c.droppedCount>0&&i.push(c.strategy),c.metrics&&(a+=c.metrics.latencyMs,s=s||c.metrics.usedLlm,l=l||!!c.metrics.cacheInvalidated)}return{messages:o,droppedCount:r,strategy:i.length>0?i.join("+"):"none",metrics:a>0||s?{tokensBefore:0,tokensAfter:0,compressionRatio:0,latencyMs:a,usedLlm:s,cacheInvalidated:l}:void 0}}}}function U(e,t){let n=e.filter(a=>a.role==="user"),o=e.filter(a=>a.tool_calls!=null),r=e.filter(a=>a.role==="tool"),i=["You are a conversation summarizer. Produce a structured summary of the conversation history below.","","## Instructions","Analyze the conversation and produce a summary with these sections:","","### 1. Primary Objective","What is the user's main goal or task? State it in one sentence.","","### 2. Key Decisions Made","List the important decisions, choices, or conclusions reached during the conversation.","","### 3. Current Progress",`Describe the current state. ${o.length>0?`${o.length} tool calls and ${r.length} tool results were exchanged.`:"No tools were used."}`,"","### 4. Pending Tasks","List any tasks that are in-progress or planned but not yet completed.","","### 5. Important Context","MUST preserve verbatim: IP addresses, file paths, URLs, port numbers, credentials/tokens, specific numeric values, version numbers, proper nouns, identifiers, and any user-provided data points. These MUST appear exactly as stated in the original conversation.","","### 6. All User Messages",`List ALL ${n.length} user messages chronologically, each as 1-2 sentences capturing the core request. Include exact values, identifiers, keywords, or secrets the user mentioned or asked you to remember. Do NOT omit any user message \u2014 every user request must be traceable in this summary.`,"","### 7. Error & Recovery History","Summarize any errors encountered and how they were resolved.","","### 8. User Preferences Expressed","Note any stated preferences about style, approach, or constraints.","","### 9. Technical State","Note file paths, variable names, API endpoints, or configuration values that were discussed.","","### 10. Conversation Flow","Briefly describe the overall flow: what happened first, what changed, where we are now."];return t?.taskContext&&i.push("","## Additional Context",t.taskContext),i.push("","## Conversation to Summarize","",...e.map(a=>{let s=typeof a.content=="string"?a.content:JSON.stringify(a.content??""),l=a.role==="user"?s:s.length>2e3?s.slice(0,2e3)+"...":s;return`[${a.role}]: ${l}`}),"","## Output Format","Respond with a concise summary covering all 10 sections above. Use markdown headers.","Keep the total summary under 1000 words. Focus on actionable information and exact user requests."),i.join(`
9
- `)}var O=class{config;constructor(t){this.config={protectedHeadExchanges:t.protectedHeadExchanges,protectedTailMessages:t.protectedTailMessages,summarize:t.summarize,estimateTokens:t.estimateTokens??S,taskContext:t.taskContext}}compress(t,n){return{messages:t,droppedCount:0,strategy:"head-tail-protected"}}async compressAsync(t,n){let o=Date.now(),{system:r,nonSystem:i}=re(t),a=t.reduce((m,g)=>m+this.config.estimateTokens(g),0);if(a<=n)return{messages:t,droppedCount:0,strategy:"head-tail-protected"};let s=0,l=0;for(let m=0;m<i.length&&(i[m].role==="user"&&l++,!(l>this.config.protectedHeadExchanges));m++)s=m+1;let u=Math.max(this.config.protectedTailMessages,Math.floor(i.length*.4)),c=Math.max(s,i.length-u);if(c<=s)return{messages:t,droppedCount:0,strategy:"head-tail-protected"};let d=i.slice(0,s),p=i.slice(s,c),f=i.slice(c),C=U(p,{taskContext:this.config.taskContext}),k=await this.config.summarize(p,C),A={role:"system",content:`[Conversation summary \u2014 ${p.length} messages compressed]
9
+ `)}var w=class{config;constructor(t){this.config={protectedHeadExchanges:t.protectedHeadExchanges,protectedTailMessages:t.protectedTailMessages,summarize:t.summarize,estimateTokens:t.estimateTokens??S,taskContext:t.taskContext}}compress(t,n){return{messages:t,droppedCount:0,strategy:"head-tail-protected"}}async compressAsync(t,n){let o=Date.now(),{system:r,nonSystem:i}=re(t),a=t.reduce((m,g)=>m+this.config.estimateTokens(g),0);if(a<=n)return{messages:t,droppedCount:0,strategy:"head-tail-protected"};let s=0,l=0;for(let m=0;m<i.length&&(i[m].role==="user"&&l++,!(l>this.config.protectedHeadExchanges));m++)s=m+1;let u=Math.max(this.config.protectedTailMessages,Math.floor(i.length*.4)),c=Math.max(s,i.length-u);if(c<=s)return{messages:t,droppedCount:0,strategy:"head-tail-protected"};let d=i.slice(0,s),p=i.slice(s,c),f=i.slice(c),C=U(p,{taskContext:this.config.taskContext}),k=await this.config.summarize(p,C),A={role:"system",content:`[Conversation summary \u2014 ${p.length} messages compressed]
10
10
 
11
- ${k}`},_=[...r,...d,A,...f],M=Date.now()-o,b=_.reduce((m,g)=>m+this.config.estimateTokens(g),0);return{messages:_,droppedCount:p.length,strategy:"head-tail-protected",metrics:{tokensBefore:a,tokensAfter:b,compressionRatio:a>0?b/a:1,latencyMs:M,usedLlm:!0,cacheInvalidated:!0}}}},w=class{config;constructor(t){this.config={preserveRecentCount:t.preserveRecentCount,summarize:t.summarize,estimateTokens:t.estimateTokens??S}}compress(t,n){return{messages:t,droppedCount:0,strategy:"incremental-compact"}}async compressAsync(t,n){let o=Date.now(),{system:r,nonSystem:i}=re(t),a=r.findIndex(m=>typeof m.content=="string"&&m.content.startsWith("[Conversation summary")),s=a>=0?r[a]:void 0,l=a>=0?[...r.slice(0,a),...r.slice(a+1)]:r,u=Math.max(0,i.length-this.config.preserveRecentCount);if(u<=0)return{messages:t,droppedCount:0,strategy:"incremental-compact"};let c=t.reduce((m,g)=>m+this.config.estimateTokens(g),0);if(c<=n)return{messages:t,droppedCount:0,strategy:"incremental-compact"};let d=i.slice(0,u),p=i.slice(u),f=s&&typeof s.content=="string"?`Previous summary:
11
+ ${k}`},_=[...r,...d,A,...f],M=Date.now()-o,b=_.reduce((m,g)=>m+this.config.estimateTokens(g),0);return{messages:_,droppedCount:p.length,strategy:"head-tail-protected",metrics:{tokensBefore:a,tokensAfter:b,compressionRatio:a>0?b/a:1,latencyMs:M,usedLlm:!0,cacheInvalidated:!0}}}},O=class{config;constructor(t){this.config={preserveRecentCount:t.preserveRecentCount,summarize:t.summarize,estimateTokens:t.estimateTokens??S}}compress(t,n){return{messages:t,droppedCount:0,strategy:"incremental-compact"}}async compressAsync(t,n){let o=Date.now(),{system:r,nonSystem:i}=re(t),a=r.findIndex(m=>typeof m.content=="string"&&m.content.startsWith("[Conversation summary")),s=a>=0?r[a]:void 0,l=a>=0?[...r.slice(0,a),...r.slice(a+1)]:r,u=Math.max(0,i.length-this.config.preserveRecentCount);if(u<=0)return{messages:t,droppedCount:0,strategy:"incremental-compact"};let c=t.reduce((m,g)=>m+this.config.estimateTokens(g),0);if(c<=n)return{messages:t,droppedCount:0,strategy:"incremental-compact"};let d=i.slice(0,u),p=i.slice(u),f=s&&typeof s.content=="string"?`Previous summary:
12
12
  ${s.content}
13
13
 
14
14
  New messages to integrate:`:void 0,C=U(d,{taskContext:f}),k=await this.config.summarize(d,C),A={role:"system",content:`[Conversation summary \u2014 ${d.length} messages compressed]
@@ -16,8 +16,8 @@ New messages to integrate:`:void 0,C=U(d,{taskContext:f}),k=await this.config.su
16
16
  ${k}`},_=[...l,A,...p],M=Date.now()-o,b=_.reduce((m,g)=>m+this.config.estimateTokens(g),0);return{messages:_,droppedCount:d.length,strategy:"incremental-compact",metrics:{tokensBefore:c,tokensAfter:b,compressionRatio:c>0?b/c:1,latencyMs:M,usedLlm:!0,cacheInvalidated:!0}}}},P=class{config;constructor(t){this.config=t}compress(t,n){let o=R(t),r=this.config.inner.compress(t,n),i=R(r.messages),a=o!==i&&r.droppedCount>0;return a&&this.config.onCacheInvalidated?.({droppedCount:r.droppedCount,strategy:r.strategy}),{...r,metrics:{...r.metrics??{tokensBefore:0,tokensAfter:0,compressionRatio:0,latencyMs:0,usedLlm:!1},cacheInvalidated:a}}}async compressAsync(t,n){let o=R(t),r=B(this.config.inner)?await this.config.inner.compressAsync(t,n):this.config.inner.compress(t,n),i=R(r.messages),a=o!==i&&r.droppedCount>0;return a&&this.config.onCacheInvalidated?.({droppedCount:r.droppedCount,strategy:r.strategy}),{...r,metrics:{...r.metrics??{tokensBefore:0,tokensAfter:0,compressionRatio:0,latencyMs:0,usedLlm:!1},cacheInvalidated:a}}}},oe={modelContextWindow:128e3,targetUsageRatio:.75,minBudget:16e3,maxBudget:12e4};function lt(e={}){let t={...oe,...e},n=Math.floor(t.modelContextWindow*t.targetUsageRatio);return Math.max(t.minBudget,Math.min(n,t.maxBudget))}function ct(e,t){let n=e/t;return n<=.8?"none":n<=1?"trim-only":n<=1.5?"sliding-window":"llm-summarize"}var N=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 n=0,o=0,r=0,i=0,a=0;for(let s of this.events)n+=s.tokensBefore>0?s.tokensAfter/s.tokensBefore:1,o+=s.latencyMs,r+=Math.max(0,s.tokensBefore-s.tokensAfter),s.usedLlm&&i++,s.cacheInvalidated&&a++;return{totalCompressions:t,totalLlmCalls:i,totalCacheInvalidations:a,averageCompressionRatio:n/t,averageLatencyMs:o/t,totalTokensSaved:r,recentEvents:this.events.slice(-10)}}reset(){this.events.length=0}},F=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 re(e){let t=[],n=[];for(let o of e)o.role==="system"?t.push(o):n.push(o);return{system:t,nonSystem:n}}function S(e){let t=typeof e.content=="string"?e.content:e.content!=null?JSON.stringify(e.content):"";return Math.ceil(t.length/4)}function R(e){let t=Math.min(e.length,5),n=[];for(let o=0;o<t;o++){let r=e[o],i=typeof r.content=="string"?r.content.slice(0,200):"";n.push(`${r.role}:${i}`)}return n.join("|")}var ut=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"]),D=class{constructor(t=20,n=S){this.preserveRecentCount=t;this.estimateTokens=n}preserveRecentCount;estimateTokens;compress(t,n){if(t.length<=this.preserveRecentCount)return{messages:t,droppedCount:0,strategy:"micro-compact"};let o=t.length-this.preserveRecentCount,r=0,i=0;return{messages:t.map((s,l)=>{if(l>=o||s.role!=="tool"||typeof s.content!="string"||!s.name||!ut.has(s.name)||s.content.length<=200)return s;let u=this.estimateTokens(s);return i+=u,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 pt(e){let t=new Map;for(let n=0;n<e.length;n++){let o=e[n];if(o.tool_calls&&Array.isArray(o.tool_calls))for(let r of o.tool_calls){let i=r.function?.name??"";if(/read|edit|write|file/i.test(i)&&r.function?.arguments)try{let a=JSON.parse(r.function.arguments),s=a.path??a.filePath??a.file_path??a.file;s&&typeof s=="string"&&t.set(s,n)}catch{}}o.role==="tool"&&o.name&&/read|edit|write|file/i.test(o.name)}return[...t.entries()].sort((n,o)=>o[1]-n[1]).map(([n])=>n)}async function dt(e,t,n){let o=n.estimateTokens??(p=>Math.ceil(p.length/4)),r=pt(t);if(r.length===0)return e;let i=e.map(p=>typeof p.content=="string"?p.content:"").join(`
17
17
  `),a=r.filter(p=>!i.includes(p));if(a.length===0)return e;let s=n.maxTokenBudget,l=[],u=0;for(let p of a){if(u>=n.maxFiles||s<=0)break;let f=await n.readFile(p);if(!f)continue;let C=o(f);C>s||(s-=C,u++,l.push({role:"system",content:`[Post-compact file recovery: ${p}]
18
18
 
19
- ${f}`}))}if(l.length===0)return e;let c=[...e],d=-1;for(let p=0;p<c.length;p++)c[p].role==="system"&&(d=p);return c.splice(d+1,0,...l),c}function mt(e,t,n=S){if(t.size===0)return{messages:e,tokensFreed:0,removedCount:0};let o=0,r=0,i=[];for(let s of e){let l=s.tool_call_id??"";if(l&&t.has(l)){o+=n(s),r++,t.delete(l);continue}i.push(s)}let a=r>0?{role:"system",content:`[${r} messages removed by snip]`}:void 0;return{messages:i,tokensFreed:o,removedCount:r,boundaryMessage:a}}function ft(){return{stages:[]}}function gt(e,t,n){let o=n?.thresholdMessages??40;if(e.filter(s=>s.role!=="system").length<=o)return{messages:e,stagedCount:0};let i=se(e,t),a=yt(i,t,o);if(a.length===0)return{messages:i,stagedCount:0};for(let s of a)t.stages.push(s);return i=se(e,t),{messages:i,stagedCount:a.length}}function Tt(e,t){let n=0;for(let o of t.stages)o.committed||(o.committed=!0,n++);return n===0?{messages:e,committed:0}:{messages:ie(e,t),committed:n}}function se(e,t){return t.stages.filter(o=>o.committed).length===0?e:ie(e,t)}function ie(e,t){let n=t.stages.filter(r=>r.committed).sort((r,i)=>i.range[0]-r.range[0]),o=[...e];for(let r of n){let[i,a]=r.range;if(i>=o.length)continue;let s=Math.min(a,o.length),l={role:"system",content:r.summary};o.splice(i,s-i,l)}return o}function yt(e,t,n){let o=Math.max(0,e.length-Math.floor(n/2)),r=[],i=new Set(t.stages.map(l=>`${l.range[0]}-${l.range[1]}`)),a=-1,s=0;for(let l=0;l<o;l++){let u=e[l];if(u.role==="tool"||u.role==="assistant"&&typeof u.content=="string"&&u.content==="")a<0&&(a=l),s++;else{if(s>=3){let d=`${a}-${a+s}`;i.has(d)||r.push({id:`collapse_${a}_${a+s}`,range:[a,a+s],summary:`[${s} tool results collapsed]`,committed:!1})}a=-1,s=0}}if(s>=3){let l=`${a}-${a+s}`;i.has(l)||r.push({id:`collapse_${a}_${a+s}`,range:[a,a+s],summary:`[${s} tool results collapsed]`,committed:!1})}return r}import{existsSync as G,readFileSync as fe,writeFileSync as ht,readdirSync as ge,mkdirSync as Ct}from"node:fs";import{join as $,dirname as _t}from"node:path";var Bn=Math.min(Math.max(1,Number(process.env.TOOL_LOOP_DEFAULT_BUDGET)||25),100);var ae=20;var le=3,ce=2,ue=300*1e3,pe=3,de=720*60*60*1e3;var Un=300*1e3,j=4;var jn=3600*1e3;var Gn=50*1024,$n=500*1024,Hn=500*1024*1024,zn=50*1024*1024;var qn=60*1024;var Te=0;var bt="skill-patterns.json";function ye(e){return $(e,".qlogicagent",bt)}function he(e){let t=ye(e);try{return JSON.parse(fe(t,"utf8"))}catch{return{version:1,patterns:{}}}}function me(e,t){let n=ye(e);Ct(_t(n),{recursive:!0}),ht(n,JSON.stringify(t,null,2),"utf8")}function Rt(e){let t=Date.now()-de;for(let[n,o]of Object.entries(e.patterns))new Date(o.lastSeen).getTime()<t&&delete e.patterns[n]}function Ce(e,t){if(t.length===0)return!1;let n=x(t),o=he(e);Rt(o);let r=new Date().toISOString(),i=o.patterns[n];if(i||(i={signature:n,count:0,firstSeen:r,lastSeen:r,promoted:!1},o.patterns[n]=i),i.promoted)return me(e,o),!1;i.count++,i.lastSeen=r;let a=i.count>=pe;return a&&(i.promoted=!0),me(e,o),a}function St(e){let t=he(e);return Object.values(t.patterns)}function x(e){return[...e].sort().join("+")}function xt(e,t){if(!G(t))return null;let n=x(e);try{let o=ge(t,{withFileTypes:!0});for(let r of o){if(!r.isDirectory())continue;let i=$(t,r.name,"SKILL.md");try{let s=fe(i,"utf8").match(/^tools:\s*\n((?:\s+-\s+\S+\n?)+)/m);if(s){let l=s[1].split(`
20
- `).map(u=>u.replace(/^\s*-\s*/,"").trim()).filter(Boolean);if(x(l)===n)return r.name}}catch{}}}catch{}return null}function kt(e){if(!G(e))return 0;try{return ge(e,{withFileTypes:!0}).filter(t=>t.isDirectory()&&G($(e,t.name,"SKILL.md"))).length}catch{return 0}}function At(e,t){return!(!e.ok||e.existingSkillName||!e.multiStep||e.toolCallCount<le||e.distinctToolCount<ce||Date.now()-Te<ue||t?.projectSkillsDir&&(kt(t.projectSkillsDir)>=ae||t.tools.length>0&&xt(t.tools,t.projectSkillsDir))||t?.projectRoot&&t.tools.length>0&&!Ce(t.projectRoot,t.tools))}function Mt(e){return e.existingSkillName?e.feedback==="negative":!1}function Et(e,t){return Mt(e)?{type:"skill.improve",skillName:e.existingSkillName,reason:"negative user feedback on existing skill execution"}:At(e,t)?(Te=Date.now(),{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 _e(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 It(e){return e==="enabled-eligible"||e==="installed-awaiting-approval"}function vt(e){return new Map((e??[]).map(t=>[t.toolName,t]))}function Lt(e){if(!e.eligibility?.length)return[...e.tools];let t=vt(e.eligibility);return e.tools.filter(n=>{let o=_e(n);if(!o)return!1;let r=t.get(o);return!r||It(r.status)})}function Ot(e){let t=[],n=e.compatibility??{},o=e.toolChoice;if(e.thinkingEnabled&&n.requireAutoWhenThinking){let r=typeof o=="object"&&o&&!Array.isArray(o)?String(o.type??""):o;r&&r!=="auto"&&r!=="none"&&(t.push("tool_choice downgraded to auto because thinking mode requires auto/none compatibility."),o="auto")}if(o==="required"&&n.allowRequiredToolChoice===!1){let r=n.requiredFallback??"auto";t.push(`tool_choice=required is not supported by this provider; downgraded to ${r}.`),o=r}if(o&&typeof o=="object"&&!Array.isArray(o)&&o.type==="function"&&n.allowNamedToolChoice===!1){let r=n.namedFallback??"required";t.push(`named tool_choice is not supported by this provider; downgraded to ${r}.`),o=r}return{normalizedToolChoice:o,warnings:t}}function wt(e){let t=Ot({toolChoice:e.toolChoice,thinkingEnabled:e.thinkingEnabled,compatibility:e.compatibility}),n=t.normalizedToolChoice,o=[...t.warnings],r=Lt({tools:e.tools,eligibility:e.eligibility});if(!n||n==="auto")return{tools:r,normalizedToolChoice:n,warnings:o};if(n==="none")return{tools:[],normalizedToolChoice:"none",warnings:o};if(n==="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:o}}if(typeof n=="object"&&!Array.isArray(n)&&n.type==="function"){let i=n.function??void 0,a=typeof i?.name=="string"?i.name.trim():"";if(!a)throw new Error("tool_choice.function.name is required");let s=r.filter(l=>_e(l)===a);if(s.length===0)throw new Error(`tool_choice requested unknown tool: ${a}`);return{tools:s,normalizedToolChoice:{type:"function",function:{name:a}},extraSystemPrompt:`You must call the ${a} tool before responding.`,warnings:o}}return{tools:r,normalizedToolChoice:n,warnings:o}}var Pt=["stop","aborted","timeout","cancelled","interrupted","error"],Nt=["tool_calls","toolCalls","function_call","functionCall","raw_tool_calls","rawToolCalls"];function be(e){return e==null?[]:typeof e=="string"?e.length>0?[{type:"text",text:e}]:[]:Array.isArray(e)?e:[{type:"text",text:String(e)}]}function Ft(e,t){return{...e,content:[...be(e.content),...be(t.content)]}}function Dt(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 Bt(e){return new Set((e??Pt).map(t=>t.trim().toLowerCase()))}function Re(e,t){return e?Bt(t).has(e.trim().toLowerCase()):!1}function Ut(e){let t=e.indexOf("|");return t<=0||t>=e.length-1?{callId:e}:{callId:e.slice(0,t),itemId:e.slice(t+1)}}function H(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 l=s.tool_calls.filter(u=>Dt(u));return{...s,...l.length>0?{tool_calls:l}:{tool_calls:void 0}}}return{...s}}),n=new Set;for(let s of t)if(!(s.role!=="assistant"||!Array.isArray(s.tool_calls)))for(let l of s.tool_calls)typeof l.id=="string"&&l.id&&n.add(l.id);let o=t.filter(s=>s.role!=="tool"?!0:!!(s.tool_call_id&&n.has(s.tool_call_id))),r=new Set;for(let s of o)s.role==="tool"&&typeof s.tool_call_id=="string"&&s.tool_call_id&&r.add(s.tool_call_id);let i=[];for(let s of o){if(s.role==="assistant"&&Array.isArray(s.tool_calls)&&s.tool_calls.length>0){let l=s.tool_calls.filter(u=>typeof u.id=="string"&&r.has(u.id));if(l.length===0){let{tool_calls:u,...c}=s;c.content!=null&&c.content!==""&&i.push(c);continue}if(l.length<s.tool_calls.length){i.push({...s,tool_calls:l});continue}}i.push(s)}let a=[];for(let s of i){let l=a.length>0?a[a.length-1]:void 0;if(s.role==="user"&&l?.role==="user"){a[a.length-1]=Ft(l,s);continue}a.push(s)}return a}function z(e,t){return Re(t?.stopReason,t?.forcedStopReasons)?e.map(n=>{if(n.role!=="assistant")return{...n};let o={...n};for(let r of Nt)delete o[r];return o}):[...e]}function q(e,t){let n=t?.placeholderToolResult??"Error: Tool loop interrupted before the tool result was replayed.",o=new Set;for(let i of e)i.role==="tool"&&typeof i.tool_call_id=="string"&&i.tool_call_id&&o.add(i.tool_call_id);let r=[];for(let i of e)if(r.push({...i}),!(i.role!=="assistant"||!Array.isArray(i.tool_calls)||i.tool_calls.length===0))for(let a of i.tool_calls)typeof a.id!="string"||!a.id||o.has(a.id)||(o.add(a.id),r.push({role:"tool",tool_call_id:a.id,content:n}));return r}function jt(e,t){let n=H(e),o=z(n,t);return q(o,t)}function Se(e,t){let n=t?.placeholderFunctionCallOutput??"Error: Tool loop interrupted before function_call_output was provided.",o=Re(t?.stopReason,t?.forcedStopReasons),r=[];for(let u=0;u<e.length;u+=1){let c=e[u];if(!c||typeof c!="object"){r.push(c);continue}if(c.type==="reasoning"&&typeof c.id=="string"&&c.id.startsWith("rs_")&&!e.slice(u+1).some(f=>f&&typeof f=="object"&&f.type!=="reasoning"))continue;if(c.type!=="function_call"){r.push({...c});continue}let d={...c};if(typeof d.id=="string"){let p=Ut(d.id);p.itemId?.startsWith("fc_")&&(d.id=p.callId)}r.push(d)}let i=new Set,a=new Map;for(let u of r){if(u.type!=="function_call")continue;let c=typeof u.call_id=="string"&&u.call_id?u.call_id:typeof u.id=="string"?u.id:void 0;c&&(i.add(c),a.set(c,u))}let s=new Set,l=[];for(let u of r)if(!(o&&u.type==="function_call")){if(u.type==="function_call_output"){let c=typeof u.call_id=="string"?u.call_id:"";if(!c||!i.has(c))continue;s.add(c)}l.push(u)}for(let[u]of a)s.has(u)||o||l.push({type:"function_call_output",call_id:u,output:n});return l}function Gt(e){let t=new Set,n=new Set;for(let o of e){if(o.role==="assistant"&&Array.isArray(o.tool_calls))for(let r of o.tool_calls)typeof r.id=="string"&&r.id&&t.add(r.id);o.role==="tool"&&typeof o.tool_call_id=="string"&&o.tool_call_id&&n.add(o.tool_call_id)}return[...t].filter(o=>!n.has(o))}function $t(e){let t=new Set;for(let n of e)n.role==="tool"&&typeof n.tool_call_id=="string"&&n.tool_call_id&&t.add(n.tool_call_id);return[...t]}function Ht(e){let t=new Set,n=new Set;for(let o of e){if(o.type==="function_call"){let r=typeof o.call_id=="string"&&o.call_id?o.call_id:typeof o.id=="string"?o.id:"";r&&t.add(r)}o.type==="function_call_output"&&typeof o.call_id=="string"&&o.call_id&&n.add(o.call_id)}return[...t].filter(o=>!n.has(o))}function zt(e){let t=new Set;for(let n of e)n.type==="function_call_output"&&typeof n.call_id=="string"&&n.call_id&&t.add(n.call_id);return[...t]}function xe(e){return{round:e.round??0,maxRounds:e.maxRounds,pendingToolCallIds:[...e.pendingToolCallIds??[]],completedToolCallIds:[...e.completedToolCallIds??[]],lastStopReason:e.lastStopReason,replayMessages:[...e.replayMessages??[]]}}function qt(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 Xt(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 Kt(e){let t=[],n=H(e.replayMessages);n.length!==e.replayMessages.length&&t.push({kind:"drop-orphan-tool-result",detail:"Removed orphan tool results or invalid assistant tool calls."});let o=z(n,e.options);o.some((i,a)=>i!==n[a])&&t.push({kind:"strip-forced-stop-tool-metadata",detail:"Removed assistant tool-call metadata after forced stop."});let r=q(o,e.options);return r.length>o.length&&t.push({kind:"inject-placeholder-tool-result",detail:"Injected placeholder tool result for pending tool calls."}),{state:xe({maxRounds:e.maxRounds,round:e.round,lastStopReason:e.lastStopReason,replayMessages:r,pendingToolCallIds:Gt(r),completedToolCallIds:$t(r)}),recoveryActions:t}}function Yt(e){let t=Se(e.replayItems,e.options),n=[];return t.length!==e.replayItems.length&&n.push({kind:"drop-trailing-reasoning",detail:"Dropped dangling reasoning blocks or injected missing function_call_output items."}),t.some((o,r)=>o!==e.replayItems[r]&&o.type==="function_call")&&n.push({kind:"rewrite-openai-function-call-pair",detail:"Rewrote OpenAI function_call pairing ids for replay compatibility."}),{state:xe({maxRounds:e.maxRounds,round:e.round,lastStopReason:e.lastStopReason,replayMessages:t,pendingToolCallIds:Ht(t),completedToolCallIds:zt(t)}),recoveryActions:n}}var Wt=new Set(["main","sdk","agent","compact","hook","verification","side_question"]);function Vt(e){return e?Wt.has(e):!0}function Jt(e){return e===429||e===529}function Zt(e,t=500,n=32e3){let o=Math.min(t*Math.pow(2,e-1),n);return o+Math.floor(Math.random()*o*.25)}var no={maxBackoffMs:300*1e3,resetCapMs:360*60*1e3,heartbeatIntervalMs:3e4};function Qt(){let e=process.env.QLOGICAGENT_PERSISTENT_RETRY;return e==="1"||e==="true"}var X=class extends Error{constructor(n,o){super(`Model fallback triggered: ${n} -> ${o}`);this.originalModel=n;this.fallbackModel=o;this.name="FallbackTriggeredError"}originalModel;fallbackModel};var K="<fork-child-context>",ke="Fork started \u2014 processing in background";function en(e){return JSON.stringify(e).includes(K)}function tn(e){return e<j}function nn(e,t){let n=[...e.parentMessages],o=e.worktreePath?`
19
+ ${f}`}))}if(l.length===0)return e;let c=[...e],d=-1;for(let p=0;p<c.length;p++)c[p].role==="system"&&(d=p);return c.splice(d+1,0,...l),c}function mt(e,t,n=S){if(t.size===0)return{messages:e,tokensFreed:0,removedCount:0};let o=0,r=0,i=[];for(let s of e){let l=s.tool_call_id??"";if(l&&t.has(l)){o+=n(s),r++,t.delete(l);continue}i.push(s)}let a=r>0?{role:"system",content:`[${r} messages removed by snip]`}:void 0;return{messages:i,tokensFreed:o,removedCount:r,boundaryMessage:a}}function ft(){return{stages:[]}}function gt(e,t,n){let o=n?.thresholdMessages??40;if(e.filter(s=>s.role!=="system").length<=o)return{messages:e,stagedCount:0};let i=se(e,t),a=yt(i,t,o);if(a.length===0)return{messages:i,stagedCount:0};for(let s of a)t.stages.push(s);return i=se(e,t),{messages:i,stagedCount:a.length}}function Tt(e,t){let n=0;for(let o of t.stages)o.committed||(o.committed=!0,n++);return n===0?{messages:e,committed:0}:{messages:ie(e,t),committed:n}}function se(e,t){return t.stages.filter(o=>o.committed).length===0?e:ie(e,t)}function ie(e,t){let n=t.stages.filter(r=>r.committed).sort((r,i)=>i.range[0]-r.range[0]),o=[...e];for(let r of n){let[i,a]=r.range;if(i>=o.length)continue;let s=Math.min(a,o.length),l={role:"system",content:r.summary};o.splice(i,s-i,l)}return o}function yt(e,t,n){let o=Math.max(0,e.length-Math.floor(n/2)),r=[],i=new Set(t.stages.map(l=>`${l.range[0]}-${l.range[1]}`)),a=-1,s=0;for(let l=0;l<o;l++){let u=e[l];if(u.role==="tool"||u.role==="assistant"&&typeof u.content=="string"&&u.content==="")a<0&&(a=l),s++;else{if(s>=3){let d=`${a}-${a+s}`;i.has(d)||r.push({id:`collapse_${a}_${a+s}`,range:[a,a+s],summary:`[${s} tool results collapsed]`,committed:!1})}a=-1,s=0}}if(s>=3){let l=`${a}-${a+s}`;i.has(l)||r.push({id:`collapse_${a}_${a+s}`,range:[a,a+s],summary:`[${s} tool results collapsed]`,committed:!1})}return r}import{existsSync as j,readFileSync as fe,writeFileSync as ht,readdirSync as ge,mkdirSync as Ct}from"node:fs";import{join as H,dirname as _t}from"node:path";var Dn=Math.min(Math.max(1,Number(process.env.TOOL_LOOP_DEFAULT_BUDGET)||25),100);var ae=20;var le=3,ce=2,ue=300*1e3,pe=3,de=720*60*60*1e3;var Bn=300*1e3,G=4;var Un=3600*1e3;var Gn=50*1024,jn=500*1024,Hn=500*1024*1024,$n=50*1024*1024;var zn=60*1024;var Te=0;var bt="skill-patterns.json";function ye(e){return H(e,".qlogicagent",bt)}function he(e){let t=ye(e);try{return JSON.parse(fe(t,"utf8"))}catch{return{version:1,patterns:{}}}}function me(e,t){let n=ye(e);Ct(_t(n),{recursive:!0}),ht(n,JSON.stringify(t,null,2),"utf8")}function Rt(e){let t=Date.now()-de;for(let[n,o]of Object.entries(e.patterns))new Date(o.lastSeen).getTime()<t&&delete e.patterns[n]}function Ce(e,t){if(t.length===0)return!1;let n=x(t),o=he(e);Rt(o);let r=new Date().toISOString(),i=o.patterns[n];if(i||(i={signature:n,count:0,firstSeen:r,lastSeen:r,promoted:!1},o.patterns[n]=i),i.promoted)return me(e,o),!1;i.count++,i.lastSeen=r;let a=i.count>=pe;return a&&(i.promoted=!0),me(e,o),a}function St(e){let t=he(e);return Object.values(t.patterns)}function x(e){return[...e].sort().join("+")}function xt(e,t){if(!j(t))return null;let n=x(e);try{let o=ge(t,{withFileTypes:!0});for(let r of o){if(!r.isDirectory())continue;let i=H(t,r.name,"SKILL.md");try{let s=fe(i,"utf8").match(/^tools:\s*\n((?:\s+-\s+\S+\n?)+)/m);if(s){let l=s[1].split(`
20
+ `).map(u=>u.replace(/^\s*-\s*/,"").trim()).filter(Boolean);if(x(l)===n)return r.name}}catch{}}}catch{}return null}function kt(e){if(!j(e))return 0;try{return ge(e,{withFileTypes:!0}).filter(t=>t.isDirectory()&&j(H(e,t.name,"SKILL.md"))).length}catch{return 0}}function At(e,t){return!(!e.ok||e.existingSkillName||!e.multiStep||e.toolCallCount<le||e.distinctToolCount<ce||Date.now()-Te<ue||t?.projectSkillsDir&&(kt(t.projectSkillsDir)>=ae||t.tools.length>0&&xt(t.tools,t.projectSkillsDir))||t?.projectRoot&&t.tools.length>0&&!Ce(t.projectRoot,t.tools))}function Mt(e){return e.existingSkillName?e.feedback==="negative":!1}function Et(e,t){return Mt(e)?{type:"skill.improve",skillName:e.existingSkillName,reason:"negative user feedback on existing skill execution"}:At(e,t)?(Te=Date.now(),{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 _e(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 It(e){return e==="enabled-eligible"||e==="installed-awaiting-approval"}function vt(e){return new Map((e??[]).map(t=>[t.toolName,t]))}function Lt(e){if(!e.eligibility?.length)return[...e.tools];let t=vt(e.eligibility);return e.tools.filter(n=>{let o=_e(n);if(!o)return!1;let r=t.get(o);return!r||It(r.status)})}function wt(e){let t=[],n=e.compatibility??{},o=e.toolChoice;if(e.thinkingEnabled&&n.requireAutoWhenThinking){let r=typeof o=="object"&&o&&!Array.isArray(o)?String(o.type??""):o;r&&r!=="auto"&&r!=="none"&&(t.push("tool_choice downgraded to auto because thinking mode requires auto/none compatibility."),o="auto")}if(o==="required"&&n.allowRequiredToolChoice===!1){let r=n.requiredFallback??"auto";t.push(`tool_choice=required is not supported by this provider; downgraded to ${r}.`),o=r}if(o&&typeof o=="object"&&!Array.isArray(o)&&o.type==="function"&&n.allowNamedToolChoice===!1){let r=n.namedFallback??"required";t.push(`named tool_choice is not supported by this provider; downgraded to ${r}.`),o=r}return{normalizedToolChoice:o,warnings:t}}function Ot(e){let t=wt({toolChoice:e.toolChoice,thinkingEnabled:e.thinkingEnabled,compatibility:e.compatibility}),n=t.normalizedToolChoice,o=[...t.warnings],r=Lt({tools:e.tools,eligibility:e.eligibility});if(!n||n==="auto")return{tools:r,normalizedToolChoice:n,warnings:o};if(n==="none")return{tools:[],normalizedToolChoice:"none",warnings:o};if(n==="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:o}}if(typeof n=="object"&&!Array.isArray(n)&&n.type==="function"){let i=n.function??void 0,a=typeof i?.name=="string"?i.name.trim():"";if(!a)throw new Error("tool_choice.function.name is required");let s=r.filter(l=>_e(l)===a);if(s.length===0)throw new Error(`tool_choice requested unknown tool: ${a}`);return{tools:s,normalizedToolChoice:{type:"function",function:{name:a}},extraSystemPrompt:`You must call the ${a} tool before responding.`,warnings:o}}return{tools:r,normalizedToolChoice:n,warnings:o}}var Pt=["stop","aborted","timeout","cancelled","interrupted","error"],Nt=["tool_calls","toolCalls","function_call","functionCall","raw_tool_calls","rawToolCalls"];function be(e){return e==null?[]:typeof e=="string"?e.length>0?[{type:"text",text:e}]:[]:Array.isArray(e)?e:[{type:"text",text:String(e)}]}function Ft(e,t){return{...e,content:[...be(e.content),...be(t.content)]}}function Dt(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 Bt(e){return new Set((e??Pt).map(t=>t.trim().toLowerCase()))}function Re(e,t){return e?Bt(t).has(e.trim().toLowerCase()):!1}function Ut(e){let t=e.indexOf("|");return t<=0||t>=e.length-1?{callId:e}:{callId:e.slice(0,t),itemId:e.slice(t+1)}}function $(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 l=s.tool_calls.filter(u=>Dt(u));return{...s,...l.length>0?{tool_calls:l}:{tool_calls:void 0}}}return{...s}}),n=new Set;for(let s of t)if(!(s.role!=="assistant"||!Array.isArray(s.tool_calls)))for(let l of s.tool_calls)typeof l.id=="string"&&l.id&&n.add(l.id);let o=t.filter(s=>s.role!=="tool"?!0:!!(s.tool_call_id&&n.has(s.tool_call_id))),r=new Set;for(let s of o)s.role==="tool"&&typeof s.tool_call_id=="string"&&s.tool_call_id&&r.add(s.tool_call_id);let i=[];for(let s of o){if(s.role==="assistant"&&Array.isArray(s.tool_calls)&&s.tool_calls.length>0){let l=s.tool_calls.filter(u=>typeof u.id=="string"&&r.has(u.id));if(l.length===0){let{tool_calls:u,...c}=s;c.content!=null&&c.content!==""&&i.push(c);continue}if(l.length<s.tool_calls.length){i.push({...s,tool_calls:l});continue}}i.push(s)}let a=[];for(let s of i){let l=a.length>0?a[a.length-1]:void 0;if(s.role==="user"&&l?.role==="user"){a[a.length-1]=Ft(l,s);continue}a.push(s)}return a}function z(e,t){return Re(t?.stopReason,t?.forcedStopReasons)?e.map(n=>{if(n.role!=="assistant")return{...n};let o={...n};for(let r of Nt)delete o[r];return o}):[...e]}function q(e,t){let n=t?.placeholderToolResult??"Error: Tool loop interrupted before the tool result was replayed.",o=new Set;for(let i of e)i.role==="tool"&&typeof i.tool_call_id=="string"&&i.tool_call_id&&o.add(i.tool_call_id);let r=[];for(let i of e)if(r.push({...i}),!(i.role!=="assistant"||!Array.isArray(i.tool_calls)||i.tool_calls.length===0))for(let a of i.tool_calls)typeof a.id!="string"||!a.id||o.has(a.id)||(o.add(a.id),r.push({role:"tool",tool_call_id:a.id,content:n}));return r}function Gt(e,t){let n=$(e),o=z(n,t);return q(o,t)}function Se(e,t){let n=t?.placeholderFunctionCallOutput??"Error: Tool loop interrupted before function_call_output was provided.",o=Re(t?.stopReason,t?.forcedStopReasons),r=[];for(let u=0;u<e.length;u+=1){let c=e[u];if(!c||typeof c!="object"){r.push(c);continue}if(c.type==="reasoning"&&typeof c.id=="string"&&c.id.startsWith("rs_")&&!e.slice(u+1).some(f=>f&&typeof f=="object"&&f.type!=="reasoning"))continue;if(c.type!=="function_call"){r.push({...c});continue}let d={...c};if(typeof d.id=="string"){let p=Ut(d.id);p.itemId?.startsWith("fc_")&&(d.id=p.callId)}r.push(d)}let i=new Set,a=new Map;for(let u of r){if(u.type!=="function_call")continue;let c=typeof u.call_id=="string"&&u.call_id?u.call_id:typeof u.id=="string"?u.id:void 0;c&&(i.add(c),a.set(c,u))}let s=new Set,l=[];for(let u of r)if(!(o&&u.type==="function_call")){if(u.type==="function_call_output"){let c=typeof u.call_id=="string"?u.call_id:"";if(!c||!i.has(c))continue;s.add(c)}l.push(u)}for(let[u]of a)s.has(u)||o||l.push({type:"function_call_output",call_id:u,output:n});return l}function jt(e){let t=new Set,n=new Set;for(let o of e){if(o.role==="assistant"&&Array.isArray(o.tool_calls))for(let r of o.tool_calls)typeof r.id=="string"&&r.id&&t.add(r.id);o.role==="tool"&&typeof o.tool_call_id=="string"&&o.tool_call_id&&n.add(o.tool_call_id)}return[...t].filter(o=>!n.has(o))}function Ht(e){let t=new Set;for(let n of e)n.role==="tool"&&typeof n.tool_call_id=="string"&&n.tool_call_id&&t.add(n.tool_call_id);return[...t]}function $t(e){let t=new Set,n=new Set;for(let o of e){if(o.type==="function_call"){let r=typeof o.call_id=="string"&&o.call_id?o.call_id:typeof o.id=="string"?o.id:"";r&&t.add(r)}o.type==="function_call_output"&&typeof o.call_id=="string"&&o.call_id&&n.add(o.call_id)}return[...t].filter(o=>!n.has(o))}function zt(e){let t=new Set;for(let n of e)n.type==="function_call_output"&&typeof n.call_id=="string"&&n.call_id&&t.add(n.call_id);return[...t]}function xe(e){return{round:e.round??0,maxRounds:e.maxRounds,pendingToolCallIds:[...e.pendingToolCallIds??[]],completedToolCallIds:[...e.completedToolCallIds??[]],lastStopReason:e.lastStopReason,replayMessages:[...e.replayMessages??[]]}}function qt(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 Xt(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 Kt(e){let t=[],n=$(e.replayMessages);n.length!==e.replayMessages.length&&t.push({kind:"drop-orphan-tool-result",detail:"Removed orphan tool results or invalid assistant tool calls."});let o=z(n,e.options);o.some((i,a)=>i!==n[a])&&t.push({kind:"strip-forced-stop-tool-metadata",detail:"Removed assistant tool-call metadata after forced stop."});let r=q(o,e.options);return r.length>o.length&&t.push({kind:"inject-placeholder-tool-result",detail:"Injected placeholder tool result for pending tool calls."}),{state:xe({maxRounds:e.maxRounds,round:e.round,lastStopReason:e.lastStopReason,replayMessages:r,pendingToolCallIds:jt(r),completedToolCallIds:Ht(r)}),recoveryActions:t}}function Yt(e){let t=Se(e.replayItems,e.options),n=[];return t.length!==e.replayItems.length&&n.push({kind:"drop-trailing-reasoning",detail:"Dropped dangling reasoning blocks or injected missing function_call_output items."}),t.some((o,r)=>o!==e.replayItems[r]&&o.type==="function_call")&&n.push({kind:"rewrite-openai-function-call-pair",detail:"Rewrote OpenAI function_call pairing ids for replay compatibility."}),{state:xe({maxRounds:e.maxRounds,round:e.round,lastStopReason:e.lastStopReason,replayMessages:t,pendingToolCallIds:$t(t),completedToolCallIds:zt(t)}),recoveryActions:n}}var Wt=new Set(["main","sdk","agent","compact","hook","verification","side_question"]);function Vt(e){return e?Wt.has(e):!0}function Jt(e){return e===429||e===529}function Zt(e,t=500,n=32e3){let o=Math.min(t*Math.pow(2,e-1),n);return o+Math.floor(Math.random()*o*.25)}var to={maxBackoffMs:300*1e3,resetCapMs:360*60*1e3,heartbeatIntervalMs:3e4};function Qt(){let e=process.env.QLOGICAGENT_PERSISTENT_RETRY;return e==="1"||e==="true"}var X=class extends Error{constructor(n,o){super(`Model fallback triggered: ${n} -> ${o}`);this.originalModel=n;this.fallbackModel=o;this.name="FallbackTriggeredError"}originalModel;fallbackModel};var K="<fork-child-context>",ke="Fork started \u2014 processing in background";function en(e){return JSON.stringify(e).includes(K)}function tn(e){return e<G}function nn(e,t){let n=[...e.parentMessages],o=e.worktreePath?`
21
21
 
22
22
  Your working directory is: ${e.worktreePath}
23
23
  All file paths should be relative to this directory.`:"",r={role:"user",content:[{type:"text",text:`${K}
@@ -35,4 +35,4 @@ ${n.content}`);return t.length===0?null:`[Context was compressed. The following
35
35
 
36
36
  ${t.join(`
37
37
 
38
- `)}`}function Mn(){return{consecutiveFailures:0,attemptedThisTurn:!1,lastCompactAt:null,toolsAtLastCompact:[]}}function En(e,t=kn){return!(e.attemptedThisTurn||e.consecutiveFailures>=t.maxConsecutiveFailures)}export{P as CacheAwareCompressionStrategy,N as CompressionMetricsCollector,F as ContextEngineRegistry,oe as DEFAULT_ADAPTIVE_BUDGET_CONFIG,ke as FORK_PLACEHOLDER_RESULT,K as FORK_SENTINEL_TAG,X as FallbackTriggeredError,O as HeadTailProtectedStrategy,w as IncrementalCompactStrategy,j as MAX_FORK_DEPTH,D as MicroCompactStrategy,I as SlidingWindowStrategy,v as SummarizeOldStrategy,L as ToolResultTrimStrategy,qt as advanceToolLoopState,gt as applyContextCollapsesIfNeeded,wt as applyToolChoicePolicy,Ae as buildAssistantToolCallMessage,on as buildForkPlaceholderResults,nn as buildForkedMessages,An as buildPostCompactRestorationMessage,Et as buildSkillInstruction,U as buildStructuredSummaryPrompt,Me as buildToolResultMessage,x as buildToolSignature,bn as calculateTokenWarningState,tn as canForkAtDepth,ot as classifyError,at as composeAsyncStrategies,it as composeStrategies,lt as computeAdaptiveBudget,Zt as computeRetryBackoff,ft as createCollapseStore,Mn as createReactiveCompactState,Cn as createTaskState,_n as createTurnLoopGuardState,hn as filterToolsByRole,sn as generateForkChildAgentId,fn as getBuiltInAgent,mn as getBuiltInAgents,St as getPatternStats,B as isAsyncCompressionStrategy,gn as isBuiltInAgent,Vt as isForegroundSource,en as isInForkChild,Qt as isPersistentRetryEnabled,rt as isRetryableCategory,Jt as isTransientCapacityError,dt as postCompactFileRecovery,Ce as recordPatternAndCheckThreshold,Tt as recoverContextCollapseFromOverflow,Kt as recoverToolLoopStateFromChatConversation,Yt as recoverToolLoopStateFromResponsesItems,jt as repairOpenAiChatConversation,Tn as resolveAgentToolSet,Rn as resolveApiErrorRecovery,rn as resolveForkChildTools,Sn as resolveOutputTokenEscalation,ct as selectCompressionTier,Xt as settleToolLoopState,xn as shouldAbortTurn,En as shouldAttemptReactiveCompact,mt as snipCompactIfNeeded};
38
+ `)}`}function Mn(){return{consecutiveFailures:0,attemptedThisTurn:!1,lastCompactAt:null,toolsAtLastCompact:[]}}function En(e,t=kn){return!(e.attemptedThisTurn||e.consecutiveFailures>=t.maxConsecutiveFailures)}export{P as CacheAwareCompressionStrategy,N as CompressionMetricsCollector,F as ContextEngineRegistry,oe as DEFAULT_ADAPTIVE_BUDGET_CONFIG,ke as FORK_PLACEHOLDER_RESULT,K as FORK_SENTINEL_TAG,X as FallbackTriggeredError,w as HeadTailProtectedStrategy,O as IncrementalCompactStrategy,G as MAX_FORK_DEPTH,D as MicroCompactStrategy,I as SlidingWindowStrategy,v as SummarizeOldStrategy,L as ToolResultTrimStrategy,qt as advanceToolLoopState,gt as applyContextCollapsesIfNeeded,Ot as applyToolChoicePolicy,Ae as buildAssistantToolCallMessage,on as buildForkPlaceholderResults,nn as buildForkedMessages,An as buildPostCompactRestorationMessage,Et as buildSkillInstruction,U as buildStructuredSummaryPrompt,Me as buildToolResultMessage,x as buildToolSignature,bn as calculateTokenWarningState,tn as canForkAtDepth,ot as classifyError,at as composeAsyncStrategies,it as composeStrategies,lt as computeAdaptiveBudget,Zt as computeRetryBackoff,ft as createCollapseStore,Mn as createReactiveCompactState,Cn as createTaskState,_n as createTurnLoopGuardState,hn as filterToolsByRole,sn as generateForkChildAgentId,fn as getBuiltInAgent,mn as getBuiltInAgents,St as getPatternStats,B as isAsyncCompressionStrategy,gn as isBuiltInAgent,Vt as isForegroundSource,en as isInForkChild,Qt as isPersistentRetryEnabled,rt as isRetryableCategory,Jt as isTransientCapacityError,dt as postCompactFileRecovery,Ce as recordPatternAndCheckThreshold,Tt as recoverContextCollapseFromOverflow,Kt as recoverToolLoopStateFromChatConversation,Yt as recoverToolLoopStateFromResponsesItems,Gt as repairOpenAiChatConversation,Tn as resolveAgentToolSet,Rn as resolveApiErrorRecovery,rn as resolveForkChildTools,Sn as resolveOutputTokenEscalation,ct as selectCompressionTier,Xt as settleToolLoopState,xn as shouldAbortTurn,En as shouldAttemptReactiveCompact,mt as snipCompactIfNeeded};
package/dist/protocol.js CHANGED
@@ -1 +1 @@
1
- var V="1.0.0",W={PARSE_ERROR:-32700,INVALID_REQUEST:-32600,METHOD_NOT_FOUND:-32601,INVALID_PARAMS:-32602,INTERNAL_ERROR:-32603,TURN_ABORTED:-32e3,TURN_TIMEOUT:-32001,LLM_ERROR:-32010,LLM_AUTH_ERROR:-32011,LLM_RATE_LIMIT:-32012,LLM_QUOTA_EXHAUSTED:-32013,LLM_MODEL_NOT_FOUND:-32014,TOOL_INVOKE_FAILED:-32020,TOOL_TIMEOUT:-32021,PROTOCOL_MISMATCH:-32030},F={REQUEST:"tool.approval.request",RESPONSE:"tool.approval.response"};function _(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&t.method.length>0}function P(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&(typeof t.id=="string"||typeof t.id=="number")&&!("method"in t)}function T(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&!("id"in t)}function B(e){let t;try{t=JSON.parse(e)}catch{return null}return P(t)||_(t)||T(t)?t:null}var j=["session.list","session.get","session.create","session.update","session.delete","session.deleteAll","session.archive","session.moveToProject","session.getState","session.switchProject","session.getMessages","project.list","project.create","project.delete","project.rename","project.archive","project.unarchive","project.update","project.archiveByGroup","project.purgeAll","instructions.list","instructions.read","instructions.write","instructions.delete","files.list","files.read","files.create","files.rename","files.delete","files.gitStatus","skills.list","memory.list-files","memory.atlas","memory.activity"];var C=["turn.start","turn.delta","turn.end","turn.error","turn.recovery","turn.tool_call","turn.tool_result","turn.tool_blocked","turn.reasoning_delta","turn.approval_request","turn.skill_instruction","turn.ask_user","turn.media_result","turn.media_progress","turn.plan_update","turn.suggestions","turn.sidechain_started","turn.subagent_delta","turn.sidechain_completed","turn.task_updated","turn.todos_updated","turn.exec_progress","turn.usage_update","team.member.notification","session.info","memory.updated","skills.updated","pet.soul_ready","pet.reaction","pet.growth","pet.state","pet.confirm","pet.forged","system.activity"],b=["solo.progress","solo.agentDelta","solo.agentUsage","solo.agentDiff","solo.evaluation","product.taskStarted","product.taskOutput","product.taskCompleted","product.taskFailed","product.budgetUpdate","product.checkpointed","product.dagTopology","plan.interrupted"],Y=[...C,...b];var X=1,H={INITIALIZE:"initialize",SESSION_NEW:"session/new",SESSION_PROMPT:"session/prompt",SESSION_END:"session/end",SESSION_SET_CONFIG:"session/set_config_option",SESSION_SET_MODEL:"session/set_model",SESSION_SET_MODE:"session/set_mode",SESSION_UPDATE:"session/update",SESSION_REQUEST_PERMISSION:"session/request_permission",FS_READ_TEXT_FILE:"fs/read_text_file",FS_WRITE_TEXT_FILE:"fs/write_text_file"},G={ABORT:"x/abort",DREAM:"x/dream",AGENTS_LIST:"x/agents.list",SOLO_START:"x/solo.start",SOLO_STATUS:"x/solo.status",SOLO_SELECT:"x/solo.select",SOLO_CANCEL:"x/solo.cancel",PRODUCT_CREATE:"x/product.create",PRODUCT_PLAN:"x/product.plan",PRODUCT_CONFIRM:"x/product.confirm",PRODUCT_MESSAGE:"x/product.message",PRODUCT_RESUME:"x/product.resume",PRODUCT_PAUSE:"x/product.pause",PRODUCT_CANCEL:"x/product.cancel",PRODUCT_ROLLBACK:"x/product.rollback",PRODUCT_STATUS:"x/product.status",SOLO_SUBSCRIBE:"x/solo.subscribe",SOLO_MESSAGE:"x/solo.message",SOLO_EVALUATE:"x/solo.evaluate",PRODUCT_SUBSCRIBE:"x/product.subscribe",TEAM_DELEGATE:"x/team.delegate"},I={AGENT_MESSAGE_CHUNK:"agent_message_chunk",AGENT_THOUGHT_CHUNK:"agent_thought_chunk",TOOL_CALL:"tool_call",TOOL_CALL_UPDATE:"tool_call_update",PLAN:"plan",USAGE_UPDATE:"usage_update",CONFIG_OPTION_UPDATE:"config_option_update",SESSION_INFO_UPDATE:"session_info_update",AVAILABLE_COMMANDS_UPDATE:"available_commands_update"},q={X_SUBAGENT_STARTED:"x_subagent_started",X_SUBAGENT_DELTA:"x_subagent_delta",X_SUBAGENT_ENDED:"x_subagent_ended",X_MEDIA_RESULT:"x_media_result",X_MEDIA_PROGRESS:"x_media_progress",X_SKILL_INSTRUCTION:"x_skill_instruction",X_RECOVERY:"x_recovery",X_SIDECHAIN_STARTED:"x_sidechain_started",X_SIDECHAIN_COMPLETED:"x_sidechain_completed",X_SUGGESTIONS:"x_suggestions",X_ASK_USER:"x_ask_user",X_SESSION_INFO:"x_session_info",X_MEMORY_UPDATED:"x_memory_updated",X_TEAM_MEMBER_UPDATE:"x_team_member_update",X_SOLO_STARTED:"x_solo_started",X_SOLO_AGENT_FINISHED:"x_solo_agent_finished",X_SOLO_SELECTED:"x_solo_selected",X_PRODUCT_TASK_STARTED:"x_product_task_started",X_PRODUCT_TASK_COMPLETED:"x_product_task_completed",X_PRODUCT_CHECKPOINT:"x_product_checkpoint"};function v(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&"id"in t}function M(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&!("id"in t)}function h(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&"id"in t&&!("method"in t)}function z(e){let t;try{t=JSON.parse(e)}catch{return null}return h(t)||v(t)||M(t)?t:null}function J(e){return Object.values(I).includes(e)}function $(e){return e.startsWith("x_")}var f=["gatewayVersion","toolNamespaces","workspaceIds","installedCapabilities","enabledCapabilities","features","approvalMode","toolManifests","skillManifests","pluginManifests","mcpManifests","approvalPolicy","workspaceSummaries"];function d(e){return e?e.map(t=>({...t})):void 0}function A(e){return e?e.map(t=>({...t})):void 0}function Q(e){return e?[...e]:void 0}function k(e){return[...new Set(e.map(t=>t.trim()).filter(Boolean))].sort((t,r)=>t.localeCompare(r))}function g(e){return{...e,toolNamespaces:[...e.toolNamespaces],workspaceIds:[...e.workspaceIds],...e.changedSections?{changedSections:[...e.changedSections]}:{},...e.installedCapabilities?{installedCapabilities:[...e.installedCapabilities]}:{},...e.enabledCapabilities?{enabledCapabilities:[...e.enabledCapabilities]}:{},...e.features?{features:[...e.features]}:{},...e.toolManifests?{toolManifests:d(e.toolManifests)}:{},...e.skillManifests?{skillManifests:d(e.skillManifests)}:{},...e.pluginManifests?{pluginManifests:d(e.pluginManifests)}:{},...e.mcpManifests?{mcpManifests:d(e.mcpManifests)}:{},...e.approvalPolicy?{approvalPolicy:{...e.approvalPolicy}}:{},...e.workspaceSummaries?{workspaceSummaries:A(e.workspaceSummaries)}:{}}}function Z(e){let{previous:t,update:r}=e;return!(r.syncMode==="diff"&&t&&(!r.baseSnapshotVersion||t.snapshotVersion===r.baseSnapshotVersion))||!t?g(r):{...g(t),snapshotVersion:r.snapshotVersion,updatedAt:r.updatedAt,...r.gatewayVersion!==void 0?{gatewayVersion:r.gatewayVersion}:{},...r.syncMode?{syncMode:r.syncMode}:{},...r.baseSnapshotVersion?{baseSnapshotVersion:r.baseSnapshotVersion}:{},...r.changedSections?{changedSections:[...r.changedSections]}:{},...r.toolNamespaces?{toolNamespaces:[...r.toolNamespaces]}:{},...r.workspaceIds?{workspaceIds:[...r.workspaceIds]}:{},...r.installedCapabilities?{installedCapabilities:[...r.installedCapabilities]}:{},...r.enabledCapabilities?{enabledCapabilities:[...r.enabledCapabilities]}:{},...r.features?{features:[...r.features]}:{},...r.approvalMode?{approvalMode:r.approvalMode}:{},...r.toolManifests?{toolManifests:d(r.toolManifests)}:{},...r.skillManifests?{skillManifests:d(r.skillManifests)}:{},...r.pluginManifests?{pluginManifests:d(r.pluginManifests)}:{},...r.mcpManifests?{mcpManifests:d(r.mcpManifests)}:{},...r.approvalPolicy?{approvalPolicy:{...r.approvalPolicy}}:{},...r.workspaceSummaries?{workspaceSummaries:A(r.workspaceSummaries)}:{}}}function ee(e){return k(e.map(t=>t.name.split(".")[0]??"").filter(Boolean))}function te(e){return k(e.map(t=>t.id))}function re(e){let{previous:t,current:r}=e;if(!t)return{...g(r),syncMode:"full"};if(t.snapshotVersion===r.snapshotVersion)return null;let i=f.filter(n=>JSON.stringify(t[n])!==JSON.stringify(r[n]));if(i.length===f.length)return{...g(r),syncMode:"full"};let u={snapshotVersion:r.snapshotVersion,updatedAt:r.updatedAt,syncMode:"diff",baseSnapshotVersion:t.snapshotVersion,changedSections:i,toolNamespaces:[...r.toolNamespaces],workspaceIds:[...r.workspaceIds]},p=u;for(let n of i){let o=r[n];if(o!==void 0)switch(n){case"toolNamespaces":case"workspaceIds":case"installedCapabilities":case"enabledCapabilities":case"features":p[n]=Q(o);break;case"approvalPolicy":p[n]={...o};break;case"workspaceSummaries":p[n]=A(o);break;case"toolManifests":case"skillManifests":case"pluginManifests":case"mcpManifests":p[n]=d(o);break;default:p[n]=o;break}}return u}var oe=["web_search","web_fetch","deep_research","browser_execution"],ie=["web-intelligence","browser-execution"],ne=["discovery","read-url","multi-source-research","interactive-browser"],se=["stateless","render-backend","interactive-session"],ae=["stateless","stateless-single-step","stateful-session-required"],pe=["required","conditional","none"],ce=["browser-read","browser-authenticated-read","browser-state-changing"],le=["read-page","read-authenticated-page","fill-form","submit-form","download-file","reuse-session"],de=["web_search","web_fetch","deep_research","blocked"],ue=["requires-interaction","requires-login-state","requires-rendered-dom","requires-persistent-session","requires-state-changing-action"],ge=["none","same-capability-once","degrade-only"];var ye=["prefetch","sync_turn","on_pre_compress","on_session_end","on_delegation","on_memory_write"],me=["turn","sidechain","compress","session-end","agent-remember","auto-extract","implicit-extract","profile-extraction","dream"],fe=["observe-only","parent-write","deny"];var Ae=2,s={gatewayImage:"gateway.image.desktop-slim",whisperModelTiny:"speech.whisper.model.tiny",ffmpegWin32X64:"runtime.ffmpeg.win32-x64",nodeWin32X64:"runtime.node.win32-x64",dockerDesktopWin32X64:"runtime.docker-desktop.win32-x64",dockerDesktopDarwinX64:"runtime.docker-desktop.darwin-x64",dockerDesktopDarwinArm64:"runtime.docker-desktop.darwin-arm64"},y={desktopDockerBridge:"desktop.docker-bridge",desktopEmbeddedWin32X64:"desktop.embedded.win32-x64"};function O(e){return{...e,artifacts:e.artifacts.map(t=>({...t}))}}function Re(e){return{...e,assetIds:[...e.assetIds]}}function N(){return{[y.desktopDockerBridge]:{id:y.desktopDockerBridge,title:"Desktop Docker Bridge",platform:"any",assetIds:[s.gatewayImage,s.dockerDesktopWin32X64,s.dockerDesktopDarwinX64,s.dockerDesktopDarwinArm64],description:"Docker bridge mode downloads the desktop slim gateway image on demand."},[y.desktopEmbeddedWin32X64]:{id:y.desktopEmbeddedWin32X64,title:"Desktop Embedded Win32 x64",platform:"win32-x64",assetIds:[s.nodeWin32X64,s.ffmpegWin32X64,s.whisperModelTiny],description:"Embedded desktop mode requires the bundled Node/FFmpeg runtimes and the whisper model asset."}}}function D(e,t){return e.assets[t]}function w(e,t){return e.profiles[t]}function Ee(e,t){let r=w(e,t);return r?r.assetIds.map(i=>D(e,i)).filter(i=>!!i):[]}function Se(e,t){return e.assets[t.id]=O(t),U(e)}function R(e){if(!e)return;let t=e.artifacts[0];if(!(!t?.url||!t.sha256||typeof t.size!="number"))return{version:e.version,sha256:t.sha256,size:t.size,url:t.url}}function U(e){let t=R(e.assets[s.gatewayImage]),r=R(e.assets[s.whisperModelTiny]);return{...e,gateway:t,whisperModel:r}}function x(e,t){if(!(typeof e.version!="string"||typeof e.url!="string"))return{...t,version:e.version,artifacts:[{fileName:e.url.split("/").pop()||`${t.id}.bin`,url:e.url,sha256:typeof e.sha256=="string"?e.sha256:void 0,size:typeof e.size=="number"?e.size:void 0}]}}function _e(e){let t=e&&typeof e=="object"?e:{},r={},i=t.assets&&typeof t.assets=="object"?t.assets:{};for(let[o,a]of Object.entries(i)){if(!a||typeof a!="object")continue;let l=a;!l.id||!Array.isArray(l.artifacts)||(r[o]=O(l))}if(!r[s.gatewayImage]&&t.gateway&&typeof t.gateway=="object"){let o=x(t.gateway,{id:s.gatewayImage,title:"OpenClaw Gateway Image (Desktop Slim)",kind:"container-image",delivery:"remote",platform:"any",description:"Desktop Docker mode gateway image."});o&&(r[o.id]=o)}if(!r[s.whisperModelTiny]&&t.whisperModel&&typeof t.whisperModel=="object"){let o=x(t.whisperModel,{id:s.whisperModelTiny,title:"Whisper Tiny Model",kind:"model",delivery:"remote",platform:"any",description:"Shared whisper.cpp tiny model asset for embedded desktop speech recognition."});o&&(r[o.id]=o)}let p={...N()},n=t.profiles&&typeof t.profiles=="object"?t.profiles:{};for(let[o,a]of Object.entries(n)){if(!a||typeof a!="object")continue;let l=a;!l.id||!Array.isArray(l.assetIds)||(p[o]=Re(l))}return U({schemaVersion:typeof t.schemaVersion=="number"?t.schemaVersion:2,channel:typeof t.channel=="string"?t.channel:void 0,publishedAt:typeof t.publishedAt=="string"?t.publishedAt:void 0,minElectronVersion:typeof t.minElectronVersion=="string"?t.minElectronVersion:void 0,releaseNotes:typeof t.releaseNotes=="string"?t.releaseNotes:void 0,assets:r,profiles:p})}var Pe=["pending","captured","failed","restored"],Te=["file","directory","missing"],Ce=["metadata-only","workspace-copy","shadow-git"];var be=["api-key","oauth","token","aws-sdk"],Ie=["rate_limit","auth","server_error","timeout","network","unknown"],ve=["requiresOpenAiAnthropicToolPayload"];function Me(e,t){return!e||typeof e!="object"||Array.isArray(e)?!1:e[t]===!0}var L="openai-codex";function m(e){let t=e.trim().toLowerCase();return t==="z.ai"||t==="z-ai"?"zai":t==="opencode-zen"?"opencode":t==="kimi-code"?"kimi-coding":t==="bedrock"||t==="aws-bedrock"?"amazon-bedrock":t==="bytedance"||t==="doubao"?"volcengine":t}function K(e){let t=m(e);return t==="volcengine-plan"?"volcengine":t==="byteplus-plan"?"byteplus":t}var he=K,ke={anthropicToolSchemaMode:"native",anthropicToolChoiceMode:"native",providerFamily:"default",preserveAnthropicThinkingSignatures:!0,openAiCompatTurnValidation:!0,providerThoughtSignatureSanitization:!1,transcriptToolCallIdMode:"default",transcriptToolCallIdModelHints:[],providerThoughtSignatureModelHints:[],dropThinkingBlockModelHints:[]},xe={anthropic:{providerFamily:"anthropic"},"amazon-bedrock":{providerFamily:"anthropic"},"kimi-coding":{anthropicToolSchemaMode:"openai-functions",anthropicToolChoiceMode:"openai-string-modes",preserveAnthropicThinkingSignatures:!1},mistral:{transcriptToolCallIdMode:"strict9",transcriptToolCallIdModelHints:["mistral","mixtral","codestral","pixtral","devstral","ministral","mistralai"]},openai:{providerFamily:"openai"},[L]:{providerFamily:"openai"},openrouter:{openAiCompatTurnValidation:!1,providerThoughtSignatureSanitization:!0,providerThoughtSignatureModelHints:["gemini"]},opencode:{openAiCompatTurnValidation:!1,providerThoughtSignatureSanitization:!0,providerThoughtSignatureModelHints:["gemini"]},kilocode:{providerThoughtSignatureSanitization:!0,providerThoughtSignatureModelHints:["gemini"]}};function E(e,t){let r=(e??"").toLowerCase();return!!r&&t.some(i=>r.includes(i))}function c(e){let t=m(e??"");return{...ke,...xe[t]}}function Oe(e){return c(e).preserveAnthropicThinkingSignatures}function Ne(e){let t=c(e);return t.anthropicToolSchemaMode!=="native"||t.anthropicToolChoiceMode!=="native"}function De(e){return c(e).anthropicToolSchemaMode==="openai-functions"}function we(e){return c(e).anthropicToolChoiceMode==="openai-string-modes"}function Ue(e){return c(e).openAiCompatTurnValidation}function Le(e){return c(e).providerFamily==="openai"}function Ke(e){return c(e).providerFamily==="anthropic"}function Ve(e){return E(e.modelId,c(e.provider).dropThinkingBlockModelHints)}function We(e){let t=c(e.provider);return t.providerThoughtSignatureSanitization&&E(e.modelId,t.providerThoughtSignatureModelHints)}function Fe(e,t){let r=c(e),i=r.transcriptToolCallIdMode;if(i==="strict9")return i;if(E(t,r.transcriptToolCallIdModelHints))return"strict9"}var S={anthropic:["ANTHROPIC_OAUTH_TOKEN","ANTHROPIC_API_KEY"],chutes:["CHUTES_OAUTH_TOKEN","CHUTES_API_KEY"],zai:["ZAI_API_KEY","Z_AI_API_KEY"],opencode:["OPENCODE_API_KEY","OPENCODE_ZEN_API_KEY"],volcengine:["VOLCANO_ENGINE_API_KEY"],"volcengine-plan":["VOLCANO_ENGINE_API_KEY"],byteplus:["BYTEPLUS_API_KEY"],"byteplus-plan":["BYTEPLUS_API_KEY"],"kimi-coding":["KIMI_API_KEY","KIMICODE_API_KEY"],huggingface:["HUGGINGFACE_HUB_TOKEN","HF_TOKEN"],openai:["OPENAI_API_KEY"],voyage:["VOYAGE_API_KEY"],groq:["GROQ_API_KEY"],deepgram:["DEEPGRAM_API_KEY"],cerebras:["CEREBRAS_API_KEY"],xai:["XAI_API_KEY"],openrouter:["OPENROUTER_API_KEY"],litellm:["LITELLM_API_KEY"],"vercel-ai-gateway":["AI_GATEWAY_API_KEY"],"cloudflare-ai-gateway":["CLOUDFLARE_AI_GATEWAY_API_KEY"],moonshot:["MOONSHOT_API_KEY"],minimax:["MINIMAX_API_KEY"],"minimax-cn":["MINIMAX_CN_API_KEY","MINIMAX_API_KEY"],nvidia:["NVIDIA_API_KEY"],xiaomi:["XIAOMI_API_KEY"],synthetic:["SYNTHETIC_API_KEY"],venice:["VENICE_API_KEY"],mistral:["MISTRAL_API_KEY"],together:["TOGETHER_API_KEY"],qianfan:["QIANFAN_API_KEY"],ollama:["OLLAMA_API_KEY"],vllm:["VLLM_API_KEY"],kilocode:["KILOCODE_API_KEY"]};function Be(){return[...new Set(Object.values(S).flat())]}function je(e){let t=m(e.provider),r=e.env??process.env,i=new Set(e.appliedEnvKeys??[]),u=o=>{let a=r[o]?.trim();if(!a)return null;let l=i.has(o)?`shell env: ${o}`:`env: ${o}`;return{apiKey:a,source:l}},p=e.resolveSpecialApiKey?.(t,r,i);if(p)return p;let n=S[t];if(!n||n.length===0)return null;for(let o of n){let a=u(o);if(a)return a}return null}export{G as ACP_EXTENDED_METHODS,q as ACP_EXTENDED_SESSION_UPDATE_TYPES,H as ACP_METHODS,X as ACP_PROTOCOL_VERSION,I as ACP_SESSION_UPDATE_TYPES,F as AGENT_RPC_APPROVAL_METHODS,W as AGENT_RPC_ERROR_CODES,V as AGENT_RPC_PROTOCOL_VERSION,b as AGENT_TEAM_WS_EVENT_NAMES,C as AGENT_WS_EVENT_NAMES,Y as ALL_AGENT_WS_EVENT_NAMES,f as CAPABILITY_MANIFEST_DIFF_SECTIONS,j as GATEWAY_RPC_METHODS,ye as MEMORY_OBSERVATION_HOOK_VALUES,me as MEMORY_OBSERVATION_SOURCE_VALUES,fe as MEMORY_WRITE_ACCESS_VALUES,Ce as MUTATION_CHECKPOINT_BACKEND_VALUES,Te as MUTATION_CHECKPOINT_ENTRY_KIND_VALUES,Pe as MUTATION_CHECKPOINT_PHASE_VALUES,be as PROVIDER_RUNTIME_AUTH_MODE_VALUES,ve as PROVIDER_RUNTIME_COMPAT_FLAG_VALUES,S as PROVIDER_RUNTIME_ENV_API_KEY_CANDIDATES,L as PROVIDER_RUNTIME_OPENAI_CODEX_PROVIDER_ID,Ie as PROVIDER_RUNTIME_VAULT_ERROR_TYPE_VALUES,Ae as RESOURCE_MANIFEST_SCHEMA_VERSION,s as RUNTIME_ASSET_IDS,y as RUNTIME_PROFILE_IDS,le as WEB_ACTION_SCOPE_VALUES,pe as WEB_APPROVAL_DEFAULT_VALUES,ie as WEB_CAPABILITY_FAMILY_VALUES,oe as WEB_CAPABILITY_ID_VALUES,de as WEB_DEGRADATION_TARGET_VALUES,ue as WEB_ESCALATION_REASON_VALUES,se as WEB_EXECUTION_MODE_VALUES,ce as WEB_POLICY_RISK_CLASS_VALUES,ge as WEB_RETRY_POLICY_VALUES,ae as WEB_STATEFULNESS_VALUES,ne as WEB_TASK_MODE_VALUES,g as cloneCapabilityManifestSnapshot,re as createCapabilityManifestDiffPayload,N as createDefaultRuntimeResourceProfiles,ee as deriveCapabilityToolNamespaces,te as deriveCapabilityWorkspaceIds,R as getManifestShortcutEntry,D as getRuntimeResourceAsset,w as getRuntimeResourceProfile,Ee as getRuntimeResourceProfileAssets,M as isAcpJsonRpcNotification,v as isAcpJsonRpcRequest,h as isAcpJsonRpcResponse,T as isAgentRpcNotification,_ as isAgentRpcRequest,P as isAgentRpcResponse,Ke as isAnthropicProviderRuntimeFamily,$ as isExtendedSessionUpdateType,Le as isOpenAiProviderRuntimeFamily,J as isStandardSessionUpdateType,Be as listProviderRuntimeEnvApiKeyNames,Z as mergeCapabilityManifestSnapshot,m as normalizeProviderRuntimeId,K as normalizeProviderRuntimeIdForAuth,_e as normalizeRuntimeResourceManifest,z as parseAcpMessage,B as parseAgentRpcMessage,Oe as preservesProviderRuntimeAnthropicThinkingSignatures,Me as readProviderRuntimeCompatFlag,Ne as requiresOpenAiCompatibleAnthropicToolPayloadForProviderRuntime,c as resolveProviderRuntimeCapabilities,je as resolveProviderRuntimeEnvApiKey,he as resolveProviderRuntimeKeyFamily,Fe as resolveProviderRuntimeTranscriptToolCallIdMode,Ve as shouldDropThinkingBlocksForProviderRuntimeModel,We as shouldSanitizeProviderRuntimeThoughtSignaturesForModel,Ue as supportsOpenAiCompatTurnValidationForProviderRuntime,Se as upsertRuntimeResourceAsset,De as usesOpenAiFunctionAnthropicToolSchemaForProviderRuntime,we as usesOpenAiStringModeAnthropicToolChoiceForProviderRuntime};
1
+ var V="1.0.0",W={PARSE_ERROR:-32700,INVALID_REQUEST:-32600,METHOD_NOT_FOUND:-32601,INVALID_PARAMS:-32602,INTERNAL_ERROR:-32603,TURN_ABORTED:-32e3,TURN_TIMEOUT:-32001,LLM_ERROR:-32010,LLM_AUTH_ERROR:-32011,LLM_RATE_LIMIT:-32012,LLM_QUOTA_EXHAUSTED:-32013,LLM_MODEL_NOT_FOUND:-32014,TOOL_INVOKE_FAILED:-32020,TOOL_TIMEOUT:-32021,PROTOCOL_MISMATCH:-32030},F={REQUEST:"tool.approval.request",RESPONSE:"tool.approval.response"};function _(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&t.method.length>0}function P(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&(typeof t.id=="string"||typeof t.id=="number")&&!("method"in t)}function T(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&!("id"in t)}function B(e){let t;try{t=JSON.parse(e)}catch{return null}return P(t)||_(t)||T(t)?t:null}var j=["session.list","session.get","session.create","session.update","session.delete","session.deleteAll","session.archive","session.moveToProject","session.getState","session.switchProject","session.getMessages","project.list","project.create","project.delete","project.rename","project.archive","project.unarchive","project.update","project.archiveByGroup","project.purgeAll","instructions.list","instructions.read","instructions.write","instructions.delete","files.list","files.read","files.create","files.rename","files.delete","files.gitStatus","skills.list","memory.list-files","memory.atlas","memory.activity","memory.addManual"];var C=["turn.start","turn.delta","turn.end","turn.error","turn.recovery","turn.tool_call","turn.tool_result","turn.tool_blocked","turn.reasoning_delta","turn.approval_request","turn.skill_instruction","turn.ask_user","turn.media_result","turn.media_progress","turn.plan_update","turn.suggestions","turn.sidechain_started","turn.subagent_delta","turn.sidechain_completed","turn.task_updated","turn.todos_updated","turn.exec_progress","turn.usage_update","team.member.notification","session.info","memory.updated","skills.updated","pet.soul_ready","pet.reaction","pet.growth","pet.state","pet.confirm","pet.forged","system.activity"],b=["solo.progress","solo.agentDelta","solo.agentUsage","solo.agentDiff","solo.evaluation","product.taskStarted","product.taskOutput","product.taskCompleted","product.taskFailed","product.budgetUpdate","product.checkpointed","product.dagTopology","plan.interrupted"],Y=[...C,...b];var X=1,H={INITIALIZE:"initialize",SESSION_NEW:"session/new",SESSION_PROMPT:"session/prompt",SESSION_END:"session/end",SESSION_SET_CONFIG:"session/set_config_option",SESSION_SET_MODEL:"session/set_model",SESSION_SET_MODE:"session/set_mode",SESSION_UPDATE:"session/update",SESSION_REQUEST_PERMISSION:"session/request_permission",FS_READ_TEXT_FILE:"fs/read_text_file",FS_WRITE_TEXT_FILE:"fs/write_text_file"},G={ABORT:"x/abort",DREAM:"x/dream",AGENTS_LIST:"x/agents.list",SOLO_START:"x/solo.start",SOLO_STATUS:"x/solo.status",SOLO_SELECT:"x/solo.select",SOLO_CANCEL:"x/solo.cancel",PRODUCT_CREATE:"x/product.create",PRODUCT_PLAN:"x/product.plan",PRODUCT_CONFIRM:"x/product.confirm",PRODUCT_MESSAGE:"x/product.message",PRODUCT_RESUME:"x/product.resume",PRODUCT_PAUSE:"x/product.pause",PRODUCT_CANCEL:"x/product.cancel",PRODUCT_ROLLBACK:"x/product.rollback",PRODUCT_STATUS:"x/product.status",SOLO_SUBSCRIBE:"x/solo.subscribe",SOLO_MESSAGE:"x/solo.message",SOLO_EVALUATE:"x/solo.evaluate",PRODUCT_SUBSCRIBE:"x/product.subscribe",TEAM_DELEGATE:"x/team.delegate"},I={AGENT_MESSAGE_CHUNK:"agent_message_chunk",AGENT_THOUGHT_CHUNK:"agent_thought_chunk",TOOL_CALL:"tool_call",TOOL_CALL_UPDATE:"tool_call_update",PLAN:"plan",USAGE_UPDATE:"usage_update",CONFIG_OPTION_UPDATE:"config_option_update",SESSION_INFO_UPDATE:"session_info_update",AVAILABLE_COMMANDS_UPDATE:"available_commands_update"},q={X_SUBAGENT_STARTED:"x_subagent_started",X_SUBAGENT_DELTA:"x_subagent_delta",X_SUBAGENT_ENDED:"x_subagent_ended",X_MEDIA_RESULT:"x_media_result",X_MEDIA_PROGRESS:"x_media_progress",X_SKILL_INSTRUCTION:"x_skill_instruction",X_RECOVERY:"x_recovery",X_SIDECHAIN_STARTED:"x_sidechain_started",X_SIDECHAIN_COMPLETED:"x_sidechain_completed",X_SUGGESTIONS:"x_suggestions",X_ASK_USER:"x_ask_user",X_SESSION_INFO:"x_session_info",X_MEMORY_UPDATED:"x_memory_updated",X_TEAM_MEMBER_UPDATE:"x_team_member_update",X_SOLO_STARTED:"x_solo_started",X_SOLO_AGENT_FINISHED:"x_solo_agent_finished",X_SOLO_SELECTED:"x_solo_selected",X_PRODUCT_TASK_STARTED:"x_product_task_started",X_PRODUCT_TASK_COMPLETED:"x_product_task_completed",X_PRODUCT_CHECKPOINT:"x_product_checkpoint"};function v(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&"id"in t}function M(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&!("id"in t)}function h(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&"id"in t&&!("method"in t)}function z(e){let t;try{t=JSON.parse(e)}catch{return null}return h(t)||v(t)||M(t)?t:null}function J(e){return Object.values(I).includes(e)}function $(e){return e.startsWith("x_")}var f=["gatewayVersion","toolNamespaces","workspaceIds","installedCapabilities","enabledCapabilities","features","approvalMode","toolManifests","skillManifests","pluginManifests","mcpManifests","approvalPolicy","workspaceSummaries"];function d(e){return e?e.map(t=>({...t})):void 0}function A(e){return e?e.map(t=>({...t})):void 0}function Q(e){return e?[...e]:void 0}function k(e){return[...new Set(e.map(t=>t.trim()).filter(Boolean))].sort((t,r)=>t.localeCompare(r))}function g(e){return{...e,toolNamespaces:[...e.toolNamespaces],workspaceIds:[...e.workspaceIds],...e.changedSections?{changedSections:[...e.changedSections]}:{},...e.installedCapabilities?{installedCapabilities:[...e.installedCapabilities]}:{},...e.enabledCapabilities?{enabledCapabilities:[...e.enabledCapabilities]}:{},...e.features?{features:[...e.features]}:{},...e.toolManifests?{toolManifests:d(e.toolManifests)}:{},...e.skillManifests?{skillManifests:d(e.skillManifests)}:{},...e.pluginManifests?{pluginManifests:d(e.pluginManifests)}:{},...e.mcpManifests?{mcpManifests:d(e.mcpManifests)}:{},...e.approvalPolicy?{approvalPolicy:{...e.approvalPolicy}}:{},...e.workspaceSummaries?{workspaceSummaries:A(e.workspaceSummaries)}:{}}}function Z(e){let{previous:t,update:r}=e;return!(r.syncMode==="diff"&&t&&(!r.baseSnapshotVersion||t.snapshotVersion===r.baseSnapshotVersion))||!t?g(r):{...g(t),snapshotVersion:r.snapshotVersion,updatedAt:r.updatedAt,...r.gatewayVersion!==void 0?{gatewayVersion:r.gatewayVersion}:{},...r.syncMode?{syncMode:r.syncMode}:{},...r.baseSnapshotVersion?{baseSnapshotVersion:r.baseSnapshotVersion}:{},...r.changedSections?{changedSections:[...r.changedSections]}:{},...r.toolNamespaces?{toolNamespaces:[...r.toolNamespaces]}:{},...r.workspaceIds?{workspaceIds:[...r.workspaceIds]}:{},...r.installedCapabilities?{installedCapabilities:[...r.installedCapabilities]}:{},...r.enabledCapabilities?{enabledCapabilities:[...r.enabledCapabilities]}:{},...r.features?{features:[...r.features]}:{},...r.approvalMode?{approvalMode:r.approvalMode}:{},...r.toolManifests?{toolManifests:d(r.toolManifests)}:{},...r.skillManifests?{skillManifests:d(r.skillManifests)}:{},...r.pluginManifests?{pluginManifests:d(r.pluginManifests)}:{},...r.mcpManifests?{mcpManifests:d(r.mcpManifests)}:{},...r.approvalPolicy?{approvalPolicy:{...r.approvalPolicy}}:{},...r.workspaceSummaries?{workspaceSummaries:A(r.workspaceSummaries)}:{}}}function ee(e){return k(e.map(t=>t.name.split(".")[0]??"").filter(Boolean))}function te(e){return k(e.map(t=>t.id))}function re(e){let{previous:t,current:r}=e;if(!t)return{...g(r),syncMode:"full"};if(t.snapshotVersion===r.snapshotVersion)return null;let i=f.filter(n=>JSON.stringify(t[n])!==JSON.stringify(r[n]));if(i.length===f.length)return{...g(r),syncMode:"full"};let u={snapshotVersion:r.snapshotVersion,updatedAt:r.updatedAt,syncMode:"diff",baseSnapshotVersion:t.snapshotVersion,changedSections:i,toolNamespaces:[...r.toolNamespaces],workspaceIds:[...r.workspaceIds]},p=u;for(let n of i){let o=r[n];if(o!==void 0)switch(n){case"toolNamespaces":case"workspaceIds":case"installedCapabilities":case"enabledCapabilities":case"features":p[n]=Q(o);break;case"approvalPolicy":p[n]={...o};break;case"workspaceSummaries":p[n]=A(o);break;case"toolManifests":case"skillManifests":case"pluginManifests":case"mcpManifests":p[n]=d(o);break;default:p[n]=o;break}}return u}var oe=["web_search","web_fetch","deep_research","browser_execution"],ie=["web-intelligence","browser-execution"],ne=["discovery","read-url","multi-source-research","interactive-browser"],se=["stateless","render-backend","interactive-session"],ae=["stateless","stateless-single-step","stateful-session-required"],pe=["required","conditional","none"],ce=["browser-read","browser-authenticated-read","browser-state-changing"],le=["read-page","read-authenticated-page","fill-form","submit-form","download-file","reuse-session"],de=["web_search","web_fetch","deep_research","blocked"],ue=["requires-interaction","requires-login-state","requires-rendered-dom","requires-persistent-session","requires-state-changing-action"],ge=["none","same-capability-once","degrade-only"];var ye=["prefetch","sync_turn","on_pre_compress","on_session_end","on_delegation","on_memory_write"],me=["turn","sidechain","compress","session-end","agent-remember","auto-extract","implicit-extract","profile-extraction","dream"],fe=["observe-only","parent-write","deny"];var Ae=2,s={gatewayImage:"gateway.image.desktop-slim",whisperModelTiny:"speech.whisper.model.tiny",ffmpegWin32X64:"runtime.ffmpeg.win32-x64",nodeWin32X64:"runtime.node.win32-x64",dockerDesktopWin32X64:"runtime.docker-desktop.win32-x64",dockerDesktopDarwinX64:"runtime.docker-desktop.darwin-x64",dockerDesktopDarwinArm64:"runtime.docker-desktop.darwin-arm64"},y={desktopDockerBridge:"desktop.docker-bridge",desktopEmbeddedWin32X64:"desktop.embedded.win32-x64"};function O(e){return{...e,artifacts:e.artifacts.map(t=>({...t}))}}function Re(e){return{...e,assetIds:[...e.assetIds]}}function N(){return{[y.desktopDockerBridge]:{id:y.desktopDockerBridge,title:"Desktop Docker Bridge",platform:"any",assetIds:[s.gatewayImage,s.dockerDesktopWin32X64,s.dockerDesktopDarwinX64,s.dockerDesktopDarwinArm64],description:"Docker bridge mode downloads the desktop slim gateway image on demand."},[y.desktopEmbeddedWin32X64]:{id:y.desktopEmbeddedWin32X64,title:"Desktop Embedded Win32 x64",platform:"win32-x64",assetIds:[s.nodeWin32X64,s.ffmpegWin32X64,s.whisperModelTiny],description:"Embedded desktop mode requires the bundled Node/FFmpeg runtimes and the whisper model asset."}}}function D(e,t){return e.assets[t]}function w(e,t){return e.profiles[t]}function Ee(e,t){let r=w(e,t);return r?r.assetIds.map(i=>D(e,i)).filter(i=>!!i):[]}function Se(e,t){return e.assets[t.id]=O(t),U(e)}function R(e){if(!e)return;let t=e.artifacts[0];if(!(!t?.url||!t.sha256||typeof t.size!="number"))return{version:e.version,sha256:t.sha256,size:t.size,url:t.url}}function U(e){let t=R(e.assets[s.gatewayImage]),r=R(e.assets[s.whisperModelTiny]);return{...e,gateway:t,whisperModel:r}}function x(e,t){if(!(typeof e.version!="string"||typeof e.url!="string"))return{...t,version:e.version,artifacts:[{fileName:e.url.split("/").pop()||`${t.id}.bin`,url:e.url,sha256:typeof e.sha256=="string"?e.sha256:void 0,size:typeof e.size=="number"?e.size:void 0}]}}function _e(e){let t=e&&typeof e=="object"?e:{},r={},i=t.assets&&typeof t.assets=="object"?t.assets:{};for(let[o,a]of Object.entries(i)){if(!a||typeof a!="object")continue;let l=a;!l.id||!Array.isArray(l.artifacts)||(r[o]=O(l))}if(!r[s.gatewayImage]&&t.gateway&&typeof t.gateway=="object"){let o=x(t.gateway,{id:s.gatewayImage,title:"OpenClaw Gateway Image (Desktop Slim)",kind:"container-image",delivery:"remote",platform:"any",description:"Desktop Docker mode gateway image."});o&&(r[o.id]=o)}if(!r[s.whisperModelTiny]&&t.whisperModel&&typeof t.whisperModel=="object"){let o=x(t.whisperModel,{id:s.whisperModelTiny,title:"Whisper Tiny Model",kind:"model",delivery:"remote",platform:"any",description:"Shared whisper.cpp tiny model asset for embedded desktop speech recognition."});o&&(r[o.id]=o)}let p={...N()},n=t.profiles&&typeof t.profiles=="object"?t.profiles:{};for(let[o,a]of Object.entries(n)){if(!a||typeof a!="object")continue;let l=a;!l.id||!Array.isArray(l.assetIds)||(p[o]=Re(l))}return U({schemaVersion:typeof t.schemaVersion=="number"?t.schemaVersion:2,channel:typeof t.channel=="string"?t.channel:void 0,publishedAt:typeof t.publishedAt=="string"?t.publishedAt:void 0,minElectronVersion:typeof t.minElectronVersion=="string"?t.minElectronVersion:void 0,releaseNotes:typeof t.releaseNotes=="string"?t.releaseNotes:void 0,assets:r,profiles:p})}var Pe=["pending","captured","failed","restored"],Te=["file","directory","missing"],Ce=["metadata-only","workspace-copy","shadow-git"];var be=["api-key","oauth","token","aws-sdk"],Ie=["rate_limit","auth","server_error","timeout","network","unknown"],ve=["requiresOpenAiAnthropicToolPayload"];function Me(e,t){return!e||typeof e!="object"||Array.isArray(e)?!1:e[t]===!0}var L="openai-codex";function m(e){let t=e.trim().toLowerCase();return t==="z.ai"||t==="z-ai"?"zai":t==="opencode-zen"?"opencode":t==="kimi-code"?"kimi-coding":t==="bedrock"||t==="aws-bedrock"?"amazon-bedrock":t==="bytedance"||t==="doubao"?"volcengine":t}function K(e){let t=m(e);return t==="volcengine-plan"?"volcengine":t==="byteplus-plan"?"byteplus":t}var he=K,ke={anthropicToolSchemaMode:"native",anthropicToolChoiceMode:"native",providerFamily:"default",preserveAnthropicThinkingSignatures:!0,openAiCompatTurnValidation:!0,providerThoughtSignatureSanitization:!1,transcriptToolCallIdMode:"default",transcriptToolCallIdModelHints:[],providerThoughtSignatureModelHints:[],dropThinkingBlockModelHints:[]},xe={anthropic:{providerFamily:"anthropic"},"amazon-bedrock":{providerFamily:"anthropic"},"kimi-coding":{anthropicToolSchemaMode:"openai-functions",anthropicToolChoiceMode:"openai-string-modes",preserveAnthropicThinkingSignatures:!1},mistral:{transcriptToolCallIdMode:"strict9",transcriptToolCallIdModelHints:["mistral","mixtral","codestral","pixtral","devstral","ministral","mistralai"]},openai:{providerFamily:"openai"},[L]:{providerFamily:"openai"},openrouter:{openAiCompatTurnValidation:!1,providerThoughtSignatureSanitization:!0,providerThoughtSignatureModelHints:["gemini"]},opencode:{openAiCompatTurnValidation:!1,providerThoughtSignatureSanitization:!0,providerThoughtSignatureModelHints:["gemini"]},kilocode:{providerThoughtSignatureSanitization:!0,providerThoughtSignatureModelHints:["gemini"]}};function E(e,t){let r=(e??"").toLowerCase();return!!r&&t.some(i=>r.includes(i))}function c(e){let t=m(e??"");return{...ke,...xe[t]}}function Oe(e){return c(e).preserveAnthropicThinkingSignatures}function Ne(e){let t=c(e);return t.anthropicToolSchemaMode!=="native"||t.anthropicToolChoiceMode!=="native"}function De(e){return c(e).anthropicToolSchemaMode==="openai-functions"}function we(e){return c(e).anthropicToolChoiceMode==="openai-string-modes"}function Ue(e){return c(e).openAiCompatTurnValidation}function Le(e){return c(e).providerFamily==="openai"}function Ke(e){return c(e).providerFamily==="anthropic"}function Ve(e){return E(e.modelId,c(e.provider).dropThinkingBlockModelHints)}function We(e){let t=c(e.provider);return t.providerThoughtSignatureSanitization&&E(e.modelId,t.providerThoughtSignatureModelHints)}function Fe(e,t){let r=c(e),i=r.transcriptToolCallIdMode;if(i==="strict9")return i;if(E(t,r.transcriptToolCallIdModelHints))return"strict9"}var S={anthropic:["ANTHROPIC_OAUTH_TOKEN","ANTHROPIC_API_KEY"],chutes:["CHUTES_OAUTH_TOKEN","CHUTES_API_KEY"],zai:["ZAI_API_KEY","Z_AI_API_KEY"],opencode:["OPENCODE_API_KEY","OPENCODE_ZEN_API_KEY"],volcengine:["VOLCANO_ENGINE_API_KEY"],"volcengine-plan":["VOLCANO_ENGINE_API_KEY"],byteplus:["BYTEPLUS_API_KEY"],"byteplus-plan":["BYTEPLUS_API_KEY"],"kimi-coding":["KIMI_API_KEY","KIMICODE_API_KEY"],huggingface:["HUGGINGFACE_HUB_TOKEN","HF_TOKEN"],openai:["OPENAI_API_KEY"],voyage:["VOYAGE_API_KEY"],groq:["GROQ_API_KEY"],deepgram:["DEEPGRAM_API_KEY"],cerebras:["CEREBRAS_API_KEY"],xai:["XAI_API_KEY"],openrouter:["OPENROUTER_API_KEY"],litellm:["LITELLM_API_KEY"],"vercel-ai-gateway":["AI_GATEWAY_API_KEY"],"cloudflare-ai-gateway":["CLOUDFLARE_AI_GATEWAY_API_KEY"],moonshot:["MOONSHOT_API_KEY"],minimax:["MINIMAX_API_KEY"],"minimax-cn":["MINIMAX_CN_API_KEY","MINIMAX_API_KEY"],nvidia:["NVIDIA_API_KEY"],xiaomi:["XIAOMI_API_KEY"],synthetic:["SYNTHETIC_API_KEY"],venice:["VENICE_API_KEY"],mistral:["MISTRAL_API_KEY"],together:["TOGETHER_API_KEY"],qianfan:["QIANFAN_API_KEY"],ollama:["OLLAMA_API_KEY"],vllm:["VLLM_API_KEY"],kilocode:["KILOCODE_API_KEY"]};function Be(){return[...new Set(Object.values(S).flat())]}function je(e){let t=m(e.provider),r=e.env??process.env,i=new Set(e.appliedEnvKeys??[]),u=o=>{let a=r[o]?.trim();if(!a)return null;let l=i.has(o)?`shell env: ${o}`:`env: ${o}`;return{apiKey:a,source:l}},p=e.resolveSpecialApiKey?.(t,r,i);if(p)return p;let n=S[t];if(!n||n.length===0)return null;for(let o of n){let a=u(o);if(a)return a}return null}export{G as ACP_EXTENDED_METHODS,q as ACP_EXTENDED_SESSION_UPDATE_TYPES,H as ACP_METHODS,X as ACP_PROTOCOL_VERSION,I as ACP_SESSION_UPDATE_TYPES,F as AGENT_RPC_APPROVAL_METHODS,W as AGENT_RPC_ERROR_CODES,V as AGENT_RPC_PROTOCOL_VERSION,b as AGENT_TEAM_WS_EVENT_NAMES,C as AGENT_WS_EVENT_NAMES,Y as ALL_AGENT_WS_EVENT_NAMES,f as CAPABILITY_MANIFEST_DIFF_SECTIONS,j as GATEWAY_RPC_METHODS,ye as MEMORY_OBSERVATION_HOOK_VALUES,me as MEMORY_OBSERVATION_SOURCE_VALUES,fe as MEMORY_WRITE_ACCESS_VALUES,Ce as MUTATION_CHECKPOINT_BACKEND_VALUES,Te as MUTATION_CHECKPOINT_ENTRY_KIND_VALUES,Pe as MUTATION_CHECKPOINT_PHASE_VALUES,be as PROVIDER_RUNTIME_AUTH_MODE_VALUES,ve as PROVIDER_RUNTIME_COMPAT_FLAG_VALUES,S as PROVIDER_RUNTIME_ENV_API_KEY_CANDIDATES,L as PROVIDER_RUNTIME_OPENAI_CODEX_PROVIDER_ID,Ie as PROVIDER_RUNTIME_VAULT_ERROR_TYPE_VALUES,Ae as RESOURCE_MANIFEST_SCHEMA_VERSION,s as RUNTIME_ASSET_IDS,y as RUNTIME_PROFILE_IDS,le as WEB_ACTION_SCOPE_VALUES,pe as WEB_APPROVAL_DEFAULT_VALUES,ie as WEB_CAPABILITY_FAMILY_VALUES,oe as WEB_CAPABILITY_ID_VALUES,de as WEB_DEGRADATION_TARGET_VALUES,ue as WEB_ESCALATION_REASON_VALUES,se as WEB_EXECUTION_MODE_VALUES,ce as WEB_POLICY_RISK_CLASS_VALUES,ge as WEB_RETRY_POLICY_VALUES,ae as WEB_STATEFULNESS_VALUES,ne as WEB_TASK_MODE_VALUES,g as cloneCapabilityManifestSnapshot,re as createCapabilityManifestDiffPayload,N as createDefaultRuntimeResourceProfiles,ee as deriveCapabilityToolNamespaces,te as deriveCapabilityWorkspaceIds,R as getManifestShortcutEntry,D as getRuntimeResourceAsset,w as getRuntimeResourceProfile,Ee as getRuntimeResourceProfileAssets,M as isAcpJsonRpcNotification,v as isAcpJsonRpcRequest,h as isAcpJsonRpcResponse,T as isAgentRpcNotification,_ as isAgentRpcRequest,P as isAgentRpcResponse,Ke as isAnthropicProviderRuntimeFamily,$ as isExtendedSessionUpdateType,Le as isOpenAiProviderRuntimeFamily,J as isStandardSessionUpdateType,Be as listProviderRuntimeEnvApiKeyNames,Z as mergeCapabilityManifestSnapshot,m as normalizeProviderRuntimeId,K as normalizeProviderRuntimeIdForAuth,_e as normalizeRuntimeResourceManifest,z as parseAcpMessage,B as parseAgentRpcMessage,Oe as preservesProviderRuntimeAnthropicThinkingSignatures,Me as readProviderRuntimeCompatFlag,Ne as requiresOpenAiCompatibleAnthropicToolPayloadForProviderRuntime,c as resolveProviderRuntimeCapabilities,je as resolveProviderRuntimeEnvApiKey,he as resolveProviderRuntimeKeyFamily,Fe as resolveProviderRuntimeTranscriptToolCallIdMode,Ve as shouldDropThinkingBlocksForProviderRuntimeModel,We as shouldSanitizeProviderRuntimeThoughtSignaturesForModel,Ue as supportsOpenAiCompatTurnValidationForProviderRuntime,Se as upsertRuntimeResourceAsset,De as usesOpenAiFunctionAnthropicToolSchemaForProviderRuntime,we as usesOpenAiStringModeAnthropicToolChoiceForProviderRuntime};
@@ -13,7 +13,7 @@
13
13
  * Zero imports from express/pg/ioredis/ws.
14
14
  */
15
15
  import type { AgentLogger, ToolInvoker, TurnEvent, TurnRequest, HookRegistry } from "./types.js";
16
- import type { LLMTransport } from "../provider-core/index.js";
16
+ import type { LLMTransport } from "@xiaozhiclaw/provider-core";
17
17
  export interface AgentConfig {
18
18
  llmTransport: LLMTransport;
19
19
  apiKey: string;
@@ -19,7 +19,7 @@
19
19
  * Zero imports from express/pg/ioredis/ws.
20
20
  */
21
21
  import type { AgentLogger, ChatMessage, ToolDefinition, ToolInvoker, TurnEvent, HookRegistry } from "./types.js";
22
- import type { LLMTransport } from "../provider-core/index.js";
22
+ import type { LLMTransport } from "@xiaozhiclaw/provider-core";
23
23
  export interface ToolLoopParams {
24
24
  turnId: string;
25
25
  sessionId: string;
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import type { SkillInstruction } from "../orchestration/index.js";
9
9
  import type { HookRegistry } from "../contracts/hooks.js";
10
- import type { MediaCapability } from "../provider-core/index.js";
10
+ import type { MediaCapability } from "@xiaozhiclaw/provider-core";
11
11
  import type { ChatMessage as WireChatMessage, ChatMessageRole as WireChatMessageRole, ThinkingBlock as WireThinkingBlock, ToolCallMessage as WireToolCallMessage, ToolDefinition as WireToolDefinition, WireTokenUsage } from "../protocol/wire/index.js";
12
12
  export type ChatMessageRole = WireChatMessageRole;
13
13
  export type ThinkingBlock = WireThinkingBlock;
@@ -15,6 +15,7 @@ export declare function handleMemoryAtlas(this: any, msg: any): Promise<void>;
15
15
  * powering the atlas timeline ticks and the "memory digest" panel.
16
16
  */
17
17
  export declare function handleMemoryActivity(this: any, msg: any): Promise<void>;
18
+ export declare function handleMemoryAddManual(this: any, msg: any): Promise<void>;
18
19
  export declare function handleMemoryRead(this: any, msg: any): Promise<void>;
19
20
  export declare function handleMemoryWrite(this: any, msg: any): Promise<void>;
20
21
  export declare function handleMemorySearch(this: any, msg: any): Promise<void>;
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import type { ChatMessage } from "../../agent/types.js";
6
6
  import type { AgentRpcRequest } from "../../protocol/wire/agent-rpc.js";
7
- import type { LLMTransport } from "../../provider-core/index.js";
7
+ import type { LLMTransport } from "@xiaozhiclaw/provider-core";
8
8
  export declare function handleAbort(this: any, msg: AgentRpcRequest): void;
9
9
  export declare function handleApprovalResponse(this: any, msg: AgentRpcRequest): void;
10
10
  export declare function handleUserResponse(this: any, msg: AgentRpcRequest): void;
@@ -3,9 +3,9 @@ import { type TaskToolHooks } from "../skills/tools/task-tool.js";
3
3
  import { type ExecProgress } from "../skills/tools/exec-tool.js";
4
4
  import type { AgentLogger } from "../agent/types.js";
5
5
  import { type AskUserQuestion } from "../skills/tools/ask-user-tool.js";
6
- import type { MediaClient } from "../provider-core/index.js";
7
- import type { MediaCapability } from "../provider-core/index.js";
8
- import type { ProviderToolAPI } from "../provider-core/index.js";
6
+ import type { MediaClient } from "@xiaozhiclaw/provider-core";
7
+ import type { MediaCapability } from "@xiaozhiclaw/provider-core";
8
+ import type { ProviderToolAPI } from "@xiaozhiclaw/provider-core";
9
9
  /** Enable or disable group security mode (blocks sensitive file access). */
10
10
  export declare function setGroupSecurityMode(enabled: boolean): void;
11
11
  /**
@@ -10,7 +10,7 @@ export type { AgentConfig } from "./config/config.js";
10
10
  export type { Transport } from "./cli/transport.js";
11
11
  export { StdioTransport } from "./cli/transport.js";
12
12
  export { StdioServer, type StdioServerConfig } from "./cli/stdio-server.js";
13
- export { ProviderRegistry, createLLMClient, } from "./provider-core/index.js";
14
- export type { LLMTransport, LLMRequest, LLMChunk } from "./provider-core/index.js";
13
+ export { ProviderRegistry, createLLMClient, } from "@xiaozhiclaw/provider-core";
14
+ export type { LLMTransport, LLMRequest, LLMChunk } from "@xiaozhiclaw/provider-core";
15
15
  export { createHookRegistry } from "./runtime/hooks/hook-registry.js";
16
16
  export { buildSkillInstruction, } from "./orchestration/index.js";
@@ -1 +1 @@
1
- export * from "../provider-core/index.js";
1
+ export * from "@xiaozhiclaw/provider-core";
@@ -23,14 +23,14 @@
23
23
  *
24
24
  * ```ts
25
25
  * import { cascadeWebSearch } from "./tool-cascade.js";
26
- * import { ZhipuToolAPI } from "../provider-core/transports/zhipu-tool-api.js";
26
+ * import { ZhipuToolAPI } from "@xiaozhiclaw/provider-core/transports/zhipu-tool-api";
27
27
  *
28
28
  * const providerApi = new ZhipuToolAPI({ baseUrl, apiKey });
29
29
  * const cascadedSearch = cascadeWebSearch(providerApi, fallbackSearchFn);
30
30
  * const tool = createWebSearchTool({ search: cascadedSearch });
31
31
  * ```
32
32
  */
33
- import type { ProviderToolAPI } from "../provider-core/index.js";
33
+ import type { ProviderToolAPI } from "@xiaozhiclaw/provider-core";
34
34
  import type { WebSearchToolDeps } from "../skills/tools/web-search-tool.js";
35
35
  /**
36
36
  * Cascade web search: provider-native search → host fallback.
@@ -425,6 +425,20 @@ export interface GatewayRpcMethodMap {
425
425
  }>;
426
426
  };
427
427
  };
428
+ "memory.addManual": {
429
+ params: {
430
+ userId?: string;
431
+ text: string;
432
+ category?: string;
433
+ importance?: number;
434
+ source?: string;
435
+ tags?: string[];
436
+ };
437
+ result: {
438
+ ok: boolean;
439
+ memoriesAdded: number;
440
+ };
441
+ };
428
442
  }
429
443
  /**
430
444
  * Type-safe Agent RPC caller.
@@ -12,7 +12,7 @@
12
12
  */
13
13
  import type { DreamTaskState, DreamTurn } from "../../orchestration/subagent/task-types.js";
14
14
  import type { ToolDefinition, ToolInvoker, AgentLogger, HookRegistry } from "../../agent/types.js";
15
- import type { LLMTransport } from "../../provider-core/index.js";
15
+ import type { LLMTransport } from "@xiaozhiclaw/provider-core";
16
16
  export interface DreamTriggerConfig {
17
17
  /** Minimum hours since last consolidation. Default: 24. */
18
18
  minHours: number;
@@ -18,7 +18,7 @@
18
18
  * Reference: claude-code src/utils/forkedAgent.ts
19
19
  */
20
20
  import type { AgentLogger, ChatMessage, ToolDefinition, ToolInvoker, TokenUsage, TurnEvent, HookRegistry } from "../../agent/types.js";
21
- import type { LLMTransport } from "../../provider-core/index.js";
21
+ import type { LLMTransport } from "@xiaozhiclaw/provider-core";
22
22
  import type { AgentProgress } from "./progress-tracker.js";
23
23
  /**
24
24
  * Tool permission check function — CC canUseTool parity.
@@ -1,7 +1,7 @@
1
1
  import { ContextEngineRegistry, type CompressibleMessage, type CompressionResult, type CompressionStrategy, type AsyncCompressionStrategy, type SummarizeFn } from "../../orchestration/index.js";
2
2
  import type { HookRegistry } from "./hook-registry.js";
3
3
  import type { RuntimeLogger } from "./hook-registry.js";
4
- import type { LLMTransport } from "../../provider-core/index.js";
4
+ import type { LLMTransport } from "@xiaozhiclaw/provider-core";
5
5
  /** Rough token estimate: ~4 chars per token for mixed CJK/English. */
6
6
  export declare function estimateTokens(msg: CompressibleMessage): number;
7
7
  /** Estimate total tokens for a message array. */
@@ -107,7 +107,7 @@ export declare function deleteSession(sessionId: string, projectRoot: string): P
107
107
  */
108
108
  export declare function pruneOldSessions(projectRoot: string): Promise<number>;
109
109
  export interface TaskSummaryDeps {
110
- transport: import("../../provider-core/index.js").LLMTransport;
110
+ transport: import("@xiaozhiclaw/provider-core").LLMTransport;
111
111
  apiKey: string;
112
112
  model: string;
113
113
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qlogicagent",
3
- "version": "2.10.11",
3
+ "version": "2.10.13",
4
4
  "description": "XiaozhiClaw Agent CLI — subprocess architecture (JSON-RPC over stdio)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -56,12 +56,14 @@
56
56
  "test": "vitest run",
57
57
  "test:watch": "vitest",
58
58
  "lint": "oxlint .",
59
+ "check:provider-core-boundary": "node scripts/check-provider-core-boundary.mjs",
59
60
  "release": "node scripts/release.mjs"
60
61
  },
61
62
  "engines": {
62
63
  "node": ">=22.0.0"
63
64
  },
64
65
  "dependencies": {
66
+ "@xiaozhiclaw/provider-core": "^0.1.0",
65
67
  "better-sqlite3": "^12.10.0",
66
68
  "dotenv": "^17.3.1",
67
69
  "nanoid": "^5.1.5",
@@ -74,7 +76,6 @@
74
76
  "devDependencies": {
75
77
  "@types/better-sqlite3": "^7.6.13",
76
78
  "@types/node": "^22.15.0",
77
- "@qlogic/provider-core": "workspace:*",
78
79
  "esbuild": "^0.28.0",
79
80
  "tsx": "^4.19.0",
80
81
  "typescript": "^5.9.0",
@@ -1,44 +0,0 @@
1
- /**
2
- * Aliyun OSS File Upload Adapter 鈥?direct upload to Alibaba Cloud OSS.
3
- *
4
- * Uploads files directly to OSS bucket using V1 signature (HMAC-SHA1).
5
- * No external dependencies 鈥?uses Node.js crypto + fetch.
6
- *
7
- * This is the **universal fallback adapter** for providers without a native
8
- * File Upload API (e.g. Anthropic). Ensures ALL file handling goes through
9
- * upload 鈥?never base64 inline.
10
- *
11
- * Environment variables:
12
- * OSS_ACCESS_KEY_ID 鈥?Aliyun AccessKey ID
13
- * OSS_ACCESS_KEY_SECRET 鈥?Aliyun AccessKey Secret
14
- * OSS_BUCKET 鈥?Bucket name (default: "qlogicagent")
15
- * OSS_REGION 鈥?Region (default: "cn-beijing")
16
- * OSS_ENDPOINT 鈥?Custom endpoint (default: derived from region)
17
- */
18
- import type { FileUploadAdapter, FileUploadResult } from "../file-upload-service.js";
19
- export interface AliyunOSSFileUploadConfig {
20
- /** Aliyun AccessKey ID. Required. */
21
- accessKeyId: string;
22
- /** Aliyun AccessKey Secret. Required. */
23
- accessKeySecret: string;
24
- /** OSS Bucket name. Default: "qlogicagent". */
25
- bucket?: string;
26
- /** OSS Region. Default: "cn-beijing". */
27
- region?: string;
28
- /** Custom OSS endpoint. Default: "{bucket}.oss-{region}.aliyuncs.com". */
29
- endpoint?: string;
30
- /** Upload path prefix. Default: "media". */
31
- pathPrefix?: string;
32
- /** Timeout ms. Default: 120_000. */
33
- timeoutMs?: number;
34
- }
35
- /**
36
- * Create an AliyunOSSFileUploadAdapter from environment variables.
37
- * Returns undefined if required env vars (OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET) are missing.
38
- */
39
- export declare function createAliyunOSSAdapterFromEnv(): AliyunOSSFileUploadAdapter | undefined;
40
- export declare class AliyunOSSFileUploadAdapter implements FileUploadAdapter {
41
- private readonly config;
42
- constructor(config: AliyunOSSFileUploadConfig);
43
- uploadFile(buffer: Buffer, filename: string, mimeType: string, _apiKey: string, signal?: AbortSignal): Promise<FileUploadResult>;
44
- }
@@ -1,26 +0,0 @@
1
- /**
2
- * Gemini File Upload Adapter.
3
- *
4
- * Implements the Google Gemini 2-step resumable upload protocol
5
- * into the unified FileUploadAdapter interface.
6
- *
7
- * Protocol:
8
- * 1. POST /upload/v1beta/files 鈥?initiate, get upload URL
9
- * 2. PUT {uploadUrl} 鈥?send bytes, finalize
10
- *
11
- * Returns a file URI (e.g. "files/abc123") that can be used in
12
- * generateContent requests as a file reference.
13
- */
14
- import type { FileUploadAdapter, FileUploadResult } from "../file-upload-service.js";
15
- export interface GeminiFileUploadConfig {
16
- /** Base URL (e.g. "https://generativelanguage.googleapis.com/v1beta") */
17
- baseUrl: string;
18
- /** Timeout ms. Default: 180_000. */
19
- timeoutMs?: number;
20
- }
21
- export declare class GeminiFileUploadAdapter implements FileUploadAdapter {
22
- private readonly config;
23
- constructor(config: GeminiFileUploadConfig);
24
- uploadFile(buffer: Buffer, filename: string, mimeType: string, apiKey: string, signal?: AbortSignal): Promise<FileUploadResult>;
25
- private waitForProcessing;
26
- }
@@ -1,29 +0,0 @@
1
- /**
2
- * Hub OSS File Upload Adapter 鈥?for providers without native File API (e.g. Anthropic).
3
- *
4
- * Uploads local files to the Hub's OSS relay endpoint, which stores them in
5
- * cloud object storage (Aliyun OSS / Tencent COS) and returns a public URL.
6
- * The LLM provider can then access the file via this public URL.
7
- *
8
- * This enables Anthropic (which only supports base64 inline or public URL)
9
- * to handle large files that exceed the base64 size limit (20MB).
10
- *
11
- * Endpoint: POST {hubBaseUrl}/api/v1/files/upload
12
- * Returns: { url: "https://oss-bucket.oss-cn-xxx.aliyuncs.com/..." }
13
- */
14
- import type { FileUploadAdapter, FileUploadResult } from "../file-upload-service.js";
15
- export interface HubOSSFileUploadConfig {
16
- /** Hub API base URL (e.g. "https://hub.xiaozhiclaw.com" or from env). */
17
- hubBaseUrl: string;
18
- /** Hub API key for authentication. */
19
- hubApiKey?: string;
20
- /** Timeout ms. Default: 120_000. */
21
- timeoutMs?: number;
22
- /** Provider name for result metadata. Default: "hub-oss". */
23
- provider?: string;
24
- }
25
- export declare class HubOSSFileUploadAdapter implements FileUploadAdapter {
26
- private readonly config;
27
- constructor(config: HubOSSFileUploadConfig);
28
- uploadFile(buffer: Buffer, filename: string, mimeType: string, _apiKey: string, signal?: AbortSignal): Promise<FileUploadResult>;
29
- }