@opencode-ai/protocol 0.0.0-next-14661

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 (57) hide show
  1. package/dist/api.d.ts +44 -0
  2. package/dist/api.js +61 -0
  3. package/dist/client.d.ts +69 -0
  4. package/dist/client.js +52 -0
  5. package/dist/errors.d.ts +97 -0
  6. package/dist/errors.js +74 -0
  7. package/dist/groups/agent.d.ts +91 -0
  8. package/dist/groups/agent.js +15 -0
  9. package/dist/groups/command.d.ts +51 -0
  10. package/dist/groups/command.js +20 -0
  11. package/dist/groups/credential.d.ts +23 -0
  12. package/dist/groups/credential.js +28 -0
  13. package/dist/groups/event.d.ts +16086 -0
  14. package/dist/groups/event.js +42 -0
  15. package/dist/groups/fs.d.ts +35 -0
  16. package/dist/groups/fs.js +51 -0
  17. package/dist/groups/generate.d.ts +32 -0
  18. package/dist/groups/generate.js +27 -0
  19. package/dist/groups/health.d.ts +5 -0
  20. package/dist/groups/health.js +9 -0
  21. package/dist/groups/integration.d.ts +105 -0
  22. package/dist/groups/integration.js +98 -0
  23. package/dist/groups/location.d.ts +16 -0
  24. package/dist/groups/location.js +32 -0
  25. package/dist/groups/mcp.d.ts +30 -0
  26. package/dist/groups/mcp.js +17 -0
  27. package/dist/groups/message.d.ts +409 -0
  28. package/dist/groups/message.js +37 -0
  29. package/dist/groups/model.d.ts +151 -0
  30. package/dist/groups/model.js +22 -0
  31. package/dist/groups/permission.d.ts +153 -0
  32. package/dist/groups/permission.js +99 -0
  33. package/dist/groups/plugin.d.ts +14 -0
  34. package/dist/groups/plugin.js +20 -0
  35. package/dist/groups/project-copy.d.ts +49 -0
  36. package/dist/groups/project-copy.js +44 -0
  37. package/dist/groups/project.d.ts +24 -0
  38. package/dist/groups/project.js +30 -0
  39. package/dist/groups/provider.d.ts +156 -0
  40. package/dist/groups/provider.js +34 -0
  41. package/dist/groups/pty.d.ts +145 -0
  42. package/dist/groups/pty.js +111 -0
  43. package/dist/groups/question.d.ts +92 -0
  44. package/dist/groups/question.js +56 -0
  45. package/dist/groups/reference.d.ts +13 -0
  46. package/dist/groups/reference.js +20 -0
  47. package/dist/groups/session.d.ts +8020 -0
  48. package/dist/groups/session.js +331 -0
  49. package/dist/groups/shell.d.ts +120 -0
  50. package/dist/groups/shell.js +65 -0
  51. package/dist/groups/skill.d.ts +19 -0
  52. package/dist/groups/skill.js +20 -0
  53. package/dist/middleware/authorization.d.ts +13 -0
  54. package/dist/middleware/authorization.js +6 -0
  55. package/dist/middleware/schema-error.d.ts +13 -0
  56. package/dist/middleware/schema-error.js +4 -0
  57. package/package.json +38 -0
@@ -0,0 +1,409 @@
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", HttpApiEndpoint.StringTree<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
+ }>>, HttpApiEndpoint.StringTree<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
+ }>>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.Json<Schema.Struct<{
19
+ readonly data: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
20
+ readonly type: Schema.Literal<"agent-switched">;
21
+ readonly agent: Schema.String;
22
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
23
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
24
+ };
25
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
26
+ readonly time: Schema.Struct<{
27
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
28
+ }>;
29
+ }>, Schema.Struct<{
30
+ readonly type: Schema.Literal<"model-switched">;
31
+ readonly model: Schema.Struct<{
32
+ readonly id: Schema.brand<Schema.String, "ModelV2.ID">;
33
+ readonly providerID: Schema.brand<Schema.String, "ProviderV2.ID"> & {
34
+ opencode: string & import("effect/Brand").Brand<"ProviderV2.ID">;
35
+ anthropic: string & import("effect/Brand").Brand<"ProviderV2.ID">;
36
+ openai: string & import("effect/Brand").Brand<"ProviderV2.ID">;
37
+ google: string & import("effect/Brand").Brand<"ProviderV2.ID">;
38
+ googleVertex: string & import("effect/Brand").Brand<"ProviderV2.ID">;
39
+ githubCopilot: string & import("effect/Brand").Brand<"ProviderV2.ID">;
40
+ amazonBedrock: string & import("effect/Brand").Brand<"ProviderV2.ID">;
41
+ azure: string & import("effect/Brand").Brand<"ProviderV2.ID">;
42
+ openrouter: string & import("effect/Brand").Brand<"ProviderV2.ID">;
43
+ mistral: string & import("effect/Brand").Brand<"ProviderV2.ID">;
44
+ gitlab: string & import("effect/Brand").Brand<"ProviderV2.ID">;
45
+ };
46
+ readonly variant: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "VariantID">>>, Schema.optionalKey<Schema.brand<Schema.String, "VariantID">>, never, never>;
47
+ }>;
48
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
49
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
50
+ };
51
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
52
+ readonly time: Schema.Struct<{
53
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
54
+ }>;
55
+ }>, Schema.Struct<{
56
+ readonly text: Schema.String;
57
+ readonly files: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
58
+ readonly uri: Schema.String;
59
+ readonly mime: Schema.String;
60
+ readonly name: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
61
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
62
+ readonly source: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
63
+ readonly start: Schema.Finite;
64
+ readonly end: Schema.Finite;
65
+ readonly text: Schema.String;
66
+ }>>>, Schema.optionalKey<Schema.Struct<{
67
+ readonly start: Schema.Finite;
68
+ readonly end: Schema.Finite;
69
+ readonly text: Schema.String;
70
+ }>>, never, never>;
71
+ }> & {
72
+ create: (input: import("@opencode-ai/schema/prompt").FileAttachment) => {
73
+ readonly uri: string;
74
+ readonly mime: string;
75
+ readonly name?: string | undefined;
76
+ readonly description?: string | undefined;
77
+ readonly source?: {
78
+ readonly start: number;
79
+ readonly end: number;
80
+ readonly text: string;
81
+ } | undefined;
82
+ };
83
+ }>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
84
+ readonly uri: Schema.String;
85
+ readonly mime: Schema.String;
86
+ readonly name: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
87
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
88
+ readonly source: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
89
+ readonly start: Schema.Finite;
90
+ readonly end: Schema.Finite;
91
+ readonly text: Schema.String;
92
+ }>>>, Schema.optionalKey<Schema.Struct<{
93
+ readonly start: Schema.Finite;
94
+ readonly end: Schema.Finite;
95
+ readonly text: Schema.String;
96
+ }>>, never, never>;
97
+ }> & {
98
+ create: (input: import("@opencode-ai/schema/prompt").FileAttachment) => {
99
+ readonly uri: string;
100
+ readonly mime: string;
101
+ readonly name?: string | undefined;
102
+ readonly description?: string | undefined;
103
+ readonly source?: {
104
+ readonly start: number;
105
+ readonly end: number;
106
+ readonly text: string;
107
+ } | undefined;
108
+ };
109
+ }>>, never, never>;
110
+ readonly agents: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
111
+ readonly name: Schema.String;
112
+ readonly source: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
113
+ readonly start: Schema.Finite;
114
+ readonly end: Schema.Finite;
115
+ readonly text: Schema.String;
116
+ }>>>, Schema.optionalKey<Schema.Struct<{
117
+ readonly start: Schema.Finite;
118
+ readonly end: Schema.Finite;
119
+ readonly text: Schema.String;
120
+ }>>, never, never>;
121
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
122
+ readonly name: Schema.String;
123
+ readonly source: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
124
+ readonly start: Schema.Finite;
125
+ readonly end: Schema.Finite;
126
+ readonly text: Schema.String;
127
+ }>>>, Schema.optionalKey<Schema.Struct<{
128
+ readonly start: Schema.Finite;
129
+ readonly end: Schema.Finite;
130
+ readonly text: Schema.String;
131
+ }>>, never, never>;
132
+ }>>>, never, never>;
133
+ readonly type: Schema.Literal<"user">;
134
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
135
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
136
+ };
137
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
138
+ readonly time: Schema.Struct<{
139
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
140
+ }>;
141
+ }>, Schema.Struct<{
142
+ readonly sessionID: Schema.brand<Schema.String, "SessionID"> & {
143
+ create: () => string & import("effect/Brand").Brand<"SessionID">;
144
+ descending: (id?: string) => string & import("effect/Brand").Brand<"SessionID">;
145
+ };
146
+ readonly text: Schema.String;
147
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
148
+ readonly type: Schema.Literal<"synthetic">;
149
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
150
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
151
+ };
152
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
153
+ readonly time: Schema.Struct<{
154
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
155
+ }>;
156
+ }>, Schema.Struct<{
157
+ readonly type: Schema.Literal<"system">;
158
+ readonly text: Schema.String;
159
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
160
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
161
+ };
162
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
163
+ readonly time: Schema.Struct<{
164
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
165
+ }>;
166
+ }>, Schema.Struct<{
167
+ readonly type: Schema.Literal<"skill">;
168
+ readonly name: Schema.String;
169
+ readonly text: Schema.String;
170
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
171
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
172
+ };
173
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
174
+ readonly time: Schema.Struct<{
175
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
176
+ }>;
177
+ }>, Schema.Struct<{
178
+ readonly type: Schema.Literal<"shell">;
179
+ readonly callID: Schema.String;
180
+ readonly command: Schema.String;
181
+ readonly output: Schema.String;
182
+ readonly time: Schema.Struct<{
183
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
184
+ 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>;
185
+ }>;
186
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
187
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
188
+ };
189
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
190
+ }>, Schema.Struct<{
191
+ readonly type: Schema.Literal<"assistant">;
192
+ readonly agent: Schema.String;
193
+ readonly model: Schema.Struct<{
194
+ readonly id: Schema.brand<Schema.String, "ModelV2.ID">;
195
+ readonly providerID: Schema.brand<Schema.String, "ProviderV2.ID"> & {
196
+ opencode: string & import("effect/Brand").Brand<"ProviderV2.ID">;
197
+ anthropic: string & import("effect/Brand").Brand<"ProviderV2.ID">;
198
+ openai: string & import("effect/Brand").Brand<"ProviderV2.ID">;
199
+ google: string & import("effect/Brand").Brand<"ProviderV2.ID">;
200
+ googleVertex: string & import("effect/Brand").Brand<"ProviderV2.ID">;
201
+ githubCopilot: string & import("effect/Brand").Brand<"ProviderV2.ID">;
202
+ amazonBedrock: string & import("effect/Brand").Brand<"ProviderV2.ID">;
203
+ azure: string & import("effect/Brand").Brand<"ProviderV2.ID">;
204
+ openrouter: string & import("effect/Brand").Brand<"ProviderV2.ID">;
205
+ mistral: string & import("effect/Brand").Brand<"ProviderV2.ID">;
206
+ gitlab: string & import("effect/Brand").Brand<"ProviderV2.ID">;
207
+ };
208
+ readonly variant: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "VariantID">>>, Schema.optionalKey<Schema.brand<Schema.String, "VariantID">>, never, never>;
209
+ }>;
210
+ readonly content: Schema.$Array<Schema.toTaggedUnion<"type", readonly [Schema.Struct<{
211
+ readonly type: Schema.Literal<"text">;
212
+ readonly id: Schema.String;
213
+ readonly text: Schema.String;
214
+ }>, Schema.Struct<{
215
+ readonly type: Schema.Literal<"reasoning">;
216
+ readonly id: Schema.String;
217
+ readonly text: Schema.String;
218
+ readonly providerMetadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.$Record<Schema.String, Schema.Unknown>>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.$Record<Schema.String, Schema.Unknown>>>, never, never>;
219
+ readonly time: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
220
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
221
+ 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>;
222
+ }>>>, Schema.optionalKey<Schema.Struct<{
223
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
224
+ 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>;
225
+ }>>, never, never>;
226
+ }>, Schema.Struct<{
227
+ readonly type: Schema.Literal<"tool">;
228
+ readonly id: Schema.String;
229
+ readonly name: Schema.String;
230
+ readonly provider: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
231
+ readonly executed: Schema.Boolean;
232
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.$Record<Schema.String, Schema.Unknown>>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.$Record<Schema.String, Schema.Unknown>>>, never, never>;
233
+ readonly resultMetadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.$Record<Schema.String, Schema.Unknown>>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.$Record<Schema.String, Schema.Unknown>>>, never, never>;
234
+ }>>>, Schema.optionalKey<Schema.Struct<{
235
+ readonly executed: Schema.Boolean;
236
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.$Record<Schema.String, Schema.Unknown>>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.$Record<Schema.String, Schema.Unknown>>>, never, never>;
237
+ readonly resultMetadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.$Record<Schema.String, Schema.Unknown>>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.$Record<Schema.String, Schema.Unknown>>>, never, never>;
238
+ }>>, never, never>;
239
+ readonly state: Schema.toTaggedUnion<"status", readonly [Schema.Struct<{
240
+ readonly status: Schema.Literal<"pending">;
241
+ readonly input: Schema.String;
242
+ }>, Schema.Struct<{
243
+ readonly status: Schema.Literal<"running">;
244
+ readonly input: Schema.$Record<Schema.String, Schema.Unknown>;
245
+ readonly structured: Schema.$Record<Schema.String, Schema.Unknown>;
246
+ readonly content: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
247
+ readonly type: Schema.Literal<"text">;
248
+ readonly text: Schema.String;
249
+ }>, Schema.Struct<{
250
+ readonly type: Schema.Literal<"file">;
251
+ readonly uri: Schema.String;
252
+ readonly mime: Schema.String;
253
+ readonly name: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
254
+ }>]>>;
255
+ }>, Schema.Struct<{
256
+ readonly status: Schema.Literal<"completed">;
257
+ readonly input: Schema.$Record<Schema.String, Schema.Unknown>;
258
+ readonly attachments: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
259
+ readonly uri: Schema.String;
260
+ readonly mime: Schema.String;
261
+ readonly name: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
262
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
263
+ readonly source: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
264
+ readonly start: Schema.Finite;
265
+ readonly end: Schema.Finite;
266
+ readonly text: Schema.String;
267
+ }>>>, Schema.optionalKey<Schema.Struct<{
268
+ readonly start: Schema.Finite;
269
+ readonly end: Schema.Finite;
270
+ readonly text: Schema.String;
271
+ }>>, never, never>;
272
+ }> & {
273
+ create: (input: import("@opencode-ai/schema/prompt").FileAttachment) => {
274
+ readonly uri: string;
275
+ readonly mime: string;
276
+ readonly name?: string | undefined;
277
+ readonly description?: string | undefined;
278
+ readonly source?: {
279
+ readonly start: number;
280
+ readonly end: number;
281
+ readonly text: string;
282
+ } | undefined;
283
+ };
284
+ }>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
285
+ readonly uri: Schema.String;
286
+ readonly mime: Schema.String;
287
+ readonly name: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
288
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
289
+ readonly source: 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
+ }> & {
299
+ create: (input: import("@opencode-ai/schema/prompt").FileAttachment) => {
300
+ readonly uri: string;
301
+ readonly mime: string;
302
+ readonly name?: string | undefined;
303
+ readonly description?: string | undefined;
304
+ readonly source?: {
305
+ readonly start: number;
306
+ readonly end: number;
307
+ readonly text: string;
308
+ } | undefined;
309
+ };
310
+ }>>, never, never>;
311
+ readonly content: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
312
+ readonly type: Schema.Literal<"text">;
313
+ readonly text: Schema.String;
314
+ }>, Schema.Struct<{
315
+ readonly type: Schema.Literal<"file">;
316
+ readonly uri: Schema.String;
317
+ readonly mime: Schema.String;
318
+ readonly name: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
319
+ }>]>>;
320
+ readonly outputPaths: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.String>>>, Schema.optionalKey<Schema.$Array<Schema.String>>, never, never>;
321
+ readonly structured: Schema.$Record<Schema.String, Schema.Unknown>;
322
+ readonly result: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Unknown>>, Schema.optionalKey<Schema.Unknown>, never, never>;
323
+ }>, Schema.Struct<{
324
+ readonly status: Schema.Literal<"error">;
325
+ readonly input: Schema.$Record<Schema.String, Schema.Unknown>;
326
+ readonly content: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
327
+ readonly type: Schema.Literal<"text">;
328
+ readonly text: Schema.String;
329
+ }>, Schema.Struct<{
330
+ readonly type: Schema.Literal<"file">;
331
+ readonly uri: Schema.String;
332
+ readonly mime: Schema.String;
333
+ readonly name: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
334
+ }>]>>;
335
+ readonly structured: Schema.$Record<Schema.String, Schema.Unknown>;
336
+ readonly error: Schema.Struct<{
337
+ readonly type: Schema.Literal<"unknown">;
338
+ readonly message: Schema.String;
339
+ }>;
340
+ readonly result: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Unknown>>, Schema.optionalKey<Schema.Unknown>, never, never>;
341
+ }>]>;
342
+ readonly time: Schema.Struct<{
343
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
344
+ 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>;
345
+ 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>;
346
+ readonly pruned: 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>;
347
+ }>;
348
+ }>]>>;
349
+ readonly snapshot: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
350
+ readonly start: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
351
+ readonly end: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
352
+ 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>;
353
+ }>>>, Schema.optionalKey<Schema.Struct<{
354
+ readonly start: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
355
+ readonly end: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
356
+ 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>;
357
+ }>>, never, never>;
358
+ readonly finish: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
359
+ readonly cost: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Finite>>, Schema.optionalKey<Schema.Finite>, never, never>;
360
+ readonly tokens: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
361
+ readonly input: Schema.Finite;
362
+ readonly output: Schema.Finite;
363
+ readonly reasoning: Schema.Finite;
364
+ readonly cache: Schema.Struct<{
365
+ readonly read: Schema.Finite;
366
+ readonly write: Schema.Finite;
367
+ }>;
368
+ }>>>, Schema.optionalKey<Schema.Struct<{
369
+ readonly input: Schema.Finite;
370
+ readonly output: Schema.Finite;
371
+ readonly reasoning: Schema.Finite;
372
+ readonly cache: Schema.Struct<{
373
+ readonly read: Schema.Finite;
374
+ readonly write: Schema.Finite;
375
+ }>;
376
+ }>>, never, never>;
377
+ readonly error: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
378
+ readonly type: Schema.Literal<"unknown">;
379
+ readonly message: Schema.String;
380
+ }>>>, Schema.optionalKey<Schema.Struct<{
381
+ readonly type: Schema.Literal<"unknown">;
382
+ readonly message: Schema.String;
383
+ }>>, never, never>;
384
+ readonly time: Schema.Struct<{
385
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
386
+ 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>;
387
+ }>;
388
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
389
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
390
+ };
391
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
392
+ }>, Schema.Struct<{
393
+ readonly id: Schema.brand<Schema.String, "Session.Message.ID"> & {
394
+ create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
395
+ };
396
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
397
+ readonly time: Schema.Struct<{
398
+ readonly created: Schema.decodeTo<Schema.DateTimeUtc, Schema.Finite, never, never>;
399
+ }>;
400
+ readonly type: Schema.Literal<"compaction">;
401
+ readonly reason: Schema.Literals<readonly ["auto", "manual"]>;
402
+ readonly summary: Schema.String;
403
+ readonly recent: Schema.String;
404
+ }>]>>;
405
+ readonly cursor: Schema.Struct<{
406
+ readonly previous: Schema.optional<Schema.String>;
407
+ readonly next: Schema.optional<Schema.String>;
408
+ }>;
409
+ }>>, HttpApiEndpoint.Json<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.Message),
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.session.messages",
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: "messages",
36
+ description: "Experimental message routes.",
37
+ }));
@@ -0,0 +1,151 @@
1
+ import { Model } from "@opencode-ai/schema/model";
2
+ import { Location } from "@opencode-ai/schema/location";
3
+ import { Schema } from "effect";
4
+ import { HttpApiEndpoint, HttpApiGroup } from "effect/unstable/httpapi";
5
+ import { ServiceUnavailableError } from "../errors.js";
6
+ export declare const ModelGroup: HttpApiGroup.HttpApiGroup<"server.model", HttpApiEndpoint.HttpApiEndpoint<"model.list", "GET", "/api/model", HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.StringTree<Schema.Struct<{
7
+ readonly location: Schema.optional<Schema.Struct<{
8
+ readonly directory: Schema.optional<Schema.String>;
9
+ readonly workspace: Schema.optional<Schema.String>;
10
+ }>>;
11
+ }>>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.Json<Schema.Struct<{
12
+ readonly location: typeof Location.Info;
13
+ readonly data: Schema.$Array<Schema.Struct<{
14
+ readonly id: Schema.brand<Schema.String, "ModelV2.ID">;
15
+ readonly providerID: Schema.brand<Schema.String, "ProviderV2.ID"> & {
16
+ opencode: string & import("effect/Brand").Brand<"ProviderV2.ID">;
17
+ anthropic: string & import("effect/Brand").Brand<"ProviderV2.ID">;
18
+ openai: string & import("effect/Brand").Brand<"ProviderV2.ID">;
19
+ google: string & import("effect/Brand").Brand<"ProviderV2.ID">;
20
+ googleVertex: string & import("effect/Brand").Brand<"ProviderV2.ID">;
21
+ githubCopilot: string & import("effect/Brand").Brand<"ProviderV2.ID">;
22
+ amazonBedrock: string & import("effect/Brand").Brand<"ProviderV2.ID">;
23
+ azure: string & import("effect/Brand").Brand<"ProviderV2.ID">;
24
+ openrouter: string & import("effect/Brand").Brand<"ProviderV2.ID">;
25
+ mistral: string & import("effect/Brand").Brand<"ProviderV2.ID">;
26
+ gitlab: string & import("effect/Brand").Brand<"ProviderV2.ID">;
27
+ };
28
+ readonly family: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Family">>>, Schema.optionalKey<Schema.brand<Schema.String, "Family">>, never, never>;
29
+ readonly name: Schema.String;
30
+ readonly api: Schema.Union<readonly [Schema.Struct<{
31
+ readonly type: Schema.Literal<"aisdk">;
32
+ readonly package: Schema.String;
33
+ readonly url: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
34
+ readonly settings: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
35
+ readonly id: Schema.brand<Schema.String, "ModelV2.ID">;
36
+ }>, Schema.Struct<{
37
+ readonly type: Schema.Literal<"native">;
38
+ readonly url: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
39
+ readonly settings: Schema.$Record<Schema.String, Schema.Unknown>;
40
+ readonly id: Schema.brand<Schema.String, "ModelV2.ID">;
41
+ }>]>;
42
+ readonly capabilities: Schema.Struct<{
43
+ readonly tools: Schema.Boolean;
44
+ readonly input: Schema.$Array<Schema.String>;
45
+ readonly output: Schema.$Array<Schema.String>;
46
+ }>;
47
+ readonly request: Schema.Struct<{
48
+ readonly variant: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
49
+ readonly headers: Schema.$Record<Schema.String, Schema.String>;
50
+ readonly body: Schema.$Record<Schema.String, Schema.Codec<Schema.Json, Schema.Json, never, never>>;
51
+ }>;
52
+ readonly variants: Schema.$Array<Schema.Struct<{
53
+ readonly headers: Schema.$Record<Schema.String, Schema.String>;
54
+ readonly body: Schema.$Record<Schema.String, Schema.Codec<Schema.Json, Schema.Json, never, never>>;
55
+ readonly id: Schema.brand<Schema.String, "VariantID">;
56
+ }>>;
57
+ readonly time: Schema.Struct<{
58
+ readonly released: Schema.Finite;
59
+ }>;
60
+ readonly cost: Schema.$Array<Schema.Struct<{
61
+ readonly tier: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
62
+ readonly type: Schema.Literal<"context">;
63
+ readonly size: Schema.Int;
64
+ }>>>, Schema.optionalKey<Schema.Struct<{
65
+ readonly type: Schema.Literal<"context">;
66
+ readonly size: Schema.Int;
67
+ }>>, never, never>;
68
+ readonly input: Schema.Finite;
69
+ readonly output: Schema.Finite;
70
+ readonly cache: Schema.Struct<{
71
+ readonly read: Schema.Finite;
72
+ readonly write: Schema.Finite;
73
+ }>;
74
+ }>>;
75
+ readonly status: Schema.Literals<readonly ["alpha", "beta", "deprecated", "active"]>;
76
+ readonly enabled: Schema.Boolean;
77
+ readonly limit: Schema.Struct<{
78
+ readonly context: Schema.Int;
79
+ readonly input: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
80
+ readonly output: Schema.Int;
81
+ }>;
82
+ }> & {
83
+ empty: (providerID: import("@opencode-ai/schema/provider").ID, modelID: Model.ID) => {
84
+ readonly id: string & import("effect/Brand").Brand<"ModelV2.ID">;
85
+ readonly providerID: string & import("effect/Brand").Brand<"ProviderV2.ID">;
86
+ readonly name: string;
87
+ readonly api: {
88
+ readonly type: "aisdk";
89
+ readonly package: string;
90
+ readonly id: string & import("effect/Brand").Brand<"ModelV2.ID">;
91
+ readonly url?: string | undefined;
92
+ readonly settings?: {
93
+ readonly [x: string]: unknown;
94
+ } | undefined;
95
+ } | {
96
+ readonly type: "native";
97
+ readonly settings: {
98
+ readonly [x: string]: unknown;
99
+ };
100
+ readonly id: string & import("effect/Brand").Brand<"ModelV2.ID">;
101
+ readonly url?: string | undefined;
102
+ };
103
+ readonly capabilities: {
104
+ readonly tools: boolean;
105
+ readonly input: readonly string[];
106
+ readonly output: readonly string[];
107
+ };
108
+ readonly request: {
109
+ readonly headers: {
110
+ readonly [x: string]: string;
111
+ };
112
+ readonly body: {
113
+ readonly [x: string]: Schema.Json;
114
+ };
115
+ readonly variant?: string | undefined;
116
+ };
117
+ readonly variants: readonly {
118
+ readonly headers: {
119
+ readonly [x: string]: string;
120
+ };
121
+ readonly body: {
122
+ readonly [x: string]: Schema.Json;
123
+ };
124
+ readonly id: string & import("effect/Brand").Brand<"VariantID">;
125
+ }[];
126
+ readonly time: {
127
+ readonly released: number;
128
+ };
129
+ readonly cost: readonly {
130
+ readonly input: number;
131
+ readonly output: number;
132
+ readonly cache: {
133
+ readonly read: number;
134
+ readonly write: number;
135
+ };
136
+ readonly tier?: {
137
+ readonly type: "context";
138
+ readonly size: number;
139
+ } | undefined;
140
+ }[];
141
+ readonly status: "alpha" | "beta" | "deprecated" | "active";
142
+ readonly enabled: boolean;
143
+ readonly limit: {
144
+ readonly context: number;
145
+ readonly output: number;
146
+ readonly input?: number | undefined;
147
+ };
148
+ readonly family?: (string & import("effect/Brand").Brand<"Family">) | undefined;
149
+ };
150
+ }>;
151
+ }>>, HttpApiEndpoint.Json<typeof ServiceUnavailableError>, never, never>, false>;
@@ -0,0 +1,22 @@
1
+ import { Model } from "@opencode-ai/schema/model";
2
+ import { Location } from "@opencode-ai/schema/location";
3
+ import { Schema } from "effect";
4
+ import { HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/unstable/httpapi";
5
+ import { ServiceUnavailableError } from "../errors.js";
6
+ import { LocationQuery, locationQueryOpenApi } from "./location.js";
7
+ export const ModelGroup = HttpApiGroup.make("server.model")
8
+ .add(HttpApiEndpoint.get("model.list", "/api/model", {
9
+ query: LocationQuery,
10
+ success: Location.response(Schema.Array(Model.Info)),
11
+ error: ServiceUnavailableError,
12
+ })
13
+ .annotateMerge(locationQueryOpenApi)
14
+ .annotateMerge(OpenApi.annotations({
15
+ identifier: "v2.model.list",
16
+ summary: "List models",
17
+ description: "Retrieve available models ordered by release date.",
18
+ })))
19
+ .annotateMerge(OpenApi.annotations({
20
+ title: "models",
21
+ description: "Experimental model routes.",
22
+ }));