@things-factory/ai-client-base 10.0.0-beta.64

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 (46) hide show
  1. package/config/config.development.js +72 -0
  2. package/config/config.production.js +24 -0
  3. package/dist-server/index.d.ts +19 -0
  4. package/dist-server/index.js +23 -0
  5. package/dist-server/index.js.map +1 -0
  6. package/dist-server/service/factory.d.ts +16 -0
  7. package/dist-server/service/factory.js +65 -0
  8. package/dist-server/service/factory.js.map +1 -0
  9. package/dist-server/service/index.d.ts +4 -0
  10. package/dist-server/service/index.js +8 -0
  11. package/dist-server/service/index.js.map +1 -0
  12. package/dist-server/service/providers/anthropic.d.ts +13 -0
  13. package/dist-server/service/providers/anthropic.js +201 -0
  14. package/dist-server/service/providers/anthropic.js.map +1 -0
  15. package/dist-server/service/providers/gemini.d.ts +14 -0
  16. package/dist-server/service/providers/gemini.js +292 -0
  17. package/dist-server/service/providers/gemini.js.map +1 -0
  18. package/dist-server/service/providers/index.d.ts +6 -0
  19. package/dist-server/service/providers/index.js +14 -0
  20. package/dist-server/service/providers/index.js.map +1 -0
  21. package/dist-server/service/providers/openai.d.ts +13 -0
  22. package/dist-server/service/providers/openai.js +232 -0
  23. package/dist-server/service/providers/openai.js.map +1 -0
  24. package/dist-server/service/types.d.ts +171 -0
  25. package/dist-server/service/types.js +8 -0
  26. package/dist-server/service/types.js.map +1 -0
  27. package/dist-server/service/utils/index.d.ts +1 -0
  28. package/dist-server/service/utils/index.js +5 -0
  29. package/dist-server/service/utils/index.js.map +1 -0
  30. package/dist-server/service/utils/parse-json.d.ts +20 -0
  31. package/dist-server/service/utils/parse-json.js +99 -0
  32. package/dist-server/service/utils/parse-json.js.map +1 -0
  33. package/dist-server/tsconfig.tsbuildinfo +1 -0
  34. package/package.json +31 -0
  35. package/server/index.ts +19 -0
  36. package/server/service/factory.ts +68 -0
  37. package/server/service/index.ts +4 -0
  38. package/server/service/providers/anthropic.ts +252 -0
  39. package/server/service/providers/gemini.ts +353 -0
  40. package/server/service/providers/index.ts +8 -0
  41. package/server/service/providers/openai.ts +284 -0
  42. package/server/service/types.ts +197 -0
  43. package/server/service/utils/index.ts +1 -0
  44. package/server/service/utils/parse-json.ts +100 -0
  45. package/things-factory.config.js +1 -0
  46. package/tsconfig.json +9 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../server/service/providers/openai.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * OpenAI AI Client adapter.\n *\n * 기본 모델: gpt-4o (구성에서 override 가능).\n * SDK: openai\n *\n * 비고: legacy `openai` config 키 (codelingua 의 사용처) 도 factory.ts 가 이 어댑터로 자동 매핑.\n * organization 필드 지원.\n */\nimport OpenAI from 'openai'\nimport type {\n AIChatOptions,\n AIClient,\n AIClientConfig,\n AIContentPart,\n AIJSONOptions,\n AIMessage,\n AITool,\n AIToolCall,\n AIToolChatOptions,\n AIToolChatResult,\n AIVisionOptions\n} from '../types.js'\nimport { registerAIProvider } from '../factory.js'\nimport { parseJSONResponse } from '../utils/parse-json.js'\n\nconst DEFAULT_MODEL = 'gpt-4o'\nconst DEFAULT_MAX_TOKENS = 4096\n\nexport class OpenAIAIClient implements AIClient {\n readonly id: string\n private sdk: OpenAI\n private defaultModel: string\n\n constructor(config: AIClientConfig) {\n // OpenAI SDK 는 apiKey 없을 시 OPENAI_API_KEY 환경변수 자동 인식.\n const apiKey = config.apiKey ?? process.env.OPENAI_API_KEY\n this.sdk = new OpenAI({\n apiKey,\n ...(config.organization && { organization: config.organization }),\n ...(config.baseURL && { baseURL: config.baseURL })\n })\n this.defaultModel = config.model ?? DEFAULT_MODEL\n this.id = `openai:${this.defaultModel}`\n }\n\n async chat(messages: AIMessage[], options: AIChatOptions = {}): Promise<string> {\n const sdkMessages = buildSDKMessages(messages, options.systemPrompt)\n const response = await this.sdk.chat.completions.create({\n model: options.model ?? this.defaultModel,\n max_tokens: options.maxTokens ?? DEFAULT_MAX_TOKENS,\n ...(options.temperature !== undefined && { temperature: options.temperature }),\n ...(options.stopSequences && { stop: options.stopSequences }),\n messages: sdkMessages as any\n })\n return response.choices[0]?.message?.content ?? ''\n }\n\n async generateJSON<T = unknown>(\n prompt: string | AIMessage[],\n options: AIJSONOptions = {}\n ): Promise<T> {\n const messages: AIMessage[] =\n typeof prompt === 'string' ? [{ role: 'user', content: prompt }] : prompt\n\n const schemaHint = options.schema\n ? `\\n\\nResponse MUST conform to this JSON schema:\\n${JSON.stringify(options.schema)}`\n : ''\n const enforcedSystem =\n (options.systemPrompt ? options.systemPrompt + '\\n\\n' : '') +\n 'Return only valid JSON. No markdown code fences, no commentary.' +\n schemaHint\n\n const sdkMessages = buildSDKMessages(messages, enforcedSystem)\n const response = await this.sdk.chat.completions.create({\n model: options.model ?? this.defaultModel,\n max_tokens: options.maxTokens ?? DEFAULT_MAX_TOKENS,\n ...(options.temperature !== undefined && { temperature: options.temperature }),\n response_format: { type: 'json_object' },\n messages: sdkMessages as any\n })\n const text = response.choices[0]?.message?.content ?? '{}'\n return parseJSONResponse<T>(text)\n }\n\n async vision(\n image: Buffer | Uint8Array | { url: string },\n prompt: string,\n options: AIVisionOptions = {}\n ): Promise<string> {\n const imagePart: AIContentPart =\n typeof image === 'object' && 'url' in image\n ? { type: 'image', source: { kind: 'url', url: image.url } }\n : {\n type: 'image',\n source: { kind: 'base64', data: image as Buffer | Uint8Array, mediaType: 'image/png' }\n }\n\n return this.chat(\n [{ role: 'user', content: [imagePart, { type: 'text', text: prompt }] }],\n options\n )\n }\n\n async chatWithTools(\n messages: AIMessage[],\n tools: AITool[],\n options: AIToolChatOptions = {}\n ): Promise<AIToolChatResult> {\n const sdkMessages = buildSDKMessages(messages, options.systemPrompt)\n\n const sdkTools = tools.map(t => ({\n type: 'function' as const,\n function: {\n name: t.name,\n description: t.description,\n parameters: t.parameters\n }\n }))\n\n const toolChoice = buildOpenAIToolChoice(options)\n\n const response = await this.sdk.chat.completions.create({\n model: options.model ?? this.defaultModel,\n max_tokens: options.maxTokens ?? DEFAULT_MAX_TOKENS,\n ...(options.temperature !== undefined && { temperature: options.temperature }),\n ...(options.stopSequences && { stop: options.stopSequences }),\n messages: sdkMessages as any,\n tools: sdkTools,\n ...(toolChoice !== undefined && { tool_choice: toolChoice as any }),\n ...(options.allowParallelToolCalls === false && { parallel_tool_calls: false })\n })\n\n const choice = response.choices?.[0]\n const message = choice?.message\n const text = message?.content || undefined\n\n const toolCalls: AIToolCall[] = (message?.tool_calls || []).map((tc: any) => {\n const fn = tc.function\n let args: Record<string, any> = {}\n try {\n args = fn?.arguments ? JSON.parse(fn.arguments) : {}\n } catch {\n args = {}\n }\n return {\n id: typeof tc.id === 'string' && tc.id ? tc.id : `call_${Math.random().toString(36).slice(2, 12)}`,\n name: fn?.name ?? '',\n arguments: args\n }\n })\n\n return {\n text,\n toolCalls,\n stopReason: normalizeOpenAIStopReason(choice?.finish_reason)\n }\n }\n}\n\n// ── 변환 유틸 ─────────────────────────────────────────────────────────\n\nfunction buildSDKMessages(messages: AIMessage[], externalSystem?: string): any[] {\n const out: any[] = []\n\n const systemFromMessages = messages\n .filter(m => m.role === 'system')\n .map(extractTextContent)\n .filter(Boolean)\n .join('\\n\\n')\n const combinedSystem = [externalSystem, systemFromMessages].filter(Boolean).join('\\n\\n')\n if (combinedSystem) {\n out.push({ role: 'system', content: combinedSystem })\n }\n\n for (const msg of messages) {\n if (msg.role === 'system') continue\n const sdkMsgs = toSDKMessages(msg)\n out.push(...sdkMsgs)\n }\n\n return out\n}\n\n/**\n * 한 AIMessage 가 다중 tool_result 를 가지면 OpenAI 측에서 여러 role:'tool' 메시지로\n * 분리해야 함 (OpenAI 는 메시지당 tool_call_id 하나만 매핑). 따라서 array 를 반환.\n */\nfunction toSDKMessages(msg: AIMessage): any[] {\n if (typeof msg.content === 'string') {\n return [{ role: msg.role, content: msg.content }]\n }\n\n const parts = msg.content\n const toolUseParts = parts.filter(p => p.type === 'tool_use') as any[]\n const toolResultParts = parts.filter(p => p.type === 'tool_result') as any[]\n const otherParts = parts.filter(p => p.type !== 'tool_use' && p.type !== 'tool_result')\n\n // tool_result 가 있으면 각각을 role='tool' 메시지로 분리 (OpenAI 요구사항).\n if (toolResultParts.length > 0) {\n return toolResultParts.map((r: any) => ({\n role: 'tool',\n tool_call_id: r.toolUseId,\n content: r.content\n }))\n }\n\n // assistant 측 tool_use 가 있으면 message.tool_calls 로\n const out: any = { role: msg.role }\n if (otherParts.length > 0) {\n out.content = otherParts.map(toSDKContentPart)\n } else {\n out.content = null\n }\n if (toolUseParts.length > 0) {\n out.tool_calls = toolUseParts.map(p => ({\n id: p.id,\n type: 'function',\n function: { name: p.name, arguments: JSON.stringify(p.arguments) }\n }))\n }\n return [out]\n}\n\nfunction toSDKContentPart(part: AIContentPart): any {\n if (part.type === 'text') {\n return { type: 'text', text: part.text }\n }\n if (part.type === 'tool_use' || part.type === 'tool_result') {\n // 처리는 toSDKMessage 가 함 — 도달하면 버그.\n return { type: 'text', text: '' }\n }\n // image\n if (part.source.kind === 'url') {\n return { type: 'image_url', image_url: { url: part.source.url } }\n }\n const b64 = Buffer.isBuffer(part.source.data)\n ? part.source.data.toString('base64')\n : Buffer.from(part.source.data).toString('base64')\n return {\n type: 'image_url',\n image_url: { url: `data:${part.source.mediaType};base64,${b64}` }\n }\n}\n\nfunction extractTextContent(msg: AIMessage): string {\n if (typeof msg.content === 'string') return msg.content\n return msg.content\n .filter(p => p.type === 'text')\n .map(p => (p as { type: 'text'; text: string }).text)\n .join('\\n')\n}\n\nfunction buildOpenAIToolChoice(options: AIToolChatOptions): any {\n const choice = options.toolChoice ?? 'auto'\n if (choice === 'none') return 'none'\n if (choice === 'required') {\n if (options.forceTool) {\n return { type: 'function', function: { name: options.forceTool } }\n }\n return 'required'\n }\n return 'auto'\n}\n\nfunction normalizeOpenAIStopReason(raw: any): AIToolChatResult['stopReason'] {\n switch (raw) {\n case 'tool_calls':\n return 'tool_use'\n case 'function_call':\n return 'tool_use'\n case 'stop':\n return 'end_turn'\n case 'length':\n return 'max_tokens'\n case 'content_filter':\n return 'stop_sequence'\n default:\n return raw ?? 'end_turn'\n }\n}\n\n// Auto-register at module load\nregisterAIProvider('openai', config => new OpenAIAIClient(config))\n"]}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Provider-agnostic AI client types.
3
+ *
4
+ * 공통 인터페이스만 정의 — 실제 호출은 provider 별 어댑터에서.
5
+ */
6
+ export type AIRole = 'system' | 'user' | 'assistant';
7
+ export interface AITextPart {
8
+ type: 'text';
9
+ text: string;
10
+ }
11
+ export type AIImageMediaType = 'image/png' | 'image/jpeg' | 'image/gif' | 'image/webp';
12
+ export interface AIImagePart {
13
+ type: 'image';
14
+ source: {
15
+ kind: 'base64';
16
+ data: Buffer | Uint8Array;
17
+ mediaType: AIImageMediaType;
18
+ } | {
19
+ kind: 'url';
20
+ url: string;
21
+ };
22
+ }
23
+ /**
24
+ * Assistant 가 tool 을 호출하라고 한 시점의 content part.
25
+ * 다음 턴에서 같은 id 로 tool_result 를 매핑한다.
26
+ */
27
+ export interface AIToolUsePart {
28
+ type: 'tool_use';
29
+ /** provider-stable id — Anthropic tool_use.id / OpenAI tool_call.id / Gemini 의 자체 매핑 */
30
+ id: string;
31
+ /** tool 이름 */
32
+ name: string;
33
+ /** 호출 인자 (JSON object) */
34
+ arguments: Record<string, any>;
35
+ /**
36
+ * provider-specific opaque metadata that must be echoed back when this tool_use
37
+ * is referenced in subsequent turns.
38
+ *
39
+ * Gemini: `thoughtSignature` — 안 보내면 400 에러.
40
+ * Anthropic: 없음.
41
+ * OpenAI: 없음.
42
+ *
43
+ * 호출자(assistant loop)는 AIToolCall.providerMeta 를 그대로 복사해 넣는다.
44
+ */
45
+ providerMeta?: Record<string, any>;
46
+ }
47
+ /**
48
+ * 도구 실행 결과를 LLM 에 회신하는 user 측 content part.
49
+ *
50
+ * Anthropic: { type: 'tool_result', tool_use_id, content } — user role 에 들어감.
51
+ * OpenAI: tool role 메시지로 전송.
52
+ * Gemini: functionResponse part — user role 에 들어감.
53
+ */
54
+ export interface AIToolResultPart {
55
+ type: 'tool_result';
56
+ /** 매핑되는 AIToolUsePart.id */
57
+ toolUseId: string;
58
+ /** 도구 실행 결과 (text 또는 JSON-serializable) */
59
+ content: string;
60
+ /** 실행 중 에러 발생 표시 (LLM 이 retry/대안 판단) */
61
+ isError?: boolean;
62
+ }
63
+ export type AIContentPart = AITextPart | AIImagePart | AIToolUsePart | AIToolResultPart;
64
+ export interface AIMessage {
65
+ role: AIRole;
66
+ content: string | AIContentPart[];
67
+ }
68
+ export interface AIChatOptions {
69
+ /** 모델 override (없으면 client 기본값) */
70
+ model?: string;
71
+ maxTokens?: number;
72
+ temperature?: number;
73
+ /**
74
+ * system prompt — messages 의 system 메시지와 합쳐서 전달.
75
+ * Anthropic 의 system 파라미터 / OpenAI 의 system 메시지로 매핑.
76
+ */
77
+ systemPrompt?: string;
78
+ stopSequences?: string[];
79
+ }
80
+ export interface AIJSONOptions extends AIChatOptions {
81
+ /** JSON Schema (옵션). 어댑터가 지원하면 structured output 강제 */
82
+ schema?: object;
83
+ }
84
+ export interface AIVisionOptions extends AIChatOptions {
85
+ }
86
+ /**
87
+ * Provider-agnostic 도구 정의.
88
+ * Anthropic input_schema / OpenAI parameters / Gemini parameters 로 어댑터에서 정규화.
89
+ */
90
+ export interface AITool {
91
+ name: string;
92
+ description: string;
93
+ /** JSON Schema (object 권장). enum / required / properties 등 표준 키 사용. */
94
+ parameters: Record<string, any>;
95
+ }
96
+ /**
97
+ * LLM 이 호출하라고 지시한 도구 1 건.
98
+ * id 는 multi-turn 흐름에서 tool_result 매핑에 사용 — 어댑터가 항상 채워야 한다.
99
+ */
100
+ export interface AIToolCall {
101
+ id: string;
102
+ name: string;
103
+ arguments: Record<string, any>;
104
+ /**
105
+ * provider-specific opaque metadata to round-trip on subsequent turns.
106
+ * Gemini 는 `thoughtSignature` 를 여기에 담는다 — 다음 턴에 functionCall.thoughtSignature
107
+ * 로 복원되어야 400 에러 회피.
108
+ */
109
+ providerMeta?: Record<string, any>;
110
+ }
111
+ export interface AIToolChatOptions extends AIChatOptions {
112
+ /**
113
+ * tool 선택 모드:
114
+ * - 'auto': LLM 자율 (tool 호출 또는 텍스트 응답)
115
+ * - 'required': 반드시 하나 이상 tool 호출
116
+ * - 'none': tool 무시, 텍스트만
117
+ */
118
+ toolChoice?: 'auto' | 'required' | 'none';
119
+ /** 'required' 와 함께 특정 tool 강제. provider 별 지원 다름. */
120
+ forceTool?: string;
121
+ /**
122
+ * 병렬 tool 호출 허용 여부 (default true).
123
+ * false 시 LLM 이 한 번에 하나의 tool 만 호출.
124
+ */
125
+ allowParallelToolCalls?: boolean;
126
+ }
127
+ export interface AIToolChatResult {
128
+ /** 사용자에게 보여줄 텍스트 (tool 호출과 함께 동봉될 수도 있음) */
129
+ text?: string;
130
+ /** LLM 이 호출하라고 지시한 도구들 (병렬 가능) */
131
+ toolCalls: AIToolCall[];
132
+ /**
133
+ * 정규화된 stop reason:
134
+ * 'tool_use' — tool 호출 발생
135
+ * 'end_turn' — 텍스트 응답 종료
136
+ * 'max_tokens' — 토큰 한도
137
+ * 'stop_sequence' — stop sequence 도달
138
+ * 기타 — provider 원본 그대로
139
+ */
140
+ stopReason: 'tool_use' | 'end_turn' | 'max_tokens' | 'stop_sequence' | string;
141
+ }
142
+ export interface AIClient {
143
+ /** 'anthropic:claude-sonnet-4-6' 등 사람이 읽을 식별자 */
144
+ readonly id: string;
145
+ /** 텍스트 chat completion */
146
+ chat(messages: AIMessage[], options?: AIChatOptions): Promise<string>;
147
+ /** JSON 출력 강제. 파싱된 객체 반환. */
148
+ generateJSON<T = unknown>(prompt: string | AIMessage[], options?: AIJSONOptions): Promise<T>;
149
+ /** 이미지 입력 — 텍스트 응답. 어댑터가 vision 모델을 지원해야 함. */
150
+ vision?(image: Buffer | Uint8Array | {
151
+ url: string;
152
+ }, prompt: string, options?: AIVisionOptions): Promise<string>;
153
+ /**
154
+ * Tool calling — LLM 이 자유 텍스트 대신 정의된 도구를 schema-검증된 인자로 호출.
155
+ * 각 도구의 parameters 가 enum/required 강제 → invalid type / 누락 필드 봉쇄.
156
+ * 어댑터별로 Anthropic tool_use / OpenAI tools / Gemini functionCalls 로 매핑.
157
+ */
158
+ chatWithTools?(messages: AIMessage[], tools: AITool[], options?: AIToolChatOptions): Promise<AIToolChatResult>;
159
+ }
160
+ export interface AIClientConfig {
161
+ /** 등록된 provider 이름 (예: 'anthropic', 'openai', 'gemini') */
162
+ provider: string;
163
+ /** 기본 모델 ID */
164
+ model?: string;
165
+ apiKey?: string;
166
+ /** OpenAI organization (provider:'openai' 전용) */
167
+ organization?: string;
168
+ baseURL?: string;
169
+ [k: string]: any;
170
+ }
171
+ export type AIProviderFactory = (config: AIClientConfig) => AIClient;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ /**
3
+ * Provider-agnostic AI client types.
4
+ *
5
+ * 공통 인터페이스만 정의 — 실제 호출은 provider 별 어댑터에서.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../server/service/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG","sourcesContent":["/**\n * Provider-agnostic AI client types.\n *\n * 공통 인터페이스만 정의 — 실제 호출은 provider 별 어댑터에서.\n */\n\nexport type AIRole = 'system' | 'user' | 'assistant'\n\nexport interface AITextPart {\n type: 'text'\n text: string\n}\n\nexport type AIImageMediaType = 'image/png' | 'image/jpeg' | 'image/gif' | 'image/webp'\n\nexport interface AIImagePart {\n type: 'image'\n source:\n | { kind: 'base64'; data: Buffer | Uint8Array; mediaType: AIImageMediaType }\n | { kind: 'url'; url: string }\n}\n\n/**\n * Assistant 가 tool 을 호출하라고 한 시점의 content part.\n * 다음 턴에서 같은 id 로 tool_result 를 매핑한다.\n */\nexport interface AIToolUsePart {\n type: 'tool_use'\n /** provider-stable id — Anthropic tool_use.id / OpenAI tool_call.id / Gemini 의 자체 매핑 */\n id: string\n /** tool 이름 */\n name: string\n /** 호출 인자 (JSON object) */\n arguments: Record<string, any>\n /**\n * provider-specific opaque metadata that must be echoed back when this tool_use\n * is referenced in subsequent turns.\n *\n * Gemini: `thoughtSignature` — 안 보내면 400 에러.\n * Anthropic: 없음.\n * OpenAI: 없음.\n *\n * 호출자(assistant loop)는 AIToolCall.providerMeta 를 그대로 복사해 넣는다.\n */\n providerMeta?: Record<string, any>\n}\n\n/**\n * 도구 실행 결과를 LLM 에 회신하는 user 측 content part.\n *\n * Anthropic: { type: 'tool_result', tool_use_id, content } — user role 에 들어감.\n * OpenAI: tool role 메시지로 전송.\n * Gemini: functionResponse part — user role 에 들어감.\n */\nexport interface AIToolResultPart {\n type: 'tool_result'\n /** 매핑되는 AIToolUsePart.id */\n toolUseId: string\n /** 도구 실행 결과 (text 또는 JSON-serializable) */\n content: string\n /** 실행 중 에러 발생 표시 (LLM 이 retry/대안 판단) */\n isError?: boolean\n}\n\nexport type AIContentPart = AITextPart | AIImagePart | AIToolUsePart | AIToolResultPart\n\nexport interface AIMessage {\n role: AIRole\n content: string | AIContentPart[]\n}\n\nexport interface AIChatOptions {\n /** 모델 override (없으면 client 기본값) */\n model?: string\n maxTokens?: number\n temperature?: number\n /**\n * system prompt — messages 의 system 메시지와 합쳐서 전달.\n * Anthropic 의 system 파라미터 / OpenAI 의 system 메시지로 매핑.\n */\n systemPrompt?: string\n stopSequences?: string[]\n}\n\nexport interface AIJSONOptions extends AIChatOptions {\n /** JSON Schema (옵션). 어댑터가 지원하면 structured output 강제 */\n schema?: object\n}\n\nexport interface AIVisionOptions extends AIChatOptions {}\n\n// ── Tool calling ──────────────────────────────────────────────────\n\n/**\n * Provider-agnostic 도구 정의.\n * Anthropic input_schema / OpenAI parameters / Gemini parameters 로 어댑터에서 정규화.\n */\nexport interface AITool {\n name: string\n description: string\n /** JSON Schema (object 권장). enum / required / properties 등 표준 키 사용. */\n parameters: Record<string, any>\n}\n\n/**\n * LLM 이 호출하라고 지시한 도구 1 건.\n * id 는 multi-turn 흐름에서 tool_result 매핑에 사용 — 어댑터가 항상 채워야 한다.\n */\nexport interface AIToolCall {\n id: string\n name: string\n arguments: Record<string, any>\n /**\n * provider-specific opaque metadata to round-trip on subsequent turns.\n * Gemini 는 `thoughtSignature` 를 여기에 담는다 — 다음 턴에 functionCall.thoughtSignature\n * 로 복원되어야 400 에러 회피.\n */\n providerMeta?: Record<string, any>\n}\n\nexport interface AIToolChatOptions extends AIChatOptions {\n /**\n * tool 선택 모드:\n * - 'auto': LLM 자율 (tool 호출 또는 텍스트 응답)\n * - 'required': 반드시 하나 이상 tool 호출\n * - 'none': tool 무시, 텍스트만\n */\n toolChoice?: 'auto' | 'required' | 'none'\n /** 'required' 와 함께 특정 tool 강제. provider 별 지원 다름. */\n forceTool?: string\n /**\n * 병렬 tool 호출 허용 여부 (default true).\n * false 시 LLM 이 한 번에 하나의 tool 만 호출.\n */\n allowParallelToolCalls?: boolean\n}\n\nexport interface AIToolChatResult {\n /** 사용자에게 보여줄 텍스트 (tool 호출과 함께 동봉될 수도 있음) */\n text?: string\n /** LLM 이 호출하라고 지시한 도구들 (병렬 가능) */\n toolCalls: AIToolCall[]\n /**\n * 정규화된 stop reason:\n * 'tool_use' — tool 호출 발생\n * 'end_turn' — 텍스트 응답 종료\n * 'max_tokens' — 토큰 한도\n * 'stop_sequence' — stop sequence 도달\n * 기타 — provider 원본 그대로\n */\n stopReason: 'tool_use' | 'end_turn' | 'max_tokens' | 'stop_sequence' | string\n}\n\n// ── Client ────────────────────────────────────────────────────────\n\nexport interface AIClient {\n /** 'anthropic:claude-sonnet-4-6' 등 사람이 읽을 식별자 */\n readonly id: string\n\n /** 텍스트 chat completion */\n chat(messages: AIMessage[], options?: AIChatOptions): Promise<string>\n\n /** JSON 출력 강제. 파싱된 객체 반환. */\n generateJSON<T = unknown>(prompt: string | AIMessage[], options?: AIJSONOptions): Promise<T>\n\n /** 이미지 입력 — 텍스트 응답. 어댑터가 vision 모델을 지원해야 함. */\n vision?(\n image: Buffer | Uint8Array | { url: string },\n prompt: string,\n options?: AIVisionOptions\n ): Promise<string>\n\n /**\n * Tool calling — LLM 이 자유 텍스트 대신 정의된 도구를 schema-검증된 인자로 호출.\n * 각 도구의 parameters 가 enum/required 강제 → invalid type / 누락 필드 봉쇄.\n * 어댑터별로 Anthropic tool_use / OpenAI tools / Gemini functionCalls 로 매핑.\n */\n chatWithTools?(\n messages: AIMessage[],\n tools: AITool[],\n options?: AIToolChatOptions\n ): Promise<AIToolChatResult>\n}\n\nexport interface AIClientConfig {\n /** 등록된 provider 이름 (예: 'anthropic', 'openai', 'gemini') */\n provider: string\n /** 기본 모델 ID */\n model?: string\n apiKey?: string\n /** OpenAI organization (provider:'openai' 전용) */\n organization?: string\n baseURL?: string\n [k: string]: any\n}\n\nexport type AIProviderFactory = (config: AIClientConfig) => AIClient\n"]}
@@ -0,0 +1 @@
1
+ export * from './parse-json.js';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./parse-json.js"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/utils/index.ts"],"names":[],"mappings":";;;AAAA,0DAA+B","sourcesContent":["export * from './parse-json.js'\n"]}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Robust JSON parsing for LLM responses.
3
+ *
4
+ * LLM 응답은 다음 같은 변형이 흔하다:
5
+ * - 마크다운 코드펜스로 감싸짐 (```json ... ```)
6
+ * - 앞뒤 자연어 코멘트 ("Sure, here is: { ... }")
7
+ * - 끝에 trailing 문자 (Gemini 의 알려진 케이스: 닫는 } 가 한 번 더)
8
+ * - smart quote 등의 사소한 변형
9
+ *
10
+ * 이 helper 는:
11
+ * 1) 코드펜스를 제거
12
+ * 2) 첫 balanced JSON object/array 만 잘라냄 (brace counting + 문자열 인지)
13
+ * 3) 그래도 실패하면 raw 출력 포함한 명확한 에러
14
+ */
15
+ export declare function parseJSONResponse<T = unknown>(text: string): T;
16
+ /**
17
+ * 첫 balanced { ... } 또는 [ ... ] 추출.
18
+ * 문자열 내의 brace 는 무시. escape 처리.
19
+ */
20
+ export declare function extractFirstBalanced(text: string): string | null;
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ /**
3
+ * Robust JSON parsing for LLM responses.
4
+ *
5
+ * LLM 응답은 다음 같은 변형이 흔하다:
6
+ * - 마크다운 코드펜스로 감싸짐 (```json ... ```)
7
+ * - 앞뒤 자연어 코멘트 ("Sure, here is: { ... }")
8
+ * - 끝에 trailing 문자 (Gemini 의 알려진 케이스: 닫는 } 가 한 번 더)
9
+ * - smart quote 등의 사소한 변형
10
+ *
11
+ * 이 helper 는:
12
+ * 1) 코드펜스를 제거
13
+ * 2) 첫 balanced JSON object/array 만 잘라냄 (brace counting + 문자열 인지)
14
+ * 3) 그래도 실패하면 raw 출력 포함한 명확한 에러
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.parseJSONResponse = parseJSONResponse;
18
+ exports.extractFirstBalanced = extractFirstBalanced;
19
+ function parseJSONResponse(text) {
20
+ if (typeof text !== 'string') {
21
+ throw new Error(`AI response is not a string (got ${typeof text})`);
22
+ }
23
+ const stripped = stripCodeFences(text).trim();
24
+ // 1) 직접 시도
25
+ try {
26
+ return JSON.parse(stripped);
27
+ }
28
+ catch {
29
+ /* fallthrough */
30
+ }
31
+ // 2) 첫 balanced JSON 추출 시도
32
+ const extracted = extractFirstBalanced(stripped);
33
+ if (extracted) {
34
+ try {
35
+ return JSON.parse(extracted);
36
+ }
37
+ catch (e) {
38
+ throw new Error(`AI response is not valid JSON (after extraction): ${e.message}\n----- raw -----\n${text}`);
39
+ }
40
+ }
41
+ throw new Error(`AI response is not valid JSON: no balanced JSON found.\n----- raw -----\n${text}`);
42
+ }
43
+ function stripCodeFences(text) {
44
+ return text
45
+ .replace(/^\s*```(?:json|JSON)?\s*\n?/i, '')
46
+ .replace(/\n?\s*```\s*$/i, '');
47
+ }
48
+ /**
49
+ * 첫 balanced { ... } 또는 [ ... ] 추출.
50
+ * 문자열 내의 brace 는 무시. escape 처리.
51
+ */
52
+ function extractFirstBalanced(text) {
53
+ const startIdx = findFirstBraceOrBracket(text);
54
+ if (startIdx < 0)
55
+ return null;
56
+ const opener = text[startIdx];
57
+ const closer = opener === '{' ? '}' : ']';
58
+ let depth = 0;
59
+ let inString = false;
60
+ let escape = false;
61
+ for (let i = startIdx; i < text.length; i++) {
62
+ const ch = text[i];
63
+ if (escape) {
64
+ escape = false;
65
+ continue;
66
+ }
67
+ if (inString) {
68
+ if (ch === '\\') {
69
+ escape = true;
70
+ }
71
+ else if (ch === '"') {
72
+ inString = false;
73
+ }
74
+ continue;
75
+ }
76
+ if (ch === '"') {
77
+ inString = true;
78
+ continue;
79
+ }
80
+ if (ch === opener)
81
+ depth++;
82
+ else if (ch === closer) {
83
+ depth--;
84
+ if (depth === 0) {
85
+ return text.substring(startIdx, i + 1);
86
+ }
87
+ }
88
+ }
89
+ return null;
90
+ }
91
+ function findFirstBraceOrBracket(text) {
92
+ for (let i = 0; i < text.length; i++) {
93
+ const ch = text[i];
94
+ if (ch === '{' || ch === '[')
95
+ return i;
96
+ }
97
+ return -1;
98
+ }
99
+ //# sourceMappingURL=parse-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-json.js","sourceRoot":"","sources":["../../../server/service/utils/parse-json.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Robust JSON parsing for LLM responses.\n *\n * LLM 응답은 다음 같은 변형이 흔하다:\n * - 마크다운 코드펜스로 감싸짐 (```json ... ```)\n * - 앞뒤 자연어 코멘트 (\"Sure, here is: { ... }\")\n * - 끝에 trailing 문자 (Gemini 의 알려진 케이스: 닫는 } 가 한 번 더)\n * - smart quote 등의 사소한 변형\n *\n * 이 helper 는:\n * 1) 코드펜스를 제거\n * 2) 첫 balanced JSON object/array 만 잘라냄 (brace counting + 문자열 인지)\n * 3) 그래도 실패하면 raw 출력 포함한 명확한 에러\n */\n\nexport function parseJSONResponse<T = unknown>(text: string): T {\n if (typeof text !== 'string') {\n throw new Error(`AI response is not a string (got ${typeof text})`)\n }\n\n const stripped = stripCodeFences(text).trim()\n\n // 1) 직접 시도\n try {\n return JSON.parse(stripped) as T\n } catch {\n /* fallthrough */\n }\n\n // 2) 첫 balanced JSON 추출 시도\n const extracted = extractFirstBalanced(stripped)\n if (extracted) {\n try {\n return JSON.parse(extracted) as T\n } catch (e) {\n throw new Error(\n `AI response is not valid JSON (after extraction): ${(e as Error).message}\\n----- raw -----\\n${text}`\n )\n }\n }\n\n throw new Error(`AI response is not valid JSON: no balanced JSON found.\\n----- raw -----\\n${text}`)\n}\n\nfunction stripCodeFences(text: string): string {\n return text\n .replace(/^\\s*```(?:json|JSON)?\\s*\\n?/i, '')\n .replace(/\\n?\\s*```\\s*$/i, '')\n}\n\n/**\n * 첫 balanced { ... } 또는 [ ... ] 추출.\n * 문자열 내의 brace 는 무시. escape 처리.\n */\nexport function extractFirstBalanced(text: string): string | null {\n const startIdx = findFirstBraceOrBracket(text)\n if (startIdx < 0) return null\n\n const opener = text[startIdx]\n const closer = opener === '{' ? '}' : ']'\n let depth = 0\n let inString = false\n let escape = false\n\n for (let i = startIdx; i < text.length; i++) {\n const ch = text[i]\n if (escape) {\n escape = false\n continue\n }\n if (inString) {\n if (ch === '\\\\') {\n escape = true\n } else if (ch === '\"') {\n inString = false\n }\n continue\n }\n if (ch === '\"') {\n inString = true\n continue\n }\n if (ch === opener) depth++\n else if (ch === closer) {\n depth--\n if (depth === 0) {\n return text.substring(startIdx, i + 1)\n }\n }\n }\n return null\n}\n\nfunction findFirstBraceOrBracket(text: string): number {\n for (let i = 0; i < text.length; i++) {\n const ch = text[i]\n if (ch === '{' || ch === '[') return i\n }\n return -1\n}\n"]}
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/tslib/tslib.d.ts","../server/service/types.ts","../../env/dist/dependency-graph.d.ts","../../env/dist/dependency-order.d.ts","../../env/dist/scene-modules.d.ts","../../env/dist/operato-modules.d.ts","../../env/dist/config.d.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/blob.d.ts","../../../node_modules/@types/node/web-globals/console.d.ts","../../../node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/encoding.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/undici-types/utility.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client-stats.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/round-robin-pool.d.ts","../../../node_modules/undici-types/h2c-client.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/web-globals/importmeta.d.ts","../../../node_modules/@types/node/web-globals/messaging.d.ts","../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/@types/node/web-globals/performance.d.ts","../../../node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/@types/node/web-globals/timers.d.ts","../../../node_modules/@types/node/web-globals/url.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/inspector/promises.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/path/posix.d.ts","../../../node_modules/@types/node/path/win32.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/quic.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/test/reporters.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/util/types.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@types/triple-beam/index.d.ts","../../../node_modules/logform/index.d.ts","../../../node_modules/winston-transport/index.d.ts","../../../node_modules/winston/lib/winston/config/index.d.ts","../../../node_modules/winston/lib/winston/transports/index.d.ts","../../../node_modules/winston/index.d.ts","../../../node_modules/winston-daily-rotate-file/index.d.ts","../../env/dist/logger.d.ts","../../env/dist/module-loader.d.ts","../../env/dist/app-root-path.d.ts","../../env/dist/app-package.d.ts","../../env/dist/index.d.ts","../server/service/factory.ts","../../../node_modules/@anthropic-ai/sdk/_shims/manual-types.d.ts","../../../node_modules/@anthropic-ai/sdk/_shims/auto/types.d.ts","../../../node_modules/@anthropic-ai/sdk/streaming.d.ts","../../../node_modules/@anthropic-ai/sdk/error.d.ts","../../../node_modules/@anthropic-ai/sdk/_shims/multipartbody.d.ts","../../../node_modules/@anthropic-ai/sdk/uploads.d.ts","../../../node_modules/@anthropic-ai/sdk/core.d.ts","../../../node_modules/@anthropic-ai/sdk/_shims/index.d.ts","../../../node_modules/@anthropic-ai/sdk/pagination.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/shared.d.ts","../../../node_modules/@anthropic-ai/sdk/resource.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/beta/models.d.ts","../../../node_modules/@anthropic-ai/sdk/internal/decoders/line.d.ts","../../../node_modules/@anthropic-ai/sdk/internal/decoders/jsonl.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/messages/batches.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/messages/index.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/messages.d.ts","../../../node_modules/@anthropic-ai/sdk/lib/messagestream.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/messages/messages.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/beta/messages/batches.d.ts","../../../node_modules/@anthropic-ai/sdk/lib/betamessagestream.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/beta/beta.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/completions.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/models.d.ts","../../../node_modules/@anthropic-ai/sdk/resources/index.d.ts","../../../node_modules/@anthropic-ai/sdk/index.d.ts","../server/service/utils/parse-json.ts","../server/service/providers/anthropic.ts","../../../node_modules/@google/generative-ai/dist/generative-ai.d.ts","../server/service/providers/gemini.ts","../../../node_modules/openai/_shims/manual-types.d.ts","../../../node_modules/openai/_shims/auto/types.d.ts","../../../node_modules/openai/streaming.d.ts","../../../node_modules/openai/error.d.ts","../../../node_modules/openai/_shims/multipartbody.d.ts","../../../node_modules/openai/uploads.d.ts","../../../node_modules/openai/core.d.ts","../../../node_modules/openai/_shims/index.d.ts","../../../node_modules/openai/pagination.d.ts","../../../node_modules/openai/resource.d.ts","../../../node_modules/openai/resources/shared.d.ts","../../../node_modules/openai/resources/completions.d.ts","../../../node_modules/openai/resources/chat/completions/messages.d.ts","../../../node_modules/openai/resources/chat/completions/completions.d.ts","../../../node_modules/openai/resources/chat/chat.d.ts","../../../node_modules/openai/resources/chat/completions/index.d.ts","../../../node_modules/openai/resources/chat/index.d.ts","../../../node_modules/openai/resources/audio/speech.d.ts","../../../node_modules/openai/resources/audio/transcriptions.d.ts","../../../node_modules/openai/resources/audio/translations.d.ts","../../../node_modules/openai/resources/audio/audio.d.ts","../../../node_modules/openai/resources/batches.d.ts","../../../node_modules/openai/resources/beta/threads/messages.d.ts","../../../node_modules/openai/resources/beta/threads/runs/steps.d.ts","../../../node_modules/openai/resources/beta/threads/runs/runs.d.ts","../../../node_modules/openai/lib/eventstream.d.ts","../../../node_modules/openai/lib/assistantstream.d.ts","../../../node_modules/openai/resources/beta/threads/threads.d.ts","../../../node_modules/openai/resources/beta/assistants.d.ts","../../../node_modules/openai/resources/chat/completions.d.ts","../../../node_modules/openai/lib/abstractchatcompletionrunner.d.ts","../../../node_modules/openai/lib/chatcompletionstream.d.ts","../../../node_modules/openai/lib/responsesparser.d.ts","../../../node_modules/openai/resources/responses/input-items.d.ts","../../../node_modules/openai/lib/responses/eventtypes.d.ts","../../../node_modules/openai/lib/responses/responsestream.d.ts","../../../node_modules/openai/resources/responses/responses.d.ts","../../../node_modules/openai/lib/parser.d.ts","../../../node_modules/openai/lib/chatcompletionstreamingrunner.d.ts","../../../node_modules/openai/lib/jsonschema.d.ts","../../../node_modules/openai/lib/runnablefunction.d.ts","../../../node_modules/openai/lib/chatcompletionrunner.d.ts","../../../node_modules/openai/resources/beta/chat/completions.d.ts","../../../node_modules/openai/resources/beta/chat/chat.d.ts","../../../node_modules/openai/resources/beta/realtime/sessions.d.ts","../../../node_modules/openai/resources/beta/realtime/transcription-sessions.d.ts","../../../node_modules/openai/resources/beta/realtime/realtime.d.ts","../../../node_modules/openai/resources/beta/beta.d.ts","../../../node_modules/openai/resources/containers/files/content.d.ts","../../../node_modules/openai/resources/containers/files/files.d.ts","../../../node_modules/openai/resources/containers/containers.d.ts","../../../node_modules/openai/resources/embeddings.d.ts","../../../node_modules/openai/resources/graders/grader-models.d.ts","../../../node_modules/openai/resources/evals/runs/output-items.d.ts","../../../node_modules/openai/resources/evals/runs/runs.d.ts","../../../node_modules/openai/resources/evals/evals.d.ts","../../../node_modules/openai/resources/files.d.ts","../../../node_modules/openai/resources/fine-tuning/methods.d.ts","../../../node_modules/openai/resources/fine-tuning/alpha/graders.d.ts","../../../node_modules/openai/resources/fine-tuning/alpha/alpha.d.ts","../../../node_modules/openai/resources/fine-tuning/checkpoints/permissions.d.ts","../../../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.d.ts","../../../node_modules/openai/resources/fine-tuning/jobs/checkpoints.d.ts","../../../node_modules/openai/resources/fine-tuning/jobs/jobs.d.ts","../../../node_modules/openai/resources/fine-tuning/fine-tuning.d.ts","../../../node_modules/openai/resources/graders/graders.d.ts","../../../node_modules/openai/resources/images.d.ts","../../../node_modules/openai/resources/models.d.ts","../../../node_modules/openai/resources/moderations.d.ts","../../../node_modules/openai/resources/uploads/parts.d.ts","../../../node_modules/openai/resources/uploads/uploads.d.ts","../../../node_modules/openai/resources/vector-stores/files.d.ts","../../../node_modules/openai/resources/vector-stores/file-batches.d.ts","../../../node_modules/openai/resources/vector-stores/vector-stores.d.ts","../../../node_modules/openai/resources/index.d.ts","../../../node_modules/openai/index.d.ts","../server/service/providers/openai.ts","../server/service/providers/index.ts","../server/service/utils/index.ts","../server/service/index.ts","../server/index.ts","../../../node_modules/@jest/expect-utils/build/index.d.ts","../../../node_modules/chalk/index.d.ts","../../../node_modules/@sinclair/typebox/typebox.d.ts","../../../node_modules/@jest/schemas/build/index.d.ts","../../../node_modules/pretty-format/build/index.d.ts","../../../node_modules/jest-diff/build/index.d.ts","../../../node_modules/jest-matcher-utils/build/index.d.ts","../../../node_modules/expect/build/index.d.ts","../../../node_modules/@types/jest/index.d.ts"],"fileIdsList":[[71,134,142,146,149,151,152,153,166],[71,134,142,146,149,151,152,153,166,205,206,211],[71,134,142,146,149,151,152,153,166,207,208,210,212],[71,134,142,146,149,151,152,153,166,211],[71,134,142,146,149,151,152,153,166,208,210,211,212,213,223,227,228,229,230],[71,134,142,146,149,151,152,153,166,212,217],[71,134,142,146,149,151,152,153,166,208,211,212,226],[71,134,142,146,149,151,152,153,166,208,211,212,221],[71,134,142,146,149,151,152,153,166,215,216,226],[71,134,142,146,149,151,152,153,166,211,213,215,218,226,227],[71,134,142,146,149,151,152,153,166,207,211,215,223,224,225,226,227],[71,134,142,146,149,151,152,153,166,211,213,215],[71,134,142,146,149,151,152,153,166,207,211,215,223,228],[71,134,142,146,149,151,152,153,166,214,223,227,228,229],[71,134,142,146,149,151,152,153,166,220],[71,134,142,146,149,151,152,153,166,211,213,214,215,218,223],[71,134,142,146,149,151,152,153,166,219,223],[71,134,142,146,149,151,152,153,166,207,211,215,219,222,223],[71,134,142,146,149,151,152,153,166,212],[71,134,142,146,149,151,152,153,166,209,211,212],[71,134,142,146,149,151,152,153,166,319],[71,134,142,146,149,151,152,153,166,321,324],[71,131,132,134,142,146,149,151,152,153,166],[71,133,134,142,146,149,151,152,153,166],[134,142,146,149,151,152,153,166],[71,134,142,146,149,151,152,153,166,174],[71,134,135,140,142,145,146,149,151,152,153,155,166,171,183],[71,134,135,136,142,145,146,149,151,152,153,166],[71,134,137,142,146,149,151,152,153,166,184],[71,134,138,139,142,146,149,151,152,153,157,166],[71,134,139,142,146,149,151,152,153,166,171,180],[71,134,140,142,145,146,149,151,152,153,155,166],[71,133,134,141,142,146,149,151,152,153,166],[71,134,142,143,146,149,151,152,153,166],[71,134,142,144,145,146,149,151,152,153,166],[71,133,134,142,145,146,149,151,152,153,166],[71,134,142,145,146,147,149,151,152,153,166,171,183],[71,134,142,145,146,147,149,151,152,153,166,171,174],[71,121,134,142,145,146,148,149,151,152,153,155,166,171,183],[71,134,142,145,146,148,149,151,152,153,155,166,171,180,183],[71,134,142,146,148,149,150,151,152,153,166,171,180,183],[69,70,71,72,73,74,75,76,77,78,79,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190],[71,134,142,145,146,149,151,152,153,166],[71,134,142,146,149,151,153,166],[71,134,142,146,149,151,152,153,154,166,183],[71,134,142,145,146,149,151,152,153,155,166,171],[71,134,142,146,149,151,152,153,157,166],[71,134,142,146,149,151,152,153,158,166],[71,134,142,145,146,149,151,152,153,161,166],[71,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190],[71,134,142,146,149,151,152,153,163,166],[71,134,142,146,149,151,152,153,164,166],[71,134,139,142,146,149,151,152,153,155,166,174],[71,134,142,145,146,149,151,152,153,166,167],[71,134,142,146,149,151,152,153,166,168,184,187],[71,134,142,145,146,149,151,152,153,166,171,173,174],[71,134,142,146,149,151,152,153,166,172,174],[71,134,142,146,149,151,152,153,166,174,184],[71,134,142,146,149,151,152,153,166,175],[71,131,134,142,146,149,151,152,153,166,171,177,183],[71,134,142,146,149,151,152,153,166,171,176],[71,134,142,145,146,149,151,152,153,166,178,179],[71,134,142,146,149,151,152,153,166,178,179],[71,134,139,142,146,149,151,152,153,155,166,171,180],[71,134,142,146,149,151,152,153,166,181],[71,134,142,146,149,151,152,153,155,166,182],[71,134,142,146,148,149,151,152,153,164,166,183],[71,134,142,146,149,151,152,153,166,184,185],[71,134,139,142,146,149,151,152,153,166,185],[71,134,142,146,149,151,152,153,166,171,186],[71,134,142,146,149,151,152,153,154,166,187],[71,134,142,146,149,151,152,153,166,188],[71,134,137,142,146,149,151,152,153,166],[71,134,139,142,146,149,151,152,153,166],[71,134,142,146,149,151,152,153,166,184],[71,121,134,142,146,149,151,152,153,166],[71,134,142,146,149,151,152,153,166,183],[71,134,142,146,149,151,152,153,166,189],[71,134,142,146,149,151,152,153,161,166],[71,134,142,146,149,151,152,153,166,179],[71,121,134,142,145,146,147,149,151,152,153,161,166,171,174,183,186,187,189],[71,134,142,146,149,151,152,153,166,171,190],[71,134,142,146,149,151,152,153,166,317,323],[71,134,142,146,149,151,152,153,166,321],[71,134,142,146,149,151,152,153,166,318,322],[71,134,142,146,149,151,152,153,166,192],[71,134,142,146,149,151,152,153,166,236,237,242],[71,134,142,146,149,151,152,153,166,238,239,241,243],[71,134,142,146,149,151,152,153,166,242],[71,134,142,146,149,151,152,153,166,239,241,242,243,244,247,249,250,256,257,272,283,286,287,291,292,300,301,302,303,304,306,309,310],[71,134,142,146,149,151,152,153,166,242,247,261,265,274,276,277,278,311],[71,134,142,146,149,151,152,153,166,242,243,258,259,260,261,263,264],[71,134,142,146,149,151,152,153,166,265,266,273,276,311],[71,134,142,146,149,151,152,153,166,242,243,249,266,278,311],[71,134,142,146,149,151,152,153,166,243,265,266,267,273,276,311],[71,134,142,146,149,151,152,153,166,239],[71,134,142,146,149,151,152,153,166,246,265,272,278],[71,134,142,146,149,151,152,153,166,272],[71,134,142,146,149,151,152,153,166,242,261,268,270,272,311],[71,134,142,146,149,151,152,153,166,265,272,273],[71,134,142,146,149,151,152,153,166,274,275,277],[71,134,142,146,149,151,152,153,166,311],[71,134,142,146,149,151,152,153,166,245,253,254,255],[71,134,142,146,149,151,152,153,166,242,243,245],[71,134,142,146,149,151,152,153,166,238,242,245,254,256],[71,134,142,146,149,151,152,153,166,242,245,254,256],[71,134,142,146,149,151,152,153,166,242,244,245,246,257],[71,134,142,146,149,151,152,153,166,242,244,245,246,258,259,260,262,263],[71,134,142,146,149,151,152,153,166,245,263,264,279,282],[71,134,142,146,149,151,152,153,166,245,278],[71,134,142,146,149,151,152,153,166,242,245,265,266,267,273,274,276,277],[71,134,142,146,149,151,152,153,166,245,246,280,281,282],[71,134,142,146,149,151,152,153,166,242,245],[71,134,142,146,149,151,152,153,166,242,244,245,246,264],[71,134,142,146,149,151,152,153,166,238,242,244,245,246,258,259,260,262,263,264],[71,134,142,146,149,151,152,153,166,242,244,245,246,259],[71,134,142,146,149,151,152,153,166,238,242,245,246,258,260,262,263,264],[71,134,142,146,149,151,152,153,166,245,246,249],[71,134,142,146,149,151,152,153,166,249],[71,134,142,146,149,151,152,153,166,238,242,244,245,246,247,248,249],[71,134,142,146,149,151,152,153,166,248,249],[71,134,142,146,149,151,152,153,166,242,244,245,249],[71,134,142,146,149,151,152,153,166,250,251],[71,134,142,146,149,151,152,153,166,238,242,245,247,249],[71,134,142,146,149,151,152,153,166,242,244,245,285],[71,134,142,146,149,151,152,153,166,242,244,245,284],[71,134,142,146,149,151,152,153,166,242,244,245,246,272,288,290],[71,134,142,146,149,151,152,153,166,242,244,245,290],[71,134,142,146,149,151,152,153,166,242,244,245,246,272,289],[71,134,142,146,149,151,152,153,166,242,243,244,245],[71,134,142,146,149,151,152,153,166,245,294],[71,134,142,146,149,151,152,153,166,242,245,288],[71,134,142,146,149,151,152,153,166,245,296],[71,134,142,146,149,151,152,153,166,242,244,245],[71,134,142,146,149,151,152,153,166,245,293,295,297,299],[71,134,142,146,149,151,152,153,166,242,244,245,293,298],[71,134,142,146,149,151,152,153,166,245,288],[71,134,142,146,149,151,152,153,166,245,272],[71,134,142,146,149,151,152,153,166,246,247,252,256,257,272,283,286,287,291,292,300,301,302,303,304,306,309],[71,134,142,146,149,151,152,153,166,242,244,245,272],[71,134,142,146,149,151,152,153,166,238,242,244,245,246,268,269,271,272],[71,134,142,146,149,151,152,153,166,242,245,292,305],[71,134,142,146,149,151,152,153,166,242,244,245,307,309],[71,134,142,146,149,151,152,153,166,242,244,245,309],[71,134,142,146,149,151,152,153,166,242,244,245,246,307,308],[71,134,142,146,149,151,152,153,166,243],[71,134,142,146,149,151,152,153,166,240,242,243],[71,134,142,146,149,151,152,153,166,320],[71,86,89,92,93,134,142,146,149,151,152,153,166,183],[71,89,134,142,146,149,151,152,153,166,171,183],[71,89,93,134,142,146,149,151,152,153,166,183],[71,134,142,146,149,151,152,153,166,171],[71,83,134,142,146,149,151,152,153,166],[71,87,134,142,146,149,151,152,153,166],[71,85,86,89,134,142,146,149,151,152,153,166,183],[71,134,142,146,149,151,152,153,155,166,180],[71,134,142,146,149,151,152,153,166,191],[71,83,134,142,146,149,151,152,153,166,191],[71,85,89,134,142,146,149,151,152,153,155,166,183],[71,80,81,82,84,88,134,142,145,146,149,151,152,153,166,171,183],[71,89,98,106,134,142,146,149,151,152,153,166],[71,81,87,134,142,146,149,151,152,153,166],[71,89,115,116,134,142,146,149,151,152,153,166],[71,81,84,89,134,142,146,149,151,152,153,166,174,183,191],[71,89,134,142,146,149,151,152,153,166],[71,85,89,134,142,146,149,151,152,153,166,183],[71,80,134,142,146,149,151,152,153,166],[71,83,84,85,87,88,89,90,91,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,116,117,118,119,120,134,142,146,149,151,152,153,166],[71,89,108,111,134,142,146,149,151,152,153,166],[71,89,98,99,100,134,142,146,149,151,152,153,166],[71,87,89,99,101,134,142,146,149,151,152,153,166],[71,88,134,142,146,149,151,152,153,166],[71,81,83,89,134,142,146,149,151,152,153,166],[71,89,93,99,101,134,142,146,149,151,152,153,166],[71,93,134,142,146,149,151,152,153,166],[71,87,89,92,134,142,146,149,151,152,153,166,183],[71,81,85,89,98,134,142,146,149,151,152,153,166],[71,89,108,134,142,146,149,151,152,153,166],[71,101,134,142,146,149,151,152,153,166],[71,83,89,115,134,142,146,149,151,152,153,166,174,189,191],[71,134,142,146,149,151,152,153,166,194,196],[71,134,142,146,149,151,152,153,166,171,191,193],[71,134,142,146,149,151,152,153,166,171,191,193,194,195,196],[71,134,142,146,148,149,151,152,153,166,191,194],[62,71,134,142,146,149,151,152,153,166,315],[62,63,71,134,142,146,149,151,152,153,166,203],[62,63,71,134,142,146,149,151,152,153,166,204,313,314],[62,63,71,134,142,146,149,151,152,153,166,204,231,232],[62,63,71,134,142,146,149,151,152,153,166,204,232,234],[62,71,134,142,146,149,151,152,153,166,233,235,312],[62,63,71,134,142,146,149,151,152,153,166,204,232,311],[62,71,134,142,146,149,151,152,153,166],[62,71,134,142,146,149,151,152,153,166,232],[64,65,66,67,68,71,134,142,146,149,151,152,153,166,199,200,201,202],[71,134,142,146,149,151,152,153,166,197,198]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"b50ad4682f959060d41592c42bf370aef89ecc99c238c73a3d3faa77d0ca37b5","signature":"030914ded3a9617a51cb181406c351abae4a492acff77a18d8079c7f5b5b74fd"},"61da60198d58f00210a34b39a0625a136ae63d7cf42500e764b91b2e5e2dbdcb","4c11afc0bcf5ad4cb8351103476e6e8076ad11f563ae65a94a14b94d158d046a","2ffaa1f7886d57fe801bd41337521c661ee17d657d1004e504d5422f62cfd23c","738433a0f2e73b2ba4ebbcaa6487030e0b8aa64e65813a160e1b845e20338d9c","972608570a8b1d91ef22149c069a5c29d75d00b4131e2697ea6d42302d3548b9",{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"4137ebf04166f3a325f056aa56101adc75e9dceb30404a1844eb8604d89770e2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"8caeb65fdc3bfe0d13f86f67324fcb2d858ed1c55f1f0cce892eb1acfb9f3239","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"e3905f6902f0b69e5eefc230daa69fdd4ab707a973ec2d086d65af1b3ea47ef0","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"07e4e61e946a9c15045539ecd5f5d2d02e7aab6fa82567826857e09cf0f37c2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c4714ccc29149efb8777a1da0b04b8d2258f5d13ddbf4cd3c3d361fb531ac86","impliedFormat":1},{"version":"3ff275f84f89f8a7c0543da838f9da9614201abc4ce74c533029825adfb4433d","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"f9713757bcdfa4d58b48c0fb249e752c94a3eee8bf4532b906094246ac49ef88","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"e1c1a0b4d1ead0de9eca52203aeb1f771f21e6238d6fcd15aa56ac2a02f1b7bf","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"6fe28249ac0c7bc19a79aa9264baf00efbd080e868dbe1d3052033ad1c64f206","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"ce8653341224f8b45ff46d2a06f2cacb96f841f768a886c9d8dd8ec0878b11bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"a74edb3bab7394a9dbde529d60632be590def2f5f01024dbd85441587fbfbbe0","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"00049ccc87f3f37726db03c01ca68fe74fd9c0109b68c29eb9923ebec2c76b13","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"68d3f35108e2608b1f2f28b36d19d7055f31c4465cc5692cbd06c716a9fe7973","impliedFormat":1},{"version":"a6d543044570fbeed13a7f9925a868081cd2b14ef59cdd9da6ae76d41cab03d3","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"eab2f3179607acb3d44b2db2a76dd7d621c5039b145dc160a1ee733963f9d2f5","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"6f5383b3df1cdf4ff1aa7fb0850f77042b5786b5e65ec9a9b6be56ebfe4d9036","impliedFormat":1},{"version":"62fc21ed9ccbd83bd1166de277a4b5daaa8d15b5fa614c75610d20f3b73fba87","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"c77fb31bc17fd241d3922a9f88c59e3361cdf76d1328ba9412fc6bf7310b638d","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"694b812e0ed11285e8822cf8131e3ce7083a500b3b1d185fff9ed1089677bd0a","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"908217c4f2244ec402b73533ebfcc46d6dcd34fc1c807ff403d7f98702abb3bc","impliedFormat":1},{"version":"1bc5991c91bf4be8b59db501ed284a34945d95abe9b7451d02ea001f7c5621a9","impliedFormat":1},{"version":"d8b8a5a6bf623239d5374ad4a7ff6f3b195ab5ee61293f59f1957e90d2a22809","impliedFormat":1},{"version":"35d283eca7dc0a0c7b099f5fbbf0678b87f3d837572cd5e539ba297ad9837e68","impliedFormat":1},{"version":"1c8384a195a2d931cf6e2b8f656acf558ca649a3f74922d86b95889f49a7f7c5","impliedFormat":1},{"version":"cd11655f57a3558dfcee05a6e78c026f9dfd30535eaf124439c5e88a5617359b","impliedFormat":1},{"version":"83a328cba2f47fc5a948eac394ae2ef2a5a0d26dd366ab373d2c2178bbdcd36c","impliedFormat":1},"2aafbaf6ace811133c4858f9184a6597866fbccb89eb6f1b9c4247e87d0bbfed","2a3c89ad1f603f3f0358499abf18332d30a4d34bb8070f23d5aa9e948cce3998","9e795af82140c310a86279c6f0079d8de3b4db03b4d9476267aa8703a9b7d7a7","46a0b34e1264c4d25ca6646ff0e6cfaa7275ea1ae5a6bc23d4dfd84edf2f2b2e","3dd00310a80b51f37de6c082119f40fdf820dce9410739658e6fa76eceadcaa0",{"version":"e402028070cdf507828b2fba4cddd8d57d13c1b1338e2ef23b3b9b09094e75bf","signature":"c3a944d44c5dc20264755fa6f42ddeba7f19a90b7a514764a079a46e828ee07c"},{"version":"8727e08f3b0b9929db5f1a9e9233c1ce84f3ded0728ea04e34870fdf35c92460","impliedFormat":1},{"version":"1dab12d45a7ab2b167b489150cc7d10043d97eadc4255bfee8d9e07697073c61","impliedFormat":1},{"version":"611c4448eee5289fb486356d96a8049ce8e10e58885608b1d218ab6000c489b3","impliedFormat":1},{"version":"a75156a8eb6c4c6c121762a96d1fc267096b5512412ece181a64baa78731c84a","impliedFormat":1},{"version":"d47961927fe421b16a444286485165f10f18c2ef7b2b32a599c6f22106cd223b","impliedFormat":1},{"version":"341672ca9475e1625c105a6a99f46e8b4f14dff977e53a828deef7b5e932638f","impliedFormat":1},{"version":"2132cb866b781415f9280c4a3365bab64f8e0a8b6b021cfab868268d0dff759c","impliedFormat":1},{"version":"deb4709b6d78208fa7db5c0ac1180664019321c24a3e2f11e9f2832ebdc0ed6b","impliedFormat":1},{"version":"eeee0bc128bde085ac31373f3a008d5b7b2c82a049dea721bc1cd915a94b7113","impliedFormat":1},{"version":"c2f4c022fd9ba0d424d9a25e34748aab8417b71a655ab65e528a3b00ed90ce6d","impliedFormat":1},{"version":"aa8f345d88a8fd01726038a744b7dc266c0953398b30d6ed9695ded3078d5997","impliedFormat":1},{"version":"6bd040af264aa1b76c3310590ce5e573cf198e80c4ce183b8ddd4ad9a3dfec03","impliedFormat":1},{"version":"edb59d3aa737af65d2ff7245697b5dd6754259739c05bddd830aae1bee5ab0ef","impliedFormat":1},{"version":"023afdc65ad8fe7d208604b5d5a04fb33ed9516ff4e457fdfc61c4f8a722fff8","impliedFormat":1},{"version":"2c87df699eae2e001afc54e6c2d9007a98f4aaca6caf754c43cc0b9464166352","impliedFormat":1},{"version":"e4757f15b8155598e377107e0c3df152ec82cc6ec8f87e239e6c89c08ad76e64","impliedFormat":1},{"version":"396f711944c156303065235a5f4219569bf3468d0aa594c82fb9f4b163e9eb62","impliedFormat":1},{"version":"b2646b3299c70436ae2fc39b31760f2b3a22bbabefc8316f0f0c9fc0efaa2a84","impliedFormat":1},{"version":"9da022af34638c5e3d480c4e6f9682d2336967f30e44fcaf7eecb9a01aa9095b","impliedFormat":1},{"version":"85dc0f6eb89e455c7505dc48d8a9422c2259f1d144b14f2238e791453355f5b5","impliedFormat":1},{"version":"6876f5f48d28f1256420752c057d08b4b3ae5f024930475e9bf8aeffb009cd30","impliedFormat":1},{"version":"0cf5b4d36b8d013bd7c1b1302f34d904c12cd2f3c07bb51d0c7042c0ea83fa60","impliedFormat":1},{"version":"55138ffd46c24194af1fc2d298faee0f5f42a71e5687919b962a20962815fa2b","impliedFormat":1},{"version":"bef88efba8852386d816a3a83fad1609a3214faa0cdf7a447c308cf1d15efc2a","impliedFormat":1},{"version":"2a974f024550d5c45fba33d899291a108b6906678fe36bcb9db6739919495d92","impliedFormat":1},{"version":"bc4cb88a0bd52e13d599dc1d61aa8a6234b509e6a81782d3d91517125ffc8c5d","impliedFormat":1},{"version":"f740e94014daa37b0fc90a9e30bf2455c6c5a6c969164e8a705515bc008b9996","impliedFormat":1},{"version":"d941fd4a46bddc870508bf1dcc367e8d9f7ce6c8a73cde059c902d446f25b03a","signature":"d47d90c50d7b3eeb497bfee327ffd5096b1828405e9d549d22b885a2453227e3"},{"version":"d7a6d8923fce240a602f13ed3c7aa24becceb40238802694f54b1427d92e5674","signature":"f0c2de3b2ee12d861786540076ea86887ade022875ebe512e310235288283dc6"},{"version":"878cca70d0472e4cd4d35298e5206f5f90f55a0ec4199da41ec6131d40faf155","impliedFormat":1},{"version":"76aefb4eb07ea212a554458097738ba89a8e30d465feaed0da3792c052e03684","signature":"5b2ce6be76c8df2f15fa3e6bb758b72244de049f0abea2aff46114a73c81ad3a"},{"version":"b1535397a73ca6046ca08957788a4c9a745730c7b2b887e9b9bc784214f3abac","impliedFormat":1},{"version":"1dab12d45a7ab2b167b489150cc7d10043d97eadc4255bfee8d9e07697073c61","impliedFormat":1},{"version":"611c4448eee5289fb486356d96a8049ce8e10e58885608b1d218ab6000c489b3","impliedFormat":1},{"version":"5de017dece7444a2041f5f729fe5035c3e8a94065910fbd235949a25c0c5b035","impliedFormat":1},{"version":"d47961927fe421b16a444286485165f10f18c2ef7b2b32a599c6f22106cd223b","impliedFormat":1},{"version":"341672ca9475e1625c105a6a99f46e8b4f14dff977e53a828deef7b5e932638f","impliedFormat":1},{"version":"d3b5d359e0523d0b9f85016266c9a50ce9cda399aeac1b9eeecb63ba577e4d27","impliedFormat":1},{"version":"5b9f65234e953177fcc9088e69d363706ccd0696a15d254ac5787b28bdfb7cb0","impliedFormat":1},{"version":"510a5373df4110d355b3fb5c72dfd3906782aeacbb44de71ceee0f0dece36352","impliedFormat":1},{"version":"137272a656222e83280287c3b6b6d949d38e6c125b48aff9e987cf584ff8eb42","impliedFormat":1},{"version":"eb76f85d8a8893360da026a53b39152237aaa7f033a267009b8e590139afd7de","impliedFormat":1},{"version":"fcd615891bdf6421c708b42a6006ed8b0cf50ca0ac2b37d66a5777d8222893ce","impliedFormat":1},{"version":"84a28d684e49bae482c89c996e8aeaabf44c0355237a3a1303749da2161a90c1","impliedFormat":1},{"version":"89c36d61bae1591a26b3c08db2af6fdd43ffaab0f96646dead5af39ff0cf44d3","impliedFormat":1},{"version":"5277b2beeb856b348af1c23ffdaccde1ec447abede6f017a0ab0362613309587","impliedFormat":1},{"version":"d4b6804b4c4cb3d65efd5dc8a672825cea7b39db98363d2d9c2608078adce5f8","impliedFormat":1},{"version":"929f67e0e7f3b3a3bcd4e17074e2e60c94b1e27a8135472a7d002a36cd640629","impliedFormat":1},{"version":"bd8e8f02d1b0ebfa518f7d8b5f0db06ae260c192e211a1ef86397f4b49ee198f","impliedFormat":1},{"version":"71b32ccf8c508c2f7445b1b2c144dd7eef9434f7bfa6a92a9ebd0253a75cb54a","impliedFormat":1},{"version":"4fd8e7e446c8379cfb1f165961b1d2f984b40d73f5ad343d93e33962292ec2e0","impliedFormat":1},{"version":"45079ac211d6cfda93dd7d0e7fc1cf2e510dad5610048ef71e47328b765515be","impliedFormat":1},{"version":"1c19f268e0f1ed1a6485ca80e0cfd4e21bdc71cb974e2ac7b04b5fce0a91482b","impliedFormat":1},{"version":"7ae8f8b4f56ba486dc9561d873aae5b3ad263ffb9683c8f9ffc18d25a7fd09a4","impliedFormat":1},{"version":"e0ab56e00ef473df66b345c9d64e42823c03e84d9a679020746d23710c2f9fce","impliedFormat":1},{"version":"d99deead63d250c60b647620d1ddaf497779aef1084f85d3d0a353cbc4ea8a60","impliedFormat":1},{"version":"ba64b14db9d08613474dc7c06d8ffbcb22a00a4f9d2641b2dcf97bc91da14275","impliedFormat":1},{"version":"530197974beb0a02c5a9eb7223f03e27651422345c8c35e1a13ddc67e6365af5","impliedFormat":1},{"version":"512c43b21074254148f89bd80ae00f7126db68b4d0bd1583b77b9c8af91cc0d3","impliedFormat":1},{"version":"0bfacd36c923f059779049c6c74c00823c56386397a541fefc8d8672d26e0c42","impliedFormat":1},{"version":"19d04b82ed0dc5ba742521b6da97f22362fe40d6efa5ca5650f08381e5c939b2","impliedFormat":1},{"version":"f02ac71075b54b5c0a384dddbd773c9852dba14b4bf61ca9f1c8ba6b09101d3e","impliedFormat":1},{"version":"bbf0ae18efd0b886897a23141532d9695435c279921c24bcb86090f2466d0727","impliedFormat":1},{"version":"067670de65606b4aa07964b0269b788a7fe48026864326cd3ab5db9fc5e93120","impliedFormat":1},{"version":"7a094146e95764e687120cdb840d7e92fe9960c2168d697639ad51af7230ef5e","impliedFormat":1},{"version":"21290aaea56895f836a0f1da5e1ef89285f8c0e85dc85fd59e2b887255484a6f","impliedFormat":1},{"version":"a07254fded28555a750750f3016aa44ec8b41fbf3664b380829ed8948124bafe","impliedFormat":1},{"version":"f14fbd9ec19692009e5f2727a662f841bbe65ac098e3371eb9a4d9e6ac05bca7","impliedFormat":1},{"version":"46f640a5efe8e5d464ced887797e7855c60581c27575971493998f253931b9a3","impliedFormat":1},{"version":"cdf62cebf884c6fde74f733d7993b7e255e513d6bc1d0e76c5c745ac8df98453","impliedFormat":1},{"version":"e6dd8526d318cce4cb3e83bef3cb4bf3aa08186ddc984c4663cf7dee221d430e","impliedFormat":1},{"version":"bc79e5e54981d32d02e32014b0279f1577055b2ebee12f4d2dc6451efd823a19","impliedFormat":1},{"version":"ce9f76eceb4f35c5ecd9bf7a1a22774c8b4962c2c52e5d56a8d3581a07b392f9","impliedFormat":1},{"version":"7d390f34038ca66aef27575cffb5a25a1034df470a8f7789a9079397a359bf8b","impliedFormat":1},{"version":"18084f07f6e85e59ce11b7118163dff2e452694fffb167d9973617699405fbd1","impliedFormat":1},{"version":"6af607dd78a033679e46c1c69c126313a1485069bdec46036f0fbfe64e393979","impliedFormat":1},{"version":"44c556b0d0ede234f633da4fb95df7d6e9780007003e108e88b4969541373db1","impliedFormat":1},{"version":"ef1491fb98f7a8837af94bfff14351b28485d8b8f490987820695cedac76dc99","impliedFormat":1},{"version":"0d4ba4ad7632e46bab669c1261452a1b35b58c3b1f6a64fb456440488f9008cf","impliedFormat":1},{"version":"74a0fa488591d372a544454d6cd93bbadd09c26474595ea8afed7125692e0859","impliedFormat":1},{"version":"0a9ae72be840cc5be5b0af985997029c74e3f5bcd4237b0055096bb01241d723","impliedFormat":1},{"version":"920004608418d82d0aad39134e275a427255aaf1dafe44dca10cc432ef5ca72a","impliedFormat":1},{"version":"1c87dfe5efcac5c2cd5fc454fe5df66116d7dc284b6e7b70bd30c07375176b36","impliedFormat":1},{"version":"3ac2bd86af2bab352d126ccdde1381cd4db82e3d09a887391c5c1254790727a1","impliedFormat":1},{"version":"2efc9ad74a84d3af0e00c12769a1032b2c349430d49aadebdf710f57857c9647","impliedFormat":1},{"version":"f18cc4e4728203a0282b94fc542523dfd78967a8f160fabc920faa120688151f","impliedFormat":1},{"version":"cc609a30a3dd07d6074290dadfb49b9f0f2c09d0ae7f2fa6b41e2dae2432417b","impliedFormat":1},{"version":"6362fcd24c5b52eb88e9cf33876abd9b066d520fc9d4c24173e58dcddcfe12d5","impliedFormat":1},{"version":"c473f6bd005279b9f3a08c38986f1f0eaf1b0f9d094fec6bc66309e7504b6460","impliedFormat":1},{"version":"0043ff78e9f07cbbbb934dd80d0f5fe190437715446ec9550d1f97b74ec951ac","impliedFormat":1},{"version":"bdc013746db3189a2525e87e2da9a6681f78352ef25ae513aa5f9a75f541e0ae","impliedFormat":1},{"version":"4f567b8360c2be77e609f98efc15de3ffcdbe2a806f34a3eba1ee607c04abab6","impliedFormat":1},{"version":"615bf0ac5606a0e79312d70d4b978ac4a39b3add886b555b1b1a35472327034e","impliedFormat":1},{"version":"818e96d8e24d98dfd8fd6d9d1bbabcac082bcf5fbbe64ca2a32d006209a8ee54","impliedFormat":1},{"version":"18b0b9a38fe92aa95a40431676b2102139c5257e5635fe6a48b197e9dcb660f1","impliedFormat":1},{"version":"86b382f98cb678ff23a74fe1d940cbbf67bcd3162259e8924590ecf8ee24701e","impliedFormat":1},{"version":"aeea2c497f27ce34df29448cbe66adb0f07d3a5d210c24943d38b8026ffa6d3c","impliedFormat":1},{"version":"aa064f60b7e64c04a759f5806a0d82a954452300ee27566232b0cf5dad5b6ba6","impliedFormat":1},{"version":"7ffb4e58ca1b9ed5f26bed3dc0287c4abd7a2ba301ca55e2546d01a7f7f73de7","impliedFormat":1},{"version":"65a6307cc74644b8813e553b468ea7cc7a1e5c4b241db255098b35f308bfc4b5","impliedFormat":1},{"version":"0fbe1a754e3da007cc2726f61bc8f89b34b466fe205b20c1e316eb240bebe9e8","impliedFormat":1},{"version":"aa2f3c289c7a3403633e411985025b79af473c0bf0fdd980b9712bd6a1705d59","impliedFormat":1},{"version":"e140d9fa025dadc4b098c54278271a032d170d09f85f16f372e4879765277af8","impliedFormat":1},{"version":"70d9e5189fd4dabc81b82cf7691d80e0abf55df5030cc7f12d57df62c72b5076","impliedFormat":1},{"version":"a96be3ed573c2a6d4c7d4e7540f1738a6e90c92f05f684f5ee2533929dd8c6b2","impliedFormat":1},{"version":"0c73536b65135298d43d1ef51dd81a6eba3b69ef0ce005db3de11365fda30a55","impliedFormat":1},{"version":"2a545aa0bc738bd0080a931ccf8d1d9486c75cbc93e154597d93f46d2f3be3b4","impliedFormat":1},{"version":"56803867c2ff5fd2c6ddec523df2ed03d9d3aa07f4f2b7ff3645a21f4c32ccfb","signature":"7048a0334753043ac40c97f740b0c570d45153abdc4d5971bf9a4f206016ff81"},{"version":"d474bb4a44492c182b5a96a39fb1af20b893deed6e9effde918eb854c25193d4","signature":"d0d5e6c40fcfb14a60ffa82ac97d83b2e694583fc84c8238f9733237744d114d"},{"version":"d255ab057211e0c176cff4f6002b5800490f4a3dcda8b4ee5adcb54a3d3b2dfd","signature":"13de26690360d74f6477c51035afb5f70be79391f4206bcb5e5f20c419ac235b"},{"version":"86e0211860e5850a3df3f64e9b84158376622fb06bb0baf26b35e7f408ee74a3","signature":"b8c7cbd2254d47a788722f3fd4a73ad3cc6b94ecdb3db1b7e4008776f4dfd309"},{"version":"cd1b3f7cc45861ad65cba283b71c569d1c5368728dcaa262c5aa44925320e1c3","signature":"75740cae8152235182c5dd737fa4073ab76afa24cfa430d94b514e79941539db"},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"e1028394c1cf96d5d057ecc647e31e457b919092f882ed0c7092152b077fed9d","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true,"impliedFormat":1}],"root":[63,204,232,233,235,[312,316]],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"inlineSources":true,"module":1,"noEmitOnError":true,"noImplicitAny":false,"outDir":"./","skipLibCheck":true,"sourceMap":true,"strict":false,"target":9,"useDefineForClassFields":false},"referencedMap":[[206,1],[212,2],[205,1],[209,1],[211,3],[208,4],[231,5],[218,6],[217,1],[225,7],[222,8],[213,4],[215,4],[227,9],[224,10],[226,11],[216,12],[228,13],[230,14],[221,15],[219,16],[220,17],[223,18],[229,12],[214,1],[207,19],[210,20],[234,1],[317,1],[320,21],[319,1],[325,22],[131,23],[132,23],[133,24],[71,25],[134,26],[135,27],[136,28],[69,1],[137,29],[138,30],[139,31],[140,32],[141,33],[142,34],[143,34],[144,35],[145,36],[146,37],[147,38],[72,1],[70,1],[148,39],[149,40],[150,41],[191,42],[151,43],[152,44],[153,43],[154,45],[155,46],[157,47],[158,48],[159,48],[160,48],[161,49],[162,50],[163,51],[164,52],[165,53],[166,54],[167,54],[168,55],[169,1],[170,1],[171,56],[172,57],[173,56],[174,58],[175,59],[176,60],[177,61],[178,62],[179,63],[180,64],[181,65],[182,66],[183,67],[184,68],[185,69],[186,70],[187,71],[188,72],[73,43],[74,1],[75,73],[76,74],[77,1],[78,75],[79,1],[122,76],[123,77],[124,78],[125,78],[126,79],[127,1],[128,26],[129,80],[130,77],[189,81],[190,82],[192,1],[156,1],[318,1],[324,83],[322,84],[323,85],[193,86],[237,1],[243,87],[236,1],[240,1],[242,88],[239,89],[311,90],[266,91],[262,92],[277,93],[267,94],[274,95],[261,96],[275,1],[273,97],[270,98],[271,99],[268,100],[276,101],[244,89],[245,102],[256,103],[253,104],[254,105],[255,106],[257,107],[264,108],[283,109],[279,110],[278,111],[282,112],[280,113],[281,113],[258,114],[260,115],[259,116],[263,117],[250,118],[265,119],[249,120],[251,121],[248,122],[252,123],[247,124],[286,125],[284,104],[285,126],[287,113],[291,127],[289,128],[290,129],[292,130],[295,131],[294,132],[297,133],[296,134],[300,135],[298,134],[299,136],[293,137],[288,138],[301,137],[302,113],[310,139],[303,134],[304,113],[269,140],[272,141],[246,1],[305,113],[306,142],[308,143],[307,144],[309,145],[238,146],[241,147],[321,148],[62,1],[60,1],[61,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[1,1],[58,1],[59,1],[98,149],[110,150],[95,151],[111,152],[120,153],[86,154],[87,155],[85,156],[119,157],[114,158],[118,159],[89,160],[107,161],[88,162],[117,163],[83,164],[84,158],[90,165],[91,1],[97,166],[94,165],[81,167],[121,168],[112,169],[101,170],[100,165],[102,171],[105,172],[99,173],[103,174],[115,157],[92,175],[93,176],[106,177],[82,152],[109,178],[108,165],[96,176],[104,179],[113,1],[80,1],[116,180],[198,181],[194,182],[197,183],[195,157],[196,184],[316,185],[204,186],[315,187],[233,188],[235,189],[313,190],[312,191],[63,192],[314,193],[232,192],[202,1],[201,1],[68,1],[64,1],[65,1],[203,194],[199,195],[200,1],[67,1],[66,1]],"version":"5.9.3"}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@things-factory/ai-client-base",
3
+ "version": "10.0.0-beta.64",
4
+ "main": "dist-server/index.js",
5
+ "things-factory": true,
6
+ "author": "heartyoh",
7
+ "description": "Provider-agnostic AI client abstraction (chat / structured JSON / vision). Anthropic / OpenAI / Bedrock 등 어댑터로 확장.",
8
+ "license": "MIT",
9
+ "publishConfig": {
10
+ "access": "public",
11
+ "@things-factory:registry": "https://registry.npmjs.org"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/hatiolab/things-factory.git",
16
+ "directory": "packages/ai-client-base"
17
+ },
18
+ "scripts": {
19
+ "build": "npm run clean:server && tsc --p tsconfig.json",
20
+ "build:server": "npm run clean:server && tsc",
21
+ "clean:server": "rm -rf dist-server",
22
+ "clean": "npm run clean:server"
23
+ },
24
+ "dependencies": {
25
+ "@anthropic-ai/sdk": "^0.40.0",
26
+ "@google/generative-ai": "^0.24.0",
27
+ "@things-factory/env": "^10.0.0-beta.19",
28
+ "openai": "^4.0.0"
29
+ },
30
+ "gitHead": "8a2729cb8c838ed8fc3c7921fa67f7279c2d13b1"
31
+ }