@h-ai/ai 0.1.0-alpha9 → 1.0.0-beta.10

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.
@@ -0,0 +1,1232 @@
1
+ import { HaiAIError } from './chunk-M77C3VAP.js';
2
+ import { z } from 'zod';
3
+ import process from 'process';
4
+ import { core, err, ok } from '@h-ai/core';
5
+ import { ChunkOptionsSchema, CleanOptionsSchema } from '@h-ai/datapipe';
6
+ import { AUDIO_WS_PATH as AUDIO_WS_PATH$1, AudioFormatSchema as AudioFormatSchema$1, AudioWsClientMessageSchema as AudioWsClientMessageSchema$1, AudioWsDoneMessageSchema as AudioWsDoneMessageSchema$1, AudioWsStartMessageSchema as AudioWsStartMessageSchema$1, AudioWsTextMessageSchema as AudioWsTextMessageSchema$1 } from '@h-ai/api-contract';
7
+
8
+ var acpIdSchema = z.string().regex(/^[a-z0-9][\w-]{0,95}$/i);
9
+ var branch = z.string().min(1).max(240).refine(
10
+ (value) => !value.startsWith("-") && !/[\s~^:?*\\[]/.test(value) && !Array.from(value).some((character) => character.charCodeAt(0) < 32) && !value.includes("..") && !value.includes("@{") && !value.endsWith(".lock") && !value.endsWith("/") && !value.startsWith("/")
11
+ );
12
+ var environment = z.record(z.string().regex(/^[A-Z_]\w*$/i), z.string().regex(/^[A-Z_]\w*$/i)).default({});
13
+ var ACPRepositorySchema = z.strictObject({
14
+ /** 清单中的唯一 ID;同时用于受管理目录名。 */
15
+ id: acpIdSchema.refine((value) => !["files", ".state"].includes(value)),
16
+ /** 远程地址,不允许命令选项和换行。 */
17
+ url: z.string().min(1).refine((value) => !value.startsWith("-") && !/[\r\n\0]/.test(value)),
18
+ /** 该工程明确指定的主分支,更新和 merge-main 发布均使用此值。 */
19
+ mainBranch: branch,
20
+ /** Git remote 名,默认 origin。 */
21
+ remote: acpIdSchema.default("origin")
22
+ });
23
+ var ACPWorkspaceSchema = z.strictObject({
24
+ /** 清单中的唯一 ID;同时用于受管理目录名。 */
25
+ id: acpIdSchema,
26
+ /** 持久存储位置;directory 供本机,volume 供托管容器。 */
27
+ storage: z.discriminatedUnion("type", [
28
+ z.strictObject({
29
+ /** 本机目录存储。 */
30
+ type: z.literal("directory"),
31
+ /** 本机绝对或相对目录,运行时归一化为真实绝对路径。 */
32
+ path: z.string().min(1)
33
+ }),
34
+ z.strictObject({
35
+ /** 存储类型判别字段。 */
36
+ type: z.literal("volume"),
37
+ /** 可读名称;volume 时表示持久卷名。 */
38
+ name: acpIdSchema,
39
+ /** auto 优先可用 Podman,再选 Docker;显式选择不自动降级。 */
40
+ engine: z.enum(["auto", "podman", "docker"]).default("auto"),
41
+ /** 已部署的 Agent 镜像,工作区和智能体需使用同一镜像。 */
42
+ image: z.string().min(1).refine((value) => !value.startsWith("-"))
43
+ })
44
+ ]),
45
+ /** 多个 Git 工程;默认空数组,不使用 Git 时仅创建文件目录。 */
46
+ repositories: z.array(ACPRepositorySchema).default([]),
47
+ /** 目标环境变量名到宿主环境变量名的映射;保存引用而非明文凭据。 */
48
+ environmentRefs: environment
49
+ }).refine(
50
+ (value) => new Set(value.repositories.map((repo) => repo.id)).size === value.repositories.length
51
+ );
52
+ var common = {
53
+ /** 清单中的唯一 ID;同时用于受管理目录名。 */
54
+ id: acpIdSchema,
55
+ /** 智能体的可读名称。 */
56
+ name: z.string().min(1),
57
+ /** 默认启用,禁用后禁止新建和恢复会话。 */
58
+ enabled: z.boolean().default(true),
59
+ /** 原生配置适配器名称,默认 generic。 */
60
+ adapter: z.string().min(1).default("generic"),
61
+ /** 绑定 Hai LLM 模型 ID;默认空数组。 */
62
+ modelIds: z.array(z.string().min(1)).default([]),
63
+ /** 默认选择的模型 ID,必须存在于 modelIds。 */
64
+ defaultModelId: z.string().min(1).optional(),
65
+ /** 目标环境变量名到宿主环境变量名的映射;保存引用而非明文凭据。 */
66
+ environmentRefs: environment
67
+ };
68
+ var launch = {
69
+ /** 可选原生程序覆盖,使用参数数组执行,不经过 shell。 */
70
+ command: z.string().min(1).optional(),
71
+ /** 原生启动参数,省略时由适配器提供默认值。 */
72
+ args: z.array(z.string()).optional()
73
+ };
74
+ var ACPAgentSchema = z.discriminatedUnion("mode", [
75
+ z.strictObject({
76
+ ...common,
77
+ /** 接入模式:自定义远程服务、本机内嵌进程或托管容器。 */
78
+ mode: z.literal("custom-service"),
79
+ /** 智能体原生支持的传输;不自动转换 stdio 和 HTTP/WS。 */
80
+ transport: z.enum(["http", "ws"]),
81
+ /** 远程地址,不允许命令选项和换行。 */
82
+ url: z.url(),
83
+ /** 远程认证 Header 名到宿主变量名的映射。 */
84
+ headerEnv: z.record(z.string(), z.string()).default({}),
85
+ /** 自定义服务显式声明的原生 HTTP/WS 能力。 */
86
+ supportedTransports: z.array(z.enum(["http", "ws"])).min(1)
87
+ }),
88
+ z.strictObject({
89
+ ...common,
90
+ ...launch,
91
+ /** 接入模式:自定义远程服务、本机内嵌进程或托管容器。 */
92
+ mode: z.literal("embedded"),
93
+ /** 智能体原生支持的传输;不自动转换 stdio 和 HTTP/WS。 */
94
+ transport: z.literal("stdio").default("stdio")
95
+ }),
96
+ z.strictObject({
97
+ ...common,
98
+ ...launch,
99
+ /** 接入模式:自定义远程服务、本机内嵌进程或托管容器。 */
100
+ mode: z.literal("builtin-service"),
101
+ /** 智能体原生支持的传输;不自动转换 stdio 和 HTTP/WS。 */
102
+ transport: z.literal("stdio").default("stdio"),
103
+ /** 已部署的 Agent 镜像,工作区和智能体需使用同一镜像。 */
104
+ image: z.string().min(1).refine((value) => !value.startsWith("-")),
105
+ /** auto 优先可用 Podman,再选 Docker;显式选择不自动降级。 */
106
+ engine: z.enum(["auto", "podman", "docker"]).default("auto")
107
+ })
108
+ ]).superRefine((value, ctx) => {
109
+ if (value.defaultModelId && !value.modelIds.includes(value.defaultModelId)) {
110
+ ctx.addIssue({
111
+ code: "custom",
112
+ path: ["defaultModelId"],
113
+ message: "Model binding mismatch"
114
+ });
115
+ }
116
+ if (value.mode === "custom-service") {
117
+ const protocol = new URL(value.url).protocol;
118
+ if (!(value.transport === "http" ? ["http:", "https:"] : ["ws:", "wss:"]).includes(protocol) || !value.supportedTransports.includes(value.transport)) {
119
+ ctx.addIssue({
120
+ code: "custom",
121
+ path: ["transport"],
122
+ message: "Transport mismatch"
123
+ });
124
+ }
125
+ if (value.modelIds.length || value.defaultModelId) {
126
+ ctx.addIssue({
127
+ code: "custom",
128
+ path: ["modelIds"],
129
+ message: "External service owns its model configuration"
130
+ });
131
+ }
132
+ }
133
+ });
134
+ var ACPPublishSchema = z.strictObject({
135
+ /** 发布到登记的主分支,或以同名会话分支推送到各工程。 */
136
+ mode: z.enum(["merge-main", "push-branch"]),
137
+ /** 非空 Git 提交说明。 */
138
+ message: z.string().min(1).max(1e4),
139
+ /** Git 提交身份,由调用方明确提供。 */
140
+ author: z.strictObject({
141
+ /** Git 提交者名称,不允许换行或尖括号。 */
142
+ name: z.string().min(1).refine((value) => !/[\r\n<>]/.test(value)),
143
+ /** Git 提交者邮箱。 */
144
+ email: z.email()
145
+ })
146
+ });
147
+ var sessionIdentitySchema = acpIdSchema;
148
+ var branchNameSchema = branch;
149
+ var ACPConfigSchema = z.strictObject({
150
+ /** 配置文件定义的只读智能体,与数据库记录按 ID 合并。 */
151
+ agents: z.array(ACPAgentSchema).default([]),
152
+ /** 配置文件定义的只读工作区,与数据库记录按 ID 合并。 */
153
+ workspaces: z.array(ACPWorkspaceSchema).default([]),
154
+ /** 握手和控制请求超时,毫秒。 */
155
+ requestTimeout: z.number().int().positive().default(3e4),
156
+ /** 单轮任务超时,毫秒。 */
157
+ promptTimeout: z.number().int().positive().default(6e5),
158
+ /** 取消后等待终态的上限,毫秒。 */
159
+ cancelTimeout: z.number().int().positive().default(5e3),
160
+ /** 单轮输入和累计输出的字节上限。 */
161
+ maxContentBytes: z.number().int().positive().default(8 * 1024 * 1024),
162
+ /** 未消费事件数量上限。 */
163
+ maxPendingEvents: z.number().int().positive().default(1024)
164
+ });
165
+ var CompressionStrategySchema = z.enum(["summary", "sliding-window", "hybrid"]);
166
+ var EntityTypeSchema = z.enum(["person", "project", "concept", "organization", "location", "event", "other"]);
167
+ var MemoryTypeSchema = z.enum(["fact", "preference", "event", "entity", "instruction"]);
168
+
169
+ // messages/en-US.json
170
+ var en_US_default = {
171
+ ai_mcpInvalidToolSchema: "Invalid input schema for MCP tool: {name}",
172
+ ai_mcpInvalidToolInput: "Invalid input for MCP tool: {name}",
173
+ ai_mcpInvalidResource: "MCP resource must contain either valid text or blob: {uri}",
174
+ ai_mcpInvalidPrompt: "Invalid MCP prompt arguments or messages: {name}",
175
+ $schema: "https://inlang.com/schema/inlang-message-format",
176
+ ai_notInitialized: "AI service not initialized. Call ai.init() first.",
177
+ ai_initFailed: "Failed to initialize AI service: {error}",
178
+ ai_initInProgress: "AI service initialization is already in progress.",
179
+ ai_requestTimeout: "Request timeout",
180
+ ai_internalError: "Internal error: {error}",
181
+ ai_mcpToolNotFound: "MCP tool '{name}' not found",
182
+ ai_mcpToolFailed: "MCP tool '{name}' execution failed: {error}",
183
+ ai_mcpResourceNotFound: "MCP resource '{uri}' not found",
184
+ ai_mcpResourceFailed: "MCP resource '{uri}' read failed: {error}",
185
+ ai_mcpPromptNotFound: "MCP prompt '{name}' not found",
186
+ ai_mcpPromptMissingArg: "MCP prompt '{name}' missing required argument '{arg}'",
187
+ ai_mcpPromptFailed: "MCP prompt '{name}' execution failed: {error}",
188
+ ai_toolNotFound: "Tool '{name}' not found",
189
+ ai_toolInvalidJson: "Invalid JSON in tool call arguments",
190
+ ai_toolTimeout: "Tool '{name}' timed out or was cancelled after {ms}ms",
191
+ ai_toolAlreadyRegistered: "Tool '{name}' is already registered; use replace() to replace it explicitly",
192
+ ai_toolForbidden: "Tool '{name}' execution is not authorized",
193
+ ai_configError: "AI config validation failed: {error}",
194
+ ai_llmRecordFailed: "Chat record save failed: {error}",
195
+ ai_llmHistoryFailed: "Chat history query failed: {error}",
196
+ ai_generateObjectFailed: "Structured output parsing failed: {error}",
197
+ ai_generateObjectRepair: "The previous output could not be parsed into the required structure ({error}). Output only JSON conforming to the schema, with no extra text.",
198
+ ai_embeddingApiFailed: "Embedding API call failed: {error}",
199
+ ai_embeddingModelNotFound: "Embedding model '{model}' not found",
200
+ ai_embeddingInputTooLong: "Embedding input text exceeds maximum length",
201
+ ai_reasoningFailed: "Reasoning execution failed: {error}",
202
+ ai_reasoningMaxRounds: "Reasoning rounds limit reached ({rounds} rounds)",
203
+ ai_reasoningStrategyNotFound: "Reasoning strategy '{strategy}' not found",
204
+ ai_retrievalFailed: "Retrieval execution failed: {error}",
205
+ ai_retrievalSourceNotFound: "Retrieval source '{source}' not configured",
206
+ ai_ragFailed: "RAG execution failed: {error}",
207
+ ai_ragContextBuildFailed: "RAG context build failed: {error}",
208
+ ai_knowledgeSetupFailed: "Knowledge base setup failed: {error}",
209
+ ai_knowledgeIngestFailed: "Knowledge ingestion failed: {error}",
210
+ ai_knowledgeRetrieveFailed: "Knowledge retrieval failed: {error}",
211
+ ai_knowledgeEntityExtractFailed: "Entity extraction failed: {error}",
212
+ ai_knowledgeNotSetup: "Knowledge base not initialized. Call ai.knowledge.setup() first.",
213
+ ai_knowledgeCollectionNotFound: "Knowledge collection '{collection}' not found",
214
+ ai_memoryExtractFailed: "Memory extraction failed: {error}",
215
+ ai_memoryStoreFailed: "Memory storage failed: {error}",
216
+ ai_memoryRecallFailed: "Memory recall failed: {error}",
217
+ ai_memoryNotFound: "Memory entry '{id}' not found",
218
+ ai_memoryEphemeralFallbackDenied: "Memory provider 'mem0' cannot map vector backend '{backend}' to a persistent store. Use qdrant, or explicitly allow ephemeral fallback in development or E2E only.",
219
+ ai_memorySharedBackendRequired: "Production Mem0 memory requires an actual persistent qdrant backend; ephemeral fallback is restricted to development or explicit E2E.",
220
+ ai_memoryBackendLifecycleUnsupported: "Mem0 pgvector is unsupported: its SDK keeps a private PostgreSQL connection without a public close API. Use Mem0 Qdrant or native memory with pgvector.",
221
+ ai_memoryBackendConnectionRequired: "Mem0 backend '{backend}' requires complete connection settings before it can be treated as persistent.",
222
+ ai_memoryBackendSdkIncompatible: "Mem0 Qdrant requires @qdrant/js-client-rest 1.18.0 with the public search method. Install the tested peer version before starting.",
223
+ ai_memoryListIncomplete: "Mem0 cannot produce a complete list for more than {limit} subject candidates. Listing and filtered deletion were rejected without partial results or deletion.",
224
+ ai_memoryClearRequiresFilter: "clear() requires at least one filter (objectId / types / scope); to wipe all memories use ai.memory.admin.clearAll({ confirm: true })",
225
+ ai_memoryClearAllUnconfirmed: "admin.clearAll() requires explicit confirmation: pass { confirm: true }",
226
+ ai_memoryEnrichFailed: "Memory enrichment failed: {error}",
227
+ ai_memoryPromoteFailed: "Memory promotion (long-term consolidation) failed: {error}",
228
+ ai_personaNotFound: "Persona '{id}' not found",
229
+ ai_personaSaveFailed: "Persona save failed: {error}",
230
+ ai_contextCompressFailed: "Context compression failed: {error}",
231
+ ai_contextBudgetExceeded: "Protected context uses {tokens} tokens and cannot fit within the {budget}-token compression budget.",
232
+ ai_contextSummarizeFailed: "Context summarization failed: {error}",
233
+ ai_contextTokenEstimateFailed: "Token estimation failed: {error}",
234
+ ai_turnNotFound: "Conversation turn '{turnId}' not found",
235
+ ai_turnInvalidState: "Conversation turn '{turnId}' expired or was committed with different content",
236
+ ai_contextScopeRequired: "Context requires non-empty objectId and sessionId",
237
+ ai_contextBusy: "Context manager is busy: a generation is already in progress (concurrency='reject')",
238
+ ai_storeFailed: "Store operation failed: {error}",
239
+ ai_storeNotAvailable: "Store backend not available, degraded to memory mode",
240
+ ai_sessionNotFound: "Session '{id}' not found",
241
+ ai_sessionFailed: "Session operation failed: {error}",
242
+ ai_rerankApiFailed: "Rerank API call failed: {error}",
243
+ ai_rerankInvalidRequest: "Invalid rerank request: {reason}",
244
+ ai_fileParseFailed: "File parsing failed: {error}",
245
+ ai_fileUnsupportedFormat: "Unsupported file format: {mimeType}",
246
+ ai_fileOcrFailed: "OCR recognition failed: {error}",
247
+ ai_fileInvalidContent: "Invalid file content: {reason}",
248
+ ai_configMissingApiKey: "API Key is required for scenario '{scenario}'",
249
+ ai_audioNotInitialized: "Audio service not initialized. Call ai.init() first.",
250
+ ai_audioInvalidRequest: "Invalid audio request: {reason}",
251
+ ai_audioModelNotFound: "Audio model '{model}' not found. Register it in audio.models of ai.init().",
252
+ ai_audioMissingApiKey: "Audio provider '{provider}' is missing credentials (API Key or App/Access Key).",
253
+ ai_audioMissingBaseUrl: "Audio provider '{provider}' is missing an endpoint. Configure baseUrl in the model entry.",
254
+ ai_audioUnsupportedInput: "Provider '{provider}' does not support this input mode: {reason}",
255
+ ai_audioUpstreamError: "Audio upstream service error: {error}",
256
+ ai_audioProtocolError: "Audio protocol error: {error}",
257
+ ai_audioConnectionFailed: "Audio connection failed: {error}",
258
+ ai_audioTimeout: "Audio request timed out",
259
+ ai_audioInputTooLarge: "Input audio exceeds size limit ({limit} bytes)",
260
+ ai_audioCancelled: "Audio request was cancelled",
261
+ ai_imageInvalidRequest: "Image prompt must not be empty",
262
+ ai_imageInvalidSize: "Image width and height must be positive integers",
263
+ ai_imageInvalidReferenceImage: "Each reference image must contain non-empty bytes and a valid image MIME type",
264
+ ai_imageModelNotFound: "Image model '{model}' not found. Register it in image.models of ai.init().",
265
+ ai_imageMissingApiKey: "Image provider '{provider}' is missing an API key.",
266
+ ai_imageUpstreamError: "Image upstream service returned HTTP {status}",
267
+ ai_imageAuthenticationFailed: "Image upstream authentication failed (HTTP 401); check the API key",
268
+ ai_imagePaymentRequired: "Image upstream billing was rejected (HTTP 402); check the account balance or API key budget",
269
+ ai_imageAccessDenied: "Image upstream access was denied (HTTP 403); check API key permissions and model access",
270
+ ai_imageProtocolError: "Image provider returned an invalid response",
271
+ ai_imageRequestFailed: "Image generation request failed",
272
+ ai_imageCancelled: "Image generation request was cancelled",
273
+ ai_imageDownloadBlocked: "Image download URL or resolved address is not allowed",
274
+ ai_imageTooLarge: "Image bytes or image count exceeds the configured limit",
275
+ ai_imageTimeout: "Image generation or download timed out",
276
+ ai_a2aNotConfigured: "A2A service not configured. Provide 'a2a' config in ai.init().",
277
+ ai_a2aHandleFailed: "A2A request handling failed: {error}",
278
+ ai_a2aRemoteCallFailed: "A2A remote call to '{url}' failed: {error}",
279
+ ai_a2aAuthFailed: "A2A authentication failed: {error}",
280
+ ai_a2aListMessagesFailed: "A2A message listing failed. Please try again later",
281
+ ai_a2aMessageStoreFailed: "A2A message persistence failed. Reconcile the task outcome",
282
+ ai_contextMemoryTasksFailed: "{count} background memory extraction tasks failed and may have partially completed. Reconcile their effects; no automatic retry was performed",
283
+ ai_storeIndexMismatch: "AI store index definition does not match. Reconcile the database schema before retrying",
284
+ ai_sharedBackendRequired: "Production AI requires shared state; initialize shared database/vector services or inject a trusted provider declaring stateScope shared.",
285
+ ai_a2aStateUnavailable: "A2A shared state unavailable",
286
+ ai_a2aExecutionLost: "Execution ownership lost",
287
+ ai_a2aJournalLimit: "A2A execution journal limit exceeded",
288
+ ai_a2aLeaseExpired: "Execution lease expired",
289
+ ai_a2aUpdateConflict: "Concurrent A2A update conflict",
290
+ ai_a2aContextUnavailable: "Context is unavailable",
291
+ ai_a2aRuntimeClosed: "A2A runtime is closed",
292
+ ai_a2aInvalidMessage: "Invalid A2A message size or identifier",
293
+ ai_a2aIdempotencyConflict: "Idempotency message content changed",
294
+ ai_a2aTaskAdvanced: "A later message has already advanced this task",
295
+ ai_a2aTaskNotAccepting: "Task is not accepting a new message",
296
+ ai_a2aReceiptLimit: "A2A message receipt limit exceeded",
297
+ ai_a2aContextMismatch: "Context does not match task",
298
+ ai_a2aReferenceLimit: "Too many reference tasks",
299
+ ai_a2aEventTaskMismatch: "Execution event task identifier mismatch",
300
+ ai_a2aExecutionNotWritable: "Execution is no longer writable",
301
+ ai_a2aOutputLimit: "A2A output queue limit exceeded",
302
+ ai_a2aExecutionInterrupted: "A2A execution interrupted",
303
+ ai_a2aSubscriptionAdvanced: "A later message advanced the subscription",
304
+ ai_a2aExecutorAlreadyRegistered: "A2A executor is already registered; close AI before replacing it",
305
+ ai_llmProtocolRenamed: "LLM api was renamed to protocol. Update llm.protocol, models[].protocol, tempModel.protocol and HAI_AI_LLM_PROTOCOL / HAI_AI_LLM_MODELS_<index>_PROTOCOL environment variables.",
306
+ ai_modelCapabilitiesInvalid: "Invalid model capabilities: output capacity exceeds context capacity, or reasoning efforts are declared without reasoning support.",
307
+ ai_acpGitNotFound: "Git is not installed in the execution environment.",
308
+ ai_acpOperationFailed: "ACP operation failed. Check the connection, workspace and runtime.",
309
+ ai_acpInvalid: "Invalid ACP request.",
310
+ ai_acpNotFound: "ACP resource not found.",
311
+ ai_acpBusy: "ACP resource is busy.",
312
+ ai_acpUnsupported: "The agent or runtime does not support this operation.",
313
+ ai_acpCancelled: "ACP operation cancelled.",
314
+ ai_acpTimeout: "ACP operation timed out.",
315
+ ai_acpOutput: "ACP output is invalid, ambiguous or exceeds limits.",
316
+ ai_acpConflict: "ACP state conflict. Check working directories and branches.",
317
+ ai_acpPartial: "Some repository operations failed. Inspect individual results.",
318
+ ai_acpClosed: "ACP session or module is closed.",
319
+ ai_acpRuntime: "Runtime unavailable. Check Podman/Docker or local executables.",
320
+ ai_acpModel: "Model configuration is incompatible or missing required capabilities.",
321
+ ai_acpCleanup: "Runtime cleanup is incomplete; the working directory remains occupied.",
322
+ ai_resourceReadOnly: "Configuration-defined resources are read-only.",
323
+ ai_resourceNotFound: "Resource not found.",
324
+ ai_resourceConflict: "Resource exists or its version changed.",
325
+ ai_resourceInvalid: "Invalid resource configuration.",
326
+ ai_resourceOperationFailed: "Resource registry operation failed."
327
+ };
328
+
329
+ // messages/ja-JP.json
330
+ var ja_JP_default = {
331
+ ai_mcpInvalidToolSchema: "MCP\u30C4\u30FC\u30EB\u306E\u5165\u529B\u30B9\u30AD\u30FC\u30DE\u304C\u7121\u52B9\u3067\u3059: {name}",
332
+ ai_mcpInvalidToolInput: "MCP\u30C4\u30FC\u30EB\u306E\u5165\u529B\u304C\u7121\u52B9\u3067\u3059: {name}",
333
+ ai_mcpInvalidResource: "MCP\u30EA\u30BD\u30FC\u30B9\u306B\u306F\u6709\u52B9\u306A\u30C6\u30AD\u30B9\u30C8\u307E\u305F\u306Fblob\u304C\u5FC5\u8981\u3067\u3059: {uri}",
334
+ ai_mcpInvalidPrompt: "MCP\u30D7\u30ED\u30F3\u30D7\u30C8\u306E\u5F15\u6570\u307E\u305F\u306F\u30E1\u30C3\u30BB\u30FC\u30B8\u304C\u7121\u52B9\u3067\u3059: {name}",
335
+ $schema: "https://inlang.com/schema/inlang-message-format",
336
+ ai_notInitialized: "AI\u30B5\u30FC\u30D3\u30B9\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u5148\u306Bai.init()\u3092\u547C\u3073\u51FA\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
337
+ ai_initFailed: "AI\u30B5\u30FC\u30D3\u30B9\u306E\u521D\u671F\u5316\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
338
+ ai_initInProgress: "AI\u30B5\u30FC\u30D3\u30B9\u306E\u521D\u671F\u5316\u306F\u65E2\u306B\u5B9F\u884C\u4E2D\u3067\u3059\u3002",
339
+ ai_requestTimeout: "\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F",
340
+ ai_internalError: "\u5185\u90E8\u30A8\u30E9\u30FC: {error}",
341
+ ai_mcpToolNotFound: "MCP\u30C4\u30FC\u30EB\u300C{name}\u300D\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
342
+ ai_mcpToolFailed: "MCP\u30C4\u30FC\u30EB\u300C{name}\u300D\u306E\u5B9F\u884C\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
343
+ ai_mcpResourceNotFound: "MCP\u30EA\u30BD\u30FC\u30B9\u300C{uri}\u300D\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
344
+ ai_mcpResourceFailed: "MCP\u30EA\u30BD\u30FC\u30B9\u300C{uri}\u300D\u306E\u8AAD\u307F\u53D6\u308A\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
345
+ ai_mcpPromptNotFound: "MCP\u30D7\u30ED\u30F3\u30D7\u30C8\u300C{name}\u300D\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
346
+ ai_mcpPromptMissingArg: "MCP\u30D7\u30ED\u30F3\u30D7\u30C8\u300C{name}\u300D\u306B\u5FC5\u9808\u5F15\u6570\u300C{arg}\u300D\u304C\u3042\u308A\u307E\u305B\u3093",
347
+ ai_mcpPromptFailed: "MCP\u30D7\u30ED\u30F3\u30D7\u30C8\u300C{name}\u300D\u306E\u5B9F\u884C\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
348
+ ai_toolNotFound: "\u30C4\u30FC\u30EB\u300C{name}\u300D\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
349
+ ai_toolInvalidJson: "\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057\u306E\u5F15\u6570\u306B\u7121\u52B9\u306AJSON\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059",
350
+ ai_toolTimeout: "\u30C4\u30FC\u30EB\u300C{name}\u300D\u306F{ms}ms\u5F8C\u306B\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u305F\u304B\u3001\u30AD\u30E3\u30F3\u30BB\u30EB\u3055\u308C\u307E\u3057\u305F",
351
+ ai_toolAlreadyRegistered: "\u30C4\u30FC\u30EB\u300C{name}\u300D\u306F\u767B\u9332\u6E08\u307F\u3067\u3059\u3002\u660E\u793A\u7684\u306B\u7F6E\u304D\u63DB\u3048\u308B\u306B\u306Freplace()\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044",
352
+ ai_toolForbidden: "\u30C4\u30FC\u30EB\u300C{name}\u300D\u306E\u5B9F\u884C\u306F\u8A31\u53EF\u3055\u308C\u3066\u3044\u307E\u305B\u3093",
353
+ ai_configError: "AI\u8A2D\u5B9A\u306E\u691C\u8A3C\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
354
+ ai_llmRecordFailed: "\u30C1\u30E3\u30C3\u30C8\u8A18\u9332\u306E\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
355
+ ai_llmHistoryFailed: "\u30C1\u30E3\u30C3\u30C8\u5C65\u6B74\u306E\u53D6\u5F97\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
356
+ ai_generateObjectFailed: "\u69CB\u9020\u5316\u51FA\u529B\u306E\u89E3\u6790\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
357
+ ai_generateObjectRepair: "\u524D\u306E\u51FA\u529B\u3092\u5FC5\u8981\u306A\u69CB\u9020\u306B\u89E3\u6790\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08{error}\uFF09\u3002\u8FFD\u52A0\u306E\u30C6\u30AD\u30B9\u30C8\u3092\u542B\u3081\u305A\u3001\u30B9\u30AD\u30FC\u30DE\u306B\u6E96\u62E0\u3057\u305FJSON\u306E\u307F\u3092\u51FA\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
358
+ ai_embeddingApiFailed: "\u57CB\u3081\u8FBC\u307FAPI\u306E\u547C\u3073\u51FA\u3057\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
359
+ ai_embeddingModelNotFound: "\u57CB\u3081\u8FBC\u307F\u30E2\u30C7\u30EB\u300C{model}\u300D\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
360
+ ai_embeddingInputTooLong: "\u57CB\u3081\u8FBC\u307F\u5165\u529B\u30C6\u30AD\u30B9\u30C8\u304C\u6700\u5927\u9577\u3092\u8D85\u3048\u3066\u3044\u307E\u3059",
361
+ ai_reasoningFailed: "\u63A8\u8AD6\u306E\u5B9F\u884C\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
362
+ ai_reasoningMaxRounds: "\u63A8\u8AD6\u56DE\u6570\u306E\u4E0A\u9650\u306B\u9054\u3057\u307E\u3057\u305F\uFF08{rounds}\u56DE\uFF09",
363
+ ai_reasoningStrategyNotFound: "\u63A8\u8AD6\u6226\u7565\u300C{strategy}\u300D\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
364
+ ai_retrievalFailed: "\u691C\u7D22\u306E\u5B9F\u884C\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
365
+ ai_retrievalSourceNotFound: "\u691C\u7D22\u30BD\u30FC\u30B9\u300C{source}\u300D\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093",
366
+ ai_ragFailed: "RAG\u306E\u5B9F\u884C\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
367
+ ai_ragContextBuildFailed: "RAG\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u306E\u69CB\u7BC9\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
368
+ ai_knowledgeSetupFailed: "\u30CA\u30EC\u30C3\u30B8\u30D9\u30FC\u30B9\u306E\u8A2D\u5B9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
369
+ ai_knowledgeIngestFailed: "\u30CA\u30EC\u30C3\u30B8\u306E\u53D6\u308A\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
370
+ ai_knowledgeRetrieveFailed: "\u30CA\u30EC\u30C3\u30B8\u306E\u691C\u7D22\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
371
+ ai_knowledgeEntityExtractFailed: "\u30A8\u30F3\u30C6\u30A3\u30C6\u30A3\u306E\u62BD\u51FA\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
372
+ ai_knowledgeNotSetup: "\u30CA\u30EC\u30C3\u30B8\u30D9\u30FC\u30B9\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u5148\u306Bai.knowledge.setup()\u3092\u547C\u3073\u51FA\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
373
+ ai_knowledgeCollectionNotFound: "\u30CA\u30EC\u30C3\u30B8\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u300C{collection}\u300D\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
374
+ ai_memoryExtractFailed: "\u30E1\u30E2\u30EA\u30FC\u306E\u62BD\u51FA\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
375
+ ai_memoryStoreFailed: "\u30E1\u30E2\u30EA\u30FC\u306E\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
376
+ ai_memoryRecallFailed: "\u30E1\u30E2\u30EA\u30FC\u306E\u60F3\u8D77\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
377
+ ai_memoryNotFound: "\u30E1\u30E2\u30EA\u30FC\u30A8\u30F3\u30C8\u30EA\u30FC\u300C{id}\u300D\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
378
+ ai_memoryEphemeralFallbackDenied: "\u30E1\u30E2\u30EA\u30FC\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC mem0 \u306F\u30D9\u30AF\u30C8\u30EB\u30D0\u30C3\u30AF\u30A8\u30F3\u30C9 '{backend}' \u3092\u6C38\u7D9A\u30B9\u30C8\u30A2\u306B\u5BFE\u5FDC\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\u3002qdrant \u3092\u4F7F\u7528\u3059\u308B\u304B\u3001\u958B\u767A\u74B0\u5883\u307E\u305F\u306F E2E \u3067\u306E\u307F\u4E00\u6642\u4FDD\u5B58\u3078\u306E\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u3092\u660E\u793A\u7684\u306B\u8A31\u53EF\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
379
+ ai_memorySharedBackendRequired: "\u672C\u756A\u74B0\u5883\u306E Mem0 \u30E1\u30E2\u30EA\u30FC\u306B\u306F\u3001\u6C38\u7D9A\u5316\u3055\u308C\u305F\u5B9F\u969B\u306E qdrant \u30D0\u30C3\u30AF\u30A8\u30F3\u30C9\u304C\u5FC5\u8981\u3067\u3059\u3002\u4E00\u6642\u30E1\u30E2\u30EA\u30FC\u3078\u306E\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u306F\u958B\u767A\u74B0\u5883\u307E\u305F\u306F\u660E\u793A\u7684\u306A E2E \u306B\u9650\u3089\u308C\u307E\u3059\u3002",
380
+ ai_memoryBackendLifecycleUnsupported: "Mem0 pgvector \u306F\u975E\u5BFE\u5FDC\u3067\u3059\u3002SDK \u304C PostgreSQL \u63A5\u7D9A\u3092\u5185\u90E8\u3067\u4FDD\u6301\u3057\u3001\u516C\u958B\u306E close API \u3092\u63D0\u4F9B\u3057\u3066\u3044\u307E\u305B\u3093\u3002Mem0 Qdrant\u3001\u307E\u305F\u306F pgvector \u3092\u4F7F\u3046 native \u30E1\u30E2\u30EA\u30FC\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
381
+ ai_memoryBackendConnectionRequired: "Mem0 \u30D0\u30C3\u30AF\u30A8\u30F3\u30C9 '{backend}' \u3092\u6C38\u7D9A\u30D0\u30C3\u30AF\u30A8\u30F3\u30C9\u3068\u3057\u3066\u6271\u3046\u306B\u306F\u3001\u5B8C\u5168\u306A\u63A5\u7D9A\u8A2D\u5B9A\u304C\u5FC5\u8981\u3067\u3059\u3002",
382
+ ai_memoryBackendSdkIncompatible: "Mem0 Qdrant \u306B\u306F\u516C\u958B\u306E search \u30E1\u30BD\u30C3\u30C9\u3092\u6301\u3064 @qdrant/js-client-rest 1.18.0 \u304C\u5FC5\u8981\u3067\u3059\u3002\u8D77\u52D5\u524D\u306B\u691C\u8A3C\u6E08\u307F\u306E peer \u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
383
+ ai_memoryListIncomplete: "Mem0 \u306F\u5BFE\u8C61\u5019\u88DC\u304C {limit} \u4EF6\u3092\u8D85\u3048\u308B\u5834\u5408\u3001\u5B8C\u5168\u306A\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3002\u4E00\u89A7\u53D6\u5F97\u3068\u6761\u4EF6\u4ED8\u304D\u524A\u9664\u3092\u62D2\u5426\u3057\u307E\u3057\u305F\u3002\u90E8\u5206\u7684\u306A\u7D50\u679C\u306E\u8FD4\u5374\u3084\u524A\u9664\u306F\u884C\u3063\u3066\u3044\u307E\u305B\u3093\u3002",
384
+ ai_memoryClearRequiresFilter: "clear()\u306B\u306F\u5C11\u306A\u304F\u3068\u30821\u3064\u306E\u30D5\u30A3\u30EB\u30BF\u30FC\uFF08objectId / types / scope\uFF09\u304C\u5FC5\u8981\u3067\u3059\u3002\u3059\u3079\u3066\u306E\u30E1\u30E2\u30EA\u30FC\u3092\u6D88\u53BB\u3059\u308B\u306B\u306Fai.memory.admin.clearAll({ confirm: true })\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044",
385
+ ai_memoryClearAllUnconfirmed: "admin.clearAll()\u306B\u306F\u660E\u793A\u7684\u306A\u78BA\u8A8D\u304C\u5FC5\u8981\u3067\u3059: { confirm: true }\u3092\u6E21\u3057\u3066\u304F\u3060\u3055\u3044",
386
+ ai_memoryEnrichFailed: "\u30E1\u30E2\u30EA\u30FC\u306E\u62E1\u5145\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
387
+ ai_memoryPromoteFailed: "\u30E1\u30E2\u30EA\u30FC\u306E\u6607\u683C\uFF08\u9577\u671F\u8A18\u61B6\u3078\u306E\u7D71\u5408\uFF09\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
388
+ ai_personaNotFound: "\u30DA\u30EB\u30BD\u30CA\u300C{id}\u300D\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
389
+ ai_personaSaveFailed: "\u30DA\u30EB\u30BD\u30CA\u306E\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
390
+ ai_contextCompressFailed: "\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u306E\u5727\u7E2E\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
391
+ ai_contextBudgetExceeded: "\u4FDD\u8B77\u3055\u308C\u305F\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u306F{tokens}\u30C8\u30FC\u30AF\u30F3\u3092\u4F7F\u7528\u3057\u3066\u304A\u308A\u3001{budget}\u30C8\u30FC\u30AF\u30F3\u306E\u5727\u7E2E\u4E88\u7B97\u306B\u53CE\u307E\u308A\u307E\u305B\u3093\u3002",
392
+ ai_contextSummarizeFailed: "\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u306E\u8981\u7D04\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
393
+ ai_contextTokenEstimateFailed: "\u30C8\u30FC\u30AF\u30F3\u6570\u306E\u63A8\u5B9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
394
+ ai_turnNotFound: "\u4F1A\u8A71\u30BF\u30FC\u30F3\u300C{turnId}\u300D\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
395
+ ai_turnInvalidState: "\u4F1A\u8A71\u30BF\u30FC\u30F3 '{turnId}' \u306F\u6709\u52B9\u671F\u9650\u304C\u5207\u308C\u305F\u304B\u3001\u7570\u306A\u308B\u5185\u5BB9\u3067\u78BA\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059",
396
+ ai_contextScopeRequired: "\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u306B\u306F\u7A7A\u3067\u306A\u3044 objectId \u3068 sessionId \u304C\u5FC5\u8981\u3067\u3059",
397
+ ai_contextBusy: "\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u30DE\u30CD\u30FC\u30B8\u30E3\u30FC\u306F\u4F7F\u7528\u4E2D\u3067\u3059\u3002\u65E2\u306B\u751F\u6210\u304C\u5B9F\u884C\u3055\u308C\u3066\u3044\u307E\u3059\uFF08concurrency='reject'\uFF09",
398
+ ai_storeFailed: "\u30B9\u30C8\u30A2\u64CD\u4F5C\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
399
+ ai_storeNotAvailable: "\u30B9\u30C8\u30A2\u30D0\u30C3\u30AF\u30A8\u30F3\u30C9\u3092\u5229\u7528\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u30E1\u30E2\u30EA\u30FC\u30E2\u30FC\u30C9\u306B\u5207\u308A\u66FF\u3048\u307E\u3057\u305F",
400
+ ai_sessionNotFound: "\u30BB\u30C3\u30B7\u30E7\u30F3\u300C{id}\u300D\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
401
+ ai_sessionFailed: "\u30BB\u30C3\u30B7\u30E7\u30F3\u64CD\u4F5C\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
402
+ ai_rerankApiFailed: "\u518D\u30E9\u30F3\u30AD\u30F3\u30B0API\u306E\u547C\u3073\u51FA\u3057\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
403
+ ai_rerankInvalidRequest: "\u518D\u30E9\u30F3\u30AD\u30F3\u30B0\u306E\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u7121\u52B9\u3067\u3059: {reason}",
404
+ ai_fileParseFailed: "\u30D5\u30A1\u30A4\u30EB\u306E\u89E3\u6790\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
405
+ ai_fileUnsupportedFormat: "\u672A\u5BFE\u5FDC\u306E\u30D5\u30A1\u30A4\u30EB\u5F62\u5F0F\u3067\u3059: {mimeType}",
406
+ ai_fileOcrFailed: "OCR\u8A8D\u8B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
407
+ ai_fileInvalidContent: "\u30D5\u30A1\u30A4\u30EB\u306E\u5185\u5BB9\u304C\u7121\u52B9\u3067\u3059: {reason}",
408
+ ai_configMissingApiKey: "\u30B7\u30CA\u30EA\u30AA\u300C{scenario}\u300D\u306B\u306FAPI\u30AD\u30FC\u304C\u5FC5\u8981\u3067\u3059",
409
+ ai_audioNotInitialized: "\u97F3\u58F0\u30B5\u30FC\u30D3\u30B9\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u5148\u306Bai.init()\u3092\u547C\u3073\u51FA\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
410
+ ai_audioInvalidRequest: "\u97F3\u58F0\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u7121\u52B9\u3067\u3059: {reason}",
411
+ ai_audioModelNotFound: "\u97F3\u58F0\u30E2\u30C7\u30EB\u300C{model}\u300D\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002ai.init()\u306Eaudio.models\u306B\u767B\u9332\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
412
+ ai_audioMissingApiKey: "\u97F3\u58F0\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u300C{provider}\u300D\u306B\u8A8D\u8A3C\u60C5\u5831\uFF08API\u30AD\u30FC\u307E\u305F\u306FApp/Access Key\uFF09\u304C\u3042\u308A\u307E\u305B\u3093\u3002",
413
+ ai_audioMissingBaseUrl: "\u97F3\u58F0\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u300C{provider}\u300D\u306B\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30E2\u30C7\u30EB\u8A2D\u5B9A\u306EbaseUrl\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
414
+ ai_audioUnsupportedInput: "\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u300C{provider}\u300D\u306F\u3053\u306E\u5165\u529B\u30E2\u30FC\u30C9\u306B\u5BFE\u5FDC\u3057\u3066\u3044\u307E\u305B\u3093: {reason}",
415
+ ai_audioUpstreamError: "\u4E0A\u6D41\u97F3\u58F0\u30B5\u30FC\u30D3\u30B9\u306E\u30A8\u30E9\u30FC: {error}",
416
+ ai_audioProtocolError: "\u97F3\u58F0\u30D7\u30ED\u30C8\u30B3\u30EB\u30A8\u30E9\u30FC: {error}",
417
+ ai_audioConnectionFailed: "\u97F3\u58F0\u63A5\u7D9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
418
+ ai_audioTimeout: "\u97F3\u58F0\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F",
419
+ ai_audioInputTooLarge: "\u5165\u529B\u97F3\u58F0\u304C\u30B5\u30A4\u30BA\u5236\u9650\uFF08{limit}\u30D0\u30A4\u30C8\uFF09\u3092\u8D85\u3048\u3066\u3044\u307E\u3059",
420
+ ai_audioCancelled: "\u97F3\u58F0\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u307E\u3057\u305F",
421
+ ai_imageInvalidRequest: "\u753B\u50CF\u30D7\u30ED\u30F3\u30D7\u30C8\u3092\u7A7A\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093",
422
+ ai_imageInvalidSize: "\u753B\u50CF\u306E\u5E45\u3068\u9AD8\u3055\u306F\u6B63\u306E\u6574\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
423
+ ai_imageInvalidReferenceImage: "\u5404\u53C2\u7167\u753B\u50CF\u306B\u306F\u7A7A\u3067\u306A\u3044\u30D0\u30A4\u30C8\u5217\u3068\u6709\u52B9\u306A\u753B\u50CFMIME\u30BF\u30A4\u30D7\u304C\u5FC5\u8981\u3067\u3059",
424
+ ai_imageModelNotFound: "\u753B\u50CF\u30E2\u30C7\u30EB\u300C{model}\u300D\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002ai.init()\u306Eimage.models\u306B\u767B\u9332\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
425
+ ai_imageMissingApiKey: "\u753B\u50CF\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u300C{provider}\u300D\u306BAPI\u30AD\u30FC\u304C\u3042\u308A\u307E\u305B\u3093\u3002",
426
+ ai_imageUpstreamError: "\u4E0A\u6D41\u753B\u50CF\u30B5\u30FC\u30D3\u30B9\u304CHTTP {status}\u3092\u8FD4\u3057\u307E\u3057\u305F",
427
+ ai_imageAuthenticationFailed: "\u4E0A\u6D41\u753B\u50CF\u30B5\u30FC\u30D3\u30B9\u306E\u8A8D\u8A3C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08HTTP 401\uFF09\u3002API\u30AD\u30FC\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044",
428
+ ai_imagePaymentRequired: "\u4E0A\u6D41\u753B\u50CF\u30B5\u30FC\u30D3\u30B9\u306E\u8AB2\u91D1\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F\uFF08HTTP 402\uFF09\u3002\u6B8B\u9AD8\u307E\u305F\u306FAPI\u30AD\u30FC\u306E\u4E88\u7B97\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044",
429
+ ai_imageAccessDenied: "\u4E0A\u6D41\u753B\u50CF\u30B5\u30FC\u30D3\u30B9\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F\uFF08HTTP 403\uFF09\u3002API\u30AD\u30FC\u306E\u6A29\u9650\u3068\u30E2\u30C7\u30EB\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044",
430
+ ai_imageProtocolError: "\u753B\u50CF\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u304C\u7121\u52B9\u306A\u30EC\u30B9\u30DD\u30F3\u30B9\u3092\u8FD4\u3057\u307E\u3057\u305F",
431
+ ai_imageRequestFailed: "\u753B\u50CF\u751F\u6210\u30EA\u30AF\u30A8\u30B9\u30C8\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
432
+ ai_imageCancelled: "\u753B\u50CF\u751F\u6210\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u307E\u3057\u305F",
433
+ ai_imageDownloadBlocked: "\u753B\u50CF\u306E\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9 URL \u307E\u305F\u306F\u89E3\u6C7A\u3055\u308C\u305F\u30A2\u30C9\u30EC\u30B9\u306F\u8A31\u53EF\u3055\u308C\u3066\u3044\u307E\u305B\u3093",
434
+ ai_imageTooLarge: "\u753B\u50CF\u306E\u30D0\u30A4\u30C8\u6570\u307E\u305F\u306F\u679A\u6570\u304C\u8A2D\u5B9A\u3055\u308C\u305F\u4E0A\u9650\u3092\u8D85\u3048\u3066\u3044\u307E\u3059",
435
+ ai_imageTimeout: "\u753B\u50CF\u306E\u751F\u6210\u307E\u305F\u306F\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F",
436
+ ai_a2aNotConfigured: "A2A\u30B5\u30FC\u30D3\u30B9\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002ai.init()\u3067\u300Ca2a\u300D\u8A2D\u5B9A\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
437
+ ai_a2aHandleFailed: "A2A\u30EA\u30AF\u30A8\u30B9\u30C8\u306E\u51E6\u7406\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
438
+ ai_a2aRemoteCallFailed: "\u300C{url}\u300D\u3078\u306EA2A\u30EA\u30E2\u30FC\u30C8\u547C\u3073\u51FA\u3057\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
439
+ ai_a2aAuthFailed: "A2A\u8A8D\u8A3C\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {error}",
440
+ ai_a2aListMessagesFailed: "A2A \u30E1\u30C3\u30BB\u30FC\u30B8\u4E00\u89A7\u306E\u53D6\u5F97\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u518D\u8A66\u884C\u3057\u3066\u304F\u3060\u3055\u3044",
441
+ ai_a2aMessageStoreFailed: "A2A \u30E1\u30C3\u30BB\u30FC\u30B8\u306E\u6C38\u7D9A\u5316\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u30BF\u30B9\u30AF\u306E\u7D50\u679C\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044",
442
+ ai_contextMemoryTasksFailed: "\u30D0\u30C3\u30AF\u30B0\u30E9\u30A6\u30F3\u30C9\u306E\u30E1\u30E2\u30EA\u30FC\u62BD\u51FA\u30BF\u30B9\u30AF {count} \u4EF6\u304C\u5931\u6557\u3057\u3001\u4E00\u90E8\u304C\u5B8C\u4E86\u3057\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u5B9F\u969B\u306E\u5F71\u97FF\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u81EA\u52D5\u518D\u8A66\u884C\u306F\u884C\u3063\u3066\u3044\u307E\u305B\u3093",
443
+ ai_storeIndexMismatch: "AI \u30B9\u30C8\u30A2\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5B9A\u7FA9\u304C\u4E00\u81F4\u3057\u307E\u305B\u3093\u3002\u518D\u8A66\u884C\u3059\u308B\u524D\u306B\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306E\u30B9\u30AD\u30FC\u30DE\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044",
444
+ ai_sharedBackendRequired: "\u672C\u756A\u74B0\u5883\u306E AI \u306B\u306F\u5171\u6709\u72B6\u614B\u304C\u5FC5\u8981\u3067\u3059\u3002\u5171\u6709\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3068\u30D9\u30AF\u30C8\u30EB\u30B5\u30FC\u30D3\u30B9\u3092\u521D\u671F\u5316\u3059\u308B\u304B\u3001stateScope \u304C shared \u306E\u4FE1\u983C\u3067\u304D\u308B\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
445
+ ai_a2aStateUnavailable: "A2A \u306E\u5171\u6709\u72B6\u614B\u3092\u5229\u7528\u3067\u304D\u307E\u305B\u3093",
446
+ ai_a2aExecutionLost: "\u5B9F\u884C\u306E\u6240\u6709\u6A29\u304C\u5931\u308F\u308C\u307E\u3057\u305F",
447
+ ai_a2aJournalLimit: "A2A \u5B9F\u884C\u30B8\u30E3\u30FC\u30CA\u30EB\u306E\u5BB9\u91CF\u4E0A\u9650\u3092\u8D85\u3048\u3066\u3044\u307E\u3059",
448
+ ai_a2aLeaseExpired: "\u5B9F\u884C\u30EA\u30FC\u30B9\u306E\u6709\u52B9\u671F\u9650\u304C\u5207\u308C\u307E\u3057\u305F",
449
+ ai_a2aUpdateConflict: "A2A \u306E\u5171\u6709\u72B6\u614B\u3067\u540C\u6642\u66F4\u65B0\u304C\u7AF6\u5408\u3057\u307E\u3057\u305F",
450
+ ai_a2aContextUnavailable: "\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u3092\u5229\u7528\u3067\u304D\u307E\u305B\u3093",
451
+ ai_a2aRuntimeClosed: "A2A \u30E9\u30F3\u30BF\u30A4\u30E0\u306F\u7D42\u4E86\u3057\u3066\u3044\u307E\u3059",
452
+ ai_a2aInvalidMessage: "A2A \u30E1\u30C3\u30BB\u30FC\u30B8\u306E\u30B5\u30A4\u30BA\u307E\u305F\u306F\u8B58\u5225\u5B50\u304C\u7121\u52B9\u3067\u3059",
453
+ ai_a2aIdempotencyConflict: "\u540C\u3058\u51AA\u7B49\u30E1\u30C3\u30BB\u30FC\u30B8\u8B58\u5225\u5B50\u306E\u5185\u5BB9\u304C\u5909\u66F4\u3055\u308C\u3066\u3044\u307E\u3059",
454
+ ai_a2aTaskAdvanced: "\u5F8C\u7D9A\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u304C\u65E2\u306B\u3053\u306E\u30BF\u30B9\u30AF\u3092\u9032\u3081\u3066\u3044\u307E\u3059",
455
+ ai_a2aTaskNotAccepting: "\u30BF\u30B9\u30AF\u306F\u65B0\u3057\u3044\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u53D7\u3051\u4ED8\u3051\u3066\u3044\u307E\u305B\u3093",
456
+ ai_a2aReceiptLimit: "A2A \u30E1\u30C3\u30BB\u30FC\u30B8\u306E\u53D7\u9818\u8A18\u9332\u6570\u304C\u4E0A\u9650\u3092\u8D85\u3048\u3066\u3044\u307E\u3059",
457
+ ai_a2aContextMismatch: "\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u304C\u30BF\u30B9\u30AF\u3068\u4E00\u81F4\u3057\u307E\u305B\u3093",
458
+ ai_a2aReferenceLimit: "\u53C2\u7167\u30BF\u30B9\u30AF\u6570\u304C\u4E0A\u9650\u3092\u8D85\u3048\u3066\u3044\u307E\u3059",
459
+ ai_a2aEventTaskMismatch: "\u5B9F\u884C\u30A4\u30D9\u30F3\u30C8\u306E\u30BF\u30B9\u30AF\u8B58\u5225\u5B50\u304C\u4E00\u81F4\u3057\u307E\u305B\u3093",
460
+ ai_a2aExecutionNotWritable: "\u3053\u306E\u5B9F\u884C\u306B\u306F\u66F8\u304D\u8FBC\u3081\u307E\u305B\u3093",
461
+ ai_a2aOutputLimit: "A2A \u51FA\u529B\u30AD\u30E5\u30FC\u306E\u5BB9\u91CF\u4E0A\u9650\u3092\u8D85\u3048\u3066\u3044\u307E\u3059",
462
+ ai_a2aExecutionInterrupted: "A2A \u5B9F\u884C\u304C\u4E2D\u65AD\u3055\u308C\u307E\u3057\u305F\u3002\u5916\u90E8\u3078\u306E\u5F71\u97FF\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044",
463
+ ai_a2aSubscriptionAdvanced: "\u5F8C\u7D9A\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u304C\u30BF\u30B9\u30AF\u3092\u9032\u3081\u3066\u3044\u307E\u3059\u3002\u518D\u5EA6\u8CFC\u8AAD\u3057\u3066\u304F\u3060\u3055\u3044",
464
+ ai_a2aExecutorAlreadyRegistered: "A2A \u5B9F\u884C\u5668\u306F\u65E2\u306B\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u7F6E\u304D\u63DB\u3048\u308B\u524D\u306B AI \u3092\u7D42\u4E86\u3057\u3066\u304F\u3060\u3055\u3044",
465
+ ai_llmProtocolRenamed: "LLM \u306E api \u306F protocol \u306B\u5909\u66F4\u3055\u308C\u307E\u3057\u305F\u3002llm.protocol\u3001models[].protocol\u3001tempModel.protocol \u3068\u74B0\u5883\u5909\u6570 HAI_AI_LLM_PROTOCOL / HAI_AI_LLM_MODELS_<\u756A\u53F7>_PROTOCOL \u3092\u66F4\u65B0\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
466
+ ai_modelCapabilitiesInvalid: "\u30E2\u30C7\u30EB\u80FD\u529B\u304C\u7121\u52B9\u3067\u3059\u3002\u51FA\u529B\u4E0A\u9650\u306F\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u5BB9\u91CF\u4EE5\u4E0B\u306B\u3057\u3001\u63A8\u8AD6\u975E\u5BFE\u5FDC\u6642\u306F\u63A8\u8AD6\u30EC\u30D9\u30EB\u3092\u6307\u5B9A\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002",
467
+ ai_acpGitNotFound: "\u5B9F\u884C\u74B0\u5883\u306B Git \u304C\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002",
468
+ ai_acpOperationFailed: "ACP \u64CD\u4F5C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u63A5\u7D9A\u3001\u4F5C\u696D\u9818\u57DF\u3001\u5B9F\u884C\u74B0\u5883\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
469
+ ai_acpInvalid: "ACP \u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u7121\u52B9\u3067\u3059\u3002",
470
+ ai_acpNotFound: "ACP \u30EA\u30BD\u30FC\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002",
471
+ ai_acpBusy: "ACP \u30EA\u30BD\u30FC\u30B9\u306F\u4F7F\u7528\u4E2D\u3067\u3059\u3002",
472
+ ai_acpUnsupported: "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u307E\u305F\u306F\u5B9F\u884C\u74B0\u5883\u306F\u3053\u306E\u64CD\u4F5C\u306B\u5BFE\u5FDC\u3057\u3066\u3044\u307E\u305B\u3093\u3002",
473
+ ai_acpCancelled: "ACP \u64CD\u4F5C\u306F\u30AD\u30E3\u30F3\u30BB\u30EB\u3055\u308C\u307E\u3057\u305F\u3002",
474
+ ai_acpTimeout: "ACP \u64CD\u4F5C\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F\u3002",
475
+ ai_acpOutput: "ACP \u51FA\u529B\u304C\u7121\u52B9\u3001\u4E0D\u660E\u78BA\u3001\u307E\u305F\u306F\u4E0A\u9650\u3092\u8D85\u3048\u3066\u3044\u307E\u3059\u3002",
476
+ ai_acpConflict: "ACP \u72B6\u614B\u304C\u7AF6\u5408\u3057\u3066\u3044\u307E\u3059\u3002\u4F5C\u696D\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3068\u30D6\u30E9\u30F3\u30C1\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
477
+ ai_acpPartial: "\u4E00\u90E8\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\u64CD\u4F5C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u500B\u5225\u306E\u7D50\u679C\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
478
+ ai_acpClosed: "ACP \u30BB\u30C3\u30B7\u30E7\u30F3\u307E\u305F\u306F\u30E2\u30B8\u30E5\u30FC\u30EB\u306F\u7D42\u4E86\u3057\u3066\u3044\u307E\u3059\u3002",
479
+ ai_acpRuntime: "\u5B9F\u884C\u74B0\u5883\u3092\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002Podman/Docker \u307E\u305F\u306F\u5B9F\u884C\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
480
+ ai_acpModel: "\u30E2\u30C7\u30EB\u8A2D\u5B9A\u306B\u4E92\u63DB\u6027\u304C\u306A\u3044\u304B\u3001\u5FC5\u8981\u306A\u80FD\u529B\u60C5\u5831\u304C\u4E0D\u8DB3\u3057\u3066\u3044\u307E\u3059\u3002",
481
+ ai_acpCleanup: "\u5B9F\u884C\u30EA\u30BD\u30FC\u30B9\u306E\u505C\u6B62\u304C\u5B8C\u4E86\u3057\u3066\u3044\u306A\u3044\u305F\u3081\u3001\u4F5C\u696D\u9818\u57DF\u306F\u4F7F\u7528\u4E2D\u306E\u307E\u307E\u3067\u3059\u3002",
482
+ ai_resourceReadOnly: "\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB\u306E\u30EA\u30BD\u30FC\u30B9\u306F\u5909\u66F4\u3067\u304D\u307E\u305B\u3093\u3002",
483
+ ai_resourceNotFound: "\u30EA\u30BD\u30FC\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002",
484
+ ai_resourceConflict: "\u30EA\u30BD\u30FC\u30B9\u304C\u5B58\u5728\u3059\u308B\u304B\u30D0\u30FC\u30B8\u30E7\u30F3\u304C\u5909\u66F4\u3055\u308C\u3066\u3044\u307E\u3059\u3002",
485
+ ai_resourceInvalid: "\u30EA\u30BD\u30FC\u30B9\u8A2D\u5B9A\u304C\u7121\u52B9\u3067\u3059\u3002",
486
+ ai_resourceOperationFailed: "\u30EA\u30BD\u30FC\u30B9\u4E00\u89A7\u306E\u64CD\u4F5C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002"
487
+ };
488
+
489
+ // messages/zh-CN.json
490
+ var zh_CN_default = {
491
+ ai_mcpInvalidToolSchema: "MCP \u5DE5\u5177\u8F93\u5165 Schema \u65E0\u6548\uFF1A{name}",
492
+ ai_mcpInvalidToolInput: "MCP \u5DE5\u5177\u8F93\u5165\u65E0\u6548\uFF1A{name}",
493
+ ai_mcpInvalidResource: "MCP \u8D44\u6E90\u5FC5\u987B\u4E14\u53EA\u80FD\u5305\u542B\u6709\u6548 text \u6216 blob\uFF1A{uri}",
494
+ ai_mcpInvalidPrompt: "MCP \u63D0\u793A\u8BCD\u53C2\u6570\u6216\u6D88\u606F\u65E0\u6548\uFF1A{name}",
495
+ $schema: "https://inlang.com/schema/inlang-message-format",
496
+ ai_notInitialized: "AI \u670D\u52A1\u672A\u521D\u59CB\u5316\uFF0C\u8BF7\u5148\u8C03\u7528 ai.init()",
497
+ ai_initFailed: "AI \u670D\u52A1\u521D\u59CB\u5316\u5931\u8D25\uFF1A{error}",
498
+ ai_initInProgress: "AI \u670D\u52A1\u6B63\u5728\u521D\u59CB\u5316\u4E2D\uFF0C\u8BF7\u52FF\u91CD\u590D\u8C03\u7528\u3002",
499
+ ai_requestTimeout: "\u8BF7\u6C42\u8D85\u65F6",
500
+ ai_internalError: "\u5185\u90E8\u9519\u8BEF\uFF1A{error}",
501
+ ai_mcpToolNotFound: "MCP \u5DE5\u5177 '{name}' \u672A\u627E\u5230",
502
+ ai_mcpToolFailed: "MCP \u5DE5\u5177 '{name}' \u6267\u884C\u5931\u8D25\uFF1A{error}",
503
+ ai_mcpResourceNotFound: "MCP \u8D44\u6E90 '{uri}' \u672A\u627E\u5230",
504
+ ai_mcpResourceFailed: "MCP \u8D44\u6E90 '{uri}' \u8BFB\u53D6\u5931\u8D25\uFF1A{error}",
505
+ ai_mcpPromptNotFound: "MCP \u63D0\u793A\u8BCD '{name}' \u672A\u627E\u5230",
506
+ ai_mcpPromptMissingArg: "MCP \u63D0\u793A\u8BCD '{name}' \u7F3A\u5C11\u5FC5\u9700\u53C2\u6570 '{arg}'",
507
+ ai_mcpPromptFailed: "MCP \u63D0\u793A\u8BCD '{name}' \u6267\u884C\u5931\u8D25\uFF1A{error}",
508
+ ai_toolNotFound: "\u5DE5\u5177 '{name}' \u672A\u627E\u5230",
509
+ ai_toolInvalidJson: "\u5DE5\u5177\u8C03\u7528\u53C2\u6570 JSON \u683C\u5F0F\u65E0\u6548",
510
+ ai_toolTimeout: "\u5DE5\u5177 '{name}' \u5728 {ms}ms \u540E\u8D85\u65F6\u6216\u88AB\u53D6\u6D88",
511
+ ai_toolAlreadyRegistered: "\u5DE5\u5177 '{name}' \u5DF2\u6CE8\u518C\uFF1B\u5982\u9700\u66FF\u6362\u8BF7\u663E\u5F0F\u8C03\u7528 replace()",
512
+ ai_toolForbidden: "\u5DE5\u5177 '{name}' \u672A\u83B7\u6267\u884C\u6388\u6743",
513
+ ai_configError: "AI \u914D\u7F6E\u6821\u9A8C\u5931\u8D25\uFF1A{error}",
514
+ ai_llmRecordFailed: "\u5BF9\u8BDD\u8BB0\u5F55\u4FDD\u5B58\u5931\u8D25\uFF1A{error}",
515
+ ai_llmHistoryFailed: "\u5BF9\u8BDD\u5386\u53F2\u67E5\u8BE2\u5931\u8D25\uFF1A{error}",
516
+ ai_generateObjectFailed: "\u7ED3\u6784\u5316\u8F93\u51FA\u89E3\u6790\u5931\u8D25\uFF1A{error}",
517
+ ai_generateObjectRepair: "\u4E0A\u4E00\u6B21\u8F93\u51FA\u65E0\u6CD5\u89E3\u6790\u4E3A\u8981\u6C42\u7684\u7ED3\u6784\uFF08{error}\uFF09\u3002\u8BF7\u53EA\u8F93\u51FA\u7B26\u5408 schema \u7684 JSON\uFF0C\u4E0D\u8981\u5305\u542B\u989D\u5916\u6587\u672C\u3002",
518
+ ai_embeddingApiFailed: "Embedding API \u8C03\u7528\u5931\u8D25\uFF1A{error}",
519
+ ai_embeddingModelNotFound: "Embedding \u6A21\u578B '{model}' \u672A\u627E\u5230",
520
+ ai_embeddingInputTooLong: "Embedding \u8F93\u5165\u6587\u672C\u8D85\u8FC7\u6700\u5927\u957F\u5EA6\u9650\u5236",
521
+ ai_reasoningFailed: "\u63A8\u7406\u6267\u884C\u5931\u8D25\uFF1A{error}",
522
+ ai_reasoningMaxRounds: "\u63A8\u7406\u8F6E\u6B21\u5DF2\u8FBE\u4E0A\u9650\uFF08{rounds} \u8F6E\uFF09",
523
+ ai_reasoningStrategyNotFound: "\u63A8\u7406\u7B56\u7565 '{strategy}' \u4E0D\u5B58\u5728",
524
+ ai_retrievalFailed: "\u68C0\u7D22\u6267\u884C\u5931\u8D25\uFF1A{error}",
525
+ ai_retrievalSourceNotFound: "\u68C0\u7D22\u6E90 '{source}' \u672A\u914D\u7F6E",
526
+ ai_ragFailed: "RAG \u6267\u884C\u5931\u8D25\uFF1A{error}",
527
+ ai_ragContextBuildFailed: "RAG \u4E0A\u4E0B\u6587\u6784\u5EFA\u5931\u8D25\uFF1A{error}",
528
+ ai_knowledgeSetupFailed: "\u77E5\u8BC6\u5E93\u521D\u59CB\u5316\u5931\u8D25\uFF1A{error}",
529
+ ai_knowledgeIngestFailed: "\u77E5\u8BC6\u5165\u5E93\u5931\u8D25\uFF1A{error}",
530
+ ai_knowledgeRetrieveFailed: "\u77E5\u8BC6\u68C0\u7D22\u5931\u8D25\uFF1A{error}",
531
+ ai_knowledgeEntityExtractFailed: "\u5B9E\u4F53\u63D0\u53D6\u5931\u8D25\uFF1A{error}",
532
+ ai_knowledgeNotSetup: "\u77E5\u8BC6\u5E93\u672A\u521D\u59CB\u5316\uFF0C\u8BF7\u5148\u8C03\u7528 ai.knowledge.setup()",
533
+ ai_knowledgeCollectionNotFound: "\u77E5\u8BC6\u96C6\u5408 '{collection}' \u4E0D\u5B58\u5728",
534
+ ai_memoryExtractFailed: "\u8BB0\u5FC6\u63D0\u53D6\u5931\u8D25\uFF1A{error}",
535
+ ai_memoryStoreFailed: "\u8BB0\u5FC6\u5B58\u50A8\u5931\u8D25\uFF1A{error}",
536
+ ai_memoryRecallFailed: "\u8BB0\u5FC6\u53EC\u56DE\u5931\u8D25\uFF1A{error}",
537
+ ai_memoryNotFound: "\u8BB0\u5FC6\u6761\u76EE '{id}' \u4E0D\u5B58\u5728",
538
+ ai_memoryEphemeralFallbackDenied: "\u8BB0\u5FC6 provider 'mem0' \u65E0\u6CD5\u5C06\u5411\u91CF\u540E\u7AEF '{backend}' \u6620\u5C04\u4E3A\u6301\u4E45\u5316\u5B58\u50A8\u3002\u8BF7\u6539\u7528 qdrant\uFF1B\u663E\u5F0F\u4E34\u65F6\u56DE\u9000\u4EC5\u9650\u5F00\u53D1\u6216 E2E\u3002",
539
+ ai_memorySharedBackendRequired: "\u751F\u4EA7 Mem0 \u8BB0\u5FC6\u5FC5\u987B\u8FDE\u63A5\u5B9E\u9645\u6301\u4E45\u5316\u7684 qdrant \u540E\u7AEF\uFF1B\u4E34\u65F6\u5185\u5B58\u56DE\u9000\u4EC5\u9650\u5F00\u53D1\u6216\u660E\u786E\u7684 E2E \u73AF\u5883\u3002",
540
+ ai_memoryBackendLifecycleUnsupported: "\u4E0D\u652F\u6301 Mem0 pgvector\uFF1ASDK \u79C1\u6709\u6301\u6709 PostgreSQL \u8FDE\u63A5\u4E14\u6CA1\u6709\u516C\u5F00\u5173\u95ED API\u3002\u8BF7\u6539\u7528 Mem0 Qdrant \u6216 native \u8BB0\u5FC6\u642D\u914D pgvector\u3002",
541
+ ai_memoryBackendConnectionRequired: "Mem0 \u540E\u7AEF '{backend}' \u5FC5\u987B\u63D0\u4F9B\u5B8C\u6574\u8FDE\u63A5\u914D\u7F6E\uFF0C\u624D\u80FD\u89C6\u4E3A\u6301\u4E45\u5316\u540E\u7AEF\u3002",
542
+ ai_memoryBackendSdkIncompatible: "Mem0 Qdrant \u9700\u8981\u63D0\u4F9B\u516C\u5F00 search \u65B9\u6CD5\u7684 @qdrant/js-client-rest 1.18.0\uFF0C\u8BF7\u5B89\u88C5\u53D7\u6D4B peer \u7248\u672C\u540E\u542F\u52A8\u3002",
543
+ ai_memoryListIncomplete: "Mem0 \u65E0\u6CD5\u5B8C\u6574\u5217\u51FA\u8D85\u8FC7 {limit} \u6761\u7684\u4E3B\u4F53\u5019\u9009\uFF0C\u5DF2\u62D2\u7EDD\u5217\u8868\u548C\u6309\u6761\u4EF6\u5220\u9664\uFF0C\u4E0D\u4F1A\u8FD4\u56DE\u90E8\u5206\u7ED3\u679C\u6216\u6267\u884C\u90E8\u5206\u5220\u9664\u3002",
544
+ ai_memoryClearRequiresFilter: "clear() \u81F3\u5C11\u9700\u4F20\u5165\u4E00\u4E2A\u8FC7\u6EE4\u6761\u4EF6\uFF08objectId / types / scope\uFF09\uFF1B\u8981\u6E05\u7A7A\u5168\u90E8\u8BB0\u5FC6\u8BF7\u4F7F\u7528 ai.memory.admin.clearAll({ confirm: true })",
545
+ ai_memoryClearAllUnconfirmed: "admin.clearAll() \u9700\u8981\u663E\u5F0F\u786E\u8BA4\uFF1A\u8BF7\u4F20\u5165 { confirm: true }",
546
+ ai_memoryEnrichFailed: "\u8BB0\u5FC6\u6CE8\u5165\u5931\u8D25\uFF1A{error}",
547
+ ai_memoryPromoteFailed: "\u8BB0\u5FC6\u56FA\u5316\uFF08\u957F\u671F\u5316\uFF09\u5931\u8D25\uFF1A{error}",
548
+ ai_personaNotFound: "\u89D2\u8272 '{id}' \u4E0D\u5B58\u5728",
549
+ ai_personaSaveFailed: "\u89D2\u8272\u4FDD\u5B58\u5931\u8D25\uFF1A{error}",
550
+ ai_contextCompressFailed: "\u4E0A\u4E0B\u6587\u538B\u7F29\u5931\u8D25\uFF1A{error}",
551
+ ai_contextBudgetExceeded: "\u53D7\u4FDD\u62A4\u4E0A\u4E0B\u6587\u5360\u7528 {tokens} \u4E2A Token\uFF0C\u65E0\u6CD5\u538B\u7F29\u5230 {budget} Token \u7684\u9884\u7B97\u5185\u3002",
552
+ ai_contextSummarizeFailed: "\u4E0A\u4E0B\u6587\u603B\u7ED3\u5931\u8D25\uFF1A{error}",
553
+ ai_contextTokenEstimateFailed: "Token \u4F30\u7B97\u5931\u8D25\uFF1A{error}",
554
+ ai_turnNotFound: "\u5BF9\u8BDD\u8F6E\u6B21 '{turnId}' \u4E0D\u5B58\u5728",
555
+ ai_turnInvalidState: "\u5BF9\u8BDD\u8F6E\u6B21 '{turnId}' \u5DF2\u5931\u6548\u6216\u5DF2\u6309\u5176\u4ED6\u5185\u5BB9\u63D0\u4EA4",
556
+ ai_contextScopeRequired: "\u4E0A\u4E0B\u6587\u5FC5\u987B\u914D\u7F6E\u975E\u7A7A\u7684 objectId \u548C sessionId",
557
+ ai_contextBusy: "\u4E0A\u4E0B\u6587\u7BA1\u7406\u5668\u6B63\u5FD9\uFF1A\u5DF2\u6709\u4E00\u4E2A\u751F\u6210\u6B63\u5728\u8FDB\u884C\uFF08concurrency='reject'\uFF09",
558
+ ai_storeFailed: "\u5B58\u50A8\u64CD\u4F5C\u5931\u8D25\uFF1A{error}",
559
+ ai_storeNotAvailable: "\u5B58\u50A8\u540E\u7AEF\u4E0D\u53EF\u7528\uFF0C\u5DF2\u964D\u7EA7\u4E3A\u5185\u5B58\u6A21\u5F0F",
560
+ ai_sessionNotFound: "\u4F1A\u8BDD '{id}' \u4E0D\u5B58\u5728",
561
+ ai_sessionFailed: "\u4F1A\u8BDD\u64CD\u4F5C\u5931\u8D25\uFF1A{error}",
562
+ ai_rerankApiFailed: "Rerank API \u8C03\u7528\u5931\u8D25\uFF1A{error}",
563
+ ai_rerankInvalidRequest: "Rerank \u8BF7\u6C42\u53C2\u6570\u65E0\u6548\uFF1A{reason}",
564
+ ai_fileParseFailed: "\u6587\u4EF6\u89E3\u6790\u5931\u8D25\uFF1A{error}",
565
+ ai_fileUnsupportedFormat: "\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u683C\u5F0F\uFF1A{mimeType}",
566
+ ai_fileOcrFailed: "OCR \u8BC6\u522B\u5931\u8D25\uFF1A{error}",
567
+ ai_fileInvalidContent: "\u6587\u4EF6\u5185\u5BB9\u65E0\u6548\uFF1A{reason}",
568
+ ai_configMissingApiKey: "\u573A\u666F '{scenario}' \u9700\u8981\u63D0\u4F9B API Key",
569
+ ai_audioNotInitialized: "Audio \u670D\u52A1\u672A\u521D\u59CB\u5316\uFF0C\u8BF7\u5148\u8C03\u7528 ai.init()",
570
+ ai_audioInvalidRequest: "\u8BED\u97F3\u8BF7\u6C42\u53C2\u6570\u65E0\u6548\uFF1A{reason}",
571
+ ai_audioModelNotFound: "\u8BED\u97F3\u6A21\u578B '{model}' \u672A\u627E\u5230\uFF0C\u8BF7\u5728 ai.init() \u7684 audio.models \u4E2D\u6CE8\u518C",
572
+ ai_audioMissingApiKey: "\u8BED\u97F3\u5E73\u53F0 '{provider}' \u7F3A\u5C11\u51ED\u636E\uFF08API Key \u6216 App/Access Key\uFF09",
573
+ ai_audioMissingBaseUrl: "\u8BED\u97F3\u5E73\u53F0 '{provider}' \u7F3A\u5C11\u7AEF\u70B9\u5730\u5740\uFF0C\u8BF7\u5728\u6A21\u578B\u6761\u76EE\u4E2D\u914D\u7F6E baseUrl",
574
+ ai_audioUnsupportedInput: "\u5E73\u53F0 '{provider}' \u4E0D\u652F\u6301\u6B64\u8F93\u5165\u65B9\u5F0F\uFF1A{reason}",
575
+ ai_audioUpstreamError: "\u8BED\u97F3\u4E0A\u6E38\u670D\u52A1\u9519\u8BEF\uFF1A{error}",
576
+ ai_audioProtocolError: "\u8BED\u97F3\u534F\u8BAE\u9519\u8BEF\uFF1A{error}",
577
+ ai_audioConnectionFailed: "\u8BED\u97F3\u8FDE\u63A5\u5931\u8D25\uFF1A{error}",
578
+ ai_audioTimeout: "\u8BED\u97F3\u8BF7\u6C42\u8D85\u65F6",
579
+ ai_audioInputTooLarge: "\u8F93\u5165\u97F3\u9891\u8D85\u8FC7\u5927\u5C0F\u4E0A\u9650\uFF08{limit} \u5B57\u8282\uFF09",
580
+ ai_audioCancelled: "\u8BED\u97F3\u8BF7\u6C42\u5DF2\u53D6\u6D88",
581
+ ai_imageInvalidRequest: "\u6587\u751F\u56FE\u63D0\u793A\u8BCD\u4E0D\u80FD\u4E3A\u7A7A",
582
+ ai_imageInvalidSize: "\u56FE\u7247\u5BBD\u9AD8\u5FC5\u987B\u4E3A\u6B63\u6574\u6570",
583
+ ai_imageInvalidReferenceImage: "\u53C2\u8003\u56FE\u5FC5\u987B\u5305\u542B\u975E\u7A7A\u56FE\u7247\u5B57\u8282\u548C\u6709\u6548\u7684\u56FE\u7247 MIME \u7C7B\u578B",
584
+ ai_imageModelNotFound: "\u6587\u751F\u56FE\u6A21\u578B '{model}' \u672A\u627E\u5230\uFF0C\u8BF7\u5728 ai.init() \u7684 image.models \u4E2D\u6CE8\u518C",
585
+ ai_imageMissingApiKey: "\u6587\u751F\u56FE\u5E73\u53F0 '{provider}' \u7F3A\u5C11 API Key",
586
+ ai_imageUpstreamError: "\u6587\u751F\u56FE\u4E0A\u6E38\u670D\u52A1\u8FD4\u56DE HTTP {status}",
587
+ ai_imageAuthenticationFailed: "\u6587\u751F\u56FE\u4E0A\u6E38\u670D\u52A1\u8BA4\u8BC1\u5931\u8D25\uFF08HTTP 401\uFF09\uFF0C\u8BF7\u68C0\u67E5 API Key",
588
+ ai_imagePaymentRequired: "\u6587\u751F\u56FE\u4E0A\u6E38\u670D\u52A1\u62D2\u7EDD\u8BA1\u8D39\uFF08HTTP 402\uFF09\uFF0C\u8BF7\u68C0\u67E5\u8D26\u6237\u4F59\u989D\u6216 API Key \u9884\u7B97",
589
+ ai_imageAccessDenied: "\u6587\u751F\u56FE\u4E0A\u6E38\u670D\u52A1\u62D2\u7EDD\u8BBF\u95EE\uFF08HTTP 403\uFF09\uFF0C\u8BF7\u68C0\u67E5 API Key \u6743\u9650\u53CA\u6A21\u578B\u8BBF\u95EE\u6743\u9650",
590
+ ai_imageProtocolError: "\u6587\u751F\u56FE\u5E73\u53F0\u8FD4\u56DE\u4E86\u65E0\u6548\u54CD\u5E94",
591
+ ai_imageRequestFailed: "\u6587\u751F\u56FE\u8BF7\u6C42\u5931\u8D25",
592
+ ai_imageCancelled: "\u6587\u751F\u56FE\u8BF7\u6C42\u5DF2\u53D6\u6D88",
593
+ ai_imageDownloadBlocked: "\u56FE\u7247\u4E0B\u8F7D URL \u6216\u89E3\u6790\u5730\u5740\u4E0D\u5728\u5141\u8BB8\u8303\u56F4\u5185",
594
+ ai_imageTooLarge: "\u56FE\u7247\u5B57\u8282\u6216\u56FE\u7247\u6570\u91CF\u8D85\u8FC7\u914D\u7F6E\u4E0A\u9650",
595
+ ai_imageTimeout: "\u56FE\u7247\u751F\u6210\u6216\u4E0B\u8F7D\u8D85\u65F6",
596
+ ai_a2aNotConfigured: "A2A \u670D\u52A1\u672A\u914D\u7F6E\uFF0C\u8BF7\u5728 ai.init() \u4E2D\u63D0\u4F9B 'a2a' \u914D\u7F6E\u3002",
597
+ ai_a2aHandleFailed: "A2A \u8BF7\u6C42\u5904\u7406\u5931\u8D25\uFF1A{error}",
598
+ ai_a2aRemoteCallFailed: "A2A \u8FDC\u7AEF\u8C03\u7528 '{url}' \u5931\u8D25\uFF1A{error}",
599
+ ai_a2aAuthFailed: "A2A \u8BA4\u8BC1\u5931\u8D25\uFF1A{error}",
600
+ ai_a2aListMessagesFailed: "A2A \u6D88\u606F\u67E5\u8BE2\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
601
+ ai_a2aMessageStoreFailed: "A2A \u6D88\u606F\u6301\u4E45\u5316\u5931\u8D25\uFF0C\u4EFB\u52A1\u7ED3\u679C\u9700\u8981\u6838\u5BF9",
602
+ ai_contextMemoryTasksFailed: "{count} \u4E2A\u540E\u53F0\u8BB0\u5FC6\u63D0\u53D6\u4EFB\u52A1\u5931\u8D25\uFF0C\u53EF\u80FD\u5DF2\u90E8\u5206\u6267\u884C\uFF1B\u8BF7\u6838\u5BF9\u5B9E\u9645\u72B6\u6001\uFF0C\u672A\u81EA\u52A8\u91CD\u8BD5",
603
+ ai_storeIndexMismatch: "AI \u5B58\u50A8\u7D22\u5F15\u7ED3\u6784\u4E0D\u5339\u914D\uFF0C\u8BF7\u6838\u5BF9\u6570\u636E\u5E93\u7ED3\u6784\u540E\u91CD\u8BD5",
604
+ ai_sharedBackendRequired: "\u751F\u4EA7AI\u5FC5\u987B\u4F7F\u7528\u5171\u4EAB\u72B6\u6001Provider\uFF1B\u8BF7\u5148\u521D\u59CB\u5316\u5171\u4EAB\u6570\u636E\u5E93\u548C\u5411\u91CF\u670D\u52A1\uFF0C\u6216\u6CE8\u5165\u58F0\u660EstateScope\u4E3Ashared\u7684\u53D7\u4FE1Provider\u3002",
605
+ ai_a2aStateUnavailable: "A2A \u5171\u4EAB\u72B6\u6001\u4E0D\u53EF\u7528",
606
+ ai_a2aExecutionLost: "\u6267\u884C\u6240\u6709\u6743\u5DF2\u5931\u6548",
607
+ ai_a2aJournalLimit: "A2A \u6267\u884C\u8BB0\u5F55\u5BB9\u91CF\u8D85\u9650",
608
+ ai_a2aLeaseExpired: "\u6267\u884C\u79DF\u7EA6\u5DF2\u8FC7\u671F",
609
+ ai_a2aUpdateConflict: "A2A \u5171\u4EAB\u72B6\u6001\u5E76\u53D1\u66F4\u65B0\u51B2\u7A81\uFF0C\u8BF7\u91CD\u8BD5",
610
+ ai_a2aContextUnavailable: "\u4E0A\u4E0B\u6587\u4E0D\u53EF\u7528",
611
+ ai_a2aRuntimeClosed: "A2A \u8FD0\u884C\u65F6\u5DF2\u5173\u95ED",
612
+ ai_a2aInvalidMessage: "A2A \u6D88\u606F\u5927\u5C0F\u3001\u8EAB\u4EFD\u6216\u6807\u8BC6\u4E0D\u7B26\u5408\u8981\u6C42",
613
+ ai_a2aIdempotencyConflict: "\u540C\u4E00\u5E42\u7B49\u6D88\u606F\u6807\u8BC6\u7684\u5185\u5BB9\u5DF2\u6539\u53D8",
614
+ ai_a2aTaskAdvanced: "\u4EFB\u52A1\u5DF2\u7531\u540E\u7EED\u6D88\u606F\u63A8\u8FDB\uFF0C\u8BF7\u67E5\u8BE2\u5F53\u524D\u72B6\u6001",
615
+ ai_a2aTaskNotAccepting: "\u4EFB\u52A1\u6B63\u5728\u6267\u884C\u3001\u53D6\u6D88\u6216\u5DF2\u7ED3\u675F\uFF0C\u4E0D\u80FD\u63A5\u53D7\u65B0\u6D88\u606F",
616
+ ai_a2aReceiptLimit: "A2A \u6D88\u606F\u56DE\u6267\u6570\u91CF\u8D85\u9650",
617
+ ai_a2aContextMismatch: "\u4E0A\u4E0B\u6587\u4E0E\u4EFB\u52A1\u4E0D\u5339\u914D",
618
+ ai_a2aReferenceLimit: "\u5F15\u7528\u4EFB\u52A1\u6570\u91CF\u8D85\u9650",
619
+ ai_a2aEventTaskMismatch: "\u6267\u884C\u4E8B\u4EF6\u4E0E\u4EFB\u52A1\u6807\u8BC6\u4E0D\u5339\u914D",
620
+ ai_a2aExecutionNotWritable: "\u5F53\u524D\u6267\u884C\u5DF2\u4E0D\u80FD\u5199\u5165",
621
+ ai_a2aOutputLimit: "A2A \u8F93\u51FA\u961F\u5217\u5BB9\u91CF\u8D85\u9650",
622
+ ai_a2aExecutionInterrupted: "A2A \u6267\u884C\u5DF2\u4E2D\u65AD\uFF0C\u987B\u6838\u5BF9\u5916\u90E8\u6548\u679C",
623
+ ai_a2aSubscriptionAdvanced: "\u540E\u7EED\u6D88\u606F\u5DF2\u63A8\u8FDB\u4EFB\u52A1\uFF0C\u8BF7\u91CD\u65B0\u8BA2\u9605",
624
+ ai_a2aExecutorAlreadyRegistered: "A2A \u6267\u884C\u5668\u5DF2\u6CE8\u518C\uFF0C\u66F4\u6362\u524D\u8BF7\u5173\u95ED AI",
625
+ ai_llmProtocolRenamed: "LLM \u7684 api \u5DF2\u6539\u540D\u4E3A protocol\u3002\u8BF7\u66F4\u65B0 llm.protocol\u3001models[].protocol\u3001tempModel.protocol \u53CA HAI_AI_LLM_PROTOCOL / HAI_AI_LLM_MODELS_<\u7D22\u5F15>_PROTOCOL \u73AF\u5883\u53D8\u91CF\u3002",
626
+ ai_modelCapabilitiesInvalid: "\u6A21\u578B\u80FD\u529B\u914D\u7F6E\u65E0\u6548\uFF1A\u8F93\u51FA\u5BB9\u91CF\u4E0D\u80FD\u8D85\u8FC7\u4E0A\u4E0B\u6587\u5BB9\u91CF\uFF0C\u4E0D\u652F\u6301\u63A8\u7406\u65F6\u4E0D\u80FD\u58F0\u660E\u63A8\u7406\u7EA7\u522B\u3002",
627
+ ai_acpGitNotFound: "\u5F53\u524D\u6267\u884C\u73AF\u5883\u672A\u5B89\u88C5 Git\uFF0C\u65E0\u6CD5\u6267\u884C\u5DE5\u4F5C\u533A\u64CD\u4F5C\u3002",
628
+ ai_acpOperationFailed: "ACP \u64CD\u4F5C\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u8FDE\u63A5\u3001\u5DE5\u4F5C\u533A\u72B6\u6001\u548C\u8FD0\u884C\u73AF\u5883\u3002",
629
+ ai_acpInvalid: "ACP \u8BF7\u6C42\u53C2\u6570\u65E0\u6548\u3002",
630
+ ai_acpNotFound: "ACP \u8D44\u6E90\u4E0D\u5B58\u5728\u3002",
631
+ ai_acpBusy: "ACP \u8D44\u6E90\u6B63\u5728\u4F7F\u7528\u4E2D\u3002",
632
+ ai_acpUnsupported: "\u5F53\u524D\u667A\u80FD\u4F53\u6216\u6267\u884C\u73AF\u5883\u4E0D\u652F\u6301\u6B64\u64CD\u4F5C\u3002",
633
+ ai_acpCancelled: "ACP \u64CD\u4F5C\u5DF2\u53D6\u6D88\u3002",
634
+ ai_acpTimeout: "ACP \u64CD\u4F5C\u8D85\u65F6\u3002",
635
+ ai_acpOutput: "ACP \u8F93\u51FA\u65E0\u6548\u3001\u5B58\u5728\u6B67\u4E49\u6216\u8D85\u8FC7\u9650\u5236\u3002",
636
+ ai_acpConflict: "ACP \u72B6\u6001\u51B2\u7A81\uFF0C\u8BF7\u68C0\u67E5\u5DE5\u4F5C\u76EE\u5F55\u548C\u5206\u652F\u3002",
637
+ ai_acpPartial: "\u90E8\u5206\u4ED3\u5E93\u64CD\u4F5C\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u9010\u4ED3\u5E93\u7ED3\u679C\u3002",
638
+ ai_acpClosed: "ACP \u4F1A\u8BDD\u6216\u6A21\u5757\u5DF2\u5173\u95ED\u3002",
639
+ ai_acpRuntime: "\u6CA1\u6709\u53EF\u7528\u7684\u6267\u884C\u73AF\u5883\uFF0C\u8BF7\u68C0\u67E5 Podman/Docker \u6216\u672C\u673A\u7A0B\u5E8F\u3002",
640
+ ai_acpModel: "\u6A21\u578B\u914D\u7F6E\u4E0E\u667A\u80FD\u4F53\u4E0D\u517C\u5BB9\uFF0C\u6216\u7F3A\u5C11\u5FC5\u8981\u80FD\u529B\u4FE1\u606F\u3002",
641
+ ai_acpCleanup: "\u8FD0\u884C\u8D44\u6E90\u672A\u5B8C\u5168\u505C\u6B62\uFF0C\u5DE5\u4F5C\u76EE\u5F55\u4ECD\u4FDD\u6301\u5360\u7528\u3002",
642
+ ai_resourceReadOnly: "\u914D\u7F6E\u6587\u4EF6\u5B9A\u4E49\u7684\u8D44\u6E90\u4E0D\u53EF\u4FEE\u6539\u3002",
643
+ ai_resourceNotFound: "\u8D44\u6E90\u4E0D\u5B58\u5728\u3002",
644
+ ai_resourceConflict: "\u8D44\u6E90\u5DF2\u5B58\u5728\u6216\u7248\u672C\u53D1\u751F\u53D8\u5316\u3002",
645
+ ai_resourceInvalid: "\u8D44\u6E90\u914D\u7F6E\u65E0\u6548\u3002",
646
+ ai_resourceOperationFailed: "\u8D44\u6E90\u6E05\u5355\u64CD\u4F5C\u5931\u8D25\u3002"
647
+ };
648
+
649
+ // src/ai-i18n.ts
650
+ var aiM = core.i18n.createMessageGetter({
651
+ "zh-CN": zh_CN_default,
652
+ "en-US": en_US_default,
653
+ "ja-JP": ja_JP_default
654
+ });
655
+
656
+ // src/ai-config.ts
657
+ var OptionalSecretSchema = z.string().nullable().transform(
658
+ (value) => value === null || value.trim() === "" ? void 0 : value
659
+ ).optional();
660
+ var ModelScenarioSchema = z.enum(["default", "chat", "reasoning", "plan", "execute", "extraction", "summary", "embedding", "rerank", "ocr", "fast"]);
661
+ var ApiTypeSchema = z.enum(["chat", "responses", "anthropic"]);
662
+ var ModelCapabilitiesSchema = z.strictObject({
663
+ /** 可用上下文总容量(Token);未知时省略,不由输出预算推断。 */
664
+ contextWindow: z.number().int().positive().optional(),
665
+ /** 模型单次输出能力上限(Token);与默认 maxTokens 预算不同。 */
666
+ maxOutputTokens: z.number().int().positive().optional(),
667
+ /** 已确认支持的输入模态;未知时省略。 */
668
+ inputModalities: z.array(z.enum(["text", "image", "audio", "video"])).min(1).optional(),
669
+ /** 已确认支持的输出模态;仍需调用接口支持。 */
670
+ outputModalities: z.array(z.enum(["text", "image", "audio", "video"])).min(1).optional(),
671
+ /** 模型是否支持函数工具调用;未知时省略。 */
672
+ toolCalling: z.boolean().optional(),
673
+ /** 推理能力元数据,不自动启用推理请求参数。 */
674
+ reasoning: z.strictObject({
675
+ /** 是否支持推理能力。 */
676
+ supported: z.boolean(),
677
+ /** 已确认可选择的推理级别。 */
678
+ efforts: z.array(z.string().min(1)).min(1).optional()
679
+ }).refine((value) => value.supported || !value.efforts, { message: aiM("ai_modelCapabilitiesInvalid") }).optional()
680
+ }).refine((value) => !value.contextWindow || !value.maxOutputTokens || value.maxOutputTokens <= value.contextWindow, { message: aiM("ai_modelCapabilitiesInvalid") });
681
+ var ModelEntrySchema = z.strictObject({
682
+ /** 模型唯一标识(用于 ModelResolver 解析) */
683
+ id: z.string(),
684
+ /** 已确认的模型能力,缺省表示未知 */
685
+ capabilities: ModelCapabilitiesSchema.optional(),
686
+ /** 模型名称(传给 API 的实际模型名) */
687
+ model: z.string(),
688
+ /** API 协议(可选,未指定时回退全局 `protocol`,再回退 `chat`;决定走 Chat Completions / Responses / Anthropic) */
689
+ protocol: ApiTypeSchema.optional(),
690
+ /** API Key 覆盖(可选,未提供时使用全局配置) */
691
+ apiKey: OptionalSecretSchema,
692
+ /** Base URL 覆盖(可选) */
693
+ baseUrl: z.url().optional(),
694
+ /** 最大 Token 数覆盖(可选) */
695
+ maxTokens: z.number().positive().optional(),
696
+ /** 温度覆盖(可选) */
697
+ temperature: z.number().min(0).max(2).optional(),
698
+ /** 超时覆盖(可选,毫秒) */
699
+ timeout: z.number().positive().optional()
700
+ }, { error: (issue) => issue.code === "unrecognized_keys" && issue.keys.includes("api") ? aiM("ai_llmProtocolRenamed") : void 0 });
701
+ var LLMConfigSchema = z.strictObject({
702
+ /** 默认服务密钥;模型项可单独覆盖。未填写时读取 HAI_AI_LLM_APIKEY 或对应供应商密钥变量,真实值只放服务端。 */
703
+ apiKey: OptionalSecretSchema,
704
+ /** 默认模型服务地址;使用代理时填写,模型项可覆盖。未填写时按协议读取环境地址或使用供应商默认地址。 */
705
+ baseUrl: z.url().optional(),
706
+ /** 默认模型名称(默认 `'gpt-4o-mini'`) */
707
+ model: z.string().optional().default("gpt-4o-mini"),
708
+ /** 默认请求格式:chat 为 Chat Completions,responses 为 OpenAI Responses,anthropic 为 Anthropic Messages;模型项可覆盖。 */
709
+ protocol: ApiTypeSchema.optional().default("chat"),
710
+ /** 单次回答最多生成多少 Token,默认 4096;模型项可覆盖,需符合供应商限制。 */
711
+ maxTokens: z.number().positive().optional().default(4096),
712
+ /** 回答的随机程度,0–2,默认 0.7;较低通常更稳定,模型项可覆盖,部分模型不支持自定义。 */
713
+ temperature: z.number().min(0).max(2).optional().default(0.7),
714
+ /** 一次模型请求最多等待多少毫秒,默认 60000;模型项可覆盖。 */
715
+ timeout: z.number().positive().optional().default(6e4),
716
+ /** 临时模型客户端缓存存活时间(毫秒,默认 `600000` = 10 分钟;超时后临时模型客户端实例失效并重建) */
717
+ tempModelCacheTtl: z.number().positive().optional().default(6e5),
718
+ /** 多模型配置列表(各字段可选,未指定时回退到全局默认值) */
719
+ models: z.array(ModelEntrySchema).optional(),
720
+ /** 场景模型映射(场景名 → 模型 ID 或直接模型名称,各场景均可选) */
721
+ scenarios: z.object(Object.fromEntries(ModelScenarioSchema.options.map((k) => [k, z.string().optional()]))).optional()
722
+ }, { error: (issue) => issue.code === "unrecognized_keys" && issue.keys.includes("api") ? aiM("ai_llmProtocolRenamed") : void 0 });
723
+ function resolveModelEntry(llmConfig, scenario, explicit, options) {
724
+ let entry;
725
+ let modelName;
726
+ if (explicit) {
727
+ entry = llmConfig.models?.find((m) => m.id === explicit || m.model === explicit);
728
+ modelName = entry?.model ?? explicit;
729
+ } else {
730
+ const modelId = llmConfig.scenarios?.[scenario] ?? llmConfig.scenarios?.default;
731
+ if (modelId) {
732
+ entry = llmConfig.models?.find((m) => m.id === modelId);
733
+ modelName = entry?.model ?? modelId;
734
+ } else {
735
+ modelName = llmConfig.model ?? "gpt-4o-mini";
736
+ }
737
+ }
738
+ const resolved = {
739
+ model: modelName,
740
+ capabilities: entry?.capabilities,
741
+ protocol: entry?.protocol ?? llmConfig.protocol ?? "chat",
742
+ apiKey: entry?.apiKey ?? llmConfig.apiKey ?? (process.env.HAI_AI_LLM_APIKEY?.trim() || process.env.OPENAI_API_KEY),
743
+ baseUrl: entry?.baseUrl ?? llmConfig.baseUrl ?? (process.env.HAI_AI_LLM_BASEURL?.trim() || process.env.OPENAI_BASE_URL) ?? "https://api.openai.com/v1",
744
+ maxTokens: entry?.maxTokens ?? llmConfig.maxTokens ?? 4096,
745
+ temperature: entry?.temperature ?? llmConfig.temperature ?? 0.7,
746
+ timeout: entry?.timeout ?? llmConfig.timeout ?? 6e4
747
+ };
748
+ if (!resolved.apiKey) {
749
+ return err(HaiAIError.CONFIGURATION_ERROR, options?.missingApiKeyMessage ?? aiM("ai_configMissingApiKey", { params: { scenario } }));
750
+ }
751
+ return ok(resolved);
752
+ }
753
+ function resolveModelApi(llmConfig, explicitModel, tempApi) {
754
+ if (tempApi)
755
+ return tempApi;
756
+ const entry = explicitModel ? llmConfig.models?.find((m) => m.id === explicitModel || m.model === explicitModel) : void 0;
757
+ return entry?.protocol ?? llmConfig.protocol ?? "chat";
758
+ }
759
+ var MCPServerCapabilitiesSchema = z.object({
760
+ /** 是否支持工具调用(默认 `true`) */
761
+ tools: z.boolean().optional().default(true),
762
+ /** 是否支持资源访问(默认 `true`) */
763
+ resources: z.boolean().optional().default(true),
764
+ /** 是否支持提示词模板(默认 `true`) */
765
+ prompts: z.boolean().optional().default(true)
766
+ });
767
+ var MCPServerConfigSchema = z.object({
768
+ /** 服务器名称 */
769
+ name: z.string(),
770
+ /** 服务器版本(默认 `'1.0.0'`) */
771
+ version: z.string().optional().default("1.0.0"),
772
+ /** 服务器能力声明 */
773
+ capabilities: MCPServerCapabilitiesSchema.optional()
774
+ });
775
+ var MCPExternalServerSchema = z.strictObject({
776
+ /** 服务唯一标识。 */
777
+ id: z.string().min(1),
778
+ /** 传给原生 MCP 客户端的服务名。 */
779
+ name: z.string().min(1),
780
+ /** 原生 MCP 传输类型。 */
781
+ transport: z.enum(["stdio", "http", "sse"]),
782
+ /** stdio 程序路径;仅可信服务端配置。 */
783
+ command: z.string().min(1).optional(),
784
+ /** stdio 参数,不使用 shell 拼接。 */
785
+ args: z.array(z.string()).default([]),
786
+ /** HTTP/SSE 地址。 */
787
+ url: z.url().optional(),
788
+ /** stdio 变量名到宿主凭据变量名的映射。 */
789
+ environmentRefs: z.record(z.string(), z.string()).default({}),
790
+ /** 认证 Header 名到宿主凭据变量名的映射。 */
791
+ headerEnv: z.record(z.string(), z.string()).default({})
792
+ }).refine((value) => value.transport === "stdio" ? Boolean(value.command) : Boolean(value.url && /^https?:/.test(value.url)));
793
+ var MCPConfigSchema = z.object({
794
+ /** 外部 MCP 服务只读清单;与数据库记录合并供受管 Agent 使用。 */
795
+ servers: z.array(MCPExternalServerSchema).optional(),
796
+ /** 服务器配置 */
797
+ server: MCPServerConfigSchema.optional()
798
+ });
799
+ var EmbeddingConfigSchema = z.object({
800
+ /** 向量维度(可选,部分模型支持指定维度) */
801
+ dimensions: z.number().int().positive().optional(),
802
+ /** 批量大小(单次请求最多处理的文本数,默认 100) */
803
+ batchSize: z.number().int().positive().default(100)
804
+ });
805
+ var KnowledgeConfigSchema = z.object({
806
+ /** 默认向量集合名(默认 'hai_ai_knowledge') */
807
+ collection: z.string().default("hai_ai_knowledge"),
808
+ /** 向量维度(默认 1536,需与 embedding 模型匹配) */
809
+ dimension: z.number().int().positive().default(1536),
810
+ /** 是否启用实体提取(默认 true) */
811
+ enableEntityExtraction: z.boolean().default(true),
812
+ /**
813
+ * 默认文本清洗选项
814
+ *
815
+ * 字段含义与 @h-ai/datapipe CleanOptionsInput 完全一致,
816
+ * 支持 removeHtml、removeUrls、normalizeWhitespace、customReplacements 等。
817
+ */
818
+ cleanOptions: CleanOptionsSchema.default(CleanOptionsSchema.parse({})),
819
+ /**
820
+ * 默认分块选项
821
+ *
822
+ * 字段含义与 @h-ai/datapipe ChunkOptionsInput 完全一致,
823
+ * 支持 mode、maxSize、overlap、separator、markdownMinLevel 等完整选项。
824
+ * word 按非空白词计量,其余按 Unicode code point;上限包含分隔符及 overlap,且 overlap < maxSize。
825
+ * AI 默认 markdown/1500/200;导入覆盖预算时仍须满足约束,分块失败不会退回整篇文档。
826
+ */
827
+ chunkOptions: ChunkOptionsSchema.default(ChunkOptionsSchema.parse({
828
+ mode: "markdown",
829
+ maxSize: 1500,
830
+ overlap: 200
831
+ })),
832
+ /** 实体查询命中的额外加权系数(默认 0.15,叠加到向量分数上) */
833
+ entityBoostWeight: z.number().min(0).max(1).default(0.15),
834
+ /** 自定义实体类型列表(不指定时使用内置默认类型) */
835
+ entityTypes: z.array(z.string()).optional(),
836
+ /** 自定义实体提取系统提示词(不指定时使用内置默认提示词) */
837
+ systemPrompt: z.string().optional()
838
+ });
839
+ var MemoryConfigSchema = z.object({
840
+ /** 记忆后端:native 使用框架原生存储与批量合并;mem0 将框架提取结果写入受支持的嵌入式 SDK 后端 */
841
+ provider: z.enum(["native", "mem0"]).default("native"),
842
+ /**
843
+ * 是否允许在配置了持久化向量后端但 mem0 无法映射时退回内存存储(默认 false)
844
+ *
845
+ * 仅影响 `provider='mem0'`:当前框架适配仅映射 qdrant;pgvector 的 SDK 连接无法公开关闭,所有环境拒绝。底层 vecdb 是
846
+ * lancedb / chroma / 未知后端时,默认 fail-fast(初始化失败),避免服务重启后记忆静默丢失;
847
+ * 仅当显式设为 true 时才在开发或明确 E2E 环境退回内存存储(数据不持久)。
848
+ * 生产始终要求实际持久化连接,不能通过此开关绕过共享状态要求。
849
+ */
850
+ allowEphemeralFallback: z.boolean().default(false),
851
+ /**
852
+ * 单个主体(objectId)的最大记忆条数(默认 1000)
853
+ *
854
+ * native 淘汰按 objectId 分区触发:某个主体写入超过此上限时,只淘汰该主体自身
855
+ * 最低优先级的条目,不会波及其他主体的记忆。
856
+ */
857
+ maxEntriesPerObject: z.number().int().positive().default(1e3),
858
+ /**
859
+ * 全局最大记忆条数(默认 100000)
860
+ *
861
+ * 跨所有主体的总量上限,作为整体保护阈值;超过时淘汰全局最低优先级条目。
862
+ */
863
+ maxEntriesGlobal: z.number().int().positive().default(1e5),
864
+ /** 自定义记忆提取 systemPrompt(可选,覆盖内置默认提示词) */
865
+ systemPrompt: z.string().optional(),
866
+ /** 时间衰减系数(默认 0.95,每次检索乘以此系数调整 recency 权重) */
867
+ recencyDecay: z.number().min(0).max(1).default(0.95),
868
+ /** 是否启用向量检索(默认 true,关闭则仅使用关键词匹配) */
869
+ embeddingEnabled: z.boolean().default(true),
870
+ /** 检索时默认返回数量(默认 10) */
871
+ defaultTopK: z.number().int().positive().default(10),
872
+ /**
873
+ * 候选池倍数(默认 5)
874
+ *
875
+ * 检索时先从向量后端取回 `topK × candidateMultiplier` 条候选,再按 scope / 重要性等
876
+ * 条件在内存中过滤,最后截取 topK。用于修正「向量后端仅返回 topK,随后被 scope 过滤
877
+ * 掉大部分、导致同一主体下特定主题/角色记忆漏召回」的问题:候选池越大,scope 命中越充分。
878
+ *
879
+ * native provider 会对全部候选评分,故此值仅影响向量预取宽度;mem0 provider 无法下推
880
+ * scope,必须依赖更大的候选池才能保证 scope 内记忆被召回。
881
+ */
882
+ candidateMultiplier: z.number().int().positive().default(5),
883
+ /** 写回 / 合并时检索相关记忆的数量(native 与 mem0 共用,默认 20) */
884
+ writebackRelatedTopK: z.number().int().positive().default(20)
885
+ });
886
+ var TokenConfigSchema = z.object({
887
+ /** Token 估算每字符系数(默认 0.25,即 4 字符 ≈ 1 token) */
888
+ tokenRatio: z.number().positive().default(0.25)
889
+ });
890
+ var SummaryConfigSchema = z.object({
891
+ /** 自定义摘要 systemPrompt(可选,覆盖内置默认提示词) */
892
+ systemPrompt: z.string().optional()
893
+ });
894
+ var CompressConfigSchema = z.object({
895
+ /** 默认压缩策略(默认 'hybrid') */
896
+ defaultStrategy: CompressionStrategySchema.default("hybrid"),
897
+ /** 默认 Token 预算(默认 0 表示取模型上限的 80%) */
898
+ defaultMaxTokens: z.number().int().min(0).default(0),
899
+ /** 默认保留最近消息数(默认 4) */
900
+ preserveLastN: z.number().int().min(0).default(4)
901
+ });
902
+ var FileConfigSchema = z.object({
903
+ /** OCR 系统提示词(可选,覆盖内置默认提示词) */
904
+ systemPrompt: z.string().optional()
905
+ });
906
+ var RetrievalSourceSchema = z.object({
907
+ /** 来源唯一标识 */
908
+ id: z.string(),
909
+ /** vecdb collection 名称 */
910
+ collection: z.string(),
911
+ /** 信源显示名 */
912
+ name: z.string().optional(),
913
+ /** 信源 URL / 路径 */
914
+ url: z.string().optional(),
915
+ /** 最大返回条数(默认 5) */
916
+ topK: z.number().int().positive().optional(),
917
+ /** 最低相似度 0~1(低于此值的结果被过滤) */
918
+ minScore: z.number().min(0).max(1).optional(),
919
+ /** 元数据过滤条件 */
920
+ filter: z.record(z.string(), z.unknown()).optional()
921
+ });
922
+ var RetrievalConfigSchema = z.object({
923
+ /** 预注册检索源列表 */
924
+ sources: z.array(RetrievalSourceSchema).optional()
925
+ });
926
+ var A2ASkillConfigSchema = z.object({
927
+ /** 技能 ID */
928
+ id: z.string(),
929
+ /** 技能名称 */
930
+ name: z.string(),
931
+ /** 技能描述 */
932
+ description: z.string().optional(),
933
+ /** 标签列表 */
934
+ tags: z.array(z.string()).optional()
935
+ });
936
+ var A2AConfigSchema = z.object({
937
+ /** 共享执行预算;最终提交同时受数据库租约与绝对执行期限约束。 */
938
+ execution: z.object({
939
+ /** 活跃执行租约毫秒数,默认30秒,范围1秒至1天。 */
940
+ leaseMs: z.number().int().min(1e3).max(864e5).default(3e4),
941
+ /** 共享事件/状态订阅轮询间隔毫秒数,默认250。 */
942
+ pollIntervalMs: z.number().int().min(10).max(5e3).default(250),
943
+ /** 单次执行绝对上限毫秒数,默认5分钟;超时标中断,不自动重放。 */
944
+ maxExecutionMs: z.number().int().min(1e3).max(864e5).default(3e5)
945
+ }).prefault({}),
946
+ /** Agent Card 配置 */
947
+ agentCard: z.object({
948
+ /** Agent 名称 */
949
+ name: z.string(),
950
+ /** Agent 描述 */
951
+ description: z.string().optional(),
952
+ /** Agent 对外 URL */
953
+ url: z.string(),
954
+ /** Agent 版本 */
955
+ version: z.string().optional(),
956
+ /** Agent 技能列表 */
957
+ skills: z.array(A2ASkillConfigSchema).optional()
958
+ }),
959
+ /** A2A 安全认证配置 */
960
+ security: z.object({
961
+ /** API Key 认证(通过 IAM apiKey.verifyApiKey 验证) */
962
+ apiKey: z.object({
963
+ /** API Key 的传递位置(默认 header) */
964
+ in: z.enum(["header", "query"]).default("header"),
965
+ /** 参数名(默认 x-api-key) */
966
+ name: z.string().default("x-api-key")
967
+ }).optional()
968
+ }).optional()
969
+ });
970
+ var AudioProviderSchema = z.enum(["openai", "mimo", "qwen", "doubao", "whisper", "indextts"]);
971
+ var AudioOperationSchema = z.enum(["transcribe", "synthesize"]);
972
+ var AudioOperationsSchema = z.array(AudioOperationSchema).min(1).refine((operations) => new Set(operations).size === operations.length, {
973
+ message: "audio model operations must be unique"
974
+ });
975
+ var AudioModelEntrySchema = z.object({
976
+ /** 模型唯一标识(用于场景解析与请求显式指定) */
977
+ id: z.string(),
978
+ /** 所属语音平台 */
979
+ provider: AudioProviderSchema,
980
+ /** 厂商模型名(传给厂商 API 的实际模型名) */
981
+ model: z.string(),
982
+ /** 模型允许执行的操作;解析模型时会在调用厂商前校验 */
983
+ operations: AudioOperationsSchema,
984
+ /** API Key 覆盖(未提供时可按 Audio 配置继承 LLM 密钥,最后回退对应平台环境变量) */
985
+ apiKey: OptionalSecretSchema,
986
+ /** HTTP / WebSocket 端点覆盖(`whisper` / `indextts` 无默认端点,必须显式配置) */
987
+ baseUrl: z.string().optional(),
988
+ /** 火山引擎 App Key(`X-Api-App-Key`,旧版控制台 ASR 需要) */
989
+ appKey: OptionalSecretSchema,
990
+ /** 火山引擎 Access Key(`X-Api-Access-Key`,旧版控制台 ASR 需要) */
991
+ accessKey: OptionalSecretSchema,
992
+ /** 火山引擎资源 ID(`X-Api-Resource-Id`;未提供时使用平台默认资源 ID) */
993
+ resourceId: z.string().optional(),
994
+ /** 阿里云百炼业务空间 ID(`X-DashScope-WorkSpace`,可选) */
995
+ workspaceId: z.string().optional(),
996
+ /** 请求超时(毫秒,默认 60000) */
997
+ timeout: z.number().positive().optional()
998
+ });
999
+ var AudioConfigSchema = z.object({
1000
+ /** 注册的语音模型列表 */
1001
+ models: z.array(AudioModelEntrySchema).optional(),
1002
+ /** 是否允许未单独配置密钥的语音模型继承 LLM 全局密钥;跨供应商部署应保持关闭。 */
1003
+ inheritLlmApiKey: z.boolean().default(false),
1004
+ /** 默认识别模型 ID(`ai.audio.transcribe*` 未指定 model 时使用) */
1005
+ transcribeModel: z.string().optional(),
1006
+ /** 默认合成模型 ID(`ai.audio.synthesize*` 未指定 model 时使用) */
1007
+ synthesizeModel: z.string().optional(),
1008
+ /** 单次音频字节上限(默认 10 MiB,防止资源耗尽) */
1009
+ maxAudioBytes: z.number().int().positive().default(10 * 1024 * 1024),
1010
+ /** 实时连接最长持续时间(毫秒,默认 5 分钟) */
1011
+ maxStreamDurationMs: z.number().int().positive().default(5 * 60 * 1e3)
1012
+ });
1013
+ var AUDIO_PROVIDER_DEFAULT_BASE_URL = {
1014
+ openai: "https://api.openai.com/v1",
1015
+ mimo: "https://api.xiaomimimo.com/v1",
1016
+ qwen: "wss://dashscope.aliyuncs.com/api-ws/v1/realtime",
1017
+ doubao: "wss://openspeech.bytedance.com"
1018
+ };
1019
+ var AUDIO_PROVIDER_CREDENTIAL_OPTIONAL = /* @__PURE__ */ new Set(["whisper", "indextts"]);
1020
+ function doubaoDefaultResourceId(operation) {
1021
+ return operation === "transcribe" ? "volc.bigasr.sauc.duration" : "seed-tts-2.0";
1022
+ }
1023
+ function audioProviderEnvApiKey(provider) {
1024
+ switch (provider) {
1025
+ case "openai":
1026
+ return process.env.HAI_AI_AUDIO_OPENAI_APIKEY?.trim() || process.env.OPENAI_API_KEY;
1027
+ case "mimo":
1028
+ return process.env.HAI_AI_AUDIO_MIMO_APIKEY?.trim() || process.env.MIMO_API_KEY;
1029
+ case "qwen":
1030
+ return process.env.HAI_AI_AUDIO_QWEN_APIKEY?.trim() || process.env.DASHSCOPE_API_KEY;
1031
+ case "doubao":
1032
+ return process.env.HAI_AI_AUDIO_DOUBAO_APIKEY?.trim() || process.env.VOLC_API_KEY;
1033
+ case "whisper":
1034
+ return process.env.HAI_AI_AUDIO_WHISPER_APIKEY;
1035
+ case "indextts":
1036
+ return process.env.HAI_AI_AUDIO_INDEXTTS_APIKEY;
1037
+ }
1038
+ }
1039
+ function resolveAudioModel(audioConfig, operation, explicit, llmApiKey) {
1040
+ const targetId = explicit ?? (operation === "transcribe" ? audioConfig.transcribeModel : audioConfig.synthesizeModel);
1041
+ if (!targetId)
1042
+ return err(HaiAIError.AUDIO_MODEL_NOT_FOUND, aiM("ai_audioModelNotFound", { params: { model: `<${operation}>` } }));
1043
+ const entry = audioConfig.models?.find((m) => m.id === targetId || m.model === targetId);
1044
+ if (!entry)
1045
+ return err(HaiAIError.AUDIO_MODEL_NOT_FOUND, aiM("ai_audioModelNotFound", { params: { model: targetId } }));
1046
+ const operations = entry.operations;
1047
+ if (!operations.includes(operation)) {
1048
+ return err(
1049
+ HaiAIError.AUDIO_UNSUPPORTED_INPUT,
1050
+ aiM("ai_audioUnsupportedInput", { params: { provider: entry.provider, reason: `model ${entry.id} does not support ${operation}` } })
1051
+ );
1052
+ }
1053
+ const apiKey = entry.apiKey ?? (audioConfig.inheritLlmApiKey ? llmApiKey : void 0) ?? audioProviderEnvApiKey(entry.provider);
1054
+ const baseUrl = entry.baseUrl ?? AUDIO_PROVIDER_DEFAULT_BASE_URL[entry.provider];
1055
+ if (!baseUrl)
1056
+ return err(HaiAIError.CONFIGURATION_ERROR, aiM("ai_audioMissingBaseUrl", { params: { provider: entry.provider } }));
1057
+ return ok({
1058
+ id: entry.id,
1059
+ provider: entry.provider,
1060
+ model: entry.model,
1061
+ apiKey,
1062
+ baseUrl,
1063
+ appKey: entry.appKey ?? process.env.VOLC_APP_KEY,
1064
+ accessKey: entry.accessKey ?? process.env.VOLC_ACCESS_KEY,
1065
+ resourceId: entry.resourceId ?? (entry.provider === "doubao" ? doubaoDefaultResourceId(operation) : ""),
1066
+ workspaceId: entry.workspaceId,
1067
+ timeout: entry.timeout ?? 6e4
1068
+ });
1069
+ }
1070
+ function ensureAudioCredential(model) {
1071
+ if (AUDIO_PROVIDER_CREDENTIAL_OPTIONAL.has(model.provider))
1072
+ return null;
1073
+ const hasDoubaoLegacy = model.provider === "doubao" && Boolean(model.appKey && model.accessKey);
1074
+ if (model.apiKey || hasDoubaoLegacy)
1075
+ return null;
1076
+ return core.error.buildHaiErrorInst(HaiAIError.CONFIGURATION_ERROR, aiM("ai_audioMissingApiKey", { params: { provider: model.provider } }));
1077
+ }
1078
+ var ImageProviderSchema = z.enum(["openai", "google", "qwen", "seedream", "pollinations"]);
1079
+ var ImageModelEntrySchema = z.object({
1080
+ /** 模型唯一标识(供请求选择) */
1081
+ id: z.string(),
1082
+ /** 所属文生图平台 */
1083
+ provider: ImageProviderSchema,
1084
+ /** 厂商模型名 */
1085
+ model: z.string(),
1086
+ /** API Key 覆盖;未提供时回退厂商环境变量 */
1087
+ apiKey: OptionalSecretSchema,
1088
+ /** API 基础 URL 覆盖 */
1089
+ baseUrl: z.url().optional(),
1090
+ /** 阿里云百炼业务空间 ID(可选) */
1091
+ workspaceId: z.string().optional(),
1092
+ /** 整次图片生成与下载超时(毫秒,1–2147483647,默认 120000) */
1093
+ timeout: z.number().int().positive().max(2147483647).default(12e4)
1094
+ });
1095
+ var ImageConfigSchema = z.object({
1096
+ /** 单张图片或参考图的字节上限,默认 20 MiB;JSON 上限为 max(64 KiB, 两倍图片上限)。 */
1097
+ maxImageBytes: z.number().int().positive().max(100 * 1024 * 1024).default(20 * 1024 * 1024),
1098
+ /** 单次生成/参考图数量上限,默认 4,最大 16;临时 URL 串行下载。 */
1099
+ maxImages: z.number().int().positive().max(16).default(4),
1100
+ /** 注册的文生图模型 */
1101
+ models: z.array(ImageModelEntrySchema).optional(),
1102
+ /** 默认文生图模型 ID */
1103
+ generateModel: z.string().optional()
1104
+ });
1105
+ var IMAGE_PROVIDER_DEFAULT_BASE_URL = {
1106
+ openai: "https://api.openai.com/v1",
1107
+ google: "https://generativelanguage.googleapis.com",
1108
+ qwen: "https://dashscope.aliyuncs.com/api/v1",
1109
+ seedream: "https://ark.cn-beijing.volces.com/api/v3",
1110
+ pollinations: "https://gen.pollinations.ai"
1111
+ };
1112
+ function imageProviderEnvApiKey(provider) {
1113
+ switch (provider) {
1114
+ case "openai":
1115
+ return process.env.HAI_AI_IMAGE_OPENAI_APIKEY?.trim() || process.env.OPENAI_API_KEY;
1116
+ case "google":
1117
+ return process.env.HAI_AI_IMAGE_GOOGLE_APIKEY?.trim() || process.env.GEMINI_API_KEY;
1118
+ case "qwen":
1119
+ return process.env.HAI_AI_IMAGE_QWEN_APIKEY?.trim() || process.env.DASHSCOPE_API_KEY;
1120
+ case "seedream":
1121
+ return (process.env.HAI_AI_IMAGE_SEEDREAM_APIKEY?.trim() || process.env.ARK_API_KEY) ?? process.env.VOLC_API_KEY;
1122
+ case "pollinations":
1123
+ return process.env.HAI_AI_IMAGE_POLLINATIONS_APIKEY?.trim() || process.env.POLLINATIONS_API_KEY;
1124
+ }
1125
+ }
1126
+ function resolveImageModel(imageConfig, explicit) {
1127
+ const target = explicit ?? imageConfig.generateModel;
1128
+ if (!target)
1129
+ return err(HaiAIError.IMAGE_MODEL_NOT_FOUND, aiM("ai_imageModelNotFound", { params: { model: "<generate>" } }));
1130
+ const entry = imageConfig.models?.find((model) => model.id === target || model.model === target);
1131
+ if (!entry)
1132
+ return err(HaiAIError.IMAGE_MODEL_NOT_FOUND, aiM("ai_imageModelNotFound", { params: { model: target } }));
1133
+ const apiKey = entry.apiKey ?? imageProviderEnvApiKey(entry.provider);
1134
+ if (!apiKey)
1135
+ return err(HaiAIError.CONFIGURATION_ERROR, aiM("ai_imageMissingApiKey", { params: { provider: entry.provider } }));
1136
+ return ok({
1137
+ id: entry.id,
1138
+ provider: entry.provider,
1139
+ model: entry.model,
1140
+ apiKey,
1141
+ baseUrl: (entry.baseUrl ?? IMAGE_PROVIDER_DEFAULT_BASE_URL[entry.provider]).replace(/\/+$/, ""),
1142
+ workspaceId: entry.workspaceId,
1143
+ timeout: entry.timeout
1144
+ });
1145
+ }
1146
+ var AIConfigSchema = z.object({
1147
+ /** ACP 会话与执行限制(仅 Node 服务端)。 */
1148
+ acp: ACPConfigSchema.optional(),
1149
+ /** LLM 配置(可选,所有字段有默认值) */
1150
+ llm: LLMConfigSchema.default({
1151
+ model: "gpt-4o-mini",
1152
+ protocol: "chat",
1153
+ maxTokens: 4096,
1154
+ temperature: 0.7,
1155
+ timeout: 6e4,
1156
+ tempModelCacheTtl: 6e5
1157
+ }),
1158
+ /** MCP 配置 */
1159
+ mcp: MCPConfigSchema.optional(),
1160
+ /** Embedding 配置 */
1161
+ embedding: EmbeddingConfigSchema.optional(),
1162
+ /** Knowledge 配置 */
1163
+ knowledge: KnowledgeConfigSchema.optional(),
1164
+ /** Memory 配置 */
1165
+ memory: MemoryConfigSchema.optional(),
1166
+ /** Token 配置 */
1167
+ token: TokenConfigSchema.optional(),
1168
+ /** Summary 配置 */
1169
+ summary: SummaryConfigSchema.optional(),
1170
+ /** Compress 配置 */
1171
+ compress: CompressConfigSchema.optional(),
1172
+ /** Retrieval 配置(预注册检索源) */
1173
+ retrieval: RetrievalConfigSchema.optional(),
1174
+ /** File 解析配置 */
1175
+ file: FileConfigSchema.optional(),
1176
+ /** A2A 配置(Agent-to-Agent 协议) */
1177
+ a2a: A2AConfigSchema.optional(),
1178
+ /** Audio 配置(语音识别 / 语音合成) */
1179
+ audio: AudioConfigSchema.optional(),
1180
+ /** Image 配置(文生图) */
1181
+ image: ImageConfigSchema.optional()
1182
+ });
1183
+ function serializePlayableAudio(audio) {
1184
+ if (audio.format === "wav")
1185
+ return ok({ audioBase64: toBase64(audio.data), format: "wav", mimeType: "audio/wav" });
1186
+ if (audio.format === "mp3")
1187
+ return ok({ audioBase64: toBase64(audio.data), format: "mp3", mimeType: "audio/mpeg" });
1188
+ if (audio.format !== "pcm16")
1189
+ return err(HaiAIError.AUDIO_UNSUPPORTED_INPUT, `Unsupported playable audio format: ${audio.format}`);
1190
+ const sampleRate = audio.sampleRate;
1191
+ const channels = audio.channels ?? 1;
1192
+ if (sampleRate === void 0 || !Number.isInteger(sampleRate) || sampleRate <= 0 || channels !== 1 && channels !== 2 || audio.data.byteLength % (channels * 2) !== 0)
1193
+ return err(HaiAIError.AUDIO_INVALID_REQUEST, "PCM16 audio metadata is invalid");
1194
+ const wav = new Uint8Array(44 + audio.data.byteLength);
1195
+ const view = new DataView(wav.buffer);
1196
+ writeAscii(wav, 0, "RIFF");
1197
+ view.setUint32(4, wav.byteLength - 8, true);
1198
+ writeAscii(wav, 8, "WAVE");
1199
+ writeAscii(wav, 12, "fmt ");
1200
+ view.setUint32(16, 16, true);
1201
+ view.setUint16(20, 1, true);
1202
+ view.setUint16(22, channels, true);
1203
+ view.setUint32(24, sampleRate, true);
1204
+ view.setUint32(28, sampleRate * channels * 2, true);
1205
+ view.setUint16(32, channels * 2, true);
1206
+ view.setUint16(34, 16, true);
1207
+ writeAscii(wav, 36, "data");
1208
+ view.setUint32(40, audio.data.byteLength, true);
1209
+ wav.set(audio.data, 44);
1210
+ return ok({ audioBase64: toBase64(wav), format: "wav", mimeType: "audio/wav" });
1211
+ }
1212
+ function writeAscii(target, offset, value) {
1213
+ for (let index = 0; index < value.length; index++)
1214
+ target[offset + index] = value.charCodeAt(index);
1215
+ }
1216
+ function toBase64(data) {
1217
+ let binary = "";
1218
+ const chunkSize = 32768;
1219
+ for (let offset = 0; offset < data.length; offset += chunkSize)
1220
+ binary += String.fromCharCode(...data.subarray(offset, offset + chunkSize));
1221
+ return btoa(binary);
1222
+ }
1223
+ var AUDIO_WS_PATH = AUDIO_WS_PATH$1;
1224
+ var AudioFormatSchema = AudioFormatSchema$1;
1225
+ var AudioWsStartMessageSchema = AudioWsStartMessageSchema$1;
1226
+ var AudioWsTextMessageSchema = AudioWsTextMessageSchema$1;
1227
+ var AudioWsDoneMessageSchema = AudioWsDoneMessageSchema$1;
1228
+ var AudioWsClientMessageSchema = AudioWsClientMessageSchema$1;
1229
+
1230
+ export { A2AConfigSchema, A2ASkillConfigSchema, ACPAgentSchema, ACPConfigSchema, ACPPublishSchema, ACPRepositorySchema, ACPWorkspaceSchema, AIConfigSchema, AUDIO_WS_PATH, ApiTypeSchema, AudioConfigSchema, AudioFormatSchema, AudioModelEntrySchema, AudioOperationSchema, AudioOperationsSchema, AudioProviderSchema, AudioWsClientMessageSchema, AudioWsDoneMessageSchema, AudioWsStartMessageSchema, AudioWsTextMessageSchema, CompressConfigSchema, CompressionStrategySchema, EmbeddingConfigSchema, EntityTypeSchema, FileConfigSchema, ImageConfigSchema, ImageModelEntrySchema, ImageProviderSchema, KnowledgeConfigSchema, LLMConfigSchema, MCPConfigSchema, MCPExternalServerSchema, MCPServerCapabilitiesSchema, MCPServerConfigSchema, MemoryConfigSchema, MemoryTypeSchema, ModelCapabilitiesSchema, ModelEntrySchema, ModelScenarioSchema, OptionalSecretSchema, RetrievalConfigSchema, RetrievalSourceSchema, SummaryConfigSchema, TokenConfigSchema, aiM, branchNameSchema, ensureAudioCredential, resolveAudioModel, resolveImageModel, resolveModelApi, resolveModelEntry, serializePlayableAudio, sessionIdentitySchema };
1231
+ //# sourceMappingURL=chunk-HEYVFQC6.js.map
1232
+ //# sourceMappingURL=chunk-HEYVFQC6.js.map