dominds 0.7.6 → 0.8.2
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/README.md +2 -2
- package/README.zh.md +2 -2
- package/dist/agent-priming.js +169 -200
- package/dist/cli/read.js +2 -7
- package/dist/dialog-factory.js +6 -4
- package/dist/dialog-instance-registry.js +2 -2
- package/dist/dialog.js +99 -91
- package/dist/docs/dialog-persistence.md +2 -2
- package/dist/docs/dialog-persistence.zh.md +2 -2
- package/dist/docs/dialog-system.md +86 -90
- package/dist/docs/dialog-system.zh.md +82 -83
- package/dist/docs/diligence-push.md +2 -2
- package/dist/docs/diligence-push.zh.md +2 -2
- package/dist/docs/dominds-agent-priming.md +11 -11
- package/dist/docs/dominds-agent-priming.zh.md +9 -9
- package/dist/docs/dominds-terminology.md +34 -34
- package/dist/docs/fbr-implementation.md +4 -4
- package/dist/docs/fbr-implementation.zh.md +4 -4
- package/dist/docs/fbr.md +31 -53
- package/dist/docs/fbr.zh.md +30 -48
- package/dist/docs/mottos.md +2 -3
- package/dist/docs/mottos.zh.md +2 -2
- package/dist/docs/q4h.md +6 -6
- package/dist/docs/q4h.zh.md +6 -6
- package/dist/docs/tellask-collab.md +13 -13
- package/dist/docs/tellask-collab.zh.md +18 -18
- package/dist/llm/driver-entry.js +9 -33
- package/dist/llm/driver-v2/core.js +413 -111
- package/dist/llm/driver-v2/index.js +5 -0
- package/dist/llm/driver-v2/orchestrator.js +4 -3
- package/dist/llm/driver-v2/policy.js +17 -23
- package/dist/llm/driver-v2/restore-dialog-hierarchy.js +73 -0
- package/dist/llm/driver-v2/round.js +18 -7
- package/dist/llm/driver-v2/runtime-utils.js +3 -5
- package/dist/llm/driver-v2/saying-events.js +4 -42
- package/dist/llm/driver-v2/supdialog-response.js +110 -23
- package/dist/llm/driver-v2/tellask-bridge.js +560 -458
- package/dist/mcp/sdk-client.js +1 -1
- package/dist/mcp/server-runtime.js +1 -1
- package/dist/mcp/stdio-client.js +6 -6
- package/dist/mcp/tool-names.js +1 -1
- package/dist/minds/builtin/fuxi/persona.en.md +10 -10
- package/dist/minds/builtin/fuxi/persona.zh.md +12 -12
- package/dist/minds/builtin/pangu/persona.en.md +7 -7
- package/dist/minds/builtin/pangu/persona.zh.md +6 -6
- package/dist/minds/minds-i18n.js +2 -2
- package/dist/minds/system-prompt-parts.js +15 -12
- package/dist/minds/system-prompt.js +58 -56
- package/dist/persistence.js +675 -527
- package/dist/server/api-routes.js +1 -1
- package/dist/server/websocket-handler.js +10 -20
- package/dist/server.js +3 -3
- package/dist/shared/diligence.js +12 -12
- package/dist/shared/i18n/driver-messages.js +28 -118
- package/dist/shared/utils/inter-dialog-format.js +53 -53
- package/dist/snippets/starting.en.md +1 -1
- package/dist/snippets/starting.zh.md +1 -2
- package/dist/static/assets/{_baseUniq-2IQvcpiv.js → _baseUniq-D4N_zVXV.js} +2 -2
- package/dist/static/assets/{_baseUniq-2IQvcpiv.js.map → _baseUniq-D4N_zVXV.js.map} +1 -1
- package/dist/static/assets/{arc-Boi4s2EY.js → arc-7bP9qomB.js} +2 -2
- package/dist/static/assets/{arc-Boi4s2EY.js.map → arc-7bP9qomB.js.map} +1 -1
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-CV1IIalQ.js → architectureDiagram-VXUJARFQ-DToIiZuZ.js} +6 -6
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-CV1IIalQ.js.map → architectureDiagram-VXUJARFQ-DToIiZuZ.js.map} +1 -1
- package/dist/static/assets/{blockDiagram-VD42YOAC-C66ZvUb1.js → blockDiagram-VD42YOAC-C-pRNHpf.js} +7 -7
- package/dist/static/assets/{blockDiagram-VD42YOAC-C66ZvUb1.js.map → blockDiagram-VD42YOAC-C-pRNHpf.js.map} +1 -1
- package/dist/static/assets/{c4Diagram-YG6GDRKO-2YQZQ-KQ.js → c4Diagram-YG6GDRKO-Bnp-nWKO.js} +3 -3
- package/dist/static/assets/{c4Diagram-YG6GDRKO-2YQZQ-KQ.js.map → c4Diagram-YG6GDRKO-Bnp-nWKO.js.map} +1 -1
- package/dist/static/assets/{channel-DBG_xYT_.js → channel-CTv1SsAF.js} +2 -2
- package/dist/static/assets/{channel-DBG_xYT_.js.map → channel-CTv1SsAF.js.map} +1 -1
- package/dist/static/assets/{chunk-4BX2VUAB-D92pQ5qM.js → chunk-4BX2VUAB-D_OGa3ss.js} +2 -2
- package/dist/static/assets/{chunk-4BX2VUAB-D92pQ5qM.js.map → chunk-4BX2VUAB-D_OGa3ss.js.map} +1 -1
- package/dist/static/assets/{chunk-55IACEB6-T3IKxvjm.js → chunk-55IACEB6-I4o4MCuM.js} +2 -2
- package/dist/static/assets/{chunk-55IACEB6-T3IKxvjm.js.map → chunk-55IACEB6-I4o4MCuM.js.map} +1 -1
- package/dist/static/assets/{chunk-B4BG7PRW-SKDCq7xY.js → chunk-B4BG7PRW-Bp-TIXg6.js} +5 -5
- package/dist/static/assets/{chunk-B4BG7PRW-SKDCq7xY.js.map → chunk-B4BG7PRW-Bp-TIXg6.js.map} +1 -1
- package/dist/static/assets/{chunk-DI55MBZ5-CKY9xXzj.js → chunk-DI55MBZ5-Bnph5Hmd.js} +4 -4
- package/dist/static/assets/{chunk-DI55MBZ5-CKY9xXzj.js.map → chunk-DI55MBZ5-Bnph5Hmd.js.map} +1 -1
- package/dist/static/assets/{chunk-FMBD7UC4-CzaQthG_.js → chunk-FMBD7UC4-q3UyRsNI.js} +2 -2
- package/dist/static/assets/{chunk-FMBD7UC4-CzaQthG_.js.map → chunk-FMBD7UC4-q3UyRsNI.js.map} +1 -1
- package/dist/static/assets/{chunk-QN33PNHL-8v7ASP75.js → chunk-QN33PNHL-BxUlvLXP.js} +2 -2
- package/dist/static/assets/{chunk-QN33PNHL-8v7ASP75.js.map → chunk-QN33PNHL-BxUlvLXP.js.map} +1 -1
- package/dist/static/assets/{chunk-QZHKN3VN-Cd3_mr-D.js → chunk-QZHKN3VN-DpQR9BVw.js} +2 -2
- package/dist/static/assets/{chunk-QZHKN3VN-Cd3_mr-D.js.map → chunk-QZHKN3VN-DpQR9BVw.js.map} +1 -1
- package/dist/static/assets/{chunk-TZMSLE5B-BrTyfkJK.js → chunk-TZMSLE5B-BX8vrVo0.js} +2 -2
- package/dist/static/assets/{chunk-TZMSLE5B-BrTyfkJK.js.map → chunk-TZMSLE5B-BX8vrVo0.js.map} +1 -1
- package/dist/static/assets/{classDiagram-2ON5EDUG-pLBmQ3Qa.js → classDiagram-2ON5EDUG-Ccx5_2Xq.js} +6 -6
- package/dist/static/assets/{classDiagram-2ON5EDUG-pLBmQ3Qa.js.map → classDiagram-2ON5EDUG-Ccx5_2Xq.js.map} +1 -1
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-pLBmQ3Qa.js → classDiagram-v2-WZHVMYZB-Ccx5_2Xq.js} +6 -6
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-pLBmQ3Qa.js.map → classDiagram-v2-WZHVMYZB-Ccx5_2Xq.js.map} +1 -1
- package/dist/static/assets/{clone-rjxmrDHc.js → clone-Cl5zSMrO.js} +2 -2
- package/dist/static/assets/{clone-rjxmrDHc.js.map → clone-Cl5zSMrO.js.map} +1 -1
- package/dist/static/assets/{cose-bilkent-S5V4N54A-DaW3q2vS.js → cose-bilkent-S5V4N54A-B-FUX86B.js} +2 -2
- package/dist/static/assets/{cose-bilkent-S5V4N54A-DaW3q2vS.js.map → cose-bilkent-S5V4N54A-B-FUX86B.js.map} +1 -1
- package/dist/static/assets/{dagre-6UL2VRFP-BT252775.js → dagre-6UL2VRFP-Bj8vSSpT.js} +7 -7
- package/dist/static/assets/{dagre-6UL2VRFP-BT252775.js.map → dagre-6UL2VRFP-Bj8vSSpT.js.map} +1 -1
- package/dist/static/assets/{diagram-PSM6KHXK-Cp0jEYgm.js → diagram-PSM6KHXK-BPcgy7jf.js} +7 -7
- package/dist/static/assets/{diagram-PSM6KHXK-Cp0jEYgm.js.map → diagram-PSM6KHXK-BPcgy7jf.js.map} +1 -1
- package/dist/static/assets/{diagram-QEK2KX5R-BYEiCch_.js → diagram-QEK2KX5R-DHxd6LWi.js} +6 -6
- package/dist/static/assets/{diagram-QEK2KX5R-BYEiCch_.js.map → diagram-QEK2KX5R-DHxd6LWi.js.map} +1 -1
- package/dist/static/assets/{diagram-S2PKOQOG-SNGZ1B53.js → diagram-S2PKOQOG-C4ynhhLr.js} +6 -6
- package/dist/static/assets/{diagram-S2PKOQOG-SNGZ1B53.js.map → diagram-S2PKOQOG-C4ynhhLr.js.map} +1 -1
- package/dist/static/assets/{erDiagram-Q2GNP2WA-CMdkkngT.js → erDiagram-Q2GNP2WA-CQ25uxxf.js} +5 -5
- package/dist/static/assets/{erDiagram-Q2GNP2WA-CMdkkngT.js.map → erDiagram-Q2GNP2WA-CQ25uxxf.js.map} +1 -1
- package/dist/static/assets/{flowDiagram-NV44I4VS-k203P84f.js → flowDiagram-NV44I4VS-ChkkAldk.js} +6 -6
- package/dist/static/assets/{flowDiagram-NV44I4VS-k203P84f.js.map → flowDiagram-NV44I4VS-ChkkAldk.js.map} +1 -1
- package/dist/static/assets/{ganttDiagram-JELNMOA3-CgsVe01-.js → ganttDiagram-JELNMOA3-CBt_Zorl.js} +3 -3
- package/dist/static/assets/{ganttDiagram-JELNMOA3-CgsVe01-.js.map → ganttDiagram-JELNMOA3-CBt_Zorl.js.map} +1 -1
- package/dist/static/assets/{gitGraphDiagram-NY62KEGX-BGOR_N5w.js → gitGraphDiagram-NY62KEGX-CtBc2dOO.js} +7 -7
- package/dist/static/assets/{gitGraphDiagram-NY62KEGX-BGOR_N5w.js.map → gitGraphDiagram-NY62KEGX-CtBc2dOO.js.map} +1 -1
- package/dist/static/assets/{graph-DDHIhCSW.js → graph-BGzNnzuI.js} +3 -3
- package/dist/static/assets/{graph-DDHIhCSW.js.map → graph-BGzNnzuI.js.map} +1 -1
- package/dist/static/assets/{index-CUZD-Ua6.js → index-Vrp1PT3b.js} +654 -355
- package/dist/static/assets/index-Vrp1PT3b.js.map +1 -0
- package/dist/static/assets/{infoDiagram-WHAUD3N6-D0GlWUIm.js → infoDiagram-WHAUD3N6-BYJF-Ol5.js} +5 -5
- package/dist/static/assets/{infoDiagram-WHAUD3N6-D0GlWUIm.js.map → infoDiagram-WHAUD3N6-BYJF-Ol5.js.map} +1 -1
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-I0W1fDTZ.js → journeyDiagram-XKPGCS4Q-Cl2p8ZBw.js} +5 -5
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-I0W1fDTZ.js.map → journeyDiagram-XKPGCS4Q-Cl2p8ZBw.js.map} +1 -1
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-BY5xVZyl.js → kanban-definition-3W4ZIXB7-DBH-HEwY.js} +3 -3
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-BY5xVZyl.js.map → kanban-definition-3W4ZIXB7-DBH-HEwY.js.map} +1 -1
- package/dist/static/assets/{layout-C7mFT1m6.js → layout-DdWO-uEo.js} +5 -5
- package/dist/static/assets/{layout-C7mFT1m6.js.map → layout-DdWO-uEo.js.map} +1 -1
- package/dist/static/assets/{linear-WSX0brRY.js → linear-BY3MovaF.js} +2 -2
- package/dist/static/assets/{linear-WSX0brRY.js.map → linear-BY3MovaF.js.map} +1 -1
- package/dist/static/assets/{min-DOTQTP4p.js → min-aHCJK1uN.js} +3 -3
- package/dist/static/assets/{min-DOTQTP4p.js.map → min-aHCJK1uN.js.map} +1 -1
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-BWhHo-Hq.js → mindmap-definition-VGOIOE7T-BjJnBRtB.js} +4 -4
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-BWhHo-Hq.js.map → mindmap-definition-VGOIOE7T-BjJnBRtB.js.map} +1 -1
- package/dist/static/assets/{pieDiagram-ADFJNKIX-B91oxvos.js → pieDiagram-ADFJNKIX-xAcmdymv.js} +7 -7
- package/dist/static/assets/{pieDiagram-ADFJNKIX-B91oxvos.js.map → pieDiagram-ADFJNKIX-xAcmdymv.js.map} +1 -1
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-DqMUyBPr.js → quadrantDiagram-AYHSOK5B-BPbEGCEj.js} +3 -3
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-DqMUyBPr.js.map → quadrantDiagram-AYHSOK5B-BPbEGCEj.js.map} +1 -1
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-COUayA3m.js → requirementDiagram-UZGBJVZJ--w6UfXy0.js} +4 -4
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-COUayA3m.js.map → requirementDiagram-UZGBJVZJ--w6UfXy0.js.map} +1 -1
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-Bp9r8YDi.js → sankeyDiagram-TZEHDZUN-B_T6TQwh.js} +2 -2
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-Bp9r8YDi.js.map → sankeyDiagram-TZEHDZUN-B_T6TQwh.js.map} +1 -1
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-CpuTC5cG.js → sequenceDiagram-WL72ISMW-DX_oVvqA.js} +4 -4
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-CpuTC5cG.js.map → sequenceDiagram-WL72ISMW-DX_oVvqA.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-Bxoo7e6E.js → stateDiagram-FKZM4ZOC-BAybZU8l.js} +9 -9
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-Bxoo7e6E.js.map → stateDiagram-FKZM4ZOC-BAybZU8l.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-Q-DL7tae.js → stateDiagram-v2-4FDKWEC3-BUsvuCdD.js} +5 -5
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-Q-DL7tae.js.map → stateDiagram-v2-4FDKWEC3-BUsvuCdD.js.map} +1 -1
- package/dist/static/assets/{timeline-definition-IT6M3QCI-DuOiHQPk.js → timeline-definition-IT6M3QCI-DOYN-4XM.js} +3 -3
- package/dist/static/assets/{timeline-definition-IT6M3QCI-DuOiHQPk.js.map → timeline-definition-IT6M3QCI-DOYN-4XM.js.map} +1 -1
- package/dist/static/assets/{treemap-KMMF4GRG-YbrDC0fO.js → treemap-KMMF4GRG-CQXygT0T.js} +4 -4
- package/dist/static/assets/{treemap-KMMF4GRG-YbrDC0fO.js.map → treemap-KMMF4GRG-CQXygT0T.js.map} +1 -1
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-DDRlTIfV.js → xychartDiagram-PRI3JC2R-ByFAvTeN.js} +3 -3
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-DDRlTIfV.js.map → xychartDiagram-PRI3JC2R-ByFAvTeN.js.map} +1 -1
- package/dist/static/index.html +1 -1
- package/dist/tools/builtins.js +0 -8
- package/dist/tools/env.js +1 -1
- package/dist/tools/mcp.js +31 -9
- package/dist/tools/pending-tellask-reminder.js +14 -17
- package/dist/tools/team-mgmt.js +1 -1
- package/package.json +1 -1
- package/dist/static/assets/index-CUZD-Ua6.js.map +0 -1
package/dist/docs/fbr.zh.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
**扪心自问(FBR, Fresh Boots Reasoning)** 是 Dominds 的一种工作机制:在主线对话推进过程中,智能体可以把一个边界清晰的子问题“拆出去”,以 **更干净的上下文** 重新推理一次,然后把结论回贴到主线对话中。
|
|
10
10
|
|
|
11
|
-
在 Dominds 里,FBR
|
|
11
|
+
在 Dominds 里,FBR 通过专用函数工具 `freshBootsReasoning({ tellaskContent: "..." })` 触发;FBR 的核心是运行时对该支线对话施加的一组强制约束与并发语义。
|
|
12
12
|
|
|
13
13
|
## 2. 设计原则与取舍(为什么这样做)
|
|
14
14
|
|
|
@@ -23,31 +23,30 @@ FBR 的价值来自“把推理拉回文本”:让被诉请者只围绕诉请
|
|
|
23
23
|
|
|
24
24
|
### 2.2 不搞隐式魔法:禁用就要明确失败
|
|
25
25
|
|
|
26
|
-
如果团队配置禁用了 FBR(例如 `fbr-effort: 0`),运行时必须 **对用户可见且清晰地拒绝**
|
|
26
|
+
如果团队配置禁用了 FBR(例如 `fbr-effort: 0`),运行时必须 **对用户可见且清晰地拒绝** `freshBootsReasoning({ tellaskContent: "..." })`,避免“看起来发了诉请、实际上被静默忽略”的隐性失败。
|
|
27
27
|
|
|
28
28
|
### 2.3 多样本推理,而不是“多代理协作”
|
|
29
29
|
|
|
30
30
|
`fbr-effort` 的并发语义并不是让多条支线相互对话或协作,而是 **并行产生多个互相独立的推理样本**,由主线对话负责综合提炼。
|
|
31
31
|
|
|
32
|
-
## 3.
|
|
32
|
+
## 3. 用户语法
|
|
33
33
|
|
|
34
34
|
### 3.1 触发语法
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
触发 FBR 的语法只有一种:
|
|
37
37
|
|
|
38
|
-
-
|
|
39
|
-
- **少用(可恢复)**:`!?@self !tellaskSession <tellaskSession>`
|
|
38
|
+
- `freshBootsReasoning({ tellaskContent: "..." })`
|
|
40
39
|
|
|
41
40
|
说明:
|
|
42
41
|
|
|
43
|
-
-
|
|
44
|
-
-
|
|
42
|
+
- FBR 不使用 `targetAgentId`、`sessionSlug`、`mentionList`。
|
|
43
|
+
- `tellaskContent` 是 FBR 支线的权威任务上下文。
|
|
45
44
|
|
|
46
45
|
### 3.2 作用域
|
|
47
46
|
|
|
48
|
-
本文档只定义 **FBR 机制**,并说明其通过
|
|
47
|
+
本文档只定义 **FBR 机制**,并说明其通过 `freshBootsReasoning({ tellaskContent: "..." })` 触发的行为契约。一般的队友诉请(`tellaskSessionless({ targetAgentId: "<teammate>", tellaskContent: "..." })`)仍按 [`dialog-system.zh.md`](./dialog-system.zh.md) 的 Tellask 分类与能力模型执行。
|
|
49
48
|
|
|
50
|
-
|
|
49
|
+
如果你需要“同人设但可用工具”的支线对话,请使用一般队友诉请路径,并显式指定队友身份。
|
|
51
50
|
|
|
52
51
|
## 4. 运行时契约(必须做到什么)
|
|
53
52
|
|
|
@@ -55,17 +54,16 @@ FBR 的价值来自“把推理拉回文本”:让被诉请者只围绕诉请
|
|
|
55
54
|
|
|
56
55
|
### 4.1 隔离与上下文
|
|
57
56
|
|
|
58
|
-
当运行时驱动由
|
|
57
|
+
当运行时驱动由 `freshBootsReasoning({ tellaskContent: "..." })` 创建的 FBR 支线对话时,必须强制满足:
|
|
59
58
|
|
|
60
59
|
- **不依赖诉请者对话上下文**:
|
|
61
60
|
- 被诉请者不得假设能访问诉请者的主线/支线对话历史
|
|
62
61
|
- 被诉请者必须把诉请正文当作主要且权威的任务上下文
|
|
63
|
-
- 若使用 `!tellaskSession`(可恢复)形式,被诉请者可以使用 **自身** 的 `tellaskSession` 历史作为显式上下文
|
|
64
62
|
- **不得通过工具补上下文**:
|
|
65
63
|
- 不得读文件/跑命令/浏览
|
|
66
64
|
- 不得读取 Memory 或 rtws(运行时工作区)状态
|
|
67
65
|
|
|
68
|
-
直觉上:FBR 的“初心”不是“忘掉一切系统规则”,而是“相对诉请者对话不继承历史”。运行时仍可能无条件注入基础规则(安全、格式、少量只读摘要等),但
|
|
66
|
+
直觉上:FBR 的“初心”不是“忘掉一切系统规则”,而是“相对诉请者对话不继承历史”。运行时仍可能无条件注入基础规则(安全、格式、少量只读摘要等),但 **推理依据必须以诉请正文为主**。
|
|
69
67
|
|
|
70
68
|
### 4.2 无工具(提示词 + 技术强制)
|
|
71
69
|
|
|
@@ -81,7 +79,7 @@ FBR 支线对话的 system prompt 必须明确包含(措辞可不同,但语
|
|
|
81
79
|
- 这是一次 FBR 支线对话,诉请正文是主要任务上下文
|
|
82
80
|
- 不要假设能访问诉请者对话历史
|
|
83
81
|
- 若诉请正文缺少关键上下文,需要列出缺失信息与阻塞原因
|
|
84
|
-
- 仅当必须澄清关键缺失上下文时,允许
|
|
82
|
+
- 仅当必须澄清关键缺失上下文时,允许 `tellaskBack({ tellaskContent: "..." })` 回问诉请者;除此之外不要发起任何诉请
|
|
85
83
|
|
|
86
84
|
同时,**system prompt 本体不得包含任何工具说明**(不得出现“有哪些工具/如何用工具/例子命令/白名单”等)。
|
|
87
85
|
|
|
@@ -104,16 +102,16 @@ FBR 支线对话的 system prompt 必须明确包含(措辞可不同,但语
|
|
|
104
102
|
|
|
105
103
|
#### 4.2.3 LLM 请求必须是“0 工具”
|
|
106
104
|
|
|
107
|
-
发起
|
|
105
|
+
发起 `freshBootsReasoning` FBR 支线对话的 LLM 请求必须做到 **0 个可用工具**:
|
|
108
106
|
|
|
109
107
|
- 请求 payload 中不得包含任何 tool/function 定义(有效工具列表必须为空)
|
|
110
108
|
- 不得启用提供方支持的任何“工具调用模式 / 工具选择 / 函数调用”开关
|
|
111
109
|
|
|
112
110
|
并且:如果模型仍尝试发出 tool/function call,运行时必须视为违规并硬拒绝(见 4.5)。
|
|
113
111
|
|
|
114
|
-
### 4.3 诉请限制:仅允许
|
|
112
|
+
### 4.3 诉请限制:仅允许 `tellaskBack({ tellaskContent: "..." })`
|
|
115
113
|
|
|
116
|
-
FBR 支线对话不得发起任何队友诉请(包括
|
|
114
|
+
FBR 支线对话不得发起任何队友诉请(包括 `askHuman({ tellaskContent: "..." })`)。唯一例外是 `tellaskBack({ tellaskContent: "..." })`:
|
|
117
115
|
|
|
118
116
|
- 仅支线对话可用,用于回问上游诉请者对话
|
|
119
117
|
- 仅当必须澄清关键缺失上下文时才允许
|
|
@@ -124,14 +122,14 @@ FBR 支线对话不得发起任何队友诉请(包括 `!?@human`)。唯一
|
|
|
124
122
|
FBR 支线对话应产出一份便于诉请者整合的简明推理结果。推荐结构(不强制):
|
|
125
123
|
|
|
126
124
|
1. **结论 / 建议**
|
|
127
|
-
2.
|
|
125
|
+
2. **推理过程**(仅基于诉请正文)
|
|
128
126
|
3. **前提假设**(明确标注来源:诉请正文/会话历史)
|
|
129
127
|
4. **未知与缺口**(如果有)
|
|
130
128
|
5. **给主线的下一步**(主线可能有工具/队友,可在主线执行)
|
|
131
129
|
|
|
132
130
|
### 4.5 违规与报错(必须“响亮可调试”)
|
|
133
131
|
|
|
134
|
-
- 若 FBR 支线对话尝试发起违规诉请(非
|
|
132
|
+
- 若 FBR 支线对话尝试发起违规诉请(非 `tellaskBack({ tellaskContent: "..." })`)或尝试 tool/function call,运行时必须硬拒绝该次驱动。
|
|
135
133
|
- 反馈必须 **对用户可见、语义清晰**,并且日志/事件中应包含可检索的错误原因字符串,避免静默吞掉。
|
|
136
134
|
|
|
137
135
|
## 5. 并发语义:`fbr-effort`
|
|
@@ -140,25 +138,22 @@ FBR 支线对话应产出一份便于诉请者整合的简明推理结果。推
|
|
|
140
138
|
|
|
141
139
|
- 类型:整数
|
|
142
140
|
- 默认:`3`
|
|
143
|
-
- `0`:禁用该成员的
|
|
144
|
-
- `1..100`:每次
|
|
141
|
+
- `0`:禁用该成员的 `freshBootsReasoning({ tellaskContent: "..." })` FBR(必须明确报错拒绝)
|
|
142
|
+
- `1..100`:每次 `freshBootsReasoning({ tellaskContent: "..." })` 并发创建 N 条 FBR 支线对话
|
|
145
143
|
- `> 100` / 非整数 / 负数:配置错误(直接报错,不做 clamp)
|
|
146
144
|
|
|
147
145
|
当 `fbr-effort = N`:
|
|
148
146
|
|
|
149
|
-
- 运行时必须把一条
|
|
147
|
+
- 运行时必须把一条 `freshBootsReasoning({ tellaskContent: "..." })` 扩展为 **N 条并行的无工具 FBR 支线对话**
|
|
150
148
|
- 每条支线接收相同的诉请正文与相同的 FBR 提示词约束
|
|
151
149
|
- 主线必须接收全部 N 条回贴;**不应依赖固定顺序**(可按完成顺序回贴)
|
|
152
150
|
|
|
153
|
-
对可恢复的 `!?@self !tellaskSession <tellaskSession>` 形式,若 `N > 1`,运行时必须派生出 **不同的**
|
|
154
|
-
会话键,使并行支线互不共享历史(推荐:`<tellaskSession>.fbr-<i>`)。
|
|
155
|
-
|
|
156
151
|
## 6. 模型参数覆盖:`fbr_model_params`
|
|
157
152
|
|
|
158
153
|
`fbr_model_params` 用于只在驱动 FBR 支线对话时覆盖模型参数:
|
|
159
154
|
|
|
160
155
|
- 结构:与 `model_params` 完全一致(参考 `dominds/main/llm/defaults.yaml` 的 `model_param_options`)
|
|
161
|
-
- 作用域:仅对
|
|
156
|
+
- 作用域:仅对 `freshBootsReasoning({ tellaskContent: "..." })` FBR 生效
|
|
162
157
|
- 合并:建议在成员的有效 `model_params` 之上做深合并覆盖(便于只改少数字段,如 `temperature`)
|
|
163
158
|
- `max_tokens` 允许写成顶层 `max_tokens`,也允许写成 `general.max_tokens`;二选一,禁止同时设置
|
|
164
159
|
|
|
@@ -169,38 +164,25 @@ FBR 支线对话应产出一份便于诉请者整合的简明推理结果。推
|
|
|
169
164
|
坏例(依赖外部上下文与工具):
|
|
170
165
|
|
|
171
166
|
```text
|
|
172
|
-
|
|
173
|
-
把 bug 找出来并修掉。
|
|
167
|
+
freshBootsReasoning({ tellaskContent: "把 bug 找出来并修掉。" })
|
|
174
168
|
```
|
|
175
169
|
|
|
176
170
|
好例(把关键上下文写进正文):
|
|
177
171
|
|
|
178
172
|
```text
|
|
179
|
-
|
|
180
|
-
你正在做无工具的 FBR。请只使用下方文本推理。
|
|
181
|
-
|
|
182
|
-
目标:判断最可能的根因,并给出 2–3 个可行修复方向。
|
|
183
|
-
|
|
184
|
-
现象:
|
|
185
|
-
- 点击 “Run” 偶发卡死 ~10 秒。
|
|
186
|
-
|
|
187
|
-
约束:
|
|
188
|
-
- 不能改后端协议。
|
|
189
|
-
|
|
190
|
-
线索(日志/片段):
|
|
191
|
-
<粘贴相关日志或代码片段>
|
|
173
|
+
freshBootsReasoning({ tellaskContent: "你正在做无工具的 FBR。请只使用下方文本推理。\n\n目标:判断最可能的根因,并给出 2–3 个可行修复方向。\n\n现象:\n- 点击 \"Run\" 偶发卡死 ~10 秒。\n\n约束:\n- 不能改后端协议。\n\n线索(日志/片段):\n<粘贴相关日志或代码片段>" })
|
|
192
174
|
```
|
|
193
175
|
|
|
194
176
|
### 7.2 `.minds/team.yaml`
|
|
195
177
|
|
|
196
178
|
```yaml
|
|
197
179
|
member_defaults:
|
|
198
|
-
# 默认每次
|
|
180
|
+
# 默认每次 `freshBootsReasoning({ tellaskContent: "..." })` 并发创建 3 条无工具 FBR 支线对话。
|
|
199
181
|
fbr-effort: 3
|
|
200
182
|
|
|
201
183
|
members:
|
|
202
184
|
ux:
|
|
203
|
-
# 每次
|
|
185
|
+
# 每次 `freshBootsReasoning({ tellaskContent: "..." })` 并发创建 5 条独立推理样本。
|
|
204
186
|
fbr-effort: 5
|
|
205
187
|
|
|
206
188
|
# 让 FBR 更“发散”,但不影响主线风格。
|
|
@@ -214,14 +196,14 @@ members:
|
|
|
214
196
|
|
|
215
197
|
## 8. 与一般支线对话的关系(避免混用)
|
|
216
198
|
|
|
217
|
-
-
|
|
218
|
-
- 一般的
|
|
219
|
-
- 若你需要“同人设 +
|
|
199
|
+
- `freshBootsReasoning({ tellaskContent: "..." })` 的 FBR 支线对话是 **特例**:无工具、正文优先、诉请受限、可并发扩展。
|
|
200
|
+
- 一般的 `tellaskSessionless({ targetAgentId: "<teammate>", tellaskContent: "..." })` 支线对话仍是“完整能力”的(可按配置拥有工具与工具集)。
|
|
201
|
+
- 若你需要“同人设 + 可用工具”的支线,请使用显式队友身份(`tellask` / `tellaskSessionless`)。
|
|
220
202
|
|
|
221
203
|
## 9. 验收清单(实现检查点)
|
|
222
204
|
|
|
223
|
-
-
|
|
205
|
+
- `freshBootsReasoning({ tellaskContent: "..." })` 触发 FBR:支线对话必须无工具,并且在 API 层确认为“0 工具”请求。
|
|
224
206
|
- system prompt 本体不含工具说明;工具相关文本只能来自独立、固定的“无工具提示”。
|
|
225
|
-
- FBR 支线对话不得发起队友诉请;仅允许必要时
|
|
207
|
+
- FBR 支线对话不得发起队友诉请;仅允许必要时 `tellaskBack({ tellaskContent: "..." })` 回问。
|
|
226
208
|
- `fbr-effort` 默认 `3`,接受 `0..100`,禁用时明确报错拒绝。
|
|
227
209
|
- `fbr_model_params` 仅对 FBR 生效,且与 `model_params` 同结构、按深合并覆盖。
|
package/dist/docs/mottos.md
CHANGED
|
@@ -161,9 +161,8 @@ Taskdoc Structure:
|
|
|
161
161
|
**In dominds (recommended syntax)**
|
|
162
162
|
|
|
163
163
|
- Fresh Boots Reasoning (FBR) is **common**, and should usually be done via **transient self-subdialogs**.
|
|
164
|
-
- Use
|
|
165
|
-
- Use
|
|
166
|
-
for a multi-step sub-problem.
|
|
164
|
+
- Use `freshBootsReasoning({ tellaskContent: "..." })` for the default “fresh boots” session: isolate one sub-problem, answer, and return.
|
|
165
|
+
- Use `freshBootsReasoning({ tellaskContent: "..." })` whenever you need tool-less, clean-slate reasoning on a bounded sub-problem.
|
|
167
166
|
|
|
168
167
|
**Traditional vs. Fresh Boots Approach**
|
|
169
168
|
|
package/dist/docs/mottos.zh.md
CHANGED
|
@@ -161,8 +161,8 @@
|
|
|
161
161
|
**在 dominds 中(推荐语法)**
|
|
162
162
|
|
|
163
163
|
- 扪心自问(FBR)是**常见的**,通常应该通过**瞬态子对话**完成。
|
|
164
|
-
- 使用
|
|
165
|
-
-
|
|
164
|
+
- 使用 `freshBootsReasoning({ tellaskContent: "..." })` 进行默认的“初心”会话:隔离一个子问题,回答,然后返回。
|
|
165
|
+
- 需要对边界清晰的子问题做“无工具、清洁上下文”推理时,直接使用 `freshBootsReasoning({ tellaskContent: "..." })`。
|
|
166
166
|
|
|
167
167
|
**传统 vs. 初心方法**
|
|
168
168
|
|
package/dist/docs/q4h.md
CHANGED
|
@@ -5,12 +5,12 @@ Chinese version: [中文版](./q4h.zh.md)
|
|
|
5
5
|
## Summary
|
|
6
6
|
|
|
7
7
|
Q4H is Dominds’s mechanism for raising a human decision/clarification request from any dialog by issuing a Tellask to
|
|
8
|
-
|
|
8
|
+
`askHuman()` (`!?askHuman() ...`). When a dialog enters Q4H, progression is suspended until the human responds.
|
|
9
9
|
|
|
10
10
|
This document specifies a WebUI enhancement:
|
|
11
11
|
|
|
12
12
|
1. **External deep links** that jump directly to a Q4H question’s call site (the place in the conversation where
|
|
13
|
-
|
|
13
|
+
`!?askHuman()` was issued), and optionally **pre-select** the pending question so the input enters “answer mode”.
|
|
14
14
|
2. A consistent **call site action UI**: internal navigation (same tab) vs external navigation (new tab/window).
|
|
15
15
|
|
|
16
16
|
## Goals
|
|
@@ -33,7 +33,7 @@ This document specifies a WebUI enhancement:
|
|
|
33
33
|
## Definitions (user-facing terms)
|
|
34
34
|
|
|
35
35
|
- **Mainline dialog / sideline dialog**: user-facing terms for the primary thread and temporary work threads.
|
|
36
|
-
- **Call site**: the location in the conversation where a Tellask was issued (for Q4H: where
|
|
36
|
+
- **Call site**: the location in the conversation where a Tellask was issued (for Q4H: where `!?askHuman()` appears).
|
|
37
37
|
- **Answer mode**: the input is bound to a specific pending Q4H question so `Send` becomes “answer this question”.
|
|
38
38
|
|
|
39
39
|
## UX / Product Requirements
|
|
@@ -86,7 +86,7 @@ Recommended (optional but improves resilience / reduces dependency on global Q4H
|
|
|
86
86
|
- `selfId`: originating dialog id (root or sideline)
|
|
87
87
|
- `course`: course number (1-based)
|
|
88
88
|
- `msg`: message index (best-effort fallback locator)
|
|
89
|
-
- `callId`: tellask callId when the Q4H was created from an
|
|
89
|
+
- `callId`: tellask callId when the Q4H was created from an `!?askHuman()` tellask block
|
|
90
90
|
|
|
91
91
|
Behavior:
|
|
92
92
|
|
|
@@ -142,12 +142,12 @@ Notes:
|
|
|
142
142
|
|
|
143
143
|
Existing persisted question shape includes:
|
|
144
144
|
|
|
145
|
-
- `id`, `
|
|
145
|
+
- `id`, `mentionList`, `tellaskContent`, `askedAt`
|
|
146
146
|
- `callSiteRef: { course, messageIndex }`
|
|
147
147
|
|
|
148
148
|
Enhancement:
|
|
149
149
|
|
|
150
|
-
- Add optional `callId?: string` to Q4H questions created from an
|
|
150
|
+
- Add optional `callId?: string` to Q4H questions created from an `!?askHuman()` tellask block.
|
|
151
151
|
- This enables precise call-site scrolling via `data-call-id` in the rendered DOM.
|
|
152
152
|
- Questions created by system mechanisms that are not emitted from a tellask block MAY have no `callId`.
|
|
153
153
|
|
package/dist/docs/q4h.zh.md
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
## 摘要
|
|
6
6
|
|
|
7
|
-
Q4H 是 Dominds 的运行时机制:在任何对话中通过向
|
|
7
|
+
Q4H 是 Dominds 的运行时机制:在任何对话中通过向 `askHuman()` 发起诉请(`!?askHuman() ...`),把一个“必须由人类决策/澄清/确认”的问题抛给人类,并**合法暂停**对话推进,直到人类回应。
|
|
8
8
|
|
|
9
9
|
本文档指定一次 WebUI 增强:
|
|
10
10
|
|
|
11
|
-
1. 支持 **外链 deep link(URL)**:打开后可直达某个 Q4H 的“提问点”(call site,即对话中出现
|
|
11
|
+
1. 支持 **外链 deep link(URL)**:打开后可直达某个 Q4H 的“提问点”(call site,即对话中出现 `!?askHuman()` 的位置),并在条件允许时让输入框进入“回答模式”。
|
|
12
12
|
2. 统一并增强 **call site 行为** 的 UI:同一处功能提供
|
|
13
13
|
- **内链**(同一 tab 内导航)与
|
|
14
14
|
- **外链**(新 tab/窗口打开)
|
|
@@ -36,7 +36,7 @@ Q4H 是 Dominds 的运行时机制:在任何对话中通过向 `@human` 发起
|
|
|
36
36
|
## 定义(使用者语境)
|
|
37
37
|
|
|
38
38
|
- **主线对话 / 支线对话**:对外术语,用于描述主要推进线程与临时工作线程。
|
|
39
|
-
- **提问点(call site)**:对话中发起诉请的具体位置;对 Q4H 即
|
|
39
|
+
- **提问点(call site)**:对话中发起诉请的具体位置;对 Q4H 即 `!?askHuman()` 出现的位置。
|
|
40
40
|
- **回答模式(answer mode)**:输入框绑定到某个待处理 Q4H 问题,`Send` 的语义变为“回答该问题”。
|
|
41
41
|
|
|
42
42
|
## UX / 产品需求
|
|
@@ -89,7 +89,7 @@ WebUI 通过 `window.location.search` 识别 deep link 参数。
|
|
|
89
89
|
- `selfId`:来源对话 id(主线或支线)
|
|
90
90
|
- `course`:course 编号(1-based)
|
|
91
91
|
- `msg`:messageIndex(仅用于 best-effort 回退定位)
|
|
92
|
-
- `callId`:当该 Q4H 来源于
|
|
92
|
+
- `callId`:当该 Q4H 来源于 `!?askHuman()` 诉请块时,对应的 tellask `callId`(更精确的定位方式)
|
|
93
93
|
|
|
94
94
|
行为:
|
|
95
95
|
|
|
@@ -144,12 +144,12 @@ WebUI 通过 `window.location.search` 识别 deep link 参数。
|
|
|
144
144
|
|
|
145
145
|
既有 Q4H 持久化字段:
|
|
146
146
|
|
|
147
|
-
- `id`, `
|
|
147
|
+
- `id`, `mentionList`, `tellaskContent`, `askedAt`
|
|
148
148
|
- `callSiteRef: { course, messageIndex }`
|
|
149
149
|
|
|
150
150
|
增强:
|
|
151
151
|
|
|
152
|
-
- 为由
|
|
152
|
+
- 为由 `!?askHuman()` 诉请块产生的 Q4H 问题增加可选字段 `callId?: string`。
|
|
153
153
|
- 使前端可通过 `data-call-id` 精确滚动定位。
|
|
154
154
|
- 对于非诉请块产生的系统型 Q4H,允许没有 `callId`。
|
|
155
155
|
|
|
@@ -28,13 +28,13 @@ These points reflect current behavior in `dialog-system.md`, `fbr.md`, `dominds-
|
|
|
28
28
|
|
|
29
29
|
### 2.1 Three Tellask modes
|
|
30
30
|
|
|
31
|
-
- `TellaskBack`:
|
|
32
|
-
- `Tellask Session`:
|
|
33
|
-
- `Fresh Tellask`:
|
|
31
|
+
- `TellaskBack`: `tellaskBack({ tellaskContent: "..." })`
|
|
32
|
+
- `Tellask Session`: `tellask({ targetAgentId: "<teammate>", sessionSlug: "<slug>", tellaskContent: "..." })`
|
|
33
|
+
- `Fresh Tellask`: `tellaskSessionless({ targetAgentId: "<teammate>", tellaskContent: "..." })`
|
|
34
34
|
|
|
35
35
|
### 2.2 What `Tellask Session` really means
|
|
36
36
|
|
|
37
|
-
-
|
|
37
|
+
- `sessionSlug` gives resumable addressing and reusable context.
|
|
38
38
|
- It does not create an always-running worker.
|
|
39
39
|
- Progress still happens one Tellask call at a time.
|
|
40
40
|
|
|
@@ -93,7 +93,7 @@ That is a workflow break. The model should send the Tellask directly.
|
|
|
93
93
|
|
|
94
94
|
### 4.1 Four-step teammate Tellask loop
|
|
95
95
|
|
|
96
|
-
For teammate Tellasks (non
|
|
96
|
+
For teammate Tellasks (non-`freshBootsReasoning({ tellaskContent: "..." })`), always run this loop:
|
|
97
97
|
|
|
98
98
|
1. `Initiate`: send a Tellask with scope, constraints, and acceptance evidence.
|
|
99
99
|
2. `Wait`: wait for that specific response.
|
|
@@ -109,7 +109,7 @@ Hard rule:
|
|
|
109
109
|
Recommended pattern:
|
|
110
110
|
|
|
111
111
|
```text
|
|
112
|
-
|
|
112
|
+
tellask({ targetAgentId: "shell_specialist", sessionSlug: "typecheck-loop", tellaskContent: "..." })
|
|
113
113
|
!?Run `pnpm lint:types` and return raw output only.
|
|
114
114
|
!?If it fails, include the first 3 errors with file + line.
|
|
115
115
|
!?Acceptance: include exit code and the first actionable anchor.
|
|
@@ -132,7 +132,7 @@ I cannot run shell here; please ask @shell_specialist to execute `pnpm lint:type
|
|
|
132
132
|
Good:
|
|
133
133
|
|
|
134
134
|
```text
|
|
135
|
-
|
|
135
|
+
tellask({ targetAgentId: "shell_specialist", sessionSlug: "typecheck-loop", tellaskContent: "..." })
|
|
136
136
|
!?Please execute `pnpm lint:types` now and paste raw output.
|
|
137
137
|
!?If command is unavailable, paste the error and one safe alternative.
|
|
138
138
|
```
|
|
@@ -152,8 +152,8 @@ Add or strengthen these coordination constraints:
|
|
|
152
152
|
|
|
153
153
|
1. `Response-closes-call`: teammate response closes the current call; continuation requires a new Tellask.
|
|
154
154
|
2. `Wait-state guard`: only claim waiting when a concrete pending Tellask exists.
|
|
155
|
-
3. `Autonomy guard`: do not use
|
|
156
|
-
4. `Action-over-narration`: if you write “next ask @X to do Y”, emit
|
|
155
|
+
3. `Autonomy guard`: do not use askHuman() as a relay for executable teammate work.
|
|
156
|
+
4. `Action-over-narration`: if you write “next ask @X to do Y”, emit `tellaskSessionless({ targetAgentId: "X", tellaskContent: "..." })` in the same turn.
|
|
157
157
|
|
|
158
158
|
### 5.2 Collaboration priming (P1)
|
|
159
159
|
|
|
@@ -161,13 +161,13 @@ Split the collaboration drill into two short segments, both grounded in verifiab
|
|
|
161
161
|
|
|
162
162
|
1. One-shot Tellask: `uname -a` as the runtime baseline.
|
|
163
163
|
2. Long-session Tellask: `tellaskSession: rtws-vcs-inventory` for a two-round repo inventory.
|
|
164
|
-
3. Run
|
|
164
|
+
3. Run `freshBootsReasoning({ tellaskContent: "..." })` FBR and distillation only after both evidence segments are available.
|
|
165
165
|
|
|
166
166
|
Operating rules:
|
|
167
167
|
|
|
168
168
|
1. If no `shell_specialist` is available, Dominds runtime gathers the same facts (`uname -a` + git inventory). This is a standard mode, not a degraded path.
|
|
169
169
|
2. A response closes the current round; continuation requires a new explicit Tellask.
|
|
170
|
-
3. “Ask teammate to do X” must materialize as
|
|
170
|
+
3. “Ask teammate to do X” must materialize as `tellask* function call`, not as a relay request to askHuman().
|
|
171
171
|
|
|
172
172
|
### 5.3 P1 design baseline (implemented)
|
|
173
173
|
|
|
@@ -192,7 +192,7 @@ Operating rules:
|
|
|
192
192
|
- remotes (fetch/push)
|
|
193
193
|
- branch / upstream
|
|
194
194
|
- dirty state
|
|
195
|
-
5. Merge `uname + VCS` into one evidence block for
|
|
195
|
+
5. Merge `uname + VCS` into one evidence block for `freshBootsReasoning({ tellaskContent: "..." })` FBR.
|
|
196
196
|
6. Distill after FBR feedback is complete, and produce the priming note.
|
|
197
197
|
|
|
198
198
|
#### Tellask template constraints
|
|
@@ -234,7 +234,7 @@ Before and after each collaboration step:
|
|
|
234
234
|
1. Did I send a concrete Tellask with acceptance evidence?
|
|
235
235
|
2. If I say “waiting”, which pending Tellask am I waiting on?
|
|
236
236
|
3. After receiving feedback, did I either close the task or send the next Tellask?
|
|
237
|
-
4. Did I turn “ask teammate to do X” into an actual
|
|
237
|
+
4. Did I turn “ask teammate to do X” into an actual `tellask* function call` block?
|
|
238
238
|
5. Did I write key decisions back to Taskdoc instead of leaving them in chat only?
|
|
239
239
|
|
|
240
240
|
---
|
|
@@ -28,15 +28,15 @@
|
|
|
28
28
|
|
|
29
29
|
### 2.1 Tellask 三形态
|
|
30
30
|
|
|
31
|
-
- `TellaskBack
|
|
32
|
-
- `Tellask Session
|
|
33
|
-
- `Fresh Tellask
|
|
31
|
+
- `TellaskBack`(回问诉请):`tellaskBack({ tellaskContent: "..." })`,用于向诉请者回问澄清。
|
|
32
|
+
- `Tellask Session`(长线诉请):`tellask({ targetAgentId: "<teammate>", sessionSlug: "<slug>", tellaskContent: "..." })`,可恢复上下文的多轮协作。
|
|
33
|
+
- `Fresh Tellask`(一次性诉请):`tellaskSessionless({ targetAgentId: "<teammate>", tellaskContent: "..." })`,一次性、不可恢复。
|
|
34
34
|
|
|
35
35
|
### 2.2 `Tellask Session` 的真实语义
|
|
36
36
|
|
|
37
|
-
-
|
|
37
|
+
- `sessionSlug` 的作用是“会话寻址 + 历史复用”。
|
|
38
38
|
- 它**不是**“后台持续执行开关”。
|
|
39
|
-
- 同一个 `<slug>` 下,每一次新任务推进,仍然需要新的
|
|
39
|
+
- 同一个 `<slug>` 下,每一次新任务推进,仍然需要新的 `tellask* function call` 诉请触发。
|
|
40
40
|
|
|
41
41
|
一句话:`Session` 是“可续接的对话容器”,不是“会自动前进的后台 worker”。
|
|
42
42
|
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
|
|
45
45
|
对诉请者来说,一次队友诉请的运行时节奏是:
|
|
46
46
|
|
|
47
|
-
1. 发出
|
|
47
|
+
1. 发出 `tellaskSessionless({ targetAgentId: "<teammate>", tellaskContent: "..." }) ...`。
|
|
48
48
|
2. 当前对话进入挂起/等待(pending subdialogs)。
|
|
49
49
|
3. 被诉请者完成本轮驱动并回贴结果。
|
|
50
50
|
4. 诉请者恢复继续。
|
|
@@ -90,12 +90,12 @@
|
|
|
90
90
|
|
|
91
91
|
### 4.1 协作阶段协议(Teammate Tellask 版)
|
|
92
92
|
|
|
93
|
-
对**队友诉请(非
|
|
93
|
+
对**队友诉请(非 `freshBootsReasoning({ tellaskContent: "..." })`)**,统一执行四段协议:
|
|
94
94
|
|
|
95
|
-
1. `发起`:明确目标、约束、验收口径,发出
|
|
95
|
+
1. `发起`:明确目标、约束、验收口径,发出 `tellask* function call`。
|
|
96
96
|
2. `等待`:等待本轮回贴,不预设对方会自动继续。
|
|
97
97
|
3. `判定`:回贴到达后判断“已达成 / 未达成 / 需澄清”。
|
|
98
|
-
4. `续推`:若未达成,立即发下一轮诉请(通常沿用同一
|
|
98
|
+
4. `续推`:若未达成,立即发下一轮诉请(通常沿用同一 `sessionSlug`)。
|
|
99
99
|
|
|
100
100
|
强约束:
|
|
101
101
|
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
推荐写法:
|
|
108
108
|
|
|
109
109
|
```text
|
|
110
|
-
|
|
110
|
+
tellask({ targetAgentId: "shell_specialist", sessionSlug: "typecheck-loop", tellaskContent: "..." })
|
|
111
111
|
!?执行 `pnpm lint:types`,仅回贴原始输出。
|
|
112
112
|
!?若失败:只列前 3 个错误(含文件路径与行号),并给出你建议先处理的 1 个错误。
|
|
113
113
|
!?验收:我需要看到命令退出码与首个错误锚点。
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
正例(自主闭环):
|
|
131
131
|
|
|
132
132
|
```text
|
|
133
|
-
|
|
133
|
+
tellask({ targetAgentId: "shell_specialist", sessionSlug: "typecheck-loop", tellaskContent: "..." })
|
|
134
134
|
!?请立即执行 `pnpm lint:types` 并原样回贴结果。
|
|
135
135
|
!?若命令不存在,回贴错误并给出本仓可行替代命令。
|
|
136
136
|
```
|
|
@@ -153,9 +153,9 @@
|
|
|
153
153
|
2. `等待声明约束`
|
|
154
154
|
只有当存在明确 pending tellask 时,才可声明“等待中”;否则必须执行下一动作。
|
|
155
155
|
3. `自主执行约束`
|
|
156
|
-
能通过队友 tellask 完成的执行动作,不得转交给
|
|
156
|
+
能通过队友 tellask 完成的执行动作,不得转交给 askHuman() 当“转发员”。
|
|
157
157
|
4. `动作优先约束`
|
|
158
|
-
当你写“下一步让 @X 做 Y”时,应在同一回复内直接给出
|
|
158
|
+
当你写“下一步让 @X 做 Y”时,应在同一回复内直接给出 `tellaskSessionless({ targetAgentId: "X", tellaskContent: "..." })`。
|
|
159
159
|
|
|
160
160
|
### 5.2 协作 Priming 改进(P1)
|
|
161
161
|
|
|
@@ -163,13 +163,13 @@
|
|
|
163
163
|
|
|
164
164
|
1. 一次性诉请:`uname -a`(环境基线)。
|
|
165
165
|
2. 长线诉请:`tellaskSession: rtws-vcs-inventory` 两轮盘点仓库现状。
|
|
166
|
-
3. 在两段证据都到位后,再进入
|
|
166
|
+
3. 在两段证据都到位后,再进入 `freshBootsReasoning({ tellaskContent: "..." })` FBR 和综合提炼。
|
|
167
167
|
|
|
168
168
|
关键原则:
|
|
169
169
|
|
|
170
170
|
1. 无可用 `shell_specialist` 时,由 Dominds 运行时采集同样事实(`uname -a` + git 盘点),这是标准模式,不是降级。
|
|
171
171
|
2. 回贴即本轮结束;要继续必须显式发起下一轮诉请。
|
|
172
|
-
3. “让队友做”必须直接落成
|
|
172
|
+
3. “让队友做”必须直接落成 `tellask* function call`,不能转交 askHuman() 当转发员。
|
|
173
173
|
|
|
174
174
|
### 5.3 P1 设计基线(当前实现)
|
|
175
175
|
|
|
@@ -184,7 +184,7 @@
|
|
|
184
184
|
|
|
185
185
|
1. `Prelude Intro`:声明 shell 策略(`specialist_only` / `self_is_specialist` / `no_specialist`)。
|
|
186
186
|
2. `uname` 基线:
|
|
187
|
-
- `specialist_only`:主线
|
|
187
|
+
- `specialist_only`:主线 `tellaskSessionless({ targetAgentId: "<shell_specialist>", tellaskContent: "..." })` 发一次性诉请并接收回贴。
|
|
188
188
|
- 其他两种策略:运行时采集并显示 `uname -a`。
|
|
189
189
|
3. `VCS Round-1`(同一 `tellaskSession`):确认 rtws 拓扑
|
|
190
190
|
- 根路径是否 git repo
|
|
@@ -194,7 +194,7 @@
|
|
|
194
194
|
- remote(fetch/push)
|
|
195
195
|
- branch / upstream
|
|
196
196
|
- dirty 状态
|
|
197
|
-
5. 汇总 `uname + VCS` 作为同一份环境证据,发起
|
|
197
|
+
5. 汇总 `uname + VCS` 作为同一份环境证据,发起 `freshBootsReasoning({ tellaskContent: "..." })` FBR。
|
|
198
198
|
6. 收齐 FBR 回贴后做 distillation,产出 priming note。
|
|
199
199
|
|
|
200
200
|
#### 诉请模板约束
|
|
@@ -236,7 +236,7 @@
|
|
|
236
236
|
1. 我这轮是否已经发出明确 tellask(有目标、约束、验收)?
|
|
237
237
|
2. 我现在说“等待”时,是否真有 pending tellask 对应?
|
|
238
238
|
3. 回贴到达后,我是否做了“判定 + 下一轮诉请/本地动作”?
|
|
239
|
-
4. 我是否把“让队友做”落成了真实
|
|
239
|
+
4. 我是否把“让队友做”落成了真实 `tellask* function call`,而不是口头转派给 askHuman()?
|
|
240
240
|
5. 关键决策是否已写回 Taskdoc(主线)而不是只留在聊天里?
|
|
241
241
|
|
|
242
242
|
---
|
package/dist/llm/driver-entry.js
CHANGED
|
@@ -4,49 +4,25 @@ exports.getActiveDriverEngine = getActiveDriverEngine;
|
|
|
4
4
|
exports.driveDialogStream = driveDialogStream;
|
|
5
5
|
exports.emitSayingEvents = emitSayingEvents;
|
|
6
6
|
exports.supplyResponseToSupdialog = supplyResponseToSupdialog;
|
|
7
|
+
exports.restoreDialogHierarchy = restoreDialogHierarchy;
|
|
7
8
|
exports.runBackendDriver = runBackendDriver;
|
|
8
|
-
const driver_1 = require("./driver");
|
|
9
9
|
const driver_v2_1 = require("./driver-v2");
|
|
10
|
-
|
|
11
|
-
const raw = process.env.DOMINDS_DRIVER_ENGINE;
|
|
12
|
-
if (raw === undefined) {
|
|
13
|
-
return 'v2';
|
|
14
|
-
}
|
|
15
|
-
const normalized = raw.trim().toLowerCase();
|
|
16
|
-
if (normalized === '' || normalized === 'v2') {
|
|
17
|
-
return 'v2';
|
|
18
|
-
}
|
|
19
|
-
if (normalized === 'v1') {
|
|
20
|
-
return 'v1';
|
|
21
|
-
}
|
|
22
|
-
throw new Error(`Invalid DOMINDS_DRIVER_ENGINE=${JSON.stringify(raw)} (expected "v1" or "v2")`);
|
|
23
|
-
}
|
|
24
|
-
// Single switch point for rollout/tests.
|
|
25
|
-
const ACTIVE_DRIVER_ENGINE = resolveActiveDriverEngine();
|
|
10
|
+
const ACTIVE_DRIVER_ENGINE = 'v2';
|
|
26
11
|
function getActiveDriverEngine() {
|
|
27
12
|
return ACTIVE_DRIVER_ENGINE;
|
|
28
13
|
}
|
|
29
14
|
async function driveDialogStream(...args) {
|
|
30
|
-
|
|
31
|
-
return await (0, driver_v2_1.driveDialogStream)(...args);
|
|
32
|
-
}
|
|
33
|
-
return await (0, driver_1.driveDialogStream)(...args);
|
|
15
|
+
return await (0, driver_v2_1.driveDialogStream)(...args);
|
|
34
16
|
}
|
|
35
17
|
async function emitSayingEvents(...args) {
|
|
36
|
-
|
|
37
|
-
return await (0, driver_v2_1.emitSayingEvents)(...args);
|
|
38
|
-
}
|
|
39
|
-
return await (0, driver_1.emitSayingEvents)(...args);
|
|
18
|
+
return await (0, driver_v2_1.emitSayingEvents)(...args);
|
|
40
19
|
}
|
|
41
20
|
async function supplyResponseToSupdialog(...args) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
return await (0,
|
|
21
|
+
return await (0, driver_v2_1.supplyResponseToSupdialog)(...args);
|
|
22
|
+
}
|
|
23
|
+
async function restoreDialogHierarchy(...args) {
|
|
24
|
+
return await (0, driver_v2_1.restoreDialogHierarchy)(...args);
|
|
46
25
|
}
|
|
47
26
|
function runBackendDriver() {
|
|
48
|
-
|
|
49
|
-
return (0, driver_v2_1.runBackendDriver)();
|
|
50
|
-
}
|
|
51
|
-
return (0, driver_1.runBackendDriver)();
|
|
27
|
+
return (0, driver_v2_1.runBackendDriver)();
|
|
52
28
|
}
|