dominds 1.20.6 → 1.21.0
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/dist/cli/manual.js +0 -15
- package/dist/docs/llm-provider-isolation.md +3 -1
- package/dist/docs/llm-provider-isolation.zh.md +3 -1
- package/dist/docs/mcp-support.md +13 -4
- package/dist/docs/mcp-support.zh.md +13 -2
- package/dist/docs/team_mgmt-toolset.md +15 -15
- package/dist/docs/team_mgmt-toolset.zh.md +7 -6
- package/dist/llm/api-quirks.d.ts +1 -0
- package/dist/llm/api-quirks.js +103 -17
- package/dist/llm/client.d.ts +7 -1
- package/dist/llm/defaults.yaml +107 -53
- package/dist/llm/gen/anthropic.d.ts +8 -2
- package/dist/llm/gen/anthropic.js +932 -59
- package/dist/llm/gen/failure-classifier.js +45 -48
- package/dist/llm/gen/openai-compatible.d.ts +2 -2
- package/dist/llm/gen/openai-compatible.js +4 -4
- package/dist/llm/gen/openai.js +9 -2
- package/dist/llm/gen/registry.js +1 -0
- package/dist/llm/gen/tool-output-limit.js +1 -0
- package/dist/llm/kernel-driver/drive.js +108 -8
- package/dist/llm/kernel-driver/guardrails.d.ts +1 -0
- package/dist/llm/kernel-driver/guardrails.js +11 -0
- package/dist/llm/kernel-driver/tellask-special.d.ts +7 -1
- package/dist/llm/kernel-driver/tellask-special.js +96 -5
- package/dist/mcp/config.d.ts +14 -3
- package/dist/mcp/config.js +57 -14
- package/dist/mcp/manual-problems.js +30 -5
- package/dist/mcp/supervisor.js +71 -22
- package/dist/server/setup-routes.js +23 -6
- package/dist/server/snippets-routes.js +0 -24
- package/dist/team.d.ts +26 -11
- package/dist/team.js +107 -22
- package/dist/tool-availability.js +4 -3
- package/dist/tools/builtins.js +0 -1
- package/dist/tools/manual/render.d.ts +0 -1
- package/dist/tools/manual/render.js +0 -73
- package/dist/tools/manual/spec.d.ts +1 -4
- package/dist/tools/manual/spec.js +7 -6
- package/dist/tools/prompts/codex_inspect_and_patch_tools/en/tools.md +1 -1
- package/dist/tools/prompts/codex_inspect_and_patch_tools/zh/tools.md +1 -1
- package/dist/tools/prompts/control/en/index.md +2 -2
- package/dist/tools/prompts/control/en/tools.md +2 -2
- package/dist/tools/prompts/control/zh/index.md +2 -2
- package/dist/tools/prompts/control/zh/tools.md +2 -2
- package/dist/tools/prompts/mcp_admin/en/index.md +2 -2
- package/dist/tools/prompts/mcp_admin/en/tools.md +2 -2
- package/dist/tools/prompts/mcp_admin/zh/index.md +2 -2
- package/dist/tools/prompts/mcp_admin/zh/tools.md +2 -2
- package/dist/tools/prompts/os/en/index.md +2 -2
- package/dist/tools/prompts/os/en/tools.md +2 -2
- package/dist/tools/prompts/os/zh/index.md +2 -2
- package/dist/tools/prompts/os/zh/tools.md +2 -2
- package/dist/tools/prompts/personal_memory/en/index.md +2 -2
- package/dist/tools/prompts/personal_memory/en/tools.md +2 -2
- package/dist/tools/prompts/personal_memory/zh/index.md +2 -2
- package/dist/tools/prompts/personal_memory/zh/tools.md +2 -2
- package/dist/tools/prompts/team_memory/en/index.md +2 -2
- package/dist/tools/prompts/team_memory/en/tools.md +2 -2
- package/dist/tools/prompts/team_memory/zh/index.md +2 -2
- package/dist/tools/prompts/team_memory/zh/tools.md +2 -2
- package/dist/tools/prompts/ws_mod/en/index.md +2 -2
- package/dist/tools/prompts/ws_mod/en/tools.md +2 -2
- package/dist/tools/prompts/ws_mod/zh/index.md +2 -2
- package/dist/tools/prompts/ws_mod/zh/tools.md +2 -2
- package/dist/tools/prompts/ws_read/en/index.md +1 -1
- package/dist/tools/prompts/ws_read/zh/index.md +1 -1
- package/dist/tools/team_mgmt-manual.js +6 -6
- package/dist/tools/team_mgmt-mcp-manual.js +75 -91
- package/dist/tools/team_mgmt.js +26 -2
- package/dist/tools/toolset-manual.d.ts +0 -1
- package/dist/tools/toolset-manual.js +4 -15
- package/package.json +6 -6
- package/webapp/dist/assets/{_basePickBy-CCqhBZYD.js → _basePickBy-DALTrUR6.js} +3 -3
- package/webapp/dist/assets/{_basePickBy-CCqhBZYD.js.map → _basePickBy-DALTrUR6.js.map} +1 -1
- package/webapp/dist/assets/{_baseUniq-CGIbBnpr.js → _baseUniq-Ct6zuX8K.js} +2 -2
- package/webapp/dist/assets/{_baseUniq-CGIbBnpr.js.map → _baseUniq-Ct6zuX8K.js.map} +1 -1
- package/webapp/dist/assets/{arc-lGW9r3fU.js → arc-C8McUO1O.js} +2 -2
- package/webapp/dist/assets/{arc-lGW9r3fU.js.map → arc-C8McUO1O.js.map} +1 -1
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-BQjkiQRN.js → architectureDiagram-2XIMDMQ5-CEGC5ev9.js} +7 -7
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-BQjkiQRN.js.map → architectureDiagram-2XIMDMQ5-CEGC5ev9.js.map} +1 -1
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-yCoQKKPD.js → blockDiagram-WCTKOSBZ-_UHgnZ4O.js} +7 -7
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-yCoQKKPD.js.map → blockDiagram-WCTKOSBZ-_UHgnZ4O.js.map} +1 -1
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-BvR-EAr2.js → c4Diagram-IC4MRINW-H26UgYXJ.js} +3 -3
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-BvR-EAr2.js.map → c4Diagram-IC4MRINW-H26UgYXJ.js.map} +1 -1
- package/webapp/dist/assets/{channel-DLKhD5S_.js → channel-B3Np_FaY.js} +2 -2
- package/webapp/dist/assets/{channel-DLKhD5S_.js.map → channel-B3Np_FaY.js.map} +1 -1
- package/webapp/dist/assets/{chunk-4BX2VUAB-DwX981uk.js → chunk-4BX2VUAB-DgfTnQ-2.js} +2 -2
- package/webapp/dist/assets/{chunk-4BX2VUAB-DwX981uk.js.map → chunk-4BX2VUAB-DgfTnQ-2.js.map} +1 -1
- package/webapp/dist/assets/{chunk-55IACEB6-OQ_p-C1f.js → chunk-55IACEB6-B7NYImSP.js} +2 -2
- package/webapp/dist/assets/{chunk-55IACEB6-OQ_p-C1f.js.map → chunk-55IACEB6-B7NYImSP.js.map} +1 -1
- package/webapp/dist/assets/{chunk-FMBD7UC4-CW5uzfUP.js → chunk-FMBD7UC4-D0lml2o5.js} +2 -2
- package/webapp/dist/assets/{chunk-FMBD7UC4-CW5uzfUP.js.map → chunk-FMBD7UC4-D0lml2o5.js.map} +1 -1
- package/webapp/dist/assets/{chunk-JSJVCQXG-CnhLavxC.js → chunk-JSJVCQXG-ea_U6N63.js} +2 -2
- package/webapp/dist/assets/{chunk-JSJVCQXG-CnhLavxC.js.map → chunk-JSJVCQXG-ea_U6N63.js.map} +1 -1
- package/webapp/dist/assets/{chunk-KX2RTZJC-DtyfjU3Z.js → chunk-KX2RTZJC-B8y-NuK2.js} +2 -2
- package/webapp/dist/assets/{chunk-KX2RTZJC-DtyfjU3Z.js.map → chunk-KX2RTZJC-B8y-NuK2.js.map} +1 -1
- package/webapp/dist/assets/{chunk-NQ4KR5QH-6z82wIeO.js → chunk-NQ4KR5QH-BQo9vkyL.js} +4 -4
- package/webapp/dist/assets/{chunk-NQ4KR5QH-6z82wIeO.js.map → chunk-NQ4KR5QH-BQo9vkyL.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QZHKN3VN-BWMikvLc.js → chunk-QZHKN3VN-D20IGCZ0.js} +2 -2
- package/webapp/dist/assets/{chunk-QZHKN3VN-BWMikvLc.js.map → chunk-QZHKN3VN-D20IGCZ0.js.map} +1 -1
- package/webapp/dist/assets/{chunk-WL4C6EOR-Bq_UYUUe.js → chunk-WL4C6EOR-W2SB0exS.js} +6 -6
- package/webapp/dist/assets/{chunk-WL4C6EOR-Bq_UYUUe.js.map → chunk-WL4C6EOR-W2SB0exS.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-D4mVjh6u.js → classDiagram-VBA2DB6C-CCyd2n1g.js} +7 -7
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-D4mVjh6u.js.map → classDiagram-VBA2DB6C-CCyd2n1g.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-D4mVjh6u.js → classDiagram-v2-RAHNMMFH-CCyd2n1g.js} +7 -7
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-D4mVjh6u.js.map → classDiagram-v2-RAHNMMFH-CCyd2n1g.js.map} +1 -1
- package/webapp/dist/assets/{clone-D03eXoXz.js → clone-BcYWI-ZT.js} +2 -2
- package/webapp/dist/assets/{clone-D03eXoXz.js.map → clone-BcYWI-ZT.js.map} +1 -1
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-by8TqKPs.js → cose-bilkent-S5V4N54A-BSOmDWTn.js} +2 -2
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-by8TqKPs.js.map → cose-bilkent-S5V4N54A-BSOmDWTn.js.map} +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-CGGhHSaA.js → dagre-KLK3FWXG-BltY2wl7.js} +7 -7
- package/webapp/dist/assets/{dagre-KLK3FWXG-CGGhHSaA.js.map → dagre-KLK3FWXG-BltY2wl7.js.map} +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-CQNrVkM8.js → diagram-E7M64L7V-Bnov-gQQ.js} +8 -8
- package/webapp/dist/assets/{diagram-E7M64L7V-CQNrVkM8.js.map → diagram-E7M64L7V-Bnov-gQQ.js.map} +1 -1
- package/webapp/dist/assets/{diagram-IFDJBPK2-Dj4jbiH_.js → diagram-IFDJBPK2-3QdI65tR.js} +7 -7
- package/webapp/dist/assets/{diagram-IFDJBPK2-Dj4jbiH_.js.map → diagram-IFDJBPK2-3QdI65tR.js.map} +1 -1
- package/webapp/dist/assets/{diagram-P4PSJMXO-clZaP5j5.js → diagram-P4PSJMXO-QDyoRzyu.js} +7 -7
- package/webapp/dist/assets/{diagram-P4PSJMXO-clZaP5j5.js.map → diagram-P4PSJMXO-QDyoRzyu.js.map} +1 -1
- package/webapp/dist/assets/{erDiagram-INFDFZHY-BlwaMFO-.js → erDiagram-INFDFZHY-Ce0rHVXh.js} +5 -5
- package/webapp/dist/assets/{erDiagram-INFDFZHY-BlwaMFO-.js.map → erDiagram-INFDFZHY-Ce0rHVXh.js.map} +1 -1
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-C1yJlJ-L.js → flowDiagram-PKNHOUZH-Cg_pSmnh.js} +7 -7
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-C1yJlJ-L.js.map → flowDiagram-PKNHOUZH-Cg_pSmnh.js.map} +1 -1
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-BHcgwxiC.js → ganttDiagram-A5KZAMGK-DvvtGk3D.js} +3 -3
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-BHcgwxiC.js.map → ganttDiagram-A5KZAMGK-DvvtGk3D.js.map} +1 -1
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-BpV_b0Sk.js → gitGraphDiagram-K3NZZRJ6-BD6Jswe_.js} +8 -8
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-BpV_b0Sk.js.map → gitGraphDiagram-K3NZZRJ6-BD6Jswe_.js.map} +1 -1
- package/webapp/dist/assets/{graph-LYTIRrV0.js → graph-C9jJ1Bv-.js} +3 -3
- package/webapp/dist/assets/{graph-LYTIRrV0.js.map → graph-C9jJ1Bv-.js.map} +1 -1
- package/webapp/dist/assets/{index-Dr1QIzlU.js → index-i_R7w1hQ.js} +198 -63
- package/webapp/dist/assets/{index-Dr1QIzlU.js.map → index-i_R7w1hQ.js.map} +1 -1
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-D16vRd6t.js → infoDiagram-LFFYTUFH-DQHdRh4Q.js} +6 -6
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-D16vRd6t.js.map → infoDiagram-LFFYTUFH-DQHdRh4Q.js.map} +1 -1
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-ad0w6KbY.js → ishikawaDiagram-PHBUUO56-CzaWPbGe.js} +2 -2
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-ad0w6KbY.js.map → ishikawaDiagram-PHBUUO56-CzaWPbGe.js.map} +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-BEUKxQwA.js → journeyDiagram-4ABVD52K-8G8rcD3o.js} +5 -5
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-BEUKxQwA.js.map → journeyDiagram-4ABVD52K-8G8rcD3o.js.map} +1 -1
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-Cc_1wmYt.js → kanban-definition-K7BYSVSG-5BVvFxtu.js} +3 -3
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-Cc_1wmYt.js.map → kanban-definition-K7BYSVSG-5BVvFxtu.js.map} +1 -1
- package/webapp/dist/assets/{layout-DfelhMRI.js → layout-DtLoWiZt.js} +5 -5
- package/webapp/dist/assets/{layout-DfelhMRI.js.map → layout-DtLoWiZt.js.map} +1 -1
- package/webapp/dist/assets/{linear-B2vKHBUy.js → linear-248taKqA.js} +2 -2
- package/webapp/dist/assets/{linear-B2vKHBUy.js.map → linear-248taKqA.js.map} +1 -1
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-7OyH8l_A.js → mindmap-definition-YRQLILUH-36DiW7W4.js} +4 -4
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-7OyH8l_A.js.map → mindmap-definition-YRQLILUH-36DiW7W4.js.map} +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-Bp_Um3GN.js → pieDiagram-SKSYHLDU-BKywZ2gZ.js} +8 -8
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-Bp_Um3GN.js.map → pieDiagram-SKSYHLDU-BKywZ2gZ.js.map} +1 -1
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-CIF0UAGJ.js → quadrantDiagram-337W2JSQ-BRSGJe_7.js} +3 -3
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-CIF0UAGJ.js.map → quadrantDiagram-337W2JSQ-BRSGJe_7.js.map} +1 -1
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-0_QWHfTc.js → requirementDiagram-Z7DCOOCP-DR5uqpu_.js} +4 -4
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-0_QWHfTc.js.map → requirementDiagram-Z7DCOOCP-DR5uqpu_.js.map} +1 -1
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-IOp7vxQp.js → sankeyDiagram-WA2Y5GQK-BPPCgHPi.js} +2 -2
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-IOp7vxQp.js.map → sankeyDiagram-WA2Y5GQK-BPPCgHPi.js.map} +1 -1
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-BTImCEL7.js → sequenceDiagram-2WXFIKYE-_LPADDBa.js} +4 -4
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-BTImCEL7.js.map → sequenceDiagram-2WXFIKYE-_LPADDBa.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-BhZQ-pCu.js → stateDiagram-RAJIS63D-QcP2FlqB.js} +9 -9
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-BhZQ-pCu.js.map → stateDiagram-RAJIS63D-QcP2FlqB.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-9WcDoEut.js → stateDiagram-v2-FVOUBMTO-CPTaAnAl.js} +5 -5
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-9WcDoEut.js.map → stateDiagram-v2-FVOUBMTO-CPTaAnAl.js.map} +1 -1
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-B4M7bruY.js → timeline-definition-YZTLITO2-DdzSb9za.js} +3 -3
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-B4M7bruY.js.map → timeline-definition-YZTLITO2-DdzSb9za.js.map} +1 -1
- package/webapp/dist/assets/{treemap-KZPCXAKY-DpbBOd_r.js → treemap-KZPCXAKY-C6SI9m0Q.js} +5 -5
- package/webapp/dist/assets/{treemap-KZPCXAKY-DpbBOd_r.js.map → treemap-KZPCXAKY-C6SI9m0Q.js.map} +1 -1
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BBkDL813.js → vennDiagram-LZ73GAT5-qSqddmnT.js} +2 -2
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BBkDL813.js.map → vennDiagram-LZ73GAT5-qSqddmnT.js.map} +1 -1
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-CHuszw7E.js → xychartDiagram-JWTSCODW-4xSt7JsB.js} +3 -3
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-CHuszw7E.js.map → xychartDiagram-JWTSCODW-4xSt7JsB.js.map} +1 -1
- package/webapp/dist/index.html +1 -1
- package/dist/tools/manual/schema.d.ts +0 -3
- package/dist/tools/manual/schema.js +0 -163
package/dist/cli/manual.js
CHANGED
|
@@ -134,19 +134,6 @@ function listAvailableToolsets() {
|
|
|
134
134
|
}
|
|
135
135
|
console.log(`Available toolsets: ${names.map((name) => `\`${name}\``).join(', ')}`);
|
|
136
136
|
}
|
|
137
|
-
function toAvailableToolNames(toolsetId) {
|
|
138
|
-
const toolset = (0, registry_1.getToolset)(toolsetId) ?? [];
|
|
139
|
-
const names = new Set();
|
|
140
|
-
for (const tool of toolset) {
|
|
141
|
-
if (tool &&
|
|
142
|
-
typeof tool === 'object' &&
|
|
143
|
-
'type' in tool &&
|
|
144
|
-
tool.type === 'func') {
|
|
145
|
-
names.add(tool.name);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return names;
|
|
149
|
-
}
|
|
150
137
|
async function main() {
|
|
151
138
|
try {
|
|
152
139
|
const parsed = parseArgs(process.argv.slice(2));
|
|
@@ -160,13 +147,11 @@ async function main() {
|
|
|
160
147
|
listAvailableToolsets();
|
|
161
148
|
process.exit(1);
|
|
162
149
|
}
|
|
163
|
-
const availableToolNames = toAvailableToolNames(toolsetId);
|
|
164
150
|
const content = await (0, toolset_manual_1.renderToolsetManualContent)({
|
|
165
151
|
toolsetId,
|
|
166
152
|
language: parsed.language,
|
|
167
153
|
topic: parsed.topic,
|
|
168
154
|
topics: parsed.topics,
|
|
169
|
-
availableToolNames,
|
|
170
155
|
});
|
|
171
156
|
console.log(content);
|
|
172
157
|
}
|
|
@@ -8,7 +8,9 @@ This means:
|
|
|
8
8
|
|
|
9
9
|
- `apiType: codex` owns Codex-native request fields, stream events, tool semantics, and defaults.
|
|
10
10
|
- `apiType: openai` owns OpenAI Responses request fields, stream events, tool semantics, and defaults.
|
|
11
|
-
- `apiType: openai-compatible` owns Chat Completions semantics,
|
|
11
|
+
- `apiType: openai-compatible` owns Chat Completions semantics, including the `model_params.openai-compatible.*` namespace.
|
|
12
|
+
- `apiType: anthropic` owns official Anthropic Messages semantics, including object-shaped `model_params.anthropic.thinking`.
|
|
13
|
+
- `apiType: anthropic-compatible` owns Anthropic-compatible gateway semantics, including boolean `model_params.anthropic-compatible.thinking` mapped to provider `enabled` / `disabled` request objects.
|
|
12
14
|
|
|
13
15
|
Similar field names across wrappers do not imply compatibility. For example, `reasoning_effort`, `verbosity`, `parallel_tool_calls`, and web search controls may look similar but can still differ in accepted values, payload shape, lifecycle events, validation rules, and runtime meaning.
|
|
14
16
|
|
|
@@ -8,7 +8,9 @@ Dominds 把每个 LLM provider wrapper 视为独立的协议适配器,而不
|
|
|
8
8
|
|
|
9
9
|
- `apiType: codex` 只负责 Codex 原生的请求字段、流事件、工具语义和默认行为。
|
|
10
10
|
- `apiType: openai` 只负责 OpenAI Responses 原生的请求字段、流事件、工具语义和默认行为。
|
|
11
|
-
- `apiType: openai-compatible`
|
|
11
|
+
- `apiType: openai-compatible` 负责 Chat Completions 语义,包括 `model_params.openai-compatible.*` 命名空间,不是 Codex,也不是 Responses。
|
|
12
|
+
- `apiType: anthropic` 只负责 Anthropic 官方 Messages 语义,包括 object 形态的 `model_params.anthropic.thinking`。
|
|
13
|
+
- `apiType: anthropic-compatible` 负责 Anthropic 兼容网关语义,包括 boolean 形态的 `model_params.anthropic-compatible.thinking`,并映射为 provider 请求里的 `enabled` / `disabled` object。
|
|
12
14
|
|
|
13
15
|
不同 wrapper 下看起来同名的字段,不代表它们可以互相兼容。比如 `reasoning_effort`、`verbosity`、`parallel_tool_calls`、web search 相关开关,名字可能相似,但可接受值、请求载荷形状、流事件生命周期、校验规则和运行时含义都可能不同。
|
|
14
16
|
|
package/dist/docs/mcp-support.md
CHANGED
|
@@ -399,6 +399,14 @@ headers:
|
|
|
399
399
|
|
|
400
400
|
This is a Dominds-oriented schema. It is intentionally small and should be easy to validate.
|
|
401
401
|
|
|
402
|
+
`manual` is optional enhancement configuration, not a requirement for MCP integration. A standard
|
|
403
|
+
MCP server already returns tool names, descriptions, and parameter schemas through `tools/list`;
|
|
404
|
+
Dominds registers that metadata as `FuncTool`s and provides it to the LLM and the WebUI tools list.
|
|
405
|
+
`man({ "toolsetId": "<serverId>" })` does not duplicate that schema; use `manual` for the server's
|
|
406
|
+
overall positioning, use cases, examples, pitfalls, guardrails, failure-handling procedures, and
|
|
407
|
+
team norms. Omitting `manual` is allowed but reported as a warning in Problems because Dominds
|
|
408
|
+
recommends at least a short positioning note.
|
|
409
|
+
|
|
402
410
|
```yaml
|
|
403
411
|
version: 1
|
|
404
412
|
servers:
|
|
@@ -439,10 +447,11 @@ servers:
|
|
|
439
447
|
# Tool name transforms (optional)
|
|
440
448
|
transform: []
|
|
441
449
|
|
|
442
|
-
# Optional manual information
|
|
443
|
-
# - contentFile: formal runtime manual for man({ "toolsetId": "<serverId>" })
|
|
444
|
-
#
|
|
445
|
-
# (
|
|
450
|
+
# Optional enhanced manual information; omitting it is allowed but emits a Problems warning.
|
|
451
|
+
# - contentFile: formal runtime manual for man({ "toolsetId": "<serverId>" });
|
|
452
|
+
# supports topic files such as index/principles/tools/scenarios/errors.
|
|
453
|
+
# - content/sections: inline guidance (use cases, guardrails, failure handling, team norms)
|
|
454
|
+
# Do not duplicate tool lists/parameter definitions; those come from MCP tools/list.
|
|
446
455
|
manual:
|
|
447
456
|
contentFile: ".minds/manuals/<serverId>"
|
|
448
457
|
content: "What this MCP toolset is for"
|
|
@@ -320,6 +320,13 @@ headers:
|
|
|
320
320
|
|
|
321
321
|
这是一个以 Dominds 为中心的模式。它有意设计得很小,应该易于验证。
|
|
322
322
|
|
|
323
|
+
`manual` 是可选增强配置,不是 MCP 接入的必填项。标准 MCP server 已经通过
|
|
324
|
+
`tools/list` 返回工具名称、描述和参数 schema;Dominds 会把这些元数据注册为
|
|
325
|
+
`FuncTool`,提供给 LLM,并在 WebUI 工具列表中展示。`man({ "toolsetId": "<serverId>" })`
|
|
326
|
+
不再重复罗列这份 schema;`manual` 应用于补充整体定位、使用场景、综合示例、避坑指南、安全边界、
|
|
327
|
+
故障处置流程、团队约定等。省略 `manual` 允许接入和使用,但会在 Problems 中给 warning,因为
|
|
328
|
+
Dominds 建议至少写一段简短整体定位说明。
|
|
329
|
+
|
|
323
330
|
```yaml
|
|
324
331
|
version: 1
|
|
325
332
|
servers:
|
|
@@ -360,9 +367,13 @@ servers:
|
|
|
360
367
|
# 工具名称转换(可选)
|
|
361
368
|
transform: []
|
|
362
369
|
|
|
363
|
-
#
|
|
364
|
-
|
|
370
|
+
# 可选增强手册;省略时仍可接入,但会产生 Problems warning。
|
|
371
|
+
# - contentFile: 给 man({ "toolsetId": "<serverId>" }) 的正式运行时手册;
|
|
372
|
+
# 支持 index/principles/tools/scenarios/errors 等 topic 文件。
|
|
373
|
+
# - content/sections: inline 增强说明(使用场景、安全边界、故障处置、团队约定等)
|
|
374
|
+
# 不要在 manual 中重复工具列表/参数定义;这些来自 MCP tools/list。
|
|
365
375
|
manual:
|
|
376
|
+
contentFile: ".minds/manuals/<serverId>"
|
|
366
377
|
content: "该 MCP toolset 的用途说明"
|
|
367
378
|
sections:
|
|
368
379
|
- title: "何时使用"
|
|
@@ -325,7 +325,8 @@ used in `.minds/team.yaml` member configurations.
|
|
|
325
325
|
`apiType` notes (common values):
|
|
326
326
|
|
|
327
327
|
- `openai`: uses the OpenAI **Responses API** (best for OpenAI official endpoints; requires a `/v1`-style `responses` endpoint)
|
|
328
|
-
- `anthropic`: uses the Anthropic **Messages API
|
|
328
|
+
- `anthropic`: uses the official Anthropic **Messages API**. `model_params.anthropic.thinking` uses the official Anthropic object shape.
|
|
329
|
+
- `anthropic-compatible`: uses Anthropic-compatible **Messages API** / coding-plan endpoints, e.g. Volcano Engine Coding Plan `.../api/coding`. `model_params.anthropic-compatible.thinking` uses the Dominds boolean switch: `true` sends `thinking.type=enabled`; `false` sends `thinking.type=disabled`.
|
|
329
330
|
- `openai-compatible`: uses the OpenAI **Chat Completions API** (best for most “OpenAI-compatible” third-party/proxy endpoints; e.g. a manually configured Ark `.../api/v3` endpoint)
|
|
330
331
|
- **Vision support**: if the provider/model supports multimodal Chat Completions, Dominds will pass tool-output images (`func_result_msg.contentItems[].type=input_image`, e.g. from MCP tools) to the model as `image_url` inputs after reading the persisted artifact; unsupported mime types are downgraded to text.
|
|
331
332
|
|
|
@@ -389,22 +390,21 @@ Notes:
|
|
|
389
390
|
`mcp_disable` disables a server while keeping its zero-tool toolset/manual visible, and
|
|
390
391
|
`mcp_release` releases the current dialog lease.
|
|
391
392
|
- Optional manual information can live in `.minds/mcp.yaml` at `servers.<serverId>.manual`:
|
|
392
|
-
- `contentFile`: the topic-file directory prefix for the formal runtime manual; the final `man({ "toolsetId": "<serverId>" })` content shown to the LLM is loaded from here
|
|
393
|
+
- `contentFile`: the topic-file directory prefix for the formal runtime manual; the final `man({ "toolsetId": "<serverId>" })` content shown to the LLM is loaded from here, including handwritten chapters such as `scenarios` and `errors`
|
|
393
394
|
- `content` / `sections`: inline team-management guidance shown in the `team_mgmt` MCP chapter (`sections` supports `[{ title, content }]` or `{ "<title>": "<content>" }`)
|
|
394
|
-
- Missing manual does **not** mean the toolset is unavailable
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
`content + sections`
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
- For
|
|
405
|
-
answer:
|
|
395
|
+
- Missing manual does **not** mean the toolset is unavailable. Standard tool metadata comes from MCP
|
|
396
|
+
`tools/list`; agents should continue by reading each tool’s own description/arguments. Dominds
|
|
397
|
+
still reports a warning so the team can add at least a short overall positioning note.
|
|
398
|
+
- Team-manager recommendation: after MCP config validation passes, rely on MCP-provided tool
|
|
399
|
+
descriptions/arguments first, and still write a short positioning note for each MCP server. Use
|
|
400
|
+
`manual.contentFile` or inline `content + sections` for richer handwritten guidance such as
|
|
401
|
+
examples, pitfalls, safety boundaries, failure handling, and coordination norms.
|
|
402
|
+
- Use a semi-structured chapter shape for optional enhancements: high-value sections often include
|
|
403
|
+
`When To Use`, `Guardrails`, and `Business Handling When Unavailable`, but do not force every
|
|
404
|
+
toolset into one fixed template.
|
|
405
|
+
- For high-risk MCP toolsets, document unavailable-case business handling rules. At minimum, answer:
|
|
406
406
|
- whether a temporarily unavailable toolset must be escalated to a coordinator or specialist
|
|
407
|
-
- whether a
|
|
407
|
+
- whether a human-operated or alternate-tool fallback path is allowed
|
|
408
408
|
- which business actions must pause until the toolset recovers
|
|
409
409
|
|
|
410
410
|
### File format (template)
|
|
@@ -266,7 +266,8 @@
|
|
|
266
266
|
`apiType` 说明(常见值):
|
|
267
267
|
|
|
268
268
|
- `openai`:使用 OpenAI **Responses API**(适用于 OpenAI 官方;需要 `/v1` 语义的 `responses` 端点)
|
|
269
|
-
- `anthropic`:使用 Anthropic **Messages API
|
|
269
|
+
- `anthropic`:使用 Anthropic 官方 **Messages API**。`model_params.anthropic.thinking` 使用 Anthropic 官方 object 形态。
|
|
270
|
+
- `anthropic-compatible`:使用 Anthropic 兼容的 **Messages API** / Coding Plan 端点(例如 Volcano Engine Coding Plan `.../api/coding`)。`model_params.anthropic-compatible.thinking` 使用 Dominds boolean 开关:`true` 发送 `thinking.type=enabled`,`false` 发送 `thinking.type=disabled`。
|
|
270
271
|
- `openai-compatible`:使用 OpenAI **Chat Completions API**(适用于多数“OpenAI 兼容”第三方/代理;例如手动配置的 Ark `.../api/v3` 端点)
|
|
271
272
|
- **识图支持**:如果该 provider/model 支持 Chat Completions 的多模态输入,Dominds 会把工具输出里的图片(`func_result_msg.contentItems[].type=input_image`,来自 MCP 等工具)读取 artifact 后作为 `image_url` 形式喂给模型;不支持的 mimeType 会降级成文本提示。
|
|
272
273
|
|
|
@@ -325,12 +326,12 @@ members:
|
|
|
325
326
|
- `mcp_admin` 是 MCP 运维内置工具集:`mcp_restart` 启用/重启 server,`mcp_disable` 禁用
|
|
326
327
|
server 并保留 0 工具 toolset/手册可见性,`mcp_release` 释放当前对话 lease
|
|
327
328
|
- 可选手册:可在 `.minds/mcp.yaml` 的 `servers.<serverId>.manual` 提供手册相关信息:
|
|
328
|
-
- `contentFile`:正式 runtime 手册的 topic 文件目录前缀;`man({ "toolsetId": "<serverId>" })` 最终给 LLM
|
|
329
|
+
- `contentFile`:正式 runtime 手册的 topic 文件目录前缀;`man({ "toolsetId": "<serverId>" })` 最终给 LLM 看的正文从这里加载,包括 `scenarios`、`errors` 等手写章节
|
|
329
330
|
- `content` / `sections`:补充给 `team_mgmt` MCP 章节看的 inline 团队管理说明(`sections` 支持 `[{ title, content }]` 或 `{ "<title>": "<content>" }`)
|
|
330
|
-
- 没有手册 **不代表** 该 toolset
|
|
331
|
-
- 建议团队管理者在 MCP
|
|
332
|
-
-
|
|
333
|
-
-
|
|
331
|
+
- 没有手册 **不代表** 该 toolset 不可用;标准工具元数据来自 MCP `tools/list`。智能体应继续依据每个工具自身的 description/参数来使用。Dominds 仍会发出 warning,提醒团队至少补充简短整体定位说明。
|
|
332
|
+
- 建议团队管理者在 MCP 配置验证通过后,优先依赖 MCP server 暴露的工具 description/参数;同时给每个 MCP server 写一段简短定位。若需要更完整的综合示例、避坑指南、安全边界、故障处置或协作规范,再写 `manual.contentFile` 或 inline `content + sections`。
|
|
333
|
+
- 可选增强的章节组织建议采用“半结构化”:可优先考虑 `何时使用`、`安全边界`、`不可用时业务处置` 这类高价值章节,但不要求所有 toolset 都照抄同一模板。
|
|
334
|
+
- 对高风险 MCP toolset,建议明确“不可用时业务处置规约”,至少回答:
|
|
334
335
|
- 当前 toolset 暂不可达时,是否必须找协调者/专员接手
|
|
335
336
|
- 是否允许采用人工流程或其他工具链作为临时降级路径
|
|
336
337
|
- 哪些业务动作在该 toolset 恢复前必须暂停,不能擅自继续
|
package/dist/llm/api-quirks.d.ts
CHANGED
|
@@ -42,5 +42,6 @@ export type LlmFailureQuirkHandlerSession = {
|
|
|
42
42
|
onRequestSucceeded?: () => void;
|
|
43
43
|
onRecoveryActionUsed?: (usage: LlmQuirkRecoveryUsage) => void;
|
|
44
44
|
};
|
|
45
|
+
export declare const XCODE_BEST_STREAM_INTERNAL_ERROR_CODE = "XCODE_BEST_STREAM_INTERNAL_ERROR";
|
|
45
46
|
export declare function normalizeProviderApiQuirks(providerConfig: ProviderConfig): Set<string>;
|
|
46
47
|
export declare function createLlmFailureQuirkHandlerSession(providerConfig: ProviderConfig): LlmFailureQuirkHandlerSession | undefined;
|
package/dist/llm/api-quirks.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XCODE_BEST_STREAM_INTERNAL_ERROR_CODE = void 0;
|
|
3
4
|
exports.normalizeProviderApiQuirks = normalizeProviderApiQuirks;
|
|
4
5
|
exports.createLlmFailureQuirkHandlerSession = createLlmFailureQuirkHandlerSession;
|
|
5
6
|
const persistence_errors_1 = require("../persistence-errors");
|
|
@@ -9,6 +10,9 @@ const XCODE_BEST_EMPTY_RESPONSE_GIVE_UP_THRESHOLD = 5;
|
|
|
9
10
|
const XCODE_BEST_GATEWAY_HTML_502_RETRY_MESSAGE = 'xcode.best gateway returned an HTML 502 Bad Gateway page; retrying conservatively.';
|
|
10
11
|
const XCODE_BEST_AUTH_UNAVAILABLE_RETRY_MESSAGE = 'xcode.best upstream returned 500 auth_unavailable: no auth available; treating it as an infrastructure failure and retrying conservatively.';
|
|
11
12
|
const XCODE_BEST_UNEXPECTED_EOF_RETRY_MESSAGE = 'xcode.best upstream stream ended unexpectedly (unexpected EOF); retrying conservatively.';
|
|
13
|
+
const XCODE_BEST_MISREPORTED_403_RETRY_MESSAGE = 'xcode.best returned 403 for a transient upstream failure; retrying aggressively.';
|
|
14
|
+
exports.XCODE_BEST_STREAM_INTERNAL_ERROR_CODE = 'XCODE_BEST_STREAM_INTERNAL_ERROR';
|
|
15
|
+
const XCODE_BEST_STREAM_INTERNAL_RETRY_MESSAGE = 'xcode.best upstream stream reported internal_error from peer; retrying aggressively.';
|
|
12
16
|
const LOCAL_FILE_IO_ERROR_CODES = new Set(['ENOENT', 'ENOTDIR', 'EISDIR', 'EACCES', 'EPERM']);
|
|
13
17
|
const LOCAL_FILE_IO_SYSCALLS = new Set([
|
|
14
18
|
'open',
|
|
@@ -58,6 +62,88 @@ function isXcodeBestAuthUnavailableFailure(failure, error) {
|
|
|
58
62
|
}
|
|
59
63
|
return code === 'internal_server_error' && message.includes('no auth available');
|
|
60
64
|
}
|
|
65
|
+
function isXcodeBestStreamInternalFailure(failure, error) {
|
|
66
|
+
const code = failure.code ?? readErrorCode(error);
|
|
67
|
+
return code === exports.XCODE_BEST_STREAM_INTERNAL_ERROR_CODE;
|
|
68
|
+
}
|
|
69
|
+
const XCODE_BEST_RETRY_QUIRK_RULES = [
|
|
70
|
+
{
|
|
71
|
+
statusPolicy: { kind: 'only_status', status: 403 },
|
|
72
|
+
retryStrategy: 'aggressive',
|
|
73
|
+
message: XCODE_BEST_MISREPORTED_403_RETRY_MESSAGE,
|
|
74
|
+
matches: () => true,
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
statusPolicy: { kind: 'exclude_statuses', statuses: [429] },
|
|
78
|
+
retryStrategy: 'aggressive',
|
|
79
|
+
message: XCODE_BEST_STREAM_INTERNAL_RETRY_MESSAGE,
|
|
80
|
+
matches: ({ failure, error }) => isXcodeBestStreamInternalFailure(failure, error),
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
statusPolicy: { kind: 'exclude_statuses', statuses: [429] },
|
|
84
|
+
retryStrategy: 'conservative',
|
|
85
|
+
message: XCODE_BEST_UNEXPECTED_EOF_RETRY_MESSAGE,
|
|
86
|
+
matches: ({ failure, error }) => isXcodeBestUnexpectedEofFailure(failure, error),
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
statusPolicy: { kind: 'only_status', status: 502 },
|
|
90
|
+
retryStrategy: 'conservative',
|
|
91
|
+
message: XCODE_BEST_GATEWAY_HTML_502_RETRY_MESSAGE,
|
|
92
|
+
matches: ({ failure, error }) => isXcodeBestGatewayHtml502Failure(failure, error),
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
statusPolicy: { kind: 'only_status', status: 500 },
|
|
96
|
+
retryStrategy: 'conservative',
|
|
97
|
+
message: XCODE_BEST_AUTH_UNAVAILABLE_RETRY_MESSAGE,
|
|
98
|
+
matches: ({ failure, error }) => isXcodeBestAuthUnavailableFailure(failure, error),
|
|
99
|
+
},
|
|
100
|
+
];
|
|
101
|
+
function isStatusAllowedByXcodeBestQuirkPolicy(statuses, policy) {
|
|
102
|
+
switch (policy.kind) {
|
|
103
|
+
case 'only_status':
|
|
104
|
+
return statuses.includes(policy.status) && !statuses.includes(429);
|
|
105
|
+
case 'exclude_statuses':
|
|
106
|
+
return statuses.every((status) => !policy.statuses.includes(status));
|
|
107
|
+
default: {
|
|
108
|
+
const _exhaustive = policy;
|
|
109
|
+
return _exhaustive;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function readFailureAndErrorStatuses(args) {
|
|
114
|
+
const statuses = [];
|
|
115
|
+
const appendStatus = (status) => {
|
|
116
|
+
if (status === undefined || statuses.includes(status)) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
statuses.push(status);
|
|
120
|
+
};
|
|
121
|
+
appendStatus(args.failure.status);
|
|
122
|
+
for (const current of getErrorChain(args.error)) {
|
|
123
|
+
if (!isRecord(current)) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
if ('status' in current && typeof current.status === 'number') {
|
|
127
|
+
appendStatus(current.status);
|
|
128
|
+
}
|
|
129
|
+
if ('statusCode' in current && typeof current.statusCode === 'number') {
|
|
130
|
+
appendStatus(current.statusCode);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return statuses;
|
|
134
|
+
}
|
|
135
|
+
function resolveXcodeBestRetryQuirkRule(args) {
|
|
136
|
+
const statuses = readFailureAndErrorStatuses(args);
|
|
137
|
+
for (const rule of XCODE_BEST_RETRY_QUIRK_RULES) {
|
|
138
|
+
if (!isStatusAllowedByXcodeBestQuirkPolicy(statuses, rule.statusPolicy)) {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (rule.matches(args)) {
|
|
142
|
+
return rule;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
61
147
|
function getErrorChain(error) {
|
|
62
148
|
const queue = [error];
|
|
63
149
|
const visited = new Set();
|
|
@@ -78,6 +164,10 @@ function getErrorChain(error) {
|
|
|
78
164
|
if (nestedError !== undefined) {
|
|
79
165
|
queue.push(nestedError);
|
|
80
166
|
}
|
|
167
|
+
const nestedResponse = readNestedResponse(current);
|
|
168
|
+
if (nestedResponse !== undefined) {
|
|
169
|
+
queue.push(nestedResponse);
|
|
170
|
+
}
|
|
81
171
|
const cause = readErrorCause(current);
|
|
82
172
|
if (cause !== undefined) {
|
|
83
173
|
queue.push(cause);
|
|
@@ -114,6 +204,12 @@ function readNestedError(error) {
|
|
|
114
204
|
}
|
|
115
205
|
return undefined;
|
|
116
206
|
}
|
|
207
|
+
function readNestedResponse(error) {
|
|
208
|
+
if (isRecord(error) && 'response' in error && isRecord(error.response)) {
|
|
209
|
+
return error.response;
|
|
210
|
+
}
|
|
211
|
+
return undefined;
|
|
212
|
+
}
|
|
117
213
|
function readErrorPath(error) {
|
|
118
214
|
for (const current of getErrorChain(error)) {
|
|
119
215
|
if (current instanceof Error) {
|
|
@@ -308,25 +404,15 @@ function createXcodeBestFailureQuirkHandlerSession(providerConfig) {
|
|
|
308
404
|
};
|
|
309
405
|
}
|
|
310
406
|
consecutiveEmptyResponseCount = 0;
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
};
|
|
317
|
-
}
|
|
318
|
-
if (isXcodeBestGatewayHtml502Failure(args.failure, args.error)) {
|
|
319
|
-
return {
|
|
320
|
-
kind: 'retry_strategy',
|
|
321
|
-
retryStrategy: 'conservative',
|
|
322
|
-
message: XCODE_BEST_GATEWAY_HTML_502_RETRY_MESSAGE,
|
|
323
|
-
};
|
|
324
|
-
}
|
|
325
|
-
if (isXcodeBestAuthUnavailableFailure(args.failure, args.error)) {
|
|
407
|
+
const retryQuirkRule = resolveXcodeBestRetryQuirkRule({
|
|
408
|
+
failure: args.failure,
|
|
409
|
+
error: args.error,
|
|
410
|
+
});
|
|
411
|
+
if (retryQuirkRule) {
|
|
326
412
|
return {
|
|
327
413
|
kind: 'retry_strategy',
|
|
328
|
-
retryStrategy:
|
|
329
|
-
message:
|
|
414
|
+
retryStrategy: retryQuirkRule.retryStrategy,
|
|
415
|
+
message: retryQuirkRule.message,
|
|
330
416
|
};
|
|
331
417
|
}
|
|
332
418
|
return { kind: 'default' };
|
package/dist/llm/client.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export type { ChatMessage, EnvironmentMsg, FuncCallMsg, FuncResultMsg, PromptingMsg, SayingMsg, TellaskCarryoverMsg, TellaskResultMsg, ThinkingMsg, TransientGuideMsg, } from '@longrun-ai/kernel/types/chat-message';
|
|
2
2
|
export interface ModelInfo {
|
|
3
3
|
name?: string;
|
|
4
|
+
default_thinking?: boolean;
|
|
5
|
+
supports_thinking?: boolean;
|
|
4
6
|
context_length?: number;
|
|
5
7
|
input_length?: number;
|
|
6
8
|
output_length?: number;
|
|
@@ -36,6 +38,8 @@ export type ModelParamOption = (ModelParamOptionBase & {
|
|
|
36
38
|
}) | (ModelParamOptionBase & {
|
|
37
39
|
type: 'record_number';
|
|
38
40
|
default?: Record<string, number>;
|
|
41
|
+
}) | (ModelParamOptionBase & {
|
|
42
|
+
type: 'object';
|
|
39
43
|
}) | (ModelParamOptionBase & {
|
|
40
44
|
type: 'enum';
|
|
41
45
|
values: string[];
|
|
@@ -45,9 +49,11 @@ export type ModelParamOption = (ModelParamOptionBase & {
|
|
|
45
49
|
export type ProviderModelParamOptions = {
|
|
46
50
|
codex?: Record<string, ModelParamOption>;
|
|
47
51
|
openai?: Record<string, ModelParamOption>;
|
|
52
|
+
'openai-compatible'?: Record<string, ModelParamOption>;
|
|
48
53
|
anthropic?: Record<string, ModelParamOption>;
|
|
54
|
+
'anthropic-compatible'?: Record<string, ModelParamOption>;
|
|
49
55
|
};
|
|
50
|
-
export type ProviderApiType = 'codex' | 'anthropic' | 'mock' | 'openai' | 'openai-compatible';
|
|
56
|
+
export type ProviderApiType = 'codex' | 'anthropic' | 'anthropic-compatible' | 'mock' | 'openai' | 'openai-compatible';
|
|
51
57
|
export type ProviderConfig = {
|
|
52
58
|
name: string;
|
|
53
59
|
apiType: ProviderApiType;
|