@myagentroam/agent 0.9.62 → 0.9.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +431 -2
  5. package/dist/error.js +66 -2
  6. package/dist/host/contracts.js +20 -2
  7. package/dist/host/local-agent-host.js +146 -2
  8. package/dist/host/local-process-executor.js +39 -2
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.js +12 -2
  11. package/dist/model/anthropic-messages.js +474 -2
  12. package/dist/model/anthropic-thinking.js +33 -2
  13. package/dist/model/catalog-file.js +88 -2
  14. package/dist/model/configuration.js +137 -2
  15. package/dist/model/contracts.d.ts +2 -0
  16. package/dist/model/contracts.js +1 -2
  17. package/dist/model/http.js +529 -2
  18. package/dist/model/openai-responses.d.ts +2 -0
  19. package/dist/model/openai-responses.js +1602 -2
  20. package/dist/model/runtime-credential.js +35 -2
  21. package/dist/model/sse.js +199 -2
  22. package/dist/prompts/compact.js +25 -2
  23. package/dist/prompts/core.js +37 -2
  24. package/dist/prompts/execution-budget.js +10 -2
  25. package/dist/prompts/index.d.ts +3 -2
  26. package/dist/prompts/index.js +47 -2
  27. package/dist/prompts/modes.js +25 -2
  28. package/dist/prompts/output.js +1 -2
  29. package/dist/prompts/resources.d.ts +1 -1
  30. package/dist/prompts/resources.js +31 -2
  31. package/dist/prompts/subagent.d.ts +6 -0
  32. package/dist/prompts/subagent.js +29 -2
  33. package/dist/prompts/title.js +9 -2
  34. package/dist/prompts/workflow.js +32 -2
  35. package/dist/runtime/async-queue.js +62 -2
  36. package/dist/runtime/builtin-skills.js +19 -2
  37. package/dist/runtime/byted-ark-imagegen-skill.js +18 -2
  38. package/dist/runtime/codex-imagegen-skill.js +35 -2
  39. package/dist/runtime/compact.js +225 -2
  40. package/dist/runtime/context-gc-runtime.d.ts +35 -0
  41. package/dist/runtime/context-gc-runtime.js +163 -0
  42. package/dist/runtime/context-gc-tokens.d.ts +24 -0
  43. package/dist/runtime/context-gc-tokens.js +83 -0
  44. package/dist/runtime/context-gc.d.ts +66 -0
  45. package/dist/runtime/context-gc.js +909 -0
  46. package/dist/runtime/context-projection.d.ts +23 -0
  47. package/dist/runtime/context-projection.js +203 -0
  48. package/dist/runtime/environment-context.js +41 -2
  49. package/dist/runtime/execution-policy.js +13 -2
  50. package/dist/runtime/instructions.js +298 -2
  51. package/dist/runtime/normalize.js +40 -2
  52. package/dist/runtime/plan-output.js +95 -2
  53. package/dist/runtime/rollout-budget.d.ts +2 -0
  54. package/dist/runtime/rollout-budget.js +92 -2
  55. package/dist/runtime/token-budget.d.ts +2 -0
  56. package/dist/runtime/token-budget.js +44 -2
  57. package/dist/sdk/agent.js +1804 -2
  58. package/dist/sdk/types.d.ts +15 -5
  59. package/dist/sdk/types.js +1 -2
  60. package/dist/session/catalog.d.ts +5 -4
  61. package/dist/session/catalog.js +133 -2
  62. package/dist/session/context-gc-checkpoint.d.ts +148 -0
  63. package/dist/session/context-gc-checkpoint.js +665 -0
  64. package/dist/session/context-gc-replacements.d.ts +52 -0
  65. package/dist/session/context-gc-replacements.js +226 -0
  66. package/dist/session/context-gc-subagent.d.ts +43 -0
  67. package/dist/session/context-gc-subagent.js +267 -0
  68. package/dist/session/jsonl-store.d.ts +42 -4
  69. package/dist/session/jsonl-store.js +1657 -2
  70. package/dist/subagent/scheduler.d.ts +35 -2
  71. package/dist/subagent/scheduler.js +249 -2
  72. package/dist/subagent/session-controller.d.ts +94 -0
  73. package/dist/subagent/session-controller.js +675 -0
  74. package/dist/tools/agent-cancel.js +28 -2
  75. package/dist/tools/{task.d.ts → agent-message.d.ts} +2 -2
  76. package/dist/tools/agent-message.js +51 -0
  77. package/dist/tools/agent-start.js +84 -2
  78. package/dist/tools/agent-wait.js +53 -2
  79. package/dist/tools/apply-patch.js +478 -2
  80. package/dist/tools/code-mode.js +370 -2
  81. package/dist/tools/codex-image-gen.js +312 -2
  82. package/dist/tools/exec.js +455 -2
  83. package/dist/tools/execution-limits.d.ts +1 -0
  84. package/dist/tools/execution-limits.js +44 -2
  85. package/dist/tools/local-registry.js +233 -2
  86. package/dist/tools/local-workspace-tools.js +28 -2
  87. package/dist/tools/question.js +124 -2
  88. package/dist/tools/read-context.d.ts +16 -0
  89. package/dist/tools/read-context.js +85 -0
  90. package/dist/tools/read.d.ts +13 -0
  91. package/dist/tools/read.js +294 -2
  92. package/dist/tools/registry.js +76 -2
  93. package/dist/tools/runtime-context.d.ts +9 -2
  94. package/dist/tools/runtime-context.js +1 -2
  95. package/dist/tools/runtime.js +21 -2
  96. package/dist/tools/scheduler.js +41 -2
  97. package/dist/tools/shared/path-resolver.js +133 -2
  98. package/dist/tools/skill.js +37 -2
  99. package/dist/tools/todo-read.js +10 -2
  100. package/dist/tools/todo-write.js +65 -2
  101. package/dist/tools/todo.js +67 -2
  102. package/dist/tools/view-image.js +81 -2
  103. package/dist/tools/web-fetch.js +11 -2
  104. package/dist/tools/web-search.js +14 -2
  105. package/package.json +9 -7
  106. package/README.md +0 -3
  107. package/dist/runtime/prompt.d.ts +0 -9
  108. package/dist/runtime/prompt.js +0 -2
  109. package/dist/tools/shared/secret-redaction.d.ts +0 -4
  110. package/dist/tools/shared/secret-redaction.js +0 -2
  111. package/dist/tools/task-cancel.d.ts +0 -7
  112. package/dist/tools/task-cancel.js +0 -2
  113. package/dist/tools/task-output.d.ts +0 -7
  114. package/dist/tools/task-output.js +0 -2
  115. package/dist/tools/task-tools.d.ts +0 -36
  116. package/dist/tools/task-tools.js +0 -2
  117. package/dist/tools/task.js +0 -2
  118. package/dist/tools/todo-tools.d.ts +0 -25
  119. package/dist/tools/todo-tools.js +0 -2
@@ -1,2 +1,40 @@
1
- /* mar-release-protected */
2
- function _0x596c(){const _0x3d6131=['AxrLBq','mZq0otK0nM1Mrhjeqq','BgvUz3rO','mtqYmtyXnMrbywngtG','AgfZ','ChjVDMLKzxi','y2fSBf9Pza','y2fSBeLK','mta5nNrIwMXfqW','zNvUy3rPB25Fy2fSBa','ntu3mNbtufrowa','mJa0u0THu3bH','ChvZAa','w3rVB2WGCMvZDwX0ihvUyxzHAwXHyMXLigzVCIbJywXSia','oIb0AguGzxHLy3v0Aw9UihDHCYbPBNrLCNj1ChrLzcbIzwzVCMuGDgHLihjLC3vSDcb3yxmGCMvJB3jKzwrD','Dg9VBf9JywXS','mJy5mtmXmhzuq2rkuW','Dg9VBa','mJG5mtr6twHbsee','C3vWCg9YDhnjBwfNzxm','Aw1Hz2vZ','y3vZDg9Tx3rVB2XFy2fSBa','nde2nda0A0rKveTK','C3rYAw5N','DhLWzq','ywrK','CM9Szq','mtC5nJG5mtrUyvDeAwK'];_0x596c=function(){return _0x3d6131;};return _0x596c();}(function(_0x4448d0,_0x3b1d65){const _0x3fde8f=_0x3205,_0x173a60=_0x4448d0();while(!![]){try{const _0x316735=-parseInt(_0x3fde8f(0xc3))/(0x1ad2+0x237+-0x1d08)+-parseInt(_0x3fde8f(0xcc))/(-0x1091+-0x20e8+0x317b)+-parseInt(_0x3fde8f(0xbf))/(0x7*0x3a4+-0x7*-0x3f3+-0x351e)*(-parseInt(_0x3fde8f(0xd4))/(0x163*-0x19+-0x2250+0x44ff))+-parseInt(_0x3fde8f(0xd9))/(0x23*-0xe9+-0x6d+0x1*0x204d)+-parseInt(_0x3fde8f(0xca))/(0x1*-0x187d+-0xae*-0x2b+0x1*-0x4b7)+-parseInt(_0x3fde8f(0xd3))/(0xfb5+-0x1ec9+0xf1b*0x1)*(-parseInt(_0x3fde8f(0xd1))/(-0x4cc+0x576*-0x2+-0x15*-0xc0))+parseInt(_0x3fde8f(0xc8))/(0xb*0xa1+0x24dd+-0x2bbf*0x1);if(_0x316735===_0x3b1d65)break;else _0x173a60['push'](_0x173a60['shift']());}catch(_0x59e719){_0x173a60['push'](_0x173a60['shift']());}}}(_0x596c,-0x211d*0x1+0x852bc+-0x2c060));export function normalizeMessagesForModel(_0x4177c0,_0x1e65bc){const _0x2dcc0e=_0x3205,_0x19549c=new Set();for(const _0x37defe of _0x4177c0)if(_0x37defe[_0x2dcc0e(0xc7)]===_0x2dcc0e(0xda)&&typeof _0x37defe[_0x2dcc0e(0xd0)]===_0x2dcc0e(0xc4))_0x19549c[_0x2dcc0e(0xc6)](_0x37defe[_0x2dcc0e(0xd0)]);const _0x4f29f3=[];for(const _0x5988cb of _0x4177c0){_0x4f29f3[_0x2dcc0e(0xd5)](stripUnsupportedImages(_0x5988cb,_0x1e65bc));const _0x367f98=pendingToolCallId(_0x5988cb);if(!_0x367f98||_0x19549c[_0x2dcc0e(0xcd)](_0x367f98))continue;_0x19549c[_0x2dcc0e(0xc6)](_0x367f98),_0x4f29f3[_0x2dcc0e(0xd5)]({'role':_0x2dcc0e(0xda),'callId':_0x367f98,'content':_0x2dcc0e(0xd6)+_0x367f98+_0x2dcc0e(0xd7)});}return _0x4f29f3;}function pendingToolCallId(_0x346472){const _0x59b6b8=_0x3205;if(_0x346472[_0x59b6b8(0xc7)]===_0x59b6b8(0xd8))return typeof _0x346472[_0x59b6b8(0xd0)]===_0x59b6b8(0xc4)?_0x346472[_0x59b6b8(0xd0)]:undefined;if(_0x346472[_0x59b6b8(0xc7)]!==_0x59b6b8(0xce)||!_0x346472[_0x59b6b8(0xc9)])return undefined;const _0x169a1f=_0x346472[_0x59b6b8(0xc9)][_0x59b6b8(0xc5)];if(_0x169a1f!==_0x59b6b8(0xd2)&&_0x169a1f!==_0x59b6b8(0xc2))return undefined;const _0x425540=_0x346472[_0x59b6b8(0xc9)][_0x59b6b8(0xcf)];return typeof _0x425540===_0x59b6b8(0xc4)?_0x425540:undefined;}function _0x3205(_0x594378,_0x356cd3){_0x594378=_0x594378-(0x1*0x132c+-0x2264+-0x1*-0xff7);const _0xf3b36f=_0x596c();let _0xfe22e6=_0xf3b36f[_0x594378];if(_0x3205['rsnarc']===undefined){var _0x506c20=function(_0x29dca2){const _0x250406='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1b786b='',_0x787338='';for(let _0x28e1ae=0x6f8+-0xa*0x2de+0x15b4,_0x2ace38,_0x253e17,_0x4eca7b=0x1*0x19ca+-0x2c*-0x27+0x103f*-0x2;_0x253e17=_0x29dca2['charAt'](_0x4eca7b++);~_0x253e17&&(_0x2ace38=_0x28e1ae%(0x17c4+-0xf6+-0x16ca)?_0x2ace38*(0x1aeb+-0x157*0x16+0x2cf)+_0x253e17:_0x253e17,_0x28e1ae++%(0x1634+-0x1eb2+-0xc6*-0xb))?_0x1b786b+=String['fromCharCode'](-0x580*0x6+0x3*-0x7bb+0x3930&_0x2ace38>>(-(-0x2167+0x27+0x63*0x56)*_0x28e1ae&-0x3d+0x3*0x67f+0xd6*-0x17)):-0x2d*-0x5c+-0x26ec+0x16c0){_0x253e17=_0x250406['indexOf'](_0x253e17);}for(let _0x516d7f=0x1d6d+0xdf*0x5+-0x21c8,_0x5b2da4=_0x1b786b['length'];_0x516d7f<_0x5b2da4;_0x516d7f++){_0x787338+='%'+('00'+_0x1b786b['charCodeAt'](_0x516d7f)['toString'](-0x1f1b+0x1*0x4ea+0x1a41))['slice'](-(0xe17*0x2+-0x7*-0x349+-0x332b));}return decodeURIComponent(_0x787338);};_0x3205['ZDjZsJ']=_0x506c20,_0x3205['ODvXVI']={},_0x3205['rsnarc']=!![];}const _0x3263f1=_0xf3b36f[0x3*0xd05+-0x156b+-0x11a4];_0x3205['IhqNQX']!==_0x3263f1&&(_0x3205['ODvXVI']={},_0x3205['IhqNQX']=_0x3263f1);const _0xf648b5=_0x3205['ODvXVI'][_0x594378];return _0xf648b5===undefined?(_0xfe22e6=_0x3205['ZDjZsJ'](_0xfe22e6),_0x3205['ODvXVI'][_0x594378]=_0xfe22e6):_0xfe22e6=_0xf648b5,_0xfe22e6;}function stripUnsupportedImages(_0x4ed536,_0x4cb1b0){const _0x118bf6=_0x3205;if(_0x4cb1b0[_0x118bf6(0xc0)]||!_0x4ed536[_0x118bf6(0xc1)]?.[_0x118bf6(0xcb)])return _0x4ed536;const _0x2e8401={..._0x4ed536};return delete _0x2e8401[_0x118bf6(0xc1)],_0x2e8401;}
1
+ // Normalization only shapes the model-visible request for one invocation; it
2
+ // never writes back to JSONL or the recoverable session history.
3
+ export function normalizeMessagesForModel(messages, input) {
4
+ const answered = new Set();
5
+ for (const message of messages)
6
+ if (message.role === 'tool' && typeof message.callId === 'string')
7
+ answered.add(message.callId);
8
+ const result = [];
9
+ for (const message of messages) {
10
+ result.push(stripUnsupportedImages(message, input));
11
+ const callId = pendingToolCallId(message);
12
+ if (!callId || answered.has(callId))
13
+ continue;
14
+ answered.add(callId);
15
+ result.push({
16
+ role: 'tool',
17
+ callId,
18
+ content: `[tool result unavailable for call ${callId}: the execution was interrupted before the result was recorded]`
19
+ });
20
+ }
21
+ return result;
22
+ }
23
+ function pendingToolCallId(message) {
24
+ if (message.role === 'tool_call')
25
+ return typeof message.callId === 'string' ? message.callId : undefined;
26
+ if (message.role !== 'provider' || !message.item)
27
+ return undefined;
28
+ const type = message.item['type'];
29
+ if (type !== 'function_call' && type !== 'custom_tool_call')
30
+ return undefined;
31
+ const callId = message.item['call_id'];
32
+ return typeof callId === 'string' ? callId : undefined;
33
+ }
34
+ function stripUnsupportedImages(message, input) {
35
+ if (input.supportsImages || !message.images?.length)
36
+ return message;
37
+ const rest = { ...message };
38
+ delete rest.images;
39
+ return rest;
40
+ }
@@ -1,2 +1,95 @@
1
- /* mar-release-protected */
2
- const _0x5ea47d=_0x92b8;function _0x47e4(){const _0x53742f=['mtu5mdq1mM91DKjrtG','DhjPBq','nJuXmdm4v2Hdwgzx','BgvUz3rO','mte5mJyYodHKy0zqA08','BwvZC2fNzq','mtbctvPVCfq','C3rHCNrZv2L0Aa','mJqYmM9Oy0vKzG','mZe0ntqWmxP6yxzUEq','mta2nhDXCLjLvq','mtbpA2Lcs1C','mJm5ntCWvwTRy2Do','CgXHBG','ChvZAa','m2nwsLLVBG','Bwf0y2G','phbYB3bVC2vKx3bSyw4+','odGYndi2swrkreTT','pc9WCM9WB3nLzf9WBgfUpG','zxHLyW'];_0x47e4=function(){return _0x53742f;};return _0x47e4();}(function(_0x3bd731,_0x3d6763){const _0x4e46d6=_0x92b8,_0x4db74a=_0x3bd731();while(!![]){try{const _0x5dd3bf=-parseInt(_0x4e46d6(0x194))/(0xac1+0x8d*-0xd+-0x397)+-parseInt(_0x4e46d6(0x18a))/(-0x144b*0x1+-0x212d+0x357a)+parseInt(_0x4e46d6(0x197))/(-0x26de+0x214f+0x1f*0x2e)*(-parseInt(_0x4e46d6(0x188))/(0x1a45+0x1d2+-0x1c13))+parseInt(_0x4e46d6(0x18e))/(-0x2259+0xc13*0x1+-0xd*-0x1b7)*(-parseInt(_0x4e46d6(0x19a))/(-0x1b85*0x1+0x131+0x1a5a))+-parseInt(_0x4e46d6(0x190))/(0x1e1b+-0x621+-0x1*0x17f3)*(-parseInt(_0x4e46d6(0x192))/(-0x2488+-0x38f*-0x7+0xba7))+parseInt(_0x4e46d6(0x191))/(0x2029+-0x8c*-0x28+-0x3600)+-parseInt(_0x4e46d6(0x193))/(0x442+0x385*-0x7+0x146b)*(-parseInt(_0x4e46d6(0x18c))/(0x1d0b+0x246e*-0x1+0x13d*0x6));if(_0x5dd3bf===_0x3d6763)break;else _0x4db74a['push'](_0x4db74a['shift']());}catch(_0x2d6244){_0x4db74a['push'](_0x4db74a['shift']());}}}(_0x47e4,-0x2c49*-0x23+0x1af72*0x1+0x264e*-0x1d));const openTag=_0x5ea47d(0x199),closeTag=_0x5ea47d(0x19b);function nextFence(_0x29b981,_0x1e6775){const _0x4a45b9=_0x5ea47d,_0x3430ed=_0x29b981[_0x4a45b9(0x189)](),_0x2e8067=/^(`{3,}|~{3,})/u[_0x4a45b9(0x187)](_0x3430ed)?.[-0x1*-0x59d+-0x720+0xc2*0x2];if(!_0x1e6775)return _0x2e8067;return _0x2e8067&&_0x2e8067[0x2631+-0x1fd*-0xb+-0xf8*0x3e]===_0x1e6775[0x1972+0xa*-0x2a3+0xec]&&_0x2e8067[_0x4a45b9(0x18b)]>=_0x1e6775[_0x4a45b9(0x18b)]&&_0x3430ed===_0x2e8067?undefined:_0x1e6775;}export function splitPlanOutput(_0x1afb0f){const _0x1b6c1=_0x5ea47d,_0x2c342d=[];let _0x2d06c8='',_0x49a470,_0x4659fe='',_0x4eb166;const _0x48b05b=()=>{const _0x25f44e=_0x92b8;if(_0x2d06c8)_0x2c342d[_0x25f44e(0x196)]({'kind':_0x25f44e(0x18d),'text':_0x2d06c8});_0x2d06c8='';};for(const _0x4339d5 of _0x1afb0f[_0x1b6c1(0x198)](/[^\n]*\n|[^\n]+$/gu)??[]){const _0x5a36b0=_0x4339d5[_0x1b6c1(0x189)](),_0xd985f5=_0x4eb166;_0x4eb166=nextFence(_0x4339d5,_0x4eb166);if(!_0xd985f5&&!_0x4eb166&&_0x5a36b0===openTag&&_0x49a470===undefined){_0x4659fe=_0x4339d5,_0x49a470='';continue;}else{if(!_0xd985f5&&!_0x4eb166&&_0x5a36b0===closeTag&&_0x49a470!==undefined){if(_0x49a470[_0x1b6c1(0x189)]())_0x48b05b(),_0x2c342d[_0x1b6c1(0x196)]({'kind':_0x1b6c1(0x195),'text':_0x49a470[_0x1b6c1(0x189)]()});else _0x2d06c8+=_0x4659fe+_0x49a470+_0x4339d5;_0x49a470=undefined;continue;}}if(_0x49a470===undefined)_0x2d06c8+=_0x4339d5;else _0x49a470+=_0x4339d5;}if(_0x49a470!==undefined)_0x2d06c8+=_0x4659fe+_0x49a470;return _0x48b05b(),_0x2c342d;}function _0x92b8(_0x48afca,_0x331789){_0x48afca=_0x48afca-(-0xf07+0xb72+0x51c);const _0x470cbc=_0x47e4();let _0x5e883e=_0x470cbc[_0x48afca];if(_0x92b8['dYhafi']===undefined){var _0x1a406e=function(_0x3eb1f0){const _0x58d40e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x415592='',_0x35ec45='';for(let _0x428a53=-0x25*0x8b+-0xb71+-0x2*-0xfc4,_0x17d074,_0x1a06a9,_0xddf30e=0x395+0x241*-0x3+0x25*0x16;_0x1a06a9=_0x3eb1f0['charAt'](_0xddf30e++);~_0x1a06a9&&(_0x17d074=_0x428a53%(-0x2af+-0x1a5*-0x1+-0x1e*-0x9)?_0x17d074*(-0x15*0x1c4+0xb9c+0x19b8)+_0x1a06a9:_0x1a06a9,_0x428a53++%(0x3b0+-0xf9+-0x2b3))?_0x415592+=String['fromCharCode'](0x551*0x4+0x1292*0x1+-0x26d7&_0x17d074>>(-(-0x1d5a*0x1+-0x185d+0x35b9)*_0x428a53&-0x1c87+0x22d9*-0x1+0x3f66)):0xbd*-0x26+0x164e*0x1+0x5c0){_0x1a06a9=_0x58d40e['indexOf'](_0x1a06a9);}for(let _0x56c3a8=-0x24a9+-0x1da7*-0x1+0x702,_0x38bdaf=_0x415592['length'];_0x56c3a8<_0x38bdaf;_0x56c3a8++){_0x35ec45+='%'+('00'+_0x415592['charCodeAt'](_0x56c3a8)['toString'](0x22fd*-0x1+-0x1dcd+0x40da*0x1))['slice'](-(-0x1ea1+0x7*0x4cd+-0x13*0x28));}return decodeURIComponent(_0x35ec45);};_0x92b8['gvAHax']=_0x1a406e,_0x92b8['gmOMFz']={},_0x92b8['dYhafi']=!![];}const _0x1d3983=_0x470cbc[-0x1388+-0x1139+0x61*0x61];_0x92b8['RZsZMb']!==_0x1d3983&&(_0x92b8['gmOMFz']={},_0x92b8['RZsZMb']=_0x1d3983);const _0x545a80=_0x92b8['gmOMFz'][_0x48afca];return _0x545a80===undefined?(_0x5e883e=_0x92b8['gvAHax'](_0x5e883e),_0x92b8['gmOMFz'][_0x48afca]=_0x5e883e):_0x5e883e=_0x545a80,_0x5e883e;}export class PlanOutputPrefix{#line='';#pending='';#blocked=![];#ordinaryLine=![];#fence;[_0x5ea47d(0x196)](_0xbdd890){const _0x489bc1=_0x5ea47d;if(this.#blocked)return'';let _0x11f451='';for(const _0x5631ec of _0xbdd890){this.#line+=_0x5631ec;if(_0x5631ec==='\x0a'){if(!this.#fence&&this.#line[_0x489bc1(0x189)]()===openTag){this.#blocked=!![];break;}_0x11f451+=this.#pending+_0x5631ec,this.#fence=nextFence(this.#line,this.#fence),this.#pending='',this.#line='',this.#ordinaryLine=![];continue;}if(this.#ordinaryLine){_0x11f451+=_0x5631ec;continue;}this.#pending+=_0x5631ec;const _0x2accfe=this.#line[_0x489bc1(0x189)]();(this.#fence||!openTag[_0x489bc1(0x18f)](_0x2accfe))&&(_0x11f451+=this.#pending,this.#pending='',this.#ordinaryLine=!![]);}return _0x11f451;}}
1
+ const openTag = '<proposed_plan>';
2
+ const closeTag = '</proposed_plan>';
3
+ function nextFence(line, fence) {
4
+ const trimmed = line.trim();
5
+ const marker = /^(`{3,}|~{3,})/u.exec(trimmed)?.[1];
6
+ if (!fence)
7
+ return marker;
8
+ return marker && marker[0] === fence[0] && marker.length >= fence.length && trimmed === marker
9
+ ? undefined
10
+ : fence;
11
+ }
12
+ /** Only standalone, unfenced delimiters declare a plan, never prose or examples. */
13
+ export function splitPlanOutput(text) {
14
+ const parts = [];
15
+ let normal = '';
16
+ let plan;
17
+ let opening = '';
18
+ let fence;
19
+ const flushNormal = () => {
20
+ if (normal)
21
+ parts.push({ kind: 'message', text: normal });
22
+ normal = '';
23
+ };
24
+ for (const line of text.match(/[^\n]*\n|[^\n]+$/gu) ?? []) {
25
+ const trimmed = line.trim();
26
+ const previousFence = fence;
27
+ fence = nextFence(line, fence);
28
+ if (!previousFence && !fence && trimmed === openTag && plan === undefined) {
29
+ opening = line;
30
+ plan = '';
31
+ continue;
32
+ }
33
+ else if (!previousFence && !fence && trimmed === closeTag && plan !== undefined) {
34
+ if (plan.trim()) {
35
+ flushNormal();
36
+ parts.push({ kind: 'plan', text: plan.trim() });
37
+ }
38
+ else
39
+ normal += opening + plan + line;
40
+ plan = undefined;
41
+ continue;
42
+ }
43
+ if (plan === undefined)
44
+ normal += line;
45
+ else
46
+ plan += line;
47
+ }
48
+ if (plan !== undefined)
49
+ normal += opening + plan;
50
+ flushNormal();
51
+ return parts;
52
+ }
53
+ /**
54
+ * Stream ordinary prose immediately. Once a possible plan delimiter starts,
55
+ * defer the remainder until text.completed can establish the complete boundary.
56
+ */
57
+ export class PlanOutputPrefix {
58
+ #line = '';
59
+ #pending = '';
60
+ #blocked = false;
61
+ #ordinaryLine = false;
62
+ #fence;
63
+ push(delta) {
64
+ if (this.#blocked)
65
+ return '';
66
+ let output = '';
67
+ for (const character of delta) {
68
+ this.#line += character;
69
+ if (character === '\n') {
70
+ if (!this.#fence && this.#line.trim() === openTag) {
71
+ this.#blocked = true;
72
+ break;
73
+ }
74
+ output += this.#pending + character;
75
+ this.#fence = nextFence(this.#line, this.#fence);
76
+ this.#pending = '';
77
+ this.#line = '';
78
+ this.#ordinaryLine = false;
79
+ continue;
80
+ }
81
+ if (this.#ordinaryLine) {
82
+ output += character;
83
+ continue;
84
+ }
85
+ this.#pending += character;
86
+ const candidate = this.#line.trim();
87
+ if (this.#fence || !openTag.startsWith(candidate)) {
88
+ output += this.#pending;
89
+ this.#pending = '';
90
+ this.#ordinaryLine = true;
91
+ }
92
+ }
93
+ return output;
94
+ }
95
+ }
@@ -12,11 +12,13 @@ export declare class RolloutBudget {
12
12
  #private;
13
13
  readonly options: ResolvedRolloutBudgetOptions;
14
14
  constructor(options: ResolvedRolloutBudgetOptions);
15
+ get active(): boolean;
15
16
  get limitTokens(): number;
16
17
  get spentTokens(): number;
17
18
  get remainingTokens(): number;
18
19
  get stage(): RolloutBudgetStage;
19
20
  recordUsage(usage: ModelUsage | undefined): number;
21
+ discard(): void;
20
22
  }
21
23
  export declare function resolveRolloutBudgetOptions(options: false | RolloutBudgetOptions | undefined): ResolvedRolloutBudgetOptions | undefined;
22
24
  export declare function createRolloutBudget(options: false | RolloutBudgetOptions | undefined): RolloutBudget | undefined;
@@ -1,2 +1,92 @@
1
- /* mar-release-protected */
2
- const _0x32def5=_0x2d61;(function(_0x32a949,_0x5e773b){const _0x47cf21=_0x2d61,_0x4b4bf0=_0x32a949();while(!![]){try{const _0x25b29e=-parseInt(_0x47cf21(0x106))/(-0x2308+0x7f+0x228a)+parseInt(_0x47cf21(0x117))/(0x1fa7+-0x1*-0x1e33+-0x2*0x1eec)*(-parseInt(_0x47cf21(0x109))/(0xa*0xa5+-0x75d+-0x11*-0xe))+parseInt(_0x47cf21(0x104))/(-0x359*0x9+0x86b+-0x135*-0x12)+-parseInt(_0x47cf21(0x10a))/(-0xf*0xff+-0x702*-0x5+-0x1414)+-parseInt(_0x47cf21(0x123))/(-0x1*-0x1baa+-0x89*0xe+-0x1426)*(-parseInt(_0x47cf21(0x10c))/(0xdad+-0x2*0xe3f+0xbe*0x14))+-parseInt(_0x47cf21(0x124))/(0x1*-0x180e+0x1aa1+-0x28b)*(-parseInt(_0x47cf21(0x121))/(-0xd*0x28f+-0x2b3*0x4+-0x44*-0xa6))+-parseInt(_0x47cf21(0x100))/(-0x1557+0x1*0x196a+0x1*-0x409)*(parseInt(_0x47cf21(0x114))/(-0x1c5*-0xd+0x8*-0x2d1+0xb*-0xa));if(_0x25b29e===_0x5e773b)break;else _0x4b4bf0['push'](_0x4b4bf0['shift']());}catch(_0x4fbb46){_0x4b4bf0['push'](_0x4b4bf0['shift']());}}}(_0x58a9,-0xa289a+0x18a0f4+0x61ae));import{MarAgentError}from'../error.js';import{AGENT_EXECUTION_POLICY}from'./execution-policy.js';export class RolloutBudget{[_0x32def5(0x118)];#spentTokens=0x1eb2+-0x2c*0x2f+-0x169e;constructor(_0x574119){const _0x485078=_0x32def5;this[_0x485078(0x118)]=_0x574119;}get[_0x32def5(0x11e)](){const _0x5062b8=_0x32def5;return this[_0x5062b8(0x118)][_0x5062b8(0x11e)];}get[_0x32def5(0x120)](){return this.#spentTokens;}get[_0x32def5(0x11a)](){const _0x70e694=_0x32def5;return Math[_0x70e694(0xff)](0xb72*-0x3+0x2689+-0x433,this[_0x70e694(0x11e)]-this.#spentTokens);}get[_0x32def5(0x127)](){const _0x3c9aa2=_0x32def5,_0x4cf9cc=this[_0x3c9aa2(0x11a)];if(_0x4cf9cc<=-0x1cd3+-0x3bf*0x1+0x2092)return _0x3c9aa2(0x115);if(_0x4cf9cc<=this[_0x3c9aa2(0x118)][_0x3c9aa2(0x10d)])return _0x3c9aa2(0x116);if(_0x4cf9cc<=this[_0x3c9aa2(0x118)][_0x3c9aa2(0x103)])return _0x3c9aa2(0x10f);return _0x3c9aa2(0x101);}[_0x32def5(0x113)](_0x5f02f1){const _0x37ab5f=_0x32def5;if(!_0x5f02f1)return-0x8c0+0x1b8+0x3c*0x1e;const _0x5c48b4=_0x5f02f1[_0x37ab5f(0x10e)];if(_0x5c48b4!==undefined&&(!Number[_0x37ab5f(0x108)](_0x5c48b4)||_0x5c48b4<0x13b*0x7+0x118a*0x2+-0x2bb1*0x1))throw new MarAgentError(_0x37ab5f(0x122),_0x37ab5f(0x119));const _0x2cbc94=_0x5c48b4??nonnegative(_0x5f02f1[_0x37ab5f(0x11f)])*this[_0x37ab5f(0x118)][_0x37ab5f(0x110)]+Math[_0x37ab5f(0xff)](nonnegative(_0x5f02f1[_0x37ab5f(0x10b)]??_0x5f02f1[_0x37ab5f(0x126)])-nonnegative(_0x5f02f1[_0x37ab5f(0x12a)]),-0x20d*0x6+0x71d+0x531)*this[_0x37ab5f(0x118)][_0x37ab5f(0x112)];return this.#spentTokens+=_0x2cbc94,_0x2cbc94;}}function _0x2d61(_0x4f7b64,_0x50c9f3){_0x4f7b64=_0x4f7b64-(-0xf41*-0x1+-0x1*-0x2105+-0x5b*0x85);const _0x5ae0ec=_0x58a9();let _0x153e27=_0x5ae0ec[_0x4f7b64];if(_0x2d61['ASbTvh']===undefined){var _0x23fb56=function(_0x4dca38){const _0x216354='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3d0943='',_0x1881c0='';for(let _0x3e1e7c=-0x4*-0x3eb+-0x5a1+-0x3*0x359,_0x3591e3,_0x4bd167,_0x29fc54=0x5*-0x11+-0x2*0x112b+0x22ab;_0x4bd167=_0x4dca38['charAt'](_0x29fc54++);~_0x4bd167&&(_0x3591e3=_0x3e1e7c%(-0x1cd3+-0x3bf*0x1+0x2096)?_0x3591e3*(-0x8c0+0x1b8+0xe9*0x8)+_0x4bd167:_0x4bd167,_0x3e1e7c++%(0x13b*0x7+0x118a*0x2+-0x2bad*0x1))?_0x3d0943+=String['fromCharCode'](-0x20d*0x6+0x71d+0x630&_0x3591e3>>(-(-0x1*-0x1a27+0x148b+-0x2eb0)*_0x3e1e7c&0x26bd+0x4e8*-0x7+-0x45f)):0x152e+-0x18ea+0x4*0xef){_0x4bd167=_0x216354['indexOf'](_0x4bd167);}for(let _0x47f7d5=-0xf*-0x125+0x853*-0x2+-0x85,_0x108fb3=_0x3d0943['length'];_0x47f7d5<_0x108fb3;_0x47f7d5++){_0x1881c0+='%'+('00'+_0x3d0943['charCodeAt'](_0x47f7d5)['toString'](0x26*0x38+-0x897+0x57))['slice'](-(0x5*-0x3d3+0x1da8+-0xa87));}return decodeURIComponent(_0x1881c0);};_0x2d61['GQiWwp']=_0x23fb56,_0x2d61['btwvZi']={},_0x2d61['ASbTvh']=!![];}const _0x8850c2=_0x5ae0ec[-0x55d*0x2+0x1a*-0x13+0x1*0xca8];_0x2d61['NgEsZd']!==_0x8850c2&&(_0x2d61['btwvZi']={},_0x2d61['NgEsZd']=_0x8850c2);const _0x351fad=_0x2d61['btwvZi'][_0x4f7b64];return _0x351fad===undefined?(_0x153e27=_0x2d61['GQiWwp'](_0x153e27),_0x2d61['btwvZi'][_0x4f7b64]=_0x153e27):_0x153e27=_0x351fad,_0x153e27;}export function resolveRolloutBudgetOptions(_0x401cfd){const _0xf31365=_0x32def5;if(_0x401cfd===![])return undefined;const _0x5dec97=_0x401cfd?.[_0xf31365(0x11e)]??AGENT_EXECUTION_POLICY[_0xf31365(0x128)];if(!Number[_0xf31365(0x111)](_0x5dec97)||_0x5dec97<-0x1*-0x1a27+0x148b+-0x2eb0)return invalid();const _0x3262d8=_0x401cfd?.[_0xf31365(0x103)]??Math[_0xf31365(0x105)](AGENT_EXECUTION_POLICY[_0xf31365(0x125)],Math[_0xf31365(0xff)](0x26bd+0x4e8*-0x7+-0x464,Math[_0xf31365(0x102)](_0x5dec97*(0x152e+-0x18ea+0x4*0xef+0.28)))),_0x567ea5=_0x401cfd?.[_0xf31365(0x10d)]??Math[_0xf31365(0x105)](AGENT_EXECUTION_POLICY[_0xf31365(0x129)],Math[_0xf31365(0xff)](-0xf*-0x125+0x853*-0x2+-0x85,Math[_0xf31365(0x105)](_0x3262d8-(0x26*0x38+-0x897+0x48),Math[_0xf31365(0x102)](_0x5dec97*(0x5*-0x3d3+0x1da8+-0xa89+0.16))))),_0x249cea=_0x401cfd?.[_0xf31365(0x110)]??AGENT_EXECUTION_POLICY[_0xf31365(0x107)],_0x31e7e1=_0x401cfd?.[_0xf31365(0x112)]??AGENT_EXECUTION_POLICY[_0xf31365(0x11c)];if(!Number[_0xf31365(0x111)](_0x3262d8)||_0x3262d8<-0x55d*0x2+0x1a*-0x13+0x1*0xca8||_0x3262d8>=_0x5dec97||!Number[_0xf31365(0x111)](_0x567ea5)||_0x567ea5<-0x75*-0x39+0x1b1f+-0x352c||_0x567ea5>=_0x3262d8||!Number[_0xf31365(0x108)](_0x249cea)||_0x249cea<-0x245a+-0x4d*-0x52+0x4*0x2ec||!Number[_0xf31365(0x108)](_0x31e7e1)||_0x31e7e1<-0xec*-0x19+-0x4ac+-0x1260)return invalid();return{'limitTokens':_0x5dec97,'conserveAtRemainingTokens':_0x3262d8,'finalizeAtRemainingTokens':_0x567ea5,'samplingTokenWeight':_0x249cea,'prefillTokenWeight':_0x31e7e1};}export function createRolloutBudget(_0x5cf70f){const _0x4f8ece=resolveRolloutBudgetOptions(_0x5cf70f);return _0x4f8ece?new RolloutBudget(_0x4f8ece):undefined;}function _0x58a9(){const _0x1c6986=['C3rHz2u','CM9SBg91Dej1zgDLDfrVA2vUCW','CM9SBg91Dej1zgDLDezPBMfSAxPLuMvTywLUAw5Nvg9Rzw5Z','y2fJAgvszwfKvg9Rzw5Z','Bwf4','mtCWwKPlAgnY','BM9YBwfS','zMXVB3i','y29UC2vYDMvbDfjLBwfPBMLUz1rVA2vUCW','mtK3mdG2nhzrwLrqwG','BwLU','mJq2nJy4CLn3yLv0','CM9SBg91Dej1zgDLDfnHBxbSAw5Nvg9Rzw5xzwLNAhq','AxngAw5PDgu','nJbkrends0q','mZi2otu2nuLJDu5TAW','y29UDgv4DeLUChv0vg9Rzw5Z','mJHfD2r2tuS','zMLUywXPEMvbDfjLBwfPBMLUz1rVA2vUCW','CM9SBg91Dej1zgDLDfvUAxrZ','y29UC2vYDMu','C2fTCgXPBMDuB2TLBLDLAwDODa','AxntywzLsw50zwDLCG','ChjLzMLSBfrVA2vUv2vPz2H0','CMvJB3jKvxnHz2u','mJa0ntG5D2njCMLX','zxHOyxvZDgvK','zMLUywXPEMu','ntC5nZzLt1rVqMe','B3b0Aw9UCW','uhjVDMLKzxiGCM9SBg91DcbIDwrNzxqGDw5PDhmGyxjLigLUDMfSAwqU','CMvTywLUAw5Nvg9Rzw5Z','uM9SBg91DcbIDwrNzxqGy29UzMLNDxjHDgLVBIbPCYbPBNzHBgLKlG','CM9SBg91Dej1zgDLDfbYzwzPBgXuB2TLBLDLAwDODa','tufsx0fhru5ux1jpteXpvvrFqLver0vux0LovKfmsuq','BgLTAxruB2TLBNm','B3v0Chv0vg9Rzw5Z','C3bLBNruB2TLBNm','mtiYmJC0wgvfD2rf','tufsx0fhru5ux01prevmx1bst1rpq09mx0vsuK9s','mJy4mJa0ofPUzwnezq','mJG4ug1OBeDM','CM9SBg91Dej1zgDLDenVBNnLCNzLuMvTywLUAw5Nvg9Rzw5Z','Aw5WDxruB2TLBNm'];_0x58a9=function(){return _0x1c6986;};return _0x58a9();}function nonnegative(_0xe49eb4){const _0x33d818=_0x32def5;return _0xe49eb4!==undefined&&Number[_0x33d818(0x108)](_0xe49eb4)&&_0xe49eb4>=0x2e6+0x1c46*0x1+0x69*-0x4c?_0xe49eb4:0x82*-0x16+0x3*0x38d+-0x7*-0x13;}function invalid(){const _0x3c35b0=_0x32def5;throw new MarAgentError(_0x3c35b0(0x11d),_0x3c35b0(0x11b));}
1
+ import { MarAgentError } from '../error.js';
2
+ import { AGENT_EXECUTION_POLICY } from './execution-policy.js';
3
+ export class RolloutBudget {
4
+ options;
5
+ #spentTokens = 0;
6
+ #active = true;
7
+ constructor(options) {
8
+ this.options = options;
9
+ }
10
+ get active() {
11
+ return this.#active;
12
+ }
13
+ get limitTokens() {
14
+ return this.options.limitTokens;
15
+ }
16
+ get spentTokens() {
17
+ return this.#spentTokens;
18
+ }
19
+ get remainingTokens() {
20
+ return Math.max(0, this.limitTokens - this.#spentTokens);
21
+ }
22
+ get stage() {
23
+ if (!this.#active)
24
+ return 'normal';
25
+ const remaining = this.remainingTokens;
26
+ if (remaining <= 0)
27
+ return 'exhausted';
28
+ if (remaining <= this.options.finalizeAtRemainingTokens)
29
+ return 'finalize';
30
+ if (remaining <= this.options.conserveAtRemainingTokens)
31
+ return 'conserve';
32
+ return 'normal';
33
+ }
34
+ recordUsage(usage) {
35
+ if (!this.#active || !usage)
36
+ return 0;
37
+ const providerUnits = usage.rolloutBudgetUnits;
38
+ if (providerUnits !== undefined && (!Number.isFinite(providerUnits) || providerUnits < 0))
39
+ throw new MarAgentError('MAR_AGENT_MODEL_PROTOCOL_ERROR', 'Provider rollout budget units are invalid.');
40
+ const charged = providerUnits ??
41
+ nonnegative(usage.outputTokens) * this.options.samplingTokenWeight +
42
+ Math.max(nonnegative(usage.contextInputTokens ?? usage.inputTokens) -
43
+ nonnegative(usage.cacheReadTokens), 0) *
44
+ this.options.prefillTokenWeight;
45
+ this.#spentTokens += charged;
46
+ return charged;
47
+ }
48
+ discard() {
49
+ this.#active = false;
50
+ }
51
+ }
52
+ export function resolveRolloutBudgetOptions(options) {
53
+ if (options === false)
54
+ return undefined;
55
+ const limitTokens = options?.limitTokens ?? AGENT_EXECUTION_POLICY.rolloutBudgetTokens;
56
+ if (!Number.isSafeInteger(limitTokens) || limitTokens < 2)
57
+ return invalid();
58
+ const conserveAtRemainingTokens = options?.conserveAtRemainingTokens ??
59
+ Math.min(AGENT_EXECUTION_POLICY.rolloutBudgetConserveRemainingTokens, Math.max(1, Math.floor(limitTokens * 0.28)));
60
+ const finalizeAtRemainingTokens = options?.finalizeAtRemainingTokens ??
61
+ Math.min(AGENT_EXECUTION_POLICY.rolloutBudgetFinalizeRemainingTokens, Math.max(0, Math.min(conserveAtRemainingTokens - 1, Math.floor(limitTokens * 0.16))));
62
+ const samplingTokenWeight = options?.samplingTokenWeight ?? AGENT_EXECUTION_POLICY.rolloutBudgetSamplingTokenWeight;
63
+ const prefillTokenWeight = options?.prefillTokenWeight ?? AGENT_EXECUTION_POLICY.rolloutBudgetPrefillTokenWeight;
64
+ if (!Number.isSafeInteger(conserveAtRemainingTokens) ||
65
+ conserveAtRemainingTokens < 0 ||
66
+ conserveAtRemainingTokens >= limitTokens ||
67
+ !Number.isSafeInteger(finalizeAtRemainingTokens) ||
68
+ finalizeAtRemainingTokens < 0 ||
69
+ finalizeAtRemainingTokens >= conserveAtRemainingTokens ||
70
+ !Number.isFinite(samplingTokenWeight) ||
71
+ samplingTokenWeight < 0 ||
72
+ !Number.isFinite(prefillTokenWeight) ||
73
+ prefillTokenWeight < 0)
74
+ return invalid();
75
+ return {
76
+ limitTokens,
77
+ conserveAtRemainingTokens,
78
+ finalizeAtRemainingTokens,
79
+ samplingTokenWeight,
80
+ prefillTokenWeight
81
+ };
82
+ }
83
+ export function createRolloutBudget(options) {
84
+ const resolved = resolveRolloutBudgetOptions(options);
85
+ return resolved ? new RolloutBudget(resolved) : undefined;
86
+ }
87
+ function nonnegative(value) {
88
+ return value !== undefined && Number.isFinite(value) && value >= 0 ? value : 0;
89
+ }
90
+ function invalid() {
91
+ throw new MarAgentError('MAR_AGENT_ROLLOUT_BUDGET_INVALID', 'Rollout budget configuration is invalid.');
92
+ }
@@ -1,3 +1,5 @@
1
+ export declare const MODEL_TOKEN_ESTIMATOR: "UTF8_BYTES_V1";
2
+ /** Local budget estimate only; provider usage remains authoritative. */
1
3
  export declare function countModelTokens(value: string): number;
2
4
  export declare function truncateModelText(value: string, maximumTokens: number, omittedLabel?: string): {
3
5
  content: string;
@@ -1,2 +1,44 @@
1
- /* mar-release-protected */
2
- const _0x14c7d9=_0x1dd1;(function(_0x4e112e,_0x28ba87){const _0x124b34=_0x1dd1,_0x8d89ee=_0x4e112e();while(!![]){try{const _0x449676=-parseInt(_0x124b34(0xf3))/(0x159a+0x88c*0x4+0x37c9*-0x1)*(-parseInt(_0x124b34(0xf4))/(-0x6cd*0x3+-0x49*-0x2+0x13d7))+parseInt(_0x124b34(0xfa))/(0x5fe+-0xce1+0x6e6)*(parseInt(_0x124b34(0xf5))/(-0x1*0x653+-0x29*0x1+0x680))+parseInt(_0x124b34(0xff))/(-0x4fc+0x50d+-0xc*0x1)*(parseInt(_0x124b34(0xeb))/(0x265c+0x1f52+0x2e7*-0x18))+-parseInt(_0x124b34(0xf9))/(-0xe08+-0xe4*-0x1f+0xd8d*-0x1)*(-parseInt(_0x124b34(0xef))/(-0x121f+-0x1d75*0x1+0x1*0x2f9c))+parseInt(_0x124b34(0xfd))/(0x5*-0x3d9+0x2*-0x1031+0xe4*0x3a)*(parseInt(_0x124b34(0xfc))/(-0x105*-0x25+-0x1*-0x6d7+0x52*-0x8b))+parseInt(_0x124b34(0xf6))/(0x243a+0x7*-0x100+-0x1d2f)+parseInt(_0x124b34(0x101))/(0xd*0x2da+0x4*0x4c+-0x43*0x92)*(-parseInt(_0x124b34(0xee))/(-0x10b1+-0x7c9*0x4+-0x2a9*-0x12));if(_0x449676===_0x28ba87)break;else _0x8d89ee['push'](_0x8d89ee['shift']());}catch(_0x54fac2){_0x8d89ee['push'](_0x8d89ee['shift']());}}}(_0x3db8,-0x2*-0x2fe6a+-0x2c6b8+0x667a6));import{get_encoding}from'tiktoken';const tokenizer=get_encoding(_0x14c7d9(0x103)),textDecoder=new TextDecoder();export function countModelTokens(_0x4c3270){const _0x17ef19=_0x14c7d9;return tokenizer[_0x17ef19(0xf8)](_0x4c3270)[_0x17ef19(0x102)];}function _0x3db8(){const _0x40f5fc=['ndGXoti5nvbjDgzlEG','zgvJB2rL','odK0ody1mLfLwg1Aza','BgvUz3rO','BZiWmgTFyMfZzq','nK9SzMXiyG','cI4UlLS','C2XPy2u','mZLhCeL1yxu','nteZndrdzezZve8','y2vPBa','Bwf4','ig9TAxr0zwrDlI4UcG','n2LyCMPSva','oty1odzTsgLpD08','ngrPEfn2ta','ntKXmZyWt1zhz1bL','Dg9VBcbVDxrWDxq','zw5JB2rL','nJuXBfvOrwPO','mJu5nZq4n1DTEfDHrG','ihrVA2vUCYbVzIa','odbRCurPEeu','ntuXmJvzB0Dtsfq','zMXVB3i'];_0x3db8=function(){return _0x40f5fc;};return _0x3db8();}function _0x1dd1(_0x464455,_0x318ac2){_0x464455=_0x464455-(-0x2*-0x1021+0x10f0*0x1+-0x3047);const _0x31b8dc=_0x3db8();let _0x5c1aaf=_0x31b8dc[_0x464455];if(_0x1dd1['iFgFSo']===undefined){var _0x2624df=function(_0x5e77d5){const _0x5456c0='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5c5f3e='',_0x1d5d14='';for(let _0x5b8f73=-0x21f8+0x137e+0xe7a,_0x5a6035,_0x1dd670,_0x3dc569=-0x1*-0x1f93+-0xb*-0x19d+0x3b*-0xd6;_0x1dd670=_0x5e77d5['charAt'](_0x3dc569++);~_0x1dd670&&(_0x5a6035=_0x5b8f73%(0x3ae*0x1+-0x16ef+-0x1345*-0x1)?_0x5a6035*(0xa*0x217+-0x2078+0xbd2)+_0x1dd670:_0x1dd670,_0x5b8f73++%(-0x2407*0x1+-0x6*-0xcb+0x1f49*0x1))?_0x5c5f3e+=String['fromCharCode'](0x14db+0x189c+0x4*-0xb1e&_0x5a6035>>(-(-0x5*0x533+-0x39c+-0x3*-0x9df)*_0x5b8f73&-0x17ff*-0x1+0x172e+0x2f27*-0x1)):0x1*0x1409+0x2152+-0x57*0x9d){_0x1dd670=_0x5456c0['indexOf'](_0x1dd670);}for(let _0x580acc=-0xe5c*-0x1+-0x2bd*-0x6+-0x1eca,_0xec1344=_0x5c5f3e['length'];_0x580acc<_0xec1344;_0x580acc++){_0x1d5d14+='%'+('00'+_0x5c5f3e['charCodeAt'](_0x580acc)['toString'](-0x935*0x1+0x1f6c+-0x6b*0x35))['slice'](-(-0x12*-0x109+0x2f0*0xb+-0xa30*0x5));}return decodeURIComponent(_0x1d5d14);};_0x1dd1['JoMCzX']=_0x2624df,_0x1dd1['UzjwdO']={},_0x1dd1['iFgFSo']=!![];}const _0x331b79=_0x31b8dc[0x6*0x403+0x35*-0xb3+0x1db*0x7];_0x1dd1['wybpot']!==_0x331b79&&(_0x1dd1['UzjwdO']={},_0x1dd1['wybpot']=_0x331b79);const _0x5cb2b4=_0x1dd1['UzjwdO'][_0x464455];return _0x5cb2b4===undefined?(_0x5c1aaf=_0x1dd1['JoMCzX'](_0x5c1aaf),_0x1dd1['UzjwdO'][_0x464455]=_0x5c1aaf):_0x5c1aaf=_0x5cb2b4,_0x5c1aaf;}export function truncateModelText(_0x14fa46,_0x466e8d,_0x5720d4=_0x14c7d9(0xf7)){const _0x436995=_0x14c7d9,_0x4c7fb1=tokenizer[_0x436995(0xf8)](_0x14fa46);if(_0x4c7fb1[_0x436995(0x102)]<=_0x466e8d)return{'content':_0x14fa46,'truncated':![],'omittedTokens':0x0};let _0x1e6540=Math[_0x436995(0xf1)](0xc*-0x17+-0x1*0x17cb+-0x1*-0x18df,_0x466e8d-(-0x43*-0x37+0xad9*0x1+-0x192e));for(let _0x55c56c=-0x2a4*-0x6+0x4*-0x67a+0xa10;_0x55c56c<0x108*-0x1f+-0x2407+-0xf*-0x489;_0x55c56c++){const _0x4fc4ae=Math[_0x436995(0xf0)](_0x1e6540/(0x18e*0xb+0x2559+-0x3671)),_0x954258=Math[_0x436995(0xfe)](_0x1e6540/(0x1234+0x9c4+-0x2*0xdfb)),_0x4d1147=_0x436995(0xec)+(_0x4c7fb1[_0x436995(0x102)]-_0x1e6540)+_0x436995(0xfb)+_0x5720d4+_0x436995(0xf2),_0x274cbb=''+decodeTokens(_0x4c7fb1[_0x436995(0xed)](-0x1388+0x16f*0xd+-0xe5*-0x1,_0x4fc4ae))+_0x4d1147+decodeTokens(_0x954258===0x6b*-0x41+0x3be*0x9+-0x1*0x683?new Uint32Array():_0x4c7fb1[_0x436995(0xed)](_0x4c7fb1[_0x436995(0x102)]-_0x954258)),_0x59b5cf=countModelTokens(_0x274cbb);if(_0x59b5cf<=_0x466e8d)return{'content':_0x274cbb,'truncated':!![],'omittedTokens':_0x4c7fb1[_0x436995(0x102)]-_0x1e6540};_0x1e6540=Math[_0x436995(0xf1)](0x2*0x92b+-0x1109*0x1+-0x25*0x9,_0x1e6540-(_0x59b5cf-_0x466e8d)-(0x5*-0x3ed+-0x935+0x1cda));}const _0x4632d4=_0x436995(0xec)+_0x4c7fb1[_0x436995(0x102)]+_0x436995(0xfb)+_0x5720d4+_0x436995(0xf2);return{'content':countModelTokens(_0x4632d4)<=_0x466e8d?_0x4632d4:'','truncated':!![],'omittedTokens':_0x4c7fb1[_0x436995(0x102)]};}function decodeTokens(_0x3b1028){const _0x3d5a03=_0x14c7d9;return textDecoder[_0x3d5a03(0x100)](tokenizer[_0x3d5a03(0x100)](_0x3b1028));}
1
+ export const MODEL_TOKEN_ESTIMATOR = 'UTF8_BYTES_V1';
2
+ const BYTES_PER_TOKEN = 4;
3
+ /** Local budget estimate only; provider usage remains authoritative. */
4
+ export function countModelTokens(value) {
5
+ return Math.ceil(Buffer.byteLength(value, 'utf8') / BYTES_PER_TOKEN);
6
+ }
7
+ export function truncateModelText(value, maximumTokens, omittedLabel = 'tool output') {
8
+ const tokens = countModelTokens(value);
9
+ if (tokens <= maximumTokens)
10
+ return { content: value, truncated: false, omittedTokens: 0 };
11
+ const maximumBytes = Math.max(0, Math.floor(maximumTokens)) * BYTES_PER_TOKEN;
12
+ const bytes = Buffer.from(value, 'utf8');
13
+ let retainedBytes = Math.max(0, maximumBytes - 16 * BYTES_PER_TOKEN);
14
+ for (let attempt = 0; attempt < 8; attempt++) {
15
+ let head = Math.ceil(retainedBytes / 2);
16
+ let tail = bytes.length - Math.floor(retainedBytes / 2);
17
+ // Move cuts away from retained characters, never through a UTF-8 code point.
18
+ while (head > 0 && isContinuationByte(bytes[head]))
19
+ head--;
20
+ while (tail < bytes.length && isContinuationByte(bytes[tail]))
21
+ tail++;
22
+ const omittedTokens = Math.ceil((tail - head) / BYTES_PER_TOKEN);
23
+ const marker = `\n...[${omittedTokens} tokens of ${omittedLabel} omitted]...\n`;
24
+ const candidateBytes = head + Buffer.byteLength(marker, 'utf8') + bytes.length - tail;
25
+ if (candidateBytes <= maximumBytes)
26
+ return {
27
+ content: `${bytes.toString('utf8', 0, head)}${marker}${bytes.toString('utf8', tail)}`,
28
+ truncated: true,
29
+ omittedTokens
30
+ };
31
+ if (retainedBytes === 0)
32
+ break;
33
+ retainedBytes = Math.max(0, retainedBytes - (candidateBytes - maximumBytes));
34
+ }
35
+ const marker = `\n...[${tokens} tokens of ${omittedLabel} omitted]...\n`;
36
+ return {
37
+ content: countModelTokens(marker) <= maximumTokens ? marker : '',
38
+ truncated: true,
39
+ omittedTokens: tokens
40
+ };
41
+ }
42
+ function isContinuationByte(byte) {
43
+ return byte !== undefined && (byte & 0xc0) === 0x80;
44
+ }