@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
package/dist/sdk/agent.js CHANGED
@@ -1,2 +1,1804 @@
1
- /* mar-release-protected */
2
- const _0x2f8e68=_0x1108;(function(_0x176d06,_0x3e5b5a){const _0xb1bea6=_0x1108,_0x484600=_0x176d06();while(!![]){try{const _0xfed1da=-parseInt(_0xb1bea6(0x225))/(0x81e*-0x2+-0x1715+0x1*0x2752)+parseInt(_0xb1bea6(0xc6))/(-0x1a45+0x2*0xacb+-0x4b1*-0x1)+-parseInt(_0xb1bea6(0x21a))/(-0x1*0x1+-0x92e+0x932)*(parseInt(_0xb1bea6(0xb7))/(-0x1895+-0x4d9*-0x4+0x535*0x1))+parseInt(_0xb1bea6(0x1f7))/(0x1209+-0x2665+0x1461)+-parseInt(_0xb1bea6(0xf7))/(0x1a29+-0x398*-0x8+-0x36e3)+parseInt(_0xb1bea6(0x175))/(0x277*0x6+0x26a4+0x3*-0x11cd)+parseInt(_0xb1bea6(0x14b))/(0x2207+-0x14e*0x1+0x20b1*-0x1);if(_0xfed1da===_0x3e5b5a)break;else _0x484600['push'](_0x484600['shift']());}catch(_0x54fe40){_0x484600['push'](_0x484600['shift']());}}}(_0x4383,0xa308c+-0xe*0x13b2f+0xfc423));function _0x4383(){const _0x337c83=['ywrKzwq','u3vIywDLBNqGDg9VBcbLEgvJDxrPB24GAxmGDw5HDMfPBgfIBguU','zNjLzwzVCM0','Bw9Kzq','mZaWne5KAwDyzG','C3rKzxjYqNL0zxm','Dg9VBe5HBwu','BgLZDe1JCfrVB2XZ','zMLSDgvY','zxHLy3v0Aw9UlMnVBxbSzxrLza','C3vIywDLBNrfDMLKzw5Jzu1HEeL0zw1Z','veLuteu','y29UDgv4Dc53yxjUAw5N','CMvHC29UAw5NlNn1Bw1HCNK','Ahr0CdO','tw9KzwWGzgLKig5VDcbJB21WBgv0zsbVCIbYzxf1zxn0igeGDg9VBc4','CMv0CNLbzNrLCG','zgvZy3jPyMu','t25Lig9Yig1VCMuGy29YCNvWDcbOAxn0B3jPy2fSigLUChv0igLTywDLCYb3zxjLigLNBM9YzwqU','oti2mJrLEuTqzLi','y29UDgv4Df9VDMvYzMXVDW','zgvMyxvSDfjLyxnVBMLUz0vMzM9YDa','C2TPBgXZ','yxbWBhLFCgf0y2G','u2vZC2LVBIbHBhjLywr5igHHCYbHBIbHy3rPDMuGzxHLy3v0Aw9UlG','D29YA3nWywnLtwfWCgLUzW','CMvZCg9UC2uUC3rHCNrLza','zw5KtgLUzq','zxzLCNK','ywnJzxnZ','zMXHDe1HCa','ywrK','Ag9TzurPCMvJDg9YEq','tufsx0fhru5ux1nvqKfhru5ux01prevmx1voqvzbsuXbqKXf','CMvZCg9UC2vZuhjLDMLVDxnszxnWB25ZzuLK','Bw9KAwzPzwq','tufsx0fhru5ux0Hpu1rFsu5dt01qqvrjqKXf','zgLZCg9ZzvnLC3nPB25szxnVDxjJzxm','yxjJAgL0zwn0DxjL','C29YDa','y2fSBf9Pza','Dg9ju09tDhjPBMC','DgL0Bgvhzw5LCMf0Aw9U','CMvHzeLUChv0sw1Hz2vZ','Dgv4Dc5JB21WBgv0zwq','y29TCgfJDc5WCM9NCMvZCW','qxv0B21HDgLJignVBxbHy3qGzMfPBgvKlG','zgLZCg9Zzq','Cgf0y2HnyxHcExrLCW','vgHLig1VzgvSihjLAMvJDgvKihrOzsbJB21Wywn0zwqGy29UDgv4DcbHCYb0B28GBgfYz2uU','zw52AxjVBM1LBNrtDgf0zq','u2vSzwn0zwqGBw9KzwWGzg9LCYbUB3qGC3vWCg9YDcbPBwfNzsbPBNb1Dc4','Bw9KzwWUy29UDgv4Da','y29UDgv4Dc5JB21Wywn0Aw5N','C3rHDgu','u3vIywDLBNqGBw9KzwWGCM91BMqGBgLTAxqGD2fZihjLywnOzwqU','Ag9ZDgvKx3rVB2W','tufsx0fhru5ux0vyrunvveLptL9bq1rjvKu','C3vIywDLBNrwzxjPzMLJyxrPB25nyxHjDgvTCW','C3bSAwnL','tufsx0fhru5ux0vyrunvveLptL9gquLmruq','Aw1Hz2uVANbLzW','BNvTyMvY','Bg9JywXLq29TCgfYzq','C3vTBwfYEq','CMvXDwvZDfnPz25HDhvYzq','Ahr0CfzLCNnPB24','BgLZDfnLC3nPB25szxnVDxjJzxm','otaZmtaYsvnotKjv','Agv4','Ag9ZDg5HBwu','CM9SBg91Dej1zgDLDa','tw9KzwXZignHBM5VDcbIzsbYzwnVBMzPz3vYzwqGD2HPBguGyw4GzxHLy3v0Aw9UigLZigfJDgL2zs4','tw9KzwXZigfYzsbIzwLUzYbYzwnVBMzPz3vYzwqGzM9YihrOzsbUzxH0igv4zwn1DgLVBI4','ywrHChrLCKzHy3rVCNK','CMvZCg9UC2uUAxrLBq','Bw9KzwWUyxr0zw1WDa','Dgv4Dc5KzwX0yq','oJOX','Dg9mB3DLCKnHC2u','Ag9ZDa','zgf0yujHC2u2na','tw9KzwWGAw1Hz2uGz2vUzxjHDgLVBIbJB25MAwD1CMf0Aw9UigLZigLUDMfSAwqU','y3jLzgvUDgLHBfbYB3zPzgvY','CMvXDwvZDf90B29FBgfYz2u','tufsx0fhru5ux0Loufvux0LnquDfx0LhtK9sruq','yNL0zvnPEMu','Dg9VBf9JywXS','CgXHBI5JB21WBgv0zwq','ChjVy2vZC0LK','C3rHCNq','CMvJB3jKvxnHz2u','z3vHCMfUDgvLzenVBw1HBMrZ','Dhj1BMnHDgvK','CMv0CNLezwXHEu1Z','tw9KzwWGy29TCgXLDgvKihDPDgHVDxqGyw4Gyw5ZD2vYig9YihrVB2WGCMvXDwvZDc4','CMvTB3zLsw5WDxrjBwfNzxm','CMvHzev4zwn1DgLVBLn0yxrL','DhvYBI51C2vY','DxjS','u2vSzwn0zwqGCMvHC29UAw5NigvMzM9YDcbPCYb1BMf2ywLSywjSzsbMB3iGDgHLihn1yMfNzw50ig1VzgvSlG','zxjYB3jdB2rL','Aw5WDxruB2TLBNm','y29Kzv9TB2rL','C2TPBgXdyxrHBg9N','ChjVDg9JB2W','zgvZy3jPChrPB24','CMvWBgfJzq','y29Kzu1Vzgu','zgvSzxrLzeXPBMvZ','q09ervG','y29UDgv4Df93Aw5KB3DFzxHJzwvKzwq','u3vIywDLBNqGy29TCgXLDgvKihDPDgHVDxqGysbMAw5HBcbZDw1Tyxj5lG','zNjVBuvUDhjPzxm','su1br0u','zxHLy3v0Aw9UlMHLywrLCG','B24TCMvXDwvZDa','tufsx0fhru5ux1nvqKfhru5ux0zbsuXfra','zxHOyxvZDgvK','CMvZCg9UC2vZq2HHAw4','Dg90ywXZ','zgLZy2fYzeLMvw5VyNnLCNzLza','Cgf5Bg9Hza','B3bLBG','rxHLy3v0Aw9UihDHCYbJyw5JzwXSzwqU','BwvZC2fNzs5KzwX0yq','DhLWzq','tufsx0fhru5ux0Hpu1rFt1bfuKfusu9ox0zbsuXfra','ywDLBNrFC3rHCNq','yNL0zxm','CMvQzwn0zwq','Aw52ywXPzf9Yzxf1zxn0x2vYCM9Y','y29UDgv4DfDPBMrVD1rVA2vUCW','ChjVDMLKzxjnB2rLBeLK','DxnLCK1LC3nHz2vZ','qLLururFqvjl','AxrLBuLK','CgH5C2LJywXqyxrO','zgf0yq','C3vIywDLBNrnB2rLBfjVDw5KCW','yxj0AwzHy3rZ','y29Kzs5LEgvJDxrL','yxv0B21HDgLJq29TCgfJDgLVBLbLCMnLBNq','DhjPBq','C3vIywDLBNrtDw1Tyxj5twf4qNL0zxm','ANnVBG','y29TCgfJDa','A2v5CW','tufsx0fhru5ux1rpt0XFt1vuufvux0LovKfmsuq','q29TCgfJDgLVBIbYzxr1CM5LzcbHBIbLBxb0EsbOyw5KB2zMlG','Bw9KzwXuB29St3v0Chv0vg9Rzw5Z','BwvZC2fNzs5JB21WBgv0zwq','nZm4nde2zMDgv2f5','C3rYAw5Nx2fIB3zLx21HEf9Szw5NDgG','Dw5KzwzPBMvK','zxn0Aw1HDgvKvg9Rzw5ZugvYsw1Hz2u','Aw5JBhvKzxm','Aw1Hz2vZ','zxjYB3i','DxnHz2u','CxvLC3rPB24','C3vIywDLBNrZ','Aw1Hz2uVCg5N','BwvZC2fNzq','C3bSAxq','y3jLyxrLu2vZC2LVBG','CgvYC2LZDeLUChv0sw1Hz2vZ','z2v0','ChjVBxb0x3rVB19SB25N','CNvUBMLUzW','y2XVC2u','C3rKzxjY','zxHLy3v0zvrVB2W','y2XPzw50x3rVB2WUy2fSBa','CMvHC29U','ywrKzwrmAw5LCW','y2fSBeLK','tufsx0fhru5ux1rpt0XFsu5qvvrFsu5wquXjra','CgHHC2u','y2fWywjPBgL0AwvZ','y2fSBe1JCfrVB2W','C3rKB3v0rhjVChbLzej5DgvZ','Aw1Hz2vnB2rLBeLK','ywjVCNq','CMvKDwnL','DxnHz2uUDxbKyxrLza','C3vIywDLBNrwzxjPzMLJyxrPB25dAgfYywn0zxjZ','zwrPDevUzhbVAw50','y3jLzgvUDgLHBfbYB3zPzgvYCW','Dg9VBc5MywLSzwq','CMvZCg9UC2vjza','y3vZDg9Tx3rVB2XFy2fSBa','DgvZDa','D2vIx2zLDgnO','nda1otuYnfHwCenWAa','tufsx0fhru5ux0Loufvux0nbuefcsuXjvfLFvu5tvvbqt1juruq','yNL0zwrFyxjRx2LTywDLx2DLBG','rxHLy3v0Aw9UignHBMnLBgXLzc4','DgHLBG','tufsx0fhru5ux0nptvbbq1rFrKfjteve','DxnLCM5HBwu','CMvHza','tufsx0fhru5ux0rju1bpu0ve','y2XLyxi','zMLUza','y2fSBa','y29UDgv4DeLUChv0vg9Rzw5Z','C2HHmJu2','CMvZDg9Yzq','C3rHDhvZ','zMXVB3i','u1vcquDftLq','sg9ZDcbTB2rLigrVzxmGBM90ig1HDgnOiefNzw50ig1VzguU','tufsx0fhru5ux01prevmx09vvfbvvf9jtKnptvbmrvrf','C2HLBgW','tufsx0fhru5ux0vyrunvveLptL9dqu5druXmruq','C3LZDgvTsw5ZDhj1y3rPB24','C3vIywDLBNrezxnJCMLWDgLVBK1HEenOyxjHy3rLCNm','y29UDgv4DfjLy29Yzhm','zw1PDa','Dg9tDhjPBMC','DMfSDwu','C3rYAw5N','C2L6zq','rvHfq1vusu9o','zxHLy3v0Aw9UlNn0yxj0zwq','BwLTzvr5Cgu','t1bftKfjx1jfu1bptLnfuW','z2v0u2vZC2LVBG','yMvNAw5fEgvJDxrPB24','yxnZAxn0yw50','C2LNBMfS','DxnLCG','u1rbuLrfra','zNjVBq','igf0DgvTChrZicG','Dg9VBc5JB21WBgv0zwq','C2TPBgW','qu5usfjpueLdx01fu1nbr0vt','CMvZB2X2zq','ywDLBNrFD2fPDa','rKfjteve','DxbKyxrLvgL0Bgu','ywnXDwLYzvnLC3nPB25mzwfZzq','mti3lJaUmc4X','CMvZDwX0CW','DMfSDwvZ','DxrMoa','y29TCgXLDgvK','BM9YBwfSAxPL','AxntywzLsw50zwDLCG','AgfZAa','BgLZDa','C3rHCNrZv2L0Aa','tufsx0fhru5ux01prevmx0nptKzjr19jtLzbteLe','yxv0B21HDgLJvgL0Bgvqzw5KAw5N','Cgf0Aa','u2vSzwn0zwqGBw9KzwWGAxmGDw5HDMfPBgfIBguGzM9Yihn1yMfNzw50CY4','Dg9VBev2zw50u3vTBwfYEunOyxjHy3rLCNm','D2LSBfjLDhj5','ChjVBxb0','C3rYAw5NAwz5','Bw9KzwXZ','u1vdq0vfreve','BMv4Da','Aw5JBhvKzuLTywDLCW','AwrSzvr0Be1Z','CgXHDgzVCM0','tufsx0fhru5ux01prevmx0rju0fcteve','yM9VBgvHBG','Dgv4Da','B3v0Chv0','AM9PBG','Bw9KzwXjza','BwvZC2fNzxm','zxHLy3v0Aw9UlMzHAwXLza','C3rKB3v0qNL0zxm','zxHLyW','yxn5BMnjDgvYyxrVCG','CMv0CMLLCW','CMv0CNLHyMXL','sg9ZDcbLBNzPCM9UBwvUDcbMywn0CYbHCMuGAw52ywXPzcbVCIbLEgnLzwqGDgHLignVBNrLEhqGBgLTAxqU','AxnjBNrLz2vY','zw5HyMXLza','u2vSzwn0zwqGBw9KzwWGAxmGDw5HDMfPBgfIBguU','Bw92zwq','D2vIlMzLDgnO','yMfZzty0','A2LUza','zgvSzxrLza','ChvZAa','AxrLBq','C3rHCNrmAw5L','CxvLDwvK','zMfPBgvK','tufsx0fhru5ux0nptLrfwfrFteLnsvq','tw9KzwWGCMvXDwvZDcbMywLSzwqGywz0zxiG','zgvSDge','C2vHCMnO','y29UDgv4Dc5JB21Wywn0zwq','AxnbCNjHEq','C3rKzxjYrhjVChbLzej5DgvZ','qwDLBNqGAxmGzgLZCg9ZzwqU','CNvU','CMvZCg9UC2vZrw5JB2rPBMC','y3jLyxrLvhvYBLnLC3nPB24','zNvUy3rPB25Fy2fSBa','zxHLy3v0Aw9UlMnHBMnLBgXLza','tufsx0fhru5ux1nvqKfhru5ux1jfqvnptKLor19frKzpuLrFvu5bvKfjtefcteu','Aw5WDxrdyxbHyMLSAxrPzxm','DMLLD19PBwfNzq','Ag9ZDgvKv2vIu2vHCMnO','BwfYx2fNzw50x2nVBNrLEhrFBgLTAxq','zMLUywXFyw5ZD2vY','zgvSzxrL','zxHWBg9Yzq','Dg9VBa','y29UDgvUDa','Aw5WDxrnB2rL','zgvMyxvSDe1VzgvSswq','Ag9ZDgvKx3rVB2WUDxbKyxrLza','y2f0y2G','vgHLignVBxbHy3rPB24GCMvXDwvZDcbLEgnLzwrZihrOzsbTB2rLBcbJB250zxH0ihDPBMrVDY4','tufsx0fhru5ux1nfu1njt05Fq09suLvqva','nZa0nZa1DKPxBxPi','Cgf1C2u','CgfZC3DVCMq','C2vZC2LVBKrPCMvJDg9YEq','ChjVy2vZC2vZ','zgLNzxn0','ywXS','u1rbtKrbuKq','zgv0ywLSCW','zw50CMLLCW','rxHHy3rSEsbVBMuGBw9KzwWGy3jLzgvUDgLHBcbZB3vYy2uGAxmGCMvXDwLYzwqU','Bg9NAwnHBfbHDgG','rgvMyxvSDcbTB2rLBcbPCYb1BMf2ywLSywjSzs4','Bg9JywXOB3n0','CMv0CNLtDgf0zq','Aw1Hz2uVD2vICa','BgvUz3rO','y2L0yxrPB24','z2vUzxjHDgvfBMrWB2LUDa','BwnWx18','DxnLCL9PBNb1Da','CgXHBG','yxbWzw5K','CMvHC29UAw5NrwzMB3j0CW','B3bLCMf0Aw9U','y2fUy2vSBgvK','y29KzxHFAw1Hz2vFz2vU','ms4X','BwvZC2fNzunVDw50','BwLU','CMvHC29UAw5NrwzMB3j0','Aw1Hz2u','q09nuefdveLptG','Aw1Hz2vhzw5LCMf0Aw9U','y29Kzu1HEeLUChv0qNL0zxm','mZCYse9Wquvx','z2vUzxjHDgvKsw1Hz2veAxnWBgf5rgLYzwn0B3j5','zxzPzgvUy2u','D2vIx3nLyxjJAa','teLurq','y2HHBMDLzezPBgvZ','BwfYx2fNzw50x21VzgvSx3bYB3rVy29Sx2vYCM9Y','ywXSu2v0DgXLza','ywDLBNrFy2fUy2vS','q29KzxGGAw1Hz2uGz2vUzxjHDgLVBIbHCNrPzMfJDcbPCYbPBNzHBgLKlG','yxjNDw1LBNrZ','ndq0mJvMCfDKDhi','DgHYB3DjzKfIB3j0zwq','ywjVCNrLza','DgfYz2v0ugf0Aa','yxr0zw1WDhm','zMLSzu5HBwu','zMLSzxm','C29Tzq','BgLTAxruB2TLBNm','yxjNDw1LBNrfCNjVCG','B2jQzwn0','C3vIyxjYyxK','DMvYAwzPy2f0Aw9U','q29TCgfJDgLVBIbWCM9TChqGzxHJzwvKCYb0AguGC2vSzwn0zwqGBw9KzwWGy29UDgv4Dcb3Aw5KB3CU','y29UDgv4DeTPBMq','uhjVDMLKzxiGDxnHz2uGCMvHy2HLzcb0AguGy29TCgfJDgLVBIb0AhjLC2HVBgqGyNv0ig5VigHPC3rVCNKGy2fUigjLignVBxbHy3rLzc4','ywrHChrLCNm','yxr0zw1WDa','B3jPz2LU','D2vIlNnLyxjJAa','zw52AxjVBM1LBNq','AwDUB3jLzeLTywDLCW','Bwf4','BwfW','y29UDgv4Df9Szw5NDgHFzxHJzwvKzwq','Dg9KBW','DgL0Bgu','CMvWBgfJzufSBa','C3rKB3v0','ywDLBNrF','C2XPy2u','r2vUzxjHDgvKigLTywDLigrPC3bSyxKGzgLYzwn0B3j5igLZigLUDMfSAwqU','qxqGBgvHC3qGB25LigvUywjSzwqGBw9KzwWGAxmGCMvXDwLYzwqU','CM9Szq','y2L0yxrPB24UywrKzwq','Ahr0Chm6','D29YA3nWywnL','C3rHz2u','yNL0zuXLBMD0Aa','yxbPs2v5','ChjVDMLKzxi','uMvZCg9UC2vZigvUy29KAw5NigLZigLUDMfSAwqU','y2XPzw50twvZC2fNzuLK','tufsx0fhru5ux0nbtKnfteXfra','ihjLDhjPzxmPlIa','Dg9VBc5ZDgfYDgvK','y29Kzq','oNbSyw4TCgfYDdO','DxbKyxrL','AgfZ','BMfTzq','zxHPDenVzgu','C2v0','ywDLBNrjza','y29UDgv4Dc5LBNzPCM9UBwvUDa'];_0x4383=function(){return _0x337c83;};return _0x4383();}import{createHash,randomUUID}from'node:crypto';import{posix}from'node:path';import{describeMarAgentError,MarAgentError}from'../error.js';import{negotiateHost}from'../host/contracts.js';import{AnthropicMessagesAdapter,isAnthropicRecoverableStreamError}from'../model/anthropic-messages.js';import{anthropicThinkingBlock}from'../model/anthropic-thinking.js';import{resolveModelDefaultReasoningEffort}from'../model/configuration.js';import{modelRetryMaxAttempts,isRetryableModelRequestError,waitForModelRetry}from'../model/http.js';import{OpenAiResponsesAdapter,isOpenAiResponsesRecoverableStreamError}from'../model/openai-responses.js';import{AsyncQueue}from'../runtime/async-queue.js';import{PlanOutputPrefix,splitPlanOutput}from'../runtime/plan-output.js';import{AGENT_EXECUTION_POLICY}from'../runtime/execution-policy.js';import{RolloutBudget,resolveRolloutBudgetOptions}from'../runtime/rollout-budget.js';import{countModelTokens,truncateModelText}from'../runtime/token-budget.js';import{TOOL_EXECUTION_LIMITS}from'../tools/execution-limits.js';import{DEFAULT_COMPACTION_FOCUS,CompactionOperation,buildCompactionInput,buildCompactionMessages,buildCompactedHistory,compactedHistoryMessages,continuationMessage}from'../runtime/compact.js';import{buildSystemPrompt,MAR_AGENT_PROMPT_VERSION}from'../prompts/index.js';import{buildEnvironmentContext}from'../prompts/core.js';import{environmentContextUpdate,restoreEnvironmentState}from'../runtime/environment-context.js';import{childSubagentInstruction}from'../prompts/subagent.js';import{sessionTitlePrompt}from'../prompts/title.js';import{loadAgentInstructions,renderAgentInstructions}from'../runtime/instructions.js';import{normalizeMessagesForModel}from'../runtime/normalize.js';import{compactSummaryFromCheckpoint,replacementHistoryFromCheckpoint,JsonlSessionStore}from'../session/jsonl-store.js';import{TodoStore}from'../tools/todo.js';function _0x1108(_0x2ff341,_0x405bc7){_0x2ff341=_0x2ff341-(-0x167*0x17+-0x9db+-0x2acd*-0x1);const _0x492bde=_0x4383();let _0x3ab486=_0x492bde[_0x2ff341];if(_0x1108['ZChAKX']===undefined){var _0x4d9a76=function(_0x4470ef){const _0x5384c3='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2fb8bd='',_0x549644='';for(let _0x23a519=-0x905*0x4+0x6*0xd1+0xd*0x266,_0x5da6e2,_0x5e1493,_0x33f060=-0xcb*-0xb+-0x8ac+-0xd;_0x5e1493=_0x4470ef['charAt'](_0x33f060++);~_0x5e1493&&(_0x5da6e2=_0x23a519%(-0x1*-0x3cf+-0x78b+0x60*0xa)?_0x5da6e2*(-0x7*0x3bb+0xcb*-0x2b+0x3c76)+_0x5e1493:_0x5e1493,_0x23a519++%(0xec*0x29+0x439+-0x1*0x2a01))?_0x2fb8bd+=String['fromCharCode'](-0x2112+0x2258+-0x1*0x47&_0x5da6e2>>(-(0x49*-0x43+0x3*0x319+0x9d2)*_0x23a519&-0x153+-0x201e+0x1*0x2177)):0x343+0xd4+-0x417){_0x5e1493=_0x5384c3['indexOf'](_0x5e1493);}for(let _0x1d7715=-0x114+0x1*-0xc31+-0x2b*-0x4f,_0x3c4c62=_0x2fb8bd['length'];_0x1d7715<_0x3c4c62;_0x1d7715++){_0x549644+='%'+('00'+_0x2fb8bd['charCodeAt'](_0x1d7715)['toString'](0x656+0x397*0x1+-0x9dd))['slice'](-(-0x15a6+-0x246a+0x1*0x3a12));}return decodeURIComponent(_0x549644);};_0x1108['ghoFTt']=_0x4d9a76,_0x1108['bPbFgZ']={},_0x1108['ZChAKX']=!![];}const _0x543713=_0x492bde[0xee4+-0x345*-0x3+-0x18b3];_0x1108['hvEmlZ']!==_0x543713&&(_0x1108['bPbFgZ']={},_0x1108['hvEmlZ']=_0x543713);const _0x3f211b=_0x1108['bPbFgZ'][_0x2ff341];return _0x3f211b===undefined?(_0x3ab486=_0x1108['ghoFTt'](_0x3ab486),_0x1108['bPbFgZ'][_0x2ff341]=_0x3ab486):_0x3ab486=_0x3f211b,_0x3ab486;}import{BUILTIN_TOOL_DEFINITIONS}from'../tools/registry.js';import{executeRegisteredTool}from'../tools/runtime.js';import{scheduleToolCallBatch}from'../tools/scheduler.js';import{withCodeModeResultTypes}from'../tools/code-mode.js';import{SubagentScheduler}from'../subagent/scheduler.js';async function recoverModelStream(_0x452d99,_0x4240ba,_0x2ce2fe){const _0x5a836b=_0x1108;if(_0x2ce2fe[_0x5a836b(0x227)]||!(isRetryableModelRequestError(_0x452d99)||isOpenAiResponsesRecoverableStreamError(_0x452d99)||isAnthropicRecoverableStreamError(_0x452d99))||_0x4240ba[_0x5a836b(0x229)]>=modelRetryMaxAttempts(_0x4240ba))return![];const _0x3305c4=_0x4240ba[_0x5a836b(0x111)];return delete _0x4240ba[_0x5a836b(0x111)],await waitForModelRetry(typeof _0x452d99[_0x5a836b(0x1ff)]?.[_0x5a836b(0xc3)]===_0x5a836b(0x191)?_0x452d99[_0x5a836b(0x1ff)][_0x5a836b(0xc3)]:null,_0x4240ba[_0x5a836b(0x229)]-(0x1*-0x1867+0x9*0xfc+0xf8c),_0x2ce2fe,_0x3305c4),!![];}export async function createMarAgent(_0x220389){const _0x1f9936=_0x1108,_0x2564d0=resolveRolloutBudgetOptions(_0x220389[_0x1f9936(0xfa)]),_0x37fecc=normalizeGeneratedImageDisplayDirectory(_0x220389[_0x1f9936(0x21b)]),_0x42147f=resolveAgentModels(_0x220389[_0x1f9936(0x1b9)]);let {models:_0x5ccdc5,defaultModelId:_0x1a488}=_0x42147f;const {credentialProviders:_0x52a484}=_0x42147f,_0x184a86=negotiateHost(await _0x220389[_0x1f9936(0x103)][_0x1f9936(0xc4)]());if(_0x184a86[_0x1f9936(0xb6)]!==_0x220389[_0x1f9936(0xb6)])throw new MarAgentError(_0x1f9936(0xd7),_0x1f9936(0x187));const _0x484e03=await JsonlSessionStore[_0x1f9936(0x12e)](_0x184a86[_0x1f9936(0xd3)]),_0x480e7a=new Map(),_0x812830=new Map(),_0x1393cb=new Map();let _0x5b236b=![],_0x71f507=![];const _0x3362ad=(_0x1875c7,_0xa1e38=_0x5ccdc5)=>{const _0x296b0e=_0x1f9936,_0x258bd0=_0xa1e38[_0x296b0e(0x15a)](_0x1875c7);if(!_0x258bd0)throw new MarAgentError(_0x296b0e(0x1bf),_0x296b0e(0x1cf));return _0x220389[_0x296b0e(0xfd)]?.(_0x258bd0)??(_0x258bd0[_0x296b0e(0x11c)]===_0x296b0e(0x196)?new OpenAiResponsesAdapter(_0x258bd0):new AnthropicMessagesAdapter(_0x258bd0));},_0x111da6=async(_0x38d3ab,_0x54486b)=>{const _0x569754=_0x1f9936,_0x353b76=(await _0x484e03[_0x569754(0x197)](_0x38d3ab))[_0x569754(0x249)],_0xdaa604=_0x220389[_0x569754(0xcc)]?.[_0x569754(0x202)]??_0x54486b??_0x353b76??'',_0x44e4ac=_0x220389[_0x569754(0xcc)]?.[_0x569754(0x13c)]??_0x54486b??_0x353b76??'',_0x14550b={'platform':_0x184a86[_0x569754(0x1be)],..._0x184a86[_0x569754(0xd9)]?{'architecture':_0x184a86[_0x569754(0xd9)]}:{},..._0x184a86[_0x569754(0x189)]?{'shell':_0x184a86[_0x569754(0x189)]}:{},..._0x184a86[_0x569754(0x10f)]?{'guaranteedCommands':_0x184a86[_0x569754(0x10f)]}:{},'workspace':_0xdaa604};if(!restoreEnvironmentState({'version':0x1,'state':_0x14550b}))throw new MarAgentError(_0x569754(0xd7),_0x569754(0x1cc));const _0x29cb08=buildEnvironmentContext(_0x14550b);let _0x4b57bf=_0x1393cb[_0x569754(0x15a)](_0x38d3ab);_0x4b57bf===undefined&&(_0x4b57bf={'responsesChain':undefined,'adapters':new Map()},_0x1393cb[_0x569754(0x259)](_0x38d3ab,_0x4b57bf));const _0x47c800=(_0x53291e,_0x4ee4c4)=>{const _0x91a1c6=_0x569754;let _0x43dd2b=_0x4b57bf[_0x91a1c6(0x235)][_0x91a1c6(0x15a)](_0x53291e);if(_0x43dd2b===undefined){_0x43dd2b=_0x3362ad(_0x53291e,_0x4ee4c4);if(_0x220389[_0x91a1c6(0xfd)]===undefined||_0x43dd2b[_0x91a1c6(0x1e4)]!==undefined)_0x4b57bf[_0x91a1c6(0x235)][_0x91a1c6(0x259)](_0x53291e,_0x43dd2b);}return _0x43dd2b;},_0xc2965f=(_0x141b8e,_0x28fb29)=>{const _0x221d40=_0x569754;if(_0x5b236b)throw new MarAgentError(_0x221d40(0x17d),_0x221d40(0x1e1));if(_0x71f507)throw new MarAgentError(_0x221d40(0xec),_0x221d40(0xfc));if([..._0x480e7a[_0x221d40(0x146)]()][_0x221d40(0x22c)](_0x34cbe6=>_0x34cbe6[_0x221d40(0x1b0)](_0x38d3ab+':')))throw new MarAgentError(_0x221d40(0xec),_0x221d40(0xcb));const _0x587657=randomUUID(),_0x3e29c8=randomUUID(),_0x276d2e=new AsyncQueue(),_0x105a2d=new AbortController(),_0x89776e=_0x5ccdc5,_0x35fd79=_0x1a488,_0x346a03=_0x141b8e===_0x221d40(0x145)?randomUUID():undefined;_0x480e7a[_0x221d40(0x259)](_0x38d3ab+':'+_0x587657,_0x105a2d);let _0x2b723b=0x333+-0x1959+-0xa*-0x237,_0x197e8d=![],_0x30b237=Promise[_0x221d40(0x1a2)](),_0x41d0b2;const _0x5aa360=_0x530363=>{const _0xdf1778=_0x221d40,_0x5f3806={..._0x530363,'eventId':randomUUID(),'sequence':++_0x2b723b,'timestamp':new Date()[_0xdf1778(0xdc)](),'sessionId':_0x38d3ab,'executionId':_0x587657,'turnId':_0x3e29c8},_0x5599a0=_0x30b237[_0xdf1778(0x179)](async()=>{const _0x2d67bc=_0xdf1778,_0x4cef06=eventForPersistence(_0x5f3806);if(_0x4cef06!==undefined)await _0x484e03[_0x2d67bc(0x20d)](_0x38d3ab,{'type':_0x5f3806[_0x2d67bc(0x131)],'payload':_0x4cef06,'executionId':_0x587657,'turnId':_0x3e29c8});_0x276d2e[_0x2d67bc(0x1d5)](_0x5f3806),await _0x220389[_0x2d67bc(0x103)][_0x2d67bc(0x18e)](_0x5f3806);});return _0x30b237=_0x5599a0[_0xdf1778(0x1f4)](()=>undefined),_0x5599a0;},_0x5a965c=_0x3f21c3=>_0x41b1bf=>{const _0x62652b=_0x221d40;if(_0x3f21c3===_0x62652b(0x193)||_0x3f21c3===_0x62652b(0x217)){if(_0x41b1bf[_0x62652b(0xe9)]===_0x62652b(0x19c)&&_0x41b1bf[_0x62652b(0x236)]===0x2602+0x86*-0x3+-0x246f||_0x41b1bf[_0x62652b(0xe9)]===_0x62652b(0x1ba))_0x41d0b2=undefined;else{if(_0x41b1bf[_0x62652b(0xe9)]===_0x62652b(0x1a4)&&_0x41b1bf[_0x62652b(0x1b6)]===![]&&_0x41b1bf[_0x62652b(0x236)]>-0x2219+0xb5*0x29+0x51d)_0x41d0b2={'attempts':_0x41b1bf[_0x62652b(0x236)],'retries':_0x41b1bf[_0x62652b(0x236)]-(0xec*0x29+0x439+-0x1*0x2a04)};}}const _0x207892=_0x30b237[_0x62652b(0x179)](async()=>{const _0x47c9bc=_0x62652b;await _0x484e03[_0x47c9bc(0x20d)](_0x38d3ab,{'type':_0x47c9bc(0xff),'payload':{'purpose':_0x3f21c3,..._0x41b1bf},'executionId':_0x587657,'turnId':_0x3e29c8});});return _0x30b237=_0x207892[_0x62652b(0x1f4)](()=>undefined),_0x207892;},_0x225415=_0x17a1f3=>new CompactionOperation(_0x105a2d[_0x221d40(0x19a)],_0x457f35=>{const _0x191944=_0x221d40,_0x244726=_0x30b237[_0x191944(0x179)](async()=>{const _0xce2e0a=_0x191944;await _0x484e03[_0xce2e0a(0x20d)](_0x38d3ab,{'type':_0xce2e0a(0xe0),'payload':{'compactionId':_0x17a1f3,..._0x457f35},'executionId':_0x587657,'turnId':_0x3e29c8});});return _0x30b237=_0x244726[_0x191944(0x1f4)](()=>undefined),_0x244726;}),_0x2f0eb3=((async()=>{const _0x35bac4=_0x221d40;let _0x12b43a='';const _0x5c98d2=new Map();let _0x328a7b;const _0x84cc60=_0x2564d0?new RolloutBudget(_0x2564d0):undefined;let _0x42e876,_0x2f7ebd,_0x2ae2e7,_0x5d1967;const _0x52b2c0=new Set();let _0x31f2f2,_0x139503=![];const _0x582786=async()=>{const _0x591561=_0x1108;if(_0x139503)return;_0x139503=!![];const _0x562f48=await _0x31f2f2;if(_0x562f48)await _0x484e03[_0x591561(0x1a5)](_0x38d3ab,_0x562f48,{'executionId':_0x587657,'turnId':_0x3e29c8})[_0x591561(0x1f4)](()=>undefined);},_0x2c6591=async(_0x55eade,_0x5406c7)=>{const _0x234950=_0x1108,_0x555233=_0x55eade[_0x234950(0x1c4)]??_0x28fb29[_0x234950(0x1c4)]??_0x35fd79,_0xed0108=_0x89776e[_0x234950(0x15a)](_0x555233);if(_0xed0108===undefined)throw new MarAgentError(_0x234950(0xd4),_0x234950(0x1b4));let _0x2b8b9b=_0xed0108[_0x234950(0xc8)];if(_0x55eade[_0x234950(0x215)]!==undefined){if(!_0xed0108[_0x234950(0x20e)][_0x234950(0x14f)](_0x55eade[_0x234950(0x215)]))throw new MarAgentError(_0x234950(0x1e7),_0x234950(0x117),{'details':{'modelId':_0x555233,'reasoningEffort':_0x55eade[_0x234950(0x215)],'supportedReasoningEfforts':_0xed0108[_0x234950(0x20e)]}});_0x2b8b9b=_0x55eade[_0x234950(0x215)];}else{if(_0x28fb29[_0x234950(0x215)]!==undefined&&_0xed0108[_0x234950(0x20e)][_0x234950(0x14f)](_0x28fb29[_0x234950(0x215)]))_0x2b8b9b=_0x28fb29[_0x234950(0x215)];}const _0x576a67=_0x3362ad(_0x555233,_0x89776e),_0x14c815=createModelTurnSession(_0x576a67),_0xa2bca5=[{'role':_0x234950(0x19b),'content':_0x55eade[_0x234950(0x1b7)]}],_0x3a9417=BUILTIN_TOOL_DEFINITIONS[_0x234950(0xbb)](_0x45a41a=>!_0x45a41a[_0x234950(0x257)][_0x234950(0x1b0)](_0x234950(0x242))&&!_0x45a41a[_0x234950(0x257)][_0x234950(0x1b0)](_0x234950(0x23e))&&_0x45a41a[_0x234950(0x257)]!==_0x234950(0x153)&&_0x45a41a[_0x234950(0x257)]!==_0x234950(0x1e9)&&_0x45a41a[_0x234950(0x257)]!==_0x234950(0x211)&&_0x45a41a[_0x234950(0x257)]!==_0x234950(0x177)&&(_0x45a41a[_0x234950(0x257)]!==_0x234950(0x11a)||_0xed0108[_0x234950(0x11f)]&&_0x184a86[_0x234950(0x166)][_0x234950(0x14f)](_0x234950(0x140)))),_0x2a65a9=await loadAgentInstructions({'home':_0x184a86[_0x234950(0xd3)],'workspace':_0x44e4ac,'availableTools':new Set(_0x3a9417[_0x234950(0x23c)](_0x46b845=>_0x46b845[_0x234950(0x257)])),..._0x220389[_0x234950(0xcc)]===undefined?{}:{'workspaceDisplayPath':_0xdaa604}}),_0x12e011=withCodeModeResultTypes(_0x3a9417[_0x234950(0xbb)](_0x5aa327=>_0x5aa327[_0x234950(0x257)]!==_0x234950(0x1a0)||_0x2a65a9[_0x234950(0xc9)][_0x234950(0x192)]>-0x2112+0x2258+-0x1*0x146)),_0x5bc4f4=new Set(),_0x1ecf5f=[],_0x35b508=new Map(),_0x10d044=(_0x5cf2dc,_0x322e18)=>{const _0x2112e8=_0x234950;if(_0x5cf2dc[_0x2112e8(0x257)]===_0x2112e8(0xca)){for(const _0x21d5a3 of _0x322e18[_0x2112e8(0x13d)]?.[_0x2112e8(0x22b)]??[])for(const _0x328c02 of[_0x21d5a3[_0x2112e8(0x1b3)],_0x21d5a3[_0x2112e8(0x228)]])if(_0x328c02)_0x5bc4f4[_0x2112e8(0xd2)](_0x328c02);}if(_0x5cf2dc[_0x2112e8(0x257)]===_0x2112e8(0x17c))for(const _0x48ee9e of _0x322e18[_0x2112e8(0x13d)]?.[_0x2112e8(0x1a8)]??[]){if(!_0x48ee9e[_0x2112e8(0x1b3)]||_0x48ee9e[_0x2112e8(0x151)]||_0x35b508[_0x2112e8(0x192)]>=TOOL_EXECUTION_LIMITS[_0x2112e8(0xbd)])continue;const _0x973712={'path':_0x48ee9e[_0x2112e8(0x1b3)],..._0x48ee9e[_0x2112e8(0x1d7)]===undefined?{}:{'startLine':_0x48ee9e[_0x2112e8(0x1d7)]},..._0x48ee9e[_0x2112e8(0xce)]===undefined?{}:{'endLine':_0x48ee9e[_0x2112e8(0xce)]}};_0x35b508[_0x2112e8(0x259)](JSON[_0x2112e8(0x1b8)](_0x973712),_0x973712);}if(_0x5cf2dc[_0x2112e8(0x257)]===_0x2112e8(0x1c8)&&_0x1ecf5f[_0x2112e8(0x207)]<TOOL_EXECUTION_LIMITS[_0x2112e8(0xed)])_0x1ecf5f[_0x2112e8(0x1d5)](truncateUtf8(_0x322e18[_0x2112e8(0x1f0)],AGENT_EXECUTION_POLICY[_0x2112e8(0x16d)]));},_0xd2b4f5={'attempts':0x0};try{for(let _0x2bd161=0x49*-0x43+0x3*0x319+0x9d0;_0x2bd161<AGENT_EXECUTION_POLICY[_0x234950(0x13e)];_0x2bd161++){let _0x206cc8=![],_0x570c6c=![],_0x28822b,_0x5d73ab='';const _0x1ac627=[],_0x533d8f=_0x84cc60?.[_0x234950(0x24a)]!==_0x234950(0x129),_0x27c74f=_0x533d8f?_0x12e011:[];try{for await(const _0x37d20d of _0x14c815[_0x234950(0x10d)]({'retryState':_0xd2b4f5,'system':buildSystemPrompt({'mode':_0x55eade[_0x234950(0x246)]===_0x234950(0x1ee)?_0x234950(0x20c):_0x234950(0x1e2),'platform':_0x184a86[_0x234950(0x1be)],'workspace':_0xdaa604,'tools':_0x27c74f[_0x234950(0x23c)](_0x651be0=>_0x651be0[_0x234950(0x257)]),..._0x84cc60?{'executionBudget':{'stage':_0x84cc60[_0x234950(0x24a)],'limitTokens':_0x84cc60[_0x234950(0x22d)]}}:{},'extension':[_0x220389[_0x234950(0x18b)],_0x2a65a9[_0x234950(0x11b)],childSubagentInstruction][_0x234950(0xbb)](Boolean)[_0x234950(0x1c3)]('\x0a\x0a')}),'messages':insertContextualInstructions(_0xa2bca5,-0x153+-0x201e+0x1*0x2171,renderAgentInstructions(_0x2a65a9[_0x234950(0x200)],![]),_0x29cb08),'tools':_0x27c74f,..._0x533d8f?{}:{'allowTools':![]},'reasoningEffort':_0x2b8b9b,'onAttemptDiagnostic':_0x5a965c(_0x234950(0x186))},_0x5406c7)){if(_0x37d20d[_0x234950(0x131)]===_0x234950(0xfe))_0xa2bca5[_0x234950(0x1d5)]({'role':_0x234950(0x24d),'content':'','provider':_0x37d20d[_0x234950(0x24d)],'providerModelId':_0x555233,'item':_0x37d20d[_0x234950(0x1d6)]});else{if(_0x37d20d[_0x234950(0x131)]===_0x234950(0xdf)){if((_0x37d20d[_0x234950(0x165)]??_0x234950(0x1ec))===_0x234950(0x1ec))_0x5d73ab=_0x37d20d[_0x234950(0x1c1)];_0xa2bca5[_0x234950(0x1d5)]({'role':_0x234950(0x199),'content':_0x37d20d[_0x234950(0x1c1)]});}else{if(_0x37d20d[_0x234950(0x131)]===_0x234950(0x160))_0x570c6c=!![],_0xa2bca5[_0x234950(0x1d5)]({'role':_0x234950(0x10a),'content':'','callId':_0x37d20d[_0x234950(0x163)],'name':_0x37d20d[_0x234950(0x257)],'arguments':_0x37d20d[_0x234950(0x224)],..._0x37d20d[_0x234950(0x1f1)]?{'inputMode':_0x37d20d[_0x234950(0x1f1)]}:{}}),_0x1ac627[_0x234950(0x1d5)](_0x37d20d);else{if(_0x37d20d[_0x234950(0x131)]===_0x234950(0x152))_0x28822b=_0x37d20d[_0x234950(0x152)];else{if(_0x37d20d[_0x234950(0x131)]===_0x234950(0x1ab))_0x206cc8=_0x37d20d[_0x234950(0x161)]===_0x234950(0x1ab);}}}}}_0xd2b4f5[_0x234950(0x229)]=0x343+0xd4+-0x417;}catch(_0xbf0ccb){if(!await recoverModelStream(_0xbf0ccb,_0xd2b4f5,_0x5406c7))throw _0xbf0ccb;_0x206cc8=![],_0x5d73ab='';if(_0x1ac627[_0x234950(0x207)]===-0x114+0x1*-0xc31+-0x2b*-0x4f)continue;}const _0x3011fc=async(_0xf37e7c,_0x359666=_0x5406c7)=>{const _0x1361a0=_0x234950;try{if(_0xf37e7c[_0x1361a0(0x22e)])throw new MarAgentError(_0x1361a0(0x164),_0xf37e7c[_0x1361a0(0x22e)]);const _0x350fb0=_0xf37e7c[_0x1361a0(0x257)]===_0x1361a0(0x1a0)?await executeRegisteredTool(_0xf37e7c[_0x1361a0(0x257)],_0xf37e7c[_0x1361a0(0x224)],_0xf37e7c[_0x1361a0(0x163)],{'host':_0x220389[_0x1361a0(0x103)],'todo':new TodoStore(),'subagents':_0x83afb0,'access':_0x28fb29[_0x1361a0(0xd0)]??_0x1361a0(0x127),'mode':_0x55eade[_0x1361a0(0x246)]===_0x1361a0(0x1ee)?_0x1361a0(0x20c):_0x1361a0(0x1e2),'sessionId':_0x38d3ab,'executionId':_0x587657,'signal':_0x359666,'skills':_0x2a65a9[_0x1361a0(0xc9)],'emit':async()=>undefined}):_0xf37e7c[_0x1361a0(0x257)][_0x1361a0(0x1b0)](_0x1361a0(0x20a))?await _0x220389[_0x1361a0(0x103)][_0x1361a0(0x167)]?.(_0xf37e7c,_0x359666):await _0x220389[_0x1361a0(0x103)][_0x1361a0(0x15f)](_0xf37e7c,{'access':_0x28fb29[_0x1361a0(0xd0)]??_0x1361a0(0x127),'mode':_0x55eade[_0x1361a0(0x246)]===_0x1361a0(0x1ee)?_0x1361a0(0x20c):_0x1361a0(0x1e2),'sessionId':_0x38d3ab,'executionId':_0x587657,'signal':_0x359666,'codeMode':{'tools':_0x27c74f,'invoke':async(_0x39e7b5,_0x4d04d7)=>{const _0x31f520=_0x1361a0,_0x507c51=await _0x3011fc({'type':_0x31f520(0x160),'name':_0x39e7b5[_0x31f520(0x257)],'arguments':_0x39e7b5[_0x31f520(0x224)],'callId':_0x39e7b5[_0x31f520(0x163)]??randomUUID()},_0x4d04d7);if(_0x507c51[_0x31f520(0x1d9)])throw _0x507c51[_0x31f520(0x151)];return _0x507c51[_0x31f520(0x1c2)];}}});if(!_0x350fb0)throw new MarAgentError(_0x1361a0(0x128),_0x1361a0(0xb4));return _0x10d044(_0xf37e7c,_0x350fb0),{'call':_0xf37e7c,'output':_0x350fb0,'failed':![]};}catch(_0x3a25dc){if(_0x359666[_0x1361a0(0x227)])throw _0x3a25dc;const _0x5b3f34=describeMarAgentError(_0x3a25dc,_0x1361a0(0x132));return{'call':_0xf37e7c,'failed':!![],'error':_0x3a25dc,'output':{'content':JSON[_0x1361a0(0x1b8)]({'error':_0x5b3f34[_0x1361a0(0x253)],'message':_0x5b3f34[_0x1361a0(0x156)],..._0x3a25dc instanceof MarAgentError&&_0x3a25dc[_0x1361a0(0x1cb)]?{'retryable':!![]}:{}})}};}},_0x2e60ae=await scheduleToolCallBatch(_0x1ac627,_0x27c74f,_0x3011fc);for(const {call:_0x49d40c,output:_0x440a15}of _0x2e60ae)_0xa2bca5[_0x234950(0x1d5)]({'role':_0x234950(0x1ef),'callId':_0x49d40c[_0x234950(0x163)],'content':_0x440a15[_0x234950(0x1f0)]});if(_0x570c6c)_0xd2b4f5[_0x234950(0x229)]=0x656+0x397*0x1+-0x9ed;_0x84cc60?.[_0x234950(0x10e)](_0x28822b);if(_0x206cc8&&!_0x570c6c){if(!_0x5d73ab[_0x234950(0x142)]())throw new MarAgentError(_0x234950(0x128),_0x234950(0x123));return{'summary':truncateUtf8(_0x5d73ab,TOOL_EXECUTION_LIMITS[_0x234950(0x143)]),'changedFiles':[..._0x5bc4f4],'verification':_0x1ecf5f,'evidence':[..._0x35b508[_0x234950(0x1a9)]()]};}}throw new MarAgentError(_0x234950(0x128),_0x234950(0xea));}finally{await _0x14c815[_0x234950(0x15d)]()[_0x234950(0x1f4)](()=>undefined),await _0x576a67[_0x234950(0x15d)]?.()[_0x234950(0x1f4)](()=>undefined);}},_0x83afb0=_0x4b57bf[_0x35bac4(0x154)]??(_0x4b57bf[_0x35bac4(0x154)]=new SubagentScheduler(_0x2c6591));if(_0x4b57bf[_0x35bac4(0x154)]===_0x83afb0)_0x83afb0[_0x35bac4(0x198)](_0x2c6591);try{_0x42e876=await _0x484e03[_0x35bac4(0x1a6)](_0x38d3ab);const _0x5870f1=await _0x484e03[_0x35bac4(0x114)](_0x38d3ab),_0x5c309c=TodoStore[_0x35bac4(0x183)](_0x5870f1[_0x35bac4(0x23e)]),_0x1f6184=_0x5870f1[_0x35bac4(0x18d)],_0x32718f=_0x1f6184[_0x35bac4(0x22c)](_0x5f10b0=>compactSummaryFromCheckpoint(_0x5f10b0)!==undefined),_0x18b1b1=await restoreMessages(_0x484e03,_0x38d3ab,_0x1f6184,{'includeImages':_0x141b8e!==_0x35bac4(0x145)}),_0x2f2081=_0x18b1b1[_0x35bac4(0x1c5)],_0x26b5e0=async()=>{const _0x14be6a=_0x35bac4,_0x267b07=environmentContextUpdate(_0x14550b,_0x18b1b1[_0x14be6a(0xe5)]);if(!_0x267b07)return;await _0x484e03[_0x14be6a(0x20d)](_0x38d3ab,{'type':_0x14be6a(0xb2),'payload':{'version':0x1,'state':_0x14550b},'executionId':_0x587657,'turnId':_0x3e29c8}),_0x2f2081[_0x14be6a(0x1d5)](_0x267b07);};let _0x5853b2=[..._0x18b1b1[_0x35bac4(0x139)],..._0x141b8e===_0x35bac4(0x145)?[]:[_0x28fb29[_0x35bac4(0x1b7)]]];const _0x47325a=_0x2f2081[_0x35bac4(0x22c)](_0x5029a0=>_0x5029a0[_0x35bac4(0x246)]===_0x35bac4(0x19b)&&Boolean(_0x5029a0[_0x35bac4(0x150)]?.[_0x35bac4(0x207)])),_0x3ffea7=_0x141b8e===_0x35bac4(0x145)?undefined:_0x28fb29[_0x35bac4(0x150)]?.[_0x35bac4(0x23c)](({mimeType:_0x2bded0,dataBase64:_0x5aded6})=>({'mimeType':_0x2bded0,'dataBase64':_0x5aded6})),_0x15d35c=[];if(_0x141b8e===_0x35bac4(0x145))_0x4b57bf[_0x35bac4(0x12a)]=undefined;if(_0x141b8e!==_0x35bac4(0x145)){await _0x26b5e0();const _0x4b788d=_0x28fb29[_0x35bac4(0x150)]?.[_0x35bac4(0x207)]?await _0x484e03[_0x35bac4(0x159)](_0x38d3ab,_0x28fb29[_0x35bac4(0x150)]):[];try{await _0x484e03[_0x35bac4(0x20d)](_0x38d3ab,{'type':_0x35bac4(0x115),'payload':{'prompt':_0x28fb29[_0x35bac4(0x1b7)],..._0x28fb29[_0x35bac4(0x24f)]?{'clientMessageId':_0x28fb29[_0x35bac4(0x24f)]}:{},..._0x4b788d[_0x35bac4(0x207)]?{'images':_0x4b788d}:{}},'executionId':_0x587657,'turnId':_0x3e29c8});}catch(_0x1962f4){await _0x484e03[_0x35bac4(0x113)](_0x38d3ab,_0x4b788d)[_0x35bac4(0x1f4)](()=>undefined);throw _0x1962f4;}_0x2f2081[_0x35bac4(0x1d5)]({'role':_0x35bac4(0x19b),'content':_0x28fb29[_0x35bac4(0x1b7)]});if(_0x5870f1[_0x35bac4(0x1b2)]){const _0x2058ef=[..._0x89776e[_0x35bac4(0x1a9)]()][_0x35bac4(0x17f)](_0x48fcfa=>_0x48fcfa[_0x35bac4(0xdd)])??_0x89776e[_0x35bac4(0x15a)](_0x28fb29[_0x35bac4(0x1c4)]??_0x35fd79);_0x5d1967=_0x3362ad(_0x2058ef['id'],_0x89776e),_0x31f2f2=generateSessionTitle(_0x5d1967,_0x28fb29[_0x35bac4(0x1b7)],_0x2058ef[_0x35bac4(0xc8)],_0x105a2d[_0x35bac4(0x19a)],_0x5a965c(_0x35bac4(0xbe)))[_0x35bac4(0x1f4)](()=>undefined);}}await _0x5aa360({'type':_0x35bac4(0x194),'mode':_0x141b8e});if(_0x18b1b1[_0x35bac4(0x23a)]>-0x15a6+-0x246a+0x2*0x1d08)await _0x484e03[_0x35bac4(0x20d)](_0x38d3ab,{'type':_0x35bac4(0xbf),'payload':{'code':_0x35bac4(0x108),'message':_0x35bac4(0xc5),'ignoredImages':_0x18b1b1[_0x35bac4(0x23a)]},'executionId':_0x587657,'turnId':_0x3e29c8});_0x2ae2e7=_0x47c800(_0x28fb29[_0x35bac4(0x1c4)]??_0x35fd79,_0x89776e);if(_0x220389[_0x35bac4(0xfd)]!==undefined&&_0x2ae2e7[_0x35bac4(0x1e4)]===undefined)_0x52b2c0[_0x35bac4(0xd2)](_0x2ae2e7);const _0x5bc307=createModelTurnSession(_0x2ae2e7);_0x2f7ebd=_0x5bc307;const _0x462abe=_0x89776e[_0x35bac4(0x15a)](_0x28fb29[_0x35bac4(0x1c4)]??_0x35fd79),_0xdb8027=Math[_0x35bac4(0x214)](0x3b90+-0x273a*-0x1+-0x14aa,Math[_0x35bac4(0x185)](_0x462abe[_0x35bac4(0x137)]/(0x1*0x37+0x1b5*0x8+0x3*-0x49d))),_0x139587=_0x28fb29[_0x35bac4(0x215)]??_0x462abe[_0x35bac4(0xc8)];if(_0x141b8e!==_0x35bac4(0x145)&&(_0x28fb29[_0x35bac4(0x150)]?.[_0x35bac4(0x207)]||_0x47325a)&&!_0x462abe[_0x35bac4(0x1e8)][_0x35bac4(0x14f)](_0x35bac4(0x125)))throw new MarAgentError(_0x35bac4(0x176),_0x35bac4(0xe6));const _0x11a6ae=await _0x220389[_0x35bac4(0x103)][_0x35bac4(0xba)]?.()??[],_0x380845=_0x5ccdc5[_0x35bac4(0x15a)](_0x28fb29[_0x35bac4(0x1c4)]??_0x1a488),_0x3da2ce=[...BUILTIN_TOOL_DEFINITIONS,..._0x11a6ae][_0x35bac4(0xbb)](_0x447728=>_0x447728[_0x35bac4(0x257)]===_0x35bac4(0x11a)?_0x380845[_0x35bac4(0x11f)]&&_0x184a86[_0x35bac4(0x166)][_0x35bac4(0x14f)](_0x35bac4(0x140)):_0x447728[_0x35bac4(0x257)]===_0x35bac4(0x153)?_0x141b8e===_0x35bac4(0x20c):_0x447728[_0x35bac4(0x257)]===_0x35bac4(0x21d)?!_0x380845[_0x35bac4(0x1ea)]&&_0x184a86[_0x35bac4(0x166)][_0x35bac4(0x14f)](_0x35bac4(0x238)):_0x447728[_0x35bac4(0x257)]===_0x35bac4(0x1e9)?_0x380845[_0x35bac4(0x1e8)][_0x35bac4(0x14f)](_0x35bac4(0x125)):_0x447728[_0x35bac4(0x257)]===_0x35bac4(0x211)?_0x380845[_0x35bac4(0x218)]?.[_0x35bac4(0x24d)]===_0x35bac4(0x121):_0x447728[_0x35bac4(0x257)]===_0x35bac4(0x177)?_0x380845[_0x35bac4(0x218)]?.[_0x35bac4(0x24d)]===_0x35bac4(0x13a):_0x447728[_0x35bac4(0x257)]!==_0x35bac4(0x174)||_0x184a86[_0x35bac4(0x166)][_0x35bac4(0x14f)](_0x35bac4(0x1d1))),_0x458693=_0x141b8e===_0x35bac4(0x145)?undefined:await loadAgentInstructions({'home':_0x184a86[_0x35bac4(0xd3)],'workspace':_0x44e4ac,'availableTools':new Set(_0x3da2ce[_0x35bac4(0x23c)](_0x18d2e7=>_0x18d2e7[_0x35bac4(0x257)])),..._0x220389[_0x35bac4(0xcc)]===undefined?{}:{'workspaceDisplayPath':_0xdaa604}});let _0x43205f=_0x141b8e===_0x35bac4(0x145)?undefined:renderAgentInstructions(_0x458693?.[_0x35bac4(0x200)]??[],_0x32718f),_0x1d710e=_0x141b8e===_0x35bac4(0x145)?undefined:Math[_0x35bac4(0x23b)](-0x9*-0x343+0x7*0x1+-0x2*0xeb1,_0x2f2081[_0x35bac4(0x207)]-(0xa55*0x1+0x219+-0xc6d));if(_0x1d710e&&_0x2f2081[_0x1d710e-(-0x16f9+0x9a2*0x2+0x3b6)]?.[_0x35bac4(0x233)]===_0x35bac4(0x239))_0x1d710e--;const _0x3b57dd=withCodeModeResultTypes(_0x3da2ce[_0x35bac4(0xbb)](_0x2b5012=>_0x2b5012[_0x35bac4(0x257)]!==_0x35bac4(0x1a0)||(_0x458693?.[_0x35bac4(0xc9)][_0x35bac4(0x192)]??-0x5e2+-0x2199+0x277b)>0xacd+0x4b9+0x1*-0xf86)),_0xe4f4bb=_0x141b8e===_0x35bac4(0x145)?[]:_0x3b57dd,_0x3753a3=_0x141b8e===_0x35bac4(0x145)?{'processes':[]}:await _0x220389[_0x35bac4(0x103)][_0x35bac4(0xf6)]?.(_0x38d3ab)??{'processes':[]},_0xa6c250={..._0x3753a3[_0x35bac4(0x1bd)]===undefined?{}:{'idleTtlMs':_0x3753a3[_0x35bac4(0x1bd)]},'processes':_0x3753a3[_0x35bac4(0x1fb)],'subagents':_0x83afb0[_0x35bac4(0xf6)]()},_0xf3f5aa=(_0x1e460e=_0xe4f4bb)=>buildSystemPrompt({'mode':_0x141b8e,'platform':_0x184a86[_0x35bac4(0x1be)],..._0x184a86[_0x35bac4(0xd9)]?{'architecture':_0x184a86[_0x35bac4(0xd9)]}:{},..._0x184a86[_0x35bac4(0x189)]?{'shell':_0x184a86[_0x35bac4(0x189)]}:{},..._0x184a86[_0x35bac4(0x10f)]?{'guaranteedCommands':_0x184a86[_0x35bac4(0x10f)]}:{},'workspace':_0xdaa604,'tools':_0x1e460e[_0x35bac4(0x23c)](_0x590214=>_0x590214[_0x35bac4(0x257)]),'subagentModels':[..._0x89776e[_0x35bac4(0x1a9)]()][_0x35bac4(0x23c)](_0x403edf=>({'id':_0x403edf['id'],'name':_0x403edf[_0x35bac4(0x257)],'default':_0x403edf['id']===_0x1a488,'reasoningEfforts':_0x403edf[_0x35bac4(0x20e)]})),'retainedSessionResources':_0xa6c250,..._0x84cc60?{'executionBudget':{'stage':_0x84cc60[_0x35bac4(0x24a)],'limitTokens':_0x84cc60[_0x35bac4(0x22d)]}}:{},'extension':[_0x220389[_0x35bac4(0x18b)],_0x458693?.[_0x35bac4(0x11b)]][_0x35bac4(0xbb)](Boolean)[_0x35bac4(0x1c3)]('\x0a\x0a')}),_0x323f97=_0xf3f5aa();if(_0x141b8e===_0x35bac4(0x145)){const _0x2ddf74=estimatedRequestTokens(_0x323f97,buildCompactionMessages(''),[]),_0x43271c=_0x462abe[_0x35bac4(0x137)]-_0x2ddf74;if(_0x43271c<=-0x55*0x3b+-0x24f3+0x388a)throw new MarAgentError(_0x35bac4(0x1da),_0x35bac4(0x232));_0x2f2081[_0x35bac4(0xee)](-0x9b6+-0x20d5+-0x2a8b*-0x1,_0x2f2081[_0x35bac4(0x207)],...buildCompactionMessages(buildCompactionInput(_0x2f2081,{'focus':_0x28fb29[_0x35bac4(0x1b7)],'maxTokens':_0x43271c})));}await _0x484e03[_0x35bac4(0x20d)](_0x38d3ab,{'type':_0x35bac4(0x126),'payload':{'promptVersion':MAR_AGENT_PROMPT_VERSION,'promptHash':createHash(_0x35bac4(0x182))[_0x35bac4(0x255)](_0x323f97)[_0x35bac4(0x1fc)](_0x35bac4(0xf8)),'modelId':_0x462abe['id'],'mode':_0x141b8e},'executionId':_0x587657,'turnId':_0x3e29c8});let _0x4131a8=latestContextInputTokens(_0x1f6184,_0x462abe['id']);const _0x545683=async()=>{const _0xb747a2=_0x35bac4,_0x90d803=_0x2f2081['at'](-(-0xac4+-0xf2c+0x19f1));if(!_0x90d803||_0x2f2081[_0xb747a2(0x207)]<0x8*0x33+0xfe6+-0x117c)return![];const _0x21fbaf=_0x90d803[_0xb747a2(0x246)]===_0xb747a2(0x19b);let _0x183697='';const _0xa0c525=buildSystemPrompt({'mode':_0xb747a2(0x145),'platform':_0x184a86[_0xb747a2(0x1be)],'workspace':_0xdaa604,'tools':[],'extension':_0x220389[_0xb747a2(0x18b)]}),_0x201a41=estimatedRequestTokens(_0xa0c525,buildCompactionMessages(''),[]),_0x4907b0=Math[_0xb747a2(0x23b)](-0x2c5*0xb+-0x196*0xc+-0x1*-0x317f,_0x462abe[_0xb747a2(0x137)]-_0x201a41);if(_0x4907b0===-0x1*0x411+0x1*-0x10b9+0x14ca)throw new MarAgentError(_0xb747a2(0x1da),_0xb747a2(0x232));const _0x1f9adb=buildCompactionInput(_0x21fbaf?_0x2f2081[_0xb747a2(0x243)](0xa7*-0x2d+-0x1195+0x2ef0,-(0x8ad*0x2+-0x1*-0x1904+-0x2d*0xf1)):_0x2f2081,{'maxTokens':Math[_0xb747a2(0x23b)](0x26c8+0x1333+-0x39fa,_0x4907b0)}),_0x319a43=randomUUID();await _0x5aa360({'type':_0xb747a2(0xe8),'compactionId':_0x319a43});let _0x242626;const _0x138dea={'attempts':0x0},_0x159a84=_0x225415(_0x319a43);try{while(!![]){_0x183697='',_0x242626=undefined;try{for await(const _0x5dea48 of _0x159a84[_0xb747a2(0x10d)](_0x5bc307,{'retryState':_0x138dea,'system':_0xa0c525,'messages':buildCompactionMessages(_0x1f9adb),'tools':[],'allowTools':![],'promptCacheKey':_0x38d3ab,'onAttemptDiagnostic':_0x5a965c(_0xb747a2(0x217))})){if(_0x5dea48[_0xb747a2(0x131)]===_0xb747a2(0xdf)&&(_0x5dea48[_0xb747a2(0x165)]??_0xb747a2(0x1ec))===_0xb747a2(0x1ec))_0x183697=_0x5dea48[_0xb747a2(0x1c1)][_0xb747a2(0x142)]();else _0x5dea48[_0xb747a2(0x131)]===_0xb747a2(0x152)&&(_0x242626=_0x5dea48[_0xb747a2(0x152)],await _0x5aa360({'type':_0xb747a2(0x16c),...publicModelUsage(_0x5dea48[_0xb747a2(0x152)])}));}break;}catch(_0x4e63d3){if(await recoverModelStream(_0x4e63d3,_0x138dea,_0x159a84[_0xb747a2(0x19a)])){_0x4b57bf[_0xb747a2(0x12a)]=undefined;continue;}if(isProviderContextOverflow(_0x4e63d3))throw new MarAgentError(_0xb747a2(0x1da),_0xb747a2(0x1f5),{'cause':_0x4e63d3});throw _0x4e63d3;}}}finally{await _0x159a84[_0xb747a2(0xe2)]();}if(!_0x183697)throw new MarAgentError(_0xb747a2(0x17a),_0xb747a2(0xe1));_0x84cc60?.[_0xb747a2(0x10e)](_0x242626);const _0x5a293d=buildCompactedHistory(_0x183697,_0x21fbaf?_0x5853b2[_0xb747a2(0x243)](-0xc00+0x26c3+-0x1ac3,-(0x3*0x27+0x20ef+0xb*-0x309)):_0x5853b2,_0xdb8027,_0x21fbaf?_0x90d803[_0xb747a2(0x1f0)]:undefined);return await _0x484e03[_0xb747a2(0x145)](_0x38d3ab,{'summary':_0x183697,'replacementHistory':_0x5a293d,'automatic':!![],'environment':_0x14550b,'modelId':_0x462abe['id'],'executionId':_0x587657,'turnId':_0x3e29c8}),_0x2f2081[_0xb747a2(0xee)](0x23e6+-0x2*0x78a+-0xcd*0x1a,_0x2f2081[_0xb747a2(0x207)],environmentContextUpdate(_0x14550b),...compactedHistoryMessages(_0x5a293d)),_0x5853b2=_0x5a293d[_0xb747a2(0xbb)](_0x32cc9f=>_0x32cc9f[_0xb747a2(0x1d3)]===_0xb747a2(0x20b))[_0xb747a2(0x23c)](_0x32f074=>_0x32f074[_0xb747a2(0x1f0)]),_0x43205f=renderAgentInstructions(_0x458693?.[_0xb747a2(0x200)]??[],!![]),_0x1d710e=Math[_0xb747a2(0x23b)](-0x1ecd+-0x25e0+0x1*0x44ad,_0x2f2081[_0xb747a2(0x207)]-(-0x18d8+0x2589+0x70*-0x1d)),_0x4b57bf[_0xb747a2(0x12a)]=undefined,_0x4131a8=undefined,await _0x5aa360({'type':_0xb747a2(0x1de),'compactionId':_0x319a43}),!![];},_0x1db6bc=async()=>{const _0x39aad6=_0x35bac4;if(_0x141b8e===_0x39aad6(0x145)||_0x4131a8===undefined)return;const _0x5e1429=_0x462abe[_0x39aad6(0x137)],_0x153df5=Math[_0x39aad6(0x185)](_0x5e1429*AGENT_EXECUTION_POLICY[_0x39aad6(0x141)]/(0x12e7*0x2+0x217b+0x46e5*-0x1));if(_0x4131a8<_0x153df5)return;if(!await _0x545683())throw new MarAgentError(_0x39aad6(0x1da),_0x39aad6(0x234));};let _0x160975=![];const _0x1922d7={'attempts':0x0};while(!![]){let _0x2fbe75,_0x3f3359=![],_0x3796c4,_0x2d7650;const _0x1135cf=[];await _0x1db6bc();const _0x4f9732=_0x141b8e!==_0x35bac4(0x145)&&_0x84cc60?.[_0x35bac4(0x24a)]!==_0x35bac4(0x129),_0x2c9a95=_0x4f9732?_0xe4f4bb:[],_0x153fb2=_0xf3f5aa(_0x2c9a95),_0x474709=createHash(_0x35bac4(0x182))[_0x35bac4(0x255)](stableJson({'modelId':_0x462abe['id'],'systemPrompt':_0x153fb2,'agentInstructionMessage':_0x43205f,'tools':_0x2c9a95,'reasoningEffort':_0x139587}))[_0x35bac4(0x1fc)](_0x35bac4(0xf8)),_0x2e8af6=_0x462abe[_0x35bac4(0xd5)]&&_0x4b57bf[_0x35bac4(0x12a)]?.[_0x35bac4(0x1c4)]===_0x462abe['id']&&_0x4b57bf[_0x35bac4(0x12a)][_0x35bac4(0xf4)]===_0x474709&&_0x4b57bf[_0x35bac4(0x12a)][_0x35bac4(0x213)]<=_0x2f2081[_0x35bac4(0x207)]?{'previousResponseId':_0x4b57bf[_0x35bac4(0x12a)][_0x35bac4(0x171)],'deltaMessages':_0x2f2081[_0x35bac4(0x243)](_0x4b57bf[_0x35bac4(0x12a)][_0x35bac4(0x213)])}:undefined;let _0x3da958=![];const _0x5a860e=_0x2f2081[_0x35bac4(0x207)];try{_0x346a03!==undefined&&!_0x197e8d&&(_0x197e8d=!![],_0x328a7b=_0x225415(_0x346a03),await _0x5aa360({'type':_0x35bac4(0xe8),'compactionId':_0x346a03}));const _0x3c5ab5=_0x328a7b?_0x275325=>_0x328a7b[_0x35bac4(0x10d)](_0x5bc307,_0x275325):_0x365e4f=>_0x5bc307[_0x35bac4(0x10d)](_0x365e4f,_0x105a2d[_0x35bac4(0x19a)]);for await(const _0xfc0fae of _0x3c5ab5({'retryState':_0x1922d7,'system':_0x153fb2,'messages':normalizeMessagesForModel(insertContextualInstructions(_0x2f2081,_0x1d710e,_0x43205f),{'supportsImages':_0x462abe[_0x35bac4(0x1e8)][_0x35bac4(0x14f)](_0x35bac4(0x125))}),'tools':_0x2c9a95,..._0x4f9732?{}:{'allowTools':![]},'promptCacheKey':_0x38d3ab,..._0x2e8af6?{'continuation':_0x2e8af6}:{},'reasoningEffort':_0x139587,..._0x3ffea7?.[_0x35bac4(0x207)]?{'images':_0x3ffea7}:{},'onAttemptDiagnostic':_0x5a965c(_0x141b8e===_0x35bac4(0x145)?_0x35bac4(0x217):_0x35bac4(0x193))})){if(_0xfc0fae[_0x35bac4(0x131)]!==_0x35bac4(0xcd)&&_0xfc0fae[_0x35bac4(0x131)]!==_0x35bac4(0x152))_0x3da958=!![];if(_0xfc0fae[_0x35bac4(0x131)]===_0x35bac4(0xcd))_0x3796c4=_0xfc0fae[_0x35bac4(0x171)];else{if(_0xfc0fae[_0x35bac4(0x131)]===_0x35bac4(0xfe)){if(_0x141b8e===_0x35bac4(0x145))continue;const _0x43386a={'role':_0x35bac4(0x24d),'content':'','provider':_0xfc0fae[_0x35bac4(0x24d)],'providerModelId':_0x462abe['id'],'item':_0xfc0fae[_0x35bac4(0x1d6)]};_0x2f2081[_0x35bac4(0x1d5)](_0x43386a),await _0x484e03[_0x35bac4(0x20d)](_0x38d3ab,{'type':_0x35bac4(0xe7),'payload':_0x43386a,'executionId':_0x587657,'turnId':_0x3e29c8});}else{if(_0xfc0fae[_0x35bac4(0x131)]===_0x35bac4(0x100)){let _0x5ae538=_0xfc0fae[_0x35bac4(0x1dc)];if(_0x141b8e===_0x35bac4(0x20c)){let _0x2264b5=_0x5c98d2[_0x35bac4(0x15a)](_0xfc0fae[_0x35bac4(0x13b)]);!_0x2264b5&&(_0x2264b5=new PlanOutputPrefix(),_0x5c98d2[_0x35bac4(0x259)](_0xfc0fae[_0x35bac4(0x13b)],_0x2264b5)),_0x5ae538=_0x2264b5[_0x35bac4(0x1d5)](_0x5ae538);}if(_0x141b8e!==_0x35bac4(0x145)&&_0x5ae538)await _0x5aa360({'type':_0x35bac4(0x130),'itemId':_0xfc0fae[_0x35bac4(0x13b)],'phase':_0xfc0fae[_0x35bac4(0x165)],'delta':_0x5ae538});}else{if(_0xfc0fae[_0x35bac4(0x131)]===_0x35bac4(0xdf)){const _0x332bbb=_0xfc0fae[_0x35bac4(0x165)]??_0x35bac4(0x1ec);if(_0x332bbb===_0x35bac4(0x1ec))_0x12b43a=_0xfc0fae[_0x35bac4(0x1c1)];_0x5c98d2[_0x35bac4(0x1ed)](_0xfc0fae[_0x35bac4(0x13b)]);if(_0x141b8e!==_0x35bac4(0x145)){if(_0x141b8e===_0x35bac4(0x20c)){const _0x326b6=splitPlanOutput(_0xfc0fae[_0x35bac4(0x1c1)]);for(const [_0x3f79c3,_0x131e2e]of _0x326b6[_0x35bac4(0x200)]()){const _0x57d32f=_0x3f79c3===-0x1*0x1c73+-0x5*-0x2b0+0xf03*0x1?_0xfc0fae[_0x35bac4(0x13b)]:_0xfc0fae[_0x35bac4(0x13b)]+_0x35bac4(0x254)+_0x3f79c3;if(_0x131e2e[_0x35bac4(0x1d3)]===_0x35bac4(0x20c))await _0x5aa360({'type':_0x35bac4(0x10b),'itemId':_0x57d32f,'text':_0x131e2e[_0x35bac4(0x1c1)]});else await _0x5aa360({'type':_0x35bac4(0x14a),'itemId':_0x57d32f,'phase':_0x332bbb,'text':_0x131e2e[_0x35bac4(0x1c1)]});}}else await _0x5aa360({'type':_0x35bac4(0x14a),'itemId':_0xfc0fae[_0x35bac4(0x13b)],'phase':_0x332bbb,'text':_0xfc0fae[_0x35bac4(0x1c1)]});}_0x2f2081[_0x35bac4(0x1d5)]({'role':_0x35bac4(0x199),'content':_0xfc0fae[_0x35bac4(0x1c1)]});}else{if(_0xfc0fae[_0x35bac4(0x131)]===_0x35bac4(0x152)){_0x2d7650=_0xfc0fae[_0x35bac4(0x152)];const _0x3c076f=_0xfc0fae[_0x35bac4(0x152)][_0x35bac4(0x181)]??_0xfc0fae[_0x35bac4(0x152)][_0x35bac4(0x119)];if(_0x3c076f!==undefined&&Number[_0x35bac4(0x1ad)](_0x3c076f)&&_0x3c076f>=-0x1703+-0x39b+0x1a9e)_0x4131a8=_0x3c076f;await _0x5aa360({'type':_0x35bac4(0x16c),...publicModelUsage(_0xfc0fae[_0x35bac4(0x152)])});}else{if(_0xfc0fae[_0x35bac4(0x131)]===_0x35bac4(0xc0)){if(_0x141b8e!==_0x35bac4(0x145))await _0x5aa360({'type':_0x35bac4(0xc0),'text':_0xfc0fae[_0x35bac4(0x1c1)]});}else{if(_0xfc0fae[_0x35bac4(0x131)]===_0x35bac4(0xeb)){if(_0x141b8e!==_0x35bac4(0x145))await _0x5aa360({'type':_0x35bac4(0x1f3),'itemId':_0xfc0fae[_0x35bac4(0x13b)],'kind':_0xfc0fae[_0x35bac4(0x1d3)],'status':_0xfc0fae[_0x35bac4(0x184)],'summary':_0xfc0fae[_0x35bac4(0xf3)]});}else{if(_0xfc0fae[_0x35bac4(0x131)]===_0x35bac4(0x208)){if(_0x141b8e!==_0x35bac4(0x145))await _0x5aa360({'type':_0x35bac4(0x247),'id':_0xfc0fae[_0x35bac4(0x208)]['id'],'url':_0xfc0fae[_0x35bac4(0x208)][_0x35bac4(0x116)],..._0xfc0fae[_0x35bac4(0x208)][_0x35bac4(0x23f)]?{'title':_0xfc0fae[_0x35bac4(0x208)][_0x35bac4(0x23f)]}:{}});}else{if(_0xfc0fae[_0x35bac4(0x131)]===_0x35bac4(0x160)){_0x3f3359=!![];const _0x416142={'role':_0x35bac4(0x10a),'callId':_0xfc0fae[_0x35bac4(0x163)],'name':_0xfc0fae[_0x35bac4(0x257)],'arguments':_0xfc0fae[_0x35bac4(0x224)],..._0xfc0fae[_0x35bac4(0x1f1)]?{'inputMode':_0xfc0fae[_0x35bac4(0x1f1)]}:{},'content':''};_0x2f2081[_0x35bac4(0x1d5)](_0x416142),await _0x484e03[_0x35bac4(0x20d)](_0x38d3ab,{'type':_0x35bac4(0xe7),'payload':_0x416142,'executionId':_0x587657,'turnId':_0x3e29c8}),_0x1135cf[_0x35bac4(0x1d5)](_0xfc0fae);}else{if(_0xfc0fae[_0x35bac4(0x131)]===_0x35bac4(0x1ab))_0x2fbe75=_0xfc0fae[_0x35bac4(0x161)];}}}}}}}}}}_0x1922d7[_0x35bac4(0x229)]=0x2565+-0x1e55+0x710*-0x1;}catch(_0x456f6f){_0x5c98d2[_0x35bac4(0x17e)]();if(await recoverModelStream(_0x456f6f,_0x1922d7,_0x328a7b?.[_0x35bac4(0x19a)]??_0x105a2d[_0x35bac4(0x19a)])){_0x4b57bf[_0x35bac4(0x12a)]=undefined,_0x3796c4=undefined,_0x12b43a='';if(_0x141b8e===_0x35bac4(0x145))_0x2f2081[_0x35bac4(0xee)](_0x5a860e);if(_0x1135cf[_0x35bac4(0x207)]===0x1c67+0x1d9e+0x3a05*-0x1)continue;}else{if(_0x141b8e!==_0x35bac4(0x145)&&!_0x3da958&&isProviderContextOverflow(_0x456f6f)){_0x4b57bf[_0x35bac4(0x12a)]=undefined;if(!_0x160975&&await _0x545683()){_0x1922d7[_0x35bac4(0x229)]=-0x2a*0x56+-0x3c3*0x2+-0x8e*-0x27,_0x160975=!![];continue;}throw new MarAgentError(_0x35bac4(0x1da),_0x35bac4(0xe4),{'cause':_0x456f6f});}else throw _0x456f6f;}}_0x160975=![];if(_0x462abe[_0x35bac4(0xd5)]&&_0x3796c4)_0x4b57bf[_0x35bac4(0x12a)]={'modelId':_0x462abe['id'],'responseId':_0x3796c4,'requestSignature':_0x474709,'messageCount':_0x2f2081[_0x35bac4(0x207)]};else{if(_0x462abe[_0x35bac4(0xd5)])_0x4b57bf[_0x35bac4(0x12a)]=undefined;}const _0x1243fc=async(_0x34b0c1,_0x335fbc=_0x105a2d[_0x35bac4(0x19a)])=>{const _0x3fe5ad=_0x35bac4;await _0x5aa360({'type':_0x3fe5ad(0x252),'toolName':_0x34b0c1[_0x3fe5ad(0x257)],'callId':_0x34b0c1[_0x3fe5ad(0x163)],'input':_0x34b0c1[_0x3fe5ad(0x224)]});try{if(_0x34b0c1[_0x3fe5ad(0x22e)])throw new MarAgentError(_0x3fe5ad(0x164),_0x34b0c1[_0x3fe5ad(0x22e)]);const _0x541a34=await executeRegisteredTool(_0x34b0c1[_0x3fe5ad(0x257)],_0x34b0c1[_0x3fe5ad(0x224)],_0x34b0c1[_0x3fe5ad(0x163)],{'host':_0x220389[_0x3fe5ad(0x103)],'todo':_0x5c309c,'subagents':_0x83afb0,'access':_0x28fb29[_0x3fe5ad(0xd0)]??_0x3fe5ad(0x127),'mode':_0x141b8e,'sessionId':_0x38d3ab,'executionId':_0x587657,'signal':_0x335fbc,'codeMode':{'supportsImages':_0x462abe[_0x3fe5ad(0x1e8)][_0x3fe5ad(0x14f)](_0x3fe5ad(0x125)),'tools':_0x2c9a95,'invoke':async(_0x5dc1e8,_0x5459fc)=>{const _0x120301=_0x3fe5ad,_0x45c16e=await _0x1243fc({'type':_0x120301(0x160),'name':_0x5dc1e8[_0x120301(0x257)],'arguments':_0x5dc1e8[_0x120301(0x224)],'callId':_0x5dc1e8[_0x120301(0x163)]??randomUUID()},_0x5459fc);if(_0x45c16e[_0x120301(0x1d9)])throw _0x45c16e[_0x120301(0x151)];return{..._0x45c16e[_0x120301(0x1c2)],'content':_0x45c16e[_0x120301(0x1f0)]};}},'emit':_0x5aa360,'skills':_0x458693?.[_0x3fe5ad(0xc9)]??new Map(),..._0x462abe[_0x3fe5ad(0x218)]===undefined?{}:{'imageGeneration':{'configuration':{'imageGeneration':_0x462abe[_0x3fe5ad(0x218)],'credentialProvider':_0x462abe[_0x3fe5ad(0x218)][_0x3fe5ad(0x106)]},'sessionDirectory':_0x484e03[_0x3fe5ad(0x1fa)](_0x38d3ab),..._0x37fecc===undefined?{}:{'displayDirectory':_0x37fecc},'recentImages':currentExecutionImages(_0x3ffea7,_0x15d35c)}}}),_0x2ca1a2=boundedModelToolOutput(_0x541a34[_0x3fe5ad(0x1f0)]),_0x586bda=structuredToolEventData(_0x34b0c1[_0x3fe5ad(0x257)],_0x541a34[_0x3fe5ad(0x13d)]),_0x1ffb25=structuredToolArtifacts(_0x34b0c1[_0x3fe5ad(0x257)],_0x541a34[_0x3fe5ad(0x13f)]);return await _0x5aa360({'type':_0x3fe5ad(0x19f),'toolName':_0x34b0c1[_0x3fe5ad(0x257)],'callId':_0x34b0c1[_0x3fe5ad(0x163)],'summary':_0x541a34[_0x3fe5ad(0x1f0)][_0x3fe5ad(0x243)](-0x1a5*-0x12+0x26fe+-0x4498,AGENT_EXECUTION_POLICY[_0x3fe5ad(0x1b5)]),'truncated':_0x541a34[_0x3fe5ad(0x110)]===!![]||_0x2ca1a2[_0x3fe5ad(0x110)],..._0x1ffb25===undefined?{}:{'artifacts':_0x1ffb25},..._0x586bda===undefined?{}:{'data':_0x586bda}}),{'call':_0x34b0c1,'output':_0x541a34,'content':_0x2ca1a2[_0x3fe5ad(0x1f0)],..._0x541a34[_0x3fe5ad(0x150)]?.[_0x3fe5ad(0x207)]?{'images':_0x541a34[_0x3fe5ad(0x150)]}:{},'failed':![]};}catch(_0x53231a){const _0x2c05eb=describeMarAgentError(_0x53231a,_0x3fe5ad(0x132));return await _0x5aa360({'type':_0x3fe5ad(0x170),'toolName':_0x34b0c1[_0x3fe5ad(0x257)],'callId':_0x34b0c1[_0x3fe5ad(0x163)],'code':_0x2c05eb[_0x3fe5ad(0x253)],'message':_0x2c05eb[_0x3fe5ad(0x156)]}),{'call':_0x34b0c1,'content':JSON[_0x3fe5ad(0x1b8)]({'error':_0x2c05eb[_0x3fe5ad(0x253)],'message':_0x2c05eb[_0x3fe5ad(0x156)],..._0x53231a instanceof MarAgentError&&_0x53231a[_0x3fe5ad(0x1cb)]?{'retryable':!![]}:{}}),'failed':!![],'error':_0x53231a};}},_0x1cb4c5=await scheduleToolCallBatch(_0x1135cf,_0x2c9a95,_0x1243fc);for(const _0x44e84f of _0x1cb4c5){if(_0x35bac4(0x150)in _0x44e84f&&_0x44e84f[_0x35bac4(0x150)]?.[_0x35bac4(0x207)])_0x15d35c[_0x35bac4(0x1d5)](..._0x44e84f[_0x35bac4(0x150)][_0x35bac4(0x23c)](_0x380b12=>({'mimeType':_0x380b12[_0x35bac4(0x195)],'data':Buffer[_0x35bac4(0x19d)](_0x380b12[_0x35bac4(0x104)],_0x35bac4(0x1d2))})));const _0x2f3998={'role':_0x35bac4(0x1ef),'callId':_0x44e84f[_0x35bac4(0x180)][_0x35bac4(0x163)],'content':_0x44e84f[_0x35bac4(0x1f0)],..._0x35bac4(0x150)in _0x44e84f&&_0x44e84f[_0x35bac4(0x150)]?.[_0x35bac4(0x207)]?{'images':_0x44e84f[_0x35bac4(0x150)]}:{}};_0x2f2081[_0x35bac4(0x1d5)](_0x2f3998),await _0x484e03[_0x35bac4(0x20d)](_0x38d3ab,{'type':_0x35bac4(0xe7),'payload':{'role':_0x2f3998[_0x35bac4(0x246)],'callId':_0x2f3998[_0x35bac4(0x163)],'content':_0x2f3998[_0x35bac4(0x1f0)]},'executionId':_0x587657,'turnId':_0x3e29c8});}if(_0x3f3359)_0x1922d7[_0x35bac4(0x229)]=-0x937+0x4*-0x463+0x1*0x1ac3;_0x84cc60?.[_0x35bac4(0x10e)](_0x2d7650);if(_0x105a2d[_0x35bac4(0x19a)][_0x35bac4(0x227)]){const _0x598094=_0x1cb4c5[_0x35bac4(0x17f)](_0x536bb1=>_0x536bb1[_0x35bac4(0x1d9)])?.[_0x35bac4(0x151)];throw _0x598094??new MarAgentError(_0x35bac4(0x18a),_0x35bac4(0x178));}if(_0x2fbe75===_0x35bac4(0x1ab)&&!_0x3f3359){const _0x5c1835=_0x141b8e===_0x35bac4(0x145)?_0x12b43a[_0x35bac4(0x142)]():'';if(_0x141b8e===_0x35bac4(0x145)&&!_0x5c1835)throw new MarAgentError(_0x35bac4(0x17a),_0x35bac4(0x148));if(_0x141b8e!==_0x35bac4(0x145)&&!_0x12b43a[_0x35bac4(0x142)]())throw new MarAgentError(_0x35bac4(0x188),_0x35bac4(0x112));_0x328a7b&&(_0x328a7b[_0x35bac4(0x19a)][_0x35bac4(0x226)](),await _0x328a7b[_0x35bac4(0xe2)]());if(_0x141b8e===_0x35bac4(0x145))await _0x484e03[_0x35bac4(0x145)](_0x38d3ab,{'summary':_0x5c1835,'replacementHistory':buildCompactedHistory(_0x5c1835,_0x5853b2,_0xdb8027),'modelId':_0x462abe['id'],'executionId':_0x587657,'turnId':_0x3e29c8});if(_0x141b8e===_0x35bac4(0x145)&&_0x346a03!==undefined)await _0x5aa360({'type':_0x35bac4(0x1de),'compactionId':_0x346a03});return await _0x582786(),await _0x5aa360({'type':_0x35bac4(0xbc)}),{'executionId':_0x587657,'status':_0x35bac4(0x1ab),'finalAnswer':_0x141b8e===_0x35bac4(0x145)?'':_0x12b43a};}if(!_0x3f3359&&_0x2fbe75!==_0x35bac4(0x1f8))throw new MarAgentError(_0x35bac4(0x188),_0x35bac4(0xc2));}}catch(_0x398515){await _0x582786();if(_0x105a2d[_0x35bac4(0x19a)][_0x35bac4(0x227)])return await _0x5aa360({'type':_0x35bac4(0x1e6)}),{'executionId':_0x587657,'status':_0x35bac4(0x210),'finalAnswer':_0x141b8e===_0x35bac4(0x145)?'':_0x12b43a};const _0x2862fa=modelAttemptFailureDiagnostic(describeMarAgentError(_0x398515,_0x35bac4(0xef)),_0x41d0b2);return await _0x5aa360({'type':_0x35bac4(0x1c6),..._0x2862fa}),{'executionId':_0x587657,'status':_0x35bac4(0x1d9),'finalAnswer':_0x141b8e===_0x35bac4(0x145)?'':_0x12b43a,'errorCode':_0x2862fa[_0x35bac4(0x253)],'errorMessage':_0x2862fa[_0x35bac4(0x156)]};}finally{await _0x328a7b?.[_0x35bac4(0xe2)](),await _0x2f7ebd?.[_0x35bac4(0x15d)]()[_0x35bac4(0x1f4)](()=>undefined);if(_0x5d1967!==undefined&&_0x5d1967!==_0x2ae2e7)_0x52b2c0[_0x35bac4(0xd2)](_0x5d1967);await closeModelAdapters(_0x52b2c0)[_0x35bac4(0x1f4)](()=>undefined),await _0x42e876?.(),_0x480e7a[_0x35bac4(0x1ed)](_0x38d3ab+':'+_0x587657),_0x276d2e[_0x35bac4(0x15d)]();}})()),_0x2820fb=_0x38d3ab+':'+_0x587657;return _0x812830[_0x221d40(0x259)](_0x2820fb,_0x2f0eb3),void _0x2f0eb3[_0x221d40(0x179)](()=>_0x812830[_0x221d40(0x1ed)](_0x2820fb),()=>_0x812830[_0x221d40(0x1ed)](_0x2820fb)),{'executionId':_0x587657,[Symbol[_0x221d40(0x1c9)]]:()=>_0x276d2e[Symbol[_0x221d40(0x1c9)]](),'result':()=>{const _0xebee4d=_0x221d40;return _0x276d2e[_0xebee4d(0x12c)](),_0x2f0eb3;},'cancel':()=>_0x105a2d[_0x221d40(0x16a)](new MarAgentError(_0x221d40(0x250),_0x221d40(0x12f)))};};return{'id':_0x38d3ab,'run':_0x3d1329=>_0xc2965f(_0x569754(0x1e2),_0x3d1329),'plan':_0x5f5ab9=>_0xc2965f(_0x569754(0x20c),_0x5f5ab9),'compact':(_0x4dff97={})=>_0xc2965f(_0x569754(0x145),{'prompt':_0x4dff97[_0x569754(0x1b7)]??DEFAULT_COMPACTION_FOCUS,..._0x4dff97}),'cancel':async _0x293562=>_0x480e7a[_0x569754(0x15a)](_0x38d3ab+':'+_0x293562)?.[_0x569754(0x16a)]()};};return{'createSession':async _0x1af447=>_0x111da6((await _0x484e03[_0x1f9936(0x158)](_0x1af447))['id'],_0x1af447[_0x1f9936(0x249)]),'openSession':_0x1fb7b2=>_0x111da6(_0x1fb7b2),'listSessions':_0x4d00fa=>_0x484e03[_0x1f9936(0x1af)](_0x4d00fa),'reconfigureModels':async _0x108e24=>{const _0x12a89d=_0x1f9936;if(_0x5b236b)throw new MarAgentError(_0x12a89d(0x17d),_0x12a89d(0x1e1));if(_0x480e7a[_0x12a89d(0x192)]>0x6c9+0x177+-0x840||_0x71f507)throw new MarAgentError(_0x12a89d(0xec),_0x12a89d(0xfb));const _0x3b492d=resolveAgentModels(_0x108e24[_0x12a89d(0x1b9)],_0x108e24[_0x12a89d(0x1f2)]),_0x42cea6=[..._0x1393cb[_0x12a89d(0x1a9)]()][_0x12a89d(0xd1)](_0x46c1cb=>[..._0x46c1cb[_0x12a89d(0x235)][_0x12a89d(0x1a9)]()]);_0x71f507=!![];try{await closeModelAdapters(_0x42cea6);if(_0x5b236b)throw new MarAgentError(_0x12a89d(0x17d),_0x12a89d(0x1e1));_0x5ccdc5=_0x3b492d[_0x12a89d(0x1b9)],_0x1a488=_0x3b492d[_0x12a89d(0x1f2)];for(const _0x37b891 of _0x3b492d[_0x12a89d(0x16f)])_0x52a484[_0x12a89d(0xd2)](_0x37b891);for(const _0x21c0fd of _0x1393cb[_0x12a89d(0x1a9)]()){_0x21c0fd[_0x12a89d(0x12a)]=undefined,_0x21c0fd[_0x12a89d(0x235)][_0x12a89d(0x17e)]();}}finally{_0x71f507=![];}},'deleteSession':async _0x45d548=>{const _0x4d0c58=_0x1f9936,_0xb0232a=_0x45d548+':',_0x6d5017=[..._0x480e7a[_0x4d0c58(0x146)]()][_0x4d0c58(0xbb)](_0x57bd52=>_0x57bd52[_0x4d0c58(0x1b0)](_0xb0232a));for(const _0x2f8823 of _0x6d5017)_0x480e7a[_0x4d0c58(0x15a)](_0x2f8823)?.[_0x4d0c58(0x16a)]();const _0x58d436=_0x1393cb[_0x4d0c58(0x15a)](_0x45d548);_0x1393cb[_0x4d0c58(0x1ed)](_0x45d548),await _0x58d436?.[_0x4d0c58(0x154)]?.[_0x4d0c58(0xe2)](),await Promise[_0x4d0c58(0x221)](_0x6d5017[_0x4d0c58(0xd1)](_0xc4acab=>{const _0x438a68=_0x4d0c58,_0x4d342b=_0x812830[_0x438a68(0x15a)](_0xc4acab);return _0x4d342b===undefined?[]:[_0x4d342b];})),await closeModelAdapters(_0x58d436?.[_0x4d0c58(0x235)][_0x4d0c58(0x1a9)]()??[]),await _0x220389[_0x4d0c58(0x103)][_0x4d0c58(0xd8)]?.(_0x45d548),await _0x484e03[_0x4d0c58(0x1ed)](_0x45d548);},'dispose':async()=>{const _0x5d2040=_0x1f9936;if(_0x5b236b)return;_0x5b236b=!![];for(const _0x4f7994 of _0x480e7a[_0x5d2040(0x1a9)]())_0x4f7994[_0x5d2040(0x16a)]();await Promise[_0x5d2040(0x1fd)]([..._0x1393cb[_0x5d2040(0x1a9)]()][_0x5d2040(0x23c)](_0x473a5f=>_0x473a5f[_0x5d2040(0x154)]?.[_0x5d2040(0xe2)]()[_0x5d2040(0x1f4)](()=>undefined))),await Promise[_0x5d2040(0x221)]([..._0x812830[_0x5d2040(0x1a9)]()]),await closeModelAdapters([..._0x1393cb[_0x5d2040(0x1a9)]()][_0x5d2040(0xd1)](_0x4e6cdd=>[..._0x4e6cdd[_0x5d2040(0x235)][_0x5d2040(0x1a9)]()]));let _0x5d5409;const _0x281f89=await Promise[_0x5d2040(0x221)]([..._0x52a484][_0x5d2040(0x23c)](_0x31c1b0=>_0x31c1b0[_0x5d2040(0x15d)]()));_0x5d5409=_0x281f89[_0x5d2040(0x17f)](_0x4ef146=>_0x4ef146[_0x5d2040(0x184)]===_0x5d2040(0x135))?.[_0x5d2040(0x161)];try{await _0x220389[_0x5d2040(0x103)][_0x5d2040(0xe2)]();}catch(_0x28e6d1){_0x5d5409??=_0x28e6d1;}try{await _0x484e03[_0x5d2040(0x15d)]();}catch(_0x2ee1e0){_0x5d5409??=_0x2ee1e0;}if(_0x5d5409!==undefined)throw _0x5d5409;}};}function resolveAgentModels(_0x98e5d4,_0x29523d){const _0x5041c2=_0x1108,_0x5006e1=_0x98e5d4[_0x5041c2(0x23c)](_0x192659=>({..._0x192659,'defaultReasoningEffort':resolveModelDefaultReasoningEffort(_0x192659)})),_0x183a5e=new Set();for(const _0x160653 of _0x5006e1){if(_0x160653[_0x5041c2(0x24c)]===undefined===(_0x160653[_0x5041c2(0x106)]===undefined))throw new MarAgentError(_0x5041c2(0x1b1),_0x5041c2(0x201));validateImageGenerationConfiguration(_0x160653);if(_0x160653[_0x5041c2(0x1e3)]!==undefined&&(_0x160653[_0x5041c2(0x11c)]!==_0x5041c2(0x196)||![_0x5041c2(0x1fe),_0x5041c2(0x21e)][_0x5041c2(0x14f)](_0x160653[_0x5041c2(0x1e3)])))throw new MarAgentError(_0x5041c2(0x1b1),_0x5041c2(0x24e));if(_0x160653[_0x5041c2(0x106)]!==undefined)_0x183a5e[_0x5041c2(0xd2)](_0x160653[_0x5041c2(0x106)]);if(_0x160653[_0x5041c2(0x218)]!==undefined)_0x183a5e[_0x5041c2(0xd2)](_0x160653[_0x5041c2(0x218)][_0x5041c2(0x106)]);}const _0x414511=new Map(_0x5006e1[_0x5041c2(0xbb)](_0x41695e=>_0x41695e[_0x5041c2(0x1ce)])[_0x5041c2(0x23c)](_0x41cea5=>[_0x41cea5['id'],_0x41cea5]));if(_0x414511[_0x5041c2(0x192)]===-0x1*0xdaf+-0x9a7*0x1+0x1d*0xce)throw new MarAgentError(_0x5041c2(0x1b1),_0x5041c2(0x245));const _0x29bf86=_0x29523d??_0x414511[_0x5041c2(0x146)]()[_0x5041c2(0x1bb)]()[_0x5041c2(0x190)];if(!_0x414511[_0x5041c2(0x256)](_0x29bf86))throw new MarAgentError(_0x5041c2(0x1b1),_0x5041c2(0x203));return{'models':_0x414511,'defaultModelId':_0x29bf86,'credentialProviders':_0x183a5e};}function createModelTurnSession(_0x3c4343){const _0x18955f=_0x1108,_0x14563f=_0x3c4343[_0x18955f(0x1e4)]?.()??{'start':(_0x4e4fc0,_0x531993)=>_0x3c4343[_0x18955f(0x10d)](_0x4e4fc0,_0x531993),'close':async()=>undefined};return{async *'start'(_0x190426,_0x2fd98a){const _0x423f14=_0x18955f,_0x13aab0=_0x190426[_0x423f14(0x205)]?.[_0x423f14(0x229)];try{yield*_0x14563f[_0x423f14(0x10d)](_0x190426,_0x2fd98a);}finally{if(_0x190426[_0x423f14(0x205)]&&_0x190426[_0x423f14(0x205)][_0x423f14(0x229)]===_0x13aab0)_0x190426[_0x423f14(0x205)][_0x423f14(0x229)]++;}},'close':()=>_0x14563f[_0x18955f(0x15d)]()};}function modelAttemptFailureDiagnostic(_0x578b6d,_0x255add){const _0x5a55d8=_0x1108;if(_0x255add===undefined)return _0x578b6d;const _0x38ace7=_0x5a55d8(0x1db)+_0x255add[_0x5a55d8(0x229)]+_0x5a55d8(0x19e)+_0x255add[_0x5a55d8(0x1ca)]+_0x5a55d8(0x251),_0x275637=Math[_0x5a55d8(0x23b)](-0xc6f+-0x3c4*-0x1+-0x8ab*-0x1,0x222e+0x48f*0x4+-0x3082-[..._0x38ace7][_0x5a55d8(0x207)]);return{'code':_0x578b6d[_0x5a55d8(0x253)],'message':''+_0x38ace7+[..._0x578b6d[_0x5a55d8(0x156)]][_0x5a55d8(0x243)](-0x15f3*-0x1+0x21ba+-0x3*0x128f,_0x275637)[_0x5a55d8(0x1c3)]('')};}async function closeModelAdapters(_0x1a2bc6){const _0x4145cb=_0x1108;await Promise[_0x4145cb(0x1fd)]([...new Set(_0x1a2bc6)][_0x4145cb(0xd1)](_0x504ebd=>_0x504ebd[_0x4145cb(0x15d)]===undefined?[]:[_0x504ebd[_0x4145cb(0x15d)]()]));}function truncateUtf8(_0x105eeb,_0x33ee84){const _0x2eb915=_0x1108,_0x2a825d=Buffer[_0x2eb915(0x19d)](_0x105eeb);if(_0x2a825d[_0x2eb915(0x207)]<=_0x33ee84)return _0x105eeb;let _0x290a17=_0x33ee84;while(_0x290a17>-0x229*-0x11+-0x81*-0x2+0xd*-0x2e7&&(_0x2a825d[_0x290a17]&0xbf1+0x1230+-0x1d61)===0x22f3+-0x2674+-0x29*-0x19)_0x290a17--;return _0x2a825d[_0x2eb915(0x230)](-0x20e2+-0x404*-0x2+0x18da,_0x290a17)[_0x2eb915(0x18f)](_0x2eb915(0x1aa));}function publicModelUsage(_0x10970c){const {rolloutBudgetUnits:_0x2042c5,..._0x522186}=_0x10970c;return void _0x2042c5,_0x522186;}async function generateSessionTitle(_0x4c31b6,_0x4bd09c,_0x5573b3,_0x286393,_0x5f454){const _0x4ad001=_0x1108;let _0x4ffa1e='',_0xaa6ad6=0x1673*-0x1+-0x50*-0x3e+0x1*0x313;for(const _0x4a9058 of _0x4bd09c){if(_0xaa6ad6++>=-0x13c*0x1d+0x26c7+0xed)break;_0x4ffa1e+=_0x4a9058;}let _0x19e065='',_0x3534b6=![];const _0x5122a9=createModelTurnSession(_0x4c31b6);try{for await(const _0x127211 of _0x5122a9[_0x4ad001(0x10d)]({'retryState':{'attempts':0x0,'maxAttempts':0x1},'system':sessionTitlePrompt,'messages':[{'role':_0x4ad001(0x19b),'content':_0x4ffa1e}],'tools':[],'reasoningEffort':_0x5573b3,'onAttemptDiagnostic':_0x5f454},_0x286393)){if(_0x127211[_0x4ad001(0x131)]===_0x4ad001(0xdf))_0x19e065=_0x127211[_0x4ad001(0x1c1)];else{if(_0x127211[_0x4ad001(0x131)]===_0x4ad001(0x1ab))_0x3534b6=_0x127211[_0x4ad001(0x161)]===_0x4ad001(0x1ab);}}}finally{await _0x5122a9[_0x4ad001(0x15d)]();}if(!_0x3534b6)return undefined;const _0x2371a0=_0x19e065[_0x4ad001(0x11e)](/<think>[\s\S]*?<\/think>\s*/giu,'')[_0x4ad001(0x157)](/\r?\n/u)[_0x4ad001(0x23c)](_0x4437f4=>_0x4437f4[_0x4ad001(0x142)]())[_0x4ad001(0x17f)](Boolean);if(!_0x2371a0)return undefined;return[..._0x2371a0][_0x4ad001(0x243)](0x13c6+-0x18a4+0x4de,0xf*-0xc9+-0x994*-0x4+0x1a57*-0x1)[_0x4ad001(0x1c3)]('');}async function restoreMessages(_0x20b791,_0x3109d1,_0x117536,_0x1bb488){const _0x33f63d=_0x1108,_0x1ebc50=[];let _0x354601=[],_0x3d31f5=-0x2044+-0xb5d*0x1+-0x3*-0xe8b,_0x5b83b5,_0xa759f6;for(const _0x2fd9db of _0x117536){const _0x40bd7=_0x2fd9db[_0x33f63d(0x12d)],_0x5ce34f=compactSummaryFromCheckpoint(_0x2fd9db);if(_0x2fd9db[_0x33f63d(0x131)]===_0x33f63d(0x126))_0x5b83b5=modelIdFromPayload(_0x40bd7);else{if(_0x2fd9db[_0x33f63d(0x131)]===_0x33f63d(0x115)&&typeof _0x40bd7[_0x33f63d(0x1b7)]===_0x33f63d(0x191)){_0x354601[_0x33f63d(0x1d5)](_0x40bd7[_0x33f63d(0x1b7)]);let _0x35d752=[];if(_0x1bb488[_0x33f63d(0x1bc)])try{_0x35d752=await _0x20b791[_0x33f63d(0xde)](_0x3109d1,_0x40bd7[_0x33f63d(0x150)]);}catch(_0x587a2f){if(!(_0x587a2f instanceof MarAgentError)||_0x587a2f[_0x33f63d(0x253)]!==_0x33f63d(0x1f6))throw _0x587a2f;_0x3d31f5+=Array[_0x33f63d(0x1df)](_0x40bd7[_0x33f63d(0x150)])?_0x40bd7[_0x33f63d(0x150)][_0x33f63d(0x207)]:-0x1e9d+-0x128e+-0x2*-0x1896;}_0x1ebc50[_0x33f63d(0x1d5)]({'role':_0x33f63d(0x19b),'content':_0x40bd7[_0x33f63d(0x1b7)],..._0x35d752[_0x33f63d(0x207)]?{'images':_0x35d752}:{}});}else{if((_0x2fd9db[_0x33f63d(0x131)]===_0x33f63d(0x14a)||_0x2fd9db[_0x33f63d(0x131)]===_0x33f63d(0x10b))&&typeof _0x40bd7[_0x33f63d(0x1c1)]===_0x33f63d(0x191))_0x1ebc50[_0x33f63d(0x1d5)]({'role':_0x33f63d(0x199),'content':_0x40bd7[_0x33f63d(0x1c1)]});else{if(_0x5ce34f!==undefined){_0x5b83b5=modelIdFromPayload(_0x40bd7),_0xa759f6=restoreEnvironmentState({'version':0x1,'state':_0x40bd7[_0x33f63d(0x239)]});if(_0xa759f6)_0x1ebc50[_0x33f63d(0x1d5)](environmentContextUpdate(_0xa759f6));const _0x48de30=replacementHistoryFromCheckpoint(_0x2fd9db);_0x354601=_0x48de30?.[_0x33f63d(0xbb)](_0x3ce3a5=>_0x3ce3a5[_0x33f63d(0x1d3)]===_0x33f63d(0x20b))[_0x33f63d(0x23c)](_0x4fd975=>_0x4fd975[_0x33f63d(0x1f0)])??[],_0x1ebc50[_0x33f63d(0x1d5)](..._0x48de30?compactedHistoryMessages(_0x48de30):[{'role':_0x33f63d(0x19b),'content':continuationMessage(_0x5ce34f)}]);}else{if(_0x2fd9db[_0x33f63d(0x131)]===_0x33f63d(0xb2)){const _0x4502db=restoreEnvironmentState(_0x40bd7);if(_0x4502db){const _0x4a5171=environmentContextUpdate(_0x4502db,_0xa759f6);if(_0x4a5171)_0x1ebc50[_0x33f63d(0x1d5)](_0x4a5171);_0xa759f6=_0x4502db;}}else{if(_0x2fd9db[_0x33f63d(0x131)]===_0x33f63d(0xe7)){const _0x3ac81b=restoreModelContext(_0x40bd7,_0x5b83b5);if(_0x3ac81b)_0x1ebc50[_0x33f63d(0x1d5)](_0x3ac81b);}}}}}}}const _0x246b24=new Set(_0x1ebc50[_0x33f63d(0xbb)](_0x2b4dc1=>_0x2b4dc1[_0x33f63d(0x246)]===_0x33f63d(0x1ef))[_0x33f63d(0x23c)](_0x1a4795=>_0x1a4795[_0x33f63d(0x163)]));return{'environmentState':_0xa759f6,'userMessages':_0x354601,'messages':_0x1ebc50[_0x33f63d(0xbb)](_0x52038a=>{const _0x3e603a=_0x33f63d;if(_0x52038a[_0x3e603a(0x246)]===_0x3e603a(0x10a))return _0x246b24[_0x3e603a(0x256)](_0x52038a[_0x3e603a(0x163)]);if(_0x52038a[_0x3e603a(0x246)]!==_0x3e603a(0x24d)||_0x52038a[_0x3e603a(0x24d)]!==_0x3e603a(0x196))return!![];const _0x3c5c3f=_0x52038a[_0x3e603a(0x1d6)];if(_0x3c5c3f[_0x3e603a(0x131)]!==_0x3e603a(0x1e5)&&_0x3c5c3f[_0x3e603a(0x131)]!==_0x3e603a(0x172))return!![];return typeof _0x3c5c3f[_0x3e603a(0xdb)]!==_0x3e603a(0x191)||_0x246b24[_0x3e603a(0x256)](_0x3c5c3f[_0x3e603a(0xdb)]);}),'ignoredImages':_0x3d31f5};}function currentExecutionImages(_0x2556f4,_0x4cb390){const _0x12b7e8=_0x1108;return[...(_0x2556f4??[])[_0x12b7e8(0x23c)](_0x49a09f=>({'mimeType':_0x49a09f[_0x12b7e8(0x195)],'data':Buffer[_0x12b7e8(0x19d)](_0x49a09f[_0x12b7e8(0x104)],_0x12b7e8(0x1d2))})),..._0x4cb390][_0x12b7e8(0x243)](-(-0x1d6d+0xf9*0x1+-0x1*-0x1c79))[_0x12b7e8(0x23c)](_0x1e8a7d=>({'mimeType':_0x1e8a7d[_0x12b7e8(0x195)],'data':Buffer[_0x12b7e8(0x19d)](_0x1e8a7d[_0x12b7e8(0x13d)])}));}function latestContextInputTokens(_0x1cdb2b,_0x57ec64){const _0x241302=_0x1108;let _0x2b9686,_0x1359f2=_0x57ec64;for(const _0x5b3967 of _0x1cdb2b){const _0x4918e3=_0x5b3967[_0x241302(0x12d)];if(compactSummaryFromCheckpoint(_0x5b3967)!==undefined){_0x2b9686=undefined,_0x1359f2=modelIdFromPayload(_0x4918e3);continue;}if(_0x5b3967[_0x241302(0x131)]===_0x241302(0x126)){_0x1359f2=modelIdFromPayload(_0x4918e3);if(_0x1359f2!==_0x57ec64)_0x2b9686=undefined;continue;}if(_0x4918e3[_0x241302(0x131)]===_0x241302(0x16c)&&_0x1359f2===_0x57ec64){const _0x493592=_0x4918e3[_0x241302(0x181)]??_0x4918e3[_0x241302(0x119)];if(typeof _0x493592===_0x241302(0xf1)&&Number[_0x241302(0x1ad)](_0x493592)&&_0x493592>=-0x5*-0x16d+-0xeb5+0x1*0x794)_0x2b9686=_0x493592;}}return _0x2b9686;}const PROVIDER_CONTEXT_OVERFLOW_CODES=new Set([_0x2f8e68(0x1eb),_0x2f8e68(0x23d),_0x2f8e68(0xc7),_0x2f8e68(0x122),_0x2f8e68(0x15b),_0x2f8e68(0x107),_0x2f8e68(0x14c)]),PROVIDER_CONTEXT_OVERFLOW_PATTERNS=[/prompt is too long/iu,/request_too_large/iu,/input is too long for requested model/iu,/exceeds (?:the )?(?:model'?s )?(?:maximum )?context (?:length|window)/iu,/input token count.*exceeds the maximum/iu,/tokens in request more than max tokens allowed/iu,/maximum prompt length is \d+/iu,/reduce the length of the messages/iu,/maximum context length is \d+ tokens/iu,/exceeds (?:the )?maximum allowed input length/iu,/greater than the context length/iu,/context window exceeds limit/iu,/exceeded model token limit/iu,/context[_ ]length[_ ]exceeded/iu,/request entity too large/iu,/input length.*exceeds.*context length/iu,/prompt too long; exceeded (?:max )?context length/iu,/model_context_window_exceeded/iu,/too many tokens/iu,/token limit exceeded/iu],PROVIDER_CONTEXT_OVERFLOW_EXCLUSIONS=[/^(?:[^:]+: )?(?:throttling error|service unavailable):/iu,/rate limit/iu,/too many requests/iu];function isProviderContextOverflow(_0x2f9b34){const _0x1bbae6=_0x2f8e68;if(!(_0x2f9b34 instanceof MarAgentError))return![];const _0x23ddd3=_0x2f9b34[_0x1bbae6(0x253)][_0x1bbae6(0x142)]()[_0x1bbae6(0x102)]();if(PROVIDER_CONTEXT_OVERFLOW_CODES[_0x1bbae6(0x256)](_0x23ddd3))return!![];if(_0x2f9b34[_0x1bbae6(0x1ff)]?.[_0x1bbae6(0x184)]===-0x236d*-0x1+0xcdd+-0x2ead)return!![];const _0x619f61=_0x2f9b34[_0x1bbae6(0x156)];if(_0x2f9b34[_0x1bbae6(0x1ff)]?.[_0x1bbae6(0x184)]===0x5*0x33f+0x1056+-0x1f00&&/supports only [\d,.]+[km]? context/iu[_0x1bbae6(0x173)](_0x619f61))return!![];if(_0x23ddd3!==_0x1bbae6(0x136)&&_0x23ddd3!==_0x1bbae6(0x220))return![];return!PROVIDER_CONTEXT_OVERFLOW_EXCLUSIONS[_0x1bbae6(0x22c)](_0x57fb06=>_0x57fb06[_0x1bbae6(0x173)](_0x619f61))&&PROVIDER_CONTEXT_OVERFLOW_PATTERNS[_0x1bbae6(0x22c)](_0x5657c1=>_0x5657c1[_0x1bbae6(0x173)](_0x619f61));}const MAX_MODEL_CONTEXT_BYTES=(-0x1*-0x1363+-0x1981+0xa1e)*(-0x277*0x3+0x7*0x45e+-0x132d*0x1);function restoreModelContext(_0x513463,_0x3f321a){const _0xcc358e=_0x2f8e68;if(!_0x513463||typeof _0x513463!==_0xcc358e(0x22f)||Array[_0xcc358e(0x1df)](_0x513463))return undefined;const _0xfda2dd=_0x513463[_0xcc358e(0x246)]===_0xcc358e(0x24d)&&_0x513463[_0xcc358e(0x24d)]===_0xcc358e(0x196)&&_0x513463[_0xcc358e(0x1d6)]&&typeof _0x513463[_0xcc358e(0x1d6)]===_0xcc358e(0x22f)&&!Array[_0xcc358e(0x1df)](_0x513463[_0xcc358e(0x1d6)])?_0x513463[_0xcc358e(0x1d6)]:undefined,_0x2930c0=_0x513463[_0xcc358e(0x246)]===_0xcc358e(0x10a)?_0x513463[_0xcc358e(0x257)]:_0xfda2dd?.[_0xcc358e(0x131)]===_0xcc358e(0x172)?_0xfda2dd[_0xcc358e(0x257)]:undefined,_0x3a984b=_0x2930c0===_0xcc358e(0x11a)?TOOL_EXECUTION_LIMITS[_0xcc358e(0x219)]:_0x2930c0===_0xcc358e(0xca)?TOOL_EXECUTION_LIMITS[_0xcc358e(0xe3)]:undefined,_0x43ce34=_0x3a984b===undefined?MAX_MODEL_CONTEXT_BYTES:_0x3a984b*(-0x1f46+0x443+0x3*0x903)+(0xc70+-0x5ac+0x93c);if(Buffer[_0xcc358e(0x24b)](JSON[_0xcc358e(0x1b8)](_0x513463))>_0x43ce34)return undefined;if(_0x513463[_0xcc358e(0x246)]===_0xcc358e(0x1ef)&&typeof _0x513463[_0xcc358e(0x1f0)]===_0xcc358e(0x191)&&typeof _0x513463[_0xcc358e(0x163)]===_0xcc358e(0x191))return{'role':_0xcc358e(0x1ef),'content':_0x513463[_0xcc358e(0x1f0)],'callId':_0x513463[_0xcc358e(0x163)]};if(_0x513463[_0xcc358e(0x246)]===_0xcc358e(0x10a)&&typeof _0x513463[_0xcc358e(0x163)]===_0xcc358e(0x191)&&typeof _0x513463[_0xcc358e(0x257)]===_0xcc358e(0x191))return{'role':_0xcc358e(0x10a),'content':'','callId':_0x513463[_0xcc358e(0x163)],'name':_0x513463[_0xcc358e(0x257)],'arguments':_0x513463[_0xcc358e(0x224)],..._0x513463[_0xcc358e(0x1f1)]===_0xcc358e(0x144)||_0x513463[_0xcc358e(0x1f1)]===_0xcc358e(0xb5)?{'inputMode':_0x513463[_0xcc358e(0x1f1)]}:{}};if(_0x513463[_0xcc358e(0x246)]===_0xcc358e(0x24d)&&_0x513463[_0xcc358e(0x24d)]===_0xcc358e(0x1a1)){const _0xc516d8=anthropicThinkingBlock(_0x513463[_0xcc358e(0x1d6)]),_0x5f35b4=modelIdFromPayload(_0x513463,_0xcc358e(0x138));return _0xc516d8&&_0x5f35b4?{'role':_0xcc358e(0x24d),'provider':_0xcc358e(0x1a1),'providerModelId':_0x5f35b4,'content':'','item':_0xc516d8}:undefined;}if(_0x513463[_0xcc358e(0x246)]===_0xcc358e(0x24d)&&_0x513463[_0xcc358e(0x24d)]===_0xcc358e(0x196)&&_0x513463[_0xcc358e(0x1d6)]!==null&&typeof _0x513463[_0xcc358e(0x1d6)]===_0xcc358e(0x22f)&&!Array[_0xcc358e(0x1df)](_0x513463[_0xcc358e(0x1d6)])){const _0xfd6d23=modelIdFromPayload(_0x513463,_0xcc358e(0x138))??_0x3f321a;return{'role':_0xcc358e(0x24d),'content':'','provider':_0xcc358e(0x196),..._0xfd6d23===undefined?{}:{'providerModelId':_0xfd6d23},'item':_0x513463[_0xcc358e(0x1d6)]};}return undefined;}function modelIdFromPayload(_0x586644,_0x1cd29f=_0x2f8e68(0x1c4)){const _0x40cbd9=_0x2f8e68,_0x58329b=_0x586644[_0x1cd29f];return typeof _0x58329b===_0x40cbd9(0x191)&&_0x58329b[_0x40cbd9(0x207)]>-0x1*0x446+-0x754+0xb9a?_0x58329b:undefined;}function insertContextualInstructions(_0xc116e3,_0x51e7d3,_0x1e71d4,_0x3a0f6a){const _0x1d2552=_0x2f8e68;if(_0x51e7d3===undefined)return[..._0xc116e3];const _0x1e4bb4=Math[_0x1d2552(0x23b)](-0x4*0x263+-0x1*-0x164f+0xcc3*-0x1,Math[_0x1d2552(0x214)](_0x51e7d3,_0xc116e3[_0x1d2552(0x207)])),_0x5006e5=[];if(_0x1e71d4!==undefined)_0x5006e5[_0x1d2552(0x1d5)]({'role':_0x1d2552(0x19b),'content':_0x1e71d4});const _0xd9c676=[..._0xc116e3[_0x1d2552(0x243)](0x4c0+-0xa95+0x5d5,_0x1e4bb4),..._0x5006e5,..._0xc116e3[_0x1d2552(0x243)](_0x1e4bb4)];if(_0x3a0f6a!==undefined)_0xd9c676[_0x1d2552(0xee)](_0x1e4bb4+_0x5006e5[_0x1d2552(0x207)],-0x1*-0x9c5+-0x259+-0xa*0xbe,{'role':_0x1d2552(0x19b),'content':_0x3a0f6a,'contextKind':_0x1d2552(0x239)});return _0xd9c676;}function estimatedRequestTokens(_0x5d9107,_0x2cf35d,_0x163c19,_0x465ae9){const _0x55d685=_0x2f8e68,_0x1693dd=_0x2cf35d[_0x55d685(0x16b)]((_0x371672,_0x148a0d)=>_0x371672+(_0x148a0d[_0x55d685(0x150)]?.[_0x55d685(0x207)]??0x115*-0x22+-0x2*-0x42b+0x1*0x1c74),_0x465ae9?.[_0x55d685(0x207)]??0x1500+0xd30+-0x2230),_0x331795=_0x2cf35d[_0x55d685(0x23c)](_0x1c93b2=>{const _0x276ebd=_0x55d685,_0x2c6fb8={..._0x1c93b2};return delete _0x2c6fb8[_0x276ebd(0x150)],_0x2c6fb8;});return countModelTokens(''+_0x5d9107+stableJson(_0x331795)+stableJson(_0x163c19))+_0x1693dd*AGENT_EXECUTION_POLICY[_0x55d685(0x14e)];}function boundedModelToolOutput(_0x1f8d0e){const _0x7ab5c6=_0x2f8e68,_0x3714f5=truncateModelText(_0x1f8d0e,AGENT_EXECUTION_POLICY[_0x7ab5c6(0x149)]);return{'content':_0x3714f5[_0x7ab5c6(0x1f0)],'truncated':_0x3714f5[_0x7ab5c6(0x110)]};}function stableJson(_0x3061c6){const _0x191498=_0x2f8e68;if(Array[_0x191498(0x1df)](_0x3061c6))return'['+_0x3061c6[_0x191498(0x23c)](stableJson)[_0x191498(0x1c3)](',')+']';if(_0x3061c6!==null&&typeof _0x3061c6===_0x191498(0x22f))return'{'+Object[_0x191498(0x200)](_0x3061c6)[_0x191498(0xda)](([_0x284b20],[_0x470dba])=>_0x284b20[_0x191498(0xf2)](_0x470dba))[_0x191498(0x23c)](([_0x16ef7c,_0x465719])=>JSON[_0x191498(0x1b8)](_0x16ef7c)+':'+stableJson(_0x465719))[_0x191498(0x1c3)](',')+'}';return JSON[_0x191498(0x1b8)](_0x3061c6)??_0x191498(0x14d);}function structuredToolEventData(_0x348711,_0x42c8c1){const _0x97d329=_0x2f8e68;if(!isRecord(_0x42c8c1))return undefined;if((_0x348711===_0x97d329(0x133)||_0x348711===_0x97d329(0x1a3)||_0x348711===_0x97d329(0x222))&&isSubagentTaskSnapshot(_0x42c8c1))return _0x42c8c1;if(_0x348711===_0x97d329(0x1e9)&&typeof _0x42c8c1[_0x97d329(0x1b3)]===_0x97d329(0x191)&&(_0x42c8c1[_0x97d329(0x195)]===_0x97d329(0x155)||_0x42c8c1[_0x97d329(0x195)]===_0x97d329(0xf0)||_0x42c8c1[_0x97d329(0x195)]===_0x97d329(0x206))&&isNonnegativeInteger(_0x42c8c1[_0x97d329(0x134)])&&typeof _0x42c8c1[_0x97d329(0x182)]===_0x97d329(0x191)&&/^[a-f0-9]{64}$/u[_0x97d329(0x173)](_0x42c8c1[_0x97d329(0x182)]))return _0x42c8c1;if(_0x348711===_0x97d329(0x1c8)&&(_0x42c8c1[_0x97d329(0x184)]===_0x97d329(0x15c)||_0x42c8c1[_0x97d329(0x184)]===_0x97d329(0x1ab)||_0x42c8c1[_0x97d329(0x184)]===_0x97d329(0x210))&&typeof _0x42c8c1[_0x97d329(0x241)]===_0x97d329(0x191)&&typeof _0x42c8c1[_0x97d329(0x15e)]===_0x97d329(0x191)&&typeof _0x42c8c1[_0x97d329(0x110)]===_0x97d329(0x1c0)&&(_0x42c8c1[_0x97d329(0x10c)]===undefined||typeof _0x42c8c1[_0x97d329(0x10c)]===_0x97d329(0x191))&&(_0x42c8c1[_0x97d329(0x258)]===undefined||_0x42c8c1[_0x97d329(0x258)]===null||typeof _0x42c8c1[_0x97d329(0x258)]===_0x97d329(0xf1)&&Number[_0x97d329(0x1cd)](_0x42c8c1[_0x97d329(0x258)]))&&isNonnegativeInteger(_0x42c8c1[_0x97d329(0x1c7)])&&isNonnegativeInteger(_0x42c8c1[_0x97d329(0xb8)])&&isNonnegativeInteger(_0x42c8c1[_0x97d329(0x168)])&&isNonnegativeInteger(_0x42c8c1[_0x97d329(0x1e0)]))return _0x42c8c1;if(_0x348711===_0x97d329(0xca)&&Array[_0x97d329(0x1df)](_0x42c8c1[_0x97d329(0x22b)])&&_0x42c8c1[_0x97d329(0x22b)][_0x97d329(0xcf)](_0x174e94=>isRecord(_0x174e94)&&typeof _0x174e94[_0x97d329(0x1b3)]===_0x97d329(0x191)&&_0x174e94[_0x97d329(0x1b3)][_0x97d329(0x207)]>0xd4b+-0x23b9+-0x63*-0x3a&&(_0x174e94[_0x97d329(0x228)]===undefined||typeof _0x174e94[_0x97d329(0x228)]===_0x97d329(0x191))&&(_0x174e94[_0x97d329(0x20f)]===_0x97d329(0xb3)||_0x174e94[_0x97d329(0x20f)]===_0x97d329(0xd6)||_0x174e94[_0x97d329(0x20f)]===_0x97d329(0x1d4)||_0x174e94[_0x97d329(0x20f)]===_0x97d329(0x1d0))&&isNonnegativeInteger(_0x174e94[_0x97d329(0x162)])&&isNonnegativeInteger(_0x174e94[_0x97d329(0x120)]))&&isRecord(_0x42c8c1[_0x97d329(0x12b)])&&isNonnegativeInteger(_0x42c8c1[_0x97d329(0x12b)][_0x97d329(0x22b)])&&isNonnegativeInteger(_0x42c8c1[_0x97d329(0x12b)][_0x97d329(0x162)])&&isNonnegativeInteger(_0x42c8c1[_0x97d329(0x12b)][_0x97d329(0x120)]))return _0x42c8c1;return undefined;}function structuredToolArtifacts(_0x3dd860,_0x3cd919){const _0x58de92=_0x2f8e68;if(_0x3cd919===undefined||![_0x58de92(0x211),_0x58de92(0x177)][_0x58de92(0x14f)](_0x3dd860))return undefined;if(_0x3cd919[_0x58de92(0x207)]!==-0x258d+0x2423+0x16b||_0x3cd919[_0x58de92(0x22c)](_0x380713=>_0x380713[_0x58de92(0x1d3)]!==_0x58de92(0x216)||_0x380713[_0x58de92(0x195)]!==_0x58de92(0x155)||typeof _0x380713[_0x58de92(0x257)]!==_0x58de92(0x191)||_0x380713[_0x58de92(0x257)][_0x58de92(0x207)]===-0x147e*0x1+-0x227c+-0x1b7d*-0x2||typeof _0x380713[_0x58de92(0x22a)]!==_0x58de92(0x191)||!/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}\.png$/u[_0x58de92(0x173)](_0x380713[_0x58de92(0x22a)])||!isNonnegativeInteger(_0x380713[_0x58de92(0x109)])||typeof _0x380713[_0x58de92(0x182)]!==_0x58de92(0x191)||!/^[a-f0-9]{64}$/u[_0x58de92(0x173)](_0x380713[_0x58de92(0x182)])))throw new MarAgentError(_0x58de92(0x147),_0x58de92(0x223));return _0x3cd919[_0x58de92(0x23c)](_0x183ce8=>({..._0x183ce8}));}function eventForPersistence(_0x549528){const _0x4edd76=_0x2f8e68;if(_0x549528[_0x4edd76(0x131)]===_0x4edd76(0x130)||_0x549528[_0x4edd76(0x131)]===_0x4edd76(0xe8))return undefined;if(_0x549528[_0x4edd76(0x131)]!==_0x4edd76(0x19f)||_0x549528[_0x4edd76(0xb9)]!==_0x4edd76(0x1c8)||!_0x549528[_0x4edd76(0x13d)])return _0x549528;const _0x49e93c=Object[_0x4edd76(0x124)](Object[_0x4edd76(0x200)](_0x549528[_0x4edd76(0x13d)])[_0x4edd76(0xbb)](([_0x418bde])=>_0x418bde!==_0x4edd76(0x241)&&_0x418bde!==_0x4edd76(0x15e)));return{..._0x549528,'data':_0x49e93c};}function validateImageGenerationConfiguration(_0x4ae354){const _0x2495fc=_0x2f8e68,_0x30c5dc=_0x4ae354[_0x2495fc(0x218)];if(_0x30c5dc===undefined)return;let _0x9d77c,_0x1c57e6;try{_0x9d77c=new URL(_0x30c5dc[_0x2495fc(0x209)]),_0x1c57e6=new URL(_0x30c5dc[_0x2495fc(0x16e)]);}catch{return invalidImageGenerationConfiguration();}if(_0x30c5dc[_0x2495fc(0x24d)]!==undefined&&(_0x30c5dc[_0x2495fc(0x24d)][_0x2495fc(0x142)]()[_0x2495fc(0x207)]===-0x3b2+0x7b0+-0x3fe||_0x30c5dc[_0x2495fc(0x24d)][_0x2495fc(0x207)]>0x4d3*0x3+0x3c8+-0x1201)||_0x30c5dc[_0x2495fc(0x106)]===undefined||_0x30c5dc[_0x2495fc(0x169)][_0x2495fc(0x142)]()[_0x2495fc(0x207)]===0x1219+-0x15*0x45+0x638*-0x2||_0x30c5dc[_0x2495fc(0x169)][_0x2495fc(0x207)]>0x611*-0x1+-0x21*0xf2+0x2643||_0x30c5dc[_0x2495fc(0xf5)]!==_0x2495fc(0x212)&&_0x30c5dc[_0x2495fc(0xf5)]!=='2'||_0x9d77c[_0x2495fc(0x237)]!==_0x1c57e6[_0x2495fc(0x237)]||!isAllowedImageGenerationEndpoint(_0x9d77c)||!isAllowedImageGenerationEndpoint(_0x1c57e6))invalidImageGenerationConfiguration();}function normalizeGeneratedImageDisplayDirectory(_0x38e201){const _0x3be794=_0x2f8e68;if(_0x38e201===undefined)return undefined;const _0x4121f2=posix[_0x3be794(0x1ac)](_0x38e201[_0x3be794(0x240)]('\x5c','/'))[_0x3be794(0x11e)](/\/+$/u,'');if(!_0x4121f2[_0x3be794(0x1b0)]('/')||_0x4121f2==='/'||_0x4121f2[_0x3be794(0x207)]>0x5ad*-0x5+-0x87a+0x34db||_0x4121f2[_0x3be794(0x14f)]('\x00'))throw new MarAgentError(_0x3be794(0xd7),_0x3be794(0x244));return _0x4121f2;}function isAllowedImageGenerationEndpoint(_0x11237e){const _0x38d262=_0x2f8e68,_0x20f200=_0x11237e[_0x38d262(0xf9)]===_0x38d262(0x1a7)||_0x11237e[_0x38d262(0xf9)]===_0x38d262(0x204)||_0x11237e[_0x38d262(0xf9)]===_0x38d262(0x101);return _0x11237e[_0x38d262(0x17b)][_0x38d262(0x207)]===0xbda+0x1*-0x1e33+0x29f*0x7&&_0x11237e[_0x38d262(0x1f9)][_0x38d262(0x207)]===0x220f*-0x1+0x9de+0x1831&&_0x11237e[_0x38d262(0x1dd)][_0x38d262(0x207)]===0x1*-0xbd5+-0x2058+0x2c2d&&_0x11237e[_0x38d262(0x1ae)][_0x38d262(0x207)]===-0x2*0xbaa+-0x22c7+0x3a1b&&(_0x11237e[_0x38d262(0x11c)]===_0x38d262(0x248)||_0x11237e[_0x38d262(0x11c)]===_0x38d262(0xc1)&&_0x20f200);}function invalidImageGenerationConfiguration(){const _0xcb915a=_0x2f8e68;throw new MarAgentError(_0xcb915a(0x1b1),_0xcb915a(0x105));}function isRecord(_0x47e367){const _0x154a50=_0x2f8e68;return _0x47e367!==null&&typeof _0x47e367===_0x154a50(0x22f)&&!Array[_0x154a50(0x1df)](_0x47e367);}function isSubagentTaskSnapshot(_0x3354e1){const _0x3aabf4=_0x2f8e68;return typeof _0x3354e1[_0x3aabf4(0xb1)]===_0x3aabf4(0x191)&&_0x3354e1[_0x3aabf4(0xb1)][_0x3aabf4(0x207)]>-0xb46+0x6*-0x63a+0x33e*0xf&&_0x3354e1[_0x3aabf4(0xb1)][_0x3aabf4(0x207)]<=0x714+0x9*0x2da+-0x203e&&typeof _0x3354e1[_0x3aabf4(0x11d)]===_0x3aabf4(0x191)&&_0x3354e1[_0x3aabf4(0x11d)][_0x3aabf4(0x207)]>-0x26dd+0x1057*0x1+0x1686&&_0x3354e1[_0x3aabf4(0x11d)][_0x3aabf4(0x207)]<=TOOL_EXECUTION_LIMITS[_0x3aabf4(0x18c)]&&(_0x3354e1[_0x3aabf4(0x184)]===_0x3aabf4(0x1d8)||_0x3354e1[_0x3aabf4(0x184)]===_0x3aabf4(0x15c)||_0x3354e1[_0x3aabf4(0x184)]===_0x3aabf4(0x1ab)||_0x3354e1[_0x3aabf4(0x184)]===_0x3aabf4(0x1d9)||_0x3354e1[_0x3aabf4(0x184)]===_0x3aabf4(0x210))&&(_0x3354e1[_0x3aabf4(0xf3)]===undefined||typeof _0x3354e1[_0x3aabf4(0xf3)]===_0x3aabf4(0x191))&&(_0x3354e1[_0x3aabf4(0x21f)]===undefined||Array[_0x3aabf4(0x1df)](_0x3354e1[_0x3aabf4(0x21f)])&&_0x3354e1[_0x3aabf4(0x21f)][_0x3aabf4(0xcf)](_0x2fd98d=>typeof _0x2fd98d===_0x3aabf4(0x191)))&&(_0x3354e1[_0x3aabf4(0x231)]===undefined||Array[_0x3aabf4(0x1df)](_0x3354e1[_0x3aabf4(0x231)])&&_0x3354e1[_0x3aabf4(0x231)][_0x3aabf4(0xcf)](_0x20d0b2=>typeof _0x20d0b2===_0x3aabf4(0x191)))&&(_0x3354e1[_0x3aabf4(0x21c)]===undefined||Array[_0x3aabf4(0x1df)](_0x3354e1[_0x3aabf4(0x21c)])&&_0x3354e1[_0x3aabf4(0x21c)][_0x3aabf4(0xcf)](_0x32bf14=>isRecord(_0x32bf14)&&typeof _0x32bf14[_0x3aabf4(0x1b3)]===_0x3aabf4(0x191)&&(_0x32bf14[_0x3aabf4(0x1d7)]===undefined||typeof _0x32bf14[_0x3aabf4(0x1d7)]===_0x3aabf4(0xf1)&&Number[_0x3aabf4(0x1cd)](_0x32bf14[_0x3aabf4(0x1d7)])&&_0x32bf14[_0x3aabf4(0x1d7)]>=-0x3*0x38b+0x44*0x77+-0x2*0xa7d)&&(_0x32bf14[_0x3aabf4(0xce)]===undefined||typeof _0x32bf14[_0x3aabf4(0xce)]===_0x3aabf4(0xf1)&&Number[_0x3aabf4(0x1cd)](_0x32bf14[_0x3aabf4(0xce)])&&_0x32bf14[_0x3aabf4(0xce)]>=0x1*0x17bd+-0x12f1*-0x1+-0x2aad)))&&(_0x3354e1[_0x3aabf4(0x118)]===undefined||typeof _0x3354e1[_0x3aabf4(0x118)]===_0x3aabf4(0x191));}function isNonnegativeInteger(_0x25cfe9){const _0x47bffe=_0x2f8e68;return typeof _0x25cfe9===_0x47bffe(0xf1)&&Number[_0x47bffe(0x1cd)](_0x25cfe9)&&_0x25cfe9>=-0x13*-0xd9+0x7*-0x435+0xd58;}
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { posix } from 'node:path';
3
+ import { describeMarAgentError, MarAgentError } from '../error.js';
4
+ import { negotiateHost } from '../host/contracts.js';
5
+ import { AnthropicMessagesAdapter, isAnthropicRecoverableStreamError } from '../model/anthropic-messages.js';
6
+ import { resolveModelDefaultReasoningEffort } from '../model/configuration.js';
7
+ import { modelRetryMaxAttempts, isRetryableModelRequestError, waitForModelRetry } from '../model/http.js';
8
+ import { OpenAiResponsesAdapter, isOpenAiResponsesRecoverableStreamError } from '../model/openai-responses.js';
9
+ import { AsyncQueue } from '../runtime/async-queue.js';
10
+ import { PlanOutputPrefix, splitPlanOutput } from '../runtime/plan-output.js';
11
+ import { AGENT_EXECUTION_POLICY } from '../runtime/execution-policy.js';
12
+ import { RolloutBudget, resolveRolloutBudgetOptions } from '../runtime/rollout-budget.js';
13
+ import { ContextGcRuntime } from '../runtime/context-gc-runtime.js';
14
+ import { buildContextProjection } from '../runtime/context-projection.js';
15
+ import { countModelTokens, truncateModelText } from '../runtime/token-budget.js';
16
+ import { TOOL_EXECUTION_LIMITS } from '../tools/execution-limits.js';
17
+ import { DEFAULT_COMPACTION_FOCUS, CompactionOperation, buildCompactionInput, buildCompactionMessages, buildCompactedHistory, compactedHistoryMessages, continuationMessage } from '../runtime/compact.js';
18
+ import { buildSystemPrompt, MAR_AGENT_PROMPT_VERSION } from '../prompts/index.js';
19
+ import { buildEnvironmentContext } from '../prompts/core.js';
20
+ import { environmentContextUpdate, restoreEnvironmentState } from '../runtime/environment-context.js';
21
+ import { childSubagentInstruction } from '../prompts/subagent.js';
22
+ import { sessionTitlePrompt } from '../prompts/title.js';
23
+ import { loadAgentInstructions, renderAgentInstructions } from '../runtime/instructions.js';
24
+ import { normalizeMessagesForModel } from '../runtime/normalize.js';
25
+ import { compactSummaryFromCheckpoint, replacementHistoryFromCheckpoint, JsonlSessionStore } from '../session/jsonl-store.js';
26
+ import { TodoStore } from '../tools/todo.js';
27
+ import { BUILTIN_TOOL_DEFINITIONS } from '../tools/registry.js';
28
+ import { executeRegisteredTool } from '../tools/runtime.js';
29
+ import { scheduleToolCallBatch } from '../tools/scheduler.js';
30
+ import { withCodeModeResultTypes } from '../tools/code-mode.js';
31
+ import { SubagentSessionController } from '../subagent/session-controller.js';
32
+ async function recoverModelStream(error, retryState, signal) {
33
+ if (signal.aborted ||
34
+ !(isRetryableModelRequestError(error) ||
35
+ isOpenAiResponsesRecoverableStreamError(error) ||
36
+ isAnthropicRecoverableStreamError(error)) ||
37
+ retryState.attempts >= modelRetryMaxAttempts(retryState))
38
+ return false;
39
+ const delayMs = retryState.retryDelayMs;
40
+ delete retryState.retryDelayMs;
41
+ await waitForModelRetry(typeof error.details?.retryAfter === 'string' ? error.details.retryAfter : null, retryState.attempts - 1, signal, delayMs);
42
+ return true;
43
+ }
44
+ export async function createMarAgent(options) {
45
+ const rolloutBudgetOptions = resolveRolloutBudgetOptions(options.rolloutBudget);
46
+ const generatedImageDisplayDirectory = normalizeGeneratedImageDisplayDirectory(options.generatedImageDisplayDirectory);
47
+ const resolvedModels = resolveAgentModels(options.models);
48
+ let { models, defaultModelId } = resolvedModels;
49
+ const { credentialProviders } = resolvedModels;
50
+ const description = negotiateHost(await options.host.describe());
51
+ if (description.mode !== options.mode)
52
+ throw new MarAgentError('MAR_AGENT_HOST_INCOMPATIBLE', 'Host mode does not match Agent mode.');
53
+ const store = await JsonlSessionStore.open(description.homeDirectory);
54
+ const active = new Map();
55
+ const executionResults = new Map();
56
+ const sessionRuntimes = new Map();
57
+ let disposed = false;
58
+ let reconfiguring = false;
59
+ const createAdapter = (modelId, configuredModels = models) => {
60
+ const configuration = configuredModels.get(modelId);
61
+ if (!configuration)
62
+ throw new MarAgentError('MAR_AGENT_MODEL_DISABLED', 'Selected model is unavailable.');
63
+ return (options.adapterFactory?.(configuration) ??
64
+ (configuration.protocol === 'OPENAI_RESPONSES'
65
+ ? new OpenAiResponsesAdapter(configuration)
66
+ : new AnthropicMessagesAdapter(configuration)));
67
+ };
68
+ const openSession = async (sessionId, workspace) => {
69
+ const storedSession = await store.getSession(sessionId);
70
+ const storedWorkspace = storedSession.workspace;
71
+ const sessionSource = storedSession.source;
72
+ const logicalWorkspace = options.workspaceMapping?.logicalPath ?? workspace ?? storedWorkspace ?? '';
73
+ const instructionWorkspace = options.workspaceMapping?.physicalPath ?? workspace ?? storedWorkspace ?? '';
74
+ const currentEnvironment = {
75
+ platform: description.platform,
76
+ ...(description.architecture ? { architecture: description.architecture } : {}),
77
+ ...(description.shell ? { shell: description.shell } : {}),
78
+ ...(description.guaranteedCommands
79
+ ? { guaranteedCommands: description.guaranteedCommands }
80
+ : {}),
81
+ workspace: logicalWorkspace
82
+ };
83
+ if (!restoreEnvironmentState({ version: 1, state: currentEnvironment }))
84
+ throw new MarAgentError('MAR_AGENT_HOST_INCOMPATIBLE', 'Host environment facts are invalid or exceed the context limit.');
85
+ const environmentContext = buildEnvironmentContext(currentEnvironment);
86
+ let sessionRuntime = sessionRuntimes.get(sessionId);
87
+ if (sessionRuntime === undefined) {
88
+ sessionRuntime = { responsesChain: undefined, adapters: new Map() };
89
+ sessionRuntimes.set(sessionId, sessionRuntime);
90
+ }
91
+ if (sessionSource.type === 'user' && sessionRuntime.subagents === undefined) {
92
+ sessionRuntime.subagentsOpening ??= SubagentSessionController.open({
93
+ parentSessionId: sessionId,
94
+ rootSessionId: sessionId,
95
+ backend: createSubagentBackend(store, storedWorkspace)
96
+ });
97
+ try {
98
+ sessionRuntime.subagents = await sessionRuntime.subagentsOpening;
99
+ }
100
+ finally {
101
+ delete sessionRuntime.subagentsOpening;
102
+ }
103
+ }
104
+ const sessionAdapter = (modelId, configuredModels) => {
105
+ let selected = sessionRuntime.adapters.get(modelId);
106
+ if (selected === undefined) {
107
+ selected = createAdapter(modelId, configuredModels);
108
+ if (options.adapterFactory === undefined || selected.createTurnSession !== undefined)
109
+ sessionRuntime.adapters.set(modelId, selected);
110
+ }
111
+ return selected;
112
+ };
113
+ const execution = (mode, input, internal = {}) => {
114
+ if (disposed)
115
+ throw new MarAgentError('MAR_AGENT_DISPOSED', 'Agent is disposed.');
116
+ if (reconfiguring)
117
+ throw new MarAgentError('MAR_AGENT_EXECUTION_ACTIVE', 'Models are being reconfigured for the next execution.');
118
+ if ([...active.keys()].some((key) => key.startsWith(`${sessionId}:`)))
119
+ throw new MarAgentError('MAR_AGENT_EXECUTION_ACTIVE', 'Session already has an active execution.');
120
+ const executionId = randomUUID(), turnId = internal.turnId ?? randomUUID(), queue = new AsyncQueue(), controller = new AbortController();
121
+ const executionModels = models;
122
+ const executionDefaultModelId = defaultModelId;
123
+ const manualCompactionId = mode === 'compact' ? randomUUID() : undefined;
124
+ active.set(`${sessionId}:${executionId}`, controller);
125
+ const mailbox = [...(internal.initialMailbox ?? [])];
126
+ let acceptsMailbox = sessionSource.type === 'subagent' && mode !== 'compact';
127
+ let sequence = 0;
128
+ let manualCompactionStarted = false;
129
+ let emitTail = Promise.resolve();
130
+ let exhaustedModelAttempt;
131
+ const emit = (event) => {
132
+ const full = {
133
+ ...event,
134
+ eventId: randomUUID(),
135
+ sequence: ++sequence,
136
+ timestamp: new Date().toISOString(),
137
+ sessionId,
138
+ executionId,
139
+ turnId
140
+ };
141
+ const operation = emitTail.then(async () => {
142
+ // Transport-only progress events never become recoverable history.
143
+ const persistent = eventForPersistence(full);
144
+ if (persistent !== undefined)
145
+ await store.append(sessionId, {
146
+ type: full.type,
147
+ payload: persistent,
148
+ executionId,
149
+ turnId
150
+ });
151
+ queue.push(full);
152
+ if (internal.publishHostEvents !== false)
153
+ await options.host.emit(full);
154
+ });
155
+ emitTail = operation.catch(() => undefined);
156
+ return operation;
157
+ };
158
+ const recordModelAttempt = (purpose) => (diagnostic) => {
159
+ if (purpose === 'EXECUTION' || purpose === 'COMPACTION') {
160
+ if ((diagnostic.state === 'STARTED' && diagnostic.attempt === 1) ||
161
+ diagnostic.state === 'SUCCEEDED')
162
+ exhaustedModelAttempt = undefined;
163
+ else if (diagnostic.state === 'FAILED' &&
164
+ diagnostic.willRetry === false &&
165
+ diagnostic.attempt > 1)
166
+ exhaustedModelAttempt = {
167
+ attempts: diagnostic.attempt,
168
+ retries: diagnostic.attempt - 1
169
+ };
170
+ }
171
+ const operation = emitTail.then(async () => {
172
+ await store.append(sessionId, {
173
+ type: 'model.attempt',
174
+ payload: { purpose, ...diagnostic },
175
+ executionId,
176
+ turnId
177
+ });
178
+ });
179
+ emitTail = operation.catch(() => undefined);
180
+ return operation;
181
+ };
182
+ const createCompactionOperation = (compactionId) => new CompactionOperation(controller.signal, (progress) => {
183
+ const operation = emitTail.then(async () => {
184
+ await store.append(sessionId, {
185
+ type: 'compact.progress',
186
+ payload: { compactionId, ...progress },
187
+ executionId,
188
+ turnId
189
+ });
190
+ });
191
+ emitTail = operation.catch(() => undefined);
192
+ return operation;
193
+ });
194
+ const result = (async () => {
195
+ let finalAnswer = '';
196
+ const planOutputPrefixes = new Map();
197
+ let manualCompaction;
198
+ const rolloutBudget = internal.sharedRolloutBudget ??
199
+ (rolloutBudgetOptions ? new RolloutBudget(rolloutBudgetOptions) : undefined);
200
+ const ownsRolloutBudget = rolloutBudget !== undefined && internal.sharedRolloutBudget === undefined;
201
+ let releaseSession;
202
+ let selectedTurn;
203
+ const contextGc = new ContextGcRuntime();
204
+ let selectedAdapter;
205
+ let titleAdapter;
206
+ const executionScopedAdapters = new Set();
207
+ let titleTask;
208
+ let titleSettled = false;
209
+ const settleTitle = async () => {
210
+ if (titleSettled)
211
+ return;
212
+ titleSettled = true;
213
+ const generatedTitle = await titleTask;
214
+ if (generatedTitle)
215
+ await store
216
+ .updateTitle(sessionId, generatedTitle, { executionId, turnId })
217
+ .catch(() => undefined);
218
+ };
219
+ const subagents = sessionSource.type === 'user' ? sessionRuntime.subagents : undefined;
220
+ try {
221
+ releaseSession = await store.acquireSessionLease(sessionId);
222
+ const sessionState = await store.readExecutionState(sessionId);
223
+ const todo = TodoStore.restore(sessionState.todo);
224
+ const contextRecords = sessionState.contextRecords;
225
+ const previousMayContainAgentInstructions = contextRecords.some((record) => compactSummaryFromCheckpoint(record) !== undefined);
226
+ const restored = await restoreMessages(store, sessionId, contextRecords, {
227
+ includeImages: mode !== 'compact'
228
+ });
229
+ const messages = restored.messages;
230
+ const appendMailboxMessages = async () => {
231
+ let appended = false;
232
+ while (mailbox.length > 0) {
233
+ const pending = mailbox.splice(0);
234
+ for (const { text: prompt, delivery } of pending) {
235
+ await store.append(sessionId, {
236
+ type: 'turn.user',
237
+ payload: {
238
+ prompt,
239
+ inputSource: 'parent_agent',
240
+ ...(delivery ? { messageId: delivery.messageId } : {})
241
+ },
242
+ executionId,
243
+ turnId
244
+ });
245
+ messages.push({ role: 'user', content: prompt });
246
+ delivery?.applied();
247
+ appended = true;
248
+ }
249
+ }
250
+ return appended;
251
+ };
252
+ const recordEnvironment = async () => {
253
+ const message = environmentContextUpdate(currentEnvironment, restored.environmentState);
254
+ if (!message)
255
+ return;
256
+ await store.append(sessionId, {
257
+ type: 'context.environment',
258
+ payload: { version: 1, state: currentEnvironment },
259
+ executionId,
260
+ turnId
261
+ });
262
+ messages.push(message);
263
+ };
264
+ let compactionUserMessages = [
265
+ ...restored.userMessages,
266
+ ...(mode === 'compact' ? [] : [input.prompt])
267
+ ];
268
+ const hasRestoredUserImages = messages.some((message) => message.role === 'user' && Boolean(message.images?.length));
269
+ const modelInputImages = mode === 'compact'
270
+ ? undefined
271
+ : input.images?.map(({ mimeType, dataBase64 }) => ({
272
+ mimeType,
273
+ dataBase64
274
+ }));
275
+ const currentExecutionToolImages = [];
276
+ if (mode === 'compact')
277
+ sessionRuntime.responsesChain = undefined;
278
+ if (mode !== 'compact') {
279
+ await recordEnvironment();
280
+ const inputImageMetadata = input.images?.length
281
+ ? await store.persistInputImages(sessionId, input.images)
282
+ : [];
283
+ try {
284
+ await store.append(sessionId, {
285
+ type: 'turn.user',
286
+ payload: {
287
+ prompt: input.prompt,
288
+ ...(internal.delivery ? { messageId: internal.delivery.messageId } : {}),
289
+ ...(internal.inputSource === undefined
290
+ ? {}
291
+ : { inputSource: internal.inputSource }),
292
+ ...(input.clientMessageId ? { clientMessageId: input.clientMessageId } : {}),
293
+ ...(inputImageMetadata.length ? { images: inputImageMetadata } : {})
294
+ },
295
+ executionId,
296
+ turnId
297
+ });
298
+ }
299
+ catch (error) {
300
+ await store.removeInputImages(sessionId, inputImageMetadata).catch(() => undefined);
301
+ throw error;
302
+ }
303
+ messages.push({ role: 'user', content: input.prompt });
304
+ internal.delivery?.applied();
305
+ await appendMailboxMessages();
306
+ if (sessionState.automaticTitlePending) {
307
+ const titleModel = [...executionModels.values()].find((model) => model.titleGeneration) ??
308
+ executionModels.get(input.modelId ?? executionDefaultModelId);
309
+ titleAdapter = createAdapter(titleModel.id, executionModels);
310
+ titleTask = generateSessionTitle(titleAdapter, input.prompt, titleModel.defaultReasoningEffort, controller.signal, recordModelAttempt('TITLE')).catch(() => undefined);
311
+ }
312
+ }
313
+ await emit({ type: 'execution.started', mode });
314
+ if (restored.ignoredImages > 0)
315
+ await store.append(sessionId, {
316
+ type: 'context.warning',
317
+ payload: {
318
+ code: 'MAR_AGENT_INPUT_IMAGE_IGNORED',
319
+ message: 'One or more corrupt historical input images were ignored.',
320
+ ignoredImages: restored.ignoredImages
321
+ },
322
+ executionId,
323
+ turnId
324
+ });
325
+ selectedAdapter = sessionAdapter(input.modelId ?? executionDefaultModelId, executionModels);
326
+ if (options.adapterFactory !== undefined &&
327
+ selectedAdapter.createTurnSession === undefined)
328
+ executionScopedAdapters.add(selectedAdapter);
329
+ const selected = createModelTurnSession(selectedAdapter);
330
+ selectedTurn = selected;
331
+ const selectedModel = executionModels.get(input.modelId ?? executionDefaultModelId);
332
+ const compactUserTokenLimit = Math.min(20_000, Math.floor(selectedModel.contextWindowTokens / 8));
333
+ const reasoningEffort = input.reasoningEffort ?? selectedModel.defaultReasoningEffort;
334
+ if (mode !== 'compact' && subagents)
335
+ await subagents.beginParentExecution({
336
+ executionId,
337
+ modelId: selectedModel.id,
338
+ reasoningEffort,
339
+ models: executionModels,
340
+ emitTerminal: async (task) => emit({
341
+ type: 'subagent.completed',
342
+ agentId: task.agentId,
343
+ description: task.description,
344
+ status: task.status,
345
+ ...(task.modelId === undefined ? {} : { modelId: task.modelId }),
346
+ ...(task.modelName === undefined ? {} : { modelName: task.modelName }),
347
+ ...(task.reasoningEffort === undefined
348
+ ? {}
349
+ : { reasoningEffort: task.reasoningEffort }),
350
+ ...(task.latestMessage === undefined
351
+ ? {}
352
+ : { latestMessage: task.latestMessage }),
353
+ ...(task.errorCode === undefined ? {} : { errorCode: task.errorCode }),
354
+ ...(task.errorMessage === undefined ? {} : { errorMessage: task.errorMessage })
355
+ }),
356
+ startTurn: async (turn) => {
357
+ const child = await openSession(turn.sessionId);
358
+ return child.startSubagentTurn({
359
+ prompt: turn.prompt,
360
+ modelId: turn.modelId,
361
+ reasoningEffort: turn.reasoningEffort,
362
+ role: turn.role,
363
+ access: input.access,
364
+ initialMailbox: turn.initialMailbox,
365
+ turnId: turn.turnId,
366
+ ...(turn.delivery ? { delivery: turn.delivery } : {}),
367
+ ...(rolloutBudget === undefined ? {} : { sharedRolloutBudget: rolloutBudget })
368
+ });
369
+ }
370
+ });
371
+ if (mode !== 'compact' &&
372
+ (input.images?.length || hasRestoredUserImages) &&
373
+ !selectedModel.inputCapabilities.includes('IMAGE'))
374
+ throw new MarAgentError('MAR_AGENT_INPUT_CAPABILITY_UNSUPPORTED', 'Selected model does not support image input.');
375
+ const mcpTools = (await options.host.listMcpTools?.()) ?? [];
376
+ const selectedModelForTools = executionModels.get(input.modelId ?? executionDefaultModelId);
377
+ const availableTools = [...BUILTIN_TOOL_DEFINITIONS, ...mcpTools].filter((tool) => {
378
+ if (sessionSource.type === 'subagent' &&
379
+ (tool.name.startsWith('agent_') ||
380
+ tool.name === 'question' ||
381
+ tool.name === 'codex_image_gen' ||
382
+ tool.name === 'byted_ark_image_gen'))
383
+ return false;
384
+ return tool.name === 'code_mode'
385
+ ? selectedModelForTools.codeMode && description.capabilities.includes('code.execute')
386
+ : tool.name === 'question'
387
+ ? mode === 'plan'
388
+ : tool.name === 'web_search'
389
+ ? !selectedModelForTools.hostedWebSearch &&
390
+ description.capabilities.includes('web.search')
391
+ : tool.name === 'view_image'
392
+ ? selectedModelForTools.inputCapabilities.includes('IMAGE')
393
+ : tool.name === 'codex_image_gen'
394
+ ? selectedModelForTools.imageGeneration?.provider === 'CODEX'
395
+ : tool.name === 'byted_ark_image_gen'
396
+ ? selectedModelForTools.imageGeneration?.provider === 'BYTED_ARK'
397
+ : tool.name !== 'web_fetch' ||
398
+ description.capabilities.includes('web.fetch');
399
+ });
400
+ const instructionContext = mode === 'compact'
401
+ ? undefined
402
+ : await loadAgentInstructions({
403
+ home: description.homeDirectory,
404
+ workspace: instructionWorkspace,
405
+ availableTools: new Set(availableTools.map((tool) => tool.name)),
406
+ ...(options.workspaceMapping === undefined
407
+ ? {}
408
+ : { workspaceDisplayPath: logicalWorkspace })
409
+ });
410
+ let agentInstructionMessage = mode === 'compact'
411
+ ? undefined
412
+ : renderAgentInstructions(instructionContext?.entries ?? [], previousMayContainAgentInstructions);
413
+ let agentInstructionInsertIndex = mode === 'compact' ? undefined : Math.max(0, messages.length - 1);
414
+ if (agentInstructionInsertIndex &&
415
+ messages[agentInstructionInsertIndex - 1]?.contextKind === 'environment')
416
+ agentInstructionInsertIndex--;
417
+ const tools = withCodeModeResultTypes(availableTools.filter((tool) => tool.name !== 'skill' || (instructionContext?.skills.size ?? 0) > 0));
418
+ const executionTools = mode === 'compact' ? [] : tools;
419
+ const hostResources = mode === 'compact'
420
+ ? { processes: [] }
421
+ : ((await options.host.listSessionResources?.(sessionId)) ?? {
422
+ processes: []
423
+ });
424
+ const retainedSessionResources = {
425
+ ...(hostResources.idleTtlMs === undefined
426
+ ? {}
427
+ : { idleTtlMs: hostResources.idleTtlMs }),
428
+ processes: hostResources.processes,
429
+ subagents: subagents?.listSessionResources() ?? []
430
+ };
431
+ const buildExecutionSystemPrompt = (availableTools = executionTools) => buildSystemPrompt({
432
+ mode,
433
+ platform: description.platform,
434
+ ...(description.architecture ? { architecture: description.architecture } : {}),
435
+ ...(description.shell ? { shell: description.shell } : {}),
436
+ ...(description.guaranteedCommands
437
+ ? { guaranteedCommands: description.guaranteedCommands }
438
+ : {}),
439
+ workspace: logicalWorkspace,
440
+ tools: availableTools.map((tool) => tool.name),
441
+ ...(sessionSource.type === 'user'
442
+ ? {
443
+ currentAgentModel: {
444
+ id: selectedModel.id,
445
+ name: selectedModel.name,
446
+ reasoningEffort
447
+ }
448
+ }
449
+ : {}),
450
+ subagentModels: sessionSource.type === 'user'
451
+ ? [...executionModels.values()].map((configuration) => ({
452
+ id: configuration.id,
453
+ name: configuration.name,
454
+ default: configuration.id === executionDefaultModelId,
455
+ reasoningEfforts: configuration.reasoningEfforts
456
+ }))
457
+ : [],
458
+ retainedSessionResources,
459
+ ...(rolloutBudget?.active
460
+ ? {
461
+ executionBudget: {
462
+ stage: rolloutBudget.stage,
463
+ limitTokens: rolloutBudget.limitTokens
464
+ }
465
+ }
466
+ : {}),
467
+ extension: [
468
+ options.systemInstruction,
469
+ instructionContext?.skillCatalog,
470
+ sessionSource.type === 'subagent' ? childSubagentInstruction : undefined
471
+ ]
472
+ .filter(Boolean)
473
+ .join('\n\n')
474
+ });
475
+ const initialSystemPrompt = buildExecutionSystemPrompt();
476
+ if (mode === 'compact') {
477
+ const compactOverheadTokens = estimatedRequestTokens(initialSystemPrompt, buildCompactionMessages(''), []);
478
+ const compactInputTokens = selectedModel.contextWindowTokens - compactOverheadTokens;
479
+ if (compactInputTokens <= 0)
480
+ throw new MarAgentError('MAR_AGENT_CONTEXT_LIMIT', 'Compaction prompt exceeds the selected model context window.');
481
+ messages.splice(0, messages.length, ...buildCompactionMessages(buildCompactionInput(messages, {
482
+ focus: input.prompt,
483
+ maxTokens: compactInputTokens
484
+ })));
485
+ }
486
+ await store.append(sessionId, {
487
+ type: 'execution.header',
488
+ payload: {
489
+ promptVersion: MAR_AGENT_PROMPT_VERSION,
490
+ promptHash: createHash('sha256').update(initialSystemPrompt).digest('hex'),
491
+ modelId: selectedModel.id,
492
+ modelName: selectedModel.name,
493
+ reasoningEffort,
494
+ contextWindowTokens: selectedModel.contextWindowTokens,
495
+ mode
496
+ },
497
+ executionId,
498
+ turnId
499
+ });
500
+ let lastServerContextTokens = latestContextInputTokens(contextRecords, selectedModel.id);
501
+ const compactContext = async () => {
502
+ const current = messages.at(-1);
503
+ if (!current || messages.length < 2)
504
+ return false;
505
+ const retainCurrent = current.role === 'user';
506
+ let compactSummary = '';
507
+ const compactSystemPrompt = buildSystemPrompt({
508
+ mode: 'compact',
509
+ platform: description.platform,
510
+ workspace: logicalWorkspace,
511
+ tools: [],
512
+ extension: options.systemInstruction
513
+ });
514
+ const compactOverheadTokens = estimatedRequestTokens(compactSystemPrompt, buildCompactionMessages(''), []);
515
+ const compactInputTokens = Math.max(0, selectedModel.contextWindowTokens - compactOverheadTokens);
516
+ if (compactInputTokens === 0)
517
+ throw new MarAgentError('MAR_AGENT_CONTEXT_LIMIT', 'Compaction prompt exceeds the selected model context window.');
518
+ const compactSource = buildCompactionInput(retainCurrent ? messages.slice(0, -1) : messages, {
519
+ maxTokens: Math.max(1, compactInputTokens)
520
+ });
521
+ const compactionId = randomUUID();
522
+ await emit({ type: 'context.compacting', compactionId });
523
+ let latestUsage;
524
+ const compactionRetryState = { attempts: 0 };
525
+ const operation = createCompactionOperation(compactionId);
526
+ try {
527
+ while (true) {
528
+ compactSummary = '';
529
+ latestUsage = undefined;
530
+ try {
531
+ for await (const event of operation.start(selected, {
532
+ retryState: compactionRetryState,
533
+ system: compactSystemPrompt,
534
+ messages: buildCompactionMessages(compactSource),
535
+ tools: [],
536
+ allowTools: false,
537
+ promptCacheKey: sessionId,
538
+ onAttemptDiagnostic: recordModelAttempt('COMPACTION')
539
+ })) {
540
+ if (event.type === 'text.completed' &&
541
+ (event.phase ?? 'final_answer') === 'final_answer')
542
+ compactSummary = event.text.trim();
543
+ else if (event.type === 'usage') {
544
+ latestUsage = event.usage;
545
+ await emit({ type: 'usage.updated', ...publicModelUsage(event.usage) });
546
+ }
547
+ }
548
+ break;
549
+ }
550
+ catch (error) {
551
+ if (await recoverModelStream(error, compactionRetryState, operation.signal)) {
552
+ sessionRuntime.responsesChain = undefined;
553
+ continue;
554
+ }
555
+ if (isProviderContextOverflow(error))
556
+ throw new MarAgentError('MAR_AGENT_CONTEXT_LIMIT', 'The compaction request exceeds the model context window.', { cause: error });
557
+ throw error;
558
+ }
559
+ }
560
+ }
561
+ finally {
562
+ await operation.dispose();
563
+ }
564
+ if (!compactSummary)
565
+ throw new MarAgentError('MAR_AGENT_COMPACT_FAILED', 'Automatic compact failed.');
566
+ rolloutBudget?.recordUsage(latestUsage);
567
+ const replacementHistory = buildCompactedHistory(compactSummary, retainCurrent ? compactionUserMessages.slice(0, -1) : compactionUserMessages, compactUserTokenLimit, retainCurrent ? current.content : undefined);
568
+ await store.compact(sessionId, {
569
+ summary: compactSummary,
570
+ replacementHistory,
571
+ automatic: true,
572
+ environment: currentEnvironment,
573
+ modelId: selectedModel.id,
574
+ contextWindowTokens: selectedModel.contextWindowTokens,
575
+ ...(latestUsage === undefined ? {} : { usage: latestUsage }),
576
+ executionId,
577
+ turnId
578
+ });
579
+ contextGc.reset();
580
+ messages.splice(0, messages.length, environmentContextUpdate(currentEnvironment), ...compactedHistoryMessages(replacementHistory));
581
+ compactionUserMessages = replacementHistory
582
+ .filter((message) => message.kind === 'user_input')
583
+ .map((message) => message.content);
584
+ agentInstructionMessage = renderAgentInstructions(instructionContext?.entries ?? [], true);
585
+ agentInstructionInsertIndex = Math.max(0, messages.length - 1);
586
+ sessionRuntime.responsesChain = undefined;
587
+ lastServerContextTokens = undefined;
588
+ await emit({ type: 'context.compacted', compactionId });
589
+ return true;
590
+ };
591
+ const ensureContextBudget = async () => {
592
+ if (mode === 'compact' || lastServerContextTokens === undefined)
593
+ return;
594
+ const hardLimit = selectedModel.contextWindowTokens;
595
+ const compactLimit = Math.floor((hardLimit * AGENT_EXECUTION_POLICY.automaticCompactionPercent) / 100);
596
+ if (lastServerContextTokens < compactLimit)
597
+ return;
598
+ if (!(await compactContext()))
599
+ throw new MarAgentError('MAR_AGENT_CONTEXT_LIMIT', 'Provider usage reached the compaction threshold but no history can be compacted.');
600
+ };
601
+ let recoveringFromContextOverflow = false;
602
+ const modelRetryState = { attempts: 0 };
603
+ while (true) {
604
+ await appendMailboxMessages();
605
+ let stop;
606
+ let sawTool = false;
607
+ let responseId;
608
+ let latestUsage;
609
+ const pendingTools = [];
610
+ await ensureContextBudget();
611
+ const toolsAllowed = mode !== 'compact' && (!rolloutBudget?.active || rolloutBudget.stage !== 'exhausted');
612
+ const roundTools = toolsAllowed ? executionTools : [];
613
+ const systemPrompt = buildExecutionSystemPrompt(roundTools);
614
+ const requestSignature = createHash('sha256')
615
+ .update(stableJson({
616
+ modelId: selectedModel.id,
617
+ systemPrompt,
618
+ agentInstructionMessage,
619
+ tools: roundTools,
620
+ reasoningEffort
621
+ }))
622
+ .digest('hex');
623
+ const continuation = selectedModel.responsesPreviousResponseId &&
624
+ sessionRuntime.responsesChain?.modelId === selectedModel.id &&
625
+ sessionRuntime.responsesChain.requestSignature === requestSignature &&
626
+ sessionRuntime.responsesChain.messageCount <= messages.length
627
+ ? {
628
+ previousResponseId: sessionRuntime.responsesChain.responseId,
629
+ deltaMessages: messages.slice(sessionRuntime.responsesChain.messageCount)
630
+ }
631
+ : undefined;
632
+ let sawModelSemanticEvent = false;
633
+ const roundMessageCount = messages.length;
634
+ try {
635
+ if (manualCompactionId !== undefined && !manualCompactionStarted) {
636
+ manualCompactionStarted = true;
637
+ manualCompaction = createCompactionOperation(manualCompactionId);
638
+ await emit({ type: 'context.compacting', compactionId: manualCompactionId });
639
+ }
640
+ const startModel = manualCompaction
641
+ ? (request) => manualCompaction.start(selected, request)
642
+ : (request) => selected.start(request, controller.signal);
643
+ for await (const event of startModel({
644
+ retryState: modelRetryState,
645
+ system: systemPrompt,
646
+ messages: normalizeMessagesForModel(insertContextualInstructions(messages, agentInstructionInsertIndex, agentInstructionMessage), {
647
+ supportsImages: selectedModel.inputCapabilities.includes('IMAGE')
648
+ }),
649
+ tools: roundTools,
650
+ ...(toolsAllowed ? {} : { allowTools: false }),
651
+ promptCacheKey: sessionId,
652
+ ...(continuation ? { continuation } : {}),
653
+ reasoningEffort,
654
+ ...(modelInputImages?.length ? { images: modelInputImages } : {}),
655
+ onAttemptDiagnostic: recordModelAttempt(mode === 'compact' ? 'COMPACTION' : 'EXECUTION')
656
+ })) {
657
+ if (event.type !== 'response.started' && event.type !== 'usage')
658
+ sawModelSemanticEvent = true;
659
+ if (event.type === 'response.started')
660
+ responseId = event.responseId;
661
+ else if (event.type === 'response.item') {
662
+ // Compaction keeps only its successful checkpoint, never intermediate native output.
663
+ if (mode === 'compact')
664
+ continue;
665
+ const message = {
666
+ role: 'provider',
667
+ content: '',
668
+ provider: event.provider,
669
+ providerModelId: selectedModel.id,
670
+ item: event.item
671
+ };
672
+ messages.push(message);
673
+ await store.append(sessionId, {
674
+ type: 'model.context',
675
+ payload: message,
676
+ executionId,
677
+ turnId
678
+ });
679
+ }
680
+ else if (event.type === 'text.delta') {
681
+ let delta = event.delta;
682
+ if (mode === 'plan' && sessionSource.type !== 'subagent') {
683
+ let prefix = planOutputPrefixes.get(event.itemId);
684
+ if (!prefix) {
685
+ prefix = new PlanOutputPrefix();
686
+ planOutputPrefixes.set(event.itemId, prefix);
687
+ }
688
+ delta = prefix.push(delta);
689
+ }
690
+ if (mode !== 'compact' && delta)
691
+ await emit({
692
+ type: 'message.delta',
693
+ itemId: event.itemId,
694
+ phase: event.phase,
695
+ delta
696
+ });
697
+ }
698
+ else if (event.type === 'text.completed') {
699
+ const phase = event.phase ?? 'final_answer';
700
+ if (phase === 'final_answer')
701
+ finalAnswer = event.text;
702
+ planOutputPrefixes.delete(event.itemId);
703
+ if (mode !== 'compact') {
704
+ if (mode === 'plan' && sessionSource.type !== 'subagent') {
705
+ const parts = splitPlanOutput(event.text);
706
+ for (const [index, part] of parts.entries()) {
707
+ const itemId = index === 0 ? event.itemId : `${event.itemId}:plan-part:${index}`;
708
+ if (part.kind === 'plan')
709
+ await emit({ type: 'plan.completed', itemId, text: part.text });
710
+ else
711
+ await emit({
712
+ type: 'message.completed',
713
+ itemId,
714
+ phase,
715
+ text: part.text,
716
+ modelId: selectedModel.id,
717
+ modelName: selectedModel.name
718
+ });
719
+ }
720
+ }
721
+ else
722
+ await emit({
723
+ type: 'message.completed',
724
+ itemId: event.itemId,
725
+ phase,
726
+ text: event.text,
727
+ modelId: selectedModel.id,
728
+ modelName: selectedModel.name
729
+ });
730
+ }
731
+ messages.push({ role: 'assistant', content: event.text });
732
+ }
733
+ else if (event.type === 'usage') {
734
+ latestUsage = event.usage;
735
+ const reportedContext = event.usage.contextInputTokens ?? event.usage.inputTokens;
736
+ if (reportedContext !== undefined &&
737
+ Number.isSafeInteger(reportedContext) &&
738
+ reportedContext >= 0)
739
+ lastServerContextTokens = reportedContext;
740
+ await emit({ type: 'usage.updated', ...publicModelUsage(event.usage) });
741
+ }
742
+ else if (event.type === 'reasoning.summary') {
743
+ if (mode !== 'compact')
744
+ await emit({ type: 'reasoning.summary', text: event.text });
745
+ }
746
+ else if (event.type === 'hosted_tool') {
747
+ if (mode !== 'compact')
748
+ await emit({
749
+ type: 'hosted_tool.updated',
750
+ itemId: event.itemId,
751
+ kind: event.kind,
752
+ status: event.status,
753
+ summary: event.summary
754
+ });
755
+ }
756
+ else if (event.type === 'citation') {
757
+ if (mode !== 'compact')
758
+ await emit({
759
+ type: 'citation.added',
760
+ id: event.citation.id,
761
+ url: event.citation.url,
762
+ ...(event.citation.title ? { title: event.citation.title } : {})
763
+ });
764
+ }
765
+ else if (event.type === 'client_tool.call') {
766
+ sawTool = true;
767
+ const message = {
768
+ role: 'tool_call',
769
+ callId: event.callId,
770
+ name: event.name,
771
+ arguments: event.arguments,
772
+ ...(event.inputMode ? { inputMode: event.inputMode } : {}),
773
+ content: ''
774
+ };
775
+ messages.push(message);
776
+ await store.append(sessionId, {
777
+ type: 'model.context',
778
+ payload: message,
779
+ executionId,
780
+ turnId
781
+ });
782
+ pendingTools.push(event);
783
+ }
784
+ else if (event.type === 'completed')
785
+ stop = event.reason;
786
+ }
787
+ modelRetryState.attempts = 0;
788
+ }
789
+ catch (error) {
790
+ planOutputPrefixes.clear();
791
+ if (await recoverModelStream(error, modelRetryState, manualCompaction?.signal ?? controller.signal)) {
792
+ sessionRuntime.responsesChain = undefined;
793
+ responseId = undefined;
794
+ finalAnswer = '';
795
+ if (mode === 'compact')
796
+ messages.splice(roundMessageCount);
797
+ if (pendingTools.length === 0)
798
+ continue;
799
+ }
800
+ else if (mode !== 'compact' &&
801
+ !sawModelSemanticEvent &&
802
+ isProviderContextOverflow(error)) {
803
+ sessionRuntime.responsesChain = undefined;
804
+ if (!recoveringFromContextOverflow && (await compactContext())) {
805
+ modelRetryState.attempts = 0;
806
+ recoveringFromContextOverflow = true;
807
+ continue;
808
+ }
809
+ throw new MarAgentError('MAR_AGENT_CONTEXT_LIMIT', 'The model rejected the compacted context as too large.', { cause: error });
810
+ }
811
+ else
812
+ throw error;
813
+ }
814
+ recoveringFromContextOverflow = false;
815
+ if (selectedModel.responsesPreviousResponseId && responseId)
816
+ sessionRuntime.responsesChain = {
817
+ modelId: selectedModel.id,
818
+ responseId,
819
+ requestSignature,
820
+ messageCount: messages.length
821
+ };
822
+ else if (selectedModel.responsesPreviousResponseId)
823
+ sessionRuntime.responsesChain = undefined;
824
+ if (pendingTools.length === 0 && mailbox.length > 0) {
825
+ await appendMailboxMessages();
826
+ finalAnswer = '';
827
+ continue;
828
+ }
829
+ const executeCall = async (call, signal = controller.signal) => {
830
+ await emit({
831
+ type: 'tool.started',
832
+ toolName: call.name,
833
+ callId: call.callId,
834
+ input: call.arguments
835
+ });
836
+ try {
837
+ if (call.argumentError)
838
+ throw new MarAgentError('MAR_AGENT_TOOL_INPUT_INVALID', call.argumentError);
839
+ const output = await executeRegisteredTool(call.name, call.arguments, call.callId, {
840
+ host: options.host,
841
+ todo,
842
+ ...(subagents === undefined ? {} : { subagents }),
843
+ access: input.access ?? 'on-request',
844
+ mode,
845
+ sessionId,
846
+ executionId,
847
+ signal,
848
+ codeMode: {
849
+ supportsImages: selectedModel.inputCapabilities.includes('IMAGE'),
850
+ tools: roundTools,
851
+ invoke: async (nested, nestedSignal) => {
852
+ const result = await executeCall({
853
+ type: 'client_tool.call',
854
+ name: nested.name,
855
+ arguments: nested.arguments,
856
+ callId: nested.callId ?? randomUUID()
857
+ }, nestedSignal);
858
+ if (result.failed)
859
+ throw result.error;
860
+ return { ...result.output, content: result.content };
861
+ }
862
+ },
863
+ emit,
864
+ skills: instructionContext?.skills ?? new Map(),
865
+ ...(selectedModel.imageGeneration === undefined
866
+ ? {}
867
+ : {
868
+ imageGeneration: {
869
+ configuration: {
870
+ imageGeneration: selectedModel.imageGeneration,
871
+ credentialProvider: selectedModel.imageGeneration.credentialProvider
872
+ },
873
+ sessionDirectory: store.sessionDirectory(sessionId),
874
+ ...(generatedImageDisplayDirectory === undefined
875
+ ? {}
876
+ : { displayDirectory: generatedImageDisplayDirectory }),
877
+ recentImages: currentExecutionImages(modelInputImages, currentExecutionToolImages)
878
+ }
879
+ })
880
+ });
881
+ const modelOutput = boundedModelToolOutput(output.content);
882
+ const structuredData = structuredToolEventData(call.name, output.data);
883
+ const artifacts = structuredToolArtifacts(call.name, output.artifacts);
884
+ await emit({
885
+ type: 'tool.completed',
886
+ toolName: call.name,
887
+ callId: call.callId,
888
+ summary: output.content.slice(0, AGENT_EXECUTION_POLICY.toolEventSummaryCharacters),
889
+ truncated: output.truncated === true || modelOutput.truncated,
890
+ ...(artifacts === undefined ? {} : { artifacts }),
891
+ ...(structuredData === undefined ? {} : { data: structuredData })
892
+ });
893
+ return {
894
+ call,
895
+ output,
896
+ content: modelOutput.content,
897
+ ...(output.images?.length ? { images: output.images } : {}),
898
+ failed: false
899
+ };
900
+ }
901
+ catch (error) {
902
+ const diagnostic = describeMarAgentError(error, 'MAR_AGENT_HOST_OPERATION_FAILED');
903
+ await emit({
904
+ type: 'tool.failed',
905
+ toolName: call.name,
906
+ callId: call.callId,
907
+ code: diagnostic.code,
908
+ message: diagnostic.message
909
+ });
910
+ return {
911
+ call,
912
+ content: JSON.stringify({
913
+ error: diagnostic.code,
914
+ message: diagnostic.message,
915
+ ...(error instanceof MarAgentError && error.retryable
916
+ ? { retryable: true }
917
+ : {})
918
+ }),
919
+ failed: true,
920
+ error
921
+ };
922
+ }
923
+ };
924
+ const toolResults = await scheduleToolCallBatch(pendingTools, roundTools, executeCall);
925
+ for (const result of toolResults) {
926
+ if ('images' in result && result.images?.length)
927
+ currentExecutionToolImages.push(...result.images.map((image) => ({
928
+ mimeType: image.mimeType,
929
+ data: Buffer.from(image.dataBase64, 'base64')
930
+ })));
931
+ const message = {
932
+ role: 'tool',
933
+ callId: result.call.callId,
934
+ content: result.content,
935
+ ...('images' in result && result.images?.length ? { images: result.images } : {})
936
+ };
937
+ messages.push(message);
938
+ await store.append(sessionId, {
939
+ type: 'model.context',
940
+ payload: {
941
+ role: message.role,
942
+ callId: message.callId,
943
+ content: message.content
944
+ },
945
+ executionId,
946
+ turnId
947
+ });
948
+ }
949
+ if (sawTool) {
950
+ modelRetryState.attempts = 0;
951
+ if (sessionSource.type === 'subagent')
952
+ finalAnswer = '';
953
+ }
954
+ rolloutBudget?.recordUsage(latestUsage);
955
+ if (mode !== 'compact' && latestUsage !== undefined) {
956
+ const committed = await contextGc.run({
957
+ store,
958
+ sessionId,
959
+ system: systemPrompt,
960
+ tools: roundTools,
961
+ modelId: selectedModel.id,
962
+ contextWindowTokens: selectedModel.contextWindowTokens,
963
+ usage: latestUsage,
964
+ modelProtocol: selectedModel.protocol,
965
+ workspace: logicalWorkspace,
966
+ platform: description.platform,
967
+ getActiveProcessIds: async () => {
968
+ const resources = await options.host
969
+ .listSessionResources?.(sessionId)
970
+ .catch(() => undefined);
971
+ return new Set((resources?.processes ?? [])
972
+ .filter((process) => process.status === 'running')
973
+ .map((process) => process.processId));
974
+ }
975
+ });
976
+ if (committed) {
977
+ sessionRuntime.responsesChain = undefined;
978
+ selected.resetContinuation?.();
979
+ const refreshed = await restoreMessages(store, sessionId, committed.records, {
980
+ includeImages: true,
981
+ currentTurnId: turnId,
982
+ projection: committed.projection
983
+ });
984
+ messages.splice(0, messages.length, ...refreshed.messages);
985
+ compactionUserMessages = [...refreshed.userMessages];
986
+ agentInstructionInsertIndex =
987
+ refreshed.currentTurnUserIndex ?? Math.max(0, messages.length - 1);
988
+ if (agentInstructionInsertIndex &&
989
+ messages[agentInstructionInsertIndex - 1]?.contextKind === 'environment')
990
+ agentInstructionInsertIndex--;
991
+ }
992
+ }
993
+ if (controller.signal.aborted) {
994
+ const aborted = toolResults.find((result) => result.failed)?.error;
995
+ throw (aborted ??
996
+ new MarAgentError('MAR_AGENT_EXECUTION_CANCELLED', 'Execution cancelled.'));
997
+ }
998
+ if (mailbox.length > 0) {
999
+ await appendMailboxMessages();
1000
+ finalAnswer = '';
1001
+ continue;
1002
+ }
1003
+ if (stop === 'completed' && !sawTool) {
1004
+ acceptsMailbox = false;
1005
+ const compactSummary = mode === 'compact' ? finalAnswer.trim() : '';
1006
+ if (mode === 'compact' && !compactSummary)
1007
+ throw new MarAgentError('MAR_AGENT_COMPACT_FAILED', 'Compaction returned an empty handoff.');
1008
+ if (mode !== 'compact' && !finalAnswer.trim())
1009
+ throw new MarAgentError(sessionSource.type === 'subagent'
1010
+ ? 'MAR_AGENT_SUBAGENT_FAILED'
1011
+ : 'MAR_AGENT_MODEL_OUTPUT_INCOMPLETE', sessionSource.type === 'subagent'
1012
+ ? 'Subagent completed without a final summary.'
1013
+ : 'Model completed without an answer or tool request.');
1014
+ if (manualCompaction) {
1015
+ manualCompaction.signal.throwIfAborted();
1016
+ await manualCompaction.dispose();
1017
+ }
1018
+ if (mode === 'compact')
1019
+ await store.compact(sessionId, {
1020
+ summary: compactSummary,
1021
+ replacementHistory: buildCompactedHistory(compactSummary, compactionUserMessages, compactUserTokenLimit),
1022
+ modelId: selectedModel.id,
1023
+ contextWindowTokens: selectedModel.contextWindowTokens,
1024
+ ...(latestUsage === undefined ? {} : { usage: latestUsage }),
1025
+ executionId,
1026
+ turnId
1027
+ });
1028
+ if (mode === 'compact' && manualCompactionId !== undefined)
1029
+ await emit({ type: 'context.compacted', compactionId: manualCompactionId });
1030
+ await settleTitle();
1031
+ subagents?.endParentExecution(executionId);
1032
+ await emit({ type: 'execution.completed' });
1033
+ return {
1034
+ executionId,
1035
+ status: 'completed',
1036
+ finalAnswer: mode === 'compact' ? '' : finalAnswer
1037
+ };
1038
+ }
1039
+ if (!sawTool && stop !== 'pause')
1040
+ throw new MarAgentError('MAR_AGENT_MODEL_OUTPUT_INCOMPLETE', 'Model did not complete or request a tool.');
1041
+ }
1042
+ }
1043
+ catch (error) {
1044
+ acceptsMailbox = false;
1045
+ await settleTitle();
1046
+ if (controller.signal.aborted) {
1047
+ subagents?.endParentExecution(executionId);
1048
+ await emit({ type: 'execution.cancelled' });
1049
+ return {
1050
+ executionId,
1051
+ status: 'cancelled',
1052
+ finalAnswer: mode === 'compact' ? '' : finalAnswer
1053
+ };
1054
+ }
1055
+ const diagnostic = modelAttemptFailureDiagnostic(describeMarAgentError(error, 'MAR_AGENT_EXECUTION_FAILED'), exhaustedModelAttempt);
1056
+ subagents?.endParentExecution(executionId);
1057
+ await emit({ type: 'execution.failed', ...diagnostic });
1058
+ return {
1059
+ executionId,
1060
+ status: 'failed',
1061
+ finalAnswer: mode === 'compact' ? '' : finalAnswer,
1062
+ errorCode: diagnostic.code,
1063
+ errorMessage: diagnostic.message
1064
+ };
1065
+ }
1066
+ finally {
1067
+ acceptsMailbox = false;
1068
+ if (ownsRolloutBudget)
1069
+ rolloutBudget.discard();
1070
+ await manualCompaction?.dispose();
1071
+ await selectedTurn?.close().catch(() => undefined);
1072
+ if (titleAdapter !== undefined && titleAdapter !== selectedAdapter)
1073
+ executionScopedAdapters.add(titleAdapter);
1074
+ await closeModelAdapters(executionScopedAdapters).catch(() => undefined);
1075
+ subagents?.endParentExecution(executionId);
1076
+ await releaseSession?.();
1077
+ active.delete(`${sessionId}:${executionId}`);
1078
+ queue.close();
1079
+ }
1080
+ })();
1081
+ const executionKey = `${sessionId}:${executionId}`;
1082
+ executionResults.set(executionKey, result);
1083
+ void result.then(() => executionResults.delete(executionKey), () => executionResults.delete(executionKey));
1084
+ return {
1085
+ executionId,
1086
+ turnId,
1087
+ [Symbol.asyncIterator]: () => queue[Symbol.asyncIterator](),
1088
+ result: () => {
1089
+ queue.discardIfUnobserved();
1090
+ return result;
1091
+ },
1092
+ cancel: () => controller.abort(new MarAgentError('MAR_AGENT_CANCELLED', 'Execution was cancelled.')),
1093
+ enqueueMessage: (message, delivery) => {
1094
+ if (!acceptsMailbox || controller.signal.aborted)
1095
+ return false;
1096
+ mailbox.push({ text: message, ...(delivery ? { delivery } : {}) });
1097
+ return true;
1098
+ }
1099
+ };
1100
+ };
1101
+ return {
1102
+ id: sessionId,
1103
+ run: (input) => execution('run', input),
1104
+ plan: (input) => execution('plan', input),
1105
+ compact: (input = {}) => execution('compact', {
1106
+ prompt: input.prompt ?? DEFAULT_COMPACTION_FOCUS,
1107
+ ...input
1108
+ }),
1109
+ cancel: async (executionId) => active.get(`${sessionId}:${executionId}`)?.abort(),
1110
+ startSubagentTurn: (turn) => execution(turn.role === 'explore' ? 'plan' : 'run', {
1111
+ prompt: turn.prompt,
1112
+ modelId: turn.modelId,
1113
+ reasoningEffort: turn.reasoningEffort,
1114
+ ...(turn.access === undefined ? {} : { access: turn.access })
1115
+ }, {
1116
+ publishHostEvents: false,
1117
+ inputSource: 'parent_agent',
1118
+ initialMailbox: turn.initialMailbox,
1119
+ turnId: turn.turnId,
1120
+ ...(turn.delivery ? { delivery: turn.delivery } : {}),
1121
+ ...(turn.sharedRolloutBudget === undefined
1122
+ ? {}
1123
+ : { sharedRolloutBudget: turn.sharedRolloutBudget })
1124
+ })
1125
+ };
1126
+ };
1127
+ return {
1128
+ createSession: async (input) => openSession((await store.createSession(input)).id, input.workspace),
1129
+ openSession: (id) => openSession(id),
1130
+ listSessions: (input) => store.list(input),
1131
+ clearSession: async (id) => {
1132
+ const runtime = sessionRuntimes.get(id);
1133
+ if ([...active.keys()].some((key) => key.startsWith(`${id}:`)))
1134
+ throw new MarAgentError('MAR_AGENT_EXECUTION_ACTIVE', 'A session cannot be cleared while an execution is active.');
1135
+ await runtime?.subagents?.dispose();
1136
+ await closeModelAdapters(runtime === undefined ? [] : [...runtime.adapters.values()]);
1137
+ sessionRuntimes.delete(id);
1138
+ await options.host.disposeSessionResources?.(id);
1139
+ await store.clearSession(id);
1140
+ },
1141
+ reconfigureModels: async (input) => {
1142
+ if (disposed)
1143
+ throw new MarAgentError('MAR_AGENT_DISPOSED', 'Agent is disposed.');
1144
+ if (active.size > 0 || reconfiguring)
1145
+ throw new MarAgentError('MAR_AGENT_EXECUTION_ACTIVE', 'Models cannot be reconfigured while an execution is active.');
1146
+ const next = resolveAgentModels(input.models, input.defaultModelId);
1147
+ const adapters = [...sessionRuntimes.values()].flatMap((runtime) => [
1148
+ ...runtime.adapters.values()
1149
+ ]);
1150
+ reconfiguring = true;
1151
+ try {
1152
+ await closeModelAdapters(adapters);
1153
+ if (disposed)
1154
+ throw new MarAgentError('MAR_AGENT_DISPOSED', 'Agent is disposed.');
1155
+ models = next.models;
1156
+ defaultModelId = next.defaultModelId;
1157
+ for (const provider of next.credentialProviders)
1158
+ credentialProviders.add(provider);
1159
+ for (const runtime of sessionRuntimes.values()) {
1160
+ runtime.responsesChain = undefined;
1161
+ runtime.adapters.clear();
1162
+ }
1163
+ }
1164
+ finally {
1165
+ reconfiguring = false;
1166
+ }
1167
+ },
1168
+ deleteSession: async (id) => {
1169
+ const sessionIds = await store.sessionTree(id);
1170
+ const sessionIdSet = new Set(sessionIds);
1171
+ const executionKeys = [...active.keys()].filter((key) => sessionIdSet.has(key.slice(0, key.indexOf(':'))));
1172
+ for (const key of executionKeys)
1173
+ active.get(key)?.abort();
1174
+ const runtimes = sessionIds.flatMap((sessionId) => {
1175
+ const runtime = sessionRuntimes.get(sessionId);
1176
+ sessionRuntimes.delete(sessionId);
1177
+ return runtime === undefined ? [] : [runtime];
1178
+ });
1179
+ await Promise.all(runtimes.map((runtime) => runtime.subagents?.dispose()));
1180
+ await Promise.allSettled(executionKeys.flatMap((key) => {
1181
+ const result = executionResults.get(key);
1182
+ return result === undefined ? [] : [result];
1183
+ }));
1184
+ await closeModelAdapters(runtimes.flatMap((runtime) => [...runtime.adapters.values()]));
1185
+ await Promise.all(sessionIds.map((sessionId) => options.host.disposeSessionResources?.(sessionId)));
1186
+ await store.delete(id);
1187
+ },
1188
+ dispose: async () => {
1189
+ if (disposed)
1190
+ return;
1191
+ disposed = true;
1192
+ for (const controller of active.values())
1193
+ controller.abort();
1194
+ await Promise.all([...sessionRuntimes.values()].map((runtime) => runtime.subagents?.dispose().catch(() => undefined)));
1195
+ await Promise.allSettled([...executionResults.values()]);
1196
+ await closeModelAdapters([...sessionRuntimes.values()].flatMap((runtime) => [...runtime.adapters.values()]));
1197
+ let disposalError;
1198
+ const providerResults = await Promise.allSettled([...credentialProviders].map((provider) => provider.close()));
1199
+ disposalError = providerResults.find((result) => result.status === 'rejected')?.reason;
1200
+ try {
1201
+ await options.host.dispose();
1202
+ }
1203
+ catch (error) {
1204
+ disposalError ??= error;
1205
+ }
1206
+ try {
1207
+ await store.close();
1208
+ }
1209
+ catch (error) {
1210
+ disposalError ??= error;
1211
+ }
1212
+ if (disposalError !== undefined)
1213
+ throw disposalError;
1214
+ }
1215
+ };
1216
+ }
1217
+ function createSubagentBackend(store, workspace) {
1218
+ return {
1219
+ createSession: async (input) => {
1220
+ const session = await store.createSession({
1221
+ workspace,
1222
+ title: input.title,
1223
+ source: input.source
1224
+ });
1225
+ return { id: session.id };
1226
+ },
1227
+ deleteSession: async (sessionId) => {
1228
+ await store.delete(sessionId);
1229
+ },
1230
+ listChildren: async (parentSessionId) => {
1231
+ const sessions = [];
1232
+ let cursor;
1233
+ do {
1234
+ const page = await store.list({
1235
+ source: 'subagent',
1236
+ parentSessionId,
1237
+ limit: 200,
1238
+ ...(cursor === undefined ? {} : { cursor })
1239
+ });
1240
+ sessions.push(...page.sessions);
1241
+ cursor = page.nextCursor;
1242
+ } while (cursor !== undefined);
1243
+ return Promise.all(sessions.map(async (session) => ({
1244
+ id: session.id,
1245
+ source: session.source,
1246
+ records: await store.read(session.id)
1247
+ })));
1248
+ },
1249
+ loadChild: async (parentSessionId, childSessionId) => {
1250
+ let session;
1251
+ try {
1252
+ session = await store.getSession(childSessionId);
1253
+ }
1254
+ catch (error) {
1255
+ if (error instanceof MarAgentError && error.code === 'MAR_AGENT_SESSION_NOT_FOUND')
1256
+ return undefined;
1257
+ throw error;
1258
+ }
1259
+ if (session.source.type !== 'subagent' || session.source.parentSessionId !== parentSessionId)
1260
+ return undefined;
1261
+ return {
1262
+ id: session.id,
1263
+ source: session.source,
1264
+ records: await store.read(session.id)
1265
+ };
1266
+ }
1267
+ };
1268
+ }
1269
+ function resolveAgentModels(configurations, requestedDefaultModelId) {
1270
+ const configuredModels = configurations.map((model) => ({
1271
+ ...model,
1272
+ defaultReasoningEffort: resolveModelDefaultReasoningEffort(model)
1273
+ }));
1274
+ const credentialProviders = new Set();
1275
+ for (const model of configuredModels) {
1276
+ if ((model.apiKey === undefined) === (model.credentialProvider === undefined))
1277
+ throw new MarAgentError('MAR_AGENT_MODEL_CONFIG_INVALID', 'Exactly one model credential source is required.');
1278
+ validateImageGenerationConfiguration(model);
1279
+ if (model.responsesEncoding !== undefined &&
1280
+ (model.protocol !== 'OPENAI_RESPONSES' ||
1281
+ !['STANDARD', 'LITE'].includes(model.responsesEncoding)))
1282
+ throw new MarAgentError('MAR_AGENT_MODEL_CONFIG_INVALID', 'Responses encoding is invalid.');
1283
+ if (model.credentialProvider !== undefined)
1284
+ credentialProviders.add(model.credentialProvider);
1285
+ if (model.imageGeneration !== undefined)
1286
+ credentialProviders.add(model.imageGeneration.credentialProvider);
1287
+ }
1288
+ const models = new Map(configuredModels.filter((model) => model.enabled).map((model) => [model.id, model]));
1289
+ if (models.size === 0)
1290
+ throw new MarAgentError('MAR_AGENT_MODEL_CONFIG_INVALID', 'At least one enabled model is required.');
1291
+ const defaultModelId = requestedDefaultModelId ?? models.keys().next().value;
1292
+ if (!models.has(defaultModelId))
1293
+ throw new MarAgentError('MAR_AGENT_MODEL_CONFIG_INVALID', 'Default model is unavailable.');
1294
+ return { models, defaultModelId, credentialProviders };
1295
+ }
1296
+ function createModelTurnSession(adapter) {
1297
+ const turn = adapter.createTurnSession?.() ?? {
1298
+ start: (request, signal) => adapter.start(request, signal),
1299
+ close: async () => undefined
1300
+ };
1301
+ return {
1302
+ async *start(request, signal) {
1303
+ const before = request.retryState?.attempts;
1304
+ try {
1305
+ yield* turn.start(request, signal);
1306
+ }
1307
+ finally {
1308
+ // Custom adapters may not participate in the shared attempt accounting.
1309
+ if (request.retryState && request.retryState.attempts === before)
1310
+ request.retryState.attempts++;
1311
+ }
1312
+ },
1313
+ resetContinuation: () => turn.resetContinuation?.(),
1314
+ close: () => turn.close()
1315
+ };
1316
+ }
1317
+ function modelAttemptFailureDiagnostic(diagnostic, summary) {
1318
+ if (summary === undefined)
1319
+ return diagnostic;
1320
+ const prefix = `Model request failed after ${summary.attempts} attempts (${summary.retries} retries). `;
1321
+ const availableCharacters = Math.max(0, 1_000 - [...prefix].length);
1322
+ return {
1323
+ code: diagnostic.code,
1324
+ message: `${prefix}${[...diagnostic.message].slice(0, availableCharacters).join('')}`
1325
+ };
1326
+ }
1327
+ async function closeModelAdapters(adapters) {
1328
+ await Promise.all([...new Set(adapters)].flatMap((adapter) => adapter.close === undefined ? [] : [adapter.close()]));
1329
+ }
1330
+ function truncateUtf8(value, maximumBytes) {
1331
+ const bytes = Buffer.from(value);
1332
+ if (bytes.length <= maximumBytes)
1333
+ return value;
1334
+ let end = maximumBytes;
1335
+ while (end > 0 && (bytes[end] & 0xc0) === 0x80)
1336
+ end--;
1337
+ return bytes.subarray(0, end).toString('utf8');
1338
+ }
1339
+ function publicModelUsage(usage) {
1340
+ const { rolloutBudgetUnits, ...publicUsage } = usage;
1341
+ void rolloutBudgetUnits;
1342
+ return publicUsage;
1343
+ }
1344
+ async function generateSessionTitle(adapter, prompt, reasoningEffort, signal, onAttemptDiagnostic) {
1345
+ let titleInput = '';
1346
+ let characters = 0;
1347
+ for (const character of prompt) {
1348
+ if (characters++ >= 1000)
1349
+ break;
1350
+ titleInput += character;
1351
+ }
1352
+ let output = '';
1353
+ let completed = false;
1354
+ const turn = createModelTurnSession(adapter);
1355
+ try {
1356
+ for await (const event of turn.start({
1357
+ retryState: { attempts: 0, maxAttempts: 1 },
1358
+ system: sessionTitlePrompt,
1359
+ messages: [{ role: 'user', content: titleInput }],
1360
+ tools: [],
1361
+ reasoningEffort,
1362
+ onAttemptDiagnostic
1363
+ }, signal)) {
1364
+ if (event.type === 'text.completed')
1365
+ output = event.text;
1366
+ else if (event.type === 'completed')
1367
+ completed = event.reason === 'completed';
1368
+ }
1369
+ }
1370
+ finally {
1371
+ await turn.close();
1372
+ }
1373
+ if (!completed)
1374
+ return undefined;
1375
+ const line = output
1376
+ .replace(/<think>[\s\S]*?<\/think>\s*/giu, '')
1377
+ .split(/\r?\n/u)
1378
+ .map((value) => value.trim())
1379
+ .find(Boolean);
1380
+ if (!line)
1381
+ return undefined;
1382
+ return [...line].slice(0, 50).join('');
1383
+ }
1384
+ async function restoreMessages(store, sessionId, records, options) {
1385
+ const messages = [];
1386
+ const modelProjection = new Map((options.projection ??
1387
+ buildContextProjection(records, (await store.getSession(sessionId)).workspace)).entries.map((entry) => [entry.record.recordId, entry.message]));
1388
+ let userMessages = [];
1389
+ let ignoredImages = 0;
1390
+ let currentTurnUserIndex;
1391
+ let environmentState;
1392
+ for (const record of records) {
1393
+ const payload = record.payload;
1394
+ const compactSummary = compactSummaryFromCheckpoint(record);
1395
+ if (record.type === 'turn.user' && typeof payload.prompt === 'string') {
1396
+ userMessages.push(payload.prompt);
1397
+ let images = [];
1398
+ if (options.includeImages)
1399
+ try {
1400
+ images = await store.readInputImages(sessionId, payload.images);
1401
+ }
1402
+ catch (error) {
1403
+ if (!(error instanceof MarAgentError) || error.code !== 'MAR_AGENT_SESSION_CORRUPT')
1404
+ throw error;
1405
+ ignoredImages += Array.isArray(payload.images) ? payload.images.length : 1;
1406
+ }
1407
+ if (record.turnId === options.currentTurnId)
1408
+ currentTurnUserIndex = messages.length;
1409
+ messages.push({
1410
+ role: 'user',
1411
+ content: payload.prompt,
1412
+ ...(images.length ? { images } : {})
1413
+ });
1414
+ }
1415
+ else if ((record.type === 'message.completed' || record.type === 'plan.completed') &&
1416
+ typeof payload.text === 'string')
1417
+ messages.push({ role: 'assistant', content: payload.text });
1418
+ else if (compactSummary !== undefined) {
1419
+ environmentState = restoreEnvironmentState({ version: 1, state: payload.environment });
1420
+ if (environmentState)
1421
+ messages.push(environmentContextUpdate(environmentState));
1422
+ const history = replacementHistoryFromCheckpoint(record);
1423
+ userMessages =
1424
+ history
1425
+ ?.filter((message) => message.kind === 'user_input')
1426
+ .map((message) => message.content) ?? [];
1427
+ messages.push(...(history
1428
+ ? compactedHistoryMessages(history)
1429
+ : [{ role: 'user', content: continuationMessage(compactSummary) }]));
1430
+ }
1431
+ else if (record.type === 'context.environment') {
1432
+ const current = restoreEnvironmentState(payload);
1433
+ if (current) {
1434
+ const message = environmentContextUpdate(current, environmentState);
1435
+ if (message)
1436
+ messages.push(message);
1437
+ environmentState = current;
1438
+ }
1439
+ }
1440
+ else if (record.type === 'model.context') {
1441
+ const message = modelProjection.get(record.recordId);
1442
+ if (message)
1443
+ messages.push(message);
1444
+ }
1445
+ }
1446
+ const completedToolCalls = new Set(messages.filter((message) => message.role === 'tool').map((message) => message.callId));
1447
+ return {
1448
+ environmentState,
1449
+ userMessages,
1450
+ messages: messages.filter((message) => {
1451
+ if (message.role === 'tool_call')
1452
+ return completedToolCalls.has(message.callId);
1453
+ if (message.role !== 'provider' || message.provider !== 'OPENAI_RESPONSES')
1454
+ return true;
1455
+ const item = message.item;
1456
+ if (item.type !== 'function_call' && item.type !== 'custom_tool_call')
1457
+ return true;
1458
+ return typeof item.call_id !== 'string' || completedToolCalls.has(item.call_id);
1459
+ }),
1460
+ ignoredImages,
1461
+ currentTurnUserIndex
1462
+ };
1463
+ }
1464
+ function currentExecutionImages(modelInputImages, toolImages) {
1465
+ return [
1466
+ ...(modelInputImages ?? []).map((image) => ({
1467
+ mimeType: image.mimeType,
1468
+ data: Buffer.from(image.dataBase64, 'base64')
1469
+ })),
1470
+ ...toolImages
1471
+ ]
1472
+ .slice(-5)
1473
+ .map((image) => ({ mimeType: image.mimeType, data: Buffer.from(image.data) }));
1474
+ }
1475
+ function latestContextInputTokens(records, selectedModelId) {
1476
+ let usage;
1477
+ // readContext starts at compact.completed, whose execution header is before the boundary.
1478
+ let activeModelId = selectedModelId;
1479
+ for (const record of records) {
1480
+ const payload = record.payload;
1481
+ if (compactSummaryFromCheckpoint(record) !== undefined) {
1482
+ usage = undefined;
1483
+ activeModelId = modelIdFromPayload(payload);
1484
+ continue;
1485
+ }
1486
+ if (record.type === 'execution.header') {
1487
+ activeModelId = modelIdFromPayload(payload);
1488
+ if (activeModelId !== selectedModelId)
1489
+ usage = undefined;
1490
+ continue;
1491
+ }
1492
+ if (payload.type === 'usage.updated' && activeModelId === selectedModelId) {
1493
+ const value = payload.contextInputTokens ?? payload.inputTokens;
1494
+ if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0)
1495
+ usage = value;
1496
+ }
1497
+ }
1498
+ return usage;
1499
+ }
1500
+ const PROVIDER_CONTEXT_OVERFLOW_CODES = new Set([
1501
+ 'mar_agent_context_limit',
1502
+ 'context_length_exceeded',
1503
+ 'context_overflow',
1504
+ 'context_window_exceeded',
1505
+ 'prompt_too_long',
1506
+ 'request_too_large',
1507
+ 'string_above_max_length'
1508
+ ]);
1509
+ const PROVIDER_CONTEXT_OVERFLOW_PATTERNS = [
1510
+ /prompt is too long/iu,
1511
+ /request_too_large/iu,
1512
+ /input is too long for requested model/iu,
1513
+ /exceeds (?:the )?(?:model'?s )?(?:maximum )?context (?:length|window)/iu,
1514
+ /input token count.*exceeds the maximum/iu,
1515
+ /tokens in request more than max tokens allowed/iu,
1516
+ /maximum prompt length is \d+/iu,
1517
+ /reduce the length of the messages/iu,
1518
+ /maximum context length is \d+ tokens/iu,
1519
+ /exceeds (?:the )?maximum allowed input length/iu,
1520
+ /greater than the context length/iu,
1521
+ /context window exceeds limit/iu,
1522
+ /exceeded model token limit/iu,
1523
+ /context[_ ]length[_ ]exceeded/iu,
1524
+ /request entity too large/iu,
1525
+ /input length.*exceeds.*context length/iu,
1526
+ /prompt too long; exceeded (?:max )?context length/iu,
1527
+ /model_context_window_exceeded/iu,
1528
+ /too many tokens/iu,
1529
+ /token limit exceeded/iu
1530
+ ];
1531
+ const PROVIDER_CONTEXT_OVERFLOW_EXCLUSIONS = [
1532
+ /^(?:[^:]+: )?(?:throttling error|service unavailable):/iu,
1533
+ /rate limit/iu,
1534
+ /too many requests/iu
1535
+ ];
1536
+ function isProviderContextOverflow(error) {
1537
+ if (!(error instanceof MarAgentError))
1538
+ return false;
1539
+ const code = error.code.trim().toLowerCase();
1540
+ if (PROVIDER_CONTEXT_OVERFLOW_CODES.has(code))
1541
+ return true;
1542
+ if (error.details?.status === 413)
1543
+ return true;
1544
+ const message = error.message;
1545
+ // K3-compatible gateways report context overflow as HTTP 401 instead of a
1546
+ // standard provider error code. Keep this exception scoped to that exact shape.
1547
+ if (error.details?.status === 401 && /supports only [\d,.]+[km]? context/iu.test(message))
1548
+ return true;
1549
+ if (code !== 'invalid_request_error' && code !== 'mar_agent_model_protocol_error')
1550
+ return false;
1551
+ return (!PROVIDER_CONTEXT_OVERFLOW_EXCLUSIONS.some((pattern) => pattern.test(message)) &&
1552
+ PROVIDER_CONTEXT_OVERFLOW_PATTERNS.some((pattern) => pattern.test(message)));
1553
+ }
1554
+ function modelIdFromPayload(payload, key = 'modelId') {
1555
+ const value = payload[key];
1556
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
1557
+ }
1558
+ function insertContextualInstructions(messages, index, content, environmentContext) {
1559
+ if (index === undefined)
1560
+ return [...messages];
1561
+ const insertionIndex = Math.max(0, Math.min(index, messages.length));
1562
+ const contextualMessages = [];
1563
+ if (content !== undefined)
1564
+ contextualMessages.push({ role: 'user', content });
1565
+ const result = [
1566
+ ...messages.slice(0, insertionIndex),
1567
+ ...contextualMessages,
1568
+ ...messages.slice(insertionIndex)
1569
+ ];
1570
+ if (environmentContext !== undefined)
1571
+ result.splice(insertionIndex + contextualMessages.length, 0, {
1572
+ role: 'user',
1573
+ content: environmentContext,
1574
+ contextKind: 'environment'
1575
+ });
1576
+ return result;
1577
+ }
1578
+ function estimatedRequestTokens(system, messages, tools, images) {
1579
+ const transientImageCount = messages.reduce((total, message) => total + (message.images?.length ?? 0), images?.length ?? 0);
1580
+ const textMessages = messages.map((message) => {
1581
+ const textMessage = { ...message };
1582
+ delete textMessage.images;
1583
+ return textMessage;
1584
+ });
1585
+ return (countModelTokens(`${system}${stableJson(textMessages)}${stableJson(tools)}`) +
1586
+ transientImageCount * AGENT_EXECUTION_POLICY.estimatedTokensPerImage);
1587
+ }
1588
+ function boundedModelToolOutput(value) {
1589
+ const result = truncateModelText(value, AGENT_EXECUTION_POLICY.modelToolOutputTokens);
1590
+ return { content: result.content, truncated: result.truncated };
1591
+ }
1592
+ function stableJson(value) {
1593
+ if (Array.isArray(value))
1594
+ return `[${value.map(stableJson).join(',')}]`;
1595
+ if (value !== null && typeof value === 'object')
1596
+ return `{${Object.entries(value)
1597
+ .sort(([left], [right]) => left.localeCompare(right))
1598
+ .map(([key, entry]) => `${JSON.stringify(key)}:${stableJson(entry)}`)
1599
+ .join(',')}}`;
1600
+ return JSON.stringify(value) ?? 'undefined';
1601
+ }
1602
+ function structuredToolEventData(toolName, value) {
1603
+ if (!isRecord(value))
1604
+ return undefined;
1605
+ if ((toolName === 'agent_start' ||
1606
+ toolName === 'agent_wait' ||
1607
+ toolName === 'agent_message' ||
1608
+ toolName === 'agent_cancel') &&
1609
+ isSubagentTaskSnapshot(value))
1610
+ return value;
1611
+ if (toolName === 'read' &&
1612
+ value.mode === 'batch' &&
1613
+ Array.isArray(value.results) &&
1614
+ typeof value.truncated === 'boolean' &&
1615
+ value.results.every((result) => isRecord(result) &&
1616
+ typeof result.path === 'string' &&
1617
+ (result.startLine === undefined || isNonnegativeInteger(result.startLine)) &&
1618
+ (result.endLine === undefined || isNonnegativeInteger(result.endLine)) &&
1619
+ (result.error === undefined ||
1620
+ (isRecord(result.error) &&
1621
+ typeof result.error.code === 'string' &&
1622
+ typeof result.error.message === 'string')))) {
1623
+ const result = value;
1624
+ return {
1625
+ mode: 'batch',
1626
+ truncated: result.truncated,
1627
+ results: result.results.map((item) => ({
1628
+ path: item.path,
1629
+ ...('startLine' in item && item.startLine !== undefined
1630
+ ? { startLine: item.startLine }
1631
+ : {}),
1632
+ ...('endLine' in item && item.endLine !== undefined ? { endLine: item.endLine } : {}),
1633
+ ...('error' in item ? { error: { ...item.error } } : {})
1634
+ }))
1635
+ };
1636
+ }
1637
+ if (toolName === 'view_image' &&
1638
+ typeof value.path === 'string' &&
1639
+ (value.mimeType === 'image/png' ||
1640
+ value.mimeType === 'image/jpeg' ||
1641
+ value.mimeType === 'image/webp') &&
1642
+ isNonnegativeInteger(value.bytes) &&
1643
+ typeof value.sha256 === 'string' &&
1644
+ /^[a-f0-9]{64}$/u.test(value.sha256))
1645
+ return value;
1646
+ if (toolName === 'exec' &&
1647
+ (value.status === 'running' || value.status === 'completed' || value.status === 'cancelled') &&
1648
+ typeof value.stdout === 'string' &&
1649
+ typeof value.stderr === 'string' &&
1650
+ typeof value.truncated === 'boolean' &&
1651
+ (value.processId === undefined || typeof value.processId === 'string') &&
1652
+ (value.exitCode === undefined ||
1653
+ value.exitCode === null ||
1654
+ (typeof value.exitCode === 'number' && Number.isInteger(value.exitCode))) &&
1655
+ isNonnegativeInteger(value.stdoutBytes) &&
1656
+ isNonnegativeInteger(value.stderrBytes) &&
1657
+ isNonnegativeInteger(value.stdoutDroppedBytes) &&
1658
+ isNonnegativeInteger(value.stderrDroppedBytes))
1659
+ return value;
1660
+ if (toolName === 'apply_patch' &&
1661
+ Array.isArray(value.files) &&
1662
+ value.files.every((file) => isRecord(file) &&
1663
+ typeof file.path === 'string' &&
1664
+ file.path.length > 0 &&
1665
+ (file.targetPath === undefined || typeof file.targetPath === 'string') &&
1666
+ (file.operation === 'added' ||
1667
+ file.operation === 'modified' ||
1668
+ file.operation === 'deleted' ||
1669
+ file.operation === 'moved') &&
1670
+ isNonnegativeInteger(file.addedLines) &&
1671
+ isNonnegativeInteger(file.deletedLines)) &&
1672
+ isRecord(value.totals) &&
1673
+ isNonnegativeInteger(value.totals.files) &&
1674
+ isNonnegativeInteger(value.totals.addedLines) &&
1675
+ isNonnegativeInteger(value.totals.deletedLines))
1676
+ return value;
1677
+ return undefined;
1678
+ }
1679
+ function structuredToolArtifacts(toolName, value) {
1680
+ if (value === undefined || !['codex_image_gen', 'byted_ark_image_gen'].includes(toolName))
1681
+ return undefined;
1682
+ if (value.length !== 1 ||
1683
+ value.some((artifact) => artifact.kind !== 'image' ||
1684
+ artifact.mimeType !== 'image/png' ||
1685
+ typeof artifact.name !== 'string' ||
1686
+ artifact.name.length === 0 ||
1687
+ typeof artifact.fileName !== 'string' ||
1688
+ !/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}\.png$/u.test(artifact.fileName) ||
1689
+ !isNonnegativeInteger(artifact.byteSize) ||
1690
+ typeof artifact.sha256 !== 'string' ||
1691
+ !/^[a-f0-9]{64}$/u.test(artifact.sha256)))
1692
+ throw new MarAgentError('MAR_AGENT_TOOL_OUTPUT_INVALID', 'Codex image generation artifact is invalid.');
1693
+ return value.map((artifact) => ({ ...artifact }));
1694
+ }
1695
+ function eventForPersistence(event) {
1696
+ if (event.type === 'message.delta' || event.type === 'context.compacting')
1697
+ return undefined;
1698
+ if (event.type !== 'tool.completed' || event.toolName !== 'exec' || !event.data)
1699
+ return event;
1700
+ const metadata = Object.fromEntries(Object.entries(event.data).filter(([key]) => key !== 'stdout' && key !== 'stderr'));
1701
+ return { ...event, data: metadata };
1702
+ }
1703
+ function validateImageGenerationConfiguration(configuration) {
1704
+ const imageGeneration = configuration.imageGeneration;
1705
+ if (imageGeneration === undefined)
1706
+ return;
1707
+ let generateEndpoint;
1708
+ let editEndpoint;
1709
+ try {
1710
+ generateEndpoint = new URL(imageGeneration.generateEndpoint);
1711
+ editEndpoint = new URL(imageGeneration.editEndpoint);
1712
+ }
1713
+ catch {
1714
+ return invalidImageGenerationConfiguration();
1715
+ }
1716
+ if ((imageGeneration.provider !== undefined &&
1717
+ (imageGeneration.provider.trim().length === 0 || imageGeneration.provider.length > 64)) ||
1718
+ imageGeneration.credentialProvider === undefined ||
1719
+ imageGeneration.imageModelId.trim().length === 0 ||
1720
+ imageGeneration.imageModelId.length > 256 ||
1721
+ (imageGeneration.httpVersion !== '1.1' && imageGeneration.httpVersion !== '2') ||
1722
+ generateEndpoint.origin !== editEndpoint.origin ||
1723
+ !isAllowedImageGenerationEndpoint(generateEndpoint) ||
1724
+ !isAllowedImageGenerationEndpoint(editEndpoint))
1725
+ invalidImageGenerationConfiguration();
1726
+ }
1727
+ function normalizeGeneratedImageDisplayDirectory(value) {
1728
+ if (value === undefined)
1729
+ return undefined;
1730
+ const normalized = posix.normalize(value.replaceAll('\\', '/')).replace(/\/+$/u, '');
1731
+ if (!normalized.startsWith('/') ||
1732
+ normalized === '/' ||
1733
+ normalized.length > 4096 ||
1734
+ normalized.includes('\0'))
1735
+ throw new MarAgentError('MAR_AGENT_HOST_INCOMPATIBLE', 'Generated image display directory is invalid.');
1736
+ return normalized;
1737
+ }
1738
+ function isAllowedImageGenerationEndpoint(endpoint) {
1739
+ const loopback = endpoint.hostname === '127.0.0.1' ||
1740
+ endpoint.hostname === 'localhost' ||
1741
+ endpoint.hostname === '::1';
1742
+ return (endpoint.username.length === 0 &&
1743
+ endpoint.password.length === 0 &&
1744
+ endpoint.search.length === 0 &&
1745
+ endpoint.hash.length === 0 &&
1746
+ (endpoint.protocol === 'https:' || (endpoint.protocol === 'http:' && loopback)));
1747
+ }
1748
+ function invalidImageGenerationConfiguration() {
1749
+ throw new MarAgentError('MAR_AGENT_MODEL_CONFIG_INVALID', 'Model image generation configuration is invalid.');
1750
+ }
1751
+ function isRecord(value) {
1752
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
1753
+ }
1754
+ function isSubagentTaskSnapshot(value) {
1755
+ return (typeof value.agentId === 'string' &&
1756
+ value.agentId.length > 0 &&
1757
+ value.agentId.length <= 128 &&
1758
+ typeof value.description === 'string' &&
1759
+ value.description.length > 0 &&
1760
+ value.description.length <= TOOL_EXECUTION_LIMITS.subagentDescriptionMaxCharacters &&
1761
+ (value.status === 'queued' ||
1762
+ value.status === 'running' ||
1763
+ value.status === 'completed' ||
1764
+ value.status === 'failed' ||
1765
+ value.status === 'cancelled' ||
1766
+ value.status === 'interrupted') &&
1767
+ (value.modelId === undefined || typeof value.modelId === 'string') &&
1768
+ (value.modelName === undefined || typeof value.modelName === 'string') &&
1769
+ (value.reasoningEffort === undefined ||
1770
+ (typeof value.reasoningEffort === 'string' &&
1771
+ ['low', 'medium', 'high', 'xhigh', 'max', 'ultra'].includes(value.reasoningEffort))) &&
1772
+ (value.latestMessage === undefined ||
1773
+ (isRecord(value.latestMessage) &&
1774
+ typeof value.latestMessage.itemId === 'string' &&
1775
+ typeof value.latestMessage.turnId === 'string' &&
1776
+ (value.latestMessage.phase === 'commentary' ||
1777
+ value.latestMessage.phase === 'final_answer') &&
1778
+ typeof value.latestMessage.text === 'string' &&
1779
+ typeof value.latestMessage.timestamp === 'string' &&
1780
+ typeof value.latestMessage.truncated === 'boolean')) &&
1781
+ (value.summary === undefined || typeof value.summary === 'string') &&
1782
+ (value.changedFiles === undefined ||
1783
+ (Array.isArray(value.changedFiles) &&
1784
+ value.changedFiles.every((path) => typeof path === 'string'))) &&
1785
+ (value.verification === undefined ||
1786
+ (Array.isArray(value.verification) &&
1787
+ value.verification.every((item) => typeof item === 'string'))) &&
1788
+ (value.evidence === undefined ||
1789
+ (Array.isArray(value.evidence) &&
1790
+ value.evidence.every((item) => isRecord(item) &&
1791
+ typeof item.path === 'string' &&
1792
+ (item.startLine === undefined ||
1793
+ (typeof item.startLine === 'number' &&
1794
+ Number.isInteger(item.startLine) &&
1795
+ item.startLine >= 1)) &&
1796
+ (item.endLine === undefined ||
1797
+ (typeof item.endLine === 'number' &&
1798
+ Number.isInteger(item.endLine) &&
1799
+ item.endLine >= 1))))) &&
1800
+ (value.errorCode === undefined || typeof value.errorCode === 'string'));
1801
+ }
1802
+ function isNonnegativeInteger(value) {
1803
+ return typeof value === 'number' && Number.isInteger(value) && value >= 0;
1804
+ }