@robota-sdk/agent-transport 3.0.0-beta.95 → 3.0.0-beta.97

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.
@@ -1,2 +1,2 @@
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";const l=4*1024*1024;function u(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const d=e=>typeof e==`string`,f=e=>typeof e==`string`&&e.length>0,p=e=>typeof e==`boolean`,m=e=>typeof e==`number`&&Number.isFinite(e),h=e=>Number.isSafeInteger(e)&&e>=0,g=e=>t=>t===void 0||e(t),_=e=>Array.isArray(e)&&e.every(u),v=e=>e===null||u(e),y=e=>t=>typeof t==`string`&&e.includes(t),b={user:!0,"agent-wakeup":!0,peer:!0,external:!0},x=e=>u(e)&&d(e.id)&&d(e.timestamp)&&d(e.category)&&d(e.type),S=e=>Array.isArray(e)&&e.every(x),C=e=>u(e)&&d(e.name)&&d(e.description)&&d(e.definedIn),w=e=>Array.isArray(e)&&e.every(C),T=[`agent`,`process`,`scheduled`],E=[`foreground`,`background`],D=[`queued`,`running`,`waiting_permission`,`sleeping`,`paused`,`completed`,`failed`,`cancelled`],O=[`cancel`,`close`,`send`],k=e=>u(e)&&g(y(T))(e.kind)&&g(y(D))(e.status)&&g(y(E))(e.mode)&&g(p)(e.includeClosed),A=e=>u(e)&&g(d)(e.prompt)&&g(d)(e.stdin),ee=e=>u(e)&&m(e.offset),te=e=>u(e)&&h(e.offset),ne=e=>p(e)||e===`allow-session`||e===`allow-project`,re=e=>u(e)&&(e.type===`answer`&&Array.isArray(e.values)&&e.values.every(d)&&g(d)(e.text)||e.type===`cancelled`&&e.values===void 0&&e.text===void 0),ie={language:{language:f},outputStyle:{styleId:f},preset:{presetId:f},permissionMode:{mode:f},sandbox:{enabled:p},removePermissionRule:{scope:f,kind:y([`allow`,`deny`,`ask`]),pattern:f},mcpServerEnabled:{serverId:f,enabled:p},reloadMcpServers:{},pluginEnabled:{pluginId:f,enabled:p},reloadPlugins:{},installPlugin:{pluginId:f},uninstallPlugin:{pluginId:f},providerProfile:{profileName:f},providerModel:{profileName:f,modelId:f},deleteProviderProfile:{profileName:f}},ae=e=>{if(!u(e)||!d(e.field))return!1;let t=e.field;if(!Object.prototype.hasOwnProperty.call(ie,t))return!1;let n=ie[t];return Object.entries(n).every(([t,n])=>n(e[t]))},oe={none:{},several:{message:d},stopped:{loopId:f,message:g(d)},failed:{loopId:g(f),message:d}},se=e=>{if(!u(e)||!d(e.kind))return!1;let t=e.kind;if(!Object.prototype.hasOwnProperty.call(oe,t))return!1;let n=oe[t];return Object.entries(n).every(([t,n])=>n(e[t]))};function j(e){return t=>{if(!u(t)||!d(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 ce=[`Added`,`Modified`,`Deleted`,`Renamed`,`Copied`,`Untracked`,`Conflicted`],le=e=>u(e)&&f(e.path)&&y(ce)(e.status)&&g(f)(e.renamedFrom)&&g(m)(e.added)&&g(m)(e.removed),ue=j({status:{branch:g(d),unborn:p,files:e=>Array.isArray(e)&&e.every(le),truncated:p},"not-a-repository":{},failed:{message:d}}),de=[`add`,`remove`,`context`,`hunk`],fe=e=>u(e)&&y(de)(e.type)&&d(e.text)&&m(e.lineNumber),pe=j({diff:{diffLines:e=>Array.isArray(e)&&e.every(fe),truncated:p},"not-a-repository":{},"outside-workspace":{},failed:{message:d}}),me=j({memory:{content:d,path:f,truncated:p},unavailable:{message:d}}),he={submit:{prompt:f},command:{name:f,args:g(d),requestId:g(f)},abort:{},"cancel-queue":{},"get-messages":{},"get-history":{fromIndex:g(h)},"get-prompts":{},"get-context":{},"get-commands":{},"get-status":{},"list-models":{requestId:f},"get-agent-definitions":{requestId:f},"list-sessions":{requestId:f},"new-session":{requestId:g(f)},"switch-session":{sessionId:f,requestId:g(f)},"rename-session":{sessionId:f,name:f,requestId:f},"delete-session":{sessionId:f,requestId:f},"get-usage-report":{},"get-personal-usage-report":{requestId:f,period:y([`7d`,`30d`]),timezone:f},"get-stored-session-usage-report":{requestId:f,sessionId:f},"get-executing":{},"get-pending":{},"get-execution-workspace":{},"read-execution-detail":{requestId:f,entryId:f,cursor:g(te)},"stop-waiting-loop":{requestId:f},"project-status":{requestId:f},"project-diff":{requestId:f,path:f},"project-memory":{requestId:f},"call-app-tool":{requestId:f,viewId:f,name:f,arguments:u},"read-app-view":{requestId:f,viewId:f},"get-background-tasks":{filter:g(k)},"get-background-task":{taskId:f},"get-background-job-groups":{},"get-background-job-group":{groupId:f},"wait-background-job-group":{groupId:f},"cancel-background-task":{taskId:f,reason:g(d)},"close-background-task":{taskId:f},"send-background-task":{taskId:f,input:A},"read-background-task-log":{taskId:f,cursor:g(ee)},"permission-response":{id:f,result:ne},"ask-response":{id:f,response:re},resume:{lastSeq:m},ack:{seq:m},"get-settings":{requestId:f},"update-settings":{requestId:f,patch:ae}},M={driverId:g(d)},ge={text_delta:{delta:d,...M},user_message:{content:d,...M},tool_start:{state:u,...M},tool_end:{state:u,...M},thinking:{isThinking:p,...M},complete:{result:u,...M},interrupted:{result:u,...M},error:{message:d,code:g(y([`auth`,`rate_limit`,`model_unavailable`,`network`,`provider`])),provider:g(d),retryAfterSeconds:g(m),model:g(d),...M},command_result:{name:d,message:d,success:p,requestId:g(d)},messages:{messages:_,display:g(_),...M},history:{startIndex:h,total:h,entries:S},context:{state:u},history_changed:{},turn_source:{source:y(Object.keys(b))},commands:{commands:_,skills:_},session_status:{status:u},model_list:{requestId:f,groups:_,currentProfile:g(d),currentModel:d},agent_definitions:{requestId:f,agents:w,current:f},sessions:{requestId:f,listing:u},sessions_error:{requestId:f,code:y([`not_available`,`list_failed`]),message:d},session_switched:{event:u},session_change_failed:{code:y(e),message:d,requestId:g(d)},session_renamed_in_list:{requestId:f,sessionId:d,name:d},session_rename_failed:{requestId:f,message:d},session_deleted:{requestId:f,sessionId:d},session_delete_failed:{requestId:f,code:y(t),message:d},usage_report:{report:u},personal_usage_report:{requestId:f,report:u},personal_usage_report_error:{requestId:f,code:y([`not_available`,`report_failed`]),message:d},stored_session_usage_report:{requestId:f,sessionId:f,report:u},stored_session_usage_report_error:{requestId:f,sessionId:f,code:y([`not_available`,`report_failed`]),message:d},executing:{executing:p},pending:{pending:e=>e===null||d(e),pendingCount:g(h)},execution_workspace_event:{snapshot:u},execution_detail:{requestId:f,page:u},execution_detail_error:{requestId:f,message:d},waiting_loop_stop:{requestId:f,outcome:se},project_status:{requestId:f,result:ue},project_diff:{requestId:f,result:pe},project_memory:{requestId:f,result:me},app_tool_result:{requestId:f,success:p,data:()=>!0,parts:g(_),error:g(d)},app_view:{requestId:f,view:u},background_task_event:{event:u},background_job_group_event:{event:u},plan_event:{event:u},context_file_refreshed:{event:u},branch_event:{event:u},background_tasks:{tasks:_},background_task:{taskId:d,task:v},background_job_groups:{groups:_},background_job_group:{groupId:d,group:v},background_task_log:{taskId:d,page:u},permission_request:{event:u},ask_request:{event:u},prompt_resolved:{event:u},ui_intent:{event:u},session_renamed:{event:u},history_cleared:{},background_task_control_result:{action:y(O),taskId:d,success:p,message:g(d)},protocol_error:{message:d,requestId:g(d)},resume_gap:{},settings:{requestId:f,settings:u},settings_error:{requestId:f,code:y([`not_available`,`invalid`,`refused`,`update_failed`]),message:d}};function N(e,t,n){if(!u(e))return{ok:!1,reason:`message must be a JSON object`};let r=e.type;if(!d(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 P(e){return N(e,he,e=>e===`prompt`?`prompt must be a non-empty string`:`${e} has an invalid shape`)}function _e(e){return N(e,ge,e=>`${e} has an invalid shape`)}function F(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 ve(e){return e.type===`call-app-tool`}function ye(e){return e.type===`read-app-view`}function I(e){return e?.maxFrameBytes??4193280}function L(e,t){return new TextEncoder().encode(JSON.stringify(e)).byteLength<=t}function be(e,t,n,r,i){let{requestId:a}=n,o=e.readToolAppView(n.viewId);if(o===void 0){t({type:`protocol_error`,message:`This app view is no longer available.`,requestId:a});return}if(!Object.values(o.callableTools).includes(n.name)){t({type:`protocol_error`,message:`This tool is not available to this app view.`,requestId:a});return}let{signal:s}=i??{},c=I(i);e.invokeRuntimeTool(n.name,n.arguments,{permissionInteraction:`interactive`,...r?{driverId:r}:{},...s?{signal:s}:{}}).then(e=>{if(s?.aborted)return;let n={type:`app_tool_result`,requestId:a,success:e.success,...e.result===void 0?{}:{data:e.result},...e.parts===void 0?{}:{parts:e.parts},...e.error===void 0?{}:{error:e.error}};L(n,c)?t(n):t({type:`protocol_error`,message:`This app tool result is too large to send.`,requestId:a})},e=>{s?.aborted||t({type:`protocol_error`,message:e instanceof Error?e.message:String(e),requestId:a})})}function xe(e,t,n,r){let{requestId:i}=n,a=e.readToolAppView(n.viewId);if(a===void 0){t({type:`protocol_error`,message:`This app view is no longer available.`,requestId:i});return}let o={type:`app_view`,requestId:i,view:a};if(!L(o,I(r))){t({type:`protocol_error`,message:`This app view is too large to send.`,requestId:i});return}t(o)}function Se(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`){we(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`){Ee(e,t,n);return}if(n.type===`wait-background-job-group`){De(e,t,n);return}Te(e,t,n)}function Ce(e,t,n){if(!n.taskId){t({type:`protocol_error`,message:`taskId is required`});return}if(n.type===`cancel-background-task`){R(t,`cancel`,n.taskId,e.cancelBackgroundTask(n.taskId,n.reason));return}if(n.type===`close-background-task`){R(t,`close`,n.taskId,e.closeBackgroundTask(n.taskId));return}Oe(e,t,n)}function we(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 Te(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 Ee(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 De(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 Oe(e,t,n){if(!n.input){t({type:`protocol_error`,message:`input is required`});return}R(t,`send`,n.taskId,e.sendBackgroundTask(n.taskId,n.input))}function R(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 ke(e){return e.type===`stop-waiting-loop`}function Ae(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:je(e)}}))}function je(e){return e instanceof Error?e.message:String(e)}function Me(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ne(e){return typeof e==`string`&&e.length>0?e:void 0}function Pe(e){if(!(new TextEncoder().encode(e).byteLength>4194304))try{let t=JSON.parse(e);if(!Me(t))return;let n=Ne(t.requestId);if(!n)return;if(t.type===`get-personal-usage-report`)return{type:`personal`,requestId:n};let r=Ne(t.sessionId);return t.type===`get-stored-session-usage-report`&&r?{type:`stored-session`,requestId:n,sessionId:r}:void 0}catch{return}}function Fe(e,t,n,r){return n.type===`get-personal-usage-report`?(Re(t,n,r.personalUsageReporter),!0):n.type===`get-stored-session-usage-report`?(Le(t,n,r.storedSessionUsageReporter),!0):n.type===`get-usage-report`?(Ie(e,t,r.usageReporter),!0):!1}function Ie(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:V(e)}))}catch(e){t({type:`protocol_error`,message:V(e instanceof Error?e:String(e))})}}function Le(e,t,n){if(!n){z(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=>z(e,t,`report_failed`,V(n)))}catch(n){z(e,t,`report_failed`,V(n instanceof Error?n:String(n)))}}function z(e,t,n,r){e({type:`stored_session_usage_report_error`,requestId:t.requestId,sessionId:t.sessionId,code:n,message:r})}function Re(e,t,n){if(!n){B(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=>B(e,t.requestId,`report_failed`,V(n)))}catch(n){B(e,t.requestId,`report_failed`,V(n instanceof Error?n:String(n)))}}function B(e,t,n,r){e({type:`personal_usage_report_error`,requestId:t,code:n,message:r})}function V(e){return e instanceof Error?e.message:String(e)}function ze(e,t){let n=F(e,P);if(n.ok)return n.message;let r=Pe(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 Be=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 Ve(e){return Be.has(e)}function He(e){return e.type===`project-status`||e.type===`project-diff`||e.type===`project-memory`}function H(e,t){e({type:`protocol_error`,message:`This host does not support the Project panel.`,requestId:t})}function Ue(e,t,n){let{requestId:r}=n;if(n.type===`project-status`){if(!e.readProjectStatus)return H(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 H(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 H(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 We(e){return e.type===`list-sessions`||e.type===`new-session`||e.type===`switch-session`}function Ge(e){return e.type===`rename-session`}function Ke(e){return e.type===`delete-session`}function qe(e,t,r){if(t.type===`list-sessions`){Je(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:U(t),...i}))}function Je(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:U(n instanceof Error?n:String(n))})}}function U(e){return e instanceof Error?e.message:String(e)}function Ye(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:U(n)}))}function Xe(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:U(n)}))}const W=new WeakMap;function Ze(e){let t=W.get(e);t===void 0&&(t={frames:new Map,holders:0},W.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&&W.get(e)===n&&W.delete(e))}}}function Qe(e){return[...W.get(e)?.frames.values()??[]]}function $e(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 et(e){let t;for(let n of $e(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 tt={text_delta:`forwarded`,tool_start:`forwarded`,tool_end:`forwarded`,thinking:`forwarded`,thinking_delta:`non-surface`,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 nt(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:rt(e),...r()}),u=e=>t({type:`interrupted`,result:rt(e),...r()}),d=e=>t({type:`error`,message:e.message,...et(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?Ze(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 rt(e){let{history:t,...n}=e;return n}const it=256*1024,at=new TextEncoder;function ot(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 st(e,t,n){if(n.type===`get-messages`)t({type:`messages`,messages:e.getMessages(),display:e.getMessagesDisplay()});else if(n.type===`get-history`)t(ut(e,n.fromIndex??0));else if(n.type===`get-prompts`)for(let n of Qe(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`?ct(e,t,n):t(lt(e))}function ct(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 lt(e){return{type:`pending`,pending:e.getPendingPrompt(),pendingCount:e.getPendingCount()}}function ut(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=dt(n[e]),r=at.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 dt(e){return{...e,timestamp:ft(e.timestamp)}}function ft(e){return typeof e==`string`?e:e.toISOString()}function pt(e){return e.type===`get-settings`||e.type===`update-settings`}function mt(e,t,n,r,i){if(!r){G(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=>G(t,n.requestId,`update_failed`,K(e)));return}Promise.resolve(r.updateSettings(e,n.patch,i)).then(e=>{e.ok?t({type:`settings`,requestId:n.requestId,settings:e.settings}):G(t,n.requestId,e.code,e.message)},e=>G(t,n.requestId,`update_failed`,K(e)))}catch(e){G(t,n.requestId,`update_failed`,K(e instanceof Error?e:String(e)))}}function G(e,t,n,r){e({type:`settings_error`,requestId:t,code:n,message:r})}function K(e){return e instanceof Error?e.message:String(e)}function ht(e){let t=e.role??`drive`,n=nt(e.session,e.deliver,{getSurfaceDriverId:()=>e.driverId,receivePrompts:t===`drive`}),r=new AbortController,i=()=>{r.abort(),n()};return{onMessage:gt(e.session,e.deliver,e.driverId,{personalUsageReporter:e.personalUsageReporter,usageReporter:e.usageReporter,storedSessionUsageReporter:e.storedSessionUsageReporter},e.surface,t,e.sessionDirectory,e.settingsReporter,e.commandSurfaceLocality,{signal:r.signal,...e.maxFrameBytes===void 0?{}:{maxFrameBytes:e.maxFrameBytes}}),cleanup:i}}function gt(e,t,n,r=_t,i,a=`drive`,o,s,c,l){return u=>{let d=ze(u,t);if(d){if(a===`observe`&&!Ve(d.type)){t({type:`protocol_error`,message:`Not permitted for an observer: ${d.type}`});return}vt(e,t,d,n,r,i,o,s,c,l)}}}const _t={personalUsageReporter:void 0,usageReporter:void 0,storedSessionUsageReporter:void 0};function vt(e,t,n,r,i=_t,a,o,s,c,l){if(Fe(e,t,n,i))return;if(We(n)){qe(t,n,o);return}if(pt(n)){mt(e,t,n,s,c);return}if(Ge(n)){Ye(t,n,o);return}if(Ke(n)){Xe(t,n,o);return}if(yt(n)){wt(e,t,n,r,a,c);return}if(ke(n)){Ae(e,t,n);return}if(ot(n)){st(e,t,n);return}if(He(n)){Ue(e,t,n);return}if(ve(n)){be(e,t,n,r,l);return}if(ye(n)){xe(e,t,n,l);return}if(bt(n)){Se(e,t,n);return}if(xt(n)){Ce(e,t,n);return}if(St(n)){Ct(e,n,r);return}let u=n.type;t({type:`protocol_error`,message:`Unknown message type: ${u}`})}function yt(e){return e.type===`submit`||e.type===`command`||e.type===`abort`||e.type===`cancel-queue`}function bt(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 xt(e){return e.type===`cancel-background-task`||e.type===`close-background-task`||e.type===`send-background-task`}function St(e){return e.type===`permission-response`||e.type===`ask-response`}function Ct(e,t,n){t.type===`permission-response`?e.resolvePermission(t.id,t.result,n):e.resolveAsk(t.id,t.response,n)}function wt(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(lt(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 Tt=1024*1024,q=8*Tt,Et=Tt;function Dt(e,t=q){return e!==void 0&&e>t}const Ot=120*1e3;function kt(e=Ot,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 J(e,t,n,r=q,i=kt()){let a=!1,o=t=>{if(a)return;let o=n?.();if(Dt(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 At=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 Y=new TextEncoder,jt=new TextDecoder,X=Y.encode(`RBF`),Mt=1,Nt=4294967295;function Pt(e,t){let n=Y.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>Nt)throw Error(`seq must be an integer in 0..${Nt} (got ${t})`);return n}function Z(e,t,n,r){e.set(X,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 Ft(e){let t=Pt(e.channel,e.seq),n=new Uint8Array(6+t.byteLength+4+e.payload.byteLength),r=Z(n,1,t,e.seq);return n.set(e.payload,r),n}function It(e){let t=Pt(e.channel,e.seq),n=Y.encode(JSON.stringify({event:e.event,payload:e.payload})),r=new Uint8Array(6+t.byteLength+4+n.byteLength),i=Z(r,2,t,e.seq);return r.set(n,i),r}function Lt(e){return e.byteLength<X.length?!1:X.every((t,n)=>e[n]===t)}function Rt(e){let t=jt.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 zt(e){if(!Lt(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=jt.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=Rt(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 Bt=class{session;buffer;driverId;reporters;surface;commandSurfaceLocality;maxFrameBytes;lifetime=new AbortController;unsubscribe;onDeliveryError;outbound;emitBoundary;disposed=!1;holding=!1;constructor(e){this.session=e.session,this.buffer=new At(e.buffer),this.driverId=e.driverId,this.surface=e.surface,this.commandSurfaceLocality=e.commandSurfaceLocality,this.maxFrameBytes=e.maxFrameBytes,this.reporters={personalUsageReporter:e.personalUsageReporter,usageReporter:e.usageReporter,storedSessionUsageReporter:e.storedSessionUsageReporter},this.emitBoundary=J(e=>this.emit(e),(e,t)=>this.reportDeliveryError(e,t)),this.unsubscribe=nt(this.session,this.emitBoundary,{getSurfaceDriverId:()=>this.driverId})}attach(e,t){this.disposed||(this.onDeliveryError=t.onDeliveryError,this.outbound=J(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=ze(e,this.emitBoundary);if(t){if(t.type===`resume`){this.replay(t.lastSeq);return}if(t.type===`ack`){this.buffer.ackThrough(t.seq);return}vt(this.session,this.emitBoundary,t,this.driverId,this.reporters,this.surface,void 0,void 0,this.commandSurfaceLocality,{signal:this.lifetime.signal,...this.maxFrameBytes===void 0?{}:{maxFrameBytes:this.maxFrameBytes}})}}dispose(){this.disposed||(this.disposed=!0,this.lifetime.abort(),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 Vt(){return{origins:new Map}}function Ht(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 Ut(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 Wt(e,t){e.origins.delete(t)}const Gt=[`command`,`filePath`,`file_path`,`path`,`url`,`pattern`,`query`];function Kt(e){for(let t of Gt){let n=e[t];if(typeof n==`string`&&n!==``)return n}}const Q=16*1024,qt=32768;function $(e){let t=``;for(let n=0;n<e.length;n+=qt)t+=String.fromCharCode(...e.subarray(n,n+qt));return btoa(t)}function Jt(e){let t;try{t=atob(e)}catch{return}let n=new Uint8Array(t.length);for(let e=0;e<t.length;e+=1)n[e]=t.charCodeAt(e);return n}function Yt(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(e[n]!==t[n])return!1;return!0}function Xt(e,t,n=Q){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=new TextEncoder().encode(t),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)})}return a}var Zt=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=Jt(e.data);if(n===void 0||$(n)!==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}):Yt(r,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)}let n=new Uint8Array(t.reduce((e,t)=>e+t.length,0)),r=0;for(let e of t)n.set(e,r),r+=e.length;return new TextDecoder(`utf-8`,{ignoreBOM:!0}).decode(n)}};function Qt(e,t=Q){return Math.max(1,Math.ceil(e.byteLength/t))}export{Et as ATTACHED_SURFACE_MAX_PENDING_BYTES,X as CHANNEL_FRAME_MAGIC,Mt as CHANNEL_FRAME_VERSION,Q as DEFAULT_MAX_CHUNK_BYTES,q as DEFAULT_MAX_PENDING_BYTES,Ot as DEFAULT_MAX_PENDING_MS,it as HISTORY_PAGE_MAX_BYTES,Zt as HandoffChunkAssembler,l as MAX_INBOUND_FRAME_BYTES,tt as PROTOCOL_SESSION_EVENT_CLASSIFICATION,At as ResumeBuffer,Bt as SessionResumeBridge,Ut as acknowledgePeerMessage,Ht as admitPeerMessage,Qt as chunkCountFor,Xt as chunkHandoffPayload,J as createOutboundDelivery,Vt as createPeerMessageLedger,kt as createPendingStallClock,ht as createSessionMessageHandler,zt as decodeChannelFrame,P as decodeClientMessage,F as decodeFrame,_e as decodeServerMessage,Ft as encodeBinaryFrame,It as encodeChannelEventFrame,Wt as forgetPeerOrigin,mt as handleSettingsMessage,Lt as isChannelFrame,Ve as isObserverMessageType,Dt as isOverPendingBudget,pt as isSettingsMessage,Kt as permissionSummaryArgument};
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";const l=4*1024*1024;function u(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const d=e=>typeof e==`string`,f=e=>typeof e==`string`&&e.length>0,p=e=>typeof e==`boolean`,m=e=>typeof e==`number`&&Number.isFinite(e),h=e=>Number.isSafeInteger(e)&&e>=0,g=e=>t=>t===void 0||e(t),_=e=>Array.isArray(e)&&e.every(u),v=e=>e===null||u(e),y=e=>t=>typeof t==`string`&&e.includes(t),b={user:!0,"agent-wakeup":!0,peer:!0,external:!0},x=e=>u(e)&&d(e.id)&&d(e.timestamp)&&d(e.category)&&d(e.type),S=e=>Array.isArray(e)&&e.every(x),C=e=>u(e)&&d(e.name)&&d(e.description)&&d(e.definedIn),w=e=>Array.isArray(e)&&e.every(C),T=[`agent`,`process`,`scheduled`],E=[`foreground`,`background`],D=[`queued`,`running`,`waiting_permission`,`sleeping`,`paused`,`completed`,`failed`,`cancelled`],O=[`cancel`,`close`,`send`],k=e=>u(e)&&g(y(T))(e.kind)&&g(y(D))(e.status)&&g(y(E))(e.mode)&&g(p)(e.includeClosed),A=e=>u(e)&&g(d)(e.prompt)&&g(d)(e.stdin),j=e=>u(e)&&m(e.offset),ee=e=>u(e)&&h(e.offset),te=e=>p(e)||e===`allow-session`||e===`allow-project`,ne=e=>u(e)&&(e.type===`answer`&&Array.isArray(e.values)&&e.values.every(d)&&g(d)(e.text)||e.type===`cancelled`&&e.values===void 0&&e.text===void 0),re={language:{language:f},outputStyle:{styleId:f},preset:{presetId:f},permissionMode:{mode:f},sandbox:{enabled:p},removePermissionRule:{scope:f,kind:y([`allow`,`deny`,`ask`]),pattern:f},mcpServerEnabled:{serverId:f,enabled:p},reloadMcpServers:{},pluginEnabled:{pluginId:f,enabled:p},reloadPlugins:{},installPlugin:{pluginId:f},uninstallPlugin:{pluginId:f},providerProfile:{profileName:f},providerModel:{profileName:f,modelId:f},deleteProviderProfile:{profileName:f}},ie=e=>{if(!u(e)||!d(e.field))return!1;let t=e.field;if(!Object.prototype.hasOwnProperty.call(re,t))return!1;let n=re[t];return Object.entries(n).every(([t,n])=>n(e[t]))},ae={none:{},several:{message:d},stopped:{loopId:f,message:g(d)},failed:{loopId:g(f),message:d}},oe=e=>{if(!u(e)||!d(e.kind))return!1;let t=e.kind;if(!Object.prototype.hasOwnProperty.call(ae,t))return!1;let n=ae[t];return Object.entries(n).every(([t,n])=>n(e[t]))};function M(e){return t=>{if(!u(t)||!d(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 se=[`Added`,`Modified`,`Deleted`,`Renamed`,`Copied`,`Untracked`,`Conflicted`],ce=e=>u(e)&&f(e.path)&&y(se)(e.status)&&g(f)(e.renamedFrom)&&g(m)(e.added)&&g(m)(e.removed),le=M({status:{branch:g(d),unborn:p,files:e=>Array.isArray(e)&&e.every(ce),truncated:p},"not-a-repository":{},failed:{message:d}}),ue=[`add`,`remove`,`context`,`hunk`],de=e=>u(e)&&y(ue)(e.type)&&d(e.text)&&m(e.lineNumber),fe=M({diff:{diffLines:e=>Array.isArray(e)&&e.every(de),truncated:p},"not-a-repository":{},"outside-workspace":{},failed:{message:d}}),pe=M({memory:{content:d,path:f,truncated:p},unavailable:{message:d}}),me={submit:{prompt:f},command:{name:f,args:g(d),requestId:g(f)},abort:{},"cancel-queue":{},"get-messages":{},"get-history":{fromIndex:g(h)},"get-prompts":{},"get-context":{},"get-commands":{},"get-status":{},"list-models":{requestId:f},"get-agent-definitions":{requestId:f},"list-sessions":{requestId:f},"new-session":{requestId:g(f)},"switch-session":{sessionId:f,requestId:g(f)},"rename-session":{sessionId:f,name:f,requestId:f},"delete-session":{sessionId:f,requestId:f},"get-usage-report":{},"get-personal-usage-report":{requestId:f,period:y([`7d`,`30d`]),timezone:f},"get-stored-session-usage-report":{requestId:f,sessionId:f},"get-executing":{},"get-pending":{},"get-execution-workspace":{},"read-execution-detail":{requestId:f,entryId:f,cursor:g(ee)},"stop-waiting-loop":{requestId:f},"project-status":{requestId:f},"project-diff":{requestId:f,path:f},"project-memory":{requestId:f},"call-app-tool":{requestId:f,viewId:f,name:f,arguments:u},"read-app-view":{requestId:f,viewId:f},"get-background-tasks":{filter:g(k)},"get-background-task":{taskId:f},"get-background-job-groups":{},"get-background-job-group":{groupId:f},"wait-background-job-group":{groupId:f},"cancel-background-task":{taskId:f,reason:g(d)},"close-background-task":{taskId:f},"send-background-task":{taskId:f,input:A},"read-background-task-log":{taskId:f,cursor:g(j)},"permission-response":{id:f,result:te},"ask-response":{id:f,response:ne},resume:{lastSeq:m},ack:{seq:m},"get-settings":{requestId:f},"update-settings":{requestId:f,patch:ie}},N={driverId:g(d)},he={text_delta:{delta:d,...N},user_message:{content:d,...N},tool_start:{state:u,...N},tool_end:{state:u,...N},thinking:{isThinking:p,...N},complete:{result:u,...N},interrupted:{result:u,...N},error:{message:d,code:g(y([`auth`,`rate_limit`,`model_unavailable`,`network`,`provider`])),provider:g(d),retryAfterSeconds:g(m),model:g(d),...N},command_result:{name:d,message:d,success:p,requestId:g(d)},messages:{messages:_,display:g(_),...N},history:{startIndex:h,total:h,entries:S},context:{state:u},history_changed:{compact:g(e=>u(e)&&y([`auto`,`manual`])(e.trigger)&&m(e.beforeUsedPercentage)&&m(e.afterUsedPercentage))},turn_source:{source:y(Object.keys(b))},commands:{commands:_,skills:_},session_status:{status:u},model_list:{requestId:f,groups:_,currentProfile:g(d),currentModel:d},agent_definitions:{requestId:f,agents:w,current:f},sessions:{requestId:f,listing:u},sessions_error:{requestId:f,code:y([`not_available`,`list_failed`]),message:d},session_switched:{event:u},session_change_failed:{code:y(e),message:d,requestId:g(d)},session_renamed_in_list:{requestId:f,sessionId:d,name:d},session_rename_failed:{requestId:f,message:d},session_deleted:{requestId:f,sessionId:d},session_delete_failed:{requestId:f,code:y(t),message:d},usage_report:{report:u},personal_usage_report:{requestId:f,report:u},personal_usage_report_error:{requestId:f,code:y([`not_available`,`report_failed`]),message:d},stored_session_usage_report:{requestId:f,sessionId:f,report:u},stored_session_usage_report_error:{requestId:f,sessionId:f,code:y([`not_available`,`report_failed`]),message:d},executing:{executing:p},pending:{pending:e=>e===null||d(e),pendingCount:g(h)},execution_workspace_event:{snapshot:u},execution_detail:{requestId:f,page:u},execution_detail_error:{requestId:f,message:d},waiting_loop_stop:{requestId:f,outcome:oe},project_status:{requestId:f,result:le},project_diff:{requestId:f,result:fe},project_memory:{requestId:f,result:pe},app_tool_result:{requestId:f,success:p,data:()=>!0,parts:g(_),error:g(d)},app_view:{requestId:f,view:u},background_task_event:{event:u},background_job_group_event:{event:u},plan_event:{event:u},context_file_refreshed:{event:u},branch_event:{event:u},background_tasks:{tasks:_},background_task:{taskId:d,task:v},background_job_groups:{groups:_},background_job_group:{groupId:d,group:v},background_task_log:{taskId:d,page:u},permission_request:{event:u},ask_request:{event:u},prompt_resolved:{event:u},ui_intent:{event:u},session_renamed:{event:u},history_cleared:{},background_task_control_result:{action:y(O),taskId:d,success:p,message:g(d)},protocol_error:{message:d,requestId:g(d)},resume_gap:{},settings:{requestId:f,settings:u},settings_error:{requestId:f,code:y([`not_available`,`invalid`,`refused`,`update_failed`]),message:d}};function P(e,t,n){if(!u(e))return{ok:!1,reason:`message must be a JSON object`};let r=e.type;if(!d(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 F(e){return P(e,me,e=>e===`prompt`?`prompt must be a non-empty string`:`${e} has an invalid shape`)}function ge(e){return P(e,he,e=>`${e} has an invalid shape`)}function I(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 _e(e){return e.type===`call-app-tool`}function ve(e){return e.type===`read-app-view`}function L(e){return e?.maxFrameBytes??4193280}function R(e,t){return new TextEncoder().encode(JSON.stringify(e)).byteLength<=t}function ye(e,t,n,r,i){let{requestId:a}=n,o=e.readToolAppView(n.viewId);if(o===void 0){t({type:`protocol_error`,message:`This app view is no longer available.`,requestId:a});return}if(!Object.values(o.callableTools).includes(n.name)){t({type:`protocol_error`,message:`This tool is not available to this app view.`,requestId:a});return}let{signal:s}=i??{},c=L(i);e.invokeRuntimeTool(n.name,n.arguments,{permissionInteraction:`interactive`,...r?{driverId:r}:{},...s?{signal:s}:{}}).then(e=>{if(s?.aborted)return;let n={type:`app_tool_result`,requestId:a,success:e.success,...e.result===void 0?{}:{data:e.result},...e.parts===void 0?{}:{parts:e.parts},...e.error===void 0?{}:{error:e.error}};R(n,c)?t(n):t({type:`protocol_error`,message:`This app tool result is too large to send.`,requestId:a})},e=>{s?.aborted||t({type:`protocol_error`,message:e instanceof Error?e.message:String(e),requestId:a})})}function be(e,t,n,r){let{requestId:i}=n,a=e.readToolAppView(n.viewId);if(a===void 0){t({type:`protocol_error`,message:`This app view is no longer available.`,requestId:i});return}let o={type:`app_view`,requestId:i,view:a};if(!R(o,L(r))){t({type:`protocol_error`,message:`This app view is too large to send.`,requestId:i});return}t(o)}function xe(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`){Ce(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`){Te(e,t,n);return}if(n.type===`wait-background-job-group`){Ee(e,t,n);return}we(e,t,n)}function Se(e,t,n){if(!n.taskId){t({type:`protocol_error`,message:`taskId is required`});return}if(n.type===`cancel-background-task`){z(t,`cancel`,n.taskId,e.cancelBackgroundTask(n.taskId,n.reason));return}if(n.type===`close-background-task`){z(t,`close`,n.taskId,e.closeBackgroundTask(n.taskId));return}De(e,t,n)}function Ce(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 we(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 Te(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 Ee(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 De(e,t,n){if(!n.input){t({type:`protocol_error`,message:`input is required`});return}z(t,`send`,n.taskId,e.sendBackgroundTask(n.taskId,n.input))}function z(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 Oe(e){return e.type===`stop-waiting-loop`}function ke(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:Ae(e)}}))}function Ae(e){return e instanceof Error?e.message:String(e)}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:H(e)}))}catch(e){t({type:`protocol_error`,message:H(e instanceof Error?e:String(e))})}}function Ie(e,t,n){if(!n){B(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=>B(e,t,`report_failed`,H(n)))}catch(n){B(e,t,`report_failed`,H(n instanceof Error?n:String(n)))}}function B(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){V(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=>V(e,t.requestId,`report_failed`,H(n)))}catch(n){V(e,t.requestId,`report_failed`,H(n instanceof Error?n:String(n)))}}function V(e,t,n,r){e({type:`personal_usage_report_error`,requestId:t,code:n,message:r})}function H(e){return e instanceof Error?e.message:String(e)}function Re(e,t){let n=I(e,F);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 ze=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 Be(e){return ze.has(e)}function Ve(e){return e.type===`project-status`||e.type===`project-diff`||e.type===`project-memory`}function U(e,t){e({type:`protocol_error`,message:`This host does not support the Project panel.`,requestId:t})}function He(e,t,n){let{requestId:r}=n;if(n.type===`project-status`){if(!e.readProjectStatus)return U(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 U(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 U(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 Ue(e){return e.type===`list-sessions`||e.type===`new-session`||e.type===`switch-session`}function We(e){return e.type===`rename-session`}function Ge(e){return e.type===`delete-session`}function Ke(e,t,r){if(t.type===`list-sessions`){qe(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:W(t),...i}))}function qe(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:W(n instanceof Error?n:String(n))})}}function W(e){return e instanceof Error?e.message:String(e)}function Je(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:W(n)}))}function Ye(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:W(n)}))}const G=new WeakMap;function Xe(e){let t=G.get(e);t===void 0&&(t={frames:new Map,holders:0},G.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&&G.get(e)===n&&G.delete(e))}}}function Ze(e){return[...G.get(e)?.frames.values()??[]]}function Qe(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 $e(e){let t;for(let n of Qe(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 et={text_delta:`forwarded`,tool_start:`forwarded`,tool_end:`forwarded`,thinking:`forwarded`,thinking_delta:`non-surface`,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 tt(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:nt(e),...r()}),u=e=>t({type:`interrupted`,result:nt(e),...r()}),d=e=>t({type:`error`,message:e.message,...$e(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?Xe(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:`history_changed`,compact:{trigger:e.trigger,beforeUsedPercentage:e.before.usedPercentage,afterUsedPercentage:e.after.usedPercentage}}),A=e=>t({type:`turn_source`,source:e}),j=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`,k),e.on(`skill_activation`,O),e.on(`memory_event`,O),e.on(`turn_source`,A),e.on(`status_changed`,j),()=>{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`,k),e.off(`skill_activation`,O),e.off(`memory_event`,O),e.off(`turn_source`,A),e.off(`status_changed`,j),y?.release()}}function nt(e){let{history:t,...n}=e;return n}const rt=256*1024,it=new TextEncoder;function at(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 ot(e,t,n){if(n.type===`get-messages`)t({type:`messages`,messages:e.getMessages(),display:e.getMessagesDisplay()});else if(n.type===`get-history`)t(lt(e,n.fromIndex??0));else if(n.type===`get-prompts`)for(let n of Ze(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`?st(e,t,n):t(ct(e))}function st(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 ct(e){return{type:`pending`,pending:e.getPendingPrompt(),pendingCount:e.getPendingCount()}}function lt(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=ut(n[e]),r=it.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 ut(e){return{...e,timestamp:dt(e.timestamp)}}function dt(e){return typeof e==`string`?e:e.toISOString()}function ft(e){return e.type===`get-settings`||e.type===`update-settings`}function pt(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 mt(e){let t=e.role??`drive`,n=tt(e.session,e.deliver,{getSurfaceDriverId:()=>e.driverId,receivePrompts:t===`drive`}),r=new AbortController,i=()=>{r.abort(),n()};return{onMessage:ht(e.session,e.deliver,e.driverId,{personalUsageReporter:e.personalUsageReporter,usageReporter:e.usageReporter,storedSessionUsageReporter:e.storedSessionUsageReporter},e.surface,t,e.sessionDirectory,e.settingsReporter,e.commandSurfaceLocality,{signal:r.signal,...e.maxFrameBytes===void 0?{}:{maxFrameBytes:e.maxFrameBytes}}),cleanup:i}}function ht(e,t,n,r=gt,i,a=`drive`,o,s,c,l){return u=>{let d=Re(u,t);if(d){if(a===`observe`&&!Be(d.type)){t({type:`protocol_error`,message:`Not permitted for an observer: ${d.type}`});return}_t(e,t,d,n,r,i,o,s,c,l)}}}const gt={personalUsageReporter:void 0,usageReporter:void 0,storedSessionUsageReporter:void 0};function _t(e,t,n,r,i=gt,a,o,s,c,l){if(Pe(e,t,n,i))return;if(Ue(n)){Ke(t,n,o);return}if(ft(n)){pt(e,t,n,s,c);return}if(We(n)){Je(t,n,o);return}if(Ge(n)){Ye(t,n,o);return}if(vt(n)){Ct(e,t,n,r,a,c);return}if(Oe(n)){ke(e,t,n);return}if(at(n)){ot(e,t,n);return}if(Ve(n)){He(e,t,n);return}if(_e(n)){ye(e,t,n,r,l);return}if(ve(n)){be(e,t,n,l);return}if(yt(n)){xe(e,t,n);return}if(bt(n)){Se(e,t,n);return}if(xt(n)){St(e,n,r);return}let u=n.type;t({type:`protocol_error`,message:`Unknown message type: ${u}`})}function vt(e){return e.type===`submit`||e.type===`command`||e.type===`abort`||e.type===`cancel-queue`}function yt(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 bt(e){return e.type===`cancel-background-task`||e.type===`close-background-task`||e.type===`send-background-task`}function xt(e){return e.type===`permission-response`||e.type===`ask-response`}function St(e,t,n){t.type===`permission-response`?e.resolvePermission(t.id,t.result,n):e.resolveAsk(t.id,t.response,n)}function Ct(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(ct(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 wt=1024*1024,J=8*wt,Tt=wt;function Et(e,t=J){return e!==void 0&&e>t}const Dt=120*1e3;function Ot(e=Dt,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 Y(e,t,n,r=J,i=Ot()){let a=!1,o=t=>{if(a)return;let o=n?.();if(Et(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 kt=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 X=new TextEncoder,At=new TextDecoder,Z=X.encode(`RBF`),jt=1,Mt=4294967295;function Nt(e,t){let n=X.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>Mt)throw Error(`seq must be an integer in 0..${Mt} (got ${t})`);return n}function Q(e,t,n,r){e.set(Z,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 Pt(e){let t=Nt(e.channel,e.seq),n=new Uint8Array(6+t.byteLength+4+e.payload.byteLength),r=Q(n,1,t,e.seq);return n.set(e.payload,r),n}function Ft(e){let t=Nt(e.channel,e.seq),n=X.encode(JSON.stringify({event:e.event,payload:e.payload})),r=new Uint8Array(6+t.byteLength+4+n.byteLength),i=Q(r,2,t,e.seq);return r.set(n,i),r}function It(e){return e.byteLength<Z.length?!1:Z.every((t,n)=>e[n]===t)}function Lt(e){let t=At.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 Rt(e){if(!It(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=At.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=Lt(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 zt=class{session;buffer;driverId;reporters;surface;commandSurfaceLocality;maxFrameBytes;lifetime=new AbortController;unsubscribe;onDeliveryError;outbound;emitBoundary;disposed=!1;holding=!1;constructor(e){this.session=e.session,this.buffer=new kt(e.buffer),this.driverId=e.driverId,this.surface=e.surface,this.commandSurfaceLocality=e.commandSurfaceLocality,this.maxFrameBytes=e.maxFrameBytes,this.reporters={personalUsageReporter:e.personalUsageReporter,usageReporter:e.usageReporter,storedSessionUsageReporter:e.storedSessionUsageReporter},this.emitBoundary=Y(e=>this.emit(e),(e,t)=>this.reportDeliveryError(e,t)),this.unsubscribe=tt(this.session,this.emitBoundary,{getSurfaceDriverId:()=>this.driverId})}attach(e,t){this.disposed||(this.onDeliveryError=t.onDeliveryError,this.outbound=Y(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=Re(e,this.emitBoundary);if(t){if(t.type===`resume`){this.replay(t.lastSeq);return}if(t.type===`ack`){this.buffer.ackThrough(t.seq);return}_t(this.session,this.emitBoundary,t,this.driverId,this.reporters,this.surface,void 0,void 0,this.commandSurfaceLocality,{signal:this.lifetime.signal,...this.maxFrameBytes===void 0?{}:{maxFrameBytes:this.maxFrameBytes}})}}dispose(){this.disposed||(this.disposed=!0,this.lifetime.abort(),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 Bt(){return{origins:new Map}}function Vt(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 Ht(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 Ut(e,t){e.origins.delete(t)}const Wt=[`command`,`filePath`,`file_path`,`path`,`url`,`pattern`,`query`];function Gt(e){for(let t of Wt){let n=e[t];if(typeof n==`string`&&n!==``)return n}}const $=16*1024,Kt=32768;function qt(e){let t=``;for(let n=0;n<e.length;n+=Kt)t+=String.fromCharCode(...e.subarray(n,n+Kt));return btoa(t)}function Jt(e){let t;try{t=atob(e)}catch{return}let n=new Uint8Array(t.length);for(let e=0;e<t.length;e+=1)n[e]=t.charCodeAt(e);return n}function Yt(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(e[n]!==t[n])return!1;return!0}function Xt(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=new TextEncoder().encode(t),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:qt(o)})}return a}var Zt=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=Jt(e.data);if(n===void 0||qt(n)!==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}):Yt(r,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)}let n=new Uint8Array(t.reduce((e,t)=>e+t.length,0)),r=0;for(let e of t)n.set(e,r),r+=e.length;return new TextDecoder(`utf-8`,{ignoreBOM:!0}).decode(n)}};function Qt(e,t=$){return Math.max(1,Math.ceil(e.byteLength/t))}export{Tt as ATTACHED_SURFACE_MAX_PENDING_BYTES,Z as CHANNEL_FRAME_MAGIC,jt as CHANNEL_FRAME_VERSION,$ as DEFAULT_MAX_CHUNK_BYTES,J as DEFAULT_MAX_PENDING_BYTES,Dt as DEFAULT_MAX_PENDING_MS,rt as HISTORY_PAGE_MAX_BYTES,Zt as HandoffChunkAssembler,l as MAX_INBOUND_FRAME_BYTES,et as PROTOCOL_SESSION_EVENT_CLASSIFICATION,kt as ResumeBuffer,zt as SessionResumeBridge,Ht as acknowledgePeerMessage,Vt as admitPeerMessage,Qt as chunkCountFor,Xt as chunkHandoffPayload,Y as createOutboundDelivery,Bt as createPeerMessageLedger,Ot as createPendingStallClock,mt as createSessionMessageHandler,Rt as decodeChannelFrame,F as decodeClientMessage,I as decodeFrame,ge as decodeServerMessage,Pt as encodeBinaryFrame,Ft as encodeChannelEventFrame,Ut as forgetPeerOrigin,pt as handleSettingsMessage,It as isChannelFrame,Be as isObserverMessageType,Et as isOverPendingBudget,ft as isSettingsMessage,Gt as permissionSummaryArgument};
2
2
  //# sourceMappingURL=index.js.map