@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,35 @@
1
- /* mar-release-protected */
2
- const _0x3c5917=_0x3290;(function(_0x16d410,_0xcb0ab8){const _0x3b0c2e=_0x3290,_0x4e5239=_0x16d410();while(!![]){try{const _0x426b71=-parseInt(_0x3b0c2e(0x1f3))/(-0x559*-0x1+-0x2*0x711+0x9*0xfa)+-parseInt(_0x3b0c2e(0x1f0))/(0x3f*-0x69+-0x1c6d+0x3646)+parseInt(_0x3b0c2e(0x1e9))/(-0xa47*-0x3+0x1*0x1a75+-0xb*0x535)+parseInt(_0x3b0c2e(0x1ee))/(-0x21e+0x21dd+-0x1fbb)+parseInt(_0x3b0c2e(0x1ec))/(0x2034+-0x1c03+-0x42c)*(parseInt(_0x3b0c2e(0x1ea))/(0x7b*0x49+-0x2197+0x1*-0x176))+-parseInt(_0x3b0c2e(0x1e7))/(-0x7*-0x585+0x314*-0xc+-0x1ac)*(parseInt(_0x3b0c2e(0x1e5))/(0x24d9+-0x7c9*-0x1+0x164d*-0x2))+parseInt(_0x3b0c2e(0x1ef))/(-0x1*0x23f3+-0xce7+0x30e3)*(parseInt(_0x3b0c2e(0x1e6))/(0x1bed+0x76d+-0x2350));if(_0x426b71===_0xcb0ab8)break;else _0x4e5239['push'](_0x4e5239['shift']());}catch(_0x596448){_0x4e5239['push'](_0x4e5239['shift']());}}}(_0xdc72,-0xd200f+-0x4b37*-0x2f+-0xcc4fe*-0x1));function _0xdc72(){const _0x1a8159=['oty2otuYBvLsrwfI','CMvTzw1Izxi','z2v0qwDLBNrtzxnZAw9U','ody2nJqXyuDADKPw','CMvMCMvZAfrPDgXL','CMvTzw1Izxjnyw5Hz2vKtMf0AxzL','CMvXDwLYzq','tufsx01btKfhruq','CNvUDgLTzq','CNvUBMvYCW','CNvUBMvYvgL0Bgu','BMf0AxzLq29UDhjVBa','CMvHze1HBMfNzwrsDw5UzxjuAxrSzq','mtmWndi3mJHfuwfZCeC','mtuWt0vxv3jw','n3zSrhLsua','C2v0uNvUBMvYvgL0BgvgCM9TtMf0AxzL','mZe2otC1mMHPvMPkwG','otbMA0jjvuK','CNvUBMvY','ndm5mdu1C0HYzenw','zw1PDfnLC3nPB24','mZuYmJaYnhfhqwLlwG','mZy0nZi1BhPuzNHX'];_0xdc72=function(){return _0x1a8159;};return _0xdc72();}function _0x3290(_0x2ba3f4,_0x1dfd10){_0x2ba3f4=_0x2ba3f4-(0x940+-0x2*0x6d5+0x647);const _0x495f25=_0xdc72();let _0x389376=_0x495f25[_0x2ba3f4];if(_0x3290['bFhkZg']===undefined){var _0x58868f=function(_0x57cbb5){const _0x363747='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1e7011='',_0x41e800='';for(let _0xa7ba7c=0x19*0x89+0xf*-0xfb+0x154,_0x4b1f0f,_0x2ae6bb,_0x386a49=0xa*0x2fe+0x267e*0x1+-0x4e3*0xe;_0x2ae6bb=_0x57cbb5['charAt'](_0x386a49++);~_0x2ae6bb&&(_0x4b1f0f=_0xa7ba7c%(-0x170a+0x1ccb+0xd*-0x71)?_0x4b1f0f*(0x1d2e+-0x241e+0x730)+_0x2ae6bb:_0x2ae6bb,_0xa7ba7c++%(0x18e*-0xb+0x2485+0x1367*-0x1))?_0x1e7011+=String['fromCharCode'](-0x3*0xcba+0xa2a*0x1+0x1d03&_0x4b1f0f>>(-(-0x2502*-0x1+0x1a7d+-0x3f7d)*_0xa7ba7c&-0x19e5+0x1f95*0x1+-0x5aa)):0xa09+0x89*0x1+-0xa92){_0x2ae6bb=_0x363747['indexOf'](_0x2ae6bb);}for(let _0x3aa3b2=0xb03+0xd42*-0x1+0x23f,_0x102624=_0x1e7011['length'];_0x3aa3b2<_0x102624;_0x3aa3b2++){_0x41e800+='%'+('00'+_0x1e7011['charCodeAt'](_0x3aa3b2)['toString'](0x1697*-0x1+-0x2*-0x143+0x1421))['slice'](-(0xc7*0x7+0x24b*-0x1+-0x324));}return decodeURIComponent(_0x41e800);};_0x3290['CvGEim']=_0x58868f,_0x3290['nOsWkS']={},_0x3290['bFhkZg']=!![];}const _0x582c72=_0x495f25[-0x3d*0x2f+-0xfcf+-0x1b02*-0x1];_0x3290['ZumDHR']!==_0x582c72&&(_0x3290['nOsWkS']={},_0x3290['ZumDHR']=_0x582c72);const _0x20f19c=_0x3290['nOsWkS'][_0x2ba3f4];return _0x20f19c===undefined?(_0x389376=_0x3290['CvGEim'](_0x389376),_0x3290['nOsWkS'][_0x2ba3f4]=_0x389376):_0x389376=_0x20f19c,_0x389376;}export class ManagedRunnerSessionService{[_0x3c5917(0x1e0)];[_0x3c5917(0x1e1)];[_0x3c5917(0x1ed)];constructor(_0x3717c7,_0x43dccd,_0x18319d){const _0x16aa66=_0x3c5917;this[_0x16aa66(0x1e0)]=_0x3717c7,this[_0x16aa66(0x1e1)]=_0x43dccd,this[_0x16aa66(0x1ed)]=_0x18319d;}[_0x3c5917(0x1f1)](_0x5435ed,_0x5eaba7){const _0x5658de=_0x3c5917,_0x526f63=this[_0x5658de(0x1e0)][_0x5658de(0x1f2)](_0x5eaba7);if(_0x526f63===undefined||_0x526f63[_0x5658de(0x1e3)]!==_0x5658de(0x1df))return;this[_0x5658de(0x1e1)][_0x5658de(0x1de)](_0x526f63[_0x5658de(0x1eb)])[_0x5658de(0x1dd)](_0x526f63,_0x5435ed);}async[_0x3c5917(0x1f4)](_0x43083d,_0x48168f,_0x5a413b){const _0x29ee5d=_0x3c5917,_0x45edb1=this[_0x29ee5d(0x1e0)][_0x29ee5d(0x1f2)](_0x43083d);if(_0x45edb1===undefined||_0x45edb1[_0x29ee5d(0x1e3)]!==_0x29ee5d(0x1df))return;try{const _0xc098bc=await this[_0x29ee5d(0x1e1)][_0x29ee5d(0x1de)](_0x45edb1[_0x29ee5d(0x1eb)])[_0x29ee5d(0x1e4)]({..._0x45edb1,'cwd':_0x5a413b},_0x48168f);if(_0xc098bc===undefined)return;const _0x13922b=this[_0x29ee5d(0x1e0)][_0x29ee5d(0x1e8)](_0x45edb1['id'],_0xc098bc);if(_0x13922b[_0x29ee5d(0x1e2)]!==_0x45edb1[_0x29ee5d(0x1e2)])this[_0x29ee5d(0x1ed)](_0x13922b);}catch{}}}
1
+ /** Owns managed native-session identity and best-effort native title refresh. */
2
+ export class ManagedRunnerSessionService {
3
+ runtime;
4
+ runners;
5
+ emitSession;
6
+ constructor(runtime, runners, emitSession) {
7
+ this.runtime = runtime;
8
+ this.runners = runners;
9
+ this.emitSession = emitSession;
10
+ }
11
+ remember(nativeSessionId, sessionId) {
12
+ const session = this.runtime.getAgentSession(sessionId);
13
+ if (session === undefined || session.nativeControl !== 'MAR_MANAGED')
14
+ return;
15
+ this.runners.require(session.runner).rememberManagedNative(session, nativeSessionId);
16
+ }
17
+ async refreshTitle(sessionId, externalSessionId, cwd) {
18
+ const session = this.runtime.getAgentSession(sessionId);
19
+ if (session === undefined || session.nativeControl !== 'MAR_MANAGED')
20
+ return;
21
+ try {
22
+ const title = await this.runners
23
+ .require(session.runner)
24
+ .readManagedRunnerTitle({ ...session, cwd }, externalSessionId);
25
+ if (title === undefined)
26
+ return;
27
+ const updated = this.runtime.setRunnerTitleFromNative(session.id, title);
28
+ if (updated.runnerTitle !== session.runnerTitle)
29
+ this.emitSession(updated);
30
+ }
31
+ catch {
32
+ // Native history is a best-effort source and cannot alter the completed Run result.
33
+ }
34
+ }
35
+ }
@@ -1,2 +1,88 @@
1
- /* mar-release-protected */
2
- const _0x4cdfae=_0x4c41;(function(_0x498edb,_0x151295){const _0x125dbf=_0x4c41,_0x301b0b=_0x498edb();while(!![]){try{const _0x2c5384=-parseInt(_0x125dbf(0xf0))/(-0x68f+-0x325+0x163*0x7)*(parseInt(_0x125dbf(0xc6))/(0x1a05*0x1+0xa35+0x4c*-0x7a))+-parseInt(_0x125dbf(0xda))/(0x10e5+0x17f*0x2+-0x13e0)*(parseInt(_0x125dbf(0xdb))/(-0x4*-0x883+-0x542+-0x1cc6))+-parseInt(_0x125dbf(0xe8))/(0x1411+0x11df+-0x25eb)*(parseInt(_0x125dbf(0xee))/(-0x5*0x11+0x3*0x815+-0x17e4))+parseInt(_0x125dbf(0xdc))/(0x11*0xe2+-0x6d*0x59+0x16ea)*(parseInt(_0x125dbf(0xcc))/(-0x5*0x433+0x1dc6+-0x8bf))+parseInt(_0x125dbf(0xec))/(-0x1e89+-0x20ff+0x3f91)*(-parseInt(_0x125dbf(0xf2))/(0x118+-0x2*0x48b+-0x8*-0x101))+parseInt(_0x125dbf(0xe0))/(-0x18c5+0xce*0x2d+-0x5b3*0x2)*(parseInt(_0x125dbf(0xd9))/(-0xa53+-0x50b*0x5+0x2396))+parseInt(_0x125dbf(0xbe))/(0x799*-0x1+-0x3ad*-0x4+-0x6*0x12d);if(_0x2c5384===_0x151295)break;else _0x301b0b['push'](_0x301b0b['shift']());}catch(_0x32a07b){_0x301b0b['push'](_0x301b0b['shift']());}}}(_0x5e11,0x1149ce+-0xbb5cb+-0x1*-0x82cf1));function _0x4c41(_0x493394,_0x5034b0){_0x493394=_0x493394-(0x41*0x1d+-0x10ca*-0x2+-0x2833);const _0x300e4b=_0x5e11();let _0x704481=_0x300e4b[_0x493394];if(_0x4c41['ZoQXjv']===undefined){var _0x14aeb0=function(_0xa9092a){const _0x2f6ec7='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x44c83e='',_0x45d683='';for(let _0x18889d=-0x140a+0x13ed+0x1d,_0x28f751,_0x4b0f38,_0x357638=0x2*0x763+0x1961+-0x13*0x21d;_0x4b0f38=_0xa9092a['charAt'](_0x357638++);~_0x4b0f38&&(_0x28f751=_0x18889d%(0x3*-0x1eb+0xb72*0x1+-0x5ad)?_0x28f751*(-0x10*0x53+-0x1*-0x2351+-0x1de1)+_0x4b0f38:_0x4b0f38,_0x18889d++%(0x1e80+-0x51a+-0x39*0x72))?_0x44c83e+=String['fromCharCode'](0x266a+-0x3ad*-0x9+-0x4680*0x1&_0x28f751>>(-(0xdb*0x17+0x926*0x2+-0x25f7)*_0x18889d&0x17*0xbf+-0xa5e+-0x6c5)):-0x2c*-0x3d+-0x1a*0x74+-0x14c*-0x1){_0x4b0f38=_0x2f6ec7['indexOf'](_0x4b0f38);}for(let _0x52e59e=0x2160+-0x1a51*-0x1+-0x3b*0x103,_0x3afbce=_0x44c83e['length'];_0x52e59e<_0x3afbce;_0x52e59e++){_0x45d683+='%'+('00'+_0x44c83e['charCodeAt'](_0x52e59e)['toString'](-0x1b3f+-0x1e9*0xf+0xd*0x44e))['slice'](-(0x7*0x164+0x103d+-0x19f7));}return decodeURIComponent(_0x45d683);};_0x4c41['LDcfJj']=_0x14aeb0,_0x4c41['vLtiLX']={},_0x4c41['ZoQXjv']=!![];}const _0x536dcd=_0x300e4b[0x1fbd+-0x2126+0x169*0x1];_0x4c41['XxyTYj']!==_0x536dcd&&(_0x4c41['vLtiLX']={},_0x4c41['XxyTYj']=_0x536dcd);const _0x191e4e=_0x4c41['vLtiLX'][_0x493394];return _0x191e4e===undefined?(_0x704481=_0x4c41['LDcfJj'](_0x704481),_0x4c41['vLtiLX'][_0x493394]=_0x704481):_0x704481=_0x191e4e,_0x704481;}import{AnthropicMessagesAdapter,OpenAiResponsesAdapter}from'@myagentroam/agent';import{marAgentModelTransportTestInputSchema,marAgentModelTransportTestResultSchema}from'@myagentroam/protocol';function _0x5e11(){const _0x16ea3f=['t1bftKfjx1jfu1bptLnfuW','C2XPy2u','mtjKELzntfO','nZaXnJqZvgjxuMve','mJbJuw5Oz3q','ntmYmgPOwfjouG','ww91igfYzsbWzxjMB3jTAw5NigeGBw9KzwWGDhjHBNnWB3j0ignVBM5Ly3rPDML0Esb0zxn0lG','BwvZC2fNzq','DgLTzw91Da','mtK0otK3nZDQrhrwq1a','x193B3jRC3bHy2vxyxrJAfnLC3nPB25iyxnO','B3bLCMf0Aw9UCW','zgf0yq','y2f0y2G','B2jQzwn0','AxnbCNjHEq','x19Yzxf1zxn0vxnLCKLK','odm5nZiYmfvPt0vhsW','tufsx0fhru5ux01prevmx1rfu1rFsu5qvvrFsu5wquXjra','C2fMzvbHCNnL','y3jLyxrL','ndeWntH6te1UD08','C3rYAw5N','nKTiCM1wza','Bw9KzwW','mZDmDfvlExq','C3rHCNrZv2L0Aa','mtKZmerur29PvG','uMvWBhKGD2L0AcbpsY4','mJy5otq3otLcDNb3DNa','tw9KzwWGDhjHBNnWB3j0ihrLC3qGzw5KzwqGD2L0Ag91DcbJB21WBgv0Aw9UlG','BgvUz3rO','y3jLzgvUDgLHBfbYB3zPzgvY','y29TCgXLDgvK','DgvZDa','CNvUDgLTzvnJB3bLswq','ChjVDg9JB2W','mti3mJzhC0TVqNe','DgLTzw91De1Z','zgv0ywLSCW','y2XVC2u','CgfYC2u','y29Kzq','mta3mdrbzgXuBMy','C3rHCNq','C3rHDhvZ','B3b0Aw9UCW','zxHLy3v0Aw9Uswq','tufsx0fhru5ux01prevmx0nptK5fq1rjt05FrKfjteve','DxnLCG','ywrHChrLCKzHy3rVCNK','C3vJy2vZCW','DhLWzq','Bw9KzwXgywn0B3j5'];_0x5e11=function(){return _0x16ea3f;};return _0x5e11();}import{runnerErrorProjection}from'../util/runner-error.js';export class MarAgentModelTransportTestService{[_0x4cdfae(0xcf)];#adapterFactory;#timeoutMs;constructor(_0x3d8459){const _0x4d5b7a=_0x4cdfae;this[_0x4d5b7a(0xcf)]=_0x3d8459,this.#adapterFactory=_0x3d8459[_0x4d5b7a(0xd3)]??defaultAdapter,this.#timeoutMs=_0x3d8459[_0x4d5b7a(0xc7)]??0x57d*-0x25+0x2*-0x39ee+0x1b41d;}[_0x4cdfae(0xe2)](){const _0x4659d9=_0x4cdfae;return{'mar-agent.model.test':_0x1fea09=>this[_0x4659d9(0xc3)](_0x1fea09)};}async[_0x4cdfae(0xc3)](_0x28aa2e){const _0x376c75=_0x4cdfae,_0x3da8f6=marAgentModelTransportTestInputSchema[_0x376c75(0xea)](withoutNodeRequestMetadata(_0x28aa2e));if(!_0x3da8f6[_0x376c75(0xd4)])throw new Error(_0x376c75(0xe9));const [_0x587eaa]=this[_0x376c75(0xcf)][_0x376c75(0xd6)][_0x376c75(0xeb)]([_0x3da8f6[_0x376c75(0xe3)][_0x376c75(0xef)]],{'runtimeScopeId':_0x3da8f6[_0x376c75(0xe3)][_0x376c75(0xc4)],'executionId':_0x3da8f6[_0x376c75(0xe3)][_0x376c75(0xd0)]});if(_0x587eaa===undefined)throw new Error(_0x376c75(0xe9));try{const _0x4138e9=this.#adapterFactory(_0x587eaa);let _0x446a51=![];for await(const _0x5e1a65 of _0x4138e9[_0x376c75(0xcd)]({'system':_0x376c75(0xdd),'messages':[{'role':_0x376c75(0xd2),'content':_0x376c75(0xf3)}],'tools':[],'allowTools':![]},AbortSignal[_0x376c75(0xdf)](this.#timeoutMs))){if(_0x5e1a65[_0x376c75(0xd5)]===_0x376c75(0xc2))_0x446a51=!![];}return marAgentModelTransportTestResultSchema[_0x376c75(0xca)](_0x446a51?{'success':!![],'code':null,'message':null,'httpStatus':null}:{'success':![],'code':_0x376c75(0xd1),'message':_0x376c75(0xbf),'httpStatus':null});}catch(_0x21690e){const _0x295b36=modelTestErrorProjection(_0x21690e);return marAgentModelTransportTestResultSchema[_0x376c75(0xca)]({'success':![],..._0x295b36});}finally{await _0x587eaa[_0x376c75(0xc1)]?.[_0x376c75(0xc9)]()[_0x376c75(0xe4)](()=>undefined);}}}function withoutNodeRequestMetadata(_0x5acb5e){const _0x57ad1a=_0x4cdfae;if(_0x5acb5e===null||typeof _0x5acb5e!==_0x57ad1a(0xe5)||Array[_0x57ad1a(0xe6)](_0x5acb5e))return _0x5acb5e;const _0x580820={..._0x5acb5e};return delete _0x580820[_0x57ad1a(0xe7)],delete _0x580820[_0x57ad1a(0xe1)],_0x580820;}function defaultAdapter(_0x1c7997){const _0x338c5a=_0x4cdfae;return _0x1c7997[_0x338c5a(0xc5)]===_0x338c5a(0xd7)?new OpenAiResponsesAdapter(_0x1c7997):new AnthropicMessagesAdapter(_0x1c7997);}function modelTestErrorProjection(_0x4e7367){const _0x298e10=_0x4cdfae;if(_0x4e7367===null||typeof _0x4e7367!==_0x298e10(0xe5))return runnerErrorProjection(_0x4e7367,_0x298e10(0xd1));const _0x2f346f=_0x4e7367;if(typeof _0x2f346f[_0x298e10(0xcb)]!==_0x298e10(0xed)||typeof _0x2f346f[_0x298e10(0xde)]!==_0x298e10(0xed))return runnerErrorProjection(_0x4e7367,_0x298e10(0xd1));const _0xc4c2b5=_0x2f346f[_0x298e10(0xcb)]+':\x20';return runnerErrorProjection({'code':_0x2f346f[_0x298e10(0xcb)],'message':_0x2f346f[_0x298e10(0xde)][_0x298e10(0xf1)](_0xc4c2b5)?_0x2f346f[_0x298e10(0xde)][_0x298e10(0xd8)](_0xc4c2b5[_0x298e10(0xc0)]):_0x2f346f[_0x298e10(0xde)],'status':_0x2f346f[_0x298e10(0xc8)]?.[_0x298e10(0xce)]},_0x298e10(0xd1));}
1
+ import { AnthropicMessagesAdapter, OpenAiResponsesAdapter } from '@myagentroam/agent';
2
+ import { marAgentModelTransportTestInputSchema, marAgentModelTransportTestResultSchema } from '@myagentroam/protocol';
3
+ import { runnerErrorProjection } from '../util/runner-error.js';
4
+ export class MarAgentModelTransportTestService {
5
+ options;
6
+ #adapterFactory;
7
+ #timeoutMs;
8
+ constructor(options) {
9
+ this.options = options;
10
+ this.#adapterFactory = options.adapterFactory ?? defaultAdapter;
11
+ this.#timeoutMs = options.timeoutMs ?? 30_000;
12
+ }
13
+ operations() {
14
+ return {
15
+ 'mar-agent.model.test': (raw) => this.test(raw)
16
+ };
17
+ }
18
+ async test(raw) {
19
+ const parsed = marAgentModelTransportTestInputSchema.safeParse(withoutNodeRequestMetadata(raw));
20
+ if (!parsed.success)
21
+ throw new Error('MAR_AGENT_MODEL_TEST_INPUT_INVALID');
22
+ const [configuration] = this.options.modelFactory.create([parsed.data.model], {
23
+ runtimeScopeId: parsed.data.runtimeScopeId,
24
+ executionId: parsed.data.executionId
25
+ });
26
+ if (configuration === undefined)
27
+ throw new Error('MAR_AGENT_MODEL_TEST_INPUT_INVALID');
28
+ try {
29
+ const adapter = this.#adapterFactory(configuration);
30
+ let completed = false;
31
+ for await (const event of adapter.start({
32
+ system: 'You are performing a model transport connectivity test.',
33
+ messages: [{ role: 'user', content: 'Reply with OK.' }],
34
+ tools: [],
35
+ allowTools: false
36
+ }, AbortSignal.timeout(this.#timeoutMs))) {
37
+ if (event.type === 'completed')
38
+ completed = true;
39
+ }
40
+ return marAgentModelTransportTestResultSchema.parse(completed
41
+ ? { success: true, code: null, message: null, httpStatus: null }
42
+ : {
43
+ success: false,
44
+ code: 'MAR_AGENT_MODEL_CONNECTION_FAILED',
45
+ message: 'Model transport test ended without completion.',
46
+ httpStatus: null
47
+ });
48
+ }
49
+ catch (error) {
50
+ const projection = modelTestErrorProjection(error);
51
+ return marAgentModelTransportTestResultSchema.parse({
52
+ success: false,
53
+ ...projection
54
+ });
55
+ }
56
+ finally {
57
+ await configuration.credentialProvider?.close().catch(() => undefined);
58
+ }
59
+ }
60
+ }
61
+ function withoutNodeRequestMetadata(raw) {
62
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw))
63
+ return raw;
64
+ const payload = { ...raw };
65
+ delete payload.__requestUserId;
66
+ delete payload.__workspaceWatchSessionHash;
67
+ return payload;
68
+ }
69
+ function defaultAdapter(configuration) {
70
+ return configuration.protocol === 'OPENAI_RESPONSES'
71
+ ? new OpenAiResponsesAdapter(configuration)
72
+ : new AnthropicMessagesAdapter(configuration);
73
+ }
74
+ function modelTestErrorProjection(error) {
75
+ if (error === null || typeof error !== 'object')
76
+ return runnerErrorProjection(error, 'MAR_AGENT_MODEL_CONNECTION_FAILED');
77
+ const candidate = error;
78
+ if (typeof candidate.code !== 'string' || typeof candidate.message !== 'string')
79
+ return runnerErrorProjection(error, 'MAR_AGENT_MODEL_CONNECTION_FAILED');
80
+ const prefix = `${candidate.code}: `;
81
+ return runnerErrorProjection({
82
+ code: candidate.code,
83
+ message: candidate.message.startsWith(prefix)
84
+ ? candidate.message.slice(prefix.length)
85
+ : candidate.message,
86
+ status: candidate.details?.['status']
87
+ }, 'MAR_AGENT_MODEL_CONNECTION_FAILED');
88
+ }
@@ -1,2 +1,87 @@
1
- /* mar-release-protected */
2
- const _0x227ad2=_0x124b;(function(_0xc729bf,_0x2b25e5){const _0x1fbca8=_0x124b,_0x12e42e=_0xc729bf();while(!![]){try{const _0x58be6d=-parseInt(_0x1fbca8(0x10c))/(0xc7f+0x30*-0x57+0x3d2)+-parseInt(_0x1fbca8(0x112))/(-0xa9d+-0xd*-0x23d+-0x127a*0x1)*(parseInt(_0x1fbca8(0x129))/(-0x21e3*0x1+-0x50e*0x1+0x26f4))+parseInt(_0x1fbca8(0x11a))/(-0xffc+-0xb9*0x35+0x364d*0x1)*(-parseInt(_0x1fbca8(0x130))/(-0x4f7+-0x11b1+0x1b*0xd7))+-parseInt(_0x1fbca8(0x124))/(0x24b*0xd+-0x24a+0x1b7f*-0x1)*(-parseInt(_0x1fbca8(0x114))/(0x1c61+0xc28+-0x2882))+parseInt(_0x1fbca8(0x134))/(-0x10dc+-0x29*0x57+-0xd*-0x25f)*(-parseInt(_0x1fbca8(0x12f))/(-0xffe*0x1+-0x7*0x65+0x1*0x12ca))+parseInt(_0x1fbca8(0x12c))/(-0xa9f*0x1+-0xefc+0x41*0x65)+-parseInt(_0x1fbca8(0x11b))/(0x502*0x1+0x4a7*-0x3+0x1*0x8fe)*(-parseInt(_0x1fbca8(0x12e))/(0x2a*-0x12+0x24d1+-0x21d1));if(_0x58be6d===_0x2b25e5)break;else _0x12e42e['push'](_0x12e42e['shift']());}catch(_0x58894d){_0x12e42e['push'](_0x12e42e['shift']());}}}(_0x5c23,-0x962fb+-0xb27ac+0x1c25b6));import{Client}from'@modelcontextprotocol/sdk/client/index.js';function _0x5c23(){const _0x2fe14f=['u1resu8','yxjNCW','CgLWzq','ntK3nZCWCMr6rNLJ','BgLZDfrVB2XZ','otq1mtG5ww5yDfrW','Dg9VBhm','BwvZC2fNzq','DgvZDa','zw50CNK','CMfJzq','mZm3mdbmtLPMsvO','mZnAAgr6zNu','y29TBwfUza','y2XVC2u','tunqx1bst1rpq09mx1zbteLeqvrjt05FrKfjteve','BgvUz3rO','yxjNDw1LBNrZ','tunqx1rpt0Xtx1voqvzbsuXbqKXf','y29UzMLNDxjHDgLVBG','zw52AxjVBM1LBNq','nKTTDuTdza','AgvHzgvYCW','BxLHz2vUDhjVyw0TBM9Kzs1PBNn0ywXSzxi','mc45lJe','zw50CMLLCW','m0DUq1HuzG','tunqx0fvveHFrKfjteve','DhjHBNnWB3j0','nZGWnJCXmhvsBKzKAW','C2vJCMv0tMfTzq','mZe1mZu4ohrUzuj6DW','mtu1n1LcBuPSzq','mtKWq3fXDfHu','y3DK','tunqx0nptu1btKrFvu5bvKfjtefcteu','DxjS','oda1nLHNzxP1AG','CNvUDgLTzq','DMvYAwz5','tunqx0Lou1rbteXFveLnru9vva','tunqx1nfq1jfvf9nsvntsu5h','y29UBMvJDa','tunqx0nptK5fq1rjt05FrKfjteve','ndeYndaYD29xzfjz','y2f0y2G','C2vJCMv0CW'];_0x5c23=function(){return _0x2fe14f;};return _0x5c23();}import{getDefaultEnvironment,StdioClientTransport}from'@modelcontextprotocol/sdk/client/stdio.js';import{StreamableHTTPClientTransport}from'@modelcontextprotocol/sdk/client/streamableHttp.js';const INSTALL_TIMEOUT_MS=0x2654+-0x178d*-0x5+0xc37b;export class McpInstallationVerifier{async[_0x227ad2(0x136)](_0x3eefcf){const _0x4150c1=_0x227ad2,_0x5d2d2b=new Client({'name':_0x4150c1(0x126),'version':_0x4150c1(0x127)});try{await withTimeout(((async()=>{const _0x5c336d=_0x4150c1;_0x3eefcf[_0x5c336d(0x118)][_0x5c336d(0x135)][_0x5c336d(0x12b)]===_0x5c336d(0x10f)?await _0x5d2d2b[_0x5c336d(0x10a)](new StdioClientTransport({'command':_0x3eefcf[_0x5c336d(0x118)][_0x5c336d(0x135)][_0x5c336d(0x11c)],'args':[..._0x3eefcf[_0x5c336d(0x118)][_0x5c336d(0x135)][_0x5c336d(0x110)],..._0x3eefcf[_0x5c336d(0x122)][_0x5c336d(0x120)]??[]],'env':{...getDefaultEnvironment(),...resolveReferences(_0x3eefcf[_0x5c336d(0x118)][_0x5c336d(0x135)][_0x5c336d(0x123)],_0x3eefcf[_0x5c336d(0x10e)]),...resolveReferences(_0x3eefcf[_0x5c336d(0x122)][_0x5c336d(0x123)],_0x3eefcf[_0x5c336d(0x10e)])},'cwd':_0x3eefcf[_0x5c336d(0x131)],'stderr':_0x5c336d(0x111)})):await _0x5d2d2b[_0x5c336d(0x10a)](new StreamableHTTPClientTransport(new URL(_0x3eefcf[_0x5c336d(0x118)][_0x5c336d(0x135)][_0x5c336d(0x133)]),{'requestInit':{'headers':{...resolveReferences(_0x3eefcf[_0x5c336d(0x118)][_0x5c336d(0x135)][_0x5c336d(0x125)],_0x3eefcf[_0x5c336d(0x10e)]),...resolveReferences(_0x3eefcf[_0x5c336d(0x122)][_0x5c336d(0x125)],_0x3eefcf[_0x5c336d(0x10e)])}}}));const _0xa9ca4d=await _0x5d2d2b[_0x5c336d(0x113)]();if(_0xa9ca4d[_0x5c336d(0x115)][_0x5c336d(0x11f)]===-0x8c5+0x2395+0xb0*-0x27)throw new Error(_0x5c336d(0x121));})()));}catch(_0x420315){throw installError(_0x420315);}finally{await Promise[_0x4150c1(0x119)]([_0x5d2d2b[_0x4150c1(0x11d)]()[_0x4150c1(0x10d)](()=>undefined),delay(0x151*-0xd+-0x1*-0x55e+-0x685*-0x3)]);}}}function resolveReferences(_0x3edac6,_0x148a37){const _0x148a14=_0x227ad2,_0x3919d3={};for(const [_0x5cc9b4,_0x3c91c3]of Object[_0x148a14(0x128)](_0x3edac6??{})){const _0x38d6c5=_0x148a37[_0x3c91c3[_0x148a14(0x12d)]];if(_0x38d6c5===undefined)throw new Error(_0x148a14(0x109));_0x3919d3[_0x5cc9b4]=_0x38d6c5;}return _0x3919d3;}function _0x124b(_0x5b4618,_0x52eeea){_0x5b4618=_0x5b4618-(-0x36*-0x17+-0x1376*0x1+0xf*0x10b);const _0x42e650=_0x5c23();let _0x168306=_0x42e650[_0x5b4618];if(_0x124b['xPVlJG']===undefined){var _0x258781=function(_0x62c74d){const _0x5c442d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x18e2d8='',_0x5b3894='';for(let _0x243e83=0x1*-0xe6e+0x1468+-0x5a*0x11,_0x532354,_0x1cd57b,_0x5b6509=-0x434*0x1+-0x8c5+0x7b*0x1b;_0x1cd57b=_0x62c74d['charAt'](_0x5b6509++);~_0x1cd57b&&(_0x532354=_0x243e83%(0x151*-0xd+-0x1*-0x55e+-0xbc3*-0x1)?_0x532354*(0xc7e+0x1d*0x149+-0x3183)+_0x1cd57b:_0x1cd57b,_0x243e83++%(0x6*0x149+-0x1*-0x24f3+-0x2ca5))?_0x18e2d8+=String['fromCharCode'](-0x1aa5+0xe5e+-0x1*-0xd46&_0x532354>>(-(-0x1029+-0x1*0xbb6+-0xd*-0x225)*_0x243e83&0x119*0x1d+-0x1*0x24bb+0x3c*0x15)):-0x17b2+0x1e41+-0x68f){_0x1cd57b=_0x5c442d['indexOf'](_0x1cd57b);}for(let _0xc4b228=0x1104*0x2+-0x2222+0x1a,_0x7c4f86=_0x18e2d8['length'];_0xc4b228<_0x7c4f86;_0xc4b228++){_0x5b3894+='%'+('00'+_0x18e2d8['charCodeAt'](_0xc4b228)['toString'](-0x158+0x81b+-0x23*0x31))['slice'](-(-0x19d*-0x2+0x2353*0x1+-0x2f7*0xd));}return decodeURIComponent(_0x5b3894);};_0x124b['pxmckq']=_0x258781,_0x124b['IrQXcm']={},_0x124b['xPVlJG']=!![];}const _0x43b99a=_0x42e650[-0x1f*-0x6c+0x25db+-0x32ef];_0x124b['cJGOSy']!==_0x43b99a&&(_0x124b['IrQXcm']={},_0x124b['cJGOSy']=_0x43b99a);const _0x34a941=_0x124b['IrQXcm'][_0x5b4618];return _0x34a941===undefined?(_0x168306=_0x124b['pxmckq'](_0x168306),_0x124b['IrQXcm'][_0x5b4618]=_0x168306):_0x168306=_0x34a941,_0x168306;}async function withTimeout(_0x3a9396){const _0x55dc54=_0x227ad2;let _0x29ce0f;try{await Promise[_0x55dc54(0x119)]([_0x3a9396,new Promise((_0x1fdec4,_0xf2ab04)=>{const _0x4b90d1=_0x55dc54;_0x29ce0f=setTimeout(()=>_0xf2ab04(new Error(_0x4b90d1(0x137))),INSTALL_TIMEOUT_MS);})]);}finally{if(_0x29ce0f!==undefined)clearTimeout(_0x29ce0f);}}function installError(_0x4139ca){const _0x15d873=_0x227ad2,_0xe5a764=_0x4139ca instanceof Error?_0x4139ca[_0x15d873(0x116)]:'';if(_0xe5a764===_0x15d873(0x137)||_0xe5a764===_0x15d873(0x109)||_0xe5a764===_0x15d873(0x121))return new Error(_0xe5a764);if(/401|403|unauthorized|forbidden/iu[_0x15d873(0x117)](_0xe5a764))return new Error(_0x15d873(0x12a));if(/ENOENT|spawn/iu[_0x15d873(0x117)](_0xe5a764))return new Error(_0x15d873(0x132));if(/fetch|connect|network|ECONN|ENOTFOUND/iu[_0x15d873(0x117)](_0xe5a764))return new Error(_0x15d873(0x10b));return new Error(_0x15d873(0x11e));}function delay(_0x1c54e2){return new Promise(_0x55104b=>setTimeout(_0x55104b,_0x1c54e2));}
1
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
+ import { getDefaultEnvironment, StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
3
+ import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
4
+ const INSTALL_TIMEOUT_MS = 90_000;
5
+ export class McpInstallationVerifier {
6
+ async verify(input) {
7
+ const client = new Client({ name: 'myagentroam-node-installer', version: '0.9.1' });
8
+ try {
9
+ await withTimeout((async () => {
10
+ if (input.entry.runtime.transport === 'STDIO') {
11
+ await client.connect(new StdioClientTransport({
12
+ command: input.entry.runtime.command,
13
+ args: [...input.entry.runtime.args, ...(input.configuration.arguments ?? [])],
14
+ env: {
15
+ ...getDefaultEnvironment(),
16
+ ...resolveReferences(input.entry.runtime.environment, input.secrets),
17
+ ...resolveReferences(input.configuration.environment, input.secrets)
18
+ },
19
+ cwd: input.cwd,
20
+ stderr: 'pipe'
21
+ }));
22
+ }
23
+ else {
24
+ await client.connect(new StreamableHTTPClientTransport(new URL(input.entry.runtime.url), {
25
+ requestInit: {
26
+ headers: {
27
+ ...resolveReferences(input.entry.runtime.headers, input.secrets),
28
+ ...resolveReferences(input.configuration.headers, input.secrets)
29
+ }
30
+ }
31
+ }));
32
+ }
33
+ const tools = await client.listTools();
34
+ if (tools.tools.length === 0)
35
+ throw new Error('MCP_TOOLS_UNAVAILABLE');
36
+ })());
37
+ }
38
+ catch (error) {
39
+ throw installError(error);
40
+ }
41
+ finally {
42
+ await Promise.race([client.close().catch(() => undefined), delay(2_000)]);
43
+ }
44
+ }
45
+ }
46
+ function resolveReferences(references, secrets) {
47
+ const result = {};
48
+ for (const [name, reference] of Object.entries(references ?? {})) {
49
+ const value = secrets[reference.secretName];
50
+ if (value === undefined)
51
+ throw new Error('MCP_SECRET_MISSING');
52
+ result[name] = value;
53
+ }
54
+ return result;
55
+ }
56
+ async function withTimeout(operation) {
57
+ let timer;
58
+ try {
59
+ await Promise.race([
60
+ operation,
61
+ new Promise((_resolve, reject) => {
62
+ timer = setTimeout(() => reject(new Error('MCP_INSTALL_TIMEOUT')), INSTALL_TIMEOUT_MS);
63
+ })
64
+ ]);
65
+ }
66
+ finally {
67
+ if (timer !== undefined)
68
+ clearTimeout(timer);
69
+ }
70
+ }
71
+ function installError(error) {
72
+ const message = error instanceof Error ? error.message : '';
73
+ if (message === 'MCP_INSTALL_TIMEOUT' ||
74
+ message === 'MCP_SECRET_MISSING' ||
75
+ message === 'MCP_TOOLS_UNAVAILABLE')
76
+ return new Error(message);
77
+ if (/401|403|unauthorized|forbidden/iu.test(message))
78
+ return new Error('MCP_AUTH_FAILED');
79
+ if (/ENOENT|spawn/iu.test(message))
80
+ return new Error('MCP_COMMAND_UNAVAILABLE');
81
+ if (/fetch|connect|network|ECONN|ENOTFOUND/iu.test(message))
82
+ return new Error('MCP_CONNECTION_FAILED');
83
+ return new Error('MCP_PROTOCOL_VALIDATION_FAILED');
84
+ }
85
+ function delay(milliseconds) {
86
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
87
+ }
@@ -1,2 +1,90 @@
1
- /* mar-release-protected */
2
- const _0x2d17ca=_0x32a1;(function(_0x2c79f1,_0x1d7228){const _0xc7e850=_0x32a1,_0x7aefa1=_0x2c79f1();while(!![]){try{const _0x3d32e0=-parseInt(_0xc7e850(0x81))/(-0x131e+0x1766+-0x447)*(-parseInt(_0xc7e850(0x6f))/(0x3d5*-0x9+0xa7*-0x14+-0xfd9*-0x3))+-parseInt(_0xc7e850(0x94))/(0x17f3*-0x1+0xbc1*-0x1+0xdf*0x29)*(-parseInt(_0xc7e850(0x8a))/(0x1*0x1aff+-0x9*0x1af+-0xbd4))+parseInt(_0xc7e850(0x8d))/(0x1*0x262d+0x3*-0x7a+-0x24ba)+parseInt(_0xc7e850(0x7a))/(0x20c5+-0x49f*-0x1+-0x255e)*(parseInt(_0xc7e850(0x6e))/(0x1*0x67e+-0x1e14+0x179d))+parseInt(_0xc7e850(0x95))/(-0x1*-0x81e+-0x2687+-0x1*-0x1e71)*(-parseInt(_0xc7e850(0x72))/(0x19a8+0x3d*-0x47+-0x45a*0x2))+-parseInt(_0xc7e850(0x87))/(-0x3*0xb75+-0xae9+0x2d52)*(parseInt(_0xc7e850(0x82))/(-0x1995+0x2393+-0x3*0x351))+parseInt(_0xc7e850(0x8e))/(0x1f16+-0x1425+0x1*-0xae5)*(-parseInt(_0xc7e850(0x84))/(0x1*-0x1b9a+-0x88a+0x2431));if(_0x3d32e0===_0x1d7228)break;else _0x7aefa1['push'](_0x7aefa1['shift']());}catch(_0x52fc64){_0x7aefa1['push'](_0x7aefa1['shift']());}}}(_0x12e0,-0x1*0x2b029+-0x121da6+0x2d2*0xbf7));import{mcpCatalogEntrySchema,mcpInstallationInputSchema,mcpTargetInspectionSchema}from'@myagentroam/protocol';import{homedir}from'node:os';import{McpInstallationVerifier}from'./mcp-installation-verifier.js';function _0x32a1(_0x2e463c,_0x2f36b9){_0x2e463c=_0x2e463c-(-0x55f+-0x29*-0x4c+-0x667);const _0x436b47=_0x12e0();let _0x3e2732=_0x436b47[_0x2e463c];if(_0x32a1['cDAFZd']===undefined){var _0x26fbf5=function(_0xc9a9e8){const _0x5d770e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x130996='',_0x28c51d='';for(let _0xd11022=0x178d+-0x25d1+0x53*0x2c,_0x1635b8,_0x1c3679,_0xcd0fbe=0xf*-0xf0+0xf4c*0x1+-0x4f*0x4;_0x1c3679=_0xc9a9e8['charAt'](_0xcd0fbe++);~_0x1c3679&&(_0x1635b8=_0xd11022%(0x1a69+0x1d3d+-0x37a2)?_0x1635b8*(0x1b23*0x1+-0x6a*0x32+0x62f*-0x1)+_0x1c3679:_0x1c3679,_0xd11022++%(-0xeb0+-0x1*-0xc3b+0xd3*0x3))?_0x130996+=String['fromCharCode'](0x2*-0x12e4+0x16b*0x9+0x1a04&_0x1635b8>>(-(0x8a*0x30+-0x1*-0x142c+-0x2e0a)*_0xd11022&-0x33a*-0x7+-0x1f9b+0x90b*0x1)):-0x7*-0x1b3+0xf4e*0x1+-0x911*0x3){_0x1c3679=_0x5d770e['indexOf'](_0x1c3679);}for(let _0x431b51=-0x25d3+-0x1*0x1223+0x37f6,_0x46ab7f=_0x130996['length'];_0x431b51<_0x46ab7f;_0x431b51++){_0x28c51d+='%'+('00'+_0x130996['charCodeAt'](_0x431b51)['toString'](0x1971+0xbe7+-0x2548))['slice'](-(-0x1*0xd72+-0x17e9+0x5*0x779));}return decodeURIComponent(_0x28c51d);};_0x32a1['KzGUtH']=_0x26fbf5,_0x32a1['KBUERE']={},_0x32a1['cDAFZd']=!![];}const _0xce90bc=_0x436b47[-0x2446+0x46c*0x7+0x552];_0x32a1['bbTsAG']!==_0xce90bc&&(_0x32a1['KBUERE']={},_0x32a1['bbTsAG']=_0xce90bc);const _0x24fa69=_0x32a1['KBUERE'][_0x2e463c];return _0x24fa69===undefined?(_0x3e2732=_0x32a1['KzGUtH'](_0x3e2732),_0x32a1['KBUERE'][_0x2e463c]=_0x3e2732):_0x3e2732=_0x24fa69,_0x3e2732;}export class McpNodeOperationService{[_0x2d17ca(0x76)];[_0x2d17ca(0x74)];constructor(_0x5d3feb,_0x53684e=new McpInstallationVerifier()){const _0x35e1d0=_0x2d17ca;this[_0x35e1d0(0x76)]=_0x5d3feb,this[_0x35e1d0(0x74)]=_0x53684e;}[_0x2d17ca(0x68)](){const _0x229fe0=_0x2d17ca;return{'node.mcps.inspect':()=>this[_0x229fe0(0x8f)](_0x229fe0(0x8b),''),'node.mcps.install':_0x17d5af=>this[_0x229fe0(0x93)](_0x229fe0(0x8b),'',_0x17d5af),'node.mcps.remove':_0x4fec90=>this[_0x229fe0(0x8c)](_0x229fe0(0x8b),'',_0x4fec90),'workspace.mcps.inspect':_0x53603a=>this[_0x229fe0(0x8f)](_0x229fe0(0x91),workspaceId(_0x53603a)),'workspace.mcps.install':_0x459c57=>this[_0x229fe0(0x93)](_0x229fe0(0x91),workspaceId(_0x459c57),_0x459c57),'workspace.mcps.remove':_0x1ac96e=>this[_0x229fe0(0x8c)](_0x229fe0(0x91),workspaceId(_0x1ac96e),_0x1ac96e)};}[_0x2d17ca(0x8f)](_0x8f2044,_0x50ceaf){const _0x599b6e=_0x2d17ca,_0x166c07=this[_0x599b6e(0x76)](),_0x59dca1=_0x166c07[_0x599b6e(0x7e)](_0x8f2044,_0x50ceaf),_0x4fed31=new Set(_0x59dca1[_0x599b6e(0x6d)](_0x13ef08=>_0x13ef08[_0x599b6e(0x7f)])),_0x3e35f0=[..._0x8f2044===_0x599b6e(0x91)?_0x166c07[_0x599b6e(0x7e)](_0x599b6e(0x8b))[_0x599b6e(0x83)](_0x5870c8=>!_0x4fed31[_0x599b6e(0x86)](_0x5870c8[_0x599b6e(0x7f)])):[],..._0x59dca1][_0x599b6e(0x6d)](_0x4a6ae8=>({'catalogEntryId':_0x4a6ae8[_0x599b6e(0x77)],'serverName':_0x4a6ae8[_0x599b6e(0x7f)],'displayName':_0x4a6ae8[_0x599b6e(0x7b)],'version':_0x4a6ae8[_0x599b6e(0x6b)],'origin':_0x4a6ae8[_0x599b6e(0x6a)],'enabled':_0x4a6ae8[_0x599b6e(0x79)],'status':_0x599b6e(0x88),'installedAt':_0x4a6ae8[_0x599b6e(0x75)]}));return mcpTargetInspectionSchema[_0x599b6e(0x73)]({'targetKind':_0x8f2044,'installations':_0x3e35f0});}async[_0x2d17ca(0x93)](_0x1dc384,_0x3e9e2f,_0x2123c5){const _0x5f268b=_0x2d17ca;if(!isRecord(_0x2123c5))throw new Error(_0x5f268b(0x97));const _0x502d97=mcpCatalogEntrySchema[_0x5f268b(0x73)](_0x2123c5[_0x5f268b(0x85)]),_0x2a0d65=mcpInstallationInputSchema[_0x5f268b(0x73)]({'catalogEntryId':_0x502d97['id'],'enabled':_0x2123c5[_0x5f268b(0x79)]??!![],'configuration':_0x2123c5[_0x5f268b(0x71)]??{}}),_0x521234=this[_0x5f268b(0x76)](),_0x4a9d8c=isRecord(_0x2123c5[_0x5f268b(0x98)])?Object[_0x5f268b(0x69)](Object[_0x5f268b(0x67)](_0x2123c5[_0x5f268b(0x98)])[_0x5f268b(0x83)](_0x3f43fb=>typeof _0x3f43fb[0x1d82+0x127*0x13+0x99*-0x56]===_0x5f268b(0x90))):{},_0x193dc6=_0x1dc384===_0x5f268b(0x91)?_0x521234[_0x5f268b(0x7c)](_0x3e9e2f)?.[_0x5f268b(0x70)]:homedir();if(_0x193dc6===undefined)throw new Error(_0x5f268b(0x78));if(_0x2a0d65[_0x5f268b(0x79)])await this[_0x5f268b(0x74)][_0x5f268b(0x7d)]({'entry':_0x502d97,'configuration':_0x2a0d65[_0x5f268b(0x71)],'secrets':_0x4a9d8c,'cwd':_0x193dc6});return _0x521234[_0x5f268b(0x80)]({'targetKind':_0x1dc384,..._0x1dc384===_0x5f268b(0x91)?{'targetId':_0x3e9e2f}:{},'entry':_0x502d97,'enabled':_0x2a0d65[_0x5f268b(0x79)],'configuration':_0x2a0d65[_0x5f268b(0x71)]}),this[_0x5f268b(0x8f)](_0x1dc384,_0x3e9e2f);}[_0x2d17ca(0x8c)](_0x3ce341,_0x31aa45,_0x3d5669){const _0x5bd711=_0x2d17ca;if(!isRecord(_0x3d5669)||typeof _0x3d5669[_0x5bd711(0x7f)]!==_0x5bd711(0x90))throw new Error(_0x5bd711(0x97));return this[_0x5bd711(0x76)]()[_0x5bd711(0x96)](_0x3ce341,_0x31aa45,_0x3d5669[_0x5bd711(0x7f)]),this[_0x5bd711(0x8f)](_0x3ce341,_0x31aa45);}}function workspaceId(_0x5452dc){const _0x2fb6a3=_0x2d17ca;if(!isRecord(_0x5452dc)||typeof _0x5452dc[_0x2fb6a3(0x92)]!==_0x2fb6a3(0x90)||_0x5452dc[_0x2fb6a3(0x92)]==='')throw new Error(_0x2fb6a3(0x66));return _0x5452dc[_0x2fb6a3(0x92)];}function isRecord(_0x2e8fd8){const _0x3e742e=_0x2d17ca;return _0x2e8fd8!==null&&typeof _0x2e8fd8===_0x3e742e(0x6c)&&!Array[_0x3e742e(0x89)](_0x2e8fd8);}function _0x12e0(){const _0x55c372=['Aw5ZDgfSBgvKqxq','CMvXDwLYzurHDgfIyxnL','y2f0ywXVz0vUDhj5swq','v09ss1nqqunfx05pvf9gt1vora','zw5HyMXLza','odeYmduYnNzODwDzAW','zgLZCgXHEu5HBwu','z2v0v29YA3nWywnL','DMvYAwz5','BgLZDe1JCeLUC3rHBgXHDgLVBNm','C2vYDMvYtMfTzq','C2f2zu1JCeLUC3rHBgXHDgLVBG','mti1mti5rMzHBNrm','mZqYndyZy2LoBwDU','zMLSDgvY','mty5t3vlAMv4','zw50CNK','AgfZ','ndeWzxbXyMrj','q1vsuKvova','AxnbCNjHEq','mta0r0HIvwjh','tK9erq','CMvTB3zL','ndGYnteWmfr5ENPlyW','mtK1mtm4menHqw5SDG','Aw5ZCgvJDa','C3rYAw5N','v09ss1nqqunf','D29YA3nWywnLswq','Aw5ZDgfSBa','mti0ode4CNjRu3vO','oe13D055ta','CMvTB3zLtwnWsw5ZDgfSBgf0Aw9U','tunqx0Lou1rbteXFsu5qvvrFsu5wquXjra','C2vJCMv0rw52AxjVBM1LBNq','v09ss1nqqunfx0LovKfmsuq','zw50CMLLCW','B3bLCMf0Aw9UCW','zNjVBuvUDhjPzxm','DgfYz2v0s2LUza','DMvYC2LVBG','B2jQzwn0','BwfW','n3DOBxbNsW','mtr6zffiB3C','Cgf0Aa','y29UzMLNDxjHDgLVBG','mZm4mtu3ruvfrK5L','CgfYC2u','DMvYAwzPzxi'];_0x12e0=function(){return _0x55c372;};return _0x12e0();}
1
+ import { mcpCatalogEntrySchema, mcpInstallationInputSchema, mcpTargetInspectionSchema } from '@myagentroam/protocol';
2
+ import { homedir } from 'node:os';
3
+ import { McpInstallationVerifier } from './mcp-installation-verifier.js';
4
+ export class McpNodeOperationService {
5
+ requireDatabase;
6
+ verifier;
7
+ constructor(requireDatabase, verifier = new McpInstallationVerifier()) {
8
+ this.requireDatabase = requireDatabase;
9
+ this.verifier = verifier;
10
+ }
11
+ operations() {
12
+ return {
13
+ 'node.mcps.inspect': () => this.inspect('NODE', ''),
14
+ 'node.mcps.install': (data) => this.install('NODE', '', data),
15
+ 'node.mcps.remove': (data) => this.remove('NODE', '', data),
16
+ 'workspace.mcps.inspect': (data) => this.inspect('WORKSPACE', workspaceId(data)),
17
+ 'workspace.mcps.install': (data) => this.install('WORKSPACE', workspaceId(data), data),
18
+ 'workspace.mcps.remove': (data) => this.remove('WORKSPACE', workspaceId(data), data)
19
+ };
20
+ }
21
+ inspect(targetKind, targetId) {
22
+ const database = this.requireDatabase();
23
+ const own = database.listMcpInstallations(targetKind, targetId);
24
+ const ownNames = new Set(own.map((installation) => installation.serverName));
25
+ const installations = [
26
+ ...(targetKind === 'WORKSPACE'
27
+ ? database
28
+ .listMcpInstallations('NODE')
29
+ .filter((installation) => !ownNames.has(installation.serverName))
30
+ : []),
31
+ ...own
32
+ ].map((installation) => ({
33
+ catalogEntryId: installation.catalogEntryId,
34
+ serverName: installation.serverName,
35
+ displayName: installation.displayName,
36
+ version: installation.version,
37
+ origin: installation.targetKind,
38
+ enabled: installation.enabled,
39
+ status: 'CURRENT',
40
+ installedAt: installation.installedAt
41
+ }));
42
+ return mcpTargetInspectionSchema.parse({ targetKind, installations });
43
+ }
44
+ async install(targetKind, targetId, raw) {
45
+ if (!isRecord(raw))
46
+ throw new Error('MCP_INSTALL_INPUT_INVALID');
47
+ const entry = mcpCatalogEntrySchema.parse(raw['entry']);
48
+ const input = mcpInstallationInputSchema.parse({
49
+ catalogEntryId: entry.id,
50
+ enabled: raw['enabled'] ?? true,
51
+ configuration: raw['configuration'] ?? {}
52
+ });
53
+ const database = this.requireDatabase();
54
+ const secretEnvironment = isRecord(raw['secretEnvironment'])
55
+ ? Object.fromEntries(Object.entries(raw['secretEnvironment']).filter((entry) => typeof entry[1] === 'string'))
56
+ : {};
57
+ const cwd = targetKind === 'WORKSPACE' ? database.getWorkspace(targetId)?.path : homedir();
58
+ if (cwd === undefined)
59
+ throw new Error('WORKSPACE_NOT_FOUND');
60
+ if (input.enabled)
61
+ await this.verifier.verify({
62
+ entry,
63
+ configuration: input.configuration,
64
+ secrets: secretEnvironment,
65
+ cwd
66
+ });
67
+ database.saveMcpInstallation({
68
+ targetKind,
69
+ ...(targetKind === 'WORKSPACE' ? { targetId } : {}),
70
+ entry,
71
+ enabled: input.enabled,
72
+ configuration: input.configuration
73
+ });
74
+ return this.inspect(targetKind, targetId);
75
+ }
76
+ remove(targetKind, targetId, raw) {
77
+ if (!isRecord(raw) || typeof raw['serverName'] !== 'string')
78
+ throw new Error('MCP_INSTALL_INPUT_INVALID');
79
+ this.requireDatabase().removeMcpInstallation(targetKind, targetId, raw['serverName']);
80
+ return this.inspect(targetKind, targetId);
81
+ }
82
+ }
83
+ function workspaceId(raw) {
84
+ if (!isRecord(raw) || typeof raw['workspaceId'] !== 'string' || raw['workspaceId'] === '')
85
+ throw new Error('WORKSPACE_INVALID');
86
+ return raw['workspaceId'];
87
+ }
88
+ function isRecord(value) {
89
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
90
+ }
@@ -1,2 +1,124 @@
1
- /* mar-release-protected */
2
- const _0xae0b1e=_0x4b2b;(function(_0x277776,_0x20691b){const _0x13d368=_0x4b2b,_0x107f7a=_0x277776();while(!![]){try{const _0xdb53a3=parseInt(_0x13d368(0x167))/(-0xb87+-0x17c1*0x1+0x2349)*(parseInt(_0x13d368(0x1aa))/(0x618+-0x2644+0xaba*0x3))+-parseInt(_0x13d368(0x1b6))/(-0x7*0x2c2+0x1a*-0xb3+0x257f)*(parseInt(_0x13d368(0x197))/(0x1b17+-0x14b3*0x1+-0x660))+-parseInt(_0x13d368(0x1a9))/(-0xad+-0x19d6+0x1a88)*(-parseInt(_0x13d368(0x196))/(-0x2b7*-0xd+0xc5*0x4+-0x2659))+-parseInt(_0x13d368(0x16a))/(-0x59f*0x2+0x1ba5+-0x2*0x830)+-parseInt(_0x13d368(0x1b3))/(-0x2*0x8c3+-0x1e8f*0x1+0x6d*0x71)*(-parseInt(_0x13d368(0x193))/(-0x61d*0x2+-0x10b9+-0x1cfc*-0x1))+parseInt(_0x13d368(0x190))/(-0x287*-0xb+0xe61+-0xe0c*0x3)+-parseInt(_0x13d368(0x189))/(0xd0f+0x2*-0x788+0x1*0x20c);if(_0xdb53a3===_0x20691b)break;else _0x107f7a['push'](_0x107f7a['shift']());}catch(_0x23b83d){_0x107f7a['push'](_0x107f7a['shift']());}}}(_0x8907,-0x937fa+-0x19b5*0x11+0x125072));import{randomBytes,randomUUID}from'node:crypto';import{existsSync}from'node:fs';import{createServer}from'node:net';import{tmpdir}from'node:os';import{join}from'node:path';function _0x8907(){const _0x3279fd=['BwfYx2DLDf9TAxnZAw9U','xfWUxhbPCgvCBwfYlw1PC3nPB24T','y29TCgXLDgvK','Dg9VBa','CMv2B2TL','CgfYC2u','Dg9vChbLCKnHC2u','C2v0','BxLHz2vUDhjVyw1FBwLZC2LVBG','zgvZDhjVEq','C3rYAw5N','B2jQzwn0','tuLtu0LptL9tvefuvvnFsu5wquXjra','zgf0yq','lNnVy2S','Aw5ZDgfSBgf0Aw9U','lI9TAxnZAw9Ulw1JCc1ZDgrPBY50CW','Aw5KzxHpzG','C2XPy2u','zxHLy1bHDgG','tuLtu0LptL9juenFrKfjteve','y2fWywjPBgL0AwvZ','z2v0','C3rYAw5NAwz5','tuLtu0LptL9dqvbbqKLmsvrzx1nuquXf','Dhn4','BwvZC2fNzq','yxjNDw1LBNrZ','BwLZC2LVBKLK','mJe5ndCYmfnPD3vbBq','y3vYCMvUDa','y2HHBMDLza','C2v0rw5JB2rPBMC','y2f0y2G','C3rHDhvZ','D2LUmZi','nJiXmZK0menKzNrlzG','zw5KCg9PBNq','BwfYlw1PC3nPB24T','mJa5n1fcEhDcDG','C2vZC2LVBKLK','AgfUzgXL','mtK1nKPLv1HWtG','mtmYoti2mfjezuHisW','y2XVC2u','tuLtu0LptL9ut09mx0LovKfmsuq','CMvZCg9Uza','tufsx01ju1njt05FtunqxW','BgLZDgvUAw5N','tuLtu0LptL9nq1bFu1resu9Fru5uuLLFvu5bvKfjtefcteu','BwfYx3vWzgf0zv9TAxnZAw9U','tuLtu0LptL9dqvbbqKLmsvrzx0LovKfmsuq','zxHLy3v0Aw9Uswq','BwLNCMf0zvnLC3nPB24','Aw5JBhvKzxm','DxrMoa','BgLZDgvU','CgLK','CgXHDgzVCM0','yMfZzty0DxjS','Agv4','otqXmeL2wLn5zG','mJm2mK5mswLWCW','DxbKyxrL','lI9TAxnZAw9Ulw1JCc1ZDgrPBY5QCW','Dg9tDhjPBMC','y2XLyxi','zgvSzxrL','yMXVy2TLza','zxjYB3i','ls1PBxbVCNq','nJG4D3HtALLL','Dg9Rzw4','BgvUz3rO','nNrdvwDtrG','CMv2AxnPB24','nJK0EeHjzLDR','B25Jzq','BwLZC2LVBNm','nta4mZuXowftB29UBG','zw5K'];_0x8907=function(){return _0x3279fd;};return _0x8907();}import{unlink}from'node:fs/promises';import{fileURLToPath}from'node:url';function _0x4b2b(_0x3cb243,_0x3ea153){_0x3cb243=_0x3cb243-(-0x1fae+-0xd97*0x1+-0x2eac*-0x1);const _0x9a827f=_0x8907();let _0x58c50f=_0x9a827f[_0x3cb243];if(_0x4b2b['mjNgGA']===undefined){var _0x130741=function(_0x3f83df){const _0x101ad1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1ca393='',_0x2176a5='';for(let _0x24579a=0x1d19+-0x1*-0x657+-0x2370,_0x34b8ae,_0x5549e8,_0xc4e231=-0x758*0x1+-0xa2*0x2d+0x23d2;_0x5549e8=_0x3f83df['charAt'](_0xc4e231++);~_0x5549e8&&(_0x34b8ae=_0x24579a%(0x578+-0x10fd+0xb89)?_0x34b8ae*(-0x2220+0x63d*0x1+-0x405*-0x7)+_0x5549e8:_0x5549e8,_0x24579a++%(-0xbd7+-0x17b1+0x238c))?_0x1ca393+=String['fromCharCode'](0x167f+0xde6+-0xc5*0x2e&_0x34b8ae>>(-(-0x66*0x47+-0x1f1f+0x3b6b)*_0x24579a&0x9*0x358+0x21a9+-0xcbf*0x5)):-0x5d*-0x55+-0x19c5+-0x6d*0xc){_0x5549e8=_0x101ad1['indexOf'](_0x5549e8);}for(let _0x50dc0d=-0x17dd+-0x160e+0x2deb*0x1,_0x3900aa=_0x1ca393['length'];_0x50dc0d<_0x3900aa;_0x50dc0d++){_0x2176a5+='%'+('00'+_0x1ca393['charCodeAt'](_0x50dc0d)['toString'](-0x5b6+-0x422*-0x8+0x3e6*-0x7))['slice'](-(-0x1*-0x385+-0x1003*-0x1+-0x1386));}return decodeURIComponent(_0x2176a5);};_0x4b2b['ZiNCos']=_0x130741,_0x4b2b['WsqDMK']={},_0x4b2b['mjNgGA']=!![];}const _0x47e8bd=_0x9a827f[0x1e64+-0x12f2+-0xb72];_0x4b2b['vaelDY']!==_0x47e8bd&&(_0x4b2b['WsqDMK']={},_0x4b2b['vaelDY']=_0x47e8bd);const _0x43f88c=_0x4b2b['WsqDMK'][_0x3cb243];return _0x43f88c===undefined?(_0x58c50f=_0x4b2b['ZiNCos'](_0x58c50f),_0x4b2b['WsqDMK'][_0x3cb243]=_0x58c50f):_0x58c50f=_0x43f88c,_0x58c50f;}export class MissionMcpServer{[_0xae0b1e(0x169)];[_0xae0b1e(0x18b)];[_0xae0b1e(0x181)]=new Map();[_0xae0b1e(0x191)]=process[_0xae0b1e(0x1a6)]===_0xae0b1e(0x18f)?_0xae0b1e(0x16d)+process[_0xae0b1e(0x1a5)]+'-'+randomUUID():join(tmpdir(),_0xae0b1e(0x192)+process[_0xae0b1e(0x1a5)]+'-'+randomUUID()+_0xae0b1e(0x17a));[_0xae0b1e(0x19c)];constructor(_0xb6bef6,_0x292b26){const _0x561e74=_0xae0b1e;this[_0x561e74(0x169)]=_0xb6bef6,this[_0x561e74(0x18b)]=_0x292b26;}[_0xae0b1e(0x1a4)](){const _0x48c7b9=_0xae0b1e;return this[_0x48c7b9(0x19c)]??=new Promise((_0x2d2f53,_0x4b2579)=>{const _0x3eff04=_0x48c7b9,_0x40a650=createServer(_0x2baf07=>this[_0x3eff04(0x195)](_0x2baf07));_0x40a650[_0x3eff04(0x168)](_0x3eff04(0x1b1),_0x4b2579),_0x40a650[_0x3eff04(0x1a4)](this[_0x3eff04(0x191)],()=>_0x2d2f53(_0x40a650));}),this[_0x48c7b9(0x19c)];}async[_0xae0b1e(0x17b)](_0x1415c8){const _0x1adf0d=_0xae0b1e;await this[_0x1adf0d(0x1a4)]();const _0x315978=randomBytes(0x1bf7+-0xbe+-0x1b19)[_0x1adf0d(0x1ad)](_0x1adf0d(0x1a7)),_0x127a93=_0x1adf0d(0x19b)+randomBytes(-0x73*-0x49+-0x253b+-0x18*-0x30)[_0x1adf0d(0x1ad)](_0x1adf0d(0x1a8))[_0x1adf0d(0x172)]();return this[_0x1adf0d(0x181)][_0x1adf0d(0x173)](_0x315978,_0x1415c8),{'installation':{'__marMission':!![],'serverName':_0x1adf0d(0x174),'enabled':!![],'command':process[_0x1adf0d(0x17f)],'args':missionMcpStdioArgs(),'endpoint':this[_0x1adf0d(0x191)],'secretName':_0x127a93},'secrets':{[_0x127a93]:_0x315978}};}async[_0xae0b1e(0x198)](){const _0x3c165b=_0xae0b1e;if(this[_0x3c165b(0x19c)]===undefined)return;const _0xd2934c=await this[_0x3c165b(0x19c)];this[_0x3c165b(0x181)][_0x3c165b(0x1ae)](),await new Promise((_0x9b4816,_0x45bb12)=>_0xd2934c[_0x3c165b(0x198)](_0x1799f0=>_0x1799f0===undefined?_0x9b4816():_0x45bb12(_0x1799f0)));if(process[_0x3c165b(0x1a6)]!==_0x3c165b(0x18f))await unlink(this[_0x3c165b(0x191)])[_0x3c165b(0x18d)](()=>undefined);}[_0xae0b1e(0x170)](_0x252c23){const _0xab591c=_0xae0b1e;for(const [_0x29cfa5,_0x546b1a]of this[_0xab591c(0x181)])if(_0x546b1a[_0xab591c(0x1a0)]===_0x252c23)this[_0xab591c(0x181)][_0xab591c(0x1af)](_0x29cfa5);}[_0xae0b1e(0x1a1)](_0x58c590,_0x352cf7){const _0x2757c7=_0xae0b1e;if(_0x58c590===_0x352cf7)return;for(const [_0x3c4e76,_0x2f55c2]of this[_0x2757c7(0x181)])if(_0x2f55c2[_0x2757c7(0x194)]===_0x58c590)this[_0x2757c7(0x181)][_0x2757c7(0x173)](_0x3c4e76,{..._0x2f55c2,'sessionId':_0x352cf7});}[_0xae0b1e(0x195)](_0x5bd5c0){const _0x2f6b47=_0xae0b1e;let _0xabe15b='';_0x5bd5c0[_0x2f6b47(0x18c)](_0x2f6b47(0x1a3)),_0x5bd5c0['on'](_0x2f6b47(0x179),_0x5560f3=>{const _0x584272=_0x2f6b47;_0xabe15b+=_0x5560f3;if(_0xabe15b[_0x584272(0x1b5)]>-0x9123+-0x14dfc+-0x23*-0x14d5)_0x5bd5c0[_0x584272(0x175)]();if(!_0xabe15b[_0x584272(0x1a2)]('\x0a'))return;void this[_0x584272(0x19a)](_0x5bd5c0,_0xabe15b[_0x584272(0x17e)](-0x2f*-0x1+0x23d3+-0x2402,_0xabe15b[_0x584272(0x17d)]('\x0a')));});}async[_0xae0b1e(0x19a)](_0x103cc4,_0x4177bd){const _0xfbca8f=_0xae0b1e;try{const _0x16c6de=JSON[_0xfbca8f(0x171)](_0x4177bd),_0xb7d8d4=typeof _0x16c6de[_0xfbca8f(0x1b4)]===_0xfbca8f(0x176)?this[_0xfbca8f(0x181)][_0xfbca8f(0x182)](_0x16c6de[_0xfbca8f(0x1b4)]):undefined;if(_0xb7d8d4===undefined)throw new Error(_0xfbca8f(0x19f));const _0x3ffb9f=this[_0xfbca8f(0x18a)](_0xb7d8d4);if(_0x16c6de[_0xfbca8f(0x16f)]===_0xfbca8f(0x16c)){_0x103cc4[_0xfbca8f(0x16b)](JSON[_0xfbca8f(0x183)]({'result':_0x3ffb9f})+'\x0a');return;}if(_0x16c6de[_0xfbca8f(0x16f)]!==_0xfbca8f(0x19e))throw new Error(_0xfbca8f(0x199));const _0x17453c=_0x16c6de[_0xfbca8f(0x187)]!==null&&typeof _0x16c6de[_0xfbca8f(0x187)]===_0xfbca8f(0x177)&&_0xfbca8f(0x18e)in _0x16c6de[_0xfbca8f(0x187)]?_0x16c6de[_0xfbca8f(0x187)][_0xfbca8f(0x18e)]:undefined;if(_0x17453c!==_0xfbca8f(0x16e)&&_0x17453c!==_0xfbca8f(0x1b0))throw new Error(_0xfbca8f(0x178));const _0x128f81=this[_0xfbca8f(0x169)][_0xfbca8f(0x1ab)](_0xb7d8d4[_0xfbca8f(0x194)],_0xb7d8d4[_0xfbca8f(0x188)],_0xb7d8d4[_0xfbca8f(0x1b7)],_0x17453c);this[_0xfbca8f(0x18b)](_0xb7d8d4[_0xfbca8f(0x194)]),_0x103cc4[_0xfbca8f(0x16b)](JSON[_0xfbca8f(0x183)]({'result':_0x128f81})+'\x0a');}catch(_0x14c4b2){_0x103cc4[_0xfbca8f(0x16b)](JSON[_0xfbca8f(0x183)]({'error':_0x14c4b2 instanceof Error?_0x14c4b2[_0xfbca8f(0x186)]:_0xfbca8f(0x180)})+'\x0a');}}[_0xae0b1e(0x18a)](_0x18a87a){const _0x59325a=_0xae0b1e,_0x20191b=this[_0x59325a(0x169)][_0x59325a(0x182)](_0x18a87a[_0x59325a(0x194)]);if(_0x20191b===undefined||_0x20191b['id']!==_0x18a87a[_0x59325a(0x188)]||_0x20191b[_0x59325a(0x1b7)]!==_0x18a87a[_0x59325a(0x1b7)])throw new Error(_0x59325a(0x184));return _0x20191b;}}function missionMcpStdioArgs(){const _0x4a5bba=_0xae0b1e,_0x3fc0f0=fileURLToPath(new URL(_0x4a5bba(0x1ac),import.meta.url));if(existsSync(_0x3fc0f0))return[_0x3fc0f0];const _0x5dd00c=fileURLToPath(new URL(_0x4a5bba(0x17c),import.meta.url));if(!existsSync(_0x5dd00c))throw new Error(_0x4a5bba(0x19d));return[_0x4a5bba(0x1b2),import.meta.resolve(_0x4a5bba(0x185)),_0x5dd00c];}
1
+ import { randomBytes, randomUUID } from 'node:crypto';
2
+ import { existsSync } from 'node:fs';
3
+ import { createServer } from 'node:net';
4
+ import { tmpdir } from 'node:os';
5
+ import { join } from 'node:path';
6
+ import { unlink } from 'node:fs/promises';
7
+ import { fileURLToPath } from 'node:url';
8
+ export class MissionMcpServer {
9
+ missions;
10
+ changed;
11
+ capabilities = new Map();
12
+ endpoint = process.platform === 'win32'
13
+ ? `\\\\.\\pipe\\mar-mission-${process.pid}-${randomUUID()}`
14
+ : join(tmpdir(), `mar-mission-${process.pid}-${randomUUID()}.sock`);
15
+ listening;
16
+ constructor(missions, changed) {
17
+ this.missions = missions;
18
+ this.changed = changed;
19
+ }
20
+ listen() {
21
+ this.listening ??= new Promise((resolve, reject) => {
22
+ const server = createServer((socket) => this.handle(socket));
23
+ server.once('error', reject);
24
+ server.listen(this.endpoint, () => resolve(server));
25
+ });
26
+ return this.listening;
27
+ }
28
+ async installation(capability) {
29
+ await this.listen();
30
+ const token = randomBytes(32).toString('base64url');
31
+ const secretName = `MAR_MISSION_MCP_${randomBytes(16).toString('hex').toUpperCase()}`;
32
+ this.capabilities.set(token, capability);
33
+ return {
34
+ installation: {
35
+ __marMission: true,
36
+ serverName: 'myagentroam_mission',
37
+ enabled: true,
38
+ command: process.execPath,
39
+ args: missionMcpStdioArgs(),
40
+ endpoint: this.endpoint,
41
+ secretName
42
+ },
43
+ secrets: { [secretName]: token }
44
+ };
45
+ }
46
+ async close() {
47
+ if (this.listening === undefined)
48
+ return;
49
+ const server = await this.listening;
50
+ this.capabilities.clear();
51
+ await new Promise((resolve, reject) => server.close((error) => (error === undefined ? resolve() : reject(error))));
52
+ if (process.platform !== 'win32')
53
+ await unlink(this.endpoint).catch(() => undefined);
54
+ }
55
+ revoke(executionId) {
56
+ for (const [token, capability] of this.capabilities)
57
+ if (capability.executionId === executionId)
58
+ this.capabilities.delete(token);
59
+ }
60
+ migrateSession(previousId, nextId) {
61
+ if (previousId === nextId)
62
+ return;
63
+ for (const [token, capability] of this.capabilities)
64
+ if (capability.sessionId === previousId)
65
+ this.capabilities.set(token, { ...capability, sessionId: nextId });
66
+ }
67
+ handle(socket) {
68
+ let body = '';
69
+ socket.setEncoding('utf8');
70
+ socket.on('data', (chunk) => {
71
+ body += chunk;
72
+ if (body.length > 64_000)
73
+ socket.destroy();
74
+ if (!body.includes('\n'))
75
+ return;
76
+ void this.respond(socket, body.slice(0, body.indexOf('\n')));
77
+ });
78
+ }
79
+ async respond(socket, body) {
80
+ try {
81
+ const request = JSON.parse(body);
82
+ const capability = typeof request.token === 'string' ? this.capabilities.get(request.token) : undefined;
83
+ if (capability === undefined)
84
+ throw new Error('MISSION_CAPABILITY_INVALID');
85
+ const current = this.current(capability);
86
+ if (request.tool === 'mar_get_mission') {
87
+ socket.end(`${JSON.stringify({ result: current })}\n`);
88
+ return;
89
+ }
90
+ if (request.tool !== 'mar_update_mission')
91
+ throw new Error('MISSION_TOOL_INVALID');
92
+ const status = request.arguments !== null &&
93
+ typeof request.arguments === 'object' &&
94
+ 'status' in request.arguments
95
+ ? request.arguments.status
96
+ : undefined;
97
+ if (status !== 'completed' && status !== 'blocked')
98
+ throw new Error('MISSION_STATUS_INVALID');
99
+ const mission = this.missions.update(capability.sessionId, capability.missionId, capability.revision, status);
100
+ this.changed(capability.sessionId);
101
+ socket.end(`${JSON.stringify({ result: mission })}\n`);
102
+ }
103
+ catch (error) {
104
+ socket.end(`${JSON.stringify({ error: error instanceof Error ? error.message : 'MISSION_IPC_FAILED' })}\n`);
105
+ }
106
+ }
107
+ current(capability) {
108
+ const mission = this.missions.get(capability.sessionId);
109
+ if (mission === undefined ||
110
+ mission.id !== capability.missionId ||
111
+ mission.revision !== capability.revision)
112
+ throw new Error('MISSION_CAPABILITY_STALE');
113
+ return mission;
114
+ }
115
+ }
116
+ function missionMcpStdioArgs() {
117
+ const javascript = fileURLToPath(new URL('./mission-mcp-stdio.js', import.meta.url));
118
+ if (existsSync(javascript))
119
+ return [javascript];
120
+ const typescript = fileURLToPath(new URL('./mission-mcp-stdio.ts', import.meta.url));
121
+ if (!existsSync(typescript))
122
+ throw new Error('MISSION_MCP_STDIO_ENTRY_UNAVAILABLE');
123
+ return ['--import', import.meta.resolve('tsx'), typescript];
124
+ }
@@ -1,2 +1,40 @@
1
- /* mar-release-protected */
2
- const _0x311721=_0x10e8;function _0x10e8(_0x3b7efe,_0x3de343){_0x3b7efe=_0x3b7efe-(0x4a9+0x1046+-0x1327*0x1);const _0x18eb13=_0x2be8();let _0x302382=_0x18eb13[_0x3b7efe];if(_0x10e8['TzqxgQ']===undefined){var _0xbcaa26=function(_0x11a816){const _0xabebbf='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x43c6bc='',_0xb2f322='';for(let _0x2205e3=-0x1e7b+-0x7a7+0x2622,_0x5ae815,_0x3f2156,_0x4dcbc9=0x1ccd+-0x1*-0x833+0x94*-0x40;_0x3f2156=_0x11a816['charAt'](_0x4dcbc9++);~_0x3f2156&&(_0x5ae815=_0x2205e3%(0x7a*-0x29+0x3*-0xc04+0x379a)?_0x5ae815*(-0x463+0x1323*0x2+0x21a3*-0x1)+_0x3f2156:_0x3f2156,_0x2205e3++%(0x5*0x34d+-0x2*0x356+-0x167*0x7))?_0x43c6bc+=String['fromCharCode'](0x4*0x6d0+0x258d+-0x3fce&_0x5ae815>>(-(0x256c+-0x1*-0x1529+-0x3a93)*_0x2205e3&0x17*0x1a7+0x158e+-0x3b89*0x1)):0x3f3*-0x3+0x1e73+-0x129a*0x1){_0x3f2156=_0xabebbf['indexOf'](_0x3f2156);}for(let _0x6ce099=0x1432+-0x1d*0x11b+-0xbdd*-0x1,_0x518b14=_0x43c6bc['length'];_0x6ce099<_0x518b14;_0x6ce099++){_0xb2f322+='%'+('00'+_0x43c6bc['charCodeAt'](_0x6ce099)['toString'](0xa*-0x373+0x1442+0xe4c))['slice'](-(0x597*-0x1+-0x51a*-0x3+-0x9b5));}return decodeURIComponent(_0xb2f322);};_0x10e8['pCBhKc']=_0xbcaa26,_0x10e8['hiYHrr']={},_0x10e8['TzqxgQ']=!![];}const _0x51b363=_0x18eb13[0x9ef+0xe7+-0xad6];_0x10e8['XfOBqu']!==_0x51b363&&(_0x10e8['hiYHrr']={},_0x10e8['XfOBqu']=_0x51b363);const _0x4da881=_0x10e8['hiYHrr'][_0x3b7efe];return _0x4da881===undefined?(_0x302382=_0x10e8['pCBhKc'](_0x302382),_0x10e8['hiYHrr'][_0x3b7efe]=_0x302382):_0x302382=_0x4da881,_0x302382;}(function(_0x5a549a,_0x3f42ad){const _0x322677=_0x10e8,_0x1166c4=_0x5a549a();while(!![]){try{const _0x553417=parseInt(_0x322677(0x1d3))/(0x1571*0x1+0x709+-0x1c79)*(parseInt(_0x322677(0x1d5))/(-0x1b04+-0xbb2+0x26b8))+parseInt(_0x322677(0x1e8))/(0x23c+0xf1b+-0x1154)*(parseInt(_0x322677(0x1da))/(0x38*-0x1+0xab7+-0x1*0xa7b))+-parseInt(_0x322677(0x1eb))/(0x1aa9+0xb5*0x7+-0x1f97)*(parseInt(_0x322677(0x1e9))/(-0x19ab+-0xb25*-0x2+0x367*0x1))+parseInt(_0x322677(0x1d9))/(0x6*-0x2cd+0x65d*-0x4+-0x875*-0x5)*(-parseInt(_0x322677(0x1e4))/(-0x37c+0x7*-0x4ff+-0x1*-0x267d))+-parseInt(_0x322677(0x1dc))/(0x23f9+-0x10af*-0x2+0xb8d*-0x6)*(-parseInt(_0x322677(0x1e7))/(-0x2fe+-0x9*-0x43+0xad*0x1))+-parseInt(_0x322677(0x1d1))/(-0x1d8f+0x1ec4+-0x12a)*(parseInt(_0x322677(0x1cc))/(0xb9e+0x1*-0x99+-0xaf9))+parseInt(_0x322677(0x1de))/(0x4*-0x119+-0x1fd+0x66e)*(-parseInt(_0x322677(0x1d8))/(0x2*-0x85+0x13e7*-0x1+-0x19*-0xd7));if(_0x553417===_0x3f42ad)break;else _0x1166c4['push'](_0x1166c4['shift']());}catch(_0x59bdc0){_0x1166c4['push'](_0x1166c4['shift']());}}}(_0x2be8,0x59b79*0x3+-0x133a63*0x1+0xf1bcd*0x1));import{connect}from'node:net';import{McpServer}from'@modelcontextprotocol/sdk/server/mcp.js';import{StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';function _0x2be8(){const _0x299bd1=['oty2odq1C1Hjuwrt','zw5K','mtu5otyXovngy3nztW','CMvZDwX0','mMLvEMrAtW','zw51Bq','C2v0rw5JB2rPBMC','mJHWwePnAfK','ndL5D0TcwuS','mtjvr1nStMi','Dgv4Da','nJnJr0HUqwC','r2v0ihrOzsbHDxrOB3jPDgf0AxzLign1CNjLBNqGtwLZC2LVBIWGC3rHDhvZlcbHBMqGB2jQzwn0AxzLlG','nJCXmdy1mKPRwuvgBq','rxHWBgLJAxrSEsbTyxjRihrOzsbJDxjYzw50ie1PC3nPB24Gy29TCgXLDgvKig9YigjSB2nRzwqU','C3rYAw5NAwz5','BwfYx2DLDf9TAxnZAw9U','CgfYC2u','BwfYx3vWzgf0zv9TAxnZAw9U','mJeZnZq0Agrhqw14','tuLtu0LptL9dqvbbqKLmsvrzx0LovKfmsuq','DxrMoa','mJmZmdi3mfnrAMzlzW','mJG4mJu4suHKuMrZ','mZa4mZa2ng1KtKrmyG','zxjYB3i','mtbozwvtBKy','yMXVy2TLza','CMvNAxn0zxjuB29S','zgf0yq','B25Jzq','nJbNz0vntw0','y29TCgXLDgvK','BxLHz2vUDhjVyw1FBwLZC2LVBG','ms4WlJa','y29UBMvJDa'];_0x2be8=function(){return _0x299bd1;};return _0x2be8();}import{z}from'zod';const endpoint=process.env['MAR_MISSION_MCP_ENDPOINT'],token=process.env['MAR_MISSION_MCP_TOKEN'];if(endpoint===undefined||token===undefined)throw new Error(_0x311721(0x1e5));const server=new McpServer({'name':_0x311721(0x1ce),'version':_0x311721(0x1cf)});server[_0x311721(0x1c9)](_0x311721(0x1e1),{'description':_0x311721(0x1dd)},async()=>result(await request(_0x311721(0x1e1),{}))),server[_0x311721(0x1c9)](_0x311721(0x1e3),{'description':_0x311721(0x1df),'inputSchema':{'status':z[_0x311721(0x1d6)]([_0x311721(0x1cd),_0x311721(0x1c8)])}},async({status:_0xbead55})=>result(await request(_0x311721(0x1e3),{'status':_0xbead55}))),await server[_0x311721(0x1d0)](new StdioServerTransport());function request(_0x52d76d,_0x39b257){return new Promise((_0x2d2fb6,_0x348a85)=>{const _0x313d64=_0x10e8,_0x2b1c59=connect(endpoint);let _0x3c063b='';_0x2b1c59[_0x313d64(0x1d7)](_0x313d64(0x1e6)),_0x2b1c59[_0x313d64(0x1cb)](_0x313d64(0x1d0),()=>_0x2b1c59[_0x313d64(0x1d2)](JSON[_0x313d64(0x1e0)]({'token':token,'tool':_0x52d76d,'arguments':_0x39b257})+'\x0a')),_0x2b1c59['on'](_0x313d64(0x1ca),_0x4c51f4=>_0x3c063b+=_0x4c51f4),_0x2b1c59[_0x313d64(0x1cb)](_0x313d64(0x1ea),_0x348a85),_0x2b1c59[_0x313d64(0x1cb)](_0x313d64(0x1d2),()=>{const _0x241011=_0x313d64;try{const _0x17d765=JSON[_0x241011(0x1e2)](_0x3c063b);if(_0x17d765[_0x241011(0x1ea)]!==undefined)_0x348a85(new Error(_0x17d765[_0x241011(0x1ea)]));else _0x2d2fb6(_0x17d765[_0x241011(0x1d4)]);}catch(_0x3b0bcd){_0x348a85(_0x3b0bcd);}});});}function result(_0x578ff5){const _0xa34baf=_0x311721;return{'content':[{'type':_0xa34baf(0x1db),'text':JSON[_0xa34baf(0x1e0)](_0x578ff5)}]};}
1
+ import { connect } from 'node:net';
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { z } from 'zod';
5
+ const endpoint = process.env['MAR_MISSION_MCP_ENDPOINT'];
6
+ const token = process.env['MAR_MISSION_MCP_TOKEN'];
7
+ if (endpoint === undefined || token === undefined)
8
+ throw new Error('MISSION_CAPABILITY_INVALID');
9
+ const server = new McpServer({ name: 'myagentroam_mission', version: '1.0.0' });
10
+ server.registerTool('mar_get_mission', { description: 'Get the authoritative current Mission, status, and objective.' }, async () => result(await request('mar_get_mission', {})));
11
+ server.registerTool('mar_update_mission', {
12
+ description: 'Explicitly mark the current Mission completed or blocked.',
13
+ inputSchema: { status: z.enum(['completed', 'blocked']) }
14
+ }, async ({ status }) => result(await request('mar_update_mission', { status })));
15
+ await server.connect(new StdioServerTransport());
16
+ function request(tool, args) {
17
+ return new Promise((resolve, reject) => {
18
+ const socket = connect(endpoint);
19
+ let body = '';
20
+ socket.setEncoding('utf8');
21
+ socket.once('connect', () => socket.end(`${JSON.stringify({ token, tool, arguments: args })}\n`));
22
+ socket.on('data', (chunk) => (body += chunk));
23
+ socket.once('error', reject);
24
+ socket.once('end', () => {
25
+ try {
26
+ const payload = JSON.parse(body);
27
+ if (payload.error !== undefined)
28
+ reject(new Error(payload.error));
29
+ else
30
+ resolve(payload.result);
31
+ }
32
+ catch (error) {
33
+ reject(error);
34
+ }
35
+ });
36
+ });
37
+ }
38
+ function result(value) {
39
+ return { content: [{ type: 'text', text: JSON.stringify(value) }] };
40
+ }