@robota-sdk/agent-transport 3.0.0-beta.82 → 3.0.0-beta.84
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/CHANGELOG.md +795 -0
- package/README.md +80 -118
- package/dist/browser/client.d.ts +2 -2
- package/dist/browser/client.js +1 -1
- package/dist/browser/index.d.ts +87 -13
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +1 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/observer-messages-CEeisRaF.js +2 -0
- package/dist/browser/observer-messages-CEeisRaF.js.map +1 -0
- package/dist/browser/observer-messages-Dnff2Tdb.d.ts +471 -0
- package/dist/browser/observer-messages-Dnff2Tdb.d.ts.map +1 -0
- package/dist/node/index.cjs +1 -1
- package/dist/node/index.d.cts +308 -16
- package/dist/node/index.d.cts.map +1 -1
- package/dist/node/index.d.ts +308 -16
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +1 -1
- package/dist/node/index.js.map +1 -1
- package/dist/node/node.cjs +1 -1
- package/dist/node/node.d.cts +69 -1
- package/dist/node/node.d.cts.map +1 -1
- package/dist/node/node.d.ts +70 -2
- package/dist/node/node.d.ts.map +1 -1
- package/dist/node/node.js +1 -1
- package/dist/node/node.js.map +1 -1
- package/package.json +17 -14
- package/src/__tests__/bearer-resource-gate.test.ts +120 -0
- package/src/__tests__/history-attached-budget.test.ts +216 -0
- package/src/__tests__/message-decoders.test.ts +496 -6
- package/src/__tests__/project-read-messages.test.ts +118 -0
- package/src/__tests__/session-detail-loop-status.test.ts +169 -0
- package/src/__tests__/session-directory-messages.test.ts +322 -0
- package/src/__tests__/session-error-classification.test.ts +113 -0
- package/src/__tests__/session-history-wire.test.ts +342 -0
- package/src/__tests__/session-message-handler-observe.test.ts +217 -0
- package/src/__tests__/session-message-handler.test.ts +139 -4
- package/src/__tests__/settings-messages.test.ts +193 -0
- package/src/__tests__/ws-broadcast-events.test.ts +10 -0
- package/src/client.ts +9 -1
- package/src/index.ts +18 -2
- package/src/loop-control-messages.ts +34 -0
- package/src/message-decoders.ts +238 -6
- package/src/node/bearer-resource-gate.ts +291 -0
- package/src/node/index.ts +13 -0
- package/src/observer-messages.ts +47 -0
- package/src/open-prompts.ts +76 -0
- package/src/outbound-delivery.ts +11 -2
- package/src/project-read-messages.ts +74 -0
- package/src/protocol-session.ts +23 -1
- package/src/session-directory-messages.ts +162 -0
- package/src/session-error-classification.ts +91 -0
- package/src/session-events.ts +100 -19
- package/src/session-message-handler.ts +110 -15
- package/src/session-query-messages.ts +123 -5
- package/src/session-resume-bridge.ts +8 -0
- package/src/settings-messages.ts +103 -0
- package/src/wire-messages.ts +238 -11
- package/dist/browser/message-decoders-BB8n-H2X.d.ts +0 -252
- package/dist/browser/message-decoders-BB8n-H2X.d.ts.map +0 -1
- package/dist/browser/message-decoders-CDmDoZPR.js +0 -2
- package/dist/browser/message-decoders-CDmDoZPR.js.map +0 -1
package/dist/node/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function e(e,t,o){if(o.type===`get-background-tasks`){t({type:`background_tasks`,tasks:e.listBackgroundTasks(o.filter)});return}if(o.type===`get-background-task`){n(e,t,o);return}if(o.type===`get-background-job-groups`){t({type:`background_job_groups`,groups:e.listBackgroundJobGroups()});return}if(o.type===`get-background-job-group`){i(e,t,o);return}if(o.type===`wait-background-job-group`){a(e,t,o);return}r(e,t,o)}function t(e,t,n){if(!n.taskId){t({type:`protocol_error`,message:`taskId is required`});return}if(n.type===`cancel-background-task`){s(t,`cancel`,n.taskId,e.cancelBackgroundTask(n.taskId,n.reason));return}if(n.type===`close-background-task`){s(t,`close`,n.taskId,e.closeBackgroundTask(n.taskId));return}o(e,t,n)}function n(e,t,n){if(!n.taskId){t({type:`protocol_error`,message:`taskId is required`});return}t({type:`background_task`,taskId:n.taskId,task:e.getBackgroundTask(n.taskId)??null})}function r(e,t,n){if(!n.taskId){t({type:`protocol_error`,message:`taskId is required`});return}e.readBackgroundTaskLog(n.taskId,n.cursor).then(e=>t({type:`background_task_log`,taskId:n.taskId,page:e}),e=>t({type:`protocol_error`,message:e.message}))}function i(e,t,n){if(!n.groupId){t({type:`protocol_error`,message:`groupId is required`});return}t({type:`background_job_group`,groupId:n.groupId,group:e.getBackgroundJobGroup(n.groupId)??null})}function a(e,t,n){if(!n.groupId){t({type:`protocol_error`,message:`groupId is required`});return}e.waitBackgroundJobGroup(n.groupId).then(e=>t({type:`background_job_group`,groupId:n.groupId,group:e}),e=>t({type:`protocol_error`,message:e.message}))}function o(e,t,n){if(!n.input){t({type:`protocol_error`,message:`input is required`});return}s(t,`send`,n.taskId,e.sendBackgroundTask(n.taskId,n.input))}function s(e,t,n,r){r.then(()=>e({type:`background_task_control_result`,action:t,taskId:n,success:!0}),r=>e({type:`background_task_control_result`,action:t,taskId:n,success:!1,message:r.message}))}const c=4*1024*1024;function l(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const u=e=>typeof e==`string`,d=e=>typeof e==`string`&&e.length>0,f=e=>typeof e==`boolean`,p=e=>typeof e==`number`&&Number.isFinite(e),m=e=>t=>t===void 0||e(t),h=e=>Array.isArray(e)&&e.every(l),g=e=>e===null||l(e),_=e=>t=>typeof t==`string`&&e.includes(t),v=[`agent`,`process`,`scheduled`],y=[`foreground`,`background`],b=[`queued`,`running`,`waiting_permission`,`sleeping`,`paused`,`completed`,`failed`,`cancelled`],x=[`cancel`,`close`,`send`],S={submit:{prompt:d},command:{name:d,args:m(u)},abort:{},"cancel-queue":{},"get-messages":{},"get-context":{},"get-usage-report":{},"get-personal-usage-report":{requestId:d,period:_([`7d`,`30d`]),timezone:d},"get-stored-session-usage-report":{requestId:d,sessionId:d},"get-executing":{},"get-pending":{},"get-execution-workspace":{},"get-background-tasks":{filter:m(e=>l(e)&&m(_(v))(e.kind)&&m(_(b))(e.status)&&m(_(y))(e.mode)&&m(f)(e.includeClosed))},"get-background-task":{taskId:d},"get-background-job-groups":{},"get-background-job-group":{groupId:d},"wait-background-job-group":{groupId:d},"cancel-background-task":{taskId:d,reason:m(u)},"close-background-task":{taskId:d},"send-background-task":{taskId:d,input:e=>l(e)&&m(u)(e.prompt)&&m(u)(e.stdin)},"read-background-task-log":{taskId:d,cursor:m(e=>l(e)&&p(e.offset))},"permission-response":{id:d,result:e=>f(e)||e===`allow-session`||e===`allow-project`},"ask-response":{id:d,response:e=>l(e)&&(e.type===`answer`&&Array.isArray(e.values)&&e.values.every(u)&&m(u)(e.text)||e.type===`cancelled`&&e.values===void 0&&e.text===void 0)},resume:{lastSeq:p},ack:{seq:p}},C={driverId:m(u)},ee={text_delta:{delta:u,...C},user_message:{content:u,...C},tool_start:{state:l,...C},tool_end:{state:l,...C},thinking:{isThinking:f,...C},complete:{result:l,...C},interrupted:{result:l,...C},error:{message:u,...C},command_result:{name:u,message:u,success:f},messages:{messages:h},context:{state:l},usage_report:{report:l},personal_usage_report:{requestId:d,report:l},personal_usage_report_error:{requestId:d,code:_([`not_available`,`report_failed`]),message:u},stored_session_usage_report:{requestId:d,sessionId:d,report:l},stored_session_usage_report_error:{requestId:d,sessionId:d,code:_([`not_available`,`report_failed`]),message:u},executing:{executing:f},pending:{pending:e=>e===null||u(e)},execution_workspace_event:{snapshot:l},background_task_event:{event:l},background_job_group_event:{event:l},plan_event:{event:l},context_file_refreshed:{event:l},branch_event:{event:l},background_tasks:{tasks:h},background_task:{taskId:u,task:g},background_job_groups:{groups:h},background_job_group:{groupId:u,group:g},background_task_log:{taskId:u,page:l},permission_request:{event:l},ask_request:{event:l},prompt_resolved:{event:l},ui_intent:{event:l},session_renamed:{event:l},history_cleared:{},background_task_control_result:{action:_(x),taskId:u,success:f,message:m(u)},protocol_error:{message:u},resume_gap:{}};function w(e,t,n){if(!l(e))return{ok:!1,reason:`message must be a JSON object`};let r=e.type;if(!u(r))return{ok:!1,reason:`message type must be a string`};let i=Object.prototype.hasOwnProperty.call(t,r)?t[r]:void 0;if(i===void 0)return{ok:!1,reason:`Unknown message type: ${r}`};for(let[t,r]of Object.entries(i))if(!r(e[t]))return{ok:!1,reason:n(t)};return{ok:!0,message:e}}function T(e){return w(e,S,e=>e===`prompt`?`prompt must be a non-empty string`:`${e} has an invalid shape`)}function te(e){return w(e,ee,e=>`${e} has an invalid shape`)}function E(e,t){if(e.length>4194304)return{ok:!1,reason:`Frame too large`};let n;try{n=JSON.parse(e)}catch{return{ok:!1,reason:`Invalid JSON`}}return t(n)}function ne(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function D(e){return typeof e==`string`&&e.length>0?e:void 0}function re(e){if(!(new TextEncoder().encode(e).byteLength>4194304))try{let t=JSON.parse(e);if(!ne(t))return;let n=D(t.requestId);if(!n)return;if(t.type===`get-personal-usage-report`)return{type:`personal`,requestId:n};let r=D(t.sessionId);return t.type===`get-stored-session-usage-report`&&r?{type:`stored-session`,requestId:n,sessionId:r}:void 0}catch{return}}function ie(e,t,n,r){return n.type===`get-personal-usage-report`?(se(t,n,r.personalUsageReporter),!0):n.type===`get-stored-session-usage-report`?(oe(t,n,r.storedSessionUsageReporter),!0):n.type===`get-usage-report`?(ae(e,t,r.usageReporter),!0):!1}function ae(e,t,n){if(!n){t({type:`protocol_error`,message:`Per-session usage reporting is not available on this host.`});return}try{Promise.resolve(n(e)).then(e=>t({type:`usage_report`,report:e}),e=>t({type:`protocol_error`,message:A(e)}))}catch(e){t({type:`protocol_error`,message:A(e instanceof Error?e:String(e))})}}function oe(e,t,n){if(!n){O(e,t,`not_available`,`Stored-session usage reporting is not available on this host.`);return}try{Promise.resolve(n(t.sessionId)).then(n=>e({type:`stored_session_usage_report`,requestId:t.requestId,sessionId:t.sessionId,report:n}),n=>O(e,t,`report_failed`,A(n)))}catch(n){O(e,t,`report_failed`,A(n instanceof Error?n:String(n)))}}function O(e,t,n,r){e({type:`stored_session_usage_report_error`,requestId:t.requestId,sessionId:t.sessionId,code:n,message:r})}function se(e,t,n){if(!n){k(e,t.requestId,`not_available`,`Personal usage reporting is not available on this host.`);return}try{Promise.resolve(n({period:t.period,timezone:t.timezone})).then(n=>e({type:`personal_usage_report`,requestId:t.requestId,report:n}),n=>k(e,t.requestId,`report_failed`,A(n)))}catch(n){k(e,t.requestId,`report_failed`,A(n instanceof Error?n:String(n)))}}function k(e,t,n,r){e({type:`personal_usage_report_error`,requestId:t,code:n,message:r})}function A(e){return e instanceof Error?e.message:String(e)}function j(e,t){let n=E(e,T);if(n.ok)return n.message;let r=re(e);return r?.type===`personal`?(t({type:`personal_usage_report_error`,requestId:r.requestId,code:`report_failed`,message:`Invalid personal usage report request.`}),null):r?.type===`stored-session`?(t({type:`stored_session_usage_report_error`,requestId:r.requestId,sessionId:r.sessionId,code:`report_failed`,message:`Invalid stored-session usage report request.`}),null):(t({type:`protocol_error`,message:n.reason}),null)}const ce={text_delta:`forwarded`,tool_start:`forwarded`,tool_end:`forwarded`,thinking:`forwarded`,complete:`forwarded`,error:`forwarded`,context_update:`non-surface`,compact:`non-surface`,interrupted:`forwarded`,skill_activation:`non-surface`,background_task_event:`forwarded`,background_job_group_event:`forwarded`,execution_workspace_event:`forwarded`,user_message:`forwarded`,turn_source:`non-surface`,context_file_refreshed:`forwarded`,memory_event:`non-surface`,goal_event:`non-surface`,plan_event:`forwarded`,branch_event:`forwarded`,permission_request:`forwarded`,ask_request:`forwarded`,prompt_resolved:`forwarded`,ui_intent:`requester-routed`,session_renamed:`forwarded`,history_cleared:`forwarded`};function M(e,t,n={}){let r=()=>{let t=e.getActiveDriverId();return t?{driverId:t}:{}},i=e=>t({type:`user_message`,content:e,...r()}),a=e=>t({type:`text_delta`,delta:e,...r()}),o=e=>t({type:`tool_start`,state:e,...r()}),s=e=>t({type:`tool_end`,state:e,...r()}),c=e=>t({type:`thinking`,isThinking:e,...r()}),l=e=>t({type:`complete`,result:e,...r()}),u=e=>t({type:`interrupted`,result:e,...r()}),d=e=>t({type:`error`,message:e.message,...r()}),f=e=>t({type:`background_task_event`,event:e}),p=e=>t({type:`background_job_group_event`,event:e}),m=e=>t({type:`execution_workspace_event`,snapshot:e.snapshot}),h=e=>t({type:`plan_event`,event:e}),g=e=>t({type:`context_file_refreshed`,event:e}),_=e=>t({type:`branch_event`,event:e}),v=e=>t({type:`permission_request`,event:e}),y=e=>t({type:`ask_request`,event:e}),b=e=>t({type:`prompt_resolved`,event:e}),x=e=>{(e.requesterDriverId===void 0||e.requesterDriverId===n.getSurfaceDriverId?.())&&t({type:`ui_intent`,event:e})},S=e=>t({type:`session_renamed`,event:e}),C=()=>t({type:`history_cleared`});return e.on(`user_message`,i),e.on(`text_delta`,a),e.on(`tool_start`,o),e.on(`tool_end`,s),e.on(`thinking`,c),e.on(`complete`,l),e.on(`interrupted`,u),e.on(`error`,d),e.on(`background_task_event`,f),e.on(`background_job_group_event`,p),e.on(`execution_workspace_event`,m),e.on(`plan_event`,h),e.on(`context_file_refreshed`,g),e.on(`branch_event`,_),e.on(`permission_request`,v),e.on(`ask_request`,y),e.on(`prompt_resolved`,b),e.on(`ui_intent`,x),e.on(`session_renamed`,S),e.on(`history_cleared`,C),()=>{e.off(`user_message`,i),e.off(`text_delta`,a),e.off(`tool_start`,o),e.off(`tool_end`,s),e.off(`thinking`,c),e.off(`complete`,l),e.off(`interrupted`,u),e.off(`error`,d),e.off(`background_task_event`,f),e.off(`background_job_group_event`,p),e.off(`execution_workspace_event`,m),e.off(`plan_event`,h),e.off(`context_file_refreshed`,g),e.off(`branch_event`,_),e.off(`permission_request`,v),e.off(`ask_request`,y),e.off(`prompt_resolved`,b),e.off(`ui_intent`,x),e.off(`session_renamed`,S),e.off(`history_cleared`,C)}}function le(e){return e.type===`get-messages`||e.type===`get-context`||e.type===`get-executing`||e.type===`get-pending`||e.type===`get-execution-workspace`}function ue(e,t,n){n.type===`get-messages`?t({type:`messages`,messages:e.getMessages()}):n.type===`get-context`?t({type:`context`,state:e.getContextState()}):n.type===`get-executing`?t({type:`executing`,executing:e.isExecuting()}):n.type===`get-execution-workspace`?t({type:`execution_workspace_event`,snapshot:e.getExecutionWorkspaceSnapshot()}):t({type:`pending`,pending:e.getPendingPrompt()})}function de(e){let t=M(e.session,e.deliver,{getSurfaceDriverId:()=>e.driverId});return{onMessage:fe(e.session,e.deliver,e.driverId,{personalUsageReporter:e.personalUsageReporter,usageReporter:e.usageReporter,storedSessionUsageReporter:e.storedSessionUsageReporter},e.surface),cleanup:t}}function fe(e,t,n,r=N,i){return a=>{let o=j(a,t);o&&P(e,t,o,n,r,i)}}const N={personalUsageReporter:void 0,usageReporter:void 0,storedSessionUsageReporter:void 0};function P(n,r,i,a,o=N,s){if(ie(n,r,i,o))return;if(pe(i)){R(n,r,i,a,s);return}if(le(i)){ue(n,r,i);return}if(me(i)){e(n,r,i);return}if(F(i)){t(n,r,i);return}if(I(i)){L(n,i,a);return}let c=i.type;r({type:`protocol_error`,message:`Unknown message type: ${c}`})}function pe(e){return e.type===`submit`||e.type===`command`||e.type===`abort`||e.type===`cancel-queue`}function me(e){return e.type===`get-background-tasks`||e.type===`get-background-task`||e.type===`read-background-task-log`||e.type===`get-background-job-groups`||e.type===`get-background-job-group`||e.type===`wait-background-job-group`}function F(e){return e.type===`cancel-background-task`||e.type===`close-background-task`||e.type===`send-background-task`}function I(e){return e.type===`permission-response`||e.type===`ask-response`}function L(e,t,n){t.type===`permission-response`?e.resolvePermission(t.id,t.result,n):e.resolveAsk(t.id,t.response,n)}function R(e,t,n,r,i){if(n.type===`submit`){if(typeof n.prompt!=`string`||n.prompt.length===0){t({type:`protocol_error`,message:`prompt must be a non-empty string`});return}let a={...r?{driverId:r}:{},...i?{surface:i}:{}};e.submit(n.prompt,void 0,void 0,Object.keys(a).length>0?a:void 0).catch(e=>{t({type:`protocol_error`,message:e.message})})}else if(n.type===`command`){if(!n.name){t({type:`protocol_error`,message:`name is required`});return}e.executeCommand(n.name,n.args??``,`remote`,r).then(e=>{t({type:`command_result`,name:n.name,message:e?.message??`Unknown command: ${n.name}`,success:e?.success??!1,data:e?.data})},e=>{t({type:`protocol_error`,message:e.message})})}else n.type===`abort`?e.abort():e.cancelQueue()}const z=8*1048576;function B(e,t=z){return e!==void 0&&e>t}const V=120*1e3;function H(e=V,t=Date.now){let n;return{maxPendingMs:e,observe(r){if(r===void 0)return;if(r===0){n=void 0;return}let i=t();n??=i;let a=i-n;return a>e?a:void 0}}}function U(e,t,n,r=z,i=H()){let a=!1,o=t=>{if(a)return;let o=n?.();if(B(o,r)){a=!0,s(Error(`outbound backpressure budget exceeded: ${o} byte(s) pending, limit ${r}. The peer has accepted frames it is not reading.`),t.type);return}let c=i.observe(o);if(c!==void 0){a=!0,s(Error(`outbound drain budget exceeded: ${o} byte(s) pending for ${c} ms, limit ${i.maxPendingMs} ms. The peer is reading too slowly to ever drain what it accepted.`),t.type);return}try{e(t)}catch(e){a=!0,s(e instanceof Error?e:Error(String(e)),t.type)}};function s(e,n){try{t(e,n)}catch{}}return Object.assign(o,{pendingBytes:()=>n?.()})}var W=class{frames=[];sizes=[];nextSeq=1;bytes=0;maxFrames;maxBytes;sizeOf;constructor(e={}){this.maxFrames=e.maxFrames??512,this.maxBytes=e.maxBytes??4194304,this.sizeOf=e.sizeOf??(e=>JSON.stringify(e).length)}append(e){let t=this.nextSeq;this.nextSeq+=1;let n=this.sizeOf(e);return this.frames.push({seq:t,message:e}),this.sizes.push(n),this.bytes+=n,this.evict(),t}ackThrough(e){let t=0;for(;t<this.frames.length&&this.frames[t].seq<=e;)t+=1;this.removeOldest(t)}tailAfter(e){return this.frames.length===0?e>=this.nextSeq-1?{kind:`tail`,frames:[]}:{kind:`overrun`}:e<this.frames[0].seq-1?{kind:`overrun`}:{kind:`tail`,frames:this.frames.filter(t=>t.seq>e)}}get lastSeq(){return this.nextSeq-1}get size(){return this.frames.length}evict(){let e=0,t=this.bytes;for(;this.frames.length-e>this.maxFrames||t>this.maxBytes&&this.frames.length-e>1;)t-=this.sizes[e],e+=1;this.removeOldest(e)}removeOldest(e){if(!(e<=0)){for(let t=0;t<e;t+=1)this.bytes-=this.sizes[t]??0;this.frames.splice(0,e),this.sizes.splice(0,e),this.frames.length===0&&(this.bytes=0)}}};const G=new TextEncoder,K=new TextDecoder,q=G.encode(`RBF`),he=1,J=4294967295;function Y(e,t){let n=G.encode(e);if(n.byteLength===0||n.byteLength>255)throw Error(`channel name must be 1..255 UTF-8 bytes (got ${n.byteLength})`);if(!Number.isInteger(t)||t<0||t>J)throw Error(`seq must be an integer in 0..${J} (got ${t})`);return n}function X(e,t,n,r){e.set(q,0),e[3]=1,e[4]=t,e[5]=n.byteLength,e.set(n,6);let i=6+n.byteLength;return new DataView(e.buffer,e.byteOffset,e.byteLength).setUint32(i,r,!1),i+4}function ge(e){let t=Y(e.channel,e.seq),n=new Uint8Array(6+t.byteLength+4+e.payload.byteLength),r=X(n,1,t,e.seq);return n.set(e.payload,r),n}function _e(e){let t=Y(e.channel,e.seq),n=G.encode(JSON.stringify({event:e.event,payload:e.payload})),r=new Uint8Array(6+t.byteLength+4+n.byteLength),i=X(r,2,t,e.seq);return r.set(n,i),r}function Z(e){return e.byteLength<q.length?!1:q.every((t,n)=>e[n]===t)}function ve(e){let t=K.decode(e),n;try{n=JSON.parse(t)}catch{return{ok:!1,error:`channel frame: malformed JSON body`}}if(typeof n!=`object`||!n||Array.isArray(n))return{ok:!1,error:`channel frame: event body must be a JSON object`};let{event:r,payload:i}=n;return typeof r!=`string`||r.length===0?{ok:!1,error:"channel frame: event body is missing a non-empty `event` name"}:{ok:!0,event:r,payload:i??null}}function ye(e){if(!Z(e))return{ok:!1,error:`channel frame: bad magic (not a channel frame)`};if(e.byteLength<6)return{ok:!1,error:`channel frame: truncated header`};if(e[3]!==1)return{ok:!1,error:`channel frame: unsupported version ${String(e[3])}`};let t=e[4],n=e[5]??0;if(n===0)return{ok:!1,error:`channel frame: empty channel name`};let r=6+n,i=r+4;if(e.byteLength<i)return{ok:!1,error:`channel frame: truncated (header longer than the frame)`};let a=K.decode(e.subarray(6,r)),o=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(r,!1),s=e.subarray(i);if(t===1)return{ok:!0,frame:{kind:`binary`,channel:a,seq:o,payload:Uint8Array.from(s)}};if(t===2){let e=ve(s);return e.ok?{ok:!0,frame:{kind:`event`,channel:a,seq:o,event:e.event,payload:e.payload}}:{ok:!1,error:e.error}}return{ok:!1,error:`channel frame: unknown kind ${String(t)}`}}var be=class{session;buffer;driverId;reporters;surface;unsubscribe;onDeliveryError;outbound;emitBoundary;disposed=!1;holding=!1;constructor(e){this.session=e.session,this.buffer=new W(e.buffer),this.driverId=e.driverId,this.surface=e.surface,this.reporters={personalUsageReporter:e.personalUsageReporter,usageReporter:e.usageReporter,storedSessionUsageReporter:e.storedSessionUsageReporter},this.emitBoundary=U(e=>this.emit(e),(e,t)=>this.reportDeliveryError(e,t)),this.unsubscribe=M(this.session,this.emitBoundary,{getSurfaceDriverId:()=>this.driverId})}attach(e,t){this.disposed||(this.onDeliveryError=t.onDeliveryError,this.outbound=U(t=>e(JSON.stringify(t)),(e,t)=>this.reportDeliveryError(e,t),t.pendingBytes),this.holding=t.awaitResume===!0)}detach(){this.outbound=void 0,this.onDeliveryError=void 0}setDriverId(e){this.driverId=e}onClientMessage(e){if(this.disposed)return;let t=j(e,this.emitBoundary);if(t){if(t.type===`resume`){this.replay(t.lastSeq);return}if(t.type===`ack`){this.buffer.ackThrough(t.seq);return}P(this.session,this.emitBoundary,t,this.driverId,this.reporters,this.surface)}}dispose(){this.disposed||(this.disposed=!0,this.detach(),this.unsubscribe())}get lastSeq(){return this.buffer.lastSeq}emit(e){if(this.disposed)return;let t=this.buffer.append(e);this.holding||this.deliverFrame({...e,seq:t})}replay(e){let t=this.buffer.tailAfter(e);if(t.kind===`overrun`){this.deliverFrame({type:`resume_gap`}),this.holding=!1;return}for(let e of t.frames)this.deliverFrame({...e.message,seq:e.seq});this.holding=!1}deliverFrame(e){this.outbound?.(e)}reportDeliveryError(e,t){let n=this.onDeliveryError;this.detach();try{n?.(e,t)}catch{}}};function xe(){return{origins:new Map}}function Q(e,t,n){let r=t.origin.sessionId,i=e.origins.get(r);i===void 0&&(i={highestSequence:0,delivered:new Set,issued:new Map},e.origins.set(r,i));let a=i.issued.get(t.id);if(a!==void 0)return{ack:{...a,state:`duplicate`},deliver:!1};if(n!==void 0){let e={id:t.id,sequence:t.sequence,state:n.state,reason:n.reason};return i.issued.set(t.id,e),{ack:e,deliver:!1}}if(i.delivered.has(t.sequence)){let e={id:t.id,sequence:t.sequence,state:`refused`,reason:`sequence ${t.sequence} was already delivered by this origin under a different message id. A retry must repeat its id; a new id on a delivered sequence cannot be ordered against what the receiver already has.`};return i.issued.set(t.id,e),{ack:e,deliver:!1}}let o=i.highestSequence+1,s=t.sequence>o?o:void 0,c={id:t.id,sequence:t.sequence,state:`delivered`};return i.issued.set(t.id,c),i.delivered.add(t.sequence),i.highestSequence=Math.max(i.highestSequence,t.sequence),s===void 0?{ack:c,deliver:!0}:{ack:c,deliver:!0,gapBefore:s}}function Se(e,t,n){let r=e.origins.get(t),i=r?.issued.get(n);if(r===void 0||i===void 0||i.state!==`delivered`)return;let a={...i,state:`acknowledged`};return r.issued.set(n,a),a}function Ce(e,t){e.origins.delete(t)}const $=16*1024;function we(e,t,n=$){if(!Number.isInteger(n)||n<1)throw Error(`handoff chunking: maxChunkBytes must be a positive integer, got ${n}. A zero or negative budget produces an infinite sequence of empty chunks, which presents as a hang rather than as the configuration error it is.`);let r=Buffer.from(t,`utf8`),i=Math.max(1,Math.ceil(r.byteLength/n)),a=[];for(let t=0;t<i;t+=1){let o=r.subarray(t*n,(t+1)*n);a.push({handoffId:e,index:t,total:i,data:o.toString(`base64`)})}return a}var Te=class{handoffId;chunks=new Map;declaredTotal;constructor(e){this.handoffId=e}get received(){return this.chunks.size}get expected(){return this.declaredTotal}accept(e){let t=e=>({outcome:`refused`,rejection:e,received:this.chunks.size,...this.declaredTotal===void 0?{}:{expected:this.declaredTotal}});if(e.handoffId!==this.handoffId)return t(`wrong-handoff`);if(!Number.isInteger(e.total)||e.total<1||this.declaredTotal!==void 0&&e.total!==this.declaredTotal)return t(`inconsistent-total`);if(!Number.isInteger(e.index)||e.index<0||e.index>=e.total)return t(`out-of-range`);let n=Buffer.from(e.data,`base64`);if(n.toString(`base64`)!==e.data)return t(`undecodable`);this.declaredTotal=e.total;let r=this.chunks.get(e.index);return r===void 0?(this.chunks.set(e.index,n),this.chunks.size<e.total?{outcome:`accepted`,received:this.chunks.size,expected:e.total}:{outcome:`complete`,serialized:this.reassemble(e.total),received:this.chunks.size,expected:e.total}):r.equals(n)?{outcome:`duplicate`,received:this.chunks.size,expected:e.total}:t(`inconsistent-total`)}missing(){if(this.declaredTotal===void 0)return[];let e=[];for(let t=0;t<this.declaredTotal;t+=1)this.chunks.has(t)||e.push(t);return e}discard(){this.chunks.clear(),this.declaredTotal=void 0}reassemble(e){let t=[];for(let n=0;n<e;n+=1){let r=this.chunks.get(n);if(r===void 0)throw Error(`handoff chunking: chunk ${n} of ${e} is missing at reassembly.`);t.push(r)}return Buffer.concat(t).toString(`utf8`)}};function Ee(e,t=$){return Math.max(1,Math.ceil(e.byteLength/t))}export{q as CHANNEL_FRAME_MAGIC,he as CHANNEL_FRAME_VERSION,$ as DEFAULT_MAX_CHUNK_BYTES,z as DEFAULT_MAX_PENDING_BYTES,V as DEFAULT_MAX_PENDING_MS,Te as HandoffChunkAssembler,c as MAX_INBOUND_FRAME_BYTES,ce as PROTOCOL_SESSION_EVENT_CLASSIFICATION,W as ResumeBuffer,be as SessionResumeBridge,Se as acknowledgePeerMessage,Q as admitPeerMessage,Ee as chunkCountFor,we as chunkHandoffPayload,U as createOutboundDelivery,xe as createPeerMessageLedger,H as createPendingStallClock,de as createSessionMessageHandler,ye as decodeChannelFrame,T as decodeClientMessage,E as decodeFrame,te as decodeServerMessage,ge as encodeBinaryFrame,_e as encodeChannelEventFrame,Ce as forgetPeerOrigin,Z as isChannelFrame,B as isOverPendingBudget};
|
|
1
|
+
import{SESSION_CHANGE_REFUSAL_CODES as e,SESSION_DELETE_REFUSAL_CODES as t,isSessionChangeRefusal as n,isSessionDeleteRefusal as r}from"@robota-sdk/agent-interface-session";import{AuthenticationError as i,ModelNotAvailableError as a,NetworkError as o,ProviderError as s,RateLimitError as c}from"@robota-sdk/agent-core";function l(e,t,n){if(n.type===`get-background-tasks`){t({type:`background_tasks`,tasks:e.listBackgroundTasks(n.filter)});return}if(n.type===`get-background-task`){d(e,t,n);return}if(n.type===`get-background-job-groups`){t({type:`background_job_groups`,groups:e.listBackgroundJobGroups()});return}if(n.type===`get-background-job-group`){p(e,t,n);return}if(n.type===`wait-background-job-group`){m(e,t,n);return}f(e,t,n)}function u(e,t,n){if(!n.taskId){t({type:`protocol_error`,message:`taskId is required`});return}if(n.type===`cancel-background-task`){g(t,`cancel`,n.taskId,e.cancelBackgroundTask(n.taskId,n.reason));return}if(n.type===`close-background-task`){g(t,`close`,n.taskId,e.closeBackgroundTask(n.taskId));return}h(e,t,n)}function d(e,t,n){if(!n.taskId){t({type:`protocol_error`,message:`taskId is required`});return}t({type:`background_task`,taskId:n.taskId,task:e.getBackgroundTask(n.taskId)??null})}function f(e,t,n){if(!n.taskId){t({type:`protocol_error`,message:`taskId is required`});return}e.readBackgroundTaskLog(n.taskId,n.cursor).then(e=>t({type:`background_task_log`,taskId:n.taskId,page:e}),e=>t({type:`protocol_error`,message:e.message}))}function p(e,t,n){if(!n.groupId){t({type:`protocol_error`,message:`groupId is required`});return}t({type:`background_job_group`,groupId:n.groupId,group:e.getBackgroundJobGroup(n.groupId)??null})}function m(e,t,n){if(!n.groupId){t({type:`protocol_error`,message:`groupId is required`});return}e.waitBackgroundJobGroup(n.groupId).then(e=>t({type:`background_job_group`,groupId:n.groupId,group:e}),e=>t({type:`protocol_error`,message:e.message}))}function h(e,t,n){if(!n.input){t({type:`protocol_error`,message:`input is required`});return}g(t,`send`,n.taskId,e.sendBackgroundTask(n.taskId,n.input))}function g(e,t,n,r){r.then(()=>e({type:`background_task_control_result`,action:t,taskId:n,success:!0}),r=>e({type:`background_task_control_result`,action:t,taskId:n,success:!1,message:r.message}))}function _(e){return e.type===`stop-waiting-loop`}function v(e,t,n){let{requestId:r}=n;e.stopWaitingSelfPacedLoop().then(e=>t({type:`waiting_loop_stop`,requestId:r,outcome:e}),e=>t({type:`waiting_loop_stop`,requestId:r,outcome:{kind:`failed`,message:y(e)}}))}function y(e){return e instanceof Error?e.message:String(e)}const b=4*1024*1024;function x(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const S=e=>typeof e==`string`,C=e=>typeof e==`string`&&e.length>0,w=e=>typeof e==`boolean`,T=e=>typeof e==`number`&&Number.isFinite(e),E=e=>Number.isSafeInteger(e)&&e>=0,D=e=>t=>t===void 0||e(t),O=e=>Array.isArray(e)&&e.every(x),k=e=>e===null||x(e),A=e=>t=>typeof t==`string`&&e.includes(t),ee={user:!0,"agent-wakeup":!0,peer:!0,external:!0},te=e=>x(e)&&S(e.id)&&S(e.timestamp)&&S(e.category)&&S(e.type),ne=e=>Array.isArray(e)&&e.every(te),re=e=>x(e)&&S(e.name)&&S(e.description)&&S(e.definedIn),ie=e=>Array.isArray(e)&&e.every(re),ae=[`agent`,`process`,`scheduled`],oe=[`foreground`,`background`],se=[`queued`,`running`,`waiting_permission`,`sleeping`,`paused`,`completed`,`failed`,`cancelled`],ce=[`cancel`,`close`,`send`],le=e=>x(e)&&D(A(ae))(e.kind)&&D(A(se))(e.status)&&D(A(oe))(e.mode)&&D(w)(e.includeClosed),ue=e=>x(e)&&D(S)(e.prompt)&&D(S)(e.stdin),de=e=>x(e)&&T(e.offset),fe=e=>x(e)&&E(e.offset),pe=e=>w(e)||e===`allow-session`||e===`allow-project`,me=e=>x(e)&&(e.type===`answer`&&Array.isArray(e.values)&&e.values.every(S)&&D(S)(e.text)||e.type===`cancelled`&&e.values===void 0&&e.text===void 0),he={language:{language:C},outputStyle:{styleId:C},preset:{presetId:C},permissionMode:{mode:C},sandbox:{enabled:w},removePermissionRule:{scope:C,kind:A([`allow`,`deny`,`ask`]),pattern:C},mcpServerEnabled:{serverId:C,enabled:w},reloadMcpServers:{},pluginEnabled:{pluginId:C,enabled:w},reloadPlugins:{},installPlugin:{pluginId:C},uninstallPlugin:{pluginId:C},providerProfile:{profileName:C},providerModel:{profileName:C,modelId:C},deleteProviderProfile:{profileName:C}},ge=e=>{if(!x(e)||!S(e.field))return!1;let t=e.field;if(!Object.prototype.hasOwnProperty.call(he,t))return!1;let n=he[t];return Object.entries(n).every(([t,n])=>n(e[t]))},_e={none:{},several:{message:S},stopped:{loopId:C,message:D(S)},failed:{loopId:D(C),message:S}},ve=e=>{if(!x(e)||!S(e.kind))return!1;let t=e.kind;if(!Object.prototype.hasOwnProperty.call(_e,t))return!1;let n=_e[t];return Object.entries(n).every(([t,n])=>n(e[t]))};function j(e){return t=>{if(!x(t)||!S(t.kind))return!1;let n=Object.prototype.hasOwnProperty.call(e,t.kind)?e[t.kind]:void 0;return n!==void 0&&Object.entries(n).every(([e,n])=>n(t[e]))}}const ye=[`Added`,`Modified`,`Deleted`,`Renamed`,`Copied`,`Untracked`,`Conflicted`],be=e=>x(e)&&C(e.path)&&A(ye)(e.status)&&D(C)(e.renamedFrom)&&D(T)(e.added)&&D(T)(e.removed),xe=j({status:{branch:D(S),unborn:w,files:e=>Array.isArray(e)&&e.every(be),truncated:w},"not-a-repository":{},failed:{message:S}}),Se=[`add`,`remove`,`context`,`hunk`],Ce=e=>x(e)&&A(Se)(e.type)&&S(e.text)&&T(e.lineNumber),we=j({diff:{diffLines:e=>Array.isArray(e)&&e.every(Ce),truncated:w},"not-a-repository":{},"outside-workspace":{},failed:{message:S}}),Te=j({memory:{content:S,path:C,truncated:w},unavailable:{message:S}}),Ee={submit:{prompt:C},command:{name:C,args:D(S),requestId:D(C)},abort:{},"cancel-queue":{},"get-messages":{},"get-history":{fromIndex:D(E)},"get-prompts":{},"get-context":{},"get-commands":{},"get-status":{},"list-models":{requestId:C},"get-agent-definitions":{requestId:C},"list-sessions":{requestId:C},"new-session":{requestId:D(C)},"switch-session":{sessionId:C,requestId:D(C)},"rename-session":{sessionId:C,name:C,requestId:C},"delete-session":{sessionId:C,requestId:C},"get-usage-report":{},"get-personal-usage-report":{requestId:C,period:A([`7d`,`30d`]),timezone:C},"get-stored-session-usage-report":{requestId:C,sessionId:C},"get-executing":{},"get-pending":{},"get-execution-workspace":{},"read-execution-detail":{requestId:C,entryId:C,cursor:D(fe)},"stop-waiting-loop":{requestId:C},"project-status":{requestId:C},"project-diff":{requestId:C,path:C},"project-memory":{requestId:C},"get-background-tasks":{filter:D(le)},"get-background-task":{taskId:C},"get-background-job-groups":{},"get-background-job-group":{groupId:C},"wait-background-job-group":{groupId:C},"cancel-background-task":{taskId:C,reason:D(S)},"close-background-task":{taskId:C},"send-background-task":{taskId:C,input:ue},"read-background-task-log":{taskId:C,cursor:D(de)},"permission-response":{id:C,result:pe},"ask-response":{id:C,response:me},resume:{lastSeq:T},ack:{seq:T},"get-settings":{requestId:C},"update-settings":{requestId:C,patch:ge}},M={driverId:D(S)},De={text_delta:{delta:S,...M},user_message:{content:S,...M},tool_start:{state:x,...M},tool_end:{state:x,...M},thinking:{isThinking:w,...M},complete:{result:x,...M},interrupted:{result:x,...M},error:{message:S,code:D(A([`auth`,`rate_limit`,`model_unavailable`,`network`,`provider`])),provider:D(S),retryAfterSeconds:D(T),model:D(S),...M},command_result:{name:S,message:S,success:w,requestId:D(S)},messages:{messages:O,display:D(O),...M},history:{startIndex:E,total:E,entries:ne},context:{state:x},history_changed:{},turn_source:{source:A(Object.keys(ee))},commands:{commands:O,skills:O},session_status:{status:x},model_list:{requestId:C,groups:O,currentProfile:D(S),currentModel:S},agent_definitions:{requestId:C,agents:ie,current:C},sessions:{requestId:C,listing:x},sessions_error:{requestId:C,code:A([`not_available`,`list_failed`]),message:S},session_switched:{event:x},session_change_failed:{code:A(e),message:S,requestId:D(S)},session_renamed_in_list:{requestId:C,sessionId:S,name:S},session_rename_failed:{requestId:C,message:S},session_deleted:{requestId:C,sessionId:S},session_delete_failed:{requestId:C,code:A(t),message:S},usage_report:{report:x},personal_usage_report:{requestId:C,report:x},personal_usage_report_error:{requestId:C,code:A([`not_available`,`report_failed`]),message:S},stored_session_usage_report:{requestId:C,sessionId:C,report:x},stored_session_usage_report_error:{requestId:C,sessionId:C,code:A([`not_available`,`report_failed`]),message:S},executing:{executing:w},pending:{pending:e=>e===null||S(e),pendingCount:D(E)},execution_workspace_event:{snapshot:x},execution_detail:{requestId:C,page:x},execution_detail_error:{requestId:C,message:S},waiting_loop_stop:{requestId:C,outcome:ve},project_status:{requestId:C,result:xe},project_diff:{requestId:C,result:we},project_memory:{requestId:C,result:Te},background_task_event:{event:x},background_job_group_event:{event:x},plan_event:{event:x},context_file_refreshed:{event:x},branch_event:{event:x},background_tasks:{tasks:O},background_task:{taskId:S,task:k},background_job_groups:{groups:O},background_job_group:{groupId:S,group:k},background_task_log:{taskId:S,page:x},permission_request:{event:x},ask_request:{event:x},prompt_resolved:{event:x},ui_intent:{event:x},session_renamed:{event:x},history_cleared:{},background_task_control_result:{action:A(ce),taskId:S,success:w,message:D(S)},protocol_error:{message:S,requestId:D(S)},resume_gap:{},settings:{requestId:C,settings:x},settings_error:{requestId:C,code:A([`not_available`,`invalid`,`refused`,`update_failed`]),message:S}};function Oe(e,t,n){if(!x(e))return{ok:!1,reason:`message must be a JSON object`};let r=e.type;if(!S(r))return{ok:!1,reason:`message type must be a string`};let i=Object.prototype.hasOwnProperty.call(t,r)?t[r]:void 0;if(i===void 0)return{ok:!1,reason:`Unknown message type: ${r}`};for(let[t,r]of Object.entries(i))if(!r(e[t]))return{ok:!1,reason:n(t)};return{ok:!0,message:e}}function ke(e){return Oe(e,Ee,e=>e===`prompt`?`prompt must be a non-empty string`:`${e} has an invalid shape`)}function Ae(e){return Oe(e,De,e=>`${e} has an invalid shape`)}function N(e,t){if(e.length>4194304)return{ok:!1,reason:`Frame too large`};let n;try{n=JSON.parse(e)}catch{return{ok:!1,reason:`Invalid JSON`}}return t(n)}function je(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Me(e){return typeof e==`string`&&e.length>0?e:void 0}function Ne(e){if(!(new TextEncoder().encode(e).byteLength>4194304))try{let t=JSON.parse(e);if(!je(t))return;let n=Me(t.requestId);if(!n)return;if(t.type===`get-personal-usage-report`)return{type:`personal`,requestId:n};let r=Me(t.sessionId);return t.type===`get-stored-session-usage-report`&&r?{type:`stored-session`,requestId:n,sessionId:r}:void 0}catch{return}}function Pe(e,t,n,r){return n.type===`get-personal-usage-report`?(Le(t,n,r.personalUsageReporter),!0):n.type===`get-stored-session-usage-report`?(Ie(t,n,r.storedSessionUsageReporter),!0):n.type===`get-usage-report`?(Fe(e,t,r.usageReporter),!0):!1}function Fe(e,t,n){if(!n){t({type:`protocol_error`,message:`Per-session usage reporting is not available on this host.`});return}try{Promise.resolve(n(e)).then(e=>t({type:`usage_report`,report:e}),e=>t({type:`protocol_error`,message:I(e)}))}catch(e){t({type:`protocol_error`,message:I(e instanceof Error?e:String(e))})}}function Ie(e,t,n){if(!n){P(e,t,`not_available`,`Stored-session usage reporting is not available on this host.`);return}try{Promise.resolve(n(t.sessionId)).then(n=>e({type:`stored_session_usage_report`,requestId:t.requestId,sessionId:t.sessionId,report:n}),n=>P(e,t,`report_failed`,I(n)))}catch(n){P(e,t,`report_failed`,I(n instanceof Error?n:String(n)))}}function P(e,t,n,r){e({type:`stored_session_usage_report_error`,requestId:t.requestId,sessionId:t.sessionId,code:n,message:r})}function Le(e,t,n){if(!n){F(e,t.requestId,`not_available`,`Personal usage reporting is not available on this host.`);return}try{Promise.resolve(n({period:t.period,timezone:t.timezone})).then(n=>e({type:`personal_usage_report`,requestId:t.requestId,report:n}),n=>F(e,t.requestId,`report_failed`,I(n)))}catch(n){F(e,t.requestId,`report_failed`,I(n instanceof Error?n:String(n)))}}function F(e,t,n,r){e({type:`personal_usage_report_error`,requestId:t,code:n,message:r})}function I(e){return e instanceof Error?e.message:String(e)}function L(e,t){let n=N(e,ke);if(n.ok)return n.message;let r=Ne(e);return r?.type===`personal`?(t({type:`personal_usage_report_error`,requestId:r.requestId,code:`report_failed`,message:`Invalid personal usage report request.`}),null):r?.type===`stored-session`?(t({type:`stored_session_usage_report_error`,requestId:r.requestId,sessionId:r.sessionId,code:`report_failed`,message:`Invalid stored-session usage report request.`}),null):(t({type:`protocol_error`,message:n.reason}),null)}const Re=new Set([`get-messages`,`get-history`,`get-context`,`get-status`,`get-commands`,`list-models`,`get-executing`,`get-pending`,`get-execution-workspace`,`read-execution-detail`,`get-agent-definitions`,`get-usage-report`,`list-sessions`,`get-background-tasks`,`get-background-task`,`get-background-job-groups`,`get-background-job-group`,`wait-background-job-group`,`read-background-task-log`,`get-settings`,`project-status`,`project-diff`,`project-memory`]);function ze(e){return Re.has(e)}function Be(e){return e.type===`project-status`||e.type===`project-diff`||e.type===`project-memory`}function R(e,t){e({type:`protocol_error`,message:`This host does not support the Project panel.`,requestId:t})}function Ve(e,t,n){let{requestId:r}=n;if(n.type===`project-status`){if(!e.readProjectStatus)return R(t,r);e.readProjectStatus().then(e=>t({type:`project_status`,requestId:r,result:e}),e=>t({type:`project_status`,requestId:r,result:{kind:`failed`,message:e instanceof Error?e.message:String(e)}}))}else if(n.type===`project-diff`){if(!e.readProjectDiff)return R(t,r);e.readProjectDiff(n.path).then(e=>t({type:`project_diff`,requestId:r,result:e}),e=>t({type:`project_diff`,requestId:r,result:{kind:`failed`,message:e instanceof Error?e.message:String(e)}}))}else{if(!e.readProjectMemory)return R(t,r);e.readProjectMemory().then(e=>t({type:`project_memory`,requestId:r,result:e}),e=>t({type:`project_memory`,requestId:r,result:{kind:`unavailable`,message:e instanceof Error?e.message:String(e)}}))}}function He(e){return e.type===`list-sessions`||e.type===`new-session`||e.type===`switch-session`}function Ue(e){return e.type===`rename-session`}function We(e){return e.type===`delete-session`}function Ge(e,t,r){if(t.type===`list-sessions`){Ke(e,t.requestId,r);return}let i=t.requestId===void 0?{}:{requestId:t.requestId};if(!r){e({type:`session_change_failed`,code:`not_available`,message:`Sessions cannot be switched on this host.`,...i});return}Promise.resolve().then(()=>t.type===`new-session`?r.newSession():r.switchSession(t.sessionId)).catch(t=>e({type:`session_change_failed`,code:n(t)?t.code:`failed`,message:z(t),...i}))}function Ke(e,t,n){if(!n){e({type:`sessions_error`,requestId:t,code:`not_available`,message:`Session listing is not available on this host.`});return}try{e({type:`sessions`,requestId:t,listing:n.listSessions()})}catch(n){e({type:`sessions_error`,requestId:t,code:`list_failed`,message:z(n instanceof Error?n:String(n))})}}function z(e){return e instanceof Error?e.message:String(e)}function qe(e,t,n){if(!n){e({type:`session_rename_failed`,requestId:t.requestId,message:`Sessions cannot be renamed on this host.`});return}n.renameSession(t.sessionId,t.name).then(()=>e({type:`session_renamed_in_list`,requestId:t.requestId,sessionId:t.sessionId,name:t.name}),n=>e({type:`session_rename_failed`,requestId:t.requestId,message:z(n)}))}function Je(e,t,n){if(!n){e({type:`session_delete_failed`,requestId:t.requestId,code:`not_available`,message:`Sessions cannot be deleted on this host.`});return}n.deleteSession(t.sessionId).then(()=>e({type:`session_deleted`,requestId:t.requestId,sessionId:t.sessionId}),n=>e({type:`session_delete_failed`,requestId:t.requestId,code:r(n)?n.code:`failed`,message:z(n)}))}const B=new WeakMap;function Ye(e){let t=B.get(e);t===void 0&&(t={frames:new Map,holders:0},B.set(e,t));let n=t;n.holders+=1;let r=!1;return{record:e=>{r||n.frames.set(e.event.id,e)},forget:e=>{n.frames.delete(e)},clear:()=>{n.frames.clear()},release:()=>{r||(r=!0,--n.holders,n.holders===0&&B.get(e)===n&&B.delete(e))}}}function Xe(e){return[...B.get(e)?.frames.values()??[]]}function Ze(e){let t=[],n=new Set,r=[e];for(let e=0;e<=8&&r.length>0;e++){let e=[];for(let i of r)if(!(i==null||n.has(i))&&(n.add(i),t.push(i),typeof i==`object`)){let t=i;e.push(t.originalError,t.cause)}r=e}return t}function Qe(e){let t;for(let n of Ze(e)){if(n instanceof i)return{code:`auth`,...n.provider!==void 0&&{provider:n.provider}};if(n instanceof c)return{code:`rate_limit`,...n.provider!==void 0&&{provider:n.provider},...n.retryAfter!==void 0&&{retryAfterSeconds:n.retryAfter}};if(n instanceof a)return{code:`model_unavailable`,provider:n.provider,...n.model!==void 0&&{model:n.model}};if(n instanceof o)return{code:`network`,...n.provider!==void 0&&{provider:n.provider}};t===void 0&&n instanceof s&&(t={code:`provider`,provider:n.provider})}return t??{}}const $e={text_delta:`forwarded`,tool_start:`forwarded`,tool_end:`forwarded`,thinking:`forwarded`,complete:`forwarded`,error:`forwarded`,context_update:`forwarded`,compact:`forwarded`,interrupted:`forwarded`,skill_activation:`forwarded`,background_task_event:`forwarded`,background_job_group_event:`forwarded`,execution_workspace_event:`forwarded`,user_message:`forwarded`,turn_source:`forwarded`,context_file_refreshed:`forwarded`,memory_event:`forwarded`,goal_event:`non-surface`,plan_event:`forwarded`,branch_event:`forwarded`,permission_request:`forwarded`,ask_request:`forwarded`,prompt_resolved:`forwarded`,ui_intent:`requester-routed`,session_renamed:`forwarded`,history_cleared:`forwarded`,session_switched:`forwarded`,status_changed:`forwarded`};function V(e,t,n={}){let r=()=>{let t=e.getActiveDriverId();return t?{driverId:t}:{}},i=e=>t({type:`user_message`,content:e,...r()}),a=e=>t({type:`text_delta`,delta:e,...r()}),o=e=>t({type:`tool_start`,state:e,...r()}),s=e=>t({type:`tool_end`,state:e,...r()}),c=e=>t({type:`thinking`,isThinking:e,...r()}),l=e=>t({type:`complete`,result:H(e),...r()}),u=e=>t({type:`interrupted`,result:H(e),...r()}),d=e=>t({type:`error`,message:e.message,...Qe(e),...r()}),f=e=>t({type:`background_task_event`,event:e}),p=e=>t({type:`background_job_group_event`,event:e}),m=e=>t({type:`execution_workspace_event`,snapshot:e.snapshot}),h=e=>t({type:`plan_event`,event:e}),g=e=>t({type:`context_file_refreshed`,event:e}),_=e=>t({type:`branch_event`,event:e}),v=n.receivePrompts??!0,y=v?Ye(e):void 0,b=e=>{let n={type:`permission_request`,event:e};y?.record(n),t(n)},x=e=>{let n={type:`ask_request`,event:e};y?.record(n),t(n)},S=e=>{y?.forget(e.id),t({type:`prompt_resolved`,event:e})},C=e=>{(e.requesterDriverId===void 0||e.requesterDriverId===n.getSurfaceDriverId?.())&&t({type:`ui_intent`,event:e})},w=e=>t({type:`session_renamed`,event:e}),T=()=>t({type:`history_cleared`}),E=e=>{y?.clear(),t({type:`session_switched`,event:e})},D=e=>t({type:`context`,state:e}),O=()=>t({type:`history_changed`}),k=e=>t({type:`turn_source`,source:e}),A=e=>t({type:`session_status`,status:e});return e.on(`user_message`,i),e.on(`text_delta`,a),e.on(`tool_start`,o),e.on(`tool_end`,s),e.on(`thinking`,c),e.on(`complete`,l),e.on(`interrupted`,u),e.on(`error`,d),e.on(`background_task_event`,f),e.on(`background_job_group_event`,p),e.on(`execution_workspace_event`,m),e.on(`plan_event`,h),e.on(`context_file_refreshed`,g),e.on(`branch_event`,_),v&&(e.on(`permission_request`,b),e.on(`ask_request`,x)),e.on(`prompt_resolved`,S),e.on(`ui_intent`,C),e.on(`session_renamed`,w),e.on(`history_cleared`,T),e.on(`session_switched`,E),e.on(`context_update`,D),e.on(`compact`,O),e.on(`skill_activation`,O),e.on(`memory_event`,O),e.on(`turn_source`,k),e.on(`status_changed`,A),()=>{e.off(`user_message`,i),e.off(`text_delta`,a),e.off(`tool_start`,o),e.off(`tool_end`,s),e.off(`thinking`,c),e.off(`complete`,l),e.off(`interrupted`,u),e.off(`error`,d),e.off(`background_task_event`,f),e.off(`background_job_group_event`,p),e.off(`execution_workspace_event`,m),e.off(`plan_event`,h),e.off(`context_file_refreshed`,g),e.off(`branch_event`,_),v&&(e.off(`permission_request`,b),e.off(`ask_request`,x)),e.off(`prompt_resolved`,S),e.off(`ui_intent`,C),e.off(`session_renamed`,w),e.off(`history_cleared`,T),e.off(`session_switched`,E),e.off(`context_update`,D),e.off(`compact`,O),e.off(`skill_activation`,O),e.off(`memory_event`,O),e.off(`turn_source`,k),e.off(`status_changed`,A),y?.release()}}function H(e){let{history:t,...n}=e;return n}const et=new TextEncoder;function tt(e){return e.type===`get-messages`||e.type===`get-history`||e.type===`get-prompts`||e.type===`get-context`||e.type===`get-commands`||e.type===`get-status`||e.type===`list-models`||e.type===`get-agent-definitions`||e.type===`get-executing`||e.type===`get-pending`||e.type===`get-execution-workspace`||e.type===`read-execution-detail`}function nt(e,t,n){if(n.type===`get-messages`)t({type:`messages`,messages:e.getMessages(),display:e.getMessagesDisplay()});else if(n.type===`get-history`)t(it(e,n.fromIndex??0));else if(n.type===`get-prompts`)for(let n of Xe(e))t(n);else if(n.type===`get-context`)t({type:`context`,state:e.getContextState()});else if(n.type===`get-commands`)t({type:`commands`,commands:e.listCommands(),skills:e.listSkills()});else if(n.type===`get-status`)t({type:`session_status`,status:e.getStatusSnapshot()});else if(n.type===`list-models`){let r=e.listModels();t({type:`model_list`,requestId:n.requestId,...r})}else n.type===`get-agent-definitions`?t({type:`agent_definitions`,requestId:n.requestId,agents:e.listAgentDefinitions(),current:e.getDefaultAgentType()}):n.type===`get-executing`?t({type:`executing`,executing:e.isExecuting()}):n.type===`get-execution-workspace`?t({type:`execution_workspace_event`,snapshot:e.getExecutionWorkspaceSnapshot()}):n.type===`read-execution-detail`?rt(e,t,n):t(U(e))}function rt(e,t,n){let{requestId:r}=n;e.readExecutionWorkspaceDetail(n.entryId,n.cursor).then(e=>t({type:`execution_detail`,requestId:r,page:e}),e=>t({type:`execution_detail_error`,requestId:r,message:e instanceof Error?e.message:String(e)}))}function U(e){return{type:`pending`,pending:e.getPendingPrompt(),pendingCount:e.getPendingCount()}}function it(e,t){let n=e.getFullHistory(),r=n.length,i=Math.min(t,r),a=[],o=0;for(let e=i;e<r;e+=1){let t=at(n[e]),r=et.encode(JSON.stringify(t)).byteLength;if(a.length>0&&o+r>262144)break;a.push(t),o+=r}return{type:`history`,startIndex:i,total:r,entries:a}}function at(e){return{...e,timestamp:ot(e.timestamp)}}function ot(e){return typeof e==`string`?e:e.toISOString()}function W(e){return e.type===`get-settings`||e.type===`update-settings`}function G(e,t,n,r,i){if(!r){K(t,n.requestId,`not_available`,`Settings are not available on this host.`);return}try{if(n.type===`get-settings`){Promise.resolve(r.getSettings(e,i)).then(e=>t({type:`settings`,requestId:n.requestId,settings:e}),e=>K(t,n.requestId,`update_failed`,q(e)));return}Promise.resolve(r.updateSettings(e,n.patch,i)).then(e=>{e.ok?t({type:`settings`,requestId:n.requestId,settings:e.settings}):K(t,n.requestId,e.code,e.message)},e=>K(t,n.requestId,`update_failed`,q(e)))}catch(e){K(t,n.requestId,`update_failed`,q(e instanceof Error?e:String(e)))}}function K(e,t,n,r){e({type:`settings_error`,requestId:t,code:n,message:r})}function q(e){return e instanceof Error?e.message:String(e)}function st(e){let t=e.role??`drive`,n=V(e.session,e.deliver,{getSurfaceDriverId:()=>e.driverId,receivePrompts:t===`drive`});return{onMessage:ct(e.session,e.deliver,e.driverId,{personalUsageReporter:e.personalUsageReporter,usageReporter:e.usageReporter,storedSessionUsageReporter:e.storedSessionUsageReporter},e.surface,t,e.sessionDirectory,e.settingsReporter,e.commandSurfaceLocality),cleanup:n}}function ct(e,t,n,r=J,i,a=`drive`,o,s,c){return l=>{let u=L(l,t);if(u){if(a===`observe`&&!ze(u.type)){t({type:`protocol_error`,message:`Not permitted for an observer: ${u.type}`});return}lt(e,t,u,n,r,i,o,s,c)}}}const J={personalUsageReporter:void 0,usageReporter:void 0,storedSessionUsageReporter:void 0};function lt(e,t,n,r,i=J,a,o,s,c){if(Pe(e,t,n,i))return;if(He(n)){Ge(t,n,o);return}if(W(n)){G(e,t,n,s,c);return}if(Ue(n)){qe(t,n,o);return}if(We(n)){Je(t,n,o);return}if(ut(n)){ht(e,t,n,r,a,c);return}if(_(n)){v(e,t,n);return}if(tt(n)){nt(e,t,n);return}if(Be(n)){Ve(e,t,n);return}if(dt(n)){l(e,t,n);return}if(ft(n)){u(e,t,n);return}if(pt(n)){mt(e,n,r);return}let d=n.type;t({type:`protocol_error`,message:`Unknown message type: ${d}`})}function ut(e){return e.type===`submit`||e.type===`command`||e.type===`abort`||e.type===`cancel-queue`}function dt(e){return e.type===`get-background-tasks`||e.type===`get-background-task`||e.type===`read-background-task-log`||e.type===`get-background-job-groups`||e.type===`get-background-job-group`||e.type===`wait-background-job-group`}function ft(e){return e.type===`cancel-background-task`||e.type===`close-background-task`||e.type===`send-background-task`}function pt(e){return e.type===`permission-response`||e.type===`ask-response`}function mt(e,t,n){t.type===`permission-response`?e.resolvePermission(t.id,t.result,n):e.resolveAsk(t.id,t.response,n)}function ht(e,t,n,r,i,a){if(n.type===`submit`){if(typeof n.prompt!=`string`||n.prompt.length===0){t({type:`protocol_error`,message:`prompt must be a non-empty string`});return}let a={...r?{driverId:r}:{},...i?{surface:i}:{}};e.submit(n.prompt,void 0,void 0,Object.keys(a).length>0?a:void 0).then(()=>t(U(e)),e=>t({type:`protocol_error`,message:e.message}))}else if(n.type===`command`){let i=n.requestId===void 0?{}:{requestId:n.requestId};if(!n.name){t({type:`protocol_error`,message:`name is required`,...i});return}e.executeCommand(n.name,n.args??``,`remote`,r,a).then(e=>{t({type:`command_result`,name:n.name,message:e?.message??`Unknown command: ${n.name}`,success:e?.success??!1,data:e?.data,...i})},e=>{t({type:`protocol_error`,message:e.message,...i})})}else n.type===`abort`?e.abort():e.cancelQueue()}const gt=1024*1024,Y=8*gt,_t=gt;function vt(e,t=Y){return e!==void 0&&e>t}const yt=120*1e3;function bt(e=yt,t=Date.now){let n;return{maxPendingMs:e,observe(r){if(r===void 0)return;if(r===0){n=void 0;return}let i=t();n??=i;let a=i-n;return a>e?a:void 0}}}function X(e,t,n,r=Y,i=bt()){let a=!1,o=t=>{if(a)return;let o=n?.();if(vt(o,r)){a=!0,s(Error(`outbound backpressure budget exceeded: ${o} byte(s) pending, limit ${r}. The peer has accepted frames it is not reading.`),t.type);return}let c=i.observe(o);if(c!==void 0){a=!0,s(Error(`outbound drain budget exceeded: ${o} byte(s) pending for ${c} ms, limit ${i.maxPendingMs} ms. The peer is reading too slowly to ever drain what it accepted.`),t.type);return}try{e(t)}catch(e){a=!0,s(e instanceof Error?e:Error(String(e)),t.type)}};function s(e,n){try{t(e,n)}catch{}}return Object.assign(o,{pendingBytes:()=>n?.()})}var xt=class{frames=[];sizes=[];nextSeq=1;bytes=0;maxFrames;maxBytes;sizeOf;constructor(e={}){this.maxFrames=e.maxFrames??512,this.maxBytes=e.maxBytes??4194304,this.sizeOf=e.sizeOf??(e=>JSON.stringify(e).length)}append(e){let t=this.nextSeq;this.nextSeq+=1;let n=this.sizeOf(e);return this.frames.push({seq:t,message:e}),this.sizes.push(n),this.bytes+=n,this.evict(),t}ackThrough(e){let t=0;for(;t<this.frames.length&&this.frames[t].seq<=e;)t+=1;this.removeOldest(t)}tailAfter(e){return this.frames.length===0?e>=this.nextSeq-1?{kind:`tail`,frames:[]}:{kind:`overrun`}:e<this.frames[0].seq-1?{kind:`overrun`}:{kind:`tail`,frames:this.frames.filter(t=>t.seq>e)}}get lastSeq(){return this.nextSeq-1}get size(){return this.frames.length}evict(){let e=0,t=this.bytes;for(;this.frames.length-e>this.maxFrames||t>this.maxBytes&&this.frames.length-e>1;)t-=this.sizes[e],e+=1;this.removeOldest(e)}removeOldest(e){if(!(e<=0)){for(let t=0;t<e;t+=1)this.bytes-=this.sizes[t]??0;this.frames.splice(0,e),this.sizes.splice(0,e),this.frames.length===0&&(this.bytes=0)}}};const Z=new TextEncoder,St=new TextDecoder,Q=Z.encode(`RBF`),Ct=1,wt=4294967295;function Tt(e,t){let n=Z.encode(e);if(n.byteLength===0||n.byteLength>255)throw Error(`channel name must be 1..255 UTF-8 bytes (got ${n.byteLength})`);if(!Number.isInteger(t)||t<0||t>wt)throw Error(`seq must be an integer in 0..${wt} (got ${t})`);return n}function Et(e,t,n,r){e.set(Q,0),e[3]=1,e[4]=t,e[5]=n.byteLength,e.set(n,6);let i=6+n.byteLength;return new DataView(e.buffer,e.byteOffset,e.byteLength).setUint32(i,r,!1),i+4}function Dt(e){let t=Tt(e.channel,e.seq),n=new Uint8Array(6+t.byteLength+4+e.payload.byteLength),r=Et(n,1,t,e.seq);return n.set(e.payload,r),n}function Ot(e){let t=Tt(e.channel,e.seq),n=Z.encode(JSON.stringify({event:e.event,payload:e.payload})),r=new Uint8Array(6+t.byteLength+4+n.byteLength),i=Et(r,2,t,e.seq);return r.set(n,i),r}function kt(e){return e.byteLength<Q.length?!1:Q.every((t,n)=>e[n]===t)}function At(e){let t=St.decode(e),n;try{n=JSON.parse(t)}catch{return{ok:!1,error:`channel frame: malformed JSON body`}}if(typeof n!=`object`||!n||Array.isArray(n))return{ok:!1,error:`channel frame: event body must be a JSON object`};let{event:r,payload:i}=n;return typeof r!=`string`||r.length===0?{ok:!1,error:"channel frame: event body is missing a non-empty `event` name"}:{ok:!0,event:r,payload:i??null}}function jt(e){if(!kt(e))return{ok:!1,error:`channel frame: bad magic (not a channel frame)`};if(e.byteLength<6)return{ok:!1,error:`channel frame: truncated header`};if(e[3]!==1)return{ok:!1,error:`channel frame: unsupported version ${String(e[3])}`};let t=e[4],n=e[5]??0;if(n===0)return{ok:!1,error:`channel frame: empty channel name`};let r=6+n,i=r+4;if(e.byteLength<i)return{ok:!1,error:`channel frame: truncated (header longer than the frame)`};let a=St.decode(e.subarray(6,r)),o=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(r,!1),s=e.subarray(i);if(t===1)return{ok:!0,frame:{kind:`binary`,channel:a,seq:o,payload:Uint8Array.from(s)}};if(t===2){let e=At(s);return e.ok?{ok:!0,frame:{kind:`event`,channel:a,seq:o,event:e.event,payload:e.payload}}:{ok:!1,error:e.error}}return{ok:!1,error:`channel frame: unknown kind ${String(t)}`}}var Mt=class{session;buffer;driverId;reporters;surface;commandSurfaceLocality;unsubscribe;onDeliveryError;outbound;emitBoundary;disposed=!1;holding=!1;constructor(e){this.session=e.session,this.buffer=new xt(e.buffer),this.driverId=e.driverId,this.surface=e.surface,this.commandSurfaceLocality=e.commandSurfaceLocality,this.reporters={personalUsageReporter:e.personalUsageReporter,usageReporter:e.usageReporter,storedSessionUsageReporter:e.storedSessionUsageReporter},this.emitBoundary=X(e=>this.emit(e),(e,t)=>this.reportDeliveryError(e,t)),this.unsubscribe=V(this.session,this.emitBoundary,{getSurfaceDriverId:()=>this.driverId})}attach(e,t){this.disposed||(this.onDeliveryError=t.onDeliveryError,this.outbound=X(t=>e(JSON.stringify(t)),(e,t)=>this.reportDeliveryError(e,t),t.pendingBytes),this.holding=t.awaitResume===!0)}detach(){this.outbound=void 0,this.onDeliveryError=void 0}setDriverId(e){this.driverId=e}onClientMessage(e){if(this.disposed)return;let t=L(e,this.emitBoundary);if(t){if(t.type===`resume`){this.replay(t.lastSeq);return}if(t.type===`ack`){this.buffer.ackThrough(t.seq);return}lt(this.session,this.emitBoundary,t,this.driverId,this.reporters,this.surface,void 0,void 0,this.commandSurfaceLocality)}}dispose(){this.disposed||(this.disposed=!0,this.detach(),this.unsubscribe())}get lastSeq(){return this.buffer.lastSeq}emit(e){if(this.disposed)return;let t=this.buffer.append(e);this.holding||this.deliverFrame({...e,seq:t})}replay(e){let t=this.buffer.tailAfter(e);if(t.kind===`overrun`){this.deliverFrame({type:`resume_gap`}),this.holding=!1;return}for(let e of t.frames)this.deliverFrame({...e.message,seq:e.seq});this.holding=!1}deliverFrame(e){this.outbound?.(e)}reportDeliveryError(e,t){let n=this.onDeliveryError;this.detach();try{n?.(e,t)}catch{}}};function Nt(){return{origins:new Map}}function Pt(e,t,n){let r=t.origin.sessionId,i=e.origins.get(r);i===void 0&&(i={highestSequence:0,delivered:new Set,issued:new Map},e.origins.set(r,i));let a=i.issued.get(t.id);if(a!==void 0)return{ack:{...a,state:`duplicate`},deliver:!1};if(n!==void 0){let e={id:t.id,sequence:t.sequence,state:n.state,reason:n.reason};return i.issued.set(t.id,e),{ack:e,deliver:!1}}if(i.delivered.has(t.sequence)){let e={id:t.id,sequence:t.sequence,state:`refused`,reason:`sequence ${t.sequence} was already delivered by this origin under a different message id. A retry must repeat its id; a new id on a delivered sequence cannot be ordered against what the receiver already has.`};return i.issued.set(t.id,e),{ack:e,deliver:!1}}let o=i.highestSequence+1,s=t.sequence>o?o:void 0,c={id:t.id,sequence:t.sequence,state:`delivered`};return i.issued.set(t.id,c),i.delivered.add(t.sequence),i.highestSequence=Math.max(i.highestSequence,t.sequence),s===void 0?{ack:c,deliver:!0}:{ack:c,deliver:!0,gapBefore:s}}function Ft(e,t,n){let r=e.origins.get(t),i=r?.issued.get(n);if(r===void 0||i===void 0||i.state!==`delivered`)return;let a={...i,state:`acknowledged`};return r.issued.set(n,a),a}function It(e,t){e.origins.delete(t)}const $=16*1024;function Lt(e,t,n=$){if(!Number.isInteger(n)||n<1)throw Error(`handoff chunking: maxChunkBytes must be a positive integer, got ${n}. A zero or negative budget produces an infinite sequence of empty chunks, which presents as a hang rather than as the configuration error it is.`);let r=Buffer.from(t,`utf8`),i=Math.max(1,Math.ceil(r.byteLength/n)),a=[];for(let t=0;t<i;t+=1){let o=r.subarray(t*n,(t+1)*n);a.push({handoffId:e,index:t,total:i,data:o.toString(`base64`)})}return a}var Rt=class{handoffId;chunks=new Map;declaredTotal;constructor(e){this.handoffId=e}get received(){return this.chunks.size}get expected(){return this.declaredTotal}accept(e){let t=e=>({outcome:`refused`,rejection:e,received:this.chunks.size,...this.declaredTotal===void 0?{}:{expected:this.declaredTotal}});if(e.handoffId!==this.handoffId)return t(`wrong-handoff`);if(!Number.isInteger(e.total)||e.total<1||this.declaredTotal!==void 0&&e.total!==this.declaredTotal)return t(`inconsistent-total`);if(!Number.isInteger(e.index)||e.index<0||e.index>=e.total)return t(`out-of-range`);let n=Buffer.from(e.data,`base64`);if(n.toString(`base64`)!==e.data)return t(`undecodable`);this.declaredTotal=e.total;let r=this.chunks.get(e.index);return r===void 0?(this.chunks.set(e.index,n),this.chunks.size<e.total?{outcome:`accepted`,received:this.chunks.size,expected:e.total}:{outcome:`complete`,serialized:this.reassemble(e.total),received:this.chunks.size,expected:e.total}):r.equals(n)?{outcome:`duplicate`,received:this.chunks.size,expected:e.total}:t(`inconsistent-total`)}missing(){if(this.declaredTotal===void 0)return[];let e=[];for(let t=0;t<this.declaredTotal;t+=1)this.chunks.has(t)||e.push(t);return e}discard(){this.chunks.clear(),this.declaredTotal=void 0}reassemble(e){let t=[];for(let n=0;n<e;n+=1){let r=this.chunks.get(n);if(r===void 0)throw Error(`handoff chunking: chunk ${n} of ${e} is missing at reassembly.`);t.push(r)}return Buffer.concat(t).toString(`utf8`)}};function zt(e,t=$){return Math.max(1,Math.ceil(e.byteLength/t))}export{_t as ATTACHED_SURFACE_MAX_PENDING_BYTES,Q as CHANNEL_FRAME_MAGIC,Ct as CHANNEL_FRAME_VERSION,$ as DEFAULT_MAX_CHUNK_BYTES,Y as DEFAULT_MAX_PENDING_BYTES,yt as DEFAULT_MAX_PENDING_MS,Rt as HandoffChunkAssembler,b as MAX_INBOUND_FRAME_BYTES,$e as PROTOCOL_SESSION_EVENT_CLASSIFICATION,xt as ResumeBuffer,Mt as SessionResumeBridge,Ft as acknowledgePeerMessage,Pt as admitPeerMessage,zt as chunkCountFor,Lt as chunkHandoffPayload,X as createOutboundDelivery,Nt as createPeerMessageLedger,bt as createPendingStallClock,st as createSessionMessageHandler,jt as decodeChannelFrame,ke as decodeClientMessage,N as decodeFrame,Ae as decodeServerMessage,Dt as encodeBinaryFrame,Ot as encodeChannelEventFrame,It as forgetPeerOrigin,G as handleSettingsMessage,kt as isChannelFrame,ze as isObserverMessageType,vt as isOverPendingBudget,W as isSettingsMessage};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|