@camerontaylor/paseo-protocol 0.8.0-fork.1 → 0.9.0-beta.2.fork.1

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/dist/messages.js CHANGED
@@ -1,3 +1,9 @@
1
+ import { AgentProfileSchema, AgentSkillSelectionSchema } from "./agent-profile.js";
2
+ export { AgentProfileSchema, AgentSkillSelectionSchema, } from "./agent-profile.js";
3
+ import { PluginIdSchema, PluginRequirementsSchema, PluginSourceSchema } from "./plugin-config.js";
4
+ export { PluginIdSchema, PluginRequirementsSchema, DirectoryPluginSourceSchema, PluginSourceSchema, } from "./plugin-config.js";
5
+ import { TerminalProfileSchema } from "./terminal-profile.js";
6
+ export { TerminalProfileSchema } from "./terminal-profile.js";
1
7
  import { z } from "zod";
2
8
  import { TerminalActivitySchema } from "./terminal-activity.js";
3
9
  import { CLIENT_CAPS } from "./client-capabilities.js";
@@ -10,7 +16,7 @@ import { WORKSPACE_LABEL_COLORS } from "./workspace-labels.js";
10
16
  import { ChatCreateRequestSchema, ChatListRequestSchema, ChatInspectRequestSchema, ChatDeleteRequestSchema, ChatPostRequestSchema, ChatReadRequestSchema, ChatWaitRequestSchema, ChatCreateResponseSchema, ChatListResponseSchema, ChatInspectResponseSchema, ChatDeleteResponseSchema, ChatPostResponseSchema, ChatReadResponseSchema, ChatWaitResponseSchema, } from "./chat/rpc-schemas.js";
11
17
  import { ScheduleCreateRequestSchema, ScheduleListRequestSchema, ScheduleInspectRequestSchema, ScheduleLogsRequestSchema, SchedulePauseRequestSchema, ScheduleResumeRequestSchema, ScheduleDeleteRequestSchema, ScheduleRunOnceRequestSchema, ScheduleUpdateRequestSchema, ScheduleCreateResponseSchema, ScheduleListResponseSchema, ScheduleInspectResponseSchema, ScheduleLogsResponseSchema, SchedulePauseResponseSchema, ScheduleResumeResponseSchema, ScheduleDeleteResponseSchema, ScheduleRunOnceResponseSchema, ScheduleUpdateResponseSchema, } from "./schedule/rpc-schemas.js";
12
18
  import { LoopRunRequestSchema, LoopListRequestSchema, LoopInspectRequestSchema, LoopLogsRequestSchema, LoopStopRequestSchema, LoopRunResponseSchema, LoopListResponseSchema, LoopInspectResponseSchema, LoopLogsResponseSchema, LoopStopResponseSchema, } from "./loop/rpc-schemas.js";
13
- import { BrowserAutomationExecuteRequestSchema, BrowserAutomationExecuteResponseSchema, } from "./browser-automation/rpc-schemas.js";
19
+ import { BROWSER_AUTOMATION_COMMAND_NAMES, BrowserAutomationExecuteRequestSchema, BrowserAutomationExecuteResponseSchema, } from "./browser-automation/rpc-schemas.js";
14
20
  import { BrowserAutomationHostCapabilitySchema } from "./browser-automation/capabilities.js";
15
21
  import { PaseoConfigRawSchema, PaseoLifecycleCommandRawSchema, PaseoMetadataGenerationEntrySchema, PaseoMetadataGenerationSchema, PaseoScriptEntryRawSchema, PaseoWorktreeConfigRawSchema, PaseoConfigRevisionSchema, ProjectConfigRpcErrorSchema, } from "./paseo-config-schema.js";
16
22
  export { PaseoConfigRawSchema, PaseoLifecycleCommandRawSchema, PaseoMetadataGenerationEntrySchema, PaseoMetadataGenerationSchema, PaseoScriptEntryRawSchema, PaseoWorktreeConfigRawSchema, };
@@ -56,41 +62,6 @@ const MutableMetadataGenerationConfigSchema = z
56
62
  providers: z.array(MutableStructuredGenerationProviderSchema).default([]),
57
63
  })
58
64
  .passthrough();
59
- export const TerminalProfileSchema = z
60
- .object({
61
- id: z.string(),
62
- name: z.string(),
63
- command: z.string(),
64
- args: z.array(z.string()).optional(),
65
- icon: z.string().optional(),
66
- })
67
- .passthrough();
68
- /**
69
- * A named launch bundle: a provider plus the agent-config values a client would
70
- * otherwise set one control at a time. Field names mirror `AgentSessionConfig`
71
- * so applying a profile is a copy rather than a translation table.
72
- *
73
- * There is deliberately no system prompt here. `AgentSessionConfig.systemPrompt`
74
- * is creation-only, so a profile carrying one would apply when starting a new
75
- * agent and silently do nothing when applied to a running one.
76
- */
77
- export const AgentProfileSchema = z
78
- .object({
79
- id: z.string(),
80
- name: z.string(),
81
- /** A key into the client's icon registry, not a glyph. Unknown keys draw the default. */
82
- icon: z.string().optional(),
83
- /** An identity colour name shared with host badges. Unknown values draw unthemed. */
84
- color: z.string().optional(),
85
- provider: z.string(),
86
- model: z.string().optional(),
87
- modeId: z.string().optional(),
88
- thinkingOptionId: z.string().optional(),
89
- featureValues: z.record(z.string(), z.unknown()).optional(),
90
- /** Free text, surfaced to orchestrating agents by the `list_profiles` MCP tool. */
91
- notes: z.string().optional(),
92
- })
93
- .passthrough();
94
65
  const MutableBrowserToolsConfigSchema = z
95
66
  .object({
96
67
  enabled: z.boolean().default(false),
@@ -101,21 +72,6 @@ const MutableRelayConfigSchema = z
101
72
  enabled: z.boolean(),
102
73
  })
103
74
  .passthrough();
104
- export const PluginIdSchema = z.string().regex(/^[a-z][a-z0-9-]*$/);
105
- // Semver validation belongs at the manifest/runtime boundary, not on the wire.
106
- export const PluginRequirementsSchema = z.object({ paseo: z.string().optional() });
107
- export const DirectoryPluginSourceSchema = z
108
- .object({
109
- source: z.literal("directory"),
110
- path: z.string().min(1),
111
- enabled: z.boolean().optional(),
112
- })
113
- .strict();
114
- export const PluginSourceSchema = z.discriminatedUnion("source", [DirectoryPluginSourceSchema]);
115
- export const AgentSkillSelectionSchema = z.discriminatedUnion("mode", [
116
- z.object({ mode: z.literal("all") }).strict(),
117
- z.object({ mode: z.literal("custom"), skills: z.array(z.string()) }).strict(),
118
- ]);
119
75
  export const MutableDaemonConfigSchema = z
120
76
  .object({
121
77
  // COMPAT(relayConfig): added in v0.2.6, remove after 2027-01-31 when old daemons are unsupported.
@@ -842,7 +798,7 @@ const WorkspaceLabelSyncCursorSchema = z.object({
842
798
  export const WorkspaceLabelListRequestSchema = z.object({
843
799
  type: z.literal("workspace.label.list.request"),
844
800
  requestId: z.string(),
845
- subscribe: z.object({ subscriptionId: z.string() }),
801
+ subscribe: z.object({ subscriptionId: z.string().optional() }).optional(),
846
802
  sync: WorkspaceLabelSyncCursorSchema.optional(),
847
803
  });
848
804
  export const WorkspaceLabelAssignmentSetRequestSchema = z.object({
@@ -1127,9 +1083,8 @@ export const FetchAgentHistoryRequestMessageSchema = z.object({
1127
1083
  type: z.literal("fetch_agent_history_request"),
1128
1084
  requestId: z.string(),
1129
1085
  filter: AgentDirectoryFilterSchema.optional(),
1130
- // A ranked free-text query over agent title, workspace name, branch, and
1131
- // project name. Present only on history: agent subscriptions filter on
1132
- // structure, not on relevance. Ranking replaces `sort` when it is set.
1086
+ // A free-text filter over agent title, workspace name, branch, and project name.
1087
+ // Matching rows follow the requested sort and cursor pagination.
1133
1088
  search: z.string().optional(),
1134
1089
  sort: z
1135
1090
  .array(z.object({
@@ -1248,6 +1203,48 @@ export const PluginSourceInstallRequestSchema = z.object({
1248
1203
  // COMPAT(plugin-source-path): accepted for v0.7 clients; remove after 2027-09-01.
1249
1204
  pluginPath: z.string().min(1).optional(),
1250
1205
  });
1206
+ export const PluginSourceIdentitySchema = z.discriminatedUnion("kind", [
1207
+ z.object({ kind: z.literal("directory"), path: z.string() }),
1208
+ z.object({ kind: z.literal("git"), remote: z.string(), pluginPath: z.string() }),
1209
+ z.object({ kind: z.literal("npm"), packageName: z.string(), pluginPath: z.string() }),
1210
+ ]);
1211
+ export const PluginInstallationSchema = z.object({
1212
+ identity: PluginSourceIdentitySchema,
1213
+ currentRevision: z.string().optional(),
1214
+ });
1215
+ export const PluginUpdateTargetSchema = z.discriminatedUnion("kind", [
1216
+ z.object({ kind: z.literal("git"), commit: z.string().regex(/^[0-9a-f]{40,64}$/) }),
1217
+ z.object({
1218
+ kind: z.literal("npm"),
1219
+ version: z.string().min(1),
1220
+ resolved: z.string().url(),
1221
+ integrity: z.string().min(1),
1222
+ }),
1223
+ ]);
1224
+ export const PluginUpdateProposalSchema = z.object({
1225
+ id: PluginIdSchema,
1226
+ expected: z.object({
1227
+ identity: PluginSourceIdentitySchema,
1228
+ installationRoot: z.string(),
1229
+ revision: z.string(),
1230
+ }),
1231
+ target: PluginUpdateTargetSchema,
1232
+ });
1233
+ export const PluginUpdateSelectionSchema = z.discriminatedUnion("kind", [
1234
+ z.object({ kind: z.literal("git"), ref: z.string().min(1) }),
1235
+ z.object({ kind: z.literal("npm"), version: z.string().min(1) }),
1236
+ ]);
1237
+ export const PluginUpdatePreviewRequestSchema = z.object({
1238
+ type: z.literal("plugin.source.update.preview.request"),
1239
+ requestId: z.string(),
1240
+ pluginId: PluginIdSchema.optional(),
1241
+ target: PluginUpdateSelectionSchema.optional(),
1242
+ });
1243
+ export const PluginUpdateApplyRequestSchema = z.object({
1244
+ type: z.literal("plugin.source.update.apply.request"),
1245
+ requestId: z.string(),
1246
+ proposals: z.array(PluginUpdateProposalSchema).min(1),
1247
+ });
1251
1248
  export const PluginSourceStatusRequestSchema = z.object({
1252
1249
  type: z.literal("plugin.source.status.request"),
1253
1250
  requestId: z.string(),
@@ -1536,6 +1533,13 @@ export const FetchAgentTimelineRequestMessageSchema = z.object({
1536
1533
  // Allow the client to merge this bounded page outside its contiguous loaded range.
1537
1534
  mergeWindow: z.boolean().optional(),
1538
1535
  });
1536
+ export const AgentTimelineSearchRequestMessageSchema = z.object({
1537
+ type: z.literal("agent.timeline.search.request"),
1538
+ agentId: z.string(),
1539
+ requestId: z.string(),
1540
+ query: z.string(),
1541
+ cursor: z.number().int().nonnegative().optional(),
1542
+ });
1539
1543
  export const AgentTimelineListPromptsRequestMessageSchema = z.object({
1540
1544
  type: z.literal("agent.timeline.list_prompts.request"),
1541
1545
  agentId: z.string(),
@@ -1815,7 +1819,13 @@ export const CheckoutStatusRequestSchema = z.object({
1815
1819
  });
1816
1820
  export const SubscribeCheckoutDiffRequestSchema = z.object({
1817
1821
  type: z.literal("subscribe_checkout_diff_request"),
1818
- subscriptionId: z.string(),
1822
+ subscriptionId: z.string().optional(),
1823
+ cwd: z.string(),
1824
+ compare: CheckoutDiffCompareSchema,
1825
+ requestId: z.string(),
1826
+ });
1827
+ export const CheckoutDiffGetRequestSchema = z.object({
1828
+ type: z.literal("checkout.diff.get.request"),
1819
1829
  cwd: z.string(),
1820
1830
  compare: CheckoutDiffCompareSchema,
1821
1831
  requestId: z.string(),
@@ -2330,7 +2340,7 @@ export const FileSubscribeRequestSchema = z.object({
2330
2340
  type: z.literal("fs.file.subscribe.request"),
2331
2341
  cwd: z.string(),
2332
2342
  path: z.string(),
2333
- subscriptionId: z.string(),
2343
+ subscriptionId: z.string().optional(),
2334
2344
  requestId: z.string(),
2335
2345
  });
2336
2346
  export const FileUnsubscribeRequestSchema = z.object({
@@ -2463,6 +2473,7 @@ export const ListTerminalsRequestSchema = z.object({
2463
2473
  });
2464
2474
  export const SubscribeTerminalsRequestSchema = z.object({
2465
2475
  type: z.literal("subscribe_terminals_request"),
2476
+ requestId: z.string().optional(),
2466
2477
  cwd: z.string(),
2467
2478
  workspaceId: z.string().optional(),
2468
2479
  });
@@ -2637,17 +2648,53 @@ export const SessionEventSubscriptionSchema = z.enum([
2637
2648
  "agent_attention_required",
2638
2649
  "agent_permission_request",
2639
2650
  "agent_permission_resolved",
2651
+ "checkout_status_update",
2652
+ "script_status_update",
2653
+ "workspace_setup_progress",
2654
+ "agent.provider_subagents.update",
2655
+ "agent.side_conversation.update",
2656
+ "agent.side_conversation.removed",
2657
+ "terminal_attention_required",
2658
+ "status.server_info",
2659
+ "status.daemon_config_changed",
2660
+ "status.plugin_catalog_changed",
2661
+ "status.plugin_settings_changed",
2662
+ "activity_log",
2663
+ "hub.execution.agent.update",
2664
+ "hub.execution.agent.stream",
2640
2665
  ]);
2641
2666
  export const SessionEventsSetSubscriptionRequestSchema = z.object({
2642
2667
  type: z.literal("session.events.set_subscription.request"),
2643
2668
  requestId: z.string(),
2644
2669
  events: z.array(SessionEventSubscriptionSchema),
2670
+ notifications: z.boolean().optional(),
2645
2671
  });
2646
2672
  export const SessionEventsSetSubscriptionResponseSchema = z.object({
2647
2673
  type: z.literal("session.events.set_subscription.response"),
2648
- payload: z.object({ requestId: z.string() }),
2674
+ payload: z.object({ requestId: z.string(), subscriptionId: z.string().optional() }),
2675
+ });
2676
+ export const BrowserHostRegisterRequestSchema = z.object({
2677
+ type: z.literal("browser.host.register.request"),
2678
+ requestId: z.string(),
2679
+ hostKind: z.string().min(1),
2680
+ supportedCommands: z.array(z.enum(BROWSER_AUTOMATION_COMMAND_NAMES)).min(1),
2681
+ });
2682
+ export const BrowserHostRegisterResponseSchema = z.object({
2683
+ type: z.literal("browser.host.register.response"),
2684
+ payload: z.object({ requestId: z.string(), subscriptionId: z.string() }),
2685
+ });
2686
+ export const SubscriptionReleaseRequestSchema = z.object({
2687
+ type: z.literal("subscription.release.request"),
2688
+ requestId: z.string(),
2689
+ subscriptionId: z.string(),
2690
+ });
2691
+ export const SubscriptionReleaseResponseSchema = z.object({
2692
+ type: z.literal("subscription.release.response"),
2693
+ payload: z.object({ requestId: z.string(), subscriptionId: z.string() }),
2649
2694
  });
2650
2695
  export const SessionInboundMessageSchema = z.discriminatedUnion("type", [
2696
+ BrowserHostRegisterRequestSchema,
2697
+ SubscriptionReleaseRequestSchema,
2651
2698
  SessionEventsSetSubscriptionRequestSchema,
2652
2699
  HubExecutionAgentCreateRequestSchema,
2653
2700
  HubExecutionAgentValidateRequestSchema,
@@ -2697,6 +2744,8 @@ export const SessionInboundMessageSchema = z.discriminatedUnion("type", [
2697
2744
  PluginSourceInstallRequestSchema,
2698
2745
  PluginSourceStatusRequestSchema,
2699
2746
  PluginSourceUpdateRequestSchema,
2747
+ PluginUpdatePreviewRequestSchema,
2748
+ PluginUpdateApplyRequestSchema,
2700
2749
  PluginReloadRequestSchema,
2701
2750
  PluginEnableRequestSchema,
2702
2751
  PluginDisableRequestSchema,
@@ -2733,6 +2782,7 @@ export const SessionInboundMessageSchema = z.discriminatedUnion("type", [
2733
2782
  RestartServerRequestMessageSchema,
2734
2783
  DaemonUpdateRequestMessageSchema,
2735
2784
  FetchAgentTimelineRequestMessageSchema,
2785
+ AgentTimelineSearchRequestMessageSchema,
2736
2786
  AgentTimelineListPromptsRequestMessageSchema,
2737
2787
  ProviderSubagentListRequestMessageSchema,
2738
2788
  ProviderSubagentTimelineRequestMessageSchema,
@@ -2750,6 +2800,7 @@ export const SessionInboundMessageSchema = z.discriminatedUnion("type", [
2750
2800
  AgentRewindRequestMessageSchema,
2751
2801
  AgentPermissionResponseMessageSchema,
2752
2802
  CheckoutStatusRequestSchema,
2803
+ CheckoutDiffGetRequestSchema,
2753
2804
  SubscribeCheckoutDiffRequestSchema,
2754
2805
  UnsubscribeCheckoutDiffRequestSchema,
2755
2806
  CheckoutCommitRequestSchema,
@@ -2855,6 +2906,7 @@ export const SessionInboundMessageSchema = z.discriminatedUnion("type", [
2855
2906
  // Session Outbound Messages (Session emits these)
2856
2907
  // ============================================================================
2857
2908
  export const ActivityLogPayloadSchema = z.object({
2909
+ subscriptionId: z.string().optional(),
2858
2910
  id: z.string(),
2859
2911
  timestamp: z.coerce.date(),
2860
2912
  type: z.enum(["transcript", "assistant", "tool_call", "tool_result", "error", "system"]),
@@ -3051,6 +3103,10 @@ export const ServerInfoStatusPayloadSchema = z
3051
3103
  pluginLogs: z.boolean().optional(),
3052
3104
  // COMPAT(pluginGitManagement): added in v0.7.0, remove gate after 2027-08-26.
3053
3105
  pluginGitManagement: z.boolean().optional(),
3106
+ // COMPAT(pluginSourceInstallation): added in v0.8.0; remove gate after 2027-03-16 once daemon floor supports source identifiers.
3107
+ pluginSourceInstallation: z.boolean().optional(),
3108
+ // COMPAT(pluginSourceUpdates): added in v0.8.0; remove gate after 2027-03-16 once daemon floor supports reviewed updates.
3109
+ pluginSourceUpdates: z.boolean().optional(),
3054
3110
  // COMPAT(pluginThemes): added in v0.5.0, remove gate after 2027-08-20.
3055
3111
  // A daemon that predates this flag keeps `addTheme` in the server bundle it compiles,
3056
3112
  // so a theme plugin cannot start there at all.
@@ -3101,6 +3157,8 @@ export const ServerInfoStatusPayloadSchema = z
3101
3157
  agentForkContextCursor: z.boolean().optional(),
3102
3158
  // COMPAT(providerSubagents): added in v0.1.107, remove gate after 2027-01-12.
3103
3159
  providerSubagents: z.boolean().optional(),
3160
+ // COMPAT(projectedSubagentTimeline): added after v0.8.0, remove gates after 2027-03-14; retain wire field.
3161
+ projectedSubagentTimeline: z.boolean().optional(),
3104
3162
  // COMPAT(providerSubagentNesting): added in v0.7, remove gate after 2027-03-04.
3105
3163
  providerSubagentNesting: z.boolean().optional(),
3106
3164
  // COMPAT(sideConversations): added in 0.7.0-beta.2.fork.1, fork-only — stock peers never gain it, so the gate lasts as long as stock peers are supported.
@@ -3142,6 +3200,7 @@ export const ServerInfoStatusPayloadSchema = z
3142
3200
  // COMPAT(selectiveAgentTimeline): added in v0.1.106, remove after 2027-01-12.
3143
3201
  selectiveAgentTimeline: z.boolean().optional(),
3144
3202
  explicitEventSubscriptions: z.boolean().optional(),
3203
+ ownedSubscriptions: z.boolean().optional(),
3145
3204
  // COMPAT(canonicalSubmittedPrompts): added in v0.2.6, remove gate after 2027-01-30.
3146
3205
  canonicalSubmittedPrompts: z.boolean().optional(),
3147
3206
  // COMPAT(agentTurnIdentity): accept peers that observed pre-release v0.2.6 through 2027-01-31.
@@ -3479,6 +3538,7 @@ export const AgentUpdateMessageSchema = z.object({
3479
3538
  type: z.literal("agent_update"),
3480
3539
  payload: z.discriminatedUnion("kind", [
3481
3540
  z.object({
3541
+ subscriptionId: z.string().optional(),
3482
3542
  kind: z.literal("upsert"),
3483
3543
  agent: AgentSnapshotPayloadSchema,
3484
3544
  project: ProjectPlacementPayloadSchema.nullable().optional(),
@@ -3486,6 +3546,7 @@ export const AgentUpdateMessageSchema = z.object({
3486
3546
  seq: z.number().int().positive().optional(),
3487
3547
  }),
3488
3548
  z.object({
3549
+ subscriptionId: z.string().optional(),
3489
3550
  kind: z.literal("remove"),
3490
3551
  agentId: z.string(),
3491
3552
  generation: z.string().optional(),
@@ -3496,6 +3557,7 @@ export const AgentUpdateMessageSchema = z.object({
3496
3557
  export const AgentStreamMessageSchema = z.object({
3497
3558
  type: z.literal("agent_stream"),
3498
3559
  payload: z.object({
3560
+ subscriptionId: z.string().optional(),
3499
3561
  agentId: z.string(),
3500
3562
  event: AgentStreamEventPayloadSchema,
3501
3563
  timestamp: z.string(),
@@ -3529,13 +3591,10 @@ export const AgentSearchMatchSchema = z.object({
3529
3591
  const AgentDirectoryResponseEntrySchema = z.object({
3530
3592
  agent: AgentSnapshotPayloadSchema,
3531
3593
  project: ProjectPlacementPayloadSchema,
3532
- // Relevance of this entry to the request's `search`, lower being better.
3533
- // Set only when the request carried a query; a client merging results from
3534
- // several hosts needs it to interleave their separately ranked pages.
3594
+ // Legacy relevance metadata remains accepted from older daemons.
3595
+ // Current history responses use the requested chronological sort.
3535
3596
  searchScore: z.number().optional(),
3536
- // Where the query matched, so the row can mark it. The ranker computes this
3537
- // anyway; sending it keeps the client from re-deriving a second opinion that
3538
- // could disagree with the ranking it is explaining.
3597
+ // Legacy server-generated highlights. Current clients highlight displayed text locally.
3539
3598
  searchMatches: z.array(AgentSearchMatchSchema).optional(),
3540
3599
  // COMPAT(directorySync): sequence of this latest directory projection.
3541
3600
  syncSeq: z.number().int().positive().optional(),
@@ -3561,9 +3620,7 @@ export const FetchAgentHistoryResponseMessageSchema = z.object({
3561
3620
  requestId: z.string(),
3562
3621
  entries: z.array(AgentDirectoryResponseEntrySchema),
3563
3622
  pageInfo: AgentDirectoryPageInfoSchema,
3564
- // More sessions matched the request's `search` than the page could hold.
3565
- // Distinct from `pageInfo.hasMore`, which promises a fetchable next page —
3566
- // a ranked result set has none, and the way on is a narrower query.
3623
+ // Older daemons truncate relevance-ranked searches instead of returning a cursor.
3567
3624
  searchTruncated: z.boolean().optional(),
3568
3625
  }),
3569
3626
  });
@@ -3624,12 +3681,14 @@ export const WorkspaceUpdateMessageSchema = z.object({
3624
3681
  type: z.literal("workspace_update"),
3625
3682
  payload: z.discriminatedUnion("kind", [
3626
3683
  z.object({
3684
+ subscriptionId: z.string().optional(),
3627
3685
  kind: z.literal("upsert"),
3628
3686
  workspace: WorkspaceDescriptorPayloadSchema,
3629
3687
  generation: z.string().optional(),
3630
3688
  seq: z.number().int().positive().optional(),
3631
3689
  }),
3632
3690
  z.object({
3691
+ subscriptionId: z.string().optional(),
3633
3692
  kind: z.literal("remove"),
3634
3693
  id: z.string(),
3635
3694
  // COMPAT(workspaceProjects): added in v0.1.97, drop the optional gate when floor >= v0.1.97.
@@ -3657,6 +3716,7 @@ export const WorkspaceLabelListResponseSchema = z.object({
3657
3716
  type: z.literal("workspace.label.list.response"),
3658
3717
  payload: z.object({
3659
3718
  requestId: z.string(),
3719
+ subscriptionId: z.string().optional(),
3660
3720
  labels: z.array(WorkspaceLabelDefinitionSchema),
3661
3721
  sync: WorkspaceLabelSyncMetadataSchema,
3662
3722
  }),
@@ -3665,6 +3725,7 @@ export const WorkspaceLabelUpdateSchema = z.object({
3665
3725
  type: z.literal("workspace.label.update"),
3666
3726
  payload: z.discriminatedUnion("kind", [
3667
3727
  z.object({
3728
+ subscriptionId: z.string().optional(),
3668
3729
  kind: z.literal("upsert"),
3669
3730
  label: WorkspaceLabelDefinitionSchema,
3670
3731
  previousName: z.string().optional(),
@@ -3672,6 +3733,7 @@ export const WorkspaceLabelUpdateSchema = z.object({
3672
3733
  seq: z.number().int().positive(),
3673
3734
  }),
3674
3735
  z.object({
3736
+ subscriptionId: z.string().optional(),
3675
3737
  kind: z.literal("remove"),
3676
3738
  name: z.string(),
3677
3739
  generation: z.string(),
@@ -3713,12 +3775,14 @@ export const ProjectUpdateMessageSchema = z.object({
3713
3775
  type: z.literal("project.update"),
3714
3776
  payload: z.discriminatedUnion("kind", [
3715
3777
  z.object({
3778
+ subscriptionId: z.string().optional(),
3716
3779
  kind: z.literal("upsert"),
3717
3780
  project: WorkspaceProjectDescriptorPayloadSchema,
3718
3781
  generation: z.string().optional(),
3719
3782
  seq: z.number().int().positive().optional(),
3720
3783
  }),
3721
3784
  z.object({
3785
+ subscriptionId: z.string().optional(),
3722
3786
  kind: z.literal("remove"),
3723
3787
  projectId: z.string(),
3724
3788
  generation: z.string().optional(),
@@ -3737,6 +3801,7 @@ export const ProjectListResponseMessageSchema = z.object({
3737
3801
  export const ScriptStatusUpdateMessageSchema = z.object({
3738
3802
  type: z.literal("script_status_update"),
3739
3803
  payload: z.object({
3804
+ subscriptionId: z.string().optional(),
3740
3805
  workspaceId: z.string(),
3741
3806
  scripts: z.array(WorkspaceScriptPayloadSchema),
3742
3807
  }),
@@ -3744,6 +3809,7 @@ export const ScriptStatusUpdateMessageSchema = z.object({
3744
3809
  export const WorkspaceSetupProgressMessageSchema = z.object({
3745
3810
  type: z.literal("workspace_setup_progress"),
3746
3811
  payload: z.object({
3812
+ subscriptionId: z.string().optional(),
3747
3813
  workspaceId: z.string(),
3748
3814
  status: z.enum(["running", "completed", "failed", "blocked"]),
3749
3815
  detail: WorktreeSetupDetailPayloadSchema,
@@ -3981,8 +4047,20 @@ export const FetchAgentTimelineResponseMessageSchema = z.object({
3981
4047
  export const AgentTimelineReplacementMessageSchema = z.object({
3982
4048
  type: z.literal("agent.timeline.replacement"),
3983
4049
  payload: z.object({
4050
+ subscriptionId: z.string().optional(),
4051
+ agentId: z.string(),
4052
+ epoch: z.string(),
4053
+ }),
4054
+ });
4055
+ export const AgentTimelineSearchResponseMessageSchema = z.object({
4056
+ type: z.literal("agent.timeline.search.response"),
4057
+ payload: z.object({
4058
+ requestId: z.string(),
3984
4059
  agentId: z.string(),
3985
4060
  epoch: z.string(),
4061
+ locations: z.array(z.object({ seq: z.number().int().nonnegative(), role: z.enum(["user", "assistant"]) })),
4062
+ nextCursor: z.number().int().nonnegative().nullable(),
4063
+ error: z.string().nullable(),
3986
4064
  }),
3987
4065
  });
3988
4066
  export const AgentTimelineListPromptsResponseMessageSchema = z.object({
@@ -4034,6 +4112,9 @@ export const ProviderSubagentTimelineResponseMessageSchema = z.object({
4034
4112
  provider: AgentProviderSchema.nullable(),
4035
4113
  direction: z.enum(["tail", "before", "after"]),
4036
4114
  epoch: z.string(),
4115
+ projection: z.literal("projected").optional(),
4116
+ startCursor: AgentTimelineCursorSchema.nullable().optional(),
4117
+ endCursor: AgentTimelineCursorSchema.nullable().optional(),
4037
4118
  reset: z.boolean(),
4038
4119
  staleCursor: z.boolean(),
4039
4120
  gap: z.boolean(),
@@ -4048,6 +4129,14 @@ export const ProviderSubagentTimelineResponseMessageSchema = z.object({
4048
4129
  item: AgentTimelineItemPayloadSchema,
4049
4130
  timestamp: z.string(),
4050
4131
  seq: z.number().int().nonnegative(),
4132
+ seqStart: z.number().int().nonnegative().optional(),
4133
+ seqEnd: z.number().int().nonnegative().optional(),
4134
+ sourceSeqRanges: z
4135
+ .array(z.object({
4136
+ startSeq: z.number().int().nonnegative(),
4137
+ endSeq: z.number().int().nonnegative(),
4138
+ }))
4139
+ .optional(),
4051
4140
  })),
4052
4141
  error: z.string().nullable(),
4053
4142
  }),
@@ -4056,10 +4145,12 @@ export const ProviderSubagentUpdateMessageSchema = z.object({
4056
4145
  type: z.literal("agent.provider_subagents.update"),
4057
4146
  payload: z.discriminatedUnion("kind", [
4058
4147
  z.object({
4148
+ subscriptionId: z.string().optional(),
4059
4149
  kind: z.literal("upsert"),
4060
4150
  subagent: ProviderSubagentDescriptorPayloadSchema,
4061
4151
  }),
4062
4152
  z.object({
4153
+ subscriptionId: z.string().optional(),
4063
4154
  kind: z.literal("timeline"),
4064
4155
  parentAgentId: z.string(),
4065
4156
  subagentId: z.string(),
@@ -4070,6 +4161,7 @@ export const ProviderSubagentUpdateMessageSchema = z.object({
4070
4161
  epoch: z.string(),
4071
4162
  }),
4072
4163
  z.object({
4164
+ subscriptionId: z.string().optional(),
4073
4165
  kind: z.literal("remove"),
4074
4166
  parentAgentId: z.string(),
4075
4167
  subagentId: z.string(),
@@ -4146,6 +4238,7 @@ export const SideConversationRemovedMessageSchema = z.object({
4146
4238
  export const SetAgentTimelineSubscriptionResponseMessageSchema = z.object({
4147
4239
  type: z.literal("agent.timeline.set_subscription.response"),
4148
4240
  payload: z.object({
4241
+ subscriptionId: z.string().optional(),
4149
4242
  agentIds: z.array(z.string()),
4150
4243
  requestId: z.string(),
4151
4244
  }),
@@ -4153,6 +4246,7 @@ export const SetAgentTimelineSubscriptionResponseMessageSchema = z.object({
4153
4246
  export const AgentAttentionRequiredMessageSchema = z.object({
4154
4247
  type: z.literal("agent_attention_required"),
4155
4248
  payload: z.object({
4249
+ subscriptionId: z.string().optional(),
4156
4250
  agentId: z.string(),
4157
4251
  reason: z.enum(["finished", "error", "permission"]),
4158
4252
  timestamp: z.string(),
@@ -4224,7 +4318,7 @@ export const CreationSnapshotSchema = z.object({
4224
4318
  });
4225
4319
  export const WorkspaceCreationUpdateSchema = z.object({
4226
4320
  type: z.literal("workspace.create.update"),
4227
- payload: CreationSnapshotSchema,
4321
+ payload: CreationSnapshotSchema.extend({ subscriptionId: z.string().optional() }),
4228
4322
  });
4229
4323
  export const AgentCreationUpdateSchema = WorkspaceCreationUpdateSchema.extend({
4230
4324
  type: z.literal("agent.create.update"),
@@ -4233,6 +4327,7 @@ export const CreationSubscribeResponseSchema = z.object({
4233
4327
  type: z.literal("creation.subscribe.response"),
4234
4328
  payload: z.object({
4235
4329
  requestId: z.string(),
4330
+ subscriptionId: z.string().optional(),
4236
4331
  snapshot: CreationSnapshotSchema.nullable(),
4237
4332
  error: z.string().nullable(),
4238
4333
  }),
@@ -4462,6 +4557,7 @@ export const WriteProjectConfigResponseMessageSchema = z.object({
4462
4557
  export const AgentPermissionRequestMessageSchema = z.object({
4463
4558
  type: z.literal("agent_permission_request"),
4464
4559
  payload: z.object({
4560
+ subscriptionId: z.string().optional(),
4465
4561
  agentId: z.string(),
4466
4562
  request: AgentPermissionRequestPayloadSchema,
4467
4563
  }),
@@ -4469,6 +4565,7 @@ export const AgentPermissionRequestMessageSchema = z.object({
4469
4565
  export const AgentPermissionResolvedMessageSchema = z.object({
4470
4566
  type: z.literal("agent_permission_resolved"),
4471
4567
  payload: z.object({
4568
+ subscriptionId: z.string().optional(),
4472
4569
  agentId: z.string(),
4473
4570
  requestId: z.string(),
4474
4571
  resolution: AgentPermissionResponseSchema,
@@ -4677,6 +4774,7 @@ const CheckoutPrStatusPayloadSchema = z.object({
4677
4774
  requestId: z.string(),
4678
4775
  });
4679
4776
  const CheckoutStatusUpdateMetadataSchema = z.object({
4777
+ subscriptionId: z.string().optional(),
4680
4778
  prStatus: CheckoutPrStatusPayloadSchema.optional(),
4681
4779
  });
4682
4780
  export const CheckoutStatusUpdateSchema = z.object({
@@ -4703,6 +4801,12 @@ export const SubscribeCheckoutDiffResponseSchema = z.object({
4703
4801
  requestId: z.string(),
4704
4802
  }),
4705
4803
  });
4804
+ export const CheckoutDiffGetResponseSchema = z.object({
4805
+ type: z.literal("checkout.diff.get.response"),
4806
+ payload: CheckoutDiffSubscriptionPayloadSchema.omit({ subscriptionId: true }).extend({
4807
+ requestId: z.string(),
4808
+ }),
4809
+ });
4706
4810
  export const CheckoutDiffUpdateSchema = z.object({
4707
4811
  type: z.literal("checkout_diff_update"),
4708
4812
  payload: CheckoutDiffSubscriptionPayloadSchema,
@@ -5392,6 +5496,7 @@ export const GetProvidersSnapshotResponseMessageSchema = z.object({
5392
5496
  export const ProvidersSnapshotUpdateMessageSchema = z.object({
5393
5497
  type: z.literal("providers_snapshot_update"),
5394
5498
  payload: z.object({
5499
+ subscriptionId: z.string().optional(),
5395
5500
  cwd: z.string().optional(),
5396
5501
  entries: z.array(ProviderSnapshotEntrySchema),
5397
5502
  compactSnapshot: CompactProviderSnapshotSchema.optional(),
@@ -5541,6 +5646,9 @@ export const ListTerminalsResponseSchema = z.object({
5541
5646
  export const TerminalsChangedSchema = z.object({
5542
5647
  type: z.literal("terminals_changed"),
5543
5648
  payload: z.object({
5649
+ subscriptionId: z.string().optional(),
5650
+ requestId: z.string().optional(),
5651
+ workspaceId: z.string().optional(),
5544
5652
  cwd: z.string(),
5545
5653
  terminals: z.array(TerminalInfoSchema.omit({ cwd: true })),
5546
5654
  }),
@@ -5567,6 +5675,7 @@ export const SubscribeTerminalResponseSchema = z.object({
5567
5675
  z.object({
5568
5676
  terminalId: z.string(),
5569
5677
  slot: z.number().int().min(0).max(255),
5678
+ subscriptionId: z.string().optional(),
5570
5679
  error: z.null(),
5571
5680
  requestId: z.string(),
5572
5681
  }),
@@ -5597,12 +5706,16 @@ export const CaptureTerminalResponseSchema = z.object({
5597
5706
  export const TerminalStreamExitSchema = z.object({
5598
5707
  type: z.literal("terminal_stream_exit"),
5599
5708
  payload: z.object({
5709
+ subscriptionId: z.string().optional(),
5600
5710
  terminalId: z.string(),
5711
+ // Observation failure; the underlying terminal process may still be running.
5712
+ error: z.string().optional(),
5601
5713
  }),
5602
5714
  });
5603
5715
  export const TerminalAttentionRequiredSchema = z.object({
5604
5716
  type: z.literal("terminal_attention_required"),
5605
5717
  payload: z.object({
5718
+ subscriptionId: z.string().optional(),
5606
5719
  serverId: z.string().optional(),
5607
5720
  terminalId: z.string(),
5608
5721
  cwd: z.string(),
@@ -5668,6 +5781,7 @@ export const HubExecutionControlResponseSchema = z.object({
5668
5781
  export const HubExecutionAgentUpdateSchema = z.object({
5669
5782
  type: z.literal("hub.execution.agent.update"),
5670
5783
  payload: z.object({
5784
+ subscriptionId: z.string().optional(),
5671
5785
  executionId: z.string(),
5672
5786
  agentId: z.string(),
5673
5787
  agent: AgentSnapshotPayloadSchema,
@@ -5676,6 +5790,7 @@ export const HubExecutionAgentUpdateSchema = z.object({
5676
5790
  export const HubExecutionAgentStreamSchema = z.object({
5677
5791
  type: z.literal("hub.execution.agent.stream"),
5678
5792
  payload: z.object({
5793
+ subscriptionId: z.string().optional(),
5679
5794
  executionId: z.string(),
5680
5795
  agentId: z.string(),
5681
5796
  event: AgentStreamEventPayloadSchema,
@@ -5718,12 +5833,21 @@ export const PluginCatalogGetResponseSchema = z.object({
5718
5833
  }),
5719
5834
  });
5720
5835
  export const PluginStatusSchema = z.enum(["running", "disabled", "failed"]);
5836
+ export const PluginNpmInstallationSchema = z.object({
5837
+ packageName: z.string(),
5838
+ requestedSpec: z.string(),
5839
+ version: z.string(),
5840
+ integrity: z.string(),
5841
+ });
5721
5842
  export const PluginListItemSchema = z.object({
5722
5843
  id: PluginIdSchema,
5844
+ description: z.string().optional(),
5723
5845
  path: z.string(),
5724
5846
  enabled: z.boolean(),
5725
5847
  status: PluginStatusSchema,
5726
5848
  source: z.enum(["directory", "git"]).optional(),
5849
+ npm: PluginNpmInstallationSchema.optional(),
5850
+ installation: PluginInstallationSchema.optional(),
5727
5851
  remote: z.string().optional(),
5728
5852
  ref: z.string().optional(),
5729
5853
  commit: z.string().optional(),
@@ -5762,6 +5886,8 @@ export const PluginSourceInstallResponseSchema = z.object({
5762
5886
  export const PluginSourceStatusItemSchema = z.object({
5763
5887
  id: PluginIdSchema,
5764
5888
  source: z.enum(["directory", "git"]),
5889
+ npm: PluginNpmInstallationSchema.optional(),
5890
+ installation: PluginInstallationSchema.optional(),
5765
5891
  path: z.string(),
5766
5892
  remote: z.string().optional(),
5767
5893
  ref: z.string().optional(),
@@ -5785,6 +5911,30 @@ export const PluginSourceUpdateResponseSchema = z.object({
5785
5911
  type: z.literal("plugin.source.update.response"),
5786
5912
  payload: z.object({ requestId: z.string(), plugins: z.array(PluginSourceUpdateItemSchema) }),
5787
5913
  });
5914
+ export const PluginUpdatePreviewSchema = z.object({
5915
+ id: PluginIdSchema,
5916
+ outcome: z.enum(["update", "current", "installed-newer", "local", "error"]),
5917
+ current: PluginInstallationSchema.optional(),
5918
+ target: PluginUpdateTargetSchema.optional(),
5919
+ links: z.array(z.string()),
5920
+ proposal: PluginUpdateProposalSchema.optional(),
5921
+ error: z.string().optional(),
5922
+ });
5923
+ export const PluginUpdateResultSchema = z.object({
5924
+ id: PluginIdSchema,
5925
+ outcome: z.enum(["updated", "error"]),
5926
+ plugin: PluginListItemSchema.optional(),
5927
+ error: z.string().optional(),
5928
+ warning: z.string().optional(),
5929
+ });
5930
+ export const PluginUpdatePreviewResponseSchema = z.object({
5931
+ type: z.literal("plugin.source.update.preview.response"),
5932
+ payload: z.object({ requestId: z.string(), plugins: z.array(PluginUpdatePreviewSchema) }),
5933
+ });
5934
+ export const PluginUpdateApplyResponseSchema = z.object({
5935
+ type: z.literal("plugin.source.update.apply.response"),
5936
+ payload: z.object({ requestId: z.string(), plugins: z.array(PluginUpdateResultSchema) }),
5937
+ });
5788
5938
  function pluginActionResponse(type) {
5789
5939
  return z.object({
5790
5940
  type: z.literal(type),
@@ -5835,6 +5985,8 @@ export const AgentSkillsImportLegacySelectionResponseSchema = z.object({
5835
5985
  }),
5836
5986
  });
5837
5987
  export const SessionOutboundMessageSchema = z.discriminatedUnion("type", [
5988
+ BrowserHostRegisterResponseSchema,
5989
+ SubscriptionReleaseResponseSchema,
5838
5990
  SessionEventsSetSubscriptionResponseSchema,
5839
5991
  HubExecutionAgentCreateResponseSchema,
5840
5992
  HubExecutionAgentValidateResponseSchema,
@@ -5850,6 +6002,8 @@ export const SessionOutboundMessageSchema = z.discriminatedUnion("type", [
5850
6002
  PluginSourceInstallResponseSchema,
5851
6003
  PluginSourceStatusResponseSchema,
5852
6004
  PluginSourceUpdateResponseSchema,
6005
+ PluginUpdatePreviewResponseSchema,
6006
+ PluginUpdateApplyResponseSchema,
5853
6007
  PluginReloadResponseSchema,
5854
6008
  PluginEnableResponseSchema,
5855
6009
  PluginDisableResponseSchema,
@@ -5911,6 +6065,7 @@ export const SessionOutboundMessageSchema = z.discriminatedUnion("type", [
5911
6065
  FetchAgentResponseMessageSchema,
5912
6066
  FetchAgentTimelineResponseMessageSchema,
5913
6067
  AgentTimelineReplacementMessageSchema,
6068
+ AgentTimelineSearchResponseMessageSchema,
5914
6069
  AgentTimelineListPromptsResponseMessageSchema,
5915
6070
  ProviderSubagentListResponseMessageSchema,
5916
6071
  ProviderSubagentTimelineResponseMessageSchema,
@@ -5969,6 +6124,7 @@ export const SessionOutboundMessageSchema = z.discriminatedUnion("type", [
5969
6124
  CloseItemsResponseSchema,
5970
6125
  CheckoutStatusResponseSchema,
5971
6126
  CheckoutStatusUpdateSchema,
6127
+ CheckoutDiffGetResponseSchema,
5972
6128
  SubscribeCheckoutDiffResponseSchema,
5973
6129
  CheckoutDiffUpdateSchema,
5974
6130
  CheckoutCommitResponseSchema,