@purpleschool/gptbot 0.13.21 → 0.14.1-stage-2

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 (174) hide show
  1. package/api/controllers/http/agents/agent-dialog.ts +0 -11
  2. package/api/controllers/http/agents/agent-lead-form.ts +0 -2
  3. package/api/controllers/http/agents/agent-lead.ts +0 -1
  4. package/api/controllers/http/agents/agent-template.ts +0 -4
  5. package/api/controllers/http/agents/agent-tool.ts +1 -2
  6. package/api/controllers/http/agents/agent.ts +3 -0
  7. package/api/controllers/http/agents/index.ts +0 -1
  8. package/api/controllers/http/b2b-compatible.ts +14 -0
  9. package/api/controllers/http/b2b-usage-log.ts +5 -0
  10. package/api/controllers/http/index.ts +2 -2
  11. package/api/routes.ts +19 -38
  12. package/build/api/controllers/http/agents/agent-dialog.js +0 -7
  13. package/build/api/controllers/http/agents/agent-lead-form.js +0 -2
  14. package/build/api/controllers/http/agents/agent-lead.js +0 -1
  15. package/build/api/controllers/http/agents/agent-template.js +0 -4
  16. package/build/api/controllers/http/agents/agent-tool.js +1 -2
  17. package/build/api/controllers/http/agents/agent.js +2 -0
  18. package/build/api/controllers/http/agents/index.js +0 -1
  19. package/build/api/controllers/http/b2b-compatible.js +15 -0
  20. package/build/api/controllers/http/b2b-usage-log.js +7 -0
  21. package/build/api/controllers/http/index.js +2 -2
  22. package/build/api/routes.js +16 -22
  23. package/build/commands/agents/agent-dialog/find-agent-dialogs.command.js +0 -1
  24. package/build/commands/agents/agent-dialog/index.js +0 -5
  25. package/build/commands/agents/agent-dialog/send-cabinet-message.command.js +4 -4
  26. package/build/commands/agents/agent-lead/find-agent-leads.command.js +4 -2
  27. package/build/commands/agents/agent-template/index.js +0 -1
  28. package/build/commands/agents/agent-tool/find-agent-tools-catalog.command.js +0 -2
  29. package/build/commands/agents/agent-tool/find-agent-tools.command.js +0 -2
  30. package/build/commands/agents/agents/index.js +0 -1
  31. package/build/commands/ai-studio/canvas-tool/index.js +0 -1
  32. package/build/commands/b2b/send-text-request.command.js +8 -1
  33. package/build/commands/b2b-compatible/anthropic-files.command.js +21 -0
  34. package/build/commands/b2b-compatible/anthropic-messages.command.js +217 -0
  35. package/build/commands/b2b-compatible/anthropic-models.command.js +26 -0
  36. package/build/commands/b2b-compatible/common.schemas.js +46 -0
  37. package/build/commands/{ai-studio/canvas-tool/var-gen → b2b-compatible}/index.js +7 -3
  38. package/build/commands/b2b-compatible/openai-files.command.js +26 -0
  39. package/build/commands/b2b-compatible/openai-models.command.js +24 -0
  40. package/build/commands/b2b-compatible/openai-responses.command.js +171 -0
  41. package/build/commands/b2b-usage-log/get-b2b-usage-statistics.command.js +111 -0
  42. package/build/{constants/photo-studio/enums → commands/b2b-usage-log}/index.js +1 -1
  43. package/build/commands/index.js +2 -1
  44. package/build/constants/b2b/enums/b2b-debit-status.enum.js +9 -0
  45. package/build/constants/b2b/enums/b2b-endpoint-family.enum.js +9 -0
  46. package/build/constants/b2b/enums/b2b-statistics-granularity.enum.js +8 -0
  47. package/build/constants/b2b/enums/b2b-statistics-period.enum.js +13 -0
  48. package/build/constants/b2b/enums/b2b-usage-operation.enum.js +8 -0
  49. package/build/constants/b2b/enums/b2b-usage-spend-component.enum.js +12 -0
  50. package/build/constants/b2b/enums/b2b-usage-status.enum.js +8 -0
  51. package/build/{models/photo-studio → constants/b2b/enums}/index.js +7 -4
  52. package/build/constants/index.js +1 -1
  53. package/build/models/agents/index.js +0 -2
  54. package/build/models/b2b/b2b-usage-statistics.schema.js +69 -0
  55. package/build/models/b2b/index.js +1 -0
  56. package/build/models/canvas-node.schema.js +2 -2
  57. package/build/models/file.schema.js +1 -7
  58. package/build/models/index.js +0 -1
  59. package/build/models/tools/image-generation/image-generation-job.schema.js +0 -3
  60. package/commands/agents/agent-dialog/find-agent-dialogs.command.ts +0 -1
  61. package/commands/agents/agent-dialog/index.ts +0 -5
  62. package/commands/agents/agent-dialog/send-cabinet-message.command.ts +10 -18
  63. package/commands/agents/agent-lead/find-agent-leads.command.ts +4 -2
  64. package/commands/agents/agent-template/index.ts +0 -1
  65. package/commands/agents/agent-tool/find-agent-tools-catalog.command.ts +0 -2
  66. package/commands/agents/agent-tool/find-agent-tools.command.ts +0 -2
  67. package/commands/agents/agents/index.ts +0 -1
  68. package/commands/ai-studio/canvas-tool/index.ts +0 -1
  69. package/commands/b2b/send-text-request.command.ts +10 -1
  70. package/commands/b2b-compatible/anthropic-files.command.ts +29 -0
  71. package/commands/b2b-compatible/anthropic-messages.command.ts +244 -0
  72. package/commands/b2b-compatible/anthropic-models.command.ts +31 -0
  73. package/commands/b2b-compatible/common.schemas.ts +55 -0
  74. package/commands/b2b-compatible/index.ts +7 -0
  75. package/commands/b2b-compatible/openai-files.command.ts +37 -0
  76. package/commands/b2b-compatible/openai-models.command.ts +29 -0
  77. package/commands/b2b-compatible/openai-responses.command.ts +191 -0
  78. package/commands/b2b-usage-log/get-b2b-usage-statistics.command.ts +128 -0
  79. package/commands/b2b-usage-log/index.ts +1 -0
  80. package/commands/index.ts +2 -1
  81. package/constants/b2b/enums/b2b-debit-status.enum.ts +5 -0
  82. package/constants/b2b/enums/b2b-endpoint-family.enum.ts +5 -0
  83. package/constants/b2b/enums/b2b-statistics-granularity.enum.ts +4 -0
  84. package/constants/b2b/enums/b2b-statistics-period.enum.ts +9 -0
  85. package/constants/b2b/enums/b2b-usage-operation.enum.ts +4 -0
  86. package/constants/b2b/enums/b2b-usage-spend-component.enum.ts +8 -0
  87. package/constants/b2b/enums/b2b-usage-status.enum.ts +4 -0
  88. package/constants/b2b/enums/index.ts +7 -0
  89. package/constants/index.ts +1 -1
  90. package/models/agents/index.ts +0 -2
  91. package/models/b2b/b2b-usage-statistics.schema.ts +81 -0
  92. package/models/b2b/index.ts +1 -0
  93. package/models/canvas-node.schema.ts +2 -2
  94. package/models/file.schema.ts +0 -8
  95. package/models/index.ts +0 -1
  96. package/models/tools/image-generation/image-generation-job.schema.ts +0 -3
  97. package/package.json +1 -1
  98. package/api/controllers/http/agents/agent-statistics.ts +0 -5
  99. package/api/controllers/http/canvas-var-generation.ts +0 -7
  100. package/api/controllers/http/photo-studio.ts +0 -21
  101. package/build/api/controllers/http/agents/agent-statistics.js +0 -7
  102. package/build/api/controllers/http/canvas-var-generation.js +0 -9
  103. package/build/api/controllers/http/photo-studio.js +0 -21
  104. package/build/commands/agents/agent-dialog/get-cabinet-config.command.js +0 -12
  105. package/build/commands/agents/agent-dialog/get-cabinet-price-preview.command.js +0 -28
  106. package/build/commands/agents/agent-dialog/get-dialog-context-length.command.js +0 -30
  107. package/build/commands/agents/agent-dialog/rename-agent-dialog.command.js +0 -17
  108. package/build/commands/agents/agent-dialog/stop-cabinet-stream.command.js +0 -15
  109. package/build/commands/agents/agent-template/get-agent-template-instructions-by-template.command.js +0 -14
  110. package/build/commands/agents/agents/get-agent-statistics.command.js +0 -20
  111. package/build/commands/ai-studio/canvas-tool/var-gen/generate-variables.command.js +0 -18
  112. package/build/commands/ai-studio/canvas-tool/var-gen/get-var-gen-config.command.js +0 -11
  113. package/build/commands/ai-studio/canvas-tool/var-gen/get-var-gen-price.command.js +0 -18
  114. package/build/commands/photo-studio/add-photo-studio-checkpoint.command.js +0 -17
  115. package/build/commands/photo-studio/clear-photo-studio-checkpoints.command.js +0 -12
  116. package/build/commands/photo-studio/create-photo-studio-canvas.command.js +0 -15
  117. package/build/commands/photo-studio/delete-photo-studio-canvas.command.js +0 -11
  118. package/build/commands/photo-studio/delete-photo-studio-checkpoint.command.js +0 -14
  119. package/build/commands/photo-studio/execute-photo-studio-action.command.js +0 -47
  120. package/build/commands/photo-studio/find-photo-studio-canvas-by-uuid.query.js +0 -12
  121. package/build/commands/photo-studio/find-photo-studio-canvases.query.js +0 -18
  122. package/build/commands/photo-studio/find-photo-studio-checkpoints.query.js +0 -12
  123. package/build/commands/photo-studio/find-photo-studio-job-by-id.query.js +0 -32
  124. package/build/commands/photo-studio/find-photo-studio-jobs.query.js +0 -18
  125. package/build/commands/photo-studio/get-photo-studio-actions.query.js +0 -11
  126. package/build/commands/photo-studio/index.js +0 -31
  127. package/build/commands/photo-studio/save-photo-studio-canvas.command.js +0 -18
  128. package/build/commands/photo-studio/update-photo-studio-canvas.command.js +0 -15
  129. package/build/commands/photo-studio/update-photo-studio-checkpoint.command.js +0 -19
  130. package/build/constants/photo-studio/enums/photo-studio-checkpoint-action-type.enum.js +0 -11
  131. package/build/models/agents/agent-statistics.schema.js +0 -33
  132. package/build/models/agents/message-attachment.schema.js +0 -21
  133. package/build/models/photo-studio/photo-studio-action.schema.js +0 -17
  134. package/build/models/photo-studio/photo-studio-checkpoint.schema.js +0 -21
  135. package/build/models/photo-studio/photo-studio-image-node.schema.js +0 -19
  136. package/build/models/photo-studio/photo-studio.schema.js +0 -15
  137. package/commands/agents/agent-dialog/get-cabinet-config.command.ts +0 -11
  138. package/commands/agents/agent-dialog/get-cabinet-price-preview.command.ts +0 -30
  139. package/commands/agents/agent-dialog/get-dialog-context-length.command.ts +0 -33
  140. package/commands/agents/agent-dialog/rename-agent-dialog.command.ts +0 -19
  141. package/commands/agents/agent-dialog/stop-cabinet-stream.command.ts +0 -15
  142. package/commands/agents/agent-template/get-agent-template-instructions-by-template.command.ts +0 -14
  143. package/commands/agents/agents/get-agent-statistics.command.ts +0 -28
  144. package/commands/ai-studio/canvas-tool/var-gen/generate-variables.command.ts +0 -20
  145. package/commands/ai-studio/canvas-tool/var-gen/get-var-gen-config.command.ts +0 -9
  146. package/commands/ai-studio/canvas-tool/var-gen/get-var-gen-price.command.ts +0 -18
  147. package/commands/ai-studio/canvas-tool/var-gen/index.ts +0 -3
  148. package/commands/photo-studio/add-photo-studio-checkpoint.command.ts +0 -23
  149. package/commands/photo-studio/clear-photo-studio-checkpoints.command.ts +0 -12
  150. package/commands/photo-studio/create-photo-studio-canvas.command.ts +0 -16
  151. package/commands/photo-studio/delete-photo-studio-canvas.command.ts +0 -11
  152. package/commands/photo-studio/delete-photo-studio-checkpoint.command.ts +0 -14
  153. package/commands/photo-studio/execute-photo-studio-action.command.ts +0 -49
  154. package/commands/photo-studio/find-photo-studio-canvas-by-uuid.query.ts +0 -12
  155. package/commands/photo-studio/find-photo-studio-canvases.query.ts +0 -20
  156. package/commands/photo-studio/find-photo-studio-checkpoints.query.ts +0 -12
  157. package/commands/photo-studio/find-photo-studio-job-by-id.query.ts +0 -36
  158. package/commands/photo-studio/find-photo-studio-jobs.query.ts +0 -20
  159. package/commands/photo-studio/get-photo-studio-actions.query.ts +0 -10
  160. package/commands/photo-studio/index.ts +0 -15
  161. package/commands/photo-studio/save-photo-studio-canvas.command.ts +0 -24
  162. package/commands/photo-studio/update-photo-studio-canvas.command.ts +0 -17
  163. package/commands/photo-studio/update-photo-studio-checkpoint.command.ts +0 -25
  164. package/constants/photo-studio/enums/index.ts +0 -1
  165. package/constants/photo-studio/enums/photo-studio-checkpoint-action-type.enum.ts +0 -7
  166. package/models/agents/agent-statistics.schema.ts +0 -38
  167. package/models/agents/message-attachment.schema.ts +0 -22
  168. package/models/photo-studio/index.ts +0 -4
  169. package/models/photo-studio/photo-studio-action.schema.ts +0 -18
  170. package/models/photo-studio/photo-studio-checkpoint.schema.ts +0 -22
  171. package/models/photo-studio/photo-studio-image-node.schema.ts +0 -22
  172. package/models/photo-studio/photo-studio.schema.ts +0 -16
  173. /package/build/constants/{photo-studio → b2b}/index.js +0 -0
  174. /package/constants/{photo-studio → b2b}/index.ts +0 -0
@@ -0,0 +1,244 @@
1
+ import { z } from 'zod';
2
+ import {
3
+ AnthropicErrorResponseSchema,
4
+ AnthropicHeadersSchema,
5
+ NullableStringSchema,
6
+ } from './common.schemas';
7
+
8
+ const AnthropicCacheControlSchema = z
9
+ .object({
10
+ type: z.string(),
11
+ })
12
+ .passthrough();
13
+
14
+ const AnthropicTextBlockSchema = z
15
+ .object({
16
+ type: z.literal('text'),
17
+ text: z.string(),
18
+ cache_control: AnthropicCacheControlSchema.optional(),
19
+ })
20
+ .passthrough();
21
+
22
+ const AnthropicBase64SourceSchema = z
23
+ .object({
24
+ type: z.literal('base64'),
25
+ media_type: z.string(),
26
+ data: z.string(),
27
+ })
28
+ .passthrough();
29
+
30
+ const AnthropicUrlSourceSchema = z
31
+ .object({
32
+ type: z.literal('url'),
33
+ url: z.string(),
34
+ })
35
+ .passthrough();
36
+
37
+ const AnthropicFileSourceSchema = z
38
+ .object({
39
+ type: z.literal('file'),
40
+ file_id: z.string(),
41
+ })
42
+ .passthrough();
43
+
44
+ const AnthropicTextSourceSchema = z
45
+ .object({
46
+ type: z.literal('text'),
47
+ media_type: z.string().optional(),
48
+ data: z.string(),
49
+ })
50
+ .passthrough();
51
+
52
+ const AnthropicImageBlockSchema = z
53
+ .object({
54
+ type: z.literal('image'),
55
+ source: z.discriminatedUnion('type', [
56
+ AnthropicBase64SourceSchema,
57
+ AnthropicUrlSourceSchema,
58
+ AnthropicFileSourceSchema,
59
+ ]),
60
+ cache_control: AnthropicCacheControlSchema.optional(),
61
+ })
62
+ .passthrough();
63
+
64
+ const AnthropicDocumentBlockSchema = z
65
+ .object({
66
+ type: z.literal('document'),
67
+ source: z.discriminatedUnion('type', [
68
+ AnthropicBase64SourceSchema,
69
+ AnthropicUrlSourceSchema,
70
+ AnthropicFileSourceSchema,
71
+ AnthropicTextSourceSchema,
72
+ ]),
73
+ title: z.string().optional(),
74
+ cache_control: AnthropicCacheControlSchema.optional(),
75
+ })
76
+ .passthrough();
77
+
78
+ const AnthropicUnknownContentBlockSchema = z
79
+ .object({
80
+ type: z.string(),
81
+ })
82
+ .passthrough();
83
+
84
+ export const AnthropicMessageContentBlockSchema = z.union([
85
+ AnthropicTextBlockSchema,
86
+ AnthropicImageBlockSchema,
87
+ AnthropicDocumentBlockSchema,
88
+ AnthropicUnknownContentBlockSchema,
89
+ ]);
90
+
91
+ export const AnthropicSystemContentBlockSchema = z.union([
92
+ AnthropicTextBlockSchema,
93
+ AnthropicUnknownContentBlockSchema,
94
+ ]);
95
+
96
+ export const AnthropicMessageSchema = z
97
+ .object({
98
+ // `system` appears here (not just in the top-level `system` field) when the client
99
+ // uses the mid-conversation-system beta — Claude Code injects operator instructions
100
+ // as `{ role: 'system', content }` entries inside messages[].
101
+ role: z.enum(['user', 'assistant', 'system']),
102
+ content: z.union([z.string(), z.array(AnthropicMessageContentBlockSchema)]),
103
+ })
104
+ .passthrough();
105
+
106
+ const AnthropicToolSchema = z
107
+ .object({
108
+ // Custom tools (the bulk of what the Claude CLI sends) are `{ name, description,
109
+ // input_schema }` with NO `type`. Only server tools (web_search_*, bash_*, …)
110
+ // carry a `type`. Requiring it here 400s every tool-bearing request.
111
+ type: z.string().optional(),
112
+ name: z.string().optional(),
113
+ user_location: z
114
+ .object({
115
+ type: z.literal('approximate').optional(),
116
+ country: z.string().optional(),
117
+ region: z.string().optional(),
118
+ city: z.string().optional(),
119
+ })
120
+ .passthrough()
121
+ .optional(),
122
+ })
123
+ .passthrough();
124
+
125
+ const AnthropicThinkingSchema = z
126
+ .object({
127
+ type: z.string().optional(),
128
+ })
129
+ .passthrough();
130
+
131
+ export namespace AnthropicMessagesCommand {
132
+ export const HeadersSchema = AnthropicHeadersSchema;
133
+
134
+ export const BodySchema = z
135
+ .object({
136
+ model: z.string(),
137
+ max_tokens: z.number().int().positive(),
138
+ messages: z.array(AnthropicMessageSchema).min(1),
139
+ system: z.union([z.string(), z.array(AnthropicSystemContentBlockSchema)]).optional(),
140
+ stream: z.boolean().optional(),
141
+ tools: z.array(AnthropicToolSchema).optional(),
142
+ container: z.unknown().optional(),
143
+ context_management: z.unknown().optional(),
144
+ mcp_servers: z.array(z.unknown()).optional(),
145
+ metadata: z.record(z.string(), z.unknown()).optional(),
146
+ service_tier: z.string().optional(),
147
+ stop_sequences: z.array(z.string()).optional(),
148
+ temperature: z.number().optional(),
149
+ thinking: AnthropicThinkingSchema.optional(),
150
+ tool_choice: z.unknown().optional(),
151
+ top_k: z.number().optional(),
152
+ top_p: z.number().optional(),
153
+ })
154
+ .passthrough();
155
+
156
+ export const UsageSchema = z
157
+ .object({
158
+ input_tokens: z.number().int().nonnegative(),
159
+ output_tokens: z.number().int().nonnegative(),
160
+ cache_creation_input_tokens: z.number().int().nonnegative().optional(),
161
+ cache_read_input_tokens: z.number().int().nonnegative().optional(),
162
+ })
163
+ .strict();
164
+
165
+ export const TextContentBlockResponseSchema = z
166
+ .object({
167
+ type: z.literal('text'),
168
+ text: z.string(),
169
+ })
170
+ .strict();
171
+
172
+ export const ResponseSchema = z
173
+ .object({
174
+ id: z.string(),
175
+ type: z.literal('message'),
176
+ role: z.literal('assistant'),
177
+ content: z.array(TextContentBlockResponseSchema),
178
+ model: z.string(),
179
+ stop_reason: NullableStringSchema,
180
+ stop_sequence: NullableStringSchema,
181
+ usage: UsageSchema,
182
+ })
183
+ .strict();
184
+
185
+ export const StreamEventSchema = z.union([
186
+ z
187
+ .object({
188
+ type: z.literal('message_start'),
189
+ message: ResponseSchema,
190
+ })
191
+ .strict(),
192
+ z
193
+ .object({
194
+ type: z.literal('content_block_start'),
195
+ index: z.number().int(),
196
+ content_block: TextContentBlockResponseSchema,
197
+ })
198
+ .strict(),
199
+ z
200
+ .object({
201
+ type: z.literal('content_block_delta'),
202
+ index: z.number().int(),
203
+ delta: z
204
+ .object({
205
+ type: z.literal('text_delta'),
206
+ text: z.string(),
207
+ })
208
+ .strict(),
209
+ })
210
+ .strict(),
211
+ z
212
+ .object({
213
+ type: z.literal('content_block_stop'),
214
+ index: z.number().int(),
215
+ })
216
+ .strict(),
217
+ z
218
+ .object({
219
+ type: z.literal('message_delta'),
220
+ delta: z
221
+ .object({
222
+ stop_reason: NullableStringSchema.optional(),
223
+ stop_sequence: NullableStringSchema.optional(),
224
+ })
225
+ .strict(),
226
+ usage: UsageSchema.partial().optional(),
227
+ })
228
+ .strict(),
229
+ z
230
+ .object({
231
+ type: z.literal('message_stop'),
232
+ })
233
+ .strict(),
234
+ AnthropicErrorResponseSchema,
235
+ ]);
236
+
237
+ export const ErrorResponseSchema = AnthropicErrorResponseSchema;
238
+
239
+ export type Headers = z.infer<typeof HeadersSchema>;
240
+ export type Body = z.infer<typeof BodySchema>;
241
+ export type Response = z.infer<typeof ResponseSchema>;
242
+ export type StreamEvent = z.infer<typeof StreamEventSchema>;
243
+ export type ErrorResponse = z.infer<typeof ErrorResponseSchema>;
244
+ }
@@ -0,0 +1,31 @@
1
+ import { z } from 'zod';
2
+ import { AnthropicErrorResponseSchema, AnthropicHeadersSchema } from './common.schemas';
3
+
4
+ export namespace AnthropicModelsCommand {
5
+ export const HeadersSchema = AnthropicHeadersSchema;
6
+
7
+ export const ModelSchema = z
8
+ .object({
9
+ id: z.string(),
10
+ type: z.literal('model'),
11
+ display_name: z.string(),
12
+ created_at: z.string().datetime(),
13
+ })
14
+ .strict();
15
+
16
+ export const ResponseSchema = z
17
+ .object({
18
+ data: z.array(ModelSchema),
19
+ first_id: z.string().nullable(),
20
+ last_id: z.string().nullable(),
21
+ has_more: z.boolean(),
22
+ })
23
+ .strict();
24
+
25
+ export const ErrorResponseSchema = AnthropicErrorResponseSchema;
26
+
27
+ export type Headers = z.infer<typeof HeadersSchema>;
28
+ export type Model = z.infer<typeof ModelSchema>;
29
+ export type Response = z.infer<typeof ResponseSchema>;
30
+ export type ErrorResponse = z.infer<typeof ErrorResponseSchema>;
31
+ }
@@ -0,0 +1,55 @@
1
+ import { z } from 'zod';
2
+
3
+ export const NullableStringSchema = z.string().nullable();
4
+
5
+ export const OpenAIHeadersSchema = z
6
+ .object({
7
+ authorization: z.string(),
8
+ })
9
+ .strict();
10
+
11
+ export const AnthropicHeadersSchema = z
12
+ .object({
13
+ 'x-api-key': z.string(),
14
+ 'anthropic-version': z.string().optional(),
15
+ })
16
+ .strict();
17
+
18
+ export const OpenAIErrorResponseSchema = z
19
+ .object({
20
+ error: z
21
+ .object({
22
+ message: z.string(),
23
+ type: z.string(),
24
+ param: NullableStringSchema,
25
+ code: NullableStringSchema,
26
+ })
27
+ .strict(),
28
+ })
29
+ .strict();
30
+
31
+ export const AnthropicErrorResponseSchema = z
32
+ .object({
33
+ type: z.literal('error'),
34
+ error: z
35
+ .object({
36
+ type: z.string(),
37
+ message: z.string(),
38
+ })
39
+ .strict(),
40
+ })
41
+ .strict();
42
+
43
+ export const CompatibleFileUploadMetadataSchema = z
44
+ .object({
45
+ filename: z.string(),
46
+ mimetype: z.string(),
47
+ size: z.number().int().nonnegative(),
48
+ })
49
+ .strict();
50
+
51
+ export type OpenAIHeaders = z.infer<typeof OpenAIHeadersSchema>;
52
+ export type AnthropicHeaders = z.infer<typeof AnthropicHeadersSchema>;
53
+ export type OpenAIErrorResponse = z.infer<typeof OpenAIErrorResponseSchema>;
54
+ export type AnthropicErrorResponse = z.infer<typeof AnthropicErrorResponseSchema>;
55
+ export type CompatibleFileUploadMetadata = z.infer<typeof CompatibleFileUploadMetadataSchema>;
@@ -0,0 +1,7 @@
1
+ export * from './anthropic-files.command';
2
+ export * from './anthropic-messages.command';
3
+ export * from './anthropic-models.command';
4
+ export * from './common.schemas';
5
+ export * from './openai-files.command';
6
+ export * from './openai-models.command';
7
+ export * from './openai-responses.command';
@@ -0,0 +1,37 @@
1
+ import { z } from 'zod';
2
+ import {
3
+ CompatibleFileUploadMetadataSchema,
4
+ OpenAIErrorResponseSchema,
5
+ OpenAIHeadersSchema,
6
+ } from './common.schemas';
7
+
8
+ export namespace OpenAIFilesCommand {
9
+ export const HeadersSchema = OpenAIHeadersSchema;
10
+
11
+ export const BodySchema = z
12
+ .object({
13
+ purpose: z.enum(['assistants', 'batch', 'fine-tune', 'vision', 'user_data', 'evals']),
14
+ })
15
+ .strict();
16
+
17
+ export const FileMetadataSchema = CompatibleFileUploadMetadataSchema;
18
+
19
+ export const ResponseSchema = z
20
+ .object({
21
+ id: z.string().uuid(),
22
+ object: z.literal('file'),
23
+ bytes: z.number().int().nonnegative(),
24
+ created_at: z.number().int(),
25
+ filename: z.string(),
26
+ purpose: BodySchema.shape.purpose,
27
+ })
28
+ .strict();
29
+
30
+ export const ErrorResponseSchema = OpenAIErrorResponseSchema;
31
+
32
+ export type Headers = z.infer<typeof HeadersSchema>;
33
+ export type Body = z.infer<typeof BodySchema>;
34
+ export type FileMetadata = z.infer<typeof FileMetadataSchema>;
35
+ export type Response = z.infer<typeof ResponseSchema>;
36
+ export type ErrorResponse = z.infer<typeof ErrorResponseSchema>;
37
+ }
@@ -0,0 +1,29 @@
1
+ import { z } from 'zod';
2
+ import { OpenAIErrorResponseSchema, OpenAIHeadersSchema } from './common.schemas';
3
+
4
+ export namespace OpenAIModelsCommand {
5
+ export const HeadersSchema = OpenAIHeadersSchema;
6
+
7
+ export const ModelSchema = z
8
+ .object({
9
+ id: z.string(),
10
+ object: z.literal('model'),
11
+ created: z.number().int(),
12
+ owned_by: z.literal('rugpt'),
13
+ })
14
+ .strict();
15
+
16
+ export const ResponseSchema = z
17
+ .object({
18
+ object: z.literal('list'),
19
+ data: z.array(ModelSchema),
20
+ })
21
+ .strict();
22
+
23
+ export const ErrorResponseSchema = OpenAIErrorResponseSchema;
24
+
25
+ export type Headers = z.infer<typeof HeadersSchema>;
26
+ export type Model = z.infer<typeof ModelSchema>;
27
+ export type Response = z.infer<typeof ResponseSchema>;
28
+ export type ErrorResponse = z.infer<typeof ErrorResponseSchema>;
29
+ }
@@ -0,0 +1,191 @@
1
+ import { z } from 'zod';
2
+ import { OpenAIErrorResponseSchema, OpenAIHeadersSchema } from './common.schemas';
3
+
4
+ const OpenAIInputTextContentPartSchema = z
5
+ .object({
6
+ type: z.enum(['input_text', 'text', 'output_text']),
7
+ text: z.string(),
8
+ })
9
+ .passthrough();
10
+
11
+ const OpenAIInputImageContentPartSchema = z
12
+ .object({
13
+ type: z.literal('input_image'),
14
+ image_url: z.string().optional(),
15
+ file_id: z.string().optional(),
16
+ detail: z.enum(['auto', 'low', 'high']).optional(),
17
+ })
18
+ .passthrough();
19
+
20
+ const OpenAIInputFileContentPartSchema = z
21
+ .object({
22
+ type: z.literal('input_file'),
23
+ file_id: z.string().optional(),
24
+ file_data: z.string().optional(),
25
+ file_url: z.string().optional(),
26
+ filename: z.string().optional(),
27
+ mime_type: z.string().optional(),
28
+ })
29
+ .passthrough();
30
+
31
+ export const OpenAIResponseInputContentPartSchema = z.discriminatedUnion('type', [
32
+ OpenAIInputTextContentPartSchema,
33
+ OpenAIInputImageContentPartSchema,
34
+ OpenAIInputFileContentPartSchema,
35
+ ]);
36
+
37
+ export const OpenAIResponseInputMessageSchema = z
38
+ .object({
39
+ type: z.literal('message').optional(),
40
+ role: z.enum(['system', 'developer', 'user', 'assistant']),
41
+ content: z.union([z.string(), z.array(OpenAIResponseInputContentPartSchema)]),
42
+ })
43
+ .passthrough();
44
+
45
+ const OpenAIAnyToolSchema = z
46
+ .object({
47
+ type: z.string(),
48
+ })
49
+ .passthrough();
50
+
51
+ const OpenAIResponseMetadataSchema = z.record(z.string(), z.unknown());
52
+
53
+ const OpenAIResponseReasoningSchema = z
54
+ .object({
55
+ effort: z.string().optional(),
56
+ summary: z.string().nullable().optional(),
57
+ })
58
+ .passthrough();
59
+
60
+ const OpenAIResponseTextOptionsSchema = z
61
+ .object({
62
+ format: z.unknown().optional(),
63
+ verbosity: z.string().optional(),
64
+ })
65
+ .passthrough();
66
+
67
+ const OpenAIResponseUsageSchema = z
68
+ .object({
69
+ input_tokens: z.number().int().nonnegative(),
70
+ output_tokens: z.number().int().nonnegative(),
71
+ total_tokens: z.number().int().nonnegative(),
72
+ input_tokens_details: z
73
+ .object({
74
+ cached_tokens: z.number().int().nonnegative().optional(),
75
+ })
76
+ .strict()
77
+ .optional(),
78
+ })
79
+ .strict();
80
+
81
+ const OpenAIResponseOutputTextSchema = z
82
+ .object({
83
+ type: z.literal('output_text'),
84
+ text: z.string(),
85
+ annotations: z.array(z.unknown()),
86
+ })
87
+ .strict();
88
+
89
+ const OpenAIResponseOutputMessageSchema = z
90
+ .object({
91
+ id: z.string(),
92
+ type: z.literal('message'),
93
+ status: z.literal('completed'),
94
+ role: z.literal('assistant'),
95
+ content: z.array(OpenAIResponseOutputTextSchema),
96
+ })
97
+ .strict();
98
+
99
+ export namespace OpenAIResponsesCommand {
100
+ export const HeadersSchema = OpenAIHeadersSchema;
101
+
102
+ export const BodySchema = z
103
+ .object({
104
+ model: z.string(),
105
+ input: z.union([z.string(), z.array(OpenAIResponseInputMessageSchema).min(1)]),
106
+ instructions: z.string().optional(),
107
+ stream: z.boolean().optional(),
108
+ max_output_tokens: z.number().int().positive().optional(),
109
+ tools: z.array(OpenAIAnyToolSchema).optional(),
110
+ background: z.boolean().optional(),
111
+ include: z.array(z.string()).optional(),
112
+ max_tool_calls: z.number().int().positive().optional(),
113
+ metadata: OpenAIResponseMetadataSchema.nullable().optional(),
114
+ parallel_tool_calls: z.boolean().optional(),
115
+ previous_response_id: z.string().nullable().optional(),
116
+ prompt: z.unknown().optional(),
117
+ reasoning: OpenAIResponseReasoningSchema.nullable().optional(),
118
+ safety_identifier: z.string().optional(),
119
+ service_tier: z.string().optional(),
120
+ store: z.boolean().nullable().optional(),
121
+ stream_options: z.unknown().optional(),
122
+ temperature: z.number().optional(),
123
+ text: OpenAIResponseTextOptionsSchema.optional(),
124
+ tool_choice: z.unknown().optional(),
125
+ top_p: z.number().optional(),
126
+ truncation: z.string().optional(),
127
+ user: z.string().optional(),
128
+ })
129
+ .passthrough();
130
+
131
+ export const UsageSchema = OpenAIResponseUsageSchema;
132
+
133
+ export const ResponseSchema = z
134
+ .object({
135
+ id: z.string(),
136
+ object: z.literal('response'),
137
+ created_at: z.number().int(),
138
+ status: z.literal('completed'),
139
+ model: z.string(),
140
+ output: z.array(OpenAIResponseOutputMessageSchema),
141
+ output_text: z.string(),
142
+ usage: UsageSchema,
143
+ })
144
+ .strict();
145
+
146
+ export const StreamEventSchema = z.union([
147
+ z
148
+ .object({
149
+ type: z.literal('response.created'),
150
+ response: ResponseSchema.omit({ status: true }).extend({
151
+ status: z.literal('in_progress'),
152
+ output: z.array(z.never()),
153
+ output_text: z.literal(''),
154
+ }),
155
+ })
156
+ .strict(),
157
+ z
158
+ .object({
159
+ type: z.literal('response.output_text.delta'),
160
+ response_id: z.string(),
161
+ output_index: z.number().int(),
162
+ content_index: z.number().int(),
163
+ delta: z.string(),
164
+ })
165
+ .strict(),
166
+ z
167
+ .object({
168
+ type: z.literal('response.output_text.done'),
169
+ response_id: z.string(),
170
+ output_index: z.number().int(),
171
+ content_index: z.number().int(),
172
+ text: z.string(),
173
+ })
174
+ .strict(),
175
+ z
176
+ .object({
177
+ type: z.literal('response.completed'),
178
+ response: ResponseSchema,
179
+ })
180
+ .strict(),
181
+ OpenAIErrorResponseSchema,
182
+ ]);
183
+
184
+ export const ErrorResponseSchema = OpenAIErrorResponseSchema;
185
+
186
+ export type Headers = z.infer<typeof HeadersSchema>;
187
+ export type Body = z.infer<typeof BodySchema>;
188
+ export type Response = z.infer<typeof ResponseSchema>;
189
+ export type StreamEvent = z.infer<typeof StreamEventSchema>;
190
+ export type ErrorResponse = z.infer<typeof ErrorResponseSchema>;
191
+ }