@myagentroam/node 0.9.62 → 0.9.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +4 -0
  3. package/dist/capabilities.js +110 -2
  4. package/dist/claude-agent-sdk.js +330 -2
  5. package/dist/claude-channel.js +44 -2
  6. package/dist/codex-app-server.js +510 -2
  7. package/dist/config.js +106 -2
  8. package/dist/connector/node-connector-options.js +1 -2
  9. package/dist/connector/node-operation-router.js +22 -2
  10. package/dist/connector.js +1736 -2
  11. package/dist/control-outbound-scheduler.js +153 -2
  12. package/dist/database.js +639 -2
  13. package/dist/fake-runner.js +129 -2
  14. package/dist/git-askpass.js +12 -0
  15. package/dist/git-execution-helper.js +266 -0
  16. package/dist/health.js +3 -2
  17. package/dist/main.js +57 -2
  18. package/dist/mcp-installation-model.js +1 -2
  19. package/dist/migrations/v004.js +55 -3
  20. package/dist/migrations/v005.js +13 -3
  21. package/dist/migrations/v006.js +90 -3
  22. package/dist/migrations/v007.js +22 -3
  23. package/dist/migrations/v008.js +18 -3
  24. package/dist/migrations/v009.js +70 -4
  25. package/dist/migrations/v010.js +43 -3
  26. package/dist/migrations/v011.js +20 -3
  27. package/dist/migrations/v012.js +8 -0
  28. package/dist/native-jsonl-reader.js +186 -2
  29. package/dist/native-session-history.js +1143 -2
  30. package/dist/opencode-runtime.js +80 -2
  31. package/dist/opencode-server.js +259 -2
  32. package/dist/operational.js +122 -2
  33. package/dist/process-tree.js +18 -2
  34. package/dist/ripgrep-binary.js +31 -2
  35. package/dist/rotating-log.js +67 -2
  36. package/dist/runner/abstract-runner.js +260 -2
  37. package/dist/runner/claude/managed-run-controller.js +355 -2
  38. package/dist/runner/claude/tool-normalizer.js +120 -2
  39. package/dist/runner/claude-code-runner.js +303 -2
  40. package/dist/runner/codex/composer-image-markers.js +8 -2
  41. package/dist/runner/codex/conversation-parser.js +913 -2
  42. package/dist/runner/codex/managed-run-controller.js +494 -2
  43. package/dist/runner/codex/tool-normalizer.js +214 -2
  44. package/dist/runner/codex-runner.js +585 -2
  45. package/dist/runner/fake-test-runner.js +47 -2
  46. package/dist/runner/mar-agent/conversation-normalizer.js +644 -2
  47. package/dist/runner/mar-agent/executor-stdio-client-transport.js +139 -2
  48. package/dist/runner/mar-agent/generated-images.js +41 -2
  49. package/dist/runner/mar-agent/history-projection.js +106 -2
  50. package/dist/runner/mar-agent/hosted-conversation-runtime.js +446 -2
  51. package/dist/runner/mar-agent/managed-run-controller.js +785 -2
  52. package/dist/runner/mar-agent/mcp-client-pool.js +233 -2
  53. package/dist/runner/mar-agent/runtime-model-factory.js +326 -2
  54. package/dist/runner/mar-agent-runner.js +458 -2
  55. package/dist/runner/opencode/conversation-parser.js +221 -2
  56. package/dist/runner/opencode/managed-run-controller.js +588 -2
  57. package/dist/runner/opencode/tool-normalizer.js +80 -2
  58. package/dist/runner/opencode-runner.js +426 -2
  59. package/dist/runner/runner-registry.js +87 -2
  60. package/dist/runner-command-engine.js +71 -2
  61. package/dist/runner-profiles.js +323 -2
  62. package/dist/runner-usage.js +190 -2
  63. package/dist/runtime-command-detector.js +73 -2
  64. package/dist/runtime-model.js +1 -2
  65. package/dist/runtime-state.js +1509 -2
  66. package/dist/service/attachment-domain-state.js +7 -2
  67. package/dist/service/bubblewrap-sandbox-executor.js +543 -2
  68. package/dist/service/continuous-run-coordinator.js +425 -2
  69. package/dist/service/conversation-history-service.js +552 -2
  70. package/dist/service/conversation-hosting-capability-service.js +61 -2
  71. package/dist/service/conversation-hosting-enablement-service.js +91 -2
  72. package/dist/service/conversation-hosting-maintenance-service.js +174 -2
  73. package/dist/service/conversation-segment-service.js +162 -2
  74. package/dist/service/conversation-template-node-service.js +992 -2
  75. package/dist/service/external-session-resume-service.js +152 -2
  76. package/dist/service/fake-managed-run-service.js +60 -2
  77. package/dist/service/git-execution-service.js +418 -0
  78. package/dist/service/git-operation-service.js +57 -0
  79. package/dist/service/hosted-conversation-node-service.js +1982 -2
  80. package/dist/service/hosted-conversation-store.js +1405 -2
  81. package/dist/service/managed-runner-session-service.js +35 -2
  82. package/dist/service/mar-agent-model-transport-test-service.js +88 -2
  83. package/dist/service/mcp-installation-verifier.js +87 -2
  84. package/dist/service/mcp-node-operation-service.js +90 -2
  85. package/dist/service/mission-mcp-server.js +124 -2
  86. package/dist/service/mission-mcp-stdio.js +40 -2
  87. package/dist/service/mission-runtime.js +142 -2
  88. package/dist/service/native-session-projection-service.js +274 -2
  89. package/dist/service/native-session-watch-service.js +683 -2
  90. package/dist/service/node-connection-lifecycle-service.js +88 -2
  91. package/dist/service/node-control-channel.js +85 -2
  92. package/dist/service/node-control-message-service.js +109 -2
  93. package/dist/service/node-request-service.js +62 -2
  94. package/dist/service/node-run-event-bridge.js +88 -2
  95. package/dist/service/node-terminal-channel.js +202 -2
  96. package/dist/service/node-upgrade-coordinator.js +137 -2
  97. package/dist/service/node-workspace-coordinator.js +97 -2
  98. package/dist/service/recent-run-projection-service.js +99 -2
  99. package/dist/service/run-attachment-service.js +321 -2
  100. package/dist/service/run-domain-state.js +4 -2
  101. package/dist/service/run-event-service.js +246 -2
  102. package/dist/service/run-ownership-policy.js +22 -2
  103. package/dist/service/run-workbench-service.js +120 -2
  104. package/dist/service/runner-channel-message-service.js +20 -2
  105. package/dist/service/runner-interaction-service.js +243 -2
  106. package/dist/service/runner-service.js +69 -2
  107. package/dist/service/runtime-credential-control-service.js +95 -2
  108. package/dist/service/session-catalog-service.js +404 -2
  109. package/dist/service/session-command-service.js +125 -2
  110. package/dist/service/session-context-service.js +128 -2
  111. package/dist/service/session-domain-state.js +9 -2
  112. package/dist/service/session-identity-service.js +86 -2
  113. package/dist/service/session-lifecycle-service.js +248 -2
  114. package/dist/service/session-message-service.js +270 -2
  115. package/dist/service/session-presentation-service.js +43 -2
  116. package/dist/service/session-query-service.js +82 -2
  117. package/dist/service/session-watch-slot-coordinator.js +21 -2
  118. package/dist/service/skill-directory-service.js +238 -2
  119. package/dist/service/skill-install-service.js +434 -2
  120. package/dist/service/skill-node-operation-service.js +206 -2
  121. package/dist/service/terminal-relay-state.js +3 -2
  122. package/dist/service/terminal-service.js +90 -2
  123. package/dist/service/web-search-error.js +40 -2
  124. package/dist/service/workbench-event-service.js +21 -2
  125. package/dist/service/workbench-manifest-service.js +69 -2
  126. package/dist/service/workspace-change-service.js +290 -2
  127. package/dist/service/workspace-content-search-service.js +457 -2
  128. package/dist/service/workspace-domain-state.js +41 -2
  129. package/dist/service/workspace-file-service.js +150 -2
  130. package/dist/service/workspace-git-exclude-service.js +119 -2
  131. package/dist/service/workspace-queue-workbench-service.js +176 -2
  132. package/dist/service/workspace-service.js +92 -2
  133. package/dist/service/workspace-session-service.js +154 -2
  134. package/dist/service/workspace-upload-service.js +262 -2
  135. package/dist/service/workspace-watch-controller.js +68 -2
  136. package/dist/service/workspace-watch-service.js +170 -2
  137. package/dist/service/workspace-watch-snapshot-service.js +218 -2
  138. package/dist/service/workspace-workbench-service.js +239 -2
  139. package/dist/service.js +91 -2
  140. package/dist/storage.js +32 -2
  141. package/dist/supervisor.js +136 -2
  142. package/dist/terminal.js +496 -2
  143. package/dist/util/git-credential-client.js +32 -0
  144. package/dist/util/node-operation-data.js +9 -2
  145. package/dist/util/node-operation-parsers.js +382 -2
  146. package/dist/util/personal-instructions.js +34 -2
  147. package/dist/util/runner-error.js +70 -2
  148. package/dist/util/runner-native-session-parsers.js +510 -2
  149. package/dist/util/safe-error.js +8 -2
  150. package/dist/util/secret-environment.js +25 -2
  151. package/dist/workspace.js +1793 -2
  152. package/package.json +11 -8
  153. package/vendor/ripgrep/darwin-arm64/rg +0 -0
  154. package/vendor/ripgrep/darwin-x64/rg +0 -0
  155. package/vendor/ripgrep/manifest.json +12 -0
  156. package/README.md +0 -42
  157. package/dist/event-buffer.js +0 -2
  158. package/dist/migrations/v001.js +0 -107
  159. package/dist/migrations/v002.js +0 -2
  160. package/dist/migrations/v003.js +0 -2
  161. package/dist/service/mcp-package-installer.js +0 -2
@@ -1,2 +1,80 @@
1
- /* mar-release-protected */
2
- const _0x4db73d=_0x2c15;(function(_0x4894d1,_0x4665cc){const _0x1c0a8d=_0x2c15,_0x24cc83=_0x4894d1();while(!![]){try{const _0x2917e1=-parseInt(_0x1c0a8d(0x106))/(0x1d8b+0x10cc+-0x2e56)*(parseInt(_0x1c0a8d(0x116))/(0x19c0+0x1b11+-0xb*0x4cd))+-parseInt(_0x1c0a8d(0x10b))/(-0x16bd*-0x1+-0x3*0x3e1+-0xb17)*(parseInt(_0x1c0a8d(0x115))/(-0x8*-0x3b2+-0x1*-0x2069+0x11*-0x3a5))+-parseInt(_0x1c0a8d(0x12d))/(-0x9*0x1c+-0x1*0x687+0x788)+-parseInt(_0x1c0a8d(0x125))/(-0x14*-0x18a+-0x417+-0x1aab)*(parseInt(_0x1c0a8d(0x11c))/(0x1*0x77f+0x255*-0xf+0x1b83))+parseInt(_0x1c0a8d(0x121))/(-0x1ea8+-0x15bd+0x346d)*(-parseInt(_0x1c0a8d(0x109))/(-0x117b*-0x2+-0xa*0x14e+0x3*-0x74b))+-parseInt(_0x1c0a8d(0x10d))/(0x12db*0x2+-0x12f*-0xa+0x2*-0x18c1)+parseInt(_0x1c0a8d(0x10c))/(-0x1*-0x2525+-0x3cf+-0x214b);if(_0x2917e1===_0x4665cc)break;else _0x24cc83['push'](_0x24cc83['shift']());}catch(_0x1a343b){_0x24cc83['push'](_0x24cc83['shift']());}}}(_0x381b,-0x3e97f+0xca8bf*0x1+-0x685d*0x2));import{spawnSync}from'node:child_process';function _0x2c15(_0x95d870,_0x49e08d){_0x95d870=_0x95d870-(-0xeb2+-0x121b+0x21d2);const _0x10c8f4=_0x381b();let _0x1c7545=_0x10c8f4[_0x95d870];if(_0x2c15['NcvfIu']===undefined){var _0x3fd066=function(_0x314057){const _0x5347a1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3b6085='',_0x4767d3='';for(let _0x13f4d2=0x3*-0x87b+-0x5*-0x33b+0x94a,_0x271090,_0x2a4622,_0x3f9493=0x3*0x935+0x5*0x6b7+0x8be*-0x7;_0x2a4622=_0x314057['charAt'](_0x3f9493++);~_0x2a4622&&(_0x271090=_0x13f4d2%(0x13e*0x3+0x1*-0x1147+0xd91)?_0x271090*(-0xe83+-0x17*-0x15+-0x2*-0x670)+_0x2a4622:_0x2a4622,_0x13f4d2++%(0x1f8+-0x270d+0x2519))?_0x3b6085+=String['fromCharCode'](-0x59+0x229f*-0x1+0x23f7&_0x271090>>(-(0xfe7+-0x835*0x3+-0x1*-0x8ba)*_0x13f4d2&-0x15c4+0x59*0xf+0x1093)):-0x29*0x3d+-0x4ef*0x2+0x13a3){_0x2a4622=_0x5347a1['indexOf'](_0x2a4622);}for(let _0x4f8be1=-0x13*-0x37+-0x23*-0x8+0x52d*-0x1,_0x3c85f5=_0x3b6085['length'];_0x4f8be1<_0x3c85f5;_0x4f8be1++){_0x4767d3+='%'+('00'+_0x3b6085['charCodeAt'](_0x4f8be1)['toString'](-0x20*0x56+0xb93+0x27*-0x5))['slice'](-(0xe85+-0x17cb+-0x8*-0x129));}return decodeURIComponent(_0x4767d3);};_0x2c15['SGNXWF']=_0x3fd066,_0x2c15['toZlfN']={},_0x2c15['NcvfIu']=!![];}const _0x408158=_0x10c8f4[0x14ac+0x4*-0x687+0x570];_0x2c15['ZQbSJd']!==_0x408158&&(_0x2c15['toZlfN']={},_0x2c15['ZQbSJd']=_0x408158);const _0x1b64d0=_0x2c15['toZlfN'][_0x95d870];return _0x1b64d0===undefined?(_0x1c7545=_0x2c15['SGNXWF'](_0x1c7545),_0x2c15['toZlfN'][_0x95d870]=_0x1c7545):_0x1c7545=_0x1b64d0,_0x1c7545;}import{minimalRunnerEnvironment,platformCliInvocation,runRunnerProbe}from'./operational.js';const PROBE_TIMEOUT_MS=0x6ec*-0x2+0x1*-0xbcf+0x3*0xc75;export function probeOpenCode(_0x76d3bb=_0x4db73d(0x119)){const _0x564bf8=_0x4db73d,_0x2751a4=platformCliInvocation(_0x76d3bb,[_0x564bf8(0x113)]),_0x49915=spawnSync(_0x2751a4[_0x564bf8(0x10e)],_0x2751a4[_0x564bf8(0x122)],{'windowsHide':!![],'env':minimalRunnerEnvironment(),'timeout':PROBE_TIMEOUT_MS,'encoding':_0x564bf8(0x10a)});if(_0x49915[_0x564bf8(0x10f)]!==-0xa*-0x283+0xe55*0x2+0x4*-0xd72||_0x49915[_0x564bf8(0x114)]!==undefined)return{'available':![],'compatible':![]};return openCodeProbeResult(''+_0x49915[_0x564bf8(0x11d)]+_0x49915[_0x564bf8(0x107)]);}export async function probeOpenCodeAsync(_0x141055=_0x4db73d(0x119)){const _0x53e693=_0x4db73d,_0x2829a8=platformCliInvocation(_0x141055,[_0x53e693(0x113)]),_0x5ebec0=await runRunnerProbe(_0x2829a8[_0x53e693(0x10e)],_0x2829a8[_0x53e693(0x122)],{'env':minimalRunnerEnvironment(),'timeoutMs':PROBE_TIMEOUT_MS});return _0x5ebec0[_0x53e693(0x10f)]===-0x1*0x1efe+-0x2e7*0x5+-0x1*-0x2d81?openCodeProbeResult(''+_0x5ebec0[_0x53e693(0x11d)]+_0x5ebec0[_0x53e693(0x107)]):{'available':![],'compatible':![]};}function openCodeProbeResult(_0x5c0792){const _0xf18da1=_0x4db73d,_0x249bd0=_0x5c0792[_0xf18da1(0x12b)]()[_0xf18da1(0x129)](/^v/i,'')[_0xf18da1(0x11e)](0x1f8+-0x270d+0x2515,-0x59+0x229f*-0x1+0x2378);return{'available':_0x249bd0[_0xf18da1(0x111)]>0xfe7+-0x835*0x3+-0x1*-0x8b8,'compatible':/^1\.18\./[_0xf18da1(0x112)](_0x249bd0),..._0x249bd0[_0xf18da1(0x111)]===-0x15c4+0x59*0xf+0x108d?{}:{'version':_0x249bd0}};}function _0x381b(){const _0x1a7d71=['C3rKzxjY','y29UDgv4Da','ouzeufH5Eq','DxrMoa','nKnSwvzcAa','ndC5nJC0mJvvwxbHBKO','mta3odK0mfrjD2TgtG','y29TBwfUza','C3rHDhvZ','zMLSDgvY','BgvUz3rO','DgvZDa','ls12zxjZAw9U','zxjYB3i','mtyXntiZmKrpBeXovq','mtHKBgvhvNG','BMfTzq','ywXS','B3bLBMnVzgu','DMfYAwfUDhm','zw50CMLLCW','n2TPBxLKrW','C3rKB3v0','C2XPy2u','y29UBMvJDgvK','AgfZ','nJeXmtK5mNHPENDXsG','yxjNCW','C291CMnL','zgLZywjSzwq','ndq4mtuWoerSEu1RyW','BwfW','Bw9KzwXZ','zMXHDe1HCa','CMvWBgfJzq','BgLTAxq','DhjPBq','y29UzMLN','nde1otaWnxbzzg9lvW','AxntywzLsw50zwDLCG','C3rYAw5N','nJq3mZDODeffufG'];_0x381b=function(){return _0x1a7d71;};return _0x381b();}export function openCodeProfileModels(_0x15cab4){const _0xff69ea=_0x4db73d,_0x41d8e9=new Set(_0x15cab4[_0xff69ea(0x11f)]??[]);return(_0x15cab4[_0xff69ea(0x118)]??[])[_0xff69ea(0x110)](_0x17326d=>typeof _0x17326d['id']===_0xff69ea(0x105)&&_0x41d8e9[_0xff69ea(0x120)](_0x17326d['id'])&&_0x17326d[_0xff69ea(0x123)]===_0xff69ea(0x12c))[_0xff69ea(0x128)](_0x48c094=>{const _0x226381=_0xff69ea,_0x29ee24=_0x48c094['id'];return Object[_0x226381(0x11b)](_0x48c094[_0x226381(0x127)]??{})[_0x226381(0x128)](([_0xe6a322,_0x27cae5])=>{const _0x286d2b=_0x226381,_0xc6a021=boundedString(_0x27cae5['id'])??boundedString(_0xe6a322);if(_0xc6a021===undefined)return[];const _0x2fd25a=Object[_0x286d2b(0x11b)](_0x27cae5[_0x286d2b(0x11a)]??{})[_0x286d2b(0x110)](([,_0x44d6f8])=>_0x44d6f8[_0x286d2b(0x124)]!==!![])[_0x286d2b(0x126)](([_0x289bae])=>_0x289bae)[_0x286d2b(0x110)](_0x1e751c=>_0x1e751c[_0x286d2b(0x111)]>-0x29*0x3d+-0x4ef*0x2+0x13a3&&_0x1e751c[_0x286d2b(0x111)]<=-0x13*-0x37+-0x23*-0x8+0x4ed*-0x1)[_0x286d2b(0x11e)](-0x20*0x56+0xb93+0xd3*-0x1,0xe85+-0x17cb+-0x2*-0x4b3);return[{'id':(_0x29ee24+'/'+_0xc6a021)[_0x286d2b(0x11e)](0x14ac+0x4*-0x687+0x570,-0x1f66+0x1575+0x1b*0x63),'label':(boundedString(_0x27cae5[_0x286d2b(0x117)])??_0xc6a021)[_0x286d2b(0x11e)](0x9*-0x1d9+-0x29*-0x8+0xf59,0x4*-0x11c+-0xb*-0x12f+0x1*-0x815),'supportedEfforts':_0x2fd25a}];});});}export function openCodeContextLimits(_0x370134){const _0x44eb78=_0x4db73d,_0x15a33a=new Set(_0x370134[_0x44eb78(0x11f)]??[]);return new Map((_0x370134[_0x44eb78(0x118)]??[])[_0x44eb78(0x110)](_0x3a5422=>typeof _0x3a5422['id']===_0x44eb78(0x105)&&_0x15a33a[_0x44eb78(0x120)](_0x3a5422['id'])&&_0x3a5422[_0x44eb78(0x123)]===_0x44eb78(0x12c))[_0x44eb78(0x128)](_0x218fe4=>Object[_0x44eb78(0x11b)](_0x218fe4[_0x44eb78(0x127)]??{})[_0x44eb78(0x128)](([_0x50d9be,_0x5e555e])=>{const _0x5d2d6a=_0x44eb78,_0x32c1a8=boundedString(_0x5e555e['id'])??boundedString(_0x50d9be),_0x39f74f=_0x5e555e[_0x5d2d6a(0x12a)]?.[_0x5d2d6a(0x108)];return _0x32c1a8!==undefined&&Number[_0x5d2d6a(0x12e)](_0x39f74f)&&(_0x39f74f??0x273+0x15e4+-0x1857)>0xd3*0x2+-0xd5b+0xbb5?[[_0x218fe4['id']+'/'+_0x32c1a8,_0x39f74f]]:[];})));}function boundedString(_0x5cf588){const _0x131ba0=_0x4db73d;if(typeof _0x5cf588!==_0x131ba0(0x105))return undefined;const _0x46b826=_0x5cf588[_0x131ba0(0x12b)]();return _0x46b826[_0x131ba0(0x111)]>0x2*0x1232+-0x25d2+-0x2*-0xb7&&_0x46b826[_0x131ba0(0x111)]<=-0x1893+-0x1cc1*0x1+-0xc*-0x5c7?_0x46b826:undefined;}
1
+ import { spawnSync } from 'node:child_process';
2
+ import { minimalRunnerEnvironment, platformCliInvocation, runRunnerProbe } from './operational.js';
3
+ const PROBE_TIMEOUT_MS = 3_000;
4
+ export function probeOpenCode(command = 'opencode') {
5
+ const invocation = platformCliInvocation(command, ['--version']);
6
+ const result = spawnSync(invocation.command, invocation.args, {
7
+ windowsHide: true,
8
+ env: minimalRunnerEnvironment(),
9
+ timeout: PROBE_TIMEOUT_MS,
10
+ encoding: 'utf8'
11
+ });
12
+ if (result.status !== 0 || result.error !== undefined)
13
+ return { available: false, compatible: false };
14
+ return openCodeProbeResult(`${result.stdout}${result.stderr}`);
15
+ }
16
+ export async function probeOpenCodeAsync(command = 'opencode') {
17
+ const invocation = platformCliInvocation(command, ['--version']);
18
+ const result = await runRunnerProbe(invocation.command, invocation.args, {
19
+ env: minimalRunnerEnvironment(),
20
+ timeoutMs: PROBE_TIMEOUT_MS
21
+ });
22
+ return result.status === 0
23
+ ? openCodeProbeResult(`${result.stdout}${result.stderr}`)
24
+ : { available: false, compatible: false };
25
+ }
26
+ function openCodeProbeResult(output) {
27
+ const version = output.trim().replace(/^v/i, '').slice(0, 128);
28
+ return {
29
+ available: version.length > 0,
30
+ compatible: /^1\.18\./.test(version),
31
+ ...(version.length === 0 ? {} : { version })
32
+ };
33
+ }
34
+ export function openCodeProfileModels(catalog) {
35
+ const connected = new Set(catalog.connected ?? []);
36
+ return (catalog.all ?? [])
37
+ .filter((provider) => typeof provider.id === 'string' &&
38
+ connected.has(provider.id) &&
39
+ provider.source === 'config')
40
+ .flatMap((provider) => {
41
+ const providerId = provider.id;
42
+ return Object.entries(provider.models ?? {}).flatMap(([key, model]) => {
43
+ const modelId = boundedString(model.id) ?? boundedString(key);
44
+ if (modelId === undefined)
45
+ return [];
46
+ const variants = Object.entries(model.variants ?? {})
47
+ .filter(([, value]) => value.disabled !== true)
48
+ .map(([id]) => id)
49
+ .filter((id) => id.length > 0 && id.length <= 64)
50
+ .slice(0, 32);
51
+ return [
52
+ {
53
+ id: `${providerId}/${modelId}`.slice(0, 128),
54
+ label: (boundedString(model.name) ?? modelId).slice(0, 128),
55
+ supportedEfforts: variants
56
+ }
57
+ ];
58
+ });
59
+ });
60
+ }
61
+ export function openCodeContextLimits(catalog) {
62
+ const connected = new Set(catalog.connected ?? []);
63
+ return new Map((catalog.all ?? [])
64
+ .filter((provider) => typeof provider.id === 'string' &&
65
+ connected.has(provider.id) &&
66
+ provider.source === 'config')
67
+ .flatMap((provider) => Object.entries(provider.models ?? {}).flatMap(([key, model]) => {
68
+ const modelId = boundedString(model.id) ?? boundedString(key);
69
+ const context = model.limit?.context;
70
+ return modelId !== undefined && Number.isSafeInteger(context) && (context ?? 0) > 0
71
+ ? [[`${provider.id}/${modelId}`, context]]
72
+ : [];
73
+ })));
74
+ }
75
+ function boundedString(value) {
76
+ if (typeof value !== 'string')
77
+ return undefined;
78
+ const trimmed = value.trim();
79
+ return trimmed.length > 0 && trimmed.length <= 4096 ? trimmed : undefined;
80
+ }
@@ -1,2 +1,259 @@
1
- /* mar-release-protected */
2
- const _0x45dd41=_0x3577;(function(_0x53f654,_0x37a96e){const _0x2adc7e=_0x3577,_0x18bd37=_0x53f654();while(!![]){try{const _0x7ff7b7=parseInt(_0x2adc7e(0x1b0))/(-0x15f3+-0x29*0xda+0x38de)+-parseInt(_0x2adc7e(0x17a))/(-0x2634+-0x377*0x7+0x3e77*0x1)*(parseInt(_0x2adc7e(0x169))/(-0x259*-0xe+-0x176b+-0x970))+-parseInt(_0x2adc7e(0x1bd))/(-0x332*-0x2+0xb97+-0x11f7)*(parseInt(_0x2adc7e(0x1a3))/(-0x569+-0x16f5+0xa9*0x2b))+-parseInt(_0x2adc7e(0x16c))/(0x19*-0xa3+-0x35f*0x9+0x2e48)+-parseInt(_0x2adc7e(0x195))/(-0x2*0xee5+-0xf7e*0x1+0x2d4f)+-parseInt(_0x2adc7e(0x16d))/(-0x11*-0x1c1+0x2d7*-0x2+-0x181b)+parseInt(_0x2adc7e(0x1c2))/(-0xc7a*0x1+0x1*-0x20dd+0x2d60);if(_0x7ff7b7===_0x37a96e)break;else _0x18bd37['push'](_0x18bd37['shift']());}catch(_0x565e33){_0x18bd37['push'](_0x18bd37['shift']());}}}(_0x11e6,-0x3d*0x7160+0x1a76ed+0xfa383));import{spawn}from'node:child_process';function _0x11e6(){const _0xf53595=['nda4ntq0ndDVB29mCuG','y2XVC2u','BwnW','y3jLyxrL','Dg9tDhjPBMC','zgf0yq','yMfZzty0DxjS','CMvXDwLYzunSAwvUDa','Cg9YDa','zMLSzq','zw52AxjVBM1LBNq','BM93','l2DSB2jHBc9OzwfSDgG','CMvWBhLrDwvZDgLVBG','C3vIC2nYAwjL','y2XPzw50','C3rHCNq','BMfTzq','ChjVDMLKzxjZ','BwLU','CMvQzwn0','o2jHC2u2ncW','BgLZDa','DMfYAwfUDa','zgf0ytO','B3bLBMnVzgu','qMfZAwmG','mZi4mJG2mvHwu1vczW','CMvWBhLqzxjTAxnZAw9U','ywDLBNq','ndeZodi2mgPItvLgEa','mte2ntGZntjeC2n5z2y','Aw5KzxHpzG','qvbquK9wruq','ChjVBxb0','zxHPDenVzgu','C3LZDgvT','C2XPy2u','y2HPBgq','AxnbCNjHEq','zgvSzxrL','y29TBwfUza','ChjVBxb0qxn5BMm','zgf0yujHC2u2na','mKHequ51vq','B3bLBMnVzgu6','y29UzMLNDxjLrw52AxjVBM1LBNq','CgvYBwLZC2LVBG','mti3lJaUmc4X','C3vTBwfYAxPL','zgLYzwn0B3j5','B3b0Aw9UCW','Dhj1zq','zgvSzxrLu2vZC2LVBG','BgvUz3rO','C2vZC2LVBKLe','zxzLBNq','Bwf4','t1bftKnprevFu0vsvKvsx1nuqvjux1rjtuvpvvq','t1bftKnprevFuKvtue9ou0vFsu5wquXjra','yxjNCW','t1bftKnprevFu0vsvKvsx0fmuKvbrfLFu1rbuLrfra','zM9YA1nLC3nPB24','t1bftKnprevFu0vsvKvsx0vysvrfra','ywrKCMvZCW','Ahr0CdOVlZeYnY4WlJaUmtO','t1bftKnprevFuKvrvuvtvf9gquLmruq','ywrK','ls1OB3n0BMfTzq','DxbKyxrLu2vZC2LVBG','y29UzMLNDxjLtwnW','ntyYnZiYm1zVuwjtBW','C3rYzwfT','yxr0ywnOBwvUDhm','CgLK','C3bHD25qCM9JzxnZ','zM9YAW','C3rHCNrtzxj2zxi','C3rVCa','BwvZC2fNzxm','AwDUB3jL','BwLTzq','ls1WB3j0','DxbKyxrL','B25Jzq','mtK1nvHwr1fqsa','CgXHDgzVCM0','A2LSBa','ChjVDMLKzxi','zxjYB3i','u0Lhvevstq','zNjVBq','CgLWzq','ywjVCNq','t1bftKnprevFue9svf9vtKfwquLmqujmrq','C2vZC2LVBG','BgLZDgvU','BwfW','mtm0mdCZn01euezjtG','D2LUmZi','B2jQzwn0','zw50CMLLCW','CxvLC3rPB24','DgLTzw91Da','C3rHCNruAw1LB3v0txm','y3jLyxrLu2vZC2LVBG','CMvQzwn0uxvLC3rPB24','Bw9KzwW','t1bftKnprevFtu9eruXFsu5wquXjra','CMvWBhK','Dgv4Da','ody1nLPOvgrusG','C3rHCNrPBMC','C2vZC2LVBNm','yMfZzty0','C2vYDMu'];_0x11e6=function(){return _0xf53595;};return _0x11e6();}import{randomBytes}from'node:crypto';import{createServer}from'node:net';import{minimalRunnerEnvironment,platformCliInvocation}from'./operational.js';import{terminateProcessTree}from'./process-tree.js';const START_TIMEOUT_MS=-0x1*-0x49e7+-0x3e61+0x1b8a;export class OpenCodeServerClient{[_0x45dd41(0x181)];[_0x45dd41(0x174)];[_0x45dd41(0x1d1)];[_0x45dd41(0x1be)];[_0x45dd41(0x1cc)]={};constructor(_0x367bbd={}){const _0x531e8a=_0x45dd41;this[_0x531e8a(0x181)]=_0x367bbd;}[_0x45dd41(0x17c)](_0xd45fcc){const _0x1e18af=_0x45dd41;if(this[_0x1e18af(0x174)]!==undefined)throw new Error(_0x1e18af(0x18b));this[_0x1e18af(0x1cc)]={..._0xd45fcc};}async[_0x45dd41(0x1d2)](){const _0x29348d=_0x45dd41;if(this[_0x29348d(0x1d1)]!==undefined)return;if(this[_0x29348d(0x1be)]!==undefined)return this[_0x29348d(0x1be)];const _0x360e76=this[_0x29348d(0x19b)]();this[_0x29348d(0x1be)]=_0x360e76;try{await _0x360e76;}finally{if(this[_0x29348d(0x1be)]===_0x360e76)this[_0x29348d(0x1be)]=undefined;}}async[_0x45dd41(0x19b)](){const _0x168379=_0x45dd41,{createOpencodeClient:_0x2fa3e6}=await import('@opencode-ai/sdk/v2/client'),_0x3ad8e6=await availablePort(),_0x2cf6e8=randomBytes(-0x1682+0x17*0xf5+-0x97*-0x1)[_0x168379(0x1c6)](_0x168379(0x1c8)),_0x1bc4b5=platformCliInvocation(this[_0x168379(0x181)][_0x168379(0x177)]??_0x168379(0x167),[_0x168379(0x1c1),_0x168379(0x192),_0x168379(0x17e),_0x168379(0x1a0),String(_0x3ad8e6)]),_0x4c6ab2=this[_0x168379(0x181)][_0x168379(0x199)]??spawn,_0x1d6058=_0x4c6ab2(_0x1bc4b5[_0x168379(0x177)],_0x1bc4b5[_0x168379(0x18a)],{'windowsHide':!![],'detached':process[_0x168379(0x1a4)]!==_0x168379(0x1b1),'env':{...minimalRunnerEnvironment(),...this[_0x168379(0x1cc)],'OPENCODE_SERVER_USERNAME':_0x168379(0x167),'OPENCODE_SERVER_PASSWORD':_0x2cf6e8,'OPENCODE_DISABLE_AUTOUPDATE':_0x168379(0x182)},'stdio':[_0x168379(0x19e),_0x168379(0x1aa),_0x168379(0x1aa)]});this[_0x168379(0x174)]=_0x1d6058;const _0x40cda1=_0x168379(0x168)+Buffer[_0x168379(0x1a9)](_0x168379(0x17b)+_0x2cf6e8)[_0x168379(0x1c6)](_0x168379(0x1c0)),_0x5582f6=_0x2fa3e6({'baseUrl':_0x168379(0x18f)+_0x3ad8e6,'headers':{'authorization':_0x40cda1},'throwOnError':!![]});try{await waitUntilHealthy(_0x168379(0x18f)+_0x3ad8e6+_0x168379(0x1ce),_0x40cda1,_0x1d6058,this[_0x168379(0x181)][_0x168379(0x1b6)]??START_TIMEOUT_MS),this[_0x168379(0x1d1)]=_0x5582f6;}catch(_0x4c819d){await this[_0x168379(0x19c)]();throw _0x4c819d;}}async[_0x45dd41(0x1d4)](_0x4ac3e2){const _0x4474b6=_0x45dd41,_0x36f373=await this[_0x4474b6(0x1c9)]();return unwrap(await _0x36f373[_0x4474b6(0x1a6)][_0x4474b6(0x164)]({'directory':_0x4ac3e2}));}async[_0x45dd41(0x194)](_0x528e71,_0x3fbfb8){const _0x182c1e=_0x45dd41,_0x5b4f0c=await this[_0x182c1e(0x1c9)]();if(typeof _0x3fbfb8!==_0x182c1e(0x1b2)||_0x3fbfb8===null||Array[_0x182c1e(0x175)](_0x3fbfb8))return;for(const [_0x1b49a0,_0x416ea3]of Object[_0x182c1e(0x1b3)](_0x3fbfb8)){await _0x5b4f0c[_0x182c1e(0x1c4)][_0x182c1e(0x191)]({'directory':_0x528e71,'name':_0x1b49a0,'config':_0x416ea3});}}async[_0x45dd41(0x1bf)](_0x137836,_0x27e511=0xc1e+0x22f+-0xde9){const _0x1d7668=_0x45dd41,_0x4b282c=await this[_0x1d7668(0x1c9)]();return unwrap(await _0x4b282c[_0x1d7668(0x1ad)][_0x1d7668(0x164)]({'directory':_0x137836,'limit':_0x27e511}));}async[_0x45dd41(0x1b7)](_0x470e65,_0x2e54dd){const _0x40ea0c=_0x45dd41,_0x49dc90=await this[_0x40ea0c(0x1c9)]();return unwrap(await _0x49dc90[_0x40ea0c(0x1ad)][_0x40ea0c(0x1c5)]({'directory':_0x470e65,..._0x2e54dd===undefined?{}:{'title':_0x2e54dd}}));}async[_0x45dd41(0x18c)](_0x21b777,_0x2ea5ef,_0x3e97ca){const _0x2f1048=_0x45dd41,_0x249dd0=await this[_0x2f1048(0x1c9)]();return unwrap(await _0x249dd0[_0x2f1048(0x1ad)][_0x2f1048(0x19a)]({'directory':_0x21b777,'sessionID':_0x2ea5ef,'messageID':_0x3e97ca}));}async[_0x45dd41(0x19d)](_0x3ac036,_0x3dea82,_0x412ea=0x2*0xce3+-0x1f*0x1+-0x1943){const _0x5d7dfe=_0x45dd41,_0x3790c1=await this[_0x5d7dfe(0x1c9)]();return unwrap(await _0x3790c1[_0x5d7dfe(0x1ad)][_0x5d7dfe(0x19d)]({'directory':_0x3ac036,'sessionID':_0x3dea82,'limit':_0x412ea}));}async[_0x45dd41(0x193)](_0x383f98,_0x2fd80a,_0x5634c9){const _0xbfc8f7=_0x45dd41,_0x1d9c15=await this[_0xbfc8f7(0x1c9)]();return unwrap(await _0x1d9c15[_0xbfc8f7(0x1ad)][_0xbfc8f7(0x1a1)]({'directory':_0x383f98,'sessionID':_0x2fd80a,'title':_0x5634c9}));}async[_0x45dd41(0x183)](_0x3a34d0,_0x1d5e85){const _0x266bc4=_0x45dd41,_0x146660=await this[_0x266bc4(0x1c9)]();return unwrap(await _0x146660[_0x266bc4(0x1ad)][_0x266bc4(0x176)]({'directory':_0x3a34d0,'sessionID':_0x1d5e85}));}async[_0x45dd41(0x1ab)](_0x35b252,_0x5d13c9){const _0x438ac2=_0x45dd41,_0x3a7d7e=await this[_0x438ac2(0x1c9)]();return unwrap(await _0x3a7d7e[_0x438ac2(0x1ad)][_0x438ac2(0x1ab)]({'directory':_0x35b252,'sessionID':_0x5d13c9}));}async[_0x45dd41(0x17f)](_0x5a233b,_0x1e08f7,_0x227e01){const _0x12ee71=_0x45dd41,_0x4e843f=await this[_0x12ee71(0x1c9)](),_0x46d537=_0x227e01[_0x12ee71(0x16e)]('/');if(_0x46d537<=0x15bd*-0x1+0x188*-0x17+0x38f5||_0x46d537===_0x227e01[_0x12ee71(0x184)]-(-0x39e+0x1*-0xe7f+-0x305*-0x6))throw new Error(_0x12ee71(0x1ba));return unwrap(await _0x4e843f[_0x12ee71(0x1ad)][_0x12ee71(0x17f)]({'directory':_0x5a233b,'sessionID':_0x1e08f7,'providerID':_0x227e01[_0x12ee71(0x173)](0x189a+0x3f1+-0x1c8b,_0x46d537),'modelID':_0x227e01[_0x12ee71(0x173)](_0x46d537+(-0x13*0x1d+0x19b1+-0xf1*0x19))}));}async[_0x45dd41(0x16a)](_0x112437,_0x4c1cbe,_0x43801c){const _0xdc1ff1=_0x45dd41,_0x4e8883=await this[_0xdc1ff1(0x1c9)]();return unwrap(await _0x4e8883[_0xdc1ff1(0x17d)][_0xdc1ff1(0x1bb)]({'directory':_0x112437,'requestID':_0x4c1cbe,'reply':_0x43801c===_0xdc1ff1(0x16f)?_0xdc1ff1(0x1a2):_0xdc1ff1(0x1d6)}));}async[_0x45dd41(0x1cf)](_0x327c20,_0x4e4633,_0x14e067){const _0x172a5a=_0x45dd41,_0x2a68b3=await this[_0x172a5a(0x1c9)]();return unwrap(await _0x2a68b3[_0x172a5a(0x1b4)][_0x172a5a(0x1bb)]({'directory':_0x327c20,'requestID':_0x4e4633,'answers':_0x14e067[_0x172a5a(0x1af)](_0x472f6d=>[..._0x472f6d])}));}async[_0x45dd41(0x1b8)](_0x1d4e82,_0x3e08b9){const _0x3a638d=_0x45dd41,_0x12af90=await this[_0x3a638d(0x1c9)]();return unwrap(await _0x12af90[_0x3a638d(0x1b4)][_0x3a638d(0x1d6)]({'directory':_0x1d4e82,'requestID':_0x3e08b9}));}async[_0x45dd41(0x170)](_0x19d6ae){const _0x476991=_0x45dd41,_0x26b88a=await this[_0x476991(0x1c9)](),_0x2fdf94=_0x19d6ae[_0x476991(0x1b9)][_0x476991(0x16e)]('/');if(_0x2fdf94<=0x13*-0x14+-0x10b*0x1+0x287||_0x2fdf94===_0x19d6ae[_0x476991(0x1b9)][_0x476991(0x184)]-(-0x252d*0x1+-0x96c+-0xa*-0x4a9))throw new Error(_0x476991(0x1ba));return unwrap(await _0x26b88a[_0x476991(0x1ad)][_0x476991(0x178)]({'directory':_0x19d6ae[_0x476991(0x180)],'sessionID':_0x19d6ae[_0x476991(0x185)],'model':{'providerID':_0x19d6ae[_0x476991(0x1b9)][_0x476991(0x173)](0x1689+0x8a5*-0x4+0xc0b,_0x2fdf94),'modelID':_0x19d6ae[_0x476991(0x1b9)][_0x476991(0x173)](_0x2fdf94+(0x5*0xcd+-0x15*-0x11d+0x1*-0x1b61))},..._0x19d6ae[_0x476991(0x165)]===undefined||_0x19d6ae[_0x476991(0x165)][_0x476991(0x184)]===0xa86+0x1aa5+-0x252b?{}:{'variant':_0x19d6ae[_0x476991(0x165)]},..._0x19d6ae[_0x476991(0x16b)]===undefined?{}:{'agent':_0x19d6ae[_0x476991(0x16b)]},..._0x19d6ae[_0x476991(0x172)]===undefined?{}:{'system':_0x19d6ae[_0x476991(0x172)]},'parts':[{'type':_0x476991(0x1bc),'text':_0x19d6ae[_0x476991(0x1bc)]},...(_0x19d6ae[_0x476991(0x197)]??[])[_0x476991(0x1af)](_0x6869d2=>({'type':_0x476991(0x1cb),'mime':_0x6869d2[_0x476991(0x19f)],'filename':_0x6869d2[_0x476991(0x1d3)],'url':_0x476991(0x166)+_0x6869d2[_0x476991(0x19f)]+_0x476991(0x1d7)+_0x6869d2[_0x476991(0x179)]}))]}));}async[_0x45dd41(0x1d0)](_0x53b867,_0x3c2a0f,_0x36c54b,_0x342b4){const _0x1bd6a4=_0x45dd41,_0xa1ef0f=await this[_0x1bd6a4(0x1c9)](),_0x386d46=await _0xa1ef0f[_0x1bd6a4(0x186)][_0x1bd6a4(0x1d0)]({'directory':_0x53b867},{'signal':_0x3c2a0f});_0x342b4?.();for await(const _0x1db500 of _0x386d46[_0x1bd6a4(0x196)])_0x36c54b(_0x1db500);}async[_0x45dd41(0x19c)](){const _0x41cdf7=_0x45dd41;this[_0x41cdf7(0x1d1)]=undefined;const _0x4fab52=this[_0x41cdf7(0x174)];this[_0x41cdf7(0x174)]=undefined;if(_0x4fab52===undefined)return;if(_0x4fab52[_0x41cdf7(0x198)]===undefined){_0x4fab52[_0x41cdf7(0x1a5)](_0x41cdf7(0x1a8));return;}try{await terminateProcessTree({'pid':_0x4fab52[_0x41cdf7(0x198)],'kill':_0x42ed24=>_0x4fab52[_0x41cdf7(0x1a5)](_0x42ed24)});}catch{_0x4fab52[_0x41cdf7(0x1a5)](_0x41cdf7(0x1a8));}}async[_0x45dd41(0x1c9)](){const _0x14e733=_0x45dd41;return await this[_0x14e733(0x1d2)](),this[_0x14e733(0x1d1)];}}async function availablePort(){return new Promise((_0x5c8fbe,_0x79d0d6)=>{const _0x14ca1b=_0x3577,_0x407255=createServer();_0x407255[_0x14ca1b(0x1a2)](_0x14ca1b(0x1a7),_0x79d0d6),_0x407255[_0x14ca1b(0x1ae)](0x1bd+0x49b*-0x3+0xc14,_0x14ca1b(0x17e),()=>{const _0x43777a=_0x14ca1b,_0x23fff7=_0x407255[_0x43777a(0x18e)](),_0x3ecf0f=typeof _0x23fff7===_0x43777a(0x1b2)&&_0x23fff7!==null?_0x23fff7[_0x43777a(0x1ca)]:undefined;_0x407255[_0x43777a(0x1c3)](_0x48c2fd=>{const _0x46834f=_0x43777a;if(_0x48c2fd!==undefined)_0x79d0d6(_0x48c2fd);else{if(_0x3ecf0f===undefined)_0x79d0d6(new Error(_0x46834f(0x1ac)));else _0x5c8fbe(_0x3ecf0f);}});});});}function _0x3577(_0x3c88dc,_0x5034d6){_0x3c88dc=_0x3c88dc-(0xb6c+-0xef*0xf+0x3f9);const _0x22fbc2=_0x11e6();let _0x1a1275=_0x22fbc2[_0x3c88dc];if(_0x3577['goLXNT']===undefined){var _0x2949b0=function(_0x2c1bce){const _0x44e68c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x568941='',_0x229006='';for(let _0x539050=0x24a4+0x1355+-0x7ff*0x7,_0x1d8226,_0xeae82a,_0x16187c=0xb7d+-0x1325+0x7a8;_0xeae82a=_0x2c1bce['charAt'](_0x16187c++);~_0xeae82a&&(_0x1d8226=_0x539050%(0x17*0xf5+-0x146*0xe+0x1*-0x42b)?_0x1d8226*(-0x17d6+-0x1*0x26ea+0x24*0x1c0)+_0xeae82a:_0xeae82a,_0x539050++%(0x2516+-0x2365+-0x1ad))?_0x568941+=String['fromCharCode'](0x9e*0x1f+0x24ba+-0x36dd&_0x1d8226>>(-(0x1*-0xe7f+-0x7f*0x2+0x1*0xf7f)*_0x539050&-0x17f5+-0xea0+0x1*0x269b)):-0x1df*0x8+-0x57f+0x1477){_0xeae82a=_0x44e68c['indexOf'](_0xeae82a);}for(let _0x4ae0d1=-0x373*-0x1+0x1209+-0x157c,_0xf4de38=_0x568941['length'];_0x4ae0d1<_0xf4de38;_0x4ae0d1++){_0x229006+='%'+('00'+_0x568941['charCodeAt'](_0x4ae0d1)['toString'](-0x96c+0x1287+-0x5*0x1cf))['slice'](-(0x1689+0x8a5*-0x4+0xc0d));}return decodeURIComponent(_0x229006);};_0x3577['HBmmDE']=_0x2949b0,_0x3577['jmNruO']={},_0x3577['goLXNT']=!![];}const _0x31cf75=_0x22fbc2[0x5*0xcd+-0x15*-0x11d+0x2*-0xdb1];_0x3577['pnZsAG']!==_0x31cf75&&(_0x3577['jmNruO']={},_0x3577['pnZsAG']=_0x31cf75);const _0x1ed367=_0x3577['jmNruO'][_0x3c88dc];return _0x1ed367===undefined?(_0x1a1275=_0x3577['HBmmDE'](_0x1a1275),_0x3577['jmNruO'][_0x3c88dc]=_0x1a1275):_0x1a1275=_0x1ed367,_0x1a1275;}async function waitUntilHealthy(_0xcefd54,_0x1be1a3,_0x53a5a7,_0x1ac140){const _0x211b98=_0x45dd41,_0x2e498e=Date[_0x211b98(0x1cd)]()+_0x1ac140;while(Date[_0x211b98(0x1cd)]()<_0x2e498e){if(_0x53a5a7[_0x211b98(0x171)]!==null)throw new Error(_0x211b98(0x18d));try{const _0x53f697=await fetch(_0xcefd54,{'headers':{'authorization':_0x1be1a3},'signal':AbortSignal[_0x211b98(0x1b5)](Math[_0x211b98(0x1d5)](0x1d65+-0xee5+-0x153*0x8,Math[_0x211b98(0x187)](-0x1f35+-0x74c+0x2682,_0x2e498e-Date[_0x211b98(0x1cd)]())))});if(_0x53f697['ok'])return;}catch{}await new Promise(_0x579984=>setTimeout(_0x579984,-0x3*0x52c+-0xc94*0x3+0x3572*0x1));}throw new Error(_0x211b98(0x188));}function unwrap(_0x45fba8){const _0x3ed548=_0x45dd41;if(typeof _0x45fba8!==_0x3ed548(0x1b2)||_0x45fba8===null||!(_0x3ed548(0x1c7)in _0x45fba8))return _0x45fba8;const _0x516297=_0x45fba8;if(_0x516297[_0x3ed548(0x1a7)]!==undefined)throw new Error(_0x3ed548(0x190));if(_0x516297[_0x3ed548(0x1c7)]===undefined)throw new Error(_0x3ed548(0x189));return _0x516297[_0x3ed548(0x1c7)];}
1
+ import { spawn } from 'node:child_process';
2
+ import { randomBytes } from 'node:crypto';
3
+ import { createServer } from 'node:net';
4
+ import { minimalRunnerEnvironment, platformCliInvocation } from './operational.js';
5
+ import { terminateProcessTree } from './process-tree.js';
6
+ const START_TIMEOUT_MS = 10_000;
7
+ export class OpenCodeServerClient {
8
+ options;
9
+ child;
10
+ client;
11
+ starting;
12
+ environment = {};
13
+ constructor(options = {}) {
14
+ this.options = options;
15
+ }
16
+ configureEnvironment(environment) {
17
+ if (this.child !== undefined)
18
+ throw new Error('OPENCODE_SERVER_ALREADY_STARTED');
19
+ this.environment = { ...environment };
20
+ }
21
+ async start() {
22
+ if (this.client !== undefined)
23
+ return;
24
+ if (this.starting !== undefined)
25
+ return this.starting;
26
+ const starting = this.startServer();
27
+ this.starting = starting;
28
+ try {
29
+ await starting;
30
+ }
31
+ finally {
32
+ if (this.starting === starting)
33
+ this.starting = undefined;
34
+ }
35
+ }
36
+ async startServer() {
37
+ const { createOpencodeClient } = await import('@opencode-ai/sdk/v2/client');
38
+ const port = await availablePort();
39
+ const password = randomBytes(24).toString('base64url');
40
+ const invocation = platformCliInvocation(this.options.command ?? 'opencode', [
41
+ 'serve',
42
+ '--hostname',
43
+ '127.0.0.1',
44
+ '--port',
45
+ String(port)
46
+ ]);
47
+ const spawnProcess = this.options.spawnProcess ?? spawn;
48
+ const child = spawnProcess(invocation.command, invocation.args, {
49
+ windowsHide: true,
50
+ detached: process.platform !== 'win32',
51
+ env: {
52
+ ...minimalRunnerEnvironment(),
53
+ ...this.environment,
54
+ OPENCODE_SERVER_USERNAME: 'opencode',
55
+ OPENCODE_SERVER_PASSWORD: password,
56
+ OPENCODE_DISABLE_AUTOUPDATE: 'true'
57
+ },
58
+ stdio: ['ignore', 'pipe', 'pipe']
59
+ });
60
+ this.child = child;
61
+ const authorization = `Basic ${Buffer.from(`opencode:${password}`).toString('base64')}`;
62
+ const client = createOpencodeClient({
63
+ baseUrl: `http://127.0.0.1:${port}`,
64
+ headers: { authorization },
65
+ throwOnError: true
66
+ });
67
+ try {
68
+ await waitUntilHealthy(`http://127.0.0.1:${port}/global/health`, authorization, child, this.options.startTimeoutMs ?? START_TIMEOUT_MS);
69
+ this.client = client;
70
+ }
71
+ catch (error) {
72
+ await this.stop();
73
+ throw error;
74
+ }
75
+ }
76
+ async providers(directory) {
77
+ const client = await this.requireClient();
78
+ return unwrap(await client.provider.list({ directory }));
79
+ }
80
+ async configureMcp(directory, mcp) {
81
+ const client = await this.requireClient();
82
+ if (typeof mcp !== 'object' || mcp === null || Array.isArray(mcp))
83
+ return;
84
+ for (const [name, config] of Object.entries(mcp)) {
85
+ await client.mcp.add({
86
+ directory,
87
+ name,
88
+ config: config
89
+ });
90
+ }
91
+ }
92
+ async sessions(directory, limit = 100) {
93
+ const client = await this.requireClient();
94
+ return unwrap(await client.session.list({ directory, limit }));
95
+ }
96
+ async createSession(directory, title) {
97
+ const client = await this.requireClient();
98
+ return unwrap(await client.session.create({ directory, ...(title === undefined ? {} : { title }) }));
99
+ }
100
+ async forkSession(directory, sessionID, messageID) {
101
+ const client = await this.requireClient();
102
+ return unwrap(await client.session.fork({ directory, sessionID, messageID }));
103
+ }
104
+ async messages(directory, sessionID, limit = 100) {
105
+ const client = await this.requireClient();
106
+ return unwrap(await client.session.messages({ directory, sessionID, limit }));
107
+ }
108
+ async updateSession(directory, sessionID, title) {
109
+ const client = await this.requireClient();
110
+ return unwrap(await client.session.update({ directory, sessionID, title }));
111
+ }
112
+ async deleteSession(directory, sessionID) {
113
+ const client = await this.requireClient();
114
+ return unwrap(await client.session.delete({ directory, sessionID }));
115
+ }
116
+ async abort(directory, sessionID) {
117
+ const client = await this.requireClient();
118
+ return unwrap(await client.session.abort({ directory, sessionID }));
119
+ }
120
+ async summarize(directory, sessionID, model) {
121
+ const client = await this.requireClient();
122
+ const separator = model.indexOf('/');
123
+ if (separator <= 0 || separator === model.length - 1)
124
+ throw new Error('OPENCODE_MODEL_INVALID');
125
+ return unwrap(await client.session.summarize({
126
+ directory,
127
+ sessionID,
128
+ providerID: model.slice(0, separator),
129
+ modelID: model.slice(separator + 1)
130
+ }));
131
+ }
132
+ async replyPermission(directory, requestID, decision) {
133
+ const client = await this.requireClient();
134
+ return unwrap(await client.permission.reply({
135
+ directory,
136
+ requestID,
137
+ reply: decision === 'APPROVED' ? 'once' : 'reject'
138
+ }));
139
+ }
140
+ async replyQuestion(directory, requestID, answers) {
141
+ const client = await this.requireClient();
142
+ return unwrap(await client.question.reply({
143
+ directory,
144
+ requestID,
145
+ answers: answers.map((answer) => [...answer])
146
+ }));
147
+ }
148
+ async rejectQuestion(directory, requestID) {
149
+ const client = await this.requireClient();
150
+ return unwrap(await client.question.reject({ directory, requestID }));
151
+ }
152
+ async prompt(input) {
153
+ const client = await this.requireClient();
154
+ const separator = input.model.indexOf('/');
155
+ if (separator <= 0 || separator === input.model.length - 1)
156
+ throw new Error('OPENCODE_MODEL_INVALID');
157
+ return unwrap(await client.session.promptAsync({
158
+ directory: input.directory,
159
+ sessionID: input.sessionID,
160
+ model: {
161
+ providerID: input.model.slice(0, separator),
162
+ modelID: input.model.slice(separator + 1)
163
+ },
164
+ ...(input.variant === undefined || input.variant.length === 0
165
+ ? {}
166
+ : { variant: input.variant }),
167
+ ...(input.agent === undefined ? {} : { agent: input.agent }),
168
+ ...(input.system === undefined ? {} : { system: input.system }),
169
+ parts: [
170
+ { type: 'text', text: input.text },
171
+ ...(input.attachments ?? []).map((attachment) => ({
172
+ type: 'file',
173
+ mime: attachment.mime,
174
+ filename: attachment.name,
175
+ url: `data:${attachment.mime};base64,${attachment.dataBase64}`
176
+ }))
177
+ ]
178
+ }));
179
+ }
180
+ async subscribe(directory, signal, onEvent, onReady) {
181
+ const client = await this.requireClient();
182
+ const stream = await client.event.subscribe({ directory }, { signal });
183
+ onReady?.();
184
+ for await (const event of stream.stream)
185
+ onEvent(event);
186
+ }
187
+ async stop() {
188
+ this.client = undefined;
189
+ const child = this.child;
190
+ this.child = undefined;
191
+ if (child === undefined)
192
+ return;
193
+ if (child.pid === undefined) {
194
+ child.kill('SIGTERM');
195
+ return;
196
+ }
197
+ try {
198
+ await terminateProcessTree({
199
+ pid: child.pid,
200
+ kill: (signal) => child.kill(signal)
201
+ });
202
+ }
203
+ catch {
204
+ child.kill('SIGTERM');
205
+ }
206
+ }
207
+ async requireClient() {
208
+ await this.start();
209
+ return this.client;
210
+ }
211
+ }
212
+ async function availablePort() {
213
+ return new Promise((resolve, reject) => {
214
+ const server = createServer();
215
+ server.once('error', reject);
216
+ server.listen(0, '127.0.0.1', () => {
217
+ const address = server.address();
218
+ const port = typeof address === 'object' && address !== null ? address.port : undefined;
219
+ server.close((error) => {
220
+ if (error !== undefined)
221
+ reject(error);
222
+ else if (port === undefined)
223
+ reject(new Error('OPENCODE_PORT_UNAVAILABLE'));
224
+ else
225
+ resolve(port);
226
+ });
227
+ });
228
+ });
229
+ }
230
+ async function waitUntilHealthy(url, authorization, child, timeoutMs) {
231
+ const deadline = Date.now() + timeoutMs;
232
+ while (Date.now() < deadline) {
233
+ if (child.exitCode !== null)
234
+ throw new Error('OPENCODE_SERVER_EXITED');
235
+ try {
236
+ const response = await fetch(url, {
237
+ headers: { authorization },
238
+ signal: AbortSignal.timeout(Math.min(1_000, Math.max(1, deadline - Date.now())))
239
+ });
240
+ if (response.ok)
241
+ return;
242
+ }
243
+ catch {
244
+ // The child may still be binding its loopback socket.
245
+ }
246
+ await new Promise((resolve) => setTimeout(resolve, 50));
247
+ }
248
+ throw new Error('OPENCODE_SERVER_START_TIMEOUT');
249
+ }
250
+ function unwrap(result) {
251
+ if (typeof result !== 'object' || result === null || !('data' in result))
252
+ return result;
253
+ const wrapped = result;
254
+ if (wrapped.error !== undefined)
255
+ throw new Error('OPENCODE_REQUEST_FAILED');
256
+ if (wrapped.data === undefined)
257
+ throw new Error('OPENCODE_RESPONSE_INVALID');
258
+ return wrapped.data;
259
+ }
@@ -1,2 +1,122 @@
1
- /* mar-release-protected */
2
- const _0x4e915a=_0x551d;(function(_0x510742,_0x346c5e){const _0x2f7bb9=_0x551d,_0x2ecf44=_0x510742();while(!![]){try{const _0x1913b5=parseInt(_0x2f7bb9(0xd9))/(-0x1115+-0x16df+0x27f5)*(-parseInt(_0x2f7bb9(0xd7))/(0x455*0x7+0x2179+-0x3fca))+parseInt(_0x2f7bb9(0x101))/(0x221c*-0x1+-0x21f0+-0x83*-0x85)+-parseInt(_0x2f7bb9(0xd4))/(0x1c9*0x8+-0x4cb*-0x2+-0x17da)+-parseInt(_0x2f7bb9(0xe5))/(-0x254b+0x1d0c+-0x2*-0x422)+parseInt(_0x2f7bb9(0x10b))/(0x1f8c+0xa6f+-0x29f5)+parseInt(_0x2f7bb9(0xe7))/(0xc1*-0x33+0x1*-0xd49+-0x1141*-0x3)*(-parseInt(_0x2f7bb9(0xe2))/(-0x131c+0x7*-0x237+0x22a5))+parseInt(_0x2f7bb9(0xf9))/(-0xcdd*-0x1+0x1b0e+0x13f1*-0x2);if(_0x1913b5===_0x346c5e)break;else _0x2ecf44['push'](_0x2ecf44['shift']());}catch(_0x4c7e20){_0x2ecf44['push'](_0x2ecf44['shift']());}}}(_0x39c7,-0x51710+0x10b4cf+-0x17*0x194f));import{spawn}from'node:child_process';import{writeNodeLog}from'./rotating-log.js';const secretKey=/(?:password|credential|token|cookie|authorization|secret|api[_-]?key)/i;export function runRunnerProbe(_0x273ecf,_0x3863d7,_0x1f6b59){return new Promise(_0x587fb8=>{const _0x145a75=_0x551d,_0x3a8468=spawn(_0x273ecf,_0x3863d7,{'windowsHide':!![],'env':_0x1f6b59[_0x145a75(0xf4)],'stdio':[_0x145a75(0xfa),_0x145a75(0xea),_0x145a75(0xea)]});let _0x34edfa='',_0x1cfcfd='',_0x6479cf=![];const _0x3d23b6=_0x588446=>{if(_0x6479cf)return;_0x6479cf=!![],clearTimeout(_0x2150a8),_0x587fb8({'status':_0x588446,'stdout':_0x34edfa,'stderr':_0x1cfcfd});},_0x2150a8=setTimeout(()=>{const _0x413430=_0x145a75;_0x3d23b6(null),_0x3a8468[_0x413430(0xf8)]();},_0x1f6b59[_0x145a75(0x100)]);_0x3a8468[_0x145a75(0x106)][_0x145a75(0xe4)](_0x145a75(0x107)),_0x3a8468[_0x145a75(0xda)][_0x145a75(0xe4)](_0x145a75(0x107)),_0x3a8468[_0x145a75(0x106)]['on'](_0x145a75(0xf3),_0x3fc871=>_0x34edfa+=_0x3fc871),_0x3a8468[_0x145a75(0xda)]['on'](_0x145a75(0xf3),_0x1d8e6c=>_0x1cfcfd+=_0x1d8e6c),_0x3a8468[_0x145a75(0xf1)](_0x145a75(0xef),()=>_0x3d23b6(null)),_0x3a8468[_0x145a75(0xf1)](_0x145a75(0xfc),_0x36e937=>_0x3d23b6(_0x36e937));});}export class NodeMetrics{[_0x4e915a(0xe1)]=0x355*-0x5+0x2*0x409+-0x1*-0x897;[_0x4e915a(0x10f)]=0x1b40+0x1a41*-0x1+-0xf*0x11;[_0x4e915a(0xd1)]=0x15*0x19f+0x17cd+-0x39d8;[_0x4e915a(0xd2)]=-0x49d*0x7+0x59*-0x2e+0x3049;[_0x4e915a(0x102)](){const _0x5ba2e2=_0x4e915a;this[_0x5ba2e2(0xe1)]+=-0x3*-0x2b9+0x45a+-0xc84;}[_0x4e915a(0xf0)](){const _0xf2a43d=_0x4e915a;this[_0xf2a43d(0x10f)]+=0x1d4*-0xd+0x6*0x2f9+0x1f*0x31;}[_0x4e915a(0x103)](){const _0x23639f=_0x4e915a;this[_0x23639f(0xd1)]+=-0x3*0x20b+-0xe0a+0x50b*0x4;}[_0x4e915a(0xd0)](){const _0x3f6d7c=_0x4e915a;this[_0x3f6d7c(0xd2)]+=0x2*0x3c2+0x13*-0xd0+0x7ed;}[_0x4e915a(0x10e)](){const _0x5b0c70=_0x4e915a;return{'connectionAttempts':this[_0x5b0c70(0xe1)],'reconnects':this[_0x5b0c70(0x10f)],'heartbeats':this[_0x5b0c70(0xd1)],'runnerFailures':this[_0x5b0c70(0xd2)]};}}export function redactLogValue(_0x59723b){const _0x447363=_0x4e915a;if(Array[_0x447363(0x110)](_0x59723b))return _0x59723b[_0x447363(0xe0)](redactLogValue);if(_0x59723b!==null&&typeof _0x59723b===_0x447363(0x10c))return Object[_0x447363(0xd8)](Object[_0x447363(0xfb)](_0x59723b)[_0x447363(0xe0)](([_0x5e2b91,_0x218be4])=>[_0x5e2b91,secretKey[_0x447363(0xde)](_0x5e2b91)?_0x447363(0xdd):redactLogValue(_0x218be4)]));return _0x59723b;}function _0x39c7(){const _0x1188d8=['CNvUBMvYrMfPBgvK','AgvHCNrIzwf0CW','CNvUBMvYrMfPBhvYzxm','C3rYAw5NAwz5','ndm3mdyZmKHICKrQAW','tenFquXm','AM9PBG','nJa0mNn4AwvkAa','zNjVBuvUDhjPzxm','mJu1BLzHEfPk','C3rKzxjY','vevnua','lMnTza','w1jfrefdvevexq','DgvZDa','BwfYlw5Vzgu','BwfW','y29UBMvJDgLVBKf0DgvTChrZ','mJu4odb3yvLLBg4','ve1qreLs','C2v0rw5JB2rPBMC','mZiZntGYmfj5D0f2wa','y21KlMv4zq','mJe3B0v1vez5','vevstq','u3LZDgvTuM9VDa','CgLWzq','q09nu1bfqW','CgXHDgzVCM0','AgfZ','teforW','zxjYB3i','CMvJB25Uzwn0u2nOzwr1BgvK','B25Jzq','ugf0Aa','zgf0yq','zw52','tK9erv9dteLFq09ntuforf9jtLzbteLe','C3rYAw5N','Dg9ju09tDhjPBMC','A2LSBa','mtC2nJu1nJb2uvftrxK','AwDUB3jL','zw50CMLLCW','y2XVC2u','zxzLCNK','Aw5JBhvKzxm','se9nrq','DgLTzw91De1Z','mZyZntu3ng5TBMz5DW','y29UBMvJDgvKqxr0zw1WDa','AgvHCNrIzwf0u2vUDa','D2LUmZi','D3jPDgu','C3rKB3v0','DxrMoa','Aw5MBW','vvnfuLbst0zjteu','uefusa','mJG4mtu2quvWvxvx','B2jQzwn0','ve1q','C25HChnOB3q','CMvJB25Uzwn0CW','AxnbCNjHEq'];_0x39c7=function(){return _0x1188d8;};return _0x39c7();}export function minimalRunnerEnvironment(_0x514112=process.env){const _0x197c21=_0x4e915a,_0x221a25=new Set([_0x197c21(0x10a),_0x197c21(0xf2),_0x197c21(0xff),_0x197c21(0x109),_0x197c21(0xe3),_0x197c21(0x10d),_0x197c21(0xdb),_0x197c21(0xe9),_0x197c21(0xeb),_0x197c21(0xee),_0x197c21(0xd5),_0x197c21(0xe8)]),_0x5cf563={};for(const [_0x2ffa48,_0x4725aa]of Object[_0x197c21(0xfb)](_0x514112)){if(_0x221a25[_0x197c21(0xed)](_0x2ffa48)&&!secretKey[_0x197c21(0xde)](_0x2ffa48)&&typeof _0x4725aa===_0x197c21(0xf6))_0x5cf563[_0x2ffa48]=_0x4725aa;}return _0x5cf563;}export function platformCliCommand(_0x53d427,_0x5edc23=process[_0x4e915a(0xec)]){const _0x16a9fd=_0x4e915a;if(_0x5edc23!==_0x16a9fd(0x104)||/\.(?:cmd|exe|bat)$/i[_0x16a9fd(0xde)](_0x53d427))return _0x53d427;return _0x53d427+_0x16a9fd(0xdc);}function _0x551d(_0x3a5f67,_0xb82031){_0x3a5f67=_0x3a5f67-(0x1c8*-0x9+-0xf81+0x49f*0x7);const _0x5236fd=_0x39c7();let _0x1b4cff=_0x5236fd[_0x3a5f67];if(_0x551d['YCpHNe']===undefined){var _0x11a1e7=function(_0x36490c){const _0x11b183='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5edfce='',_0x524dc9='';for(let _0x167d73=-0x1*0xc83+0x37*-0xb3+0xcbe*0x4,_0x318ef6,_0x2bc8a2,_0x355c1f=0xd00+-0x58*-0x10+-0x1280;_0x2bc8a2=_0x36490c['charAt'](_0x355c1f++);~_0x2bc8a2&&(_0x318ef6=_0x167d73%(-0xf*-0x15d+0x6fd*0x5+0x8*-0x6ec)?_0x318ef6*(-0xd62+-0x9d2+-0x9e*-0x26)+_0x2bc8a2:_0x2bc8a2,_0x167d73++%(0x12c8+0x1*0x17a7+-0x1*0x2a6b))?_0x5edfce+=String['fromCharCode'](-0x8f6+0x57*-0x47+0x1*0x2216&_0x318ef6>>(-(-0x2*-0x950+0x1dbe+-0x14*0x26b)*_0x167d73&0x7*-0x9a+0x1212+0x7*-0x1fa)):0x14ca+0xc93+-0x215d){_0x2bc8a2=_0x11b183['indexOf'](_0x2bc8a2);}for(let _0x4006ec=0x1*-0xd54+0x2170+-0x141c,_0x2dd7a3=_0x5edfce['length'];_0x4006ec<_0x2dd7a3;_0x4006ec++){_0x524dc9+='%'+('00'+_0x5edfce['charCodeAt'](_0x4006ec)['toString'](0xd*0xd9+-0x255e+0x1a69*0x1))['slice'](-(-0x1*-0x2615+0x1*-0xb96+0x1a7d*-0x1));}return decodeURIComponent(_0x524dc9);};_0x551d['SJKWIT']=_0x11a1e7,_0x551d['tPzLZf']={},_0x551d['YCpHNe']=!![];}const _0x424bda=_0x5236fd[0x26a6+-0x3b6+-0x22f0];_0x551d['qqHYpS']!==_0x424bda&&(_0x551d['tPzLZf']={},_0x551d['qqHYpS']=_0x424bda);const _0x1b4554=_0x551d['tPzLZf'][_0x3a5f67];return _0x1b4554===undefined?(_0x1b4cff=_0x551d['SJKWIT'](_0x1b4cff),_0x551d['tPzLZf'][_0x3a5f67]=_0x1b4cff):_0x1b4cff=_0x1b4554,_0x1b4cff;}export function platformCliInvocation(_0x2b2840,_0x239bb7,_0x2c7f32=process[_0x4e915a(0xec)],_0x1b6780=process.env.ComSpec??process.env.COMSPEC??_0x4e915a(0xe6)){const _0x11cf5a=_0x4e915a,_0x3a5f67=platformCliCommand(_0x2b2840,_0x2c7f32);if(_0x2c7f32!==_0x11cf5a(0x104)||!/\.(?:cmd|bat)$/i[_0x11cf5a(0xde)](_0x3a5f67))return{'command':_0x3a5f67,'args':_0x239bb7};if(![_0x3a5f67,..._0x239bb7][_0x11cf5a(0xfd)](_0xb82031=>/^[A-Za-z0-9_@./:\\ -]+$/[_0x11cf5a(0xde)](_0xb82031)))throw new Error(_0x11cf5a(0xf5));return{'command':_0x1b6780,'args':['/d','/s','/c',[_0x3a5f67,..._0x239bb7][_0x11cf5a(0xe0)](_0x5236fd=>_0x5236fd[_0x11cf5a(0xfe)]('\x20')?'\x22'+_0x5236fd+'\x22':_0x5236fd)[_0x11cf5a(0xd6)]('\x20')]};}export function nodeLog(_0x1b4cff,_0x11a1e7={}){const _0x1e6e4f=_0x4e915a,_0x424bda=redactLogValue(_0x11a1e7),_0x1b4554=JSON[_0x1e6e4f(0xd3)]({'timestamp':new Date()[_0x1e6e4f(0xf7)](),'level':_0x1e6e4f(0x108),'component':_0x1e6e4f(0xdf),'event':_0x1b4cff,..._0x424bda})+'\x0a';process[_0x1e6e4f(0x106)][_0x1e6e4f(0x105)](_0x1b4554),writeNodeLog(_0x1b4554);}
1
+ import { spawn } from 'node:child_process';
2
+ import { writeNodeLog } from './rotating-log.js';
3
+ const secretKey = /(?:password|credential|token|cookie|authorization|secret|api[_-]?key)/i;
4
+ export function runRunnerProbe(command, args, options) {
5
+ return new Promise((resolve) => {
6
+ const child = spawn(command, args, {
7
+ windowsHide: true,
8
+ env: options.env,
9
+ stdio: ['ignore', 'pipe', 'pipe']
10
+ });
11
+ let stdout = '';
12
+ let stderr = '';
13
+ let settled = false;
14
+ const finish = (status) => {
15
+ if (settled)
16
+ return;
17
+ settled = true;
18
+ clearTimeout(timer);
19
+ resolve({ status, stdout, stderr });
20
+ };
21
+ const timer = setTimeout(() => {
22
+ finish(null);
23
+ child.kill();
24
+ }, options.timeoutMs);
25
+ child.stdout.setEncoding('utf8');
26
+ child.stderr.setEncoding('utf8');
27
+ child.stdout.on('data', (value) => (stdout += value));
28
+ child.stderr.on('data', (value) => (stderr += value));
29
+ child.once('error', () => finish(null));
30
+ child.once('close', (status) => finish(status));
31
+ });
32
+ }
33
+ export class NodeMetrics {
34
+ connectionAttempts = 0;
35
+ reconnects = 0;
36
+ heartbeats = 0;
37
+ runnerFailures = 0;
38
+ connectedAttempt() {
39
+ this.connectionAttempts += 1;
40
+ }
41
+ reconnectScheduled() {
42
+ this.reconnects += 1;
43
+ }
44
+ heartbeatSent() {
45
+ this.heartbeats += 1;
46
+ }
47
+ runnerFailed() {
48
+ this.runnerFailures += 1;
49
+ }
50
+ snapshot() {
51
+ return {
52
+ connectionAttempts: this.connectionAttempts,
53
+ reconnects: this.reconnects,
54
+ heartbeats: this.heartbeats,
55
+ runnerFailures: this.runnerFailures
56
+ };
57
+ }
58
+ }
59
+ export function redactLogValue(value) {
60
+ if (Array.isArray(value))
61
+ return value.map(redactLogValue);
62
+ if (value !== null && typeof value === 'object')
63
+ return Object.fromEntries(Object.entries(value).map(([key, item]) => [
64
+ key,
65
+ secretKey.test(key) ? '[REDACTED]' : redactLogValue(item)
66
+ ]));
67
+ return value;
68
+ }
69
+ export function minimalRunnerEnvironment(input = process.env) {
70
+ const allowed = new Set([
71
+ 'PATH',
72
+ 'Path',
73
+ 'HOME',
74
+ 'USERPROFILE',
75
+ 'TMPDIR',
76
+ 'TMP',
77
+ 'TEMP',
78
+ 'SystemRoot',
79
+ 'COMSPEC',
80
+ 'LANG',
81
+ 'LC_ALL',
82
+ 'TERM'
83
+ ]);
84
+ const output = {};
85
+ for (const [key, value] of Object.entries(input)) {
86
+ if (allowed.has(key) && !secretKey.test(key) && typeof value === 'string')
87
+ output[key] = value;
88
+ }
89
+ return output;
90
+ }
91
+ /** Windows npm CLIs are `.cmd` shims and require the controlled command processor path. */
92
+ export function platformCliCommand(command, platform = process.platform) {
93
+ if (platform !== 'win32' || /\.(?:cmd|exe|bat)$/i.test(command))
94
+ return command;
95
+ return `${command}.cmd`;
96
+ }
97
+ /**
98
+ * Runs only Node-owned CLI arguments through Windows' command processor so npm
99
+ * `.cmd` shims work without enabling `shell: true` on the actual child process.
100
+ */
101
+ export function platformCliInvocation(command, args, platform = process.platform, comspec = process.env.ComSpec ?? process.env.COMSPEC ?? 'cmd.exe') {
102
+ const cliCommand = platformCliCommand(command, platform);
103
+ if (platform !== 'win32' || !/\.(?:cmd|bat)$/i.test(cliCommand))
104
+ return { command: cliCommand, args };
105
+ if (![cliCommand, ...args].every((value) => /^[A-Za-z0-9_@./:\\ -]+$/.test(value)))
106
+ throw new Error('NODE_CLI_COMMAND_INVALID');
107
+ return {
108
+ command: comspec,
109
+ args: [
110
+ '/d',
111
+ '/s',
112
+ '/c',
113
+ [cliCommand, ...args].map((value) => (value.includes(' ') ? `"${value}"` : value)).join(' ')
114
+ ]
115
+ };
116
+ }
117
+ export function nodeLog(event, fields = {}) {
118
+ const safeFields = redactLogValue(fields);
119
+ const line = `${JSON.stringify({ timestamp: new Date().toISOString(), level: 'info', component: 'mar-node', event, ...safeFields })}\n`;
120
+ process.stdout.write(line);
121
+ writeNodeLog(line);
122
+ }
@@ -1,2 +1,18 @@
1
- /* mar-release-protected */
2
- const _0x6bceb8=_0x322c;function _0x4861(){const _0x388b39=['ndi3odK0mNDwwgjMAa','mZbAr3DmB2e','ntmXmJzHr3jUBNi','mtu3mZq3r1zsEwn2','odCZmde3nNvSCKrNsG','ndeXndj6v1jrqxi','DgfZA2TPBgW','nZiWmZqYn0nzvfbdCW','u0Lhvevstq','mJC5nJyYnuvoANfPAW','CgLK','D2LUmZi','ndfWrgXhwKS','CgXHDgzVCM0','l3bPza','mtCYrwjjCKXN','A2LSBa'];_0x4861=function(){return _0x388b39;};return _0x4861();}(function(_0x55d059,_0x1c030e){const _0x31c681=_0x322c,_0x16bcbd=_0x55d059();while(!![]){try{const _0x27af01=-parseInt(_0x31c681(0x1f4))/(0x1289+0xf9*-0x1e+0xaa6)*(-parseInt(_0x31c681(0x1fb))/(0xe91+-0x8b*-0x37+0x2c6c*-0x1))+parseInt(_0x31c681(0x1fe))/(0x1*0xa+-0x244d+0x2446*0x1)*(-parseInt(_0x31c681(0x1f7))/(-0xc*0x75+0x123c+-0xcbc))+-parseInt(_0x31c681(0x202))/(0x45d*-0x1+0x1b69+-0x1707)+parseInt(_0x31c681(0x1f9))/(0x2586+-0x15cc+-0xfb4)+parseInt(_0x31c681(0x200))/(-0xe03*-0x1+-0xe*-0x229+-0x2c3a)+-parseInt(_0x31c681(0x1fd))/(0x1517*0x1+0x17f0+-0x1*0x2cff)+-parseInt(_0x31c681(0x1fc))/(0x1*-0x1139+0x5f*0x2f+0x2f*-0x1)*(-parseInt(_0x31c681(0x1fa))/(-0x3*0x112+-0x5de*0x5+0x2096));if(_0x27af01===_0x1c030e)break;else _0x16bcbd['push'](_0x16bcbd['shift']());}catch(_0x15c607){_0x16bcbd['push'](_0x16bcbd['shift']());}}}(_0x4861,0x4aeac+-0x9161*-0x5+0x24bea));function _0x322c(_0x464fa1,_0xc12ba4){_0x464fa1=_0x464fa1-(0x1*-0x1b46+0x15d7+0x762*0x1);const _0x27b357=_0x4861();let _0x50e380=_0x27b357[_0x464fa1];if(_0x322c['YPHywB']===undefined){var _0x4bcafb=function(_0x5422f4){const _0x10f479='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3e7aae='',_0x167015='';for(let _0x5ef5d5=0x1*-0x5fb+-0x1cee+0x3*0xba3,_0x5db1bb,_0x2fbc1b,_0x361769=0x210f+0x11e7*-0x1+-0xf28;_0x2fbc1b=_0x5422f4['charAt'](_0x361769++);~_0x2fbc1b&&(_0x5db1bb=_0x5ef5d5%(0x30a*0x4+-0x7ed+-0x437)?_0x5db1bb*(-0x1b7*0x14+-0x24ea+-0xbe9*-0x6)+_0x2fbc1b:_0x2fbc1b,_0x5ef5d5++%(-0x9b5*-0x1+-0x1b*-0x171+-0x309c))?_0x3e7aae+=String['fromCharCode'](-0x12b0+0x88*-0x18+0x1*0x206f&_0x5db1bb>>(-(-0xd79+-0x4*-0x1b7+-0x153*-0x5)*_0x5ef5d5&0x6ff+0x1455+-0x1b4e)):0x1719*-0x1+-0x4d8+0x1bf1){_0x2fbc1b=_0x10f479['indexOf'](_0x2fbc1b);}for(let _0x36bc0a=0x15e*-0x14+0x1*0x472+0x16e6,_0x3a3fbf=_0x3e7aae['length'];_0x36bc0a<_0x3a3fbf;_0x36bc0a++){_0x167015+='%'+('00'+_0x3e7aae['charCodeAt'](_0x36bc0a)['toString'](-0x8b9+-0xb41*0x2+0x1*0x1f4b))['slice'](-(0x2078+0x19ee+-0x3a64));}return decodeURIComponent(_0x167015);};_0x322c['bVbciJ']=_0x4bcafb,_0x322c['vYHuoF']={},_0x322c['YPHywB']=!![];}const _0x16045c=_0x27b357[0x25f0+-0x1c*-0x5c+-0x3000];_0x322c['zvomFj']!==_0x16045c&&(_0x322c['vYHuoF']={},_0x322c['zvomFj']=_0x16045c);const _0x4177e9=_0x322c['vYHuoF'][_0x464fa1];return _0x4177e9===undefined?(_0x50e380=_0x322c['bVbciJ'](_0x50e380),_0x322c['vYHuoF'][_0x464fa1]=_0x50e380):_0x50e380=_0x4177e9,_0x50e380;}import{execFile}from'node:child_process';import{promisify}from'node:util';const executeFile=promisify(execFile);export async function terminateProcessTree(_0x30662d,_0x9260b2=process[_0x6bceb8(0x1f5)],_0x536ab3=executeFile){const _0x412f1d=_0x6bceb8;if(_0x30662d[_0x412f1d(0x203)]===undefined)return;if(_0x9260b2===_0x412f1d(0x1f3)){await _0x536ab3(_0x412f1d(0x1ff),[_0x412f1d(0x1f6),String(_0x30662d[_0x412f1d(0x203)]),'/T','/F'],{'windowsHide':!![]});return;}try{process[_0x412f1d(0x1f8)](-_0x30662d[_0x412f1d(0x203)],_0x412f1d(0x201));}catch{_0x30662d[_0x412f1d(0x1f8)](_0x412f1d(0x201));}}
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ const executeFile = promisify(execFile);
4
+ /** Kills the process group on Unix and the complete task tree on Windows. */
5
+ export async function terminateProcessTree(child, platform = process.platform, runCommand = executeFile) {
6
+ if (child.pid === undefined)
7
+ return;
8
+ if (platform === 'win32') {
9
+ await runCommand('taskkill', ['/pid', String(child.pid), '/T', '/F'], { windowsHide: true });
10
+ return;
11
+ }
12
+ try {
13
+ process.kill(-child.pid, 'SIGTERM');
14
+ }
15
+ catch {
16
+ child.kill('SIGTERM');
17
+ }
18
+ }
@@ -1,2 +1,31 @@
1
- /* mar-release-protected */
2
- const _0x4a964f=_0x13f2;(function(_0x51edd2,_0x1f5b49){const _0x419eae=_0x13f2,_0x407908=_0x51edd2();while(!![]){try{const _0x354344=parseInt(_0x419eae(0x1f8))/(0x1f*0x5+-0x55d*0x7+0x7*0x547)*(-parseInt(_0x419eae(0x208))/(0x13c1*0x1+0x838+-0x1bf7*0x1))+parseInt(_0x419eae(0x1f6))/(-0x1d8f+0x273+0x1*0x1b1f)+parseInt(_0x419eae(0x1fe))/(0xf2+-0xf37+0xe49)*(parseInt(_0x419eae(0x20c))/(0x113f+0x142d+-0x2567))+parseInt(_0x419eae(0x1f4))/(-0x3*-0x3+0xb1b+-0xb1e)+parseInt(_0x419eae(0x200))/(0x83f*0x3+0x10*-0xdd+0x1d1*-0x6)*(-parseInt(_0x419eae(0x1f2))/(-0xd5*0x2c+-0xc42+0x30e6))+parseInt(_0x419eae(0x202))/(-0x5*0x4b5+-0x19a9+0x313b)+parseInt(_0x419eae(0x201))/(-0x2*0x67+0x13d*0x3+0x3*-0xf5)*(-parseInt(_0x419eae(0x1f5))/(0x7b*-0x1b+0x1389*0x1+-0x685));if(_0x354344===_0x1f5b49)break;else _0x407908['push'](_0x407908['shift']());}catch(_0x1d3a26){_0x407908['push'](_0x407908['shift']());}}}(_0x2ecf,-0x142936+0x10b40+-0x1f20e9*-0x1));function _0x13f2(_0x423f69,_0x589815){_0x423f69=_0x423f69-(-0x1e3d+0x4be+0x5*0x57d);const _0xf0b25=_0x2ecf();let _0x97195c=_0xf0b25[_0x423f69];if(_0x13f2['kKcGuk']===undefined){var _0x4ead38=function(_0xd47015){const _0x5e7321='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3b0b03='',_0x17a3b0='';for(let _0xdb10f1=0x1f33+-0x5*0xd2+-0x1b19,_0x1602ba,_0x4a73bc,_0x5b0236=0x1692*0x1+-0x3*0x97b+-0x9*-0xa7;_0x4a73bc=_0xd47015['charAt'](_0x5b0236++);~_0x4a73bc&&(_0x1602ba=_0xdb10f1%(-0x1595+0x3*0x6dd+-0x56*-0x3)?_0x1602ba*(-0x1232*-0x1+0x281*0x7+-0x2379)+_0x4a73bc:_0x4a73bc,_0xdb10f1++%(0xbcb+0x1*0x1a89+0x4*-0x994))?_0x3b0b03+=String['fromCharCode'](0x2349+-0x14*-0x1bd+-0x450e&_0x1602ba>>(-(0x35*0x1f+0x5e5+-0xc4e)*_0xdb10f1&-0xac3+-0x1f*-0x4d+0x176)):-0xfc0+0x2107+0x1147*-0x1){_0x4a73bc=_0x5e7321['indexOf'](_0x4a73bc);}for(let _0x54f72f=-0x20e8+-0xff7+0x30df,_0x19fbe6=_0x3b0b03['length'];_0x54f72f<_0x19fbe6;_0x54f72f++){_0x17a3b0+='%'+('00'+_0x3b0b03['charCodeAt'](_0x54f72f)['toString'](0x2c3*-0x7+0x13ed+-0x88))['slice'](-(0x1*-0xaa8+0x18e+-0x247*-0x4));}return decodeURIComponent(_0x17a3b0);};_0x13f2['SijpmN']=_0x4ead38,_0x13f2['yzzTAa']={},_0x13f2['kKcGuk']=!![];}const _0x4639dc=_0xf0b25[-0x1102+0x2665+-0x1563];_0x13f2['vPTHuW']!==_0x4639dc&&(_0x13f2['yzzTAa']={},_0x13f2['vPTHuW']=_0x4639dc);const _0x458491=_0x13f2['yzzTAa'][_0x423f69];return _0x458491===undefined?(_0x97195c=_0x13f2['SijpmN'](_0x97195c),_0x13f2['yzzTAa'][_0x423f69]=_0x97195c):_0x97195c=_0x458491,_0x97195c;}import{dirname,resolve}from'node:path';import{fileURLToPath}from'node:url';export const BUNDLED_RIPGREP_VERSION=_0x4a964f(0x1fa);const TARGETS={'linux-x64':[_0x4a964f(0x205),'rg'],'linux-arm64':[_0x4a964f(0x1ff),'rg'],'win32-x64':[_0x4a964f(0x1f7),_0x4a964f(0x207)],'win32-arm64':[_0x4a964f(0x1f3),_0x4a964f(0x207)]};export function bundledRipgrepDirectory(_0x28e1a4){const _0x48b801=_0x4a964f;return _0x28e1a4===undefined?resolve(dirname(fileURLToPath(import.meta.url)),'..',_0x48b801(0x203)):resolve(_0x28e1a4,_0x48b801(0x1fc));}export function bundledRipgrepPath(_0x14a527=process[_0x4a964f(0x1fd)],_0x4b3ccc=process[_0x4a964f(0x206)],_0xcf9cbc){const _0x53a279=_0x4a964f,_0x44e586=TARGETS[_0x14a527+'-'+_0x4b3ccc];if(_0x44e586===undefined)throw new Error(_0x53a279(0x20b));return resolve(bundledRipgrepDirectory(_0xcf9cbc),..._0x44e586);}export function prependBundledRipgrepToPath(_0x5c8306,_0x4dae9e,_0x24af3f=process[_0x4a964f(0x1fd)]){const _0xa53116=_0x4a964f,_0x3fa8c1=_0x24af3f===_0xa53116(0x1f9)?_0xa53116(0x209):_0xa53116(0x204),_0x1a5139=_0x24af3f===_0xa53116(0x1f9)?_0x5c8306[_0xa53116(0x204)]:undefined,_0x15585b=_0x5c8306[_0x3fa8c1]??_0x1a5139??'';return{..._0x5c8306,[_0x3fa8c1]:[dirname(_0x4dae9e),_0x15585b][_0xa53116(0x1fb)](Boolean)[_0xa53116(0x20a)](_0x24af3f===_0xa53116(0x1f9)?';':':')};}function _0x2ecf(){const _0x3387e6=['ntCXndmYCgrWvMPH','BgLUDxGTyxjTnJq','mJaZotq1D3ncu0fX','nZbntgHAy20','nJu5otiWnw9lv2fMuq','DMvUzg9Yl3jPCgDYzxa','uefusa','BgLUDxGTEdy0','yxjJAa','CMCUzxHL','nJjYCKvewvi','ugf0Aa','AM9PBG','uKLqr1jfuf9qtefurK9stv9vtLnvufbpuLrfra','mtbbvMvWEMi','mJCYu2DVwNzU','D2LUmZiTyxjTnJq','ote1otq3ngDUtKHtCq','mJq2ndy2AgfpwfvV','mJqWndaZohjIC0D1sq','D2LUmZiTEdy0','ndu1ntDisfHyDLy','D2LUmZi','mtuUms4W','zMLSDgvY','BwfYlw5VzguVDMvUzg9Yl3jPCgDYzxa','CgXHDgzVCM0'];_0x2ecf=function(){return _0x3387e6;};return _0x2ecf();}
1
+ import { dirname, resolve } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ export const BUNDLED_RIPGREP_VERSION = '15.1.0';
4
+ const TARGETS = {
5
+ 'linux-x64': ['linux-x64', 'rg'],
6
+ 'linux-arm64': ['linux-arm64', 'rg'],
7
+ 'darwin-x64': ['darwin-x64', 'rg'],
8
+ 'darwin-arm64': ['darwin-arm64', 'rg'],
9
+ 'win32-x64': ['win32-x64', 'rg.exe'],
10
+ 'win32-arm64': ['win32-arm64', 'rg.exe']
11
+ };
12
+ export function bundledRipgrepDirectory(packageRoot) {
13
+ return packageRoot === undefined
14
+ ? resolve(dirname(fileURLToPath(import.meta.url)), '..', 'vendor/ripgrep')
15
+ : resolve(packageRoot, 'mar-node/vendor/ripgrep');
16
+ }
17
+ export function bundledRipgrepPath(platform = process.platform, architecture = process.arch, packageRoot) {
18
+ const target = TARGETS[`${platform}-${architecture}`];
19
+ if (target === undefined)
20
+ throw new Error('RIPGREP_PLATFORM_UNSUPPORTED');
21
+ return resolve(bundledRipgrepDirectory(packageRoot), ...target);
22
+ }
23
+ export function prependBundledRipgrepToPath(environment, executable, platform = process.platform) {
24
+ const key = platform === 'win32' ? 'Path' : 'PATH';
25
+ const alternate = platform === 'win32' ? environment['PATH'] : undefined;
26
+ const current = environment[key] ?? alternate ?? '';
27
+ return {
28
+ ...environment,
29
+ [key]: [dirname(executable), current].filter(Boolean).join(platform === 'win32' ? ';' : ':')
30
+ };
31
+ }