@myagentroam/agent 0.9.62 → 0.9.64

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 (119) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +4 -0
  3. package/dist/cli/codex-auth-file.js +268 -3
  4. package/dist/cli/main.js +427 -2
  5. package/dist/error.js +66 -2
  6. package/dist/host/contracts.js +20 -2
  7. package/dist/host/local-agent-host.js +146 -2
  8. package/dist/host/local-process-executor.js +39 -2
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.js +12 -2
  11. package/dist/model/anthropic-messages.js +474 -2
  12. package/dist/model/anthropic-thinking.js +33 -2
  13. package/dist/model/catalog-file.js +88 -2
  14. package/dist/model/configuration.js +137 -2
  15. package/dist/model/contracts.d.ts +2 -0
  16. package/dist/model/contracts.js +1 -2
  17. package/dist/model/http.js +529 -2
  18. package/dist/model/openai-responses.d.ts +2 -0
  19. package/dist/model/openai-responses.js +1602 -2
  20. package/dist/model/runtime-credential.js +35 -2
  21. package/dist/model/sse.js +199 -2
  22. package/dist/prompts/compact.js +25 -2
  23. package/dist/prompts/core.js +37 -2
  24. package/dist/prompts/execution-budget.js +10 -2
  25. package/dist/prompts/index.d.ts +3 -2
  26. package/dist/prompts/index.js +47 -2
  27. package/dist/prompts/modes.js +25 -2
  28. package/dist/prompts/output.js +1 -2
  29. package/dist/prompts/resources.d.ts +1 -1
  30. package/dist/prompts/resources.js +31 -2
  31. package/dist/prompts/subagent.d.ts +6 -0
  32. package/dist/prompts/subagent.js +29 -2
  33. package/dist/prompts/title.js +9 -2
  34. package/dist/prompts/workflow.js +32 -2
  35. package/dist/runtime/async-queue.js +62 -2
  36. package/dist/runtime/builtin-skills.js +19 -2
  37. package/dist/runtime/byted-ark-imagegen-skill.js +18 -2
  38. package/dist/runtime/codex-imagegen-skill.js +35 -2
  39. package/dist/runtime/compact.js +225 -2
  40. package/dist/runtime/context-gc-runtime.d.ts +35 -0
  41. package/dist/runtime/context-gc-runtime.js +163 -0
  42. package/dist/runtime/context-gc-tokens.d.ts +24 -0
  43. package/dist/runtime/context-gc-tokens.js +83 -0
  44. package/dist/runtime/context-gc.d.ts +66 -0
  45. package/dist/runtime/context-gc.js +909 -0
  46. package/dist/runtime/context-projection.d.ts +23 -0
  47. package/dist/runtime/context-projection.js +203 -0
  48. package/dist/runtime/environment-context.js +41 -2
  49. package/dist/runtime/execution-policy.js +13 -2
  50. package/dist/runtime/instructions.js +298 -2
  51. package/dist/runtime/normalize.js +40 -2
  52. package/dist/runtime/plan-output.js +95 -2
  53. package/dist/runtime/rollout-budget.d.ts +2 -0
  54. package/dist/runtime/rollout-budget.js +92 -2
  55. package/dist/runtime/token-budget.d.ts +2 -0
  56. package/dist/runtime/token-budget.js +44 -2
  57. package/dist/sdk/agent.js +1804 -2
  58. package/dist/sdk/types.d.ts +15 -5
  59. package/dist/sdk/types.js +1 -2
  60. package/dist/session/catalog.d.ts +5 -4
  61. package/dist/session/catalog.js +133 -2
  62. package/dist/session/context-gc-checkpoint.d.ts +148 -0
  63. package/dist/session/context-gc-checkpoint.js +665 -0
  64. package/dist/session/context-gc-replacements.d.ts +52 -0
  65. package/dist/session/context-gc-replacements.js +226 -0
  66. package/dist/session/context-gc-subagent.d.ts +43 -0
  67. package/dist/session/context-gc-subagent.js +267 -0
  68. package/dist/session/jsonl-store.d.ts +42 -4
  69. package/dist/session/jsonl-store.js +1657 -2
  70. package/dist/subagent/scheduler.d.ts +35 -2
  71. package/dist/subagent/scheduler.js +249 -2
  72. package/dist/subagent/session-controller.d.ts +94 -0
  73. package/dist/subagent/session-controller.js +675 -0
  74. package/dist/tools/agent-cancel.js +28 -2
  75. package/dist/tools/{task.d.ts → agent-message.d.ts} +2 -2
  76. package/dist/tools/agent-message.js +51 -0
  77. package/dist/tools/agent-start.js +84 -2
  78. package/dist/tools/agent-wait.js +53 -2
  79. package/dist/tools/apply-patch.js +478 -2
  80. package/dist/tools/code-mode.js +370 -2
  81. package/dist/tools/codex-image-gen.js +312 -2
  82. package/dist/tools/exec.js +455 -2
  83. package/dist/tools/execution-limits.d.ts +1 -0
  84. package/dist/tools/execution-limits.js +44 -2
  85. package/dist/tools/local-registry.js +233 -2
  86. package/dist/tools/local-workspace-tools.js +28 -2
  87. package/dist/tools/question.js +124 -2
  88. package/dist/tools/read-context.d.ts +16 -0
  89. package/dist/tools/read-context.js +85 -0
  90. package/dist/tools/read.d.ts +13 -0
  91. package/dist/tools/read.js +294 -2
  92. package/dist/tools/registry.js +76 -2
  93. package/dist/tools/runtime-context.d.ts +9 -2
  94. package/dist/tools/runtime-context.js +1 -2
  95. package/dist/tools/runtime.js +21 -2
  96. package/dist/tools/scheduler.js +41 -2
  97. package/dist/tools/shared/path-resolver.js +133 -2
  98. package/dist/tools/skill.js +37 -2
  99. package/dist/tools/todo-read.js +10 -2
  100. package/dist/tools/todo-write.js +65 -2
  101. package/dist/tools/todo.js +67 -2
  102. package/dist/tools/view-image.js +81 -2
  103. package/dist/tools/web-fetch.js +11 -2
  104. package/dist/tools/web-search.js +14 -2
  105. package/package.json +9 -7
  106. package/README.md +0 -3
  107. package/dist/runtime/prompt.d.ts +0 -9
  108. package/dist/runtime/prompt.js +0 -2
  109. package/dist/tools/shared/secret-redaction.d.ts +0 -4
  110. package/dist/tools/shared/secret-redaction.js +0 -2
  111. package/dist/tools/task-cancel.d.ts +0 -7
  112. package/dist/tools/task-cancel.js +0 -2
  113. package/dist/tools/task-output.d.ts +0 -7
  114. package/dist/tools/task-output.js +0 -2
  115. package/dist/tools/task-tools.d.ts +0 -36
  116. package/dist/tools/task-tools.js +0 -2
  117. package/dist/tools/task.js +0 -2
  118. package/dist/tools/todo-tools.d.ts +0 -25
  119. package/dist/tools/todo-tools.js +0 -2
@@ -1,2 +1,529 @@
1
- /* mar-release-protected */
2
- const _0x57e518=_0x280b;(function(_0x462f2d,_0x66fe69){const _0x364d0b=_0x280b,_0x3e2a05=_0x462f2d();while(!![]){try{const _0xbab6fd=-parseInt(_0x364d0b(0xeb))/(0x25d0+-0x26c7+0xf8)+parseInt(_0x364d0b(0x120))/(0x8b6+0xfba+-0x6a*0x3b)+-parseInt(_0x364d0b(0x114))/(0xf29*-0x1+0x568+0x9c4)*(-parseInt(_0x364d0b(0x129))/(0x1*-0x258d+-0x12c*0x10+0x1*0x3851))+-parseInt(_0x364d0b(0xc9))/(-0x1*0xe99+0x1*-0xb62+-0xd00*-0x2)+parseInt(_0x364d0b(0xf6))/(0x31d*0x6+-0x5f0+-0x8*0x197)*(parseInt(_0x364d0b(0xf9))/(0x1*-0x22dc+-0x2170+0x4453))+parseInt(_0x364d0b(0x146))/(-0x633*-0x3+0x250c+-0x379d)+-parseInt(_0x364d0b(0xdc))/(-0x1*0x125f+-0x1b41+0x2da9)*(parseInt(_0x364d0b(0xce))/(0xffa*0x1+-0x1095+0xa5));if(_0xbab6fd===_0x66fe69)break;else _0x3e2a05['push'](_0x3e2a05['shift']());}catch(_0x200369){_0x3e2a05['push'](_0x3e2a05['shift']());}}}(_0x5eee,0x66379+-0x706ea+-0x2b3*-0x1f7));import{setTimeout as _0xfe0de7}from'node:timers/promises';import{connect as _0x28ac59}from'node:net';import{connect as _0x5d5b77}from'node:tls';import{Client,Socks5ProxyAgent,buildConnector,fetch as _0xa00320}from'undici';import{MarAgentError}from'../error.js';export const MAX_MODEL_ATTEMPTS=-0x1169*0x1+-0x31+0x119f*0x1;export function modelRetryMaxAttempts(_0xc46da0){const _0x20f753=_0x280b,_0x158036=_0xc46da0[_0x20f753(0xe4)]??MAX_MODEL_ATTEMPTS;if(!Number[_0x20f753(0xc3)](_0x158036)||_0x158036<0x35*0xb+0x1a13+-0x973*0x3||_0x158036>MAX_MODEL_ATTEMPTS)throw new MarAgentError(_0x20f753(0xe9),_0x20f753(0x142));return _0x158036;}const RETRYABLE_STATUS=new Set([-0xcf1+0x1*0x2575+-0x16ec,0x3d*-0x83+-0x1e26+0x3ef6,-0xb01+-0x2*0xe41+0x4*0xa4c,0x137*-0x17+-0x10f9+-0x2ede*-0x1,-0x163*0x5+0x2371+-0x1a8c,-0x5d0+-0x397*-0x7+0x115a*-0x1,0x1*-0x4d+0x2*0x493+0x24b*-0x3]),DEFAULT_MODEL_CONNECTION_TIMEOUT_MS=0x119*0x8f+0xa235+0x342*-0x3e,SOCKS5_HANDSHAKE_TIMEOUT_MS=-0x17ec*0x1+0x3026+-0xd3*-0x12,RETRYABLE_TRANSPORT_CODES=new Set([_0x57e518(0xca),_0x57e518(0xef),_0x57e518(0x127),_0x57e518(0xda),_0x57e518(0x109),_0x57e518(0x149),_0x57e518(0xec),_0x57e518(0x116),_0x57e518(0xf1),_0x57e518(0x136),_0x57e518(0x108),_0x57e518(0x102)]);function _0x280b(_0x2eef66,_0x41cf53){_0x2eef66=_0x2eef66-(-0xc56*-0x1+-0x1d1b+0x1*0x1186);const _0x2930f3=_0x5eee();let _0x1a0e42=_0x2930f3[_0x2eef66];if(_0x280b['gJjTvo']===undefined){var _0x27a81c=function(_0x4b698f){const _0x51df65='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1d09c7='',_0x3b8fff='';for(let _0x2896e7=-0x721+0xca3+-0x582,_0x1b94b5,_0x571ea4,_0x3e7b87=0x142e+0x4c5*-0x8+0xb1*0x1a;_0x571ea4=_0x4b698f['charAt'](_0x3e7b87++);~_0x571ea4&&(_0x1b94b5=_0x2896e7%(0x30c+-0x1424*-0x1+-0x172c)?_0x1b94b5*(0x1*0x2575+-0x993+-0x1ba2)+_0x571ea4:_0x571ea4,_0x2896e7++%(-0xf13*0x2+0x743+0x16e7))?_0x1d09c7+=String['fromCharCode'](-0x2*0xe41+0x6*-0x56d+0x3e0f&_0x1b94b5>>(-(-0x18b*0xb+-0xbde*-0x1+0x51d)*_0x2896e7&0x2371+0x1009+-0x3374)):-0x5d0+-0x397*-0x7+0x1351*-0x1){_0x571ea4=_0x51df65['indexOf'](_0x571ea4);}for(let _0x56118f=0x1*-0x4d+0x2*0x493+0x97*-0xf,_0x55425d=_0x1d09c7['length'];_0x56118f<_0x55425d;_0x56118f++){_0x3b8fff+='%'+('00'+_0x1d09c7['charCodeAt'](_0x56118f)['toString'](0xb5*0x25+0x1b09+0x11b6*-0x3))['slice'](-(-0xbf6*0x1+0x1813+-0x409*0x3));}return decodeURIComponent(_0x3b8fff);};_0x280b['qfkbdv']=_0x27a81c,_0x280b['ctfYHk']={},_0x280b['gJjTvo']=!![];}const _0x5b712e=_0x2930f3[-0x1a32+0x18b7+0x17b];_0x280b['HUmOUo']!==_0x5b712e&&(_0x280b['ctfYHk']={},_0x280b['HUmOUo']=_0x5b712e);const _0x40b2bf=_0x280b['ctfYHk'][_0x2eef66];return _0x40b2bf===undefined?(_0x1a0e42=_0x280b['qfkbdv'](_0x1a0e42),_0x280b['ctfYHk'][_0x2eef66]=_0x1a0e42):_0x1a0e42=_0x40b2bf,_0x1a0e42;}export async function fetchModelResponse(_0x1705bd,_0x56cbff,_0x51668c,_0x1c6663=MAX_MODEL_ATTEMPTS,_0x383d7a=DEFAULT_MODEL_CONNECTION_TIMEOUT_MS){const _0x1207cc=_0x57e518;let _0x270b05;for(let _0x2316ed=-0x1a32+0x18b7+0x17b;_0x2316ed<_0x1c6663;_0x2316ed++){try{const _0x47cdeb=typeof _0x56cbff===_0x1207cc(0x148)?await _0x56cbff():_0x56cbff,_0x4511f1=isModelHttpAttempt(_0x47cdeb)?_0x47cdeb:{'request':_0x47cdeb,'httpVersion':_0x1207cc(0x12a)};_0x270b05=await fetchWithConnectionTimeout(_0x1705bd,_0x4511f1,_0x51668c,_0x383d7a);}catch(_0x1abdd4){if(_0x51668c[_0x1207cc(0x143)])throw _0x51668c[_0x1207cc(0x104)]??_0x1abdd4;if(isModelConnectionTimeout(_0x1abdd4)){if(_0x2316ed+(-0x9e+0xed9+-0xe3a)>=_0x1c6663)throw _0x1abdd4;await waitForModelRetry(null,_0x2316ed,_0x51668c);continue;}if(!isRetryableModelTransportError(_0x1abdd4))throw _0x1abdd4;if(_0x2316ed+(0x1b5*0x15+0xdf0+-0x6*0x84c)>=_0x1c6663)throw new MarAgentError(_0x1207cc(0x105),_0x1c6663===0x2bf*-0x6+0x1*0x204f+-0x3f5*0x4?_0x1207cc(0x126):_0x1207cc(0x11c),{'retryable':!![],'details':{'reason':_0x1207cc(0x128)},'cause':_0x1abdd4});await waitForModelRetry(null,_0x2316ed,_0x51668c);continue;}if(!RETRYABLE_STATUS[_0x1207cc(0xc4)](_0x270b05[_0x1207cc(0x11d)])||_0x2316ed+(0x134+-0xf*-0x1ed+-0x1e16)>=_0x1c6663)return _0x270b05;const _0x1d5985=_0x270b05[_0x1207cc(0x106)][_0x1207cc(0x131)](_0x1207cc(0x130));await _0x270b05[_0x1207cc(0xf0)]?.[_0x1207cc(0x14a)]()[_0x1207cc(0xfc)](()=>undefined),await waitForModelRetry(_0x1d5985,_0x2316ed,_0x51668c);}return _0x270b05;}async function fetchWithConnectionTimeout(_0x2a151a,_0x20ba77,_0x45b41f,_0x3e8426){const _0x514a4e=_0x57e518;if(_0x45b41f[_0x514a4e(0x143)])throw _0x45b41f[_0x514a4e(0x104)];const _0x520292=new AbortController(),_0xe076b6=new MarAgentError(_0x514a4e(0x105),_0x514a4e(0xd9),{'details':{'reason':_0x514a4e(0x10a)},'retryable':!![]});let _0x112d41=()=>undefined;const _0x21f8a9=new Promise((_0x25f94c,_0x42ce78)=>{_0x112d41=_0x42ce78;}),_0x91cd00=()=>{const _0x4227e9=_0x514a4e,_0x5e763c=_0x45b41f[_0x4227e9(0x104)];_0x520292[_0x4227e9(0xfb)](_0x5e763c),_0x112d41(_0x5e763c);};_0x45b41f[_0x514a4e(0xe7)](_0x514a4e(0xfb),_0x91cd00,{'once':!![]});const _0x3c44e3=setTimeout(()=>{const _0x3be5f4=_0x514a4e;_0x520292[_0x3be5f4(0xfb)](_0xe076b6),_0x112d41(_0xe076b6);},Math[_0x514a4e(0xf8)](0x2*0xbf8+0x590+-0x1d7f,_0x3e8426));try{return await Promise[_0x514a4e(0xd4)]([fetchHttpAttempt(_0x2a151a,_0x20ba77,_0x520292[_0x514a4e(0x111)]),_0x21f8a9]);}finally{clearTimeout(_0x3c44e3),_0x45b41f[_0x514a4e(0x124)](_0x514a4e(0xfb),_0x91cd00);}}async function fetchHttpAttempt(_0x433f7d,_0x29a28a,_0x1a6421){const _0x59ea7e=_0x57e518;if(_0x29a28a[_0x59ea7e(0xfe)]===_0x59ea7e(0x12a)&&_0x29a28a[_0x59ea7e(0x134)]===undefined)return await fetch(_0x433f7d,{..._0x29a28a[_0x59ea7e(0xd0)],'signal':_0x1a6421});const _0x198e91=_0x29a28a[_0x59ea7e(0x134)]===undefined?http2Client(_0x433f7d):_0x29a28a[_0x59ea7e(0xfe)]==='2'?http2SocksClient(_0x433f7d,_0x29a28a[_0x59ea7e(0x134)]):new Socks5ProxyAgent(_0x29a28a[_0x59ea7e(0x134)]);try{const _0x19ec59=await _0xa00320(_0x433f7d,{..._0x29a28a[_0x59ea7e(0xd0)],'signal':_0x1a6421,'dispatcher':_0x198e91});return responseWithDispatcherLifecycle(_0x19ec59,_0x198e91);}catch(_0x3eaf25){await _0x198e91[_0x59ea7e(0xd5)](_0x3eaf25 instanceof Error?_0x3eaf25:null)[_0x59ea7e(0xfc)](()=>undefined);if(hasErrorCode(_0x3eaf25,_0x59ea7e(0xf5)))throw new MarAgentError(_0x59ea7e(0x138),_0x59ea7e(0xc8),{'cause':_0x3eaf25});throw _0x3eaf25;}}function http2Client(_0xe9b62e){const _0x3dd742=_0x57e518;return new Client(new URL(_0xe9b62e)[_0x3dd742(0x145)],{'allowH2':!![],'connect':strictHttp2Connector()});}function http2SocksClient(_0x1dceaf,_0x56dc53){const _0x5ccd68=_0x57e518;return new Client(new URL(_0x1dceaf)[_0x5ccd68(0x145)],{'allowH2':!![],'connect':async(_0x32a095,_0x5a8e65)=>{const _0x6de124=_0x5ccd68;try{const _0x3e3a92=await connectSocks5Target({'socks5Url':_0x56dc53,'targetHost':_0x32a095[_0x6de124(0xc2)],'targetPort':Number(_0x32a095[_0x6de124(0x118)]||0x1825*-0x1+0x7*0x337+0x35f),'tls':!![],'servername':_0x32a095[_0x6de124(0x11f)]||_0x32a095[_0x6de124(0xc2)],'alpnProtocols':['h2'],'requiredAlpnProtocol':'h2'});_0x5a8e65(null,_0x3e3a92);}catch(_0x26efc6){_0x5a8e65(asError(_0x26efc6),null);}}});}export async function connectSocks5Target(_0xc3d71f){const _0x1b27bb=_0x57e518;if(_0xc3d71f[_0x1b27bb(0x111)]?.[_0x1b27bb(0x143)])throw _0xc3d71f[_0x1b27bb(0x111)][_0x1b27bb(0x104)];const _0x10f637=parseSocks5Proxy(_0xc3d71f[_0x1b27bb(0x134)]),_0x376cf7=Buffer[_0x1b27bb(0x121)](_0xc3d71f[_0x1b27bb(0xfa)],_0x1b27bb(0xf4));if(_0x376cf7[_0x1b27bb(0xe5)]===0x16d8+0x1959*0x1+-0x3031||_0x376cf7[_0x1b27bb(0xe5)]>-0x23db+0x9*-0x1d6+0x3560||!Number[_0x1b27bb(0x137)](_0xc3d71f[_0x1b27bb(0x117)])||_0xc3d71f[_0x1b27bb(0x117)]<-0x24d3+-0x36b*-0x2+-0x16*-0x15d||_0xc3d71f[_0x1b27bb(0x117)]>-0x24*-0x6c+-0x1*-0x1a0f3+-0xb024)throw invalidSocks5Proxy();const _0x316cf8=_0x28ac59({'host':_0x10f637[_0x1b27bb(0xc2)],'port':_0x10f637[_0x1b27bb(0x118)]}),_0x385c35=Object[_0x1b27bb(0xd8)](new Error(_0x1b27bb(0x11b)),{'code':_0x1b27bb(0xf1)}),_0x8fd56a=()=>_0x316cf8[_0x1b27bb(0xd5)](asError(_0xc3d71f[_0x1b27bb(0x111)]?.[_0x1b27bb(0x104)])),_0x244b75=()=>_0x316cf8[_0x1b27bb(0xd5)](_0x385c35);_0xc3d71f[_0x1b27bb(0x111)]?.[_0x1b27bb(0xe7)](_0x1b27bb(0xfb),_0x8fd56a,{'once':!![]}),_0x316cf8[_0x1b27bb(0xe6)](SOCKS5_HANDSHAKE_TIMEOUT_MS),_0x316cf8[_0x1b27bb(0xff)](_0x1b27bb(0xc5),_0x244b75);try{await waitForSocketConnect(_0x316cf8);const _0x552cd6=_0x10f637[_0x1b27bb(0x11a)]===undefined?[-0xe2*-0x1+-0x1a85+0x19a3]:[-0x4d0+-0x16a9+0x1b79,0xc29+-0x43*-0x1d+-0x13be];await writeSocket(_0x316cf8,Buffer[_0x1b27bb(0x121)]([-0x667+0x2*0x608+0x169*-0x4,_0x552cd6[_0x1b27bb(0xe5)],..._0x552cd6]));const _0x4144fe=await readSocketExactly(_0x316cf8,0x1db+0x99a+0x1*-0xb73);if(_0x4144fe[0x1212+0x2*0x1e+-0xd5*0x16]!==0x14ad+-0x8a*-0x3d+-0x358a||_0x4144fe[0x5*0x6f4+-0x524*0x6+-0x3eb]===0x10bd+0xbe7+-0x1ba5)throw socks5ProtocolError(_0x1b27bb(0x103),_0x1b27bb(0x10f));if(_0x4144fe[-0x240e+0x22c9+-0xa3*-0x2]===-0x1133+-0x1387+0x24bc){if(_0x10f637[_0x1b27bb(0x11a)]===undefined||_0x10f637[_0x1b27bb(0xcb)]===undefined)throw socks5ProtocolError(_0x1b27bb(0x103),_0x1b27bb(0xd1));const _0x2da1ff=Buffer[_0x1b27bb(0x121)](_0x10f637[_0x1b27bb(0x11a)],_0x1b27bb(0xf4)),_0x8a755c=Buffer[_0x1b27bb(0x121)](_0x10f637[_0x1b27bb(0xcb)],_0x1b27bb(0xf4));await writeSocket(_0x316cf8,Buffer[_0x1b27bb(0x123)]([Buffer[_0x1b27bb(0x121)]([-0x43*0x8d+0x1ccf+0x819,_0x2da1ff[_0x1b27bb(0xe5)]]),_0x2da1ff,Buffer[_0x1b27bb(0x121)]([_0x8a755c[_0x1b27bb(0xe5)]]),_0x8a755c]));const _0xd3a253=await readSocketExactly(_0x316cf8,-0x134d+0x12a6+0xd*0xd);if(_0xd3a253[0xbc7+-0x1865+-0x1*-0xc9e]!==0xda3*0x1+-0x1e28+-0x8d*-0x1e||_0xd3a253[-0x1ff6+0x25a8+-0x2f*0x1f]!==0xb*0x26b+0x3*0x737+-0x303e)throw socks5ProtocolError(_0x1b27bb(0x103),_0x1b27bb(0x13b));}else{if(_0x4144fe[0x7*0x49+0x1*0x18fa+-0x8*0x35f]!==-0x23c0+-0xaf3*0x3+0x4499)throw socks5ProtocolError(_0x1b27bb(0x103),_0x1b27bb(0xf2));}const _0x18f482=Buffer[_0x1b27bb(0x13c)](0x15f*-0x1+-0x17b7*-0x1+-0x1656);_0x18f482[_0x1b27bb(0x119)](_0xc3d71f[_0x1b27bb(0x117)]),await writeSocket(_0x316cf8,Buffer[_0x1b27bb(0x123)]([Buffer[_0x1b27bb(0x121)]([-0x26e5*-0x1+-0x6*-0x1d9+0x4ff*-0xa,0x24a*0x1+0x13*-0xf1+0xf9a,0x39*0x93+0xdac+-0x2e67,0x222+0x1872*-0x1+-0x3*-0x771,_0x376cf7[_0x1b27bb(0xe5)]]),_0x376cf7,_0x18f482]));const _0x1a4724=await readSocketExactly(_0x316cf8,0x540+-0xa83+0x547);if(_0x1a4724[-0x5*0x2a5+0xf34*0x1+-0x1fb]!==0x33b+-0x1*0x263c+0x2*0x1183||_0x1a4724[0x259f+-0x5*0x278+-0x1945]!==0xef0+-0x1eb+-0xd05)throw socks5ProtocolError(_0x1b27bb(0xc6),_0x1b27bb(0xcc));if(_0x1a4724[0xa4b+0x1fd3*-0x1+-0x1589*-0x1]!==-0xd1f+0x3*-0x893+-0x4db*-0x8)throw socks5ReplyError(_0x1a4724[0x1a5+-0x1*0x2326+0x2182*0x1]);await consumeSocks5BoundAddress(_0x316cf8,_0x1a4724[0x3*0x779+0xda*0x8+-0xdc*0x22]),_0x316cf8[_0x1b27bb(0xe6)](0x168a+0xde*-0x28+0x613*0x2),_0x316cf8[_0x1b27bb(0x132)](_0x1b27bb(0xc5),_0x244b75),_0xc3d71f[_0x1b27bb(0x111)]?.[_0x1b27bb(0x124)](_0x1b27bb(0xfb),_0x8fd56a);if(!_0xc3d71f[_0x1b27bb(0x100)])return _0x316cf8;return await upgradeSocks5Tls(_0x316cf8,_0xc3d71f);}catch(_0x4ee3ef){_0x316cf8[_0x1b27bb(0xd5)]();throw _0x4ee3ef;}finally{_0x316cf8[_0x1b27bb(0x132)](_0x1b27bb(0xc5),_0x244b75),_0xc3d71f[_0x1b27bb(0x111)]?.[_0x1b27bb(0x124)](_0x1b27bb(0xfb),_0x8fd56a);}}function parseSocks5Proxy(_0x2b07e8){const _0x26e0b4=_0x57e518;try{const _0x2e3a0e=new URL(_0x2b07e8),_0x18f4e1=_0x2e3a0e[_0x26e0b4(0x118)]===''?0x10db+-0x57*-0x5c+0x2be7*-0x1:Number(_0x2e3a0e[_0x26e0b4(0x118)]);if(_0x2e3a0e[_0x26e0b4(0x107)]!==_0x26e0b4(0x12b)||_0x2e3a0e[_0x26e0b4(0xc2)][_0x26e0b4(0xe5)]===-0x1*-0x1b1f+-0x1fd6+0x4b7||!Number[_0x26e0b4(0x137)](_0x18f4e1)||_0x18f4e1<-0x19d7+0x1d6+0x1802||_0x18f4e1>0x3565*-0x7+-0x1*0x1a081+0x41643||_0x2e3a0e[_0x26e0b4(0xea)]!==''&&_0x2e3a0e[_0x26e0b4(0xea)]!=='/'||_0x2e3a0e[_0x26e0b4(0x14b)]!==''||_0x2e3a0e[_0x26e0b4(0xdf)]!=='')throw invalidSocks5Proxy();const _0x48ac3f=_0x2e3a0e[_0x26e0b4(0x11a)]!==''||_0x2e3a0e[_0x26e0b4(0xcb)]!=='',_0x4602c7=_0x48ac3f?decodeURIComponent(_0x2e3a0e[_0x26e0b4(0x11a)]):undefined,_0x43a521=_0x48ac3f?decodeURIComponent(_0x2e3a0e[_0x26e0b4(0xcb)]):undefined;if(_0x48ac3f&&_0x4602c7?.[_0x26e0b4(0xe5)]===-0x621*0x6+-0xb37+0x2ffd||_0x4602c7!==undefined&&Buffer[_0x26e0b4(0xd7)](_0x4602c7)>-0x9+-0x23ee+0x24f6||_0x43a521!==undefined&&Buffer[_0x26e0b4(0xd7)](_0x43a521)>0x24d7+0x2707+0x1*-0x4adf)throw invalidSocks5Proxy();return{'hostname':_0x2e3a0e[_0x26e0b4(0xc2)],'port':_0x18f4e1,..._0x4602c7===undefined?{}:{'username':_0x4602c7,'password':_0x43a521??''}};}catch(_0x1185f2){if(_0x1185f2 instanceof MarAgentError)throw _0x1185f2;throw invalidSocks5Proxy(_0x1185f2);}}async function waitForSocketConnect(_0x411f0a){const _0x5258f1=_0x57e518;if(_0x411f0a[_0x5258f1(0xe0)]===_0x5258f1(0x122))return;await new Promise((_0x53dab3,_0x519539)=>{const _0x1e7586=_0x5258f1,_0xa96dc=()=>{const _0x4ed321=_0x280b;_0x411f0a[_0x4ed321(0x132)](_0x4ed321(0x13d),_0x26c875),_0x411f0a[_0x4ed321(0x132)](_0x4ed321(0xee),_0x443a03),_0x411f0a[_0x4ed321(0x132)](_0x4ed321(0x12d),_0x8a171a);},_0x26c875=()=>{_0xa96dc(),_0x53dab3();},_0x443a03=_0x288e08=>{_0xa96dc(),_0x519539(_0x288e08);},_0x8a171a=()=>{const _0xffb546=_0x280b;_0xa96dc(),_0x519539(Object[_0xffb546(0xd8)](new Error(_0xffb546(0x139)),{'code':_0xffb546(0xda)}));};_0x411f0a[_0x1e7586(0xff)](_0x1e7586(0x13d),_0x26c875),_0x411f0a[_0x1e7586(0xff)](_0x1e7586(0xee),_0x443a03),_0x411f0a[_0x1e7586(0xff)](_0x1e7586(0x12d),_0x8a171a);});}async function writeSocket(_0x51af88,_0x1283da){await new Promise((_0x104ecf,_0x3c34ef)=>{const _0x4707fc=_0x280b;_0x51af88[_0x4707fc(0xc7)](_0x1283da,_0x3e4ed6=>_0x3e4ed6?_0x3c34ef(_0x3e4ed6):_0x104ecf());});}async function readSocketExactly(_0x141933,_0x4bab87){const _0x55b282=_0x57e518;while(_0x141933[_0x55b282(0x115)]<_0x4bab87){if(_0x141933[_0x55b282(0x10c)]||_0x141933[_0x55b282(0x11e)])throw Object[_0x55b282(0xd8)](new Error(_0x55b282(0x101)),{'code':_0x55b282(0xda)});await new Promise((_0x118155,_0x15f319)=>{const _0x46fd7b=_0x55b282,_0x214715=()=>{const _0x15ec26=_0x280b;_0x141933[_0x15ec26(0x132)](_0x15ec26(0x10d),_0xdfcba0),_0x141933[_0x15ec26(0x132)](_0x15ec26(0xee),_0x186c5e),_0x141933[_0x15ec26(0x132)](_0x15ec26(0xfd),_0x3b303),_0x141933[_0x15ec26(0x132)](_0x15ec26(0x12d),_0x3b303);},_0xdfcba0=()=>{_0x214715(),_0x118155();},_0x186c5e=_0xc8be54=>{_0x214715(),_0x15f319(_0xc8be54);},_0x3b303=()=>{const _0x52709d=_0x280b;_0x214715(),_0x15f319(Object[_0x52709d(0xd8)](new Error(_0x52709d(0x101)),{'code':_0x52709d(0xda)}));};_0x141933[_0x46fd7b(0xff)](_0x46fd7b(0x10d),_0xdfcba0),_0x141933[_0x46fd7b(0xff)](_0x46fd7b(0xee),_0x186c5e),_0x141933[_0x46fd7b(0xff)](_0x46fd7b(0xfd),_0x3b303),_0x141933[_0x46fd7b(0xff)](_0x46fd7b(0x12d),_0x3b303);});}const _0x1ae196=_0x141933[_0x55b282(0xcd)](_0x4bab87);if(!Buffer[_0x55b282(0xdb)](_0x1ae196)||_0x1ae196[_0x55b282(0xe5)]!==_0x4bab87)throw socks5ProtocolError(_0x55b282(0xc6),_0x55b282(0xcc));return _0x1ae196;}async function consumeSocks5BoundAddress(_0x32ce92,_0x1adfa5){const _0x35dd06=_0x57e518;if(_0x1adfa5===-0x23d6+0x1*-0x1d79+0x4150){await readSocketExactly(_0x32ce92,0x179f*-0x1+0x94+0x5*0x49d);return;}if(_0x1adfa5===-0x1624+0x24af*-0x1+0x3ad7){await readSocketExactly(_0x32ce92,-0x1769+0x7*-0x37c+0x2fdf);return;}if(_0x1adfa5===-0x585*-0x7+0x1b*-0x2d+-0x21e1){const _0x528da4=(await readSocketExactly(_0x32ce92,0x12e8+0x1*0xc2e+-0x1f15))[-0x24a9+0x1e1c+0x68d];await readSocketExactly(_0x32ce92,_0x528da4+(0x1*-0xb33+-0x3*0x1a4+-0x1021*-0x1));return;}throw socks5ProtocolError(_0x35dd06(0xc6),_0x35dd06(0xe1));}async function upgradeSocks5Tls(_0x10b0ca,_0x498589){const _0x1587ee=_0x57e518,_0x555636=_0x5d5b77({'socket':_0x10b0ca,'servername':_0x498589[_0x1587ee(0x11f)]??_0x498589[_0x1587ee(0xfa)],..._0x498589[_0x1587ee(0x140)]===undefined?{}:{'ALPNProtocols':[..._0x498589[_0x1587ee(0x140)]]}}),_0x29e4de=()=>_0x555636[_0x1587ee(0xd5)](asError(_0x498589[_0x1587ee(0x111)]?.[_0x1587ee(0x104)])),_0x46613c=Object[_0x1587ee(0xd8)](new Error(_0x1587ee(0x12c)),{'code':_0x1587ee(0xf1)}),_0x252803=()=>_0x555636[_0x1587ee(0xd5)](_0x46613c);_0x498589[_0x1587ee(0x111)]?.[_0x1587ee(0xe7)](_0x1587ee(0xfb),_0x29e4de,{'once':!![]}),_0x555636[_0x1587ee(0xe6)](SOCKS5_HANDSHAKE_TIMEOUT_MS),_0x555636[_0x1587ee(0xff)](_0x1587ee(0xc5),_0x252803);try{await new Promise((_0x81ce4c,_0x3b5135)=>{const _0xbe7275=_0x1587ee,_0x210990=()=>{const _0x7277d3=_0x280b;_0x555636[_0x7277d3(0x132)](_0x7277d3(0x135),_0x2d9408),_0x555636[_0x7277d3(0x132)](_0x7277d3(0xee),_0x2e45e2),_0x555636[_0x7277d3(0x132)](_0x7277d3(0x12d),_0x3ed564);},_0x2d9408=()=>{_0x210990(),_0x81ce4c();},_0x2e45e2=_0x853d9b=>{_0x210990(),_0x3b5135(_0x853d9b);},_0x3ed564=()=>{const _0x52bb94=_0x280b;_0x210990(),_0x3b5135(Object[_0x52bb94(0xd8)](new Error(_0x52bb94(0x12f)),{'code':_0x52bb94(0xda)}));};_0x555636[_0xbe7275(0xff)](_0xbe7275(0x135),_0x2d9408),_0x555636[_0xbe7275(0xff)](_0xbe7275(0xee),_0x2e45e2),_0x555636[_0xbe7275(0xff)](_0xbe7275(0x12d),_0x3ed564);}),_0x555636[_0x1587ee(0xe6)](0x1d6+0xc73*-0x1+0xd*0xd1),_0x555636[_0x1587ee(0x132)](_0x1587ee(0xc5),_0x252803);if(_0x498589[_0x1587ee(0xde)]!==undefined&&_0x555636[_0x1587ee(0xd2)]!==_0x498589[_0x1587ee(0xde)])throw http2NegotiationError();return _0x555636;}catch(_0x3334ee){_0x555636[_0x1587ee(0xd5)]();throw _0x3334ee;}finally{_0x555636[_0x1587ee(0x132)](_0x1587ee(0xc5),_0x252803),_0x498589[_0x1587ee(0x111)]?.[_0x1587ee(0x124)](_0x1587ee(0xfb),_0x29e4de);}}function socks5ReplyError(_0x1e04e7){const _0xd9d77f=_0x57e518,_0xfa7b0=_0x1e04e7===-0x7d3*0x1+-0x283*-0x1+0x553?_0xd9d77f(0xec):_0x1e04e7===-0x1dc5+0x1*-0x1da9+0x3b72?_0xd9d77f(0x109):_0x1e04e7===0xf*0xf1+-0x585+-0x895?_0xd9d77f(0x127):_0x1e04e7===0x97d+-0xf*-0x9+0x4ff*-0x2?_0xd9d77f(0xf1):_0x1e04e7===-0x336*-0x9+-0x48*-0x65+0x1*-0x3947?_0xd9d77f(0x13f):_0x1e04e7===0x10de*-0x1+0x495+0xc51?_0xd9d77f(0x125):_0xd9d77f(0x12e);return socks5ProtocolError(_0xfa7b0,_0xd9d77f(0x147));}function socks5ProtocolError(_0x487a74,_0x558954){const _0x792d2e=_0x57e518;return Object[_0x792d2e(0xd8)](new Error(_0x558954),{'code':_0x487a74});}function invalidSocks5Proxy(_0x57ffd6){const _0x59907f=_0x57e518;return new MarAgentError(_0x59907f(0xe9),_0x59907f(0x113),{..._0x57ffd6===undefined?{}:{'cause':_0x57ffd6}});}function asError(_0x2d7b39){const _0x13c126=_0x57e518;return _0x2d7b39 instanceof Error?_0x2d7b39:new Error(_0x13c126(0x110),{'cause':_0x2d7b39});}function strictHttp2Connector(){const _0x4f7d67=buildConnector({'allowH2':!![]});return(_0x2a4ea1,_0x1ced16)=>_0x4f7d67(_0x2a4ea1,(_0xe7e869,_0x358f83)=>{const _0x565e8d=_0x280b;if(_0xe7e869||_0x358f83===null){_0x1ced16(_0xe7e869,_0x358f83);return;}if(!(_0x565e8d(0xd2)in _0x358f83)||_0x358f83[_0x565e8d(0xd2)]!=='h2'){const _0x1d9b74=http2NegotiationError();_0x358f83[_0x565e8d(0xd5)](_0x1d9b74),_0x1ced16(_0x1d9b74,null);return;}_0x1ced16(null,_0x358f83);});}function http2NegotiationError(){const _0x2df028=_0x57e518;return Object[_0x2df028(0xd8)](new Error(_0x2df028(0xd6)),{'code':_0x2df028(0xf5)});}function _0x5eee(){const _0x418dcd=['D3jPDgu','tw9KzwWGzw5KCg9PBNqGzgLKig5VDcbUzwDVDgLHDguGsfruuc8YlG','mti1nJK0nvLirwrPCW','rufjx0fhquLo','CgfZC3DVCMq','u09ds1m1ihbYB3H5ihjLDhvYBMvKigfUigLUDMfSAwqGCMvZCg9UC2uU','CMvHza','ota1mduWrKDfALHe','CMv0CNLHyMXL','CMvXDwvZDa','u09ds1m1ihbYB3H5ihjLCxvPCMvZigf1DgHLBNrPy2f0Aw9UlG','ywXWBLbYB3rVy29S','AxngAw5PDgu','CMfJzq','zgvZDhjVEq','sfruuc8Yiefmue4GBMvNB3rPyxrPB24GzMfPBgvKlG','yNL0zuXLBMD0Aa','yxnZAwDU','tw9KzwWGy29UBMvJDgLVBIb0Aw1LzcbVDxqU','runptK5srvnfva','AxncDwzMzxi','mtHxyKziyMy','CMfUzg9T','CMvXDwLYzwrbBhbUuhjVDg9JB2W','AgfZAa','CMvHzhLtDgf0zq','u09ds1m1ihbYB3H5ihjLDhvYBMvKigfUigLUDMfSAwqGywrKCMvZCY4','CgfYC2u','zgv0ywLSCW','Bwf4qxr0zw1WDhm','BgvUz3rO','C2v0vgLTzw91Da','ywrKrxzLBNrmAxn0zw5LCG','BM93','tufsx0fhru5ux01prevmx0nptKzjr19jtLzbteLe','Cgf0Ag5HBwu','mJmXmZC5DLr1qw1p','ru5fvfvouKvbq0G','C3rYAw5N','zxjYB3i','ru5pvezpvu5e','yM9KEq','rvrjtuvet1vu','u09ds1m1ihbYB3H5ihnLBgvJDgvKigfUihvUC3vWCg9YDgvKig1LDgHVzc4','y2f1C2u','DxrMoa','tufsx0fhru5ux0HuvfaYx05fr09usufusu9ox0zbsuXfra','mZKXmJb5qNzhsg0','zw5XDwv1zq','Bwf4','ndjYy252zuK','DgfYz2v0sg9ZDa','ywjVCNq','y2f0y2G','zw5K','Ahr0CfzLCNnPB24','B25Jzq','DgXZ','u09ds1m1ihbYB3H5ignVBM5Ly3rPB24Gzw5KzwqGzwfYBhKU','vu5ex0vsuL9tt0nlrvq','rufdq0vt','CMvHC29U','tufsx0fhru5ux01prevmx1rjtuvpvvq','AgvHzgvYCW','ChjVDg9JB2W','vu5ex0vsuL9irufervjtx1rjtuvpvvq','ruHpu1rvtLjfquni','tu9eruXFq09otKvdveLptL9usu1ft1vu','BNvTyMvY','CMvHzgfIBgvfBMrLza','CMvHzgfIBgu','z2v0uMvHzgvY','u09ds1m1ihbYB3H5ihjLAMvJDgvKigf1DgHLBNrPy2f0Aw9Uig1LDgHVzhmU','tw9KzwWGDhjHBNnWB3j0igzHAwXLzc4','C2LNBMfS','DMfSDwu','u09ds1m1ihbYB3H5ifvstcbPCYbPBNzHBgLKlG','ntyXm2P6Ew1YEG','CMvHzgfIBgvmzw5NDgG','rvbjueu','DgfYz2v0ug9YDa','Cg9YDa','D3jPDgvvsw50mtzcrq','DxnLCM5HBwu','u09ds1m1ignVBM5Ly3rPB24GDgLTzwqGB3v0lG','tw9KzwWGDhjHBNnWB3j0ihjLCxvLC3qGzMfPBgvKigfMDgvYihjLDhjPzxmU','C3rHDhvZ','zgvZDhjVEwvK','C2vYDMvYBMfTzq','nJeYnJzIAhfZre0','zNjVBq','B3bLBG','y29Uy2f0','CMvTB3zLrxzLBNrmAxn0zw5LCG','rufgtK9tvvbqt1ju','tw9KzwWGDhjHBNnWB3j0ihjLCxvLC3qGzMfPBgvKlG','runptK5sruzvu0ve','tu9eruXFvfjbtLnqt1jux0zbsuXvuKu','otC2wxvxvLDP','ms4X','C29JA3m1oG','veXtignVBM5Ly3rPB24GDgLTzwqGB3v0lG','y2XVC2u','ruLp','veXtignVBM5Ly3rPB24Gy2XVC2vKigvHCMX5lG','CMv0CNKTywz0zxi','z2v0','B2zM','zg9Uzq','C29JA3m1vxjS','C2vJDxjLq29UBMvJDa','vu5ex0vsuL9dt05orunux1rjtuvpvvq','AxntywzLsw50zwDLCG','tufsx0fhru5ux01prevmx0nptK5fq1rjt05FrKfjteve','u09ds1m1ihbYB3H5ignVBM5Ly3rPB24Gy2XVC2vKlG','C3rHDhvZvgv4Da','u09ds1m1ihbYB3H5igf1DgHLBNrPy2f0Aw9UigzHAwXLzc4','ywXSB2nvBNnHzMu','y29UBMvJDa','B2jQzwn0','rvbst1rptK9tvvbqt1ju','ywXWBLbYB3rVy29SCW','zMXVB3i','tw9KzwWGyxr0zw1WDhmGBxvZDcbIzsbIzxr3zwvUideGyw5KiduU','ywjVCNrLza','BwLU','B3jPz2LU','mZu0ntG2nfn2v0jYsa','u09ds1m1ihbYB3H5ignVDwXKig5VDcbJB25Uzwn0ihrVihrOzsbTB2rLBcbLBMrWB2LUDc4','zNvUy3rPB24','ru5fverpv04','y2fUy2vS','C2vHCMnO','y29Kzq','Ag9ZDg5HBwu','AxnjBNrLz2vY','AgfZ','DgLTzw91Da','rvbst1rp'];_0x5eee=function(){return _0x418dcd;};return _0x5eee();}function responseWithDispatcherLifecycle(_0xc14113,_0x50fffc){const _0x496106=_0x57e518;if(_0xc14113[_0x496106(0xf0)]===null)return void _0x50fffc[_0x496106(0x12d)](),_0xc14113;const _0x3658a0=_0xc14113[_0x496106(0xf0)][_0x496106(0x10e)]();let _0x591ea5=![];const _0x38371c=async()=>{const _0x38ee58=_0x496106;if(_0x591ea5)return;_0x591ea5=!![],await _0x50fffc[_0x38ee58(0x12d)]()[_0x38ee58(0xfc)](()=>undefined);},_0x3158d1=new ReadableStream({async 'pull'(_0xac17ea){const _0x332363=_0x496106;try{const _0x22fefa=await _0x3658a0[_0x332363(0xcd)]();if(_0x22fefa[_0x332363(0x133)])_0xac17ea[_0x332363(0x12d)](),await _0x38371c();else _0xac17ea[_0x332363(0xf7)](_0x22fefa[_0x332363(0x112)]);}catch(_0x43f5f5){_0xac17ea[_0x332363(0xee)](_0x43f5f5),await _0x38371c();}},async 'cancel'(_0x40f885){const _0x15ec51=_0x496106;await _0x3658a0[_0x15ec51(0x14a)](_0x40f885)[_0x15ec51(0xfc)](()=>undefined),await _0x38371c();}});return new Response(_0x3158d1,{'status':_0xc14113[_0x496106(0x11d)],'statusText':_0xc14113[_0x496106(0x13a)],'headers':_0xc14113[_0x496106(0x106)]});}function isModelHttpAttempt(_0x322e47){const _0x51dae1=_0x57e518;return _0x51dae1(0xd0)in _0x322e47&&(_0x322e47[_0x51dae1(0xfe)]===_0x51dae1(0x12a)||_0x322e47[_0x51dae1(0xfe)]==='2');}function hasErrorCode(_0x521808,_0x2195e8){const _0x327abe=_0x57e518;let _0x2e639e=_0x521808;for(let _0x18e370=-0x26e2+-0x1*-0x1e3b+0x8a7;_0x18e370<0x1b31*-0x1+-0x145d+0xcb*0x3c&&_0x2e639e!==null&&typeof _0x2e639e===_0x327abe(0x13e);_0x18e370++){const _0x4670d9=_0x2e639e;if(_0x4670d9[_0x327abe(0xc1)]===_0x2195e8)return!![];_0x2e639e=_0x4670d9[_0x327abe(0xf3)];}return![];}export function modelRetryDelay(_0x4a12d1,_0x3bbd69){const _0x599c20=_0x57e518;return retryAfterDelay(_0x4a12d1)??(_0x3bbd69+(0x682+-0x1ea3+0x1822))*(0x1c45+-0x1214+0x3*0x31d)+Math[_0x599c20(0x141)](Math[_0x599c20(0xdd)]()*(-0x26b+0x30*-0x61+0x2054));}export async function waitForModelRetry(_0x6c899a,_0x5dd7fe,_0x1c1c21,_0x191a08=modelRetryDelay(_0x6c899a,_0x5dd7fe)){await _0xfe0de7(_0x191a08,undefined,{'signal':_0x1c1c21});}export function isRetryableModelHttpStatus(_0x560d4e){const _0x2690ca=_0x57e518;return RETRYABLE_STATUS[_0x2690ca(0xc4)](_0x560d4e);}export function isRetryableModelRequestError(_0x449df2){const _0x1171a2=_0x57e518;return _0x449df2 instanceof MarAgentError&&_0x449df2[_0x1171a2(0xcf)]&&(_0x449df2[_0x1171a2(0xe3)]?.[_0x1171a2(0x104)]===_0x1171a2(0x10a)||_0x449df2[_0x1171a2(0xe3)]?.[_0x1171a2(0x104)]===_0x1171a2(0x128)||typeof _0x449df2[_0x1171a2(0xe3)]?.[_0x1171a2(0x11d)]===_0x1171a2(0x10b)&&isRetryableModelHttpStatus(_0x449df2[_0x1171a2(0xe3)][_0x1171a2(0x11d)]));}function retryAfterDelay(_0x14c962){const _0x1fb4fc=_0x57e518;if(_0x14c962!==null){const _0xba8321=Number(_0x14c962);if(Number[_0x1fb4fc(0xd3)](_0xba8321))return Math[_0x1fb4fc(0x144)](0xd0e1*0x1+-0x1*0x1caa+-0x3f07,Math[_0x1fb4fc(0xf8)](-0xa85+-0xb*-0x2a1+-0x1266,_0xba8321*(-0x728+0x13a*-0x14+0x86*0x44)));const _0x3a60ea=Date[_0x1fb4fc(0xe2)](_0x14c962);if(Number[_0x1fb4fc(0xd3)](_0x3a60ea))return Math[_0x1fb4fc(0x144)](-0x3*0x32ad+0x53f3*0x1+0xb944,Math[_0x1fb4fc(0xf8)](-0x53a+-0x1927+0x1e61,_0x3a60ea-Date[_0x1fb4fc(0xe8)]()));}return undefined;}function isModelConnectionTimeout(_0x586fd3){const _0x26e841=_0x57e518;return _0x586fd3 instanceof MarAgentError&&_0x586fd3[_0x26e841(0xc1)]===_0x26e841(0x105)&&_0x586fd3[_0x26e841(0xe3)]?.[_0x26e841(0x104)]===_0x26e841(0x10a);}export function isRetryableModelTransportError(_0x356d35){const _0x157163=_0x57e518;let _0x30e7b9=_0x356d35;for(let _0xf5dd04=-0x6*-0x334+0x1dbc+0x30f4*-0x1;_0xf5dd04<-0xd*-0xfb+0x1*-0x12c1+-0x2*-0x303&&_0x30e7b9!==null&&typeof _0x30e7b9===_0x157163(0x13e);_0xf5dd04++){const _0x1bd1ec=_0x30e7b9;if(typeof _0x1bd1ec[_0x157163(0xc1)]===_0x157163(0xed)&&RETRYABLE_TRANSPORT_CODES[_0x157163(0xc4)](_0x1bd1ec[_0x157163(0xc1)]))return!![];_0x30e7b9=_0x1bd1ec[_0x157163(0xf3)];}return![];}
1
+ import { setTimeout as delay } from 'node:timers/promises';
2
+ import { connect as connectTcp } from 'node:net';
3
+ import { connect as connectTls } from 'node:tls';
4
+ import { Client, Socks5ProxyAgent, buildConnector, fetch as undiciFetch } from 'undici';
5
+ import { MarAgentError } from '../error.js';
6
+ export const MAX_MODEL_ATTEMPTS = 5;
7
+ export function modelRetryMaxAttempts(state) {
8
+ const maximum = state.maxAttempts ?? MAX_MODEL_ATTEMPTS;
9
+ if (!Number.isInteger(maximum) || maximum < 1 || maximum > MAX_MODEL_ATTEMPTS)
10
+ throw new MarAgentError('MAR_AGENT_MODEL_CONFIG_INVALID', 'Model attempts must be between 1 and 5.');
11
+ return maximum;
12
+ }
13
+ const RETRYABLE_STATUS = new Set([408, 409, 429, 500, 502, 503, 504]);
14
+ const DEFAULT_MODEL_CONNECTION_TIMEOUT_MS = 30_000;
15
+ const SOCKS5_HANDSHAKE_TIMEOUT_MS = 10_000;
16
+ const RETRYABLE_TRANSPORT_CODES = new Set([
17
+ 'EAI_AGAIN',
18
+ 'ENOTFOUND',
19
+ 'ECONNREFUSED',
20
+ 'ECONNRESET',
21
+ 'EHOSTUNREACH',
22
+ 'ENETDOWN',
23
+ 'ENETUNREACH',
24
+ 'EPIPE',
25
+ 'ETIMEDOUT',
26
+ 'UND_ERR_CONNECT_TIMEOUT',
27
+ 'UND_ERR_HEADERS_TIMEOUT',
28
+ 'UND_ERR_SOCKET'
29
+ ]);
30
+ export async function fetchModelResponse(url, init, signal, attempts = MAX_MODEL_ATTEMPTS, connectionTimeoutMs = DEFAULT_MODEL_CONNECTION_TIMEOUT_MS) {
31
+ let response;
32
+ for (let attempt = 0; attempt < attempts; attempt++) {
33
+ try {
34
+ const resolved = typeof init === 'function' ? await init() : init;
35
+ const attempt = isModelHttpAttempt(resolved)
36
+ ? resolved
37
+ : { request: resolved, httpVersion: '1.1' };
38
+ response = await fetchWithConnectionTimeout(url, attempt, signal, connectionTimeoutMs);
39
+ }
40
+ catch (error) {
41
+ if (signal.aborted)
42
+ throw signal.reason ?? error;
43
+ if (isModelConnectionTimeout(error)) {
44
+ if (attempt + 1 >= attempts)
45
+ throw error;
46
+ await waitForModelRetry(null, attempt, signal);
47
+ continue;
48
+ }
49
+ if (!isRetryableModelTransportError(error))
50
+ throw error;
51
+ if (attempt + 1 >= attempts)
52
+ throw new MarAgentError('MAR_AGENT_MODEL_TIMEOUT', attempts === 1
53
+ ? 'Model transport request failed.'
54
+ : 'Model transport request failed after retries.', { retryable: true, details: { reason: 'MODEL_TRANSPORT_FAILURE' }, cause: error });
55
+ await waitForModelRetry(null, attempt, signal);
56
+ continue;
57
+ }
58
+ if (!RETRYABLE_STATUS.has(response.status) || attempt + 1 >= attempts)
59
+ return response;
60
+ const retryAfter = response.headers.get('retry-after');
61
+ await response.body?.cancel().catch(() => undefined);
62
+ await waitForModelRetry(retryAfter, attempt, signal);
63
+ }
64
+ return response;
65
+ }
66
+ async function fetchWithConnectionTimeout(url, attempt, signal, connectionTimeoutMs) {
67
+ if (signal.aborted)
68
+ throw signal.reason;
69
+ const controller = new AbortController();
70
+ const timeoutError = new MarAgentError('MAR_AGENT_MODEL_TIMEOUT', 'Model connection timed out.', {
71
+ details: { reason: 'MODEL_CONNECTION_TIMEOUT' },
72
+ retryable: true
73
+ });
74
+ let rejectInterruption = () => undefined;
75
+ const interruption = new Promise((_resolve, reject) => {
76
+ rejectInterruption = reject;
77
+ });
78
+ const abortFromCaller = () => {
79
+ const reason = signal.reason;
80
+ controller.abort(reason);
81
+ rejectInterruption(reason);
82
+ };
83
+ signal.addEventListener('abort', abortFromCaller, { once: true });
84
+ const timeout = setTimeout(() => {
85
+ controller.abort(timeoutError);
86
+ rejectInterruption(timeoutError);
87
+ }, Math.max(1, connectionTimeoutMs));
88
+ try {
89
+ return await Promise.race([fetchHttpAttempt(url, attempt, controller.signal), interruption]);
90
+ }
91
+ finally {
92
+ clearTimeout(timeout);
93
+ signal.removeEventListener('abort', abortFromCaller);
94
+ }
95
+ }
96
+ async function fetchHttpAttempt(url, attempt, signal) {
97
+ if (attempt.httpVersion === '1.1' && attempt.socks5Url === undefined)
98
+ return await fetch(url, { ...attempt.request, signal });
99
+ const dispatcher = attempt.socks5Url === undefined
100
+ ? http2Client(url)
101
+ : attempt.httpVersion === '2'
102
+ ? http2SocksClient(url, attempt.socks5Url)
103
+ : new Socks5ProxyAgent(attempt.socks5Url);
104
+ try {
105
+ const response = await undiciFetch(url, {
106
+ ...attempt.request,
107
+ signal,
108
+ dispatcher
109
+ });
110
+ return responseWithDispatcherLifecycle(response, dispatcher);
111
+ }
112
+ catch (error) {
113
+ await dispatcher.destroy(error instanceof Error ? error : null).catch(() => undefined);
114
+ if (hasErrorCode(error, 'MAR_AGENT_HTTP2_NEGOTIATION_FAILED'))
115
+ throw new MarAgentError('MAR_AGENT_MODEL_CONNECTION_FAILED', 'Model endpoint did not negotiate HTTP/2.', { cause: error });
116
+ throw error;
117
+ }
118
+ }
119
+ function http2Client(url) {
120
+ return new Client(new URL(url).origin, {
121
+ allowH2: true,
122
+ connect: strictHttp2Connector()
123
+ });
124
+ }
125
+ function http2SocksClient(url, socks5Url) {
126
+ return new Client(new URL(url).origin, {
127
+ allowH2: true,
128
+ connect: async (options, callback) => {
129
+ try {
130
+ const tlsSocket = await connectSocks5Target({
131
+ socks5Url,
132
+ targetHost: options.hostname,
133
+ targetPort: Number(options.port || 443),
134
+ tls: true,
135
+ servername: options.servername || options.hostname,
136
+ alpnProtocols: ['h2'],
137
+ requiredAlpnProtocol: 'h2'
138
+ });
139
+ callback(null, tlsSocket);
140
+ }
141
+ catch (error) {
142
+ callback(asError(error), null);
143
+ }
144
+ }
145
+ });
146
+ }
147
+ export async function connectSocks5Target(input) {
148
+ if (input.signal?.aborted)
149
+ throw input.signal.reason;
150
+ const proxy = parseSocks5Proxy(input.socks5Url);
151
+ const targetHost = Buffer.from(input.targetHost, 'utf8');
152
+ if (targetHost.length === 0 ||
153
+ targetHost.length > 255 ||
154
+ !Number.isSafeInteger(input.targetPort) ||
155
+ input.targetPort < 1 ||
156
+ input.targetPort > 65_535)
157
+ throw invalidSocks5Proxy();
158
+ const socket = connectTcp({ host: proxy.hostname, port: proxy.port });
159
+ const timeoutError = Object.assign(new Error('SOCKS5 connection timed out.'), {
160
+ code: 'ETIMEDOUT'
161
+ });
162
+ const abort = () => socket.destroy(asError(input.signal?.reason));
163
+ const timeout = () => socket.destroy(timeoutError);
164
+ input.signal?.addEventListener('abort', abort, { once: true });
165
+ socket.setTimeout(SOCKS5_HANDSHAKE_TIMEOUT_MS);
166
+ socket.once('timeout', timeout);
167
+ try {
168
+ await waitForSocketConnect(socket);
169
+ const methods = proxy.username === undefined ? [0x00] : [0x00, 0x02];
170
+ await writeSocket(socket, Buffer.from([0x05, methods.length, ...methods]));
171
+ const greeting = await readSocketExactly(socket, 2);
172
+ if (greeting[0] !== 0x05 || greeting[1] === 0xff)
173
+ throw socks5ProtocolError('EACCES', 'SOCKS5 proxy rejected authentication methods.');
174
+ if (greeting[1] === 0x02) {
175
+ if (proxy.username === undefined || proxy.password === undefined)
176
+ throw socks5ProtocolError('EACCES', 'SOCKS5 proxy requires authentication.');
177
+ const username = Buffer.from(proxy.username, 'utf8');
178
+ const password = Buffer.from(proxy.password, 'utf8');
179
+ await writeSocket(socket, Buffer.concat([
180
+ Buffer.from([0x01, username.length]),
181
+ username,
182
+ Buffer.from([password.length]),
183
+ password
184
+ ]));
185
+ const authentication = await readSocketExactly(socket, 2);
186
+ if (authentication[0] !== 0x01 || authentication[1] !== 0x00)
187
+ throw socks5ProtocolError('EACCES', 'SOCKS5 proxy authentication failed.');
188
+ }
189
+ else if (greeting[1] !== 0x00)
190
+ throw socks5ProtocolError('EACCES', 'SOCKS5 proxy selected an unsupported method.');
191
+ const port = Buffer.allocUnsafe(2);
192
+ port.writeUInt16BE(input.targetPort);
193
+ await writeSocket(socket, Buffer.concat([Buffer.from([0x05, 0x01, 0x00, 0x03, targetHost.length]), targetHost, port]));
194
+ const reply = await readSocketExactly(socket, 4);
195
+ if (reply[0] !== 0x05 || reply[2] !== 0x00)
196
+ throw socks5ProtocolError('EPROTO', 'SOCKS5 proxy returned an invalid response.');
197
+ if (reply[1] !== 0x00)
198
+ throw socks5ReplyError(reply[1]);
199
+ await consumeSocks5BoundAddress(socket, reply[3]);
200
+ socket.setTimeout(0);
201
+ socket.off('timeout', timeout);
202
+ input.signal?.removeEventListener('abort', abort);
203
+ if (!input.tls)
204
+ return socket;
205
+ return await upgradeSocks5Tls(socket, input);
206
+ }
207
+ catch (error) {
208
+ socket.destroy();
209
+ throw error;
210
+ }
211
+ finally {
212
+ socket.off('timeout', timeout);
213
+ input.signal?.removeEventListener('abort', abort);
214
+ }
215
+ }
216
+ function parseSocks5Proxy(value) {
217
+ try {
218
+ const url = new URL(value);
219
+ const port = url.port === '' ? 1080 : Number(url.port);
220
+ if (url.protocol !== 'socks5:' ||
221
+ url.hostname.length === 0 ||
222
+ !Number.isSafeInteger(port) ||
223
+ port < 1 ||
224
+ port > 65_535 ||
225
+ (url.pathname !== '' && url.pathname !== '/') ||
226
+ url.search !== '' ||
227
+ url.hash !== '')
228
+ throw invalidSocks5Proxy();
229
+ const hasAuthentication = url.username !== '' || url.password !== '';
230
+ const username = hasAuthentication ? decodeURIComponent(url.username) : undefined;
231
+ const password = hasAuthentication ? decodeURIComponent(url.password) : undefined;
232
+ if ((hasAuthentication && username?.length === 0) ||
233
+ (username !== undefined && Buffer.byteLength(username) > 255) ||
234
+ (password !== undefined && Buffer.byteLength(password) > 255))
235
+ throw invalidSocks5Proxy();
236
+ return {
237
+ hostname: url.hostname,
238
+ port,
239
+ ...(username === undefined ? {} : { username, password: password ?? '' })
240
+ };
241
+ }
242
+ catch (cause) {
243
+ if (cause instanceof MarAgentError)
244
+ throw cause;
245
+ throw invalidSocks5Proxy(cause);
246
+ }
247
+ }
248
+ async function waitForSocketConnect(socket) {
249
+ if (socket.readyState === 'open')
250
+ return;
251
+ await new Promise((resolve, reject) => {
252
+ const cleanup = () => {
253
+ socket.off('connect', connected);
254
+ socket.off('error', failed);
255
+ socket.off('close', closed);
256
+ };
257
+ const connected = () => {
258
+ cleanup();
259
+ resolve();
260
+ };
261
+ const failed = (error) => {
262
+ cleanup();
263
+ reject(error);
264
+ };
265
+ const closed = () => {
266
+ cleanup();
267
+ reject(Object.assign(new Error('SOCKS5 proxy connection closed.'), { code: 'ECONNRESET' }));
268
+ };
269
+ socket.once('connect', connected);
270
+ socket.once('error', failed);
271
+ socket.once('close', closed);
272
+ });
273
+ }
274
+ async function writeSocket(socket, value) {
275
+ await new Promise((resolve, reject) => {
276
+ socket.write(value, (error) => (error ? reject(error) : resolve()));
277
+ });
278
+ }
279
+ async function readSocketExactly(socket, length) {
280
+ while (socket.readableLength < length) {
281
+ if (socket.readableEnded || socket.destroyed)
282
+ throw Object.assign(new Error('SOCKS5 proxy connection ended early.'), {
283
+ code: 'ECONNRESET'
284
+ });
285
+ await new Promise((resolve, reject) => {
286
+ const cleanup = () => {
287
+ socket.off('readable', readable);
288
+ socket.off('error', failed);
289
+ socket.off('end', ended);
290
+ socket.off('close', ended);
291
+ };
292
+ const readable = () => {
293
+ cleanup();
294
+ resolve();
295
+ };
296
+ const failed = (error) => {
297
+ cleanup();
298
+ reject(error);
299
+ };
300
+ const ended = () => {
301
+ cleanup();
302
+ reject(Object.assign(new Error('SOCKS5 proxy connection ended early.'), {
303
+ code: 'ECONNRESET'
304
+ }));
305
+ };
306
+ socket.once('readable', readable);
307
+ socket.once('error', failed);
308
+ socket.once('end', ended);
309
+ socket.once('close', ended);
310
+ });
311
+ }
312
+ const value = socket.read(length);
313
+ if (!Buffer.isBuffer(value) || value.length !== length)
314
+ throw socks5ProtocolError('EPROTO', 'SOCKS5 proxy returned an invalid response.');
315
+ return value;
316
+ }
317
+ async function consumeSocks5BoundAddress(socket, addressType) {
318
+ if (addressType === 0x01) {
319
+ await readSocketExactly(socket, 6);
320
+ return;
321
+ }
322
+ if (addressType === 0x04) {
323
+ await readSocketExactly(socket, 18);
324
+ return;
325
+ }
326
+ if (addressType === 0x03) {
327
+ const length = (await readSocketExactly(socket, 1))[0];
328
+ await readSocketExactly(socket, length + 2);
329
+ return;
330
+ }
331
+ throw socks5ProtocolError('EPROTO', 'SOCKS5 proxy returned an invalid address.');
332
+ }
333
+ async function upgradeSocks5Tls(socket, input) {
334
+ const tlsSocket = connectTls({
335
+ socket,
336
+ servername: input.servername ?? input.targetHost,
337
+ ...(input.alpnProtocols === undefined ? {} : { ALPNProtocols: [...input.alpnProtocols] })
338
+ });
339
+ const abort = () => tlsSocket.destroy(asError(input.signal?.reason));
340
+ const timeoutError = Object.assign(new Error('TLS connection timed out.'), {
341
+ code: 'ETIMEDOUT'
342
+ });
343
+ const timeout = () => tlsSocket.destroy(timeoutError);
344
+ input.signal?.addEventListener('abort', abort, { once: true });
345
+ tlsSocket.setTimeout(SOCKS5_HANDSHAKE_TIMEOUT_MS);
346
+ tlsSocket.once('timeout', timeout);
347
+ try {
348
+ await new Promise((resolve, reject) => {
349
+ const cleanup = () => {
350
+ tlsSocket.off('secureConnect', connected);
351
+ tlsSocket.off('error', failed);
352
+ tlsSocket.off('close', closed);
353
+ };
354
+ const connected = () => {
355
+ cleanup();
356
+ resolve();
357
+ };
358
+ const failed = (error) => {
359
+ cleanup();
360
+ reject(error);
361
+ };
362
+ const closed = () => {
363
+ cleanup();
364
+ reject(Object.assign(new Error('TLS connection closed early.'), { code: 'ECONNRESET' }));
365
+ };
366
+ tlsSocket.once('secureConnect', connected);
367
+ tlsSocket.once('error', failed);
368
+ tlsSocket.once('close', closed);
369
+ });
370
+ tlsSocket.setTimeout(0);
371
+ tlsSocket.off('timeout', timeout);
372
+ if (input.requiredAlpnProtocol !== undefined &&
373
+ tlsSocket.alpnProtocol !== input.requiredAlpnProtocol)
374
+ throw http2NegotiationError();
375
+ return tlsSocket;
376
+ }
377
+ catch (error) {
378
+ tlsSocket.destroy();
379
+ throw error;
380
+ }
381
+ finally {
382
+ tlsSocket.off('timeout', timeout);
383
+ input.signal?.removeEventListener('abort', abort);
384
+ }
385
+ }
386
+ function socks5ReplyError(reply) {
387
+ const code = reply === 0x03
388
+ ? 'ENETUNREACH'
389
+ : reply === 0x04
390
+ ? 'EHOSTUNREACH'
391
+ : reply === 0x05
392
+ ? 'ECONNREFUSED'
393
+ : reply === 0x06
394
+ ? 'ETIMEDOUT'
395
+ : reply === 0x07
396
+ ? 'EPROTONOSUPPORT'
397
+ : reply === 0x08
398
+ ? 'EAFNOSUPPORT'
399
+ : 'EIO';
400
+ return socks5ProtocolError(code, 'SOCKS5 proxy could not connect to the model endpoint.');
401
+ }
402
+ function socks5ProtocolError(code, message) {
403
+ return Object.assign(new Error(message), { code });
404
+ }
405
+ function invalidSocks5Proxy(cause) {
406
+ return new MarAgentError('MAR_AGENT_MODEL_CONFIG_INVALID', 'SOCKS5 proxy URL is invalid.', {
407
+ ...(cause === undefined ? {} : { cause })
408
+ });
409
+ }
410
+ function asError(error) {
411
+ return error instanceof Error ? error : new Error('Model transport failed.', { cause: error });
412
+ }
413
+ function strictHttp2Connector() {
414
+ const connector = buildConnector({ allowH2: true });
415
+ return (options, callback) => connector(options, (error, socket) => {
416
+ if (error || socket === null) {
417
+ callback(error, socket);
418
+ return;
419
+ }
420
+ if (!('alpnProtocol' in socket) || socket.alpnProtocol !== 'h2') {
421
+ const negotiationError = http2NegotiationError();
422
+ socket.destroy(negotiationError);
423
+ callback(negotiationError, null);
424
+ return;
425
+ }
426
+ callback(null, socket);
427
+ });
428
+ }
429
+ function http2NegotiationError() {
430
+ return Object.assign(new Error('HTTP/2 ALPN negotiation failed.'), {
431
+ code: 'MAR_AGENT_HTTP2_NEGOTIATION_FAILED'
432
+ });
433
+ }
434
+ function responseWithDispatcherLifecycle(response, dispatcher) {
435
+ if (response.body === null) {
436
+ void dispatcher.close();
437
+ return response;
438
+ }
439
+ const reader = response.body.getReader();
440
+ let closed = false;
441
+ const close = async () => {
442
+ if (closed)
443
+ return;
444
+ closed = true;
445
+ await dispatcher.close().catch(() => undefined);
446
+ };
447
+ const body = new ReadableStream({
448
+ async pull(controller) {
449
+ try {
450
+ const result = await reader.read();
451
+ if (result.done) {
452
+ controller.close();
453
+ await close();
454
+ }
455
+ else
456
+ controller.enqueue(result.value);
457
+ }
458
+ catch (error) {
459
+ controller.error(error);
460
+ await close();
461
+ }
462
+ },
463
+ async cancel(reason) {
464
+ await reader.cancel(reason).catch(() => undefined);
465
+ await close();
466
+ }
467
+ });
468
+ return new Response(body, {
469
+ status: response.status,
470
+ statusText: response.statusText,
471
+ headers: response.headers
472
+ });
473
+ }
474
+ function isModelHttpAttempt(value) {
475
+ return 'request' in value && (value.httpVersion === '1.1' || value.httpVersion === '2');
476
+ }
477
+ function hasErrorCode(error, code) {
478
+ let current = error;
479
+ for (let depth = 0; depth < 6 && current !== null && typeof current === 'object'; depth++) {
480
+ const value = current;
481
+ if (value.code === code)
482
+ return true;
483
+ current = value.cause;
484
+ }
485
+ return false;
486
+ }
487
+ export function modelRetryDelay(retryAfter, attempt) {
488
+ return retryAfterDelay(retryAfter) ?? (attempt + 1) * 5_000 + Math.floor(Math.random() * 3_001);
489
+ }
490
+ export async function waitForModelRetry(retryAfter, attempt, signal, delayMs = modelRetryDelay(retryAfter, attempt)) {
491
+ await delay(delayMs, undefined, { signal });
492
+ }
493
+ export function isRetryableModelHttpStatus(status) {
494
+ return RETRYABLE_STATUS.has(status);
495
+ }
496
+ export function isRetryableModelRequestError(error) {
497
+ return (error instanceof MarAgentError &&
498
+ error.retryable &&
499
+ (error.details?.reason === 'MODEL_CONNECTION_TIMEOUT' ||
500
+ error.details?.reason === 'MODEL_TRANSPORT_FAILURE' ||
501
+ (typeof error.details?.status === 'number' &&
502
+ isRetryableModelHttpStatus(error.details.status))));
503
+ }
504
+ function retryAfterDelay(value) {
505
+ if (value !== null) {
506
+ const seconds = Number(value);
507
+ if (Number.isFinite(seconds))
508
+ return Math.min(30_000, Math.max(0, seconds * 1000));
509
+ const date = Date.parse(value);
510
+ if (Number.isFinite(date))
511
+ return Math.min(30_000, Math.max(0, date - Date.now()));
512
+ }
513
+ return undefined;
514
+ }
515
+ function isModelConnectionTimeout(error) {
516
+ return (error instanceof MarAgentError &&
517
+ error.code === 'MAR_AGENT_MODEL_TIMEOUT' &&
518
+ error.details?.reason === 'MODEL_CONNECTION_TIMEOUT');
519
+ }
520
+ export function isRetryableModelTransportError(error) {
521
+ let current = error;
522
+ for (let depth = 0; depth < 4 && current !== null && typeof current === 'object'; depth++) {
523
+ const record = current;
524
+ if (typeof record.code === 'string' && RETRYABLE_TRANSPORT_CODES.has(record.code))
525
+ return true;
526
+ current = record.cause;
527
+ }
528
+ return false;
529
+ }
@@ -46,6 +46,7 @@ declare class OpenAiResponsesTurnSession implements ModelTurnSession {
46
46
  constructor(adapter: OpenAiResponsesAdapter, state: ResponsesSessionState, cacheLease: boolean, allowExternalContinuation: boolean);
47
47
  start(request: ModelRequest, signal: AbortSignal): AsyncIterable<ModelEvent>;
48
48
  close(): Promise<void>;
49
+ resetContinuation(): void;
49
50
  prepareRequest(request: ModelRequest): PreparedResponsesRequest;
50
51
  fullRequestBody(): ResponsesRequestBody;
51
52
  currentTurnState(): string | undefined;
@@ -66,4 +67,5 @@ declare class OpenAiResponsesTurnSession implements ModelTurnSession {
66
67
  private connectWebSocket;
67
68
  }
68
69
  export declare function isOpenAiResponsesRecoverableStreamError(error: unknown): error is MarAgentError;
70
+ export declare function openAiInput(messages: ModelRequest['messages'], images: ModelRequest['images'] | undefined, modelId: string, requireEncryptedReasoning: boolean): Record<string, unknown>[];
69
71
  export {};