dominds 1.2.5 → 1.2.7
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/agent-priming.js +2051 -0
- package/dist/apps/app-lock-file.js +228 -0
- package/dist/apps/assigned-port.js +124 -0
- package/dist/apps/enabled-apps.js +472 -7
- package/dist/apps/manifest.js +37 -0
- package/dist/apps/override-paths.js +19 -6
- package/dist/apps/problems.js +43 -0
- package/dist/apps/resolution-file.js +370 -0
- package/dist/apps/runtime.js +5 -17
- package/dist/apps/teammates.js +102 -1
- package/dist/cli/disable.js +10 -6
- package/dist/cli/enable.js +21 -19
- package/dist/cli/install.js +40 -18
- package/dist/cli/uninstall.js +6 -6
- package/dist/cli/update.js +38 -13
- package/dist/dialog.js +5 -0
- package/dist/docs/app-constitution.md +85 -18
- package/dist/docs/app-constitution.zh.md +86 -21
- package/dist/docs/dialog-system.md +1 -1
- package/dist/docs/dialog-system.zh.md +1 -1
- package/dist/docs/dominds-agent-priming.md +218 -0
- package/dist/docs/dominds-agent-priming.zh.md +196 -0
- package/dist/docs/drive-logic-context-refactor-plan.zh.md +338 -0
- package/dist/docs/keep-going.md +176 -0
- 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/team-mgmt-toolset.md +482 -0
- package/dist/docs/team-mgmt-toolset.zh.md +426 -0
- package/dist/llm/defaults.yaml +1 -1
- package/dist/llm/driver.js +4093 -0
- package/dist/llm/kernel-driver/drive.js +5 -2
- package/dist/llm/kernel-driver/flow.js +3 -0
- package/dist/minds/promptdocs.js +263 -0
- package/dist/problems.js +67 -16
- package/dist/server/api-routes.js +333 -0
- package/dist/server/prompts-routes.js +545 -0
- package/dist/server/server-core.js +4 -0
- package/dist/server/websocket-handler.js +17 -0
- package/dist/shared/team-mgmt-manual.js +120 -0
- package/dist/shared/types/prompts.js +2 -0
- package/dist/shared/types/tellask.js +8 -0
- package/dist/showing-by-doing.js +1091 -0
- package/dist/snippets/README.en.md +3 -0
- package/dist/snippets/README.md +4 -0
- package/dist/static/assets/{_basePickBy-CF9r08iy.js → _basePickBy-BMCtwrV7.js} +3 -3
- package/dist/static/assets/{_basePickBy-CF9r08iy.js.map → _basePickBy-BMCtwrV7.js.map} +1 -1
- package/dist/static/assets/{_baseUniq-CxKv0cd4.js → _baseUniq-BuyCgJiA.js} +2 -2
- package/dist/static/assets/{_baseUniq-CxKv0cd4.js.map → _baseUniq-BuyCgJiA.js.map} +1 -1
- package/dist/static/assets/{arc-C9JyvnlB.js → arc-BDuN8lwA.js} +2 -2
- package/dist/static/assets/{arc-C9JyvnlB.js.map → arc-BDuN8lwA.js.map} +1 -1
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-CpcUgjHf.js → architectureDiagram-VXUJARFQ-C-ekqGAD.js} +7 -7
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-CpcUgjHf.js.map → architectureDiagram-VXUJARFQ-C-ekqGAD.js.map} +1 -1
- package/dist/static/assets/{blockDiagram-VD42YOAC-BA9vtmm7.js → blockDiagram-VD42YOAC-CgQiNuuQ.js} +7 -7
- package/dist/static/assets/{blockDiagram-VD42YOAC-BA9vtmm7.js.map → blockDiagram-VD42YOAC-CgQiNuuQ.js.map} +1 -1
- package/dist/static/assets/{c4Diagram-YG6GDRKO-D49MGNdF.js → c4Diagram-YG6GDRKO-DONC39q-.js} +3 -3
- package/dist/static/assets/{c4Diagram-YG6GDRKO-D49MGNdF.js.map → c4Diagram-YG6GDRKO-DONC39q-.js.map} +1 -1
- package/dist/static/assets/{channel-B4KzL0Kg.js → channel-CJTFwXIG.js} +2 -2
- package/dist/static/assets/{channel-B4KzL0Kg.js.map → channel-CJTFwXIG.js.map} +1 -1
- package/dist/static/assets/{chunk-4BX2VUAB-0F-1ayl0.js → chunk-4BX2VUAB-NaIy4uLJ.js} +2 -2
- package/dist/static/assets/{chunk-4BX2VUAB-0F-1ayl0.js.map → chunk-4BX2VUAB-NaIy4uLJ.js.map} +1 -1
- package/dist/static/assets/{chunk-55IACEB6-Dnl2HDTZ.js → chunk-55IACEB6-JUKI_Ayx.js} +2 -2
- package/dist/static/assets/{chunk-55IACEB6-Dnl2HDTZ.js.map → chunk-55IACEB6-JUKI_Ayx.js.map} +1 -1
- package/dist/static/assets/{chunk-B4BG7PRW-Bhx5RbkQ.js → chunk-B4BG7PRW-dIswFJDn.js} +5 -5
- package/dist/static/assets/{chunk-B4BG7PRW-Bhx5RbkQ.js.map → chunk-B4BG7PRW-dIswFJDn.js.map} +1 -1
- package/dist/static/assets/{chunk-DI55MBZ5-EYd1wL3E.js → chunk-DI55MBZ5-DU2b_N30.js} +4 -4
- package/dist/static/assets/{chunk-DI55MBZ5-EYd1wL3E.js.map → chunk-DI55MBZ5-DU2b_N30.js.map} +1 -1
- package/dist/static/assets/{chunk-FMBD7UC4-DAjkhhUU.js → chunk-FMBD7UC4-BgExcScw.js} +2 -2
- package/dist/static/assets/{chunk-FMBD7UC4-DAjkhhUU.js.map → chunk-FMBD7UC4-BgExcScw.js.map} +1 -1
- package/dist/static/assets/{chunk-QN33PNHL-CK6TY7IE.js → chunk-QN33PNHL-bitxyqh7.js} +2 -2
- package/dist/static/assets/{chunk-QN33PNHL-CK6TY7IE.js.map → chunk-QN33PNHL-bitxyqh7.js.map} +1 -1
- package/dist/static/assets/{chunk-QZHKN3VN-CketngiE.js → chunk-QZHKN3VN-Cor8u7DT.js} +2 -2
- package/dist/static/assets/{chunk-QZHKN3VN-CketngiE.js.map → chunk-QZHKN3VN-Cor8u7DT.js.map} +1 -1
- package/dist/static/assets/{chunk-TZMSLE5B-Bcuvqo45.js → chunk-TZMSLE5B-Aceoxav_.js} +2 -2
- package/dist/static/assets/{chunk-TZMSLE5B-Bcuvqo45.js.map → chunk-TZMSLE5B-Aceoxav_.js.map} +1 -1
- package/dist/static/assets/{classDiagram-2ON5EDUG-CaP4T3r4.js → classDiagram-2ON5EDUG-D1Q6a8Hg.js} +6 -6
- package/dist/static/assets/{classDiagram-2ON5EDUG-CaP4T3r4.js.map → classDiagram-2ON5EDUG-D1Q6a8Hg.js.map} +1 -1
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-CaP4T3r4.js → classDiagram-v2-WZHVMYZB-D1Q6a8Hg.js} +6 -6
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-CaP4T3r4.js.map → classDiagram-v2-WZHVMYZB-D1Q6a8Hg.js.map} +1 -1
- package/dist/static/assets/{clone-C-JULvnG.js → clone-MlWbv1V0.js} +2 -2
- package/dist/static/assets/{clone-C-JULvnG.js.map → clone-MlWbv1V0.js.map} +1 -1
- package/dist/static/assets/{cose-bilkent-S5V4N54A-vXCmi_eC.js → cose-bilkent-S5V4N54A-DWPCXSrn.js} +2 -2
- package/dist/static/assets/{cose-bilkent-S5V4N54A-vXCmi_eC.js.map → cose-bilkent-S5V4N54A-DWPCXSrn.js.map} +1 -1
- package/dist/static/assets/{dagre-6UL2VRFP-bhGzX6kO.js → dagre-6UL2VRFP-C8ptQ9V3.js} +7 -7
- package/dist/static/assets/{dagre-6UL2VRFP-bhGzX6kO.js.map → dagre-6UL2VRFP-C8ptQ9V3.js.map} +1 -1
- package/dist/static/assets/{diagram-PSM6KHXK-BUKfmfGk.js → diagram-PSM6KHXK-Bgf1FqkE.js} +8 -8
- package/dist/static/assets/{diagram-PSM6KHXK-BUKfmfGk.js.map → diagram-PSM6KHXK-Bgf1FqkE.js.map} +1 -1
- package/dist/static/assets/{diagram-QEK2KX5R-DYlq3uFq.js → diagram-QEK2KX5R-BZ5xzofU.js} +7 -7
- package/dist/static/assets/{diagram-QEK2KX5R-DYlq3uFq.js.map → diagram-QEK2KX5R-BZ5xzofU.js.map} +1 -1
- package/dist/static/assets/{diagram-S2PKOQOG-CjxkLHWG.js → diagram-S2PKOQOG-Dwp47T9I.js} +7 -7
- package/dist/static/assets/{diagram-S2PKOQOG-CjxkLHWG.js.map → diagram-S2PKOQOG-Dwp47T9I.js.map} +1 -1
- package/dist/static/assets/{erDiagram-Q2GNP2WA-S3hR85On.js → erDiagram-Q2GNP2WA-Cx4weIHl.js} +5 -5
- package/dist/static/assets/{erDiagram-Q2GNP2WA-S3hR85On.js.map → erDiagram-Q2GNP2WA-Cx4weIHl.js.map} +1 -1
- package/dist/static/assets/{flowDiagram-NV44I4VS-aBmNMuQ0.js → flowDiagram-NV44I4VS-vNUuIeRk.js} +6 -6
- package/dist/static/assets/{flowDiagram-NV44I4VS-aBmNMuQ0.js.map → flowDiagram-NV44I4VS-vNUuIeRk.js.map} +1 -1
- package/dist/static/assets/{ganttDiagram-JELNMOA3-DJxXaiW1.js → ganttDiagram-JELNMOA3-BEfozJAr.js} +3 -3
- package/dist/static/assets/{ganttDiagram-JELNMOA3-DJxXaiW1.js.map → ganttDiagram-JELNMOA3-BEfozJAr.js.map} +1 -1
- package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-DEOBCM0G.js → gitGraphDiagram-V2S2FVAM-eHxwc3d9.js} +8 -8
- package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-DEOBCM0G.js.map → gitGraphDiagram-V2S2FVAM-eHxwc3d9.js.map} +1 -1
- package/dist/static/assets/{graph-DwrKSIE7.js → graph-C6a6uAok.js} +3 -3
- package/dist/static/assets/{graph-DwrKSIE7.js.map → graph-C6a6uAok.js.map} +1 -1
- package/dist/static/assets/{index-HWTRvE2k.js → index-D3TQbAKh.js} +383 -59
- package/dist/static/assets/index-D3TQbAKh.js.map +1 -0
- package/dist/static/assets/{infoDiagram-HS3SLOUP-BH9kVuYd.js → infoDiagram-HS3SLOUP-CX0NiId3.js} +6 -6
- package/dist/static/assets/{infoDiagram-HS3SLOUP-BH9kVuYd.js.map → infoDiagram-HS3SLOUP-CX0NiId3.js.map} +1 -1
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-Dap7AcjR.js → journeyDiagram-XKPGCS4Q-C1IepPZ-.js} +5 -5
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-Dap7AcjR.js.map → journeyDiagram-XKPGCS4Q-C1IepPZ-.js.map} +1 -1
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-4NOl8MEj.js → kanban-definition-3W4ZIXB7-uMNX4Z1W.js} +3 -3
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-4NOl8MEj.js.map → kanban-definition-3W4ZIXB7-uMNX4Z1W.js.map} +1 -1
- package/dist/static/assets/{layout-D6uIxu1E.js → layout-CpE3kk5z.js} +5 -5
- package/dist/static/assets/{layout-D6uIxu1E.js.map → layout-CpE3kk5z.js.map} +1 -1
- package/dist/static/assets/{linear-CvBOGQA2.js → linear-DV8laXr9.js} +2 -2
- package/dist/static/assets/{linear-CvBOGQA2.js.map → linear-DV8laXr9.js.map} +1 -1
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-ugsrLNY5.js → mindmap-definition-VGOIOE7T-CKjgVM9S.js} +4 -4
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-ugsrLNY5.js.map → mindmap-definition-VGOIOE7T-CKjgVM9S.js.map} +1 -1
- package/dist/static/assets/{pieDiagram-ADFJNKIX-CdVZjM8g.js → pieDiagram-ADFJNKIX-BBonlNyT.js} +8 -8
- package/dist/static/assets/{pieDiagram-ADFJNKIX-CdVZjM8g.js.map → pieDiagram-ADFJNKIX-BBonlNyT.js.map} +1 -1
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-A6m5lZKd.js → quadrantDiagram-AYHSOK5B-BTI8HbBu.js} +3 -3
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-A6m5lZKd.js.map → quadrantDiagram-AYHSOK5B-BTI8HbBu.js.map} +1 -1
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-Cac3zSJH.js → requirementDiagram-UZGBJVZJ-ZtSr9Q5R.js} +4 -4
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-Cac3zSJH.js.map → requirementDiagram-UZGBJVZJ-ZtSr9Q5R.js.map} +1 -1
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-DXDdUUl1.js → sankeyDiagram-TZEHDZUN-DibLVGzg.js} +2 -2
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-DXDdUUl1.js.map → sankeyDiagram-TZEHDZUN-DibLVGzg.js.map} +1 -1
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-Domsjl5Y.js → sequenceDiagram-WL72ISMW-qXatfzVt.js} +4 -4
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-Domsjl5Y.js.map → sequenceDiagram-WL72ISMW-qXatfzVt.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-Bu0lRQK1.js → stateDiagram-FKZM4ZOC-7fgxCQHo.js} +9 -9
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-Bu0lRQK1.js.map → stateDiagram-FKZM4ZOC-7fgxCQHo.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-D0K-n3ic.js → stateDiagram-v2-4FDKWEC3-DcWlOAnF.js} +5 -5
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-D0K-n3ic.js.map → stateDiagram-v2-4FDKWEC3-DcWlOAnF.js.map} +1 -1
- package/dist/static/assets/{timeline-definition-IT6M3QCI-BGvpddwR.js → timeline-definition-IT6M3QCI-iX2MRdpY.js} +3 -3
- package/dist/static/assets/{timeline-definition-IT6M3QCI-BGvpddwR.js.map → timeline-definition-IT6M3QCI-iX2MRdpY.js.map} +1 -1
- package/dist/static/assets/{treemap-GDKQZRPO-BoOzOm2j.js → treemap-GDKQZRPO-AVRnyXu1.js} +5 -5
- package/dist/static/assets/{treemap-GDKQZRPO-BoOzOm2j.js.map → treemap-GDKQZRPO-AVRnyXu1.js.map} +1 -1
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-C_h3_ICR.js → xychartDiagram-PRI3JC2R-DVYEo5aJ.js} +3 -3
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-C_h3_ICR.js.map → xychartDiagram-PRI3JC2R-DVYEo5aJ.js.map} +1 -1
- package/dist/static/index.html +1 -1
- package/dist/team.js +52 -48
- package/dist/tellask.js +439 -0
- package/dist/tools/context-health.js +177 -0
- package/dist/tools/diag.js +583 -0
- package/dist/tools/fs.js +194 -68
- package/dist/tools/prompts/memory/en/principles.md +13 -5
- package/dist/tools/prompts/memory/en/tools.md +11 -36
- package/dist/tools/prompts/memory/zh/principles.md +18 -8
- package/dist/tools/prompts/memory/zh/tools.md +11 -36
- package/dist/tools/team-mgmt.js +3487 -0
- package/dist/utils/task-doc.js +236 -0
- package/package.json +1 -1
- package/dist/static/assets/index-HWTRvE2k.js.map +0 -1
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# Dominds Agent Priming: Guide the Agent to Show It to Itself
|
|
2
|
+
|
|
3
|
+
Chinese version: [中文版](./dominds-agent-priming.zh.md)
|
|
4
|
+
|
|
5
|
+
## Summary
|
|
6
|
+
|
|
7
|
+
Dominds has a real, runtime-enforced Tellask mechanism (`tellask* function call`) and a real, runtime-enforced Fresh Boots Reasoning
|
|
8
|
+
(FBR) mechanism (`freshBootsReasoning`). Even if system prompts explain these mechanisms in detail, most foundation models were not
|
|
9
|
+
trained in a world where “asking a teammate to run a shell command” is actually possible, so they often treat such text
|
|
10
|
+
as aspirational or hypothetical.
|
|
11
|
+
|
|
12
|
+
**Agent Priming** is a tiny, highly realistic “first impression” procedure executed at dialog creation time. It runs a
|
|
13
|
+
short, real Tellask + real return + real FBR + real distillation so the model gains _felt-sense_ that:
|
|
14
|
+
|
|
15
|
+
- teammate Tellasks are real and will be executed
|
|
16
|
+
- tool outputs are real and will be returned and persisted
|
|
17
|
+
- `freshBootsReasoning` FBR is real and will report back
|
|
18
|
+
- distillation is expected (extract the best, dedupe, reconcile), not “repeat each draft”
|
|
19
|
+
|
|
20
|
+
More precisely: it **guides the agent to show it to itself** — letting it personally walk through
|
|
21
|
+
(Tellask → return → FBR → distillation), moving from “I’ve heard this exists” to “I just used it”.
|
|
22
|
+
|
|
23
|
+
This is structurally related to the psychology notion of a **priming effect**: an early, concrete stimulus can
|
|
24
|
+
significantly shape subsequent expectations and behaviors. In Dominds we anchor this “priming” in **verifiable runtime
|
|
25
|
+
interactions**, instead of relying on longer, declarative system-prompt text.
|
|
26
|
+
|
|
27
|
+
As a consequence, we can **dramatically simplify system prompts**: keep only short, accurate statements of the
|
|
28
|
+
Tellask/FBR contracts, and rely on a real priming run to establish “this works here”.
|
|
29
|
+
|
|
30
|
+
Related docs:
|
|
31
|
+
|
|
32
|
+
- Tellask runtime: [`dialog-system.md`](./dialog-system.md)
|
|
33
|
+
- Terminology (Mainline/Sideline): [`dominds-terminology.md`](./dominds-terminology.md)
|
|
34
|
+
- FBR (`freshBootsReasoning`): [`fbr.md`](./fbr.md)
|
|
35
|
+
- Work language vs UI language: [`i18n.md`](./i18n.md)
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Goals
|
|
40
|
+
|
|
41
|
+
- Establish immediate trust that Tellask/return/persistence are real.
|
|
42
|
+
- Run a real `freshBootsReasoning` FBR loop at dialog creation.
|
|
43
|
+
- Build muscle memory for the timing contract: initiate FBR, wait for feedback, then synthesize/decide.
|
|
44
|
+
- Make distillation itself part of the “felt” experience (dedupe/reconcile/extract-the-best).
|
|
45
|
+
- Keep the procedure safe, small, and deterministic (default command: `uname -a`).
|
|
46
|
+
- Persist and display the interaction so it is credible from multiple angles (backend record + frontend transcript).
|
|
47
|
+
|
|
48
|
+
## Non-goals
|
|
49
|
+
|
|
50
|
+
- Running arbitrary user-provided commands as part of dialog creation.
|
|
51
|
+
- Collecting sensitive system information (beyond minimal OS/kernel identification).
|
|
52
|
+
- Replacing proper documentation: this is an experiential supplement, not the main spec.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Definitions (user-facing)
|
|
57
|
+
|
|
58
|
+
- **Mainline dialog**: the primary thread where the user and the main agent interact.
|
|
59
|
+
- **Sideline dialog**: a temporary work thread created by Tellask / FBR, reporting results back to the mainline.
|
|
60
|
+
- **Tellask**: a structured request (`tellask({ targetAgentId: "<memberId>", sessionSlug: "<slug>", tellaskContent: "..." })`) from a tellasker to a tellaskee.
|
|
61
|
+
- **Shell specialist**: a teammate designated to run shell commands safely (configured via `shell_specialists`).
|
|
62
|
+
- **FBR**: Fresh Boots Reasoning, implemented as `freshBootsReasoning` (a tool-less sideline dialog). See [`fbr.md`](./fbr.md).
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Runtime flow (at dialog creation)
|
|
67
|
+
|
|
68
|
+
Agent Priming runs **before** the first user message is processed, unless the user opts out.
|
|
69
|
+
|
|
70
|
+
### 1) Choose the shell execution path
|
|
71
|
+
|
|
72
|
+
1. If the team config includes at least one `shell_specialists` member, pick one deterministically (e.g. the first).
|
|
73
|
+
2. Otherwise, let the **Dominds runtime** execute the baseline command directly (not via agent tools).
|
|
74
|
+
|
|
75
|
+
Baseline command:
|
|
76
|
+
|
|
77
|
+
- `uname -a`
|
|
78
|
+
|
|
79
|
+
If `uname -a` fails (e.g. non-POSIX host), the runtime may fall back to a platform-appropriate equivalent, but the
|
|
80
|
+
default “muscle memory” path is intentionally `uname -a` because it is common, low-risk, and quick.
|
|
81
|
+
|
|
82
|
+
### 2) Real teammate Tellask: ask for `uname -a`
|
|
83
|
+
|
|
84
|
+
If a shell specialist member exists, the main agent (tellasker) issues **a real Tellask** to the shell specialist member
|
|
85
|
+
(tellaskee), in the server-wide work language.
|
|
86
|
+
|
|
87
|
+
The Tellask body should be short and operational:
|
|
88
|
+
|
|
89
|
+
- run exactly `uname -a`
|
|
90
|
+
- return raw output verbatim
|
|
91
|
+
- if `uname` fails: include error + one safe alternative command
|
|
92
|
+
|
|
93
|
+
### 3) Real FBR: reflect on what the environment implies
|
|
94
|
+
|
|
95
|
+
After obtaining the environment snapshot, the main agent issues a real `freshBootsReasoning` Tellask to trigger FBR.
|
|
96
|
+
|
|
97
|
+
The FBR body should include:
|
|
98
|
+
|
|
99
|
+
- the exact `uname -a` output (explicitly name the command; it may change in the future)
|
|
100
|
+
- the tool constraint (FBR has no tools; mainline tool availability is separate)
|
|
101
|
+
- the question: “What should I be careful about in this environment? Which CLI tools should I prioritize, and why?”
|
|
102
|
+
|
|
103
|
+
Optional parallel drafts:
|
|
104
|
+
|
|
105
|
+
- If the team member config enables `fbr_effort` (default `3`), the runtime creates multiple `freshBootsReasoning` FBR sideline
|
|
106
|
+
dialogs concurrently so the agent produces multiple independent “fresh boots” drafts for the mainline dialog to
|
|
107
|
+
distill.
|
|
108
|
+
- These drafts have **no stable identity mapping**, and there is no meaningful ordering requirement; the mainline dialog
|
|
109
|
+
should treat them as anonymous drafts rather than fixed personas.
|
|
110
|
+
- If `fbr_effort` is `0`, skip FBR.
|
|
111
|
+
- If `fbr_effort` is greater than `100`, the runtime errors out and stops priming (invalid config).
|
|
112
|
+
|
|
113
|
+
Phase boundary (critical):
|
|
114
|
+
|
|
115
|
+
- `freshBootsReasoning` is the **initiation action**, not completed decision-making.
|
|
116
|
+
- Mainline must enter a wait phase until feedback from that FBR run returns.
|
|
117
|
+
- If `fbr_effort = N`, mainline must wait for all N drafts before distillation; do not finalize from partial drafts.
|
|
118
|
+
|
|
119
|
+
### 4) Distill into an “Agent Priming” note
|
|
120
|
+
|
|
121
|
+
After confirming feedback from that FBR run has been collected, the main agent writes a short, user-visible **Agent Priming** note via a **normal generation** in the mainline
|
|
122
|
+
dialog. It should be explicitly distilled (dedupe/reconcile/extract-the-best) rather than repeating each draft.
|
|
123
|
+
|
|
124
|
+
Implementation constraint (matches runtime behavior):
|
|
125
|
+
|
|
126
|
+
- Do not introduce a separate system-prompt assembly path for distillation.
|
|
127
|
+
- The runtime may use a non-persisted **internal prompt** to anchor “this generation is distillation”.
|
|
128
|
+
- The runtime may also include the shell snapshot and FBR drafts as “evidence” inside that internal prompt (for this
|
|
129
|
+
drive only, not persisted), so distillation does not depend on any queue timing/concurrency details.
|
|
130
|
+
- During the Agent Priming lifecycle (from prelude start until the priming note is produced), runtime must suppress
|
|
131
|
+
diligence-push injections; restore normal diligence behavior only after priming completes.
|
|
132
|
+
|
|
133
|
+
Implementation note (internal prompt):
|
|
134
|
+
|
|
135
|
+
- The runtime may provide the driver with a non-persisted, non-rendered **internal prompt** (used only in the LLM
|
|
136
|
+
context for this drive) to explicitly anchor the generation as “distillation”.
|
|
137
|
+
- The internal prompt must not be written into dialog history or persisted storage (to avoid transcript pollution
|
|
138
|
+
across courses).
|
|
139
|
+
- The internal prompt is a per-drive task directive; it must not replace the system prompt or introduce a separate
|
|
140
|
+
system-prompt assembly path.
|
|
141
|
+
|
|
142
|
+
Implementation note (avoid Taskdoc bias):
|
|
143
|
+
|
|
144
|
+
- Distillation must be Taskdoc-agnostic: the same Agent Priming prefix can be reused across dialogs with different
|
|
145
|
+
Taskdocs.
|
|
146
|
+
- Therefore, the runtime may choose to **skip injecting Taskdoc** for the one distillation drive, so Taskdoc progress
|
|
147
|
+
or implementation details do not bias environment conclusions.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Persistence, caching, and reuse (in-process only)
|
|
152
|
+
|
|
153
|
+
### 1) Persist as real dialog records (backend + frontend)
|
|
154
|
+
|
|
155
|
+
All priming steps must be persisted as standard dialog artifacts (messages + events) and visible in the WebUI.
|
|
156
|
+
|
|
157
|
+
### 2) Process-wide cache (per agent)
|
|
158
|
+
|
|
159
|
+
To avoid repeating `uname -a` + FBR + distillation on every new dialog, the backend process may maintain an in-process cache
|
|
160
|
+
(lost on restart) keyed by the mainline agent id.
|
|
161
|
+
|
|
162
|
+
Reuse policy:
|
|
163
|
+
|
|
164
|
+
- If a valid cache entry exists, a new dialog may reuse the cached transcript and Agent Priming note.
|
|
165
|
+
- Reused entries should still be visible in the new dialog transcript, labeled as “reused from cache”.
|
|
166
|
+
|
|
167
|
+
### 2.5) Mainline choice must propagate to sideline dialogs
|
|
168
|
+
|
|
169
|
+
The priming choice selected at mainline dialog creation must propagate to all sideline dialogs under that root dialog.
|
|
170
|
+
|
|
171
|
+
Propagation semantics:
|
|
172
|
+
|
|
173
|
+
- Mainline chooses **Skip** (`skip`): all sideline dialogs must also **Skip** (`skip`).
|
|
174
|
+
- Mainline chooses **Do Again** (`do`) while cache exists: all sideline dialogs must also run fresh (`do`).
|
|
175
|
+
- Mainline chooses **Show it now** (`do`) when cache does not exist, or chooses **Reuse** (`reuse`):
|
|
176
|
+
sideline dialogs use **reuse-or-do** (`reuse`): reuse cache when available for that sideline agent;
|
|
177
|
+
otherwise run a fresh priming.
|
|
178
|
+
|
|
179
|
+
Notes:
|
|
180
|
+
|
|
181
|
+
- Different sideline agents may have different cache states; `reuse` is evaluated per sideline agent.
|
|
182
|
+
- Priming must not run invisibly in the background; it must be persisted and user-visible as standard dialog artifacts.
|
|
183
|
+
|
|
184
|
+
### 3) Carry across `clear_mind`
|
|
185
|
+
|
|
186
|
+
After each `clear_mind` (entering the next course), do not rely on reminders.
|
|
187
|
+
|
|
188
|
+
Instead, inject a small, stable **course prefix** into model context at the start of each course: a condensed transcript
|
|
189
|
+
(shell snapshot + FBR highlights + Priming note).
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## UX requirements (WebUI)
|
|
194
|
+
|
|
195
|
+
### Display
|
|
196
|
+
|
|
197
|
+
- Render Agent Priming as a realistic transcript the user can inspect.
|
|
198
|
+
- Prefer a collapsible top section with clear labels:
|
|
199
|
+
- “Teammate Tellask (shell)”
|
|
200
|
+
- “FBR (`freshBootsReasoning`)"
|
|
201
|
+
- “Agent Priming”
|
|
202
|
+
|
|
203
|
+
### Opt-out
|
|
204
|
+
|
|
205
|
+
Dialog creation should provide an explicit opt-out to skip priming.
|
|
206
|
+
|
|
207
|
+
Additional UX constraints:
|
|
208
|
+
|
|
209
|
+
- If the dialog owner is a hidden shadow member, the default priming preference should be **Skip**.
|
|
210
|
+
- Shadow-member priming preferences should be stored separately from visible-member preferences (they should not affect each other).
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Safety notes
|
|
215
|
+
|
|
216
|
+
- Default to a single, low-risk command (`uname -a`).
|
|
217
|
+
- Do not run anything that modifies the filesystem or network as part of priming.
|
|
218
|
+
- Treat the priming transcript as user-visible by default; avoid including secrets or personally identifying details.
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
# Dominds 智能体启动(Priming):引导祂做给自己看
|
|
2
|
+
|
|
3
|
+
英文版:[English](./dominds-agent-priming.md)
|
|
4
|
+
|
|
5
|
+
## 摘要
|
|
6
|
+
|
|
7
|
+
Dominds 的诉请(Tellask,`tellask* function call`)与扪心自问(FBR,`freshBootsReasoning`)并不是“写在系统提示里的约定”,而是**后端真实可驱动、可执行、可回传、可持久化**的机制。
|
|
8
|
+
|
|
9
|
+
问题在于:即使系统提示把这些机制写得再细,大多数基础模型也并未在“真的可以随时拉一个队友去跑 shell 命令并把结果带回来”的世界里被训练过,因此容易把提示当成“说说而已 / 仅供参考”。这会直接削弱诉请与 FBR 的可用性。
|
|
10
|
+
|
|
11
|
+
因此引入 **智能体启动(Agent Priming)**:在一个对话创建之初,运行一段极短、极拟真的“真实诉请 + 真实回传 + 真实 FBR + 真实综合提炼”,让智能体产生明确的体感。
|
|
12
|
+
|
|
13
|
+
更贴切地说,这是在**引导祂做给自己看**:让智能体亲身走一遍(诉请→回传→FBR→综合提炼),从“听说有这个机制”变成“我刚刚用过它”。
|
|
14
|
+
|
|
15
|
+
这与心理学的**启动效应(priming effect)**在“机制形态”上相似:一次早期、具体、可感的刺激,会显著影响后续的期待与行为模式。在 Dominds 里,我们把这种“启动”落在**可验证的真实交互**上,而不是落在更长更复杂的宣告式系统提示上。
|
|
16
|
+
|
|
17
|
+
体感建立后,系统提示可以**大幅简化**:只保留“短而准确”的契约说明即可,把“这在本环境里真实可用”的可信度交给一次真实启动来完成。
|
|
18
|
+
|
|
19
|
+
相关文档:
|
|
20
|
+
|
|
21
|
+
- 诉请机制与对话系统:[`dialog-system.zh.md`](./dialog-system.zh.md)
|
|
22
|
+
- 术语约定(主线/支线;诉请方/应答方):[`dominds-terminology.md`](./dominds-terminology.md)
|
|
23
|
+
- FBR(`freshBootsReasoning`):[`fbr.zh.md`](./fbr.zh.md)
|
|
24
|
+
- 工作语言 vs UI 语言:[`i18n.zh.md`](./i18n.zh.md)
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 目标
|
|
29
|
+
|
|
30
|
+
- 在对话一开始就建立“诉请/回传/持久化都是真的”的信任。
|
|
31
|
+
- 在对话一开始就跑通一次 `freshBootsReasoning` 的 FBR 回路。
|
|
32
|
+
- 把“发起 FBR 后先等待回贴,再做综合决策”的时序固化为肌肉记忆。
|
|
33
|
+
- 把多份 FBR 草稿做一次**综合提炼**,把“取精华、去糟粕”的动作也变成体感的一部分。
|
|
34
|
+
- 过程足够小、可控、低风险(默认只执行 `uname -a`)。
|
|
35
|
+
- 记录从多角度都高度拟真:后端存档 + 前端可见的对话转录。
|
|
36
|
+
|
|
37
|
+
## 非目标
|
|
38
|
+
|
|
39
|
+
- 不在创建对话时执行任意用户输入的命令。
|
|
40
|
+
- 不收集敏感信息(默认只采集最小的 OS/Kernel 识别信息)。
|
|
41
|
+
- 不替代系统提示/设计文档:这是“启动与体感补强”,不是完整规范的主载体。
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 概念(用户视角)
|
|
46
|
+
|
|
47
|
+
- **主线对话**:用户与主要智能体交互的那条线。
|
|
48
|
+
- **支线对话**:由诉请 / FBR 触发的临时工作线,产出结果回传主线。
|
|
49
|
+
- **诉请(Tellask)**:以 `tellask({ targetAgentId: "<memberId>", sessionSlug: "<slug>", tellaskContent: "..." })` 向队友/对话发起的结构化请求。
|
|
50
|
+
- **Shell 专员(shell specialist)**:被允许执行 shell 命令并回传结果的队友(由 `shell_specialists` 配置指定)。
|
|
51
|
+
- **FBR(扪心自问)**:以 `freshBootsReasoning` 触发的“无工具支线推理”,产出报告回传主线。
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 运行流程(对话创建时)
|
|
56
|
+
|
|
57
|
+
智能体启动发生在**第一条用户消息被处理之前**,除非用户在创建对话时明确选择跳过。
|
|
58
|
+
|
|
59
|
+
### 1)选择执行路径
|
|
60
|
+
|
|
61
|
+
1. 如果 team 配置里存在 `shell_specialists`,选择一个 shell 专员(建议确定性选择:列表第一个)。
|
|
62
|
+
2. 否则,由 **Dominds 运行时**直接执行基线命令(不通过智能体工具)。
|
|
63
|
+
|
|
64
|
+
基线命令(默认):
|
|
65
|
+
|
|
66
|
+
- `uname -a`
|
|
67
|
+
|
|
68
|
+
`uname -a` 失败时(例如非 POSIX 环境),可以改用平台等价命令;但默认肌肉记忆路径保留 `uname -a`,因为它低风险、快、且信息量刚好够用。
|
|
69
|
+
|
|
70
|
+
### 2)真实队友诉请:让 shell 专员执行 `uname -a`
|
|
71
|
+
|
|
72
|
+
若存在 shell 专员,则主线智能体(诉请方)以**工作语言**向 shell 专员(应答方)发起真实诉请,要求:
|
|
73
|
+
|
|
74
|
+
- 执行 `uname -a`(只执行这一条)
|
|
75
|
+
- 原样返回输出(不要改写/解释)
|
|
76
|
+
- 若命令不可用/失败:返回错误信息,并给出一个安全的替代命令
|
|
77
|
+
|
|
78
|
+
结果必须以正常对话转录的方式落盘并展示,至少清晰体现:
|
|
79
|
+
|
|
80
|
+
- 诉请的 headline + body
|
|
81
|
+
- shell 专员实际执行了命令
|
|
82
|
+
- 返回的原始输出
|
|
83
|
+
|
|
84
|
+
### 3)真实 FBR:基于环境信息做一次“扪心自问”
|
|
85
|
+
|
|
86
|
+
拿到环境快照后,主线智能体触发一次 `freshBootsReasoning` FBR,并在 FBR 的诉请正文里带上:
|
|
87
|
+
|
|
88
|
+
- 命令 `uname -a` 的完整输出(明确注明命令名,未来可能更换命令,不能靠猜)
|
|
89
|
+
- FBR 的工具约束(FBR 无工具;主线工具另论)
|
|
90
|
+
- 问题:在这个环境里要注意什么?优先用哪些命令行工具,为什么?
|
|
91
|
+
|
|
92
|
+
并发草稿(可选):
|
|
93
|
+
|
|
94
|
+
- 若团队成员配置启用了 `fbr_effort`(默认值为 `3`),运行时会并发创建多份 `freshBootsReasoning` FBR 支线对话,让“初心自我”从不同角度独立推理,形成多份草稿供主线对话综合提炼。
|
|
95
|
+
- 这些草稿之间**没有稳定身份映射**,也没有必须遵循的先后顺序;主线对话应当把它们当作“多份匿名草稿”,而不是“固定的三个角色”。
|
|
96
|
+
- 若 `fbr_effort` 为 `0`,则跳过 FBR。
|
|
97
|
+
- 若 `fbr_effort` 大于 `100`,运行时会报错并终止启动流程(配置错误)。
|
|
98
|
+
|
|
99
|
+
阶段边界(关键):
|
|
100
|
+
|
|
101
|
+
- `freshBootsReasoning` 只是**发起动作**,不是“已完成决策”。
|
|
102
|
+
- 主线对话必须先进入等待态,直到该次 FBR 的回贴返回。
|
|
103
|
+
- 若 `fbr_effort = N`,主线必须等待全部 N 条回贴后再进入综合提炼;不得基于部分草稿提前定稿。
|
|
104
|
+
|
|
105
|
+
### 4)综合提炼成“智能体启动(Priming)”笔记
|
|
106
|
+
|
|
107
|
+
在确认该次 FBR 回贴已收齐后,主线智能体以一次**正常生成**在主线对话里追加一条短笔记(Agent Priming),让关键信息显性化、可检索,并体现“综合提炼”(去重/消冲突/抽取最有用的要点)。
|
|
108
|
+
|
|
109
|
+
实现约束(与运行时一致):
|
|
110
|
+
|
|
111
|
+
- “综合提炼”阶段**不应**通过拼装/拼接一段新的 system prompt 或引入一条独立的 system-prompt 组装路径。
|
|
112
|
+
- 运行时可以使用一条**internal prompt** 来锚定“本次生成就是综合提炼”。internal prompt 必须不落盘、不展示。
|
|
113
|
+
- FBR 草稿与 shell 回传等“证据材料”可以通过 internal prompt 一并提供给模型(仅用于本次 drive 的上下文,不写入对话历史),从而避免依赖“支线回复注入队列”的时序与并发细节。
|
|
114
|
+
- Agent Priming 生命周期(从序幕开始到 priming 笔记产出完成)内,运行时必须禁止注入 diligence-push(鞭策)消息;待 priming 结束后再恢复常规机制。
|
|
115
|
+
|
|
116
|
+
实现补充(internal prompt):
|
|
117
|
+
|
|
118
|
+
- 运行时可以向 driver 提供一个**不落盘/不展示**的 internal prompt(仅用于本次 drive 的 LLM 上下文),用于把本次生成明确锚定为“综合提炼”。
|
|
119
|
+
- internal prompt 不得写入对话历史与持久化存储(避免污染转录与后续 course)。
|
|
120
|
+
- internal prompt 的语义等价于“本次生成要做的任务指令”,而不是替代系统提示或拼装新的 system prompt。
|
|
121
|
+
|
|
122
|
+
实现补充(避免 Taskdoc 浸染):
|
|
123
|
+
|
|
124
|
+
- “综合提炼”应当与具体差遣牒内容解耦:同一个智能体的 Agent Priming 前缀会被用于不同差遣牒的对话。
|
|
125
|
+
- 因此运行时在触发 distillation 的那一次 drive 中可以选择**不注入 Taskdoc**,避免 Taskdoc 的进度/实现细节影响“环境结论”的提炼。
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## 持久化、缓存与复用(仅进程内)
|
|
130
|
+
|
|
131
|
+
### 1)记录必须“像真的一样”
|
|
132
|
+
|
|
133
|
+
智能体启动的每一步都必须作为标准对话记录落盘(消息 + 事件),并在 WebUI 中可见:
|
|
134
|
+
|
|
135
|
+
- 可 debug(日志/存储都有迹可循)
|
|
136
|
+
- 可回放(对话历史导航时不丢信息)
|
|
137
|
+
|
|
138
|
+
### 2)按智能体维度进程内缓存
|
|
139
|
+
|
|
140
|
+
为避免每次新对话都重复跑 `uname -a` + FBR + 综合提炼,后端进程维护一个**进程内缓存**(重启失效),按主线智能体 id 做 key。
|
|
141
|
+
|
|
142
|
+
复用策略:
|
|
143
|
+
|
|
144
|
+
- 若命中缓存,新对话可直接复用首次的转录与“Agent Priming”笔记,不再重复执行。
|
|
145
|
+
- 复用的记录在新对话里仍应可见,并清楚标记“来自缓存复用”。
|
|
146
|
+
|
|
147
|
+
### 2.5)主线选择向支线继承(必须)
|
|
148
|
+
|
|
149
|
+
主线对话在创建时选择的 Priming 选项,必须传递给其所属所有支线对话(Sideline dialog)。
|
|
150
|
+
|
|
151
|
+
继承语义:
|
|
152
|
+
|
|
153
|
+
- 主线选“无感”(`skip`):所有支线都必须“无感”(`skip`)。
|
|
154
|
+
- 主线在“有缓存”前提下选“再做一次”(`do`):所有支线都必须“再做一次”(`do`)。
|
|
155
|
+
- 主线在“无缓存”前提下选“做给祂看”(`do`,首次体验语义)或选“复用缓存”(`reuse`):
|
|
156
|
+
支线统一按“可复用则复用,否则现做”(`reuse`)执行。
|
|
157
|
+
|
|
158
|
+
说明:
|
|
159
|
+
|
|
160
|
+
- 不同支线智能体的缓存状态可能不同;`reuse` 的含义是“按该支线智能体自己的缓存判断”。
|
|
161
|
+
- priming 不允许后台悄悄执行;必须以标准对话记录(消息 + 事件)对用户可见。
|
|
162
|
+
|
|
163
|
+
### 3)跨 `clear_mind` 携带
|
|
164
|
+
|
|
165
|
+
每次 `clear_mind` 进入下一程时,不要依赖 reminder 来承载这件事。
|
|
166
|
+
|
|
167
|
+
改为:在每一程对话的上下文里注入一段小而稳定的 **course prefix**(可理解为“历史消息区最开头的几条 msg”),内容是从首次启动中提炼出的压缩转录(shell 快照 + FBR 摘要 + Priming 笔记)。这样智能体能持续保留“体感”和环境约束,而无需重复执行启动流程。
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## WebUI 需求
|
|
172
|
+
|
|
173
|
+
### 展示
|
|
174
|
+
|
|
175
|
+
- 智能体启动应以真实对话转录展示,用户可展开查看细节。
|
|
176
|
+
- 建议在对话顶部提供一个可折叠区域,并带上清晰标签:
|
|
177
|
+
- “队友诉请(shell)”
|
|
178
|
+
- “FBR(`freshBootsReasoning`)”
|
|
179
|
+
- “智能体启动(Agent Priming)”
|
|
180
|
+
|
|
181
|
+
### 创建对话时可选择跳过(opt-out)
|
|
182
|
+
|
|
183
|
+
创建对话框上提供明确开关,跳过这一安排(不执行启动流程,也不生成启动转录)。
|
|
184
|
+
|
|
185
|
+
补充约定:
|
|
186
|
+
|
|
187
|
+
- 当对话主理人选择为(隐藏的)影子智能体时,“智能体启动(Priming)”选项默认应为“无感”。
|
|
188
|
+
- 影子智能体的“启动”选项应与显在智能体的“启动”选项分开记忆(互不影响)。
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## 安全注意事项
|
|
193
|
+
|
|
194
|
+
- 默认只执行 `uname -a`(低风险、只读、快)。
|
|
195
|
+
- 启动阶段禁止任何会改写文件/网络/系统状态的操作。
|
|
196
|
+
- 由于启动默认用户可见,严禁输出密钥/敏感信息。
|