@myagentroam/node 0.9.62 → 0.9.65

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 (161) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +4 -0
  3. package/dist/capabilities.js +110 -2
  4. package/dist/claude-agent-sdk.js +330 -2
  5. package/dist/claude-channel.js +44 -2
  6. package/dist/codex-app-server.js +510 -2
  7. package/dist/config.js +106 -2
  8. package/dist/connector/node-connector-options.js +1 -2
  9. package/dist/connector/node-operation-router.js +22 -2
  10. package/dist/connector.js +1736 -2
  11. package/dist/control-outbound-scheduler.js +153 -2
  12. package/dist/database.js +639 -2
  13. package/dist/fake-runner.js +129 -2
  14. package/dist/git-askpass.js +12 -0
  15. package/dist/git-execution-helper.js +266 -0
  16. package/dist/health.js +3 -2
  17. package/dist/main.js +57 -2
  18. package/dist/mcp-installation-model.js +1 -2
  19. package/dist/migrations/v004.js +55 -3
  20. package/dist/migrations/v005.js +13 -3
  21. package/dist/migrations/v006.js +90 -3
  22. package/dist/migrations/v007.js +22 -3
  23. package/dist/migrations/v008.js +18 -3
  24. package/dist/migrations/v009.js +70 -4
  25. package/dist/migrations/v010.js +43 -3
  26. package/dist/migrations/v011.js +20 -3
  27. package/dist/migrations/v012.js +8 -0
  28. package/dist/native-jsonl-reader.js +186 -2
  29. package/dist/native-session-history.js +1143 -2
  30. package/dist/opencode-runtime.js +80 -2
  31. package/dist/opencode-server.js +259 -2
  32. package/dist/operational.js +122 -2
  33. package/dist/process-tree.js +18 -2
  34. package/dist/ripgrep-binary.js +31 -2
  35. package/dist/rotating-log.js +67 -2
  36. package/dist/runner/abstract-runner.js +260 -2
  37. package/dist/runner/claude/managed-run-controller.js +355 -2
  38. package/dist/runner/claude/tool-normalizer.js +120 -2
  39. package/dist/runner/claude-code-runner.js +303 -2
  40. package/dist/runner/codex/composer-image-markers.js +8 -2
  41. package/dist/runner/codex/conversation-parser.js +913 -2
  42. package/dist/runner/codex/managed-run-controller.js +494 -2
  43. package/dist/runner/codex/tool-normalizer.js +214 -2
  44. package/dist/runner/codex-runner.js +585 -2
  45. package/dist/runner/fake-test-runner.js +47 -2
  46. package/dist/runner/mar-agent/conversation-normalizer.js +644 -2
  47. package/dist/runner/mar-agent/executor-stdio-client-transport.js +139 -2
  48. package/dist/runner/mar-agent/generated-images.js +41 -2
  49. package/dist/runner/mar-agent/history-projection.js +106 -2
  50. package/dist/runner/mar-agent/hosted-conversation-runtime.js +446 -2
  51. package/dist/runner/mar-agent/managed-run-controller.js +785 -2
  52. package/dist/runner/mar-agent/mcp-client-pool.js +233 -2
  53. package/dist/runner/mar-agent/runtime-model-factory.js +326 -2
  54. package/dist/runner/mar-agent-runner.js +458 -2
  55. package/dist/runner/opencode/conversation-parser.js +221 -2
  56. package/dist/runner/opencode/managed-run-controller.js +588 -2
  57. package/dist/runner/opencode/tool-normalizer.js +80 -2
  58. package/dist/runner/opencode-runner.js +426 -2
  59. package/dist/runner/runner-registry.js +87 -2
  60. package/dist/runner-command-engine.js +71 -2
  61. package/dist/runner-profiles.js +323 -2
  62. package/dist/runner-usage.js +190 -2
  63. package/dist/runtime-command-detector.js +73 -2
  64. package/dist/runtime-model.js +1 -2
  65. package/dist/runtime-state.js +1509 -2
  66. package/dist/service/attachment-domain-state.js +7 -2
  67. package/dist/service/bubblewrap-sandbox-executor.js +543 -2
  68. package/dist/service/continuous-run-coordinator.js +425 -2
  69. package/dist/service/conversation-history-service.js +552 -2
  70. package/dist/service/conversation-hosting-capability-service.js +61 -2
  71. package/dist/service/conversation-hosting-enablement-service.js +91 -2
  72. package/dist/service/conversation-hosting-maintenance-service.js +174 -2
  73. package/dist/service/conversation-segment-service.js +162 -2
  74. package/dist/service/conversation-template-node-service.js +992 -2
  75. package/dist/service/external-session-resume-service.js +152 -2
  76. package/dist/service/fake-managed-run-service.js +60 -2
  77. package/dist/service/git-execution-service.js +418 -0
  78. package/dist/service/git-operation-service.js +57 -0
  79. package/dist/service/hosted-conversation-node-service.js +1982 -2
  80. package/dist/service/hosted-conversation-store.js +1405 -2
  81. package/dist/service/managed-runner-session-service.js +35 -2
  82. package/dist/service/mar-agent-model-transport-test-service.js +88 -2
  83. package/dist/service/mcp-installation-verifier.js +87 -2
  84. package/dist/service/mcp-node-operation-service.js +90 -2
  85. package/dist/service/mission-mcp-server.js +124 -2
  86. package/dist/service/mission-mcp-stdio.js +40 -2
  87. package/dist/service/mission-runtime.js +142 -2
  88. package/dist/service/native-session-projection-service.js +274 -2
  89. package/dist/service/native-session-watch-service.js +683 -2
  90. package/dist/service/node-connection-lifecycle-service.js +88 -2
  91. package/dist/service/node-control-channel.js +85 -2
  92. package/dist/service/node-control-message-service.js +109 -2
  93. package/dist/service/node-request-service.js +62 -2
  94. package/dist/service/node-run-event-bridge.js +88 -2
  95. package/dist/service/node-terminal-channel.js +202 -2
  96. package/dist/service/node-upgrade-coordinator.js +137 -2
  97. package/dist/service/node-workspace-coordinator.js +97 -2
  98. package/dist/service/recent-run-projection-service.js +99 -2
  99. package/dist/service/run-attachment-service.js +321 -2
  100. package/dist/service/run-domain-state.js +4 -2
  101. package/dist/service/run-event-service.js +246 -2
  102. package/dist/service/run-ownership-policy.js +22 -2
  103. package/dist/service/run-workbench-service.js +120 -2
  104. package/dist/service/runner-channel-message-service.js +20 -2
  105. package/dist/service/runner-interaction-service.js +243 -2
  106. package/dist/service/runner-service.js +69 -2
  107. package/dist/service/runtime-credential-control-service.js +95 -2
  108. package/dist/service/session-catalog-service.js +404 -2
  109. package/dist/service/session-command-service.js +125 -2
  110. package/dist/service/session-context-service.js +128 -2
  111. package/dist/service/session-domain-state.js +9 -2
  112. package/dist/service/session-identity-service.js +86 -2
  113. package/dist/service/session-lifecycle-service.js +248 -2
  114. package/dist/service/session-message-service.js +270 -2
  115. package/dist/service/session-presentation-service.js +43 -2
  116. package/dist/service/session-query-service.js +82 -2
  117. package/dist/service/session-watch-slot-coordinator.js +21 -2
  118. package/dist/service/skill-directory-service.js +238 -2
  119. package/dist/service/skill-install-service.js +434 -2
  120. package/dist/service/skill-node-operation-service.js +206 -2
  121. package/dist/service/terminal-relay-state.js +3 -2
  122. package/dist/service/terminal-service.js +90 -2
  123. package/dist/service/web-search-error.js +40 -2
  124. package/dist/service/workbench-event-service.js +21 -2
  125. package/dist/service/workbench-manifest-service.js +69 -2
  126. package/dist/service/workspace-change-service.js +290 -2
  127. package/dist/service/workspace-content-search-service.js +457 -2
  128. package/dist/service/workspace-domain-state.js +41 -2
  129. package/dist/service/workspace-file-service.js +150 -2
  130. package/dist/service/workspace-git-exclude-service.js +119 -2
  131. package/dist/service/workspace-queue-workbench-service.js +176 -2
  132. package/dist/service/workspace-service.js +92 -2
  133. package/dist/service/workspace-session-service.js +154 -2
  134. package/dist/service/workspace-upload-service.js +262 -2
  135. package/dist/service/workspace-watch-controller.js +68 -2
  136. package/dist/service/workspace-watch-service.js +170 -2
  137. package/dist/service/workspace-watch-snapshot-service.js +218 -2
  138. package/dist/service/workspace-workbench-service.js +239 -2
  139. package/dist/service.js +91 -2
  140. package/dist/storage.js +32 -2
  141. package/dist/supervisor.js +136 -2
  142. package/dist/terminal.js +496 -2
  143. package/dist/util/git-credential-client.js +32 -0
  144. package/dist/util/node-operation-data.js +9 -2
  145. package/dist/util/node-operation-parsers.js +382 -2
  146. package/dist/util/personal-instructions.js +34 -2
  147. package/dist/util/runner-error.js +70 -2
  148. package/dist/util/runner-native-session-parsers.js +510 -2
  149. package/dist/util/safe-error.js +8 -2
  150. package/dist/util/secret-environment.js +25 -2
  151. package/dist/workspace.js +1793 -2
  152. package/package.json +11 -8
  153. package/vendor/ripgrep/darwin-arm64/rg +0 -0
  154. package/vendor/ripgrep/darwin-x64/rg +0 -0
  155. package/vendor/ripgrep/manifest.json +12 -0
  156. package/README.md +0 -42
  157. package/dist/event-buffer.js +0 -2
  158. package/dist/migrations/v001.js +0 -107
  159. package/dist/migrations/v002.js +0 -2
  160. package/dist/migrations/v003.js +0 -2
  161. package/dist/service/mcp-package-installer.js +0 -2
@@ -1,2 +1,233 @@
1
- /* mar-release-protected */
2
- const _0x4bac39=_0x2f65;(function(_0x46744b,_0x1500dd){const _0x474eb5=_0x2f65,_0x132db5=_0x46744b();while(!![]){try{const _0x28759d=parseInt(_0x474eb5(0x130))/(0x12fa+-0x1a6*0x10+0x767)+parseInt(_0x474eb5(0x119))/(0x641+-0x16a+-0x4d5*0x1)*(parseInt(_0x474eb5(0x104))/(-0x1*-0x2085+-0x17fa+-0x888))+parseInt(_0x474eb5(0x114))/(-0xb8c+-0x550+0x10e0)*(-parseInt(_0x474eb5(0x14f))/(0x2170+-0x2dd*0x9+-0x7a6))+-parseInt(_0x474eb5(0x115))/(0x3*0x1+0x2519+-0x2516)*(parseInt(_0x474eb5(0x128))/(0x226a+-0x1e73+0x3*-0x150))+parseInt(_0x474eb5(0x148))/(0x1*-0x435+-0x63d*0x2+0x10b7*0x1)+-parseInt(_0x474eb5(0x142))/(0x3a4*0x2+0x29*-0x1f+-0x248)+-parseInt(_0x474eb5(0x110))/(-0x1*0x1971+0xf4c+0xa2f)*(-parseInt(_0x474eb5(0x117))/(-0x1ca1+-0xb7b+0x2827));if(_0x28759d===_0x1500dd)break;else _0x132db5['push'](_0x132db5['shift']());}catch(_0x53224c){_0x132db5['push'](_0x132db5['shift']());}}}(_0x592e,0x43efc+-0x12f1*0x3d+0x337f3));function _0x2f65(_0x33fce6,_0x5137fa){_0x33fce6=_0x33fce6-(-0x1*0x1e9d+0x17f*-0x2+-0x1*-0x2294);const _0x5ddb8a=_0x592e();let _0x12013a=_0x5ddb8a[_0x33fce6];if(_0x2f65['dcdZBe']===undefined){var _0x243b41=function(_0x3570e6){const _0x2f2d3e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3af7df='',_0x45e48c='';for(let _0x39548e=0xd99*0x1+0x233b+-0x30d4,_0xb22ddc,_0x1a1e5d,_0x251d3a=0xa93*0x1+-0x2166+-0x16d3*-0x1;_0x1a1e5d=_0x3570e6['charAt'](_0x251d3a++);~_0x1a1e5d&&(_0xb22ddc=_0x39548e%(-0x85b+0x29*0xcc+-0x184d)?_0xb22ddc*(0x186b+-0x1af0*0x1+0x2c5*0x1)+_0x1a1e5d:_0x1a1e5d,_0x39548e++%(-0x13*0x11b+0x84f*-0x1+0x1d54))?_0x3af7df+=String['fromCharCode'](-0x2183+0x35b*0x4+-0x1*-0x1516&_0xb22ddc>>(-(0x6f6+0x12a*-0x19+-0x10e*-0x15)*_0x39548e&-0x1ea*0x3+-0x1*-0x116d+0x3*-0x3e3)):-0x1*0x1ed2+0x809+-0x133*-0x13){_0x1a1e5d=_0x2f2d3e['indexOf'](_0x1a1e5d);}for(let _0x5f2780=-0x1ecc+-0x6d8+0x25a4,_0x41ca81=_0x3af7df['length'];_0x5f2780<_0x41ca81;_0x5f2780++){_0x45e48c+='%'+('00'+_0x3af7df['charCodeAt'](_0x5f2780)['toString'](0xf35+0x2ef*-0x3+-0x658))['slice'](-(0x153a+0x17*-0xe+0x7*-0x2da));}return decodeURIComponent(_0x45e48c);};_0x2f65['hCNDKD']=_0x243b41,_0x2f65['iNQXXt']={},_0x2f65['dcdZBe']=!![];}const _0x293446=_0x5ddb8a[-0x2391*0x1+-0x786+0x2b17];_0x2f65['MLfCXN']!==_0x293446&&(_0x2f65['iNQXXt']={},_0x2f65['MLfCXN']=_0x293446);const _0x43cd39=_0x2f65['iNQXXt'][_0x33fce6];return _0x43cd39===undefined?(_0x12013a=_0x2f65['hCNDKD'](_0x12013a),_0x2f65['iNQXXt'][_0x33fce6]=_0x12013a):_0x12013a=_0x43cd39,_0x12013a;}import{createHash}from'node:crypto';import{Client}from'@modelcontextprotocol/sdk/client/index.js';import{getDefaultEnvironment,StdioClientTransport}from'@modelcontextprotocol/sdk/client/stdio.js';import{StreamableHTTPClientTransport}from'@modelcontextprotocol/sdk/client/streamableHttp.js';import{ExecutorStdioClientTransport}from'./executor-stdio-client-transport.js';export class MarAgentMcpClientCache{#entries=new Map();#idleTtlMs;#maxEntries;#closed=![];constructor(_0x2231d4={}){const _0x44d689=_0x2f65;this.#idleTtlMs=_0x2231d4[_0x44d689(0x10d)]??(0xe6b+0x1b92+-0xa7e*0x4)*(0xeba+-0x8d5d*-0x3+-0xcc71),this.#maxEntries=_0x2231d4[_0x44d689(0x132)]??0x29*0xcc+-0x16b1+-0x9eb*0x1;}async[_0x4bac39(0xfe)](_0x473622,_0x429c40,_0x163d62={}){const _0x504e90=_0x4bac39;if(this.#closed)throw new Error(_0x504e90(0x11d));if(_0x163d62[_0x504e90(0x105)]!==undefined&&_0x163d62[_0x504e90(0x14b)]!==![])throw new Error(_0x504e90(0x135));if(_0x163d62[_0x504e90(0x14b)]===![]){const _0x16445b=await MarAgentMcpClientPool[_0x504e90(0x112)](_0x473622,_0x429c40,_0x163d62);return singleUseLease(_0x16445b);}const _0x57e00f=mcpConfigurationFingerprint(_0x473622,_0x429c40);let _0x1d9d6d=this.#entries[_0x504e90(0x14e)](_0x57e00f);if(_0x1d9d6d===undefined){await this.#evictIdleEntry();if(this.#entries[_0x504e90(0x11b)]>=this.#maxEntries){const _0x174686=await MarAgentMcpClientPool[_0x504e90(0x112)](_0x473622,_0x429c40);return singleUseLease(_0x174686);}_0x1d9d6d={'promise':MarAgentMcpClientPool[_0x504e90(0x112)](_0x473622,_0x429c40),'references':0x0,'lastReleasedAt':0x0},this.#entries[_0x504e90(0xfc)](_0x57e00f,_0x1d9d6d),_0x1d9d6d[_0x504e90(0x116)][_0x504e90(0x109)](()=>{const _0x584500=_0x504e90;if(this.#entries[_0x584500(0x14e)](_0x57e00f)===_0x1d9d6d)this.#entries[_0x584500(0x10c)](_0x57e00f);});}_0x1d9d6d[_0x504e90(0x118)]!==undefined&&(clearTimeout(_0x1d9d6d[_0x504e90(0x118)]),delete _0x1d9d6d[_0x504e90(0x118)]);_0x1d9d6d[_0x504e90(0xf9)]+=-0x14bb+0x19e2*0x1+-0x526;let _0x2ffe08;try{_0x2ffe08=await _0x1d9d6d[_0x504e90(0x116)];}catch(_0x161ec0){_0x1d9d6d[_0x504e90(0xf9)]-=-0x84f+0xa4e*0x1+-0x1fe;throw _0x161ec0;}let _0x533813=![];return{'pool':_0x2ffe08,'release':async()=>{if(_0x533813)return;_0x533813=!![],await this.#release(_0x57e00f,_0x1d9d6d);}};}async[_0x4bac39(0x124)](){const _0x543896=_0x4bac39;if(this.#closed)return;this.#closed=!![];const _0xe4d435=[...this.#entries[_0x543896(0x140)]()];this.#entries[_0x543896(0x12d)]();for(const _0x424e9a of _0xe4d435)if(_0x424e9a[_0x543896(0x118)]!==undefined)clearTimeout(_0x424e9a[_0x543896(0x118)]);await Promise[_0x543896(0x125)](_0xe4d435[_0x543896(0x149)](_0x40a809=>_0x40a809[_0x543896(0x116)][_0x543896(0x10f)](_0x223d70=>_0x223d70[_0x543896(0x124)]())[_0x543896(0x109)](()=>undefined)));}async #release(_0x355d91,_0xed40f1){const _0x66ec15=_0x4bac39;_0xed40f1[_0x66ec15(0xf9)]=Math[_0x66ec15(0x103)](-0x2183+0x35b*0x4+-0x1*-0x1417,_0xed40f1[_0x66ec15(0xf9)]-(0x6f6+0x12a*-0x19+-0x1625*-0x1));if(_0xed40f1[_0x66ec15(0xf9)]>-0x1ea*0x3+-0x1*-0x116d+0x1*-0xbaf||this.#entries[_0x66ec15(0x14e)](_0x355d91)!==_0xed40f1)return;_0xed40f1[_0x66ec15(0x13e)]=Date[_0x66ec15(0xff)](),_0xed40f1[_0x66ec15(0x118)]=setTimeout(()=>{const _0x26677e=_0x66ec15;if(_0xed40f1[_0x26677e(0xf9)]>-0x1*0x1ed2+0x809+-0x133*-0x13||this.#entries[_0x26677e(0x14e)](_0x355d91)!==_0xed40f1)return;this.#entries[_0x26677e(0x10c)](_0x355d91),void _0xed40f1[_0x26677e(0x116)][_0x26677e(0x10f)](_0x1618b3=>_0x1618b3[_0x26677e(0x124)]())[_0x26677e(0x109)](()=>undefined);},this.#idleTtlMs),_0xed40f1[_0x66ec15(0x118)][_0x66ec15(0x127)]();}async #evictIdleEntry(){const _0x3e36f0=_0x4bac39;if(this.#entries[_0x3e36f0(0x11b)]<this.#maxEntries)return;const _0x24b77b=[...this.#entries[_0x3e36f0(0x107)]()][_0x3e36f0(0x108)](([,_0x51a300])=>_0x51a300[_0x3e36f0(0xf9)]===-0x1ecc+-0x6d8+0x25a4)[_0x3e36f0(0x10b)]((_0x14a39f,_0x2b6f52)=>_0x14a39f[0xf35+0x2ef*-0x3+-0x667][_0x3e36f0(0x13e)]-_0x2b6f52[0x153a+0x17*-0xe+0x1*-0x13f7][_0x3e36f0(0x13e)])[-0x2391*0x1+-0x786+0x2b17];if(_0x24b77b===undefined)return;const [_0x694c84,_0x335699]=_0x24b77b;this.#entries[_0x3e36f0(0x10c)](_0x694c84);if(_0x335699[_0x3e36f0(0x118)]!==undefined)clearTimeout(_0x335699[_0x3e36f0(0x118)]);await(await _0x335699[_0x3e36f0(0x116)])[_0x3e36f0(0x124)]()[_0x3e36f0(0x109)](()=>undefined);}}export class MarAgentMcpClientPool{#clients=[];#tools=new Map();static async[_0x4bac39(0x112)](_0x792042,_0x36ed44,_0x12c1d4={}){const _0x487781=_0x4bac39,_0xbfc5b3=new MarAgentMcpClientPool();try{for(const _0x346d72 of _0x792042)await _0xbfc5b3.#connect(_0x346d72,_0x36ed44,_0x12c1d4);return _0xbfc5b3;}catch(_0x8775fd){await _0xbfc5b3[_0x487781(0x124)]();throw _0x8775fd;}}[_0x4bac39(0x11a)](){const _0xe2cab7=_0x4bac39;return[...this.#tools][_0xe2cab7(0x149)](([_0x561ea2,_0x42e22d])=>({'name':_0x561ea2,'description':_0x42e22d[_0xe2cab7(0x10a)],'inputSchema':_0x42e22d[_0xe2cab7(0x14c)]}));}async[_0x4bac39(0x121)](_0x2c7031,_0x1c5789){const _0x43e40a=_0x4bac39,_0x190111=this.#tools[_0x43e40a(0x14e)](_0x2c7031);if(!_0x190111)throw new Error(_0x43e40a(0xfd));const _0x46cd0c=await _0x190111[_0x43e40a(0x13d)][_0x43e40a(0x120)]({'name':_0x190111[_0x43e40a(0x101)],'arguments':_0x1c5789!==null&&typeof _0x1c5789===_0x43e40a(0x126)&&!Array[_0x43e40a(0x13b)](_0x1c5789)?_0x1c5789:{}}),_0x3890f6=Array[_0x43e40a(0x13b)](_0x46cd0c[_0x43e40a(0x11e)])?_0x46cd0c[_0x43e40a(0x11e)]:[],_0x29a9fd=_0x3890f6[_0x43e40a(0x149)](_0x5db83c=>{const _0x2b3b10=_0x43e40a;if(_0x5db83c===null||typeof _0x5db83c!==_0x2b3b10(0x126))return _0x2b3b10(0x141);const _0x93470e=_0x5db83c;return _0x93470e[_0x2b3b10(0x144)]===_0x2b3b10(0x100)&&typeof _0x93470e[_0x2b3b10(0x100)]===_0x2b3b10(0x13c)?_0x93470e[_0x2b3b10(0x100)]:'['+String(_0x93470e[_0x2b3b10(0x144)]??_0x2b3b10(0x151))+']';})[_0x43e40a(0x146)]('\x0a');return{'content':_0x29a9fd,'data':_0x46cd0c[_0x43e40a(0x138)]??_0x3890f6};}async[_0x4bac39(0x124)](){const _0x3cecb8=_0x4bac39;await Promise[_0x3cecb8(0x125)](this.#clients[_0x3cecb8(0x149)](_0x328989=>_0x328989[_0x3cecb8(0x124)]()[_0x3cecb8(0x109)](()=>undefined))),this.#clients[_0x3cecb8(0x10e)]=-0x29*-0x16+0x1b79+-0x1eff,this.#tools[_0x3cecb8(0x12d)]();}async #connect(_0x3289e4,_0x1a41a1,_0x588209){const _0x55bcfa=_0x4bac39,_0x55fbba=new Client({'name':_0x55bcfa(0x147),'version':_0x55bcfa(0x131)}),_0x1e8bb6={...getDefaultEnvironment(),..._0x3289e4[_0x55bcfa(0xfb)]??{}},_0x38458c=_0x3289e4[_0x55bcfa(0x12c)]===_0x55bcfa(0x113)?_0x588209[_0x55bcfa(0x105)]===undefined?new StdioClientTransport({'command':_0x3289e4[_0x55bcfa(0x133)],'args':[..._0x3289e4[_0x55bcfa(0x136)]??[]],'env':_0x1e8bb6,'cwd':_0x1a41a1,'stderr':_0x55bcfa(0x13f)}):new ExecutorStdioClientTransport({'processExecutor':_0x588209[_0x55bcfa(0x105)],'command':_0x3289e4[_0x55bcfa(0x133)],'args':[..._0x3289e4[_0x55bcfa(0x136)]??[]],'environment':_0x1e8bb6,'environmentKeys':Object[_0x55bcfa(0x12b)](_0x3289e4[_0x55bcfa(0xfb)]??{}),'cwd':_0x1a41a1,'owner':requireMcpOwner(_0x588209[_0x55bcfa(0x129)])}):new StreamableHTTPClientTransport(new URL(_0x3289e4[_0x55bcfa(0x122)]),{'requestInit':{'headers':{..._0x3289e4[_0x55bcfa(0x106)]??{}}}});await _0x55fbba[_0x55bcfa(0x112)](_0x38458c),this.#clients[_0x55bcfa(0x150)](_0x55fbba);const _0x458aed=await _0x55fbba[_0x55bcfa(0x123)]();for(const _0xe48d31 of _0x458aed[_0x55bcfa(0xfa)]){const _0x53dd5d=_0x55bcfa(0x14d)+safeName(_0x3289e4[_0x55bcfa(0x139)])+'__'+safeName(_0xe48d31[_0x55bcfa(0x139)]);if(this.#tools[_0x55bcfa(0x134)](_0x53dd5d))throw new Error(_0x55bcfa(0x143));this.#tools[_0x55bcfa(0xfc)](_0x53dd5d,{'client':_0x55fbba,'nativeName':_0xe48d31[_0x55bcfa(0x139)],'description':_0xe48d31[_0x55bcfa(0x10a)]??_0x55bcfa(0x145)+_0xe48d31[_0x55bcfa(0x139)]+'.','inputSchema':_0xe48d31[_0x55bcfa(0x14c)]});}}}function singleUseLease(_0x30f375){let _0x11cead=![];return{'pool':_0x30f375,'release':async()=>{const _0x5bc200=_0x2f65;if(_0x11cead)return;_0x11cead=!![],await _0x30f375[_0x5bc200(0x124)]();}};}function mcpConfigurationFingerprint(_0x184ed0,_0xbeb053){const _0x453e05=_0x4bac39;return createHash(_0x453e05(0x14a))[_0x453e05(0x102)](JSON[_0x453e05(0x137)](canonicalValue({'cwd':_0xbeb053,'inheritedEnvironment':getDefaultEnvironment(),'servers':_0x184ed0})))[_0x453e05(0x13a)](_0x453e05(0x12a));}function canonicalValue(_0x2b29df){const _0x24321a=_0x4bac39;if(Array[_0x24321a(0x13b)](_0x2b29df))return _0x2b29df[_0x24321a(0x149)](canonicalValue);if(_0x2b29df===null||typeof _0x2b29df!==_0x24321a(0x126))return _0x2b29df;return Object[_0x24321a(0x12e)](Object[_0x24321a(0x107)](_0x2b29df)[_0x24321a(0x10b)](([_0x46c09c],[_0x170015])=>_0x46c09c[_0x24321a(0x11f)](_0x170015))[_0x24321a(0x149)](([_0x123ddd,_0xcb3748])=>[_0x123ddd,canonicalValue(_0xcb3748)]));}function safeName(_0x7e071b){const _0x23e182=_0x4bac39;return _0x7e071b[_0x23e182(0x12f)](/[^a-zA-Z0-9_-]/gu,'_')[_0x23e182(0x11c)](0x107b+0x11*0x47+-0x1532*0x1,0x27*-0x74+-0x8aa+0x1a96);}function _0x592e(){const _0x5d76e3=['Bg9JywXLq29TCgfYzq','y2fSBfrVB2W','y2fSBa','DxjS','BgLZDfrVB2XZ','y2XVC2u','ywXS','B2jQzwn0','Dw5Yzwy','ndy5rvjUr0rl','B3DUzxi','Agv4','A2v5CW','DhjHBNnWB3j0','y2XLyxi','zNjVBuvUDhjPzxm','CMvWBgfJzq','mtGXmZqZyuLbDMLe','ms4WlJa','Bwf4rw50CMLLCW','y29TBwfUza','AgfZ','tufsx0fhru5ux01duf9tqu5eqK9yx1jfvvnfx0LovKfmsuq','yxjNCW','C3rYAw5NAwz5','C3rYDwn0DxjLzenVBNrLBNq','BMfTzq','zgLNzxn0','AxnbCNjHEq','C3rYAw5N','y2XPzw50','BgfZDfjLBgvHC2vKqxq','CgLWzq','DMfSDwvZ','w3vUA25VD25D','mJC5nZGYmwPfDLHHCa','tufsx0fhru5ux01duf9ut09mx05btuvFq09orKXjq1q','DhLWzq','tunqihrVB2WG','AM9PBG','BwfYywDLBNq','mJuYmdK0ngXvwxrssW','BwfW','C2HHmJu2','CMv1C2fIBgu','Aw5WDxrty2HLBwe','BwnWx18','z2v0','nJbcEwXJwum','ChvZAa','Dw5RBM93BG','CMvMzxjLBMnLCW','Dg9VBhm','zw52AxjVBM1LBNq','C2v0','tufsx0fhru5ux01duf9ut09mx05pvf9gt1vora','ywnXDwLYzq','BM93','Dgv4Da','BMf0AxzLtMfTzq','DxbKyxrL','Bwf4','mta0nZL4tML0sfG','ChjVy2vZC0v4zwn1Dg9Y','AgvHzgvYCW','zw50CMLLCW','zMLSDgvY','y2f0y2G','zgvZy3jPChrPB24','C29YDa','zgvSzxrL','AwrSzvr0Be1Z','BgvUz3rO','DgHLBG','mJC2mJiWDxH2zwD5','tufsx0fhru5ux01duf9tqu5eqK9yx09xtKvsx1jfuvvjuKve','y29UBMvJDa','u1resu8','odiZnKXlEefgAq','mJa0otblD0TcBe0','ChjVBwLZzq','mJjTDKD0yuu','DgLTzxi','mte4BfnLz2nP','zgvMAw5PDgLVBNm','C2L6zq','C2XPy2u','tufsx0fhru5ux01duf9dqunirv9dte9truq','y29UDgvUDa'];_0x592e=function(){return _0x5d76e3;};return _0x592e();}function requireMcpOwner(_0x83ad33){const _0x368d4d=_0x4bac39;if(_0x83ad33===undefined)throw new Error(_0x368d4d(0x111));return _0x83ad33;}
1
+ import { createHash } from 'node:crypto';
2
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
3
+ import { getDefaultEnvironment, StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
4
+ import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
5
+ import { ExecutorStdioClientTransport } from './executor-stdio-client-transport.js';
6
+ export class MarAgentMcpClientCache {
7
+ #entries = new Map();
8
+ #idleTtlMs;
9
+ #maxEntries;
10
+ #closed = false;
11
+ constructor(options = {}) {
12
+ this.#idleTtlMs = options.idleTtlMs ?? 5 * 60_000;
13
+ this.#maxEntries = options.maxEntries ?? 16;
14
+ }
15
+ async acquire(servers, cwd, options = {}) {
16
+ if (this.#closed)
17
+ throw new Error('MAR_AGENT_MCP_CACHE_CLOSED');
18
+ if (options.processExecutor !== undefined && options.reusable !== false)
19
+ throw new Error('MAR_AGENT_MCP_SANDBOX_REUSE_INVALID');
20
+ if (options.reusable === false) {
21
+ const pool = await MarAgentMcpClientPool.connect(servers, cwd, options);
22
+ return singleUseLease(pool);
23
+ }
24
+ const key = mcpConfigurationFingerprint(servers, cwd);
25
+ let entry = this.#entries.get(key);
26
+ if (entry === undefined) {
27
+ await this.#evictIdleEntry();
28
+ if (this.#entries.size >= this.#maxEntries) {
29
+ const pool = await MarAgentMcpClientPool.connect(servers, cwd);
30
+ return singleUseLease(pool);
31
+ }
32
+ entry = {
33
+ promise: MarAgentMcpClientPool.connect(servers, cwd),
34
+ references: 0,
35
+ lastReleasedAt: 0
36
+ };
37
+ this.#entries.set(key, entry);
38
+ entry.promise.catch(() => {
39
+ if (this.#entries.get(key) === entry)
40
+ this.#entries.delete(key);
41
+ });
42
+ }
43
+ if (entry.timer !== undefined) {
44
+ clearTimeout(entry.timer);
45
+ delete entry.timer;
46
+ }
47
+ entry.references += 1;
48
+ let pool;
49
+ try {
50
+ pool = await entry.promise;
51
+ }
52
+ catch (error) {
53
+ entry.references -= 1;
54
+ throw error;
55
+ }
56
+ let released = false;
57
+ return {
58
+ pool,
59
+ release: async () => {
60
+ if (released)
61
+ return;
62
+ released = true;
63
+ await this.#release(key, entry);
64
+ }
65
+ };
66
+ }
67
+ async close() {
68
+ if (this.#closed)
69
+ return;
70
+ this.#closed = true;
71
+ const entries = [...this.#entries.values()];
72
+ this.#entries.clear();
73
+ for (const entry of entries)
74
+ if (entry.timer !== undefined)
75
+ clearTimeout(entry.timer);
76
+ await Promise.all(entries.map((entry) => entry.promise.then((pool) => pool.close()).catch(() => undefined)));
77
+ }
78
+ async #release(key, entry) {
79
+ entry.references = Math.max(0, entry.references - 1);
80
+ if (entry.references > 0 || this.#entries.get(key) !== entry)
81
+ return;
82
+ entry.lastReleasedAt = Date.now();
83
+ entry.timer = setTimeout(() => {
84
+ if (entry.references > 0 || this.#entries.get(key) !== entry)
85
+ return;
86
+ this.#entries.delete(key);
87
+ void entry.promise.then((pool) => pool.close()).catch(() => undefined);
88
+ }, this.#idleTtlMs);
89
+ entry.timer.unref();
90
+ }
91
+ async #evictIdleEntry() {
92
+ if (this.#entries.size < this.#maxEntries)
93
+ return;
94
+ const candidate = [...this.#entries.entries()]
95
+ .filter(([, entry]) => entry.references === 0)
96
+ .sort((left, right) => left[1].lastReleasedAt - right[1].lastReleasedAt)[0];
97
+ if (candidate === undefined)
98
+ return;
99
+ const [key, entry] = candidate;
100
+ this.#entries.delete(key);
101
+ if (entry.timer !== undefined)
102
+ clearTimeout(entry.timer);
103
+ await (await entry.promise).close().catch(() => undefined);
104
+ }
105
+ }
106
+ export class MarAgentMcpClientPool {
107
+ #clients = [];
108
+ #tools = new Map();
109
+ static async connect(servers, cwd, options = {}) {
110
+ const pool = new MarAgentMcpClientPool();
111
+ try {
112
+ for (const server of servers)
113
+ await pool.#connect(server, cwd, options);
114
+ return pool;
115
+ }
116
+ catch (error) {
117
+ await pool.close();
118
+ throw error;
119
+ }
120
+ }
121
+ definitions() {
122
+ return [...this.#tools].map(([name, binding]) => ({
123
+ name,
124
+ description: binding.description,
125
+ inputSchema: binding.inputSchema
126
+ }));
127
+ }
128
+ async call(name, arguments_) {
129
+ const binding = this.#tools.get(name);
130
+ if (!binding)
131
+ throw new Error('MAR_AGENT_MCP_TOOL_NOT_FOUND');
132
+ const result = await binding.client.callTool({
133
+ name: binding.nativeName,
134
+ arguments: arguments_ !== null && typeof arguments_ === 'object' && !Array.isArray(arguments_)
135
+ ? arguments_
136
+ : {}
137
+ });
138
+ const items = Array.isArray(result.content) ? result.content : [];
139
+ const content = items
140
+ .map((item) => {
141
+ if (item === null || typeof item !== 'object')
142
+ return '[unknown]';
143
+ const value = item;
144
+ return value.type === 'text' && typeof value.text === 'string'
145
+ ? value.text
146
+ : `[${String(value.type ?? 'unknown')}]`;
147
+ })
148
+ .join('\n');
149
+ return { content, data: result.structuredContent ?? items };
150
+ }
151
+ async close() {
152
+ await Promise.all(this.#clients.map((client) => client.close().catch(() => undefined)));
153
+ this.#clients.length = 0;
154
+ this.#tools.clear();
155
+ }
156
+ async #connect(server, cwd, options) {
157
+ const client = new Client({ name: 'maragent', version: '1.0.0' });
158
+ const environment = { ...getDefaultEnvironment(), ...(server.environment ?? {}) };
159
+ const transport = server.transport === 'STDIO'
160
+ ? options.processExecutor === undefined
161
+ ? new StdioClientTransport({
162
+ command: server.command,
163
+ args: [...(server.args ?? [])],
164
+ env: environment,
165
+ cwd,
166
+ stderr: 'pipe'
167
+ })
168
+ : new ExecutorStdioClientTransport({
169
+ processExecutor: options.processExecutor,
170
+ command: server.command,
171
+ args: [...(server.args ?? [])],
172
+ environment,
173
+ environmentKeys: Object.keys(server.environment ?? {}),
174
+ cwd,
175
+ owner: requireMcpOwner(options.owner)
176
+ })
177
+ : new StreamableHTTPClientTransport(new URL(server.url), {
178
+ requestInit: { headers: { ...(server.headers ?? {}) } }
179
+ });
180
+ await client.connect(transport);
181
+ this.#clients.push(client);
182
+ const listed = await client.listTools();
183
+ for (const tool of listed.tools) {
184
+ const name = `mcp__${safeName(server.name)}__${safeName(tool.name)}`;
185
+ if (this.#tools.has(name))
186
+ throw new Error('MAR_AGENT_MCP_TOOL_NAME_CONFLICT');
187
+ this.#tools.set(name, {
188
+ client,
189
+ nativeName: tool.name,
190
+ description: tool.description ?? `MCP tool ${tool.name}.`,
191
+ inputSchema: tool.inputSchema
192
+ });
193
+ }
194
+ }
195
+ }
196
+ function singleUseLease(pool) {
197
+ let released = false;
198
+ return {
199
+ pool,
200
+ release: async () => {
201
+ if (released)
202
+ return;
203
+ released = true;
204
+ await pool.close();
205
+ }
206
+ };
207
+ }
208
+ function mcpConfigurationFingerprint(servers, cwd) {
209
+ return createHash('sha256')
210
+ .update(JSON.stringify(canonicalValue({
211
+ cwd,
212
+ inheritedEnvironment: getDefaultEnvironment(),
213
+ servers
214
+ })))
215
+ .digest('hex');
216
+ }
217
+ function canonicalValue(value) {
218
+ if (Array.isArray(value))
219
+ return value.map(canonicalValue);
220
+ if (value === null || typeof value !== 'object')
221
+ return value;
222
+ return Object.fromEntries(Object.entries(value)
223
+ .sort(([left], [right]) => left.localeCompare(right))
224
+ .map(([key, entry]) => [key, canonicalValue(entry)]));
225
+ }
226
+ function safeName(value) {
227
+ return value.replace(/[^a-zA-Z0-9_-]/gu, '_').slice(0, 64);
228
+ }
229
+ function requireMcpOwner(owner) {
230
+ if (owner === undefined)
231
+ throw new Error('MAR_AGENT_MCP_SANDBOX_OWNER_REQUIRED');
232
+ return owner;
233
+ }
@@ -1,2 +1,326 @@
1
- /* mar-release-protected */
2
- const _0x28bd96=_0x220c;(function(_0x3103d1,_0x5e9e8f){const _0x2e0af2=_0x220c,_0x1bebbf=_0x3103d1();while(!![]){try{const _0x888375=parseInt(_0x2e0af2(0xe6))/(0x22*0xc4+0x26f8+-0x40ff)*(-parseInt(_0x2e0af2(0xf4))/(-0xb61+-0x15e5+0x2148))+-parseInt(_0x2e0af2(0x108))/(-0xe5f+0x38f*0x1+0xad3)*(-parseInt(_0x2e0af2(0xf1))/(0x1d2a+0x348+-0x206e))+parseInt(_0x2e0af2(0xba))/(0x8a6+0x1cb7+-0x2558)*(parseInt(_0x2e0af2(0x103))/(0x8b*0x19+-0x2*-0x1223+-0x31d3))+parseInt(_0x2e0af2(0x96))/(-0x17+-0x607*0x1+0xd*0x79)*(-parseInt(_0x2e0af2(0xfd))/(0xb9+-0x1*0x80f+0x1*0x75e))+parseInt(_0x2e0af2(0xbd))/(-0xb07*0x2+0x1*-0x16c9+0x2ce0)+-parseInt(_0x2e0af2(0xec))/(0x4ed*-0x1+0x97*-0x32+-0x2275*-0x1)*(parseInt(_0x2e0af2(0xa5))/(-0x2*0x12bb+0x14*-0xd+0x2685))+parseInt(_0x2e0af2(0xca))/(-0x19a3*0x1+0x23c0*-0x1+-0x3d6f*-0x1)*(parseInt(_0x2e0af2(0xc0))/(0x180*-0x18+0xb9d+0x1870));if(_0x888375===_0x5e9e8f)break;else _0x1bebbf['push'](_0x1bebbf['shift']());}catch(_0x2da216){_0x1bebbf['push'](_0x1bebbf['shift']());}}}(_0x391b,0x1*0x16b7a1+0x4*0x426d9+0xb*-0x2801b));import{SecretValue}from'@myagentroam/agent';import{marAgentRuntimeModelConfigurationSchema,resolveMarAgentDefaultReasoningEffort}from'@myagentroam/protocol';function _0x391b(){const _0x357bfc=['CMvZCg9UC2vZvhjHBNnWB3j0','z2v0','mtztsffLr3m','tufsx0fhru5ux1jvtLrjtuvFq1jfrevoveLbtf9quK9wsurfuL9dte9truq','ChvZAa','y29Kzu1Vzgu','y29Kzq','CMv2AxnPB24','mtKWmMrLrejWta','C2LNBMf0DxjL','Aw52ywXPzgf0zq','BwLU','BMfTzq','m0nJrePirq','C3rHDgu','C2vZC2LVBKLK','CMvTB3zLrxzLBNrmAxn0zw5LCG','DMfSDwvZ','BM9KzuLK','ndK2nZaZmMTXrgTyAa','tufsx0fhru5ux1jvtLrjtuvFtu9eruXFq1jfrevoveLbtf9jtLzbteLe','y2XVC2u','DhLWzq','Aw5JBhvKzxm','tu9eruW','zxzLCNK','B3v0Chv0q2fWywjPBgL0AwvZ','C2L6zq','y29UzMLN','ChjVDMLKzxi','Bwf4','CgvUzgLUzW','Aw1Hz2vhzw5LCMf0Aw9U','CMvMCMvZAef1Dg9TyxrPy2fSBhK','mtfItK15vgq','CMvSzwfZzwq','u1rbtKrbuKq','y29UDgv4DfDPBMrVD1rVA2vUCW','ChjVDMLKzxjZ','q09ervG','BMv4DfrPy2TLDa','C29JA3m1vxjS','zxHWAxjLC0f0','Aw1Hz2vnB2rLBeLK','ywrKrxzLBNrmAxn0zw5LCG','BMv4Da','ywrK','Bw9KzwXjza','CMvZB2X2zq','y3jLzgvUDgLHBa','y2f0y2G','zwrPDevUzhbVAw50','CNvUDgLTzvnJB3bLswq','CgfYC2u','zw50CMLLCW','odKWCeP6zuLQ','ChvYCg9Zzq','DgHLBG','mZuZodm5nvLQsKXnsW','D29YA3nWywnLswq','y3jLzgvUDgLHBeLK','nJvcuLHIzMO','ywnXDwLYzq','AgvHzgvYCW','ywjVCNq','vu5bvvrit1jjwKve','BM9Uy2u','CMvMCMvZAfrPBwvY','CgvUzgLUz1jLC29SDxrPB24','CMvHC29UAw5NrwzMB3j0CW','z2vUzxjHDgvfBMrWB2LUDa','mZyZmZq4mgvMAgTZza','zxHLy3v0Aw9Uswq','DMfSDwu','Bwf4t3v0Chv0vg9Rzw5Z','CMvZCg9UC2vZuhjLDMLVDxnszxnWB25ZzuLK','tufsx0fhru5ux1jvtLrjtuvFq1jfrevoveLbtf9tq09qrv9jtLzbteLe','CMvQzwn0','Aw5WDxrdyxbHyMLSAxrPzxm','y29UDhjVBa','ywjVCNrLza','DxnLCKLK','y2XLyxi','ChjVDg9JB2W','Ag9ZDgvKv2vIu2vHCMnO','Aw1Hz2uTz2vUzxjHDgLVBG','AxnZDwvKqxq','zxjYB3i','CMvZCg9UC2vZrw5JB2rPBMC','ue9tsvrjvKvFsu5gsu5jvfK','y3jLyxrL','CNvUuMvZB2X1DgLVBG','zgvSzxrL','CMvZB2X2zuzYB21tzxj2zxi','zM9Yy2vvBMf1DgHVCML6zwq','ywXSB3DLze1VzgvSswrZ','tufyx1nbrKvFsu5uruDfuG','Aw5PDgLHBfjLyxnVBG','Dw5Yzwy','ndqZtfzoBwHK','C2LNBMfS','yMvHCMvY','ChjVBwLZzq','su5msu5fx0fqsv9lrvK','C2v0','mZaZmJe0mhDryw5IBW','Ahr0CfzLCNnPB24','zw5HyMXLza','BgvUz3rO','uKvrvuvtva','ndeZndqWoenHuhnera','zNjVBuvUDhjPzxm','zgvMyxvSDfjLyxnVBMLUz0vMzM9YDa','mJi1og5lBLjnuG','uLvoveLnrv9usunlrvq','BM93','DgL0Bgvhzw5LCMf0Aw9U','yMfZzvvYBa','DgLJA2v0','BwfW'];_0x391b=function(){return _0x357bfc;};return _0x391b();}class PendingCredentialResolution{[_0x28bd96(0xc3)];[_0x28bd96(0xe4)];[_0x28bd96(0xe1)]=![];[_0x28bd96(0xe9)];constructor(_0x2febb8,_0x30c9c8){const _0x352441=_0x28bd96;this[_0x352441(0xc3)]=_0x2febb8,this[_0x352441(0xe4)]=_0x30c9c8;}}const CREDENTIAL_REFRESH_WINDOW_MS=-0x2*0x95d+0x1*-0x3a27+0x13741;export class MarAgentRuntimeModelFactory{[_0x28bd96(0xd2)];[_0x28bd96(0xf6)];constructor(_0xf67445,_0x37579d=Date[_0x28bd96(0xf6)]){const _0x49c6b8=_0x28bd96;this[_0x49c6b8(0xd2)]=_0xf67445,this[_0x49c6b8(0xf6)]=_0x37579d;}[_0x28bd96(0xdd)](_0x59a4f0,_0x4b6153){const _0x4c7a64=_0x28bd96,_0x403b1e=new Map(),_0x32fb5c=[];try{return _0x59a4f0[_0x4c7a64(0xfa)](_0x22f23f=>{const _0x2cec1d=_0x4c7a64,_0x5acbc0=marAgentRuntimeModelConfigurationSchema[_0x2cec1d(0xb8)](_0x22f23f),_0x27c752=_0x5acbc0[_0x2cec1d(0xa3)]===undefined||_0x5acbc0[_0x2cec1d(0xa3)][_0x2cec1d(0xb4)]===undefined?undefined:{'provider':_0x5acbc0[_0x2cec1d(0xa3)][_0x2cec1d(0xa0)],'config':_0x5acbc0[_0x2cec1d(0xa3)][_0x2cec1d(0x9f)],'generateEndpoint':_0x5acbc0[_0x2cec1d(0xa3)][_0x2cec1d(0xc9)],'editEndpoint':_0x5acbc0[_0x2cec1d(0xa3)][_0x2cec1d(0xb6)],'imageModelId':_0x5acbc0[_0x2cec1d(0xa3)][_0x2cec1d(0xae)],'httpVersion':_0x5acbc0[_0x2cec1d(0xa3)][_0x2cec1d(0xed)],'credentialProvider':_0x5acbc0[_0x2cec1d(0xa3)][_0x2cec1d(0xb4)][_0x2cec1d(0x99)]===_0x2cec1d(0xea)?staticImageProvider(_0x5acbc0[_0x2cec1d(0xa3)][_0x2cec1d(0xb4)][_0x2cec1d(0xcc)]):runtimeProvider(_0x5acbc0[_0x2cec1d(0xa3)][_0x2cec1d(0xb4)],_0x2cec1d(0xd8),_0x4b6153,_0x403b1e,_0x32fb5c,this[_0x2cec1d(0xd2)],this[_0x2cec1d(0xf6)])},_0x4288e4={'id':_0x5acbc0['id'],'name':_0x5acbc0[_0x2cec1d(0x107)],'protocol':_0x5acbc0[_0x2cec1d(0xd6)],'baseUrl':_0x5acbc0[_0x2cec1d(0xf8)],'modelId':_0x5acbc0[_0x2cec1d(0xb2)],'contextWindowTokens':_0x5acbc0[_0x2cec1d(0xa8)],'maxOutputTokens':_0x5acbc0[_0x2cec1d(0xcd)],'inputCapabilities':_0x5acbc0[_0x2cec1d(0xd1)],'outputCapabilities':_0x5acbc0[_0x2cec1d(0x9d)],'reasoningEfforts':_0x5acbc0[_0x2cec1d(0xc8)],'defaultReasoningEffort':resolveMarAgentDefaultReasoningEffort(_0x5acbc0[_0x2cec1d(0xf3)],_0x5acbc0[_0x2cec1d(0xc8)]),'titleGeneration':_0x5acbc0[_0x2cec1d(0xf7)],'codeMode':_0x5acbc0[_0x2cec1d(0x100)],'hostedWebSearch':_0x5acbc0[_0x2cec1d(0xd7)],..._0x27c752===undefined?{}:{'imageGeneration':_0x27c752},..._0x5acbc0[_0x2cec1d(0xfb)]===undefined?{}:{'responsesTransport':_0x5acbc0[_0x2cec1d(0xfb)]},..._0x5acbc0[_0x2cec1d(0xdb)]===undefined?{}:{'responsesEncoding':_0x5acbc0[_0x2cec1d(0xdb)]},'responsesPreviousResponseId':_0x5acbc0[_0x2cec1d(0xce)],'enabled':_0x5acbc0[_0x2cec1d(0xee)]},{apiKey:_0x16d9ce,credential:_0x1b9f19}=_0x5acbc0;if(_0x16d9ce!==undefined)return{..._0x4288e4,'apiKey':new SecretValue(_0x16d9ce)};if(_0x1b9f19?.[_0x2cec1d(0x99)]===_0x2cec1d(0xea))return{..._0x4288e4,'apiKey':new SecretValue(_0x1b9f19[_0x2cec1d(0xcc)])};if(_0x1b9f19?.[_0x2cec1d(0x99)]!==_0x2cec1d(0xf5))throw new Error(_0x2cec1d(0x97));if(_0x4b6153[_0x2cec1d(0xb7)]===undefined||_0x4b6153[_0x2cec1d(0xb7)]!==_0x1b9f19[_0x2cec1d(0xf9)][_0x2cec1d(0xb7)]||!_0x1b9f19[_0x2cec1d(0xf9)][_0x2cec1d(0xe2)][_0x2cec1d(0x9a)](_0x5acbc0['id']))throw new Error(_0x2cec1d(0xcf));const _0x6077db=runtimeProvider(_0x1b9f19,_0x5acbc0['id'],_0x4b6153,_0x403b1e,_0x32fb5c,this[_0x2cec1d(0xd2)],this[_0x2cec1d(0xf6)]);return{..._0x4288e4,..._0x5acbc0[_0x2cec1d(0xa3)]!==undefined&&_0x5acbc0[_0x2cec1d(0xa3)][_0x2cec1d(0xb4)]===undefined?{'imageGeneration':{'provider':_0x5acbc0[_0x2cec1d(0xa3)][_0x2cec1d(0xa0)]??_0x2cec1d(0xaa),'config':_0x5acbc0[_0x2cec1d(0xa3)][_0x2cec1d(0x9f)]??{},'generateEndpoint':_0x5acbc0[_0x2cec1d(0xa3)][_0x2cec1d(0xc9)],'editEndpoint':_0x5acbc0[_0x2cec1d(0xa3)][_0x2cec1d(0xb6)],'imageModelId':_0x5acbc0[_0x2cec1d(0xa3)][_0x2cec1d(0xae)],'httpVersion':_0x5acbc0[_0x2cec1d(0xa3)][_0x2cec1d(0xed)],'credentialProvider':_0x6077db}}:{},'responsesEncoding':_0x5acbc0[_0x2cec1d(0xdb)]??_0x2cec1d(0xa7),'credentialProvider':_0x6077db};});}catch(_0xebf241){for(const _0x591182 of _0x32fb5c)void _0x591182[_0x4c7a64(0x98)]();throw _0xebf241;}}}function staticImageProvider(_0x96f431){const _0x16ad52=_0x28bd96,_0x506a13=new SecretValue(_0x96f431);return{'acquire':async()=>({'revision':0x0,'expiresAt':Number[_0x16ad52(0xe3)],'bearer':_0x506a13,'headers':{}}),'invalidate':()=>undefined,'close':async()=>undefined};}function runtimeProvider(_0x463894,_0x2059a0,_0x133e39,_0x50c028,_0xbafd9d,_0xcd3c55,_0x3c8deb){const _0x326f55=_0x28bd96;if(_0x133e39[_0x326f55(0xb7)]===undefined||_0x133e39[_0x326f55(0xb7)]!==_0x463894[_0x326f55(0xf9)][_0x326f55(0xb7)]||!_0x463894[_0x326f55(0xf9)][_0x326f55(0xe2)][_0x326f55(0x9a)](_0x2059a0))throw new Error(_0x326f55(0xcf));const _0x283253=_0x463894[_0x326f55(0xbf)]+'\x00'+_0x463894[_0x326f55(0xf9)][_0x326f55(0xb7)]+'\x00'+(_0x463894[_0x326f55(0xf9)][_0x326f55(0xbb)]??_0x326f55(0x9b));let _0x3b73e2=_0x50c028[_0x326f55(0xfc)](_0x283253);if(_0x3b73e2===undefined)_0x3b73e2={'ticket':_0x463894[_0x326f55(0xf9)],'providers':new Set(),'released':![]},_0x50c028[_0x326f55(0xeb)](_0x283253,_0x3b73e2);else{if(!sameRuntimeCredentialTicket(_0x3b73e2[_0x326f55(0xf9)],_0x463894[_0x326f55(0xf9)]))throw new Error(_0x326f55(0xcf));}const _0x2b949c=new ServerRuntimeCredentialProvider(_0xcd3c55,_0x3b73e2,_0x2059a0,_0x133e39[_0x326f55(0xb7)],_0x133e39[_0x326f55(0xcb)],_0x3c8deb);return _0xbafd9d[_0x326f55(0xff)](_0x2b949c),_0x2b949c;}class ServerRuntimeCredentialProvider{[_0x28bd96(0xd2)];[_0x28bd96(0x109)];[_0x28bd96(0xb2)];[_0x28bd96(0xb7)];[_0x28bd96(0xcb)];[_0x28bd96(0xf6)];#pending=new Set();#closed=![];constructor(_0x4f847c,_0x19ed95,_0x4600e1,_0x1d4c88,_0x36aaba,_0x361da2){const _0x15ca15=_0x28bd96;this[_0x15ca15(0xd2)]=_0x4f847c,this[_0x15ca15(0x109)]=_0x19ed95,this[_0x15ca15(0xb2)]=_0x4600e1,this[_0x15ca15(0xb7)]=_0x1d4c88,this[_0x15ca15(0xcb)]=_0x36aaba,this[_0x15ca15(0xf6)]=_0x361da2,this[_0x15ca15(0x109)][_0x15ca15(0xa9)][_0x15ca15(0xb1)](this),scheduleRefresh(this[_0x15ca15(0x109)],this[_0x15ca15(0xf6)]);}async[_0x28bd96(0xc1)](_0x3e26c9){const _0x115ab7=_0x28bd96;if(this.#closed||this[_0x115ab7(0x109)][_0x115ab7(0xa6)])throw new Error(_0x115ab7(0xfe));if(isReusableCredential(this[_0x115ab7(0x109)][_0x115ab7(0xb4)],this[_0x115ab7(0xf6)]())){if(isWithinRefreshWindow(this[_0x115ab7(0x109)][_0x115ab7(0xf9)][_0x115ab7(0xad)],this[_0x115ab7(0xf6)]()))this[_0x115ab7(0xa4)]();return this[_0x115ab7(0x109)][_0x115ab7(0xb4)];}const _0x52d038=new AbortController();this.#pending[_0x115ab7(0xb1)](_0x52d038);try{const _0xfcaca7=this[_0x115ab7(0xc7)](_0x3e26c9);return await waitForCredential(_0xfcaca7[_0x115ab7(0xe9)],_0x52d038[_0x115ab7(0xe7)]);}finally{this.#pending[_0x115ab7(0xdf)](_0x52d038);}}[_0x28bd96(0x105)](_0x57f091){const _0xa3c8a1=_0x28bd96;if(this[_0xa3c8a1(0x109)][_0xa3c8a1(0xb4)]?.[_0xa3c8a1(0x102)]===_0x57f091)delete this[_0xa3c8a1(0x109)][_0xa3c8a1(0xb4)];}async[_0x28bd96(0x98)](){const _0x13faff=_0x28bd96;if(this.#closed)return;this.#closed=!![];for(const _0x3756dd of this.#pending)_0x3756dd[_0x13faff(0xc3)]();this.#pending[_0x13faff(0xd5)](),this[_0x13faff(0x109)][_0x13faff(0xa9)][_0x13faff(0xdf)](this);if(this[_0x13faff(0x109)][_0x13faff(0xa9)][_0x13faff(0x9e)]===-0x1*0xa+0x11f4+-0x11ea)this[_0x13faff(0x109)][_0x13faff(0xa6)]=!![],delete this[_0x13faff(0x109)][_0x13faff(0xb4)],clearRefreshTimer(this[_0x13faff(0x109)]),this[_0x13faff(0x109)][_0x13faff(0xa2)]?.[_0x13faff(0xc3)][_0x13faff(0xc3)]();else scheduleRefresh(this[_0x13faff(0x109)],this[_0x13faff(0xf6)]);}[_0x28bd96(0xa4)](){const _0x49ba31=_0x28bd96;if(this.#closed||this[_0x49ba31(0x109)][_0x49ba31(0xa6)])return;const _0x232376=this[_0x49ba31(0xc7)](_0x49ba31(0xf0));void _0x232376[_0x49ba31(0xe9)][_0x49ba31(0xb5)](()=>undefined);}[_0x28bd96(0xc7)](_0x2bb74c){const _0x8e21ce=_0x28bd96,_0x3fef2f=this[_0x8e21ce(0x109)][_0x8e21ce(0xa2)];if(_0x3fef2f!==undefined){if(_0x2bb74c===_0x8e21ce(0xc4)&&_0x3fef2f[_0x8e21ce(0xe4)]!==_0x8e21ce(0xc4))_0x3fef2f[_0x8e21ce(0xe1)]=!![];return _0x3fef2f;}clearRefreshTimer(this[_0x8e21ce(0x109)]);const _0x41399d=new AbortController(),_0x54f820=new PendingCredentialResolution(_0x41399d,_0x2bb74c);return _0x54f820[_0x8e21ce(0xe9)]=this[_0x8e21ce(0xde)](_0x54f820,_0x41399d[_0x8e21ce(0xe7)]),this[_0x8e21ce(0x109)][_0x8e21ce(0xa2)]=_0x54f820,_0x54f820[_0x8e21ce(0xe9)][_0x8e21ce(0xbc)](()=>{const _0x144f47=_0x8e21ce;if(this[_0x144f47(0x109)][_0x144f47(0xa2)]!==_0x54f820)return;delete this[_0x144f47(0x109)][_0x144f47(0xa2)],scheduleRefresh(this[_0x144f47(0x109)],this[_0x144f47(0xf6)]);},()=>{const _0x425eed=_0x8e21ce;if(this[_0x425eed(0x109)][_0x425eed(0xa2)]!==_0x54f820)return;delete this[_0x425eed(0x109)][_0x425eed(0xa2)],scheduleRefresh(this[_0x425eed(0x109)],this[_0x425eed(0xf6)],![]);}),_0x54f820;}async[_0x28bd96(0xde)](_0x1d3425,_0x192fc1){const _0x5d91be=_0x28bd96,_0x5e66ce=await this[_0x5d91be(0xe0)](_0x1d3425[_0x5d91be(0xe4)],_0x192fc1);if(_0x1d3425[_0x5d91be(0xe4)]===_0x5d91be(0xc4)||!_0x1d3425[_0x5d91be(0xe1)])return _0x5e66ce;if(this[_0x5d91be(0x109)][_0x5d91be(0xb4)]?.[_0x5d91be(0x102)]===_0x5e66ce[_0x5d91be(0x102)])delete this[_0x5d91be(0x109)][_0x5d91be(0xb4)];return this[_0x5d91be(0xe0)](_0x5d91be(0xc4),_0x192fc1);}async[_0x28bd96(0xe0)](_0x10a1ff,_0x1fb427){const _0x55eb6d=_0x28bd96,_0x12e296=await this[_0x55eb6d(0xd2)][_0x55eb6d(0xb3)]({'ticket':this[_0x55eb6d(0x109)][_0x55eb6d(0xf9)],'modelId':this[_0x55eb6d(0xb2)],'runtimeScopeId':this[_0x55eb6d(0xb7)],'executionId':this[_0x55eb6d(0xcb)],'reason':_0x10a1ff},_0x1fb427);if(this[_0x55eb6d(0x109)][_0x55eb6d(0xa6)])throw new Error(_0x55eb6d(0xfe));if(_0x55eb6d(0xda)in _0x12e296)throw new Error(_0x12e296[_0x55eb6d(0xda)][_0x55eb6d(0x101)]);this[_0x55eb6d(0x109)][_0x55eb6d(0xf9)]=_0x12e296[_0x55eb6d(0xab)];const _0x1a4f2f={'revision':_0x12e296[_0x55eb6d(0xb4)][_0x55eb6d(0x102)],'expiresAt':_0x12e296[_0x55eb6d(0xb4)][_0x55eb6d(0xad)],'bearer':new SecretValue(_0x12e296[_0x55eb6d(0xb4)][_0x55eb6d(0xe8)]),'headers':Object[_0x55eb6d(0xf2)](Object[_0x55eb6d(0xb9)](_0x12e296[_0x55eb6d(0xb4)][_0x55eb6d(0xc2)])[_0x55eb6d(0xfa)](([_0x268baa,_0x3d9988])=>[_0x268baa,new SecretValue(_0x3d9988)])),..._0x12e296[_0x55eb6d(0xb4)][_0x55eb6d(0xac)]===undefined?{}:{'socks5Url':new SecretValue(_0x12e296[_0x55eb6d(0xb4)][_0x55eb6d(0xac)])}};return this[_0x55eb6d(0x109)][_0x55eb6d(0xb4)]=_0x1a4f2f,_0x1a4f2f;}}function isReusableCredential(_0xca11fa,_0x12a925){const _0x383750=_0x28bd96;return _0xca11fa!==undefined&&!isWithinRefreshWindow(_0xca11fa[_0x383750(0xad)],_0x12a925);}function _0x220c(_0x12e296,_0x1a4f2f){_0x12e296=_0x12e296-(-0x1*0xacf+-0x2f*-0x54+-0x409);const _0x268baa=_0x391b();let _0x3d9988=_0x268baa[_0x12e296];if(_0x220c['uwGdde']===undefined){var _0xca11fa=function(_0x1bc561){const _0x83e161='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5c388e='',_0x5b74e9='';for(let _0x5e5daa=-0x1*-0x22f8+0x18ec+-0x1*0x3be4,_0x5d1306,_0x3953f3,_0x1dc158=0x88b+0x5c2+0x7*-0x20b;_0x3953f3=_0x1bc561['charAt'](_0x1dc158++);~_0x3953f3&&(_0x5d1306=_0x5e5daa%(-0x4c0+-0x82d*0x2+-0x9f*-0x22)?_0x5d1306*(0x13*0x149+0x5*0x59+-0x8*0x33d)+_0x3953f3:_0x3953f3,_0x5e5daa++%(0x20ff*0x1+0x1*-0x1529+0x22*-0x59))?_0x5c388e+=String['fromCharCode'](0x1913+0x1*0x1560+-0x2d74&_0x5d1306>>(-(0x5*0x141+-0x16*-0x190+-0x1*0x28a3)*_0x5e5daa&0xf71+-0x145a+0x4ef)):0x21*0x107+-0x1f58+-0x28f){_0x3953f3=_0x83e161['indexOf'](_0x3953f3);}for(let _0xe56c43=0x1b17+-0x1*0x1d7f+-0x2*-0x134,_0x5e68d9=_0x5c388e['length'];_0xe56c43<_0x5e68d9;_0xe56c43++){_0x5b74e9+='%'+('00'+_0x5c388e['charCodeAt'](_0xe56c43)['toString'](-0x4*-0x685+0x2*-0x8ea+0x20c*-0x4))['slice'](-(-0x6*0x45b+0x20fb+0x11*-0x67));}return decodeURIComponent(_0x5b74e9);};_0x220c['DlXmHj']=_0xca11fa,_0x220c['gPhuYB']={},_0x220c['uwGdde']=!![];}const _0x12a925=_0x268baa[0x1e8c+-0xf25*0x1+-0xf67];_0x220c['UAstta']!==_0x12a925&&(_0x220c['gPhuYB']={},_0x220c['UAstta']=_0x12a925);const _0x4237f6=_0x220c['gPhuYB'][_0x12e296];return _0x4237f6===undefined?(_0x3d9988=_0x220c['DlXmHj'](_0x3d9988),_0x220c['gPhuYB'][_0x12e296]=_0x3d9988):_0x3d9988=_0x4237f6,_0x3d9988;}function isWithinRefreshWindow(_0x4237f6,_0x1bc561){return _0x4237f6-_0x1bc561<=CREDENTIAL_REFRESH_WINDOW_MS;}function sameRuntimeCredentialTicket(_0x83e161,_0x5c388e){const _0x404f1e=_0x28bd96;return _0x83e161[_0x404f1e(0xd4)]===_0x5c388e[_0x404f1e(0xd4)]&&_0x83e161[_0x404f1e(0xbf)]===_0x5c388e[_0x404f1e(0xbf)]&&_0x83e161[_0x404f1e(0x95)]===_0x5c388e[_0x404f1e(0x95)]&&_0x83e161[_0x404f1e(0xbe)]===_0x5c388e[_0x404f1e(0xbe)]&&_0x83e161[_0x404f1e(0x10a)]===_0x5c388e[_0x404f1e(0x10a)]&&_0x83e161[_0x404f1e(0xb7)]===_0x5c388e[_0x404f1e(0xb7)]&&_0x83e161[_0x404f1e(0xbb)]===_0x5c388e[_0x404f1e(0xbb)]&&_0x83e161[_0x404f1e(0xd9)]===_0x5c388e[_0x404f1e(0xd9)]&&_0x83e161[_0x404f1e(0xad)]===_0x5c388e[_0x404f1e(0xad)]&&_0x83e161[_0x404f1e(0xc5)]===_0x5c388e[_0x404f1e(0xc5)]&&_0x83e161[_0x404f1e(0x104)]===_0x5c388e[_0x404f1e(0x104)]&&_0x83e161[_0x404f1e(0xe2)][_0x404f1e(0xef)]===_0x5c388e[_0x404f1e(0xe2)][_0x404f1e(0xef)]&&_0x83e161[_0x404f1e(0xe2)][_0x404f1e(0x9c)]((_0x5b74e9,_0x5e5daa)=>_0x5b74e9===_0x5c388e[_0x404f1e(0xe2)][_0x5e5daa]);}function scheduleRefresh(_0x5d1306,_0x3953f3,_0x1dc158=!![]){const _0x181a4c=_0x28bd96;clearRefreshTimer(_0x5d1306);if(_0x5d1306[_0x181a4c(0xa6)]||_0x5d1306[_0x181a4c(0xa2)]!==undefined||_0x5d1306[_0x181a4c(0xa9)][_0x181a4c(0x9e)]===-0x789*-0x5+0x1*-0x2321+0x2*-0x146)return;const _0xe56c43=Math[_0x181a4c(0x106)](_0x5d1306[_0x181a4c(0xf9)][_0x181a4c(0xad)],_0x5d1306[_0x181a4c(0xb4)]?.[_0x181a4c(0xad)]??Number[_0x181a4c(0xdc)]),_0x5e68d9=_0xe56c43-_0x3953f3()-CREDENTIAL_REFRESH_WINDOW_MS;if(!_0x1dc158&&_0x5e68d9<=-0xb*-0x133+-0x45*-0x28+0x169*-0x11)return;const _0x4dc263=setTimeout(()=>{const _0x6017f9=_0x181a4c;if(_0x5d1306[_0x6017f9(0xc6)]===_0x4dc263)delete _0x5d1306[_0x6017f9(0xc6)];const _0xdf1875=_0x5d1306[_0x6017f9(0xa9)][_0x6017f9(0x94)]()[_0x6017f9(0xb0)]()[_0x6017f9(0xcc)];_0xdf1875?.[_0x6017f9(0xa4)]();},Math[_0x181a4c(0xa1)](0xb*0x23b+0x62b*0x1+-0x1eb4,_0x5e68d9));_0x4dc263[_0x181a4c(0xe5)](),_0x5d1306[_0x181a4c(0xc6)]=_0x4dc263;}function clearRefreshTimer(_0x1b886c){const _0x249637=_0x28bd96;if(_0x1b886c[_0x249637(0xc6)]===undefined)return;clearTimeout(_0x1b886c[_0x249637(0xc6)]),delete _0x1b886c[_0x249637(0xc6)];}function waitForCredential(_0x2a2110,_0x4a126a){const _0x459dad=_0x28bd96;if(_0x4a126a[_0x459dad(0xd3)])return Promise[_0x459dad(0xd0)](new Error(_0x459dad(0xfe)));return new Promise((_0x45ad60,_0x192337)=>{const _0x420767=_0x459dad,_0x52d29c=()=>{const _0x278c5d=_0x220c;_0x568de9(),_0x192337(new Error(_0x278c5d(0xfe)));},_0x568de9=()=>_0x4a126a[_0x420767(0x10b)](_0x420767(0xc3),_0x52d29c);_0x4a126a[_0x420767(0xaf)](_0x420767(0xc3),_0x52d29c,{'once':!![]}),_0x2a2110[_0x420767(0xbc)](_0x2eaaea=>{_0x568de9(),_0x45ad60(_0x2eaaea);},_0x2c1684=>{_0x568de9(),_0x192337(_0x2c1684);});});}
1
+ import { SecretValue } from '@myagentroam/agent';
2
+ import { marAgentRuntimeModelConfigurationSchema, resolveMarAgentDefaultReasoningEffort } from '@myagentroam/protocol';
3
+ class PendingCredentialResolution {
4
+ abort;
5
+ initialReason;
6
+ forceUnauthorized = false;
7
+ promise;
8
+ constructor(abort, initialReason) {
9
+ this.abort = abort;
10
+ this.initialReason = initialReason;
11
+ }
12
+ }
13
+ const CREDENTIAL_REFRESH_WINDOW_MS = 60_000;
14
+ export class MarAgentRuntimeModelFactory {
15
+ control;
16
+ now;
17
+ constructor(control, now = Date.now) {
18
+ this.control = control;
19
+ this.now = now;
20
+ }
21
+ create(configurations, context) {
22
+ const tickets = new Map();
23
+ const providers = [];
24
+ try {
25
+ return configurations.map((raw) => {
26
+ const configuration = marAgentRuntimeModelConfigurationSchema.parse(raw);
27
+ const imageGeneration = configuration.imageGeneration === undefined ||
28
+ configuration.imageGeneration.credential === undefined
29
+ ? undefined
30
+ : {
31
+ provider: configuration.imageGeneration.provider,
32
+ config: configuration.imageGeneration.config,
33
+ generateEndpoint: configuration.imageGeneration.generateEndpoint,
34
+ editEndpoint: configuration.imageGeneration.editEndpoint,
35
+ imageModelId: configuration.imageGeneration.imageModelId,
36
+ httpVersion: configuration.imageGeneration.httpVersion,
37
+ credentialProvider: configuration.imageGeneration.credential.type === 'INLINE_API_KEY'
38
+ ? staticImageProvider(configuration.imageGeneration.credential.value)
39
+ : runtimeProvider(configuration.imageGeneration.credential, 'image-generation', context, tickets, providers, this.control, this.now)
40
+ };
41
+ const model = {
42
+ id: configuration.id,
43
+ name: configuration.name,
44
+ protocol: configuration.protocol,
45
+ baseUrl: configuration.baseUrl,
46
+ modelId: configuration.modelId,
47
+ contextWindowTokens: configuration.contextWindowTokens,
48
+ maxOutputTokens: configuration.maxOutputTokens,
49
+ inputCapabilities: configuration.inputCapabilities,
50
+ outputCapabilities: configuration.outputCapabilities,
51
+ reasoningEfforts: configuration.reasoningEfforts,
52
+ defaultReasoningEffort: resolveMarAgentDefaultReasoningEffort(configuration.defaultReasoningEffort, configuration.reasoningEfforts),
53
+ titleGeneration: configuration.titleGeneration,
54
+ codeMode: configuration.codeMode,
55
+ hostedWebSearch: configuration.hostedWebSearch,
56
+ ...(imageGeneration === undefined ? {} : { imageGeneration }),
57
+ ...(configuration.responsesTransport === undefined
58
+ ? {}
59
+ : { responsesTransport: configuration.responsesTransport }),
60
+ ...(configuration.responsesEncoding === undefined
61
+ ? {}
62
+ : { responsesEncoding: configuration.responsesEncoding }),
63
+ responsesPreviousResponseId: configuration.responsesPreviousResponseId,
64
+ enabled: configuration.enabled
65
+ };
66
+ const { apiKey, credential } = configuration;
67
+ if (apiKey !== undefined)
68
+ return { ...model, apiKey: new SecretValue(apiKey) };
69
+ if (credential?.type === 'INLINE_API_KEY')
70
+ return {
71
+ ...model,
72
+ apiKey: new SecretValue(credential.value)
73
+ };
74
+ if (credential?.type !== 'RUNTIME_TICKET')
75
+ throw new Error('MAR_AGENT_RUNTIME_MODEL_CREDENTIAL_INVALID');
76
+ if (context.runtimeScopeId === undefined ||
77
+ context.runtimeScopeId !== credential.ticket.runtimeScopeId ||
78
+ !credential.ticket.allowedModelIds.includes(configuration.id))
79
+ throw new Error('MAR_AGENT_RUNTIME_CREDENTIAL_SCOPE_INVALID');
80
+ const provider = runtimeProvider(credential, configuration.id, context, tickets, providers, this.control, this.now);
81
+ return {
82
+ ...model,
83
+ ...(configuration.imageGeneration !== undefined &&
84
+ configuration.imageGeneration.credential === undefined
85
+ ? {
86
+ imageGeneration: {
87
+ provider: configuration.imageGeneration.provider ?? 'CODEX',
88
+ config: configuration.imageGeneration.config ?? {},
89
+ generateEndpoint: configuration.imageGeneration.generateEndpoint,
90
+ editEndpoint: configuration.imageGeneration.editEndpoint,
91
+ imageModelId: configuration.imageGeneration.imageModelId,
92
+ httpVersion: configuration.imageGeneration.httpVersion,
93
+ credentialProvider: provider
94
+ }
95
+ }
96
+ : {}),
97
+ responsesEncoding: configuration.responsesEncoding ?? 'STANDARD',
98
+ credentialProvider: provider
99
+ };
100
+ });
101
+ }
102
+ catch (error) {
103
+ for (const provider of providers)
104
+ void provider.close();
105
+ throw error;
106
+ }
107
+ }
108
+ }
109
+ function staticImageProvider(value) {
110
+ const bearer = new SecretValue(value);
111
+ return {
112
+ acquire: async () => ({ revision: 0, expiresAt: Number.MAX_SAFE_INTEGER, bearer, headers: {} }),
113
+ invalidate: () => undefined,
114
+ close: async () => undefined
115
+ };
116
+ }
117
+ function runtimeProvider(credential, consumerId, context, tickets, providers, control, now) {
118
+ if (context.runtimeScopeId === undefined ||
119
+ context.runtimeScopeId !== credential.ticket.runtimeScopeId ||
120
+ !credential.ticket.allowedModelIds.includes(consumerId))
121
+ throw new Error('MAR_AGENT_RUNTIME_CREDENTIAL_SCOPE_INVALID');
122
+ const key = `${credential.credentialId}\0${credential.ticket.runtimeScopeId}\0${credential.ticket.purpose ?? 'MODEL'}`;
123
+ let state = tickets.get(key);
124
+ if (state === undefined) {
125
+ state = {
126
+ ticket: credential.ticket,
127
+ providers: new Set(),
128
+ released: false
129
+ };
130
+ tickets.set(key, state);
131
+ }
132
+ else if (!sameRuntimeCredentialTicket(state.ticket, credential.ticket))
133
+ throw new Error('MAR_AGENT_RUNTIME_CREDENTIAL_SCOPE_INVALID');
134
+ const provider = new ServerRuntimeCredentialProvider(control, state, consumerId, context.runtimeScopeId, context.executionId, now);
135
+ providers.push(provider);
136
+ return provider;
137
+ }
138
+ class ServerRuntimeCredentialProvider {
139
+ control;
140
+ state;
141
+ modelId;
142
+ runtimeScopeId;
143
+ executionId;
144
+ now;
145
+ #pending = new Set();
146
+ #closed = false;
147
+ constructor(control, state, modelId, runtimeScopeId, executionId, now) {
148
+ this.control = control;
149
+ this.state = state;
150
+ this.modelId = modelId;
151
+ this.runtimeScopeId = runtimeScopeId;
152
+ this.executionId = executionId;
153
+ this.now = now;
154
+ this.state.providers.add(this);
155
+ scheduleRefresh(this.state, this.now);
156
+ }
157
+ async acquire(reason) {
158
+ if (this.#closed || this.state.released)
159
+ throw new Error('MAR_AGENT_RUNTIME_CREDENTIAL_PROVIDER_CLOSED');
160
+ if (isReusableCredential(this.state.credential, this.now())) {
161
+ if (isWithinRefreshWindow(this.state.ticket.expiresAt, this.now()))
162
+ this.refreshAutomatically();
163
+ return this.state.credential;
164
+ }
165
+ const abort = new AbortController();
166
+ this.#pending.add(abort);
167
+ try {
168
+ const pending = this.pendingResolution(reason);
169
+ return await waitForCredential(pending.promise, abort.signal);
170
+ }
171
+ finally {
172
+ this.#pending.delete(abort);
173
+ }
174
+ }
175
+ invalidate(revision) {
176
+ if (this.state.credential?.revision === revision)
177
+ delete this.state.credential;
178
+ }
179
+ async close() {
180
+ if (this.#closed)
181
+ return;
182
+ this.#closed = true;
183
+ for (const pending of this.#pending)
184
+ pending.abort();
185
+ this.#pending.clear();
186
+ this.state.providers.delete(this);
187
+ if (this.state.providers.size === 0) {
188
+ this.state.released = true;
189
+ delete this.state.credential;
190
+ clearRefreshTimer(this.state);
191
+ this.state.pending?.abort.abort();
192
+ }
193
+ else
194
+ scheduleRefresh(this.state, this.now);
195
+ }
196
+ refreshAutomatically() {
197
+ if (this.#closed || this.state.released)
198
+ return;
199
+ const pending = this.pendingResolution('REQUEST');
200
+ void pending.promise.catch(() => undefined);
201
+ }
202
+ pendingResolution(reason) {
203
+ const current = this.state.pending;
204
+ if (current !== undefined) {
205
+ if (reason === 'UNAUTHORIZED' && current.initialReason !== 'UNAUTHORIZED')
206
+ current.forceUnauthorized = true;
207
+ return current;
208
+ }
209
+ clearRefreshTimer(this.state);
210
+ const abort = new AbortController();
211
+ const pending = new PendingCredentialResolution(abort, reason);
212
+ pending.promise = this.runResolution(pending, abort.signal);
213
+ this.state.pending = pending;
214
+ pending.promise.then(() => {
215
+ if (this.state.pending !== pending)
216
+ return;
217
+ delete this.state.pending;
218
+ scheduleRefresh(this.state, this.now);
219
+ }, () => {
220
+ if (this.state.pending !== pending)
221
+ return;
222
+ delete this.state.pending;
223
+ scheduleRefresh(this.state, this.now, false);
224
+ });
225
+ return pending;
226
+ }
227
+ async runResolution(pending, signal) {
228
+ const credential = await this.resolveFromServer(pending.initialReason, signal);
229
+ if (pending.initialReason === 'UNAUTHORIZED' || !pending.forceUnauthorized)
230
+ return credential;
231
+ if (this.state.credential?.revision === credential.revision)
232
+ delete this.state.credential;
233
+ return this.resolveFromServer('UNAUTHORIZED', signal);
234
+ }
235
+ async resolveFromServer(reason, signal) {
236
+ const response = await this.control.resolve({
237
+ ticket: this.state.ticket,
238
+ modelId: this.modelId,
239
+ runtimeScopeId: this.runtimeScopeId,
240
+ executionId: this.executionId,
241
+ reason
242
+ }, signal);
243
+ if (this.state.released)
244
+ throw new Error('MAR_AGENT_RUNTIME_CREDENTIAL_PROVIDER_CLOSED');
245
+ if ('error' in response)
246
+ throw new Error(response.error.code);
247
+ this.state.ticket = response.nextTicket;
248
+ const credential = {
249
+ revision: response.credential.revision,
250
+ expiresAt: response.credential.expiresAt,
251
+ bearer: new SecretValue(response.credential.bearer),
252
+ headers: Object.fromEntries(Object.entries(response.credential.headers).map(([name, value]) => [
253
+ name,
254
+ new SecretValue(value)
255
+ ])),
256
+ ...(response.credential.socks5Url === undefined
257
+ ? {}
258
+ : { socks5Url: new SecretValue(response.credential.socks5Url) })
259
+ };
260
+ this.state.credential = credential;
261
+ return credential;
262
+ }
263
+ }
264
+ function isReusableCredential(credential, now) {
265
+ return credential !== undefined && !isWithinRefreshWindow(credential.expiresAt, now);
266
+ }
267
+ function isWithinRefreshWindow(expiresAt, now) {
268
+ return expiresAt - now <= CREDENTIAL_REFRESH_WINDOW_MS;
269
+ }
270
+ function sameRuntimeCredentialTicket(first, second) {
271
+ return (first.userId === second.userId &&
272
+ first.credentialId === second.credentialId &&
273
+ first.nodeId === second.nodeId &&
274
+ first.workspaceId === second.workspaceId &&
275
+ first.sessionId === second.sessionId &&
276
+ first.runtimeScopeId === second.runtimeScopeId &&
277
+ first.purpose === second.purpose &&
278
+ first.issuedAt === second.issuedAt &&
279
+ first.expiresAt === second.expiresAt &&
280
+ first.nonce === second.nonce &&
281
+ first.signature === second.signature &&
282
+ first.allowedModelIds.length === second.allowedModelIds.length &&
283
+ first.allowedModelIds.every((modelId, index) => modelId === second.allowedModelIds[index]));
284
+ }
285
+ function scheduleRefresh(state, now, includeDue = true) {
286
+ clearRefreshTimer(state);
287
+ if (state.released || state.pending !== undefined || state.providers.size === 0)
288
+ return;
289
+ const expiresAt = Math.min(state.ticket.expiresAt, state.credential?.expiresAt ?? Number.POSITIVE_INFINITY);
290
+ const delay = expiresAt - now() - CREDENTIAL_REFRESH_WINDOW_MS;
291
+ if (!includeDue && delay <= 0)
292
+ return;
293
+ const timer = setTimeout(() => {
294
+ if (state.refreshTimer === timer)
295
+ delete state.refreshTimer;
296
+ const provider = state.providers.values().next().value;
297
+ provider?.refreshAutomatically();
298
+ }, Math.max(0, delay));
299
+ timer.unref();
300
+ state.refreshTimer = timer;
301
+ }
302
+ function clearRefreshTimer(state) {
303
+ if (state.refreshTimer === undefined)
304
+ return;
305
+ clearTimeout(state.refreshTimer);
306
+ delete state.refreshTimer;
307
+ }
308
+ function waitForCredential(pending, signal) {
309
+ if (signal.aborted)
310
+ return Promise.reject(new Error('MAR_AGENT_RUNTIME_CREDENTIAL_PROVIDER_CLOSED'));
311
+ return new Promise((resolve, reject) => {
312
+ const abort = () => {
313
+ cleanup();
314
+ reject(new Error('MAR_AGENT_RUNTIME_CREDENTIAL_PROVIDER_CLOSED'));
315
+ };
316
+ const cleanup = () => signal.removeEventListener('abort', abort);
317
+ signal.addEventListener('abort', abort, { once: true });
318
+ pending.then((credential) => {
319
+ cleanup();
320
+ resolve(credential);
321
+ }, (error) => {
322
+ cleanup();
323
+ reject(error);
324
+ });
325
+ });
326
+ }