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

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