@robota-sdk/agent-transport 3.0.0-beta.94 → 3.0.0-beta.95
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +139 -0
- package/README.md +2 -1
- package/dist/browser/client.d.ts +1 -1
- package/dist/browser/client.js +1 -1
- package/dist/browser/index.d.ts +34 -4
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +1 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/{observer-messages-Dnff2Tdb.d.ts → observer-messages-DoWb6RNv.d.ts} +23 -1
- package/dist/browser/observer-messages-DoWb6RNv.d.ts.map +1 -0
- package/dist/browser/observer-messages-UG77sTYK.js +2 -0
- package/dist/browser/observer-messages-UG77sTYK.js.map +1 -0
- package/dist/node/index.cjs +1 -1
- package/dist/node/index.d.cts +54 -3
- package/dist/node/index.d.cts.map +1 -1
- package/dist/node/index.d.ts +54 -3
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +1 -1
- package/dist/node/index.js.map +1 -1
- package/dist/node/node.cjs +1 -1
- package/dist/node/node.d.cts +19 -1
- package/dist/node/node.d.cts.map +1 -1
- package/dist/node/node.d.ts +19 -1
- package/dist/node/node.d.ts.map +1 -1
- package/dist/node/node.js +1 -1
- package/dist/node/node.js.map +1 -1
- package/package.json +8 -8
- package/src/__tests__/app-tool-messages.test.ts +463 -0
- package/src/__tests__/message-decoders.test.ts +101 -0
- package/src/__tests__/permission-summary.test.ts +18 -0
- package/src/__tests__/session-message-handler-observe.test.ts +6 -0
- package/src/__tests__/session-message-handler.test.ts +3 -2
- package/src/__tests__/session-resume-bridge.test.ts +66 -0
- package/src/__tests__/stdio-carrier.test.ts +85 -0
- package/src/app-tool-messages.ts +140 -0
- package/src/index.ts +7 -0
- package/src/message-decoders.ts +16 -0
- package/src/node/index.ts +2 -0
- package/src/node/stdio-carrier.ts +59 -0
- package/src/permission-summary.ts +18 -0
- package/src/protocol-session.ts +7 -1
- package/src/session-events.ts +1 -0
- package/src/session-message-handler.ts +37 -1
- package/src/session-resume-bridge.ts +15 -0
- package/src/wire-messages.ts +35 -0
- package/dist/browser/observer-messages-CEeisRaF.js +0 -2
- package/dist/browser/observer-messages-CEeisRaF.js.map +0 -1
- package/dist/browser/observer-messages-Dnff2Tdb.d.ts.map +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
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";
|
|
2
|
+
import { IToolAppView, IToolExecutionResult, TToolParameters, TUniversalMessagePart } from "@robota-sdk/agent-core";
|
|
2
3
|
import { IPersonalUsageReport, IPersonalUsageRequest, IUsageBySourceReport } from "@robota-sdk/agent-interface-analytics";
|
|
3
4
|
import { ICommandListEntry, ICommandResult, ICommandSkillListEntry } from "@robota-sdk/agent-interface-command";
|
|
4
5
|
import { IBackgroundJobGroupState, IBackgroundTaskInput, IBackgroundTaskListFilter, IBackgroundTaskLogCursor, IBackgroundTaskLogPage, IBackgroundTaskState, IExecutionDetailCursor, IExecutionDetailPage, IExecutionWorkspaceSnapshot, TBackgroundJobGroupEvent, TBackgroundTaskEvent } from "@robota-sdk/agent-interface-execution";
|
|
@@ -115,6 +116,16 @@ type TClientMessage = {
|
|
|
115
116
|
} | {
|
|
116
117
|
type: 'project-memory';
|
|
117
118
|
requestId: string;
|
|
119
|
+
} | {
|
|
120
|
+
type: 'call-app-tool';
|
|
121
|
+
requestId: string;
|
|
122
|
+
viewId: string;
|
|
123
|
+
name: string;
|
|
124
|
+
arguments: TToolParameters;
|
|
125
|
+
} | {
|
|
126
|
+
type: 'read-app-view';
|
|
127
|
+
requestId: string;
|
|
128
|
+
viewId: string;
|
|
118
129
|
} | {
|
|
119
130
|
type: 'get-background-tasks';
|
|
120
131
|
filter?: IBackgroundTaskListFilter;
|
|
@@ -364,6 +375,17 @@ type TServerMessage = {
|
|
|
364
375
|
type: 'project_memory';
|
|
365
376
|
requestId: string;
|
|
366
377
|
result: TProjectMemoryRead;
|
|
378
|
+
} | {
|
|
379
|
+
type: 'app_tool_result';
|
|
380
|
+
requestId: string;
|
|
381
|
+
success: boolean;
|
|
382
|
+
data?: IToolExecutionResult['result'];
|
|
383
|
+
parts?: TUniversalMessagePart[];
|
|
384
|
+
error?: string;
|
|
385
|
+
} | {
|
|
386
|
+
type: 'app_view';
|
|
387
|
+
requestId: string;
|
|
388
|
+
view: IToolAppView;
|
|
367
389
|
} | {
|
|
368
390
|
type: 'background_task_event';
|
|
369
391
|
event: TBackgroundTaskEvent;
|
|
@@ -468,4 +490,4 @@ declare function decodeFrame<TMessage>(data: string, decode: (value: unknown) =>
|
|
|
468
490
|
declare function isObserverMessageType(type: string): boolean;
|
|
469
491
|
//#endregion
|
|
470
492
|
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 };
|
|
471
|
-
//# sourceMappingURL=observer-messages-
|
|
493
|
+
//# sourceMappingURL=observer-messages-DoWb6RNv.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observer-messages-DoWb6RNv.d.ts","names":[],"sources":["../../src/wire-messages.ts","../../src/message-decoders.ts","../../src/observer-messages.ts"],"mappings":"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"}
|
|
@@ -0,0 +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
|
|
@@ -0,0 +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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"}
|
package/dist/node/index.cjs
CHANGED
|
@@ -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,t,n){if(n.type===`get-background-tasks`){t({type:`background_tasks`,tasks:e.listBackgroundTasks(n.filter)});return}if(n.type===`get-background-task`){i(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`){o(e,t,n);return}if(n.type===`wait-background-job-group`){s(e,t,n);return}a(e,t,n)}function r(e,t,n){if(!n.taskId){t({type:`protocol_error`,message:`taskId is required`});return}if(n.type===`cancel-background-task`){l(t,`cancel`,n.taskId,e.cancelBackgroundTask(n.taskId,n.reason));return}if(n.type===`close-background-task`){l(t,`close`,n.taskId,e.closeBackgroundTask(n.taskId));return}c(e,t,n)}function i(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 a(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 o(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 s(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 c(e,t,n){if(!n.input){t({type:`protocol_error`,message:`input is required`});return}l(t,`send`,n.taskId,e.sendBackgroundTask(n.taskId,n.input))}function l(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 u(e){return e.type===`stop-waiting-loop`}function d(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:f(e)}}))}function f(e){return e instanceof Error?e.message:String(e)}function p(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const m=e=>typeof e==`string`,h=e=>typeof e==`string`&&e.length>0,g=e=>typeof e==`boolean`,_=e=>typeof e==`number`&&Number.isFinite(e),v=e=>Number.isSafeInteger(e)&&e>=0,y=e=>t=>t===void 0||e(t),b=e=>Array.isArray(e)&&e.every(p),x=e=>e===null||p(e),S=e=>t=>typeof t==`string`&&e.includes(t),C={user:!0,"agent-wakeup":!0,peer:!0,external:!0},w=e=>p(e)&&m(e.id)&&m(e.timestamp)&&m(e.category)&&m(e.type),T=e=>Array.isArray(e)&&e.every(w),E=e=>p(e)&&m(e.name)&&m(e.description)&&m(e.definedIn),D=e=>Array.isArray(e)&&e.every(E),O=[`agent`,`process`,`scheduled`],k=[`foreground`,`background`],A=[`queued`,`running`,`waiting_permission`,`sleeping`,`paused`,`completed`,`failed`,`cancelled`],ee=[`cancel`,`close`,`send`],te=e=>p(e)&&y(S(O))(e.kind)&&y(S(A))(e.status)&&y(S(k))(e.mode)&&y(g)(e.includeClosed),ne=e=>p(e)&&y(m)(e.prompt)&&y(m)(e.stdin),re=e=>p(e)&&_(e.offset),ie=e=>p(e)&&v(e.offset),ae=e=>g(e)||e===`allow-session`||e===`allow-project`,oe=e=>p(e)&&(e.type===`answer`&&Array.isArray(e.values)&&e.values.every(m)&&y(m)(e.text)||e.type===`cancelled`&&e.values===void 0&&e.text===void 0),j={language:{language:h},outputStyle:{styleId:h},preset:{presetId:h},permissionMode:{mode:h},sandbox:{enabled:g},removePermissionRule:{scope:h,kind:S([`allow`,`deny`,`ask`]),pattern:h},mcpServerEnabled:{serverId:h,enabled:g},reloadMcpServers:{},pluginEnabled:{pluginId:h,enabled:g},reloadPlugins:{},installPlugin:{pluginId:h},uninstallPlugin:{pluginId:h},providerProfile:{profileName:h},providerModel:{profileName:h,modelId:h},deleteProviderProfile:{profileName:h}},se=e=>{if(!p(e)||!m(e.field))return!1;let t=e.field;if(!Object.prototype.hasOwnProperty.call(j,t))return!1;let n=j[t];return Object.entries(n).every(([t,n])=>n(e[t]))},ce={none:{},several:{message:m},stopped:{loopId:h,message:y(m)},failed:{loopId:y(h),message:m}},le=e=>{if(!p(e)||!m(e.kind))return!1;let t=e.kind;if(!Object.prototype.hasOwnProperty.call(ce,t))return!1;let n=ce[t];return Object.entries(n).every(([t,n])=>n(e[t]))};function M(e){return t=>{if(!p(t)||!m(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 ue=[`Added`,`Modified`,`Deleted`,`Renamed`,`Copied`,`Untracked`,`Conflicted`],de=e=>p(e)&&h(e.path)&&S(ue)(e.status)&&y(h)(e.renamedFrom)&&y(_)(e.added)&&y(_)(e.removed),fe=M({status:{branch:y(m),unborn:g,files:e=>Array.isArray(e)&&e.every(de),truncated:g},"not-a-repository":{},failed:{message:m}}),pe=[`add`,`remove`,`context`,`hunk`],me=e=>p(e)&&S(pe)(e.type)&&m(e.text)&&_(e.lineNumber),he=M({diff:{diffLines:e=>Array.isArray(e)&&e.every(me),truncated:g},"not-a-repository":{},"outside-workspace":{},failed:{message:m}}),ge=M({memory:{content:m,path:h,truncated:g},unavailable:{message:m}}),_e={submit:{prompt:h},command:{name:h,args:y(m),requestId:y(h)},abort:{},"cancel-queue":{},"get-messages":{},"get-history":{fromIndex:y(v)},"get-prompts":{},"get-context":{},"get-commands":{},"get-status":{},"list-models":{requestId:h},"get-agent-definitions":{requestId:h},"list-sessions":{requestId:h},"new-session":{requestId:y(h)},"switch-session":{sessionId:h,requestId:y(h)},"rename-session":{sessionId:h,name:h,requestId:h},"delete-session":{sessionId:h,requestId:h},"get-usage-report":{},"get-personal-usage-report":{requestId:h,period:S([`7d`,`30d`]),timezone:h},"get-stored-session-usage-report":{requestId:h,sessionId:h},"get-executing":{},"get-pending":{},"get-execution-workspace":{},"read-execution-detail":{requestId:h,entryId:h,cursor:y(ie)},"stop-waiting-loop":{requestId:h},"project-status":{requestId:h},"project-diff":{requestId:h,path:h},"project-memory":{requestId:h},"get-background-tasks":{filter:y(te)},"get-background-task":{taskId:h},"get-background-job-groups":{},"get-background-job-group":{groupId:h},"wait-background-job-group":{groupId:h},"cancel-background-task":{taskId:h,reason:y(m)},"close-background-task":{taskId:h},"send-background-task":{taskId:h,input:ne},"read-background-task-log":{taskId:h,cursor:y(re)},"permission-response":{id:h,result:ae},"ask-response":{id:h,response:oe},resume:{lastSeq:_},ack:{seq:_},"get-settings":{requestId:h},"update-settings":{requestId:h,patch:se}},N={driverId:y(m)},ve={text_delta:{delta:m,...N},user_message:{content:m,...N},tool_start:{state:p,...N},tool_end:{state:p,...N},thinking:{isThinking:g,...N},complete:{result:p,...N},interrupted:{result:p,...N},error:{message:m,code:y(S([`auth`,`rate_limit`,`model_unavailable`,`network`,`provider`])),provider:y(m),retryAfterSeconds:y(_),model:y(m),...N},command_result:{name:m,message:m,success:g,requestId:y(m)},messages:{messages:b,display:y(b),...N},history:{startIndex:v,total:v,entries:T},context:{state:p},history_changed:{},turn_source:{source:S(Object.keys(C))},commands:{commands:b,skills:b},session_status:{status:p},model_list:{requestId:h,groups:b,currentProfile:y(m),currentModel:m},agent_definitions:{requestId:h,agents:D,current:h},sessions:{requestId:h,listing:p},sessions_error:{requestId:h,code:S([`not_available`,`list_failed`]),message:m},session_switched:{event:p},session_change_failed:{code:S(e.SESSION_CHANGE_REFUSAL_CODES),message:m,requestId:y(m)},session_renamed_in_list:{requestId:h,sessionId:m,name:m},session_rename_failed:{requestId:h,message:m},session_deleted:{requestId:h,sessionId:m},session_delete_failed:{requestId:h,code:S(e.SESSION_DELETE_REFUSAL_CODES),message:m},usage_report:{report:p},personal_usage_report:{requestId:h,report:p},personal_usage_report_error:{requestId:h,code:S([`not_available`,`report_failed`]),message:m},stored_session_usage_report:{requestId:h,sessionId:h,report:p},stored_session_usage_report_error:{requestId:h,sessionId:h,code:S([`not_available`,`report_failed`]),message:m},executing:{executing:g},pending:{pending:e=>e===null||m(e),pendingCount:y(v)},execution_workspace_event:{snapshot:p},execution_detail:{requestId:h,page:p},execution_detail_error:{requestId:h,message:m},waiting_loop_stop:{requestId:h,outcome:le},project_status:{requestId:h,result:fe},project_diff:{requestId:h,result:he},project_memory:{requestId:h,result:ge},background_task_event:{event:p},background_job_group_event:{event:p},plan_event:{event:p},context_file_refreshed:{event:p},branch_event:{event:p},background_tasks:{tasks:b},background_task:{taskId:m,task:x},background_job_groups:{groups:b},background_job_group:{groupId:m,group:x},background_task_log:{taskId:m,page:p},permission_request:{event:p},ask_request:{event:p},prompt_resolved:{event:p},ui_intent:{event:p},session_renamed:{event:p},history_cleared:{},background_task_control_result:{action:S(ee),taskId:m,success:g,message:y(m)},protocol_error:{message:m,requestId:y(m)},resume_gap:{},settings:{requestId:h,settings:p},settings_error:{requestId:h,code:S([`not_available`,`invalid`,`refused`,`update_failed`]),message:m}};function ye(e,t,n){if(!p(e))return{ok:!1,reason:`message must be a JSON object`};let r=e.type;if(!m(r))return{ok:!1,reason:`message type must be a string`};let i=Object.prototype.hasOwnProperty.call(t,r)?t[r]:void 0;if(i===void 0)return{ok:!1,reason:`Unknown message type: ${r}`};for(let[t,r]of Object.entries(i))if(!r(e[t]))return{ok:!1,reason:n(t)};return{ok:!0,message:e}}function P(e){return ye(e,_e,e=>e===`prompt`?`prompt must be a non-empty string`:`${e} has an invalid shape`)}function be(e){return ye(e,ve,e=>`${e} has an invalid shape`)}function xe(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 Se(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ce(e){return typeof e==`string`&&e.length>0?e:void 0}function we(e){if(!(new TextEncoder().encode(e).byteLength>4194304))try{let t=JSON.parse(e);if(!Se(t))return;let n=Ce(t.requestId);if(!n)return;if(t.type===`get-personal-usage-report`)return{type:`personal`,requestId:n};let r=Ce(t.sessionId);return t.type===`get-stored-session-usage-report`&&r?{type:`stored-session`,requestId:n,sessionId:r}:void 0}catch{return}}function Te(e,t,n,r){return n.type===`get-personal-usage-report`?(Oe(t,n,r.personalUsageReporter),!0):n.type===`get-stored-session-usage-report`?(De(t,n,r.storedSessionUsageReporter),!0):n.type===`get-usage-report`?(Ee(e,t,r.usageReporter),!0):!1}function Ee(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:L(e)}))}catch(e){t({type:`protocol_error`,message:L(e instanceof Error?e:String(e))})}}function De(e,t,n){if(!n){F(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=>F(e,t,`report_failed`,L(n)))}catch(n){F(e,t,`report_failed`,L(n instanceof Error?n:String(n)))}}function F(e,t,n,r){e({type:`stored_session_usage_report_error`,requestId:t.requestId,sessionId:t.sessionId,code:n,message:r})}function Oe(e,t,n){if(!n){I(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=>I(e,t.requestId,`report_failed`,L(n)))}catch(n){I(e,t.requestId,`report_failed`,L(n instanceof Error?n:String(n)))}}function I(e,t,n,r){e({type:`personal_usage_report_error`,requestId:t,code:n,message:r})}function L(e){return e instanceof Error?e.message:String(e)}function ke(e,t){let n=xe(e,P);if(n.ok)return n.message;let r=we(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 Ae=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 je(e){return Ae.has(e)}function Me(e){return e.type===`project-status`||e.type===`project-diff`||e.type===`project-memory`}function R(e,t){e({type:`protocol_error`,message:`This host does not support the Project panel.`,requestId:t})}function Ne(e,t,n){let{requestId:r}=n;if(n.type===`project-status`){if(!e.readProjectStatus)return R(t,r);e.readProjectStatus().then(e=>t({type:`project_status`,requestId:r,result:e}),e=>t({type:`project_status`,requestId:r,result:{kind:`failed`,message:e instanceof Error?e.message:String(e)}}))}else if(n.type===`project-diff`){if(!e.readProjectDiff)return R(t,r);e.readProjectDiff(n.path).then(e=>t({type:`project_diff`,requestId:r,result:e}),e=>t({type:`project_diff`,requestId:r,result:{kind:`failed`,message:e instanceof Error?e.message:String(e)}}))}else{if(!e.readProjectMemory)return R(t,r);e.readProjectMemory().then(e=>t({type:`project_memory`,requestId:r,result:e}),e=>t({type:`project_memory`,requestId:r,result:{kind:`unavailable`,message:e instanceof Error?e.message:String(e)}}))}}function Pe(e){return e.type===`list-sessions`||e.type===`new-session`||e.type===`switch-session`}function Fe(e){return e.type===`rename-session`}function Ie(e){return e.type===`delete-session`}function Le(t,n,r){if(n.type===`list-sessions`){Re(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:z(n),...i}))}function Re(e,t,n){if(!n){e({type:`sessions_error`,requestId:t,code:`not_available`,message:`Session listing is not available on this host.`});return}try{e({type:`sessions`,requestId:t,listing:n.listSessions()})}catch(n){e({type:`sessions_error`,requestId:t,code:`list_failed`,message:z(n instanceof Error?n:String(n))})}}function z(e){return e instanceof Error?e.message:String(e)}function ze(e,t,n){if(!n){e({type:`session_rename_failed`,requestId:t.requestId,message:`Sessions cannot be renamed on this host.`});return}n.renameSession(t.sessionId,t.name).then(()=>e({type:`session_renamed_in_list`,requestId:t.requestId,sessionId:t.sessionId,name:t.name}),n=>e({type:`session_rename_failed`,requestId:t.requestId,message:z(n)}))}function Be(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:z(r)}))}const B=new WeakMap;function Ve(e){let t=B.get(e);t===void 0&&(t={frames:new Map,holders:0},B.set(e,t));let n=t;n.holders+=1;let r=!1;return{record:e=>{r||n.frames.set(e.event.id,e)},forget:e=>{n.frames.delete(e)},clear:()=>{n.frames.clear()},release:()=>{r||(r=!0,--n.holders,n.holders===0&&B.get(e)===n&&B.delete(e))}}}function He(e){return[...B.get(e)?.frames.values()??[]]}function Ue(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 We(e){let n;for(let r of Ue(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 Ge={text_delta:`forwarded`,tool_start:`forwarded`,tool_end:`forwarded`,thinking:`forwarded`,complete:`forwarded`,error:`forwarded`,context_update:`forwarded`,compact:`forwarded`,interrupted:`forwarded`,skill_activation:`forwarded`,background_task_event:`forwarded`,background_job_group_event:`forwarded`,execution_workspace_event:`forwarded`,user_message:`forwarded`,turn_source:`forwarded`,context_file_refreshed:`forwarded`,memory_event:`forwarded`,goal_event:`non-surface`,plan_event:`forwarded`,branch_event:`forwarded`,permission_request:`forwarded`,ask_request:`forwarded`,prompt_resolved:`forwarded`,ui_intent:`requester-routed`,session_renamed:`forwarded`,history_cleared:`forwarded`,session_switched:`forwarded`,status_changed:`forwarded`};function V(e,t,n={}){let r=()=>{let t=e.getActiveDriverId();return t?{driverId:t}:{}},i=e=>t({type:`user_message`,content:e,...r()}),a=e=>t({type:`text_delta`,delta:e,...r()}),o=e=>t({type:`tool_start`,state:e,...r()}),s=e=>t({type:`tool_end`,state:e,...r()}),c=e=>t({type:`thinking`,isThinking:e,...r()}),l=e=>t({type:`complete`,result:H(e),...r()}),u=e=>t({type:`interrupted`,result:H(e),...r()}),d=e=>t({type:`error`,message:e.message,...We(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?Ve(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 Ke=new TextEncoder;function qe(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 Je(e,t,n){if(n.type===`get-messages`)t({type:`messages`,messages:e.getMessages(),display:e.getMessagesDisplay()});else if(n.type===`get-history`)t(Xe(e,n.fromIndex??0));else if(n.type===`get-prompts`)for(let n of He(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`?Ye(e,t,n):t(U(e))}function Ye(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 Xe(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=Ze(n[e]),r=Ke.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 Ze(e){return{...e,timestamp:Qe(e.timestamp)}}function Qe(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 $e(e){let t=e.role??`drive`,n=V(e.session,e.deliver,{getSurfaceDriverId:()=>e.driverId,receivePrompts:t===`drive`});return{onMessage:et(e.session,e.deliver,e.driverId,{personalUsageReporter:e.personalUsageReporter,usageReporter:e.usageReporter,storedSessionUsageReporter:e.storedSessionUsageReporter},e.surface,t,e.sessionDirectory,e.settingsReporter,e.commandSurfaceLocality),cleanup:n}}function et(e,t,n,r=tt,i,a=`drive`,o,s,c){return l=>{let u=ke(l,t);if(u){if(a===`observe`&&!je(u.type)){t({type:`protocol_error`,message:`Not permitted for an observer: ${u.type}`});return}nt(e,t,u,n,r,i,o,s,c)}}}const tt={personalUsageReporter:void 0,usageReporter:void 0,storedSessionUsageReporter:void 0};function nt(e,t,i,a,o=tt,s,c,l,f){if(Te(e,t,i,o))return;if(Pe(i)){Le(t,i,c);return}if(W(i)){G(e,t,i,l,f);return}if(Fe(i)){ze(t,i,c);return}if(Ie(i)){Be(t,i,c);return}if(rt(i)){ct(e,t,i,a,s,f);return}if(u(i)){d(e,t,i);return}if(qe(i)){Je(e,t,i);return}if(Me(i)){Ne(e,t,i);return}if(it(i)){n(e,t,i);return}if(at(i)){r(e,t,i);return}if(ot(i)){st(e,i,a);return}let p=i.type;t({type:`protocol_error`,message:`Unknown message type: ${p}`})}function rt(e){return e.type===`submit`||e.type===`command`||e.type===`abort`||e.type===`cancel-queue`}function it(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 at(e){return e.type===`cancel-background-task`||e.type===`close-background-task`||e.type===`send-background-task`}function ot(e){return e.type===`permission-response`||e.type===`ask-response`}function st(e,t,n){t.type===`permission-response`?e.resolvePermission(t.id,t.result,n):e.resolveAsk(t.id,t.response,n)}function ct(e,t,n,r,i,a){if(n.type===`submit`){if(typeof n.prompt!=`string`||n.prompt.length===0){t({type:`protocol_error`,message:`prompt must be a non-empty string`});return}let a={...r?{driverId:r}:{},...i?{surface:i}:{}};e.submit(n.prompt,void 0,void 0,Object.keys(a).length>0?a:void 0).then(()=>t(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 lt(e,t=J){return e!==void 0&&e>t}const ut=120*1e3;function dt(e=ut,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=dt()){let a=!1,o=t=>{if(a)return;let o=n?.();if(lt(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 ft=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,pt=new TextDecoder,Z=X.encode(`RBF`),mt=4294967295;function ht(e,t){let n=X.encode(e);if(n.byteLength===0||n.byteLength>255)throw Error(`channel name must be 1..255 UTF-8 bytes (got ${n.byteLength})`);if(!Number.isInteger(t)||t<0||t>mt)throw Error(`seq must be an integer in 0..${mt} (got ${t})`);return n}function gt(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 _t(e){let t=ht(e.channel,e.seq),n=new Uint8Array(6+t.byteLength+4+e.payload.byteLength),r=gt(n,1,t,e.seq);return n.set(e.payload,r),n}function vt(e){let t=ht(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=gt(r,2,t,e.seq);return r.set(n,i),r}function yt(e){return e.byteLength<Z.length?!1:Z.every((t,n)=>e[n]===t)}function bt(e){let t=pt.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 xt(e){if(!yt(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=pt.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=bt(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 St=class{session;buffer;driverId;reporters;surface;commandSurfaceLocality;unsubscribe;onDeliveryError;outbound;emitBoundary;disposed=!1;holding=!1;constructor(e){this.session=e.session,this.buffer=new ft(e.buffer),this.driverId=e.driverId,this.surface=e.surface,this.commandSurfaceLocality=e.commandSurfaceLocality,this.reporters={personalUsageReporter:e.personalUsageReporter,usageReporter:e.usageReporter,storedSessionUsageReporter:e.storedSessionUsageReporter},this.emitBoundary=Y(e=>this.emit(e),(e,t)=>this.reportDeliveryError(e,t)),this.unsubscribe=V(this.session,this.emitBoundary,{getSurfaceDriverId:()=>this.driverId})}attach(e,t){this.disposed||(this.onDeliveryError=t.onDeliveryError,this.outbound=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=ke(e,this.emitBoundary);if(t){if(t.type===`resume`){this.replay(t.lastSeq);return}if(t.type===`ack`){this.buffer.ackThrough(t.seq);return}nt(this.session,this.emitBoundary,t,this.driverId,this.reporters,this.surface,void 0,void 0,this.commandSurfaceLocality)}}dispose(){this.disposed||(this.disposed=!0,this.detach(),this.unsubscribe())}get lastSeq(){return this.buffer.lastSeq}emit(e){if(this.disposed)return;let t=this.buffer.append(e);this.holding||this.deliverFrame({...e,seq:t})}replay(e){let t=this.buffer.tailAfter(e);if(t.kind===`overrun`){this.deliverFrame({type:`resume_gap`}),this.holding=!1;return}for(let e of t.frames)this.deliverFrame({...e.message,seq:e.seq});this.holding=!1}deliverFrame(e){this.outbound?.(e)}reportDeliveryError(e,t){let n=this.onDeliveryError;this.detach();try{n?.(e,t)}catch{}}};function Ct(){return{origins:new Map}}function wt(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 Tt(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 Et(e,t){e.origins.delete(t)}const Q=16*1024,Dt=32768;function $(e){let t=``;for(let n=0;n<e.length;n+=Dt)t+=String.fromCharCode(...e.subarray(n,n+Dt));return btoa(t)}function Ot(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 kt(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 At(e,t,n=Q){if(!Number.isInteger(n)||n<1)throw Error(`handoff chunking: maxChunkBytes must be a positive integer, got ${n}. A zero or negative budget produces an infinite sequence of empty chunks, which presents as a hang rather than as the configuration error it is.`);let r=new TextEncoder().encode(t),i=Math.max(1,Math.ceil(r.byteLength/n)),a=[];for(let t=0;t<i;t+=1){let o=r.subarray(t*n,(t+1)*n);a.push({handoffId:e,index:t,total:i,data:$(o)})}return a}var jt=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=Ot(e.data);if(n===void 0||$(n)!==e.data)return t(`undecodable`);this.declaredTotal=e.total;let r=this.chunks.get(e.index);return r===void 0?(this.chunks.set(e.index,n),this.chunks.size<e.total?{outcome:`accepted`,received:this.chunks.size,expected:e.total}:{outcome:`complete`,serialized:this.reassemble(e.total),received:this.chunks.size,expected:e.total}):kt(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 Mt(e,t=Q){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=Q,exports.DEFAULT_MAX_PENDING_BYTES=J,exports.DEFAULT_MAX_PENDING_MS=ut,exports.HandoffChunkAssembler=jt,exports.MAX_INBOUND_FRAME_BYTES=4194304,exports.PROTOCOL_SESSION_EVENT_CLASSIFICATION=Ge,exports.ResumeBuffer=ft,exports.SessionResumeBridge=St,exports.acknowledgePeerMessage=Tt,exports.admitPeerMessage=wt,exports.chunkCountFor=Mt,exports.chunkHandoffPayload=At,exports.createOutboundDelivery=Y,exports.createPeerMessageLedger=Ct,exports.createPendingStallClock=dt,exports.createSessionMessageHandler=$e,exports.decodeChannelFrame=xt,exports.decodeClientMessage=P,exports.decodeFrame=xe,exports.decodeServerMessage=be,exports.encodeBinaryFrame=_t,exports.encodeChannelEventFrame=vt,exports.forgetPeerOrigin=Et,exports.handleSettingsMessage=G,exports.isChannelFrame=yt,exports.isObserverMessageType=je,exports.isOverPendingBudget=lt,exports.isSettingsMessage=W;
|
|
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;
|
package/dist/node/index.d.cts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { IToolAppView, IToolExecutionResult, TToolArgs, TToolParameters, TUniversalMessagePart } from "@robota-sdk/agent-core";
|
|
1
2
|
import { IPersonalUsageReport, IPersonalUsageRequest, IUsageBySourceReport, TUsageSurface } from "@robota-sdk/agent-interface-analytics";
|
|
2
3
|
import { ICommandListEntry, ICommandResult, ICommandSkillListEntry, TCommandSurfaceLocality } from "@robota-sdk/agent-interface-command";
|
|
3
4
|
import { IBackgroundJobGroupState, IBackgroundTaskInput, IBackgroundTaskListFilter, IBackgroundTaskLogCursor, IBackgroundTaskLogPage, IBackgroundTaskState, IExecutionDetailCursor, IExecutionDetailPage, IExecutionWorkspaceSnapshot, TBackgroundJobGroupEvent, TBackgroundTaskEvent } from "@robota-sdk/agent-interface-execution";
|
|
4
|
-
import { IAskRequestEvent, IBranchEvent, IContextFileRefreshedEvent, IExecutionResult, IModelListGroup, IPermissionRequestEvent, IPlanApprovalEvent, IPromptResolvedEvent, ISessionAgentJobs, ISessionBackgroundGroups, ISessionBackgroundTasks, ISessionCommands, ISessionConversationRead, ISessionDirectory, ISessionDriverAttribution, ISessionEvents, ISessionExecutionDetail, ISessionExecutionState, ISessionExecutionWorkspace, ISessionListing, ISessionProjectRead, ISessionPromptResolution, ISessionRenamedEvent, ISessionSelfPacedLoopControl, ISessionStatusRead, ISessionStatusSnapshot, ISessionSwitchedEvent, 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, 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
6
|
import { IBinaryFrame, IChannelEventFrame, TActionResponse, TChannelReceiveResult } from "@robota-sdk/agent-interface-transport";
|
|
6
7
|
import { IHandoffIntegrity, IPeerMessage, IPeerMessageAck, TPeerDeliveryState } from "@robota-sdk/agent-interface-session-mobility";
|
|
7
8
|
//#region src/wire-messages.d.ts
|
|
@@ -116,6 +117,16 @@ type TClientMessage = {
|
|
|
116
117
|
} | {
|
|
117
118
|
type: 'project-memory';
|
|
118
119
|
requestId: string;
|
|
120
|
+
} | {
|
|
121
|
+
type: 'call-app-tool';
|
|
122
|
+
requestId: string;
|
|
123
|
+
viewId: string;
|
|
124
|
+
name: string;
|
|
125
|
+
arguments: TToolParameters;
|
|
126
|
+
} | {
|
|
127
|
+
type: 'read-app-view';
|
|
128
|
+
requestId: string;
|
|
129
|
+
viewId: string;
|
|
119
130
|
} | {
|
|
120
131
|
type: 'get-background-tasks';
|
|
121
132
|
filter?: IBackgroundTaskListFilter;
|
|
@@ -365,6 +376,17 @@ type TServerMessage = {
|
|
|
365
376
|
type: 'project_memory';
|
|
366
377
|
requestId: string;
|
|
367
378
|
result: TProjectMemoryRead;
|
|
379
|
+
} | {
|
|
380
|
+
type: 'app_tool_result';
|
|
381
|
+
requestId: string;
|
|
382
|
+
success: boolean;
|
|
383
|
+
data?: IToolExecutionResult['result'];
|
|
384
|
+
parts?: TUniversalMessagePart[];
|
|
385
|
+
error?: string;
|
|
386
|
+
} | {
|
|
387
|
+
type: 'app_view';
|
|
388
|
+
requestId: string;
|
|
389
|
+
view: IToolAppView;
|
|
368
390
|
} | {
|
|
369
391
|
type: 'background_task_event';
|
|
370
392
|
event: TBackgroundTaskEvent;
|
|
@@ -538,7 +560,7 @@ declare function createOutboundDelivery(send: (message: TServerMessage) => void,
|
|
|
538
560
|
//#endregion
|
|
539
561
|
//#region src/protocol-session.d.ts
|
|
540
562
|
/** Session roles required by the shared WebSocket/WebRTC protocol. */
|
|
541
|
-
interface IProtocolSession extends ISessionTurnSubmission, ISessionTurnControl, ISessionCommands, ISessionStatusRead, ISessionEvents, ISessionPromptResolution, ISessionConversationRead, ISessionExecutionState, ISessionDriverAttribution, ISessionBackgroundTasks, ISessionBackgroundGroups, ISessionExecutionWorkspace, ISessionExecutionDetail, ISessionSelfPacedLoopControl, ISessionAgentJobs {}
|
|
563
|
+
interface IProtocolSession extends ISessionTurnSubmission, ISessionTurnControl, ISessionCommands, ISessionStatusRead, ISessionEvents, ISessionPromptResolution, ISessionConversationRead, ISessionExecutionState, ISessionDriverAttribution, ISessionBackgroundTasks, ISessionBackgroundGroups, ISessionExecutionWorkspace, ISessionExecutionDetail, ISessionSelfPacedLoopControl, ISessionAgentJobs, ISessionRuntimeTools, ISessionToolAppViews {}
|
|
542
564
|
/**
|
|
543
565
|
* #3282 §4c: a protocol session that ALSO answers the Project panel's reads. `Partial` (not a fourth
|
|
544
566
|
* mandatory role on {@link IProtocolSession} itself) deliberately: every existing test double and
|
|
@@ -596,6 +618,7 @@ declare const PROTOCOL_SESSION_EVENT_CLASSIFICATION: {
|
|
|
596
618
|
readonly tool_start: "forwarded";
|
|
597
619
|
readonly tool_end: "forwarded";
|
|
598
620
|
readonly thinking: "forwarded";
|
|
621
|
+
readonly thinking_delta: "non-surface";
|
|
599
622
|
readonly complete: "forwarded";
|
|
600
623
|
readonly error: "forwarded";
|
|
601
624
|
readonly context_update: "forwarded";
|
|
@@ -667,6 +690,13 @@ interface ISessionMessageHandlerOptions {
|
|
|
667
690
|
* command that runs code from outside the session (installing a plugin) can refuse a remote device.
|
|
668
691
|
*/
|
|
669
692
|
commandSurfaceLocality?: TCommandSurfaceLocality;
|
|
693
|
+
/**
|
|
694
|
+
* The most bytes one frame answering an app tool call or view read may take, for a carrier whose
|
|
695
|
+
* channel carries less than the inbound limit (a WebRTC data channel). An answer over it is
|
|
696
|
+
* replaced by a `protocol_error` before it reaches any buffer. Defaults to the inbound limit less
|
|
697
|
+
* a margin for a carrier that stamps frames afterwards.
|
|
698
|
+
*/
|
|
699
|
+
maxFrameBytes?: number;
|
|
670
700
|
}
|
|
671
701
|
/**
|
|
672
702
|
* Create a carrier-neutral message handler for an IProtocolSession.
|
|
@@ -696,6 +726,14 @@ declare function createSessionMessageHandler(options: ISessionMessageHandlerOpti
|
|
|
696
726
|
/** Whether an observer may send a message of this type. */
|
|
697
727
|
declare function isObserverMessageType(type: string): boolean;
|
|
698
728
|
//#endregion
|
|
729
|
+
//#region src/session-query-messages.d.ts
|
|
730
|
+
/**
|
|
731
|
+
* #3189: the most serialized history one `history` frame carries. Well under the tightest outbound
|
|
732
|
+
* budget (an attached terminal's, 1 MiB), so a client reading page after page is never mistaken for
|
|
733
|
+
* one that stopped reading.
|
|
734
|
+
*/
|
|
735
|
+
declare const HISTORY_PAGE_MAX_BYTES: number;
|
|
736
|
+
//#endregion
|
|
699
737
|
//#region src/message-decoders.d.ts
|
|
700
738
|
type TMessageDecodeResult<TMessage> = {
|
|
701
739
|
readonly ok: true;
|
|
@@ -819,6 +857,8 @@ interface ISessionResumeBridgeOptions {
|
|
|
819
857
|
readonly storedSessionUsageReporter?: IUsageQueryReporters['storedSessionUsageReporter'];
|
|
820
858
|
/** #3282 §4 part b-2: this bridge is the reconnectable WebRTC path, so it is always `'remote'`. */
|
|
821
859
|
readonly commandSurfaceLocality?: TCommandSurfaceLocality;
|
|
860
|
+
/** See {@link ISessionMessageHandlerOptions.maxFrameBytes}: the channel's limit, not the inbound one. */
|
|
861
|
+
readonly maxFrameBytes?: number;
|
|
822
862
|
}
|
|
823
863
|
declare class SessionResumeBridge {
|
|
824
864
|
private readonly session;
|
|
@@ -827,6 +867,13 @@ declare class SessionResumeBridge {
|
|
|
827
867
|
private readonly reporters;
|
|
828
868
|
private readonly surface?;
|
|
829
869
|
private readonly commandSurfaceLocality?;
|
|
870
|
+
private readonly maxFrameBytes?;
|
|
871
|
+
/**
|
|
872
|
+
* Ends with the bridge, not with a channel: a channel drop keeps the session reconnectable, so work
|
|
873
|
+
* started for a hosted app view (a call waiting on its prompt) survives it and is cancelled only when
|
|
874
|
+
* the host gives up on the session.
|
|
875
|
+
*/
|
|
876
|
+
private readonly lifetime;
|
|
830
877
|
private readonly unsubscribe;
|
|
831
878
|
private onDeliveryError?;
|
|
832
879
|
/**
|
|
@@ -963,6 +1010,10 @@ declare function acknowledgePeerMessage(ledger: IPeerMessageLedger, originSessio
|
|
|
963
1010
|
/** Forget one origin — used when a peer disconnects and its sequence space is no longer meaningful. */
|
|
964
1011
|
declare function forgetPeerOrigin(ledger: IPeerMessageLedger, originSessionId: string): void;
|
|
965
1012
|
//#endregion
|
|
1013
|
+
//#region src/permission-summary.d.ts
|
|
1014
|
+
/** The call's identifying argument, or `undefined` when it has none worth showing. */
|
|
1015
|
+
declare function permissionSummaryArgument(toolArgs: TToolArgs): string | undefined;
|
|
1016
|
+
//#endregion
|
|
966
1017
|
//#region src/handoff-chunking.d.ts
|
|
967
1018
|
/**
|
|
968
1019
|
* One piece of a payload in flight.
|
|
@@ -1054,5 +1105,5 @@ declare class HandoffChunkAssembler {
|
|
|
1054
1105
|
*/
|
|
1055
1106
|
declare function chunkCountFor(integrity: IHandoffIntegrity, maxChunkBytes?: number): number;
|
|
1056
1107
|
//#endregion
|
|
1057
|
-
export { ATTACHED_SURFACE_MAX_PENDING_BYTES, CHANNEL_FRAME_MAGIC, CHANNEL_FRAME_VERSION, DEFAULT_MAX_CHUNK_BYTES, DEFAULT_MAX_PENDING_BYTES, DEFAULT_MAX_PENDING_MS, HandoffChunkAssembler, type IAttachOptions, type IBufferedFrame, type IChunkResult, type IHandoffChunk, type IPeerMessageLedger, type IPeerMessageRejection, type IPeerMessageVerdict, type IPendingStallClock, type IProtocolSession, type IResumeBufferOptions, type ISessionMessageHandlerOptions, type ISessionResumeBridgeOptions, type ISettingsReporter, type IWireAgentDefinitionSummary, type IWireHistoryEntry, MAX_INBOUND_FRAME_BYTES, PROTOCOL_SESSION_EVENT_CLASSIFICATION, ResumeBuffer, SessionResumeBridge, type TChunkOutcome, type TChunkRejection, type TClientMessage, type TDeliveryErrorHandler, type TMessageDecodeResult, type TOutboundDeliver, type TProtocolSessionEventClassification, type TResumeSink, type TResumeTail, type TSeqServerMessage, type TServerMessage, type TSessionSurfaceRole, type TSettingsUpdateOutcome, type TWireExecutionResult, acknowledgePeerMessage, admitPeerMessage, chunkCountFor, chunkHandoffPayload, createOutboundDelivery, createPeerMessageLedger, createPendingStallClock, createSessionMessageHandler, decodeChannelFrame, decodeClientMessage, decodeFrame, decodeServerMessage, encodeBinaryFrame, encodeChannelEventFrame, forgetPeerOrigin, handleSettingsMessage, isChannelFrame, isObserverMessageType, isOverPendingBudget, isSettingsMessage };
|
|
1108
|
+
export { ATTACHED_SURFACE_MAX_PENDING_BYTES, CHANNEL_FRAME_MAGIC, CHANNEL_FRAME_VERSION, DEFAULT_MAX_CHUNK_BYTES, DEFAULT_MAX_PENDING_BYTES, DEFAULT_MAX_PENDING_MS, HISTORY_PAGE_MAX_BYTES, HandoffChunkAssembler, type IAttachOptions, type IBufferedFrame, type IChunkResult, type IHandoffChunk, type IPeerMessageLedger, type IPeerMessageRejection, type IPeerMessageVerdict, type IPendingStallClock, type IProtocolSession, type IResumeBufferOptions, type ISessionMessageHandlerOptions, type ISessionResumeBridgeOptions, type ISettingsReporter, type IWireAgentDefinitionSummary, type IWireHistoryEntry, MAX_INBOUND_FRAME_BYTES, PROTOCOL_SESSION_EVENT_CLASSIFICATION, ResumeBuffer, SessionResumeBridge, type TChunkOutcome, type TChunkRejection, type TClientMessage, type TDeliveryErrorHandler, type TMessageDecodeResult, type TOutboundDeliver, type TProtocolSessionEventClassification, type TResumeSink, type TResumeTail, type TSeqServerMessage, type TServerMessage, type TSessionSurfaceRole, type TSettingsUpdateOutcome, type TWireExecutionResult, acknowledgePeerMessage, admitPeerMessage, chunkCountFor, chunkHandoffPayload, createOutboundDelivery, createPeerMessageLedger, createPendingStallClock, createSessionMessageHandler, decodeChannelFrame, decodeClientMessage, decodeFrame, decodeServerMessage, encodeBinaryFrame, encodeChannelEventFrame, forgetPeerOrigin, handleSettingsMessage, isChannelFrame, isObserverMessageType, isOverPendingBudget, isSettingsMessage, permissionSummaryArgument };
|
|
1058
1109
|
//# sourceMappingURL=index.d.cts.map
|
|
@@ -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/message-decoders.ts","../../src/resume-buffer.ts","../../src/channel-frames.ts","../../src/session-resume-bridge.ts","../../src/peer-message-ledger.ts","../../src/handoff-chunking.ts"],"mappings":"
|
|
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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"}
|