dominds 0.6.2 → 0.6.4
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/access-control.js +2 -2
- package/dist/agent-priming.js +826 -92
- package/dist/cli/read.js +406 -12
- package/dist/dialog.js +4 -0
- package/dist/docs/design.md +1 -0
- package/dist/docs/design.zh.md +1 -0
- package/dist/docs/dialog-system.md +12 -7
- package/dist/docs/dialog-system.zh.md +7 -3
- package/dist/docs/dominds-agent-priming.md +10 -1
- package/dist/docs/dominds-agent-priming.zh.md +9 -1
- package/dist/docs/dominds-terminology.md +8 -8
- package/dist/docs/fbr-implementation.md +77 -0
- package/dist/docs/fbr-implementation.zh.md +77 -0
- package/dist/docs/fbr.md +142 -141
- package/dist/docs/fbr.zh.md +129 -123
- package/dist/docs/keep-going.zh.md +162 -0
- package/dist/docs/showing-by-doing.md +208 -0
- package/dist/docs/showing-by-doing.zh.md +177 -0
- package/dist/docs/tellask-collab.md +250 -0
- package/dist/docs/tellask-collab.zh.md +254 -0
- package/dist/docs/txt-editing-tools.md +2 -2
- package/dist/docs/txt-editing-tools.zh.md +2 -2
- package/dist/llm/defaults.yaml +82 -4
- package/dist/llm/driver.js +280 -104
- package/dist/llm/gen/codex.js +49 -2
- package/dist/log.js +385 -30
- package/dist/mcp/supervisor.js +113 -40
- package/dist/minds/builtin/pangu/persona.zh.md +2 -2
- package/dist/minds/load.js +49 -284
- package/dist/minds/minds-i18n.js +2 -2
- package/dist/minds/promptdocs.js +263 -0
- package/dist/minds/system-prompt-parts.js +231 -0
- package/dist/minds/system-prompt.js +190 -223
- package/dist/persistence.js +66 -1
- package/dist/server/websocket-handler.js +14 -0
- package/dist/shared/diligence.js +40 -6
- package/dist/shared/utils/inter-dialog-format.js +3 -5
- package/dist/showing-by-doing.js +34 -31
- package/dist/snippets/README.en.md +3 -0
- package/dist/static/assets/{_baseUniq-C9vbtHF9.js → _baseUniq-C7IpU2Uk.js} +2 -2
- package/dist/static/assets/{_baseUniq-C9vbtHF9.js.map → _baseUniq-C7IpU2Uk.js.map} +1 -1
- package/dist/static/assets/{arc-hulXG01i.js → arc-1bhQqjON.js} +2 -2
- package/dist/static/assets/{arc-hulXG01i.js.map → arc-1bhQqjON.js.map} +1 -1
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-DdLIAMT5.js → architectureDiagram-VXUJARFQ-CkEi1QpB.js} +6 -6
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-DdLIAMT5.js.map → architectureDiagram-VXUJARFQ-CkEi1QpB.js.map} +1 -1
- package/dist/static/assets/{blockDiagram-VD42YOAC-DACsx66C.js → blockDiagram-VD42YOAC-DaBQ5-pY.js} +7 -7
- package/dist/static/assets/{blockDiagram-VD42YOAC-DACsx66C.js.map → blockDiagram-VD42YOAC-DaBQ5-pY.js.map} +1 -1
- package/dist/static/assets/{c4Diagram-YG6GDRKO-Cd5xZlLy.js → c4Diagram-YG6GDRKO-ChUgpgkP.js} +3 -3
- package/dist/static/assets/{c4Diagram-YG6GDRKO-Cd5xZlLy.js.map → c4Diagram-YG6GDRKO-ChUgpgkP.js.map} +1 -1
- package/dist/static/assets/{channel-NQehis0Z.js → channel-CxvmwllM.js} +2 -2
- package/dist/static/assets/{channel-NQehis0Z.js.map → channel-CxvmwllM.js.map} +1 -1
- package/dist/static/assets/{chunk-4BX2VUAB-DZDPl76b.js → chunk-4BX2VUAB-CKsrU2yk.js} +2 -2
- package/dist/static/assets/{chunk-4BX2VUAB-DZDPl76b.js.map → chunk-4BX2VUAB-CKsrU2yk.js.map} +1 -1
- package/dist/static/assets/{chunk-55IACEB6-CFSRDUbl.js → chunk-55IACEB6-BAau9SFt.js} +2 -2
- package/dist/static/assets/{chunk-55IACEB6-CFSRDUbl.js.map → chunk-55IACEB6-BAau9SFt.js.map} +1 -1
- package/dist/static/assets/{chunk-B4BG7PRW-BqQQ9M_z.js → chunk-B4BG7PRW--IiJ7W1m.js} +5 -5
- package/dist/static/assets/{chunk-B4BG7PRW-BqQQ9M_z.js.map → chunk-B4BG7PRW--IiJ7W1m.js.map} +1 -1
- package/dist/static/assets/{chunk-DI55MBZ5-FiFzz1Gh.js → chunk-DI55MBZ5-B83KrPQj.js} +4 -4
- package/dist/static/assets/{chunk-DI55MBZ5-FiFzz1Gh.js.map → chunk-DI55MBZ5-B83KrPQj.js.map} +1 -1
- package/dist/static/assets/{chunk-FMBD7UC4-DqqtCyWK.js → chunk-FMBD7UC4-BlDXzeza.js} +2 -2
- package/dist/static/assets/{chunk-FMBD7UC4-DqqtCyWK.js.map → chunk-FMBD7UC4-BlDXzeza.js.map} +1 -1
- package/dist/static/assets/{chunk-QN33PNHL-F0laQQ-J.js → chunk-QN33PNHL-B596W_v7.js} +2 -2
- package/dist/static/assets/{chunk-QN33PNHL-F0laQQ-J.js.map → chunk-QN33PNHL-B596W_v7.js.map} +1 -1
- package/dist/static/assets/{chunk-QZHKN3VN-CWhEZPaV.js → chunk-QZHKN3VN-UBBCxgBb.js} +2 -2
- package/dist/static/assets/{chunk-QZHKN3VN-CWhEZPaV.js.map → chunk-QZHKN3VN-UBBCxgBb.js.map} +1 -1
- package/dist/static/assets/{chunk-TZMSLE5B-Dx9cnwUy.js → chunk-TZMSLE5B-D-wCX2wJ.js} +2 -2
- package/dist/static/assets/{chunk-TZMSLE5B-Dx9cnwUy.js.map → chunk-TZMSLE5B-D-wCX2wJ.js.map} +1 -1
- package/dist/static/assets/{classDiagram-2ON5EDUG-Dp-dyEGy.js → classDiagram-2ON5EDUG-DvtmzPcu.js} +6 -6
- package/dist/static/assets/{classDiagram-2ON5EDUG-Dp-dyEGy.js.map → classDiagram-2ON5EDUG-DvtmzPcu.js.map} +1 -1
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-Dp-dyEGy.js → classDiagram-v2-WZHVMYZB-DvtmzPcu.js} +6 -6
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-Dp-dyEGy.js.map → classDiagram-v2-WZHVMYZB-DvtmzPcu.js.map} +1 -1
- package/dist/static/assets/{clone-C6mKvxs5.js → clone-DgJ0ZR-k.js} +2 -2
- package/dist/static/assets/{clone-C6mKvxs5.js.map → clone-DgJ0ZR-k.js.map} +1 -1
- package/dist/static/assets/{cose-bilkent-S5V4N54A-Dbwh3GoX.js → cose-bilkent-S5V4N54A-DXMyFQvy.js} +2 -2
- package/dist/static/assets/{cose-bilkent-S5V4N54A-Dbwh3GoX.js.map → cose-bilkent-S5V4N54A-DXMyFQvy.js.map} +1 -1
- package/dist/static/assets/{dagre-6UL2VRFP-BD_6e0Uk.js → dagre-6UL2VRFP-BdaUG-j_.js} +7 -7
- package/dist/static/assets/{dagre-6UL2VRFP-BD_6e0Uk.js.map → dagre-6UL2VRFP-BdaUG-j_.js.map} +1 -1
- package/dist/static/assets/{diagram-PSM6KHXK-BWt7Q59-.js → diagram-PSM6KHXK-NLiqKBzn.js} +7 -7
- package/dist/static/assets/{diagram-PSM6KHXK-BWt7Q59-.js.map → diagram-PSM6KHXK-NLiqKBzn.js.map} +1 -1
- package/dist/static/assets/{diagram-QEK2KX5R-D0BvBR_a.js → diagram-QEK2KX5R-D-0fyvY_.js} +6 -6
- package/dist/static/assets/{diagram-QEK2KX5R-D0BvBR_a.js.map → diagram-QEK2KX5R-D-0fyvY_.js.map} +1 -1
- package/dist/static/assets/{diagram-S2PKOQOG-D8uRdKXp.js → diagram-S2PKOQOG-BQ_FU59m.js} +6 -6
- package/dist/static/assets/{diagram-S2PKOQOG-D8uRdKXp.js.map → diagram-S2PKOQOG-BQ_FU59m.js.map} +1 -1
- package/dist/static/assets/{erDiagram-Q2GNP2WA-CQoifjFq.js → erDiagram-Q2GNP2WA-DyftKeuC.js} +5 -5
- package/dist/static/assets/{erDiagram-Q2GNP2WA-CQoifjFq.js.map → erDiagram-Q2GNP2WA-DyftKeuC.js.map} +1 -1
- package/dist/static/assets/{flowDiagram-NV44I4VS-CGhdeaG8.js → flowDiagram-NV44I4VS-9SGefONA.js} +6 -6
- package/dist/static/assets/{flowDiagram-NV44I4VS-CGhdeaG8.js.map → flowDiagram-NV44I4VS-9SGefONA.js.map} +1 -1
- package/dist/static/assets/{ganttDiagram-JELNMOA3-D8W0wb9H.js → ganttDiagram-JELNMOA3-k_WLhf-r.js} +3 -3
- package/dist/static/assets/{ganttDiagram-JELNMOA3-D8W0wb9H.js.map → ganttDiagram-JELNMOA3-k_WLhf-r.js.map} +1 -1
- package/dist/static/assets/{gitGraphDiagram-NY62KEGX-ChHni_jP.js → gitGraphDiagram-NY62KEGX-3eoLlCOY.js} +7 -7
- package/dist/static/assets/{gitGraphDiagram-NY62KEGX-ChHni_jP.js.map → gitGraphDiagram-NY62KEGX-3eoLlCOY.js.map} +1 -1
- package/dist/static/assets/{graph-BWoi_FgC.js → graph-vUevIs4s.js} +3 -3
- package/dist/static/assets/{graph-BWoi_FgC.js.map → graph-vUevIs4s.js.map} +1 -1
- package/dist/static/assets/{index-th_praGg.js → index-BNBG2CE1.js} +399 -68
- package/dist/static/assets/index-BNBG2CE1.js.map +1 -0
- package/dist/static/assets/{infoDiagram-WHAUD3N6-B_XKKZTV.js → infoDiagram-WHAUD3N6-CwEhVxkU.js} +5 -5
- package/dist/static/assets/{infoDiagram-WHAUD3N6-B_XKKZTV.js.map → infoDiagram-WHAUD3N6-CwEhVxkU.js.map} +1 -1
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-ChGuQ6T9.js → journeyDiagram-XKPGCS4Q-Dtdq4G4Q.js} +5 -5
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-ChGuQ6T9.js.map → journeyDiagram-XKPGCS4Q-Dtdq4G4Q.js.map} +1 -1
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-BjWe623u.js → kanban-definition-3W4ZIXB7-Bli-AycJ.js} +3 -3
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-BjWe623u.js.map → kanban-definition-3W4ZIXB7-Bli-AycJ.js.map} +1 -1
- package/dist/static/assets/{layout-BPyT310w.js → layout-CGlA8c09.js} +5 -5
- package/dist/static/assets/{layout-BPyT310w.js.map → layout-CGlA8c09.js.map} +1 -1
- package/dist/static/assets/{linear-xUsVjXWq.js → linear-Da2jDWL3.js} +2 -2
- package/dist/static/assets/{linear-xUsVjXWq.js.map → linear-Da2jDWL3.js.map} +1 -1
- package/dist/static/assets/{min-xFt7zeOd.js → min-Co741hTV.js} +3 -3
- package/dist/static/assets/{min-xFt7zeOd.js.map → min-Co741hTV.js.map} +1 -1
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-DT_dvf2c.js → mindmap-definition-VGOIOE7T-DvkIjoq8.js} +4 -4
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-DT_dvf2c.js.map → mindmap-definition-VGOIOE7T-DvkIjoq8.js.map} +1 -1
- package/dist/static/assets/{pieDiagram-ADFJNKIX-B1DQ-OaG.js → pieDiagram-ADFJNKIX-BGuGhTu8.js} +7 -7
- package/dist/static/assets/{pieDiagram-ADFJNKIX-B1DQ-OaG.js.map → pieDiagram-ADFJNKIX-BGuGhTu8.js.map} +1 -1
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-IHqyr3iT.js → quadrantDiagram-AYHSOK5B-DAZcrJMg.js} +3 -3
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-IHqyr3iT.js.map → quadrantDiagram-AYHSOK5B-DAZcrJMg.js.map} +1 -1
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-CKBpht7B.js → requirementDiagram-UZGBJVZJ-CXN0DxZs.js} +4 -4
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-CKBpht7B.js.map → requirementDiagram-UZGBJVZJ-CXN0DxZs.js.map} +1 -1
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-D2uGjv3i.js → sankeyDiagram-TZEHDZUN-B7-yAePZ.js} +2 -2
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-D2uGjv3i.js.map → sankeyDiagram-TZEHDZUN-B7-yAePZ.js.map} +1 -1
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-wLFRhAKd.js → sequenceDiagram-WL72ISMW-DfBNY6h_.js} +4 -4
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-wLFRhAKd.js.map → sequenceDiagram-WL72ISMW-DfBNY6h_.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-BFGQTbx5.js → stateDiagram-FKZM4ZOC-BLo1xRVY.js} +9 -9
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-BFGQTbx5.js.map → stateDiagram-FKZM4ZOC-BLo1xRVY.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-DF7AjJuk.js → stateDiagram-v2-4FDKWEC3-Dq7MAD0I.js} +5 -5
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-DF7AjJuk.js.map → stateDiagram-v2-4FDKWEC3-Dq7MAD0I.js.map} +1 -1
- package/dist/static/assets/{timeline-definition-IT6M3QCI-ChHFOb0o.js → timeline-definition-IT6M3QCI-ySWyBF3b.js} +3 -3
- package/dist/static/assets/{timeline-definition-IT6M3QCI-ChHFOb0o.js.map → timeline-definition-IT6M3QCI-ySWyBF3b.js.map} +1 -1
- package/dist/static/assets/{treemap-KMMF4GRG-BxaNvQU4.js → treemap-KMMF4GRG-DOp4sqOh.js} +4 -4
- package/dist/static/assets/{treemap-KMMF4GRG-BxaNvQU4.js.map → treemap-KMMF4GRG-DOp4sqOh.js.map} +1 -1
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-CrNKeY_-.js → xychartDiagram-PRI3JC2R-vkmh67qb.js} +3 -3
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-CrNKeY_-.js.map → xychartDiagram-PRI3JC2R-vkmh67qb.js.map} +1 -1
- package/dist/static/index.html +1 -1
- package/dist/team.js +29 -6
- package/dist/tool.js +56 -0
- package/dist/tools/builtins.js +4 -2
- package/dist/tools/context-health.js +7 -7
- package/dist/tools/os.js +267 -30
- package/dist/tools/pending-tellask-reminder.js +185 -0
- package/dist/tools/plan.js +1 -0
- package/dist/tools/ripgrep.js +145 -4
- package/dist/tools/shell-tools.js +21 -0
- package/dist/tools/team-mgmt.js +4 -4
- package/dist/tools/toolset-manual.js +74 -0
- package/dist/utils/task-doc.js +16 -16
- package/package.json +1 -1
- package/dist/minds/builtin/cmdr/persona.md +0 -3
- package/dist/minds/builtin/dijiang/knowledge.md +0 -287
- package/dist/minds/builtin/dijiang/persona.md +0 -7
- package/dist/static/assets/index-th_praGg.js.map +0 -1
- package/dist/static/testing/dom-observation-utils.js +0 -425
- package/dist/static/testing/e2e-test-helper.js +0 -3119
|
@@ -111,11 +111,11 @@
|
|
|
111
111
|
- EN (term): `TellaskBack`
|
|
112
112
|
- ZH(术语): `回问诉请`
|
|
113
113
|
|
|
114
|
-
- EN (meaning): Ask the **
|
|
115
|
-
- ZH(含义):
|
|
114
|
+
- EN (meaning): Ask the **tellasker dialog** (the dialog that issued the current Tellask) for clarification instead of guessing.
|
|
115
|
+
- ZH(含义): 当被诉请方需要补充信息时,应**回问诉请者对话**澄清,而不是自行猜测。
|
|
116
116
|
|
|
117
|
-
- EN (what “Back” means): “Back” refers to routing back to the
|
|
118
|
-
- ZH(Back 的含义): “Back”
|
|
117
|
+
- EN (what “Back” means): “Back” refers to routing back to the tellasker dialog; it does **not** imply hierarchy/seniority.
|
|
118
|
+
- ZH(Back 的含义): “Back” 指回到诉请者对话,**不暗示上下级**。
|
|
119
119
|
|
|
120
120
|
- EN (typical carrier): `!?@tellasker ...` (only available inside a sideline dialog)
|
|
121
121
|
- ZH(典型载体): `!?@tellasker ...`(只在你处于支线对话语境时可用)
|
|
@@ -191,8 +191,8 @@ Example / 示例(概念):
|
|
|
191
191
|
|
|
192
192
|
### 系统提示可复用的一句话(One-Sentence Summary for System Prompts)
|
|
193
193
|
|
|
194
|
-
- EN: `TellaskBack` asks the
|
|
195
|
-
- ZH: `TellaskBack`
|
|
194
|
+
- EN: `TellaskBack` asks the tellasker dialog for clarification; `Tellask Session` uses `!tellaskSession <slug>` for resumable multi-turn work; `Fresh Tellask` is one-shot and non-resumable.
|
|
195
|
+
- ZH: `TellaskBack` 回问诉请者澄清;`Tellask Session` 用 `!tellaskSession <slug>` 进行可续用多轮协作;`Fresh Tellask` 是一次性且不可恢复。
|
|
196
196
|
|
|
197
197
|
### 为何保留 `!` 前缀?(Why keep the `!` prefix?)
|
|
198
198
|
|
|
@@ -402,8 +402,8 @@ Example / 示例(概念):
|
|
|
402
402
|
- EN: The implementation may still use the internal labels **Type A/B/C** to classify teammate-tellask patterns.
|
|
403
403
|
- ZH: 实现层仍可能使用 **Type A/B/C** 作为队友诉请形态的内部分类。
|
|
404
404
|
|
|
405
|
-
- EN: Type A:
|
|
406
|
-
- ZH: Type A
|
|
405
|
+
- EN: Type A: TellaskBack call (a subdialog asking back to its tellasker dialog); primary syntax `!?@tellasker` (NO `!tellaskSession`).
|
|
406
|
+
- ZH: Type A:回问诉请(子对话回问其诉请者对话);主语法 `!?@tellasker`(不带 `!tellaskSession`)。
|
|
407
407
|
|
|
408
408
|
- EN: Type B: registered subdialog call (resumable) keyed by `agentId!tellaskSession`.
|
|
409
409
|
- ZH: Type B:registered subdialog call(可恢复),用 `agentId!tellaskSession` 作为 registry key。
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# FBR Implementation Details (Implemented)
|
|
2
|
+
|
|
3
|
+
Chinese version: [中文版](./fbr-implementation.zh.md)
|
|
4
|
+
|
|
5
|
+
This doc records the implemented structure and constraints. The normative spec is `fbr.md`.
|
|
6
|
+
|
|
7
|
+
## Implementation principles
|
|
8
|
+
|
|
9
|
+
- FBR and non-FBR use the same context assembly pipeline; differences must be explicit policy fields only.
|
|
10
|
+
- The FBR system prompt body must contain no tool instructions; tool availability is expressed only by a separate notice.
|
|
11
|
+
- Tool/tellask restrictions are enforced technically at runtime, not by prompt wording alone.
|
|
12
|
+
|
|
13
|
+
## Code structure
|
|
14
|
+
|
|
15
|
+
### 1) Unified drive policy (`main/llm/driver.ts`)
|
|
16
|
+
|
|
17
|
+
Before each generation, runtime builds a `DrivePolicy` that centralizes:
|
|
18
|
+
|
|
19
|
+
- `effectiveSystemPrompt`
|
|
20
|
+
- `effectiveAgentTools`
|
|
21
|
+
- `prependedContextMessages`
|
|
22
|
+
- `tellaskPolicy`
|
|
23
|
+
- `allowFunctionCalls`
|
|
24
|
+
|
|
25
|
+
For FBR policy, runtime:
|
|
26
|
+
|
|
27
|
+
- uses `buildFbrSystemPrompt(...)` (no tool instructions)
|
|
28
|
+
- injects a separate `buildNoToolsNotice(...)`
|
|
29
|
+
- forces `effectiveAgentTools = []`
|
|
30
|
+
- forces `tellaskPolicy = tellasker_only`
|
|
31
|
+
- forces `allowFunctionCalls = false`
|
|
32
|
+
- applies `fbr_model_params` override when configured
|
|
33
|
+
|
|
34
|
+
### 2) Unified context assembly (`main/llm/driver.ts`)
|
|
35
|
+
|
|
36
|
+
`buildDriveContextMessages(...)` assembles context for both FBR and non-FBR. FBR does not use ad-hoc `unshift/push` special-cases in the main flow; it only differs via policy-provided `prependedContextMessages`.
|
|
37
|
+
|
|
38
|
+
### 3) Unified violation gate (`main/llm/driver.ts`)
|
|
39
|
+
|
|
40
|
+
Both streaming and non-streaming paths call `resolveDrivePolicyViolationKind(...)` to detect:
|
|
41
|
+
|
|
42
|
+
- disallowed tellasks (FBR allows only `@tellasker`)
|
|
43
|
+
- disallowed tool/function calls (FBR disallows all)
|
|
44
|
+
|
|
45
|
+
On violation, runtime emits `formatDomindsNoteFbrToollessViolation(...)` consistently.
|
|
46
|
+
|
|
47
|
+
### 4) FBR isolation invariant gate (`main/llm/driver.ts`)
|
|
48
|
+
|
|
49
|
+
Before generation, runtime runs `validateDrivePolicyInvariants(...)` and fail-fast checks:
|
|
50
|
+
|
|
51
|
+
- system prompt must exactly equal `buildFbrSystemPrompt(...)`
|
|
52
|
+
- `effectiveAgentTools` must be empty
|
|
53
|
+
- `allowFunctionCalls` must be `false`
|
|
54
|
+
- `tellaskPolicy` must be `tellasker_only`
|
|
55
|
+
- `prependedContextMessages` must contain exactly one `buildNoToolsNotice(...)`
|
|
56
|
+
|
|
57
|
+
If any check fails, runtime throws `FBR policy isolation violation`, preventing global tool-manual/tool-prompt paths from leaking into FBR.
|
|
58
|
+
|
|
59
|
+
### 5) Single-source no-tools notice (`main/minds/system-prompt-parts.ts`)
|
|
60
|
+
|
|
61
|
+
`buildNoToolsNotice(...)` is the only tool-availability wording source, fixed to:
|
|
62
|
+
|
|
63
|
+
- no tools available / do not call tools
|
|
64
|
+
- no access to rtws / files / browser / shell
|
|
65
|
+
|
|
66
|
+
## Related modules
|
|
67
|
+
|
|
68
|
+
- `main/llm/driver.ts`: policy, context assembly, violation enforcement
|
|
69
|
+
- `main/minds/system-prompt-parts.ts`: no-tools notice generator
|
|
70
|
+
- `main/agent-priming.ts`: FBR prompt text cleanup (no tool-list guidance inside FBR prompts)
|
|
71
|
+
|
|
72
|
+
## Acceptance checklist
|
|
73
|
+
|
|
74
|
+
- FBR system prompt has no tool instructions.
|
|
75
|
+
- Tool-related wording appears only in the separate `buildNoToolsNotice(...)`.
|
|
76
|
+
- FBR/non-FBR context assembly flow is structurally identical; only policy fields differ.
|
|
77
|
+
- Any FBR tool/function call or non-`@tellasker` tellask is hard-rejected with explicit feedback.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# FBR 实现细节(已落地)
|
|
2
|
+
|
|
3
|
+
英文版:[English](./fbr-implementation.md)
|
|
4
|
+
|
|
5
|
+
本文描述当前实现结构与约束。规范以 `fbr.zh.md` 为准。
|
|
6
|
+
|
|
7
|
+
## 实现原则
|
|
8
|
+
|
|
9
|
+
- FBR 与非 FBR 共享同一条上下文装配流水线,差异只允许通过显式策略字段声明。
|
|
10
|
+
- system prompt 本体禁止工具说明;工具可用性仅通过独立“无工具提示”表达。
|
|
11
|
+
- 工具/诉请限制在运行时技术上强制,不依赖模型“自觉遵守”。
|
|
12
|
+
|
|
13
|
+
## 代码结构
|
|
14
|
+
|
|
15
|
+
### 1) 统一策略对象(`main/llm/driver.ts`)
|
|
16
|
+
|
|
17
|
+
驱动阶段先构建 `DrivePolicy`,集中给出:
|
|
18
|
+
|
|
19
|
+
- `effectiveSystemPrompt`
|
|
20
|
+
- `effectiveAgentTools`
|
|
21
|
+
- `prependedContextMessages`
|
|
22
|
+
- `tellaskPolicy`
|
|
23
|
+
- `allowFunctionCalls`
|
|
24
|
+
|
|
25
|
+
其中 FBR 策略会:
|
|
26
|
+
|
|
27
|
+
- 切换到 `buildFbrSystemPrompt(...)`(不含工具说明)
|
|
28
|
+
- 注入单独 `buildNoToolsNotice(...)`
|
|
29
|
+
- 强制 `effectiveAgentTools = []`
|
|
30
|
+
- 强制 `tellaskPolicy = tellasker_only`
|
|
31
|
+
- 强制 `allowFunctionCalls = false`
|
|
32
|
+
- 在需要时对成员应用 `fbr_model_params` 覆盖
|
|
33
|
+
|
|
34
|
+
### 2) 统一上下文装配(`main/llm/driver.ts`)
|
|
35
|
+
|
|
36
|
+
上下文通过 `buildDriveContextMessages(...)` 组装,FBR 与非 FBR 走同一函数;FBR 仅通过 `prependedContextMessages` 体现“无工具可见性”差异,不再在主流程里零散 `unshift/push` 特判。
|
|
37
|
+
|
|
38
|
+
### 3) 统一违规判定(`main/llm/driver.ts`)
|
|
39
|
+
|
|
40
|
+
流式与非流式两条路径都调用 `resolveDrivePolicyViolationKind(...)`:
|
|
41
|
+
|
|
42
|
+
- 违规 tellask(FBR 仅允许 `@tellasker`)
|
|
43
|
+
- 违规 function/tool call(FBR 禁止)
|
|
44
|
+
|
|
45
|
+
一旦违规,统一产出 `formatDomindsNoteFbrToollessViolation(...)`,保持用户反馈与日志语义一致。
|
|
46
|
+
|
|
47
|
+
### 4) FBR 隔离不变量硬校验(`main/llm/driver.ts`)
|
|
48
|
+
|
|
49
|
+
驱动前会执行 `validateDrivePolicyInvariants(...)`,对 FBR 做 fail-fast 校验:
|
|
50
|
+
|
|
51
|
+
- system prompt 必须严格等于 `buildFbrSystemPrompt(...)`
|
|
52
|
+
- `effectiveAgentTools` 必须为空
|
|
53
|
+
- `allowFunctionCalls` 必须为 `false`
|
|
54
|
+
- `tellaskPolicy` 必须为 `tellasker_only`
|
|
55
|
+
- `prependedContextMessages` 必须且仅能包含一条 `buildNoToolsNotice(...)`
|
|
56
|
+
|
|
57
|
+
若任一条件不满足,运行时直接抛出 `FBR policy isolation violation`,防止全局工具手册/工具提示路径回流污染 FBR。
|
|
58
|
+
|
|
59
|
+
### 5) 单一“无工具提示”源(`main/minds/system-prompt-parts.ts`)
|
|
60
|
+
|
|
61
|
+
`buildNoToolsNotice(...)` 作为唯一工具可用性文案源,固定声明:
|
|
62
|
+
|
|
63
|
+
- 不能调用任何工具
|
|
64
|
+
- 不能访问 rtws / 文件 / 浏览器 / shell
|
|
65
|
+
|
|
66
|
+
## 相关模块
|
|
67
|
+
|
|
68
|
+
- `main/llm/driver.ts`:策略、上下文装配、违规判定
|
|
69
|
+
- `main/minds/system-prompt-parts.ts`:无工具提示生成
|
|
70
|
+
- `main/agent-priming.ts`:FBR 引导文案去工具化(不在 FBR 提示词内讲工具清单)
|
|
71
|
+
|
|
72
|
+
## 验收清单
|
|
73
|
+
|
|
74
|
+
- FBR system prompt 不包含工具说明。
|
|
75
|
+
- “无工具”文案仅来自独立 `buildNoToolsNotice(...)`。
|
|
76
|
+
- FBR 与非 FBR 的上下文装配主流程一致,差异只来自策略字段。
|
|
77
|
+
- FBR 中任意 tool/function call 或非 `@tellasker` tellask 都被运行时硬拒绝并给出明确回执。
|
package/dist/docs/fbr.md
CHANGED
|
@@ -1,217 +1,219 @@
|
|
|
1
|
-
# Fresh Boots Reasoning (FBR) —
|
|
1
|
+
# Fresh Boots Reasoning (FBR) — Mechanism Spec
|
|
2
2
|
|
|
3
3
|
Chinese version: [中文版](./fbr.zh.md)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
> This is the **normative FBR spec**. For implementation notes, see: [`fbr-implementation.md`](./fbr-implementation.md).
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
sideline dialog that reasons from first principles on a bounded sub-problem **without relying on existing dialog
|
|
9
|
-
history**, then reports back to the caller.
|
|
7
|
+
## 1. What it is
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
**Fresh Boots Reasoning (FBR)** is a Dominds mechanism for “reasoning again from a clean slate” on a bounded sub-problem,
|
|
10
|
+
then reporting back to the mainline dialog.
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
2. **Configurable FBR concurrency** via `.minds/team.yaml` `fbr-effort` (default `3`):
|
|
16
|
-
- `0` disables `!?@self` FBR for that teammate
|
|
17
|
-
- `1..100` spawns that many FBR sideline dialogs per `!?@self`
|
|
18
|
-
- `> 100` is a validation error
|
|
19
|
-
3. **FBR-only model parameter overrides** via `.minds/team.yaml` `fbr_model_params`, with the same schema as
|
|
20
|
-
`model_params` / `model_param_options` (see `dominds/main/llm/defaults.yaml`).
|
|
12
|
+
In Dominds, FBR is triggered via Tellask syntax. `@self` is only the entry-point syntax (“tellask the current dialog
|
|
13
|
+
itself”); the mechanism is the runtime-enforced contract applied to the spawned sideline dialog(s).
|
|
21
14
|
|
|
22
|
-
##
|
|
15
|
+
## 2. Design principles and tradeoffs
|
|
23
16
|
|
|
24
|
-
|
|
25
|
-
- Enable “many-shot” reasoning by spawning multiple FBR sideline dialogs concurrently (`fbr-effort`).
|
|
26
|
-
- Allow tuning model parameters specifically for FBR (e.g. higher `temperature`) without affecting the mainline dialog.
|
|
17
|
+
### 2.1 Predictability first: FBR is tool-less
|
|
27
18
|
|
|
28
|
-
|
|
19
|
+
FBR is meant to be “reasoning over text”, not “an agent run that explores the environment”. To keep it safe and
|
|
20
|
+
predictable, FBR sideline dialogs must be:
|
|
29
21
|
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
- Changing teammate Tellask taxonomy in general (see [`dialog-system.md`](./dialog-system.md)); this doc scopes to `@self` only.
|
|
22
|
+
- **tool-less by construction** (technically enforced; not “please don’t use tools”), and
|
|
23
|
+
- **body-first** (the tellask body is the authoritative task context).
|
|
33
24
|
|
|
34
|
-
|
|
25
|
+
### 2.2 No silent failure
|
|
35
26
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
- **tellasker / tellaskee**: requester / responder roles for a Tellask.
|
|
39
|
-
- **Mainline dialog / sideline dialog**: user-facing terms for the primary thread and its temporary work threads.
|
|
40
|
-
(Implementation terms like `root/main/subdialog` may appear in code; avoid surfacing them in prompts/examples.)
|
|
27
|
+
If FBR is disabled by configuration (e.g. `fbr-effort: 0`), the runtime MUST reject `!?@self` loudly and clearly. A
|
|
28
|
+
silent ignore is worse than an error.
|
|
41
29
|
|
|
42
|
-
|
|
30
|
+
### 2.3 Many-shot reasoning, not “multi-agent collaboration”
|
|
43
31
|
|
|
44
|
-
|
|
32
|
+
`fbr-effort` is for producing multiple _independent_ reasoning samples in parallel. The mainline dialog is responsible
|
|
33
|
+
for synthesis; FBR sidelines do not coordinate with each other.
|
|
45
34
|
|
|
46
|
-
|
|
35
|
+
## 3. User syntax (`@self` is just the entry point)
|
|
47
36
|
|
|
48
|
-
|
|
49
|
-
- Rare (resumable): `!?@self !tellaskSession <tellaskSession>` (the sideline dialog carries its prior `tellaskSession` history)
|
|
37
|
+
### 3.1 Trigger forms
|
|
50
38
|
|
|
51
|
-
|
|
39
|
+
Both forms below trigger FBR:
|
|
52
40
|
|
|
53
|
-
|
|
41
|
+
- **Default (transient)**: `!?@self`
|
|
42
|
+
- **Rare (resumable)**: `!?@self !tellaskSession <tellaskSession>`
|
|
54
43
|
|
|
55
|
-
|
|
44
|
+
Notes:
|
|
56
45
|
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
46
|
+
- `@self` means “tellask the current dialog itself (same agentId)”. It is an explicit self-tellask marker to avoid
|
|
47
|
+
accidental self-calls caused by echoing/quoting `@teammate` headlines.
|
|
48
|
+
- Resumability comes from `!tellaskSession`, not from `@self`.
|
|
49
|
+
|
|
50
|
+
### 3.2 Scope
|
|
51
|
+
|
|
52
|
+
This document specifies the FBR mechanism and its `!?@self` contract. General teammate Tellasks (`!?@<teammate>`) follow
|
|
53
|
+
the taxonomy and capability model in [`dialog-system.md`](./dialog-system.md).
|
|
54
|
+
|
|
55
|
+
If you want a “fresh” sideline dialog that still has tools, do not use `@self`. Use an explicit teammate identity that
|
|
56
|
+
is granted the needed toolsets (or use the general `!?@<agentId>` mechanism intentionally).
|
|
57
|
+
|
|
58
|
+
## 4. Runtime contract (normative)
|
|
59
|
+
|
|
60
|
+
This section uses MUST / MUST NOT / SHOULD / MAY for requirements.
|
|
61
|
+
|
|
62
|
+
### 4.1 Isolation and context
|
|
63
|
+
|
|
64
|
+
When driving an FBR sideline dialog created by `!?@self`, runtime MUST enforce:
|
|
65
|
+
|
|
66
|
+
- **No dependency on tellasker dialog history**
|
|
67
|
+
- the tellaskee MUST NOT assume access to the tellasker’s mainline/sideline history
|
|
63
68
|
- the tellaskee MUST treat the tellask body as the primary, authoritative task context
|
|
64
|
-
-
|
|
65
|
-
|
|
69
|
+
- for the resumable `!tellaskSession` form, the tellaskee MAY use the sideline’s _own_ `tellaskSession` history as
|
|
70
|
+
explicit context
|
|
71
|
+
- **No tool-based context fetch**
|
|
72
|
+
- no reading files / running commands / browsing
|
|
73
|
+
- no accessing Memory or rtws (runtime workspace) state
|
|
66
74
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
session history.
|
|
75
|
+
Intuition: “fresh boots” means “fresh relative to the caller thread”, not “ignores baseline system rules”. Runtime may
|
|
76
|
+
still inject baseline policy/safety/formatting context, but the tellask body remains the authority (except when using
|
|
77
|
+
the sideline’s own resumable history).
|
|
71
78
|
|
|
72
|
-
###
|
|
79
|
+
### 4.2 Tool-less (prompt + technical enforcement)
|
|
73
80
|
|
|
74
|
-
|
|
81
|
+
Tool-less FBR has two layers, both required:
|
|
75
82
|
|
|
76
|
-
|
|
83
|
+
1. **Prompt contract**: the runtime must communicate the tool-less constraint unambiguously.
|
|
84
|
+
2. **API/transport contract**: the runtime must make the request technically tool-less.
|
|
77
85
|
|
|
78
|
-
|
|
86
|
+
#### 4.2.1 System prompt requirements (no tool instructions)
|
|
79
87
|
|
|
80
|
-
|
|
81
|
-
- do not include any tool/function definitions in the request payload (the effective tool list MUST be empty)
|
|
82
|
-
- do not enable any “tool calling” mode / tool choice / function calling feature supported by the provider
|
|
83
|
-
- The runtime MUST reject any attempt by the model to emit a tool call in FBR, even if the provider SDK would otherwise
|
|
84
|
-
accept it.
|
|
88
|
+
The FBR system prompt MUST communicate (wording may vary, meaning must hold):
|
|
85
89
|
|
|
86
|
-
|
|
90
|
+
- this is an FBR sideline dialog; the tellask body is the primary context
|
|
91
|
+
- do not assume access to tellasker dialog history
|
|
92
|
+
- if critical context is missing, list what is missing and why it blocks reasoning
|
|
93
|
+
- `!?@tellasker` is allowed only when you must clarify critical missing context; otherwise do not emit any tellasks
|
|
87
94
|
|
|
88
|
-
|
|
95
|
+
And: the **system prompt body MUST NOT include tool instructions** (no tool lists, allowlists, example commands, “how to
|
|
96
|
+
use tools”, etc.).
|
|
89
97
|
|
|
90
|
-
|
|
91
|
-
- You have **no direct rtws (runtime workspace) / files / browser / shell** access (tool calling is disabled).
|
|
92
|
-
- The tellask body is the **primary task context**; do not assume any caller-thread history is available.
|
|
93
|
-
- If this is a resumable `!tellaskSession` FBR, you may use your own prior `tellaskSession` history as explicit context.
|
|
94
|
-
- If the tellask body is missing critical context, respond by listing what is missing and why it blocks reasoning.
|
|
95
|
-
- `!?@tellasker` is allowed only when you must clarify critical missing context; otherwise do not emit any tellasks.
|
|
98
|
+
#### 4.2.2 Appended “no tools” notice (the only allowed tool-related text)
|
|
96
99
|
|
|
97
|
-
|
|
100
|
+
All tool-availability wording MUST be confined to a separately injected “no tools” notice, and that notice MUST be:
|
|
98
101
|
|
|
99
|
-
|
|
102
|
+
- short, fixed, and non-extensible
|
|
103
|
+
- explicit: no tools available; do not call tools
|
|
104
|
+
- explicit: no access to rtws / files / browser / shell
|
|
105
|
+
- free of any tool lists, allowlists, example commands, or execution guidance
|
|
100
106
|
|
|
101
|
-
|
|
102
|
-
- inject a tool prompt that explicitly states “no tools are available; tool calling is disabled”
|
|
107
|
+
If a provider integration normally injects a tool prompt or schema, then for FBR it MUST either:
|
|
103
108
|
|
|
104
|
-
|
|
109
|
+
- omit it entirely, OR
|
|
110
|
+
- inject text that is identical to the appended “no tools” notice
|
|
105
111
|
|
|
106
|
-
|
|
112
|
+
Under no circumstances should the FBR sideline dialog see any tool definitions.
|
|
107
113
|
|
|
108
|
-
|
|
109
|
-
Recommended structure (not rigidly required):
|
|
114
|
+
#### 4.2.3 The LLM request MUST be “zero tools”
|
|
110
115
|
|
|
111
|
-
|
|
112
|
-
2. **Reasoning** (grounded in the tellask body; plus `tellaskSession` history if using the resumable form)
|
|
113
|
-
3. **Assumptions** (explicitly derived from the tellask body, unless clearly sourced from `tellaskSession` history)
|
|
114
|
-
4. **Unknowns / missing context** (if any)
|
|
115
|
-
5. **Next steps** (for the tellasker to take in the mainline dialog, where tools may exist)
|
|
116
|
+
The LLM request for an `@self` FBR sideline dialog MUST have **zero tools available**:
|
|
116
117
|
|
|
117
|
-
|
|
118
|
+
- the request payload must not include tool/function definitions (effective tool list must be empty)
|
|
119
|
+
- provider tool-calling / function-calling modes must not be enabled
|
|
118
120
|
|
|
119
|
-
|
|
120
|
-
run and return a clear error back to the tellasker (do not silently ignore).
|
|
121
|
-
- The error should be loud and debuggable (e.g., an explicit “tool_call_not_allowed_in_fbr” reason string in logs/events).
|
|
121
|
+
If the model attempts a tool/function call anyway, runtime MUST hard-reject it (see 4.5).
|
|
122
122
|
|
|
123
|
-
|
|
123
|
+
### 4.3 Tellask restriction: only `!?@tellasker`
|
|
124
124
|
|
|
125
|
-
|
|
125
|
+
FBR sideline dialogs MUST NOT issue teammate Tellasks (including `!?@human`). The only exception is `!?@tellasker`:
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
- sideline-only TellaskBack to the upstream tellasker dialog
|
|
128
|
+
- allowed only when critical context must be clarified
|
|
129
|
+
- intended for clarification, not delegation
|
|
128
130
|
|
|
129
|
-
|
|
131
|
+
### 4.4 Output contract (easy to synthesize)
|
|
130
132
|
|
|
131
|
-
|
|
133
|
+
An FBR sideline dialog should produce a compact artifact that is easy for the tellasker to integrate. Suggested shape:
|
|
132
134
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
- `< 0` or non-integer: validation error
|
|
135
|
+
1. **Conclusion**
|
|
136
|
+
2. **Reasoning** (grounded in the tellask body; plus resumable history when applicable)
|
|
137
|
+
3. **Assumptions** (explicitly sourced: body vs session history)
|
|
138
|
+
4. **Unknowns / missing context**
|
|
139
|
+
5. **Next steps for mainline** (where tools/teammates may exist)
|
|
139
140
|
|
|
140
|
-
|
|
141
|
+
### 4.5 Violations and errors (loud + debuggable)
|
|
141
142
|
|
|
142
|
-
-
|
|
143
|
+
- Any disallowed tellask (non-`@tellasker`) or any tool/function call attempt inside FBR MUST be treated as a hard
|
|
144
|
+
violation.
|
|
145
|
+
- The runtime MUST return a clear, user-visible error, and MUST log/emit a debuggable reason string (no silent swallow).
|
|
143
146
|
|
|
144
|
-
|
|
147
|
+
## 5. Concurrency: `fbr-effort`
|
|
145
148
|
|
|
146
|
-
|
|
149
|
+
`fbr-effort` is a per-member integer config (also allowed under `member_defaults` as rtws defaults):
|
|
147
150
|
|
|
148
|
-
-
|
|
149
|
-
-
|
|
150
|
-
-
|
|
151
|
-
|
|
152
|
-
-
|
|
153
|
-
session keys so each parallel sideline dialog has independent history (recommended scheme: `<tellaskSession>.fbr<i>`).
|
|
151
|
+
- Type: integer
|
|
152
|
+
- Default: `3`
|
|
153
|
+
- `0`: disable `!?@self` FBR for that member (runtime MUST reject `!?@self` clearly)
|
|
154
|
+
- `1..100`: spawn N FBR sideline dialogs per `!?@self`
|
|
155
|
+
- `> 100` / non-integer / negative: validation error (reject; no clamping)
|
|
154
156
|
|
|
155
|
-
|
|
157
|
+
When `fbr-effort = N`:
|
|
156
158
|
|
|
157
|
-
|
|
159
|
+
- runtime expands a single `!?@self` into **N parallel tool-less FBR sideline dialogs**
|
|
160
|
+
- each sideline receives the same tellask body and the same tool-less constraints
|
|
161
|
+
- mainline receives all N responses; **ordering must not be relied on** (completion order is fine)
|
|
158
162
|
|
|
159
|
-
|
|
163
|
+
For resumable `!?@self !tellaskSession <tellaskSession>` with `N > 1`, runtime MUST derive **distinct** session keys so
|
|
164
|
+
parallel sidelines do not share history (recommended: `<tellaskSession>.fbr-<i>`).
|
|
160
165
|
|
|
161
|
-
|
|
162
|
-
- Scope: applies only to `!?@self` FBR sideline dialogs
|
|
163
|
-
- The teammate’s normal `model_params` continue to apply to non-FBR runs
|
|
166
|
+
## 6. FBR-only model overrides: `fbr_model_params`
|
|
164
167
|
|
|
165
|
-
**
|
|
168
|
+
`fbr_model_params` overrides model params **only when driving FBR sideline dialogs**:
|
|
166
169
|
|
|
167
|
-
-
|
|
168
|
-
-
|
|
169
|
-
-
|
|
170
|
-
|
|
170
|
+
- Schema: identical to `model_params` (documented by `model_param_options` in `dominds/main/llm/defaults.yaml`)
|
|
171
|
+
- Scope: `!?@self` only
|
|
172
|
+
- Merge: recommended deep-merge on top of the member’s effective `model_params`
|
|
173
|
+
- `max_tokens` may be configured as top-level `max_tokens` or `general.max_tokens` (pick one; do not set both)
|
|
171
174
|
|
|
172
|
-
## Examples
|
|
175
|
+
## 7. Examples
|
|
173
176
|
|
|
174
|
-
###
|
|
177
|
+
### 7.1 Tellask body should be self-contained
|
|
175
178
|
|
|
176
|
-
Bad (
|
|
179
|
+
Bad (depends on external context/tools):
|
|
177
180
|
|
|
178
181
|
```text
|
|
179
182
|
!?@self
|
|
180
|
-
|
|
183
|
+
Find the bug and fix it.
|
|
181
184
|
```
|
|
182
185
|
|
|
183
|
-
Good (
|
|
186
|
+
Good (puts the actual context into the body):
|
|
184
187
|
|
|
185
188
|
```text
|
|
186
189
|
!?@self
|
|
187
|
-
You are doing FBR
|
|
190
|
+
You are doing tool-less FBR. Use ONLY the text below.
|
|
188
191
|
|
|
189
|
-
Goal:
|
|
192
|
+
Goal: identify the most likely root cause and propose 2–3 viable fixes.
|
|
190
193
|
|
|
191
|
-
Observed
|
|
194
|
+
Observed:
|
|
192
195
|
- Clicking “Run” sometimes freezes the UI for ~10s.
|
|
193
196
|
|
|
194
|
-
|
|
197
|
+
Constraint:
|
|
195
198
|
- We cannot change the backend protocol.
|
|
196
199
|
|
|
197
|
-
|
|
198
|
-
<paste
|
|
200
|
+
Evidence:
|
|
201
|
+
<paste relevant logs / code / stack trace here>
|
|
199
202
|
```
|
|
200
203
|
|
|
201
|
-
### `.minds/team.yaml`
|
|
204
|
+
### 7.2 `.minds/team.yaml`
|
|
202
205
|
|
|
203
206
|
```yaml
|
|
204
207
|
member_defaults:
|
|
205
|
-
# Spawn 3 tool-less FBR sideline dialogs per `!?@self` by default
|
|
206
|
-
# (the Chinese saying: “三个臭皮匠,顶个诸葛亮”).
|
|
208
|
+
# Spawn 3 tool-less FBR sideline dialogs per `!?@self` by default.
|
|
207
209
|
fbr-effort: 3
|
|
208
210
|
|
|
209
211
|
members:
|
|
210
212
|
ux:
|
|
211
|
-
# Spawn 5 independent
|
|
213
|
+
# Spawn 5 independent reasoning samples per `!?@self`.
|
|
212
214
|
fbr-effort: 5
|
|
213
215
|
|
|
214
|
-
# Make FBR
|
|
216
|
+
# Make FBR more exploratory without changing mainline behavior.
|
|
215
217
|
fbr_model_params:
|
|
216
218
|
codex:
|
|
217
219
|
temperature: 0.9
|
|
@@ -220,17 +222,16 @@ members:
|
|
|
220
222
|
max_tokens: 1200
|
|
221
223
|
```
|
|
222
224
|
|
|
223
|
-
##
|
|
225
|
+
## 8. Relationship to general sideline dialogs
|
|
224
226
|
|
|
225
|
-
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
- If you need a tool-capable “fresh subdialog” for the same persona, use an explicit teammate identity that is granted
|
|
229
|
-
the needed toolsets, rather than `@self`.
|
|
227
|
+
- `!?@self` is a special case: tool-less, body-first, tellask-restricted, optionally fanned out via `fbr-effort`.
|
|
228
|
+
- General `!?@<teammate>` sidelines remain fully capable (tools/toolsets as configured).
|
|
229
|
+
- If you need “same persona + tools” in a sideline, do not use `@self`; use an explicit teammate identity.
|
|
230
230
|
|
|
231
|
-
## Acceptance
|
|
231
|
+
## 9. Acceptance checklist
|
|
232
232
|
|
|
233
|
-
- `!?@self`
|
|
234
|
-
-
|
|
235
|
-
-
|
|
236
|
-
- `
|
|
233
|
+
- `!?@self` triggers tool-less FBR; the LLM request is technically “zero tools”.
|
|
234
|
+
- The system prompt body contains no tool instructions; tool-related wording comes only from the separate fixed notice.
|
|
235
|
+
- FBR sidelines cannot issue teammate Tellasks; only `!?@tellasker` is allowed when necessary.
|
|
236
|
+
- `fbr-effort` defaults to `3`, accepts `0..100`, rejects invalid values, and fails loudly when disabled.
|
|
237
|
+
- `fbr_model_params` applies only to FBR and follows the same schema/merge intent as `model_params`.
|