@opencode-ai/protocol 0.0.0-dev-17471

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 (71) hide show
  1. package/dist/api.d.ts +53 -0
  2. package/dist/api.js +73 -0
  3. package/dist/client.d.ts +61 -0
  4. package/dist/client.js +47 -0
  5. package/dist/errors.d.ts +133 -0
  6. package/dist/errors.js +105 -0
  7. package/dist/groups/agent.d.ts +194 -0
  8. package/dist/groups/agent.js +30 -0
  9. package/dist/groups/command.d.ts +63 -0
  10. package/dist/groups/command.js +20 -0
  11. package/dist/groups/config.d.ts +9 -0
  12. package/dist/groups/config.js +16 -0
  13. package/dist/groups/credential.d.ts +23 -0
  14. package/dist/groups/credential.js +29 -0
  15. package/dist/groups/debug.d.ts +17 -0
  16. package/dist/groups/debug.js +23 -0
  17. package/dist/groups/event.d.ts +12882 -0
  18. package/dist/groups/event.js +42 -0
  19. package/dist/groups/form.d.ts +781 -0
  20. package/dist/groups/form.js +97 -0
  21. package/dist/groups/fs.d.ts +35 -0
  22. package/dist/groups/fs.js +51 -0
  23. package/dist/groups/generate.d.ts +38 -0
  24. package/dist/groups/generate.js +27 -0
  25. package/dist/groups/health.d.ts +27 -0
  26. package/dist/groups/health.js +34 -0
  27. package/dist/groups/integration.d.ts +1152 -0
  28. package/dist/groups/integration.js +149 -0
  29. package/dist/groups/location.d.ts +16 -0
  30. package/dist/groups/location.js +34 -0
  31. package/dist/groups/mcp.d.ts +82 -0
  32. package/dist/groups/mcp.js +78 -0
  33. package/dist/groups/message.d.ts +592 -0
  34. package/dist/groups/message.js +37 -0
  35. package/dist/groups/migration.d.ts +28 -0
  36. package/dist/groups/migration.js +21 -0
  37. package/dist/groups/model.d.ts +218 -0
  38. package/dist/groups/model.js +33 -0
  39. package/dist/groups/permission.d.ts +153 -0
  40. package/dist/groups/permission.js +99 -0
  41. package/dist/groups/plugin.d.ts +14 -0
  42. package/dist/groups/plugin.js +20 -0
  43. package/dist/groups/project.d.ts +41 -0
  44. package/dist/groups/project.js +27 -0
  45. package/dist/groups/provider.d.ts +82 -0
  46. package/dist/groups/provider.js +34 -0
  47. package/dist/groups/pty.d.ts +145 -0
  48. package/dist/groups/pty.js +112 -0
  49. package/dist/groups/reference.d.ts +29 -0
  50. package/dist/groups/reference.js +20 -0
  51. package/dist/groups/server.d.ts +5 -0
  52. package/dist/groups/server.js +11 -0
  53. package/dist/groups/session.d.ts +9247 -0
  54. package/dist/groups/session.js +515 -0
  55. package/dist/groups/shell.d.ts +152 -0
  56. package/dist/groups/shell.js +82 -0
  57. package/dist/groups/skill.d.ts +20 -0
  58. package/dist/groups/skill.js +20 -0
  59. package/dist/groups/vcs.d.ts +46 -0
  60. package/dist/groups/vcs.js +47 -0
  61. package/dist/groups/websearch.d.ts +28 -0
  62. package/dist/groups/websearch.js +34 -0
  63. package/dist/groups/worktree.d.ts +42 -0
  64. package/dist/groups/worktree.js +54 -0
  65. package/dist/middleware/authorization.d.ts +13 -0
  66. package/dist/middleware/authorization.js +6 -0
  67. package/dist/middleware/schema-error.d.ts +13 -0
  68. package/dist/middleware/schema-error.js +4 -0
  69. package/dist/simulation.d.ts +1590 -0
  70. package/dist/simulation.js +460 -0
  71. package/package.json +44 -0
@@ -0,0 +1,592 @@
1
+ import { Schema } from "effect";
2
+ import { HttpApiEndpoint, HttpApiGroup } from "effect/unstable/httpapi";
3
+ import { InvalidCursorError, SessionNotFoundError, UnknownError } from "../errors.js";
4
+ export declare const SessionMessagesQuery: Schema.Struct<{
5
+ readonly limit: Schema.optional<Schema.NumberFromString>;
6
+ readonly order: Schema.optional<Schema.Union<readonly [Schema.Literal<"asc">, Schema.Literal<"desc">]>>;
7
+ readonly cursor: Schema.optional<Schema.String>;
8
+ }>;
9
+ export declare const MessageGroup: HttpApiGroup.HttpApiGroup<"server.message", HttpApiEndpoint.HttpApiEndpoint<"session.messages", "GET", "/api/session/:sessionID/message", Schema.toCodecStringTree<Schema.Struct<{
10
+ sessionID: Schema.brand<Schema.String, "SessionID"> & {
11
+ create: () => string & import("effect/Brand").Brand<"SessionID">;
12
+ descending: (id?: string) => string & import("effect/Brand").Brand<"SessionID">;
13
+ };
14
+ }>>, Schema.toCodecStringTree<Schema.Struct<{
15
+ readonly limit: Schema.optional<Schema.NumberFromString>;
16
+ readonly order: Schema.optional<Schema.Union<readonly [Schema.Literal<"asc">, Schema.Literal<"desc">]>>;
17
+ readonly cursor: Schema.optional<Schema.String>;
18
+ }>>, never, never, Schema.toCodecJson<Schema.Struct<{
19
+ readonly data: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
20
+ readonly type: Schema.tag<"agent-switched">;
21
+ readonly agent: Schema.brand<Schema.String, "Agent.ID">;
22
+ readonly previous: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Agent.ID">>>, Schema.optionalKey<Schema.brand<Schema.String, "Agent.ID">>, never, never>;
23
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
24
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
25
+ fromEvent: (eventID: import("@opencode-ai/schema/event").ID) => string & import("effect/Brand").Brand<"Session.Message.ID">;
26
+ };
27
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
28
+ readonly time: Schema.Struct<{
29
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
30
+ }>;
31
+ }>, Schema.Struct<{
32
+ readonly type: Schema.tag<"model-switched">;
33
+ readonly model: Schema.Struct<{
34
+ readonly id: Schema.brand<Schema.String, "Model.ID">;
35
+ readonly providerID: Schema.brand<Schema.String, "Provider.ID"> & {
36
+ opencode: string & import("effect/Brand").Brand<"Provider.ID">;
37
+ anthropic: string & import("effect/Brand").Brand<"Provider.ID">;
38
+ openai: string & import("effect/Brand").Brand<"Provider.ID">;
39
+ google: string & import("effect/Brand").Brand<"Provider.ID">;
40
+ googleVertex: string & import("effect/Brand").Brand<"Provider.ID">;
41
+ githubCopilot: string & import("effect/Brand").Brand<"Provider.ID">;
42
+ amazonBedrock: string & import("effect/Brand").Brand<"Provider.ID">;
43
+ azure: string & import("effect/Brand").Brand<"Provider.ID">;
44
+ openrouter: string & import("effect/Brand").Brand<"Provider.ID">;
45
+ mistral: string & import("effect/Brand").Brand<"Provider.ID">;
46
+ gitlab: string & import("effect/Brand").Brand<"Provider.ID">;
47
+ };
48
+ readonly variant: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Model.VariantID">>>, Schema.optionalKey<Schema.brand<Schema.String, "Model.VariantID">>, never, never>;
49
+ }> & {
50
+ parse: (input: string) => {
51
+ readonly id: string & import("effect/Brand").Brand<"Model.ID">;
52
+ readonly providerID: string & import("effect/Brand").Brand<"Provider.ID">;
53
+ readonly variant?: (string & import("effect/Brand").Brand<"Model.VariantID">) | undefined;
54
+ };
55
+ };
56
+ readonly previous: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
57
+ readonly id: Schema.brand<Schema.String, "Model.ID">;
58
+ readonly providerID: Schema.brand<Schema.String, "Provider.ID"> & {
59
+ opencode: string & import("effect/Brand").Brand<"Provider.ID">;
60
+ anthropic: string & import("effect/Brand").Brand<"Provider.ID">;
61
+ openai: string & import("effect/Brand").Brand<"Provider.ID">;
62
+ google: string & import("effect/Brand").Brand<"Provider.ID">;
63
+ googleVertex: string & import("effect/Brand").Brand<"Provider.ID">;
64
+ githubCopilot: string & import("effect/Brand").Brand<"Provider.ID">;
65
+ amazonBedrock: string & import("effect/Brand").Brand<"Provider.ID">;
66
+ azure: string & import("effect/Brand").Brand<"Provider.ID">;
67
+ openrouter: string & import("effect/Brand").Brand<"Provider.ID">;
68
+ mistral: string & import("effect/Brand").Brand<"Provider.ID">;
69
+ gitlab: string & import("effect/Brand").Brand<"Provider.ID">;
70
+ };
71
+ readonly variant: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Model.VariantID">>>, Schema.optionalKey<Schema.brand<Schema.String, "Model.VariantID">>, never, never>;
72
+ }> & {
73
+ parse: (input: string) => {
74
+ readonly id: string & import("effect/Brand").Brand<"Model.ID">;
75
+ readonly providerID: string & import("effect/Brand").Brand<"Provider.ID">;
76
+ readonly variant?: (string & import("effect/Brand").Brand<"Model.VariantID">) | undefined;
77
+ };
78
+ }>>, Schema.optionalKey<Schema.Struct<{
79
+ readonly id: Schema.brand<Schema.String, "Model.ID">;
80
+ readonly providerID: Schema.brand<Schema.String, "Provider.ID"> & {
81
+ opencode: string & import("effect/Brand").Brand<"Provider.ID">;
82
+ anthropic: string & import("effect/Brand").Brand<"Provider.ID">;
83
+ openai: string & import("effect/Brand").Brand<"Provider.ID">;
84
+ google: string & import("effect/Brand").Brand<"Provider.ID">;
85
+ googleVertex: string & import("effect/Brand").Brand<"Provider.ID">;
86
+ githubCopilot: string & import("effect/Brand").Brand<"Provider.ID">;
87
+ amazonBedrock: string & import("effect/Brand").Brand<"Provider.ID">;
88
+ azure: string & import("effect/Brand").Brand<"Provider.ID">;
89
+ openrouter: string & import("effect/Brand").Brand<"Provider.ID">;
90
+ mistral: string & import("effect/Brand").Brand<"Provider.ID">;
91
+ gitlab: string & import("effect/Brand").Brand<"Provider.ID">;
92
+ };
93
+ readonly variant: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Model.VariantID">>>, Schema.optionalKey<Schema.brand<Schema.String, "Model.VariantID">>, never, never>;
94
+ }> & {
95
+ parse: (input: string) => {
96
+ readonly id: string & import("effect/Brand").Brand<"Model.ID">;
97
+ readonly providerID: string & import("effect/Brand").Brand<"Provider.ID">;
98
+ readonly variant?: (string & import("effect/Brand").Brand<"Model.VariantID">) | undefined;
99
+ };
100
+ }>, never, never>;
101
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
102
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
103
+ fromEvent: (eventID: import("@opencode-ai/schema/event").ID) => string & import("effect/Brand").Brand<"Session.Message.ID">;
104
+ };
105
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
106
+ readonly time: Schema.Struct<{
107
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
108
+ }>;
109
+ }>, Schema.Struct<{
110
+ readonly type: Schema.tag<"location-switched">;
111
+ readonly location: Schema.Struct<{
112
+ readonly directory: Schema.brand<Schema.String, "AbsolutePath">;
113
+ readonly workspaceID: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Workspace.ID"> & {
114
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
115
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
116
+ }>>, Schema.optionalKey<Schema.brand<Schema.String, "Workspace.ID"> & {
117
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
118
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
119
+ }>, never, never>;
120
+ }>;
121
+ readonly projectID: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Project.ID"> & {
122
+ global: string & import("effect/Brand").Brand<"Project.ID">;
123
+ }>>, Schema.optionalKey<Schema.brand<Schema.String, "Project.ID"> & {
124
+ global: string & import("effect/Brand").Brand<"Project.ID">;
125
+ }>, never, never>;
126
+ readonly subpath: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "RelativePath">>>, Schema.optionalKey<Schema.brand<Schema.String, "RelativePath">>, never, never>;
127
+ readonly previous: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
128
+ readonly location: Schema.Struct<{
129
+ readonly directory: Schema.brand<Schema.String, "AbsolutePath">;
130
+ readonly workspaceID: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Workspace.ID"> & {
131
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
132
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
133
+ }>>, Schema.optionalKey<Schema.brand<Schema.String, "Workspace.ID"> & {
134
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
135
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
136
+ }>, never, never>;
137
+ }>;
138
+ readonly projectID: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Project.ID"> & {
139
+ global: string & import("effect/Brand").Brand<"Project.ID">;
140
+ }>>, Schema.optionalKey<Schema.brand<Schema.String, "Project.ID"> & {
141
+ global: string & import("effect/Brand").Brand<"Project.ID">;
142
+ }>, never, never>;
143
+ readonly subpath: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "RelativePath">>>, Schema.optionalKey<Schema.brand<Schema.String, "RelativePath">>, never, never>;
144
+ }>>>, Schema.optionalKey<Schema.Struct<{
145
+ readonly location: Schema.Struct<{
146
+ readonly directory: Schema.brand<Schema.String, "AbsolutePath">;
147
+ readonly workspaceID: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Workspace.ID"> & {
148
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
149
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
150
+ }>>, Schema.optionalKey<Schema.brand<Schema.String, "Workspace.ID"> & {
151
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
152
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
153
+ }>, never, never>;
154
+ }>;
155
+ readonly projectID: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Project.ID"> & {
156
+ global: string & import("effect/Brand").Brand<"Project.ID">;
157
+ }>>, Schema.optionalKey<Schema.brand<Schema.String, "Project.ID"> & {
158
+ global: string & import("effect/Brand").Brand<"Project.ID">;
159
+ }>, never, never>;
160
+ readonly subpath: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "RelativePath">>>, Schema.optionalKey<Schema.brand<Schema.String, "RelativePath">>, never, never>;
161
+ }>>, never, never>;
162
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
163
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
164
+ fromEvent: (eventID: import("@opencode-ai/schema/event").ID) => string & import("effect/Brand").Brand<"Session.Message.ID">;
165
+ };
166
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
167
+ readonly time: Schema.Struct<{
168
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
169
+ }>;
170
+ }>, Schema.Struct<{
171
+ readonly text: Schema.String;
172
+ readonly files: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
173
+ readonly data: Schema.String;
174
+ readonly mime: Schema.String;
175
+ readonly source: Schema.Union<readonly [Schema.Struct<{
176
+ readonly type: Schema.Literal<"inline">;
177
+ }>, Schema.Struct<{
178
+ readonly type: Schema.Literal<"uri">;
179
+ readonly uri: Schema.String;
180
+ }>]>;
181
+ readonly name: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
182
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
183
+ readonly mention: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
184
+ readonly start: Schema.Finite;
185
+ readonly end: Schema.Finite;
186
+ readonly text: Schema.String;
187
+ }>>>, Schema.optionalKey<Schema.Struct<{
188
+ readonly start: Schema.Finite;
189
+ readonly end: Schema.Finite;
190
+ readonly text: Schema.String;
191
+ }>>, never, never>;
192
+ }> & {
193
+ create: (input: import("@opencode-ai/schema/prompt").FileAttachment) => {
194
+ readonly data: string;
195
+ readonly source: {
196
+ readonly type: "inline";
197
+ } | {
198
+ readonly type: "uri";
199
+ readonly uri: string;
200
+ };
201
+ readonly mime: string;
202
+ readonly description?: string | undefined;
203
+ readonly name?: string | undefined;
204
+ readonly mention?: {
205
+ readonly start: number;
206
+ readonly end: number;
207
+ readonly text: string;
208
+ } | undefined;
209
+ };
210
+ }>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
211
+ readonly data: Schema.String;
212
+ readonly mime: Schema.String;
213
+ readonly source: Schema.Union<readonly [Schema.Struct<{
214
+ readonly type: Schema.Literal<"inline">;
215
+ }>, Schema.Struct<{
216
+ readonly type: Schema.Literal<"uri">;
217
+ readonly uri: Schema.String;
218
+ }>]>;
219
+ readonly name: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
220
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
221
+ readonly mention: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
222
+ readonly start: Schema.Finite;
223
+ readonly end: Schema.Finite;
224
+ readonly text: Schema.String;
225
+ }>>>, Schema.optionalKey<Schema.Struct<{
226
+ readonly start: Schema.Finite;
227
+ readonly end: Schema.Finite;
228
+ readonly text: Schema.String;
229
+ }>>, never, never>;
230
+ }> & {
231
+ create: (input: import("@opencode-ai/schema/prompt").FileAttachment) => {
232
+ readonly data: string;
233
+ readonly source: {
234
+ readonly type: "inline";
235
+ } | {
236
+ readonly type: "uri";
237
+ readonly uri: string;
238
+ };
239
+ readonly mime: string;
240
+ readonly description?: string | undefined;
241
+ readonly name?: string | undefined;
242
+ readonly mention?: {
243
+ readonly start: number;
244
+ readonly end: number;
245
+ readonly text: string;
246
+ } | undefined;
247
+ };
248
+ }>>, never, never>;
249
+ readonly agents: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
250
+ readonly name: Schema.String;
251
+ readonly mention: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
252
+ readonly start: Schema.Finite;
253
+ readonly end: Schema.Finite;
254
+ readonly text: Schema.String;
255
+ }>>>, Schema.optionalKey<Schema.Struct<{
256
+ readonly start: Schema.Finite;
257
+ readonly end: Schema.Finite;
258
+ readonly text: Schema.String;
259
+ }>>, never, never>;
260
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
261
+ readonly name: Schema.String;
262
+ readonly mention: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
263
+ readonly start: Schema.Finite;
264
+ readonly end: Schema.Finite;
265
+ readonly text: Schema.String;
266
+ }>>>, Schema.optionalKey<Schema.Struct<{
267
+ readonly start: Schema.Finite;
268
+ readonly end: Schema.Finite;
269
+ readonly text: Schema.String;
270
+ }>>, never, never>;
271
+ }>>>, never, never>;
272
+ readonly skills: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
273
+ readonly id: Schema.brand<Schema.String, "Skill.ID">;
274
+ readonly name: Schema.brand<Schema.String, "Skill.Name">;
275
+ readonly text: Schema.String;
276
+ readonly mention: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
277
+ readonly start: Schema.Finite;
278
+ readonly end: Schema.Finite;
279
+ readonly text: Schema.String;
280
+ }>>>, Schema.optionalKey<Schema.Struct<{
281
+ readonly start: Schema.Finite;
282
+ readonly end: Schema.Finite;
283
+ readonly text: Schema.String;
284
+ }>>, never, never>;
285
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
286
+ readonly id: Schema.brand<Schema.String, "Skill.ID">;
287
+ readonly name: Schema.brand<Schema.String, "Skill.Name">;
288
+ readonly text: Schema.String;
289
+ readonly mention: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
290
+ readonly start: Schema.Finite;
291
+ readonly end: Schema.Finite;
292
+ readonly text: Schema.String;
293
+ }>>>, Schema.optionalKey<Schema.Struct<{
294
+ readonly start: Schema.Finite;
295
+ readonly end: Schema.Finite;
296
+ readonly text: Schema.String;
297
+ }>>, never, never>;
298
+ }>>>, never, never>;
299
+ readonly type: Schema.tag<"user">;
300
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
301
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
302
+ fromEvent: (eventID: import("@opencode-ai/schema/event").ID) => string & import("effect/Brand").Brand<"Session.Message.ID">;
303
+ };
304
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
305
+ readonly time: Schema.Struct<{
306
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
307
+ }>;
308
+ }>, Schema.Struct<{
309
+ readonly text: Schema.String;
310
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
311
+ readonly type: Schema.tag<"synthetic">;
312
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
313
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
314
+ fromEvent: (eventID: import("@opencode-ai/schema/event").ID) => string & import("effect/Brand").Brand<"Session.Message.ID">;
315
+ };
316
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
317
+ readonly time: Schema.Struct<{
318
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
319
+ }>;
320
+ }>, Schema.Struct<{
321
+ readonly type: Schema.tag<"system">;
322
+ readonly text: Schema.String;
323
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
324
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
325
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
326
+ fromEvent: (eventID: import("@opencode-ai/schema/event").ID) => string & import("effect/Brand").Brand<"Session.Message.ID">;
327
+ };
328
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
329
+ readonly time: Schema.Struct<{
330
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
331
+ }>;
332
+ }>, Schema.Struct<{
333
+ readonly type: Schema.tag<"skill">;
334
+ readonly skill: Schema.brand<Schema.String, "Skill.ID">;
335
+ readonly name: Schema.brand<Schema.String, "Skill.Name">;
336
+ readonly text: Schema.String;
337
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
338
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
339
+ fromEvent: (eventID: import("@opencode-ai/schema/event").ID) => string & import("effect/Brand").Brand<"Session.Message.ID">;
340
+ };
341
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
342
+ readonly time: Schema.Struct<{
343
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
344
+ }>;
345
+ }>, Schema.Struct<{
346
+ readonly type: Schema.tag<"shell">;
347
+ readonly shellID: Schema.brand<Schema.String, "Shell.ID"> & {
348
+ create: () => string & import("effect/Brand").Brand<"Shell.ID">;
349
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Shell.ID">;
350
+ };
351
+ readonly command: Schema.String;
352
+ readonly status: Schema.Literals<readonly ["running", "exited", "timeout", "killed"]>;
353
+ readonly exit: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
354
+ readonly output: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
355
+ readonly output: Schema.String;
356
+ readonly cursor: Schema.Int;
357
+ readonly size: Schema.Int;
358
+ readonly truncated: Schema.Boolean;
359
+ }>>>, Schema.optionalKey<Schema.Struct<{
360
+ readonly output: Schema.String;
361
+ readonly cursor: Schema.Int;
362
+ readonly size: Schema.Int;
363
+ readonly truncated: Schema.Boolean;
364
+ }>>, never, never>;
365
+ readonly time: Schema.Struct<{
366
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
367
+ readonly completed: Schema.decodeTo<Schema.optional<Schema.toType<Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>>>, Schema.optionalKey<Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>>, never, never>;
368
+ }>;
369
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
370
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
371
+ fromEvent: (eventID: import("@opencode-ai/schema/event").ID) => string & import("effect/Brand").Brand<"Session.Message.ID">;
372
+ };
373
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
374
+ }>, Schema.Struct<{
375
+ readonly type: Schema.tag<"assistant">;
376
+ readonly agent: Schema.brand<Schema.String, "Agent.ID">;
377
+ readonly model: Schema.Struct<{
378
+ readonly id: Schema.brand<Schema.String, "Model.ID">;
379
+ readonly providerID: Schema.brand<Schema.String, "Provider.ID"> & {
380
+ opencode: string & import("effect/Brand").Brand<"Provider.ID">;
381
+ anthropic: string & import("effect/Brand").Brand<"Provider.ID">;
382
+ openai: string & import("effect/Brand").Brand<"Provider.ID">;
383
+ google: string & import("effect/Brand").Brand<"Provider.ID">;
384
+ googleVertex: string & import("effect/Brand").Brand<"Provider.ID">;
385
+ githubCopilot: string & import("effect/Brand").Brand<"Provider.ID">;
386
+ amazonBedrock: string & import("effect/Brand").Brand<"Provider.ID">;
387
+ azure: string & import("effect/Brand").Brand<"Provider.ID">;
388
+ openrouter: string & import("effect/Brand").Brand<"Provider.ID">;
389
+ mistral: string & import("effect/Brand").Brand<"Provider.ID">;
390
+ gitlab: string & import("effect/Brand").Brand<"Provider.ID">;
391
+ };
392
+ readonly variant: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Model.VariantID">>>, Schema.optionalKey<Schema.brand<Schema.String, "Model.VariantID">>, never, never>;
393
+ }> & {
394
+ parse: (input: string) => {
395
+ readonly id: string & import("effect/Brand").Brand<"Model.ID">;
396
+ readonly providerID: string & import("effect/Brand").Brand<"Provider.ID">;
397
+ readonly variant?: (string & import("effect/Brand").Brand<"Model.VariantID">) | undefined;
398
+ };
399
+ };
400
+ readonly content: Schema.$Array<Schema.toTaggedUnion<"type", readonly [Schema.Struct<{
401
+ readonly type: Schema.tag<"text">;
402
+ readonly text: Schema.String;
403
+ readonly state: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
404
+ }>, Schema.Struct<{
405
+ readonly type: Schema.tag<"reasoning">;
406
+ readonly text: Schema.String;
407
+ readonly state: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
408
+ readonly time: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
409
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
410
+ readonly completed: Schema.decodeTo<Schema.optional<Schema.toType<Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>>>, Schema.optionalKey<Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>>, never, never>;
411
+ }>>>, Schema.optionalKey<Schema.Struct<{
412
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
413
+ readonly completed: Schema.decodeTo<Schema.optional<Schema.toType<Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>>>, Schema.optionalKey<Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>>, never, never>;
414
+ }>>, never, never>;
415
+ }>, Schema.Struct<{
416
+ readonly type: Schema.tag<"tool">;
417
+ readonly id: Schema.String;
418
+ readonly name: Schema.String;
419
+ readonly executed: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
420
+ readonly providerState: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
421
+ readonly providerResultState: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
422
+ readonly state: Schema.toTaggedUnion<"status", readonly [Schema.Struct<{
423
+ readonly status: Schema.tag<"streaming">;
424
+ readonly input: Schema.String;
425
+ }>, Schema.Struct<{
426
+ readonly status: Schema.tag<"running">;
427
+ readonly input: Schema.$Record<Schema.String, Schema.Unknown>;
428
+ readonly metadata: Schema.$Record<Schema.String, Schema.Codec<Schema.Json, Schema.Json, never, never>>;
429
+ }>, Schema.Struct<{
430
+ readonly status: Schema.tag<"completed">;
431
+ readonly input: Schema.$Record<Schema.String, Schema.Unknown>;
432
+ readonly content: Schema.NonEmptyArray<Schema.Union<readonly [Schema.Struct<{
433
+ readonly type: Schema.Literal<"text">;
434
+ readonly text: Schema.String;
435
+ }>, Schema.Struct<{
436
+ readonly type: Schema.Literal<"file">;
437
+ readonly uri: Schema.String;
438
+ readonly mime: Schema.String;
439
+ readonly name: Schema.optional<Schema.String>;
440
+ }>]>>;
441
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Codec<Schema.Json, Schema.Json, never, never>>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Codec<Schema.Json, Schema.Json, never, never>>>, never, never>;
442
+ }>, Schema.Struct<{
443
+ readonly status: Schema.tag<"error">;
444
+ readonly input: Schema.$Record<Schema.String, Schema.Unknown>;
445
+ readonly error: Schema.Struct<{
446
+ readonly type: Schema.String;
447
+ readonly message: Schema.String;
448
+ readonly status: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
449
+ }>;
450
+ readonly content: Schema.decodeTo<Schema.optional<Schema.toType<Schema.NonEmptyArray<Schema.Union<readonly [Schema.Struct<{
451
+ readonly type: Schema.Literal<"text">;
452
+ readonly text: Schema.String;
453
+ }>, Schema.Struct<{
454
+ readonly type: Schema.Literal<"file">;
455
+ readonly uri: Schema.String;
456
+ readonly mime: Schema.String;
457
+ readonly name: Schema.optional<Schema.String>;
458
+ }>]>>>>, Schema.optionalKey<Schema.NonEmptyArray<Schema.Union<readonly [Schema.Struct<{
459
+ readonly type: Schema.Literal<"text">;
460
+ readonly text: Schema.String;
461
+ }>, Schema.Struct<{
462
+ readonly type: Schema.Literal<"file">;
463
+ readonly uri: Schema.String;
464
+ readonly mime: Schema.String;
465
+ readonly name: Schema.optional<Schema.String>;
466
+ }>]>>>, never, never>;
467
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Codec<Schema.Json, Schema.Json, never, never>>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Codec<Schema.Json, Schema.Json, never, never>>>, never, never>;
468
+ }>]>;
469
+ readonly time: Schema.Struct<{
470
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
471
+ readonly ran: Schema.decodeTo<Schema.optional<Schema.toType<Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>>>, Schema.optionalKey<Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>>, never, never>;
472
+ readonly completed: Schema.decodeTo<Schema.optional<Schema.toType<Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>>>, Schema.optionalKey<Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>>, never, never>;
473
+ }>;
474
+ }>]>>;
475
+ readonly snapshot: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
476
+ readonly start: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Snapshot.ID">>>, Schema.optionalKey<Schema.brand<Schema.String, "Snapshot.ID">>, never, never>;
477
+ readonly end: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Snapshot.ID">>>, Schema.optionalKey<Schema.brand<Schema.String, "Snapshot.ID">>, never, never>;
478
+ readonly files: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.brand<Schema.String, "RelativePath">>>>, Schema.optionalKey<Schema.$Array<Schema.brand<Schema.String, "RelativePath">>>, never, never>;
479
+ }>>>, Schema.optionalKey<Schema.Struct<{
480
+ readonly start: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Snapshot.ID">>>, Schema.optionalKey<Schema.brand<Schema.String, "Snapshot.ID">>, never, never>;
481
+ readonly end: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Snapshot.ID">>>, Schema.optionalKey<Schema.brand<Schema.String, "Snapshot.ID">>, never, never>;
482
+ readonly files: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.brand<Schema.String, "RelativePath">>>>, Schema.optionalKey<Schema.$Array<Schema.brand<Schema.String, "RelativePath">>>, never, never>;
483
+ }>>, never, never>;
484
+ readonly finish: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["stop", "length", "tool-calls", "content-filter", "error", "unknown"]>>>, Schema.optionalKey<Schema.Literals<readonly ["stop", "length", "tool-calls", "content-filter", "error", "unknown"]>>, never, never>;
485
+ readonly cost: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.Finite, "Money.USD"> & {
486
+ zero: number & import("effect/Brand").Brand<"Money.USD">;
487
+ }>>, Schema.optionalKey<Schema.brand<Schema.Finite, "Money.USD"> & {
488
+ zero: number & import("effect/Brand").Brand<"Money.USD">;
489
+ }>, never, never>;
490
+ readonly tokens: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
491
+ readonly input: Schema.Finite;
492
+ readonly output: Schema.Finite;
493
+ readonly reasoning: Schema.Finite;
494
+ readonly cache: Schema.Struct<{
495
+ readonly read: Schema.Finite;
496
+ readonly write: Schema.Finite;
497
+ }>;
498
+ }>>>, Schema.optionalKey<Schema.Struct<{
499
+ readonly input: Schema.Finite;
500
+ readonly output: Schema.Finite;
501
+ readonly reasoning: Schema.Finite;
502
+ readonly cache: Schema.Struct<{
503
+ readonly read: Schema.Finite;
504
+ readonly write: Schema.Finite;
505
+ }>;
506
+ }>>, never, never>;
507
+ readonly error: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
508
+ readonly type: Schema.String;
509
+ readonly message: Schema.String;
510
+ readonly status: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
511
+ }>>>, Schema.optionalKey<Schema.Struct<{
512
+ readonly type: Schema.String;
513
+ readonly message: Schema.String;
514
+ readonly status: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
515
+ }>>, never, never>;
516
+ readonly retry: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
517
+ readonly attempt: Schema.Int;
518
+ readonly at: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
519
+ readonly error: Schema.Struct<{
520
+ readonly type: Schema.String;
521
+ readonly message: Schema.String;
522
+ readonly status: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
523
+ }>;
524
+ }>>>, Schema.optionalKey<Schema.Struct<{
525
+ readonly attempt: Schema.Int;
526
+ readonly at: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
527
+ readonly error: Schema.Struct<{
528
+ readonly type: Schema.String;
529
+ readonly message: Schema.String;
530
+ readonly status: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
531
+ }>;
532
+ }>>, never, never>;
533
+ readonly time: Schema.Struct<{
534
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
535
+ readonly completed: Schema.decodeTo<Schema.optional<Schema.toType<Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>>>, Schema.optionalKey<Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>>, never, never>;
536
+ }>;
537
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
538
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
539
+ fromEvent: (eventID: import("@opencode-ai/schema/event").ID) => string & import("effect/Brand").Brand<"Session.Message.ID">;
540
+ };
541
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
542
+ }>, Schema.Union<readonly [Schema.Struct<{
543
+ readonly status: Schema.tag<"running">;
544
+ readonly reason: Schema.Literals<readonly ["auto", "manual"]>;
545
+ readonly summary: Schema.String;
546
+ readonly recent: Schema.String;
547
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
548
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
549
+ fromEvent: (eventID: import("@opencode-ai/schema/event").ID) => string & import("effect/Brand").Brand<"Session.Message.ID">;
550
+ };
551
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
552
+ readonly time: Schema.Struct<{
553
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
554
+ }>;
555
+ readonly type: Schema.tag<"compaction">;
556
+ }>, Schema.Struct<{
557
+ readonly status: Schema.tag<"completed">;
558
+ readonly reason: Schema.Literals<readonly ["auto", "manual"]>;
559
+ readonly summary: Schema.String;
560
+ readonly recent: Schema.String;
561
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
562
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
563
+ fromEvent: (eventID: import("@opencode-ai/schema/event").ID) => string & import("effect/Brand").Brand<"Session.Message.ID">;
564
+ };
565
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
566
+ readonly time: Schema.Struct<{
567
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
568
+ }>;
569
+ readonly type: Schema.tag<"compaction">;
570
+ }>, Schema.Struct<{
571
+ readonly status: Schema.tag<"failed">;
572
+ readonly reason: Schema.Literals<readonly ["auto", "manual"]>;
573
+ readonly error: Schema.Struct<{
574
+ readonly type: Schema.String;
575
+ readonly message: Schema.String;
576
+ readonly status: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
577
+ }>;
578
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
579
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
580
+ fromEvent: (eventID: import("@opencode-ai/schema/event").ID) => string & import("effect/Brand").Brand<"Session.Message.ID">;
581
+ };
582
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
583
+ readonly time: Schema.Struct<{
584
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
585
+ }>;
586
+ readonly type: Schema.tag<"compaction">;
587
+ }>]>]>>;
588
+ readonly cursor: Schema.Struct<{
589
+ readonly previous: Schema.optional<Schema.String>;
590
+ readonly next: Schema.optional<Schema.String>;
591
+ }>;
592
+ }>>, Schema.toCodecJson<typeof UnknownError | typeof SessionNotFoundError | typeof InvalidCursorError>, never, never>, false>;
@@ -0,0 +1,37 @@
1
+ import { Session } from "@opencode-ai/schema/session";
2
+ import { SessionMessage } from "@opencode-ai/schema/session-message";
3
+ import { Schema } from "effect";
4
+ import { HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/unstable/httpapi";
5
+ import { InvalidCursorError, SessionNotFoundError, UnknownError } from "../errors.js";
6
+ export const SessionMessagesQuery = Schema.Struct({
7
+ limit: Schema.optional(Schema.NumberFromString.check(Schema.isInt(), Schema.isGreaterThanOrEqualTo(1), Schema.isLessThanOrEqualTo(200))).annotate({
8
+ description: "Maximum number of messages to return. When omitted, the endpoint returns its default page size.",
9
+ }),
10
+ order: Schema.optional(Schema.Union([Schema.Literal("asc"), Schema.Literal("desc")])).annotate({
11
+ description: "Message order for the first page. Use desc for newest first or asc for oldest first.",
12
+ }),
13
+ cursor: Schema.optional(Schema.String.annotate({
14
+ description: "Opaque pagination cursor returned as cursor.previous or cursor.next in the previous response. Do not combine with order.",
15
+ })),
16
+ }).annotate({ identifier: "SessionMessagesQuery" });
17
+ export const MessageGroup = HttpApiGroup.make("server.message")
18
+ .add(HttpApiEndpoint.get("session.messages", "/api/session/:sessionID/message", {
19
+ params: { sessionID: Session.ID },
20
+ query: SessionMessagesQuery,
21
+ success: Schema.Struct({
22
+ data: Schema.Array(SessionMessage.Info),
23
+ cursor: Schema.Struct({
24
+ previous: Schema.String.pipe(Schema.optional),
25
+ next: Schema.String.pipe(Schema.optional),
26
+ }),
27
+ }).annotate({ identifier: "SessionMessagesResponse" }),
28
+ error: [InvalidCursorError, SessionNotFoundError, UnknownError],
29
+ }).annotateMerge(OpenApi.annotations({
30
+ identifier: "v2.message.list",
31
+ summary: "Get session messages",
32
+ description: "Retrieve projected messages for a session. Items keep the requested order across pages; use cursor.next or cursor.previous to move through the ordered timeline.",
33
+ })))
34
+ .annotateMerge(OpenApi.annotations({
35
+ title: "session",
36
+ description: "Experimental message routes.",
37
+ }));