llmapi-v2 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/.env.example +40 -0
  2. package/Dockerfile +17 -0
  3. package/dist/config.d.ts +48 -0
  4. package/dist/config.js +98 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/converter/request.d.ts +6 -0
  7. package/dist/converter/request.js +184 -0
  8. package/dist/converter/request.js.map +1 -0
  9. package/dist/converter/response.d.ts +6 -0
  10. package/dist/converter/response.js +76 -0
  11. package/dist/converter/response.js.map +1 -0
  12. package/dist/converter/stream.d.ts +54 -0
  13. package/dist/converter/stream.js +318 -0
  14. package/dist/converter/stream.js.map +1 -0
  15. package/dist/converter/types.d.ts +239 -0
  16. package/dist/converter/types.js +6 -0
  17. package/dist/converter/types.js.map +1 -0
  18. package/dist/data/posts.d.ts +19 -0
  19. package/dist/data/posts.js +462 -0
  20. package/dist/data/posts.js.map +1 -0
  21. package/dist/index.d.ts +1 -0
  22. package/dist/index.js +233 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/middleware/api-key-auth.d.ts +6 -0
  25. package/dist/middleware/api-key-auth.js +76 -0
  26. package/dist/middleware/api-key-auth.js.map +1 -0
  27. package/dist/middleware/quota-guard.d.ts +10 -0
  28. package/dist/middleware/quota-guard.js +27 -0
  29. package/dist/middleware/quota-guard.js.map +1 -0
  30. package/dist/middleware/rate-limiter.d.ts +5 -0
  31. package/dist/middleware/rate-limiter.js +50 -0
  32. package/dist/middleware/rate-limiter.js.map +1 -0
  33. package/dist/middleware/request-logger.d.ts +6 -0
  34. package/dist/middleware/request-logger.js +37 -0
  35. package/dist/middleware/request-logger.js.map +1 -0
  36. package/dist/middleware/session-auth.d.ts +19 -0
  37. package/dist/middleware/session-auth.js +99 -0
  38. package/dist/middleware/session-auth.js.map +1 -0
  39. package/dist/providers/aliyun.d.ts +13 -0
  40. package/dist/providers/aliyun.js +20 -0
  41. package/dist/providers/aliyun.js.map +1 -0
  42. package/dist/providers/base-provider.d.ts +36 -0
  43. package/dist/providers/base-provider.js +133 -0
  44. package/dist/providers/base-provider.js.map +1 -0
  45. package/dist/providers/deepseek.d.ts +11 -0
  46. package/dist/providers/deepseek.js +18 -0
  47. package/dist/providers/deepseek.js.map +1 -0
  48. package/dist/providers/registry.d.ts +18 -0
  49. package/dist/providers/registry.js +98 -0
  50. package/dist/providers/registry.js.map +1 -0
  51. package/dist/providers/types.d.ts +17 -0
  52. package/dist/providers/types.js +3 -0
  53. package/dist/providers/types.js.map +1 -0
  54. package/dist/routes/admin.d.ts +1 -0
  55. package/dist/routes/admin.js +153 -0
  56. package/dist/routes/admin.js.map +1 -0
  57. package/dist/routes/auth.d.ts +2 -0
  58. package/dist/routes/auth.js +318 -0
  59. package/dist/routes/auth.js.map +1 -0
  60. package/dist/routes/blog.d.ts +1 -0
  61. package/dist/routes/blog.js +29 -0
  62. package/dist/routes/blog.js.map +1 -0
  63. package/dist/routes/dashboard.d.ts +1 -0
  64. package/dist/routes/dashboard.js +184 -0
  65. package/dist/routes/dashboard.js.map +1 -0
  66. package/dist/routes/messages.d.ts +1 -0
  67. package/dist/routes/messages.js +309 -0
  68. package/dist/routes/messages.js.map +1 -0
  69. package/dist/routes/models.d.ts +1 -0
  70. package/dist/routes/models.js +39 -0
  71. package/dist/routes/models.js.map +1 -0
  72. package/dist/routes/payment.d.ts +1 -0
  73. package/dist/routes/payment.js +150 -0
  74. package/dist/routes/payment.js.map +1 -0
  75. package/dist/routes/sitemap.d.ts +1 -0
  76. package/dist/routes/sitemap.js +38 -0
  77. package/dist/routes/sitemap.js.map +1 -0
  78. package/dist/services/alipay.d.ts +27 -0
  79. package/dist/services/alipay.js +106 -0
  80. package/dist/services/alipay.js.map +1 -0
  81. package/dist/services/database.d.ts +4 -0
  82. package/dist/services/database.js +170 -0
  83. package/dist/services/database.js.map +1 -0
  84. package/dist/services/health-checker.d.ts +13 -0
  85. package/dist/services/health-checker.js +95 -0
  86. package/dist/services/health-checker.js.map +1 -0
  87. package/dist/services/mailer.d.ts +3 -0
  88. package/dist/services/mailer.js +91 -0
  89. package/dist/services/mailer.js.map +1 -0
  90. package/dist/services/metrics.d.ts +56 -0
  91. package/dist/services/metrics.js +94 -0
  92. package/dist/services/metrics.js.map +1 -0
  93. package/dist/services/remote-control.d.ts +20 -0
  94. package/dist/services/remote-control.js +209 -0
  95. package/dist/services/remote-control.js.map +1 -0
  96. package/dist/services/remote-ws.d.ts +5 -0
  97. package/dist/services/remote-ws.js +143 -0
  98. package/dist/services/remote-ws.js.map +1 -0
  99. package/dist/services/usage.d.ts +13 -0
  100. package/dist/services/usage.js +39 -0
  101. package/dist/services/usage.js.map +1 -0
  102. package/dist/utils/errors.d.ts +27 -0
  103. package/dist/utils/errors.js +48 -0
  104. package/dist/utils/errors.js.map +1 -0
  105. package/dist/utils/logger.d.ts +2 -0
  106. package/dist/utils/logger.js +14 -0
  107. package/dist/utils/logger.js.map +1 -0
  108. package/docker-compose.yml +19 -0
  109. package/package.json +39 -0
  110. package/public/robots.txt +8 -0
  111. package/src/config.ts +140 -0
  112. package/src/converter/request.ts +207 -0
  113. package/src/converter/response.ts +85 -0
  114. package/src/converter/stream.ts +373 -0
  115. package/src/converter/types.ts +257 -0
  116. package/src/data/posts.ts +474 -0
  117. package/src/index.ts +219 -0
  118. package/src/middleware/api-key-auth.ts +82 -0
  119. package/src/middleware/quota-guard.ts +28 -0
  120. package/src/middleware/rate-limiter.ts +61 -0
  121. package/src/middleware/request-logger.ts +36 -0
  122. package/src/middleware/session-auth.ts +91 -0
  123. package/src/providers/aliyun.ts +16 -0
  124. package/src/providers/base-provider.ts +148 -0
  125. package/src/providers/deepseek.ts +14 -0
  126. package/src/providers/registry.ts +111 -0
  127. package/src/providers/types.ts +26 -0
  128. package/src/routes/admin.ts +169 -0
  129. package/src/routes/auth.ts +369 -0
  130. package/src/routes/blog.ts +28 -0
  131. package/src/routes/dashboard.ts +208 -0
  132. package/src/routes/messages.ts +346 -0
  133. package/src/routes/models.ts +37 -0
  134. package/src/routes/payment.ts +189 -0
  135. package/src/routes/sitemap.ts +40 -0
  136. package/src/services/alipay.ts +116 -0
  137. package/src/services/database.ts +187 -0
  138. package/src/services/health-checker.ts +115 -0
  139. package/src/services/mailer.ts +90 -0
  140. package/src/services/metrics.ts +104 -0
  141. package/src/services/remote-control.ts +226 -0
  142. package/src/services/remote-ws.ts +145 -0
  143. package/src/services/usage.ts +57 -0
  144. package/src/types/express.d.ts +46 -0
  145. package/src/utils/errors.ts +44 -0
  146. package/src/utils/logger.ts +8 -0
  147. package/tsconfig.json +17 -0
  148. package/views/pages/404.ejs +14 -0
  149. package/views/pages/admin.ejs +307 -0
  150. package/views/pages/blog-post.ejs +378 -0
  151. package/views/pages/blog.ejs +148 -0
  152. package/views/pages/dashboard.ejs +441 -0
  153. package/views/pages/docs.ejs +807 -0
  154. package/views/pages/index.ejs +416 -0
  155. package/views/pages/login.ejs +170 -0
  156. package/views/pages/orders.ejs +111 -0
  157. package/views/pages/pricing.ejs +379 -0
  158. package/views/pages/register.ejs +397 -0
  159. package/views/pages/remote.ejs +334 -0
  160. package/views/pages/settings.ejs +373 -0
  161. package/views/partials/header.ejs +70 -0
  162. package/views/partials/nav.ejs +140 -0
@@ -0,0 +1,318 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AnthropicStreamTransformer = void 0;
4
+ const uuid_1 = require("uuid");
5
+ const logger_1 = require("../utils/logger");
6
+ /**
7
+ * Transforms an OpenAI SSE stream into Anthropic SSE stream format.
8
+ *
9
+ * This is the most critical component of the relay service.
10
+ * Claude Code expects Anthropic's streaming format exactly:
11
+ * message_start -> content_block_start/delta/stop (repeated) -> message_delta -> message_stop
12
+ */
13
+ class AnthropicStreamTransformer {
14
+ res;
15
+ displayModel;
16
+ // Block tracking
17
+ blockIndex = 0;
18
+ thinkingBlockOpen = false;
19
+ textBlockOpen = false;
20
+ toolCalls = new Map();
21
+ // State
22
+ hasToolUse = false;
23
+ finished = false;
24
+ buffer = '';
25
+ // Metrics
26
+ usage = { inputTokens: 0, outputTokens: 0 };
27
+ thinkingCharCount = 0;
28
+ outputCharCount = 0;
29
+ firstTokenTime = 0;
30
+ startTime = Date.now();
31
+ // Message identity
32
+ messageId;
33
+ constructor(res, displayModel) {
34
+ this.res = res;
35
+ this.displayModel = displayModel;
36
+ this.messageId = `msg_${(0, uuid_1.v4)().replace(/-/g, '')}`;
37
+ }
38
+ /**
39
+ * Pipe an OpenAI streaming response through this transformer.
40
+ * Returns usage stats when complete.
41
+ */
42
+ async pipe(backendRes) {
43
+ // Set SSE headers
44
+ this.res.setHeader('Content-Type', 'text/event-stream');
45
+ this.res.setHeader('Cache-Control', 'no-cache');
46
+ this.res.setHeader('Connection', 'keep-alive');
47
+ this.res.flushHeaders();
48
+ // Handle client disconnect
49
+ let clientDisconnected = false;
50
+ this.res.on('close', () => {
51
+ clientDisconnected = true;
52
+ backendRes.destroy();
53
+ });
54
+ // Send message_start
55
+ this.sendSSE('message_start', {
56
+ type: 'message_start',
57
+ message: {
58
+ id: this.messageId,
59
+ type: 'message',
60
+ role: 'assistant',
61
+ model: this.displayModel,
62
+ content: [],
63
+ stop_reason: null,
64
+ stop_sequence: null,
65
+ usage: { input_tokens: 0, output_tokens: 0 },
66
+ },
67
+ });
68
+ // Send initial ping
69
+ this.sendSSE('ping', { type: 'ping' });
70
+ return new Promise((resolve, reject) => {
71
+ backendRes.setEncoding('utf8');
72
+ backendRes.on('data', (chunk) => {
73
+ if (clientDisconnected)
74
+ return;
75
+ this.buffer += chunk;
76
+ this.processBuffer();
77
+ });
78
+ backendRes.on('end', () => {
79
+ // Process any remaining buffer
80
+ if (this.buffer.trim()) {
81
+ this.processBuffer();
82
+ }
83
+ if (!this.finished) {
84
+ this.finish();
85
+ }
86
+ resolve(this.getResult());
87
+ });
88
+ backendRes.on('error', (err) => {
89
+ logger_1.logger.error({ err }, 'Backend stream error');
90
+ if (!this.finished) {
91
+ this.finish();
92
+ }
93
+ resolve(this.getResult());
94
+ });
95
+ });
96
+ }
97
+ processBuffer() {
98
+ const lines = this.buffer.split('\n');
99
+ this.buffer = lines.pop() || ''; // Keep incomplete last line
100
+ for (const line of lines) {
101
+ if (!line.startsWith('data: '))
102
+ continue;
103
+ const payload = line.slice(6).trim();
104
+ if (payload === '[DONE]') {
105
+ this.finish();
106
+ return;
107
+ }
108
+ let chunk;
109
+ try {
110
+ chunk = JSON.parse(payload);
111
+ }
112
+ catch {
113
+ continue;
114
+ }
115
+ this.processChunk(chunk);
116
+ }
117
+ }
118
+ processChunk(chunk) {
119
+ // Track usage from provider
120
+ if (chunk.usage) {
121
+ if (chunk.usage.prompt_tokens)
122
+ this.usage.inputTokens = chunk.usage.prompt_tokens;
123
+ if (chunk.usage.completion_tokens)
124
+ this.usage.outputTokens = chunk.usage.completion_tokens;
125
+ }
126
+ const choice = chunk.choices?.[0];
127
+ if (!choice)
128
+ return;
129
+ const delta = choice.delta;
130
+ // Handle reasoning/thinking content
131
+ if (delta.reasoning_content) {
132
+ this.handleThinking(delta.reasoning_content);
133
+ }
134
+ // Handle text content
135
+ if (delta.content) {
136
+ this.handleText(delta.content);
137
+ }
138
+ // Handle tool calls
139
+ if (delta.tool_calls) {
140
+ this.handleToolCalls(delta.tool_calls);
141
+ }
142
+ // Handle finish_reason (some providers send this instead of [DONE])
143
+ if (choice.finish_reason && !this.finished) {
144
+ this.finish();
145
+ }
146
+ }
147
+ handleThinking(text) {
148
+ this.thinkingCharCount += text.length;
149
+ if (!this.thinkingBlockOpen) {
150
+ this.sendSSE('content_block_start', {
151
+ type: 'content_block_start',
152
+ index: this.blockIndex,
153
+ content_block: { type: 'thinking', thinking: '' },
154
+ });
155
+ this.thinkingBlockOpen = true;
156
+ }
157
+ this.sendSSE('content_block_delta', {
158
+ type: 'content_block_delta',
159
+ index: this.blockIndex,
160
+ delta: { type: 'thinking_delta', thinking: text },
161
+ });
162
+ }
163
+ handleText(text) {
164
+ if (!this.firstTokenTime)
165
+ this.firstTokenTime = Date.now();
166
+ this.outputCharCount += text.length;
167
+ // Close thinking block if open (thinking always comes before text)
168
+ this.closeThinkingBlock();
169
+ if (!this.textBlockOpen) {
170
+ this.sendSSE('content_block_start', {
171
+ type: 'content_block_start',
172
+ index: this.blockIndex,
173
+ content_block: { type: 'text', text: '' },
174
+ });
175
+ this.textBlockOpen = true;
176
+ }
177
+ this.sendSSE('content_block_delta', {
178
+ type: 'content_block_delta',
179
+ index: this.blockIndex,
180
+ delta: { type: 'text_delta', text },
181
+ });
182
+ }
183
+ handleToolCalls(toolCalls) {
184
+ // Close thinking and text blocks before tool use
185
+ this.closeThinkingBlock();
186
+ this.closeTextBlock();
187
+ this.hasToolUse = true;
188
+ for (const tc of toolCalls) {
189
+ const tcIndex = tc.index;
190
+ let acc = this.toolCalls.get(tcIndex);
191
+ // New tool call: create accumulator
192
+ if (!acc && tc.function?.name) {
193
+ acc = {
194
+ id: tc.id || `toolu_${(0, uuid_1.v4)().replace(/-/g, '').slice(0, 24)}`,
195
+ name: tc.function.name,
196
+ arguments: '',
197
+ blockIndex: this.blockIndex,
198
+ started: false,
199
+ };
200
+ this.toolCalls.set(tcIndex, acc);
201
+ this.blockIndex++; // Reserve a block index for this tool
202
+ }
203
+ if (!acc)
204
+ continue;
205
+ // Start the content block if not yet started
206
+ if (!acc.started) {
207
+ this.sendSSE('content_block_start', {
208
+ type: 'content_block_start',
209
+ index: acc.blockIndex,
210
+ content_block: {
211
+ type: 'tool_use',
212
+ id: acc.id,
213
+ name: acc.name,
214
+ input: {},
215
+ },
216
+ });
217
+ acc.started = true;
218
+ }
219
+ // Stream argument chunks
220
+ if (tc.function?.arguments) {
221
+ acc.arguments += tc.function.arguments;
222
+ this.sendSSE('content_block_delta', {
223
+ type: 'content_block_delta',
224
+ index: acc.blockIndex,
225
+ delta: { type: 'input_json_delta', partial_json: tc.function.arguments },
226
+ });
227
+ }
228
+ }
229
+ }
230
+ closeThinkingBlock() {
231
+ if (this.thinkingBlockOpen) {
232
+ this.sendSSE('content_block_stop', {
233
+ type: 'content_block_stop',
234
+ index: this.blockIndex,
235
+ });
236
+ this.blockIndex++;
237
+ this.thinkingBlockOpen = false;
238
+ }
239
+ }
240
+ closeTextBlock() {
241
+ if (this.textBlockOpen) {
242
+ this.sendSSE('content_block_stop', {
243
+ type: 'content_block_stop',
244
+ index: this.blockIndex,
245
+ });
246
+ this.blockIndex++;
247
+ this.textBlockOpen = false;
248
+ }
249
+ }
250
+ closeAllToolBlocks() {
251
+ for (const [, acc] of this.toolCalls) {
252
+ if (acc.started) {
253
+ this.sendSSE('content_block_stop', {
254
+ type: 'content_block_stop',
255
+ index: acc.blockIndex,
256
+ });
257
+ }
258
+ }
259
+ this.toolCalls.clear();
260
+ }
261
+ /**
262
+ * Finalize the stream. Called once when [DONE] or finish_reason is received.
263
+ */
264
+ finish() {
265
+ if (this.finished)
266
+ return;
267
+ this.finished = true;
268
+ // Determine stop_reason BEFORE closing blocks
269
+ const stopReason = this.hasToolUse ? 'tool_use' : 'end_turn';
270
+ // Close all open blocks
271
+ this.closeThinkingBlock();
272
+ this.closeTextBlock();
273
+ this.closeAllToolBlocks();
274
+ // Send message_delta with final stop_reason
275
+ this.sendSSE('message_delta', {
276
+ type: 'message_delta',
277
+ delta: { stop_reason: stopReason, stop_sequence: null },
278
+ usage: { output_tokens: this.usage.outputTokens },
279
+ });
280
+ // Send message_stop
281
+ this.sendSSE('message_stop', { type: 'message_stop' });
282
+ // End the response
283
+ if (!this.res.writableEnded) {
284
+ this.res.end();
285
+ }
286
+ }
287
+ sendSSE(event, data) {
288
+ if (this.res.writableEnded || this.res.destroyed)
289
+ return;
290
+ try {
291
+ this.res.write(`event: ${event}\ndata: ${JSON.stringify(data)}\n\n`);
292
+ }
293
+ catch {
294
+ // Client disconnected, ignore
295
+ }
296
+ }
297
+ getResult() {
298
+ const elapsed = Date.now() - this.startTime;
299
+ const ttft = this.firstTokenTime ? this.firstTokenTime - this.startTime : elapsed;
300
+ // Estimate tokens from char count if provider didn't report usage
301
+ if (this.usage.outputTokens === 0 && this.outputCharCount > 0) {
302
+ this.usage.outputTokens = Math.ceil(this.outputCharCount / 3);
303
+ }
304
+ const tokensPerSec = elapsed > 0
305
+ ? Math.round((this.usage.outputTokens / (elapsed / 1000)) * 100) / 100
306
+ : 0;
307
+ return {
308
+ inputTokens: this.usage.inputTokens,
309
+ outputTokens: this.usage.outputTokens,
310
+ thinkingTokens: Math.ceil(this.thinkingCharCount / 3),
311
+ ttftMs: ttft,
312
+ tokensPerSec,
313
+ durationMs: elapsed,
314
+ };
315
+ }
316
+ }
317
+ exports.AnthropicStreamTransformer = AnthropicStreamTransformer;
318
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/converter/stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,239 @@
1
+ export interface AnthropicRequest {
2
+ model: string;
3
+ messages: AnthropicMessage[];
4
+ system?: string | AnthropicSystemBlock[];
5
+ max_tokens: number;
6
+ temperature?: number;
7
+ top_p?: number;
8
+ tools?: AnthropicToolDefinition[];
9
+ tool_choice?: AnthropicToolChoice;
10
+ stream?: boolean;
11
+ stop_sequences?: string[];
12
+ metadata?: {
13
+ user_id?: string;
14
+ };
15
+ thinking?: {
16
+ type: 'enabled';
17
+ budget_tokens: number;
18
+ };
19
+ }
20
+ export interface AnthropicMessage {
21
+ role: 'user' | 'assistant';
22
+ content: string | AnthropicContentBlock[];
23
+ }
24
+ export type AnthropicContentBlock = AnthropicTextBlock | AnthropicThinkingBlock | AnthropicToolUseBlock | AnthropicToolResultBlock | AnthropicImageBlock;
25
+ export interface AnthropicTextBlock {
26
+ type: 'text';
27
+ text: string;
28
+ }
29
+ export interface AnthropicThinkingBlock {
30
+ type: 'thinking';
31
+ thinking: string;
32
+ }
33
+ export interface AnthropicToolUseBlock {
34
+ type: 'tool_use';
35
+ id: string;
36
+ name: string;
37
+ input: Record<string, unknown>;
38
+ }
39
+ export interface AnthropicToolResultBlock {
40
+ type: 'tool_result';
41
+ tool_use_id: string;
42
+ content: string | AnthropicContentBlock[];
43
+ is_error?: boolean;
44
+ }
45
+ export interface AnthropicImageBlock {
46
+ type: 'image';
47
+ source: {
48
+ type: 'base64';
49
+ media_type: string;
50
+ data: string;
51
+ };
52
+ }
53
+ export interface AnthropicSystemBlock {
54
+ type: 'text';
55
+ text: string;
56
+ cache_control?: {
57
+ type: 'ephemeral';
58
+ };
59
+ }
60
+ export interface AnthropicToolDefinition {
61
+ name: string;
62
+ description?: string;
63
+ input_schema: Record<string, unknown>;
64
+ }
65
+ export type AnthropicToolChoice = {
66
+ type: 'auto';
67
+ } | {
68
+ type: 'any';
69
+ } | {
70
+ type: 'tool';
71
+ name: string;
72
+ };
73
+ export interface AnthropicResponse {
74
+ id: string;
75
+ type: 'message';
76
+ role: 'assistant';
77
+ model: string;
78
+ content: AnthropicResponseBlock[];
79
+ stop_reason: 'end_turn' | 'max_tokens' | 'stop_sequence' | 'tool_use';
80
+ stop_sequence: string | null;
81
+ usage: AnthropicUsage;
82
+ }
83
+ export type AnthropicResponseBlock = AnthropicTextBlock | AnthropicThinkingBlock | AnthropicToolUseBlock;
84
+ export interface AnthropicUsage {
85
+ input_tokens: number;
86
+ output_tokens: number;
87
+ cache_creation_input_tokens?: number;
88
+ cache_read_input_tokens?: number;
89
+ }
90
+ export type AnthropicStreamEvent = {
91
+ type: 'message_start';
92
+ message: AnthropicResponse;
93
+ } | {
94
+ type: 'content_block_start';
95
+ index: number;
96
+ content_block: AnthropicResponseBlock;
97
+ } | {
98
+ type: 'content_block_delta';
99
+ index: number;
100
+ delta: AnthropicDelta;
101
+ } | {
102
+ type: 'content_block_stop';
103
+ index: number;
104
+ } | {
105
+ type: 'message_delta';
106
+ delta: {
107
+ stop_reason: string;
108
+ stop_sequence: string | null;
109
+ };
110
+ usage: {
111
+ output_tokens: number;
112
+ };
113
+ } | {
114
+ type: 'message_stop';
115
+ } | {
116
+ type: 'ping';
117
+ };
118
+ export type AnthropicDelta = {
119
+ type: 'text_delta';
120
+ text: string;
121
+ } | {
122
+ type: 'thinking_delta';
123
+ thinking: string;
124
+ } | {
125
+ type: 'input_json_delta';
126
+ partial_json: string;
127
+ };
128
+ export interface OpenAIRequest {
129
+ model: string;
130
+ messages: OpenAIMessage[];
131
+ max_tokens?: number;
132
+ temperature?: number;
133
+ top_p?: number;
134
+ tools?: OpenAITool[];
135
+ tool_choice?: string | OpenAIToolChoiceObject;
136
+ stream: boolean;
137
+ stream_options?: {
138
+ include_usage: boolean;
139
+ };
140
+ stop?: string[];
141
+ }
142
+ export type OpenAIMessage = OpenAISystemMessage | OpenAIUserMessage | OpenAIAssistantMessage | OpenAIToolMessage;
143
+ export interface OpenAISystemMessage {
144
+ role: 'system';
145
+ content: string;
146
+ }
147
+ export interface OpenAIUserMessage {
148
+ role: 'user';
149
+ content: string | OpenAIContentPart[];
150
+ }
151
+ export type OpenAIContentPart = {
152
+ type: 'text';
153
+ text: string;
154
+ } | {
155
+ type: 'image_url';
156
+ image_url: {
157
+ url: string;
158
+ };
159
+ };
160
+ export interface OpenAIAssistantMessage {
161
+ role: 'assistant';
162
+ content: string | null;
163
+ tool_calls?: OpenAIToolCall[];
164
+ }
165
+ export interface OpenAIToolMessage {
166
+ role: 'tool';
167
+ tool_call_id: string;
168
+ content: string;
169
+ }
170
+ export interface OpenAITool {
171
+ type: 'function';
172
+ function: {
173
+ name: string;
174
+ description: string;
175
+ parameters: Record<string, unknown>;
176
+ };
177
+ }
178
+ export interface OpenAIToolChoiceObject {
179
+ type: 'function';
180
+ function: {
181
+ name: string;
182
+ };
183
+ }
184
+ export interface OpenAIToolCall {
185
+ id: string;
186
+ type: 'function';
187
+ function: {
188
+ name: string;
189
+ arguments: string;
190
+ };
191
+ }
192
+ export interface OpenAIResponse {
193
+ id: string;
194
+ object: string;
195
+ created: number;
196
+ model: string;
197
+ choices: OpenAIChoice[];
198
+ usage?: OpenAIUsage;
199
+ }
200
+ export interface OpenAIChoice {
201
+ index: number;
202
+ message: OpenAIAssistantMessage & {
203
+ reasoning_content?: string;
204
+ };
205
+ finish_reason: 'stop' | 'length' | 'tool_calls' | null;
206
+ }
207
+ export interface OpenAIUsage {
208
+ prompt_tokens: number;
209
+ completion_tokens: number;
210
+ total_tokens: number;
211
+ }
212
+ export interface OpenAIStreamChunk {
213
+ id: string;
214
+ object: string;
215
+ created: number;
216
+ model: string;
217
+ choices: OpenAIStreamChoice[];
218
+ usage?: OpenAIUsage;
219
+ }
220
+ export interface OpenAIStreamChoice {
221
+ index: number;
222
+ delta: OpenAIStreamDelta;
223
+ finish_reason: 'stop' | 'length' | 'tool_calls' | null;
224
+ }
225
+ export interface OpenAIStreamDelta {
226
+ role?: string;
227
+ content?: string | null;
228
+ reasoning_content?: string;
229
+ tool_calls?: OpenAIStreamToolCall[];
230
+ }
231
+ export interface OpenAIStreamToolCall {
232
+ index: number;
233
+ id?: string;
234
+ type?: string;
235
+ function?: {
236
+ name?: string;
237
+ arguments?: string;
238
+ };
239
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ // ============================================================================
3
+ // Anthropic Messages API Types (what Claude Code sends/expects)
4
+ // ============================================================================
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/converter/types.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,gEAAgE;AAChE,+EAA+E"}
@@ -0,0 +1,19 @@
1
+ export interface BlogPost {
2
+ slug: string;
3
+ title: string;
4
+ description: string;
5
+ content: string;
6
+ category: string;
7
+ keywords: string[];
8
+ readTime: number;
9
+ date: string;
10
+ author: string;
11
+ }
12
+ export declare const posts: BlogPost[];
13
+ export declare function getPostBySlug(slug: string): BlogPost | undefined;
14
+ export declare function getPostsByCategory(category: string): BlogPost[];
15
+ export declare function getRecentPosts(limit?: number): BlogPost[];
16
+ export declare function getAllCategories(): {
17
+ name: string;
18
+ count: number;
19
+ }[];