@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,88 @@
1
- /* mar-release-protected */
2
- const _0x271f4e=_0x1b0d;(function(_0x1f819d,_0xaf8082){const _0x3cae05=_0x1b0d,_0x5ac161=_0x1f819d();while(!![]){try{const _0x305f96=parseInt(_0x3cae05(0x92))/(-0x143c+-0x1fcb*0x1+0x3408)*(parseInt(_0x3cae05(0xb3))/(0x2162+0x2142+0x2151*-0x2))+parseInt(_0x3cae05(0xa4))/(-0x18e9+-0x1593+0x2e7f)*(-parseInt(_0x3cae05(0xa6))/(0x12e8+-0xa2b*-0x2+-0x273a))+parseInt(_0x3cae05(0x95))/(-0x242+-0x18b*0x9+-0x102a*-0x1)+parseInt(_0x3cae05(0x90))/(0x1b3b+0xca2+0x27d7*-0x1)*(parseInt(_0x3cae05(0x9e))/(-0x1*-0xac7+-0xa5*0x13+0x17f))+-parseInt(_0x3cae05(0x96))/(0x3df+0x7*-0x53+-0x192)*(-parseInt(_0x3cae05(0xac))/(0x1b1f+0x1*-0x1675+-0x4a1))+-parseInt(_0x3cae05(0x9d))/(0x255+0x5e*-0xb+0x1bf)+-parseInt(_0x3cae05(0x9b))/(-0x22*-0x2b+-0x9*-0x13e+-0x10d9);if(_0x305f96===_0xaf8082)break;else _0x5ac161['push'](_0x5ac161['shift']());}catch(_0x1a8e3e){_0x5ac161['push'](_0x5ac161['shift']());}}}(_0xea67,-0x15c1*-0x17+-0x25ea*0x1+0x375e0*0x1));function _0x1b0d(_0x31ebc6,_0x3246ff){_0x31ebc6=_0x31ebc6-(0xcbf+0x239b+-0x17e9*0x2);const _0x5dfd63=_0xea67();let _0x195bc1=_0x5dfd63[_0x31ebc6];if(_0x1b0d['ffwbGN']===undefined){var _0x4d4496=function(_0x438207){const _0x484ff1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5794a6='',_0x16fe6f='';for(let _0x8e22d8=-0x2*-0x481+-0x1578+0x63b*0x2,_0x72150e,_0x59383b,_0x507288=-0x1*-0x1549+-0xdd*-0x1+0x276*-0x9;_0x59383b=_0x438207['charAt'](_0x507288++);~_0x59383b&&(_0x72150e=_0x8e22d8%(0xc*0x2b9+0x1*-0x201a+-0x8e)?_0x72150e*(-0x272*-0x8+0xa41+-0x1d91)+_0x59383b:_0x59383b,_0x8e22d8++%(0x18a4+0x1c34+-0x34d4))?_0x5794a6+=String['fromCharCode'](-0x1161+0x1766+0x283*-0x2&_0x72150e>>(-(0x1a7e+-0x1e4*0xb+-0x5b0)*_0x8e22d8&-0x21ce*0x1+-0x5ea*-0x1+0x1bea)):0x14f6+-0x5*-0x516+0x1*-0x2e64){_0x59383b=_0x484ff1['indexOf'](_0x59383b);}for(let _0x52f9cd=0x11db+0x193d+-0x2b18,_0x586ea4=_0x5794a6['length'];_0x52f9cd<_0x586ea4;_0x52f9cd++){_0x16fe6f+='%'+('00'+_0x5794a6['charCodeAt'](_0x52f9cd)['toString'](0x16db*-0x1+-0x973*-0x3+-0x116*0x5))['slice'](-(-0x1593+-0x1137+0x2*0x1366));}return decodeURIComponent(_0x16fe6f);};_0x1b0d['LPzPLD']=_0x4d4496,_0x1b0d['qrpdkF']={},_0x1b0d['ffwbGN']=!![];}const _0x3abe65=_0x5dfd63[-0x14d8+-0x6ae+0x1*0x1b86];_0x1b0d['dUpkBI']!==_0x3abe65&&(_0x1b0d['qrpdkF']={},_0x1b0d['dUpkBI']=_0x3abe65);const _0x346aff=_0x1b0d['qrpdkF'][_0x31ebc6];return _0x346aff===undefined?(_0x195bc1=_0x1b0d['LPzPLD'](_0x195bc1),_0x1b0d['qrpdkF'][_0x31ebc6]=_0x195bc1):_0x195bc1=_0x346aff,_0x195bc1;}function _0xea67(){const _0x599072=['y2fWywjPBgL0AwvZuhjVDMLKzwq','y29UzMLNugf0Aa','CMvNAxn0zxi','y29UDhjVBa','CMvMCMvZAgLUzW','CMvMCMvZAe1Z','nJq0ofbRAfjquG','CMvMCMvZAfrPBwvY','C2v0q2fWywjPBgL0AwvZ','AgvHCNrIzwf0txm','y29UBMvJDa','y29UzMLN','C3rVChbLza','CMvMCMvZAenHCgfIAwXPDgLLCW','y2fWywjPBgL0AwvZ','mJm0quXryxvU','Bwv0CMLJCW','ntvru3DUBg8','C3rYAw5NAwz5','B25dB25Uzwn0zwq','mtyXnZq4me5rzKT4rG','ndyXodKWnfLOBg9YAG','AgvHCNrIzwf0u2vUDa','C2v0q29UzMLN','AgvHCNrIzwf0','B25szwDPC3rLCMvK','mtCZmdm5ovfhyKTovG','C2vYDMvYvxjS','nty3mJy4meHbqKjAyq','mtaYmJq5A1nAu0rM','B3b0Aw9UCW','ywXSB3DLzfjVB3rZ','C3rHCNq','C3rVCa','C3rHCNrdyxbHyMLSAxr5uMvMCMvZAa','m21IrMHJza','C2vUza','mJmXmJq0merfzejHEq','y29UDMvYC2f0Aw9Usg9ZDgLUzW','zgf0yurPCMvJDg9YEq','DgvYBwLUywW','y29UBMvJDgvK','zgv0zwn0q2fWywjPBgL0AwvZ','ouHdBxzRzW'];_0xea67=function(){return _0x599072;};return _0xea67();}import{saveNodeConfig}from'../config.js';export class NodeConnectionLifecycleService{[_0x271f4e(0x9f)];[_0x271f4e(0x99)];[_0x271f4e(0x88)];[_0x271f4e(0xb1)]=![];constructor(_0x167640){const _0x17d4be=_0x271f4e;this[_0x17d4be(0x9f)]=_0x167640;}[_0x271f4e(0xa1)](){const _0x5852e7=_0x271f4e;this[_0x5852e7(0xa3)]();}[_0x271f4e(0xa3)](){const _0x54c825=_0x271f4e;if(this[_0x54c825(0x88)]!==undefined)clearInterval(this[_0x54c825(0x88)]);if(!this[_0x54c825(0x9f)][_0x54c825(0xad)])void this[_0x54c825(0x8e)]();this[_0x54c825(0x88)]=setInterval(()=>void this[_0x54c825(0x8e)](),this[_0x54c825(0x9f)][_0x54c825(0xb2)]);}[_0x271f4e(0xa2)](){const _0x312eea=_0x271f4e;if(this[_0x312eea(0x99)]!==undefined)clearInterval(this[_0x312eea(0x99)]);if(this[_0x312eea(0x88)]!==undefined)clearInterval(this[_0x312eea(0x88)]);this[_0x312eea(0x99)]=undefined,this[_0x312eea(0x88)]=undefined;}async[_0x271f4e(0xaf)](_0x5ab4b9,_0x5c3b98){const _0x35615b=_0x271f4e,_0x49aa87=this[_0x35615b(0x9f)][_0x35615b(0x8c)]();if(_0x49aa87===undefined)return;const _0x30bd87={'serverUrl':_0x49aa87[_0x35615b(0x9c)],'allowedRoots':_0x49aa87[_0x35615b(0xa0)],..._0x49aa87[_0x35615b(0xa8)]===undefined?{}:{'dataDirectory':_0x49aa87[_0x35615b(0xa8)]},..._0x49aa87[_0x35615b(0xa7)]===undefined?{}:{'conversationHosting':_0x49aa87[_0x35615b(0xa7)]},'nodeId':_0x5ab4b9,'credential':_0x5c3b98};this[_0x35615b(0x9f)][_0x35615b(0x98)](_0x30bd87),await saveNodeConfig(_0x30bd87,this[_0x35615b(0x9f)][_0x35615b(0xae)]),await this[_0x35615b(0x9f)][_0x35615b(0x9a)]?.(),this[_0x35615b(0xaa)]();}[_0x271f4e(0xaa)](){const _0x109486=_0x271f4e;if(this[_0x109486(0x99)]!==undefined)clearInterval(this[_0x109486(0x99)]);this[_0x109486(0x9f)][_0x109486(0xb0)][_0x109486(0xa5)](_0x109486(0x8f),this[_0x109486(0x9f)][_0x109486(0x8f)]()),this[_0x109486(0x9f)][_0x109486(0xa9)][_0x109486(0x8b)](),this[_0x109486(0x9f)][_0x109486(0xb0)][_0x109486(0xa5)](_0x109486(0x99),{}),this[_0x109486(0x9f)][_0x109486(0x94)]?.(),this[_0x109486(0x9f)][_0x109486(0x91)][_0x109486(0x97)](),this[_0x109486(0x99)]=setInterval(()=>{const _0x2330cf=_0x109486;this[_0x2330cf(0x9f)][_0x2330cf(0x91)][_0x2330cf(0x97)](),this[_0x2330cf(0x9f)][_0x2330cf(0xb0)][_0x2330cf(0xa5)](_0x2330cf(0x99),{});},this[_0x109486(0x9f)][_0x109486(0x8a)]);}async[_0x271f4e(0x8e)](){const _0x254883=_0x271f4e;if(this[_0x254883(0x9f)][_0x254883(0x8d)]()||this[_0x254883(0xb1)])return;this[_0x254883(0xb1)]=!![];try{let _0x46bc22;try{_0x46bc22=await this[_0x254883(0x9f)][_0x254883(0xab)]();}catch{_0x46bc22={...this[_0x254883(0x9f)][_0x254883(0x8f)](),'codex':{'available':![]},'claudeCode':{'available':![]},'openCode':{'available':![]}};}if(this[_0x254883(0x9f)][_0x254883(0x8d)]()||JSON[_0x254883(0x93)](_0x46bc22)===JSON[_0x254883(0x93)](this[_0x254883(0x9f)][_0x254883(0x8f)]()))return;this[_0x254883(0x9f)][_0x254883(0x89)](_0x46bc22),this[_0x254883(0x9f)][_0x254883(0xb0)][_0x254883(0xa5)](_0x254883(0x8f),_0x46bc22);}finally{this[_0x254883(0xb1)]=![];}}}
1
+ import { saveNodeConfig } from '../config.js';
2
+ /** Owns registration completion, heartbeat and background capability refresh timers. */
3
+ export class NodeConnectionLifecycleService {
4
+ options;
5
+ heartbeat;
6
+ refreshTimer;
7
+ refreshing = false;
8
+ constructor(options) {
9
+ this.options = options;
10
+ }
11
+ start() {
12
+ this.startCapabilityRefresh();
13
+ }
14
+ startCapabilityRefresh() {
15
+ if (this.refreshTimer !== undefined)
16
+ clearInterval(this.refreshTimer);
17
+ if (!this.options.capabilitiesProvided)
18
+ void this.refreshCapabilities();
19
+ this.refreshTimer = setInterval(() => void this.refreshCapabilities(), this.options.refreshMs);
20
+ }
21
+ stop() {
22
+ if (this.heartbeat !== undefined)
23
+ clearInterval(this.heartbeat);
24
+ if (this.refreshTimer !== undefined)
25
+ clearInterval(this.refreshTimer);
26
+ this.heartbeat = undefined;
27
+ this.refreshTimer = undefined;
28
+ }
29
+ async register(nodeId, credential) {
30
+ const config = this.options.config();
31
+ if (config === undefined)
32
+ return;
33
+ const registered = {
34
+ serverUrl: config.serverUrl,
35
+ allowedRoots: config.allowedRoots,
36
+ ...(config.dataDirectory === undefined ? {} : { dataDirectory: config.dataDirectory }),
37
+ ...(config.conversationHosting === undefined
38
+ ? {}
39
+ : { conversationHosting: config.conversationHosting }),
40
+ nodeId,
41
+ credential
42
+ };
43
+ this.options.setConfig(registered);
44
+ await saveNodeConfig(registered, this.options.configPath);
45
+ await this.options.onRegistered?.();
46
+ this.connected();
47
+ }
48
+ connected() {
49
+ if (this.heartbeat !== undefined)
50
+ clearInterval(this.heartbeat);
51
+ this.options.control.send('capabilities', this.options.capabilities());
52
+ this.options.terminal.connect();
53
+ this.options.control.send('heartbeat', {});
54
+ this.options.onConnected?.();
55
+ this.options.metrics.heartbeatSent();
56
+ this.heartbeat = setInterval(() => {
57
+ this.options.metrics.heartbeatSent();
58
+ this.options.control.send('heartbeat', {});
59
+ }, this.options.heartbeatMs);
60
+ }
61
+ async refreshCapabilities() {
62
+ if (this.options.stopped() || this.refreshing)
63
+ return;
64
+ this.refreshing = true;
65
+ try {
66
+ let next;
67
+ try {
68
+ next = await this.options.detectCapabilities();
69
+ }
70
+ catch {
71
+ next = {
72
+ ...this.options.capabilities(),
73
+ codex: { available: false },
74
+ claudeCode: { available: false },
75
+ openCode: { available: false }
76
+ };
77
+ }
78
+ if (this.options.stopped() ||
79
+ JSON.stringify(next) === JSON.stringify(this.options.capabilities()))
80
+ return;
81
+ this.options.setCapabilities(next);
82
+ this.options.control.send('capabilities', next);
83
+ }
84
+ finally {
85
+ this.refreshing = false;
86
+ }
87
+ }
88
+ }
@@ -1,2 +1,85 @@
1
- /* mar-release-protected */
2
- const _0x1c6995=_0x4dd4;(function(_0x3ea499,_0x261d9e){const _0x19afdf=_0x4dd4,_0x47244a=_0x3ea499();while(!![]){try{const _0x2b1042=parseInt(_0x19afdf(0x1b7))/(-0x155c+0x37b+0x11e2)*(-parseInt(_0x19afdf(0x1d2))/(0x67*-0x17+0xe29+-0x273*0x2))+parseInt(_0x19afdf(0x1b0))/(-0x1*0x1fa+0x2329*0x1+-0x212c)*(parseInt(_0x19afdf(0x1a2))/(-0x1f3*-0x1+-0x23ea+-0x21fb*-0x1))+-parseInt(_0x19afdf(0x1d1))/(-0x1*0x2327+0x1*-0xac9+0x2df5)+parseInt(_0x19afdf(0x1ca))/(-0x1aa0+-0x9d1*-0x3+0x1*-0x2cd)*(-parseInt(_0x19afdf(0x1c3))/(-0xd*0x3b+-0x1fc9+0x22cf))+-parseInt(_0x19afdf(0x19f))/(-0x2662+0x2*0xdaf+0xb0c)+parseInt(_0x19afdf(0x1a9))/(-0x7d9*0x1+0x1d89+0x1*-0x15a7)*(parseInt(_0x19afdf(0x1c2))/(-0x81d+-0x102f*-0x1+-0x808))+parseInt(_0x19afdf(0x1a6))/(-0x2*-0x8ef+0x1988+0x3f1*-0xb);if(_0x2b1042===_0x261d9e)break;else _0x47244a['push'](_0x47244a['shift']());}catch(_0x36854a){_0x47244a['push'](_0x47244a['shift']());}}}(_0x8067,0x124db*-0xe+0x16773a+0x5e588));import _0x37d292 from'ws';function _0x4dd4(_0x2b61a4,_0x23fe52){_0x2b61a4=_0x2b61a4-(0x82c+0x4*-0x39d+0x7e5);const _0x309d46=_0x8067();let _0x187b2b=_0x309d46[_0x2b61a4];if(_0x4dd4['IMTXNn']===undefined){var _0x563bbc=function(_0x41f824){const _0xe84db='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4032d9='',_0x31da09='';for(let _0x3537a5=0xfe*-0x2+0x1ce6+-0x1aea,_0x3b6f0f,_0x18a92e,_0x107b43=-0xece+-0xba6+0x1a74;_0x18a92e=_0x41f824['charAt'](_0x107b43++);~_0x18a92e&&(_0x3b6f0f=_0x3537a5%(-0x14c*0x10+0x9ee+-0x26*-0x49)?_0x3b6f0f*(-0x819+-0x4e6+0xd3f)+_0x18a92e:_0x18a92e,_0x3537a5++%(0x125*0x17+-0x260c+0xbbd))?_0x4032d9+=String['fromCharCode'](-0x520+-0xc81*-0x3+0xa4*-0x31&_0x3b6f0f>>(-(0x3*-0x5b3+-0x2292+0x33ad)*_0x3537a5&0x1399+-0x4a2*-0x8+-0x38a3)):0xffe+-0x167f*-0x1+-0x267d){_0x18a92e=_0xe84db['indexOf'](_0x18a92e);}for(let _0x22673a=0xf*-0xb5+0x3*0x2ff+0x19e,_0xa7edf7=_0x4032d9['length'];_0x22673a<_0xa7edf7;_0x22673a++){_0x31da09+='%'+('00'+_0x4032d9['charCodeAt'](_0x22673a)['toString'](0x673+0x2*0xeb7+-0x23d1))['slice'](-(0x9c1+-0x611*0x2+0xd*0x2f));}return decodeURIComponent(_0x31da09);};_0x4dd4['DgsyRi']=_0x563bbc,_0x4dd4['pKdvYI']={},_0x4dd4['IMTXNn']=!![];}const _0x4c27b4=_0x309d46[-0x1*0x1407+-0x44*0x29+0x1*0x1eeb];_0x4dd4['sHSsTI']!==_0x4c27b4&&(_0x4dd4['pKdvYI']={},_0x4dd4['sHSsTI']=_0x4c27b4);const _0xf894b5=_0x4dd4['pKdvYI'][_0x2b61a4];return _0xf894b5===undefined?(_0x187b2b=_0x4dd4['DgsyRi'](_0x187b2b),_0x4dd4['pKdvYI'][_0x2b61a4]=_0x187b2b):_0x187b2b=_0xf894b5,_0x187b2b;}import{createEnvelope}from'@myagentroam/protocol';import{ControlOutboundScheduler}from'../control-outbound-scheduler.js';import{nodeConnectEndpoint}from'../runner/codex/conversation-parser.js';function _0x8067(){const _0x544002=['tK9erv9dt05orunusu9ox1jfueXbq0ve','yxv0AgvUDgLJyxrL','y29UBMvJDa','C29JA2v0','y29UzMLN','nJiWnJuYmePcreDUAq','ndy3odq2sg1ZuNHp','C2vUzevUDMvSB3bL','CMvWBgfJzvnVy2TLDezVCLrLC3rPBMC','y3jLzgvUDgLHBa','q09otKvdveLorW','mZuXndy4oeHnDwvmBW','C2vYDMvYvxjS','CMvNAxn0CMf0Aw9Uvg9Rzw4','nteYng5wugLkyq','B25nzxnZywDL','B3bLBG','BwvZC2fNzq','ndaWodq1otrvrKv4r3u','t1bftG','B3b0Aw9UCW','mJDhz1vIAgK','DhLWzq','zxjYB3i','C2nOzwr1BgvszwnVBM5Ly3q','B25dBg9Zzq','zw5XDwv1zq','CMvJB25Uzwn0','ntrTwef4Dee','BM9KzuLK','CMvZzxq','tK9erv9duKveru5usufmx01ju1njtKC','y2fWywjPBgL0AwvZ','AgLNAa','tK9erv9dt05uuK9mx0jbq0TquKvtu1vsrv9usu1ft1vu','nuDYCfvQsW','CMvJB25Uzwn0vgLTzxi','y2XVC2u','B25dB25Uzwn0Aw5N','yxr0zw1WDhm','B25szwnVBM5Ly3rty2HLzhvSzwq','y29UBMvJDgvK','CMvJB25Uzwn0rgvSyxK','C3rVCa','CMvNAxn0zxi','BM9YBwfS','mti0mte0mgf5r0jSvW','n2zUq09IzG','D29YA2jLBMnOlMv2zw50','C3rVChbLza','CMvHzhLtDgf0zq','C2vUza','Dg9tDhjPBMC','B3v0yM91BMq','mJi4mdiZnhnMD2roCq','B25Jzq'];_0x8067=function(){return _0x544002;};return _0x8067();}export class NodeControlChannel{[_0x1c6995(0x1a8)];[_0x1c6995(0x1cf)];[_0x1c6995(0x1c9)]=new ControlOutboundScheduler(()=>this[_0x1c6995(0x1cf)],()=>this[_0x1c6995(0x1cf)]?.[_0x1c6995(0x1b9)](-0xbf2+-0x2604+0x35eb,_0x1c6995(0x1b6)));[_0x1c6995(0x1b8)];[_0x1c6995(0x1bb)]=-0x1b3+0x1*-0x1b8b+0x1d3e;constructor(_0x4babed){const _0x54d880=_0x1c6995;this[_0x54d880(0x1a8)]=_0x4babed;}[_0x1c6995(0x1ce)](){const _0x464e84=_0x1c6995,_0x1ad1b7=this[_0x464e84(0x1a8)][_0x464e84(0x1d0)]();if(_0x1ad1b7===undefined||this[_0x464e84(0x1a8)][_0x464e84(0x1c5)]()||this[_0x464e84(0x1cf)]!==undefined&&(this[_0x464e84(0x1cf)][_0x464e84(0x1c6)]===_0x37d292[_0x464e84(0x1a7)]||this[_0x464e84(0x1cf)][_0x464e84(0x1c6)]===_0x37d292[_0x464e84(0x19e)]))return;this[_0x464e84(0x1a8)][_0x464e84(0x1ba)](this[_0x464e84(0x1bb)]);const _0x57ec06=new _0x37d292(nodeConnectEndpoint(_0x1ad1b7[_0x464e84(0x1a0)]));this[_0x464e84(0x1cf)]=_0x57ec06,_0x57ec06[_0x464e84(0x1cb)](_0x464e84(0x1a4),()=>{const _0x57cac6=_0x464e84;this[_0x57cac6(0x1bb)]=-0x2ac+0x2108+-0x1e5c;if(_0x1ad1b7[_0x57cac6(0x1b1)]!==undefined&&_0x1ad1b7[_0x57cac6(0x19d)]!==undefined)this[_0x57cac6(0x1c7)](_0x57cac6(0x1cd),{'nodeId':_0x1ad1b7[_0x57cac6(0x1b1)],'credential':_0x1ad1b7[_0x57cac6(0x19d)]});else{if(_0x1ad1b7[_0x57cac6(0x1a1)]!==undefined)this[_0x57cac6(0x1c7)](_0x57cac6(0x1c0),{'registrationToken':_0x1ad1b7[_0x57cac6(0x1a1)],'capabilities':this[_0x57cac6(0x1a8)][_0x57cac6(0x1b4)]()});else _0x57ec06[_0x57cac6(0x1b9)](-0x245d+-0xc2*0x1+0x283*0x15,_0x57cac6(0x1b3));}}),_0x57ec06['on'](_0x464e84(0x1a5),_0x5a864a=>this[_0x464e84(0x1a8)][_0x464e84(0x1a3)](_0x5a864a[_0x464e84(0x1c8)]())),_0x57ec06[_0x464e84(0x1cb)](_0x464e84(0x1b9),(_0x458669,_0x26c7c0)=>{const _0x20413e=_0x464e84;if(this[_0x20413e(0x1cf)]!==_0x57ec06)return;this[_0x20413e(0x1cf)]=undefined,this[_0x20413e(0x1c9)][_0x20413e(0x1b2)]();const _0x2d0f8c=_0x26c7c0[_0x20413e(0x1c8)]();this[_0x20413e(0x1a8)][_0x20413e(0x1ad)](_0x458669,_0x2d0f8c);if(!(_0x458669===-0x22d7+-0x5a*0x29+-0x40e1*-0x1&&_0x2d0f8c===_0x20413e(0x1cc)))this[_0x20413e(0x1ac)]();}),_0x57ec06[_0x464e84(0x1cb)](_0x464e84(0x1ab),()=>undefined);}[_0x1c6995(0x1bd)](){const _0x291812=_0x1c6995;return this[_0x291812(0x1cf)]?.[_0x291812(0x1c6)]===_0x37d292[_0x291812(0x1a7)];}[_0x1c6995(0x1d4)](_0x479c11){const _0x5a3f10=_0x1c6995;this[_0x5a3f10(0x1cf)]=_0x479c11;}[_0x1c6995(0x1b9)](_0x5cebf6,_0x297977){const _0x10403c=_0x1c6995;this[_0x10403c(0x1cf)]?.[_0x10403c(0x1b9)](_0x5cebf6,_0x297977);}[_0x1c6995(0x1bf)](){const _0x43b233=_0x1c6995;if(this[_0x43b233(0x1b8)]!==undefined)clearTimeout(this[_0x43b233(0x1b8)]);this[_0x43b233(0x1b8)]=undefined,this[_0x43b233(0x1c9)][_0x43b233(0x1b2)](),this[_0x43b233(0x1cf)]?.[_0x43b233(0x1b9)](),this[_0x43b233(0x1cf)]=undefined;}[_0x1c6995(0x1c7)](_0x33438b,_0x12ff99,_0x246458){const _0x5e2608=_0x1c6995;this[_0x5e2608(0x1d3)](createEnvelope(_0x33438b,_0x12ff99,{..._0x246458===undefined?{}:{'replyTo':_0x246458}}));}[_0x1c6995(0x1d3)](_0x4334c8){const _0x54c762=_0x1c6995;if(!this[_0x54c762(0x1bd)]())return;this[_0x54c762(0x1c9)][_0x54c762(0x1ae)](_0x4334c8,_0x4334c8[_0x54c762(0x1aa)]===_0x54c762(0x1c4)?_0x54c762(0x1c1):_0x54c762(0x1b5));}[_0x1c6995(0x1ac)](){const _0x192488=_0x1c6995;if(this[_0x192488(0x1a8)][_0x192488(0x1c5)]()||!this[_0x192488(0x1a8)][_0x192488(0x1af)]||this[_0x192488(0x1b8)]!==undefined)return;this[_0x192488(0x1a8)][_0x192488(0x1bc)](),this[_0x192488(0x1b8)]=setTimeout(()=>{const _0x5111ca=_0x192488;this[_0x5111ca(0x1b8)]=undefined,this[_0x5111ca(0x1ce)]();},this[_0x192488(0x1a8)][_0x192488(0x1be)](this[_0x192488(0x1bb)]++));}}
1
+ import WebSocket from 'ws';
2
+ import { createEnvelope } from '@myagentroam/protocol';
3
+ import { ControlOutboundScheduler } from '../control-outbound-scheduler.js';
4
+ import { nodeConnectEndpoint } from '../runner/codex/conversation-parser.js';
5
+ export class NodeControlChannel {
6
+ options;
7
+ socket;
8
+ outbound = new ControlOutboundScheduler(() => this.socket, () => this.socket?.close(1013, 'NODE_CONTROL_BACKPRESSURE_TIMEOUT'));
9
+ reconnectTimer;
10
+ attempts = 0;
11
+ constructor(options) {
12
+ this.options = options;
13
+ }
14
+ connect() {
15
+ const config = this.options.config();
16
+ if (config === undefined ||
17
+ this.options.stopped() ||
18
+ (this.socket !== undefined &&
19
+ (this.socket.readyState === WebSocket.OPEN ||
20
+ this.socket.readyState === WebSocket.CONNECTING)))
21
+ return;
22
+ this.options.onConnecting(this.attempts);
23
+ const socket = new WebSocket(nodeConnectEndpoint(config.serverUrl));
24
+ this.socket = socket;
25
+ socket.once('open', () => {
26
+ this.attempts = 0;
27
+ if (config.nodeId !== undefined && config.credential !== undefined)
28
+ this.send('authenticate', { nodeId: config.nodeId, credential: config.credential });
29
+ else if (config.registrationToken !== undefined)
30
+ this.send('register', {
31
+ registrationToken: config.registrationToken,
32
+ capabilities: this.options.capabilities()
33
+ });
34
+ else
35
+ socket.close(4000, 'NODE_CREDENTIAL_MISSING');
36
+ });
37
+ socket.on('message', (raw) => this.options.onMessage(raw.toString()));
38
+ socket.once('close', (code, reason) => {
39
+ if (this.socket !== socket)
40
+ return;
41
+ this.socket = undefined;
42
+ this.outbound.reset();
43
+ const reasonText = reason.toString();
44
+ this.options.onClose(code, reasonText);
45
+ if (!(code === 4000 && reasonText === 'NODE_CONNECTION_REPLACED'))
46
+ this.scheduleReconnect();
47
+ });
48
+ socket.once('error', () => undefined);
49
+ }
50
+ connected() {
51
+ return this.socket?.readyState === WebSocket.OPEN;
52
+ }
53
+ /** Keeps transport injection at the transport boundary for contract tests. */
54
+ replaceSocketForTesting(socket) {
55
+ this.socket = socket;
56
+ }
57
+ close(code, reason) {
58
+ this.socket?.close(code, reason);
59
+ }
60
+ stop() {
61
+ if (this.reconnectTimer !== undefined)
62
+ clearTimeout(this.reconnectTimer);
63
+ this.reconnectTimer = undefined;
64
+ this.outbound.reset();
65
+ this.socket?.close();
66
+ this.socket = undefined;
67
+ }
68
+ send(type, payload, replyTo) {
69
+ this.sendEnvelope(createEnvelope(type, payload, { ...(replyTo === undefined ? {} : { replyTo }) }));
70
+ }
71
+ sendEnvelope(envelope) {
72
+ if (!this.connected())
73
+ return;
74
+ this.outbound.enqueue(envelope, envelope.type === 'workbench.event' ? 'normal' : 'high');
75
+ }
76
+ scheduleReconnect() {
77
+ if (this.options.stopped() || !this.options.reconnect || this.reconnectTimer !== undefined)
78
+ return;
79
+ this.options.onReconnectScheduled();
80
+ this.reconnectTimer = setTimeout(() => {
81
+ this.reconnectTimer = undefined;
82
+ this.connect();
83
+ }, this.options.reconnectDelay(this.attempts++));
84
+ }
85
+ }
@@ -1,2 +1,109 @@
1
- /* mar-release-protected */
2
- const _0x2b3cbd=_0x3c79;function _0x3c79(_0x1e896f,_0x4e87d5){_0x1e896f=_0x1e896f-(0x5*0x53+-0xb03*-0x2+-0x1720);const _0x3636eb=_0x5554();let _0x662a84=_0x3636eb[_0x1e896f];if(_0x3c79['zgQDvA']===undefined){var _0x263440=function(_0x8de636){const _0x53a5bf='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x52cdbe='',_0x43dc86='';for(let _0x9a76fd=-0x3*-0x4c9+-0x1893+0xa38,_0x20c92f,_0x1abc82,_0x13cee8=-0x1*0x116f+0x1087*-0x1+0x21f6;_0x1abc82=_0x8de636['charAt'](_0x13cee8++);~_0x1abc82&&(_0x20c92f=_0x9a76fd%(0xd0f+-0xcb4+-0x57)?_0x20c92f*(-0xd87+-0x1e6f*-0x1+-0x1a*0xa4)+_0x1abc82:_0x1abc82,_0x9a76fd++%(0x37*0x9b+0x1*-0x184e+-0x1*0x8fb))?_0x52cdbe+=String['fromCharCode'](0x1*-0xc43+-0x17*0xd6+0x207c&_0x20c92f>>(-(-0x148b+0x2*0xae3+-0x139*0x1)*_0x9a76fd&0x868+-0x331*0xa+-0xfb*-0x18)):-0x1ae9+-0xcb2+0x279b){_0x1abc82=_0x53a5bf['indexOf'](_0x1abc82);}for(let _0x192af1=0x3d*0x57+-0x795+-0xd26,_0x1501d8=_0x52cdbe['length'];_0x192af1<_0x1501d8;_0x192af1++){_0x43dc86+='%'+('00'+_0x52cdbe['charCodeAt'](_0x192af1)['toString'](0x5f2+0x1*-0xfd1+0x9ef))['slice'](-(-0x21f6+-0x1f40+-0x8*-0x827));}return decodeURIComponent(_0x43dc86);};_0x3c79['INrNtP']=_0x263440,_0x3c79['MgSWMo']={},_0x3c79['zgQDvA']=!![];}const _0x36a37b=_0x3636eb[0x1735+-0x2*-0xdc6+-0x32c1];_0x3c79['RbEmUG']!==_0x36a37b&&(_0x3c79['MgSWMo']={},_0x3c79['RbEmUG']=_0x36a37b);const _0x4cba91=_0x3c79['MgSWMo'][_0x1e896f];return _0x4cba91===undefined?(_0x662a84=_0x3c79['INrNtP'](_0x662a84),_0x3c79['MgSWMo'][_0x1e896f]=_0x662a84):_0x662a84=_0x4cba91,_0x662a84;}(function(_0x2909fd,_0x215e4a){const _0x45e029=_0x3c79,_0x2128b2=_0x2909fd();while(!![]){try{const _0x1a05b4=parseInt(_0x45e029(0x89))/(0x2*-0x2d+0xae4+-0xa89)+parseInt(_0x45e029(0xb3))/(-0x3*-0x715+-0xa69+0x84*-0x15)*(parseInt(_0x45e029(0xbf))/(-0xe42+0xeee+-0xa9))+-parseInt(_0x45e029(0xbc))/(-0x251b*-0x1+0xaf2*0x3+-0x9*0x7c5)*(-parseInt(_0x45e029(0xc1))/(0xba*0x15+-0xaf7+0x1*-0x446))+parseInt(_0x45e029(0xab))/(0x16*-0x1aa+-0x1ad4+0x2*0x1fbb)+-parseInt(_0x45e029(0x93))/(0x2434+0x2395+-0x686*0xb)+-parseInt(_0x45e029(0x86))/(-0x1*0x2069+-0xa67*0x1+0x2ad8)*(parseInt(_0x45e029(0xc0))/(-0x13c4+0x17e3+0x1*-0x416))+parseInt(_0x45e029(0xb8))/(0x1*0x18f8+-0x1*-0x2533+-0x5*0xc6d)*(-parseInt(_0x45e029(0xaf))/(-0x222f+-0x230a+-0x11e*-0x3e));if(_0x1a05b4===_0x215e4a)break;else _0x2128b2['push'](_0x2128b2['shift']());}catch(_0x55f253){_0x2128b2['push'](_0x2128b2['shift']());}}}(_0x5554,0x198da2+0x941e9+0x140e4b*-0x1));import{nodeEnvelopeSchema}from'@myagentroam/protocol';function _0x5554(){const _0x8a9278=['mtC4ndGXmxHPCvfeza','zgvJAwrLqxbWCM92ywW','y29TCgXLDgvvBMnVBNrYB2XSzwrdyw5JzwXSyxrPB24','C2vZC2LVBI5JAgfUBMvSlM1LC3nHz2u','y3jLzgvUDgLHBa','CMvJB25JAwXLuNvUCW','BM9Kzs5Yzxf1zxn0','yxv0AgvUDgLJyxrLza','tuvtu0fhrv9uwvbfx1vos05pv04','C3rHCNrnyw5Hz2vKuNvU','CNvUBMvYCW','CNvUlMLUDgvYCNvWDa','B3b0Aw9UCW','tuvtu0fhrv9jtLzbteLe','yxbWCM92ywXjza','qvbquK9wruq','BwvZC2fNzq','zgLZCgf0y2G','Cgf5Bg9Hza','su5urvjsvvbu','zgvJAxnPB24','DhLWzq','BM9KzuLK','q0foq0vm','nZG2mJq0mLjVufnUwG','C2vZC2LVBI5Yzxn1Bwu','CNvUlMfWChjVDMfSlMrLy2LZAw9U','y2fUy2vSuNvU','mJi5otC3odHvDLj0Euu','zgvSAxzLCLnLC3nPB25dAgfUBMvStwvZC2fNzq','uLvox1rfuK1jtKfm','y2XVC2u','mMDoBgLYyW','AgfUzgXLtM9KzvjLCxvLC3q','CgfYC2u','BgvHC2uUCMvJB25JAwXL','CNvUlNn0yxj0','mtbSwef6Bva','CNvUCY5YzwnVBMnPBgu','CMvNAxn0zxi','Aw5ZCgvJDfDVCMTZCgfJzq','otjQyurWBfa','y29UBMvJDgvK','ywnR','nta0mJC1mxDItNvysG','mta5mJu3m0XMCM9RBG','otK1sg1KzNL4','C3rYAw5N','ndb1rfbLvfq','C2vUza','AgfUzgXLuNvUDgLTzunYzwrLBNrPywXszxnWB25Zzq','otiZnZqXswrgzxDe','zxjYB3i','AgfUzgXL','uKvkrunuruq','CNvUswq','CNvUlMnHBMnLBa','y29UzMLN','D29YA3nWywnLlMLUC3bLy3q','y2fUy2vStwfUywDLzfj1BG','CMvNAxn0zxjLza'];_0x5554=function(){return _0x8a9278;};return _0x5554();}export class NodeControlMessageService{[_0x2b3cbd(0x9f)];constructor(_0xc948da){const _0x15d3aa=_0x2b3cbd;this[_0x15d3aa(0x9f)]=_0xc948da;}[_0x2b3cbd(0x8b)](_0x1d8992){const _0x39b8ac=_0x2b3cbd;let _0x1f74bc;try{_0x1f74bc=nodeEnvelopeSchema[_0x39b8ac(0xb5)](JSON[_0x39b8ac(0xb5)](_0x1d8992));}catch{this[_0x39b8ac(0x9f)][_0x39b8ac(0xb2)](-0x37e+-0x12ec+0x260c,_0x39b8ac(0xa0));return;}this[_0x39b8ac(0xa4)](_0x1f74bc);}[_0x2b3cbd(0xa4)](_0x1f2dd4){const _0x4e8ce5=_0x2b3cbd;if(_0x1f2dd4[_0x4e8ce5(0xa8)]===_0x4e8ce5(0x92)){this[_0x4e8ce5(0xba)](_0x1f2dd4);return;}if(_0x1f2dd4[_0x4e8ce5(0xa8)]===_0x4e8ce5(0x9a)){this[_0x4e8ce5(0x9f)][_0x4e8ce5(0xbd)]();return;}if(_0x1f2dd4[_0x4e8ce5(0xa8)]===_0x4e8ce5(0x90)){void this[_0x4e8ce5(0x9f)][_0x4e8ce5(0xbb)](_0x1f2dd4);return;}if(_0x1f2dd4[_0x4e8ce5(0xa8)]===_0x4e8ce5(0x99)){void this[_0x4e8ce5(0x9f)][_0x4e8ce5(0xb4)](_0x1f2dd4);return;}if(this[_0x4e8ce5(0x9f)][_0x4e8ce5(0x88)](_0x1f2dd4))return;if(_0x1f2dd4[_0x4e8ce5(0xa8)]===_0x4e8ce5(0xbe))return;if(_0x1f2dd4[_0x4e8ce5(0xa8)]===_0x4e8ce5(0xb9)){this[_0x4e8ce5(0x9f)][_0x4e8ce5(0x98)](_0x1f2dd4);return;}if(_0x1f2dd4[_0x4e8ce5(0xa8)]===_0x4e8ce5(0xad)){this[_0x4e8ce5(0x94)](_0x1f2dd4);return;}if(_0x1f2dd4[_0x4e8ce5(0xa8)]===_0x4e8ce5(0xb7)){this[_0x4e8ce5(0x9f)][_0x4e8ce5(0x87)](_0x4e8ce5(0xbe),{'type':_0x1f2dd4[_0x4e8ce5(0xa8)]},_0x1f2dd4['id']);try{this[_0x4e8ce5(0x9f)][_0x4e8ce5(0x9d)][_0x4e8ce5(0x9c)](_0x1f2dd4);}catch(_0x54d583){if(!(_0x54d583 instanceof Error)||_0x54d583[_0x4e8ce5(0xa3)]!==_0x4e8ce5(0xb1))throw _0x54d583;}return;}if(_0x1f2dd4[_0x4e8ce5(0xa8)]===_0x4e8ce5(0x96)){this[_0x4e8ce5(0x9f)][_0x4e8ce5(0xb0)](_0x1f2dd4);return;}if(_0x1f2dd4[_0x4e8ce5(0xa8)]===_0x4e8ce5(0x8e)||_0x1f2dd4[_0x4e8ce5(0xa8)]===_0x4e8ce5(0x9e)){this[_0x4e8ce5(0xae)](_0x1f2dd4);return;}if(_0x1f2dd4[_0x4e8ce5(0xa8)]===_0x4e8ce5(0xac)||_0x1f2dd4[_0x4e8ce5(0xa8)]===_0x4e8ce5(0xb6)){this[_0x4e8ce5(0x9f)][_0x4e8ce5(0x87)](_0x4e8ce5(0xbe),{'type':_0x1f2dd4[_0x4e8ce5(0xa8)]},_0x1f2dd4['id']);return;}if(_0x1f2dd4[_0x4e8ce5(0xa8)]!==_0x4e8ce5(0x8a))this[_0x4e8ce5(0x9f)][_0x4e8ce5(0x87)](_0x4e8ce5(0x8a),{'code':_0x4e8ce5(0x9b)},_0x1f2dd4['id']);}[_0x2b3cbd(0xba)](_0x62bb4e){const _0x1c172c=_0x2b3cbd,_0x536000=_0x62bb4e[_0x1c172c(0xa5)];if(typeof _0x536000[_0x1c172c(0xa9)]!==_0x1c172c(0x85)||typeof _0x536000[_0x1c172c(0x97)]!==_0x1c172c(0x85)||this[_0x1c172c(0x9f)][_0x1c172c(0x8f)]()===undefined){this[_0x1c172c(0x9f)][_0x1c172c(0xb2)](0x6cf*0x1+-0x8ad+-0x1c*-0xa0,_0x1c172c(0xa0));return;}void this[_0x1c172c(0x9f)][_0x1c172c(0xba)](_0x536000[_0x1c172c(0xa9)],_0x536000[_0x1c172c(0x97)]);}[_0x2b3cbd(0x94)](_0x6d3d7){const _0x1e2e28=_0x2b3cbd,_0x47b752=_0x6d3d7[_0x1e2e28(0xa5)];if(typeof _0x47b752[_0x1e2e28(0x8d)]!==_0x1e2e28(0x85)||typeof _0x47b752[_0x1e2e28(0xa1)]!==_0x1e2e28(0x85)||_0x47b752[_0x1e2e28(0xa7)]!==_0x1e2e28(0xa2)&&_0x47b752[_0x1e2e28(0xa7)]!==_0x1e2e28(0x8c)){this[_0x1e2e28(0x9f)][_0x1e2e28(0x87)](_0x1e2e28(0x8a),{'code':_0x1e2e28(0xa0)},_0x6d3d7['id']);return;}this[_0x1e2e28(0x9f)][_0x1e2e28(0x9d)][_0x1e2e28(0x94)]({'runId':_0x47b752[_0x1e2e28(0x8d)],'approvalId':_0x47b752[_0x1e2e28(0xa1)],'decision':_0x47b752[_0x1e2e28(0xa7)]}),this[_0x1e2e28(0x9f)][_0x1e2e28(0x87)](_0x1e2e28(0xbe),{'type':_0x6d3d7[_0x1e2e28(0xa8)]},_0x6d3d7['id']);}[_0x2b3cbd(0xae)](_0x1e8a5e){const _0xdfe1b0=_0x2b3cbd,_0x58553a=_0x1e8a5e[_0xdfe1b0(0xa5)];if(typeof _0x58553a[_0xdfe1b0(0x8d)]===_0xdfe1b0(0x85)){const _0x12063a=this[_0xdfe1b0(0x9f)][_0xdfe1b0(0x9d)][_0xdfe1b0(0x91)](_0x58553a[_0xdfe1b0(0x8d)],_0x1e8a5e[_0xdfe1b0(0xa8)]===_0xdfe1b0(0x8e)?_0xdfe1b0(0xaa):_0xdfe1b0(0xa6));if(!_0x12063a)this[_0xdfe1b0(0x9f)][_0xdfe1b0(0x95)](_0x58553a[_0xdfe1b0(0x8d)]);}this[_0xdfe1b0(0x9f)][_0xdfe1b0(0x87)](_0xdfe1b0(0xbe),{'type':_0x1e8a5e[_0xdfe1b0(0xa8)]},_0x1e8a5e['id']);}}
1
+ import { nodeEnvelopeSchema } from '@myagentroam/protocol';
2
+ /** Owns parsing and dispatch of the closed Node control-message protocol. */
3
+ export class NodeControlMessageService {
4
+ options;
5
+ constructor(options) {
6
+ this.options = options;
7
+ }
8
+ handle(raw) {
9
+ let envelope;
10
+ try {
11
+ envelope = nodeEnvelopeSchema.parse(JSON.parse(raw));
12
+ }
13
+ catch {
14
+ this.options.close(4002, 'MESSAGE_INVALID');
15
+ return;
16
+ }
17
+ this.dispatch(envelope);
18
+ }
19
+ dispatch(envelope) {
20
+ if (envelope.type === 'registered') {
21
+ this.register(envelope);
22
+ return;
23
+ }
24
+ if (envelope.type === 'authenticated') {
25
+ this.options.connected();
26
+ return;
27
+ }
28
+ if (envelope.type === 'workspace.inspect') {
29
+ void this.options.inspectWorkspace(envelope);
30
+ return;
31
+ }
32
+ if (envelope.type === 'node.request') {
33
+ void this.options.handleNodeRequest(envelope);
34
+ return;
35
+ }
36
+ if (this.options.handleRuntimeCredentialResponse(envelope))
37
+ return;
38
+ if (envelope.type === 'ack')
39
+ return;
40
+ if (envelope.type === 'runs.reconcile') {
41
+ this.options.reconcileRuns(envelope);
42
+ return;
43
+ }
44
+ if (envelope.type === 'run.approval.decision') {
45
+ this.decideApproval(envelope);
46
+ return;
47
+ }
48
+ if (envelope.type === 'run.start') {
49
+ this.options.send('ack', { type: envelope.type }, envelope.id);
50
+ try {
51
+ this.options.runners.startManagedRun(envelope);
52
+ }
53
+ catch (error) {
54
+ // A delayed internal start may arrive after the terminal projection was removed.
55
+ if (!(error instanceof Error) || error.message !== 'RUN_TERMINAL')
56
+ throw error;
57
+ }
58
+ return;
59
+ }
60
+ if (envelope.type === 'session.channel.message') {
61
+ this.options.deliverSessionChannelMessage(envelope);
62
+ return;
63
+ }
64
+ if (envelope.type === 'run.cancel' || envelope.type === 'run.interrupt') {
65
+ this.cancelRun(envelope);
66
+ return;
67
+ }
68
+ if (envelope.type === 'session.resume' || envelope.type === 'lease.reconcile') {
69
+ this.options.send('ack', { type: envelope.type }, envelope.id);
70
+ return;
71
+ }
72
+ if (envelope.type !== 'error')
73
+ this.options.send('error', { code: 'MESSAGE_TYPE_UNKNOWN' }, envelope.id);
74
+ }
75
+ register(envelope) {
76
+ const payload = envelope.payload;
77
+ if (typeof payload.nodeId !== 'string' ||
78
+ typeof payload.credential !== 'string' ||
79
+ this.options.config() === undefined) {
80
+ this.options.close(4002, 'MESSAGE_INVALID');
81
+ return;
82
+ }
83
+ void this.options.register(payload.nodeId, payload.credential);
84
+ }
85
+ decideApproval(envelope) {
86
+ const payload = envelope.payload;
87
+ if (typeof payload.runId !== 'string' ||
88
+ typeof payload.approvalId !== 'string' ||
89
+ (payload.decision !== 'APPROVED' && payload.decision !== 'REJECTED')) {
90
+ this.options.send('error', { code: 'MESSAGE_INVALID' }, envelope.id);
91
+ return;
92
+ }
93
+ this.options.runners.decideApproval({
94
+ runId: payload.runId,
95
+ approvalId: payload.approvalId,
96
+ decision: payload.decision
97
+ });
98
+ this.options.send('ack', { type: envelope.type }, envelope.id);
99
+ }
100
+ cancelRun(envelope) {
101
+ const payload = envelope.payload;
102
+ if (typeof payload.runId === 'string') {
103
+ const handled = this.options.runners.cancelManagedRun(payload.runId, envelope.type === 'run.cancel' ? 'CANCEL' : 'INTERRUPT');
104
+ if (!handled)
105
+ this.options.completeUncontrolledCancellation(payload.runId);
106
+ }
107
+ this.options.send('ack', { type: envelope.type }, envelope.id);
108
+ }
109
+ }
@@ -1,2 +1,62 @@
1
- /* mar-release-protected */
2
- const _0x1e12e9=_0x54f2;function _0xe3d3(){const _0x155730=['B3b0Aw9UCW','C3rYAw5N','vvnfuL9bvvrit1jjwKfusu9ox1jfuvvjuKve','ndyYnZq5wxvJzeHy','BM9KzuLK','zgf0yq','CM91BMq','B2jQzwn0','Cgf5Bg9Hza','C2vUza','ntKWmJi2nfLvserjzq','ouHbqu53tW','zgf0ywjHC2vbDMfPBgfIBgu','BM93','mtu1otq2nwvUuuHIvq','C2vUzevYCM9Y','BM9Kzs5VCgvYyxrPB24Uy29TCgXLDgvK','mJG5mdG2uezvuLPP','BM9Kzs5VCgvYyxrPB24UzMfPBgvK','DxnLCKf1DgHVCML6yxrPB24','BM9Kzs5YzxnWB25Zzq','ota1otGWAvvnzxv6','DxnLCKLK','tuvtu0fhrv9jtLzbteLe','mtjmq1bJse0','AgfUzgXL','C2vZC2LVBKHHC2G','nJq3mtm4BuvsCuTb','su5urvjoquXFrvjst1i','zxHLy3v0zq','zgv0ywLSCW','B3bLCMf0Aw9U','mJeXnJyXnejevuLABW','y29Kzq'];_0xe3d3=function(){return _0x155730;};return _0xe3d3();}(function(_0x40b868,_0x281005){const _0x3581b0=_0x54f2,_0x55c0c9=_0x40b868();while(!![]){try{const _0x6889ad=parseInt(_0x3581b0(0x9f))/(0x1082+0x1ea+-0x5*0x3af)+parseInt(_0x3581b0(0x95))/(0x301*-0x5+-0x3b*0x49+0x1fda)+-parseInt(_0x3581b0(0xa4))/(-0x2a8+0xb1+0x1*0x1fa)+parseInt(_0x3581b0(0x99))/(0x1b22+0x26eb+-0x4209)+-parseInt(_0x3581b0(0x92))/(0x1a70+0x143*0xe+-0x2c15)*(parseInt(_0x3581b0(0x9c))/(-0x2393+0xcfd+0x1*0x169c))+-parseInt(_0x3581b0(0xa9))/(0x10e3*0x1+-0x1bc4*0x1+0xae8)+-parseInt(_0x3581b0(0x8e))/(0x1de5*0x1+-0x13ed+-0x9f0)*(-parseInt(_0x3581b0(0x8f))/(0x1cd+0x21c1+-0x2385));if(_0x6889ad===_0x281005)break;else _0x55c0c9['push'](_0x55c0c9['shift']());}catch(_0x52c6f9){_0x55c0c9['push'](_0x55c0c9['shift']());}}}(_0xe3d3,-0x6b3ec+-0x1c61*0x21+0x5fb*0x2a7));import{nodeLog}from'../operational.js';import{validUserAuthorization}from'../runner/codex/conversation-parser.js';function _0x54f2(_0x3ee8fc,_0x915d4b){_0x3ee8fc=_0x3ee8fc-(0x20a+0xe*0x2c7+-0x31*0xd3);const _0x3d3ef2=_0xe3d3();let _0x308834=_0x3d3ef2[_0x3ee8fc];if(_0x54f2['sMArbt']===undefined){var _0x307074=function(_0x4b1578){const _0x43d5ea='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3205f3='',_0x1d9406='';for(let _0x26d33a=-0x4*-0x7d6+-0x238*-0x3+-0x2600,_0x59e7fe,_0x290d1f,_0x1d5bd7=0x3*0x5f7+0x147b+-0x2660;_0x290d1f=_0x4b1578['charAt'](_0x1d5bd7++);~_0x290d1f&&(_0x59e7fe=_0x26d33a%(-0x10cf*-0x1+-0xf*0x1c3+0x9a2)?_0x59e7fe*(0x4e1+0x1c2a+-0x20cb)+_0x290d1f:_0x290d1f,_0x26d33a++%(-0x1073*0x1+-0x230f*-0x1+-0x1298))?_0x3205f3+=String['fromCharCode'](-0x1f28+-0x979+-0x378*-0xc&_0x59e7fe>>(-(-0x265e+0x693+0x48b*0x7)*_0x26d33a&0x71f*-0x2+0xf19*0x1+0xd5*-0x1)):0x692*-0x4+0x2a1*0x1+0x17a7){_0x290d1f=_0x43d5ea['indexOf'](_0x290d1f);}for(let _0x1b2767=-0x6c2*0x4+0x1e77+-0x36f,_0x4c4d8e=_0x3205f3['length'];_0x1b2767<_0x4c4d8e;_0x1b2767++){_0x1d9406+='%'+('00'+_0x3205f3['charCodeAt'](_0x1b2767)['toString'](0x2*-0x1003+-0x134c+0x2*0x19b1))['slice'](-(0x318+0x1f*0xc1+-0x1*0x1a75));}return decodeURIComponent(_0x1d9406);};_0x54f2['WgnyCR']=_0x307074,_0x54f2['JQQSyw']={},_0x54f2['sMArbt']=!![];}const _0x48b645=_0x3d3ef2[0x2348*-0x1+0x215f*-0x1+0x5*0xdbb];_0x54f2['WxvNDu']!==_0x48b645&&(_0x54f2['JQQSyw']={},_0x54f2['WxvNDu']=_0x48b645);const _0x2963ae=_0x54f2['JQQSyw'][_0x3ee8fc];return _0x2963ae===undefined?(_0x308834=_0x54f2['WgnyCR'](_0x308834),_0x54f2['JQQSyw'][_0x3ee8fc]=_0x308834):_0x308834=_0x2963ae,_0x308834;}import{safePublicError}from'../util/safe-error.js';export class NodeRequestService{[_0x1e12e9(0xa6)];constructor(_0x453862){const _0x8eeb=_0x1e12e9;this[_0x8eeb(0xa6)]=_0x453862;}async[_0x1e12e9(0x9d)](_0x3ebffe){const _0x1b1e5b=_0x1e12e9,_0x16a430=_0x3ebffe[_0x1b1e5b(0x8c)];if(typeof _0x16a430[_0x1b1e5b(0xa3)]!==_0x1b1e5b(0xa7)||!this[_0x1b1e5b(0xa6)][_0x1b1e5b(0x90)]()){this[_0x1b1e5b(0x93)](_0x3ebffe['id'],new Error(_0x1b1e5b(0x9b)),_0x1b1e5b(0x9b));return;}if(!validUserAuthorization(_0x16a430[_0x1b1e5b(0x97)],_0x3ebffe,_0x16a430[_0x1b1e5b(0xa3)],this[_0x1b1e5b(0xa6)][_0x1b1e5b(0xaa)]())){this[_0x1b1e5b(0x93)](_0x3ebffe['id'],new Error(_0x1b1e5b(0xa8)),_0x1b1e5b(0xa8));return;}const _0x2e3501=performance[_0x1b1e5b(0x91)]();try{const _0x443432=_0x16a430[_0x1b1e5b(0x89)]!==null&&typeof _0x16a430[_0x1b1e5b(0x89)]===_0x1b1e5b(0x8b)?{..._0x16a430[_0x1b1e5b(0x89)],'__workspaceWatchSessionHash':_0x16a430[_0x1b1e5b(0x97)][_0x1b1e5b(0x9e)],'__requestUserId':_0x16a430[_0x1b1e5b(0x97)][_0x1b1e5b(0x9a)]}:_0x16a430[_0x1b1e5b(0x89)],_0xf6f2c9=await this[_0x1b1e5b(0xa6)][_0x1b1e5b(0xa1)](_0x16a430[_0x1b1e5b(0xa3)],_0x443432);this[_0x1b1e5b(0xa6)][_0x1b1e5b(0x8d)](_0x1b1e5b(0x98),{'result':_0xf6f2c9},_0x3ebffe['id']);const _0x3cd1f4=Math[_0x1b1e5b(0x8a)](performance[_0x1b1e5b(0x91)]()-_0x2e3501);if(_0x3cd1f4>=-0x6d4+0x4bc+0x83*0x6)nodeLog(_0x1b1e5b(0x94),{'nodeId':this[_0x1b1e5b(0xa6)][_0x1b1e5b(0xaa)](),'operation':_0x16a430[_0x1b1e5b(0xa3)],'requestId':_0x3ebffe['id'],'durationMs':_0x3cd1f4});}catch(_0x7819e8){const _0x5891fc=safePublicError(_0x7819e8,_0x1b1e5b(0xa0));nodeLog(_0x1b1e5b(0x96),{'nodeId':this[_0x1b1e5b(0xa6)][_0x1b1e5b(0xaa)](),'operation':_0x16a430[_0x1b1e5b(0xa3)],'requestId':_0x3ebffe['id'],'durationMs':Math[_0x1b1e5b(0x8a)](performance[_0x1b1e5b(0x91)]()-_0x2e3501),'error':_0x5891fc[_0x1b1e5b(0xa5)],..._0x5891fc[_0x1b1e5b(0xa2)]===undefined?{}:{'errorDetails':_0x5891fc[_0x1b1e5b(0xa2)]}}),this[_0x1b1e5b(0xa6)][_0x1b1e5b(0x8d)](_0x1b1e5b(0x98),nodeResponseFailure(_0x5891fc),_0x3ebffe['id']);}}[_0x1e12e9(0x93)](_0x21a05e,_0x2a2a71,_0x35a4a0){const _0x4efb75=_0x1e12e9,_0x521005=safePublicError(_0x2a2a71,_0x35a4a0);this[_0x4efb75(0xa6)][_0x4efb75(0x8d)](_0x4efb75(0x98),nodeResponseFailure(_0x521005),_0x21a05e);}}function nodeResponseFailure(_0x2b4264){const {code:_0x594be5,..._0x1df5b5}=_0x2b4264;return{'error':_0x594be5,..._0x1df5b5};}
1
+ import { nodeLog } from '../operational.js';
2
+ import { validUserAuthorization } from '../runner/codex/conversation-parser.js';
3
+ import { safePublicError } from '../util/safe-error.js';
4
+ /** Validates and executes the closed Admin-facing Node operation envelope. */
5
+ export class NodeRequestService {
6
+ options;
7
+ constructor(options) {
8
+ this.options = options;
9
+ }
10
+ async handle(envelope) {
11
+ const payload = envelope.payload;
12
+ if (typeof payload.operation !== 'string' || !this.options.databaseAvailable()) {
13
+ this.sendError(envelope.id, new Error('MESSAGE_INVALID'), 'MESSAGE_INVALID');
14
+ return;
15
+ }
16
+ if (!validUserAuthorization(payload.userAuthorization, envelope, payload.operation, this.options.nodeId())) {
17
+ this.sendError(envelope.id, new Error('USER_AUTHORIZATION_REQUIRED'), 'USER_AUTHORIZATION_REQUIRED');
18
+ return;
19
+ }
20
+ const startedAt = performance.now();
21
+ try {
22
+ const data = payload.data !== null && typeof payload.data === 'object'
23
+ ? {
24
+ ...payload.data,
25
+ __workspaceWatchSessionHash: payload.userAuthorization
26
+ .sessionHash,
27
+ __requestUserId: payload.userAuthorization.userId
28
+ }
29
+ : payload.data;
30
+ const result = await this.options.execute(payload.operation, data);
31
+ this.options.send('node.response', { result }, envelope.id);
32
+ const durationMs = Math.round(performance.now() - startedAt);
33
+ if (durationMs >= 250)
34
+ nodeLog('node.operation.completed', {
35
+ nodeId: this.options.nodeId(),
36
+ operation: payload.operation,
37
+ requestId: envelope.id,
38
+ durationMs
39
+ });
40
+ }
41
+ catch (error) {
42
+ const failure = safePublicError(error, 'INTERNAL_ERROR');
43
+ nodeLog('node.operation.failed', {
44
+ nodeId: this.options.nodeId(),
45
+ operation: payload.operation,
46
+ requestId: envelope.id,
47
+ durationMs: Math.round(performance.now() - startedAt),
48
+ error: failure.code,
49
+ ...(failure.details === undefined ? {} : { errorDetails: failure.details })
50
+ });
51
+ this.options.send('node.response', nodeResponseFailure(failure), envelope.id);
52
+ }
53
+ }
54
+ sendError(replyTo, error, fallback) {
55
+ const failure = safePublicError(error, fallback);
56
+ this.options.send('node.response', nodeResponseFailure(failure), replyTo);
57
+ }
58
+ }
59
+ function nodeResponseFailure(failure) {
60
+ const { code, ...metadata } = failure;
61
+ return { error: code, ...metadata };
62
+ }
@@ -1,2 +1,88 @@
1
- /* mar-release-protected */
2
- const _0x210daf=_0x3789;(function(_0x54ba8c,_0x1ce275){const _0x41d954=_0x3789,_0xc84970=_0x54ba8c();while(!![]){try{const _0x20fd57=-parseInt(_0x41d954(0xba))/(0x192+0x2253+-0x23e4)+-parseInt(_0x41d954(0xa7))/(0x26fb+-0x18b2*0x1+-0xe47)+parseInt(_0x41d954(0xcf))/(-0xc9*-0x21+0x16c0+0x1df*-0x1a)+parseInt(_0x41d954(0xa3))/(-0x1bce+-0x15d7+0x31a9)+parseInt(_0x41d954(0xb1))/(0x89*-0x7+0x227+0x19d)*(parseInt(_0x41d954(0xc2))/(-0x25d2+0x1*0x1dcb+0x1*0x80d))+-parseInt(_0x41d954(0xa6))/(-0x5*0x84+-0x461*-0x3+-0x2*0x544)*(-parseInt(_0x41d954(0xd3))/(-0x9ae+-0xd*0x14d+0x1a9f))+parseInt(_0x41d954(0xd4))/(-0x1825+0x2043+-0x815)*(-parseInt(_0x41d954(0xb2))/(0x100f*0x1+0x1239+-0x223e));if(_0x20fd57===_0x1ce275)break;else _0xc84970['push'](_0xc84970['shift']());}catch(_0x55fbd7){_0xc84970['push'](_0xc84970['shift']());}}}(_0x37ba,-0x154fd*-0x1+0x2d1da+-0x18a4e));function _0x3789(_0x534f01,_0x502b4b){_0x534f01=_0x534f01-(0x1*0x260f+0x3*-0xb65+-0x33f);const _0x18aa82=_0x37ba();let _0x350c7a=_0x18aa82[_0x534f01];if(_0x3789['zqtGDA']===undefined){var _0x1facea=function(_0x3fabe4){const _0x3753ef='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3aed02='',_0x260852='';for(let _0x122319=-0x22ec+-0x306*-0x1+0x1*0x1fe6,_0x46d668,_0x5dc97c,_0x4d30b1=0x1f0d+0x2b*0x17+-0x22ea;_0x5dc97c=_0x3fabe4['charAt'](_0x4d30b1++);~_0x5dc97c&&(_0x46d668=_0x122319%(-0xf46+0x99e+0x1e4*0x3)?_0x46d668*(-0x21a0+-0x14f7*0x1+0x36d7)+_0x5dc97c:_0x5dc97c,_0x122319++%(-0x19da*0x1+-0xaae*0x1+0x248c))?_0x3aed02+=String['fromCharCode'](-0x20e3+0x19*-0xa+0x17*0x184&_0x46d668>>(-(-0x6a0+-0x24d8+0x73f*0x6)*_0x122319&0x8*0xb5+-0x1a5*0x6+-0x2*-0x21e)):0x4*0x961+0x4*0x2f+-0x2640){_0x5dc97c=_0x3753ef['indexOf'](_0x5dc97c);}for(let _0x416db9=-0x235d+-0x184c+0x3ba9,_0x39770f=_0x3aed02['length'];_0x416db9<_0x39770f;_0x416db9++){_0x260852+='%'+('00'+_0x3aed02['charCodeAt'](_0x416db9)['toString'](0xf82+0xe1*0x4+-0x652*0x3))['slice'](-(0x25ff+-0x265c+0x13*0x5));}return decodeURIComponent(_0x260852);};_0x3789['SqaUuy']=_0x1facea,_0x3789['bKRUrk']={},_0x3789['zqtGDA']=!![];}const _0x5f0ca7=_0x18aa82[-0x7*-0x13a+0x1b8d+-0x2423];_0x3789['Jtgsbp']!==_0x5f0ca7&&(_0x3789['bKRUrk']={},_0x3789['Jtgsbp']=_0x5f0ca7);const _0x3ff225=_0x3789['bKRUrk'][_0x534f01];return _0x3ff225===undefined?(_0x350c7a=_0x3789['SqaUuy'](_0x350c7a),_0x3789['bKRUrk'][_0x534f01]=_0x350c7a):_0x350c7a=_0x3ff225,_0x350c7a;}function _0x37ba(){const _0x3a67da=['odi3otK2DeXxwMPA','BwfUywDLzfr1CM5Z','B3b0Aw9UCW','odrsBKnYwKK','mZe4odyWuurhs2LJ','CNvUCW','DhvYBG','CNvUCY5YzwnVBMnPBgu','zw1PDfDVCMTIzw5JAa','C2v0','Cgf5Bg9Hza','C3rHDgu','zw1PDff1zxvL','y29KzxG','mtaZodG1yw1Twe9g','mty2otbeq1L0zfu','y29UDMvYC2f0Aw9U','ywnR','BgvHC2uUCMvJB25JAwXL','tuvtu0fhrv9jtLzbteLe','yxbWCM92ywWUCMvXDwvZDa','C2vZC2LVBG','zxHLy3v0Aw9U','odu1n01Trxjzqq','AxnbCNjHEq','CxvLDwvZ','zw1PDa','z2v0uNvU','BwfYu2vZC2LVBKLK','C3rYAw5N','zxjYB3i','mtjtqNjWA1q','C2vUza','AgfZ','BwLNCMf0zvj1BM5LCLnLC3nPB25jzgvUDgL0Eq','CNvU','CNvUswq','C29Tzq','CxvLDwu','ywn0AxzL','ChjLC2vUDa','zxzLBNq','ChvIBgLZAefWChjVDMfS','zw1PDfj1BG','odq3mZy4AMvWD0Td','zxzLBNrZ','CMvJB25JAwXL','CMvJB25JAwXLuNvU','nJKWmJrjruD1AK0','mtu5m1PrsKz4Ba','CNvUDgLTzq','y2XHDwrL','B3bLBKnVzgu','CNvUswrZ','C2vZC2LVBKLK'];_0x37ba=function(){return _0x3a67da;};return _0x37ba();}import{isNodeAgentRun,isNodeConversationTurn,isPlainRecord}from'../runner/codex/conversation-parser.js';export function workbenchPayloadSessionId(_0x5b8f19,_0x2b5276,_0x3b029c){const _0x5ea5f3=_0x3789;if(!isPlainRecord(_0x3b029c))return undefined;if(_0x2b5276===_0x5ea5f3(0xb8)){if(isPlainRecord(_0x3b029c[_0x5ea5f3(0xb8)])){const _0x327a09=_0x3b029c[_0x5ea5f3(0xb8)]['id'];if(typeof _0x327a09===_0x5ea5f3(0xc0))return _0x327a09;}return typeof _0x3b029c[_0x5ea5f3(0xa2)]===_0x5ea5f3(0xc0)?_0x3b029c[_0x5ea5f3(0xa2)]:undefined;}if(_0x2b5276===_0x5ea5f3(0xc6)&&isNodeAgentRun(_0x3b029c[_0x5ea5f3(0xc6)]))return _0x3b029c[_0x5ea5f3(0xc6)][_0x5ea5f3(0xa2)];if(_0x2b5276===_0x5ea5f3(0xb3)){if(isNodeConversationTurn(_0x3b029c[_0x5ea5f3(0xa9)]))return _0x3b029c[_0x5ea5f3(0xa9)][_0x5ea5f3(0xa2)];if(typeof _0x3b029c[_0x5ea5f3(0xa2)]===_0x5ea5f3(0xc0))return _0x3b029c[_0x5ea5f3(0xa2)];if(isPlainRecord(_0x3b029c[_0x5ea5f3(0xcc)])){const _0x55962d=_0x3b029c[_0x5ea5f3(0xcc)][_0x5ea5f3(0xc7)];return typeof _0x55962d===_0x5ea5f3(0xc0)?_0x5b8f19[_0x5ea5f3(0xbe)](_0x55962d)?.[_0x5ea5f3(0xa2)]:undefined;}}if(_0x2b5276===_0x5ea5f3(0xc9)){const _0x3467cb=_0x3b029c[_0x5ea5f3(0xa2)];return typeof _0x3467cb===_0x5ea5f3(0xc0)?_0x3467cb:undefined;}return undefined;}export class NodeRunEventBridge{[_0x210daf(0xa5)];constructor(_0x14d4ad){const _0x5e5c4c=_0x210daf;this[_0x5e5c4c(0xa5)]=_0x14d4ad;}[_0x210daf(0xcd)](_0x4942ec){const _0x26416e=_0x210daf;this[_0x26416e(0xa5)][_0x26416e(0xc3)](_0x26416e(0xb7),_0x4942ec),this[_0x26416e(0xce)](_0x4942ec[_0x26416e(0xc7)],_0x26416e(0xb7),_0x4942ec);}[_0x210daf(0xce)](_0x48361f,_0x21c86a,_0x1d0c62,_0x3b6cac){const _0x244e4d=_0x210daf;this[_0x244e4d(0xa5)][_0x244e4d(0xd0)][_0x244e4d(0xbd)](_0x48361f,_0x21c86a,_0x1d0c62,_0x3b6cac);}[_0x210daf(0xaf)](_0x214b8f,_0x2c7685){const _0x5602e0=_0x210daf;this[_0x5602e0(0xa5)][_0x5602e0(0xab)](_0x5602e0(0xc9),{'workspaceId':_0x214b8f,'sessionId':_0x2c7685,'queue':this[_0x5602e0(0xa5)][_0x5602e0(0xbc)][_0x5602e0(0xcb)](_0x214b8f,_0x2c7685)});}[_0x210daf(0xc5)](_0x40062c,_0x591745){const _0x5b05e3=_0x210daf;for(const [_0x6a69cc,_0x161a38]of this[_0x5b05e3(0xa5)][_0x5b05e3(0xb0)][_0x5b05e3(0xb9)][_0x5b05e3(0xa4)]){if(_0x161a38[_0x5b05e3(0xa2)]===_0x40062c)this[_0x5b05e3(0xa5)][_0x5b05e3(0xb0)][_0x5b05e3(0xb9)][_0x5b05e3(0xa4)][_0x5b05e3(0xac)](_0x6a69cc,{..._0x161a38,'sessionId':_0x591745});}for(const [_0x1b01c7,_0x49a092]of this[_0x5b05e3(0xa5)][_0x5b05e3(0xb0)][_0x5b05e3(0xb9)][_0x5b05e3(0xa8)]){if(_0x49a092[_0x5b05e3(0xa2)]===_0x40062c)this[_0x5b05e3(0xa5)][_0x5b05e3(0xb0)][_0x5b05e3(0xb9)][_0x5b05e3(0xa8)][_0x5b05e3(0xac)](_0x1b01c7,{..._0x49a092,'sessionId':_0x591745});}for(const [_0x145dbb,_0xefc51c]of this[_0x5b05e3(0xa5)][_0x5b05e3(0xd6)][_0x5b05e3(0xb9)][_0x5b05e3(0xa8)]){if(_0xefc51c[_0x5b05e3(0xbf)]===_0x40062c)this[_0x5b05e3(0xa5)][_0x5b05e3(0xd6)][_0x5b05e3(0xb9)][_0x5b05e3(0xa8)][_0x5b05e3(0xac)](_0x145dbb,{..._0xefc51c,'marSessionId':_0x591745});}for(const [_0x102257,_0x22a6c1]of this[_0x5b05e3(0xa5)][_0x5b05e3(0xd7)][_0x5b05e3(0xb9)]){if(_0x22a6c1[_0x5b05e3(0xa2)]===_0x40062c)this[_0x5b05e3(0xa5)][_0x5b05e3(0xd7)][_0x5b05e3(0xb9)][_0x5b05e3(0xac)](_0x102257,{..._0x22a6c1,'sessionId':_0x591745});}}[_0x210daf(0xd1)](_0x5c4259){const _0x426910=_0x210daf,_0x34276a=_0x5c4259[_0x426910(0xad)];if(!Array[_0x426910(0xbb)](_0x34276a[_0x426910(0xa1)])||_0x34276a[_0x426910(0xa1)][_0x426910(0xc8)](_0x4c0571=>typeof _0x4c0571!==_0x426910(0xc0))){this[_0x426910(0xa5)][_0x426910(0xc3)](_0x426910(0xc1),{'code':_0x426910(0xb6)},_0x5c4259['id']);return;}for(const _0x485509 of _0x34276a[_0x426910(0xa1)]){const _0x11fdb9=this[_0x426910(0xa5)][_0x426910(0xae)][_0x426910(0xca)][_0x426910(0xc4)](_0x485509);this[_0x426910(0xa5)][_0x426910(0xd5)][_0x426910(0xd2)](_0x485509,_0x11fdb9),this[_0x426910(0xa5)][_0x426910(0xc3)](_0x426910(0xb5),{'runId':_0x485509,'known':_0x11fdb9});}this[_0x426910(0xa5)][_0x426910(0xc3)](_0x426910(0xb4),{'type':_0x426910(0xaa)},_0x5c4259['id']);}}
1
+ import { isNodeAgentRun, isNodeConversationTurn, isPlainRecord } from '../runner/codex/conversation-parser.js';
2
+ export function workbenchPayloadSessionId(runtime, category, payload) {
3
+ if (!isPlainRecord(payload))
4
+ return undefined;
5
+ if (category === 'session') {
6
+ if (isPlainRecord(payload.session)) {
7
+ const id = payload.session.id;
8
+ if (typeof id === 'string')
9
+ return id;
10
+ }
11
+ return typeof payload.sessionId === 'string' ? payload.sessionId : undefined;
12
+ }
13
+ if (category === 'run' && isNodeAgentRun(payload.run))
14
+ return payload.run.sessionId;
15
+ if (category === 'conversation') {
16
+ if (isNodeConversationTurn(payload.turn))
17
+ return payload.turn.sessionId;
18
+ if (typeof payload.sessionId === 'string')
19
+ return payload.sessionId;
20
+ if (isPlainRecord(payload.event)) {
21
+ const runId = payload.event.runId;
22
+ return typeof runId === 'string' ? runtime.getRun(runId)?.sessionId : undefined;
23
+ }
24
+ }
25
+ if (category === 'queue') {
26
+ const id = payload.sessionId;
27
+ return typeof id === 'string' ? id : undefined;
28
+ }
29
+ return undefined;
30
+ }
31
+ /** Bridges process-local Run state to normalized control and Workbench events. */
32
+ export class NodeRunEventBridge {
33
+ options;
34
+ constructor(options) {
35
+ this.options = options;
36
+ }
37
+ publishApproval(input) {
38
+ this.options.send('approval.request', input);
39
+ this.emitRun(input.runId, 'approval.request', input);
40
+ }
41
+ emitRun(runId, eventType, payload, status) {
42
+ this.options.events.emit(runId, eventType, payload, status);
43
+ }
44
+ emitQueue(workspaceId, sessionId) {
45
+ this.options.emitWorkbench('queue', {
46
+ workspaceId,
47
+ sessionId,
48
+ queue: this.options.queues.present(workspaceId, sessionId)
49
+ });
50
+ }
51
+ migrateRunnerSessionIdentity(sessionId, nativeSessionId) {
52
+ for (const [turnId, managed] of this.options.codex.execution.managedTurns) {
53
+ if (managed.sessionId === sessionId)
54
+ this.options.codex.execution.managedTurns.set(turnId, {
55
+ ...managed,
56
+ sessionId: nativeSessionId
57
+ });
58
+ }
59
+ for (const [runId, managed] of this.options.codex.execution.runs) {
60
+ if (managed.sessionId === sessionId)
61
+ this.options.codex.execution.runs.set(runId, { ...managed, sessionId: nativeSessionId });
62
+ }
63
+ for (const [runId, managed] of this.options.claude.execution.runs) {
64
+ if (managed.marSessionId === sessionId)
65
+ this.options.claude.execution.runs.set(runId, {
66
+ ...managed,
67
+ marSessionId: nativeSessionId
68
+ });
69
+ }
70
+ for (const [runId, managed] of this.options.openCode.execution) {
71
+ if (managed.sessionId === sessionId)
72
+ this.options.openCode.execution.set(runId, { ...managed, sessionId: nativeSessionId });
73
+ }
74
+ }
75
+ reconcile(envelope) {
76
+ const payload = envelope.payload;
77
+ if (!Array.isArray(payload.runIds) || payload.runIds.some((id) => typeof id !== 'string')) {
78
+ this.options.send('error', { code: 'MESSAGE_INVALID' }, envelope.id);
79
+ return;
80
+ }
81
+ for (const runId of payload.runIds) {
82
+ const known = this.options.state.active.has(runId);
83
+ this.options.runtime.reconcileRun(runId, known);
84
+ this.options.send('lease.reconcile', { runId, known });
85
+ }
86
+ this.options.send('ack', { type: 'runs.reconcile' }, envelope.id);
87
+ }
88
+ }