typebulb 0.11.9 → 0.13.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 (191) hide show
  1. package/dist/agents/claude/client.js +341 -205
  2. package/dist/agents/claude/styles.css +3 -21
  3. package/dist/ai/aiProvider.d.ts +59 -0
  4. package/dist/ai/aiProvider.d.ts.map +1 -0
  5. package/dist/ai/aiProvider.js +109 -0
  6. package/dist/ai/aiProvider.js.map +1 -0
  7. package/dist/ai/aiProviders.d.ts +28 -0
  8. package/dist/ai/aiProviders.d.ts.map +1 -0
  9. package/dist/ai/aiProviders.js +47 -0
  10. package/dist/ai/aiProviders.js.map +1 -0
  11. package/dist/ai/chat.d.ts +32 -0
  12. package/dist/ai/chat.d.ts.map +1 -0
  13. package/dist/ai/chat.js +5 -0
  14. package/dist/ai/chat.js.map +1 -0
  15. package/dist/ai/index.d.ts +9 -0
  16. package/dist/ai/index.d.ts.map +1 -0
  17. package/dist/ai/index.js +11 -0
  18. package/dist/ai/index.js.map +1 -0
  19. package/dist/ai/protocol.d.ts +18 -0
  20. package/dist/ai/protocol.d.ts.map +1 -0
  21. package/dist/ai/protocol.js +3 -0
  22. package/dist/ai/protocol.js.map +1 -0
  23. package/dist/ai/providers/anthropic.d.ts +123 -0
  24. package/dist/ai/providers/anthropic.d.ts.map +1 -0
  25. package/dist/ai/providers/anthropic.js +130 -0
  26. package/dist/ai/providers/anthropic.js.map +1 -0
  27. package/dist/ai/providers/gemini.d.ts +62 -0
  28. package/dist/ai/providers/gemini.d.ts.map +1 -0
  29. package/dist/ai/providers/gemini.js +136 -0
  30. package/dist/ai/providers/gemini.js.map +1 -0
  31. package/dist/ai/providers/openAI.d.ts +146 -0
  32. package/dist/ai/providers/openAI.d.ts.map +1 -0
  33. package/dist/ai/providers/openAI.js +127 -0
  34. package/dist/ai/providers/openAI.js.map +1 -0
  35. package/dist/ai/providers/openRouter.d.ts +65 -0
  36. package/dist/ai/providers/openRouter.d.ts.map +1 -0
  37. package/dist/ai/providers/openRouter.js +82 -0
  38. package/dist/ai/providers/openRouter.js.map +1 -0
  39. package/dist/ai/sseParser.d.ts +32 -0
  40. package/dist/ai/sseParser.d.ts.map +1 -0
  41. package/dist/ai/sseParser.js +121 -0
  42. package/dist/ai/sseParser.js.map +1 -0
  43. package/dist/ai/stream.d.ts +20 -0
  44. package/dist/ai/stream.d.ts.map +1 -0
  45. package/dist/ai/stream.js +6 -0
  46. package/dist/ai/stream.js.map +1 -0
  47. package/dist/dts/cache.d.ts +30 -0
  48. package/dist/dts/cache.d.ts.map +1 -0
  49. package/dist/dts/cache.js +2 -0
  50. package/dist/dts/cache.js.map +1 -0
  51. package/dist/dts/definitelyTypedProvider.d.ts +20 -0
  52. package/dist/dts/definitelyTypedProvider.d.ts.map +1 -0
  53. package/dist/dts/definitelyTypedProvider.js +93 -0
  54. package/dist/dts/definitelyTypedProvider.js.map +1 -0
  55. package/dist/dts/dtsConfig.d.ts +12 -0
  56. package/dist/dts/dtsConfig.d.ts.map +1 -0
  57. package/dist/dts/dtsConfig.js +24 -0
  58. package/dist/dts/dtsConfig.js.map +1 -0
  59. package/dist/dts/dtsResolver.d.ts +63 -0
  60. package/dist/dts/dtsResolver.d.ts.map +1 -0
  61. package/dist/dts/dtsResolver.js +272 -0
  62. package/dist/dts/dtsResolver.js.map +1 -0
  63. package/dist/dts/fetchDts.d.ts +13 -0
  64. package/dist/dts/fetchDts.d.ts.map +1 -0
  65. package/dist/dts/fetchDts.js +46 -0
  66. package/dist/dts/fetchDts.js.map +1 -0
  67. package/dist/dts/httpFetch.d.ts +17 -0
  68. package/dist/dts/httpFetch.d.ts.map +1 -0
  69. package/dist/dts/httpFetch.js +35 -0
  70. package/dist/dts/httpFetch.js.map +1 -0
  71. package/dist/dts/index.d.ts +14 -0
  72. package/dist/dts/index.d.ts.map +1 -0
  73. package/dist/dts/index.js +14 -0
  74. package/dist/dts/index.js.map +1 -0
  75. package/dist/dts/libManifest.d.ts +41 -0
  76. package/dist/dts/libManifest.d.ts.map +1 -0
  77. package/dist/dts/libManifest.js +109 -0
  78. package/dist/dts/libManifest.js.map +1 -0
  79. package/dist/dts/negativeCacheHelper.d.ts +29 -0
  80. package/dist/dts/negativeCacheHelper.d.ts.map +1 -0
  81. package/dist/dts/negativeCacheHelper.js +44 -0
  82. package/dist/dts/negativeCacheHelper.js.map +1 -0
  83. package/dist/dts/tarballFetcher.d.ts +13 -0
  84. package/dist/dts/tarballFetcher.d.ts.map +1 -0
  85. package/dist/dts/tarballFetcher.js +58 -0
  86. package/dist/dts/tarballFetcher.js.map +1 -0
  87. package/dist/dts/tbTypings.d.ts +15 -0
  88. package/dist/dts/tbTypings.d.ts.map +1 -0
  89. package/dist/dts/tbTypings.js +210 -0
  90. package/dist/dts/tbTypings.js.map +1 -0
  91. package/dist/dts/typeProvider.d.ts +37 -0
  92. package/dist/dts/typeProvider.d.ts.map +1 -0
  93. package/dist/dts/typeProvider.js +30 -0
  94. package/dist/dts/typeProvider.js.map +1 -0
  95. package/dist/dts/typeRefScanner.d.ts +8 -0
  96. package/dist/dts/typeRefScanner.d.ts.map +1 -0
  97. package/dist/dts/typeRefScanner.js +33 -0
  98. package/dist/dts/typeRefScanner.js.map +1 -0
  99. package/dist/dts/typescriptProvider.d.ts +21 -0
  100. package/dist/dts/typescriptProvider.d.ts.map +1 -0
  101. package/dist/dts/typescriptProvider.js +140 -0
  102. package/dist/dts/typescriptProvider.js.map +1 -0
  103. package/dist/dts/virtualFs.d.ts +20 -0
  104. package/dist/dts/virtualFs.d.ts.map +1 -0
  105. package/dist/dts/virtualFs.js +48 -0
  106. package/dist/dts/virtualFs.js.map +1 -0
  107. package/dist/format/chunks.d.ts +20 -0
  108. package/dist/format/chunks.d.ts.map +1 -0
  109. package/dist/format/chunks.js +51 -0
  110. package/dist/format/chunks.js.map +1 -0
  111. package/dist/format/config.d.ts +17 -0
  112. package/dist/format/config.d.ts.map +1 -0
  113. package/dist/format/config.js +13 -0
  114. package/dist/format/config.js.map +1 -0
  115. package/dist/format/detection.d.ts +11 -0
  116. package/dist/format/detection.d.ts.map +1 -0
  117. package/dist/format/detection.js +43 -0
  118. package/dist/format/detection.js.map +1 -0
  119. package/dist/format/index.d.ts +8 -0
  120. package/dist/format/index.d.ts.map +1 -0
  121. package/dist/format/index.js +8 -0
  122. package/dist/format/index.js.map +1 -0
  123. package/dist/format/parse.d.ts +20 -0
  124. package/dist/format/parse.d.ts.map +1 -0
  125. package/dist/format/parse.js +88 -0
  126. package/dist/format/parse.js.map +1 -0
  127. package/dist/format/registry.d.ts +24 -0
  128. package/dist/format/registry.d.ts.map +1 -0
  129. package/dist/format/registry.js +31 -0
  130. package/dist/format/registry.js.map +1 -0
  131. package/dist/format/serialize.d.ts +8 -0
  132. package/dist/format/serialize.d.ts.map +1 -0
  133. package/dist/format/serialize.js +30 -0
  134. package/dist/format/serialize.js.map +1 -0
  135. package/dist/format/yaml.d.ts +4 -0
  136. package/dist/format/yaml.d.ts.map +1 -0
  137. package/dist/format/yaml.js +17 -0
  138. package/dist/format/yaml.js.map +1 -0
  139. package/dist/index.js +385 -84
  140. package/dist/lint/index.d.ts +29 -0
  141. package/dist/lint/index.d.ts.map +1 -0
  142. package/dist/lint/index.js +257 -0
  143. package/dist/lint/index.js.map +1 -0
  144. package/dist/render.js +174 -38
  145. package/dist/resolver/attempt.d.ts +2 -0
  146. package/dist/resolver/attempt.d.ts.map +1 -0
  147. package/dist/resolver/attempt.js +9 -0
  148. package/dist/resolver/attempt.js.map +1 -0
  149. package/dist/resolver/cdnClient.d.ts +46 -0
  150. package/dist/resolver/cdnClient.d.ts.map +1 -0
  151. package/dist/resolver/cdnClient.js +107 -0
  152. package/dist/resolver/cdnClient.js.map +1 -0
  153. package/dist/resolver/cdnConstants.d.ts +10 -0
  154. package/dist/resolver/cdnConstants.d.ts.map +1 -0
  155. package/dist/resolver/cdnConstants.js +10 -0
  156. package/dist/resolver/cdnConstants.js.map +1 -0
  157. package/dist/resolver/index.d.ts +20 -0
  158. package/dist/resolver/index.d.ts.map +1 -0
  159. package/dist/resolver/index.js +20 -0
  160. package/dist/resolver/index.js.map +1 -0
  161. package/dist/resolver/packageRef.d.ts +21 -0
  162. package/dist/resolver/packageRef.d.ts.map +1 -0
  163. package/dist/resolver/packageRef.js +89 -0
  164. package/dist/resolver/packageRef.js.map +1 -0
  165. package/dist/resolver/packageService.d.ts +40 -0
  166. package/dist/resolver/packageService.d.ts.map +1 -0
  167. package/dist/resolver/packageService.js +156 -0
  168. package/dist/resolver/packageService.js.map +1 -0
  169. package/dist/resolver/peerResolver.d.ts +33 -0
  170. package/dist/resolver/peerResolver.d.ts.map +1 -0
  171. package/dist/resolver/peerResolver.js +66 -0
  172. package/dist/resolver/peerResolver.js.map +1 -0
  173. package/dist/resolver/semver.d.ts +17 -0
  174. package/dist/resolver/semver.d.ts.map +1 -0
  175. package/dist/resolver/semver.js +56 -0
  176. package/dist/resolver/semver.js.map +1 -0
  177. package/dist/resolver/types.d.ts +33 -0
  178. package/dist/resolver/types.d.ts.map +1 -0
  179. package/dist/resolver/types.js +2 -0
  180. package/dist/resolver/types.js.map +1 -0
  181. package/dist/resolver/versionResolver.d.ts +29 -0
  182. package/dist/resolver/versionResolver.d.ts.map +1 -0
  183. package/dist/resolver/versionResolver.js +79 -0
  184. package/dist/resolver/versionResolver.js.map +1 -0
  185. package/dist/servers.js +142 -3
  186. package/dist/transpile/index.d.ts +19 -0
  187. package/dist/transpile/index.d.ts.map +1 -0
  188. package/dist/transpile/index.js +23 -0
  189. package/dist/transpile/index.js.map +1 -0
  190. package/dist/tsconfig.tsbuildinfo +1 -0
  191. package/package.json +99 -68
@@ -0,0 +1,130 @@
1
+ import { AIProvider } from '../aiProvider.js';
2
+ export class AnthropicProvider extends AIProvider {
3
+ constructor() {
4
+ super(...arguments);
5
+ this.providerName = 'Anthropic';
6
+ this.defaultBaseUrl = 'https://api.anthropic.com';
7
+ this.path = '/v1/messages';
8
+ }
9
+ // ── Request building ─────────────────────────────────────────────
10
+ buildHeaders(apiKey) {
11
+ return {
12
+ 'x-api-key': apiKey,
13
+ 'anthropic-version': '2023-06-01',
14
+ 'Content-Type': 'application/json',
15
+ 'Accept': 'application/json'
16
+ };
17
+ }
18
+ buildPayload(messages, model, opts, stream) {
19
+ const { system, conversationMessages } = this.extractSystemMessages(messages);
20
+ const payload = {
21
+ model,
22
+ max_tokens: this.getMaxTokens(model),
23
+ // Breakpoint on the last message caches the conversation prefix (extends each turn)
24
+ messages: this.withLastMessageCached(conversationMessages),
25
+ stream
26
+ };
27
+ // Enable web search by default, can be disabled via opts.webSearch = false
28
+ if (opts?.webSearch !== false) {
29
+ payload.tools = [{ type: 'web_search_20250305', name: 'web_search' }];
30
+ }
31
+ if (system) {
32
+ // Breakpoint on the (stable) system block caches tools + system across turns
33
+ payload.system = [{ type: 'text', text: system, cache_control: { type: 'ephemeral' } }];
34
+ }
35
+ if (this.isReasoningEnabled(opts)) {
36
+ const depth = opts.reasoning;
37
+ if (this.isModernModel(model)) {
38
+ // Opus 4.6+: adaptive thinking + effort parameter
39
+ const effortMap = {
40
+ 0: 'low',
41
+ 1: 'low',
42
+ 2: 'medium',
43
+ 3: 'high'
44
+ };
45
+ payload.thinking = { type: 'adaptive' };
46
+ payload.output_config = { effort: effortMap[depth] };
47
+ }
48
+ else {
49
+ // Older models: manual thinking with budget_tokens
50
+ const budgetMap = {
51
+ 0: 0,
52
+ 1: 2048,
53
+ 2: 4096,
54
+ 3: 8192
55
+ };
56
+ payload.thinking = {
57
+ type: 'enabled',
58
+ budget_tokens: budgetMap[depth]
59
+ };
60
+ }
61
+ }
62
+ return payload;
63
+ }
64
+ parseError(errorText, status) {
65
+ return this.parseJsonError(errorText, status);
66
+ }
67
+ // ── Response parsing ─────────────────────────────────────────────
68
+ parseNonStreamingResponse(json) {
69
+ if (!this.isAnthropicResponse(json)) {
70
+ return { text: '' };
71
+ }
72
+ const text = json.content
73
+ .filter((block) => block.type === 'text')
74
+ .map(block => block.text)
75
+ .join('');
76
+ const reasoning = json.content
77
+ .filter((block) => block.type === 'thinking')
78
+ .map(block => block.thinking)
79
+ .join('\n\n');
80
+ return { text, reasoning: reasoning || undefined };
81
+ }
82
+ parseProviderStreamChunk(json) {
83
+ if (!this.isAnthropicEvent(json))
84
+ return null;
85
+ switch (json.type) {
86
+ case 'content_block_delta':
87
+ if (json.delta.type === 'text_delta') {
88
+ return { text: json.delta.text || '' };
89
+ }
90
+ if (json.delta.type === 'thinking_delta') {
91
+ return { reasoning: json.delta.thinking || '' };
92
+ }
93
+ return null;
94
+ case 'message_start':
95
+ case 'content_block_start':
96
+ case 'content_block_stop':
97
+ case 'message_delta':
98
+ case 'message_stop':
99
+ case 'ping':
100
+ return null;
101
+ default:
102
+ return null;
103
+ }
104
+ }
105
+ // ── Private helpers ──────────────────────────────────────────────
106
+ /** Convert the final message to block form with a cache breakpoint; others pass through as-is. */
107
+ withLastMessageCached(messages) {
108
+ const last = messages.length - 1;
109
+ return messages.map((m, i) => i === last
110
+ ? { role: m.role, content: [{ type: 'text', text: m.content, cache_control: { type: 'ephemeral' } }] }
111
+ : m);
112
+ }
113
+ isAnthropicResponse(json) {
114
+ return typeof json === 'object' && json !== null
115
+ && json.type === 'message'
116
+ && Array.isArray(json.content);
117
+ }
118
+ isAnthropicEvent(json) {
119
+ return typeof json === 'object' && json !== null && 'type' in json;
120
+ }
121
+ /** Claude 4.6+: adaptive thinking, higher output limit */
122
+ isModernModel(model) {
123
+ const m = model.match(/^claude-\w+-(\d+)-(\d+)/);
124
+ return !!m && (+m[1] > 4 || (+m[1] === 4 && +m[2] >= 6));
125
+ }
126
+ getMaxTokens(model) {
127
+ return this.isModernModel(model) ? 64000 : 32000;
128
+ }
129
+ }
130
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../ai/src/providers/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Native Google Gemini API (/v1beta/models/{model}:generateContent, streaming via
3
+ * :streamGenerateContent?alt=sse) — wire types and provider implementation.
4
+ */
5
+ import type { ChatMessageDto, UpstreamErrorDto, ChatStreamPieceDto, ChatResponseDto, ProviderResponseDto, ProviderStreamEventDto } from '../protocol.js';
6
+ import { AIProvider, type ChatRequestOpts } from '../aiProvider.js';
7
+ export type GeminiRole = 'user' | 'model' | 'system';
8
+ export interface GeminiTextPart {
9
+ text: string;
10
+ }
11
+ export interface GeminiContent {
12
+ role: GeminiRole;
13
+ parts: GeminiTextPart[];
14
+ }
15
+ export interface GeminiGoogleSearchTool {
16
+ google_search: Record<string, never>;
17
+ }
18
+ export type GeminiTool = GeminiGoogleSearchTool;
19
+ export interface GeminiGenerationConfig {
20
+ temperature?: number;
21
+ topP?: number;
22
+ topK?: number;
23
+ maxOutputTokens?: number;
24
+ stopSequences?: string[];
25
+ candidateCount?: number;
26
+ }
27
+ export type GeminiFinishReason = 'FINISH_REASON_UNSPECIFIED' | 'STOP' | 'MAX_TOKENS' | 'SAFETY' | 'RECITATION' | 'LANGUAGE' | 'OTHER';
28
+ export interface GeminiCandidate {
29
+ content: GeminiContent;
30
+ finishReason?: GeminiFinishReason;
31
+ }
32
+ export interface GeminiPromptFeedback {
33
+ blockReason?: string;
34
+ }
35
+ export interface GeminiResponseDto extends ProviderResponseDto {
36
+ candidates?: GeminiCandidate[];
37
+ promptFeedback?: GeminiPromptFeedback;
38
+ }
39
+ export type GeminiSseEventDto = GeminiResponseDto;
40
+ /** Request payload for native Gemini API */
41
+ interface GeminiRequestPayload {
42
+ contents: GeminiContent[];
43
+ systemInstruction?: GeminiContent;
44
+ tools?: GeminiTool[];
45
+ generationConfig?: GeminiGenerationConfig;
46
+ }
47
+ export declare class GeminiProvider extends AIProvider {
48
+ protected readonly providerName = "Gemini";
49
+ readonly defaultBaseUrl = "https://generativelanguage.googleapis.com";
50
+ readonly path = "/v1beta/models";
51
+ getPath(model: string, stream: boolean): string;
52
+ buildHeaders(apiKey: string): Record<string, string>;
53
+ buildPayload(messages: ChatMessageDto[], _model: string, opts: ChatRequestOpts, _stream: boolean): GeminiRequestPayload;
54
+ parseError(errorText: string, status: number): UpstreamErrorDto;
55
+ parseNonStreamingResponse(json: ProviderResponseDto): ChatResponseDto;
56
+ protected parseProviderStreamChunk(json: ProviderStreamEventDto): ChatStreamPieceDto | null;
57
+ private isGeminiResponse;
58
+ private extractText;
59
+ private checkGeminiError;
60
+ }
61
+ export {};
62
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../ai/src/providers/gemini.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,UAAU,EAAuB,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAIxF,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;AAEpD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,EAAE,cAAc,EAAE,CAAA;CACxB;AAGD,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CACrC;AAED,MAAM,MAAM,UAAU,GAAG,sBAAsB,CAAA;AAG/C,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAGD,MAAM,MAAM,kBAAkB,GAC1B,2BAA2B,GAC3B,MAAM,GACN,YAAY,GACZ,QAAQ,GACR,YAAY,GACZ,UAAU,GACV,OAAO,CAAA;AAEX,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,CAAA;IACtB,YAAY,CAAC,EAAE,kBAAkB,CAAA;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAGD,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D,UAAU,CAAC,EAAE,eAAe,EAAE,CAAA;IAC9B,cAAc,CAAC,EAAE,oBAAoB,CAAA;CACtC;AAGD,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,CAAA;AAIjD,4CAA4C;AAC5C,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,iBAAiB,CAAC,EAAE,aAAa,CAAA;IACjC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;IACpB,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;CAC1C;AAED,qBAAa,cAAe,SAAQ,UAAU;IAC5C,SAAS,CAAC,QAAQ,CAAC,YAAY,YAAW;IAC1C,QAAQ,CAAC,cAAc,+CAA8C;IACrE,QAAQ,CAAC,IAAI,oBAAmB;IAIvB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM;IAMxD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAOpD,YAAY,CACV,QAAQ,EAAE,cAAc,EAAE,EAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,OAAO,GACf,oBAAoB;IA+BvB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB;IAkC/D,yBAAyB,CAAC,IAAI,EAAE,mBAAmB,GAAG,eAAe;IAoBrE,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB,GAAG,IAAI;IAa3F,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,gBAAgB;CAsBzB"}
@@ -0,0 +1,136 @@
1
+ import { AIProvider, ProviderStreamError } from '../aiProvider.js';
2
+ export class GeminiProvider extends AIProvider {
3
+ constructor() {
4
+ super(...arguments);
5
+ this.providerName = 'Gemini';
6
+ this.defaultBaseUrl = 'https://generativelanguage.googleapis.com';
7
+ this.path = '/v1beta/models';
8
+ }
9
+ // ── Request building ─────────────────────────────────────────────
10
+ getPath(model, stream) {
11
+ const method = stream ? 'streamGenerateContent' : 'generateContent';
12
+ const queryParam = stream ? '?alt=sse' : '';
13
+ return `/v1beta/models/${model}:${method}${queryParam}`;
14
+ }
15
+ buildHeaders(apiKey) {
16
+ return {
17
+ 'Content-Type': 'application/json',
18
+ 'x-goog-api-key': apiKey
19
+ };
20
+ }
21
+ buildPayload(messages, _model, opts, _stream) {
22
+ const { system, conversationMessages } = this.extractSystemMessages(messages, '\n');
23
+ const contents = conversationMessages.map(m => ({
24
+ role: m.role === 'assistant' ? 'model' : 'user',
25
+ parts: [{ text: m.content }]
26
+ }));
27
+ const payload = { contents };
28
+ // Enable search grounding by default, can be disabled via opts.webSearch = false
29
+ if (opts?.webSearch !== false) {
30
+ payload.tools = [{ google_search: {} }];
31
+ }
32
+ if (system) {
33
+ payload.systemInstruction = {
34
+ role: 'system',
35
+ parts: [{ text: system }]
36
+ };
37
+ }
38
+ if (this.isReasoningEnabled(opts)) {
39
+ payload.generationConfig = {
40
+ temperature: 0.7 + (opts.reasoning * 0.1)
41
+ };
42
+ }
43
+ return payload;
44
+ }
45
+ parseError(errorText, status) {
46
+ if (!errorText) {
47
+ return { message: `HTTP ${status}` };
48
+ }
49
+ try {
50
+ const parsed = JSON.parse(errorText);
51
+ // Native Gemini error format: { error: { code, message, status } }
52
+ // Or array wrapped: [{ error: {...} }]
53
+ const errorObj = Array.isArray(parsed)
54
+ ? parsed[0]?.error
55
+ : parsed?.error;
56
+ if (errorObj && typeof errorObj === 'object') {
57
+ return {
58
+ message: (errorObj.message || `HTTP ${status}`).split('\n')[0],
59
+ type: errorObj.status,
60
+ code: errorObj.code?.toString()
61
+ };
62
+ }
63
+ if (parsed.message) {
64
+ return { message: parsed.message };
65
+ }
66
+ return { message: errorText };
67
+ }
68
+ catch {
69
+ return { message: errorText };
70
+ }
71
+ }
72
+ // ── Response parsing ─────────────────────────────────────────────
73
+ parseNonStreamingResponse(json) {
74
+ this.checkGeminiError(json);
75
+ if (!this.isGeminiResponse(json)) {
76
+ return { text: '', status: 'failed', error: 'Invalid response format' };
77
+ }
78
+ const text = this.extractText(json) || '';
79
+ const finishReason = json.candidates?.[0]?.finishReason;
80
+ let status = 'complete';
81
+ if (finishReason === 'MAX_TOKENS') {
82
+ status = 'interrupted';
83
+ }
84
+ else if (finishReason === 'SAFETY' || finishReason === 'RECITATION') {
85
+ status = 'failed';
86
+ }
87
+ return { text, status };
88
+ }
89
+ parseProviderStreamChunk(json) {
90
+ this.checkGeminiError(json);
91
+ if (!this.isGeminiResponse(json))
92
+ return null;
93
+ const text = this.extractText(json);
94
+ if (!text)
95
+ return null;
96
+ return { text };
97
+ }
98
+ // ── Private helpers ──────────────────────────────────────────────
99
+ isGeminiResponse(json) {
100
+ return (typeof json === 'object' &&
101
+ json !== null &&
102
+ 'candidates' in json &&
103
+ Array.isArray(json.candidates));
104
+ }
105
+ extractText(response) {
106
+ const candidate = response.candidates?.[0];
107
+ if (!candidate?.content?.parts)
108
+ return undefined;
109
+ return candidate.content.parts
110
+ .map(part => part.text)
111
+ .filter(Boolean)
112
+ .join('');
113
+ }
114
+ checkGeminiError(json) {
115
+ if (typeof json === 'object' && json !== null && 'error' in json) {
116
+ const errorObj = json.error;
117
+ let message;
118
+ if (typeof errorObj === 'string') {
119
+ message = errorObj;
120
+ }
121
+ else if (typeof errorObj === 'object' && errorObj !== null) {
122
+ const err = errorObj;
123
+ message = err.message || err.status || 'Gemini returned an error';
124
+ }
125
+ else {
126
+ message = 'Gemini returned an error';
127
+ }
128
+ throw new ProviderStreamError(message);
129
+ }
130
+ if (this.isGeminiResponse(json) && json.promptFeedback?.blockReason) {
131
+ const reason = json.promptFeedback.blockReason;
132
+ throw new ProviderStreamError(`Prompt blocked: ${reason}`);
133
+ }
134
+ }
135
+ }
136
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../ai/src/providers/gemini.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * OpenAI Responses API (/v1/responses, not Chat Completions) — wire types and provider implementation.
3
+ */
4
+ import type { ChatMessageDto, UpstreamErrorDto, ChatStreamPieceDto, ChatResponseDto, ProviderResponseDto, ProviderStreamEventDto } from '../protocol.js';
5
+ import { AIProvider, type ChatRequestOpts } from '../aiProvider.js';
6
+ export type OpenAIReasoningEffort = 'minimal' | 'low' | 'medium' | 'high';
7
+ export type OpenAIReasoningSummary = 'auto' | 'concise' | 'detailed';
8
+ export interface OpenAIWebSearchTool {
9
+ type: 'web_search';
10
+ }
11
+ export type OpenAITool = OpenAIWebSearchTool;
12
+ export interface OpenAIResponsesApiRequestDto {
13
+ model: string;
14
+ input: string;
15
+ reasoning?: {
16
+ effort: OpenAIReasoningEffort;
17
+ summary?: OpenAIReasoningSummary;
18
+ };
19
+ tools?: OpenAITool[];
20
+ stream?: boolean;
21
+ }
22
+ export interface OpenAIResponseOutputText {
23
+ text: string;
24
+ type: 'output_text';
25
+ }
26
+ export interface OpenAIResponseReasoningSummary {
27
+ text: string;
28
+ type: 'summary_text';
29
+ }
30
+ export interface OpenAIResponseOutputMessage {
31
+ type: 'message';
32
+ content: Array<OpenAIResponseOutputText>;
33
+ }
34
+ export interface OpenAIResponseReasoningItem {
35
+ type: 'reasoning';
36
+ summary: Array<OpenAIResponseReasoningSummary>;
37
+ }
38
+ export type OpenAIResponseOutputItem = OpenAIResponseOutputMessage | OpenAIResponseReasoningItem;
39
+ export interface OpenAIResponsesApiResponseDto extends ProviderResponseDto {
40
+ object: 'response';
41
+ output_text: string;
42
+ output: Array<OpenAIResponseOutputItem>;
43
+ }
44
+ interface OpenAIResponseEventBase {
45
+ sequence_number: number;
46
+ }
47
+ interface OpenAIResponseItemLocation {
48
+ item_id: string;
49
+ output_index: number;
50
+ }
51
+ interface OpenAIResponseContentLocation extends OpenAIResponseItemLocation {
52
+ content_index: number;
53
+ }
54
+ export type OpenAIResponseCreatedEvent = OpenAIResponseEventBase & {
55
+ type: 'response.created';
56
+ response: {
57
+ id: string;
58
+ object: 'response';
59
+ created_at: number;
60
+ model: string;
61
+ };
62
+ };
63
+ export type OpenAIResponseInProgressEvent = OpenAIResponseEventBase & {
64
+ type: 'response.in_progress';
65
+ };
66
+ export type OpenAIResponseOutputItemAddedEvent = OpenAIResponseEventBase & {
67
+ type: 'response.output_item.added';
68
+ output_index: number;
69
+ item: OpenAIResponseOutputItem;
70
+ };
71
+ export type OpenAIResponseOutputItemDoneEvent = OpenAIResponseEventBase & {
72
+ type: 'response.output_item.done';
73
+ output_index: number;
74
+ item: OpenAIResponseOutputItem;
75
+ };
76
+ export type OpenAIResponseContentPartAddedEvent = OpenAIResponseEventBase & OpenAIResponseContentLocation & {
77
+ type: 'response.content_part.added';
78
+ part: OpenAIResponseOutputText;
79
+ };
80
+ export type OpenAIResponseContentPartDoneEvent = OpenAIResponseEventBase & OpenAIResponseContentLocation & {
81
+ type: 'response.content_part.done';
82
+ part: OpenAIResponseOutputText;
83
+ };
84
+ export type OpenAIResponseOutputTextDeltaEvent = OpenAIResponseEventBase & OpenAIResponseContentLocation & {
85
+ type: 'response.output_text.delta';
86
+ delta: string;
87
+ };
88
+ export type OpenAIResponseOutputTextDoneEvent = OpenAIResponseEventBase & OpenAIResponseContentLocation & {
89
+ type: 'response.output_text.done';
90
+ text: string;
91
+ };
92
+ export type OpenAIResponseReasoningSummaryTextDeltaEvent = OpenAIResponseEventBase & OpenAIResponseItemLocation & {
93
+ type: 'response.reasoning_summary_text.delta';
94
+ delta: string;
95
+ summary_index: number;
96
+ };
97
+ export type OpenAIResponseReasoningSummaryTextDoneEvent = OpenAIResponseEventBase & OpenAIResponseItemLocation & {
98
+ type: 'response.reasoning_summary_text.done';
99
+ text: string;
100
+ summary_index: number;
101
+ };
102
+ export type OpenAIResponseCompletedEvent = OpenAIResponseEventBase & {
103
+ type: 'response.completed';
104
+ response: OpenAIResponsesApiResponseDto;
105
+ };
106
+ export type OpenAIResponseErrorEvent = OpenAIResponseEventBase & {
107
+ type: 'error';
108
+ error: {
109
+ type: string;
110
+ code: string | null;
111
+ message: string;
112
+ param: string | null;
113
+ };
114
+ };
115
+ export type OpenAIResponseFailedEvent = OpenAIResponseEventBase & {
116
+ type: 'response.failed';
117
+ };
118
+ export type OpenAIResponseWebSearchInProgressEvent = OpenAIResponseEventBase & {
119
+ type: 'response.web_search_call.in_progress';
120
+ };
121
+ export type OpenAIResponseWebSearchSearchingEvent = OpenAIResponseEventBase & {
122
+ type: 'response.web_search_call.searching';
123
+ };
124
+ export type OpenAIResponseWebSearchCompletedEvent = OpenAIResponseEventBase & {
125
+ type: 'response.web_search_call.completed';
126
+ };
127
+ export type OpenAIResponseAnnotationAddedEvent = OpenAIResponseEventBase & OpenAIResponseContentLocation & {
128
+ type: 'response.output_text.annotation.added';
129
+ };
130
+ export type OpenAIResponseSseEventDto = OpenAIResponseCreatedEvent | OpenAIResponseInProgressEvent | OpenAIResponseOutputItemAddedEvent | OpenAIResponseOutputItemDoneEvent | OpenAIResponseContentPartAddedEvent | OpenAIResponseContentPartDoneEvent | OpenAIResponseOutputTextDeltaEvent | OpenAIResponseOutputTextDoneEvent | OpenAIResponseAnnotationAddedEvent | OpenAIResponseReasoningSummaryTextDeltaEvent | OpenAIResponseReasoningSummaryTextDoneEvent | OpenAIResponseWebSearchInProgressEvent | OpenAIResponseWebSearchSearchingEvent | OpenAIResponseWebSearchCompletedEvent | OpenAIResponseCompletedEvent | OpenAIResponseErrorEvent | OpenAIResponseFailedEvent;
131
+ export declare class OpenAIProvider extends AIProvider {
132
+ protected readonly providerName = "OpenAI";
133
+ readonly defaultBaseUrl = "https://api.openai.com";
134
+ readonly path = "/v1/responses";
135
+ private readonly effortMap;
136
+ buildHeaders(apiKey: string): Record<string, string>;
137
+ buildPayload(messages: ChatMessageDto[], model: string, opts: ChatRequestOpts, stream: boolean): OpenAIResponsesApiRequestDto;
138
+ parseError(errorText: string, status: number): UpstreamErrorDto;
139
+ parseNonStreamingResponse(json: ProviderResponseDto): ChatResponseDto;
140
+ protected parseProviderStreamChunk(json: ProviderStreamEventDto): ChatStreamPieceDto | null;
141
+ private convertMessagesToInput;
142
+ private isResponsesApiEvent;
143
+ private isResponsesApiResponse;
144
+ }
145
+ export {};
146
+ //# sourceMappingURL=openAI.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openAI.d.ts","sourceRoot":"","sources":["../../../ai/src/providers/openAI.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAEhB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,UAAU,EAAuB,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAKxF,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;AACzE,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAA;AAGpE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,YAAY,CAAA;CACnB;AAED,MAAM,MAAM,UAAU,GAAG,mBAAmB,CAAA;AAG5C,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE;QACV,MAAM,EAAE,qBAAqB,CAAA;QAC7B,OAAO,CAAC,EAAE,sBAAsB,CAAA;KACjC,CAAA;IACD,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;IACpB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAGD,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,aAAa,CAAA;CACpB;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,cAAc,CAAA;CACrB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAA;CACzC;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,WAAW,CAAA;IACjB,OAAO,EAAE,KAAK,CAAC,8BAA8B,CAAC,CAAA;CAC/C;AAED,MAAM,MAAM,wBAAwB,GAAG,2BAA2B,GAAG,2BAA2B,CAAA;AAGhG,MAAM,WAAW,6BAA8B,SAAQ,mBAAmB;IACxE,MAAM,EAAE,UAAU,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAA;CACxC;AAID,UAAU,uBAAuB;IAC/B,eAAe,EAAE,MAAM,CAAA;CACxB;AAGD,UAAU,0BAA0B;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,UAAU,6BAA8B,SAAQ,0BAA0B;IACxE,aAAa,EAAE,MAAM,CAAA;CACtB;AAGD,MAAM,MAAM,0BAA0B,GAAG,uBAAuB,GAAG;IACjE,IAAI,EAAE,kBAAkB,CAAA;IACxB,QAAQ,EAAE;QACR,EAAE,EAAE,MAAM,CAAA;QACV,MAAM,EAAE,UAAU,CAAA;QAClB,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;CACF,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,uBAAuB,GAAG;IACpE,IAAI,EAAE,sBAAsB,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,kCAAkC,GAAG,uBAAuB,GAAG;IACzE,IAAI,EAAE,4BAA4B,CAAA;IAClC,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,wBAAwB,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,iCAAiC,GAAG,uBAAuB,GAAG;IACxE,IAAI,EAAE,2BAA2B,CAAA;IACjC,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,wBAAwB,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,mCAAmC,GAAG,uBAAuB,GAAG,6BAA6B,GAAG;IAC1G,IAAI,EAAE,6BAA6B,CAAA;IACnC,IAAI,EAAE,wBAAwB,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,kCAAkC,GAAG,uBAAuB,GAAG,6BAA6B,GAAG;IACzG,IAAI,EAAE,4BAA4B,CAAA;IAClC,IAAI,EAAE,wBAAwB,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,kCAAkC,GAAG,uBAAuB,GAAG,6BAA6B,GAAG;IACzG,IAAI,EAAE,4BAA4B,CAAA;IAClC,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,iCAAiC,GAAG,uBAAuB,GAAG,6BAA6B,GAAG;IACxG,IAAI,EAAE,2BAA2B,CAAA;IACjC,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,4CAA4C,GAAG,uBAAuB,GAAG,0BAA0B,GAAG;IAChH,IAAI,EAAE,uCAAuC,CAAA;IAC7C,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,2CAA2C,GAAG,uBAAuB,GAAG,0BAA0B,GAAG;IAC/G,IAAI,EAAE,sCAAsC,CAAA;IAC5C,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG,uBAAuB,GAAG;IACnE,IAAI,EAAE,oBAAoB,CAAA;IAC1B,QAAQ,EAAE,6BAA6B,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,uBAAuB,GAAG;IAC/D,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;QACnB,OAAO,EAAE,MAAM,CAAA;QACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KACrB,CAAA;CACF,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG,uBAAuB,GAAG;IAChE,IAAI,EAAE,iBAAiB,CAAA;CACxB,CAAA;AAGD,MAAM,MAAM,sCAAsC,GAAG,uBAAuB,GAAG;IAC7E,IAAI,EAAE,sCAAsC,CAAA;CAC7C,CAAA;AAED,MAAM,MAAM,qCAAqC,GAAG,uBAAuB,GAAG;IAC5E,IAAI,EAAE,oCAAoC,CAAA;CAC3C,CAAA;AAED,MAAM,MAAM,qCAAqC,GAAG,uBAAuB,GAAG;IAC5E,IAAI,EAAE,oCAAoC,CAAA;CAC3C,CAAA;AAGD,MAAM,MAAM,kCAAkC,GAAG,uBAAuB,GAAG,6BAA6B,GAAG;IACzG,IAAI,EAAE,uCAAuC,CAAA;CAC9C,CAAA;AAGD,MAAM,MAAM,yBAAyB,GACjC,0BAA0B,GAC1B,6BAA6B,GAC7B,kCAAkC,GAClC,iCAAiC,GACjC,mCAAmC,GACnC,kCAAkC,GAClC,kCAAkC,GAClC,iCAAiC,GACjC,kCAAkC,GAClC,4CAA4C,GAC5C,2CAA2C,GAC3C,sCAAsC,GACtC,qCAAqC,GACrC,qCAAqC,GACrC,4BAA4B,GAC5B,wBAAwB,GACxB,yBAAyB,CAAA;AAI7B,qBAAa,cAAe,SAAQ,UAAU;IAC5C,SAAS,CAAC,QAAQ,CAAC,YAAY,YAAW;IAC1C,QAAQ,CAAC,cAAc,4BAA2B;IAClD,QAAQ,CAAC,IAAI,mBAAkB;IAE/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAKzB;IAID,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQpD,YAAY,CACV,QAAQ,EAAE,cAAc,EAAE,EAC1B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,OAAO,GACd,4BAA4B;IAwB/B,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB;IAM/D,yBAAyB,CAAC,IAAI,EAAE,mBAAmB,GAAG,eAAe;IA0BrE,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB,GAAG,IAAI;IA4C3F,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,sBAAsB;CAI/B"}
@@ -0,0 +1,127 @@
1
+ import { AIProvider, ProviderStreamError } from '../aiProvider.js';
2
+ // ── Provider implementation ──────────────────────────────────────────
3
+ export class OpenAIProvider extends AIProvider {
4
+ constructor() {
5
+ super(...arguments);
6
+ this.providerName = 'OpenAI';
7
+ this.defaultBaseUrl = 'https://api.openai.com';
8
+ this.path = '/v1/responses';
9
+ this.effortMap = {
10
+ 0: 'minimal',
11
+ 1: 'low',
12
+ 2: 'medium',
13
+ 3: 'high'
14
+ };
15
+ }
16
+ // ── Request building ─────────────────────────────────────────────
17
+ buildHeaders(apiKey) {
18
+ return {
19
+ 'Authorization': `Bearer ${apiKey}`,
20
+ 'Content-Type': 'application/json',
21
+ 'Accept': 'application/json'
22
+ };
23
+ }
24
+ buildPayload(messages, model, opts, stream) {
25
+ // Responses API uses 'input' (string) instead of 'messages' (array)
26
+ const input = this.convertMessagesToInput(messages);
27
+ const payload = {
28
+ model,
29
+ input,
30
+ stream
31
+ };
32
+ // Enable web search by default, can be disabled via opts.webSearch = false
33
+ if (opts?.webSearch !== false) {
34
+ payload.tools = [{ type: 'web_search' }];
35
+ }
36
+ if (this.isReasoningEnabled(opts)) {
37
+ payload.reasoning = {
38
+ effort: this.effortMap[opts.reasoning],
39
+ summary: 'auto'
40
+ };
41
+ }
42
+ return payload;
43
+ }
44
+ parseError(errorText, status) {
45
+ return this.parseJsonError(errorText, status, true);
46
+ }
47
+ // ── Response parsing ─────────────────────────────────────────────
48
+ parseNonStreamingResponse(json) {
49
+ if (!this.isResponsesApiResponse(json)) {
50
+ return { text: '' };
51
+ }
52
+ let text = json.output_text || '';
53
+ let reasoning;
54
+ if (json.output && Array.isArray(json.output)) {
55
+ for (const item of json.output) {
56
+ if (item.type === 'reasoning' && item.summary) {
57
+ reasoning = item.summary.map((s) => s.text).join('\n');
58
+ }
59
+ // Fallback: extract text from output array when output_text is missing
60
+ if (!text && item.type === 'message' && item.content) {
61
+ text = item.content
62
+ .filter((c) => c.type === 'output_text')
63
+ .map((c) => c.text)
64
+ .join('');
65
+ }
66
+ }
67
+ }
68
+ return { text, reasoning };
69
+ }
70
+ parseProviderStreamChunk(json) {
71
+ if (!this.isResponsesApiEvent(json))
72
+ return null;
73
+ const eventType = json.type;
74
+ switch (eventType) {
75
+ case 'error':
76
+ return null;
77
+ case 'response.failed': {
78
+ const resp = json.response;
79
+ const errObj = resp?.error;
80
+ const errorMsg = errObj?.message || 'Response failed';
81
+ const isQuotaOrRateLimit = errObj?.code === 'insufficient_quota' || errObj?.code === 'rate_limit_exceeded';
82
+ throw new ProviderStreamError(errorMsg, isQuotaOrRateLimit ? 'rate_limit' : 'unknown', isQuotaOrRateLimit);
83
+ }
84
+ case 'response.output_text.delta':
85
+ return { text: json.delta };
86
+ case 'response.reasoning_summary_text.delta':
87
+ return { reasoning: json.delta };
88
+ case 'response.created':
89
+ case 'response.in_progress':
90
+ case 'response.output_item.added':
91
+ case 'response.output_item.done':
92
+ case 'response.content_part.added':
93
+ case 'response.content_part.done':
94
+ case 'response.output_text.done':
95
+ case 'response.output_text.annotation.added':
96
+ case 'response.reasoning_summary_text.done':
97
+ case 'response.completed':
98
+ case 'response.web_search_call.in_progress':
99
+ case 'response.web_search_call.searching':
100
+ case 'response.web_search_call.completed':
101
+ return null;
102
+ default:
103
+ return null;
104
+ }
105
+ }
106
+ // ── Private helpers ──────────────────────────────────────────────
107
+ convertMessagesToInput(messages) {
108
+ return messages.map(m => {
109
+ if (m.role === 'system')
110
+ return `System: ${m.content}`;
111
+ if (m.role === 'user')
112
+ return `User: ${m.content}`;
113
+ if (m.role === 'assistant')
114
+ return `Assistant: ${m.content}`;
115
+ return m.content;
116
+ }).join('\n\n');
117
+ }
118
+ isResponsesApiEvent(json) {
119
+ return typeof json === 'object' && json !== null
120
+ && 'type' in json && typeof json.type === 'string';
121
+ }
122
+ isResponsesApiResponse(json) {
123
+ return typeof json === 'object' && json !== null
124
+ && json.object === 'response';
125
+ }
126
+ }
127
+ //# sourceMappingURL=openAI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openAI.js","sourceRoot":"","sources":["../../../ai/src/providers/openAI.ts"],"names":[],"mappings":"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"}