maka-agent 0.2.0-dev.41.20260918 → 0.2.0-dev.42.20260918
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.
- package/LICENSE +7 -4
- package/native/runtime-host-windows-task-launcher/prebuilds/win32-x64/maka-runtime-host-task-launcher.exe +0 -0
- package/node_modules/@maka/core/dist/client-plugin-bridge.js +19 -0
- package/node_modules/@maka/core/dist/events.js +58 -7
- package/node_modules/@maka/core/dist/interaction.js +38 -4
- package/node_modules/@maka/core/dist/llm-connections.js +4 -0
- package/node_modules/@maka/core/dist/model-metadata.js +89 -0
- package/node_modules/@maka/core/dist/recall.js +198 -15
- package/node_modules/@maka/core/dist/redaction.js +8 -0
- package/node_modules/@maka/core/dist/session-reference.js +149 -0
- package/node_modules/@maka/core/package.json +2 -0
- package/node_modules/@maka/runtime/dist/model-factory.js +5 -3
- package/node_modules/@maka/runtime/dist/model-history.js +13 -2
- package/node_modules/@maka/runtime/dist/plugin-client-bridge-service.js +308 -0
- package/node_modules/@maka/runtime/dist/plugin-composition-loader.js +4 -3
- package/node_modules/@maka/runtime/dist/plugin-data-services.js +3 -3
- package/node_modules/@maka/runtime/dist/recall-tools.js +70 -2
- package/node_modules/@maka/runtime/package.json +1 -0
- package/node_modules/@maka/runtime-host/dist/protocol/index.js +7 -1
- package/node_modules/@maka/runtime-host/dist/protocol/operations.js +5 -0
- package/node_modules/@maka/runtime-host/dist/protocol/plugin-platform.js +269 -0
- package/node_modules/@maka/runtime-host/dist/protocol/workhub-coordination.js +2 -0
- package/node_modules/@maka/runtime-host/dist/server/execution-composition.js +46 -6
- package/node_modules/@maka/runtime-host/dist/server/extension-package-manifest.js +19 -1
- package/node_modules/@maka/runtime-host/dist/server/plugin-package-loader.js +88 -14
- package/node_modules/@maka/runtime-host/dist/server/plugin-package-store.js +22 -5
- package/node_modules/@maka/runtime-host/dist/server/plugin-platform-coordinator.js +122 -1
- package/node_modules/@maka/runtime-host/dist/server/plugin-platform.js +120 -1
- package/node_modules/@maka/runtime-host/dist/server/recall-material-fetch.js +92 -0
- package/node_modules/@maka/runtime-host/dist/server/root-turn-coordinator.js +14 -1
- package/node_modules/@maka/runtime-host/dist/server/session-catalog-coordinator.js +17 -1
- package/node_modules/@maka/runtime-host/dist/server/workhub-coordination-action-gate.js +67 -3
- package/node_modules/@maka/runtime-host/dist/server/workhub-coordination-coordinator.js +9 -3
- package/node_modules/@maka/runtime-host/dist/server/workhub-target-execution-authority.js +161 -0
- package/package.json +1 -1
package/LICENSE
CHANGED
|
@@ -465,16 +465,19 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
465
465
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
466
466
|
THE SOFTWARE.
|
|
467
467
|
|
|
468
|
-
electron-builder dependency
|
|
468
|
+
electron-builder dependency patches
|
|
469
469
|
|
|
470
470
|
Source: https://www.npmjs.com/package/app-builder-lib/v/26.15.3
|
|
471
|
+
https://www.npmjs.com/package/electron-updater/v/6.8.9
|
|
471
472
|
Repository: https://github.com/electron-userland/electron-builder
|
|
472
|
-
|
|
473
|
+
Versions: app-builder-lib 26.15.3; electron-updater 6.8.9
|
|
473
474
|
Dependency patch: patches/app-builder-lib+26.15.3.patch
|
|
475
|
+
patches/electron-updater+6.8.9.patch
|
|
474
476
|
License: MIT
|
|
475
477
|
|
|
476
|
-
Maka redistributes
|
|
477
|
-
from ZIP archives
|
|
478
|
+
Maka redistributes source patches that omit modification and access times
|
|
479
|
+
from ZIP archives and skip withdrawn prereleases whose update metadata is
|
|
480
|
+
missing. The following MIT License applies to that material:
|
|
478
481
|
|
|
479
482
|
The MIT License (MIT)
|
|
480
483
|
|
|
Binary file
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Licensed to the Apache Software Foundation (ASF) under one
|
|
3
|
+
* or more contributor license agreements. See the NOTICE file
|
|
4
|
+
* distributed with this work for additional information
|
|
5
|
+
* regarding copyright ownership. The ASF licenses this file
|
|
6
|
+
* to you under the Apache License, Version 2.0 (the
|
|
7
|
+
* "License"); you may not use this file except in compliance
|
|
8
|
+
* with the License. You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing,
|
|
13
|
+
* software distributed under the License is distributed on an
|
|
14
|
+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
15
|
+
* KIND, either express or implied. See the License for the
|
|
16
|
+
* specific language governing permissions and limitations
|
|
17
|
+
* under the License.
|
|
18
|
+
*/
|
|
19
|
+
export {};
|
|
@@ -79,7 +79,16 @@ export function hasMeaningfulMessageContent(content) {
|
|
|
79
79
|
(content.directoryReferences?.length ?? 0) > 0);
|
|
80
80
|
}
|
|
81
81
|
const ATTACHMENT_REF_SHAPE = defineObjectShape()(['kind', 'name', 'mimeType', 'bytes', 'ref'], []);
|
|
82
|
-
const QUOTE_REF_SHAPE = defineObjectShape()(['text'], [
|
|
82
|
+
const QUOTE_REF_SHAPE = defineObjectShape()(['text'], [
|
|
83
|
+
'label',
|
|
84
|
+
'sourceTurnId',
|
|
85
|
+
'sourceSessionId',
|
|
86
|
+
'sourceSessionName',
|
|
87
|
+
'sourceCapturedAt',
|
|
88
|
+
'sourceTruncated',
|
|
89
|
+
]);
|
|
90
|
+
const QUOTE_REF_SESSION_ID_MAX_LENGTH = 512;
|
|
91
|
+
const QUOTE_REF_SESSION_NAME_MAX_LENGTH = 200;
|
|
83
92
|
const INLINE_REFERENCE_SHAPE = defineObjectShape()(['kind', 'value', 'label', 'start'], []);
|
|
84
93
|
const INLINE_SKILL_REFERENCE_VALUE = /^\/skill:[A-Za-z0-9._-]+$/;
|
|
85
94
|
export const INLINE_REFERENCE_MAX_COUNT = 32;
|
|
@@ -113,6 +122,22 @@ export function normalizeMessageContent(content) {
|
|
|
113
122
|
text: quote.text,
|
|
114
123
|
...(quote.label !== undefined ? { label: quote.label } : {}),
|
|
115
124
|
...(quote.sourceTurnId !== undefined ? { sourceTurnId: quote.sourceTurnId } : {}),
|
|
125
|
+
...(quote.sourceSessionId !== undefined
|
|
126
|
+
? { sourceSessionId: quote.sourceSessionId }
|
|
127
|
+
: {}),
|
|
128
|
+
...(quote.sourceSessionName !== undefined
|
|
129
|
+
? { sourceSessionName: quote.sourceSessionName }
|
|
130
|
+
: {}),
|
|
131
|
+
...(quote.sourceCapturedAt !== undefined
|
|
132
|
+
? {
|
|
133
|
+
sourceCapturedAt: Object.is(quote.sourceCapturedAt, -0)
|
|
134
|
+
? 0
|
|
135
|
+
: quote.sourceCapturedAt,
|
|
136
|
+
}
|
|
137
|
+
: {}),
|
|
138
|
+
...(quote.sourceTruncated !== undefined
|
|
139
|
+
? { sourceTruncated: quote.sourceTruncated }
|
|
140
|
+
: {}),
|
|
116
141
|
})),
|
|
117
142
|
}
|
|
118
143
|
: {}),
|
|
@@ -205,11 +230,33 @@ export function isInlineReference(value) {
|
|
|
205
230
|
})));
|
|
206
231
|
}
|
|
207
232
|
export function isQuoteRef(value) {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
233
|
+
const record = isRecord(value) ? value : undefined;
|
|
234
|
+
const sourceFields = record
|
|
235
|
+
? [
|
|
236
|
+
record.sourceSessionId,
|
|
237
|
+
record.sourceSessionName,
|
|
238
|
+
record.sourceCapturedAt,
|
|
239
|
+
record.sourceTruncated,
|
|
240
|
+
]
|
|
241
|
+
: [];
|
|
242
|
+
const hasSourceMetadata = sourceFields.some((field) => field !== undefined);
|
|
243
|
+
return (record !== undefined &&
|
|
244
|
+
hasExactShape(record, QUOTE_REF_SHAPE) &&
|
|
245
|
+
typeof record.text === 'string' &&
|
|
246
|
+
(record.label === undefined || typeof record.label === 'string') &&
|
|
247
|
+
(record.sourceTurnId === undefined || typeof record.sourceTurnId === 'string') &&
|
|
248
|
+
(!hasSourceMetadata ||
|
|
249
|
+
(typeof record.sourceSessionId === 'string' &&
|
|
250
|
+
record.sourceSessionId.length > 0 &&
|
|
251
|
+
record.sourceSessionId.length <= QUOTE_REF_SESSION_ID_MAX_LENGTH &&
|
|
252
|
+
typeof record.sourceSessionName === 'string' &&
|
|
253
|
+
record.sourceSessionName.length > 0 &&
|
|
254
|
+
record.sourceSessionName.length <= QUOTE_REF_SESSION_NAME_MAX_LENGTH &&
|
|
255
|
+
typeof record.sourceCapturedAt === 'number' &&
|
|
256
|
+
Number.isFinite(record.sourceCapturedAt) &&
|
|
257
|
+
record.sourceCapturedAt >= 0 &&
|
|
258
|
+
record.sourceCapturedAt <= 8.64e15 &&
|
|
259
|
+
typeof record.sourceTruncated === 'boolean')));
|
|
213
260
|
}
|
|
214
261
|
export function isAttachmentRef(value) {
|
|
215
262
|
return (isRecord(value) &&
|
|
@@ -339,7 +386,11 @@ function inlineReferencesEqual(left, right) {
|
|
|
339
386
|
function quoteRefsEqual(left, right) {
|
|
340
387
|
return (left.text === right.text &&
|
|
341
388
|
left.label === right.label &&
|
|
342
|
-
left.sourceTurnId === right.sourceTurnId
|
|
389
|
+
left.sourceTurnId === right.sourceTurnId &&
|
|
390
|
+
left.sourceSessionId === right.sourceSessionId &&
|
|
391
|
+
left.sourceSessionName === right.sourceSessionName &&
|
|
392
|
+
left.sourceCapturedAt === right.sourceCapturedAt &&
|
|
393
|
+
left.sourceTruncated === right.sourceTruncated);
|
|
343
394
|
}
|
|
344
395
|
function attachmentRefsEqual(left, right) {
|
|
345
396
|
if (left.kind !== right.kind ||
|
|
@@ -77,8 +77,8 @@ const CLOSURE_OUTCOME_SHAPE = defineObjectShape()(['kind', 'reason', 'committedA
|
|
|
77
77
|
const QUESTION_SHAPE = defineObjectShape()(['question', 'options'], []);
|
|
78
78
|
const OPTION_SHAPE = defineObjectShape()(['label'], ['description']);
|
|
79
79
|
const FORM_REQUESTER_SHAPE = defineObjectShape()(['name'], ['source']);
|
|
80
|
-
const FORM_OPTION_SHAPE = defineObjectShape()(['value', 'label'], []);
|
|
81
|
-
const FORM_STRING_FIELD_SHAPE = defineObjectShape()(['kind', 'name', 'label', 'required'], ['description', 'default', 'minLength', 'maxLength', 'format']);
|
|
80
|
+
const FORM_OPTION_SHAPE = defineObjectShape()(['value', 'label'], ['description']);
|
|
81
|
+
const FORM_STRING_FIELD_SHAPE = defineObjectShape()(['kind', 'name', 'label', 'required'], ['description', 'default', 'minLength', 'maxLength', 'format', 'presentation']);
|
|
82
82
|
const FORM_NUMBER_FIELD_SHAPE = defineObjectShape()(['kind', 'name', 'label', 'required'], ['description', 'default', 'minimum', 'maximum']);
|
|
83
83
|
const FORM_BOOLEAN_FIELD_SHAPE = defineObjectShape()(['kind', 'name', 'label', 'required'], ['description', 'default']);
|
|
84
84
|
const FORM_SINGLE_SELECT_FIELD_SHAPE = defineObjectShape()(['kind', 'name', 'label', 'required', 'options'], ['description', 'default']);
|
|
@@ -405,6 +405,11 @@ function projectInteractionFormField(field) {
|
|
|
405
405
|
const options = field.options.map((option) => ({
|
|
406
406
|
...option,
|
|
407
407
|
label: projectInteractionReviewText(option.label, INTERACTION_FORM_FIELD_LABEL_MAX_BYTES),
|
|
408
|
+
...(option.description === undefined
|
|
409
|
+
? {}
|
|
410
|
+
: {
|
|
411
|
+
description: projectInteractionReviewText(option.description, INTERACTION_FORM_FIELD_DESCRIPTION_MAX_BYTES, true),
|
|
412
|
+
}),
|
|
408
413
|
}));
|
|
409
414
|
if (new Set(options.map((option) => option.label)).size !== options.length) {
|
|
410
415
|
throw new Error('Form option labels collide after safe projection');
|
|
@@ -573,7 +578,15 @@ function decodeFormField(value) {
|
|
|
573
578
|
: {
|
|
574
579
|
format: oneOf(record.format, ['email', 'uri', 'date', 'date-time'], 'form string format'),
|
|
575
580
|
}),
|
|
581
|
+
...(record.presentation === undefined
|
|
582
|
+
? {}
|
|
583
|
+
: {
|
|
584
|
+
presentation: oneOf(record.presentation, ['model_picker'], 'string presentation'),
|
|
585
|
+
}),
|
|
576
586
|
};
|
|
587
|
+
if (field.presentation === 'model_picker' && field.format !== undefined) {
|
|
588
|
+
throw new Error('Model picker string field cannot declare a format');
|
|
589
|
+
}
|
|
577
590
|
if (field.default !== undefined && !isInteractionFormFieldValueValid(field, field.default)) {
|
|
578
591
|
throw new Error('Invalid form string default');
|
|
579
592
|
}
|
|
@@ -674,6 +687,11 @@ function decodeFormOptions(value) {
|
|
|
674
687
|
return Object.freeze({
|
|
675
688
|
value: boundedText(record.value, 'form option value', INTERACTION_FORM_VALUE_MAX_BYTES),
|
|
676
689
|
label: boundedString(record.label, 'form option label', INTERACTION_FORM_FIELD_LABEL_MAX_BYTES),
|
|
690
|
+
...(record.description === undefined
|
|
691
|
+
? {}
|
|
692
|
+
: {
|
|
693
|
+
description: boundedText(record.description, 'form option description', INTERACTION_FORM_FIELD_DESCRIPTION_MAX_BYTES),
|
|
694
|
+
}),
|
|
677
695
|
});
|
|
678
696
|
});
|
|
679
697
|
if (new Set(options.map((option) => option.value)).size !== options.length) {
|
|
@@ -737,7 +755,8 @@ export function isInteractionFormFieldValueValid(field, value) {
|
|
|
737
755
|
const length = [...value].length;
|
|
738
756
|
return ((field.minLength === undefined || length >= field.minLength) &&
|
|
739
757
|
(field.maxLength === undefined || length <= field.maxLength) &&
|
|
740
|
-
matchesStringFormat(value, field.format)
|
|
758
|
+
matchesStringFormat(value, field.format) &&
|
|
759
|
+
(field.presentation !== 'model_picker' || isCanonicalModelChoiceValue(value)));
|
|
741
760
|
}
|
|
742
761
|
if (field.kind === 'number' || field.kind === 'integer') {
|
|
743
762
|
return (typeof value === 'number' &&
|
|
@@ -836,8 +855,9 @@ function formFieldMaximumEnvelope(field) {
|
|
|
836
855
|
if (field.format === 'date')
|
|
837
856
|
return '0000-01-01';
|
|
838
857
|
const maximumCodePoints = Math.min(field.maxLength ?? INTERACTION_FORM_VALUE_MAX_BYTES, INTERACTION_FORM_VALUE_MAX_BYTES);
|
|
839
|
-
if (field.format === 'date-time')
|
|
858
|
+
if (field.format === 'date-time' || field.presentation === 'model_picker') {
|
|
840
859
|
return '0'.repeat(maximumCodePoints);
|
|
860
|
+
}
|
|
841
861
|
return '\u0001'.repeat(maximumCodePoints);
|
|
842
862
|
}
|
|
843
863
|
if (field.kind === 'number' || field.kind === 'integer')
|
|
@@ -852,6 +872,17 @@ function formFieldMaximumEnvelope(field) {
|
|
|
852
872
|
.slice(0, field.maxItems ?? field.options.length)
|
|
853
873
|
.map((option) => option.value);
|
|
854
874
|
}
|
|
875
|
+
function isCanonicalModelChoiceValue(value) {
|
|
876
|
+
const components = value.split(':');
|
|
877
|
+
if (components.length !== 3 || components.some((component) => component.length === 0))
|
|
878
|
+
return false;
|
|
879
|
+
try {
|
|
880
|
+
return components.every((component) => encodeURIComponent(decodeURIComponent(component)) === component);
|
|
881
|
+
}
|
|
882
|
+
catch {
|
|
883
|
+
return false;
|
|
884
|
+
}
|
|
885
|
+
}
|
|
855
886
|
function serializedByteLength(value) {
|
|
856
887
|
return UTF8.encode(JSON.stringify(value)).byteLength;
|
|
857
888
|
}
|
|
@@ -884,6 +915,9 @@ function formFieldWitness(field) {
|
|
|
884
915
|
const fractionalLength = minLength <= 20 ? 0 : Math.max(1, minLength - 21);
|
|
885
916
|
value = fractionalLength === 0 ? `${base}Z` : `${base}.${'0'.repeat(fractionalLength)}Z`;
|
|
886
917
|
}
|
|
918
|
+
else if (field.presentation === 'model_picker') {
|
|
919
|
+
value = `a:a:${'a'.repeat(Math.max(1, minLength - 4))}`;
|
|
920
|
+
}
|
|
887
921
|
else {
|
|
888
922
|
value = 'a'.repeat(minLength);
|
|
889
923
|
}
|
|
@@ -27,6 +27,10 @@ const MODEL_MODALITIES = ['text', 'image', 'audio', 'pdf', 'video'];
|
|
|
27
27
|
export function isModelModality(value) {
|
|
28
28
|
return MODEL_MODALITIES.includes(value);
|
|
29
29
|
}
|
|
30
|
+
/** Stable client/Host value for one exact configured connection and model. */
|
|
31
|
+
export function connectionModelChoiceValue(connectionId, connectionSlug, model) {
|
|
32
|
+
return `${encodeURIComponent(connectionId)}:${encodeURIComponent(connectionSlug)}:${encodeURIComponent(model)}`;
|
|
33
|
+
}
|
|
30
34
|
/**
|
|
31
35
|
* Read-time normalizer: the model ids a stored connection exposes.
|
|
32
36
|
*
|
|
@@ -318,6 +318,92 @@ function ollamaCloudThinkingModels(active) {
|
|
|
318
318
|
!id.startsWith('gpt-oss'))
|
|
319
319
|
.map(([id]) => [id, { thinkingOptions: OLLAMA_CLOUD_STANDARD_THINKING_OPTIONS }]));
|
|
320
320
|
}
|
|
321
|
+
// Command Code declares no reasoning metadata over its API — the public
|
|
322
|
+
// `/provider/v1/models` listing carries only id/object/created/owned_by/name/
|
|
323
|
+
// context_length/supported_endpoints, and `/provider/v1/models/<id>` is not a
|
|
324
|
+
// route. The selectable `reasoning_effort` levels therefore live only in the
|
|
325
|
+
// official CLI's bundled model table, which the MIT `pi-commandcode-provider`
|
|
326
|
+
// project and its derivative `Mars-Sea/dsh-commandcode-provider`
|
|
327
|
+
// (`src/capabilities.ts`, `KNOWN_EFFORTS`) are the traceable extraction of.
|
|
328
|
+
//
|
|
329
|
+
// Ported from `dsh-commandcode-provider`'s `KNOWN_EFFORTS`, which was
|
|
330
|
+
// re-verified against `command-code@1.53.0` (`dist/cli.mjs`'s provider effort
|
|
331
|
+
// map). The reference keeps a running changelog of which CLI release added or
|
|
332
|
+
// removed each line; that history is summarized here per entry. We pin
|
|
333
|
+
// `command-code@1.54.0`, so a future re-sync should re-read that release's
|
|
334
|
+
// bundle — a wrong effort word is refused by the wire or ignored by the model,
|
|
335
|
+
// it is not silently mis-billed.
|
|
336
|
+
//
|
|
337
|
+
// Two rules from the reference that must survive re-syncs:
|
|
338
|
+
// - Models that reason automatically under a depth Command Code chooses
|
|
339
|
+
// (Tencent Hy3/Hy4 without levels, GLM-5/5.1/5.2-Fast, and the previews in
|
|
340
|
+
// the reference's `KNOWN_THINKING_MODELS`) carry no selectable effort, so
|
|
341
|
+
// they are absent here and the picker offers no selector for them.
|
|
342
|
+
// - Only the Provider-API table is authoritative for this route. Do not add
|
|
343
|
+
// levels observed on the OAuth (anthropic/openai) tables.
|
|
344
|
+
const COMMAND_CODE_MODEL_METADATA = {
|
|
345
|
+
'Qwen/Qwen3.8-Max': { thinkingOptions: { efforts: ['low', 'medium', 'xhigh'] } },
|
|
346
|
+
'Qwen/Qwen3.8-Max-0902': { thinkingOptions: { efforts: ['low', 'medium', 'xhigh'] } },
|
|
347
|
+
'Qwen/Qwen3.8-27B': { thinkingOptions: { efforts: ['low', 'medium', 'xhigh'] } },
|
|
348
|
+
'Qwen/Qwen3.8-Flash': { thinkingOptions: { efforts: ['low', 'medium', 'xhigh'] } },
|
|
349
|
+
'claude-fable-5-1': { thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh', 'max'] } },
|
|
350
|
+
'claude-fable-5': { thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh', 'max'] } },
|
|
351
|
+
'claude-opus-4-7': { thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh', 'max'] } },
|
|
352
|
+
'claude-opus-4-8': { thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh', 'max'] } },
|
|
353
|
+
'claude-opus-5': { thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh', 'max'] } },
|
|
354
|
+
'claude-sonnet-4-6': { thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh', 'max'] } },
|
|
355
|
+
'claude-sonnet-5': { thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh', 'max'] } },
|
|
356
|
+
// 1.39.0 added the model; 1.39.1 dropped `medium`; 1.39.2 ships this set.
|
|
357
|
+
'deepseek/deepseek-v4-flash-fast': { thinkingOptions: { efforts: ['low', 'high', 'max'] } },
|
|
358
|
+
// 1.53.0 added DeepSeek V4.1 Flash with this set.
|
|
359
|
+
'deepseek/deepseek-v4.1-flash': { thinkingOptions: { efforts: ['low', 'high', 'max'] } },
|
|
360
|
+
'deepseek/deepseek-v4-flash': { thinkingOptions: { efforts: ['high', 'max'] } },
|
|
361
|
+
'deepseek/deepseek-v4-flash-vision-exp': { thinkingOptions: { efforts: ['high', 'max'] } },
|
|
362
|
+
'deepseek/deepseek-v4-pro': { thinkingOptions: { efforts: ['high', 'max'] } },
|
|
363
|
+
'google/gemini-3.1-flash-lite': { thinkingOptions: { efforts: ['low', 'medium', 'high'] } },
|
|
364
|
+
'google/gemini-3.5-flash': { thinkingOptions: { efforts: ['low', 'medium', 'high'] } },
|
|
365
|
+
'google/gemini-3.5-flash-lite': { thinkingOptions: { efforts: ['low', 'medium', 'high'] } },
|
|
366
|
+
'google/gemini-3.6-flash': { thinkingOptions: { efforts: ['low', 'medium', 'high'] } },
|
|
367
|
+
'google/gemini-3.7-flash': { thinkingOptions: { efforts: ['low', 'medium', 'high'] } },
|
|
368
|
+
// 1.43.0 added Gemini 3.8 Flash with the family's three-level set.
|
|
369
|
+
'google/gemini-3.8-flash': { thinkingOptions: { efforts: ['low', 'medium', 'high'] } },
|
|
370
|
+
'gpt-5.3-codex': { thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh'] } },
|
|
371
|
+
'gpt-5.4': { thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh'] } },
|
|
372
|
+
'gpt-5.4-mini': { thinkingOptions: { efforts: ['low', 'medium', 'high'] } },
|
|
373
|
+
'gpt-5.5': { thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh'] } },
|
|
374
|
+
'gpt-5.6-luna': { thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh', 'max'] } },
|
|
375
|
+
'gpt-5.6-sol': { thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh', 'max'] } },
|
|
376
|
+
'gpt-5.6-terra': { thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh', 'max'] } },
|
|
377
|
+
// 1.39.3 gained selectable levels (previously thought automatically).
|
|
378
|
+
'moonshotai/Kimi-K3': { thinkingOptions: { efforts: ['low', 'high', 'max'] } },
|
|
379
|
+
'sakana/fugu-ultra': { thinkingOptions: { efforts: ['high', 'xhigh'] } },
|
|
380
|
+
// 1.38.0 gained selectable levels (previously thought automatically).
|
|
381
|
+
'tencent/hy4-preview': { thinkingOptions: { efforts: ['low', 'medium', 'high'] } },
|
|
382
|
+
'xai/grok-4.5': { thinkingOptions: { efforts: ['low', 'medium', 'high'] } },
|
|
383
|
+
'xai/grok-4.6': { thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh'] } },
|
|
384
|
+
// Successor of `stealth/ox-alpha`, removed in 1.34.0 with the same set.
|
|
385
|
+
'z-ai/glm-5.3-flash': { thinkingOptions: { efforts: ['low', 'high', 'max'] } },
|
|
386
|
+
'zai-org/GLM-5.2': { thinkingOptions: { efforts: ['high', 'max'] } },
|
|
387
|
+
'zai-org/GLM-5.3': { thinkingOptions: { efforts: ['low', 'high', 'max'] } },
|
|
388
|
+
// Muse Spark gained selectable levels in 1.45.0; 1.48.0 added `max` to 1.3
|
|
389
|
+
// only, so 1.3 and 1.3-contributor now differ.
|
|
390
|
+
'meta/muse-spark-1.1': { thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh'] } },
|
|
391
|
+
'meta/muse-spark-1.2': { thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh'] } },
|
|
392
|
+
'meta/muse-spark-1.2-contributor': {
|
|
393
|
+
thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh'] },
|
|
394
|
+
},
|
|
395
|
+
'meta/muse-spark-1.3': {
|
|
396
|
+
thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh', 'max'] },
|
|
397
|
+
},
|
|
398
|
+
'meta/muse-spark-1.3-contributor': {
|
|
399
|
+
thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh'] },
|
|
400
|
+
},
|
|
401
|
+
// 1.49.0 added GPT-6 Astra with the five-level set.
|
|
402
|
+
'gpt-6-astra': { thinkingOptions: { efforts: ['low', 'medium', 'high', 'xhigh', 'max'] } },
|
|
403
|
+
// 1.51.3 gave MiniMax M3 selectable levels (read from the bundle; the
|
|
404
|
+
// 1.51.1–1.51.3 changelog had not been published at extraction time).
|
|
405
|
+
'MiniMaxAI/MiniMax-M3': { thinkingOptions: { efforts: ['low', 'medium', 'high'] } },
|
|
406
|
+
};
|
|
321
407
|
// Facts that models.dev cannot express: provider wire controls and
|
|
322
408
|
// access-path-specific aliases/limits. Standard model facts stay generated.
|
|
323
409
|
//
|
|
@@ -327,6 +413,9 @@ function buildStaticModelMetadata(active) {
|
|
|
327
413
|
return {
|
|
328
414
|
anthropic: ANTHROPIC_MODEL_OVERRIDES,
|
|
329
415
|
'claude-subscription': claudeSubscriptionModelMetadata(active),
|
|
416
|
+
// Both Command Code providers ride the same Provider-API effort table.
|
|
417
|
+
commandcode: COMMAND_CODE_MODEL_METADATA,
|
|
418
|
+
'commandcode-go': COMMAND_CODE_MODEL_METADATA,
|
|
330
419
|
'alibaba-token-plan-cn': {
|
|
331
420
|
'qwen3.8-max': {
|
|
332
421
|
thinkingOptions: { efforts: ['none', 'low', 'medium', 'xhigh'], toggle: true },
|