@kodax-ai/kodax 0.7.40 → 0.7.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/dist/chunks/{chunk-NDNILSTR.js → chunk-5TFLMGER.js} +1 -1
  3. package/dist/chunks/{chunk-FAVPT4P7.js → chunk-6OB4AJOM.js} +1 -1
  4. package/dist/chunks/chunk-HYWVRTFA.js +1233 -0
  5. package/dist/chunks/chunk-SX2IS5JP.js +16 -0
  6. package/dist/chunks/chunk-ZPJPNLBK.js +462 -0
  7. package/dist/chunks/{compaction-config-A7XZ6H5Y.js → compaction-config-LT5PEXPT.js} +1 -1
  8. package/dist/chunks/{construction-bootstrap-OFPUZTXQ.js → construction-bootstrap-HBCWJFHC.js} +1 -1
  9. package/dist/chunks/dist-V3BS2NKB.js +2 -0
  10. package/dist/chunks/{utils-DFMYJUTE.js → utils-FAFUQJ2A.js} +1 -1
  11. package/dist/index.d.ts +232 -7
  12. package/dist/index.js +2 -2
  13. package/dist/kodax_cli.js +922 -912
  14. package/dist/sdk-agent.d.ts +1459 -10
  15. package/dist/sdk-agent.js +1 -1
  16. package/dist/sdk-coding.d.ts +4543 -14
  17. package/dist/sdk-coding.js +1 -1
  18. package/dist/sdk-llm.d.ts +209 -10
  19. package/dist/sdk-repl.d.ts +2694 -13
  20. package/dist/sdk-repl.js +1 -1
  21. package/dist/sdk-skills.d.ts +487 -11
  22. package/dist/types-chunks/bash-prefix-extractor.d-B2iliwdi.d.ts +2432 -0
  23. package/dist/types-chunks/capability.d-BxNgd1-c.d.ts +368 -0
  24. package/dist/types-chunks/cost-tracker.d-C4dMlQuV.d.ts +342 -0
  25. package/dist/types-chunks/history-cleanup.d-q1vAvCss.d.ts +1266 -0
  26. package/dist/types-chunks/instance-discovery.d-DZhp77vb.d.ts +1217 -0
  27. package/dist/types-chunks/resolver.d-BwD6TKz7.d.ts +262 -0
  28. package/dist/types-chunks/storage.d-Bv9T99Qu.d.ts +584 -0
  29. package/dist/types-chunks/types.d-C5mHR87z.d.ts +119 -0
  30. package/package.json +8 -3
  31. package/dist/acp_events.d.ts +0 -109
  32. package/dist/acp_logger.d.ts +0 -20
  33. package/dist/acp_server.d.ts +0 -92
  34. package/dist/chunks/chunk-CLS57NPX.js +0 -460
  35. package/dist/chunks/chunk-QZEDWITG.js +0 -1226
  36. package/dist/chunks/chunk-Z5EBDA6R.js +0 -15
  37. package/dist/chunks/dist-OTUF22DA.js +0 -2
  38. package/dist/cli_commands.d.ts +0 -17
  39. package/dist/cli_option_helpers.d.ts +0 -49
  40. package/dist/cli_option_helpers.test.d.ts +0 -1
  41. package/dist/constructed_cli.d.ts +0 -82
  42. package/dist/constructed_cli.test.d.ts +0 -1
  43. package/dist/kodax_cli.d.ts +0 -7
  44. package/dist/self_modify_cli.d.ts +0 -81
  45. package/dist/self_modify_cli.test.d.ts +0 -9
  46. package/dist/skill_cli.d.ts +0 -15
  47. package/dist/skill_cli.test.d.ts +0 -1
@@ -0,0 +1,368 @@
1
+ /**
2
+ * KodaX AI Types
3
+ *
4
+ * AI 层类型定义 - 所有 Provider 共享的类型接口
5
+ */
6
+ interface KodaXTextBlock {
7
+ type: 'text';
8
+ text: string;
9
+ }
10
+ interface KodaXToolUseBlock {
11
+ type: 'tool_use';
12
+ id: string;
13
+ name: string;
14
+ input: Record<string, unknown>;
15
+ }
16
+ interface KodaXToolResultBlock {
17
+ type: 'tool_result';
18
+ tool_use_id: string;
19
+ content: string;
20
+ is_error?: boolean;
21
+ }
22
+ interface KodaXImageBlock {
23
+ type: 'image';
24
+ path: string;
25
+ mediaType?: string;
26
+ }
27
+ interface KodaXThinkingBlock {
28
+ type: 'thinking';
29
+ thinking: string;
30
+ signature?: string;
31
+ }
32
+ interface KodaXRedactedThinkingBlock {
33
+ type: 'redacted_thinking';
34
+ data: string;
35
+ }
36
+ /**
37
+ * FEATURE_116 (v0.7.37) — Cache boundary marker.
38
+ *
39
+ * Marks the end of a cacheable prefix in a request payload. Provider base
40
+ * classes lower this to the wire-level cache mechanism their API supports:
41
+ *
42
+ * - `KodaXAnthropicCompatProvider`: turns the marker into
43
+ * `cache_control: { type: 'ephemeral' }` on the immediately preceding
44
+ * block, then strips the marker itself.
45
+ * - `KodaXOpenAICompatProvider`: strips the marker (OpenAI / DeepSeek
46
+ * auto prefix-cache; Kimi/Zhipu/通义 self-cache via separate cache_id
47
+ * endpoint deferred to v0.7.45+).
48
+ * - `KodaXAcpProvider` (CLI bridge): strips the marker (CLI bridge does
49
+ * not touch wire; avoids leaking marker into subprocess input).
50
+ *
51
+ * Place at the suffix of any stable prefix (system prompt, tools array,
52
+ * role prompt). The marker is purely client-side: it MUST be removed
53
+ * before the request is sent over the wire.
54
+ */
55
+ interface KodaXCacheBoundary {
56
+ type: 'cache-boundary';
57
+ /** Optional hint identifying which logical region this boundary terminates. Diagnostic only. */
58
+ hint?: 'system' | 'tools' | 'role-prompt';
59
+ }
60
+ type KodaXContentBlock = KodaXTextBlock | KodaXToolUseBlock | KodaXToolResultBlock | KodaXImageBlock | KodaXThinkingBlock | KodaXRedactedThinkingBlock | KodaXCacheBoundary;
61
+ interface KodaXMessage {
62
+ role: 'user' | 'assistant' | 'system';
63
+ content: string | KodaXContentBlock[];
64
+ /** Marks messages injected by the system (auto-continue, retry prompts). Hidden in REPL display. */
65
+ _synthetic?: boolean;
66
+ }
67
+ interface KodaXTokenUsage {
68
+ inputTokens: number;
69
+ outputTokens: number;
70
+ totalTokens: number;
71
+ cachedReadTokens?: number;
72
+ cachedWriteTokens?: number;
73
+ thoughtTokens?: number;
74
+ }
75
+ interface KodaXStreamResult {
76
+ textBlocks: KodaXTextBlock[];
77
+ toolBlocks: KodaXToolUseBlock[];
78
+ thinkingBlocks: (KodaXThinkingBlock | KodaXRedactedThinkingBlock)[];
79
+ usage?: KodaXTokenUsage;
80
+ /** Provider stop reason: 'end_turn' (normal), 'max_tokens' (truncated), 'stop_sequence', 'tool_use', etc. */
81
+ stopReason?: string;
82
+ }
83
+ interface KodaXToolDefinition {
84
+ name: string;
85
+ description: string;
86
+ input_schema: {
87
+ type: 'object';
88
+ properties: Record<string, unknown>;
89
+ required?: string[];
90
+ };
91
+ }
92
+ type KodaXReasoningCapability = 'native-effort' | 'native-budget' | 'native-toggle' | 'none' | 'prompt-only' | 'unknown';
93
+ type KodaXProviderTransport = 'native-api' | 'cli-bridge';
94
+ type KodaXProviderConversationSemantics = 'full-history' | 'last-user-message';
95
+ type KodaXProviderMcpSupport = 'native' | 'none';
96
+ type KodaXProviderContextFidelity = 'full' | 'partial' | 'lossy';
97
+ type KodaXProviderToolCallingFidelity = 'full' | 'limited' | 'none';
98
+ type KodaXProviderSessionSupport = 'full' | 'limited' | 'stateless';
99
+ type KodaXProviderLongRunningSupport = 'full' | 'limited' | 'none';
100
+ type KodaXProviderMultimodalSupport = 'none' | 'image-input' | 'full';
101
+ type KodaXProviderEvidenceSupport = 'full' | 'limited' | 'none';
102
+ interface KodaXProviderCapabilityProfile {
103
+ transport: KodaXProviderTransport;
104
+ conversationSemantics: KodaXProviderConversationSemantics;
105
+ mcpSupport: KodaXProviderMcpSupport;
106
+ contextFidelity?: KodaXProviderContextFidelity;
107
+ toolCallingFidelity?: KodaXProviderToolCallingFidelity;
108
+ sessionSupport?: KodaXProviderSessionSupport;
109
+ longRunningSupport?: KodaXProviderLongRunningSupport;
110
+ multimodalSupport?: KodaXProviderMultimodalSupport;
111
+ evidenceSupport?: KodaXProviderEvidenceSupport;
112
+ }
113
+ type KodaXReasoningOverride = 'budget' | 'effort' | 'toggle' | 'none';
114
+ type KodaXReasoningMode = 'off' | 'auto' | 'quick' | 'balanced' | 'deep';
115
+ type KodaXThinkingDepth = 'off' | 'low' | 'medium' | 'high';
116
+ type KodaXTaskType = 'conversation' | 'lookup' | 'review' | 'bugfix' | 'edit' | 'refactor' | 'plan' | 'qa' | 'unknown';
117
+ type KodaXExecutionMode = 'conversation' | 'lookup' | 'pr-review' | 'strict-audit' | 'implementation' | 'planning' | 'investigation';
118
+ type KodaXRiskLevel = 'low' | 'medium' | 'high';
119
+ type KodaXTaskComplexity = 'simple' | 'moderate' | 'complex' | 'systemic';
120
+ type KodaXTaskWorkIntent = 'append' | 'overwrite' | 'new';
121
+ type KodaXTaskFamily = 'conversation' | 'lookup' | 'review' | 'implementation' | 'investigation' | 'planning' | 'ambiguous';
122
+ type KodaXTaskActionability = 'non_actionable' | 'actionable' | 'ambiguous';
123
+ type KodaXExecutionPattern = 'direct' | 'checked-direct' | 'coordinated';
124
+ type KodaXMutationSurface = 'read-only' | 'docs-only' | 'code' | 'system';
125
+ type KodaXAssuranceIntent = 'default' | 'explicit-check';
126
+ type KodaXHarnessProfile = 'H0_DIRECT' | 'H1_EXECUTE_EVAL' | 'H2_PLAN_EXECUTE_EVAL' | 'PLANNED';
127
+ type KodaXReviewScale = 'small' | 'large' | 'massive';
128
+ type KodaXAmaProfile = 'tactical' | 'managed';
129
+ type KodaXAmaTactic = 'direct' | 'child-fanout' | 'planning-pass' | 'verification-pass' | 'repair-loop';
130
+ type KodaXAmaFanoutClass = 'finding-validation' | 'evidence-scan' | 'module-triage' | 'hypothesis-check';
131
+ interface KodaXAmaFanoutPolicy {
132
+ admissible: boolean;
133
+ class?: KodaXAmaFanoutClass;
134
+ reason: string;
135
+ maxChildren?: number;
136
+ requiresReadOnly?: boolean;
137
+ }
138
+ interface KodaXAmaControllerDecision {
139
+ profile: KodaXAmaProfile;
140
+ tactics: KodaXAmaTactic[];
141
+ fanout: KodaXAmaFanoutPolicy;
142
+ reason: string;
143
+ upgradeTriggers: string[];
144
+ }
145
+ interface KodaXTaskRoutingDecision {
146
+ primaryTask: KodaXTaskType;
147
+ secondaryTask?: KodaXTaskType;
148
+ taskFamily?: KodaXTaskFamily;
149
+ actionability?: KodaXTaskActionability;
150
+ executionPattern?: KodaXExecutionPattern;
151
+ mutationSurface?: KodaXMutationSurface;
152
+ assuranceIntent?: KodaXAssuranceIntent;
153
+ confidence: number;
154
+ riskLevel: KodaXRiskLevel;
155
+ recommendedMode: KodaXExecutionMode;
156
+ recommendedThinkingDepth: KodaXThinkingDepth;
157
+ complexity: KodaXTaskComplexity;
158
+ workIntent: KodaXTaskWorkIntent;
159
+ requiresBrainstorm: boolean;
160
+ harnessProfile: KodaXHarnessProfile;
161
+ topologyCeiling?: KodaXHarnessProfile;
162
+ upgradeCeiling?: KodaXHarnessProfile;
163
+ reviewScale?: KodaXReviewScale;
164
+ reviewTarget?: 'general' | 'current-worktree' | 'compare-range';
165
+ soloBoundaryConfidence?: number;
166
+ needsIndependentQA?: boolean;
167
+ routingSource?: 'model' | 'fallback' | 'retried-model' | 'retried-fallback';
168
+ routingAttempts?: number;
169
+ routingNotes?: string[];
170
+ reason: string;
171
+ }
172
+ interface KodaXThinkingBudgetMap {
173
+ low: number;
174
+ medium: number;
175
+ high: number;
176
+ }
177
+ type KodaXTaskBudgetOverrides = Partial<Record<KodaXTaskType, Partial<KodaXThinkingBudgetMap>>>;
178
+ interface KodaXReasoningRequest {
179
+ enabled?: boolean;
180
+ mode?: KodaXReasoningMode;
181
+ depth?: KodaXThinkingDepth;
182
+ taskType?: KodaXTaskType;
183
+ executionMode?: KodaXExecutionMode;
184
+ }
185
+ interface KodaXModelDescriptor {
186
+ id: string;
187
+ displayName?: string;
188
+ contextWindow?: number;
189
+ maxOutputTokens?: number;
190
+ thinkingBudgetCap?: number;
191
+ reasoningCapability?: KodaXReasoningCapability;
192
+ }
193
+ type KodaXProtocolFamily = 'anthropic' | 'openai';
194
+ type KodaXProviderUserAgentMode = 'compat' | 'sdk';
195
+ interface KodaXCustomProviderConfig {
196
+ name: string;
197
+ protocol: KodaXProtocolFamily;
198
+ baseUrl: string;
199
+ apiKeyEnv: string;
200
+ model: string;
201
+ /**
202
+ * Additional available models beyond the default. Accepts either a
203
+ * plain model id string (legacy) or a KodaXModelDescriptor object
204
+ * (FEATURE_098) carrying per-model `contextWindow` / `maxOutputTokens`
205
+ * / `thinkingBudgetCap` / `reasoningCapability` overrides.
206
+ */
207
+ models?: Array<string | KodaXModelDescriptor>;
208
+ /**
209
+ * Controls which User-Agent header compatibility providers send.
210
+ * - compat: send "KodaX" for gateways that block the official SDK UA
211
+ * - sdk: keep the upstream SDK default User-Agent
212
+ */
213
+ userAgentMode?: KodaXProviderUserAgentMode;
214
+ supportsThinking?: boolean;
215
+ reasoningCapability?: KodaXReasoningCapability;
216
+ capabilityProfile?: KodaXProviderCapabilityProfile;
217
+ contextWindow?: number;
218
+ maxOutputTokens?: number;
219
+ thinkingBudgetCap?: number;
220
+ }
221
+ interface KodaXProviderConfig {
222
+ apiKeyEnv: string;
223
+ baseUrl?: string;
224
+ model: string;
225
+ /** Additional available models beyond the default */
226
+ models?: readonly KodaXModelDescriptor[];
227
+ /** Compatibility providers may override the SDK User-Agent when needed. */
228
+ userAgentMode?: KodaXProviderUserAgentMode;
229
+ supportsThinking: boolean;
230
+ reasoningCapability?: KodaXReasoningCapability;
231
+ capabilityProfile?: KodaXProviderCapabilityProfile;
232
+ /** 模型的上下文窗口大小 (tokens) */
233
+ contextWindow?: number;
234
+ /** Provider 允许的最大输出 token */
235
+ maxOutputTokens?: number;
236
+ /** Provider thinking budget 上限 */
237
+ thinkingBudgetCap?: number;
238
+ /** Provider 默认 thinking budget 映射 */
239
+ defaultThinkingBudgets?: Partial<KodaXThinkingBudgetMap>;
240
+ /** 按任务类型覆盖默认 budget */
241
+ taskBudgetOverrides?: KodaXTaskBudgetOverrides;
242
+ /**
243
+ * Echo the prior turn's `reasoning_content` back on replayed assistant
244
+ * messages. Required by DeepSeek V4 thinking mode (replay 400s without it).
245
+ * Other Chinese OpenAI-compat thinking providers use the same field, but
246
+ * each needs per-provider verification before opting in. Must stay false
247
+ * for OpenAI proper.
248
+ */
249
+ replayReasoningContent?: boolean;
250
+ /**
251
+ * Strictly verify Anthropic-style `signature` on `thinking` blocks at
252
+ * serialise time. Only Anthropic proper (anthropic.com) cryptographically
253
+ * verifies signatures — third-party Anthropic-compat servers (kimi-code /
254
+ * ark-coding / mimo-coding / zhipu-coding / minimax-coding) lack the
255
+ * signing key and accept any signature.
256
+ *
257
+ * When true, thinking blocks with empty/cross-provider signatures get
258
+ * converted to a `<prior_reasoning>` text block instead of being passed
259
+ * through (which would 400 on signature verification). Cross-provider
260
+ * `redacted_thinking` blocks (ciphertext signed by their origin) are
261
+ * dropped silently — there's no plaintext to recover and forging the
262
+ * field would also fail server-side decryption.
263
+ *
264
+ * When false (default), thinking blocks pass through unchanged — matches
265
+ * legacy behaviour and works for all third-party Anthropic-compat
266
+ * providers. v0.7.28.
267
+ */
268
+ strictThinkingSignature?: boolean;
269
+ /**
270
+ * Hard cap on a single streaming request's wall-clock duration (ms).
271
+ * When exceeded, the resilience layer aborts the stream with a
272
+ * StreamIncompleteError, which routes through the existing
273
+ * `non_streaming_fallback` path. Mirrors Claude Code's idle watchdog
274
+ * pattern but uses request duration (not idle time) because some
275
+ * providers emit keepalive pings during long tool_use generation.
276
+ *
277
+ * Set per-provider just below the known server-side kill window
278
+ * (e.g. zhipu-coding observed 308s → set 300s here, accounting for
279
+ * the ~RTT margin between client send and server kill timestamp).
280
+ */
281
+ streamMaxDurationMs?: number;
282
+ }
283
+ interface KodaXProviderStreamOptions {
284
+ onTextDelta?: (text: string) => void;
285
+ onThinkingDelta?: (text: string) => void;
286
+ onThinkingEnd?: (thinking: string) => void;
287
+ onToolInputDelta?: (toolName: string, partialJson: string, meta?: {
288
+ toolId?: string;
289
+ }) => void;
290
+ /**
291
+ * Fired on provider-side SSE events to manage idle timers.
292
+ *
293
+ * - Called with no argument (or `false`): reset the idle timer.
294
+ * Fired on every event that indicates active data flow
295
+ * (content_block_start, content_block_delta, message_delta, etc.).
296
+ *
297
+ * - Called with `true`: **pause** the idle timer (clear without restart).
298
+ * Fired on `content_block_stop` when the stream has NOT yet ended,
299
+ * because the server may go silent while generating the next block
300
+ * (e.g. between text output and tool_use JSON generation).
301
+ * The hard request timeout still guards against genuinely stuck connections.
302
+ */
303
+ onHeartbeat?: (pause?: boolean) => void;
304
+ /** 当底层 API 遇到 Rate Limit 进行重试时触发 */
305
+ onRateLimit?: (attempt: number, maxRetries: number, delayMs: number) => void;
306
+ /**
307
+ * FEATURE_130 (v0.7.36): structured retry-after callback. Carries the
308
+ * parsed source (`retry-after-seconds` / `retry-after-date` /
309
+ * `retry-after-ms` / `exponential-backoff`) so UI surfaces and the
310
+ * cost tracker can distinguish "provider-told us to wait" from
311
+ * "we're guessing with backoff". Coexists with the legacy
312
+ * `onRateLimit` flat callback above — both fire if both are wired.
313
+ */
314
+ onRetryAfter?: (event: {
315
+ provider: string;
316
+ waitMs: number;
317
+ reason: 'rate-limit' | 'overloaded';
318
+ source: 'retry-after-seconds' | 'retry-after-date' | 'retry-after-ms' | 'exponential-backoff';
319
+ attempt: number;
320
+ maxAttempts: number;
321
+ }) => void;
322
+ /** 会话标识,用于多轮对话上下文恢复 */
323
+ sessionId?: string;
324
+ /** Override the provider's default model for a single request */
325
+ modelOverride?: string;
326
+ /** AbortSignal for cancelling the stream request */
327
+ signal?: AbortSignal;
328
+ }
329
+
330
+ /**
331
+ * Layer A Primitive: Capability provider contract.
332
+ *
333
+ * FEATURE_082 (v0.7.24): extracted from `@kodax-ai/coding/src/extensions/types.ts`
334
+ * so third-party capability sources (MCP, RAG, custom indexes, …) can
335
+ * implement `CapabilityProvider` without importing from the coding preset.
336
+ *
337
+ * The richer "extension runtime" concept (command registration, file
338
+ * contributions, logger plumbing) stays in `@kodax-ai/coding/src/extensions/`
339
+ * because it is coupled to the coding CLI surface.
340
+ */
341
+ type CapabilityKind = 'tool' | 'resource' | 'prompt';
342
+ interface CapabilityResult {
343
+ kind: CapabilityKind;
344
+ content?: string;
345
+ structuredContent?: unknown;
346
+ evidence?: unknown[];
347
+ artifacts?: unknown[];
348
+ metadata?: Record<string, unknown>;
349
+ }
350
+ interface CapabilityProvider {
351
+ id: string;
352
+ kinds: CapabilityKind[];
353
+ search?: (query: string, options?: {
354
+ kind?: CapabilityKind;
355
+ limit?: number;
356
+ server?: string;
357
+ }) => Promise<unknown[]>;
358
+ describe?: (id: string) => Promise<unknown>;
359
+ execute?: (id: string, input: Record<string, unknown>) => Promise<CapabilityResult>;
360
+ read?: (id: string, options?: Record<string, unknown>) => Promise<CapabilityResult>;
361
+ getPrompt?: (id: string, args?: Record<string, unknown>) => Promise<unknown>;
362
+ getPromptContext?: () => Promise<string | undefined> | string | undefined;
363
+ getDiagnostics?: () => Record<string, unknown> | undefined;
364
+ refresh?: () => Promise<void>;
365
+ dispose?: () => Promise<void>;
366
+ }
367
+
368
+ export type { KodaXToolResultBlock as $, KodaXProviderSessionSupport as A, KodaXProviderStreamOptions as B, CapabilityKind as C, KodaXProviderToolCallingFidelity as D, KodaXProviderTransport as E, KodaXReasoningCapability as F, KodaXReasoningMode as G, KodaXReasoningOverride as H, KodaXReasoningRequest as I, KodaXRedactedThinkingBlock as J, KodaXAmaControllerDecision as K, KodaXReviewScale as L, KodaXRiskLevel as M, KodaXStreamResult as N, KodaXTaskActionability as O, KodaXTaskBudgetOverrides as P, KodaXTaskComplexity as Q, KodaXTaskFamily as R, KodaXTaskRoutingDecision as S, KodaXTaskType as T, KodaXTaskWorkIntent as U, KodaXTextBlock as V, KodaXThinkingBlock as W, KodaXThinkingBudgetMap as X, KodaXThinkingDepth as Y, KodaXTokenUsage as Z, KodaXToolDefinition as _, CapabilityProvider as a, KodaXToolUseBlock as a0, CapabilityResult as b, KodaXAmaFanoutClass as c, KodaXAmaFanoutPolicy as d, KodaXAmaProfile as e, KodaXAmaTactic as f, KodaXAssuranceIntent as g, KodaXCacheBoundary as h, KodaXContentBlock as i, KodaXCustomProviderConfig as j, KodaXExecutionMode as k, KodaXExecutionPattern as l, KodaXHarnessProfile as m, KodaXImageBlock as n, KodaXMessage as o, KodaXModelDescriptor as p, KodaXMutationSurface as q, KodaXProtocolFamily as r, KodaXProviderCapabilityProfile as s, KodaXProviderConfig as t, KodaXProviderContextFidelity as u, KodaXProviderConversationSemantics as v, KodaXProviderEvidenceSupport as w, KodaXProviderLongRunningSupport as x, KodaXProviderMcpSupport as y, KodaXProviderMultimodalSupport as z };