@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.
- package/LICENSE +202 -0
- package/NOTICE +4 -0
- package/dist/capabilities.js +110 -2
- package/dist/claude-agent-sdk.js +330 -2
- package/dist/claude-channel.js +44 -2
- package/dist/codex-app-server.js +510 -2
- package/dist/config.js +106 -2
- package/dist/connector/node-connector-options.js +1 -2
- package/dist/connector/node-operation-router.js +22 -2
- package/dist/connector.js +1736 -2
- package/dist/control-outbound-scheduler.js +153 -2
- package/dist/database.js +639 -2
- package/dist/fake-runner.js +129 -2
- package/dist/git-askpass.js +12 -0
- package/dist/git-execution-helper.js +266 -0
- package/dist/health.js +3 -2
- package/dist/main.js +57 -2
- package/dist/mcp-installation-model.js +1 -2
- package/dist/migrations/v004.js +55 -3
- package/dist/migrations/v005.js +13 -3
- package/dist/migrations/v006.js +90 -3
- package/dist/migrations/v007.js +22 -3
- package/dist/migrations/v008.js +18 -3
- package/dist/migrations/v009.js +70 -4
- package/dist/migrations/v010.js +43 -3
- package/dist/migrations/v011.js +20 -3
- package/dist/migrations/v012.js +8 -0
- package/dist/native-jsonl-reader.js +186 -2
- package/dist/native-session-history.js +1143 -2
- package/dist/opencode-runtime.js +80 -2
- package/dist/opencode-server.js +259 -2
- package/dist/operational.js +122 -2
- package/dist/process-tree.js +18 -2
- package/dist/ripgrep-binary.js +31 -2
- package/dist/rotating-log.js +67 -2
- package/dist/runner/abstract-runner.js +260 -2
- package/dist/runner/claude/managed-run-controller.js +355 -2
- package/dist/runner/claude/tool-normalizer.js +120 -2
- package/dist/runner/claude-code-runner.js +303 -2
- package/dist/runner/codex/composer-image-markers.js +8 -2
- package/dist/runner/codex/conversation-parser.js +913 -2
- package/dist/runner/codex/managed-run-controller.js +494 -2
- package/dist/runner/codex/tool-normalizer.js +214 -2
- package/dist/runner/codex-runner.js +585 -2
- package/dist/runner/fake-test-runner.js +47 -2
- package/dist/runner/mar-agent/conversation-normalizer.js +644 -2
- package/dist/runner/mar-agent/executor-stdio-client-transport.js +139 -2
- package/dist/runner/mar-agent/generated-images.js +41 -2
- package/dist/runner/mar-agent/history-projection.js +106 -2
- package/dist/runner/mar-agent/hosted-conversation-runtime.js +446 -2
- package/dist/runner/mar-agent/managed-run-controller.js +785 -2
- package/dist/runner/mar-agent/mcp-client-pool.js +233 -2
- package/dist/runner/mar-agent/runtime-model-factory.js +326 -2
- package/dist/runner/mar-agent-runner.js +458 -2
- package/dist/runner/opencode/conversation-parser.js +221 -2
- package/dist/runner/opencode/managed-run-controller.js +588 -2
- package/dist/runner/opencode/tool-normalizer.js +80 -2
- package/dist/runner/opencode-runner.js +426 -2
- package/dist/runner/runner-registry.js +87 -2
- package/dist/runner-command-engine.js +71 -2
- package/dist/runner-profiles.js +323 -2
- package/dist/runner-usage.js +190 -2
- package/dist/runtime-command-detector.js +73 -2
- package/dist/runtime-model.js +1 -2
- package/dist/runtime-state.js +1509 -2
- package/dist/service/attachment-domain-state.js +7 -2
- package/dist/service/bubblewrap-sandbox-executor.js +543 -2
- package/dist/service/continuous-run-coordinator.js +425 -2
- package/dist/service/conversation-history-service.js +552 -2
- package/dist/service/conversation-hosting-capability-service.js +61 -2
- package/dist/service/conversation-hosting-enablement-service.js +91 -2
- package/dist/service/conversation-hosting-maintenance-service.js +174 -2
- package/dist/service/conversation-segment-service.js +162 -2
- package/dist/service/conversation-template-node-service.js +992 -2
- package/dist/service/external-session-resume-service.js +152 -2
- package/dist/service/fake-managed-run-service.js +60 -2
- package/dist/service/git-execution-service.js +418 -0
- package/dist/service/git-operation-service.js +57 -0
- package/dist/service/hosted-conversation-node-service.js +1982 -2
- package/dist/service/hosted-conversation-store.js +1405 -2
- package/dist/service/managed-runner-session-service.js +35 -2
- package/dist/service/mar-agent-model-transport-test-service.js +88 -2
- package/dist/service/mcp-installation-verifier.js +87 -2
- package/dist/service/mcp-node-operation-service.js +90 -2
- package/dist/service/mission-mcp-server.js +124 -2
- package/dist/service/mission-mcp-stdio.js +40 -2
- package/dist/service/mission-runtime.js +142 -2
- package/dist/service/native-session-projection-service.js +274 -2
- package/dist/service/native-session-watch-service.js +683 -2
- package/dist/service/node-connection-lifecycle-service.js +88 -2
- package/dist/service/node-control-channel.js +85 -2
- package/dist/service/node-control-message-service.js +109 -2
- package/dist/service/node-request-service.js +62 -2
- package/dist/service/node-run-event-bridge.js +88 -2
- package/dist/service/node-terminal-channel.js +202 -2
- package/dist/service/node-upgrade-coordinator.js +137 -2
- package/dist/service/node-workspace-coordinator.js +97 -2
- package/dist/service/recent-run-projection-service.js +99 -2
- package/dist/service/run-attachment-service.js +321 -2
- package/dist/service/run-domain-state.js +4 -2
- package/dist/service/run-event-service.js +246 -2
- package/dist/service/run-ownership-policy.js +22 -2
- package/dist/service/run-workbench-service.js +120 -2
- package/dist/service/runner-channel-message-service.js +20 -2
- package/dist/service/runner-interaction-service.js +243 -2
- package/dist/service/runner-service.js +69 -2
- package/dist/service/runtime-credential-control-service.js +95 -2
- package/dist/service/session-catalog-service.js +404 -2
- package/dist/service/session-command-service.js +125 -2
- package/dist/service/session-context-service.js +128 -2
- package/dist/service/session-domain-state.js +9 -2
- package/dist/service/session-identity-service.js +86 -2
- package/dist/service/session-lifecycle-service.js +248 -2
- package/dist/service/session-message-service.js +270 -2
- package/dist/service/session-presentation-service.js +43 -2
- package/dist/service/session-query-service.js +82 -2
- package/dist/service/session-watch-slot-coordinator.js +21 -2
- package/dist/service/skill-directory-service.js +238 -2
- package/dist/service/skill-install-service.js +434 -2
- package/dist/service/skill-node-operation-service.js +206 -2
- package/dist/service/terminal-relay-state.js +3 -2
- package/dist/service/terminal-service.js +90 -2
- package/dist/service/web-search-error.js +40 -2
- package/dist/service/workbench-event-service.js +21 -2
- package/dist/service/workbench-manifest-service.js +69 -2
- package/dist/service/workspace-change-service.js +290 -2
- package/dist/service/workspace-content-search-service.js +457 -2
- package/dist/service/workspace-domain-state.js +41 -2
- package/dist/service/workspace-file-service.js +150 -2
- package/dist/service/workspace-git-exclude-service.js +119 -2
- package/dist/service/workspace-queue-workbench-service.js +176 -2
- package/dist/service/workspace-service.js +92 -2
- package/dist/service/workspace-session-service.js +154 -2
- package/dist/service/workspace-upload-service.js +262 -2
- package/dist/service/workspace-watch-controller.js +68 -2
- package/dist/service/workspace-watch-service.js +170 -2
- package/dist/service/workspace-watch-snapshot-service.js +218 -2
- package/dist/service/workspace-workbench-service.js +239 -2
- package/dist/service.js +91 -2
- package/dist/storage.js +32 -2
- package/dist/supervisor.js +136 -2
- package/dist/terminal.js +496 -2
- package/dist/util/git-credential-client.js +32 -0
- package/dist/util/node-operation-data.js +9 -2
- package/dist/util/node-operation-parsers.js +382 -2
- package/dist/util/personal-instructions.js +34 -2
- package/dist/util/runner-error.js +70 -2
- package/dist/util/runner-native-session-parsers.js +510 -2
- package/dist/util/safe-error.js +8 -2
- package/dist/util/secret-environment.js +25 -2
- package/dist/workspace.js +1793 -2
- package/package.json +11 -8
- package/vendor/ripgrep/darwin-arm64/rg +0 -0
- package/vendor/ripgrep/darwin-x64/rg +0 -0
- package/vendor/ripgrep/manifest.json +12 -0
- package/README.md +0 -42
- package/dist/event-buffer.js +0 -2
- package/dist/migrations/v001.js +0 -107
- package/dist/migrations/v002.js +0 -2
- package/dist/migrations/v003.js +0 -2
- package/dist/service/mcp-package-installer.js +0 -2
|
@@ -1,2 +1,494 @@
|
|
|
1
|
-
|
|
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
|
+
}
|