@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,22 @@
1
- /* mar-release-protected */
2
- (function(_0x59de6e,_0x12dd6b){const _0x5808c9=_0x59ac,_0x5e1638=_0x59de6e();while(!![]){try{const _0x4aa8b1=parseInt(_0x5808c9(0x75))/(-0x13*-0xff+0x21fb+-0x34e7)*(-parseInt(_0x5808c9(0x7b))/(-0x3*-0xb0b+-0x2540+0x421))+-parseInt(_0x5808c9(0x78))/(0x1ab7*0x1+0x1*0xbf9+-0x26ad)*(parseInt(_0x5808c9(0x77))/(-0x1*0x855+0x801+0x2*0x2c))+-parseInt(_0x5808c9(0x74))/(-0x1304+0x20b*-0x1+0x4c*0x47)*(parseInt(_0x5808c9(0x6b))/(0x147*-0x1+0x5ae+-0x461))+-parseInt(_0x5808c9(0x6e))/(0x85a*-0x3+-0x3*0xaa9+0x3910)+-parseInt(_0x5808c9(0x6a))/(0x47f+0x4ce+0x945*-0x1)*(parseInt(_0x5808c9(0x73))/(-0x1fb1+0xb37+0x1483))+-parseInt(_0x5808c9(0x6f))/(-0x1bd6+-0x1fc8+0x3ba8)+parseInt(_0x5808c9(0x76))/(-0xb9*0x5+0x265*0x5+-0x851);if(_0x4aa8b1===_0x12dd6b)break;else _0x5e1638['push'](_0x5e1638['shift']());}catch(_0x280205){_0x5e1638['push'](_0x5e1638['shift']());}}}(_0x55ef,0x1*0x368f1+-0x2a5*-0x1bb+-0x51345));export function assertRunOwner(_0x1d526c,_0x3977f3){const _0x3cf669=_0x59ac;if(Number[_0x3cf669(0x6c)](_0x3977f3)&&_0x1d526c[_0x3cf669(0x79)]!==_0x3977f3)throw new Error(_0x3cf669(0x72));}function _0x59ac(_0x433ec6,_0x1932d9){_0x433ec6=_0x433ec6-(0x6a0*0x3+0x1*0x1777+0x1*-0x2aed);const _0x4a69c3=_0x55ef();let _0x58673c=_0x4a69c3[_0x433ec6];if(_0x59ac['CpNKZB']===undefined){var _0x5d5671=function(_0x189a23){const _0x26da3b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x45a05d='',_0x164fd8='';for(let _0x5d4ec6=0x6c+0x22*-0xab+-0x6*-0x3b7,_0x46bdfb,_0x5c6513,_0x462181=0x1cc0+0x92*-0x4+-0x1a78;_0x5c6513=_0x189a23['charAt'](_0x462181++);~_0x5c6513&&(_0x46bdfb=_0x5d4ec6%(-0x1988+-0x83c+0x21c8)?_0x46bdfb*(0x1*-0x1583+0x10af+-0xd*-0x64)+_0x5c6513:_0x5c6513,_0x5d4ec6++%(-0x14b9+0xcfe+0x7bf))?_0x45a05d+=String['fromCharCode'](0x1*-0x1d23+0x1*0xc2b+0x11f7&_0x46bdfb>>(-(-0x10be*0x2+0xa3*0x25+0x9ef)*_0x5d4ec6&-0xa61*-0x1+0x115d+-0x8*0x377)):-0x1f2e+-0x150f+0x343d){_0x5c6513=_0x26da3b['indexOf'](_0x5c6513);}for(let _0x46c93b=-0x1*-0xc41+0x6f0*0x3+0x5*-0x69d,_0x592a10=_0x45a05d['length'];_0x46c93b<_0x592a10;_0x46c93b++){_0x164fd8+='%'+('00'+_0x45a05d['charCodeAt'](_0x46c93b)['toString'](0x23c+-0x1*-0xf27+-0x1153))['slice'](-(0x1afe+-0x948+-0x11b4));}return decodeURIComponent(_0x164fd8);};_0x59ac['NQamrN']=_0x5d5671,_0x59ac['nMYbcw']={},_0x59ac['CpNKZB']=!![];}const _0x2b4bfc=_0x4a69c3[-0x26bc+-0x14ab+-0x1*-0x3b67];_0x59ac['oEbLej']!==_0x2b4bfc&&(_0x59ac['nMYbcw']={},_0x59ac['oEbLej']=_0x2b4bfc);const _0xce613b=_0x59ac['nMYbcw'][_0x433ec6];return _0xce613b===undefined?(_0x58673c=_0x59ac['NQamrN'](_0x58673c),_0x59ac['nMYbcw'][_0x433ec6]=_0x58673c):_0x58673c=_0xce613b,_0x58673c;}export function assertQueueItemOwner(_0x40ed80,_0x34f6ee){const _0x4ddf22=_0x59ac;if(Number[_0x4ddf22(0x6c)](_0x34f6ee)&&_0x40ed80[_0x4ddf22(0x79)]!==_0x34f6ee)throw new Error(_0x4ddf22(0x72));}function _0x55ef(){const _0x9df809=['mZqXmZa0t1Hts0jl','AxntywzLsw50zwDLCG','z2v0uxvLDwvjDgvT','mtuZmtaXmNLjD2LsDa','mJeWmta1mfDzEgHUDG','AxrLBuLKCW','C2vZC2LVBLf1zxvL','uLvox09xtKvex0jzx0fot1rirvjFvvnfuG','mJC5CLD4s25p','mJvPBuLouM8','n2Djveflqq','mtqWmZq2odbmBvLnwu0','ogjlCgzSEq','mtiWnJm5vhzhtffQ','Aw5PDgLHDgvKqNLvC2vYswq','ywn0AxzLu2vZC2LVBLj1BG','nZeYntbHzfbtz1a','mta4ntzLANfHBwW'];_0x55ef=function(){return _0x9df809;};return _0x55ef();}export function assertSessionControlOwner(_0x21779f,_0x52c7db,_0x2ce73e){const _0x557638=_0x59ac;if(!Number[_0x557638(0x6c)](_0x2ce73e))return;const _0x40a92f=_0x21779f[_0x557638(0x7a)](_0x52c7db);if(_0x40a92f!==undefined){assertRunOwner(_0x40a92f,_0x2ce73e);return;}for(const _0x5258bb of _0x21779f[_0x557638(0x71)](_0x52c7db)[_0x557638(0x70)]){const _0x508308=_0x21779f[_0x557638(0x6d)](_0x5258bb);if(_0x508308!==undefined)assertQueueItemOwner(_0x508308,_0x2ce73e);}}
1
+ export function assertRunOwner(run, requestUserId) {
2
+ if (Number.isSafeInteger(requestUserId) && run.initiatedByUserId !== requestUserId)
3
+ throw new Error('RUN_OWNED_BY_ANOTHER_USER');
4
+ }
5
+ export function assertQueueItemOwner(item, requestUserId) {
6
+ if (Number.isSafeInteger(requestUserId) && item.initiatedByUserId !== requestUserId)
7
+ throw new Error('RUN_OWNED_BY_ANOTHER_USER');
8
+ }
9
+ export function assertSessionControlOwner(runtime, sessionId, requestUserId) {
10
+ if (!Number.isSafeInteger(requestUserId))
11
+ return;
12
+ const active = runtime.activeSessionRun(sessionId);
13
+ if (active !== undefined) {
14
+ assertRunOwner(active, requestUserId);
15
+ return;
16
+ }
17
+ for (const itemId of runtime.sessionQueue(sessionId).itemIds) {
18
+ const item = runtime.getQueueItem(itemId);
19
+ if (item !== undefined)
20
+ assertQueueItemOwner(item, requestUserId);
21
+ }
22
+ }
@@ -1,2 +1,120 @@
1
- /* mar-release-protected */
2
- const _0x24be61=_0x42ac;(function(_0x4db7c4,_0x19e404){const _0x5ba149=_0x42ac,_0x486cdf=_0x4db7c4();while(!![]){try{const _0x1293b7=-parseInt(_0x5ba149(0x21d))/(0x406+-0x1*0x18f1+0x14ec)*(parseInt(_0x5ba149(0x20d))/(-0x1074+-0x1791*0x1+0x2807))+-parseInt(_0x5ba149(0x234))/(0x49*-0x65+0x59f+0x3*0x7bb)*(-parseInt(_0x5ba149(0x21b))/(-0x11c7+-0x1932+0x2afd))+parseInt(_0x5ba149(0x227))/(-0x1*-0x15d7+0x3*-0x74c+0x12)*(parseInt(_0x5ba149(0x211))/(0x11*0xd7+0x119c+0x3*-0xa9f))+parseInt(_0x5ba149(0x237))/(-0x14d+-0x5f3*0x3+-0x132d*-0x1)*(-parseInt(_0x5ba149(0x229))/(-0x18d3+0x3fd*0x5+-0x4a*-0x11))+-parseInt(_0x5ba149(0x21e))/(0x4b8+-0xae*0x7+0x13)*(-parseInt(_0x5ba149(0x209))/(-0x15*0xb9+0xfb6+-0x1*0x7f))+-parseInt(_0x5ba149(0x214))/(0x2414*0x1+-0x13d7+-0x1032)+parseInt(_0x5ba149(0x1f8))/(0x2129+-0x2b8+-0x1e65)*(-parseInt(_0x5ba149(0x236))/(0x1b32*-0x1+-0x1034*-0x2+0x529*-0x1));if(_0x1293b7===_0x19e404)break;else _0x486cdf['push'](_0x486cdf['shift']());}catch(_0x1fddd6){_0x486cdf['push'](_0x486cdf['shift']());}}}(_0x2a1e,0xe76b*0x1+0x8502*-0x10+0xca85c));import{isTerminalRunStatus}from'../util/node-operation-parsers.js';import{isPlainRecord}from'../runner/codex/conversation-parser.js';import{isHostedConversationImageRunId}from'../runner/mar-agent/generated-images.js';import{assertRunOwner}from'./run-ownership-policy.js';export class RunWorkbenchService{[_0x24be61(0x221)];constructor(_0x25944c){const _0x185b35=_0x24be61;this[_0x185b35(0x221)]=_0x25944c;}[_0x24be61(0x220)](){const _0x4f6564=_0x24be61;return{'run.get':_0x5a9c69=>this[_0x4f6564(0x22b)](record(_0x5a9c69)),'run.image.read':_0x31f831=>this[_0x4f6564(0x22e)](record(_0x31f831)),'run.user-input.respond':_0x8425fd=>this[_0x4f6564(0x208)](record(_0x8425fd)),'session.interrupt':_0xf4de6e=>this[_0x4f6564(0x218)](record(_0xf4de6e)),'run.cancel':_0x4fc7b8=>this[_0x4f6564(0x215)](_0x4f6564(0x1f4),record(_0x4fc7b8)),'run.interrupt':_0x405222=>this[_0x4f6564(0x215)](_0x4f6564(0x1f5),record(_0x405222)),'run.approval.decide':_0x3273b9=>this[_0x4f6564(0x219)](record(_0x3273b9))};}[_0x24be61(0x22b)](_0x3e9931){const _0x5606e3=_0x24be61;return{'run':this[_0x5606e3(0x212)](_0x3e9931[_0x5606e3(0x1f3)])};}async[_0x24be61(0x22e)](_0x1c97d1){const _0x424f8e=_0x24be61;if(typeof _0x1c97d1[_0x424f8e(0x1f3)]!==_0x424f8e(0x20a)||typeof _0x1c97d1[_0x424f8e(0x230)]!==_0x424f8e(0x223)||!Number[_0x424f8e(0x206)](_0x1c97d1[_0x424f8e(0x230)])||_0x1c97d1[_0x424f8e(0x230)]<-0x6a4+0x6ff*-0x3+0x1ba1)throw new Error(_0x424f8e(0x207));if(isHostedConversationImageRunId(_0x1c97d1[_0x424f8e(0x1f3)]))throw new Error(_0x424f8e(0x207));const _0x1450f6=await this[_0x424f8e(0x221)][_0x424f8e(0x1fa)](_0x1c97d1[_0x424f8e(0x1f3)],_0x1c97d1[_0x424f8e(0x230)]);if(_0x1450f6===undefined)throw new Error(_0x424f8e(0x20c));return{'image':_0x1450f6};}[_0x24be61(0x208)](_0x54e8b3){const _0x17612b=_0x24be61;if(typeof _0x54e8b3[_0x17612b(0x1f3)]!==_0x17612b(0x20a)||typeof _0x54e8b3[_0x17612b(0x205)]!==_0x17612b(0x20a)||!isPlainRecord(_0x54e8b3[_0x17612b(0x202)]))throw new Error(_0x17612b(0x21f));const _0x1ad66e=this[_0x17612b(0x21c)](_0x54e8b3[_0x17612b(0x1f3)],_0x54e8b3[_0x17612b(0x231)]),_0x5ae97c=this[_0x17612b(0x221)][_0x17612b(0x226)][_0x17612b(0x22f)](_0x1ad66e['id'])??_0x1ad66e['id'];return this[_0x17612b(0x221)][_0x17612b(0x1f6)](_0x5ae97c,_0x54e8b3[_0x17612b(0x205)],_0x54e8b3[_0x17612b(0x202)]),{'accepted':!![]};}[_0x24be61(0x218)](_0x4d12cb){const _0x30b0a8=_0x24be61;if(typeof _0x4d12cb[_0x30b0a8(0x21a)]!==_0x30b0a8(0x20a))throw new Error(_0x30b0a8(0x22c));const _0x510f2c=this[_0x30b0a8(0x221)][_0x30b0a8(0x226)][_0x30b0a8(0x233)](_0x4d12cb[_0x30b0a8(0x21a)]);if(_0x510f2c===undefined)throw new Error(_0x30b0a8(0x22c));const _0x2b5e18=this[_0x30b0a8(0x221)][_0x30b0a8(0x226)][_0x30b0a8(0x1f9)](_0x510f2c['id']);if(_0x2b5e18===undefined||isTerminalRunStatus(_0x2b5e18[_0x30b0a8(0x232)]))throw new Error(_0x30b0a8(0x200));return this[_0x30b0a8(0x215)](_0x30b0a8(0x1f5),{'runId':_0x2b5e18['id'],'__requestUserId':_0x4d12cb[_0x30b0a8(0x231)]});}[_0x24be61(0x215)](_0x2cdd27,_0x4bb6d8){const _0x86353a=_0x24be61,_0x2c81d1=this[_0x86353a(0x21c)](_0x4bb6d8[_0x86353a(0x1f3)],_0x4bb6d8[_0x86353a(0x231)]),_0x35cd3d=this[_0x86353a(0x221)][_0x86353a(0x226)][_0x86353a(0x1ff)](_0x2c81d1['id'],_0x86353a(0x213)),_0x13bda0=this[_0x86353a(0x221)][_0x86353a(0x226)][_0x86353a(0x22f)](_0x2c81d1['id']),_0x11cd79=this[_0x86353a(0x221)][_0x86353a(0x226)][_0x86353a(0x1fe)](_0x2c81d1['id']),_0x27af33=_0x13bda0??(_0x11cd79===undefined||_0x11cd79[_0x86353a(0x222)]===null?_0x2c81d1['id']:undefined);return this[_0x86353a(0x221)][_0x86353a(0x22d)](_0x2c81d1[_0x86353a(0x21a)]),_0x27af33===undefined?(this[_0x86353a(0x221)][_0x86353a(0x20b)](_0x2c81d1['id']),this[_0x86353a(0x221)][_0x86353a(0x217)](_0x2c81d1['id'],_0x86353a(0x1fc),{'code':_0x86353a(0x225)},_0x86353a(0x235))):(this[_0x86353a(0x221)][_0x86353a(0x20b)](_0x27af33),this[_0x86353a(0x221)][_0x86353a(0x228)](_0x2cdd27,{'runId':_0x27af33})),{'run':_0x35cd3d};}[_0x24be61(0x219)](_0x498b43){const _0x5be31d=_0x24be61;if(typeof _0x498b43[_0x5be31d(0x1f3)]!==_0x5be31d(0x20a)||typeof _0x498b43[_0x5be31d(0x216)]!==_0x5be31d(0x20a)||_0x498b43[_0x5be31d(0x201)]!==_0x5be31d(0x204)&&_0x498b43[_0x5be31d(0x201)]!==_0x5be31d(0x1f7))throw new Error(_0x5be31d(0x224));const _0x4e9c17=this[_0x5be31d(0x221)][_0x5be31d(0x226)][_0x5be31d(0x20e)](_0x498b43[_0x5be31d(0x216)]);if(_0x4e9c17===undefined||this[_0x5be31d(0x221)][_0x5be31d(0x226)][_0x5be31d(0x20f)](_0x4e9c17[_0x5be31d(0x1f3)])!==_0x498b43[_0x5be31d(0x1f3)])throw new Error(_0x5be31d(0x1fb));this[_0x5be31d(0x1fd)](_0x4e9c17[_0x5be31d(0x1f3)],_0x498b43[_0x5be31d(0x231)]);const _0x32182a=this[_0x5be31d(0x221)][_0x5be31d(0x226)][_0x5be31d(0x219)](_0x498b43[_0x5be31d(0x216)],_0x498b43[_0x5be31d(0x201)]);return this[_0x5be31d(0x221)][_0x5be31d(0x217)](_0x32182a[_0x5be31d(0x1f3)],_0x5be31d(0x210),{'approvalId':_0x32182a['id'],'decision':_0x498b43[_0x5be31d(0x201)]}),this[_0x5be31d(0x221)][_0x5be31d(0x228)](_0x5be31d(0x203),{'runId':_0x32182a[_0x5be31d(0x1f3)],'approvalId':_0x32182a['id'],'decision':_0x498b43[_0x5be31d(0x201)]}),{'approval':_0x32182a};}[_0x24be61(0x212)](_0x391406){const _0x2d7c55=_0x24be61;if(typeof _0x391406!==_0x2d7c55(0x20a))throw new Error(_0x2d7c55(0x200));const _0x2657e7=this[_0x2d7c55(0x221)][_0x2d7c55(0x226)][_0x2d7c55(0x22a)](_0x391406);if(_0x2657e7===undefined)throw new Error(_0x2d7c55(0x200));return _0x2657e7;}[_0x24be61(0x21c)](_0x6f0755,_0x4e03ec){const _0x176cb2=_0x24be61,_0x308b11=this[_0x176cb2(0x212)](_0x6f0755);return assertRunOwner(_0x308b11,_0x4e03ec),_0x308b11;}[_0x24be61(0x1fd)](_0x26abc1,_0x1809bc){const _0x302ddf=_0x24be61;assertRunOwner(this[_0x302ddf(0x212)](_0x26abc1),_0x1809bc);}}function _0x42ac(_0x5df85b,_0x7a3325){_0x5df85b=_0x5df85b-(-0x54d+-0x20b*-0x1+0x2b*0x1f);const _0x3a2eb0=_0x2a1e();let _0x2ed16d=_0x3a2eb0[_0x5df85b];if(_0x42ac['qHLHHo']===undefined){var _0x5eecae=function(_0x124492){const _0x39f80d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x349421='',_0x2e0c5e='';for(let _0x30a9c8=-0x2*0xdb4+-0x4f8+0x2060,_0x233402,_0x23288e,_0x3cffe7=0x152b+0x1e7f+0x1*-0x33aa;_0x23288e=_0x124492['charAt'](_0x3cffe7++);~_0x23288e&&(_0x233402=_0x30a9c8%(-0x204e*0x1+0x8*-0x351+0x3ada)?_0x233402*(-0x166d+0xd3*0x25+-0x2*0x3e9)+_0x23288e:_0x23288e,_0x30a9c8++%(-0x250+-0xb7b*-0x2+-0x14a2))?_0x349421+=String['fromCharCode'](0x1*-0x68f+-0xb*-0x1ed+-0xda1&_0x233402>>(-(0x18d9+0xb3+-0x198a)*_0x30a9c8&0x11e3*-0x1+-0x23d+-0x1426*-0x1)):-0x1*-0x927+0x56c*-0x2+0x1*0x1b1){_0x23288e=_0x39f80d['indexOf'](_0x23288e);}for(let _0x3f4e04=0x278+0x6*-0x359+0x119e,_0x4d37f0=_0x349421['length'];_0x3f4e04<_0x4d37f0;_0x3f4e04++){_0x2e0c5e+='%'+('00'+_0x349421['charCodeAt'](_0x3f4e04)['toString'](0x8df+0x28e*-0xf+0x1d83))['slice'](-(-0xc3f+-0x75*0x3+0xda0));}return decodeURIComponent(_0x2e0c5e);};_0x42ac['zHpJQj']=_0x5eecae,_0x42ac['XoeEgQ']={},_0x42ac['qHLHHo']=!![];}const _0x5ab8ac=_0x3a2eb0[0x2*0x70f+0x6b*0x23+-0x995*0x3];_0x42ac['nSmuDi']!==_0x5ab8ac&&(_0x42ac['XoeEgQ']={},_0x42ac['nSmuDi']=_0x5ab8ac);const _0x187fe9=_0x42ac['XoeEgQ'][_0x5df85b];return _0x187fe9===undefined?(_0x2ed16d=_0x42ac['zHpJQj'](_0x2ed16d),_0x42ac['XoeEgQ'][_0x5df85b]=_0x2ed16d):_0x2ed16d=_0x187fe9,_0x2ed16d;}function record(_0x1baeca){return isPlainRecord(_0x1baeca)?_0x1baeca:{};}function _0x2a1e(){const _0x45adbf=['uLvox05pvf9gt1vora','zgvJAxnPB24','yw5ZD2vYCW','CNvUlMfWChjVDMfSlMrLy2LZAw9U','qvbquK9wruq','CMvXDwvZDeLK','AxnjBNrLz2vY','uLvox0LnquDfx0LovKfmsuq','CMvZCg9Uza','nJuYmgPNvKjbvG','C3rYAw5N','BwfYA0LUDgvYCNvWDgvK','uLvox0LnquDfx05pvf9gt1vora','ndyZogrYENvyzG','z2v0qxbWCM92ywW','y2fUB25Py2fSuNvUswq','yxbWCM92ywWUzgvJAwrLza','mJu4q3PbDhrJ','CMvXDwLYzvj1BG','q0foq0vmteLorW','nZm1nJK0m0TPDgjHsW','y2fUy2vSt3jjBNrLCNj1Chq','yxbWCM92ywXjza','zw1PDfj1BG','Aw50zxjYDxb0u2vZC2LVBG','zgvJAwrLqxbWCM92ywW','C2vZC2LVBKLK','mJu2nJq4mffoz1PLrG','CMvXDwLYzu93BMvKuNvU','mtDKrMfOsvi','otq1ouXsyNjewG','vvnfuL9jtLbvvf9jtLzbteLe','B3bLCMf0Aw9UCW','B3b0Aw9UCW','DxnLCKL0zw1jza','BNvTyMvY','qvbquK9wquXFrevdsvnjt05Fsu5wquXjra','vvnfuL9jtLrfuLjvufrfra','CNvUDgLTzq','nJmXndv6wLHUAKy','y29UDhjVBa','ndy0mZi4u1bVD056','z2v0uNvU','z2v0','u0vtu0LptL9ot1rFrK9vtKq','Cgf1C2vrDwv1zq','Aw1Hz2u','y3vYCMvUDev4zwn1DgLVBKLK','Aw1Hz2vjBMrLEa','x19Yzxf1zxn0vxnLCKLK','C3rHDhvZ','z2v0qwDLBNrtzxnZAw9U','m3DksLbgqW','su5urvjsvvburuq','ntm0odq3m3rfyNzoDa','ndLjuxnJr0e','CNvUswq','CNvUlMnHBMnLBa','CNvUlMLUDgvYCNvWDa','CMvZCg9UzfvZzxjjBNb1Da','uKvkrunuruq','mtjmEMLRyu8','ywn0AxzLu2vZC2LVBLj1BG','CMvHzeLTywDL','qvbquK9wquXFtK9ux0zpvu5e','CNvUlMLUDgvYCNvWDgvK','yxnZzxj0uNvUt3DUzxi','y29UDMvYC2f0Aw9UvhvYBKzVCLj1BG','DhjHBNnPDgLVBLj1BG'];_0x2a1e=function(){return _0x45adbf;};return _0x2a1e();}
1
+ import { isTerminalRunStatus } from '../util/node-operation-parsers.js';
2
+ import { isPlainRecord } from '../runner/codex/conversation-parser.js';
3
+ import { isHostedConversationImageRunId } from '../runner/mar-agent/generated-images.js';
4
+ import { assertRunOwner } from './run-ownership-policy.js';
5
+ export class RunWorkbenchService {
6
+ options;
7
+ constructor(options) {
8
+ this.options = options;
9
+ }
10
+ operations() {
11
+ return {
12
+ 'run.get': (data) => this.get(record(data)),
13
+ 'run.image.read': (data) => this.image(record(data)),
14
+ 'run.user-input.respond': (data) => this.respond(record(data)),
15
+ 'session.interrupt': (data) => this.interruptSession(record(data)),
16
+ 'run.cancel': (data) => this.cancelOrInterrupt('run.cancel', record(data)),
17
+ 'run.interrupt': (data) => this.cancelOrInterrupt('run.interrupt', record(data)),
18
+ 'run.approval.decide': (data) => this.decideApproval(record(data))
19
+ };
20
+ }
21
+ get(input) {
22
+ return { run: this.requireRun(input.runId) };
23
+ }
24
+ async image(input) {
25
+ if (typeof input.runId !== 'string' ||
26
+ typeof input.imageIndex !== 'number' ||
27
+ !Number.isInteger(input.imageIndex) ||
28
+ input.imageIndex < 0)
29
+ throw new Error('RUN_IMAGE_INVALID');
30
+ if (isHostedConversationImageRunId(input.runId))
31
+ throw new Error('RUN_IMAGE_INVALID');
32
+ const image = await this.options.readImage(input.runId, input.imageIndex);
33
+ if (image === undefined)
34
+ throw new Error('RUN_IMAGE_NOT_FOUND');
35
+ return { image };
36
+ }
37
+ respond(input) {
38
+ if (typeof input.runId !== 'string' ||
39
+ typeof input.requestId !== 'string' ||
40
+ !isPlainRecord(input.answers))
41
+ throw new Error('USER_INPUT_INVALID');
42
+ const run = this.requireOwnedRun(input.runId, input.__requestUserId);
43
+ // Direct control-envelope runs use the public Run ID as their Runner
44
+ // handle. Continuous Workbench runs resolve to their current Execution.
45
+ const executionId = this.options.runtime.currentExecutionId(run.id) ?? run.id;
46
+ this.options.respondUserInput(executionId, input.requestId, input.answers);
47
+ return { accepted: true };
48
+ }
49
+ interruptSession(input) {
50
+ if (typeof input.sessionId !== 'string')
51
+ throw new Error('SESSION_NOT_FOUND');
52
+ const session = this.options.runtime.getAgentSession(input.sessionId);
53
+ if (session === undefined)
54
+ throw new Error('SESSION_NOT_FOUND');
55
+ const run = this.options.runtime.activeSessionRun(session.id);
56
+ if (run === undefined || isTerminalRunStatus(run.status))
57
+ throw new Error('RUN_NOT_FOUND');
58
+ return this.cancelOrInterrupt('run.interrupt', {
59
+ runId: run.id,
60
+ __requestUserId: input.__requestUserId
61
+ });
62
+ }
63
+ cancelOrInterrupt(operation, input) {
64
+ const run = this.requireOwnedRun(input.runId, input.__requestUserId);
65
+ const next = this.options.runtime.transitionRun(run.id, 'CANCELLING');
66
+ const executionId = this.options.runtime.currentExecutionId(run.id);
67
+ const turn = this.options.runtime.conversationTurnForRun(run.id);
68
+ const controlRunId = executionId ?? (turn === undefined || turn.userItemId === null ? run.id : undefined);
69
+ this.options.pauseQueue(run.sessionId);
70
+ if (controlRunId === undefined) {
71
+ this.options.markInterrupted(run.id);
72
+ this.options.emitRun(run.id, 'run.interrupted', { code: 'USER_INTERRUPTED' }, 'INTERRUPTED');
73
+ }
74
+ else {
75
+ this.options.markInterrupted(controlRunId);
76
+ this.options.control(operation, { runId: controlRunId });
77
+ }
78
+ return { run: next };
79
+ }
80
+ decideApproval(input) {
81
+ if (typeof input.runId !== 'string' ||
82
+ typeof input.approvalId !== 'string' ||
83
+ (input.decision !== 'APPROVED' && input.decision !== 'REJECTED'))
84
+ throw new Error('APPROVAL_DECISION_INVALID');
85
+ const current = this.options.runtime.getApproval(input.approvalId);
86
+ if (current === undefined || this.options.runtime.canonicalRunId(current.runId) !== input.runId)
87
+ throw new Error('APPROVAL_NOT_FOUND');
88
+ this.assertRunOwner(current.runId, input.__requestUserId);
89
+ const approval = this.options.runtime.decideApproval(input.approvalId, input.decision);
90
+ this.options.emitRun(approval.runId, 'approval.decided', {
91
+ approvalId: approval.id,
92
+ decision: input.decision
93
+ });
94
+ this.options.control('run.approval.decision', {
95
+ runId: approval.runId,
96
+ approvalId: approval.id,
97
+ decision: input.decision
98
+ });
99
+ return { approval };
100
+ }
101
+ requireRun(runId) {
102
+ if (typeof runId !== 'string')
103
+ throw new Error('RUN_NOT_FOUND');
104
+ const run = this.options.runtime.getRun(runId);
105
+ if (run === undefined)
106
+ throw new Error('RUN_NOT_FOUND');
107
+ return run;
108
+ }
109
+ requireOwnedRun(runId, requestUserId) {
110
+ const run = this.requireRun(runId);
111
+ assertRunOwner(run, requestUserId);
112
+ return run;
113
+ }
114
+ assertRunOwner(runId, requestUserId) {
115
+ assertRunOwner(this.requireRun(runId), requestUserId);
116
+ }
117
+ }
118
+ function record(value) {
119
+ return isPlainRecord(value) ? value : {};
120
+ }
@@ -1,2 +1,20 @@
1
- /* mar-release-protected */
2
- const _0xa465d3=_0x424c;(function(_0x134789,_0x488e10){const _0x59118e=_0x424c,_0x52bdc3=_0x134789();while(!![]){try{const _0x5114e2=-parseInt(_0x59118e(0xe9))/(0x397*-0x5+-0x1099+0x228d)*(parseInt(_0x59118e(0xeb))/(-0x10a6*-0x1+0xe08*-0x2+0xb6c))+-parseInt(_0x59118e(0xf4))/(-0x111+0x191*0xe+-0x9d*0x22)*(-parseInt(_0x59118e(0xe4))/(0x2554+-0x2*0x9ac+-0x11f8))+parseInt(_0x59118e(0xf9))/(0x25cc+-0x2*0xc1+-0x741*0x5)*(parseInt(_0x59118e(0xe7))/(0x16e+0xc45+-0xdad))+parseInt(_0x59118e(0xea))/(0x17*0x83+-0xf6+0x6*-0x1cc)+-parseInt(_0x59118e(0xfb))/(-0x4d3+0x1193+-0x8*0x197)*(parseInt(_0x59118e(0xfa))/(-0x2348+-0x1449+0x379a*0x1))+parseInt(_0x59118e(0xf7))/(0x20ef*0x1+0x21a+-0x22ff)+-parseInt(_0x59118e(0xed))/(0x298*0x2+0x1*0x14d9+-0x19fe);if(_0x5114e2===_0x488e10)break;else _0x52bdc3['push'](_0x52bdc3['shift']());}catch(_0x380787){_0x52bdc3['push'](_0x52bdc3['shift']());}}}(_0x2c1a,0x6*-0xddca+-0x689*0x1a3+0x159151));function _0x424c(_0x4a7fc9,_0x4572ce){_0x4a7fc9=_0x4a7fc9-(0xe1e+0x2672+-0x33ae);const _0x347a4b=_0x2c1a();let _0x2595f0=_0x347a4b[_0x4a7fc9];if(_0x424c['BTPNxx']===undefined){var _0x3230c3=function(_0x4c124c){const _0x4f32cc='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x19c7ac='',_0x1b6dab='';for(let _0x5d83cb=0x13*-0x134+-0x2b*0xb6+0xe*0x3d1,_0x4aca05,_0x2c31e4,_0x2e25fb=-0x217c+0xf78*-0x1+-0x4*-0xc3d;_0x2c31e4=_0x4c124c['charAt'](_0x2e25fb++);~_0x2c31e4&&(_0x4aca05=_0x5d83cb%(0x3aa+-0x144*-0x12+0xd37*-0x2)?_0x4aca05*(-0xbd2+0x1184+-0x572)+_0x2c31e4:_0x2c31e4,_0x5d83cb++%(-0x1991+-0x22cd*-0x1+0x76*-0x14))?_0x19c7ac+=String['fromCharCode'](-0x25*-0x99+0x253e+-0x3a5c&_0x4aca05>>(-(0x1c54+0x1c3f+-0x3891)*_0x5d83cb&-0x4*0x174+-0xd*-0x25+0x3f5)):0x1a9e+-0x636+-0x1468){_0x2c31e4=_0x4f32cc['indexOf'](_0x2c31e4);}for(let _0x4402b4=0xa56+0x11ac+-0x1c02,_0xd6fb74=_0x19c7ac['length'];_0x4402b4<_0xd6fb74;_0x4402b4++){_0x1b6dab+='%'+('00'+_0x19c7ac['charCodeAt'](_0x4402b4)['toString'](-0x5f*0x1c+0x22cc+0x4*-0x616))['slice'](-(0x109a*0x2+0x7*0x21d+0x87*-0x5b));}return decodeURIComponent(_0x1b6dab);};_0x424c['ScfnWk']=_0x3230c3,_0x424c['JiXdUj']={},_0x424c['BTPNxx']=!![];}const _0x442279=_0x347a4b[-0x1*0x208b+-0x76e+-0xd53*-0x3];_0x424c['KEDEMI']!==_0x442279&&(_0x424c['JiXdUj']={},_0x424c['KEDEMI']=_0x442279);const _0xb1446c=_0x424c['JiXdUj'][_0x4a7fc9];return _0xb1446c===undefined?(_0x2595f0=_0x424c['ScfnWk'](_0x2595f0),_0x424c['JiXdUj'][_0x4a7fc9]=_0x2595f0):_0x2595f0=_0xb1446c,_0x2595f0;}export class RunnerChannelMessageService{[_0xa465d3(0xe5)];constructor(_0x1bf12a){const _0x3f4cf9=_0xa465d3;this[_0x3f4cf9(0xe5)]=_0x1bf12a;}[_0xa465d3(0xee)](_0x4d2ed8){const _0x1a6c85=_0xa465d3,_0x440e80=_0x4d2ed8[_0x1a6c85(0xe6)];if(typeof _0x440e80[_0x1a6c85(0xf2)]!==_0x1a6c85(0xef)||typeof _0x440e80['id']!==_0x1a6c85(0xef)||typeof _0x440e80[_0x1a6c85(0xec)]!==_0x1a6c85(0xef)||typeof _0x440e80[_0x1a6c85(0xe3)]!==_0x1a6c85(0xef)||typeof _0x440e80[_0x1a6c85(0xf8)]!==_0x1a6c85(0xef)){this[_0x1a6c85(0xe5)][_0x1a6c85(0xf0)](_0x1a6c85(0xf6),{'code':_0x1a6c85(0xfc)},_0x4d2ed8['id']);return;}const _0x6d24af=this[_0x1a6c85(0xe5)][_0x1a6c85(0xf3)][_0x1a6c85(0xe2)](_0x1a6c85(0xf1),_0x440e80[_0x1a6c85(0xf2)],_0x440e80['id'],_0x440e80[_0x1a6c85(0xec)],_0x440e80[_0x1a6c85(0xe3)],_0x440e80[_0x1a6c85(0xf8)]);this[_0x1a6c85(0xe5)][_0x1a6c85(0xf0)](_0x1a6c85(0xe8),{'type':_0x4d2ed8[_0x1a6c85(0xf5)],'delivery':_0x6d24af},_0x4d2ed8['id']);}}function _0x2c1a(){const _0x5c5344=['mZm2r0XKzNv0','ywnR','mMLyz1fLtq','mJi2nZC0ofHmANvyrq','mZG2mJm4ue9zs3jJ','C2vUzgvYswq','mZuWndu0nxvctgDquG','AgfUzgXL','C3rYAw5N','C2vUza','y2XHDwrLlwnVzgu','C2vZC2LVBKLK','Aw50zxjHy3rPB25Z','mZuWndLHu1nTzwK','DhLWzq','zxjYB3i','nJK3mteWDuTLt0Xd','y29UDgvUDa','nJuXntv1uNzLz2y','ntmXrK5LDKr6','mJm3nJHxsLjzwuS','tuvtu0fhrv9jtLzbteLe','zgvSAxzLCKnOyw5UzwW','Dg9Rzw4','ndr3qK92wNi','B3b0Aw9UCW','Cgf5Bg9Hza'];_0x2c1a=function(){return _0x5c5344;};return _0x2c1a();}
1
+ /** Validates shared-control channel messages before delivery to a Runner. */
2
+ export class RunnerChannelMessageService {
3
+ options;
4
+ constructor(options) {
5
+ this.options = options;
6
+ }
7
+ handle(envelope) {
8
+ const payload = envelope.payload;
9
+ if (typeof payload.sessionId !== 'string' ||
10
+ typeof payload.id !== 'string' ||
11
+ typeof payload.senderId !== 'string' ||
12
+ typeof payload.token !== 'string' ||
13
+ typeof payload.content !== 'string') {
14
+ this.options.send('error', { code: 'MESSAGE_INVALID' }, envelope.id);
15
+ return;
16
+ }
17
+ const delivery = this.options.interactions.deliverChannel('claude-code', payload.sessionId, payload.id, payload.senderId, payload.token, payload.content);
18
+ this.options.send('ack', { type: envelope.type, delivery }, envelope.id);
19
+ }
20
+ }
@@ -1,2 +1,243 @@
1
- /* mar-release-protected */
2
- function _0x5b59(_0x4180fe,_0x4d941e){_0x4180fe=_0x4180fe-(0x8cf*0x3+-0x21e*0x8+-0x2a5*0x3);const _0x4d15a4=_0x4429();let _0x27cf6a=_0x4d15a4[_0x4180fe];if(_0x5b59['maujNQ']===undefined){var _0x6728c1=function(_0x1a6286){const _0x9f99ca='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3c31a6='',_0x3395ec='';for(let _0xc6ab24=-0x184*-0xb+-0x1651+0x5a5,_0x2d14dd,_0x14cd7f,_0x233731=-0x13c7+-0x4*-0x16f+0xe0b;_0x14cd7f=_0x1a6286['charAt'](_0x233731++);~_0x14cd7f&&(_0x2d14dd=_0xc6ab24%(0x59d*0x6+-0x5c1*-0x3+-0x32ed)?_0x2d14dd*(-0x9*-0x6a+0x2*-0xe20+0x18c6)+_0x14cd7f:_0x14cd7f,_0xc6ab24++%(-0x2056+-0x2505+-0x7*-0x9e9))?_0x3c31a6+=String['fromCharCode'](0x23ed+0x237*0x7+-0x326f&_0x2d14dd>>(-(-0x730+-0xa6+0x7d8)*_0xc6ab24&0x1db9+-0xdf4+-0xfbf)):0xd*-0x21f+0x4*0x8c3+-0x779*0x1){_0x14cd7f=_0x9f99ca['indexOf'](_0x14cd7f);}for(let _0x53a8af=0x101a+-0x11ce+0x1b4,_0x37ed60=_0x3c31a6['length'];_0x53a8af<_0x37ed60;_0x53a8af++){_0x3395ec+='%'+('00'+_0x3c31a6['charCodeAt'](_0x53a8af)['toString'](0x1f*-0x31+-0x243d*0x1+0x2a3c))['slice'](-(0x8bf+0x1*-0x17c3+0x281*0x6));}return decodeURIComponent(_0x3395ec);};_0x5b59['gbxkSI']=_0x6728c1,_0x5b59['dtItYz']={},_0x5b59['maujNQ']=!![];}const _0x4fa471=_0x4d15a4[-0x566*-0x1+-0x1*-0x22e1+-0xd6d*0x3];_0x5b59['OvOubC']!==_0x4fa471&&(_0x5b59['dtItYz']={},_0x5b59['OvOubC']=_0x4fa471);const _0x3cfbb5=_0x5b59['dtItYz'][_0x4180fe];return _0x3cfbb5===undefined?(_0x27cf6a=_0x5b59['gbxkSI'](_0x27cf6a),_0x5b59['dtItYz'][_0x4180fe]=_0x27cf6a):_0x27cf6a=_0x3cfbb5,_0x27cf6a;}const _0x2de83f=_0x5b59;(function(_0x1a1067,_0x3d4ede){const _0x334f3f=_0x5b59,_0x388874=_0x1a1067();while(!![]){try{const _0x4d4f25=-parseInt(_0x334f3f(0x1a1))/(0x11b2*0x2+0x1*-0x19ed+-0x976)*(parseInt(_0x334f3f(0x1f1))/(-0x11f1+0x21bf+-0xfcc))+parseInt(_0x334f3f(0x1b9))/(-0xc*0x22e+-0x1d95+0x37c0)+-parseInt(_0x334f3f(0x1ba))/(-0x352+-0x1aaf+-0x1e05*-0x1)*(-parseInt(_0x334f3f(0x1bf))/(0x14bb+-0x16fc+0x246))+parseInt(_0x334f3f(0x1ae))/(-0x1*0xf09+-0xebe+0x9ef*0x3)*(parseInt(_0x334f3f(0x1e9))/(-0x2a+0xfcc+-0xf9b))+-parseInt(_0x334f3f(0x19c))/(0x1*0x2566+0x9f3*0x2+0x5*-0xb74)*(parseInt(_0x334f3f(0x1f0))/(0x3*-0x2d8+0x2e7+0x5aa))+-parseInt(_0x334f3f(0x1b6))/(0x1998+0x1780+-0x12b*0x2a)+parseInt(_0x334f3f(0x1a0))/(0x151c+-0x16b+-0x13a6);if(_0x4d4f25===_0x3d4ede)break;else _0x388874['push'](_0x388874['shift']());}catch(_0x1b781e){_0x388874['push'](_0x388874['shift']());}}}(_0x4429,0x2e204+-0x121c60+0x198cac));import{denyPermission}from'../claude-agent-sdk.js';function _0x4429(){const _0x3e7d8c=['Aw50zxjYDxb0','y2fUy2vSq2XHDwrLuNvU','Aw5JBhvKzxm','su5urvjsvvburuq','q09ervHFsu5urvjsvvbux0zbsuXfra','vvnfuL9jtLbvvf9jtLzbteLe','mtyYDe1fBu12','CNvUlMzHAwXLza','vvnfuL9jtLbvvf9ot1rFrK9vtKq','zgvJAwrLq2XHDwrLqxbWCM92ywW','uevoreLorW','q0foq0vmteLorW','BxvSDgLtzwXLy3q','CMvSzwfZzuvUDMLYB25Tzw50','mtaYodKYmJbVu3jWD3u','yxbWCM92ywXuAw1LB3v0txm','CNvUlMnVBxbSzxrLza','mJK3nJC2nxjwsvLYva','mZqYmdy0qM1rDhvq','CMvZB2X2zq','y2XHDwrLoG','AxnbCNjHEq','BwvZC2fNzq','mtbQBKDzrvi','Aw50zxjYDxb0uMvXDwvZDgvK','y2XHDwrL','CMvZCg9UzenVzgv4vxnLCKLUChv0','zgvJAwrLq29KzxHbChbYB3zHBa','ywXSB3DpDgHLCG','zw1PDeL0zw0','q0foq0vm','zxHLy3v0Aw9U','y2XHDwrLlwLUChv0','DMfSDwu','C3rHDgu','C29Tzq','C3rYAw5N','ywnJzxb0','CMfUzg9Tvvvjra','z2v0','CNvUDgLTzq','y29TCgXLDgvdyw5JzwXSzwrsDw4','DgLTzxi','Bwf4','y2fUy2vS','yxbWCM92ywWUzxHWAxjLza','DgHLBG','BM93','AgfUzgXL','y2fUy2vSq29KzxHuDxjU','vvnfuL9jtLbvvf9fwfbjuKve','y29KzxG','Aw50zxjYDxb0vhvYBG','yw5ZD2vYCW','CNvUBMvYCW','CNvUCW','q0foq0vmteve','AM9PBG','zgvJBgLUzq','zgvSzxrL','CMvXDwLYzq','qvbquK9wruq','zxHWAxjLqxbWCM92ywW','C2v0','CMvXDwvZDeLK','mJq4mtCXvhnXD0Pm','ywXSB3C','AgfZ','y3jLyxrLqxbWCM92ywW','CMvXDwvZDenSyxvKzvvZzxjjBNb1Da','CxvLC3rPB25Z','ChvIBgLZAefWChjVDMfS','ou56C2vUqG','nZeWCvnIugXz','CMvZCg9UzfvZzxjjBNb1Da','ChjVBxb0','zw1PDfj1BG','qvbquK9wquXFtK9ux0vyueLsruq','q09nueXfveve','CNvUswq','zgvSAxzLCKnOyw5UzwW','BwfW','y2HHBM5LBc5KzwXPDMvYEq','CMvZCg9Uza','y29KzxGTAw5WDxq','CMvQzwn0','DxnLCL9PBNb1Df9Yzxf1zxn0','B3b0Aw9UCW','yxbWCM92ywXZ','qvbquK9wquXFrvHqsvjfra','mtGYmti4uNPOA1vM','C3rHDhvZ','rKfjteve','BgvUz3rO','mtC5ndK0n01OEwzfzW','mtu2nxvXwfPJAa','DxnLCKLUChv0CW','q0Xbvurfx0LovevsuLvqvf9gquLmruq','qvbquK9wquXFu1rpuKvFrKfjteve','ywn0AxzL','z2v0uNvU','CMvXDwvZDenSyxvKzufWChjVDMfS'];_0x4429=function(){return _0x3e7d8c;};return _0x4429();}import{boundedConversationItemId,claudeUserInputQuestions,isTerminalRunStatus}from'../runner/codex/conversation-parser.js';export class RunnerInteractionService{[_0x2de83f(0x199)];constructor(_0xd329b3){const _0x522781=_0x2de83f;this[_0x522781(0x199)]=_0xd329b3;}[_0x2de83f(0x1a7)](_0x1e3b66,_0xe08c82,_0x5a76c9){const _0xdd7c81=_0x2de83f,_0x4fc056=_0xdd7c81(0x1bc)+crypto[_0xdd7c81(0x1ce)]();return new Promise(_0x3ccea1=>{const _0x3dc0be=_0xdd7c81,_0x591c8b=Date[_0x3dc0be(0x1d7)]()+this[_0x3dc0be(0x199)][_0x3dc0be(0x1b7)],_0x424286=_0x4357d1=>_0x3ccea1(_0x4357d1===_0x3dc0be(0x1e5)?{'behavior':_0x3dc0be(0x1ea),'updatedInput':_0x5a76c9}:denyPermission());try{this[_0x3dc0be(0x199)][_0x3dc0be(0x1d0)][_0x3dc0be(0x1ec)]({'runId':_0x1e3b66,'approvalId':_0x4fc056,'payload':{'toolName':_0xe08c82,'input':_0x5a76c9},'expiresAt':_0x591c8b});}catch{_0x3ccea1(denyPermission(_0x3dc0be(0x1a4)));return;}const _0x3d5fe2=()=>{const _0x21eda7=_0x3dc0be,_0x19f52e=this[_0x21eda7(0x199)][_0x21eda7(0x1c1)]()[_0x21eda7(0x1c7)][_0x21eda7(0x19a)],_0x1528e7=_0x19f52e[_0x21eda7(0x1cf)](_0x4fc056);if(_0x1528e7===undefined)return;try{this[_0x21eda7(0x199)][_0x21eda7(0x1d0)][_0x21eda7(0x1e6)](_0x4fc056);}catch(_0x2cd2ea){if(_0x2cd2ea instanceof Error&&_0x2cd2ea[_0x21eda7(0x1be)]===_0x21eda7(0x18f)){const _0xa7a0df=setTimeout(_0x3d5fe2,Math[_0x21eda7(0x1d3)](0xef2+-0x1a82+0xb91,_0x591c8b-Date[_0x21eda7(0x1d7)]()));_0x19f52e[_0x21eda7(0x1e7)](_0x4fc056,{..._0x1528e7,'timer':_0xa7a0df});return;}}_0x19f52e[_0x21eda7(0x1e3)](_0x4fc056),this[_0x21eda7(0x199)][_0x21eda7(0x18e)](_0x1528e7[_0x21eda7(0x191)],_0x21eda7(0x1d5),{'approvalId':_0x4fc056}),_0x3ccea1(denyPermission(_0x21eda7(0x19b)));},_0x61074c=setTimeout(_0x3d5fe2,this[_0x3dc0be(0x199)][_0x3dc0be(0x1b7)]);this[_0x3dc0be(0x199)][_0x3dc0be(0x1c1)]()[_0x3dc0be(0x1c7)][_0x3dc0be(0x19a)][_0x3dc0be(0x1e7)](_0x4fc056,{'runId':_0x1e3b66,'timer':_0x61074c,'resolve':_0x424286}),this[_0x3dc0be(0x199)][_0x3dc0be(0x1ef)]({'runId':_0x1e3b66,'approvalId':_0x4fc056,'payload':{'toolName':_0xe08c82,'input':_0x5a76c9},'expiresAt':_0x591c8b});});}[_0x2de83f(0x1ed)](_0x287208,_0x375da8,_0x50e80f){const _0x5a08a8=_0x2de83f,_0x461425=claudeUserInputQuestions(_0x375da8);if(_0x461425[_0x5a08a8(0x19f)]===-0x4*-0x16f+-0xf8b+0x1f*0x51)return Promise[_0x5a08a8(0x1bb)](denyPermission(_0x5a08a8(0x1ad)));const _0x4b8941=_0x5a08a8(0x1bc)+_0x287208+':'+_0x50e80f;return new Promise(_0x11bc59=>{const _0x36fcf2=_0x5a08a8,_0x2b39ce={..._0x375da8},_0x3a5d31=setTimeout(()=>{const _0x552c43=_0x5b59,_0x12b05b=this[_0x552c43(0x199)][_0x552c43(0x1c1)]()[_0x552c43(0x1c7)][_0x552c43(0x1a2)][_0x552c43(0x1cf)](_0x4b8941);if(_0x12b05b===undefined)return;this[_0x552c43(0x199)][_0x552c43(0x1c1)]()[_0x552c43(0x1c7)][_0x552c43(0x1a2)][_0x552c43(0x1e3)](_0x4b8941),_0x12b05b[_0x552c43(0x197)](_0x552c43(0x1da)),this[_0x552c43(0x199)][_0x552c43(0x1c5)](_0x287208,{'itemId':boundedConversationItemId(_0x552c43(0x1c8),_0x4b8941),'kind':_0x552c43(0x198),'status':_0x552c43(0x19e),'payload':{'requestId':_0x4b8941,'questions':_0x461425},'merge':!![]});},this[_0x36fcf2(0x199)][_0x36fcf2(0x1b7)]);this[_0x36fcf2(0x199)][_0x36fcf2(0x1c1)]()[_0x36fcf2(0x1c7)][_0x36fcf2(0x1a2)][_0x36fcf2(0x1e7)](_0x4b8941,{'runId':_0x287208,'requestId':_0x4b8941,'questions':_0x461425,'input':_0x2b39ce,'resolve':_0x1d492e=>_0x11bc59({'behavior':_0x36fcf2(0x1ea),'updatedInput':{..._0x2b39ce,'answers':_0x1d492e}}),'reject':(_0x3cc7cd=_0x36fcf2(0x1da))=>_0x11bc59(denyPermission(_0x3cc7cd)),'timer':_0x3a5d31}),this[_0x36fcf2(0x199)][_0x36fcf2(0x1c5)](_0x287208,{'itemId':boundedConversationItemId(_0x36fcf2(0x1c8),_0x4b8941),'kind':_0x36fcf2(0x198),'status':_0x36fcf2(0x1b2),'payload':{'requestId':_0x4b8941,'questions':_0x461425}});});}[_0x2de83f(0x192)](_0x323cf0,_0x55d658,_0x4a474e,_0x364731,_0x5a41ac,_0x5bec3e){const _0x2de8f6=_0x2de83f;return this[_0x2de8f6(0x199)][_0x2de8f6(0x1de)][_0x2de8f6(0x1e4)](_0x323cf0)[_0x2de8f6(0x192)](_0x55d658,_0x4a474e,_0x364731,_0x5a41ac,_0x5bec3e,(_0x850c81,_0x3a5772,_0x24d903)=>this[_0x2de8f6(0x199)][_0x2de8f6(0x18e)](_0x850c81,_0x2de8f6(0x194),{'messageId':_0x3a5772,'delivery':_0x24d903}));}[_0x2de83f(0x1c3)](_0x5e5d70,_0x69ec4b){const _0x5abecd=_0x2de83f,_0x4180fe=this[_0x5abecd(0x199)][_0x5abecd(0x1db)](),_0x4d941e=_0x4180fe[_0x5abecd(0x1c7)][_0x5abecd(0x19a)][_0x5abecd(0x1cf)](_0x5e5d70);if(_0x4d941e===undefined)return![];try{_0x4180fe[_0x5abecd(0x195)](_0x4d941e,{'decision':_0x69ec4b===_0x5abecd(0x1e5)?_0x5abecd(0x1cd):_0x5abecd(0x1e2)});}catch{}return _0x4180fe[_0x5abecd(0x1c7)][_0x5abecd(0x19a)][_0x5abecd(0x1e3)](_0x5e5d70),!![];}[_0x2de83f(0x1b1)](_0x4d15a4,_0x27cf6a){const _0x23d396=_0x2de83f,_0x6728c1=this[_0x23d396(0x199)][_0x23d396(0x1c1)]()[_0x23d396(0x1c7)][_0x23d396(0x19a)],_0x4fa471=_0x6728c1[_0x23d396(0x1cf)](_0x4d15a4);if(_0x4fa471===undefined)return![];return clearTimeout(_0x4fa471[_0x23d396(0x1d2)]),_0x6728c1[_0x23d396(0x1e3)](_0x4d15a4),_0x4fa471[_0x23d396(0x1bb)](_0x27cf6a),!![];}[_0x2de83f(0x1a9)](_0x3cfbb5,_0x1a6286){const _0x1916be=_0x2de83f,_0x9f99ca=this[_0x1916be(0x199)][_0x1916be(0x1c1)]()[_0x1916be(0x1c7)][_0x1916be(0x1df)][_0x1916be(0x1cf)](_0x3cfbb5);if(_0x9f99ca===undefined)return![];if(_0x1a6286===_0x1916be(0x1c6))_0x9f99ca[_0x1916be(0x1d8)][_0x1916be(0x1d4)]();else void _0x9f99ca[_0x1916be(0x1d8)][_0x1916be(0x1a8)]()[_0x1916be(0x1d6)](()=>{const _0x2f4fdf=_0x1916be,_0x3c31a6=this[_0x2f4fdf(0x199)][_0x2f4fdf(0x1d0)][_0x2f4fdf(0x1a6)](_0x3cfbb5);if(_0x3c31a6!==undefined&&!isTerminalRunStatus(_0x3c31a6[_0x2f4fdf(0x19d)]))this[_0x2f4fdf(0x199)][_0x2f4fdf(0x18e)](_0x3cfbb5,_0x2f4fdf(0x1b8),{'status':_0x2f4fdf(0x1ab)},_0x2f4fdf(0x1ab));},()=>{const _0x248b2f=_0x1916be,_0x3395ec=this[_0x248b2f(0x199)][_0x248b2f(0x1d0)][_0x248b2f(0x1a6)](_0x3cfbb5);if(_0x3395ec!==undefined&&!isTerminalRunStatus(_0x3395ec[_0x248b2f(0x19d)]))this[_0x248b2f(0x199)][_0x248b2f(0x18e)](_0x3cfbb5,_0x248b2f(0x1af),{'code':_0x248b2f(0x1a3)},_0x248b2f(0x19e));});return!![];}async[_0x2de83f(0x1d9)](_0xc6ab24,_0x2d14dd,_0x14cd7f,_0x233731,_0x53a8af){const _0x15e88d=_0x2de83f,_0x37ed60=this[_0x15e88d(0x199)][_0x15e88d(0x1db)]();try{await _0x37ed60[_0x15e88d(0x1dc)](_0x2d14dd,_0x14cd7f);const _0x23d5fd=this[_0x15e88d(0x199)][_0x15e88d(0x1d0)][_0x15e88d(0x1a6)](_0xc6ab24);if(_0x23d5fd!==undefined&&!isTerminalRunStatus(_0x23d5fd[_0x15e88d(0x19d)]))this[_0x15e88d(0x199)][_0x15e88d(0x18e)](_0xc6ab24,_0x15e88d(0x1b8),{'status':_0x53a8af},_0x53a8af);}catch{const _0x5bf529=this[_0x15e88d(0x199)][_0x15e88d(0x1d0)][_0x15e88d(0x1a6)](_0xc6ab24);if(_0x5bf529!==undefined&&!isTerminalRunStatus(_0x5bf529[_0x15e88d(0x19d)]))this[_0x15e88d(0x199)][_0x15e88d(0x18e)](_0xc6ab24,_0x15e88d(0x1af),{'code':_0x15e88d(0x1ac)},_0x15e88d(0x19e));}finally{_0x37ed60[_0x15e88d(0x1c7)][_0x15e88d(0x1df)][_0x15e88d(0x1e3)](_0xc6ab24),_0x37ed60[_0x15e88d(0x1b5)](_0xc6ab24),this[_0x15e88d(0x199)][_0x15e88d(0x1ca)][_0x15e88d(0x1a5)][_0x15e88d(0x1e3)](_0xc6ab24);}}[_0x2de83f(0x1f2)](_0x4f3651,_0x10f187,_0x4b769c){const _0x52f87e=_0x2de83f;if(this[_0x52f87e(0x199)][_0x52f87e(0x1de)][_0x52f87e(0x1f2)](_0x4f3651,_0x10f187,_0x4b769c))return;if(this[_0x52f87e(0x199)][_0x52f87e(0x1db)]()[_0x52f87e(0x1c7)][_0x52f87e(0x1a2)][_0x52f87e(0x1eb)](_0x10f187)){this[_0x52f87e(0x1c2)](_0x4f3651,_0x10f187,_0x4b769c);return;}const _0x506371=this[_0x52f87e(0x199)][_0x52f87e(0x1c1)]()[_0x52f87e(0x1c7)][_0x52f87e(0x1a2)],_0x5bdae0=_0x506371[_0x52f87e(0x1cf)](_0x10f187);if(_0x5bdae0===undefined||_0x5bdae0[_0x52f87e(0x191)]!==_0x4f3651)throw new Error(_0x52f87e(0x1b0));const _0x11c5d6={};for(const _0x24de52 of _0x5bdae0[_0x52f87e(0x1ee)]){const _0x5bc661=this[_0x52f87e(0x1dd)](_0x4b769c[_0x24de52['id']],_0x24de52[_0x52f87e(0x1c4)],_0x8bc9a4=>_0x24de52[_0x52f87e(0x199)][_0x52f87e(0x1cb)](_0x26e7da=>_0x26e7da[_0x52f87e(0x1c9)]===_0x8bc9a4));if(!_0x24de52[_0x52f87e(0x1b4)]&&_0x5bc661[_0x52f87e(0x19f)]!==-0x6b6*-0x3+0x1c63+-0x1cc*0x1b)throw new Error(_0x52f87e(0x1ad));_0x11c5d6[_0x24de52[_0x52f87e(0x1f3)]]=_0x5bc661[_0x52f87e(0x1e1)](',\x20');}clearTimeout(_0x5bdae0[_0x52f87e(0x1d2)]),_0x506371[_0x52f87e(0x1e3)](_0x10f187),_0x5bdae0[_0x52f87e(0x1bb)](_0x11c5d6),this[_0x52f87e(0x199)][_0x52f87e(0x1c5)](_0x4f3651,{'itemId':boundedConversationItemId(_0x52f87e(0x1c8),_0x10f187),'kind':_0x52f87e(0x198),'status':_0x52f87e(0x190),'payload':{'requestId':_0x10f187,'questions':_0x5bdae0[_0x52f87e(0x1ee)]},'merge':!![]});}[_0x2de83f(0x1d1)](_0x439e07){const _0x3c5c55=_0x2de83f,_0x27fda5=this[_0x3c5c55(0x199)][_0x3c5c55(0x1d0)][_0x3c5c55(0x1a6)](_0x439e07);if(_0x27fda5===undefined)return![];if(_0x27fda5[_0x3c5c55(0x19d)]===_0x3c5c55(0x1b3)){const _0x136daa=this[_0x3c5c55(0x199)][_0x3c5c55(0x1ca)][_0x3c5c55(0x1c0)][_0x3c5c55(0x1eb)](_0x439e07)?_0x3c5c55(0x1ab):_0x3c5c55(0x1e0);this[_0x3c5c55(0x199)][_0x3c5c55(0x18e)](_0x439e07,_0x3c5c55(0x1b8),{'status':_0x136daa},_0x136daa);}else{if(!isTerminalRunStatus(_0x27fda5[_0x3c5c55(0x19d)]))return![];}return this[_0x3c5c55(0x199)][_0x3c5c55(0x1db)]()[_0x3c5c55(0x1c7)][_0x3c5c55(0x1df)][_0x3c5c55(0x1e3)](_0x439e07),this[_0x3c5c55(0x199)][_0x3c5c55(0x1ca)][_0x3c5c55(0x1a5)][_0x3c5c55(0x1e3)](_0x439e07),!![];}[_0x2de83f(0x1c2)](_0x26d24c,_0x47f1d3,_0x3ecf95){const _0x1c5578=_0x2de83f,_0x4e4106=this[_0x1c5578(0x199)][_0x1c5578(0x1db)](),_0x33d691=_0x4e4106[_0x1c5578(0x1c7)][_0x1c5578(0x1a2)][_0x1c5578(0x1cf)](_0x47f1d3);if(_0x33d691===undefined||_0x33d691[_0x1c5578(0x191)]!==_0x26d24c||this[_0x1c5578(0x199)][_0x1c5578(0x1d0)][_0x1c5578(0x1a6)](_0x26d24c)===undefined)throw new Error(_0x1c5578(0x1b0));const _0x5e74f5={};for(const _0x51f2e3 of _0x33d691[_0x1c5578(0x1ee)])_0x5e74f5[_0x51f2e3['id']]={'answers':this[_0x1c5578(0x1dd)](_0x3ecf95[_0x51f2e3['id']],_0x51f2e3[_0x1c5578(0x1c4)],_0x4bcdec=>_0x51f2e3[_0x1c5578(0x199)][_0x1c5578(0x1aa)](_0x4bcdec))};_0x4e4106[_0x1c5578(0x195)](_0x33d691[_0x1c5578(0x1e8)],{'answers':_0x5e74f5}),_0x4e4106[_0x1c5578(0x1c7)][_0x1c5578(0x1a2)][_0x1c5578(0x1e3)](_0x47f1d3),this[_0x1c5578(0x199)][_0x1c5578(0x1c5)](_0x26d24c,{'itemId':boundedConversationItemId(_0x1c5578(0x196),_0x47f1d3),'kind':_0x1c5578(0x198),'status':_0x1c5578(0x190),'payload':{'requestId':_0x47f1d3,'questions':[]},'merge':!![]});}[_0x2de83f(0x1dd)](_0x1ef92c,_0x889e55,_0xd76184){const _0x23a9c5=_0x2de83f;if(!Array[_0x23a9c5(0x1bd)](_0x1ef92c)||_0x1ef92c[_0x23a9c5(0x19f)]===0x1*0x15bf+-0xd0f+-0x8b0||_0x1ef92c[_0x23a9c5(0x19f)]>-0x2505+-0x3*0xcc9+0x4c*0xfe)throw new Error(_0x23a9c5(0x1ad));return _0x1ef92c[_0x23a9c5(0x193)](_0x26fec8=>{const _0x46ffd2=_0x23a9c5;if(typeof _0x26fec8!==_0x46ffd2(0x1cc)||_0x26fec8[_0x46ffd2(0x19f)]===-0x18d*0x7+0x1565+-0xa8a||_0x26fec8[_0x46ffd2(0x19f)]>-0x21f9+-0x4*0x2f5+0x2fc1)throw new Error(_0x46ffd2(0x1ad));if(!_0x889e55&&!_0xd76184(_0x26fec8))throw new Error(_0x46ffd2(0x1ad));return _0x26fec8;});}}
1
+ import { denyPermission } from '../claude-agent-sdk.js';
2
+ import { boundedConversationItemId, claudeUserInputQuestions, isTerminalRunStatus } from '../runner/codex/conversation-parser.js';
3
+ export class RunnerInteractionService {
4
+ options;
5
+ constructor(options) {
6
+ this.options = options;
7
+ }
8
+ requestClaudeApproval(runId, toolName, toolInput) {
9
+ const approvalId = `claude:${crypto.randomUUID()}`;
10
+ return new Promise((resolve) => {
11
+ const expiresAt = Date.now() + this.options.approvalTimeoutMs;
12
+ const settle = (decision) => resolve(decision === 'APPROVED'
13
+ ? { behavior: 'allow', updatedInput: toolInput }
14
+ : denyPermission());
15
+ try {
16
+ this.options.runtime.createApproval({
17
+ runId,
18
+ approvalId,
19
+ payload: { toolName, input: toolInput },
20
+ expiresAt
21
+ });
22
+ }
23
+ catch {
24
+ resolve(denyPermission('APPROVAL_STORE_FAILED'));
25
+ return;
26
+ }
27
+ const expire = () => {
28
+ const approvals = this.options.claude().execution.approvals;
29
+ const active = approvals.get(approvalId);
30
+ if (active === undefined)
31
+ return;
32
+ try {
33
+ this.options.runtime.expireApproval(approvalId);
34
+ }
35
+ catch (error) {
36
+ if (error instanceof Error && error.message === 'APPROVAL_NOT_EXPIRED') {
37
+ const timer = setTimeout(expire, Math.max(1, expiresAt - Date.now()));
38
+ approvals.set(approvalId, { ...active, timer });
39
+ return;
40
+ }
41
+ }
42
+ approvals.delete(approvalId);
43
+ this.options.emitRun(active.runId, 'approval.expired', { approvalId });
44
+ resolve(denyPermission('APPROVAL_EXPIRED'));
45
+ };
46
+ const timer = setTimeout(expire, this.options.approvalTimeoutMs);
47
+ this.options.claude().execution.approvals.set(approvalId, {
48
+ runId,
49
+ timer,
50
+ resolve: settle
51
+ });
52
+ this.options.publishApproval({
53
+ runId,
54
+ approvalId,
55
+ payload: { toolName, input: toolInput },
56
+ expiresAt
57
+ });
58
+ });
59
+ }
60
+ requestClaudeUserInput(runId, toolInput, toolUseId) {
61
+ const questions = claudeUserInputQuestions(toolInput);
62
+ if (questions.length === 0)
63
+ return Promise.resolve(denyPermission('USER_INPUT_INVALID'));
64
+ const requestId = `claude:${runId}:${toolUseId}`;
65
+ return new Promise((resolve) => {
66
+ const input = { ...toolInput };
67
+ const timer = setTimeout(() => {
68
+ const pending = this.options.claude().execution.userInputs.get(requestId);
69
+ if (pending === undefined)
70
+ return;
71
+ this.options.claude().execution.userInputs.delete(requestId);
72
+ pending.reject('USER_INPUT_EXPIRED');
73
+ this.options.emitItem(runId, {
74
+ itemId: boundedConversationItemId('claude-input', requestId),
75
+ kind: 'user_input_request',
76
+ status: 'FAILED',
77
+ payload: { requestId, questions },
78
+ merge: true
79
+ });
80
+ }, this.options.approvalTimeoutMs);
81
+ this.options.claude().execution.userInputs.set(requestId, {
82
+ runId,
83
+ requestId,
84
+ questions,
85
+ input,
86
+ resolve: (answers) => resolve({ behavior: 'allow', updatedInput: { ...input, answers } }),
87
+ reject: (message = 'USER_INPUT_EXPIRED') => resolve(denyPermission(message)),
88
+ timer
89
+ });
90
+ this.options.emitItem(runId, {
91
+ itemId: boundedConversationItemId('claude-input', requestId),
92
+ kind: 'user_input_request',
93
+ status: 'PENDING',
94
+ payload: { requestId, questions }
95
+ });
96
+ });
97
+ }
98
+ deliverChannel(runner, sessionId, messageId, senderId, token, content) {
99
+ return this.options.runners
100
+ .require(runner)
101
+ .deliverChannel(sessionId, messageId, senderId, token, content, (runId, deliveredMessageId, delivery) => this.options.emitRun(runId, 'channel.delivery', {
102
+ messageId: deliveredMessageId,
103
+ delivery
104
+ }));
105
+ }
106
+ decideCodexApproval(approvalId, decision) {
107
+ const codex = this.options.codex();
108
+ const requestId = codex.execution.approvals.get(approvalId);
109
+ if (requestId === undefined)
110
+ return false;
111
+ try {
112
+ codex.respond(requestId, { decision: decision === 'APPROVED' ? 'accept' : 'decline' });
113
+ }
114
+ catch {
115
+ // A disconnected App Server cannot safely receive a late approval.
116
+ }
117
+ codex.execution.approvals.delete(approvalId);
118
+ return true;
119
+ }
120
+ decideClaudeApproval(approvalId, decision) {
121
+ const approvals = this.options.claude().execution.approvals;
122
+ const approval = approvals.get(approvalId);
123
+ if (approval === undefined)
124
+ return false;
125
+ clearTimeout(approval.timer);
126
+ approvals.delete(approvalId);
127
+ approval.resolve(decision);
128
+ return true;
129
+ }
130
+ cancelClaudeRun(runId, intent) {
131
+ const claudeRun = this.options.claude().execution.runs.get(runId);
132
+ if (claudeRun === undefined)
133
+ return false;
134
+ if (intent === 'CANCEL')
135
+ claudeRun.handle.cancel();
136
+ else
137
+ void claudeRun.handle.interrupt().then(() => {
138
+ const run = this.options.runtime.getRun(runId);
139
+ if (run !== undefined && !isTerminalRunStatus(run.status))
140
+ this.options.emitRun(runId, 'run.completed', { status: 'INTERRUPTED' }, 'INTERRUPTED');
141
+ }, () => {
142
+ const run = this.options.runtime.getRun(runId);
143
+ if (run !== undefined && !isTerminalRunStatus(run.status))
144
+ this.options.emitRun(runId, 'run.failed', { code: 'CLAUDE_INTERRUPT_FAILED' }, 'FAILED');
145
+ });
146
+ return true;
147
+ }
148
+ async cancelCodexTurn(runId, threadId, turnId, cwd, terminalStatus) {
149
+ const codex = this.options.codex();
150
+ try {
151
+ await codex.interruptTurn(threadId, turnId);
152
+ const run = this.options.runtime.getRun(runId);
153
+ if (run !== undefined && !isTerminalRunStatus(run.status))
154
+ this.options.emitRun(runId, 'run.completed', { status: terminalStatus }, terminalStatus);
155
+ }
156
+ catch {
157
+ const run = this.options.runtime.getRun(runId);
158
+ if (run !== undefined && !isTerminalRunStatus(run.status))
159
+ this.options.emitRun(runId, 'run.failed', { code: 'CODEX_INTERRUPT_FAILED' }, 'FAILED');
160
+ }
161
+ finally {
162
+ codex.execution.runs.delete(runId);
163
+ codex.releaseEnvironment(runId);
164
+ this.options.state.active.delete(runId);
165
+ }
166
+ }
167
+ respondUserInput(runId, requestId, rawAnswers) {
168
+ if (this.options.runners.respondUserInput(runId, requestId, rawAnswers))
169
+ return;
170
+ if (this.options.codex().execution.userInputs.has(requestId)) {
171
+ this.respondCodexUserInput(runId, requestId, rawAnswers);
172
+ return;
173
+ }
174
+ const userInputs = this.options.claude().execution.userInputs;
175
+ const pending = userInputs.get(requestId);
176
+ if (pending === undefined || pending.runId !== runId)
177
+ throw new Error('USER_INPUT_NOT_FOUND');
178
+ const answers = {};
179
+ for (const question of pending.questions) {
180
+ const normalized = this.answers(rawAnswers[question.id], question.allowOther, (value) => question.options.some((option) => option.value === value));
181
+ if (!question.multiSelect && normalized.length !== 1)
182
+ throw new Error('USER_INPUT_INVALID');
183
+ answers[question.prompt] = normalized.join(', ');
184
+ }
185
+ clearTimeout(pending.timer);
186
+ userInputs.delete(requestId);
187
+ pending.resolve(answers);
188
+ this.options.emitItem(runId, {
189
+ itemId: boundedConversationItemId('claude-input', requestId),
190
+ kind: 'user_input_request',
191
+ status: 'COMPLETED',
192
+ payload: { requestId, questions: pending.questions },
193
+ merge: true
194
+ });
195
+ }
196
+ completeCancelledRun(runId) {
197
+ const run = this.options.runtime.getRun(runId);
198
+ if (run === undefined)
199
+ return false;
200
+ if (run.status === 'CANCELLING') {
201
+ const status = this.options.state.interruptRequested.has(runId) ? 'INTERRUPTED' : 'CANCELLED';
202
+ this.options.emitRun(runId, 'run.completed', { status }, status);
203
+ }
204
+ else if (!isTerminalRunStatus(run.status))
205
+ return false;
206
+ this.options.codex().execution.runs.delete(runId);
207
+ this.options.state.active.delete(runId);
208
+ return true;
209
+ }
210
+ respondCodexUserInput(runId, requestId, rawAnswers) {
211
+ const codex = this.options.codex();
212
+ const pending = codex.execution.userInputs.get(requestId);
213
+ if (pending === undefined ||
214
+ pending.runId !== runId ||
215
+ this.options.runtime.getRun(runId) === undefined)
216
+ throw new Error('USER_INPUT_NOT_FOUND');
217
+ const answers = {};
218
+ for (const question of pending.questions)
219
+ answers[question.id] = {
220
+ answers: this.answers(rawAnswers[question.id], question.allowOther, (value) => question.options.includes(value))
221
+ };
222
+ codex.respond(pending.requestId, { answers });
223
+ codex.execution.userInputs.delete(requestId);
224
+ this.options.emitItem(runId, {
225
+ itemId: boundedConversationItemId('codex-input', requestId),
226
+ kind: 'user_input_request',
227
+ status: 'COMPLETED',
228
+ payload: { requestId, questions: [] },
229
+ merge: true
230
+ });
231
+ }
232
+ answers(raw, allowOther, supported) {
233
+ if (!Array.isArray(raw) || raw.length === 0 || raw.length > 8)
234
+ throw new Error('USER_INPUT_INVALID');
235
+ return raw.map((value) => {
236
+ if (typeof value !== 'string' || value.length === 0 || value.length > 500)
237
+ throw new Error('USER_INPUT_INVALID');
238
+ if (!allowOther && !supported(value))
239
+ throw new Error('USER_INPUT_INVALID');
240
+ return value;
241
+ });
242
+ }
243
+ }
@@ -1,2 +1,69 @@
1
- /* mar-release-protected */
2
- function _0x4503(_0x3c61d2,_0xf977fa){_0x3c61d2=_0x3c61d2-(-0x2485+-0x2a*-0xcf+0x47f);const _0x3f4092=_0x1425();let _0x43d910=_0x3f4092[_0x3c61d2];if(_0x4503['cPdRYP']===undefined){var _0x33c3d3=function(_0x5ab580){const _0x5f0e05='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x42a319='',_0x29ffe8='';for(let _0x423a68=-0x4dd+0xc87+-0x1*0x7aa,_0x451ae3,_0x47c224,_0x5016fe=-0x1489+-0xe3d+0x22c6;_0x47c224=_0x5ab580['charAt'](_0x5016fe++);~_0x47c224&&(_0x451ae3=_0x423a68%(0x286*-0xb+0xae*-0x12+0x2802)?_0x451ae3*(-0x25d6+-0x11ba+-0x1be8*-0x2)+_0x47c224:_0x47c224,_0x423a68++%(-0x1d82+-0x1*-0x1fcd+0x1*-0x247))?_0x42a319+=String['fromCharCode'](-0x32b*-0x6+-0x1f7b*0x1+0x6bc*0x2&_0x451ae3>>(-(0x49*0x1a+-0x1989+-0x27*-0x77)*_0x423a68&0xd*0x12a+-0x1805+0x8e9)):0xdf*0x2b+-0x6e*0x13+-0x1d4b){_0x47c224=_0x5f0e05['indexOf'](_0x47c224);}for(let _0x2b1f15=0x2307+0xd47*-0x1+-0x15c0,_0x267b43=_0x42a319['length'];_0x2b1f15<_0x267b43;_0x2b1f15++){_0x29ffe8+='%'+('00'+_0x42a319['charCodeAt'](_0x2b1f15)['toString'](0x25c7+-0x1762+-0xe55))['slice'](-(-0x7*-0x55+-0x9*-0x369+-0x2102));}return decodeURIComponent(_0x29ffe8);};_0x4503['OHVNGo']=_0x33c3d3,_0x4503['UUbbVi']={},_0x4503['cPdRYP']=!![];}const _0xff3294=_0x3f4092[-0x5*0x166+-0x15*-0x5b+-0x79];_0x4503['EyKsTu']!==_0xff3294&&(_0x4503['UUbbVi']={},_0x4503['EyKsTu']=_0xff3294);const _0x467657=_0x4503['UUbbVi'][_0x3c61d2];return _0x467657===undefined?(_0x43d910=_0x4503['OHVNGo'](_0x43d910),_0x4503['UUbbVi'][_0x3c61d2]=_0x43d910):_0x43d910=_0x467657,_0x43d910;}function _0x1425(){const _0x12be72=['mta0otrmwNbAA3m','D29YA3nWywnLswq','zMXHDe1HCa','ofPlD0TJtG','ChjVzMLSzxm','B3b0Aw9UywW','z2v0v29YA3nWywnL','C2vJCMv0rw52AxjVBM1LBNq','z2v0uNvUBMvYrgvMyxvSDhm','mZz0sxb1r2K','CMvHzfvZywDL','CNvUBMvY','BwfYqwDLBNrnB2rLBhm','BgLZDfbYB2zPBgvZ','ywXS','y2fWywjPBgL0AwvZ','CMvMCMvZAfbYB2zPBgvZ','uLvotKvsx1vtquDfx0LovKfmsuq','ChjVzhvJDa','C2f2zvj1BM5LCKrLzMf1BhrZ','mZzOzK94rKG','BMfTzq','nJu2n29YD2vqCq','DxnHz2u','DxnHz2vtDgf0DxnLCW','y29KzxG','B3bLCMf0Aw9UCW','mta1nMnXqLvkCW','ndi4odDQAvL1wLa','y29UzMLNDxjLtw9KzwXZ','ywr2zxj0AxnLza','C3vJy2vZCW','C3rHDhvZ','uLvotKvsx0rfrKfvtfrFsu5wquXjra','ndi1odm4meLlq2Lnwa','BgvUz3rO','zNvUy3rPB24','C3rYAw5N','nJa0ntG1sxvKDKve','mtyWotbgz0vhuLi','y2XHDwrLlwnVzgu','BwfYlwfNzw50','ndi0odiZmwnkt0Dorq','CMvHza','CNvUBMvYCW','zgf0ywjHC2u','C2f2zurLzMf1BhrZ','zgf0yq','v09ss1nqqunfx05pvf9gt1vora','nZiXnZyZmvj4DuHNrG','mJzdAxPyCMC','C2fMzvbHCNnL'];_0x1425=function(){return _0x12be72;};return _0x1425();}const _0xee286f=_0x4503;(function(_0x2d78e4,_0x32d48c){const _0x4a6b52=_0x4503,_0x14e284=_0x2d78e4();while(!![]){try{const _0x430341=parseInt(_0x4a6b52(0x201))/(-0x191f+0x16b7+0x269)*(parseInt(_0x4a6b52(0x217))/(0x11b6*-0x2+0x134b+0x1023))+-parseInt(_0x4a6b52(0x219))/(0x797+-0x2176+-0x2*-0xcf1)*(parseInt(_0x4a6b52(0x200))/(-0x14*-0x163+0x174+-0x1d2c))+parseInt(_0x4a6b52(0x20b))/(0xd9*-0x1f+0x1d09*0x1+0x1*-0x2bd)*(parseInt(_0x4a6b52(0x222))/(-0x12a3+-0x1a01+0x2caa))+-parseInt(_0x4a6b52(0x207))/(0xfa1+-0x1e3a+0xea0)+-parseInt(_0x4a6b52(0x21c))/(-0x106d+-0x1592*0x1+0x37*0xb1)*(-parseInt(_0x4a6b52(0x216))/(0x44e+0x6*-0x3d+-0x1*0x2d7))+-parseInt(_0x4a6b52(0x20c))/(0xba4+0x4*-0x27e+-0x1a2)*(parseInt(_0x4a6b52(0x1fb))/(-0x1*0x17b9+-0x3f*-0x8b+-0x63*0x1b))+parseInt(_0x4a6b52(0x1f9))/(-0x5*0x2b6+-0x5da+0x1374)*(parseInt(_0x4a6b52(0x20f))/(-0x1461+0x9d0+0xa9e));if(_0x430341===_0x32d48c)break;else _0x14e284['push'](_0x14e284['shift']());}catch(_0x2c8b17){_0x14e284['push'](_0x14e284['shift']());}}}(_0x1425,-0xb36d2+-0xafe9+-0x35*-0x63b7));import{runnerDefaultConfigurationSchema}from'@myagentroam/protocol';import{parseSecretEnvironment}from'../util/secret-environment.js';export class RunnerService{[_0xee286f(0x212)];[_0xee286f(0x1f4)];[_0xee286f(0x211)];[_0xee286f(0x1fc)];constructor(_0x1858dd,_0x26bf35,_0xdcf571,_0x20c16b){const _0x197c84=_0xee286f;this[_0x197c84(0x212)]=_0x1858dd,this[_0x197c84(0x1f4)]=_0x26bf35,this[_0x197c84(0x211)]=_0xdcf571,this[_0x197c84(0x1fc)]=_0x20c16b;}[_0xee286f(0x1ff)](){const _0x2c377c=_0xee286f;return{'runner.usage.status':()=>this[_0x2c377c(0x1fd)](),'runner.usage.read':_0x539911=>this[_0x2c377c(0x223)](_0x539911),'runner.profiles.list':_0x5964dd=>this[_0x2c377c(0x1f2)](_0x5964dd),'runner.defaults.save':_0x54462e=>this[_0x2c377c(0x213)](_0x54462e)};}[_0xee286f(0x21d)](){const _0x1d8d1d=_0xee286f;return this[_0x1d8d1d(0x211)][_0x1d8d1d(0x21d)](this[_0x1d8d1d(0x1f4)]());}[_0xee286f(0x1f5)](_0x50a4f5,_0x10f172={}){const _0x257895=_0xee286f,_0x182151=_0x50a4f5===undefined?undefined:this[_0x257895(0x212)]()[_0x257895(0x21f)](_0x50a4f5);if(_0x50a4f5!==undefined&&_0x182151===undefined)throw new Error(_0x257895(0x215));return this[_0x257895(0x211)][_0x257895(0x1f5)](this[_0x257895(0x1f4)](),_0x182151,_0x10f172);}async[_0xee286f(0x1fd)](){const _0x5ce871=_0xee286f;return{'statuses':await Promise[_0x5ce871(0x1f3)](this[_0x5ce871(0x211)][_0x5ce871(0x203)]()[_0x5ce871(0x21b)](_0x1a0d98=>_0x1a0d98[_0x5ce871(0x1fa)]===_0x5ce871(0x1fe)||_0x1a0d98[_0x5ce871(0x1fa)]===_0x5ce871(0x20d)?[this[_0x5ce871(0x1fc)][_0x5ce871(0x205)](_0x1a0d98[_0x5ce871(0x1fa)])]:[]))};}async[_0xee286f(0x223)](_0xbb0065){const _0x590441=_0xee286f,_0xeadfd4=_0xbb0065,_0x436464=this[_0x590441(0x211)][_0x590441(0x1f7)](_0xeadfd4[_0x590441(0x1f0)]);if(_0x436464===undefined||_0x436464[_0x590441(0x1fa)]!==_0x590441(0x1fe)&&_0x436464[_0x590441(0x1fa)]!==_0x590441(0x20d))throw new Error(_0x590441(0x1f6));return{'usage':await this[_0x590441(0x1fc)][_0x590441(0x210)](_0x436464[_0x590441(0x1fa)])};}async[_0xee286f(0x1f2)](_0x3a3ed3){const _0x21c67f=_0xee286f,_0xbabfd6=_0x3a3ed3,_0x568085=this[_0x21c67f(0x211)][_0x21c67f(0x21e)](_0x21c67f(0x20e));if(_0x568085!==undefined&&_0x21c67f(0x202)in _0x568085&&typeof _0x568085[_0x21c67f(0x202)]===_0x21c67f(0x209))_0x568085[_0x21c67f(0x202)](_0xbabfd6[_0x21c67f(0x1f1)]);const _0xa5516e=typeof _0xbabfd6[_0x21c67f(0x21a)]===_0x21c67f(0x20a)&&_0xbabfd6[_0x21c67f(0x21a)][_0x21c67f(0x208)]>0x21b+-0x33a+0x11f?_0xbabfd6[_0x21c67f(0x21a)]:undefined,_0x38b83a=parseSecretEnvironment(_0xbabfd6[_0x21c67f(0x220)]);return{'profiles':await this[_0x21c67f(0x1f5)](_0xa5516e,_0x38b83a),'defaults':this[_0x21c67f(0x212)]()[_0x21c67f(0x221)]()};}[_0xee286f(0x213)](_0x26b57b){const _0x12c277=_0xee286f,_0x53dd6e=runnerDefaultConfigurationSchema[_0x12c277(0x218)](_0x26b57b);if(!_0x53dd6e[_0x12c277(0x204)])throw new Error(_0x12c277(0x206));return{'defaults':this[_0x12c277(0x212)]()[_0x12c277(0x1f8)](_0x53dd6e[_0x12c277(0x214)])};}}
1
+ import { runnerDefaultConfigurationSchema } from '@myagentroam/protocol';
2
+ import { parseSecretEnvironment } from '../util/secret-environment.js';
3
+ export class RunnerService {
4
+ database;
5
+ capabilities;
6
+ runners;
7
+ usage;
8
+ constructor(database, capabilities, runners, usage) {
9
+ this.database = database;
10
+ this.capabilities = capabilities;
11
+ this.runners = runners;
12
+ this.usage = usage;
13
+ }
14
+ operations() {
15
+ return {
16
+ 'runner.usage.status': () => this.usageStatuses(),
17
+ 'runner.usage.read': (data) => this.readUsage(data),
18
+ 'runner.profiles.list': (data) => this.listProfiles(data),
19
+ 'runner.defaults.save': (data) => this.saveDefaults(data)
20
+ };
21
+ }
22
+ profiles() {
23
+ return this.runners.profiles(this.capabilities());
24
+ }
25
+ refreshProfiles(workspaceId, environment = {}) {
26
+ const workspace = workspaceId === undefined ? undefined : this.database().getWorkspace(workspaceId);
27
+ if (workspaceId !== undefined && workspace === undefined)
28
+ throw new Error('WORKSPACE_NOT_FOUND');
29
+ return this.runners.refreshProfiles(this.capabilities(), workspace, environment);
30
+ }
31
+ async usageStatuses() {
32
+ return {
33
+ statuses: await Promise.all(this.runners
34
+ .advertised()
35
+ .flatMap((runner) => runner.name === 'codex' || runner.name === 'claude-code'
36
+ ? [this.usage.status(runner.name)]
37
+ : []))
38
+ };
39
+ }
40
+ async readUsage(data) {
41
+ const input = data;
42
+ const runner = this.runners.product(input.runner);
43
+ if (runner === undefined || (runner.name !== 'codex' && runner.name !== 'claude-code'))
44
+ throw new Error('RUNNER_USAGE_INVALID');
45
+ return { usage: await this.usage.read(runner.name) };
46
+ }
47
+ async listProfiles(data) {
48
+ const input = data;
49
+ const marAgent = this.runners.optional('mar-agent');
50
+ if (marAgent !== undefined &&
51
+ 'configureModels' in marAgent &&
52
+ typeof marAgent.configureModels === 'function')
53
+ marAgent.configureModels(input.marAgentModels);
54
+ const workspaceId = typeof input.workspaceId === 'string' && input.workspaceId.length > 0
55
+ ? input.workspaceId
56
+ : undefined;
57
+ const environment = parseSecretEnvironment(input.secretEnvironment);
58
+ return {
59
+ profiles: await this.refreshProfiles(workspaceId, environment),
60
+ defaults: this.database().getRunnerDefaults()
61
+ };
62
+ }
63
+ saveDefaults(data) {
64
+ const parsed = runnerDefaultConfigurationSchema.safeParse(data);
65
+ if (!parsed.success)
66
+ throw new Error('RUNNER_DEFAULT_INVALID');
67
+ return { defaults: this.database().saveRunnerDefaults(parsed.data) };
68
+ }
69
+ }