@tt-a1i/openpi 0.4.0 → 0.6.0

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 (141) hide show
  1. package/README.md +116 -46
  2. package/SETUP.md +29 -7
  3. package/THIRD_PARTY_NOTICES.md +16 -0
  4. package/assets/openpi-launch-card-v1.webp +0 -0
  5. package/bin/openpi.js +155 -0
  6. package/extensions/ai-providers/LICENSE.upstream +23 -0
  7. package/extensions/ai-providers/README.md +59 -0
  8. package/extensions/ai-providers/antigravity/credentials.ts +52 -0
  9. package/extensions/ai-providers/antigravity/discovery.ts +130 -0
  10. package/extensions/ai-providers/antigravity/google-conversion.ts +455 -0
  11. package/extensions/ai-providers/antigravity/models.ts +84 -0
  12. package/extensions/ai-providers/antigravity/oauth.ts +700 -0
  13. package/extensions/ai-providers/antigravity/provider.ts +1116 -0
  14. package/extensions/ai-providers/antigravity/routing.ts +340 -0
  15. package/extensions/ai-providers/antigravity/with-resolvers.d.ts +19 -0
  16. package/extensions/ai-providers/cursor/constants.ts +5 -0
  17. package/extensions/ai-providers/cursor/credentials.ts +14 -0
  18. package/extensions/ai-providers/cursor/discovery.ts +291 -0
  19. package/extensions/ai-providers/cursor/input-images.ts +106 -0
  20. package/extensions/ai-providers/cursor/models.ts +45 -0
  21. package/extensions/ai-providers/cursor/oauth.ts +263 -0
  22. package/extensions/ai-providers/cursor/proto.ts +1064 -0
  23. package/extensions/ai-providers/cursor/protobuf.ts +1171 -0
  24. package/extensions/ai-providers/cursor/provider.ts +1175 -0
  25. package/extensions/ai-providers/cursor/proxy.ts +213 -0
  26. package/extensions/ai-providers/cursor/with-resolvers.d.ts +12 -0
  27. package/extensions/ai-providers/index.ts +86 -0
  28. package/extensions/ai-providers/oauth-adapter.ts +81 -0
  29. package/extensions/ai-providers/usage.ts +10 -0
  30. package/extensions/background-terminals/index.ts +38 -3
  31. package/extensions/background-terminals/src/domain.ts +2 -0
  32. package/extensions/background-terminals/src/manager.ts +484 -106
  33. package/extensions/background-terminals/src/output.ts +33 -0
  34. package/extensions/background-terminals/src/prompt.ts +13 -5
  35. package/extensions/background-terminals/src/result-delivery.ts +47 -24
  36. package/extensions/clear-context/index.ts +83 -0
  37. package/extensions/context-pivot/index.ts +16 -6
  38. package/extensions/cron/index.ts +68 -27
  39. package/extensions/cron/schedule.ts +12 -2
  40. package/extensions/file-mutation-display/render.ts +17 -257
  41. package/extensions/file-search/src/binaries.ts +57 -41
  42. package/extensions/git-read/index.ts +1 -3
  43. package/extensions/model-info/cache-diagnostics.ts +220 -0
  44. package/extensions/model-info/index.ts +65 -33
  45. package/extensions/model-info/session-metrics.ts +96 -0
  46. package/extensions/plan-mode/bash-policy.ts +54 -9
  47. package/extensions/plan-mode/index.ts +82 -6
  48. package/extensions/post-edit/index.ts +16 -6
  49. package/extensions/sessions/git-stats.ts +258 -72
  50. package/extensions/sessions/index.ts +153 -86
  51. package/extensions/sessions/preview-cache.ts +104 -0
  52. package/extensions/sessions/preview-loader.ts +856 -0
  53. package/extensions/sessions/sessions.ts +43 -4
  54. package/extensions/setup/index.ts +138 -130
  55. package/extensions/shared/activity-status.ts +30 -0
  56. package/extensions/shared/agent-session-page.ts +319 -0
  57. package/extensions/shared/agent-tool-renderer.ts +218 -0
  58. package/extensions/shared/agent-transcript.ts +524 -0
  59. package/extensions/shared/capability-intent.ts +1 -1
  60. package/extensions/shared/child-session.ts +457 -21
  61. package/extensions/shared/completion-inbox.ts +193 -0
  62. package/extensions/shared/result-delivery.ts +34 -0
  63. package/extensions/shared/setup-config.ts +83 -34
  64. package/extensions/shared/setup-episode-state.ts +1 -1
  65. package/extensions/shared/structured-output.ts +154 -0
  66. package/extensions/shared/terminal-text.ts +110 -23
  67. package/extensions/shared/text-projection.ts +72 -15
  68. package/extensions/shared/tool-activity.ts +382 -0
  69. package/extensions/shared/tool-surface.ts +29 -2
  70. package/extensions/shared/transcript-viewport.ts +46 -0
  71. package/extensions/shared/web-observer-registry.ts +390 -0
  72. package/extensions/shared/worktree.ts +11 -0
  73. package/extensions/subagents/index.ts +313 -62
  74. package/extensions/subagents/navigation.ts +34 -5
  75. package/extensions/subagents/src/backend.ts +12 -1
  76. package/extensions/subagents/src/backends/pi.ts +450 -70
  77. package/extensions/subagents/src/domain.ts +21 -1
  78. package/extensions/subagents/src/manager.ts +39 -2
  79. package/extensions/subagents/src/prompt.ts +49 -7
  80. package/extensions/subagents/src/result-artifact.ts +36 -0
  81. package/extensions/subagents/src/result-delivery.ts +39 -14
  82. package/extensions/subagents/src/runtime.ts +15 -1
  83. package/extensions/subagents/src/ui/takeover.ts +73 -257
  84. package/extensions/subagents/src/ui/transcript.ts +38 -535
  85. package/extensions/subagents/src/ui/wait-result.ts +103 -15
  86. package/extensions/suggestions/src/ui.ts +10 -4
  87. package/extensions/tasks/index.ts +0 -3
  88. package/extensions/ui-customization/footer.ts +16 -45
  89. package/extensions/ui-customization/index.ts +0 -4
  90. package/extensions/user-input-fold/index.ts +42 -6
  91. package/extensions/web/index.ts +257 -0
  92. package/extensions/workflows/acceptance.ts +43 -19
  93. package/extensions/workflows/artifacts.ts +137 -47
  94. package/extensions/workflows/completion-projection.ts +459 -0
  95. package/extensions/workflows/coordinator.ts +8 -10
  96. package/extensions/workflows/dashboard.ts +175 -228
  97. package/extensions/workflows/handoff.ts +70 -16
  98. package/extensions/workflows/index.ts +501 -198
  99. package/extensions/workflows/journal.ts +148 -13
  100. package/extensions/workflows/model.ts +79 -5
  101. package/extensions/workflows/navigation.ts +32 -8
  102. package/extensions/workflows/progress-projection.ts +306 -0
  103. package/extensions/workflows/prompt.ts +70 -16
  104. package/extensions/workflows/replay-safety.ts +42 -21
  105. package/extensions/workflows/result-delivery.ts +214 -76
  106. package/extensions/workflows/retention.ts +599 -0
  107. package/extensions/workflows/runner.ts +389 -345
  108. package/extensions/workflows/sandbox-child.cjs +25 -3
  109. package/extensions/workflows/sandbox.ts +62 -8
  110. package/extensions/workflows/serialization.ts +325 -17
  111. package/extensions/workflows/tool-renderer.ts +22 -0
  112. package/extensions/workflows/transcript.ts +149 -0
  113. package/extensions/workspace-cleanup-guard/index.ts +54 -0
  114. package/extensions/workspace-cleanup-guard/workspace-provenance.ts +563 -0
  115. package/package.json +34 -14
  116. package/skills/subagents/REFERENCE.md +190 -0
  117. package/skills/subagents/SKILL.md +2 -1
  118. package/skills/workflows/REFERENCE.md +6 -4
  119. package/skills/workflows/SKILL.md +1 -1
  120. package/web/adapter/pi-adapter.ts +664 -0
  121. package/web/host/browser-launcher.ts +20 -0
  122. package/web/host/pi-coding-agent-entry.ts +162 -0
  123. package/web/host/static-assets.ts +4 -0
  124. package/web/host/terminal-status.ts +38 -0
  125. package/web/host/web-host.ts +1069 -0
  126. package/web/http-dispatcher.ts +125 -0
  127. package/web/protocol/types.ts +467 -0
  128. package/web/runtime/pi-runtime.ts +1206 -0
  129. package/web/runtime/types.ts +102 -0
  130. package/web/runtime/web-host-lease.ts +497 -0
  131. package/web/trace.ts +18 -0
  132. package/web/ui/app.js +1700 -0
  133. package/web/ui/index.html +142 -0
  134. package/web/ui/styles.css +680 -0
  135. package/web/vite.config.mjs +34 -0
  136. package/extensions/execution-convergence/active-evidence.ts +0 -129
  137. package/extensions/execution-convergence/index.ts +0 -442
  138. package/extensions/execution-convergence/workspace-provenance.ts +0 -338
  139. package/extensions/setup/intercom-fs-helper.cjs +0 -130
  140. package/extensions/setup/intercom.ts +0 -603
  141. package/extensions/subagents/src/backends/stub.ts +0 -303
@@ -0,0 +1,1064 @@
1
+ /**
2
+ * Small Cursor AgentService protobuf surface.
3
+ *
4
+ * The field numbers and message names are vendored from
5
+ * oh-my-pi@eab72e88e4, packages/catalog/src/discovery/cursor-proto.ts
6
+ * (MIT). Only the chat, image, model-discovery, and exec-rejection messages
7
+ * used by this chat-only provider are retained. Unknown fields are skipped by
8
+ * the local protobuf codec so newer Cursor messages remain forward-compatible.
9
+ */
10
+
11
+ import { type MessageCodec, type ProtoMessage, pb } from "./protobuf.ts";
12
+
13
+ export interface AgentClientMessage extends ProtoMessage {
14
+ message:
15
+ | { case: undefined; value?: undefined }
16
+ | { case: "runRequest"; value: AgentRunRequest }
17
+ | { case: "execClientMessage"; value: ExecClientMessage }
18
+ | { case: "execClientControlMessage"; value: ExecClientControlMessage }
19
+ | { case: "kvClientMessage"; value: KvClientMessage }
20
+ | { case: "clientHeartbeat"; value: ClientHeartbeat };
21
+ }
22
+
23
+ export const AgentClientMessageSchema: MessageCodec<AgentClientMessage> =
24
+ pb<AgentClientMessage>("agent.v1.AgentClientMessage", [
25
+ {
26
+ kind: "oneof",
27
+ name: "message",
28
+ variants: [
29
+ {
30
+ no: 1,
31
+ name: "runRequest",
32
+ kind: "message",
33
+ T: () => AgentRunRequestSchema,
34
+ },
35
+ {
36
+ no: 2,
37
+ name: "execClientMessage",
38
+ kind: "message",
39
+ T: () => ExecClientMessageSchema,
40
+ },
41
+ {
42
+ no: 5,
43
+ name: "execClientControlMessage",
44
+ kind: "message",
45
+ T: () => ExecClientControlMessageSchema,
46
+ },
47
+ {
48
+ no: 3,
49
+ name: "kvClientMessage",
50
+ kind: "message",
51
+ T: () => KvClientMessageSchema,
52
+ },
53
+ {
54
+ no: 7,
55
+ name: "clientHeartbeat",
56
+ kind: "message",
57
+ T: () => ClientHeartbeatSchema,
58
+ },
59
+ ],
60
+ },
61
+ ]);
62
+
63
+ export interface AgentRunRequest extends ProtoMessage {
64
+ conversationState?: ConversationStateStructure;
65
+ action?: ConversationAction;
66
+ modelDetails?: ModelDetails;
67
+ requestedModel?: RequestedModel;
68
+ conversationId?: string;
69
+ customSystemPrompt?: string;
70
+ }
71
+
72
+ export const AgentRunRequestSchema: MessageCodec<AgentRunRequest> =
73
+ pb<AgentRunRequest>("agent.v1.AgentRunRequest", [
74
+ {
75
+ no: 1,
76
+ name: "conversationState",
77
+ kind: "message",
78
+ T: () => ConversationStateStructureSchema,
79
+ },
80
+ {
81
+ no: 2,
82
+ name: "action",
83
+ kind: "message",
84
+ T: () => ConversationActionSchema,
85
+ },
86
+ {
87
+ no: 3,
88
+ name: "modelDetails",
89
+ kind: "message",
90
+ T: () => ModelDetailsSchema,
91
+ },
92
+ {
93
+ no: 9,
94
+ name: "requestedModel",
95
+ kind: "message",
96
+ T: () => RequestedModelSchema,
97
+ },
98
+ { no: 5, name: "conversationId", kind: "string", optional: true },
99
+ { no: 8, name: "customSystemPrompt", kind: "string", optional: true },
100
+ ]);
101
+
102
+ export interface ConversationStateStructure extends ProtoMessage {
103
+ rootPromptMessagesJson: Uint8Array[];
104
+ turns: Uint8Array[];
105
+ pendingToolCalls: string[];
106
+ }
107
+
108
+ export const ConversationStateStructureSchema: MessageCodec<ConversationStateStructure> =
109
+ pb<ConversationStateStructure>("agent.v1.ConversationStateStructure", [
110
+ { no: 1, name: "rootPromptMessagesJson", kind: "bytes", repeat: true },
111
+ { no: 4, name: "pendingToolCalls", kind: "string", repeat: true },
112
+ { no: 8, name: "turns", kind: "bytes", repeat: true },
113
+ ]);
114
+
115
+ export interface ConversationAction extends ProtoMessage {
116
+ action:
117
+ | { case: undefined; value?: undefined }
118
+ | { case: "userMessageAction"; value: UserMessageAction }
119
+ | { case: "resumeAction"; value: ResumeAction };
120
+ }
121
+
122
+ export const ConversationActionSchema: MessageCodec<ConversationAction> =
123
+ pb<ConversationAction>("agent.v1.ConversationAction", [
124
+ {
125
+ kind: "oneof",
126
+ name: "action",
127
+ variants: [
128
+ {
129
+ no: 1,
130
+ name: "userMessageAction",
131
+ kind: "message",
132
+ T: () => UserMessageActionSchema,
133
+ },
134
+ {
135
+ no: 2,
136
+ name: "resumeAction",
137
+ kind: "message",
138
+ T: () => ResumeActionSchema,
139
+ },
140
+ ],
141
+ },
142
+ ]);
143
+
144
+ export interface UserMessageAction extends ProtoMessage {
145
+ userMessage?: UserMessage;
146
+ }
147
+
148
+ export const UserMessageActionSchema: MessageCodec<UserMessageAction> =
149
+ pb<UserMessageAction>("agent.v1.UserMessageAction", [
150
+ { no: 1, name: "userMessage", kind: "message", T: () => UserMessageSchema },
151
+ ]);
152
+
153
+ export interface ResumeAction extends ProtoMessage {}
154
+
155
+ export const ResumeActionSchema: MessageCodec<ResumeAction> = pb<ResumeAction>(
156
+ "agent.v1.ResumeAction",
157
+ [],
158
+ );
159
+
160
+ export interface UserMessage extends ProtoMessage {
161
+ text: string;
162
+ messageId: string;
163
+ selectedContext?: SelectedContext;
164
+ mode: number;
165
+ }
166
+
167
+ export const UserMessageSchema: MessageCodec<UserMessage> = pb<UserMessage>(
168
+ "agent.v1.UserMessage",
169
+ [
170
+ { no: 1, name: "text", kind: "string" },
171
+ { no: 2, name: "messageId", kind: "string" },
172
+ {
173
+ no: 3,
174
+ name: "selectedContext",
175
+ kind: "message",
176
+ T: () => SelectedContextSchema,
177
+ },
178
+ { no: 4, name: "mode", kind: "int32" },
179
+ ],
180
+ );
181
+
182
+ export interface SelectedContext extends ProtoMessage {
183
+ selectedImages: SelectedImage[];
184
+ }
185
+
186
+ export const SelectedContextSchema: MessageCodec<SelectedContext> =
187
+ pb<SelectedContext>("agent.v1.SelectedContext", [
188
+ {
189
+ no: 1,
190
+ name: "selectedImages",
191
+ kind: "message",
192
+ T: () => SelectedImageSchema,
193
+ repeat: true,
194
+ },
195
+ ]);
196
+
197
+ export interface SelectedImage extends ProtoMessage {
198
+ uuid: string;
199
+ path: string;
200
+ dimension?: SelectedImage_Dimension;
201
+ mimeType: string;
202
+ dataOrBlobId:
203
+ | { case: undefined; value?: undefined }
204
+ | { case: "blobId"; value: Uint8Array }
205
+ | { case: "data"; value: Uint8Array }
206
+ | { case: "blobIdWithData"; value: SelectedImage_BlobIdWithData };
207
+ }
208
+
209
+ export const SelectedImageSchema: MessageCodec<SelectedImage> =
210
+ pb<SelectedImage>("agent.v1.SelectedImage", [
211
+ { no: 2, name: "uuid", kind: "string" },
212
+ { no: 3, name: "path", kind: "string" },
213
+ {
214
+ no: 4,
215
+ name: "dimension",
216
+ kind: "message",
217
+ T: () => SelectedImage_DimensionSchema,
218
+ },
219
+ { no: 7, name: "mimeType", kind: "string" },
220
+ {
221
+ kind: "oneof",
222
+ name: "dataOrBlobId",
223
+ variants: [
224
+ { no: 1, name: "blobId", kind: "bytes" },
225
+ { no: 8, name: "data", kind: "bytes" },
226
+ {
227
+ no: 9,
228
+ name: "blobIdWithData",
229
+ kind: "message",
230
+ T: () => SelectedImage_BlobIdWithDataSchema,
231
+ },
232
+ ],
233
+ },
234
+ ]);
235
+
236
+ export interface SelectedImage_BlobIdWithData extends ProtoMessage {
237
+ blobId: Uint8Array;
238
+ data: Uint8Array;
239
+ }
240
+
241
+ export const SelectedImage_BlobIdWithDataSchema: MessageCodec<SelectedImage_BlobIdWithData> =
242
+ pb<SelectedImage_BlobIdWithData>("agent.v1.SelectedImage_BlobIdWithData", [
243
+ { no: 1, name: "blobId", kind: "bytes" },
244
+ { no: 2, name: "data", kind: "bytes" },
245
+ ]);
246
+
247
+ export interface SelectedImage_Dimension extends ProtoMessage {
248
+ width: number;
249
+ height: number;
250
+ }
251
+
252
+ export const SelectedImage_DimensionSchema: MessageCodec<SelectedImage_Dimension> =
253
+ pb<SelectedImage_Dimension>("agent.v1.SelectedImage_Dimension", [
254
+ { no: 1, name: "width", kind: "int32" },
255
+ { no: 2, name: "height", kind: "int32" },
256
+ ]);
257
+
258
+ export interface ConversationTurnStructure extends ProtoMessage {
259
+ turn:
260
+ | { case: undefined; value?: undefined }
261
+ | { case: "agentConversationTurn"; value: AgentConversationTurnStructure };
262
+ }
263
+
264
+ export const ConversationTurnStructureSchema: MessageCodec<ConversationTurnStructure> =
265
+ pb<ConversationTurnStructure>("agent.v1.ConversationTurnStructure", [
266
+ {
267
+ kind: "oneof",
268
+ name: "turn",
269
+ variants: [
270
+ {
271
+ no: 1,
272
+ name: "agentConversationTurn",
273
+ kind: "message",
274
+ T: () => AgentConversationTurnStructureSchema,
275
+ },
276
+ ],
277
+ },
278
+ ]);
279
+
280
+ export interface AgentConversationTurnStructure extends ProtoMessage {
281
+ userMessage: Uint8Array;
282
+ steps: Uint8Array[];
283
+ requestId?: string;
284
+ }
285
+
286
+ export const AgentConversationTurnStructureSchema: MessageCodec<AgentConversationTurnStructure> =
287
+ pb<AgentConversationTurnStructure>(
288
+ "agent.v1.AgentConversationTurnStructure",
289
+ [
290
+ { no: 1, name: "userMessage", kind: "bytes" },
291
+ { no: 2, name: "steps", kind: "bytes", repeat: true },
292
+ { no: 3, name: "requestId", kind: "string", optional: true },
293
+ ],
294
+ );
295
+
296
+ export interface ConversationStep extends ProtoMessage {
297
+ message:
298
+ | { case: undefined; value?: undefined }
299
+ | { case: "assistantMessage"; value: AssistantMessage }
300
+ | { case: "thinkingMessage"; value: ThinkingMessage };
301
+ }
302
+
303
+ export const ConversationStepSchema: MessageCodec<ConversationStep> =
304
+ pb<ConversationStep>("agent.v1.ConversationStep", [
305
+ {
306
+ kind: "oneof",
307
+ name: "message",
308
+ variants: [
309
+ {
310
+ no: 1,
311
+ name: "assistantMessage",
312
+ kind: "message",
313
+ T: () => AssistantMessageSchema,
314
+ },
315
+ {
316
+ no: 3,
317
+ name: "thinkingMessage",
318
+ kind: "message",
319
+ T: () => ThinkingMessageSchema,
320
+ },
321
+ ],
322
+ },
323
+ ]);
324
+
325
+ export interface AssistantMessage extends ProtoMessage {
326
+ text: string;
327
+ }
328
+
329
+ export const AssistantMessageSchema: MessageCodec<AssistantMessage> =
330
+ pb<AssistantMessage>("agent.v1.AssistantMessage", [
331
+ { no: 1, name: "text", kind: "string" },
332
+ ]);
333
+
334
+ export interface ThinkingMessage extends ProtoMessage {
335
+ text: string;
336
+ durationMs: number;
337
+ }
338
+
339
+ export const ThinkingMessageSchema: MessageCodec<ThinkingMessage> =
340
+ pb<ThinkingMessage>("agent.v1.ThinkingMessage", [
341
+ { no: 1, name: "text", kind: "string" },
342
+ { no: 2, name: "durationMs", kind: "uint32" },
343
+ ]);
344
+
345
+ export interface ModelDetails extends ProtoMessage {
346
+ modelId: string;
347
+ displayModelId: string;
348
+ displayName: string;
349
+ displayNameShort: string;
350
+ aliases: string[];
351
+ thinkingDetails?: ThinkingDetails;
352
+ maxMode?: boolean;
353
+ }
354
+
355
+ export const ModelDetailsSchema: MessageCodec<ModelDetails> = pb<ModelDetails>(
356
+ "agent.v1.ModelDetails",
357
+ [
358
+ { no: 1, name: "modelId", kind: "string" },
359
+ { no: 3, name: "displayModelId", kind: "string" },
360
+ { no: 4, name: "displayName", kind: "string" },
361
+ { no: 5, name: "displayNameShort", kind: "string" },
362
+ { no: 6, name: "aliases", kind: "string", repeat: true },
363
+ {
364
+ no: 2,
365
+ name: "thinkingDetails",
366
+ kind: "message",
367
+ T: () => ThinkingDetailsSchema,
368
+ },
369
+ { no: 7, name: "maxMode", kind: "bool", optional: true },
370
+ ],
371
+ );
372
+
373
+ export interface ThinkingDetails extends ProtoMessage {}
374
+
375
+ export const ThinkingDetailsSchema: MessageCodec<ThinkingDetails> =
376
+ pb<ThinkingDetails>("agent.v1.ThinkingDetails", []);
377
+
378
+ export interface RequestedModel extends ProtoMessage {
379
+ modelId: string;
380
+ maxMode: boolean;
381
+ parameters: RequestedModel_ModelParameterbytes[];
382
+ }
383
+
384
+ export const RequestedModelSchema: MessageCodec<RequestedModel> =
385
+ pb<RequestedModel>("agent.v1.RequestedModel", [
386
+ { no: 1, name: "modelId", kind: "string" },
387
+ { no: 2, name: "maxMode", kind: "bool" },
388
+ {
389
+ no: 3,
390
+ name: "parameters",
391
+ kind: "message",
392
+ T: () => RequestedModel_ModelParameterbytesSchema,
393
+ repeat: true,
394
+ },
395
+ ]);
396
+
397
+ export interface RequestedModel_ModelParameterbytes extends ProtoMessage {
398
+ id: string;
399
+ value: string;
400
+ }
401
+
402
+ export const RequestedModel_ModelParameterbytesSchema: MessageCodec<RequestedModel_ModelParameterbytes> =
403
+ pb<RequestedModel_ModelParameterbytes>(
404
+ "agent.v1.RequestedModel_ModelParameterbytes",
405
+ [
406
+ { no: 1, name: "id", kind: "string" },
407
+ { no: 2, name: "value", kind: "string" },
408
+ ],
409
+ );
410
+
411
+ export interface ClientHeartbeat extends ProtoMessage {}
412
+
413
+ export const ClientHeartbeatSchema: MessageCodec<ClientHeartbeat> =
414
+ pb<ClientHeartbeat>("agent.v1.ClientHeartbeat", []);
415
+
416
+ export interface GetBlobArgs extends ProtoMessage {
417
+ blobId: Uint8Array;
418
+ }
419
+
420
+ export const GetBlobArgsSchema: MessageCodec<GetBlobArgs> = pb<GetBlobArgs>(
421
+ "agent.v1.GetBlobArgs",
422
+ [{ no: 1, name: "blobId", kind: "bytes" }],
423
+ );
424
+
425
+ export interface GetBlobResult extends ProtoMessage {
426
+ blobData?: Uint8Array;
427
+ }
428
+
429
+ export const GetBlobResultSchema: MessageCodec<GetBlobResult> =
430
+ pb<GetBlobResult>("agent.v1.GetBlobResult", [
431
+ { no: 1, name: "blobData", kind: "bytes", optional: true },
432
+ ]);
433
+
434
+ export interface SetBlobArgs extends ProtoMessage {
435
+ blobId: Uint8Array;
436
+ blobData: Uint8Array;
437
+ }
438
+
439
+ export const SetBlobArgsSchema: MessageCodec<SetBlobArgs> = pb<SetBlobArgs>(
440
+ "agent.v1.SetBlobArgs",
441
+ [
442
+ { no: 1, name: "blobId", kind: "bytes" },
443
+ { no: 2, name: "blobData", kind: "bytes" },
444
+ ],
445
+ );
446
+
447
+ export interface SetBlobResult extends ProtoMessage {}
448
+
449
+ export const SetBlobResultSchema: MessageCodec<SetBlobResult> =
450
+ pb<SetBlobResult>("agent.v1.SetBlobResult", []);
451
+
452
+ export interface KvClientMessage extends ProtoMessage {
453
+ id: number;
454
+ message:
455
+ | { case: undefined; value?: undefined }
456
+ | { case: "getBlobResult"; value: GetBlobResult }
457
+ | { case: "setBlobResult"; value: SetBlobResult };
458
+ }
459
+
460
+ export const KvClientMessageSchema: MessageCodec<KvClientMessage> =
461
+ pb<KvClientMessage>("agent.v1.KvClientMessage", [
462
+ { no: 1, name: "id", kind: "uint32" },
463
+ {
464
+ kind: "oneof",
465
+ name: "message",
466
+ variants: [
467
+ {
468
+ no: 2,
469
+ name: "getBlobResult",
470
+ kind: "message",
471
+ T: () => GetBlobResultSchema,
472
+ },
473
+ {
474
+ no: 3,
475
+ name: "setBlobResult",
476
+ kind: "message",
477
+ T: () => SetBlobResultSchema,
478
+ },
479
+ ],
480
+ },
481
+ ]);
482
+
483
+ export interface KvServerMessage extends ProtoMessage {
484
+ id: number;
485
+ message:
486
+ | { case: undefined; value?: undefined }
487
+ | { case: "getBlobArgs"; value: GetBlobArgs }
488
+ | { case: "setBlobArgs"; value: SetBlobArgs };
489
+ }
490
+
491
+ export const KvServerMessageSchema: MessageCodec<KvServerMessage> =
492
+ pb<KvServerMessage>("agent.v1.KvServerMessage", [
493
+ { no: 1, name: "id", kind: "uint32" },
494
+ {
495
+ kind: "oneof",
496
+ name: "message",
497
+ variants: [
498
+ {
499
+ no: 2,
500
+ name: "getBlobArgs",
501
+ kind: "message",
502
+ T: () => GetBlobArgsSchema,
503
+ },
504
+ {
505
+ no: 3,
506
+ name: "setBlobArgs",
507
+ kind: "message",
508
+ T: () => SetBlobArgsSchema,
509
+ },
510
+ ],
511
+ },
512
+ ]);
513
+
514
+ /** Exec context is the only server-side interaction answered successfully. */
515
+ export interface CursorRuleTypeGlobal extends ProtoMessage {}
516
+
517
+ export const CursorRuleTypeGlobalSchema: MessageCodec<CursorRuleTypeGlobal> =
518
+ pb<CursorRuleTypeGlobal>("agent.v1.CursorRuleTypeGlobal", []);
519
+
520
+ export interface CursorRuleType extends ProtoMessage {
521
+ type:
522
+ | { case: undefined; value?: undefined }
523
+ | { case: "global"; value: CursorRuleTypeGlobal };
524
+ }
525
+
526
+ export const CursorRuleTypeSchema: MessageCodec<CursorRuleType> =
527
+ pb<CursorRuleType>("agent.v1.CursorRuleType", [
528
+ {
529
+ kind: "oneof",
530
+ name: "type",
531
+ variants: [
532
+ {
533
+ no: 1,
534
+ name: "global",
535
+ kind: "message",
536
+ T: () => CursorRuleTypeGlobalSchema,
537
+ },
538
+ ],
539
+ },
540
+ ]);
541
+
542
+ export interface CursorRule extends ProtoMessage {
543
+ fullPath: string;
544
+ content: string;
545
+ type?: CursorRuleType;
546
+ source: number;
547
+ }
548
+
549
+ export const CursorRuleSchema: MessageCodec<CursorRule> = pb<CursorRule>(
550
+ "agent.v1.CursorRule",
551
+ [
552
+ { no: 1, name: "fullPath", kind: "string" },
553
+ { no: 2, name: "content", kind: "string" },
554
+ { no: 3, name: "type", kind: "message", T: () => CursorRuleTypeSchema },
555
+ { no: 4, name: "source", kind: "int32" },
556
+ ],
557
+ );
558
+
559
+ /** Empty definitions deliberately make the request-context tool list empty. */
560
+ export interface McpToolDefinition extends ProtoMessage {}
561
+
562
+ export const McpToolDefinitionSchema: MessageCodec<McpToolDefinition> =
563
+ pb<McpToolDefinition>("agent.v1.McpToolDefinition", []);
564
+
565
+ export interface RequestContext extends ProtoMessage {
566
+ rules: CursorRule[];
567
+ tools: McpToolDefinition[];
568
+ }
569
+
570
+ export const RequestContextSchema: MessageCodec<RequestContext> =
571
+ pb<RequestContext>("agent.v1.RequestContext", [
572
+ {
573
+ no: 2,
574
+ name: "rules",
575
+ kind: "message",
576
+ T: () => CursorRuleSchema,
577
+ repeat: true,
578
+ },
579
+ {
580
+ no: 7,
581
+ name: "tools",
582
+ kind: "message",
583
+ T: () => McpToolDefinitionSchema,
584
+ repeat: true,
585
+ },
586
+ ]);
587
+
588
+ export interface RequestContextArgs extends ProtoMessage {
589
+ notesSessionId?: string;
590
+ workspaceId?: string;
591
+ readOnlyPinnedTreeSha?: string;
592
+ readOnlyPluginCacheRoot?: string;
593
+ useCached?: boolean;
594
+ }
595
+
596
+ export const RequestContextArgsSchema: MessageCodec<RequestContextArgs> =
597
+ pb<RequestContextArgs>("agent.v1.RequestContextArgs", [
598
+ { no: 2, name: "notesSessionId", kind: "string", optional: true },
599
+ { no: 3, name: "workspaceId", kind: "string", optional: true },
600
+ { no: 4, name: "readOnlyPinnedTreeSha", kind: "string", optional: true },
601
+ { no: 5, name: "readOnlyPluginCacheRoot", kind: "string", optional: true },
602
+ { no: 7, name: "useCached", kind: "bool", optional: true },
603
+ ]);
604
+
605
+ export interface RequestContextSuccess extends ProtoMessage {
606
+ requestContext?: RequestContext;
607
+ servedFromDiskCache?: boolean;
608
+ }
609
+
610
+ export const RequestContextSuccessSchema: MessageCodec<RequestContextSuccess> =
611
+ pb<RequestContextSuccess>("agent.v1.RequestContextSuccess", [
612
+ {
613
+ no: 1,
614
+ name: "requestContext",
615
+ kind: "message",
616
+ T: () => RequestContextSchema,
617
+ },
618
+ { no: 2, name: "servedFromDiskCache", kind: "bool", optional: true },
619
+ ]);
620
+
621
+ export interface RequestContextError extends ProtoMessage {
622
+ error: string;
623
+ }
624
+
625
+ export const RequestContextErrorSchema: MessageCodec<RequestContextError> =
626
+ pb<RequestContextError>("agent.v1.RequestContextError", [
627
+ { no: 1, name: "error", kind: "string" },
628
+ ]);
629
+
630
+ export interface RequestContextRejected extends ProtoMessage {
631
+ reason: string;
632
+ }
633
+
634
+ export const RequestContextRejectedSchema: MessageCodec<RequestContextRejected> =
635
+ pb<RequestContextRejected>("agent.v1.RequestContextRejected", [
636
+ { no: 1, name: "reason", kind: "string" },
637
+ ]);
638
+
639
+ export interface RequestContextResult extends ProtoMessage {
640
+ result:
641
+ | { case: undefined; value?: undefined }
642
+ | { case: "success"; value: RequestContextSuccess }
643
+ | { case: "error"; value: RequestContextError }
644
+ | { case: "rejected"; value: RequestContextRejected };
645
+ }
646
+
647
+ export const RequestContextResultSchema: MessageCodec<RequestContextResult> =
648
+ pb<RequestContextResult>("agent.v1.RequestContextResult", [
649
+ {
650
+ kind: "oneof",
651
+ name: "result",
652
+ variants: [
653
+ {
654
+ no: 1,
655
+ name: "success",
656
+ kind: "message",
657
+ T: () => RequestContextSuccessSchema,
658
+ },
659
+ {
660
+ no: 2,
661
+ name: "error",
662
+ kind: "message",
663
+ T: () => RequestContextErrorSchema,
664
+ },
665
+ {
666
+ no: 3,
667
+ name: "rejected",
668
+ kind: "message",
669
+ T: () => RequestContextRejectedSchema,
670
+ },
671
+ ],
672
+ },
673
+ ]);
674
+
675
+ export interface ExecClientMessage extends ProtoMessage {
676
+ id: number;
677
+ execId: string;
678
+ message:
679
+ | { case: undefined; value?: undefined }
680
+ | { case: "requestContextResult"; value: RequestContextResult };
681
+ }
682
+
683
+ export const ExecClientMessageSchema: MessageCodec<ExecClientMessage> =
684
+ pb<ExecClientMessage>("agent.v1.ExecClientMessage", [
685
+ { no: 1, name: "id", kind: "uint32" },
686
+ { no: 15, name: "execId", kind: "string" },
687
+ {
688
+ kind: "oneof",
689
+ name: "message",
690
+ variants: [
691
+ {
692
+ no: 10,
693
+ name: "requestContextResult",
694
+ kind: "message",
695
+ T: () => RequestContextResultSchema,
696
+ },
697
+ ],
698
+ },
699
+ ]);
700
+
701
+ export interface ExecClientStreamClose extends ProtoMessage {
702
+ id: number;
703
+ }
704
+
705
+ export const ExecClientStreamCloseSchema: MessageCodec<ExecClientStreamClose> =
706
+ pb<ExecClientStreamClose>("agent.v1.ExecClientStreamClose", [
707
+ { no: 1, name: "id", kind: "uint32" },
708
+ ]);
709
+
710
+ export interface ExecClientThrow extends ProtoMessage {
711
+ id: number;
712
+ error: string;
713
+ stackTrace?: string;
714
+ errorCode?: string;
715
+ }
716
+
717
+ export const ExecClientThrowSchema: MessageCodec<ExecClientThrow> =
718
+ pb<ExecClientThrow>("agent.v1.ExecClientThrow", [
719
+ { no: 1, name: "id", kind: "uint32" },
720
+ { no: 2, name: "error", kind: "string" },
721
+ { no: 3, name: "stackTrace", kind: "string", optional: true },
722
+ { no: 4, name: "errorCode", kind: "string", optional: true },
723
+ ]);
724
+
725
+ export interface ExecClientControlMessage extends ProtoMessage {
726
+ message:
727
+ | { case: undefined; value?: undefined }
728
+ | { case: "streamClose"; value: ExecClientStreamClose }
729
+ | { case: "throw"; value: ExecClientThrow };
730
+ }
731
+
732
+ export const ExecClientControlMessageSchema: MessageCodec<ExecClientControlMessage> =
733
+ pb<ExecClientControlMessage>("agent.v1.ExecClientControlMessage", [
734
+ {
735
+ kind: "oneof",
736
+ name: "message",
737
+ variants: [
738
+ {
739
+ no: 1,
740
+ name: "streamClose",
741
+ kind: "message",
742
+ T: () => ExecClientStreamCloseSchema,
743
+ },
744
+ {
745
+ no: 2,
746
+ name: "throw",
747
+ kind: "message",
748
+ T: () => ExecClientThrowSchema,
749
+ },
750
+ ],
751
+ },
752
+ ]);
753
+
754
+ export interface ExecServerMessage extends ProtoMessage {
755
+ id: number;
756
+ execId: string;
757
+ message:
758
+ | { case: undefined; value?: undefined }
759
+ | { case: "requestContextArgs"; value: RequestContextArgs };
760
+ }
761
+
762
+ export const ExecServerMessageSchema: MessageCodec<ExecServerMessage> =
763
+ pb<ExecServerMessage>("agent.v1.ExecServerMessage", [
764
+ { no: 1, name: "id", kind: "uint32" },
765
+ { no: 15, name: "execId", kind: "string" },
766
+ {
767
+ kind: "oneof",
768
+ name: "message",
769
+ variants: [
770
+ {
771
+ no: 10,
772
+ name: "requestContextArgs",
773
+ kind: "message",
774
+ T: () => RequestContextArgsSchema,
775
+ },
776
+ ],
777
+ },
778
+ ]);
779
+
780
+ export interface AgentServerMessage extends ProtoMessage {
781
+ message:
782
+ | { case: undefined; value?: undefined }
783
+ | { case: "interactionUpdate"; value: InteractionUpdate }
784
+ | { case: "execServerMessage"; value: ExecServerMessage }
785
+ | { case: "kvServerMessage"; value: KvServerMessage }
786
+ | { case: "interactionQuery"; value: InteractionQuery };
787
+ }
788
+
789
+ export const AgentServerMessageSchema: MessageCodec<AgentServerMessage> =
790
+ pb<AgentServerMessage>("agent.v1.AgentServerMessage", [
791
+ {
792
+ kind: "oneof",
793
+ name: "message",
794
+ variants: [
795
+ {
796
+ no: 1,
797
+ name: "interactionUpdate",
798
+ kind: "message",
799
+ T: () => InteractionUpdateSchema,
800
+ },
801
+ {
802
+ no: 2,
803
+ name: "execServerMessage",
804
+ kind: "message",
805
+ T: () => ExecServerMessageSchema,
806
+ },
807
+ {
808
+ no: 4,
809
+ name: "kvServerMessage",
810
+ kind: "message",
811
+ T: () => KvServerMessageSchema,
812
+ },
813
+ {
814
+ no: 7,
815
+ name: "interactionQuery",
816
+ kind: "message",
817
+ T: () => InteractionQuerySchema,
818
+ },
819
+ ],
820
+ },
821
+ ]);
822
+
823
+ /**
824
+ * Queries require an interactive client answer. This provider has no UI or
825
+ * tool execution channel, so it recognizes the envelope and fails the turn
826
+ * explicitly instead of silently dropping a server request.
827
+ */
828
+ export interface InteractionQuery extends ProtoMessage {
829
+ id: number;
830
+ query:
831
+ | { case: undefined; value?: undefined }
832
+ | { case: "webSearchRequestQuery"; value: InteractionQueryPayload }
833
+ | { case: "askQuestionInteractionQuery"; value: InteractionQueryPayload }
834
+ | { case: "switchModeRequestQuery"; value: InteractionQueryPayload }
835
+ | { case: "exaSearchRequestQuery"; value: InteractionQueryPayload }
836
+ | { case: "exaFetchRequestQuery"; value: InteractionQueryPayload }
837
+ | { case: "createPlanRequestQuery"; value: InteractionQueryPayload }
838
+ | { case: "setupVmEnvironmentArgs"; value: InteractionQueryPayload }
839
+ | { case: "webFetchRequestQuery"; value: InteractionQueryPayload };
840
+ }
841
+
842
+ export interface InteractionQueryPayload extends ProtoMessage {}
843
+
844
+ export const InteractionQueryPayloadSchema: MessageCodec<InteractionQueryPayload> =
845
+ pb<InteractionQueryPayload>("agent.v1.InteractionQueryPayload", []);
846
+
847
+ export const InteractionQuerySchema: MessageCodec<InteractionQuery> =
848
+ pb<InteractionQuery>("agent.v1.InteractionQuery", [
849
+ { no: 1, name: "id", kind: "uint32" },
850
+ {
851
+ kind: "oneof",
852
+ name: "query",
853
+ variants: [
854
+ {
855
+ no: 2,
856
+ name: "webSearchRequestQuery",
857
+ kind: "message",
858
+ T: () => InteractionQueryPayloadSchema,
859
+ },
860
+ {
861
+ no: 3,
862
+ name: "askQuestionInteractionQuery",
863
+ kind: "message",
864
+ T: () => InteractionQueryPayloadSchema,
865
+ },
866
+ {
867
+ no: 4,
868
+ name: "switchModeRequestQuery",
869
+ kind: "message",
870
+ T: () => InteractionQueryPayloadSchema,
871
+ },
872
+ {
873
+ no: 5,
874
+ name: "exaSearchRequestQuery",
875
+ kind: "message",
876
+ T: () => InteractionQueryPayloadSchema,
877
+ },
878
+ {
879
+ no: 6,
880
+ name: "exaFetchRequestQuery",
881
+ kind: "message",
882
+ T: () => InteractionQueryPayloadSchema,
883
+ },
884
+ {
885
+ no: 7,
886
+ name: "createPlanRequestQuery",
887
+ kind: "message",
888
+ T: () => InteractionQueryPayloadSchema,
889
+ },
890
+ {
891
+ no: 8,
892
+ name: "setupVmEnvironmentArgs",
893
+ kind: "message",
894
+ T: () => InteractionQueryPayloadSchema,
895
+ },
896
+ {
897
+ no: 9,
898
+ name: "webFetchRequestQuery",
899
+ kind: "message",
900
+ T: () => InteractionQueryPayloadSchema,
901
+ },
902
+ ],
903
+ },
904
+ ]);
905
+
906
+ export interface InteractionUpdate extends ProtoMessage {
907
+ message:
908
+ | { case: undefined; value?: undefined }
909
+ | { case: "textDelta"; value: TextDeltaUpdate }
910
+ | { case: "partialToolCall"; value: ToolInteractionUpdate }
911
+ | { case: "toolCallDelta"; value: ToolInteractionUpdate }
912
+ | { case: "toolCallStarted"; value: ToolInteractionUpdate }
913
+ | { case: "toolCallCompleted"; value: ToolInteractionUpdate }
914
+ | { case: "thinkingDelta"; value: ThinkingDeltaUpdate }
915
+ | { case: "thinkingCompleted"; value: ThinkingCompletedUpdate }
916
+ | { case: "tokenDelta"; value: TokenDeltaUpdate }
917
+ | { case: "heartbeat"; value: HeartbeatUpdate }
918
+ | { case: "turnEnded"; value: TurnEndedUpdate };
919
+ }
920
+
921
+ export const InteractionUpdateSchema: MessageCodec<InteractionUpdate> =
922
+ pb<InteractionUpdate>("agent.v1.InteractionUpdate", [
923
+ {
924
+ kind: "oneof",
925
+ name: "message",
926
+ variants: [
927
+ {
928
+ no: 1,
929
+ name: "textDelta",
930
+ kind: "message",
931
+ T: () => TextDeltaUpdateSchema,
932
+ },
933
+ {
934
+ no: 7,
935
+ name: "partialToolCall",
936
+ kind: "message",
937
+ T: () => ToolInteractionUpdateSchema,
938
+ },
939
+ {
940
+ no: 15,
941
+ name: "toolCallDelta",
942
+ kind: "message",
943
+ T: () => ToolInteractionUpdateSchema,
944
+ },
945
+ {
946
+ no: 2,
947
+ name: "toolCallStarted",
948
+ kind: "message",
949
+ T: () => ToolInteractionUpdateSchema,
950
+ },
951
+ {
952
+ no: 3,
953
+ name: "toolCallCompleted",
954
+ kind: "message",
955
+ T: () => ToolInteractionUpdateSchema,
956
+ },
957
+ {
958
+ no: 4,
959
+ name: "thinkingDelta",
960
+ kind: "message",
961
+ T: () => ThinkingDeltaUpdateSchema,
962
+ },
963
+ {
964
+ no: 5,
965
+ name: "thinkingCompleted",
966
+ kind: "message",
967
+ T: () => ThinkingCompletedUpdateSchema,
968
+ },
969
+ {
970
+ no: 8,
971
+ name: "tokenDelta",
972
+ kind: "message",
973
+ T: () => TokenDeltaUpdateSchema,
974
+ },
975
+ {
976
+ no: 13,
977
+ name: "heartbeat",
978
+ kind: "message",
979
+ T: () => HeartbeatUpdateSchema,
980
+ },
981
+ {
982
+ no: 14,
983
+ name: "turnEnded",
984
+ kind: "message",
985
+ T: () => TurnEndedUpdateSchema,
986
+ },
987
+ ],
988
+ },
989
+ ]);
990
+
991
+ export interface ToolInteractionUpdate extends ProtoMessage {}
992
+
993
+ export const ToolInteractionUpdateSchema: MessageCodec<ToolInteractionUpdate> =
994
+ pb<ToolInteractionUpdate>("agent.v1.ToolInteractionUpdate", []);
995
+
996
+ export interface TextDeltaUpdate extends ProtoMessage {
997
+ text: string;
998
+ }
999
+
1000
+ export const TextDeltaUpdateSchema: MessageCodec<TextDeltaUpdate> =
1001
+ pb<TextDeltaUpdate>("agent.v1.TextDeltaUpdate", [
1002
+ { no: 1, name: "text", kind: "string" },
1003
+ ]);
1004
+
1005
+ export interface ThinkingDeltaUpdate extends ProtoMessage {
1006
+ text: string;
1007
+ }
1008
+
1009
+ export const ThinkingDeltaUpdateSchema: MessageCodec<ThinkingDeltaUpdate> =
1010
+ pb<ThinkingDeltaUpdate>("agent.v1.ThinkingDeltaUpdate", [
1011
+ { no: 1, name: "text", kind: "string" },
1012
+ ]);
1013
+
1014
+ export interface ThinkingCompletedUpdate extends ProtoMessage {
1015
+ thinkingDurationMs: number;
1016
+ }
1017
+
1018
+ export const ThinkingCompletedUpdateSchema: MessageCodec<ThinkingCompletedUpdate> =
1019
+ pb<ThinkingCompletedUpdate>("agent.v1.ThinkingCompletedUpdate", [
1020
+ { no: 1, name: "thinkingDurationMs", kind: "int32" },
1021
+ ]);
1022
+
1023
+ export interface TokenDeltaUpdate extends ProtoMessage {
1024
+ tokens: number;
1025
+ }
1026
+
1027
+ export const TokenDeltaUpdateSchema: MessageCodec<TokenDeltaUpdate> =
1028
+ pb<TokenDeltaUpdate>("agent.v1.TokenDeltaUpdate", [
1029
+ { no: 1, name: "tokens", kind: "int32" },
1030
+ ]);
1031
+
1032
+ export interface HeartbeatUpdate extends ProtoMessage {}
1033
+
1034
+ export const HeartbeatUpdateSchema: MessageCodec<HeartbeatUpdate> =
1035
+ pb<HeartbeatUpdate>("agent.v1.HeartbeatUpdate", []);
1036
+
1037
+ export interface TurnEndedUpdate extends ProtoMessage {}
1038
+
1039
+ export const TurnEndedUpdateSchema: MessageCodec<TurnEndedUpdate> =
1040
+ pb<TurnEndedUpdate>("agent.v1.TurnEndedUpdate", []);
1041
+
1042
+ export interface GetUsableModelsRequest extends ProtoMessage {
1043
+ customModelIds: string[];
1044
+ }
1045
+
1046
+ export const GetUsableModelsRequestSchema: MessageCodec<GetUsableModelsRequest> =
1047
+ pb<GetUsableModelsRequest>("agent.v1.GetUsableModelsRequest", [
1048
+ { no: 1, name: "customModelIds", kind: "string", repeat: true },
1049
+ ]);
1050
+
1051
+ export interface GetUsableModelsResponse extends ProtoMessage {
1052
+ models: ModelDetails[];
1053
+ }
1054
+
1055
+ export const GetUsableModelsResponseSchema: MessageCodec<GetUsableModelsResponse> =
1056
+ pb<GetUsableModelsResponse>("agent.v1.GetUsableModelsResponse", [
1057
+ {
1058
+ no: 1,
1059
+ name: "models",
1060
+ kind: "message",
1061
+ T: () => ModelDetailsSchema,
1062
+ repeat: true,
1063
+ },
1064
+ ]);