maka-agent 0.2.0-dev.48.20260923 → 0.2.0-dev.49.20260924

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 (78) hide show
  1. package/dist/acp/session-event-mapper.js +1 -4
  2. package/dist/onboarding-catalog.js +20 -4
  3. package/dist/pi-transcript.js +0 -8
  4. package/dist/pi-tui-pickers.js +1 -1
  5. package/dist/pi-tui-runner.js +6 -4
  6. package/dist/runtime-host-onboarding.js +5 -3
  7. package/dist/runtime-host-session-channel.js +9 -3
  8. package/native/runtime-host-windows-task-launcher/prebuilds/win32-x64/maka-runtime-host-task-launcher.exe +0 -0
  9. package/node_modules/@maka/core/dist/events.js +13 -0
  10. package/node_modules/@maka/core/dist/llm-connections.js +2 -5
  11. package/node_modules/@maka/core/dist/model-facts.js +2 -4
  12. package/node_modules/@maka/core/dist/model-metadata.generated.js +345 -248
  13. package/node_modules/@maka/core/dist/model-thinking.js +17 -17
  14. package/node_modules/@maka/core/dist/model-web-search.js +7 -9
  15. package/node_modules/@maka/core/dist/models-dev-projection.js +1 -1
  16. package/node_modules/@maka/core/dist/onboarding.js +1 -4
  17. package/node_modules/@maka/core/dist/provider-registry.js +60 -86
  18. package/node_modules/@maka/core/dist/runtime-event.js +2 -2
  19. package/node_modules/@maka/core/dist/runtime-policy/connection-catalog-codec.js +28 -16
  20. package/node_modules/@maka/core/dist/runtime-policy.js +1 -1
  21. package/node_modules/@maka/core/dist/session.js +23 -9
  22. package/node_modules/@maka/core/dist/transcript-search.js +1 -0
  23. package/node_modules/@maka/core/dist/usage-stats/types.js +1 -0
  24. package/node_modules/@maka/eval/dist/harbor-maka-subject.js +3 -0
  25. package/node_modules/@maka/eval/dist/maka-subject.js +8 -1
  26. package/node_modules/@maka/runtime/dist/ai-sdk-backend.js +1 -11
  27. package/node_modules/@maka/runtime/dist/ai-sdk-compaction.js +2 -12
  28. package/node_modules/@maka/runtime/dist/ai-sdk-turn.js +3 -71
  29. package/node_modules/@maka/runtime/dist/conversation-copy.js +2 -2
  30. package/node_modules/@maka/runtime/dist/local-web-fetch.js +23 -11
  31. package/node_modules/@maka/runtime/dist/model-adapter.js +10 -5
  32. package/node_modules/@maka/runtime/dist/model-factory.js +33 -30
  33. package/node_modules/@maka/runtime/dist/model-fetcher.js +4 -1
  34. package/node_modules/@maka/runtime/dist/model-runtime.js +3 -9
  35. package/node_modules/@maka/runtime/dist/read-page.js +11 -8
  36. package/node_modules/@maka/runtime/dist/recovery-resolver.js +47 -20
  37. package/node_modules/@maka/runtime/dist/runtime-event-backfill.js +1 -0
  38. package/node_modules/@maka/runtime/dist/scheduled-task-tools.js +39 -8
  39. package/node_modules/@maka/runtime/dist/session-manager.js +12 -2
  40. package/node_modules/@maka/runtime/dist/telemetry/model-pricing.generated.js +141 -134
  41. package/node_modules/@maka/runtime/dist/tool-result-archive-transition.js +3 -3
  42. package/node_modules/@maka/runtime/dist/workers/filesystem-worker.js +7 -6
  43. package/node_modules/@maka/runtime-host/dist/adapter/session-projector.js +28 -62
  44. package/node_modules/@maka/runtime-host/dist/client/hosted-execution-target.js +7 -1
  45. package/node_modules/@maka/runtime-host/dist/client/session-subscription.js +3 -0
  46. package/node_modules/@maka/runtime-host/dist/protocol/connection-effects.js +6 -3
  47. package/node_modules/@maka/runtime-host/dist/protocol/index.js +5 -1
  48. package/node_modules/@maka/runtime-host/dist/protocol/operations.js +4 -1
  49. package/node_modules/@maka/runtime-host/dist/protocol/prompt-suggestions.js +61 -0
  50. package/node_modules/@maka/runtime-host/dist/protocol/runtime-policy.js +4 -1
  51. package/node_modules/@maka/runtime-host/dist/protocol/session-continuity.js +2 -1
  52. package/node_modules/@maka/runtime-host/dist/server/connection-effect-coordinator.js +3 -0
  53. package/node_modules/@maka/runtime-host/dist/server/execution-composition.js +54 -6
  54. package/node_modules/@maka/runtime-host/dist/server/execution-model-authority.js +38 -2
  55. package/node_modules/@maka/runtime-host/dist/server/generated-text.js +39 -0
  56. package/node_modules/@maka/runtime-host/dist/server/hosted-execution-tool-profile.js +8 -0
  57. package/node_modules/@maka/runtime-host/dist/server/prompt-suggestion.js +179 -0
  58. package/node_modules/@maka/runtime-host/dist/server/root-turn-coordinator.js +2 -2
  59. package/node_modules/@maka/runtime-host/dist/server/session-continuity-coordinator.js +48 -16
  60. package/node_modules/@maka/runtime-host/dist/server/session-title.js +3 -16
  61. package/node_modules/@maka/runtime-host/dist/server/session-transcript-reader.js +38 -3
  62. package/node_modules/@maka/runtime-host/dist/server/shared-session-transcript.js +3 -0
  63. package/node_modules/@maka/runtime-host/dist/server/workhub-coordination-action-gate.js +6 -13
  64. package/node_modules/@maka/runtime-host/dist/server/workhub-coordination-coordinator.js +35 -11
  65. package/node_modules/@maka/storage/dist/config-transfer.js +14 -8
  66. package/node_modules/@maka/storage/dist/execution-stores.js +4 -3
  67. package/node_modules/@maka/storage/dist/interaction-store.js +13 -0
  68. package/node_modules/@maka/storage/dist/runtime-policy/connection-catalog-document.js +28 -17
  69. package/node_modules/@maka/storage/dist/runtime-policy/coordinator.js +9 -3
  70. package/node_modules/@maka/storage/dist/runtime-policy/legacy-custom-connection.js +65 -0
  71. package/node_modules/@maka/storage/dist/runtime-policy/onboarding-transaction.js +10 -5
  72. package/node_modules/@maka/storage/dist/session-bundle-policy.js +11 -0
  73. package/node_modules/@maka/storage/dist/session-store.js +29 -6
  74. package/node_modules/@maka/storage/dist/sqlite-core-execution-schema.js +3 -0
  75. package/node_modules/@maka/storage/dist/sqlite-runtime-store.js +125 -7
  76. package/node_modules/@maka/storage/dist/sqlite-session-metadata-store.js +5 -3
  77. package/node_modules/@maka/storage/dist/usage-screen.js +138 -108
  78. package/package.json +1 -1
@@ -17,6 +17,7 @@
17
17
  * under the License.
18
18
  */
19
19
  import { lookupModelMetadata } from './model-metadata.js';
20
+ import { isModelApiProtocol } from './provider-registry.js';
20
21
  export const THINKING_LEVELS = [
21
22
  'off',
22
23
  'minimal',
@@ -86,6 +87,7 @@ const APPLY_PATCH_MODELS = new Set([
86
87
  'gpt-5.6-terra',
87
88
  'gpt-5.6-luna',
88
89
  'gpt-6-astra',
90
+ 'deepseek-flash',
89
91
  'deepseek-v4-flash',
90
92
  'deepseek-v4-flash-vision-exp',
91
93
  'deepseek-v4-pro',
@@ -143,9 +145,7 @@ function normalizeModelOverride(entry) {
143
145
  declared.capabilities = entry.capabilities;
144
146
  if (isRecord(entry.modalities))
145
147
  declared.modalities = entry.modalities;
146
- if (entry.apiProtocol === 'openai-chat' ||
147
- entry.apiProtocol === 'openai-responses' ||
148
- entry.apiProtocol === 'anthropic-messages')
148
+ if (isModelApiProtocol(entry.apiProtocol))
149
149
  declared.apiProtocol = entry.apiProtocol;
150
150
  if (entry.serviceTier === 'fast')
151
151
  declared.serviceTier = 'fast';
@@ -174,13 +174,6 @@ export function normalizeModelOverrides(table) {
174
174
  }
175
175
  return parsed.length > 0 ? Object.fromEntries(parsed) : undefined;
176
176
  }
177
- /** Remove profiles for models explicitly retired from a provider. */
178
- export function pruneModelOverrides(table, retainedModelIds) {
179
- if (table === undefined)
180
- return undefined;
181
- const kept = Object.fromEntries(Object.entries(table).filter(([modelId]) => retainedModelIds.includes(modelId)));
182
- return Object.keys(kept).length > 0 ? kept : undefined;
183
- }
184
177
  /**
185
178
  * The one read seam for user declarations: thinking, vision, and context
186
179
  * window reads all enter through here, so the precedence of a declaration over
@@ -195,12 +188,19 @@ export function modelOverride(connection, modelId) {
195
188
  export function declaredContextWindow(connection, modelId) {
196
189
  return modelOverride(connection, modelId)?.compactionThreshold;
197
190
  }
191
+ /** The model's own wire declaration, then the discovered one, then the connection default. */
192
+ export function declaredModelApiProtocol(connection, modelId) {
193
+ return (modelOverride(connection, modelId)?.apiProtocol ??
194
+ connection.models?.find((model) => model.id === modelId)?.apiProtocol ??
195
+ connection.defaultApiProtocol);
196
+ }
198
197
  /**
199
198
  * Mirrors @ai-sdk/openai@4.0.42 priority-processing detection. The UI and
200
199
  * runtime share this gate so a saved Fast declaration always reaches the wire.
201
200
  */
202
- export function supportsRelayFastServiceTier(providerType, modelId) {
203
- if (providerType !== 'openai-responses-compatible')
201
+ export function supportsCustomFastServiceTier(connection, modelId) {
202
+ if (connection.providerType !== 'custom' ||
203
+ declaredModelApiProtocol(connection, modelId) !== 'openai-responses')
204
204
  return false;
205
205
  const oSeriesVersion = /^o(\d+)(?:-|$)/.exec(modelId)?.[1];
206
206
  const gptMatch = /^gpt-(\d+)(?:\.(\d+))?(?:-(.+))?$/.exec(modelId);
@@ -213,12 +213,12 @@ export function supportsRelayFastServiceTier(providerType, modelId) {
213
213
  (oSeriesVersion !== undefined && Number(oSeriesVersion) >= 3));
214
214
  }
215
215
  /**
216
- * OpenAI-compatible relay connections declare thinking support **per model** via
217
- * `modelOverrides[modelId].thinkingLevels` — a relay may front a
216
+ * Custom connections declare thinking support **per model** via
217
+ * `modelOverrides[modelId].thinkingLevels` — one endpoint may front a
218
218
  * DeepSeek-family reasoner and a plain instruct model side by side, so the
219
219
  * declaration granularity is the model, not the connection. Without a usable
220
- * declaration for that model every provider (including relays) falls through
221
- * to the metadata-derived variants.
220
+ * declaration for that model every provider falls through to the
221
+ * metadata-derived variants.
222
222
  */
223
223
  export function thinkingVariantsForConnection(connection, modelId) {
224
224
  const declared = modelOverride(connection, modelId)?.thinkingLevels;
@@ -262,7 +262,7 @@ export function thinkingOptionsForModel(providerType, modelId) {
262
262
  * Levels a model supports, in display order. Returns an empty list for
263
263
  * non-reasoning models and for provider/model combinations whose reasoning
264
264
  * support is not declarable from `providerType` + `modelId` alone (e.g.
265
- * `openai-compatible`, where the backing model is user-configured and
265
+ * `custom`, where the backing model is user-configured and
266
266
  * unknown). The UI hides the thinking switcher when this returns `[]`.
267
267
  *
268
268
  * Heuristics are intentionally conservative: only patterns known to accept the
@@ -36,10 +36,10 @@ export function resolveHostedWebSearchCapability(providerType, models, modelId,
36
36
  const stored = models?.find((model) => model.id === id);
37
37
  if (stored?.capabilities?.webSearch === false)
38
38
  return null;
39
- const adapter = providerHostedWebSearchAdapter(providerType);
39
+ const wire = effectiveWire ?? stored?.apiProtocol;
40
+ const adapter = providerHostedWebSearchAdapter(providerType, wire);
40
41
  if (!adapter)
41
42
  return null;
42
- const wire = effectiveWire ?? stored?.apiProtocol;
43
43
  if (wire !== undefined &&
44
44
  ((adapter.adapter === 'openai-responses' && wire !== 'openai-responses') ||
45
45
  (adapter.adapter === 'anthropic-messages' && wire !== 'anthropic-messages'))) {
@@ -50,15 +50,18 @@ export function resolveHostedWebSearchCapability(providerType, models, modelId,
50
50
  }
51
51
  return providerDefaultHostedWebSearchCapability(providerType, id, adapter);
52
52
  }
53
- function providerHostedWebSearchAdapter(providerType) {
53
+ function providerHostedWebSearchAdapter(providerType, wire) {
54
54
  switch (providerType) {
55
+ case 'custom':
56
+ return wire === 'openai-responses' || wire === 'anthropic-messages'
57
+ ? { adapter: wire, implemented: true }
58
+ : null;
55
59
  case 'deepseek':
56
60
  // @ai-sdk/open-responses currently serializes function tools only.
57
61
  // Mark native search unavailable so routing never hands it a provider
58
62
  // tool that would be silently filtered from the request.
59
63
  return { adapter: 'openai-responses', implemented: false };
60
64
  case 'openai':
61
- case 'openai-responses-compatible':
62
65
  case 'xai':
63
66
  case 'xai-oauth':
64
67
  return { adapter: 'openai-responses', implemented: true };
@@ -69,7 +72,6 @@ function providerHostedWebSearchAdapter(providerType) {
69
72
  case 'MiniMax':
70
73
  case 'MiniMax-cn':
71
74
  case 'minimax-coding-plan':
72
- case 'anthropic-compatible':
73
75
  return { adapter: 'anthropic-messages', implemented: true };
74
76
  case 'google':
75
77
  return { adapter: 'google-grounding', implemented: false };
@@ -104,10 +106,6 @@ function providerDefaultHostedWebSearchCapability(providerType, modelId, capabil
104
106
  case 'MiniMax-cn':
105
107
  case 'minimax-coding-plan':
106
108
  return /^MiniMax-M(?:2\.7|3)(?:[.-]|$)/i.test(modelId) ? capability : null;
107
- case 'anthropic-compatible':
108
- return modelId === 'deepseek-v4-flash' ? capability : null;
109
- case 'openai-responses-compatible':
110
- return null;
111
109
  case 'google':
112
110
  return /^gemini-(?:2\.0|2\.5|3|3\.1|3\.5)(?:[.-]|$)/i.test(modelId) ? capability : null;
113
111
  case 'zai':
@@ -36,7 +36,7 @@ export const MODELS_DEV_PROVIDERS = {
36
36
  google: 'google',
37
37
  groq: 'groq',
38
38
  huggingface: 'huggingface',
39
- 'kimi-coding-plan': 'kimi-for-coding',
39
+ 'kimi-coding-plan': 'kimi-code-plan-cn',
40
40
  MiniMax: 'minimax',
41
41
  'MiniMax-cn': 'minimax-cn',
42
42
  'minimax-coding-plan': 'minimax-coding-plan',
@@ -43,7 +43,7 @@ export function deriveOnboardingState(input) {
43
43
  requestedModel: model,
44
44
  });
45
45
  if (verdict.ready) {
46
- return hasHistory(input.sessions)
46
+ return input.hasHistory
47
47
  ? { kind: 'ready_with_history', connectionSlug: connection.slug, model: verdict.model }
48
48
  : { kind: 'ready_empty', connectionSlug: connection.slug, model: verdict.model };
49
49
  }
@@ -87,9 +87,6 @@ export function deriveOnboardingState(input) {
87
87
  ? { kind: 'blocked', reason: 'all_connections_retired' }
88
88
  : { kind: 'blocked', reason: 'all_connections_unhealthy' };
89
89
  }
90
- function hasHistory(sessions) {
91
- return sessions.length > 0;
92
- }
93
90
  /** Closed milestone ids persisted in settings. */
94
91
  export const ONBOARDING_MILESTONE_IDS = [
95
92
  'initial_onboarding',
@@ -17,6 +17,15 @@
17
17
  * under the License.
18
18
  */
19
19
  import { GENERATED_MODELS_DEV_METADATA, GENERATED_MODELS_DEV_MODEL_PROVIDER_OVERRIDES, GENERATED_MODELS_DEV_PROVIDER_FACTS, } from './model-metadata.generated.js';
20
+ export const MODEL_API_PROTOCOL_LABELS = {
21
+ 'openai-chat': 'OpenAI Chat Completions',
22
+ 'openai-responses': 'OpenAI Responses',
23
+ 'anthropic-messages': 'Anthropic Messages',
24
+ };
25
+ export const MODEL_API_PROTOCOLS = Object.keys(MODEL_API_PROTOCOL_LABELS);
26
+ export function isModelApiProtocol(value) {
27
+ return MODEL_API_PROTOCOLS.includes(value);
28
+ }
20
29
  const siliconflow = GENERATED_MODELS_DEV_PROVIDER_FACTS.siliconflow;
21
30
  if (!siliconflow.api)
22
31
  throw new Error('models.dev SiliconFlow provider facts are missing api');
@@ -133,7 +142,7 @@ if (fireworks.id !== 'fireworks-ai') {
133
142
  }
134
143
  if (!fireworks.api)
135
144
  throw new Error('models.dev Fireworks AI provider facts are missing api');
136
- const fireworksModelIds = toolCallingModelIds('Fireworks AI', GENERATED_MODELS_DEV_METADATA['fireworks-ai'], ['accounts/fireworks/models/kimi-k2p6']);
145
+ const fireworksModelIds = toolCallingModelIds('Fireworks AI', GENERATED_MODELS_DEV_METADATA['fireworks-ai'], ['accounts/fireworks/models/kimi-k3']).filter((id) => GENERATED_MODELS_DEV_METADATA['fireworks-ai'][id]?.lifecycle !== 'deprecated');
137
146
  const tencentTokenHub = GENERATED_MODELS_DEV_PROVIDER_FACTS['tencent-tokenhub'];
138
147
  if (tencentTokenHub.id !== 'tencent-tokenhub') {
139
148
  throw new Error('models.dev Tencent TokenHub provider facts are missing stable id tencent-tokenhub');
@@ -480,7 +489,6 @@ const providerRegistry = {
480
489
  protocolAdapters: {
481
490
  'openai-chat': {
482
491
  kind: 'openai-compatible',
483
- name: 'provider',
484
492
  normalizeUsage: true,
485
493
  normalizeBaseUrl: true,
486
494
  },
@@ -510,7 +518,7 @@ const providerRegistry = {
510
518
  authKind: 'api_key',
511
519
  fallbackModels: [...tencentCodingPlanModelIds],
512
520
  status: 'ready',
513
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
521
+ runtimeAdapter: { kind: 'openai-compatible' },
514
522
  modelDiscovery: { kind: 'protocol' },
515
523
  category: 'domestic',
516
524
  catalogGroup: 'plans',
@@ -523,7 +531,7 @@ const providerRegistry = {
523
531
  authKind: 'api_key',
524
532
  fallbackModels: [...volcengineCodingPlanModelIds],
525
533
  status: 'ready',
526
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
534
+ runtimeAdapter: { kind: 'openai-compatible' },
527
535
  modelDiscovery: { kind: 'protocol' },
528
536
  category: 'domestic',
529
537
  catalogGroup: 'plans',
@@ -556,7 +564,7 @@ const providerRegistry = {
556
564
  authKind: 'api_key',
557
565
  fallbackModels: [...tencentTokenPlanModelIds],
558
566
  status: 'ready',
559
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
567
+ runtimeAdapter: { kind: 'openai-compatible' },
560
568
  modelDiscovery: { kind: 'protocol' },
561
569
  category: 'domestic',
562
570
  catalogGroup: 'plans',
@@ -603,17 +611,10 @@ const providerRegistry = {
603
611
  label: 'DeepSeek',
604
612
  baseUrl: 'https://api.deepseek.com',
605
613
  authKind: 'api_key',
606
- fallbackModels: [
607
- 'deepseek-v4-flash',
608
- 'deepseek-v4-flash-vision-exp',
609
- 'deepseek-v4-pro',
610
- 'deepseek-reasoner',
611
- 'deepseek-chat',
612
- ],
614
+ fallbackModels: ['deepseek-flash', 'deepseek-v4-pro'],
613
615
  status: 'ready',
614
616
  runtimeAdapter: {
615
617
  kind: 'openai-compatible',
616
- name: 'provider',
617
618
  responses: { adapter: 'open-responses', reasoningReplay: 'plaintext-content' },
618
619
  },
619
620
  modelDiscovery: { kind: 'protocol' },
@@ -628,7 +629,7 @@ const providerRegistry = {
628
629
  authKind: 'api_key',
629
630
  fallbackModels: moonshotModelIds,
630
631
  status: 'ready',
631
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
632
+ runtimeAdapter: { kind: 'openai-compatible' },
632
633
  modelDiscovery: { kind: 'protocol' },
633
634
  category: 'domestic',
634
635
  catalogGroup: 'api',
@@ -659,7 +660,7 @@ const providerRegistry = {
659
660
  authKind: 'api_key',
660
661
  fallbackModels: ['glm-5.2', 'glm-5.1', 'glm-5-turbo', 'glm-4.7', 'glm-4.5-air'],
661
662
  status: 'ready',
662
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
663
+ runtimeAdapter: { kind: 'openai-compatible' },
663
664
  modelDiscovery: { kind: 'protocol' },
664
665
  category: 'domestic',
665
666
  catalogGroup: 'plans',
@@ -698,7 +699,7 @@ const providerRegistry = {
698
699
  authKind: 'api_key',
699
700
  fallbackModels: siliconflowModelIds,
700
701
  status: 'ready',
701
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
702
+ runtimeAdapter: { kind: 'openai-compatible' },
702
703
  modelDiscovery: { kind: 'protocol', query: { sub_type: 'chat' } },
703
704
  category: 'domestic',
704
705
  catalogGroup: 'aggregators',
@@ -711,7 +712,7 @@ const providerRegistry = {
711
712
  authKind: 'api_key',
712
713
  fallbackModels: vercelModelIds,
713
714
  status: 'ready',
714
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
715
+ runtimeAdapter: { kind: 'openai-compatible' },
715
716
  modelDiscovery: { kind: 'protocol', auth: 'none', filter: 'language-models' },
716
717
  category: 'overseas',
717
718
  catalogGroup: 'aggregators',
@@ -726,7 +727,6 @@ const providerRegistry = {
726
727
  status: 'ready',
727
728
  runtimeAdapter: {
728
729
  kind: 'openai-compatible',
729
- name: 'provider',
730
730
  responses: { adapter: 'openai', reasoningReplay: 'encrypted-content' },
731
731
  },
732
732
  modelDiscovery: { kind: 'protocol' },
@@ -743,7 +743,6 @@ const providerRegistry = {
743
743
  status: 'ready',
744
744
  runtimeAdapter: {
745
745
  kind: 'openai-compatible',
746
- name: 'provider',
747
746
  responses: { adapter: 'openai', reasoningReplay: 'encrypted-content' },
748
747
  },
749
748
  modelDiscovery: {
@@ -759,7 +758,7 @@ const providerRegistry = {
759
758
  authKind: 'api_key',
760
759
  fallbackModels: zaiModelIds,
761
760
  status: 'ready',
762
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
761
+ runtimeAdapter: { kind: 'openai-compatible' },
763
762
  modelDiscovery: { kind: 'protocol' },
764
763
  category: 'domestic',
765
764
  catalogGroup: 'api',
@@ -772,7 +771,7 @@ const providerRegistry = {
772
771
  authKind: 'api_key',
773
772
  fallbackModels: xiaomiModelIds,
774
773
  status: 'ready',
775
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
774
+ runtimeAdapter: { kind: 'openai-compatible' },
776
775
  modelDiscovery: { kind: 'protocol' },
777
776
  category: 'domestic',
778
777
  catalogGroup: 'api',
@@ -785,7 +784,7 @@ const providerRegistry = {
785
784
  authKind: 'api_key',
786
785
  fallbackModels: [...xiaomiTokenPlanModelIds],
787
786
  status: 'ready',
788
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
787
+ runtimeAdapter: { kind: 'openai-compatible' },
789
788
  modelDiscovery: { kind: 'protocol' },
790
789
  category: 'domestic',
791
790
  catalogGroup: 'plans',
@@ -798,7 +797,7 @@ const providerRegistry = {
798
797
  authKind: 'api_key',
799
798
  fallbackModels: [...xiaomiTokenPlanModelIds],
800
799
  status: 'ready',
801
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
800
+ runtimeAdapter: { kind: 'openai-compatible' },
802
801
  modelDiscovery: { kind: 'protocol' },
803
802
  category: 'overseas',
804
803
  catalogGroup: 'plans',
@@ -811,7 +810,7 @@ const providerRegistry = {
811
810
  authKind: 'api_key',
812
811
  fallbackModels: [...xiaomiTokenPlanModelIds],
813
812
  status: 'ready',
814
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
813
+ runtimeAdapter: { kind: 'openai-compatible' },
815
814
  modelDiscovery: { kind: 'protocol' },
816
815
  category: 'overseas',
817
816
  catalogGroup: 'plans',
@@ -824,7 +823,7 @@ const providerRegistry = {
824
823
  authKind: 'api_key',
825
824
  fallbackModels: cerebrasModelIds,
826
825
  status: 'ready',
827
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
826
+ runtimeAdapter: { kind: 'openai-compatible' },
828
827
  modelDiscovery: { kind: 'protocol' },
829
828
  category: 'overseas',
830
829
  catalogGroup: 'api',
@@ -837,7 +836,7 @@ const providerRegistry = {
837
836
  authKind: 'api_key',
838
837
  fallbackModels: mistralModelIds,
839
838
  status: 'ready',
840
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
839
+ runtimeAdapter: { kind: 'openai-compatible' },
841
840
  modelDiscovery: { kind: 'protocol', responseShape: 'array-or-data' },
842
841
  category: 'overseas',
843
842
  catalogGroup: 'api',
@@ -863,7 +862,7 @@ const providerRegistry = {
863
862
  authKind: 'api_key',
864
863
  fallbackModels: huggingfaceModelIds,
865
864
  status: 'ready',
866
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
865
+ runtimeAdapter: { kind: 'openai-compatible' },
867
866
  modelDiscovery: { kind: 'protocol', filter: 'tool-capable' },
868
867
  category: 'overseas',
869
868
  catalogGroup: 'aggregators',
@@ -878,7 +877,6 @@ const providerRegistry = {
878
877
  status: 'ready',
879
878
  runtimeAdapter: {
880
879
  kind: 'openai-compatible',
881
- name: 'provider',
882
880
  replayAssistantReasoningAs: 'reasoning',
883
881
  replayAssistantReasoningDetails: true,
884
882
  },
@@ -894,7 +892,7 @@ const providerRegistry = {
894
892
  authKind: 'api_key',
895
893
  fallbackModels: opencodeModelIds,
896
894
  status: 'ready',
897
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
895
+ runtimeAdapter: { kind: 'openai-compatible' },
898
896
  protocolAdapters: {
899
897
  'anthropic-messages': { kind: 'anthropic', auth: 'api-key', normalizeBaseUrl: true },
900
898
  'openai-responses': {
@@ -915,7 +913,7 @@ const providerRegistry = {
915
913
  authKind: 'api_key',
916
914
  fallbackModels: opencodeGoModelIds,
917
915
  status: 'ready',
918
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
916
+ runtimeAdapter: { kind: 'openai-compatible' },
919
917
  protocolAdapters: {
920
918
  'anthropic-messages': { kind: 'anthropic', auth: 'api-key', normalizeBaseUrl: true },
921
919
  'openai-responses': {
@@ -951,7 +949,7 @@ const providerRegistry = {
951
949
  authKind: 'api_key',
952
950
  fallbackModels: togetherModelIds,
953
951
  status: 'ready',
954
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
952
+ runtimeAdapter: { kind: 'openai-compatible' },
955
953
  modelDiscovery: { kind: 'protocol' },
956
954
  category: 'overseas',
957
955
  catalogGroup: 'api',
@@ -964,7 +962,7 @@ const providerRegistry = {
964
962
  authKind: 'api_key',
965
963
  fallbackModels: fireworksModelIds,
966
964
  status: 'ready',
967
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
965
+ runtimeAdapter: { kind: 'openai-compatible' },
968
966
  modelDiscovery: {
969
967
  kind: 'fireworks',
970
968
  accountsPath: '/v1/accounts',
@@ -982,7 +980,7 @@ const providerRegistry = {
982
980
  authKind: 'api_key',
983
981
  fallbackModels: nvidiaModelIds,
984
982
  status: 'ready',
985
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
983
+ runtimeAdapter: { kind: 'openai-compatible' },
986
984
  modelDiscovery: { kind: 'protocol' },
987
985
  category: 'overseas',
988
986
  catalogGroup: 'api',
@@ -995,7 +993,7 @@ const providerRegistry = {
995
993
  authKind: 'api_key',
996
994
  fallbackModels: tencentTokenHubModelIds,
997
995
  status: 'ready',
998
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
996
+ runtimeAdapter: { kind: 'openai-compatible' },
999
997
  modelDiscovery: { kind: 'protocol' },
1000
998
  category: 'domestic',
1001
999
  catalogGroup: 'api',
@@ -1008,7 +1006,7 @@ const providerRegistry = {
1008
1006
  authKind: 'api_key',
1009
1007
  fallbackModels: stepfunModelIds,
1010
1008
  status: 'ready',
1011
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
1009
+ runtimeAdapter: { kind: 'openai-compatible' },
1012
1010
  modelDiscovery: { kind: 'protocol' },
1013
1011
  category: 'domestic',
1014
1012
  catalogGroup: 'api',
@@ -1021,7 +1019,7 @@ const providerRegistry = {
1021
1019
  authKind: 'api_key',
1022
1020
  fallbackModels: [...stepfunStepPlanModelIds],
1023
1021
  status: 'ready',
1024
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
1022
+ runtimeAdapter: { kind: 'openai-compatible' },
1025
1023
  modelDiscovery: { kind: 'protocol' },
1026
1024
  category: 'domestic',
1027
1025
  catalogGroup: 'plans',
@@ -1034,7 +1032,7 @@ const providerRegistry = {
1034
1032
  authKind: 'api_key',
1035
1033
  fallbackModels: [...stepfunGlobalStepPlanModelIds],
1036
1034
  status: 'ready',
1037
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
1035
+ runtimeAdapter: { kind: 'openai-compatible' },
1038
1036
  modelDiscovery: { kind: 'protocol' },
1039
1037
  category: 'overseas',
1040
1038
  catalogGroup: 'plans',
@@ -1047,7 +1045,7 @@ const providerRegistry = {
1047
1045
  authKind: 'api_key',
1048
1046
  fallbackModels: stepfunGlobalModelIds,
1049
1047
  status: 'ready',
1050
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
1048
+ runtimeAdapter: { kind: 'openai-compatible' },
1051
1049
  modelDiscovery: { kind: 'protocol' },
1052
1050
  category: 'overseas',
1053
1051
  catalogGroup: 'api',
@@ -1060,7 +1058,7 @@ const providerRegistry = {
1060
1058
  authKind: 'api_key',
1061
1059
  fallbackModels: ['doubao-seed-2-0-pro-260215'],
1062
1060
  status: 'ready',
1063
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
1061
+ runtimeAdapter: { kind: 'openai-compatible' },
1064
1062
  modelDiscovery: {
1065
1063
  kind: 'fallback',
1066
1064
  reason: 'Ark model discovery is a control-plane API that requires AK/SK signing; inference API keys cannot call it',
@@ -1076,7 +1074,7 @@ const providerRegistry = {
1076
1074
  authKind: 'api_key',
1077
1075
  fallbackModels: deepinfraModelIds,
1078
1076
  status: 'ready',
1079
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
1077
+ runtimeAdapter: { kind: 'openai-compatible' },
1080
1078
  modelDiscovery: { kind: 'protocol', path: '/v1/models' },
1081
1079
  category: 'overseas',
1082
1080
  catalogGroup: 'api',
@@ -1089,7 +1087,7 @@ const providerRegistry = {
1089
1087
  authKind: 'api_key',
1090
1088
  fallbackModels: groqModelIds,
1091
1089
  status: 'ready',
1092
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
1090
+ runtimeAdapter: { kind: 'openai-compatible' },
1093
1091
  modelDiscovery: { kind: 'protocol' },
1094
1092
  category: 'overseas',
1095
1093
  catalogGroup: 'api',
@@ -1102,7 +1100,7 @@ const providerRegistry = {
1102
1100
  authKind: 'api_key',
1103
1101
  fallbackModels: openrouterModelIds,
1104
1102
  status: 'ready',
1105
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
1103
+ runtimeAdapter: { kind: 'openai-compatible' },
1106
1104
  modelDiscovery: { kind: 'protocol' },
1107
1105
  category: 'overseas',
1108
1106
  catalogGroup: 'aggregators',
@@ -1115,7 +1113,7 @@ const providerRegistry = {
1115
1113
  authKind: 'api_key',
1116
1114
  fallbackModels: alibabaModelIds,
1117
1115
  status: 'ready',
1118
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
1116
+ runtimeAdapter: { kind: 'openai-compatible' },
1119
1117
  modelDiscovery: { kind: 'protocol' },
1120
1118
  category: 'overseas',
1121
1119
  catalogGroup: 'api',
@@ -1128,7 +1126,7 @@ const providerRegistry = {
1128
1126
  authKind: 'api_key',
1129
1127
  fallbackModels: alibabaCnModelIds,
1130
1128
  status: 'ready',
1131
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
1129
+ runtimeAdapter: { kind: 'openai-compatible' },
1132
1130
  modelDiscovery: { kind: 'protocol' },
1133
1131
  category: 'domestic',
1134
1132
  catalogGroup: 'api',
@@ -1141,7 +1139,7 @@ const providerRegistry = {
1141
1139
  authKind: 'api_key',
1142
1140
  fallbackModels: [...alibabaCodingPlanModelIds],
1143
1141
  status: 'ready',
1144
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
1142
+ runtimeAdapter: { kind: 'openai-compatible' },
1145
1143
  modelDiscovery: { kind: 'protocol' },
1146
1144
  category: 'domestic',
1147
1145
  catalogGroup: 'plans',
@@ -1154,7 +1152,7 @@ const providerRegistry = {
1154
1152
  authKind: 'api_key',
1155
1153
  fallbackModels: [...alibabaCodingPlanModelIds],
1156
1154
  status: 'ready',
1157
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
1155
+ runtimeAdapter: { kind: 'openai-compatible' },
1158
1156
  modelDiscovery: { kind: 'protocol' },
1159
1157
  category: 'overseas',
1160
1158
  catalogGroup: 'plans',
@@ -1169,7 +1167,6 @@ const providerRegistry = {
1169
1167
  status: 'ready',
1170
1168
  runtimeAdapter: {
1171
1169
  kind: 'openai-compatible',
1172
- name: 'provider',
1173
1170
  responses: {
1174
1171
  adapter: 'open-responses',
1175
1172
  reasoningReplay: 'plaintext-summary',
@@ -1190,7 +1187,6 @@ const providerRegistry = {
1190
1187
  status: 'ready',
1191
1188
  runtimeAdapter: {
1192
1189
  kind: 'openai-compatible',
1193
- name: 'provider',
1194
1190
  responses: {
1195
1191
  adapter: 'open-responses',
1196
1192
  reasoningReplay: 'plaintext-summary',
@@ -1209,7 +1205,7 @@ const providerRegistry = {
1209
1205
  authKind: 'api_key',
1210
1206
  fallbackModels: [],
1211
1207
  status: 'ready',
1212
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
1208
+ runtimeAdapter: { kind: 'openai-compatible' },
1213
1209
  protocolAdapters: {
1214
1210
  'anthropic-messages': { kind: 'anthropic', auth: 'bearer', normalizeBaseUrl: true },
1215
1211
  },
@@ -1249,7 +1245,6 @@ const providerRegistry = {
1249
1245
  status: 'ready',
1250
1246
  runtimeAdapter: {
1251
1247
  kind: 'openai-compatible',
1252
- name: 'provider',
1253
1248
  requireBaseUrl: true,
1254
1249
  replayAssistantReasoningAs: 'reasoning',
1255
1250
  },
@@ -1267,7 +1262,6 @@ const providerRegistry = {
1267
1262
  status: 'ready',
1268
1263
  runtimeAdapter: {
1269
1264
  kind: 'openai-compatible',
1270
- name: 'provider',
1271
1265
  includeUsage: true,
1272
1266
  replayAssistantReasoningAs: 'reasoning',
1273
1267
  },
@@ -1283,7 +1277,7 @@ const providerRegistry = {
1283
1277
  authKind: 'none',
1284
1278
  fallbackModels: ['llama3.2', 'qwen2.5-coder', 'gemma3'],
1285
1279
  status: 'ready',
1286
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
1280
+ runtimeAdapter: { kind: 'openai-compatible' },
1287
1281
  modelDiscovery: { kind: 'ollama' },
1288
1282
  category: 'local',
1289
1283
  catalogGroup: 'local',
@@ -1295,7 +1289,7 @@ const providerRegistry = {
1295
1289
  authKind: 'none',
1296
1290
  fallbackModels: [],
1297
1291
  status: 'ready',
1298
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
1292
+ runtimeAdapter: { kind: 'openai-compatible' },
1299
1293
  modelDiscovery: { kind: 'protocol' },
1300
1294
  category: 'local',
1301
1295
  catalogGroup: 'local',
@@ -1307,51 +1301,31 @@ const providerRegistry = {
1307
1301
  authKind: 'optional_api_key',
1308
1302
  fallbackModels: ['qwen3-8b'],
1309
1303
  status: 'ready',
1310
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider' },
1304
+ runtimeAdapter: { kind: 'openai-compatible' },
1311
1305
  modelDiscovery: { kind: 'protocol' },
1312
1306
  category: 'local',
1313
1307
  catalogGroup: 'local',
1314
1308
  catalogOrder: 17.5,
1315
1309
  },
1316
- 'openai-compatible': {
1317
- label: 'Custom relay (OpenAI Chat-compatible)',
1310
+ custom: {
1311
+ label: 'Custom connection',
1318
1312
  baseUrl: '',
1319
1313
  authKind: 'api_key',
1320
1314
  fallbackModels: [],
1321
1315
  status: 'ready',
1322
- runtimeAdapter: { kind: 'openai-compatible', name: 'connection', requireBaseUrl: true },
1323
- modelDiscovery: { kind: 'protocol' },
1324
- category: 'custom',
1325
- catalogGroup: 'aggregators',
1326
- catalogOrder: 18,
1327
- },
1328
- 'openai-responses-compatible': {
1329
- label: 'Custom relay (OpenAI Responses)',
1330
- baseUrl: '',
1331
- authKind: 'api_key',
1332
- fallbackModels: [],
1333
- status: 'ready',
1334
- runtimeAdapter: {
1335
- kind: 'openai',
1336
- apiProtocol: 'openai-responses',
1337
- responses: { adapter: 'openai', reasoningReplay: 'encrypted-content' },
1316
+ runtimeAdapter: { kind: 'openai-compatible', requireBaseUrl: true },
1317
+ protocolAdapters: {
1318
+ 'openai-responses': {
1319
+ kind: 'openai',
1320
+ apiProtocol: 'openai-responses',
1321
+ responses: { adapter: 'openai', reasoningReplay: 'encrypted-content' },
1322
+ },
1323
+ 'anthropic-messages': { kind: 'anthropic', auth: 'api-key', normalizeBaseUrl: true },
1338
1324
  },
1339
1325
  modelDiscovery: { kind: 'protocol' },
1340
1326
  category: 'custom',
1341
1327
  catalogGroup: 'aggregators',
1342
- catalogOrder: 18.1,
1343
- },
1344
- 'anthropic-compatible': {
1345
- label: 'Custom relay (Anthropic)',
1346
- baseUrl: '',
1347
- authKind: 'api_key',
1348
- fallbackModels: [],
1349
- status: 'ready',
1350
- runtimeAdapter: { kind: 'anthropic', auth: 'api-key', normalizeBaseUrl: true },
1351
- modelDiscovery: { kind: 'protocol' },
1352
- category: 'custom',
1353
- catalogGroup: 'aggregators',
1354
- catalogOrder: 18.2,
1328
+ catalogOrder: 18,
1355
1329
  },
1356
1330
  'github-copilot': {
1357
1331
  label: githubCopilot.name,
@@ -1359,7 +1333,7 @@ const providerRegistry = {
1359
1333
  authKind: 'oauth_token',
1360
1334
  fallbackModels: githubCopilotModelIds,
1361
1335
  status: 'ready',
1362
- runtimeAdapter: { kind: 'openai-compatible', name: 'provider', includeUsage: false },
1336
+ runtimeAdapter: { kind: 'openai-compatible', includeUsage: false },
1363
1337
  protocolAdapters: {
1364
1338
  'anthropic-messages': {
1365
1339
  kind: 'anthropic',