@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,248 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
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
|
+
}
|