dominds 1.20.5 → 1.20.6
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/docs/diligence-push.md +1 -1
- package/dist/docs/diligence-push.zh.md +2 -2
- package/dist/docs/team_mgmt-toolset.md +2 -1
- package/dist/docs/team_mgmt-toolset.zh.md +2 -1
- package/dist/llm/client.d.ts +0 -1
- package/dist/llm/defaults.yaml +40 -109
- package/dist/llm/gen/anthropic.js +2 -4
- package/dist/llm/gen/openai-compatible.js +0 -10
- package/dist/llm/gen/openai.js +0 -10
- package/dist/llm/kernel-driver/guardrails.js +0 -1
- package/dist/server/setup-routes.js +1 -5
- package/dist/team.d.ts +3 -7
- package/dist/team.js +35 -37
- package/dist/tools/team_mgmt.js +23 -39
- package/package.json +3 -3
- package/webapp/dist/assets/{_basePickBy-DFzVggWM.js → _basePickBy-CCqhBZYD.js} +3 -3
- package/webapp/dist/assets/{_basePickBy-DFzVggWM.js.map → _basePickBy-CCqhBZYD.js.map} +1 -1
- package/webapp/dist/assets/{_baseUniq-CXD_3O9i.js → _baseUniq-CGIbBnpr.js} +2 -2
- package/webapp/dist/assets/{_baseUniq-CXD_3O9i.js.map → _baseUniq-CGIbBnpr.js.map} +1 -1
- package/webapp/dist/assets/{arc--yzhIodb.js → arc-lGW9r3fU.js} +2 -2
- package/webapp/dist/assets/{arc--yzhIodb.js.map → arc-lGW9r3fU.js.map} +1 -1
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-B2jDlUga.js → architectureDiagram-2XIMDMQ5-BQjkiQRN.js} +7 -7
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-B2jDlUga.js.map → architectureDiagram-2XIMDMQ5-BQjkiQRN.js.map} +1 -1
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-BUPbccZo.js → blockDiagram-WCTKOSBZ-yCoQKKPD.js} +7 -7
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-BUPbccZo.js.map → blockDiagram-WCTKOSBZ-yCoQKKPD.js.map} +1 -1
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-DwTime9I.js → c4Diagram-IC4MRINW-BvR-EAr2.js} +3 -3
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-DwTime9I.js.map → c4Diagram-IC4MRINW-BvR-EAr2.js.map} +1 -1
- package/webapp/dist/assets/{channel-C44ixz_J.js → channel-DLKhD5S_.js} +2 -2
- package/webapp/dist/assets/{channel-C44ixz_J.js.map → channel-DLKhD5S_.js.map} +1 -1
- package/webapp/dist/assets/{chunk-4BX2VUAB-D8GtQm2f.js → chunk-4BX2VUAB-DwX981uk.js} +2 -2
- package/webapp/dist/assets/{chunk-4BX2VUAB-D8GtQm2f.js.map → chunk-4BX2VUAB-DwX981uk.js.map} +1 -1
- package/webapp/dist/assets/{chunk-55IACEB6-D581Sluc.js → chunk-55IACEB6-OQ_p-C1f.js} +2 -2
- package/webapp/dist/assets/{chunk-55IACEB6-D581Sluc.js.map → chunk-55IACEB6-OQ_p-C1f.js.map} +1 -1
- package/webapp/dist/assets/{chunk-FMBD7UC4-DflSPxF8.js → chunk-FMBD7UC4-CW5uzfUP.js} +2 -2
- package/webapp/dist/assets/{chunk-FMBD7UC4-DflSPxF8.js.map → chunk-FMBD7UC4-CW5uzfUP.js.map} +1 -1
- package/webapp/dist/assets/{chunk-JSJVCQXG-CcUETDd7.js → chunk-JSJVCQXG-CnhLavxC.js} +2 -2
- package/webapp/dist/assets/{chunk-JSJVCQXG-CcUETDd7.js.map → chunk-JSJVCQXG-CnhLavxC.js.map} +1 -1
- package/webapp/dist/assets/{chunk-KX2RTZJC-DfcLbXaY.js → chunk-KX2RTZJC-DtyfjU3Z.js} +2 -2
- package/webapp/dist/assets/{chunk-KX2RTZJC-DfcLbXaY.js.map → chunk-KX2RTZJC-DtyfjU3Z.js.map} +1 -1
- package/webapp/dist/assets/{chunk-NQ4KR5QH-B0hUHzGe.js → chunk-NQ4KR5QH-6z82wIeO.js} +4 -4
- package/webapp/dist/assets/{chunk-NQ4KR5QH-B0hUHzGe.js.map → chunk-NQ4KR5QH-6z82wIeO.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QZHKN3VN-V0IQhkyq.js → chunk-QZHKN3VN-BWMikvLc.js} +2 -2
- package/webapp/dist/assets/{chunk-QZHKN3VN-V0IQhkyq.js.map → chunk-QZHKN3VN-BWMikvLc.js.map} +1 -1
- package/webapp/dist/assets/{chunk-WL4C6EOR-Dlq3MRVu.js → chunk-WL4C6EOR-Bq_UYUUe.js} +6 -6
- package/webapp/dist/assets/{chunk-WL4C6EOR-Dlq3MRVu.js.map → chunk-WL4C6EOR-Bq_UYUUe.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-23iqCPis.js → classDiagram-VBA2DB6C-D4mVjh6u.js} +7 -7
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-23iqCPis.js.map → classDiagram-VBA2DB6C-D4mVjh6u.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-23iqCPis.js → classDiagram-v2-RAHNMMFH-D4mVjh6u.js} +7 -7
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-23iqCPis.js.map → classDiagram-v2-RAHNMMFH-D4mVjh6u.js.map} +1 -1
- package/webapp/dist/assets/{clone-DOk1nA0K.js → clone-D03eXoXz.js} +2 -2
- package/webapp/dist/assets/{clone-DOk1nA0K.js.map → clone-D03eXoXz.js.map} +1 -1
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BRI_M3Z1.js → cose-bilkent-S5V4N54A-by8TqKPs.js} +2 -2
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BRI_M3Z1.js.map → cose-bilkent-S5V4N54A-by8TqKPs.js.map} +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-PjbaHNi2.js → dagre-KLK3FWXG-CGGhHSaA.js} +7 -7
- package/webapp/dist/assets/{dagre-KLK3FWXG-PjbaHNi2.js.map → dagre-KLK3FWXG-CGGhHSaA.js.map} +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-C9jrc2Yj.js → diagram-E7M64L7V-CQNrVkM8.js} +8 -8
- package/webapp/dist/assets/{diagram-E7M64L7V-C9jrc2Yj.js.map → diagram-E7M64L7V-CQNrVkM8.js.map} +1 -1
- package/webapp/dist/assets/{diagram-IFDJBPK2-D_B_8ZEE.js → diagram-IFDJBPK2-Dj4jbiH_.js} +7 -7
- package/webapp/dist/assets/{diagram-IFDJBPK2-D_B_8ZEE.js.map → diagram-IFDJBPK2-Dj4jbiH_.js.map} +1 -1
- package/webapp/dist/assets/{diagram-P4PSJMXO-BAGUvld_.js → diagram-P4PSJMXO-clZaP5j5.js} +7 -7
- package/webapp/dist/assets/{diagram-P4PSJMXO-BAGUvld_.js.map → diagram-P4PSJMXO-clZaP5j5.js.map} +1 -1
- package/webapp/dist/assets/{erDiagram-INFDFZHY-5ufs8FDF.js → erDiagram-INFDFZHY-BlwaMFO-.js} +5 -5
- package/webapp/dist/assets/{erDiagram-INFDFZHY-5ufs8FDF.js.map → erDiagram-INFDFZHY-BlwaMFO-.js.map} +1 -1
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-Bax4wCyq.js → flowDiagram-PKNHOUZH-C1yJlJ-L.js} +7 -7
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-Bax4wCyq.js.map → flowDiagram-PKNHOUZH-C1yJlJ-L.js.map} +1 -1
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-9ZX_VymK.js → ganttDiagram-A5KZAMGK-BHcgwxiC.js} +3 -3
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-9ZX_VymK.js.map → ganttDiagram-A5KZAMGK-BHcgwxiC.js.map} +1 -1
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-YbGo4EFg.js → gitGraphDiagram-K3NZZRJ6-BpV_b0Sk.js} +8 -8
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-YbGo4EFg.js.map → gitGraphDiagram-K3NZZRJ6-BpV_b0Sk.js.map} +1 -1
- package/webapp/dist/assets/{graph-B4UFhGtz.js → graph-LYTIRrV0.js} +3 -3
- package/webapp/dist/assets/{graph-B4UFhGtz.js.map → graph-LYTIRrV0.js.map} +1 -1
- package/webapp/dist/assets/{index-D7y9EEAl.js → index-Dr1QIzlU.js} +35 -39
- package/webapp/dist/assets/{index-D7y9EEAl.js.map → index-Dr1QIzlU.js.map} +1 -1
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-K9JKlk7P.js → infoDiagram-LFFYTUFH-D16vRd6t.js} +6 -6
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-K9JKlk7P.js.map → infoDiagram-LFFYTUFH-D16vRd6t.js.map} +1 -1
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-D7h7bNU_.js → ishikawaDiagram-PHBUUO56-ad0w6KbY.js} +2 -2
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-D7h7bNU_.js.map → ishikawaDiagram-PHBUUO56-ad0w6KbY.js.map} +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-BHhkjUnE.js → journeyDiagram-4ABVD52K-BEUKxQwA.js} +5 -5
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-BHhkjUnE.js.map → journeyDiagram-4ABVD52K-BEUKxQwA.js.map} +1 -1
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-BsdCCeJO.js → kanban-definition-K7BYSVSG-Cc_1wmYt.js} +3 -3
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-BsdCCeJO.js.map → kanban-definition-K7BYSVSG-Cc_1wmYt.js.map} +1 -1
- package/webapp/dist/assets/{layout-CTqY3yh8.js → layout-DfelhMRI.js} +5 -5
- package/webapp/dist/assets/{layout-CTqY3yh8.js.map → layout-DfelhMRI.js.map} +1 -1
- package/webapp/dist/assets/{linear-D3vXpsJz.js → linear-B2vKHBUy.js} +2 -2
- package/webapp/dist/assets/{linear-D3vXpsJz.js.map → linear-B2vKHBUy.js.map} +1 -1
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-Df26nneZ.js → mindmap-definition-YRQLILUH-7OyH8l_A.js} +4 -4
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-Df26nneZ.js.map → mindmap-definition-YRQLILUH-7OyH8l_A.js.map} +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-CORXrWQD.js → pieDiagram-SKSYHLDU-Bp_Um3GN.js} +8 -8
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-CORXrWQD.js.map → pieDiagram-SKSYHLDU-Bp_Um3GN.js.map} +1 -1
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-D1iEgnz7.js → quadrantDiagram-337W2JSQ-CIF0UAGJ.js} +3 -3
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-D1iEgnz7.js.map → quadrantDiagram-337W2JSQ-CIF0UAGJ.js.map} +1 -1
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-BTi9foPw.js → requirementDiagram-Z7DCOOCP-0_QWHfTc.js} +4 -4
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-BTi9foPw.js.map → requirementDiagram-Z7DCOOCP-0_QWHfTc.js.map} +1 -1
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-DlXqXBte.js → sankeyDiagram-WA2Y5GQK-IOp7vxQp.js} +2 -2
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-DlXqXBte.js.map → sankeyDiagram-WA2Y5GQK-IOp7vxQp.js.map} +1 -1
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DtV5AvqW.js → sequenceDiagram-2WXFIKYE-BTImCEL7.js} +4 -4
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DtV5AvqW.js.map → sequenceDiagram-2WXFIKYE-BTImCEL7.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-BD05KYfc.js → stateDiagram-RAJIS63D-BhZQ-pCu.js} +9 -9
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-BD05KYfc.js.map → stateDiagram-RAJIS63D-BhZQ-pCu.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-ZWU-eA69.js → stateDiagram-v2-FVOUBMTO-9WcDoEut.js} +5 -5
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-ZWU-eA69.js.map → stateDiagram-v2-FVOUBMTO-9WcDoEut.js.map} +1 -1
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-Bz0iSxAq.js → timeline-definition-YZTLITO2-B4M7bruY.js} +3 -3
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-Bz0iSxAq.js.map → timeline-definition-YZTLITO2-B4M7bruY.js.map} +1 -1
- package/webapp/dist/assets/{treemap-KZPCXAKY-VCn63bTk.js → treemap-KZPCXAKY-DpbBOd_r.js} +5 -5
- package/webapp/dist/assets/{treemap-KZPCXAKY-VCn63bTk.js.map → treemap-KZPCXAKY-DpbBOd_r.js.map} +1 -1
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-DMD4pzqJ.js → vennDiagram-LZ73GAT5-BBkDL813.js} +2 -2
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-DMD4pzqJ.js.map → vennDiagram-LZ73GAT5-BBkDL813.js.map} +1 -1
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-B5BYuiJN.js → xychartDiagram-JWTSCODW-CHuszw7E.js} +3 -3
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-B5BYuiJN.js.map → xychartDiagram-JWTSCODW-CHuszw7E.js.map} +1 -1
- package/webapp/dist/index.html +1 -1
|
@@ -126,7 +126,7 @@ members:
|
|
|
126
126
|
|
|
127
127
|
Rules:
|
|
128
128
|
|
|
129
|
-
- If missing, `diligence-push-max` defaults to **
|
|
129
|
+
- If missing, `diligence-push-max` defaults to **99** for that member.
|
|
130
130
|
- If `diligence-push-max < 1`, diligence-push is disabled for that member (no injection), even if the diligence file exists.
|
|
131
131
|
- Built-in shadow members `fuxi` and `pangu` default to `diligence-push-max: 0` unless explicitly overridden in team.yaml.
|
|
132
132
|
|
|
@@ -66,7 +66,7 @@ Dominds 主线对话旨在长期运行。主线对话"停止"(变为空闲)
|
|
|
66
66
|
|
|
67
67
|
为避免无限循环,diligence-push 有一个按对话的预算(每个成员的 `diligence-push-max`),控制对于给定对话在当前预算内还能注入多少个自动继续的鞭策语;预算耗尽后,运行时会停止继续自动鞭策。
|
|
68
68
|
|
|
69
|
-
- 默认值:**
|
|
69
|
+
- 默认值:**99**
|
|
70
70
|
- 如果 `< 1`,则该成员的 diligence-push 有效禁用
|
|
71
71
|
- 可通过 `.minds/team.yaml` 中的 `diligence-push-max` 按成员配置
|
|
72
72
|
|
|
@@ -114,7 +114,7 @@ members:
|
|
|
114
114
|
|
|
115
115
|
规则:
|
|
116
116
|
|
|
117
|
-
- 如果缺失,`diligence-push-max` 对于该成员默认为 **
|
|
117
|
+
- 如果缺失,`diligence-push-max` 对于该成员默认为 **99**。
|
|
118
118
|
- 如果 `diligence-push-max < 1`,则该成员的 diligence-push 被禁用(不注入),即使鞭策语文件存在。
|
|
119
119
|
- 内置影子成员 `fuxi` 和 `pangu` 默认为 `diligence-push-max: 0`,除非在 team.yaml 中显式覆盖。
|
|
120
120
|
|
|
@@ -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
|
-
- `
|
|
328
|
+
- `anthropic`: uses the Anthropic **Messages API** (also used by Anthropic-compatible coding-plan endpoints; e.g. Volcano Engine Coding Plan `.../api/coding`)
|
|
329
|
+
- `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)
|
|
329
330
|
- **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.
|
|
330
331
|
|
|
331
332
|
```yaml
|
|
@@ -266,7 +266,8 @@
|
|
|
266
266
|
`apiType` 说明(常见值):
|
|
267
267
|
|
|
268
268
|
- `openai`:使用 OpenAI **Responses API**(适用于 OpenAI 官方;需要 `/v1` 语义的 `responses` 端点)
|
|
269
|
-
- `
|
|
269
|
+
- `anthropic`:使用 Anthropic **Messages API**(也用于 Anthropic 兼容的 Coding Plan 端点;例如 Volcano Engine Coding Plan `.../api/coding`)
|
|
270
|
+
- `openai-compatible`:使用 OpenAI **Chat Completions API**(适用于多数“OpenAI 兼容”第三方/代理;例如手动配置的 Ark `.../api/v3` 端点)
|
|
270
271
|
- **识图支持**:如果该 provider/model 支持 Chat Completions 的多模态输入,Dominds 会把工具输出里的图片(`func_result_msg.contentItems[].type=input_image`,来自 MCP 等工具)读取 artifact 后作为 `image_url` 形式喂给模型;不支持的 mimeType 会降级成文本提示。
|
|
271
272
|
|
|
272
273
|
```yaml
|
package/dist/llm/client.d.ts
CHANGED
|
@@ -43,7 +43,6 @@ export type ModelParamOption = (ModelParamOptionBase & {
|
|
|
43
43
|
default?: string;
|
|
44
44
|
});
|
|
45
45
|
export type ProviderModelParamOptions = {
|
|
46
|
-
general?: Record<string, ModelParamOption>;
|
|
47
46
|
codex?: Record<string, ModelParamOption>;
|
|
48
47
|
openai?: Record<string, ModelParamOption>;
|
|
49
48
|
anthropic?: Record<string, ModelParamOption>;
|
package/dist/llm/defaults.yaml
CHANGED
|
@@ -28,12 +28,6 @@ providers:
|
|
|
28
28
|
#
|
|
29
29
|
# These are documentation hints for humans/agents; they are not auto-applied.
|
|
30
30
|
model_param_options:
|
|
31
|
-
general:
|
|
32
|
-
max_tokens:
|
|
33
|
-
# Provider-agnostic cap on generated tokens.
|
|
34
|
-
type: integer
|
|
35
|
-
min: 1
|
|
36
|
-
description: Maximum tokens to generate (provider-agnostic override).
|
|
37
31
|
codex:
|
|
38
32
|
# Isolation principle:
|
|
39
33
|
# - These hints describe the Codex wrapper only.
|
|
@@ -95,10 +89,6 @@ providers:
|
|
|
95
89
|
json_response:
|
|
96
90
|
type: boolean
|
|
97
91
|
description: Force JSON object output mode.
|
|
98
|
-
max_tokens:
|
|
99
|
-
type: integer
|
|
100
|
-
min: 1
|
|
101
|
-
description: Provider-specific max tokens override.
|
|
102
92
|
models:
|
|
103
93
|
gpt-5.5:
|
|
104
94
|
name: GPT-5.5
|
|
@@ -185,11 +175,6 @@ providers:
|
|
|
185
175
|
tech_spec_url: https://platform.minimaxi.com/docs/api-reference/text-anthropic-api
|
|
186
176
|
api_mgmt_url: https://platform.minimaxi.com/
|
|
187
177
|
model_param_options:
|
|
188
|
-
general:
|
|
189
|
-
max_tokens:
|
|
190
|
-
type: integer
|
|
191
|
-
min: 1
|
|
192
|
-
description: Fully supported. Maximum number of tokens to generate.
|
|
193
178
|
anthropic:
|
|
194
179
|
temperature:
|
|
195
180
|
type: number
|
|
@@ -242,11 +227,6 @@ providers:
|
|
|
242
227
|
tech_spec_url: https://platform.minimaxi.com/docs/api-reference/text-anthropic-api
|
|
243
228
|
api_mgmt_url: https://platform.minimaxi.com/
|
|
244
229
|
model_param_options:
|
|
245
|
-
general:
|
|
246
|
-
max_tokens:
|
|
247
|
-
type: integer
|
|
248
|
-
min: 1
|
|
249
|
-
description: Fully supported. Maximum number of tokens to generate.
|
|
250
230
|
anthropic:
|
|
251
231
|
temperature:
|
|
252
232
|
type: number
|
|
@@ -299,11 +279,6 @@ providers:
|
|
|
299
279
|
tech_spec_url: https://platform.minimax.io/docs/api-reference/text-anthropic-api
|
|
300
280
|
api_mgmt_url: https://platform.minimax.io/
|
|
301
281
|
model_param_options:
|
|
302
|
-
general:
|
|
303
|
-
max_tokens:
|
|
304
|
-
type: integer
|
|
305
|
-
min: 1
|
|
306
|
-
description: Fully supported. Maximum number of tokens to generate.
|
|
307
282
|
anthropic:
|
|
308
283
|
temperature:
|
|
309
284
|
type: number
|
|
@@ -356,11 +331,6 @@ providers:
|
|
|
356
331
|
tech_spec_url: https://platform.minimax.io/docs/api-reference/text-anthropic-api
|
|
357
332
|
api_mgmt_url: https://platform.minimax.io/
|
|
358
333
|
model_param_options:
|
|
359
|
-
general:
|
|
360
|
-
max_tokens:
|
|
361
|
-
type: integer
|
|
362
|
-
min: 1
|
|
363
|
-
description: Fully supported. Maximum number of tokens to generate.
|
|
364
334
|
anthropic:
|
|
365
335
|
temperature:
|
|
366
336
|
type: number
|
|
@@ -481,95 +451,81 @@ providers:
|
|
|
481
451
|
name: Volcano Engine Coding Plan
|
|
482
452
|
apiType: anthropic
|
|
483
453
|
baseUrl: https://ark.cn-beijing.volces.com/api/coding
|
|
484
|
-
apiKeyEnvVar:
|
|
454
|
+
apiKeyEnvVar: ARK_API_KEY
|
|
485
455
|
tech_spec_url: https://www.volcengine.com/docs/82379/1928261
|
|
486
456
|
api_mgmt_url: https://console.volcengine.com/ark
|
|
487
457
|
models:
|
|
488
|
-
doubao-seed-code:
|
|
489
|
-
name: Doubao
|
|
458
|
+
doubao-seed-2.0-code:
|
|
459
|
+
name: Doubao-Seed-2.0-Code
|
|
490
460
|
supports_image_input: true
|
|
491
461
|
context_length: 256000
|
|
492
462
|
input_length: 256000
|
|
493
463
|
output_length: 8192
|
|
494
464
|
context_window: '256K'
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
supports_image_input: false
|
|
499
|
-
context_length: 128000
|
|
500
|
-
input_length: 96000
|
|
501
|
-
output_length: 32000
|
|
502
|
-
context_window: '128K'
|
|
503
|
-
glm-4.7:
|
|
504
|
-
name: GLM 4.7
|
|
505
|
-
supports_image_input: false
|
|
465
|
+
doubao-seed-2.0-pro:
|
|
466
|
+
name: Doubao-Seed-2.0-pro
|
|
467
|
+
supports_image_input: true
|
|
506
468
|
context_length: 256000
|
|
507
469
|
input_length: 256000
|
|
508
470
|
output_length: 8192
|
|
509
471
|
context_window: '256K'
|
|
510
|
-
|
|
511
|
-
name:
|
|
512
|
-
context_length: 200000
|
|
513
|
-
input_length: 200000
|
|
514
|
-
output_length: 8192
|
|
515
|
-
context_window: '200K (约20万汉字)'
|
|
516
|
-
volcano-engine:
|
|
517
|
-
name: Volcano Engine
|
|
518
|
-
apiType: openai-compatible
|
|
519
|
-
baseUrl: https://ark.cn-beijing.volces.com/api/v3
|
|
520
|
-
apiKeyEnvVar: ARK_API_KEY
|
|
521
|
-
tech_spec_url: https://api.volcengine.com/api-docs/view?serviceCode=ark&version=2024-01-01
|
|
522
|
-
api_mgmt_url: https://console.volcengine.com/ark
|
|
523
|
-
models:
|
|
524
|
-
deepseek-v3-2-251201:
|
|
525
|
-
name: DeepSeek-V3.2
|
|
472
|
+
doubao-seed-2.0-lite:
|
|
473
|
+
name: Doubao-Seed-2.0-lite
|
|
526
474
|
supports_image_input: false
|
|
527
|
-
context_length:
|
|
528
|
-
input_length:
|
|
529
|
-
output_length:
|
|
530
|
-
context_window: '
|
|
531
|
-
doubao-seed-code
|
|
532
|
-
name: Doubao
|
|
475
|
+
context_length: 256000
|
|
476
|
+
input_length: 256000
|
|
477
|
+
output_length: 8192
|
|
478
|
+
context_window: '256K'
|
|
479
|
+
doubao-seed-code:
|
|
480
|
+
name: Doubao-Seed-Code
|
|
533
481
|
supports_image_input: true
|
|
534
482
|
context_length: 256000
|
|
535
483
|
input_length: 256000
|
|
536
484
|
output_length: 8192
|
|
537
485
|
context_window: '256K'
|
|
538
|
-
|
|
539
|
-
name:
|
|
486
|
+
minimax-m2.7:
|
|
487
|
+
name: MiniMax-M2.7
|
|
488
|
+
upstream_model: minimax-m2.7
|
|
489
|
+
supports_image_input: false
|
|
490
|
+
context_length: 204800
|
|
491
|
+
input_length: 204800
|
|
492
|
+
output_length: 8192
|
|
493
|
+
context_window: '204K'
|
|
494
|
+
glm-5.1:
|
|
495
|
+
name: GLM-5.1
|
|
540
496
|
supports_image_input: false
|
|
541
497
|
context_length: 256000
|
|
542
498
|
input_length: 256000
|
|
543
499
|
output_length: 8192
|
|
544
500
|
context_window: '256K'
|
|
545
|
-
|
|
546
|
-
name:
|
|
501
|
+
glm-4.7:
|
|
502
|
+
name: GLM-4.7
|
|
547
503
|
supports_image_input: false
|
|
548
504
|
context_length: 256000
|
|
549
505
|
input_length: 256000
|
|
550
506
|
output_length: 8192
|
|
551
507
|
context_window: '256K'
|
|
552
|
-
|
|
553
|
-
name:
|
|
508
|
+
deepseek-v3.2:
|
|
509
|
+
name: DeepSeek-V3.2
|
|
554
510
|
supports_image_input: false
|
|
555
|
-
context_length:
|
|
556
|
-
input_length:
|
|
557
|
-
output_length:
|
|
558
|
-
context_window: '
|
|
559
|
-
kimi-k2
|
|
560
|
-
name: Kimi
|
|
511
|
+
context_length: 128000
|
|
512
|
+
input_length: 96000
|
|
513
|
+
output_length: 32000
|
|
514
|
+
context_window: '128K'
|
|
515
|
+
kimi-k2.6:
|
|
516
|
+
name: Kimi-K2.6
|
|
561
517
|
supports_image_input: false
|
|
562
518
|
context_length: 200000
|
|
563
519
|
input_length: 200000
|
|
564
520
|
output_length: 8192
|
|
565
|
-
context_window: '200K
|
|
566
|
-
|
|
567
|
-
name:
|
|
521
|
+
context_window: '200K'
|
|
522
|
+
kimi-k2.5:
|
|
523
|
+
name: Kimi-K2.5
|
|
568
524
|
supports_image_input: false
|
|
569
|
-
context_length:
|
|
570
|
-
input_length:
|
|
525
|
+
context_length: 200000
|
|
526
|
+
input_length: 200000
|
|
571
527
|
output_length: 8192
|
|
572
|
-
context_window: '
|
|
528
|
+
context_window: '200K'
|
|
573
529
|
anthropic:
|
|
574
530
|
name: Anthropic
|
|
575
531
|
apiType: anthropic
|
|
@@ -578,11 +534,6 @@ providers:
|
|
|
578
534
|
tech_spec_url: https://docs.anthropic.com/en/docs
|
|
579
535
|
api_mgmt_url: https://console.anthropic.com/
|
|
580
536
|
model_param_options:
|
|
581
|
-
general:
|
|
582
|
-
max_tokens:
|
|
583
|
-
type: integer
|
|
584
|
-
min: 1
|
|
585
|
-
description: Maximum tokens to generate (provider-agnostic override).
|
|
586
537
|
anthropic:
|
|
587
538
|
temperature:
|
|
588
539
|
type: number
|
|
@@ -639,11 +590,6 @@ providers:
|
|
|
639
590
|
tech_spec_url: https://api-docs.deepseek.com/zh-cn/guides/anthropic_api
|
|
640
591
|
api_mgmt_url: https://platform.deepseek.com/api_keys
|
|
641
592
|
model_param_options:
|
|
642
|
-
general:
|
|
643
|
-
max_tokens:
|
|
644
|
-
type: integer
|
|
645
|
-
min: 1
|
|
646
|
-
description: Fully supported. Maximum number of tokens to generate.
|
|
647
593
|
anthropic:
|
|
648
594
|
temperature:
|
|
649
595
|
type: number
|
|
@@ -698,11 +644,6 @@ providers:
|
|
|
698
644
|
tech_spec_url: https://help.aliyun.com/zh/model-studio/other-tools-coding-plan
|
|
699
645
|
api_mgmt_url: https://bailian.console.aliyun.com/cn-beijing/?tab=model#/efm/coding_plan
|
|
700
646
|
model_param_options:
|
|
701
|
-
general:
|
|
702
|
-
max_tokens:
|
|
703
|
-
type: integer
|
|
704
|
-
min: 1
|
|
705
|
-
description: Maximum tokens to generate (provider-agnostic override).
|
|
706
647
|
anthropic:
|
|
707
648
|
temperature:
|
|
708
649
|
type: number
|
|
@@ -780,12 +721,6 @@ providers:
|
|
|
780
721
|
api_mgmt_url: https://platform.openai.com/api-keys
|
|
781
722
|
# These are documentation hints for humans/agents; they are not auto-applied.
|
|
782
723
|
model_param_options:
|
|
783
|
-
general:
|
|
784
|
-
max_tokens:
|
|
785
|
-
# Provider-agnostic cap on generated tokens.
|
|
786
|
-
type: integer
|
|
787
|
-
min: 1
|
|
788
|
-
description: Maximum tokens to generate (provider-agnostic override).
|
|
789
724
|
openai:
|
|
790
725
|
# Isolation principle:
|
|
791
726
|
# - These hints describe the OpenAI Responses wrapper only.
|
|
@@ -864,10 +799,6 @@ providers:
|
|
|
864
799
|
web_search_include_sources:
|
|
865
800
|
type: boolean
|
|
866
801
|
description: Include `web_search_call.action.sources` in the response payload.
|
|
867
|
-
max_tokens:
|
|
868
|
-
type: integer
|
|
869
|
-
min: 1
|
|
870
|
-
description: Provider-specific max tokens override.
|
|
871
802
|
models:
|
|
872
803
|
gpt-5.5:
|
|
873
804
|
name: GPT-5.5
|
|
@@ -1061,7 +1061,6 @@ class AnthropicGen {
|
|
|
1061
1061
|
const requestMessages = await buildAnthropicRequestMessages(context, requestContext, providerConfig, receiver.toolResultImageIngest, receiver.userImageIngest);
|
|
1062
1062
|
const anthropicParams = agent.model_params?.anthropic || {};
|
|
1063
1063
|
const forceJsonResponse = resolveAnthropicJsonResponseEnabled(agent);
|
|
1064
|
-
const maxTokens = agent.model_params?.max_tokens;
|
|
1065
1064
|
// Safety check: model should never be undefined at this point due to validation in driver
|
|
1066
1065
|
if (!agent.model) {
|
|
1067
1066
|
throw new Error(`Internal error: Model is undefined for agent '${agent.id}' after validation`);
|
|
@@ -1074,7 +1073,7 @@ class AnthropicGen {
|
|
|
1074
1073
|
model: agent.model,
|
|
1075
1074
|
messages: requestMessages,
|
|
1076
1075
|
system: systemPrompt.length > 0 ? systemPrompt : undefined,
|
|
1077
|
-
max_tokens:
|
|
1076
|
+
max_tokens: anthropicParams.max_tokens ?? outputLength ?? 1024,
|
|
1078
1077
|
...(anthropicTools.length > 0 && { tools: anthropicTools }),
|
|
1079
1078
|
...(forceJsonResponse && {
|
|
1080
1079
|
tool_choice: {
|
|
@@ -1116,7 +1115,6 @@ class AnthropicGen {
|
|
|
1116
1115
|
});
|
|
1117
1116
|
const anthropicParams = agent.model_params?.anthropic || {};
|
|
1118
1117
|
const forceJsonResponse = resolveAnthropicJsonResponseEnabled(agent);
|
|
1119
|
-
const maxTokens = agent.model_params?.max_tokens;
|
|
1120
1118
|
// Safety check: model should never be undefined at this point due to validation in driver
|
|
1121
1119
|
if (!agent.model) {
|
|
1122
1120
|
throw new Error(`Internal error: Model is undefined for agent '${agent.id}' after validation`);
|
|
@@ -1129,7 +1127,7 @@ class AnthropicGen {
|
|
|
1129
1127
|
model: agent.model,
|
|
1130
1128
|
messages: requestMessages,
|
|
1131
1129
|
system: systemPrompt.length > 0 ? systemPrompt : undefined,
|
|
1132
|
-
max_tokens:
|
|
1130
|
+
max_tokens: anthropicParams.max_tokens ?? outputLength ?? 1024,
|
|
1133
1131
|
...(anthropicTools.length > 0 && { tools: anthropicTools }),
|
|
1134
1132
|
...(forceJsonResponse && {
|
|
1135
1133
|
tool_choice: {
|
|
@@ -689,10 +689,6 @@ class OpenAiCompatibleGen {
|
|
|
689
689
|
onUserImageIngest: receiver.userImageIngest,
|
|
690
690
|
});
|
|
691
691
|
const openAiParams = agent.model_params?.openai || {};
|
|
692
|
-
const maxTokens = agent.model_params?.max_tokens;
|
|
693
|
-
const modelInfo = providerConfig.models[agent.model];
|
|
694
|
-
const outputLength = modelInfo?.output_length;
|
|
695
|
-
const maxOutputTokens = maxTokens ?? openAiParams.max_tokens ?? outputLength ?? 1024;
|
|
696
692
|
const parallelToolCalls = openAiParams.parallel_tool_calls ?? true;
|
|
697
693
|
const responseFormat = buildChatCompletionResponseFormat(openAiParams);
|
|
698
694
|
const payload = {
|
|
@@ -711,7 +707,6 @@ class OpenAiCompatibleGen {
|
|
|
711
707
|
? { tools: funcTools.map(funcToolToChatCompletionTool), tool_choice: 'auto' }
|
|
712
708
|
: { tool_choice: 'none' }),
|
|
713
709
|
parallel_tool_calls: parallelToolCalls,
|
|
714
|
-
max_tokens: maxOutputTokens,
|
|
715
710
|
};
|
|
716
711
|
let sayingStarted = false;
|
|
717
712
|
let thinkingStarted = false;
|
|
@@ -896,10 +891,6 @@ class OpenAiCompatibleGen {
|
|
|
896
891
|
},
|
|
897
892
|
});
|
|
898
893
|
const openAiParams = agent.model_params?.openai || {};
|
|
899
|
-
const maxTokens = agent.model_params?.max_tokens;
|
|
900
|
-
const modelInfo = providerConfig.models[agent.model];
|
|
901
|
-
const outputLength = modelInfo?.output_length;
|
|
902
|
-
const maxOutputTokens = maxTokens ?? openAiParams.max_tokens ?? outputLength ?? 1024;
|
|
903
894
|
const parallelToolCalls = openAiParams.parallel_tool_calls ?? true;
|
|
904
895
|
const responseFormat = buildChatCompletionResponseFormat(openAiParams);
|
|
905
896
|
const payload = {
|
|
@@ -914,7 +905,6 @@ class OpenAiCompatibleGen {
|
|
|
914
905
|
...(funcTools.length > 0 && { tools: funcTools.map(funcToolToChatCompletionTool) }),
|
|
915
906
|
tool_choice: 'auto',
|
|
916
907
|
parallel_tool_calls: parallelToolCalls,
|
|
917
|
-
max_tokens: maxOutputTokens,
|
|
918
908
|
};
|
|
919
909
|
try {
|
|
920
910
|
const response = await client.chat.completions.create(payload, {
|
package/dist/llm/gen/openai.js
CHANGED
|
@@ -1214,10 +1214,6 @@ class OpenAiGen {
|
|
|
1214
1214
|
const client = new openai_1.default({ apiKey, baseURL: providerConfig.baseUrl });
|
|
1215
1215
|
const requestInput = await buildOpenAiRequestInput(context, requestContext, providerConfig, receiver.toolResultImageIngest, receiver.userImageIngest);
|
|
1216
1216
|
const openAiParams = agent.model_params?.openai || {};
|
|
1217
|
-
const maxTokens = agent.model_params?.max_tokens;
|
|
1218
|
-
const modelInfo = providerConfig.models[agent.model];
|
|
1219
|
-
const outputLength = modelInfo?.output_length;
|
|
1220
|
-
const maxOutputTokens = maxTokens ?? openAiParams.max_tokens ?? outputLength ?? 1024;
|
|
1221
1217
|
const parallelToolCalls = openAiParams.parallel_tool_calls ?? true;
|
|
1222
1218
|
const textConfig = buildOpenAiTextConfig(openAiParams);
|
|
1223
1219
|
const reasoning = buildOpenAiReasoning(openAiParams);
|
|
@@ -1229,7 +1225,6 @@ class OpenAiGen {
|
|
|
1229
1225
|
model: agent.model,
|
|
1230
1226
|
input: requestInput,
|
|
1231
1227
|
instructions: systemPrompt.trim().length > 0 ? systemPrompt : undefined,
|
|
1232
|
-
max_output_tokens: maxOutputTokens,
|
|
1233
1228
|
parallel_tool_calls: parallelToolCalls,
|
|
1234
1229
|
store: false,
|
|
1235
1230
|
stream: true,
|
|
@@ -1989,10 +1984,6 @@ class OpenAiGen {
|
|
|
1989
1984
|
outputs.push({ kind: 'user_image_ingest', ingest });
|
|
1990
1985
|
});
|
|
1991
1986
|
const openAiParams = agent.model_params?.openai || {};
|
|
1992
|
-
const maxTokens = agent.model_params?.max_tokens;
|
|
1993
|
-
const modelInfo = providerConfig.models[agent.model];
|
|
1994
|
-
const outputLength = modelInfo?.output_length;
|
|
1995
|
-
const maxOutputTokens = maxTokens ?? openAiParams.max_tokens ?? outputLength ?? 1024;
|
|
1996
1987
|
const parallelToolCalls = openAiParams.parallel_tool_calls ?? true;
|
|
1997
1988
|
const textConfig = buildOpenAiTextConfig(openAiParams);
|
|
1998
1989
|
const reasoning = buildOpenAiReasoning(openAiParams);
|
|
@@ -2003,7 +1994,6 @@ class OpenAiGen {
|
|
|
2003
1994
|
model: agent.model,
|
|
2004
1995
|
input: requestInput,
|
|
2005
1996
|
instructions: systemPrompt.trim().length > 0 ? systemPrompt : undefined,
|
|
2006
|
-
max_output_tokens: maxOutputTokens,
|
|
2007
1997
|
parallel_tool_calls: parallelToolCalls,
|
|
2008
1998
|
store: false,
|
|
2009
1999
|
stream: false,
|
|
@@ -18,7 +18,6 @@ function mergeModelParams(base, overlay) {
|
|
|
18
18
|
if (!overlay)
|
|
19
19
|
return base;
|
|
20
20
|
return {
|
|
21
|
-
max_tokens: overlay.max_tokens ?? base.max_tokens,
|
|
22
21
|
codex: { ...(base.codex ?? {}), ...(overlay.codex ?? {}) },
|
|
23
22
|
openai: { ...(base.openai ?? {}), ...(overlay.openai ?? {}) },
|
|
24
23
|
anthropic: { ...(base.anthropic ?? {}), ...(overlay.anthropic ?? {}) },
|
|
@@ -352,7 +352,6 @@ function extractProminentEnumModelParams(modelParamOptions) {
|
|
|
352
352
|
sections.push([namespace, section]);
|
|
353
353
|
}
|
|
354
354
|
};
|
|
355
|
-
addSection('general', modelParamOptions.general);
|
|
356
355
|
addSection('codex', modelParamOptions.codex);
|
|
357
356
|
addSection('openai', modelParamOptions.openai);
|
|
358
357
|
addSection('anthropic', modelParamOptions.anthropic);
|
|
@@ -671,10 +670,7 @@ function parseOptionalTeamModelParams(value) {
|
|
|
671
670
|
return null;
|
|
672
671
|
const out = {};
|
|
673
672
|
for (const [namespace, nsUnknown] of Object.entries(value)) {
|
|
674
|
-
if (namespace !== '
|
|
675
|
-
namespace !== 'codex' &&
|
|
676
|
-
namespace !== 'openai' &&
|
|
677
|
-
namespace !== 'anthropic')
|
|
673
|
+
if (namespace !== 'codex' && namespace !== 'openai' && namespace !== 'anthropic')
|
|
678
674
|
return null;
|
|
679
675
|
if (!isRecord(nsUnknown))
|
|
680
676
|
return null;
|
package/dist/team.d.ts
CHANGED
|
@@ -28,7 +28,6 @@ export declare namespace Team {
|
|
|
28
28
|
export function listExplicitToolsets(member: Team.Member): string[];
|
|
29
29
|
type CodexModelParams = {
|
|
30
30
|
temperature?: number;
|
|
31
|
-
max_tokens?: number;
|
|
32
31
|
service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority';
|
|
33
32
|
top_p?: number;
|
|
34
33
|
reasoning_effort?: 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';
|
|
@@ -40,7 +39,6 @@ export declare namespace Team {
|
|
|
40
39
|
};
|
|
41
40
|
type OpenAiModelParams = {
|
|
42
41
|
temperature?: number;
|
|
43
|
-
max_tokens?: number;
|
|
44
42
|
service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority';
|
|
45
43
|
top_p?: number;
|
|
46
44
|
reasoning_effort?: 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';
|
|
@@ -58,7 +56,6 @@ export declare namespace Team {
|
|
|
58
56
|
web_search_include_sources?: boolean;
|
|
59
57
|
};
|
|
60
58
|
export interface ModelParams {
|
|
61
|
-
max_tokens?: number;
|
|
62
59
|
json_response?: boolean;
|
|
63
60
|
codex?: CodexModelParams;
|
|
64
61
|
openai?: OpenAiModelParams;
|
|
@@ -177,10 +174,9 @@ export declare namespace Team {
|
|
|
177
174
|
export function load(): Promise<Team>;
|
|
178
175
|
export const TEAM_YAML_ROOT_KEYS: readonly ["member_defaults", "default_responder", "shell_specialists", "members"];
|
|
179
176
|
export const TEAM_YAML_MEMBER_KEYS: readonly ["name", "from", "use", "import", "provider", "model", "gofor", "nogo", "toolsets", "tools", "model_params", "fbr-effort", "fbr_effort", "fbr_model_params", "diligence-push-max", "diligence_push_max", "read_dirs", "write_dirs", "no_read_dirs", "no_write_dirs", "read_file_ext_names", "write_file_ext_names", "no_read_file_ext_names", "no_write_file_ext_names", "icon", "streaming", "hidden"];
|
|
180
|
-
export const TEAM_YAML_MODEL_PARAMS_ROOT_KEYS: readonly ["
|
|
181
|
-
export const
|
|
182
|
-
export const
|
|
183
|
-
export const TEAM_YAML_MODEL_PARAMS_CODEX_KEYS: readonly ["temperature", "max_tokens", "service_tier", "top_p", "reasoning_effort", "reasoning_summary", "verbosity", "parallel_tool_calls", "web_search", "json_response"];
|
|
177
|
+
export const TEAM_YAML_MODEL_PARAMS_ROOT_KEYS: readonly ["json_response", "codex", "openai", "anthropic"];
|
|
178
|
+
export const TEAM_YAML_MODEL_PARAMS_OPENAI_KEYS: readonly ["temperature", "service_tier", "top_p", "reasoning_effort", "reasoning_summary", "verbosity", "parallel_tool_calls", "safety_identifier", "text_format", "text_format_json_schema_name", "text_format_json_schema", "text_format_json_schema_strict", "web_search_tool", "web_search_context_size", "web_search_allowed_domains", "web_search_include_sources"];
|
|
179
|
+
export const TEAM_YAML_MODEL_PARAMS_CODEX_KEYS: readonly ["temperature", "service_tier", "top_p", "reasoning_effort", "reasoning_summary", "verbosity", "parallel_tool_calls", "web_search", "json_response"];
|
|
184
180
|
export const TEAM_YAML_MODEL_PARAMS_ANTHROPIC_KEYS: readonly ["temperature", "max_tokens", "top_p", "top_k", "stop_sequences", "reasoning_split", "json_response"];
|
|
185
181
|
export {};
|
|
186
182
|
}
|