@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,494 @@
1
- /* mar-release-protected */
2
- function _0x3b3b(){const _0x356bd9=['Dg9VBf9JywXS','CMvXDwvZDa','l3bSyw4','tufsx01btKfhruq','DhvYBG','uLvotKvsx0nptu1btKrFvu5bvKfjtefcteu','u0HpuLrFvevyva','yxr0ywnOBwvUDhm','q09ervHFuLvox0zbsuXfra','C2v0q29TBwfUzfn0yxrL','rvHurvjoquXFveHsrufex09cu0vsvKvFt05mwq','AxnjBNrLz2vY','AxrLBs9Ty3buB29Sq2fSBc9WCM9NCMvZCW','C3rHCNruAhjLywq','CMvMCMvZAfrPDgXL','CNvUlMnVBxbSzxrLza','AxrLBs90B29Sl3jLCxvLC3rvC2vYsw5WDxq','rKfjteve','q0foq0vmteve','BwnWu2vYDMvYCW','CNvUBMvYlwvYCM9Y','CNvUlNn0yxj0zwq','C3rHCNruDxjU','ChjLCgfYzuvUDMLYB25Tzw50','BwfW','q09ervHFvu5bvKfjtefcteu','ChvIBgLZAefWChjVDMfS','CgfYyw1Z','CNvUu3rHDhvZ','BNvTyMvY','BgfIzwW','y29TCgXLDgvdyw5JzwXSzwq','C2vJCMv0rw52AxjVBM1LBNq','ywnJzxnZ','odi1BNrYBhfu','AxrLBs9ZDgfYDgvK','Bwv0Ag9K','CgXHBG','y2XLyxjdB21Tyw5Ku3rHDgu','AgfZ','BM93','nJK4DK1tEuDf','CMvJB3zLCK1PC3nPBMDsB2XSB3v0','u0Lor0Xfx1nftevdva','DgHYzwfKl2nVBxbHy3qVC3rHCNq','y29TBwfUzfn0yxrL','C2v0','CNvUlNjLAMvJDgvK','AxrLBs9JB21Tyw5KrxHLy3v0Aw9Ul3jLCxvLC3rbChbYB3zHBa','DxnLCL9PBNb1Df9Yzxf1zxn0','u1rbuLrjtKC','x21LDge','zw50CMLLCW','zgvZy3jPChrPB24','BwnWsw5ZDgfSBgf0Aw9UCW','zgvSDge','y29KzxG6','C3rYAw5N','y29TBwfUzfn0yxrLCW','C2vYDMLJzvrPzxi','otqXmJDWu0rwCvG','BMf0AxzLq29UDhjVBa','BwnWu2vYDMvYl2vSAwnPDgf0Aw9Ul3jLCxvLC3q','zw1PDeL0zw0','BgvUz3rO','CMv2zxjZzq','Bwf0zxjPywXPEMu','zw1PDa','B3b0Aw9UCW','AgfZqwn0AxzLu2vZC2LVBKXLyxnL','y29SBgfIB3jHDgLVBK1Vzgu','CNvUlNj1BM5PBMC','CMvSzwfZzuvUDMLYB25Tzw50','uevoreLorW','DgHYzwfKswq','u3vIC2vXDwvUDcbTzxnZywDLCYbYDw4GAw4Gy29SBgfIB3jHDgL2zsbqBgfUie1VzguU','u0vduKvux0vovKLst05nru5ux0LovKfmsuq','DMfSDwu','zwzMB3j0','CMfUzg9Tvvvjra','CNvUBMvY','ywXSB3DpDgHLCG','CMvXDwvZDeLK','y29TCgfJDa','y29TBwfUzf9LEgvJDxrPB24','CNvU','y29KzxG','zxHLy3v0Aw9U','Cgf5Bg9Hza','BxLHz2vUDhjVyw1FBwLZC2LVBG','ywXSB3DvBMjVDw5KrMfSBgjHy2S','zxHLy3v0zunVBw1HBMq','qvvutW','AxrLBs9MAwXLq2HHBMDLl3jLCxvLC3rbChbYB3zHBa','C2vJDgLVBNm','CNvUlMzHAwXLza','y29KzxHFyxbWCM92ywXFA2LUza','su5Fufjpr1jfu1m','DgHYzwfK','zxH0zxjUywXtzxnZAw9Uswq','yxzHAwXHyMXL','C3rHDhvZ','ywnJzxb0','CgfYC2vbDhrHy2HTzw50CW','ywrVChq','Dgv4Dc5KzwX0yq','q09ervHFq09nuefdvf9gquLmruq','AxrLBs9YzwfZB25PBMCVC3vTBwfYEvrLEhrezwX0yq','C3LUy1rPDgXL','ntu4nhnoEvreCa','DhvYBI9JB21WBgv0zwq','y3DK','su5urvjsvvburuq','zMfZDa','ndy5quH4BNDJ','z2v0','Ag9ZDa','zxjYB3i','zMLUywXSEq','zgvSzxrL','yxbWzw5Ksw1Hz2vZ','mteXmte1og9wAfzTrG','CMvZDw1LvgHYzwfK','C2vUza','DhvYBKLK','mty5mZzHBhvkue4','BgLZDenVBgXHyM9YyxrPB25nB2rLCW','Bw9Kzq','y3jLyxrLqxbWCM92ywW','mtKZote3nNzjwgvWua','CNvUswq','sw1WBgvTzw50ihrOzsbWBgfUigfIB3zLlG','yxbWCM92ywXZ','ChjVBxb0','BwvZC2fNzq','u1vdq0vfreve','CgvYC29UywXjBNn0CNvJDgLVBNm','zMLUza','Aw50zxjYDxb0zwq','C2vZC2LVBKLK','C2vYDMvYtMfTzq','C2vZC2LVBI5LEhrLCM5HBc1Pza','BwnWx3rVB2XFy2fSBa','BwnWu2vJCMv0rw52AxjVBM1LBNq','AxrLBs9Hz2vUDe1LC3nHz2uVzgvSDge','CMvHC29UAw5Nx3n1Bw1HCNK','zgvMyxvSDa','Bw9KzwW','AxrLBs9JB21WBgv0zwq','Dw5RBM93BG','AxrLBs9JB21Tyw5KrxHLy3v0Aw9Ul291Dhb1DerLBhrH','CMvXDwvZDefWChjVDMfS','AgfUzgXLtM90AwzPy2f0Aw9U','CMvZCg9Uza','uLvotKLorW','AxnbCNjHEq','CxvLC3rPB25Z','tuvtu0fhrv9bvfrbq0Hnru5uu19jtLzbteLe','CMvXDwvZDfvZzxjjBNb1Da','BwLZC2LVBK1JCa','CNvUCW','ywn0AxzL','zgf0yq','C29Tzq','y29KzxGTAw5WDxq','Aw5PDgLHDgvKqNLvC2vYswq','B3v0Chv0uhjLDMLLDW','y2fUy2vS','C2vZC2LVBG','sw1WBgvTzw50','y29TCgXLDgvK','C3rHCNq','DgL0BgvtB3vYy2u','BwfUywDLzfr1CM5Z','mti1nuXoqwzwuG','CMvTB3zLqwn0AxzL','zw1PDevYCM9Y','ntyZodq1mfncvxzgtq','Aw5WDxq','BwnWq29UzMLNDxjHDgLVBG','AxrLBq','C3vTBwfYEuLUzgv4','ugXHBIbnB2rL','Aw50zxjJzxb0zwq','AxrLBuLK','DxnLCKLUChv0CW','DhvYBI9ZDgfYDgvK','q0foq0vmteLorW','ChjVBw90zvnLC3nPB24','ywrKqwn0AxzL'];_0x3b3b=function(){return _0x356bd9;};return _0x3b3b();}const _0x2587d8=_0x213e;(function(_0x2bb1ee,_0x14e151){const _0x22ae8b=_0x213e,_0x1dd59a=_0x2bb1ee();while(!![]){try{const _0x3fdefe=-parseInt(_0x22ae8b(0x16d))/(-0x2fd*-0xd+0x1515+-0x3bed)+parseInt(_0x22ae8b(0x15a))/(-0x18d*0x15+0xc9*-0xd+0x8*0x559)*(-parseInt(_0x22ae8b(0x153))/(-0x24a+0x509*0x2+-0x33*0x27))+parseInt(_0x22ae8b(0x19e))/(-0x83*0xc+-0x1cc0+0x1*0x22e8)*(parseInt(_0x22ae8b(0x121))/(-0xfac+0x3f8*-0x3+0x1b99))+parseInt(_0x22ae8b(0x1b2))/(0x798+-0x15c5*0x1+-0x2d7*-0x5)+-parseInt(_0x22ae8b(0x1a3))/(-0x1f4d+-0x962*-0x4+-0x4*0x18d)*(-parseInt(_0x22ae8b(0x1ae))/(0x22*-0x13+0x75*-0x15+0xc27))+parseInt(_0x22ae8b(0x1aa))/(0x27*0xbc+-0x72e+0x156d*-0x1)+-parseInt(_0x22ae8b(0x124))/(0x1*0x616+-0x57f+0x2f*-0x3);if(_0x3fdefe===_0x14e151)break;else _0x1dd59a['push'](_0x1dd59a['shift']());}catch(_0x193b01){_0x1dd59a['push'](_0x1dd59a['shift']());}}}(_0x3b3b,-0x10dbf+-0xc55*0x23+0x58fd0));import{extractId}from'../../util/runner-native-session-parsers.js';import{parseSecretEnvironment}from'../../util/secret-environment.js';import{safeErrorCode}from'../../util/safe-error.js';import{runnerErrorProjection}from'../../util/runner-error.js';function _0x213e(_0x502b1b,_0x318cd9){_0x502b1b=_0x502b1b-(-0x7*0x1e2+0x1b59*-0x1+0x2986);const _0x1adeef=_0x3b3b();let _0x4ed63e=_0x1adeef[_0x502b1b];if(_0x213e['IkDHkV']===undefined){var _0x3015dc=function(_0x2751a2){const _0x53f3e2='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x70c035='',_0x52fd66='';for(let _0x1ebf5b=-0x17a1*-0x1+0x1591+0x1a*-0x1bd,_0x521584,_0x39a12c,_0x3e3a0e=-0x1879+0x2053+-0x7da;_0x39a12c=_0x2751a2['charAt'](_0x3e3a0e++);~_0x39a12c&&(_0x521584=_0x1ebf5b%(0xf1a+-0x1f7b+-0x577*-0x3)?_0x521584*(-0x1c7+0x445*-0x1+0x64c)+_0x39a12c:_0x39a12c,_0x1ebf5b++%(0x19f6+-0xaea*0x1+-0x1e1*0x8))?_0x70c035+=String['fromCharCode'](-0x1*-0x20ff+-0xb9*-0x2b+0x1*-0x3f13&_0x521584>>(-(0x143*-0x13+-0x19df+0x31da)*_0x1ebf5b&0x2313+-0x1a04+-0x909)):-0xe*0x1f9+-0xe09*-0x2+-0x2*0x3a){_0x39a12c=_0x53f3e2['indexOf'](_0x39a12c);}for(let _0x2bff61=0x123c+-0x115f*0x1+-0xd*0x11,_0x32b0fb=_0x70c035['length'];_0x2bff61<_0x32b0fb;_0x2bff61++){_0x52fd66+='%'+('00'+_0x70c035['charCodeAt'](_0x2bff61)['toString'](0x1*-0x23cf+-0x69d*-0x2+0x16a5))['slice'](-(0x2098*-0x1+0x2*0x5f8+0xa*0x211));}return decodeURIComponent(_0x52fd66);};_0x213e['LuDdqv']=_0x3015dc,_0x213e['bCQzUI']={},_0x213e['IkDHkV']=!![];}const _0x319cbc=_0x1adeef[0x2110+-0x23af+-0x29f*-0x1];_0x213e['tStJRY']!==_0x319cbc&&(_0x213e['bCQzUI']={},_0x213e['tStJRY']=_0x319cbc);const _0x36bb34=_0x213e['bCQzUI'][_0x502b1b];return _0x36bb34===undefined?(_0x4ed63e=_0x213e['LuDdqv'](_0x4ed63e),_0x213e['bCQzUI'][_0x502b1b]=_0x4ed63e):_0x4ed63e=_0x36bb34,_0x4ed63e;}import{boundedConversationItemId,codexImageAttachments,codexLiveConversationItem,codexUserInputQuestions,compactRunnerText,isPlainRecord}from'./conversation-parser.js';export function resolveCodexNotificationRun(_0x580a20,_0x42256f){const _0x3f133a=_0x213e,_0x26afea=[..._0x580a20[_0x3f133a(0x165)]()];if(_0x42256f[_0x3f133a(0x1ad)]!==undefined){const _0xbb7fdd=_0x26afea[_0x3f133a(0x1ba)](([,_0x41152f])=>_0x41152f[_0x3f133a(0x1ad)]===_0x42256f[_0x3f133a(0x1ad)]&&(_0x42256f[_0x3f133a(0x17b)]===undefined||_0x41152f[_0x3f133a(0x17b)]===_0x42256f[_0x3f133a(0x17b)]));if(_0xbb7fdd!==undefined)return _0xbb7fdd;if(_0x42256f[_0x3f133a(0x18b)]!==!![])return undefined;return _0x26afea[_0x3f133a(0x172)]()[_0x3f133a(0x1ba)](([,_0x7b8b5a])=>_0x7b8b5a[_0x3f133a(0x17b)]===_0x42256f[_0x3f133a(0x17b)]&&_0x7b8b5a[_0x3f133a(0x1ad)]===undefined);}if(_0x42256f[_0x3f133a(0x17b)]===undefined)return undefined;return _0x26afea[_0x3f133a(0x172)]()[_0x3f133a(0x1ba)](([,_0x502b1b])=>_0x502b1b[_0x3f133a(0x17b)]===_0x42256f[_0x3f133a(0x17b)]);}export class CodexManagedRunController{[_0x2587d8(0x181)];[_0x2587d8(0x1a5)];constructor(_0x318cd9,_0x1adeef){const _0x37d6ad=_0x2587d8;this[_0x37d6ad(0x181)]=_0x318cd9,this[_0x37d6ad(0x1a5)]=_0x1adeef;}async[_0x2587d8(0x18c)](_0x4ed63e,_0x3015dc,_0x319cbc,_0x36bb34){const _0x2e61fa=_0x2587d8;if(_0x3015dc['id']===_0x2e61fa(0x156)){const _0x53f3e2=crypto[_0x2e61fa(0x180)]();this[_0x2e61fa(0x181)][_0x2e61fa(0x148)](_0x36bb34[_0x2e61fa(0x151)],_0x53f3e2);let _0x70c035;try{await this[_0x2e61fa(0x181)][_0x2e61fa(0x11e)](),_0x70c035=await this[_0x2e61fa(0x181)][_0x2e61fa(0x1af)]();}finally{this[_0x2e61fa(0x181)][_0x2e61fa(0x179)](_0x53f3e2);}if(!isPlainRecord(_0x70c035)||!Array[_0x2e61fa(0x10e)](_0x70c035[_0x2e61fa(0x115)])||!_0x70c035[_0x2e61fa(0x115)][_0x2e61fa(0x116)](_0x1ebf5b=>isPlainRecord(_0x1ebf5b)&&_0x1ebf5b[_0x2e61fa(0x1b0)]===_0x2e61fa(0x156)))throw new Error(_0x2e61fa(0x136));const _0x52fd66=this[_0x2e61fa(0x1a5)][_0x2e61fa(0x15e)](_0x4ed63e['id'],_0x2e61fa(0x156));if(_0x52fd66?.[_0x2e61fa(0x114)])this[_0x2e61fa(0x1a5)][_0x2e61fa(0x157)](_0x4ed63e['id'],_0x2e61fa(0x156));else this[_0x2e61fa(0x1a5)][_0x2e61fa(0x13a)](_0x4ed63e['id'],{'commandId':_0x2e61fa(0x156),'active':!![],'label':_0x2e61fa(0x129),'detail':_0x2e61fa(0x17c),'closable':!![],'closeInput':_0x2e61fa(0x133),'continuation':{'label':_0x2e61fa(0x11c),'prompt':_0x2e61fa(0x1b4)}});return{'command':_0x3015dc['id'],'states':this[_0x2e61fa(0x1a5)][_0x2e61fa(0x16b)](_0x4ed63e['id'])};}const _0x2751a2=_0x4ed63e[_0x2e61fa(0x194)];if(_0x2751a2===null||_0x4ed63e[_0x2e61fa(0x16e)]!==_0x2e61fa(0x134))throw new Error(_0x2e61fa(0x136));if(_0x3015dc['id']===_0x2e61fa(0x184)){const _0x521584=crypto[_0x2e61fa(0x180)]();this[_0x2e61fa(0x181)][_0x2e61fa(0x148)](_0x36bb34[_0x2e61fa(0x151)],_0x521584);try{return await this[_0x2e61fa(0x181)][_0x2e61fa(0x11e)](),await this[_0x2e61fa(0x184)](_0x4ed63e,_0x2751a2,_0x521584,_0x36bb34[_0x2e61fa(0x118)]);}catch(_0x39a12c){this[_0x2e61fa(0x181)][_0x2e61fa(0x179)](_0x521584);throw _0x39a12c;}}if(_0x3015dc['id']===_0x2e61fa(0x1a2))return this[_0x2e61fa(0x1a5)][_0x2e61fa(0x1a2)](_0x319cbc);throw new Error(_0x2e61fa(0x136));}async[_0x2587d8(0x184)](_0x3e3a0e,_0x2bff61,_0x32b0fb,_0x2951db){const _0x5cd6d9=_0x2587d8;if(this[_0x5cd6d9(0x1a5)][_0x5cd6d9(0x176)](_0x3e3a0e['id']))throw new Error(_0x5cd6d9(0x136));this[_0x5cd6d9(0x1a5)][_0x5cd6d9(0x199)]({'runId':_0x32b0fb,'sessionId':_0x3e3a0e['id'],'runner':_0x5cd6d9(0x187),'cwd':_0x3e3a0e[_0x5cd6d9(0x1a0)],'externalSessionId':_0x2bff61,..._0x2951db===undefined?{}:{'initiatedByUserId':_0x2951db}}),this[_0x5cd6d9(0x1a5)][_0x5cd6d9(0x130)](_0x32b0fb),this[_0x5cd6d9(0x181)][_0x5cd6d9(0x188)][_0x5cd6d9(0x113)][_0x5cd6d9(0x15f)](_0x32b0fb,{'sessionId':_0x3e3a0e['id'],'threadId':_0x2bff61,'cwd':_0x3e3a0e[_0x5cd6d9(0x1a0)],'refreshTitle':![]}),this[_0x5cd6d9(0x1a5)][_0x5cd6d9(0x174)](_0x32b0fb,_0x5cd6d9(0x146),{'command':_0x5cd6d9(0x184)},_0x5cd6d9(0x163));try{return await this[_0x5cd6d9(0x181)][_0x5cd6d9(0x1ab)](_0x2bff61,_0x3e3a0e[_0x5cd6d9(0x1a0)]),await this[_0x5cd6d9(0x181)][_0x5cd6d9(0x132)](_0x5cd6d9(0x15d),{'threadId':_0x2bff61}),{'command':_0x5cd6d9(0x184),'run':this[_0x5cd6d9(0x1a5)][_0x5cd6d9(0x186)](_0x32b0fb),'states':this[_0x5cd6d9(0x1a5)][_0x5cd6d9(0x16b)](_0x3e3a0e['id'])};}catch(_0x55f189){this[_0x5cd6d9(0x123)](_0x32b0fb,_0x55f189,_0x5cd6d9(0x19b)),this[_0x5cd6d9(0x1a5)][_0x5cd6d9(0x174)](_0x32b0fb,_0x5cd6d9(0x190),runnerErrorProjection(_0x55f189,_0x5cd6d9(0x19b)),_0x5cd6d9(0x142)),this[_0x5cd6d9(0x181)][_0x5cd6d9(0x188)][_0x5cd6d9(0x113)][_0x5cd6d9(0x1a8)](_0x32b0fb),this[_0x5cd6d9(0x181)][_0x5cd6d9(0x179)](_0x32b0fb),this[_0x5cd6d9(0x1a5)][_0x5cd6d9(0x122)](_0x32b0fb);throw _0x55f189;}}[_0x2587d8(0x10b)](_0xd4bec0){const _0x1d8384=_0x2587d8,_0x256781=isPlainRecord(_0xd4bec0[_0x1d8384(0x14c)])?_0xd4bec0[_0x1d8384(0x14c)]:{},_0x3a7e90=isPlainRecord(_0x256781[_0x1d8384(0x135)])?_0x256781[_0x1d8384(0x135)]:undefined,_0x4e6905=typeof _0x256781[_0x1d8384(0x1ad)]===_0x1d8384(0x16a)?_0x256781[_0x1d8384(0x1ad)]:typeof _0x3a7e90?.['id']===_0x1d8384(0x16a)?_0x3a7e90['id']:undefined,_0x57aec6=typeof _0x256781[_0x1d8384(0x17b)]===_0x1d8384(0x16a)?_0x256781[_0x1d8384(0x17b)]:undefined;if(_0x4e6905===undefined&&_0x57aec6===undefined)return;const _0x48ab9a=resolveCodexNotificationRun(this[_0x1d8384(0x181)][_0x1d8384(0x188)][_0x1d8384(0x113)],{..._0x4e6905===undefined?{}:{'turnId':_0x4e6905},..._0x57aec6===undefined?{}:{'threadId':_0x57aec6},..._0xd4bec0[_0x1d8384(0x155)]===_0x1d8384(0x12d)?{'allowUnboundFallback':!![]}:{}});if(_0x48ab9a===undefined)return;const [_0x2a45c0,_0x14cc4d]=_0x48ab9a;if(_0xd4bec0[_0x1d8384(0x155)]===_0x1d8384(0x12d)&&_0x4e6905!==undefined){const _0x21df23=this[_0x1d8384(0x181)][_0x1d8384(0x188)][_0x1d8384(0x113)][_0x1d8384(0x1a4)](_0x2a45c0);if(_0x21df23!==undefined)this[_0x1d8384(0x181)][_0x1d8384(0x188)][_0x1d8384(0x113)][_0x1d8384(0x15f)](_0x2a45c0,{..._0x21df23,'turnId':_0x4e6905});this[_0x1d8384(0x1a5)][_0x1d8384(0x174)](_0x2a45c0,_0x1d8384(0x178),{'threadId':_0x57aec6,'turnId':_0x4e6905},_0x1d8384(0x10d));return;}if(_0xd4bec0[_0x1d8384(0x183)]!==undefined&&(_0xd4bec0[_0x1d8384(0x155)]===_0x1d8384(0x161)||_0xd4bec0[_0x1d8384(0x155)]===_0x1d8384(0x18e))){this[_0x1d8384(0x10a)](_0x2a45c0,{..._0xd4bec0,'requestId':_0xd4bec0[_0x1d8384(0x183)]});return;}if(_0xd4bec0[_0x1d8384(0x183)]!==undefined&&_0xd4bec0[_0x1d8384(0x155)]===_0x1d8384(0x141)){this[_0x1d8384(0x111)](_0x2a45c0,_0xd4bec0[_0x1d8384(0x183)],_0x256781);return;}if(_0xd4bec0[_0x1d8384(0x183)]!==undefined&&_0xd4bec0[_0x1d8384(0x155)]===_0x1d8384(0x16f)&&_0x14cc4d[_0x1d8384(0x112)]===!![]&&_0x256781[_0x1d8384(0xff)]===_0x1d8384(0x18a)&&isPlainRecord(_0x256781[_0x1d8384(0x164)])&&_0x256781[_0x1d8384(0x164)][_0x1d8384(0x191)]===_0x1d8384(0x101)){this[_0x1d8384(0x181)][_0x1d8384(0x10c)](_0xd4bec0[_0x1d8384(0x183)],{'action':_0x1d8384(0x197),'content':{},'_meta':null});return;}if(_0xd4bec0[_0x1d8384(0x155)]===_0x1d8384(0x103)&&typeof _0x256781[_0x1d8384(0x168)]===_0x1d8384(0x16a)){const _0x2597c2=typeof _0x256781[_0x1d8384(0x12b)]===_0x1d8384(0x16a)?boundedConversationItemId(_0x1d8384(0x187),_0x256781[_0x1d8384(0x12b)]):undefined;this[_0x1d8384(0x1a5)][_0x1d8384(0x174)](_0x2a45c0,_0x1d8384(0x19a),{'text':_0x256781[_0x1d8384(0x168)],..._0x2597c2===undefined?{}:{'itemId':_0x2597c2}});return;}if(_0xd4bec0[_0x1d8384(0x155)]===_0x1d8384(0x19c)&&typeof _0x256781[_0x1d8384(0x12b)]===_0x1d8384(0x16a)&&typeof _0x256781[_0x1d8384(0x168)]===_0x1d8384(0x16a)){const _0x574c11=typeof _0x256781[_0x1d8384(0x128)]===_0x1d8384(0x14e)&&Number[_0x1d8384(0x13c)](_0x256781[_0x1d8384(0x128)])?_0x256781[_0x1d8384(0x128)]:0x4*-0x89b+-0x208+-0x2474*-0x1;this[_0x1d8384(0x1a5)][_0x1d8384(0x170)](_0x2a45c0,{'itemId':boundedConversationItemId(_0x1d8384(0x187),_0x256781[_0x1d8384(0x12b)]),'kind':_0x1d8384(0x104),'status':_0x1d8384(0x192),'payload':{'sections':[{'index':_0x574c11,'text':compactRunnerText(_0x256781[_0x1d8384(0x168)],-0x3b77*0x1+-0x3569+0x97f0)}]},'merge':!![],'append':_0x1d8384(0x18f)});return;}if(_0xd4bec0[_0x1d8384(0x155)]===_0x1d8384(0x109)&&typeof _0x256781[_0x1d8384(0x12b)]===_0x1d8384(0x16a)&&typeof _0x256781[_0x1d8384(0x168)]===_0x1d8384(0x16a)){this[_0x1d8384(0x1a5)][_0x1d8384(0x170)](_0x2a45c0,{'itemId':boundedConversationItemId(_0x1d8384(0x187),_0x256781[_0x1d8384(0x12b)]),'kind':_0x1d8384(0x185),'status':_0x1d8384(0x192),'payload':{'outputPreview':compactRunnerText(_0x256781[_0x1d8384(0x168)],0x16ce+-0x293c+0x397e)},'merge':!![],'append':_0x1d8384(0x119)});return;}if(_0xd4bec0[_0x1d8384(0x155)]===_0x1d8384(0x13d)&&typeof _0x256781[_0x1d8384(0x12b)]===_0x1d8384(0x16a)&&typeof _0x256781[_0x1d8384(0x1b7)]===_0x1d8384(0x16a)){this[_0x1d8384(0x1a5)][_0x1d8384(0x170)](_0x2a45c0,{'itemId':boundedConversationItemId(_0x1d8384(0x187),_0x256781[_0x1d8384(0x12b)]),'kind':_0x1d8384(0x131),'status':_0x1d8384(0x192),'payload':{'progressLabel':compactRunnerText(_0x256781[_0x1d8384(0x1b7)],0x1775+-0x14*-0x1bd+-0x3845)},'merge':!![]});return;}if((_0xd4bec0[_0x1d8384(0x155)]===_0x1d8384(0x154)||_0xd4bec0[_0x1d8384(0x155)]===_0x1d8384(0x107))&&isPlainRecord(_0x256781[_0x1d8384(0x127)])){const _0x569549=this[_0x1d8384(0x1a5)][_0x1d8384(0x1a9)](_0x2a45c0,codexImageAttachments(_0x256781[_0x1d8384(0x127)])),_0x453499=codexLiveConversationItem(_0x256781[_0x1d8384(0x127)],_0xd4bec0[_0x1d8384(0x155)]===_0x1d8384(0x107),_0x569549);if(_0x453499!==undefined)this[_0x1d8384(0x1a5)][_0x1d8384(0x170)](_0x2a45c0,_0x453499);return;}if(_0xd4bec0[_0x1d8384(0x155)]===_0x1d8384(0x19f)){const _0x1407c4=_0x3a7e90?.[_0x1d8384(0x196)],_0x5d8c19=_0x1407c4===_0x1d8384(0x11d)?_0x1d8384(0x1b8):_0x1407c4===_0x1d8384(0x1bb)?_0x1d8384(0x1a1):_0x1d8384(0x142);if(_0x5d8c19===_0x1d8384(0x142))this[_0x1d8384(0x123)](_0x2a45c0,_0x3a7e90?.[_0x1d8384(0x1a6)]??_0x3a7e90,_0x1d8384(0x139));const _0x1d3ba3=_0x5d8c19===_0x1d8384(0x142)?runnerErrorProjection(_0x3a7e90?.[_0x1d8384(0x1a6)]??_0x3a7e90,_0x1d8384(0x139)):{'status':_0x1407c4??_0x1d8384(0x108)};this[_0x1d8384(0x1a5)][_0x1d8384(0x174)](_0x2a45c0,_0x5d8c19===_0x1d8384(0x142)?_0x1d8384(0x190):_0x1d8384(0x140),_0x1d3ba3,_0x5d8c19);const _0xc4e47f=this[_0x1d8384(0x181)][_0x1d8384(0x188)][_0x1d8384(0x113)][_0x1d8384(0x1a4)](_0x2a45c0),_0x5ba76d=_0xc4e47f===undefined||_0xc4e47f[_0x1d8384(0x13f)]===![]||this[_0x1d8384(0x1a5)][_0x1d8384(0x11b)](_0xc4e47f[_0x1d8384(0x1bc)])?.[_0x1d8384(0x11f)]!==_0x1d8384(0x18d)?undefined:this[_0x1d8384(0x1a5)][_0x1d8384(0x19d)](_0xc4e47f[_0x1d8384(0x1bc)],_0xc4e47f[_0x1d8384(0x17b)],_0xc4e47f[_0x1d8384(0x1a0)]);this[_0x1d8384(0x181)][_0x1d8384(0x188)][_0x1d8384(0x113)][_0x1d8384(0x1a8)](_0x2a45c0);if(_0x5ba76d===undefined)this[_0x1d8384(0x181)][_0x1d8384(0x179)](_0x2a45c0);else void _0x5ba76d[_0x1d8384(0x1a7)](()=>this[_0x1d8384(0x181)][_0x1d8384(0x179)](_0x2a45c0));this[_0x1d8384(0x1a5)][_0x1d8384(0x122)](_0x2a45c0);}}[_0x2587d8(0x10a)](_0x385ff0,_0x4df666){const _0x558866=_0x2587d8,_0x3eb746=_0x558866(0x169)+_0x4df666[_0x558866(0x183)],_0x1b49ee=Date[_0x558866(0x159)]()+(-0x1b3*-0x7+0x2651*-0x1+-0x6*-0x469)*(0x2*0x9cc8+-0x11346+0xc416);this[_0x558866(0x181)][_0x558866(0x188)][_0x558866(0x1b5)][_0x558866(0x15f)](_0x3eb746,_0x4df666[_0x558866(0x183)]);try{this[_0x558866(0x1a5)][_0x558866(0x1b1)]({'runId':_0x385ff0,'approvalId':_0x3eb746,'payload':{'method':_0x4df666[_0x558866(0x155)],'params':_0x4df666[_0x558866(0x14c)]},'expiresAt':_0x1b49ee});}catch{this[_0x558866(0x181)][_0x558866(0x188)][_0x558866(0x1b5)][_0x558866(0x1a8)](_0x3eb746);return;}this[_0x558866(0x1a5)][_0x558866(0x14b)]({'runId':_0x385ff0,'approvalId':_0x3eb746,'payload':{'method':_0x4df666[_0x558866(0x155)],'params':_0x4df666[_0x558866(0x14c)]},'expiresAt':_0x1b49ee});}[_0x2587d8(0x111)](_0x4f9a78,_0x4353b3,_0x56b898){const _0x2f008d=_0x2587d8,_0x19d9a2=codexUserInputQuestions(_0x56b898[_0x2f008d(0x10f)]);if(_0x19d9a2[_0x2f008d(0x171)]===0x1d58+0x1672+-0x766*0x7){try{this[_0x2f008d(0x181)][_0x2f008d(0x10c)](_0x4353b3,{'answers':{}});}catch{}return;}const _0x1dc62c=String(_0x4353b3);this[_0x2f008d(0x181)][_0x2f008d(0x188)][_0x2f008d(0x12c)][_0x2f008d(0x15f)](_0x1dc62c,{'runId':_0x4f9a78,'requestId':_0x4353b3,'questions':_0x19d9a2[_0x2f008d(0x149)](_0xb3db60=>({'id':_0xb3db60['id'],'options':_0xb3db60[_0x2f008d(0x175)][_0x2f008d(0x149)](_0x197746=>_0x197746[_0x2f008d(0x17e)]),'allowOther':_0xb3db60[_0x2f008d(0x182)]}))}),this[_0x2f008d(0x1a5)][_0x2f008d(0x170)](_0x4f9a78,{'itemId':boundedConversationItemId(_0x2f008d(0x117),_0x1dc62c),'kind':_0x2f008d(0x162),'status':_0x2f008d(0x17a),'payload':{'requestId':_0x1dc62c,'questions':_0x19d9a2[_0x2f008d(0x149)](_0x4e8333=>({'id':_0x4e8333['id'],'prompt':_0x4e8333[_0x2f008d(0x1b6)],'input':_0x4e8333[_0x2f008d(0x175)][_0x2f008d(0x171)]===-0x19eb+-0x221d+0xf02*0x4?_0x2f008d(0x137):_0x2f008d(0x15c),'options':_0x4e8333[_0x2f008d(0x175)][_0x2f008d(0x149)](_0x2a8dc5=>({'value':_0x2a8dc5[_0x2f008d(0x17e)],'label':_0x2a8dc5[_0x2f008d(0x14f)],'description':_0x2a8dc5[_0x2f008d(0x166)]})),'allowOther':_0x4e8333[_0x2f008d(0x182)]}))}});}[_0x2587d8(0x11e)](_0x384baf){const _0x2034ae=_0x2587d8,_0x14dd04=_0x384baf[_0x2034ae(0x189)];if(_0x14dd04[_0x2034ae(0x181)]!==_0x2034ae(0x187)||typeof _0x14dd04[_0x2034ae(0x1b3)]!==_0x2034ae(0x16a)||typeof _0x14dd04[_0x2034ae(0x1bc)]!==_0x2034ae(0x16a)||typeof _0x14dd04[_0x2034ae(0x125)]!==_0x2034ae(0x16a)||typeof _0x14dd04[_0x2034ae(0x1a0)]!==_0x2034ae(0x16a)||this[_0x2034ae(0x1a5)][_0x2034ae(0x12a)]()||this[_0x2034ae(0x1a5)][_0x2034ae(0x114)][_0x2034ae(0x158)](_0x14dd04[_0x2034ae(0x1b3)]))return;const {runId:_0x520270,sessionId:_0x52701e,input:_0x24770d,cwd:_0x1a5bfe}=_0x14dd04;let _0x588da7,_0x5ee301,_0x2d2300;try{_0x588da7=this[_0x2034ae(0x1a5)][_0x2034ae(0x198)](_0x14dd04[_0x2034ae(0x138)]),_0x5ee301=parseSecretEnvironment(_0x14dd04[_0x2034ae(0x151)]),_0x2d2300=parseSecretEnvironment(_0x14dd04[_0x2034ae(0x102)]);}catch(_0x4acf27){this[_0x2034ae(0x123)](_0x520270,_0x4acf27,_0x2034ae(0x139)),this[_0x2034ae(0x1a5)][_0x2034ae(0x174)](_0x520270,_0x2034ae(0x160),runnerErrorProjection(_0x4acf27,_0x2034ae(0x110)),_0x2034ae(0x142));return;}this[_0x2034ae(0x1a5)][_0x2034ae(0x199)]({'runId':_0x520270,'sessionId':_0x52701e,'runner':_0x2034ae(0x187),'cwd':_0x1a5bfe,...typeof _0x14dd04[_0x2034ae(0x194)]===_0x2034ae(0x16a)?{'externalSessionId':_0x14dd04[_0x2034ae(0x194)]}:{}});if(this[_0x2034ae(0x1a5)][_0x2034ae(0x150)](_0x520270,_0x1a5bfe))return;const _0x52a699=this[_0x2034ae(0x1a5)][_0x2034ae(0x11b)](_0x52701e);if(!this[_0x2034ae(0x1a5)][_0x2034ae(0x195)]()){this[_0x2034ae(0x1a5)][_0x2034ae(0x174)](_0x520270,_0x2034ae(0x160),{'code':_0x2034ae(0x14a)},_0x2034ae(0x142));return;}if(typeof _0x14dd04[_0x2034ae(0x194)]===_0x2034ae(0x16a)&&(_0x52a699===undefined||_0x52a699[_0x2034ae(0x16e)]!==_0x2034ae(0x134))){this[_0x2034ae(0x1a5)][_0x2034ae(0x174)](_0x520270,_0x2034ae(0x160),{'code':_0x2034ae(0x13b)},_0x2034ae(0x142));return;}try{this[_0x2034ae(0x181)][_0x2034ae(0x148)](_0x5ee301,_0x520270);}catch(_0xc9bbe0){this[_0x2034ae(0x1a5)][_0x2034ae(0x174)](_0x520270,_0x2034ae(0x160),{'code':safeErrorCode(_0xc9bbe0,_0x2034ae(0x17d))},_0x2034ae(0x142));return;}this[_0x2034ae(0x1a5)][_0x2034ae(0x130)](_0x520270),void this[_0x2034ae(0x186)]({'runId':_0x520270,'sessionId':_0x52701e,'input':_0x24770d,'cwd':_0x1a5bfe,'externalSessionId':_0x14dd04[_0x2034ae(0x194)],'model':_0x14dd04[_0x2034ae(0x106)],'effort':_0x14dd04[_0x2034ae(0x17f)],'access':_0x14dd04[_0x2034ae(0x152)],'collaborationMode':_0x14dd04[_0x2034ae(0x177)],'serviceTier':_0x14dd04[_0x2034ae(0x16c)],...typeof _0x14dd04[_0x2034ae(0x1b9)]===_0x2034ae(0x16a)?{'personalInstructions':_0x14dd04[_0x2034ae(0x1b9)]}:{},'mcpServers':this[_0x2034ae(0x181)][_0x2034ae(0x126)](_0x14dd04[_0x2034ae(0x167)],{..._0x5ee301,..._0x2d2300})},_0x588da7);}async[_0x2587d8(0x186)](_0x9d10cb,_0x134bc2){const _0x59239b=_0x2587d8,{runId:_0x23c5c5,sessionId:_0x4f5ec7,input:_0x5c25dd,cwd:_0x261a5a}=_0x9d10cb;try{await this[_0x59239b(0x181)][_0x59239b(0x11e)]();if(this[_0x59239b(0x1a5)][_0x59239b(0x150)](_0x23c5c5,_0x261a5a)){this[_0x59239b(0x181)][_0x59239b(0x179)](_0x23c5c5);return;}this[_0x59239b(0x1a5)][_0x59239b(0x174)](_0x23c5c5,_0x59239b(0x146),{},_0x59239b(0x163));const _0x583b9e={...typeof _0x9d10cb[_0x59239b(0x106)]===_0x59239b(0x16a)?{'model':_0x9d10cb[_0x59239b(0x106)]}:{},...typeof _0x9d10cb[_0x59239b(0x17f)]===_0x59239b(0x16a)?{'effort':_0x9d10cb[_0x59239b(0x17f)]}:{},...typeof _0x9d10cb[_0x59239b(0x152)]===_0x59239b(0x16a)?{'access':_0x9d10cb[_0x59239b(0x152)]}:{},..._0x9d10cb[_0x59239b(0x1b9)]===undefined?{}:{'developerInstructions':_0x9d10cb[_0x59239b(0x1b9)]},..._0x9d10cb[_0x59239b(0x144)]===undefined?{}:{'mcpServers':_0x9d10cb[_0x59239b(0x144)]}},_0x512099=_0x9d10cb[_0x59239b(0x177)]===_0x59239b(0x156)||_0x9d10cb[_0x59239b(0x177)]===_0x59239b(0x105)?_0x9d10cb[_0x59239b(0x177)]:undefined,_0x6a8aa8={..._0x583b9e,..._0x512099===undefined?{}:{'collaborationMode':_0x512099},..._0x9d10cb[_0x59239b(0x16c)]===_0x59239b(0x1a2)?{'serviceTier':_0x59239b(0x1a2)}:{}},_0xa76164=await this[_0x59239b(0x1a5)][_0x59239b(0x173)](_0x23c5c5,_0x134bc2);let _0x4dd166,_0x4b7498;for(let _0x34ee22=-0xc56+-0x1*-0x1e71+-0x2d*0x67;_0x34ee22<-0x1366+-0x1*-0x337+0x1031;_0x34ee22+=0x2*0x69d+0x1aad+-0x27e6){try{const _0x5b12b0=typeof _0x9d10cb[_0x59239b(0x194)]===_0x59239b(0x16a)?await this[_0x59239b(0x181)][_0x59239b(0x1ab)](_0x9d10cb[_0x59239b(0x194)],_0x261a5a,_0x583b9e):await this[_0x59239b(0x181)][_0x59239b(0x13e)](_0x261a5a,_0x583b9e);if(this[_0x59239b(0x1a5)][_0x59239b(0x150)](_0x23c5c5,_0x261a5a)){this[_0x59239b(0x181)][_0x59239b(0x179)](_0x23c5c5);return;}_0x4dd166=extractId(_0x5b12b0,_0x59239b(0x193)),this[_0x59239b(0x181)][_0x59239b(0x188)][_0x59239b(0x113)][_0x59239b(0x15f)](_0x23c5c5,{'sessionId':_0x4f5ec7,'threadId':_0x4dd166,'cwd':_0x261a5a,'missionMcp':hasMissionMcp(_0x9d10cb[_0x59239b(0x144)])}),_0x4b7498=await this[_0x59239b(0x181)][_0x59239b(0x147)](_0x4dd166,_0x5c25dd,_0x261a5a,_0x6a8aa8,_0xa76164);break;}catch(_0x6357da){this[_0x59239b(0x181)][_0x59239b(0x188)][_0x59239b(0x113)][_0x59239b(0x1a8)](_0x23c5c5);if(_0x34ee22===0x2098*-0x1+0x2*0x5f8+0x4*0x52a&&await this[_0x59239b(0x181)][_0x59239b(0x15b)](_0x23c5c5,_0x6357da))continue;throw _0x6357da;}}if(_0x4dd166===undefined||_0x4b7498===undefined)throw new Error(_0x59239b(0x139));let _0x44866b=_0x4f5ec7;typeof _0x9d10cb[_0x59239b(0x194)]!==_0x59239b(0x16a)&&(this[_0x59239b(0x1a5)][_0x59239b(0x12f)](_0x4f5ec7,_0x4dd166),_0x44866b=_0x4dd166,this[_0x59239b(0x1a5)][_0x59239b(0x1ac)](_0x59239b(0x100),{'sessionId':_0x4f5ec7,'externalSessionId':_0x4dd166}));const _0x1f45c9=extractId(_0x4b7498,_0x59239b(0x135));this[_0x59239b(0x181)][_0x59239b(0x188)][_0x59239b(0x113)][_0x59239b(0x15f)](_0x23c5c5,{'sessionId':_0x44866b,'threadId':_0x4dd166,'turnId':_0x1f45c9,'cwd':_0x261a5a,'missionMcp':hasMissionMcp(_0x9d10cb[_0x59239b(0x144)])}),this[_0x59239b(0x181)][_0x59239b(0x188)][_0x59239b(0x120)][_0x59239b(0x15f)](_0x1f45c9,{'sessionId':_0x44866b,'runId':_0x23c5c5});if(this[_0x59239b(0x1a5)][_0x59239b(0x14d)](_0x23c5c5)===_0x59239b(0x12e)){await this[_0x59239b(0x1a5)][_0x59239b(0x11a)](_0x23c5c5,_0x4dd166,_0x1f45c9,_0x261a5a,this[_0x59239b(0x1a5)][_0x59239b(0x1bb)](_0x23c5c5)?_0x59239b(0x1a1):_0x59239b(0x143)),this[_0x59239b(0x181)][_0x59239b(0x179)](_0x23c5c5);return;}this[_0x59239b(0x1a5)][_0x59239b(0x174)](_0x23c5c5,_0x59239b(0x178),{'threadId':_0x4dd166,'turnId':_0x1f45c9},_0x59239b(0x10d));}catch(_0x12a3b5){if(this[_0x59239b(0x1a5)][_0x59239b(0x150)](_0x23c5c5,_0x261a5a)){this[_0x59239b(0x181)][_0x59239b(0x179)](_0x23c5c5);return;}this[_0x59239b(0x123)](_0x23c5c5,_0x12a3b5,_0x59239b(0x139)),this[_0x59239b(0x1a5)][_0x59239b(0x174)](_0x23c5c5,_0x59239b(0x190),runnerErrorProjection(_0x12a3b5,_0x59239b(0x139)),_0x59239b(0x142)),this[_0x59239b(0x181)][_0x59239b(0x188)][_0x59239b(0x113)][_0x59239b(0x1a8)](_0x23c5c5),this[_0x59239b(0x181)][_0x59239b(0x179)](_0x23c5c5),this[_0x59239b(0x1a5)][_0x59239b(0x122)](_0x23c5c5);}}[_0x2587d8(0x123)](_0x5dd59f,_0x337400,_0x473b9b){const _0x36d424=_0x2587d8,_0x4aa57f=runnerErrorProjection(_0x337400,_0x473b9b);this[_0x36d424(0x1a5)][_0x36d424(0x170)](_0x5dd59f,{'itemId':boundedConversationItemId(_0x36d424(0x145),_0x5dd59f),'kind':_0x36d424(0x1a6),'status':_0x36d424(0x142),'payload':{..._0x4aa57f,'recoverable':!![],'retryAfterMs':null}});}}function hasMissionMcp(_0x4c617d){const _0x59e7b0=_0x2587d8;return isPlainRecord(_0x4c617d)&&isPlainRecord(_0x4c617d[_0x59e7b0(0x18a)]);}
1
+ import { extractId } from '../../util/runner-native-session-parsers.js';
2
+ import { parseSecretEnvironment } from '../../util/secret-environment.js';
3
+ import { safeErrorCode } from '../../util/safe-error.js';
4
+ import { runnerErrorProjection } from '../../util/runner-error.js';
5
+ import { boundedConversationItemId, codexImageAttachments, codexLiveConversationItem, codexUserInputQuestions, compactRunnerText, isPlainRecord } from './conversation-parser.js';
6
+ export function resolveCodexNotificationRun(runs, input) {
7
+ const entries = [...runs.entries()];
8
+ if (input.turnId !== undefined) {
9
+ const exact = entries.find(([, value]) => value.turnId === input.turnId &&
10
+ (input.threadId === undefined || value.threadId === input.threadId));
11
+ if (exact !== undefined)
12
+ return exact;
13
+ if (input.allowUnboundFallback !== true)
14
+ return undefined;
15
+ // `turn/started` can arrive before the `turn/start` response binds its native Turn ID. Only
16
+ // an unbound Run on the same thread is a valid fallback; an older bound Run is never valid.
17
+ return entries
18
+ .reverse()
19
+ .find(([, value]) => value.threadId === input.threadId && value.turnId === undefined);
20
+ }
21
+ if (input.threadId === undefined)
22
+ return undefined;
23
+ return entries.reverse().find(([, value]) => value.threadId === input.threadId);
24
+ }
25
+ export class CodexManagedRunController {
26
+ runner;
27
+ host;
28
+ constructor(runner, host) {
29
+ this.runner = runner;
30
+ this.host = host;
31
+ }
32
+ async executeCommand(session, command, input, context) {
33
+ if (command.id === 'plan') {
34
+ const environmentLeaseId = crypto.randomUUID();
35
+ this.runner.prepareEnvironment(context.secretEnvironment, environmentLeaseId);
36
+ let modes;
37
+ try {
38
+ await this.runner.start();
39
+ modes = await this.runner.listCollaborationModes();
40
+ }
41
+ finally {
42
+ this.runner.releaseEnvironment(environmentLeaseId);
43
+ }
44
+ if (!isPlainRecord(modes) ||
45
+ !Array.isArray(modes.data) ||
46
+ !modes.data.some((mode) => isPlainRecord(mode) && mode.mode === 'plan'))
47
+ throw new Error('RUNNER_COMMAND_UNAVAILABLE');
48
+ const current = this.host.commandState(session.id, 'plan');
49
+ if (current?.active)
50
+ this.host.clearCommandState(session.id, 'plan');
51
+ else
52
+ this.host.setCommandState(session.id, {
53
+ commandId: 'plan',
54
+ active: true,
55
+ label: 'Plan Mode',
56
+ detail: 'Subsequent messages run in collaborative Plan Mode.',
57
+ closable: true,
58
+ closeInput: '/plan',
59
+ continuation: { label: 'Implement', prompt: 'Implement the plan above.' }
60
+ });
61
+ return { command: command.id, states: this.host.commandStates(session.id) };
62
+ }
63
+ const threadId = session.externalSessionId;
64
+ if (threadId === null || session.nativeControl !== 'MAR_MANAGED')
65
+ throw new Error('RUNNER_COMMAND_UNAVAILABLE');
66
+ if (command.id === 'compact') {
67
+ const runId = crypto.randomUUID();
68
+ this.runner.prepareEnvironment(context.secretEnvironment, runId);
69
+ try {
70
+ await this.runner.start();
71
+ return await this.compact(session, threadId, runId, context.initiatedByUserId);
72
+ }
73
+ catch (error) {
74
+ this.runner.releaseEnvironment(runId);
75
+ throw error;
76
+ }
77
+ }
78
+ if (command.id === 'fast')
79
+ return this.host.fast(input);
80
+ throw new Error('RUNNER_COMMAND_UNAVAILABLE');
81
+ }
82
+ async compact(session, threadId, runId, initiatedByUserId) {
83
+ if (this.host.hasActiveSessionLease(session.id))
84
+ throw new Error('RUNNER_COMMAND_UNAVAILABLE');
85
+ this.host.adopt({
86
+ runId,
87
+ sessionId: session.id,
88
+ runner: 'codex',
89
+ cwd: session.cwd,
90
+ externalSessionId: threadId,
91
+ ...(initiatedByUserId === undefined ? {} : { initiatedByUserId })
92
+ });
93
+ this.host.addActive(runId);
94
+ this.runner.execution.runs.set(runId, {
95
+ sessionId: session.id,
96
+ threadId,
97
+ cwd: session.cwd,
98
+ refreshTitle: false
99
+ });
100
+ this.host.emit(runId, 'run.started', { command: 'compact' }, 'STARTING');
101
+ try {
102
+ await this.runner.resumeThread(threadId, session.cwd);
103
+ await this.runner.request('thread/compact/start', { threadId });
104
+ return {
105
+ command: 'compact',
106
+ run: this.host.run(runId),
107
+ states: this.host.commandStates(session.id)
108
+ };
109
+ }
110
+ catch (error) {
111
+ this.emitError(runId, error, 'CODEX_COMPACT_FAILED');
112
+ this.host.emit(runId, 'run.failed', runnerErrorProjection(error, 'CODEX_COMPACT_FAILED'), 'FAILED');
113
+ this.runner.execution.runs.delete(runId);
114
+ this.runner.releaseEnvironment(runId);
115
+ this.host.removeActive(runId);
116
+ throw error;
117
+ }
118
+ }
119
+ handleNotification(notification) {
120
+ const params = isPlainRecord(notification.params) ? notification.params : {};
121
+ const turn = isPlainRecord(params.turn) ? params.turn : undefined;
122
+ const turnId = typeof params.turnId === 'string'
123
+ ? params.turnId
124
+ : typeof turn?.id === 'string'
125
+ ? turn.id
126
+ : undefined;
127
+ const threadId = typeof params.threadId === 'string' ? params.threadId : undefined;
128
+ if (turnId === undefined && threadId === undefined)
129
+ return;
130
+ const run = resolveCodexNotificationRun(this.runner.execution.runs, {
131
+ ...(turnId === undefined ? {} : { turnId }),
132
+ ...(threadId === undefined ? {} : { threadId }),
133
+ ...(notification.method === 'turn/started' ? { allowUnboundFallback: true } : {})
134
+ });
135
+ if (run === undefined)
136
+ return;
137
+ const [runId, activeRun] = run;
138
+ if (notification.method === 'turn/started' && turnId !== undefined) {
139
+ const active = this.runner.execution.runs.get(runId);
140
+ if (active !== undefined)
141
+ this.runner.execution.runs.set(runId, { ...active, turnId });
142
+ this.host.emit(runId, 'run.running', { threadId, turnId }, 'RUNNING');
143
+ return;
144
+ }
145
+ if (notification.requestId !== undefined &&
146
+ (notification.method === 'item/commandExecution/requestApproval' ||
147
+ notification.method === 'item/fileChange/requestApproval')) {
148
+ this.requestApproval(runId, {
149
+ ...notification,
150
+ requestId: notification.requestId
151
+ });
152
+ return;
153
+ }
154
+ if (notification.requestId !== undefined &&
155
+ notification.method === 'item/tool/requestUserInput') {
156
+ this.requestUserInput(runId, notification.requestId, params);
157
+ return;
158
+ }
159
+ if (notification.requestId !== undefined &&
160
+ notification.method === 'mcpServer/elicitation/request' &&
161
+ activeRun.missionMcp === true &&
162
+ params.serverName === 'myagentroam_mission' &&
163
+ isPlainRecord(params._meta) &&
164
+ params._meta.codex_approval_kind === 'mcp_tool_call') {
165
+ this.runner.respond(notification.requestId, {
166
+ action: 'accept',
167
+ content: {},
168
+ _meta: null
169
+ });
170
+ return;
171
+ }
172
+ if (notification.method === 'item/agentMessage/delta' && typeof params.delta === 'string') {
173
+ const itemId = typeof params.itemId === 'string'
174
+ ? boundedConversationItemId('codex', params.itemId)
175
+ : undefined;
176
+ this.host.emit(runId, 'text.delta', {
177
+ text: params.delta,
178
+ ...(itemId === undefined ? {} : { itemId })
179
+ });
180
+ return;
181
+ }
182
+ if (notification.method === 'item/reasoning/summaryTextDelta' &&
183
+ typeof params.itemId === 'string' &&
184
+ typeof params.delta === 'string') {
185
+ const index = typeof params.summaryIndex === 'number' && Number.isInteger(params.summaryIndex)
186
+ ? params.summaryIndex
187
+ : 0;
188
+ this.host.emitItem(runId, {
189
+ itemId: boundedConversationItemId('codex', params.itemId),
190
+ kind: 'reasoning_summary',
191
+ status: 'IN_PROGRESS',
192
+ payload: { sections: [{ index, text: compactRunnerText(params.delta, 10_000) }] },
193
+ merge: true,
194
+ append: 'sections'
195
+ });
196
+ return;
197
+ }
198
+ if (notification.method === 'item/commandExecution/outputDelta' &&
199
+ typeof params.itemId === 'string' &&
200
+ typeof params.delta === 'string') {
201
+ this.host.emitItem(runId, {
202
+ itemId: boundedConversationItemId('codex', params.itemId),
203
+ kind: 'command_execution',
204
+ status: 'IN_PROGRESS',
205
+ payload: { outputPreview: compactRunnerText(params.delta, 10_000) },
206
+ merge: true,
207
+ append: 'outputPreview'
208
+ });
209
+ return;
210
+ }
211
+ if (notification.method === 'item/mcpToolCall/progress' &&
212
+ typeof params.itemId === 'string' &&
213
+ typeof params.message === 'string') {
214
+ this.host.emitItem(runId, {
215
+ itemId: boundedConversationItemId('codex', params.itemId),
216
+ kind: 'tool_call',
217
+ status: 'IN_PROGRESS',
218
+ payload: { progressLabel: compactRunnerText(params.message, 500) },
219
+ merge: true
220
+ });
221
+ return;
222
+ }
223
+ if ((notification.method === 'item/started' || notification.method === 'item/completed') &&
224
+ isPlainRecord(params.item)) {
225
+ const attachments = this.host.appendImages(runId, codexImageAttachments(params.item));
226
+ const item = codexLiveConversationItem(params.item, notification.method === 'item/completed', attachments);
227
+ if (item !== undefined)
228
+ this.host.emitItem(runId, item);
229
+ return;
230
+ }
231
+ if (notification.method === 'turn/completed') {
232
+ const status = turn?.status;
233
+ const terminal = status === 'completed' ? 'SUCCEEDED' : status === 'interrupted' ? 'INTERRUPTED' : 'FAILED';
234
+ if (terminal === 'FAILED')
235
+ this.emitError(runId, turn?.error ?? turn, 'CODEX_RUN_FAILED');
236
+ const failure = terminal === 'FAILED'
237
+ ? runnerErrorProjection(turn?.error ?? turn, 'CODEX_RUN_FAILED')
238
+ : { status: status ?? 'unknown' };
239
+ this.host.emit(runId, terminal === 'FAILED' ? 'run.failed' : 'run.completed', failure, terminal);
240
+ const active = this.runner.execution.runs.get(runId);
241
+ const titleRefresh = active === undefined ||
242
+ active.refreshTitle === false ||
243
+ this.host.session(active.sessionId)?.titleSource !== 'AUTO'
244
+ ? undefined
245
+ : this.host.syncTitle(active.sessionId, active.threadId, active.cwd);
246
+ this.runner.execution.runs.delete(runId);
247
+ if (titleRefresh === undefined)
248
+ this.runner.releaseEnvironment(runId);
249
+ else
250
+ void titleRefresh.finally(() => this.runner.releaseEnvironment(runId));
251
+ this.host.removeActive(runId);
252
+ }
253
+ }
254
+ requestApproval(runId, notification) {
255
+ const approvalId = `codex:${notification.requestId}`;
256
+ const expiresAt = Date.now() + 10 * 60_000;
257
+ this.runner.execution.approvals.set(approvalId, notification.requestId);
258
+ try {
259
+ this.host.createApproval({
260
+ runId,
261
+ approvalId,
262
+ payload: { method: notification.method, params: notification.params },
263
+ expiresAt
264
+ });
265
+ }
266
+ catch {
267
+ this.runner.execution.approvals.delete(approvalId);
268
+ return;
269
+ }
270
+ this.host.publishApproval({
271
+ runId,
272
+ approvalId,
273
+ payload: { method: notification.method, params: notification.params },
274
+ expiresAt
275
+ });
276
+ }
277
+ requestUserInput(runId, nativeRequestId, params) {
278
+ const questions = codexUserInputQuestions(params.questions);
279
+ if (questions.length === 0) {
280
+ try {
281
+ this.runner.respond(nativeRequestId, { answers: {} });
282
+ }
283
+ catch {
284
+ // A disconnected App Server cannot receive a malformed-request response.
285
+ }
286
+ return;
287
+ }
288
+ const requestId = String(nativeRequestId);
289
+ this.runner.execution.userInputs.set(requestId, {
290
+ runId,
291
+ requestId: nativeRequestId,
292
+ questions: questions.map((question) => ({
293
+ id: question.id,
294
+ options: question.options.map((option) => option.value),
295
+ allowOther: question.allowOther
296
+ }))
297
+ });
298
+ this.host.emitItem(runId, {
299
+ itemId: boundedConversationItemId('codex-input', requestId),
300
+ kind: 'user_input_request',
301
+ status: 'PENDING',
302
+ payload: {
303
+ requestId,
304
+ questions: questions.map((question) => ({
305
+ id: question.id,
306
+ prompt: question.prompt,
307
+ input: question.options.length === 0 ? 'SHORT_TEXT' : 'SINGLE_SELECT',
308
+ options: question.options.map((option) => ({
309
+ value: option.value,
310
+ label: option.label,
311
+ description: option.description
312
+ })),
313
+ allowOther: question.allowOther
314
+ }))
315
+ }
316
+ });
317
+ }
318
+ start(envelope) {
319
+ const payload = envelope.payload;
320
+ if (payload.runner !== 'codex' ||
321
+ typeof payload.runId !== 'string' ||
322
+ typeof payload.sessionId !== 'string' ||
323
+ typeof payload.input !== 'string' ||
324
+ typeof payload.cwd !== 'string' ||
325
+ this.host.intercepted() ||
326
+ this.host.active.has(payload.runId))
327
+ return;
328
+ const { runId, sessionId, input, cwd } = payload;
329
+ let attachments;
330
+ let secretEnvironment;
331
+ let mcpSecretEnvironment;
332
+ try {
333
+ attachments = this.host.parseAttachments(payload.attachments);
334
+ secretEnvironment = parseSecretEnvironment(payload.secretEnvironment);
335
+ mcpSecretEnvironment = parseSecretEnvironment(payload.mcpSecretEnvironment);
336
+ }
337
+ catch (error) {
338
+ this.emitError(runId, error, 'CODEX_RUN_FAILED');
339
+ this.host.emit(runId, 'run.rejected', runnerErrorProjection(error, 'MESSAGE_ATTACHMENTS_INVALID'), 'FAILED');
340
+ return;
341
+ }
342
+ this.host.adopt({
343
+ runId,
344
+ sessionId,
345
+ runner: 'codex',
346
+ cwd,
347
+ ...(typeof payload.externalSessionId === 'string'
348
+ ? { externalSessionId: payload.externalSessionId }
349
+ : {})
350
+ });
351
+ if (this.host.completeCancelled(runId, cwd))
352
+ return;
353
+ const session = this.host.session(sessionId);
354
+ if (!this.host.available()) {
355
+ this.host.emit(runId, 'run.rejected', { code: 'CODEX_UNAVAILABLE' }, 'FAILED');
356
+ return;
357
+ }
358
+ if (typeof payload.externalSessionId === 'string' &&
359
+ (session === undefined || session.nativeControl !== 'MAR_MANAGED')) {
360
+ this.host.emit(runId, 'run.rejected', { code: 'EXTERNAL_THREAD_OBSERVE_ONLY' }, 'FAILED');
361
+ return;
362
+ }
363
+ try {
364
+ this.runner.prepareEnvironment(secretEnvironment, runId);
365
+ }
366
+ catch (error) {
367
+ this.host.emit(runId, 'run.rejected', { code: safeErrorCode(error, 'SECRET_ENVIRONMENT_INVALID') }, 'FAILED');
368
+ return;
369
+ }
370
+ this.host.addActive(runId);
371
+ void this.run({
372
+ runId,
373
+ sessionId,
374
+ input,
375
+ cwd,
376
+ externalSessionId: payload.externalSessionId,
377
+ model: payload.model,
378
+ effort: payload.effort,
379
+ access: payload.access,
380
+ collaborationMode: payload.collaborationMode,
381
+ serviceTier: payload.serviceTier,
382
+ ...(typeof payload.personalInstructions === 'string'
383
+ ? { personalInstructions: payload.personalInstructions }
384
+ : {}),
385
+ mcpServers: this.runner.mcpConfiguration(payload.mcpInstallations, {
386
+ ...secretEnvironment,
387
+ ...mcpSecretEnvironment
388
+ })
389
+ }, attachments);
390
+ }
391
+ async run(payload, attachments) {
392
+ const { runId, sessionId, input, cwd } = payload;
393
+ try {
394
+ await this.runner.start();
395
+ if (this.host.completeCancelled(runId, cwd)) {
396
+ this.runner.releaseEnvironment(runId);
397
+ return;
398
+ }
399
+ this.host.emit(runId, 'run.started', {}, 'STARTING');
400
+ const configuration = {
401
+ ...(typeof payload.model === 'string' ? { model: payload.model } : {}),
402
+ ...(typeof payload.effort === 'string' ? { effort: payload.effort } : {}),
403
+ ...(typeof payload.access === 'string' ? { access: payload.access } : {}),
404
+ ...(payload.personalInstructions === undefined
405
+ ? {}
406
+ : { developerInstructions: payload.personalInstructions }),
407
+ ...(payload.mcpServers === undefined ? {} : { mcpServers: payload.mcpServers })
408
+ };
409
+ const collaborationMode = payload.collaborationMode === 'plan' || payload.collaborationMode === 'default'
410
+ ? payload.collaborationMode
411
+ : undefined;
412
+ const turnConfiguration = {
413
+ ...configuration,
414
+ ...(collaborationMode === undefined ? {} : { collaborationMode }),
415
+ ...(payload.serviceTier === 'fast' ? { serviceTier: 'fast' } : {})
416
+ };
417
+ const materializedAttachments = await this.host.materialize(runId, attachments);
418
+ let threadId;
419
+ let turnResult;
420
+ for (let attempt = 0; attempt < 2; attempt += 1) {
421
+ try {
422
+ const threadResult = typeof payload.externalSessionId === 'string'
423
+ ? await this.runner.resumeThread(payload.externalSessionId, cwd, configuration)
424
+ : await this.runner.startThread(cwd, configuration);
425
+ if (this.host.completeCancelled(runId, cwd)) {
426
+ this.runner.releaseEnvironment(runId);
427
+ return;
428
+ }
429
+ threadId = extractId(threadResult, 'thread');
430
+ this.runner.execution.runs.set(runId, {
431
+ sessionId,
432
+ threadId,
433
+ cwd,
434
+ missionMcp: hasMissionMcp(payload.mcpServers)
435
+ });
436
+ turnResult = await this.runner.startTurn(threadId, input, cwd, turnConfiguration, materializedAttachments);
437
+ break;
438
+ }
439
+ catch (error) {
440
+ this.runner.execution.runs.delete(runId);
441
+ if (attempt === 0 && (await this.runner.recoverMissingRollout(runId, error)))
442
+ continue;
443
+ throw error;
444
+ }
445
+ }
446
+ if (threadId === undefined || turnResult === undefined)
447
+ throw new Error('CODEX_RUN_FAILED');
448
+ let publicSessionId = sessionId;
449
+ if (typeof payload.externalSessionId !== 'string') {
450
+ this.host.promoteSession(sessionId, threadId);
451
+ publicSessionId = threadId;
452
+ this.host.send('session.external-id', { sessionId, externalSessionId: threadId });
453
+ }
454
+ const turnId = extractId(turnResult, 'turn');
455
+ this.runner.execution.runs.set(runId, {
456
+ sessionId: publicSessionId,
457
+ threadId,
458
+ turnId,
459
+ cwd,
460
+ missionMcp: hasMissionMcp(payload.mcpServers)
461
+ });
462
+ this.runner.execution.managedTurns.set(turnId, { sessionId: publicSessionId, runId });
463
+ if (this.host.runStatus(runId) === 'CANCELLING') {
464
+ await this.host.cancel(runId, threadId, turnId, cwd, this.host.interrupted(runId) ? 'INTERRUPTED' : 'CANCELLED');
465
+ this.runner.releaseEnvironment(runId);
466
+ return;
467
+ }
468
+ this.host.emit(runId, 'run.running', { threadId, turnId }, 'RUNNING');
469
+ }
470
+ catch (error) {
471
+ if (this.host.completeCancelled(runId, cwd)) {
472
+ this.runner.releaseEnvironment(runId);
473
+ return;
474
+ }
475
+ this.emitError(runId, error, 'CODEX_RUN_FAILED');
476
+ this.host.emit(runId, 'run.failed', runnerErrorProjection(error, 'CODEX_RUN_FAILED'), 'FAILED');
477
+ this.runner.execution.runs.delete(runId);
478
+ this.runner.releaseEnvironment(runId);
479
+ this.host.removeActive(runId);
480
+ }
481
+ }
482
+ emitError(runId, error, fallbackCode) {
483
+ const projected = runnerErrorProjection(error, fallbackCode);
484
+ this.host.emitItem(runId, {
485
+ itemId: boundedConversationItemId('runner-error', runId),
486
+ kind: 'error',
487
+ status: 'FAILED',
488
+ payload: { ...projected, recoverable: true, retryAfterMs: null }
489
+ });
490
+ }
491
+ }
492
+ function hasMissionMcp(value) {
493
+ return isPlainRecord(value) && isPlainRecord(value.myagentroam_mission);
494
+ }