@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,206 @@
1
- /* mar-release-protected */
2
- function _0x26e0(){const _0x2a908f=['zNjVBq','CMvWBgfJzq','Aw5ZDgfSBa','mJy4nJzHBgPIsNu','u0TjteXFq09ovevovf9jtLzbteLe','u0TjteXFvefsr0vux0XjtuLux0vyq0vfreve','zMLSzxm','C3rHDhvZ','mJy0Egr2wNne','zxHWAxjLC0f0','z2v0v29YA3nWywnL','v09ss1nqqunf','BgvUz3rO','zgvSzxrL','u0TjteWUBwq','DxbKyxrL','CMvWywLYv29YA3nWywnLr2L0rxHJBhvKzq','otbcs2PSBxK','D29YA3nWywnL','BM93','mLjhuK13qW','otiXmZK2nMHjtwrNrG','zgLYzwn0B3jPzxm','D29YA3nWywnLswq','C2v0','AgfZ','yMfZzty0','CMvJB3zLCK5VzgviB21L','C2vYDMvYvxjS','BM9KzuLK','B3bLCMf0Aw9UCW','AxnbCNjHEq','DgfYz2v0','y29UDgvUDejHC2u2na','Aw5ZDgfSBfDVCMTZCgfJzq','Bwv0ywrHDge','C2nOzw1HvMvYC2LVBG','ntiYnZHcChrtA04','u0TjteXFtKfnrv9dt05gteLdva','y29UzMLYBvrYywnRzwq','l2fWAs9ZA2LSBc1HCNrPzMfJDhmV','C2HHmJu2','zg93BMXVywq','rKfjteve','lM1HCI1ZA2LSBc1PBNn0ywXSlMPZB24','CMvTB3zLtM9KzuHVBwu','v09ss1nqqunfx0LovKfmsuq','B2jQzwn0','y29UzMLN','uLvotKLorW','Aw5ZDgfSBePVyKLK','Aw5ZDgfSBe5VzgviB21L','CgvYzM9YBuLUC3rHBgW','z2v0','C2L6zq','v09ss1nqqunfx1nlsuXmx1rsqunlrurFq09orKLstv9srvfvsvjfra','Aw5ZCgvJDfDVCMTZCgfJzq','zgf0ywjHC2u','Aw5ZCgvJDe5VzgviB21L','A2v5CW','tuvtu0fhrv9jtLzbteLe','CMvTB3zL','DMfSDwu','Agv4','BMfTzq','CMvTB3zLv29YA3nWywnL','tK9erq','mtqZndGYmJn4uuXcBKG','BwfW','nJy3ody1shz4txjR','AM9ICW','qMvHCMvYia','AM9I','AM9PBG','tK9erv9vtKfvveHftLrjq0furuq','zgLNzxn0','nZGWmti4DwfKtvP4','D29YA3nWywnLugf0Aa','BMv4Da','y3jLzgvUDgLHBa','DgLTzw91Da','Aw5ZDgfSBgvY','ywn0AxzLvgfYz2v0CW','u0TjteXFsu5tvefmtf9gquLmruq','CgfYC2u','Aw5JBhvKzunSyxvKzunVBxbHDgLIAwXPDhK','C3rYAw5N','ANnVBG','yxj0AwzHy3ruAwnRzxq','CMvJB3zLCLDVCMTZCgfJzq','v09ss1nqqunfx0jvu1K','Cgf0Aa','y29UDgvUDeHHC2G','DgLJA2v0','Dg9tDhjPBMC','zxjYB3jdB2rL','ywrK','nZzAtxryBLe','y2XLyw51CePVyNm','mJC3ntmZnu5Uyu1wra','u1vdq0vfreve'];_0x26e0=function(){return _0x2a908f;};return _0x26e0();}const _0x527373=_0x291c;(function(_0x485372,_0x35b843){const _0x5e1a82=_0x291c,_0x3dad64=_0x485372();while(!![]){try{const _0x4f6bf6=parseInt(_0x5e1a82(0xca))/(0x5d+-0xb9*-0xb+-0x84f)*(-parseInt(_0x5e1a82(0x92))/(-0x3*0x773+-0x1*-0x1efe+-0x8a3))+parseInt(_0x5e1a82(0xa3))/(-0x2d*0x50+0x140+-0x1*-0xcd3)*(parseInt(_0x5e1a82(0xdf))/(0x289*0x8+0x1df4+-0x3238))+parseInt(_0x5e1a82(0xe1))/(0x9*-0x109+0x1073+-0x71d)+-parseInt(_0x5e1a82(0x93))/(0x84*-0x10+-0xf*0xc9+0x140d)+parseInt(_0x5e1a82(0x81))/(0x151c+-0x252d*-0x1+-0x3a42)*(parseInt(_0x5e1a82(0x86))/(0x1d3*-0x9+-0xf73+0x1*0x1fe6))+parseInt(_0x5e1a82(0xc1))/(0x959*0x4+-0x1040+0x151b*-0x1)+-parseInt(_0x5e1a82(0x8f))/(-0x2f9+0x89*-0x29+0x18f4)*(-parseInt(_0x5e1a82(0xc3))/(-0x16aa+-0x33f+0x19f4));if(_0x4f6bf6===_0x35b843)break;else _0x3dad64['push'](_0x3dad64['shift']());}catch(_0x275cde){_0x3dad64['push'](_0x3dad64['shift']());}}}(_0x26e0,-0x2*-0x745df+0x12bd06+-0x148078));import{homedir}from'node:os';import{createHash,randomUUID}from'node:crypto';function _0x291c(_0x124cfa,_0x3fad68){_0x124cfa=_0x124cfa-(-0x1f7d+0x4a2+0x1b59*0x1);const _0x351c2f=_0x26e0();let _0x4f32e4=_0x351c2f[_0x124cfa];if(_0x291c['IAYqbB']===undefined){var _0xc7bc39=function(_0x52cd0c){const _0x286fe4='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x56be64='',_0x3d9c4a='';for(let _0x4dfc5c=-0xaa*-0x23+0x3*0x70b+-0x2c5f,_0x326281,_0x425de5,_0x31bc33=0x1c79*-0x1+0x465+-0x17*-0x10c;_0x425de5=_0x52cd0c['charAt'](_0x31bc33++);~_0x425de5&&(_0x326281=_0x4dfc5c%(-0xe9*-0x25+-0x8d1*-0x2+0x334b*-0x1)?_0x326281*(0x536+0x20*-0xa7+-0x123*-0xe)+_0x425de5:_0x425de5,_0x4dfc5c++%(-0x860+-0x423+0xc87*0x1))?_0x56be64+=String['fromCharCode'](0x23e4+-0x1*0x2413+-0x2*-0x97&_0x326281>>(-(0x7a6*0x2+-0x1*-0x26ed+-0x3637)*_0x4dfc5c&0x23d*-0x7+0x25fd+0x593*-0x4)):-0x7d*-0x1+0x1f5+-0x272){_0x425de5=_0x286fe4['indexOf'](_0x425de5);}for(let _0x1270d8=0x10c5+0xcd6*0x2+0x35*-0xcd,_0x51b2f1=_0x56be64['length'];_0x1270d8<_0x51b2f1;_0x1270d8++){_0x3d9c4a+='%'+('00'+_0x56be64['charCodeAt'](_0x1270d8)['toString'](-0x28*-0x36+0x11d8+0x68e*-0x4))['slice'](-(0xa*0x15b+-0x1127+0x39b));}return decodeURIComponent(_0x3d9c4a);};_0x291c['DNdSag']=_0xc7bc39,_0x291c['xgkLtJ']={},_0x291c['IAYqbB']=!![];}const _0x414e83=_0x351c2f[0x1738+0x1c85+-0x33bd*0x1];_0x291c['fmvIvR']!==_0x414e83&&(_0x291c['xgkLtJ']={},_0x291c['fmvIvR']=_0x414e83);const _0x3fe1ea=_0x291c['xgkLtJ'][_0x124cfa];return _0x3fe1ea===undefined?(_0x4f32e4=_0x291c['DNdSag'](_0x4f32e4),_0x291c['xgkLtJ'][_0x124cfa]=_0x4f32e4):_0x4f32e4=_0x3fe1ea,_0x4f32e4;}import{skillInstallMetadataSchema}from'@myagentroam/protocol';import{SkillDirectoryService}from'./skill-directory-service.js';import{SkillInstallService,workspaceSkillTracked}from'./skill-install-service.js';import{safeErrorCode}from'../util/safe-error.js';export class SkillNodeOperationService{[_0x527373(0xb7)];[_0x527373(0xae)];[_0x527373(0x94)]=new SkillDirectoryService();[_0x527373(0xcf)]=new SkillInstallService();[_0x527373(0xd0)]=new Set();[_0x527373(0xc4)]=new Map();constructor(_0x10e4bb,_0x1777ae){const _0x2c4086=_0x527373;this[_0x2c4086(0xb7)]=_0x10e4bb,this[_0x2c4086(0xae)]=_0x1777ae;}[_0x527373(0x9c)](){const _0x1d7fe5=_0x527373;return{'node.skills.inspect':async _0x44bd26=>{const _0x175e81=_0x291c;return await this[_0x175e81(0xcf)][_0x175e81(0x99)](homedir()),this[_0x175e81(0x94)][_0x175e81(0xb8)](homedir(),{'includeClaudeCompatibility':record(_0x44bd26)[_0x175e81(0xd3)]===!![]});},'node.skills.install':_0x5db278=>this[_0x1d7fe5(0x80)](_0x1d7fe5(0xc0),_0x5db278),'node.skills.remove':_0x156a08=>this[_0x1d7fe5(0xbb)](_0x1d7fe5(0xc0),_0x156a08),'workspace.skills.inspect':async _0x4c82a1=>{const _0x491d44=_0x1d7fe5,_0x39f848=this[_0x491d44(0xcb)](record(_0x4c82a1)[_0x491d44(0x95)]);return await this[_0x491d44(0xcf)][_0x491d44(0xd7)](_0x39f848),this[_0x491d44(0x94)][_0x491d44(0xb6)](_0x39f848);},'workspace.skills.install':_0x16746a=>this[_0x1d7fe5(0x80)](_0x1d7fe5(0x89),_0x16746a),'workspace.skills.remove':_0x401715=>this[_0x1d7fe5(0xbb)](_0x1d7fe5(0x89),_0x401715),'workspace.skills.git-exclude-repair':async _0x77601b=>{const _0x2b33d7=_0x1d7fe5,_0x1b1320=this[_0x2b33d7(0xcb)](record(_0x77601b)[_0x2b33d7(0x95)]);return await this[_0x2b33d7(0xcf)][_0x2b33d7(0xd7)](_0x1b1320),await this[_0x2b33d7(0xcf)][_0x2b33d7(0x8e)](_0x1b1320),{'repaired':!![]};},'skill.install.job.get':_0x536f16=>this[_0x1d7fe5(0xc6)](_0x536f16)};}async[_0x527373(0x80)](_0x29fb1a,_0x5cfd07){const _0x471520=_0x527373,_0x2878df=record(_0x5cfd07),_0x33a50f=text(_0x2878df[_0x471520(0xbe)],_0x471520(0xa4)),_0x3b33e8=text(_0x2878df[_0x471520(0xd6)],_0x471520(0xd1)),_0xc7ed42=skillInstallMetadataSchema[_0x471520(0xd2)](_0x2878df[_0x471520(0xa1)]),_0x381506=_0x29fb1a===_0x471520(0x89)?this[_0x471520(0xcb)](_0x2878df[_0x471520(0x95)]):undefined;if(_0x381506===undefined)await this[_0x471520(0xcf)][_0x471520(0x99)](homedir());else await this[_0x471520(0xcf)][_0x471520(0xd7)](_0x381506);if(_0x381506!==undefined&&_0x2878df[_0x471520(0xa5)]!==!![]&&await workspaceSkillTracked(_0x381506,_0x33a50f))throw new Error(_0x471520(0xb5));const _0x32fc02=_0x29fb1a+':'+(_0x381506??homedir());this[_0x471520(0xe0)]();if(this[_0x471520(0xd0)][_0x471520(0x97)](_0x32fc02))throw new Error(_0x471520(0xd8));if(this[_0x471520(0xd0)][_0x471520(0xb4)]>=0x208a+0x6f3+0x1df*-0x15)throw new Error(_0x471520(0x83));const _0x5844bc=randomUUID();return this[_0x471520(0xd0)][_0x471520(0xde)](_0x32fc02),this[_0x471520(0xc4)][_0x471520(0x96)](_0x5844bc,{'status':_0x471520(0xaf),'expiresAt':Date[_0x471520(0x91)]()+(-0x1*-0x1db7+0x9*-0x3ad+-0x121*-0x3)*(0x1acb*0x1+-0x16307*0x1+0x2329c)}),void((async()=>{const _0x51f677=_0x471520;let _0x5d69f7;try{await this[_0x51f677(0xb2)]({'target':_0x29fb1a,'name':_0x33a50f,'ticket':_0x3b33e8,'metadata':_0xc7ed42,..._0x381506===undefined?{}:{'workspace':_0x381506}}),_0x5d69f7={'status':_0x51f677(0xe2)};}catch(_0x301a2a){_0x5d69f7={'status':_0x51f677(0xa9),'errorCode':safeErrorCode(_0x301a2a,_0x51f677(0xd1))};}this[_0x51f677(0xd0)][_0x51f677(0x8b)](_0x32fc02),this[_0x51f677(0xc4)][_0x51f677(0x96)](_0x5844bc,{..._0x5d69f7,'expiresAt':Date[_0x51f677(0x91)]()+(-0x35*-0x11+0x1095+-0x1415)*(0x18f8*-0x3+-0x10fa3*0x1+0x244eb)});})()),{'accepted':!![],'installJobId':_0x5844bc};}[_0x527373(0xc6)](_0x4b4ae4){const _0x1461d4=_0x527373,_0x233e98=text(record(_0x4b4ae4)[_0x1461d4(0xb0)],_0x1461d4(0xba));this[_0x1461d4(0xe0)]();const _0x32a7fb=this[_0x1461d4(0xc4)][_0x1461d4(0xb3)](_0x233e98);if(_0x32a7fb===undefined)throw new Error(_0x1461d4(0xd1));return{'installJobId':_0x233e98,'status':_0x32a7fb[_0x1461d4(0x85)],..._0x32a7fb[_0x1461d4(0xdd)]===undefined?{}:{'errorCode':_0x32a7fb[_0x1461d4(0xdd)]}};}[_0x527373(0xe0)](){const _0x2fe235=_0x527373,_0x5d20db=Date[_0x2fe235(0x91)]();for(const [_0x134aea,_0x47bab2]of this[_0x2fe235(0xc4)])if(_0x47bab2[_0x2fe235(0x87)]<_0x5d20db)this[_0x2fe235(0xc4)][_0x2fe235(0x8b)](_0x134aea);while(this[_0x2fe235(0xc4)][_0x2fe235(0xb4)]>-0x2*-0xacf+0x28a*-0x1+0xf2c*-0x1)this[_0x2fe235(0xc4)][_0x2fe235(0x8b)](this[_0x2fe235(0xc4)][_0x2fe235(0xb9)]()[_0x2fe235(0xcc)]()[_0x2fe235(0xbc)]);}async[_0x527373(0xb2)](_0x522391){const _0x3bee44=_0x527373,_0x1a9893=await this[_0x3bee44(0xa8)](_0x522391[_0x3bee44(0xdb)],_0x522391[_0x3bee44(0xa1)][_0x3bee44(0xda)]);if(_0x522391[_0x3bee44(0x9e)]===_0x3bee44(0xc0))await this[_0x3bee44(0xcf)][_0x3bee44(0xb1)](homedir(),_0x522391[_0x3bee44(0xbe)],_0x1a9893,_0x522391[_0x3bee44(0xa1)]);else await this[_0x3bee44(0xcf)][_0x3bee44(0xa0)](_0x522391[_0x3bee44(0x90)],_0x522391[_0x3bee44(0xbe)],_0x1a9893,_0x522391[_0x3bee44(0xa1)],{'confirmTracked':!![]});}async[_0x527373(0xbb)](_0x23cc4c,_0x20753b){const _0x229998=_0x527373,_0x471768=record(_0x20753b),_0x352b8f=text(_0x471768[_0x229998(0xbe)],_0x229998(0xa4)),_0x1187c5=_0x23cc4c===_0x229998(0x89)?this[_0x229998(0xcb)](_0x471768[_0x229998(0x95)]):undefined,_0x48999a=_0x23cc4c+':'+(_0x1187c5??homedir());if(this[_0x229998(0xd0)][_0x229998(0x97)](_0x48999a))throw new Error(_0x229998(0xd8));this[_0x229998(0xd0)][_0x229998(0xde)](_0x48999a);try{_0x23cc4c===_0x229998(0xc0)?(await this[_0x229998(0xcf)][_0x229998(0x99)](homedir()),await this[_0x229998(0xcf)][_0x229998(0xab)](homedir(),_0x352b8f)):(await this[_0x229998(0xcf)][_0x229998(0xd7)](_0x1187c5),await this[_0x229998(0xcf)][_0x229998(0xbf)](_0x1187c5,_0x352b8f));}finally{this[_0x229998(0xd0)][_0x229998(0x8b)](_0x48999a);}return{'removed':!![]};}[_0x527373(0xcb)](_0x451756){const _0x5232a0=_0x527373,_0x595040=this[_0x5232a0(0xb7)]()[_0x5232a0(0x88)](text(_0x451756,_0x5232a0(0xac)));if(_0x595040===undefined)throw new Error(_0x5232a0(0xac));return _0x595040[_0x5232a0(0xd9)];}async[_0x527373(0xa8)](_0x1867f3,_0x3b43c3){const _0x4919a8=_0x527373,_0x3be75f=this[_0x4919a8(0xae)]();if(_0x3be75f[_0x4919a8(0x9b)]===undefined||_0x3be75f[_0x4919a8(0xcd)]===undefined)throw new Error(_0x4919a8(0xc8));const _0x71587a=await fetch(_0x3be75f[_0x4919a8(0x9a)][_0x4919a8(0x7f)](/\/$/u,'')+_0x4919a8(0xa6)+encodeURIComponent(_0x1867f3),{'headers':{'x-mar-node-id':_0x3be75f[_0x4919a8(0x9b)],'authorization':_0x4919a8(0xc5)+_0x3be75f[_0x4919a8(0xcd)]},'signal':AbortSignal[_0x4919a8(0xce)](0x13c6f+-0x6790+0x5*0x44d)});if(!_0x71587a['ok'])throw new Error(_0x4919a8(0xd1));const _0x5998b8=await _0x71587a[_0x4919a8(0xd5)]();return validateBundle(_0x5998b8,_0x3b43c3),_0x5998b8;}}function validateBundle(_0x3ab970,_0x2dfb95){const _0x3d857c=_0x527373;if(_0x3ab970===null||typeof _0x3ab970!==_0x3d857c(0xad)||_0x3ab970[_0x3d857c(0xa2)]!==0x8a*0x33+0x1*-0x26e7+-0xb6a*-0x1||!Array[_0x3d857c(0x9d)](_0x3ab970[_0x3d857c(0x84)])||_0x3ab970[_0x3d857c(0x84)][_0x3d857c(0x8a)]<0x1327*-0x2+-0x1163+0x37b2*0x1||_0x3ab970[_0x3d857c(0x84)][_0x3d857c(0x8a)]>0x2b*0x45+-0x32*-0x5f+-0x1a3d)throw new Error(_0x3d857c(0x82));let _0x1cba6f=-0x7*-0x3a1+0x41*0x6d+-0x3514;const _0x54ca07=new Set();for(const _0x37fefc of _0x3ab970[_0x3d857c(0x84)]){if(_0x37fefc===null||typeof _0x37fefc!==_0x3d857c(0xad)||typeof _0x37fefc[_0x3d857c(0xd9)]!==_0x3d857c(0xd4)||typeof _0x37fefc[_0x3d857c(0x9f)]!==_0x3d857c(0xd4)||_0x54ca07[_0x3d857c(0x97)](_0x37fefc[_0x3d857c(0xd9)]))throw new Error(_0x3d857c(0x82));_0x54ca07[_0x3d857c(0xde)](_0x37fefc[_0x3d857c(0xd9)]);const _0x24201f=Buffer[_0x3d857c(0x7e)](_0x37fefc[_0x3d857c(0x9f)],_0x3d857c(0x98));if(_0x24201f[_0x3d857c(0xdc)](_0x3d857c(0x98))!==_0x37fefc[_0x3d857c(0x9f)]||_0x24201f[_0x3d857c(0x8a)]>(-0xf*0xf9+0x1738+-0x44e*0x2)*(-0x1814+-0x102*-0xd+0xefa)*(0xd45+0x5*0x5c1+0x1*-0x260a))throw new Error(_0x3d857c(0x82));_0x1cba6f+=_0x24201f[_0x3d857c(0x8a)];if(_0x1cba6f>(0xf4e+-0x21*-0xd+-0x10e2)*(0x22*-0x55+0x1896+-0x94c)*(0x1ade+-0x1*0x1cba+0x5dc))throw new Error(_0x3d857c(0x82));}if(!_0x54ca07[_0x3d857c(0x97)](_0x3d857c(0x8c))||_0x54ca07[_0x3d857c(0x97)](_0x3d857c(0xaa)))throw new Error(_0x3d857c(0x82));const _0x281297=_0x3ab970[_0x3d857c(0x84)][_0x3d857c(0xc2)](_0x2831b4=>_0x2831b4[_0x3d857c(0xd9)]+'\x00'+_0x2831b4[_0x3d857c(0x9f)])[_0x3d857c(0xc7)]('\x00');if(createHash(_0x3d857c(0xa7))[_0x3d857c(0x8d)](_0x281297)[_0x3d857c(0xc9)](_0x3d857c(0xbd))!==_0x2dfb95)throw new Error(_0x3d857c(0x82));}function record(_0x659439){const _0x5ac870=_0x527373;if(_0x659439===null||typeof _0x659439!==_0x5ac870(0xad)||Array[_0x5ac870(0x9d)](_0x659439))throw new Error(_0x5ac870(0xba));return _0x659439;}function text(_0x24fc51,_0x564182){const _0x310142=_0x527373;if(typeof _0x24fc51!==_0x310142(0xd4)||_0x24fc51[_0x310142(0x8a)]===-0x13*-0x15+-0x7*-0x4b7+-0x1c*0x13c)throw new Error(_0x564182);return _0x24fc51;}
1
+ import { homedir } from 'node:os';
2
+ import { createHash, randomUUID } from 'node:crypto';
3
+ import { skillInstallMetadataSchema } from '@myagentroam/protocol';
4
+ import { SkillDirectoryService } from './skill-directory-service.js';
5
+ import { SkillInstallService, workspaceSkillTracked } from './skill-install-service.js';
6
+ import { safeErrorCode } from '../util/safe-error.js';
7
+ export class SkillNodeOperationService {
8
+ database;
9
+ config;
10
+ directories = new SkillDirectoryService();
11
+ installer = new SkillInstallService();
12
+ activeTargets = new Set();
13
+ jobs = new Map();
14
+ constructor(database, config) {
15
+ this.database = database;
16
+ this.config = config;
17
+ }
18
+ operations() {
19
+ return {
20
+ 'node.skills.inspect': async (data) => {
21
+ await this.installer.recoverNodeHome(homedir());
22
+ return this.directories.inspectNodeHome(homedir(), {
23
+ includeClaudeCompatibility: record(data)['includeClaudeCompatibility'] === true
24
+ });
25
+ },
26
+ 'node.skills.install': (data) => this.install('NODE', data),
27
+ 'node.skills.remove': (data) => this.remove('NODE', data),
28
+ 'workspace.skills.inspect': async (data) => {
29
+ const workspace = this.workspacePath(record(data)['workspaceId']);
30
+ await this.installer.recoverWorkspace(workspace);
31
+ return this.directories.inspectWorkspace(workspace);
32
+ },
33
+ 'workspace.skills.install': (data) => this.install('WORKSPACE', data),
34
+ 'workspace.skills.remove': (data) => this.remove('WORKSPACE', data),
35
+ 'workspace.skills.git-exclude-repair': async (data) => {
36
+ const workspace = this.workspacePath(record(data)['workspaceId']);
37
+ await this.installer.recoverWorkspace(workspace);
38
+ await this.installer.repairWorkspaceGitExclude(workspace);
39
+ return { repaired: true };
40
+ },
41
+ 'skill.install.job.get': (data) => this.job(data)
42
+ };
43
+ }
44
+ async install(target, data) {
45
+ const input = record(data);
46
+ const name = text(input['name'], 'SKILL_NAME_CONFLICT');
47
+ const ticket = text(input['artifactTicket'], 'SKILL_INSTALL_FAILED');
48
+ const metadata = skillInstallMetadataSchema.parse(input['metadata']);
49
+ const workspace = target === 'WORKSPACE' ? this.workspacePath(input['workspaceId']) : undefined;
50
+ if (workspace === undefined)
51
+ await this.installer.recoverNodeHome(homedir());
52
+ else
53
+ await this.installer.recoverWorkspace(workspace);
54
+ if (workspace !== undefined &&
55
+ input['confirmTracked'] !== true &&
56
+ (await workspaceSkillTracked(workspace, name)))
57
+ throw new Error('WORKSPACE_SKILL_TRACKED_CONFIRM_REQUIRED');
58
+ const targetKey = `${target}:${workspace ?? homedir()}`;
59
+ this.cleanupJobs();
60
+ if (this.activeTargets.has(targetKey))
61
+ throw new Error('WORKSPACE_BUSY');
62
+ if (this.activeTargets.size >= 50)
63
+ throw new Error('SKILL_TARGET_LIMIT_EXCEEDED');
64
+ const installJobId = randomUUID();
65
+ this.activeTargets.add(targetKey);
66
+ this.jobs.set(installJobId, { status: 'RUNNING', expiresAt: Date.now() + 5 * 60_000 });
67
+ void (async () => {
68
+ let terminal;
69
+ try {
70
+ await this.performInstall({
71
+ target,
72
+ name,
73
+ ticket,
74
+ metadata,
75
+ ...(workspace === undefined ? {} : { workspace })
76
+ });
77
+ terminal = { status: 'SUCCEEDED' };
78
+ }
79
+ catch (error) {
80
+ terminal = {
81
+ status: 'FAILED',
82
+ errorCode: safeErrorCode(error, 'SKILL_INSTALL_FAILED')
83
+ };
84
+ }
85
+ this.activeTargets.delete(targetKey);
86
+ this.jobs.set(installJobId, { ...terminal, expiresAt: Date.now() + 5 * 60_000 });
87
+ })();
88
+ return { accepted: true, installJobId };
89
+ }
90
+ job(data) {
91
+ const installJobId = text(record(data)['installJobId'], 'MESSAGE_INVALID');
92
+ this.cleanupJobs();
93
+ const job = this.jobs.get(installJobId);
94
+ if (job === undefined)
95
+ throw new Error('SKILL_INSTALL_FAILED');
96
+ return {
97
+ installJobId,
98
+ status: job.status,
99
+ ...(job.errorCode === undefined ? {} : { errorCode: job.errorCode })
100
+ };
101
+ }
102
+ cleanupJobs() {
103
+ const now = Date.now();
104
+ for (const [id, job] of this.jobs)
105
+ if (job.expiresAt < now)
106
+ this.jobs.delete(id);
107
+ while (this.jobs.size > 1_000)
108
+ this.jobs.delete(this.jobs.keys().next().value);
109
+ }
110
+ async performInstall(input) {
111
+ const bundle = await this.download(input.ticket, input.metadata.contentHash);
112
+ if (input.target === 'NODE')
113
+ await this.installer.installNodeHome(homedir(), input.name, bundle, input.metadata);
114
+ else
115
+ await this.installer.installWorkspace(input.workspace, input.name, bundle, input.metadata, {
116
+ confirmTracked: true
117
+ });
118
+ }
119
+ async remove(target, data) {
120
+ const input = record(data);
121
+ const name = text(input['name'], 'SKILL_NAME_CONFLICT');
122
+ const workspace = target === 'WORKSPACE' ? this.workspacePath(input['workspaceId']) : undefined;
123
+ const targetKey = `${target}:${workspace ?? homedir()}`;
124
+ if (this.activeTargets.has(targetKey))
125
+ throw new Error('WORKSPACE_BUSY');
126
+ this.activeTargets.add(targetKey);
127
+ try {
128
+ if (target === 'NODE') {
129
+ await this.installer.recoverNodeHome(homedir());
130
+ await this.installer.removeNodeHome(homedir(), name);
131
+ }
132
+ else {
133
+ await this.installer.recoverWorkspace(workspace);
134
+ await this.installer.removeWorkspace(workspace, name);
135
+ }
136
+ }
137
+ finally {
138
+ this.activeTargets.delete(targetKey);
139
+ }
140
+ return { removed: true };
141
+ }
142
+ workspacePath(value) {
143
+ const workspace = this.database().getWorkspace(text(value, 'WORKSPACE_INVALID'));
144
+ if (workspace === undefined)
145
+ throw new Error('WORKSPACE_INVALID');
146
+ return workspace.path;
147
+ }
148
+ async download(ticket, expectedContentHash) {
149
+ const config = this.config();
150
+ if (config.nodeId === undefined || config.credential === undefined)
151
+ throw new Error('NODE_UNAUTHENTICATED');
152
+ const response = await fetch(`${config.serverUrl.replace(/\/$/u, '')}/api/skill-artifacts/${encodeURIComponent(ticket)}`, {
153
+ headers: {
154
+ 'x-mar-node-id': config.nodeId,
155
+ authorization: `Bearer ${config.credential}`
156
+ },
157
+ signal: AbortSignal.timeout(60_000)
158
+ });
159
+ if (!response.ok)
160
+ throw new Error('SKILL_INSTALL_FAILED');
161
+ const bundle = (await response.json());
162
+ validateBundle(bundle, expectedContentHash);
163
+ return bundle;
164
+ }
165
+ }
166
+ function validateBundle(bundle, expectedContentHash) {
167
+ if (bundle === null ||
168
+ typeof bundle !== 'object' ||
169
+ bundle.schemaVersion !== 1 ||
170
+ !Array.isArray(bundle.files) ||
171
+ bundle.files.length < 1 ||
172
+ bundle.files.length > 1_000)
173
+ throw new Error('SKILL_CONTENT_INVALID');
174
+ let total = 0;
175
+ const paths = new Set();
176
+ for (const file of bundle.files) {
177
+ if (file === null ||
178
+ typeof file !== 'object' ||
179
+ typeof file.path !== 'string' ||
180
+ typeof file.contentBase64 !== 'string' ||
181
+ paths.has(file.path))
182
+ throw new Error('SKILL_CONTENT_INVALID');
183
+ paths.add(file.path);
184
+ const content = Buffer.from(file.contentBase64, 'base64');
185
+ if (content.toString('base64') !== file.contentBase64 || content.length > 5 * 1024 * 1024)
186
+ throw new Error('SKILL_CONTENT_INVALID');
187
+ total += content.length;
188
+ if (total > 25 * 1024 * 1024)
189
+ throw new Error('SKILL_CONTENT_INVALID');
190
+ }
191
+ if (!paths.has('SKILL.md') || paths.has('.mar-skill-install.json'))
192
+ throw new Error('SKILL_CONTENT_INVALID');
193
+ const canonical = bundle.files.map((file) => `${file.path}\0${file.contentBase64}`).join('\0');
194
+ if (createHash('sha256').update(canonical).digest('hex') !== expectedContentHash)
195
+ throw new Error('SKILL_CONTENT_INVALID');
196
+ }
197
+ function record(value) {
198
+ if (value === null || typeof value !== 'object' || Array.isArray(value))
199
+ throw new Error('MESSAGE_INVALID');
200
+ return value;
201
+ }
202
+ function text(value, code) {
203
+ if (typeof value !== 'string' || value.length === 0)
204
+ throw new Error(code);
205
+ return value;
206
+ }
@@ -1,2 +1,3 @@
1
- /* mar-release-protected */
2
- var _0x5ec174=_0x21f5;(function(_0x5bf64a,_0x165fd2){var _0xbd95e=_0x21f5,_0x464077=_0x5bf64a();while(!![]){try{var _0x172cbf=parseInt(_0xbd95e(0x1c3))/(-0xdd6+-0x1e00+0x2bd7)+parseInt(_0xbd95e(0x1cb))/(-0x1*0x237c+-0xdb5+0x3133)*(parseInt(_0xbd95e(0x1c7))/(-0x2a7+-0x1ed2+-0x217c*-0x1))+parseInt(_0xbd95e(0x1c6))/(-0x1f42+-0xf12+0x2*0x172c)*(parseInt(_0xbd95e(0x1c9))/(-0x5*0x6c7+-0xc40+0x2e28))+-parseInt(_0xbd95e(0x1cd))/(0x1b13+0xab2+-0x25bf)*(parseInt(_0xbd95e(0x1c4))/(-0x136c+-0x9aa*0x1+0x1d1d*0x1))+parseInt(_0xbd95e(0x1ca))/(0x1*0x202+-0x22ff+-0x4f*-0x6b)+-parseInt(_0xbd95e(0x1c5))/(0x180c+-0x1*-0x22ab+0x103*-0x3a)*(-parseInt(_0xbd95e(0x1c2))/(-0x703+-0x1fc1+0x26ce))+-parseInt(_0xbd95e(0x1cc))/(0x22c1+-0x6*0x20e+-0x1662);if(_0x172cbf===_0x165fd2)break;else _0x464077['push'](_0x464077['shift']());}catch(_0x4a834f){_0x464077['push'](_0x464077['shift']());}}}(_0x59cf,0x2f*-0x2091+-0xdc010+0x1f87d4));function _0x21f5(_0x1ecd88,_0xb12d0b){_0x1ecd88=_0x1ecd88-(-0x1*-0x1cb7+0x22b8+0x1*-0x3dad);var _0x199f00=_0x59cf();var _0x28c921=_0x199f00[_0x1ecd88];if(_0x21f5['RPrrhB']===undefined){var _0x15ccff=function(_0x3f5c15){var _0x2bd07e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x1856f8='',_0x1331f6='';for(var _0x2c72fe=0x1d*-0x73+0x43*0x86+-0x63*0x39,_0xa127c3,_0x112d3d,_0x2dab16=0x269b+0x1*0x24d7+0x29a*-0x1d;_0x112d3d=_0x3f5c15['charAt'](_0x2dab16++);~_0x112d3d&&(_0xa127c3=_0x2c72fe%(0x3f1+-0x3*0xcd3+0x228c)?_0xa127c3*(-0x593+-0x680+0xc53*0x1)+_0x112d3d:_0x112d3d,_0x2c72fe++%(-0x939*-0x3+0x1d92+-0x3939))?_0x1856f8+=String['fromCharCode'](-0x18cc+0x1d1a+-0x1*0x34f&_0xa127c3>>(-(0x23b3+-0xf6f+-0x1442*0x1)*_0x2c72fe&0x2b*-0xc+-0x15a8+0x17b2)):-0x13a*-0xa+0x1d*0x156+-0x3302*0x1){_0x112d3d=_0x2bd07e['indexOf'](_0x112d3d);}for(var _0x470f32=0x7*-0xbd+0x224*-0x7+-0x1*-0x1427,_0x5d31ee=_0x1856f8['length'];_0x470f32<_0x5d31ee;_0x470f32++){_0x1331f6+='%'+('00'+_0x1856f8['charCodeAt'](_0x470f32)['toString'](-0xf40*-0x2+-0x25c+-0x1c14))['slice'](-(-0xa79*0x1+0x71f*-0x1+0x119a));}return decodeURIComponent(_0x1331f6);};_0x21f5['FtBQhZ']=_0x15ccff,_0x21f5['FnzOXl']={},_0x21f5['RPrrhB']=!![];}var _0x460a93=_0x199f00[-0x23*0x4b+0x1dc*0x11+-0x155b];_0x21f5['iehkgh']!==_0x460a93&&(_0x21f5['FnzOXl']={},_0x21f5['iehkgh']=_0x460a93);var _0x1ef591=_0x21f5['FnzOXl'][_0x1ecd88];return _0x1ef591===undefined?(_0x28c921=_0x21f5['FtBQhZ'](_0x28c921),_0x21f5['FnzOXl'][_0x1ecd88]=_0x28c921):_0x28c921=_0x1ef591,_0x28c921;}function _0x59cf(){var _0x4e82eb=['n1PKD3fwrG','mJDvy29NDhy','ntyWmtuYwhbIELPI','mtyXndu5n2PuExneEG','yxr0ywnOBwvUDhm','mtb5BefpD3G','mtiYmJG4mdHnu0z4vxK','mLnusMzHza','mJCZntG1ntfwug5kuNK','ntiXnda3mKLAqwPrsq','ndG2mJyXmeXNs09ODa','mZiZota3D3zQBePw'];_0x59cf=function(){return _0x4e82eb;};return _0x59cf();}export class TerminalRelayState{[_0x5ec174(0x1c8)]=new Map();}
1
+ export class TerminalRelayState {
2
+ attachments = new Map();
3
+ }
@@ -1,2 +1,90 @@
1
- /* mar-release-protected */
2
- function _0x24ef(_0x306ca0,_0xe7d459){_0x306ca0=_0x306ca0-(-0x2*0x82f+0x12a*-0x10+-0xd*-0x2bd);const _0x3995de=_0x4727();let _0x1b045c=_0x3995de[_0x306ca0];if(_0x24ef['TZedeC']===undefined){var _0x1bd31f=function(_0x5f48be){const _0x3c8b90='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x16491d='',_0x1b48aa='';for(let _0x4fd312=-0x1efc+0x1*-0x2458+-0x1*-0x4354,_0xa8727c,_0x3029b9,_0x5807a5=0x1*-0x1f0d+0x1c9*0xe+0x60f;_0x3029b9=_0x5f48be['charAt'](_0x5807a5++);~_0x3029b9&&(_0xa8727c=_0x4fd312%(0x1f7*-0x1+-0xe6d+0x1068)?_0xa8727c*(-0x1c20+-0xced*0x3+0x4327*0x1)+_0x3029b9:_0x3029b9,_0x4fd312++%(-0xa81+0xe69+-0x3e4*0x1))?_0x16491d+=String['fromCharCode'](-0x9b8+0x2*-0x1369+0x3189&_0xa8727c>>(-(-0x120d+-0x5d*-0x4f+0xe3*-0xc)*_0x4fd312&0x1*0xd6c+0x38*0x6+-0x7*0x21a)):-0x1*0xb99+-0x1*0x1773+-0x8c3*-0x4){_0x3029b9=_0x3c8b90['indexOf'](_0x3029b9);}for(let _0xb6ca5d=-0x1222+0x1901*0x1+-0x6df*0x1,_0x59e02c=_0x16491d['length'];_0xb6ca5d<_0x59e02c;_0xb6ca5d++){_0x1b48aa+='%'+('00'+_0x16491d['charCodeAt'](_0xb6ca5d)['toString'](0x2127+-0x74*0x48+-0x11*0x7))['slice'](-(-0x1722+-0x8a1+0x1fc5));}return decodeURIComponent(_0x1b48aa);};_0x24ef['AKSOfU']=_0x1bd31f,_0x24ef['VEgSDi']={},_0x24ef['TZedeC']=!![];}const _0xd1904c=_0x3995de[-0x1059+-0xff3+0xd*0x27c];_0x24ef['nPRdFk']!==_0xd1904c&&(_0x24ef['VEgSDi']={},_0x24ef['nPRdFk']=_0xd1904c);const _0x8d0332=_0x24ef['VEgSDi'][_0x306ca0];return _0x8d0332===undefined?(_0x1b045c=_0x24ef['AKSOfU'](_0x1b045c),_0x24ef['VEgSDi'][_0x306ca0]=_0x1b045c):_0x1b045c=_0x8d0332,_0x1b045c;}function _0x4727(){const _0x4e761d=['DgvYBwLUywXnyw5Hz2vY','B3bLCMf0Aw9UCW','yxv0Ag9YAxPLqxr0ywnO','DgvYBwLUywXjza','C2vJCMv0rw52AxjVBM1LBNq','BgLZDfrLCM1PBMfSu2vZC2LVBNm','v09ss1nqqunfx05pvf9gt1vora','nZa1mJe4mJvAsg1VuMy','ntu4mZC3ywzAswLU','Cgf0Aa','vevstuLoquXFt1bftL9jtLzbteLe','mZeWntnjqu9bwvu','mte4otHMwfHkzfC','mtu4nty5mtjRDwPWENa','B2jQzwn0','z2v0v29YA3nWywnL','vevstuLoquXFtK9ux0zpvu5e','nta3nwvWvMXuAa','y2XVC2u','B3bLBG','nJi4nJC5mez6t21Uuq','mtq5otm1ndfWDxHer0e','nfrPq2PitW','vevstuLoquXFqvruqunix0LovKfmsuq','C3rYAw5N','zgf0ywjHC2u','D29YA3nWywnLswq','nZjkC3nRtg8','mtbOrM9WAgu','z2v0'];_0x4727=function(){return _0x4e761d;};return _0x4727();}const _0x2b70e0=_0x24ef;(function(_0x2937a1,_0x11c7ae){const _0x24422a=_0x24ef,_0x197b2d=_0x2937a1();while(!![]){try{const _0x5a3bc7=-parseInt(_0x24422a(0xac))/(0x64+-0x210d*-0x1+-0x2170)*(-parseInt(_0x24422a(0x9c))/(0x1a8d+0x853+-0x22de))+parseInt(_0x24422a(0xaf))/(0x21af+-0x1*0x22f7+0x1*0x14b)*(-parseInt(_0x24422a(0xa1))/(-0x3*-0x6fe+-0x1*-0x148b+0x1a9*-0x19))+-parseInt(_0x24422a(0xb8))/(0x935*0x1+-0x568*0x4+0xc70)+-parseInt(_0x24422a(0xb0))/(-0x2*0x70+0x113d+-0x2f*0x59)*(parseInt(_0x24422a(0xb5))/(-0x1*0x12b1+-0x3*-0xc01+-0x114b))+-parseInt(_0x24422a(0xb1))/(0x1537+-0xc9b+0x3d*-0x24)+-parseInt(_0x24422a(0x9b))/(-0x869+0xfd7+-0x765*0x1)*(parseInt(_0x24422a(0xa2))/(0xa34+0x8+-0x20a*0x5))+parseInt(_0x24422a(0xab))/(0x17c7+-0x5*0x235+0x1*-0xcb3);if(_0x5a3bc7===_0x11c7ae)break;else _0x197b2d['push'](_0x197b2d['shift']());}catch(_0x32ac00){_0x197b2d['push'](_0x197b2d['shift']());}}}(_0x4727,-0x1b*-0x2d66+-0x17601+0xbe84e));import{parseSecretEnvironment}from'../util/secret-environment.js';export class TerminalService{[_0x2b70e0(0x9f)];[_0x2b70e0(0xa4)];constructor(_0x270a51,_0x43cc94){const _0x356f2d=_0x2b70e0;this[_0x356f2d(0x9f)]=_0x270a51,this[_0x356f2d(0xa4)]=_0x43cc94;}[_0x2b70e0(0xa5)](){const _0x5f57f6=_0x2b70e0;return{'terminal.open':_0x330cf3=>this[_0x5f57f6(0xb7)](_0x330cf3),'terminal.list':()=>({'terminals':this[_0x5f57f6(0x9f)]()[_0x5f57f6(0xa9)]()}),'terminal.close':_0x466316=>this[_0x5f57f6(0xb6)](_0x466316),'terminal.attach.authorize':_0x2be75c=>this[_0x5f57f6(0xa6)](_0x2be75c)};}[_0x2b70e0(0xb7)](_0x9cab8e){const _0xdab304=_0x2b70e0;if(_0x9cab8e===null||typeof _0x9cab8e!==_0xdab304(0xb2))throw new Error(_0xdab304(0xae));const _0x4e30fb=_0x9cab8e,_0x35a00c=parseSecretEnvironment(_0x4e30fb[_0xdab304(0xa8)]);let _0x3058d1;if(_0x4e30fb[_0xdab304(0xa0)]!==undefined){if(typeof _0x4e30fb[_0xdab304(0xa0)]!==_0xdab304(0x9e))throw new Error(_0xdab304(0xae));const _0x4e172c=this[_0xdab304(0x9f)]()[_0xdab304(0xb3)](_0x4e30fb[_0xdab304(0xa0)]);if(_0x4e172c===undefined)throw new Error(_0xdab304(0xaa));_0x3058d1=_0x4e172c[_0xdab304(0xad)];}return{'terminal':this[_0xdab304(0xa4)][_0xdab304(0xb7)]({..._0x4e30fb,'workspaceId':typeof _0x4e30fb[_0xdab304(0xa0)]===_0xdab304(0x9e)?_0x4e30fb[_0xdab304(0xa0)]:null,'environment':_0x35a00c,..._0x3058d1===undefined?{}:{'cwd':_0x3058d1}})};}async[_0x2b70e0(0xb6)](_0x484264){const _0x38ba0c=_0x2b70e0,_0x2be451=_0x484264;if(typeof _0x2be451[_0x38ba0c(0xa7)]!==_0x38ba0c(0x9e))throw new Error(_0x38ba0c(0xb4));return{'terminal':await this[_0x38ba0c(0xa4)][_0x38ba0c(0xb6)](_0x2be451[_0x38ba0c(0xa7)])};}[_0x2b70e0(0xa6)](_0x2d4a6f){const _0x1935b4=_0x2b70e0;if(_0x2d4a6f===null||typeof _0x2d4a6f!==_0x1935b4(0xb2))throw new Error(_0x1935b4(0x9d));const _0x1e1518=this[_0x1935b4(0xa4)][_0x1935b4(0xa6)](_0x2d4a6f);return{'attachment':_0x1e1518,'terminal':this[_0x1935b4(0xa4)][_0x1935b4(0xa3)](_0x1e1518[_0x1935b4(0xa7)])};}}
1
+ import { parseSecretEnvironment } from '../util/secret-environment.js';
2
+ export class TerminalService {
3
+ database;
4
+ terminalManager;
5
+ retainEnvironment;
6
+ gitOwners = new Map();
7
+ constructor(database, terminalManager, retainEnvironment) {
8
+ this.database = database;
9
+ this.terminalManager = terminalManager;
10
+ this.retainEnvironment = retainEnvironment;
11
+ terminalManager.onSummary((summary) => {
12
+ if (summary.state !== 'RUNNING') {
13
+ this.gitOwners.get(summary.id)?.release();
14
+ this.gitOwners.delete(summary.id);
15
+ }
16
+ });
17
+ }
18
+ operations() {
19
+ return {
20
+ 'terminal.open': (data) => this.open(data),
21
+ 'terminal.list': (data) => ({
22
+ terminals: this.database()
23
+ .listTerminalSessions()
24
+ .filter((terminal) => !this.gitOwners.has(terminal.id) ||
25
+ this.gitOwners.get(terminal.id)?.userId ===
26
+ data?.__requestUserId)
27
+ }),
28
+ 'terminal.close': (data) => this.close(data),
29
+ 'terminal.attach.authorize': (data) => this.authorizeAttach(data)
30
+ };
31
+ }
32
+ open(data) {
33
+ if (data === null || typeof data !== 'object')
34
+ throw new Error('TERMINAL_OPEN_INVALID');
35
+ const input = data;
36
+ const secretEnvironment = parseSecretEnvironment(input.secretEnvironment);
37
+ if (secretEnvironment.MAR_GIT_TOKEN !== undefined &&
38
+ !Number.isSafeInteger(input.__requestUserId))
39
+ throw new Error('USER_AUTHORIZATION_REQUIRED');
40
+ let cwd;
41
+ if (input.workspaceId !== undefined) {
42
+ if (typeof input.workspaceId !== 'string')
43
+ throw new Error('TERMINAL_OPEN_INVALID');
44
+ const workspace = this.database().getWorkspace(input.workspaceId);
45
+ if (workspace === undefined)
46
+ throw new Error('WORKSPACE_NOT_FOUND');
47
+ cwd = workspace.path;
48
+ }
49
+ const release = this.retainEnvironment?.(secretEnvironment);
50
+ try {
51
+ const terminal = this.terminalManager.open({
52
+ ...input,
53
+ workspaceId: typeof input.workspaceId === 'string' ? input.workspaceId : null,
54
+ environment: secretEnvironment,
55
+ ...(cwd === undefined ? {} : { cwd })
56
+ });
57
+ if (secretEnvironment.MAR_GIT_TOKEN !== undefined)
58
+ this.gitOwners.set(terminal.id, {
59
+ userId: Number(input.__requestUserId),
60
+ release: release ?? (() => undefined)
61
+ });
62
+ else
63
+ release?.();
64
+ return { terminal };
65
+ }
66
+ catch (error) {
67
+ release?.();
68
+ throw error;
69
+ }
70
+ }
71
+ async close(data) {
72
+ const input = data;
73
+ if (typeof input.terminalId !== 'string')
74
+ throw new Error('TERMINAL_NOT_FOUND');
75
+ this.assertOwner(input);
76
+ return { terminal: await this.terminalManager.close(input.terminalId) };
77
+ }
78
+ authorizeAttach(data) {
79
+ if (data === null || typeof data !== 'object')
80
+ throw new Error('TERMINAL_ATTACH_INVALID');
81
+ this.assertOwner(data);
82
+ const attachment = this.terminalManager.authorizeAttach(data);
83
+ return { attachment, terminal: this.terminalManager.get(attachment.terminalId) };
84
+ }
85
+ assertOwner(input) {
86
+ const owner = this.gitOwners.get(String(input.terminalId));
87
+ if (owner !== undefined && owner.userId !== input.__requestUserId)
88
+ throw new Error('TERMINAL_GIT_OWNER_REQUIRED');
89
+ }
90
+ }
@@ -1,2 +1,40 @@
1
- /* mar-release-protected */
2
- (function(_0x4b317f,_0x1d62d4){const _0x1763a8=_0x49db,_0x4b2043=_0x4b317f();while(!![]){try{const _0x38046f=parseInt(_0x1763a8(0xd4))/(0x1731+-0x260d+0xedd)*(parseInt(_0x1763a8(0xea))/(0x16a0+0x26cb+0x3d69*-0x1))+parseInt(_0x1763a8(0xdd))/(-0x491*0x3+-0x5*-0x2ab+-0x1*-0x5f)+-parseInt(_0x1763a8(0xe5))/(-0x1b3c+-0x2027*0x1+-0x1*-0x3b67)+parseInt(_0x1763a8(0xdb))/(-0x99*0x19+-0x365*-0xb+0x151*-0x11)+parseInt(_0x1763a8(0xd6))/(0x292+0x42b*-0x2+0x5ca)+-parseInt(_0x1763a8(0xe2))/(0x68e+-0x1ed2+0x3*0x819)+-parseInt(_0x1763a8(0xe8))/(-0x1*-0xb8d+0x1469+-0x1fee);if(_0x38046f===_0x1d62d4)break;else _0x4b2043['push'](_0x4b2043['shift']());}catch(_0x45fae8){_0x4b2043['push'](_0x4b2043['shift']());}}}(_0x4e0d,-0xb9a6b+0xb2bf4+0x182fb*0x8));function _0x49db(_0x1bf8c1,_0x4b4d60){_0x1bf8c1=_0x1bf8c1-(0x61*-0x1e+-0x2*0x1075+-0x27*-0x128);const _0x5f0933=_0x4e0d();let _0x2e22ef=_0x5f0933[_0x1bf8c1];if(_0x49db['twIlnn']===undefined){var _0x150b73=function(_0x1ef77f){const _0x3ff8b2='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x333af3='',_0xb96a13='';for(let _0x4297e9=-0x3*-0x3ab+-0x2*0x102f+0x155d,_0x204637,_0x3eefea,_0x25cf14=0x1c34+0x1cf*0x1+-0x1e03;_0x3eefea=_0x1ef77f['charAt'](_0x25cf14++);~_0x3eefea&&(_0x204637=_0x4297e9%(0x43c*-0x1+-0x3c*-0x9c+0x5e*-0x58)?_0x204637*(-0x2209*0x1+0x99e+0x18ab)+_0x3eefea:_0x3eefea,_0x4297e9++%(-0x16ba+-0x187f+-0xfbf*-0x3))?_0x333af3+=String['fromCharCode'](-0x97a+0x1*0x1315+-0x89c&_0x204637>>(-(-0x1*-0xe11+-0x1be7+0xdd8)*_0x4297e9&-0x1*-0x26c8+-0x20*0x131+0x36*-0x3)):-0x22+0x2b2+0x8*-0x52){_0x3eefea=_0x3ff8b2['indexOf'](_0x3eefea);}for(let _0xe728c0=-0x82*-0xb+-0x1479+0xee3,_0x871bda=_0x333af3['length'];_0xe728c0<_0x871bda;_0xe728c0++){_0xb96a13+='%'+('00'+_0x333af3['charCodeAt'](_0xe728c0)['toString'](0xaaf+0xad2+-0x1571))['slice'](-(0x14d+-0x15*0x135+0x180e));}return decodeURIComponent(_0xb96a13);};_0x49db['jDcVvp']=_0x150b73,_0x49db['eyJLQA']={},_0x49db['twIlnn']=!![];}const _0x5a91f8=_0x5f0933[-0x13d7*-0x1+-0x534+-0xea3];_0x49db['CuAknQ']!==_0x5a91f8&&(_0x49db['eyJLQA']={},_0x49db['CuAknQ']=_0x5a91f8);const _0x5d36d6=_0x49db['eyJLQA'][_0x1bf8c1];return _0x5d36d6===undefined?(_0x2e22ef=_0x49db['jDcVvp'](_0x2e22ef),_0x49db['eyJLQA'][_0x1bf8c1]=_0x2e22ef):_0x2e22ef=_0x5d36d6,_0x2e22ef;}import{MarAgentError}from'@myagentroam/agent';function _0x4e0d(){const _0x3126bd=['zgf0yq','mJuWmZiZmNLsCLjuEG','zxjYB3i','zgv0ywLSCW','mtaZmty1mJbIwhj0tNC','DxbZDhjLyw1szxf1zxn0swq','mtmXntC5ofPhAuPOrq','y29Kzq','DxbZDhjLyw1szxf1zxn0swq6ia','zgv0ywLSCZOG','tufsx0fhru5ux1DfqL9trufsq0HFrKfjteve','mNvxz3rnAG','AM9PBG','ndG2nta0mg1sAgTOsa','v2vIihnLyxjJAcbMywLSzwqU','BgvUz3rO','BwvZC2fNzq','CgfYyw1LDgvYCW','mJaXmJyYnujMCujkra','C3rHDhvZ','ndq0nJu2n3H3ELPHua','ANnVBG','CMvXDwvZDeLKoIa','C2fMzvbHCNnL','CMvXDwvZDeLK','otmYmJa1neHSCM1bAG','C3vJy2vZCW'];_0x4e0d=function(){return _0x3126bd;};return _0x4e0d();}import{httpErrorResponseSchema}from'@myagentroam/protocol';export async function readWebSearchError(_0xa02ba0){const _0x1d8c43=_0x49db;let _0x53764f;try{_0x53764f=await _0xa02ba0[_0x1d8c43(0xde)]();}catch{return new MarAgentError(_0x1d8c43(0xd3),_0x1d8c43(0xd7),{'details':{'status':_0xa02ba0[_0x1d8c43(0xdc)]}});}const _0x572d30=httpErrorResponseSchema[_0x1d8c43(0xe0)](_0x53764f);if(!_0x572d30[_0x1d8c43(0xe3)])return new MarAgentError(_0x1d8c43(0xd3),_0x1d8c43(0xd7),{'details':{'status':_0xa02ba0[_0x1d8c43(0xdc)]}});const _0xbf3697=_0x572d30[_0x1d8c43(0xe4)][_0x1d8c43(0xe6)],_0x2a8538=[_0x1d8c43(0xdf)+_0xbf3697[_0x1d8c43(0xe1)],..._0xbf3697[_0x1d8c43(0xe9)]===undefined?[]:[_0x1d8c43(0xd1)+_0xbf3697[_0x1d8c43(0xe9)]]],_0x5c501e=[..._0xbf3697[_0x1d8c43(0xe7)]===undefined?[]:[_0x1d8c43(0xd2)+_0xbf3697[_0x1d8c43(0xe7)]],..._0x2a8538][_0x1d8c43(0xd5)](';\x20');return new MarAgentError(_0xbf3697[_0x1d8c43(0xd0)],_0x5c501e[_0x1d8c43(0xd8)]===-0x2*-0x1189+-0xb02+0x2*-0xc08?_0xbf3697[_0x1d8c43(0xd9)]:_0xbf3697[_0x1d8c43(0xd9)]+'\x20('+_0x5c501e+')',{'details':{'status':_0xa02ba0[_0x1d8c43(0xdc)],'requestId':_0xbf3697[_0x1d8c43(0xe1)],..._0xbf3697[_0x1d8c43(0xe7)]===undefined?{}:{'serverDetails':_0xbf3697[_0x1d8c43(0xe7)]},..._0xbf3697[_0x1d8c43(0xda)]===undefined?{}:{'serverParameters':_0xbf3697[_0x1d8c43(0xda)]},..._0xbf3697[_0x1d8c43(0xe9)]===undefined?{}:{'upstreamRequestId':_0xbf3697[_0x1d8c43(0xe9)]}}});}
1
+ import { MarAgentError } from '@myagentroam/agent';
2
+ import { httpErrorResponseSchema } from '@myagentroam/protocol';
3
+ export async function readWebSearchError(response) {
4
+ let payload;
5
+ try {
6
+ payload = await response.json();
7
+ }
8
+ catch {
9
+ return new MarAgentError('MAR_AGENT_WEB_SEARCH_FAILED', 'Web search failed.', {
10
+ details: { status: response.status }
11
+ });
12
+ }
13
+ const parsed = httpErrorResponseSchema.safeParse(payload);
14
+ if (!parsed.success)
15
+ return new MarAgentError('MAR_AGENT_WEB_SEARCH_FAILED', 'Web search failed.', {
16
+ details: { status: response.status }
17
+ });
18
+ const failure = parsed.data.error;
19
+ const identifiers = [
20
+ `requestId: ${failure.requestId}`,
21
+ ...(failure.upstreamRequestId === undefined
22
+ ? []
23
+ : [`upstreamRequestId: ${failure.upstreamRequestId}`])
24
+ ];
25
+ const detail = [
26
+ ...(failure.details === undefined ? [] : [`details: ${failure.details}`]),
27
+ ...identifiers
28
+ ].join('; ');
29
+ return new MarAgentError(failure.code, detail.length === 0 ? failure.message : `${failure.message} (${detail})`, {
30
+ details: {
31
+ status: response.status,
32
+ requestId: failure.requestId,
33
+ ...(failure.details === undefined ? {} : { serverDetails: failure.details }),
34
+ ...(failure.parameters === undefined ? {} : { serverParameters: failure.parameters }),
35
+ ...(failure.upstreamRequestId === undefined
36
+ ? {}
37
+ : { upstreamRequestId: failure.upstreamRequestId })
38
+ }
39
+ });
40
+ }
@@ -1,2 +1,21 @@
1
- /* mar-release-protected */
2
- var _0x399117=_0x5502;(function(_0x5c0fcb,_0xb3a867){var _0x35e00d=_0x5502,_0x3eb846=_0x5c0fcb();while(!![]){try{var _0x5936f8=-parseInt(_0x35e00d(0xed))/(0x1032+0x2298+0x32c9*-0x1)+-parseInt(_0x35e00d(0xe7))/(-0x507+-0x23cf+0x28d8)*(-parseInt(_0x35e00d(0xe2))/(-0x1282+0xd27+0x55e))+-parseInt(_0x35e00d(0xe1))/(0x253d+-0x1231*-0x1+0x29*-0x15a)*(parseInt(_0x35e00d(0xe4))/(-0x1*-0x6cd+0x942+-0x100a))+parseInt(_0x35e00d(0xdc))/(-0x1062+0xfb2+-0xd*-0xe)*(parseInt(_0x35e00d(0xeb))/(-0x1eec+0x1d86+0x16d))+-parseInt(_0x35e00d(0xee))/(-0x51e+0x1ff8+0x1*-0x1ad2)*(parseInt(_0x35e00d(0xe3))/(0x1c76+-0xbd1+-0x109c))+-parseInt(_0x35e00d(0xdf))/(0x1*0x26e5+-0x16*0xc2+-0x162f)+-parseInt(_0x35e00d(0xe0))/(0x21b6+0xec6+-0x3071)*(-parseInt(_0x35e00d(0xec))/(0x1*-0x1ba6+-0x7*-0x4dd+-0xd*0x7d));if(_0x5936f8===_0xb3a867)break;else _0x3eb846['push'](_0x3eb846['shift']());}catch(_0x18a622){_0x3eb846['push'](_0x3eb846['shift']());}}}(_0x2bea,-0x25*-0x83cb+-0x2*0x81a9f+-0x524*-0x1fa));import{createEnvelope}from'@myagentroam/protocol';export class WorkbenchEventService{[_0x399117(0xde)];[_0x399117(0xea)];[_0x399117(0xe6)]=0x1447*-0x1+-0x42*0x3e+0x2443;constructor(_0x5ec4c3,_0x435d22){var _0xa866ce=_0x399117;this[_0xa866ce(0xde)]=_0x5ec4c3,this[_0xa866ce(0xea)]=_0x435d22;}[_0x399117(0xe9)](_0x5e37ee,_0x5cd308){var _0x50d082=_0x399117;if(!this[_0x50d082(0xea)](_0x5e37ee,_0x5cd308))return undefined;return{'sequence':++this[_0x50d082(0xe6)],'category':_0x5e37ee,'payload':_0x5cd308};}[_0x399117(0xe5)](_0x4249d7){var _0xeb096f=_0x399117;this[_0xeb096f(0xde)](createEnvelope(_0xeb096f(0xdd),_0x4249d7));}[_0x399117(0xe8)](){var _0x26f6f6=_0x399117;return this[_0x26f6f6(0xe6)];}}function _0x5502(_0x9e29fb,_0x1be4d3){_0x9e29fb=_0x9e29fb-(-0x2638+0x1e9d*0x1+-0x877*-0x1);var _0x1d9304=_0x2bea();var _0x1f7a59=_0x1d9304[_0x9e29fb];if(_0x5502['yljvUZ']===undefined){var _0x5aed78=function(_0x14f4b7){var _0x2f2989='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x10665b='',_0x3ed39c='';for(var _0x130a15=0x21ac+0x21cc+-0x4378,_0x7b882a,_0x3e4e31,_0x24f252=-0x1a3*-0xe+0x254e+-0x3c38;_0x3e4e31=_0x14f4b7['charAt'](_0x24f252++);~_0x3e4e31&&(_0x7b882a=_0x130a15%(0x1*0x101f+-0x20*-0x131+-0x363b*0x1)?_0x7b882a*(0x1b5b+-0x214f+-0x1*-0x634)+_0x3e4e31:_0x3e4e31,_0x130a15++%(0xc85*0x2+-0x2e3*0x6+-0x7b4))?_0x10665b+=String['fromCharCode'](-0x1a*-0xb3+-0x1b1b+-0x14*-0x7f&_0x7b882a>>(-(0x865+-0x1905+0x1*0x10a2)*_0x130a15&-0xb7c+-0xc9c+0x181e)):-0x25*0x31+0x683+0x92){_0x3e4e31=_0x2f2989['indexOf'](_0x3e4e31);}for(var _0x55228d=-0x89*-0x3d+0x9*-0x28d+-0x9b0,_0x3ff32e=_0x10665b['length'];_0x55228d<_0x3ff32e;_0x55228d++){_0x3ed39c+='%'+('00'+_0x10665b['charCodeAt'](_0x55228d)['toString'](0x1*-0x14c2+-0x146*0x5+0x1b30))['slice'](-(-0x2f0+-0x1d20+0x66a*0x5));}return decodeURIComponent(_0x3ed39c);};_0x5502['QuQWdG']=_0x5aed78,_0x5502['liNlLO']={},_0x5502['yljvUZ']=!![];}var _0x238884=_0x1d9304[-0x233+-0x1*-0x1a97+-0x1864];_0x5502['zfaiDR']!==_0x238884&&(_0x5502['liNlLO']={},_0x5502['zfaiDR']=_0x238884);var _0xbe341f=_0x5502['liNlLO'][_0x9e29fb];return _0xbe341f===undefined?(_0x1f7a59=_0x5502['QuQWdG'](_0x1f7a59),_0x5502['liNlLO'][_0x9e29fb]=_0x1f7a59):_0x1f7a59=_0xbe341f,_0x1f7a59;}function _0x2bea(){var _0x8ed8aa=['mMPVyKfdCW','C25HChnOB3rtzxf1zw5Jzq','BMv4Da','ywnJzxb0CW','mJe3EwD6A05t','nJbbvLvNwNu','ntCYnJKXwM5KrM5g','ntGXmtC2Evj0shHO','mJmWotq2DKTdvMLS','D29YA2jLBMnOlMv2zw50','C2vUza','ndaWmZG4mgDSEMLjAW','nJC1mtG1nwviDvvjBG','nJbkB3nLvMS','ndy3mJGZCM53DNzf','mtGWzNbXCLH0','mZC5otG1rMPmsNjT','ChvIBgLZAa','C2vXDwvUy2u'];_0x2bea=function(){return _0x8ed8aa;};return _0x2bea();}
1
+ import { createEnvelope } from '@myagentroam/protocol';
2
+ export class WorkbenchEventService {
3
+ send;
4
+ accepts;
5
+ sequence = 0;
6
+ constructor(send, accepts) {
7
+ this.send = send;
8
+ this.accepts = accepts;
9
+ }
10
+ next(category, payload) {
11
+ if (!this.accepts(category, payload))
12
+ return undefined;
13
+ return { sequence: ++this.sequence, category, payload };
14
+ }
15
+ publish(event) {
16
+ this.send(createEnvelope('workbench.event', event));
17
+ }
18
+ snapshotSequence() {
19
+ return this.sequence;
20
+ }
21
+ }
@@ -1,2 +1,69 @@
1
- /* mar-release-protected */
2
- function _0x1e5b(_0x5e341d,_0x22d853){_0x5e341d=_0x5e341d-(-0x16*0x116+-0x1*-0x90b+-0x1099*-0x1);const _0x233c64=_0x343e();let _0x49859b=_0x233c64[_0x5e341d];if(_0x1e5b['FeIoUW']===undefined){var _0x46d6c7=function(_0x4a1204){const _0x15e042='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3a8c9c='',_0x3b6801='';for(let _0x2fde3a=-0x135f+-0x12c8+0x2627,_0x571248,_0x31f0f4,_0x1d942d=0x35*-0x91+-0xeb5+0x8f2*0x5;_0x31f0f4=_0x4a1204['charAt'](_0x1d942d++);~_0x31f0f4&&(_0x571248=_0x2fde3a%(-0x1*-0x184a+0x2*-0x1e2+-0x1482)?_0x571248*(0x7*0x53a+-0x216b+-0x2eb)+_0x31f0f4:_0x31f0f4,_0x2fde3a++%(0x1de8+-0x1ae7+0xff*-0x3))?_0x3a8c9c+=String['fromCharCode'](-0x1db4*-0x1+0x13ff+0x30b4*-0x1&_0x571248>>(-(-0x187f*-0x1+-0x22be+0x19*0x69)*_0x2fde3a&-0x101*-0x7+0x2*-0x18a+-0x3ed)):-0x143*0x17+0x1b31+-0x6*-0x4e){_0x31f0f4=_0x15e042['indexOf'](_0x31f0f4);}for(let _0x1c42cf=0x369+-0x2*0x784+0x11*0xaf,_0x4240c1=_0x3a8c9c['length'];_0x1c42cf<_0x4240c1;_0x1c42cf++){_0x3b6801+='%'+('00'+_0x3a8c9c['charCodeAt'](_0x1c42cf)['toString'](0x2174+0x25a9+-0x470d))['slice'](-(-0x14cf+-0x14cc+0x299d));}return decodeURIComponent(_0x3b6801);};_0x1e5b['lebhaV']=_0x46d6c7,_0x1e5b['RFhaGH']={},_0x1e5b['FeIoUW']=!![];}const _0x5e9b77=_0x233c64[-0x1723+-0x3*-0x819+-0x128];_0x1e5b['yimAUs']!==_0x5e9b77&&(_0x1e5b['RFhaGH']={},_0x1e5b['yimAUs']=_0x5e9b77);const _0x1454da=_0x1e5b['RFhaGH'][_0x5e341d];return _0x1454da===undefined?(_0x49859b=_0x1e5b['lebhaV'](_0x49859b),_0x1e5b['RFhaGH'][_0x5e341d]=_0x49859b):_0x49859b=_0x1454da,_0x49859b;}const _0xd22527=_0x1e5b;function _0x343e(){const _0x81d83=['D2LUzg93CW','Aw11Ba','CMvHza','y2HHCKnVzgvbDa','yxzHAwXHyMXLuhjVzMLSzxm','odG4nNjVC2zLEG','DgvYBwLUywXZ','BM93','yxjJAgL0zwn0DxjL','CNvUBMvYCW','y29KzxG','odGYmZu1nvrczw5WtW','nJe5mZq2q2DOqxft','ChjVzMLSzxm','nta1z0LLwufR','nZK2uevTv3vc','BgLTAxrZ','B3b0Aw9UCW','nJiWntrSrKDbvMi','mJi1nNfWs1ncsq','mtu4nJyWognWyLvWza','y2XHDwrLq29Kzq','CgXHDgzVCM0','B3bLBKnVzgu','C3rYAw5NAwz5','mJiYodyWDe9nwMXp','BgLUDxG','y2fWywjPBgL0AwvZ'];_0x343e=function(){return _0x81d83;};return _0x343e();}(function(_0xf935e1,_0x11c935){const _0xc24b1b=_0x1e5b,_0x1bc0fb=_0xf935e1();while(!![]){try{const _0x3f0b28=-parseInt(_0xc24b1b(0x1d8))/(-0x4*-0x740+-0x12ef+-0x7*0x170)+-parseInt(_0xc24b1b(0x1d1))/(0x1*0x935+-0x40f*-0x1+-0xd42)+-parseInt(_0xc24b1b(0x1d2))/(-0x2*-0x679+0x2*-0xb08+0x921)*(parseInt(_0xc24b1b(0x1ce))/(0x90b*-0x2+0xc*-0x169+-0x2*-0x1183))+-parseInt(_0xc24b1b(0x1cd))/(-0xf9d+0x277*0x8+-0x416*0x1)*(parseInt(_0xc24b1b(0x1c4))/(-0xcc9*-0x3+0x91*-0x2e+0x1*-0xc47))+-parseInt(_0xc24b1b(0x1cb))/(0x1*-0x1a06+0x1319+0x6f4)+-parseInt(_0xc24b1b(0x1d3))/(0x1*-0x853+-0x113*0x13+0x1cc4)+parseInt(_0xc24b1b(0x1ca))/(-0x19b0+0x266d*0x1+-0xcb4);if(_0x3f0b28===_0x11c935)break;else _0x1bc0fb['push'](_0x1bc0fb['shift']());}catch(_0x14b0da){_0x1bc0fb['push'](_0x1bc0fb['shift']());}}}(_0x343e,0x17147+0x90b5+-0x5*-0x6f3));function revisionFor(_0x40498b){const _0x509bb3=_0x1e5b,_0x2c6cad=JSON[_0x509bb3(0x1d7)]({'platform':_0x40498b[_0x509bb3(0x1d5)],'architecture':_0x40498b[_0x509bb3(0x1c7)],'codex':_0x40498b[_0x509bb3(0x1c9)],'claudeCode':_0x40498b[_0x509bb3(0x1d4)],'openCode':_0x40498b[_0x509bb3(0x1d6)]});let _0x5a572e=-0xdc7b6582+-0x7494988e+0x1d22c9bd5;for(const _0x3e69fb of _0x2c6cad)_0x5a572e=Math[_0x509bb3(0x1c0)](_0x5a572e^_0x3e69fb[_0x509bb3(0x1c2)](0x4cc+0x1065*0x1+-0x5*0x43d),0x1*0x2bf8b+-0x4c5f20+-0x41ed08*-0x5);return _0x5a572e>>>0x1f3f+0xaa8+-0x277*0x11;}export class WorkbenchManifestService{[_0xd22527(0x1d0)];constructor(_0x5884b1){const _0x45e492=_0xd22527;this[_0x45e492(0x1d0)]=_0x5884b1;}async[_0xd22527(0x1c1)](){const _0x4bfc5b=_0xd22527,_0x5da6b1=this[_0x4bfc5b(0x1d0)][_0x4bfc5b(0x1da)]();return{'manifestVersion':0x1,'revision':revisionFor(_0x5da6b1),'observedAt':Date[_0x4bfc5b(0x1c6)](),'platform':_0x5da6b1[_0x4bfc5b(0x1d5)],'architecture':_0x5da6b1[_0x4bfc5b(0x1c7)],'conversation':{'available':!![],'reasonCode':null,'itemVersions':[0xdeb*-0x1+0x85d*-0x3+-0x2703*-0x1],'supportsSessionCursor':!![],'supportsHistoryPaging':!![],'supportsItemFinalSnapshots':!![],'maxPageSize':0x1f4},'runners':await this[_0x4bfc5b(0x1d0)][_0x4bfc5b(0x1c8)][_0x4bfc5b(0x1cc)](),'files':{'available':!![],'reasonCode':null,'supportsList':!![],'supportsReadRange':!![],'supportsSearch':!![],'maxDirectoryPageSize':0xc8,'maxReadBytes':(0xd5*-0x9+0x11ef+-0x5e*0x17)*(0x7*-0x152+0x12fc+-0x69*0xe),'maxSearchResults':0xc8},'git':{'available':!![],'reasonCode':null,'supportsCurrentChanges':!![],'supportsTurnChanges':!![],'supportsHistory':!![],'maxDiffBytes':(0x9e+0x7b1+0x5f*-0x11)*(-0xf*0x159+-0x37*0x3b+0x24e4)},'terminal':{'available':!![],'reasonCode':null,'supportsPty':_0x5da6b1[_0x4bfc5b(0x1d5)]===_0x4bfc5b(0x1d9),'supportsConPty':_0x5da6b1[_0x4bfc5b(0x1d5)]===_0x4bfc5b(0x1db),'supportsReplay':!![],'supportsReadonlyAttach':!![],'supportsTakeover':!![],...this[_0x4bfc5b(0x1d0)][_0x4bfc5b(0x1c5)][_0x4bfc5b(0x1cf)](),'profiles':this[_0x4bfc5b(0x1d0)][_0x4bfc5b(0x1c5)][_0x4bfc5b(0x1c3)]()}};}}
1
+ function revisionFor(capabilities) {
2
+ const source = JSON.stringify({
3
+ platform: capabilities.platform,
4
+ architecture: capabilities.architecture,
5
+ codex: capabilities.codex,
6
+ claudeCode: capabilities.claudeCode,
7
+ openCode: capabilities.openCode
8
+ });
9
+ let hash = 2_166_136_261;
10
+ for (const character of source)
11
+ hash = Math.imul(hash ^ character.charCodeAt(0), 16_777_619);
12
+ return hash >>> 0;
13
+ }
14
+ /** Builds the capability-driven Workbench contract exposed by this Node. */
15
+ export class WorkbenchManifestService {
16
+ options;
17
+ constructor(options) {
18
+ this.options = options;
19
+ }
20
+ async read() {
21
+ const capabilities = this.options.capabilities();
22
+ return {
23
+ manifestVersion: 1,
24
+ revision: revisionFor(capabilities),
25
+ observedAt: Date.now(),
26
+ platform: capabilities.platform,
27
+ architecture: capabilities.architecture,
28
+ conversation: {
29
+ available: true,
30
+ reasonCode: null,
31
+ itemVersions: [1],
32
+ supportsSessionCursor: true,
33
+ supportsHistoryPaging: true,
34
+ supportsItemFinalSnapshots: true,
35
+ maxPageSize: 500
36
+ },
37
+ runners: await this.options.runners.profiles(),
38
+ files: {
39
+ available: true,
40
+ reasonCode: null,
41
+ supportsList: true,
42
+ supportsReadRange: true,
43
+ supportsSearch: true,
44
+ maxDirectoryPageSize: 200,
45
+ maxReadBytes: 512 * 1024,
46
+ maxSearchResults: 200
47
+ },
48
+ git: {
49
+ available: true,
50
+ reasonCode: null,
51
+ supportsCurrentChanges: true,
52
+ supportsTurnChanges: true,
53
+ supportsHistory: true,
54
+ maxDiffBytes: 512 * 1024
55
+ },
56
+ terminal: {
57
+ available: true,
58
+ reasonCode: null,
59
+ supportsPty: capabilities.platform === 'linux' || capabilities.platform === 'macos',
60
+ supportsConPty: capabilities.platform === 'windows',
61
+ supportsReplay: true,
62
+ supportsReadonlyAttach: true,
63
+ supportsTakeover: true,
64
+ ...this.options.terminals.limits(),
65
+ profiles: this.options.terminals.availableProfiles()
66
+ }
67
+ };
68
+ }
69
+ }