dominds 1.20.3 → 1.20.5
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 +4 -4
- package/README.zh.md +2 -2
- package/dist/access-control.js +2 -2
- package/dist/cli/webui.d.ts +1 -1
- package/dist/cli/webui.js +29 -9
- package/dist/dialog-factory.d.ts +3 -0
- package/dist/dialog-factory.js +2 -6
- package/dist/dialog-fork.js +4 -2
- package/dist/dialog.d.ts +11 -0
- package/dist/dialog.js +6 -0
- package/dist/docs/cli-usage.md +2 -1
- package/dist/docs/cli-usage.zh.md +6 -3
- package/dist/docs/context-health.md +2 -2
- package/dist/docs/context-health.zh.md +2 -2
- package/dist/docs/design.md +3 -3
- package/dist/docs/design.zh.md +3 -3
- package/dist/docs/dialog-system.md +33 -10
- package/dist/docs/dialog-system.zh.md +29 -10
- package/dist/docs/dominds-terminology.md +4 -4
- package/dist/docs/encapsulated-taskdoc.md +17 -10
- package/dist/docs/encapsulated-taskdoc.zh.md +18 -11
- package/dist/docs/q4h.md +14 -10
- package/dist/docs/q4h.zh.md +13 -11
- package/dist/docs/tellask-revive-context-refactor.zh.md +1 -0
- package/dist/llm/kernel-driver/drive.js +32 -1
- package/dist/llm/kernel-driver/flow.js +2 -2
- package/dist/llm/kernel-driver/sideDialog.d.ts +9 -0
- package/dist/llm/kernel-driver/sideDialog.js +14 -12
- package/dist/llm/kernel-driver/tellask-special.js +163 -16
- package/dist/llm/kernel-driver/types.d.ts +3 -0
- package/dist/minds/load.js +14 -4
- package/dist/minds/minds-i18n.js +2 -2
- package/dist/minds/system-prompt-parts.js +8 -8
- package/dist/persistence.d.ts +3 -1
- package/dist/persistence.js +47 -34
- package/dist/priming.js +68 -9
- package/dist/runtime/driver-messages.js +8 -4
- package/dist/server/port-selection.d.ts +19 -0
- package/dist/server/port-selection.js +57 -0
- package/dist/server/server-core.d.ts +2 -2
- package/dist/server/server-core.js +21 -7
- package/dist/server.d.ts +3 -0
- package/dist/server.js +109 -44
- package/dist/team.d.ts +2 -3
- package/dist/team.js +17 -4
- package/dist/tools/builtins.js +3 -0
- package/dist/tools/ctrl.d.ts +10 -8
- package/dist/tools/ctrl.js +141 -22
- package/dist/tools/prompts/control/en/errors.md +2 -2
- package/dist/tools/prompts/control/en/principles.md +13 -12
- package/dist/tools/prompts/control/en/tools.md +23 -5
- package/dist/tools/prompts/control/zh/errors.md +2 -2
- package/dist/tools/prompts/control/zh/principles.md +13 -12
- package/dist/tools/prompts/control/zh/tools.md +23 -5
- package/dist/tools/prompts/personal_memory/en/principles.md +1 -1
- package/dist/tools/prompts/personal_memory/zh/principles.md +1 -1
- package/dist/tools/prompts/team_memory/en/principles.md +1 -1
- package/dist/tools/prompts/team_memory/zh/principles.md +1 -1
- package/dist/tools/registry.d.ts +6 -0
- package/dist/tools/team_mgmt.js +5 -5
- package/dist/utils/task-package.d.ts +15 -1
- package/dist/utils/task-package.js +51 -1
- package/dist/utils/taskdoc.js +60 -22
- package/package.json +4 -4
- package/webapp/dist/assets/{_basePickBy-B2wYdQcR.js → _basePickBy-DFzVggWM.js} +3 -3
- package/webapp/dist/assets/{_basePickBy-B2wYdQcR.js.map → _basePickBy-DFzVggWM.js.map} +1 -1
- package/webapp/dist/assets/{_baseUniq-zKoHgk38.js → _baseUniq-CXD_3O9i.js} +2 -2
- package/webapp/dist/assets/{_baseUniq-zKoHgk38.js.map → _baseUniq-CXD_3O9i.js.map} +1 -1
- package/webapp/dist/assets/{arc-D8bQ-Nzm.js → arc--yzhIodb.js} +2 -2
- package/webapp/dist/assets/{arc-D8bQ-Nzm.js.map → arc--yzhIodb.js.map} +1 -1
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-BiimGQW5.js → architectureDiagram-2XIMDMQ5-B2jDlUga.js} +7 -7
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-BiimGQW5.js.map → architectureDiagram-2XIMDMQ5-B2jDlUga.js.map} +1 -1
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-BXPbS_wx.js → blockDiagram-WCTKOSBZ-BUPbccZo.js} +7 -7
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-BXPbS_wx.js.map → blockDiagram-WCTKOSBZ-BUPbccZo.js.map} +1 -1
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-BZC0c1Ke.js → c4Diagram-IC4MRINW-DwTime9I.js} +3 -3
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-BZC0c1Ke.js.map → c4Diagram-IC4MRINW-DwTime9I.js.map} +1 -1
- package/webapp/dist/assets/{channel-BP3Qyxui.js → channel-C44ixz_J.js} +2 -2
- package/webapp/dist/assets/{channel-BP3Qyxui.js.map → channel-C44ixz_J.js.map} +1 -1
- package/webapp/dist/assets/{chunk-4BX2VUAB-BXABHFQC.js → chunk-4BX2VUAB-D8GtQm2f.js} +2 -2
- package/webapp/dist/assets/{chunk-4BX2VUAB-BXABHFQC.js.map → chunk-4BX2VUAB-D8GtQm2f.js.map} +1 -1
- package/webapp/dist/assets/{chunk-55IACEB6-KdM20zpJ.js → chunk-55IACEB6-D581Sluc.js} +2 -2
- package/webapp/dist/assets/{chunk-55IACEB6-KdM20zpJ.js.map → chunk-55IACEB6-D581Sluc.js.map} +1 -1
- package/webapp/dist/assets/{chunk-FMBD7UC4-B2T04oKB.js → chunk-FMBD7UC4-DflSPxF8.js} +2 -2
- package/webapp/dist/assets/{chunk-FMBD7UC4-B2T04oKB.js.map → chunk-FMBD7UC4-DflSPxF8.js.map} +1 -1
- package/webapp/dist/assets/{chunk-JSJVCQXG-Bz-hhsBJ.js → chunk-JSJVCQXG-CcUETDd7.js} +2 -2
- package/webapp/dist/assets/{chunk-JSJVCQXG-Bz-hhsBJ.js.map → chunk-JSJVCQXG-CcUETDd7.js.map} +1 -1
- package/webapp/dist/assets/{chunk-KX2RTZJC-B1TcA_CH.js → chunk-KX2RTZJC-DfcLbXaY.js} +2 -2
- package/webapp/dist/assets/{chunk-KX2RTZJC-B1TcA_CH.js.map → chunk-KX2RTZJC-DfcLbXaY.js.map} +1 -1
- package/webapp/dist/assets/{chunk-NQ4KR5QH-BwsfKfyl.js → chunk-NQ4KR5QH-B0hUHzGe.js} +4 -4
- package/webapp/dist/assets/{chunk-NQ4KR5QH-BwsfKfyl.js.map → chunk-NQ4KR5QH-B0hUHzGe.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QZHKN3VN-BX453Nua.js → chunk-QZHKN3VN-V0IQhkyq.js} +2 -2
- package/webapp/dist/assets/{chunk-QZHKN3VN-BX453Nua.js.map → chunk-QZHKN3VN-V0IQhkyq.js.map} +1 -1
- package/webapp/dist/assets/{chunk-WL4C6EOR-COCTYZ-S.js → chunk-WL4C6EOR-Dlq3MRVu.js} +6 -6
- package/webapp/dist/assets/{chunk-WL4C6EOR-COCTYZ-S.js.map → chunk-WL4C6EOR-Dlq3MRVu.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-aWgCJGiX.js → classDiagram-VBA2DB6C-23iqCPis.js} +7 -7
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-aWgCJGiX.js.map → classDiagram-VBA2DB6C-23iqCPis.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-aWgCJGiX.js → classDiagram-v2-RAHNMMFH-23iqCPis.js} +7 -7
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-aWgCJGiX.js.map → classDiagram-v2-RAHNMMFH-23iqCPis.js.map} +1 -1
- package/webapp/dist/assets/{clone-UCWLNsJ4.js → clone-DOk1nA0K.js} +2 -2
- package/webapp/dist/assets/{clone-UCWLNsJ4.js.map → clone-DOk1nA0K.js.map} +1 -1
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-Blf43_-z.js → cose-bilkent-S5V4N54A-BRI_M3Z1.js} +2 -2
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-Blf43_-z.js.map → cose-bilkent-S5V4N54A-BRI_M3Z1.js.map} +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-BLTVAduG.js → dagre-KLK3FWXG-PjbaHNi2.js} +7 -7
- package/webapp/dist/assets/{dagre-KLK3FWXG-BLTVAduG.js.map → dagre-KLK3FWXG-PjbaHNi2.js.map} +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-eHyGJiW2.js → diagram-E7M64L7V-C9jrc2Yj.js} +8 -8
- package/webapp/dist/assets/{diagram-E7M64L7V-eHyGJiW2.js.map → diagram-E7M64L7V-C9jrc2Yj.js.map} +1 -1
- package/webapp/dist/assets/{diagram-IFDJBPK2-BzZS2fFL.js → diagram-IFDJBPK2-D_B_8ZEE.js} +7 -7
- package/webapp/dist/assets/{diagram-IFDJBPK2-BzZS2fFL.js.map → diagram-IFDJBPK2-D_B_8ZEE.js.map} +1 -1
- package/webapp/dist/assets/{diagram-P4PSJMXO-CUUSxkwu.js → diagram-P4PSJMXO-BAGUvld_.js} +7 -7
- package/webapp/dist/assets/{diagram-P4PSJMXO-CUUSxkwu.js.map → diagram-P4PSJMXO-BAGUvld_.js.map} +1 -1
- package/webapp/dist/assets/{erDiagram-INFDFZHY-DF_doi5_.js → erDiagram-INFDFZHY-5ufs8FDF.js} +5 -5
- package/webapp/dist/assets/{erDiagram-INFDFZHY-DF_doi5_.js.map → erDiagram-INFDFZHY-5ufs8FDF.js.map} +1 -1
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-YcqCG3mt.js → flowDiagram-PKNHOUZH-Bax4wCyq.js} +7 -7
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-YcqCG3mt.js.map → flowDiagram-PKNHOUZH-Bax4wCyq.js.map} +1 -1
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-BZNRb7SP.js → ganttDiagram-A5KZAMGK-9ZX_VymK.js} +3 -3
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-BZNRb7SP.js.map → ganttDiagram-A5KZAMGK-9ZX_VymK.js.map} +1 -1
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-nAdujBg_.js → gitGraphDiagram-K3NZZRJ6-YbGo4EFg.js} +8 -8
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-nAdujBg_.js.map → gitGraphDiagram-K3NZZRJ6-YbGo4EFg.js.map} +1 -1
- package/webapp/dist/assets/{graph-Cv-ZJ4Fl.js → graph-B4UFhGtz.js} +3 -3
- package/webapp/dist/assets/{graph-Cv-ZJ4Fl.js.map → graph-B4UFhGtz.js.map} +1 -1
- package/webapp/dist/assets/{index-Dhf_wAfo.js → index-D7y9EEAl.js} +621 -530
- package/webapp/dist/assets/{index-Dhf_wAfo.js.map → index-D7y9EEAl.js.map} +1 -1
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-CwtMOnIR.js → infoDiagram-LFFYTUFH-K9JKlk7P.js} +6 -6
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-CwtMOnIR.js.map → infoDiagram-LFFYTUFH-K9JKlk7P.js.map} +1 -1
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-Cfb8MPoG.js → ishikawaDiagram-PHBUUO56-D7h7bNU_.js} +2 -2
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-Cfb8MPoG.js.map → ishikawaDiagram-PHBUUO56-D7h7bNU_.js.map} +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-u0xpmaEL.js → journeyDiagram-4ABVD52K-BHhkjUnE.js} +5 -5
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-u0xpmaEL.js.map → journeyDiagram-4ABVD52K-BHhkjUnE.js.map} +1 -1
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-BuwDgdXi.js → kanban-definition-K7BYSVSG-BsdCCeJO.js} +3 -3
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-BuwDgdXi.js.map → kanban-definition-K7BYSVSG-BsdCCeJO.js.map} +1 -1
- package/webapp/dist/assets/{layout-DwFR5fz7.js → layout-CTqY3yh8.js} +5 -5
- package/webapp/dist/assets/{layout-DwFR5fz7.js.map → layout-CTqY3yh8.js.map} +1 -1
- package/webapp/dist/assets/{linear-DK9kuyt6.js → linear-D3vXpsJz.js} +2 -2
- package/webapp/dist/assets/{linear-DK9kuyt6.js.map → linear-D3vXpsJz.js.map} +1 -1
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-BP26yHUE.js → mindmap-definition-YRQLILUH-Df26nneZ.js} +4 -4
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-BP26yHUE.js.map → mindmap-definition-YRQLILUH-Df26nneZ.js.map} +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-Dg05ljR9.js → pieDiagram-SKSYHLDU-CORXrWQD.js} +8 -8
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-Dg05ljR9.js.map → pieDiagram-SKSYHLDU-CORXrWQD.js.map} +1 -1
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-BZwWQDeQ.js → quadrantDiagram-337W2JSQ-D1iEgnz7.js} +3 -3
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-BZwWQDeQ.js.map → quadrantDiagram-337W2JSQ-D1iEgnz7.js.map} +1 -1
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-IZuN0Vt3.js → requirementDiagram-Z7DCOOCP-BTi9foPw.js} +4 -4
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-IZuN0Vt3.js.map → requirementDiagram-Z7DCOOCP-BTi9foPw.js.map} +1 -1
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-BsVp8N4k.js → sankeyDiagram-WA2Y5GQK-DlXqXBte.js} +2 -2
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-BsVp8N4k.js.map → sankeyDiagram-WA2Y5GQK-DlXqXBte.js.map} +1 -1
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-BkAT5uON.js → sequenceDiagram-2WXFIKYE-DtV5AvqW.js} +4 -4
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-BkAT5uON.js.map → sequenceDiagram-2WXFIKYE-DtV5AvqW.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-qk_ajPAy.js → stateDiagram-RAJIS63D-BD05KYfc.js} +9 -9
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-qk_ajPAy.js.map → stateDiagram-RAJIS63D-BD05KYfc.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-CNtP8Lfm.js → stateDiagram-v2-FVOUBMTO-ZWU-eA69.js} +5 -5
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-CNtP8Lfm.js.map → stateDiagram-v2-FVOUBMTO-ZWU-eA69.js.map} +1 -1
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-DLU-Pyr1.js → timeline-definition-YZTLITO2-Bz0iSxAq.js} +3 -3
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-DLU-Pyr1.js.map → timeline-definition-YZTLITO2-Bz0iSxAq.js.map} +1 -1
- package/webapp/dist/assets/{treemap-KZPCXAKY-hHk6fxaq.js → treemap-KZPCXAKY-VCn63bTk.js} +5 -5
- package/webapp/dist/assets/{treemap-KZPCXAKY-hHk6fxaq.js.map → treemap-KZPCXAKY-VCn63bTk.js.map} +1 -1
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-CM1zd5GO.js → vennDiagram-LZ73GAT5-DMD4pzqJ.js} +2 -2
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-CM1zd5GO.js.map → vennDiagram-LZ73GAT5-DMD4pzqJ.js.map} +1 -1
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-CccDexUn.js → xychartDiagram-JWTSCODW-B5BYuiJN.js} +3 -3
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-CccDexUn.js.map → xychartDiagram-JWTSCODW-B5BYuiJN.js.map} +1 -1
- package/webapp/dist/index.html +1 -1
package/README.md
CHANGED
|
@@ -156,7 +156,7 @@ There are two common ways to create an rtws:
|
|
|
156
156
|
- **Recommended**: start from a scaffold/template (see [Quick Start](#quick-start)).
|
|
157
157
|
- **Minimal**: start from an empty folder (see [Start from scratch](#start-from-scratch)).
|
|
158
158
|
|
|
159
|
-
Dominds uses your current working directory as the runtime workspace (rtws). When you start `dominds`, the WebUI
|
|
159
|
+
Dominds uses your current working directory as the runtime workspace (rtws). When you start `dominds`, the WebUI listens on `5666` or the next available lower port, then automatically redirects to `/setup` if the rtws is missing required configuration (for example `.minds/team.yaml` or provider env vars).
|
|
160
160
|
|
|
161
161
|
Note: In production mode, Dominds enables a local shared-secret auth key by default, so the browser may open with a URL containing `?auth=...`. Treat that token as sensitive.
|
|
162
162
|
|
|
@@ -195,7 +195,7 @@ dominds
|
|
|
195
195
|
|
|
196
196
|
Then:
|
|
197
197
|
|
|
198
|
-
1. Your browser should land on `http://localhost:5666/setup
|
|
198
|
+
1. Your browser should land on the local WebUI `/setup` page (usually `http://localhost:5666/setup`, unless that port was already occupied).
|
|
199
199
|
2. In **Setup**, pick a provider + model. If your template didn’t create `.minds/team.yaml`, use Setup to create/overwrite it (this writes a minimal `member_defaults` config).
|
|
200
200
|
3. Still in **Setup**, set the required provider env var (the name comes from the provider catalog, e.g. `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `CODEX_HOME`, etc.).
|
|
201
201
|
- The setup UI can write it to `.env.local` (all platforms), and on Linux/macOS it can also write into `~/.zshrc` / `~/.bashrc` in managed blocks. It also applies the value to the running server process immediately.
|
|
@@ -213,11 +213,11 @@ Starting from scratch means: create an empty folder, run `dominds`, let Setup ge
|
|
|
213
213
|
mkdir my-rtws
|
|
214
214
|
cd my-rtws
|
|
215
215
|
|
|
216
|
-
# Starts the WebUI server and opens a browser (default port: 5666)
|
|
216
|
+
# Starts the WebUI server and opens a browser (default port behavior: 5666-)
|
|
217
217
|
dominds
|
|
218
218
|
```
|
|
219
219
|
|
|
220
|
-
1. The WebUI should redirect you to
|
|
220
|
+
1. The WebUI should redirect you to the local `/setup` page because the rtws has no `.minds/team.yaml` yet.
|
|
221
221
|
2. In **Setup**:
|
|
222
222
|
- Select a provider + model and click **Create `.minds/team.yaml`**.
|
|
223
223
|
- Provide the required provider env var and write it to your shell rc (or set it manually). Setup applies it immediately to the running server.
|
package/README.zh.md
CHANGED
|
@@ -130,11 +130,11 @@ pnpm run lint:types
|
|
|
130
130
|
dominds create web-scaffold my-project
|
|
131
131
|
cd my-project
|
|
132
132
|
|
|
133
|
-
# 2) 启动 WebUI
|
|
133
|
+
# 2) 启动 WebUI(默认自动打开浏览器;未指定端口时等价于 5666-)
|
|
134
134
|
dominds
|
|
135
135
|
```
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
首次启动后,通常会自动跳转至本机 WebUI 的 `/setup` 配置页面(优先使用 `http://localhost:5666/setup`,如果端口被占用则自动尝试更小端口),按以下步骤操作:
|
|
138
138
|
|
|
139
139
|
1. 选择提供商(provider)及模型(model),创建或覆盖 `.minds/team.yaml`(最小化可运行配置文件)。
|
|
140
140
|
2. 根据提示设置提供商所需的环境变量(配置页可将变量写入 `.env.local`,并在 Linux/macOS 上额外支持写入 `~/.zshrc` 或 `~/.bashrc` 的托管区块)。
|
package/dist/access-control.js
CHANGED
|
@@ -312,12 +312,12 @@ function getAccessDeniedMessage(operation, targetPath, language = 'en') {
|
|
|
312
312
|
lines.push('');
|
|
313
313
|
if (language === 'zh') {
|
|
314
314
|
lines.push(`- 说明:\`*.tsk/\` 是封装差遣牒。通用文件工具无法读/写/列目录/删除其中内容(硬编码无条件拒绝)。`);
|
|
315
|
-
lines.push(`-
|
|
315
|
+
lines.push(`- 提示:新增章节请使用 \`do_mind\`;少量追加请使用 \`mind_more\`(默认 progress:\`mind_more({\"items\":[\"...\"]})\`);改写已有整章请使用 \`change_mind\`(顶层:\`change_mind({\"selector\":\"goals|constraints|progress\",\"content\":\"...\"})\`;额外章节:\`change_mind({\"category\":\"<category>\",\"selector\":\"<selector>\",\"content\":\"...\"})\`)。`);
|
|
316
316
|
lines.push(`- 提示:读取额外章节请使用函数工具 \`recall_taskdoc\`:\`recall_taskdoc({\"category\":\"<category>\",\"selector\":\"<selector>\"})\`。`);
|
|
317
317
|
}
|
|
318
318
|
else {
|
|
319
319
|
lines.push(`- Note: \`*.tsk/\` is an encapsulated Taskdoc. It is hard-denied for all general file tools.`);
|
|
320
|
-
lines.push(`- Hint:
|
|
320
|
+
lines.push(`- Hint: To create a section, use \`do_mind\`; for small append-only updates, use \`mind_more\` (defaults to progress: \`mind_more({\"items\":[\"...\"]})\`); for full-section replacements of existing sections, use \`change_mind\` (top-level: \`change_mind({\"selector\":\"goals|constraints|progress\",\"content\":\"...\"})\`; extra sections: \`change_mind({\"category\":\"<category>\",\"selector\":\"<selector>\",\"content\":\"...\"})\`).`);
|
|
321
321
|
lines.push(`- Hint: To read extra sections, use \`recall_taskdoc({\"category\":\"<category>\",\"selector\":\"<selector>\"})\`.`);
|
|
322
322
|
}
|
|
323
323
|
}
|
package/dist/cli/webui.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* dominds webui [options]
|
|
7
7
|
*
|
|
8
8
|
* Options:
|
|
9
|
-
* -p, --port <port> Port to listen on
|
|
9
|
+
* -p, --port <port> Port to listen on. Bare port is strict; suffix + tries higher ports; suffix - tries lower ports.
|
|
10
10
|
* -h, --host <host> Host to bind to (default: localhost)
|
|
11
11
|
* --nobrowser Do not open a browser (opt-out)
|
|
12
12
|
* -h, --help Show help
|
package/dist/cli/webui.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* dominds webui [options]
|
|
8
8
|
*
|
|
9
9
|
* Options:
|
|
10
|
-
* -p, --port <port> Port to listen on
|
|
10
|
+
* -p, --port <port> Port to listen on. Bare port is strict; suffix + tries higher ports; suffix - tries lower ports.
|
|
11
11
|
* -h, --host <host> Host to bind to (default: localhost)
|
|
12
12
|
* --nobrowser Do not open a browser (opt-out)
|
|
13
13
|
* -h, --help Show help
|
|
@@ -19,6 +19,7 @@ const log_1 = require("../log");
|
|
|
19
19
|
const work_language_1 = require("../runtime/work-language");
|
|
20
20
|
const server_1 = require("../server");
|
|
21
21
|
const auth_1 = require("../server/auth");
|
|
22
|
+
const port_selection_1 = require("../server/port-selection");
|
|
22
23
|
const log = (0, log_1.createLogger)('webui');
|
|
23
24
|
function printHelp() {
|
|
24
25
|
console.log(`
|
|
@@ -31,15 +32,18 @@ Note:
|
|
|
31
32
|
rtws (runtime workspace) directory is \`process.cwd()\`. Use 'dominds -C <dir> webui' to run in another rtws.
|
|
32
33
|
|
|
33
34
|
Options:
|
|
34
|
-
-p, --port <port> Port to listen on
|
|
35
|
+
-p, --port <port> Port to listen on. Bare port is strict; suffix + tries higher ports; suffix - tries lower ports.
|
|
36
|
+
Default without --port: auto from 5666 downward.
|
|
35
37
|
-h, --host <host> Host to bind to (default: localhost)
|
|
36
38
|
--mode <dev|prod> Server mode (default: prod; dev if NODE_ENV=dev)
|
|
37
39
|
--nobrowser Do not open a browser (opt-out)
|
|
38
40
|
--help Show this help message
|
|
39
41
|
|
|
40
42
|
Examples:
|
|
41
|
-
dominds webui # Start on
|
|
42
|
-
dominds webui -p 8888 # Start on port 8888
|
|
43
|
+
dominds webui # Start on 5666, or the next available lower port
|
|
44
|
+
dominds webui -p 8888 # Start strictly on port 8888
|
|
45
|
+
dominds webui -p 8888+ # Start on 8888, or the next available higher port
|
|
46
|
+
dominds webui -p 8888- # Start on 8888, or the next available lower port
|
|
43
47
|
dominds webui --mode dev # Start in dev mode
|
|
44
48
|
dominds webui --nobrowser # Start without opening a browser
|
|
45
49
|
`);
|
|
@@ -60,22 +64,38 @@ function openInBrowser(url) {
|
|
|
60
64
|
}
|
|
61
65
|
async function main() {
|
|
62
66
|
const args = process.argv.slice(2);
|
|
63
|
-
let port
|
|
67
|
+
let port;
|
|
64
68
|
let host = 'localhost';
|
|
65
69
|
let mode = process.env.NODE_ENV === 'dev' ? 'dev' : 'prod';
|
|
66
70
|
let shouldOpen = true;
|
|
71
|
+
let strictPort = false;
|
|
72
|
+
let portAutoDirection = 'down';
|
|
67
73
|
for (let i = 0; i < args.length; i++) {
|
|
68
74
|
const arg = args[i];
|
|
69
75
|
if (arg === '-p' || arg === '--port') {
|
|
70
76
|
const next = args[i + 1];
|
|
71
|
-
|
|
72
|
-
|
|
77
|
+
const parsedPort = next ? (0, port_selection_1.parseWebuiPortSpec)(next) : null;
|
|
78
|
+
if (parsedPort === null) {
|
|
79
|
+
console.error('Error: --port requires a valid port number, optionally suffixed with + or -');
|
|
73
80
|
printHelp();
|
|
74
81
|
process.exit(1);
|
|
75
82
|
}
|
|
76
|
-
port =
|
|
83
|
+
port = parsedPort.port;
|
|
84
|
+
strictPort = parsedPort.strictPort;
|
|
85
|
+
portAutoDirection = parsedPort.portAutoDirection;
|
|
77
86
|
i++;
|
|
78
87
|
}
|
|
88
|
+
else if (arg.startsWith('--port=')) {
|
|
89
|
+
const parsedPort = (0, port_selection_1.parseWebuiPortSpec)(arg.slice('--port='.length));
|
|
90
|
+
if (parsedPort === null) {
|
|
91
|
+
console.error('Error: --port requires a valid port number, optionally suffixed with + or -');
|
|
92
|
+
printHelp();
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
port = parsedPort.port;
|
|
96
|
+
strictPort = parsedPort.strictPort;
|
|
97
|
+
portAutoDirection = parsedPort.portAutoDirection;
|
|
98
|
+
}
|
|
79
99
|
else if (arg === '-h' || arg === '--host') {
|
|
80
100
|
const next = args[i + 1];
|
|
81
101
|
if (!next) {
|
|
@@ -114,7 +134,7 @@ async function main() {
|
|
|
114
134
|
const { language: resolvedLanguage, source } = (0, work_language_1.resolveWorkLanguage)({ env: process.env });
|
|
115
135
|
(0, work_language_1.setWorkLanguage)(resolvedLanguage);
|
|
116
136
|
log.info(`working language: ${(0, work_language_1.getWorkLanguage)()} (source: ${source})`);
|
|
117
|
-
const started = await (0, server_1.startServer)({ port, host, mode });
|
|
137
|
+
const started = await (0, server_1.startServer)({ port, host, mode, strictPort, portAutoDirection });
|
|
118
138
|
const httpServer = started.httpServer;
|
|
119
139
|
const auth = started.auth;
|
|
120
140
|
const baseUrl = `http://${started.host}:${started.port}`;
|
package/dist/dialog-factory.d.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Factory for creating Dialog instances with proper type hierarchy.
|
|
5
5
|
* Provides a single point of dialog creation to ensure consistent initialization.
|
|
6
6
|
*/
|
|
7
|
+
import type { CallSiteCourseNo, CallSiteGenseqNo } from '@longrun-ai/kernel/types/storage';
|
|
7
8
|
import { Dialog, DialogID, DialogInitParams, DialogStore, MainDialog, SideDialog } from './dialog';
|
|
8
9
|
/**
|
|
9
10
|
* Factory for creating Dialog instances.
|
|
@@ -22,6 +23,8 @@ export declare class DialogFactory {
|
|
|
22
23
|
originMemberId: string;
|
|
23
24
|
askerDialogId: string;
|
|
24
25
|
callId: string;
|
|
26
|
+
callSiteCourse: CallSiteCourseNo;
|
|
27
|
+
callSiteGenseq: CallSiteGenseqNo;
|
|
25
28
|
sessionSlug?: string;
|
|
26
29
|
collectiveTargets?: string[];
|
|
27
30
|
effectiveFbrEffort?: number;
|
package/dist/dialog-factory.js
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DialogFactory = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Module: dialog-factory
|
|
6
|
-
*
|
|
7
|
-
* Factory for creating Dialog instances with proper type hierarchy.
|
|
8
|
-
* Provides a single point of dialog creation to ensure consistent initialization.
|
|
9
|
-
*/
|
|
10
4
|
const dialog_1 = require("./dialog");
|
|
11
5
|
const dialog_global_registry_1 = require("./dialog-global-registry");
|
|
12
6
|
const id_1 = require("./utils/id");
|
|
@@ -45,6 +39,8 @@ class DialogFactory {
|
|
|
45
39
|
originMemberId: options.originMemberId,
|
|
46
40
|
askerDialogId: options.askerDialogId,
|
|
47
41
|
callId: options.callId,
|
|
42
|
+
callSiteCourse: options.callSiteCourse,
|
|
43
|
+
callSiteGenseq: options.callSiteGenseq,
|
|
48
44
|
collectiveTargets: options.collectiveTargets,
|
|
49
45
|
effectiveFbrEffort: options.effectiveFbrEffort,
|
|
50
46
|
},
|
package/dist/dialog-fork.js
CHANGED
|
@@ -140,7 +140,8 @@ function isPersistedMessageRecord(record) {
|
|
|
140
140
|
case 'user_image_ingest_record':
|
|
141
141
|
case 'sideDialog_request_record':
|
|
142
142
|
case 'tellask_reply_resolution_record':
|
|
143
|
-
case '
|
|
143
|
+
case 'tellask_anchor_record':
|
|
144
|
+
case 'tellask_callee_record':
|
|
144
145
|
case 'gen_start_record':
|
|
145
146
|
case 'gen_finish_record':
|
|
146
147
|
case 'sideDialog_created_record':
|
|
@@ -212,7 +213,8 @@ function rewriteRecordForFork(record, newRootId) {
|
|
|
212
213
|
case 'native_tool_call_record':
|
|
213
214
|
case 'sideDialog_request_record':
|
|
214
215
|
case 'tellask_reply_resolution_record':
|
|
215
|
-
case '
|
|
216
|
+
case 'tellask_anchor_record':
|
|
217
|
+
case 'tellask_callee_record':
|
|
216
218
|
case 'gen_start_record':
|
|
217
219
|
case 'gen_finish_record':
|
|
218
220
|
return record;
|
package/dist/dialog.d.ts
CHANGED
|
@@ -122,6 +122,8 @@ export interface AssignmentFromAsker {
|
|
|
122
122
|
originMemberId: string;
|
|
123
123
|
askerDialogId: string;
|
|
124
124
|
callId: string;
|
|
125
|
+
callSiteCourse: CallSiteCourseNo;
|
|
126
|
+
callSiteGenseq: CallSiteGenseqNo;
|
|
125
127
|
collectiveTargets?: string[];
|
|
126
128
|
effectiveFbrEffort?: number;
|
|
127
129
|
}
|
|
@@ -253,8 +255,11 @@ export declare abstract class Dialog {
|
|
|
253
255
|
originMemberId: string;
|
|
254
256
|
askerDialogId: string;
|
|
255
257
|
callId: string;
|
|
258
|
+
callSiteCourse: CallSiteCourseNo;
|
|
259
|
+
callSiteGenseq: CallSiteGenseqNo;
|
|
256
260
|
sessionSlug?: string;
|
|
257
261
|
collectiveTargets?: string[];
|
|
262
|
+
effectiveFbrEffort?: number;
|
|
258
263
|
}): Promise<SideDialog>;
|
|
259
264
|
/**
|
|
260
265
|
* Post a dialog event using the standard event registry.
|
|
@@ -468,6 +473,8 @@ export declare class SideDialog extends Dialog {
|
|
|
468
473
|
originMemberId: string;
|
|
469
474
|
askerDialogId: string;
|
|
470
475
|
callId: string;
|
|
476
|
+
callSiteCourse: CallSiteCourseNo;
|
|
477
|
+
callSiteGenseq: CallSiteGenseqNo;
|
|
471
478
|
sessionSlug?: string;
|
|
472
479
|
collectiveTargets?: string[];
|
|
473
480
|
effectiveFbrEffort?: number;
|
|
@@ -528,6 +535,8 @@ export declare class MainDialog extends Dialog {
|
|
|
528
535
|
originMemberId: string;
|
|
529
536
|
askerDialogId: string;
|
|
530
537
|
callId: string;
|
|
538
|
+
callSiteCourse: CallSiteCourseNo;
|
|
539
|
+
callSiteGenseq: CallSiteGenseqNo;
|
|
531
540
|
sessionSlug?: string;
|
|
532
541
|
collectiveTargets?: string[];
|
|
533
542
|
effectiveFbrEffort?: number;
|
|
@@ -561,6 +570,8 @@ export declare abstract class DialogStore {
|
|
|
561
570
|
originMemberId: string;
|
|
562
571
|
askerDialogId: string;
|
|
563
572
|
callId: string;
|
|
573
|
+
callSiteCourse: CallSiteCourseNo;
|
|
574
|
+
callSiteGenseq: CallSiteGenseqNo;
|
|
564
575
|
sessionSlug?: string;
|
|
565
576
|
collectiveTargets?: string[];
|
|
566
577
|
effectiveFbrEffort?: number;
|
package/dist/dialog.js
CHANGED
|
@@ -126,6 +126,8 @@ function buildSideDialogAssignmentPromptMeta(sideDialog) {
|
|
|
126
126
|
ownerDialogId: assignment.askerDialogId,
|
|
127
127
|
callType: 'B',
|
|
128
128
|
callId: assignment.callId,
|
|
129
|
+
callSiteCourse: assignment.callSiteCourse,
|
|
130
|
+
callSiteGenseq: assignment.callSiteGenseq,
|
|
129
131
|
},
|
|
130
132
|
};
|
|
131
133
|
case 'tellaskSessionless':
|
|
@@ -141,6 +143,8 @@ function buildSideDialogAssignmentPromptMeta(sideDialog) {
|
|
|
141
143
|
ownerDialogId: assignment.askerDialogId,
|
|
142
144
|
callType: 'C',
|
|
143
145
|
callId: assignment.callId,
|
|
146
|
+
callSiteCourse: assignment.callSiteCourse,
|
|
147
|
+
callSiteGenseq: assignment.callSiteGenseq,
|
|
144
148
|
},
|
|
145
149
|
};
|
|
146
150
|
}
|
|
@@ -1791,6 +1795,8 @@ class DialogStore {
|
|
|
1791
1795
|
originMemberId: options.originMemberId,
|
|
1792
1796
|
askerDialogId: options.askerDialogId,
|
|
1793
1797
|
callId: options.callId,
|
|
1798
|
+
callSiteCourse: options.callSiteCourse,
|
|
1799
|
+
callSiteGenseq: options.callSiteGenseq,
|
|
1794
1800
|
collectiveTargets: options.collectiveTargets,
|
|
1795
1801
|
effectiveFbrEffort: options.effectiveFbrEffort,
|
|
1796
1802
|
};
|
package/dist/docs/cli-usage.md
CHANGED
|
@@ -81,7 +81,7 @@ Start the web-based user interface for the current rtws. This provides a graphic
|
|
|
81
81
|
|
|
82
82
|
**Options:**
|
|
83
83
|
|
|
84
|
-
- `-p, --port <port>` - Port to listen on (
|
|
84
|
+
- `-p, --port <port>` - Port to listen on; a bare port binds strictly, suffix `+` tries higher ports, and suffix `-` tries lower ports (omitting `--port` is equivalent to `5666-`)
|
|
85
85
|
- `-h, --host <host>` - Host to bind to (default: localhost)
|
|
86
86
|
- `-C, --cwd <dir>` - Change to rtws directory before starting
|
|
87
87
|
- `--help` - Show help message
|
|
@@ -91,6 +91,7 @@ Start the web-based user interface for the current rtws. This provides a graphic
|
|
|
91
91
|
```bash
|
|
92
92
|
dominds
|
|
93
93
|
dominds webui -p 8080
|
|
94
|
+
dominds webui -p 8080+
|
|
94
95
|
dominds webui -C ./my-rtws
|
|
95
96
|
```
|
|
96
97
|
|
|
@@ -81,7 +81,7 @@ dominds webui [options]
|
|
|
81
81
|
|
|
82
82
|
**选项:**
|
|
83
83
|
|
|
84
|
-
- `-p, --port <port>` -
|
|
84
|
+
- `-p, --port <port>` - 监听端口;裸端口严格绑定,后缀 `+` 向更大端口自动尝试,后缀 `-` 向更小端口自动尝试(未指定时等价于 `5666-`)
|
|
85
85
|
- `-h, --host <host>` - 绑定的主机(默认:localhost)
|
|
86
86
|
- `-C, --cwd <dir>` - 启动前更改 rtws 目录
|
|
87
87
|
- `--help` - 显示帮助消息
|
|
@@ -89,12 +89,15 @@ dominds webui [options]
|
|
|
89
89
|
**示例:**
|
|
90
90
|
|
|
91
91
|
```bash
|
|
92
|
-
#
|
|
92
|
+
# 从 5666 开始,向更小端口尝试可用端口
|
|
93
93
|
dominds
|
|
94
94
|
|
|
95
|
-
#
|
|
95
|
+
# 严格绑定 8080;占用时启动失败
|
|
96
96
|
dominds webui -p 8080
|
|
97
97
|
|
|
98
|
+
# 从 8080 开始,向更大端口尝试可用端口
|
|
99
|
+
dominds webui -p 8080+
|
|
100
|
+
|
|
98
101
|
# 在特定 rtws 启动 Web UI
|
|
99
102
|
dominds webui -C ./my-rtws
|
|
100
103
|
```
|
|
@@ -169,7 +169,7 @@ Current behavior:
|
|
|
169
169
|
generations; configurable per model).
|
|
170
170
|
- Each inserted prompt is split by the program according to dialog scope, so the agent does not decide
|
|
171
171
|
whether it is in the Main Dialog or a Side Dialog:
|
|
172
|
-
- Main Dialog: update Taskdoc first with `
|
|
172
|
+
- Main Dialog: create or update Taskdoc first with `do_mind` / `change_mind`, then curate reminders (at least one call)
|
|
173
173
|
- Side Dialog: do not maintain Taskdoc and do not draft Taskdoc update proposals; directly curate sufficiently detailed reminders (at least one call)
|
|
174
174
|
- `update_reminder` (preferred) / `add_reminder`
|
|
175
175
|
- Default to one structured continuation-package reminder; if the current course is already under remediation and one structured reminder cannot be produced directly from already observed facts, rough multi-reminder carry-over is acceptable
|
|
@@ -182,7 +182,7 @@ When `level === 'critical'`, the driver enters a **countdown remediation** (max
|
|
|
182
182
|
- On each turn, the driver records a **role=user prompt** (persisted as a user message) that is
|
|
183
183
|
visible in the UI as a user prompt. The prompt is scope-specific:
|
|
184
184
|
- Main Dialog prompt: first write undocumented discussion details that the next course needs to know
|
|
185
|
-
into the appropriate Taskdoc sections with `
|
|
185
|
+
into the appropriate Taskdoc sections with `do_mind` / `change_mind`, then curate reminders via
|
|
186
186
|
`update_reminder` / `add_reminder`, and call `clear_mind`.
|
|
187
187
|
- Side Dialog prompt: do not maintain Taskdoc and do not draft Taskdoc update proposals; directly
|
|
188
188
|
maintain sufficiently detailed continuation-package reminders with no technical length limit, then
|
|
@@ -130,7 +130,7 @@ Dominds 计算比率:
|
|
|
130
130
|
- 进入 `caution` 时,Dominds 插入一次提示(入口注入)。
|
|
131
131
|
- 保持在 `caution` 状态时,Dominds 按节奏重新插入(默认:每 **10** 次生成;可按模型配置)。
|
|
132
132
|
- 每次插入的提示都由程序按范围分流,不要求智能体自己判断主线/支线:
|
|
133
|
-
- 主线对话:先使用 `
|
|
133
|
+
- 主线对话:先使用 `do_mind` / `change_mind` 补齐差遣牒,再整理提醒项(至少一次调用)
|
|
134
134
|
- 支线对话:不维护差遣牒,也不整理差遣牒更新提案;直接整理足够详尽的提醒项(至少一次调用)
|
|
135
135
|
- `update_reminder`(首选)/ `add_reminder`
|
|
136
136
|
- 在提醒项内维护接续包草稿
|
|
@@ -141,7 +141,7 @@ Dominds 计算比率:
|
|
|
141
141
|
当 `level === 'critical'` 时,驱动程序进入**倒计时恢复**(最多 **5** 轮):
|
|
142
142
|
|
|
143
143
|
- 每轮,驱动程序记录一条 **role=user prompt**(持久化为用户消息),在 UI 中作为用户 prompt 可见。提示按范围分开:
|
|
144
|
-
- 主线对话提示:先用 `
|
|
144
|
+
- 主线对话提示:先用 `do_mind` / `change_mind` 把未落文档、且下一程需要知会的讨论细节写入差遣牒合适章节,再通过 `update_reminder` / `add_reminder` 整理提醒项并调用 `clear_mind`。
|
|
145
145
|
- 支线对话提示:不要维护差遣牒,也不要整理差遣牒更新提案;直接维护足够详尽的接续包提醒项,提醒项长度没有技术限制,然后调用 `clear_mind`。
|
|
146
146
|
- 提示包含倒计时:经过 **N** 轮后系统将自动清空。
|
|
147
147
|
- 当倒计时归零时,驱动程序**自动调用** `clear_mind`(带空参数;不要求 `reminder_content`),开始新一程且无需暂停。
|
package/dist/docs/design.md
CHANGED
|
@@ -412,7 +412,7 @@ For detailed implementation specifications, including core tools, technical arch
|
|
|
412
412
|
**Key Implementation Components**:
|
|
413
413
|
|
|
414
414
|
- **`clear_mind`**: Function tool for clearing conversational noise and starting a new course
|
|
415
|
-
-
|
|
415
|
+
- **Taskdoc mutation tools**: `do_mind`, `mind_more`, `change_mind`, and `never_mind` update authoritative Taskdocs across dialog hierarchies (no course reset)
|
|
416
416
|
- **Reminder Management**: Dialog-scoped working memory that persists across clarity operations
|
|
417
417
|
- **Hierarchical Dialog Architecture**: Tree-structured dialogs with flat storage and autonomous management
|
|
418
418
|
- **Memory Layers**: Dialog-scoped and rtws-persistent memory with autonomous evolution
|
|
@@ -549,9 +549,9 @@ dominds dialog start --taskdoc-path tasks/auth-system.tsk
|
|
|
549
549
|
**Development Phase**:
|
|
550
550
|
|
|
551
551
|
- Multiple dialog trees can reference the same Taskdoc
|
|
552
|
-
- Team members collaborate by updating the same Taskdoc (via
|
|
552
|
+
- Team members collaborate by updating the same Taskdoc (via explicit Taskdoc mutation tools)
|
|
553
553
|
- Progress tracking persists across conversations
|
|
554
|
-
- Requirements evolve through
|
|
554
|
+
- Requirements evolve through Taskdoc mutation operations
|
|
555
555
|
- rtws hard rules:
|
|
556
556
|
- `*.tsk/**` is encapsulated Taskdoc state and is hard-denied for all general file tools.
|
|
557
557
|
- `.minds/**` is reserved rtws state (team config/memory/assets) and is hard-denied for all general file tools; manage it via dedicated tools like `team_mgmt`.
|
package/dist/docs/design.zh.md
CHANGED
|
@@ -412,7 +412,7 @@ Dominds 为 AI 智能体实现了**社会分工**——一种通过战略性心
|
|
|
412
412
|
**关键实现组件:**
|
|
413
413
|
|
|
414
414
|
- **`clear_mind`**:开启新一程对话的函数工具(用于清除对话噪音)
|
|
415
|
-
-
|
|
415
|
+
- **差遣牒变更工具**:`do_mind`、`mind_more`、`change_mind` 和 `never_mind` 用于跨对话层次结构更新权威差遣牒(不会开启新一程对话)
|
|
416
416
|
- **提醒项管理**:跨清理操作持续存在的对话范围工作记忆
|
|
417
417
|
- **层次对话架构**:具有扁平存储和自主管理的树结构对话
|
|
418
418
|
- **记忆层**:具有自主演进的对话范围和 rtws 持久化记忆
|
|
@@ -547,9 +547,9 @@ dominds dialog start --taskdoc-path tasks/auth-system.tsk
|
|
|
547
547
|
**开发阶段:**
|
|
548
548
|
|
|
549
549
|
- 多个对话树可以引用相同的差遣牒
|
|
550
|
-
-
|
|
550
|
+
- 团队成员通过显式差遣牒变更工具更新相同的差遣牒进行协作
|
|
551
551
|
- 进度跟踪跨越对话持续存在
|
|
552
|
-
-
|
|
552
|
+
- 要求通过差遣牒变更操作演变
|
|
553
553
|
- rtws 硬性规则:
|
|
554
554
|
- `*.tsk/**` 是封装的差遣牒状态,所有通用文件工具都硬性拒绝。
|
|
555
555
|
- `.minds/**` 是保留的 rtws 状态(团队配置/内存/资产),所有通用文件工具都硬性拒绝;通过 `team_mgmt` 等专用工具进行管理。
|
|
@@ -813,24 +813,32 @@ Invoke the function tool `clear_mind` with:
|
|
|
813
813
|
- Taskdoc remains unchanged and accessible
|
|
814
814
|
- Reminders provide continuity across the clarity operation
|
|
815
815
|
|
|
816
|
-
###
|
|
816
|
+
### Taskdoc Mutation Tools
|
|
817
817
|
|
|
818
|
-
**Purpose**:
|
|
818
|
+
**Purpose**: Mutate the shared Taskdoc content that all dialogs in the dialog tree reference (without starting a new dialog course). Treat the Taskdoc as the task’s **live coordination bulletin board**.
|
|
819
819
|
|
|
820
|
-
**
|
|
820
|
+
**Tools**:
|
|
821
|
+
|
|
822
|
+
- `do_mind`: create one new section; fails if the target already exists.
|
|
823
|
+
- `mind_more`: append small entries to an existing section; defaults to `progress`.
|
|
824
|
+
- `change_mind`: replace one existing section; fails if the target does not exist.
|
|
825
|
+
- `never_mind`: delete one existing section.
|
|
821
826
|
|
|
822
|
-
|
|
823
|
-
|
|
827
|
+
**Common section arguments**:
|
|
828
|
+
|
|
829
|
+
- `selector: "goals" | "constraints" | "progress"` for top-level sections; or a valid selector with `category`
|
|
830
|
+
- `category?: string`
|
|
831
|
+
- `content: string` for `do_mind` / `change_mind`
|
|
824
832
|
|
|
825
833
|
Example:
|
|
826
834
|
|
|
827
835
|
```text
|
|
828
|
-
Invoke
|
|
836
|
+
Invoke `do_mind` to create a missing section, or `change_mind` to replace an existing section.
|
|
829
837
|
```
|
|
830
838
|
|
|
831
839
|
**Behavior**:
|
|
832
840
|
|
|
833
|
-
- Updates the rtws (runtime workspace) Taskdoc content (exactly one section file in a `*.tsk/` Taskdoc package)
|
|
841
|
+
- Updates the rtws (runtime workspace) Taskdoc content (exactly one section file per call in a `*.tsk/` Taskdoc package)
|
|
834
842
|
- **Does not change the Taskdoc path.** `dlg.taskDocPath` is immutable for the dialog's entire lifecycle.
|
|
835
843
|
- The updated file immediately becomes available to all dialogs referencing it
|
|
836
844
|
- **Does not start a new dialog course.** If starting a new dialog course is desired, use `clear_mind` separately.
|
|
@@ -840,7 +848,7 @@ Invoke the function tool `change_mind` with:
|
|
|
840
848
|
|
|
841
849
|
**Implementation Notes**:
|
|
842
850
|
|
|
843
|
-
-
|
|
851
|
+
- Taskdoc mutation tools are only available in main dialogs (not sideDialogs); sideDialogs must ask the Taskdoc maintainer to update the shared Taskdoc and provide the new section, append entries, merged replacement draft, or section deletion request.
|
|
844
852
|
- For `*.tsk/` Taskdoc packages, the Taskdoc is encapsulated: general file tools must not read/write/list/delete anything under `*.tsk/`. See [`encapsulated-taskdoc.md`](./encapsulated-taskdoc.md).
|
|
845
853
|
|
|
846
854
|
---
|
|
@@ -855,7 +863,7 @@ Invoke the function tool `change_mind` with:
|
|
|
855
863
|
|
|
856
864
|
- Scoped to individual dialogs
|
|
857
865
|
- **Survive clear_mind operations**
|
|
858
|
-
- **Survive
|
|
866
|
+
- **Survive Taskdoc mutation operations**
|
|
859
867
|
- Provide guidance for refreshed mental focus
|
|
860
868
|
- Support structured capture of insights, decisions, and next steps
|
|
861
869
|
|
|
@@ -1297,6 +1305,21 @@ sequenceDiagram
|
|
|
1297
1305
|
end
|
|
1298
1306
|
```
|
|
1299
1307
|
|
|
1308
|
+
Call-site correspondence invariant: every `tellask` call-site `callId` must later have a
|
|
1309
|
+
same-`callId` historical correspondence point in the tellasker's dialog. A normal sideDialog reply,
|
|
1310
|
+
cross-course carryover, or registered-session replacement notice can close the call; silently removing
|
|
1311
|
+
or overwriting a pending round cannot.
|
|
1312
|
+
|
|
1313
|
+
WebUI external-link invariant: every `/dl/*` URL must be generated at the business call site with the
|
|
1314
|
+
target semantics written out there; avoid generic deep-link helpers. `/dl/callsite` only means the
|
|
1315
|
+
originating bubble in the tellasker's dialog: `selfId/course` are tellasker-dialog coordinates, and
|
|
1316
|
+
`callId` is that dialog's function-call id. SideDialog assignment/update targets are not call sites;
|
|
1317
|
+
they use `/dl/dialog` for the sideDialog, or `/dl/genseq` once the delivered assignment `genseq` is
|
|
1318
|
+
known.
|
|
1319
|
+
When an existing registered sideDialog is reused, the WebUI first links the new call-site bubble to
|
|
1320
|
+
the sideDialog via `tellask_call_callee_evt`; the later `tellask_call_anchor_evt` upgrades that target
|
|
1321
|
+
to the delivered sideDialog `genseq`.
|
|
1322
|
+
|
|
1300
1323
|
#### TYPE C: Transient SideDialog Tellask (`Fresh Tellask`) (`tellaskSessionless({ targetAgentId: "agentId", tellaskContent: "..." })`; `freshBootsReasoning({ tellaskContent: "..." })` is FBR tool-less)
|
|
1301
1324
|
|
|
1302
1325
|
```mermaid
|
|
@@ -1437,7 +1460,7 @@ sequenceDiagram
|
|
|
1437
1460
|
| Reminders | Preserved |
|
|
1438
1461
|
| Registry | Preserved |
|
|
1439
1462
|
|
|
1440
|
-
|
|
1463
|
+
Taskdoc mutation tools are not clarity operations; they update Taskdoc content in-place and do not clear messages/Q4H/reminders/registry.
|
|
1441
1464
|
|
|
1442
1465
|
---
|
|
1443
1466
|
|
|
@@ -790,24 +790,32 @@ async function checkSideDialogRevival(askerDialog: Dialog): Promise<void> {
|
|
|
790
790
|
- 差遣牒保持不变且可访问
|
|
791
791
|
- 提醒在清晰操作中提供连续性
|
|
792
792
|
|
|
793
|
-
###
|
|
793
|
+
### 差遣牒变更工具
|
|
794
794
|
|
|
795
|
-
|
|
795
|
+
**目的**:变更对话树中所有对话引用的共享差遣牒内容(不开启新一程对话)。把差遣牒当作任务的**实时协调公告板**。
|
|
796
796
|
|
|
797
|
-
|
|
797
|
+
**工具**:
|
|
798
|
+
|
|
799
|
+
- `do_mind`:创建一个新章节;若目标已存在则失败。
|
|
800
|
+
- `mind_more`:向已有章节追加少量条目;默认追加到 `progress`。
|
|
801
|
+
- `change_mind`:替换一个已有章节;若目标不存在则失败。
|
|
802
|
+
- `never_mind`:删除一个已有章节。
|
|
803
|
+
|
|
804
|
+
**通用章节参数**:
|
|
798
805
|
|
|
799
|
-
- `selector: "goals" | "constraints" | "progress"`
|
|
800
|
-
- `
|
|
806
|
+
- 顶层章节使用 `selector: "goals" | "constraints" | "progress"`;额外章节使用有效 `selector` 加 `category`
|
|
807
|
+
- `category?: string`
|
|
808
|
+
- `do_mind` / `change_mind` 使用 `content: string`
|
|
801
809
|
|
|
802
810
|
示例:
|
|
803
811
|
|
|
804
812
|
```text
|
|
805
|
-
|
|
813
|
+
调用 `do_mind` 创建缺失章节,或调用 `change_mind` 替换已有章节。
|
|
806
814
|
```
|
|
807
815
|
|
|
808
816
|
**行为**:
|
|
809
817
|
|
|
810
|
-
- 更新 rtws
|
|
818
|
+
- 更新 rtws(运行时工作区)差遣牒内容(每次调用变更 `*.tsk/` 任务包中恰好一个章节文件)
|
|
811
819
|
- **不更改差遣牒路径。** `dlg.taskDocPath` 在对话的整个生命周期中是不可变的。
|
|
812
820
|
- 更新的文件立即对引用它的所有对话可用
|
|
813
821
|
- **不开启新一程对话。** 如需开启新一程对话,请单独使用 `clear_mind`。
|
|
@@ -817,7 +825,7 @@ async function checkSideDialogRevival(askerDialog: Dialog): Promise<void> {
|
|
|
817
825
|
|
|
818
826
|
**实现说明**:
|
|
819
827
|
|
|
820
|
-
-
|
|
828
|
+
- 差遣牒变更工具仅在主线对话中可用(不在支线对话中);支线对话必须诉请差遣牒维护人更新共享差遣牒,并提供要新增的章节、要追加的条目、已合并好的替换稿或要删除的章节。
|
|
821
829
|
- 对于 `*.tsk/` 差遣牒任务包,差遣牒是封装的:通用文件工具不得读取/写入/列出/删除 `*.tsk/` 下的任何内容。请参阅 [`encapsulated-taskdoc.zh.md`](./encapsulated-taskdoc.zh.md)。
|
|
822
830
|
|
|
823
831
|
---
|
|
@@ -832,7 +840,7 @@ async function checkSideDialogRevival(askerDialog: Dialog): Promise<void> {
|
|
|
832
840
|
|
|
833
841
|
- 作用域为单个对话
|
|
834
842
|
- **在 clear_mind 操作中存活**
|
|
835
|
-
-
|
|
843
|
+
- **在差遣牒变更操作中存活**
|
|
836
844
|
- 为刷新后的精神焦点提供指导
|
|
837
845
|
- 支持结构化捕获见解、决策和下一步
|
|
838
846
|
|
|
@@ -1279,6 +1287,17 @@ sequenceDiagram
|
|
|
1279
1287
|
end
|
|
1280
1288
|
```
|
|
1281
1289
|
|
|
1290
|
+
call-site 呼应不变量:每个 `tellask` 发起点的 `callId`,后续都必须在诉请者对话历史里留下同
|
|
1291
|
+
`callId` 的呼应点。正常支线回复、跨程 carryover、已注册会话被更新后的替代通知都可以结束这次
|
|
1292
|
+
call;不能静默删除或覆盖 pending 轮次。
|
|
1293
|
+
|
|
1294
|
+
WebUI 外链不变量:生成 `/dl/*` URL 时必须在业务现场显式写出目标语义,避免复用泛化 deep-link
|
|
1295
|
+
helper。`/dl/callsite` 只表示诉请者对话里的发起气泡:`selfId/course` 是诉请者对话坐标,`callId`
|
|
1296
|
+
是该对话内的 function-call id。支线投递/更新目标不是 call-site,应使用 `/dl/dialog` 指向支线对话,
|
|
1297
|
+
或在投递 `genseq` 已知后使用 `/dl/genseq` 指向支线对话内的投递生成。
|
|
1298
|
+
复用已有注册支线时,WebUI 先用 `tellask_call_callee_evt` 把新发起气泡连到支线对话;后续
|
|
1299
|
+
`tellask_call_anchor_evt` 到达后再升级为支线投递 `genseq`。
|
|
1300
|
+
|
|
1282
1301
|
#### TYPE C:瞬态支线对话诉请(一次性诉请)(`tellaskSessionless({ targetAgentId: "agentId", tellaskContent: "..." })`,或 `freshBootsReasoning({ tellaskContent: "..." })`)
|
|
1283
1302
|
|
|
1284
1303
|
```mermaid
|
|
@@ -1432,7 +1451,7 @@ sequenceDiagram
|
|
|
1432
1451
|
| 提醒项 | 保留 |
|
|
1433
1452
|
| 注册表 | 保留 |
|
|
1434
1453
|
|
|
1435
|
-
|
|
1454
|
+
差遣牒变更工具不是清晰度操作;它们就地更新差遣牒内容,不会清除消息/Q4H/提醒项/注册表。
|
|
1436
1455
|
|
|
1437
1456
|
---
|
|
1438
1457
|
|
|
@@ -248,16 +248,16 @@ Example / 示例(概念):
|
|
|
248
248
|
- EN: **Taskdoc package** (ZH: **任务包**) is the on-disk directory ending in `.tsk/` that contains those three section files.
|
|
249
249
|
- ZH: **任务包(Taskdoc package)**是落地到磁盘上的目录形态:以 `.tsk/` 结尾的目录,包含上述三个分段文件。
|
|
250
250
|
|
|
251
|
-
- EN: Taskdocs are the "single source of truth" for team-shared task contracts. They MUST be edited via
|
|
252
|
-
- ZH: 差遣牒是全队共享任务契约的"单一事实来源"
|
|
251
|
+
- EN: Taskdocs are the "single source of truth" for team-shared task contracts. They MUST be edited via explicit Taskdoc control tools (`do_mind`, `mind_more`, `change_mind`, `never_mind`); generic file tools are **banned** from reading/writing anything under `**/*.tsk/`.
|
|
252
|
+
- ZH: 差遣牒是全队共享任务契约的"单一事实来源"。必须通过显式差遣牒控制工具(`do_mind`、`mind_more`、`change_mind`、`never_mind`)进行修改;通用文件工具**禁止**读/写 `**/*.tsk/` 下的任何内容。
|
|
253
253
|
|
|
254
254
|
- EN: Practically: treat the Taskdoc as the task’s **live coordination bulletin board**. If a decision/status/next-step affects others, write it back to `progress` (or `constraints`) — don’t leave it only in chat or reminders.
|
|
255
255
|
- ZH: 实践上:把差遣牒当作任务的**实时协调公告板**。任何会影响他人的关键决策/当前状态/下一步,都要写回 `progress`(或 `constraints`),不要只留在对话或提醒项里。
|
|
256
256
|
|
|
257
257
|
#### Section selector / 分段选择器
|
|
258
258
|
|
|
259
|
-
- EN: The selector passed to
|
|
260
|
-
- ZH:
|
|
259
|
+
- EN: The selector passed to Taskdoc mutation tools: `goals` / `constraints` / `progress`.
|
|
260
|
+
- ZH: 差遣牒变更工具的分段选择器:`goals` / `constraints` / `progress`。
|
|
261
261
|
|
|
262
262
|
### rtws(运行时工作区)
|
|
263
263
|
|