dominds 0.9.2 → 0.9.3

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.
@@ -1,6 +1,6 @@
1
- # Team Management Toolset (`team-mgmt`)
1
+ # Team Management Toolset (`team_mgmt`)
2
2
 
3
- Chinese version: [中文版](./team-mgmt-toolset.zh.md)
3
+ Chinese version: [中文版](./team_mgmt-toolset.zh.md)
4
4
 
5
5
  This document specifies a dedicated **team management toolset** whose only job is managing the
6
6
  rtws’s “mindset” configuration files under `.minds/` (team roster, LLM providers, and agent
@@ -29,7 +29,7 @@ equivalent of the `ws_mod` toolset + unrestricted `read_dirs`/`write_dirs`), bec
29
29
 
30
30
  ## Migration Plan (Replacing legacy builtin team-manager knowledge)
31
31
 
32
- This document is a **design spec** for the new `team-mgmt` toolset. It is not something we should
32
+ This document is a **design spec** for the new `team_mgmt` toolset. It is not something we should
33
33
  ever tell an agent to “look up” at runtime.
34
34
 
35
35
  Instead, the runtime “single source of truth” for team management guidance should be
@@ -75,9 +75,9 @@ This makes sense for “normal” agents, but it blocks the team manager from do
75
75
  - Providing general-purpose file editing across the repo.
76
76
  - Making `.minds/` broadly writable by default team members.
77
77
 
78
- ## Proposed `team-mgmt` Toolset
78
+ ## Proposed `team_mgmt` Toolset
79
79
 
80
- The `team-mgmt` toolset mirrors a minimal subset of `fs`/`txt`, but **hard-scopes** all operations to
80
+ The `team_mgmt` toolset mirrors a minimal subset of `fs`/`txt`, but **hard-scopes** all operations to
81
81
  `.minds/` and rejects anything outside.
82
82
 
83
83
  ### Naming Conventions (Human / UI)
@@ -124,7 +124,7 @@ Notes:
124
124
  - Reject paths containing `..`.
125
125
  - Reject any path that resolves outside `.minds/` after normalization.
126
126
  - Prefer an explicit allowlist over “anything in the rtws”.
127
- - For `team-mgmt`, that explicit allowlist is `.minds/**` (including `.minds/memory/**`) so the
127
+ - For `team_mgmt`, that explicit allowlist is `.minds/**` (including `.minds/memory/**`) so the
128
128
  team manager can repair accidental corruptions made by other tools (even though `.minds/memory/**`
129
129
  already has dedicated `memory` / `team_memory` tools for normal use).
130
130
  - Require explicit `.minds/...` paths and validate them; do not support “implicitly scoped” paths
@@ -133,7 +133,7 @@ Notes:
133
133
  ### Why a dedicated toolset (instead of only `read_dirs` / `write_dirs`)?
134
134
 
135
135
  `read_dirs` / `write_dirs` are still valuable, but they are configured in `.minds/team.yaml`, which
136
- may not exist during bootstrap. A dedicated `team-mgmt` toolset:
136
+ may not exist during bootstrap. A dedicated `team_mgmt` toolset:
137
137
 
138
138
  - Lets the team manager create `.minds/team.yaml` safely from “zero state”.
139
139
  - Keeps the scope bounded even if the member’s directory allow/deny lists are empty.
@@ -387,7 +387,7 @@ member_defaults:
387
387
  - ws_read
388
388
  - memory
389
389
  # Default posture: deny `.minds/` edits for normal members.
390
- # (Team management should be done via `team-mgmt` tools, not general file tools.)
390
+ # (Team management should be done via `team_mgmt` tools, not general file tools.)
391
391
  no_read_dirs:
392
392
  - .minds/team.yaml
393
393
  - .minds/llm.yaml
@@ -426,7 +426,7 @@ Best practices:
426
426
  - Keep `.minds/team.yaml` ownership tight; only the team manager should be able to edit it.
427
427
  - Avoid repeating built-in constraints in `team.yaml`:
428
428
  - `*.tsk/**` (encapsulated Taskdocs) are hard-denied for all general file tools.
429
- - `.minds/**` is hard-denied for general file tools; only the dedicated `team-mgmt` toolset can access it.
429
+ - `.minds/**` is hard-denied for general file tools; only the dedicated `team_mgmt` toolset can access it.
430
430
  Put these in `no_*` only when you need extra explicitness; they are enforced regardless.
431
431
 
432
432
  ## Managing `.minds/team/<member>/*.md` (agent minds)
@@ -460,8 +460,8 @@ Suggested structure:
460
460
 
461
461
  Preferred behavior for initial bootstrap:
462
462
 
463
- - The shadow `fuxi` instance should get `team-mgmt` (and the manual tool), not broad `ws_mod`.
464
- - The shadow `pangu` instance should get broad rtws toolsets (e.g. `ws_read`, `ws_mod`, `os`), but not `team-mgmt`.
463
+ - The shadow `fuxi` instance should get `team_mgmt` (and the manual tool), not broad `ws_mod`.
464
+ - The shadow `pangu` instance should get broad rtws toolsets (e.g. `ws_read`, `ws_mod`, `os`), but not `team_mgmt`.
465
465
  - After `.minds/team.yaml` is created, the team definition becomes the source of truth.
466
466
 
467
467
  This avoids needing to grant full rtws access to configure the team.
@@ -472,7 +472,7 @@ This avoids needing to grant full rtws access to configure the team.
472
472
  `member_defaults.model`.
473
473
  - **Provider not found**: Ensure `.minds/team.yaml` `provider` keys exist in merged provider config
474
474
  (`dominds/main/llm/defaults.yaml` + `.minds/llm.yaml`).
475
- - **Access denied when editing `.minds/`**: Intended for general file tools; use `team-mgmt` tools.
475
+ - **Access denied when editing `.minds/`**: Intended for general file tools; use `team_mgmt` tools.
476
476
  - **MCP tools not visible in Tools view**:
477
477
  - Confirm `.minds/mcp.yaml` exists and is valid.
478
478
  - Open **Problems** and look for MCP-related errors.
@@ -1,6 +1,6 @@
1
- # 团队管理工具集(`team-mgmt`)
1
+ # 团队管理工具集(`team_mgmt`)
2
2
 
3
- 英文版:[English](./team-mgmt-toolset.md)
3
+ 英文版:[English](./team_mgmt-toolset.md)
4
4
 
5
5
  本文档指定了一个专用的**团队管理工具集**,其唯一职责是管理 rtws(运行时工作区)`.minds/` 下的"心智"配置文件(团队名单、LLM 提供商和智能体心智文件),而不授予广泛的运行时工作区访问权限。
6
6
 
@@ -23,7 +23,7 @@
23
23
 
24
24
  ## 迁移计划(替换传统的内置团队管理者知识)
25
25
 
26
- 本文档是新的 `team-mgmt` 工具集的**设计规范**。这不是我们应该在运行时让智能体"查阅"的内容。
26
+ 本文档是新的 `team_mgmt` 工具集的**设计规范**。这不是我们应该在运行时让智能体"查阅"的内容。
27
27
 
28
28
  相反,运行时团队管理的"单一事实来源"应该是函数工具 `team_mgmt_manual` 的输出。
29
29
 
@@ -61,9 +61,9 @@
61
61
  - 提供跨仓库的通用文件编辑
62
62
  - 默认让 `.minds/` 可广泛写入
63
63
 
64
- ## 提议的 `team-mgmt` 工具集
64
+ ## 提议的 `team_mgmt` 工具集
65
65
 
66
- `team-mgmt` 工具集镜像 `fs`/`txt` 的最小子集,但**硬作用域**所有操作到 `.minds/` 并拒绝任何外部操作。
66
+ `team_mgmt` 工具集镜像 `fs`/`txt` 的最小子集,但**硬作用域**所有操作到 `.minds/` 并拒绝任何外部操作。
67
67
 
68
68
  ### 命名约定(人类 / UI)
69
69
 
@@ -104,12 +104,12 @@
104
104
  - 拒绝包含 `..` 的路径
105
105
  - 拒绝规范化后解析到 `.minds/` 之外的任何路径
106
106
  - 优先使用显式白名单而非" rtws 中的任何内容"
107
- - 对于 `team-mgmt`,该显式白名单是 `.minds/**`(包括 `.minds/memory/**`),以便团队管理者可以修复其他工具造成的意外损坏(即使 `.minds/memory/**` 已有专用的 `memory` / `team_memory` 工具供正常使用)
107
+ - 对于 `team_mgmt`,该显式白名单是 `.minds/**`(包括 `.minds/memory/**`),以便团队管理者可以修复其他工具造成的意外损坏(即使 `.minds/memory/**` 已有专用的 `memory` / `team_memory` 工具供正常使用)
108
108
  - 需要显式的 `.minds/...` 路径并验证它们;不支持像 `team.yaml` 这样的"隐式作用域"路径
109
109
 
110
110
  ### 为什么需要专用工具集(而不是仅 `read_dirs` / `write_dirs`)?
111
111
 
112
- `read_dirs` / `write_dirs` 仍然很有价值,但它们配置在 `.minds/team.yaml` 中,在引导期间可能不存在。专用的 `team-mgmt` 工具集:
112
+ `read_dirs` / `write_dirs` 仍然很有价值,但它们配置在 `.minds/team.yaml` 中,在引导期间可能不存在。专用的 `team_mgmt` 工具集:
113
113
 
114
114
  - 让团队管理者能够从"零状态"安全地创建 `.minds/team.yaml`
115
115
  - 即使成员的目录允许/拒绝列表为空,也保持作用域边界
@@ -335,7 +335,7 @@ member_defaults:
335
335
  - ws_read
336
336
  - memory
337
337
  # 默认姿态:拒绝普通成员的 `.minds/` 编辑
338
- #(团队管理应通过 `team-mgmt` 工具完成,而非通用文件工具)
338
+ #(团队管理应通过 `team_mgmt` 工具完成,而非通用文件工具)
339
339
  no_read_dirs:
340
340
  - .minds/team.yaml
341
341
  - .minds/llm.yaml
@@ -372,7 +372,7 @@ members:
372
372
  - 保持 `.minds/team.yaml` 的所有权严格;只有团队管理者应该能够编辑它
373
373
  - 避免在 `team.yaml` 中重复内置约束:
374
374
  - `*.tsk/**`(封装的 Taskdocs)对所有通用文件工具被硬性拒绝
375
- - `.minds/**` 对通用文件工具被硬性拒绝;只有专用的 `team-mgmt` 工具集可以访问它
375
+ - `.minds/**` 对通用文件工具被硬性拒绝;只有专用的 `team_mgmt` 工具集可以访问它
376
376
  - 只有当你需要额外的显式性时才将这些放入 `no_*`;无论如何都会强制执行
377
377
 
378
378
  ## 管理 `.minds/team/<member>/*.md`(智能体心智)
@@ -406,8 +406,8 @@ members:
406
406
 
407
407
  初始引导的首选行为:
408
408
 
409
- - 影子成员 `fuxi` 实例应该获得 `team-mgmt`(和手册工具),而不是广泛的 `ws_mod`
410
- - 影子成员 `pangu` 实例应该获得广泛的 rtws 工具集(例如 `ws_read`、`ws_mod`、`os`),但不获得 `team-mgmt`
409
+ - 影子成员 `fuxi` 实例应该获得 `team_mgmt`(和手册工具),而不是广泛的 `ws_mod`
410
+ - 影子成员 `pangu` 实例应该获得广泛的 rtws 工具集(例如 `ws_read`、`ws_mod`、`os`),但不获得 `team_mgmt`
411
411
  - 在创建 `.minds/team.yaml` 后,团队定义成为事实来源
412
412
 
413
413
  这避免了需要授予完整的 rtws 访问权限来配置团队。
@@ -416,7 +416,7 @@ members:
416
416
 
417
417
  - **"缺少必需的 provider/model"**:确保 `.minds/team.yaml` 有 `member_defaults.provider` 和 `member_defaults.model`
418
418
  - **找不到提供商**:确保 `.minds/team.yaml` 的 `provider` 键存在于合并的提供商配置中(`dominds/main/llm/defaults.yaml` + `.minds/llm.yaml`)
419
- - **编辑 `.minds/` 时访问被拒绝**:通用文件工具的预期行为;使用 `team-mgmt` 工具
419
+ - **编辑 `.minds/` 时访问被拒绝**:通用文件工具的预期行为;使用 `team_mgmt` 工具
420
420
  - **MCP 工具在工具视图中不可见**:
421
421
  - 确认 `.minds/mcp.yaml` 存在且有效
422
422
  - 打开**问题**并查找 MCP 相关错误
@@ -0,0 +1,3 @@
1
+ You are the commander, in charge of os shell command execution.
2
+
3
+ Be caucious to execute dangerous/destructive commands, ask human confirmation when not sure, but never bother them for daily trivialities.
@@ -0,0 +1,287 @@
1
+ ## Team Definition
2
+
3
+ The team definition lives in `.minds/team.yaml`. This file configures team composition, member roles, LLM provider/model for each member agent, toolsets, and access permissions for all AI agents in this workspace.
4
+
5
+ ### Structure Overview
6
+
7
+ The `team.yaml` file has three main sections:
8
+
9
+ ```yaml
10
+ member_defaults: { ... } # Default settings applied to all members
11
+ default_responder: name # Member who handles unspecified requests
12
+ members: { ... } # Individual member configurations
13
+ ```
14
+
15
+ ### Member Configuration Properties
16
+
17
+ Each member supports these properties:
18
+
19
+ | Property | Type | Description |
20
+ | --------------- | ------- | --------------------------------------------------------------------------- |
21
+ | `name` | string | Display name for the member |
22
+ | `icon` | string | Emoji identifier for UI display |
23
+ | `gofor` | list | Responsibilities and primary duties |
24
+ | `provider` | string | LLM provider key from `llm.yaml` |
25
+ | `model` | string | Model name within the provider |
26
+ | `toolsets` | list | Capability groups: `memory`, `ws_read`, `ws_mod`, `team_memory` |
27
+ | `tools` | list | Specific tool names: `shell_cmd`, `git`, `stop_daemon`, `get_daemon_output` |
28
+ | `streaming` | boolean | Enable/disable streaming mode (required for shell tools) |
29
+ | `read_dirs` | list | Allowed read directories (glob patterns) |
30
+ | `no_read_dirs` | list | Explicitly denied read directories |
31
+ | `write_dirs` | list | Allowed write directories (glob patterns) |
32
+ | `no_write_dirs` | list | Explicitly denied write directories |
33
+
34
+ ## LLM Configuration
35
+
36
+ ### Builtin Defaults
37
+
38
+ Common defaults are already supplied:
39
+
40
+ ```yaml
41
+ providers:
42
+ codex:
43
+ name: Codex (ChatGPT)
44
+ apiType: codex
45
+ baseUrl: https://chatgpt.com/backend-api/
46
+ apiKeyEnvVar: CODEX_HOME
47
+ tech_spec_url: https://platform.openai.com/docs/api-reference/responses
48
+ api_mgmt_url: https://chatgpt.com/
49
+ models:
50
+ gpt-5.2-codex:
51
+ name: GPT-5.2 Codex
52
+ context_length: 272000
53
+ input_length: 272000
54
+ output_length: 32768
55
+ context_window: '272K'
56
+ gpt-5.2:
57
+ name: GPT-5.2
58
+ context_length: 272000
59
+ input_length: 272000
60
+ output_length: 32768
61
+ context_window: '272K'
62
+ minimaxi.com-coding-plan:
63
+ name: MiniMax CN Coding Plan
64
+ apiType: anthropic
65
+ baseUrl: https://api.minimaxi.com/anthropic
66
+ apiKeyEnvVar: MINIMAX_CN_CP_API_KEY
67
+ tech_spec_url: https://platform.minimaxi.com/document/guides
68
+ api_mgmt_url: https://platform.minimaxi.com/
69
+ models:
70
+ MiniMax-M2.1:
71
+ name: MiniMax M2.1
72
+ context_length: 204800
73
+ input_length: 204800
74
+ output_length: 8192
75
+ context_window: '204K'
76
+ MiniMax-M2:
77
+ name: MiniMax M2
78
+ context_length: 204800
79
+ input_length: 204800
80
+ output_length: 8192
81
+ context_window: '204K'
82
+ minimaxi.com:
83
+ name: MiniMax CN
84
+ apiType: anthropic
85
+ baseUrl: https://api.minimaxi.com/anthropic
86
+ apiKeyEnvVar: MINIMAX_CN_API_KEY
87
+ tech_spec_url: https://platform.minimaxi.com/document/guides
88
+ api_mgmt_url: https://platform.minimaxi.com/
89
+ models:
90
+ MiniMax-M2.1:
91
+ name: MiniMax M2.1
92
+ context_length: 204800
93
+ input_length: 204800
94
+ output_length: 8192
95
+ context_window: '204K'
96
+ MiniMax-M2:
97
+ name: MiniMax M2 Stable
98
+ context_length: 204800
99
+ input_length: 204800
100
+ output_length: 8192
101
+ context_window: '204K'
102
+ minimax.io-coding-plan:
103
+ name: MiniMax International Coding Plan
104
+ apiType: anthropic
105
+ baseUrl: https://api.minimax.io/anthropic
106
+ apiKeyEnvVar: MINIMAX_CP_API_KEY
107
+ tech_spec_url: https://platform.minimax.io/docs/api-reference
108
+ api_mgmt_url: https://platform.minimax.io/
109
+ models:
110
+ MiniMax-M2.1:
111
+ name: MiniMax M2.1
112
+ context_length: 204800
113
+ input_length: 204800
114
+ output_length: 8192
115
+ context_window: '204K'
116
+ MiniMax-M2:
117
+ name: MiniMax M2
118
+ context_length: 204800
119
+ input_length: 204800
120
+ output_length: 8192
121
+ context_window: '204K'
122
+ minimax.io:
123
+ name: MiniMax International
124
+ apiType: anthropic
125
+ baseUrl: https://api.minimax.io/anthropic
126
+ apiKeyEnvVar: MINIMAX_API_KEY
127
+ tech_spec_url: https://platform.minimax.io/docs/api-reference
128
+ api_mgmt_url: https://platform.minimax.io/
129
+ models:
130
+ MiniMax-M2.1:
131
+ name: MiniMax M2.1
132
+ context_length: 204800
133
+ input_length: 204800
134
+ output_length: 8192
135
+ context_window: '204K'
136
+ MiniMax-M2:
137
+ name: MiniMax M2 Stable
138
+ context_length: 204800
139
+ input_length: 204800
140
+ output_length: 8192
141
+ context_window: '204K'
142
+ bigmodel:
143
+ name: BigModel
144
+ apiType: anthropic
145
+ baseUrl: https://open.bigmodel.cn/api/anthropic
146
+ apiKeyEnvVar: ZHIPUAI_API_KEY
147
+ tech_spec_url: https://docs.bigmodel.cn/
148
+ api_mgmt_url: https://open.bigmodel.cn/usercenter/apikeys
149
+ models:
150
+ glm-4.7:
151
+ name: GLM-4.7
152
+ context_length: 200000
153
+ input_length: 200000
154
+ output_length: 8192
155
+ context_window: '200K'
156
+ glm-4.6:
157
+ name: GLM-4.6
158
+ context_length: 200000
159
+ input_length: 200000
160
+ output_length: 8192
161
+ context_window: '200K'
162
+ glm-4.5:
163
+ name: GLM-4.5
164
+ context_length: 128000
165
+ input_length: 128000
166
+ output_length: 8192
167
+ context_window: '128K'
168
+ glm-4.5-air:
169
+ name: GLM-4.5-Air
170
+ context_length: 128000
171
+ input_length: 128000
172
+ output_length: 8192
173
+ context_window: '128K'
174
+ ark-coding-plan:
175
+ name: Ark Coding Plan
176
+ apiType: anthropic
177
+ baseUrl: https://ark.cn-beijing.volces.com/api/coding
178
+ apiKeyEnvVar: ARK_API_KEY
179
+ tech_spec_url: https://api.volcengine.com/api-docs/view?serviceCode=ark&version=2024-01-01
180
+ api_mgmt_url: https://console.volcengine.com/ark
181
+ models:
182
+ doubao-seed-code-preview-latest:
183
+ name: Doubao Seed Code Preview
184
+ context_length: 256000
185
+ input_length: 256000
186
+ output_length: 8192
187
+ context_window: '256K'
188
+ optimization: 专为Agentic Coding任务优化
189
+ ark:
190
+ name: Ark
191
+ apiType: openai
192
+ baseUrl: https://ark.cn-beijing.volces.com/api/v3
193
+ apiKeyEnvVar: ARK_API_KEY
194
+ tech_spec_url: https://api.volcengine.com/api-docs/view?serviceCode=ark&version=2024-01-01
195
+ api_mgmt_url: https://console.volcengine.com/ark
196
+ models:
197
+ deepseek-v3-2-251201:
198
+ name: DeepSeek-V3.2
199
+ context_length: 128000
200
+ input_length: 96000
201
+ output_length: 32000
202
+ context_window: '128K'
203
+ doubao-seed-code-preview-251028:
204
+ name: Doubao Seed Code Preview 251028
205
+ context_length: 256000
206
+ input_length: 256000
207
+ output_length: 8192
208
+ context_window: '256K'
209
+ doubao-seed-1-6-251015:
210
+ name: Doubao Seed 1.6
211
+ context_length: 256000
212
+ input_length: 256000
213
+ output_length: 8192
214
+ context_window: '256K'
215
+ doubao-seed-1-6-thinking-250715:
216
+ name: Doubao Seed 1.6 Thinking
217
+ context_length: 256000
218
+ input_length: 256000
219
+ output_length: 8192
220
+ context_window: '256K'
221
+ doubao-seed-1-6-lite-251015:
222
+ name: Doubao Seed 1.6 Lite
223
+ context_length: 32000
224
+ input_length: 32000
225
+ output_length: 8192
226
+ context_window: '32K'
227
+ kimi-k2-250905:
228
+ name: Kimi K2
229
+ context_length: 200000
230
+ input_length: 200000
231
+ output_length: 8192
232
+ context_window: '200K (约20万汉字)'
233
+ deepseek-v3-1-terminus:
234
+ name: DeepSeek V3.1 Terminus
235
+ context_length: 131072
236
+ input_length: 131072
237
+ output_length: 8192
238
+ context_window: '128K'
239
+ anthropic:
240
+ name: Anthropic
241
+ apiType: anthropic
242
+ baseUrl: https://api.anthropic.com
243
+ apiKeyEnvVar: ANTHROPIC_API_KEY
244
+ tech_spec_url: https://docs.anthropic.com/en/docs
245
+ api_mgmt_url: https://console.anthropic.com/
246
+ models:
247
+ claude-opus-4.5:
248
+ name: Claude Opus 4.5
249
+ context_length: 200000
250
+ input_length: 200000
251
+ output_length: 8192
252
+ context_window: '200K'
253
+ claude-sonnet-4.5:
254
+ name: Claude Sonnet 4.5
255
+ context_length: 200000
256
+ input_length: 200000
257
+ output_length: 8192
258
+ context_window: '200K'
259
+ claude-haiku-4.5:
260
+ name: Claude Haiku 4.5
261
+ context_length: 200000
262
+ input_length: 200000
263
+ output_length: 8192
264
+ context_window: '200K'
265
+ openai:
266
+ name: OpenAI
267
+ apiType: openai
268
+ baseUrl: https://api.openai.com/v1
269
+ apiKeyEnvVar: OPENAI_API_KEY
270
+ tech_spec_url: https://platform.openai.com/docs
271
+ api_mgmt_url: https://platform.openai.com/api-keys
272
+ models:
273
+ gpt-5.2:
274
+ name: GPT-5.2
275
+ context_length: 272000
276
+ input_length: 272000
277
+ output_length: 32768
278
+ context_window: '272K'
279
+ gpt-5.2-codex:
280
+ name: GPT-5.2 Codex
281
+ context_length: 272000
282
+ input_length: 272000
283
+ output_length: 32768
284
+ context_window: '272K'
285
+ ```
286
+
287
+ More custom LLM providers can be configured in `.minds/llm.yaml` with the same format as above.
@@ -0,0 +1,7 @@
1
+ You are dijiang, the hundun (chaos) itself. You are invoked because the human user yet has no idea/plan of what to do with current workspace. Your mythical incarnations is the pun of your job: transform yourself into many avatars then disappear.
2
+
3
+ Your job is to guide the human user through the initial product definition, goal/constraint setting, and team definition for this workspace.
4
+
5
+ You collect/clarify the user's mission/vision for what to build and maintain, then suggest an optimal agent team definition with social division of labor among individual agents as team members, then land the definition into `.minds/team.yaml` and `.minds/team/*/*.md`
6
+
7
+ The team will serve as the workforce to sustain current workspace as a live produce under continuous DevOps.
@@ -36,11 +36,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.getShowingByDoingCacheStatus = getShowingByDoingCacheStatus;
37
37
  exports.scheduleShowingByDoingForNewDialog = scheduleShowingByDoingForNewDialog;
38
38
  const dialog_run_state_1 = require("./dialog-run-state");
39
- const client_1 = require("./llm/client");
40
39
  const driver_1 = require("./llm/driver");
41
- const registry_1 = require("./llm/gen/registry");
42
40
  const log_1 = require("./log");
43
- const load_1 = require("./minds/load");
44
41
  const runtime_language_1 = require("./shared/runtime-language");
45
42
  const id_1 = require("./shared/utils/id");
46
43
  const inter_dialog_format_1 = require("./shared/utils/inter-dialog-format");
@@ -558,29 +555,11 @@ async function generatePrimingNoteViaMainlineAgent(options) {
558
555
  const { dlg, snapshotCmd, snapshotText, fbrResponses, shellPolicy, fbrEffort } = options;
559
556
  const language = (0, runtime_language_1.getWorkLanguage)();
560
557
  try {
561
- const minds = await (0, load_1.loadAgentMinds)(dlg.agentId, dlg);
562
- const team = minds.team;
563
- const agent = minds.agent;
564
- const systemPrompt = minds.systemPrompt;
565
- const provider = agent.provider ?? team.memberDefaults.provider;
566
- const model = agent.model ?? team.memberDefaults.model;
567
- if (!provider || !model) {
568
- throw new Error(`Missing provider/model for agent '${dlg.agentId}'`);
569
- }
570
- const llmCfg = await client_1.LlmConfig.load();
571
- const providerCfg = llmCfg.getProvider(provider);
572
- if (!providerCfg) {
573
- throw new Error(`Provider configuration not found: '${provider}'`);
574
- }
575
- const llmGen = (0, registry_1.getLlmGenerator)(providerCfg.apiType);
576
- if (!llmGen) {
577
- throw new Error(`LLM generator not found for apiType='${providerCfg.apiType}'`);
578
- }
579
- // Force non-streaming for this synthetic summary generation.
580
- const agentForGen = Object.create(agent);
581
- agentForGen.streaming = false;
582
- // Intentionally pass zero tools: we want a pure text synthesis and must avoid accidental
583
- // `clear_mind` / `change_mind` calls during dialog creation.
558
+ // Use the normal dialog driver (streaming/non-streaming selection, retries, etc.) with a
559
+ // toolless `@self` subdialog, so this behavior matches the runtime driver with no local drift.
560
+ //
561
+ // Tool-less is important here: the Agent Priming synthesis must be a pure text transform of
562
+ // snapshot + drafts, and must not run tools (including any mind-edit tools).
584
563
  const prompt = formatPrimingSynthesisPrompt({
585
564
  language,
586
565
  snapshotCmd,
@@ -589,17 +568,35 @@ async function generatePrimingNoteViaMainlineAgent(options) {
589
568
  fbrDrafts: fbrResponses,
590
569
  shellPolicy,
591
570
  });
592
- const ctxMsgs = [{ type: 'environment_msg', role: 'user', content: prompt }];
593
- const result = await llmGen.genMoreMessages(providerCfg, agentForGen, systemPrompt, [], ctxMsgs, dlg.activeGenSeq, undefined);
594
- const saying = result.messages
595
- .filter((m) => m.type === 'saying_msg')
596
- .map((m) => m.content)
597
- .join('\n')
598
- .trim();
599
- if (saying)
571
+ const tellaskHead = '@self (agent priming synthesis)';
572
+ const tellaskBody = prompt;
573
+ const sub = await dlg.createSubDialog(dlg.agentId, tellaskHead, tellaskBody, {
574
+ originMemberId: dlg.agentId,
575
+ callerDialogId: dlg.id.selfId,
576
+ callId: (0, id_1.generateShortId)(),
577
+ collectiveTargets: [dlg.agentId],
578
+ });
579
+ const initPrompt = (0, inter_dialog_format_1.formatAssignmentFromSupdialog)({
580
+ fromAgentId: dlg.agentId,
581
+ toAgentId: sub.agentId,
582
+ tellaskHead,
583
+ tellaskBody,
584
+ language,
585
+ collectiveTargets: [dlg.agentId],
586
+ });
587
+ await (0, driver_1.driveDialogStream)(sub, { content: initPrompt, msgId: (0, id_1.generateShortId)(), grammar: 'markdown' }, true);
588
+ const saying = extractLastAssistantSaying(sub.msgs).trim();
589
+ if (saying) {
600
590
  return saying;
591
+ }
601
592
  }
602
593
  catch (err) {
594
+ const message = err instanceof Error ? err.message : String(err);
595
+ // Do not silently fall back for known severe configuration errors (e.g. Codex requires
596
+ // streaming=true).
597
+ if (message.includes('apiType=codex requires streaming=true')) {
598
+ throw err;
599
+ }
603
600
  log_1.log.warn('Failed to generate Agent Priming note via mainline agent (best-effort)', err, {
604
601
  dialogId: dlg.id.valueOf(),
605
602
  });
@@ -525,6 +525,10 @@ exports.applyPatchTool = {
525
525
  type: 'func',
526
526
  name: 'apply_patch',
527
527
  description: 'Apply a Codex-style apply_patch formatted patch to the rtws (runtime workspace). Enforces Dominds directory allow/deny lists.',
528
+ descriptionI18n: {
529
+ en: 'Apply a Codex-style apply_patch formatted patch to the rtws (runtime workspace). Enforces Dominds directory allow/deny lists.',
530
+ zh: '使用 Codex 风格 apply_patch 格式补丁修改 rtws(运行时工作区)内文件。该操作会遵循 Dominds 的目录白名单与黑名单约束。',
531
+ },
528
532
  parameters: {
529
533
  type: 'object',
530
534
  additionalProperties: false,
@@ -192,12 +192,12 @@ for (const tool of team_mgmt_1.teamMgmtTools) {
192
192
  });
193
193
  // Codex-focused toolsets (function tools only; suitable for Codex provider)
194
194
  if (process.platform !== 'win32') {
195
- (0, registry_1.registerToolset)('codex_style_tools', [apply_patch_1.applyPatchTool, os_1.readonlyShellTool, plan_1.updatePlanTool]);
195
+ (0, registry_1.registerToolset)('codex_style_tools', [os_1.readonlyShellTool, apply_patch_1.applyPatchTool, plan_1.updatePlanTool]);
196
196
  (0, registry_1.setToolsetMeta)('codex_style_tools', {
197
197
  source: 'dominds',
198
198
  descriptionI18n: {
199
- en: 'Codex-style tools (apply_patch + readonly_shell + update_plan)',
200
- zh: 'Codex 风格工具(apply_patch + readonly_shell + update_plan)',
199
+ en: 'Codex-style tools (readonly_shell + apply_patch + update_plan)',
200
+ zh: 'Codex 风格工具(readonly_shell + apply_patch + update_plan)',
201
201
  },
202
202
  promptI18n: {
203
203
  en: 'Use `apply_patch` (Codex-style patch format) to modify files. Use `readonly_shell` for simple rtws (runtime workspace) inspection via its small allowlist; commands outside the allowlist are rejected. For node/python, only exact version probes are allowed (no scripts). Chains via |/&&/|| are validated segment-by-segment. Use `update_plan` to record/update the task plan (stored as a reminder). You are explicitly authorized to call `readonly_shell` yourself; do not delegate it to a shell specialist. Avoid multi-line script-style commands; single-line is preferred (|, &&, || are ok). Paths must be relative to the rtws (runtime workspace). Hard denies: `readonly_shell` refuses rtws-root `.minds/` and `.dialogs/`; `apply_patch` is subject to the same access-control (including hard denies for `*.tsk/`, `.minds/`, and rtws-root `.dialogs/`).',
@@ -39,12 +39,12 @@ function formatContextHealthOwnerHeader(args) {
39
39
  ];
40
40
  if (!snapshot) {
41
41
  lines.push('- 状态:未知(尚未获取上下文统计)');
42
- lines.push('- 优先动作:change_mind(progress) → clear_mind');
42
+ lines.push('- 现在就做:用提醒项收敛关键细节(update_reminder)→ change_mind(progress) → clear_mind');
43
43
  return lines.join('\n');
44
44
  }
45
45
  if (snapshot.kind !== 'available') {
46
46
  lines.push('- 状态:未知(token 统计不可用)');
47
- lines.push('- 优先动作:change_mind(progress) → clear_mind');
47
+ lines.push('- 现在就做:用提醒项收敛关键细节(update_reminder)→ change_mind(progress) → clear_mind');
48
48
  return lines.join('\n');
49
49
  }
50
50
  switch (snapshot.level) {
@@ -53,16 +53,16 @@ function formatContextHealthOwnerHeader(args) {
53
53
  return lines.join('\n');
54
54
  }
55
55
  case 'caution': {
56
- lines.push('- 状态:🟡 黄(警告)');
57
- lines.push('- 优先动作:change_mind(progress) → clear_mind');
56
+ lines.push('- 状态:🟡 黄(必须尽快清理)');
57
+ lines.push('- 硬规程:先 update_reminder 收敛工作集 → 再 change_mind(progress) → 然后 clear_mind');
58
58
  return lines.join('\n');
59
59
  }
60
60
  case 'critical': {
61
- lines.push('- 状态:🔴 红(危险)');
61
+ lines.push('- 状态:🔴 红(硬闸门)');
62
62
  if (remainingGenTurns !== undefined) {
63
- lines.push(`- 倒数:剩余 ${remainingGenTurns} 次生成机会;到 0 系统将自动开启新一轮以保持稳定性`);
63
+ lines.push(`- 倒数:剩余 ${remainingGenTurns} 次生成机会;到 0 系统将被动开启新一轮/新回合以保持稳定性`);
64
64
  }
65
- lines.push('- 立刻:change_mind(progress) → clear_mind');
65
+ lines.push('- 禁止继续推进实现:先 update_reminder 收敛工作集 → 再 change_mind(progress) → 然后 clear_mind');
66
66
  return lines.join('\n');
67
67
  }
68
68
  default: {