@robota-sdk/agent-transport 3.0.0-beta.96 → 3.0.0-beta.99

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,4 +1,4 @@
1
- import { IAskRequestEvent, IBranchEvent, IContextFileRefreshedEvent, IExecutionResult, IModelListGroup, IPermissionRequestEvent, IPlanApprovalEvent, IPromptResolvedEvent, ISessionConversationRead, ISessionListing, ISessionRenamedEvent, ISessionStatusSnapshot, ISessionSwitchedEvent, ISettingsSnapshot, IToolState, IUiIntentEvent, TDriverId, TPermissionResultValue, TProjectDiffRead, TProjectMemoryRead, TProjectStatusRead, TSessionChangeRefusalCode, TSessionDeleteRefusalCode, TSettingsPatch, TTurnSource, TWaitingLoopStopOutcome } from "@robota-sdk/agent-interface-session";
1
+ import { IAskRequestEvent, IBranchEvent, ICompactEvent, IContextFileRefreshedEvent, IExecutionResult, IModelListGroup, IPermissionRequestEvent, IPlanApprovalEvent, IPromptResolvedEvent, ISessionConversationRead, ISessionListing, ISessionRenamedEvent, ISessionStatusSnapshot, ISessionSwitchedEvent, ISettingsSnapshot, IToolState, IUiIntentEvent, TDriverId, TPermissionResultValue, TProjectDiffRead, TProjectMemoryRead, TProjectStatusRead, TSessionChangeRefusalCode, TSessionDeleteRefusalCode, TSettingsPatch, TTurnSource, TWaitingLoopStopOutcome } from "@robota-sdk/agent-interface-session";
2
2
  import { IToolAppView, IToolExecutionResult, TToolParameters, TUniversalMessagePart } from "@robota-sdk/agent-core";
3
3
  import { IPersonalUsageReport, IPersonalUsageRequest, IUsageBySourceReport } from "@robota-sdk/agent-interface-analytics";
4
4
  import { ICommandListEntry, ICommandResult, ICommandSkillListEntry } from "@robota-sdk/agent-interface-command";
@@ -262,6 +262,12 @@ type TServerMessage = {
262
262
  state: ReturnType<ISessionConversationRead['getContextState']>;
263
263
  } | {
264
264
  type: 'history_changed';
265
+ /** A completed compaction, for clients that do not render the full system history. */
266
+ compact?: {
267
+ trigger: ICompactEvent['trigger'];
268
+ beforeUsedPercentage: number;
269
+ afterUsedPercentage: number;
270
+ };
265
271
  } | {
266
272
  type: 'turn_source';
267
273
  source: TTurnSource;
@@ -490,4 +496,4 @@ declare function decodeFrame<TMessage>(data: string, decode: (value: unknown) =>
490
496
  declare function isObserverMessageType(type: string): boolean;
491
497
  //#endregion
492
498
  export { decodeFrame as a, IWireHistoryEntry as c, TServerMessage as d, TWireExecutionResult as f, decodeClientMessage as i, TClientMessage as l, MAX_INBOUND_FRAME_BYTES as n, decodeServerMessage as o, TMessageDecodeResult as r, IWireAgentDefinitionSummary as s, isObserverMessageType as t, TSeqServerMessage as u };
493
- //# sourceMappingURL=observer-messages-DoWb6RNv.d.ts.map
499
+ //# sourceMappingURL=observer-messages-4fRQZU2D.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observer-messages-4fRQZU2D.d.ts","names":[],"sources":["../../src/wire-messages.ts","../../src/message-decoders.ts","../../src/observer-messages.ts"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{SESSION_CHANGE_REFUSAL_CODES as e,SESSION_DELETE_REFUSAL_CODES as t}from"@robota-sdk/agent-interface-session";const n=4*1024*1024;function r(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const i=e=>typeof e==`string`,a=e=>typeof e==`string`&&e.length>0,o=e=>typeof e==`boolean`,s=e=>typeof e==`number`&&Number.isFinite(e),c=e=>Number.isSafeInteger(e)&&e>=0,l=e=>t=>t===void 0||e(t),u=e=>Array.isArray(e)&&e.every(r),d=e=>e===null||r(e),f=e=>t=>typeof t==`string`&&e.includes(t),p={user:!0,"agent-wakeup":!0,peer:!0,external:!0},m=e=>r(e)&&i(e.id)&&i(e.timestamp)&&i(e.category)&&i(e.type),h=e=>Array.isArray(e)&&e.every(m),g=e=>r(e)&&i(e.name)&&i(e.description)&&i(e.definedIn),_=e=>Array.isArray(e)&&e.every(g),v=[`agent`,`process`,`scheduled`],y=[`foreground`,`background`],b=[`queued`,`running`,`waiting_permission`,`sleeping`,`paused`,`completed`,`failed`,`cancelled`],x=[`cancel`,`close`,`send`],S=e=>r(e)&&l(f(v))(e.kind)&&l(f(b))(e.status)&&l(f(y))(e.mode)&&l(o)(e.includeClosed),C=e=>r(e)&&l(i)(e.prompt)&&l(i)(e.stdin),w=e=>r(e)&&s(e.offset),T=e=>r(e)&&c(e.offset),E=e=>o(e)||e===`allow-session`||e===`allow-project`,D=e=>r(e)&&(e.type===`answer`&&Array.isArray(e.values)&&e.values.every(i)&&l(i)(e.text)||e.type===`cancelled`&&e.values===void 0&&e.text===void 0),O={language:{language:a},outputStyle:{styleId:a},preset:{presetId:a},permissionMode:{mode:a},sandbox:{enabled:o},removePermissionRule:{scope:a,kind:f([`allow`,`deny`,`ask`]),pattern:a},mcpServerEnabled:{serverId:a,enabled:o},reloadMcpServers:{},pluginEnabled:{pluginId:a,enabled:o},reloadPlugins:{},installPlugin:{pluginId:a},uninstallPlugin:{pluginId:a},providerProfile:{profileName:a},providerModel:{profileName:a,modelId:a},deleteProviderProfile:{profileName:a}},k=e=>{if(!r(e)||!i(e.field))return!1;let t=e.field;if(!Object.prototype.hasOwnProperty.call(O,t))return!1;let n=O[t];return Object.entries(n).every(([t,n])=>n(e[t]))},A={none:{},several:{message:i},stopped:{loopId:a,message:l(i)},failed:{loopId:l(a),message:i}},j=e=>{if(!r(e)||!i(e.kind))return!1;let t=e.kind;if(!Object.prototype.hasOwnProperty.call(A,t))return!1;let n=A[t];return Object.entries(n).every(([t,n])=>n(e[t]))};function M(e){return t=>{if(!r(t)||!i(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 N=[`Added`,`Modified`,`Deleted`,`Renamed`,`Copied`,`Untracked`,`Conflicted`],P=e=>r(e)&&a(e.path)&&f(N)(e.status)&&l(a)(e.renamedFrom)&&l(s)(e.added)&&l(s)(e.removed),F=M({status:{branch:l(i),unborn:o,files:e=>Array.isArray(e)&&e.every(P),truncated:o},"not-a-repository":{},failed:{message:i}}),I=[`add`,`remove`,`context`,`hunk`],L=e=>r(e)&&f(I)(e.type)&&i(e.text)&&s(e.lineNumber),R=M({diff:{diffLines:e=>Array.isArray(e)&&e.every(L),truncated:o},"not-a-repository":{},"outside-workspace":{},failed:{message:i}}),z=M({memory:{content:i,path:a,truncated:o},unavailable:{message:i}}),B={submit:{prompt:a},command:{name:a,args:l(i),requestId:l(a)},abort:{},"cancel-queue":{},"get-messages":{},"get-history":{fromIndex:l(c)},"get-prompts":{},"get-context":{},"get-commands":{},"get-status":{},"list-models":{requestId:a},"get-agent-definitions":{requestId:a},"list-sessions":{requestId:a},"new-session":{requestId:l(a)},"switch-session":{sessionId:a,requestId:l(a)},"rename-session":{sessionId:a,name:a,requestId:a},"delete-session":{sessionId:a,requestId:a},"get-usage-report":{},"get-personal-usage-report":{requestId:a,period:f([`7d`,`30d`]),timezone:a},"get-stored-session-usage-report":{requestId:a,sessionId:a},"get-executing":{},"get-pending":{},"get-execution-workspace":{},"read-execution-detail":{requestId:a,entryId:a,cursor:l(T)},"stop-waiting-loop":{requestId:a},"project-status":{requestId:a},"project-diff":{requestId:a,path:a},"project-memory":{requestId:a},"call-app-tool":{requestId:a,viewId:a,name:a,arguments:r},"read-app-view":{requestId:a,viewId:a},"get-background-tasks":{filter:l(S)},"get-background-task":{taskId:a},"get-background-job-groups":{},"get-background-job-group":{groupId:a},"wait-background-job-group":{groupId:a},"cancel-background-task":{taskId:a,reason:l(i)},"close-background-task":{taskId:a},"send-background-task":{taskId:a,input:C},"read-background-task-log":{taskId:a,cursor:l(w)},"permission-response":{id:a,result:E},"ask-response":{id:a,response:D},resume:{lastSeq:s},ack:{seq:s},"get-settings":{requestId:a},"update-settings":{requestId:a,patch:k}},V={driverId:l(i)},H={text_delta:{delta:i,...V},user_message:{content:i,...V},tool_start:{state:r,...V},tool_end:{state:r,...V},thinking:{isThinking:o,...V},complete:{result:r,...V},interrupted:{result:r,...V},error:{message:i,code:l(f([`auth`,`rate_limit`,`model_unavailable`,`network`,`provider`])),provider:l(i),retryAfterSeconds:l(s),model:l(i),...V},command_result:{name:i,message:i,success:o,requestId:l(i)},messages:{messages:u,display:l(u),...V},history:{startIndex:c,total:c,entries:h},context:{state:r},history_changed:{},turn_source:{source:f(Object.keys(p))},commands:{commands:u,skills:u},session_status:{status:r},model_list:{requestId:a,groups:u,currentProfile:l(i),currentModel:i},agent_definitions:{requestId:a,agents:_,current:a},sessions:{requestId:a,listing:r},sessions_error:{requestId:a,code:f([`not_available`,`list_failed`]),message:i},session_switched:{event:r},session_change_failed:{code:f(e),message:i,requestId:l(i)},session_renamed_in_list:{requestId:a,sessionId:i,name:i},session_rename_failed:{requestId:a,message:i},session_deleted:{requestId:a,sessionId:i},session_delete_failed:{requestId:a,code:f(t),message:i},usage_report:{report:r},personal_usage_report:{requestId:a,report:r},personal_usage_report_error:{requestId:a,code:f([`not_available`,`report_failed`]),message:i},stored_session_usage_report:{requestId:a,sessionId:a,report:r},stored_session_usage_report_error:{requestId:a,sessionId:a,code:f([`not_available`,`report_failed`]),message:i},executing:{executing:o},pending:{pending:e=>e===null||i(e),pendingCount:l(c)},execution_workspace_event:{snapshot:r},execution_detail:{requestId:a,page:r},execution_detail_error:{requestId:a,message:i},waiting_loop_stop:{requestId:a,outcome:j},project_status:{requestId:a,result:F},project_diff:{requestId:a,result:R},project_memory:{requestId:a,result:z},app_tool_result:{requestId:a,success:o,data:()=>!0,parts:l(u),error:l(i)},app_view:{requestId:a,view:r},background_task_event:{event:r},background_job_group_event:{event:r},plan_event:{event:r},context_file_refreshed:{event:r},branch_event:{event:r},background_tasks:{tasks:u},background_task:{taskId:i,task:d},background_job_groups:{groups:u},background_job_group:{groupId:i,group:d},background_task_log:{taskId:i,page:r},permission_request:{event:r},ask_request:{event:r},prompt_resolved:{event:r},ui_intent:{event:r},session_renamed:{event:r},history_cleared:{},background_task_control_result:{action:f(x),taskId:i,success:o,message:l(i)},protocol_error:{message:i,requestId:l(i)},resume_gap:{},settings:{requestId:a,settings:r},settings_error:{requestId:a,code:f([`not_available`,`invalid`,`refused`,`update_failed`]),message:i}};function U(e,t,n){if(!r(e))return{ok:!1,reason:`message must be a JSON object`};let a=e.type;if(!i(a))return{ok:!1,reason:`message type must be a string`};let o=Object.prototype.hasOwnProperty.call(t,a)?t[a]:void 0;if(o===void 0)return{ok:!1,reason:`Unknown message type: ${a}`};for(let[t,r]of Object.entries(o))if(!r(e[t]))return{ok:!1,reason:n(t)};return{ok:!0,message:e}}function W(e){return U(e,B,e=>e===`prompt`?`prompt must be a non-empty string`:`${e} has an invalid shape`)}function G(e){return U(e,H,e=>`${e} has an invalid shape`)}function K(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)}const q=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 J(e){return q.has(e)}export{G as a,K as i,n,W as r,J as t};
2
- //# sourceMappingURL=observer-messages-UG77sTYK.js.map
1
+ import{SESSION_CHANGE_REFUSAL_CODES as e,SESSION_DELETE_REFUSAL_CODES as t}from"@robota-sdk/agent-interface-session";const n=4*1024*1024;function r(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const i=e=>typeof e==`string`,a=e=>typeof e==`string`&&e.length>0,o=e=>typeof e==`boolean`,s=e=>typeof e==`number`&&Number.isFinite(e),c=e=>Number.isSafeInteger(e)&&e>=0,l=e=>t=>t===void 0||e(t),u=e=>Array.isArray(e)&&e.every(r),d=e=>e===null||r(e),f=e=>t=>typeof t==`string`&&e.includes(t),p={user:!0,"agent-wakeup":!0,peer:!0,external:!0},m=e=>r(e)&&i(e.id)&&i(e.timestamp)&&i(e.category)&&i(e.type),h=e=>Array.isArray(e)&&e.every(m),g=e=>r(e)&&i(e.name)&&i(e.description)&&i(e.definedIn),_=e=>Array.isArray(e)&&e.every(g),v=[`agent`,`process`,`scheduled`],y=[`foreground`,`background`],b=[`queued`,`running`,`waiting_permission`,`sleeping`,`paused`,`completed`,`failed`,`cancelled`],x=[`cancel`,`close`,`send`],S=e=>r(e)&&l(f(v))(e.kind)&&l(f(b))(e.status)&&l(f(y))(e.mode)&&l(o)(e.includeClosed),C=e=>r(e)&&l(i)(e.prompt)&&l(i)(e.stdin),w=e=>r(e)&&s(e.offset),T=e=>r(e)&&c(e.offset),E=e=>o(e)||e===`allow-session`||e===`allow-project`,D=e=>r(e)&&(e.type===`answer`&&Array.isArray(e.values)&&e.values.every(i)&&l(i)(e.text)||e.type===`cancelled`&&e.values===void 0&&e.text===void 0),O={language:{language:a},outputStyle:{styleId:a},preset:{presetId:a},permissionMode:{mode:a},sandbox:{enabled:o},removePermissionRule:{scope:a,kind:f([`allow`,`deny`,`ask`]),pattern:a},mcpServerEnabled:{serverId:a,enabled:o},reloadMcpServers:{},pluginEnabled:{pluginId:a,enabled:o},reloadPlugins:{},installPlugin:{pluginId:a},uninstallPlugin:{pluginId:a},providerProfile:{profileName:a},providerModel:{profileName:a,modelId:a},deleteProviderProfile:{profileName:a}},k=e=>{if(!r(e)||!i(e.field))return!1;let t=e.field;if(!Object.prototype.hasOwnProperty.call(O,t))return!1;let n=O[t];return Object.entries(n).every(([t,n])=>n(e[t]))},A={none:{},several:{message:i},stopped:{loopId:a,message:l(i)},failed:{loopId:l(a),message:i}},j=e=>{if(!r(e)||!i(e.kind))return!1;let t=e.kind;if(!Object.prototype.hasOwnProperty.call(A,t))return!1;let n=A[t];return Object.entries(n).every(([t,n])=>n(e[t]))};function M(e){return t=>{if(!r(t)||!i(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 N=[`Added`,`Modified`,`Deleted`,`Renamed`,`Copied`,`Untracked`,`Conflicted`],P=e=>r(e)&&a(e.path)&&f(N)(e.status)&&l(a)(e.renamedFrom)&&l(s)(e.added)&&l(s)(e.removed),F=M({status:{branch:l(i),unborn:o,files:e=>Array.isArray(e)&&e.every(P),truncated:o},"not-a-repository":{},failed:{message:i}}),I=[`add`,`remove`,`context`,`hunk`],L=e=>r(e)&&f(I)(e.type)&&i(e.text)&&s(e.lineNumber),R=M({diff:{diffLines:e=>Array.isArray(e)&&e.every(L),truncated:o},"not-a-repository":{},"outside-workspace":{},failed:{message:i}}),z=M({memory:{content:i,path:a,truncated:o},unavailable:{message:i}}),B={submit:{prompt:a},command:{name:a,args:l(i),requestId:l(a)},abort:{},"cancel-queue":{},"get-messages":{},"get-history":{fromIndex:l(c)},"get-prompts":{},"get-context":{},"get-commands":{},"get-status":{},"list-models":{requestId:a},"get-agent-definitions":{requestId:a},"list-sessions":{requestId:a},"new-session":{requestId:l(a)},"switch-session":{sessionId:a,requestId:l(a)},"rename-session":{sessionId:a,name:a,requestId:a},"delete-session":{sessionId:a,requestId:a},"get-usage-report":{},"get-personal-usage-report":{requestId:a,period:f([`7d`,`30d`]),timezone:a},"get-stored-session-usage-report":{requestId:a,sessionId:a},"get-executing":{},"get-pending":{},"get-execution-workspace":{},"read-execution-detail":{requestId:a,entryId:a,cursor:l(T)},"stop-waiting-loop":{requestId:a},"project-status":{requestId:a},"project-diff":{requestId:a,path:a},"project-memory":{requestId:a},"call-app-tool":{requestId:a,viewId:a,name:a,arguments:r},"read-app-view":{requestId:a,viewId:a},"get-background-tasks":{filter:l(S)},"get-background-task":{taskId:a},"get-background-job-groups":{},"get-background-job-group":{groupId:a},"wait-background-job-group":{groupId:a},"cancel-background-task":{taskId:a,reason:l(i)},"close-background-task":{taskId:a},"send-background-task":{taskId:a,input:C},"read-background-task-log":{taskId:a,cursor:l(w)},"permission-response":{id:a,result:E},"ask-response":{id:a,response:D},resume:{lastSeq:s},ack:{seq:s},"get-settings":{requestId:a},"update-settings":{requestId:a,patch:k}},V={driverId:l(i)},H={text_delta:{delta:i,...V},user_message:{content:i,...V},tool_start:{state:r,...V},tool_end:{state:r,...V},thinking:{isThinking:o,...V},complete:{result:r,...V},interrupted:{result:r,...V},error:{message:i,code:l(f([`auth`,`rate_limit`,`model_unavailable`,`network`,`provider`])),provider:l(i),retryAfterSeconds:l(s),model:l(i),...V},command_result:{name:i,message:i,success:o,requestId:l(i)},messages:{messages:u,display:l(u),...V},history:{startIndex:c,total:c,entries:h},context:{state:r},history_changed:{compact:l(e=>r(e)&&f([`auto`,`manual`])(e.trigger)&&s(e.beforeUsedPercentage)&&s(e.afterUsedPercentage))},turn_source:{source:f(Object.keys(p))},commands:{commands:u,skills:u},session_status:{status:r},model_list:{requestId:a,groups:u,currentProfile:l(i),currentModel:i},agent_definitions:{requestId:a,agents:_,current:a},sessions:{requestId:a,listing:r},sessions_error:{requestId:a,code:f([`not_available`,`list_failed`]),message:i},session_switched:{event:r},session_change_failed:{code:f(e),message:i,requestId:l(i)},session_renamed_in_list:{requestId:a,sessionId:i,name:i},session_rename_failed:{requestId:a,message:i},session_deleted:{requestId:a,sessionId:i},session_delete_failed:{requestId:a,code:f(t),message:i},usage_report:{report:r},personal_usage_report:{requestId:a,report:r},personal_usage_report_error:{requestId:a,code:f([`not_available`,`report_failed`]),message:i},stored_session_usage_report:{requestId:a,sessionId:a,report:r},stored_session_usage_report_error:{requestId:a,sessionId:a,code:f([`not_available`,`report_failed`]),message:i},executing:{executing:o},pending:{pending:e=>e===null||i(e),pendingCount:l(c)},execution_workspace_event:{snapshot:r},execution_detail:{requestId:a,page:r},execution_detail_error:{requestId:a,message:i},waiting_loop_stop:{requestId:a,outcome:j},project_status:{requestId:a,result:F},project_diff:{requestId:a,result:R},project_memory:{requestId:a,result:z},app_tool_result:{requestId:a,success:o,data:()=>!0,parts:l(u),error:l(i)},app_view:{requestId:a,view:r},background_task_event:{event:r},background_job_group_event:{event:r},plan_event:{event:r},context_file_refreshed:{event:r},branch_event:{event:r},background_tasks:{tasks:u},background_task:{taskId:i,task:d},background_job_groups:{groups:u},background_job_group:{groupId:i,group:d},background_task_log:{taskId:i,page:r},permission_request:{event:r},ask_request:{event:r},prompt_resolved:{event:r},ui_intent:{event:r},session_renamed:{event:r},history_cleared:{},background_task_control_result:{action:f(x),taskId:i,success:o,message:l(i)},protocol_error:{message:i,requestId:l(i)},resume_gap:{},settings:{requestId:a,settings:r},settings_error:{requestId:a,code:f([`not_available`,`invalid`,`refused`,`update_failed`]),message:i}};function U(e,t,n){if(!r(e))return{ok:!1,reason:`message must be a JSON object`};let a=e.type;if(!i(a))return{ok:!1,reason:`message type must be a string`};let o=Object.prototype.hasOwnProperty.call(t,a)?t[a]:void 0;if(o===void 0)return{ok:!1,reason:`Unknown message type: ${a}`};for(let[t,r]of Object.entries(o))if(!r(e[t]))return{ok:!1,reason:n(t)};return{ok:!0,message:e}}function W(e){return U(e,B,e=>e===`prompt`?`prompt must be a non-empty string`:`${e} has an invalid shape`)}function G(e){return U(e,H,e=>`${e} has an invalid shape`)}function K(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)}const q=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 J(e){return q.has(e)}export{G as a,K as i,n,W as r,J as t};
2
+ //# sourceMappingURL=observer-messages-O8jTPEQO.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"observer-messages-UG77sTYK.js","names":[],"sources":["../../src/message-decoders.ts","../../src/observer-messages.ts"],"sourcesContent":["/**\n * Owner-side runtime decoders for the wire message unions (issue #2045 / TRANS-005 adjacent).\n *\n * `wire-messages.ts` owns the TypeScript unions; this file owns turning `JSON.parse` output into one\n * of them. Before it, the server did `JSON.parse(data) as TClientMessage` and each client did the\n * same for `TServerMessage`, so valid JSON with an invalid shape crossed the boundary wearing a\n * protocol type. Carriers now implement `raw string → owner decoder → typed message` and answer a\n * refusal with the protocol's own `protocol_error` (server side) or client error (client side).\n *\n * `decodeClientMessage` is TOTAL: every variant and every nested field it carries is validated.\n * `decodeServerMessage` validates every variant's discriminator and declared top-level fields; a\n * payload OWNED BY ANOTHER PACKAGE (`IToolState`, `IExecutionResult`, background events, …) is\n * checked as a non-array record (or array of records) here — its own total decoding belongs to its\n * owner and is tracked there, not duplicated in a transport package.\n */\n\nimport {\n SESSION_CHANGE_REFUSAL_CODES,\n SESSION_DELETE_REFUSAL_CODES,\n} from '@robota-sdk/agent-interface-session';\n\nimport type { TBackgroundControlAction, TClientMessage, TServerMessage } from './wire-messages.js';\n\nexport type TMessageDecodeResult<TMessage> =\n | { readonly ok: true; readonly message: TMessage }\n | { readonly ok: false; readonly reason: string };\n\n/** Serialized frames larger than this are refused before any parse (a bounded inbound budget). */\nexport const MAX_INBOUND_FRAME_BYTES = 4 * 1024 * 1024;\n\ntype TRecord = Record<string, unknown>;\n\nfunction isRecord(value: unknown): value is TRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nconst isString = (v: unknown): v is string => typeof v === 'string';\nconst isNonEmptyString = (v: unknown): v is string => typeof v === 'string' && v.length > 0;\nconst isBoolean = (v: unknown): v is boolean => typeof v === 'boolean';\nconst isFiniteNumber = (v: unknown): v is number => typeof v === 'number' && Number.isFinite(v);\nconst isCount = (v: unknown): v is number => Number.isSafeInteger(v) && (v as number) >= 0;\nconst isOptional =\n (check: (v: unknown) => boolean) =>\n (v: unknown): boolean =>\n v === undefined || check(v);\nconst isRecordArray = (v: unknown): boolean => Array.isArray(v) && v.every(isRecord);\nconst isNullableRecord = (v: unknown): boolean => v === null || isRecord(v);\nconst oneOf =\n (members: readonly string[]) =>\n (v: unknown): boolean =>\n typeof v === 'string' && members.includes(v);\n/** A record, not an array, so a turn source added to the union without one here fails to compile. */\nconst TURN_SOURCES: Readonly<\n Record<Extract<TServerMessage, { type: 'turn_source' }>['source'], true>\n> = { user: true, 'agent-wakeup': true, peer: true, external: true };\n/** A history entry's envelope is this package's (`IWireHistoryEntry`); its `data` is the recorder's. */\nconst isWireHistoryEntry = (v: unknown): boolean =>\n isRecord(v) &&\n isString(v['id']) &&\n isString(v['timestamp']) &&\n isString(v['category']) &&\n isString(v['type']);\nconst isWireHistoryEntries = (v: unknown): boolean =>\n Array.isArray(v) && v.every(isWireHistoryEntry);\n/** #3282 §4: one row of `agent_definitions` — name, one-line description, plain-words location. */\nconst isWireAgentDefinition = (v: unknown): boolean =>\n isRecord(v) && isString(v['name']) && isString(v['description']) && isString(v['definedIn']);\nconst isWireAgentDefinitions = (v: unknown): boolean =>\n Array.isArray(v) && v.every(isWireAgentDefinition);\n\ntype TFieldCheck = (value: unknown) => boolean;\ntype TVariantShape = Readonly<Record<string, TFieldCheck>>;\n\nconst BACKGROUND_TASK_KINDS = ['agent', 'process', 'scheduled'] as const;\nconst BACKGROUND_TASK_MODES = ['foreground', 'background'] as const;\nconst BACKGROUND_TASK_STATUSES = [\n 'queued',\n 'running',\n 'waiting_permission',\n 'sleeping',\n 'paused',\n 'completed',\n 'failed',\n 'cancelled',\n] as const;\nconst BACKGROUND_CONTROL_ACTIONS: readonly TBackgroundControlAction[] = ['cancel', 'close', 'send'];\n\nconst isBackgroundTaskListFilter: TFieldCheck = (v) =>\n isRecord(v) &&\n isOptional(oneOf(BACKGROUND_TASK_KINDS))(v['kind']) &&\n isOptional(oneOf(BACKGROUND_TASK_STATUSES))(v['status']) &&\n isOptional(oneOf(BACKGROUND_TASK_MODES))(v['mode']) &&\n isOptional(isBoolean)(v['includeClosed']);\nconst isBackgroundTaskInput: TFieldCheck = (v) =>\n isRecord(v) && isOptional(isString)(v['prompt']) && isOptional(isString)(v['stdin']);\nconst isBackgroundTaskLogCursor: TFieldCheck = (v) => isRecord(v) && isFiniteNumber(v['offset']);\nconst isExecutionDetailCursor: TFieldCheck = (v) => isRecord(v) && isCount(v['offset']);\nconst isPermissionResultValue: TFieldCheck = (v) =>\n isBoolean(v) || v === 'allow-session' || v === 'allow-project';\nconst isActionResponse: TFieldCheck = (v) =>\n isRecord(v) &&\n ((v['type'] === 'answer' &&\n Array.isArray(v['values']) &&\n v['values'].every(isString) &&\n isOptional(isString)(v['text'])) ||\n (v['type'] === 'cancelled' && v['values'] === undefined && v['text'] === undefined));\n\ntype TSettingsPatch = Extract<TClientMessage, { type: 'update-settings' }>['patch'];\n/** Keyed by `field`, so a patch variant added to the union without a shape here fails to compile. */\nconst SETTINGS_PATCH_SHAPES: Readonly<Record<TSettingsPatch['field'], TVariantShape>> = {\n language: { language: isNonEmptyString },\n outputStyle: { styleId: isNonEmptyString },\n preset: { presetId: isNonEmptyString },\n permissionMode: { mode: isNonEmptyString },\n sandbox: { enabled: isBoolean },\n removePermissionRule: {\n scope: isNonEmptyString,\n kind: oneOf(['allow', 'deny', 'ask']),\n pattern: isNonEmptyString,\n },\n mcpServerEnabled: { serverId: isNonEmptyString, enabled: isBoolean },\n reloadMcpServers: {},\n pluginEnabled: { pluginId: isNonEmptyString, enabled: isBoolean },\n reloadPlugins: {},\n installPlugin: { pluginId: isNonEmptyString },\n uninstallPlugin: { pluginId: isNonEmptyString },\n // #3282 §4b: \"Providers & Models\" — Use, Model, Delete.\n providerProfile: { profileName: isNonEmptyString },\n providerModel: { profileName: isNonEmptyString, modelId: isNonEmptyString },\n deleteProviderProfile: { profileName: isNonEmptyString },\n};\nconst isSettingsPatch: TFieldCheck = (v) => {\n if (!isRecord(v) || !isString(v['field'])) return false;\n const field = v['field'];\n if (!Object.prototype.hasOwnProperty.call(SETTINGS_PATCH_SHAPES, field)) return false;\n const shape = SETTINGS_PATCH_SHAPES[field as TSettingsPatch['field']];\n return Object.entries(shape).every(([key, check]) => check(v[key]));\n};\n\ntype TWaitingLoopStopOutcome = Extract<TServerMessage, { type: 'waiting_loop_stop' }>['outcome'];\n/** Keyed by `kind`, so an outcome added to the union without a shape here fails to compile. */\nconst WAITING_LOOP_STOP_OUTCOME_SHAPES: Readonly<\n Record<TWaitingLoopStopOutcome['kind'], TVariantShape>\n> = {\n none: {},\n several: { message: isString },\n stopped: { loopId: isNonEmptyString, message: isOptional(isString) },\n failed: { loopId: isOptional(isNonEmptyString), message: isString },\n};\nconst isWaitingLoopStopOutcome: TFieldCheck = (v) => {\n if (!isRecord(v) || !isString(v['kind'])) return false;\n const kind = v['kind'];\n if (!Object.prototype.hasOwnProperty.call(WAITING_LOOP_STOP_OUTCOME_SHAPES, kind)) return false;\n const shape = WAITING_LOOP_STOP_OUTCOME_SHAPES[kind as TWaitingLoopStopOutcome['kind']];\n return Object.entries(shape).every(([field, check]) => check(v[field]));\n};\n\n/** Decode a `kind`-discriminated result union (the `TWaitingLoopStopOutcome` convention) from a shape\n * map keyed by `kind`. */\nfunction isKindDiscriminated(shapes: Readonly<Record<string, TVariantShape>>): TFieldCheck {\n return (v) => {\n if (!isRecord(v) || !isString(v['kind'])) return false;\n const shape = Object.prototype.hasOwnProperty.call(shapes, v['kind']) ? shapes[v['kind']] : undefined;\n if (shape === undefined) return false;\n return Object.entries(shape).every(([field, check]) => check(v[field]));\n };\n}\n\n// #3282 §4c: the Project panel's reads. Each result is the session method's own return value, crossing\n// the wire unchanged (the `TWaitingLoopStopOutcome` convention above) — decoded from a `kind`-keyed\n// shape map the same way.\nconst PROJECT_FILE_STATUSES = [\n 'Added',\n 'Modified',\n 'Deleted',\n 'Renamed',\n 'Copied',\n 'Untracked',\n 'Conflicted',\n] as const;\nconst isProjectStatusFile: TFieldCheck = (v) =>\n isRecord(v) &&\n isNonEmptyString(v['path']) &&\n oneOf(PROJECT_FILE_STATUSES)(v['status']) &&\n isOptional(isNonEmptyString)(v['renamedFrom']) &&\n isOptional(isFiniteNumber)(v['added']) &&\n isOptional(isFiniteNumber)(v['removed']);\nconst isProjectStatusFiles: TFieldCheck = (v) => Array.isArray(v) && v.every(isProjectStatusFile);\n\ntype TProjectStatusReadResult = Extract<TServerMessage, { type: 'project_status' }>['result'];\nconst PROJECT_STATUS_READ_SHAPES: Readonly<Record<TProjectStatusReadResult['kind'], TVariantShape>> = {\n status: {\n branch: isOptional(isString),\n unborn: isBoolean,\n files: isProjectStatusFiles,\n truncated: isBoolean,\n },\n 'not-a-repository': {},\n failed: { message: isString },\n};\nconst isProjectStatusRead = isKindDiscriminated(PROJECT_STATUS_READ_SHAPES);\n\nconst DIFF_LINE_TYPES = ['add', 'remove', 'context', 'hunk'] as const;\nconst isDiffLine: TFieldCheck = (v) =>\n isRecord(v) && oneOf(DIFF_LINE_TYPES)(v['type']) && isString(v['text']) && isFiniteNumber(v['lineNumber']);\nconst isDiffLines: TFieldCheck = (v) => Array.isArray(v) && v.every(isDiffLine);\n\ntype TProjectDiffReadResult = Extract<TServerMessage, { type: 'project_diff' }>['result'];\nconst PROJECT_DIFF_READ_SHAPES: Readonly<Record<TProjectDiffReadResult['kind'], TVariantShape>> = {\n diff: { diffLines: isDiffLines, truncated: isBoolean },\n 'not-a-repository': {},\n 'outside-workspace': {},\n failed: { message: isString },\n};\nconst isProjectDiffRead = isKindDiscriminated(PROJECT_DIFF_READ_SHAPES);\n\ntype TProjectMemoryReadResult = Extract<TServerMessage, { type: 'project_memory' }>['result'];\nconst PROJECT_MEMORY_READ_SHAPES: Readonly<Record<TProjectMemoryReadResult['kind'], TVariantShape>> = {\n memory: { content: isString, path: isNonEmptyString, truncated: isBoolean },\n unavailable: { message: isString },\n};\nconst isProjectMemoryRead = isKindDiscriminated(PROJECT_MEMORY_READ_SHAPES);\n\n/** One entry per `TClientMessage` variant — a variant added to the union without one fails the test. */\nexport const CLIENT_MESSAGE_SHAPES: Readonly<Record<TClientMessage['type'], TVariantShape>> = {\n submit: { prompt: isNonEmptyString },\n command: {\n name: isNonEmptyString,\n args: isOptional(isString),\n requestId: isOptional(isNonEmptyString),\n },\n abort: {},\n 'cancel-queue': {},\n 'get-messages': {},\n 'get-history': { fromIndex: isOptional(isCount) },\n 'get-prompts': {},\n 'get-context': {},\n 'get-commands': {},\n 'get-status': {},\n 'list-models': { requestId: isNonEmptyString },\n 'get-agent-definitions': { requestId: isNonEmptyString },\n 'list-sessions': { requestId: isNonEmptyString },\n 'new-session': { requestId: isOptional(isNonEmptyString) },\n 'switch-session': { sessionId: isNonEmptyString, requestId: isOptional(isNonEmptyString) },\n 'rename-session': {\n sessionId: isNonEmptyString,\n name: isNonEmptyString,\n requestId: isNonEmptyString,\n },\n 'delete-session': { sessionId: isNonEmptyString, requestId: isNonEmptyString },\n 'get-usage-report': {},\n 'get-personal-usage-report': {\n requestId: isNonEmptyString,\n period: oneOf(['7d', '30d']),\n timezone: isNonEmptyString,\n },\n 'get-stored-session-usage-report': {\n requestId: isNonEmptyString,\n sessionId: isNonEmptyString,\n },\n 'get-executing': {},\n 'get-pending': {},\n 'get-execution-workspace': {},\n 'read-execution-detail': {\n requestId: isNonEmptyString,\n entryId: isNonEmptyString,\n cursor: isOptional(isExecutionDetailCursor),\n },\n 'stop-waiting-loop': { requestId: isNonEmptyString },\n 'project-status': { requestId: isNonEmptyString },\n 'project-diff': { requestId: isNonEmptyString, path: isNonEmptyString },\n 'project-memory': { requestId: isNonEmptyString },\n 'call-app-tool': {\n requestId: isNonEmptyString,\n viewId: isNonEmptyString,\n name: isNonEmptyString,\n arguments: isRecord,\n },\n 'read-app-view': { requestId: isNonEmptyString, viewId: isNonEmptyString },\n 'get-background-tasks': { filter: isOptional(isBackgroundTaskListFilter) },\n 'get-background-task': { taskId: isNonEmptyString },\n 'get-background-job-groups': {},\n 'get-background-job-group': { groupId: isNonEmptyString },\n 'wait-background-job-group': { groupId: isNonEmptyString },\n 'cancel-background-task': { taskId: isNonEmptyString, reason: isOptional(isString) },\n 'close-background-task': { taskId: isNonEmptyString },\n 'send-background-task': { taskId: isNonEmptyString, input: isBackgroundTaskInput },\n 'read-background-task-log': {\n taskId: isNonEmptyString,\n cursor: isOptional(isBackgroundTaskLogCursor),\n },\n 'permission-response': { id: isNonEmptyString, result: isPermissionResultValue },\n 'ask-response': { id: isNonEmptyString, response: isActionResponse },\n resume: { lastSeq: isFiniteNumber },\n ack: { seq: isFiniteNumber },\n 'get-settings': { requestId: isNonEmptyString },\n 'update-settings': { requestId: isNonEmptyString, patch: isSettingsPatch },\n};\n\nconst authored: TVariantShape = { driverId: isOptional(isString) };\n\n/** One entry per `TServerMessage` variant. Foreign-owned payloads are checked as records (see header). */\nexport const SERVER_MESSAGE_SHAPES: Readonly<Record<TServerMessage['type'], TVariantShape>> = {\n text_delta: { delta: isString, ...authored },\n user_message: { content: isString, ...authored },\n tool_start: { state: isRecord, ...authored },\n tool_end: { state: isRecord, ...authored },\n thinking: { isThinking: isBoolean, ...authored },\n complete: { result: isRecord, ...authored },\n interrupted: { result: isRecord, ...authored },\n error: {\n message: isString,\n code: isOptional(oneOf(['auth', 'rate_limit', 'model_unavailable', 'network', 'provider'])),\n provider: isOptional(isString),\n retryAfterSeconds: isOptional(isFiniteNumber),\n model: isOptional(isString),\n ...authored,\n },\n command_result: {\n name: isString,\n message: isString,\n success: isBoolean,\n requestId: isOptional(isString),\n },\n messages: { messages: isRecordArray, display: isOptional(isRecordArray), ...authored },\n history: { startIndex: isCount, total: isCount, entries: isWireHistoryEntries },\n context: { state: isRecord },\n history_changed: {},\n turn_source: { source: oneOf(Object.keys(TURN_SOURCES)) },\n commands: { commands: isRecordArray, skills: isRecordArray },\n session_status: { status: isRecord },\n model_list: {\n requestId: isNonEmptyString,\n groups: isRecordArray,\n currentProfile: isOptional(isString),\n currentModel: isString,\n },\n agent_definitions: {\n requestId: isNonEmptyString,\n agents: isWireAgentDefinitions,\n current: isNonEmptyString,\n },\n sessions: { requestId: isNonEmptyString, listing: isRecord },\n sessions_error: {\n requestId: isNonEmptyString,\n code: oneOf(['not_available', 'list_failed']),\n message: isString,\n },\n session_switched: { event: isRecord },\n session_change_failed: {\n code: oneOf(SESSION_CHANGE_REFUSAL_CODES),\n message: isString,\n requestId: isOptional(isString),\n },\n session_renamed_in_list: { requestId: isNonEmptyString, sessionId: isString, name: isString },\n session_rename_failed: { requestId: isNonEmptyString, message: isString },\n session_deleted: { requestId: isNonEmptyString, sessionId: isString },\n session_delete_failed: {\n requestId: isNonEmptyString,\n code: oneOf(SESSION_DELETE_REFUSAL_CODES),\n message: isString,\n },\n usage_report: { report: isRecord },\n personal_usage_report: { requestId: isNonEmptyString, report: isRecord },\n personal_usage_report_error: {\n requestId: isNonEmptyString,\n code: oneOf(['not_available', 'report_failed']),\n message: isString,\n },\n stored_session_usage_report: {\n requestId: isNonEmptyString,\n sessionId: isNonEmptyString,\n report: isRecord,\n },\n stored_session_usage_report_error: {\n requestId: isNonEmptyString,\n sessionId: isNonEmptyString,\n code: oneOf(['not_available', 'report_failed']),\n message: isString,\n },\n executing: { executing: isBoolean },\n // An older host sends no count; a client then counts the one prompt it can see.\n pending: { pending: (v) => v === null || isString(v), pendingCount: isOptional(isCount) },\n execution_workspace_event: { snapshot: isRecord },\n execution_detail: { requestId: isNonEmptyString, page: isRecord },\n execution_detail_error: { requestId: isNonEmptyString, message: isString },\n waiting_loop_stop: { requestId: isNonEmptyString, outcome: isWaitingLoopStopOutcome },\n project_status: { requestId: isNonEmptyString, result: isProjectStatusRead },\n project_diff: { requestId: isNonEmptyString, result: isProjectDiffRead },\n project_memory: { requestId: isNonEmptyString, result: isProjectMemoryRead },\n // `data` is whatever JSON the tool returned, so any value passes, null included; absent is fine.\n app_tool_result: {\n requestId: isNonEmptyString,\n success: isBoolean,\n data: () => true,\n parts: isOptional(isRecordArray),\n error: isOptional(isString),\n },\n app_view: { requestId: isNonEmptyString, view: isRecord },\n background_task_event: { event: isRecord },\n background_job_group_event: { event: isRecord },\n plan_event: { event: isRecord },\n context_file_refreshed: { event: isRecord },\n branch_event: { event: isRecord },\n background_tasks: { tasks: isRecordArray },\n background_task: { taskId: isString, task: isNullableRecord },\n background_job_groups: { groups: isRecordArray },\n background_job_group: { groupId: isString, group: isNullableRecord },\n background_task_log: { taskId: isString, page: isRecord },\n permission_request: { event: isRecord },\n ask_request: { event: isRecord },\n prompt_resolved: { event: isRecord },\n ui_intent: { event: isRecord },\n session_renamed: { event: isRecord },\n history_cleared: {},\n background_task_control_result: {\n action: oneOf(BACKGROUND_CONTROL_ACTIONS),\n taskId: isString,\n success: isBoolean,\n message: isOptional(isString),\n },\n protocol_error: { message: isString, requestId: isOptional(isString) },\n resume_gap: {},\n settings: { requestId: isNonEmptyString, settings: isRecord },\n settings_error: {\n requestId: isNonEmptyString,\n code: oneOf(['not_available', 'invalid', 'refused', 'update_failed']),\n message: isString,\n },\n};\n\nfunction decodeVariant<TMessage extends { type: string }>(\n value: unknown,\n shapes: Readonly<Record<string, TVariantShape>>,\n reasonFor: (field: string) => string,\n): TMessageDecodeResult<TMessage> {\n if (!isRecord(value)) return { ok: false, reason: 'message must be a JSON object' };\n const type = value['type'];\n if (!isString(type)) return { ok: false, reason: 'message type must be a string' };\n const shape = Object.prototype.hasOwnProperty.call(shapes, type) ? shapes[type] : undefined;\n if (shape === undefined) return { ok: false, reason: `Unknown message type: ${type}` };\n for (const [field, check] of Object.entries(shape)) {\n if (!check(value[field])) return { ok: false, reason: reasonFor(field) };\n }\n return { ok: true, message: value as unknown as TMessage };\n}\n\n/** Total decode of a parsed client frame. */\nexport function decodeClientMessage(value: unknown): TMessageDecodeResult<TClientMessage> {\n return decodeVariant<TClientMessage>(value, CLIENT_MESSAGE_SHAPES, (field) =>\n field === 'prompt' ? 'prompt must be a non-empty string' : `${field} has an invalid shape`,\n );\n}\n\n/** Variant-level decode of a parsed server frame (foreign-owned payloads as records, see header). */\nexport function decodeServerMessage(value: unknown): TMessageDecodeResult<TServerMessage> {\n return decodeVariant<TServerMessage>(\n value,\n SERVER_MESSAGE_SHAPES,\n (field) => `${field} has an invalid shape`,\n );\n}\n\n/** `raw string → JSON → owner decoder`, the one path a carrier implements. */\nexport function decodeFrame<TMessage>(\n data: string,\n decode: (value: unknown) => TMessageDecodeResult<TMessage>,\n): TMessageDecodeResult<TMessage> {\n if (data.length > MAX_INBOUND_FRAME_BYTES) return { ok: false, reason: 'Frame too large' };\n let parsed: unknown;\n try {\n parsed = JSON.parse(data);\n // allow-fallback: the parse failure is returned as a typed refusal the carrier answers on the wire\n } catch {\n return { ok: false, reason: 'Invalid JSON' };\n }\n return decode(parsed);\n}\n","import type { TClientMessage } from './wire-messages.js';\n\n/**\n * The only inbound messages an observer may send: reads of this session. An allowlist, so a message\n * type added later is refused to observers until someone decides it is a read. `get-prompts` is left\n * out: an observer never receives prompts, open ones included.\n *\n * The host refuses anything else from an observer, and a client in observe mode sends only these, so\n * both sides read this one list.\n */\nexport const OBSERVER_MESSAGES: ReadonlySet<TClientMessage['type']> = new Set<\n TClientMessage['type']\n>([\n 'get-messages',\n 'get-history',\n 'get-context',\n 'get-status',\n 'get-commands',\n 'list-models',\n 'get-executing',\n 'get-pending',\n 'get-execution-workspace',\n 'read-execution-detail',\n 'get-agent-definitions',\n 'get-usage-report',\n 'list-sessions',\n 'get-background-tasks',\n 'get-background-task',\n 'get-background-job-groups',\n 'get-background-job-group',\n 'wait-background-job-group',\n 'read-background-task-log',\n // #3282 §4a: reading the Settings snapshot is a pure read of this session's own configuration.\n // `update-settings` stays out — an observer never writes.\n 'get-settings',\n // #3282 §4c: the Project panel's reads — git status, one file's diff, project memory. All three are\n // read-only (there is no \"restore\"/write counterpart in this feature — see the SPEC.md design\n // decision on why checkpoints/rewind are excluded entirely), so all three are observer-safe.\n 'project-status',\n 'project-diff',\n 'project-memory',\n]);\n\n/** Whether an observer may send a message of this type. */\nexport function isObserverMessageType(type: string): boolean {\n return (OBSERVER_MESSAGES as ReadonlySet<string>).has(type);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"observer-messages-O8jTPEQO.js","names":[],"sources":["../../src/message-decoders.ts","../../src/observer-messages.ts"],"sourcesContent":["/**\n * Owner-side runtime decoders for the wire message unions (issue #2045 / TRANS-005 adjacent).\n *\n * `wire-messages.ts` owns the TypeScript unions; this file owns turning `JSON.parse` output into one\n * of them. Before it, the server did `JSON.parse(data) as TClientMessage` and each client did the\n * same for `TServerMessage`, so valid JSON with an invalid shape crossed the boundary wearing a\n * protocol type. Carriers now implement `raw string → owner decoder → typed message` and answer a\n * refusal with the protocol's own `protocol_error` (server side) or client error (client side).\n *\n * `decodeClientMessage` is TOTAL: every variant and every nested field it carries is validated.\n * `decodeServerMessage` validates every variant's discriminator and declared top-level fields; a\n * payload OWNED BY ANOTHER PACKAGE (`IToolState`, `IExecutionResult`, background events, …) is\n * checked as a non-array record (or array of records) here — its own total decoding belongs to its\n * owner and is tracked there, not duplicated in a transport package.\n */\n\nimport {\n SESSION_CHANGE_REFUSAL_CODES,\n SESSION_DELETE_REFUSAL_CODES,\n} from '@robota-sdk/agent-interface-session';\n\nimport type { TBackgroundControlAction, TClientMessage, TServerMessage } from './wire-messages.js';\n\nexport type TMessageDecodeResult<TMessage> =\n | { readonly ok: true; readonly message: TMessage }\n | { readonly ok: false; readonly reason: string };\n\n/** Serialized frames larger than this are refused before any parse (a bounded inbound budget). */\nexport const MAX_INBOUND_FRAME_BYTES = 4 * 1024 * 1024;\n\ntype TRecord = Record<string, unknown>;\n\nfunction isRecord(value: unknown): value is TRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nconst isString = (v: unknown): v is string => typeof v === 'string';\nconst isNonEmptyString = (v: unknown): v is string => typeof v === 'string' && v.length > 0;\nconst isBoolean = (v: unknown): v is boolean => typeof v === 'boolean';\nconst isFiniteNumber = (v: unknown): v is number => typeof v === 'number' && Number.isFinite(v);\nconst isCount = (v: unknown): v is number => Number.isSafeInteger(v) && (v as number) >= 0;\nconst isOptional =\n (check: (v: unknown) => boolean) =>\n (v: unknown): boolean =>\n v === undefined || check(v);\nconst isRecordArray = (v: unknown): boolean => Array.isArray(v) && v.every(isRecord);\nconst isNullableRecord = (v: unknown): boolean => v === null || isRecord(v);\nconst oneOf =\n (members: readonly string[]) =>\n (v: unknown): boolean =>\n typeof v === 'string' && members.includes(v);\n/** A record, not an array, so a turn source added to the union without one here fails to compile. */\nconst TURN_SOURCES: Readonly<\n Record<Extract<TServerMessage, { type: 'turn_source' }>['source'], true>\n> = { user: true, 'agent-wakeup': true, peer: true, external: true };\n/** A history entry's envelope is this package's (`IWireHistoryEntry`); its `data` is the recorder's. */\nconst isWireHistoryEntry = (v: unknown): boolean =>\n isRecord(v) &&\n isString(v['id']) &&\n isString(v['timestamp']) &&\n isString(v['category']) &&\n isString(v['type']);\nconst isWireHistoryEntries = (v: unknown): boolean =>\n Array.isArray(v) && v.every(isWireHistoryEntry);\n/** #3282 §4: one row of `agent_definitions` — name, one-line description, plain-words location. */\nconst isWireAgentDefinition = (v: unknown): boolean =>\n isRecord(v) && isString(v['name']) && isString(v['description']) && isString(v['definedIn']);\nconst isWireAgentDefinitions = (v: unknown): boolean =>\n Array.isArray(v) && v.every(isWireAgentDefinition);\n\ntype TFieldCheck = (value: unknown) => boolean;\ntype TVariantShape = Readonly<Record<string, TFieldCheck>>;\n\nconst BACKGROUND_TASK_KINDS = ['agent', 'process', 'scheduled'] as const;\nconst BACKGROUND_TASK_MODES = ['foreground', 'background'] as const;\nconst BACKGROUND_TASK_STATUSES = [\n 'queued',\n 'running',\n 'waiting_permission',\n 'sleeping',\n 'paused',\n 'completed',\n 'failed',\n 'cancelled',\n] as const;\nconst BACKGROUND_CONTROL_ACTIONS: readonly TBackgroundControlAction[] = ['cancel', 'close', 'send'];\n\nconst isBackgroundTaskListFilter: TFieldCheck = (v) =>\n isRecord(v) &&\n isOptional(oneOf(BACKGROUND_TASK_KINDS))(v['kind']) &&\n isOptional(oneOf(BACKGROUND_TASK_STATUSES))(v['status']) &&\n isOptional(oneOf(BACKGROUND_TASK_MODES))(v['mode']) &&\n isOptional(isBoolean)(v['includeClosed']);\nconst isBackgroundTaskInput: TFieldCheck = (v) =>\n isRecord(v) && isOptional(isString)(v['prompt']) && isOptional(isString)(v['stdin']);\nconst isBackgroundTaskLogCursor: TFieldCheck = (v) => isRecord(v) && isFiniteNumber(v['offset']);\nconst isExecutionDetailCursor: TFieldCheck = (v) => isRecord(v) && isCount(v['offset']);\nconst isPermissionResultValue: TFieldCheck = (v) =>\n isBoolean(v) || v === 'allow-session' || v === 'allow-project';\nconst isActionResponse: TFieldCheck = (v) =>\n isRecord(v) &&\n ((v['type'] === 'answer' &&\n Array.isArray(v['values']) &&\n v['values'].every(isString) &&\n isOptional(isString)(v['text'])) ||\n (v['type'] === 'cancelled' && v['values'] === undefined && v['text'] === undefined));\n\ntype TSettingsPatch = Extract<TClientMessage, { type: 'update-settings' }>['patch'];\n/** Keyed by `field`, so a patch variant added to the union without a shape here fails to compile. */\nconst SETTINGS_PATCH_SHAPES: Readonly<Record<TSettingsPatch['field'], TVariantShape>> = {\n language: { language: isNonEmptyString },\n outputStyle: { styleId: isNonEmptyString },\n preset: { presetId: isNonEmptyString },\n permissionMode: { mode: isNonEmptyString },\n sandbox: { enabled: isBoolean },\n removePermissionRule: {\n scope: isNonEmptyString,\n kind: oneOf(['allow', 'deny', 'ask']),\n pattern: isNonEmptyString,\n },\n mcpServerEnabled: { serverId: isNonEmptyString, enabled: isBoolean },\n reloadMcpServers: {},\n pluginEnabled: { pluginId: isNonEmptyString, enabled: isBoolean },\n reloadPlugins: {},\n installPlugin: { pluginId: isNonEmptyString },\n uninstallPlugin: { pluginId: isNonEmptyString },\n // #3282 §4b: \"Providers & Models\" — Use, Model, Delete.\n providerProfile: { profileName: isNonEmptyString },\n providerModel: { profileName: isNonEmptyString, modelId: isNonEmptyString },\n deleteProviderProfile: { profileName: isNonEmptyString },\n};\nconst isSettingsPatch: TFieldCheck = (v) => {\n if (!isRecord(v) || !isString(v['field'])) return false;\n const field = v['field'];\n if (!Object.prototype.hasOwnProperty.call(SETTINGS_PATCH_SHAPES, field)) return false;\n const shape = SETTINGS_PATCH_SHAPES[field as TSettingsPatch['field']];\n return Object.entries(shape).every(([key, check]) => check(v[key]));\n};\n\ntype TWaitingLoopStopOutcome = Extract<TServerMessage, { type: 'waiting_loop_stop' }>['outcome'];\n/** Keyed by `kind`, so an outcome added to the union without a shape here fails to compile. */\nconst WAITING_LOOP_STOP_OUTCOME_SHAPES: Readonly<\n Record<TWaitingLoopStopOutcome['kind'], TVariantShape>\n> = {\n none: {},\n several: { message: isString },\n stopped: { loopId: isNonEmptyString, message: isOptional(isString) },\n failed: { loopId: isOptional(isNonEmptyString), message: isString },\n};\nconst isWaitingLoopStopOutcome: TFieldCheck = (v) => {\n if (!isRecord(v) || !isString(v['kind'])) return false;\n const kind = v['kind'];\n if (!Object.prototype.hasOwnProperty.call(WAITING_LOOP_STOP_OUTCOME_SHAPES, kind)) return false;\n const shape = WAITING_LOOP_STOP_OUTCOME_SHAPES[kind as TWaitingLoopStopOutcome['kind']];\n return Object.entries(shape).every(([field, check]) => check(v[field]));\n};\n\n/** Decode a `kind`-discriminated result union (the `TWaitingLoopStopOutcome` convention) from a shape\n * map keyed by `kind`. */\nfunction isKindDiscriminated(shapes: Readonly<Record<string, TVariantShape>>): TFieldCheck {\n return (v) => {\n if (!isRecord(v) || !isString(v['kind'])) return false;\n const shape = Object.prototype.hasOwnProperty.call(shapes, v['kind']) ? shapes[v['kind']] : undefined;\n if (shape === undefined) return false;\n return Object.entries(shape).every(([field, check]) => check(v[field]));\n };\n}\n\n// #3282 §4c: the Project panel's reads. Each result is the session method's own return value, crossing\n// the wire unchanged (the `TWaitingLoopStopOutcome` convention above) — decoded from a `kind`-keyed\n// shape map the same way.\nconst PROJECT_FILE_STATUSES = [\n 'Added',\n 'Modified',\n 'Deleted',\n 'Renamed',\n 'Copied',\n 'Untracked',\n 'Conflicted',\n] as const;\nconst isProjectStatusFile: TFieldCheck = (v) =>\n isRecord(v) &&\n isNonEmptyString(v['path']) &&\n oneOf(PROJECT_FILE_STATUSES)(v['status']) &&\n isOptional(isNonEmptyString)(v['renamedFrom']) &&\n isOptional(isFiniteNumber)(v['added']) &&\n isOptional(isFiniteNumber)(v['removed']);\nconst isProjectStatusFiles: TFieldCheck = (v) => Array.isArray(v) && v.every(isProjectStatusFile);\n\ntype TProjectStatusReadResult = Extract<TServerMessage, { type: 'project_status' }>['result'];\nconst PROJECT_STATUS_READ_SHAPES: Readonly<Record<TProjectStatusReadResult['kind'], TVariantShape>> = {\n status: {\n branch: isOptional(isString),\n unborn: isBoolean,\n files: isProjectStatusFiles,\n truncated: isBoolean,\n },\n 'not-a-repository': {},\n failed: { message: isString },\n};\nconst isProjectStatusRead = isKindDiscriminated(PROJECT_STATUS_READ_SHAPES);\n\nconst DIFF_LINE_TYPES = ['add', 'remove', 'context', 'hunk'] as const;\nconst isDiffLine: TFieldCheck = (v) =>\n isRecord(v) && oneOf(DIFF_LINE_TYPES)(v['type']) && isString(v['text']) && isFiniteNumber(v['lineNumber']);\nconst isDiffLines: TFieldCheck = (v) => Array.isArray(v) && v.every(isDiffLine);\n\ntype TProjectDiffReadResult = Extract<TServerMessage, { type: 'project_diff' }>['result'];\nconst PROJECT_DIFF_READ_SHAPES: Readonly<Record<TProjectDiffReadResult['kind'], TVariantShape>> = {\n diff: { diffLines: isDiffLines, truncated: isBoolean },\n 'not-a-repository': {},\n 'outside-workspace': {},\n failed: { message: isString },\n};\nconst isProjectDiffRead = isKindDiscriminated(PROJECT_DIFF_READ_SHAPES);\n\ntype TProjectMemoryReadResult = Extract<TServerMessage, { type: 'project_memory' }>['result'];\nconst PROJECT_MEMORY_READ_SHAPES: Readonly<Record<TProjectMemoryReadResult['kind'], TVariantShape>> = {\n memory: { content: isString, path: isNonEmptyString, truncated: isBoolean },\n unavailable: { message: isString },\n};\nconst isProjectMemoryRead = isKindDiscriminated(PROJECT_MEMORY_READ_SHAPES);\n\n/** One entry per `TClientMessage` variant — a variant added to the union without one fails the test. */\nexport const CLIENT_MESSAGE_SHAPES: Readonly<Record<TClientMessage['type'], TVariantShape>> = {\n submit: { prompt: isNonEmptyString },\n command: {\n name: isNonEmptyString,\n args: isOptional(isString),\n requestId: isOptional(isNonEmptyString),\n },\n abort: {},\n 'cancel-queue': {},\n 'get-messages': {},\n 'get-history': { fromIndex: isOptional(isCount) },\n 'get-prompts': {},\n 'get-context': {},\n 'get-commands': {},\n 'get-status': {},\n 'list-models': { requestId: isNonEmptyString },\n 'get-agent-definitions': { requestId: isNonEmptyString },\n 'list-sessions': { requestId: isNonEmptyString },\n 'new-session': { requestId: isOptional(isNonEmptyString) },\n 'switch-session': { sessionId: isNonEmptyString, requestId: isOptional(isNonEmptyString) },\n 'rename-session': {\n sessionId: isNonEmptyString,\n name: isNonEmptyString,\n requestId: isNonEmptyString,\n },\n 'delete-session': { sessionId: isNonEmptyString, requestId: isNonEmptyString },\n 'get-usage-report': {},\n 'get-personal-usage-report': {\n requestId: isNonEmptyString,\n period: oneOf(['7d', '30d']),\n timezone: isNonEmptyString,\n },\n 'get-stored-session-usage-report': {\n requestId: isNonEmptyString,\n sessionId: isNonEmptyString,\n },\n 'get-executing': {},\n 'get-pending': {},\n 'get-execution-workspace': {},\n 'read-execution-detail': {\n requestId: isNonEmptyString,\n entryId: isNonEmptyString,\n cursor: isOptional(isExecutionDetailCursor),\n },\n 'stop-waiting-loop': { requestId: isNonEmptyString },\n 'project-status': { requestId: isNonEmptyString },\n 'project-diff': { requestId: isNonEmptyString, path: isNonEmptyString },\n 'project-memory': { requestId: isNonEmptyString },\n 'call-app-tool': {\n requestId: isNonEmptyString,\n viewId: isNonEmptyString,\n name: isNonEmptyString,\n arguments: isRecord,\n },\n 'read-app-view': { requestId: isNonEmptyString, viewId: isNonEmptyString },\n 'get-background-tasks': { filter: isOptional(isBackgroundTaskListFilter) },\n 'get-background-task': { taskId: isNonEmptyString },\n 'get-background-job-groups': {},\n 'get-background-job-group': { groupId: isNonEmptyString },\n 'wait-background-job-group': { groupId: isNonEmptyString },\n 'cancel-background-task': { taskId: isNonEmptyString, reason: isOptional(isString) },\n 'close-background-task': { taskId: isNonEmptyString },\n 'send-background-task': { taskId: isNonEmptyString, input: isBackgroundTaskInput },\n 'read-background-task-log': {\n taskId: isNonEmptyString,\n cursor: isOptional(isBackgroundTaskLogCursor),\n },\n 'permission-response': { id: isNonEmptyString, result: isPermissionResultValue },\n 'ask-response': { id: isNonEmptyString, response: isActionResponse },\n resume: { lastSeq: isFiniteNumber },\n ack: { seq: isFiniteNumber },\n 'get-settings': { requestId: isNonEmptyString },\n 'update-settings': { requestId: isNonEmptyString, patch: isSettingsPatch },\n};\n\nconst authored: TVariantShape = { driverId: isOptional(isString) };\n\n/** One entry per `TServerMessage` variant. Foreign-owned payloads are checked as records (see header). */\nexport const SERVER_MESSAGE_SHAPES: Readonly<Record<TServerMessage['type'], TVariantShape>> = {\n text_delta: { delta: isString, ...authored },\n user_message: { content: isString, ...authored },\n tool_start: { state: isRecord, ...authored },\n tool_end: { state: isRecord, ...authored },\n thinking: { isThinking: isBoolean, ...authored },\n complete: { result: isRecord, ...authored },\n interrupted: { result: isRecord, ...authored },\n error: {\n message: isString,\n code: isOptional(oneOf(['auth', 'rate_limit', 'model_unavailable', 'network', 'provider'])),\n provider: isOptional(isString),\n retryAfterSeconds: isOptional(isFiniteNumber),\n model: isOptional(isString),\n ...authored,\n },\n command_result: {\n name: isString,\n message: isString,\n success: isBoolean,\n requestId: isOptional(isString),\n },\n messages: { messages: isRecordArray, display: isOptional(isRecordArray), ...authored },\n history: { startIndex: isCount, total: isCount, entries: isWireHistoryEntries },\n context: { state: isRecord },\n history_changed: {\n compact: isOptional(\n (value) =>\n isRecord(value) &&\n oneOf(['auto', 'manual'])(value['trigger']) &&\n isFiniteNumber(value['beforeUsedPercentage']) &&\n isFiniteNumber(value['afterUsedPercentage']),\n ),\n },\n turn_source: { source: oneOf(Object.keys(TURN_SOURCES)) },\n commands: { commands: isRecordArray, skills: isRecordArray },\n session_status: { status: isRecord },\n model_list: {\n requestId: isNonEmptyString,\n groups: isRecordArray,\n currentProfile: isOptional(isString),\n currentModel: isString,\n },\n agent_definitions: {\n requestId: isNonEmptyString,\n agents: isWireAgentDefinitions,\n current: isNonEmptyString,\n },\n sessions: { requestId: isNonEmptyString, listing: isRecord },\n sessions_error: {\n requestId: isNonEmptyString,\n code: oneOf(['not_available', 'list_failed']),\n message: isString,\n },\n session_switched: { event: isRecord },\n session_change_failed: {\n code: oneOf(SESSION_CHANGE_REFUSAL_CODES),\n message: isString,\n requestId: isOptional(isString),\n },\n session_renamed_in_list: { requestId: isNonEmptyString, sessionId: isString, name: isString },\n session_rename_failed: { requestId: isNonEmptyString, message: isString },\n session_deleted: { requestId: isNonEmptyString, sessionId: isString },\n session_delete_failed: {\n requestId: isNonEmptyString,\n code: oneOf(SESSION_DELETE_REFUSAL_CODES),\n message: isString,\n },\n usage_report: { report: isRecord },\n personal_usage_report: { requestId: isNonEmptyString, report: isRecord },\n personal_usage_report_error: {\n requestId: isNonEmptyString,\n code: oneOf(['not_available', 'report_failed']),\n message: isString,\n },\n stored_session_usage_report: {\n requestId: isNonEmptyString,\n sessionId: isNonEmptyString,\n report: isRecord,\n },\n stored_session_usage_report_error: {\n requestId: isNonEmptyString,\n sessionId: isNonEmptyString,\n code: oneOf(['not_available', 'report_failed']),\n message: isString,\n },\n executing: { executing: isBoolean },\n // An older host sends no count; a client then counts the one prompt it can see.\n pending: { pending: (v) => v === null || isString(v), pendingCount: isOptional(isCount) },\n execution_workspace_event: { snapshot: isRecord },\n execution_detail: { requestId: isNonEmptyString, page: isRecord },\n execution_detail_error: { requestId: isNonEmptyString, message: isString },\n waiting_loop_stop: { requestId: isNonEmptyString, outcome: isWaitingLoopStopOutcome },\n project_status: { requestId: isNonEmptyString, result: isProjectStatusRead },\n project_diff: { requestId: isNonEmptyString, result: isProjectDiffRead },\n project_memory: { requestId: isNonEmptyString, result: isProjectMemoryRead },\n // `data` is whatever JSON the tool returned, so any value passes, null included; absent is fine.\n app_tool_result: {\n requestId: isNonEmptyString,\n success: isBoolean,\n data: () => true,\n parts: isOptional(isRecordArray),\n error: isOptional(isString),\n },\n app_view: { requestId: isNonEmptyString, view: isRecord },\n background_task_event: { event: isRecord },\n background_job_group_event: { event: isRecord },\n plan_event: { event: isRecord },\n context_file_refreshed: { event: isRecord },\n branch_event: { event: isRecord },\n background_tasks: { tasks: isRecordArray },\n background_task: { taskId: isString, task: isNullableRecord },\n background_job_groups: { groups: isRecordArray },\n background_job_group: { groupId: isString, group: isNullableRecord },\n background_task_log: { taskId: isString, page: isRecord },\n permission_request: { event: isRecord },\n ask_request: { event: isRecord },\n prompt_resolved: { event: isRecord },\n ui_intent: { event: isRecord },\n session_renamed: { event: isRecord },\n history_cleared: {},\n background_task_control_result: {\n action: oneOf(BACKGROUND_CONTROL_ACTIONS),\n taskId: isString,\n success: isBoolean,\n message: isOptional(isString),\n },\n protocol_error: { message: isString, requestId: isOptional(isString) },\n resume_gap: {},\n settings: { requestId: isNonEmptyString, settings: isRecord },\n settings_error: {\n requestId: isNonEmptyString,\n code: oneOf(['not_available', 'invalid', 'refused', 'update_failed']),\n message: isString,\n },\n};\n\nfunction decodeVariant<TMessage extends { type: string }>(\n value: unknown,\n shapes: Readonly<Record<string, TVariantShape>>,\n reasonFor: (field: string) => string,\n): TMessageDecodeResult<TMessage> {\n if (!isRecord(value)) return { ok: false, reason: 'message must be a JSON object' };\n const type = value['type'];\n if (!isString(type)) return { ok: false, reason: 'message type must be a string' };\n const shape = Object.prototype.hasOwnProperty.call(shapes, type) ? shapes[type] : undefined;\n if (shape === undefined) return { ok: false, reason: `Unknown message type: ${type}` };\n for (const [field, check] of Object.entries(shape)) {\n if (!check(value[field])) return { ok: false, reason: reasonFor(field) };\n }\n return { ok: true, message: value as unknown as TMessage };\n}\n\n/** Total decode of a parsed client frame. */\nexport function decodeClientMessage(value: unknown): TMessageDecodeResult<TClientMessage> {\n return decodeVariant<TClientMessage>(value, CLIENT_MESSAGE_SHAPES, (field) =>\n field === 'prompt' ? 'prompt must be a non-empty string' : `${field} has an invalid shape`,\n );\n}\n\n/** Variant-level decode of a parsed server frame (foreign-owned payloads as records, see header). */\nexport function decodeServerMessage(value: unknown): TMessageDecodeResult<TServerMessage> {\n return decodeVariant<TServerMessage>(\n value,\n SERVER_MESSAGE_SHAPES,\n (field) => `${field} has an invalid shape`,\n );\n}\n\n/** `raw string → JSON → owner decoder`, the one path a carrier implements. */\nexport function decodeFrame<TMessage>(\n data: string,\n decode: (value: unknown) => TMessageDecodeResult<TMessage>,\n): TMessageDecodeResult<TMessage> {\n if (data.length > MAX_INBOUND_FRAME_BYTES) return { ok: false, reason: 'Frame too large' };\n let parsed: unknown;\n try {\n parsed = JSON.parse(data);\n // allow-fallback: the parse failure is returned as a typed refusal the carrier answers on the wire\n } catch {\n return { ok: false, reason: 'Invalid JSON' };\n }\n return decode(parsed);\n}\n","import type { TClientMessage } from './wire-messages.js';\n\n/**\n * The only inbound messages an observer may send: reads of this session. An allowlist, so a message\n * type added later is refused to observers until someone decides it is a read. `get-prompts` is left\n * out: an observer never receives prompts, open ones included.\n *\n * The host refuses anything else from an observer, and a client in observe mode sends only these, so\n * both sides read this one list.\n */\nexport const OBSERVER_MESSAGES: ReadonlySet<TClientMessage['type']> = new Set<\n TClientMessage['type']\n>([\n 'get-messages',\n 'get-history',\n 'get-context',\n 'get-status',\n 'get-commands',\n 'list-models',\n 'get-executing',\n 'get-pending',\n 'get-execution-workspace',\n 'read-execution-detail',\n 'get-agent-definitions',\n 'get-usage-report',\n 'list-sessions',\n 'get-background-tasks',\n 'get-background-task',\n 'get-background-job-groups',\n 'get-background-job-group',\n 'wait-background-job-group',\n 'read-background-task-log',\n // #3282 §4a: reading the Settings snapshot is a pure read of this session's own configuration.\n // `update-settings` stays out — an observer never writes.\n 'get-settings',\n // #3282 §4c: the Project panel's reads — git status, one file's diff, project memory. All three are\n // read-only (there is no \"restore\"/write counterpart in this feature — see the SPEC.md design\n // decision on why checkpoints/rewind are excluded entirely), so all three are observer-safe.\n 'project-status',\n 'project-diff',\n 'project-memory',\n]);\n\n/** Whether an observer may send a message of this type. */\nexport function isObserverMessageType(type: string): boolean {\n return (OBSERVER_MESSAGES as ReadonlySet<string>).has(type);\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@robota-sdk/agent-interface-session"),t=require("@robota-sdk/agent-core");function n(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const r=e=>typeof e==`string`,i=e=>typeof e==`string`&&e.length>0,a=e=>typeof e==`boolean`,o=e=>typeof e==`number`&&Number.isFinite(e),s=e=>Number.isSafeInteger(e)&&e>=0,c=e=>t=>t===void 0||e(t),l=e=>Array.isArray(e)&&e.every(n),u=e=>e===null||n(e),d=e=>t=>typeof t==`string`&&e.includes(t),f={user:!0,"agent-wakeup":!0,peer:!0,external:!0},p=e=>n(e)&&r(e.id)&&r(e.timestamp)&&r(e.category)&&r(e.type),m=e=>Array.isArray(e)&&e.every(p),h=e=>n(e)&&r(e.name)&&r(e.description)&&r(e.definedIn),g=e=>Array.isArray(e)&&e.every(h),_=[`agent`,`process`,`scheduled`],v=[`foreground`,`background`],y=[`queued`,`running`,`waiting_permission`,`sleeping`,`paused`,`completed`,`failed`,`cancelled`],b=[`cancel`,`close`,`send`],x=e=>n(e)&&c(d(_))(e.kind)&&c(d(y))(e.status)&&c(d(v))(e.mode)&&c(a)(e.includeClosed),S=e=>n(e)&&c(r)(e.prompt)&&c(r)(e.stdin),C=e=>n(e)&&o(e.offset),w=e=>n(e)&&s(e.offset),T=e=>a(e)||e===`allow-session`||e===`allow-project`,E=e=>n(e)&&(e.type===`answer`&&Array.isArray(e.values)&&e.values.every(r)&&c(r)(e.text)||e.type===`cancelled`&&e.values===void 0&&e.text===void 0),D={language:{language:i},outputStyle:{styleId:i},preset:{presetId:i},permissionMode:{mode:i},sandbox:{enabled:a},removePermissionRule:{scope:i,kind:d([`allow`,`deny`,`ask`]),pattern:i},mcpServerEnabled:{serverId:i,enabled:a},reloadMcpServers:{},pluginEnabled:{pluginId:i,enabled:a},reloadPlugins:{},installPlugin:{pluginId:i},uninstallPlugin:{pluginId:i},providerProfile:{profileName:i},providerModel:{profileName:i,modelId:i},deleteProviderProfile:{profileName:i}},O=e=>{if(!n(e)||!r(e.field))return!1;let t=e.field;if(!Object.prototype.hasOwnProperty.call(D,t))return!1;let i=D[t];return Object.entries(i).every(([t,n])=>n(e[t]))},k={none:{},several:{message:r},stopped:{loopId:i,message:c(r)},failed:{loopId:c(i),message:r}},A=e=>{if(!n(e)||!r(e.kind))return!1;let t=e.kind;if(!Object.prototype.hasOwnProperty.call(k,t))return!1;let i=k[t];return Object.entries(i).every(([t,n])=>n(e[t]))};function j(e){return t=>{if(!n(t)||!r(t.kind))return!1;let i=Object.prototype.hasOwnProperty.call(e,t.kind)?e[t.kind]:void 0;return i!==void 0&&Object.entries(i).every(([e,n])=>n(t[e]))}}const ee=[`Added`,`Modified`,`Deleted`,`Renamed`,`Copied`,`Untracked`,`Conflicted`],te=e=>n(e)&&i(e.path)&&d(ee)(e.status)&&c(i)(e.renamedFrom)&&c(o)(e.added)&&c(o)(e.removed),ne=j({status:{branch:c(r),unborn:a,files:e=>Array.isArray(e)&&e.every(te),truncated:a},"not-a-repository":{},failed:{message:r}}),re=[`add`,`remove`,`context`,`hunk`],ie=e=>n(e)&&d(re)(e.type)&&r(e.text)&&o(e.lineNumber),ae=j({diff:{diffLines:e=>Array.isArray(e)&&e.every(ie),truncated:a},"not-a-repository":{},"outside-workspace":{},failed:{message:r}}),oe=j({memory:{content:r,path:i,truncated:a},unavailable:{message:r}}),se={submit:{prompt:i},command:{name:i,args:c(r),requestId:c(i)},abort:{},"cancel-queue":{},"get-messages":{},"get-history":{fromIndex:c(s)},"get-prompts":{},"get-context":{},"get-commands":{},"get-status":{},"list-models":{requestId:i},"get-agent-definitions":{requestId:i},"list-sessions":{requestId:i},"new-session":{requestId:c(i)},"switch-session":{sessionId:i,requestId:c(i)},"rename-session":{sessionId:i,name:i,requestId:i},"delete-session":{sessionId:i,requestId:i},"get-usage-report":{},"get-personal-usage-report":{requestId:i,period:d([`7d`,`30d`]),timezone:i},"get-stored-session-usage-report":{requestId:i,sessionId:i},"get-executing":{},"get-pending":{},"get-execution-workspace":{},"read-execution-detail":{requestId:i,entryId:i,cursor:c(w)},"stop-waiting-loop":{requestId:i},"project-status":{requestId:i},"project-diff":{requestId:i,path:i},"project-memory":{requestId:i},"call-app-tool":{requestId:i,viewId:i,name:i,arguments:n},"read-app-view":{requestId:i,viewId:i},"get-background-tasks":{filter:c(x)},"get-background-task":{taskId:i},"get-background-job-groups":{},"get-background-job-group":{groupId:i},"wait-background-job-group":{groupId:i},"cancel-background-task":{taskId:i,reason:c(r)},"close-background-task":{taskId:i},"send-background-task":{taskId:i,input:S},"read-background-task-log":{taskId:i,cursor:c(C)},"permission-response":{id:i,result:T},"ask-response":{id:i,response:E},resume:{lastSeq:o},ack:{seq:o},"get-settings":{requestId:i},"update-settings":{requestId:i,patch:O}},M={driverId:c(r)},ce={text_delta:{delta:r,...M},user_message:{content:r,...M},tool_start:{state:n,...M},tool_end:{state:n,...M},thinking:{isThinking:a,...M},complete:{result:n,...M},interrupted:{result:n,...M},error:{message:r,code:c(d([`auth`,`rate_limit`,`model_unavailable`,`network`,`provider`])),provider:c(r),retryAfterSeconds:c(o),model:c(r),...M},command_result:{name:r,message:r,success:a,requestId:c(r)},messages:{messages:l,display:c(l),...M},history:{startIndex:s,total:s,entries:m},context:{state:n},history_changed:{},turn_source:{source:d(Object.keys(f))},commands:{commands:l,skills:l},session_status:{status:n},model_list:{requestId:i,groups:l,currentProfile:c(r),currentModel:r},agent_definitions:{requestId:i,agents:g,current:i},sessions:{requestId:i,listing:n},sessions_error:{requestId:i,code:d([`not_available`,`list_failed`]),message:r},session_switched:{event:n},session_change_failed:{code:d(e.SESSION_CHANGE_REFUSAL_CODES),message:r,requestId:c(r)},session_renamed_in_list:{requestId:i,sessionId:r,name:r},session_rename_failed:{requestId:i,message:r},session_deleted:{requestId:i,sessionId:r},session_delete_failed:{requestId:i,code:d(e.SESSION_DELETE_REFUSAL_CODES),message:r},usage_report:{report:n},personal_usage_report:{requestId:i,report:n},personal_usage_report_error:{requestId:i,code:d([`not_available`,`report_failed`]),message:r},stored_session_usage_report:{requestId:i,sessionId:i,report:n},stored_session_usage_report_error:{requestId:i,sessionId:i,code:d([`not_available`,`report_failed`]),message:r},executing:{executing:a},pending:{pending:e=>e===null||r(e),pendingCount:c(s)},execution_workspace_event:{snapshot:n},execution_detail:{requestId:i,page:n},execution_detail_error:{requestId:i,message:r},waiting_loop_stop:{requestId:i,outcome:A},project_status:{requestId:i,result:ne},project_diff:{requestId:i,result:ae},project_memory:{requestId:i,result:oe},app_tool_result:{requestId:i,success:a,data:()=>!0,parts:c(l),error:c(r)},app_view:{requestId:i,view:n},background_task_event:{event:n},background_job_group_event:{event:n},plan_event:{event:n},context_file_refreshed:{event:n},branch_event:{event:n},background_tasks:{tasks:l},background_task:{taskId:r,task:u},background_job_groups:{groups:l},background_job_group:{groupId:r,group:u},background_task_log:{taskId:r,page:n},permission_request:{event:n},ask_request:{event:n},prompt_resolved:{event:n},ui_intent:{event:n},session_renamed:{event:n},history_cleared:{},background_task_control_result:{action:d(b),taskId:r,success:a,message:c(r)},protocol_error:{message:r,requestId:c(r)},resume_gap:{},settings:{requestId:i,settings:n},settings_error:{requestId:i,code:d([`not_available`,`invalid`,`refused`,`update_failed`]),message:r}};function le(e,t,i){if(!n(e))return{ok:!1,reason:`message must be a JSON object`};let a=e.type;if(!r(a))return{ok:!1,reason:`message type must be a string`};let o=Object.prototype.hasOwnProperty.call(t,a)?t[a]:void 0;if(o===void 0)return{ok:!1,reason:`Unknown message type: ${a}`};for(let[t,n]of Object.entries(o))if(!n(e[t]))return{ok:!1,reason:i(t)};return{ok:!0,message:e}}function N(e){return le(e,se,e=>e===`prompt`?`prompt must be a non-empty string`:`${e} has an invalid shape`)}function ue(e){return le(e,ce,e=>`${e} has an invalid shape`)}function P(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 de(e){return e.type===`call-app-tool`}function fe(e){return e.type===`read-app-view`}function pe(e){return e?.maxFrameBytes??4193280}function me(e,t){return new TextEncoder().encode(JSON.stringify(e)).byteLength<=t}function he(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=pe(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}};me(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 ge(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(!me(o,pe(r))){t({type:`protocol_error`,message:`This app view is too large to send.`,requestId:i});return}t(o)}function _e(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`){ye(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`){xe(e,t,n);return}if(n.type===`wait-background-job-group`){Se(e,t,n);return}be(e,t,n)}function ve(e,t,n){if(!n.taskId){t({type:`protocol_error`,message:`taskId is required`});return}if(n.type===`cancel-background-task`){F(t,`cancel`,n.taskId,e.cancelBackgroundTask(n.taskId,n.reason));return}if(n.type===`close-background-task`){F(t,`close`,n.taskId,e.closeBackgroundTask(n.taskId));return}Ce(e,t,n)}function ye(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 be(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 xe(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 Se(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 Ce(e,t,n){if(!n.input){t({type:`protocol_error`,message:`input is required`});return}F(t,`send`,n.taskId,e.sendBackgroundTask(n.taskId,n.input))}function F(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 we(e){return e.type===`stop-waiting-loop`}function Te(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:Ee(e)}}))}function Ee(e){return e instanceof Error?e.message:String(e)}function De(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Oe(e){return typeof e==`string`&&e.length>0?e:void 0}function ke(e){if(!(new TextEncoder().encode(e).byteLength>4194304))try{let t=JSON.parse(e);if(!De(t))return;let n=Oe(t.requestId);if(!n)return;if(t.type===`get-personal-usage-report`)return{type:`personal`,requestId:n};let r=Oe(t.sessionId);return t.type===`get-stored-session-usage-report`&&r?{type:`stored-session`,requestId:n,sessionId:r}:void 0}catch{return}}function Ae(e,t,n,r){return n.type===`get-personal-usage-report`?(Ne(t,n,r.personalUsageReporter),!0):n.type===`get-stored-session-usage-report`?(Me(t,n,r.storedSessionUsageReporter),!0):n.type===`get-usage-report`?(je(e,t,r.usageReporter),!0):!1}function je(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:R(e)}))}catch(e){t({type:`protocol_error`,message:R(e instanceof Error?e:String(e))})}}function Me(e,t,n){if(!n){I(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=>I(e,t,`report_failed`,R(n)))}catch(n){I(e,t,`report_failed`,R(n instanceof Error?n:String(n)))}}function I(e,t,n,r){e({type:`stored_session_usage_report_error`,requestId:t.requestId,sessionId:t.sessionId,code:n,message:r})}function Ne(e,t,n){if(!n){L(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=>L(e,t.requestId,`report_failed`,R(n)))}catch(n){L(e,t.requestId,`report_failed`,R(n instanceof Error?n:String(n)))}}function L(e,t,n,r){e({type:`personal_usage_report_error`,requestId:t,code:n,message:r})}function R(e){return e instanceof Error?e.message:String(e)}function Pe(e,t){let n=P(e,N);if(n.ok)return n.message;let r=ke(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 Fe=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 Ie(e){return Fe.has(e)}function Le(e){return e.type===`project-status`||e.type===`project-diff`||e.type===`project-memory`}function z(e,t){e({type:`protocol_error`,message:`This host does not support the Project panel.`,requestId:t})}function Re(e,t,n){let{requestId:r}=n;if(n.type===`project-status`){if(!e.readProjectStatus)return z(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 z(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 z(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 ze(e){return e.type===`list-sessions`||e.type===`new-session`||e.type===`switch-session`}function Be(e){return e.type===`rename-session`}function Ve(e){return e.type===`delete-session`}function He(t,n,r){if(n.type===`list-sessions`){Ue(t,n.requestId,r);return}let i=n.requestId===void 0?{}:{requestId:n.requestId};if(!r){t({type:`session_change_failed`,code:`not_available`,message:`Sessions cannot be switched on this host.`,...i});return}Promise.resolve().then(()=>n.type===`new-session`?r.newSession():r.switchSession(n.sessionId)).catch(n=>t({type:`session_change_failed`,code:(0,e.isSessionChangeRefusal)(n)?n.code:`failed`,message:B(n),...i}))}function Ue(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:B(n instanceof Error?n:String(n))})}}function B(e){return e instanceof Error?e.message:String(e)}function We(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:B(n)}))}function Ge(t,n,r){if(!r){t({type:`session_delete_failed`,requestId:n.requestId,code:`not_available`,message:`Sessions cannot be deleted on this host.`});return}r.deleteSession(n.sessionId).then(()=>t({type:`session_deleted`,requestId:n.requestId,sessionId:n.sessionId}),r=>t({type:`session_delete_failed`,requestId:n.requestId,code:(0,e.isSessionDeleteRefusal)(r)?r.code:`failed`,message:B(r)}))}const V=new WeakMap;function Ke(e){let t=V.get(e);t===void 0&&(t={frames:new Map,holders:0},V.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&&V.get(e)===n&&V.delete(e))}}}function qe(e){return[...V.get(e)?.frames.values()??[]]}function Je(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 Ye(e){let n;for(let r of Je(e)){if(r instanceof t.AuthenticationError)return{code:`auth`,...r.provider!==void 0&&{provider:r.provider}};if(r instanceof t.RateLimitError)return{code:`rate_limit`,...r.provider!==void 0&&{provider:r.provider},...r.retryAfter!==void 0&&{retryAfterSeconds:r.retryAfter}};if(r instanceof t.ModelNotAvailableError)return{code:`model_unavailable`,provider:r.provider,...r.model!==void 0&&{model:r.model}};if(r instanceof t.NetworkError)return{code:`network`,...r.provider!==void 0&&{provider:r.provider}};n===void 0&&r instanceof t.ProviderError&&(n={code:`provider`,provider:r.provider})}return n??{}}const Xe={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 Ze(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,...Ye(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?Ke(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 Qe=new TextEncoder;function $e(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 et(e,t,n){if(n.type===`get-messages`)t({type:`messages`,messages:e.getMessages(),display:e.getMessagesDisplay()});else if(n.type===`get-history`)t(nt(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`?tt(e,t,n):t(U(e))}function tt(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 nt(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=rt(n[e]),r=Qe.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 rt(e){return{...e,timestamp:it(e.timestamp)}}function it(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 at(e){let t=e.role??`drive`,n=Ze(e.session,e.deliver,{getSurfaceDriverId:()=>e.driverId,receivePrompts:t===`drive`}),r=new AbortController,i=()=>{r.abort(),n()};return{onMessage:ot(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 ot(e,t,n,r=st,i,a=`drive`,o,s,c,l){return u=>{let d=Pe(u,t);if(d){if(a===`observe`&&!Ie(d.type)){t({type:`protocol_error`,message:`Not permitted for an observer: ${d.type}`});return}ct(e,t,d,n,r,i,o,s,c,l)}}}const st={personalUsageReporter:void 0,usageReporter:void 0,storedSessionUsageReporter:void 0};function ct(e,t,n,r,i=st,a,o,s,c,l){if(Ae(e,t,n,i))return;if(ze(n)){He(t,n,o);return}if(W(n)){G(e,t,n,s,c);return}if(Be(n)){We(t,n,o);return}if(Ve(n)){Ge(t,n,o);return}if(lt(n)){mt(e,t,n,r,a,c);return}if(we(n)){Te(e,t,n);return}if($e(n)){et(e,t,n);return}if(Le(n)){Re(e,t,n);return}if(de(n)){he(e,t,n,r,l);return}if(fe(n)){ge(e,t,n,l);return}if(ut(n)){_e(e,t,n);return}if(dt(n)){ve(e,t,n);return}if(ft(n)){pt(e,n,r);return}let u=n.type;t({type:`protocol_error`,message:`Unknown message type: ${u}`})}function lt(e){return e.type===`submit`||e.type===`command`||e.type===`abort`||e.type===`cancel-queue`}function ut(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 dt(e){return e.type===`cancel-background-task`||e.type===`close-background-task`||e.type===`send-background-task`}function ft(e){return e.type===`permission-response`||e.type===`ask-response`}function pt(e,t,n){t.type===`permission-response`?e.resolvePermission(t.id,t.result,n):e.resolveAsk(t.id,t.response,n)}function mt(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 J=8*1048576;function ht(e,t=J){return e!==void 0&&e>t}const gt=120*1e3;function _t(e=gt,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=_t()){let a=!1,o=t=>{if(a)return;let o=n?.();if(ht(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 vt=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,yt=new TextDecoder,Z=X.encode(`RBF`),bt=4294967295;function xt(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>bt)throw Error(`seq must be an integer in 0..${bt} (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 St(e){let t=xt(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 Ct(e){let t=xt(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 wt(e){return e.byteLength<Z.length?!1:Z.every((t,n)=>e[n]===t)}function Tt(e){let t=yt.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 Et(e){if(!wt(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=yt.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=Tt(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 Dt=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 vt(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=Ze(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=Pe(e,this.emitBoundary);if(t){if(t.type===`resume`){this.replay(t.lastSeq);return}if(t.type===`ack`){this.buffer.ackThrough(t.seq);return}ct(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 Ot(){return{origins:new Map}}function kt(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 At(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 jt(e,t){e.origins.delete(t)}const Mt=[`command`,`filePath`,`file_path`,`path`,`url`,`pattern`,`query`];function Nt(e){for(let t of Mt){let n=e[t];if(typeof n==`string`&&n!==``)return n}}const $=16*1024,Pt=32768;function Ft(e){let t=``;for(let n=0;n<e.length;n+=Pt)t+=String.fromCharCode(...e.subarray(n,n+Pt));return btoa(t)}function It(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 Lt(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 Rt(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:Ft(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=It(e.data);if(n===void 0||Ft(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}):Lt(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 Bt(e,t=$){return Math.max(1,Math.ceil(e.byteLength/t))}exports.ATTACHED_SURFACE_MAX_PENDING_BYTES=1048576,exports.CHANNEL_FRAME_MAGIC=Z,exports.CHANNEL_FRAME_VERSION=1,exports.DEFAULT_MAX_CHUNK_BYTES=$,exports.DEFAULT_MAX_PENDING_BYTES=J,exports.DEFAULT_MAX_PENDING_MS=gt,exports.HISTORY_PAGE_MAX_BYTES=262144,exports.HandoffChunkAssembler=zt,exports.MAX_INBOUND_FRAME_BYTES=4194304,exports.PROTOCOL_SESSION_EVENT_CLASSIFICATION=Xe,exports.ResumeBuffer=vt,exports.SessionResumeBridge=Dt,exports.acknowledgePeerMessage=At,exports.admitPeerMessage=kt,exports.chunkCountFor=Bt,exports.chunkHandoffPayload=Rt,exports.createOutboundDelivery=Y,exports.createPeerMessageLedger=Ot,exports.createPendingStallClock=_t,exports.createSessionMessageHandler=at,exports.decodeChannelFrame=Et,exports.decodeClientMessage=N,exports.decodeFrame=P,exports.decodeServerMessage=ue,exports.encodeBinaryFrame=St,exports.encodeChannelEventFrame=Ct,exports.forgetPeerOrigin=jt,exports.handleSettingsMessage=G,exports.isChannelFrame=wt,exports.isObserverMessageType=Ie,exports.isOverPendingBudget=ht,exports.isSettingsMessage=W,exports.permissionSummaryArgument=Nt;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@robota-sdk/agent-interface-session"),t=require("@robota-sdk/agent-core");function n(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const r=e=>typeof e==`string`,i=e=>typeof e==`string`&&e.length>0,a=e=>typeof e==`boolean`,o=e=>typeof e==`number`&&Number.isFinite(e),s=e=>Number.isSafeInteger(e)&&e>=0,c=e=>t=>t===void 0||e(t),l=e=>Array.isArray(e)&&e.every(n),u=e=>e===null||n(e),d=e=>t=>typeof t==`string`&&e.includes(t),f={user:!0,"agent-wakeup":!0,peer:!0,external:!0},p=e=>n(e)&&r(e.id)&&r(e.timestamp)&&r(e.category)&&r(e.type),m=e=>Array.isArray(e)&&e.every(p),h=e=>n(e)&&r(e.name)&&r(e.description)&&r(e.definedIn),g=e=>Array.isArray(e)&&e.every(h),_=[`agent`,`process`,`scheduled`],v=[`foreground`,`background`],y=[`queued`,`running`,`waiting_permission`,`sleeping`,`paused`,`completed`,`failed`,`cancelled`],b=[`cancel`,`close`,`send`],x=e=>n(e)&&c(d(_))(e.kind)&&c(d(y))(e.status)&&c(d(v))(e.mode)&&c(a)(e.includeClosed),S=e=>n(e)&&c(r)(e.prompt)&&c(r)(e.stdin),C=e=>n(e)&&o(e.offset),w=e=>n(e)&&s(e.offset),T=e=>a(e)||e===`allow-session`||e===`allow-project`,E=e=>n(e)&&(e.type===`answer`&&Array.isArray(e.values)&&e.values.every(r)&&c(r)(e.text)||e.type===`cancelled`&&e.values===void 0&&e.text===void 0),D={language:{language:i},outputStyle:{styleId:i},preset:{presetId:i},permissionMode:{mode:i},sandbox:{enabled:a},removePermissionRule:{scope:i,kind:d([`allow`,`deny`,`ask`]),pattern:i},mcpServerEnabled:{serverId:i,enabled:a},reloadMcpServers:{},pluginEnabled:{pluginId:i,enabled:a},reloadPlugins:{},installPlugin:{pluginId:i},uninstallPlugin:{pluginId:i},providerProfile:{profileName:i},providerModel:{profileName:i,modelId:i},deleteProviderProfile:{profileName:i}},O=e=>{if(!n(e)||!r(e.field))return!1;let t=e.field;if(!Object.prototype.hasOwnProperty.call(D,t))return!1;let i=D[t];return Object.entries(i).every(([t,n])=>n(e[t]))},k={none:{},several:{message:r},stopped:{loopId:i,message:c(r)},failed:{loopId:c(i),message:r}},A=e=>{if(!n(e)||!r(e.kind))return!1;let t=e.kind;if(!Object.prototype.hasOwnProperty.call(k,t))return!1;let i=k[t];return Object.entries(i).every(([t,n])=>n(e[t]))};function j(e){return t=>{if(!n(t)||!r(t.kind))return!1;let i=Object.prototype.hasOwnProperty.call(e,t.kind)?e[t.kind]:void 0;return i!==void 0&&Object.entries(i).every(([e,n])=>n(t[e]))}}const ee=[`Added`,`Modified`,`Deleted`,`Renamed`,`Copied`,`Untracked`,`Conflicted`],te=e=>n(e)&&i(e.path)&&d(ee)(e.status)&&c(i)(e.renamedFrom)&&c(o)(e.added)&&c(o)(e.removed),ne=j({status:{branch:c(r),unborn:a,files:e=>Array.isArray(e)&&e.every(te),truncated:a},"not-a-repository":{},failed:{message:r}}),re=[`add`,`remove`,`context`,`hunk`],ie=e=>n(e)&&d(re)(e.type)&&r(e.text)&&o(e.lineNumber),ae=j({diff:{diffLines:e=>Array.isArray(e)&&e.every(ie),truncated:a},"not-a-repository":{},"outside-workspace":{},failed:{message:r}}),oe=j({memory:{content:r,path:i,truncated:a},unavailable:{message:r}}),se={submit:{prompt:i},command:{name:i,args:c(r),requestId:c(i)},abort:{},"cancel-queue":{},"get-messages":{},"get-history":{fromIndex:c(s)},"get-prompts":{},"get-context":{},"get-commands":{},"get-status":{},"list-models":{requestId:i},"get-agent-definitions":{requestId:i},"list-sessions":{requestId:i},"new-session":{requestId:c(i)},"switch-session":{sessionId:i,requestId:c(i)},"rename-session":{sessionId:i,name:i,requestId:i},"delete-session":{sessionId:i,requestId:i},"get-usage-report":{},"get-personal-usage-report":{requestId:i,period:d([`7d`,`30d`]),timezone:i},"get-stored-session-usage-report":{requestId:i,sessionId:i},"get-executing":{},"get-pending":{},"get-execution-workspace":{},"read-execution-detail":{requestId:i,entryId:i,cursor:c(w)},"stop-waiting-loop":{requestId:i},"project-status":{requestId:i},"project-diff":{requestId:i,path:i},"project-memory":{requestId:i},"call-app-tool":{requestId:i,viewId:i,name:i,arguments:n},"read-app-view":{requestId:i,viewId:i},"get-background-tasks":{filter:c(x)},"get-background-task":{taskId:i},"get-background-job-groups":{},"get-background-job-group":{groupId:i},"wait-background-job-group":{groupId:i},"cancel-background-task":{taskId:i,reason:c(r)},"close-background-task":{taskId:i},"send-background-task":{taskId:i,input:S},"read-background-task-log":{taskId:i,cursor:c(C)},"permission-response":{id:i,result:T},"ask-response":{id:i,response:E},resume:{lastSeq:o},ack:{seq:o},"get-settings":{requestId:i},"update-settings":{requestId:i,patch:O}},M={driverId:c(r)},ce={text_delta:{delta:r,...M},user_message:{content:r,...M},tool_start:{state:n,...M},tool_end:{state:n,...M},thinking:{isThinking:a,...M},complete:{result:n,...M},interrupted:{result:n,...M},error:{message:r,code:c(d([`auth`,`rate_limit`,`model_unavailable`,`network`,`provider`])),provider:c(r),retryAfterSeconds:c(o),model:c(r),...M},command_result:{name:r,message:r,success:a,requestId:c(r)},messages:{messages:l,display:c(l),...M},history:{startIndex:s,total:s,entries:m},context:{state:n},history_changed:{compact:c(e=>n(e)&&d([`auto`,`manual`])(e.trigger)&&o(e.beforeUsedPercentage)&&o(e.afterUsedPercentage))},turn_source:{source:d(Object.keys(f))},commands:{commands:l,skills:l},session_status:{status:n},model_list:{requestId:i,groups:l,currentProfile:c(r),currentModel:r},agent_definitions:{requestId:i,agents:g,current:i},sessions:{requestId:i,listing:n},sessions_error:{requestId:i,code:d([`not_available`,`list_failed`]),message:r},session_switched:{event:n},session_change_failed:{code:d(e.SESSION_CHANGE_REFUSAL_CODES),message:r,requestId:c(r)},session_renamed_in_list:{requestId:i,sessionId:r,name:r},session_rename_failed:{requestId:i,message:r},session_deleted:{requestId:i,sessionId:r},session_delete_failed:{requestId:i,code:d(e.SESSION_DELETE_REFUSAL_CODES),message:r},usage_report:{report:n},personal_usage_report:{requestId:i,report:n},personal_usage_report_error:{requestId:i,code:d([`not_available`,`report_failed`]),message:r},stored_session_usage_report:{requestId:i,sessionId:i,report:n},stored_session_usage_report_error:{requestId:i,sessionId:i,code:d([`not_available`,`report_failed`]),message:r},executing:{executing:a},pending:{pending:e=>e===null||r(e),pendingCount:c(s)},execution_workspace_event:{snapshot:n},execution_detail:{requestId:i,page:n},execution_detail_error:{requestId:i,message:r},waiting_loop_stop:{requestId:i,outcome:A},project_status:{requestId:i,result:ne},project_diff:{requestId:i,result:ae},project_memory:{requestId:i,result:oe},app_tool_result:{requestId:i,success:a,data:()=>!0,parts:c(l),error:c(r)},app_view:{requestId:i,view:n},background_task_event:{event:n},background_job_group_event:{event:n},plan_event:{event:n},context_file_refreshed:{event:n},branch_event:{event:n},background_tasks:{tasks:l},background_task:{taskId:r,task:u},background_job_groups:{groups:l},background_job_group:{groupId:r,group:u},background_task_log:{taskId:r,page:n},permission_request:{event:n},ask_request:{event:n},prompt_resolved:{event:n},ui_intent:{event:n},session_renamed:{event:n},history_cleared:{},background_task_control_result:{action:d(b),taskId:r,success:a,message:c(r)},protocol_error:{message:r,requestId:c(r)},resume_gap:{},settings:{requestId:i,settings:n},settings_error:{requestId:i,code:d([`not_available`,`invalid`,`refused`,`update_failed`]),message:r}};function le(e,t,i){if(!n(e))return{ok:!1,reason:`message must be a JSON object`};let a=e.type;if(!r(a))return{ok:!1,reason:`message type must be a string`};let o=Object.prototype.hasOwnProperty.call(t,a)?t[a]:void 0;if(o===void 0)return{ok:!1,reason:`Unknown message type: ${a}`};for(let[t,n]of Object.entries(o))if(!n(e[t]))return{ok:!1,reason:i(t)};return{ok:!0,message:e}}function N(e){return le(e,se,e=>e===`prompt`?`prompt must be a non-empty string`:`${e} has an invalid shape`)}function ue(e){return le(e,ce,e=>`${e} has an invalid shape`)}function P(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 de(e){return e.type===`call-app-tool`}function fe(e){return e.type===`read-app-view`}function pe(e){return e?.maxFrameBytes??4193280}function me(e,t){return new TextEncoder().encode(JSON.stringify(e)).byteLength<=t}function he(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=pe(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}};me(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 ge(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(!me(o,pe(r))){t({type:`protocol_error`,message:`This app view is too large to send.`,requestId:i});return}t(o)}function _e(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`){ye(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`){xe(e,t,n);return}if(n.type===`wait-background-job-group`){Se(e,t,n);return}be(e,t,n)}function ve(e,t,n){if(!n.taskId){t({type:`protocol_error`,message:`taskId is required`});return}if(n.type===`cancel-background-task`){F(t,`cancel`,n.taskId,e.cancelBackgroundTask(n.taskId,n.reason));return}if(n.type===`close-background-task`){F(t,`close`,n.taskId,e.closeBackgroundTask(n.taskId));return}Ce(e,t,n)}function ye(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 be(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 xe(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 Se(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 Ce(e,t,n){if(!n.input){t({type:`protocol_error`,message:`input is required`});return}F(t,`send`,n.taskId,e.sendBackgroundTask(n.taskId,n.input))}function F(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 we(e){return e.type===`stop-waiting-loop`}function Te(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:Ee(e)}}))}function Ee(e){return e instanceof Error?e.message:String(e)}function De(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Oe(e){return typeof e==`string`&&e.length>0?e:void 0}function ke(e){if(!(new TextEncoder().encode(e).byteLength>4194304))try{let t=JSON.parse(e);if(!De(t))return;let n=Oe(t.requestId);if(!n)return;if(t.type===`get-personal-usage-report`)return{type:`personal`,requestId:n};let r=Oe(t.sessionId);return t.type===`get-stored-session-usage-report`&&r?{type:`stored-session`,requestId:n,sessionId:r}:void 0}catch{return}}function Ae(e,t,n,r){return n.type===`get-personal-usage-report`?(Ne(t,n,r.personalUsageReporter),!0):n.type===`get-stored-session-usage-report`?(Me(t,n,r.storedSessionUsageReporter),!0):n.type===`get-usage-report`?(je(e,t,r.usageReporter),!0):!1}function je(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:R(e)}))}catch(e){t({type:`protocol_error`,message:R(e instanceof Error?e:String(e))})}}function Me(e,t,n){if(!n){I(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=>I(e,t,`report_failed`,R(n)))}catch(n){I(e,t,`report_failed`,R(n instanceof Error?n:String(n)))}}function I(e,t,n,r){e({type:`stored_session_usage_report_error`,requestId:t.requestId,sessionId:t.sessionId,code:n,message:r})}function Ne(e,t,n){if(!n){L(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=>L(e,t.requestId,`report_failed`,R(n)))}catch(n){L(e,t.requestId,`report_failed`,R(n instanceof Error?n:String(n)))}}function L(e,t,n,r){e({type:`personal_usage_report_error`,requestId:t,code:n,message:r})}function R(e){return e instanceof Error?e.message:String(e)}function Pe(e,t){let n=P(e,N);if(n.ok)return n.message;let r=ke(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 Fe=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 Ie(e){return Fe.has(e)}function Le(e){return e.type===`project-status`||e.type===`project-diff`||e.type===`project-memory`}function z(e,t){e({type:`protocol_error`,message:`This host does not support the Project panel.`,requestId:t})}function Re(e,t,n){let{requestId:r}=n;if(n.type===`project-status`){if(!e.readProjectStatus)return z(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 z(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 z(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 ze(e){return e.type===`list-sessions`||e.type===`new-session`||e.type===`switch-session`}function Be(e){return e.type===`rename-session`}function Ve(e){return e.type===`delete-session`}function He(t,n,r){if(n.type===`list-sessions`){Ue(t,n.requestId,r);return}let i=n.requestId===void 0?{}:{requestId:n.requestId};if(!r){t({type:`session_change_failed`,code:`not_available`,message:`Sessions cannot be switched on this host.`,...i});return}Promise.resolve().then(()=>n.type===`new-session`?r.newSession():r.switchSession(n.sessionId)).catch(n=>t({type:`session_change_failed`,code:(0,e.isSessionChangeRefusal)(n)?n.code:`failed`,message:B(n),...i}))}function Ue(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:B(n instanceof Error?n:String(n))})}}function B(e){return e instanceof Error?e.message:String(e)}function We(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:B(n)}))}function Ge(t,n,r){if(!r){t({type:`session_delete_failed`,requestId:n.requestId,code:`not_available`,message:`Sessions cannot be deleted on this host.`});return}r.deleteSession(n.sessionId).then(()=>t({type:`session_deleted`,requestId:n.requestId,sessionId:n.sessionId}),r=>t({type:`session_delete_failed`,requestId:n.requestId,code:(0,e.isSessionDeleteRefusal)(r)?r.code:`failed`,message:B(r)}))}const V=new WeakMap;function Ke(e){let t=V.get(e);t===void 0&&(t={frames:new Map,holders:0},V.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&&V.get(e)===n&&V.delete(e))}}}function qe(e){return[...V.get(e)?.frames.values()??[]]}function Je(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 Ye(e){let n;for(let r of Je(e)){if(r instanceof t.AuthenticationError)return{code:`auth`,...r.provider!==void 0&&{provider:r.provider}};if(r instanceof t.RateLimitError)return{code:`rate_limit`,...r.provider!==void 0&&{provider:r.provider},...r.retryAfter!==void 0&&{retryAfterSeconds:r.retryAfter}};if(r instanceof t.ModelNotAvailableError)return{code:`model_unavailable`,provider:r.provider,...r.model!==void 0&&{model:r.model}};if(r instanceof t.NetworkError)return{code:`network`,...r.provider!==void 0&&{provider:r.provider}};n===void 0&&r instanceof t.ProviderError&&(n={code:`provider`,provider:r.provider})}return n??{}}const Xe={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 Ze(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,...Ye(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?Ke(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 H(e){let{history:t,...n}=e;return n}const Qe=new TextEncoder;function $e(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 et(e,t,n){if(n.type===`get-messages`)t({type:`messages`,messages:e.getMessages(),display:e.getMessagesDisplay()});else if(n.type===`get-history`)t(nt(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`?tt(e,t,n):t(U(e))}function tt(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 nt(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=rt(n[e]),r=Qe.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 rt(e){return{...e,timestamp:it(e.timestamp)}}function it(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 at(e){let t=e.role??`drive`,n=Ze(e.session,e.deliver,{getSurfaceDriverId:()=>e.driverId,receivePrompts:t===`drive`}),r=new AbortController,i=()=>{r.abort(),n()};return{onMessage:ot(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 ot(e,t,n,r=st,i,a=`drive`,o,s,c,l){return u=>{let d=Pe(u,t);if(d){if(a===`observe`&&!Ie(d.type)){t({type:`protocol_error`,message:`Not permitted for an observer: ${d.type}`});return}ct(e,t,d,n,r,i,o,s,c,l)}}}const st={personalUsageReporter:void 0,usageReporter:void 0,storedSessionUsageReporter:void 0};function ct(e,t,n,r,i=st,a,o,s,c,l){if(Ae(e,t,n,i))return;if(ze(n)){He(t,n,o);return}if(W(n)){G(e,t,n,s,c);return}if(Be(n)){We(t,n,o);return}if(Ve(n)){Ge(t,n,o);return}if(lt(n)){mt(e,t,n,r,a,c);return}if(we(n)){Te(e,t,n);return}if($e(n)){et(e,t,n);return}if(Le(n)){Re(e,t,n);return}if(de(n)){he(e,t,n,r,l);return}if(fe(n)){ge(e,t,n,l);return}if(ut(n)){_e(e,t,n);return}if(dt(n)){ve(e,t,n);return}if(ft(n)){pt(e,n,r);return}let u=n.type;t({type:`protocol_error`,message:`Unknown message type: ${u}`})}function lt(e){return e.type===`submit`||e.type===`command`||e.type===`abort`||e.type===`cancel-queue`}function ut(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 dt(e){return e.type===`cancel-background-task`||e.type===`close-background-task`||e.type===`send-background-task`}function ft(e){return e.type===`permission-response`||e.type===`ask-response`}function pt(e,t,n){t.type===`permission-response`?e.resolvePermission(t.id,t.result,n):e.resolveAsk(t.id,t.response,n)}function mt(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 J=8*1048576;function ht(e,t=J){return e!==void 0&&e>t}const gt=120*1e3;function _t(e=gt,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=_t()){let a=!1,o=t=>{if(a)return;let o=n?.();if(ht(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 vt=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,yt=new TextDecoder,Z=X.encode(`RBF`),bt=4294967295;function xt(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>bt)throw Error(`seq must be an integer in 0..${bt} (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 St(e){let t=xt(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 Ct(e){let t=xt(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 wt(e){return e.byteLength<Z.length?!1:Z.every((t,n)=>e[n]===t)}function Tt(e){let t=yt.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 Et(e){if(!wt(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=yt.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=Tt(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 Dt=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 vt(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=Ze(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=Pe(e,this.emitBoundary);if(t){if(t.type===`resume`){this.replay(t.lastSeq);return}if(t.type===`ack`){this.buffer.ackThrough(t.seq);return}ct(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 Ot(){return{origins:new Map}}function kt(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 At(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 jt(e,t){e.origins.delete(t)}const Mt=[`command`,`filePath`,`file_path`,`path`,`url`,`pattern`,`query`];function Nt(e){for(let t of Mt){let n=e[t];if(typeof n==`string`&&n!==``)return n}}const $=16*1024,Pt=32768;function Ft(e){let t=``;for(let n=0;n<e.length;n+=Pt)t+=String.fromCharCode(...e.subarray(n,n+Pt));return btoa(t)}function It(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 Lt(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 Rt(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:Ft(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=It(e.data);if(n===void 0||Ft(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}):Lt(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 Bt(e,t=$){return Math.max(1,Math.ceil(e.byteLength/t))}exports.ATTACHED_SURFACE_MAX_PENDING_BYTES=1048576,exports.CHANNEL_FRAME_MAGIC=Z,exports.CHANNEL_FRAME_VERSION=1,exports.DEFAULT_MAX_CHUNK_BYTES=$,exports.DEFAULT_MAX_PENDING_BYTES=J,exports.DEFAULT_MAX_PENDING_MS=gt,exports.HISTORY_PAGE_MAX_BYTES=262144,exports.HandoffChunkAssembler=zt,exports.MAX_INBOUND_FRAME_BYTES=4194304,exports.PROTOCOL_SESSION_EVENT_CLASSIFICATION=Xe,exports.ResumeBuffer=vt,exports.SessionResumeBridge=Dt,exports.acknowledgePeerMessage=At,exports.admitPeerMessage=kt,exports.chunkCountFor=Bt,exports.chunkHandoffPayload=Rt,exports.createOutboundDelivery=Y,exports.createPeerMessageLedger=Ot,exports.createPendingStallClock=_t,exports.createSessionMessageHandler=at,exports.decodeChannelFrame=Et,exports.decodeClientMessage=N,exports.decodeFrame=P,exports.decodeServerMessage=ue,exports.encodeBinaryFrame=St,exports.encodeChannelEventFrame=Ct,exports.forgetPeerOrigin=jt,exports.handleSettingsMessage=G,exports.isChannelFrame=wt,exports.isObserverMessageType=Ie,exports.isOverPendingBudget=ht,exports.isSettingsMessage=W,exports.permissionSummaryArgument=Nt;
@@ -2,7 +2,7 @@ import { IToolAppView, IToolExecutionResult, TToolArgs, TToolParameters, TUniver
2
2
  import { IPersonalUsageReport, IPersonalUsageRequest, IUsageBySourceReport, TUsageSurface } from "@robota-sdk/agent-interface-analytics";
3
3
  import { ICommandListEntry, ICommandResult, ICommandSkillListEntry, TCommandSurfaceLocality } from "@robota-sdk/agent-interface-command";
4
4
  import { IBackgroundJobGroupState, IBackgroundTaskInput, IBackgroundTaskListFilter, IBackgroundTaskLogCursor, IBackgroundTaskLogPage, IBackgroundTaskState, IExecutionDetailCursor, IExecutionDetailPage, IExecutionWorkspaceSnapshot, TBackgroundJobGroupEvent, TBackgroundTaskEvent } from "@robota-sdk/agent-interface-execution";
5
- import { IAskRequestEvent, IBranchEvent, IContextFileRefreshedEvent, IExecutionResult, IModelListGroup, IPermissionRequestEvent, IPlanApprovalEvent, IPromptResolvedEvent, ISessionAgentJobs, ISessionBackgroundGroups, ISessionBackgroundTasks, ISessionCommands, ISessionConversationRead, ISessionDirectory, ISessionDriverAttribution, ISessionEvents, ISessionExecutionDetail, ISessionExecutionState, ISessionExecutionWorkspace, ISessionListing, ISessionProjectRead, ISessionPromptResolution, ISessionRenamedEvent, ISessionRuntimeTools, ISessionSelfPacedLoopControl, ISessionStatusRead, ISessionStatusSnapshot, ISessionSwitchedEvent, ISessionToolAppViews, ISessionTurnControl, ISessionTurnSubmission, ISettingsSnapshot, IToolState, IUiIntentEvent, TDriverId, TPermissionResultValue, TProjectDiffRead, TProjectMemoryRead, TProjectStatusRead, TSessionChangeRefusalCode, TSessionDeleteRefusalCode, TSettingsPatch, TTurnSource, TWaitingLoopStopOutcome } from "@robota-sdk/agent-interface-session";
5
+ import { IAskRequestEvent, IBranchEvent, ICompactEvent, IContextFileRefreshedEvent, IExecutionResult, IModelListGroup, IPermissionRequestEvent, IPlanApprovalEvent, IPromptResolvedEvent, ISessionAgentJobs, ISessionBackgroundGroups, ISessionBackgroundTasks, ISessionCommands, ISessionConversationRead, ISessionDirectory, ISessionDriverAttribution, ISessionEvents, ISessionExecutionDetail, ISessionExecutionState, ISessionExecutionWorkspace, ISessionListing, ISessionProjectRead, ISessionPromptResolution, ISessionRenamedEvent, ISessionRuntimeTools, ISessionSelfPacedLoopControl, ISessionStatusRead, ISessionStatusSnapshot, ISessionSwitchedEvent, ISessionToolAppViews, ISessionTurnControl, ISessionTurnSubmission, ISettingsSnapshot, IToolState, IUiIntentEvent, TDriverId, TPermissionResultValue, TProjectDiffRead, TProjectMemoryRead, TProjectStatusRead, TSessionChangeRefusalCode, TSessionDeleteRefusalCode, TSettingsPatch, TTurnSource, TWaitingLoopStopOutcome } from "@robota-sdk/agent-interface-session";
6
6
  import { IBinaryFrame, IChannelEventFrame, TActionResponse, TChannelReceiveResult } from "@robota-sdk/agent-interface-transport";
7
7
  import { IHandoffIntegrity, IPeerMessage, IPeerMessageAck, TPeerDeliveryState } from "@robota-sdk/agent-interface-session-mobility";
8
8
  //#region src/wire-messages.d.ts
@@ -263,6 +263,12 @@ type TServerMessage = {
263
263
  state: ReturnType<ISessionConversationRead['getContextState']>;
264
264
  } | {
265
265
  type: 'history_changed';
266
+ /** A completed compaction, for clients that do not render the full system history. */
267
+ compact?: {
268
+ trigger: ICompactEvent['trigger'];
269
+ beforeUsedPercentage: number;
270
+ afterUsedPercentage: number;
271
+ };
266
272
  } | {
267
273
  type: 'turn_source';
268
274
  source: TTurnSource;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/wire-messages.ts","../../src/outbound-delivery.ts","../../src/protocol-session.ts","../../src/settings-messages.ts","../../src/usage-messages.ts","../../src/session-events.ts","../../src/session-message-handler.ts","../../src/observer-messages.ts","../../src/session-query-messages.ts","../../src/message-decoders.ts","../../src/resume-buffer.ts","../../src/channel-frames.ts","../../src/session-resume-bridge.ts","../../src/peer-message-ledger.ts","../../src/permission-summary.ts","../../src/handoff-chunking.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/wire-messages.ts","../../src/outbound-delivery.ts","../../src/protocol-session.ts","../../src/settings-messages.ts","../../src/usage-messages.ts","../../src/session-events.ts","../../src/session-message-handler.ts","../../src/observer-messages.ts","../../src/session-query-messages.ts","../../src/message-decoders.ts","../../src/resume-buffer.ts","../../src/channel-frames.ts","../../src/session-resume-bridge.ts","../../src/peer-message-ledger.ts","../../src/permission-summary.ts","../../src/handoff-chunking.ts"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { IAskRequestEvent, IBranchEvent, IContextFileRefreshedEvent, IExecutionResult, IModelListGroup, IPermissionRequestEvent, IPlanApprovalEvent, IPromptResolvedEvent, ISessionAgentJobs, ISessionBackgroundGroups, ISessionBackgroundTasks, ISessionCommands, ISessionConversationRead, ISessionDirectory, ISessionDriverAttribution, ISessionEvents, ISessionExecutionDetail, ISessionExecutionState, ISessionExecutionWorkspace, ISessionListing, ISessionProjectRead, ISessionPromptResolution, ISessionRenamedEvent, ISessionRuntimeTools, ISessionSelfPacedLoopControl, ISessionStatusRead, ISessionStatusSnapshot, ISessionSwitchedEvent, ISessionToolAppViews, ISessionTurnControl, ISessionTurnSubmission, ISettingsSnapshot, IToolState, IUiIntentEvent, TDriverId, TPermissionResultValue, TProjectDiffRead, TProjectMemoryRead, TProjectStatusRead, TSessionChangeRefusalCode, TSessionDeleteRefusalCode, TSettingsPatch, TTurnSource, TWaitingLoopStopOutcome } from "@robota-sdk/agent-interface-session";
1
+ import { IAskRequestEvent, IBranchEvent, ICompactEvent, IContextFileRefreshedEvent, IExecutionResult, IModelListGroup, IPermissionRequestEvent, IPlanApprovalEvent, IPromptResolvedEvent, ISessionAgentJobs, ISessionBackgroundGroups, ISessionBackgroundTasks, ISessionCommands, ISessionConversationRead, ISessionDirectory, ISessionDriverAttribution, ISessionEvents, ISessionExecutionDetail, ISessionExecutionState, ISessionExecutionWorkspace, ISessionListing, ISessionProjectRead, ISessionPromptResolution, ISessionRenamedEvent, ISessionRuntimeTools, ISessionSelfPacedLoopControl, ISessionStatusRead, ISessionStatusSnapshot, ISessionSwitchedEvent, ISessionToolAppViews, ISessionTurnControl, ISessionTurnSubmission, ISettingsSnapshot, IToolState, IUiIntentEvent, TDriverId, TPermissionResultValue, TProjectDiffRead, TProjectMemoryRead, TProjectStatusRead, TSessionChangeRefusalCode, TSessionDeleteRefusalCode, TSettingsPatch, TTurnSource, TWaitingLoopStopOutcome } from "@robota-sdk/agent-interface-session";
2
2
  import { IToolAppView, IToolExecutionResult, TToolArgs, TToolParameters, TUniversalMessagePart } from "@robota-sdk/agent-core";
3
3
  import { IPersonalUsageReport, IPersonalUsageRequest, IUsageBySourceReport, TUsageSurface } from "@robota-sdk/agent-interface-analytics";
4
4
  import { ICommandListEntry, ICommandResult, ICommandSkillListEntry, TCommandSurfaceLocality } from "@robota-sdk/agent-interface-command";
@@ -263,6 +263,12 @@ type TServerMessage = {
263
263
  state: ReturnType<ISessionConversationRead['getContextState']>;
264
264
  } | {
265
265
  type: 'history_changed';
266
+ /** A completed compaction, for clients that do not render the full system history. */
267
+ compact?: {
268
+ trigger: ICompactEvent['trigger'];
269
+ beforeUsedPercentage: number;
270
+ afterUsedPercentage: number;
271
+ };
266
272
  } | {
267
273
  type: 'turn_source';
268
274
  source: TTurnSource;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/wire-messages.ts","../../src/outbound-delivery.ts","../../src/protocol-session.ts","../../src/settings-messages.ts","../../src/usage-messages.ts","../../src/session-events.ts","../../src/session-message-handler.ts","../../src/observer-messages.ts","../../src/session-query-messages.ts","../../src/message-decoders.ts","../../src/resume-buffer.ts","../../src/channel-frames.ts","../../src/session-resume-bridge.ts","../../src/peer-message-ledger.ts","../../src/permission-summary.ts","../../src/handoff-chunking.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/wire-messages.ts","../../src/outbound-delivery.ts","../../src/protocol-session.ts","../../src/settings-messages.ts","../../src/usage-messages.ts","../../src/session-events.ts","../../src/session-message-handler.ts","../../src/observer-messages.ts","../../src/session-query-messages.ts","../../src/message-decoders.ts","../../src/resume-buffer.ts","../../src/channel-frames.ts","../../src/session-resume-bridge.ts","../../src/peer-message-ledger.ts","../../src/permission-summary.ts","../../src/handoff-chunking.ts"],"mappings":";;;;;;;;KAgEY;KAEP,gBAAgB,WAAW;;;;;UAMf;EACf;EACA;EACA;;;;;;;UAQe,0BAA0B,KAAK;;EAE9C;;;;;;KAOU,uBAAuB,KAAK;;KAG5B;EACN;EAAgB;;EAGhB;EAAiB;EAAc;EAAe;;EAC9C;;EACA;;EACA;;EAIA;EAAqB;;EAGrB;;EACA;;EAGA;;EACA;;EAIA;EAAqB;;EAIrB;EAA+B;;EAG/B;EAAuB;;EACvB;EAAqB;;EACrB;EAAwB;EAAmB;;EAG3C;EAAwB;EAAmB;EAAc;;EAGzD;EAAwB;EAAmB;;EAE3C;;EAEA;EACA;EACA,QAAQ;EACR;;EAEA;EAAyC;EAAmB;;EAC5D;;EACA;;EACA;;EAIA;EACA;EACA;EACA,SAAS;;EAGT;EAA2B;;EAG3B;EAAwB;;EAIxB;EAAsB;EAAmB;;EAGzC;EAAwB;;EAQxB;EACA;EACA;EACA;EACA,WAAW;;EAKX;EAAuB;EAAmB;;EAC1C;EAA8B,SAAS;;EACvC;EAA6B;;EAC7B;;EACA;EAAkC;;EAClC;EAAmC;;EACnC;EAAgC;EAAgB;;EAChD;EAA+B;;EAC/B;EAA8B;EAAgB,OAAO;;EACrD;EAAkC;EAAgB,SAAS;;EAE3D;EAA6B;EAAY,QAAQ;;EACjD;EAAsB;EAAY,UAAU;;EAG5C;EAAgB;;EAChB;EAAa;;EAIb;EAAsB;;EACtB;EAAyB;EAAmB,OAAO;;;KAG7C;EAIN;EAAoB;EAAe,WAAW;;EAC9C;EAAsB;EAAiB,WAAW;;EAClD;EAAoB,OAAO;EAAY,WAAW;;EAClD;EAAkB,OAAO;EAAY,WAAW;;EAChD;EAAkB;EAAqB,WAAW;;EAClD;EAAkB,QAAQ;EAAsB,WAAW;;EAC3D;EAAqB,QAAQ;EAAsB,WAAW;;EAE9D;;EAEA;;;;;;EAMA;;EAEA;;EAEA;;;;;;EAMA;EACA,WAAW;;EAGX;EACA;EACA;EACA;EACA,OAAO;;EAEP;;EAGA;EACA,UAAU,WAAW;;;;;;;;EAQrB,UAAU,WAAW;;;;;;EAMrB,WAAW;;EAIX;EAAiB;EAAoB;EAAe,SAAS;;EAE7D;EAAiB,OAAO,WAAW;;EAInC;;EAEA;IACE,SAAS;IACT;IACA;;;EAIF;EAAqB,QAAQ;;EAC7B;EAAkB,UAAU;EAAqB,QAAQ;;EAEzD;EAAwB,QAAQ;;EAIhC;EACA;EACA,iBAAiB;EACjB;EACA;;EAKA;EACA;EACA,iBAAiB;EACjB;;EAEA;EAAkB;EAAmB,SAAS;;EAE9C;EACA;EACA;EACA;;EAIA;EAA0B,OAAO;;EAGjC;EACA,MAAM;EACN;EACA;;EAGA;EAAiC;EAAmB;EAAmB;;EACvE;EAA+B;EAAmB;;EAGlD;EAAyB;EAAmB;;EAE5C;EACA;EACA,MAAM;EACN;;EAKA;EAAsB,QAAQ;;EAC9B;EAA+B;EAAmB,QAAQ;;EAE1D;EACA;EACA;EACA;;EAGA;EACA;EACA;EACA,QAAQ;;EAGR;EACA;EACA;EACA;EACA;;EAEA;EAAmB;;EAGnB;EAAiB;EAAwB;;EACzC;EAAmC,UAAU;;EAC7C;EAA0B;EAAmB,MAAM;;EACnD;EAAgC;EAAmB;;EACnD;EAA2B;EAAmB,SAAS;;EAKvD;EAAwB;EAAmB,QAAQ;;EACnD;EAAsB;EAAmB,QAAQ;;EACjD;EAAwB;EAAmB,QAAQ;;EAInD;EACA;EACA;EACA,OAAO;EACP,QAAQ;EACR;;EAGA;EAAkB;EAAmB,MAAM;;EAC3C;EAA+B,OAAO;;EACtC;EAAoC,OAAO;;EAC3C;EAAoB,OAAO;;EAC3B;EAAgC,OAAO;;EACvC;EAAsB,OAAO;;EAC7B;EAA0B,OAAO;;EACjC;EAAyB;EAAgB,MAAM;;EAC/C;EAA+B,QAAQ;;EACvC;EAA8B;EAAiB,OAAO;;EACtD;EAA6B;EAAgB,MAAM;;EAGnD;EAA4B,OAAO;;EACnC;EAAqB,OAAO;;EAC5B;EAAyB,OAAO;;EAIhC;EAAmB,OAAO;;EAG1B;EAAyB,OAAO;;EAChC;;EAEA;EACA,QAAQ;EACR;EACA;EACA;;EAGA;EAAwB;EAAiB;;EAGzC;;EAGA;EAAkB;EAAmB,UAAU;;EAE/C;EACA;EACA;EACA;;;;;;;;KASM,oBAAoB;EAAmB;;;;cCjZrC;;;;;;;;;KAUF,qBAAqB,SAAS;YAC9B;;;;;;;;;;;;;;;WAgBD;;;;;;;;;;KAWC,yBAAyB,OAAO,OAAO,OAAO;cA0B7C;;;;;;;;cASA;;;;;;;;;;;;iBAaG,oBACd,6BACA;;;;;;;;;;;;;cAiBW;;;;;;;UAQI;WACN;;;;;;EAMT,UAAU;;iBAGI,wBACd,uBACA,qBACC;iBAkBa,uBACd,OAAO,SAAS,yBAChB,iBAAiB,uBACjB,yCACA,0BACA,aAAY,qBACX;;;;UClKc,yBAEb,wBACA,qBACA,kBACA,oBACA,gBACA,0BACA,0BACA,wBACA,2BACA,yBACA,0BACA,4BACA,yBACA,8BAIA,mBAGA,sBACA;;;;;;;;;KAUQ,6BAA6B,mBAAmB,QAAQ;;;KCjD/D,mBAAmB,QAAQ;EAAkB;;iBAElC,kBAAkB,KAAK,iBAAiB,OAAO;;KAKnD;WACG;WAAmB,UAAU;;WAE7B;WACA;WACA;;;;;;;;;UAUE;EACf,YACE,SAAS,kBACT,WAAW,0BACV,oBAAoB,QAAQ;;;;;;EAM/B,eACE,SAAS,kBACT,OAAO,gBACP,WAAW,0BACV,yBAAyB,QAAQ;;iBAGtB,sBACd,SAAS,kBACT,SAAS,kBACT,KAAK,kBACL,UAAU,+BACV,WAAW;;;UCpCI;WACN,yBACH,SAAS,0BAA0B,uBAAuB,QAAQ;WAE/D,iBACH,SAAS,qBAAqB,uBAAuB,QAAQ;WAE1D,8BACL,sBAAsB,uBAAuB,QAAQ;;;;KCkB/C;;cAGC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KCmBD;UAEK;;EAEf,SAAS;;;;;;;;EAQT,SAAS;;;;;;EAMT,WAAW;;EAEX,UAAU;;EAEV,OAAO;;EAEP,wBAAwB,YAAY;;EAEpC,gBAAgB,YAAY;;EAE5B,6BAA6B,YAAY;;EAEzC,mBAAmB;;EAEnB,mBAAmB;;;;;;;EAOnB,yBAAyB;;;;;;;EAOzB;;;;;;;;;;;;;;;;;;;;;iBAsBc,4BAA4B,SAAS;EACnD,YAAY;EACZ;;;;;iBCxFc,sBAAsB;;;;;;;;cCdzB;;;KCPD,qBAAqB;WAClB;WAAmB,SAAS;;WAC5B;WAAoB;;;cAGtB;;iBA2aG,oBAAoB,iBAAiB,qBAAqB;;iBAO1D,oBAAoB,iBAAiB,qBAAqB;;iBAS1D,YAAY,UAC1B,cACA,SAAS,mBAAmB,qBAAqB,YAChD,qBAAqB;;;;UC5cP;WACN;WACA,SAAS;;;KAIR;WACG;WAAuB,iBAAiB;;WACxC;;UAEE;;WAEN;;WAEA;;WAEA,UAAU,SAAS;;;;;;cAUjB;mBACM;mBACA;UACT;UACA;mBAES;mBACA;mBACA;EAEE,YAAA,UAAS;;EAOrB,OAAO,SAAS;;EAYhB,WAAW;;;;;;EAWX,UAAU,kBAAkB;;MAWxB;;MAKA;UAIH;;UAeA;;;;;cC3EG,qBAAqB;;cAGrB;;iBAwCG,kBAAkB,OAAO,eAAe;;iBASxC,wBAAwB,OAAO,qBAAqB;;iBAUpD,eAAe,OAAO;;;;;;iBAsCtB,mBAAmB,OAAO,aAAa;;;;KCzG3C,eAAe;;UAGV;;;;;;;;WAQN;;WAEA,kBAAkB,OAAO,OAAO;;;;;;;;WAQhC;;UAGM;WACN,SAAS;WACT,SAAS;;WAET,WAAW;WACX,UAAU;WACV,wBAAwB;WACxB,gBAAgB;WAChB,6BAA6B;;WAE7B,yBAAyB;;WAEzB;;cAGE;mBACM;mBACA;UACT;mBACS;mBACA;mBACA;mBACA;;;;;;mBAMA;mBACA;UACT;;;;;;;UAOA;;;;;;;;;;;;;;mBAcS;UACT;;UAEA;EAEW,YAAA,SAAS;;EAgCrB,OAAO,MAAM,aAAa,SAAS;;EAanC;;;;;EASA,YAAY,UAAU;;EAKtB,gBAAgB;;EAgChB;;MAWI;;;;;;;;UAWH;;;;;;;;;;UAgBA;;UAgBA;;UAKA;;;;;;;;;;;;;;;;;;UCzNO;;EAEf;;EAEA,WAAW;;EAEX,QAAQ,YAAY;;;UAIL;WACN,SAAS,YAAY;;iBAGhB,2BAA2B;;UAK1B;WACN,OAAO,QAAQ;WACf;;UAGM;WACN,KAAK;;;;;;;;WAQL;;;;;;;WAOA;;;;;;;;;iBAUK,iBACd,QAAQ,oBACR,SAAS,cACT,YAAY,wBACX;;;;;;;;iBAyEa,uBACd,QAAQ,oBACR,yBACA,aACC;;iBAWa,iBAAiB,QAAQ,oBAAoB;;;;iBCnL7C,0BAA0B,UAAU;;;;;;;;;;UC4BnC;WACN;;WAEA;;WAEA;;WAEA;;;;;;;;;cAUE;;;;;;;;iBA0CG,oBACd,mBACA,oBACA,kCACU;;KAqBA;;;;;;;;;KAUA;;;;;;;UASK;WACN,SAAS;WACT,YAAY;;WAEZ;;WAEA;;WAEA;;;;;;;;;;cAWE;mBAIkB;mBAHZ;UACT;EAEqB,YAAA;MAEzB;MAIA;;EAKJ,OAAO,OAAO,gBAAgB;;EAmD9B;;EAQA;UAKQ;;;;;;;;iBA6BM,cACd,WAAW,mBACX"}