@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,248 @@
1
- /* mar-release-protected */
2
- function _0x101b(){const _0x3903ce=['BwfYA0jVB3rZDhjHCa','ywnJzxnZ','CMvQzwn0','y3DK','z2v0v29YA3nWywnL','zw1PDfnLC3nPB24','x19Yzxf1zxn0vxnLCKLK','tKvxx1nfu1njt04','DgL0Bgu','y29UDMvYC2f0Aw9UvhvYBKzVCLj1BG','zxHLy3v0zq','Aw5WDxq','C2vZC2LVBKLK','y3jLyxrL','z2v0qwDLBNrtzxnZAw9U','vw50AxrSzwqGC2vZC2LVBG','AwrLBNrPDhK','y29TBwfUzeLK','DhjPBq','A2v5CW','z2v0uNvU','CNvUDgLTzq','DxbKyxrLu2vZC2LVBK1LDgfKyxrH','C3rHCNrZ','B2jQzwn0','zgvMzxjYzwrdB21Tyw5KCW','y3vZDg9TvgL0Bgu','BMfTzq','uLvotKvsx0nptu1btKrFsu5wquXjra','mteWnJqWodb6uNf0zMS','zgvSAxzLCNK','C2vZC2LVBI5TzxnZywDL','AwrLBxbVDgvUDa','mLbyrwfSBa','CgvYC29UywXjBNn0CNvJDgLVBNm','ChjLC2vUDa','Bw9KzwW','CMvTB3zLqwDLBNrtzxnZAw9U','zgvMyxvSDenVBMzPz3vYyxrPB24','u0vtu0LptL9tvefsvf9gquLmruq','ndeWmJG0q0PkrKHh','CNvU','z2v0uNvUBMvYrgvMyxvSDhm','C3rHCNrgCMvZAa','DxbKyxrLtwv0ywrHDge','nZyXotzAyMPkuMK','CMvXDwLYzq','zgvSzxrL','BwfYqwDLBNrsDw50Aw1Lu2nVCgvjza','CNvUBMvYvgL0Bgu','yM9VBgvHBG','yxr0ywnOBwvUDeLKCW','Bw92zvbPBG','zMLUza','u0vtu0LptL9qsu5Ftu9wrv9jtLzbteLe','C2vJCMv0rw52AxjVBM1LBNq','BwfYqwDLBNrnB2rLBa','u0vtu0LptL9usvrmrv9srvfvsvjfra','y3jLyxrLtwv0ywrHDgfqCM9Qzwn0Aw9U','ntvPDgv3qwu','C2f2zvj1BM5LCKrLzMf1BhrZ','C2vZC2LVBI5JCMvHDgu','BgvUz3rO','zwzMB3j0','tuvtu0fhrv9jtLzbteLe','C3rHCNq','Bw92zvbPBM5LzfnLC3nPB24','Aw50zxjJzxb0zwrtzxnZAw9Uswq','u0vtu0LptL9jtLzbteLe','DxbKyxrLq29UzMLNDxjHDgLVBG','v09ss1nqqunfx05pvf9gt1vora','y29UDgvUDa','CNvUBMvYCW','ChjVBw90zq','ntr0sfPPyKe','C3rYAw5N','ChjVAMvJDgLVBG','BwfYqwDLBNrnB2rLBhm','yM9VDhn0CMfWt25SEq','CMvUyw1L','C2vZC2LVBG','CNvUBMvY','mJeWodi0ofLfDxPYBa','ChjVzhvJDa','y2XPzw50twvZC2fNzuLK','AxnbCNjHEq','y2f0y2G','u0vtu0LptL9ot1rFrK9vtKq','zgf0ywjHC2u','DxbKyxrLqwDLBNrtzxnZAw9Uq29UzMLNDxjHDgLVBG','zg93BG','DxnLC1j1BM5LCLrPDgXLrM9YuMvUyw1L','D29YA3nWywnLswq','u0vtu0LptL9usvrmrv9jtLzbteLe','D2fPDa','C2L6zq','B3b0Aw9UCW','C2f2zu5HDgL2zvnLC3nPB25nzxrHzgf0yq','mZm1mte0mwzwzerIrW','BMv4Da','DMfSDwu','zgLYzwn0Aw9U','B3bLCMf0Aw9UCW','C2v0','y2XLyxi','zxH0zxjUywXtzxnZAw9Uswq','nJmWnJDrB1rtC3e','mti0ndy3mgLADgXfEG','y3jLyxrLqwDLBNrtzxnZAw9U','C2v0uNvUBMvYvgL0BgvgCM9TtMf0AxzL','C29Tzq','CgLUBMvK','z2v0','C2vZC2LVBI5JB21Tyw5KlMv4zwn1Dgu'];_0x101b=function(){return _0x3903ce;};return _0x101b();}const _0x5e2f1c=_0x1d76;(function(_0x232921,_0x230539){const _0x53099f=_0x1d76,_0x19a9ae=_0x232921();while(!![]){try{const _0x51566a=parseInt(_0x53099f(0x106))/(0x1*0x277+0xda6+0x4*-0x407)*(-parseInt(_0x53099f(0xbd))/(-0x515+-0xb*0x313+0xc*0x33e))+-parseInt(_0x53099f(0x107))/(0x721*-0x5+-0xef7+-0x329f*-0x1)+parseInt(_0x53099f(0xc9))/(0xed*0x29+-0x1cc1+0x2*-0x498)*(-parseInt(_0x53099f(0xd7))/(0x2d*0x6c+-0x9*-0x247+-0x2776))+-parseInt(_0x53099f(0xe6))/(0x2*0xc70+-0x210d+0x833)*(-parseInt(_0x53099f(0xc4))/(-0xb5a+-0x1987+0x4*0x93a))+-parseInt(_0x53099f(0xee))/(-0x17c*0x1+-0x1474+0x4a*0x4c)+-parseInt(_0x53099f(0xfe))/(0x1b1*0x3+-0x121d*-0x1+0x1*-0x1727)+parseInt(_0x53099f(0xb9))/(0x1b3d+0xa*-0x346+0x589);if(_0x51566a===_0x230539)break;else _0x19a9ae['push'](_0x19a9ae['shift']());}catch(_0x472996){_0x19a9ae['push'](_0x19a9ae['shift']());}}}(_0x101b,-0xe24d+-0x85970+-0x4a843*-0x3));import{validSessionEffort,validSessionOption,validSessionTitle}from'../util/node-operation-parsers.js';import{isPlainRecord}from'../util/node-operation-parsers.js';function _0x1d76(_0x1b0350,_0x165126){_0x1b0350=_0x1b0350-(0x148+0x1c21+-0xa*0x2df);const _0x2ad8d2=_0x101b();let _0xfd69b7=_0x2ad8d2[_0x1b0350];if(_0x1d76['TemaeH']===undefined){var _0x1f9a45=function(_0x131aa7){const _0x34e794='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4c5071='',_0x1c775='';for(let _0x51f849=0x189f+0x3*0x67f+-0x2c1c,_0x55ccab,_0x3b1b06,_0x21a01f=0x1ada+-0xf1*0x11+-0xad9;_0x3b1b06=_0x131aa7['charAt'](_0x21a01f++);~_0x3b1b06&&(_0x55ccab=_0x51f849%(0x10fd*0x2+0x1*-0x24b+0x79*-0x43)?_0x55ccab*(-0x62*0x37+0x22*0x59+0x97c)+_0x3b1b06:_0x3b1b06,_0x51f849++%(0xd5d+-0x82*-0x17+-0x1*0x1907))?_0x4c5071+=String['fromCharCode'](-0x15b7+-0x1917+0x2fcd&_0x55ccab>>(-(-0x3*0x545+-0x1*-0x2412+-0x1*0x1441)*_0x51f849&0x39e+-0x12f2*-0x2+0x1*-0x297c)):-0x37e*0x8+-0x45*0x43+0x2dff){_0x3b1b06=_0x34e794['indexOf'](_0x3b1b06);}for(let _0x7808f3=0x1*0x2443+-0xb5*-0x29+-0x4140,_0x704c1c=_0x4c5071['length'];_0x7808f3<_0x704c1c;_0x7808f3++){_0x1c775+='%'+('00'+_0x4c5071['charCodeAt'](_0x7808f3)['toString'](0x9*-0x364+-0x16b8+-0x17b*-0x24))['slice'](-(0x1187*-0x1+-0x56*0x39+0x24af));}return decodeURIComponent(_0x1c775);};_0x1d76['fWJjbl']=_0x1f9a45,_0x1d76['mtuaWC']={},_0x1d76['TemaeH']=!![];}const _0x582f22=_0x2ad8d2[-0x60*0x45+-0x26ec+-0x1a*-0x27e];_0x1d76['PtIUyI']!==_0x582f22&&(_0x1d76['mtuaWC']={},_0x1d76['PtIUyI']=_0x582f22);const _0x1b7532=_0x1d76['mtuaWC'][_0x1b0350];return _0x1b7532===undefined?(_0xfd69b7=_0x1d76['fWJjbl'](_0xfd69b7),_0x1d76['mtuaWC'][_0x1b0350]=_0xfd69b7):_0xfd69b7=_0x1b7532,_0xfd69b7;}import{parseSecretEnvironment}from'../util/secret-environment.js';export class SessionLifecycleService{[_0x5e2f1c(0xfc)];[_0x5e2f1c(0xb3)]=new Map();constructor(_0x29b241){const _0x20a10a=_0x5e2f1c;this[_0x20a10a(0xfc)]=_0x29b241;}[_0x5e2f1c(0x102)](){const _0x352406=_0x5e2f1c;return{'session.metadata.update':_0x341a41=>this[_0x352406(0xc8)](record(_0x341a41)),'session.pin.move':_0x2f95aa=>this[_0x352406(0xd0)](record(_0x2f95aa)),'session.create':_0x4586fe=>this[_0x352406(0x11b)](record(_0x4586fe)),'session.start':_0x2e0ecf=>this[_0x352406(0xdd)](record(_0x2e0ecf)),'session.config.update':_0x3419e9=>this[_0x352406(0xe1)](record(_0x3419e9))};}[_0x5e2f1c(0x104)](){const _0x15d639=_0x5e2f1c;this[_0x15d639(0xb3)][_0x15d639(0x104)]();}async[_0x5e2f1c(0xc8)](_0x5defb1){const _0x3b5ebf=_0x5e2f1c;if(typeof _0x5defb1[_0x3b5ebf(0x11a)]!==_0x3b5ebf(0xe7)||_0x5defb1[_0x3b5ebf(0xb6)]!==undefined&&_0x5defb1[_0x3b5ebf(0xb6)]!==null&&typeof _0x5defb1[_0x3b5ebf(0xb6)]!==_0x3b5ebf(0xe7)||_0x5defb1[_0x3b5ebf(0x10b)]!==undefined&&typeof _0x5defb1[_0x3b5ebf(0x10b)]!==_0x3b5ebf(0xce))throw new Error(_0x3b5ebf(0xe0));if(_0x5defb1[_0x3b5ebf(0xb6)]===null||_0x5defb1[_0x3b5ebf(0xb6)]?.[_0x3b5ebf(0x120)]()[_0x3b5ebf(0xda)]===-0x5*-0x3cb+-0x152+-0x11a5*0x1)throw new Error(_0x3b5ebf(0xd5));if(_0x5defb1[_0x3b5ebf(0xb6)]!==undefined&&_0x5defb1[_0x3b5ebf(0xb6)][_0x3b5ebf(0x120)]()[_0x3b5ebf(0xda)]>-0x121+0x10fd*0x2+0x1*-0x2039)throw new Error(_0x3b5ebf(0xf9));const _0x20ddb9=this[_0x3b5ebf(0xfc)][_0x3b5ebf(0x123)][_0x3b5ebf(0x11c)](_0x5defb1[_0x3b5ebf(0x11a)])??await this[_0x3b5ebf(0xfc)][_0x3b5ebf(0xe8)][_0x3b5ebf(0xd6)](_0x5defb1[_0x3b5ebf(0x11a)]);if(_0x20ddb9===undefined)throw new Error(_0x3b5ebf(0xf3));const _0x48fef1=this[_0x3b5ebf(0xfc)][_0x3b5ebf(0xe4)][_0x3b5ebf(0xca)](_0x20ddb9[_0x3b5ebf(0xed)])[_0x3b5ebf(0xf7)]()&&_0x20ddb9[_0x3b5ebf(0x105)]!==null&&_0x5defb1[_0x3b5ebf(0xb6)]!==undefined;await this[_0x3b5ebf(0xfc)][_0x3b5ebf(0xe8)][_0x3b5ebf(0xeb)](_0x20ddb9,{..._0x5defb1[_0x3b5ebf(0xb6)]===undefined?{}:{'title':_0x5defb1[_0x3b5ebf(0xb6)]},..._0x5defb1[_0x3b5ebf(0x10b)]===undefined?{}:{'pinned':_0x5defb1[_0x3b5ebf(0x10b)]}});const _0x352e0a=_0x48fef1?null:_0x5defb1[_0x3b5ebf(0xb6)],_0x326df6=this[_0x3b5ebf(0xfc)][_0x3b5ebf(0x123)][_0x3b5ebf(0x124)]({'sessionId':_0x20ddb9['id'],..._0x352e0a===undefined?{}:{'customTitle':_0x352e0a},..._0x5defb1[_0x3b5ebf(0x10b)]===undefined?{}:{'pinned':_0x5defb1[_0x3b5ebf(0x10b)]}});return{'session':this[_0x3b5ebf(0xfc)][_0x3b5ebf(0xbf)](_0x48fef1?this[_0x3b5ebf(0xfc)][_0x3b5ebf(0x123)][_0x3b5ebf(0x109)](_0x326df6['id'],_0x5defb1[_0x3b5ebf(0xb6)]??''):_0x326df6)};}[_0x5e2f1c(0xd0)](_0x30f873){const _0x1a2237=_0x5e2f1c;if(typeof _0x30f873[_0x1a2237(0x11a)]!==_0x1a2237(0xe7)||_0x30f873[_0x1a2237(0x101)]!=='up'&&_0x30f873[_0x1a2237(0x101)]!==_0x1a2237(0xf6))throw new Error(_0x1a2237(0xd2));return this[_0x1a2237(0xfc)][_0x1a2237(0xf4)]()[_0x1a2237(0xde)](_0x30f873[_0x1a2237(0x11a)],_0x30f873[_0x1a2237(0x101)]),{'moved':!![]};}[_0x5e2f1c(0x11b)](_0xd97ab4){const _0x71e12d=_0x5e2f1c,_0x19a56b=this[_0x71e12d(0xfc)][_0x71e12d(0xe4)][_0x71e12d(0xef)](_0xd97ab4[_0x71e12d(0xed)]);if(typeof _0xd97ab4[_0x71e12d(0xf8)]!==_0x71e12d(0xe7)||_0x19a56b===undefined||typeof _0xd97ab4[_0x71e12d(0x111)]!==_0x71e12d(0xe7)||_0xd97ab4[_0x71e12d(0x111)][_0x71e12d(0xda)]===0x850+0xb04*0x2+-0x1e58||_0xd97ab4[_0x71e12d(0x105)]!==undefined&&typeof _0xd97ab4[_0x71e12d(0x105)]!==_0x71e12d(0xe7)||!validSessionTitle(_0xd97ab4[_0x71e12d(0x116)])||!validSessionOption(_0xd97ab4[_0x71e12d(0xc0)])||!validSessionEffort(_0xd97ab4[_0x71e12d(0xdb)])||!validSessionOption(_0xd97ab4[_0x71e12d(0x10f)]))throw new Error(_0x71e12d(0xe0));const _0x336027=this[_0x71e12d(0xfc)][_0x71e12d(0xf4)](),_0xd8cfcb=_0x336027[_0x71e12d(0x112)](_0xd97ab4[_0x71e12d(0xf8)]);if(_0xd8cfcb===undefined)throw new Error(_0x71e12d(0xe2));const _0x4c039f=parseSecretEnvironment(_0xd97ab4[_0x71e12d(0xd3)]),_0x12219e=_0x336027[_0x71e12d(0xc6)]()[_0x71e12d(0xd1)](_0x354722=>_0x354722[_0x71e12d(0xed)]===_0x19a56b[_0x71e12d(0xb7)]),_0x2cdf46=_0x19a56b[_0x71e12d(0xc2)](_0xd8cfcb,_0x4c039f),_0x5bf266={'runner':_0x19a56b[_0x71e12d(0xb7)],'model':typeof _0xd97ab4[_0x71e12d(0xc0)]===_0x71e12d(0xe7)?_0xd97ab4[_0x71e12d(0xc0)]:_0x12219e?.[_0x71e12d(0xc0)]??_0x2cdf46[_0x71e12d(0xc0)],'effort':typeof _0xd97ab4[_0x71e12d(0xdb)]===_0x71e12d(0xe7)?_0xd97ab4[_0x71e12d(0xdb)]:_0x12219e?.[_0x71e12d(0xdb)]??_0x2cdf46[_0x71e12d(0xdb)],'access':typeof _0xd97ab4[_0x71e12d(0x10f)]===_0x71e12d(0xe7)?_0xd97ab4[_0x71e12d(0x10f)]:_0x12219e?.[_0x71e12d(0x10f)]??_0x2cdf46[_0x71e12d(0x10f)]},_0x531167=this[_0x71e12d(0xfc)][_0x71e12d(0x123)][_0x71e12d(0x108)]({'workspaceId':_0xd97ab4[_0x71e12d(0xf8)],'runner':_0x19a56b[_0x71e12d(0xb7)],'cwd':_0xd97ab4[_0x71e12d(0x111)],...typeof _0xd97ab4[_0x71e12d(0x105)]===_0x71e12d(0xe7)?{'externalSessionId':_0xd97ab4[_0x71e12d(0x105)]}:{},'model':_0x5bf266[_0x71e12d(0xc0)],'effort':_0x5bf266[_0x71e12d(0xdb)],'access':_0x5bf266[_0x71e12d(0x10f)],...typeof _0xd97ab4[_0x71e12d(0x116)]===_0x71e12d(0xe7)?{'title':_0xd97ab4[_0x71e12d(0x116)]}:{}});if(_0xd97ab4[_0x71e12d(0xea)]===!![])this[_0x71e12d(0xfc)][_0x71e12d(0x11e)][_0x71e12d(0x10e)](_0x531167['id']);_0x336027[_0x71e12d(0xd8)](_0x5bf266);if(_0xd97ab4[_0x71e12d(0xea)]!==!![])this[_0x71e12d(0xfc)][_0x71e12d(0x113)](_0x531167);return{'session':this[_0x71e12d(0xfc)][_0x71e12d(0xbf)](_0x531167)};}async[_0x5e2f1c(0xe1)](_0x397cd8){const _0x2272a7=_0x5e2f1c;if(typeof _0x397cd8[_0x2272a7(0x11a)]!==_0x2272a7(0xe7)||typeof _0x397cd8[_0x2272a7(0xc0)]!==_0x2272a7(0xe7)||!validSessionOption(_0x397cd8[_0x2272a7(0xc0)])||typeof _0x397cd8[_0x2272a7(0xdb)]!==_0x2272a7(0xe7)||!validSessionEffort(_0x397cd8[_0x2272a7(0xdb)])||typeof _0x397cd8[_0x2272a7(0x10f)]!==_0x2272a7(0xe7)||!validSessionOption(_0x397cd8[_0x2272a7(0x10f)]))throw new Error(_0x2272a7(0xe0));const _0x512572=this[_0x2272a7(0xfc)][_0x2272a7(0x123)][_0x2272a7(0x11c)](_0x397cd8[_0x2272a7(0x11a)])??await this[_0x2272a7(0xfc)][_0x2272a7(0xe8)][_0x2272a7(0xd6)](_0x397cd8[_0x2272a7(0x11a)]);if(_0x512572===undefined)throw new Error(_0x2272a7(0xf3));const _0xebfaa2=this[_0x2272a7(0xfc)][_0x2272a7(0x123)][_0x2272a7(0xf5)]({'sessionId':_0x512572['id'],'model':_0x397cd8[_0x2272a7(0xc0)],'effort':_0x397cd8[_0x2272a7(0xdb)],'access':_0x397cd8[_0x2272a7(0x10f)]});if(_0xebfaa2[_0x2272a7(0x105)]!==null)this[_0x2272a7(0xfc)][_0x2272a7(0xf4)]()[_0x2272a7(0xfd)]({'runner':_0xebfaa2[_0x2272a7(0xed)],'externalSessionId':_0xebfaa2[_0x2272a7(0x105)],'workspaceId':_0xebfaa2[_0x2272a7(0xf8)],'model':_0xebfaa2[_0x2272a7(0xc0)],'effort':_0xebfaa2[_0x2272a7(0xdb)],'access':_0xebfaa2[_0x2272a7(0x10f)]});return this[_0x2272a7(0xfc)][_0x2272a7(0x113)](_0xebfaa2),{'session':this[_0x2272a7(0xfc)][_0x2272a7(0xbf)](_0xebfaa2)};}async[_0x5e2f1c(0xdd)](_0xa19cf4){const _0x3b22eb=_0x5e2f1c;if(typeof _0xa19cf4[_0x3b22eb(0xf0)]!==_0x3b22eb(0xe7)||_0xa19cf4[_0x3b22eb(0xf0)][_0x3b22eb(0xda)]===0x11c2+0xb*0x1a5+-0x23d9||typeof _0xa19cf4[_0x3b22eb(0xe3)]!==_0x3b22eb(0xe7)||_0xa19cf4[_0x3b22eb(0xe3)][_0x3b22eb(0xda)]===-0x1*-0x1f8c+-0x189e+-0x6ee)throw new Error(_0x3b22eb(0xdc));if(_0xa19cf4[_0x3b22eb(0xb5)]!==undefined&&(!Array[_0x3b22eb(0xf1)](_0xa19cf4[_0x3b22eb(0xb5)])||_0xa19cf4[_0x3b22eb(0xb5)][_0x3b22eb(0x10a)](_0x383889=>!isPlainRecord(_0x383889)||typeof _0x383889[_0x3b22eb(0x11f)]!==_0x3b22eb(0xe7)||typeof _0x383889[_0x3b22eb(0x119)]!==_0x3b22eb(0xe7))))throw new Error(_0x3b22eb(0xb8));const _0xa7217b=_0xa19cf4[_0x3b22eb(0xf8)]+'\x00'+_0xa19cf4[_0x3b22eb(0xed)]+'\x00'+_0xa19cf4[_0x3b22eb(0xf0)],_0x13f5a0=this[_0x3b22eb(0xb3)][_0x3b22eb(0x10c)](_0xa7217b);if(_0x13f5a0!==undefined)return _0x13f5a0;const _0x3b772d=this[_0x3b22eb(0xc7)](_0xa19cf4);this[_0x3b22eb(0xb3)][_0x3b22eb(0x103)](_0xa7217b,_0x3b772d);try{const _0x232512=await _0x3b772d;while(this[_0x3b22eb(0xb3)][_0x3b22eb(0xfb)]>-0x16f5+-0x15ae+0x2ea3*0x1){const _0x442b21=this[_0x3b22eb(0xb3)][_0x3b22eb(0x121)]()[_0x3b22eb(0xff)]()[_0x3b22eb(0x100)];if(_0x442b21===undefined||_0x442b21===_0xa7217b)break;this[_0x3b22eb(0xb3)][_0x3b22eb(0xcb)](_0x442b21);}return _0x232512;}catch(_0x153676){this[_0x3b22eb(0xb3)][_0x3b22eb(0xcb)](_0xa7217b);throw _0x153676;}}async[_0x5e2f1c(0xc7)](_0x1a4b9f){const _0xdd2942=_0x5e2f1c,_0x18515a=await this[_0xdd2942(0xfc)][_0xdd2942(0x118)](_0xdd2942(0xd9),{..._0x1a4b9f,'bootstrapOnly':!![]}),_0x3748e7=_0x18515a[_0xdd2942(0xec)]['id'],_0x57ff32=this[_0xdd2942(0xfc)][_0xdd2942(0x11e)][_0xdd2942(0xfa)](_0x3748e7);try{if(Array[_0xdd2942(0xf1)](_0x1a4b9f[_0xdd2942(0xb5)])){for(const _0xe74fa of _0x1a4b9f[_0xdd2942(0xb5)])if(isPlainRecord(_0xe74fa))await this[_0xdd2942(0xfc)][_0xdd2942(0x118)](_0xdd2942(0x10d),{'sessionId':_0x3748e7,'commandId':_0xe74fa[_0xdd2942(0x11f)],'input':_0xe74fa[_0xdd2942(0x119)],..._0x1a4b9f[_0xdd2942(0xd3)]===undefined?{}:{'secretEnvironment':_0x1a4b9f[_0xdd2942(0xd3)]}});}const _0x31d2e9=this[_0xdd2942(0xfc)][_0xdd2942(0xdf)](_0x1a4b9f[_0xdd2942(0xf0)]),_0x1639b6=_0x31d2e9??_0x3748e7;if(_0x31d2e9!==undefined)this[_0xdd2942(0xfc)][_0xdd2942(0x11e)][_0xdd2942(0xe5)](_0x3748e7,_0x31d2e9);const _0xa8c945=await this[_0xdd2942(0xfc)][_0xdd2942(0x118)](_0xdd2942(0xbb),{'sessionId':_0x1639b6,'clientMessageId':_0x1a4b9f[_0xdd2942(0xf0)],'content':_0x1a4b9f[_0xdd2942(0xe3)],..._0x1a4b9f[_0xdd2942(0x114)]===undefined?{}:{'__requestUserId':_0x1a4b9f[_0xdd2942(0x114)]},..._0x1a4b9f[_0xdd2942(0xd3)]===undefined?{}:{'secretEnvironment':_0x1a4b9f[_0xdd2942(0xd3)]},..._0x1a4b9f[_0xdd2942(0xbe)]===undefined?{}:{'personalInstructions':_0x1a4b9f[_0xdd2942(0xbe)]},..._0x1a4b9f[_0xdd2942(0xd4)]===undefined?{}:{'marAgentModel':_0x1a4b9f[_0xdd2942(0xd4)]},..._0x1a4b9f[_0xdd2942(0xe9)]===undefined?{}:{'marAgentModels':_0x1a4b9f[_0xdd2942(0xe9)]},..._0x1a4b9f[_0xdd2942(0xcc)]===undefined?{}:{'marAgentRuntimeScopeId':_0x1a4b9f[_0xdd2942(0xcc)]},..._0x1a4b9f[_0xdd2942(0xcf)]===undefined?{}:{'attachmentIds':_0x1a4b9f[_0xdd2942(0xcf)]}}),_0x101bd1=await _0x57ff32,_0x2ec20=this[_0xdd2942(0xfc)][_0xdd2942(0x123)][_0xdd2942(0x11c)](_0x101bd1),_0x47ad29=this[_0xdd2942(0xfc)][_0xdd2942(0x123)][_0xdd2942(0x122)](_0xa8c945[_0xdd2942(0xc5)]['id']),_0x1548b9=this[_0xdd2942(0xfc)][_0xdd2942(0x123)][_0xdd2942(0x117)](_0xa8c945[_0xdd2942(0xc5)]['id']);if(_0x2ec20===undefined||_0x47ad29===undefined||_0x1548b9===undefined)throw new Error(_0xdd2942(0xc3));return{'session':this[_0xdd2942(0xfc)][_0xdd2942(0xbf)](_0x2ec20),'run':_0x47ad29,'turn':_0x1548b9,'delivery':_0xa8c945[_0xdd2942(0xba)],'idempotent':_0xa8c945[_0xdd2942(0xbc)],'auditReceipt':{'sessionId':_0x2ec20['id'],'conversationTitle':_0x2ec20[_0xdd2942(0xb6)]??_0x2ec20[_0xdd2942(0xcd)]??_0xdd2942(0x11d),'runId':_0x47ad29['id'],'inputMode':_0xdd2942(0x115)}};}catch(_0x38610f){this[_0xdd2942(0xfc)][_0xdd2942(0x11e)][_0xdd2942(0x110)](_0x3748e7,_0xdd2942(0xc3));const _0x22f1b7=await _0x57ff32[_0xdd2942(0xf2)](()=>undefined);if(_0x22f1b7!==undefined)try{this[_0xdd2942(0xfc)][_0xdd2942(0x123)][_0xdd2942(0xc1)](_0x22f1b7);}catch{}throw _0x38610f;}}}function record(_0x1b0350){const _0x3a9845=_0x5e2f1c;return _0x1b0350!==null&&typeof _0x1b0350===_0x3a9845(0xb4)?_0x1b0350:{};}
1
+ import { validSessionEffort, validSessionOption, validSessionTitle } from '../util/node-operation-parsers.js';
2
+ import { isPlainRecord } from '../util/node-operation-parsers.js';
3
+ import { parseSecretEnvironment } from '../util/secret-environment.js';
4
+ export class SessionLifecycleService {
5
+ options;
6
+ starts = new Map();
7
+ constructor(options) {
8
+ this.options = options;
9
+ }
10
+ operations() {
11
+ return {
12
+ 'session.metadata.update': (data) => this.updateMetadata(record(data)),
13
+ 'session.pin.move': (data) => this.movePin(record(data)),
14
+ 'session.create': (data) => this.create(record(data)),
15
+ 'session.start': (data) => this.start(record(data)),
16
+ 'session.config.update': (data) => this.updateConfiguration(record(data))
17
+ };
18
+ }
19
+ clear() {
20
+ this.starts.clear();
21
+ }
22
+ async updateMetadata(input) {
23
+ if (typeof input.sessionId !== 'string' ||
24
+ (input.customTitle !== undefined &&
25
+ input.customTitle !== null &&
26
+ typeof input.customTitle !== 'string') ||
27
+ (input.pinned !== undefined && typeof input.pinned !== 'boolean'))
28
+ throw new Error('SESSION_INVALID');
29
+ if (input.customTitle === null || input.customTitle?.trim().length === 0)
30
+ throw new Error('SESSION_TITLE_REQUIRED');
31
+ if (input.customTitle !== undefined && input.customTitle.trim().length > 160)
32
+ throw new Error('SESSION_TITLE_INVALID');
33
+ const current = this.options.runtime.getAgentSession(input.sessionId) ??
34
+ (await this.options.projection.createMetadataProjection(input.sessionId));
35
+ if (current === undefined)
36
+ throw new Error('SESSION_NOT_FOUND');
37
+ const nativeCodexRename = this.options.runners.require(current.runner).usesRunnerTitleForRename() &&
38
+ current.externalSessionId !== null &&
39
+ input.customTitle !== undefined;
40
+ await this.options.projection.rename(current, {
41
+ ...(input.customTitle === undefined ? {} : { title: input.customTitle }),
42
+ ...(input.pinned === undefined ? {} : { pinned: input.pinned })
43
+ });
44
+ const metadataTitle = nativeCodexRename ? null : input.customTitle;
45
+ const updated = this.options.runtime.updateSessionMetadata({
46
+ sessionId: current.id,
47
+ ...(metadataTitle === undefined ? {} : { customTitle: metadataTitle }),
48
+ ...(input.pinned === undefined ? {} : { pinned: input.pinned })
49
+ });
50
+ return {
51
+ session: this.options.present(nativeCodexRename
52
+ ? this.options.runtime.setRunnerTitleFromNative(updated.id, input.customTitle ?? '')
53
+ : updated)
54
+ };
55
+ }
56
+ movePin(input) {
57
+ if (typeof input.sessionId !== 'string' ||
58
+ (input.direction !== 'up' && input.direction !== 'down'))
59
+ throw new Error('SESSION_PIN_MOVE_INVALID');
60
+ this.options.database().movePinnedSession(input.sessionId, input.direction);
61
+ return { moved: true };
62
+ }
63
+ create(input) {
64
+ const runner = this.options.runners.product(input.runner);
65
+ if (typeof input.workspaceId !== 'string' ||
66
+ runner === undefined ||
67
+ typeof input.cwd !== 'string' ||
68
+ input.cwd.length === 0 ||
69
+ (input.externalSessionId !== undefined && typeof input.externalSessionId !== 'string') ||
70
+ !validSessionTitle(input.title) ||
71
+ !validSessionOption(input.model) ||
72
+ !validSessionEffort(input.effort) ||
73
+ !validSessionOption(input.access))
74
+ throw new Error('SESSION_INVALID');
75
+ const database = this.options.database();
76
+ const workspace = database.getWorkspace(input.workspaceId);
77
+ if (workspace === undefined)
78
+ throw new Error('WORKSPACE_NOT_FOUND');
79
+ const environment = parseSecretEnvironment(input.secretEnvironment);
80
+ const saved = database.getRunnerDefaults().find((value) => value.runner === runner.name);
81
+ const fallback = runner.defaultConfiguration(workspace, environment);
82
+ const configuration = {
83
+ runner: runner.name,
84
+ model: typeof input.model === 'string' ? input.model : (saved?.model ?? fallback.model),
85
+ effort: typeof input.effort === 'string' ? input.effort : (saved?.effort ?? fallback.effort),
86
+ access: typeof input.access === 'string' ? input.access : (saved?.access ?? fallback.access)
87
+ };
88
+ const session = this.options.runtime.createAgentSession({
89
+ workspaceId: input.workspaceId,
90
+ runner: runner.name,
91
+ cwd: input.cwd,
92
+ ...(typeof input.externalSessionId === 'string'
93
+ ? { externalSessionId: input.externalSessionId }
94
+ : {}),
95
+ model: configuration.model,
96
+ effort: configuration.effort,
97
+ access: configuration.access,
98
+ ...(typeof input.title === 'string' ? { title: input.title } : {})
99
+ });
100
+ if (input.bootstrapOnly === true)
101
+ this.options.identity.markBootstrap(session.id);
102
+ database.saveRunnerDefaults(configuration);
103
+ if (input.bootstrapOnly !== true)
104
+ this.options.emitSession(session);
105
+ return { session: this.options.present(session) };
106
+ }
107
+ async updateConfiguration(input) {
108
+ if (typeof input.sessionId !== 'string' ||
109
+ typeof input.model !== 'string' ||
110
+ !validSessionOption(input.model) ||
111
+ typeof input.effort !== 'string' ||
112
+ !validSessionEffort(input.effort) ||
113
+ typeof input.access !== 'string' ||
114
+ !validSessionOption(input.access))
115
+ throw new Error('SESSION_INVALID');
116
+ const current = this.options.runtime.getAgentSession(input.sessionId) ??
117
+ (await this.options.projection.createMetadataProjection(input.sessionId));
118
+ if (current === undefined)
119
+ throw new Error('SESSION_NOT_FOUND');
120
+ const session = this.options.runtime.updateAgentSessionConfiguration({
121
+ sessionId: current.id,
122
+ model: input.model,
123
+ effort: input.effort,
124
+ access: input.access
125
+ });
126
+ if (session.externalSessionId !== null)
127
+ this.options.database().saveNativeSessionMetadata({
128
+ runner: session.runner,
129
+ externalSessionId: session.externalSessionId,
130
+ workspaceId: session.workspaceId,
131
+ model: session.model,
132
+ effort: session.effort,
133
+ access: session.access
134
+ });
135
+ this.options.emitSession(session);
136
+ return { session: this.options.present(session) };
137
+ }
138
+ async start(input) {
139
+ if (typeof input.clientMessageId !== 'string' ||
140
+ input.clientMessageId.length === 0 ||
141
+ typeof input.content !== 'string' ||
142
+ input.content.length === 0)
143
+ throw new Error('MESSAGE_INVALID');
144
+ if (input.deferredCommands !== undefined &&
145
+ (!Array.isArray(input.deferredCommands) ||
146
+ input.deferredCommands.some((value) => !isPlainRecord(value) ||
147
+ typeof value.commandId !== 'string' ||
148
+ typeof value.input !== 'string')))
149
+ throw new Error('RUNNER_COMMAND_INVALID');
150
+ const startKey = `${input.workspaceId}\u0000${input.runner}\u0000${input.clientMessageId}`;
151
+ const existing = this.starts.get(startKey);
152
+ if (existing !== undefined)
153
+ return existing;
154
+ const start = this.startFresh(input);
155
+ this.starts.set(startKey, start);
156
+ try {
157
+ const result = await start;
158
+ while (this.starts.size > 512) {
159
+ const oldest = this.starts.keys().next().value;
160
+ if (oldest === undefined || oldest === startKey)
161
+ break;
162
+ this.starts.delete(oldest);
163
+ }
164
+ return result;
165
+ }
166
+ catch (error) {
167
+ this.starts.delete(startKey);
168
+ throw error;
169
+ }
170
+ }
171
+ async startFresh(input) {
172
+ const created = (await this.options.execute('session.create', {
173
+ ...input,
174
+ bootstrapOnly: true
175
+ }));
176
+ const bootstrapId = created.session.id;
177
+ const identity = this.options.identity.wait(bootstrapId);
178
+ try {
179
+ if (Array.isArray(input.deferredCommands))
180
+ for (const value of input.deferredCommands)
181
+ if (isPlainRecord(value))
182
+ await this.options.execute('session.command.execute', {
183
+ sessionId: bootstrapId,
184
+ commandId: value.commandId,
185
+ input: value.input,
186
+ ...(input.secretEnvironment === undefined
187
+ ? {}
188
+ : { secretEnvironment: input.secretEnvironment })
189
+ });
190
+ const interceptedId = this.options.interceptedSessionId(input.clientMessageId);
191
+ const messageSessionId = interceptedId ?? bootstrapId;
192
+ if (interceptedId !== undefined)
193
+ this.options.identity.promote(bootstrapId, interceptedId);
194
+ const message = (await this.options.execute('session.message', {
195
+ sessionId: messageSessionId,
196
+ clientMessageId: input.clientMessageId,
197
+ content: input.content,
198
+ ...(input.__requestUserId === undefined ? {} : { __requestUserId: input.__requestUserId }),
199
+ ...(input.secretEnvironment === undefined
200
+ ? {}
201
+ : { secretEnvironment: input.secretEnvironment }),
202
+ ...(input.personalInstructions === undefined
203
+ ? {}
204
+ : { personalInstructions: input.personalInstructions }),
205
+ ...(input.marAgentModel === undefined ? {} : { marAgentModel: input.marAgentModel }),
206
+ ...(input.marAgentModels === undefined ? {} : { marAgentModels: input.marAgentModels }),
207
+ ...(input.marAgentRuntimeScopeId === undefined
208
+ ? {}
209
+ : { marAgentRuntimeScopeId: input.marAgentRuntimeScopeId }),
210
+ ...(input.attachmentIds === undefined ? {} : { attachmentIds: input.attachmentIds })
211
+ }));
212
+ const nativeSessionId = await identity;
213
+ const session = this.options.runtime.getAgentSession(nativeSessionId);
214
+ const run = this.options.runtime.getRun(message.run.id);
215
+ const turn = this.options.runtime.conversationTurnForRun(message.run.id);
216
+ if (session === undefined || run === undefined || turn === undefined)
217
+ throw new Error('SESSION_START_FAILED');
218
+ return {
219
+ session: this.options.present(session),
220
+ run,
221
+ turn,
222
+ delivery: message.delivery,
223
+ idempotent: message.idempotent,
224
+ auditReceipt: {
225
+ sessionId: session.id,
226
+ conversationTitle: session.customTitle ?? session.runnerTitle ?? 'Untitled session',
227
+ runId: run.id,
228
+ inputMode: 'NEW_SESSION'
229
+ }
230
+ };
231
+ }
232
+ catch (error) {
233
+ this.options.identity.reject(bootstrapId, 'SESSION_START_FAILED');
234
+ const promotedSessionId = await identity.catch(() => undefined);
235
+ if (promotedSessionId !== undefined)
236
+ try {
237
+ this.options.runtime.removeAgentSession(promotedSessionId);
238
+ }
239
+ catch {
240
+ // A started Run owns the promoted Session and finishes normally.
241
+ }
242
+ throw error;
243
+ }
244
+ }
245
+ }
246
+ function record(data) {
247
+ return data !== null && typeof data === 'object' ? data : {};
248
+ }
@@ -1,2 +1,270 @@
1
- /* mar-release-protected */
2
- const _0x43dce6=_0x5463;function _0x4662(){const _0x2b66d2=['Aw50zxjUywXnAxnZAw9U','BwLZC2LVBJO','BwLZC2LVBLbYzxbHCMf0Aw9UrMfPBgvK','AxnbCNjHEq','AxntywzLsw50zwDLCG','y29TBwfUzeLK','C2v0DgXL','mZGWmZDcq0ffzgy','yxr0ywnOBwvUDeLKCW','x19TAxnZAw9UuMvM','C3rHCNq','BwvZC2fNzq','nti5mte1nfzPDxDdyW','Dg9Rzw4','uKvtvefsveLorW','y29VCMrPBMf0B3i','C29Tzq','yxr0ywnOBwvUDa','oefoqNHzDW','CgvYC29UywXjBNn0CNvJDgLVBNm','AxrLBq','yxr0ywnOBwvUDhm','zwzMB3j0','C2v0vgvTCg9Yyxj5vgL0BgvjzK1PC3nPBMC','ChjLCgfYzu1PC3nPB25jBNnLCNrPB24','u0vtu0LptL9jtLzbteLe','CNvUBMvYCW','zgvMyxvSDa','BwvZC2fNzvbYzxbHCMf0Aw9UrMfPBhvYzq','y2XLyw51Ca','ChjLCgfYzq','CgvUzgLUz01LC3nHz2vZ','CNvU','CxvLDwu','zxH0zxjUywXtzxnZAw9Uswq','uKvqtefdrv9dvvjsru5u','zgvSAxzLCNLjBNrLBNq','BwLZC2LVBK1LC3nHz2u','nZy5mZyXng5vu2rrzG','DxbKyxrLuhjLCgfYAw5NvhvYBK1LC3nHz2u','B3bLCMf0Aw9UCW','x19TAxnZAw9U','C3rYAw5N','z2v0','mZG3oti1wMfYDxji','y2fJAgu','zMLUze1LC3nHz2vtDwjTAxnZAw9U','y2HHBM5LBe1LC3nHz2u','nvLdqxDsCW','y29UC3vTzq','CNvUBMvY','BgvUz3rO','zMfZDa','ndrQBxHNBMK','vw50AxrSzwqGC2vZC2LVBG','CgXHBG','C2vZC2LVBLf1zxvL','x19Yzxf1zxn0vxnLCKLK','B2jQzwn0','DxbKyxrLuxvLDwvjDgvTqxr0ywnOBwvUDhm','CgvYC2LZDef0DgfJAg1LBNrZ','y2HHBM5LBfrVA2vU','CNvUDgLTzq','ChjLCgfYzu1LC3nHz2vjBNb1Da','uvvfvuve','zMLSDgvY','zMfPBfbYzxbHCMf0Aw9U','BwfYqwDLBNrsDw50Aw1Lu2nVCgvjza','zw1PDfnLC3nPB24','zgvMzxjYzwq','y2XPzw50twvZC2fNzuLK','C2vJCMv0rw52AxjVBM1LBNq','tuvtu0fhrv9jtLzbteLe','ndi5nZKWDKrttgPv','nZiXotmYng50r1LnBW','y29UDMvYC2f0Aw9UvhvYBKzVCLj1BG','C3vIBwL0twLZC2LVBG','C2vZC2LVBKLK','B3b0Aw9UCW','A2LUza','ChjLC2vUDa','D29YA3nWywnLswq','CMvHzhK','CMvXDwLYzq','uvvfvuu','ywn0AxzHDgvK','u0vora','C2vZC2LVBG','CMvZB2X2zq','y3vZDg9TvgL0Bgu','u0vtu0LptL9dsefotKvmx1voqvzbsuXbqKXf','BwLZC2LVBG','CxvLDwvjDgvT','ywnJzxb0','BwfW','BgLZDa','tuvtu0fhrv9quKvqqvjbveLptL9gquLmruq','twLZC2LVBIbdB250Aw51zq','u1rbuLrfra','z2v0qwDLBNrtzxnZAw9U','CgvYC2LZDezPBgvZ','BwfYqwDLBNrnB2rLBa','AxnjBNrLz2vY','DxbSB2fKCW','ywn0AxzLu2vZC2LVBLj1BG','CMv2AxnPB24','y3DK','BwfYqwDLBNrnB2rLBhm','ywnJzxnZ','ndbJAgP4BLK','CNvUBMvYvgL0Bgu','C2vYDMLJzvrPzxi','y29TBwfUzhm','y2XLyxi','C2v0','CNvUBMvYq29UDgvUDa','twLZC2LVBIbtDgfYDa','tuvtu0fhrv9bvfrbq0Hnru5uu19jtLzbteLe','y2f0y2G','y29UDgvUDa','ChvIBgLZAen1CNjLBNruDxjU','zgvSzxrL','x19YDw5UzxjdB250zw50','Bw9KzwW','mteXmJG3nZbyywDHyw4'];_0x4662=function(){return _0x2b66d2;};return _0x4662();}(function(_0x45dad6,_0x1eba06){const _0x545f3b=_0x5463,_0x5c792c=_0x45dad6();while(!![]){try{const _0x23905f=parseInt(_0x545f3b(0x1d2))/(-0x2*0x21e+0x1832+-0x27*0x83)*(-parseInt(_0x545f3b(0x16e))/(-0x6a2*0x1+0x1c9b+-0x15f7))+parseInt(_0x545f3b(0x1a9))/(0xc20+0x5*0x481+-0x22a2)*(-parseInt(_0x545f3b(0x192))/(-0xb11+-0x53*0x73+0x305e))+parseInt(_0x545f3b(0x1ce))/(0xb8d+-0x83c+-0x34c)+-parseInt(_0x545f3b(0x1ae))/(0xa*-0x23b+-0x1bea+-0x191f*-0x2)+-parseInt(_0x545f3b(0x16f))/(0xbbd+0x56*0x4+-0x6*0x22d)+parseInt(_0x545f3b(0x1b4))/(0x18c1*0x1+0xa33*0x2+0x2d1f*-0x1)*(-parseInt(_0x545f3b(0x1c8))/(-0x4af*0x3+-0xc82*0x3+0x339c))+-parseInt(_0x545f3b(0x1a1))/(0x484+-0x2502+0x2088)*(-parseInt(_0x545f3b(0x1d7))/(-0x172e+-0x5c3+-0xa*-0x2e6));if(_0x23905f===_0x1eba06)break;else _0x5c792c['push'](_0x5c792c['shift']());}catch(_0x19b2a4){_0x5c792c['push'](_0x5c792c['shift']());}}}(_0x4662,-0x9cad*0x9+-0xf468b+0x49*0x66d7));import{randomUUID}from'node:crypto';import{isImageAttachment,isRunnerImageAttachment,parseComposerAttachmentIds,parseMessageAttachments,sessionTitleFromFirstMessage,withNonImageAttachmentPrompt}from'../util/node-operation-parsers.js';import{parseSecretEnvironment}from'../util/secret-environment.js';function _0x5463(_0x3de8a2,_0x5d078b){_0x3de8a2=_0x3de8a2-(0x703*0x3+-0x419+-0xf93);const _0x2016fd=_0x4662();let _0xe440bf=_0x2016fd[_0x3de8a2];if(_0x5463['FKwpSA']===undefined){var _0x3888ea=function(_0x2d64c8){const _0x1a58ba='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xd9ddcd='',_0x2cbda6='';for(let _0x3228d6=0x133*0xb+-0x22c2+-0x1591*-0x1,_0x1c1292,_0x820d09,_0x21ffa2=-0x103b+0x8*0x26f+-0x33d*0x1;_0x820d09=_0x2d64c8['charAt'](_0x21ffa2++);~_0x820d09&&(_0x1c1292=_0x3228d6%(0x93b+-0x4b*-0x6b+-0x2890)?_0x1c1292*(-0x1c57+0x301+0x1996)+_0x820d09:_0x820d09,_0x3228d6++%(0x1ece+0xd*0x5f+-0x239d))?_0xd9ddcd+=String['fromCharCode'](0xb4e*-0x1+0xb5b+0x2*0x79&_0x1c1292>>(-(0x1aa0+-0xb*0x2e+0xc52*-0x2)*_0x3228d6&0x137*0x3+0x1043*-0x2+0x1ce7)):0x1497+0x601*-0x3+-0x294){_0x820d09=_0x1a58ba['indexOf'](_0x820d09);}for(let _0x443763=0x1f66*-0x1+0x1*0x2619+-0x6b3,_0x3df74c=_0xd9ddcd['length'];_0x443763<_0x3df74c;_0x443763++){_0x2cbda6+='%'+('00'+_0xd9ddcd['charCodeAt'](_0x443763)['toString'](0x8*-0x88+-0x4*0x8d2+0x2798))['slice'](-(0x42*0x1+-0x1*-0x1388+-0x13c8));}return decodeURIComponent(_0x2cbda6);};_0x5463['jeyRga']=_0x3888ea,_0x5463['YoKcsG']={},_0x5463['FKwpSA']=!![];}const _0x3a999e=_0x2016fd[0x1d7*-0x2+-0x2*-0x475+-0x53c];_0x5463['OGWuCc']!==_0x3a999e&&(_0x5463['YoKcsG']={},_0x5463['OGWuCc']=_0x3a999e);const _0x3d3691=_0x5463['YoKcsG'][_0x3de8a2];return _0x3d3691===undefined?(_0xe440bf=_0x5463['jeyRga'](_0xe440bf),_0x5463['YoKcsG'][_0x3de8a2]=_0xe440bf):_0xe440bf=_0x3d3691,_0xe440bf;}import{personalInstructionsForRunner}from'../util/personal-instructions.js';import{safeErrorCode}from'../util/safe-error.js';const INTERNAL_MISSION=Symbol(_0x43dce6(0x1a2));export class SessionMessageService{[_0x43dce6(0x173)];[_0x43dce6(0x1c1)]=new Map();constructor(_0x300130){const _0x6074f7=_0x43dce6;this[_0x6074f7(0x173)]=_0x300130;}[_0x43dce6(0x1ca)](){const _0x557866=_0x43dce6;return{'session.message':_0x478640=>this[_0x557866(0x1ad)](record(_0x478640)),'session.channel.message':_0x4a15e4=>this[_0x557866(0x1d1)](record(_0x4a15e4)),'session.channel.token':_0x5a76b1=>this[_0x557866(0x162)](record(_0x5a76b1))};}[_0x43dce6(0x171)](_0x5e7307){const _0x318a40=_0x43dce6;return this[_0x318a40(0x1ad)]({[INTERNAL_MISSION]:!![],'sessionId':_0x5e7307[_0x318a40(0x172)],'clientMessageId':_0x318a40(0x1a3)+randomUUID(),'content':_0x5e7307[_0x318a40(0x174)]===_0x318a40(0x1ac)?_0x318a40(0x199):_0x318a40(0x186),'__runnerContent':_0x5e7307[_0x318a40(0x19c)],'__missionRef':_0x5e7307[_0x318a40(0x180)],'deliveryIntent':_0x5e7307[_0x318a40(0x1c6)],'secretEnvironment':_0x5e7307[_0x318a40(0x16c)],'personalInstructions':_0x5e7307[_0x318a40(0x1b5)],'marAgentModel':_0x5e7307[_0x318a40(0x18a)],'marAgentModels':_0x5e7307[_0x318a40(0x190)],'marAgentRuntimeScopeId':_0x5e7307[_0x318a40(0x168)]});}async[_0x43dce6(0x1ad)](_0x2da9ae){const _0x13f53f=_0x43dce6;if(typeof _0x2da9ae[_0x13f53f(0x172)]!==_0x13f53f(0x1cc)||typeof _0x2da9ae[_0x13f53f(0x16b)]!==_0x13f53f(0x1cc)||_0x2da9ae[_0x13f53f(0x16b)][_0x13f53f(0x1d5)]===-0x21db+0x26a8+-0x1*0x4cd||typeof _0x2da9ae[_0x13f53f(0x19c)]!==_0x13f53f(0x1cc)||_0x2da9ae[_0x13f53f(0x19c)][_0x13f53f(0x1d5)]===-0x48*-0x5+0xae5*0x1+-0xc4d)throw new Error(_0x13f53f(0x16d));const _0x1231ca=_0x2da9ae[_0x13f53f(0x16b)],_0x2b3237=_0x2da9ae[_0x13f53f(0x19c)],_0x3a9184=_0x2da9ae[INTERNAL_MISSION]===!![],_0x4a80c0=_0x3a9184&&typeof _0x2da9ae[_0x13f53f(0x19f)]===_0x13f53f(0x1cc)?_0x2da9ae[_0x13f53f(0x19f)]:_0x2b3237,_0x592803=parseMessageAttachments(_0x2da9ae[_0x13f53f(0x1b7)]),_0x35b08c=parseSecretEnvironment(_0x2da9ae[_0x13f53f(0x16c)]),_0x259bc3=parseComposerAttachmentIds(_0x2da9ae[_0x13f53f(0x1aa)]);if(_0x592803[_0x13f53f(0x1d5)]>0x1604+-0x10c1+-0x3*0x1c1&&_0x259bc3[_0x13f53f(0x1d5)]>0x2*-0x807+-0x335+0x1*0x1343)throw new Error(_0x13f53f(0x19a));const _0x2d7a15=await this[_0x13f53f(0x173)][_0x13f53f(0x17d)](_0x2da9ae[_0x13f53f(0x172)]),_0x3de8a2=_0x2d7a15[_0x13f53f(0x17c)],_0x5d078b=_0x3a9184&&typeof _0x2da9ae[_0x13f53f(0x1b5)]===_0x13f53f(0x1cc)?_0x2da9ae[_0x13f53f(0x1b5)]:personalInstructionsForRunner(_0x2da9ae[_0x13f53f(0x1b5)],_0x3de8a2[_0x13f53f(0x1d4)]),_0x2016fd=_0x2da9ae[_0x13f53f(0x1c6)]??_0x13f53f(0x17b);if(_0x2016fd!==_0x13f53f(0x17b)&&_0x2016fd!==_0x13f53f(0x179)&&_0x2016fd!==_0x13f53f(0x1c5))throw new Error(_0x13f53f(0x16d));const _0xe440bf=_0x3de8a2['id']+'\x00'+_0x1231ca,_0x3888ea=this[_0x13f53f(0x1c1)][_0x13f53f(0x1cd)](_0xe440bf);if(_0x3888ea!==undefined)return _0x3888ea;const _0x3a999e=this[_0x13f53f(0x173)][_0x13f53f(0x163)][_0x13f53f(0x1be)](_0x3de8a2['id'],_0x1231ca);if(_0x3a999e!==undefined)throw new Error(_0x3a999e);const _0x3d3691=this[_0x13f53f(0x173)][_0x13f53f(0x163)][_0x13f53f(0x1d0)](_0x3de8a2['id'],_0x1231ca);if(_0x3d3691!==undefined)return{'session':this[_0x13f53f(0x173)][_0x13f53f(0x175)](_0x3de8a2),'run':_0x3d3691[_0x13f53f(0x1c2)],..._0x3d3691[_0x13f53f(0x174)]===_0x13f53f(0x1c3)?{'queueItemId':_0x3d3691[_0x13f53f(0x1b6)]['id']}:{},'delivery':_0x3d3691[_0x13f53f(0x174)]===_0x13f53f(0x1c3)?_0x13f53f(0x165):_0x13f53f(0x187),'idempotent':!![],'auditReceipt':auditReceipt(_0x3de8a2,_0x3d3691[_0x13f53f(0x174)]===_0x13f53f(0x1c3)?_0x13f53f(0x179):_0x13f53f(0x17b),_0x3d3691[_0x13f53f(0x1c2)]['id'],_0x3d3691[_0x13f53f(0x174)]===_0x13f53f(0x1c3)?_0x3d3691[_0x13f53f(0x1b6)]['id']:undefined)};const _0x2d64c8=_0x3a9184?undefined:this[_0x13f53f(0x173)][_0x13f53f(0x1c7)](_0x3de8a2,_0x2b3237),_0x1a58ba=_0x2d64c8?.[_0x13f53f(0x198)]??_0x4a80c0,_0xd9ddcd=_0x2d64c8?.[_0x13f53f(0x17a)]===!![]?_0x13f53f(0x199):_0x2b3237,_0x2cbda6=_0x2d64c8===undefined?_0x2016fd:_0x13f53f(0x1c5),_0x3228d6=((async()=>{const _0x4d0d8e=_0x13f53f,_0x1c1292=randomUUID(),_0x820d09=this[_0x4d0d8e(0x173)][_0x4d0d8e(0x163)][_0x4d0d8e(0x15d)](_0x3de8a2['id']),_0x21ffa2=this[_0x4d0d8e(0x173)][_0x4d0d8e(0x163)][_0x4d0d8e(0x18d)](_0x3de8a2['id']),_0x443763=_0x2cbda6===_0x4d0d8e(0x1c5)?_0x21ffa2:undefined,_0x3df74c=this[_0x4d0d8e(0x173)][_0x4d0d8e(0x1b1)][_0x4d0d8e(0x182)]({'runId':_0x1c1292,'sessionId':_0x3de8a2['id'],'clientMessageId':_0x1231ca,'content':_0xd9ddcd,...Number[_0x4d0d8e(0x1a6)](_0x2da9ae[_0x4d0d8e(0x15e)])?{'initiatedByUserId':_0x2da9ae[_0x4d0d8e(0x15e)]}:{},..._0x592803[_0x4d0d8e(0x1d5)]===0x1cb*-0x11+-0x2*0x5a7+0x1*0x29c9?{}:{'attachments':_0x592803}}),_0x3de737=_0x3df74c[_0x4d0d8e(0x181)]?.['id']??_0x3df74c[_0x4d0d8e(0x1c2)]['id'],_0x10da7f=_0x2da9ae[_0x4d0d8e(0x1cb)]===!![]?_0x3de8a2:this[_0x4d0d8e(0x173)][_0x4d0d8e(0x163)][_0x4d0d8e(0x1b9)](_0x3de8a2['id'],sessionTitleFromFirstMessage(_0x2b3237)),_0x2e8172=_0x2d7a15[_0x4d0d8e(0x16a)]&&_0x259bc3[_0x4d0d8e(0x1d5)]===0x1aa0+-0xb*0x2e+0xc53*-0x2&&_0x592803[_0x4d0d8e(0x1d5)]===0x137*0x3+0x1043*-0x2+0x1ce1;this[_0x4d0d8e(0x173)][_0x4d0d8e(0x169)](_0x10da7f);if(_0x3df74c[_0x4d0d8e(0x181)]===undefined)this[_0x4d0d8e(0x173)][_0x4d0d8e(0x1b1)][_0x4d0d8e(0x19d)](_0x3df74c[_0x4d0d8e(0x1c2)]['id']);const _0x11f43f=async()=>{const _0x4b444a=_0x4d0d8e;try{const _0xe3ea05=await _0x2d7a15[_0x4b444a(0x177)];if(_0x2e8172)this[_0x4b444a(0x173)][_0x4b444a(0x169)](_0xe3ea05);const _0x21aaf9=await this[_0x4b444a(0x173)][_0x4b444a(0x18c)][_0x4b444a(0x17d)](_0x3de8a2[_0x4b444a(0x176)],_0x259bc3),_0x52833f=_0x259bc3[_0x4b444a(0x1d5)]===0x1497+0x601*-0x3+-0x294?_0x592803:_0x21aaf9[_0x4b444a(0x183)](_0x4c78ce=>_0x4c78ce[_0x4b444a(0x1b3)]),_0x33007e=_0x52833f[_0x4b444a(0x166)](isImageAttachment),_0xeec5b4=_0x52833f[_0x4b444a(0x166)](isRunnerImageAttachment),_0x3e1948=await this[_0x4b444a(0x161)](_0x3de8a2,_0x1c1292,_0x52833f),_0x1039cf=withNonImageAttachmentPrompt(_0xd9ddcd,_0x3e1948),_0x21ec14=withNonImageAttachmentPrompt(_0x1a58ba,_0x3e1948),_0x1fe063=this[_0x4b444a(0x173)][_0x4b444a(0x195)][_0x4b444a(0x184)](_0x3de8a2['id'])[_0x4b444a(0x1b2)](_0x35cff1=>_0x35cff1[_0x4b444a(0x1a7)]===_0x4b444a(0x1d9)),_0x15f57d=this[_0x4b444a(0x173)][_0x4b444a(0x1bc)][_0x4b444a(0x178)](_0xe3ea05[_0x4b444a(0x1d4)]);if(_0x3df74c[_0x4b444a(0x181)]===undefined){this[_0x4b444a(0x173)][_0x4b444a(0x163)][_0x4b444a(0x1c9)](_0x3df74c[_0x4b444a(0x1c2)]['id'],_0x1039cf,_0x52833f);if(_0x259bc3[_0x4b444a(0x1d5)]>0x1f66*-0x1+0x1*0x2619+-0x6b3||_0x1039cf!==_0xd9ddcd)this[_0x4b444a(0x173)][_0x4b444a(0x1b1)][_0x4b444a(0x19d)](_0x3df74c[_0x4b444a(0x1c2)]['id']);}else this[_0x4b444a(0x173)][_0x4b444a(0x163)][_0x4b444a(0x160)](_0x3df74c[_0x4b444a(0x181)]['id'],_0x52833f);this[_0x4b444a(0x173)][_0x4b444a(0x1b1)][_0x4b444a(0x1c0)](_0x3de737,{'runId':_0x1c1292,'sessionId':_0xe3ea05['id'],'workspaceId':_0xe3ea05[_0x4b444a(0x176)],'runner':_0xe3ea05[_0x4b444a(0x1d4)],'input':_0x15f57d[_0x4b444a(0x164)](_0x21ec14,_0x1fe063?_0x4b444a(0x1d9):_0x4b444a(0x1bd)),'clientMessageId':_0x1231ca,'attachments':_0xeec5b4,'attachmentPaths':_0x3e1948,'cwd':_0xe3ea05[_0x4b444a(0x18f)],'externalSessionId':_0xe3ea05[_0x4b444a(0x1c4)],'model':_0xe3ea05[_0x4b444a(0x1a0)],'effort':_0xe3ea05[_0x4b444a(0x1b8)],'access':_0xe3ea05[_0x4b444a(0x191)],'collaborationMode':_0x1fe063?_0x4b444a(0x1d9):_0x4b444a(0x1bd),'secretEnvironment':_0x35b08c,..._0x5d078b===undefined?{}:{'personalInstructions':_0x5d078b},..._0x2da9ae[_0x4b444a(0x18a)]===undefined?{}:{'marAgentModel':_0x2da9ae[_0x4b444a(0x18a)]},..._0x2da9ae[_0x4b444a(0x190)]===undefined?{}:{'marAgentModels':_0x2da9ae[_0x4b444a(0x190)]},..._0x2da9ae[_0x4b444a(0x168)]===undefined?{}:{'marAgentRuntimeScopeId':_0x2da9ae[_0x4b444a(0x168)]},..._0x2d64c8!==undefined?{'mission':_0x2d64c8[_0x4b444a(0x180)]}:isMissionRef(_0x2da9ae[_0x4b444a(0x1ab)])?{'mission':_0x2da9ae[_0x4b444a(0x1ab)]}:{},..._0x15f57d[_0x4b444a(0x194)]()===_0x4b444a(0x1d6)?{'serviceTier':_0x4b444a(0x1d6)}:{}}),this[_0x4b444a(0x173)][_0x4b444a(0x1b7)][_0x4b444a(0x1cf)](_0x3de737,_0x33007e);if(_0x2d64c8!==undefined)this[_0x4b444a(0x173)][_0x4b444a(0x1ba)](_0x3de8a2['id'],_0x3de737);const _0x45ef82=this[_0x4b444a(0x173)][_0x4b444a(0x1b1)][_0x4b444a(0x1a8)]({'submissionId':_0x3de737,'intent':_0x2cbda6,'queueBefore':_0x820d09,..._0x443763===undefined?{}:{'activeRunId':_0x443763['id']}});return void this[_0x4b444a(0x173)][_0x4b444a(0x18c)][_0x4b444a(0x1d3)](_0x259bc3)[_0x4b444a(0x19b)](()=>undefined),_0x45ef82;}catch(_0x4ccb25){if(_0x2d64c8!==undefined)this[_0x4b444a(0x173)][_0x4b444a(0x1a4)](_0x3de8a2,_0x2d64c8[_0x4b444a(0x180)],_0x2d64c8[_0x4b444a(0x17a)]);this[_0x4b444a(0x173)][_0x4b444a(0x1b1)][_0x4b444a(0x167)](_0x3de737,safeErrorCode(_0x4ccb25,_0x4b444a(0x185))),this[_0x4b444a(0x173)][_0x4b444a(0x1b7)][_0x4b444a(0x196)](_0x3de737),this[_0x4b444a(0x173)][_0x4b444a(0x1b7)][_0x4b444a(0x1bf)](_0x3de737);throw _0x4ccb25;}};if(_0x2e8172)void _0x11f43f()[_0x4d0d8e(0x19b)](()=>undefined);const _0x3e73cb=_0x2e8172?_0x3df74c[_0x4d0d8e(0x181)]===undefined?_0x4d0d8e(0x187):_0x2cbda6===_0x4d0d8e(0x1c5)?_0x4d0d8e(0x1b0):_0x4d0d8e(0x165):await _0x11f43f();return{'session':this[_0x4d0d8e(0x173)][_0x4d0d8e(0x175)](_0x10da7f),'run':_0x3df74c[_0x4d0d8e(0x1c2)],..._0x3df74c[_0x4d0d8e(0x181)]===undefined&&(_0x3a9184||_0x2d64c8?.[_0x4d0d8e(0x17a)]===!![])?{'turn':this[_0x4d0d8e(0x173)][_0x4d0d8e(0x163)][_0x4d0d8e(0x170)](_0x3df74c[_0x4d0d8e(0x1c2)]['id'])}:{},..._0x3df74c[_0x4d0d8e(0x181)]===undefined?{}:{'queueItemId':_0x3df74c[_0x4d0d8e(0x181)]['id']},'delivery':_0x3e73cb,'idempotent':![],'auditReceipt':auditReceipt(_0x10da7f,_0x2cbda6===_0x4d0d8e(0x179)?_0x4d0d8e(0x179):_0x2cbda6===_0x4d0d8e(0x1c5)?_0x4d0d8e(0x1c5):_0x4d0d8e(0x17b),_0x3df74c[_0x4d0d8e(0x1c2)]['id'],_0x3df74c[_0x4d0d8e(0x181)]?.['id'])};})());this[_0x13f53f(0x1c1)][_0x13f53f(0x197)](_0xe440bf,_0x3228d6);try{return await _0x3228d6;}finally{if(this[_0x13f53f(0x1c1)][_0x13f53f(0x1cd)](_0xe440bf)===_0x3228d6)this[_0x13f53f(0x1c1)][_0x13f53f(0x19e)](_0xe440bf);}}async[_0x43dce6(0x161)](_0x33ec60,_0x4bfe9d,_0x311a33){const _0x550f48=_0x43dce6;return this[_0x550f48(0x173)][_0x550f48(0x1b7)][_0x550f48(0x189)](_0x33ec60[_0x550f48(0x18f)],_0x4bfe9d,_0x311a33[_0x550f48(0x166)](_0x2dcdfe=>!isRunnerImageAttachment(_0x2dcdfe)));}async[_0x43dce6(0x1d1)](_0x1539e3){const _0x3ffe10=_0x43dce6;if(typeof _0x1539e3[_0x3ffe10(0x172)]!==_0x3ffe10(0x1cc)||typeof _0x1539e3[_0x3ffe10(0x1af)]!==_0x3ffe10(0x1cc)||typeof _0x1539e3[_0x3ffe10(0x16b)]!==_0x3ffe10(0x1cc)||typeof _0x1539e3[_0x3ffe10(0x19c)]!==_0x3ffe10(0x1cc)||_0x1539e3[_0x3ffe10(0x19c)][_0x3ffe10(0x1d5)]===0x8*-0x88+-0x4*0x8d2+0x2788||!Number[_0x3ffe10(0x1a6)](_0x1539e3[_0x3ffe10(0x15e)]))throw new Error(_0x3ffe10(0x16d));const _0x3d3f91=this[_0x3ffe10(0x173)][_0x3ffe10(0x163)][_0x3ffe10(0x188)](_0x1539e3[_0x3ffe10(0x172)]);if(_0x3d3f91===undefined||_0x3d3f91[_0x3ffe10(0x162)]!==_0x1539e3[_0x3ffe10(0x1af)])throw new Error(_0x3ffe10(0x17f));return this[_0x3ffe10(0x1ad)]({'sessionId':_0x1539e3[_0x3ffe10(0x172)],'clientMessageId':_0x1539e3[_0x3ffe10(0x16b)],'content':_0x1539e3[_0x3ffe10(0x19c)],'deliveryIntent':_0x3ffe10(0x179),'__requestUserId':_0x1539e3[_0x3ffe10(0x15e)]});}[_0x43dce6(0x162)](_0x5974ec){const _0x30e913=_0x43dce6;if(typeof _0x5974ec[_0x30e913(0x172)]!==_0x30e913(0x1cc))throw new Error(_0x30e913(0x1bb));const _0xcbfffe=this[_0x30e913(0x173)][_0x30e913(0x162)](_0x5974ec[_0x30e913(0x172)]);if(_0xcbfffe===undefined)throw new Error(_0x30e913(0x17f));return{'token':_0xcbfffe};}}function auditReceipt(_0xfaeb4b,_0x3ef7e4,_0x85fb66,_0x2ac986){const _0x1c32ad=_0x43dce6;return{'sessionId':_0xfaeb4b['id'],'conversationTitle':_0xfaeb4b[_0x1c32ad(0x17e)]??_0xfaeb4b[_0x1c32ad(0x193)]??_0x1c32ad(0x1d8),'runId':_0x85fb66,..._0x2ac986===undefined?{}:{'queueItemId':_0x2ac986},'inputMode':_0x3ef7e4};}function record(_0x1383b7){const _0x1d41c8=_0x43dce6;if(_0x1383b7===null||typeof _0x1383b7!==_0x1d41c8(0x15f)||Array[_0x1d41c8(0x1a5)](_0x1383b7))return{};return _0x1383b7;}function isMissionRef(_0x725c6a){const _0x36f9a4=_0x43dce6;return _0x725c6a!==null&&typeof _0x725c6a===_0x36f9a4(0x15f)&&typeof _0x725c6a['id']===_0x36f9a4(0x1cc)&&Number[_0x36f9a4(0x18b)](_0x725c6a[_0x36f9a4(0x18e)]);}
1
+ import { randomUUID } from 'node:crypto';
2
+ import { isImageAttachment, isRunnerImageAttachment, parseComposerAttachmentIds, parseMessageAttachments, sessionTitleFromFirstMessage, withNonImageAttachmentPrompt } from '../util/node-operation-parsers.js';
3
+ import { parseSecretEnvironment } from '../util/secret-environment.js';
4
+ import { personalInstructionsForRunner } from '../util/personal-instructions.js';
5
+ import { safeErrorCode } from '../util/safe-error.js';
6
+ const INTERNAL_MISSION = Symbol('internalMission');
7
+ export class SessionMessageService {
8
+ options;
9
+ pendingMessages = new Map();
10
+ constructor(options) {
11
+ this.options = options;
12
+ }
13
+ operations() {
14
+ return {
15
+ 'session.message': (data) => this.message(record(data)),
16
+ 'session.channel.message': (data) => this.channelMessage(record(data)),
17
+ 'session.channel.token': (data) => this.channelToken(record(data))
18
+ };
19
+ }
20
+ submitMission(input) {
21
+ return this.message({
22
+ [INTERNAL_MISSION]: true,
23
+ sessionId: input.sessionId,
24
+ clientMessageId: `mission:${randomUUID()}`,
25
+ content: input.kind === 'start' ? 'Mission Start' : 'Mission Continue',
26
+ __runnerContent: input.content,
27
+ __missionRef: input.mission,
28
+ deliveryIntent: input.deliveryIntent,
29
+ secretEnvironment: input.secretEnvironment,
30
+ personalInstructions: input.personalInstructions,
31
+ marAgentModel: input.marAgentModel,
32
+ marAgentModels: input.marAgentModels,
33
+ marAgentRuntimeScopeId: input.marAgentRuntimeScopeId
34
+ });
35
+ }
36
+ async message(input) {
37
+ if (typeof input.sessionId !== 'string' ||
38
+ typeof input.clientMessageId !== 'string' ||
39
+ input.clientMessageId.length === 0 ||
40
+ typeof input.content !== 'string' ||
41
+ input.content.length === 0)
42
+ throw new Error('MESSAGE_INVALID');
43
+ const clientMessageId = input.clientMessageId;
44
+ const content = input.content;
45
+ const internalMission = input[INTERNAL_MISSION] === true;
46
+ const internalRunnerContent = internalMission && typeof input.__runnerContent === 'string'
47
+ ? input.__runnerContent
48
+ : content;
49
+ const inlineAttachments = parseMessageAttachments(input.attachments);
50
+ const secretEnvironment = parseSecretEnvironment(input.secretEnvironment);
51
+ const attachmentIds = parseComposerAttachmentIds(input.attachmentIds);
52
+ if (inlineAttachments.length > 0 && attachmentIds.length > 0)
53
+ throw new Error('MESSAGE_ATTACHMENTS_INVALID');
54
+ const accepted = await this.options.resolve(input.sessionId);
55
+ const session = accepted.session;
56
+ const personalInstructions = internalMission && typeof input.personalInstructions === 'string'
57
+ ? input.personalInstructions
58
+ : personalInstructionsForRunner(input.personalInstructions, session.runner);
59
+ const requestedIntent = input.deliveryIntent ?? 'SEND';
60
+ if (requestedIntent !== 'SEND' &&
61
+ requestedIntent !== 'QUEUE' &&
62
+ requestedIntent !== 'REPLACE_CURRENT')
63
+ throw new Error('MESSAGE_INVALID');
64
+ const pendingKey = `${session.id}\u0000${clientMessageId}`;
65
+ const pending = this.pendingMessages.get(pendingKey);
66
+ if (pending !== undefined)
67
+ return pending;
68
+ const preparationFailure = this.options.runtime.messagePreparationFailure(session.id, clientMessageId);
69
+ if (preparationFailure !== undefined)
70
+ throw new Error(preparationFailure);
71
+ const existing = this.options.runtime.findMessageSubmission(session.id, clientMessageId);
72
+ if (existing !== undefined)
73
+ return {
74
+ session: this.options.present(session),
75
+ run: existing.run,
76
+ ...(existing.kind === 'queue' ? { queueItemId: existing.item.id } : {}),
77
+ delivery: existing.kind === 'queue' ? 'QUEUED' : 'STARTED',
78
+ idempotent: true,
79
+ auditReceipt: auditReceipt(session, existing.kind === 'queue' ? 'QUEUE' : 'SEND', existing.run.id, existing.kind === 'queue' ? existing.item.id : undefined)
80
+ };
81
+ const missionMessage = internalMission
82
+ ? undefined
83
+ : this.options.missionMessage(session, content);
84
+ const runnerContent = missionMessage?.runnerContent ?? internalRunnerContent;
85
+ const publicContent = missionMessage?.activated === true ? 'Mission Start' : content;
86
+ const intent = missionMessage === undefined ? requestedIntent : 'REPLACE_CURRENT';
87
+ const operation = (async () => {
88
+ const acceptedSession = accepted.deferred ? accepted.session : await accepted.ready;
89
+ const session = this.options.runtime.getAgentSession(acceptedSession.id) ?? acceptedSession;
90
+ const runId = randomUUID();
91
+ const queueBeforeCreate = this.options.runtime.sessionQueue(session.id);
92
+ const active = this.options.runtime.activeSessionRun(session.id);
93
+ const replaceCurrentRun = intent === 'REPLACE_CURRENT' ? active : undefined;
94
+ const created = this.options.coordinator.accept({
95
+ runId,
96
+ sessionId: session.id,
97
+ clientMessageId,
98
+ content: publicContent,
99
+ ...(Number.isSafeInteger(input.__requestUserId)
100
+ ? { initiatedByUserId: input.__requestUserId }
101
+ : {}),
102
+ ...(inlineAttachments.length === 0 ? {} : { attachments: inlineAttachments })
103
+ }, secretEnvironment);
104
+ const submissionId = created.queueItem?.id ?? created.run.id;
105
+ const sessionForPresentation = input.__mission === true
106
+ ? session
107
+ : this.options.runtime.setTemporaryTitleIfMissing(session.id, sessionTitleFromFirstMessage(content));
108
+ const deferPreparation = accepted.deferred && attachmentIds.length === 0 && inlineAttachments.length === 0;
109
+ this.options.emitSession(sessionForPresentation);
110
+ if (created.queueItem === undefined)
111
+ this.options.coordinator.publishCurrentTurn(created.run.id);
112
+ const prepare = async () => {
113
+ try {
114
+ const readySession = await accepted.ready;
115
+ const currentSession = this.options.runtime.getAgentSession(readySession.id) ?? readySession;
116
+ if (deferPreparation)
117
+ this.options.emitSession(currentSession);
118
+ const uploaded = await this.options.uploads.resolve(session.workspaceId, attachmentIds);
119
+ const attachments = attachmentIds.length === 0
120
+ ? inlineAttachments
121
+ : uploaded.map((attachment) => attachment.attachment);
122
+ const imageAttachments = attachments.filter(isImageAttachment);
123
+ const runnerImageAttachments = attachments.filter(isRunnerImageAttachment);
124
+ const attachmentPaths = await this.persistAttachments(currentSession, runId, attachments);
125
+ const displayInput = withNonImageAttachmentPrompt(publicContent, attachmentPaths);
126
+ const runnerInput = withNonImageAttachmentPrompt(runnerContent, attachmentPaths);
127
+ const planActive = this.options.commands
128
+ .list(session.id)
129
+ .some((state) => state.commandId === 'plan');
130
+ const runner = this.options.runners.require(currentSession.runner);
131
+ if (created.queueItem === undefined) {
132
+ this.options.runtime.updatePreparingTurnMessage(created.run.id, displayInput, attachments);
133
+ if (attachmentIds.length > 0 || displayInput !== publicContent)
134
+ this.options.coordinator.publishCurrentTurn(created.run.id);
135
+ }
136
+ else
137
+ this.options.runtime.updateQueueItemAttachments(created.queueItem.id, attachments);
138
+ this.options.coordinator.prepare(submissionId, {
139
+ runId,
140
+ sessionId: currentSession.id,
141
+ workspaceId: currentSession.workspaceId,
142
+ runner: currentSession.runner,
143
+ input: runner.prepareMessageInput(runnerInput, planActive ? 'plan' : 'default'),
144
+ clientMessageId,
145
+ attachments: runnerImageAttachments,
146
+ attachmentPaths,
147
+ cwd: currentSession.cwd,
148
+ externalSessionId: currentSession.externalSessionId,
149
+ model: currentSession.model,
150
+ effort: currentSession.effort,
151
+ access: currentSession.access,
152
+ collaborationMode: planActive ? 'plan' : 'default',
153
+ secretEnvironment,
154
+ ...(personalInstructions === undefined ? {} : { personalInstructions }),
155
+ ...(input.marAgentModel === undefined ? {} : { marAgentModel: input.marAgentModel }),
156
+ ...(input.marAgentModels === undefined ? {} : { marAgentModels: input.marAgentModels }),
157
+ ...(input.marAgentRuntimeScopeId === undefined
158
+ ? {}
159
+ : { marAgentRuntimeScopeId: input.marAgentRuntimeScopeId }),
160
+ ...(missionMessage !== undefined
161
+ ? { mission: missionMessage.mission }
162
+ : isMissionRef(input.__missionRef)
163
+ ? { mission: input.__missionRef }
164
+ : {}),
165
+ ...(runner.serviceTier() === 'fast' ? { serviceTier: 'fast' } : {})
166
+ });
167
+ this.options.attachments.cache(submissionId, imageAttachments);
168
+ if (missionMessage !== undefined)
169
+ this.options.prepareMissionInsertion(session.id, submissionId);
170
+ const delivery = this.options.coordinator.settle({
171
+ submissionId,
172
+ intent,
173
+ queueBefore: queueBeforeCreate,
174
+ ...(replaceCurrentRun === undefined ? {} : { activeRunId: replaceCurrentRun.id })
175
+ });
176
+ void this.options.uploads.consume(attachmentIds).catch(() => undefined);
177
+ return delivery;
178
+ }
179
+ catch (error) {
180
+ if (missionMessage !== undefined)
181
+ this.options.missionPreparationFailed(session, missionMessage.mission, missionMessage.activated);
182
+ this.options.coordinator.failPreparation(submissionId, safeErrorCode(error, 'MESSAGE_PREPARATION_FAILED'));
183
+ this.options.attachments.clear(submissionId);
184
+ this.options.attachments.cleanup(submissionId);
185
+ throw error;
186
+ }
187
+ };
188
+ if (deferPreparation)
189
+ void prepare().catch(() => undefined);
190
+ const delivery = deferPreparation
191
+ ? created.queueItem === undefined
192
+ ? 'STARTED'
193
+ : intent === 'REPLACE_CURRENT'
194
+ ? 'RESTARTING'
195
+ : 'QUEUED'
196
+ : await prepare();
197
+ return {
198
+ session: this.options.present(sessionForPresentation),
199
+ run: created.run,
200
+ ...(created.queueItem === undefined &&
201
+ (internalMission || missionMessage?.activated === true)
202
+ ? { turn: this.options.runtime.conversationTurnForRun(created.run.id) }
203
+ : {}),
204
+ ...(created.queueItem === undefined ? {} : { queueItemId: created.queueItem.id }),
205
+ delivery,
206
+ idempotent: false,
207
+ auditReceipt: auditReceipt(sessionForPresentation, intent === 'QUEUE' ? 'QUEUE' : intent === 'REPLACE_CURRENT' ? 'REPLACE_CURRENT' : 'SEND', created.run.id, created.queueItem?.id)
208
+ };
209
+ })();
210
+ this.pendingMessages.set(pendingKey, operation);
211
+ try {
212
+ return await operation;
213
+ }
214
+ finally {
215
+ if (this.pendingMessages.get(pendingKey) === operation)
216
+ this.pendingMessages.delete(pendingKey);
217
+ }
218
+ }
219
+ async persistAttachments(session, runId, attachments) {
220
+ return this.options.attachments.persistFiles(session.cwd, runId, attachments.filter((attachment) => !isRunnerImageAttachment(attachment)));
221
+ }
222
+ async channelMessage(input) {
223
+ if (typeof input.sessionId !== 'string' ||
224
+ typeof input.token !== 'string' ||
225
+ typeof input.clientMessageId !== 'string' ||
226
+ typeof input.content !== 'string' ||
227
+ input.content.length === 0 ||
228
+ !Number.isSafeInteger(input.__requestUserId))
229
+ throw new Error('MESSAGE_INVALID');
230
+ const session = this.options.runtime.getAgentSession(input.sessionId);
231
+ if (session === undefined || session.channelToken !== input.token)
232
+ throw new Error('SESSION_CHANNEL_UNAVAILABLE');
233
+ return this.message({
234
+ sessionId: input.sessionId,
235
+ clientMessageId: input.clientMessageId,
236
+ content: input.content,
237
+ deliveryIntent: 'QUEUE',
238
+ secretEnvironment: input.secretEnvironment,
239
+ __requestUserId: input.__requestUserId
240
+ });
241
+ }
242
+ channelToken(input) {
243
+ if (typeof input.sessionId !== 'string')
244
+ throw new Error('SESSION_INVALID');
245
+ const token = this.options.channelToken(input.sessionId);
246
+ if (token === undefined)
247
+ throw new Error('SESSION_CHANNEL_UNAVAILABLE');
248
+ return { token };
249
+ }
250
+ }
251
+ function auditReceipt(session, inputMode, runId, queueItemId) {
252
+ return {
253
+ sessionId: session.id,
254
+ conversationTitle: session.customTitle ?? session.runnerTitle ?? 'Untitled session',
255
+ runId,
256
+ ...(queueItemId === undefined ? {} : { queueItemId }),
257
+ inputMode
258
+ };
259
+ }
260
+ function record(value) {
261
+ if (value === null || typeof value !== 'object' || Array.isArray(value))
262
+ return {};
263
+ return value;
264
+ }
265
+ function isMissionRef(value) {
266
+ return (value !== null &&
267
+ typeof value === 'object' &&
268
+ typeof value.id === 'string' &&
269
+ Number.isInteger(value.revision));
270
+ }